diff options
author | Michaël Zasso <targos@protonmail.com> | 2021-07-14 11:30:07 +0200 |
---|---|---|
committer | Michaël Zasso <targos@protonmail.com> | 2021-07-20 15:24:51 +0200 |
commit | 6cdd310275bb0f8056aa0ae6d95614e9ca5b70c7 (patch) | |
tree | 9ed37b19cd668894854b7f469010f7621e63ef81 /deps/v8 | |
parent | c0f10006c82d2d9896a552de98ed146f9542720d (diff) | |
download | node-new-6cdd310275bb0f8056aa0ae6d95614e9ca5b70c7.tar.gz |
deps: update V8 to 9.2.230.21
PR-URL: https://github.com/nodejs/node/pull/38990
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Robert Nagy <ronagy@icloud.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Diffstat (limited to 'deps/v8')
1435 files changed, 54507 insertions, 38158 deletions
diff --git a/deps/v8/.gn b/deps/v8/.gn index d4ad959954..a691fa339b 100644 --- a/deps/v8/.gn +++ b/deps/v8/.gn @@ -7,11 +7,21 @@ import("//build/dotfile_settings.gni") # The location of the build configuration file. buildconfig = "//build/config/BUILDCONFIG.gn" +# The python interpreter to use by default. On Windows, this will look +# for python3.exe and python3.bat. +script_executable = "python3" + # These are the targets to check headers for by default. The files in targets # matching these patterns (see "gn help label_pattern" for format) will have # their includes checked for proper dependencies when you run either # "gn check" or "gn gen --check". -check_targets = [] +no_check_targets = [ + "//:cppgc_base", + "//:v8_internal_headers", + "//src/inspector:inspector", + "//test/cctest:cctest_sources", + "//third_party/icu:*", +] # These are the list of GN files that run exec_script. This whitelist exists # to force additional review for new uses of exec_script, which is strongly diff --git a/deps/v8/AUTHORS b/deps/v8/AUTHORS index abfdc7887b..15909406cc 100644 --- a/deps/v8/AUTHORS +++ b/deps/v8/AUTHORS @@ -84,6 +84,7 @@ Colin Ihrig <cjihrig@gmail.com> Cong Zuo <zckevinzc@gmail.com> Daniel Andersson <kodandersson@gmail.com> Daniel Bevenius <daniel.bevenius@gmail.com> +Daniel Dromboski <dandromb@gmail.com> Daniel James <dnljms@gmail.com> David Carlier <devnexen@gmail.com> David Manouchehri <david@davidmanouchehri.com> @@ -229,6 +230,7 @@ Vladimir Krivosheev <develar@gmail.com> Vladimir Shutoff <vovan@shutoff.ru> Wei Wu <lazyparser@gmail.com> Wenlu Wang <kingwenlu@gmail.com> +Wenyu Zhao <wenyu.zhao@anu.edu.au> Wiktor Garbacz <wiktor.garbacz@gmail.com> Wouter Vermeiren <wouter.vermeiren@essensium.com> Xiaofang Zou <zouxiaofang@iscas.ac.cn> @@ -240,6 +242,7 @@ Yong Wang <ccyongwang@tencent.com> Youfeng Hao <ajihyf@gmail.com> Yu Yin <xwafish@gmail.com> Yusif Khudhur <yusif.khudhur@gmail.com> +Yuri Iozzelli <yuri@leaningtech.com> Zac Hansen <xaxxon@gmail.com> Zeynep Cankara <zeynepcankara402@gmail.com> Zhao Jiazhong <kyslie3100@gmail.com> diff --git a/deps/v8/BUILD.gn b/deps/v8/BUILD.gn index d2bfb6129d..5e3045bfdc 100644 --- a/deps/v8/BUILD.gn +++ b/deps/v8/BUILD.gn @@ -41,7 +41,7 @@ declare_args() { v8_enable_future = false # Sets -DSYSTEM_INSTRUMENTATION. Enables OS-dependent event tracing - v8_enable_system_instrumentation = true + v8_enable_system_instrumentation = is_win || is_mac # Sets the GUID for the ETW provider v8_etw_guid = "" @@ -95,8 +95,19 @@ declare_args() { v8_win64_unwinding_info = true # Enable code comments for builtins in the snapshot (impacts performance). + # This also enables v8_code_comments. v8_enable_snapshot_code_comments = false + # Allow runtime-enabled code comments (with --code-comments). Enabled by + # default in debug builds. + # Sets -dV8_CODE_COMMENTS + v8_code_comments = "" + + # Allow runtime-enabled debug code (with --debug-code). Enabled by default in + # debug builds. + # Sets -dV8_ENABLE_DEBUG_CODE + v8_enable_debug_code = "" + # Enable native counters from the snapshot (impacts performance, sets # -dV8_SNAPSHOT_NATIVE_CODE_COUNTERS). # This option will generate extra code in the snapshot to increment counters, @@ -200,10 +211,6 @@ declare_args() { (is_linux || is_chromeos || is_mac)) || (v8_current_cpu == "ppc64" && (is_linux || is_chromeos)) - # Temporary flag to allow embedders to update their microtasks scopes - # while rolling in a new version of V8. - v8_check_microtasks_scopes_consistency = "" - # Enable mitigations for executing untrusted code. # Disabled by default on ia32 due to conflicting requirements with embedded # builtins. Enabled by default on Android since it doesn't support @@ -272,6 +279,10 @@ declare_args() { # Enable heap reservation of size 4GB. Only possible for 64bit archs. cppgc_enable_caged_heap = v8_current_cpu == "x64" || v8_current_cpu == "arm64" + # Enable verification of live bytes in the marking verifier. + # TODO(v8:11785): Enable by default when running with the verifier. + cppgc_enable_verify_live_bytes = false + # Enable young generation in cppgc. cppgc_enable_young_generation = false @@ -300,6 +311,12 @@ declare_args() { # meaning that they are not switched to fast mode. # Sets -DV8_DICT_PROPERTY_CONST_TRACKING v8_dict_property_const_tracking = false + + # Enable map packing & unpacking (sets -dV8_MAP_PACKING). + v8_enable_map_packing = false + + # Allow for JS promise hooks (instead of just C++). + v8_allow_javascript_in_promise_hooks = false } # Derived defaults. @@ -321,9 +338,15 @@ if (v8_enable_test_features == "") { if (v8_enable_v8_checks == "") { v8_enable_v8_checks = v8_enable_debugging_features } -if (v8_check_microtasks_scopes_consistency == "") { - v8_check_microtasks_scopes_consistency = - v8_enable_debugging_features || dcheck_always_on +if (v8_enable_snapshot_code_comments) { + assert(v8_code_comments == true || v8_code_comments == "", + "v8_enable_snapshot_code_comments conflicts with v8_code_comments.") + v8_code_comments = true +} else if (v8_code_comments == "") { + v8_code_comments = v8_enable_debugging_features +} +if (v8_enable_debug_code == "") { + v8_enable_debug_code = v8_enable_debugging_features } if (v8_enable_snapshot_native_code_counters == "") { v8_enable_snapshot_native_code_counters = v8_enable_debugging_features @@ -333,7 +356,7 @@ if (v8_enable_pointer_compression == "") { v8_current_cpu == "arm64" || v8_current_cpu == "x64" } if (v8_enable_pointer_compression_shared_cage == "") { - v8_enable_pointer_compression_shared_cage = false + v8_enable_pointer_compression_shared_cage = v8_enable_pointer_compression } if (v8_enable_fast_torque == "") { v8_enable_fast_torque = v8_enable_fast_mksnapshot @@ -357,6 +380,13 @@ if (v8_enable_atomic_object_field_writes == "") { if (v8_enable_atomic_marking_state == "") { v8_enable_atomic_marking_state = v8_enable_concurrent_marking } +if (v8_enable_third_party_heap) { + v8_disable_write_barriers = true + v8_enable_single_generation = true + v8_enable_shared_ro_heap = false + v8_enable_pointer_compression = false + v8_enable_pointer_compression_shared_cage = false +} assert(!v8_enable_concurrent_marking || v8_enable_atomic_object_field_writes, "Concurrent marking requires atomic object field writes.") assert(!v8_enable_concurrent_marking || v8_enable_atomic_marking_state, @@ -386,7 +416,8 @@ if (v8_enable_short_builtin_calls && v8_enable_short_builtin_calls = false } if (v8_enable_shared_ro_heap == "") { - v8_enable_shared_ro_heap = !v8_enable_pointer_compression + v8_enable_shared_ro_heap = !v8_enable_pointer_compression || + v8_enable_pointer_compression_shared_cage } assert(!v8_disable_write_barriers || v8_enable_single_generation, @@ -398,15 +429,18 @@ assert(v8_current_cpu != "x86" || !v8_untrusted_code_mitigations, assert(v8_current_cpu == "arm64" || !v8_control_flow_integrity, "Control-flow integrity is only supported on arm64") -if (v8_enable_shared_ro_heap && v8_enable_pointer_compression) { +if (v8_enable_shared_ro_heap && v8_enable_pointer_compression && + !v8_enable_pointer_compression_shared_cage) { assert( is_linux || is_chromeos || is_android, "Sharing read-only heap with pointer compression is only supported on Linux or Android") } -assert( - !v8_enable_pointer_compression_shared_cage || !v8_enable_shared_ro_heap, - "Sharing read-only heap is not yet supported when sharing a pointer compression cage") +assert(!v8_enable_map_packing || !v8_enable_pointer_compression, + "Map packing does not support pointer compression") + +assert(!v8_enable_map_packing || v8_current_cpu == "x64", + "Map packing is only supported on x64") assert(!v8_use_multi_snapshots || !v8_control_flow_integrity, "Control-flow integrity does not support multisnapshots") @@ -418,6 +452,10 @@ assert( !v8_enable_pointer_compression_shared_cage || v8_enable_pointer_compression, "Can't share a pointer compression cage if pointers aren't compressed") +assert(!v8_enable_pointer_compression_shared_cage || v8_current_cpu == "x64" || + v8_current_cpu == "arm64", + "Sharing a pointer compression cage is only supported on x64 and arm64") + assert(!v8_enable_unconditional_write_barriers || !v8_disable_write_barriers, "Write barriers can't be both enabled and disabled") @@ -566,6 +604,7 @@ external_v8_defines = [ "V8_IMMINENT_DEPRECATION_WARNINGS", "V8_NO_ARGUMENTS_ADAPTOR", "V8_USE_PERFETTO", + "V8_MAP_PACKING", ] enabled_external_v8_defines = [] @@ -575,11 +614,11 @@ if (v8_enable_v8_checks) { } if (v8_enable_pointer_compression) { enabled_external_v8_defines += [ "V8_COMPRESS_POINTERS" ] -} -if (v8_enable_pointer_compression_shared_cage) { - enabled_external_v8_defines += [ "V8_COMPRESS_POINTERS_IN_SHARED_CAGE" ] -} else if (v8_enable_pointer_compression) { - enabled_external_v8_defines += [ "V8_COMPRESS_POINTERS_IN_ISOLATE_CAGE" ] + if (v8_enable_pointer_compression_shared_cage) { + enabled_external_v8_defines += [ "V8_COMPRESS_POINTERS_IN_SHARED_CAGE" ] + } else { + enabled_external_v8_defines += [ "V8_COMPRESS_POINTERS_IN_ISOLATE_CAGE" ] + } } if (v8_enable_pointer_compression || v8_enable_31bit_smis_on_64bit_arch) { enabled_external_v8_defines += [ "V8_31BIT_SMIS_ON_64BIT_ARCH" ] @@ -599,6 +638,9 @@ if (v8_imminent_deprecation_warnings) { if (v8_use_perfetto) { enabled_external_v8_defines += [ "V8_USE_PERFETTO" ] } +if (v8_enable_map_packing) { + enabled_external_v8_defines += [ "V8_MAP_PACKING" ] +} disabled_external_v8_defines = external_v8_defines - enabled_external_v8_defines @@ -665,6 +707,10 @@ config("features") { ":cppgc_header_features", ] + if (cppgc_enable_verify_live_bytes) { + defines += [ "CPPGC_VERIFY_LIVE_BYTES" ] + } + if (v8_embedder_string != "") { defines += [ "V8_EMBEDDER_STRING=\"$v8_embedder_string\"" ] } @@ -729,6 +775,12 @@ config("features") { if (v8_enable_handle_zapping) { defines += [ "ENABLE_HANDLE_ZAPPING" ] } + if (v8_code_comments == true) { + defines += [ "V8_CODE_COMMENTS" ] + } + if (v8_enable_debug_code) { + defines += [ "V8_ENABLE_DEBUG_CODE" ] + } if (v8_enable_snapshot_native_code_counters) { defines += [ "V8_SNAPSHOT_NATIVE_CODE_COUNTERS" ] } @@ -756,9 +808,6 @@ config("features") { if (v8_enable_lazy_source_positions) { defines += [ "V8_ENABLE_LAZY_SOURCE_POSITIONS" ] } - if (v8_check_microtasks_scopes_consistency) { - defines += [ "V8_CHECK_MICROTASKS_SCOPES_CONSISTENCY" ] - } if (v8_use_multi_snapshots) { defines += [ "V8_MULTI_SNAPSHOTS" ] } @@ -807,6 +856,9 @@ config("features") { if (v8_dict_property_const_tracking) { defines += [ "V8_DICT_PROPERTY_CONST_TRACKING" ] } + if (v8_allow_javascript_in_promise_hooks) { + defines += [ "V8_ALLOW_JAVASCRIPT_IN_PROMISE_HOOKS" ] + } } config("toolchain") { @@ -1038,6 +1090,10 @@ config("toolchain") { defines += [ "ENABLE_VERIFY_CSA" ] } + if (v8_enable_runtime_call_stats) { + defines += [ "V8_RUNTIME_CALL_STATS" ] + } + if (!v8_untrusted_code_mitigations) { defines += [ "DISABLE_UNTRUSTED_CODE_MITIGATIONS" ] } @@ -1244,6 +1300,8 @@ action("postmortem-metadata") { "src/objects/map.cc", "src/objects/map.h", "src/objects/map-inl.h", + "src/objects/megadom-handler.h", + "src/objects/megadom-handler-inl.h", "src/objects/name.h", "src/objects/name-inl.h", "src/objects/objects.h", @@ -1432,6 +1490,7 @@ torque_files = [ "src/objects/js-weak-refs.tq", "src/objects/literal-objects.tq", "src/objects/map.tq", + "src/objects/megadom-handler.tq", "src/objects/microtask.tq", "src/objects/module.tq", "src/objects/name.tq", @@ -1515,44 +1574,37 @@ template("run_torque") { destination_folder = "$target_gen_dir/torque-generated$suffix" - files = [ - "$target_gen_dir/torque-generated/bit-fields.h", - "$target_gen_dir/torque-generated/builtin-definitions.h", - "$target_gen_dir/torque-generated/class-debug-readers.cc", - "$target_gen_dir/torque-generated/class-debug-readers.h", - "$target_gen_dir/torque-generated/class-forward-declarations.h", - "$target_gen_dir/torque-generated/class-verifiers.cc", - "$target_gen_dir/torque-generated/class-verifiers.h", - "$target_gen_dir/torque-generated/csa-types.h", - "$target_gen_dir/torque-generated/debug-macros.cc", - "$target_gen_dir/torque-generated/debug-macros.h", - "$target_gen_dir/torque-generated/enum-verifiers.cc", - "$target_gen_dir/torque-generated/exported-macros-assembler.cc", - "$target_gen_dir/torque-generated/exported-macros-assembler.h", - "$target_gen_dir/torque-generated/factory.cc", - "$target_gen_dir/torque-generated/factory.inc", - "$target_gen_dir/torque-generated/field-offsets.h", - "$target_gen_dir/torque-generated/instance-types.h", - "$target_gen_dir/torque-generated/interface-descriptors.inc", - "$target_gen_dir/torque-generated/objects-body-descriptors-inl.inc", - "$target_gen_dir/torque-generated/objects-printer.cc", + outputs = [ + "$destination_folder/bit-fields.h", + "$destination_folder/builtin-definitions.h", + "$destination_folder/class-debug-readers.cc", + "$destination_folder/class-debug-readers.h", + "$destination_folder/class-forward-declarations.h", + "$destination_folder/class-verifiers.cc", + "$destination_folder/class-verifiers.h", + "$destination_folder/csa-types.h", + "$destination_folder/debug-macros.cc", + "$destination_folder/debug-macros.h", + "$destination_folder/enum-verifiers.cc", + "$destination_folder/exported-macros-assembler.cc", + "$destination_folder/exported-macros-assembler.h", + "$destination_folder/factory.cc", + "$destination_folder/factory.inc", + "$destination_folder/field-offsets.h", + "$destination_folder/instance-types.h", + "$destination_folder/interface-descriptors.inc", + "$destination_folder/objects-body-descriptors-inl.inc", + "$destination_folder/objects-printer.cc", ] - outputs = [] - foreach(file, files) { - outputs += [ string_replace(file, - "$target_gen_dir/torque-generated", - destination_folder) ] - } - foreach(file, torque_files) { filetq = string_replace(file, ".tq", "-tq") outputs += [ - "$target_gen_dir/torque-generated/$filetq-csa.cc", - "$target_gen_dir/torque-generated/$filetq-csa.h", - "$target_gen_dir/torque-generated/$filetq-inl.inc", - "$target_gen_dir/torque-generated/$filetq.cc", - "$target_gen_dir/torque-generated/$filetq.inc", + "$destination_folder/$filetq-csa.cc", + "$destination_folder/$filetq-csa.h", + "$destination_folder/$filetq-inl.inc", + "$destination_folder/$filetq.cc", + "$destination_folder/$filetq.inc", ] } @@ -1892,11 +1944,16 @@ action("v8_dump_build_config") { "v8_enable_atomic_object_field_writes=" + "$v8_enable_atomic_object_field_writes", "v8_enable_concurrent_marking=$v8_enable_concurrent_marking", + "v8_enable_single_generation=$v8_enable_single_generation", "v8_enable_i18n_support=$v8_enable_i18n_support", "v8_enable_verify_predictable=$v8_enable_verify_predictable", "v8_enable_verify_csa=$v8_enable_verify_csa", "v8_enable_lite_mode=$v8_enable_lite_mode", + "v8_enable_runtime_call_stats=$v8_enable_runtime_call_stats", "v8_enable_pointer_compression=$v8_enable_pointer_compression", + "v8_enable_pointer_compression_shared_cage=" + + "$v8_enable_pointer_compression_shared_cage", + "v8_enable_third_party_heap=$v8_enable_third_party_heap", "v8_enable_webassembly=$v8_enable_webassembly", "v8_control_flow_integrity=$v8_control_flow_integrity", "v8_target_cpu=\"$v8_target_cpu\"", @@ -1918,7 +1975,10 @@ action("v8_dump_build_config") { v8_source_set("v8_snapshot") { visibility = [ ":*" ] # Targets in this file can depend on this. - deps = [] + deps = [ + ":v8_internal_headers", + ":v8_libbase", + ] public_deps = [ # This should be public so downstream targets can declare the snapshot # output file as their inputs. @@ -2000,7 +2060,6 @@ v8_source_set("v8_initializers") { "src/builtins/builtins-conversion-gen.cc", "src/builtins/builtins-data-view-gen.h", "src/builtins/builtins-date-gen.cc", - "src/builtins/builtins-debug-gen.cc", "src/builtins/builtins-generator-gen.cc", "src/builtins/builtins-global-gen.cc", "src/builtins/builtins-handler-gen.cc", @@ -2226,9 +2285,8 @@ if (v8_generate_external_defines_header) { v8_header_set("v8_shared_internal_headers") { visibility = [ ":*", - "test/cctest:*", - "test/unittests:*", - "tools/debug_helper/:*", + "test/*", + "tools/*", ] configs = [ ":internal_config" ] @@ -2245,7 +2303,10 @@ v8_header_set("v8_shared_internal_headers") { } v8_header_set("v8_flags") { - visibility = [ ":*" ] + visibility = [ + ":*", + "tools/*", + ] configs = [ ":internal_config" ] @@ -2273,6 +2334,7 @@ v8_header_set("v8_internal_headers") { "src/api/api-arguments-inl.h", "src/api/api-arguments.h", "src/api/api-inl.h", + "src/api/api-macros-undef.h", "src/api/api-macros.h", "src/api/api-natives.h", "src/api/api.h", @@ -2289,6 +2351,7 @@ v8_header_set("v8_internal_headers") { "src/baseline/baseline-assembler-inl.h", "src/baseline/baseline-assembler.h", "src/baseline/baseline-compiler.h", + "src/baseline/baseline-osr-inl.h", "src/baseline/baseline.h", "src/baseline/bytecode-offset-iterator.h", "src/builtins/accessors.h", @@ -2321,6 +2384,7 @@ v8_header_set("v8_internal_headers") { "src/codegen/external-reference.h", "src/codegen/flush-instruction-cache.h", "src/codegen/handler-table.h", + "src/codegen/interface-descriptors-inl.h", "src/codegen/interface-descriptors.h", "src/codegen/label.h", "src/codegen/machine-type.h", @@ -2382,6 +2446,7 @@ v8_header_set("v8_internal_headers") { "src/compiler/common-operator-reducer.h", "src/compiler/common-operator.h", "src/compiler/compilation-dependencies.h", + "src/compiler/compilation-dependency.h", "src/compiler/compiler-source-position-table.h", "src/compiler/constant-folding-reducer.h", "src/compiler/control-equivalence.h", @@ -2448,18 +2513,17 @@ v8_header_set("v8_internal_headers") { "src/compiler/persistent-map.h", "src/compiler/pipeline-statistics.h", "src/compiler/pipeline.h", + "src/compiler/processed-feedback.h", "src/compiler/property-access-builder.h", "src/compiler/raw-machine-assembler.h", "src/compiler/redundancy-elimination.h", "src/compiler/refs-map.h", "src/compiler/representation-change.h", "src/compiler/schedule.h", - "src/compiler/scheduled-machine-lowering.h", "src/compiler/scheduler.h", "src/compiler/select-lowering.h", "src/compiler/serializer-for-background-compilation.h", "src/compiler/serializer-hints.h", - "src/compiler/simd-scalar-lowering.h", "src/compiler/simplified-lowering.h", "src/compiler/simplified-operator-reducer.h", "src/compiler/simplified-operator.h", @@ -2517,6 +2581,7 @@ v8_header_set("v8_internal_headers") { "src/execution/interrupts-scope.h", "src/execution/isolate-data.h", "src/execution/isolate-inl.h", + "src/execution/isolate-utils-inl.h", "src/execution/isolate-utils.h", "src/execution/isolate.h", "src/execution/local-isolate-inl.h", @@ -2557,6 +2622,7 @@ v8_header_set("v8_internal_headers") { "src/heap/base-space.h", "src/heap/basic-memory-chunk.h", "src/heap/code-object-registry.h", + "src/heap/code-range.h", "src/heap/code-stats.h", "src/heap/collection-barrier.h", "src/heap/combined-heap.h", @@ -2592,11 +2658,13 @@ v8_header_set("v8_internal_headers") { "src/heap/list.h", "src/heap/local-allocator-inl.h", "src/heap/local-allocator.h", + "src/heap/local-factory-inl.h", "src/heap/local-factory.h", "src/heap/local-heap-inl.h", "src/heap/local-heap.h", "src/heap/mark-compact-inl.h", "src/heap/mark-compact.h", + "src/heap/marking-barrier-inl.h", "src/heap/marking-barrier.h", "src/heap/marking-visitor-inl.h", "src/heap/marking-visitor.h", @@ -2679,13 +2747,13 @@ v8_header_set("v8_internal_headers") { "src/libsampler/sampler.h", "src/logging/code-events.h", "src/logging/counters-definitions.h", - "src/logging/counters-inl.h", "src/logging/counters.h", "src/logging/local-logger.h", "src/logging/log-inl.h", "src/logging/log-utils.h", "src/logging/log.h", "src/logging/metrics.h", + "src/logging/runtime-call-stats.h", "src/logging/tracing-flags.h", "src/numbers/bignum-dtoa.h", "src/numbers/bignum.h", @@ -2766,6 +2834,7 @@ v8_header_set("v8_internal_headers") { "src/objects/js-array-inl.h", "src/objects/js-array.h", "src/objects/js-collection-inl.h", + "src/objects/js-collection-iterator-inl.h", "src/objects/js-collection-iterator.h", "src/objects/js-collection.h", "src/objects/js-function-inl.h", @@ -2782,6 +2851,8 @@ v8_header_set("v8_internal_headers") { "src/objects/js-regexp-string-iterator-inl.h", "src/objects/js-regexp-string-iterator.h", "src/objects/js-regexp.h", + "src/objects/js-segments-inl.h", + "src/objects/js-segments.h", "src/objects/js-weak-refs-inl.h", "src/objects/js-weak-refs.h", "src/objects/keys.h", @@ -2797,6 +2868,8 @@ v8_header_set("v8_internal_headers") { "src/objects/map.h", "src/objects/maybe-object-inl.h", "src/objects/maybe-object.h", + "src/objects/megadom-handler-inl.h", + "src/objects/megadom-handler.h", "src/objects/microtask-inl.h", "src/objects/microtask.h", "src/objects/module-inl.h", @@ -2831,6 +2904,7 @@ v8_header_set("v8_internal_headers") { "src/objects/property.h", "src/objects/prototype-info-inl.h", "src/objects/prototype-info.h", + "src/objects/prototype-inl.h", "src/objects/prototype.h", "src/objects/regexp-match-info.h", "src/objects/scope-info-inl.h", @@ -2842,6 +2916,7 @@ v8_header_set("v8_internal_headers") { "src/objects/slots-atomic-inl.h", "src/objects/slots-inl.h", "src/objects/slots.h", + "src/objects/source-text-module-inl.h", "src/objects/source-text-module.h", "src/objects/stack-frame-info-inl.h", "src/objects/stack-frame-info.h", @@ -2880,6 +2955,7 @@ v8_header_set("v8_internal_headers") { "src/parsing/expression-scope.h", "src/parsing/func-name-inferrer.h", "src/parsing/import-assertions.h", + "src/parsing/keywords-gen.h", "src/parsing/literal-buffer.h", "src/parsing/parse-info.h", "src/parsing/parser-base.h", @@ -2892,6 +2968,7 @@ v8_header_set("v8_internal_headers") { "src/parsing/preparser.h", "src/parsing/rewriter.h", "src/parsing/scanner-character-streams.h", + "src/parsing/scanner-inl.h", "src/parsing/scanner.h", "src/parsing/token.h", "src/profiler/allocation-tracker.h", @@ -2939,10 +3016,6 @@ v8_header_set("v8_internal_headers") { "src/roots/roots.h", "src/runtime/runtime-utils.h", "src/runtime/runtime.h", - "src/sanitizer/asan.h", - "src/sanitizer/lsan-page-allocator.h", - "src/sanitizer/msan.h", - "src/sanitizer/tsan.h", "src/snapshot/code-serializer.h", "src/snapshot/context-deserializer.h", "src/snapshot/context-serializer.h", @@ -2980,6 +3053,7 @@ v8_header_set("v8_internal_headers") { "src/tasks/task-utils.h", "src/third_party/siphash/halfsiphash.h", "src/third_party/utf8-decoder/utf8-decoder.h", + "src/torque/runtime-macro-shims.h", "src/tracing/trace-event.h", "src/tracing/traced-value.h", "src/tracing/tracing-category-observer.h", @@ -3046,6 +3120,7 @@ v8_header_set("v8_internal_headers") { "src/wasm/jump-table-assembler.h", "src/wasm/leb-helper.h", "src/wasm/local-decl-encoder.h", + "src/wasm/memory-protection-key.h", "src/wasm/memory-tracing.h", "src/wasm/module-compiler.h", "src/wasm/module-decoder.h", @@ -3063,6 +3138,7 @@ v8_header_set("v8_internal_headers") { "src/wasm/wasm-feature-flags.h", "src/wasm/wasm-features.h", "src/wasm/wasm-import-wrapper-cache.h", + "src/wasm/wasm-init-expr.h", "src/wasm/wasm-js.h", "src/wasm/wasm-linkage.h", "src/wasm/wasm-module-builder.h", @@ -3070,6 +3146,7 @@ v8_header_set("v8_internal_headers") { "src/wasm/wasm-module.h", "src/wasm/wasm-objects-inl.h", "src/wasm/wasm-objects.h", + "src/wasm/wasm-opcodes-inl.h", "src/wasm/wasm-opcodes.h", "src/wasm/wasm-result.h", "src/wasm/wasm-serialization.h", @@ -3140,6 +3217,7 @@ v8_header_set("v8_internal_headers") { "src/codegen/ia32/assembler-ia32-inl.h", "src/codegen/ia32/assembler-ia32.h", "src/codegen/ia32/constants-ia32.h", + "src/codegen/ia32/interface-descriptors-ia32-inl.h", "src/codegen/ia32/macro-assembler-ia32.h", "src/codegen/ia32/register-ia32.h", "src/codegen/ia32/sse-instr.h", @@ -3158,6 +3236,7 @@ v8_header_set("v8_internal_headers") { "src/codegen/x64/assembler-x64.h", "src/codegen/x64/constants-x64.h", "src/codegen/x64/fma-instr.h", + "src/codegen/x64/interface-descriptors-x64-inl.h", "src/codegen/x64/macro-assembler-x64.h", "src/codegen/x64/register-x64.h", "src/codegen/x64/sse-instr.h", @@ -3187,6 +3266,7 @@ v8_header_set("v8_internal_headers") { "src/codegen/arm/assembler-arm-inl.h", "src/codegen/arm/assembler-arm.h", "src/codegen/arm/constants-arm.h", + "src/codegen/arm/interface-descriptors-arm-inl.h", "src/codegen/arm/macro-assembler-arm.h", "src/codegen/arm/register-arm.h", "src/compiler/backend/arm/instruction-codes-arm.h", @@ -3206,6 +3286,7 @@ v8_header_set("v8_internal_headers") { "src/codegen/arm64/decoder-arm64-inl.h", "src/codegen/arm64/decoder-arm64.h", "src/codegen/arm64/instructions-arm64.h", + "src/codegen/arm64/interface-descriptors-arm64-inl.h", "src/codegen/arm64/macro-assembler-arm64-inl.h", "src/codegen/arm64/macro-assembler-arm64.h", "src/codegen/arm64/register-arm64.h", @@ -3259,11 +3340,10 @@ v8_header_set("v8_internal_headers") { ] } else if (v8_current_cpu == "ppc") { sources += [ ### gcmole(arch:ppc) ### - "src/baseline/ppc/baseline-assembler-ppc-inl.h", - "src/baseline/ppc/baseline-compiler-ppc-inl.h", "src/codegen/ppc/assembler-ppc-inl.h", "src/codegen/ppc/assembler-ppc.h", "src/codegen/ppc/constants-ppc.h", + "src/codegen/ppc/interface-descriptors-ppc-inl.h", "src/codegen/ppc/macro-assembler-ppc.h", "src/codegen/ppc/register-ppc.h", "src/compiler/backend/ppc/instruction-codes-ppc.h", @@ -3275,11 +3355,10 @@ v8_header_set("v8_internal_headers") { ] } else if (v8_current_cpu == "ppc64") { sources += [ ### gcmole(arch:ppc64) ### - "src/baseline/ppc/baseline-assembler-ppc-inl.h", - "src/baseline/ppc/baseline-compiler-ppc-inl.h", "src/codegen/ppc/assembler-ppc-inl.h", "src/codegen/ppc/assembler-ppc.h", "src/codegen/ppc/constants-ppc.h", + "src/codegen/ppc/interface-descriptors-ppc-inl.h", "src/codegen/ppc/macro-assembler-ppc.h", "src/codegen/ppc/register-ppc.h", "src/compiler/backend/ppc/instruction-codes-ppc.h", @@ -3296,6 +3375,7 @@ v8_header_set("v8_internal_headers") { "src/codegen/s390/assembler-s390-inl.h", "src/codegen/s390/assembler-s390.h", "src/codegen/s390/constants-s390.h", + "src/codegen/s390/interface-descriptors-s390-inl.h", "src/codegen/s390/macro-assembler-s390.h", "src/codegen/s390/register-s390.h", "src/compiler/backend/s390/instruction-codes-s390.h", @@ -3384,6 +3464,7 @@ v8_compiler_sources = [ "src/compiler/graph-trimmer.cc", "src/compiler/graph-visualizer.cc", "src/compiler/graph.cc", + "src/compiler/heap-refs.cc", "src/compiler/js-call-reducer.cc", "src/compiler/js-context-specialization.cc", "src/compiler/js-create-lowering.cc", @@ -3430,7 +3511,6 @@ v8_compiler_sources = [ "src/compiler/refs-map.cc", "src/compiler/representation-change.cc", "src/compiler/schedule.cc", - "src/compiler/scheduled-machine-lowering.cc", "src/compiler/scheduler.cc", "src/compiler/select-lowering.cc", "src/compiler/serializer-for-background-compilation.cc", @@ -3452,7 +3532,6 @@ v8_compiler_sources = [ if (v8_enable_webassembly) { v8_compiler_sources += [ "src/compiler/int64-lowering.cc", - "src/compiler/simd-scalar-lowering.cc", "src/compiler/wasm-compiler.cc", ] } @@ -3676,6 +3755,7 @@ v8_source_set("v8_base_without_compiler") { "src/heap/base-space.cc", "src/heap/basic-memory-chunk.cc", "src/heap/code-object-registry.cc", + "src/heap/code-range.cc", "src/heap/code-stats.cc", "src/heap/collection-barrier.cc", "src/heap/combined-heap.cc", @@ -3763,6 +3843,7 @@ v8_source_set("v8_base_without_compiler") { "src/logging/log-utils.cc", "src/logging/log.cc", "src/logging/metrics.cc", + "src/logging/runtime-call-stats.cc", "src/logging/tracing-flags.cc", "src/numbers/bignum-dtoa.cc", "src/numbers/bignum.cc", @@ -3908,7 +3989,6 @@ v8_source_set("v8_base_without_compiler") { "src/runtime/runtime-typedarray.cc", "src/runtime/runtime-weak-refs.cc", "src/runtime/runtime.cc", - "src/sanitizer/lsan-page-allocator.cc", "src/snapshot/code-serializer.cc", "src/snapshot/context-deserializer.cc", "src/snapshot/context-serializer.cc", @@ -3977,6 +4057,7 @@ v8_source_set("v8_base_without_compiler") { "src/wasm/graph-builder-interface.cc", "src/wasm/jump-table-assembler.cc", "src/wasm/local-decl-encoder.cc", + "src/wasm/memory-protection-key.cc", "src/wasm/memory-tracing.cc", "src/wasm/module-compiler.cc", "src/wasm/module-decoder.cc", @@ -3988,10 +4069,12 @@ v8_source_set("v8_base_without_compiler") { "src/wasm/value-type.cc", "src/wasm/wasm-code-manager.cc", "src/wasm/wasm-debug.cc", + "src/wasm/wasm-debug.h", "src/wasm/wasm-engine.cc", "src/wasm/wasm-external-refs.cc", "src/wasm/wasm-features.cc", "src/wasm/wasm-import-wrapper-cache.cc", + "src/wasm/wasm-init-expr.cc", "src/wasm/wasm-js.cc", "src/wasm/wasm-module-builder.cc", "src/wasm/wasm-module-sourcemap.cc", @@ -4007,7 +4090,10 @@ v8_source_set("v8_base_without_compiler") { if (v8_enable_third_party_heap) { sources += v8_third_party_heap_files } else { - sources += [ "src/heap/third-party/heap-api-stub.cc" ] + sources += [ + "src/heap/third-party/heap-api-stub.cc", + "src/heap/third-party/heap-api.h", + ] } if (v8_enable_conservative_stack_scanning) { @@ -4027,24 +4113,15 @@ v8_source_set("v8_base_without_compiler") { ] } - if (v8_check_header_includes) { - # This file will be generated by tools/generate-header-include-checks.py - # if the "check_v8_header_includes" gclient variable is set. - import("check-header-includes/sources.gni") - sources += check_header_includes_sources - } - if (v8_current_cpu == "x86") { sources += [ ### gcmole(arch:ia32) ### "src/codegen/ia32/assembler-ia32.cc", "src/codegen/ia32/cpu-ia32.cc", - "src/codegen/ia32/interface-descriptors-ia32.cc", "src/codegen/ia32/macro-assembler-ia32.cc", "src/codegen/shared-ia32-x64/macro-assembler-shared-ia32-x64.cc", "src/compiler/backend/ia32/code-generator-ia32.cc", "src/compiler/backend/ia32/instruction-scheduler-ia32.cc", "src/compiler/backend/ia32/instruction-selector-ia32.cc", - "src/debug/ia32/debug-ia32.cc", "src/deoptimizer/ia32/deoptimizer-ia32.cc", "src/diagnostics/ia32/disasm-ia32.cc", "src/diagnostics/ia32/unwinder-ia32.cc", @@ -4056,13 +4133,11 @@ v8_source_set("v8_base_without_compiler") { "src/codegen/shared-ia32-x64/macro-assembler-shared-ia32-x64.cc", "src/codegen/x64/assembler-x64.cc", "src/codegen/x64/cpu-x64.cc", - "src/codegen/x64/interface-descriptors-x64.cc", "src/codegen/x64/macro-assembler-x64.cc", "src/compiler/backend/x64/code-generator-x64.cc", "src/compiler/backend/x64/instruction-scheduler-x64.cc", "src/compiler/backend/x64/instruction-selector-x64.cc", "src/compiler/backend/x64/unwinding-info-writer-x64.cc", - "src/debug/x64/debug-x64.cc", "src/deoptimizer/x64/deoptimizer-x64.cc", "src/diagnostics/x64/disasm-x64.cc", "src/diagnostics/x64/eh-frame-x64.cc", @@ -4091,13 +4166,11 @@ v8_source_set("v8_base_without_compiler") { "src/codegen/arm/assembler-arm.cc", "src/codegen/arm/constants-arm.cc", "src/codegen/arm/cpu-arm.cc", - "src/codegen/arm/interface-descriptors-arm.cc", "src/codegen/arm/macro-assembler-arm.cc", "src/compiler/backend/arm/code-generator-arm.cc", "src/compiler/backend/arm/instruction-scheduler-arm.cc", "src/compiler/backend/arm/instruction-selector-arm.cc", "src/compiler/backend/arm/unwinding-info-writer-arm.cc", - "src/debug/arm/debug-arm.cc", "src/deoptimizer/arm/deoptimizer-arm.cc", "src/diagnostics/arm/disasm-arm.cc", "src/diagnostics/arm/eh-frame-arm.cc", @@ -4113,7 +4186,6 @@ v8_source_set("v8_base_without_compiler") { "src/codegen/arm64/decoder-arm64.cc", "src/codegen/arm64/instructions-arm64-constants.cc", "src/codegen/arm64/instructions-arm64.cc", - "src/codegen/arm64/interface-descriptors-arm64.cc", "src/codegen/arm64/macro-assembler-arm64.cc", "src/codegen/arm64/register-arm64.cc", "src/codegen/arm64/utils-arm64.cc", @@ -4121,7 +4193,6 @@ v8_source_set("v8_base_without_compiler") { "src/compiler/backend/arm64/instruction-scheduler-arm64.cc", "src/compiler/backend/arm64/instruction-selector-arm64.cc", "src/compiler/backend/arm64/unwinding-info-writer-arm64.cc", - "src/debug/arm64/debug-arm64.cc", "src/deoptimizer/arm64/deoptimizer-arm64.cc", "src/diagnostics/arm64/disasm-arm64.cc", "src/diagnostics/arm64/eh-frame-arm64.cc", @@ -4146,12 +4217,11 @@ v8_source_set("v8_base_without_compiler") { "src/codegen/mips/assembler-mips.cc", "src/codegen/mips/constants-mips.cc", "src/codegen/mips/cpu-mips.cc", - "src/codegen/mips/interface-descriptors-mips.cc", + "src/codegen/mips/interface-descriptors-mips-inl.h", "src/codegen/mips/macro-assembler-mips.cc", "src/compiler/backend/mips/code-generator-mips.cc", "src/compiler/backend/mips/instruction-scheduler-mips.cc", "src/compiler/backend/mips/instruction-selector-mips.cc", - "src/debug/mips/debug-mips.cc", "src/deoptimizer/mips/deoptimizer-mips.cc", "src/diagnostics/mips/disasm-mips.cc", "src/diagnostics/mips/unwinder-mips.cc", @@ -4164,12 +4234,11 @@ v8_source_set("v8_base_without_compiler") { "src/codegen/mips64/assembler-mips64.cc", "src/codegen/mips64/constants-mips64.cc", "src/codegen/mips64/cpu-mips64.cc", - "src/codegen/mips64/interface-descriptors-mips64.cc", + "src/codegen/mips64/interface-descriptors-mips64-inl.h", "src/codegen/mips64/macro-assembler-mips64.cc", "src/compiler/backend/mips64/code-generator-mips64.cc", "src/compiler/backend/mips64/instruction-scheduler-mips64.cc", "src/compiler/backend/mips64/instruction-selector-mips64.cc", - "src/debug/mips64/debug-mips64.cc", "src/deoptimizer/mips64/deoptimizer-mips64.cc", "src/diagnostics/mips64/disasm-mips64.cc", "src/diagnostics/mips64/unwinder-mips64.cc", @@ -4182,13 +4251,11 @@ v8_source_set("v8_base_without_compiler") { "src/codegen/ppc/assembler-ppc.cc", "src/codegen/ppc/constants-ppc.cc", "src/codegen/ppc/cpu-ppc.cc", - "src/codegen/ppc/interface-descriptors-ppc.cc", "src/codegen/ppc/macro-assembler-ppc.cc", "src/compiler/backend/ppc/code-generator-ppc.cc", "src/compiler/backend/ppc/instruction-scheduler-ppc.cc", "src/compiler/backend/ppc/instruction-selector-ppc.cc", "src/compiler/backend/ppc/unwinding-info-writer-ppc.cc", - "src/debug/ppc/debug-ppc.cc", "src/deoptimizer/ppc/deoptimizer-ppc.cc", "src/diagnostics/ppc/disasm-ppc.cc", "src/diagnostics/ppc/eh-frame-ppc.cc", @@ -4202,13 +4269,11 @@ v8_source_set("v8_base_without_compiler") { "src/codegen/ppc/assembler-ppc.cc", "src/codegen/ppc/constants-ppc.cc", "src/codegen/ppc/cpu-ppc.cc", - "src/codegen/ppc/interface-descriptors-ppc.cc", "src/codegen/ppc/macro-assembler-ppc.cc", "src/compiler/backend/ppc/code-generator-ppc.cc", "src/compiler/backend/ppc/instruction-scheduler-ppc.cc", "src/compiler/backend/ppc/instruction-selector-ppc.cc", "src/compiler/backend/ppc/unwinding-info-writer-ppc.cc", - "src/debug/ppc/debug-ppc.cc", "src/deoptimizer/ppc/deoptimizer-ppc.cc", "src/diagnostics/ppc/disasm-ppc.cc", "src/diagnostics/ppc/eh-frame-ppc.cc", @@ -4222,13 +4287,11 @@ v8_source_set("v8_base_without_compiler") { "src/codegen/s390/assembler-s390.cc", "src/codegen/s390/constants-s390.cc", "src/codegen/s390/cpu-s390.cc", - "src/codegen/s390/interface-descriptors-s390.cc", "src/codegen/s390/macro-assembler-s390.cc", "src/compiler/backend/s390/code-generator-s390.cc", "src/compiler/backend/s390/instruction-scheduler-s390.cc", "src/compiler/backend/s390/instruction-selector-s390.cc", "src/compiler/backend/s390/unwinding-info-writer-s390.cc", - "src/debug/s390/debug-s390.cc", "src/deoptimizer/s390/deoptimizer-s390.cc", "src/diagnostics/s390/disasm-s390.cc", "src/diagnostics/s390/eh-frame-s390.cc", @@ -4239,15 +4302,17 @@ v8_source_set("v8_base_without_compiler") { ] } else if (v8_current_cpu == "riscv64") { sources += [ ### gcmole(arch:riscv64) ### + "src/baseline/riscv64/baseline-assembler-riscv64-inl.h", + "src/baseline/riscv64/baseline-compiler-riscv64-inl.h", + "src/codegen/riscv64/assembler-riscv64-inl.h", "src/codegen/riscv64/assembler-riscv64.cc", "src/codegen/riscv64/constants-riscv64.cc", "src/codegen/riscv64/cpu-riscv64.cc", - "src/codegen/riscv64/interface-descriptors-riscv64.cc", + "src/codegen/riscv64/interface-descriptors-riscv64-inl.h", "src/codegen/riscv64/macro-assembler-riscv64.cc", "src/compiler/backend/riscv64/code-generator-riscv64.cc", "src/compiler/backend/riscv64/instruction-scheduler-riscv64.cc", "src/compiler/backend/riscv64/instruction-selector-riscv64.cc", - "src/debug/riscv64/debug-riscv64.cc", "src/deoptimizer/riscv64/deoptimizer-riscv64.cc", "src/diagnostics/riscv64/disasm-riscv64.cc", "src/diagnostics/riscv64/unwinder-riscv64.cc", @@ -4497,8 +4562,6 @@ v8_component("v8_libbase") { "src/base/atomic-utils.h", "src/base/atomicops.h", "src/base/atomicops_internals_atomicword_compat.h", - "src/base/atomicops_internals_portable.h", - "src/base/atomicops_internals_std.h", "src/base/base-export.h", "src/base/bit-field.h", "src/base/bits-iterator.h", @@ -4532,7 +4595,6 @@ v8_component("v8_libbase") { "src/base/lazy-instance.h", "src/base/logging.cc", "src/base/logging.h", - "src/base/lsan.h", "src/base/macros.h", "src/base/memory.h", "src/base/once.cc", @@ -4558,6 +4620,11 @@ v8_component("v8_libbase") { "src/base/safe_conversions.h", "src/base/safe_conversions_arm_impl.h", "src/base/safe_conversions_impl.h", + "src/base/sanitizer/asan.h", + "src/base/sanitizer/lsan-page-allocator.cc", + "src/base/sanitizer/lsan-page-allocator.h", + "src/base/sanitizer/lsan.h", + "src/base/sanitizer/msan.h", "src/base/small-vector.h", "src/base/sys-info.cc", "src/base/sys-info.h", @@ -4694,9 +4761,11 @@ v8_component("v8_libbase") { if (is_tsan && !build_with_chromium) { data += [ "tools/sanitizers/tsan_suppressions.txt" ] + } - # llvm-symbolizer uses libstdc++ from the clang package. - data += [ "//third_party/llvm-build/Release+Asserts/lib/libstdc++.so.6" ] + if (using_sanitizer && !build_with_chromium) { + data_deps += + [ "//build/config/clang:llvm-symbolizer_data($host_toolchain)" ] } # TODO(jochen): Add support for qnx, freebsd, openbsd, netbsd, and solaris. @@ -4720,8 +4789,6 @@ v8_component("v8_libplatform") { "src/libplatform/delayed-task-queue.h", "src/libplatform/task-queue.cc", "src/libplatform/task-queue.h", - "src/libplatform/tracing/recorder-default.cc", - "src/libplatform/tracing/recorder.h", "src/libplatform/tracing/trace-buffer.cc", "src/libplatform/tracing/trace-buffer.h", "src/libplatform/tracing/trace-config.cc", @@ -4752,8 +4819,6 @@ v8_component("v8_libplatform") { if (v8_use_perfetto) { sources -= [ "//base/trace_event/common/trace_event_common.h", - "src/libplatform/tracing/recorder-default.cc", - "src/libplatform/tracing/recorder.h", "src/libplatform/tracing/trace-buffer.cc", "src/libplatform/tracing/trace-buffer.h", "src/libplatform/tracing/trace-object.cc", @@ -4768,9 +4833,15 @@ v8_component("v8_libplatform") { # TODO(skyostil): Switch TraceEventListener to protozero. "//third_party/perfetto/protos/perfetto/trace:lite", ] - } else if (is_win) { - sources -= [ "src/libplatform/tracing/recorder-default.cc" ] - sources += [ "src/libplatform/tracing/recorder-win.cc" ] + } + + if (v8_enable_system_instrumentation) { + sources += [ "src/libplatform/tracing/recorder.h" ] + if (is_mac) { + sources += [ "src/libplatform/tracing/recorder-mac.cc" ] + } else if (is_win) { + sources += [ "src/libplatform/tracing/recorder-win.cc" ] + } } } @@ -4794,8 +4865,13 @@ v8_source_set("fuzzer_support") { v8_source_set("v8_bigint") { sources = [ + "src/bigint/bigint-internal.cc", + "src/bigint/bigint-internal.h", "src/bigint/bigint.h", + "src/bigint/digit-arithmetic.h", + "src/bigint/mul-schoolbook.cc", "src/bigint/vector-arithmetic.cc", + "src/bigint/vector-arithmetic.h", ] configs = [ ":internal_config" ] @@ -4807,7 +4883,6 @@ v8_source_set("v8_cppgc_shared") { "src/heap/base/stack.h", "src/heap/base/worklist.cc", "src/heap/base/worklist.h", - "src/heap/cppgc/sanitizers.h", ] if (is_clang || !is_win) { @@ -4954,6 +5029,8 @@ v8_source_set("cppgc_base") { "src/heap/cppgc/marking-visitor.h", "src/heap/cppgc/marking-worklists.cc", "src/heap/cppgc/marking-worklists.h", + "src/heap/cppgc/memory.cc", + "src/heap/cppgc/memory.h", "src/heap/cppgc/metric-recorder.h", "src/heap/cppgc/name-trait.cc", "src/heap/cppgc/object-allocator.cc", @@ -4961,6 +5038,7 @@ v8_source_set("cppgc_base") { "src/heap/cppgc/object-poisoner.h", "src/heap/cppgc/object-size-trait.cc", "src/heap/cppgc/object-start-bitmap.h", + "src/heap/cppgc/object-view.h", "src/heap/cppgc/page-memory.cc", "src/heap/cppgc/page-memory.h", "src/heap/cppgc/persistent-node.cc", @@ -5032,6 +5110,35 @@ v8_source_set("cppgc_base_for_testing") { public_deps = [ ":cppgc_base" ] } +if (v8_check_header_includes) { + # This file will be generated by tools/generate-header-include-checks.py + # if the "check_v8_header_includes" gclient variable is set. + import("check-header-includes/sources.gni") + v8_source_set("check_headers") { + configs = [ ":internal_config" ] + sources = check_header_includes_sources + + # Any rules that contain headers files should be added here either directly + # or indirectly by including something that has it transitively in its + # public_deps. + deps = [ + ":d8", + ":mksnapshot", + ":torque_base", + ":torque_ls_base", + ":v8_base_without_compiler", + ":v8_bigint", + ":v8_initializers", + ":v8_internal_headers", + ":v8_libbase", + ":v8_maybe_icu", + ":wee8", + "src/inspector:inspector", + "src/inspector:inspector_string_conversions", + ] + } +} + ############################################################################### # Produce a single static library for embedders # @@ -5284,6 +5391,10 @@ group("gn_all") { if (want_v8_shell) { deps += [ ":v8_shell" ] } + + if (v8_check_header_includes) { + deps += [ ":check_headers" ] + } } group("v8_python_base") { @@ -6199,9 +6310,7 @@ if (!build_with_chromium && v8_use_perfetto) { configs = [ ":v8_tracing_config" ] public_configs = [ "//third_party/perfetto/gn:public_config" ] deps = [ - "//third_party/perfetto/src/trace_processor:export_json", "//third_party/perfetto/src/trace_processor:storage_minimal", - "//third_party/perfetto/src/tracing:client_api", "//third_party/perfetto/src/tracing/core", # TODO(skyostil): Support non-POSIX platforms. @@ -6210,5 +6319,11 @@ if (!build_with_chromium && v8_use_perfetto) { "//third_party/perfetto/src/tracing:in_process_backend", "//third_party/perfetto/src/tracing:platform_impl", ] + + public_deps = [ + "//third_party/perfetto/include/perfetto/trace_processor", + "//third_party/perfetto/src/trace_processor:export_json", + "//third_party/perfetto/src/tracing:client_api", + ] } } # if (!build_with_chromium && v8_use_perfetto) diff --git a/deps/v8/DEPS b/deps/v8/DEPS index b27a4e8e8f..d3de2c5ddc 100644 --- a/deps/v8/DEPS +++ b/deps/v8/DEPS @@ -9,7 +9,6 @@ gclient_gn_args = [ # TODO(https://crbug.com/1137662, https://crbug.com/1080854) # Remove when migration is complete. 'checkout_fuchsia_for_arm64_host', - 'checkout_google_benchmark', ] vars = { @@ -44,13 +43,11 @@ vars = { 'download_jsfunfuzz': False, 'check_v8_header_includes': False, - 'checkout_google_benchmark' : False, - # GN CIPD package version. - 'gn_version': 'git_revision:dba01723a441c358d843a575cb7720d54ddcdf92', + 'gn_version': 'git_revision:39a87c0b36310bdf06b692c098f199a0d97fc810', # luci-go CIPD package version. - 'luci_go': 'git_revision:d6d24b11ecded4d89f3dfd1b2e5a0072a3d4ab15', + 'luci_go': 'git_revision:22d464e2f8f3bd2bd33f69fe819326d63f881008', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling android_sdk_build-tools_version @@ -88,15 +85,15 @@ vars = { deps = { 'build': - Var('chromium_url') + '/chromium/src/build.git' + '@' + '77edba11e25386aa719d4f08c3ce2d8c4f868c15', + Var('chromium_url') + '/chromium/src/build.git' + '@' + '4036cf1b17581f5668b487a25e252d56e0321a7f', 'third_party/depot_tools': - Var('chromium_url') + '/chromium/tools/depot_tools.git' + '@' + '98a52e2e312dd10d7fcf281e322039a6b706b86b', + Var('chromium_url') + '/chromium/tools/depot_tools.git' + '@' + '6b0a611c2c692684f94c0c3629f793feebd16b39', 'third_party/icu': - Var('chromium_url') + '/chromium/deps/icu.git' + '@' + '81d656878ec611cb0b42d52c82e9dae93920d9ba', + Var('chromium_url') + '/chromium/deps/icu.git' + '@' + 'f022e298b4f4a782486bb6d5ce6589c998b51fe2', 'third_party/instrumented_libraries': - Var('chromium_url') + '/chromium/src/third_party/instrumented_libraries.git' + '@' + '084aee04777db574038af9e9d33ca5caed577462', + Var('chromium_url') + '/chromium/src/third_party/instrumented_libraries.git' + '@' + '4ae2535e8e894c3cd81d46aacdaf151b5df30709', 'buildtools': - Var('chromium_url') + '/chromium/src/buildtools.git' + '@' + '5dbd89c9d9c0b0ff47cefdc2bc421b8c9a1c5a21', + Var('chromium_url') + '/chromium/src/buildtools.git' + '@' + '20b1d0fc13ebaa263a1248f08814f523a86e6bed', 'buildtools/clang_format/script': Var('chromium_url') + '/external/github.com/llvm/llvm-project/clang/tools/clang-format.git' + '@' + '99803d74e35962f63a775f29477882afd4d57d94', 'buildtools/linux64': { @@ -122,9 +119,9 @@ deps = { 'buildtools/third_party/libc++/trunk': Var('chromium_url') + '/external/github.com/llvm/llvm-project/libcxx.git' + '@' + '8fa87946779682841e21e2da977eccfb6cb3bded', 'buildtools/third_party/libc++abi/trunk': - Var('chromium_url') + '/external/github.com/llvm/llvm-project/libcxxabi.git' + '@' + 'd0f33885a2ffa7d5af74af6065b60eb48e3c70f5', + Var('chromium_url') + '/external/github.com/llvm/llvm-project/libcxxabi.git' + '@' + '767de317f97343db64af048e3d198ab8b10fee5d', 'buildtools/third_party/libunwind/trunk': - Var('chromium_url') + '/external/github.com/llvm/llvm-project/libunwind.git' + '@' + '08f35c8514a74817103121def05351186830d4b7', + Var('chromium_url') + '/external/github.com/llvm/llvm-project/libunwind.git' + '@' + '7846d256355e40273f7cc192c8f5893e8665a1f9', 'buildtools/win': { 'packages': [ { @@ -136,7 +133,7 @@ deps = { 'condition': 'host_os == "win"', }, 'base/trace_event/common': - Var('chromium_url') + '/chromium/src/base/trace_event/common.git' + '@' + 'cab90cbdaaf4444d67aef6ce3cef09fc5fdeb560', + Var('chromium_url') + '/chromium/src/base/trace_event/common.git' + '@' + 'd5bb24e5d9802c8c917fcaa4375d5239a586c168', 'third_party/android_ndk': { 'url': Var('chromium_url') + '/android_ndk.git' + '@' + '401019bf85744311b26c88ced255cd53401af8b7', 'condition': 'checkout_android', @@ -184,7 +181,7 @@ deps = { 'dep_type': 'cipd', }, 'third_party/catapult': { - 'url': Var('chromium_url') + '/catapult.git' + '@' + '41a5e5e465ad93d6e08224613d3544334a6278bc', + 'url': Var('chromium_url') + '/catapult.git' + '@' + 'c1e1d559b46476584ec0eb1d83bd7f43fa5a1b36', 'condition': 'checkout_android', }, 'third_party/colorama/src': { @@ -196,10 +193,9 @@ deps = { 'condition': 'checkout_fuchsia', }, 'third_party/googletest/src': - Var('chromium_url') + '/external/github.com/google/googletest.git' + '@' + '07f4869221012b16b7f9ee685d94856e1fc9f361', + Var('chromium_url') + '/external/github.com/google/googletest.git' + '@' + '23ef29555ef4789f555f1ba8c51b4c52975f0907', 'third_party/google_benchmark/src': { - 'url': Var('chromium_url') + '/external/github.com/google/benchmark.git' + '@' + '7f27afe83b82f3a98baf58ef595814b9d42a5b2b', - 'condition': 'checkout_google_benchmark', + 'url': Var('chromium_url') + '/external/github.com/google/benchmark.git' + '@' + '7d0d9061d83b663ce05d9de5da3d5865a3845b79', }, 'third_party/jinja2': Var('chromium_url') + '/chromium/src/third_party/jinja2.git' + '@' + '11b6b3e5971d760bd2d310f77643f55a818a6d25', @@ -212,7 +208,7 @@ deps = { 'test/mozilla/data': Var('chromium_url') + '/v8/deps/third_party/mozilla-tests.git' + '@' + 'f6c578a10ea707b1a8ab0b88943fe5115ce2b9be', 'test/test262/data': - Var('chromium_url') + '/external/github.com/tc39/test262.git' + '@' + '31126581e7290f9233c29cefd93f66c6ac78f1c9', + Var('chromium_url') + '/external/github.com/tc39/test262.git' + '@' + '6d353a4436747e2de8820efac27ae5ef7e601b60', 'test/test262/harness': Var('chromium_url') + '/external/github.com/test262-utils/test262-harness-py.git' + '@' + '278bcfaed0dcaa13936831fb1769d15e7c1e3b2b', 'third_party/qemu-linux-x64': { @@ -239,7 +235,7 @@ deps = { 'packages': [ { 'package': 'fuchsia/third_party/aemu/linux-amd64', - 'version': 'SeLS6a0f6IL-PCOUKbMTN5LYgjjJbDSnb3DGf5q9pwsC' + 'version': '-Sz2gSN_5yVSHDlitjxUlmZpHuz-F2kFDW6TnmggCZoC' }, ], 'condition': 'host_os == "linux" and checkout_fuchsia', @@ -256,7 +252,7 @@ deps = { 'dep_type': 'cipd', }, 'tools/clang': - Var('chromium_url') + '/chromium/src/tools/clang.git' + '@' + 'a387faa2a6741f565e45d78804a49a0e55de5909', + Var('chromium_url') + '/chromium/src/tools/clang.git' + '@' + 'a38f01b956e091d5e698d2af484c81cd4e9a2a2d', 'tools/luci-go': { 'packages': [ { @@ -290,7 +286,7 @@ deps = { 'third_party/protobuf': Var('chromium_url') + '/external/github.com/google/protobuf'+ '@' + '6a59a2ad1f61d9696092f79b6d74368b4d7970a3', 'third_party/zlib': - Var('chromium_url') + '/chromium/src/third_party/zlib.git'+ '@' + '09490503d0f201b81e03f5ca0ab8ba8ee76d4a8e', + Var('chromium_url') + '/chromium/src/third_party/zlib.git'+ '@' + '5b8d433953beb2a75a755ba321a3076b95f7cdb9', 'third_party/jsoncpp/source': Var('chromium_url') + '/external/github.com/open-source-parsers/jsoncpp.git'+ '@' + '9059f5cad030ba11d37818847443a53918c327b1', 'third_party/ittapi': { diff --git a/deps/v8/OWNERS b/deps/v8/OWNERS index 2a478dbdc5..2ad1949b51 100644 --- a/deps/v8/OWNERS +++ b/deps/v8/OWNERS @@ -21,7 +21,7 @@ per-file PRESUBMIT.py=file:INFRA_OWNERS per-file codereview.settings=file:INFRA_OWNERS per-file AUTHORS=file:COMMON_OWNERS -per-file WATCHLIST=file:COMMON_OWNERS +per-file WATCHLISTS=file:COMMON_OWNERS per-file *-mips*=file:MIPS_OWNERS per-file *-mips64*=file:MIPS_OWNERS diff --git a/deps/v8/PRESUBMIT.py b/deps/v8/PRESUBMIT.py index 2ee14d545e..61963c62f6 100644 --- a/deps/v8/PRESUBMIT.py +++ b/deps/v8/PRESUBMIT.py @@ -279,7 +279,7 @@ def _CheckHeadersHaveIncludeGuards(input_api, output_api): for line in f.NewContents(): for i in range(len(guard_patterns)): if guard_patterns[i].match(line): - found_patterns[i] = True + found_patterns[i] = True if skip_check_pattern.match(line): file_omitted = True break @@ -485,7 +485,9 @@ def _CheckNoexceptAnnotations(input_api, output_api): files_to_check=(r'src[\\\/].*', r'test[\\\/].*'), # Skip api.cc since we cannot easily add the 'noexcept' annotation to # public methods. - files_to_skip=(r'src[\\\/]api[\\\/]api\.cc',)) + # Skip src/bigint/ because it's meant to be V8-independent. + files_to_skip=(r'src[\\\/]api[\\\/]api\.cc', + r'src[\\\/]bigint[\\\/].*')) # matches any class name. class_name = r'\b([A-Z][A-Za-z0-9_:]*)(?:::\1)?' diff --git a/deps/v8/RISCV_OWNERS b/deps/v8/RISCV_OWNERS index f3240b500b..8f8e15a40a 100644 --- a/deps/v8/RISCV_OWNERS +++ b/deps/v8/RISCV_OWNERS @@ -1,3 +1,3 @@ brice.dobry@futurewei.com -lazyparser@gmail.com peng.w@rioslab.org +qiuji@iscas.ac.cn diff --git a/deps/v8/WATCHLISTS b/deps/v8/WATCHLISTS index fa95f144cb..c54f15ad79 100644 --- a/deps/v8/WATCHLISTS +++ b/deps/v8/WATCHLISTS @@ -51,6 +51,9 @@ '|test/cctest/interpreter/' \ '|test/unittests/interpreter/', }, + 'baseline': { + 'filepath': 'src/baseline/' + }, 'feature_shipping_status': { 'filepath': 'src/flags/flag-definitions.h', }, @@ -91,6 +94,9 @@ 'filepath': 'src/base/ieee754\.(cc|h)' \ '|src/base/overflowing-math.h' \ '|LICENSE.fdlibm', + }, + 'regexp': { + 'filepath': 'src/.*regexp', } }, @@ -110,6 +116,10 @@ 'interpreter': [ 'rmcilroy@chromium.org', ], + 'baseline': [ + 'leszeks+watch@chromium.org', + 'verwaest+watch@chromium.org', + ], 'feature_shipping_status': [ 'hablich@chromium.org', ], @@ -142,5 +152,9 @@ 'rtoy+watch@chromium.org', 'hongchan+watch@chromium.org' ], + 'regexp': [ + 'jgruber+watch@chromium.org', + 'pthier+watch@chromium.org' + ], }, } diff --git a/deps/v8/base/trace_event/common/trace_event_common.h b/deps/v8/base/trace_event/common/trace_event_common.h index dcbb09bb66..dff2f9b277 100644 --- a/deps/v8/base/trace_event/common/trace_event_common.h +++ b/deps/v8/base/trace_event/common/trace_event_common.h @@ -256,10 +256,8 @@ namespace perfetto { namespace legacy { template <> -bool BASE_EXPORT ConvertThreadId(const ::base::PlatformThreadId& thread, - uint64_t* track_uuid_out, - int32_t* pid_override_out, - int32_t* tid_override_out); +perfetto::ThreadTrack BASE_EXPORT +ConvertThreadId(const ::base::PlatformThreadId& thread); } // namespace legacy diff --git a/deps/v8/gni/v8.gni b/deps/v8/gni/v8.gni index 9325baf996..8741e86c08 100644 --- a/deps/v8/gni/v8.gni +++ b/deps/v8/gni/v8.gni @@ -75,13 +75,16 @@ declare_args() { # executed as standard JavaScript instead. v8_enable_webassembly = "" + # Enable runtime call stats. + v8_enable_runtime_call_stats = true + # Add fuzzilli fuzzer support. v8_fuzzilli = false # Scan the call stack conservatively during garbage collection. v8_enable_conservative_stack_scanning = false - v8_enable_google_benchmark = checkout_google_benchmark + v8_enable_google_benchmark = false cppgc_is_standalone = false } diff --git a/deps/v8/include/cppgc/allocation.h b/deps/v8/include/cppgc/allocation.h index f4f0e72bd5..7a803cf2cc 100644 --- a/deps/v8/include/cppgc/allocation.h +++ b/deps/v8/include/cppgc/allocation.h @@ -8,6 +8,7 @@ #include <stdint.h> #include <atomic> +#include <type_traits> #include "cppgc/custom-space.h" #include "cppgc/garbage-collected.h" @@ -103,6 +104,10 @@ class MakeGarbageCollectedTraitBase * \returns the memory to construct an object of type T on. */ V8_INLINE static void* Allocate(AllocationHandle& handle, size_t size) { + static_assert( + std::is_base_of<typename T::ParentMostGarbageCollectedType, T>::value, + "U of GarbageCollected<U> must be a base of T. Check " + "GarbageCollected<T> base class inheritance."); return SpacePolicy< typename internal::GCInfoFolding< T, typename T::ParentMostGarbageCollectedType>::ResultType, diff --git a/deps/v8/include/cppgc/cross-thread-persistent.h b/deps/v8/include/cppgc/cross-thread-persistent.h index 9cfcd23fdf..fe61e9acbc 100644 --- a/deps/v8/include/cppgc/cross-thread-persistent.h +++ b/deps/v8/include/cppgc/cross-thread-persistent.h @@ -28,19 +28,19 @@ class BasicCrossThreadPersistent final : public PersistentBase, ~BasicCrossThreadPersistent() { Clear(); } - BasicCrossThreadPersistent( // NOLINT + BasicCrossThreadPersistent( const SourceLocation& loc = SourceLocation::Current()) : LocationPolicy(loc) {} - BasicCrossThreadPersistent( // NOLINT + BasicCrossThreadPersistent( std::nullptr_t, const SourceLocation& loc = SourceLocation::Current()) : LocationPolicy(loc) {} - BasicCrossThreadPersistent( // NOLINT + BasicCrossThreadPersistent( SentinelPointer s, const SourceLocation& loc = SourceLocation::Current()) : PersistentBase(s), LocationPolicy(loc) {} - BasicCrossThreadPersistent( // NOLINT + BasicCrossThreadPersistent( T* raw, const SourceLocation& loc = SourceLocation::Current()) : PersistentBase(raw), LocationPolicy(loc) { if (!IsValid(raw)) return; @@ -58,7 +58,7 @@ class BasicCrossThreadPersistent final : public PersistentBase, friend class BasicCrossThreadPersistent; }; - BasicCrossThreadPersistent( // NOLINT + BasicCrossThreadPersistent( UnsafeCtorTag, T* raw, const SourceLocation& loc = SourceLocation::Current()) : PersistentBase(raw), LocationPolicy(loc) { @@ -68,14 +68,14 @@ class BasicCrossThreadPersistent final : public PersistentBase, this->CheckPointer(raw); } - BasicCrossThreadPersistent( // NOLINT + BasicCrossThreadPersistent( T& raw, const SourceLocation& loc = SourceLocation::Current()) : BasicCrossThreadPersistent(&raw, loc) {} template <typename U, typename MemberBarrierPolicy, typename MemberWeaknessTag, typename MemberCheckingPolicy, typename = std::enable_if_t<std::is_base_of<T, U>::value>> - BasicCrossThreadPersistent( // NOLINT + BasicCrossThreadPersistent( internal::BasicMember<U, MemberBarrierPolicy, MemberWeaknessTag, MemberCheckingPolicy> member, @@ -94,7 +94,7 @@ class BasicCrossThreadPersistent final : public PersistentBase, template <typename U, typename OtherWeaknessPolicy, typename OtherLocationPolicy, typename OtherCheckingPolicy, typename = std::enable_if_t<std::is_base_of<T, U>::value>> - BasicCrossThreadPersistent( // NOLINT + BasicCrossThreadPersistent( const BasicCrossThreadPersistent<U, OtherWeaknessPolicy, OtherLocationPolicy, OtherCheckingPolicy>& other, @@ -139,7 +139,7 @@ class BasicCrossThreadPersistent final : public PersistentBase, GetNode()->UpdateOwner(this); other.SetValue(nullptr); other.SetNode(nullptr); - this->CheckPointer(GetValue()); + this->CheckPointer(Get()); return *this; } @@ -236,7 +236,7 @@ class BasicCrossThreadPersistent final : public PersistentBase, * * \returns the object. */ - operator T*() const { return Get(); } // NOLINT + operator T*() const { return Get(); } /** * Dereferences the stored object. diff --git a/deps/v8/include/cppgc/explicit-management.h b/deps/v8/include/cppgc/explicit-management.h index 8fb321c08c..cdb6af4858 100644 --- a/deps/v8/include/cppgc/explicit-management.h +++ b/deps/v8/include/cppgc/explicit-management.h @@ -12,9 +12,12 @@ #include "cppgc/type-traits.h" namespace cppgc { + +class HeapHandle; + namespace internal { -V8_EXPORT void FreeUnreferencedObject(void*); +V8_EXPORT void FreeUnreferencedObject(HeapHandle&, void*); V8_EXPORT bool Resize(void*, size_t); } // namespace internal @@ -30,15 +33,19 @@ namespace subtle { * to `object` after calling `FreeUnreferencedObject()`. In case such a * reference exists, it's use results in a use-after-free. * + * To aid in using the API, `FreeUnreferencedObject()` may be called from + * destructors on objects that would be reclaimed in the same garbage collection + * cycle. + * + * \param heap_handle The corresponding heap. * \param object Reference to an object that is of type `GarbageCollected` and * should be immediately reclaimed. */ template <typename T> -void FreeUnreferencedObject(T* object) { +void FreeUnreferencedObject(HeapHandle& heap_handle, T& object) { static_assert(IsGarbageCollectedTypeV<T>, "Object must be of type GarbageCollected."); - if (!object) return; - internal::FreeUnreferencedObject(object); + internal::FreeUnreferencedObject(heap_handle, &object); } /** @@ -53,6 +60,8 @@ void FreeUnreferencedObject(T* object) { * object down, the reclaimed area is not used anymore. Any subsequent use * results in a use-after-free. * + * The `object` must be live when calling `Resize()`. + * * \param object Reference to an object that is of type `GarbageCollected` and * should be resized. * \param additional_bytes Bytes in addition to sizeof(T) that the object should diff --git a/deps/v8/include/cppgc/heap-statistics.h b/deps/v8/include/cppgc/heap-statistics.h index cf8d6633cc..2fe6e1ae58 100644 --- a/deps/v8/include/cppgc/heap-statistics.h +++ b/deps/v8/include/cppgc/heap-statistics.h @@ -57,7 +57,7 @@ struct HeapStatistics final { }; /** - * Stastistics of the freelist (used only in non-large object spaces). For + * Statistics of the freelist (used only in non-large object spaces). For * each bucket in the freelist the statistics record the bucket size, the * number of freelist entries in the bucket, and the overall allocated memory * consumed by these freelist entries. @@ -67,7 +67,7 @@ struct HeapStatistics final { std::vector<size_t> bucket_size; /** number of freelist entries per bucket. */ std::vector<size_t> free_count; - /** memory size concumed by freelist entries per size. */ + /** memory size consumed by freelist entries per size. */ std::vector<size_t> free_size; }; diff --git a/deps/v8/include/cppgc/internal/compiler-specific.h b/deps/v8/include/cppgc/internal/compiler-specific.h index c580894b35..595b6398cb 100644 --- a/deps/v8/include/cppgc/internal/compiler-specific.h +++ b/deps/v8/include/cppgc/internal/compiler-specific.h @@ -21,13 +21,13 @@ namespace cppgc { // [[no_unique_address]] comes in C++20 but supported in clang with -std >= // c++11. -#if CPPGC_HAS_CPP_ATTRIBUTE(no_unique_address) // NOLINTNEXTLINE +#if CPPGC_HAS_CPP_ATTRIBUTE(no_unique_address) #define CPPGC_NO_UNIQUE_ADDRESS [[no_unique_address]] #else #define CPPGC_NO_UNIQUE_ADDRESS #endif -#if CPPGC_HAS_ATTRIBUTE(unused) // NOLINTNEXTLINE +#if CPPGC_HAS_ATTRIBUTE(unused) #define CPPGC_UNUSED __attribute__((unused)) #else #define CPPGC_UNUSED diff --git a/deps/v8/include/cppgc/internal/pointer-policies.h b/deps/v8/include/cppgc/internal/pointer-policies.h index ceb002f02d..e09b86199f 100644 --- a/deps/v8/include/cppgc/internal/pointer-policies.h +++ b/deps/v8/include/cppgc/internal/pointer-policies.h @@ -9,12 +9,15 @@ #include <type_traits> #include "cppgc/internal/write-barrier.h" +#include "cppgc/sentinel-pointer.h" #include "cppgc/source-location.h" +#include "cppgc/type-traits.h" #include "v8config.h" // NOLINT(build/include_directory) namespace cppgc { namespace internal { +class HeapBase; class PersistentRegion; class CrossThreadPersistentRegion; @@ -50,11 +53,31 @@ struct NoWriteBarrierPolicy { class V8_EXPORT EnabledCheckingPolicy { protected: - EnabledCheckingPolicy(); - void CheckPointer(const void* ptr); + template <typename T> + void CheckPointer(const T* ptr) { + if (!ptr || (kSentinelPointer == ptr)) return; + + CheckPointersImplTrampoline<T>::Call(this, ptr); + } private: - void* impl_; + void CheckPointerImpl(const void* ptr, bool points_to_payload); + + template <typename T, bool = IsCompleteV<T>> + struct CheckPointersImplTrampoline { + static void Call(EnabledCheckingPolicy* policy, const T* ptr) { + policy->CheckPointerImpl(ptr, false); + } + }; + + template <typename T> + struct CheckPointersImplTrampoline<T, true> { + static void Call(EnabledCheckingPolicy* policy, const T* ptr) { + policy->CheckPointerImpl(ptr, IsGarbageCollectedTypeV<T>); + } + }; + + const HeapBase* heap_ = nullptr; }; class DisabledCheckingPolicy { @@ -63,9 +86,11 @@ class DisabledCheckingPolicy { }; #if V8_ENABLE_CHECKS -using DefaultCheckingPolicy = EnabledCheckingPolicy; +using DefaultMemberCheckingPolicy = EnabledCheckingPolicy; +using DefaultPersistentCheckingPolicy = EnabledCheckingPolicy; #else -using DefaultCheckingPolicy = DisabledCheckingPolicy; +using DefaultMemberCheckingPolicy = DisabledCheckingPolicy; +using DefaultPersistentCheckingPolicy = DisabledCheckingPolicy; #endif class KeepLocationPolicy { @@ -133,10 +158,10 @@ template <typename T, typename WeaknessPolicy, class BasicCrossThreadPersistent; template <typename T, typename WeaknessPolicy, typename LocationPolicy = DefaultLocationPolicy, - typename CheckingPolicy = DefaultCheckingPolicy> + typename CheckingPolicy = DefaultPersistentCheckingPolicy> class BasicPersistent; template <typename T, typename WeaknessTag, typename WriteBarrierPolicy, - typename CheckingPolicy = DefaultCheckingPolicy> + typename CheckingPolicy = DefaultMemberCheckingPolicy> class BasicMember; } // namespace internal diff --git a/deps/v8/include/cppgc/member.h b/deps/v8/include/cppgc/member.h index 7b76bc4f75..16aed06022 100644 --- a/deps/v8/include/cppgc/member.h +++ b/deps/v8/include/cppgc/member.h @@ -24,8 +24,11 @@ namespace internal { // BasicMember on casting to the right type as needed. class MemberBase { protected: + struct AtomicInitializerTag {}; + MemberBase() = default; explicit MemberBase(const void* value) : raw_(value) {} + MemberBase(const void* value, AtomicInitializerTag) { SetRawAtomic(value); } const void** GetRawSlot() const { return &raw_; } const void* GetRaw() const { return raw_; } @@ -61,6 +64,20 @@ class BasicMember final : private MemberBase, private CheckingPolicy { this->CheckPointer(Get()); } BasicMember(T& raw) : BasicMember(&raw) {} // NOLINT + // Atomic ctor. Using the AtomicInitializerTag forces BasicMember to + // initialize using atomic assignments. This is required for preventing + // data races with concurrent marking. + using AtomicInitializerTag = MemberBase::AtomicInitializerTag; + BasicMember(std::nullptr_t, AtomicInitializerTag atomic) + : MemberBase(nullptr, atomic) {} + BasicMember(SentinelPointer s, AtomicInitializerTag atomic) + : MemberBase(s, atomic) {} + BasicMember(T* raw, AtomicInitializerTag atomic) : MemberBase(raw, atomic) { + InitializingWriteBarrier(); + this->CheckPointer(Get()); + } + BasicMember(T& raw, AtomicInitializerTag atomic) + : BasicMember(&raw, atomic) {} // Copy ctor. BasicMember(const BasicMember& other) : BasicMember(other.Get()) {} // Allow heterogeneous construction. @@ -79,9 +96,8 @@ class BasicMember final : private MemberBase, private CheckingPolicy { template <typename U, typename OtherBarrierPolicy, typename OtherWeaknessTag, typename OtherCheckingPolicy, typename = std::enable_if_t<std::is_base_of<T, U>::value>> - BasicMember( // NOLINT - BasicMember<U, OtherWeaknessTag, OtherBarrierPolicy, - OtherCheckingPolicy>&& other) noexcept + BasicMember(BasicMember<U, OtherWeaknessTag, OtherBarrierPolicy, + OtherCheckingPolicy>&& other) noexcept : BasicMember(other.Get()) { other.Clear(); } @@ -90,10 +106,9 @@ class BasicMember final : private MemberBase, private CheckingPolicy { typename PersistentLocationPolicy, typename PersistentCheckingPolicy, typename = std::enable_if_t<std::is_base_of<T, U>::value>> - BasicMember( // NOLINT - const BasicPersistent<U, PersistentWeaknessPolicy, - PersistentLocationPolicy, PersistentCheckingPolicy>& - p) + BasicMember(const BasicPersistent<U, PersistentWeaknessPolicy, + PersistentLocationPolicy, + PersistentCheckingPolicy>& p) : BasicMember(p.Get()) {} // Copy assignment. @@ -161,7 +176,7 @@ class BasicMember final : private MemberBase, private CheckingPolicy { } explicit operator bool() const { return Get(); } - operator T*() const { return Get(); } // NOLINT + operator T*() const { return Get(); } T* operator->() const { return Get(); } T& operator*() const { return *Get(); } diff --git a/deps/v8/include/cppgc/persistent.h b/deps/v8/include/cppgc/persistent.h index d7aac723c0..22cda7c6e8 100644 --- a/deps/v8/include/cppgc/persistent.h +++ b/deps/v8/include/cppgc/persistent.h @@ -95,7 +95,7 @@ class BasicPersistent final : public PersistentBase, template <typename U, typename OtherWeaknessPolicy, typename OtherLocationPolicy, typename OtherCheckingPolicy, typename = std::enable_if_t<std::is_base_of<T, U>::value>> - BasicPersistent( // NOLINT + BasicPersistent( const BasicPersistent<U, OtherWeaknessPolicy, OtherLocationPolicy, OtherCheckingPolicy>& other, const SourceLocation& loc = SourceLocation::Current()) @@ -118,7 +118,7 @@ class BasicPersistent final : public PersistentBase, template <typename U, typename MemberBarrierPolicy, typename MemberWeaknessTag, typename MemberCheckingPolicy, typename = std::enable_if_t<std::is_base_of<T, U>::value>> - BasicPersistent(internal::BasicMember<U, MemberBarrierPolicy, // NOLINT + BasicPersistent(internal::BasicMember<U, MemberBarrierPolicy, MemberWeaknessTag, MemberCheckingPolicy> member, const SourceLocation& loc = SourceLocation::Current()) @@ -181,7 +181,7 @@ class BasicPersistent final : public PersistentBase, } explicit operator bool() const { return Get(); } - operator T*() const { return Get(); } // NOLINT + operator T*() const { return Get(); } T* operator->() const { return Get(); } T& operator*() const { return *Get(); } diff --git a/deps/v8/include/cppgc/sentinel-pointer.h b/deps/v8/include/cppgc/sentinel-pointer.h index f7915834e5..b049d1a2b3 100644 --- a/deps/v8/include/cppgc/sentinel-pointer.h +++ b/deps/v8/include/cppgc/sentinel-pointer.h @@ -14,7 +14,7 @@ namespace internal { // sentinel is defined by the embedder. struct SentinelPointer { template <typename T> - operator T*() const { // NOLINT + operator T*() const { static constexpr intptr_t kSentinelValue = 1; return reinterpret_cast<T*>(kSentinelValue); } diff --git a/deps/v8/include/cppgc/type-traits.h b/deps/v8/include/cppgc/type-traits.h index 2b50a2164b..56cd55d61e 100644 --- a/deps/v8/include/cppgc/type-traits.h +++ b/deps/v8/include/cppgc/type-traits.h @@ -7,6 +7,7 @@ // This file should stay with minimal dependencies to allow embedder to check // against Oilpan types without including any other parts. +#include <cstddef> #include <type_traits> namespace cppgc { @@ -164,6 +165,18 @@ struct IsUntracedMemberType : std::false_type {}; template <typename T> struct IsUntracedMemberType<T, true> : std::true_type {}; +template <typename T> +struct IsComplete { + private: + template <typename U, size_t = sizeof(U)> + static std::true_type IsSizeOfKnown(U*); + static std::false_type IsSizeOfKnown(...); + + public: + static constexpr bool value = + decltype(IsSizeOfKnown(std::declval<T*>()))::value; +}; + } // namespace internal /** @@ -223,6 +236,12 @@ constexpr bool IsWeakMemberTypeV = internal::IsWeakMemberType<T>::value; template <typename T> constexpr bool IsWeakV = internal::IsWeak<T>::value; +/** + * Value is true for types that are complete, and false otherwise. + */ +template <typename T> +constexpr bool IsCompleteV = internal::IsComplete<T>::value; + } // namespace cppgc #endif // INCLUDE_CPPGC_TYPE_TRAITS_H_ diff --git a/deps/v8/include/js_protocol.pdl b/deps/v8/include/js_protocol.pdl index 666952f27b..9c0483ae70 100644 --- a/deps/v8/include/js_protocol.pdl +++ b/deps/v8/include/js_protocol.pdl @@ -267,7 +267,7 @@ domain Debugger BreakpointId breakpointId # Restarts particular call frame from the beginning. - command restartFrame + deprecated command restartFrame parameters # Call frame identifier to evaluate on. CallFrameId callFrameId @@ -707,6 +707,8 @@ experimental domain HeapProfiler # when the tracking is stopped. optional boolean reportProgress optional boolean treatGlobalObjectsAsRoots + # If true, numerical values are included in the snapshot + optional boolean captureNumericValue command takeHeapSnapshot parameters @@ -714,6 +716,8 @@ experimental domain HeapProfiler optional boolean reportProgress # If true, a raw snapshot without artifical roots will be generated optional boolean treatGlobalObjectsAsRoots + # If true, numerical values are included in the snapshot + optional boolean captureNumericValue event addHeapSnapshotChunk parameters @@ -1563,7 +1567,10 @@ domain Runtime # execution context. If omitted and `executionContextName` is not set, # the binding is exposed to all execution contexts of the target. # This parameter is mutually exclusive with `executionContextName`. - optional ExecutionContextId executionContextId + # Deprecated in favor of `executionContextName` due to an unclear use case + # and bugs in implementation (crbug.com/1169639). `executionContextId` will be + # removed in the future. + deprecated optional ExecutionContextId executionContextId # If specified, the binding is exposed to the executionContext with # matching name, even for contexts created after the binding is added. # See also `ExecutionContext.name` and `worldName` parameter to diff --git a/deps/v8/include/v8-cppgc.h b/deps/v8/include/v8-cppgc.h index fba35f71c9..745fb04347 100644 --- a/deps/v8/include/v8-cppgc.h +++ b/deps/v8/include/v8-cppgc.h @@ -28,6 +28,8 @@ namespace internal { class CppHeap; } // namespace internal +class CustomSpaceStatisticsReceiver; + /** * Describes how V8 wrapper objects maintain references to garbage-collected C++ * objects. @@ -120,6 +122,16 @@ class V8_EXPORT CppHeap { cppgc::HeapStatistics::DetailLevel detail_level); /** + * Collects statistics for the given spaces and reports them to the receiver. + * + * \param custom_spaces a collection of custom space indicies. + * \param receiver an object that gets the results. + */ + void CollectCustomSpaceStatisticsAtLastGC( + std::vector<cppgc::CustomSpaceIndex> custom_spaces, + std::unique_ptr<CustomSpaceStatisticsReceiver> receiver); + + /** * Enables a detached mode that allows testing garbage collection using * `cppgc::testing` APIs. Once used, the heap cannot be attached to an * `Isolate` anymore. @@ -277,6 +289,26 @@ class V8_EXPORT JSHeapConsistency final { const TracedReferenceBase& ref); }; +/** + * Provided as input to `CppHeap::CollectCustomSpaceStatisticsAtLastGC()`. + * + * Its method is invoked with the results of the statistic collection. + */ +class CustomSpaceStatisticsReceiver { + public: + virtual ~CustomSpaceStatisticsReceiver() = default; + /** + * Reports the size of a space at the last GC. It is called for each space + * that was requested in `CollectCustomSpaceStatisticsAtLastGC()`. + * + * \param space_index The index of the space. + * \param bytes The total size of live objects in the space at the last GC. + * It is zero if there was no GC yet. + */ + virtual void AllocatedBytes(cppgc::CustomSpaceIndex space_index, + size_t bytes) = 0; +}; + } // namespace v8 namespace cppgc { diff --git a/deps/v8/include/v8-fast-api-calls.h b/deps/v8/include/v8-fast-api-calls.h index f8b5acb093..cdf67decf6 100644 --- a/deps/v8/include/v8-fast-api-calls.h +++ b/deps/v8/include/v8-fast-api-calls.h @@ -70,8 +70,7 @@ * return GetInternalField<CustomEmbedderType, * kV8EmbedderWrapperObjectIndex>(wrapper); * } - * static void FastMethod(v8::ApiObject receiver_obj, int param) { - * v8::Object* v8_object = reinterpret_cast<v8::Object*>(&api_object); + * static void FastMethod(v8::Local<v8::Object> receiver_obj, int param) { * CustomEmbedderType* receiver = static_cast<CustomEmbedderType*>( * receiver_obj->GetAlignedPointerFromInternalField( * kV8EmbedderWrapperObjectIndex)); @@ -190,10 +189,13 @@ #include <tuple> #include <type_traits> +#include "v8.h" // NOLINT(build/include_directory) #include "v8config.h" // NOLINT(build/include_directory) namespace v8 { +class Isolate; + class CTypeInfo { public: enum class Type : uint8_t { @@ -206,6 +208,8 @@ class CTypeInfo { kFloat32, kFloat64, kV8Value, + kApiObject, // This will be deprecated once all users have + // migrated from v8::ApiObject to v8::Local<v8::Value>. }; // kCallbackOptionsType is not part of the Type enum @@ -310,7 +314,7 @@ class V8_EXPORT CFunction { }; }; -struct ApiObject { +struct V8_DEPRECATE_SOON("Use v8::Local<v8::Value> instead.") ApiObject { uintptr_t address; }; @@ -322,6 +326,14 @@ struct ApiObject { */ struct FastApiCallbackOptions { /** + * Creates a new instance of FastApiCallbackOptions for testing purpose. The + * returned instance may be filled with mock data. + */ + static FastApiCallbackOptions CreateForTesting(Isolate* isolate) { + return {false, {0}}; + } + + /** * If the callback wants to signal an error condition or to perform an * allocation, it must set options.fallback to true and do an early return * from the fast method. Then V8 checks the value of options.fallback and if @@ -336,8 +348,12 @@ struct FastApiCallbackOptions { /** * The `data` passed to the FunctionTemplate constructor, or `undefined`. + * `data_ptr` allows for default constructing FastApiCallbackOptions. */ - const ApiObject data; + union { + uintptr_t data_ptr; + v8::Value data; + }; }; namespace internal { @@ -398,16 +414,22 @@ struct TypeInfoHelper { static constexpr CTypeInfo::Type Type() { return CTypeInfo::Type::Enum; } \ }; -#define BASIC_C_TYPES(V) \ - V(void, kVoid) \ - V(bool, kBool) \ - V(int32_t, kInt32) \ - V(uint32_t, kUint32) \ - V(int64_t, kInt64) \ - V(uint64_t, kUint64) \ - V(float, kFloat32) \ - V(double, kFloat64) \ - V(ApiObject, kV8Value) +#define BASIC_C_TYPES(V) \ + V(void, kVoid) \ + V(bool, kBool) \ + V(int32_t, kInt32) \ + V(uint32_t, kUint32) \ + V(int64_t, kInt64) \ + V(uint64_t, kUint64) \ + V(float, kFloat32) \ + V(double, kFloat64) \ + V(ApiObject, kApiObject) \ + V(v8::Local<v8::Value>, kV8Value) \ + V(v8::Local<v8::Object>, kV8Value) + +// ApiObject was a temporary solution to wrap the pointer to the v8::Value. +// Please use v8::Local<v8::Value> in new code for the arguments and +// v8::Local<v8::Object> for the receiver, as ApiObject will be deprecated. BASIC_C_TYPES(SPECIALIZE_GET_TYPE_INFO_HELPER_FOR) diff --git a/deps/v8/include/v8-inspector.h b/deps/v8/include/v8-inspector.h index a55518e459..852b39d725 100644 --- a/deps/v8/include/v8-inspector.h +++ b/deps/v8/include/v8-inspector.h @@ -105,8 +105,9 @@ class V8_EXPORT V8StackTrace { virtual StringView topSourceURL() const = 0; virtual int topLineNumber() const = 0; virtual int topColumnNumber() const = 0; - virtual StringView topScriptId() const = 0; - virtual int topScriptIdAsInteger() const = 0; + virtual int topScriptId() const = 0; + V8_DEPRECATE_SOON("Use V8::StackTrace::topScriptId() instead.") + int topScriptIdAsInteger() const { return topScriptId(); } virtual StringView topFunctionName() const = 0; virtual ~V8StackTrace() = default; @@ -130,6 +131,10 @@ class V8_EXPORT V8InspectorSession { virtual v8::Local<v8::Value> get(v8::Local<v8::Context>) = 0; virtual ~Inspectable() = default; }; + class V8_EXPORT CommandLineAPIScope { + public: + virtual ~CommandLineAPIScope() = default; + }; virtual void addInspectedObject(std::unique_ptr<Inspectable>) = 0; // Dispatching protocol messages. @@ -139,6 +144,9 @@ class V8_EXPORT V8InspectorSession { virtual std::vector<std::unique_ptr<protocol::Schema::API::Domain>> supportedDomains() = 0; + virtual std::unique_ptr<V8InspectorSession::CommandLineAPIScope> + initializeCommandLineAPIScope(int executionContextId) = 0; + // Debugger actions. virtual void schedulePauseOnNextStatement(StringView breakReason, StringView breakDetails) = 0; diff --git a/deps/v8/include/v8-internal.h b/deps/v8/include/v8-internal.h index eb18f76504..f289149d8d 100644 --- a/deps/v8/include/v8-internal.h +++ b/deps/v8/include/v8-internal.h @@ -33,6 +33,7 @@ const int kApiSystemPointerSize = sizeof(void*); const int kApiDoubleSize = sizeof(double); const int kApiInt32Size = sizeof(int32_t); const int kApiInt64Size = sizeof(int64_t); +const int kApiSizetSize = sizeof(size_t); // Tag information for HeapObject. const int kHeapObjectTag = 1; @@ -40,6 +41,13 @@ const int kWeakHeapObjectTag = 3; const int kHeapObjectTagSize = 2; const intptr_t kHeapObjectTagMask = (1 << kHeapObjectTagSize) - 1; +// Tag information for fowarding pointers stored in object headers. +// 0b00 at the lowest 2 bits in the header indicates that the map word is a +// forwarding pointer. +const int kForwardingTag = 0; +const int kForwardingTagSize = 2; +const intptr_t kForwardingTagMask = (1 << kForwardingTagSize) - 1; + // Tag information for Smi. const int kSmiTag = 0; const int kSmiTagSize = 1; @@ -120,23 +128,28 @@ constexpr bool HeapSandboxIsEnabled() { using ExternalPointer_t = Address; -// If the heap sandbox is enabled, these tag values will be XORed with the +// If the heap sandbox is enabled, these tag values will be ORed with the // external pointers in the external pointer table to prevent use of pointers of -// the wrong type. -enum ExternalPointerTag : Address { - kExternalPointerNullTag = static_cast<Address>(0ULL), - kArrayBufferBackingStoreTag = static_cast<Address>(1ULL << 48), - kTypedArrayExternalPointerTag = static_cast<Address>(2ULL << 48), - kDataViewDataPointerTag = static_cast<Address>(3ULL << 48), - kExternalStringResourceTag = static_cast<Address>(4ULL << 48), - kExternalStringResourceDataTag = static_cast<Address>(5ULL << 48), - kForeignForeignAddressTag = static_cast<Address>(6ULL << 48), - kNativeContextMicrotaskQueueTag = static_cast<Address>(7ULL << 48), - // TODO(v8:10391, saelo): Currently has to be zero so that raw zero values are - // also nullptr - kEmbedderDataSlotPayloadTag = static_cast<Address>(0ULL << 48), +// the wrong type. When a pointer is loaded, it is ANDed with the inverse of the +// expected type's tag. The tags are constructed in a way that guarantees that a +// failed type check will result in one or more of the top bits of the pointer +// to be set, rendering the pointer inacessible. This construction allows +// performing the type check and removing GC marking bits from the pointer at +// the same time. +enum ExternalPointerTag : uint64_t { + kExternalPointerNullTag = 0x0000000000000000, + kArrayBufferBackingStoreTag = 0x00ff000000000000, // 0b000000011111111 + kTypedArrayExternalPointerTag = 0x017f000000000000, // 0b000000101111111 + kDataViewDataPointerTag = 0x01bf000000000000, // 0b000000110111111 + kExternalStringResourceTag = 0x01df000000000000, // 0b000000111011111 + kExternalStringResourceDataTag = 0x01ef000000000000, // 0b000000111101111 + kForeignForeignAddressTag = 0x01f7000000000000, // 0b000000111110111 + kNativeContextMicrotaskQueueTag = 0x01fb000000000000, // 0b000000111111011 + kEmbedderDataSlotPayloadTag = 0x01fd000000000000, // 0b000000111111101 }; +constexpr uint64_t kExternalPointerTagMask = 0xffff000000000000; + #ifdef V8_31BIT_SMIS_ON_64BIT_ARCH using PlatformSmiTagging = SmiTagging<kApiInt32Size>; #else @@ -177,6 +190,14 @@ V8_EXPORT bool ShouldThrowOnError(v8::internal::Isolate* isolate); * depend on functions and constants defined here. */ class Internals { +#ifdef V8_MAP_PACKING + V8_INLINE static constexpr internal::Address UnpackMapWord( + internal::Address mapword) { + // TODO(wenyuzhao): Clear header metadata. + return mapword ^ kMapWordXorMask; + } +#endif + public: // These values match non-compiler-dependent values defined within // the implementation of v8. @@ -209,8 +230,12 @@ class Internals { kIsolateFastCCallCallerFpOffset + kApiSystemPointerSize; static const int kIsolateFastApiCallTargetOffset = kIsolateFastCCallCallerPcOffset + kApiSystemPointerSize; - static const int kIsolateStackGuardOffset = + static const int kIsolateCageBaseOffset = kIsolateFastApiCallTargetOffset + kApiSystemPointerSize; + static const int kIsolateLongTaskStatsCounterOffset = + kIsolateCageBaseOffset + kApiSystemPointerSize; + static const int kIsolateStackGuardOffset = + kIsolateLongTaskStatsCounterOffset + kApiSizetSize; static const int kIsolateRootsOffset = kIsolateStackGuardOffset + 7 * kApiSystemPointerSize; @@ -253,6 +278,17 @@ class Internals { // incremental GC once the external memory reaches this limit. static constexpr int kExternalAllocationSoftLimit = 64 * 1024 * 1024; +#ifdef V8_MAP_PACKING + static const uintptr_t kMapWordMetadataMask = 0xffffULL << 48; + // The lowest two bits of mapwords are always `0b10` + static const uintptr_t kMapWordSignature = 0b10; + // XORing a (non-compressed) map with this mask ensures that the two + // low-order bits are 0b10. The 0 at the end makes this look like a Smi, + // although real Smis have all lower 32 bits unset. We only rely on these + // values passing as Smis in very few places. + static const int kMapWordXorMask = 0b11; +#endif + V8_EXPORT static void CheckInitializedImpl(v8::Isolate* isolate); V8_INLINE static void CheckInitialized(v8::Isolate* isolate) { #ifdef V8_ENABLE_CHECKS @@ -279,6 +315,9 @@ class Internals { V8_INLINE static int GetInstanceType(const internal::Address obj) { typedef internal::Address A; A map = ReadTaggedPointerField(obj, kHeapObjectMapOffset); +#ifdef V8_MAP_PACKING + map = UnpackMapWord(map); +#endif return ReadRawField<uint16_t>(map, kMapInstanceTypeOffset); } @@ -329,6 +368,12 @@ class Internals { return *reinterpret_cast<void* const*>(addr); } + V8_INLINE static void IncrementLongTasksStatsCounter(v8::Isolate* isolate) { + internal::Address addr = reinterpret_cast<internal::Address>(isolate) + + kIsolateLongTaskStatsCounterOffset; + ++(*reinterpret_cast<size_t*>(addr)); + } + V8_INLINE static internal::Address* GetRoot(v8::Isolate* isolate, int index) { internal::Address addr = reinterpret_cast<internal::Address>(isolate) + kIsolateRootsOffset + diff --git a/deps/v8/include/v8-metrics.h b/deps/v8/include/v8-metrics.h index 0217f40d63..2404cc0a4c 100644 --- a/deps/v8/include/v8-metrics.h +++ b/deps/v8/include/v8-metrics.h @@ -5,7 +5,8 @@ #ifndef V8_METRICS_H_ #define V8_METRICS_H_ -#include "v8.h" // NOLINT(build/include_directory) +#include "v8-internal.h" // NOLINT(build/include_directory) +#include "v8.h" // NOLINT(build/include_directory) namespace v8 { namespace metrics { @@ -183,6 +184,32 @@ class V8_EXPORT Recorder { static ContextId GetContextId(Local<Context> context); }; +/** + * Experimental API intended for the LongTasks UKM (crbug.com/1173527). + * The Reset() method should be called at the start of a potential + * long task. The Get() method returns durations of V8 work that + * happened during the task. + * + * This API is experimental and may be removed/changed in the future. + */ +struct V8_EXPORT LongTaskStats { + /** + * Resets durations of V8 work for the new task. + */ + V8_INLINE static void Reset(Isolate* isolate) { + v8::internal::Internals::IncrementLongTasksStatsCounter(isolate); + } + + /** + * Returns durations of V8 work that happened since the last Reset(). + */ + static LongTaskStats Get(Isolate* isolate); + + int64_t gc_full_atomic_wall_clock_duration_us = 0; + int64_t gc_full_incremental_wall_clock_duration_us = 0; + int64_t gc_young_wall_clock_duration_us = 0; +}; + } // namespace metrics } // namespace v8 diff --git a/deps/v8/include/v8-profiler.h b/deps/v8/include/v8-profiler.h index 85d3f8a482..9a40cfcf30 100644 --- a/deps/v8/include/v8-profiler.h +++ b/deps/v8/include/v8-profiler.h @@ -289,8 +289,8 @@ class V8_EXPORT CpuProfilingOptions { * interval, set via SetSamplingInterval(). If * zero, the sampling interval will be equal to * the profiler's sampling interval. - * \param filter_context Deprecated option to filter by context, currently a - * no-op. + * \param filter_context If specified, profiles will only contain frames + * using this context. Other frames will be elided. */ CpuProfilingOptions( CpuProfilingMode mode = kLeafNodeLineNumbers, @@ -304,9 +304,13 @@ class V8_EXPORT CpuProfilingOptions { private: friend class internal::CpuProfile; + bool has_filter_context() const { return !filter_context_.IsEmpty(); } + void* raw_filter_context() const; + CpuProfilingMode mode_; unsigned max_samples_; int sampling_interval_us_; + CopyablePersistentTraits<Context>::CopyablePersistent filter_context_; }; /** @@ -492,7 +496,7 @@ class V8_EXPORT HeapGraphNode { /** * An interface for exporting data from V8, using "push" model. */ -class V8_EXPORT OutputStream { // NOLINT +class V8_EXPORT OutputStream { public: enum WriteResult { kContinue = 0, @@ -519,7 +523,6 @@ class V8_EXPORT OutputStream { // NOLINT } }; - /** * HeapSnapshots record the state of the JS heap at some moment. */ @@ -586,7 +589,7 @@ class V8_EXPORT HeapSnapshot { * An interface for reporting progress and controlling long-running * activities. */ -class V8_EXPORT ActivityControl { // NOLINT +class V8_EXPORT ActivityControl { public: enum ControlOption { kContinue = 0, @@ -600,7 +603,6 @@ class V8_EXPORT ActivityControl { // NOLINT virtual ControlOption ReportProgressValue(int done, int total) = 0; }; - /** * AllocationProfile is a sampled profile of allocations done by the program. * This is structured as a call-graph. @@ -900,7 +902,8 @@ class V8_EXPORT HeapProfiler { const HeapSnapshot* TakeHeapSnapshot( ActivityControl* control = nullptr, ObjectNameResolver* global_object_name_resolver = nullptr, - bool treat_global_objects_as_roots = true); + bool treat_global_objects_as_roots = true, + bool capture_numeric_value = false); /** * Starts tracking of heap objects population statistics. After calling diff --git a/deps/v8/include/v8-util.h b/deps/v8/include/v8-util.h index 89ec4f6a78..8e4d66153d 100644 --- a/deps/v8/include/v8-util.h +++ b/deps/v8/include/v8-util.h @@ -43,7 +43,7 @@ class StdMapTraits { static bool Empty(Impl* impl) { return impl->empty(); } static size_t Size(Impl* impl) { return impl->size(); } - static void Swap(Impl& a, Impl& b) { std::swap(a, b); } // NOLINT + static void Swap(Impl& a, Impl& b) { std::swap(a, b); } static Iterator Begin(Impl* impl) { return impl->begin(); } static Iterator End(Impl* impl) { return impl->end(); } static K Key(Iterator it) { return it->first; } diff --git a/deps/v8/include/v8-version.h b/deps/v8/include/v8-version.h index 4bdb66b2bf..1cf4d7e284 100644 --- a/deps/v8/include/v8-version.h +++ b/deps/v8/include/v8-version.h @@ -9,9 +9,9 @@ // NOTE these macros are used by some of the tool scripts and the build // system so their names cannot be changed without changing the scripts. #define V8_MAJOR_VERSION 9 -#define V8_MINOR_VERSION 1 -#define V8_BUILD_NUMBER 269 -#define V8_PATCH_LEVEL 38 +#define V8_MINOR_VERSION 2 +#define V8_BUILD_NUMBER 230 +#define V8_PATCH_LEVEL 21 // Use 1 for candidates and 0 otherwise. // (Boolean macro values are not supported by all preprocessors.) diff --git a/deps/v8/include/v8.h b/deps/v8/include/v8.h index ba87e57a1e..c4720ca695 100644 --- a/deps/v8/include/v8.h +++ b/deps/v8/include/v8.h @@ -596,7 +596,7 @@ template <class T> class PersistentBase { */ V8_INLINE uint16_t WrapperClassId() const; - PersistentBase(const PersistentBase& other) = delete; // NOLINT + PersistentBase(const PersistentBase& other) = delete; void operator=(const PersistentBase&) = delete; private: @@ -708,7 +708,7 @@ template <class T, class M> class Persistent : public PersistentBase<T> { return *this; } template <class S, class M2> - V8_INLINE Persistent& operator=(const Persistent<S, M2>& that) { // NOLINT + V8_INLINE Persistent& operator=(const Persistent<S, M2>& that) { Copy(that); return *this; } @@ -723,7 +723,7 @@ template <class T, class M> class Persistent : public PersistentBase<T> { // TODO(dcarney): this is pretty useless, fix or remove template <class S> - V8_INLINE static Persistent<T>& Cast(const Persistent<S>& that) { // NOLINT + V8_INLINE static Persistent<T>& Cast(const Persistent<S>& that) { #ifdef V8_ENABLE_CHECKS // If we're going to perform the type check then we have to check // that the handle isn't empty before doing the checked cast. @@ -734,7 +734,7 @@ template <class T, class M> class Persistent : public PersistentBase<T> { // TODO(dcarney): this is pretty useless, fix or remove template <class S> - V8_INLINE Persistent<S>& As() const { // NOLINT + V8_INLINE Persistent<S>& As() const { return Persistent<S>::Cast(*this); } @@ -803,7 +803,7 @@ class Global : public PersistentBase<T> { /** * Pass allows returning uniques from functions, etc. */ - Global Pass() { return static_cast<Global&&>(*this); } // NOLINT + Global Pass() { return static_cast<Global&&>(*this); } /* * For compatibility with Chromium's base::Bind (base::Passed). @@ -905,8 +905,8 @@ class TracedReferenceBase { * The exact semantics are: * - Tracing garbage collections use |v8::EmbedderHeapTracer| or cppgc. * - Non-tracing garbage collections refer to - * |v8::EmbedderHeapTracer::IsRootForNonTracingGC()| whether the handle should - * be treated as root or not. + * |v8::EmbedderRootsHandler::IsRoot()| whether the handle should + * be treated as root or not. * * Note that the base class cannot be instantiated itself. Choose from * - TracedGlobal @@ -1427,9 +1427,7 @@ class ScriptOriginOptions { */ class ScriptOrigin { public: -#if defined(_MSC_VER) && _MSC_VER >= 1910 /* Disable on VS2015 */ V8_DEPRECATE_SOON("Use constructor with primitive C++ types") -#endif V8_INLINE explicit ScriptOrigin( Local<Value> resource_name, Local<Integer> resource_line_offset, Local<Integer> resource_column_offset, @@ -1440,9 +1438,7 @@ class ScriptOrigin { Local<Boolean> is_wasm = Local<Boolean>(), Local<Boolean> is_module = Local<Boolean>(), Local<PrimitiveArray> host_defined_options = Local<PrimitiveArray>()); -#if defined(_MSC_VER) && _MSC_VER >= 1910 /* Disable on VS2015 */ V8_DEPRECATE_SOON("Use constructor that takes an isolate") -#endif V8_INLINE explicit ScriptOrigin( Local<Value> resource_name, int resource_line_offset = 0, int resource_column_offset = 0, @@ -1653,7 +1649,7 @@ class V8_EXPORT Module : public Data { */ int GetIdentityHash() const; - using ResolveCallback = + using ResolveCallback V8_DEPRECATE_SOON("Use ResolveModuleCallback") = MaybeLocal<Module> (*)(Local<Context> context, Local<String> specifier, Local<Module> referrer); using ResolveModuleCallback = MaybeLocal<Module> (*)( @@ -1678,10 +1674,12 @@ class V8_EXPORT Module : public Data { /** * Evaluates the module and its dependencies. * - * If status is kInstantiated, run the module's code. On success, set status - * to kEvaluated and return the completion value; on failure, set status to - * kErrored and propagate the thrown exception (which is then also available - * via |GetException|). + * If status is kInstantiated, run the module's code and return a Promise + * object. On success, set status to kEvaluated and resolve the Promise with + * the completion value; on failure, set status to kErrored and reject the + * Promise with the error. + * + * If IsGraphAsync() is false, the returned Promise is settled. */ V8_WARN_UNUSED_RESULT MaybeLocal<Value> Evaluate(Local<Context> context); @@ -1942,11 +1940,9 @@ class V8_EXPORT ScriptCompiler { public: enum Encoding { ONE_BYTE, TWO_BYTE, UTF8, WINDOWS_1252 }; -#if defined(_MSC_VER) && _MSC_VER >= 1910 /* Disable on VS2015 */ V8_DEPRECATED( "This class takes ownership of source_stream, so use the constructor " "taking a unique_ptr to make these semantics clearer") -#endif StreamedSource(ExternalSourceStream* source_stream, Encoding encoding); StreamedSource(std::unique_ptr<ExternalSourceStream> source_stream, Encoding encoding); @@ -2430,7 +2426,7 @@ struct SampleInfo { StateTag vm_state; // Current VM state. void* external_callback_entry; // External callback address if VM is // executing an external callback. - void* top_context; // Incumbent native context address. + void* context; // Incumbent native context address. }; struct MemoryRange { @@ -3282,7 +3278,7 @@ class V8_EXPORT String : public Name { */ bool IsExternalOneByte() const; - class V8_EXPORT ExternalStringResourceBase { // NOLINT + class V8_EXPORT ExternalStringResourceBase { public: virtual ~ExternalStringResourceBase() = default; @@ -3632,10 +3628,9 @@ class V8_EXPORT Symbol : public Name { /** * Returns the description string of the symbol, or undefined if none. */ + V8_DEPRECATE_SOON("Use Symbol::Description(isolate)") Local<Value> Description() const; - - V8_DEPRECATED("Use Symbol::Description()") - Local<Value> Name() const { return Description(); } + Local<Value> Description(Isolate* isolate) const; /** * Create a symbol. If description is not empty, it will be used as the @@ -3986,8 +3981,7 @@ class V8_EXPORT Object : public Value { // // Returns true on success. V8_WARN_UNUSED_RESULT Maybe<bool> DefineProperty( - Local<Context> context, Local<Name> key, - PropertyDescriptor& descriptor); // NOLINT(runtime/references) + Local<Context> context, Local<Name> key, PropertyDescriptor& descriptor); V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context, Local<Value> key); @@ -4777,17 +4771,6 @@ class V8_EXPORT Function : public Object { Local<Value> GetDebugName() const; /** - * User-defined name assigned to the "displayName" property of this function. - * Used to facilitate debugging and profiling of JavaScript code. - */ - V8_DEPRECATED( - "Use v8::Object::Get() instead to look up \"displayName\". " - "V8 and DevTools no longer use \"displayName\" in stack " - "traces, but the standard \"name\" property. " - "See http://crbug.com/1177685.") - Local<Value> GetDisplayName() const; - - /** * Returns zero based line number of function body and * kLineOffsetNotFound if no information available. */ @@ -5364,7 +5347,7 @@ class V8_EXPORT ArrayBuffer : public Object { * Note that it is unsafe to call back into V8 from any of the allocator * functions. */ - class V8_EXPORT Allocator { // NOLINT + class V8_EXPORT Allocator { public: virtual ~Allocator() = default; @@ -6516,6 +6499,15 @@ class V8_EXPORT FunctionTemplate : public Template { SideEffectType side_effect_type = SideEffectType::kHasSideEffect, const CFunction* c_function = nullptr); + /** Creates a function template for multiple overloaded fast API calls.*/ + static Local<FunctionTemplate> NewWithCFunctionOverloads( + Isolate* isolate, FunctionCallback callback = nullptr, + Local<Value> data = Local<Value>(), + Local<Signature> signature = Local<Signature>(), int length = 0, + ConstructorBehavior behavior = ConstructorBehavior::kAllow, + SideEffectType side_effect_type = SideEffectType::kHasSideEffect, + const MemorySpan<const CFunction>& c_function_overloads = {}); + /** * Creates a function template backed/cached by a private property. */ @@ -6547,7 +6539,7 @@ class V8_EXPORT FunctionTemplate : public Template { void SetCallHandler( FunctionCallback callback, Local<Value> data = Local<Value>(), SideEffectType side_effect_type = SideEffectType::kHasSideEffect, - const CFunction* c_function = nullptr); + const MemorySpan<const CFunction>& c_function_overloads = {}); /** Set the predefined length property for the FunctionTemplate. */ void SetLength(int length); @@ -6608,6 +6600,15 @@ class V8_EXPORT FunctionTemplate : public Template { */ bool HasInstance(Local<Value> object); + /** + * Returns true if the given value is an API object that was constructed by an + * instance of this function template (without checking for inheriting + * function templates). + * + * This is an experimental feature and may still change significantly. + */ + bool IsLeafTemplateForApiObject(v8::Local<v8::Value> value) const; + V8_INLINE static FunctionTemplate* Cast(Data* data); private: @@ -7041,7 +7042,7 @@ class V8_EXPORT AccessorSignature : public Data { /** * Ignore */ -class V8_EXPORT Extension { // NOLINT +class V8_EXPORT Extension { public: // Note that the strings passed into this constructor must live as long // as the Extension itself. @@ -7143,6 +7144,11 @@ class V8_EXPORT ResourceConstraints { /** * The amount of virtual memory reserved for generated code. This is relevant * for 64-bit architectures that rely on code range for calls in code. + * + * When V8_COMPRESS_POINTERS_IN_SHARED_CAGE is defined, there is a shared + * process-wide code range that is lazily initialized. This value is used to + * configure that shared code range when the first Isolate is + * created. Subsequent Isolates ignore this value. */ size_t code_range_size_in_bytes() const { return code_range_size_; } void set_code_range_size_in_bytes(size_t limit) { code_range_size_ = limit; } @@ -7287,7 +7293,8 @@ using CallCompletedCallback = void (*)(Isolate*); * fails (e.g. due to stack overflow), the embedder must propagate * that exception by returning an empty MaybeLocal. */ -using HostImportModuleDynamicallyCallback = +using HostImportModuleDynamicallyCallback V8_DEPRECATE_SOON( + "Use HostImportModuleDynamicallyWithImportAssertionsCallback instead") = MaybeLocal<Promise> (*)(Local<Context> context, Local<ScriptOrModule> referrer, Local<String> specifier); @@ -7592,6 +7599,10 @@ using WasmSimdEnabledCallback = bool (*)(Local<Context> context); // --- Callback for checking if WebAssembly exceptions are enabled --- using WasmExceptionsEnabledCallback = bool (*)(Local<Context> context); +// --- Callback for checking if the SharedArrayBuffer constructor is enabled --- +using SharedArrayBufferConstructorEnabledCallback = + bool (*)(Local<Context> context); + // --- Garbage Collection Callbacks --- /** @@ -7913,17 +7924,16 @@ using UnhandledExceptionCallback = /** * Interface for iterating through all external resources in the heap. */ -class V8_EXPORT ExternalResourceVisitor { // NOLINT +class V8_EXPORT ExternalResourceVisitor { public: virtual ~ExternalResourceVisitor() = default; virtual void VisitExternalString(Local<String> string) {} }; - /** * Interface for iterating through all the persistent handles in the heap. */ -class V8_EXPORT PersistentHandleVisitor { // NOLINT +class V8_EXPORT PersistentHandleVisitor { public: virtual ~PersistentHandleVisitor() = default; virtual void VisitPersistentHandle(Persistent<Value>* value, @@ -7941,6 +7951,45 @@ class V8_EXPORT PersistentHandleVisitor { // NOLINT enum class MemoryPressureLevel { kNone, kModerate, kCritical }; /** + * Handler for embedder roots on non-unified heap garbage collections. + */ +class V8_EXPORT EmbedderRootsHandler { + public: + virtual ~EmbedderRootsHandler() = default; + + /** + * Returns true if the TracedGlobal handle should be considered as root for + * the currently running non-tracing garbage collection and false otherwise. + * The default implementation will keep all TracedGlobal references as roots. + * + * If this returns false, then V8 may decide that the object referred to by + * such a handle is reclaimed. In that case: + * - No action is required if handles are used with destructors, i.e., by just + * using |TracedGlobal|. + * - When run without destructors, i.e., by using |TracedReference|, V8 calls + * |ResetRoot|. + * + * Note that the |handle| is different from the handle that the embedder holds + * for retaining the object. The embedder may use |WrapperClassId()| to + * distinguish cases where it wants handles to be treated as roots from not + * being treated as roots. + */ + virtual bool IsRoot(const v8::TracedReference<v8::Value>& handle) = 0; + virtual bool IsRoot(const v8::TracedGlobal<v8::Value>& handle) = 0; + + /** + * Used in combination with |IsRoot|. Called by V8 when an + * object that is backed by a handle is reclaimed by a non-tracing garbage + * collection. It is up to the embedder to reset the original handle. + * + * Note that the |handle| is different from the handle that the embedder holds + * for retaining the object. It is up to the embedder to find the original + * handle via the object or class id. + */ + virtual void ResetRoot(const v8::TracedReference<v8::Value>& handle) = 0; +}; + +/** * Interface for tracing through the embedder heap. During a V8 garbage * collection, V8 collects hidden fields of all potential wrappers, and at the * end of its marking phase iterates the collection and asks the embedder to @@ -8002,6 +8051,9 @@ class V8_EXPORT EmbedderHeapTracer { /** * Called by the embedder to notify V8 of an empty execution stack. */ + V8_DEPRECATE_SOON( + "This call only optimized internal caches which V8 is able to figure out " + "on its own now.") void NotifyEmptyEmbedderStack(); /** @@ -8065,34 +8117,14 @@ class V8_EXPORT EmbedderHeapTracer { void FinalizeTracing(); /** - * Returns true if the TracedGlobal handle should be considered as root for - * the currently running non-tracing garbage collection and false otherwise. - * The default implementation will keep all TracedGlobal references as roots. - * - * If this returns false, then V8 may decide that the object referred to by - * such a handle is reclaimed. In that case: - * - No action is required if handles are used with destructors, i.e., by just - * using |TracedGlobal|. - * - When run without destructors, i.e., by using - * |TracedReference|, V8 calls |ResetHandleInNonTracingGC|. - * - * Note that the |handle| is different from the handle that the embedder holds - * for retaining the object. The embedder may use |WrapperClassId()| to - * distinguish cases where it wants handles to be treated as roots from not - * being treated as roots. + * See documentation on EmbedderRootsHandler. */ virtual bool IsRootForNonTracingGC( const v8::TracedReference<v8::Value>& handle); virtual bool IsRootForNonTracingGC(const v8::TracedGlobal<v8::Value>& handle); /** - * Used in combination with |IsRootForNonTracingGC|. Called by V8 when an - * object that is backed by a handle is reclaimed by a non-tracing garbage - * collection. It is up to the embedder to reset the original handle. - * - * Note that the |handle| is different from the handle that the embedder holds - * for retaining the object. It is up to the embedder to find the original - * handle via the object or class id. + * See documentation on EmbedderRootsHandler. */ virtual void ResetHandleInNonTracingGC( const v8::TracedReference<v8::Value>& handle); @@ -8551,6 +8583,7 @@ class V8_EXPORT Isolate { kWasmBulkMemory = 109, // Unused. kWasmMultiValue = 110, kWasmExceptionHandling = 111, + kInvalidatedMegaDOMProtector = 112, // If you add new values here, you'll also need to update Chromium's: // web_feature.mojom, use_counter_callback.cc, and enums.xml. V8 changes to @@ -8887,6 +8920,17 @@ class V8_EXPORT Isolate { Local<Context> GetIncumbentContext(); /** + * Schedules a v8::Exception::Error with the given message. + * See ThrowException for more details. Templatized to provide compile-time + * errors in case of too long strings (see v8::String::NewFromUtf8Literal). + */ + template <int N> + Local<Value> ThrowError(const char (&message)[N]) { + return ThrowError(String::NewFromUtf8Literal(this, message)); + } + Local<Value> ThrowError(Local<String> message); + + /** * Schedules an exception to be thrown when returning to JavaScript. When an * exception has been scheduled it is illegal to invoke any JavaScript * operation; the caller must return immediately and only after the exception @@ -8931,6 +8975,18 @@ class V8_EXPORT Isolate { EmbedderHeapTracer* GetEmbedderHeapTracer(); /** + * Sets an embedder roots handle that V8 should consider when performing + * non-unified heap garbage collections. + * + * Using only EmbedderHeapTracer automatically sets up a default handler. + * The intended use case is for setting a custom handler after invoking + * `AttachCppHeap()`. + * + * V8 does not take ownership of the handler. + */ + void SetEmbedderRootsHandler(EmbedderRootsHandler* handler); + + /** * Attaches a managed C++ heap as an extension to the JavaScript heap. The * embedder maintains ownership of the CppHeap. At most one C++ heap can be * attached to V8. @@ -9499,6 +9555,9 @@ class V8_EXPORT Isolate { void SetWasmExceptionsEnabledCallback(WasmExceptionsEnabledCallback callback); + void SetSharedArrayBufferConstructorEnabledCallback( + SharedArrayBufferConstructorEnabledCallback callback); + /** * This function can be called by the embedder to signal V8 that the dynamic * enabling of features has finished. V8 can now set up dynamically added @@ -9873,6 +9932,9 @@ class V8_EXPORT V8 { * Notifies V8 that the process is cross-origin-isolated, which enables * defining the SharedArrayBuffer function on the global object of Contexts. */ + V8_DEPRECATED( + "Use the command line argument --enable-sharedarraybuffer-per-context " + "together with SetSharedArrayBufferConstructorEnabledCallback") static void SetIsCrossOriginIsolated(); private: diff --git a/deps/v8/include/v8config.h b/deps/v8/include/v8config.h index acd34d7a1f..c1bb691f87 100644 --- a/deps/v8/include/v8config.h +++ b/deps/v8/include/v8config.h @@ -310,10 +310,6 @@ path. Add it with -I<path> to the command line // GCC doc: https://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html # define V8_HAS_COMPUTED_GOTO 1 -// Whether constexpr has full C++14 semantics, in particular that non-constexpr -// code is allowed as long as it's not executed for any constexpr instantiation. -# define V8_HAS_CXX14_CONSTEXPR 1 - #elif defined(__GNUC__) # define V8_CC_GNU 1 @@ -336,7 +332,10 @@ path. Add it with -I<path> to the command line # define V8_HAS_ATTRIBUTE_UNUSED 1 # define V8_HAS_ATTRIBUTE_VISIBILITY 1 # define V8_HAS_ATTRIBUTE_WARN_UNUSED_RESULT (!V8_CC_INTEL) -# define V8_HAS_CPP_ATTRIBUTE_NODISCARD (V8_HAS_CPP_ATTRIBUTE(nodiscard)) + +// [[nodiscard]] does not work together with with +// __attribute__((visibility(""))) on GCC 7.4 which is why there is no define +// for V8_HAS_CPP_ATTRIBUTE_NODISCARD. See https://crbug.com/v8/11707. # define V8_HAS_BUILTIN_ASSUME_ALIGNED 1 # define V8_HAS_BUILTIN_CLZ 1 @@ -348,11 +347,6 @@ path. Add it with -I<path> to the command line // GCC doc: https://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html #define V8_HAS_COMPUTED_GOTO 1 -// Whether constexpr has full C++14 semantics, in particular that non-constexpr -// code is allowed as long as it's not executed for any constexpr instantiation. -// GCC only supports this since version 6. -# define V8_HAS_CXX14_CONSTEXPR (V8_GNUC_PREREQ(6, 0, 0)) - #endif #if defined(_MSC_VER) diff --git a/deps/v8/infra/mb/mb_config.pyl b/deps/v8/infra/mb/mb_config.pyl index c87192896c..9c0c933cda 100644 --- a/deps/v8/infra/mb/mb_config.pyl +++ b/deps/v8/infra/mb/mb_config.pyl @@ -65,6 +65,7 @@ 'V8 Linux64 - debug builder': 'debug_x64', 'V8 Linux64 - dict tracking - debug - builder': 'debug_x64_dict_tracking_trybot', 'V8 Linux64 - custom snapshot - debug builder': 'debug_x64_custom', + 'V8 Linux64 - heap sandbox - debug - builder': 'debug_x64_heap_sandbox', 'V8 Linux64 - internal snapshot': 'release_x64_internal', 'V8 Linux64 - debug - header includes': 'debug_x64_header_includes', 'V8 Linux64 - shared': 'release_x64_shared_verify_heap', @@ -101,6 +102,7 @@ # FYI. 'V8 iOS - sim': 'release_x64_ios_simulator', 'V8 Linux64 - debug - perfetto - builder': 'debug_x64_perfetto', + 'V8 Linux64 - debug - single generation - builder': 'debug_x64_single_generation', 'V8 Linux64 - pointer compression': 'release_x64_pointer_compression', 'V8 Linux64 - pointer compression without dchecks': 'release_x64_pointer_compression_without_dchecks', @@ -136,9 +138,13 @@ 'V8 Clusterfuzz Linux64 - debug builder': 'debug_x64', 'V8 Clusterfuzz Linux64 ASAN no inline - release builder': 'release_x64_asan_symbolized_verify_heap', + 'V8 Clusterfuzz Linux ASAN no inline - release builder': + 'release_x86_asan_symbolized_verify_heap', 'V8 Clusterfuzz Linux64 ASAN - debug builder': 'debug_x64_asan', + 'V8 Clusterfuzz Linux ASAN - debug builder': 'debug_x86_asan', 'V8 Clusterfuzz Linux64 ASAN arm64 - debug builder': 'debug_simulate_arm64_asan', + 'V8 Clusterfuzz Linux - debug builder': 'debug_x86', 'V8 Clusterfuzz Linux ASAN arm - debug builder': 'debug_simulate_arm_asan', 'V8 Clusterfuzz Linux64 CFI - release builder': @@ -202,19 +208,23 @@ 'v8_linux_gcc_compile_rel': 'release_x86_gcc_minimal_symbols', 'v8_linux_gcc_rel_ng': 'release_x86_gcc_minimal_symbols', 'v8_linux_shared_compile_rel': 'release_x86_shared_verify_heap', + 'v8_linux_vtunejit': 'debug_x86_vtunejit', 'v8_linux64_arm64_pointer_compression_rel_ng': 'release_simulate_arm64_pointer_compression', 'v8_linux64_dbg_ng': 'debug_x64_trybot', 'v8_linux64_dict_tracking_dbg_ng': 'debug_x64_dict_tracking_trybot', 'v8_linux64_gc_stress_custom_snapshot_dbg_ng': 'debug_x64_trybot_custom', 'v8_linux64_gcc_compile_dbg': 'debug_x64_gcc', + 'v8_linux64_gcov_coverage': 'release_x64_gcc_coverage', 'v8_linux64_header_includes_dbg': 'debug_x64_header_includes', + 'v8_linux64_heap_sandbox_dbg_ng': 'debug_x64_heap_sandbox', 'v8_linux64_fyi_rel_ng': 'release_x64_test_features_trybot', 'v8_linux64_nodcheck_rel_ng': 'release_x64', 'v8_linux64_perfetto_dbg_ng': 'debug_x64_perfetto', 'v8_linux64_pointer_compression_rel_ng': 'release_x64_pointer_compression', 'v8_linux64_rel_ng': 'release_x64_test_features_trybot', 'v8_linux64_shared_compile_rel': 'release_x64_shared_verify_heap', + 'v8_linux64_single_generation_dbg_ng': 'debug_x64_single_generation', 'v8_linux64_no_wasm_compile_rel': 'release_x64_webassembly_disabled', 'v8_linux64_verify_csa_rel_ng': 'release_x64_verify_csa', 'v8_linux64_asan_rel_ng': 'release_x64_asan_minimal_symbols', @@ -464,8 +474,9 @@ 'release_x64_cfi_clusterfuzz': [ 'release_bot', 'x64', 'cfi_clusterfuzz'], 'release_x64_fuzzilli': [ - 'release_bot', 'x64', 'dcheck_always_on', 'v8_enable_slow_dchecks', 'v8_verify_heap', - 'v8_verify_csa', 'v8_enable_verify_predictable', 'fuzzilli'], + 'release_bot', 'x64', 'dcheck_always_on', 'v8_enable_slow_dchecks', + 'v8_verify_heap', 'v8_verify_csa', 'v8_enable_verify_predictable', + 'fuzzilli'], 'release_x64_msvc': [ 'release_bot_no_goma', 'x64', 'minimal_symbols', 'msvc'], 'release_x64_correctness_fuzzer' : [ @@ -475,8 +486,8 @@ 'release_x64_fuchsia_trybot': [ 'release_trybot', 'x64', 'fuchsia'], 'release_x64_gcc_coverage': [ - 'release_bot_no_goma', 'x64', 'coverage', 'gcc', 'no_custom_libcxx', - 'no_sysroot'], + 'release_bot_no_goma', 'x64', 'coverage', 'gcc', 'lld', + 'no_custom_libcxx', 'no_sysroot'], 'release_x64_ios_simulator': [ 'release_bot', 'x64', 'ios_simulator'], 'release_x64_internal': [ @@ -529,13 +540,17 @@ 'debug_x64_fuchsia': [ 'debug_bot', 'x64', 'fuchsia'], 'debug_x64_gcc': [ - 'debug_bot_no_goma', 'x64', 'gcc', 'v8_check_header_includes'], + 'debug_bot_no_goma', 'x64', 'gcc', 'lld', 'v8_check_header_includes'], 'debug_x64_header_includes': [ 'debug_bot', 'x64', 'v8_check_header_includes'], + 'debug_x64_heap_sandbox': [ + 'debug_bot', 'x64', 'v8_enable_heap_sandbox'], 'debug_x64_minimal_symbols': [ 'debug_bot', 'x64', 'minimal_symbols'], 'debug_x64_perfetto': [ 'debug_bot', 'x64', 'perfetto'], + 'debug_x64_single_generation': [ + 'debug_bot', 'x64', 'v8_enable_single_generation'], 'debug_x64_trybot': [ 'debug_trybot', 'x64'], 'debug_x64_dict_tracking_trybot': [ @@ -548,6 +563,8 @@ # Debug configs for x86. 'debug_x86': [ 'debug_bot', 'x86'], + 'debug_x86_asan': [ + 'debug_bot', 'x86', 'asan', 'lsan'], 'debug_x86_minimal_symbols': [ 'debug_bot', 'x86', 'minimal_symbols'], 'debug_x86_no_i18n': [ @@ -560,10 +577,13 @@ 'debug', 'x86', 'goma', 'v8_enable_slow_dchecks', 'v8_full_debug'], # Release configs for x86. + 'release_x86_asan_symbolized_verify_heap': [ + 'release_bot', 'x86', 'asan', 'lsan', 'symbolized', + 'v8_verify_heap'], 'release_x86_gcc': [ - 'release_bot_no_goma', 'x86', 'gcc', 'v8_check_header_includes'], + 'release_bot_no_goma', 'x86', 'gcc', 'lld', 'v8_check_header_includes'], 'release_x86_gcc_minimal_symbols': [ - 'release_bot_no_goma', 'x86', 'gcc', 'minimal_symbols', + 'release_bot_no_goma', 'x86', 'gcc', 'lld', 'minimal_symbols', 'v8_check_header_includes'], 'release_x86_gcmole': [ 'release_bot', 'x86', 'gcmole'], @@ -645,7 +665,7 @@ 'debug_bot': { 'mixins': [ 'debug', 'shared', 'goma', 'v8_enable_slow_dchecks', - 'v8_optimized_debug'], + 'v8_optimized_debug', 'v8_enable_google_benchmark'], }, 'debug_bot_no_goma': { @@ -701,6 +721,10 @@ 'gn_args': 'target_cpu="x64" target_os="ios"', }, + 'lld': { + 'gn_args': 'use_lld=true', + }, + 'lsan': { 'mixins': ['v8_enable_test_features'], 'gn_args': 'is_lsan=true', @@ -745,7 +769,7 @@ }, 'release_bot': { - 'mixins': ['release', 'static', 'goma'], + 'mixins': ['release', 'static', 'goma', 'v8_enable_google_benchmark'], }, 'release_bot_no_goma': { @@ -834,6 +858,10 @@ 'gn_args': 'v8_control_flow_integrity=true', }, + 'v8_enable_heap_sandbox': { + 'gn_args': 'v8_enable_heap_sandbox=true', + }, + 'v8_enable_lite_mode': { 'gn_args': 'v8_enable_lite_mode=true', }, @@ -842,6 +870,10 @@ 'gn_args': 'v8_enable_slow_dchecks=true', }, + 'v8_enable_google_benchmark': { + 'gn_args': 'v8_enable_google_benchmark=true', + }, + 'webassembly_disabled': { 'gn_args': 'v8_enable_webassembly=false', }, @@ -853,7 +885,10 @@ 'v8_disable_pointer_compression': { 'gn_args': 'v8_enable_pointer_compression=false', }, - + 'v8_enable_single_generation': { + 'gn_args': 'v8_enable_single_generation=true ' + 'v8_disable_write_barriers=true', + }, 'v8_enable_test_features': { 'gn_args': 'v8_enable_test_features=true', }, diff --git a/deps/v8/infra/testing/builders.pyl b/deps/v8/infra/testing/builders.pyl index fc0d1c55b1..8fe8872ed9 100644 --- a/deps/v8/infra/testing/builders.pyl +++ b/deps/v8/infra/testing/builders.pyl @@ -49,7 +49,7 @@ # Fuchsia 'v8_fuchsia_rel_ng_triggered': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'fuchsia-unittests'}, @@ -57,7 +57,7 @@ }, 'V8 Fuchsia': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'fuchsia-unittests'}, @@ -68,7 +68,7 @@ 'v8_linux_dbg_ng_triggered': { 'swarming_dimensions' : { 'cpu': 'x86-64-avx2', - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'benchmarks'}, @@ -102,7 +102,7 @@ }, 'v8_linux_gc_stress_dbg_ng_triggered': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'mjsunit', 'variant': 'slow_path', 'test_args': ['--gc-stress'], 'shards': 2}, @@ -111,7 +111,7 @@ }, 'v8_linux_gcc_rel_ng_triggered': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'v8testing'}, @@ -120,7 +120,7 @@ 'v8_linux_nodcheck_rel_ng_triggered': { 'swarming_dimensions' : { 'cpu': 'x86-64-avx2', - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'benchmarks'}, @@ -135,7 +135,7 @@ }, 'v8_linux_noi18n_rel_ng_triggered': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'mozilla', 'variant': 'default'}, @@ -146,7 +146,7 @@ 'v8_linux_rel_ng_triggered': { 'swarming_dimensions' : { 'cpu': 'x86-64-avx2', - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'benchmarks'}, @@ -166,7 +166,7 @@ 'v8_linux_optional_rel_ng_triggered': { 'swarming_dimensions' : { 'cpu': 'x86-64-avx2', - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ # Code serializer. @@ -268,7 +268,7 @@ }, 'v8_linux_verify_csa_rel_ng_triggered': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'v8testing', 'shards': 2}, @@ -278,7 +278,7 @@ # Linux32 with arm simulators 'v8_linux_arm_dbg_ng_triggered': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'mjsunit_sp_frame_access'}, @@ -291,7 +291,7 @@ }, 'v8_linux_arm_lite_rel_ng_triggered': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'v8testing', 'variant': 'default', 'shards': 4}, @@ -299,7 +299,7 @@ }, 'v8_linux_arm_rel_ng_triggered': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'mjsunit_sp_frame_access', 'shards': 2}, @@ -314,7 +314,7 @@ # Linux64 'v8_linux64_asan_rel_ng_triggered': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'test262', 'shards': 7}, @@ -325,7 +325,7 @@ }, 'v8_linux64_cfi_rel_ng_triggered': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'benchmarks'}, @@ -338,7 +338,7 @@ 'v8_linux64_dbg_ng_triggered': { 'swarming_dimensions' : { 'cpu': 'x86-64-avx2', - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'benchmarks'}, @@ -360,7 +360,7 @@ 'v8_linux64_dict_tracking_dbg_ng_triggered': { 'swarming_dimensions' : { 'cpu': 'x86-64-avx2', - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'v8testing', 'shards': 3}, @@ -368,26 +368,14 @@ }, 'v8_linux64_fuzzilli_ng_triggered': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, # TODO(almuthanna): Add a new test config for the fuzzilli suite. 'tests': [], }, - 'v8_linux64_gc_stress_custom_snapshot_dbg_ng_triggered': { - 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', - }, - 'tests': [ - { - 'name': 'mjsunit', - 'test_args': ['--gc-stress', '--no-harness'], - 'shards': 3, - }, - ], - }, 'v8_linux64_fyi_rel_ng_triggered': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ # Infra staging. @@ -401,11 +389,41 @@ {'name': 'mjsunit', 'variant': 'experimental_regexp'}, # Concurrent inlining. {'name': 'mjsunit', 'variant': 'concurrent_inlining'}, + # Wasm write protect code space. + {'name': 'mjsunit', 'variant': 'wasm_write_protect_code'}, + ], + }, + 'v8_linux64_gc_stress_custom_snapshot_dbg_ng_triggered': { + 'swarming_dimensions' : { + 'os': 'Ubuntu-18.04', + }, + 'tests': [ + { + 'name': 'mjsunit', + 'test_args': ['--gc-stress', '--no-harness'], + 'shards': 3, + }, + ], + }, + 'v8_linux64_gcov_coverage': { + 'swarming_dimensions' : { + 'os': 'Ubuntu-18.04', + }, + 'tests': [ + {'name': 'v8testing'}, + ], + }, + 'v8_linux64_heap_sandbox_dbg_ng_triggered': { + 'swarming_dimensions' : { + 'os': 'Ubuntu-18.04', + }, + 'tests': [ + {'name': 'v8testing', 'shards': 2}, ], }, 'v8_linux64_msan_rel_ng_triggered': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'test262', 'variant': 'default', 'shards': 2}, @@ -415,7 +433,7 @@ 'v8_linux64_nodcheck_rel_ng_triggered': { 'swarming_dimensions' : { 'cpu': 'x86-64-avx2', - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'benchmarks'}, @@ -438,7 +456,7 @@ }, 'v8_linux64_perfetto_dbg_ng_triggered': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'v8testing', 'shards': 3}, @@ -446,7 +464,15 @@ }, 'v8_linux64_pointer_compression_rel_ng_triggered': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', + }, + 'tests': [ + {'name': 'v8testing', 'shards': 3}, + ], + }, + 'v8_linux64_single_generation_dbg_ng_triggered': { + 'swarming_dimensions' : { + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'v8testing', 'shards': 3}, @@ -455,7 +481,7 @@ 'v8_linux64_rel_ng_triggered': { 'swarming_dimensions' : { 'cpu': 'x86-64-avx2', - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ # TODO(machenbach): Add benchmarks. @@ -475,7 +501,7 @@ }, 'v8_linux64_tsan_rel_ng_triggered': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'benchmarks'}, @@ -489,7 +515,7 @@ }, 'v8_linux64_tsan_no_cm_rel_ng_triggered': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ { @@ -507,7 +533,7 @@ }, 'v8_linux64_tsan_isolates_rel_ng_triggered': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'v8testing', 'test_args': ['--isolates'], 'shards': 7}, @@ -515,7 +541,7 @@ }, 'v8_linux64_ubsan_rel_ng_triggered': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'v8testing', 'shards': 2}, @@ -523,7 +549,7 @@ }, 'v8_linux64_verify_csa_rel_ng_triggered': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'v8testing', 'shards': 2}, @@ -533,7 +559,7 @@ # Linux64 with arm64 simulators 'v8_linux_arm64_dbg_ng_triggered': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'mjsunit_sp_frame_access'}, @@ -546,7 +572,7 @@ }, 'v8_linux_arm64_gc_stress_dbg_ng_triggered': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'd8testing', 'test_args': ['--gc-stress'], 'shards': 12}, @@ -554,7 +580,7 @@ }, 'v8_linux_arm64_rel_ng_triggered': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'mjsunit_sp_frame_access', 'shards': 4}, @@ -567,7 +593,7 @@ }, 'v8_linux_arm64_cfi_rel_ng_triggered': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'test262', 'variant': 'default', 'shards': 3}, @@ -576,7 +602,7 @@ }, 'v8_linux64_arm64_pointer_compression_rel_ng_triggered': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'v8testing', 'variant': 'default', 'shards': 4}, @@ -586,7 +612,7 @@ # Linux64 with RISC-V simulators 'v8_linux64_riscv64_rel_ng_triggered': { 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'v8testing', 'shards': 3}, @@ -598,7 +624,7 @@ 'swarming_dimensions' : { 'cores': '8', 'cpu': 'armv7l-32-ODROID-XU4', - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu', }, 'swarming_task_attrs': { # Use same prio as CI due to limited resources. @@ -760,6 +786,7 @@ }, 'tests': [ {'name': 'v8testing', 'shards': 8}, + {'name': 'v8testing', 'variant': 'future', 'shards': 2}, ], }, 'v8_mac_arm64_sim_dbg_ng_triggered': { @@ -770,6 +797,7 @@ }, 'tests': [ {'name': 'v8testing', 'shards': 8}, + {'name': 'v8testing', 'variant': 'future', 'shards': 2}, ], }, 'v8_mac_arm64_sim_nodcheck_rel_ng_triggered': { @@ -780,6 +808,7 @@ }, 'tests': [ {'name': 'v8testing', 'shards': 8}, + {'name': 'v8testing', 'variant': 'future', 'shards': 2}, ], }, ############################################################################## @@ -788,7 +817,7 @@ # Main. 'V8 Fuzzer': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'swarming_task_attrs': { 'expiration': 14400, @@ -802,7 +831,7 @@ 'V8 Linux': { 'swarming_dimensions': { 'cpu': 'x86-64-avx2', - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'benchmarks'}, @@ -873,7 +902,7 @@ }, 'V8 Linux - arm64 - sim - CFI': { 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'test262', 'variant': 'default', 'shards': 3}, @@ -882,7 +911,7 @@ }, 'V8 Linux - arm64 - sim - MSAN': { 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'test262', 'variant': 'default', 'shards': 3}, @@ -892,7 +921,7 @@ 'V8 Linux - debug': { 'swarming_dimensions': { 'cpu': 'x86-64-avx2', - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'benchmarks'}, @@ -991,7 +1020,7 @@ }, 'V8 Linux - full debug': { 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'v8testing', 'variant': 'default', 'shards': 4}, @@ -999,7 +1028,7 @@ }, 'V8 Linux - gc stress': { 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ { @@ -1017,7 +1046,7 @@ }, 'V8 Linux - noi18n - debug': { 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'mozilla', 'variant': 'default'}, @@ -1027,7 +1056,7 @@ }, 'V8 Linux - predictable': { 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'benchmarks'}, @@ -1037,7 +1066,7 @@ }, 'V8 Linux - shared': { 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'mozilla'}, @@ -1047,7 +1076,7 @@ }, 'V8 Linux - verify csa': { 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'v8testing'}, @@ -1055,7 +1084,7 @@ }, 'V8 Linux gcc': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'v8testing'}, @@ -1064,7 +1093,7 @@ 'V8 Linux64': { 'swarming_dimensions': { 'cpu': 'x86-64-avx2', - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'benchmarks'}, @@ -1108,7 +1137,7 @@ }, 'V8 Linux64 - cfi': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'benchmarks'}, @@ -1120,7 +1149,7 @@ }, 'V8 Linux64 - custom snapshot - debug': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'mjsunit', 'test_args': ['--no-harness']}, @@ -1129,7 +1158,7 @@ 'V8 Linux64 - debug': { 'swarming_dimensions': { 'cpu': 'x86-64-avx2', - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'benchmarks'}, @@ -1171,7 +1200,7 @@ 'V8 Linux64 - dict tracking - debug': { 'swarming_dimensions': { 'cpu': 'x86-64-avx2', - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'v8testing', 'shards': 3}, @@ -1179,7 +1208,7 @@ }, 'V8 Linux64 - debug - fyi': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ # Infra staging. @@ -1193,11 +1222,13 @@ {'name': 'mjsunit', 'variant': 'experimental_regexp'}, # Concurrent inlining. {'name': 'mjsunit', 'variant': 'concurrent_inlining'}, + # Wasm write protect code space. + {'name': 'mjsunit', 'variant': 'wasm_write_protect_code'}, ], }, 'V8 Linux64 - debug - perfetto': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'swarming_task_attrs': { 'expiration': 14400, @@ -1208,9 +1239,22 @@ {'name': 'v8testing', 'shards': 2}, ], }, + 'V8 Linux64 - debug - single generation': { + 'swarming_dimensions' : { + 'os': 'Ubuntu-18.04', + }, + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 3600, + 'priority': 35, + }, + 'tests': [ + {'name': 'v8testing', 'shards': 3}, + ], + }, 'V8 Linux64 - fyi': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ # Infra staging. @@ -1224,19 +1268,29 @@ {'name': 'mjsunit', 'variant': 'experimental_regexp'}, # Concurrent inlining. {'name': 'mjsunit', 'variant': 'concurrent_inlining'}, + # Wasm write protect code space. + {'name': 'mjsunit', 'variant': 'wasm_write_protect_code'}, ], }, 'V8 Linux64 - gcov coverage': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'v8testing'}, ], }, + 'V8 Linux64 - heap sandbox - debug': { + 'swarming_dimensions' : { + 'os': 'Ubuntu-18.04', + }, + 'tests': [ + {'name': 'v8testing', 'shards': 2}, + ], + }, 'V8 Linux64 - internal snapshot': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'v8testing'}, @@ -1244,7 +1298,7 @@ }, 'V8 Linux64 - pointer compression': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'v8testing', 'shards': 2}, @@ -1252,7 +1306,7 @@ }, 'V8 Linux64 - shared': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'mozilla'}, @@ -1262,7 +1316,7 @@ }, 'V8 Linux64 - verify csa': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'v8testing'}, @@ -1270,7 +1324,7 @@ }, 'V8 Linux64 ASAN': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'test262', 'shards': 5}, @@ -1281,7 +1335,7 @@ }, 'V8 Linux64 GC Stress - custom snapshot': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ { @@ -1293,7 +1347,7 @@ }, 'V8 Linux64 TSAN': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'benchmarks'}, @@ -1307,7 +1361,7 @@ }, 'V8 Linux64 TSAN - stress-incremental-marking': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'swarming_task_attrs': { 'expiration': 14400, @@ -1338,7 +1392,7 @@ }, 'V8 Linux64 TSAN - isolates': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'v8testing', 'test_args': ['--isolates'], 'shards': 7}, @@ -1346,7 +1400,7 @@ }, 'V8 Linux64 TSAN - no-concurrent-marking': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ { @@ -1364,7 +1418,7 @@ }, 'V8 Linux64 UBSan': { 'swarming_dimensions' : { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'mozilla'}, @@ -1427,8 +1481,8 @@ 'priority': 35, }, 'tests': [ - {'name': 'd8testing'}, - {'name': 'd8testing', 'variant': 'extra'}, + {'name': 'v8testing'}, + {'name': 'v8testing', 'variant': 'extra'}, ], }, 'V8 Mac - arm64 - debug': { @@ -1460,6 +1514,7 @@ }, 'tests': [ {'name': 'v8testing', 'shards': 8}, + {'name': 'v8testing', 'variant': 'future', 'shards': 2}, ], }, 'V8 Mac - arm64 - sim - release': { @@ -1475,6 +1530,7 @@ }, 'tests': [ {'name': 'v8testing', 'shards': 8}, + {'name': 'v8testing', 'variant': 'future', 'shards': 2}, ], }, 'V8 Win32': { @@ -1558,7 +1614,7 @@ 'swarming_dimensions': { 'cores': '8', 'cpu': 'armv7l-32-ODROID-XU4', - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu', }, 'swarming_task_attrs': { 'expiration': 21600, @@ -1587,7 +1643,7 @@ 'swarming_dimensions': { 'cores': '8', 'cpu': 'armv7l-32-ODROID-XU4', - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu', }, 'swarming_task_attrs': { 'expiration': 21600, @@ -1615,7 +1671,7 @@ 'swarming_dimensions': { 'cores': '8', 'cpu': 'armv7l-32-ODROID-XU4', - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu', }, 'swarming_task_attrs': { 'expiration': 21600, @@ -1633,7 +1689,7 @@ }, 'V8 Linux - arm - sim': { 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'mjsunit_sp_frame_access'}, @@ -1682,7 +1738,7 @@ }, 'V8 Linux - arm - sim - debug': { 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'mjsunit_sp_frame_access', 'shards': 6}, @@ -1735,7 +1791,7 @@ }, 'V8 Linux - arm - sim - lite': { 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'v8testing', 'variant': 'default', 'shards': 2}, @@ -1743,7 +1799,7 @@ }, 'V8 Linux - arm - sim - lite - debug': { 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'v8testing', 'variant': 'default', 'shards': 4}, @@ -1751,7 +1807,7 @@ }, 'V8 Linux - arm64 - sim': { 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'tests': [ {'name': 'mjsunit_sp_frame_access'}, @@ -1764,7 +1820,7 @@ }, 'V8 Linux - arm64 - sim - debug': { 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, # TODO(machenbach): Remove longer timeout when this builder scales better. 'swarming_task_attrs': { @@ -1781,7 +1837,7 @@ }, 'V8 Linux - arm64 - sim - gc stress': { 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'swarming_task_attrs': { 'expiration': 14400, @@ -1798,7 +1854,7 @@ }, 'V8 Linux - mips64el - sim': { 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'swarming_task_attrs': { 'expiration': 14400, @@ -1812,7 +1868,7 @@ }, 'V8 Linux - mipsel - sim': { 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'swarming_task_attrs': { 'expiration': 14400, @@ -1826,7 +1882,7 @@ }, 'V8 Linux - ppc64 - sim': { 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'swarming_task_attrs': { 'expiration': 14400, @@ -1839,7 +1895,7 @@ }, 'V8 Linux - riscv64 - sim': { 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'swarming_task_attrs': { 'expiration': 14400, @@ -1852,7 +1908,7 @@ }, 'V8 Linux - s390x - sim': { 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'swarming_task_attrs': { 'expiration': 14400, @@ -1865,7 +1921,7 @@ }, 'V8 Linux64 - arm64 - sim - pointer compression': { 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'swarming_task_attrs': { 'expiration': 14400, @@ -1880,7 +1936,7 @@ # Clusterfuzz. 'V8 NumFuzz': { 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'swarming_task_attrs': { 'expiration': 13800, @@ -1897,7 +1953,7 @@ }, 'V8 NumFuzz - TSAN': { 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'swarming_task_attrs': { 'expiration': 13800, @@ -1945,7 +2001,7 @@ }, 'V8 NumFuzz - debug': { 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', + 'os': 'Ubuntu-18.04', }, 'swarming_task_attrs': { 'expiration': 13800, @@ -1998,282 +2054,4 @@ }, ], }, - ############################################################################## - # Branches. - 'V8 Linux - beta branch': { - 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', - }, - 'tests': [ - {'name': 'mozilla'}, - {'name': 'test262', 'variant': 'default'}, - {'name': 'v8testing'}, - ], - }, - 'V8 Linux - beta branch - debug': { - 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', - }, - 'tests': [ - {'name': 'mozilla'}, - {'name': 'test262', 'variant': 'default'}, - {'name': 'v8testing', 'shards': 3}, - ], - }, - 'V8 Linux - stable branch': { - 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', - }, - 'tests': [ - {'name': 'mozilla'}, - {'name': 'test262', 'variant': 'default'}, - {'name': 'v8testing'}, - ], - }, - 'V8 Linux - stable branch - debug': { - 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', - }, - 'tests': [ - {'name': 'mozilla'}, - {'name': 'test262', 'variant': 'default'}, - {'name': 'v8testing', 'shards': 3}, - ], - }, - 'V8 Linux - previous branch': { - 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', - }, - 'tests': [ - {'name': 'mozilla'}, - {'name': 'test262', 'variant': 'default'}, - {'name': 'v8testing'}, - ], - }, - 'V8 Linux - previous branch - debug': { - 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', - }, - 'tests': [ - {'name': 'mozilla'}, - {'name': 'test262', 'variant': 'default'}, - {'name': 'v8testing', 'shards': 3}, - ], - }, - 'V8 Linux64 - beta branch': { - 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', - }, - 'tests': [ - {'name': 'mozilla'}, - {'name': 'test262', 'variant': 'default'}, - {'name': 'v8testing'}, - ], - }, - 'V8 Linux64 - beta branch - debug': { - 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', - }, - 'tests': [ - {'name': 'mozilla'}, - {'name': 'test262', 'variant': 'default'}, - {'name': 'v8testing', 'shards': 3}, - ], - }, - 'V8 Linux64 - stable branch': { - 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', - }, - 'tests': [ - {'name': 'mozilla'}, - {'name': 'test262', 'variant': 'default'}, - {'name': 'v8testing'}, - ], - }, - 'V8 Linux64 - stable branch - debug': { - 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', - }, - 'tests': [ - {'name': 'mozilla'}, - {'name': 'test262', 'variant': 'default'}, - {'name': 'v8testing', 'shards': 3}, - ], - }, - 'V8 Linux64 - previous branch': { - 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', - }, - 'tests': [ - {'name': 'mozilla'}, - {'name': 'test262', 'variant': 'default'}, - {'name': 'v8testing'}, - ], - }, - 'V8 Linux64 - previous branch - debug': { - 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', - }, - 'tests': [ - {'name': 'mozilla'}, - {'name': 'test262', 'variant': 'default'}, - {'name': 'v8testing', 'shards': 3}, - ], - }, - 'V8 arm - sim - beta branch': { - 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', - }, - 'tests': [ - {'name': 'mozilla'}, - {'name': 'test262', 'variant': 'default'}, - {'name': 'v8testing', 'shards': 4}, - ], - }, - 'V8 arm - sim - beta branch - debug': { - 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', - }, - 'tests': [ - {'name': 'mozilla', 'shards': 2}, - {'name': 'test262', 'variant': 'default', 'shards': 2}, - {'name': 'v8testing', 'shards': 10}, - ], - }, - 'V8 arm - sim - stable branch': { - 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', - }, - 'tests': [ - {'name': 'mozilla'}, - {'name': 'test262', 'variant': 'default'}, - {'name': 'v8testing', 'shards': 4}, - ], - }, - 'V8 arm - sim - stable branch - debug': { - 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', - }, - 'tests': [ - {'name': 'mozilla', 'shards': 2}, - {'name': 'test262', 'variant': 'default', 'shards': 2}, - {'name': 'v8testing', 'shards': 10}, - ], - }, - 'V8 arm - sim - previous branch': { - 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', - }, - 'tests': [ - {'name': 'mozilla'}, - {'name': 'test262', 'variant': 'default'}, - {'name': 'v8testing', 'shards': 4}, - ], - }, - 'V8 arm - sim - previous branch - debug': { - 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', - }, - 'tests': [ - {'name': 'mozilla', 'shards': 2}, - {'name': 'test262', 'variant': 'default', 'shards': 2}, - {'name': 'v8testing', 'shards': 10}, - ], - }, - 'V8 mips64el - sim - beta branch': { - 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', - }, - 'tests': [ - {'name': 'unittests'}, - ], - }, - 'V8 mips64el - sim - stable branch': { - 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', - }, - 'tests': [ - {'name': 'unittests'}, - ], - }, - 'V8 mips64el - sim - previous branch': { - 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', - }, - 'tests': [ - {'name': 'unittests'}, - ], - }, - 'V8 mipsel - sim - beta branch': { - 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', - }, - 'tests': [ - {'name': 'v8testing', 'shards': 4}, - ], - }, - 'V8 mipsel - sim - stable branch': { - 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', - }, - 'tests': [ - {'name': 'v8testing', 'shards': 4}, - ], - }, - 'V8 mipsel - sim - previous branch': { - 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', - }, - 'tests': [ - {'name': 'v8testing', 'shards': 4}, - ], - }, - 'V8 ppc64 - sim - beta branch': { - 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', - }, - 'tests': [ - {'name': 'unittests'}, - ], - }, - 'V8 ppc64 - sim - stable branch': { - 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', - }, - 'tests': [ - {'name': 'unittests'}, - ], - }, - 'V8 ppc64 - sim - previous branch': { - 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', - }, - 'tests': [ - {'name': 'unittests'}, - ], - }, - 'V8 s390x - sim - beta branch': { - 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', - }, - 'tests': [ - {'name': 'unittests'}, - ], - }, - 'V8 s390x - sim - stable branch': { - 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', - }, - 'tests': [ - {'name': 'unittests'}, - ], - }, - 'V8 s390x - sim - previous branch': { - 'swarming_dimensions': { - 'os': 'Ubuntu-16.04', - }, - 'tests': [ - {'name': 'unittests'}, - ], - }, } diff --git a/deps/v8/samples/OWNERS b/deps/v8/samples/OWNERS index 9c4f2439aa..6df8720dc5 100644 --- a/deps/v8/samples/OWNERS +++ b/deps/v8/samples/OWNERS @@ -1,2 +1,2 @@ mathias@chromium.org -yangguo@chromium.org +cbruni@chromium.org diff --git a/deps/v8/samples/shell.cc b/deps/v8/samples/shell.cc index e844ca51bf..7de600a88f 100644 --- a/deps/v8/samples/shell.cc +++ b/deps/v8/samples/shell.cc @@ -147,20 +147,17 @@ void Print(const v8::FunctionCallbackInfo<v8::Value>& args) { // the argument into a JavaScript string. void Read(const v8::FunctionCallbackInfo<v8::Value>& args) { if (args.Length() != 1) { - args.GetIsolate()->ThrowException( - v8::String::NewFromUtf8Literal(args.GetIsolate(), "Bad parameters")); + args.GetIsolate()->ThrowError("Bad parameters"); return; } v8::String::Utf8Value file(args.GetIsolate(), args[0]); if (*file == NULL) { - args.GetIsolate()->ThrowException(v8::String::NewFromUtf8Literal( - args.GetIsolate(), "Error loading file")); + args.GetIsolate()->ThrowError("Error loading file"); return; } v8::Local<v8::String> source; if (!ReadFile(args.GetIsolate(), *file).ToLocal(&source)) { - args.GetIsolate()->ThrowException(v8::String::NewFromUtf8Literal( - args.GetIsolate(), "Error loading file")); + args.GetIsolate()->ThrowError("Error loading file"); return; } @@ -175,19 +172,16 @@ void Load(const v8::FunctionCallbackInfo<v8::Value>& args) { v8::HandleScope handle_scope(args.GetIsolate()); v8::String::Utf8Value file(args.GetIsolate(), args[i]); if (*file == NULL) { - args.GetIsolate()->ThrowException(v8::String::NewFromUtf8Literal( - args.GetIsolate(), "Error loading file")); + args.GetIsolate()->ThrowError("Error loading file"); return; } v8::Local<v8::String> source; if (!ReadFile(args.GetIsolate(), *file).ToLocal(&source)) { - args.GetIsolate()->ThrowException(v8::String::NewFromUtf8Literal( - args.GetIsolate(), "Error loading file")); + args.GetIsolate()->ThrowError("Error loading file"); return; } if (!ExecuteString(args.GetIsolate(), source, args[i], false, false)) { - args.GetIsolate()->ThrowException(v8::String::NewFromUtf8Literal( - args.GetIsolate(), "Error executing file")); + args.GetIsolate()->ThrowError("Error executing file"); return; } } diff --git a/deps/v8/src/DEPS b/deps/v8/src/DEPS index c3394e4b7a..3c5dca663f 100644 --- a/deps/v8/src/DEPS +++ b/deps/v8/src/DEPS @@ -5,6 +5,7 @@ include_rules = [ "+src/asmjs/asm-js.h", "-src/baseline", "+src/baseline/baseline.h", + "+src/baseline/baseline-osr-inl.h", "+src/baseline/bytecode-offset-iterator.h", "-src/bigint", "+src/bigint/bigint.h", @@ -14,6 +15,7 @@ include_rules = [ "+src/compiler/wasm-compiler.h", "-src/heap", "+src/heap/basic-memory-chunk.h", + "+src/heap/code-range.h", "+src/heap/combined-heap.h", "+src/heap/embedder-tracing.h", "+src/heap/factory.h", diff --git a/deps/v8/src/api/api-arguments-inl.h b/deps/v8/src/api/api-arguments-inl.h index 57b533c7c9..4edd0dad29 100644 --- a/deps/v8/src/api/api-arguments-inl.h +++ b/deps/v8/src/api/api-arguments-inl.h @@ -96,8 +96,7 @@ inline JSReceiver FunctionCallbackArguments::holder() { Handle<InterceptorInfo> interceptor, Handle<Name> name) { \ DCHECK_NAME_COMPATIBLE(interceptor, name); \ Isolate* isolate = this->isolate(); \ - RuntimeCallTimerScope timer( \ - isolate, RuntimeCallCounterId::kNamed##FUNCTION##Callback); \ + RCS_SCOPE(isolate, RuntimeCallCounterId::kNamed##FUNCTION##Callback); \ Handle<Object> receiver_check_unsupported; \ GenericNamedProperty##FUNCTION##Callback f = \ ToCData<GenericNamedProperty##FUNCTION##Callback>( \ @@ -120,8 +119,7 @@ FOR_EACH_CALLBACK(CREATE_NAMED_CALLBACK) Handle<InterceptorInfo> interceptor, uint32_t index) { \ DCHECK(!interceptor->is_named()); \ Isolate* isolate = this->isolate(); \ - RuntimeCallTimerScope timer( \ - isolate, RuntimeCallCounterId::kIndexed##FUNCTION##Callback); \ + RCS_SCOPE(isolate, RuntimeCallCounterId::kIndexed##FUNCTION##Callback); \ Handle<Object> receiver_check_unsupported; \ IndexedProperty##FUNCTION##Callback f = \ ToCData<IndexedProperty##FUNCTION##Callback>(interceptor->TYPE()); \ @@ -142,7 +140,7 @@ FOR_EACH_CALLBACK(CREATE_INDEXED_CALLBACK) Handle<Object> FunctionCallbackArguments::Call(CallHandlerInfo handler) { Isolate* isolate = this->isolate(); LOG(isolate, ApiObjectAccess("call", holder())); - RuntimeCallTimerScope timer(isolate, RuntimeCallCounterId::kFunctionCallback); + RCS_SCOPE(isolate, RuntimeCallCounterId::kFunctionCallback); v8::FunctionCallback f = v8::ToCData<v8::FunctionCallback>(handler.callback()); Handle<Object> receiver_check_unsupported; @@ -163,8 +161,7 @@ Handle<JSObject> PropertyCallbackArguments::CallNamedEnumerator( Handle<InterceptorInfo> interceptor) { DCHECK(interceptor->is_named()); LOG(isolate(), ApiObjectAccess("interceptor-named-enumerator", holder())); - RuntimeCallTimerScope timer(isolate(), - RuntimeCallCounterId::kNamedEnumeratorCallback); + RCS_SCOPE(isolate(), RuntimeCallCounterId::kNamedEnumeratorCallback); return CallPropertyEnumerator(interceptor); } @@ -172,8 +169,7 @@ Handle<JSObject> PropertyCallbackArguments::CallIndexedEnumerator( Handle<InterceptorInfo> interceptor) { DCHECK(!interceptor->is_named()); LOG(isolate(), ApiObjectAccess("interceptor-indexed-enumerator", holder())); - RuntimeCallTimerScope timer(isolate(), - RuntimeCallCounterId::kIndexedEnumeratorCallback); + RCS_SCOPE(isolate(), RuntimeCallCounterId::kIndexedEnumeratorCallback); return CallPropertyEnumerator(interceptor); } @@ -181,8 +177,7 @@ Handle<Object> PropertyCallbackArguments::CallNamedGetter( Handle<InterceptorInfo> interceptor, Handle<Name> name) { DCHECK_NAME_COMPATIBLE(interceptor, name); Isolate* isolate = this->isolate(); - RuntimeCallTimerScope timer(isolate, - RuntimeCallCounterId::kNamedGetterCallback); + RCS_SCOPE(isolate, RuntimeCallCounterId::kNamedGetterCallback); LOG(isolate, ApiNamedPropertyAccess("interceptor-named-getter", holder(), *name)); GenericNamedPropertyGetterCallback f = @@ -194,8 +189,7 @@ Handle<Object> PropertyCallbackArguments::CallNamedDescriptor( Handle<InterceptorInfo> interceptor, Handle<Name> name) { DCHECK_NAME_COMPATIBLE(interceptor, name); Isolate* isolate = this->isolate(); - RuntimeCallTimerScope timer(isolate, - RuntimeCallCounterId::kNamedDescriptorCallback); + RCS_SCOPE(isolate, RuntimeCallCounterId::kNamedDescriptorCallback); LOG(isolate, ApiNamedPropertyAccess("interceptor-named-descriptor", holder(), *name)); GenericNamedPropertyDescriptorCallback f = @@ -222,8 +216,7 @@ Handle<Object> PropertyCallbackArguments::CallNamedSetter( GenericNamedPropertySetterCallback f = ToCData<GenericNamedPropertySetterCallback>(interceptor->setter()); Isolate* isolate = this->isolate(); - RuntimeCallTimerScope timer(isolate, - RuntimeCallCounterId::kNamedSetterCallback); + RCS_SCOPE(isolate, RuntimeCallCounterId::kNamedSetterCallback); PREPARE_CALLBACK_INFO_FAIL_SIDE_EFFECT_CHECK(isolate, f, Handle<Object>, v8::Value); LOG(isolate, @@ -237,8 +230,7 @@ Handle<Object> PropertyCallbackArguments::CallNamedDefiner( const v8::PropertyDescriptor& desc) { DCHECK_NAME_COMPATIBLE(interceptor, name); Isolate* isolate = this->isolate(); - RuntimeCallTimerScope timer(isolate, - RuntimeCallCounterId::kNamedDefinerCallback); + RCS_SCOPE(isolate, RuntimeCallCounterId::kNamedDefinerCallback); GenericNamedPropertyDefinerCallback f = ToCData<GenericNamedPropertyDefinerCallback>(interceptor->definer()); PREPARE_CALLBACK_INFO_FAIL_SIDE_EFFECT_CHECK(isolate, f, Handle<Object>, @@ -253,8 +245,7 @@ Handle<Object> PropertyCallbackArguments::CallIndexedSetter( Handle<InterceptorInfo> interceptor, uint32_t index, Handle<Object> value) { DCHECK(!interceptor->is_named()); Isolate* isolate = this->isolate(); - RuntimeCallTimerScope timer(isolate, - RuntimeCallCounterId::kIndexedSetterCallback); + RCS_SCOPE(isolate, RuntimeCallCounterId::kIndexedSetterCallback); IndexedPropertySetterCallback f = ToCData<IndexedPropertySetterCallback>(interceptor->setter()); PREPARE_CALLBACK_INFO_FAIL_SIDE_EFFECT_CHECK(isolate, f, Handle<Object>, @@ -270,8 +261,7 @@ Handle<Object> PropertyCallbackArguments::CallIndexedDefiner( const v8::PropertyDescriptor& desc) { DCHECK(!interceptor->is_named()); Isolate* isolate = this->isolate(); - RuntimeCallTimerScope timer(isolate, - RuntimeCallCounterId::kIndexedDefinerCallback); + RCS_SCOPE(isolate, RuntimeCallCounterId::kIndexedDefinerCallback); IndexedPropertyDefinerCallback f = ToCData<IndexedPropertyDefinerCallback>(interceptor->definer()); PREPARE_CALLBACK_INFO_FAIL_SIDE_EFFECT_CHECK(isolate, f, Handle<Object>, @@ -286,8 +276,7 @@ Handle<Object> PropertyCallbackArguments::CallIndexedGetter( Handle<InterceptorInfo> interceptor, uint32_t index) { DCHECK(!interceptor->is_named()); Isolate* isolate = this->isolate(); - RuntimeCallTimerScope timer(isolate, - RuntimeCallCounterId::kNamedGetterCallback); + RCS_SCOPE(isolate, RuntimeCallCounterId::kNamedGetterCallback); LOG(isolate, ApiIndexedPropertyAccess("interceptor-indexed-getter", holder(), index)); IndexedPropertyGetterCallback f = @@ -299,8 +288,7 @@ Handle<Object> PropertyCallbackArguments::CallIndexedDescriptor( Handle<InterceptorInfo> interceptor, uint32_t index) { DCHECK(!interceptor->is_named()); Isolate* isolate = this->isolate(); - RuntimeCallTimerScope timer(isolate, - RuntimeCallCounterId::kIndexedDescriptorCallback); + RCS_SCOPE(isolate, RuntimeCallCounterId::kIndexedDescriptorCallback); LOG(isolate, ApiIndexedPropertyAccess("interceptor-indexed-descriptor", holder(), index)); IndexedPropertyDescriptorCallback f = @@ -338,8 +326,7 @@ Handle<JSObject> PropertyCallbackArguments::CallPropertyEnumerator( Handle<Object> PropertyCallbackArguments::CallAccessorGetter( Handle<AccessorInfo> info, Handle<Name> name) { Isolate* isolate = this->isolate(); - RuntimeCallTimerScope timer(isolate, - RuntimeCallCounterId::kAccessorGetterCallback); + RCS_SCOPE(isolate, RuntimeCallCounterId::kAccessorGetterCallback); LOG(isolate, ApiNamedPropertyAccess("accessor-getter", holder(), *name)); AccessorNameGetterCallback f = ToCData<AccessorNameGetterCallback>(info->getter()); @@ -351,8 +338,7 @@ Handle<Object> PropertyCallbackArguments::CallAccessorSetter( Handle<AccessorInfo> accessor_info, Handle<Name> name, Handle<Object> value) { Isolate* isolate = this->isolate(); - RuntimeCallTimerScope timer(isolate, - RuntimeCallCounterId::kAccessorSetterCallback); + RCS_SCOPE(isolate, RuntimeCallCounterId::kAccessorSetterCallback); AccessorNameSetterCallback f = ToCData<AccessorNameSetterCallback>(accessor_info->setter()); PREPARE_CALLBACK_INFO(isolate, f, Handle<Object>, void, accessor_info, diff --git a/deps/v8/src/api/api-inl.h b/deps/v8/src/api/api-inl.h index 849364e655..84b9b288bb 100644 --- a/deps/v8/src/api/api-inl.h +++ b/deps/v8/src/api/api-inl.h @@ -139,6 +139,7 @@ class V8_NODISCARD CallDepthScope { CallDepthScope(i::Isolate* isolate, Local<Context> context) : isolate_(isolate), context_(context), + did_enter_context_(false), escaped_(false), safe_for_termination_(isolate->next_v8_call_is_safe_for_termination()), interrupts_scope_(isolate_, i::StackGuard::TERMINATE_EXECUTION, @@ -152,12 +153,11 @@ class V8_NODISCARD CallDepthScope { if (!context.IsEmpty()) { i::Handle<i::Context> env = Utils::OpenHandle(*context); i::HandleScopeImplementer* impl = isolate->handle_scope_implementer(); - if (!isolate->context().is_null() && - isolate->context().native_context() == env->native_context()) { - context_ = Local<Context>(); - } else { + if (isolate->context().is_null() || + isolate->context().native_context() != env->native_context()) { impl->SaveContext(isolate->context()); isolate->set_context(*env); + did_enter_context_ = true; } } if (do_callback) isolate_->FireBeforeCallEnteredCallback(); @@ -165,16 +165,17 @@ class V8_NODISCARD CallDepthScope { ~CallDepthScope() { i::MicrotaskQueue* microtask_queue = isolate_->default_microtask_queue(); if (!context_.IsEmpty()) { - i::HandleScopeImplementer* impl = isolate_->handle_scope_implementer(); - isolate_->set_context(impl->RestoreContext()); + if (did_enter_context_) { + i::HandleScopeImplementer* impl = isolate_->handle_scope_implementer(); + isolate_->set_context(impl->RestoreContext()); + } i::Handle<i::Context> env = Utils::OpenHandle(*context_); microtask_queue = env->native_context().microtask_queue(); } if (!escaped_) isolate_->thread_local_top()->DecrementCallDepth(this); if (do_callback) isolate_->FireCallCompletedCallback(microtask_queue); -// TODO(jochen): This should be #ifdef DEBUG -#ifdef V8_CHECK_MICROTASKS_SCOPES_CONSISTENCY +#ifdef DEBUG if (do_callback) { if (microtask_queue && microtask_queue->microtasks_policy() == v8::MicrotasksPolicy::kScoped) { @@ -213,9 +214,9 @@ class V8_NODISCARD CallDepthScope { i::Isolate* const isolate_; Local<Context> context_; - bool escaped_; - bool do_callback_; - bool safe_for_termination_; + bool did_enter_context_ : 1; + bool escaped_ : 1; + bool safe_for_termination_ : 1; i::InterruptsScope interrupts_scope_; i::Address previous_stack_height_; diff --git a/deps/v8/src/api/api-macros.h b/deps/v8/src/api/api-macros.h index b126e1cd5a..9b339321e7 100644 --- a/deps/v8/src/api/api-macros.h +++ b/deps/v8/src/api/api-macros.h @@ -30,9 +30,9 @@ * TODO(jochen): Remove calls form API methods to DO_NOT_USE macros. */ -#define LOG_API(isolate, class_name, function_name) \ - i::RuntimeCallTimerScope _runtime_timer( \ - isolate, i::RuntimeCallCounterId::kAPI_##class_name##_##function_name); \ +#define LOG_API(isolate, class_name, function_name) \ + RCS_SCOPE(isolate, \ + i::RuntimeCallCounterId::kAPI_##class_name##_##function_name); \ LOG(isolate, ApiEntryCall("v8::" #class_name "::" #function_name)) #define ENTER_V8_DO_NOT_USE(isolate) i::VMState<v8::OTHER> __state__((isolate)) @@ -126,7 +126,3 @@ EXCEPTION_BAILOUT_CHECK_SCOPED_DO_NOT_USE(isolate, Nothing<T>()) #define RETURN_ESCAPED(value) return handle_scope.Escape(value); - -// TODO(jochen): This should be #ifdef DEBUG -#ifdef V8_CHECK_MICROTASKS_SCOPES_CONSISTENCY -#endif diff --git a/deps/v8/src/api/api-natives.cc b/deps/v8/src/api/api-natives.cc index 56bf5bd47c..46d54f6f58 100644 --- a/deps/v8/src/api/api-natives.cc +++ b/deps/v8/src/api/api-natives.cc @@ -74,9 +74,9 @@ MaybeHandle<Object> DefineAccessorProperty(Isolate* isolate, Handle<Object> setter, PropertyAttributes attributes) { DCHECK(!getter->IsFunctionTemplateInfo() || - !FunctionTemplateInfo::cast(*getter).do_not_cache()); + FunctionTemplateInfo::cast(*getter).should_cache()); DCHECK(!setter->IsFunctionTemplateInfo() || - !FunctionTemplateInfo::cast(*setter).do_not_cache()); + FunctionTemplateInfo::cast(*setter).should_cache()); if (getter->IsFunctionTemplateInfo() && FunctionTemplateInfo::cast(*getter).BreakAtEntry()) { ASSIGN_RETURN_ON_EXCEPTION( @@ -184,8 +184,7 @@ Object GetIntrinsic(Isolate* isolate, v8::Intrinsic intrinsic) { template <typename TemplateInfoT> MaybeHandle<JSObject> ConfigureInstance(Isolate* isolate, Handle<JSObject> obj, Handle<TemplateInfoT> data) { - RuntimeCallTimerScope timer(isolate, - RuntimeCallCounterId::kConfigureInstance); + RCS_SCOPE(isolate, RuntimeCallCounterId::kConfigureInstance); HandleScope scope(isolate); // Disable access checks while instantiating the object. AccessCheckDisableScope access_check_scope(isolate, obj); @@ -288,16 +287,20 @@ enum class CachingMode { kLimited, kUnlimited }; MaybeHandle<JSObject> ProbeInstantiationsCache( Isolate* isolate, Handle<NativeContext> native_context, int serial_number, CachingMode caching_mode) { - DCHECK_LE(1, serial_number); - if (serial_number <= TemplateInfo::kFastTemplateInstantiationsCacheSize) { + DCHECK_NE(serial_number, TemplateInfo::kDoNotCache); + if (serial_number == TemplateInfo::kUncached) { + return {}; + } + + if (serial_number < TemplateInfo::kFastTemplateInstantiationsCacheSize) { FixedArray fast_cache = native_context->fast_template_instantiations_cache(); - Handle<Object> object{fast_cache.get(serial_number - 1), isolate}; + Handle<Object> object{fast_cache.get(serial_number), isolate}; if (object->IsTheHole(isolate)) return {}; return Handle<JSObject>::cast(object); } if (caching_mode == CachingMode::kUnlimited || - (serial_number <= TemplateInfo::kSlowTemplateInstantiationsCacheSize)) { + (serial_number < TemplateInfo::kSlowTemplateInstantiationsCacheSize)) { SimpleNumberDictionary slow_cache = native_context->slow_template_instantiations_cache(); InternalIndex entry = slow_cache.FindEntry(isolate, serial_number); @@ -310,19 +313,27 @@ MaybeHandle<JSObject> ProbeInstantiationsCache( void CacheTemplateInstantiation(Isolate* isolate, Handle<NativeContext> native_context, - int serial_number, CachingMode caching_mode, + Handle<TemplateInfo> data, + CachingMode caching_mode, Handle<JSObject> object) { - DCHECK_LE(1, serial_number); - if (serial_number <= TemplateInfo::kFastTemplateInstantiationsCacheSize) { + DCHECK_NE(TemplateInfo::kDoNotCache, data->serial_number()); + + int serial_number = data->serial_number(); + if (serial_number == TemplateInfo::kUncached) { + serial_number = isolate->heap()->GetNextTemplateSerialNumber(); + } + + if (serial_number < TemplateInfo::kFastTemplateInstantiationsCacheSize) { Handle<FixedArray> fast_cache = handle(native_context->fast_template_instantiations_cache(), isolate); Handle<FixedArray> new_cache = - FixedArray::SetAndGrow(isolate, fast_cache, serial_number - 1, object); + FixedArray::SetAndGrow(isolate, fast_cache, serial_number, object); if (*new_cache != *fast_cache) { native_context->set_fast_template_instantiations_cache(*new_cache); } + data->set_serial_number(serial_number); } else if (caching_mode == CachingMode::kUnlimited || - (serial_number <= + (serial_number < TemplateInfo::kSlowTemplateInstantiationsCacheSize)) { Handle<SimpleNumberDictionary> cache = handle(native_context->slow_template_instantiations_cache(), isolate); @@ -331,20 +342,28 @@ void CacheTemplateInstantiation(Isolate* isolate, if (*new_cache != *cache) { native_context->set_slow_template_instantiations_cache(*new_cache); } + data->set_serial_number(serial_number); + } else { + // we've overflowed the cache limit, no more caching + data->set_serial_number(TemplateInfo::kDoNotCache); } } void UncacheTemplateInstantiation(Isolate* isolate, Handle<NativeContext> native_context, - int serial_number, CachingMode caching_mode) { - DCHECK_LE(1, serial_number); - if (serial_number <= TemplateInfo::kFastTemplateInstantiationsCacheSize) { + Handle<TemplateInfo> data, + CachingMode caching_mode) { + int serial_number = data->serial_number(); + if (serial_number < 0) return; + + if (serial_number < TemplateInfo::kFastTemplateInstantiationsCacheSize) { FixedArray fast_cache = native_context->fast_template_instantiations_cache(); - DCHECK(!fast_cache.get(serial_number - 1).IsUndefined(isolate)); - fast_cache.set_undefined(serial_number - 1); + DCHECK(!fast_cache.get(serial_number).IsUndefined(isolate)); + fast_cache.set_undefined(serial_number); + data->set_serial_number(TemplateInfo::kUncached); } else if (caching_mode == CachingMode::kUnlimited || - (serial_number <= + (serial_number < TemplateInfo::kSlowTemplateInstantiationsCacheSize)) { Handle<SimpleNumberDictionary> cache = handle(native_context->slow_template_instantiations_cache(), isolate); @@ -352,6 +371,7 @@ void UncacheTemplateInstantiation(Isolate* isolate, DCHECK(entry.is_found()); cache = SimpleNumberDictionary::DeleteEntry(isolate, cache, entry); native_context->set_slow_template_instantiations_cache(*cache); + data->set_serial_number(TemplateInfo::kUncached); } } @@ -371,23 +391,22 @@ MaybeHandle<JSObject> InstantiateObject(Isolate* isolate, Handle<ObjectTemplateInfo> info, Handle<JSReceiver> new_target, bool is_prototype) { - RuntimeCallTimerScope timer(isolate, - RuntimeCallCounterId::kInstantiateObject); + RCS_SCOPE(isolate, RuntimeCallCounterId::kInstantiateObject); Handle<JSFunction> constructor; - int serial_number = info->serial_number(); + bool should_cache = info->should_cache(); if (!new_target.is_null()) { if (IsSimpleInstantiation(isolate, *info, *new_target)) { constructor = Handle<JSFunction>::cast(new_target); } else { // Disable caching for subclass instantiation. - serial_number = 0; + should_cache = false; } } // Fast path. Handle<JSObject> result; - if (serial_number) { + if (should_cache && info->is_cached()) { if (ProbeInstantiationsCache(isolate, isolate->native_context(), - serial_number, CachingMode::kLimited) + info->serial_number(), CachingMode::kLimited) .ToHandle(&result)) { return isolate->factory()->CopyJSObject(result); } @@ -430,9 +449,9 @@ MaybeHandle<JSObject> InstantiateObject(Isolate* isolate, // TODO(dcarney): is this necessary? JSObject::MigrateSlowToFast(result, 0, "ApiNatives::InstantiateObject"); // Don't cache prototypes. - if (serial_number) { - CacheTemplateInstantiation(isolate, isolate->native_context(), - serial_number, CachingMode::kLimited, result); + if (should_cache) { + CacheTemplateInstantiation(isolate, isolate->native_context(), info, + CachingMode::kLimited, result); result = isolate->factory()->CopyJSObject(result); } } @@ -465,12 +484,11 @@ MaybeHandle<Object> GetInstancePrototype(Isolate* isolate, MaybeHandle<JSFunction> InstantiateFunction( Isolate* isolate, Handle<NativeContext> native_context, Handle<FunctionTemplateInfo> data, MaybeHandle<Name> maybe_name) { - RuntimeCallTimerScope timer(isolate, - RuntimeCallCounterId::kInstantiateFunction); - int serial_number = data->serial_number(); - if (serial_number) { + RCS_SCOPE(isolate, RuntimeCallCounterId::kInstantiateFunction); + bool should_cache = data->should_cache(); + if (should_cache && data->is_cached()) { Handle<JSObject> result; - if (ProbeInstantiationsCache(isolate, native_context, serial_number, + if (ProbeInstantiationsCache(isolate, native_context, data->serial_number(), CachingMode::kUnlimited) .ToHandle(&result)) { return Handle<JSFunction>::cast(result); @@ -504,7 +522,7 @@ MaybeHandle<JSFunction> InstantiateFunction( GetInstancePrototype(isolate, parent), JSFunction); CHECK(parent_prototype->IsHeapObject()); - JSObject::ForceSetPrototype(Handle<JSObject>::cast(prototype), + JSObject::ForceSetPrototype(isolate, Handle<JSObject>::cast(prototype), Handle<HeapObject>::cast(parent_prototype)); } } @@ -517,18 +535,16 @@ MaybeHandle<JSFunction> InstantiateFunction( Handle<JSFunction> function = ApiNatives::CreateApiFunction( isolate, native_context, data, prototype, function_type, maybe_name); - if (serial_number) { + if (should_cache) { // Cache the function. - CacheTemplateInstantiation(isolate, native_context, serial_number, + CacheTemplateInstantiation(isolate, native_context, data, CachingMode::kUnlimited, function); } MaybeHandle<JSObject> result = ConfigureInstance(isolate, function, data); if (result.is_null()) { // Uncache on error. - if (serial_number) { - UncacheTemplateInstantiation(isolate, native_context, serial_number, - CachingMode::kUnlimited); - } + UncacheTemplateInstantiation(isolate, native_context, data, + CachingMode::kUnlimited); return MaybeHandle<JSFunction>(); } data->set_published(true); @@ -596,7 +612,8 @@ MaybeHandle<JSObject> ApiNatives::InstantiateRemoteObject( object_map->set_may_have_interesting_symbols(true); Handle<JSObject> object = isolate->factory()->NewJSObjectFromMap(object_map); - JSObject::ForceSetPrototype(object, isolate->factory()->null_value()); + JSObject::ForceSetPrototype(isolate, object, + isolate->factory()->null_value()); return object; } @@ -653,8 +670,7 @@ Handle<JSFunction> ApiNatives::CreateApiFunction( Isolate* isolate, Handle<NativeContext> native_context, Handle<FunctionTemplateInfo> obj, Handle<Object> prototype, InstanceType type, MaybeHandle<Name> maybe_name) { - RuntimeCallTimerScope timer(isolate, - RuntimeCallCounterId::kCreateApiFunction); + RCS_SCOPE(isolate, RuntimeCallCounterId::kCreateApiFunction); Handle<SharedFunctionInfo> shared = FunctionTemplateInfo::GetOrCreateSharedFunctionInfo(isolate, obj, maybe_name); diff --git a/deps/v8/src/api/api.cc b/deps/v8/src/api/api.cc index b084986042..9d1e53d3bb 100644 --- a/deps/v8/src/api/api.cc +++ b/deps/v8/src/api/api.cc @@ -568,7 +568,7 @@ StartupData SnapshotCreator::CreateBlob( i::GarbageCollectionReason::kSnapshotCreator); { i::HandleScope scope(isolate); - isolate->heap()->CompactWeakArrayLists(internal::AllocationType::kOld); + isolate->heap()->CompactWeakArrayLists(); } i::Snapshot::ClearReconstructableDataForSerialization( @@ -1093,9 +1093,13 @@ void Context::SetAlignedPointerInEmbedderData(int index, void* value) { // --- T e m p l a t e --- -static void InitializeTemplate(i::TemplateInfo that, int type) { +static void InitializeTemplate(i::TemplateInfo that, int type, + bool do_not_cache) { that.set_number_of_properties(0); that.set_tag(type); + int serial_number = + do_not_cache ? i::TemplateInfo::kDoNotCache : i::TemplateInfo::kUncached; + that.set_serial_number(serial_number); } void Template::Set(v8::Local<Name> name, v8::Local<Data> value, @@ -1105,15 +1109,18 @@ void Template::Set(v8::Local<Name> name, v8::Local<Data> value, ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate); i::HandleScope scope(isolate); auto value_obj = Utils::OpenHandle(*value); + Utils::ApiCheck(!value_obj->IsJSReceiver() || value_obj->IsTemplateInfo(), "v8::Template::Set", "Invalid value, must be a primitive or a Template"); + + // The template cache only performs shallow clones, if we set an + // ObjectTemplate as a property value then we can not cache the receiver + // template. if (value_obj->IsObjectTemplateInfo()) { - templ->set_serial_number(0); - if (templ->IsFunctionTemplateInfo()) { - i::Handle<i::FunctionTemplateInfo>::cast(templ)->set_do_not_cache(true); - } + templ->set_serial_number(i::TemplateInfo::kDoNotCache); } + i::ApiNatives::AddDataProperty(isolate, templ, Utils::OpenHandle(*name), value_obj, static_cast<i::PropertyAttributes>(attribute)); @@ -1145,8 +1152,9 @@ void Template::SetAccessorProperty(v8::Local<v8::Name> name, } // --- F u n c t i o n T e m p l a t e --- -static void InitializeFunctionTemplate(i::FunctionTemplateInfo info) { - InitializeTemplate(info, Consts::FUNCTION_TEMPLATE); +static void InitializeFunctionTemplate(i::FunctionTemplateInfo info, + bool do_not_cache) { + InitializeTemplate(info, Consts::FUNCTION_TEMPLATE, do_not_cache); info.set_flag(0); } @@ -1177,7 +1185,7 @@ void FunctionTemplate::SetPrototypeProviderTemplate( Utils::OpenHandle(*prototype_provider); Utils::ApiCheck(self->GetPrototypeTemplate().IsUndefined(i_isolate), "v8::FunctionTemplate::SetPrototypeProviderTemplate", - "Protoype must be undefiend"); + "Protoype must be undefined"); Utils::ApiCheck(self->GetParentTemplate().IsUndefined(i_isolate), "v8::FunctionTemplate::SetPrototypeProviderTemplate", "Prototype provider must be empty"); @@ -1210,7 +1218,7 @@ static Local<FunctionTemplate> FunctionTemplateNew( bool do_not_cache, v8::Local<Private> cached_property_name = v8::Local<Private>(), SideEffectType side_effect_type = SideEffectType::kHasSideEffect, - const CFunction* c_function = nullptr) { + const MemorySpan<const CFunction>& c_function_overloads = {}) { i::Handle<i::Struct> struct_obj = isolate->factory()->NewStruct( i::FUNCTION_TEMPLATE_INFO_TYPE, i::AllocationType::kOld); i::Handle<i::FunctionTemplateInfo> obj = @@ -1219,14 +1227,8 @@ static Local<FunctionTemplate> FunctionTemplateNew( // Disallow GC until all fields of obj have acceptable types. i::DisallowGarbageCollection no_gc; i::FunctionTemplateInfo raw = *obj; - InitializeFunctionTemplate(raw); + InitializeFunctionTemplate(raw, do_not_cache); raw.set_length(length); - raw.set_do_not_cache(do_not_cache); - int next_serial_number = i::FunctionTemplateInfo::kInvalidSerialNumber; - if (!do_not_cache) { - next_serial_number = isolate->heap()->GetNextTemplateSerialNumber(); - } - raw.set_serial_number(next_serial_number); raw.set_undetectable(false); raw.set_needs_access_check(false); raw.set_accept_any_receiver(true); @@ -1241,7 +1243,7 @@ static Local<FunctionTemplate> FunctionTemplateNew( } if (callback != nullptr) { Utils::ToLocal(obj)->SetCallHandler(callback, data, side_effect_type, - c_function); + c_function_overloads); } return Utils::ToLocal(obj); } @@ -1255,10 +1257,24 @@ Local<FunctionTemplate> FunctionTemplate::New( // function templates when the isolate is created for serialization. LOG_API(i_isolate, FunctionTemplate, New); ENTER_V8_NO_SCRIPT_NO_EXCEPTION(i_isolate); - auto templ = FunctionTemplateNew(i_isolate, callback, data, signature, length, - behavior, false, Local<Private>(), - side_effect_type, c_function); - return templ; + return FunctionTemplateNew( + i_isolate, callback, data, signature, length, behavior, false, + Local<Private>(), side_effect_type, + c_function ? MemorySpan<const CFunction>{c_function, 1} + : MemorySpan<const CFunction>{}); +} + +Local<FunctionTemplate> FunctionTemplate::NewWithCFunctionOverloads( + Isolate* isolate, FunctionCallback callback, v8::Local<Value> data, + v8::Local<Signature> signature, int length, ConstructorBehavior behavior, + SideEffectType side_effect_type, + const MemorySpan<const CFunction>& c_function_overloads) { + i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); + LOG_API(i_isolate, FunctionTemplate, New); + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(i_isolate); + return FunctionTemplateNew(i_isolate, callback, data, signature, length, + behavior, false, Local<Private>(), + side_effect_type, c_function_overloads); } Local<FunctionTemplate> FunctionTemplate::NewWithCache( @@ -1289,10 +1305,10 @@ Local<AccessorSignature> AccessorSignature::New( (obj)->setter(*foreign); \ } while (false) -void FunctionTemplate::SetCallHandler(FunctionCallback callback, - v8::Local<Value> data, - SideEffectType side_effect_type, - const CFunction* c_function) { +void FunctionTemplate::SetCallHandler( + FunctionCallback callback, v8::Local<Value> data, + SideEffectType side_effect_type, + const MemorySpan<const CFunction>& c_function_overloads) { auto info = Utils::OpenHandle(this); EnsureNotPublished(info, "v8::FunctionTemplate::SetCallHandler"); i::Isolate* isolate = info->GetIsolate(); @@ -1306,15 +1322,28 @@ void FunctionTemplate::SetCallHandler(FunctionCallback callback, data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); } obj->set_data(*Utils::OpenHandle(*data)); - // Blink passes CFunction's constructed with the default constructor - // for non-fast calls, so we should check the address too. - if (c_function != nullptr && c_function->GetAddress()) { - i::FunctionTemplateInfo::SetCFunction( - isolate, info, - i::handle(*FromCData(isolate, c_function->GetAddress()), isolate)); - i::FunctionTemplateInfo::SetCSignature( - isolate, info, - i::handle(*FromCData(isolate, c_function->GetTypeInfo()), isolate)); + if (c_function_overloads.size() > 0) { + // Stores the data for a sequence of CFunction overloads into a single + // FixedArray, as [address_0, signature_0, ... address_n-1, signature_n-1]. + i::Handle<i::FixedArray> function_overloads = + isolate->factory()->NewFixedArray(static_cast<int>( + c_function_overloads.size() * + i::FunctionTemplateInfo::kFunctionOverloadEntrySize)); + int function_count = static_cast<int>(c_function_overloads.size()); + for (int i = 0; i < function_count; i++) { + const CFunction& c_function = c_function_overloads.data()[i]; + i::Handle<i::Object> address = + FromCData(isolate, c_function.GetAddress()); + function_overloads->set( + i::FunctionTemplateInfo::kFunctionOverloadEntrySize * i, *address); + i::Handle<i::Object> signature = + FromCData(isolate, c_function.GetTypeInfo()); + function_overloads->set( + i::FunctionTemplateInfo::kFunctionOverloadEntrySize * i + 1, + *signature); + } + i::FunctionTemplateInfo::SetCFunctionOverloads(isolate, info, + function_overloads); } info->set_call_code(*obj, kReleaseStore); } @@ -1442,13 +1471,8 @@ static Local<ObjectTemplate> ObjectTemplateNew( // Disallow GC until all fields of obj have acceptable types. i::DisallowGarbageCollection no_gc; i::ObjectTemplateInfo raw = *obj; - InitializeTemplate(raw, Consts::OBJECT_TEMPLATE); + InitializeTemplate(raw, Consts::OBJECT_TEMPLATE, do_not_cache); raw.set_data(0); - int next_serial_number = 0; - if (!do_not_cache) { - next_serial_number = isolate->heap()->GetNextTemplateSerialNumber(); - } - raw.set_serial_number(next_serial_number); if (!constructor.IsEmpty()) { raw.set_constructor(*Utils::OpenHandle(*constructor)); } @@ -1920,26 +1944,44 @@ MaybeLocal<Value> Script::Run(Local<Context> context) { ENTER_V8(isolate, context, Script, Run, MaybeLocal<Value>(), InternalEscapableScope); i::HistogramTimerScope execute_timer(isolate->counters()->execute(), true); - i::AggregatingHistogramTimerScope timer(isolate->counters()->compile_lazy()); + i::AggregatingHistogramTimerScope histogram_timer( + isolate->counters()->compile_lazy()); i::TimerEventScope<i::TimerEventExecute> timer_scope(isolate); auto fun = i::Handle<i::JSFunction>::cast(Utils::OpenHandle(this)); // TODO(crbug.com/1193459): remove once ablation study is completed - if (i::FLAG_script_run_delay) { - v8::base::OS::Sleep( - v8::base::TimeDelta::FromMilliseconds(i::FLAG_script_run_delay)); + base::ElapsedTimer timer; + base::TimeDelta delta; + if (i::FLAG_script_delay > 0) { + delta = v8::base::TimeDelta::FromMillisecondsD(i::FLAG_script_delay); } - if (i::FLAG_script_run_delay_once && !isolate->did_run_script_delay()) { - v8::base::OS::Sleep( - v8::base::TimeDelta::FromMilliseconds(i::FLAG_script_run_delay_once)); + if (i::FLAG_script_delay_once > 0 && !isolate->did_run_script_delay()) { + delta = v8::base::TimeDelta::FromMillisecondsD(i::FLAG_script_delay_once); isolate->set_did_run_script_delay(true); } + if (i::FLAG_script_delay_fraction > 0.0) { + timer.Start(); + } else if (delta.InMicroseconds() > 0) { + timer.Start(); + while (timer.Elapsed() < delta) { + // Busy wait. + } + } i::Handle<i::Object> receiver = isolate->global_proxy(); Local<Value> result; has_pending_exception = !ToLocal<Value>( i::Execution::Call(isolate, fun, receiver, 0, nullptr), &result); + if (i::FLAG_script_delay_fraction > 0.0) { + delta = v8::base::TimeDelta::FromMillisecondsD( + timer.Elapsed().InMillisecondsF() * i::FLAG_script_delay_fraction); + timer.Restart(); + while (timer.Elapsed() < delta) { + // Busy wait. + } + } + RETURN_ON_FAILED_EXECUTION(Value); RETURN_ESCAPED(result); } @@ -4053,34 +4095,56 @@ Maybe<bool> v8::Object::CreateDataProperty(v8::Local<v8::Context> context, v8::Local<Name> key, v8::Local<Value> value) { auto isolate = reinterpret_cast<i::Isolate*>(context->GetIsolate()); - ENTER_V8(isolate, context, Object, CreateDataProperty, Nothing<bool>(), - i::HandleScope); i::Handle<i::JSReceiver> self = Utils::OpenHandle(this); i::Handle<i::Name> key_obj = Utils::OpenHandle(*key); i::Handle<i::Object> value_obj = Utils::OpenHandle(*value); - Maybe<bool> result = i::JSReceiver::CreateDataProperty( - isolate, self, key_obj, value_obj, Just(i::kDontThrow)); - has_pending_exception = result.IsNothing(); - RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool); - return result; + i::LookupIterator::Key lookup_key(isolate, key_obj); + i::LookupIterator it(isolate, self, lookup_key, i::LookupIterator::OWN); + if (self->IsJSProxy()) { + ENTER_V8(isolate, context, Object, CreateDataProperty, Nothing<bool>(), + i::HandleScope); + Maybe<bool> result = + i::JSReceiver::CreateDataProperty(&it, value_obj, Just(i::kDontThrow)); + has_pending_exception = result.IsNothing(); + RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool); + return result; + } else { + ENTER_V8_NO_SCRIPT(isolate, context, Object, CreateDataProperty, + Nothing<bool>(), i::HandleScope); + Maybe<bool> result = + i::JSObject::CreateDataProperty(&it, value_obj, Just(i::kDontThrow)); + has_pending_exception = result.IsNothing(); + RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool); + return result; + } } Maybe<bool> v8::Object::CreateDataProperty(v8::Local<v8::Context> context, uint32_t index, v8::Local<Value> value) { auto isolate = reinterpret_cast<i::Isolate*>(context->GetIsolate()); - ENTER_V8(isolate, context, Object, CreateDataProperty, Nothing<bool>(), - i::HandleScope); i::Handle<i::JSReceiver> self = Utils::OpenHandle(this); i::Handle<i::Object> value_obj = Utils::OpenHandle(*value); i::LookupIterator it(isolate, self, index, self, i::LookupIterator::OWN); - Maybe<bool> result = - i::JSReceiver::CreateDataProperty(&it, value_obj, Just(i::kDontThrow)); - has_pending_exception = result.IsNothing(); - RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool); - return result; + if (self->IsJSProxy()) { + ENTER_V8(isolate, context, Object, CreateDataProperty, Nothing<bool>(), + i::HandleScope); + Maybe<bool> result = + i::JSReceiver::CreateDataProperty(&it, value_obj, Just(i::kDontThrow)); + has_pending_exception = result.IsNothing(); + RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool); + return result; + } else { + ENTER_V8_NO_SCRIPT(isolate, context, Object, CreateDataProperty, + Nothing<bool>(), i::HandleScope); + Maybe<bool> result = + i::JSObject::CreateDataProperty(&it, value_obj, Just(i::kDontThrow)); + has_pending_exception = result.IsNothing(); + RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool); + return result; + } } struct v8::PropertyDescriptor::PrivateData { @@ -4330,17 +4394,27 @@ Local<Value> v8::Object::GetPrototype() { Maybe<bool> v8::Object::SetPrototype(Local<Context> context, Local<Value> value) { auto isolate = reinterpret_cast<i::Isolate*>(context->GetIsolate()); - ENTER_V8(isolate, context, Object, SetPrototype, Nothing<bool>(), - i::HandleScope); auto self = Utils::OpenHandle(this); auto value_obj = Utils::OpenHandle(*value); - // We do not allow exceptions thrown while setting the prototype - // to propagate outside. - TryCatch try_catch(reinterpret_cast<v8::Isolate*>(isolate)); - auto result = - i::JSReceiver::SetPrototype(self, value_obj, false, i::kThrowOnError); - has_pending_exception = result.IsNothing(); - RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool); + if (self->IsJSProxy()) { + ENTER_V8(isolate, context, Object, SetPrototype, Nothing<bool>(), + i::HandleScope); + // We do not allow exceptions thrown while setting the prototype + // to propagate outside. + TryCatch try_catch(reinterpret_cast<v8::Isolate*>(isolate)); + auto result = i::JSProxy::SetPrototype(i::Handle<i::JSProxy>::cast(self), + value_obj, false, i::kThrowOnError); + has_pending_exception = result.IsNothing(); + RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool); + } else { + ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate); + auto result = i::JSObject::SetPrototype(i::Handle<i::JSObject>::cast(self), + value_obj, false, i::kThrowOnError); + if (result.IsNothing()) { + isolate->clear_pending_exception(); + return Nothing<bool>(); + } + } return Just(true); } @@ -5015,25 +5089,6 @@ Local<Value> Function::GetDebugName() const { return Utils::ToLocal(i::Handle<i::Object>(*name, self->GetIsolate())); } -Local<Value> Function::GetDisplayName() const { - auto self = Utils::OpenHandle(this); - i::Isolate* isolate = self->GetIsolate(); - ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate); - if (!self->IsJSFunction()) { - return ToApiHandle<Primitive>(isolate->factory()->undefined_value()); - } - auto func = i::Handle<i::JSFunction>::cast(self); - i::Handle<i::String> property_name = - isolate->factory()->InternalizeString(i::StaticCharVector("displayName")); - i::Handle<i::Object> value = - i::JSReceiver::GetDataProperty(func, property_name); - if (value->IsString()) { - i::Handle<i::String> name = i::Handle<i::String>::cast(value); - if (name->length() > 0) return Utils::ToLocal(name); - } - return ToApiHandle<Primitive>(isolate->factory()->undefined_value()); -} - ScriptOrigin Function::GetScriptOrigin() const { auto self = Utils::OpenHandle(this); auto isolate = reinterpret_cast<v8::Isolate*>(self->GetIsolate()); @@ -5590,19 +5645,33 @@ Local<Value> Symbol::Description() const { // RO_SPACE. Since RO_SPACE objects are immovable we can use the // Handle(Address*) constructor with the address of the description // field in the Symbol object without needing an isolate. - DCHECK(!COMPRESS_POINTERS_BOOL); + DCHECK(!COMPRESS_POINTERS_IN_ISOLATE_CAGE_BOOL); +#ifndef V8_COMPRESS_POINTERS_IN_SHARED_CAGE i::Handle<i::HeapObject> ro_description(reinterpret_cast<i::Address*>( sym->GetFieldAddress(i::Symbol::kDescriptionOffset))); return Utils::ToLocal(ro_description); +#else + isolate = reinterpret_cast<i::Isolate*>(Isolate::GetCurrent()); +#endif } - i::Handle<i::Object> description(sym->description(), isolate); + return Description(reinterpret_cast<Isolate*>(isolate)); +} +Local<Value> Symbol::Description(Isolate* isolate) const { + i::Handle<i::Symbol> sym = Utils::OpenHandle(this); + i::Handle<i::Object> description(sym->description(), + reinterpret_cast<i::Isolate*>(isolate)); return Utils::ToLocal(description); } Local<Value> Private::Name() const { - return reinterpret_cast<const Symbol*>(this)->Description(); + const Symbol* sym = reinterpret_cast<const Symbol*>(this); + i::Handle<i::Symbol> i_sym = Utils::OpenHandle(sym); + // v8::Private symbols are created by API and are therefore writable, so we + // can always recover an Isolate. + i::Isolate* isolate = i::GetIsolateFromWritableObject(*i_sym); + return sym->Description(reinterpret_cast<Isolate*>(isolate)); } double Number::Value() const { @@ -5886,12 +5955,7 @@ void V8::GetSharedMemoryStatistics(SharedMemoryStatistics* statistics) { i::ReadOnlyHeap::PopulateReadOnlySpaceStatistics(statistics); } -void V8::SetIsCrossOriginIsolated() { - i::FLAG_harmony_sharedarraybuffer = true; -#if V8_ENABLE_WEBASSEMBLY - i::FLAG_experimental_wasm_threads = true; -#endif // V8_ENABLE_WEBASSEMBLY -} +void V8::SetIsCrossOriginIsolated() {} template <typename ObjectType> struct InvokeBootstrapper; @@ -6273,6 +6337,11 @@ metrics::Recorder::ContextId metrics::Recorder::GetContextId( handle(i_context->native_context(), isolate)); } +metrics::LongTaskStats metrics::LongTaskStats::Get(v8::Isolate* isolate) { + i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); + return *i_isolate->GetCurrentLongTaskStats(); +} + namespace { i::Address* GetSerializedDataFromFixedArray(i::Isolate* isolate, i::FixedArray list, size_t index) { @@ -6391,6 +6460,16 @@ bool FunctionTemplate::HasInstance(v8::Local<v8::Value> value) { return false; } +bool FunctionTemplate::IsLeafTemplateForApiObject( + v8::Local<v8::Value> value) const { + i::DisallowGarbageCollection no_gc; + + i::Object object = *Utils::OpenHandle(*value); + + auto self = Utils::OpenHandle(this); + return self->IsLeafTemplateForApiObject(object); +} + Local<External> v8::External::New(Isolate* isolate, void* value) { STATIC_ASSERT(sizeof(value) == sizeof(i::Address)); i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); @@ -8004,6 +8083,10 @@ v8::Local<v8::Context> Isolate::GetIncumbentContext() { return Utils::ToLocal(context); } +v8::Local<Value> Isolate::ThrowError(v8::Local<v8::String> message) { + return ThrowException(v8::Exception::Error(message)); +} + v8::Local<Value> Isolate::ThrowException(v8::Local<v8::Value> value) { i::Isolate* isolate = reinterpret_cast<i::Isolate*>(this); ENTER_V8_DO_NOT_USE(isolate); @@ -8076,6 +8159,11 @@ EmbedderHeapTracer* Isolate::GetEmbedderHeapTracer() { return isolate->heap()->GetEmbedderHeapTracer(); } +void Isolate::SetEmbedderRootsHandler(EmbedderRootsHandler* handler) { + i::Isolate* isolate = reinterpret_cast<i::Isolate*>(this); + isolate->heap()->SetEmbedderRootsHandler(handler); +} + void Isolate::AttachCppHeap(CppHeap* cpp_heap) { i::Isolate* isolate = reinterpret_cast<i::Isolate*>(this); isolate->heap()->AttachCppHeap(cpp_heap); @@ -8494,10 +8582,11 @@ bool Isolate::GetHeapSpaceStatistics(HeapSpaceStatistics* space_statistics, } } else { i::Space* space = heap->space(static_cast<int>(index)); - space_statistics->space_size_ = space->CommittedMemory(); - space_statistics->space_used_size_ = space->SizeOfObjects(); - space_statistics->space_available_size_ = space->Available(); - space_statistics->physical_space_size_ = space->CommittedPhysicalMemory(); + space_statistics->space_size_ = space ? space->CommittedMemory() : 0; + space_statistics->space_used_size_ = space ? space->SizeOfObjects() : 0; + space_statistics->space_available_size_ = space ? space->Available() : 0; + space_statistics->physical_space_size_ = + space ? space->CommittedPhysicalMemory() : 0; } return true; } @@ -8845,10 +8934,9 @@ void Isolate::SetStackLimit(uintptr_t stack_limit) { void Isolate::GetCodeRange(void** start, size_t* length_in_bytes) { i::Isolate* isolate = reinterpret_cast<i::Isolate*>(this); - const base::AddressRegion& code_range = - isolate->heap()->memory_allocator()->code_range(); - *start = reinterpret_cast<void*>(code_range.begin()); - *length_in_bytes = code_range.size(); + const base::AddressRegion& code_region = isolate->heap()->code_region(); + *start = reinterpret_cast<void*>(code_region.begin()); + *length_in_bytes = code_region.size(); } void Isolate::GetEmbeddedCodeRange(const void** start, @@ -8930,12 +9018,19 @@ CALLBACK_SETTER(WasmSimdEnabledCallback, WasmSimdEnabledCallback, CALLBACK_SETTER(WasmExceptionsEnabledCallback, WasmExceptionsEnabledCallback, wasm_exceptions_enabled_callback) +CALLBACK_SETTER(SharedArrayBufferConstructorEnabledCallback, + SharedArrayBufferConstructorEnabledCallback, + sharedarraybuffer_constructor_enabled_callback) + void Isolate::InstallConditionalFeatures(Local<Context> context) { -#if V8_ENABLE_WEBASSEMBLY v8::HandleScope handle_scope(this); v8::Context::Scope context_scope(context); - i::WasmJs::InstallConditionalFeatures(reinterpret_cast<i::Isolate*>(this), - Utils::OpenHandle(*context)); + i::Isolate* isolate = reinterpret_cast<i::Isolate*>(this); + isolate->InstallConditionalFeatures(Utils::OpenHandle(*context)); +#if V8_ENABLE_WEBASSEMBLY + if (i::FLAG_expose_wasm) { + i::WasmJs::InstallConditionalFeatures(isolate, Utils::OpenHandle(*context)); + } #endif // V8_ENABLE_WEBASSEMBLY } @@ -9418,7 +9513,21 @@ CpuProfilingOptions::CpuProfilingOptions(CpuProfilingMode mode, MaybeLocal<Context> filter_context) : mode_(mode), max_samples_(max_samples), - sampling_interval_us_(sampling_interval_us) {} + sampling_interval_us_(sampling_interval_us) { + if (!filter_context.IsEmpty()) { + Local<Context> local_filter_context = filter_context.ToLocalChecked(); + filter_context_.Reset(local_filter_context->GetIsolate(), + local_filter_context); + filter_context_.SetWeak(); + } +} + +void* CpuProfilingOptions::raw_filter_context() const { + return reinterpret_cast<void*>( + i::Context::cast(*Utils::OpenPersistent(filter_context_)) + .native_context() + .address()); +} void CpuProfiler::Dispose() { delete reinterpret_cast<i::CpuProfiler*>(this); } @@ -9699,10 +9808,11 @@ void HeapProfiler::ClearObjectIds() { const HeapSnapshot* HeapProfiler::TakeHeapSnapshot( ActivityControl* control, ObjectNameResolver* resolver, - bool treat_global_objects_as_roots) { + bool treat_global_objects_as_roots, bool capture_numeric_value) { return reinterpret_cast<const HeapSnapshot*>( reinterpret_cast<i::HeapProfiler*>(this)->TakeSnapshot( - control, resolver, treat_global_objects_as_roots)); + control, resolver, treat_global_objects_as_roots, + capture_numeric_value)); } void HeapProfiler::StartTrackingHeapObjects(bool track_allocations) { @@ -9766,7 +9876,8 @@ void EmbedderHeapTracer::SetStackStart(void* stack_start) { void EmbedderHeapTracer::NotifyEmptyEmbedderStack() { CHECK(isolate_); reinterpret_cast<i::Isolate*>(isolate_) - ->global_handles() + ->heap() + ->local_embedder_heap_tracer() ->NotifyEmptyEmbedderStack(); } @@ -10065,8 +10176,7 @@ void InvokeAccessorGetterCallback( v8::AccessorNameGetterCallback getter) { // Leaving JavaScript. Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); - RuntimeCallTimerScope timer(isolate, - RuntimeCallCounterId::kAccessorGetterCallback); + RCS_SCOPE(isolate, RuntimeCallCounterId::kAccessorGetterCallback); Address getter_address = reinterpret_cast<Address>(getter); VMState<EXTERNAL> state(isolate); ExternalCallbackScope call_scope(isolate, getter_address); @@ -10076,7 +10186,7 @@ void InvokeAccessorGetterCallback( void InvokeFunctionCallback(const v8::FunctionCallbackInfo<v8::Value>& info, v8::FunctionCallback callback) { Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); - RuntimeCallTimerScope timer(isolate, RuntimeCallCounterId::kFunctionCallback); + RCS_SCOPE(isolate, RuntimeCallCounterId::kFunctionCallback); Address callback_address = reinterpret_cast<Address>(callback); VMState<EXTERNAL> state(isolate); ExternalCallbackScope call_scope(isolate, callback_address); @@ -10088,8 +10198,8 @@ void InvokeFinalizationRegistryCleanupFromTask( Handle<JSFinalizationRegistry> finalization_registry, Handle<Object> callback) { Isolate* isolate = finalization_registry->native_context().GetIsolate(); - RuntimeCallTimerScope timer( - isolate, RuntimeCallCounterId::kFinalizationRegistryCleanupFromTask); + RCS_SCOPE(isolate, + RuntimeCallCounterId::kFinalizationRegistryCleanupFromTask); // Do not use ENTER_V8 because this is always called from a running // FinalizationRegistryCleanupTask within V8 and we should not log it as an // API call. This method is implemented here to avoid duplication of the diff --git a/deps/v8/src/ast/ast-value-factory.cc b/deps/v8/src/ast/ast-value-factory.cc index 6e454b22f1..a300359a0a 100644 --- a/deps/v8/src/ast/ast-value-factory.cc +++ b/deps/v8/src/ast/ast-value-factory.cc @@ -61,8 +61,8 @@ class OneByteStringStream { } // namespace -template <typename LocalIsolate> -void AstRawString::Internalize(LocalIsolate* isolate) { +template <typename IsolateT> +void AstRawString::Internalize(IsolateT* isolate) { DCHECK(!has_string_); if (literal_bytes_.length() == 0) { set_string(isolate->factory()->empty_string()); @@ -185,8 +185,8 @@ int AstRawString::Compare(const AstRawString* lhs, const AstRawString* rhs) { return lhs->byte_length() - rhs->byte_length(); } -template <typename LocalIsolate> -Handle<String> AstConsString::Allocate(LocalIsolate* isolate) const { +template <typename IsolateT> +Handle<String> AstConsString::Allocate(IsolateT* isolate) const { DCHECK(string_.is_null()); if (IsEmpty()) { @@ -210,8 +210,8 @@ template EXPORT_TEMPLATE_DEFINE(V8_EXPORT_PRIVATE) Handle<String> AstConsString::Allocate<LocalIsolate>( LocalIsolate* isolate) const; -template <typename LocalIsolate> -Handle<String> AstConsString::AllocateFlat(LocalIsolate* isolate) const { +template <typename IsolateT> +Handle<String> AstConsString::AllocateFlat(IsolateT* isolate) const { if (IsEmpty()) { return isolate->factory()->empty_string(); } @@ -370,8 +370,8 @@ AstConsString* AstValueFactory::NewConsString(const AstRawString* str1, return NewConsString()->AddString(zone(), str1)->AddString(zone(), str2); } -template <typename LocalIsolate> -void AstValueFactory::Internalize(LocalIsolate* isolate) { +template <typename IsolateT> +void AstValueFactory::Internalize(IsolateT* isolate) { if (!zone_) return; // Strings need to be internalized before values, because values refer to diff --git a/deps/v8/src/ast/ast-value-factory.h b/deps/v8/src/ast/ast-value-factory.h index b66e11f99f..290da7838f 100644 --- a/deps/v8/src/ast/ast-value-factory.h +++ b/deps/v8/src/ast/ast-value-factory.h @@ -65,8 +65,8 @@ class AstRawString final : public ZoneObject { V8_EXPORT_PRIVATE bool IsOneByteEqualTo(const char* data) const; uint16_t FirstCharacter() const; - template <typename LocalIsolate> - void Internalize(LocalIsolate* isolate); + template <typename IsolateT> + void Internalize(IsolateT* isolate); // Access the physical representation: bool is_one_byte() const { return is_one_byte_; } @@ -161,17 +161,17 @@ class AstConsString final : public ZoneObject { return segment_.string == nullptr; } - template <typename LocalIsolate> - Handle<String> GetString(LocalIsolate* isolate) { + template <typename IsolateT> + Handle<String> GetString(IsolateT* isolate) { if (string_.is_null()) { string_ = Allocate(isolate); } return string_; } - template <typename LocalIsolate> + template <typename IsolateT> EXPORT_TEMPLATE_DECLARE(V8_EXPORT_PRIVATE) - Handle<String> AllocateFlat(LocalIsolate* isolate) const; + Handle<String> AllocateFlat(IsolateT* isolate) const; std::forward_list<const AstRawString*> ToRawStrings() const; @@ -181,9 +181,9 @@ class AstConsString final : public ZoneObject { AstConsString() : string_(), segment_({nullptr, nullptr}) {} - template <typename LocalIsolate> + template <typename IsolateT> EXPORT_TEMPLATE_DECLARE(V8_EXPORT_PRIVATE) - Handle<String> Allocate(LocalIsolate* isolate) const; + Handle<String> Allocate(IsolateT* isolate) const; Handle<String> string_; @@ -354,8 +354,8 @@ class AstValueFactory { // Internalize all the strings in the factory, and prevent any more from being // allocated. Multiple calls to Internalize are allowed, for simplicity, where // subsequent calls are a no-op. - template <typename LocalIsolate> - void Internalize(LocalIsolate* isolate); + template <typename IsolateT> + void Internalize(IsolateT* isolate); #define F(name, str) \ const AstRawString* name##_string() const { \ diff --git a/deps/v8/src/ast/ast.cc b/deps/v8/src/ast/ast.cc index 5515a4a3fc..3054f99f1c 100644 --- a/deps/v8/src/ast/ast.cc +++ b/deps/v8/src/ast/ast.cc @@ -443,8 +443,8 @@ int ObjectLiteral::InitDepthAndFlags() { return depth_acc; } -template <typename LocalIsolate> -void ObjectLiteral::BuildBoilerplateDescription(LocalIsolate* isolate) { +template <typename IsolateT> +void ObjectLiteral::BuildBoilerplateDescription(IsolateT* isolate) { if (!boilerplate_description_.is_null()) return; int index_keys = 0; @@ -597,8 +597,8 @@ int ArrayLiteral::InitDepthAndFlags() { return depth_acc; } -template <typename LocalIsolate> -void ArrayLiteral::BuildBoilerplateDescription(LocalIsolate* isolate) { +template <typename IsolateT> +void ArrayLiteral::BuildBoilerplateDescription(IsolateT* isolate) { if (!boilerplate_description_.is_null()) return; int constants_length = @@ -642,7 +642,7 @@ void ArrayLiteral::BuildBoilerplateDescription(LocalIsolate* isolate) { } // New handle scope here, needs to be after BuildContants(). - typename LocalIsolate::HandleScopeType scope(isolate); + typename IsolateT::HandleScopeType scope(isolate); Object boilerplate_value = *GetBoilerplateValue(element, isolate); // We shouldn't allocate after creating the boilerplate value. @@ -697,9 +697,9 @@ bool MaterializedLiteral::IsSimple() const { return false; } -template <typename LocalIsolate> +template <typename IsolateT> Handle<Object> MaterializedLiteral::GetBoilerplateValue(Expression* expression, - LocalIsolate* isolate) { + IsolateT* isolate) { if (expression->IsLiteral()) { return expression->AsLiteral()->BuildValue(isolate); } @@ -742,8 +742,8 @@ bool MaterializedLiteral::NeedsInitialAllocationSite() { return false; } -template <typename LocalIsolate> -void MaterializedLiteral::BuildConstants(LocalIsolate* isolate) { +template <typename IsolateT> +void MaterializedLiteral::BuildConstants(IsolateT* isolate) { if (IsArrayLiteral()) { AsArrayLiteral()->BuildBoilerplateDescription(isolate); return; @@ -760,9 +760,9 @@ template EXPORT_TEMPLATE_DEFINE( V8_BASE_EXPORT) void MaterializedLiteral::BuildConstants(LocalIsolate* isolate); -template <typename LocalIsolate> +template <typename IsolateT> Handle<TemplateObjectDescription> GetTemplateObject::GetOrBuildDescription( - LocalIsolate* isolate) { + IsolateT* isolate) { Handle<FixedArray> raw_strings = isolate->factory()->NewFixedArray( this->raw_strings()->length(), AllocationType::kOld); bool raw_and_cooked_match = true; @@ -978,8 +978,8 @@ bool Literal::AsArrayIndex(uint32_t* value) const { return ToUint32(value) && *value != kMaxUInt32; } -template <typename LocalIsolate> -Handle<Object> Literal::BuildValue(LocalIsolate* isolate) const { +template <typename IsolateT> +Handle<Object> Literal::BuildValue(IsolateT* isolate) const { switch (type()) { case kSmi: return handle(Smi::FromInt(smi_), isolate); diff --git a/deps/v8/src/ast/ast.h b/deps/v8/src/ast/ast.h index e11e6c458f..e9c8592001 100644 --- a/deps/v8/src/ast/ast.h +++ b/deps/v8/src/ast/ast.h @@ -986,8 +986,8 @@ class Literal final : public Expression { // Returns an appropriate Object representing this Literal, allocating // a heap object if needed. - template <typename LocalIsolate> - Handle<Object> BuildValue(LocalIsolate* isolate) const; + template <typename IsolateT> + Handle<Object> BuildValue(IsolateT* isolate) const; // Support for using Literal as a HashMap key. NOTE: Currently, this works // only for string and number literals! @@ -1058,17 +1058,16 @@ class MaterializedLiteral : public Expression { bool NeedsInitialAllocationSite(); // Populate the constant properties/elements fixed array. - template <typename LocalIsolate> - void BuildConstants(LocalIsolate* isolate); + template <typename IsolateT> + void BuildConstants(IsolateT* isolate); // If the expression is a literal, return the literal value; // if the expression is a materialized literal and is_simple // then return an Array or Object Boilerplate Description // Otherwise, return undefined literal as the placeholder // in the object literal boilerplate. - template <typename LocalIsolate> - Handle<Object> GetBoilerplateValue(Expression* expression, - LocalIsolate* isolate); + template <typename IsolateT> + Handle<Object> GetBoilerplateValue(Expression* expression, IsolateT* isolate); }; // Node for capturing a regexp literal. @@ -1265,9 +1264,9 @@ class ObjectLiteral final : public AggregateLiteral { int InitDepthAndFlags(); // Get the boilerplate description, populating it if necessary. - template <typename LocalIsolate> + template <typename IsolateT> Handle<ObjectBoilerplateDescription> GetOrBuildBoilerplateDescription( - LocalIsolate* isolate) { + IsolateT* isolate) { if (boilerplate_description_.is_null()) { BuildBoilerplateDescription(isolate); } @@ -1275,8 +1274,8 @@ class ObjectLiteral final : public AggregateLiteral { } // Populate the boilerplate description. - template <typename LocalIsolate> - void BuildBoilerplateDescription(LocalIsolate* isolate); + template <typename IsolateT> + void BuildBoilerplateDescription(IsolateT* isolate); // Mark all computed expressions that are bound to a key that // is shadowed by a later occurrence of the same key. For the @@ -1366,9 +1365,9 @@ class ArrayLiteral final : public AggregateLiteral { int InitDepthAndFlags(); // Get the boilerplate description, populating it if necessary. - template <typename LocalIsolate> + template <typename IsolateT> Handle<ArrayBoilerplateDescription> GetOrBuildBoilerplateDescription( - LocalIsolate* isolate) { + IsolateT* isolate) { if (boilerplate_description_.is_null()) { BuildBoilerplateDescription(isolate); } @@ -1376,8 +1375,8 @@ class ArrayLiteral final : public AggregateLiteral { } // Populate the boilerplate description. - template <typename LocalIsolate> - void BuildBoilerplateDescription(LocalIsolate* isolate); + template <typename IsolateT> + void BuildBoilerplateDescription(IsolateT* isolate); // Determines whether the {CreateShallowArrayLiteral} builtin can be used. bool IsFastCloningSupported() const; @@ -2121,8 +2120,8 @@ class FunctionLiteral final : public Expression { // Empty handle means that the function does not have a shared name (i.e. // the name will be set dynamically after creation of the function closure). - template <typename LocalIsolate> - MaybeHandle<String> GetName(LocalIsolate* isolate) const { + template <typename IsolateT> + MaybeHandle<String> GetName(IsolateT* isolate) const { return raw_name_ ? raw_name_->AllocateFlat(isolate) : MaybeHandle<String>(); } bool has_shared_name() const { return raw_name_ != nullptr; } @@ -2644,9 +2643,8 @@ class GetTemplateObject final : public Expression { return raw_strings_; } - template <typename LocalIsolate> - Handle<TemplateObjectDescription> GetOrBuildDescription( - LocalIsolate* isolate); + template <typename IsolateT> + Handle<TemplateObjectDescription> GetOrBuildDescription(IsolateT* isolate); private: friend class AstNodeFactory; diff --git a/deps/v8/src/ast/modules.cc b/deps/v8/src/ast/modules.cc index 62dc619141..6d1bff226d 100644 --- a/deps/v8/src/ast/modules.cc +++ b/deps/v8/src/ast/modules.cc @@ -116,17 +116,17 @@ void SourceTextModuleDescriptor::AddStarExport( } namespace { -template <typename LocalIsolate> -Handle<PrimitiveHeapObject> ToStringOrUndefined(LocalIsolate* isolate, +template <typename IsolateT> +Handle<PrimitiveHeapObject> ToStringOrUndefined(IsolateT* isolate, const AstRawString* s) { if (s == nullptr) return isolate->factory()->undefined_value(); return s->string(); } } // namespace -template <typename LocalIsolate> +template <typename IsolateT> Handle<ModuleRequest> SourceTextModuleDescriptor::AstModuleRequest::Serialize( - LocalIsolate* isolate) const { + IsolateT* isolate) const { // The import assertions will be stored in this array in the form: // [key1, value1, location1, key2, value2, location2, ...] Handle<FixedArray> import_assertions_array = @@ -151,9 +151,9 @@ template Handle<ModuleRequest> SourceTextModuleDescriptor::AstModuleRequest::Serialize( LocalIsolate* isolate) const; -template <typename LocalIsolate> +template <typename IsolateT> Handle<SourceTextModuleInfoEntry> SourceTextModuleDescriptor::Entry::Serialize( - LocalIsolate* isolate) const { + IsolateT* isolate) const { CHECK(Smi::IsValid(module_request)); // TODO(neis): Check earlier? return SourceTextModuleInfoEntry::New( isolate, ToStringOrUndefined(isolate, export_name), @@ -166,9 +166,9 @@ SourceTextModuleDescriptor::Entry::Serialize(Isolate* isolate) const; template Handle<SourceTextModuleInfoEntry> SourceTextModuleDescriptor::Entry::Serialize(LocalIsolate* isolate) const; -template <typename LocalIsolate> +template <typename IsolateT> Handle<FixedArray> SourceTextModuleDescriptor::SerializeRegularExports( - LocalIsolate* isolate, Zone* zone) const { + IsolateT* isolate, Zone* zone) const { // We serialize regular exports in a way that lets us later iterate over their // local names and for each local name immediately access all its export // names. (Regular exports have neither import name nor module request.) diff --git a/deps/v8/src/ast/modules.h b/deps/v8/src/ast/modules.h index f776d2b522..f496a0bb85 100644 --- a/deps/v8/src/ast/modules.h +++ b/deps/v8/src/ast/modules.h @@ -115,8 +115,8 @@ class SourceTextModuleDescriptor : public ZoneObject { module_request(-1), cell_index(0) {} - template <typename LocalIsolate> - Handle<SourceTextModuleInfoEntry> Serialize(LocalIsolate* isolate) const; + template <typename IsolateT> + Handle<SourceTextModuleInfoEntry> Serialize(IsolateT* isolate) const; }; enum CellIndexKind { kInvalid, kExport, kImport }; @@ -132,8 +132,8 @@ class SourceTextModuleDescriptor : public ZoneObject { position_(position), index_(index) {} - template <typename LocalIsolate> - Handle<v8::internal::ModuleRequest> Serialize(LocalIsolate* isolate) const; + template <typename IsolateT> + Handle<v8::internal::ModuleRequest> Serialize(IsolateT* isolate) const; const AstRawString* specifier() const { return specifier_; } const ImportAssertions* import_assertions() const { @@ -225,8 +225,8 @@ class SourceTextModuleDescriptor : public ZoneObject { namespace_imports_.push_back(entry); } - template <typename LocalIsolate> - Handle<FixedArray> SerializeRegularExports(LocalIsolate* isolate, + template <typename IsolateT> + Handle<FixedArray> SerializeRegularExports(IsolateT* isolate, Zone* zone) const; private: diff --git a/deps/v8/src/ast/scopes.cc b/deps/v8/src/ast/scopes.cc index de9b25a5c5..e5b621a283 100644 --- a/deps/v8/src/ast/scopes.cc +++ b/deps/v8/src/ast/scopes.cc @@ -623,9 +623,9 @@ void DeclarationScope::HoistSloppyBlockFunctions(AstNodeFactory* factory) { } bool DeclarationScope::Analyze(ParseInfo* info) { - RuntimeCallTimerScope runtimeTimer( - info->runtime_call_stats(), RuntimeCallCounterId::kCompileScopeAnalysis, - RuntimeCallStats::kThreadSpecific); + RCS_SCOPE(info->runtime_call_stats(), + RuntimeCallCounterId::kCompileScopeAnalysis, + RuntimeCallStats::kThreadSpecific); DCHECK_NOT_NULL(info->literal()); DeclarationScope* scope = info->literal()->scope(); @@ -2532,8 +2532,8 @@ void Scope::AllocateVariablesRecursively() { }); } -template <typename LocalIsolate> -void Scope::AllocateScopeInfosRecursively(LocalIsolate* isolate, +template <typename IsolateT> +void Scope::AllocateScopeInfosRecursively(IsolateT* isolate, MaybeHandle<ScopeInfo> outer_scope) { DCHECK(scope_info_.is_null()); MaybeHandle<ScopeInfo> next_outer_scope = outer_scope; @@ -2603,9 +2603,8 @@ void DeclarationScope::RecordNeedsPrivateNameContextChainRecalc() { } // static -template <typename LocalIsolate> -void DeclarationScope::AllocateScopeInfos(ParseInfo* info, - LocalIsolate* isolate) { +template <typename IsolateT> +void DeclarationScope::AllocateScopeInfos(ParseInfo* info, IsolateT* isolate) { DeclarationScope* scope = info->literal()->scope(); // No one else should have allocated a scope info for this scope yet. diff --git a/deps/v8/src/ast/scopes.h b/deps/v8/src/ast/scopes.h index 717c797383..2aa0c23767 100644 --- a/deps/v8/src/ast/scopes.h +++ b/deps/v8/src/ast/scopes.h @@ -716,8 +716,8 @@ class V8_EXPORT_PRIVATE Scope : public NON_EXPORTED_BASE(ZoneObject) { V8_INLINE void AllocateNonParameterLocalsAndDeclaredGlobals(); void AllocateVariablesRecursively(); - template <typename LocalIsolate> - void AllocateScopeInfosRecursively(LocalIsolate* isolate, + template <typename IsolateT> + void AllocateScopeInfosRecursively(IsolateT* isolate, MaybeHandle<ScopeInfo> outer_scope); void AllocateDebuggerScopeInfos(Isolate* isolate, @@ -1151,9 +1151,9 @@ class V8_EXPORT_PRIVATE DeclarationScope : public Scope { // Allocate ScopeInfos for top scope and any inner scopes that need them. // Does nothing if ScopeInfo is already allocated. - template <typename LocalIsolate> + template <typename IsolateT> V8_EXPORT_PRIVATE static void AllocateScopeInfos(ParseInfo* info, - LocalIsolate* isolate); + IsolateT* isolate); Handle<StringSet> CollectNonLocals(Isolate* isolate, Handle<StringSet> non_locals); diff --git a/deps/v8/src/ast/variables.cc b/deps/v8/src/ast/variables.cc index da2d8387f5..4f1f46150f 100644 --- a/deps/v8/src/ast/variables.cc +++ b/deps/v8/src/ast/variables.cc @@ -30,14 +30,15 @@ bool Variable::IsGlobalObjectProperty() const { scope_ != nullptr && scope_->is_script_scope(); } -bool Variable::IsReplGlobalLet() const { - return scope()->is_repl_mode_scope() && mode() == VariableMode::kLet; +bool Variable::IsReplGlobal() const { + return scope()->is_repl_mode_scope() && + (mode() == VariableMode::kLet || mode() == VariableMode::kConst); } void Variable::RewriteLocationForRepl() { DCHECK(scope_->is_repl_mode_scope()); - if (mode() == VariableMode::kLet) { + if (mode() == VariableMode::kLet || mode() == VariableMode::kConst) { DCHECK_EQ(location(), VariableLocation::CONTEXT); bit_field_ = LocationField::update(bit_field_, VariableLocation::REPL_GLOBAL); diff --git a/deps/v8/src/ast/variables.h b/deps/v8/src/ast/variables.h index 7c6ee4324e..ec31eb0689 100644 --- a/deps/v8/src/ast/variables.h +++ b/deps/v8/src/ast/variables.h @@ -125,8 +125,9 @@ class Variable final : public ZoneObject { bool IsLookupSlot() const { return location() == VariableLocation::LOOKUP; } bool IsGlobalObjectProperty() const; - // True for 'let' variables declared in the script scope of a REPL script. - bool IsReplGlobalLet() const; + // True for 'let' and 'const' variables declared in the script scope of a REPL + // script. + bool IsReplGlobal() const; bool is_dynamic() const { return IsDynamicVariableMode(mode()); } diff --git a/deps/v8/src/base/atomicops.h b/deps/v8/src/base/atomicops.h index 5d6422be52..cb6940ea70 100644 --- a/deps/v8/src/base/atomicops.h +++ b/deps/v8/src/base/atomicops.h @@ -27,6 +27,8 @@ #include <stdint.h> +#include <atomic> + // Small C++ header which defines implementation specific macros used to // identify the STL implementation. // - libc++: captures __config for _LIBCPP_VERSION @@ -35,6 +37,7 @@ #include "src/base/base-export.h" #include "src/base/build_config.h" +#include "src/base/macros.h" #if defined(V8_OS_STARBOARD) #include "starboard/atomic.h" @@ -77,6 +80,21 @@ using AtomicWord = SbAtomicPtr; using AtomicWord = intptr_t; #endif +namespace helper { +template <typename T> +volatile std::atomic<T>* to_std_atomic(volatile T* ptr) { + return reinterpret_cast<volatile std::atomic<T>*>(ptr); +} +template <typename T> +volatile const std::atomic<T>* to_std_atomic_const(volatile const T* ptr) { + return reinterpret_cast<volatile const std::atomic<T>*>(ptr); +} +} // namespace helper + +inline void SeqCst_MemoryFence() { + std::atomic_thread_fence(std::memory_order_seq_cst); +} + // Atomically execute: // result = *ptr; // if (result == old_value) @@ -86,75 +104,225 @@ using AtomicWord = intptr_t; // I.e. replace |*ptr| with |new_value| if |*ptr| used to be |old_value|. // Always return the value of |*ptr| before the operation. // Acquire, Relaxed, Release correspond to standard C++ memory orders. -Atomic8 Relaxed_CompareAndSwap(volatile Atomic8* ptr, Atomic8 old_value, - Atomic8 new_value); -Atomic16 Relaxed_CompareAndSwap(volatile Atomic16* ptr, Atomic16 old_value, - Atomic16 new_value); -Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr, Atomic32 old_value, - Atomic32 new_value); -Atomic32 AcquireRelease_CompareAndSwap(volatile Atomic32* ptr, - Atomic32 old_value, Atomic32 new_value); -Atomic32 Relaxed_CompareAndSwap(volatile Atomic32* ptr, Atomic32 old_value, - Atomic32 new_value); -Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr, Atomic32 old_value, - Atomic32 new_value); -#ifdef V8_HOST_ARCH_64_BIT -Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr, Atomic64 old_value, - Atomic64 new_value); -Atomic64 AcquireRelease_CompareAndSwap(volatile Atomic64* ptr, - Atomic64 old_value, Atomic64 new_value); -Atomic64 Relaxed_CompareAndSwap(volatile Atomic64* ptr, Atomic64 old_value, - Atomic64 new_value); -Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr, Atomic64 old_value, - Atomic64 new_value); -#endif // V8_HOST_ARCH_64_BIT - -// Atomically store new_value into |*ptr|, returning the previous value held in -// |*ptr|. -Atomic32 Relaxed_AtomicExchange(volatile Atomic32* ptr, Atomic32 new_value); -#ifdef V8_HOST_ARCH_64_BIT -Atomic64 Relaxed_AtomicExchange(volatile Atomic64* ptr, Atomic64 new_value); -#endif // V8_HOST_ARCH_64_BIT - -// Atomically increment |*ptr| by |increment|. Returns the new value of -// |*ptr| with the increment applied. -Atomic32 Relaxed_AtomicIncrement(volatile Atomic32* ptr, Atomic32 increment); - -#ifdef V8_HOST_ARCH_64_BIT -Atomic64 Relaxed_AtomicIncrement(volatile Atomic64* ptr, Atomic64 increment); -#endif // V8_HOST_ARCH_64_BIT - -void SeqCst_MemoryFence(); - -void Relaxed_Store(volatile Atomic8* ptr, Atomic8 value); -void Relaxed_Store(volatile Atomic16* ptr, Atomic16 value); -void Relaxed_Store(volatile Atomic32* ptr, Atomic32 value); -void Release_Store(volatile Atomic32* ptr, Atomic32 value); -#ifdef V8_HOST_ARCH_64_BIT -void Relaxed_Store(volatile Atomic64* ptr, Atomic64 value); -void Release_Store(volatile Atomic64* ptr, Atomic64 value); -#endif // V8_HOST_ARCH_64_BIT - -Atomic8 Relaxed_Load(volatile const Atomic8* ptr); -Atomic16 Relaxed_Load(volatile const Atomic16* ptr); -Atomic32 Relaxed_Load(volatile const Atomic32* ptr); -Atomic32 Acquire_Load(volatile const Atomic32* ptr); -#ifdef V8_HOST_ARCH_64_BIT -Atomic64 Relaxed_Load(volatile const Atomic64* ptr); -Atomic64 Acquire_Load(volatile const Atomic64* ptr); -#endif // V8_HOST_ARCH_64_BIT +inline Atomic8 Relaxed_CompareAndSwap(volatile Atomic8* ptr, Atomic8 old_value, + Atomic8 new_value) { + std::atomic_compare_exchange_strong_explicit( + helper::to_std_atomic(ptr), &old_value, new_value, + std::memory_order_relaxed, std::memory_order_relaxed); + return old_value; +} + +inline Atomic16 Relaxed_CompareAndSwap(volatile Atomic16* ptr, + Atomic16 old_value, Atomic16 new_value) { + std::atomic_compare_exchange_strong_explicit( + helper::to_std_atomic(ptr), &old_value, new_value, + std::memory_order_relaxed, std::memory_order_relaxed); + return old_value; +} + +inline Atomic32 Relaxed_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, Atomic32 new_value) { + std::atomic_compare_exchange_strong_explicit( + helper::to_std_atomic(ptr), &old_value, new_value, + std::memory_order_relaxed, std::memory_order_relaxed); + return old_value; +} + +inline Atomic32 Relaxed_AtomicExchange(volatile Atomic32* ptr, + Atomic32 new_value) { + return std::atomic_exchange_explicit(helper::to_std_atomic(ptr), new_value, + std::memory_order_relaxed); +} + +inline Atomic32 Relaxed_AtomicIncrement(volatile Atomic32* ptr, + Atomic32 increment) { + return increment + std::atomic_fetch_add_explicit(helper::to_std_atomic(ptr), + increment, + std::memory_order_relaxed); +} + +inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, Atomic32 new_value) { + atomic_compare_exchange_strong_explicit( + helper::to_std_atomic(ptr), &old_value, new_value, + std::memory_order_acquire, std::memory_order_acquire); + return old_value; +} + +inline Atomic8 Release_CompareAndSwap(volatile Atomic8* ptr, Atomic8 old_value, + Atomic8 new_value) { + bool result = atomic_compare_exchange_strong_explicit( + helper::to_std_atomic(ptr), &old_value, new_value, + std::memory_order_release, std::memory_order_relaxed); + USE(result); // Make gcc compiler happy. + return old_value; +} + +inline Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, Atomic32 new_value) { + atomic_compare_exchange_strong_explicit( + helper::to_std_atomic(ptr), &old_value, new_value, + std::memory_order_release, std::memory_order_relaxed); + return old_value; +} + +inline Atomic32 AcquireRelease_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + atomic_compare_exchange_strong_explicit( + helper::to_std_atomic(ptr), &old_value, new_value, + std::memory_order_acq_rel, std::memory_order_acquire); + return old_value; +} + +inline void Relaxed_Store(volatile Atomic8* ptr, Atomic8 value) { + std::atomic_store_explicit(helper::to_std_atomic(ptr), value, + std::memory_order_relaxed); +} + +inline void Relaxed_Store(volatile Atomic16* ptr, Atomic16 value) { + std::atomic_store_explicit(helper::to_std_atomic(ptr), value, + std::memory_order_relaxed); +} + +inline void Relaxed_Store(volatile Atomic32* ptr, Atomic32 value) { + std::atomic_store_explicit(helper::to_std_atomic(ptr), value, + std::memory_order_relaxed); +} + +inline void Release_Store(volatile Atomic8* ptr, Atomic8 value) { + std::atomic_store_explicit(helper::to_std_atomic(ptr), value, + std::memory_order_release); +} + +inline void Release_Store(volatile Atomic32* ptr, Atomic32 value) { + std::atomic_store_explicit(helper::to_std_atomic(ptr), value, + std::memory_order_release); +} + +inline Atomic8 Relaxed_Load(volatile const Atomic8* ptr) { + return std::atomic_load_explicit(helper::to_std_atomic_const(ptr), + std::memory_order_relaxed); +} + +inline Atomic16 Relaxed_Load(volatile const Atomic16* ptr) { + return std::atomic_load_explicit(helper::to_std_atomic_const(ptr), + std::memory_order_relaxed); +} + +inline Atomic32 Relaxed_Load(volatile const Atomic32* ptr) { + return std::atomic_load_explicit(helper::to_std_atomic_const(ptr), + std::memory_order_relaxed); +} + +inline Atomic8 Acquire_Load(volatile const Atomic8* ptr) { + return std::atomic_load_explicit(helper::to_std_atomic_const(ptr), + std::memory_order_acquire); +} + +inline Atomic32 Acquire_Load(volatile const Atomic32* ptr) { + return std::atomic_load_explicit(helper::to_std_atomic_const(ptr), + std::memory_order_acquire); +} + +#if defined(V8_HOST_ARCH_64_BIT) + +inline Atomic64 Relaxed_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, Atomic64 new_value) { + std::atomic_compare_exchange_strong_explicit( + helper::to_std_atomic(ptr), &old_value, new_value, + std::memory_order_relaxed, std::memory_order_relaxed); + return old_value; +} + +inline Atomic64 Relaxed_AtomicExchange(volatile Atomic64* ptr, + Atomic64 new_value) { + return std::atomic_exchange_explicit(helper::to_std_atomic(ptr), new_value, + std::memory_order_relaxed); +} + +inline Atomic64 Relaxed_AtomicIncrement(volatile Atomic64* ptr, + Atomic64 increment) { + return increment + std::atomic_fetch_add_explicit(helper::to_std_atomic(ptr), + increment, + std::memory_order_relaxed); +} + +inline Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, Atomic64 new_value) { + std::atomic_compare_exchange_strong_explicit( + helper::to_std_atomic(ptr), &old_value, new_value, + std::memory_order_acquire, std::memory_order_acquire); + return old_value; +} + +inline Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, Atomic64 new_value) { + std::atomic_compare_exchange_strong_explicit( + helper::to_std_atomic(ptr), &old_value, new_value, + std::memory_order_release, std::memory_order_relaxed); + return old_value; +} + +inline Atomic64 AcquireRelease_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { + std::atomic_compare_exchange_strong_explicit( + helper::to_std_atomic(ptr), &old_value, new_value, + std::memory_order_acq_rel, std::memory_order_acquire); + return old_value; +} + +inline void Relaxed_Store(volatile Atomic64* ptr, Atomic64 value) { + std::atomic_store_explicit(helper::to_std_atomic(ptr), value, + std::memory_order_relaxed); +} + +inline void Release_Store(volatile Atomic64* ptr, Atomic64 value) { + std::atomic_store_explicit(helper::to_std_atomic(ptr), value, + std::memory_order_release); +} + +inline Atomic64 Relaxed_Load(volatile const Atomic64* ptr) { + return std::atomic_load_explicit(helper::to_std_atomic_const(ptr), + std::memory_order_relaxed); +} + +inline Atomic64 Acquire_Load(volatile const Atomic64* ptr) { + return std::atomic_load_explicit(helper::to_std_atomic_const(ptr), + std::memory_order_acquire); +} + +#endif // defined(V8_HOST_ARCH_64_BIT) + +inline void Relaxed_Memcpy(volatile Atomic8* dst, volatile const Atomic8* src, + size_t bytes) { + constexpr size_t kAtomicWordSize = sizeof(AtomicWord); + while (bytes > 0 && + !IsAligned(reinterpret_cast<uintptr_t>(dst), kAtomicWordSize)) { + Relaxed_Store(dst++, Relaxed_Load(src++)); + --bytes; + } + if (IsAligned(reinterpret_cast<uintptr_t>(src), kAtomicWordSize) && + IsAligned(reinterpret_cast<uintptr_t>(dst), kAtomicWordSize)) { + while (bytes >= kAtomicWordSize) { + Relaxed_Store( + reinterpret_cast<volatile AtomicWord*>(dst), + Relaxed_Load(reinterpret_cast<const volatile AtomicWord*>(src))); + dst += kAtomicWordSize; + src += kAtomicWordSize; + bytes -= kAtomicWordSize; + } + } + while (bytes > 0) { + Relaxed_Store(dst++, Relaxed_Load(src++)); + --bytes; + } +} } // namespace base } // namespace v8 -#if defined(V8_OS_WIN) || defined(V8_OS_STARBOARD) -#include "src/base/atomicops_internals_std.h" -#else -// TODO(ulan): Switch to std version after performance regression with Wheezy -// sysroot is no longer relevant. Debian Wheezy LTS ends on 31st of May 2018. -#include "src/base/atomicops_internals_portable.h" -#endif - // On some platforms we need additional declarations to make // AtomicWord compatible with our other Atomic* types. #if defined(V8_OS_MACOSX) || defined(V8_OS_OPENBSD) || defined(V8_OS_AIX) diff --git a/deps/v8/src/base/atomicops_internals_portable.h b/deps/v8/src/base/atomicops_internals_portable.h deleted file mode 100644 index ac162e2a82..0000000000 --- a/deps/v8/src/base/atomicops_internals_portable.h +++ /dev/null @@ -1,216 +0,0 @@ -// Copyright 2016 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// This file is an internal atomic implementation, use atomicops.h instead. -// -// This implementation uses C++11 atomics' member functions. The code base is -// currently written assuming atomicity revolves around accesses instead of -// C++11's memory locations. The burden is on the programmer to ensure that all -// memory locations accessed atomically are never accessed non-atomically (tsan -// should help with this). -// -// Of note in this implementation: -// * All NoBarrier variants are implemented as relaxed. -// * All Barrier variants are implemented as sequentially-consistent. -// * Compare exchange's failure ordering is always the same as the success one -// (except for release, which fails as relaxed): using a weaker ordering is -// only valid under certain uses of compare exchange. -// * Acquire store doesn't exist in the C11 memory model, it is instead -// implemented as a relaxed store followed by a sequentially consistent -// fence. -// * Release load doesn't exist in the C11 memory model, it is instead -// implemented as sequentially consistent fence followed by a relaxed load. -// * Atomic increment is expected to return the post-incremented value, whereas -// C11 fetch add returns the previous value. The implementation therefore -// needs to increment twice (which the compiler should be able to detect and -// optimize). - -#ifndef V8_BASE_ATOMICOPS_INTERNALS_PORTABLE_H_ -#define V8_BASE_ATOMICOPS_INTERNALS_PORTABLE_H_ - -#include <atomic> - -#include "src/base/build_config.h" -#include "src/base/macros.h" - -namespace v8 { -namespace base { - -// This implementation is transitional and maintains the original API for -// atomicops.h. - -inline void SeqCst_MemoryFence() { -#if defined(__GLIBCXX__) - // Work around libstdc++ bug 51038 where atomic_thread_fence was declared but - // not defined, leading to the linker complaining about undefined references. - __atomic_thread_fence(std::memory_order_seq_cst); -#else - std::atomic_thread_fence(std::memory_order_seq_cst); -#endif -} - -inline Atomic8 Relaxed_CompareAndSwap(volatile Atomic8* ptr, Atomic8 old_value, - Atomic8 new_value) { - bool result = __atomic_compare_exchange_n(ptr, &old_value, new_value, false, - __ATOMIC_RELAXED, __ATOMIC_RELAXED); - USE(result); // Make gcc compiler happy. - return old_value; -} - -inline Atomic16 Relaxed_CompareAndSwap(volatile Atomic16* ptr, - Atomic16 old_value, Atomic16 new_value) { - __atomic_compare_exchange_n(ptr, &old_value, new_value, false, - __ATOMIC_RELAXED, __ATOMIC_RELAXED); - return old_value; -} - -inline Atomic32 Relaxed_CompareAndSwap(volatile Atomic32* ptr, - Atomic32 old_value, Atomic32 new_value) { - __atomic_compare_exchange_n(ptr, &old_value, new_value, false, - __ATOMIC_RELAXED, __ATOMIC_RELAXED); - return old_value; -} - -inline Atomic32 Relaxed_AtomicExchange(volatile Atomic32* ptr, - Atomic32 new_value) { - return __atomic_exchange_n(ptr, new_value, __ATOMIC_RELAXED); -} - -inline Atomic32 Relaxed_AtomicIncrement(volatile Atomic32* ptr, - Atomic32 increment) { - return increment + __atomic_fetch_add(ptr, increment, __ATOMIC_RELAXED); -} - -inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr, - Atomic32 old_value, Atomic32 new_value) { - __atomic_compare_exchange_n(ptr, &old_value, new_value, false, - __ATOMIC_ACQUIRE, __ATOMIC_ACQUIRE); - return old_value; -} - -inline Atomic8 Release_CompareAndSwap(volatile Atomic8* ptr, Atomic8 old_value, - Atomic8 new_value) { - bool result = __atomic_compare_exchange_n(ptr, &old_value, new_value, false, - __ATOMIC_RELEASE, __ATOMIC_RELAXED); - USE(result); // Make gcc compiler happy. - return old_value; -} - -inline Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr, - Atomic32 old_value, Atomic32 new_value) { - __atomic_compare_exchange_n(ptr, &old_value, new_value, false, - __ATOMIC_RELEASE, __ATOMIC_RELAXED); - return old_value; -} - -inline Atomic32 AcquireRelease_CompareAndSwap(volatile Atomic32* ptr, - Atomic32 old_value, - Atomic32 new_value) { - __atomic_compare_exchange_n(ptr, &old_value, new_value, false, - __ATOMIC_ACQ_REL, __ATOMIC_ACQUIRE); - return old_value; -} - -inline void Relaxed_Store(volatile Atomic8* ptr, Atomic8 value) { - __atomic_store_n(ptr, value, __ATOMIC_RELAXED); -} - -inline void Relaxed_Store(volatile Atomic16* ptr, Atomic16 value) { - __atomic_store_n(ptr, value, __ATOMIC_RELAXED); -} - -inline void Relaxed_Store(volatile Atomic32* ptr, Atomic32 value) { - __atomic_store_n(ptr, value, __ATOMIC_RELAXED); -} - -inline void Release_Store(volatile Atomic8* ptr, Atomic8 value) { - __atomic_store_n(ptr, value, __ATOMIC_RELEASE); -} - -inline void Release_Store(volatile Atomic32* ptr, Atomic32 value) { - __atomic_store_n(ptr, value, __ATOMIC_RELEASE); -} - -inline Atomic8 Relaxed_Load(volatile const Atomic8* ptr) { - return __atomic_load_n(ptr, __ATOMIC_RELAXED); -} - -inline Atomic16 Relaxed_Load(volatile const Atomic16* ptr) { - return __atomic_load_n(ptr, __ATOMIC_RELAXED); -} - -inline Atomic32 Relaxed_Load(volatile const Atomic32* ptr) { - return __atomic_load_n(ptr, __ATOMIC_RELAXED); -} - -inline Atomic8 Acquire_Load(volatile const Atomic8* ptr) { - return __atomic_load_n(ptr, __ATOMIC_ACQUIRE); -} - -inline Atomic32 Acquire_Load(volatile const Atomic32* ptr) { - return __atomic_load_n(ptr, __ATOMIC_ACQUIRE); -} - -#if defined(V8_HOST_ARCH_64_BIT) - -inline Atomic64 Relaxed_CompareAndSwap(volatile Atomic64* ptr, - Atomic64 old_value, Atomic64 new_value) { - __atomic_compare_exchange_n(ptr, &old_value, new_value, false, - __ATOMIC_RELAXED, __ATOMIC_RELAXED); - return old_value; -} - -inline Atomic64 Relaxed_AtomicExchange(volatile Atomic64* ptr, - Atomic64 new_value) { - return __atomic_exchange_n(ptr, new_value, __ATOMIC_RELAXED); -} - -inline Atomic64 Relaxed_AtomicIncrement(volatile Atomic64* ptr, - Atomic64 increment) { - return increment + __atomic_fetch_add(ptr, increment, __ATOMIC_RELAXED); -} - -inline Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr, - Atomic64 old_value, Atomic64 new_value) { - __atomic_compare_exchange_n(ptr, &old_value, new_value, false, - __ATOMIC_ACQUIRE, __ATOMIC_ACQUIRE); - return old_value; -} - -inline Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr, - Atomic64 old_value, Atomic64 new_value) { - __atomic_compare_exchange_n(ptr, &old_value, new_value, false, - __ATOMIC_RELEASE, __ATOMIC_RELAXED); - return old_value; -} - -inline Atomic64 AcquireRelease_CompareAndSwap(volatile Atomic64* ptr, - Atomic64 old_value, - Atomic64 new_value) { - __atomic_compare_exchange_n(ptr, &old_value, new_value, false, - __ATOMIC_ACQ_REL, __ATOMIC_ACQUIRE); - return old_value; -} - -inline void Relaxed_Store(volatile Atomic64* ptr, Atomic64 value) { - __atomic_store_n(ptr, value, __ATOMIC_RELAXED); -} - -inline void Release_Store(volatile Atomic64* ptr, Atomic64 value) { - __atomic_store_n(ptr, value, __ATOMIC_RELEASE); -} - -inline Atomic64 Relaxed_Load(volatile const Atomic64* ptr) { - return __atomic_load_n(ptr, __ATOMIC_RELAXED); -} - -inline Atomic64 Acquire_Load(volatile const Atomic64* ptr) { - return __atomic_load_n(ptr, __ATOMIC_ACQUIRE); -} - -#endif // defined(V8_HOST_ARCH_64_BIT) -} // namespace base -} // namespace v8 - -#endif // V8_BASE_ATOMICOPS_INTERNALS_PORTABLE_H_ diff --git a/deps/v8/src/base/atomicops_internals_std.h b/deps/v8/src/base/atomicops_internals_std.h deleted file mode 100644 index 1638b8b52a..0000000000 --- a/deps/v8/src/base/atomicops_internals_std.h +++ /dev/null @@ -1,224 +0,0 @@ -// Copyright 2017 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef V8_BASE_ATOMICOPS_INTERNALS_STD_H_ -#define V8_BASE_ATOMICOPS_INTERNALS_STD_H_ - -#include <atomic> - -#include "src/base/build_config.h" -#include "src/base/macros.h" - -namespace v8 { -namespace base { - -namespace helper { -template <typename T> -volatile std::atomic<T>* to_std_atomic(volatile T* ptr) { - return reinterpret_cast<volatile std::atomic<T>*>(ptr); -} -template <typename T> -volatile const std::atomic<T>* to_std_atomic_const(volatile const T* ptr) { - return reinterpret_cast<volatile const std::atomic<T>*>(ptr); -} -} // namespace helper - -inline void SeqCst_MemoryFence() { - std::atomic_thread_fence(std::memory_order_seq_cst); -} - -inline Atomic8 Relaxed_CompareAndSwap(volatile Atomic8* ptr, Atomic8 old_value, - Atomic8 new_value) { - std::atomic_compare_exchange_strong_explicit( - helper::to_std_atomic(ptr), &old_value, new_value, - std::memory_order_relaxed, std::memory_order_relaxed); - return old_value; -} - -inline Atomic16 Relaxed_CompareAndSwap(volatile Atomic16* ptr, - Atomic16 old_value, Atomic16 new_value) { - std::atomic_compare_exchange_strong_explicit( - helper::to_std_atomic(ptr), &old_value, new_value, - std::memory_order_relaxed, std::memory_order_relaxed); - return old_value; -} - -inline Atomic32 Relaxed_CompareAndSwap(volatile Atomic32* ptr, - Atomic32 old_value, Atomic32 new_value) { - std::atomic_compare_exchange_strong_explicit( - helper::to_std_atomic(ptr), &old_value, new_value, - std::memory_order_relaxed, std::memory_order_relaxed); - return old_value; -} - -inline Atomic32 Relaxed_AtomicExchange(volatile Atomic32* ptr, - Atomic32 new_value) { - return std::atomic_exchange_explicit(helper::to_std_atomic(ptr), new_value, - std::memory_order_relaxed); -} - -inline Atomic32 Relaxed_AtomicIncrement(volatile Atomic32* ptr, - Atomic32 increment) { - return increment + std::atomic_fetch_add_explicit(helper::to_std_atomic(ptr), - increment, - std::memory_order_relaxed); -} - -inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr, - Atomic32 old_value, Atomic32 new_value) { - atomic_compare_exchange_strong_explicit( - helper::to_std_atomic(ptr), &old_value, new_value, - std::memory_order_acquire, std::memory_order_acquire); - return old_value; -} - -inline Atomic8 Release_CompareAndSwap(volatile Atomic8* ptr, Atomic8 old_value, - Atomic8 new_value) { - bool result = atomic_compare_exchange_strong_explicit( - helper::to_std_atomic(ptr), &old_value, new_value, - std::memory_order_release, std::memory_order_relaxed); - USE(result); // Make gcc compiler happy. - return old_value; -} - -inline Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr, - Atomic32 old_value, Atomic32 new_value) { - atomic_compare_exchange_strong_explicit( - helper::to_std_atomic(ptr), &old_value, new_value, - std::memory_order_release, std::memory_order_relaxed); - return old_value; -} - -inline Atomic32 AcquireRelease_CompareAndSwap(volatile Atomic32* ptr, - Atomic32 old_value, - Atomic32 new_value) { - atomic_compare_exchange_strong_explicit( - helper::to_std_atomic(ptr), &old_value, new_value, - std::memory_order_acq_rel, std::memory_order_acquire); - return old_value; -} - -inline void Relaxed_Store(volatile Atomic8* ptr, Atomic8 value) { - std::atomic_store_explicit(helper::to_std_atomic(ptr), value, - std::memory_order_relaxed); -} - -inline void Relaxed_Store(volatile Atomic16* ptr, Atomic16 value) { - std::atomic_store_explicit(helper::to_std_atomic(ptr), value, - std::memory_order_relaxed); -} - -inline void Relaxed_Store(volatile Atomic32* ptr, Atomic32 value) { - std::atomic_store_explicit(helper::to_std_atomic(ptr), value, - std::memory_order_relaxed); -} - -inline void Release_Store(volatile Atomic8* ptr, Atomic8 value) { - std::atomic_store_explicit(helper::to_std_atomic(ptr), value, - std::memory_order_release); -} - -inline void Release_Store(volatile Atomic32* ptr, Atomic32 value) { - std::atomic_store_explicit(helper::to_std_atomic(ptr), value, - std::memory_order_release); -} - -inline Atomic8 Relaxed_Load(volatile const Atomic8* ptr) { - return std::atomic_load_explicit(helper::to_std_atomic_const(ptr), - std::memory_order_relaxed); -} - -inline Atomic16 Relaxed_Load(volatile const Atomic16* ptr) { - return std::atomic_load_explicit(helper::to_std_atomic_const(ptr), - std::memory_order_relaxed); -} - -inline Atomic32 Relaxed_Load(volatile const Atomic32* ptr) { - return std::atomic_load_explicit(helper::to_std_atomic_const(ptr), - std::memory_order_relaxed); -} - -inline Atomic8 Acquire_Load(volatile const Atomic8* ptr) { - return std::atomic_load_explicit(helper::to_std_atomic_const(ptr), - std::memory_order_acquire); -} - -inline Atomic32 Acquire_Load(volatile const Atomic32* ptr) { - return std::atomic_load_explicit(helper::to_std_atomic_const(ptr), - std::memory_order_acquire); -} - -#if defined(V8_HOST_ARCH_64_BIT) - -inline Atomic64 Relaxed_CompareAndSwap(volatile Atomic64* ptr, - Atomic64 old_value, Atomic64 new_value) { - std::atomic_compare_exchange_strong_explicit( - helper::to_std_atomic(ptr), &old_value, new_value, - std::memory_order_relaxed, std::memory_order_relaxed); - return old_value; -} - -inline Atomic64 Relaxed_AtomicExchange(volatile Atomic64* ptr, - Atomic64 new_value) { - return std::atomic_exchange_explicit(helper::to_std_atomic(ptr), new_value, - std::memory_order_relaxed); -} - -inline Atomic64 Relaxed_AtomicIncrement(volatile Atomic64* ptr, - Atomic64 increment) { - return increment + std::atomic_fetch_add_explicit(helper::to_std_atomic(ptr), - increment, - std::memory_order_relaxed); -} - -inline Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr, - Atomic64 old_value, Atomic64 new_value) { - std::atomic_compare_exchange_strong_explicit( - helper::to_std_atomic(ptr), &old_value, new_value, - std::memory_order_acquire, std::memory_order_acquire); - return old_value; -} - -inline Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr, - Atomic64 old_value, Atomic64 new_value) { - std::atomic_compare_exchange_strong_explicit( - helper::to_std_atomic(ptr), &old_value, new_value, - std::memory_order_release, std::memory_order_relaxed); - return old_value; -} - -inline Atomic64 AcquireRelease_CompareAndSwap(volatile Atomic64* ptr, - Atomic64 old_value, - Atomic64 new_value) { - std::atomic_compare_exchange_strong_explicit( - helper::to_std_atomic(ptr), &old_value, new_value, - std::memory_order_acq_rel, std::memory_order_acquire); - return old_value; -} - -inline void Relaxed_Store(volatile Atomic64* ptr, Atomic64 value) { - std::atomic_store_explicit(helper::to_std_atomic(ptr), value, - std::memory_order_relaxed); -} - -inline void Release_Store(volatile Atomic64* ptr, Atomic64 value) { - std::atomic_store_explicit(helper::to_std_atomic(ptr), value, - std::memory_order_release); -} - -inline Atomic64 Relaxed_Load(volatile const Atomic64* ptr) { - return std::atomic_load_explicit(helper::to_std_atomic_const(ptr), - std::memory_order_relaxed); -} - -inline Atomic64 Acquire_Load(volatile const Atomic64* ptr) { - return std::atomic_load_explicit(helper::to_std_atomic_const(ptr), - std::memory_order_acquire); -} - -#endif // defined(V8_HOST_ARCH_64_BIT) -} // namespace base -} // namespace v8 - -#endif // V8_BASE_ATOMICOPS_INTERNALS_STD_H_ diff --git a/deps/v8/src/base/bit-field.h b/deps/v8/src/base/bit-field.h index ca5fb45921..7b2796e3df 100644 --- a/deps/v8/src/base/bit-field.h +++ b/deps/v8/src/base/bit-field.h @@ -52,7 +52,7 @@ class BitField final { // Returns a type U with the bit field value encoded. static constexpr U encode(T value) { - CONSTEXPR_DCHECK(is_valid(value)); + DCHECK(is_valid(value)); return static_cast<U>(value) << kShift; } diff --git a/deps/v8/src/base/bits.h b/deps/v8/src/base/bits.h index b137f73936..f790dfaab4 100644 --- a/deps/v8/src/base/bits.h +++ b/deps/v8/src/base/bits.h @@ -144,7 +144,7 @@ inline constexpr typename std::enable_if<std::is_integral<T>::value && sizeof(T) <= 8, unsigned>::type CountTrailingZerosNonZero(T value) { - CONSTEXPR_DCHECK(value != 0); + DCHECK_NE(0, value); #if V8_HAS_BUILTIN_CTZ return bits == 64 ? __builtin_ctzll(static_cast<uint64_t>(value)) : __builtin_ctz(static_cast<uint32_t>(value)); @@ -165,7 +165,7 @@ constexpr inline bool IsPowerOfTwo(T value) { template <typename T, typename = typename std::enable_if<std::is_integral<T>::value>::type> inline constexpr int WhichPowerOfTwo(T value) { - CONSTEXPR_DCHECK(IsPowerOfTwo(value)); + DCHECK(IsPowerOfTwo(value)); #if V8_HAS_BUILTIN_CTZ STATIC_ASSERT(sizeof(T) <= 8); return sizeof(T) == 8 ? __builtin_ctzll(static_cast<uint64_t>(value)) diff --git a/deps/v8/src/base/bounds.h b/deps/v8/src/base/bounds.h index fb8c968d66..0fe141b309 100644 --- a/deps/v8/src/base/bounds.h +++ b/deps/v8/src/base/bounds.h @@ -15,7 +15,7 @@ namespace base { // branch. template <typename T, typename U> inline constexpr bool IsInRange(T value, U lower_limit, U higher_limit) { - CONSTEXPR_DCHECK(lower_limit <= higher_limit); + DCHECK_LE(lower_limit, higher_limit); STATIC_ASSERT(sizeof(U) <= sizeof(T)); using unsigned_T = typename std::make_unsigned<T>::type; // Use static_cast to support enum classes. diff --git a/deps/v8/src/base/cpu.cc b/deps/v8/src/base/cpu.cc index 17ef42a299..9ddf8939be 100644 --- a/deps/v8/src/base/cpu.cc +++ b/deps/v8/src/base/cpu.cc @@ -50,7 +50,7 @@ #include "src/base/logging.h" #include "src/base/platform/wrappers.h" #if V8_OS_WIN -#include "src/base/win32-headers.h" // NOLINT +#include "src/base/win32-headers.h" #endif namespace v8 { diff --git a/deps/v8/src/base/enum-set.h b/deps/v8/src/base/enum-set.h index f623198c2d..ce49b3996e 100644 --- a/deps/v8/src/base/enum-set.h +++ b/deps/v8/src/base/enum-set.h @@ -79,7 +79,7 @@ class EnumSet { explicit constexpr EnumSet(T bits) : bits_(bits) {} static constexpr T Mask(E element) { - CONSTEXPR_DCHECK(sizeof(T) * 8 > static_cast<size_t>(element)); + DCHECK_GT(sizeof(T) * 8, static_cast<size_t>(element)); return T{1} << static_cast<typename std::underlying_type<E>::type>(element); } diff --git a/deps/v8/src/base/hashmap.h b/deps/v8/src/base/hashmap.h index 179da5ecba..819d589a81 100644 --- a/deps/v8/src/base/hashmap.h +++ b/deps/v8/src/base/hashmap.h @@ -530,8 +530,8 @@ class TemplateHashMap AllocationPolicy>; public: - STATIC_ASSERT(sizeof(Key*) == sizeof(void*)); // NOLINT - STATIC_ASSERT(sizeof(Value*) == sizeof(void*)); // NOLINT + STATIC_ASSERT(sizeof(Key*) == sizeof(void*)); + STATIC_ASSERT(sizeof(Value*) == sizeof(void*)); struct value_type { Key* first; Value* second; diff --git a/deps/v8/src/base/logging.h b/deps/v8/src/base/logging.h index 2c4c536cf3..08db24a947 100644 --- a/deps/v8/src/base/logging.h +++ b/deps/v8/src/base/logging.h @@ -134,12 +134,6 @@ V8_BASE_EXPORT void SetDcheckFunction(void (*dcheck_Function)(const char*, int, #endif -#if V8_HAS_CXX14_CONSTEXPR -#define CONSTEXPR_DCHECK(cond) DCHECK(cond) -#else -#define CONSTEXPR_DCHECK(cond) -#endif - namespace detail { template <typename... Ts> std::string PrintToString(Ts&&... ts) { diff --git a/deps/v8/src/base/once.h b/deps/v8/src/base/once.h index dd8b6be621..c4224e84e3 100644 --- a/deps/v8/src/base/once.h +++ b/deps/v8/src/base/once.h @@ -53,10 +53,12 @@ #define V8_BASE_ONCE_H_ #include <stddef.h> + #include <atomic> #include <functional> #include "src/base/base-export.h" +#include "src/base/template-utils.h" namespace v8 { namespace base { @@ -76,9 +78,9 @@ enum : uint8_t { using PointerArgFunction = void (*)(void* arg); -template <typename T> -struct OneArgFunction { - using type = void (*)(T); +template <typename... Args> +struct FunctionWithArgs { + using type = void (*)(Args...); }; V8_BASE_EXPORT void CallOnceImpl(OnceType* once, @@ -90,11 +92,13 @@ inline void CallOnce(OnceType* once, std::function<void()> init_func) { } } -template <typename Arg> +template <typename... Args, typename = std::enable_if_t< + conjunction<std::is_scalar<Args>...>::value>> inline void CallOnce(OnceType* once, - typename OneArgFunction<Arg*>::type init_func, Arg* arg) { + typename FunctionWithArgs<Args...>::type init_func, + Args... args) { if (once->load(std::memory_order_acquire) != ONCE_STATE_DONE) { - CallOnceImpl(once, [=]() { init_func(arg); }); + CallOnceImpl(once, [=]() { init_func(args...); }); } } diff --git a/deps/v8/src/base/optional.h b/deps/v8/src/base/optional.h index 3c13e654c8..77e9bb896e 100644 --- a/deps/v8/src/base/optional.h +++ b/deps/v8/src/base/optional.h @@ -558,32 +558,32 @@ class OPTIONAL_DECLSPEC_EMPTY_BASES Optional } constexpr const T* operator->() const { - CONSTEXPR_DCHECK(storage_.is_populated_); + DCHECK(storage_.is_populated_); return &storage_.value_; } constexpr T* operator->() { - CONSTEXPR_DCHECK(storage_.is_populated_); + DCHECK(storage_.is_populated_); return &storage_.value_; } constexpr const T& operator*() const& { - CONSTEXPR_DCHECK(storage_.is_populated_); + DCHECK(storage_.is_populated_); return storage_.value_; } constexpr T& operator*() & { - CONSTEXPR_DCHECK(storage_.is_populated_); + DCHECK(storage_.is_populated_); return storage_.value_; } constexpr const T&& operator*() const&& { - CONSTEXPR_DCHECK(storage_.is_populated_); + DCHECK(storage_.is_populated_); return std::move(storage_.value_); } constexpr T&& operator*() && { - CONSTEXPR_DCHECK(storage_.is_populated_); + DCHECK(storage_.is_populated_); return std::move(storage_.value_); } diff --git a/deps/v8/src/base/platform/mutex.h b/deps/v8/src/base/platform/mutex.h index 5685797f4e..328c593a30 100644 --- a/deps/v8/src/base/platform/mutex.h +++ b/deps/v8/src/base/platform/mutex.h @@ -14,7 +14,7 @@ #include "src/base/logging.h" #if V8_OS_POSIX -#include <pthread.h> // NOLINT +#include <pthread.h> #endif #if V8_OS_STARBOARD @@ -164,6 +164,8 @@ class V8_BASE_EXPORT RecursiveMutex final { // successfully locked. bool TryLock() V8_WARN_UNUSED_RESULT; + V8_INLINE void AssertHeld() const { DCHECK_LT(0, level_); } + private: // The implementation-defined native handle type. #if V8_OS_POSIX diff --git a/deps/v8/src/base/platform/platform-aix.cc b/deps/v8/src/base/platform/platform-aix.cc index 6b6a870370..e5a5305d48 100644 --- a/deps/v8/src/base/platform/platform-aix.cc +++ b/deps/v8/src/base/platform/platform-aix.cc @@ -82,7 +82,7 @@ double AIXTimezoneCache::LocalTimeOffset(double time_ms, bool is_utc) { TimezoneCache* OS::CreateTimezoneCache() { return new AIXTimezoneCache(); } static unsigned StringToLong(char* buffer) { - return static_cast<unsigned>(strtol(buffer, nullptr, 16)); // NOLINT + return static_cast<unsigned>(strtol(buffer, nullptr, 16)); } std::vector<OS::SharedLibraryAddress> OS::GetSharedLibraryAddresses() { diff --git a/deps/v8/src/base/platform/platform-freebsd.cc b/deps/v8/src/base/platform/platform-freebsd.cc index edc793c662..ac36b0527e 100644 --- a/deps/v8/src/base/platform/platform-freebsd.cc +++ b/deps/v8/src/base/platform/platform-freebsd.cc @@ -44,7 +44,7 @@ TimezoneCache* OS::CreateTimezoneCache() { } static unsigned StringToLong(char* buffer) { - return static_cast<unsigned>(strtol(buffer, nullptr, 16)); // NOLINT + return static_cast<unsigned>(strtol(buffer, nullptr, 16)); } std::vector<OS::SharedLibraryAddress> OS::GetSharedLibraryAddresses() { diff --git a/deps/v8/src/base/platform/platform-posix.cc b/deps/v8/src/base/platform/platform-posix.cc index ee787f7d9a..9f61a0aeb5 100644 --- a/deps/v8/src/base/platform/platform-posix.cc +++ b/deps/v8/src/base/platform/platform-posix.cc @@ -23,12 +23,12 @@ #include <sys/types.h> #if defined(__APPLE__) || defined(__DragonFly__) || defined(__FreeBSD__) || \ defined(__NetBSD__) || defined(__OpenBSD__) -#include <sys/sysctl.h> // NOLINT, for sysctl +#include <sys/sysctl.h> // for sysctl #endif #if defined(ANDROID) && !defined(V8_ANDROID_LOG_STDOUT) #define LOG_TAG "v8" -#include <android/log.h> // NOLINT +#include <android/log.h> #endif #include <cmath> @@ -52,7 +52,7 @@ #endif #if V8_OS_LINUX -#include <sys/prctl.h> // NOLINT, for prctl +#include <sys/prctl.h> // for prctl #endif #if defined(V8_OS_FUCHSIA) @@ -82,7 +82,7 @@ extern int madvise(caddr_t, size_t, int); #endif #if defined(V8_LIBC_GLIBC) -extern "C" void* __libc_stack_end; // NOLINT +extern "C" void* __libc_stack_end; #endif namespace v8 { @@ -936,8 +936,7 @@ static void InitializeTlsBaseOffset() { buffer[kBufferSize - 1] = '\0'; char* period_pos = strchr(buffer, '.'); *period_pos = '\0'; - int kernel_version_major = - static_cast<int>(strtol(buffer, nullptr, 10)); // NOLINT + int kernel_version_major = static_cast<int>(strtol(buffer, nullptr, 10)); // The constants below are taken from pthreads.s from the XNU kernel // sources archive at www.opensource.apple.com. if (kernel_version_major < 11) { diff --git a/deps/v8/src/base/platform/platform-win32.cc b/deps/v8/src/base/platform/platform-win32.cc index 50da60c72f..9fbb257076 100644 --- a/deps/v8/src/base/platform/platform-win32.cc +++ b/deps/v8/src/base/platform/platform-win32.cc @@ -30,7 +30,7 @@ #include <VersionHelpers.h> #if defined(_MSC_VER) -#include <crtdbg.h> // NOLINT +#include <crtdbg.h> #endif // defined(_MSC_VER) // Extra functions for MinGW. Most of these are the _s functions which are in diff --git a/deps/v8/src/base/platform/semaphore.h b/deps/v8/src/base/platform/semaphore.h index 83a7a3392f..ec107bd290 100644 --- a/deps/v8/src/base/platform/semaphore.h +++ b/deps/v8/src/base/platform/semaphore.h @@ -12,9 +12,9 @@ #endif #if V8_OS_MACOSX -#include <dispatch/dispatch.h> // NOLINT +#include <dispatch/dispatch.h> #elif V8_OS_POSIX -#include <semaphore.h> // NOLINT +#include <semaphore.h> #endif #if V8_OS_STARBOARD diff --git a/deps/v8/src/base/sanitizer/asan.h b/deps/v8/src/base/sanitizer/asan.h new file mode 100644 index 0000000000..291006d58c --- /dev/null +++ b/deps/v8/src/base/sanitizer/asan.h @@ -0,0 +1,37 @@ +// Copyright 2018 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// AddressSanitizer support. + +#ifndef V8_BASE_SANITIZER_ASAN_H_ +#define V8_BASE_SANITIZER_ASAN_H_ + +#include <type_traits> + +#include "src/base/macros.h" + +#ifdef V8_USE_ADDRESS_SANITIZER + +#include <sanitizer/asan_interface.h> + +#if !defined(ASAN_POISON_MEMORY_REGION) || !defined(ASAN_UNPOISON_MEMORY_REGION) +#error \ + "ASAN_POISON_MEMORY_REGION and ASAN_UNPOISON_MEMORY_REGION must be defined" +#endif + +#else // !V8_USE_ADDRESS_SANITIZER + +#define ASAN_POISON_MEMORY_REGION(start, size) \ + static_assert(std::is_pointer<decltype(start)>::value, \ + "static type violation"); \ + static_assert(std::is_convertible<decltype(size), size_t>::value, \ + "static type violation"); \ + USE(start, size) + +#define ASAN_UNPOISON_MEMORY_REGION(start, size) \ + ASAN_POISON_MEMORY_REGION(start, size) + +#endif // !V8_USE_ADDRESS_SANITIZER + +#endif // V8_BASE_SANITIZER_ASAN_H_ diff --git a/deps/v8/src/sanitizer/lsan-page-allocator.cc b/deps/v8/src/base/sanitizer/lsan-page-allocator.cc index 7794e0b734..bb52eb368f 100644 --- a/deps/v8/src/sanitizer/lsan-page-allocator.cc +++ b/deps/v8/src/base/sanitizer/lsan-page-allocator.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "src/sanitizer/lsan-page-allocator.h" +#include "src/base/sanitizer/lsan-page-allocator.h" #include "include/v8-platform.h" #include "src/base/logging.h" diff --git a/deps/v8/src/sanitizer/lsan-page-allocator.h b/deps/v8/src/base/sanitizer/lsan-page-allocator.h index f86ffd98e8..4c8a1f04a0 100644 --- a/deps/v8/src/sanitizer/lsan-page-allocator.h +++ b/deps/v8/src/base/sanitizer/lsan-page-allocator.h @@ -2,10 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef V8_SANITIZER_LSAN_PAGE_ALLOCATOR_H_ -#define V8_SANITIZER_LSAN_PAGE_ALLOCATOR_H_ +#ifndef V8_BASE_SANITIZER_LSAN_PAGE_ALLOCATOR_H_ +#define V8_BASE_SANITIZER_LSAN_PAGE_ALLOCATOR_H_ #include "include/v8-platform.h" +#include "src/base/base-export.h" #include "src/base/compiler-specific.h" namespace v8 { @@ -14,7 +15,7 @@ namespace base { // This is a v8::PageAllocator implementation that decorates provided page // allocator object with leak sanitizer notifications when LEAK_SANITIZER // is defined. -class LsanPageAllocator : public v8::PageAllocator { +class V8_BASE_EXPORT LsanPageAllocator : public v8::PageAllocator { public: explicit LsanPageAllocator(v8::PageAllocator* page_allocator); ~LsanPageAllocator() override = default; @@ -56,4 +57,4 @@ class LsanPageAllocator : public v8::PageAllocator { } // namespace base } // namespace v8 -#endif // V8_SANITIZER_LSAN_PAGE_ALLOCATOR_H_ +#endif // V8_BASE_SANITIZER_LSAN_PAGE_ALLOCATOR_H_ diff --git a/deps/v8/src/base/lsan.h b/deps/v8/src/base/sanitizer/lsan.h index fd9bbd21c1..2d7dcd7f68 100644 --- a/deps/v8/src/base/lsan.h +++ b/deps/v8/src/base/sanitizer/lsan.h @@ -4,14 +4,16 @@ // LeakSanitizer support. -#ifndef V8_BASE_LSAN_H_ -#define V8_BASE_LSAN_H_ +#ifndef V8_BASE_SANITIZER_LSAN_H_ +#define V8_BASE_SANITIZER_LSAN_H_ #include <type_traits> -// There is no compile time flag for LSan, to enable this whenever ASan is +#include "src/base/macros.h" + +// There is no compile time flag for LSan, so enable this whenever ASan is // enabled. Note that LSan can be used as part of ASan with 'detect_leaks=1'. -// On windows, LSan is not implemented yet, so disable it there. +// On Windows, LSan is not implemented yet, so disable it there. #if defined(V8_USE_ADDRESS_SANITIZER) && !defined(V8_OS_WIN) #include <sanitizer/lsan_interface.h> @@ -26,4 +28,4 @@ #endif // defined(V8_USE_ADDRESS_SANITIZER) && !defined(V8_OS_WIN) -#endif // V8_BASE_LSAN_H_ +#endif // V8_BASE_SANITIZER_LSAN_H_ diff --git a/deps/v8/src/base/sanitizer/msan.h b/deps/v8/src/base/sanitizer/msan.h new file mode 100644 index 0000000000..e15208efaf --- /dev/null +++ b/deps/v8/src/base/sanitizer/msan.h @@ -0,0 +1,40 @@ +// Copyright 2013 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// MemorySanitizer support. + +#ifndef V8_BASE_SANITIZER_MSAN_H_ +#define V8_BASE_SANITIZER_MSAN_H_ + +#include "src/base/macros.h" +#include "src/base/memory.h" + +#ifdef V8_USE_MEMORY_SANITIZER + +#include <sanitizer/msan_interface.h> + +// Marks a memory range as uninitialized, as if it was allocated here. +#define MSAN_ALLOCATED_UNINITIALIZED_MEMORY(start, size) \ + __msan_allocated_memory(reinterpret_cast<const void*>(start), (size)) + +// Marks a memory range as initialized. +#define MSAN_MEMORY_IS_INITIALIZED(start, size) \ + __msan_unpoison(reinterpret_cast<const void*>(start), (size)) + +#else // !V8_USE_MEMORY_SANITIZER + +#define MSAN_ALLOCATED_UNINITIALIZED_MEMORY(start, size) \ + static_assert((std::is_pointer<decltype(start)>::value || \ + std::is_same<v8::base::Address, decltype(start)>::value), \ + "static type violation"); \ + static_assert(std::is_convertible<decltype(size), size_t>::value, \ + "static type violation"); \ + USE(start, size) + +#define MSAN_MEMORY_IS_INITIALIZED(start, size) \ + MSAN_ALLOCATED_UNINITIALIZED_MEMORY(start, size) + +#endif // V8_USE_MEMORY_SANITIZER + +#endif // V8_BASE_SANITIZER_MSAN_H_ diff --git a/deps/v8/src/base/small-vector.h b/deps/v8/src/base/small-vector.h index c337b9052d..b087d44be4 100644 --- a/deps/v8/src/base/small-vector.h +++ b/deps/v8/src/base/small-vector.h @@ -154,6 +154,13 @@ class SmallVector { base::bits::RoundUpToPowerOfTwo(std::max(min_capacity, 2 * capacity())); T* new_storage = reinterpret_cast<T*>(base::Malloc(sizeof(T) * new_capacity)); + if (new_storage == nullptr) { + // Should be: V8::FatalProcessOutOfMemory, but we don't include V8 from + // base. The message is intentionally the same as FatalProcessOutOfMemory + // since that will help fuzzers and chromecrash to categorize such + // crashes appropriately. + FATAL("Fatal process out of memory: base::SmallVector::Grow"); + } base::Memcpy(new_storage, begin_, sizeof(T) * in_use); if (is_big()) base::Free(begin_); begin_ = new_storage; diff --git a/deps/v8/src/base/template-utils.h b/deps/v8/src/base/template-utils.h index 4f082845d9..f222593e2d 100644 --- a/deps/v8/src/base/template-utils.h +++ b/deps/v8/src/base/template-utils.h @@ -98,6 +98,15 @@ struct make_void { template <class... Ts> using void_t = typename make_void<Ts...>::type; +// Corresponds to C++17's std::conjunction +template <class...> +struct conjunction : std::true_type {}; +template <class B> +struct conjunction<B> : B {}; +template <class B, class... Bn> +struct conjunction<B, Bn...> + : std::conditional_t<bool(B::value), conjunction<Bn...>, B> {}; + } // namespace base } // namespace v8 diff --git a/deps/v8/src/base/v8-fallthrough.h b/deps/v8/src/base/v8-fallthrough.h index f61238de06..a6dc6972d6 100644 --- a/deps/v8/src/base/v8-fallthrough.h +++ b/deps/v8/src/base/v8-fallthrough.h @@ -13,7 +13,7 @@ // So do not include this header in any of v8's public headers -- only // use it in src/, not in include/. #if defined(__clang__) -#define V8_FALLTHROUGH [[clang::fallthrough]] // NOLINT(whitespace/braces) +#define V8_FALLTHROUGH [[clang::fallthrough]] #else #define V8_FALLTHROUGH #endif diff --git a/deps/v8/src/base/vlq.h b/deps/v8/src/base/vlq.h index baeb5b9430..96ee42cf6e 100644 --- a/deps/v8/src/base/vlq.h +++ b/deps/v8/src/base/vlq.h @@ -14,60 +14,95 @@ namespace v8 { namespace base { static constexpr uint32_t kContinueShift = 7; -static constexpr uint32_t kContinueMask = 1 << kContinueShift; -static constexpr uint32_t kDataMask = kContinueMask - 1; +static constexpr uint32_t kContinueBit = 1 << kContinueShift; +static constexpr uint32_t kDataMask = kContinueBit - 1; // Encodes an unsigned value using variable-length encoding and stores it using -// the passed process_byte function. -inline void VLQEncodeUnsigned(const std::function<void(byte)>& process_byte, - uint32_t value) { - bool has_next; +// the passed process_byte function. The function should return a pointer to +// the byte that was written, so that VLQEncodeUnsigned can mutate it after +// writing it. +template <typename Function> +inline typename std::enable_if< + std::is_same<decltype(std::declval<Function>()(0)), byte*>::value, + void>::type +VLQEncodeUnsigned(Function&& process_byte, uint32_t value) { + byte* written_byte = process_byte(value); + if (value <= kDataMask) { + // Value fits in first byte, early return. + return; + } do { - byte cur_byte = value & kDataMask; + // Turn on continuation bit in the byte we just wrote. + *written_byte |= kContinueBit; value >>= kContinueShift; - has_next = value != 0; - // The most significant bit is set when we are not done with the value yet. - cur_byte |= static_cast<uint32_t>(has_next) << kContinueShift; - process_byte(cur_byte); - } while (has_next); + written_byte = process_byte(value); + } while (value > kDataMask); } // Encodes value using variable-length encoding and stores it using the passed // process_byte function. -inline void VLQEncode(const std::function<void(byte)>& process_byte, - int32_t value) { +template <typename Function> +inline typename std::enable_if< + std::is_same<decltype(std::declval<Function>()(0)), byte*>::value, + void>::type +VLQEncode(Function&& process_byte, int32_t value) { // This wouldn't handle kMinInt correctly if it ever encountered it. DCHECK_NE(value, std::numeric_limits<int32_t>::min()); bool is_negative = value < 0; // Encode sign in least significant bit. uint32_t bits = static_cast<uint32_t>((is_negative ? -value : value) << 1) | static_cast<uint32_t>(is_negative); - VLQEncodeUnsigned(process_byte, bits); + VLQEncodeUnsigned(std::forward<Function>(process_byte), bits); } // Wrapper of VLQEncode for std::vector backed storage containers. template <typename A> inline void VLQEncode(std::vector<byte, A>* data, int32_t value) { - VLQEncode([data](byte value) { data->push_back(value); }, value); + VLQEncode( + [data](byte value) { + data->push_back(value); + return &data->back(); + }, + value); } // Wrapper of VLQEncodeUnsigned for std::vector backed storage containers. template <typename A> inline void VLQEncodeUnsigned(std::vector<byte, A>* data, uint32_t value) { - VLQEncodeUnsigned([data](byte value) { data->push_back(value); }, value); + VLQEncodeUnsigned( + [data](byte value) { + data->push_back(value); + return &data->back(); + }, + value); +} + +// Decodes a variable-length encoded unsigned value from bytes returned by +// successive calls to the given function. +template <typename GetNextFunction> +inline typename std::enable_if< + std::is_same<decltype(std::declval<GetNextFunction>()()), byte>::value, + uint32_t>::type +VLQDecodeUnsigned(GetNextFunction&& get_next) { + byte cur_byte = get_next(); + // Single byte fast path; no need to mask. + if (cur_byte <= kDataMask) { + return cur_byte; + } + uint32_t bits = cur_byte & kDataMask; + for (int shift = kContinueShift; shift <= 32; shift += kContinueShift) { + byte cur_byte = get_next(); + bits |= (cur_byte & kDataMask) << shift; + if (cur_byte <= kDataMask) break; + } + return bits; } // Decodes a variable-length encoded unsigned value stored in contiguous memory // starting at data_start + index, updating index to where the next encoded // value starts. inline uint32_t VLQDecodeUnsigned(byte* data_start, int* index) { - uint32_t bits = 0; - for (int shift = 0; true; shift += kContinueShift) { - byte cur_byte = data_start[(*index)++]; - bits += (cur_byte & kDataMask) << shift; - if ((cur_byte & kContinueMask) == 0) break; - } - return bits; + return VLQDecodeUnsigned([&] { return data_start[(*index)++]; }); } // Decodes a variable-length encoded value stored in contiguous memory starting diff --git a/deps/v8/src/baseline/arm/baseline-assembler-arm-inl.h b/deps/v8/src/baseline/arm/baseline-assembler-arm-inl.h index eca2b47cc0..bfccef90f8 100644 --- a/deps/v8/src/baseline/arm/baseline-assembler-arm-inl.h +++ b/deps/v8/src/baseline/arm/baseline-assembler-arm-inl.h @@ -124,7 +124,7 @@ void BaselineAssembler::CallBuiltin(Builtins::Name builtin) { Register temp = temps.AcquireScratch(); __ LoadEntryFromBuiltinIndex(builtin, temp); __ Call(temp); - if (FLAG_code_comments) __ RecordComment("]"); + __ RecordComment("]"); } void BaselineAssembler::TailCallBuiltin(Builtins::Name builtin) { @@ -133,7 +133,7 @@ void BaselineAssembler::TailCallBuiltin(Builtins::Name builtin) { Register temp = temps.AcquireScratch(); __ LoadEntryFromBuiltinIndex(builtin, temp); __ Jump(temp); - if (FLAG_code_comments) __ RecordComment("]"); + __ RecordComment("]"); } void BaselineAssembler::Test(Register value, int mask) { @@ -151,7 +151,7 @@ void BaselineAssembler::CmpInstanceType(Register map, InstanceType instance_type) { ScratchRegisterScope temps(this); Register type = temps.AcquireScratch(); - if (emit_debug_code()) { + if (FLAG_debug_code) { __ AssertNotSmi(map); __ CompareObjectType(map, type, type, MAP_TYPE); __ Assert(eq, AbortReason::kUnexpectedValue); @@ -198,10 +198,10 @@ void BaselineAssembler::Move(MemOperand output, Register source) { __ str(source, output); } void BaselineAssembler::Move(Register output, ExternalReference reference) { - __ mov(output, Operand(reference)); + __ Move32BitImmediate(output, Operand(reference)); } void BaselineAssembler::Move(Register output, Handle<HeapObject> value) { - __ mov(output, Operand(value)); + __ Move32BitImmediate(output, Operand(value)); } void BaselineAssembler::Move(Register output, int32_t value) { __ mov(output, Operand(value)); @@ -351,7 +351,7 @@ void BaselineAssembler::StoreTaggedFieldWithWriteBarrier(Register target, Register value) { __ str(value, FieldMemOperand(target, offset)); __ RecordWriteField(target, offset, value, kLRHasNotBeenSaved, - kDontSaveFPRegs); + SaveFPRegsMode::kIgnore); } void BaselineAssembler::StoreTaggedFieldNoWriteBarrier(Register target, int offset, diff --git a/deps/v8/src/baseline/arm/baseline-compiler-arm-inl.h b/deps/v8/src/baseline/arm/baseline-compiler-arm-inl.h index ff2b6d1a83..d7f0a606d3 100644 --- a/deps/v8/src/baseline/arm/baseline-compiler-arm-inl.h +++ b/deps/v8/src/baseline/arm/baseline-compiler-arm-inl.h @@ -19,9 +19,9 @@ void BaselineCompiler::Prologue() { __ masm()->EnterFrame(StackFrame::BASELINE); DCHECK_EQ(kJSFunctionRegister, kJavaScriptCallTargetRegister); int max_frame_size = bytecode_->frame_size() + max_call_args_; - CallBuiltin(Builtins::kBaselineOutOfLinePrologue, kContextRegister, - kJSFunctionRegister, kJavaScriptCallArgCountRegister, - max_frame_size, kJavaScriptCallNewTargetRegister, bytecode_); + CallBuiltin<Builtins::kBaselineOutOfLinePrologue>( + kContextRegister, kJSFunctionRegister, kJavaScriptCallArgCountRegister, + max_frame_size, kJavaScriptCallNewTargetRegister, bytecode_); PrologueFillFrame(); } diff --git a/deps/v8/src/baseline/arm64/baseline-assembler-arm64-inl.h b/deps/v8/src/baseline/arm64/baseline-assembler-arm64-inl.h index 27b7c2b2d8..63e90df4d6 100644 --- a/deps/v8/src/baseline/arm64/baseline-assembler-arm64-inl.h +++ b/deps/v8/src/baseline/arm64/baseline-assembler-arm64-inl.h @@ -167,7 +167,7 @@ void BaselineAssembler::CmpInstanceType(Register map, InstanceType instance_type) { ScratchRegisterScope temps(this); Register type = temps.AcquireScratch(); - if (emit_debug_code()) { + if (FLAG_debug_code) { __ AssertNotSmi(map); __ CompareObjectType(map, type, type, MAP_TYPE); __ Assert(eq, AbortReason::kUnexpectedValue); @@ -422,7 +422,7 @@ void BaselineAssembler::StoreTaggedFieldWithWriteBarrier(Register target, Register value) { __ StoreTaggedField(value, FieldMemOperand(target, offset)); __ RecordWriteField(target, offset, value, kLRHasNotBeenSaved, - kDontSaveFPRegs); + SaveFPRegsMode::kIgnore); } void BaselineAssembler::StoreTaggedFieldNoWriteBarrier(Register target, int offset, diff --git a/deps/v8/src/baseline/arm64/baseline-compiler-arm64-inl.h b/deps/v8/src/baseline/arm64/baseline-compiler-arm64-inl.h index e567be41d2..0807c5434a 100644 --- a/deps/v8/src/baseline/arm64/baseline-compiler-arm64-inl.h +++ b/deps/v8/src/baseline/arm64/baseline-compiler-arm64-inl.h @@ -18,9 +18,9 @@ void BaselineCompiler::Prologue() { __ masm()->EnterFrame(StackFrame::BASELINE); DCHECK_EQ(kJSFunctionRegister, kJavaScriptCallTargetRegister); int max_frame_size = bytecode_->frame_size() + max_call_args_; - CallBuiltin(Builtins::kBaselineOutOfLinePrologue, kContextRegister, - kJSFunctionRegister, kJavaScriptCallArgCountRegister, - max_frame_size, kJavaScriptCallNewTargetRegister, bytecode_); + CallBuiltin<Builtins::kBaselineOutOfLinePrologue>( + kContextRegister, kJSFunctionRegister, kJavaScriptCallArgCountRegister, + max_frame_size, kJavaScriptCallNewTargetRegister, bytecode_); __ masm()->AssertSpAligned(); PrologueFillFrame(); diff --git a/deps/v8/src/baseline/baseline-assembler-inl.h b/deps/v8/src/baseline/baseline-assembler-inl.h index 8fd54d63a2..401062517f 100644 --- a/deps/v8/src/baseline/baseline-assembler-inl.h +++ b/deps/v8/src/baseline/baseline-assembler-inl.h @@ -8,12 +8,13 @@ // TODO(v8:11421): Remove #if once baseline compiler is ported to other // architectures. #if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_ARM64 || \ - V8_TARGET_ARCH_ARM + V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_RISCV64 #include <type_traits> #include <unordered_map> #include "src/baseline/baseline-assembler.h" +#include "src/codegen/interface-descriptors-inl.h" #include "src/interpreter/bytecode-register.h" #include "src/objects/feedback-cell.h" #include "src/objects/js-function.h" @@ -27,6 +28,8 @@ #include "src/baseline/ia32/baseline-assembler-ia32-inl.h" #elif V8_TARGET_ARCH_ARM #include "src/baseline/arm/baseline-assembler-arm-inl.h" +#elif V8_TARGET_ARCH_RISCV64 +#include "src/baseline/riscv64/baseline-assembler-riscv64-inl.h" #else #error Unsupported target architecture. #endif @@ -41,10 +44,10 @@ void BaselineAssembler::GetCode(Isolate* isolate, CodeDesc* desc) { __ GetCode(isolate, desc); } int BaselineAssembler::pc_offset() const { return __ pc_offset(); } -bool BaselineAssembler::emit_debug_code() const { return __ emit_debug_code(); } void BaselineAssembler::CodeEntry() const { __ CodeEntry(); } void BaselineAssembler::ExceptionHandler() const { __ ExceptionHandler(); } void BaselineAssembler::RecordComment(const char* string) { + if (!FLAG_code_comments) return; __ RecordComment(string); } void BaselineAssembler::Trap() { __ Trap(); } diff --git a/deps/v8/src/baseline/baseline-assembler.h b/deps/v8/src/baseline/baseline-assembler.h index 38874d556f..7c46cd5e2c 100644 --- a/deps/v8/src/baseline/baseline-assembler.h +++ b/deps/v8/src/baseline/baseline-assembler.h @@ -8,7 +8,7 @@ // TODO(v8:11421): Remove #if once baseline compiler is ported to other // architectures. #if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_ARM64 || \ - V8_TARGET_ARCH_ARM + V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_RISCV64 #include "src/codegen/macro-assembler.h" #include "src/objects/tagged-index.h" @@ -32,10 +32,9 @@ class BaselineAssembler { inline void GetCode(Isolate* isolate, CodeDesc* desc); inline int pc_offset() const; - inline bool emit_debug_code() const; inline void CodeEntry() const; inline void ExceptionHandler() const; - inline void RecordComment(const char* string); + V8_INLINE void RecordComment(const char* string); inline void Trap(); inline void DebugBreak(); diff --git a/deps/v8/src/baseline/baseline-compiler.cc b/deps/v8/src/baseline/baseline-compiler.cc index 3d599c11fd..9c6e3f10e6 100644 --- a/deps/v8/src/baseline/baseline-compiler.cc +++ b/deps/v8/src/baseline/baseline-compiler.cc @@ -4,8 +4,9 @@ // TODO(v8:11421): Remove #if once baseline compiler is ported to other // architectures. +#include "src/base/bits.h" #if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_ARM64 || \ - V8_TARGET_ARCH_ARM + V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_RISCV64 #include "src/baseline/baseline-compiler.h" @@ -19,7 +20,7 @@ #include "src/builtins/builtins.h" #include "src/codegen/assembler.h" #include "src/codegen/compiler.h" -#include "src/codegen/interface-descriptors.h" +#include "src/codegen/interface-descriptors-inl.h" #include "src/codegen/machine-type.h" #include "src/codegen/macro-assembler-inl.h" #include "src/common/globals.h" @@ -40,6 +41,8 @@ #include "src/baseline/ia32/baseline-compiler-ia32-inl.h" #elif V8_TARGET_ARCH_ARM #include "src/baseline/arm/baseline-compiler-arm-inl.h" +#elif V8_TARGET_ARCH_RISCV64 +#include "src/baseline/riscv64/baseline-compiler-riscv64-inl.h" #else #error Unsupported target architecture. #endif @@ -48,9 +51,9 @@ namespace v8 { namespace internal { namespace baseline { -template <typename LocalIsolate> +template <typename IsolateT> Handle<ByteArray> BytecodeOffsetTableBuilder::ToBytecodeOffsetTable( - LocalIsolate* isolate) { + IsolateT* isolate) { if (bytes_.empty()) return isolate->factory()->empty_byte_array(); Handle<ByteArray> table = isolate->factory()->NewByteArray( static_cast<int>(bytes_.size()), AllocationType::kOld); @@ -68,6 +71,7 @@ bool Clobbers(Register target, TaggedIndex index) { return false; } bool Clobbers(Register target, int32_t imm) { return false; } bool Clobbers(Register target, RootIndex index) { return false; } bool Clobbers(Register target, interpreter::Register reg) { return false; } +bool Clobbers(Register target, interpreter::RegisterList list) { return false; } // We don't know what's inside machine registers or operands, so assume they // match. @@ -97,134 +101,151 @@ bool MachineTypeMatches(MachineType type, interpreter::Register reg) { return type.IsTagged(); } -template <typename... Args> +template <typename Descriptor, typename... Args> struct CheckArgsHelper; -template <> -struct CheckArgsHelper<> { - static void Check(BaselineAssembler* masm, CallInterfaceDescriptor descriptor, - int i) { - if (descriptor.AllowVarArgs()) { - CHECK_GE(i, descriptor.GetParameterCount()); +template <typename Descriptor> +struct CheckArgsHelper<Descriptor> { + static void Check(BaselineAssembler* masm, int i) { + if (Descriptor::AllowVarArgs()) { + CHECK_GE(i, Descriptor::GetParameterCount()); } else { - CHECK_EQ(i, descriptor.GetParameterCount()); + CHECK_EQ(i, Descriptor::GetParameterCount()); } } }; -template <typename Arg, typename... Args> -struct CheckArgsHelper<Arg, Args...> { - static void Check(BaselineAssembler* masm, CallInterfaceDescriptor descriptor, - int i, Arg arg, Args... args) { - if (i >= descriptor.GetParameterCount()) { - CHECK(descriptor.AllowVarArgs()); +template <typename Descriptor, typename Arg, typename... Args> +struct CheckArgsHelper<Descriptor, Arg, Args...> { + static void Check(BaselineAssembler* masm, int i, Arg arg, Args... args) { + if (i >= Descriptor::GetParameterCount()) { + CHECK(Descriptor::AllowVarArgs()); return; } - CHECK(MachineTypeMatches(descriptor.GetParameterType(i), arg)); - CheckArgsHelper<Args...>::Check(masm, descriptor, i + 1, args...); + CHECK(MachineTypeMatches(Descriptor().GetParameterType(i), arg)); + CheckArgsHelper<Descriptor, Args...>::Check(masm, i + 1, args...); } }; -template <typename... Args> -struct CheckArgsHelper<interpreter::RegisterList, Args...> { - static void Check(BaselineAssembler* masm, CallInterfaceDescriptor descriptor, - int i, interpreter::RegisterList list, Args... args) { +template <typename Descriptor, typename... Args> +struct CheckArgsHelper<Descriptor, interpreter::RegisterList, Args...> { + static void Check(BaselineAssembler* masm, int i, + interpreter::RegisterList list, Args... args) { for (int reg_index = 0; reg_index < list.register_count(); ++reg_index, ++i) { - if (i >= descriptor.GetParameterCount()) { - CHECK(descriptor.AllowVarArgs()); + if (i >= Descriptor::GetParameterCount()) { + CHECK(Descriptor::AllowVarArgs()); return; } - CHECK( - MachineTypeMatches(descriptor.GetParameterType(i), list[reg_index])); + CHECK(MachineTypeMatches(Descriptor().GetParameterType(i), + list[reg_index])); } - CheckArgsHelper<Args...>::Check(masm, descriptor, i, args...); + CheckArgsHelper<Descriptor, Args...>::Check(masm, i, args...); } }; -template <typename... Args> -void CheckArgs(BaselineAssembler* masm, CallInterfaceDescriptor descriptor, - Args... args) { - CheckArgsHelper<Args...>::Check(masm, descriptor, 0, args...); +template <typename Descriptor, typename... Args> +void CheckArgs(BaselineAssembler* masm, Args... args) { + CheckArgsHelper<Descriptor, Args...>::Check(masm, 0, args...); +} + +void CheckSettingDoesntClobber(Register target) {} +template <typename Arg, typename... Args> +void CheckSettingDoesntClobber(Register target, Arg arg, Args... args) { + DCHECK(!Clobbers(target, arg)); + CheckSettingDoesntClobber(target, args...); } #else // DEBUG -template <typename... Args> +template <typename Descriptor, typename... Args> void CheckArgs(Args... args) {} +template <typename... Args> +void CheckSettingDoesntClobber(Register target, Args... args) {} + #endif // DEBUG -template <typename... Args> +template <typename Descriptor, int ArgIndex, bool kIsRegister, typename... Args> struct ArgumentSettingHelper; -template <> -struct ArgumentSettingHelper<> { - static void Set(BaselineAssembler* masm, CallInterfaceDescriptor descriptor, - int i) {} - static void CheckSettingDoesntClobber(Register target, int arg_index) {} +template <typename Descriptor, int ArgIndex, bool kIsRegister> +struct ArgumentSettingHelper<Descriptor, ArgIndex, kIsRegister> { + static void Set(BaselineAssembler* masm) { + // Should only ever be called for the end of register arguments. + STATIC_ASSERT(ArgIndex == Descriptor::GetRegisterParameterCount()); + } }; -template <typename Arg, typename... Args> -struct ArgumentSettingHelper<Arg, Args...> { - static void Set(BaselineAssembler* masm, CallInterfaceDescriptor descriptor, - int i, Arg arg, Args... args) { - if (i < descriptor.GetRegisterParameterCount()) { - Register target = descriptor.GetRegisterParameter(i); - ArgumentSettingHelper<Args...>::CheckSettingDoesntClobber(target, i + 1, - args...); - masm->Move(target, arg); - ArgumentSettingHelper<Args...>::Set(masm, descriptor, i + 1, args...); - } else if (descriptor.GetStackArgumentOrder() == - StackArgumentOrder::kDefault) { - masm->Push(arg, args...); - } else { - masm->PushReverse(arg, args...); - } +template <typename Descriptor, int ArgIndex, typename Arg, typename... Args> +struct ArgumentSettingHelper<Descriptor, ArgIndex, true, Arg, Args...> { + static void Set(BaselineAssembler* masm, Arg arg, Args... args) { + STATIC_ASSERT(ArgIndex < Descriptor::GetRegisterParameterCount()); + Register target = Descriptor::GetRegisterParameter(ArgIndex); + CheckSettingDoesntClobber(target, args...); + masm->Move(target, arg); + ArgumentSettingHelper<Descriptor, ArgIndex + 1, + (ArgIndex + 1 < + Descriptor::GetRegisterParameterCount()), + Args...>::Set(masm, args...); } - static void CheckSettingDoesntClobber(Register target, int arg_index, Arg arg, - Args... args) { - DCHECK(!Clobbers(target, arg)); - ArgumentSettingHelper<Args...>::CheckSettingDoesntClobber( - target, arg_index + 1, args...); +}; + +template <typename Descriptor, int ArgIndex> +struct ArgumentSettingHelper<Descriptor, ArgIndex, true, + interpreter::RegisterList> { + static void Set(BaselineAssembler* masm, interpreter::RegisterList list) { + STATIC_ASSERT(ArgIndex < Descriptor::GetRegisterParameterCount()); + DCHECK_EQ(ArgIndex + list.register_count(), + Descriptor::GetRegisterParameterCount()); + for (int i = 0; ArgIndex + i < Descriptor::GetRegisterParameterCount(); + ++i) { + Register target = Descriptor::GetRegisterParameter(ArgIndex + i); + masm->Move(target, masm->RegisterFrameOperand(list[i])); + } } }; -// Specialization for interpreter::RegisterList which iterates it. -// RegisterLists are only allowed to be the last argument. -template <> -struct ArgumentSettingHelper<interpreter::RegisterList> { - static void Set(BaselineAssembler* masm, CallInterfaceDescriptor descriptor, - int i, interpreter::RegisterList list) { - // Either all the values are in machine registers, or they're all on the - // stack. - if (i < descriptor.GetRegisterParameterCount()) { - for (int reg_index = 0; reg_index < list.register_count(); - ++reg_index, ++i) { - Register target = descriptor.GetRegisterParameter(i); - masm->Move(target, masm->RegisterFrameOperand(list[reg_index])); - } - } else if (descriptor.GetStackArgumentOrder() == - StackArgumentOrder::kDefault) { - masm->Push(list); +template <typename Descriptor, int ArgIndex, typename Arg, typename... Args> +struct ArgumentSettingHelper<Descriptor, ArgIndex, false, Arg, Args...> { + static void Set(BaselineAssembler* masm, Arg arg, Args... args) { + if (Descriptor::kStackArgumentOrder == StackArgumentOrder::kDefault) { + masm->Push(arg, args...); } else { - masm->PushReverse(list); + masm->PushReverse(arg, args...); } } - static void CheckSettingDoesntClobber(Register target, int arg_index, - interpreter::RegisterList arg) {} }; -template <typename... Args> -void MoveArgumentsForDescriptor(BaselineAssembler* masm, - CallInterfaceDescriptor descriptor, - Args... args) { - CheckArgs(masm, descriptor, args...); - ArgumentSettingHelper<Args...>::Set(masm, descriptor, 0, args...); +template <Builtins::Name kBuiltin, typename... Args> +void MoveArgumentsForBuiltin(BaselineAssembler* masm, Args... args) { + using Descriptor = typename CallInterfaceDescriptorFor<kBuiltin>::type; + CheckArgs<Descriptor>(masm, args...); + ArgumentSettingHelper<Descriptor, 0, + (0 < Descriptor::GetRegisterParameterCount()), + Args...>::Set(masm, args...); + if (Descriptor::HasContextParameter()) { + masm->LoadContext(Descriptor::ContextRegister()); + } } } // namespace detail +namespace { +// Rough upper-bound estimate. Copying the data is most likely more expensive +// than pre-allocating a large enough buffer. +#ifdef V8_TARGET_ARCH_IA32 +const int kAverageBytecodeToInstructionRatio = 5; +#else +const int kAverageBytecodeToInstructionRatio = 7; +#endif +std::unique_ptr<AssemblerBuffer> AllocateBuffer( + Handle<BytecodeArray> bytecodes) { + int estimated_size = bytecodes->length() * kAverageBytecodeToInstructionRatio; + return NewAssemblerBuffer(RoundUp(estimated_size, 4 * KB)); +} +} // namespace + BaselineCompiler::BaselineCompiler( Isolate* isolate, Handle<SharedFunctionInfo> shared_function_info, Handle<BytecodeArray> bytecode) @@ -232,20 +253,26 @@ BaselineCompiler::BaselineCompiler( stats_(isolate->counters()->runtime_call_stats()), shared_function_info_(shared_function_info), bytecode_(bytecode), - masm_(isolate, CodeObjectRequired::kNo), + masm_(isolate, CodeObjectRequired::kNo, AllocateBuffer(bytecode)), basm_(&masm_), iterator_(bytecode_), zone_(isolate->allocator(), ZONE_NAME), labels_(zone_.NewArray<BaselineLabels*>(bytecode_->length())) { MemsetPointer(labels_, nullptr, bytecode_->length()); + + // Empirically determined expected size of the offset table at the 95th %ile, + // based on the size of the bytecode, to be: + // + // 16 + (bytecode size) / 4 + bytecode_offset_table_builder_.Reserve( + base::bits::RoundUpToPowerOfTwo(16 + bytecode_->Size() / 4)); } #define __ basm_. void BaselineCompiler::GenerateCode() { { - RuntimeCallTimerScope runtimeTimer( - stats_, RuntimeCallCounterId::kCompileBaselinePreVisit); + RCS_SCOPE(stats_, RuntimeCallCounterId::kCompileBaselinePreVisit); for (; !iterator_.done(); iterator_.Advance()) { PreVisitSingleBytecode(); } @@ -257,8 +284,7 @@ void BaselineCompiler::GenerateCode() { __ CodeEntry(); { - RuntimeCallTimerScope runtimeTimer( - stats_, RuntimeCallCounterId::kCompileBaselineVisit); + RCS_SCOPE(stats_, RuntimeCallCounterId::kCompileBaselineVisit); Prologue(); AddPosition(); for (; !iterator_.done(); iterator_.Advance()) { @@ -453,7 +479,7 @@ void BaselineCompiler::VisitSingleBytecode() { } void BaselineCompiler::VerifyFrame() { - if (__ emit_debug_code()) { + if (FLAG_debug_code) { __ RecordComment("[ Verify frame"); __ RecordComment(" -- Verify frame size"); VerifyFrameSize(); @@ -552,28 +578,18 @@ Label* BaselineCompiler::BuildForwardJumpLabel() { return &threaded_label->label; } -template <typename... Args> -void BaselineCompiler::CallBuiltin(Builtins::Name builtin, Args... args) { +template <Builtins::Name kBuiltin, typename... Args> +void BaselineCompiler::CallBuiltin(Args... args) { __ RecordComment("[ CallBuiltin"); - CallInterfaceDescriptor descriptor = - Builtins::CallInterfaceDescriptorFor(builtin); - detail::MoveArgumentsForDescriptor(&basm_, descriptor, args...); - if (descriptor.HasContextParameter()) { - __ LoadContext(descriptor.ContextRegister()); - } - __ CallBuiltin(builtin); + detail::MoveArgumentsForBuiltin<kBuiltin>(&basm_, args...); + __ CallBuiltin(kBuiltin); __ RecordComment("]"); } -template <typename... Args> -void BaselineCompiler::TailCallBuiltin(Builtins::Name builtin, Args... args) { - CallInterfaceDescriptor descriptor = - Builtins::CallInterfaceDescriptorFor(builtin); - detail::MoveArgumentsForDescriptor(&basm_, descriptor, args...); - if (descriptor.HasContextParameter()) { - __ LoadContext(descriptor.ContextRegister()); - } - __ TailCallBuiltin(builtin); +template <Builtins::Name kBuiltin, typename... Args> +void BaselineCompiler::TailCallBuiltin(Args... args) { + detail::MoveArgumentsForBuiltin<kBuiltin>(&basm_, args...); + __ TailCallBuiltin(kBuiltin); } template <typename... Args> @@ -584,27 +600,17 @@ void BaselineCompiler::CallRuntime(Runtime::FunctionId function, Args... args) { } // Returns into kInterpreterAccumulatorRegister -void BaselineCompiler::JumpIfToBoolean(bool do_jump_if_true, Register reg, - Label* label, Label::Distance distance) { - Label end; - Label::Distance end_distance = Label::kNear; - - Label* true_label = do_jump_if_true ? label : &end; - Label::Distance true_distance = do_jump_if_true ? distance : end_distance; - Label* false_label = do_jump_if_true ? &end : label; - Label::Distance false_distance = do_jump_if_true ? end_distance : distance; - - BaselineAssembler::ScratchRegisterScope scratch_scope(&basm_); - Register to_boolean = scratch_scope.AcquireScratch(); - { - SaveAccumulatorScope accumulator_scope(&basm_); - CallBuiltin(Builtins::kToBoolean, reg); - __ Move(to_boolean, kInterpreterAccumulatorRegister); - } - __ JumpIfRoot(to_boolean, RootIndex::kTrueValue, true_label, true_distance); - if (false_label != &end) __ Jump(false_label, false_distance); - - __ Bind(&end); +void BaselineCompiler::JumpIfToBoolean(bool do_jump_if_true, Label* label, + Label::Distance distance) { + CallBuiltin<Builtins::kToBooleanForBaselineJump>( + kInterpreterAccumulatorRegister); + // ToBooleanForBaselineJump returns the ToBoolean value into return reg 1, and + // the original value into kInterpreterAccumulatorRegister, so we don't have + // to worry about it getting clobbered. + STATIC_ASSERT(kReturnRegister0 == kInterpreterAccumulatorRegister); + __ Cmp(kReturnRegister1, Smi::FromInt(0)); + __ JumpIf(do_jump_if_true ? Condition::kNotEqual : Condition::kEqual, label, + distance); } void BaselineCompiler::VisitLdaZero() { @@ -641,22 +647,21 @@ void BaselineCompiler::VisitLdaConstant() { } void BaselineCompiler::VisitLdaGlobal() { - CallBuiltin(Builtins::kLoadGlobalICBaseline, - Constant<Name>(0), // name - IndexAsTagged(1)); // slot + CallBuiltin<Builtins::kLoadGlobalICBaseline>(Constant<Name>(0), // name + IndexAsTagged(1)); // slot } void BaselineCompiler::VisitLdaGlobalInsideTypeof() { - CallBuiltin(Builtins::kLoadGlobalICInsideTypeofBaseline, - Constant<Name>(0), // name - IndexAsTagged(1)); // slot + CallBuiltin<Builtins::kLoadGlobalICInsideTypeofBaseline>( + Constant<Name>(0), // name + IndexAsTagged(1)); // slot } void BaselineCompiler::VisitStaGlobal() { - CallBuiltin(Builtins::kStoreGlobalICBaseline, - Constant<Name>(0), // name - kInterpreterAccumulatorRegister, // value - IndexAsTagged(1)); // slot + CallBuiltin<Builtins::kStoreGlobalICBaseline>( + Constant<Name>(0), // name + kInterpreterAccumulatorRegister, // value + IndexAsTagged(1)); // slot } void BaselineCompiler::VisitPushContext() { @@ -730,13 +735,13 @@ void BaselineCompiler::VisitLdaLookupSlot() { } void BaselineCompiler::VisitLdaLookupContextSlot() { - CallBuiltin(Builtins::kLookupContextBaseline, Constant<Name>(0), - UintAsTagged(2), IndexAsTagged(1)); + CallBuiltin<Builtins::kLookupContextBaseline>( + Constant<Name>(0), UintAsTagged(2), IndexAsTagged(1)); } void BaselineCompiler::VisitLdaLookupGlobalSlot() { - CallBuiltin(Builtins::kLookupGlobalICBaseline, Constant<Name>(0), - UintAsTagged(2), IndexAsTagged(1)); + CallBuiltin<Builtins::kLookupGlobalICBaseline>( + Constant<Name>(0), UintAsTagged(2), IndexAsTagged(1)); } void BaselineCompiler::VisitLdaLookupSlotInsideTypeof() { @@ -744,13 +749,13 @@ void BaselineCompiler::VisitLdaLookupSlotInsideTypeof() { } void BaselineCompiler::VisitLdaLookupContextSlotInsideTypeof() { - CallBuiltin(Builtins::kLookupContextInsideTypeofBaseline, Constant<Name>(0), - UintAsTagged(2), IndexAsTagged(1)); + CallBuiltin<Builtins::kLookupContextInsideTypeofBaseline>( + Constant<Name>(0), UintAsTagged(2), IndexAsTagged(1)); } void BaselineCompiler::VisitLdaLookupGlobalSlotInsideTypeof() { - CallBuiltin(Builtins::kLookupGlobalICInsideTypeofBaseline, Constant<Name>(0), - UintAsTagged(2), IndexAsTagged(1)); + CallBuiltin<Builtins::kLookupGlobalICInsideTypeofBaseline>( + Constant<Name>(0), UintAsTagged(2), IndexAsTagged(1)); } void BaselineCompiler::VisitStaLookupSlot() { @@ -793,14 +798,13 @@ void BaselineCompiler::VisitMov() { } void BaselineCompiler::VisitLdaNamedProperty() { - CallBuiltin(Builtins::kLoadICBaseline, - RegisterOperand(0), // object - Constant<Name>(1), // name - IndexAsTagged(2)); // slot + CallBuiltin<Builtins::kLoadICBaseline>(RegisterOperand(0), // object + Constant<Name>(1), // name + IndexAsTagged(2)); // slot } void BaselineCompiler::VisitLdaNamedPropertyNoFeedback() { - CallBuiltin(Builtins::kGetProperty, RegisterOperand(0), Constant<Name>(1)); + CallBuiltin<Builtins::kGetProperty>(RegisterOperand(0), Constant<Name>(1)); } void BaselineCompiler::VisitLdaNamedPropertyFromSuper() { @@ -808,19 +812,19 @@ void BaselineCompiler::VisitLdaNamedPropertyFromSuper() { LoadWithReceiverAndVectorDescriptor::LookupStartObjectRegister(), kInterpreterAccumulatorRegister); - CallBuiltin(Builtins::kLoadSuperICBaseline, - RegisterOperand(0), // object - LoadWithReceiverAndVectorDescriptor:: - LookupStartObjectRegister(), // lookup start - Constant<Name>(1), // name - IndexAsTagged(2)); // slot + CallBuiltin<Builtins::kLoadSuperICBaseline>( + RegisterOperand(0), // object + LoadWithReceiverAndVectorDescriptor:: + LookupStartObjectRegister(), // lookup start + Constant<Name>(1), // name + IndexAsTagged(2)); // slot } void BaselineCompiler::VisitLdaKeyedProperty() { - CallBuiltin(Builtins::kKeyedLoadICBaseline, - RegisterOperand(0), // object - kInterpreterAccumulatorRegister, // key - IndexAsTagged(1)); // slot + CallBuiltin<Builtins::kKeyedLoadICBaseline>( + RegisterOperand(0), // object + kInterpreterAccumulatorRegister, // key + IndexAsTagged(1)); // slot } void BaselineCompiler::VisitLdaModuleVariable() { @@ -878,11 +882,11 @@ void BaselineCompiler::VisitStaModuleVariable() { } void BaselineCompiler::VisitStaNamedProperty() { - CallBuiltin(Builtins::kStoreICBaseline, - RegisterOperand(0), // object - Constant<Name>(1), // name - kInterpreterAccumulatorRegister, // value - IndexAsTagged(2)); // slot + CallBuiltin<Builtins::kStoreICBaseline>( + RegisterOperand(0), // object + Constant<Name>(1), // name + kInterpreterAccumulatorRegister, // value + IndexAsTagged(2)); // slot } void BaselineCompiler::VisitStaNamedPropertyNoFeedback() { @@ -900,19 +904,19 @@ void BaselineCompiler::VisitStaNamedOwnProperty() { } void BaselineCompiler::VisitStaKeyedProperty() { - CallBuiltin(Builtins::kKeyedStoreICBaseline, - RegisterOperand(0), // object - RegisterOperand(1), // key - kInterpreterAccumulatorRegister, // value - IndexAsTagged(2)); // slot + CallBuiltin<Builtins::kKeyedStoreICBaseline>( + RegisterOperand(0), // object + RegisterOperand(1), // key + kInterpreterAccumulatorRegister, // value + IndexAsTagged(2)); // slot } void BaselineCompiler::VisitStaInArrayLiteral() { - CallBuiltin(Builtins::kStoreInArrayLiteralICBaseline, - RegisterOperand(0), // object - RegisterOperand(1), // name - kInterpreterAccumulatorRegister, // value - IndexAsTagged(2)); // slot + CallBuiltin<Builtins::kStoreInArrayLiteralICBaseline>( + RegisterOperand(0), // object + RegisterOperand(1), // name + kInterpreterAccumulatorRegister, // value + IndexAsTagged(2)); // slot } void BaselineCompiler::VisitStaDataPropertyInLiteral() { @@ -934,140 +938,149 @@ void BaselineCompiler::VisitCollectTypeProfile() { } void BaselineCompiler::VisitAdd() { - CallBuiltin(Builtins::kAdd_Baseline, RegisterOperand(0), - kInterpreterAccumulatorRegister, Index(1)); + CallBuiltin<Builtins::kAdd_Baseline>( + RegisterOperand(0), kInterpreterAccumulatorRegister, Index(1)); } void BaselineCompiler::VisitSub() { - CallBuiltin(Builtins::kSubtract_Baseline, RegisterOperand(0), - kInterpreterAccumulatorRegister, Index(1)); + CallBuiltin<Builtins::kSubtract_Baseline>( + RegisterOperand(0), kInterpreterAccumulatorRegister, Index(1)); } void BaselineCompiler::VisitMul() { - CallBuiltin(Builtins::kMultiply_Baseline, RegisterOperand(0), - kInterpreterAccumulatorRegister, Index(1)); + CallBuiltin<Builtins::kMultiply_Baseline>( + RegisterOperand(0), kInterpreterAccumulatorRegister, Index(1)); } void BaselineCompiler::VisitDiv() { - CallBuiltin(Builtins::kDivide_Baseline, RegisterOperand(0), - kInterpreterAccumulatorRegister, Index(1)); + CallBuiltin<Builtins::kDivide_Baseline>( + RegisterOperand(0), kInterpreterAccumulatorRegister, Index(1)); } void BaselineCompiler::VisitMod() { - CallBuiltin(Builtins::kModulus_Baseline, RegisterOperand(0), - kInterpreterAccumulatorRegister, Index(1)); + CallBuiltin<Builtins::kModulus_Baseline>( + RegisterOperand(0), kInterpreterAccumulatorRegister, Index(1)); } void BaselineCompiler::VisitExp() { - CallBuiltin(Builtins::kExponentiate_Baseline, RegisterOperand(0), - kInterpreterAccumulatorRegister, Index(1)); + CallBuiltin<Builtins::kExponentiate_Baseline>( + RegisterOperand(0), kInterpreterAccumulatorRegister, Index(1)); } void BaselineCompiler::VisitBitwiseOr() { - CallBuiltin(Builtins::kBitwiseOr_Baseline, RegisterOperand(0), - kInterpreterAccumulatorRegister, Index(1)); + CallBuiltin<Builtins::kBitwiseOr_Baseline>( + RegisterOperand(0), kInterpreterAccumulatorRegister, Index(1)); } void BaselineCompiler::VisitBitwiseXor() { - CallBuiltin(Builtins::kBitwiseXor_Baseline, RegisterOperand(0), - kInterpreterAccumulatorRegister, Index(1)); + CallBuiltin<Builtins::kBitwiseXor_Baseline>( + RegisterOperand(0), kInterpreterAccumulatorRegister, Index(1)); } void BaselineCompiler::VisitBitwiseAnd() { - CallBuiltin(Builtins::kBitwiseAnd_Baseline, RegisterOperand(0), - kInterpreterAccumulatorRegister, Index(1)); + CallBuiltin<Builtins::kBitwiseAnd_Baseline>( + RegisterOperand(0), kInterpreterAccumulatorRegister, Index(1)); } void BaselineCompiler::VisitShiftLeft() { - CallBuiltin(Builtins::kShiftLeft_Baseline, RegisterOperand(0), - kInterpreterAccumulatorRegister, Index(1)); + CallBuiltin<Builtins::kShiftLeft_Baseline>( + RegisterOperand(0), kInterpreterAccumulatorRegister, Index(1)); } void BaselineCompiler::VisitShiftRight() { - CallBuiltin(Builtins::kShiftRight_Baseline, RegisterOperand(0), - kInterpreterAccumulatorRegister, Index(1)); + CallBuiltin<Builtins::kShiftRight_Baseline>( + RegisterOperand(0), kInterpreterAccumulatorRegister, Index(1)); } void BaselineCompiler::VisitShiftRightLogical() { - CallBuiltin(Builtins::kShiftRightLogical_Baseline, RegisterOperand(0), - kInterpreterAccumulatorRegister, Index(1)); -} - -void BaselineCompiler::BuildBinopWithConstant(Builtins::Name builtin_name) { - CallBuiltin(builtin_name, kInterpreterAccumulatorRegister, IntAsSmi(0), - Index(1)); + CallBuiltin<Builtins::kShiftRightLogical_Baseline>( + RegisterOperand(0), kInterpreterAccumulatorRegister, Index(1)); } void BaselineCompiler::VisitAddSmi() { - BuildBinopWithConstant(Builtins::kAdd_Baseline); + CallBuiltin<Builtins::kAdd_Baseline>(kInterpreterAccumulatorRegister, + IntAsSmi(0), Index(1)); } void BaselineCompiler::VisitSubSmi() { - BuildBinopWithConstant(Builtins::kSubtract_Baseline); + CallBuiltin<Builtins::kSubtract_Baseline>(kInterpreterAccumulatorRegister, + IntAsSmi(0), Index(1)); } void BaselineCompiler::VisitMulSmi() { - BuildBinopWithConstant(Builtins::kMultiply_Baseline); + CallBuiltin<Builtins::kMultiply_Baseline>(kInterpreterAccumulatorRegister, + IntAsSmi(0), Index(1)); } void BaselineCompiler::VisitDivSmi() { - BuildBinopWithConstant(Builtins::kDivide_Baseline); + CallBuiltin<Builtins::kDivide_Baseline>(kInterpreterAccumulatorRegister, + IntAsSmi(0), Index(1)); } void BaselineCompiler::VisitModSmi() { - BuildBinopWithConstant(Builtins::kModulus_Baseline); + CallBuiltin<Builtins::kModulus_Baseline>(kInterpreterAccumulatorRegister, + IntAsSmi(0), Index(1)); } void BaselineCompiler::VisitExpSmi() { - BuildBinopWithConstant(Builtins::kExponentiate_Baseline); + CallBuiltin<Builtins::kExponentiate_Baseline>(kInterpreterAccumulatorRegister, + IntAsSmi(0), Index(1)); } void BaselineCompiler::VisitBitwiseOrSmi() { - BuildBinopWithConstant(Builtins::kBitwiseOr_Baseline); + CallBuiltin<Builtins::kBitwiseOr_Baseline>(kInterpreterAccumulatorRegister, + IntAsSmi(0), Index(1)); } void BaselineCompiler::VisitBitwiseXorSmi() { - BuildBinopWithConstant(Builtins::kBitwiseXor_Baseline); + CallBuiltin<Builtins::kBitwiseXor_Baseline>(kInterpreterAccumulatorRegister, + IntAsSmi(0), Index(1)); } void BaselineCompiler::VisitBitwiseAndSmi() { - BuildBinopWithConstant(Builtins::kBitwiseAnd_Baseline); + CallBuiltin<Builtins::kBitwiseAnd_Baseline>(kInterpreterAccumulatorRegister, + IntAsSmi(0), Index(1)); } void BaselineCompiler::VisitShiftLeftSmi() { - BuildBinopWithConstant(Builtins::kShiftLeft_Baseline); + CallBuiltin<Builtins::kShiftLeft_Baseline>(kInterpreterAccumulatorRegister, + IntAsSmi(0), Index(1)); } void BaselineCompiler::VisitShiftRightSmi() { - BuildBinopWithConstant(Builtins::kShiftRight_Baseline); + CallBuiltin<Builtins::kShiftRight_Baseline>(kInterpreterAccumulatorRegister, + IntAsSmi(0), Index(1)); } void BaselineCompiler::VisitShiftRightLogicalSmi() { - BuildBinopWithConstant(Builtins::kShiftRightLogical_Baseline); + CallBuiltin<Builtins::kShiftRightLogical_Baseline>( + kInterpreterAccumulatorRegister, IntAsSmi(0), Index(1)); } -void BaselineCompiler::BuildUnop(Builtins::Name builtin_name) { - CallBuiltin(builtin_name, - kInterpreterAccumulatorRegister, // value - Index(0)); // slot +void BaselineCompiler::VisitInc() { + CallBuiltin<Builtins::kIncrement_Baseline>(kInterpreterAccumulatorRegister, + Index(0)); } -void BaselineCompiler::VisitInc() { BuildUnop(Builtins::kIncrement_Baseline); } - -void BaselineCompiler::VisitDec() { BuildUnop(Builtins::kDecrement_Baseline); } +void BaselineCompiler::VisitDec() { + CallBuiltin<Builtins::kDecrement_Baseline>(kInterpreterAccumulatorRegister, + Index(0)); +} -void BaselineCompiler::VisitNegate() { BuildUnop(Builtins::kNegate_Baseline); } +void BaselineCompiler::VisitNegate() { + CallBuiltin<Builtins::kNegate_Baseline>(kInterpreterAccumulatorRegister, + Index(0)); +} void BaselineCompiler::VisitBitwiseNot() { - BuildUnop(Builtins::kBitwiseNot_Baseline); + CallBuiltin<Builtins::kBitwiseNot_Baseline>(kInterpreterAccumulatorRegister, + Index(0)); } void BaselineCompiler::VisitToBooleanLogicalNot() { SelectBooleanConstant(kInterpreterAccumulatorRegister, [&](Label* if_true, Label::Distance distance) { - JumpIfToBoolean(false, - kInterpreterAccumulatorRegister, - if_true, distance); + JumpIfToBoolean(false, if_true, distance); }); } @@ -1081,23 +1094,23 @@ void BaselineCompiler::VisitLogicalNot() { } void BaselineCompiler::VisitTypeOf() { - CallBuiltin(Builtins::kTypeof, kInterpreterAccumulatorRegister); + CallBuiltin<Builtins::kTypeof>(kInterpreterAccumulatorRegister); } void BaselineCompiler::VisitDeletePropertyStrict() { BaselineAssembler::ScratchRegisterScope scratch_scope(&basm_); Register scratch = scratch_scope.AcquireScratch(); __ Move(scratch, kInterpreterAccumulatorRegister); - CallBuiltin(Builtins::kDeleteProperty, RegisterOperand(0), scratch, - Smi::FromEnum(LanguageMode::kStrict)); + CallBuiltin<Builtins::kDeleteProperty>(RegisterOperand(0), scratch, + Smi::FromEnum(LanguageMode::kStrict)); } void BaselineCompiler::VisitDeletePropertySloppy() { BaselineAssembler::ScratchRegisterScope scratch_scope(&basm_); Register scratch = scratch_scope.AcquireScratch(); __ Move(scratch, kInterpreterAccumulatorRegister); - CallBuiltin(Builtins::kDeleteProperty, RegisterOperand(0), scratch, - Smi::FromEnum(LanguageMode::kSloppy)); + CallBuiltin<Builtins::kDeleteProperty>(RegisterOperand(0), scratch, + Smi::FromEnum(LanguageMode::kSloppy)); } void BaselineCompiler::VisitGetSuperConstructor() { @@ -1106,87 +1119,115 @@ void BaselineCompiler::VisitGetSuperConstructor() { __ LoadPrototype(prototype, kInterpreterAccumulatorRegister); StoreRegister(0, prototype); } -template <typename... Args> -void BaselineCompiler::BuildCall(ConvertReceiverMode mode, uint32_t slot, - uint32_t arg_count, Args... args) { - Builtins::Name builtin; + +namespace { +constexpr Builtins::Name ConvertReceiverModeToCompactBuiltin( + ConvertReceiverMode mode) { switch (mode) { case ConvertReceiverMode::kAny: - builtin = Builtins::kCall_ReceiverIsAny_Baseline; + return Builtins::kCall_ReceiverIsAny_Baseline_Compact; break; case ConvertReceiverMode::kNullOrUndefined: - builtin = Builtins::kCall_ReceiverIsNullOrUndefined_Baseline; + return Builtins::kCall_ReceiverIsNullOrUndefined_Baseline_Compact; break; case ConvertReceiverMode::kNotNullOrUndefined: - builtin = Builtins::kCall_ReceiverIsNotNullOrUndefined_Baseline; + return Builtins::kCall_ReceiverIsNotNullOrUndefined_Baseline_Compact; break; - default: - UNREACHABLE(); } - CallBuiltin(builtin, - RegisterOperand(0), // kFunction - arg_count, // kActualArgumentsCount - slot, // kSlot - args...); // Arguments +} +constexpr Builtins::Name ConvertReceiverModeToBuiltin( + ConvertReceiverMode mode) { + switch (mode) { + case ConvertReceiverMode::kAny: + return Builtins::kCall_ReceiverIsAny_Baseline; + break; + case ConvertReceiverMode::kNullOrUndefined: + return Builtins::kCall_ReceiverIsNullOrUndefined_Baseline; + break; + case ConvertReceiverMode::kNotNullOrUndefined: + return Builtins::kCall_ReceiverIsNotNullOrUndefined_Baseline; + break; + } +} +} // namespace + +template <ConvertReceiverMode kMode, typename... Args> +void BaselineCompiler::BuildCall(uint32_t slot, uint32_t arg_count, + Args... args) { + uint32_t bitfield; + if (CallTrampoline_Baseline_CompactDescriptor::EncodeBitField(arg_count, slot, + &bitfield)) { + CallBuiltin<ConvertReceiverModeToCompactBuiltin(kMode)>( + RegisterOperand(0), // kFunction + bitfield, // kActualArgumentsCount | kSlot + args...); // Arguments + } else { + CallBuiltin<ConvertReceiverModeToBuiltin(kMode)>( + RegisterOperand(0), // kFunction + arg_count, // kActualArgumentsCount + slot, // kSlot + args...); // Arguments + } } void BaselineCompiler::VisitCallAnyReceiver() { interpreter::RegisterList args = iterator().GetRegisterListOperand(1); uint32_t arg_count = args.register_count() - 1; // Remove receiver. - BuildCall(ConvertReceiverMode::kAny, Index(3), arg_count, args); + BuildCall<ConvertReceiverMode::kAny>(Index(3), arg_count, args); } void BaselineCompiler::VisitCallProperty() { interpreter::RegisterList args = iterator().GetRegisterListOperand(1); uint32_t arg_count = args.register_count() - 1; // Remove receiver. - BuildCall(ConvertReceiverMode::kNotNullOrUndefined, Index(3), arg_count, - args); + BuildCall<ConvertReceiverMode::kNotNullOrUndefined>(Index(3), arg_count, + args); } void BaselineCompiler::VisitCallProperty0() { - BuildCall(ConvertReceiverMode::kNotNullOrUndefined, Index(2), 0, - RegisterOperand(1)); + BuildCall<ConvertReceiverMode::kNotNullOrUndefined>(Index(2), 0, + RegisterOperand(1)); } void BaselineCompiler::VisitCallProperty1() { - BuildCall(ConvertReceiverMode::kNotNullOrUndefined, Index(3), 1, - RegisterOperand(1), RegisterOperand(2)); + BuildCall<ConvertReceiverMode::kNotNullOrUndefined>( + Index(3), 1, RegisterOperand(1), RegisterOperand(2)); } void BaselineCompiler::VisitCallProperty2() { - BuildCall(ConvertReceiverMode::kNotNullOrUndefined, Index(4), 2, - RegisterOperand(1), RegisterOperand(2), RegisterOperand(3)); + BuildCall<ConvertReceiverMode::kNotNullOrUndefined>( + Index(4), 2, RegisterOperand(1), RegisterOperand(2), RegisterOperand(3)); } void BaselineCompiler::VisitCallUndefinedReceiver() { interpreter::RegisterList args = iterator().GetRegisterListOperand(1); uint32_t arg_count = args.register_count(); - BuildCall(ConvertReceiverMode::kNullOrUndefined, Index(3), arg_count, - RootIndex::kUndefinedValue, args); + BuildCall<ConvertReceiverMode::kNullOrUndefined>( + Index(3), arg_count, RootIndex::kUndefinedValue, args); } void BaselineCompiler::VisitCallUndefinedReceiver0() { - BuildCall(ConvertReceiverMode::kNullOrUndefined, Index(1), 0, - RootIndex::kUndefinedValue); + BuildCall<ConvertReceiverMode::kNullOrUndefined>(Index(1), 0, + RootIndex::kUndefinedValue); } void BaselineCompiler::VisitCallUndefinedReceiver1() { - BuildCall(ConvertReceiverMode::kNullOrUndefined, Index(2), 1, - RootIndex::kUndefinedValue, RegisterOperand(1)); + BuildCall<ConvertReceiverMode::kNullOrUndefined>( + Index(2), 1, RootIndex::kUndefinedValue, RegisterOperand(1)); } void BaselineCompiler::VisitCallUndefinedReceiver2() { - BuildCall(ConvertReceiverMode::kNullOrUndefined, Index(3), 2, - RootIndex::kUndefinedValue, RegisterOperand(1), RegisterOperand(2)); + BuildCall<ConvertReceiverMode::kNullOrUndefined>( + Index(3), 2, RootIndex::kUndefinedValue, RegisterOperand(1), + RegisterOperand(2)); } void BaselineCompiler::VisitCallNoFeedback() { interpreter::RegisterList args = iterator().GetRegisterListOperand(1); uint32_t arg_count = args.register_count(); - CallBuiltin(Builtins::kCall_ReceiverIsAny, - RegisterOperand(0), // kFunction - arg_count - 1, // kActualArgumentsCount - args); + CallBuiltin<Builtins::kCall_ReceiverIsAny>( + RegisterOperand(0), // kFunction + arg_count - 1, // kActualArgumentsCount + args); } void BaselineCompiler::VisitCallWithSpread() { @@ -1198,12 +1239,12 @@ void BaselineCompiler::VisitCallWithSpread() { uint32_t arg_count = args.register_count() - 1; // Remove receiver. - CallBuiltin(Builtins::kCallWithSpread_Baseline, - RegisterOperand(0), // kFunction - arg_count, // kActualArgumentsCount - spread_register, // kSpread - Index(3), // kSlot - args); + CallBuiltin<Builtins::kCallWithSpread_Baseline>( + RegisterOperand(0), // kFunction + arg_count, // kActualArgumentsCount + spread_register, // kSpread + Index(3), // kSlot + args); } void BaselineCompiler::VisitCallRuntime() { @@ -1226,11 +1267,11 @@ void BaselineCompiler::VisitCallJSRuntime() { __ LoadContext(kContextRegister); __ LoadNativeContextSlot(kJavaScriptCallTargetRegister, iterator().GetNativeContextIndexOperand(0)); - CallBuiltin(Builtins::kCall_ReceiverIsNullOrUndefined, - kJavaScriptCallTargetRegister, // kFunction - arg_count, // kActualArgumentsCount - RootIndex::kUndefinedValue, // kReceiver - args); + CallBuiltin<Builtins::kCall_ReceiverIsNullOrUndefined>( + kJavaScriptCallTargetRegister, // kFunction + arg_count, // kActualArgumentsCount + RootIndex::kUndefinedValue, // kReceiver + args); } void BaselineCompiler::VisitInvokeIntrinsic() { @@ -1301,29 +1342,25 @@ void BaselineCompiler::VisitIntrinsicIsSmi(interpreter::RegisterList args) { void BaselineCompiler::VisitIntrinsicCopyDataProperties( interpreter::RegisterList args) { - CallBuiltin(Builtins::kCopyDataProperties, args); + CallBuiltin<Builtins::kCopyDataProperties>(args); } void BaselineCompiler::VisitIntrinsicCreateIterResultObject( interpreter::RegisterList args) { - CallBuiltin(Builtins::kCreateIterResultObject, args); + CallBuiltin<Builtins::kCreateIterResultObject>(args); } void BaselineCompiler::VisitIntrinsicHasProperty( interpreter::RegisterList args) { - CallBuiltin(Builtins::kHasProperty, args); -} - -void BaselineCompiler::VisitIntrinsicToString(interpreter::RegisterList args) { - CallBuiltin(Builtins::kToString, args); + CallBuiltin<Builtins::kHasProperty>(args); } void BaselineCompiler::VisitIntrinsicToLength(interpreter::RegisterList args) { - CallBuiltin(Builtins::kToLength, args); + CallBuiltin<Builtins::kToLength>(args); } void BaselineCompiler::VisitIntrinsicToObject(interpreter::RegisterList args) { - CallBuiltin(Builtins::kToObject, args); + CallBuiltin<Builtins::kToObject>(args); } void BaselineCompiler::VisitIntrinsicCall(interpreter::RegisterList args) { @@ -1335,20 +1372,20 @@ void BaselineCompiler::VisitIntrinsicCall(interpreter::RegisterList args) { args = args.PopLeft(); uint32_t arg_count = args.register_count(); - CallBuiltin(Builtins::kCall_ReceiverIsAny, - kJavaScriptCallTargetRegister, // kFunction - arg_count - 1, // kActualArgumentsCount - args); + CallBuiltin<Builtins::kCall_ReceiverIsAny>( + kJavaScriptCallTargetRegister, // kFunction + arg_count - 1, // kActualArgumentsCount + args); } void BaselineCompiler::VisitIntrinsicCreateAsyncFromSyncIterator( interpreter::RegisterList args) { - CallBuiltin(Builtins::kCreateAsyncFromSyncIteratorBaseline, args[0]); + CallBuiltin<Builtins::kCreateAsyncFromSyncIteratorBaseline>(args[0]); } void BaselineCompiler::VisitIntrinsicCreateJSGeneratorObject( interpreter::RegisterList args) { - CallBuiltin(Builtins::kCreateGeneratorObject, args); + CallBuiltin<Builtins::kCreateGeneratorObject>(args); } void BaselineCompiler::VisitIntrinsicGeneratorGetResumeMode( @@ -1370,69 +1407,69 @@ void BaselineCompiler::VisitIntrinsicGeneratorClose( void BaselineCompiler::VisitIntrinsicGetImportMetaObject( interpreter::RegisterList args) { - CallBuiltin(Builtins::kGetImportMetaObjectBaseline); + CallBuiltin<Builtins::kGetImportMetaObjectBaseline>(); } void BaselineCompiler::VisitIntrinsicAsyncFunctionAwaitCaught( interpreter::RegisterList args) { - CallBuiltin(Builtins::kAsyncFunctionAwaitCaught, args); + CallBuiltin<Builtins::kAsyncFunctionAwaitCaught>(args); } void BaselineCompiler::VisitIntrinsicAsyncFunctionAwaitUncaught( interpreter::RegisterList args) { - CallBuiltin(Builtins::kAsyncFunctionAwaitUncaught, args); + CallBuiltin<Builtins::kAsyncFunctionAwaitUncaught>(args); } void BaselineCompiler::VisitIntrinsicAsyncFunctionEnter( interpreter::RegisterList args) { - CallBuiltin(Builtins::kAsyncFunctionEnter, args); + CallBuiltin<Builtins::kAsyncFunctionEnter>(args); } void BaselineCompiler::VisitIntrinsicAsyncFunctionReject( interpreter::RegisterList args) { - CallBuiltin(Builtins::kAsyncFunctionReject, args); + CallBuiltin<Builtins::kAsyncFunctionReject>(args); } void BaselineCompiler::VisitIntrinsicAsyncFunctionResolve( interpreter::RegisterList args) { - CallBuiltin(Builtins::kAsyncFunctionResolve, args); + CallBuiltin<Builtins::kAsyncFunctionResolve>(args); } void BaselineCompiler::VisitIntrinsicAsyncGeneratorAwaitCaught( interpreter::RegisterList args) { - CallBuiltin(Builtins::kAsyncGeneratorAwaitCaught, args); + CallBuiltin<Builtins::kAsyncGeneratorAwaitCaught>(args); } void BaselineCompiler::VisitIntrinsicAsyncGeneratorAwaitUncaught( interpreter::RegisterList args) { - CallBuiltin(Builtins::kAsyncGeneratorAwaitUncaught, args); + CallBuiltin<Builtins::kAsyncGeneratorAwaitUncaught>(args); } void BaselineCompiler::VisitIntrinsicAsyncGeneratorReject( interpreter::RegisterList args) { - CallBuiltin(Builtins::kAsyncGeneratorReject, args); + CallBuiltin<Builtins::kAsyncGeneratorReject>(args); } void BaselineCompiler::VisitIntrinsicAsyncGeneratorResolve( interpreter::RegisterList args) { - CallBuiltin(Builtins::kAsyncGeneratorResolve, args); + CallBuiltin<Builtins::kAsyncGeneratorResolve>(args); } void BaselineCompiler::VisitIntrinsicAsyncGeneratorYield( interpreter::RegisterList args) { - CallBuiltin(Builtins::kAsyncGeneratorYield, args); + CallBuiltin<Builtins::kAsyncGeneratorYield>(args); } void BaselineCompiler::VisitConstruct() { interpreter::RegisterList args = iterator().GetRegisterListOperand(1); uint32_t arg_count = args.register_count(); - CallBuiltin(Builtins::kConstruct_Baseline, - RegisterOperand(0), // kFunction - kInterpreterAccumulatorRegister, // kNewTarget - arg_count, // kActualArgumentsCount - Index(3), // kSlot - RootIndex::kUndefinedValue, // kReceiver - args); + CallBuiltin<Builtins::kConstruct_Baseline>( + RegisterOperand(0), // kFunction + kInterpreterAccumulatorRegister, // kNewTarget + arg_count, // kActualArgumentsCount + Index(3), // kSlot + RootIndex::kUndefinedValue, // kReceiver + args); } void BaselineCompiler::VisitConstructWithSpread() { @@ -1444,51 +1481,50 @@ void BaselineCompiler::VisitConstructWithSpread() { uint32_t arg_count = args.register_count(); + using Descriptor = + CallInterfaceDescriptorFor<Builtins::kConstructWithSpread_Baseline>::type; Register new_target = - Builtins::CallInterfaceDescriptorFor( - Builtins::kConstructWithSpread_Baseline) - .GetRegisterParameter( - ConstructWithSpread_BaselineDescriptor::kNewTarget); + Descriptor::GetRegisterParameter(Descriptor::kNewTarget); __ Move(new_target, kInterpreterAccumulatorRegister); - CallBuiltin(Builtins::kConstructWithSpread_Baseline, - RegisterOperand(0), // kFunction - new_target, // kNewTarget - arg_count, // kActualArgumentsCount - Index(3), // kSlot - spread_register, // kSpread - RootIndex::kUndefinedValue, // kReceiver - args); -} - -void BaselineCompiler::BuildCompare(Builtins::Name builtin_name) { - CallBuiltin(builtin_name, RegisterOperand(0), // lhs - kInterpreterAccumulatorRegister, // rhs - Index(1)); // slot + CallBuiltin<Builtins::kConstructWithSpread_Baseline>( + RegisterOperand(0), // kFunction + new_target, // kNewTarget + arg_count, // kActualArgumentsCount + Index(3), // kSlot + spread_register, // kSpread + RootIndex::kUndefinedValue, // kReceiver + args); } void BaselineCompiler::VisitTestEqual() { - BuildCompare(Builtins::kEqual_Baseline); + CallBuiltin<Builtins::kEqual_Baseline>( + RegisterOperand(0), kInterpreterAccumulatorRegister, Index(1)); } void BaselineCompiler::VisitTestEqualStrict() { - BuildCompare(Builtins::kStrictEqual_Baseline); + CallBuiltin<Builtins::kStrictEqual_Baseline>( + RegisterOperand(0), kInterpreterAccumulatorRegister, Index(1)); } void BaselineCompiler::VisitTestLessThan() { - BuildCompare(Builtins::kLessThan_Baseline); + CallBuiltin<Builtins::kLessThan_Baseline>( + RegisterOperand(0), kInterpreterAccumulatorRegister, Index(1)); } void BaselineCompiler::VisitTestGreaterThan() { - BuildCompare(Builtins::kGreaterThan_Baseline); + CallBuiltin<Builtins::kGreaterThan_Baseline>( + RegisterOperand(0), kInterpreterAccumulatorRegister, Index(1)); } void BaselineCompiler::VisitTestLessThanOrEqual() { - BuildCompare(Builtins::kLessThanOrEqual_Baseline); + CallBuiltin<Builtins::kLessThanOrEqual_Baseline>( + RegisterOperand(0), kInterpreterAccumulatorRegister, Index(1)); } void BaselineCompiler::VisitTestGreaterThanOrEqual() { - BuildCompare(Builtins::kGreaterThanOrEqual_Baseline); + CallBuiltin<Builtins::kGreaterThanOrEqual_Baseline>( + RegisterOperand(0), kInterpreterAccumulatorRegister, Index(1)); } void BaselineCompiler::VisitTestReferenceEqual() { @@ -1502,21 +1538,21 @@ void BaselineCompiler::VisitTestReferenceEqual() { } void BaselineCompiler::VisitTestInstanceOf() { - Register callable = - Builtins::CallInterfaceDescriptorFor(Builtins::kInstanceOf_Baseline) - .GetRegisterParameter(Compare_BaselineDescriptor::kRight); + using Descriptor = + CallInterfaceDescriptorFor<Builtins::kInstanceOf_Baseline>::type; + Register callable = Descriptor::GetRegisterParameter(Descriptor::kRight); __ Move(callable, kInterpreterAccumulatorRegister); - CallBuiltin(Builtins::kInstanceOf_Baseline, - RegisterOperand(0), // object - callable, // callable - Index(1)); // slot + + CallBuiltin<Builtins::kInstanceOf_Baseline>(RegisterOperand(0), // object + callable, // callable + Index(1)); // slot } void BaselineCompiler::VisitTestIn() { - CallBuiltin(Builtins::kKeyedHasICBaseline, - kInterpreterAccumulatorRegister, // object - RegisterOperand(0), // name - IndexAsTagged(1)); // slot + CallBuiltin<Builtins::kKeyedHasICBaseline>( + kInterpreterAccumulatorRegister, // object + RegisterOperand(0), // name + IndexAsTagged(1)); // slot } void BaselineCompiler::VisitTestUndetectable() { @@ -1727,36 +1763,36 @@ void BaselineCompiler::VisitTestTypeOf() { void BaselineCompiler::VisitToName() { SaveAccumulatorScope save_accumulator(&basm_); - CallBuiltin(Builtins::kToName, kInterpreterAccumulatorRegister); + CallBuiltin<Builtins::kToName>(kInterpreterAccumulatorRegister); StoreRegister(0, kInterpreterAccumulatorRegister); } void BaselineCompiler::VisitToNumber() { - CallBuiltin(Builtins::kToNumber_Baseline, kInterpreterAccumulatorRegister, - Index(0)); + CallBuiltin<Builtins::kToNumber_Baseline>(kInterpreterAccumulatorRegister, + Index(0)); } void BaselineCompiler::VisitToNumeric() { - CallBuiltin(Builtins::kToNumeric_Baseline, kInterpreterAccumulatorRegister, - Index(0)); + CallBuiltin<Builtins::kToNumeric_Baseline>(kInterpreterAccumulatorRegister, + Index(0)); } void BaselineCompiler::VisitToObject() { SaveAccumulatorScope save_accumulator(&basm_); - CallBuiltin(Builtins::kToObject, kInterpreterAccumulatorRegister); + CallBuiltin<Builtins::kToObject>(kInterpreterAccumulatorRegister); StoreRegister(0, kInterpreterAccumulatorRegister); } void BaselineCompiler::VisitToString() { - CallBuiltin(Builtins::kToString, kInterpreterAccumulatorRegister); + CallBuiltin<Builtins::kToString>(kInterpreterAccumulatorRegister); } void BaselineCompiler::VisitCreateRegExpLiteral() { - CallBuiltin(Builtins::kCreateRegExpLiteral, - FeedbackVector(), // feedback vector - IndexAsTagged(1), // slot - Constant<HeapObject>(0), // pattern - FlagAsSmi(2)); // flags + CallBuiltin<Builtins::kCreateRegExpLiteral>( + FeedbackVector(), // feedback vector + IndexAsTagged(1), // slot + Constant<HeapObject>(0), // pattern + FlagAsSmi(2)); // flags } void BaselineCompiler::VisitCreateArrayLiteral() { @@ -1765,11 +1801,11 @@ void BaselineCompiler::VisitCreateArrayLiteral() { interpreter::CreateArrayLiteralFlags::FlagsBits::decode(flags)); if (flags & interpreter::CreateArrayLiteralFlags::FastCloneSupportedBit::kMask) { - CallBuiltin(Builtins::kCreateShallowArrayLiteral, - FeedbackVector(), // feedback vector - IndexAsTagged(1), // slot - Constant<HeapObject>(0), // constant elements - Smi::FromInt(flags_raw)); // flags + CallBuiltin<Builtins::kCreateShallowArrayLiteral>( + FeedbackVector(), // feedback vector + IndexAsTagged(1), // slot + Constant<HeapObject>(0), // constant elements + Smi::FromInt(flags_raw)); // flags } else { CallRuntime(Runtime::kCreateArrayLiteral, FeedbackVector(), // feedback vector @@ -1780,13 +1816,13 @@ void BaselineCompiler::VisitCreateArrayLiteral() { } void BaselineCompiler::VisitCreateArrayFromIterable() { - CallBuiltin(Builtins::kIterableToListWithSymbolLookup, - kInterpreterAccumulatorRegister); // iterable + CallBuiltin<Builtins::kIterableToListWithSymbolLookup>( + kInterpreterAccumulatorRegister); // iterable } void BaselineCompiler::VisitCreateEmptyArrayLiteral() { - CallBuiltin(Builtins::kCreateEmptyArrayLiteral, FeedbackVector(), - IndexAsTagged(0)); + CallBuiltin<Builtins::kCreateEmptyArrayLiteral>(FeedbackVector(), + IndexAsTagged(0)); } void BaselineCompiler::VisitCreateObjectLiteral() { @@ -1795,11 +1831,11 @@ void BaselineCompiler::VisitCreateObjectLiteral() { interpreter::CreateObjectLiteralFlags::FlagsBits::decode(flags)); if (flags & interpreter::CreateObjectLiteralFlags::FastCloneSupportedBit::kMask) { - CallBuiltin(Builtins::kCreateShallowObjectLiteral, - FeedbackVector(), // feedback vector - IndexAsTagged(1), // slot - Constant<ObjectBoilerplateDescription>(0), // boilerplate - Smi::FromInt(flags_raw)); // flags + CallBuiltin<Builtins::kCreateShallowObjectLiteral>( + FeedbackVector(), // feedback vector + IndexAsTagged(1), // slot + Constant<ObjectBoilerplateDescription>(0), // boilerplate + Smi::FromInt(flags_raw)); // flags } else { CallRuntime(Runtime::kCreateObjectLiteral, FeedbackVector(), // feedback vector @@ -1810,39 +1846,39 @@ void BaselineCompiler::VisitCreateObjectLiteral() { } void BaselineCompiler::VisitCreateEmptyObjectLiteral() { - CallBuiltin(Builtins::kCreateEmptyLiteralObject); + CallBuiltin<Builtins::kCreateEmptyLiteralObject>(); } void BaselineCompiler::VisitCloneObject() { uint32_t flags = Flag(1); int32_t raw_flags = interpreter::CreateObjectLiteralFlags::FlagsBits::decode(flags); - CallBuiltin(Builtins::kCloneObjectICBaseline, - RegisterOperand(0), // source - Smi::FromInt(raw_flags), // flags - IndexAsTagged(2)); // slot + CallBuiltin<Builtins::kCloneObjectICBaseline>( + RegisterOperand(0), // source + Smi::FromInt(raw_flags), // flags + IndexAsTagged(2)); // slot } void BaselineCompiler::VisitGetTemplateObject() { BaselineAssembler::ScratchRegisterScope scratch_scope(&basm_); - CallBuiltin(Builtins::kGetTemplateObject, - shared_function_info_, // shared function info - Constant<HeapObject>(0), // description - Index(1), // slot - FeedbackVector()); // feedback_vector + CallBuiltin<Builtins::kGetTemplateObject>( + shared_function_info_, // shared function info + Constant<HeapObject>(0), // description + Index(1), // slot + FeedbackVector()); // feedback_vector } void BaselineCompiler::VisitCreateClosure() { Register feedback_cell = - Builtins::CallInterfaceDescriptorFor(Builtins::kFastNewClosure) - .GetRegisterParameter(FastNewClosureDescriptor::kFeedbackCell); + FastNewClosureBaselineDescriptor::GetRegisterParameter( + FastNewClosureBaselineDescriptor::kFeedbackCell); LoadClosureFeedbackArray(feedback_cell); __ LoadFixedArrayElement(feedback_cell, feedback_cell, Index(1)); uint32_t flags = Flag(2); if (interpreter::CreateClosureFlags::FastNewClosureBit::decode(flags)) { - CallBuiltin(Builtins::kFastNewClosure, Constant<SharedFunctionInfo>(0), - feedback_cell); + CallBuiltin<Builtins::kFastNewClosureBaseline>( + Constant<SharedFunctionInfo>(0), feedback_cell); } else { Runtime::FunctionId function_id = interpreter::CreateClosureFlags::PretenuredBit::decode(flags) @@ -1868,7 +1904,7 @@ void BaselineCompiler::VisitCreateFunctionContext() { if (slot_count < static_cast<uint32_t>( ConstructorBuiltins::MaximumFunctionContextSlots())) { DCHECK_EQ(info->scope_type(), ScopeType::FUNCTION_SCOPE); - CallBuiltin(Builtins::kFastNewFunctionContextFunction, info, slot_count); + CallBuiltin<Builtins::kFastNewFunctionContextFunction>(info, slot_count); } else { CallRuntime(Runtime::kNewFunctionContext, Constant<ScopeInfo>(0)); } @@ -1880,7 +1916,7 @@ void BaselineCompiler::VisitCreateEvalContext() { if (slot_count < static_cast<uint32_t>( ConstructorBuiltins::MaximumFunctionContextSlots())) { DCHECK_EQ(info->scope_type(), ScopeType::EVAL_SCOPE); - CallBuiltin(Builtins::kFastNewFunctionContextEval, info, slot_count); + CallBuiltin<Builtins::kFastNewFunctionContextEval>(info, slot_count); } else { CallRuntime(Runtime::kNewFunctionContext, Constant<ScopeInfo>(0)); } @@ -1896,16 +1932,16 @@ void BaselineCompiler::VisitCreateMappedArguments() { if (shared_function_info_->has_duplicate_parameters()) { CallRuntime(Runtime::kNewSloppyArguments, __ FunctionOperand()); } else { - CallBuiltin(Builtins::kFastNewSloppyArguments, __ FunctionOperand()); + CallBuiltin<Builtins::kFastNewSloppyArguments>(__ FunctionOperand()); } } void BaselineCompiler::VisitCreateUnmappedArguments() { - CallBuiltin(Builtins::kFastNewStrictArguments, __ FunctionOperand()); + CallBuiltin<Builtins::kFastNewStrictArguments>(__ FunctionOperand()); } void BaselineCompiler::VisitCreateRestParameter() { - CallBuiltin(Builtins::kFastNewRestArguments, __ FunctionOperand()); + CallBuiltin<Builtins::kFastNewRestArguments>(__ FunctionOperand()); } void BaselineCompiler::VisitJumpLoop() { @@ -1919,7 +1955,7 @@ void BaselineCompiler::VisitJumpLoop() { int loop_depth = iterator().GetImmediateOperand(1); __ CompareByte(osr_level, loop_depth); __ JumpIf(Condition::kUnsignedLessThanEqual, &osr_not_armed); - CallBuiltin(Builtins::kBaselineOnStackReplacement); + CallBuiltin<Builtins::kBaselineOnStackReplacement>(); __ RecordComment("]"); __ Bind(&osr_not_armed); @@ -1972,16 +2008,14 @@ void BaselineCompiler::VisitJumpIfToBooleanFalseConstant() { void BaselineCompiler::VisitJumpIfToBooleanTrue() { Label dont_jump; - JumpIfToBoolean(false, kInterpreterAccumulatorRegister, &dont_jump, - Label::kNear); + JumpIfToBoolean(false, &dont_jump, Label::kNear); UpdateInterruptBudgetAndDoInterpreterJump(); __ Bind(&dont_jump); } void BaselineCompiler::VisitJumpIfToBooleanFalse() { Label dont_jump; - JumpIfToBoolean(true, kInterpreterAccumulatorRegister, &dont_jump, - Label::kNear); + JumpIfToBoolean(true, &dont_jump, Label::kNear); UpdateInterruptBudgetAndDoInterpreterJump(); __ Bind(&dont_jump); } @@ -2057,13 +2091,13 @@ void BaselineCompiler::VisitSwitchOnSmiNoFeedback() { } void BaselineCompiler::VisitForInEnumerate() { - CallBuiltin(Builtins::kForInEnumerate, RegisterOperand(0)); + CallBuiltin<Builtins::kForInEnumerate>(RegisterOperand(0)); } void BaselineCompiler::VisitForInPrepare() { StoreRegister(0, kInterpreterAccumulatorRegister); - CallBuiltin(Builtins::kForInPrepare, kInterpreterAccumulatorRegister, - IndexAsTagged(1), FeedbackVector()); + CallBuiltin<Builtins::kForInPrepare>(kInterpreterAccumulatorRegister, + IndexAsTagged(1), FeedbackVector()); interpreter::Register first = iterator().GetRegisterOperand(0); interpreter::Register second(first.index() + 1); interpreter::Register third(first.index() + 2); @@ -2085,13 +2119,12 @@ void BaselineCompiler::VisitForInContinue() { void BaselineCompiler::VisitForInNext() { interpreter::Register cache_type, cache_array; std::tie(cache_type, cache_array) = iterator().GetRegisterPairOperand(2); - CallBuiltin(Builtins::kForInNext, - Index(3), // vector slot - RegisterOperand(0), // object - cache_array, // cache array - cache_type, // cache type - RegisterOperand(1), // index - FeedbackVector()); // feedback vector + CallBuiltin<Builtins::kForInNext>(Index(3), // vector slot + RegisterOperand(0), // object + cache_array, // cache array + cache_type, // cache type + RegisterOperand(1), // index + FeedbackVector()); // feedback vector } void BaselineCompiler::VisitForInStep() { @@ -2131,8 +2164,8 @@ void BaselineCompiler::VisitReturn() { int parameter_count_without_receiver = parameter_count - 1; // Exclude the receiver to simplify the // computation. We'll account for it at the end. - TailCallBuiltin(Builtins::kBaselineLeaveFrame, - parameter_count_without_receiver, -profiling_weight); + TailCallBuiltin<Builtins::kBaselineLeaveFrame>( + parameter_count_without_receiver, -profiling_weight); __ RecordComment("]"); } @@ -2235,10 +2268,11 @@ void BaselineCompiler::VisitSuspendGenerator() { int bytecode_offset = BytecodeArray::kHeaderSize + iterator().current_offset(); - CallBuiltin(Builtins::kSuspendGeneratorBaseline, generator_object, - static_cast<int>(Uint(3)), // suspend_id - bytecode_offset, - static_cast<int>(RegisterCount(2))); // register_count + CallBuiltin<Builtins::kSuspendGeneratorBaseline>( + generator_object, + static_cast<int>(Uint(3)), // suspend_id + bytecode_offset, + static_cast<int>(RegisterCount(2))); // register_count } VisitReturn(); } @@ -2248,26 +2282,27 @@ void BaselineCompiler::VisitResumeGenerator() { BaselineAssembler::ScratchRegisterScope scratch_scope(&basm_); Register generator_object = scratch_scope.AcquireScratch(); LoadRegister(generator_object, 0); - CallBuiltin(Builtins::kResumeGeneratorBaseline, generator_object, - static_cast<int>(RegisterCount(2))); // register_count + CallBuiltin<Builtins::kResumeGeneratorBaseline>( + generator_object, + static_cast<int>(RegisterCount(2))); // register_count } void BaselineCompiler::VisitGetIterator() { - CallBuiltin(Builtins::kGetIteratorBaseline, - RegisterOperand(0), // receiver - IndexAsTagged(1), // load_slot - IndexAsTagged(2)); // call_slot + CallBuiltin<Builtins::kGetIteratorBaseline>(RegisterOperand(0), // receiver + IndexAsTagged(1), // load_slot + IndexAsTagged(2)); // call_slot } void BaselineCompiler::VisitDebugger() { SaveAccumulatorScope accumulator_scope(&basm_); - CallBuiltin(Builtins::kHandleDebuggerStatement); + CallRuntime(Runtime::kHandleDebuggerStatement); } void BaselineCompiler::VisitIncBlockCounter() { SaveAccumulatorScope accumulator_scope(&basm_); - CallBuiltin(Builtins::kIncBlockCounter, __ FunctionOperand(), - IndexAsSmi(0)); // coverage array slot + CallBuiltin<Builtins::kIncBlockCounter>( + __ FunctionOperand(), + IndexAsSmi(0)); // coverage array slot } void BaselineCompiler::VisitAbort() { diff --git a/deps/v8/src/baseline/baseline-compiler.h b/deps/v8/src/baseline/baseline-compiler.h index dbb2f64f6c..c86d9417e8 100644 --- a/deps/v8/src/baseline/baseline-compiler.h +++ b/deps/v8/src/baseline/baseline-compiler.h @@ -8,7 +8,7 @@ // TODO(v8:11421): Remove #if once baseline compiler is ported to other // architectures. #if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_ARM64 || \ - V8_TARGET_ARCH_ARM + V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_RISCV64 #include "src/base/logging.h" #include "src/base/threaded-list.h" @@ -39,8 +39,10 @@ class BytecodeOffsetTableBuilder { previous_pc_ = pc_offset; } - template <typename LocalIsolate> - Handle<ByteArray> ToBytecodeOffsetTable(LocalIsolate* isolate); + template <typename IsolateT> + Handle<ByteArray> ToBytecodeOffsetTable(IsolateT* isolate); + + void Reserve(size_t size) { bytes_.reserve(size); } private: size_t previous_pc_ = 0; @@ -121,31 +123,21 @@ class BaselineCompiler { void SelectBooleanConstant( Register output, std::function<void(Label*, Label::Distance)> jump_func); - // Returns ToBoolean result into kInterpreterAccumulatorRegister. - void JumpIfToBoolean(bool do_jump_if_true, Register reg, Label* label, + // Jumps based on calling ToBoolean on kInterpreterAccumulatorRegister. + void JumpIfToBoolean(bool do_jump_if_true, Label* label, Label::Distance distance = Label::kFar); // Call helpers. - template <typename... Args> - void CallBuiltin(Builtins::Name builtin, Args... args); + template <Builtins::Name kBuiltin, typename... Args> + void CallBuiltin(Args... args); template <typename... Args> void CallRuntime(Runtime::FunctionId function, Args... args); - template <typename... Args> - void TailCallBuiltin(Builtins::Name builtin, Args... args); + template <Builtins::Name kBuiltin, typename... Args> + void TailCallBuiltin(Args... args); - void BuildBinop( - Builtins::Name builtin_name, bool fast_path = false, - bool check_overflow = false, - std::function<void(Register, Register)> instruction = [](Register, - Register) {}); - void BuildUnop(Builtins::Name builtin_name); - void BuildCompare(Builtins::Name builtin_name); - void BuildBinopWithConstant(Builtins::Name builtin_name); - - template <typename... Args> - void BuildCall(ConvertReceiverMode mode, uint32_t slot, uint32_t arg_count, - Args... args); + template <ConvertReceiverMode kMode, typename... Args> + void BuildCall(uint32_t slot, uint32_t arg_count, Args... args); #ifdef V8_TRACE_UNOPTIMIZED void TraceBytecode(Runtime::FunctionId function_id); diff --git a/deps/v8/src/baseline/baseline-osr-inl.h b/deps/v8/src/baseline/baseline-osr-inl.h new file mode 100644 index 0000000000..d37007f9cf --- /dev/null +++ b/deps/v8/src/baseline/baseline-osr-inl.h @@ -0,0 +1,38 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// +#ifndef V8_BASELINE_BASELINE_OSR_INL_H_ +#define V8_BASELINE_BASELINE_OSR_INL_H_ + +#include "src/execution/frames.h" +#include "src/execution/isolate-inl.h" + +namespace v8 { +namespace internal { + +inline void OSRInterpreterFrameToBaseline(Isolate* isolate, + Handle<JSFunction> function, + UnoptimizedFrame* frame) { + IsCompiledScope is_compiled_scope( + function->shared().is_compiled_scope(isolate)); + if (Compiler::CompileBaseline(isolate, function, Compiler::CLEAR_EXCEPTION, + &is_compiled_scope)) { + if (V8_LIKELY(FLAG_use_osr)) { + DCHECK_NOT_NULL(frame); + if (FLAG_trace_osr) { + CodeTracer::Scope scope(isolate->GetCodeTracer()); + PrintF(scope.file(), + "[OSR - Entry at OSR bytecode offset %d into baseline code]\n", + frame->GetBytecodeOffset()); + } + frame->GetBytecodeArray().set_osr_loop_nesting_level( + AbstractCode::kMaxLoopNestingMarker); + } + } +} + +} // namespace internal +} // namespace v8 + +#endif // V8_BASELINE_BASELINE_OSR_INL_H_ diff --git a/deps/v8/src/baseline/baseline.cc b/deps/v8/src/baseline/baseline.cc index b5355660f9..c7cc130c5e 100644 --- a/deps/v8/src/baseline/baseline.cc +++ b/deps/v8/src/baseline/baseline.cc @@ -5,14 +5,16 @@ #include "src/baseline/baseline.h" #include "src/handles/maybe-handles.h" +#include "src/objects/shared-function-info.h" // TODO(v8:11421): Remove #if once baseline compiler is ported to other // architectures. #if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_ARM64 || \ - V8_TARGET_ARCH_ARM + V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_RISCV64 #include "src/baseline/baseline-assembler-inl.h" #include "src/baseline/baseline-compiler.h" +#include "src/debug/debug.h" #include "src/heap/factory-inl.h" #include "src/logging/counters.h" #include "src/objects/script-inl.h" @@ -21,10 +23,36 @@ namespace v8 { namespace internal { +bool CanCompileWithBaseline(Isolate* isolate, SharedFunctionInfo shared) { + DisallowGarbageCollection no_gc; + + if (!FLAG_sparkplug) return false; + + // Check that short builtin calls are enabled if needed. + if (FLAG_sparkplug_needs_short_builtins && + !isolate->is_short_builtin_calls_enabled()) { + return false; + } + + // Check if we actually have bytecode. + if (!shared.HasBytecodeArray()) return false; + + // Do not optimize when debugger needs to hook into every call. + if (isolate->debug()->needs_check_on_function_call()) return false; + + // Functions with breakpoints have to stay interpreted. + if (shared.HasBreakInfo()) return false; + + // Do not baseline compile if sparkplug is disabled or function doesn't pass + // sparkplug_filter. + if (!shared.PassesFilter(FLAG_sparkplug_filter)) return false; + + return true; +} + MaybeHandle<Code> GenerateBaselineCode(Isolate* isolate, Handle<SharedFunctionInfo> shared) { - RuntimeCallTimerScope runtimeTimer(isolate, - RuntimeCallCounterId::kCompileBaseline); + RCS_SCOPE(isolate, RuntimeCallCounterId::kCompileBaseline); baseline::BaselineCompiler compiler( isolate, shared, handle(shared->GetBytecodeArray(isolate), isolate)); @@ -48,6 +76,10 @@ void EmitReturnBaseline(MacroAssembler* masm) { namespace v8 { namespace internal { +bool CanCompileWithBaseline(Isolate* isolate, SharedFunctionInfo shared) { + return false; +} + MaybeHandle<Code> GenerateBaselineCode(Isolate* isolate, Handle<SharedFunctionInfo> shared) { UNREACHABLE(); diff --git a/deps/v8/src/baseline/baseline.h b/deps/v8/src/baseline/baseline.h index 2dba2d9674..10a6e25e4f 100644 --- a/deps/v8/src/baseline/baseline.h +++ b/deps/v8/src/baseline/baseline.h @@ -14,6 +14,8 @@ class Code; class SharedFunctionInfo; class MacroAssembler; +bool CanCompileWithBaseline(Isolate* isolate, SharedFunctionInfo shared); + MaybeHandle<Code> GenerateBaselineCode(Isolate* isolate, Handle<SharedFunctionInfo> shared); diff --git a/deps/v8/src/baseline/ia32/baseline-assembler-ia32-inl.h b/deps/v8/src/baseline/ia32/baseline-assembler-ia32-inl.h index 2cd34aef71..8babb4a5b7 100644 --- a/deps/v8/src/baseline/ia32/baseline-assembler-ia32-inl.h +++ b/deps/v8/src/baseline/ia32/baseline-assembler-ia32-inl.h @@ -122,13 +122,13 @@ void BaselineAssembler::JumpIfNotSmi(Register value, Label* target, void BaselineAssembler::CallBuiltin(Builtins::Name builtin) { __ RecordCommentForOffHeapTrampoline(builtin); __ Call(__ EntryFromBuiltinIndexAsOperand(builtin)); - if (FLAG_code_comments) __ RecordComment("]"); + __ RecordComment("]"); } void BaselineAssembler::TailCallBuiltin(Builtins::Name builtin) { __ RecordCommentForOffHeapTrampoline(builtin); __ jmp(__ EntryFromBuiltinIndexAsOperand(builtin)); - if (FLAG_code_comments) __ RecordComment("]"); + __ RecordComment("]"); } void BaselineAssembler::Test(Register value, int mask) { @@ -147,7 +147,7 @@ void BaselineAssembler::CmpObjectType(Register object, } void BaselineAssembler::CmpInstanceType(Register map, InstanceType instance_type) { - if (emit_debug_code()) { + if (FLAG_debug_code) { __ movd(xmm0, eax); __ AssertNotSmi(map); __ CmpObjectType(map, MAP_TYPE, eax); @@ -320,7 +320,7 @@ void BaselineAssembler::StoreTaggedFieldWithWriteBarrier(Register target, Register scratch = scratch_scope.AcquireScratch(); DCHECK(!AreAliased(scratch, target, value)); __ mov(FieldOperand(target, offset), value); - __ RecordWriteField(target, offset, value, scratch, kDontSaveFPRegs); + __ RecordWriteField(target, offset, value, scratch, SaveFPRegsMode::kIgnore); } void BaselineAssembler::StoreTaggedFieldNoWriteBarrier(Register target, int offset, diff --git a/deps/v8/src/baseline/ia32/baseline-compiler-ia32-inl.h b/deps/v8/src/baseline/ia32/baseline-compiler-ia32-inl.h index 733c05fe18..4d09f53665 100644 --- a/deps/v8/src/baseline/ia32/baseline-compiler-ia32-inl.h +++ b/deps/v8/src/baseline/ia32/baseline-compiler-ia32-inl.h @@ -18,9 +18,9 @@ namespace baseline { void BaselineCompiler::Prologue() { DCHECK_EQ(kJSFunctionRegister, kJavaScriptCallTargetRegister); int max_frame_size = bytecode_->frame_size() + max_call_args_; - CallBuiltin(Builtins::kBaselineOutOfLinePrologue, kContextRegister, - kJSFunctionRegister, kJavaScriptCallArgCountRegister, - max_frame_size, kJavaScriptCallNewTargetRegister, bytecode_); + CallBuiltin<Builtins::kBaselineOutOfLinePrologue>( + kContextRegister, kJSFunctionRegister, kJavaScriptCallArgCountRegister, + max_frame_size, kJavaScriptCallNewTargetRegister, bytecode_); PrologueFillFrame(); } diff --git a/deps/v8/src/baseline/riscv64/baseline-assembler-riscv64-inl.h b/deps/v8/src/baseline/riscv64/baseline-assembler-riscv64-inl.h new file mode 100644 index 0000000000..e0667d3472 --- /dev/null +++ b/deps/v8/src/baseline/riscv64/baseline-assembler-riscv64-inl.h @@ -0,0 +1,615 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef V8_BASELINE_RISCV64_BASELINE_ASSEMBLER_RISCV64_INL_H_ +#define V8_BASELINE_RISCV64_BASELINE_ASSEMBLER_RISCV64_INL_H_ + +#include "src/baseline/baseline-assembler.h" +#include "src/codegen/assembler-inl.h" +#include "src/codegen/interface-descriptors.h" +namespace v8 { +namespace internal { +namespace baseline { + +constexpr Register kTestReg = t0; +class BaselineAssembler::ScratchRegisterScope { + public: + explicit ScratchRegisterScope(BaselineAssembler* assembler) + : assembler_(assembler), + prev_scope_(assembler->scratch_register_scope_), + wrapped_scope_(assembler->masm()) { + if (!assembler_->scratch_register_scope_) { + // If we haven't opened a scratch scope yet, for the first one add a + // couple of extra registers. + wrapped_scope_.Include(t2, t4); + } + assembler_->scratch_register_scope_ = this; + } + ~ScratchRegisterScope() { assembler_->scratch_register_scope_ = prev_scope_; } + + Register AcquireScratch() { return wrapped_scope_.Acquire(); } + + private: + BaselineAssembler* assembler_; + ScratchRegisterScope* prev_scope_; + UseScratchRegisterScope wrapped_scope_; +}; + +enum class Condition : uint32_t { + kEqual = eq, + kNotEqual = ne, + + kLessThan = lt, + kGreaterThan = gt, + kLessThanEqual = le, + kGreaterThanEqual = ge, + + kUnsignedLessThan = Uless, + kUnsignedGreaterThan = Ugreater, + kUnsignedLessThanEqual = Uless_equal, + kUnsignedGreaterThanEqual = Ugreater_equal, + + kOverflow = overflow, + kNoOverflow = no_overflow, + + kZero = eq, + kNotZero = ne, +}; + +inline internal::Condition AsMasmCondition(Condition cond) { + return static_cast<internal::Condition>(cond); +} + +namespace detail { + +#ifdef DEBUG +inline bool Clobbers(Register target, MemOperand op) { + return op.is_reg() && op.rm() == target; +} +#endif + +} // namespace detail + +#define __ masm_-> + +MemOperand BaselineAssembler::RegisterFrameOperand( + interpreter::Register interpreter_register) { + return MemOperand(fp, interpreter_register.ToOperand() * kSystemPointerSize); +} +MemOperand BaselineAssembler::FeedbackVectorOperand() { + return MemOperand(fp, BaselineFrameConstants::kFeedbackVectorFromFp); +} + +void BaselineAssembler::Bind(Label* label) { __ bind(label); } + +void BaselineAssembler::BindWithoutJumpTarget(Label* label) { __ bind(label); } + +void BaselineAssembler::JumpTarget() { + // Nop +} + +void BaselineAssembler::Jump(Label* target, Label::Distance distance) { + __ jmp(target); +} +void BaselineAssembler::JumpIf(Condition cc, Label* target, Label::Distance) { + __ Branch(target, AsMasmCondition(cc), kTestReg, Operand((int64_t)0)); +} +void BaselineAssembler::JumpIfRoot(Register value, RootIndex index, + Label* target, Label::Distance) { + __ JumpIfRoot(value, index, target); +} +void BaselineAssembler::JumpIfNotRoot(Register value, RootIndex index, + Label* target, Label::Distance) { + __ JumpIfNotRoot(value, index, target); +} +void BaselineAssembler::JumpIfSmi(Register value, Label* target, + Label::Distance) { + __ JumpIfSmi(value, target); +} +void BaselineAssembler::JumpIfNotSmi(Register value, Label* target, + Label::Distance) { + __ JumpIfSmi(value, target); +} + +void BaselineAssembler::CallBuiltin(Builtins::Name builtin) { + if (masm()->options().short_builtin_calls) { + __ CallBuiltin(builtin); + } else { + __ RecordCommentForOffHeapTrampoline(builtin); + Register temp = t6; + __ LoadEntryFromBuiltinIndex(builtin, temp); + __ Call(temp); + __ RecordComment("]"); + } +} + +void BaselineAssembler::TailCallBuiltin(Builtins::Name builtin) { + if (masm()->options().short_builtin_calls) { + // Generate pc-relative jump. + __ TailCallBuiltin(builtin); + } else { + __ RecordCommentForOffHeapTrampoline(builtin); + // t6 be used for function call in RISCV64 + // For example 'jalr t6' or 'jal t6' + Register temp = t6; + __ LoadEntryFromBuiltinIndex(builtin, temp); + __ Jump(temp); + __ RecordComment("]"); + } +} + +void BaselineAssembler::Test(Register value, int mask) { + __ And(kTestReg, value, Operand(mask)); +} + +void BaselineAssembler::CmpObjectType(Register object, + InstanceType instance_type, + Register map) { + ScratchRegisterScope temps(this); + Register type = temps.AcquireScratch(); + __ GetObjectType(object, map, type); + __ Sub64(kTestReg, type, Operand(instance_type)); +} +void BaselineAssembler::CmpInstanceType(Register value, + InstanceType instance_type) { + ScratchRegisterScope temps(this); + Register type = temps.AcquireScratch(); + __ Ld(type, FieldMemOperand(value, Map::kInstanceTypeOffset)); + __ Sub64(kTestReg, type, Operand(instance_type)); +} + +void BaselineAssembler::Cmp(Register value, Smi smi) { + ScratchRegisterScope temps(this); + Register temp = temps.AcquireScratch(); + __ li(temp, Operand(smi)); + __ SmiUntag(temp); + __ Sub64(kTestReg, value, temp); +} +void BaselineAssembler::ComparePointer(Register value, MemOperand operand) { + ScratchRegisterScope temps(this); + Register temp = temps.AcquireScratch(); + __ Ld(temp, operand); + __ Sub64(kTestReg, value, temp); +} + +void BaselineAssembler::SmiCompare(Register lhs, Register rhs) { + __ AssertSmi(lhs); + __ AssertSmi(rhs); + if (COMPRESS_POINTERS_BOOL) { + __ Sub32(kTestReg, lhs, rhs); + } else { + __ Sub64(kTestReg, lhs, rhs); + } +} +void BaselineAssembler::CompareTagged(Register value, MemOperand operand) { + ScratchRegisterScope temps(this); + Register tmp = temps.AcquireScratch(); + __ Ld(tmp, operand); + if (COMPRESS_POINTERS_BOOL) { + __ Sub32(kTestReg, value, tmp); + } else { + __ Sub64(kTestReg, value, tmp); + } +} +void BaselineAssembler::CompareTagged(MemOperand operand, Register value) { + ScratchRegisterScope temps(this); + Register tmp = temps.AcquireScratch(); + __ Ld(tmp, operand); + if (COMPRESS_POINTERS_BOOL) { + __ Sub32(kTestReg, tmp, value); + } else { + __ Sub64(kTestReg, tmp, value); + } +} + +void BaselineAssembler::CompareByte(Register value, int32_t byte) { + __ Sub64(kTestReg, value, Operand(byte)); +} + +void BaselineAssembler::Move(interpreter::Register output, Register source) { + Move(RegisterFrameOperand(output), source); +} +void BaselineAssembler::Move(Register output, TaggedIndex value) { + __ li(output, Operand(value.ptr())); +} +void BaselineAssembler::Move(MemOperand output, Register source) { + __ Sd(source, output); +} +void BaselineAssembler::Move(Register output, ExternalReference reference) { + __ li(output, Operand(reference)); +} +void BaselineAssembler::Move(Register output, Handle<HeapObject> value) { + __ li(output, Operand(value)); +} +void BaselineAssembler::Move(Register output, int32_t value) { + __ li(output, Operand(value)); +} +void BaselineAssembler::MoveMaybeSmi(Register output, Register source) { + __ Move(output, source); +} +void BaselineAssembler::MoveSmi(Register output, Register source) { + __ Move(output, source); +} + +namespace detail { + +template <typename Arg> +inline Register ToRegister(BaselineAssembler* basm, + BaselineAssembler::ScratchRegisterScope* scope, + Arg arg) { + Register reg = scope->AcquireScratch(); + basm->Move(reg, arg); + return reg; +} +inline Register ToRegister(BaselineAssembler* basm, + BaselineAssembler::ScratchRegisterScope* scope, + Register reg) { + return reg; +} + +template <typename... Args> +struct CountPushHelper; +template <> +struct CountPushHelper<> { + static int Count() { return 0; } +}; +template <typename Arg, typename... Args> +struct CountPushHelper<Arg, Args...> { + static int Count(Arg arg, Args... args) { + return 1 + CountPushHelper<Args...>::Count(args...); + } +}; +template <typename... Args> +struct CountPushHelper<interpreter::RegisterList, Args...> { + static int Count(interpreter::RegisterList list, Args... args) { + return list.register_count() + CountPushHelper<Args...>::Count(args...); + } +}; + +template <typename... Args> +struct PushAllHelper; +template <typename... Args> +void PushAll(BaselineAssembler* basm, Args... args) { + PushAllHelper<Args...>::Push(basm, args...); +} +template <typename... Args> +void PushAllReverse(BaselineAssembler* basm, Args... args) { + PushAllHelper<Args...>::PushReverse(basm, args...); +} + +template <> +struct PushAllHelper<> { + static void Push(BaselineAssembler* basm) {} + static void PushReverse(BaselineAssembler* basm) {} +}; + +inline void PushSingle(MacroAssembler* masm, RootIndex source) { + masm->PushRoot(source); +} +inline void PushSingle(MacroAssembler* masm, Register reg) { masm->Push(reg); } + +inline void PushSingle(MacroAssembler* masm, Smi value) { masm->Push(value); } +inline void PushSingle(MacroAssembler* masm, Handle<HeapObject> object) { + masm->Push(object); +} +inline void PushSingle(MacroAssembler* masm, int32_t immediate) { + masm->li(kScratchReg, (int64_t)(immediate)); + PushSingle(masm, kScratchReg); +} + +inline void PushSingle(MacroAssembler* masm, TaggedIndex value) { + masm->li(kScratchReg, static_cast<int64_t>(value.ptr())); + PushSingle(masm, kScratchReg); +} +inline void PushSingle(MacroAssembler* masm, MemOperand operand) { + masm->Ld(kScratchReg, operand); + PushSingle(masm, kScratchReg); +} +inline void PushSingle(MacroAssembler* masm, interpreter::Register source) { + return PushSingle(masm, BaselineAssembler::RegisterFrameOperand(source)); +} + +template <typename Arg> +struct PushAllHelper<Arg> { + static void Push(BaselineAssembler* basm, Arg arg) { + PushSingle(basm->masm(), arg); + } + static void PushReverse(BaselineAssembler* basm, Arg arg) { + // Push the padding register to round up the amount of values pushed. + return Push(basm, arg); + } +}; +template <typename Arg1, typename Arg2, typename... Args> +struct PushAllHelper<Arg1, Arg2, Args...> { + static void Push(BaselineAssembler* basm, Arg1 arg1, Arg2 arg2, + Args... args) { + { + BaselineAssembler::ScratchRegisterScope scope(basm); + basm->masm()->Push(ToRegister(basm, &scope, arg1), + ToRegister(basm, &scope, arg2)); + } + PushAll(basm, args...); + } + static void PushReverse(BaselineAssembler* basm, Arg1 arg1, Arg2 arg2, + Args... args) { + PushAllReverse(basm, args...); + { + BaselineAssembler::ScratchRegisterScope scope(basm); + basm->masm()->Push(ToRegister(basm, &scope, arg2), + ToRegister(basm, &scope, arg1)); + } + } +}; +// Currently RegisterLists are always be the last argument, so we don't +// specialize for the case where they're not. We do still specialise for the +// aligned and unaligned cases. +template <typename Arg> +struct PushAllHelper<Arg, interpreter::RegisterList> { + static void Push(BaselineAssembler* basm, Arg arg, + interpreter::RegisterList list) { + DCHECK_EQ(list.register_count() % 2, 1); + PushAll(basm, arg, list[0], list.PopLeft()); + } + static void PushReverse(BaselineAssembler* basm, Arg arg, + interpreter::RegisterList list) { + if (list.register_count() == 0) { + PushAllReverse(basm, arg); + } else { + PushAllReverse(basm, arg, list[0], list.PopLeft()); + } + } +}; +template <> +struct PushAllHelper<interpreter::RegisterList> { + static void Push(BaselineAssembler* basm, interpreter::RegisterList list) { + DCHECK_EQ(list.register_count() % 2, 0); + for (int reg_index = 0; reg_index < list.register_count(); reg_index += 2) { + PushAll(basm, list[reg_index], list[reg_index + 1]); + } + } + static void PushReverse(BaselineAssembler* basm, + interpreter::RegisterList list) { + int reg_index = list.register_count() - 1; + if (reg_index % 2 == 0) { + // Push the padding register to round up the amount of values pushed. + PushAllReverse(basm, list[reg_index]); + reg_index--; + } + for (; reg_index >= 1; reg_index -= 2) { + PushAllReverse(basm, list[reg_index - 1], list[reg_index]); + } + } +}; + +template <typename... T> +struct PopAllHelper; +template <> +struct PopAllHelper<> { + static void Pop(BaselineAssembler* basm) {} +}; +template <> +struct PopAllHelper<Register> { + static void Pop(BaselineAssembler* basm, Register reg) { + basm->masm()->Pop(reg); + } +}; +template <typename... T> +struct PopAllHelper<Register, Register, T...> { + static void Pop(BaselineAssembler* basm, Register reg1, Register reg2, + T... tail) { + basm->masm()->Pop(reg1, reg2); + PopAllHelper<T...>::Pop(basm, tail...); + } +}; + +} // namespace detail + +template <typename... T> +int BaselineAssembler::Push(T... vals) { + // We have to count the pushes first, to decide whether to add padding before + // the first push. + int push_count = detail::CountPushHelper<T...>::Count(vals...); + if (push_count % 2 == 0) { + detail::PushAll(this, vals...); + } else { + detail::PushAll(this, vals...); + } + return push_count; +} + +template <typename... T> +void BaselineAssembler::PushReverse(T... vals) { + detail::PushAllReverse(this, vals...); +} + +template <typename... T> +void BaselineAssembler::Pop(T... registers) { + detail::PopAllHelper<T...>::Pop(this, registers...); +} + +void BaselineAssembler::LoadTaggedPointerField(Register output, Register source, + int offset) { + // FIXME(riscv64): riscv64 don't implement pointer compressed + // __ LoadTaggedPointerField(output, FieldMemOperand(source, offset)); + __ Ld(output, FieldMemOperand(source, offset)); +} +void BaselineAssembler::LoadTaggedSignedField(Register output, Register source, + int offset) { + // FIXME(riscv64): riscv64 don't implement pointer compressed + __ Ld(output, FieldMemOperand(source, offset)); +} +void BaselineAssembler::LoadTaggedAnyField(Register output, Register source, + int offset) { + // FIXME(riscv64): riscv64 don't implement pointer compressed + __ Ld(output, FieldMemOperand(source, offset)); +} +void BaselineAssembler::LoadByteField(Register output, Register source, + int offset) { + __ Ld(output, FieldMemOperand(source, offset)); +} +void BaselineAssembler::StoreTaggedSignedField(Register target, int offset, + Smi value) { + ScratchRegisterScope temps(this); + Register tmp = temps.AcquireScratch(); + __ li(tmp, Operand(value)); + // FIXME(riscv64): riscv64 don't implement pointer compressed + __ Sd(tmp, FieldMemOperand(target, offset)); +} +void BaselineAssembler::StoreTaggedFieldWithWriteBarrier(Register target, + int offset, + Register value) { + // FIXME(riscv64): riscv64 don't implement pointer compressed + __ Sd(value, FieldMemOperand(target, offset)); + ScratchRegisterScope temps(this); + Register tmp = temps.AcquireScratch(); + __ RecordWriteField(target, offset, value, tmp, kRAHasNotBeenSaved, + SaveFPRegsMode::kIgnore); +} +void BaselineAssembler::StoreTaggedFieldNoWriteBarrier(Register target, + int offset, + Register value) { + // FIXME(riscv64): riscv64 don't implement pointer compressed + __ Sd(value, FieldMemOperand(target, offset)); +} + +void BaselineAssembler::AddToInterruptBudget(int32_t weight) { + ScratchRegisterScope scratch_scope(this); + Register feedback_cell = scratch_scope.AcquireScratch(); + LoadFunction(feedback_cell); + LoadTaggedPointerField(feedback_cell, feedback_cell, + JSFunction::kFeedbackCellOffset); + + Register interrupt_budget = scratch_scope.AcquireScratch(); + __ Ld(interrupt_budget, + FieldMemOperand(feedback_cell, FeedbackCell::kInterruptBudgetOffset)); + // Remember to set flags as part of the add! + __ Add64(interrupt_budget, interrupt_budget, weight); + __ Sd(interrupt_budget, + FieldMemOperand(feedback_cell, FeedbackCell::kInterruptBudgetOffset)); +} + +void BaselineAssembler::AddToInterruptBudget(Register weight) { + ScratchRegisterScope scratch_scope(this); + Register feedback_cell = scratch_scope.AcquireScratch(); + LoadFunction(feedback_cell); + LoadTaggedPointerField(feedback_cell, feedback_cell, + JSFunction::kFeedbackCellOffset); + + Register interrupt_budget = scratch_scope.AcquireScratch(); + __ Ld(interrupt_budget, + FieldMemOperand(feedback_cell, FeedbackCell::kInterruptBudgetOffset)); + // Remember to set flags as part of the add! + __ Add64(interrupt_budget, interrupt_budget, weight); + __ Sd(interrupt_budget, + FieldMemOperand(feedback_cell, FeedbackCell::kInterruptBudgetOffset)); +} + +void BaselineAssembler::AddSmi(Register lhs, Smi rhs) { + if (SmiValuesAre31Bits()) { + __ Add32(lhs, lhs, Operand(rhs)); + } else { + __ Add64(lhs, lhs, Operand(rhs)); + } +} + +void BaselineAssembler::Switch(Register reg, int case_value_base, + Label** labels, int num_labels) { + Label fallthrough; + if (case_value_base > 0) { + __ Sub64(reg, reg, Operand(case_value_base)); + } + + // Mostly copied from code-generator-riscv64.cc + ScratchRegisterScope scope(this); + Register temp = scope.AcquireScratch(); + Label table; + __ Branch(&fallthrough, AsMasmCondition(Condition::kUnsignedGreaterThanEqual), + reg, Operand(int64_t(num_labels))); + int64_t imm64; + imm64 = __ branch_long_offset(&table); + DCHECK(is_int32(imm64)); + int32_t Hi20 = (((int32_t)imm64 + 0x800) >> 12); + int32_t Lo12 = (int32_t)imm64 << 20 >> 20; + __ auipc(temp, Hi20); // Read PC + Hi20 into t6 + __ lui(temp, Lo12); // jump PC + Hi20 + Lo12 + + int entry_size_log2 = 2; + Register temp2 = scope.AcquireScratch(); + __ CalcScaledAddress(temp2, temp, reg, entry_size_log2); + __ Jump(temp); + { + TurboAssembler::BlockTrampolinePoolScope(masm()); + __ BlockTrampolinePoolFor(num_labels * kInstrSize); + __ bind(&table); + for (int i = 0; i < num_labels; ++i) { + __ Branch(labels[i]); + } + DCHECK_EQ(num_labels * kInstrSize, __ InstructionsGeneratedSince(&table)); + __ bind(&fallthrough); + } +} + +#undef __ + +#define __ basm. + +void BaselineAssembler::EmitReturn(MacroAssembler* masm) { + BaselineAssembler basm(masm); + + Register weight = BaselineLeaveFrameDescriptor::WeightRegister(); + Register params_size = BaselineLeaveFrameDescriptor::ParamsSizeRegister(); + + __ RecordComment("[ Update Interrupt Budget"); + __ AddToInterruptBudget(weight); + + // Use compare flags set by add + Label skip_interrupt_label; + __ JumpIf(Condition::kGreaterThanEqual, &skip_interrupt_label); + { + __ masm()->SmiTag(params_size); + __ masm()->Push(params_size, kInterpreterAccumulatorRegister); + + __ LoadContext(kContextRegister); + __ LoadFunction(kJSFunctionRegister); + __ masm()->Push(kJSFunctionRegister); + __ CallRuntime(Runtime::kBytecodeBudgetInterruptFromBytecode, 1); + + __ masm()->Pop(kInterpreterAccumulatorRegister, params_size); + __ masm()->SmiUntag(params_size); + } + __ RecordComment("]"); + + __ Bind(&skip_interrupt_label); + + BaselineAssembler::ScratchRegisterScope temps(&basm); + Register actual_params_size = temps.AcquireScratch(); + // Compute the size of the actual parameters + receiver (in bytes). + __ Move(actual_params_size, + MemOperand(fp, StandardFrameConstants::kArgCOffset)); + + // If actual is bigger than formal, then we should use it to free up the stack + // arguments. + Label corrected_args_count; + __ masm()->Branch(&corrected_args_count, ge, params_size, + Operand(actual_params_size)); + __ masm()->Move(params_size, actual_params_size); + __ Bind(&corrected_args_count); + + // Leave the frame (also dropping the register file). + __ masm()->LeaveFrame(StackFrame::BASELINE); + + // Drop receiver + arguments. + __ masm()->Add64(params_size, params_size, 1); // Include the receiver. + __ masm()->slli(params_size, params_size, kPointerSizeLog2); + __ masm()->Add64(sp, sp, params_size); + __ masm()->Ret(); +} + +#undef __ + +} // namespace baseline +} // namespace internal +} // namespace v8 + +#endif // V8_BASELINE_RISCV64_BASELINE_ASSEMBLER_RISCV64_INL_H_ diff --git a/deps/v8/src/baseline/riscv64/baseline-compiler-riscv64-inl.h b/deps/v8/src/baseline/riscv64/baseline-compiler-riscv64-inl.h new file mode 100644 index 0000000000..98ca62e303 --- /dev/null +++ b/deps/v8/src/baseline/riscv64/baseline-compiler-riscv64-inl.h @@ -0,0 +1,112 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef V8_BASELINE_RISCV64_BASELINE_COMPILER_RISCV64_INL_H_ +#define V8_BASELINE_RISCV64_BASELINE_COMPILER_RISCV64_INL_H_ + +#include "src/baseline/baseline-compiler.h" + +namespace v8 { +namespace internal { +namespace baseline { + +#define __ basm_. + +void BaselineCompiler::Prologue() { + // Enter the frame here, since CallBuiltin will override lr. + __ masm()->EnterFrame(StackFrame::BASELINE); + DCHECK_EQ(kJSFunctionRegister, kJavaScriptCallTargetRegister); + int max_frame_size = bytecode_->frame_size() + max_call_args_; + CallBuiltin<Builtins::kBaselineOutOfLinePrologue>( + kContextRegister, kJSFunctionRegister, kJavaScriptCallArgCountRegister, + max_frame_size, kJavaScriptCallNewTargetRegister, bytecode_); + PrologueFillFrame(); +} + +void BaselineCompiler::PrologueFillFrame() { + __ RecordComment("[ Fill frame"); + // Inlined register frame fill + interpreter::Register new_target_or_generator_register = + bytecode_->incoming_new_target_or_generator_register(); + __ LoadRoot(kInterpreterAccumulatorRegister, RootIndex::kUndefinedValue); + int register_count = bytecode_->register_count(); + // Magic value + const int kLoopUnrollSize = 8; + const int new_target_index = new_target_or_generator_register.index(); + const bool has_new_target = new_target_index != kMaxInt; + // BaselineOutOfLinePrologue already pushed one undefined. + register_count -= 1; + if (has_new_target) { + if (new_target_index == 0) { + // Oops, need to fix up that undefined that BaselineOutOfLinePrologue + // pushed. + __ masm()->Sd(kJavaScriptCallNewTargetRegister, MemOperand(sp)); + } else { + DCHECK_LE(new_target_index, register_count); + int index = 1; + for (; index + 2 <= new_target_index; index += 2) { + __ masm()->Push(kInterpreterAccumulatorRegister, + kInterpreterAccumulatorRegister); + } + if (index == new_target_index) { + __ masm()->Push(kJavaScriptCallNewTargetRegister, + kInterpreterAccumulatorRegister); + } else { + DCHECK_EQ(index, new_target_index - 1); + __ masm()->Push(kInterpreterAccumulatorRegister, + kJavaScriptCallNewTargetRegister); + } + // We pushed "index" registers, minus the one the prologue pushed, plus + // the two registers that included new_target. + register_count -= (index - 1 + 2); + } + } + if (register_count < 2 * kLoopUnrollSize) { + // If the frame is small enough, just unroll the frame fill completely. + for (int i = 0; i < register_count; i += 2) { + __ masm()->Push(kInterpreterAccumulatorRegister, + kInterpreterAccumulatorRegister); + } + } else { + BaselineAssembler::ScratchRegisterScope temps(&basm_); + Register scratch = temps.AcquireScratch(); + + // Extract the first few registers to round to the unroll size. + int first_registers = register_count % kLoopUnrollSize; + for (int i = 0; i < first_registers; i += 2) { + __ masm()->Push(kInterpreterAccumulatorRegister, + kInterpreterAccumulatorRegister); + } + __ Move(scratch, register_count / kLoopUnrollSize); + // We enter the loop unconditionally, so make sure we need to loop at least + // once. + DCHECK_GT(register_count / kLoopUnrollSize, 0); + Label loop; + __ Bind(&loop); + for (int i = 0; i < kLoopUnrollSize; i += 2) { + __ masm()->Push(kInterpreterAccumulatorRegister, + kInterpreterAccumulatorRegister); + } + __ masm()->Sub64(scratch, scratch, 1); + __ JumpIf(Condition::kGreaterThan, &loop); + } + __ RecordComment("]"); +} + +void BaselineCompiler::VerifyFrameSize() { + __ masm()->Add64(kScratchReg, sp, + RoundUp(InterpreterFrameConstants::kFixedFrameSizeFromFp + + bytecode_->frame_size(), + 2 * kSystemPointerSize)); + __ masm()->Assert(eq, AbortReason::kUnexpectedStackPointer, kScratchReg, + Operand(fp)); +} + +#undef __ + +} // namespace baseline +} // namespace internal +} // namespace v8 + +#endif // V8_BASELINE_RISCV64_BASELINE_COMPILER_RISCV64_INL_H_ diff --git a/deps/v8/src/baseline/x64/baseline-assembler-x64-inl.h b/deps/v8/src/baseline/x64/baseline-assembler-x64-inl.h index 202f83c761..98ed29a9ca 100644 --- a/deps/v8/src/baseline/x64/baseline-assembler-x64-inl.h +++ b/deps/v8/src/baseline/x64/baseline-assembler-x64-inl.h @@ -7,7 +7,6 @@ #include "src/base/macros.h" #include "src/baseline/baseline-assembler.h" -#include "src/codegen/interface-descriptors.h" #include "src/codegen/x64/register-x64.h" namespace v8 { @@ -129,7 +128,7 @@ void BaselineAssembler::CallBuiltin(Builtins::Name builtin) { } else { __ RecordCommentForOffHeapTrampoline(builtin); __ Call(__ EntryFromBuiltinIndexAsOperand(builtin)); - if (FLAG_code_comments) __ RecordComment("]"); + __ RecordComment("]"); } } @@ -140,7 +139,7 @@ void BaselineAssembler::TailCallBuiltin(Builtins::Name builtin) { } else { __ RecordCommentForOffHeapTrampoline(builtin); __ Jump(__ EntryFromBuiltinIndexAsOperand(builtin)); - if (FLAG_code_comments) __ RecordComment("]"); + __ RecordComment("]"); } } @@ -160,7 +159,7 @@ void BaselineAssembler::CmpObjectType(Register object, } void BaselineAssembler::CmpInstanceType(Register map, InstanceType instance_type) { - if (emit_debug_code()) { + if (FLAG_debug_code) { __ AssertNotSmi(map); __ CmpObjectType(map, MAP_TYPE, kScratchRegister); __ Assert(equal, AbortReason::kUnexpectedValue); @@ -201,7 +200,7 @@ void BaselineAssembler::Move(Register output, Handle<HeapObject> value) { __ Move(output, value); } void BaselineAssembler::Move(Register output, int32_t value) { - __ Move(output, Immediate(value)); + __ Move(output, value); } void BaselineAssembler::MoveMaybeSmi(Register output, Register source) { __ mov_tagged(output, source); @@ -326,7 +325,7 @@ void BaselineAssembler::StoreTaggedFieldWithWriteBarrier(Register target, DCHECK_NE(target, scratch); DCHECK_NE(value, scratch); __ StoreTaggedField(FieldOperand(target, offset), value); - __ RecordWriteField(target, offset, value, scratch, kDontSaveFPRegs); + __ RecordWriteField(target, offset, value, scratch, SaveFPRegsMode::kIgnore); } void BaselineAssembler::StoreTaggedFieldNoWriteBarrier(Register target, int offset, diff --git a/deps/v8/src/baseline/x64/baseline-compiler-x64-inl.h b/deps/v8/src/baseline/x64/baseline-compiler-x64-inl.h index 73b43770e5..a4d547b067 100644 --- a/deps/v8/src/baseline/x64/baseline-compiler-x64-inl.h +++ b/deps/v8/src/baseline/x64/baseline-compiler-x64-inl.h @@ -18,9 +18,9 @@ namespace baseline { void BaselineCompiler::Prologue() { DCHECK_EQ(kJSFunctionRegister, kJavaScriptCallTargetRegister); int max_frame_size = bytecode_->frame_size() + max_call_args_; - CallBuiltin(Builtins::kBaselineOutOfLinePrologue, kContextRegister, - kJSFunctionRegister, kJavaScriptCallArgCountRegister, - max_frame_size, kJavaScriptCallNewTargetRegister, bytecode_); + CallBuiltin<Builtins::kBaselineOutOfLinePrologue>( + kContextRegister, kJSFunctionRegister, kJavaScriptCallArgCountRegister, + max_frame_size, kJavaScriptCallNewTargetRegister, bytecode_); PrologueFillFrame(); } diff --git a/deps/v8/src/bigint/bigint-internal.cc b/deps/v8/src/bigint/bigint-internal.cc new file mode 100644 index 0000000000..6630c6c4c9 --- /dev/null +++ b/deps/v8/src/bigint/bigint-internal.cc @@ -0,0 +1,43 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "src/bigint/bigint-internal.h" + +namespace v8 { +namespace bigint { + +ProcessorImpl::ProcessorImpl(Platform* platform) : platform_(platform) {} + +ProcessorImpl::~ProcessorImpl() { delete platform_; } + +Status ProcessorImpl::get_and_clear_status() { + Status result = status_; + status_ = Status::kOk; + return result; +} + +Processor* Processor::New(Platform* platform) { + ProcessorImpl* impl = new ProcessorImpl(platform); + return static_cast<Processor*>(impl); +} + +void Processor::Destroy() { delete static_cast<ProcessorImpl*>(this); } + +void ProcessorImpl::Multiply(RWDigits Z, Digits X, Digits Y) { + X.Normalize(); + Y.Normalize(); + if (X.len() == 0 || Y.len() == 0) return Z.Clear(); + if (X.len() < Y.len()) std::swap(X, Y); + if (Y.len() == 1) return MultiplySingle(Z, X, Y[0]); + return MultiplySchoolbook(Z, X, Y); +} + +Status Processor::Multiply(RWDigits Z, Digits X, Digits Y) { + ProcessorImpl* impl = static_cast<ProcessorImpl*>(this); + impl->Multiply(Z, X, Y); + return impl->get_and_clear_status(); +} + +} // namespace bigint +} // namespace v8 diff --git a/deps/v8/src/bigint/bigint-internal.h b/deps/v8/src/bigint/bigint-internal.h new file mode 100644 index 0000000000..efe63a06a5 --- /dev/null +++ b/deps/v8/src/bigint/bigint-internal.h @@ -0,0 +1,65 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef V8_BIGINT_BIGINT_INTERNAL_H_ +#define V8_BIGINT_BIGINT_INTERNAL_H_ + +#include "src/bigint/bigint.h" + +namespace v8 { +namespace bigint { + +class ProcessorImpl : public Processor { + public: + explicit ProcessorImpl(Platform* platform); + ~ProcessorImpl(); + + Status get_and_clear_status(); + + void Multiply(RWDigits Z, Digits X, Digits Y); + void MultiplySingle(RWDigits Z, Digits X, digit_t y); + void MultiplySchoolbook(RWDigits Z, Digits X, Digits Y); + + private: + // Each unit is supposed to represent approximately one CPU {mul} instruction. + // Doesn't need to be accurate; we just want to make sure to check for + // interrupt requests every now and then (roughly every 10-100 ms; often + // enough not to appear stuck, rarely enough not to cause noticeable + // overhead). + static const uintptr_t kWorkEstimateThreshold = 5000000; + + void AddWorkEstimate(uintptr_t estimate) { + work_estimate_ += estimate; + if (work_estimate_ >= kWorkEstimateThreshold) { + work_estimate_ = 0; + if (platform_->InterruptRequested()) { + status_ = Status::kInterrupted; + } + } + } + + bool should_terminate() { return status_ == Status::kInterrupted; } + + uintptr_t work_estimate_{0}; + Status status_{Status::kOk}; + Platform* platform_; +}; + +#define CHECK(cond) \ + if (!(cond)) { \ + std::cerr << __FILE__ << ":" << __LINE__ << ": "; \ + std::cerr << "Assertion failed: " #cond "\n"; \ + abort(); \ + } + +#ifdef DEBUG +#define DCHECK(cond) CHECK(cond) +#else +#define DCHECK(cond) (void(0)) +#endif + +} // namespace bigint +} // namespace v8 + +#endif // V8_BIGINT_BIGINT_INTERNAL_H_ diff --git a/deps/v8/src/bigint/bigint.h b/deps/v8/src/bigint/bigint.h index a87622b167..a365359c53 100644 --- a/deps/v8/src/bigint/bigint.h +++ b/deps/v8/src/bigint/bigint.h @@ -120,9 +120,117 @@ class Digits { } }; +// Writable version of a Digits array. +// Does not own the memory it points at. +class RWDigits : public Digits { + public: + RWDigits(digit_t* mem, int len) : Digits(mem, len) {} + RWDigits(RWDigits src, int offset, int len) : Digits(src, offset, len) {} + RWDigits operator+(int i) { + BIGINT_H_DCHECK(i >= 0 && i <= len_); + return RWDigits(digits_ + i, len_ - i); + } + +#if UINTPTR_MAX == 0xFFFFFFFF + digit_t& operator[](int i) { + BIGINT_H_DCHECK(i >= 0 && i < len_); + return digits_[i]; + } +#else + // 64-bit platform. We only require digits arrays to be 4-byte aligned, + // so we use a wrapper class to allow regular array syntax while + // performing unaligned memory accesses under the hood. + class WritableDigitReference { + public: + // Support "X[i] = x" notation. + void operator=(digit_t digit) { memcpy(ptr_, &digit, sizeof(digit)); } + // Support "X[i] = Y[j]" notation. + WritableDigitReference& operator=(const WritableDigitReference& src) { + memcpy(ptr_, src.ptr_, sizeof(digit_t)); + return *this; + } + // Support "x = X[i]" notation. + operator digit_t() { + digit_t result; + memcpy(&result, ptr_, sizeof(result)); + return result; + } + + private: + // This class is not for public consumption. + friend class RWDigits; + // Primary constructor. + explicit WritableDigitReference(digit_t* ptr) + : ptr_(reinterpret_cast<uint32_t*>(ptr)) {} + // Required for returning WDR instances from "operator[]" below. + WritableDigitReference(const WritableDigitReference& src) = default; + + uint32_t* ptr_; + }; + + WritableDigitReference operator[](int i) { + BIGINT_H_DCHECK(i >= 0 && i < len_); + return WritableDigitReference(digits_ + i); + } +#endif + + digit_t* digits() { return digits_; } + void set_len(int len) { len_ = len; } + + void Clear() { memset(digits_, 0, len_ * sizeof(digit_t)); } +}; + +class Platform { + public: + virtual ~Platform() = default; + + // If you want the ability to interrupt long-running operations, implement + // a Platform subclass that overrides this method. It will be queried + // every now and then by long-running operations. + virtual bool InterruptRequested() { return false; } +}; + +// These are the operations that this library supports. +// The signatures follow the convention: +// +// void Operation(RWDigits results, Digits inputs); +// +// You must preallocate the result; use the respective {OperationResultLength} +// function to determine its minimum required length. The actual result may +// be smaller, so you should call result.Normalize() on the result. +// +// The operations are divided into two groups: "fast" (O(n) with small +// coefficient) operations are exposed directly as free functions, "slow" +// operations are methods on a {BigIntProcessor} object, which provides +// support for interrupting execution via the {Platform}'s {InterruptRequested} +// mechanism when it takes too long. These functions return a {Status} value. + // Returns r such that r < 0 if A < B; r > 0 if A > B; r == 0 if A == B. int Compare(Digits A, Digits B); +enum class Status { kOk, kInterrupted }; + +class Processor { + public: + // Takes ownership of {platform}. + static Processor* New(Platform* platform); + + // Use this for any std::unique_ptr holding an instance of BigIntProcessor. + class Destroyer { + public: + void operator()(Processor* proc) { proc->Destroy(); } + }; + // When not using std::unique_ptr, call this to delete the instance. + void Destroy(); + + // Z := X * Y + Status Multiply(RWDigits Z, Digits X, Digits Y); +}; + +inline int MultiplyResultLength(Digits X, Digits Y) { + return X.len() + Y.len(); +} + } // namespace bigint } // namespace v8 diff --git a/deps/v8/src/bigint/digit-arithmetic.h b/deps/v8/src/bigint/digit-arithmetic.h new file mode 100644 index 0000000000..1c5c93c035 --- /dev/null +++ b/deps/v8/src/bigint/digit-arithmetic.h @@ -0,0 +1,87 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Helper functions that operate on individual digits. + +#ifndef V8_BIGINT_DIGIT_ARITHMETIC_H_ +#define V8_BIGINT_DIGIT_ARITHMETIC_H_ + +#include "src/bigint/bigint.h" + +namespace v8 { +namespace bigint { + +static constexpr int kHalfDigitBits = kDigitBits / 2; +static constexpr digit_t kHalfDigitBase = digit_t{1} << kHalfDigitBits; +static constexpr digit_t kHalfDigitMask = kHalfDigitBase - 1; + +// {carry} will be set to 0 or 1. +inline digit_t digit_add2(digit_t a, digit_t b, digit_t* carry) { +#if HAVE_TWODIGIT_T + twodigit_t result = twodigit_t{a} + b; + *carry = result >> kDigitBits; + return static_cast<digit_t>(result); +#else + digit_t result = a + b; + *carry = (result < a) ? 1 : 0; + return result; +#endif +} + +// This compiles to slightly better machine code than repeated invocations +// of {digit_add2}. +inline digit_t digit_add3(digit_t a, digit_t b, digit_t c, digit_t* carry) { +#if HAVE_TWODIGIT_T + twodigit_t result = twodigit_t{a} + b + c; + *carry = result >> kDigitBits; + return static_cast<digit_t>(result); +#else + digit_t result = a + b; + *carry = (result < a) ? 1 : 0; + result += c; + if (result < c) *carry += 1; + return result; +#endif +} + +// Returns the low half of the result. High half is in {high}. +inline digit_t digit_mul(digit_t a, digit_t b, digit_t* high) { +#if HAVE_TWODIGIT_T + twodigit_t result = twodigit_t{a} * b; + *high = result >> kDigitBits; + return static_cast<digit_t>(result); +#else + // Multiply in half-pointer-sized chunks. + // For inputs [AH AL]*[BH BL], the result is: + // + // [AL*BL] // r_low + // + [AL*BH] // r_mid1 + // + [AH*BL] // r_mid2 + // + [AH*BH] // r_high + // = [R4 R3 R2 R1] // high = [R4 R3], low = [R2 R1] + // + // Where of course we must be careful with carries between the columns. + digit_t a_low = a & kHalfDigitMask; + digit_t a_high = a >> kHalfDigitBits; + digit_t b_low = b & kHalfDigitMask; + digit_t b_high = b >> kHalfDigitBits; + + digit_t r_low = a_low * b_low; + digit_t r_mid1 = a_low * b_high; + digit_t r_mid2 = a_high * b_low; + digit_t r_high = a_high * b_high; + + digit_t carry = 0; + digit_t low = digit_add3(r_low, r_mid1 << kHalfDigitBits, + r_mid2 << kHalfDigitBits, &carry); + *high = + (r_mid1 >> kHalfDigitBits) + (r_mid2 >> kHalfDigitBits) + r_high + carry; + return low; +#endif +} + +} // namespace bigint +} // namespace v8 + +#endif // V8_BIGINT_DIGIT_ARITHMETIC_H_ diff --git a/deps/v8/src/bigint/mul-schoolbook.cc b/deps/v8/src/bigint/mul-schoolbook.cc new file mode 100644 index 0000000000..8e10685018 --- /dev/null +++ b/deps/v8/src/bigint/mul-schoolbook.cc @@ -0,0 +1,99 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "src/bigint/bigint-internal.h" +#include "src/bigint/digit-arithmetic.h" +#include "src/bigint/vector-arithmetic.h" + +namespace v8 { +namespace bigint { + +// Z := X * y, where y is a single digit. +void ProcessorImpl::MultiplySingle(RWDigits Z, Digits X, digit_t y) { + DCHECK(y != 0); // NOLINT(readability/check) + digit_t carry = 0; + digit_t high = 0; + for (int i = 0; i < X.len(); i++) { + digit_t new_high; + digit_t low = digit_mul(X[i], y, &new_high); + Z[i] = digit_add3(low, high, carry, &carry); + high = new_high; + } + AddWorkEstimate(X.len()); + Z[X.len()] = carry + high; + for (int i = X.len() + 1; i < Z.len(); i++) Z[i] = 0; +} + +#define BODY(min, max) \ + for (int j = min; j <= max; j++) { \ + digit_t high; \ + digit_t low = digit_mul(X[j], Y[i - j], &high); \ + digit_t carrybit; \ + zi = digit_add2(zi, low, &carrybit); \ + carry += carrybit; \ + next = digit_add2(next, high, &carrybit); \ + next_carry += carrybit; \ + } \ + Z[i] = zi + +// Z := X * Y. +// O(n²) "schoolbook" multiplication algorithm. Optimized to minimize +// bounds and overflow checks: rather than looping over X for every digit +// of Y (or vice versa), we loop over Z. The {BODY} macro above is what +// computes one of Z's digits as a sum of the products of relevant digits +// of X and Y. This yields a nearly 2x improvement compared to more obvious +// implementations. +// This method is *highly* performance sensitive even for the advanced +// algorithms, which use this as the base case of their recursive calls. +void ProcessorImpl::MultiplySchoolbook(RWDigits Z, Digits X, Digits Y) { + DCHECK(IsDigitNormalized(X)); + DCHECK(IsDigitNormalized(Y)); + DCHECK(X.len() >= Y.len()); + DCHECK(Z.len() >= X.len() + Y.len()); + if (X.len() == 0 || Y.len() == 0) return Z.Clear(); + digit_t next, next_carry = 0, carry = 0; + // Unrolled first iteration: it's trivial. + Z[0] = digit_mul(X[0], Y[0], &next); + int i = 1; + // Unrolled second iteration: a little less setup. + if (i < Y.len()) { + digit_t zi = next; + next = 0; + BODY(0, 1); + i++; + } + // Main part: since X.len() >= Y.len() > i, no bounds checks are needed. + for (; i < Y.len(); i++) { + digit_t zi = digit_add2(next, carry, &carry); + next = next_carry + carry; + carry = 0; + next_carry = 0; + BODY(0, i); + AddWorkEstimate(i); + if (should_terminate()) return; + } + // Last part: i exceeds Y now, we have to be careful about bounds. + int loop_end = X.len() + Y.len() - 2; + for (; i <= loop_end; i++) { + int max_x_index = std::min(i, X.len() - 1); + int max_y_index = Y.len() - 1; + int min_x_index = i - max_y_index; + digit_t zi = digit_add2(next, carry, &carry); + next = next_carry + carry; + carry = 0; + next_carry = 0; + BODY(min_x_index, max_x_index); + AddWorkEstimate(max_x_index - min_x_index); + if (should_terminate()) return; + } + // Write the last digit, and zero out any extra space in Z. + Z[i++] = digit_add2(next, carry, &carry); + DCHECK(carry == 0); // NOLINT(readability/check) + for (; i < Z.len(); i++) Z[i] = 0; +} + +#undef BODY + +} // namespace bigint +} // namespace v8 diff --git a/deps/v8/src/bigint/vector-arithmetic.cc b/deps/v8/src/bigint/vector-arithmetic.cc index 9a28b168ba..734b443911 100644 --- a/deps/v8/src/bigint/vector-arithmetic.cc +++ b/deps/v8/src/bigint/vector-arithmetic.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "src/bigint/bigint.h" +#include "src/bigint/vector-arithmetic.h" namespace v8 { namespace bigint { diff --git a/deps/v8/src/bigint/vector-arithmetic.h b/deps/v8/src/bigint/vector-arithmetic.h new file mode 100644 index 0000000000..617cb20b55 --- /dev/null +++ b/deps/v8/src/bigint/vector-arithmetic.h @@ -0,0 +1,20 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Helper functions that operate on {Digits} vectors of digits. + +#ifndef V8_BIGINT_VECTOR_ARITHMETIC_H_ +#define V8_BIGINT_VECTOR_ARITHMETIC_H_ + +#include "src/bigint/bigint.h" + +namespace v8 { +namespace bigint { + +inline bool IsDigitNormalized(Digits X) { return X.len() == 0 || X.msd() != 0; } + +} // namespace bigint +} // namespace v8 + +#endif // V8_BIGINT_VECTOR_ARITHMETIC_H_ diff --git a/deps/v8/src/builtins/accessors.cc b/deps/v8/src/builtins/accessors.cc index c255184cae..0285b33e1f 100644 --- a/deps/v8/src/builtins/accessors.cc +++ b/deps/v8/src/builtins/accessors.cc @@ -113,8 +113,7 @@ void Accessors::ReconfigureToDataProperty( v8::Local<v8::Name> key, v8::Local<v8::Value> val, const v8::PropertyCallbackInfo<v8::Boolean>& info) { i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); - RuntimeCallTimerScope stats_scope( - isolate, RuntimeCallCounterId::kReconfigureToDataProperty); + RCS_SCOPE(isolate, RuntimeCallCounterId::kReconfigureToDataProperty); HandleScope scope(isolate); Handle<Object> receiver = Utils::OpenHandle(*info.This()); Handle<JSObject> holder = @@ -155,8 +154,7 @@ Handle<AccessorInfo> Accessors::MakeArgumentsIteratorInfo(Isolate* isolate) { void Accessors::ArrayLengthGetter( v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) { i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); - RuntimeCallTimerScope timer(isolate, - RuntimeCallCounterId::kArrayLengthGetter); + RCS_SCOPE(isolate, RuntimeCallCounterId::kArrayLengthGetter); DisallowGarbageCollection no_gc; HandleScope scope(isolate); JSArray holder = JSArray::cast(*Utils::OpenHandle(*info.Holder())); @@ -168,8 +166,7 @@ void Accessors::ArrayLengthSetter( v8::Local<v8::Name> name, v8::Local<v8::Value> val, const v8::PropertyCallbackInfo<v8::Boolean>& info) { i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); - RuntimeCallTimerScope timer(isolate, - RuntimeCallCounterId::kArrayLengthSetter); + RCS_SCOPE(isolate, RuntimeCallCounterId::kArrayLengthSetter); HandleScope scope(isolate); DCHECK(Utils::OpenHandle(*name)->SameValue( @@ -206,7 +203,12 @@ void Accessors::ArrayLengthSetter( return; } - JSArray::SetLength(array, length); + if (JSArray::SetLength(array, length).IsNothing()) { + // TODO(victorgomes): AccessorNameBooleanSetterCallback does not handle + // exceptions. + FATAL("Fatal JavaScript invalid array length %u", length); + UNREACHABLE(); + } uint32_t actual_new_len = 0; CHECK(array->length().ToArrayLength(&actual_new_len)); @@ -282,8 +284,7 @@ Handle<AccessorInfo> Accessors::MakeModuleNamespaceEntryInfo( void Accessors::StringLengthGetter( v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) { i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); - RuntimeCallTimerScope timer(isolate, - RuntimeCallCounterId::kStringLengthGetter); + RCS_SCOPE(isolate, RuntimeCallCounterId::kStringLengthGetter); DisallowGarbageCollection no_gc; HandleScope scope(isolate); @@ -330,8 +331,7 @@ static Handle<Object> GetFunctionPrototype(Isolate* isolate, void Accessors::FunctionPrototypeGetter( v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) { i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); - RuntimeCallTimerScope timer(isolate, - RuntimeCallCounterId::kFunctionPrototypeGetter); + RCS_SCOPE(isolate, RuntimeCallCounterId::kFunctionPrototypeGetter); HandleScope scope(isolate); Handle<JSFunction> function = Handle<JSFunction>::cast(Utils::OpenHandle(*info.Holder())); @@ -344,8 +344,7 @@ void Accessors::FunctionPrototypeSetter( v8::Local<v8::Name> name, v8::Local<v8::Value> val, const v8::PropertyCallbackInfo<v8::Boolean>& info) { i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); - RuntimeCallTimerScope timer(isolate, - RuntimeCallCounterId::kFunctionPrototypeSetter); + RCS_SCOPE(isolate, RuntimeCallCounterId::kFunctionPrototypeSetter); HandleScope scope(isolate); Handle<Object> value = Utils::OpenHandle(*val); Handle<JSFunction> object = @@ -367,8 +366,7 @@ Handle<AccessorInfo> Accessors::MakeFunctionPrototypeInfo(Isolate* isolate) { void Accessors::FunctionLengthGetter( v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) { i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); - RuntimeCallTimerScope timer(isolate, - RuntimeCallCounterId::kFunctionLengthGetter); + RCS_SCOPE(isolate, RuntimeCallCounterId::kFunctionLengthGetter); HandleScope scope(isolate); Handle<JSFunction> function = Handle<JSFunction>::cast(Utils::OpenHandle(*info.Holder())); @@ -722,8 +720,7 @@ Handle<AccessorInfo> Accessors::MakeFunctionCallerInfo(Isolate* isolate) { void Accessors::BoundFunctionLengthGetter( v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) { i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); - RuntimeCallTimerScope timer(isolate, - RuntimeCallCounterId::kBoundFunctionLengthGetter); + RCS_SCOPE(isolate, RuntimeCallCounterId::kBoundFunctionLengthGetter); HandleScope scope(isolate); Handle<JSBoundFunction> function = Handle<JSBoundFunction>::cast(Utils::OpenHandle(*info.Holder())); @@ -749,8 +746,7 @@ Handle<AccessorInfo> Accessors::MakeBoundFunctionLengthInfo(Isolate* isolate) { void Accessors::BoundFunctionNameGetter( v8::Local<v8::Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) { i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); - RuntimeCallTimerScope timer(isolate, - RuntimeCallCounterId::kBoundFunctionNameGetter); + RCS_SCOPE(isolate, RuntimeCallCounterId::kBoundFunctionNameGetter); HandleScope scope(isolate); Handle<JSBoundFunction> function = Handle<JSBoundFunction>::cast(Utils::OpenHandle(*info.Holder())); diff --git a/deps/v8/src/builtins/aggregate-error.tq b/deps/v8/src/builtins/aggregate-error.tq index 9c70ffcb00..c811403274 100644 --- a/deps/v8/src/builtins/aggregate-error.tq +++ b/deps/v8/src/builtins/aggregate-error.tq @@ -19,8 +19,9 @@ transitioning javascript builtin AggregateErrorConstructor( // [[Writable]]: *true*, [[Enumerable]]: *false*, [[Configurable]]: *true* // c. Perform ! DefinePropertyOrThrow(_O_, *"message"*, _msgDesc_). const message: JSAny = arguments[1]; - const obj: JSObject = - ConstructAggregateErrorHelper(context, target, newTarget, message); + const options: JSAny = arguments[2]; + const obj: JSObject = ConstructAggregateErrorHelper( + context, target, newTarget, message, options); // 4. Let errorsList be ? IterableToList(errors). const errors: JSAny = arguments[0]; @@ -38,7 +39,7 @@ transitioning javascript builtin AggregateErrorConstructor( } extern transitioning runtime ConstructAggregateErrorHelper( - Context, JSFunction, JSAny, Object): JSObject; + Context, JSFunction, JSAny, Object, Object): JSObject; extern transitioning runtime ConstructInternalAggregateErrorHelper( Context, Object): JSObject; diff --git a/deps/v8/src/builtins/arm/builtins-arm.cc b/deps/v8/src/builtins/arm/builtins-arm.cc index 817d30fe26..83252446af 100644 --- a/deps/v8/src/builtins/arm/builtins-arm.cc +++ b/deps/v8/src/builtins/arm/builtins-arm.cc @@ -6,6 +6,7 @@ #include "src/api/api-arguments.h" #include "src/codegen/code-factory.h" +#include "src/codegen/interface-descriptors-inl.h" // For interpreter_entry_return_pc_offset. TODO(jkummerow): Drop. #include "src/codegen/macro-assembler-inl.h" #include "src/codegen/register-configuration.h" @@ -118,7 +119,7 @@ void Generate_JSBuiltinsConstructStubHelper(MacroAssembler* masm) { // r0: number of arguments (untagged) // r1: constructor function // r3: new target - __ InvokeFunctionWithNewTarget(r1, r3, r0, CALL_FUNCTION); + __ InvokeFunctionWithNewTarget(r1, r3, r0, InvokeType::kCall); // Restore context from the frame. __ ldr(cp, MemOperand(fp, ConstructFrameConstants::kContextOffset)); @@ -236,7 +237,7 @@ void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) { __ Push(r6); // Call the function. - __ InvokeFunctionWithNewTarget(r1, r3, r0, CALL_FUNCTION); + __ InvokeFunctionWithNewTarget(r1, r3, r0, InvokeType::kCall); // ----------- S t a t e ------------- // -- r0: constructor result @@ -337,7 +338,7 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) { // Store input value into generator object. __ str(r0, FieldMemOperand(r1, JSGeneratorObject::kInputOrDebugPosOffset)); __ RecordWriteField(r1, JSGeneratorObject::kInputOrDebugPosOffset, r0, - kLRHasNotBeenSaved, kDontSaveFPRegs); + kLRHasNotBeenSaved, SaveFPRegsMode::kIgnore); // Load suspended function and context. __ ldr(r4, FieldMemOperand(r1, JSGeneratorObject::kFunctionOffset)); @@ -388,16 +389,13 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) { FieldMemOperand(r1, JSGeneratorObject::kParametersAndRegistersOffset)); { Label done_loop, loop; - __ mov(r6, r3); - __ bind(&loop); - __ sub(r6, r6, Operand(1), SetCC); + __ sub(r3, r3, Operand(1), SetCC); __ b(lt, &done_loop); - __ add(scratch, r2, Operand(r6, LSL, kTaggedSizeLog2)); + __ add(scratch, r2, Operand(r3, LSL, kTaggedSizeLog2)); __ ldr(scratch, FieldMemOperand(scratch, FixedArray::kHeaderSize)); __ Push(scratch); __ b(&loop); - __ bind(&done_loop); // Push receiver. @@ -799,8 +797,8 @@ static void ReplaceClosureCodeWithOptimizedCode(MacroAssembler* masm, // Store code entry in the closure. __ str(optimized_code, FieldMemOperand(closure, JSFunction::kCodeOffset)); __ RecordWriteField(closure, JSFunction::kCodeOffset, optimized_code, - kLRHasNotBeenSaved, kDontSaveFPRegs, OMIT_REMEMBERED_SET, - OMIT_SMI_CHECK); + kLRHasNotBeenSaved, SaveFPRegsMode::kIgnore, + RememberedSetAction::kOmit, SmiCheck::kOmit); } static void LeaveInterpreterFrame(MacroAssembler* masm, Register scratch1, @@ -1051,7 +1049,7 @@ void Builtins::Generate_BaselineOutOfLinePrologue(MacroAssembler* masm) { __ ldr(feedback_vector, FieldMemOperand(closure, JSFunction::kFeedbackCellOffset)); __ ldr(feedback_vector, FieldMemOperand(feedback_vector, Cell::kValueOffset)); - if (__ emit_debug_code()) { + if (FLAG_debug_code) { UseScratchRegisterScope temps(masm); Register scratch = temps.Acquire(); __ CompareObjectType(feedback_vector, scratch, scratch, @@ -1124,7 +1122,7 @@ void Builtins::Generate_BaselineOutOfLinePrologue(MacroAssembler* masm) { // Baseline code frames store the feedback vector where interpreter would // store the bytecode offset. - if (__ emit_debug_code()) { + if (FLAG_debug_code) { UseScratchRegisterScope temps(masm); Register scratch = temps.Acquire(); __ CompareObjectType(feedback_vector, scratch, scratch, @@ -1646,7 +1644,7 @@ static void Generate_InterpreterEnterBytecode(MacroAssembler* masm) { __ Jump(kJavaScriptCallCodeStartRegister); } -void Builtins::Generate_InterpreterEnterBytecodeAdvance(MacroAssembler* masm) { +void Builtins::Generate_InterpreterEnterAtNextBytecode(MacroAssembler* masm) { // Get bytecode array and bytecode offset from the stack frame. __ ldr(kInterpreterBytecodeArrayRegister, MemOperand(fp, InterpreterFrameConstants::kBytecodeArrayFromFp)); @@ -1691,7 +1689,7 @@ void Builtins::Generate_InterpreterEnterBytecodeAdvance(MacroAssembler* masm) { __ Abort(AbortReason::kInvalidBytecodeAdvance); } -void Builtins::Generate_InterpreterEnterBytecodeDispatch(MacroAssembler* masm) { +void Builtins::Generate_InterpreterEnterAtBytecode(MacroAssembler* masm) { Generate_InterpreterEnterBytecode(masm); } @@ -1841,6 +1839,8 @@ void Builtins::Generate_InterpreterOnStackReplacement(MacroAssembler* masm) { } void Builtins::Generate_BaselineOnStackReplacement(MacroAssembler* masm) { + __ ldr(kContextRegister, + MemOperand(fp, BaselineFrameConstants::kContextOffset)); return OnStackReplacement(masm, false); } @@ -2009,6 +2009,7 @@ void Builtins::Generate_ReflectConstruct(MacroAssembler* masm) { } // static +// TODO(v8:11615): Observe Code::kMaxArguments in CallOrConstructVarargs void Builtins::Generate_CallOrConstructVarargs(MacroAssembler* masm, Handle<Code> code) { // ----------- S t a t e ------------- @@ -2020,7 +2021,7 @@ void Builtins::Generate_CallOrConstructVarargs(MacroAssembler* masm, // ----------------------------------- Register scratch = r8; - if (masm->emit_debug_code()) { + if (FLAG_debug_code) { // Allow r2 to be a FixedArray, or a FixedDoubleArray if r4 == 0. Label ok, fail; __ AssertNotSmi(r2); @@ -2278,7 +2279,7 @@ void Builtins::Generate_CallFunction(MacroAssembler* masm, __ ldrh(r2, FieldMemOperand(r2, SharedFunctionInfo::kFormalParameterCountOffset)); - __ InvokeFunctionCode(r1, no_reg, r2, r0, JUMP_FUNCTION); + __ InvokeFunctionCode(r1, no_reg, r2, r0, InvokeType::kJump); // The function is a "classConstructor", need to raise an exception. __ bind(&class_constructor); @@ -2640,6 +2641,11 @@ void Builtins::Generate_GenericJSToWasmWrapper(MacroAssembler* masm) { // TODO(v8:10701): Implement for this platform. __ Trap(); } + +void Builtins::Generate_WasmOnStackReplace(MacroAssembler* masm) { + // Only needed on x64. + __ Trap(); +} #endif // V8_ENABLE_WEBASSEMBLY void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, @@ -2652,12 +2658,12 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, // sp: stack pointer (restored as callee's sp after C call) // cp: current context (C callee-saved) // - // If argv_mode == kArgvInRegister: + // If argv_mode == ArgvMode::kRegister: // r2: pointer to the first argument __ mov(r5, Operand(r1)); - if (argv_mode == kArgvInRegister) { + if (argv_mode == ArgvMode::kRegister) { // Move argv into the correct register. __ mov(r1, Operand(r2)); } else { @@ -2669,7 +2675,7 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, // Enter the exit frame that transitions from JavaScript to C++. FrameScope scope(masm, StackFrame::MANUAL); __ EnterExitFrame( - save_doubles == kSaveFPRegs, 0, + save_doubles == SaveFPRegsMode::kSave, 0, builtin_exit_frame ? StackFrame::BUILTIN_EXIT : StackFrame::EXIT); // Store a copy of argc in callee-saved registers for later. @@ -2726,12 +2732,12 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, // r0:r1: result // sp: stack pointer // fp: frame pointer - Register argc = argv_mode == kArgvInRegister + Register argc = argv_mode == ArgvMode::kRegister // We don't want to pop arguments so set argc to no_reg. ? no_reg // Callee-saved register r4 still holds argc. : r4; - __ LeaveExitFrame(save_doubles == kSaveFPRegs, argc); + __ LeaveExitFrame(save_doubles == SaveFPRegsMode::kSave, argc); __ mov(pc, lr); // Handling of exception. @@ -2841,7 +2847,7 @@ void Builtins::Generate_DoubleToI(MacroAssembler* masm) { // If we reach this code, 30 <= exponent <= 83. // `TryInlineTruncateDoubleToI` above will have truncated any double with an // exponent lower than 30. - if (masm->emit_debug_code()) { + if (FLAG_debug_code) { // Scratch is exponent - 1. __ cmp(scratch, Operand(30 - 1)); __ Check(ge, AbortReason::kUnexpectedValue); @@ -2957,7 +2963,7 @@ void CallApiFunctionAndReturn(MacroAssembler* masm, Register function_address, // No more valid handles (the result handle was the last one). Restore // previous handle scope. __ str(r4, MemOperand(r9, kNextOffset)); - if (__ emit_debug_code()) { + if (FLAG_debug_code) { __ ldr(r1, MemOperand(r9, kLevelOffset)); __ cmp(r1, r6); __ Check(eq, AbortReason::kUnexpectedLevelAfterReturnFromApiCall); diff --git a/deps/v8/src/builtins/arm64/builtins-arm64.cc b/deps/v8/src/builtins/arm64/builtins-arm64.cc index d095d60b30..3cf3f0153f 100644 --- a/deps/v8/src/builtins/arm64/builtins-arm64.cc +++ b/deps/v8/src/builtins/arm64/builtins-arm64.cc @@ -6,6 +6,7 @@ #include "src/api/api-arguments.h" #include "src/codegen/code-factory.h" +#include "src/codegen/interface-descriptors-inl.h" // For interpreter_entry_return_pc_offset. TODO(jkummerow): Drop. #include "src/codegen/macro-assembler-inl.h" #include "src/codegen/register-configuration.h" @@ -99,7 +100,7 @@ void Generate_JSBuiltinsConstructStubHelper(MacroAssembler* masm) { Label already_aligned; Register argc = x0; - if (__ emit_debug_code()) { + if (FLAG_debug_code) { // Check that FrameScope pushed the context on to the stack already. __ Peek(x2, 0); __ Cmp(x2, cp); @@ -176,7 +177,7 @@ void Generate_JSBuiltinsConstructStubHelper(MacroAssembler* masm) { // ----------------------------------- // Call the function. - __ InvokeFunctionWithNewTarget(x1, x3, argc, CALL_FUNCTION); + __ InvokeFunctionWithNewTarget(x1, x3, argc, InvokeType::kCall); // Restore the context from the frame. __ Ldr(cp, MemOperand(fp, ConstructFrameConstants::kContextOffset)); @@ -219,7 +220,7 @@ void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) { __ EnterFrame(StackFrame::CONSTRUCT); Label post_instantiation_deopt_entry, not_create_implicit_receiver; - if (__ emit_debug_code()) { + if (FLAG_debug_code) { // Check that FrameScope pushed the context on to the stack already. __ Peek(x2, 0); __ Cmp(x2, cp); @@ -336,7 +337,7 @@ void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) { // Call the function. __ Mov(x0, x12); - __ InvokeFunctionWithNewTarget(x1, x3, x0, CALL_FUNCTION); + __ InvokeFunctionWithNewTarget(x1, x3, x0, InvokeType::kCall); // ----------- S t a t e ------------- // -- sp[0*kSystemPointerSize]: implicit receiver @@ -442,7 +443,7 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) { __ StoreTaggedField( x0, FieldMemOperand(x1, JSGeneratorObject::kInputOrDebugPosOffset)); __ RecordWriteField(x1, JSGeneratorObject::kInputOrDebugPosOffset, x0, - kLRHasNotBeenSaved, kDontSaveFPRegs); + kLRHasNotBeenSaved, SaveFPRegsMode::kIgnore); // Load suspended function and context. __ LoadTaggedPointerField( @@ -639,7 +640,8 @@ void Generate_JSEntryVariant(MacroAssembler* masm, StackFrame::Type type, #ifdef V8_COMPRESS_POINTERS_IN_SHARED_CAGE // Initialize the pointer cage base register. - __ Mov(kPointerCageBaseRegister, x0); + __ LoadRootRelative(kPtrComprCageBaseRegister, + IsolateData::cage_base_offset()); #endif } @@ -925,7 +927,7 @@ static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm, // Don't initialize the reserved registers. // x26 : root register (kRootRegister). // x27 : context pointer (cp). - // x28 : pointer cage base register (kPointerCageBaseRegister). + // x28 : pointer cage base register (kPtrComprCageBaseRegister). // x29 : frame pointer (fp). Handle<Code> builtin = is_construct @@ -966,8 +968,8 @@ static void ReplaceClosureCodeWithOptimizedCode(MacroAssembler* masm, __ StoreTaggedField(optimized_code, FieldMemOperand(closure, JSFunction::kCodeOffset)); __ RecordWriteField(closure, JSFunction::kCodeOffset, optimized_code, - kLRHasNotBeenSaved, kDontSaveFPRegs, OMIT_REMEMBERED_SET, - OMIT_SMI_CHECK); + kLRHasNotBeenSaved, SaveFPRegsMode::kIgnore, + RememberedSetAction::kOmit, SmiCheck::kOmit); } static void LeaveInterpreterFrame(MacroAssembler* masm, Register scratch1, @@ -998,7 +1000,7 @@ static void LeaveInterpreterFrame(MacroAssembler* masm, Register scratch1, __ LeaveFrame(StackFrame::INTERPRETED); // Drop receiver + arguments. - if (__ emit_debug_code()) { + if (FLAG_debug_code) { __ Tst(params_size, kSystemPointerSize - 1); __ Check(eq, AbortReason::kUnexpectedValue); } @@ -1230,7 +1232,7 @@ void Builtins::Generate_BaselineOutOfLinePrologue(MacroAssembler* masm) { FieldMemOperand(closure, JSFunction::kFeedbackCellOffset)); __ LoadTaggedPointerField( feedback_vector, FieldMemOperand(feedback_vector, Cell::kValueOffset)); - if (__ emit_debug_code()) { + if (FLAG_debug_code) { __ CompareObjectType(feedback_vector, x4, x4, FEEDBACK_VECTOR_TYPE); __ Assert(eq, AbortReason::kExpectedFeedbackVector); } @@ -1288,7 +1290,7 @@ void Builtins::Generate_BaselineOutOfLinePrologue(MacroAssembler* masm) { // Baseline code frames store the feedback vector where interpreter would // store the bytecode offset. - if (__ emit_debug_code()) { + if (FLAG_debug_code) { __ CompareObjectType(feedback_vector, x4, x4, FEEDBACK_VECTOR_TYPE); __ Assert(eq, AbortReason::kExpectedFeedbackVector); } @@ -1859,7 +1861,7 @@ static void Generate_InterpreterEnterBytecode(MacroAssembler* masm) { __ Br(x17); } -void Builtins::Generate_InterpreterEnterBytecodeAdvance(MacroAssembler* masm) { +void Builtins::Generate_InterpreterEnterAtNextBytecode(MacroAssembler* masm) { // Get bytecode array and bytecode offset from the stack frame. __ ldr(kInterpreterBytecodeArrayRegister, MemOperand(fp, InterpreterFrameConstants::kBytecodeArrayFromFp)); @@ -1903,7 +1905,7 @@ void Builtins::Generate_InterpreterEnterBytecodeAdvance(MacroAssembler* masm) { __ Abort(AbortReason::kInvalidBytecodeAdvance); } -void Builtins::Generate_InterpreterEnterBytecodeDispatch(MacroAssembler* masm) { +void Builtins::Generate_InterpreterEnterAtBytecode(MacroAssembler* masm) { Generate_InterpreterEnterBytecode(masm); } @@ -2087,6 +2089,8 @@ void Builtins::Generate_InterpreterOnStackReplacement(MacroAssembler* masm) { } void Builtins::Generate_BaselineOnStackReplacement(MacroAssembler* masm) { + __ ldr(kContextRegister, + MemOperand(fp, BaselineFrameConstants::kContextOffset)); return OnStackReplacement(masm, false); } @@ -2385,6 +2389,7 @@ void Generate_PrepareForCopyingVarargs(MacroAssembler* masm, Register argc, } // namespace // static +// TODO(v8:11615): Observe Code::kMaxArguments in CallOrConstructVarargs void Builtins::Generate_CallOrConstructVarargs(MacroAssembler* masm, Handle<Code> code) { // ----------- S t a t e ------------- @@ -2394,7 +2399,7 @@ void Builtins::Generate_CallOrConstructVarargs(MacroAssembler* masm, // -- x4 : len (number of elements to push from args) // -- x3 : new.target (for [[Construct]]) // ----------------------------------- - if (masm->emit_debug_code()) { + if (FLAG_debug_code) { // Allow x2 to be a FixedArray, or a FixedDoubleArray if x4 == 0. Label ok, fail; __ AssertNotSmi(x2, AbortReason::kOperandIsNotAFixedArray); @@ -2618,7 +2623,7 @@ void Builtins::Generate_CallFunction(MacroAssembler* masm, __ Ldrh(x2, FieldMemOperand(x2, SharedFunctionInfo::kFormalParameterCountOffset)); - __ InvokeFunctionCode(x1, no_reg, x2, x0, JUMP_FUNCTION); + __ InvokeFunctionCode(x1, no_reg, x2, x0, InvokeType::kJump); // The function is a "classConstructor", need to raise an exception. __ Bind(&class_constructor); @@ -3036,6 +3041,11 @@ void Builtins::Generate_GenericJSToWasmWrapper(MacroAssembler* masm) { // TODO(v8:10701): Implement for this platform. __ Trap(); } + +void Builtins::Generate_WasmOnStackReplace(MacroAssembler* masm) { + // Only needed on x64. + __ Trap(); +} #endif // V8_ENABLE_WEBASSEMBLY void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, @@ -3053,7 +3063,7 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, // Register parameters: // x0: argc (including receiver, untagged) // x1: target - // If argv_mode == kArgvInRegister: + // If argv_mode == ArgvMode::kRegister: // x11: argv (pointer to first argument) // // The stack on entry holds the arguments and the receiver, with the receiver @@ -3085,7 +3095,7 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, // (arg[argc-2]), or just below the receiver in case there are no arguments. // - Adjust for the arg[] array. Register temp_argv = x11; - if (argv_mode == kArgvOnStack) { + if (argv_mode == ArgvMode::kStack) { __ SlotAddress(temp_argv, x0); // - Adjust for the receiver. __ Sub(temp_argv, temp_argv, 1 * kSystemPointerSize); @@ -3096,7 +3106,7 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, // Enter the exit frame. FrameScope scope(masm, StackFrame::MANUAL); __ EnterExitFrame( - save_doubles == kSaveFPRegs, x10, extra_stack_space, + save_doubles == SaveFPRegsMode::kSave, x10, extra_stack_space, builtin_exit_frame ? StackFrame::BUILTIN_EXIT : StackFrame::EXIT); // Poke callee-saved registers into reserved space. @@ -3177,8 +3187,8 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, __ Peek(argc, 2 * kSystemPointerSize); __ Peek(target, 3 * kSystemPointerSize); - __ LeaveExitFrame(save_doubles == kSaveFPRegs, x10, x9); - if (argv_mode == kArgvOnStack) { + __ LeaveExitFrame(save_doubles == SaveFPRegsMode::kSave, x10, x9); + if (argv_mode == ArgvMode::kStack) { // Drop the remaining stack slots and return from the stub. __ DropArguments(x11); } @@ -3247,7 +3257,7 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, // Compute the handler entry address and jump to it. We use x17 here for the // jump target, as this jump can occasionally end up at the start of - // InterpreterEnterBytecodeDispatch, which when CFI is enabled starts with + // InterpreterEnterAtBytecode, which when CFI is enabled starts with // a "BTI c". UseScratchRegisterScope temps(masm); temps.Exclude(x17); @@ -3296,7 +3306,7 @@ void Builtins::Generate_DoubleToI(MacroAssembler* masm) { // signed overflow in the int64_t target. Since we've already handled // exponents >= 84, we can guarantee that 63 <= exponent < 84. - if (masm->emit_debug_code()) { + if (FLAG_debug_code) { __ Cmp(exponent, HeapNumber::kExponentBias + 63); // Exponents less than this should have been handled by the Fcvt case. __ Check(ge, AbortReason::kUnexpectedValue); @@ -3412,7 +3422,7 @@ void CallApiFunctionAndReturn(MacroAssembler* masm, Register function_address, // No more valid handles (the result handle was the last one). Restore // previous handle scope. __ Str(next_address_reg, MemOperand(handle_scope_base, kNextOffset)); - if (__ emit_debug_code()) { + if (FLAG_debug_code) { __ Ldr(w1, MemOperand(handle_scope_base, kLevelOffset)); __ Cmp(w1, level_reg); __ Check(eq, AbortReason::kUnexpectedLevelAfterReturnFromApiCall); diff --git a/deps/v8/src/builtins/arraybuffer.tq b/deps/v8/src/builtins/arraybuffer.tq index 179c4b38fd..5794414443 100644 --- a/deps/v8/src/builtins/arraybuffer.tq +++ b/deps/v8/src/builtins/arraybuffer.tq @@ -9,21 +9,25 @@ transitioning javascript builtin ArrayBufferPrototypeGetByteLength( js-implicit context: NativeContext, receiver: JSAny)(): Number { // 1. Let O be the this value. // 2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]). + const functionName = 'get ArrayBuffer.prototype.byteLength'; const o = Cast<JSArrayBuffer>(receiver) otherwise ThrowTypeError( - MessageTemplate::kIncompatibleMethodReceiver, - 'get ArrayBuffer.prototype.byteLength', receiver); + MessageTemplate::kIncompatibleMethodReceiver, functionName, receiver); // 3. If IsSharedArrayBuffer(O) is true, throw a TypeError exception. if (IsSharedArrayBuffer(o)) { ThrowTypeError( - MessageTemplate::kIncompatibleMethodReceiver, - 'get ArrayBuffer.prototype.byteLength', receiver); + MessageTemplate::kIncompatibleMethodReceiver, functionName, receiver); } - // 4. If IsDetachedBuffer(O) is true, throw a TypeError exception. + // 4. If IsResizableArrayBuffer(O) is true, throw a TypeError exception. + if (IsResizableArrayBuffer(o)) { + ThrowTypeError( + MessageTemplate::kIncompatibleMethodReceiver, functionName, receiver); + } + // 5. If IsDetachedBuffer(O) is true, throw a TypeError exception. // TODO(v8:4895): We don't actually throw here. - // 5. Let length be O.[[ArrayBufferByteLength]]. + // 6. Let length be O.[[ArrayBufferByteLength]]. const length = o.byte_length; - // 6. Return length. + // 7. Return length. return Convert<Number>(length); } @@ -32,15 +36,43 @@ transitioning javascript builtin SharedArrayBufferPrototypeGetByteLength( js-implicit context: NativeContext, receiver: JSAny)(): Number { // 1. Let O be the this value. // 2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]). + const functionName = 'get SharedArrayBuffer.prototype.byteLength'; const o = Cast<JSArrayBuffer>(receiver) otherwise ThrowTypeError( - MessageTemplate::kIncompatibleMethodReceiver, - 'get SharedArrayBuffer.prototype.byteLength', receiver); - // 3. If IsSharedArrayBuffer(O) is false, throw a TypeError exception. + MessageTemplate::kIncompatibleMethodReceiver, functionName, receiver); + // 3. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]). if (!IsSharedArrayBuffer(o)) { ThrowTypeError( - MessageTemplate::kIncompatibleMethodReceiver, - 'get SharedArrayBuffer.prototype.byteLength', receiver); + MessageTemplate::kIncompatibleMethodReceiver, functionName, receiver); + } + // 4. If IsResizableArrayBuffer(O) is true, throw a TypeError exception. + if (IsResizableArrayBuffer(o)) { + ThrowTypeError( + MessageTemplate::kIncompatibleMethodReceiver, functionName, receiver); + } + // 5. Let length be O.[[ArrayBufferByteLength]]. + const length = o.byte_length; + // 6. Return length. + return Convert<Number>(length); +} + +// #sec-get-resizablearraybuffer.prototype.bytelength +transitioning javascript builtin ResizableArrayBufferPrototypeGetByteLength( + js-implicit context: NativeContext, receiver: JSAny)(): Number { + // 1. Let O be the this value. + // 2. Perform ? RequireInternalSlot(O, [[ArrayBufferMaxByteLength]]). + const functionName = 'get ResizableArrayBuffer.prototype.byteLength'; + const o = Cast<JSArrayBuffer>(receiver) otherwise + ThrowTypeError( + MessageTemplate::kIncompatibleMethodReceiver, functionName, receiver); + if (!IsResizableArrayBuffer(o)) { + ThrowTypeError( + MessageTemplate::kIncompatibleMethodReceiver, functionName, receiver); + } + // 3. If IsSharedArrayBuffer(O) is true, throw a TypeError exception. + if (IsSharedArrayBuffer(o)) { + ThrowTypeError( + MessageTemplate::kIncompatibleMethodReceiver, functionName, receiver); } // 4. Let length be O.[[ArrayBufferByteLength]]. const length = o.byte_length; @@ -48,6 +80,55 @@ transitioning javascript builtin SharedArrayBufferPrototypeGetByteLength( return Convert<Number>(length); } +// #sec-get-resizablearraybuffer.prototype.maxbytelength +transitioning javascript builtin ResizableArrayBufferPrototypeGetMaxByteLength( + js-implicit context: NativeContext, receiver: JSAny)(): Number { + // 1. Let O be the this value. + // 2. Perform ? RequireInternalSlot(O, [[ArrayBufferMaxByteLength]]). + const functionName = 'get ResizableArrayBuffer.prototype.maxByteLength'; + const o = Cast<JSArrayBuffer>(receiver) otherwise + ThrowTypeError( + MessageTemplate::kIncompatibleMethodReceiver, functionName, receiver); + if (!IsResizableArrayBuffer(o)) { + ThrowTypeError( + MessageTemplate::kIncompatibleMethodReceiver, functionName, receiver); + } + // 3. If IsSharedArrayBuffer(O) is true, throw a TypeError exception. + if (IsSharedArrayBuffer(o)) { + ThrowTypeError( + MessageTemplate::kIncompatibleMethodReceiver, functionName, receiver); + } + // 4. Let length be O.[[ArrayBufferMaxByteLength]]. + const length = o.max_byte_length; + // 5. Return length. + return Convert<Number>(length); +} + +// #sec-get-growablesharedarraybuffer.prototype.maxbytelength +transitioning javascript builtin +GrowableSharedArrayBufferPrototypeGetMaxByteLength( + js-implicit context: NativeContext, receiver: JSAny)(): Number { + // 1. Let O be the this value. + // 2. Perform ? RequireInternalSlot(O, [[ArrayBufferMaxByteLength]]). + const functionName = 'get GrowableSharedArrayBuffer.prototype.maxByteLength'; + const o = Cast<JSArrayBuffer>(receiver) otherwise + ThrowTypeError( + MessageTemplate::kIncompatibleMethodReceiver, functionName, receiver); + if (!IsResizableArrayBuffer(o)) { + ThrowTypeError( + MessageTemplate::kIncompatibleMethodReceiver, functionName, receiver); + } + // 3. If IsSharedArrayBuffer(O) is false, throw a TypeError exception. + if (!IsSharedArrayBuffer(o)) { + ThrowTypeError( + MessageTemplate::kIncompatibleMethodReceiver, functionName, receiver); + } + // 4. Let length be O.[[ArrayBufferMaxByteLength]]. + const length = o.max_byte_length; + // 5. Return length. + return Convert<Number>(length); +} + // #sec-arraybuffer.isview transitioning javascript builtin ArrayBufferIsView(arg: JSAny): Boolean { // 1. If Type(arg) is not Object, return false. diff --git a/deps/v8/src/builtins/base.tq b/deps/v8/src/builtins/base.tq index 08639c04da..fc84e1a2ce 100644 --- a/deps/v8/src/builtins/base.tq +++ b/deps/v8/src/builtins/base.tq @@ -141,6 +141,7 @@ intrinsic %MakeLazy<T: type, A1: type, A2: type, A3: type>( // template, but Torque doesn't understand how to use templates for extern // macros, so just add whatever overload definitions you need here. extern macro RunLazy(Lazy<Smi>): Smi; +extern macro RunLazy(Lazy<JSAny>): JSAny; // A Smi value containing a bitfield struct as its integer data. @useParentTypeChecker type SmiTagged<T : type extends uint31> extends Smi; @@ -262,6 +263,8 @@ extern enum UpdateFeedbackMode { kOptionalFeedback, kGuaranteedFeedback } extern operator '==' macro UpdateFeedbackModeEqual( constexpr UpdateFeedbackMode, constexpr UpdateFeedbackMode): constexpr bool; +extern enum CallFeedbackContent extends int32 { kTarget, kReceiver } + extern enum UnicodeEncoding { UTF16, UTF32 } // Promise constants @@ -961,6 +964,8 @@ extern operator '|' macro ConstexprWord32Or( constexpr int32, constexpr int32): constexpr int32; extern operator '^' macro Word32Xor(int32, int32): int32; extern operator '^' macro Word32Xor(uint32, uint32): uint32; +extern operator '<<' macro ConstexprWord32Shl( + constexpr uint32, constexpr int32): uint32; extern operator '==' macro Word64Equal(int64, int64): bool; extern operator '==' macro Word64Equal(uint64, uint64): bool; @@ -1296,6 +1301,9 @@ macro GetFastAliasedArgumentsMap(implicit context: Context)(): Map { macro GetWeakCellMap(implicit context: Context)(): Map { return %GetClassMapConstant<WeakCell>(); } +macro GetPrototypeApplyFunction(implicit context: Context)(): JSFunction { + return *NativeContextSlot(ContextSlot::FUNCTION_PROTOTYPE_APPLY_INDEX); +} // Call(Context, Target, Receiver, ...Args) // TODO(joshualitt): Assuming the context parameter is for throwing when Target @@ -1689,7 +1697,7 @@ extern transitioning runtime SetOwnPropertyIgnoreAttributes( namespace runtime { extern runtime -GetDerivedMap(Context, JSFunction, JSReceiver): Map; +GetDerivedMap(Context, JSFunction, JSReceiver, JSAny): Map; } extern macro IsDeprecatedMap(Map): bool; diff --git a/deps/v8/src/builtins/builtins-api.cc b/deps/v8/src/builtins/builtins-api.cc index 35e6cc393c..b39bfc84a5 100644 --- a/deps/v8/src/builtins/builtins-api.cc +++ b/deps/v8/src/builtins/builtins-api.cc @@ -23,8 +23,7 @@ namespace { // TODO(dcarney): CallOptimization duplicates this logic, merge. JSReceiver GetCompatibleReceiver(Isolate* isolate, FunctionTemplateInfo info, JSReceiver receiver) { - RuntimeCallTimerScope timer(isolate, - RuntimeCallCounterId::kGetCompatibleReceiver); + RCS_SCOPE(isolate, RuntimeCallCounterId::kGetCompatibleReceiver); Object recv_type = info.signature(); // No signature, return holder. if (!recv_type.IsFunctionTemplateInfo()) return receiver; @@ -171,8 +170,7 @@ MaybeHandle<Object> Builtins::InvokeApiFunction(Isolate* isolate, Handle<Object> receiver, int argc, Handle<Object> args[], Handle<HeapObject> new_target) { - RuntimeCallTimerScope timer(isolate, - RuntimeCallCounterId::kInvokeApiFunction); + RCS_SCOPE(isolate, RuntimeCallCounterId::kInvokeApiFunction); DCHECK(function->IsFunctionTemplateInfo() || (function->IsJSFunction() && JSFunction::cast(*function).shared().IsApiFunction())); diff --git a/deps/v8/src/builtins/builtins-array-gen.cc b/deps/v8/src/builtins/builtins-array-gen.cc index 6b522fda6c..833627c7b4 100644 --- a/deps/v8/src/builtins/builtins-array-gen.cc +++ b/deps/v8/src/builtins/builtins-array-gen.cc @@ -10,6 +10,7 @@ #include "src/builtins/builtins-utils-gen.h" #include "src/builtins/builtins.h" #include "src/codegen/code-stub-assembler.h" +#include "src/codegen/interface-descriptors-inl.h" #include "src/execution/frame-constants.h" #include "src/heap/factory-inl.h" #include "src/objects/allocation-site-inl.h" diff --git a/deps/v8/src/builtins/builtins-array.cc b/deps/v8/src/builtins/builtins-array.cc index d3bbd980a5..6fe1bfc712 100644 --- a/deps/v8/src/builtins/builtins-array.cc +++ b/deps/v8/src/builtins/builtins-array.cc @@ -173,7 +173,8 @@ V8_WARN_UNUSED_RESULT MaybeHandle<Object> SetLengthProperty( Handle<JSArray> array = Handle<JSArray>::cast(receiver); if (!JSArray::HasReadOnlyLength(array)) { DCHECK_LE(length, kMaxUInt32); - JSArray::SetLength(array, static_cast<uint32_t>(length)); + MAYBE_RETURN_NULL( + JSArray::SetLength(array, static_cast<uint32_t>(length))); return receiver; } } @@ -207,16 +208,16 @@ V8_WARN_UNUSED_RESULT Object GenericArrayFill(Isolate* isolate, return *receiver; } -V8_WARN_UNUSED_RESULT bool TryFastArrayFill( +V8_WARN_UNUSED_RESULT Maybe<bool> TryFastArrayFill( Isolate* isolate, BuiltinArguments* args, Handle<JSReceiver> receiver, Handle<Object> value, double start_index, double end_index) { // If indices are too large, use generic path since they are stored as // properties, not in the element backing store. - if (end_index > kMaxUInt32) return false; - if (!receiver->IsJSObject()) return false; + if (end_index > kMaxUInt32) return Just(false); + if (!receiver->IsJSObject()) return Just(false); if (!EnsureJSArrayWithWritableFastElements(isolate, receiver, args, 1, 1)) { - return false; + return Just(false); } Handle<JSArray> array = Handle<JSArray>::cast(receiver); @@ -240,14 +241,14 @@ V8_WARN_UNUSED_RESULT bool TryFastArrayFill( CHECK(DoubleToUint32IfEqualToSelf(end_index, &end)); ElementsAccessor* accessor = array->GetElementsAccessor(); - accessor->Fill(array, value, start, end); - return true; + RETURN_ON_EXCEPTION_VALUE(isolate, accessor->Fill(array, value, start, end), + Nothing<bool>()); + return Just(true); } } // namespace BUILTIN(ArrayPrototypeFill) { HandleScope scope(isolate); - if (isolate->debug_execution_mode() == DebugInfo::kSideEffects) { if (!isolate->debug()->PerformSideEffectCheckForObject(args.receiver())) { return ReadOnlyRoots(isolate).exception(); @@ -292,10 +293,12 @@ BUILTIN(ArrayPrototypeFill) { Handle<Object> value = args.atOrUndefined(isolate, 1); - if (TryFastArrayFill(isolate, &args, receiver, value, start_index, - end_index)) { - return *receiver; - } + bool success; + MAYBE_ASSIGN_RETURN_FAILURE_ON_EXCEPTION( + isolate, success, + TryFastArrayFill(isolate, &args, receiver, value, start_index, + end_index)); + if (success) return *receiver; return GenericArrayFill(isolate, receiver, value, start_index, end_index); } @@ -385,7 +388,9 @@ BUILTIN(ArrayPush) { } ElementsAccessor* accessor = array->GetElementsAccessor(); - uint32_t new_length = accessor->Push(array, &args, to_add); + uint32_t new_length; + MAYBE_ASSIGN_RETURN_FAILURE_ON_EXCEPTION( + isolate, new_length, accessor->Push(array, &args, to_add)); return *isolate->factory()->NewNumberFromUint((new_length)); } @@ -468,7 +473,8 @@ BUILTIN(ArrayPop) { Handle<Object> result; if (IsJSArrayFastElementMovingAllowed(isolate, JSArray::cast(*receiver))) { // Fast Elements Path - result = array->GetElementsAccessor()->Pop(array); + ASSIGN_RETURN_FAILURE_ON_EXCEPTION( + isolate, result, array->GetElementsAccessor()->Pop(array)); } else { // Use Slow Lookup otherwise uint32_t new_length = len - 1; @@ -483,7 +489,9 @@ BUILTIN(ArrayPop) { isolate->factory()->length_string(), Object::TypeOf(isolate, array), array)); } - JSArray::SetLength(array, new_length); + bool set_len_ok; + MAYBE_ASSIGN_RETURN_FAILURE_ON_EXCEPTION( + isolate, set_len_ok, JSArray::SetLength(array, new_length)); } return *result; @@ -595,7 +603,8 @@ BUILTIN(ArrayShift) { if (CanUseFastArrayShift(isolate, receiver)) { Handle<JSArray> array = Handle<JSArray>::cast(receiver); - return *array->GetElementsAccessor()->Shift(array); + RETURN_RESULT_OR_FAILURE(isolate, + array->GetElementsAccessor()->Shift(array)); } return GenericArrayShift(isolate, receiver, length); @@ -623,7 +632,9 @@ BUILTIN(ArrayUnshift) { DCHECK(!JSArray::HasReadOnlyLength(array)); ElementsAccessor* accessor = array->GetElementsAccessor(); - int new_length = accessor->Unshift(array, &args, to_add); + uint32_t new_length; + MAYBE_ASSIGN_RETURN_FAILURE_ON_EXCEPTION( + isolate, new_length, accessor->Unshift(array, &args, to_add)); return Smi::FromInt(new_length); } @@ -742,7 +753,7 @@ class ArrayConcatVisitor { array, fast_elements() ? HOLEY_ELEMENTS : DICTIONARY_ELEMENTS); array->set_length(*length); array->set_elements(*storage_fixed_array()); - array->synchronized_set_map(*map); + array->set_map(*map, kReleaseStore); return array; } @@ -880,9 +891,11 @@ uint32_t EstimateElementCount(Isolate* isolate, Handle<JSArray> array) { #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype) case TYPE##_ELEMENTS: TYPED_ARRAYS(TYPED_ARRAY_CASE) -#undef TYPED_ARRAY_CASE + RAB_GSAB_TYPED_ARRAYS(TYPED_ARRAY_CASE) // External arrays are always dense. return length; + +#undef TYPED_ARRAY_CASE case NO_ELEMENTS: return 0; case FAST_SLOPPY_ARGUMENTS_ELEMENTS: @@ -956,9 +969,7 @@ void CollectElementIndices(Isolate* isolate, Handle<JSObject> object, } #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype) case TYPE##_ELEMENTS: - TYPED_ARRAYS(TYPED_ARRAY_CASE) -#undef TYPED_ARRAY_CASE - { + TYPED_ARRAYS(TYPED_ARRAY_CASE) { size_t length = Handle<JSTypedArray>::cast(object)->length(); if (range <= length) { length = range; @@ -974,6 +985,11 @@ void CollectElementIndices(Isolate* isolate, Handle<JSObject> object, if (length == range) return; // All indices accounted for already. break; } + RAB_GSAB_TYPED_ARRAYS(TYPED_ARRAY_CASE) + // TODO(v8:11111): Support RAB / GSAB. + UNREACHABLE(); + +#undef TYPED_ARRAY_CASE case FAST_SLOPPY_ARGUMENTS_ELEMENTS: case SLOW_SLOPPY_ARGUMENTS_ELEMENTS: { DisallowGarbageCollection no_gc; @@ -1199,8 +1215,11 @@ bool IterateElements(Isolate* isolate, Handle<JSReceiver> receiver, break; #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype) case TYPE##_ELEMENTS: TYPED_ARRAYS(TYPED_ARRAY_CASE) -#undef TYPED_ARRAY_CASE return IterateElementsSlow(isolate, receiver, length, visitor); + RAB_GSAB_TYPED_ARRAYS(TYPED_ARRAY_CASE) + // TODO(v8:11111): Support RAB / GSAB. + UNREACHABLE(); +#undef TYPED_ARRAY_CASE case FAST_STRING_WRAPPER_ELEMENTS: case SLOW_STRING_WRAPPER_ELEMENTS: // |array| is guaranteed to be an array or typed array. diff --git a/deps/v8/src/builtins/builtins-arraybuffer.cc b/deps/v8/src/builtins/builtins-arraybuffer.cc index 0f5f905186..2d07847d57 100644 --- a/deps/v8/src/builtins/builtins-arraybuffer.cc +++ b/deps/v8/src/builtins/builtins-arraybuffer.cc @@ -23,17 +23,43 @@ namespace internal { name)); \ } +#define CHECK_RESIZABLE(expected, name, method) \ + if (name->is_resizable() != expected) { \ + THROW_NEW_ERROR_RETURN_FAILURE( \ + isolate, \ + NewTypeError(MessageTemplate::kIncompatibleMethodReceiver, \ + isolate->factory()->NewStringFromAsciiChecked(method), \ + name)); \ + } + // ----------------------------------------------------------------------------- // ES#sec-arraybuffer-objects namespace { +bool RoundUpToPageSize(size_t byte_length, size_t page_size, + size_t max_allowed_byte_length, size_t* pages) { + size_t bytes_wanted = RoundUp(byte_length, page_size); + if (bytes_wanted > max_allowed_byte_length) { + return false; + } + *pages = bytes_wanted / page_size; + return true; +} + Object ConstructBuffer(Isolate* isolate, Handle<JSFunction> target, Handle<JSReceiver> new_target, Handle<Object> length, - InitializedFlag initialized) { - SharedFlag shared = (*target != target->native_context().array_buffer_fun()) - ? SharedFlag::kShared - : SharedFlag::kNotShared; + Handle<Object> max_length, InitializedFlag initialized) { + SharedFlag shared = + (*target != target->native_context().array_buffer_fun() && + *target != target->native_context().resizable_array_buffer_fun()) + ? SharedFlag::kShared + : SharedFlag::kNotShared; + ResizableFlag resizable = + (*target == target->native_context().resizable_array_buffer_fun() || + *target == target->native_context().growable_shared_array_buffer_fun()) + ? ResizableFlag::kResizable + : ResizableFlag::kNotResizable; Handle<JSObject> result; ASSIGN_RETURN_FAILURE_ON_EXCEPTION( isolate, result, @@ -42,9 +68,10 @@ Object ConstructBuffer(Isolate* isolate, Handle<JSFunction> target, // Ensure that all fields are initialized because BackingStore::Allocate is // allowed to GC. Note that we cannot move the allocation of the ArrayBuffer // after BackingStore::Allocate because of the spec. - array_buffer->Setup(shared, nullptr); + array_buffer->Setup(shared, resizable, nullptr); size_t byte_length; + size_t max_byte_length = 0; if (!TryNumberToSize(*length, &byte_length) || byte_length > JSArrayBuffer::kMaxByteLength) { // ToNumber failed. @@ -52,8 +79,46 @@ Object ConstructBuffer(Isolate* isolate, Handle<JSFunction> target, isolate, NewRangeError(MessageTemplate::kInvalidArrayBufferLength)); } - auto backing_store = - BackingStore::Allocate(isolate, byte_length, shared, initialized); + std::unique_ptr<BackingStore> backing_store; + if (resizable == ResizableFlag::kNotResizable) { + backing_store = + BackingStore::Allocate(isolate, byte_length, shared, initialized); + } else { + Handle<Object> number_max_length; + ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, number_max_length, + Object::ToInteger(isolate, max_length)); + + if (!TryNumberToSize(*number_max_length, &max_byte_length)) { + THROW_NEW_ERROR_RETURN_FAILURE( + isolate, + NewRangeError(MessageTemplate::kInvalidArrayBufferMaxLength)); + } + if (byte_length > max_byte_length) { + THROW_NEW_ERROR_RETURN_FAILURE( + isolate, + NewRangeError(MessageTemplate::kInvalidArrayBufferMaxLength)); + } + + size_t page_size = AllocatePageSize(); + size_t initial_pages; + if (!RoundUpToPageSize(byte_length, page_size, + JSArrayBuffer::kMaxByteLength, &initial_pages)) { + THROW_NEW_ERROR_RETURN_FAILURE( + isolate, NewRangeError(MessageTemplate::kInvalidArrayBufferLength)); + } + + size_t max_pages; + if (!RoundUpToPageSize(max_byte_length, page_size, + JSArrayBuffer::kMaxByteLength, &max_pages)) { + THROW_NEW_ERROR_RETURN_FAILURE( + isolate, + NewRangeError(MessageTemplate::kInvalidArrayBufferMaxLength)); + } + constexpr bool kIsWasmMemory = false; + backing_store = BackingStore::TryAllocateAndPartiallyCommitMemory( + isolate, byte_length, page_size, initial_pages, max_pages, + kIsWasmMemory, shared); + } if (!backing_store) { // Allocation of backing store failed. THROW_NEW_ERROR_RETURN_FAILURE( @@ -61,6 +126,7 @@ Object ConstructBuffer(Isolate* isolate, Handle<JSFunction> target, } array_buffer->Attach(std::move(backing_store)); + array_buffer->set_max_byte_length(max_byte_length); return *array_buffer; } @@ -71,7 +137,10 @@ BUILTIN(ArrayBufferConstructor) { HandleScope scope(isolate); Handle<JSFunction> target = args.target(); DCHECK(*target == target->native_context().array_buffer_fun() || - *target == target->native_context().shared_array_buffer_fun()); + *target == target->native_context().shared_array_buffer_fun() || + *target == target->native_context().resizable_array_buffer_fun() || + *target == + target->native_context().growable_shared_array_buffer_fun()); if (args.new_target()->IsUndefined(isolate)) { // [[Call]] THROW_NEW_ERROR_RETURN_FAILURE( isolate, NewTypeError(MessageTemplate::kConstructorNotFunction, @@ -87,10 +156,11 @@ BUILTIN(ArrayBufferConstructor) { if (number_length->Number() < 0.0) { THROW_NEW_ERROR_RETURN_FAILURE( isolate, NewRangeError(MessageTemplate::kInvalidArrayBufferLength)); - } + } - return ConstructBuffer(isolate, target, new_target, number_length, - InitializedFlag::kZeroInitialized); + Handle<Object> max_length = args.atOrUndefined(isolate, 2); + return ConstructBuffer(isolate, target, new_target, number_length, max_length, + InitializedFlag::kZeroInitialized); } // This is a helper to construct an ArrayBuffer with uinitialized memory. @@ -101,7 +171,7 @@ BUILTIN(ArrayBufferConstructor_DoNotInitialize) { Handle<JSFunction> target(isolate->native_context()->array_buffer_fun(), isolate); Handle<Object> length = args.atOrUndefined(isolate, 1); - return ConstructBuffer(isolate, target, target, length, + return ConstructBuffer(isolate, target, target, length, Handle<Object>(), InitializedFlag::kUninitialized); } @@ -119,6 +189,8 @@ static Object SliceHelper(BuiltinArguments args, Isolate* isolate, // * [SAB] If IsSharedArrayBuffer(O) is false, throw a TypeError exception. CHECK_SHARED(is_shared, array_buffer, kMethodName); + CHECK_RESIZABLE(false, array_buffer, kMethodName); + // * [AB] If IsDetachedBuffer(buffer) is true, throw a TypeError exception. if (!is_shared && array_buffer->was_detached()) { THROW_NEW_ERROR_RETURN_FAILURE( @@ -280,5 +352,158 @@ BUILTIN(ArrayBufferPrototypeSlice) { return SliceHelper(args, isolate, kMethodName, false); } +static Object ResizeHelper(BuiltinArguments args, Isolate* isolate, + const char* kMethodName, bool is_shared) { + HandleScope scope(isolate); + + // 1 Let O be the this value. + // 2. Perform ? RequireInternalSlot(O, [[ArrayBufferMaxByteLength]]). + CHECK_RECEIVER(JSArrayBuffer, array_buffer, kMethodName); + CHECK_RESIZABLE(true, array_buffer, kMethodName); + + // [RAB] 3. If IsSharedArrayBuffer(O) is true, throw a *TypeError* exception + // [GSAB] 3. If IsSharedArrayBuffer(O) is false, throw a *TypeError* exception + CHECK_SHARED(is_shared, array_buffer, kMethodName); + + // Let newByteLength to ? ToIntegerOrInfinity(newLength). + Handle<Object> new_length = args.at(1); + Handle<Object> number_new_byte_length; + ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, number_new_byte_length, + Object::ToInteger(isolate, new_length)); + + // [RAB] If IsDetachedBuffer(O) is true, throw a TypeError exception. + if (!is_shared && array_buffer->was_detached()) { + THROW_NEW_ERROR_RETURN_FAILURE( + isolate, NewTypeError(MessageTemplate::kDetachedOperation, + isolate->factory()->NewStringFromAsciiChecked( + kMethodName))); + } + + // [RAB] If newByteLength < 0 or newByteLength > + // O.[[ArrayBufferMaxByteLength]], throw a RangeError exception. + + // [GSAB] If newByteLength < currentByteLength or newByteLength > + // O.[[ArrayBufferMaxByteLength]], throw a RangeError exception. + size_t new_byte_length; + if (!TryNumberToSize(*number_new_byte_length, &new_byte_length)) { + THROW_NEW_ERROR_RETURN_FAILURE( + isolate, NewRangeError(MessageTemplate::kInvalidArrayBufferResizeLength, + isolate->factory()->NewStringFromAsciiChecked( + kMethodName))); + } + + if (is_shared && new_byte_length < array_buffer->byte_length()) { + // GrowableSharedArrayBuffer is only allowed to grow. + THROW_NEW_ERROR_RETURN_FAILURE( + isolate, NewRangeError(MessageTemplate::kInvalidArrayBufferResizeLength, + isolate->factory()->NewStringFromAsciiChecked( + kMethodName))); + } + + if (new_byte_length > array_buffer->max_byte_length()) { + THROW_NEW_ERROR_RETURN_FAILURE( + isolate, NewRangeError(MessageTemplate::kInvalidArrayBufferResizeLength, + isolate->factory()->NewStringFromAsciiChecked( + kMethodName))); + } + + size_t page_size = AllocatePageSize(); + size_t new_committed_pages; + bool round_return_value = + RoundUpToPageSize(new_byte_length, page_size, + JSArrayBuffer::kMaxByteLength, &new_committed_pages); + CHECK(round_return_value); + + // [RAB] Let hostHandled be ? HostResizeArrayBuffer(O, newByteLength). + // [GSAB] Let hostHandled be ? HostGrowArrayBuffer(O, newByteLength). + // If hostHandled is handled, return undefined. + + // TODO(v8:11111): Wasm integration. + + if (!is_shared) { + // [RAB] Let oldBlock be O.[[ArrayBufferData]]. + // [RAB] Let newBlock be ? CreateByteDataBlock(newByteLength). + // [RAB] Let copyLength be min(newByteLength, O.[[ArrayBufferByteLength]]). + // [RAB] Perform CopyDataBlockBytes(newBlock, 0, oldBlock, 0, copyLength). + // [RAB] NOTE: Neither creation of the new Data Block nor copying from the + // old Data Block are observable. Implementations reserve the right to + // implement this method as in-place growth or shrinkage. + if (array_buffer->GetBackingStore()->ResizeInPlace( + isolate, new_byte_length, new_committed_pages * page_size) != + BackingStore::ResizeOrGrowResult::kSuccess) { + THROW_NEW_ERROR_RETURN_FAILURE( + isolate, NewRangeError(MessageTemplate::kOutOfMemory, + isolate->factory()->NewStringFromAsciiChecked( + kMethodName))); + } + // [RAB] Set O.[[ArrayBufferByteLength]] to newLength. + array_buffer->set_byte_length(new_byte_length); + } else { + // [GSAB] (Detailed description of the algorithm omitted.) + auto result = array_buffer->GetBackingStore()->GrowInPlace( + isolate, new_byte_length, new_committed_pages * page_size); + if (result == BackingStore::ResizeOrGrowResult::kFailure) { + THROW_NEW_ERROR_RETURN_FAILURE( + isolate, NewRangeError(MessageTemplate::kOutOfMemory, + isolate->factory()->NewStringFromAsciiChecked( + kMethodName))); + } + if (result == BackingStore::ResizeOrGrowResult::kRace) { + THROW_NEW_ERROR_RETURN_FAILURE( + isolate, + NewRangeError( + MessageTemplate::kInvalidArrayBufferResizeLength, + isolate->factory()->NewStringFromAsciiChecked(kMethodName))); + } + // Invariant: byte_length for a GSAB is 0 (it needs to be read from the + // BackingStore). + CHECK_EQ(0, array_buffer->byte_length()); + } + return ReadOnlyRoots(isolate).undefined_value(); +} + +// ES #sec-get-growablesharedarraybuffer.prototype.bytelength +// get GrowableSharedArrayBuffer.prototype.byteLength +BUILTIN(GrowableSharedArrayBufferPrototypeGetByteLength) { + const char* const kMethodName = + "get GrowableSharedArrayBuffer.prototype.byteLength"; + HandleScope scope(isolate); + + // 1. Let O be the this value. + // 2. Perform ? RequireInternalSlot(O, [[ArrayBufferMaxLength]]). + CHECK_RECEIVER(JSArrayBuffer, array_buffer, kMethodName); + CHECK_RESIZABLE(true, array_buffer, kMethodName); + // 3. If IsSharedArrayBuffer(O) is false, throw a TypeError exception. + CHECK_SHARED(true, array_buffer, kMethodName); + + // 4. Let length be ArrayBufferByteLength(O, SeqCst). + + // Invariant: byte_length for GSAB is 0 (it needs to be read from the + // BackingStore). + DCHECK_EQ(0, array_buffer->byte_length()); + + size_t byte_length = + array_buffer->GetBackingStore()->byte_length(std::memory_order_seq_cst); + + // 5. Return length. + return *isolate->factory()->NewNumberFromSize(byte_length); +} + +// ES #sec-resizablearraybuffer.prototype.resize +// ResizableArrayBuffer.prototype.resize(new_size)) +BUILTIN(ResizableArrayBufferPrototypeResize) { + const char* const kMethodName = "ResizableArrayBuffer.prototype.resize"; + constexpr bool kIsShared = false; + return ResizeHelper(args, isolate, kMethodName, kIsShared); +} + +// ES #sec-growablesharedarraybuffer.prototype.grow +// GrowableSharedArrayBuffer.prototype.grow(new_size)) +BUILTIN(GrowableSharedArrayBufferPrototypeGrow) { + const char* const kMethodName = "GrowableSharedArrayBuffer.prototype.grow"; + constexpr bool kIsShared = true; + return ResizeHelper(args, isolate, kMethodName, kIsShared); +} + } // namespace internal } // namespace v8 diff --git a/deps/v8/src/builtins/builtins-call-gen.cc b/deps/v8/src/builtins/builtins-call-gen.cc index 664f57aadb..89bf77d0b0 100644 --- a/deps/v8/src/builtins/builtins-call-gen.cc +++ b/deps/v8/src/builtins/builtins-call-gen.cc @@ -64,38 +64,45 @@ void Builtins::Generate_CallFunctionForwardVarargs(MacroAssembler* masm) { masm->isolate()->builtins()->CallFunction()); } +// TODO(cbruni): Try reusing code between builtin versions to avoid binary +// overhead. +TF_BUILTIN(Call_ReceiverIsNullOrUndefined_Baseline_Compact, + CallOrConstructBuiltinsAssembler) { + auto receiver = UndefinedConstant(); + CallReceiver<Descriptor>(Builtins::kCall_ReceiverIsNullOrUndefined, receiver); +} + TF_BUILTIN(Call_ReceiverIsNullOrUndefined_Baseline, CallOrConstructBuiltinsAssembler) { - auto target = Parameter<Object>(Descriptor::kFunction); auto argc = UncheckedParameter<Int32T>(Descriptor::kActualArgumentsCount); - auto context = LoadContextFromBaseline(); - auto feedback_vector = LoadFeedbackVectorFromBaseline(); auto slot = UncheckedParameter<UintPtrT>(Descriptor::kSlot); - CollectCallFeedback(target, context, feedback_vector, slot); - TailCallBuiltin(Builtins::kCall_ReceiverIsNullOrUndefined, context, target, - argc); + auto receiver = UndefinedConstant(); + CallReceiver<Descriptor>(Builtins::kCall_ReceiverIsNullOrUndefined, argc, + slot, receiver); +} + +TF_BUILTIN(Call_ReceiverIsNotNullOrUndefined_Baseline_Compact, + CallOrConstructBuiltinsAssembler) { + CallReceiver<Descriptor>(Builtins::kCall_ReceiverIsNotNullOrUndefined); } TF_BUILTIN(Call_ReceiverIsNotNullOrUndefined_Baseline, CallOrConstructBuiltinsAssembler) { - auto target = Parameter<Object>(Descriptor::kFunction); auto argc = UncheckedParameter<Int32T>(Descriptor::kActualArgumentsCount); - auto context = LoadContextFromBaseline(); - auto feedback_vector = LoadFeedbackVectorFromBaseline(); auto slot = UncheckedParameter<UintPtrT>(Descriptor::kSlot); - CollectCallFeedback(target, context, feedback_vector, slot); - TailCallBuiltin(Builtins::kCall_ReceiverIsNotNullOrUndefined, context, target, - argc); + CallReceiver<Descriptor>(Builtins::kCall_ReceiverIsNotNullOrUndefined, argc, + slot); +} + +TF_BUILTIN(Call_ReceiverIsAny_Baseline_Compact, + CallOrConstructBuiltinsAssembler) { + CallReceiver<Descriptor>(Builtins::kCall_ReceiverIsAny); } TF_BUILTIN(Call_ReceiverIsAny_Baseline, CallOrConstructBuiltinsAssembler) { - auto target = Parameter<Object>(Descriptor::kFunction); auto argc = UncheckedParameter<Int32T>(Descriptor::kActualArgumentsCount); - auto context = LoadContextFromBaseline(); - auto feedback_vector = LoadFeedbackVectorFromBaseline(); auto slot = UncheckedParameter<UintPtrT>(Descriptor::kSlot); - CollectCallFeedback(target, context, feedback_vector, slot); - TailCallBuiltin(Builtins::kCall_ReceiverIsAny, context, target, argc); + CallReceiver<Descriptor>(Builtins::kCall_ReceiverIsAny, argc, slot); } TF_BUILTIN(Call_ReceiverIsNullOrUndefined_WithFeedback, @@ -105,7 +112,9 @@ TF_BUILTIN(Call_ReceiverIsNullOrUndefined_WithFeedback, auto context = Parameter<Context>(Descriptor::kContext); auto feedback_vector = Parameter<FeedbackVector>(Descriptor::kFeedbackVector); auto slot = UncheckedParameter<UintPtrT>(Descriptor::kSlot); - CollectCallFeedback(target, context, feedback_vector, slot); + auto receiver = Parameter<Object>(Descriptor::kReceiver); + CollectCallFeedback( + target, [=] { return receiver; }, context, feedback_vector, slot); TailCallBuiltin(Builtins::kCall_ReceiverIsNullOrUndefined, context, target, argc); } @@ -117,7 +126,9 @@ TF_BUILTIN(Call_ReceiverIsNotNullOrUndefined_WithFeedback, auto context = Parameter<Context>(Descriptor::kContext); auto feedback_vector = Parameter<FeedbackVector>(Descriptor::kFeedbackVector); auto slot = UncheckedParameter<UintPtrT>(Descriptor::kSlot); - CollectCallFeedback(target, context, feedback_vector, slot); + auto receiver = Parameter<Object>(Descriptor::kReceiver); + CollectCallFeedback( + target, [=] { return receiver; }, context, feedback_vector, slot); TailCallBuiltin(Builtins::kCall_ReceiverIsNotNullOrUndefined, context, target, argc); } @@ -128,7 +139,9 @@ TF_BUILTIN(Call_ReceiverIsAny_WithFeedback, CallOrConstructBuiltinsAssembler) { auto context = Parameter<Context>(Descriptor::kContext); auto feedback_vector = Parameter<FeedbackVector>(Descriptor::kFeedbackVector); auto slot = UncheckedParameter<UintPtrT>(Descriptor::kSlot); - CollectCallFeedback(target, context, feedback_vector, slot); + auto receiver = Parameter<Object>(Descriptor::kReceiver); + CollectCallFeedback( + target, [=] { return receiver; }, context, feedback_vector, slot); TailCallBuiltin(Builtins::kCall_ReceiverIsAny, context, target, argc); } @@ -449,6 +462,43 @@ void CallOrConstructBuiltinsAssembler::CallOrConstructWithSpread( } } +template <class Descriptor> +void CallOrConstructBuiltinsAssembler::CallReceiver( + Builtins::Name id, base::Optional<TNode<Object>> receiver) { + static_assert(std::is_same<Descriptor, + CallTrampoline_Baseline_CompactDescriptor>::value, + "Incompatible Descriptor"); + auto bitfield = UncheckedParameter<Word32T>(Descriptor::kBitField); + TNode<Int32T> argc = + Signed(DecodeWord32< + CallTrampoline_Baseline_CompactDescriptor::ArgumentCountField>( + bitfield)); + TNode<UintPtrT> slot = ChangeUint32ToWord( + DecodeWord32<CallTrampoline_Baseline_CompactDescriptor::SlotField>( + bitfield)); + CallReceiver<Descriptor>(id, argc, slot, receiver); +} + +template <class Descriptor> +void CallOrConstructBuiltinsAssembler::CallReceiver( + Builtins::Name id, TNode<Int32T> argc, TNode<UintPtrT> slot, + base::Optional<TNode<Object>> maybe_receiver) { + auto target = Parameter<Object>(Descriptor::kFunction); + auto context = LoadContextFromBaseline(); + auto feedback_vector = LoadFeedbackVectorFromBaseline(); + LazyNode<Object> receiver = [=] { + if (maybe_receiver) { + return *maybe_receiver; + } else { + CodeStubArguments args(this, argc); + return args.GetReceiver(); + } + }; + + CollectCallFeedback(target, receiver, context, feedback_vector, slot); + TailCallBuiltin(id, context, target, argc); +} + TF_BUILTIN(CallWithArrayLike, CallOrConstructBuiltinsAssembler) { auto target = Parameter<Object>(Descriptor::kTarget); base::Optional<TNode<Object>> new_target = base::nullopt; @@ -464,7 +514,9 @@ TF_BUILTIN(CallWithArrayLike_WithFeedback, CallOrConstructBuiltinsAssembler) { auto context = Parameter<Context>(Descriptor::kContext); auto feedback_vector = Parameter<FeedbackVector>(Descriptor::kFeedbackVector); auto slot = UncheckedParameter<UintPtrT>(Descriptor::kSlot); - CollectCallFeedback(target, context, feedback_vector, slot); + auto receiver = Parameter<Object>(Descriptor::kReceiver); + CollectCallFeedback( + target, [=] { return receiver; }, context, feedback_vector, slot); CallOrConstructWithArrayLike(target, new_target, arguments_list, context); } @@ -485,7 +537,10 @@ TF_BUILTIN(CallWithSpread_Baseline, CallOrConstructBuiltinsAssembler) { auto context = LoadContextFromBaseline(); auto feedback_vector = LoadFeedbackVectorFromBaseline(); auto slot = UncheckedParameter<UintPtrT>(Descriptor::kSlot); - CollectCallFeedback(target, context, feedback_vector, slot); + CodeStubArguments args(this, args_count); + CollectCallFeedback( + target, [=] { return args.GetReceiver(); }, context, feedback_vector, + slot); CallOrConstructWithSpread(target, new_target, spread, args_count, context); } @@ -497,7 +552,9 @@ TF_BUILTIN(CallWithSpread_WithFeedback, CallOrConstructBuiltinsAssembler) { auto context = Parameter<Context>(Descriptor::kContext); auto feedback_vector = Parameter<FeedbackVector>(Descriptor::kFeedbackVector); auto slot = UncheckedParameter<UintPtrT>(Descriptor::kSlot); - CollectCallFeedback(target, context, feedback_vector, slot); + auto receiver = Parameter<Object>(Descriptor::kReceiver); + CollectCallFeedback( + target, [=] { return receiver; }, context, feedback_vector, slot); CallOrConstructWithSpread(target, new_target, spread, args_count, context); } diff --git a/deps/v8/src/builtins/builtins-call-gen.h b/deps/v8/src/builtins/builtins-call-gen.h index c938662d5e..ff4d998ff3 100644 --- a/deps/v8/src/builtins/builtins-call-gen.h +++ b/deps/v8/src/builtins/builtins-call-gen.h @@ -30,6 +30,13 @@ class CallOrConstructBuiltinsAssembler : public CodeStubAssembler { TNode<Object> spread, TNode<Int32T> args_count, TNode<Context> context); + template <class Descriptor> + void CallReceiver(Builtins::Name id, + base::Optional<TNode<Object>> = base::nullopt); + template <class Descriptor> + void CallReceiver(Builtins::Name id, TNode<Int32T> argc, TNode<UintPtrT> slot, + base::Optional<TNode<Object>> = base::nullopt); + enum class CallFunctionTemplateMode : uint8_t { kCheckAccess, kCheckCompatibleReceiver, diff --git a/deps/v8/src/builtins/builtins-debug-gen.cc b/deps/v8/src/builtins/builtins-debug-gen.cc deleted file mode 100644 index 9d47cf1600..0000000000 --- a/deps/v8/src/builtins/builtins-debug-gen.cc +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2016 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "src/builtins/builtins-utils.h" -#include "src/builtins/builtins.h" -#include "src/debug/debug.h" -#include "src/objects/objects-inl.h" - -namespace v8 { -namespace internal { - -void Builtins::Generate_FrameDropperTrampoline(MacroAssembler* masm) { - DebugCodegen::GenerateFrameDropperTrampoline(masm); -} - -void Builtins::Generate_HandleDebuggerStatement(MacroAssembler* masm) { - DebugCodegen::GenerateHandleDebuggerStatement(masm); -} - -} // namespace internal -} // namespace v8 diff --git a/deps/v8/src/builtins/builtins-definitions.h b/deps/v8/src/builtins/builtins-definitions.h index b0e608418e..78255a30e9 100644 --- a/deps/v8/src/builtins/builtins-definitions.h +++ b/deps/v8/src/builtins/builtins-definitions.h @@ -50,8 +50,13 @@ namespace internal { ASM(Call_ReceiverIsNullOrUndefined, CallTrampoline) \ ASM(Call_ReceiverIsNotNullOrUndefined, CallTrampoline) \ ASM(Call_ReceiverIsAny, CallTrampoline) \ + TFC(Call_ReceiverIsNullOrUndefined_Baseline_Compact, \ + CallTrampoline_Baseline_Compact) \ TFC(Call_ReceiverIsNullOrUndefined_Baseline, CallTrampoline_Baseline) \ + TFC(Call_ReceiverIsNotNullOrUndefined_Baseline_Compact, \ + CallTrampoline_Baseline_Compact) \ TFC(Call_ReceiverIsNotNullOrUndefined_Baseline, CallTrampoline_Baseline) \ + TFC(Call_ReceiverIsAny_Baseline_Compact, CallTrampoline_Baseline_Compact) \ TFC(Call_ReceiverIsAny_Baseline, CallTrampoline_Baseline) \ TFC(Call_ReceiverIsNullOrUndefined_WithFeedback, \ CallTrampoline_WithFeedback) \ @@ -133,13 +138,13 @@ namespace internal { InterpreterPushArgsThenConstruct) \ ASM(InterpreterPushArgsThenConstructWithFinalSpread, \ InterpreterPushArgsThenConstruct) \ - ASM(InterpreterEnterBytecodeAdvance, Dummy) \ - ASM(InterpreterEnterBytecodeDispatch, Dummy) \ + ASM(InterpreterEnterAtBytecode, Dummy) \ + ASM(InterpreterEnterAtNextBytecode, Dummy) \ ASM(InterpreterOnStackReplacement, ContextOnly) \ \ /* Baseline Compiler */ \ ASM(BaselineOutOfLinePrologue, BaselineOutOfLinePrologue) \ - ASM(BaselineOnStackReplacement, ContextOnly) \ + ASM(BaselineOnStackReplacement, Void) \ ASM(BaselineLeaveFrame, BaselineLeaveFrame) \ ASM(BaselineEnterAtBytecode, Void) \ ASM(BaselineEnterAtNextBytecode, Void) \ @@ -200,8 +205,6 @@ namespace internal { \ /* Debugger */ \ TFJ(DebugBreakTrampoline, kDontAdaptArgumentsSentinel) \ - ASM(FrameDropperTrampoline, FrameDropperTrampoline) \ - ASM(HandleDebuggerStatement, ContextOnly) \ \ /* Type conversions */ \ TFC(ToNumber, TypeConversion) \ @@ -770,6 +773,11 @@ namespace internal { ASM(RegExpInterpreterTrampoline, CCall) \ ASM(RegExpExperimentalTrampoline, CCall) \ \ + /* ResizableArrayBuffer & GrowableSharedArrayBuffer */ \ + CPP(ResizableArrayBufferPrototypeResize) \ + CPP(GrowableSharedArrayBufferPrototypeGrow) \ + CPP(GrowableSharedArrayBufferPrototypeGetByteLength) \ + \ /* Set */ \ TFJ(SetConstructor, kDontAdaptArgumentsSentinel) \ TFJ(SetPrototypeHas, 1, kReceiver, kKey) \ @@ -863,6 +871,7 @@ namespace internal { IF_WASM(ASM, GenericJSToWasmWrapper, Dummy) \ IF_WASM(ASM, WasmCompileLazy, Dummy) \ IF_WASM(ASM, WasmDebugBreak, Dummy) \ + IF_WASM(ASM, WasmOnStackReplace, Dummy) \ IF_WASM(TFC, WasmFloat32ToNumber, WasmFloat32ToNumber) \ IF_WASM(TFC, WasmFloat64ToNumber, WasmFloat64ToNumber) \ IF_WASM(TFC, WasmI32AtomicWait32, WasmI32AtomicWait32) \ @@ -983,6 +992,7 @@ namespace internal { CPP(CollatorPrototypeCompare) \ /* ecma402 #sec-intl.collator.supportedlocalesof */ \ CPP(CollatorSupportedLocalesOf) \ + /* ecma402 #sec-intl.collator.prototype.resolvedoptions */ \ CPP(CollatorPrototypeResolvedOptions) \ /* ecma402 #sup-date.prototype.tolocaledatestring */ \ CPP(DatePrototypeToLocaleDateString) \ @@ -1028,21 +1038,46 @@ namespace internal { CPP(ListFormatSupportedLocalesOf) \ /* ecma402 #sec-intl-locale-constructor */ \ CPP(LocaleConstructor) \ + /* ecma402 #sec-Intl.Locale.prototype.baseName */ \ CPP(LocalePrototypeBaseName) \ + /* ecma402 #sec-Intl.Locale.prototype.calendar */ \ CPP(LocalePrototypeCalendar) \ + /* ecma402 #sec-Intl.Locale.prototype.calendars */ \ + CPP(LocalePrototypeCalendars) \ + /* ecma402 #sec-Intl.Locale.prototype.caseFirst */ \ CPP(LocalePrototypeCaseFirst) \ + /* ecma402 #sec-Intl.Locale.prototype.collation */ \ CPP(LocalePrototypeCollation) \ + /* ecma402 #sec-Intl.Locale.prototype.collations */ \ + CPP(LocalePrototypeCollations) \ + /* ecma402 #sec-Intl.Locale.prototype.hourCycle */ \ CPP(LocalePrototypeHourCycle) \ + /* ecma402 #sec-Intl.Locale.prototype.hourCycles */ \ + CPP(LocalePrototypeHourCycles) \ + /* ecma402 #sec-Intl.Locale.prototype.language */ \ CPP(LocalePrototypeLanguage) \ /* ecma402 #sec-Intl.Locale.prototype.maximize */ \ CPP(LocalePrototypeMaximize) \ /* ecma402 #sec-Intl.Locale.prototype.minimize */ \ CPP(LocalePrototypeMinimize) \ + /* ecma402 #sec-Intl.Locale.prototype.numeric */ \ CPP(LocalePrototypeNumeric) \ + /* ecma402 #sec-Intl.Locale.prototype.numberingSystem */ \ CPP(LocalePrototypeNumberingSystem) \ + /* ecma402 #sec-Intl.Locale.prototype.numberingSystems */ \ + CPP(LocalePrototypeNumberingSystems) \ + /* ecma402 #sec-Intl.Locale.prototype.region */ \ CPP(LocalePrototypeRegion) \ + /* ecma402 #sec-Intl.Locale.prototype.script */ \ CPP(LocalePrototypeScript) \ + /* ecma402 #sec-Intl.Locale.prototype.textInfo */ \ + CPP(LocalePrototypeTextInfo) \ + /* ecma402 #sec-Intl.Locale.prototype.timezones */ \ + CPP(LocalePrototypeTimeZones) \ + /* ecma402 #sec-Intl.Locale.prototype.toString */ \ CPP(LocalePrototypeToString) \ + /* ecma402 #sec-Intl.Locale.prototype.weekInfo */ \ + CPP(LocalePrototypeWeekInfo) \ /* ecma402 #sec-intl.numberformat */ \ CPP(NumberFormatConstructor) \ /* ecma402 #sec-number-format-functions */ \ @@ -1057,6 +1092,7 @@ namespace internal { CPP(NumberFormatSupportedLocalesOf) \ /* ecma402 #sec-intl.pluralrules */ \ CPP(PluralRulesConstructor) \ + /* ecma402 #sec-intl.pluralrules.prototype.resolvedoptions */ \ CPP(PluralRulesPrototypeResolvedOptions) \ /* ecma402 #sec-intl.pluralrules.prototype.select */ \ CPP(PluralRulesPrototypeSelect) \ diff --git a/deps/v8/src/builtins/builtins-error.cc b/deps/v8/src/builtins/builtins-error.cc index 840298eacb..44dce9224a 100644 --- a/deps/v8/src/builtins/builtins-error.cc +++ b/deps/v8/src/builtins/builtins-error.cc @@ -18,9 +18,12 @@ namespace internal { // ES6 section 19.5.1.1 Error ( message ) BUILTIN(ErrorConstructor) { HandleScope scope(isolate); + Handle<Object> options = FLAG_harmony_error_cause + ? args.atOrUndefined(isolate, 2) + : isolate->factory()->undefined_value(); RETURN_RESULT_OR_FAILURE( isolate, ErrorUtils::Construct(isolate, args.target(), args.new_target(), - args.atOrUndefined(isolate, 1))); + args.atOrUndefined(isolate, 1), options)); } // static diff --git a/deps/v8/src/builtins/builtins-generator-gen.cc b/deps/v8/src/builtins/builtins-generator-gen.cc index 2e9d7e24e4..b2d6e223e1 100644 --- a/deps/v8/src/builtins/builtins-generator-gen.cc +++ b/deps/v8/src/builtins/builtins-generator-gen.cc @@ -205,7 +205,7 @@ TF_BUILTIN(GeneratorPrototypeThrow, GeneratorBuiltinsAssembler) { // TODO(cbruni): Merge with corresponding bytecode handler. TF_BUILTIN(SuspendGeneratorBaseline, GeneratorBuiltinsAssembler) { auto generator = Parameter<JSGeneratorObject>(Descriptor::kGeneratorObject); - auto context = Parameter<Context>(Descriptor::kContext); + auto context = LoadContextFromBaseline(); StoreJSGeneratorObjectContext(generator, context); auto suspend_id = SmiTag(UncheckedParameter<IntPtrT>(Descriptor::kSuspendId)); StoreJSGeneratorObjectContinuation(generator, suspend_id); diff --git a/deps/v8/src/builtins/builtins-handler-gen.cc b/deps/v8/src/builtins/builtins-handler-gen.cc index 3cbd626b8e..19a31b81a7 100644 --- a/deps/v8/src/builtins/builtins-handler-gen.cc +++ b/deps/v8/src/builtins/builtins-handler-gen.cc @@ -183,28 +183,39 @@ TF_BUILTIN(ElementsTransitionAndStore_NoTransitionHandleCOW, // All elements kinds handled by EmitElementStore. Specifically, this includes // fast elements and fixed typed array elements. -#define ELEMENTS_KINDS(V) \ - V(PACKED_SMI_ELEMENTS) \ - V(HOLEY_SMI_ELEMENTS) \ - V(PACKED_ELEMENTS) \ - V(PACKED_NONEXTENSIBLE_ELEMENTS) \ - V(PACKED_SEALED_ELEMENTS) \ - V(HOLEY_ELEMENTS) \ - V(HOLEY_NONEXTENSIBLE_ELEMENTS) \ - V(HOLEY_SEALED_ELEMENTS) \ - V(PACKED_DOUBLE_ELEMENTS) \ - V(HOLEY_DOUBLE_ELEMENTS) \ - V(UINT8_ELEMENTS) \ - V(INT8_ELEMENTS) \ - V(UINT16_ELEMENTS) \ - V(INT16_ELEMENTS) \ - V(UINT32_ELEMENTS) \ - V(INT32_ELEMENTS) \ - V(FLOAT32_ELEMENTS) \ - V(FLOAT64_ELEMENTS) \ - V(UINT8_CLAMPED_ELEMENTS) \ - V(BIGUINT64_ELEMENTS) \ - V(BIGINT64_ELEMENTS) +#define ELEMENTS_KINDS(V) \ + V(PACKED_SMI_ELEMENTS) \ + V(HOLEY_SMI_ELEMENTS) \ + V(PACKED_ELEMENTS) \ + V(PACKED_NONEXTENSIBLE_ELEMENTS) \ + V(PACKED_SEALED_ELEMENTS) \ + V(HOLEY_ELEMENTS) \ + V(HOLEY_NONEXTENSIBLE_ELEMENTS) \ + V(HOLEY_SEALED_ELEMENTS) \ + V(PACKED_DOUBLE_ELEMENTS) \ + V(HOLEY_DOUBLE_ELEMENTS) \ + V(UINT8_ELEMENTS) \ + V(INT8_ELEMENTS) \ + V(UINT16_ELEMENTS) \ + V(INT16_ELEMENTS) \ + V(UINT32_ELEMENTS) \ + V(INT32_ELEMENTS) \ + V(FLOAT32_ELEMENTS) \ + V(FLOAT64_ELEMENTS) \ + V(UINT8_CLAMPED_ELEMENTS) \ + V(BIGUINT64_ELEMENTS) \ + V(BIGINT64_ELEMENTS) \ + V(RAB_GSAB_UINT8_ELEMENTS) \ + V(RAB_GSAB_INT8_ELEMENTS) \ + V(RAB_GSAB_UINT16_ELEMENTS) \ + V(RAB_GSAB_INT16_ELEMENTS) \ + V(RAB_GSAB_UINT32_ELEMENTS) \ + V(RAB_GSAB_INT32_ELEMENTS) \ + V(RAB_GSAB_FLOAT32_ELEMENTS) \ + V(RAB_GSAB_FLOAT64_ELEMENTS) \ + V(RAB_GSAB_UINT8_CLAMPED_ELEMENTS) \ + V(RAB_GSAB_BIGUINT64_ELEMENTS) \ + V(RAB_GSAB_BIGINT64_ELEMENTS) void HandlerBuiltinsAssembler::DispatchByElementsKind( TNode<Int32T> elements_kind, const ElementsKindSwitchCase& case_function, diff --git a/deps/v8/src/builtins/builtins-ic-gen.cc b/deps/v8/src/builtins/builtins-ic-gen.cc index 81bf6379ec..e172b5a129 100644 --- a/deps/v8/src/builtins/builtins-ic-gen.cc +++ b/deps/v8/src/builtins/builtins-ic-gen.cc @@ -10,70 +10,221 @@ namespace v8 { namespace internal { -#define IC_BUILTIN(Name) \ - void Builtins::Generate_##Name(compiler::CodeAssemblerState* state) { \ - AccessorAssembler assembler(state); \ - assembler.Generate##Name(); \ - } +void Builtins::Generate_LoadIC(compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateLoadIC(); +} +void Builtins::Generate_LoadIC_Megamorphic( + compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateLoadIC_Megamorphic(); +} +void Builtins::Generate_LoadIC_Noninlined(compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateLoadIC_Noninlined(); +} +void Builtins::Generate_LoadIC_NoFeedback(compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateLoadIC_NoFeedback(); +} +void Builtins::Generate_LoadICTrampoline(compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateLoadICTrampoline(); +} +void Builtins::Generate_LoadICBaseline(compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateLoadICBaseline(); +} +void Builtins::Generate_LoadICTrampoline_Megamorphic( + compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateLoadICTrampoline_Megamorphic(); +} +void Builtins::Generate_LoadSuperIC(compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateLoadSuperIC(); +} +void Builtins::Generate_LoadSuperICBaseline( + compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateLoadSuperICBaseline(); +} +void Builtins::Generate_KeyedLoadIC(compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateKeyedLoadIC(); +} +void Builtins::Generate_KeyedLoadIC_Megamorphic( + compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateKeyedLoadIC_Megamorphic(); +} +void Builtins::Generate_KeyedLoadIC_PolymorphicName( + compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateKeyedLoadIC_PolymorphicName(); +} +void Builtins::Generate_KeyedLoadICTrampoline( + compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateKeyedLoadICTrampoline(); +} +void Builtins::Generate_KeyedLoadICBaseline( + compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateKeyedLoadICBaseline(); +} +void Builtins::Generate_KeyedLoadICTrampoline_Megamorphic( + compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateKeyedLoadICTrampoline_Megamorphic(); +} +void Builtins::Generate_LoadGlobalIC_NoFeedback( + compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateLoadGlobalIC_NoFeedback(); +} +void Builtins::Generate_StoreGlobalIC(compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateStoreGlobalIC(); +} +void Builtins::Generate_StoreGlobalICTrampoline( + compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateStoreGlobalICTrampoline(); +} +void Builtins::Generate_StoreGlobalICBaseline( + compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateStoreGlobalICBaseline(); +} +void Builtins::Generate_StoreIC(compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateStoreIC(); +} +void Builtins::Generate_StoreICTrampoline(compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateStoreICTrampoline(); +} +void Builtins::Generate_StoreICBaseline(compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateStoreICBaseline(); +} +void Builtins::Generate_KeyedStoreIC(compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateKeyedStoreIC(); +} +void Builtins::Generate_KeyedStoreICTrampoline( + compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateKeyedStoreICTrampoline(); +} +void Builtins::Generate_KeyedStoreICBaseline( + compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateKeyedStoreICBaseline(); +} +void Builtins::Generate_StoreInArrayLiteralIC( + compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateStoreInArrayLiteralIC(); +} +void Builtins::Generate_StoreInArrayLiteralICBaseline( + compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateStoreInArrayLiteralICBaseline(); +} +void Builtins::Generate_CloneObjectIC(compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateCloneObjectIC(); +} +void Builtins::Generate_CloneObjectICBaseline( + compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateCloneObjectICBaseline(); +} +void Builtins::Generate_CloneObjectIC_Slow( + compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateCloneObjectIC_Slow(); +} +void Builtins::Generate_KeyedHasIC(compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateKeyedHasIC(); +} +void Builtins::Generate_KeyedHasICBaseline( + compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateKeyedHasICBaseline(); +} +void Builtins::Generate_KeyedHasIC_Megamorphic( + compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateKeyedHasIC_Megamorphic(); +} +void Builtins::Generate_KeyedHasIC_PolymorphicName( + compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateKeyedHasIC_PolymorphicName(); +} + +void Builtins::Generate_LoadGlobalIC(compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateLoadGlobalIC(TypeofMode::kNotInside); +} -#define IC_BUILTIN_PARAM(BuiltinName, GeneratorName, parameter) \ - void Builtins::Generate_##BuiltinName(compiler::CodeAssemblerState* state) { \ - AccessorAssembler assembler(state); \ - assembler.Generate##GeneratorName(parameter); \ - } +void Builtins::Generate_LoadGlobalICInsideTypeof( + compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateLoadGlobalIC(TypeofMode::kInside); +} -IC_BUILTIN(LoadIC) -IC_BUILTIN(LoadIC_Megamorphic) -IC_BUILTIN(LoadIC_Noninlined) -IC_BUILTIN(LoadIC_NoFeedback) -IC_BUILTIN(LoadICTrampoline) -IC_BUILTIN(LoadICBaseline) -IC_BUILTIN(LoadICTrampoline_Megamorphic) -IC_BUILTIN(LoadSuperIC) -IC_BUILTIN(LoadSuperICBaseline) -IC_BUILTIN(KeyedLoadIC) -IC_BUILTIN(KeyedLoadIC_Megamorphic) -IC_BUILTIN(KeyedLoadIC_PolymorphicName) -IC_BUILTIN(KeyedLoadICTrampoline) -IC_BUILTIN(KeyedLoadICBaseline) -IC_BUILTIN(KeyedLoadICTrampoline_Megamorphic) -IC_BUILTIN(LoadGlobalIC_NoFeedback) -IC_BUILTIN(StoreGlobalIC) -IC_BUILTIN(StoreGlobalICTrampoline) -IC_BUILTIN(StoreGlobalICBaseline) -IC_BUILTIN(StoreIC) -IC_BUILTIN(StoreICTrampoline) -IC_BUILTIN(StoreICBaseline) -IC_BUILTIN(KeyedStoreIC) -IC_BUILTIN(KeyedStoreICTrampoline) -IC_BUILTIN(KeyedStoreICBaseline) -IC_BUILTIN(StoreInArrayLiteralIC) -IC_BUILTIN(StoreInArrayLiteralICBaseline) -IC_BUILTIN(CloneObjectIC) -IC_BUILTIN(CloneObjectICBaseline) -IC_BUILTIN(CloneObjectIC_Slow) -IC_BUILTIN(KeyedHasIC) -IC_BUILTIN(KeyedHasICBaseline) -IC_BUILTIN(KeyedHasIC_Megamorphic) -IC_BUILTIN(KeyedHasIC_PolymorphicName) +void Builtins::Generate_LoadGlobalICTrampoline( + compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateLoadGlobalICTrampoline(TypeofMode::kNotInside); +} -IC_BUILTIN_PARAM(LoadGlobalIC, LoadGlobalIC, NOT_INSIDE_TYPEOF) -IC_BUILTIN_PARAM(LoadGlobalICInsideTypeof, LoadGlobalIC, INSIDE_TYPEOF) -IC_BUILTIN_PARAM(LoadGlobalICTrampoline, LoadGlobalICTrampoline, - NOT_INSIDE_TYPEOF) -IC_BUILTIN_PARAM(LoadGlobalICInsideTypeofTrampoline, LoadGlobalICTrampoline, - INSIDE_TYPEOF) -IC_BUILTIN_PARAM(LoadGlobalICBaseline, LoadGlobalICBaseline, NOT_INSIDE_TYPEOF) -IC_BUILTIN_PARAM(LoadGlobalICInsideTypeofBaseline, LoadGlobalICBaseline, - INSIDE_TYPEOF) -IC_BUILTIN_PARAM(LookupGlobalICBaseline, LookupGlobalICBaseline, - NOT_INSIDE_TYPEOF) -IC_BUILTIN_PARAM(LookupGlobalICInsideTypeofBaseline, LookupGlobalICBaseline, - INSIDE_TYPEOF) -IC_BUILTIN_PARAM(LookupContextBaseline, LookupContextBaseline, - NOT_INSIDE_TYPEOF) -IC_BUILTIN_PARAM(LookupContextInsideTypeofBaseline, LookupContextBaseline, - INSIDE_TYPEOF) +void Builtins::Generate_LoadGlobalICInsideTypeofTrampoline( + compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateLoadGlobalICTrampoline(TypeofMode::kInside); +} + +void Builtins::Generate_LoadGlobalICBaseline( + compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateLoadGlobalICBaseline(TypeofMode::kNotInside); +} + +void Builtins::Generate_LoadGlobalICInsideTypeofBaseline( + compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateLoadGlobalICBaseline(TypeofMode::kInside); +} + +void Builtins::Generate_LookupGlobalICBaseline( + compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateLookupGlobalICBaseline(TypeofMode::kNotInside); +} + +void Builtins::Generate_LookupGlobalICInsideTypeofBaseline( + compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateLookupGlobalICBaseline(TypeofMode::kInside); +} + +void Builtins::Generate_LookupContextBaseline( + compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateLookupContextBaseline(TypeofMode::kNotInside); +} + +void Builtins::Generate_LookupContextInsideTypeofBaseline( + compiler::CodeAssemblerState* state) { + AccessorAssembler assembler(state); + assembler.GenerateLookupContextBaseline(TypeofMode::kInside); +} TF_BUILTIN(DynamicCheckMaps, CodeStubAssembler) { auto map = Parameter<Map>(Descriptor::kMap); diff --git a/deps/v8/src/builtins/builtins-internal-gen.cc b/deps/v8/src/builtins/builtins-internal-gen.cc index 0c4131dba9..274709b46a 100644 --- a/deps/v8/src/builtins/builtins-internal-gen.cc +++ b/deps/v8/src/builtins/builtins-internal-gen.cc @@ -7,6 +7,7 @@ #include "src/builtins/builtins-utils-gen.h" #include "src/builtins/builtins.h" #include "src/codegen/code-stub-assembler.h" +#include "src/codegen/interface-descriptors-inl.h" #include "src/codegen/macro-assembler.h" #include "src/execution/frame-constants.h" #include "src/heap/memory-chunk.h" @@ -172,11 +173,11 @@ class RecordWriteCodeStubAssembler : public CodeStubAssembler { } TNode<BoolT> ShouldSkipFPRegs(TNode<Smi> mode) { - return TaggedEqual(mode, SmiConstant(kDontSaveFPRegs)); + return TaggedEqual(mode, SmiConstant(SaveFPRegsMode::kIgnore)); } TNode<BoolT> ShouldEmitRememberSet(TNode<Smi> remembered_set) { - return TaggedEqual(remembered_set, SmiConstant(EMIT_REMEMBERED_SET)); + return TaggedEqual(remembered_set, SmiConstant(RememberedSetAction::kEmit)); } template <typename Ret, typename Arg0, typename Arg1> @@ -188,7 +189,7 @@ class RecordWriteCodeStubAssembler : public CodeStubAssembler { BIND(&dont_save_fp); { CallCFunctionWithCallerSavedRegisters( - function, MachineTypeOf<Ret>::value, kDontSaveFPRegs, + function, MachineTypeOf<Ret>::value, SaveFPRegsMode::kIgnore, std::make_pair(MachineTypeOf<Arg0>::value, arg0), std::make_pair(MachineTypeOf<Arg1>::value, arg1)); Goto(next); @@ -197,7 +198,7 @@ class RecordWriteCodeStubAssembler : public CodeStubAssembler { BIND(&save_fp); { CallCFunctionWithCallerSavedRegisters( - function, MachineTypeOf<Ret>::value, kSaveFPRegs, + function, MachineTypeOf<Ret>::value, SaveFPRegsMode::kSave, std::make_pair(MachineTypeOf<Arg0>::value, arg0), std::make_pair(MachineTypeOf<Arg1>::value, arg1)); Goto(next); @@ -213,7 +214,7 @@ class RecordWriteCodeStubAssembler : public CodeStubAssembler { BIND(&dont_save_fp); { CallCFunctionWithCallerSavedRegisters( - function, MachineTypeOf<Ret>::value, kDontSaveFPRegs, + function, MachineTypeOf<Ret>::value, SaveFPRegsMode::kIgnore, std::make_pair(MachineTypeOf<Arg0>::value, arg0), std::make_pair(MachineTypeOf<Arg1>::value, arg1), std::make_pair(MachineTypeOf<Arg2>::value, arg2)); @@ -223,7 +224,7 @@ class RecordWriteCodeStubAssembler : public CodeStubAssembler { BIND(&save_fp); { CallCFunctionWithCallerSavedRegisters( - function, MachineTypeOf<Ret>::value, kSaveFPRegs, + function, MachineTypeOf<Ret>::value, SaveFPRegsMode::kSave, std::make_pair(MachineTypeOf<Arg0>::value, arg0), std::make_pair(MachineTypeOf<Arg1>::value, arg1), std::make_pair(MachineTypeOf<Arg2>::value, arg2)); @@ -821,8 +822,9 @@ TF_BUILTIN(AdaptorWithBuiltinExitFrame, CodeStubAssembler) { Int32Constant(BuiltinExitFrameConstants::kNumExtraArgsWithReceiver)); const bool builtin_exit_frame = true; - TNode<Code> code = HeapConstant(CodeFactory::CEntry( - isolate(), 1, kDontSaveFPRegs, kArgvOnStack, builtin_exit_frame)); + TNode<Code> code = + HeapConstant(CodeFactory::CEntry(isolate(), 1, SaveFPRegsMode::kIgnore, + ArgvMode::kStack, builtin_exit_frame)); // Unconditionally push argc, target and new target as extra stack arguments. // They will be used by stack frame iterators when constructing stack trace. @@ -891,54 +893,54 @@ TF_BUILTIN(AbortCSAAssert, CodeStubAssembler) { void Builtins::Generate_CEntry_Return1_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit( MacroAssembler* masm) { - Generate_CEntry(masm, 1, kDontSaveFPRegs, kArgvOnStack, false); + Generate_CEntry(masm, 1, SaveFPRegsMode::kIgnore, ArgvMode::kStack, false); } void Builtins::Generate_CEntry_Return1_DontSaveFPRegs_ArgvOnStack_BuiltinExit( MacroAssembler* masm) { - Generate_CEntry(masm, 1, kDontSaveFPRegs, kArgvOnStack, true); + Generate_CEntry(masm, 1, SaveFPRegsMode::kIgnore, ArgvMode::kStack, true); } void Builtins:: Generate_CEntry_Return1_DontSaveFPRegs_ArgvInRegister_NoBuiltinExit( MacroAssembler* masm) { - Generate_CEntry(masm, 1, kDontSaveFPRegs, kArgvInRegister, false); + Generate_CEntry(masm, 1, SaveFPRegsMode::kIgnore, ArgvMode::kRegister, false); } void Builtins::Generate_CEntry_Return1_SaveFPRegs_ArgvOnStack_NoBuiltinExit( MacroAssembler* masm) { - Generate_CEntry(masm, 1, kSaveFPRegs, kArgvOnStack, false); + Generate_CEntry(masm, 1, SaveFPRegsMode::kSave, ArgvMode::kStack, false); } void Builtins::Generate_CEntry_Return1_SaveFPRegs_ArgvOnStack_BuiltinExit( MacroAssembler* masm) { - Generate_CEntry(masm, 1, kSaveFPRegs, kArgvOnStack, true); + Generate_CEntry(masm, 1, SaveFPRegsMode::kSave, ArgvMode::kStack, true); } void Builtins::Generate_CEntry_Return2_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit( MacroAssembler* masm) { - Generate_CEntry(masm, 2, kDontSaveFPRegs, kArgvOnStack, false); + Generate_CEntry(masm, 2, SaveFPRegsMode::kIgnore, ArgvMode::kStack, false); } void Builtins::Generate_CEntry_Return2_DontSaveFPRegs_ArgvOnStack_BuiltinExit( MacroAssembler* masm) { - Generate_CEntry(masm, 2, kDontSaveFPRegs, kArgvOnStack, true); + Generate_CEntry(masm, 2, SaveFPRegsMode::kIgnore, ArgvMode::kStack, true); } void Builtins:: Generate_CEntry_Return2_DontSaveFPRegs_ArgvInRegister_NoBuiltinExit( MacroAssembler* masm) { - Generate_CEntry(masm, 2, kDontSaveFPRegs, kArgvInRegister, false); + Generate_CEntry(masm, 2, SaveFPRegsMode::kIgnore, ArgvMode::kRegister, false); } void Builtins::Generate_CEntry_Return2_SaveFPRegs_ArgvOnStack_NoBuiltinExit( MacroAssembler* masm) { - Generate_CEntry(masm, 2, kSaveFPRegs, kArgvOnStack, false); + Generate_CEntry(masm, 2, SaveFPRegsMode::kSave, ArgvMode::kStack, false); } void Builtins::Generate_CEntry_Return2_SaveFPRegs_ArgvOnStack_BuiltinExit( MacroAssembler* masm) { - Generate_CEntry(masm, 2, kSaveFPRegs, kArgvOnStack, true); + Generate_CEntry(masm, 2, SaveFPRegsMode::kSave, ArgvMode::kStack, true); } #if !defined(V8_TARGET_ARCH_ARM) && !defined(V8_TARGET_ARCH_MIPS) @@ -956,7 +958,7 @@ void Builtins::Generate_MemMove(MacroAssembler* masm) { // TODO(v8:11421): Remove #if once baseline compiler is ported to other // architectures. #if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_ARM64 || \ - V8_TARGET_ARCH_ARM + V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_RISCV64 void Builtins::Generate_BaselineLeaveFrame(MacroAssembler* masm) { EmitReturnBaseline(masm); } diff --git a/deps/v8/src/builtins/builtins-intl.cc b/deps/v8/src/builtins/builtins-intl.cc index fe32a484a3..6febc81c3a 100644 --- a/deps/v8/src/builtins/builtins-intl.cc +++ b/deps/v8/src/builtins/builtins-intl.cc @@ -668,6 +668,49 @@ BUILTIN(LocalePrototypeMinimize) { RETURN_RESULT_OR_FAILURE(isolate, JSLocale::Minimize(isolate, locale)); } +BUILTIN(LocalePrototypeCalendars) { + HandleScope scope(isolate); + CHECK_RECEIVER(JSLocale, locale, "Intl.Locale.prototype.calendars"); + RETURN_RESULT_OR_FAILURE(isolate, JSLocale::Calendars(isolate, locale)); +} + +BUILTIN(LocalePrototypeCollations) { + HandleScope scope(isolate); + CHECK_RECEIVER(JSLocale, locale, "Intl.Locale.prototype.collations"); + RETURN_RESULT_OR_FAILURE(isolate, JSLocale::Collations(isolate, locale)); +} + +BUILTIN(LocalePrototypeHourCycles) { + HandleScope scope(isolate); + CHECK_RECEIVER(JSLocale, locale, "Intl.Locale.prototype.hourCycles"); + RETURN_RESULT_OR_FAILURE(isolate, JSLocale::HourCycles(isolate, locale)); +} + +BUILTIN(LocalePrototypeNumberingSystems) { + HandleScope scope(isolate); + CHECK_RECEIVER(JSLocale, locale, "Intl.Locale.prototype.numberingSystems"); + RETURN_RESULT_OR_FAILURE(isolate, + JSLocale::NumberingSystems(isolate, locale)); +} + +BUILTIN(LocalePrototypeTextInfo) { + HandleScope scope(isolate); + CHECK_RECEIVER(JSLocale, locale, "Intl.Locale.prototype.textInfo"); + RETURN_RESULT_OR_FAILURE(isolate, JSLocale::TextInfo(isolate, locale)); +} + +BUILTIN(LocalePrototypeTimeZones) { + HandleScope scope(isolate); + CHECK_RECEIVER(JSLocale, locale, "Intl.Locale.prototype.timeZones"); + RETURN_RESULT_OR_FAILURE(isolate, JSLocale::TimeZones(isolate, locale)); +} + +BUILTIN(LocalePrototypeWeekInfo) { + HandleScope scope(isolate); + CHECK_RECEIVER(JSLocale, locale, "Intl.Locale.prototype.weekInfo"); + RETURN_RESULT_OR_FAILURE(isolate, JSLocale::WeekInfo(isolate, locale)); +} + BUILTIN(RelativeTimeFormatSupportedLocalesOf) { HandleScope scope(isolate); Handle<Object> locales = args.atOrUndefined(isolate, 1); diff --git a/deps/v8/src/builtins/builtins-lazy-gen.cc b/deps/v8/src/builtins/builtins-lazy-gen.cc index 8af0bef95d..4749ee094b 100644 --- a/deps/v8/src/builtins/builtins-lazy-gen.cc +++ b/deps/v8/src/builtins/builtins-lazy-gen.cc @@ -154,20 +154,7 @@ void LazyBuiltinsAssembler::CompileLazy(TNode<JSFunction> function) { GotoIf(InstanceTypeEqual(sfi_data_type.value(), BASELINE_DATA_TYPE), &baseline); - // Finally, check for presence of an NCI cached Code object - if an entry - // possibly exists, call into runtime to query the cache. - TNode<Uint8T> flags2 = - LoadObjectField<Uint8T>(shared, SharedFunctionInfo::kFlags2Offset); - TNode<BoolT> may_have_cached_code = - IsSetWord32<SharedFunctionInfo::MayHaveCachedCodeBit>(flags2); - code = Select<Code>( - may_have_cached_code, - [=]() { - return CAST(CallRuntime(Runtime::kTryInstallNCICode, - Parameter<Context>(Descriptor::kContext), - function)); - }, - [=]() { return sfi_code; }); + code = sfi_code; Goto(&tailcall_code); BIND(&baseline); diff --git a/deps/v8/src/builtins/builtins-microtask-queue-gen.cc b/deps/v8/src/builtins/builtins-microtask-queue-gen.cc index 1ec9e350f6..281e9234dc 100644 --- a/deps/v8/src/builtins/builtins-microtask-queue-gen.cc +++ b/deps/v8/src/builtins/builtins-microtask-queue-gen.cc @@ -473,8 +473,7 @@ void MicrotaskQueueBuiltinsAssembler::RunAllPromiseHooks( TNode<HeapObject> promise_or_capability) { Label hook(this, Label::kDeferred), done_hook(this); TNode<Uint32T> promiseHookFlags = PromiseHookFlags(); - Branch(IsAnyPromiseHookEnabledOrDebugIsActiveOrHasAsyncEventDelegate( - promiseHookFlags), &hook, &done_hook); + Branch(NeedsAnyPromiseHooks(promiseHookFlags), &hook, &done_hook); BIND(&hook); { switch (type) { diff --git a/deps/v8/src/builtins/builtins-regexp-gen.cc b/deps/v8/src/builtins/builtins-regexp-gen.cc index 23648efb98..e59d2a00ac 100644 --- a/deps/v8/src/builtins/builtins-regexp-gen.cc +++ b/deps/v8/src/builtins/builtins-regexp-gen.cc @@ -1014,6 +1014,12 @@ TF_BUILTIN(RegExpExecInternal, RegExpBuiltinsAssembler) { TNode<String> RegExpBuiltinsAssembler::FlagsGetter(TNode<Context> context, TNode<Object> regexp, bool is_fastpath) { + TVARIABLE(String, result); + Label runtime(this, Label::kDeferred), done(this, &result); + if (is_fastpath) { + GotoIfForceSlowPath(&runtime); + } + Isolate* isolate = this->isolate(); const TNode<IntPtrT> int_one = IntPtrConstant(1); @@ -1110,7 +1116,7 @@ TNode<String> RegExpBuiltinsAssembler::FlagsGetter(TNode<Context> context, // corresponding char for each set flag. { - const TNode<String> result = AllocateSeqOneByteString(var_length.value()); + const TNode<String> string = AllocateSeqOneByteString(var_length.value()); TVARIABLE(IntPtrT, var_offset, IntPtrConstant(SeqOneByteString::kHeaderSize - kHeapObjectTag)); @@ -1120,7 +1126,7 @@ TNode<String> RegExpBuiltinsAssembler::FlagsGetter(TNode<Context> context, Label next(this); \ GotoIfNot(IsSetWord(var_flags.value(), FLAG), &next); \ const TNode<Int32T> value = Int32Constant(CHAR); \ - StoreNoWriteBarrier(MachineRepresentation::kWord8, result, \ + StoreNoWriteBarrier(MachineRepresentation::kWord8, string, \ var_offset.value(), value); \ var_offset = IntPtrAdd(var_offset.value(), int_one); \ Goto(&next); \ @@ -1137,7 +1143,26 @@ TNode<String> RegExpBuiltinsAssembler::FlagsGetter(TNode<Context> context, CASE_FOR_FLAG(JSRegExp::kSticky, 'y'); #undef CASE_FOR_FLAG - return result; + if (is_fastpath) { +#ifdef V8_ENABLE_FORCE_SLOW_PATH + result = string; + Goto(&done); + + BIND(&runtime); + { + result = + CAST(CallRuntime(Runtime::kRegExpStringFromFlags, context, regexp)); + Goto(&done); + } + + BIND(&done); + return result.value(); +#else + return string; +#endif + } else { + return string; + } } } diff --git a/deps/v8/src/builtins/builtins-trace.cc b/deps/v8/src/builtins/builtins-trace.cc index cf85ce9948..24baf59522 100644 --- a/deps/v8/src/builtins/builtins-trace.cc +++ b/deps/v8/src/builtins/builtins-trace.cc @@ -9,6 +9,7 @@ #include "src/json/json-stringifier.h" #include "src/logging/counters.h" #include "src/objects/objects-inl.h" +#include "src/tracing/traced-value.h" #if defined(V8_USE_PERFETTO) #include "protos/perfetto/trace/track_event/debug_annotation.pbzero.h" diff --git a/deps/v8/src/builtins/builtins-typed-array-gen.cc b/deps/v8/src/builtins/builtins-typed-array-gen.cc index 65b1ab2f2b..d333a61e39 100644 --- a/deps/v8/src/builtins/builtins-typed-array-gen.cc +++ b/deps/v8/src/builtins/builtins-typed-array-gen.cc @@ -123,13 +123,26 @@ TF_BUILTIN(TypedArrayPrototypeByteLength, TypedArrayBuiltinsAssembler) { // Check if the {receiver} is actually a JSTypedArray. ThrowIfNotInstanceType(context, receiver, JS_TYPED_ARRAY_TYPE, kMethodName); - // Default to zero if the {receiver}s buffer was detached. + TNode<JSTypedArray> receiver_array = CAST(receiver); TNode<JSArrayBuffer> receiver_buffer = - LoadJSArrayBufferViewBuffer(CAST(receiver)); - TNode<UintPtrT> byte_length = Select<UintPtrT>( - IsDetachedBuffer(receiver_buffer), [=] { return UintPtrConstant(0); }, - [=] { return LoadJSArrayBufferViewByteLength(CAST(receiver)); }); - Return(ChangeUintPtrToTagged(byte_length)); + LoadJSArrayBufferViewBuffer(receiver_array); + + Label variable_length(this), normal(this); + Branch(IsVariableLengthTypedArray(receiver_array), &variable_length, &normal); + BIND(&variable_length); + { + Return(ChangeUintPtrToTagged(LoadVariableLengthJSTypedArrayByteLength( + context, receiver_array, receiver_buffer))); + } + + BIND(&normal); + { + // Default to zero if the {receiver}s buffer was detached. + TNode<UintPtrT> byte_length = Select<UintPtrT>( + IsDetachedBuffer(receiver_buffer), [=] { return UintPtrConstant(0); }, + [=] { return LoadJSArrayBufferViewByteLength(receiver_array); }); + Return(ChangeUintPtrToTagged(byte_length)); + } } // ES6 #sec-get-%typedarray%.prototype.byteoffset @@ -159,13 +172,29 @@ TF_BUILTIN(TypedArrayPrototypeLength, TypedArrayBuiltinsAssembler) { // Check if the {receiver} is actually a JSTypedArray. ThrowIfNotInstanceType(context, receiver, JS_TYPED_ARRAY_TYPE, kMethodName); - // Default to zero if the {receiver}s buffer was detached. + TNode<JSTypedArray> receiver_array = CAST(receiver); TNode<JSArrayBuffer> receiver_buffer = - LoadJSArrayBufferViewBuffer(CAST(receiver)); - TNode<UintPtrT> length = Select<UintPtrT>( - IsDetachedBuffer(receiver_buffer), [=] { return UintPtrConstant(0); }, - [=] { return LoadJSTypedArrayLength(CAST(receiver)); }); - Return(ChangeUintPtrToTagged(length)); + LoadJSArrayBufferViewBuffer(receiver_array); + + Label variable_length(this), normal(this); + Branch(IsVariableLengthTypedArray(receiver_array), &variable_length, &normal); + BIND(&variable_length); + { + Label miss(this); + Return(ChangeUintPtrToTagged(LoadVariableLengthJSTypedArrayLength( + receiver_array, receiver_buffer, &miss))); + BIND(&miss); + Return(ChangeUintPtrToTagged(UintPtrConstant(0))); + } + + BIND(&normal); + { + // Default to zero if the {receiver}s buffer was detached. + TNode<UintPtrT> length = Select<UintPtrT>( + IsDetachedBuffer(receiver_buffer), [=] { return UintPtrConstant(0); }, + [=] { return LoadJSTypedArrayLength(receiver_array); }); + Return(ChangeUintPtrToTagged(length)); + } } TNode<BoolT> TypedArrayBuiltinsAssembler::IsUint8ElementsKind( @@ -322,17 +351,18 @@ void TypedArrayBuiltinsAssembler::DispatchTypedArrayByElementsKind( int32_t elements_kinds[] = { #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype) TYPE##_ELEMENTS, - TYPED_ARRAYS(TYPED_ARRAY_CASE) + TYPED_ARRAYS(TYPED_ARRAY_CASE) RAB_GSAB_TYPED_ARRAYS(TYPED_ARRAY_CASE) #undef TYPED_ARRAY_CASE }; #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype) Label if_##type##array(this); TYPED_ARRAYS(TYPED_ARRAY_CASE) + RAB_GSAB_TYPED_ARRAYS(TYPED_ARRAY_CASE) #undef TYPED_ARRAY_CASE Label* elements_kind_labels[] = { #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype) &if_##type##array, - TYPED_ARRAYS(TYPED_ARRAY_CASE) + TYPED_ARRAYS(TYPED_ARRAY_CASE) RAB_GSAB_TYPED_ARRAYS(TYPED_ARRAY_CASE) #undef TYPED_ARRAY_CASE }; STATIC_ASSERT(arraysize(elements_kinds) == arraysize(elements_kind_labels)); @@ -350,6 +380,15 @@ void TypedArrayBuiltinsAssembler::DispatchTypedArrayByElementsKind( TYPED_ARRAYS(TYPED_ARRAY_CASE) #undef TYPED_ARRAY_CASE +#define TYPED_ARRAY_CASE(Type, type, TYPE, ctype) \ + BIND(&if_##type##array); \ + { \ + case_function(TYPE##_ELEMENTS, sizeof(ctype), 0); \ + Goto(&next); \ + } + RAB_GSAB_TYPED_ARRAYS(TYPED_ARRAY_CASE) +#undef TYPED_ARRAY_CASE + BIND(&if_unknown_type); Unreachable(); @@ -374,7 +413,7 @@ void TypedArrayBuiltinsAssembler::SetJSTypedArrayOnHeapDataPtr( IntPtrSub(full_base, Signed(ChangeUint32ToWord(compressed_base))); // Add JSTypedArray::ExternalPointerCompensationForOnHeapArray() to offset. DCHECK_EQ( - isolate()->isolate_root(), + isolate()->cage_base(), JSTypedArray::ExternalPointerCompensationForOnHeapArray(isolate())); // See JSTypedArray::SetOnHeapDataPtr() for details. offset = Unsigned(IntPtrAdd(offset, ptr_compr_cage_base)); diff --git a/deps/v8/src/builtins/builtins-typed-array.cc b/deps/v8/src/builtins/builtins-typed-array.cc index fdadc7a554..bb936e6e46 100644 --- a/deps/v8/src/builtins/builtins-typed-array.cc +++ b/deps/v8/src/builtins/builtins-typed-array.cc @@ -154,7 +154,8 @@ BUILTIN(TypedArrayPrototypeFill) { DCHECK_LE(end, len); DCHECK_LE(count, len); - return ElementsAccessor::ForKind(kind)->Fill(array, obj_value, start, end); + RETURN_RESULT_OR_FAILURE(isolate, ElementsAccessor::ForKind(kind)->Fill( + array, obj_value, start, end)); } BUILTIN(TypedArrayPrototypeIncludes) { diff --git a/deps/v8/src/builtins/builtins-utils.h b/deps/v8/src/builtins/builtins-utils.h index e5f420a20d..b9146ab625 100644 --- a/deps/v8/src/builtins/builtins-utils.h +++ b/deps/v8/src/builtins/builtins-utils.h @@ -85,8 +85,7 @@ class BuiltinArguments : public JavaScriptArguments { V8_NOINLINE static Address Builtin_Impl_Stats_##name( \ int args_length, Address* args_object, Isolate* isolate) { \ BuiltinArguments args(args_length, args_object); \ - RuntimeCallTimerScope timer(isolate, \ - RuntimeCallCounterId::kBuiltin_##name); \ + RCS_SCOPE(isolate, RuntimeCallCounterId::kBuiltin_##name); \ TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.runtime"), \ "V8.Builtin_" #name); \ return CONVERT_OBJECT(Builtin_Impl_##name(args, isolate)); \ diff --git a/deps/v8/src/builtins/builtins-wasm-gen.cc b/deps/v8/src/builtins/builtins-wasm-gen.cc index 0704d8681b..eb9311d0c6 100644 --- a/deps/v8/src/builtins/builtins-wasm-gen.cc +++ b/deps/v8/src/builtins/builtins-wasm-gen.cc @@ -9,7 +9,6 @@ #include "src/codegen/interface-descriptors.h" #include "src/objects/objects-inl.h" #include "src/wasm/wasm-objects.h" -#include "src/wasm/wasm-opcodes.h" namespace v8 { namespace internal { diff --git a/deps/v8/src/builtins/cast.tq b/deps/v8/src/builtins/cast.tq index 2bec3d86be..d7d2eb6aa6 100644 --- a/deps/v8/src/builtins/cast.tq +++ b/deps/v8/src/builtins/cast.tq @@ -329,6 +329,24 @@ Cast<Number|TheHole>(o: Object): Number|TheHole labels CastError { } } +Cast<Context|Zero|Undefined>(o: Object): Context|Zero|Undefined + labels CastError { + typeswitch (o) { + case (o: Context): { + return o; + } + case (o: Zero): { + return o; + } + case (o: Undefined): { + return o; + } + case (Object): { + goto CastError; + } + } +} + macro Cast<A : type extends HeapObject>(o: HeapObject): A labels CastError; diff --git a/deps/v8/src/builtins/constructor.tq b/deps/v8/src/builtins/constructor.tq index add6db0305..d929c7f485 100644 --- a/deps/v8/src/builtins/constructor.tq +++ b/deps/v8/src/builtins/constructor.tq @@ -15,6 +15,8 @@ extern runtime CreateObjectLiteral( namespace constructor { +extern builtin FastNewClosure( + Context, SharedFunctionInfo, FeedbackCell): JSFunction; extern builtin FastNewObject(Context, JSFunction, JSReceiver): JSObject; extern enum AllocationSiteMode { @@ -42,6 +44,15 @@ extern macro ConstructorBuiltinsAssembler::CreateShallowObjectLiteral( extern macro ConstructorBuiltinsAssembler::CreateEmptyObjectLiteral(Context): JSObject; +extern macro LoadContextFromBaseline(): Context; + +builtin FastNewClosureBaseline( + sharedFunctionInfo: SharedFunctionInfo, + feedbackCell: FeedbackCell): JSFunction { + const context = LoadContextFromBaseline(); + tail FastNewClosure(context, sharedFunctionInfo, feedbackCell); +} + builtin FastNewFunctionContextEval(implicit context: Context)( scopeInfo: ScopeInfo, slots: uint32): Context { return FastNewFunctionContext(scopeInfo, slots, context, kEvalScope); diff --git a/deps/v8/src/builtins/conversion.tq b/deps/v8/src/builtins/conversion.tq index 5a2dccd068..636f49a024 100644 --- a/deps/v8/src/builtins/conversion.tq +++ b/deps/v8/src/builtins/conversion.tq @@ -45,11 +45,30 @@ builtin NumberToString(implicit context: Context)(input: Number): String { } // ES6 section 7.1.2 ToBoolean ( argument ) -builtin ToBoolean(implicit context: Context)(input: JSAny): Boolean { +builtin ToBoolean(input: JSAny): Boolean { BranchIfToBooleanIsTrue(input) otherwise return TrueConstant(), return FalseConstant(); } +struct ToBooleanForBaselineJumpResult { + value: JSAny; + is_to_boolean: Smi; +} +// ToBoolean for baseline code jumps, which +// a) returns the original value as the first return value, to avoid needing +// to save it in the caller, and +// b) returns the true/false value as a Smi, to make the baseline-side +// comparison cheaper. +builtin ToBooleanForBaselineJump(input: JSAny): ToBooleanForBaselineJumpResult { + try { + BranchIfToBooleanIsTrue(input) otherwise IsTrue, IsFalse; + } label IsTrue { + return ToBooleanForBaselineJumpResult{value: input, is_to_boolean: 1}; + } label IsFalse { + return ToBooleanForBaselineJumpResult{value: input, is_to_boolean: 0}; + } +} + transitioning builtin ToLength(implicit context: Context)(input: JSAny): Number { // We might need to loop once for ToNumber conversion. diff --git a/deps/v8/src/builtins/ia32/builtins-ia32.cc b/deps/v8/src/builtins/ia32/builtins-ia32.cc index 44b71bed91..4993de4816 100644 --- a/deps/v8/src/builtins/ia32/builtins-ia32.cc +++ b/deps/v8/src/builtins/ia32/builtins-ia32.cc @@ -8,6 +8,7 @@ #include "src/base/bits-iterator.h" #include "src/base/iterator.h" #include "src/codegen/code-factory.h" +#include "src/codegen/interface-descriptors-inl.h" // For interpreter_entry_return_pc_offset. TODO(jkummerow): Drop. #include "src/codegen/macro-assembler-inl.h" #include "src/codegen/register-configuration.h" @@ -116,7 +117,7 @@ void Generate_JSBuiltinsConstructStubHelper(MacroAssembler* masm) { // edx: new target // Reload context from the frame. __ mov(esi, Operand(ebp, ConstructFrameConstants::kContextOffset)); - __ InvokeFunction(edi, edx, eax, CALL_FUNCTION); + __ InvokeFunction(edi, edx, eax, InvokeType::kCall); // Restore context from the frame. __ mov(esi, Operand(ebp, ConstructFrameConstants::kContextOffset)); @@ -245,7 +246,7 @@ void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) { // Restore and and call the constructor function. __ mov(edi, Operand(ebp, ConstructFrameConstants::kConstructorOffset)); - __ InvokeFunction(edi, edx, eax, CALL_FUNCTION); + __ InvokeFunction(edi, edx, eax, InvokeType::kCall); // ----------- S t a t e ------------- // -- eax: constructor result @@ -597,7 +598,7 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) { // Store input value into generator object. __ mov(FieldOperand(edx, JSGeneratorObject::kInputOrDebugPosOffset), eax); __ RecordWriteField(edx, JSGeneratorObject::kInputOrDebugPosOffset, eax, ecx, - kDontSaveFPRegs); + SaveFPRegsMode::kIgnore); // Load suspended function and context. __ mov(edi, FieldOperand(edx, JSGeneratorObject::kFunctionOffset)); @@ -645,15 +646,12 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) { FieldOperand(edx, JSGeneratorObject::kParametersAndRegistersOffset)); { Label done_loop, loop; - __ mov(edi, ecx); - __ bind(&loop); - __ dec(edi); + __ dec(ecx); __ j(less, &done_loop); __ Push( - FieldOperand(ebx, edi, times_tagged_size, FixedArray::kHeaderSize)); + FieldOperand(ebx, ecx, times_tagged_size, FixedArray::kHeaderSize)); __ jmp(&loop); - __ bind(&done_loop); } @@ -740,7 +738,8 @@ static void ReplaceClosureCodeWithOptimizedCode(MacroAssembler* masm, __ mov(FieldOperand(closure, JSFunction::kCodeOffset), optimized_code); __ mov(scratch1, optimized_code); // Write barrier clobbers scratch1 below. __ RecordWriteField(closure, JSFunction::kCodeOffset, scratch1, scratch2, - kDontSaveFPRegs, OMIT_REMEMBERED_SET, OMIT_SMI_CHECK); + SaveFPRegsMode::kIgnore, RememberedSetAction::kOmit, + SmiCheck::kOmit); } static void LeaveInterpreterFrame(MacroAssembler* masm, Register scratch1, @@ -1458,7 +1457,7 @@ void Builtins::Generate_InterpreterPushArgsThenConstructImpl( // and edi are used as scratch registers. Generate_InterpreterPushZeroAndArgsAndReturnAddress( masm, eax, ecx, edx, edi, - InterpreterPushArgsThenConstructDescriptor::kStackArgumentsCount, + InterpreterPushArgsThenConstructDescriptor::GetStackParameterCount(), &stack_overflow); // Call the appropriate constructor. eax and ecx already contain intended @@ -1591,7 +1590,7 @@ static void Generate_InterpreterEnterBytecode(MacroAssembler* masm) { __ jmp(kJavaScriptCallCodeStartRegister); } -void Builtins::Generate_InterpreterEnterBytecodeAdvance(MacroAssembler* masm) { +void Builtins::Generate_InterpreterEnterAtNextBytecode(MacroAssembler* masm) { // Get bytecode array and bytecode offset from the stack frame. __ mov(kInterpreterBytecodeArrayRegister, Operand(ebp, InterpreterFrameConstants::kBytecodeArrayFromFp)); @@ -1636,7 +1635,7 @@ void Builtins::Generate_InterpreterEnterBytecodeAdvance(MacroAssembler* masm) { __ Abort(AbortReason::kInvalidBytecodeAdvance); } -void Builtins::Generate_InterpreterEnterBytecodeDispatch(MacroAssembler* masm) { +void Builtins::Generate_InterpreterEnterAtBytecode(MacroAssembler* masm) { Generate_InterpreterEnterBytecode(masm); } // static @@ -1666,7 +1665,7 @@ void Builtins::Generate_BaselineOutOfLinePrologue(MacroAssembler* masm) { __ mov(feedback_vector, FieldOperand(closure, JSFunction::kFeedbackCellOffset)); __ mov(feedback_vector, FieldOperand(feedback_vector, Cell::kValueOffset)); - if (__ emit_debug_code()) { + if (FLAG_debug_code) { __ CmpObjectType(feedback_vector, FEEDBACK_VECTOR_TYPE, scratch); __ Assert(equal, AbortReason::kExpectedFeedbackVector); } @@ -1939,7 +1938,7 @@ void Builtins::Generate_FunctionPrototypeApply(MacroAssembler* masm) { // arguments to the receiver. __ bind(&no_arguments); { - __ Set(eax, 0); + __ Move(eax, 0); __ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET); } } @@ -2108,6 +2107,7 @@ void Builtins::Generate_ReflectConstruct(MacroAssembler* masm) { } // static +// TODO(v8:11615): Observe Code::kMaxArguments in CallOrConstructVarargs void Builtins::Generate_CallOrConstructVarargs(MacroAssembler* masm, Handle<Code> code) { // ----------- S t a t e ------------- @@ -2133,7 +2133,7 @@ void Builtins::Generate_CallOrConstructVarargs(MacroAssembler* masm, __ pop(kArgumentsList); __ PushReturnAddressFrom(edx); - if (masm->emit_debug_code()) { + if (FLAG_debug_code) { // Allow kArgumentsList to be a FixedArray, or a FixedDoubleArray if // kArgumentsLength == 0. Label ok, fail; @@ -2294,7 +2294,7 @@ void Builtins::Generate_CallOrConstructForwardVarargs(MacroAssembler* masm, __ AllocateStackSpace(scratch); // Include return address and receiver. __ add(eax, Immediate(2)); - __ Set(current, 0); + __ Move(current, 0); __ jmp(&check); // Loop. __ bind(©); @@ -2443,7 +2443,7 @@ void Builtins::Generate_CallFunction(MacroAssembler* masm, __ movzx_w( ecx, FieldOperand(edx, SharedFunctionInfo::kFormalParameterCountOffset)); - __ InvokeFunctionCode(edi, no_reg, ecx, eax, JUMP_FUNCTION); + __ InvokeFunctionCode(edi, no_reg, ecx, eax, InvokeType::kJump); // The function is a "classConstructor", need to raise an exception. __ bind(&class_constructor); { @@ -2788,6 +2788,8 @@ void Builtins::Generate_InterpreterOnStackReplacement(MacroAssembler* masm) { } void Builtins::Generate_BaselineOnStackReplacement(MacroAssembler* masm) { + __ mov(kContextRegister, + MemOperand(ebp, BaselineFrameConstants::kContextOffset)); return OnStackReplacement(masm, false); } @@ -2896,6 +2898,11 @@ void Builtins::Generate_GenericJSToWasmWrapper(MacroAssembler* masm) { // TODO(v8:10701): Implement for this platform. __ Trap(); } + +void Builtins::Generate_WasmOnStackReplace(MacroAssembler* masm) { + // Only needed on x64. + __ Trap(); +} #endif // V8_ENABLE_WEBASSEMBLY void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, @@ -2908,7 +2915,7 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, // esi: current context (C callee-saved) // edi: JS function of the caller (C callee-saved) // - // If argv_mode == kArgvInRegister: + // If argv_mode == ArgvMode::kRegister: // ecx: pointer to the first argument STATIC_ASSERT(eax == kRuntimeCallArgCountRegister); @@ -2928,8 +2935,8 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, int arg_stack_space = 3; // Enter the exit frame that transitions from JavaScript to C++. - if (argv_mode == kArgvInRegister) { - DCHECK(save_doubles == kDontSaveFPRegs); + if (argv_mode == ArgvMode::kRegister) { + DCHECK(save_doubles == SaveFPRegsMode::kIgnore); DCHECK(!builtin_exit_frame); __ EnterApiExitFrame(arg_stack_space, edi); @@ -2938,7 +2945,7 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, __ mov(edi, eax); } else { __ EnterExitFrame( - arg_stack_space, save_doubles == kSaveFPRegs, + arg_stack_space, save_doubles == SaveFPRegsMode::kSave, builtin_exit_frame ? StackFrame::BUILTIN_EXIT : StackFrame::EXIT); } @@ -2985,7 +2992,8 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, } // Exit the JavaScript to C++ exit frame. - __ LeaveExitFrame(save_doubles == kSaveFPRegs, argv_mode == kArgvOnStack); + __ LeaveExitFrame(save_doubles == SaveFPRegsMode::kSave, + argv_mode == ArgvMode::kStack); __ ret(0); // Handling of exception. @@ -3148,7 +3156,7 @@ Operand ApiParameterOperand(int index) { // stores the pointer to the reserved slot into esi. void PrepareCallApiFunction(MacroAssembler* masm, int argc, Register scratch) { __ EnterApiExitFrame(argc, scratch); - if (__ emit_debug_code()) { + if (FLAG_debug_code) { __ mov(esi, Immediate(bit_cast<int32_t>(kZapValue))); } } @@ -3961,9 +3969,16 @@ void Generate_DeoptimizationEntry(MacroAssembler* masm, __ movsd(Operand(esi, dst_offset), xmm0); } + if (FLAG_debug_code) { + const int kTopMask = 0x3800; + __ push(eax); + __ fwait(); + __ fnstsw_ax(); + __ test(eax, Immediate(kTopMask)); + __ Assert(zero, AbortReason::kFpuTopIsNotZeroInDeoptimizer); + __ pop(eax); + } // Clear FPU all exceptions. - // TODO(ulan): Find out why the TOP register is not zero here in some cases, - // and check that the generated code never deoptimizes with unbalanced stack. __ fnclex(); // Mark the stack as not iterable for the CPU profiler which won't be able to diff --git a/deps/v8/src/builtins/ic-callable.tq b/deps/v8/src/builtins/ic-callable.tq index 85525c4c68..dd29e8bf5e 100644 --- a/deps/v8/src/builtins/ic-callable.tq +++ b/deps/v8/src/builtins/ic-callable.tq @@ -6,6 +6,10 @@ namespace ic { namespace callable { extern macro IncrementCallCount(FeedbackVector, uintptr): void; +const kCallFeedbackContentFieldMask: constexpr int32 + generates 'FeedbackNexus::CallFeedbackContentField::kMask'; +const kCallFeedbackContentFieldShift: constexpr uint32 + generates 'FeedbackNexus::CallFeedbackContentField::kShift'; macro IsMonomorphic(feedback: MaybeObject, target: JSAny): bool { return IsWeakReferenceToObject(feedback, target); @@ -50,8 +54,42 @@ macro TransitionToMegamorphic(implicit context: Context)( ReportFeedbackUpdate(feedbackVector, slotId, 'Call:TransitionMegamorphic'); } +macro TaggedEqualPrototypeApplyFunction(implicit context: Context)( + target: JSAny): bool { + return TaggedEqual(target, GetPrototypeApplyFunction()); +} + +macro FeedbackValueIsReceiver(implicit context: Context)( + feedbackVector: FeedbackVector, slotId: uintptr): bool { + const callCount: intptr = SmiUntag(Cast<Smi>(LoadFeedbackVectorSlot( + feedbackVector, slotId, kTaggedSize)) otherwise return false); + return (callCount & IntPtrConstant(kCallFeedbackContentFieldMask)) != + IntPtrConstant(0); +} + +macro SetCallFeedbackContent(implicit context: Context)( + feedbackVector: FeedbackVector, slotId: uintptr, + callFeedbackContent: constexpr CallFeedbackContent): void { + // Load the call count field from the feecback vector. + const callCount: intptr = SmiUntag(Cast<Smi>(LoadFeedbackVectorSlot( + feedbackVector, slotId, kTaggedSize)) otherwise return ); + // The second lowest bits of the call count are used to state whether the + // feedback collected is a target or a receiver. Change that bit based on the + // callFeedbackContent input. + const callFeedbackContentFieldMask: intptr = + ~IntPtrConstant(kCallFeedbackContentFieldMask); + const newCount: intptr = (callCount & callFeedbackContentFieldMask) | + Convert<intptr>(Signed( + %RawConstexprCast<constexpr uint32>(callFeedbackContent) + << kCallFeedbackContentFieldShift)); + StoreFeedbackVectorSlot( + feedbackVector, slotId, SmiTag(newCount), SKIP_WRITE_BARRIER, + kTaggedSize); + ReportFeedbackUpdate(feedbackVector, slotId, 'Call:SetCallFeedbackContent'); +} + macro CollectCallFeedback( - maybeTarget: JSAny, context: Context, + maybeTarget: JSAny, maybeReceiver: Lazy<JSAny>, context: Context, maybeFeedbackVector: Undefined|FeedbackVector, slotId: uintptr): void { // TODO(v8:9891): Remove this assert once all callers are ported to Torque. // This assert ensures correctness of maybeFeedbackVector's type which can @@ -72,7 +110,24 @@ macro CollectCallFeedback( // If cleared, we have a new chance to become monomorphic. const feedbackValue: HeapObject = - MaybeObjectToStrong(feedback) otherwise TryInitializeAsMonomorphic; + MaybeObjectToStrong(feedback) otherwise TryReinitializeAsMonomorphic; + + if (FeedbackValueIsReceiver(feedbackVector, slotId) && + TaggedEqualPrototypeApplyFunction(maybeTarget)) { + // If the Receiver is recorded and the target is + // Function.prototype.apply, check whether we can stay monomorphic based + // on the receiver. + if (IsMonomorphic(feedback, RunLazy(maybeReceiver))) { + return; + } else { + // If not, reinitialize the feedback with target. + SetCallFeedbackContent( + feedbackVector, slotId, CallFeedbackContent::kTarget); + TryInitializeAsMonomorphic(maybeTarget, feedbackVector, slotId) + otherwise TransitionToMegamorphic; + return; + } + } // Try transitioning to a feedback cell. // Check if {target}s feedback cell matches the {feedbackValue}. @@ -92,8 +147,20 @@ macro CollectCallFeedback( StoreWeakReferenceInFeedbackVector(feedbackVector, slotId, feedbackCell); ReportFeedbackUpdate(feedbackVector, slotId, 'Call:FeedbackVectorCell'); + } label TryReinitializeAsMonomorphic { + SetCallFeedbackContent( + feedbackVector, slotId, CallFeedbackContent::kTarget); + goto TryInitializeAsMonomorphic; } label TryInitializeAsMonomorphic { - TryInitializeAsMonomorphic(maybeTarget, feedbackVector, slotId) + let recordedFunction = maybeTarget; + if (TaggedEqualPrototypeApplyFunction(maybeTarget)) { + recordedFunction = RunLazy(maybeReceiver); + SetCallFeedbackContent( + feedbackVector, slotId, CallFeedbackContent::kReceiver); + } else { + assert(!FeedbackValueIsReceiver(feedbackVector, slotId)); + } + TryInitializeAsMonomorphic(recordedFunction, feedbackVector, slotId) otherwise TransitionToMegamorphic; } label TransitionToMegamorphic { TransitionToMegamorphic(feedbackVector, slotId); diff --git a/deps/v8/src/builtins/ic.tq b/deps/v8/src/builtins/ic.tq index 49d4e78fa5..a9e92cf63e 100644 --- a/deps/v8/src/builtins/ic.tq +++ b/deps/v8/src/builtins/ic.tq @@ -8,10 +8,10 @@ namespace ic { @export macro CollectCallFeedback( - maybeTarget: JSAny, context: Context, + maybeTarget: JSAny, maybeReceiver: Lazy<JSAny>, context: Context, maybeFeedbackVector: Undefined|FeedbackVector, slotId: uintptr): void { callable::CollectCallFeedback( - maybeTarget, context, maybeFeedbackVector, slotId); + maybeTarget, maybeReceiver, context, maybeFeedbackVector, slotId); } @export @@ -51,10 +51,15 @@ macro IsUninitialized(feedback: MaybeObject): bool { } extern macro LoadFeedbackVectorSlot(FeedbackVector, uintptr): MaybeObject; +extern macro LoadFeedbackVectorSlot( + FeedbackVector, uintptr, constexpr int32): MaybeObject; extern operator '[]' macro LoadFeedbackVectorSlot( FeedbackVector, intptr): MaybeObject; extern macro StoreFeedbackVectorSlot( FeedbackVector, uintptr, MaybeObject): void; +extern macro StoreFeedbackVectorSlot( + FeedbackVector, uintptr, MaybeObject, constexpr WriteBarrierMode, + constexpr int32): void; extern macro StoreWeakReferenceInFeedbackVector( FeedbackVector, uintptr, HeapObject): MaybeObject; extern macro ReportFeedbackUpdate(FeedbackVector, uintptr, constexpr string); diff --git a/deps/v8/src/builtins/iterator.tq b/deps/v8/src/builtins/iterator.tq index 05993ea6d7..150e3d2cb5 100644 --- a/deps/v8/src/builtins/iterator.tq +++ b/deps/v8/src/builtins/iterator.tq @@ -78,8 +78,8 @@ extern macro LoadContextFromBaseline(): Context; extern macro LoadFeedbackVectorFromBaseline(): FeedbackVector; transitioning builtin GetIteratorBaseline( - context: Context, receiver: JSAny, loadSlot: TaggedIndex, - callSlot: TaggedIndex): JSAny { + receiver: JSAny, loadSlot: TaggedIndex, callSlot: TaggedIndex): JSAny { + const context: Context = LoadContextFromBaseline(); const feedback: FeedbackVector = LoadFeedbackVectorFromBaseline(); const iteratorMethod: JSAny = LoadIC(context, receiver, IteratorSymbolConstant(), loadSlot, feedback); @@ -97,12 +97,18 @@ transitioning builtin CreateAsyncFromSyncIteratorBaseline(syncIterator: JSAny): return CreateAsyncFromSyncIterator(context, syncIterator); } +macro GetLazyReceiver(receiver: JSAny): JSAny { + return receiver; +} + transitioning builtin CallIteratorWithFeedback( context: Context, receiver: JSAny, iteratorMethod: JSAny, callSlot: Smi, feedback: Undefined|FeedbackVector): JSAny { // TODO(v8:10047): Use TaggedIndex here once TurboFan supports it. const callSlotUnTagged: uintptr = Unsigned(SmiUntag(callSlot)); - ic::CollectCallFeedback(iteratorMethod, context, feedback, callSlotUnTagged); + ic::CollectCallFeedback( + iteratorMethod, %MakeLazy<JSAny, JSAny>('GetLazyReceiver', receiver), + context, feedback, callSlotUnTagged); const iteratorCallable: Callable = Cast<Callable>(iteratorMethod) otherwise ThrowCalledNonCallable(iteratorMethod); return Call(context, iteratorCallable, receiver); diff --git a/deps/v8/src/builtins/mips/builtins-mips.cc b/deps/v8/src/builtins/mips/builtins-mips.cc index 1d8e80bdf8..6ff2ed4b5c 100644 --- a/deps/v8/src/builtins/mips/builtins-mips.cc +++ b/deps/v8/src/builtins/mips/builtins-mips.cc @@ -6,6 +6,7 @@ #include "src/api/api-arguments.h" #include "src/codegen/code-factory.h" +#include "src/codegen/interface-descriptors-inl.h" #include "src/debug/debug.h" #include "src/deoptimizer/deoptimizer.h" #include "src/execution/frame-constants.h" @@ -102,7 +103,7 @@ void Generate_JSBuiltinsConstructStubHelper(MacroAssembler* masm) { // a0: number of arguments (untagged) // a1: constructor function // a3: new target - __ InvokeFunctionWithNewTarget(a1, a3, a0, CALL_FUNCTION); + __ InvokeFunctionWithNewTarget(a1, a3, a0, InvokeType::kCall); // Restore context from the frame. __ lw(cp, MemOperand(fp, ConstructFrameConstants::kContextOffset)); @@ -226,7 +227,7 @@ void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) { __ Push(s0); // Call the function. - __ InvokeFunctionWithNewTarget(a1, a3, a0, CALL_FUNCTION); + __ InvokeFunctionWithNewTarget(a1, a3, a0, InvokeType::kCall); // ----------- S t a t e ------------- // -- v0: constructor result @@ -637,7 +638,7 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) { // Store input value into generator object. __ sw(v0, FieldMemOperand(a1, JSGeneratorObject::kInputOrDebugPosOffset)); __ RecordWriteField(a1, JSGeneratorObject::kInputOrDebugPosOffset, v0, a3, - kRAHasNotBeenSaved, kDontSaveFPRegs); + kRAHasNotBeenSaved, SaveFPRegsMode::kIgnore); // Load suspended function and context. __ lw(t0, FieldMemOperand(a1, JSGeneratorObject::kFunctionOffset)); @@ -761,8 +762,8 @@ static void ReplaceClosureCodeWithOptimizedCode(MacroAssembler* masm, __ sw(optimized_code, FieldMemOperand(closure, JSFunction::kCodeOffset)); __ mov(scratch1, optimized_code); // Write barrier clobbers scratch1 below. __ RecordWriteField(closure, JSFunction::kCodeOffset, scratch1, scratch2, - kRAHasNotBeenSaved, kDontSaveFPRegs, OMIT_REMEMBERED_SET, - OMIT_SMI_CHECK); + kRAHasNotBeenSaved, SaveFPRegsMode::kIgnore, + RememberedSetAction::kOmit, SmiCheck::kOmit); } static void LeaveInterpreterFrame(MacroAssembler* masm, Register scratch1, @@ -1406,7 +1407,7 @@ static void Generate_InterpreterEnterBytecode(MacroAssembler* masm) { __ Jump(kJavaScriptCallCodeStartRegister); } -void Builtins::Generate_InterpreterEnterBytecodeAdvance(MacroAssembler* masm) { +void Builtins::Generate_InterpreterEnterAtNextBytecode(MacroAssembler* masm) { // Advance the current bytecode offset stored within the given interpreter // stack frame. This simulates what all bytecode handlers do upon completion // of the underlying operation. @@ -1453,7 +1454,7 @@ void Builtins::Generate_InterpreterEnterBytecodeAdvance(MacroAssembler* masm) { __ Abort(AbortReason::kInvalidBytecodeAdvance); } -void Builtins::Generate_InterpreterEnterBytecodeDispatch(MacroAssembler* masm) { +void Builtins::Generate_InterpreterEnterAtBytecode(MacroAssembler* masm) { Generate_InterpreterEnterBytecode(masm); } @@ -1756,7 +1757,7 @@ void Builtins::Generate_CallOrConstructVarargs(MacroAssembler* masm, // -- t0 : len (number of elements to push from args) // -- a3 : new.target (for [[Construct]]) // ----------------------------------- - if (masm->emit_debug_code()) { + if (FLAG_debug_code) { // Allow a2 to be a FixedArray, or a FixedDoubleArray if t0 == 0. Label ok, fail; __ AssertNotSmi(a2); @@ -2005,7 +2006,7 @@ void Builtins::Generate_CallFunction(MacroAssembler* masm, __ lhu(a2, FieldMemOperand(a2, SharedFunctionInfo::kFormalParameterCountOffset)); - __ InvokeFunctionCode(a1, no_reg, a2, a0, JUMP_FUNCTION); + __ InvokeFunctionCode(a1, no_reg, a2, a0, InvokeType::kJump); // The function is a "classConstructor", need to raise an exception. __ bind(&class_constructor); @@ -2364,6 +2365,12 @@ void Builtins::Generate_WasmDebugBreak(MacroAssembler* masm) { void Builtins::Generate_GenericJSToWasmWrapper(MacroAssembler* masm) { __ Trap(); } + +void Builtins::Generate_WasmOnStackReplace(MacroAssembler* masm) { + // Only needed on x64. + __ Trap(); +} + #endif // V8_ENABLE_WEBASSEMBLY void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, @@ -2376,10 +2383,10 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, // sp: stack pointer (restored as callee's sp after C call) // cp: current context (C callee-saved) // - // If argv_mode == kArgvInRegister: + // If argv_mode == ArgvMode::kRegister: // a2: pointer to the first argument - if (argv_mode == kArgvInRegister) { + if (argv_mode == ArgvMode::kRegister) { // Move argv into the correct register. __ mov(s1, a2); } else { @@ -2391,7 +2398,7 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, // Enter the exit frame that transitions from JavaScript to C++. FrameScope scope(masm, StackFrame::MANUAL); __ EnterExitFrame( - save_doubles == kSaveFPRegs, 0, + save_doubles == SaveFPRegsMode::kSave, 0, builtin_exit_frame ? StackFrame::BUILTIN_EXIT : StackFrame::EXIT); // s0: number of arguments including receiver (C callee-saved) @@ -2440,12 +2447,12 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, // v0:v1: result // sp: stack pointer // fp: frame pointer - Register argc = argv_mode == kArgvInRegister + Register argc = argv_mode == ArgvMode::kRegister // We don't want to pop arguments so set argc to no_reg. ? no_reg // s0: still holds argc (callee-saved). : s0; - __ LeaveExitFrame(save_doubles == kSaveFPRegs, argc, EMIT_RETURN); + __ LeaveExitFrame(save_doubles == SaveFPRegsMode::kSave, argc, EMIT_RETURN); // Handling of exception. __ bind(&exception_returned); @@ -2698,7 +2705,7 @@ void CallApiFunctionAndReturn(MacroAssembler* masm, Register function_address, // No more valid handles (the result handle was the last one). Restore // previous handle scope. __ sw(s0, MemOperand(s5, kNextOffset)); - if (__ emit_debug_code()) { + if (FLAG_debug_code) { __ lw(a1, MemOperand(s5, kLevelOffset)); __ Check(eq, AbortReason::kUnexpectedLevelAfterReturnFromApiCall, a1, Operand(s2)); diff --git a/deps/v8/src/builtins/mips64/builtins-mips64.cc b/deps/v8/src/builtins/mips64/builtins-mips64.cc index c029188f14..9d0156e927 100644 --- a/deps/v8/src/builtins/mips64/builtins-mips64.cc +++ b/deps/v8/src/builtins/mips64/builtins-mips64.cc @@ -6,6 +6,7 @@ #include "src/api/api-arguments.h" #include "src/codegen/code-factory.h" +#include "src/codegen/interface-descriptors-inl.h" #include "src/debug/debug.h" #include "src/deoptimizer/deoptimizer.h" #include "src/execution/frame-constants.h" @@ -102,7 +103,7 @@ void Generate_JSBuiltinsConstructStubHelper(MacroAssembler* masm) { // a0: number of arguments (untagged) // a1: constructor function // a3: new target - __ InvokeFunctionWithNewTarget(a1, a3, a0, CALL_FUNCTION); + __ InvokeFunctionWithNewTarget(a1, a3, a0, InvokeType::kCall); // Restore context from the frame. __ Ld(cp, MemOperand(fp, ConstructFrameConstants::kContextOffset)); @@ -227,7 +228,7 @@ void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) { __ Push(a6); // Call the function. - __ InvokeFunctionWithNewTarget(a1, a3, a0, CALL_FUNCTION); + __ InvokeFunctionWithNewTarget(a1, a3, a0, InvokeType::kCall); // ----------- S t a t e ------------- // -- v0: constructor result @@ -324,7 +325,7 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) { // Store input value into generator object. __ Sd(v0, FieldMemOperand(a1, JSGeneratorObject::kInputOrDebugPosOffset)); __ RecordWriteField(a1, JSGeneratorObject::kInputOrDebugPosOffset, v0, a3, - kRAHasNotBeenSaved, kDontSaveFPRegs); + kRAHasNotBeenSaved, SaveFPRegsMode::kIgnore); // Load suspended function and context. __ Ld(a4, FieldMemOperand(a1, JSGeneratorObject::kFunctionOffset)); @@ -777,8 +778,8 @@ static void ReplaceClosureCodeWithOptimizedCode(MacroAssembler* masm, __ Sd(optimized_code, FieldMemOperand(closure, JSFunction::kCodeOffset)); __ mov(scratch1, optimized_code); // Write barrier clobbers scratch1 below. __ RecordWriteField(closure, JSFunction::kCodeOffset, scratch1, scratch2, - kRAHasNotBeenSaved, kDontSaveFPRegs, OMIT_REMEMBERED_SET, - OMIT_SMI_CHECK); + kRAHasNotBeenSaved, SaveFPRegsMode::kIgnore, + RememberedSetAction::kOmit, SmiCheck::kOmit); } static void LeaveInterpreterFrame(MacroAssembler* masm, Register scratch1, @@ -1424,7 +1425,7 @@ static void Generate_InterpreterEnterBytecode(MacroAssembler* masm) { __ Jump(kJavaScriptCallCodeStartRegister); } -void Builtins::Generate_InterpreterEnterBytecodeAdvance(MacroAssembler* masm) { +void Builtins::Generate_InterpreterEnterAtNextBytecode(MacroAssembler* masm) { // Advance the current bytecode offset stored within the given interpreter // stack frame. This simulates what all bytecode handlers do upon completion // of the underlying operation. @@ -1471,7 +1472,7 @@ void Builtins::Generate_InterpreterEnterBytecodeAdvance(MacroAssembler* masm) { __ Abort(AbortReason::kInvalidBytecodeAdvance); } -void Builtins::Generate_InterpreterEnterBytecodeDispatch(MacroAssembler* masm) { +void Builtins::Generate_InterpreterEnterAtBytecode(MacroAssembler* masm) { Generate_InterpreterEnterBytecode(masm); } @@ -1815,7 +1816,7 @@ void Builtins::Generate_CallOrConstructVarargs(MacroAssembler* masm, // -- a4 : len (number of elements to push from args) // -- a3 : new.target (for [[Construct]]) // ----------------------------------- - if (masm->emit_debug_code()) { + if (FLAG_debug_code) { // Allow a2 to be a FixedArray, or a FixedDoubleArray if a4 == 0. Label ok, fail; __ AssertNotSmi(a2); @@ -2073,7 +2074,7 @@ void Builtins::Generate_CallFunction(MacroAssembler* masm, __ Lhu(a2, FieldMemOperand(a2, SharedFunctionInfo::kFormalParameterCountOffset)); - __ InvokeFunctionCode(a1, no_reg, a2, a0, JUMP_FUNCTION); + __ InvokeFunctionCode(a1, no_reg, a2, a0, InvokeType::kJump); // The function is a "classConstructor", need to raise an exception. __ bind(&class_constructor); @@ -2395,7 +2396,11 @@ void Builtins::Generate_WasmCompileLazy(MacroAssembler* masm) { __ Lbu(a1, MemOperand(a1)); __ Branch(&push_doubles, le, a1, Operand(zero_reg)); // Save vector registers. - __ MultiPushMSA(fp_regs); + { + CpuFeatureScope msa_scope( + masm, MIPS_SIMD, CpuFeatureScope::CheckPolicy::kDontCheckSupported); + __ MultiPushMSA(fp_regs); + } __ Branch(&simd_pushed); __ bind(&push_doubles); __ MultiPushFPU(fp_regs); @@ -2419,7 +2424,11 @@ void Builtins::Generate_WasmCompileLazy(MacroAssembler* masm) { __ Lbu(a1, MemOperand(a1)); __ Branch(&pop_doubles, le, a1, Operand(zero_reg)); // Pop vector registers. - __ MultiPopMSA(fp_regs); + { + CpuFeatureScope msa_scope( + masm, MIPS_SIMD, CpuFeatureScope::CheckPolicy::kDontCheckSupported); + __ MultiPopMSA(fp_regs); + } __ Branch(&simd_popped); __ bind(&pop_doubles); __ Daddu(sp, sp, base::bits::CountPopulation(fp_regs) * kDoubleSize); @@ -2456,6 +2465,12 @@ void Builtins::Generate_WasmDebugBreak(MacroAssembler* masm) { void Builtins::Generate_GenericJSToWasmWrapper(MacroAssembler* masm) { __ Trap(); } + +void Builtins::Generate_WasmOnStackReplace(MacroAssembler* masm) { + // Only needed on x64. + __ Trap(); +} + #endif // V8_ENABLE_WEBASSEMBLY void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, @@ -2468,10 +2483,10 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, // sp: stack pointer (restored as callee's sp after C call) // cp: current context (C callee-saved) // - // If argv_mode == kArgvInRegister: + // If argv_mode == ArgvMode::kRegister: // a2: pointer to the first argument - if (argv_mode == kArgvInRegister) { + if (argv_mode == ArgvMode::kRegister) { // Move argv into the correct register. __ mov(s1, a2); } else { @@ -2483,7 +2498,7 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, // Enter the exit frame that transitions from JavaScript to C++. FrameScope scope(masm, StackFrame::MANUAL); __ EnterExitFrame( - save_doubles == kSaveFPRegs, 0, + save_doubles == SaveFPRegsMode::kSave, 0, builtin_exit_frame ? StackFrame::BUILTIN_EXIT : StackFrame::EXIT); // s0: number of arguments including receiver (C callee-saved) @@ -2532,12 +2547,12 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, // v0:v1: result // sp: stack pointer // fp: frame pointer - Register argc = argv_mode == kArgvInRegister + Register argc = argv_mode == ArgvMode::kRegister // We don't want to pop arguments so set argc to no_reg. ? no_reg // s0: still holds argc (callee-saved). : s0; - __ LeaveExitFrame(save_doubles == kSaveFPRegs, argc, EMIT_RETURN); + __ LeaveExitFrame(save_doubles == SaveFPRegsMode::kSave, argc, EMIT_RETURN); // Handling of exception. __ bind(&exception_returned); @@ -2794,7 +2809,7 @@ void CallApiFunctionAndReturn(MacroAssembler* masm, Register function_address, // No more valid handles (the result handle was the last one). Restore // previous handle scope. __ Sd(s0, MemOperand(s5, kNextOffset)); - if (__ emit_debug_code()) { + if (FLAG_debug_code) { __ Lw(a1, MemOperand(s5, kLevelOffset)); __ Check(eq, AbortReason::kUnexpectedLevelAfterReturnFromApiCall, a1, Operand(s2)); diff --git a/deps/v8/src/builtins/ppc/builtins-ppc.cc b/deps/v8/src/builtins/ppc/builtins-ppc.cc index bc467c9ff9..35d817d3a2 100644 --- a/deps/v8/src/builtins/ppc/builtins-ppc.cc +++ b/deps/v8/src/builtins/ppc/builtins-ppc.cc @@ -6,6 +6,7 @@ #include "src/api/api-arguments.h" #include "src/codegen/code-factory.h" +#include "src/codegen/interface-descriptors-inl.h" // For interpreter_entry_return_pc_offset. TODO(jkummerow): Drop. #include "src/codegen/macro-assembler-inl.h" #include "src/codegen/register-configuration.h" @@ -113,13 +114,13 @@ void Generate_JSBuiltinsConstructStubHelper(MacroAssembler* masm) { // r6: new target { ConstantPoolUnavailableScope constant_pool_unavailable(masm); - __ InvokeFunctionWithNewTarget(r4, r6, r3, CALL_FUNCTION); + __ InvokeFunctionWithNewTarget(r4, r6, r3, InvokeType::kCall); } // Restore context from the frame. - __ LoadP(cp, MemOperand(fp, ConstructFrameConstants::kContextOffset)); + __ LoadU64(cp, MemOperand(fp, ConstructFrameConstants::kContextOffset)); // Restore smi-tagged arguments count from the frame. - __ LoadP(scratch, MemOperand(fp, ConstructFrameConstants::kLengthOffset)); + __ LoadU64(scratch, MemOperand(fp, ConstructFrameConstants::kLengthOffset)); // Leave construct frame. } @@ -229,8 +230,8 @@ void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) { // ----------------------------------- // Restore constructor function and argument count. - __ LoadP(r4, MemOperand(fp, ConstructFrameConstants::kConstructorOffset)); - __ LoadP(r3, MemOperand(fp, ConstructFrameConstants::kLengthOffset)); + __ LoadU64(r4, MemOperand(fp, ConstructFrameConstants::kConstructorOffset)); + __ LoadU64(r3, MemOperand(fp, ConstructFrameConstants::kLengthOffset)); __ SmiUntag(r3); Label stack_overflow; @@ -245,7 +246,7 @@ void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) { // Call the function. { ConstantPoolUnavailableScope constant_pool_unavailable(masm); - __ InvokeFunctionWithNewTarget(r4, r6, r3, CALL_FUNCTION); + __ InvokeFunctionWithNewTarget(r4, r6, r3, InvokeType::kCall); } // ----------- S t a t e ------------- @@ -275,12 +276,12 @@ void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) { // Throw away the result of the constructor invocation and use the // on-stack receiver as the result. __ bind(&use_receiver); - __ LoadP(r3, MemOperand(sp)); + __ LoadU64(r3, MemOperand(sp)); __ JumpIfRoot(r3, RootIndex::kTheHoleValue, &do_throw); __ bind(&leave_and_return); // Restore smi-tagged arguments count from the frame. - __ LoadP(r4, MemOperand(fp, ConstructFrameConstants::kLengthOffset)); + __ LoadU64(r4, MemOperand(fp, ConstructFrameConstants::kLengthOffset)); // Leave construct frame. __ LeaveFrame(StackFrame::CONSTRUCT); @@ -305,13 +306,13 @@ void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) { __ bind(&do_throw); // Restore the context from the frame. - __ LoadP(cp, MemOperand(fp, ConstructFrameConstants::kContextOffset)); + __ LoadU64(cp, MemOperand(fp, ConstructFrameConstants::kContextOffset)); __ CallRuntime(Runtime::kThrowConstructorReturnedNonObject); __ bkpt(0); __ bind(&stack_overflow); // Restore the context from the frame. - __ LoadP(cp, MemOperand(fp, ConstructFrameConstants::kContextOffset)); + __ LoadU64(cp, MemOperand(fp, ConstructFrameConstants::kContextOffset)); __ CallRuntime(Runtime::kThrowStackOverflow); // Unreachable code. __ bkpt(0); @@ -347,7 +348,7 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) { __ StoreTaggedField( r3, FieldMemOperand(r4, JSGeneratorObject::kInputOrDebugPosOffset), r0); __ RecordWriteField(r4, JSGeneratorObject::kInputOrDebugPosOffset, r3, r6, - kLRHasNotBeenSaved, kDontSaveFPRegs); + kLRHasNotBeenSaved, SaveFPRegsMode::kIgnore); // Load suspended function and context. __ LoadTaggedPointerField( @@ -373,7 +374,7 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) { ExternalReference::debug_suspended_generator_address(masm->isolate()); __ Move(scratch, debug_suspended_generator); - __ LoadP(scratch, MemOperand(scratch)); + __ LoadU64(scratch, MemOperand(scratch)); __ cmp(scratch, r4); __ beq(&prepare_step_in_suspended_generator); __ bind(&stepping_prepared); @@ -402,19 +403,16 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) { FieldMemOperand(r4, JSGeneratorObject::kParametersAndRegistersOffset)); { Label done_loop, loop; - __ mr(r9, r6); - __ bind(&loop); - __ subi(r9, r9, Operand(1)); - __ cmpi(r9, Operand::Zero()); + __ subi(r6, r6, Operand(1)); + __ cmpi(r6, Operand::Zero()); __ blt(&done_loop); - __ ShiftLeftImm(r10, r9, Operand(kTaggedSizeLog2)); + __ ShiftLeftImm(r10, r6, Operand(kTaggedSizeLog2)); __ add(scratch, r5, r10); __ LoadAnyTaggedField(scratch, FieldMemOperand(scratch, FixedArray::kHeaderSize)); __ Push(scratch); __ b(&loop); - __ bind(&done_loop); // Push receiver. @@ -554,7 +552,7 @@ void Generate_JSEntryVariant(MacroAssembler* masm, StackFrame::Type type, // Save copies of the top frame descriptor on the stack. __ Move(r3, ExternalReference::Create(IsolateAddressId::kCEntryFPAddress, masm->isolate())); - __ LoadP(r0, MemOperand(r3)); + __ LoadU64(r0, MemOperand(r3)); __ push(r0); // Clear c_entry_fp, now we've pushed its previous value to the stack. @@ -574,7 +572,7 @@ void Generate_JSEntryVariant(MacroAssembler* masm, StackFrame::Type type, ExternalReference::Create(IsolateAddressId::kJSEntrySPAddress, masm->isolate()); __ Move(r3, js_entry_sp); - __ LoadP(scratch, MemOperand(r3)); + __ LoadU64(scratch, MemOperand(r3)); __ cmpi(scratch, Operand::Zero()); __ bne(&non_outermost_js); __ StoreP(fp, MemOperand(r3)); @@ -663,7 +661,7 @@ void Generate_JSEntryVariant(MacroAssembler* masm, StackFrame::Type type, __ MultiPop(kCalleeSaved); // Return - __ LoadP(r0, MemOperand(sp, kStackFrameLRSlot * kSystemPointerSize)); + __ LoadU64(r0, MemOperand(sp, kStackFrameLRSlot * kSystemPointerSize)); __ mtlr(r0); __ blr(); } @@ -703,7 +701,7 @@ static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm, ExternalReference context_address = ExternalReference::Create( IsolateAddressId::kContextAddress, masm->isolate()); __ Move(cp, context_address); - __ LoadP(cp, MemOperand(cp)); + __ LoadU64(cp, MemOperand(cp)); // Push the function. __ Push(r5); @@ -734,7 +732,7 @@ static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm, __ mtctr(r7); __ bind(&loop); __ LoadPU(r9, MemOperand(r8, -kSystemPointerSize)); // read next parameter - __ LoadP(r0, MemOperand(r9)); // dereference handle + __ LoadU64(r0, MemOperand(r9)); // dereference handle __ push(r0); // push parameter __ bdnz(&loop); __ bind(&done); @@ -800,23 +798,23 @@ static void ReplaceClosureCodeWithOptimizedCode(MacroAssembler* masm, FieldMemOperand(closure, JSFunction::kCodeOffset), r0); __ mr(scratch1, optimized_code); // Write barrier clobbers scratch1 below. __ RecordWriteField(closure, JSFunction::kCodeOffset, scratch1, scratch2, - kLRHasNotBeenSaved, kDontSaveFPRegs, OMIT_REMEMBERED_SET, - OMIT_SMI_CHECK); + kLRHasNotBeenSaved, SaveFPRegsMode::kIgnore, + RememberedSetAction::kOmit, SmiCheck::kOmit); } static void LeaveInterpreterFrame(MacroAssembler* masm, Register scratch1, Register scratch2) { Register params_size = scratch1; // Get the size of the formal parameters + receiver (in bytes). - __ LoadP(params_size, - MemOperand(fp, InterpreterFrameConstants::kBytecodeArrayFromFp)); + __ LoadU64(params_size, + MemOperand(fp, InterpreterFrameConstants::kBytecodeArrayFromFp)); __ lwz(params_size, FieldMemOperand(params_size, BytecodeArray::kParameterSizeOffset)); Register actual_params_size = scratch2; // Compute the size of the actual parameters + receiver (in bytes). - __ LoadP(actual_params_size, - MemOperand(fp, StandardFrameConstants::kArgCOffset)); + __ LoadU64(actual_params_size, + MemOperand(fp, StandardFrameConstants::kArgCOffset)); __ ShiftLeftImm(actual_params_size, actual_params_size, Operand(kSystemPointerSizeLog2)); __ addi(actual_params_size, actual_params_size, Operand(kSystemPointerSize)); @@ -869,7 +867,7 @@ static void TailCallOptimizedCodeSlot(MacroAssembler* masm, __ LoadTaggedPointerField( scratch, FieldMemOperand(optimized_code_entry, Code::kCodeDataContainerOffset)); - __ LoadWordArith( + __ LoadS32( scratch, FieldMemOperand(scratch, CodeDataContainer::kKindSpecificFlagsOffset)); __ TestBit(scratch, Code::kMarkedForDeoptimizationBit, r0); @@ -1082,9 +1080,9 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) { Register optimization_state = r7; // Read off the optimization state in the feedback vector. - __ LoadWord(optimization_state, - FieldMemOperand(feedback_vector, FeedbackVector::kFlagsOffset), - r0); + __ LoadU32(optimization_state, + FieldMemOperand(feedback_vector, FeedbackVector::kFlagsOffset), + r0); // Check if the optimized code slot is not empty or has a optimization marker. Label has_optimized_code_or_marker; @@ -1097,7 +1095,7 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) { __ bind(¬_optimized); // Increment invocation count for the function. - __ LoadWord( + __ LoadU32( r8, FieldMemOperand(feedback_vector, FeedbackVector::kInvocationCountOffset), r0); @@ -1165,10 +1163,10 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) { // If the bytecode array has a valid incoming new target or generator object // register, initialize it with incoming value which was passed in r6. Label no_incoming_new_target_or_generator_register; - __ LoadWordArith( - r8, FieldMemOperand( - kInterpreterBytecodeArrayRegister, - BytecodeArray::kIncomingNewTargetOrGeneratorRegisterOffset)); + __ LoadS32(r8, + FieldMemOperand( + kInterpreterBytecodeArrayRegister, + BytecodeArray::kIncomingNewTargetOrGeneratorRegisterOffset)); __ cmpi(r8, Operand::Zero()); __ beq(&no_incoming_new_target_or_generator_register); __ ShiftLeftImm(r8, r8, Operand(kSystemPointerSizeLog2)); @@ -1205,10 +1203,10 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) { // or the interpreter tail calling a builtin and then a dispatch. // Get bytecode array and bytecode offset from the stack frame. - __ LoadP(kInterpreterBytecodeArrayRegister, - MemOperand(fp, InterpreterFrameConstants::kBytecodeArrayFromFp)); - __ LoadP(kInterpreterBytecodeOffsetRegister, - MemOperand(fp, InterpreterFrameConstants::kBytecodeOffsetFromFp)); + __ LoadU64(kInterpreterBytecodeArrayRegister, + MemOperand(fp, InterpreterFrameConstants::kBytecodeArrayFromFp)); + __ LoadU64(kInterpreterBytecodeOffsetRegister, + MemOperand(fp, InterpreterFrameConstants::kBytecodeOffsetFromFp)); __ SmiUntag(kInterpreterBytecodeOffsetRegister); // Either return, or advance to the next bytecode and dispatch. @@ -1238,8 +1236,8 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) { // After the call, restore the bytecode array, bytecode offset and accumulator // registers again. Also, restore the bytecode offset in the stack to its // previous value. - __ LoadP(kInterpreterBytecodeArrayRegister, - MemOperand(fp, InterpreterFrameConstants::kBytecodeArrayFromFp)); + __ LoadU64(kInterpreterBytecodeArrayRegister, + MemOperand(fp, InterpreterFrameConstants::kBytecodeArrayFromFp)); __ mov(kInterpreterBytecodeOffsetRegister, Operand(BytecodeArray::kHeaderSize - kHeapObjectTag)); __ LoadRoot(kInterpreterAccumulatorRegister, RootIndex::kUndefinedValue); @@ -1313,7 +1311,7 @@ void Builtins::Generate_InterpreterPushArgsThenCallImpl( // Pass the spread in the register r3. // r2 already points to the penultimate argument, the spread // lies in the next interpreter register. - __ LoadP(r5, MemOperand(r5, -kSystemPointerSize)); + __ LoadU64(r5, MemOperand(r5, -kSystemPointerSize)); } // Call the target. @@ -1364,7 +1362,7 @@ void Builtins::Generate_InterpreterPushArgsThenConstructImpl( // r4 already points to the penultimate argument, the spread // lies in the next interpreter register. __ subi(r7, r7, Operand(kSystemPointerSize)); - __ LoadP(r5, MemOperand(r7)); + __ LoadU64(r5, MemOperand(r7)); } else { __ AssertUndefinedOrAllocationSite(r5, r8); } @@ -1406,7 +1404,7 @@ static void Generate_InterpreterEnterBytecode(MacroAssembler* masm) { // custom copy of the interpreter entry trampoline for profiling. If so, // get the custom trampoline, otherwise grab the entry address of the global // trampoline. - __ LoadP(r5, MemOperand(fp, StandardFrameConstants::kFunctionOffset)); + __ LoadU64(r5, MemOperand(fp, StandardFrameConstants::kFunctionOffset)); __ LoadTaggedPointerField( r5, FieldMemOperand(r5, JSFunction::kSharedFunctionInfoOffset)); __ LoadTaggedPointerField( @@ -1425,7 +1423,7 @@ static void Generate_InterpreterEnterBytecode(MacroAssembler* masm) { __ Move(r5, ExternalReference:: address_of_interpreter_entry_trampoline_instruction_start( masm->isolate())); - __ LoadP(r5, MemOperand(r5)); + __ LoadU64(r5, MemOperand(r5)); __ bind(&trampoline_loaded); __ addi(r0, r5, Operand(interpreter_entry_return_pc_offset.value())); @@ -1437,8 +1435,8 @@ static void Generate_InterpreterEnterBytecode(MacroAssembler* masm) { ExternalReference::interpreter_dispatch_table_address(masm->isolate())); // Get the bytecode array pointer from the frame. - __ LoadP(kInterpreterBytecodeArrayRegister, - MemOperand(fp, InterpreterFrameConstants::kBytecodeArrayFromFp)); + __ LoadU64(kInterpreterBytecodeArrayRegister, + MemOperand(fp, InterpreterFrameConstants::kBytecodeArrayFromFp)); if (FLAG_debug_code) { // Check function data field is actually a BytecodeArray object. @@ -1453,8 +1451,8 @@ static void Generate_InterpreterEnterBytecode(MacroAssembler* masm) { } // Get the target bytecode offset from the frame. - __ LoadP(kInterpreterBytecodeOffsetRegister, - MemOperand(fp, InterpreterFrameConstants::kBytecodeOffsetFromFp)); + __ LoadU64(kInterpreterBytecodeOffsetRegister, + MemOperand(fp, InterpreterFrameConstants::kBytecodeOffsetFromFp)); __ SmiUntag(kInterpreterBytecodeOffsetRegister); if (FLAG_debug_code) { @@ -1478,12 +1476,12 @@ static void Generate_InterpreterEnterBytecode(MacroAssembler* masm) { __ Jump(kJavaScriptCallCodeStartRegister); } -void Builtins::Generate_InterpreterEnterBytecodeAdvance(MacroAssembler* masm) { +void Builtins::Generate_InterpreterEnterAtNextBytecode(MacroAssembler* masm) { // Get bytecode array and bytecode offset from the stack frame. - __ LoadP(kInterpreterBytecodeArrayRegister, - MemOperand(fp, InterpreterFrameConstants::kBytecodeArrayFromFp)); - __ LoadP(kInterpreterBytecodeOffsetRegister, - MemOperand(fp, InterpreterFrameConstants::kBytecodeOffsetFromFp)); + __ LoadU64(kInterpreterBytecodeArrayRegister, + MemOperand(fp, InterpreterFrameConstants::kBytecodeArrayFromFp)); + __ LoadU64(kInterpreterBytecodeOffsetRegister, + MemOperand(fp, InterpreterFrameConstants::kBytecodeOffsetFromFp)); __ SmiUntag(kInterpreterBytecodeOffsetRegister); Label enter_bytecode, function_entry_bytecode; @@ -1524,7 +1522,7 @@ void Builtins::Generate_InterpreterEnterBytecodeAdvance(MacroAssembler* masm) { __ Abort(AbortReason::kInvalidBytecodeAdvance); } -void Builtins::Generate_InterpreterEnterBytecodeDispatch(MacroAssembler* masm) { +void Builtins::Generate_InterpreterEnterAtBytecode(MacroAssembler* masm) { Generate_InterpreterEnterBytecode(masm); } @@ -1567,7 +1565,7 @@ void Generate_ContinueToBuiltinHelper(MacroAssembler* masm, __ subi(r3, r3, Operand(BuiltinContinuationFrameConstants::kFixedSlotCount)); } - __ LoadP( + __ LoadU64( fp, MemOperand(sp, BuiltinContinuationFrameConstants::kFixedFrameSizeFromFp)); // Load builtin index (stored as a Smi) and use it to get the builtin start @@ -1609,7 +1607,7 @@ void Builtins::Generate_NotifyDeoptimized(MacroAssembler* masm) { } DCHECK_EQ(kInterpreterAccumulatorRegister.code(), r3.code()); - __ LoadP(r3, MemOperand(sp, 0 * kSystemPointerSize)); + __ LoadU64(r3, MemOperand(sp, 0 * kSystemPointerSize)); __ addi(sp, sp, Operand(1 * kSystemPointerSize)); __ Ret(); } @@ -1677,13 +1675,13 @@ void Builtins::Generate_FunctionPrototypeApply(MacroAssembler* masm) { __ mr(r5, r8); Label done; - __ LoadP(r4, MemOperand(sp)); // receiver + __ LoadU64(r4, MemOperand(sp)); // receiver __ cmpi(r3, Operand(1)); __ blt(&done); - __ LoadP(r8, MemOperand(sp, kSystemPointerSize)); // thisArg + __ LoadU64(r8, MemOperand(sp, kSystemPointerSize)); // thisArg __ cmpi(r3, Operand(2)); __ blt(&done); - __ LoadP(r5, MemOperand(sp, 2 * kSystemPointerSize)); // argArray + __ LoadU64(r5, MemOperand(sp, 2 * kSystemPointerSize)); // argArray __ bind(&done); __ ShiftLeftImm(ip, r3, Operand(kSystemPointerSizeLog2)); @@ -1762,13 +1760,13 @@ void Builtins::Generate_ReflectApply(MacroAssembler* masm) { Label done; __ cmpi(r3, Operand(1)); __ blt(&done); - __ LoadP(r4, MemOperand(sp, kSystemPointerSize)); // thisArg + __ LoadU64(r4, MemOperand(sp, kSystemPointerSize)); // thisArg __ cmpi(r3, Operand(2)); __ blt(&done); - __ LoadP(r8, MemOperand(sp, 2 * kSystemPointerSize)); // argArray + __ LoadU64(r8, MemOperand(sp, 2 * kSystemPointerSize)); // argArray __ cmpi(r3, Operand(3)); __ blt(&done); - __ LoadP(r5, MemOperand(sp, 3 * kSystemPointerSize)); // argArray + __ LoadU64(r5, MemOperand(sp, 3 * kSystemPointerSize)); // argArray __ bind(&done); __ ShiftLeftImm(ip, r3, Operand(kSystemPointerSizeLog2)); @@ -1812,14 +1810,14 @@ void Builtins::Generate_ReflectConstruct(MacroAssembler* masm) { __ mr(r7, r4); __ cmpi(r3, Operand(1)); __ blt(&done); - __ LoadP(r4, MemOperand(sp, kSystemPointerSize)); // thisArg + __ LoadU64(r4, MemOperand(sp, kSystemPointerSize)); // thisArg __ mr(r6, r4); __ cmpi(r3, Operand(2)); __ blt(&done); - __ LoadP(r5, MemOperand(sp, 2 * kSystemPointerSize)); // argArray + __ LoadU64(r5, MemOperand(sp, 2 * kSystemPointerSize)); // argArray __ cmpi(r3, Operand(3)); __ blt(&done); - __ LoadP(r6, MemOperand(sp, 3 * kSystemPointerSize)); // argArray + __ LoadU64(r6, MemOperand(sp, 3 * kSystemPointerSize)); // argArray __ bind(&done); __ ShiftLeftImm(r0, r3, Operand(kSystemPointerSizeLog2)); __ add(sp, sp, r0); @@ -1847,6 +1845,7 @@ void Builtins::Generate_ReflectConstruct(MacroAssembler* masm) { } // static +// TODO(v8:11615): Observe Code::kMaxArguments in CallOrConstructVarargs void Builtins::Generate_CallOrConstructVarargs(MacroAssembler* masm, Handle<Code> code) { // ----------- S t a t e ------------- @@ -1859,7 +1858,7 @@ void Builtins::Generate_CallOrConstructVarargs(MacroAssembler* masm, Register scratch = ip; - if (masm->emit_debug_code()) { + if (FLAG_debug_code) { // Allow r5 to be a FixedArray, or a FixedDoubleArray if r7 == 0. Label ok, fail; __ AssertNotSmi(r5); @@ -1963,7 +1962,7 @@ void Builtins::Generate_CallOrConstructForwardVarargs(MacroAssembler* masm, } Label stack_done, stack_overflow; - __ LoadP(r8, MemOperand(fp, StandardFrameConstants::kArgCOffset)); + __ LoadU64(r8, MemOperand(fp, StandardFrameConstants::kArgCOffset)); __ sub(r8, r8, r5, LeaveOE, SetRC); __ ble(&stack_done, cr0); { @@ -2125,7 +2124,7 @@ void Builtins::Generate_CallFunction(MacroAssembler* masm, __ LoadHalfWord( r5, FieldMemOperand(r5, SharedFunctionInfo::kFormalParameterCountOffset)); - __ InvokeFunctionCode(r4, no_reg, r5, r3, JUMP_FUNCTION); + __ InvokeFunctionCode(r4, no_reg, r5, r3, InvokeType::kJump); // The function is a "classConstructor", need to raise an exception. __ bind(&class_constructor); @@ -2511,6 +2510,11 @@ void Builtins::Generate_GenericJSToWasmWrapper(MacroAssembler* masm) { // TODO(v8:10701): Implement for this platform. __ Trap(); } + +void Builtins::Generate_WasmOnStackReplace(MacroAssembler* masm) { + // Only needed on x64. + __ Trap(); +} #endif // V8_ENABLE_WEBASSEMBLY void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, @@ -2523,12 +2527,12 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, // sp: stack pointer (restored as callee's sp after C call) // cp: current context (C callee-saved) // - // If argv_mode == kArgvInRegister: + // If argv_mode == ArgvMode::kRegister: // r5: pointer to the first argument __ mr(r15, r4); - if (argv_mode == kArgvInRegister) { + if (argv_mode == ArgvMode::kRegister) { // Move argv into the correct register. __ mr(r4, r5); } else { @@ -2552,7 +2556,7 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, } __ EnterExitFrame( - save_doubles, arg_stack_space, + save_doubles == SaveFPRegsMode::kSave, arg_stack_space, builtin_exit_frame ? StackFrame::BUILTIN_EXIT : StackFrame::EXIT); // Store a copy of argc in callee-saved registers for later. @@ -2584,8 +2588,8 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, // If return value is on the stack, pop it to registers. if (needs_return_buffer) { - __ LoadP(r4, MemOperand(r3, kSystemPointerSize)); - __ LoadP(r3, MemOperand(r3)); + __ LoadU64(r4, MemOperand(r3, kSystemPointerSize)); + __ LoadU64(r3, MemOperand(r3)); } // Check result for exception sentinel. @@ -2601,7 +2605,7 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, IsolateAddressId::kPendingExceptionAddress, masm->isolate()); __ Move(r6, pending_exception_address); - __ LoadP(r6, MemOperand(r6)); + __ LoadU64(r6, MemOperand(r6)); __ CompareRoot(r6, RootIndex::kTheHoleValue); // Cannot use check here as it attempts to generate call into runtime. __ beq(&okay); @@ -2613,12 +2617,12 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, // r3:r4: result // sp: stack pointer // fp: frame pointer - Register argc = argv_mode == kArgvInRegister + Register argc = argv_mode == ArgvMode::kRegister // We don't want to pop arguments so set argc to no_reg. ? no_reg // r14: still holds argc (callee-saved). : r14; - __ LeaveExitFrame(save_doubles, argc); + __ LeaveExitFrame(save_doubles == SaveFPRegsMode::kSave, argc); __ blr(); // Handling of exception. @@ -2653,11 +2657,11 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, // Retrieve the handler context, SP and FP. __ Move(cp, pending_handler_context_address); - __ LoadP(cp, MemOperand(cp)); + __ LoadU64(cp, MemOperand(cp)); __ Move(sp, pending_handler_sp_address); - __ LoadP(sp, MemOperand(sp)); + __ LoadU64(sp, MemOperand(sp)); __ Move(fp, pending_handler_fp_address); - __ LoadP(fp, MemOperand(fp)); + __ LoadU64(fp, MemOperand(fp)); // If the handler is a JS frame, restore the context to the frame. Note that // the context will be set to (cp == 0) for non-JS frames. @@ -2685,10 +2689,10 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, // Compute the handler entry address and jump to it. ConstantPoolUnavailableScope constant_pool_unavailable(masm); __ Move(ip, pending_handler_entrypoint_address); - __ LoadP(ip, MemOperand(ip)); + __ LoadU64(ip, MemOperand(ip)); if (FLAG_enable_embedded_constant_pool) { __ Move(kConstantPoolRegister, pending_handler_constant_pool_address); - __ LoadP(kConstantPoolRegister, MemOperand(kConstantPoolRegister)); + __ LoadU64(kConstantPoolRegister, MemOperand(kConstantPoolRegister)); } __ Jump(ip); } @@ -2873,8 +2877,8 @@ static void CallApiFunctionAndReturn(MacroAssembler* masm, // r15 - next_address->kLimitOffset // r16 - next_address->kLevelOffset __ Move(r17, next_address); - __ LoadP(r14, MemOperand(r17, kNextOffset)); - __ LoadP(r15, MemOperand(r17, kLimitOffset)); + __ LoadU64(r14, MemOperand(r17, kNextOffset)); + __ LoadU64(r15, MemOperand(r17, kLimitOffset)); __ lwz(r16, MemOperand(r17, kLevelOffset)); __ addi(r16, r16, Operand(1)); __ stw(r16, MemOperand(r17, kLevelOffset)); @@ -2887,19 +2891,19 @@ static void CallApiFunctionAndReturn(MacroAssembler* masm, Label return_value_loaded; // load value from ReturnValue - __ LoadP(r3, return_value_operand); + __ LoadU64(r3, return_value_operand); __ bind(&return_value_loaded); // No more valid handles (the result handle was the last one). Restore // previous handle scope. __ StoreP(r14, MemOperand(r17, kNextOffset)); - if (__ emit_debug_code()) { + if (FLAG_debug_code) { __ lwz(r4, MemOperand(r17, kLevelOffset)); __ cmp(r4, r16); __ Check(eq, AbortReason::kUnexpectedLevelAfterReturnFromApiCall); } __ subi(r16, r16, Operand(1)); __ stw(r16, MemOperand(r17, kLevelOffset)); - __ LoadP(r0, MemOperand(r17, kLimitOffset)); + __ LoadU64(r0, MemOperand(r17, kLimitOffset)); __ cmp(r15, r0); __ bne(&delete_allocated_handles); @@ -2907,7 +2911,7 @@ static void CallApiFunctionAndReturn(MacroAssembler* masm, __ bind(&leave_exit_frame); // LeaveExitFrame expects unwind space to be in a register. if (stack_space_operand != nullptr) { - __ LoadP(r14, *stack_space_operand); + __ LoadU64(r14, *stack_space_operand); } else { __ mov(r14, Operand(stack_space)); } @@ -2916,7 +2920,7 @@ static void CallApiFunctionAndReturn(MacroAssembler* masm, // Check if the function scheduled an exception. __ LoadRoot(r14, RootIndex::kTheHoleValue); __ Move(r15, ExternalReference::scheduled_exception_address(isolate)); - __ LoadP(r15, MemOperand(r15)); + __ LoadU64(r15, MemOperand(r15)); __ cmp(r14, r15); __ bne(&promote_scheduled_exception); @@ -3151,8 +3155,8 @@ void Builtins::Generate_CallApiGetter(MacroAssembler* masm) { __ LoadTaggedPointerField( scratch, FieldMemOperand(callback, AccessorInfo::kJsGetterOffset)); - __ LoadP(api_function_address, - FieldMemOperand(scratch, Foreign::kForeignAddressOffset)); + __ LoadU64(api_function_address, + FieldMemOperand(scratch, Foreign::kForeignAddressOffset)); // +3 is to skip prolog, return address and name handle. MemOperand return_value_operand( @@ -3174,13 +3178,14 @@ void Builtins::Generate_DirectCEntry(MacroAssembler* masm) { if (ABI_USES_FUNCTION_DESCRIPTORS) { // AIX/PPC64BE Linux use a function descriptor; - __ LoadP(ToRegister(ABI_TOC_REGISTER), - MemOperand(temp2, kSystemPointerSize)); - __ LoadP(temp2, MemOperand(temp2, 0)); // Instruction address + __ LoadU64(ToRegister(ABI_TOC_REGISTER), + MemOperand(temp2, kSystemPointerSize)); + __ LoadU64(temp2, MemOperand(temp2, 0)); // Instruction address } __ Call(temp2); // Call the C++ function. - __ LoadP(r0, MemOperand(sp, kStackFrameExtraParamSlot * kSystemPointerSize)); + __ LoadU64(r0, + MemOperand(sp, kStackFrameExtraParamSlot * kSystemPointerSize)); __ mtlr(r0); __ blr(); } @@ -3230,9 +3235,6 @@ void Generate_DeoptimizationEntry(MacroAssembler* masm, const int kSavedRegistersAreaSize = (kNumberOfRegisters * kSystemPointerSize) + kDoubleRegsSize; - // Get the bailout id is passed as r29 by the caller. - __ mr(r5, r29); - __ mov(r5, Operand(Deoptimizer::kFixedExitSizeMarker)); // Get the address of the location in the code object (r6) (return // address for lazy deoptimization) and compute the fp-to-sp delta in @@ -3246,9 +3248,10 @@ void Generate_DeoptimizationEntry(MacroAssembler* masm, __ PrepareCallCFunction(6, r8); __ li(r3, Operand::Zero()); Label context_check; - __ LoadP(r4, MemOperand(fp, CommonFrameConstants::kContextOrFrameTypeOffset)); + __ LoadU64(r4, + MemOperand(fp, CommonFrameConstants::kContextOrFrameTypeOffset)); __ JumpIfSmi(r4, &context_check); - __ LoadP(r3, MemOperand(fp, StandardFrameConstants::kFunctionOffset)); + __ LoadU64(r3, MemOperand(fp, StandardFrameConstants::kFunctionOffset)); __ bind(&context_check); __ li(r4, Operand(static_cast<int>(deopt_kind))); // r5: bailout id already loaded. @@ -3263,14 +3266,14 @@ void Generate_DeoptimizationEntry(MacroAssembler* masm, // Preserve "deoptimizer" object in register r3 and get the input // frame descriptor pointer to r4 (deoptimizer->input_); - __ LoadP(r4, MemOperand(r3, Deoptimizer::input_offset())); + __ LoadU64(r4, MemOperand(r3, Deoptimizer::input_offset())); // Copy core registers into FrameDescription::registers_[kNumRegisters]. DCHECK_EQ(Register::kNumRegisters, kNumberOfRegisters); for (int i = 0; i < kNumberOfRegisters; i++) { int offset = (i * kSystemPointerSize) + FrameDescription::registers_offset(); - __ LoadP(r5, MemOperand(sp, i * kSystemPointerSize)); + __ LoadU64(r5, MemOperand(sp, i * kSystemPointerSize)); __ StoreP(r5, MemOperand(r4, offset)); } @@ -3302,7 +3305,7 @@ void Generate_DeoptimizationEntry(MacroAssembler* masm, // Compute a pointer to the unwinding limit in register r5; that is // the first stack slot not part of the input frame. - __ LoadP(r5, MemOperand(r4, FrameDescription::frame_size_offset())); + __ LoadU64(r5, MemOperand(r4, FrameDescription::frame_size_offset())); __ add(r5, r5, sp); // Unwind the stack down to - but not including - the unwinding @@ -3331,28 +3334,29 @@ void Generate_DeoptimizationEntry(MacroAssembler* masm, } __ pop(r3); // Restore deoptimizer object (class Deoptimizer). - __ LoadP(sp, MemOperand(r3, Deoptimizer::caller_frame_top_offset())); + __ LoadU64(sp, MemOperand(r3, Deoptimizer::caller_frame_top_offset())); // Replace the current (input) frame with the output frames. Label outer_push_loop, inner_push_loop, outer_loop_header, inner_loop_header; // Outer loop state: r7 = current "FrameDescription** output_", // r4 = one past the last FrameDescription**. __ lwz(r4, MemOperand(r3, Deoptimizer::output_count_offset())); - __ LoadP(r7, MemOperand(r3, Deoptimizer::output_offset())); // r7 is output_. + __ LoadU64(r7, + MemOperand(r3, Deoptimizer::output_offset())); // r7 is output_. __ ShiftLeftImm(r4, r4, Operand(kSystemPointerSizeLog2)); __ add(r4, r7, r4); __ b(&outer_loop_header); __ bind(&outer_push_loop); // Inner loop state: r5 = current FrameDescription*, r6 = loop index. - __ LoadP(r5, MemOperand(r7, 0)); // output_[ix] - __ LoadP(r6, MemOperand(r5, FrameDescription::frame_size_offset())); + __ LoadU64(r5, MemOperand(r7, 0)); // output_[ix] + __ LoadU64(r6, MemOperand(r5, FrameDescription::frame_size_offset())); __ b(&inner_loop_header); __ bind(&inner_push_loop); __ addi(r6, r6, Operand(-sizeof(intptr_t))); __ add(r9, r5, r6); - __ LoadP(r9, MemOperand(r9, FrameDescription::frame_content_offset())); + __ LoadU64(r9, MemOperand(r9, FrameDescription::frame_content_offset())); __ push(r9); __ bind(&inner_loop_header); @@ -3364,7 +3368,7 @@ void Generate_DeoptimizationEntry(MacroAssembler* masm, __ cmp(r7, r4); __ blt(&outer_push_loop); - __ LoadP(r4, MemOperand(r3, Deoptimizer::input_offset())); + __ LoadU64(r4, MemOperand(r3, Deoptimizer::input_offset())); for (int i = 0; i < config->num_allocatable_double_registers(); ++i) { int code = config->GetAllocatableDoubleCode(i); const DoubleRegister dreg = DoubleRegister::from_code(code); @@ -3373,9 +3377,9 @@ void Generate_DeoptimizationEntry(MacroAssembler* masm, } // Push pc, and continuation from the last output frame. - __ LoadP(r9, MemOperand(r5, FrameDescription::pc_offset())); + __ LoadU64(r9, MemOperand(r5, FrameDescription::pc_offset())); __ push(r9); - __ LoadP(r9, MemOperand(r5, FrameDescription::continuation_offset())); + __ LoadU64(r9, MemOperand(r5, FrameDescription::continuation_offset())); __ push(r9); // Restore the registers from the last output frame. @@ -3388,7 +3392,7 @@ void Generate_DeoptimizationEntry(MacroAssembler* masm, int offset = (i * kSystemPointerSize) + FrameDescription::registers_offset(); if ((restored_regs & (1 << i)) != 0) { - __ LoadP(ToRegister(i), MemOperand(scratch, offset)); + __ LoadU64(ToRegister(i), MemOperand(scratch, offset)); } } } @@ -3465,11 +3469,12 @@ void Builtins::Generate_DynamicCheckMapsTrampoline(MacroAssembler* masm) { descriptor.GetRegisterParameter(DynamicCheckMapsDescriptor::kSlot); Register handler_arg = descriptor.GetRegisterParameter(DynamicCheckMapsDescriptor::kHandler); - __ LoadP(handler_arg, MemOperand(fp, CommonFrameConstants::kCallerPCOffset)); - __ LoadP( + __ LoadU64(handler_arg, + MemOperand(fp, CommonFrameConstants::kCallerPCOffset)); + __ LoadU64( slot_arg, MemOperand(handler_arg, Deoptimizer::kEagerWithResumeImmedArgs1PcOffset)); - __ LoadP( + __ LoadU64( handler_arg, MemOperand(handler_arg, Deoptimizer::kEagerWithResumeImmedArgs2PcOffset)); diff --git a/deps/v8/src/builtins/riscv64/builtins-riscv64.cc b/deps/v8/src/builtins/riscv64/builtins-riscv64.cc index 04907f5268..afd9a1fca1 100644 --- a/deps/v8/src/builtins/riscv64/builtins-riscv64.cc +++ b/deps/v8/src/builtins/riscv64/builtins-riscv64.cc @@ -6,6 +6,7 @@ #include "src/api/api-arguments.h" #include "src/codegen/code-factory.h" +#include "src/codegen/interface-descriptors-inl.h" #include "src/debug/debug.h" #include "src/deoptimizer/deoptimizer.h" #include "src/execution/frame-constants.h" @@ -100,7 +101,7 @@ void Generate_JSBuiltinsConstructStubHelper(MacroAssembler* masm) { // a0: number of arguments (untagged) // a1: constructor function // a3: new target - __ InvokeFunctionWithNewTarget(a1, a3, a0, CALL_FUNCTION); + __ InvokeFunctionWithNewTarget(a1, a3, a0, InvokeType::kCall); // Restore context from the frame. __ Ld(cp, MemOperand(fp, ConstructFrameConstants::kContextOffset)); @@ -225,7 +226,7 @@ void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) { __ Push(a6); // Call the function. - __ InvokeFunctionWithNewTarget(a1, a3, a0, CALL_FUNCTION); + __ InvokeFunctionWithNewTarget(a1, a3, a0, InvokeType::kCall); // ----------- S t a t e ------------- // -- a0: constructor result @@ -300,12 +301,16 @@ void Builtins::Generate_JSBuiltinsConstructStub(MacroAssembler* masm) { Generate_JSBuiltinsConstructStubHelper(masm); } -static void GetSharedFunctionInfoBytecode(MacroAssembler* masm, - Register sfi_data, - Register scratch1) { +// TODO(v8:11429): Add a path for "not_compiled" and unify the two uses under +// the more general dispatch. +static void GetSharedFunctionInfoBytecodeOrBaseline(MacroAssembler* masm, + Register sfi_data, + Register scratch1, + Label* is_baseline) { Label done; __ GetObjectType(sfi_data, scratch1, scratch1); + __ Branch(is_baseline, eq, scratch1, Operand(BASELINE_DATA_TYPE)); __ Branch(&done, ne, scratch1, Operand(INTERPRETER_DATA_TYPE)); __ Ld(sfi_data, FieldMemOperand(sfi_data, InterpreterData::kBytecodeArrayOffset)); @@ -325,7 +330,7 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) { // Store input value into generator object. __ Sd(a0, FieldMemOperand(a1, JSGeneratorObject::kInputOrDebugPosOffset)); __ RecordWriteField(a1, JSGeneratorObject::kInputOrDebugPosOffset, a0, a3, - kRAHasNotBeenSaved, kDontSaveFPRegs); + kRAHasNotBeenSaved, SaveFPRegsMode::kIgnore); // Load suspended function and context. __ Ld(a4, FieldMemOperand(a1, JSGeneratorObject::kFunctionOffset)); @@ -388,12 +393,14 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) { // Underlying function needs to have bytecode available. if (FLAG_debug_code) { + Label is_baseline; __ Ld(a3, FieldMemOperand(a4, JSFunction::kSharedFunctionInfoOffset)); __ Ld(a3, FieldMemOperand(a3, SharedFunctionInfo::kFunctionDataOffset)); - GetSharedFunctionInfoBytecode(masm, a3, a0); + GetSharedFunctionInfoBytecodeOrBaseline(masm, a3, a0, &is_baseline); __ GetObjectType(a3, a3, a3); __ Assert(eq, AbortReason::kMissingBytecodeArray, a3, Operand(BYTECODE_ARRAY_TYPE)); + __ bind(&is_baseline); } // Resume (Ignition/TurboFan) generator object. @@ -763,8 +770,8 @@ static void ReplaceClosureCodeWithOptimizedCode(MacroAssembler* masm, __ Sd(optimized_code, FieldMemOperand(closure, JSFunction::kCodeOffset)); __ Move(scratch1, optimized_code); // Write barrier clobbers scratch1 below. __ RecordWriteField(closure, JSFunction::kCodeOffset, scratch1, scratch2, - kRAHasNotBeenSaved, kDontSaveFPRegs, OMIT_REMEMBERED_SET, - OMIT_SMI_CHECK); + kRAHasNotBeenSaved, SaveFPRegsMode::kIgnore, + RememberedSetAction::kOmit, SmiCheck::kOmit); } static void LeaveInterpreterFrame(MacroAssembler* masm, Register scratch1, @@ -964,6 +971,184 @@ static void AdvanceBytecodeOffsetOrReturn(MacroAssembler* masm, __ bind(&end); } +// Read off the optimization state in the feedback vector and check if there +// is optimized code or a optimization marker that needs to be processed. +static void LoadOptimizationStateAndJumpIfNeedsProcessing( + MacroAssembler* masm, Register optimization_state, Register feedback_vector, + Label* has_optimized_code_or_marker) { + __ RecordComment("[ Check optimization state"); + UseScratchRegisterScope temps(masm); + Register scratch = temps.Acquire(); + __ Lw(optimization_state, + FieldMemOperand(feedback_vector, FeedbackVector::kFlagsOffset)); + __ And( + scratch, optimization_state, + Operand(FeedbackVector::kHasOptimizedCodeOrCompileOptimizedMarkerMask)); + __ Branch(has_optimized_code_or_marker, ne, scratch, Operand(zero_reg)); + __ RecordComment("]"); +} + +static void MaybeOptimizeCodeOrTailCallOptimizedCodeSlot( + MacroAssembler* masm, Register optimization_state, + Register feedback_vector) { + Label maybe_has_optimized_code; + // Check if optimized code marker is available + __ And( + t0, optimization_state, + Operand(FeedbackVector::kHasCompileOptimizedOrLogFirstExecutionMarker)); + __ Branch(&maybe_has_optimized_code, eq, t0, Operand(zero_reg)); + + Register optimization_marker = optimization_state; + __ DecodeField<FeedbackVector::OptimizationMarkerBits>(optimization_marker); + MaybeOptimizeCode(masm, feedback_vector, optimization_marker); + + __ bind(&maybe_has_optimized_code); + Register optimized_code_entry = optimization_state; + __ Ld(optimization_marker, + FieldMemOperand(feedback_vector, + FeedbackVector::kMaybeOptimizedCodeOffset)); + TailCallOptimizedCodeSlot(masm, optimized_code_entry, t4, a5); +} + +// static +void Builtins::Generate_BaselineOutOfLinePrologue(MacroAssembler* masm) { + UseScratchRegisterScope temps(masm); + temps.Include(kScratchReg.bit() | kScratchReg2.bit()); + auto descriptor = Builtins::CallInterfaceDescriptorFor( + Builtins::kBaselineOutOfLinePrologue); + Register closure = descriptor.GetRegisterParameter( + BaselineOutOfLinePrologueDescriptor::kClosure); + // Load the feedback vector from the closure. + Register feedback_vector = temps.Acquire(); + __ Ld(feedback_vector, + FieldMemOperand(closure, JSFunction::kFeedbackCellOffset)); + __ Ld(feedback_vector, FieldMemOperand(feedback_vector, Cell::kValueOffset)); + if (FLAG_debug_code) { + __ GetObjectType(feedback_vector, t0, t0); + __ Assert(eq, AbortReason::kExpectedFeedbackVector, t0, + Operand(FEEDBACK_VECTOR_TYPE)); + } + + // Check for an optimization marker. + Label has_optimized_code_or_marker; + Register optimization_state = temps.Acquire(); + LoadOptimizationStateAndJumpIfNeedsProcessing( + masm, optimization_state, feedback_vector, &has_optimized_code_or_marker); + + // Increment invocation count for the function. + { + Register invocation_count = t0; + __ Lw(invocation_count, + FieldMemOperand(feedback_vector, + FeedbackVector::kInvocationCountOffset)); + __ Add32(invocation_count, invocation_count, Operand(1)); + __ Sw(invocation_count, + FieldMemOperand(feedback_vector, + FeedbackVector::kInvocationCountOffset)); + } + + __ RecordComment("[ Frame Setup"); + FrameScope frame_scope(masm, StackFrame::MANUAL); + // Normally the first thing we'd do here is Push(lr, fp), but we already + // entered the frame in BaselineCompiler::Prologue, as we had to use the + // value lr before the call to this BaselineOutOfLinePrologue builtin. + + Register callee_context = descriptor.GetRegisterParameter( + BaselineOutOfLinePrologueDescriptor::kCalleeContext); + Register callee_js_function = descriptor.GetRegisterParameter( + BaselineOutOfLinePrologueDescriptor::kClosure); + __ Push(callee_context, callee_js_function); + DCHECK_EQ(callee_js_function, kJavaScriptCallTargetRegister); + DCHECK_EQ(callee_js_function, kJSFunctionRegister); + + Register argc = descriptor.GetRegisterParameter( + BaselineOutOfLinePrologueDescriptor::kJavaScriptCallArgCount); + // We'll use the bytecode for both code age/OSR resetting, and pushing onto + // the frame, so load it into a register. + Register bytecodeArray = descriptor.GetRegisterParameter( + BaselineOutOfLinePrologueDescriptor::kInterpreterBytecodeArray); + + // Reset code age and the OSR arming. The OSR field and BytecodeAgeOffset + // are 8-bit fields next to each other, so we could just optimize by writing + // a 16-bit. These static asserts guard our assumption is valid. + STATIC_ASSERT(BytecodeArray::kBytecodeAgeOffset == + BytecodeArray::kOsrNestingLevelOffset + kCharSize); + STATIC_ASSERT(BytecodeArray::kNoAgeBytecodeAge == 0); + __ Sh(zero_reg, + FieldMemOperand(bytecodeArray, BytecodeArray::kOsrNestingLevelOffset)); + + __ Push(argc, bytecodeArray); + + // Baseline code frames store the feedback vector where interpreter would + // store the bytecode offset. + if (FLAG_debug_code) { + __ GetObjectType(feedback_vector, t0, t0); + __ Assert(eq, AbortReason::kExpectedFeedbackVector, t0, + Operand(FEEDBACK_VECTOR_TYPE)); + } + // Our stack is currently aligned. We have have to push something along with + // the feedback vector to keep it that way -- we may as well start + // initialising the register frame. + // TODO(v8:11429,leszeks): Consider guaranteeing that this call leaves + // `undefined` in the accumulator register, to skip the load in the baseline + // code. + __ LoadRoot(kInterpreterAccumulatorRegister, RootIndex::kUndefinedValue); + __ Push(feedback_vector, kInterpreterAccumulatorRegister); + __ RecordComment("]"); + + __ RecordComment("[ Stack/interrupt check"); + Label call_stack_guard; + { + // Stack check. This folds the checks for both the interrupt stack limit + // check and the real stack limit into one by just checking for the + // interrupt limit. The interrupt limit is either equal to the real stack + // limit or tighter. By ensuring we have space until that limit after + // building the frame we can quickly precheck both at once. + Register frame_size = t0; + __ Ld(frame_size, + FieldMemOperand(bytecodeArray, BytecodeArray::kFrameSizeOffset)); + Register sp_minus_frame_size = frame_size; + __ Sub64(sp_minus_frame_size, sp, frame_size); + Register interrupt_limit = t1; + __ LoadStackLimit(interrupt_limit, + MacroAssembler::StackLimitKind::kInterruptStackLimit); + __ Branch(&call_stack_guard, Uless, sp_minus_frame_size, + Operand(interrupt_limit)); + __ RecordComment("]"); + } + + // Do "fast" return to the caller pc in lr. + // TODO(v8:11429): Document this frame setup better. + __ Ret(); + + __ bind(&has_optimized_code_or_marker); + { + __ RecordComment("[ Optimized marker check"); + // Drop the frame created by the baseline call. + __ Pop(fp, ra); + MaybeOptimizeCodeOrTailCallOptimizedCodeSlot(masm, optimization_state, + feedback_vector); + __ Trap(); + __ RecordComment("]"); + } + + __ bind(&call_stack_guard); + { + Register new_target = descriptor.GetRegisterParameter( + BaselineOutOfLinePrologueDescriptor::kJavaScriptCallNewTarget); + + FrameScope frame_scope(masm, StackFrame::INTERNAL); + __ RecordComment("[ Stack/interrupt call"); + // Save incoming new target or generator + __ Push(zero_reg, new_target); + __ CallRuntime(Runtime::kStackGuard); + __ Pop(new_target, zero_reg); + __ RecordComment("]"); + } + __ Ret(); + temps.Exclude(kScratchReg.bit() | kScratchReg2.bit()); +} + // Generate code for entering a JS function with the interpreter. // On entry to the function the receiver and arguments have been pushed on the // stack left to right. @@ -989,8 +1174,9 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) { FieldMemOperand(closure, JSFunction::kSharedFunctionInfoOffset)); __ Ld(kInterpreterBytecodeArrayRegister, FieldMemOperand(kScratchReg, SharedFunctionInfo::kFunctionDataOffset)); - GetSharedFunctionInfoBytecode(masm, kInterpreterBytecodeArrayRegister, - kScratchReg); + Label is_baseline; + GetSharedFunctionInfoBytecodeOrBaseline( + masm, kInterpreterBytecodeArrayRegister, kScratchReg, &is_baseline); // The bytecode array could have been flushed from the shared function info, // if so, call into CompileLazy. @@ -1188,6 +1374,44 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) { FeedbackVector::kMaybeOptimizedCodeOffset)); TailCallOptimizedCodeSlot(masm, optimized_code_entry, t4, a5); + __ bind(&is_baseline); + { + // Load the feedback vector from the closure. + __ Ld(feedback_vector, + FieldMemOperand(closure, JSFunction::kFeedbackCellOffset)); + __ Ld(feedback_vector, + FieldMemOperand(feedback_vector, Cell::kValueOffset)); + + Label install_baseline_code; + // Check if feedback vector is valid. If not, call prepare for baseline to + // allocate it. + __ Ld(t0, FieldMemOperand(feedback_vector, HeapObject::kMapOffset)); + __ Lh(t0, FieldMemOperand(t0, Map::kInstanceTypeOffset)); + __ Branch(&install_baseline_code, ne, t0, Operand(FEEDBACK_VECTOR_TYPE)); + + // Read off the optimization state in the feedback vector. + // TODO(v8:11429): Is this worth doing here? Baseline code will check it + // anyway... + __ Ld(optimization_state, + FieldMemOperand(feedback_vector, FeedbackVector::kFlagsOffset)); + + // Check if there is optimized code or a optimization marker that needes to + // be processed. + __ And( + t0, optimization_state, + Operand(FeedbackVector::kHasOptimizedCodeOrCompileOptimizedMarkerMask)); + __ Branch(&has_optimized_code_or_marker, ne, t0, Operand(zero_reg)); + + // Load the baseline code into the closure. + __ Ld(a2, FieldMemOperand(kInterpreterBytecodeArrayRegister, + BaselineData::kBaselineCodeOffset)); + static_assert(kJavaScriptCallCodeStartRegister == a2, "ABI mismatch"); + ReplaceClosureCodeWithOptimizedCode(masm, a2, closure, t0, t1); + __ JumpCodeObject(a2); + + __ bind(&install_baseline_code); + GenerateTailCallToReturnedCode(masm, Runtime::kInstallBaselineCode); + } __ bind(&compile_lazy); GenerateTailCallToReturnedCode(masm, Runtime::kCompileLazy); @@ -1407,7 +1631,7 @@ static void Generate_InterpreterEnterBytecode(MacroAssembler* masm) { __ Jump(kJavaScriptCallCodeStartRegister); } -void Builtins::Generate_InterpreterEnterBytecodeAdvance(MacroAssembler* masm) { +void Builtins::Generate_InterpreterEnterAtNextBytecode(MacroAssembler* masm) { // Advance the current bytecode offset stored within the given interpreter // stack frame. This simulates what all bytecode handlers do upon completion // of the underlying operation. @@ -1454,7 +1678,7 @@ void Builtins::Generate_InterpreterEnterBytecodeAdvance(MacroAssembler* masm) { __ Abort(AbortReason::kInvalidBytecodeAdvance); } -void Builtins::Generate_InterpreterEnterBytecodeDispatch(MacroAssembler* masm) { +void Builtins::Generate_InterpreterEnterAtBytecode(MacroAssembler* masm) { Generate_InterpreterEnterBytecode(masm); } @@ -1503,12 +1727,12 @@ void Generate_ContinueToBuiltinHelper(MacroAssembler* masm, sp, BuiltinContinuationFrameConstants::kFixedFrameSizeFromFp)); // Load builtin index (stored as a Smi) and use it to get the builtin start // address from the builtins table. - __ Pop(t0); + __ Pop(t6); __ Add64(sp, sp, Operand(BuiltinContinuationFrameConstants::kFixedFrameSizeFromFp)); __ Pop(ra); - __ LoadEntryFromBuiltinIndex(t0); - __ Jump(t0); + __ LoadEntryFromBuiltinIndex(t6); + __ Jump(t6); } } // namespace @@ -1542,7 +1766,20 @@ void Builtins::Generate_NotifyDeoptimized(MacroAssembler* masm) { __ Ret(); } -void Builtins::Generate_InterpreterOnStackReplacement(MacroAssembler* masm) { +void Builtins::Generate_TailCallOptimizedCodeSlot(MacroAssembler* masm) { + Register optimized_code_entry = kJavaScriptCallCodeStartRegister; + TailCallOptimizedCodeSlot(masm, optimized_code_entry, t4, t0); +} +namespace { + +void Generate_OSREntry(MacroAssembler* masm, Register entry_address, + Operand offset = Operand(int64_t(0))) { + __ Add64(ra, entry_address, offset); + // And "return" to the OSR entry point of the function. + __ Ret(); +} + +void OnStackReplacement(MacroAssembler* masm, bool is_interpreter) { { FrameScope scope(masm, StackFrame::INTERNAL); __ CallRuntime(Runtime::kCompileForOnStackReplacement); @@ -1550,11 +1787,11 @@ void Builtins::Generate_InterpreterOnStackReplacement(MacroAssembler* masm) { // If the code object is null, just return to the caller. __ Ret(eq, a0, Operand(Smi::zero())); - - // Drop the handler frame that is be sitting on top of the actual - // JavaScript frame. This is the case then OSR is triggered from bytecode. - __ LeaveFrame(StackFrame::STUB); - + if (is_interpreter) { + // Drop the handler frame that is be sitting on top of the actual + // JavaScript frame. This is the case then OSR is triggered from bytecode. + __ LeaveFrame(StackFrame::STUB); + } // Load deoptimization data from the code object. // <deopt_data> = <code>[#deoptimization_data_offset] __ Ld(a1, MemOperand(a0, Code::kDeoptimizationDataOffset - kHeapObjectTag)); @@ -1568,9 +1805,18 @@ void Builtins::Generate_InterpreterOnStackReplacement(MacroAssembler* masm) { // Compute the target address = code_obj + header_size + osr_offset // <entry_addr> = <code_obj> + #header_size + <osr_offset> __ Add64(a0, a0, a1); - __ Add64(ra, a0, Code::kHeaderSize - kHeapObjectTag); - // And "return" to the OSR entry point of the function. - __ Ret(); + Generate_OSREntry(masm, a0, Operand(Code::kHeaderSize - kHeapObjectTag)); +} +} // namespace + +void Builtins::Generate_InterpreterOnStackReplacement(MacroAssembler* masm) { + return OnStackReplacement(masm, true); +} + +void Builtins::Generate_BaselineOnStackReplacement(MacroAssembler* masm) { + __ Ld(kContextRegister, + MemOperand(fp, StandardFrameConstants::kContextOffset)); + return OnStackReplacement(masm, false); } // static @@ -1808,7 +2054,7 @@ void Builtins::Generate_CallOrConstructVarargs(MacroAssembler* masm, // -- a4 : len (number of elements to push from args) // -- a3 : new.target (for [[Construct]]) // ----------------------------------- - if (masm->emit_debug_code()) { + if (FLAG_debug_code) { // Allow a2 to be a FixedArray, or a FixedDoubleArray if a4 == 0. Label ok, fail; __ AssertNotSmi(a2); @@ -2070,7 +2316,7 @@ void Builtins::Generate_CallFunction(MacroAssembler* masm, __ Lhu(a2, FieldMemOperand(a2, SharedFunctionInfo::kFormalParameterCountOffset)); - __ InvokeFunctionCode(a1, no_reg, a2, a0, JUMP_FUNCTION); + __ InvokeFunctionCode(a1, no_reg, a2, a0, InvokeType::kJump); // The function is a "classConstructor", need to raise an exception. __ bind(&class_constructor); @@ -2438,10 +2684,10 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, // sp: stack pointer (restored as callee's sp after C call) // cp: current context (C callee-saved) // - // If argv_mode == kArgvInRegister: + // If argv_mode == ArgvMode::kRegister: // a2: pointer to the first argument - if (argv_mode == kArgvInRegister) { + if (argv_mode == ArgvMode::kRegister) { // Move argv into the correct register. __ Move(s1, a2); } else { @@ -2453,7 +2699,7 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, // Enter the exit frame that transitions from JavaScript to C++. FrameScope scope(masm, StackFrame::MANUAL); __ EnterExitFrame( - save_doubles == kSaveFPRegs, 0, + save_doubles == SaveFPRegsMode::kSave, 0, builtin_exit_frame ? StackFrame::BUILTIN_EXIT : StackFrame::EXIT); // s3: number of arguments including receiver (C callee-saved) @@ -2502,12 +2748,12 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, // a0:a1: result // sp: stack pointer // fp: frame pointer - Register argc = argv_mode == kArgvInRegister + Register argc = argv_mode == ArgvMode::kRegister // We don't want to pop arguments so set argc to no_reg. ? no_reg // s3: still holds argc (callee-saved). : s3; - __ LeaveExitFrame(save_doubles == kSaveFPRegs, argc, EMIT_RETURN); + __ LeaveExitFrame(save_doubles == SaveFPRegsMode::kSave, argc, EMIT_RETURN); // Handling of exception. __ bind(&exception_returned); @@ -2689,6 +2935,10 @@ void Builtins::Generate_GenericJSToWasmWrapper(MacroAssembler* masm) { __ Trap(); } +void Builtins::Generate_WasmOnStackReplace(MacroAssembler* masm) { + // Only needed on x64. + __ Trap(); +} namespace { int AddressOffset(ExternalReference ref0, ExternalReference ref1) { @@ -2762,7 +3012,7 @@ void CallApiFunctionAndReturn(MacroAssembler* masm, Register function_address, // No more valid handles (the result handle was the last one). Restore // previous handle scope. __ Sd(s3, MemOperand(s5, kNextOffset)); - if (__ emit_debug_code()) { + if (FLAG_debug_code) { __ Lw(a1, MemOperand(s5, kLevelOffset)); __ Check(eq, AbortReason::kUnexpectedLevelAfterReturnFromApiCall, a1, Operand(s2)); @@ -3228,9 +3478,9 @@ void Generate_DeoptimizationEntry(MacroAssembler* masm, } } - __ pop(t3); // Get continuation, leave pc on stack. + __ pop(t6); // Get continuation, leave pc on stack. __ pop(ra); - __ Jump(t3); + __ Jump(t6); __ stop(); } @@ -3252,6 +3502,146 @@ void Builtins::Generate_DeoptimizationEntry_Lazy(MacroAssembler* masm) { Generate_DeoptimizationEntry(masm, DeoptimizeKind::kLazy); } +namespace { + +// Converts an interpreter frame into a baseline frame and continues execution +// in baseline code (baseline code has to exist on the shared function info), +// either at the start or the end of the current bytecode. +void Generate_BaselineEntry(MacroAssembler* masm, bool next_bytecode, + bool is_osr = false) { + __ Push(zero_reg, kInterpreterAccumulatorRegister); + Label start; + __ bind(&start); + + // Get function from the frame. + Register closure = a1; + __ Ld(closure, MemOperand(fp, StandardFrameConstants::kFunctionOffset)); + + // Replace BytecodeOffset with the feedback vector. + Register feedback_vector = a2; + __ Ld(feedback_vector, + FieldMemOperand(closure, JSFunction::kFeedbackCellOffset)); + __ Ld(feedback_vector, FieldMemOperand(feedback_vector, Cell::kValueOffset)); + Label install_baseline_code; + // Check if feedback vector is valid. If not, call prepare for baseline to + // allocate it. + __ GetObjectType(feedback_vector, t0, t0); + __ Branch(&install_baseline_code, eq, t0, Operand(FEEDBACK_VECTOR_TYPE)); + // Save BytecodeOffset from the stack frame. + __ SmiUntag(kInterpreterBytecodeOffsetRegister, + MemOperand(fp, InterpreterFrameConstants::kBytecodeOffsetFromFp)); + // Replace BytecodeOffset with the feedback vector. + __ Sd(feedback_vector, + MemOperand(fp, InterpreterFrameConstants::kBytecodeOffsetFromFp)); + feedback_vector = no_reg; + + // Get the Code object from the shared function info. + UseScratchRegisterScope temps(masm); + Register code_obj = temps.Acquire(); + __ Ld(code_obj, + FieldMemOperand(closure, JSFunction::kSharedFunctionInfoOffset)); + __ Ld(code_obj, + FieldMemOperand(code_obj, SharedFunctionInfo::kFunctionDataOffset)); + __ Ld(code_obj, FieldMemOperand(code_obj, BaselineData::kBaselineCodeOffset)); + + // Compute baseline pc for bytecode offset. + __ Push(zero_reg, kInterpreterAccumulatorRegister); + ExternalReference get_baseline_pc_extref; + if (next_bytecode || is_osr) { + get_baseline_pc_extref = + ExternalReference::baseline_pc_for_next_executed_bytecode(); + } else { + get_baseline_pc_extref = + ExternalReference::baseline_pc_for_bytecode_offset(); + } + + Register get_baseline_pc = a3; + __ li(get_baseline_pc, get_baseline_pc_extref); + + // If the code deoptimizes during the implicit function entry stack interrupt + // check, it will have a bailout ID of kFunctionEntryBytecodeOffset, which is + // not a valid bytecode offset. + // TODO(pthier): Investigate if it is feasible to handle this special case + // in TurboFan instead of here. + Label valid_bytecode_offset, function_entry_bytecode; + if (!is_osr) { + __ Branch(&function_entry_bytecode, eq, kInterpreterBytecodeOffsetRegister, + Operand(BytecodeArray::kHeaderSize - kHeapObjectTag + + kFunctionEntryBytecodeOffset)); + } + + __ Sub64(kInterpreterBytecodeOffsetRegister, + kInterpreterBytecodeOffsetRegister, + (BytecodeArray::kHeaderSize - kHeapObjectTag)); + + __ bind(&valid_bytecode_offset); + // Get bytecode array from the stack frame. + __ Ld(kInterpreterBytecodeArrayRegister, + MemOperand(fp, InterpreterFrameConstants::kBytecodeArrayFromFp)); + { + Register arg_reg_1 = a0; + Register arg_reg_2 = a1; + Register arg_reg_3 = a2; + __ Move(arg_reg_1, code_obj); + __ Move(arg_reg_2, kInterpreterBytecodeOffsetRegister); + __ Move(arg_reg_3, kInterpreterBytecodeArrayRegister); + FrameScope scope(masm, StackFrame::INTERNAL); + __ CallCFunction(get_baseline_pc, 3, 0); + } + __ Add64(code_obj, code_obj, kReturnRegister0); + __ Pop(kInterpreterAccumulatorRegister, zero_reg); + + if (is_osr) { + // Reset the OSR loop nesting depth to disarm back edges. + // TODO(pthier): Separate baseline Sparkplug from TF arming and don't disarm + // Sparkplug here. + __ Sd(zero_reg, FieldMemOperand(kInterpreterBytecodeArrayRegister, + BytecodeArray::kOsrNestingLevelOffset)); + Generate_OSREntry(masm, code_obj, + Operand(Code::kHeaderSize - kHeapObjectTag)); + } else { + __ Add64(code_obj, code_obj, Code::kHeaderSize - kHeapObjectTag); + __ Jump(code_obj); + } + __ Trap(); // Unreachable. + + if (!is_osr) { + __ bind(&function_entry_bytecode); + // If the bytecode offset is kFunctionEntryOffset, get the start address of + // the first bytecode. + __ li(kInterpreterBytecodeOffsetRegister, Operand(int64_t(0))); + if (next_bytecode) { + __ li(get_baseline_pc, + ExternalReference::baseline_pc_for_bytecode_offset()); + } + __ Branch(&valid_bytecode_offset); + } + + __ bind(&install_baseline_code); + { + FrameScope scope(masm, StackFrame::INTERNAL); + __ Push(closure); + __ CallRuntime(Runtime::kInstallBaselineCode, 1); + } + // Retry from the start after installing baseline code. + __ Branch(&start); +} + +} // namespace + +void Builtins::Generate_BaselineEnterAtBytecode(MacroAssembler* masm) { + Generate_BaselineEntry(masm, false); +} + +void Builtins::Generate_BaselineEnterAtNextBytecode(MacroAssembler* masm) { + Generate_BaselineEntry(masm, true); +} + +void Builtins::Generate_InterpreterOnStackReplacement_ToBaseline( + MacroAssembler* masm) { + Generate_BaselineEntry(masm, false, true); +} + void Builtins::Generate_DynamicCheckMapsTrampoline(MacroAssembler* masm) { FrameScope scope(masm, StackFrame::MANUAL); __ EnterFrame(StackFrame::INTERNAL); diff --git a/deps/v8/src/builtins/s390/builtins-s390.cc b/deps/v8/src/builtins/s390/builtins-s390.cc index 7711af6e90..0272621ac0 100644 --- a/deps/v8/src/builtins/s390/builtins-s390.cc +++ b/deps/v8/src/builtins/s390/builtins-s390.cc @@ -6,6 +6,7 @@ #include "src/api/api-arguments.h" #include "src/codegen/code-factory.h" +#include "src/codegen/interface-descriptors-inl.h" // For interpreter_entry_return_pc_offset. TODO(jkummerow): Drop. #include "src/codegen/macro-assembler-inl.h" #include "src/codegen/register-configuration.h" @@ -110,7 +111,7 @@ void Generate_JSBuiltinsConstructStubHelper(MacroAssembler* masm) { // r3: constructor function // r5: new target - __ InvokeFunctionWithNewTarget(r3, r5, r2, CALL_FUNCTION); + __ InvokeFunctionWithNewTarget(r3, r5, r2, InvokeType::kCall); // Restore context from the frame. __ LoadU64(cp, MemOperand(fp, ConstructFrameConstants::kContextOffset)); @@ -238,7 +239,7 @@ void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) { __ Push(r8); // Call the function. - __ InvokeFunctionWithNewTarget(r3, r5, r2, CALL_FUNCTION); + __ InvokeFunctionWithNewTarget(r3, r5, r2, InvokeType::kCall); // ----------- S t a t e ------------- // -- r0: constructor result @@ -339,7 +340,7 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) { __ StoreTaggedField( r2, FieldMemOperand(r3, JSGeneratorObject::kInputOrDebugPosOffset), r0); __ RecordWriteField(r3, JSGeneratorObject::kInputOrDebugPosOffset, r2, r5, - kLRHasNotBeenSaved, kDontSaveFPRegs); + kLRHasNotBeenSaved, SaveFPRegsMode::kIgnore); // Load suspended function and context. __ LoadTaggedPointerField( @@ -395,18 +396,15 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) { FieldMemOperand(r3, JSGeneratorObject::kParametersAndRegistersOffset)); { Label done_loop, loop; - __ mov(r8, r5); - __ bind(&loop); - __ SubS64(r8, r8, Operand(1)); + __ SubS64(r5, r5, Operand(1)); __ blt(&done_loop); - __ ShiftLeftU64(r1, r8, Operand(kTaggedSizeLog2)); + __ ShiftLeftU64(r1, r5, Operand(kTaggedSizeLog2)); __ la(scratch, MemOperand(r4, r1)); __ LoadAnyTaggedField(scratch, FieldMemOperand(scratch, FixedArray::kHeaderSize)); __ Push(scratch); __ b(&loop); - __ bind(&done_loop); // Push receiver. @@ -857,8 +855,8 @@ static void ReplaceClosureCodeWithOptimizedCode(MacroAssembler* masm, __ mov(scratch1, optimized_code); // Write barrier clobbers scratch1 below. __ RecordWriteField(closure, JSFunction::kCodeOffset, scratch1, scratch2, - kLRHasNotBeenSaved, kDontSaveFPRegs, OMIT_REMEMBERED_SET, - OMIT_SMI_CHECK); + kLRHasNotBeenSaved, SaveFPRegsMode::kIgnore, + RememberedSetAction::kOmit, SmiCheck::kOmit); } static void LeaveInterpreterFrame(MacroAssembler* masm, Register scratch1, @@ -1527,7 +1525,7 @@ static void Generate_InterpreterEnterBytecode(MacroAssembler* masm) { __ Jump(kJavaScriptCallCodeStartRegister); } -void Builtins::Generate_InterpreterEnterBytecodeAdvance(MacroAssembler* masm) { +void Builtins::Generate_InterpreterEnterAtNextBytecode(MacroAssembler* masm) { // Get bytecode array and bytecode offset from the stack frame. __ LoadU64(kInterpreterBytecodeArrayRegister, MemOperand(fp, InterpreterFrameConstants::kBytecodeArrayFromFp)); @@ -1573,7 +1571,7 @@ void Builtins::Generate_InterpreterEnterBytecodeAdvance(MacroAssembler* masm) { __ Abort(AbortReason::kInvalidBytecodeAdvance); } -void Builtins::Generate_InterpreterEnterBytecodeDispatch(MacroAssembler* masm) { +void Builtins::Generate_InterpreterEnterAtBytecode(MacroAssembler* masm) { Generate_InterpreterEnterBytecode(masm); } @@ -1890,6 +1888,7 @@ void Builtins::Generate_ReflectConstruct(MacroAssembler* masm) { } // static +// TODO(v8:11615): Observe Code::kMaxArguments in CallOrConstructVarargs void Builtins::Generate_CallOrConstructVarargs(MacroAssembler* masm, Handle<Code> code) { // ----------- S t a t e ------------- @@ -1902,7 +1901,7 @@ void Builtins::Generate_CallOrConstructVarargs(MacroAssembler* masm, Register scratch = ip; - if (masm->emit_debug_code()) { + if (FLAG_debug_code) { // Allow r4 to be a FixedArray, or a FixedDoubleArray if r6 == 0. Label ok, fail; __ AssertNotSmi(r4); @@ -2177,7 +2176,7 @@ void Builtins::Generate_CallFunction(MacroAssembler* masm, __ LoadU16( r4, FieldMemOperand(r4, SharedFunctionInfo::kFormalParameterCountOffset)); - __ InvokeFunctionCode(r3, no_reg, r4, r2, JUMP_FUNCTION); + __ InvokeFunctionCode(r3, no_reg, r4, r2, InvokeType::kJump); // The function is a "classConstructor", need to raise an exception. __ bind(&class_constructor); @@ -2549,6 +2548,11 @@ void Builtins::Generate_GenericJSToWasmWrapper(MacroAssembler* masm) { // TODO(v8:10701): Implement for this platform. __ Trap(); } + +void Builtins::Generate_WasmOnStackReplace(MacroAssembler* masm) { + // Only needed on x64. + __ Trap(); +} #endif // V8_ENABLE_WEBASSEMBLY void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, @@ -2561,12 +2565,12 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, // sp: stack pointer (restored as callee's sp after C call) // cp: current context (C callee-saved) // - // If argv_mode == kArgvInRegister: + // If argv_mode == ArgvMode::kRegister: // r4: pointer to the first argument __ mov(r7, r3); - if (argv_mode == kArgvInRegister) { + if (argv_mode == ArgvMode::kRegister) { // Move argv into the correct register. __ mov(r3, r4); } else { @@ -2594,7 +2598,7 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, #endif __ EnterExitFrame( - save_doubles, arg_stack_space, + save_doubles == SaveFPRegsMode::kSave, arg_stack_space, builtin_exit_frame ? StackFrame::BUILTIN_EXIT : StackFrame::EXIT); // Store a copy of argc, argv in callee-saved registers for later. @@ -2657,12 +2661,12 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, // r2:r3: result // sp: stack pointer // fp: frame pointer - Register argc = argv_mode == kArgvInRegister + Register argc = argv_mode == ArgvMode::kRegister // We don't want to pop arguments so set argc to no_reg. ? no_reg // r6: still holds argc (callee-saved). : r6; - __ LeaveExitFrame(save_doubles, argc); + __ LeaveExitFrame(save_doubles == SaveFPRegsMode::kSave, argc); __ b(r14); // Handling of exception. @@ -2916,7 +2920,7 @@ static void CallApiFunctionAndReturn(MacroAssembler* masm, // No more valid handles (the result handle was the last one). Restore // previous handle scope. __ StoreU64(r6, MemOperand(r9, kNextOffset)); - if (__ emit_debug_code()) { + if (FLAG_debug_code) { __ LoadU32(r3, MemOperand(r9, kLevelOffset)); __ CmpS64(r3, r8); __ Check(eq, AbortReason::kUnexpectedLevelAfterReturnFromApiCall); @@ -3464,11 +3468,12 @@ void Builtins::Generate_DynamicCheckMapsTrampoline(MacroAssembler* masm) { descriptor.GetRegisterParameter(DynamicCheckMapsDescriptor::kSlot); Register handler_arg = descriptor.GetRegisterParameter(DynamicCheckMapsDescriptor::kHandler); - __ LoadP(handler_arg, MemOperand(fp, CommonFrameConstants::kCallerPCOffset)); - __ LoadP( + __ LoadU64(handler_arg, + MemOperand(fp, CommonFrameConstants::kCallerPCOffset)); + __ LoadU64( slot_arg, MemOperand(handler_arg, Deoptimizer::kEagerWithResumeImmedArgs1PcOffset)); - __ LoadP( + __ LoadU64( handler_arg, MemOperand(handler_arg, Deoptimizer::kEagerWithResumeImmedArgs2PcOffset)); diff --git a/deps/v8/src/builtins/setup-builtins-internal.cc b/deps/v8/src/builtins/setup-builtins-internal.cc index 348866c9bd..fbcfab56f4 100644 --- a/deps/v8/src/builtins/setup-builtins-internal.cc +++ b/deps/v8/src/builtins/setup-builtins-internal.cc @@ -11,7 +11,6 @@ #include "src/compiler/code-assembler.h" #include "src/execution/isolate.h" #include "src/handles/handles-inl.h" -#include "src/heap/heap-inl.h" // For Heap::code_range. #include "src/init/setup-isolate.h" #include "src/interpreter/bytecodes.h" #include "src/interpreter/interpreter-generator.h" @@ -42,10 +41,10 @@ AssemblerOptions BuiltinAssemblerOptions(Isolate* isolate, return options; } - const base::AddressRegion& code_range = isolate->heap()->code_range(); + const base::AddressRegion& code_region = isolate->heap()->code_region(); bool pc_relative_calls_fit_in_code_range = - !code_range.is_empty() && - std::ceil(static_cast<float>(code_range.size() / MB)) <= + !code_region.is_empty() && + std::ceil(static_cast<float>(code_region.size() / MB)) <= kMaxPCRelativeCodeRangeInMB; options.isolate_independent_code = true; @@ -219,7 +218,7 @@ void SetupIsolateDelegate::PopulateWithPlaceholders(Isolate* isolate) { // static void SetupIsolateDelegate::ReplacePlaceholders(Isolate* isolate) { - // Replace references from all code objects to placeholders. + // Replace references from all builtin code objects to placeholders. Builtins* builtins = isolate->builtins(); DisallowGarbageCollection no_gc; CodeSpaceMemoryModificationScope modification_scope(isolate->heap()); @@ -228,11 +227,8 @@ void SetupIsolateDelegate::ReplacePlaceholders(Isolate* isolate) { RelocInfo::ModeMask(RelocInfo::FULL_EMBEDDED_OBJECT) | RelocInfo::ModeMask(RelocInfo::COMPRESSED_EMBEDDED_OBJECT) | RelocInfo::ModeMask(RelocInfo::RELATIVE_CODE_TARGET); - HeapObjectIterator iterator(isolate->heap()); - for (HeapObject obj = iterator.Next(); !obj.is_null(); - obj = iterator.Next()) { - if (!obj.IsCode()) continue; - Code code = Code::cast(obj); + for (int i = 0; i < Builtins::builtin_count; i++) { + Code code = builtins->builtin(i); bool flush_icache = false; for (RelocIterator it(code, kRelocMask); !it.done(); it.next()) { RelocInfo* rinfo = it.rinfo(); diff --git a/deps/v8/src/builtins/typed-array-createtypedarray.tq b/deps/v8/src/builtins/typed-array-createtypedarray.tq index 6e416ddd98..6333ebf97f 100644 --- a/deps/v8/src/builtins/typed-array-createtypedarray.tq +++ b/deps/v8/src/builtins/typed-array-createtypedarray.tq @@ -19,11 +19,17 @@ extern macro TypedArrayBuiltinsAssembler::SetupTypedArrayEmbedderFields( extern runtime ThrowInvalidTypedArrayAlignment(implicit context: Context)( Map, String): never; +extern runtime GrowableSharedArrayBufferByteLength(implicit context: Context)( + Object): JSAny; + transitioning macro AllocateTypedArray(implicit context: Context)( isOnHeap: constexpr bool, map: Map, buffer: JSArrayBuffer, - byteOffset: uintptr, byteLength: uintptr, length: uintptr): JSTypedArray { + byteOffset: uintptr, byteLength: uintptr, length: uintptr, + isLengthTracking: bool): JSTypedArray { let elements: ByteArray; if constexpr (isOnHeap) { + assert(!IsResizableArrayBuffer(buffer)); + assert(!isLengthTracking); elements = AllocateByteArray(byteLength); } else { elements = kEmptyByteArray; @@ -53,6 +59,9 @@ transitioning macro AllocateTypedArray(implicit context: Context)( typedArray.byte_offset = byteOffset; typedArray.byte_length = byteLength; typedArray.length = length; + typedArray.bit_field.is_length_tracking = isLengthTracking; + typedArray.bit_field.is_backed_by_rab = + IsResizableArrayBuffer(buffer) && !IsSharedArrayBuffer(buffer); typed_array::AllocateJSTypedArrayExternalPointerEntry(typedArray); if constexpr (isOnHeap) { typed_array::SetJSTypedArrayOnHeapDataPtr(typedArray, elements, byteOffset); @@ -88,8 +97,10 @@ transitioning macro TypedArrayInitialize(implicit context: Context)( const buffer = AllocateEmptyOnHeapBuffer(byteLength); const isOnHeap: constexpr bool = true; + const isLengthTracking: constexpr bool = false; const typedArray = AllocateTypedArray( - isOnHeap, map, buffer, byteOffset, byteLength, length); + isOnHeap, map, buffer, byteOffset, byteLength, length, + isLengthTracking); if constexpr (initialize) { const backingStore = typedArray.data_ptr; @@ -107,8 +118,10 @@ transitioning macro TypedArrayInitialize(implicit context: Context)( } label AttachOffHeapBuffer(bufferObj: Object) { const buffer = Cast<JSArrayBuffer>(bufferObj) otherwise unreachable; const isOnHeap: constexpr bool = false; + const isLengthTracking: constexpr bool = false; return AllocateTypedArray( - isOnHeap, map, buffer, byteOffset, byteLength, length); + isOnHeap, map, buffer, byteOffset, byteLength, length, + isLengthTracking); } } @@ -204,8 +217,26 @@ transitioning macro ConstructByTypedArray(implicit context: Context)( // 22.2.4.5 TypedArray ( buffer, byteOffset, length ) // ES #sec-typedarray-buffer-byteoffset-length transitioning macro ConstructByArrayBuffer(implicit context: Context)( - map: Map, buffer: JSArrayBuffer, byteOffset: JSAny, length: JSAny, - elementsInfo: typed_array::TypedArrayElementsInfo): JSTypedArray { + target: JSFunction, newTarget: JSReceiver, buffer: JSArrayBuffer, + byteOffset: JSAny, length: JSAny): JSTypedArray { + let map: Map; + const isLengthTracking: bool = + IsResizableArrayBuffer(buffer) && (length == Undefined); + // Pick the RAB / GSAB map (containing the corresponding RAB / GSAB + // ElementsKind). GSAB-backed non-length-tracking TypedArrays behave just like + // normal TypedArrays, so exclude them. + const rabGsab: bool = IsResizableArrayBuffer(buffer) && + (!IsSharedArrayBuffer(buffer) || isLengthTracking); + if (rabGsab) { + map = GetDerivedRabGsabMap(target, newTarget); + } else { + map = GetDerivedMap(target, newTarget); + } + + // 5. Let elementSize be the Number value of the Element Size value in Table + // 56 for constructorName. + const elementsInfo = GetTypedArrayElementsInfo(map); + try { // 6. Let offset be ? ToIndex(byteOffset). const offset: uintptr = ToIndex(byteOffset) otherwise IfInvalidOffset; @@ -226,7 +257,13 @@ transitioning macro ConstructByArrayBuffer(implicit context: Context)( } // 10. Let bufferByteLength be buffer.[[ArrayBufferByteLength]]. - const bufferByteLength: uintptr = buffer.byte_length; + let bufferByteLength: uintptr; + if (IsResizableArrayBuffer(buffer) && IsSharedArrayBuffer(buffer)) { + bufferByteLength = ToIndex(GrowableSharedArrayBufferByteLength(buffer)) + otherwise unreachable; + } else { + bufferByteLength = buffer.byte_length; + } // 11. If length is either not present or undefined, then if (length == Undefined) { @@ -261,7 +298,8 @@ transitioning macro ConstructByArrayBuffer(implicit context: Context)( const isOnHeap: constexpr bool = false; return AllocateTypedArray( - isOnHeap, map, buffer, offset, newByteLength, newLength); + isOnHeap, map, buffer, offset, newByteLength, newLength, + isLengthTracking); } label IfInvalidAlignment(problemString: String) deferred { ThrowInvalidTypedArrayAlignment(map, problemString); } label IfInvalidLength deferred { @@ -286,6 +324,8 @@ transitioning macro TypedArrayCreateByLength(implicit context: Context)( // ValidateTypedArray currently returns the array, not the ViewBuffer. const newTypedArray: JSTypedArray = ValidateTypedArray(context, newTypedArrayObj, methodName); + newTypedArray.bit_field.is_length_tracking = false; + newTypedArray.bit_field.is_backed_by_rab = false; if (IsDetachedBuffer(newTypedArray.buffer)) deferred { ThrowTypeError(MessageTemplate::kDetachedOperation, methodName); @@ -336,21 +376,16 @@ transitioning builtin CreateTypedArray( assert(IsConstructor(target)); // 4. Let O be ? AllocateTypedArray(constructorName, NewTarget, // "%TypedArrayPrototype%"). - const map = GetDerivedMap(target, newTarget); - - // 5. Let elementSize be the Number value of the Element Size value in Table - // 56 for constructorName. - const elementsInfo = GetTypedArrayElementsInfo(map); - try { typeswitch (arg1) { case (length: Smi): { goto IfConstructByLength(length); } case (buffer: JSArrayBuffer): { - return ConstructByArrayBuffer(map, buffer, arg2, arg3, elementsInfo); + return ConstructByArrayBuffer(target, newTarget, buffer, arg2, arg3); } case (typedArray: JSTypedArray): { + // TODO(v8:11111): Support RAB / GSAB. ConstructByTypedArray(typedArray) otherwise IfConstructByArrayLike; } case (obj: JSReceiver): { @@ -363,9 +398,18 @@ transitioning builtin CreateTypedArray( } } } label IfConstructByLength(length: JSAny) { + const map = GetDerivedMap(target, newTarget); + // 5. Let elementSize be the Number value of the Element Size value in Table + // 56 for constructorName. + const elementsInfo = GetTypedArrayElementsInfo(map); + return ConstructByLength(map, length, elementsInfo); } label IfConstructByArrayLike( arrayLike: JSReceiver, length: uintptr, bufferConstructor: JSReceiver) { + const map = GetDerivedMap(target, newTarget); + // 5. Let elementSize be the Number value of the Element Size value in Table + // 56 for constructorName. + const elementsInfo = GetTypedArrayElementsInfo(map); return ConstructByArrayLike( map, arrayLike, length, elementsInfo, bufferConstructor); } diff --git a/deps/v8/src/builtins/wasm.tq b/deps/v8/src/builtins/wasm.tq index 05a1516204..f859d1e0bf 100644 --- a/deps/v8/src/builtins/wasm.tq +++ b/deps/v8/src/builtins/wasm.tq @@ -287,8 +287,9 @@ builtin WasmAllocateRtt(typeIndex: intptr, parent: Map): Map { } builtin WasmAllocateStructWithRtt(rtt: Map): HeapObject { - const instanceSize: intptr = - unsafe::TimesTaggedSize(Convert<intptr>(rtt.instance_size_in_words)); + const typeInfo: WasmTypeInfo = %RawDownCast<WasmTypeInfo>( + rtt.constructor_or_back_pointer_or_native_context); + const instanceSize: intptr = SmiUntag(typeInfo.instance_size); const result: HeapObject = unsafe::Allocate( instanceSize, AllocationFlag::kAllowLargeObjectAllocation); *UnsafeConstCast(&result.map) = rtt; diff --git a/deps/v8/src/builtins/x64/builtins-x64.cc b/deps/v8/src/builtins/x64/builtins-x64.cc index 5b5e964ef9..7fc7c5dec7 100644 --- a/deps/v8/src/builtins/x64/builtins-x64.cc +++ b/deps/v8/src/builtins/x64/builtins-x64.cc @@ -8,18 +8,19 @@ #include "src/base/bits-iterator.h" #include "src/base/iterator.h" #include "src/codegen/code-factory.h" -#include "src/common/globals.h" -#include "src/objects/code.h" +#include "src/codegen/interface-descriptors-inl.h" // For interpreter_entry_return_pc_offset. TODO(jkummerow): Drop. #include "src/codegen/macro-assembler-inl.h" #include "src/codegen/register-configuration.h" #include "src/codegen/x64/assembler-x64.h" +#include "src/common/globals.h" #include "src/deoptimizer/deoptimizer.h" #include "src/execution/frame-constants.h" #include "src/execution/frames.h" #include "src/heap/heap-inl.h" #include "src/logging/counters.h" #include "src/objects/cell.h" +#include "src/objects/code.h" #include "src/objects/debug-objects.h" #include "src/objects/foreign.h" #include "src/objects/heap-number.h" @@ -118,7 +119,7 @@ void Generate_JSBuiltinsConstructStubHelper(MacroAssembler* masm) { // rax: number of arguments (untagged) // rdi: constructor function // rdx: new target - __ InvokeFunction(rdi, rdx, rax, CALL_FUNCTION); + __ InvokeFunction(rdi, rdx, rax, InvokeType::kCall); // Restore smi-tagged arguments count from the frame. __ movq(rbx, Operand(rbp, ConstructFrameConstants::kLengthOffset)); @@ -242,7 +243,7 @@ void Builtins::Generate_JSConstructStubGeneric(MacroAssembler* masm) { __ Push(r8); // Call the function. - __ InvokeFunction(rdi, rdx, rax, CALL_FUNCTION); + __ InvokeFunction(rdi, rdx, rax, InvokeType::kCall); // ----------- S t a t e ------------- // -- rax constructor result @@ -383,8 +384,8 @@ void Generate_JSEntryVariant(MacroAssembler* masm, StackFrame::Type type, #ifdef V8_COMPRESS_POINTERS_IN_SHARED_CAGE // Initialize the pointer cage base register. - // TODO(syg): Actually make a cage. - __ movq(kPointerCageBaseRegister, arg_reg_1); + __ LoadRootRelative(kPtrComprCageBaseRegister, + IsolateData::cage_base_offset()); #endif } @@ -560,7 +561,7 @@ static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm, // rdx : new_target // Clear the context before we push it when entering the internal frame. - __ Set(rsi, 0); + __ Move(rsi, 0); // Enter an internal frame. FrameScope scope(masm, StackFrame::INTERNAL); @@ -687,9 +688,9 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) { __ StoreTaggedField( FieldOperand(rdx, JSGeneratorObject::kInputOrDebugPosOffset), rax); __ RecordWriteField(rdx, JSGeneratorObject::kInputOrDebugPosOffset, rax, rcx, - kDontSaveFPRegs); + SaveFPRegsMode::kIgnore); - Register decompr_scratch1 = COMPRESS_POINTERS_BOOL ? r11 : no_reg; + Register decompr_scratch1 = COMPRESS_POINTERS_BOOL ? r8 : no_reg; // Load suspended function and context. __ LoadTaggedPointerField( @@ -740,20 +741,15 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) { rbx, FieldOperand(rdx, JSGeneratorObject::kParametersAndRegistersOffset)); { - { - Label done_loop, loop; - __ movq(r9, rcx); - - __ bind(&loop); - __ decq(r9); - __ j(less, &done_loop, Label::kNear); - __ PushTaggedAnyField( - FieldOperand(rbx, r9, times_tagged_size, FixedArray::kHeaderSize), - decompr_scratch1); - __ jmp(&loop); - - __ bind(&done_loop); - } + Label done_loop, loop; + __ bind(&loop); + __ decq(rcx); + __ j(less, &done_loop, Label::kNear); + __ PushTaggedAnyField( + FieldOperand(rbx, rcx, times_tagged_size, FixedArray::kHeaderSize), + decompr_scratch1); + __ jmp(&loop); + __ bind(&done_loop); // Push the receiver. __ PushTaggedPointerField( @@ -841,7 +837,8 @@ static void ReplaceClosureCodeWithOptimizedCode(MacroAssembler* masm, optimized_code); __ movq(scratch1, optimized_code); // Write barrier clobbers scratch1 below. __ RecordWriteField(closure, JSFunction::kCodeOffset, scratch1, scratch2, - kDontSaveFPRegs, OMIT_REMEMBERED_SET, OMIT_SMI_CHECK); + SaveFPRegsMode::kIgnore, RememberedSetAction::kOmit, + SmiCheck::kOmit); } static void LeaveInterpreterFrame(MacroAssembler* masm, Register scratch1, @@ -1084,7 +1081,7 @@ static void MaybeOptimizeCodeOrTailCallOptimizedCodeSlot( __ LoadAnyTaggedField( optimized_code_entry, FieldOperand(feedback_vector, FeedbackVector::kMaybeOptimizedCodeOffset)); - TailCallOptimizedCodeSlot(masm, optimized_code_entry, r11, r15, jump_mode); + TailCallOptimizedCodeSlot(masm, optimized_code_entry, r8, r15, jump_mode); } // Generate code for entering a JS function with the interpreter. @@ -1236,10 +1233,11 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) { __ Move( kInterpreterDispatchTableRegister, ExternalReference::interpreter_dispatch_table_address(masm->isolate())); - __ movzxbq(r11, Operand(kInterpreterBytecodeArrayRegister, - kInterpreterBytecodeOffsetRegister, times_1, 0)); + __ movzxbq(kScratchRegister, + Operand(kInterpreterBytecodeArrayRegister, + kInterpreterBytecodeOffsetRegister, times_1, 0)); __ movq(kJavaScriptCallCodeStartRegister, - Operand(kInterpreterDispatchTableRegister, r11, + Operand(kInterpreterDispatchTableRegister, kScratchRegister, times_system_pointer_size, 0)); __ call(kJavaScriptCallCodeStartRegister); masm->isolate()->heap()->SetInterpreterEntryReturnPCOffset(masm->pc_offset()); @@ -1259,7 +1257,7 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) { kInterpreterBytecodeOffsetRegister, times_1, 0)); AdvanceBytecodeOffsetOrReturn(masm, kInterpreterBytecodeArrayRegister, kInterpreterBytecodeOffsetRegister, rbx, rcx, - r11, &do_return); + r8, &do_return); __ jmp(&do_dispatch); __ bind(&do_return); @@ -1558,15 +1556,16 @@ static void Generate_InterpreterEnterBytecode(MacroAssembler* masm) { } // Dispatch to the target bytecode. - __ movzxbq(r11, Operand(kInterpreterBytecodeArrayRegister, - kInterpreterBytecodeOffsetRegister, times_1, 0)); + __ movzxbq(kScratchRegister, + Operand(kInterpreterBytecodeArrayRegister, + kInterpreterBytecodeOffsetRegister, times_1, 0)); __ movq(kJavaScriptCallCodeStartRegister, - Operand(kInterpreterDispatchTableRegister, r11, + Operand(kInterpreterDispatchTableRegister, kScratchRegister, times_system_pointer_size, 0)); __ jmp(kJavaScriptCallCodeStartRegister); } -void Builtins::Generate_InterpreterEnterBytecodeAdvance(MacroAssembler* masm) { +void Builtins::Generate_InterpreterEnterAtNextBytecode(MacroAssembler* masm) { // Get bytecode array and bytecode offset from the stack frame. __ movq(kInterpreterBytecodeArrayRegister, Operand(rbp, InterpreterFrameConstants::kBytecodeArrayFromFp)); @@ -1587,7 +1586,7 @@ void Builtins::Generate_InterpreterEnterBytecodeAdvance(MacroAssembler* masm) { Label if_return; AdvanceBytecodeOffsetOrReturn(masm, kInterpreterBytecodeArrayRegister, kInterpreterBytecodeOffsetRegister, rbx, rcx, - r11, &if_return); + r8, &if_return); __ bind(&enter_bytecode); // Convert new bytecode offset to a Smi and save in the stackframe. @@ -1611,29 +1610,38 @@ void Builtins::Generate_InterpreterEnterBytecodeAdvance(MacroAssembler* masm) { __ Abort(AbortReason::kInvalidBytecodeAdvance); } -void Builtins::Generate_InterpreterEnterBytecodeDispatch(MacroAssembler* masm) { +void Builtins::Generate_InterpreterEnterAtBytecode(MacroAssembler* masm) { Generate_InterpreterEnterBytecode(masm); } // static void Builtins::Generate_BaselineOutOfLinePrologue(MacroAssembler* masm) { + Register feedback_vector = r8; + Register optimization_state = rcx; + Register return_address = r15; + +#ifdef DEBUG + for (auto reg : BaselineOutOfLinePrologueDescriptor::registers()) { + DCHECK( + !AreAliased(feedback_vector, optimization_state, return_address, reg)); + } +#endif + auto descriptor = Builtins::CallInterfaceDescriptorFor( Builtins::kBaselineOutOfLinePrologue); Register closure = descriptor.GetRegisterParameter( BaselineOutOfLinePrologueDescriptor::kClosure); // Load the feedback vector from the closure. - Register feedback_vector = r11; __ LoadTaggedPointerField( feedback_vector, FieldOperand(closure, JSFunction::kFeedbackCellOffset)); __ LoadTaggedPointerField(feedback_vector, FieldOperand(feedback_vector, Cell::kValueOffset)); - if (__ emit_debug_code()) { + if (FLAG_debug_code) { __ CmpObjectType(feedback_vector, FEEDBACK_VECTOR_TYPE, kScratchRegister); __ Assert(equal, AbortReason::kExpectedFeedbackVector); } // Check for an optimization marker. - Register optimization_state = rcx; Label has_optimized_code_or_marker; LoadOptimizationStateAndJumpIfNeedsProcessing( masm, optimization_state, feedback_vector, &has_optimized_code_or_marker); @@ -1642,8 +1650,6 @@ void Builtins::Generate_BaselineOutOfLinePrologue(MacroAssembler* masm) { __ incl( FieldOperand(feedback_vector, FeedbackVector::kInvocationCountOffset)); - Register return_address = r15; - __ RecordComment("[ Frame Setup"); // Save the return address, so that we can push it to the end of the newly // set-up frame once we're done setting it up. @@ -1723,8 +1729,8 @@ void Builtins::Generate_BaselineOutOfLinePrologue(MacroAssembler* masm) { // return since we may do a runtime call along the way that requires the // stack to only contain valid frames. __ Drop(1); - MaybeOptimizeCodeOrTailCallOptimizedCodeSlot(masm, rcx, feedback_vector, - JumpMode::kPushAndReturn); + MaybeOptimizeCodeOrTailCallOptimizedCodeSlot( + masm, optimization_state, feedback_vector, JumpMode::kPushAndReturn); __ Trap(); __ RecordComment("]"); } @@ -1840,7 +1846,7 @@ void Builtins::Generate_NotifyDeoptimized(MacroAssembler* masm) { void Builtins::Generate_TailCallOptimizedCodeSlot(MacroAssembler* masm) { Register optimized_code_entry = kJavaScriptCallCodeStartRegister; - TailCallOptimizedCodeSlot(masm, optimized_code_entry, r11, r15, + TailCallOptimizedCodeSlot(masm, optimized_code_entry, r8, r15, JumpMode::kJump); } @@ -1905,7 +1911,7 @@ void Builtins::Generate_FunctionPrototypeApply(MacroAssembler* masm) { // Function.prototype.apply() yet, we use a normal Call builtin here. __ bind(&no_arguments); { - __ Set(rax, 0); + __ Move(rax, 0); __ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET); } } @@ -2062,6 +2068,7 @@ void Builtins::Generate_ReflectConstruct(MacroAssembler* masm) { } // static +// TODO(v8:11615): Observe Code::kMaxArguments in CallOrConstructVarargs void Builtins::Generate_CallOrConstructVarargs(MacroAssembler* masm, Handle<Code> code) { // ----------- S t a t e ------------- @@ -2072,14 +2079,13 @@ void Builtins::Generate_CallOrConstructVarargs(MacroAssembler* masm, // -- rdx : new.target (for [[Construct]]) // -- rsp[0] : return address // ----------------------------------- - Register scratch = r11; - if (masm->emit_debug_code()) { + if (FLAG_debug_code) { // Allow rbx to be a FixedArray, or a FixedDoubleArray if rcx == 0. Label ok, fail; __ AssertNotSmi(rbx); Register map = r9; - __ LoadTaggedPointerField(map, FieldOperand(rbx, HeapObject::kMapOffset)); + __ LoadMap(map, rbx); __ CmpInstanceType(map, FIXED_ARRAY_TYPE); __ j(equal, &ok); __ CmpInstanceType(map, FIXED_DOUBLE_ARRAY_TYPE); @@ -2101,13 +2107,13 @@ void Builtins::Generate_CallOrConstructVarargs(MacroAssembler* masm, // including the receiver and the return address. { Label copy, check; - Register src = r8, dest = rsp, num = r9, current = r11; + Register src = r8, dest = rsp, num = r9, current = r12; __ movq(src, rsp); __ leaq(kScratchRegister, Operand(rcx, times_system_pointer_size, 0)); __ AllocateStackSpace(kScratchRegister); __ leaq(num, Operand(rax, 2)); // Number of words to copy. // +2 for receiver and return address. - __ Set(current, 0); + __ Move(current, 0); __ jmp(&check); __ bind(©); __ movq(kScratchRegister, @@ -2123,9 +2129,9 @@ void Builtins::Generate_CallOrConstructVarargs(MacroAssembler* masm, // Copy the additional arguments onto the stack. { - Register value = scratch; + Register value = r12; Register src = rbx, dest = r8, num = rcx, current = r9; - __ Set(current, 0); + __ Move(current, 0); Label done, push, loop; __ bind(&loop); __ cmpl(current, num); @@ -2166,7 +2172,7 @@ void Builtins::Generate_CallOrConstructForwardVarargs(MacroAssembler* masm, if (mode == CallOrConstructMode::kConstruct) { Label new_target_constructor, new_target_not_constructor; __ JumpIfSmi(rdx, &new_target_not_constructor, Label::kNear); - __ LoadTaggedPointerField(rbx, FieldOperand(rdx, HeapObject::kMapOffset)); + __ LoadMap(rbx, rdx); __ testb(FieldOperand(rbx, Map::kBitFieldOffset), Immediate(Map::Bits1::IsConstructorBit::kMask)); __ j(not_zero, &new_target_constructor, Label::kNear); @@ -2203,13 +2209,13 @@ void Builtins::Generate_CallOrConstructForwardVarargs(MacroAssembler* masm, // including the receiver and the return address. { Label copy, check; - Register src = r9, dest = rsp, num = r12, current = r11; + Register src = r9, dest = rsp, num = r12, current = r15; __ movq(src, rsp); __ leaq(kScratchRegister, Operand(r8, times_system_pointer_size, 0)); __ AllocateStackSpace(kScratchRegister); __ leaq(num, Operand(rax, 2)); // Number of words to copy. // +2 for receiver and return address. - __ Set(current, 0); + __ Move(current, 0); __ jmp(&check); __ bind(©); __ movq(kScratchRegister, @@ -2359,7 +2365,7 @@ void Builtins::Generate_CallFunction(MacroAssembler* masm, __ movzxwq( rbx, FieldOperand(rdx, SharedFunctionInfo::kFormalParameterCountOffset)); - __ InvokeFunctionCode(rdi, no_reg, rbx, rax, JUMP_FUNCTION); + __ InvokeFunctionCode(rdi, no_reg, rbx, rax, InvokeType::kJump); // The function is a "classConstructor", need to raise an exception. __ bind(&class_constructor); @@ -2592,7 +2598,7 @@ void Builtins::Generate_Construct(MacroAssembler* masm) { __ JumpIfSmi(rdi, &non_constructor); // Check if target has a [[Construct]] internal method. - __ LoadTaggedPointerField(rcx, FieldOperand(rdi, HeapObject::kMapOffset)); + __ LoadMap(rcx, rdi); __ testb(FieldOperand(rcx, Map::kBitFieldOffset), Immediate(Map::Bits1::IsConstructorBit::kMask)); __ j(zero, &non_constructor); @@ -2682,15 +2688,17 @@ void Builtins::Generate_InterpreterOnStackReplacement(MacroAssembler* masm) { } void Builtins::Generate_BaselineOnStackReplacement(MacroAssembler* masm) { + __ movq(kContextRegister, + MemOperand(rbp, BaselineFrameConstants::kContextOffset)); return OnStackReplacement(masm, false); } #if V8_ENABLE_WEBASSEMBLY void Builtins::Generate_WasmCompileLazy(MacroAssembler* masm) { // The function index was pushed to the stack by the caller as int32. - __ Pop(r11); + __ Pop(r15); // Convert to Smi for the runtime call. - __ SmiTag(r11); + __ SmiTag(r15); { HardAbortScope hard_abort(masm); // Avoid calls to Abort. FrameScope scope(masm, StackFrame::WASM_COMPILE_LAZY); @@ -2717,13 +2725,13 @@ void Builtins::Generate_WasmCompileLazy(MacroAssembler* masm) { // Push the Wasm instance as an explicit argument to WasmCompileLazy. __ Push(kWasmInstanceRegister); // Push the function index as second argument. - __ Push(r11); + __ Push(r15); // Initialize the JavaScript context with 0. CEntry will use it to // set the current context on the isolate. __ Move(kContextRegister, Smi::zero()); __ CallRuntime(Runtime::kWasmCompileLazy, 2); // The entrypoint address is the return value. - __ movq(r11, kReturnRegister0); + __ movq(r15, kReturnRegister0); // Restore registers. for (DoubleRegister reg : base::Reversed(wasm::kFpParamRegisters)) { @@ -2737,7 +2745,7 @@ void Builtins::Generate_WasmCompileLazy(MacroAssembler* masm) { } } // Finally, jump to the entrypoint. - __ jmp(r11); + __ jmp(r15); } void Builtins::Generate_WasmDebugBreak(MacroAssembler* masm) { @@ -2915,7 +2923,7 @@ void Builtins::Generate_GenericJSToWasmWrapper(MacroAssembler* masm) { __ LoadExternalPointerField( signature, FieldOperand(foreign_signature, Foreign::kForeignAddressOffset), - kForeignForeignAddressTag); + kForeignForeignAddressTag, kScratchRegister); foreign_signature = no_reg; Register return_count = r8; __ movq(return_count, @@ -3243,28 +3251,17 @@ void Builtins::Generate_GenericJSToWasmWrapper(MacroAssembler* masm) { thread_in_wasm_flag_addr, MemOperand(kRootRegister, Isolate::thread_in_wasm_flag_address_offset())); __ movl(MemOperand(thread_in_wasm_flag_addr, 0), Immediate(1)); - - Register jump_table_start = thread_in_wasm_flag_addr; - __ movq(jump_table_start, - MemOperand(wasm_instance, - wasm::ObjectAccess::ToTagged( - WasmInstanceObject::kJumpTableStartOffset))); thread_in_wasm_flag_addr = no_reg; - Register jump_table_offset = function_data; - __ LoadAnyTaggedField( - jump_table_offset, - MemOperand( - function_data, - WasmExportedFunctionData::kJumpTableOffsetOffset - kHeapObjectTag)); - - // Change from smi to integer. - __ SmiUntag(jump_table_offset); - - Register function_entry = jump_table_offset; - __ addq(function_entry, jump_table_start); - jump_table_offset = no_reg; - jump_table_start = no_reg; + Register function_entry = function_data; + Register scratch = r12; + __ LoadExternalPointerField( + function_entry, + FieldOperand(function_data, + WasmExportedFunctionData::kForeignAddressOffset), + kForeignForeignAddressTag, scratch); + function_data = no_reg; + scratch = no_reg; // We set the indicating value for the GC to the proper one for Wasm call. constexpr int kWasmCallGCScanSlotCount = 0; @@ -3349,6 +3346,9 @@ void Builtins::Generate_GenericJSToWasmWrapper(MacroAssembler* masm) { // Param conversion builtins. // ------------------------------------------- __ bind(&convert_param); + // Restore function_data register (which was clobbered by the code above, + // but was valid when jumping here earlier). + function_data = rdi; // The order of pushes is important. We want the heap objects, that should be // scanned by GC, to be on the top of the stack. // We have to set the indicating value for the GC to the number of values on @@ -3527,6 +3527,13 @@ void Builtins::Generate_GenericJSToWasmWrapper(MacroAssembler* masm) { __ jmp(&compile_wrapper_done); } +void Builtins::Generate_WasmOnStackReplace(MacroAssembler* masm) { + MemOperand OSRTargetSlot(rbp, -wasm::kOSRTargetOffset); + __ movq(kScratchRegister, OSRTargetSlot); + __ movq(OSRTargetSlot, Immediate(0)); + __ jmp(kScratchRegister); +} + #endif // V8_ENABLE_WEBASSEMBLY void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, @@ -3538,7 +3545,7 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, // rsp: stack pointer (restored after C call) // rsi: current context (restored) // - // If argv_mode == kArgvInRegister: + // If argv_mode == ArgvMode::kRegister: // r15: pointer to the first argument #ifdef V8_TARGET_OS_WIN @@ -3569,15 +3576,15 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, int arg_stack_space = kArgExtraStackSpace + (result_size <= kMaxRegisterResultSize ? 0 : result_size); - if (argv_mode == kArgvInRegister) { - DCHECK(save_doubles == kDontSaveFPRegs); + if (argv_mode == ArgvMode::kRegister) { + DCHECK(save_doubles == SaveFPRegsMode::kIgnore); DCHECK(!builtin_exit_frame); __ EnterApiExitFrame(arg_stack_space); // Move argc into r12 (argv is already in r15). __ movq(r12, rax); } else { __ EnterExitFrame( - arg_stack_space, save_doubles == kSaveFPRegs, + arg_stack_space, save_doubles == SaveFPRegsMode::kSave, builtin_exit_frame ? StackFrame::BUILTIN_EXIT : StackFrame::EXIT); } @@ -3641,7 +3648,8 @@ void Builtins::Generate_CEntry(MacroAssembler* masm, int result_size, } // Exit the JavaScript to C++ exit frame. - __ LeaveExitFrame(save_doubles == kSaveFPRegs, argv_mode == kArgvOnStack); + __ LeaveExitFrame(save_doubles == SaveFPRegsMode::kSave, + argv_mode == ArgvMode::kStack); __ ret(0); // Handling of exception. @@ -3866,9 +3874,7 @@ void CallApiFunctionAndReturn(MacroAssembler* masm, Register function_address, Register map = rcx; __ JumpIfSmi(return_value, &ok, Label::kNear); - __ LoadTaggedPointerField(map, - FieldOperand(return_value, HeapObject::kMapOffset)); - + __ LoadMap(map, return_value); __ CmpInstanceType(map, LAST_NAME_TYPE); __ j(below_equal, &ok, Label::kNear); @@ -4053,7 +4059,7 @@ void Builtins::Generate_CallApiGetter(MacroAssembler* masm) { Register holder = ApiGetterDescriptor::HolderRegister(); Register callback = ApiGetterDescriptor::CallbackRegister(); Register scratch = rax; - Register decompr_scratch1 = COMPRESS_POINTERS_BOOL ? r11 : no_reg; + Register decompr_scratch1 = COMPRESS_POINTERS_BOOL ? r15 : no_reg; DCHECK(!AreAliased(receiver, holder, callback, scratch, decompr_scratch1)); @@ -4116,7 +4122,7 @@ void Builtins::Generate_CallApiGetter(MacroAssembler* masm) { __ LoadExternalPointerField( api_function_address, FieldOperand(scratch, Foreign::kForeignAddressOffset), - kForeignForeignAddressTag); + kForeignForeignAddressTag, kScratchRegister); // +3 is to skip prolog, return address and name handle. Operand return_value_operand( @@ -4172,7 +4178,7 @@ void Generate_DeoptimizationEntry(MacroAssembler* masm, // We use this to keep the value of the fifth argument temporarily. // Unfortunately we can't store it directly in r8 (used for passing // this on linux), since it is another parameter passing register on windows. - Register arg5 = r11; + Register arg5 = r15; __ movq(arg_reg_3, Immediate(Deoptimizer::kFixedExitSizeMarker)); // Get the address of the location in the code object @@ -4192,7 +4198,7 @@ void Generate_DeoptimizationEntry(MacroAssembler* masm, __ movq(rax, Operand(rbp, StandardFrameConstants::kFunctionOffset)); __ bind(&context_check); __ movq(arg_reg_1, rax); - __ Set(arg_reg_2, static_cast<int>(deopt_kind)); + __ Move(arg_reg_2, static_cast<int>(deopt_kind)); // Args 3 and 4 are already in the right registers. // On windows put the arguments on the stack (PrepareCallCFunction diff --git a/deps/v8/src/codegen/arm/assembler-arm-inl.h b/deps/v8/src/codegen/arm/assembler-arm-inl.h index 7035fa2492..f72e27703e 100644 --- a/deps/v8/src/codegen/arm/assembler-arm-inl.h +++ b/deps/v8/src/codegen/arm/assembler-arm-inl.h @@ -206,7 +206,7 @@ Operand::Operand(Smi value) : rmode_(RelocInfo::NONE) { Operand::Operand(Register rm) : rm_(rm), shift_op_(LSL), shift_imm_(0) {} void Assembler::CheckBuffer() { - if (buffer_space() <= kGap) { + if (V8_UNLIKELY(buffer_space() <= kGap)) { GrowBuffer(); } MaybeCheckConstPool(); diff --git a/deps/v8/src/codegen/arm/assembler-arm.cc b/deps/v8/src/codegen/arm/assembler-arm.cc index 17a20a6f97..09c57928ff 100644 --- a/deps/v8/src/codegen/arm/assembler-arm.cc +++ b/deps/v8/src/codegen/arm/assembler-arm.cc @@ -534,9 +534,8 @@ Assembler::Assembler(const AssemblerOptions& options, : AssemblerBase(options, std::move(buffer)), pending_32_bit_constants_(), scratch_register_list_(ip.bit()) { - pending_32_bit_constants_.reserve(kMinNumPendingConstants); reloc_info_writer.Reposition(buffer_start_ + buffer_->size(), pc_); - next_buffer_check_ = 0; + constant_pool_deadline_ = kMaxInt; const_pool_blocked_nesting_ = 0; no_const_pool_before_ = 0; first_const_pool_32_use_ = -1; @@ -556,7 +555,10 @@ Assembler::Assembler(const AssemblerOptions& options, } } -Assembler::~Assembler() { DCHECK_EQ(const_pool_blocked_nesting_, 0); } +Assembler::~Assembler() { + DCHECK_EQ(const_pool_blocked_nesting_, 0); + DCHECK_EQ(first_const_pool_32_use_, -1); +} void Assembler::GetCode(Isolate* isolate, CodeDesc* desc, SafepointTableBuilder* safepoint_table_builder, @@ -841,7 +843,7 @@ void Assembler::target_at_put(int pos, int target_pos) { // orr dst, dst, #target8_2 << 16 uint32_t target24 = target_pos + (Code::kHeaderSize - kHeapObjectTag); - DCHECK(is_uint24(target24)); + CHECK(is_uint24(target24)); if (is_uint8(target24)) { // If the target fits in a byte then only patch with a mov // instruction. @@ -897,7 +899,7 @@ void Assembler::target_at_put(int pos, int target_pos) { instr &= ~kImm24Mask; } int imm24 = imm26 >> 2; - DCHECK(is_int24(imm24)); + CHECK(is_int24(imm24)); instr_at_put(pos, instr | (imm24 & kImm24Mask)); } @@ -1030,10 +1032,53 @@ namespace { bool FitsShifter(uint32_t imm32, uint32_t* rotate_imm, uint32_t* immed_8, Instr* instr) { // imm32 must be unsigned. - for (int rot = 0; rot < 16; rot++) { - uint32_t imm8 = base::bits::RotateLeft32(imm32, 2 * rot); - if ((imm8 <= 0xFF)) { - *rotate_imm = rot; + { + // 32-bit immediates can be encoded as: + // (8-bit value, 2*N bit left rotation) + // e.g. 0xab00 can be encoded as 0xab shifted left by 8 == 2*4, i.e. + // (0xab, 4) + // + // Check three categories which cover all possible shifter fits: + // 1. 0x000000FF: The value is already 8-bit (no shifting necessary), + // 2. 0x000FF000: The 8-bit value is somewhere in the middle of the 32-bit + // value, and + // 3. 0xF000000F: The 8-bit value is split over the beginning and end of + // the 32-bit value. + + // For 0x000000FF. + if (imm32 <= 0xFF) { + *rotate_imm = 0; + *immed_8 = imm32; + return true; + } + // For 0x000FF000, count trailing zeros and shift down to 0x000000FF. Note + // that we have to round the trailing zeros down to the nearest multiple of + // two, since we can only encode shifts of 2*N. Note also that we know that + // imm32 isn't zero, since we already checked if it's less than 0xFF. + int half_trailing_zeros = base::bits::CountTrailingZerosNonZero(imm32) / 2; + uint32_t imm8 = imm32 >> (half_trailing_zeros * 2); + if (imm8 <= 0xFF) { + DCHECK_GT(half_trailing_zeros, 0); + // Rotating right by trailing_zeros is equivalent to rotating left by + // 32 - trailing_zeros. We return rotate_right / 2, so calculate + // (32 - trailing_zeros)/2 == 16 - trailing_zeros/2. + *rotate_imm = (16 - half_trailing_zeros); + *immed_8 = imm8; + return true; + } + // For 0xF000000F, rotate by 16 to get 0x000FF000 and continue as if it + // were that case. + uint32_t imm32_rot16 = base::bits::RotateLeft32(imm32, 16); + half_trailing_zeros = + base::bits::CountTrailingZerosNonZero(imm32_rot16) / 2; + imm8 = imm32_rot16 >> (half_trailing_zeros * 2); + if (imm8 <= 0xFF) { + // We've rotated left by 2*8, so we can't have more than that many + // trailing zeroes. + DCHECK_LT(half_trailing_zeros, 8); + // We've already rotated by 2*8, before calculating trailing_zeros/2, + // so we need (32 - (16 + trailing_zeros))/2 == 8 - trailing_zeros/2. + *rotate_imm = 8 - half_trailing_zeros; *immed_8 = imm8; return true; } @@ -2258,7 +2303,7 @@ void Assembler::bkpt(uint32_t imm16) { } void Assembler::svc(uint32_t imm24, Condition cond) { - DCHECK(is_uint24(imm24)); + CHECK(is_uint24(imm24)); emit(cond | 15 * B24 | imm24); } @@ -5204,8 +5249,13 @@ void Assembler::ConstantPoolAddEntry(int position, RelocInfo::Mode rmode, (rmode == RelocInfo::CODE_TARGET && value != 0) || (RelocInfo::IsEmbeddedObjectMode(rmode) && value != 0); DCHECK_LT(pending_32_bit_constants_.size(), kMaxNumPending32Constants); - if (pending_32_bit_constants_.empty()) { + if (first_const_pool_32_use_ < 0) { + DCHECK(pending_32_bit_constants_.empty()); + DCHECK_EQ(constant_pool_deadline_, kMaxInt); first_const_pool_32_use_ = position; + constant_pool_deadline_ = position + kCheckPoolDeadline; + } else { + DCHECK(!pending_32_bit_constants_.empty()); } ConstantPoolEntry entry(position, value, sharing_ok, rmode); @@ -5224,7 +5274,7 @@ void Assembler::ConstantPoolAddEntry(int position, RelocInfo::Mode rmode, } } - pending_32_bit_constants_.push_back(entry); + pending_32_bit_constants_.emplace_back(entry); // Make sure the constant pool is not emitted in place of the next // instruction for which we just recorded relocation info. @@ -5239,17 +5289,17 @@ void Assembler::ConstantPoolAddEntry(int position, RelocInfo::Mode rmode, void Assembler::BlockConstPoolFor(int instructions) { int pc_limit = pc_offset() + instructions * kInstrSize; if (no_const_pool_before_ < pc_limit) { - // Max pool start (if we need a jump and an alignment). -#ifdef DEBUG - int start = pc_limit + kInstrSize + 2 * kPointerSize; - DCHECK(pending_32_bit_constants_.empty() || - (start < first_const_pool_32_use_ + kMaxDistToIntPool)); -#endif no_const_pool_before_ = pc_limit; } - if (next_buffer_check_ < no_const_pool_before_) { - next_buffer_check_ = no_const_pool_before_; + // If we're due a const pool check before the block finishes, move it to just + // after the block. + if (constant_pool_deadline_ < no_const_pool_before_) { + // Make sure that the new deadline isn't too late (including a jump and the + // constant pool marker). + DCHECK_LE(no_const_pool_before_, + first_const_pool_32_use_ + kMaxDistToIntPool); + constant_pool_deadline_ = no_const_pool_before_; } } @@ -5265,49 +5315,44 @@ void Assembler::CheckConstPool(bool force_emit, bool require_jump) { // There is nothing to do if there are no pending constant pool entries. if (pending_32_bit_constants_.empty()) { - // Calculate the offset of the next check. - next_buffer_check_ = pc_offset() + kCheckPoolInterval; + // We should only fall into this case if we're either trying to forcing + // emission or opportunistically checking after a jump. + DCHECK(force_emit || !require_jump); return; } - // Check that the code buffer is large enough before emitting the constant - // pool (include the jump over the pool and the constant pool marker and - // the gap to the relocation information). - int jump_instr = require_jump ? kInstrSize : 0; - int size_up_to_marker = jump_instr + kInstrSize; - int estimated_size_after_marker = - pending_32_bit_constants_.size() * kPointerSize; - int estimated_size = size_up_to_marker + estimated_size_after_marker; - // We emit a constant pool when: // * requested to do so by parameter force_emit (e.g. after each function). // * the distance from the first instruction accessing the constant pool to - // any of the constant pool entries will exceed its limit the next - // time the pool is checked. This is overly restrictive, but we don't emit - // constant pool entries in-order so it's conservatively correct. + // the first constant pool entry will exceed its limit the next time the + // pool is checked. // * the instruction doesn't require a jump after itself to jump over the // constant pool, and we're getting close to running out of range. if (!force_emit) { - DCHECK(!pending_32_bit_constants_.empty()); - bool need_emit = false; - int dist32 = pc_offset() + estimated_size - first_const_pool_32_use_; - if ((dist32 >= kMaxDistToIntPool - kCheckPoolInterval) || - (!require_jump && (dist32 >= kMaxDistToIntPool / 2))) { - need_emit = true; + DCHECK_NE(first_const_pool_32_use_, -1); + int dist32 = pc_offset() - first_const_pool_32_use_; + if (require_jump) { + // We should only be on this path if we've exceeded our deadline. + DCHECK_GE(dist32, kCheckPoolDeadline); + } else if (dist32 < kCheckPoolDeadline / 2) { + return; } - if (!need_emit) return; } - // Deduplicate constants. - int size_after_marker = estimated_size_after_marker; + int size_after_marker = pending_32_bit_constants_.size() * kPointerSize; + // Deduplicate constants. for (size_t i = 0; i < pending_32_bit_constants_.size(); i++) { ConstantPoolEntry& entry = pending_32_bit_constants_[i]; if (entry.is_merged()) size_after_marker -= kPointerSize; } + // Check that the code buffer is large enough before emitting the constant + // pool (include the jump over the pool and the constant pool marker and + // the gap to the relocation information). + int jump_instr = require_jump ? kInstrSize : 0; + int size_up_to_marker = jump_instr + kInstrSize; int size = size_up_to_marker + size_after_marker; - int needed_space = size + kGap; while (buffer_space() <= needed_space) GrowBuffer(); @@ -5331,6 +5376,14 @@ void Assembler::CheckConstPool(bool force_emit, bool require_jump) { emit(kConstantPoolMarker | EncodeConstantPoolLength(size_after_marker / kPointerSize)); + // The first entry in the constant pool should also be the first + CHECK_EQ(first_const_pool_32_use_, pending_32_bit_constants_[0].position()); + CHECK(!pending_32_bit_constants_[0].is_merged()); + + // Make sure we're not emitting the constant too late. + CHECK_LE(pc_offset(), + first_const_pool_32_use_ + kMaxDistToPcRelativeConstant); + // Emit 32-bit constant pool entries. for (size_t i = 0; i < pending_32_bit_constants_.size(); i++) { ConstantPoolEntry& entry = pending_32_bit_constants_[i]; @@ -5354,6 +5407,7 @@ void Assembler::CheckConstPool(bool force_emit, bool require_jump) { ConstantPoolEntry& merged = pending_32_bit_constants_[entry.merged_index()]; DCHECK(entry.value() == merged.value()); + DCHECK_LT(merged.position(), entry.position()); Instr merged_instr = instr_at(merged.position()); DCHECK(IsLdrPcImmediateOffset(merged_instr)); delta = GetLdrRegisterImmediateOffset(merged_instr); @@ -5379,9 +5433,9 @@ void Assembler::CheckConstPool(bool force_emit, bool require_jump) { } } - // Since a constant pool was just emitted, move the check offset forward by - // the standard interval. - next_buffer_check_ = pc_offset() + kCheckPoolInterval; + // Since a constant pool was just emitted, we don't need another check until + // the next constant pool entry is added. + constant_pool_deadline_ = kMaxInt; } PatchingAssembler::PatchingAssembler(const AssemblerOptions& options, diff --git a/deps/v8/src/codegen/arm/assembler-arm.h b/deps/v8/src/codegen/arm/assembler-arm.h index e0490a6853..04d5eef054 100644 --- a/deps/v8/src/codegen/arm/assembler-arm.h +++ b/deps/v8/src/codegen/arm/assembler-arm.h @@ -45,6 +45,7 @@ #include <memory> #include <vector> +#include "src/base/small-vector.h" #include "src/codegen/arm/constants-arm.h" #include "src/codegen/arm/register-arm.h" #include "src/codegen/assembler.h" @@ -310,7 +311,10 @@ class V8_EXPORT_PRIVATE Assembler : public AssemblerBase { ~Assembler() override; - void AbortedCodeGeneration() override { pending_32_bit_constants_.clear(); } + void AbortedCodeGeneration() override { + pending_32_bit_constants_.clear(); + first_const_pool_32_use_ = -1; + } // GetCode emits any pending (non-emitted) code and fills the descriptor desc. static constexpr int kNoHandlerTable = 0; @@ -1148,13 +1152,24 @@ class V8_EXPORT_PRIVATE Assembler : public AssemblerBase { static int DecodeShiftImm(Instr instr); static Instr PatchShiftImm(Instr instr, int immed); - // Constants in pools are accessed via pc relative addressing, which can - // reach +/-4KB for integer PC-relative loads and +/-1KB for floating-point + // Constants are accessed via pc relative addressing, which can reach −4095 to + // 4095 for integer PC-relative loads, and −1020 to 1020 for floating-point // PC-relative loads, thereby defining a maximum distance between the - // instruction and the accessed constant. - static constexpr int kMaxDistToIntPool = 4 * KB; - // All relocations could be integer, it therefore acts as the limit. - static constexpr int kMinNumPendingConstants = 4; + // instruction and the accessed constant. Additionally, PC-relative loads + // start at a delta from the actual load instruction's PC, so we can add this + // on to the (positive) distance. + static constexpr int kMaxDistToPcRelativeConstant = + 4095 + Instruction::kPcLoadDelta; + // The constant pool needs to be jumped over, and has a marker, so the actual + // distance from the instruction and start of the constant pool has to include + // space for these two instructions. + static constexpr int kMaxDistToIntPool = + kMaxDistToPcRelativeConstant - 2 * kInstrSize; + // Experimentally derived as sufficient for ~95% of compiles. + static constexpr int kTypicalNumPending32Constants = 32; + // The maximum number of pending constants is reached by a sequence of only + // constant loads, which limits it to the number of constant loads that can + // fit between the first constant load and the distance to the constant pool. static constexpr int kMaxNumPending32Constants = kMaxDistToIntPool / kInstrSize; @@ -1165,8 +1180,8 @@ class V8_EXPORT_PRIVATE Assembler : public AssemblerBase { // Check if is time to emit a constant pool. void CheckConstPool(bool force_emit, bool require_jump); - void MaybeCheckConstPool() { - if (pc_offset() >= next_buffer_check_) { + V8_INLINE void MaybeCheckConstPool() { + if (V8_UNLIKELY(pc_offset() >= constant_pool_deadline_)) { CheckConstPool(false, true); } } @@ -1192,9 +1207,8 @@ class V8_EXPORT_PRIVATE Assembler : public AssemblerBase { // number of call to EndBlockConstpool. void StartBlockConstPool() { if (const_pool_blocked_nesting_++ == 0) { - // Prevent constant pool checks happening by setting the next check to - // the biggest possible offset. - next_buffer_check_ = kMaxInt; + // Prevent constant pool checks happening by resetting the deadline. + constant_pool_deadline_ = kMaxInt; } } @@ -1202,19 +1216,14 @@ class V8_EXPORT_PRIVATE Assembler : public AssemblerBase { // StartBlockConstPool to have an effect. void EndBlockConstPool() { if (--const_pool_blocked_nesting_ == 0) { + if (first_const_pool_32_use_ >= 0) { #ifdef DEBUG - // Max pool start (if we need a jump and an alignment). - int start = pc_offset() + kInstrSize + 2 * kPointerSize; - // Check the constant pool hasn't been blocked for too long. - DCHECK(pending_32_bit_constants_.empty() || - (start < first_const_pool_32_use_ + kMaxDistToIntPool)); + // Check the constant pool hasn't been blocked for too long. + DCHECK_LE(pc_offset(), first_const_pool_32_use_ + kMaxDistToIntPool); #endif - // Two cases: - // * no_const_pool_before_ >= next_buffer_check_ and the emission is - // still blocked - // * no_const_pool_before_ < next_buffer_check_ and the next emit will - // trigger a check. - next_buffer_check_ = no_const_pool_before_; + // Reset the constant pool check back to the deadline. + constant_pool_deadline_ = first_const_pool_32_use_ + kCheckPoolDeadline; + } } } @@ -1258,7 +1267,8 @@ class V8_EXPORT_PRIVATE Assembler : public AssemblerBase { // pending relocation entry per instruction. // The buffers of pending constant pool entries. - std::vector<ConstantPoolEntry> pending_32_bit_constants_; + base::SmallVector<ConstantPoolEntry, kTypicalNumPending32Constants> + pending_32_bit_constants_; // Scratch registers available for use by the Assembler. RegList scratch_register_list_; @@ -1268,8 +1278,6 @@ class V8_EXPORT_PRIVATE Assembler : public AssemblerBase { // Avoid overflows for displacements etc. static const int kMaximalBufferSize = 512 * MB; - int next_buffer_check_; // pc offset of next buffer check - // Constant pool generation // Pools are emitted in the instruction stream, preferably after unconditional // jumps or after returns from functions (in dead code locations). @@ -1281,11 +1289,16 @@ class V8_EXPORT_PRIVATE Assembler : public AssemblerBase { // if so, a relocation info entry is associated to the constant pool entry. // Repeated checking whether the constant pool should be emitted is rather - // expensive. By default we only check again once a number of instructions - // has been generated. That also means that the sizing of the buffers is not - // an exact science, and that we rely on some slop to not overrun buffers. - static constexpr int kCheckPoolIntervalInst = 32; - static constexpr int kCheckPoolInterval = kCheckPoolIntervalInst * kInstrSize; + // expensive. Instead, we check once a deadline is hit; the deadline being + // when there is a possibility that MaybeCheckConstPool won't be called before + // kMaxDistToIntPoolWithHeader is exceeded. Since MaybeCheckConstPool is + // called in CheckBuffer, this means that kGap is an upper bound on this + // check. Use 2 * kGap just to give it some slack around BlockConstPoolScopes. + static constexpr int kCheckPoolDeadline = kMaxDistToIntPool - 2 * kGap; + + // pc offset of the upcoming constant pool deadline. Equivalent to + // first_const_pool_32_use_ + kCheckPoolDeadline. + int constant_pool_deadline_; // Emission of the constant pool may be blocked in some code sequences. int const_pool_blocked_nesting_; // Block emission if this is not zero. @@ -1298,7 +1311,7 @@ class V8_EXPORT_PRIVATE Assembler : public AssemblerBase { // The bound position, before this we cannot do instruction elimination. int last_bound_pos_; - inline void CheckBuffer(); + V8_INLINE void CheckBuffer(); void GrowBuffer(); // Instruction generation diff --git a/deps/v8/src/codegen/arm/cpu-arm.cc b/deps/v8/src/codegen/arm/cpu-arm.cc index 47fe4bdb74..88491c5e51 100644 --- a/deps/v8/src/codegen/arm/cpu-arm.cc +++ b/deps/v8/src/codegen/arm/cpu-arm.cc @@ -6,7 +6,7 @@ #ifdef __arm__ #ifdef __QNXNTO__ #include <sys/mman.h> // for cache flushing. -#undef MAP_TYPE // NOLINT +#undef MAP_TYPE #elif V8_OS_FREEBSD #include <machine/sysarch.h> // for cache flushing #include <sys/types.h> diff --git a/deps/v8/src/codegen/arm/interface-descriptors-arm-inl.h b/deps/v8/src/codegen/arm/interface-descriptors-arm-inl.h new file mode 100644 index 0000000000..296f72d157 --- /dev/null +++ b/deps/v8/src/codegen/arm/interface-descriptors-arm-inl.h @@ -0,0 +1,256 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef V8_CODEGEN_ARM_INTERFACE_DESCRIPTORS_ARM_INL_H_ +#define V8_CODEGEN_ARM_INTERFACE_DESCRIPTORS_ARM_INL_H_ + +#if V8_TARGET_ARCH_ARM + +#include "src/codegen/interface-descriptors.h" +#include "src/execution/frames.h" + +namespace v8 { +namespace internal { + +constexpr auto CallInterfaceDescriptor::DefaultRegisterArray() { + auto registers = RegisterArray(r0, r1, r2, r3, r4); + STATIC_ASSERT(registers.size() == kMaxBuiltinRegisterParams); + return registers; +} + +// static +constexpr auto RecordWriteDescriptor::registers() { + return RegisterArray(r0, r1, r2, r3, r4, kReturnRegister0); +} + +// static +constexpr auto DynamicCheckMapsDescriptor::registers() { + return RegisterArray(r0, r1, r2, r3, cp); +} + +// static +constexpr auto EphemeronKeyBarrierDescriptor::registers() { + return RegisterArray(r0, r1, r2, r3, r4, kReturnRegister0); +} + +// static +constexpr Register LoadDescriptor::ReceiverRegister() { return r1; } +// static +constexpr Register LoadDescriptor::NameRegister() { return r2; } +// static +constexpr Register LoadDescriptor::SlotRegister() { return r0; } + +// static +constexpr Register LoadWithVectorDescriptor::VectorRegister() { return r3; } + +// static +constexpr Register +LoadWithReceiverAndVectorDescriptor::LookupStartObjectRegister() { + return r4; +} + +// static +constexpr Register StoreDescriptor::ReceiverRegister() { return r1; } +// static +constexpr Register StoreDescriptor::NameRegister() { return r2; } +// static +constexpr Register StoreDescriptor::ValueRegister() { return r0; } +// static +constexpr Register StoreDescriptor::SlotRegister() { return r4; } + +// static +constexpr Register StoreWithVectorDescriptor::VectorRegister() { return r3; } + +// static +constexpr Register StoreTransitionDescriptor::MapRegister() { return r5; } + +// static +constexpr Register ApiGetterDescriptor::HolderRegister() { return r0; } +// static +constexpr Register ApiGetterDescriptor::CallbackRegister() { return r3; } + +// static +constexpr Register GrowArrayElementsDescriptor::ObjectRegister() { return r0; } +// static +constexpr Register GrowArrayElementsDescriptor::KeyRegister() { return r3; } + +// static +constexpr Register BaselineLeaveFrameDescriptor::ParamsSizeRegister() { + return r3; +} +// static +constexpr Register BaselineLeaveFrameDescriptor::WeightRegister() { return r4; } + +// static +// static +constexpr Register TypeConversionDescriptor::ArgumentRegister() { return r0; } + +// static +constexpr auto TypeofDescriptor::registers() { return RegisterArray(r3); } + +// static +constexpr auto CallTrampolineDescriptor::registers() { + // r0 : number of arguments + // r1 : the target to call + return RegisterArray(r1, r0); +} + +// static +constexpr auto CallVarargsDescriptor::registers() { + // r0 : number of arguments (on the stack, not including receiver) + // r1 : the target to call + // r4 : arguments list length (untagged) + // r2 : arguments list (FixedArray) + return RegisterArray(r1, r0, r4, r2); +} + +// static +constexpr auto CallForwardVarargsDescriptor::registers() { + // r0 : number of arguments + // r2 : start index (to support rest parameters) + // r1 : the target to call + return RegisterArray(r1, r0, r2); +} + +// static +constexpr auto CallFunctionTemplateDescriptor::registers() { + // r1 : function template info + // r2 : number of arguments (on the stack, not including receiver) + return RegisterArray(r1, r2); +} + +// static +constexpr auto CallWithSpreadDescriptor::registers() { + // r0 : number of arguments (on the stack, not including receiver) + // r1 : the target to call + // r2 : the object to spread + return RegisterArray(r1, r0, r2); +} + +// static +constexpr auto CallWithArrayLikeDescriptor::registers() { + // r1 : the target to call + // r2 : the arguments list + return RegisterArray(r1, r2); +} + +// static +constexpr auto ConstructVarargsDescriptor::registers() { + // r0 : number of arguments (on the stack, not including receiver) + // r1 : the target to call + // r3 : the new target + // r4 : arguments list length (untagged) + // r2 : arguments list (FixedArray) + return RegisterArray(r1, r3, r0, r4, r2); +} + +// static +constexpr auto ConstructForwardVarargsDescriptor::registers() { + // r0 : number of arguments + // r3 : the new target + // r2 : start index (to support rest parameters) + // r1 : the target to call + return RegisterArray(r1, r3, r0, r2); +} + +// static +constexpr auto ConstructWithSpreadDescriptor::registers() { + // r0 : number of arguments (on the stack, not including receiver) + // r1 : the target to call + // r3 : the new target + // r2 : the object to spread + return RegisterArray(r1, r3, r0, r2); +} + +// static +constexpr auto ConstructWithArrayLikeDescriptor::registers() { + // r1 : the target to call + // r3 : the new target + // r2 : the arguments list + return RegisterArray(r1, r3, r2); +} + +// static +constexpr auto ConstructStubDescriptor::registers() { + // r0 : number of arguments + // r1 : the target to call + // r3 : the new target + // r2 : allocation site or undefined + return RegisterArray(r1, r3, r0, r2); +} + +// static +constexpr auto AbortDescriptor::registers() { return RegisterArray(r1); } + +// static +constexpr auto CompareDescriptor::registers() { return RegisterArray(r1, r0); } + +// static +constexpr auto Compare_BaselineDescriptor::registers() { + // r1: left operand + // r0: right operand + // r2: feedback slot + return RegisterArray(r1, r0, r2); +} + +// static +constexpr auto BinaryOpDescriptor::registers() { return RegisterArray(r1, r0); } + +// static +constexpr auto BinaryOp_BaselineDescriptor::registers() { + // r1: left operand + // r0: right operand + // r2: feedback slot + return RegisterArray(r1, r0, r2); +} + +// static +constexpr auto ApiCallbackDescriptor::registers() { + return RegisterArray(r1, // kApiFunctionAddress + r2, // kArgc + r3, // kCallData + r0); // kHolder +} + +// static +constexpr auto InterpreterDispatchDescriptor::registers() { + return RegisterArray( + kInterpreterAccumulatorRegister, kInterpreterBytecodeOffsetRegister, + kInterpreterBytecodeArrayRegister, kInterpreterDispatchTableRegister); +} + +// static +constexpr auto InterpreterPushArgsThenCallDescriptor::registers() { + return RegisterArray(r0, // argument count (not including receiver) + r2, // address of first argument + r1); // the target callable to be call +} + +// static +constexpr auto InterpreterPushArgsThenConstructDescriptor::registers() { + return RegisterArray( + r0, // argument count (not including receiver) + r4, // address of the first argument + r1, // constructor to call + r3, // new target + r2); // allocation site feedback if available, undefined otherwise +} + +// static +constexpr auto ResumeGeneratorDescriptor::registers() { + return RegisterArray(r0, // the value to pass to the generator + r1); // the JSGeneratorObject to resume +} + +// static +constexpr auto RunMicrotasksEntryDescriptor::registers() { + return RegisterArray(r0, r1); +} + +} // namespace internal +} // namespace v8 + +#endif // V8_TARGET_ARCH_ARM + +#endif // V8_CODEGEN_ARM_INTERFACE_DESCRIPTORS_ARM_INL_H_ diff --git a/deps/v8/src/codegen/arm/interface-descriptors-arm.cc b/deps/v8/src/codegen/arm/interface-descriptors-arm.cc deleted file mode 100644 index 53992227ab..0000000000 --- a/deps/v8/src/codegen/arm/interface-descriptors-arm.cc +++ /dev/null @@ -1,306 +0,0 @@ -// Copyright 2012 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#if V8_TARGET_ARCH_ARM - -#include "src/codegen/interface-descriptors.h" - -#include "src/execution/frames.h" - -namespace v8 { -namespace internal { - -const Register CallInterfaceDescriptor::ContextRegister() { return cp; } - -void CallInterfaceDescriptor::DefaultInitializePlatformSpecific( - CallInterfaceDescriptorData* data, int register_parameter_count) { - const Register default_stub_registers[] = {r0, r1, r2, r3, r4}; - CHECK_LE(static_cast<size_t>(register_parameter_count), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(register_parameter_count, - default_stub_registers); -} - -void RecordWriteDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - const Register default_stub_registers[] = {r0, r1, r2, r3, r4}; - - data->RestrictAllocatableRegisters(default_stub_registers, - arraysize(default_stub_registers)); - - CHECK_LE(static_cast<size_t>(kParameterCount), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(kParameterCount, default_stub_registers); -} - -void DynamicCheckMapsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register default_stub_registers[] = {r0, r1, r2, r3, cp}; - - data->RestrictAllocatableRegisters(default_stub_registers, - arraysize(default_stub_registers)); - - CHECK_LE(static_cast<size_t>(kParameterCount), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(kParameterCount, default_stub_registers); -} - -void EphemeronKeyBarrierDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - const Register default_stub_registers[] = {r0, r1, r2, r3, r4}; - - data->RestrictAllocatableRegisters(default_stub_registers, - arraysize(default_stub_registers)); - - CHECK_LE(static_cast<size_t>(kParameterCount), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(kParameterCount, default_stub_registers); -} - -const Register LoadDescriptor::ReceiverRegister() { return r1; } -const Register LoadDescriptor::NameRegister() { return r2; } -const Register LoadDescriptor::SlotRegister() { return r0; } - -const Register LoadWithVectorDescriptor::VectorRegister() { return r3; } - -const Register -LoadWithReceiverAndVectorDescriptor::LookupStartObjectRegister() { - return r4; -} - -const Register StoreDescriptor::ReceiverRegister() { return r1; } -const Register StoreDescriptor::NameRegister() { return r2; } -const Register StoreDescriptor::ValueRegister() { return r0; } -const Register StoreDescriptor::SlotRegister() { return r4; } - -const Register StoreWithVectorDescriptor::VectorRegister() { return r3; } - -const Register StoreTransitionDescriptor::SlotRegister() { return r4; } -const Register StoreTransitionDescriptor::VectorRegister() { return r3; } -const Register StoreTransitionDescriptor::MapRegister() { return r5; } - -const Register ApiGetterDescriptor::HolderRegister() { return r0; } -const Register ApiGetterDescriptor::CallbackRegister() { return r3; } - -const Register GrowArrayElementsDescriptor::ObjectRegister() { return r0; } -const Register GrowArrayElementsDescriptor::KeyRegister() { return r3; } - -const Register BaselineLeaveFrameDescriptor::ParamsSizeRegister() { return r3; } -const Register BaselineLeaveFrameDescriptor::WeightRegister() { return r4; } - -// static -const Register TypeConversionDescriptor::ArgumentRegister() { return r0; } - -void TypeofDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {r3}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallTrampolineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r0 : number of arguments - // r1 : the target to call - Register registers[] = {r1, r0}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r0 : number of arguments (on the stack, not including receiver) - // r1 : the target to call - // r4 : arguments list length (untagged) - // r2 : arguments list (FixedArray) - Register registers[] = {r1, r0, r4, r2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallForwardVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r0 : number of arguments - // r2 : start index (to support rest parameters) - // r1 : the target to call - Register registers[] = {r1, r0, r2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallFunctionTemplateDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r1 : function template info - // r2 : number of arguments (on the stack, not including receiver) - Register registers[] = {r1, r2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallWithSpreadDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r0 : number of arguments (on the stack, not including receiver) - // r1 : the target to call - // r2 : the object to spread - Register registers[] = {r1, r0, r2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallWithArrayLikeDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r1 : the target to call - // r2 : the arguments list - Register registers[] = {r1, r2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r0 : number of arguments (on the stack, not including receiver) - // r1 : the target to call - // r3 : the new target - // r4 : arguments list length (untagged) - // r2 : arguments list (FixedArray) - Register registers[] = {r1, r3, r0, r4, r2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructForwardVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r0 : number of arguments - // r3 : the new target - // r2 : start index (to support rest parameters) - // r1 : the target to call - Register registers[] = {r1, r3, r0, r2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructWithSpreadDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r0 : number of arguments (on the stack, not including receiver) - // r1 : the target to call - // r3 : the new target - // r2 : the object to spread - Register registers[] = {r1, r3, r0, r2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructWithArrayLikeDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r1 : the target to call - // r3 : the new target - // r2 : the arguments list - Register registers[] = {r1, r3, r2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructStubDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r0 : number of arguments - // r1 : the target to call - // r3 : the new target - // r2 : allocation site or undefined - Register registers[] = {r1, r3, r0, r2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void AbortDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {r1}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CompareDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {r1, r0}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void Compare_BaselineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r1: left operand - // r0: right operand - // r2: feedback slot - Register registers[] = {r1, r0, r2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void BinaryOpDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {r1, r0}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void BinaryOp_BaselineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r1: left operand - // r0: right operand - // r2: feedback slot - Register registers[] = {r1, r0, r2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ApiCallbackDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - r1, // kApiFunctionAddress - r2, // kArgc - r3, // kCallData - r0, // kHolder - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void InterpreterDispatchDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - kInterpreterAccumulatorRegister, kInterpreterBytecodeOffsetRegister, - kInterpreterBytecodeArrayRegister, kInterpreterDispatchTableRegister}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void InterpreterPushArgsThenCallDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - r0, // argument count (not including receiver) - r2, // address of first argument - r1 // the target callable to be call - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void InterpreterPushArgsThenConstructDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - r0, // argument count (not including receiver) - r4, // address of the first argument - r1, // constructor to call - r3, // new target - r2, // allocation site feedback if available, undefined otherwise - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ResumeGeneratorDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - r0, // the value to pass to the generator - r1 // the JSGeneratorObject to resume - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void FrameDropperTrampolineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - r1, // loaded new FP - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void RunMicrotasksEntryDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {r0, r1}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -} // namespace internal -} // namespace v8 - -#endif // V8_TARGET_ARCH_ARM diff --git a/deps/v8/src/codegen/arm/macro-assembler-arm.cc b/deps/v8/src/codegen/arm/macro-assembler-arm.cc index f83eee4a91..d4e12f3092 100644 --- a/deps/v8/src/codegen/arm/macro-assembler-arm.cc +++ b/deps/v8/src/codegen/arm/macro-assembler-arm.cc @@ -13,6 +13,7 @@ #include "src/codegen/callable.h" #include "src/codegen/code-factory.h" #include "src/codegen/external-reference-table.h" +#include "src/codegen/interface-descriptors-inl.h" #include "src/codegen/macro-assembler.h" #include "src/codegen/register-configuration.h" #include "src/debug/debug.h" @@ -59,7 +60,7 @@ int TurboAssembler::RequiredStackSizeForCallerSaved(SaveFPRegsMode fp_mode, bytes += NumRegs(list) * kPointerSize; - if (fp_mode == kSaveFPRegs) { + if (fp_mode == SaveFPRegsMode::kSave) { bytes += DwVfpRegister::kNumRegisters * DwVfpRegister::kSizeInBytes; } @@ -85,7 +86,7 @@ int TurboAssembler::PushCallerSaved(SaveFPRegsMode fp_mode, Register exclusion1, bytes += NumRegs(list) * kPointerSize; - if (fp_mode == kSaveFPRegs) { + if (fp_mode == SaveFPRegsMode::kSave) { SaveFPRegs(sp, lr); bytes += DwVfpRegister::kNumRegisters * DwVfpRegister::kSizeInBytes; } @@ -96,7 +97,7 @@ int TurboAssembler::PushCallerSaved(SaveFPRegsMode fp_mode, Register exclusion1, int TurboAssembler::PopCallerSaved(SaveFPRegsMode fp_mode, Register exclusion1, Register exclusion2, Register exclusion3) { int bytes = 0; - if (fp_mode == kSaveFPRegs) { + if (fp_mode == SaveFPRegsMode::kSave) { RestoreFPRegs(sp, lr); bytes += DwVfpRegister::kNumRegisters * DwVfpRegister::kSizeInBytes; } @@ -660,7 +661,7 @@ void MacroAssembler::RecordWriteField(Register object, int offset, Label done; // Skip barrier if writing a smi. - if (smi_check == INLINE_SMI_CHECK) { + if (smi_check == SmiCheck::kInline) { JumpIfSmi(value, &done); } @@ -668,7 +669,7 @@ void MacroAssembler::RecordWriteField(Register object, int offset, // of the object, so so offset must be a multiple of kPointerSize. DCHECK(IsAligned(offset, kPointerSize)); - if (emit_debug_code()) { + if (FLAG_debug_code) { Label ok; UseScratchRegisterScope temps(this); Register scratch = temps.Acquire(); @@ -680,7 +681,7 @@ void MacroAssembler::RecordWriteField(Register object, int offset, } RecordWrite(object, Operand(offset - kHeapObjectTag), value, lr_status, - save_fp, remembered_set_action, OMIT_SMI_CHECK); + save_fp, remembered_set_action, SmiCheck::kOmit); bind(&done); } @@ -826,7 +827,7 @@ void MacroAssembler::RecordWrite(Register object, Operand offset, RememberedSetAction remembered_set_action, SmiCheck smi_check) { DCHECK_NE(object, value); - if (emit_debug_code()) { + if (FLAG_debug_code) { { UseScratchRegisterScope temps(this); Register scratch = temps.Acquire(); @@ -837,7 +838,7 @@ void MacroAssembler::RecordWrite(Register object, Operand offset, Check(eq, AbortReason::kWrongAddressOrValuePassedToRecordWrite); } - if ((remembered_set_action == OMIT_REMEMBERED_SET && + if ((remembered_set_action == RememberedSetAction::kOmit && !FLAG_incremental_marking) || FLAG_disable_write_barriers) { return; @@ -847,7 +848,7 @@ void MacroAssembler::RecordWrite(Register object, Operand offset, // catch stores of smis and stores into the young generation. Label done; - if (smi_check == INLINE_SMI_CHECK) { + if (smi_check == SmiCheck::kInline) { JumpIfSmi(value, &done); } @@ -1435,7 +1436,7 @@ void MacroAssembler::EnterExitFrame(bool save_doubles, int stack_space, PushCommonFrame(scratch); // Reserve room for saved entry sp. sub(sp, fp, Operand(ExitFrameConstants::kFixedFrameSizeFromFp)); - if (emit_debug_code()) { + if (FLAG_debug_code) { mov(scratch, Operand::Zero()); str(scratch, MemOperand(fp, ExitFrameConstants::kSPOffset)); } @@ -1622,7 +1623,7 @@ void MacroAssembler::StackOverflowCheck(Register num_args, Register scratch, void MacroAssembler::InvokePrologue(Register expected_parameter_count, Register actual_parameter_count, - Label* done, InvokeFlag flag) { + Label* done, InvokeType type) { Label regular_invoke; // r0: actual arguments count // r1: function (passed through to callee) @@ -1722,9 +1723,9 @@ void MacroAssembler::CallDebugOnFunctionCall(Register fun, Register new_target, void MacroAssembler::InvokeFunctionCode(Register function, Register new_target, Register expected_parameter_count, Register actual_parameter_count, - InvokeFlag flag) { + InvokeType type) { // You can't call a function without a valid frame. - DCHECK_IMPLIES(flag == CALL_FUNCTION, has_frame()); + DCHECK_IMPLIES(type == InvokeType::kCall, has_frame()); DCHECK_EQ(function, r1); DCHECK_IMPLIES(new_target.is_valid(), new_target == r3); @@ -1746,17 +1747,19 @@ void MacroAssembler::InvokeFunctionCode(Register function, Register new_target, } Label done; - InvokePrologue(expected_parameter_count, actual_parameter_count, &done, flag); + InvokePrologue(expected_parameter_count, actual_parameter_count, &done, type); // We call indirectly through the code field in the function to // allow recompilation to take effect without changing any of the // call sites. Register code = kJavaScriptCallCodeStartRegister; ldr(code, FieldMemOperand(function, JSFunction::kCodeOffset)); - if (flag == CALL_FUNCTION) { - CallCodeObject(code); - } else { - DCHECK(flag == JUMP_FUNCTION); - JumpCodeObject(code); + switch (type) { + case InvokeType::kCall: + CallCodeObject(code); + break; + case InvokeType::kJump: + JumpCodeObject(code); + break; } b(&done); @@ -1773,9 +1776,9 @@ void MacroAssembler::InvokeFunctionCode(Register function, Register new_target, void MacroAssembler::InvokeFunctionWithNewTarget( Register fun, Register new_target, Register actual_parameter_count, - InvokeFlag flag) { + InvokeType type) { // You can't call a function without a valid frame. - DCHECK_IMPLIES(flag == CALL_FUNCTION, has_frame()); + DCHECK_IMPLIES(type == InvokeType::kCall, has_frame()); // Contract with called JS functions requires that function is passed in r1. DCHECK_EQ(fun, r1); @@ -1790,15 +1793,15 @@ void MacroAssembler::InvokeFunctionWithNewTarget( SharedFunctionInfo::kFormalParameterCountOffset)); InvokeFunctionCode(fun, new_target, expected_reg, actual_parameter_count, - flag); + type); } void MacroAssembler::InvokeFunction(Register function, Register expected_parameter_count, Register actual_parameter_count, - InvokeFlag flag) { + InvokeType type) { // You can't call a function without a valid frame. - DCHECK_IMPLIES(flag == CALL_FUNCTION, has_frame()); + DCHECK_IMPLIES(type == InvokeType::kCall, has_frame()); // Contract with called JS functions requires that function is passed in r1. DCHECK_EQ(function, r1); @@ -1807,18 +1810,7 @@ void MacroAssembler::InvokeFunction(Register function, ldr(cp, FieldMemOperand(r1, JSFunction::kContextOffset)); InvokeFunctionCode(r1, no_reg, expected_parameter_count, - actual_parameter_count, flag); -} - -void MacroAssembler::MaybeDropFrames() { - // Check whether we need to drop frames to restart a function on the stack. - ExternalReference restart_fp = - ExternalReference::debug_restart_fp_address(isolate()); - Move(r1, restart_fp); - ldr(r1, MemOperand(r1)); - tst(r1, r1); - Jump(BUILTIN_CODE(isolate(), FrameDropperTrampoline), RelocInfo::CODE_TARGET, - ne); + actual_parameter_count, type); } void MacroAssembler::PushStackHandler() { @@ -1993,8 +1985,8 @@ void MacroAssembler::JumpToExternalReference(const ExternalReference& builtin, DCHECK_EQ(builtin.address() & 1, 1); #endif Move(r1, builtin); - Handle<Code> code = CodeFactory::CEntry(isolate(), 1, kDontSaveFPRegs, - kArgvOnStack, builtin_exit_frame); + Handle<Code> code = CodeFactory::CEntry(isolate(), 1, SaveFPRegsMode::kIgnore, + ArgvMode::kStack, builtin_exit_frame); Jump(code, RelocInfo::CODE_TARGET); } @@ -2034,11 +2026,11 @@ void MacroAssembler::DecrementCounter(StatsCounter* counter, int value, } void TurboAssembler::Assert(Condition cond, AbortReason reason) { - if (emit_debug_code()) Check(cond, reason); + if (FLAG_debug_code) Check(cond, reason); } void TurboAssembler::AssertUnreachable(AbortReason reason) { - if (emit_debug_code()) Abort(reason); + if (FLAG_debug_code) Abort(reason); } void TurboAssembler::Check(Condition cond, AbortReason reason) { @@ -2052,11 +2044,11 @@ void TurboAssembler::Check(Condition cond, AbortReason reason) { void TurboAssembler::Abort(AbortReason reason) { Label abort_start; bind(&abort_start); -#ifdef DEBUG - const char* msg = GetAbortReason(reason); - RecordComment("Abort message: "); - RecordComment(msg); -#endif + if (FLAG_code_comments) { + const char* msg = GetAbortReason(reason); + RecordComment("Abort message: "); + RecordComment(msg); + } // Avoid emitting call to builtin if requested. if (trap_on_abort()) { @@ -2143,7 +2135,7 @@ void MacroAssembler::JumpIfNotSmi(Register value, Label* not_smi_label) { } void MacroAssembler::AssertNotSmi(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { STATIC_ASSERT(kSmiTag == 0); tst(object, Operand(kSmiTagMask)); Check(ne, AbortReason::kOperandIsASmi); @@ -2151,7 +2143,7 @@ void MacroAssembler::AssertNotSmi(Register object) { } void MacroAssembler::AssertSmi(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { STATIC_ASSERT(kSmiTag == 0); tst(object, Operand(kSmiTagMask)); Check(eq, AbortReason::kOperandIsNotASmi); @@ -2159,7 +2151,7 @@ void MacroAssembler::AssertSmi(Register object) { } void MacroAssembler::AssertConstructor(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { STATIC_ASSERT(kSmiTag == 0); tst(object, Operand(kSmiTagMask)); Check(ne, AbortReason::kOperandIsASmiAndNotAConstructor); @@ -2173,7 +2165,7 @@ void MacroAssembler::AssertConstructor(Register object) { } void MacroAssembler::AssertFunction(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { STATIC_ASSERT(kSmiTag == 0); tst(object, Operand(kSmiTagMask)); Check(ne, AbortReason::kOperandIsASmiAndNotAFunction); @@ -2187,7 +2179,7 @@ void MacroAssembler::AssertFunction(Register object) { } void MacroAssembler::AssertBoundFunction(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { STATIC_ASSERT(kSmiTag == 0); tst(object, Operand(kSmiTagMask)); Check(ne, AbortReason::kOperandIsASmiAndNotABoundFunction); @@ -2199,7 +2191,7 @@ void MacroAssembler::AssertBoundFunction(Register object) { } void MacroAssembler::AssertGeneratorObject(Register object) { - if (!emit_debug_code()) return; + if (!FLAG_debug_code) return; tst(object, Operand(kSmiTagMask)); Check(ne, AbortReason::kOperandIsASmiAndNotAGeneratorObject); @@ -2229,7 +2221,7 @@ void MacroAssembler::AssertGeneratorObject(Register object) { void MacroAssembler::AssertUndefinedOrAllocationSite(Register object, Register scratch) { - if (emit_debug_code()) { + if (FLAG_debug_code) { Label done_checking; AssertNotSmi(object); CompareRoot(object, RootIndex::kUndefinedValue); @@ -2520,7 +2512,7 @@ void TurboAssembler::CallCFunctionHelper(Register function, // running in the simulator. The simulator has its own alignment check which // provides more information. #if V8_HOST_ARCH_ARM - if (emit_debug_code()) { + if (FLAG_debug_code) { int frame_alignment = base::OS::ActivationFrameAlignment(); int frame_alignment_mask = frame_alignment - 1; if (frame_alignment > kPointerSize) { diff --git a/deps/v8/src/codegen/arm/macro-assembler-arm.h b/deps/v8/src/codegen/arm/macro-assembler-arm.h index e622d4aa17..3a54f6c45f 100644 --- a/deps/v8/src/codegen/arm/macro-assembler-arm.h +++ b/deps/v8/src/codegen/arm/macro-assembler-arm.h @@ -29,8 +29,6 @@ inline MemOperand FieldMemOperand(Register object, int offset) { return MemOperand(object, offset - kHeapObjectTag); } -enum RememberedSetAction { EMIT_REMEMBERED_SET, OMIT_REMEMBERED_SET }; -enum SmiCheck { INLINE_SMI_CHECK, OMIT_SMI_CHECK }; enum LinkRegisterStatus { kLRHasNotBeenSaved, kLRHasBeenSaved }; Register GetRegisterThatIsNotOneOf(Register reg1, Register reg2 = no_reg, @@ -656,16 +654,16 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { void RecordWriteField( Register object, int offset, Register value, LinkRegisterStatus lr_status, SaveFPRegsMode save_fp, - RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, - SmiCheck smi_check = INLINE_SMI_CHECK); + RememberedSetAction remembered_set_action = RememberedSetAction::kEmit, + SmiCheck smi_check = SmiCheck::kInline); // For a given |object| notify the garbage collector that the slot at |offset| // has been written. |value| is the object being stored. void RecordWrite( Register object, Operand offset, Register value, LinkRegisterStatus lr_status, SaveFPRegsMode save_fp, - RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, - SmiCheck smi_check = INLINE_SMI_CHECK); + RememberedSetAction remembered_set_action = RememberedSetAction::kEmit, + SmiCheck smi_check = SmiCheck::kInline); // Enter exit frame. // stack_space - extra stack space, used for alignment before call to C. @@ -689,7 +687,7 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { // Invoke the JavaScript function code by either calling or jumping. void InvokeFunctionCode(Register function, Register new_target, Register expected_parameter_count, - Register actual_parameter_count, InvokeFlag flag); + Register actual_parameter_count, InvokeType type); // On function call, call into the debugger. void CallDebugOnFunctionCall(Register fun, Register new_target, @@ -700,13 +698,10 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { // current context to the context in the function before invoking. void InvokeFunctionWithNewTarget(Register function, Register new_target, Register actual_parameter_count, - InvokeFlag flag); + InvokeType type); void InvokeFunction(Register function, Register expected_parameter_count, - Register actual_parameter_count, InvokeFlag flag); - - // Frame restart support - void MaybeDropFrames(); + Register actual_parameter_count, InvokeType type); // Exception handling @@ -784,18 +779,18 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { // Call a runtime routine. void CallRuntime(const Runtime::Function* f, int num_arguments, - SaveFPRegsMode save_doubles = kDontSaveFPRegs); + SaveFPRegsMode save_doubles = SaveFPRegsMode::kIgnore); // Convenience function: Same as above, but takes the fid instead. void CallRuntime(Runtime::FunctionId fid, - SaveFPRegsMode save_doubles = kDontSaveFPRegs) { + SaveFPRegsMode save_doubles = SaveFPRegsMode::kIgnore) { const Runtime::Function* function = Runtime::FunctionForId(fid); CallRuntime(function, function->nargs, save_doubles); } // Convenience function: Same as above, but takes the fid instead. void CallRuntime(Runtime::FunctionId fid, int num_arguments, - SaveFPRegsMode save_doubles = kDontSaveFPRegs) { + SaveFPRegsMode save_doubles = SaveFPRegsMode::kIgnore) { CallRuntime(Runtime::FunctionForId(fid), num_arguments, save_doubles); } @@ -874,7 +869,7 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { // Helper functions for generating invokes. void InvokePrologue(Register expected_parameter_count, Register actual_parameter_count, Label* done, - InvokeFlag flag); + InvokeType type); DISALLOW_IMPLICIT_CONSTRUCTORS(MacroAssembler); }; diff --git a/deps/v8/src/codegen/arm64/assembler-arm64-inl.h b/deps/v8/src/codegen/arm64/assembler-arm64-inl.h index ee64dbe1f2..2668502f81 100644 --- a/deps/v8/src/codegen/arm64/assembler-arm64-inl.h +++ b/deps/v8/src/codegen/arm64/assembler-arm64-inl.h @@ -1072,12 +1072,12 @@ const Register& Assembler::AppropriateZeroRegFor(const CPURegister& reg) const { inline void Assembler::CheckBufferSpace() { DCHECK_LT(pc_, buffer_start_ + buffer_->size()); - if (buffer_space() < kGap) { + if (V8_UNLIKELY(buffer_space() < kGap)) { GrowBuffer(); } } -inline void Assembler::CheckBuffer() { +V8_INLINE void Assembler::CheckBuffer() { CheckBufferSpace(); if (pc_offset() >= next_veneer_pool_check_) { CheckVeneerPool(false, true); @@ -1085,6 +1085,10 @@ inline void Assembler::CheckBuffer() { constpool_.MaybeCheck(); } +EnsureSpace::EnsureSpace(Assembler* assembler) : block_pools_scope_(assembler) { + assembler->CheckBufferSpace(); +} + } // namespace internal } // namespace v8 diff --git a/deps/v8/src/codegen/arm64/assembler-arm64.h b/deps/v8/src/codegen/arm64/assembler-arm64.h index aa2ffb26cd..9d8b135954 100644 --- a/deps/v8/src/codegen/arm64/assembler-arm64.h +++ b/deps/v8/src/codegen/arm64/assembler-arm64.h @@ -2634,7 +2634,7 @@ class V8_EXPORT_PRIVATE Assembler : public AssemblerBase { } void GrowBuffer(); - void CheckBufferSpace(); + V8_INLINE void CheckBufferSpace(); void CheckBuffer(); // Emission of the veneer pools may be blocked in some code sequences. @@ -2786,9 +2786,7 @@ class PatchingAssembler : public Assembler { class EnsureSpace { public: - explicit EnsureSpace(Assembler* assembler) : block_pools_scope_(assembler) { - assembler->CheckBufferSpace(); - } + explicit V8_INLINE EnsureSpace(Assembler* assembler); private: Assembler::BlockPoolsScope block_pools_scope_; diff --git a/deps/v8/src/codegen/arm64/cpu-arm64.cc b/deps/v8/src/codegen/arm64/cpu-arm64.cc index d7bd4834b0..4baf2e07ec 100644 --- a/deps/v8/src/codegen/arm64/cpu-arm64.cc +++ b/deps/v8/src/codegen/arm64/cpu-arm64.cc @@ -23,7 +23,7 @@ class CacheLineSizes { cache_type_register_ = 0; #else // Copy the content of the cache type register to a core register. - __asm__ __volatile__("mrs %x[ctr], ctr_el0" // NOLINT + __asm__ __volatile__("mrs %x[ctr], ctr_el0" : [ctr] "=r"(cache_type_register_)); #endif } @@ -64,9 +64,8 @@ void CpuFeatures::FlushICache(void* address, size_t length) { uintptr_t istart = start & ~(isize - 1); uintptr_t end = start + length; - __asm__ __volatile__( // NOLINT - // Clean every line of the D cache containing the - // target data. + __asm__ __volatile__( + // Clean every line of the D cache containing the target data. "0: \n\t" // dc : Data Cache maintenance // c : Clean @@ -111,7 +110,7 @@ void CpuFeatures::FlushICache(void* address, size_t length) { : [dsize] "r"(dsize), [isize] "r"(isize), [end] "r"(end) // This code does not write to memory but without the dependency gcc might // move this code before the code is generated. - : "cc", "memory"); // NOLINT + : "cc", "memory"); #endif // V8_OS_WIN #endif // V8_HOST_ARCH_ARM64 } diff --git a/deps/v8/src/codegen/arm64/interface-descriptors-arm64-inl.h b/deps/v8/src/codegen/arm64/interface-descriptors-arm64-inl.h new file mode 100644 index 0000000000..90123dbdcb --- /dev/null +++ b/deps/v8/src/codegen/arm64/interface-descriptors-arm64-inl.h @@ -0,0 +1,265 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef V8_CODEGEN_ARM64_INTERFACE_DESCRIPTORS_ARM64_INL_H_ +#define V8_CODEGEN_ARM64_INTERFACE_DESCRIPTORS_ARM64_INL_H_ + +#if V8_TARGET_ARCH_ARM64 + +#include "src/base/template-utils.h" +#include "src/codegen/interface-descriptors.h" +#include "src/execution/frames.h" + +namespace v8 { +namespace internal { + +constexpr auto CallInterfaceDescriptor::DefaultRegisterArray() { + auto registers = RegisterArray(x0, x1, x2, x3, x4); + STATIC_ASSERT(registers.size() == kMaxBuiltinRegisterParams); + return registers; +} + +// static +constexpr auto RecordWriteDescriptor::registers() { + return RegisterArray(x0, x1, x2, x3, x4, kReturnRegister0); +} + +// static +constexpr auto DynamicCheckMapsDescriptor::registers() { + return RegisterArray(x0, x1, x2, x3, cp); +} + +// static +constexpr auto EphemeronKeyBarrierDescriptor::registers() { + return RegisterArray(x0, x1, x2, x3, x4, kReturnRegister0); +} + +// static +constexpr Register LoadDescriptor::ReceiverRegister() { return x1; } +// static +constexpr Register LoadDescriptor::NameRegister() { return x2; } +// static +constexpr Register LoadDescriptor::SlotRegister() { return x0; } + +// static +constexpr Register LoadWithVectorDescriptor::VectorRegister() { return x3; } + +// static +constexpr Register +LoadWithReceiverAndVectorDescriptor::LookupStartObjectRegister() { + return x4; +} + +// static +constexpr Register StoreDescriptor::ReceiverRegister() { return x1; } +// static +constexpr Register StoreDescriptor::NameRegister() { return x2; } +// static +constexpr Register StoreDescriptor::ValueRegister() { return x0; } +// static +constexpr Register StoreDescriptor::SlotRegister() { return x4; } + +// static +constexpr Register StoreWithVectorDescriptor::VectorRegister() { return x3; } + +// static +constexpr Register StoreTransitionDescriptor::MapRegister() { return x5; } + +// static +constexpr Register ApiGetterDescriptor::HolderRegister() { return x0; } +// static +constexpr Register ApiGetterDescriptor::CallbackRegister() { return x3; } + +// static +constexpr Register GrowArrayElementsDescriptor::ObjectRegister() { return x0; } +// static +constexpr Register GrowArrayElementsDescriptor::KeyRegister() { return x3; } + +// static +constexpr Register BaselineLeaveFrameDescriptor::ParamsSizeRegister() { + return x3; +} +// static +constexpr Register BaselineLeaveFrameDescriptor::WeightRegister() { return x4; } + +// static +// static +constexpr Register TypeConversionDescriptor::ArgumentRegister() { return x0; } + +// static +constexpr auto TypeofDescriptor::registers() { return RegisterArray(x3); } + +// static +constexpr auto CallTrampolineDescriptor::registers() { + // x1: target + // x0: number of arguments + return RegisterArray(x1, x0); +} + +// static +constexpr auto CallVarargsDescriptor::registers() { + // x0 : number of arguments (on the stack, not including receiver) + // x1 : the target to call + // x4 : arguments list length (untagged) + // x2 : arguments list (FixedArray) + return RegisterArray(x1, x0, x4, x2); +} + +// static +constexpr auto CallForwardVarargsDescriptor::registers() { + // x1: target + // x0: number of arguments + // x2: start index (to supported rest parameters) + return RegisterArray(x1, x0, x2); +} + +// static +constexpr auto CallFunctionTemplateDescriptor::registers() { + // x1 : function template info + // x2 : number of arguments (on the stack, not including receiver) + return RegisterArray(x1, x2); +} + +// static +constexpr auto CallWithSpreadDescriptor::registers() { + // x0 : number of arguments (on the stack, not including receiver) + // x1 : the target to call + // x2 : the object to spread + return RegisterArray(x1, x0, x2); +} + +// static +constexpr auto CallWithArrayLikeDescriptor::registers() { + // x1 : the target to call + // x2 : the arguments list + return RegisterArray(x1, x2); +} + +// static +constexpr auto ConstructVarargsDescriptor::registers() { + // x0 : number of arguments (on the stack, not including receiver) + // x1 : the target to call + // x3 : the new target + // x4 : arguments list length (untagged) + // x2 : arguments list (FixedArray) + return RegisterArray(x1, x3, x0, x4, x2); +} + +// static +constexpr auto ConstructForwardVarargsDescriptor::registers() { + // x3: new target + // x1: target + // x0: number of arguments + // x2: start index (to supported rest parameters) + return RegisterArray(x1, x3, x0, x2); +} + +// static +constexpr auto ConstructWithSpreadDescriptor::registers() { + // x0 : number of arguments (on the stack, not including receiver) + // x1 : the target to call + // x3 : the new target + // x2 : the object to spread + return RegisterArray(x1, x3, x0, x2); +} + +// static +constexpr auto ConstructWithArrayLikeDescriptor::registers() { + // x1 : the target to call + // x3 : the new target + // x2 : the arguments list + return RegisterArray(x1, x3, x2); +} + +// static +constexpr auto ConstructStubDescriptor::registers() { + // x3: new target + // x1: target + // x0: number of arguments + // x2: allocation site or undefined + return RegisterArray(x1, x3, x0, x2); +} + +// static +constexpr auto AbortDescriptor::registers() { return RegisterArray(x1); } + +// static +constexpr auto CompareDescriptor::registers() { + // x1: left operand + // x0: right operand + return RegisterArray(x1, x0); +} + +// static +constexpr auto Compare_BaselineDescriptor::registers() { + // x1: left operand + // x0: right operand + // x2: feedback slot + return RegisterArray(x1, x0, x2); +} + +// static +constexpr auto BinaryOpDescriptor::registers() { + // x1: left operand + // x0: right operand + return RegisterArray(x1, x0); +} + +// static +constexpr auto BinaryOp_BaselineDescriptor::registers() { + // x1: left operand + // x0: right operand + // x2: feedback slot + return RegisterArray(x1, x0, x2); +} + +// static +constexpr auto ApiCallbackDescriptor::registers() { + return RegisterArray(x1, // kApiFunctionAddress + x2, // kArgc + x3, // kCallData + x0); // kHolder +} + +// static +constexpr auto InterpreterDispatchDescriptor::registers() { + return RegisterArray( + kInterpreterAccumulatorRegister, kInterpreterBytecodeOffsetRegister, + kInterpreterBytecodeArrayRegister, kInterpreterDispatchTableRegister); +} + +// static +constexpr auto InterpreterPushArgsThenCallDescriptor::registers() { + return RegisterArray(x0, // argument count (not including receiver) + x2, // address of first argument + x1); // the target callable to be call +} + +// static +constexpr auto InterpreterPushArgsThenConstructDescriptor::registers() { + return RegisterArray( + x0, // argument count (not including receiver) + x4, // address of the first argument + x1, // constructor to call + x3, // new target + x2); // allocation site feedback if available, undefined otherwise +} + +// static +constexpr auto ResumeGeneratorDescriptor::registers() { + return RegisterArray(x0, // the value to pass to the generator + x1); // the JSGeneratorObject to resume +} + +// static +constexpr auto RunMicrotasksEntryDescriptor::registers() { + return RegisterArray(x0, x1); +} + +} // namespace internal +} // namespace v8 + +#endif // V8_TARGET_ARCH_ARM64 + +#endif // V8_CODEGEN_ARM64_INTERFACE_DESCRIPTORS_ARM64_INL_H_ diff --git a/deps/v8/src/codegen/arm64/interface-descriptors-arm64.cc b/deps/v8/src/codegen/arm64/interface-descriptors-arm64.cc deleted file mode 100644 index 246d6fc961..0000000000 --- a/deps/v8/src/codegen/arm64/interface-descriptors-arm64.cc +++ /dev/null @@ -1,310 +0,0 @@ -// Copyright 2012 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#if V8_TARGET_ARCH_ARM64 - -#include "src/codegen/interface-descriptors.h" - -#include "src/execution/frames.h" - -namespace v8 { -namespace internal { - -const Register CallInterfaceDescriptor::ContextRegister() { return cp; } - -void CallInterfaceDescriptor::DefaultInitializePlatformSpecific( - CallInterfaceDescriptorData* data, int register_parameter_count) { - const Register default_stub_registers[] = {x0, x1, x2, x3, x4}; - CHECK_LE(static_cast<size_t>(register_parameter_count), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(register_parameter_count, - default_stub_registers); -} - -void RecordWriteDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - const Register default_stub_registers[] = {x0, x1, x2, x3, x4}; - - data->RestrictAllocatableRegisters(default_stub_registers, - arraysize(default_stub_registers)); - - CHECK_LE(static_cast<size_t>(kParameterCount), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(kParameterCount, default_stub_registers); -} - -void DynamicCheckMapsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register default_stub_registers[] = {x0, x1, x2, x3, cp}; - - data->RestrictAllocatableRegisters(default_stub_registers, - arraysize(default_stub_registers)); - - CHECK_LE(static_cast<size_t>(kParameterCount), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(kParameterCount, default_stub_registers); -} - -void EphemeronKeyBarrierDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - const Register default_stub_registers[] = {x0, x1, x2, x3, x4}; - - data->RestrictAllocatableRegisters(default_stub_registers, - arraysize(default_stub_registers)); - - CHECK_LE(static_cast<size_t>(kParameterCount), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(kParameterCount, default_stub_registers); -} - -const Register LoadDescriptor::ReceiverRegister() { return x1; } -const Register LoadDescriptor::NameRegister() { return x2; } -const Register LoadDescriptor::SlotRegister() { return x0; } - -const Register LoadWithVectorDescriptor::VectorRegister() { return x3; } - -const Register -LoadWithReceiverAndVectorDescriptor::LookupStartObjectRegister() { - return x4; -} - -const Register StoreDescriptor::ReceiverRegister() { return x1; } -const Register StoreDescriptor::NameRegister() { return x2; } -const Register StoreDescriptor::ValueRegister() { return x0; } -const Register StoreDescriptor::SlotRegister() { return x4; } - -const Register StoreWithVectorDescriptor::VectorRegister() { return x3; } - -const Register StoreTransitionDescriptor::SlotRegister() { return x4; } -const Register StoreTransitionDescriptor::VectorRegister() { return x3; } -const Register StoreTransitionDescriptor::MapRegister() { return x5; } - -const Register ApiGetterDescriptor::HolderRegister() { return x0; } -const Register ApiGetterDescriptor::CallbackRegister() { return x3; } - -const Register GrowArrayElementsDescriptor::ObjectRegister() { return x0; } -const Register GrowArrayElementsDescriptor::KeyRegister() { return x3; } - -const Register BaselineLeaveFrameDescriptor::ParamsSizeRegister() { return x3; } -const Register BaselineLeaveFrameDescriptor::WeightRegister() { return x4; } - -// static -const Register TypeConversionDescriptor::ArgumentRegister() { return x0; } - -void TypeofDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {x3}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallTrampolineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // x1: target - // x0: number of arguments - Register registers[] = {x1, x0}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // x0 : number of arguments (on the stack, not including receiver) - // x1 : the target to call - // x4 : arguments list length (untagged) - // x2 : arguments list (FixedArray) - Register registers[] = {x1, x0, x4, x2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallForwardVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // x1: target - // x0: number of arguments - // x2: start index (to supported rest parameters) - Register registers[] = {x1, x0, x2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallFunctionTemplateDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // x1 : function template info - // x2 : number of arguments (on the stack, not including receiver) - Register registers[] = {x1, x2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallWithSpreadDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // x0 : number of arguments (on the stack, not including receiver) - // x1 : the target to call - // x2 : the object to spread - Register registers[] = {x1, x0, x2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallWithArrayLikeDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // x1 : the target to call - // x2 : the arguments list - Register registers[] = {x1, x2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // x0 : number of arguments (on the stack, not including receiver) - // x1 : the target to call - // x3 : the new target - // x4 : arguments list length (untagged) - // x2 : arguments list (FixedArray) - Register registers[] = {x1, x3, x0, x4, x2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructForwardVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // x3: new target - // x1: target - // x0: number of arguments - // x2: start index (to supported rest parameters) - Register registers[] = {x1, x3, x0, x2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructWithSpreadDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // x0 : number of arguments (on the stack, not including receiver) - // x1 : the target to call - // x3 : the new target - // x2 : the object to spread - Register registers[] = {x1, x3, x0, x2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructWithArrayLikeDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // x1 : the target to call - // x3 : the new target - // x2 : the arguments list - Register registers[] = {x1, x3, x2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructStubDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // x3: new target - // x1: target - // x0: number of arguments - // x2: allocation site or undefined - Register registers[] = {x1, x3, x0, x2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void AbortDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {x1}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CompareDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // x1: left operand - // x0: right operand - Register registers[] = {x1, x0}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void Compare_BaselineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // x1: left operand - // x0: right operand - // x2: feedback slot - Register registers[] = {x1, x0, x2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void BinaryOpDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // x1: left operand - // x0: right operand - Register registers[] = {x1, x0}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void BinaryOp_BaselineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // x1: left operand - // x0: right operand - // x2: feedback slot - Register registers[] = {x1, x0, x2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ApiCallbackDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - x1, // kApiFunctionAddress - x2, // kArgc - x3, // kCallData - x0, // kHolder - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void InterpreterDispatchDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - kInterpreterAccumulatorRegister, kInterpreterBytecodeOffsetRegister, - kInterpreterBytecodeArrayRegister, kInterpreterDispatchTableRegister}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void InterpreterPushArgsThenCallDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - x0, // argument count (not including receiver) - x2, // address of first argument - x1 // the target callable to be call - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void InterpreterPushArgsThenConstructDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - x0, // argument count (not including receiver) - x4, // address of the first argument - x1, // constructor to call - x3, // new target - x2, // allocation site feedback if available, undefined otherwise - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ResumeGeneratorDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - x0, // the value to pass to the generator - x1 // the JSGeneratorObject to resume - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void FrameDropperTrampolineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - x1, // loaded new FP - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void RunMicrotasksEntryDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {x0, x1}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -} // namespace internal -} // namespace v8 - -#endif // V8_TARGET_ARCH_ARM64 diff --git a/deps/v8/src/codegen/arm64/macro-assembler-arm64-inl.h b/deps/v8/src/codegen/arm64/macro-assembler-arm64-inl.h index 6a33f864ab..8fb9bbfd7b 100644 --- a/deps/v8/src/codegen/arm64/macro-assembler-arm64-inl.h +++ b/deps/v8/src/codegen/arm64/macro-assembler-arm64-inl.h @@ -7,12 +7,12 @@ #include <ctype.h> -#include "src/common/globals.h" - #include "src/base/bits.h" #include "src/codegen/arm64/assembler-arm64-inl.h" #include "src/codegen/arm64/assembler-arm64.h" #include "src/codegen/macro-assembler.h" +#include "src/common/globals.h" +#include "src/execution/isolate-data.h" namespace v8 { namespace internal { @@ -1037,7 +1037,7 @@ void TurboAssembler::InitializeRootRegister() { ExternalReference isolate_root = ExternalReference::isolate_root(isolate()); Mov(kRootRegister, Operand(isolate_root)); #ifdef V8_COMPRESS_POINTERS_IN_SHARED_CAGE - Mov(kPointerCageBaseRegister, Operand(isolate_root)); + LoadRootRelative(kPtrComprCageBaseRegister, IsolateData::cage_base_offset()); #endif } @@ -1200,7 +1200,7 @@ void TurboAssembler::Poke(const CPURegister& src, const Operand& offset) { if (offset.IsImmediate()) { DCHECK_GE(offset.ImmediateValue(), 0); - } else if (emit_debug_code()) { + } else if (FLAG_debug_code) { Cmp(xzr, offset); Check(le, AbortReason::kStackAccessBelowStackPointer); } @@ -1212,7 +1212,7 @@ template <TurboAssembler::LoadLRMode lr_mode> void TurboAssembler::Peek(const CPURegister& dst, const Operand& offset) { if (offset.IsImmediate()) { DCHECK_GE(offset.ImmediateValue(), 0); - } else if (emit_debug_code()) { + } else if (FLAG_debug_code) { Cmp(xzr, offset); Check(le, AbortReason::kStackAccessBelowStackPointer); } diff --git a/deps/v8/src/codegen/arm64/macro-assembler-arm64.cc b/deps/v8/src/codegen/arm64/macro-assembler-arm64.cc index a3570b8035..b18ff55455 100644 --- a/deps/v8/src/codegen/arm64/macro-assembler-arm64.cc +++ b/deps/v8/src/codegen/arm64/macro-assembler-arm64.cc @@ -10,6 +10,7 @@ #include "src/codegen/callable.h" #include "src/codegen/code-factory.h" #include "src/codegen/external-reference-table.h" +#include "src/codegen/interface-descriptors-inl.h" #include "src/codegen/macro-assembler-inl.h" #include "src/codegen/register-configuration.h" #include "src/codegen/reloc-info.h" @@ -52,7 +53,7 @@ int TurboAssembler::RequiredStackSizeForCallerSaved(SaveFPRegsMode fp_mode, int bytes = list.Count() * kXRegSizeInBits / 8; - if (fp_mode == kSaveFPRegs) { + if (fp_mode == SaveFPRegsMode::kSave) { DCHECK_EQ(kCallerSavedV.Count() % 2, 0); bytes += kCallerSavedV.Count() * kDRegSizeInBits / 8; } @@ -69,7 +70,7 @@ int TurboAssembler::PushCallerSaved(SaveFPRegsMode fp_mode, int bytes = list.Count() * kXRegSizeInBits / 8; - if (fp_mode == kSaveFPRegs) { + if (fp_mode == SaveFPRegsMode::kSave) { DCHECK_EQ(kCallerSavedV.Count() % 2, 0); PushCPURegList(kCallerSavedV); bytes += kCallerSavedV.Count() * kDRegSizeInBits / 8; @@ -79,7 +80,7 @@ int TurboAssembler::PushCallerSaved(SaveFPRegsMode fp_mode, int TurboAssembler::PopCallerSaved(SaveFPRegsMode fp_mode, Register exclusion) { int bytes = 0; - if (fp_mode == kSaveFPRegs) { + if (fp_mode == SaveFPRegsMode::kSave) { DCHECK_EQ(kCallerSavedV.Count() % 2, 0); PopCPURegList(kCallerSavedV); bytes += kCallerSavedV.Count() * kDRegSizeInBits / 8; @@ -1266,7 +1267,7 @@ void MacroAssembler::PopCalleeSavedRegisters() { } void TurboAssembler::AssertSpAligned() { - if (emit_debug_code()) { + if (FLAG_debug_code) { HardAbortScope hard_abort(this); // Avoid calls to Abort. // Arm64 requires the stack pointer to be 16-byte aligned prior to address // calculation. @@ -1299,7 +1300,7 @@ void TurboAssembler::CopyDoubleWords(Register dst, Register src, Register count, CopyDoubleWordsMode mode) { DCHECK(!AreAliased(dst, src, count)); - if (emit_debug_code()) { + if (FLAG_debug_code) { Register pointer1 = dst; Register pointer2 = src; if (mode == kSrcLessThanDst) { @@ -1374,7 +1375,7 @@ void TurboAssembler::SlotAddress(Register dst, Register slot_offset) { } void TurboAssembler::AssertFPCRState(Register fpcr) { - if (emit_debug_code()) { + if (FLAG_debug_code) { Label unexpected_mode, done; UseScratchRegisterScope temps(this); if (fpcr.IsNone()) { @@ -1473,7 +1474,7 @@ void TurboAssembler::Swap(VRegister lhs, VRegister rhs) { } void TurboAssembler::AssertSmi(Register object, AbortReason reason) { - if (emit_debug_code()) { + if (FLAG_debug_code) { STATIC_ASSERT(kSmiTag == 0); Tst(object, kSmiTagMask); Check(eq, reason); @@ -1481,7 +1482,7 @@ void TurboAssembler::AssertSmi(Register object, AbortReason reason) { } void MacroAssembler::AssertNotSmi(Register object, AbortReason reason) { - if (emit_debug_code()) { + if (FLAG_debug_code) { STATIC_ASSERT(kSmiTag == 0); Tst(object, kSmiTagMask); Check(ne, reason); @@ -1489,7 +1490,7 @@ void MacroAssembler::AssertNotSmi(Register object, AbortReason reason) { } void MacroAssembler::AssertConstructor(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { AssertNotSmi(object, AbortReason::kOperandIsASmiAndNotAConstructor); UseScratchRegisterScope temps(this); @@ -1504,7 +1505,7 @@ void MacroAssembler::AssertConstructor(Register object) { } void MacroAssembler::AssertFunction(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { AssertNotSmi(object, AbortReason::kOperandIsASmiAndNotAFunction); UseScratchRegisterScope temps(this); @@ -1517,7 +1518,7 @@ void MacroAssembler::AssertFunction(Register object) { } void MacroAssembler::AssertBoundFunction(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { AssertNotSmi(object, AbortReason::kOperandIsASmiAndNotABoundFunction); UseScratchRegisterScope temps(this); @@ -1529,7 +1530,7 @@ void MacroAssembler::AssertBoundFunction(Register object) { } void MacroAssembler::AssertGeneratorObject(Register object) { - if (!emit_debug_code()) return; + if (!FLAG_debug_code) return; AssertNotSmi(object, AbortReason::kOperandIsASmiAndNotAGeneratorObject); // Load map @@ -1555,7 +1556,7 @@ void MacroAssembler::AssertGeneratorObject(Register object) { } void MacroAssembler::AssertUndefinedOrAllocationSite(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { UseScratchRegisterScope temps(this); Register scratch = temps.AcquireX(); Label done_checking; @@ -1569,7 +1570,7 @@ void MacroAssembler::AssertUndefinedOrAllocationSite(Register object) { } void TurboAssembler::AssertPositiveOrZero(Register value) { - if (emit_debug_code()) { + if (FLAG_debug_code) { Label done; int sign_bit = value.Is64Bits() ? kXSignBit : kWSignBit; Tbz(value, sign_bit, &done); @@ -1599,8 +1600,8 @@ void MacroAssembler::CallRuntime(const Runtime::Function* f, int num_arguments, void MacroAssembler::JumpToExternalReference(const ExternalReference& builtin, bool builtin_exit_frame) { Mov(x1, builtin); - Handle<Code> code = CodeFactory::CEntry(isolate(), 1, kDontSaveFPRegs, - kArgvOnStack, builtin_exit_frame); + Handle<Code> code = CodeFactory::CEntry(isolate(), 1, SaveFPRegsMode::kIgnore, + ArgvMode::kStack, builtin_exit_frame); Jump(code, RelocInfo::CODE_TARGET); } @@ -1942,7 +1943,7 @@ void TurboAssembler::CallBuiltin(int builtin_index) { Ldr(scratch, Operand(entry, RelocInfo::OFF_HEAP_TARGET)); Call(scratch); } - if (FLAG_code_comments) RecordComment("]"); + RecordComment("]"); } void TurboAssembler::TailCallBuiltin(int builtin_index) { @@ -1971,7 +1972,7 @@ void TurboAssembler::TailCallBuiltin(int builtin_index) { Ldr(temp, Operand(entry, RelocInfo::OFF_HEAP_TARGET)); Jump(temp); } - if (FLAG_code_comments) RecordComment("]"); + RecordComment("]"); } void TurboAssembler::LoadCodeObjectEntry(Register destination, @@ -2059,7 +2060,7 @@ void TurboAssembler::StoreReturnAddressAndCall(Register target) { #endif Poke(x17, 0); - if (emit_debug_code()) { + if (FLAG_debug_code) { // Verify that the slot below fp[kSPOffset]-8 points to the signed return // location. Ldr(x16, MemOperand(fp, ExitFrameConstants::kSPOffset)); @@ -2189,7 +2190,7 @@ void MacroAssembler::StackOverflowCheck(Register num_args, void MacroAssembler::InvokePrologue(Register formal_parameter_count, Register actual_argument_count, Label* done, - InvokeFlag flag) { + InvokeType type) { // x0: actual arguments count. // x1: function (passed through to callee). // x2: expected arguments count. @@ -2320,9 +2321,9 @@ void MacroAssembler::CallDebugOnFunctionCall(Register fun, Register new_target, void MacroAssembler::InvokeFunctionCode(Register function, Register new_target, Register expected_parameter_count, Register actual_parameter_count, - InvokeFlag flag) { + InvokeType type) { // You can't call a function without a valid frame. - DCHECK_IMPLIES(flag == CALL_FUNCTION, has_frame()); + DCHECK_IMPLIES(type == InvokeType::kCall, has_frame()); DCHECK_EQ(function, x1); DCHECK_IMPLIES(new_target.is_valid(), new_target == x3); @@ -2341,7 +2342,7 @@ void MacroAssembler::InvokeFunctionCode(Register function, Register new_target, } Label done; - InvokePrologue(expected_parameter_count, actual_parameter_count, &done, flag); + InvokePrologue(expected_parameter_count, actual_parameter_count, &done, type); // If actual != expected, InvokePrologue will have handled the call through // the argument adaptor mechanism. @@ -2352,11 +2353,13 @@ void MacroAssembler::InvokeFunctionCode(Register function, Register new_target, Register code = kJavaScriptCallCodeStartRegister; LoadTaggedPointerField(code, FieldMemOperand(function, JSFunction::kCodeOffset)); - if (flag == CALL_FUNCTION) { - CallCodeObject(code); - } else { - DCHECK(flag == JUMP_FUNCTION); - JumpCodeObject(code); + switch (type) { + case InvokeType::kCall: + CallCodeObject(code); + break; + case InvokeType::kJump: + JumpCodeObject(code); + break; } B(&done); @@ -2377,9 +2380,9 @@ Operand MacroAssembler::ReceiverOperand(Register arg_count) { void MacroAssembler::InvokeFunctionWithNewTarget( Register function, Register new_target, Register actual_parameter_count, - InvokeFlag flag) { + InvokeType type) { // You can't call a function without a valid frame. - DCHECK(flag == JUMP_FUNCTION || has_frame()); + DCHECK(type == InvokeType::kJump || has_frame()); // Contract with called JS functions requires that function is passed in x1. // (See FullCodeGenerator::Generate().) @@ -2400,15 +2403,15 @@ void MacroAssembler::InvokeFunctionWithNewTarget( SharedFunctionInfo::kFormalParameterCountOffset)); InvokeFunctionCode(function, new_target, expected_parameter_count, - actual_parameter_count, flag); + actual_parameter_count, type); } void MacroAssembler::InvokeFunction(Register function, Register expected_parameter_count, Register actual_parameter_count, - InvokeFlag flag) { + InvokeType type) { // You can't call a function without a valid frame. - DCHECK(flag == JUMP_FUNCTION || has_frame()); + DCHECK(type == InvokeType::kJump || has_frame()); // Contract with called JS functions requires that function is passed in x1. // (See FullCodeGenerator::Generate().) @@ -2419,7 +2422,7 @@ void MacroAssembler::InvokeFunction(Register function, FieldMemOperand(function, JSFunction::kContextOffset)); InvokeFunctionCode(function, no_reg, expected_parameter_count, - actual_parameter_count, flag); + actual_parameter_count, type); } void TurboAssembler::TryConvertDoubleToInt64(Register result, @@ -2664,7 +2667,7 @@ void MacroAssembler::LeaveExitFrame(bool restore_doubles, ExternalReference::Create(IsolateAddressId::kContextAddress, isolate())); Ldr(cp, MemOperand(scratch)); - if (emit_debug_code()) { + if (FLAG_debug_code) { // Also emit debug code to clear the cp in the top frame. Mov(scratch2, Operand(Context::kInvalidContext)); Mov(scratch, ExternalReference::Create(IsolateAddressId::kContextAddress, @@ -2715,15 +2718,6 @@ void MacroAssembler::DecrementCounter(StatsCounter* counter, int value, IncrementCounter(counter, -value, scratch1, scratch2); } -void MacroAssembler::MaybeDropFrames() { - // Check whether we need to drop frames to restart a function on the stack. - Mov(x1, ExternalReference::debug_restart_fp_address(isolate())); - Ldr(x1, MemOperand(x1)); - Tst(x1, x1); - Jump(BUILTIN_CODE(isolate(), FrameDropperTrampoline), RelocInfo::CODE_TARGET, - ne); -} - void MacroAssembler::JumpIfObjectType(Register object, Register map, Register type_reg, InstanceType type, Label* if_cond_pass, Condition cond) { @@ -2860,14 +2854,14 @@ void TurboAssembler::DecompressTaggedPointer(const Register& destination, const MemOperand& field_operand) { RecordComment("[ DecompressTaggedPointer"); Ldr(destination.W(), field_operand); - Add(destination, kPointerCageBaseRegister, destination); + Add(destination, kPtrComprCageBaseRegister, destination); RecordComment("]"); } void TurboAssembler::DecompressTaggedPointer(const Register& destination, const Register& source) { RecordComment("[ DecompressTaggedPointer"); - Add(destination, kPointerCageBaseRegister, Operand(source, UXTW)); + Add(destination, kPtrComprCageBaseRegister, Operand(source, UXTW)); RecordComment("]"); } @@ -2875,7 +2869,7 @@ void TurboAssembler::DecompressAnyTagged(const Register& destination, const MemOperand& field_operand) { RecordComment("[ DecompressAnyTagged"); Ldr(destination.W(), field_operand); - Add(destination, kPointerCageBaseRegister, destination); + Add(destination, kPtrComprCageBaseRegister, destination); RecordComment("]"); } @@ -2904,7 +2898,7 @@ void MacroAssembler::RecordWriteField(Register object, int offset, Label done; // Skip the barrier if writing a smi. - if (smi_check == INLINE_SMI_CHECK) { + if (smi_check == SmiCheck::kInline) { JumpIfSmi(value, &done); } @@ -2912,7 +2906,7 @@ void MacroAssembler::RecordWriteField(Register object, int offset, // of the object, so offset must be a multiple of kTaggedSize. DCHECK(IsAligned(offset, kTaggedSize)); - if (emit_debug_code()) { + if (FLAG_debug_code) { Label ok; UseScratchRegisterScope temps(this); Register scratch = temps.AcquireX(); @@ -2924,7 +2918,7 @@ void MacroAssembler::RecordWriteField(Register object, int offset, } RecordWrite(object, Operand(offset - kHeapObjectTag), value, lr_status, - save_fp, remembered_set_action, OMIT_SMI_CHECK); + save_fp, remembered_set_action, SmiCheck::kOmit); Bind(&done); } @@ -3069,7 +3063,7 @@ void MacroAssembler::RecordWrite(Register object, Operand offset, ASM_LOCATION_IN_ASSEMBLER("MacroAssembler::RecordWrite"); DCHECK(!AreAliased(object, value)); - if (emit_debug_code()) { + if (FLAG_debug_code) { UseScratchRegisterScope temps(this); Register temp = temps.AcquireX(); @@ -3079,7 +3073,7 @@ void MacroAssembler::RecordWrite(Register object, Operand offset, Check(eq, AbortReason::kWrongAddressOrValuePassedToRecordWrite); } - if ((remembered_set_action == OMIT_REMEMBERED_SET && + if ((remembered_set_action == RememberedSetAction::kOmit && !FLAG_incremental_marking) || FLAG_disable_write_barriers) { return; @@ -3089,7 +3083,7 @@ void MacroAssembler::RecordWrite(Register object, Operand offset, // catch stores of smis and stores into the young generation. Label done; - if (smi_check == INLINE_SMI_CHECK) { + if (smi_check == SmiCheck::kInline) { DCHECK_EQ(0, kSmiTag); JumpIfSmi(value, &done); } @@ -3112,13 +3106,13 @@ void MacroAssembler::RecordWrite(Register object, Operand offset, } void TurboAssembler::Assert(Condition cond, AbortReason reason) { - if (emit_debug_code()) { + if (FLAG_debug_code) { Check(cond, reason); } } void TurboAssembler::AssertUnreachable(AbortReason reason) { - if (emit_debug_code()) Abort(reason); + if (FLAG_debug_code) Abort(reason); } void TurboAssembler::Check(Condition cond, AbortReason reason) { @@ -3133,10 +3127,10 @@ void TurboAssembler::Trap() { Brk(0); } void TurboAssembler::DebugBreak() { Debug("DebugBreak", 0, BREAK); } void TurboAssembler::Abort(AbortReason reason) { -#ifdef DEBUG - RecordComment("Abort message: "); - RecordComment(GetAbortReason(reason)); -#endif + if (FLAG_code_comments) { + RecordComment("Abort message: "); + RecordComment(GetAbortReason(reason)); + } // Avoid emitting call to builtin if requested. if (trap_on_abort()) { diff --git a/deps/v8/src/codegen/arm64/macro-assembler-arm64.h b/deps/v8/src/codegen/arm64/macro-assembler-arm64.h index a749676ccc..7bc6432c36 100644 --- a/deps/v8/src/codegen/arm64/macro-assembler-arm64.h +++ b/deps/v8/src/codegen/arm64/macro-assembler-arm64.h @@ -126,8 +126,6 @@ inline BranchType InvertBranchType(BranchType type) { } } -enum RememberedSetAction { EMIT_REMEMBERED_SET, OMIT_REMEMBERED_SET }; -enum SmiCheck { INLINE_SMI_CHECK, OMIT_SMI_CHECK }; enum LinkRegisterStatus { kLRHasNotBeenSaved, kLRHasBeenSaved }; enum DiscardMoveMode { kDontDiscardForSameWReg, kDiscardForSameWReg }; @@ -1849,17 +1847,17 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { // ---- Calling / Jumping helpers ---- void CallRuntime(const Runtime::Function* f, int num_arguments, - SaveFPRegsMode save_doubles = kDontSaveFPRegs); + SaveFPRegsMode save_doubles = SaveFPRegsMode::kIgnore); // Convenience function: Same as above, but takes the fid instead. void CallRuntime(Runtime::FunctionId fid, int num_arguments, - SaveFPRegsMode save_doubles = kDontSaveFPRegs) { + SaveFPRegsMode save_doubles = SaveFPRegsMode::kIgnore) { CallRuntime(Runtime::FunctionForId(fid), num_arguments, save_doubles); } // Convenience function: Same as above, but takes the fid instead. void CallRuntime(Runtime::FunctionId fid, - SaveFPRegsMode save_doubles = kDontSaveFPRegs) { + SaveFPRegsMode save_doubles = SaveFPRegsMode::kIgnore) { const Runtime::Function* function = Runtime::FunctionForId(fid); CallRuntime(function, function->nargs, save_doubles); } @@ -1882,7 +1880,7 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { // 'call_kind' must be x5. void InvokePrologue(Register expected_parameter_count, Register actual_parameter_count, Label* done, - InvokeFlag flag); + InvokeType type); // On function call, call into the debugger. void CallDebugOnFunctionCall(Register fun, Register new_target, @@ -1890,20 +1888,17 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { Register actual_parameter_count); void InvokeFunctionCode(Register function, Register new_target, Register expected_parameter_count, - Register actual_parameter_count, InvokeFlag flag); + Register actual_parameter_count, InvokeType type); // Invoke the JavaScript function in the given register. // Changes the current context to the context in the function before invoking. void InvokeFunctionWithNewTarget(Register function, Register new_target, Register actual_parameter_count, - InvokeFlag flag); + InvokeType type); void InvokeFunction(Register function, Register expected_parameter_count, - Register actual_parameter_count, InvokeFlag flag); + Register actual_parameter_count, InvokeType type); // ---- Code generation helpers ---- - // Frame restart support - void MaybeDropFrames(); - // --------------------------------------------------------------------------- // Support functions. @@ -2032,16 +2027,16 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { void RecordWriteField( Register object, int offset, Register value, LinkRegisterStatus lr_status, SaveFPRegsMode save_fp, - RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, - SmiCheck smi_check = INLINE_SMI_CHECK); + RememberedSetAction remembered_set_action = RememberedSetAction::kEmit, + SmiCheck smi_check = SmiCheck::kInline); // For a given |object| notify the garbage collector that the slot at |offset| // has been written. |value| is the object being stored. void RecordWrite( Register object, Operand offset, Register value, LinkRegisterStatus lr_status, SaveFPRegsMode save_fp, - RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, - SmiCheck smi_check = INLINE_SMI_CHECK); + RememberedSetAction remembered_set_action = RememberedSetAction::kEmit, + SmiCheck smi_check = SmiCheck::kInline); // --------------------------------------------------------------------------- // Debugging. diff --git a/deps/v8/src/codegen/arm64/register-arm64.h b/deps/v8/src/codegen/arm64/register-arm64.h index 819806319a..1150daf4c6 100644 --- a/deps/v8/src/codegen/arm64/register-arm64.h +++ b/deps/v8/src/codegen/arm64/register-arm64.h @@ -102,7 +102,7 @@ class CPURegister : public RegisterBase<CPURegister, kRegAfterLast> { } static constexpr CPURegister Create(int code, int size, RegisterType type) { - CONSTEXPR_DCHECK(IsValid(code, size, type)); + DCHECK(IsValid(code, size, type)); return CPURegister{code, size, type}; } @@ -320,7 +320,7 @@ class VRegister : public CPURegister { } static constexpr VRegister Create(int code, int size, int lane_count = 1) { - CONSTEXPR_DCHECK(IsValidLaneCount(lane_count)); + DCHECK(IsValidLaneCount(lane_count)); return VRegister(CPURegister::Create(code, size, CPURegister::kVRegister), lane_count); } @@ -477,9 +477,9 @@ ALIAS_REGISTER(Register, kRootRegister, x26); ALIAS_REGISTER(Register, rr, x26); // Pointer cage base register. #ifdef V8_COMPRESS_POINTERS_IN_SHARED_CAGE -ALIAS_REGISTER(Register, kPointerCageBaseRegister, x28); +ALIAS_REGISTER(Register, kPtrComprCageBaseRegister, x28); #else -ALIAS_REGISTER(Register, kPointerCageBaseRegister, kRootRegister); +ALIAS_REGISTER(Register, kPtrComprCageBaseRegister, kRootRegister); #endif // Context pointer register. ALIAS_REGISTER(Register, cp, x27); @@ -547,8 +547,6 @@ using Simd128Register = VRegister; // Lists of registers. class V8_EXPORT_PRIVATE CPURegList { public: - CPURegList() = default; - template <typename... CPURegisters> explicit CPURegList(CPURegister reg0, CPURegisters... regs) : list_(CPURegister::ListOf(reg0, regs...)), diff --git a/deps/v8/src/codegen/assembler.cc b/deps/v8/src/codegen/assembler.cc index 95983705ab..bb80d366de 100644 --- a/deps/v8/src/codegen/assembler.cc +++ b/deps/v8/src/codegen/assembler.cc @@ -69,7 +69,7 @@ AssemblerOptions AssemblerOptions::Default(Isolate* isolate) { #endif options.inline_offheap_trampolines &= !generating_embedded_builtin; #if V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_ARM64 - const base::AddressRegion& code_range = isolate->heap()->code_range(); + const base::AddressRegion& code_range = isolate->heap()->code_region(); DCHECK_IMPLIES(code_range.begin() != kNullAddress, !code_range.is_empty()); options.code_range_start = code_range.begin(); #endif @@ -180,7 +180,6 @@ AssemblerBase::AssemblerBase(const AssemblerOptions& options, : buffer_(std::move(buffer)), options_(options), enabled_cpu_features_(0), - emit_debug_code_(FLAG_debug_code), predictable_code_size_(false), constant_pool_available_(false), jump_optimization_info_(nullptr) { @@ -298,6 +297,7 @@ Handle<HeapObject> AssemblerBase::GetEmbeddedObject( int Assembler::WriteCodeComments() { + if (!FLAG_code_comments) return 0; CHECK_IMPLIES(code_comments_writer_.entry_count() > 0, options().emit_code_comments); if (code_comments_writer_.entry_count() == 0) return 0; diff --git a/deps/v8/src/codegen/assembler.h b/deps/v8/src/codegen/assembler.h index 7066905966..98cca61a7c 100644 --- a/deps/v8/src/codegen/assembler.h +++ b/deps/v8/src/codegen/assembler.h @@ -222,9 +222,6 @@ class V8_EXPORT_PRIVATE AssemblerBase : public Malloced { const AssemblerOptions& options() const { return options_; } - bool emit_debug_code() const { return emit_debug_code_; } - void set_emit_debug_code(bool value) { emit_debug_code_ = value; } - bool predictable_code_size() const { return predictable_code_size_; } void set_predictable_code_size(bool value) { predictable_code_size_ = value; } @@ -291,7 +288,10 @@ class V8_EXPORT_PRIVATE AssemblerBase : public Malloced { // Record an inline code comment that can be used by a disassembler. // Use --code-comments to enable. - void RecordComment(const char* msg) { + V8_INLINE void RecordComment(const char* msg) { + // Set explicit dependency on --code-comments for dead-code elimination in + // release builds. + if (!FLAG_code_comments) return; if (options().emit_code_comments) { code_comments_writer_.Add(pc_offset(), std::string(msg)); } @@ -346,7 +346,7 @@ class V8_EXPORT_PRIVATE AssemblerBase : public Malloced { DCHECK(!RelocInfo::IsNone(rmode)); if (options().disable_reloc_info_for_patching) return false; if (RelocInfo::IsOnlyForSerializer(rmode) && - !options().record_reloc_info_for_serialization && !emit_debug_code()) { + !options().record_reloc_info_for_serialization && !FLAG_debug_code) { return false; } return true; @@ -378,7 +378,6 @@ class V8_EXPORT_PRIVATE AssemblerBase : public Malloced { const AssemblerOptions options_; uint64_t enabled_cpu_features_; - bool emit_debug_code_; bool predictable_code_size_; // Indicates whether the constant pool can be accessed, which is only possible @@ -392,20 +391,6 @@ class V8_EXPORT_PRIVATE AssemblerBase : public Malloced { friend class ConstantPoolUnavailableScope; }; -// Avoids emitting debug code during the lifetime of this scope object. -class V8_NODISCARD DontEmitDebugCodeScope { - public: - explicit DontEmitDebugCodeScope(AssemblerBase* assembler) - : assembler_(assembler), old_value_(assembler->emit_debug_code()) { - assembler_->set_emit_debug_code(false); - } - ~DontEmitDebugCodeScope() { assembler_->set_emit_debug_code(old_value_); } - - private: - AssemblerBase* assembler_; - bool old_value_; -}; - // Enable a specified feature within a scope. class V8_EXPORT_PRIVATE V8_NODISCARD CpuFeatureScope { public: @@ -425,7 +410,7 @@ class V8_EXPORT_PRIVATE V8_NODISCARD CpuFeatureScope { #else CpuFeatureScope(AssemblerBase* assembler, CpuFeature f, CheckPolicy check = kCheckSupported) {} - ~CpuFeatureScope() { // NOLINT (modernize-use-equals-default) + ~CpuFeatureScope() { // Define a destructor to avoid unused variable warnings. } #endif diff --git a/deps/v8/src/codegen/bailout-reason.h b/deps/v8/src/codegen/bailout-reason.h index 57bbbca723..e8afa74e16 100644 --- a/deps/v8/src/codegen/bailout-reason.h +++ b/deps/v8/src/codegen/bailout-reason.h @@ -24,6 +24,7 @@ namespace internal { V(kExpectedFeedbackVector, "Expected feedback vector") \ V(kFunctionDataShouldBeBytecodeArrayOnInterpreterEntry, \ "The function_data field should be a BytecodeArray on interpreter entry") \ + V(kFpuTopIsNotZeroInDeoptimizer, "FPU TOP is not zero in deoptimizer") \ V(kInputStringTooLong, "Input string too long") \ V(kInvalidBytecode, "Invalid bytecode") \ V(kInvalidBytecodeAdvance, "Cannot advance current bytecode, ") \ diff --git a/deps/v8/src/codegen/code-factory.cc b/deps/v8/src/codegen/code-factory.cc index ece8200023..854969f8cb 100644 --- a/deps/v8/src/codegen/code-factory.cc +++ b/deps/v8/src/codegen/code-factory.cc @@ -31,25 +31,35 @@ Handle<Code> CodeFactory::CEntry(Isolate* isolate, int result_size, const ArgvMode am = argv_mode; const bool be = builtin_exit_frame; - if (rs == 1 && sd == kDontSaveFPRegs && am == kArgvOnStack && !be) { + if (rs == 1 && sd == SaveFPRegsMode::kIgnore && am == ArgvMode::kStack && + !be) { return CENTRY_CODE(Return1, DontSaveFPRegs, ArgvOnStack, NoBuiltinExit); - } else if (rs == 1 && sd == kDontSaveFPRegs && am == kArgvOnStack && be) { + } else if (rs == 1 && sd == SaveFPRegsMode::kIgnore && + am == ArgvMode::kStack && be) { return CENTRY_CODE(Return1, DontSaveFPRegs, ArgvOnStack, BuiltinExit); - } else if (rs == 1 && sd == kDontSaveFPRegs && am == kArgvInRegister && !be) { + } else if (rs == 1 && sd == SaveFPRegsMode::kIgnore && + am == ArgvMode::kRegister && !be) { return CENTRY_CODE(Return1, DontSaveFPRegs, ArgvInRegister, NoBuiltinExit); - } else if (rs == 1 && sd == kSaveFPRegs && am == kArgvOnStack && !be) { + } else if (rs == 1 && sd == SaveFPRegsMode::kSave && am == ArgvMode::kStack && + !be) { return CENTRY_CODE(Return1, SaveFPRegs, ArgvOnStack, NoBuiltinExit); - } else if (rs == 1 && sd == kSaveFPRegs && am == kArgvOnStack && be) { + } else if (rs == 1 && sd == SaveFPRegsMode::kSave && am == ArgvMode::kStack && + be) { return CENTRY_CODE(Return1, SaveFPRegs, ArgvOnStack, BuiltinExit); - } else if (rs == 2 && sd == kDontSaveFPRegs && am == kArgvOnStack && !be) { + } else if (rs == 2 && sd == SaveFPRegsMode::kIgnore && + am == ArgvMode::kStack && !be) { return CENTRY_CODE(Return2, DontSaveFPRegs, ArgvOnStack, NoBuiltinExit); - } else if (rs == 2 && sd == kDontSaveFPRegs && am == kArgvOnStack && be) { + } else if (rs == 2 && sd == SaveFPRegsMode::kIgnore && + am == ArgvMode::kStack && be) { return CENTRY_CODE(Return2, DontSaveFPRegs, ArgvOnStack, BuiltinExit); - } else if (rs == 2 && sd == kDontSaveFPRegs && am == kArgvInRegister && !be) { + } else if (rs == 2 && sd == SaveFPRegsMode::kIgnore && + am == ArgvMode::kRegister && !be) { return CENTRY_CODE(Return2, DontSaveFPRegs, ArgvInRegister, NoBuiltinExit); - } else if (rs == 2 && sd == kSaveFPRegs && am == kArgvOnStack && !be) { + } else if (rs == 2 && sd == SaveFPRegsMode::kSave && am == ArgvMode::kStack && + !be) { return CENTRY_CODE(Return2, SaveFPRegs, ArgvOnStack, NoBuiltinExit); - } else if (rs == 2 && sd == kSaveFPRegs && am == kArgvOnStack && be) { + } else if (rs == 2 && sd == SaveFPRegsMode::kSave && am == ArgvMode::kStack && + be) { return CENTRY_CODE(Return2, SaveFPRegs, ArgvOnStack, BuiltinExit); } @@ -70,7 +80,7 @@ Callable CodeFactory::CallApiCallback(Isolate* isolate) { // static Callable CodeFactory::LoadGlobalIC(Isolate* isolate, TypeofMode typeof_mode) { - return typeof_mode == NOT_INSIDE_TYPEOF + return typeof_mode == TypeofMode::kNotInside ? Builtins::CallableFor(isolate, Builtins::kLoadGlobalICTrampoline) : Builtins::CallableFor( isolate, Builtins::kLoadGlobalICInsideTypeofTrampoline); @@ -79,7 +89,7 @@ Callable CodeFactory::LoadGlobalIC(Isolate* isolate, TypeofMode typeof_mode) { // static Callable CodeFactory::LoadGlobalICInOptimizedCode(Isolate* isolate, TypeofMode typeof_mode) { - return typeof_mode == NOT_INSIDE_TYPEOF + return typeof_mode == TypeofMode::kNotInside ? Builtins::CallableFor(isolate, Builtins::kLoadGlobalIC) : Builtins::CallableFor(isolate, Builtins::kLoadGlobalICInsideTypeof); @@ -233,16 +243,6 @@ Callable CodeFactory::ResumeGenerator(Isolate* isolate) { } // static -Callable CodeFactory::FrameDropperTrampoline(Isolate* isolate) { - return Builtins::CallableFor(isolate, Builtins::kFrameDropperTrampoline); -} - -// static -Callable CodeFactory::HandleDebuggerStatement(Isolate* isolate) { - return Builtins::CallableFor(isolate, Builtins::kHandleDebuggerStatement); -} - -// static Callable CodeFactory::FastNewFunctionContext(Isolate* isolate, ScopeType scope_type) { switch (scope_type) { @@ -388,8 +388,8 @@ Callable CodeFactory::InterpreterPushArgsThenConstruct( Callable CodeFactory::InterpreterCEntry(Isolate* isolate, int result_size) { // Note: If we ever use fpregs in the interpreter then we will need to // save fpregs too. - Handle<Code> code = CodeFactory::CEntry(isolate, result_size, kDontSaveFPRegs, - kArgvInRegister); + Handle<Code> code = CodeFactory::CEntry( + isolate, result_size, SaveFPRegsMode::kIgnore, ArgvMode::kRegister); if (result_size == 1) { return Callable(code, InterpreterCEntry1Descriptor{}); } else { diff --git a/deps/v8/src/codegen/code-factory.h b/deps/v8/src/codegen/code-factory.h index aab2977045..e55de10533 100644 --- a/deps/v8/src/codegen/code-factory.h +++ b/deps/v8/src/codegen/code-factory.h @@ -28,10 +28,10 @@ class V8_EXPORT_PRIVATE CodeFactory final { // is exported here. static Handle<Code> RuntimeCEntry(Isolate* isolate, int result_size = 1); - static Handle<Code> CEntry(Isolate* isolate, int result_size = 1, - SaveFPRegsMode save_doubles = kDontSaveFPRegs, - ArgvMode argv_mode = kArgvOnStack, - bool builtin_exit_frame = false); + static Handle<Code> CEntry( + Isolate* isolate, int result_size = 1, + SaveFPRegsMode save_doubles = SaveFPRegsMode::kIgnore, + ArgvMode argv_mode = ArgvMode::kStack, bool builtin_exit_frame = false); // Initial states for ICs. static Callable LoadGlobalIC(Isolate* isolate, TypeofMode typeof_mode); @@ -49,9 +49,6 @@ class V8_EXPORT_PRIVATE CodeFactory final { static Callable ResumeGenerator(Isolate* isolate); - static Callable FrameDropperTrampoline(Isolate* isolate); - static Callable HandleDebuggerStatement(Isolate* isolate); - static Callable BinaryOperation(Isolate* isolate, Operation op); static Callable ApiGetter(Isolate* isolate); diff --git a/deps/v8/src/codegen/code-stub-assembler.cc b/deps/v8/src/codegen/code-stub-assembler.cc index 492e6aaf37..5995a766d1 100644 --- a/deps/v8/src/codegen/code-stub-assembler.cc +++ b/deps/v8/src/codegen/code-stub-assembler.cc @@ -103,7 +103,7 @@ void CodeStubAssembler::Check(const BranchGenerator& branch, std::initializer_list<ExtraNode> extra_nodes) { Label ok(this); Label not_ok(this, Label::kDeferred); - if (message != nullptr && FLAG_code_comments) { + if (message != nullptr) { Comment("[ Assert: ", message); } else { Comment("[ Assert"); @@ -1368,6 +1368,7 @@ TNode<HeapObject> CodeStubAssembler::AllocateInNewSpace( TNode<HeapObject> CodeStubAssembler::Allocate(TNode<IntPtrT> size_in_bytes, AllocationFlags flags) { Comment("Allocate"); + if (FLAG_single_generation) flags |= kPretenured; bool const new_space = !(flags & kPretenured); bool const allow_large_objects = flags & kAllowLargeObjectAllocation; // For optimized allocations, we don't allow the allocation to happen in a @@ -1574,8 +1575,8 @@ TNode<RawPtrT> CodeStubAssembler::LoadExternalPointerFromObject( TNode<UintPtrT> entry = Load<UintPtrT>(table, table_offset); if (external_pointer_tag != 0) { - TNode<UintPtrT> tag = UintPtrConstant(external_pointer_tag); - entry = UncheckedCast<UintPtrT>(WordXor(entry, tag)); + TNode<UintPtrT> tag = UintPtrConstant(~external_pointer_tag); + entry = UncheckedCast<UintPtrT>(WordAnd(entry, tag)); } return UncheckedCast<RawPtrT>(UncheckedCast<WordT>(entry)); #else @@ -1603,7 +1604,7 @@ void CodeStubAssembler::StoreExternalPointerToObject( TNode<UintPtrT> value = UncheckedCast<UintPtrT>(pointer); if (external_pointer_tag != 0) { TNode<UintPtrT> tag = UintPtrConstant(external_pointer_tag); - value = UncheckedCast<UintPtrT>(WordXor(pointer, tag)); + value = UncheckedCast<UintPtrT>(WordOr(pointer, tag)); } StoreNoWriteBarrier(MachineType::PointerRepresentation(), table, table_offset, value); @@ -1619,6 +1620,8 @@ TNode<Object> CodeStubAssembler::LoadFromParentFrame(int offset) { TNode<IntPtrT> CodeStubAssembler::LoadAndUntagObjectField( TNode<HeapObject> object, int offset) { + // Please use LoadMap(object) instead. + DCHECK_NE(offset, HeapObject::kMapOffset); if (SmiValuesAre32Bits()) { #if V8_TARGET_LITTLE_ENDIAN offset += 4; @@ -1631,6 +1634,8 @@ TNode<IntPtrT> CodeStubAssembler::LoadAndUntagObjectField( TNode<Int32T> CodeStubAssembler::LoadAndUntagToWord32ObjectField( TNode<HeapObject> object, int offset) { + // Please use LoadMap(object) instead. + DCHECK_NE(offset, HeapObject::kMapOffset); if (SmiValuesAre32Bits()) { #if V8_TARGET_LITTLE_ENDIAN offset += 4; @@ -1656,7 +1661,15 @@ TNode<Map> CodeStubAssembler::GetInstanceTypeMap(InstanceType instance_type) { } TNode<Map> CodeStubAssembler::LoadMap(TNode<HeapObject> object) { - return LoadObjectField<Map>(object, HeapObject::kMapOffset); + TNode<Map> map = LoadObjectField<Map>(object, HeapObject::kMapOffset); +#ifdef V8_MAP_PACKING + // Check the loaded map is unpacked. i.e. the lowest two bits != 0b10 + CSA_ASSERT(this, + WordNotEqual(WordAnd(BitcastTaggedToWord(map), + IntPtrConstant(Internals::kMapWordXorMask)), + IntPtrConstant(Internals::kMapWordSignature))); +#endif + return map; } TNode<Uint16T> CodeStubAssembler::LoadInstanceType(TNode<HeapObject> object) { @@ -2033,6 +2046,13 @@ void CodeStubAssembler::DispatchMaybeObject(TNode<MaybeObject> maybe_object, Goto(if_strong); } +void CodeStubAssembler::AssertHasValidMap(TNode<HeapObject> object) { +#ifdef V8_MAP_PACKING + // Test if the map is an unpacked and valid map + CSA_ASSERT(this, IsMap(LoadMap(object))); +#endif +} + TNode<BoolT> CodeStubAssembler::IsStrong(TNode<MaybeObject> value) { return Word32Equal(Word32And(TruncateIntPtrToInt32( BitcastTaggedToWordForTagAndSmiBits(value)), @@ -2943,12 +2963,14 @@ void CodeStubAssembler::StoreObjectField(TNode<HeapObject> object, void CodeStubAssembler::UnsafeStoreObjectFieldNoWriteBarrier( TNode<HeapObject> object, int offset, TNode<Object> value) { + DCHECK_NE(HeapObject::kMapOffset, offset); // Use StoreMap instead. OptimizedStoreFieldUnsafeNoWriteBarrier(MachineRepresentation::kTagged, object, offset, value); } void CodeStubAssembler::StoreMap(TNode<HeapObject> object, TNode<Map> map) { OptimizedStoreMap(object, map); + AssertHasValidMap(object); } void CodeStubAssembler::StoreMapNoWriteBarrier(TNode<HeapObject> object, @@ -2958,16 +2980,19 @@ void CodeStubAssembler::StoreMapNoWriteBarrier(TNode<HeapObject> object, void CodeStubAssembler::StoreMapNoWriteBarrier(TNode<HeapObject> object, TNode<Map> map) { - OptimizedStoreFieldAssertNoWriteBarrier(MachineRepresentation::kTaggedPointer, - object, HeapObject::kMapOffset, map); + OptimizedStoreMap(object, map); + AssertHasValidMap(object); } void CodeStubAssembler::StoreObjectFieldRoot(TNode<HeapObject> object, int offset, RootIndex root_index) { - if (RootsTable::IsImmortalImmovable(root_index)) { - StoreObjectFieldNoWriteBarrier(object, offset, LoadRoot(root_index)); + TNode<Object> root = LoadRoot(root_index); + if (offset == HeapObject::kMapOffset) { + StoreMap(object, CAST(root)); + } else if (RootsTable::IsImmortalImmovable(root_index)) { + StoreObjectFieldNoWriteBarrier(object, offset, root); } else { - StoreObjectField(object, offset, LoadRoot(root_index)); + StoreObjectField(object, offset, root); } } @@ -4762,7 +4787,11 @@ void CodeStubAssembler::MoveElements(ElementsKind kind, TNode<IntPtrT> length) { Label finished(this); Label needs_barrier(this); +#ifdef V8_DISABLE_WRITE_BARRIERS + const bool needs_barrier_check = false; +#else const bool needs_barrier_check = !IsDoubleElementsKind(kind); +#endif // V8_DISABLE_WRITE_BARRIERS DCHECK(IsFastElementsKind(kind)); CSA_ASSERT(this, IsFixedArrayWithKind(elements, kind)); @@ -4847,7 +4876,11 @@ void CodeStubAssembler::CopyElements(ElementsKind kind, WriteBarrierMode write_barrier) { Label finished(this); Label needs_barrier(this); +#ifdef V8_DISABLE_WRITE_BARRIERS + const bool needs_barrier_check = false; +#else const bool needs_barrier_check = !IsDoubleElementsKind(kind); +#endif // V8_DISABLE_WRITE_BARRIERS DCHECK(IsFastElementsKind(kind)); CSA_ASSERT(this, IsFixedArrayWithKind(dst_elements, kind)); @@ -5294,6 +5327,10 @@ TNode<FixedArrayBase> CodeStubAssembler::GrowElementsCapacity( return new_elements; } +template TNode<FixedArrayBase> CodeStubAssembler::GrowElementsCapacity<IntPtrT>( + TNode<HeapObject>, TNode<FixedArrayBase>, ElementsKind, ElementsKind, + TNode<IntPtrT>, TNode<IntPtrT>, compiler::CodeAssemblerLabel*); + void CodeStubAssembler::InitializeAllocationMemento( TNode<HeapObject> base, TNode<IntPtrT> base_allocation_size, TNode<AllocationSite> allocation_site) { @@ -6036,6 +6073,13 @@ TNode<BoolT> CodeStubAssembler::IsNoElementsProtectorCellInvalid() { return TaggedEqual(cell_value, invalid); } +TNode<BoolT> CodeStubAssembler::IsMegaDOMProtectorCellInvalid() { + TNode<Smi> invalid = SmiConstant(Protectors::kProtectorInvalid); + TNode<PropertyCell> cell = MegaDOMProtectorConstant(); + TNode<Object> cell_value = LoadObjectField(cell, PropertyCell::kValueOffset); + return TaggedEqual(cell_value, invalid); +} + TNode<BoolT> CodeStubAssembler::IsArrayIteratorProtectorCellInvalid() { TNode<Smi> invalid = SmiConstant(Protectors::kProtectorInvalid); TNode<PropertyCell> cell = ArrayIteratorProtectorConstant(); @@ -6285,14 +6329,27 @@ TNode<BoolT> CodeStubAssembler::IsJSObjectInstanceType( Int32Constant(FIRST_JS_OBJECT_TYPE)); } +TNode<BoolT> CodeStubAssembler::IsJSApiObjectInstanceType( + TNode<Int32T> instance_type) { + return InstanceTypeEqual(instance_type, JS_API_OBJECT_TYPE); +} + TNode<BoolT> CodeStubAssembler::IsJSObjectMap(TNode<Map> map) { return IsJSObjectInstanceType(LoadMapInstanceType(map)); } +TNode<BoolT> CodeStubAssembler::IsJSApiObjectMap(TNode<Map> map) { + return IsJSApiObjectInstanceType(LoadMapInstanceType(map)); +} + TNode<BoolT> CodeStubAssembler::IsJSObject(TNode<HeapObject> object) { return IsJSObjectMap(LoadMap(object)); } +TNode<BoolT> CodeStubAssembler::IsJSApiObject(TNode<HeapObject> object) { + return IsJSApiObjectMap(LoadMap(object)); +} + TNode<BoolT> CodeStubAssembler::IsJSFinalizationRegistryMap(TNode<Map> map) { return InstanceTypeEqual(LoadMapInstanceType(map), JS_FINALIZATION_REGISTRY_TYPE); @@ -7672,15 +7729,25 @@ TNode<Object> CodeStubAssembler::OrdinaryToPrimitive( TNode<Uint32T> CodeStubAssembler::DecodeWord32(TNode<Word32T> word32, uint32_t shift, uint32_t mask) { DCHECK_EQ((mask >> shift) << shift, mask); - return Unsigned(Word32And(Word32Shr(word32, static_cast<int>(shift)), - Int32Constant(mask >> shift))); + if ((std::numeric_limits<uint32_t>::max() >> shift) == + ((std::numeric_limits<uint32_t>::max() & mask) >> shift)) { + return Unsigned(Word32Shr(word32, static_cast<int>(shift))); + } else { + return Unsigned(Word32And(Word32Shr(word32, static_cast<int>(shift)), + Int32Constant(mask >> shift))); + } } TNode<UintPtrT> CodeStubAssembler::DecodeWord(TNode<WordT> word, uint32_t shift, uintptr_t mask) { DCHECK_EQ((mask >> shift) << shift, mask); - return Unsigned(WordAnd(WordShr(word, static_cast<int>(shift)), - IntPtrConstant(mask >> shift))); + if ((std::numeric_limits<uintptr_t>::max() >> shift) == + ((std::numeric_limits<uintptr_t>::max() & mask) >> shift)) { + return Unsigned(WordShr(word, static_cast<int>(shift))); + } else { + return Unsigned(WordAnd(WordShr(word, static_cast<int>(shift)), + IntPtrConstant(mask >> shift))); + } } TNode<Word32T> CodeStubAssembler::UpdateWord32(TNode<Word32T> word, @@ -8871,9 +8938,9 @@ void CodeStubAssembler::ForEachEnumerableOwnProperty( { Label slow_load(this, Label::kDeferred); - var_value = CallGetterIfAccessor(var_value.value(), object, - var_details.value(), context, - object, &slow_load, kCallJSGetter); + var_value = CallGetterIfAccessor( + var_value.value(), object, var_details.value(), context, object, + next_key, &slow_load, kCallJSGetter); Goto(&callback); BIND(&slow_load); @@ -9325,8 +9392,8 @@ template void CodeStubAssembler::LoadPropertyFromDictionary( // result of the getter call. TNode<Object> CodeStubAssembler::CallGetterIfAccessor( TNode<Object> value, TNode<HeapObject> holder, TNode<Uint32T> details, - TNode<Context> context, TNode<Object> receiver, Label* if_bailout, - GetOwnPropertyMode mode) { + TNode<Context> context, TNode<Object> receiver, TNode<Object> name, + Label* if_bailout, GetOwnPropertyMode mode) { TVARIABLE(Object, var_value, value); Label done(this), if_accessor_info(this, Label::kDeferred); @@ -9354,13 +9421,16 @@ TNode<Object> CodeStubAssembler::CallGetterIfAccessor( BIND(&if_callable); { - // Call the accessor. + // Call the accessor. No need to check side-effect mode here, since it + // will be checked later in DebugOnFunctionCall. var_value = Call(context, getter, receiver); Goto(&done); } BIND(&if_function_template_info); { + Label runtime(this, Label::kDeferred); + GotoIf(IsSideEffectFreeDebuggingActive(), &runtime); TNode<HeapObject> cached_property_name = LoadObjectField<HeapObject>( getter, FunctionTemplateInfo::kCachedPropertyNameOffset); GotoIfNot(IsTheHole(cached_property_name), if_bailout); @@ -9371,6 +9441,13 @@ TNode<Object> CodeStubAssembler::CallGetterIfAccessor( Builtins::kCallFunctionTemplate_CheckAccessAndCompatibleReceiver, creation_context, getter, IntPtrConstant(0), receiver); Goto(&done); + + BIND(&runtime); + { + var_value = CallRuntime(Runtime::kGetProperty, context, holder, name, + receiver); + Goto(&done); + } } } else { Goto(&done); @@ -9505,7 +9582,7 @@ void CodeStubAssembler::TryGetOwnProperty( } TNode<Object> value = CallGetterIfAccessor(var_value->value(), object, var_details->value(), - context, receiver, if_bailout, mode); + context, receiver, unique_name, if_bailout, mode); *var_value = value; Goto(if_found_value); } @@ -9554,6 +9631,7 @@ void CodeStubAssembler::TryLookupElement( BIGUINT64_ELEMENTS, BIGINT64_ELEMENTS, }; + // TODO(v8:11111): Support RAB / GSAB. Label* labels[] = { &if_isobjectorsmi, &if_isobjectorsmi, &if_isobjectorsmi, &if_isobjectorsmi, &if_isobjectorsmi, &if_isobjectorsmi, @@ -10811,6 +10889,12 @@ void CodeStubAssembler::EmitElementStore( TNode<Context> context, TVariable<Object>* maybe_converted_value) { CSA_ASSERT(this, Word32BinaryNot(IsJSProxy(object))); + // TODO(v8:11111): Fast path for RAB / GSAB backed TypedArrays. + if (IsRabGsabTypedArrayElementsKind(elements_kind)) { + GotoIf(Int32TrueConstant(), bailout); + return; + } + TNode<FixedArrayBase> elements = LoadElements(object); if (!(IsSmiOrObjectElementsKind(elements_kind) || IsSealedElementsKind(elements_kind) || @@ -11057,6 +11141,8 @@ void CodeStubAssembler::TrapAllocationMemento(TNode<JSObject> object, // Bail out if the object is not in new space. TNode<IntPtrT> object_word = BitcastTaggedToWord(object); + // TODO(v8:11641): Skip TrapAllocationMemento when allocation-site + // tracking is disabled. TNode<IntPtrT> object_page = PageFromAddress(object_word); { TNode<IntPtrT> page_flags = @@ -11102,15 +11188,19 @@ void CodeStubAssembler::TrapAllocationMemento(TNode<JSObject> object, // Memento map check. BIND(&map_check); { - TNode<Object> memento_map = LoadObjectField(object, kMementoMapOffset); - Branch(TaggedEqual(memento_map, AllocationMementoMapConstant()), - memento_found, &no_memento_found); + TNode<AnyTaggedT> maybe_mapword = + LoadObjectField(object, kMementoMapOffset); + TNode<AnyTaggedT> memento_mapword = + LoadRootMapWord(RootIndex::kAllocationMementoMap); + Branch(TaggedEqual(maybe_mapword, memento_mapword), memento_found, + &no_memento_found); } BIND(&no_memento_found); Comment("] TrapAllocationMemento"); } TNode<IntPtrT> CodeStubAssembler::PageFromAddress(TNode<IntPtrT> address) { + if (FLAG_enable_third_party_heap) Unreachable(); return WordAnd(address, IntPtrConstant(~kPageAlignmentMask)); } @@ -11323,7 +11413,12 @@ void CodeStubAssembler::InitializeFieldsWithRoot(TNode<HeapObject> object, CSA_SLOW_ASSERT(this, TaggedIsNotSmi(object)); start_offset = IntPtrAdd(start_offset, IntPtrConstant(-kHeapObjectTag)); end_offset = IntPtrAdd(end_offset, IntPtrConstant(-kHeapObjectTag)); - TNode<Object> root_value = LoadRoot(root_index); + TNode<AnyTaggedT> root_value; + if (root_index == RootIndex::kOnePointerFillerMap) { + root_value = LoadRootMapWord(root_index); + } else { + root_value = LoadRoot(root_index); + } BuildFastLoop<IntPtrT>( end_offset, start_offset, [=](TNode<IntPtrT> current) { @@ -13597,6 +13692,149 @@ TNode<UintPtrT> CodeStubAssembler::LoadJSTypedArrayLength( return LoadObjectField<UintPtrT>(typed_array, JSTypedArray::kLengthOffset); } +// ES #sec-integerindexedobjectlength +TNode<UintPtrT> CodeStubAssembler::LoadVariableLengthJSTypedArrayLength( + TNode<JSTypedArray> array, TNode<JSArrayBuffer> buffer, Label* miss) { + Label is_gsab(this), is_rab(this), end(this); + TVARIABLE(UintPtrT, result); + + Branch(IsSharedArrayBuffer(buffer), &is_gsab, &is_rab); + BIND(&is_gsab); + { + // Non-length-tracking GSAB-backed TypedArrays shouldn't end up here. + CSA_ASSERT(this, IsLengthTrackingTypedArray(array)); + // Read the byte length from the BackingStore. + const TNode<ExternalReference> length_function = ExternalConstant( + ExternalReference::length_tracking_gsab_backed_typed_array_length()); + TNode<ExternalReference> isolate_ptr = + ExternalConstant(ExternalReference::isolate_address(isolate())); + result = UncheckedCast<UintPtrT>( + CallCFunction(length_function, MachineType::UintPtr(), + std::make_pair(MachineType::Pointer(), isolate_ptr), + std::make_pair(MachineType::AnyTagged(), array))); + Goto(&end); + } + + BIND(&is_rab); + { + GotoIf(IsDetachedBuffer(buffer), miss); + + TNode<UintPtrT> buffer_byte_length = LoadJSArrayBufferByteLength(buffer); + TNode<UintPtrT> array_byte_offset = LoadJSArrayBufferViewByteOffset(array); + + Label is_length_tracking(this), not_length_tracking(this); + Branch(IsLengthTrackingTypedArray(array), &is_length_tracking, + ¬_length_tracking); + + BIND(&is_length_tracking); + { + // The backing RAB might have been shrunk so that the start of the + // TypedArray is already out of bounds. + GotoIfNot(UintPtrLessThanOrEqual(array_byte_offset, buffer_byte_length), + miss); + // length = (buffer_byte_length - byte_offset) / element_size + // Conversion to signed is OK since buffer_byte_length < + // JSArrayBuffer::kMaxByteLength. + TNode<IntPtrT> element_size = + RabGsabElementsKindToElementByteSize(LoadElementsKind(array)); + TNode<IntPtrT> length = + IntPtrDiv(Signed(UintPtrSub(buffer_byte_length, array_byte_offset)), + element_size); + result = Unsigned(length); + Goto(&end); + } + + BIND(¬_length_tracking); + { + // Check if the backing RAB has shrunk so that the buffer is out of + // bounds. + TNode<UintPtrT> array_byte_length = + LoadJSArrayBufferViewByteLength(array); + GotoIfNot(UintPtrGreaterThanOrEqual( + buffer_byte_length, + UintPtrAdd(array_byte_offset, array_byte_length)), + miss); + result = LoadJSTypedArrayLength(array); + Goto(&end); + } + } + BIND(&end); + return result.value(); +} + +// ES #sec-integerindexedobjectbytelength +TNode<UintPtrT> CodeStubAssembler::LoadVariableLengthJSTypedArrayByteLength( + TNode<Context> context, TNode<JSTypedArray> array, + TNode<JSArrayBuffer> buffer) { + Label miss(this), end(this); + TVARIABLE(UintPtrT, result); + + TNode<UintPtrT> length = + LoadVariableLengthJSTypedArrayLength(array, buffer, &miss); + TNode<IntPtrT> element_size = + RabGsabElementsKindToElementByteSize(LoadElementsKind(array)); + // Conversion to signed is OK since length < JSArrayBuffer::kMaxByteLength. + TNode<IntPtrT> byte_length = IntPtrMul(Signed(length), element_size); + result = Unsigned(byte_length); + Goto(&end); + BIND(&miss); + { + result = UintPtrConstant(0); + Goto(&end); + } + BIND(&end); + return result.value(); +} + +TNode<IntPtrT> CodeStubAssembler::RabGsabElementsKindToElementByteSize( + TNode<Int32T> elements_kind) { + TVARIABLE(IntPtrT, result); + Label elements_8(this), elements_16(this), elements_32(this), + elements_64(this), not_found(this), end(this); + int32_t elements_kinds[] = { + RAB_GSAB_UINT8_ELEMENTS, RAB_GSAB_UINT8_CLAMPED_ELEMENTS, + RAB_GSAB_INT8_ELEMENTS, RAB_GSAB_UINT16_ELEMENTS, + RAB_GSAB_INT16_ELEMENTS, RAB_GSAB_UINT32_ELEMENTS, + RAB_GSAB_INT32_ELEMENTS, RAB_GSAB_FLOAT32_ELEMENTS, + RAB_GSAB_FLOAT64_ELEMENTS, RAB_GSAB_BIGINT64_ELEMENTS, + RAB_GSAB_BIGUINT64_ELEMENTS}; + Label* elements_kind_labels[] = {&elements_8, &elements_8, &elements_8, + &elements_16, &elements_16, &elements_32, + &elements_32, &elements_32, &elements_64, + &elements_64, &elements_64}; + const size_t kTypedElementsKindCount = + LAST_RAB_GSAB_FIXED_TYPED_ARRAY_ELEMENTS_KIND - + FIRST_RAB_GSAB_FIXED_TYPED_ARRAY_ELEMENTS_KIND + 1; + DCHECK_EQ(kTypedElementsKindCount, arraysize(elements_kinds)); + DCHECK_EQ(kTypedElementsKindCount, arraysize(elements_kind_labels)); + Switch(elements_kind, ¬_found, elements_kinds, elements_kind_labels, + kTypedElementsKindCount); + BIND(&elements_8); + { + result = IntPtrConstant(1); + Goto(&end); + } + BIND(&elements_16); + { + result = IntPtrConstant(2); + Goto(&end); + } + BIND(&elements_32); + { + result = IntPtrConstant(4); + Goto(&end); + } + BIND(&elements_64); + { + result = IntPtrConstant(8); + Goto(&end); + } + BIND(¬_found); + { Unreachable(); } + BIND(&end); + return result.value(); +} + TNode<JSArrayBuffer> CodeStubAssembler::GetTypedArrayBuffer( TNode<Context> context, TNode<JSTypedArray> array) { Label call_runtime(this), done(this); @@ -13799,6 +14037,17 @@ TNode<BoolT> CodeStubAssembler::IsDebugActive() { return Word32NotEqual(is_debug_active, Int32Constant(0)); } +TNode<BoolT> CodeStubAssembler::IsSideEffectFreeDebuggingActive() { + TNode<Uint8T> debug_execution_mode = Load<Uint8T>(ExternalConstant( + ExternalReference::debug_execution_mode_address(isolate()))); + + TNode<BoolT> is_active = + Word32Equal(debug_execution_mode, + Int32Constant(DebugInfo::ExecutionMode::kSideEffects)); + + return is_active; +} + TNode<BoolT> CodeStubAssembler::HasAsyncEventDelegate() { const TNode<RawPtrT> async_event_delegate = Load<RawPtrT>(ExternalConstant( ExternalReference::async_event_delegate_address(isolate()))); @@ -13837,18 +14086,8 @@ TNode<BoolT> CodeStubAssembler:: return IsSetWord32(flags, mask); } -TNode<BoolT> CodeStubAssembler:: - IsAnyPromiseHookEnabledOrDebugIsActiveOrHasAsyncEventDelegate( - TNode<Uint32T> flags) { - return Word32NotEqual(flags, Int32Constant(0)); -} - TNode<BoolT> CodeStubAssembler::NeedsAnyPromiseHooks(TNode<Uint32T> flags) { - uint32_t mask = Isolate::PromiseHookFields::HasContextPromiseHook::kMask | - Isolate::PromiseHookFields::HasIsolatePromiseHook::kMask | - Isolate::PromiseHookFields::HasAsyncEventDelegate::kMask | - Isolate::PromiseHookFields::IsDebugActive::kMask; - return IsSetWord32(flags, mask); + return Word32NotEqual(flags, Int32Constant(0)); } TNode<Code> CodeStubAssembler::LoadBuiltin(TNode<Smi> builtin_id) { diff --git a/deps/v8/src/codegen/code-stub-assembler.h b/deps/v8/src/codegen/code-stub-assembler.h index 24204d82f8..9b54b5014e 100644 --- a/deps/v8/src/codegen/code-stub-assembler.h +++ b/deps/v8/src/codegen/code-stub-assembler.h @@ -67,6 +67,7 @@ enum class PrimitiveType { kBoolean, kNumber, kString, kSymbol }; AsyncIteratorValueUnwrapSharedFun) \ V(MapIteratorProtector, map_iterator_protector, MapIteratorProtector) \ V(NoElementsProtector, no_elements_protector, NoElementsProtector) \ + V(MegaDOMProtector, mega_dom_protector, MegaDOMProtector) \ V(NumberStringCache, number_string_cache, NumberStringCache) \ V(PromiseAllResolveElementSharedFun, promise_all_resolve_element_shared_fun, \ PromiseAllResolveElementSharedFun) \ @@ -157,6 +158,7 @@ enum class PrimitiveType { kBoolean, kNumber, kString, kSymbol }; V(ManyClosuresCellMap, many_closures_cell_map, ManyClosuresCellMap) \ V(match_symbol, match_symbol, MatchSymbol) \ V(megamorphic_symbol, megamorphic_symbol, MegamorphicSymbol) \ + V(mega_dom_symbol, mega_dom_symbol, MegaDOMSymbol) \ V(message_string, message_string, MessageString) \ V(minus_Infinity_string, minus_Infinity_string, MinusInfinityString) \ V(MinusZeroValue, minus_zero_value, MinusZero) \ @@ -1088,7 +1090,19 @@ class V8_EXPORT_PRIVATE CodeStubAssembler } // Load a field from an object on the heap. template <class T, typename std::enable_if< - std::is_convertible<TNode<T>, TNode<Object>>::value, + std::is_convertible<TNode<T>, TNode<Object>>::value && + std::is_base_of<T, Map>::value, + int>::type = 0> + TNode<T> LoadObjectField(TNode<HeapObject> object, int offset) { + const MachineType machine_type = offset == HeapObject::kMapOffset + ? MachineType::MapInHeader() + : MachineTypeOf<T>::value; + return CAST(LoadFromObject(machine_type, object, + IntPtrConstant(offset - kHeapObjectTag))); + } + template <class T, typename std::enable_if< + std::is_convertible<TNode<T>, TNode<Object>>::value && + !std::is_base_of<T, Map>::value, int>::type = 0> TNode<T> LoadObjectField(TNode<HeapObject> object, int offset) { return CAST(LoadFromObject(MachineTypeOf<T>::value, object, @@ -1163,6 +1177,12 @@ class V8_EXPORT_PRIVATE CodeStubAssembler std::is_convertible<TNode<T>, TNode<Object>>::value, int>::type = 0> TNode<T> LoadReference(Reference reference) { + if (IsMapOffsetConstant(reference.offset)) { + TNode<Map> map = LoadMap(CAST(reference.object)); + DCHECK((std::is_base_of<T, Map>::value)); + return ReinterpretCast<T>(map); + } + TNode<IntPtrT> offset = IntPtrSub(reference.offset, IntPtrConstant(kHeapObjectTag)); CSA_ASSERT(this, TaggedIsNotSmi(reference.object)); @@ -1175,6 +1195,7 @@ class V8_EXPORT_PRIVATE CodeStubAssembler std::is_same<T, MaybeObject>::value, int>::type = 0> TNode<T> LoadReference(Reference reference) { + DCHECK(!IsMapOffsetConstant(reference.offset)); TNode<IntPtrT> offset = IntPtrSub(reference.offset, IntPtrConstant(kHeapObjectTag)); return UncheckedCast<T>( @@ -1185,6 +1206,10 @@ class V8_EXPORT_PRIVATE CodeStubAssembler std::is_same<T, MaybeObject>::value, int>::type = 0> void StoreReference(Reference reference, TNode<T> value) { + if (IsMapOffsetConstant(reference.offset)) { + DCHECK((std::is_base_of<T, Map>::value)); + return StoreMap(CAST(reference.object), ReinterpretCast<Map>(value)); + } MachineRepresentation rep = MachineRepresentationOf<T>::value; StoreToObjectWriteBarrier write_barrier = StoreToObjectWriteBarrier::kFull; if (std::is_same<T, Smi>::value) { @@ -1201,6 +1226,7 @@ class V8_EXPORT_PRIVATE CodeStubAssembler std::is_convertible<TNode<T>, TNode<UntaggedT>>::value, int>::type = 0> void StoreReference(Reference reference, TNode<T> value) { + DCHECK(!IsMapOffsetConstant(reference.offset)); TNode<IntPtrT> offset = IntPtrSub(reference.offset, IntPtrConstant(kHeapObjectTag)); StoreToObject(MachineRepresentationOf<T>::value, reference.object, offset, @@ -2346,6 +2372,7 @@ class V8_EXPORT_PRIVATE CodeStubAssembler // JSProxy or an object with interceptors. TNode<BoolT> InstanceTypeEqual(TNode<Int32T> instance_type, int type); TNode<BoolT> IsNoElementsProtectorCellInvalid(); + TNode<BoolT> IsMegaDOMProtectorCellInvalid(); TNode<BoolT> IsArrayIteratorProtectorCellInvalid(); TNode<BoolT> IsBigIntInstanceType(TNode<Int32T> instance_type); TNode<BoolT> IsBigInt(TNode<HeapObject> object); @@ -2395,6 +2422,9 @@ class V8_EXPORT_PRIVATE CodeStubAssembler TNode<BoolT> IsJSObjectInstanceType(TNode<Int32T> instance_type); TNode<BoolT> IsJSObjectMap(TNode<Map> map); TNode<BoolT> IsJSObject(TNode<HeapObject> object); + TNode<BoolT> IsJSApiObjectInstanceType(TNode<Int32T> instance_type); + TNode<BoolT> IsJSApiObjectMap(TNode<Map> map); + TNode<BoolT> IsJSApiObject(TNode<HeapObject> object); TNode<BoolT> IsJSFinalizationRegistryMap(TNode<Map> map); TNode<BoolT> IsJSFinalizationRegistry(TNode<HeapObject> object); TNode<BoolT> IsJSPromiseMap(TNode<Map> map); @@ -3451,6 +3481,7 @@ class V8_EXPORT_PRIVATE CodeStubAssembler // Debug helpers TNode<BoolT> IsDebugActive(); + TNode<BoolT> IsSideEffectFreeDebuggingActive(); // JSArrayBuffer helpers TNode<RawPtrT> LoadJSArrayBufferBackingStorePtr( @@ -3464,6 +3495,7 @@ class V8_EXPORT_PRIVATE CodeStubAssembler TNode<JSArrayBufferView> array_buffer_view); TNode<UintPtrT> LoadJSArrayBufferViewByteLength( TNode<JSArrayBufferView> array_buffer_view); + TNode<UintPtrT> LoadJSArrayBufferViewByteOffset( TNode<JSArrayBufferView> array_buffer_view); void ThrowIfArrayBufferViewBufferIsDetached( @@ -3472,6 +3504,17 @@ class V8_EXPORT_PRIVATE CodeStubAssembler // JSTypedArray helpers TNode<UintPtrT> LoadJSTypedArrayLength(TNode<JSTypedArray> typed_array); + // Helper for length tracking JSTypedArrays and JSTypedArrays backed by + // ResizableArrayBuffer. + TNode<UintPtrT> LoadVariableLengthJSTypedArrayLength( + TNode<JSTypedArray> array, TNode<JSArrayBuffer> buffer, Label* miss); + // Helper for length tracking JSTypedArrays and JSTypedArrays backed by + // ResizableArrayBuffer. + TNode<UintPtrT> LoadVariableLengthJSTypedArrayByteLength( + TNode<Context> context, TNode<JSTypedArray> array, + TNode<JSArrayBuffer> buffer); + TNode<IntPtrT> RabGsabElementsKindToElementByteSize( + TNode<Int32T> elementsKind); TNode<RawPtrT> LoadJSTypedArrayDataPtr(TNode<JSTypedArray> typed_array); TNode<JSArrayBuffer> GetTypedArrayBuffer(TNode<Context> context, TNode<JSTypedArray> array); @@ -3528,13 +3571,6 @@ class V8_EXPORT_PRIVATE CodeStubAssembler return IsIsolatePromiseHookEnabledOrDebugIsActiveOrHasAsyncEventDelegate( PromiseHookFlags()); } - TNode<BoolT> IsAnyPromiseHookEnabledOrDebugIsActiveOrHasAsyncEventDelegate( - TNode<Uint32T> flags); - TNode<BoolT> - IsAnyPromiseHookEnabledOrDebugIsActiveOrHasAsyncEventDelegate() { - return IsAnyPromiseHookEnabledOrDebugIsActiveOrHasAsyncEventDelegate( - PromiseHookFlags()); - } TNode<BoolT> NeedsAnyPromiseHooks(TNode<Uint32T> flags); TNode<BoolT> NeedsAnyPromiseHooks() { @@ -3600,6 +3636,7 @@ class V8_EXPORT_PRIVATE CodeStubAssembler } int32_t ConstexprWord32Or(int32_t a, int32_t b) { return a | b; } + uint32_t ConstexprWord32Shl(uint32_t a, int32_t b) { return a << b; } bool ConstexprUintPtrLessThan(uintptr_t a, uintptr_t b) { return a < b; } @@ -3712,12 +3749,10 @@ class V8_EXPORT_PRIVATE CodeStubAssembler const ForEachKeyValueFunction& body, Label* bailout); - TNode<Object> CallGetterIfAccessor(TNode<Object> value, - TNode<HeapObject> holder, - TNode<Uint32T> details, - TNode<Context> context, - TNode<Object> receiver, Label* if_bailout, - GetOwnPropertyMode mode = kCallJSGetter); + TNode<Object> CallGetterIfAccessor( + TNode<Object> value, TNode<HeapObject> holder, TNode<Uint32T> details, + TNode<Context> context, TNode<Object> receiver, TNode<Object> name, + Label* if_bailout, GetOwnPropertyMode mode = kCallJSGetter); TNode<IntPtrT> TryToIntptr(TNode<Object> key, Label* if_not_intptr, TVariable<Int32T>* var_instance_type = nullptr); @@ -3916,6 +3951,10 @@ class V8_EXPORT_PRIVATE CodeStubAssembler return CodeAssembler::LoadRoot(root_index); } + TNode<AnyTaggedT> LoadRootMapWord(RootIndex root_index) { + return CodeAssembler::LoadRootMapWord(root_index); + } + template <typename TIndex> void StoreFixedArrayOrPropertyArrayElement( TNode<UnionT<FixedArray, PropertyArray>> array, TNode<TIndex> index, @@ -3955,6 +3994,8 @@ class V8_EXPORT_PRIVATE CodeStubAssembler TVariable<Number>* var_result, Label* if_bailout); + void AssertHasValidMap(TNode<HeapObject> object); + template <typename TValue> void EmitElementStoreTypedArray(TNode<JSTypedArray> typed_array, TNode<IntPtrT> key, TNode<Object> value, diff --git a/deps/v8/src/codegen/compilation-cache.cc b/deps/v8/src/codegen/compilation-cache.cc index 3941e56e6a..ee50f8b015 100644 --- a/deps/v8/src/codegen/compilation-cache.cc +++ b/deps/v8/src/codegen/compilation-cache.cc @@ -29,10 +29,9 @@ CompilationCache::CompilationCache(Isolate* isolate) eval_global_(isolate), eval_contextual_(isolate), reg_exp_(isolate, kRegExpGenerations), - code_(isolate), enabled_script_and_eval_(true) { CompilationSubCache* subcaches[kSubCacheCount] = { - &script_, &eval_global_, &eval_contextual_, ®_exp_, &code_}; + &script_, &eval_global_, &eval_contextual_, ®_exp_}; for (int i = 0; i < kSubCacheCount; ++i) { subcaches_[i] = subcaches[i]; } @@ -77,10 +76,6 @@ void CompilationCacheScript::Age() { } void CompilationCacheEval::Age() { AgeCustom(this); } void CompilationCacheRegExp::Age() { AgeByGeneration(this); } -void CompilationCacheCode::Age() { - if (FLAG_trace_turbo_nci) CompilationCacheCode::TraceAgeing(); - AgeByGeneration(this); -} void CompilationSubCache::Iterate(RootVisitor* v) { v->VisitRootPointers(Root::kCompilationCache, nullptr, @@ -267,58 +262,6 @@ void CompilationCacheRegExp::Put(Handle<String> source, JSRegExp::Flags flags, CompilationCacheTable::PutRegExp(isolate(), table, source, flags, data)); } -MaybeHandle<Code> CompilationCacheCode::Lookup(Handle<SharedFunctionInfo> key) { - // Make sure not to leak the table into the surrounding handle - // scope. Otherwise, we risk keeping old tables around even after - // having cleared the cache. - HandleScope scope(isolate()); - MaybeHandle<Code> maybe_value; - int generation = 0; - for (; generation < generations(); generation++) { - Handle<CompilationCacheTable> table = GetTable(generation); - maybe_value = table->LookupCode(key); - if (!maybe_value.is_null()) break; - } - - if (maybe_value.is_null()) { - isolate()->counters()->compilation_cache_misses()->Increment(); - return MaybeHandle<Code>(); - } - - Handle<Code> value = maybe_value.ToHandleChecked(); - if (generation != 0) Put(key, value); // Add to the first generation. - isolate()->counters()->compilation_cache_hits()->Increment(); - return scope.CloseAndEscape(value); -} - -void CompilationCacheCode::Put(Handle<SharedFunctionInfo> key, - Handle<Code> value) { - HandleScope scope(isolate()); - Handle<CompilationCacheTable> table = GetFirstTable(); - SetFirstTable(CompilationCacheTable::PutCode(isolate(), table, key, value)); -} - -void CompilationCacheCode::TraceAgeing() { - DCHECK(FLAG_trace_turbo_nci); - StdoutStream os; - os << "NCI cache ageing: Removing oldest generation" << std::endl; -} - -void CompilationCacheCode::TraceInsertion(Handle<SharedFunctionInfo> key, - Handle<Code> value) { - DCHECK(FLAG_trace_turbo_nci); - StdoutStream os; - os << "NCI cache insertion: " << Brief(*key) << ", " << Brief(*value) - << std::endl; -} - -void CompilationCacheCode::TraceHit(Handle<SharedFunctionInfo> key, - Handle<Code> value) { - DCHECK(FLAG_trace_turbo_nci); - StdoutStream os; - os << "NCI cache hit: " << Brief(*key) << ", " << Brief(*value) << std::endl; -} - void CompilationCache::Remove(Handle<SharedFunctionInfo> function_info) { if (!IsEnabledScriptAndEval()) return; @@ -372,10 +315,6 @@ MaybeHandle<FixedArray> CompilationCache::LookupRegExp(Handle<String> source, return reg_exp_.Lookup(source, flags); } -MaybeHandle<Code> CompilationCache::LookupCode(Handle<SharedFunctionInfo> sfi) { - return code_.Lookup(sfi); -} - void CompilationCache::PutScript(Handle<String> source, LanguageMode language_mode, Handle<SharedFunctionInfo> function_info) { @@ -414,11 +353,6 @@ void CompilationCache::PutRegExp(Handle<String> source, JSRegExp::Flags flags, reg_exp_.Put(source, flags, data); } -void CompilationCache::PutCode(Handle<SharedFunctionInfo> shared, - Handle<Code> code) { - code_.Put(shared, code); -} - void CompilationCache::Clear() { for (int i = 0; i < kSubCacheCount; i++) { subcaches_[i]->Clear(); diff --git a/deps/v8/src/codegen/compilation-cache.h b/deps/v8/src/codegen/compilation-cache.h index 0ed13e53b6..d4f4ae52dc 100644 --- a/deps/v8/src/codegen/compilation-cache.h +++ b/deps/v8/src/codegen/compilation-cache.h @@ -150,32 +150,6 @@ class CompilationCacheRegExp : public CompilationSubCache { DISALLOW_IMPLICIT_CONSTRUCTORS(CompilationCacheRegExp); }; -// Sub-cache for Code objects. All code inserted into this cache must -// be usable across different native contexts. -class CompilationCacheCode : public CompilationSubCache { - public: - explicit CompilationCacheCode(Isolate* isolate) - : CompilationSubCache(isolate, kGenerations) {} - - MaybeHandle<Code> Lookup(Handle<SharedFunctionInfo> key); - void Put(Handle<SharedFunctionInfo> key, Handle<Code> value); - - void Age() override; - - // TODO(jgruber,v8:8888): For simplicity we use the generational - // approach here, but could consider something else (or more - // generations) in the future. - static constexpr int kGenerations = 2; - - static void TraceAgeing(); - static void TraceInsertion(Handle<SharedFunctionInfo> key, - Handle<Code> value); - static void TraceHit(Handle<SharedFunctionInfo> key, Handle<Code> value); - - private: - DISALLOW_IMPLICIT_CONSTRUCTORS(CompilationCacheCode); -}; - // The compilation cache keeps shared function infos for compiled // scripts and evals. The shared function infos are looked up using // the source string as the key. For regular expressions the @@ -206,8 +180,6 @@ class V8_EXPORT_PRIVATE CompilationCache { MaybeHandle<FixedArray> LookupRegExp(Handle<String> source, JSRegExp::Flags flags); - MaybeHandle<Code> LookupCode(Handle<SharedFunctionInfo> sfi); - // Associate the (source, kind) pair to the shared function // info. This may overwrite an existing mapping. void PutScript(Handle<String> source, LanguageMode language_mode, @@ -225,8 +197,6 @@ class V8_EXPORT_PRIVATE CompilationCache { void PutRegExp(Handle<String> source, JSRegExp::Flags flags, Handle<FixedArray> data); - void PutCode(Handle<SharedFunctionInfo> shared, Handle<Code> code); - // Clear the cache - also used to initialize the cache at startup. void Clear(); @@ -269,9 +239,8 @@ class V8_EXPORT_PRIVATE CompilationCache { CompilationCacheEval eval_global_; CompilationCacheEval eval_contextual_; CompilationCacheRegExp reg_exp_; - CompilationCacheCode code_; - static constexpr int kSubCacheCount = 5; + static constexpr int kSubCacheCount = 4; CompilationSubCache* subcaches_[kSubCacheCount]; // Current enable state of the compilation cache for scripts and eval. diff --git a/deps/v8/src/codegen/compiler.cc b/deps/v8/src/codegen/compiler.cc index e46639d90a..9de4ae24a3 100644 --- a/deps/v8/src/codegen/compiler.cc +++ b/deps/v8/src/codegen/compiler.cc @@ -559,10 +559,10 @@ void InstallInterpreterTrampolineCopy( script_name, line_num, column_num)); } -template <typename LocalIsolate> +template <typename IsolateT> void InstallUnoptimizedCode(UnoptimizedCompilationInfo* compilation_info, Handle<SharedFunctionInfo> shared_info, - LocalIsolate* isolate) { + IsolateT* isolate) { if (compilation_info->has_bytecode_array()) { DCHECK(!shared_info->HasBytecodeArray()); // Only compiled once. DCHECK(!compilation_info->has_asm_wasm_data()); @@ -585,7 +585,7 @@ void InstallUnoptimizedCode(UnoptimizedCompilationInfo* compilation_info, #if V8_ENABLE_WEBASSEMBLY DCHECK(compilation_info->has_asm_wasm_data()); // We should only have asm/wasm data when finalizing on the main thread. - DCHECK((std::is_same<LocalIsolate, Isolate>::value)); + DCHECK((std::is_same<IsolateT, Isolate>::value)); shared_info->set_asm_wasm_data(*compilation_info->asm_wasm_data()); shared_info->set_feedback_metadata( ReadOnlyRoots(isolate).empty_feedback_metadata()); @@ -606,13 +606,15 @@ void LogUnoptimizedCompilation(Isolate* isolate, RecordUnoptimizedCompilationStats(isolate, shared_info); } -template <typename LocalIsolate> +template <typename IsolateT> void EnsureSharedFunctionInfosArrayOnScript(Handle<Script> script, ParseInfo* parse_info, - LocalIsolate* isolate) { + IsolateT* isolate) { DCHECK(parse_info->flags().is_toplevel()); - if (script->shared_function_infos().length() > 0) { - DCHECK_EQ(script->shared_function_infos().length(), + if (script->shared_function_info_count() > 0) { + DCHECK_LE(script->shared_function_info_count(), + script->shared_function_infos().length()); + DCHECK_EQ(script->shared_function_info_count(), parse_info->max_function_literal_id() + 1); return; } @@ -640,26 +642,6 @@ void UpdateSharedFunctionFlagsAfterCompilation(FunctionLiteral* literal, shared_info.SetScopeInfo(*literal->scope()->scope_info()); } -bool CanCompileWithBaseline(Isolate* isolate, - Handle<SharedFunctionInfo> shared) { - // Check if we actually have bytecode. - if (!shared->HasBytecodeArray()) return false; - - // Do not optimize when debugger needs to hook into every call. - if (isolate->debug()->needs_check_on_function_call()) return false; - - // Functions with breakpoints have to stay interpreted. - if (shared->HasBreakInfo()) return false; - - // Do not baseline compile if sparkplug is disabled or function doesn't pass - // sparkplug_filter. - if (!FLAG_sparkplug || !shared->PassesFilter(FLAG_sparkplug_filter)) { - return false; - } - - return true; -} - bool CompileSharedWithBaseline(Isolate* isolate, Handle<SharedFunctionInfo> shared, Compiler::ClearExceptionFlag flag, @@ -671,7 +653,7 @@ bool CompileSharedWithBaseline(Isolate* isolate, if (shared->HasBaselineData()) return true; // Check if we actually can compile with baseline. - if (!CanCompileWithBaseline(isolate, shared)) return false; + if (!CanCompileWithBaseline(isolate, *shared)) return false; StackLimitCheck check(isolate); if (check.JsHasOverflowed(kStackSpaceRequiredForCompilation * KB)) { @@ -714,10 +696,10 @@ bool CompileSharedWithBaseline(Isolate* isolate, // Finalize a single compilation job. This function can return // RETRY_ON_MAIN_THREAD if the job cannot be finalized off-thread, in which case // it should be safe to call it again on the main thread with the same job. -template <typename LocalIsolate> +template <typename IsolateT> CompilationJob::Status FinalizeSingleUnoptimizedCompilationJob( UnoptimizedCompilationJob* job, Handle<SharedFunctionInfo> shared_info, - LocalIsolate* isolate, + IsolateT* isolate, FinalizeUnoptimizedCompilationDataList* finalize_unoptimized_compilation_data_list) { UnoptimizedCompilationInfo* compilation_info = job->compilation_info(); @@ -736,9 +718,8 @@ CompilationJob::Status FinalizeSingleUnoptimizedCompilationJob( isolate, shared_info, coverage_info, job->time_taken_to_execute(), job->time_taken_to_finalize()); } - DCHECK_IMPLIES( - status == CompilationJob::RETRY_ON_MAIN_THREAD, - (std::is_same<LocalIsolate, v8::internal::LocalIsolate>::value)); + DCHECK_IMPLIES(status == CompilationJob::RETRY_ON_MAIN_THREAD, + (std::is_same<IsolateT, LocalIsolate>::value)); return status; } @@ -801,9 +782,9 @@ bool RecursivelyExecuteUnoptimizedCompilationJobs( return true; } -template <typename LocalIsolate> +template <typename IsolateT> bool IterativelyExecuteAndFinalizeUnoptimizedCompilationJobs( - LocalIsolate* isolate, Handle<SharedFunctionInfo> outer_shared_info, + IsolateT* isolate, Handle<SharedFunctionInfo> outer_shared_info, Handle<Script> script, ParseInfo* parse_info, AccountingAllocator* allocator, IsCompiledScope* is_compiled_scope, FinalizeUnoptimizedCompilationDataList* @@ -849,7 +830,7 @@ bool IterativelyExecuteAndFinalizeUnoptimizedCompilationJobs( case CompilationJob::RETRY_ON_MAIN_THREAD: // This should not happen on the main thread. - DCHECK((!std::is_same<LocalIsolate, Isolate>::value)); + DCHECK((!std::is_same<IsolateT, Isolate>::value)); DCHECK_NOT_NULL(jobs_to_retry_finalization_on_main_thread); // Clear the literal and ParseInfo to prevent further attempts to @@ -943,11 +924,9 @@ bool FinalizeDeferredUnoptimizedCompilationJobs( V8_WARN_UNUSED_RESULT MaybeHandle<Code> GetCodeFromOptimizedCodeCache( Handle<JSFunction> function, BytecodeOffset osr_offset, CodeKind code_kind) { - RuntimeCallTimerScope runtimeTimer( - function->GetIsolate(), - RuntimeCallCounterId::kCompileGetFromOptimizedCodeMap); - Handle<SharedFunctionInfo> shared(function->shared(), function->GetIsolate()); Isolate* isolate = function->GetIsolate(); + RCS_SCOPE(isolate, RuntimeCallCounterId::kCompileGetFromOptimizedCodeMap); + Handle<SharedFunctionInfo> shared(function->shared(), isolate); DisallowGarbageCollection no_gc; Code code; if (osr_offset.IsNone() && function->has_feedback_vector()) { @@ -975,8 +954,6 @@ V8_WARN_UNUSED_RESULT MaybeHandle<Code> GetCodeFromOptimizedCodeCache( } void ClearOptimizedCodeCache(OptimizedCompilationInfo* compilation_info) { - DCHECK(!CodeKindIsNativeContextIndependentJSFunction( - compilation_info->code_kind())); Handle<JSFunction> function = compilation_info->closure(); if (compilation_info->osr_offset().IsNone()) { Handle<FeedbackVector> vector = @@ -1015,31 +992,6 @@ void InsertCodeIntoOptimizedCodeCache( } } -void InsertCodeIntoCompilationCache(Isolate* isolate, - OptimizedCompilationInfo* info) { - if (!CodeKindIsNativeContextIndependentJSFunction(info->code_kind())) return; - - DCHECK(info->osr_offset().IsNone()); - - Handle<Code> code = info->code(); - DCHECK(!info->function_context_specializing()); - - Handle<SharedFunctionInfo> sfi = info->shared_info(); - CompilationCache* cache = isolate->compilation_cache(); - cache->PutCode(sfi, code); - DCHECK(!cache->LookupCode(sfi).is_null()); - - sfi->set_may_have_cached_code(true); - - if (FLAG_trace_turbo_nci) CompilationCacheCode::TraceInsertion(sfi, code); -} - -V8_WARN_UNUSED_RESULT MaybeHandle<Code> GetCodeFromCompilationCache( - Isolate* isolate, Handle<SharedFunctionInfo> shared) { - if (!shared->may_have_cached_code()) return {}; - return shared->TryGetCachedCode(isolate); -} - // Runs PrepareJob in the proper compilation & canonical scopes. Handles will be // allocated in a persistent handle scope that is detached and handed off to the // {compilation_info} after PrepareJob. @@ -1054,8 +1006,7 @@ bool PrepareJobWithHandleScope(OptimizedCompilationJob* job, Isolate* isolate, bool GetOptimizedCodeNow(OptimizedCompilationJob* job, Isolate* isolate, OptimizedCompilationInfo* compilation_info) { TimerEventScope<TimerEventRecompileSynchronous> timer(isolate); - RuntimeCallTimerScope runtimeTimer( - isolate, RuntimeCallCounterId::kOptimizeNonConcurrent); + RCS_SCOPE(isolate, RuntimeCallCounterId::kOptimizeNonConcurrent); TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.OptimizeNonConcurrent"); @@ -1111,8 +1062,7 @@ bool GetOptimizedCodeLater(std::unique_ptr<OptimizedCompilationJob> job, } TimerEventScope<TimerEventRecompileSynchronous> timer(isolate); - RuntimeCallTimerScope runtimeTimer( - isolate, RuntimeCallCounterId::kOptimizeConcurrentPrepare); + RCS_SCOPE(isolate, RuntimeCallCounterId::kOptimizeConcurrentPrepare); TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.OptimizeConcurrentPrepare"); @@ -1134,11 +1084,10 @@ bool GetOptimizedCodeLater(std::unique_ptr<OptimizedCompilationJob> job, function->SetOptimizationMarker(OptimizationMarker::kInOptimizationQueue); } - // Note: Usually the active tier is expected to be Ignition or NCI at this - // point (in other words we don't expect to optimize if the function is - // already TF-optimized). There is a special case for OSR though, for which - // we *can* reach this point even if we've already generated non-OSR'd TF - // code. + // Note: Usually the active tier is expected to be Ignition at this point (in + // other words we don't expect to optimize if the function is already + // TF-optimized). There is a special case for OSR though, for which we *can* + // reach this point even if we've already generated non-OSR'd TF code. DCHECK(function->shared().HasBytecodeArray()); return true; } @@ -1148,13 +1097,7 @@ bool GetOptimizedCodeLater(std::unique_ptr<OptimizedCompilationJob> job, Handle<Code> ContinuationForConcurrentOptimization( Isolate* isolate, Handle<JSFunction> function) { Handle<Code> cached_code; - if (FLAG_turbo_nci && function->NextTier() == CodeKindForTopTier() && - GetCodeFromCompilationCache(isolate, handle(function->shared(), isolate)) - .ToHandle(&cached_code)) { - // Tiering up to Turbofan and cached optimized code exists. Continue - // execution there until TF optimization has finished. - return cached_code; - } else if (FLAG_turboprop && function->HasAvailableOptimizedCode()) { + if (FLAG_turboprop && function->HasAvailableOptimizedCode()) { DCHECK(!FLAG_turboprop_as_toptier); DCHECK(function->NextTier() == CodeKind::TURBOFAN); // It is possible that we have marked a closure for TurboFan optimization @@ -1179,23 +1122,26 @@ Handle<Code> ContinuationForConcurrentOptimization( return BUILTIN_CODE(isolate, InterpreterEntryTrampoline); } +enum class GetOptimizedCodeResultHandling { + // Default behavior, i.e. install the result, insert into caches, etc. + kDefault, + // Used only for stress testing. The compilation result should be discarded. + kDiscardForTesting, +}; + MaybeHandle<Code> GetOptimizedCode( - Handle<JSFunction> function, ConcurrencyMode mode, CodeKind code_kind, - BytecodeOffset osr_offset = BytecodeOffset::None(), - JavaScriptFrame* osr_frame = nullptr) { + Isolate* isolate, Handle<JSFunction> function, ConcurrencyMode mode, + CodeKind code_kind, BytecodeOffset osr_offset = BytecodeOffset::None(), + JavaScriptFrame* osr_frame = nullptr, + GetOptimizedCodeResultHandling result_handling = + GetOptimizedCodeResultHandling::kDefault) { DCHECK(CodeKindIsOptimizedJSFunction(code_kind)); - Isolate* isolate = function->GetIsolate(); Handle<SharedFunctionInfo> shared(function->shared(), isolate); // Make sure we clear the optimization marker on the function so that we // don't try to re-optimize. - // If compiling for NCI (which does not use the optimization marker), don't - // touch the marker to avoid interfering with Turbofan compilation. - if (!CodeKindIsNativeContextIndependentJSFunction(code_kind) && - function->HasOptimizationMarker()) { - function->ClearOptimizationMarker(); - } + if (function->HasOptimizationMarker()) function->ClearOptimizationMarker(); if (shared->optimization_disabled() && shared->disable_optimization_reason() == BailoutReason::kNeverOptimize) { @@ -1233,25 +1179,9 @@ MaybeHandle<Code> GetOptimizedCode( DCHECK(shared->is_compiled()); function->feedback_vector().set_profiler_ticks(0); - // Check the compilation cache (stored on the Isolate, shared between native - // contexts). - if (CodeKindIsNativeContextIndependentJSFunction(code_kind)) { - DCHECK(osr_offset.IsNone()); - - Handle<Code> cached_code; - if (GetCodeFromCompilationCache(isolate, shared).ToHandle(&cached_code)) { - CHECK_EQ(cached_code->kind(), CodeKind::NATIVE_CONTEXT_INDEPENDENT); - if (FLAG_trace_turbo_nci) { - CompilationCacheCode::TraceHit(shared, cached_code); - } - return cached_code; - } - } - VMState<COMPILER> state(isolate); TimerEventScope<TimerEventOptimizeCode> optimize_code_timer(isolate); - RuntimeCallTimerScope runtimeTimer(isolate, - RuntimeCallCounterId::kOptimizeCode); + RCS_SCOPE(isolate, RuntimeCallCounterId::kOptimizeCode); TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.OptimizeCode"); DCHECK(!isolate->has_pending_exception()); @@ -1265,6 +1195,10 @@ MaybeHandle<Code> GetOptimizedCode( has_script, osr_offset, osr_frame)); OptimizedCompilationInfo* compilation_info = job->compilation_info(); + if (result_handling == GetOptimizedCodeResultHandling::kDiscardForTesting) { + compilation_info->set_discard_result_for_testing(); + } + // Prepare the job and launch concurrent compilation, or compile now. if (mode == ConcurrencyMode::kConcurrent) { if (GetOptimizedCodeLater(std::move(job), isolate, compilation_info, @@ -1274,7 +1208,6 @@ MaybeHandle<Code> GetOptimizedCode( } else { DCHECK_EQ(mode, ConcurrencyMode::kNotConcurrent); if (GetOptimizedCodeNow(job.get(), isolate, compilation_info)) { - InsertCodeIntoCompilationCache(isolate, compilation_info); return compilation_info->code(); } } @@ -1283,13 +1216,30 @@ MaybeHandle<Code> GetOptimizedCode( return {}; } +// When --stress-concurrent-inlining is enabled, spawn concurrent jobs in +// addition to non-concurrent compiles to increase coverage in mjsunit tests +// (where most interesting compiles are non-concurrent). The result of the +// compilation is thrown out. +void SpawnDuplicateConcurrentJobForStressTesting(Isolate* isolate, + Handle<JSFunction> function, + ConcurrencyMode mode, + CodeKind code_kind) { + DCHECK(FLAG_stress_concurrent_inlining && + isolate->concurrent_recompilation_enabled() && + mode == ConcurrencyMode::kNotConcurrent && + isolate->node_observer() == nullptr); + USE(GetOptimizedCode(isolate, function, ConcurrencyMode::kConcurrent, + code_kind, BytecodeOffset::None(), nullptr, + GetOptimizedCodeResultHandling::kDiscardForTesting)); +} + bool FailAndClearPendingException(Isolate* isolate) { isolate->clear_pending_exception(); return false; } -template <typename LocalIsolate> -bool PreparePendingException(LocalIsolate* isolate, ParseInfo* parse_info) { +template <typename IsolateT> +bool PreparePendingException(IsolateT* isolate, ParseInfo* parse_info) { if (parse_info->pending_error_handler()->has_pending_error()) { parse_info->pending_error_handler()->PrepareErrors( isolate, parse_info->ast_value_factory()); @@ -1389,8 +1339,7 @@ void FinalizeUnoptimizedScriptCompilation( FunctionLiteral* literal = it.first; CompilerDispatcher::JobId job_id = it.second; MaybeHandle<SharedFunctionInfo> maybe_shared_for_task = - script->FindSharedFunctionInfo(isolate, - literal->function_literal_id()); + Script::FindSharedFunctionInfo(script, isolate, literal); Handle<SharedFunctionInfo> shared_for_task; if (maybe_shared_for_task.ToHandle(&shared_for_task)) { dispatcher->RegisterSharedFunctionInfo(job_id, *shared_for_task); @@ -1412,7 +1361,7 @@ void CompileAllWithBaseline(Isolate* isolate, Handle<SharedFunctionInfo> shared_info = finalize_data.function_handle(); IsCompiledScope is_compiled_scope(*shared_info, isolate); if (!is_compiled_scope.is_compiled()) continue; - if (!CanCompileWithBaseline(isolate, shared_info)) continue; + if (!CanCompileWithBaseline(isolate, *shared_info)) continue; CompileSharedWithBaseline(isolate, shared_info, Compiler::CLEAR_EXCEPTION, &is_compiled_scope); } @@ -1420,9 +1369,9 @@ void CompileAllWithBaseline(Isolate* isolate, // Create shared function info for top level and shared function infos array for // inner functions. -template <typename LocalIsolate> +template <typename IsolateT> Handle<SharedFunctionInfo> CreateTopLevelSharedFunctionInfo( - ParseInfo* parse_info, Handle<Script> script, LocalIsolate* isolate) { + ParseInfo* parse_info, Handle<Script> script, IsolateT* isolate) { EnsureSharedFunctionInfosArrayOnScript(script, parse_info, isolate); DCHECK_EQ(kNoSourcePosition, parse_info->literal()->function_token_position()); @@ -1440,10 +1389,9 @@ MaybeHandle<SharedFunctionInfo> CompileToplevel( PostponeInterruptsScope postpone(isolate); DCHECK(!isolate->native_context().is_null()); - RuntimeCallTimerScope runtimeTimer( - isolate, parse_info->flags().is_eval() - ? RuntimeCallCounterId::kCompileEval - : RuntimeCallCounterId::kCompileScript); + RCS_SCOPE(isolate, parse_info->flags().is_eval() + ? RuntimeCallCounterId::kCompileEval + : RuntimeCallCounterId::kCompileScript); VMState<BYTECODE_COMPILER> state(isolate); if (parse_info->literal() == nullptr && !parsing::ParseProgram(parse_info, script, maybe_outer_scope_info, @@ -1494,6 +1442,7 @@ MaybeHandle<SharedFunctionInfo> CompileToplevel( return shared_info; } +#ifdef V8_RUNTIME_CALL_STATS RuntimeCallCounterId RuntimeCallCounterIdForCompileBackground( ParseInfo* parse_info) { if (parse_info->flags().is_toplevel()) { @@ -1504,6 +1453,7 @@ RuntimeCallCounterId RuntimeCallCounterIdForCompileBackground( } return RuntimeCallCounterId::kCompileBackgroundFunction; } +#endif // V8_RUNTIME_CALL_STATS MaybeHandle<SharedFunctionInfo> CompileAndFinalizeOnBackgroundThread( ParseInfo* parse_info, AccountingAllocator* allocator, @@ -1514,9 +1464,8 @@ MaybeHandle<SharedFunctionInfo> CompileAndFinalizeOnBackgroundThread( IsCompiledScope* is_compiled_scope) { TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.CompileCodeBackground"); - RuntimeCallTimerScope runtimeTimer( - parse_info->runtime_call_stats(), - RuntimeCallCounterIdForCompileBackground(parse_info)); + RCS_SCOPE(parse_info->runtime_call_stats(), + RuntimeCallCounterIdForCompileBackground(parse_info)); Handle<SharedFunctionInfo> shared_info = CreateTopLevelSharedFunctionInfo(parse_info, script, isolate); @@ -1541,9 +1490,8 @@ void CompileOnBackgroundThread(ParseInfo* parse_info, DisallowHeapAccess no_heap_access; TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.CompileCodeBackground"); - RuntimeCallTimerScope runtimeTimer( - parse_info->runtime_call_stats(), - RuntimeCallCounterIdForCompileBackground(parse_info)); + RCS_SCOPE(parse_info->runtime_call_stats(), + RuntimeCallCounterIdForCompileBackground(parse_info)); // Generate the unoptimized bytecode or asm-js data. DCHECK(jobs->empty()); @@ -1557,6 +1505,7 @@ void CompileOnBackgroundThread(ParseInfo* parse_info, // Character stream shouldn't be used again. parse_info->ResetCharacterStream(); } + } // namespace CompilationHandleScope::~CompilationHandleScope() { @@ -1660,8 +1609,8 @@ class V8_NODISCARD OffThreadParseInfoScope { ParseInfo* parse_info, WorkerThreadRuntimeCallStats* worker_thread_runtime_stats, int stack_size) : parse_info_(parse_info), - original_runtime_call_stats_(parse_info_->runtime_call_stats()), original_stack_limit_(parse_info_->stack_limit()), + original_runtime_call_stats_(parse_info_->runtime_call_stats()), worker_thread_scope_(worker_thread_runtime_stats) { parse_info_->SetPerThreadState(GetCurrentStackPosition() - stack_size * KB, worker_thread_scope_.Get()); @@ -1678,8 +1627,8 @@ class V8_NODISCARD OffThreadParseInfoScope { private: ParseInfo* parse_info_; - RuntimeCallStats* original_runtime_call_stats_; uintptr_t original_stack_limit_; + RuntimeCallStats* original_runtime_call_stats_; WorkerThreadRuntimeCallStatsScope worker_thread_scope_; }; @@ -1692,9 +1641,8 @@ void BackgroundCompileTask::Run() { stack_size_); TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "BackgroundCompileTask::Run"); - RuntimeCallTimerScope runtimeTimer( - info_->runtime_call_stats(), - RuntimeCallCounterId::kCompileBackgroundCompileTask); + RCS_SCOPE(info_->runtime_call_stats(), + RuntimeCallCounterId::kCompileBackgroundCompileTask); // Update the character stream's runtime call stats. info_->character_stream()->set_runtime_call_stats( @@ -1817,8 +1765,7 @@ bool Compiler::CollectSourcePositions(Isolate* isolate, DCHECK(!isolate->has_pending_exception()); VMState<BYTECODE_COMPILER> state(isolate); PostponeInterruptsScope postpone(isolate); - RuntimeCallTimerScope runtimeTimer( - isolate, RuntimeCallCounterId::kCompileCollectSourcePositions); + RCS_SCOPE(isolate, RuntimeCallCounterId::kCompileCollectSourcePositions); TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.CollectSourcePositions"); HistogramTimerScope timer(isolate->counters()->collect_source_positions()); @@ -1894,8 +1841,7 @@ bool Compiler::Compile(Isolate* isolate, Handle<SharedFunctionInfo> shared_info, VMState<BYTECODE_COMPILER> state(isolate); PostponeInterruptsScope postpone(isolate); TimerEventScope<TimerEventCompileCode> compile_timer(isolate); - RuntimeCallTimerScope runtimeTimer(isolate, - RuntimeCallCounterId::kCompileFunction); + RCS_SCOPE(isolate, RuntimeCallCounterId::kCompileFunction); TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.CompileCode"); AggregatedHistogramTimerScope timer(isolate->counters()->compile_lazy()); @@ -2000,9 +1946,19 @@ bool Compiler::Compile(Isolate* isolate, Handle<JSFunction> function, CompilerTracer::TraceOptimizeForAlwaysOpt(isolate, function, CodeKindForTopTier()); + const CodeKind code_kind = CodeKindForTopTier(); + const ConcurrencyMode concurrency_mode = ConcurrencyMode::kNotConcurrent; + + if (FLAG_stress_concurrent_inlining && + isolate->concurrent_recompilation_enabled() && + concurrency_mode == ConcurrencyMode::kNotConcurrent && + isolate->node_observer() == nullptr) { + SpawnDuplicateConcurrentJobForStressTesting(isolate, function, + concurrency_mode, code_kind); + } + Handle<Code> maybe_code; - if (GetOptimizedCode(function, ConcurrencyMode::kNotConcurrent, - CodeKindForTopTier()) + if (GetOptimizedCode(isolate, function, concurrency_mode, code_kind) .ToHandle(&maybe_code)) { code = maybe_code; } @@ -2058,8 +2014,8 @@ bool Compiler::FinalizeBackgroundCompileTask( TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.FinalizeBackgroundCompileTask"); - RuntimeCallTimerScope runtimeTimer( - isolate, RuntimeCallCounterId::kCompileFinalizeBackgroundCompileTask); + RCS_SCOPE(isolate, + RuntimeCallCounterId::kCompileFinalizeBackgroundCompileTask); HandleScope scope(isolate); ParseInfo* parse_info = task->info(); DCHECK(!parse_info->flags().is_toplevel()); @@ -2099,8 +2055,16 @@ bool Compiler::CompileOptimized(Isolate* isolate, Handle<JSFunction> function, DCHECK(CodeKindIsOptimizedJSFunction(code_kind)); DCHECK(AllowCompilation::IsAllowed(isolate)); + if (FLAG_stress_concurrent_inlining && + isolate->concurrent_recompilation_enabled() && + mode == ConcurrencyMode::kNotConcurrent && + isolate->node_observer() == nullptr) { + SpawnDuplicateConcurrentJobForStressTesting(isolate, function, mode, + code_kind); + } + Handle<Code> code; - if (!GetOptimizedCode(function, mode, code_kind).ToHandle(&code)) { + if (!GetOptimizedCode(isolate, function, mode, code_kind).ToHandle(&code)) { // Optimization failed, get the existing code. We could have optimized code // from a lower tier here. Unoptimized code must exist already if we are // optimizing. @@ -2110,23 +2074,18 @@ bool Compiler::CompileOptimized(Isolate* isolate, Handle<JSFunction> function, code = ContinuationForConcurrentOptimization(isolate, function); } - if (!CodeKindIsNativeContextIndependentJSFunction(code_kind)) { - function->set_code(*code, kReleaseStore); - } + function->set_code(*code, kReleaseStore); // Check postconditions on success. DCHECK(!isolate->has_pending_exception()); DCHECK(function->shared().is_compiled()); - DCHECK(CodeKindIsNativeContextIndependentJSFunction(code_kind) || - function->is_compiled()); - if (!CodeKindIsNativeContextIndependentJSFunction(code_kind)) { - DCHECK_IMPLIES(function->HasOptimizationMarker(), - function->IsInOptimizationQueue()); - DCHECK_IMPLIES(function->HasOptimizationMarker(), - function->ChecksOptimizationMarker()); - DCHECK_IMPLIES(function->IsInOptimizationQueue(), - mode == ConcurrencyMode::kConcurrent); - } + DCHECK(function->is_compiled()); + DCHECK_IMPLIES(function->HasOptimizationMarker(), + function->IsInOptimizationQueue()); + DCHECK_IMPLIES(function->HasOptimizationMarker(), + function->ChecksOptimizationMarker()); + DCHECK_IMPLIES(function->IsInOptimizationQueue(), + mode == ConcurrencyMode::kConcurrent); return true; } @@ -2281,8 +2240,7 @@ bool CodeGenerationFromStringsAllowed(Isolate* isolate, Handle<Context> context, // Callback set. Let it decide if code generation is allowed. VMState<EXTERNAL> state(isolate); - RuntimeCallTimerScope timer( - isolate, RuntimeCallCounterId::kCodeGenerationFromStringsCallbacks); + RCS_SCOPE(isolate, RuntimeCallCounterId::kCodeGenerationFromStringsCallbacks); AllowCodeGenerationFromStringsCallback callback = isolate->allow_code_gen_callback(); return callback(v8::Utils::ToLocal(context), v8::Utils::ToLocal(source)); @@ -2301,8 +2259,7 @@ bool ModifyCodeGenerationFromStrings(Isolate* isolate, Handle<Context> context, // Callback set. Run it, and use the return value as source, or block // execution if it's not set. VMState<EXTERNAL> state(isolate); - RuntimeCallTimerScope timer( - isolate, RuntimeCallCounterId::kCodeGenerationFromStringsCallbacks); + RCS_SCOPE(isolate, RuntimeCallCounterId::kCodeGenerationFromStringsCallbacks); ModifyCodeGenerationFromStringsResult result = isolate->modify_code_gen_callback() ? isolate->modify_code_gen_callback()(v8::Utils::ToLocal(context), @@ -2881,8 +2838,7 @@ MaybeHandle<SharedFunctionInfo> Compiler::GetSharedFunctionInfoForScript( compile_timer.set_consuming_code_cache(); // Then check cached code provided by embedder. HistogramTimerScope timer(isolate->counters()->compile_deserialize()); - RuntimeCallTimerScope runtimeTimer( - isolate, RuntimeCallCounterId::kCompileDeserialize); + RCS_SCOPE(isolate, RuntimeCallCounterId::kCompileDeserialize); TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.CompileDeserialize"); Handle<SharedFunctionInfo> inner_result; @@ -2894,7 +2850,6 @@ MaybeHandle<SharedFunctionInfo> Compiler::GetSharedFunctionInfoForScript( is_compiled_scope = inner_result->is_compiled_scope(isolate); DCHECK(is_compiled_scope.is_compiled()); compilation_cache->PutScript(source, language_mode, inner_result); - Handle<Script> script(Script::cast(inner_result->script()), isolate); maybe_result = inner_result; } else { // Deserializer failed. Fall through to compile. @@ -2970,8 +2925,7 @@ MaybeHandle<JSFunction> Compiler::GetWrappedFunction( compile_timer.set_consuming_code_cache(); // Then check cached code provided by embedder. HistogramTimerScope timer(isolate->counters()->compile_deserialize()); - RuntimeCallTimerScope runtimeTimer( - isolate, RuntimeCallCounterId::kCompileDeserialize); + RCS_SCOPE(isolate, RuntimeCallCounterId::kCompileDeserialize); TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.CompileDeserialize"); maybe_result = CodeSerializer::Deserialize(isolate, cached_data, source, @@ -3074,8 +3028,8 @@ Compiler::GetSharedFunctionInfoForStreamedScript( Handle<Script> script; if (FLAG_finalize_streaming_on_background && !origin_options.IsModule()) { - RuntimeCallTimerScope runtimeTimerScope( - isolate, RuntimeCallCounterId::kCompilePublishBackgroundFinalization); + RCS_SCOPE(isolate, + RuntimeCallCounterId::kCompilePublishBackgroundFinalization); TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.OffThreadFinalization.Publish"); @@ -3163,15 +3117,14 @@ Compiler::GetSharedFunctionInfoForStreamedScript( } // static -template <typename LocalIsolate> +template <typename IsolateT> Handle<SharedFunctionInfo> Compiler::GetSharedFunctionInfo( - FunctionLiteral* literal, Handle<Script> script, LocalIsolate* isolate) { + FunctionLiteral* literal, Handle<Script> script, IsolateT* isolate) { // Precondition: code has been parsed and scopes have been analyzed. MaybeHandle<SharedFunctionInfo> maybe_existing; // Find any previously allocated shared function info for the given literal. - maybe_existing = - script->FindSharedFunctionInfo(isolate, literal->function_literal_id()); + maybe_existing = Script::FindSharedFunctionInfo(script, isolate, literal); // If we found an existing shared function info, return it. Handle<SharedFunctionInfo> existing; @@ -3215,12 +3168,13 @@ template Handle<SharedFunctionInfo> Compiler::GetSharedFunctionInfo( FunctionLiteral* literal, Handle<Script> script, LocalIsolate* isolate); // static -MaybeHandle<Code> Compiler::GetOptimizedCodeForOSR(Handle<JSFunction> function, +MaybeHandle<Code> Compiler::GetOptimizedCodeForOSR(Isolate* isolate, + Handle<JSFunction> function, BytecodeOffset osr_offset, JavaScriptFrame* osr_frame) { DCHECK(!osr_offset.IsNone()); DCHECK_NOT_NULL(osr_frame); - return GetOptimizedCode(function, ConcurrencyMode::kNotConcurrent, + return GetOptimizedCode(isolate, function, ConcurrencyMode::kNotConcurrent, CodeKindForOSR(), osr_offset, osr_frame); } @@ -3233,17 +3187,14 @@ bool Compiler::FinalizeOptimizedCompilationJob(OptimizedCompilationJob* job, OptimizedCompilationInfo* compilation_info = job->compilation_info(); TimerEventScope<TimerEventRecompileSynchronous> timer(isolate); - RuntimeCallTimerScope runtimeTimer( - isolate, RuntimeCallCounterId::kOptimizeConcurrentFinalize); + RCS_SCOPE(isolate, RuntimeCallCounterId::kOptimizeConcurrentFinalize); TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.OptimizeConcurrentFinalize"); Handle<SharedFunctionInfo> shared = compilation_info->shared_info(); - CodeKind code_kind = compilation_info->code_kind(); - const bool should_install_code_on_function = - !CodeKindIsNativeContextIndependentJSFunction(code_kind); - if (should_install_code_on_function) { + const bool use_result = !compilation_info->discard_result_for_testing(); + if (V8_LIKELY(use_result)) { // Reset profiler ticks, function is no longer considered hot. compilation_info->closure()->feedback_vector().set_profiler_ticks(0); } @@ -3263,10 +3214,9 @@ bool Compiler::FinalizeOptimizedCompilationJob(OptimizedCompilationJob* job, isolate); job->RecordFunctionCompilation(CodeEventListener::LAZY_COMPILE_TAG, isolate); - InsertCodeIntoOptimizedCodeCache(compilation_info); - InsertCodeIntoCompilationCache(isolate, compilation_info); - CompilerTracer::TraceCompletedJob(isolate, compilation_info); - if (should_install_code_on_function) { + if (V8_LIKELY(use_result)) { + InsertCodeIntoOptimizedCodeCache(compilation_info); + CompilerTracer::TraceCompletedJob(isolate, compilation_info); compilation_info->closure()->set_code(*compilation_info->code(), kReleaseStore); } @@ -3276,11 +3226,12 @@ bool Compiler::FinalizeOptimizedCompilationJob(OptimizedCompilationJob* job, DCHECK_EQ(job->state(), CompilationJob::State::kFailed); CompilerTracer::TraceAbortedJob(isolate, compilation_info); - compilation_info->closure()->set_code(shared->GetCode(), kReleaseStore); - // Clear the InOptimizationQueue marker, if it exists. - if (!CodeKindIsNativeContextIndependentJSFunction(code_kind) && - compilation_info->closure()->IsInOptimizationQueue()) { - compilation_info->closure()->ClearOptimizationMarker(); + if (V8_LIKELY(use_result)) { + compilation_info->closure()->set_code(shared->GetCode(), kReleaseStore); + // Clear the InOptimizationQueue marker, if it exists. + if (compilation_info->closure()->IsInOptimizationQueue()) { + compilation_info->closure()->ClearOptimizationMarker(); + } } return CompilationJob::FAILED; } diff --git a/deps/v8/src/codegen/compiler.h b/deps/v8/src/codegen/compiler.h index 7ff1b5eecd..e7d05b3ba3 100644 --- a/deps/v8/src/codegen/compiler.h +++ b/deps/v8/src/codegen/compiler.h @@ -190,9 +190,10 @@ class V8_EXPORT_PRIVATE Compiler : public AllStatic { // Create a shared function info object for the given function literal // node (the code may be lazily compiled). - template <typename LocalIsolate> - static Handle<SharedFunctionInfo> GetSharedFunctionInfo( - FunctionLiteral* node, Handle<Script> script, LocalIsolate* isolate); + template <typename IsolateT> + static Handle<SharedFunctionInfo> GetSharedFunctionInfo(FunctionLiteral* node, + Handle<Script> script, + IsolateT* isolate); // =========================================================================== // The following family of methods provides support for OSR. Code generated @@ -205,7 +206,7 @@ class V8_EXPORT_PRIVATE Compiler : public AllStatic { // Generate and return optimized code for OSR, or empty handle on failure. V8_WARN_UNUSED_RESULT static MaybeHandle<Code> GetOptimizedCodeForOSR( - Handle<JSFunction> function, BytecodeOffset osr_offset, + Isolate* isolate, Handle<JSFunction> function, BytecodeOffset osr_offset, JavaScriptFrame* osr_frame); }; diff --git a/deps/v8/src/codegen/constants-arch.h b/deps/v8/src/codegen/constants-arch.h index cea8dc068f..2417be5d4d 100644 --- a/deps/v8/src/codegen/constants-arch.h +++ b/deps/v8/src/codegen/constants-arch.h @@ -6,23 +6,23 @@ #define V8_CODEGEN_CONSTANTS_ARCH_H_ #if V8_TARGET_ARCH_ARM -#include "src/codegen/arm/constants-arm.h" // NOLINT +#include "src/codegen/arm/constants-arm.h" #elif V8_TARGET_ARCH_ARM64 -#include "src/codegen/arm64/constants-arm64.h" // NOLINT +#include "src/codegen/arm64/constants-arm64.h" #elif V8_TARGET_ARCH_IA32 -#include "src/codegen/ia32/constants-ia32.h" // NOLINT +#include "src/codegen/ia32/constants-ia32.h" #elif V8_TARGET_ARCH_MIPS -#include "src/codegen/mips/constants-mips.h" // NOLINT +#include "src/codegen/mips/constants-mips.h" #elif V8_TARGET_ARCH_MIPS64 -#include "src/codegen/mips64/constants-mips64.h" // NOLINT +#include "src/codegen/mips64/constants-mips64.h" #elif V8_TARGET_ARCH_PPC || V8_TARGET_ARCH_PPC64 -#include "src/codegen/ppc/constants-ppc.h" // NOLINT +#include "src/codegen/ppc/constants-ppc.h" #elif V8_TARGET_ARCH_S390 -#include "src/codegen/s390/constants-s390.h" // NOLINT +#include "src/codegen/s390/constants-s390.h" #elif V8_TARGET_ARCH_X64 -#include "src/codegen/x64/constants-x64.h" // NOLINT +#include "src/codegen/x64/constants-x64.h" #elif V8_TARGET_ARCH_RISCV64 -#include "src/codegen/riscv64/constants-riscv64.h" // NOLINT +#include "src/codegen/riscv64/constants-riscv64.h" #else #error Unsupported target architecture. #endif diff --git a/deps/v8/src/codegen/cpu-features.h b/deps/v8/src/codegen/cpu-features.h index b9a450ea3a..6833ee60d0 100644 --- a/deps/v8/src/codegen/cpu-features.h +++ b/deps/v8/src/codegen/cpu-features.h @@ -109,6 +109,9 @@ class V8_EXPORT_PRIVATE CpuFeatures : public AllStatic { return (supported_ & (1u << f)) != 0; } + static void SetSupported(CpuFeature f) { supported_ |= 1u << f; } + static void SetUnsupported(CpuFeature f) { supported_ &= ~(1u << f); } + static bool SupportsWasmSimd128(); static inline bool SupportsOptimizer(); diff --git a/deps/v8/src/codegen/external-reference-table.cc b/deps/v8/src/codegen/external-reference-table.cc index 2741bd8ec2..6c109861a2 100644 --- a/deps/v8/src/codegen/external-reference-table.cc +++ b/deps/v8/src/codegen/external-reference-table.cc @@ -33,20 +33,24 @@ namespace internal { // clang-format off const char* const ExternalReferenceTable::ref_name_[ExternalReferenceTable::kSize] = { + // === Isolate independent === // Special references: "nullptr", - // External references: + // External references (without isolate): EXTERNAL_REFERENCE_LIST(ADD_EXT_REF_NAME) - EXTERNAL_REFERENCE_LIST_WITH_ISOLATE(ADD_EXT_REF_NAME) // Builtins: BUILTIN_LIST_C(ADD_BUILTIN_NAME) // Runtime functions: FOR_EACH_INTRINSIC(ADD_RUNTIME_FUNCTION) - // Isolate addresses: - FOR_EACH_ISOLATE_ADDRESS_NAME(ADD_ISOLATE_ADDR) // Accessors: ACCESSOR_INFO_LIST_GENERATOR(ADD_ACCESSOR_INFO_NAME, /* not used */) ACCESSOR_SETTER_LIST(ADD_ACCESSOR_SETTER_NAME) + + // === Isolate dependent === + // External references (with isolate): + EXTERNAL_REFERENCE_LIST_WITH_ISOLATE(ADD_EXT_REF_NAME) + // Isolate addresses: + FOR_EACH_ISOLATE_ADDRESS_NAME(ADD_ISOLATE_ADDR) // Stub cache: "Load StubCache::primary_->key", "Load StubCache::primary_->value", @@ -72,6 +76,11 @@ const char* const #undef ADD_ACCESSOR_SETTER_NAME #undef ADD_STATS_COUNTER_NAME +namespace { +static Address ref_addr_isolate_independent_ + [ExternalReferenceTable::kSizeIsolateIndependent] = {0}; +} // namespace + // Forward declarations for C++ builtins. #define FORWARD_DECLARE(Name) \ Address Builtin_##Name(int argc, Address* args, Isolate* isolate); @@ -81,13 +90,10 @@ BUILTIN_LIST_C(FORWARD_DECLARE) void ExternalReferenceTable::Init(Isolate* isolate) { int index = 0; - // kNullAddress is preserved through serialization/deserialization. - Add(kNullAddress, &index); - AddReferences(isolate, &index); - AddBuiltins(&index); - AddRuntimeFunctions(&index); + CopyIsolateIndependentReferences(&index); + + AddIsolateDependentReferences(isolate, &index); AddIsolateAddresses(isolate, &index); - AddAccessors(&index); AddStubCache(isolate, &index); AddNativeCodeStatsCounters(isolate, &index); is_initialized_ = static_cast<uint32_t>(true); @@ -108,28 +114,66 @@ const char* ExternalReferenceTable::ResolveSymbol(void* address) { #endif // SYMBOLIZE_FUNCTION } +void ExternalReferenceTable::InitializeOncePerProcess() { + int index = 0; + + // kNullAddress is preserved through serialization/deserialization. + AddIsolateIndependent(kNullAddress, &index); + AddIsolateIndependentReferences(&index); + AddBuiltins(&index); + AddRuntimeFunctions(&index); + AddAccessors(&index); + + CHECK_EQ(kSizeIsolateIndependent, index); +} + +const char* ExternalReferenceTable::NameOfIsolateIndependentAddress( + Address address) { + for (int i = 0; i < kSizeIsolateIndependent; i++) { + if (ref_addr_isolate_independent_[i] == address) { + return ref_name_[i]; + } + } + return "<unknown>"; +} + void ExternalReferenceTable::Add(Address address, int* index) { ref_addr_[(*index)++] = address; } -void ExternalReferenceTable::AddReferences(Isolate* isolate, int* index) { +void ExternalReferenceTable::AddIsolateIndependent(Address address, + int* index) { + ref_addr_isolate_independent_[(*index)++] = address; +} + +void ExternalReferenceTable::AddIsolateIndependentReferences(int* index) { CHECK_EQ(kSpecialReferenceCount, *index); #define ADD_EXTERNAL_REFERENCE(name, desc) \ - Add(ExternalReference::name().address(), index); + AddIsolateIndependent(ExternalReference::name().address(), index); EXTERNAL_REFERENCE_LIST(ADD_EXTERNAL_REFERENCE) #undef ADD_EXTERNAL_REFERENCE + CHECK_EQ(kSpecialReferenceCount + kExternalReferenceCountIsolateIndependent, + *index); +} + +void ExternalReferenceTable::AddIsolateDependentReferences(Isolate* isolate, + int* index) { + CHECK_EQ(kSizeIsolateIndependent, *index); + #define ADD_EXTERNAL_REFERENCE(name, desc) \ Add(ExternalReference::name(isolate).address(), index); EXTERNAL_REFERENCE_LIST_WITH_ISOLATE(ADD_EXTERNAL_REFERENCE) #undef ADD_EXTERNAL_REFERENCE - CHECK_EQ(kSpecialReferenceCount + kExternalReferenceCount, *index); + CHECK_EQ(kSizeIsolateIndependent + kExternalReferenceCountIsolateDependent, + *index); } void ExternalReferenceTable::AddBuiltins(int* index) { - CHECK_EQ(kSpecialReferenceCount + kExternalReferenceCount, *index); + CHECK_EQ(kSpecialReferenceCount + kExternalReferenceCountIsolateIndependent, + *index); static const Address c_builtins[] = { #define DEF_ENTRY(Name, ...) FUNCTION_ADDR(&Builtin_##Name), @@ -137,16 +181,16 @@ void ExternalReferenceTable::AddBuiltins(int* index) { #undef DEF_ENTRY }; for (Address addr : c_builtins) { - Add(ExternalReference::Create(addr).address(), index); + AddIsolateIndependent(ExternalReference::Create(addr).address(), index); } - CHECK_EQ(kSpecialReferenceCount + kExternalReferenceCount + + CHECK_EQ(kSpecialReferenceCount + kExternalReferenceCountIsolateIndependent + kBuiltinsReferenceCount, *index); } void ExternalReferenceTable::AddRuntimeFunctions(int* index) { - CHECK_EQ(kSpecialReferenceCount + kExternalReferenceCount + + CHECK_EQ(kSpecialReferenceCount + kExternalReferenceCountIsolateIndependent + kBuiltinsReferenceCount, *index); @@ -157,33 +201,38 @@ void ExternalReferenceTable::AddRuntimeFunctions(int* index) { }; for (Runtime::FunctionId fId : runtime_functions) { - Add(ExternalReference::Create(fId).address(), index); + AddIsolateIndependent(ExternalReference::Create(fId).address(), index); } - CHECK_EQ(kSpecialReferenceCount + kExternalReferenceCount + + CHECK_EQ(kSpecialReferenceCount + kExternalReferenceCountIsolateIndependent + kBuiltinsReferenceCount + kRuntimeReferenceCount, *index); } +void ExternalReferenceTable::CopyIsolateIndependentReferences(int* index) { + CHECK_EQ(0, *index); + + std::copy(ref_addr_isolate_independent_, + ref_addr_isolate_independent_ + kSizeIsolateIndependent, ref_addr_); + *index += kSizeIsolateIndependent; +} + void ExternalReferenceTable::AddIsolateAddresses(Isolate* isolate, int* index) { - CHECK_EQ(kSpecialReferenceCount + kExternalReferenceCount + - kBuiltinsReferenceCount + kRuntimeReferenceCount, + CHECK_EQ(kSizeIsolateIndependent + kExternalReferenceCountIsolateDependent, *index); for (int i = 0; i < IsolateAddressId::kIsolateAddressCount; ++i) { Add(isolate->get_address_from_id(static_cast<IsolateAddressId>(i)), index); } - CHECK_EQ(kSpecialReferenceCount + kExternalReferenceCount + - kBuiltinsReferenceCount + kRuntimeReferenceCount + + CHECK_EQ(kSizeIsolateIndependent + kExternalReferenceCountIsolateDependent + kIsolateAddressReferenceCount, *index); } void ExternalReferenceTable::AddAccessors(int* index) { - CHECK_EQ(kSpecialReferenceCount + kExternalReferenceCount + - kBuiltinsReferenceCount + kRuntimeReferenceCount + - kIsolateAddressReferenceCount, + CHECK_EQ(kSpecialReferenceCount + kExternalReferenceCountIsolateIndependent + + kBuiltinsReferenceCount + kRuntimeReferenceCount, *index); static const Address accessors[] = { @@ -199,19 +248,18 @@ void ExternalReferenceTable::AddAccessors(int* index) { }; for (Address addr : accessors) { - Add(addr, index); + AddIsolateIndependent(addr, index); } - CHECK_EQ(kSpecialReferenceCount + kExternalReferenceCount + + CHECK_EQ(kSpecialReferenceCount + kExternalReferenceCountIsolateIndependent + kBuiltinsReferenceCount + kRuntimeReferenceCount + - kIsolateAddressReferenceCount + kAccessorReferenceCount, + kAccessorReferenceCount, *index); } void ExternalReferenceTable::AddStubCache(Isolate* isolate, int* index) { - CHECK_EQ(kSpecialReferenceCount + kExternalReferenceCount + - kBuiltinsReferenceCount + kRuntimeReferenceCount + - kIsolateAddressReferenceCount + kAccessorReferenceCount, + CHECK_EQ(kSizeIsolateIndependent + kExternalReferenceCountIsolateDependent + + kIsolateAddressReferenceCount, *index); StubCache* load_stub_cache = isolate->load_stub_cache(); @@ -235,10 +283,8 @@ void ExternalReferenceTable::AddStubCache(Isolate* isolate, int* index) { index); Add(store_stub_cache->map_reference(StubCache::kSecondary).address(), index); - CHECK_EQ(kSpecialReferenceCount + kExternalReferenceCount + - kBuiltinsReferenceCount + kRuntimeReferenceCount + - kIsolateAddressReferenceCount + kAccessorReferenceCount + - kStubCacheReferenceCount, + CHECK_EQ(kSizeIsolateIndependent + kExternalReferenceCountIsolateDependent + + kIsolateAddressReferenceCount + kStubCacheReferenceCount, *index); } @@ -251,10 +297,8 @@ Address ExternalReferenceTable::GetStatsCounterAddress(StatsCounter* counter) { void ExternalReferenceTable::AddNativeCodeStatsCounters(Isolate* isolate, int* index) { - CHECK_EQ(kSpecialReferenceCount + kExternalReferenceCount + - kBuiltinsReferenceCount + kRuntimeReferenceCount + - kIsolateAddressReferenceCount + kAccessorReferenceCount + - kStubCacheReferenceCount, + CHECK_EQ(kSizeIsolateIndependent + kExternalReferenceCountIsolateDependent + + kIsolateAddressReferenceCount + kStubCacheReferenceCount, *index); Counters* counters = isolate->counters(); @@ -263,10 +307,9 @@ void ExternalReferenceTable::AddNativeCodeStatsCounters(Isolate* isolate, STATS_COUNTER_NATIVE_CODE_LIST(SC) #undef SC - CHECK_EQ(kSpecialReferenceCount + kExternalReferenceCount + - kBuiltinsReferenceCount + kRuntimeReferenceCount + - kIsolateAddressReferenceCount + kAccessorReferenceCount + - kStubCacheReferenceCount + kStatsCountersReferenceCount, + CHECK_EQ(kSizeIsolateIndependent + kExternalReferenceCountIsolateDependent + + kIsolateAddressReferenceCount + kStubCacheReferenceCount + + kStatsCountersReferenceCount, *index); CHECK_EQ(kSize, *index); } diff --git a/deps/v8/src/codegen/external-reference-table.h b/deps/v8/src/codegen/external-reference-table.h index 9f75d0fa74..0bf42477ae 100644 --- a/deps/v8/src/codegen/external-reference-table.h +++ b/deps/v8/src/codegen/external-reference-table.h @@ -24,8 +24,10 @@ class ExternalReferenceTable { public: // For the nullptr ref, see the constructor. static constexpr int kSpecialReferenceCount = 1; - static constexpr int kExternalReferenceCount = - ExternalReference::kExternalReferenceCount; + static constexpr int kExternalReferenceCountIsolateIndependent = + ExternalReference::kExternalReferenceCountIsolateIndependent; + static constexpr int kExternalReferenceCountIsolateDependent = + ExternalReference::kExternalReferenceCountIsolateDependent; static constexpr int kBuiltinsReferenceCount = #define COUNT_C_BUILTIN(...) +1 BUILTIN_LIST_C(COUNT_C_BUILTIN); @@ -42,11 +44,14 @@ class ExternalReferenceTable { #define SC(...) +1 STATS_COUNTER_NATIVE_CODE_LIST(SC); #undef SC - static constexpr int kSize = - kSpecialReferenceCount + kExternalReferenceCount + + static constexpr int kSizeIsolateIndependent = + kSpecialReferenceCount + kExternalReferenceCountIsolateIndependent + kBuiltinsReferenceCount + kRuntimeReferenceCount + - kIsolateAddressReferenceCount + kAccessorReferenceCount + - kStubCacheReferenceCount + kStatsCountersReferenceCount; + kAccessorReferenceCount; + static constexpr int kSize = + kSizeIsolateIndependent + kExternalReferenceCountIsolateDependent + + kIsolateAddressReferenceCount + kStubCacheReferenceCount + + kStatsCountersReferenceCount; static constexpr uint32_t kEntrySize = static_cast<uint32_t>(kSystemPointerSize); static constexpr uint32_t kSizeInBytes = kSize * kEntrySize + 2 * kUInt32Size; @@ -63,6 +68,9 @@ class ExternalReferenceTable { return i * kEntrySize; } + static void InitializeOncePerProcess(); + static const char* NameOfIsolateIndependentAddress(Address address); + const char* NameFromOffset(uint32_t offset) { DCHECK_EQ(offset % kEntrySize, 0); DCHECK_LT(offset, kSizeInBytes); @@ -76,13 +84,18 @@ class ExternalReferenceTable { void Init(Isolate* isolate); private: + static void AddIsolateIndependent(Address address, int* index); + + static void AddIsolateIndependentReferences(int* index); + static void AddBuiltins(int* index); + static void AddRuntimeFunctions(int* index); + static void AddAccessors(int* index); + void Add(Address address, int* index); - void AddReferences(Isolate* isolate, int* index); - void AddBuiltins(int* index); - void AddRuntimeFunctions(int* index); + void CopyIsolateIndependentReferences(int* index); + void AddIsolateDependentReferences(Isolate* isolate, int* index); void AddIsolateAddresses(Isolate* isolate, int* index); - void AddAccessors(int* index); void AddStubCache(Isolate* isolate, int* index); Address GetStatsCounterAddress(StatsCounter* counter); diff --git a/deps/v8/src/codegen/external-reference.cc b/deps/v8/src/codegen/external-reference.cc index e992f1f285..3e91306b15 100644 --- a/deps/v8/src/codegen/external-reference.cc +++ b/deps/v8/src/codegen/external-reference.cc @@ -819,6 +819,9 @@ ExternalReference ExternalReference::search_string_raw() { FUNCTION_REFERENCE(jsarray_array_join_concat_to_sequential_string, JSArray::ArrayJoinConcatToSequentialString) +FUNCTION_REFERENCE(length_tracking_gsab_backed_typed_array_length, + JSTypedArray::LengthTrackingGsabBackedTypedArrayLength) + ExternalReference ExternalReference::search_string_raw_one_one() { return search_string_raw<const uint8_t, const uint8_t>(); } @@ -1017,11 +1020,6 @@ ExternalReference ExternalReference::debug_suspended_generator_address( return ExternalReference(isolate->debug()->suspended_generator_address()); } -ExternalReference ExternalReference::debug_restart_fp_address( - Isolate* isolate) { - return ExternalReference(isolate->debug()->restart_fp_address()); -} - ExternalReference ExternalReference::fast_c_call_caller_fp_address( Isolate* isolate) { return ExternalReference( diff --git a/deps/v8/src/codegen/external-reference.h b/deps/v8/src/codegen/external-reference.h index 60603bdb71..f75a5c694a 100644 --- a/deps/v8/src/codegen/external-reference.h +++ b/deps/v8/src/codegen/external-reference.h @@ -62,7 +62,6 @@ class StatsCounter; V(is_profiling_address, "Isolate::is_profiling") \ V(debug_suspended_generator_address, \ "Debug::step_suspended_generator_address()") \ - V(debug_restart_fp_address, "Debug::restart_fp_address()") \ V(fast_c_call_caller_fp_address, \ "IsolateData::fast_c_call_caller_fp_address") \ V(fast_c_call_caller_pc_address, \ @@ -170,6 +169,8 @@ class StatsCounter; V(jsarray_array_join_concat_to_sequential_string, \ "jsarray_array_join_concat_to_sequential_string") \ V(jsreceiver_create_identity_hash, "jsreceiver_create_identity_hash") \ + V(length_tracking_gsab_backed_typed_array_length, \ + "LengthTrackingGsabBackedTypedArrayLength") \ V(libc_memchr_function, "libc_memchr") \ V(libc_memcpy_function, "libc_memcpy") \ V(libc_memmove_function, "libc_memmove") \ @@ -338,10 +339,11 @@ class ExternalReference { PROFILING_GETTER_CALL }; - static constexpr int kExternalReferenceCount = #define COUNT_EXTERNAL_REFERENCE(name, desc) +1 - EXTERNAL_REFERENCE_LIST(COUNT_EXTERNAL_REFERENCE) - EXTERNAL_REFERENCE_LIST_WITH_ISOLATE(COUNT_EXTERNAL_REFERENCE); + static constexpr int kExternalReferenceCountIsolateIndependent = + EXTERNAL_REFERENCE_LIST(COUNT_EXTERNAL_REFERENCE); + static constexpr int kExternalReferenceCountIsolateDependent = + EXTERNAL_REFERENCE_LIST_WITH_ISOLATE(COUNT_EXTERNAL_REFERENCE); #undef COUNT_EXTERNAL_REFERENCE ExternalReference() : address_(kNullAddress) {} diff --git a/deps/v8/src/codegen/handler-table.h b/deps/v8/src/codegen/handler-table.h index e1626e2be5..5b83bf4a69 100644 --- a/deps/v8/src/codegen/handler-table.h +++ b/deps/v8/src/codegen/handler-table.h @@ -97,8 +97,8 @@ class V8_EXPORT_PRIVATE HandlerTable { int NumberOfReturnEntries() const; #ifdef ENABLE_DISASSEMBLER - void HandlerTableRangePrint(std::ostream& os); // NOLINT - void HandlerTableReturnPrint(std::ostream& os); // NOLINT + void HandlerTableRangePrint(std::ostream& os); + void HandlerTableReturnPrint(std::ostream& os); #endif private: diff --git a/deps/v8/src/codegen/ia32/assembler-ia32.cc b/deps/v8/src/codegen/ia32/assembler-ia32.cc index 809df1daef..688b038e91 100644 --- a/deps/v8/src/codegen/ia32/assembler-ia32.cc +++ b/deps/v8/src/codegen/ia32/assembler-ia32.cc @@ -138,39 +138,38 @@ void CpuFeatures::ProbeImpl(bool cross_compile) { // Only use statically determined features for cross compile (snapshot). if (cross_compile) return; - // To deal with any combination of flags (e.g. --no-enable-sse4-1 - // --enable-sse-4-2), we start checking from the "highest" supported - // extension, for each extension, enable if newer extension is supported. - if (cpu.has_avx2() && FLAG_enable_avx2 && IsSupported(AVX)) { - supported_ |= 1u << AVX2; + if (cpu.has_sse42()) SetSupported(SSE4_2); + if (cpu.has_sse41()) SetSupported(SSE4_1); + if (cpu.has_ssse3()) SetSupported(SSSE3); + if (cpu.has_sse3()) SetSupported(SSE3); + if (cpu.has_avx() && cpu.has_osxsave() && OSHasAVXSupport()) { + SetSupported(AVX); + if (cpu.has_avx2()) SetSupported(AVX2); + if (cpu.has_fma3()) SetSupported(FMA3); } - if (cpu.has_fma3() && FLAG_enable_fma3 && cpu.has_osxsave() && - OSHasAVXSupport()) { - supported_ |= 1u << FMA3; - } - if ((cpu.has_avx() && FLAG_enable_avx && cpu.has_osxsave() && - OSHasAVXSupport()) || - IsSupported(AVX2) || IsSupported(FMA3)) { - supported_ |= 1u << AVX; - } - if ((cpu.has_sse42() && FLAG_enable_sse4_2) || IsSupported(AVX)) - supported_ |= 1u << SSE4_2; - if ((cpu.has_sse41() && FLAG_enable_sse4_1) || IsSupported(SSE4_2)) - supported_ |= 1u << SSE4_1; - if ((cpu.has_ssse3() && FLAG_enable_ssse3) || IsSupported(SSE4_1)) - supported_ |= 1u << SSSE3; - if ((cpu.has_sse3() && FLAG_enable_sse3) || IsSupported(SSSE3)) - supported_ |= 1u << SSE3; - if (cpu.has_bmi1() && FLAG_enable_bmi1) supported_ |= 1u << BMI1; - if (cpu.has_bmi2() && FLAG_enable_bmi2) supported_ |= 1u << BMI2; - if (cpu.has_lzcnt() && FLAG_enable_lzcnt) supported_ |= 1u << LZCNT; - if (cpu.has_popcnt() && FLAG_enable_popcnt) supported_ |= 1u << POPCNT; + + if (cpu.has_bmi1() && FLAG_enable_bmi1) SetSupported(BMI1); + if (cpu.has_bmi2() && FLAG_enable_bmi2) SetSupported(BMI2); + if (cpu.has_lzcnt() && FLAG_enable_lzcnt) SetSupported(LZCNT); + if (cpu.has_popcnt() && FLAG_enable_popcnt) SetSupported(POPCNT); if (strcmp(FLAG_mcpu, "auto") == 0) { - if (cpu.is_atom()) supported_ |= 1u << ATOM; + if (cpu.is_atom()) SetSupported(ATOM); } else if (strcmp(FLAG_mcpu, "atom") == 0) { - supported_ |= 1u << ATOM; + SetSupported(ATOM); } + // Ensure that supported cpu features make sense. E.g. it is wrong to support + // AVX but not SSE4_2, if we have --enable-avx and --no-enable-sse4-2, the + // code above would set AVX to supported, and SSE4_2 to unsupported, then the + // checks below will set AVX to unsupported. + if (!FLAG_enable_sse3) SetUnsupported(SSE3); + if (!FLAG_enable_ssse3 || !IsSupported(SSE3)) SetUnsupported(SSSE3); + if (!FLAG_enable_sse4_1 || !IsSupported(SSSE3)) SetUnsupported(SSE4_1); + if (!FLAG_enable_sse4_2 || !IsSupported(SSE4_1)) SetUnsupported(SSE4_2); + if (!FLAG_enable_avx || !IsSupported(SSE4_2)) SetUnsupported(AVX); + if (!FLAG_enable_avx2 || !IsSupported(AVX)) SetUnsupported(AVX2); + if (!FLAG_enable_fma3 || !IsSupported(AVX)) SetUnsupported(FMA3); + // Set a static value on whether Simd is supported. // This variable is only used for certain archs to query SupportWasmSimd128() // at runtime in builtins using an extern ref. Other callers should use @@ -2489,6 +2488,13 @@ void Assembler::movhlps(XMMRegister dst, XMMRegister src) { emit_sse_operand(dst, src); } +void Assembler::movlhps(XMMRegister dst, XMMRegister src) { + EnsureSpace ensure_space(this); + EMIT(0x0F); + EMIT(0x16); + emit_sse_operand(dst, src); +} + void Assembler::movlps(XMMRegister dst, Operand src) { EnsureSpace ensure_space(this); EMIT(0x0F); @@ -2980,6 +2986,10 @@ void Assembler::vmovhlps(XMMRegister dst, XMMRegister src1, XMMRegister src2) { vinstr(0x12, dst, src1, src2, kNone, k0F, kWIG); } +void Assembler::vmovlhps(XMMRegister dst, XMMRegister src1, XMMRegister src2) { + vinstr(0x16, dst, src1, src2, kNone, k0F, kWIG); +} + void Assembler::vmovlps(XMMRegister dst, XMMRegister src1, Operand src2) { vinstr(0x12, dst, src1, src2, kNone, k0F, kWIG); } @@ -3276,9 +3286,9 @@ void Assembler::sse4_instr(XMMRegister dst, Operand src, byte prefix, } void Assembler::vinstr(byte op, XMMRegister dst, XMMRegister src1, - XMMRegister src2, SIMDPrefix pp, LeadingOpcode m, - VexW w) { - DCHECK(IsEnabled(AVX)); + XMMRegister src2, SIMDPrefix pp, LeadingOpcode m, VexW w, + CpuFeature feature) { + DCHECK(IsEnabled(feature)); EnsureSpace ensure_space(this); emit_vex_prefix(src1, kL128, pp, m, w); EMIT(op); @@ -3286,8 +3296,9 @@ void Assembler::vinstr(byte op, XMMRegister dst, XMMRegister src1, } void Assembler::vinstr(byte op, XMMRegister dst, XMMRegister src1, Operand src2, - SIMDPrefix pp, LeadingOpcode m, VexW w) { - DCHECK(IsEnabled(AVX)); + SIMDPrefix pp, LeadingOpcode m, VexW w, + CpuFeature feature) { + DCHECK(IsEnabled(feature)); EnsureSpace ensure_space(this); emit_vex_prefix(src1, kL128, pp, m, w); EMIT(op); diff --git a/deps/v8/src/codegen/ia32/assembler-ia32.h b/deps/v8/src/codegen/ia32/assembler-ia32.h index 2a8fd3ee28..806d17a2d4 100644 --- a/deps/v8/src/codegen/ia32/assembler-ia32.h +++ b/deps/v8/src/codegen/ia32/assembler-ia32.h @@ -868,6 +868,7 @@ class V8_EXPORT_PRIVATE Assembler : public AssemblerBase { void shufpd(XMMRegister dst, XMMRegister src, byte imm8); void movhlps(XMMRegister dst, XMMRegister src); + void movlhps(XMMRegister dst, XMMRegister src); void movlps(XMMRegister dst, Operand src); void movlps(Operand dst, XMMRegister src); void movhps(XMMRegister dst, Operand src); @@ -1398,6 +1399,7 @@ class V8_EXPORT_PRIVATE Assembler : public AssemblerBase { void vshufpd(XMMRegister dst, XMMRegister src1, Operand src2, byte imm8); void vmovhlps(XMMRegister dst, XMMRegister src1, XMMRegister src2); + void vmovlhps(XMMRegister dst, XMMRegister src1, XMMRegister src2); void vmovlps(XMMRegister dst, XMMRegister src1, Operand src2); void vmovlps(Operand dst, XMMRegister src); void vmovhps(XMMRegister dst, XMMRegister src1, Operand src2); @@ -1516,6 +1518,9 @@ class V8_EXPORT_PRIVATE Assembler : public AssemblerBase { void vmovshdup(XMMRegister dst, XMMRegister src) { vinstr(0x16, dst, xmm0, src, kF3, k0F, kWIG); } + void vbroadcastss(XMMRegister dst, XMMRegister src) { + vinstr(0x18, dst, xmm0, src, k66, k0F38, kW0, AVX2); + } void vbroadcastss(XMMRegister dst, Operand src) { vinstr(0x18, dst, xmm0, src, k66, k0F38, kW0); } @@ -1892,9 +1897,9 @@ class V8_EXPORT_PRIVATE Assembler : public AssemblerBase { void sse4_instr(XMMRegister dst, Operand src, byte prefix, byte escape1, byte escape2, byte opcode); void vinstr(byte op, XMMRegister dst, XMMRegister src1, XMMRegister src2, - SIMDPrefix pp, LeadingOpcode m, VexW w); + SIMDPrefix pp, LeadingOpcode m, VexW w, CpuFeature = AVX); void vinstr(byte op, XMMRegister dst, XMMRegister src1, Operand src2, - SIMDPrefix pp, LeadingOpcode m, VexW w); + SIMDPrefix pp, LeadingOpcode m, VexW w, CpuFeature = AVX); // Most BMI instructions are similar. void bmi1(byte op, Register reg, Register vreg, Operand rm); void bmi2(SIMDPrefix pp, byte op, Register reg, Register vreg, Operand rm); @@ -1933,10 +1938,10 @@ class V8_EXPORT_PRIVATE Assembler : public AssemblerBase { // checks that we did not generate too much. class EnsureSpace { public: - explicit EnsureSpace(Assembler* assembler) : assembler_(assembler) { - if (assembler_->buffer_overflow()) assembler_->GrowBuffer(); + explicit V8_INLINE EnsureSpace(Assembler* assembler) : assembler_(assembler) { + if (V8_UNLIKELY(assembler_->buffer_overflow())) assembler_->GrowBuffer(); #ifdef DEBUG - space_before_ = assembler_->available_space(); + space_before_ = assembler->available_space(); #endif } @@ -1948,7 +1953,7 @@ class EnsureSpace { #endif private: - Assembler* assembler_; + Assembler* const assembler_; #ifdef DEBUG int space_before_; #endif diff --git a/deps/v8/src/codegen/ia32/interface-descriptors-ia32-inl.h b/deps/v8/src/codegen/ia32/interface-descriptors-ia32-inl.h new file mode 100644 index 0000000000..d079dfd725 --- /dev/null +++ b/deps/v8/src/codegen/ia32/interface-descriptors-ia32-inl.h @@ -0,0 +1,267 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef V8_CODEGEN_IA32_INTERFACE_DESCRIPTORS_IA32_INL_H_ +#define V8_CODEGEN_IA32_INTERFACE_DESCRIPTORS_IA32_INL_H_ + +#if V8_TARGET_ARCH_IA32 + +#include "src/codegen/interface-descriptors.h" + +namespace v8 { +namespace internal { + +constexpr auto CallInterfaceDescriptor::DefaultRegisterArray() { + auto registers = RegisterArray(eax, ecx, edx, edi); + STATIC_ASSERT(registers.size() == kMaxBuiltinRegisterParams); + return registers; +} + +// static +constexpr auto RecordWriteDescriptor::registers() { + return RegisterArray(ecx, edx, esi, edi, kReturnRegister0); +} + +// static +constexpr auto DynamicCheckMapsDescriptor::registers() { + return RegisterArray(eax, ecx, edx, edi, esi); +} + +// static +constexpr auto EphemeronKeyBarrierDescriptor::registers() { + return RegisterArray(ecx, edx, esi, edi, kReturnRegister0); +} + +// static +constexpr Register LoadDescriptor::ReceiverRegister() { return edx; } +// static +constexpr Register LoadDescriptor::NameRegister() { return ecx; } +// static +constexpr Register LoadDescriptor::SlotRegister() { return eax; } + +// static +constexpr Register LoadWithVectorDescriptor::VectorRegister() { return no_reg; } + +// static +constexpr Register +LoadWithReceiverAndVectorDescriptor::LookupStartObjectRegister() { + return edi; +} + +// static +constexpr Register StoreDescriptor::ReceiverRegister() { return edx; } +// static +constexpr Register StoreDescriptor::NameRegister() { return ecx; } +// static +constexpr Register StoreDescriptor::ValueRegister() { return no_reg; } +// static +constexpr Register StoreDescriptor::SlotRegister() { return no_reg; } + +// static +constexpr Register StoreWithVectorDescriptor::VectorRegister() { + return no_reg; +} + +// static +constexpr Register StoreTransitionDescriptor::MapRegister() { return edi; } + +// static +constexpr Register ApiGetterDescriptor::HolderRegister() { return ecx; } +// static +constexpr Register ApiGetterDescriptor::CallbackRegister() { return eax; } + +// static +constexpr Register GrowArrayElementsDescriptor::ObjectRegister() { return eax; } +// static +constexpr Register GrowArrayElementsDescriptor::KeyRegister() { return ecx; } + +// static +constexpr Register BaselineLeaveFrameDescriptor::ParamsSizeRegister() { + return esi; +} +// static +constexpr Register BaselineLeaveFrameDescriptor::WeightRegister() { + return edi; +} + +// static +constexpr Register TypeConversionDescriptor::ArgumentRegister() { return eax; } + +// static +constexpr auto TypeofDescriptor::registers() { return RegisterArray(ecx); } + +// static +constexpr auto CallTrampolineDescriptor::registers() { + // eax : number of arguments + // edi : the target to call + return RegisterArray(edi, eax); +} + +// static +constexpr auto CallVarargsDescriptor::registers() { + // eax : number of arguments (on the stack, not including receiver) + // edi : the target to call + // ecx : arguments list length (untagged) + // On the stack : arguments list (FixedArray) + return RegisterArray(edi, eax, ecx); +} + +// static +constexpr auto CallForwardVarargsDescriptor::registers() { + // eax : number of arguments + // ecx : start index (to support rest parameters) + // edi : the target to call + return RegisterArray(edi, eax, ecx); +} + +// static +constexpr auto CallFunctionTemplateDescriptor::registers() { + // edx : function template info + // ecx : number of arguments (on the stack, not including receiver) + return RegisterArray(edx, ecx); +} + +// static +constexpr auto CallWithSpreadDescriptor::registers() { + // eax : number of arguments (on the stack, not including receiver) + // edi : the target to call + // ecx : the object to spread + return RegisterArray(edi, eax, ecx); +} + +// static +constexpr auto CallWithArrayLikeDescriptor::registers() { + // edi : the target to call + // edx : the arguments list + return RegisterArray(edi, edx); +} + +// static +constexpr auto ConstructVarargsDescriptor::registers() { + // eax : number of arguments (on the stack, not including receiver) + // edi : the target to call + // edx : the new target + // ecx : arguments list length (untagged) + // On the stack : arguments list (FixedArray) + return RegisterArray(edi, edx, eax, ecx); +} + +// static +constexpr auto ConstructForwardVarargsDescriptor::registers() { + // eax : number of arguments + // edx : the new target + // ecx : start index (to support rest parameters) + // edi : the target to call + return RegisterArray(edi, edx, eax, ecx); +} + +// static +constexpr auto ConstructWithSpreadDescriptor::registers() { + // eax : number of arguments (on the stack, not including receiver) + // edi : the target to call + // edx : the new target + // ecx : the object to spread + return RegisterArray(edi, edx, eax, ecx); +} + +// static +constexpr auto ConstructWithArrayLikeDescriptor::registers() { + // edi : the target to call + // edx : the new target + // ecx : the arguments list + return RegisterArray(edi, edx, ecx); +} + +// static +constexpr auto ConstructStubDescriptor::registers() { + // eax : number of arguments + // edx : the new target + // edi : the target to call + // ecx : allocation site or undefined + // TODO(jgruber): Remove the unused allocation site parameter. + return RegisterArray(edi, edx, eax, ecx); +} + +// static +constexpr auto AbortDescriptor::registers() { return RegisterArray(edx); } + +// static +constexpr auto CompareDescriptor::registers() { + return RegisterArray(edx, eax); +} + +// static +constexpr auto Compare_BaselineDescriptor::registers() { + return RegisterArray(edx, eax, ecx); +} + +// static +constexpr auto BinaryOpDescriptor::registers() { + return RegisterArray(edx, eax); +} + +// static +constexpr auto BinaryOp_BaselineDescriptor::registers() { + return RegisterArray(edx, eax, ecx); +} + +// static +constexpr auto ApiCallbackDescriptor::registers() { + return RegisterArray(edx, // kApiFunctionAddress + ecx, // kArgc + eax, // kCallData + edi); // kHolder +} + +// static +constexpr auto InterpreterDispatchDescriptor::registers() { + return RegisterArray( + kInterpreterAccumulatorRegister, kInterpreterBytecodeOffsetRegister, + kInterpreterBytecodeArrayRegister, kInterpreterDispatchTableRegister); +} + +// static +constexpr auto InterpreterPushArgsThenCallDescriptor::registers() { + return RegisterArray(eax, // argument count (not including receiver) + ecx, // address of first argument + edi); // the target callable to be call +} + +// static +constexpr auto InterpreterPushArgsThenConstructDescriptor::registers() { + return RegisterArray(eax, // argument count (not including receiver) + ecx); // address of first argument +} + +// static +constexpr auto ResumeGeneratorDescriptor::registers() { + return RegisterArray(eax, // the value to pass to the generator + edx); // the JSGeneratorObject to resume +} + +// static +constexpr auto RunMicrotasksEntryDescriptor::registers() { + return RegisterArray(); +} + +// static +constexpr auto WasmFloat32ToNumberDescriptor::registers() { + // Work around using eax, whose register code is 0, and leads to the FP + // parameter being passed via xmm0, which is not allocatable on ia32. + return RegisterArray(ecx); +} + +// static +constexpr auto WasmFloat64ToNumberDescriptor::registers() { + // Work around using eax, whose register code is 0, and leads to the FP + // parameter being passed via xmm0, which is not allocatable on ia32. + return RegisterArray(ecx); +} + +} // namespace internal +} // namespace v8 + +#endif // V8_TARGET_ARCH_IA32 + +#endif // V8_CODEGEN_IA32_INTERFACE_DESCRIPTORS_IA32_INL_H_ diff --git a/deps/v8/src/codegen/ia32/interface-descriptors-ia32.cc b/deps/v8/src/codegen/ia32/interface-descriptors-ia32.cc deleted file mode 100644 index fd76e01590..0000000000 --- a/deps/v8/src/codegen/ia32/interface-descriptors-ia32.cc +++ /dev/null @@ -1,318 +0,0 @@ -// Copyright 2012 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#if V8_TARGET_ARCH_IA32 - -#include "src/codegen/interface-descriptors.h" - -#include "src/execution/frames.h" - -namespace v8 { -namespace internal { - -const Register CallInterfaceDescriptor::ContextRegister() { return esi; } - -void CallInterfaceDescriptor::DefaultInitializePlatformSpecific( - CallInterfaceDescriptorData* data, int register_parameter_count) { - constexpr Register default_stub_registers[] = {eax, ecx, edx, edi}; - STATIC_ASSERT(arraysize(default_stub_registers) == kMaxBuiltinRegisterParams); - CHECK_LE(static_cast<size_t>(register_parameter_count), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(register_parameter_count, - default_stub_registers); -} - -void RecordWriteDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - static const Register default_stub_registers[] = {ecx, edx, esi, edi, - kReturnRegister0}; - - data->RestrictAllocatableRegisters(default_stub_registers, - arraysize(default_stub_registers)); - - CHECK_LE(static_cast<size_t>(kParameterCount), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(kParameterCount, default_stub_registers); -} - -void DynamicCheckMapsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register default_stub_registers[] = {eax, ecx, edx, edi, esi}; - - data->RestrictAllocatableRegisters(default_stub_registers, - arraysize(default_stub_registers)); - - CHECK_LE(static_cast<size_t>(kParameterCount), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(kParameterCount, default_stub_registers); -} - -void EphemeronKeyBarrierDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - static const Register default_stub_registers[] = {ecx, edx, esi, edi, - kReturnRegister0}; - - data->RestrictAllocatableRegisters(default_stub_registers, - arraysize(default_stub_registers)); - - CHECK_LE(static_cast<size_t>(kParameterCount), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(kParameterCount, default_stub_registers); -} - -const Register LoadDescriptor::ReceiverRegister() { return edx; } -const Register LoadDescriptor::NameRegister() { return ecx; } -const Register LoadDescriptor::SlotRegister() { return eax; } - -const Register LoadWithVectorDescriptor::VectorRegister() { return no_reg; } - -const Register -LoadWithReceiverAndVectorDescriptor::LookupStartObjectRegister() { - return edi; -} - -const Register StoreDescriptor::ReceiverRegister() { return edx; } -const Register StoreDescriptor::NameRegister() { return ecx; } -const Register StoreDescriptor::ValueRegister() { return no_reg; } -const Register StoreDescriptor::SlotRegister() { return no_reg; } - -const Register StoreWithVectorDescriptor::VectorRegister() { return no_reg; } - -const Register StoreTransitionDescriptor::SlotRegister() { return no_reg; } -const Register StoreTransitionDescriptor::VectorRegister() { return no_reg; } -const Register StoreTransitionDescriptor::MapRegister() { return edi; } - -const Register ApiGetterDescriptor::HolderRegister() { return ecx; } -const Register ApiGetterDescriptor::CallbackRegister() { return eax; } - -const Register GrowArrayElementsDescriptor::ObjectRegister() { return eax; } -const Register GrowArrayElementsDescriptor::KeyRegister() { return ecx; } - -const Register BaselineLeaveFrameDescriptor::ParamsSizeRegister() { - return esi; -} -const Register BaselineLeaveFrameDescriptor::WeightRegister() { return edi; } - -// static -const Register TypeConversionDescriptor::ArgumentRegister() { return eax; } - -void TypeofDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {ecx}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallTrampolineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // eax : number of arguments - // edi : the target to call - Register registers[] = {edi, eax}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // eax : number of arguments (on the stack, not including receiver) - // edi : the target to call - // ecx : arguments list length (untagged) - // On the stack : arguments list (FixedArray) - Register registers[] = {edi, eax, ecx}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallForwardVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // eax : number of arguments - // ecx : start index (to support rest parameters) - // edi : the target to call - Register registers[] = {edi, eax, ecx}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallFunctionTemplateDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // edx : function template info - // ecx : number of arguments (on the stack, not including receiver) - Register registers[] = {edx, ecx}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallWithSpreadDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // eax : number of arguments (on the stack, not including receiver) - // edi : the target to call - // ecx : the object to spread - Register registers[] = {edi, eax, ecx}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallWithArrayLikeDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // edi : the target to call - // edx : the arguments list - Register registers[] = {edi, edx}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // eax : number of arguments (on the stack, not including receiver) - // edi : the target to call - // edx : the new target - // ecx : arguments list length (untagged) - // On the stack : arguments list (FixedArray) - Register registers[] = {edi, edx, eax, ecx}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructForwardVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // eax : number of arguments - // edx : the new target - // ecx : start index (to support rest parameters) - // edi : the target to call - Register registers[] = {edi, edx, eax, ecx}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructWithSpreadDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // eax : number of arguments (on the stack, not including receiver) - // edi : the target to call - // edx : the new target - // ecx : the object to spread - Register registers[] = {edi, edx, eax, ecx}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructWithArrayLikeDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // edi : the target to call - // edx : the new target - // ecx : the arguments list - Register registers[] = {edi, edx, ecx}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructStubDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // eax : number of arguments - // edx : the new target - // edi : the target to call - // ecx : allocation site or undefined - // TODO(jgruber): Remove the unused allocation site parameter. - Register registers[] = {edi, edx, eax, ecx}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void AbortDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {edx}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CompareDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {edx, eax}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void Compare_BaselineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {edx, eax, ecx}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void BinaryOpDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {edx, eax}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void BinaryOp_BaselineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {edx, eax, ecx}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ApiCallbackDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - edx, // kApiFunctionAddress - ecx, // kArgc - eax, // kCallData - edi, // kHolder - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void InterpreterDispatchDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - kInterpreterAccumulatorRegister, kInterpreterBytecodeOffsetRegister, - kInterpreterBytecodeArrayRegister, kInterpreterDispatchTableRegister}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void InterpreterPushArgsThenCallDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - eax, // argument count (not including receiver) - ecx, // address of first argument - edi // the target callable to be call - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void InterpreterPushArgsThenConstructDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - eax, // argument count (not including receiver) - ecx, // address of first argument - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ResumeGeneratorDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - eax, // the value to pass to the generator - edx // the JSGeneratorObject to resume - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void FrameDropperTrampolineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - eax, // loaded new FP - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void RunMicrotasksEntryDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - data->InitializePlatformSpecific(0, nullptr); -} - -void WasmFloat32ToNumberDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // Work around using eax, whose register code is 0, and leads to the FP - // parameter being passed via xmm0, which is not allocatable on ia32. - Register registers[] = {ecx}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void WasmFloat64ToNumberDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // Work around using eax, whose register code is 0, and leads to the FP - // parameter being passed via xmm0, which is not allocatable on ia32. - Register registers[] = {ecx}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -} // namespace internal -} // namespace v8 - -#endif // V8_TARGET_ARCH_IA32 diff --git a/deps/v8/src/codegen/ia32/macro-assembler-ia32.cc b/deps/v8/src/codegen/ia32/macro-assembler-ia32.cc index 9892eb9470..7c8af3fde0 100644 --- a/deps/v8/src/codegen/ia32/macro-assembler-ia32.cc +++ b/deps/v8/src/codegen/ia32/macro-assembler-ia32.cc @@ -19,7 +19,7 @@ #include "src/codegen/external-reference.h" #include "src/codegen/ia32/assembler-ia32.h" #include "src/codegen/ia32/register-ia32.h" -#include "src/codegen/interface-descriptors.h" +#include "src/codegen/interface-descriptors-inl.h" #include "src/codegen/label.h" #include "src/codegen/macro-assembler.h" #include "src/codegen/register.h" @@ -294,7 +294,7 @@ int TurboAssembler::RequiredStackSizeForCallerSaved(SaveFPRegsMode fp_mode, } } - if (fp_mode == kSaveFPRegs) { + if (fp_mode == SaveFPRegsMode::kSave) { // Count all XMM registers except XMM0. bytes += kDoubleSize * (XMMRegister::kNumRegisters - 1); } @@ -316,7 +316,7 @@ int TurboAssembler::PushCallerSaved(SaveFPRegsMode fp_mode, Register exclusion1, } } - if (fp_mode == kSaveFPRegs) { + if (fp_mode == SaveFPRegsMode::kSave) { // Save all XMM registers except XMM0. int delta = kDoubleSize * (XMMRegister::kNumRegisters - 1); AllocateStackSpace(delta); @@ -333,7 +333,7 @@ int TurboAssembler::PushCallerSaved(SaveFPRegsMode fp_mode, Register exclusion1, int TurboAssembler::PopCallerSaved(SaveFPRegsMode fp_mode, Register exclusion1, Register exclusion2, Register exclusion3) { int bytes = 0; - if (fp_mode == kSaveFPRegs) { + if (fp_mode == SaveFPRegsMode::kSave) { // Restore all XMM registers except XMM0. int delta = kDoubleSize * (XMMRegister::kNumRegisters - 1); for (int i = XMMRegister::kNumRegisters - 1; i > 0; i--) { @@ -365,7 +365,7 @@ void MacroAssembler::RecordWriteField(Register object, int offset, Label done; // Skip barrier if writing a smi. - if (smi_check == INLINE_SMI_CHECK) { + if (smi_check == SmiCheck::kInline) { JumpIfSmi(value, &done); } @@ -374,7 +374,7 @@ void MacroAssembler::RecordWriteField(Register object, int offset, DCHECK(IsAligned(offset, kTaggedSize)); lea(dst, FieldOperand(object, offset)); - if (emit_debug_code()) { + if (FLAG_debug_code) { Label ok; test_b(dst, Immediate(kTaggedSize - 1)); j(zero, &ok, Label::kNear); @@ -383,13 +383,13 @@ void MacroAssembler::RecordWriteField(Register object, int offset, } RecordWrite(object, dst, value, save_fp, remembered_set_action, - OMIT_SMI_CHECK); + SmiCheck::kOmit); bind(&done); // Clobber clobbered input registers when running with the debug-code flag // turned on to provoke errors. - if (emit_debug_code()) { + if (FLAG_debug_code) { mov(value, Immediate(bit_cast<int32_t>(kZapValue))); mov(dst, Immediate(bit_cast<int32_t>(kZapValue))); } @@ -511,13 +511,13 @@ void MacroAssembler::RecordWrite(Register object, Register address, DCHECK(value != address); AssertNotSmi(object); - if ((remembered_set_action == OMIT_REMEMBERED_SET && + if ((remembered_set_action == RememberedSetAction::kOmit && !FLAG_incremental_marking) || FLAG_disable_write_barriers) { return; } - if (emit_debug_code()) { + if (FLAG_debug_code) { Label ok; cmp(value, Operand(address, 0)); j(equal, &ok, Label::kNear); @@ -529,7 +529,7 @@ void MacroAssembler::RecordWrite(Register object, Register address, // catch stores of Smis and stores into young gen. Label done; - if (smi_check == INLINE_SMI_CHECK) { + if (smi_check == SmiCheck::kInline) { // Skip barrier if writing a smi. JumpIfSmi(value, &done, Label::kNear); } @@ -549,25 +549,12 @@ void MacroAssembler::RecordWrite(Register object, Register address, // Clobber clobbered registers when running with the debug-code flag // turned on to provoke errors. - if (emit_debug_code()) { + if (FLAG_debug_code) { mov(address, Immediate(bit_cast<int32_t>(kZapValue))); mov(value, Immediate(bit_cast<int32_t>(kZapValue))); } } -void MacroAssembler::MaybeDropFrames() { - // Check whether we need to drop frames to restart a function on the stack. - Label dont_drop; - ExternalReference restart_fp = - ExternalReference::debug_restart_fp_address(isolate()); - mov(eax, ExternalReferenceAsOperand(restart_fp, eax)); - test(eax, eax); - j(zero, &dont_drop, Label::kNear); - - Jump(BUILTIN_CODE(isolate(), FrameDropperTrampoline), RelocInfo::CODE_TARGET); - bind(&dont_drop); -} - void TurboAssembler::Cvtsi2ss(XMMRegister dst, Operand src) { xorps(dst, dst); cvtsi2ss(dst, src); @@ -1029,14 +1016,14 @@ void MacroAssembler::CmpInstanceTypeRange(Register map, Register scratch, } void MacroAssembler::AssertSmi(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { test(object, Immediate(kSmiTagMask)); Check(equal, AbortReason::kOperandIsNotASmi); } } void MacroAssembler::AssertConstructor(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { test(object, Immediate(kSmiTagMask)); Check(not_equal, AbortReason::kOperandIsASmiAndNotAConstructor); Push(object); @@ -1049,7 +1036,7 @@ void MacroAssembler::AssertConstructor(Register object) { } void MacroAssembler::AssertFunction(Register object, Register scratch) { - if (emit_debug_code()) { + if (FLAG_debug_code) { test(object, Immediate(kSmiTagMask)); Check(not_equal, AbortReason::kOperandIsASmiAndNotAFunction); Push(object); @@ -1062,7 +1049,7 @@ void MacroAssembler::AssertFunction(Register object, Register scratch) { } void MacroAssembler::AssertBoundFunction(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { test(object, Immediate(kSmiTagMask)); Check(not_equal, AbortReason::kOperandIsASmiAndNotABoundFunction); Push(object); @@ -1073,7 +1060,7 @@ void MacroAssembler::AssertBoundFunction(Register object) { } void MacroAssembler::AssertGeneratorObject(Register object) { - if (!emit_debug_code()) return; + if (!FLAG_debug_code) return; test(object, Immediate(kSmiTagMask)); Check(not_equal, AbortReason::kOperandIsASmiAndNotAGeneratorObject); @@ -1105,7 +1092,7 @@ void MacroAssembler::AssertGeneratorObject(Register object) { void MacroAssembler::AssertUndefinedOrAllocationSite(Register object, Register scratch) { - if (emit_debug_code()) { + if (FLAG_debug_code) { Label done_checking; AssertNotSmi(object); CompareRoot(object, scratch, RootIndex::kUndefinedValue); @@ -1118,7 +1105,7 @@ void MacroAssembler::AssertUndefinedOrAllocationSite(Register object, } void MacroAssembler::AssertNotSmi(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { test(object, Immediate(kSmiTagMask)); Check(not_equal, AbortReason::kOperandIsASmi); } @@ -1147,7 +1134,7 @@ void TurboAssembler::EnterFrame(StackFrame::Type type) { } void TurboAssembler::LeaveFrame(StackFrame::Type type) { - if (emit_debug_code() && !StackFrame::IsJavaScript(type)) { + if (FLAG_debug_code && !StackFrame::IsJavaScript(type)) { cmp(Operand(ebp, CommonFrameConstants::kContextOrFrameTypeOffset), Immediate(StackFrame::TypeToMarker(type))); Check(equal, AbortReason::kStackFrameTypesMustMatch); @@ -1389,8 +1376,8 @@ void MacroAssembler::JumpToExternalReference(const ExternalReference& ext, bool builtin_exit_frame) { // Set the entry point and jump to the C entry runtime stub. Move(kRuntimeCallFunctionRegister, Immediate(ext)); - Handle<Code> code = CodeFactory::CEntry(isolate(), 1, kDontSaveFPRegs, - kArgvOnStack, builtin_exit_frame); + Handle<Code> code = CodeFactory::CEntry(isolate(), 1, SaveFPRegsMode::kIgnore, + ArgvMode::kStack, builtin_exit_frame); Jump(code, RelocInfo::CODE_TARGET); } @@ -1494,7 +1481,7 @@ void MacroAssembler::StackOverflowCheck(Register num_args, Register scratch, void MacroAssembler::InvokePrologue(Register expected_parameter_count, Register actual_parameter_count, - Label* done, InvokeFlag flag) { + Label* done, InvokeType type) { if (expected_parameter_count != actual_parameter_count) { DCHECK_EQ(actual_parameter_count, eax); DCHECK_EQ(expected_parameter_count, ecx); @@ -1531,9 +1518,9 @@ void MacroAssembler::InvokePrologue(Register expected_parameter_count, Operand(expected_parameter_count, times_system_pointer_size, 0)); AllocateStackSpace(scratch); // Extra words are the receiver and the return address (if a jump). - int extra_words = flag == CALL_FUNCTION ? 1 : 2; + int extra_words = type == InvokeType::kCall ? 1 : 2; lea(num, Operand(eax, extra_words)); // Number of words to copy. - Set(current, 0); + Move(current, 0); // Fall-through to the loop body because there are non-zero words to copy. bind(©); mov(scratch, Operand(src, current, times_system_pointer_size, 0)); @@ -1610,9 +1597,9 @@ void MacroAssembler::CallDebugOnFunctionCall(Register fun, Register new_target, void MacroAssembler::InvokeFunctionCode(Register function, Register new_target, Register expected_parameter_count, Register actual_parameter_count, - InvokeFlag flag) { + InvokeType type) { // You can't call a function without a valid frame. - DCHECK_IMPLIES(flag == CALL_FUNCTION, has_frame()); + DCHECK_IMPLIES(type == InvokeType::kCall, has_frame()); DCHECK_EQ(function, edi); DCHECK_IMPLIES(new_target.is_valid(), new_target == edx); DCHECK(expected_parameter_count == ecx || expected_parameter_count == eax); @@ -1636,17 +1623,19 @@ void MacroAssembler::InvokeFunctionCode(Register function, Register new_target, } Label done; - InvokePrologue(expected_parameter_count, actual_parameter_count, &done, flag); + InvokePrologue(expected_parameter_count, actual_parameter_count, &done, type); // We call indirectly through the code field in the function to // allow recompilation to take effect without changing any of the // call sites. static_assert(kJavaScriptCallCodeStartRegister == ecx, "ABI mismatch"); mov(ecx, FieldOperand(function, JSFunction::kCodeOffset)); - if (flag == CALL_FUNCTION) { - CallCodeObject(ecx); - } else { - DCHECK(flag == JUMP_FUNCTION); - JumpCodeObject(ecx); + switch (type) { + case InvokeType::kCall: + CallCodeObject(ecx); + break; + case InvokeType::kJump: + JumpCodeObject(ecx); + break; } jmp(&done, Label::kNear); @@ -1661,9 +1650,9 @@ void MacroAssembler::InvokeFunctionCode(Register function, Register new_target, void MacroAssembler::InvokeFunction(Register fun, Register new_target, Register actual_parameter_count, - InvokeFlag flag) { + InvokeType type) { // You can't call a function without a valid frame. - DCHECK(flag == JUMP_FUNCTION || has_frame()); + DCHECK(type == InvokeType::kJump || has_frame()); DCHECK(fun == edi); mov(ecx, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset)); @@ -1671,7 +1660,7 @@ void MacroAssembler::InvokeFunction(Register fun, Register new_target, movzx_w(ecx, FieldOperand(ecx, SharedFunctionInfo::kFormalParameterCountOffset)); - InvokeFunctionCode(edi, new_target, ecx, actual_parameter_count, flag); + InvokeFunctionCode(edi, new_target, ecx, actual_parameter_count, type); } void MacroAssembler::LoadGlobalProxy(Register dst) { @@ -1852,34 +1841,6 @@ void TurboAssembler::Pshufb(XMMRegister dst, XMMRegister src, Operand mask) { pshufb(dst, mask); } -void TurboAssembler::Pblendw(XMMRegister dst, Operand src, uint8_t imm8) { - if (CpuFeatures::IsSupported(AVX)) { - CpuFeatureScope scope(this, AVX); - vpblendw(dst, dst, src, imm8); - return; - } - if (CpuFeatures::IsSupported(SSE4_1)) { - CpuFeatureScope sse_scope(this, SSE4_1); - pblendw(dst, src, imm8); - return; - } - FATAL("no AVX or SSE4.1 support"); -} - -void TurboAssembler::Palignr(XMMRegister dst, Operand src, uint8_t imm8) { - if (CpuFeatures::IsSupported(AVX)) { - CpuFeatureScope scope(this, AVX); - vpalignr(dst, dst, src, imm8); - return; - } - if (CpuFeatures::IsSupported(SSSE3)) { - CpuFeatureScope sse_scope(this, SSSE3); - palignr(dst, src, imm8); - return; - } - FATAL("no AVX or SSE3 support"); -} - void TurboAssembler::Pextrd(Register dst, XMMRegister src, uint8_t imm8) { if (imm8 == 0) { Movd(dst, src); @@ -1994,19 +1955,6 @@ void TurboAssembler::Vbroadcastss(XMMRegister dst, Operand src) { shufps(dst, dst, static_cast<byte>(0)); } -void TurboAssembler::Shufps(XMMRegister dst, XMMRegister src1, XMMRegister src2, - uint8_t imm8) { - if (CpuFeatures::IsSupported(AVX)) { - CpuFeatureScope avx_scope(this, AVX); - vshufps(dst, src1, src2, imm8); - } else { - if (dst != src1) { - movaps(dst, src1); - } - shufps(dst, src2, imm8); - } -} - void TurboAssembler::Lzcnt(Register dst, Operand src) { if (CpuFeatures::IsSupported(LZCNT)) { CpuFeatureScope scope(this, LZCNT); @@ -2079,11 +2027,11 @@ void MacroAssembler::DecrementCounter(StatsCounter* counter, int value, } void TurboAssembler::Assert(Condition cc, AbortReason reason) { - if (emit_debug_code()) Check(cc, reason); + if (FLAG_debug_code) Check(cc, reason); } void TurboAssembler::AssertUnreachable(AbortReason reason) { - if (emit_debug_code()) Abort(reason); + if (FLAG_debug_code) Abort(reason); } void TurboAssembler::Check(Condition cc, AbortReason reason) { @@ -2109,11 +2057,11 @@ void TurboAssembler::CheckStackAlignment() { } void TurboAssembler::Abort(AbortReason reason) { -#ifdef DEBUG - const char* msg = GetAbortReason(reason); - RecordComment("Abort message: "); - RecordComment(msg); -#endif + if (FLAG_code_comments) { + const char* msg = GetAbortReason(reason); + RecordComment("Abort message: "); + RecordComment(msg); + } // Avoid emitting call to builtin if requested. if (trap_on_abort()) { @@ -2171,7 +2119,7 @@ void TurboAssembler::CallCFunction(Register function, int num_arguments) { DCHECK_LE(num_arguments, kMaxCParameters); DCHECK(has_frame()); // Check stack alignment. - if (emit_debug_code()) { + if (FLAG_debug_code) { CheckStackAlignment(); } diff --git a/deps/v8/src/codegen/ia32/macro-assembler-ia32.h b/deps/v8/src/codegen/ia32/macro-assembler-ia32.h index 4c5c3ade02..a21a355568 100644 --- a/deps/v8/src/codegen/ia32/macro-assembler-ia32.h +++ b/deps/v8/src/codegen/ia32/macro-assembler-ia32.h @@ -44,9 +44,6 @@ class StatsCounter; // distinguish memory operands from other operands on ia32. using MemOperand = Operand; -enum RememberedSetAction { EMIT_REMEMBERED_SET, OMIT_REMEMBERED_SET }; -enum SmiCheck { INLINE_SMI_CHECK, OMIT_SMI_CHECK }; - // TODO(victorgomes): Move definition to macro-assembler.h, once all other // platforms are updated. enum class StackLimitKind { kInterruptStackLimit, kRealStackLimit }; @@ -122,6 +119,13 @@ class V8_EXPORT_PRIVATE TurboAssembler : public SharedTurboAssembler { void CheckStackAlignment(); // Move a constant into a destination using the most efficient encoding. + void Move(Register dst, int32_t x) { + if (x == 0) { + xor_(dst, dst); + } else { + mov(dst, Immediate(x)); + } + } void Move(Register dst, const Immediate& src); void Move(Register dst, Smi src) { Move(dst, Immediate(src)); } void Move(Register dst, Handle<HeapObject> src); @@ -301,152 +305,11 @@ class V8_EXPORT_PRIVATE TurboAssembler : public SharedTurboAssembler { // may be bigger than 2^16 - 1. Requires a scratch register. void Ret(int bytes_dropped, Register scratch); -// Only use these macros when non-destructive source of AVX version is not -// needed. -#define AVX_OP3_WITH_TYPE(macro_name, name, dst_type, src_type) \ - void macro_name(dst_type dst, src_type src) { \ - if (CpuFeatures::IsSupported(AVX)) { \ - CpuFeatureScope scope(this, AVX); \ - v##name(dst, dst, src); \ - } else { \ - name(dst, src); \ - } \ - } -#define AVX_OP3_XO(macro_name, name) \ - AVX_OP3_WITH_TYPE(macro_name, name, XMMRegister, XMMRegister) \ - AVX_OP3_WITH_TYPE(macro_name, name, XMMRegister, Operand) - - AVX_OP3_XO(Packsswb, packsswb) - AVX_OP3_XO(Packuswb, packuswb) - AVX_OP3_XO(Paddusb, paddusb) - AVX_OP3_XO(Pand, pand) - AVX_OP3_XO(Pcmpeqb, pcmpeqb) - AVX_OP3_XO(Pcmpeqw, pcmpeqw) - AVX_OP3_XO(Pcmpeqd, pcmpeqd) - AVX_OP3_XO(Por, por) - AVX_OP3_XO(Psubb, psubb) - AVX_OP3_XO(Psubw, psubw) - AVX_OP3_XO(Psubd, psubd) - AVX_OP3_XO(Psubq, psubq) - AVX_OP3_XO(Punpcklbw, punpcklbw) - AVX_OP3_XO(Punpckhbw, punpckhbw) - AVX_OP3_XO(Punpckldq, punpckldq) - AVX_OP3_XO(Punpcklqdq, punpcklqdq) - AVX_OP3_XO(Pxor, pxor) - AVX_OP3_XO(Andps, andps) - AVX_OP3_XO(Andpd, andpd) - AVX_OP3_XO(Xorps, xorps) - AVX_OP3_XO(Xorpd, xorpd) - AVX_OP3_XO(Sqrtss, sqrtss) - AVX_OP3_XO(Sqrtsd, sqrtsd) - AVX_OP3_XO(Orps, orps) - AVX_OP3_XO(Orpd, orpd) - AVX_OP3_XO(Andnpd, andnpd) - AVX_OP3_WITH_TYPE(Movhlps, movhlps, XMMRegister, XMMRegister) - AVX_OP3_WITH_TYPE(Psraw, psraw, XMMRegister, uint8_t) - AVX_OP3_WITH_TYPE(Psrlq, psrlq, XMMRegister, uint8_t) - -#undef AVX_OP3_XO -#undef AVX_OP3_WITH_TYPE - -// Same as AVX_OP3_WITH_TYPE but supports a CpuFeatureScope -#define AVX_OP2_WITH_TYPE_SCOPE(macro_name, name, dst_type, src_type, \ - sse_scope) \ - void macro_name(dst_type dst, src_type src) { \ - if (CpuFeatures::IsSupported(AVX)) { \ - CpuFeatureScope scope(this, AVX); \ - v##name(dst, dst, src); \ - } else if (CpuFeatures::IsSupported(sse_scope)) { \ - CpuFeatureScope scope(this, sse_scope); \ - name(dst, src); \ - } \ - } -#define AVX_OP2_XO(macro_name, name, sse_scope) \ - AVX_OP2_WITH_TYPE_SCOPE(macro_name, name, XMMRegister, XMMRegister, \ - sse_scope) \ - AVX_OP2_WITH_TYPE_SCOPE(macro_name, name, XMMRegister, Operand, sse_scope) - AVX_OP2_XO(Psignb, psignb, SSSE3) - AVX_OP2_XO(Psignw, psignw, SSSE3) - AVX_OP2_XO(Psignd, psignd, SSSE3) - AVX_OP2_XO(Pcmpeqq, pcmpeqq, SSE4_1) -#undef AVX_OP2_XO -#undef AVX_OP2_WITH_TYPE_SCOPE - -// Only use this macro when dst and src1 is the same in SSE case. -#define AVX_PACKED_OP3_WITH_TYPE(macro_name, name, dst_type, src_type) \ - void macro_name(dst_type dst, dst_type src1, src_type src2) { \ - if (CpuFeatures::IsSupported(AVX)) { \ - CpuFeatureScope scope(this, AVX); \ - v##name(dst, src1, src2); \ - } else { \ - DCHECK_EQ(dst, src1); \ - name(dst, src2); \ - } \ - } -#define AVX_PACKED_OP3(macro_name, name) \ - AVX_PACKED_OP3_WITH_TYPE(macro_name, name, XMMRegister, XMMRegister) \ - AVX_PACKED_OP3_WITH_TYPE(macro_name, name, XMMRegister, Operand) - - AVX_PACKED_OP3(Unpcklps, unpcklps) - AVX_PACKED_OP3(Andnps, andnps) - AVX_PACKED_OP3(Addps, addps) - AVX_PACKED_OP3(Addpd, addpd) - AVX_PACKED_OP3(Subps, subps) - AVX_PACKED_OP3(Subpd, subpd) - AVX_PACKED_OP3(Mulps, mulps) - AVX_PACKED_OP3(Mulpd, mulpd) - AVX_PACKED_OP3(Divps, divps) - AVX_PACKED_OP3(Divpd, divpd) - AVX_PACKED_OP3(Cmpeqpd, cmpeqpd) - AVX_PACKED_OP3(Cmpneqpd, cmpneqpd) - AVX_PACKED_OP3(Cmpltpd, cmpltpd) - AVX_PACKED_OP3(Cmpleps, cmpleps) - AVX_PACKED_OP3(Cmplepd, cmplepd) - AVX_PACKED_OP3(Minps, minps) - AVX_PACKED_OP3(Minpd, minpd) - AVX_PACKED_OP3(Maxps, maxps) - AVX_PACKED_OP3(Maxpd, maxpd) - AVX_PACKED_OP3(Cmpunordps, cmpunordps) - AVX_PACKED_OP3(Cmpunordpd, cmpunordpd) - AVX_PACKED_OP3(Psllw, psllw) - AVX_PACKED_OP3(Pslld, pslld) - AVX_PACKED_OP3(Psllq, psllq) - AVX_PACKED_OP3(Psrlw, psrlw) - AVX_PACKED_OP3(Psrld, psrld) - AVX_PACKED_OP3(Psrlq, psrlq) - AVX_PACKED_OP3(Psraw, psraw) - AVX_PACKED_OP3(Psrad, psrad) - AVX_PACKED_OP3(Paddd, paddd) - AVX_PACKED_OP3(Paddq, paddq) - AVX_PACKED_OP3(Psubd, psubd) - AVX_PACKED_OP3(Psubq, psubq) - AVX_PACKED_OP3(Pmuludq, pmuludq) - AVX_PACKED_OP3(Pavgb, pavgb) - AVX_PACKED_OP3(Pavgw, pavgw) - AVX_PACKED_OP3(Pand, pand) - AVX_PACKED_OP3(Pminub, pminub) - AVX_PACKED_OP3(Pmaxub, pmaxub) - AVX_PACKED_OP3(Paddusb, paddusb) - AVX_PACKED_OP3(Psubusb, psubusb) - AVX_PACKED_OP3(Pcmpgtb, pcmpgtb) - AVX_PACKED_OP3(Pcmpeqb, pcmpeqb) - AVX_PACKED_OP3(Paddb, paddb) - AVX_PACKED_OP3(Paddsb, paddsb) - AVX_PACKED_OP3(Psubb, psubb) - AVX_PACKED_OP3(Psubsb, psubsb) - -#undef AVX_PACKED_OP3 - - AVX_PACKED_OP3_WITH_TYPE(Psllw, psllw, XMMRegister, uint8_t) - AVX_PACKED_OP3_WITH_TYPE(Pslld, pslld, XMMRegister, uint8_t) - AVX_PACKED_OP3_WITH_TYPE(Psllq, psllq, XMMRegister, uint8_t) - AVX_PACKED_OP3_WITH_TYPE(Psrlw, psrlw, XMMRegister, uint8_t) - AVX_PACKED_OP3_WITH_TYPE(Psrld, psrld, XMMRegister, uint8_t) - AVX_PACKED_OP3_WITH_TYPE(Psrlq, psrlq, XMMRegister, uint8_t) - AVX_PACKED_OP3_WITH_TYPE(Psraw, psraw, XMMRegister, uint8_t) - AVX_PACKED_OP3_WITH_TYPE(Psrad, psrad, XMMRegister, uint8_t) - -#undef AVX_PACKED_OP3_WITH_TYPE + // Defined here because some callers take a pointer to member functions. + AVX_OP(Pcmpeqb, pcmpeqb) + AVX_OP(Pcmpeqw, pcmpeqw) + AVX_OP(Pcmpeqd, pcmpeqd) + AVX_OP_SSE4_1(Pcmpeqq, pcmpeqq) // Macro for instructions that have 2 operands for AVX version and 1 operand for // SSE version. Will move src1 to dst if dst != src1. @@ -468,35 +331,6 @@ class V8_EXPORT_PRIVATE TurboAssembler : public SharedTurboAssembler { AVX_OP3_WITH_MOVE(Pmaddwd, pmaddwd, XMMRegister, Operand) #undef AVX_OP3_WITH_MOVE -#define AVX_OP3_WITH_TYPE_SCOPE(macro_name, name, dst_type, src_type, \ - sse_scope) \ - void macro_name(dst_type dst, dst_type src1, src_type src2) { \ - if (CpuFeatures::IsSupported(AVX)) { \ - CpuFeatureScope scope(this, AVX); \ - v##name(dst, src1, src2); \ - return; \ - } \ - if (CpuFeatures::IsSupported(sse_scope)) { \ - CpuFeatureScope scope(this, sse_scope); \ - DCHECK_EQ(dst, src1); \ - name(dst, src2); \ - return; \ - } \ - UNREACHABLE(); \ - } -#define AVX_OP3_XO_SSE4(macro_name, name) \ - AVX_OP3_WITH_TYPE_SCOPE(macro_name, name, XMMRegister, XMMRegister, SSE4_1) \ - AVX_OP3_WITH_TYPE_SCOPE(macro_name, name, XMMRegister, Operand, SSE4_1) - - AVX_OP3_WITH_TYPE_SCOPE(Haddps, haddps, XMMRegister, Operand, SSE3) - AVX_OP3_XO_SSE4(Pmaxsd, pmaxsd) - AVX_OP3_XO_SSE4(Pminsb, pminsb) - AVX_OP3_XO_SSE4(Pmaxsb, pmaxsb) - AVX_OP3_XO_SSE4(Pcmpeqq, pcmpeqq) - -#undef AVX_OP3_XO_SSE4 -#undef AVX_OP3_WITH_TYPE_SCOPE - // TODO(zhin): Remove after moving more definitions into SharedTurboAssembler. void Movlps(Operand dst, XMMRegister src) { SharedTurboAssembler::Movlps(dst, src); @@ -513,16 +347,6 @@ class V8_EXPORT_PRIVATE TurboAssembler : public SharedTurboAssembler { } void Pshufb(XMMRegister dst, XMMRegister src, Operand mask); - void Pblendw(XMMRegister dst, XMMRegister src, uint8_t imm8) { - Pblendw(dst, Operand(src), imm8); - } - void Pblendw(XMMRegister dst, Operand src, uint8_t imm8); - - void Palignr(XMMRegister dst, XMMRegister src, uint8_t imm8) { - Palignr(dst, Operand(src), imm8); - } - void Palignr(XMMRegister dst, Operand src, uint8_t imm8); - void Pextrd(Register dst, XMMRegister src, uint8_t imm8); void Pinsrb(XMMRegister dst, Register src, int8_t imm8) { Pinsrb(dst, Operand(src), imm8); @@ -544,10 +368,6 @@ class V8_EXPORT_PRIVATE TurboAssembler : public SharedTurboAssembler { void Pinsrw(XMMRegister dst, XMMRegister src1, Operand src2, int8_t imm8); void Vbroadcastss(XMMRegister dst, Operand src); - // Shufps that will mov src1 into dst if AVX is not supported. - void Shufps(XMMRegister dst, XMMRegister src1, XMMRegister src2, - uint8_t imm8); - // Expression support // cvtsi2sd instruction only writes to the low 64-bit of dst register, which // hinders register renaming and makes dependence chains longer. So we use @@ -680,15 +500,6 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { public: using TurboAssembler::TurboAssembler; - // Load a register with a long value as efficiently as possible. - void Set(Register dst, int32_t x) { - if (x == 0) { - xor_(dst, dst); - } else { - mov(dst, Immediate(x)); - } - } - void PushRoot(RootIndex index); // Compare the object in a register to a value and jump if they are equal. @@ -722,8 +533,8 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { void RecordWriteField( Register object, int offset, Register value, Register scratch, SaveFPRegsMode save_fp, - RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, - SmiCheck smi_check = INLINE_SMI_CHECK); + RememberedSetAction remembered_set_action = RememberedSetAction::kEmit, + SmiCheck smi_check = SmiCheck::kInline); // For page containing |object| mark region covering |address| // dirty. |object| is the object being stored into, |value| is the @@ -732,11 +543,8 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { // write barrier if the value is a smi. void RecordWrite( Register object, Register address, Register value, SaveFPRegsMode save_fp, - RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, - SmiCheck smi_check = INLINE_SMI_CHECK); - - // Frame restart support - void MaybeDropFrames(); + RememberedSetAction remembered_set_action = RememberedSetAction::kEmit, + SmiCheck smi_check = SmiCheck::kInline); // Enter specific kind of exit frame. Expects the number of // arguments in register eax and sets up the number of arguments in @@ -768,7 +576,7 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { void InvokeFunctionCode(Register function, Register new_target, Register expected_parameter_count, - Register actual_parameter_count, InvokeFlag flag); + Register actual_parameter_count, InvokeType type); // On function call, call into the debugger. // This may clobber ecx. @@ -779,7 +587,7 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { // Invoke the JavaScript function in the given register. Changes the // current context to the context in the function before invoking. void InvokeFunction(Register function, Register new_target, - Register actual_parameter_count, InvokeFlag flag); + Register actual_parameter_count, InvokeType type); // Compare object type for heap object. // Incoming register is heap_object and outgoing register is map. @@ -865,18 +673,18 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { // Call a runtime routine. void CallRuntime(const Runtime::Function* f, int num_arguments, - SaveFPRegsMode save_doubles = kDontSaveFPRegs); + SaveFPRegsMode save_doubles = SaveFPRegsMode::kIgnore); // Convenience function: Same as above, but takes the fid instead. void CallRuntime(Runtime::FunctionId fid, - SaveFPRegsMode save_doubles = kDontSaveFPRegs) { + SaveFPRegsMode save_doubles = SaveFPRegsMode::kIgnore) { const Runtime::Function* function = Runtime::FunctionForId(fid); CallRuntime(function, function->nargs, save_doubles); } // Convenience function: Same as above, but takes the fid instead. void CallRuntime(Runtime::FunctionId fid, int num_arguments, - SaveFPRegsMode save_doubles = kDontSaveFPRegs) { + SaveFPRegsMode save_doubles = SaveFPRegsMode::kIgnore) { CallRuntime(Runtime::FunctionForId(fid), num_arguments, save_doubles); } @@ -921,7 +729,7 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { // Helper functions for generating invokes. void InvokePrologue(Register expected_parameter_count, Register actual_parameter_count, Label* done, - InvokeFlag flag); + InvokeType type); void EnterExitFramePrologue(StackFrame::Type frame_type, Register scratch); void EnterExitFrameEpilogue(int argc, bool save_doubles); diff --git a/deps/v8/src/codegen/interface-descriptors-inl.h b/deps/v8/src/codegen/interface-descriptors-inl.h new file mode 100644 index 0000000000..273e9d3e8e --- /dev/null +++ b/deps/v8/src/codegen/interface-descriptors-inl.h @@ -0,0 +1,484 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef V8_CODEGEN_INTERFACE_DESCRIPTORS_INL_H_ +#define V8_CODEGEN_INTERFACE_DESCRIPTORS_INL_H_ + +#include <utility> + +#include "src/base/logging.h" +#include "src/codegen/interface-descriptors.h" +#include "src/codegen/register-arch.h" + +#if V8_TARGET_ARCH_X64 +#include "src/codegen/x64/interface-descriptors-x64-inl.h" +#elif V8_TARGET_ARCH_ARM64 +#include "src/codegen/arm64/interface-descriptors-arm64-inl.h" +#elif V8_TARGET_ARCH_IA32 +#include "src/codegen/ia32/interface-descriptors-ia32-inl.h" +#elif V8_TARGET_ARCH_ARM +#include "src/codegen/arm/interface-descriptors-arm-inl.h" +#elif V8_TARGET_ARCH_PPC || V8_TARGET_ARCH_PPC64 +#include "src/codegen/ppc/interface-descriptors-ppc-inl.h" +#elif V8_TARGET_ARCH_S390 +#include "src/codegen/s390/interface-descriptors-s390-inl.h" +#elif V8_TARGET_ARCH_MIPS64 +#include "src/codegen/mips64/interface-descriptors-mips64-inl.h" +#elif V8_TARGET_ARCH_MIPS +#include "src/codegen/mips/interface-descriptors-mips-inl.h" +#elif V8_TARGET_ARCH_RISCV64 +#include "src/codegen/riscv64/interface-descriptors-riscv64-inl.h" +#else +#error Unsupported target architecture. +#endif + +namespace v8 { +namespace internal { + +// static +constexpr std::array<Register, kJSBuiltinRegisterParams> +CallInterfaceDescriptor::DefaultJSRegisterArray() { + return RegisterArray( + kJavaScriptCallTargetRegister, kJavaScriptCallNewTargetRegister, + kJavaScriptCallArgCountRegister, kJavaScriptCallExtraArg1Register); +} + +// static +template <typename DerivedDescriptor> +constexpr auto StaticCallInterfaceDescriptor<DerivedDescriptor>::registers() { + return CallInterfaceDescriptor::DefaultRegisterArray(); +} + +// static +template <typename DerivedDescriptor> +constexpr auto StaticJSCallInterfaceDescriptor<DerivedDescriptor>::registers() { + return CallInterfaceDescriptor::DefaultJSRegisterArray(); +} + +template <typename DerivedDescriptor> +void StaticCallInterfaceDescriptor<DerivedDescriptor>::Initialize( + CallInterfaceDescriptorData* data) { + // Static local copy of the Registers array, for platform-specific + // initialization + static auto registers = DerivedDescriptor::registers(); + + // The passed pointer should be a modifiable pointer to our own data. + DCHECK_EQ(data, this->data()); + DCHECK(!data->IsInitialized()); + + if (DerivedDescriptor::kRestrictAllocatableRegisters) { + data->RestrictAllocatableRegisters(registers.data(), registers.size()); + } + + data->InitializeRegisters( + DerivedDescriptor::flags(), DerivedDescriptor::kReturnCount, + DerivedDescriptor::GetParameterCount(), + DerivedDescriptor::kStackArgumentOrder, + DerivedDescriptor::GetRegisterParameterCount(), registers.data()); + + // InitializeTypes is customizable by the DerivedDescriptor subclass. + DerivedDescriptor::InitializeTypes(data); + + DCHECK(data->IsInitialized()); + DCHECK(this->CheckFloatingPointParameters(data)); +} + +// static +template <typename DerivedDescriptor> +constexpr int +StaticCallInterfaceDescriptor<DerivedDescriptor>::GetReturnCount() { + static_assert( + DerivedDescriptor::kReturnCount >= 0, + "DerivedDescriptor subclass should override return count with a value " + "that is greater than 0"); + + return DerivedDescriptor::kReturnCount; +} + +// static +template <typename DerivedDescriptor> +constexpr int +StaticCallInterfaceDescriptor<DerivedDescriptor>::GetParameterCount() { + static_assert( + DerivedDescriptor::kParameterCount >= 0, + "DerivedDescriptor subclass should override parameter count with a " + "value that is greater than 0"); + + return DerivedDescriptor::kParameterCount; +} + +namespace detail { + +// Helper trait for statically checking if a type is a std::array<Register,N>. +template <typename T> +struct IsRegisterArray : public std::false_type {}; +template <size_t N> +struct IsRegisterArray<std::array<Register, N>> : public std::true_type {}; +template <> +struct IsRegisterArray<EmptyRegisterArray> : public std::true_type {}; + +// Helper for finding the index of the first invalid register in a register +// array. +template <size_t N, size_t Index> +struct FirstInvalidRegisterHelper { + static constexpr int Call(std::array<Register, N> regs) { + if (!std::get<Index>(regs).is_valid()) { + // All registers after the first invalid one have to also be invalid (this + // DCHECK will be checked recursively). + DCHECK_EQ((FirstInvalidRegisterHelper<N, Index + 1>::Call(regs)), + Index + 1); + return Index; + } + return FirstInvalidRegisterHelper<N, Index + 1>::Call(regs); + } +}; +template <size_t N> +struct FirstInvalidRegisterHelper<N, N> { + static constexpr int Call(std::array<Register, N> regs) { return N; } +}; +template <size_t N, size_t Index = 0> +constexpr size_t FirstInvalidRegister(std::array<Register, N> regs) { + return FirstInvalidRegisterHelper<N, 0>::Call(regs); +} +constexpr size_t FirstInvalidRegister(EmptyRegisterArray regs) { return 0; } + +} // namespace detail + +// static +template <typename DerivedDescriptor> +constexpr int +StaticCallInterfaceDescriptor<DerivedDescriptor>::GetRegisterParameterCount() { + static_assert( + detail::IsRegisterArray<decltype(DerivedDescriptor::registers())>::value, + "DerivedDescriptor subclass should define a registers() function " + "returning a std::array<Register>"); + + // The register parameter count is the minimum of: + // 1. The number of named parameters in the descriptor, and + // 2. The number of valid registers the descriptor provides with its + // registers() function, e.g. for {rax, rbx, no_reg} this number is 2. + // 3. The maximum number of register parameters allowed ( + // kMaxBuiltinRegisterParams for most builtins, + // kMaxTFSBuiltinRegisterParams for TFS builtins, customizable by the + // subclass otherwise). + return std::min<int>({DerivedDescriptor::GetParameterCount(), + static_cast<int>(detail::FirstInvalidRegister( + DerivedDescriptor::registers())), + DerivedDescriptor::kMaxRegisterParams}); +} + +// static +template <typename DerivedDescriptor> +constexpr int +StaticCallInterfaceDescriptor<DerivedDescriptor>::GetStackParameterCount() { + return DerivedDescriptor::GetParameterCount() - + DerivedDescriptor::GetRegisterParameterCount(); +} + +// static +constexpr Register FastNewObjectDescriptor::TargetRegister() { + return kJSFunctionRegister; +} + +// static +constexpr Register FastNewObjectDescriptor::NewTargetRegister() { + return kJavaScriptCallNewTargetRegister; +} + +// static +constexpr Register ApiGetterDescriptor::ReceiverRegister() { + return LoadDescriptor::ReceiverRegister(); +} + +// static +constexpr Register LoadGlobalNoFeedbackDescriptor::ICKindRegister() { + return LoadDescriptor::SlotRegister(); +} + +// static +constexpr Register LoadNoFeedbackDescriptor::ICKindRegister() { + return LoadGlobalNoFeedbackDescriptor::ICKindRegister(); +} + +#if V8_TARGET_ARCH_IA32 +// On ia32, LoadWithVectorDescriptor passes vector on the stack and thus we +// need to choose a new register here. +// static +constexpr Register LoadGlobalWithVectorDescriptor::VectorRegister() { + STATIC_ASSERT(!LoadWithVectorDescriptor::VectorRegister().is_valid()); + return LoadDescriptor::ReceiverRegister(); +} +#else +// static +constexpr Register LoadGlobalWithVectorDescriptor::VectorRegister() { + return LoadWithVectorDescriptor::VectorRegister(); +} +#endif + +// static +constexpr auto LoadDescriptor::registers() { + return RegisterArray(ReceiverRegister(), NameRegister(), SlotRegister()); +} + +// static +constexpr auto LoadBaselineDescriptor::registers() { + return LoadDescriptor::registers(); +} + +// static +constexpr auto LoadGlobalDescriptor::registers() { + return RegisterArray(LoadDescriptor::NameRegister(), + LoadDescriptor::SlotRegister()); +} + +// static +constexpr auto LoadGlobalBaselineDescriptor::registers() { + return LoadGlobalDescriptor::registers(); +} + +// static +constexpr auto StoreDescriptor::registers() { + return RegisterArray(ReceiverRegister(), NameRegister(), ValueRegister(), + SlotRegister()); +} + +// static +constexpr auto StoreBaselineDescriptor::registers() { + return StoreDescriptor::registers(); +} + +// static +constexpr auto StoreGlobalDescriptor::registers() { + return RegisterArray(StoreDescriptor::NameRegister(), + StoreDescriptor::ValueRegister(), + StoreDescriptor::SlotRegister()); +} + +// static +constexpr auto StoreGlobalBaselineDescriptor::registers() { + return StoreGlobalDescriptor::registers(); +} + +// static +constexpr auto LoadWithReceiverBaselineDescriptor::registers() { + return RegisterArray( + LoadDescriptor::ReceiverRegister(), + LoadWithReceiverAndVectorDescriptor::LookupStartObjectRegister(), + LoadDescriptor::NameRegister(), LoadDescriptor::SlotRegister()); +} + +// static +constexpr auto BaselineOutOfLinePrologueDescriptor::registers() { + // TODO(v8:11421): Implement on other platforms. +#if V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_IA32 || \ + V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_PPC || V8_TARGET_ARCH_PPC64 || \ + V8_TARGET_ARCH_S390 || V8_TARGET_ARCH_RISCV64 + return RegisterArray( + kContextRegister, kJSFunctionRegister, kJavaScriptCallArgCountRegister, + kJavaScriptCallExtraArg1Register, kJavaScriptCallNewTargetRegister, + kInterpreterBytecodeArrayRegister); +#else + return DefaultRegisterArray(); +#endif +} + +// static +constexpr auto BaselineLeaveFrameDescriptor::registers() { + // TODO(v8:11421): Implement on other platforms. +#if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_ARM64 || \ + V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_PPC || V8_TARGET_ARCH_PPC64 || \ + V8_TARGET_ARCH_S390 || V8_TARGET_ARCH_RISCV64 + return RegisterArray(ParamsSizeRegister(), WeightRegister()); +#else + return DefaultRegisterArray(); +#endif +} + +// static +constexpr auto VoidDescriptor::registers() { return RegisterArray(); } + +// static +constexpr auto AllocateDescriptor::registers() { + return RegisterArray(kAllocateSizeRegister); +} + +// static +constexpr auto CEntry1ArgvOnStackDescriptor::registers() { + return RegisterArray(kRuntimeCallArgCountRegister, + kRuntimeCallFunctionRegister); +} + +// static +constexpr auto InterpreterCEntry1Descriptor::registers() { + return RegisterArray(kRuntimeCallArgCountRegister, kRuntimeCallArgvRegister, + kRuntimeCallFunctionRegister); +} + +// static +constexpr auto InterpreterCEntry2Descriptor::registers() { + return RegisterArray(kRuntimeCallArgCountRegister, kRuntimeCallArgvRegister, + kRuntimeCallFunctionRegister); +} + +// static +constexpr auto FastNewObjectDescriptor::registers() { + return RegisterArray(TargetRegister(), NewTargetRegister()); +} + +// static +constexpr auto TailCallOptimizedCodeSlotDescriptor::registers() { + return RegisterArray(kJavaScriptCallCodeStartRegister); +} + +// static +constexpr auto LoadNoFeedbackDescriptor::registers() { + return RegisterArray(LoadDescriptor::ReceiverRegister(), + LoadDescriptor::NameRegister(), ICKindRegister()); +} + +// static +constexpr auto LoadGlobalNoFeedbackDescriptor::registers() { + return RegisterArray(LoadDescriptor::NameRegister(), ICKindRegister()); +} + +// static +constexpr auto LoadGlobalWithVectorDescriptor::registers() { + return RegisterArray(LoadDescriptor::NameRegister(), + LoadDescriptor::SlotRegister(), VectorRegister()); +} + +// static +constexpr auto LoadWithReceiverAndVectorDescriptor::registers() { + return RegisterArray( + LoadDescriptor::ReceiverRegister(), LookupStartObjectRegister(), + LoadDescriptor::NameRegister(), LoadDescriptor::SlotRegister(), + LoadWithVectorDescriptor::VectorRegister()); +} + +// static +constexpr auto StoreGlobalWithVectorDescriptor::registers() { + return RegisterArray(StoreDescriptor::NameRegister(), + StoreDescriptor::ValueRegister(), + StoreDescriptor::SlotRegister(), + StoreWithVectorDescriptor::VectorRegister()); +} + +// static +constexpr auto StoreTransitionDescriptor::registers() { + return RegisterArray(StoreDescriptor::ReceiverRegister(), + StoreDescriptor::NameRegister(), MapRegister(), + StoreDescriptor::ValueRegister(), + StoreDescriptor::SlotRegister(), + StoreWithVectorDescriptor::VectorRegister()); +} + +// static +constexpr auto TypeConversionDescriptor::registers() { + return RegisterArray(ArgumentRegister()); +} + +// static +constexpr auto TypeConversionNoContextDescriptor::registers() { + return RegisterArray(TypeConversionDescriptor::ArgumentRegister()); +} + +// static +constexpr auto SingleParameterOnStackDescriptor::registers() { + return RegisterArray(); +} + +// static +constexpr auto AsyncFunctionStackParameterDescriptor::registers() { + return RegisterArray(); +} + +// static +constexpr auto GetIteratorStackParameterDescriptor::registers() { + return RegisterArray(); +} + +// static +constexpr auto LoadWithVectorDescriptor::registers() { + return RegisterArray(LoadDescriptor::ReceiverRegister(), + LoadDescriptor::NameRegister(), + LoadDescriptor::SlotRegister(), VectorRegister()); +} + +// static +constexpr auto StoreWithVectorDescriptor::registers() { + return RegisterArray(StoreDescriptor::ReceiverRegister(), + StoreDescriptor::NameRegister(), + StoreDescriptor::ValueRegister(), + StoreDescriptor::SlotRegister(), VectorRegister()); +} + +// static +constexpr auto ApiGetterDescriptor::registers() { + return RegisterArray(ReceiverRegister(), HolderRegister(), + CallbackRegister()); +} + +// static +constexpr auto ContextOnlyDescriptor::registers() { return RegisterArray(); } + +// static +constexpr auto NoContextDescriptor::registers() { return RegisterArray(); } + +// static +constexpr auto GrowArrayElementsDescriptor::registers() { + return RegisterArray(ObjectRegister(), KeyRegister()); +} + +// static +constexpr auto ArrayNArgumentsConstructorDescriptor::registers() { + // Keep the arguments on the same registers as they were in + // ArrayConstructorDescriptor to avoid unnecessary register moves. + // kFunction, kAllocationSite, kActualArgumentsCount + return RegisterArray(kJavaScriptCallTargetRegister, + kJavaScriptCallExtraArg1Register, + kJavaScriptCallArgCountRegister); +} + +// static +constexpr auto ArrayNoArgumentConstructorDescriptor::registers() { + // This descriptor must use the same set of registers as the + // ArrayNArgumentsConstructorDescriptor. + return ArrayNArgumentsConstructorDescriptor::registers(); +} + +// static +constexpr auto ArraySingleArgumentConstructorDescriptor::registers() { + // This descriptor must use the same set of registers as the + // ArrayNArgumentsConstructorDescriptor. + return ArrayNArgumentsConstructorDescriptor::registers(); +} + +// static +// static +constexpr Register RunMicrotasksDescriptor::MicrotaskQueueRegister() { + return GetRegisterParameter(0); +} + +#define DEFINE_STATIC_BUILTIN_DESCRIPTOR_GETTER(Name, DescriptorName) \ + template <> \ + struct CallInterfaceDescriptorFor<Builtins::k##Name> { \ + using type = DescriptorName##Descriptor; \ + }; +BUILTIN_LIST(IGNORE_BUILTIN, IGNORE_BUILTIN, + /*TFC*/ DEFINE_STATIC_BUILTIN_DESCRIPTOR_GETTER, IGNORE_BUILTIN, + /*TFH*/ DEFINE_STATIC_BUILTIN_DESCRIPTOR_GETTER, IGNORE_BUILTIN, + /*ASM*/ DEFINE_STATIC_BUILTIN_DESCRIPTOR_GETTER) +#undef DEFINE_STATIC_BUILTIN_DESCRIPTOR_GETTER +#define DEFINE_STATIC_BUILTIN_DESCRIPTOR_GETTER(Name, ...) \ + template <> \ + struct CallInterfaceDescriptorFor<Builtins::k##Name> { \ + using type = Name##Descriptor; \ + }; +BUILTIN_LIST_TFS(DEFINE_STATIC_BUILTIN_DESCRIPTOR_GETTER) +#undef DEFINE_STATIC_BUILTIN_DESCRIPTOR_GETTER + +} // namespace internal +} // namespace v8 + +#endif // V8_CODEGEN_INTERFACE_DESCRIPTORS_INL_H_ diff --git a/deps/v8/src/codegen/interface-descriptors.cc b/deps/v8/src/codegen/interface-descriptors.cc index 53b678580e..2cafcae344 100644 --- a/deps/v8/src/codegen/interface-descriptors.cc +++ b/deps/v8/src/codegen/interface-descriptors.cc @@ -4,49 +4,48 @@ #include "src/codegen/interface-descriptors.h" +#include "src/codegen/interface-descriptors-inl.h" #include "src/codegen/macro-assembler.h" namespace v8 { namespace internal { -void CallInterfaceDescriptorData::InitializePlatformSpecific( - int register_parameter_count, const Register* registers) { - DCHECK(!IsInitializedPlatformIndependent()); - - register_param_count_ = register_parameter_count; - - // UBSan doesn't like creating zero-length arrays. - if (register_parameter_count == 0) return; +void CallInterfaceDescriptorData::InitializeRegisters( + Flags flags, int return_count, int parameter_count, + StackArgumentOrder stack_order, int register_parameter_count, + const Register* registers) { + DCHECK(!IsInitializedTypes()); - // InterfaceDescriptor owns a copy of the registers array. - register_params_ = NewArray<Register>(register_parameter_count, no_reg); - for (int i = 0; i < register_parameter_count; i++) { - // The value of the root register must be reserved, thus any uses - // within the calling convention are disallowed. #ifdef DEBUG - CHECK_NE(registers[i], kRootRegister); + { + // Make sure that the registers are all valid, and don't alias each other. + RegList reglist = 0; + for (int i = 0; i < register_parameter_count; ++i) { + Register reg = registers[i]; + DCHECK(reg.is_valid()); + DCHECK_EQ(reglist & reg.bit(), 0); + DCHECK_NE(reg, kRootRegister); #ifdef V8_COMPRESS_POINTERS_IN_SHARED_CAGE - CHECK_NE(registers[i], kPointerCageBaseRegister); + DCHECK_NE(reg, kPtrComprCageBaseRegister); #endif - // Check for duplicated registers. - for (int j = i + 1; j < register_parameter_count; j++) { - CHECK_NE(registers[i], registers[j]); + reglist = CombineRegLists(reglist, reg.bit()); } -#endif - register_params_[i] = registers[i]; } -} - -void CallInterfaceDescriptorData::InitializePlatformIndependent( - Flags flags, int return_count, int parameter_count, - const MachineType* machine_types, int machine_types_length, - StackArgumentOrder stack_order) { - DCHECK(IsInitializedPlatformSpecific()); +#endif flags_ = flags; stack_order_ = stack_order; return_count_ = return_count; param_count_ = parameter_count; + register_param_count_ = register_parameter_count; + + // The caller owns the the registers array, so we just set the pointer. + register_params_ = registers; +} + +void CallInterfaceDescriptorData::InitializeTypes( + const MachineType* machine_types, int machine_types_length) { + DCHECK(IsInitializedRegisters()); const int types_length = return_count_ + param_count_; // Machine types are either fully initialized or null. @@ -77,7 +76,6 @@ bool CallInterfaceDescriptorData::AllStackParametersAreTagged() const { void CallInterfaceDescriptorData::Reset() { delete[] machine_types_; machine_types_ = nullptr; - delete[] register_params_; register_params_ = nullptr; } @@ -105,27 +103,6 @@ void CallDescriptors::TearDown() { } } -void CallInterfaceDescriptor::JSDefaultInitializePlatformSpecific( - CallInterfaceDescriptorData* data, int non_js_register_parameter_count) { - DCHECK_LE(static_cast<unsigned>(non_js_register_parameter_count), 1); - - // 3 is for kTarget, kNewTarget and kActualArgumentsCount - int register_parameter_count = 3 + non_js_register_parameter_count; - - DCHECK(!AreAliased( - kJavaScriptCallTargetRegister, kJavaScriptCallNewTargetRegister, - kJavaScriptCallArgCountRegister, kJavaScriptCallExtraArg1Register)); - - const Register default_js_stub_registers[] = { - kJavaScriptCallTargetRegister, kJavaScriptCallNewTargetRegister, - kJavaScriptCallArgCountRegister, kJavaScriptCallExtraArg1Register}; - - CHECK_LE(static_cast<size_t>(register_parameter_count), - arraysize(default_js_stub_registers)); - data->InitializePlatformSpecific(register_parameter_count, - default_js_stub_registers); -} - const char* CallInterfaceDescriptor::DebugName() const { CallDescriptors::Key key = CallDescriptors::GetKey(data_); switch (key) { @@ -140,492 +117,12 @@ const char* CallInterfaceDescriptor::DebugName() const { return ""; } -#if !defined(V8_TARGET_ARCH_MIPS) && !defined(V8_TARGET_ARCH_MIPS64) bool CallInterfaceDescriptor::IsValidFloatParameterRegister(Register reg) { - return true; -} -#endif - -void VoidDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - data->InitializePlatformSpecific(0, nullptr); -} - -void AllocateDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {kAllocateSizeRegister}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CEntry1ArgvOnStackDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {kRuntimeCallArgCountRegister, - kRuntimeCallFunctionRegister}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -namespace { - -void InterpreterCEntryDescriptor_InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {kRuntimeCallArgCountRegister, - kRuntimeCallArgvRegister, - kRuntimeCallFunctionRegister}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -} // namespace - -void InterpreterCEntry1Descriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - InterpreterCEntryDescriptor_InitializePlatformSpecific(data); -} - -void InterpreterCEntry2Descriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - InterpreterCEntryDescriptor_InitializePlatformSpecific(data); -} - -void FastNewObjectDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {TargetRegister(), NewTargetRegister()}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -const Register FastNewObjectDescriptor::TargetRegister() { - return kJSFunctionRegister; -} - -const Register FastNewObjectDescriptor::NewTargetRegister() { - return kJavaScriptCallNewTargetRegister; -} - -void TailCallOptimizedCodeSlotDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {kJavaScriptCallCodeStartRegister}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void LoadDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {ReceiverRegister(), NameRegister(), SlotRegister()}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void LoadBaselineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {LoadDescriptor::ReceiverRegister(), - LoadDescriptor::NameRegister(), - LoadDescriptor::SlotRegister()}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void LoadNoFeedbackDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {ReceiverRegister(), NameRegister(), ICKindRegister()}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void LoadGlobalDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {NameRegister(), SlotRegister()}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void LoadGlobalBaselineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {LoadGlobalDescriptor::NameRegister(), - LoadGlobalDescriptor::SlotRegister()}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void LookupBaselineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - DefaultInitializePlatformSpecific(data, kParameterCount); -} - -void LoadGlobalNoFeedbackDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {NameRegister(), ICKindRegister()}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void LoadGlobalWithVectorDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {NameRegister(), SlotRegister(), VectorRegister()}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void LoadWithReceiverAndVectorDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - DCHECK(!AreAliased(ReceiverRegister(), LookupStartObjectRegister(), - NameRegister(), SlotRegister(), VectorRegister())); - Register registers[] = {ReceiverRegister(), LookupStartObjectRegister(), - NameRegister(), SlotRegister(), VectorRegister()}; - int len = arraysize(registers) - kStackArgumentsCount; - data->InitializePlatformSpecific(len, registers); -} - -void LoadWithReceiverBaselineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - LoadWithReceiverAndVectorDescriptor::ReceiverRegister(), - LoadWithReceiverAndVectorDescriptor::LookupStartObjectRegister(), - LoadWithReceiverAndVectorDescriptor::NameRegister(), - LoadWithReceiverAndVectorDescriptor::SlotRegister()}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void StoreGlobalDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {NameRegister(), ValueRegister(), SlotRegister()}; - - int len = arraysize(registers) - kStackArgumentsCount; - data->InitializePlatformSpecific(len, registers); -} - -void StoreGlobalBaselineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {StoreGlobalDescriptor::NameRegister(), - StoreGlobalDescriptor::ValueRegister(), - StoreGlobalDescriptor::SlotRegister()}; - - int len = arraysize(registers) - kStackArgumentsCount; - data->InitializePlatformSpecific(len, registers); -} - -void StoreGlobalWithVectorDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {NameRegister(), ValueRegister(), SlotRegister(), - VectorRegister()}; - int len = arraysize(registers) - kStackArgumentsCount; - data->InitializePlatformSpecific(len, registers); -} - -void StoreDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {ReceiverRegister(), NameRegister(), ValueRegister(), - SlotRegister()}; - - int len = arraysize(registers) - kStackArgumentsCount; - data->InitializePlatformSpecific(len, registers); -} - -void StoreBaselineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - StoreDescriptor::ReceiverRegister(), StoreDescriptor::NameRegister(), - StoreDescriptor::ValueRegister(), StoreDescriptor::SlotRegister()}; - - int len = arraysize(registers) - kStackArgumentsCount; - data->InitializePlatformSpecific(len, registers); -} - -void StoreTransitionDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - ReceiverRegister(), NameRegister(), MapRegister(), - ValueRegister(), SlotRegister(), VectorRegister(), - }; - int len = arraysize(registers) - kStackArgumentsCount; - data->InitializePlatformSpecific(len, registers); -} - -void BaselineOutOfLinePrologueDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // TODO(v8:11421): Implement on other platforms. -#if V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_IA32 || \ - V8_TARGET_ARCH_ARM - Register registers[] = {kContextRegister, - kJSFunctionRegister, - kJavaScriptCallArgCountRegister, - kJavaScriptCallExtraArg1Register, - kJavaScriptCallNewTargetRegister, - kInterpreterBytecodeArrayRegister}; - data->InitializePlatformSpecific(kParameterCount - kStackArgumentsCount, - registers); -#else - InitializePlatformUnimplemented(data, kParameterCount); -#endif -} - -void BaselineLeaveFrameDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // TODO(v8:11421): Implement on other platforms. -#if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_ARM64 || \ - V8_TARGET_ARCH_ARM - Register registers[] = {ParamsSizeRegister(), WeightRegister()}; - data->InitializePlatformSpecific(kParameterCount, registers); +#if defined(V8_TARGET_ARCH_MIPS) || defined(V8_TARGET_ARCH_MIPS64) + return reg.code() % 2 == 0; #else - InitializePlatformUnimplemented(data, kParameterCount); -#endif -} - -void StringAtDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - DefaultInitializePlatformSpecific(data, kParameterCount); -} - -void StringAtAsStringDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - DefaultInitializePlatformSpecific(data, kParameterCount); -} - -void StringSubstringDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - DefaultInitializePlatformSpecific(data, kParameterCount); -} - -void TypeConversionDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {ArgumentRegister()}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void TypeConversionNoContextDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {TypeConversionDescriptor::ArgumentRegister()}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void TypeConversion_BaselineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - DefaultInitializePlatformSpecific(data, kParameterCount); -} - -void SingleParameterOnStackDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - data->InitializePlatformSpecific(0, nullptr); -} - -void AsyncFunctionStackParameterDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - data->InitializePlatformSpecific(0, nullptr); -} - -void GetIteratorStackParameterDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - data->InitializePlatformSpecific(0, nullptr); -} - -void LoadWithVectorDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {ReceiverRegister(), NameRegister(), SlotRegister(), - VectorRegister()}; - // TODO(jgruber): This DCHECK could be enabled if RegisterBase::ListOf were - // to allow no_reg entries. - // DCHECK(!AreAliased(ReceiverRegister(), NameRegister(), SlotRegister(), - // VectorRegister(), kRootRegister)); - int len = arraysize(registers) - kStackArgumentsCount; - data->InitializePlatformSpecific(len, registers); -} - -void StoreWithVectorDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {ReceiverRegister(), NameRegister(), ValueRegister(), - SlotRegister(), VectorRegister()}; - // TODO(jgruber): This DCHECK could be enabled if RegisterBase::ListOf were - // to allow no_reg entries. - // DCHECK(!AreAliased(ReceiverRegister(), NameRegister(), kRootRegister)); - int len = arraysize(registers) - kStackArgumentsCount; - data->InitializePlatformSpecific(len, registers); -} - -const Register ApiGetterDescriptor::ReceiverRegister() { - return LoadDescriptor::ReceiverRegister(); -} - -void ApiGetterDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {ReceiverRegister(), HolderRegister(), - CallbackRegister()}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ContextOnlyDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - data->InitializePlatformSpecific(0, nullptr); -} - -void NoContextDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - data->InitializePlatformSpecific(0, nullptr); -} - -void GrowArrayElementsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {ObjectRegister(), KeyRegister()}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ArrayNoArgumentConstructorDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // This descriptor must use the same set of registers as the - // ArrayNArgumentsConstructorDescriptor. - ArrayNArgumentsConstructorDescriptor::InitializePlatformSpecific(data); -} - -void ArraySingleArgumentConstructorDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // This descriptor must use the same set of registers as the - // ArrayNArgumentsConstructorDescriptor. - ArrayNArgumentsConstructorDescriptor::InitializePlatformSpecific(data); -} - -void ArrayNArgumentsConstructorDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // Keep the arguments on the same registers as they were in - // ArrayConstructorDescriptor to avoid unnecessary register moves. - // kFunction, kAllocationSite, kActualArgumentsCount - Register registers[] = {kJavaScriptCallTargetRegister, - kJavaScriptCallExtraArg1Register, - kJavaScriptCallArgCountRegister}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -#if !V8_TARGET_ARCH_IA32 -// We need a custom descriptor on ia32 to avoid using xmm0. -void WasmFloat32ToNumberDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - DefaultInitializePlatformSpecific(data, kParameterCount); -} - -// We need a custom descriptor on ia32 to avoid using xmm0. -void WasmFloat64ToNumberDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - DefaultInitializePlatformSpecific(data, kParameterCount); -} -#endif // !V8_TARGET_ARCH_IA32 - -#if !defined(V8_TARGET_ARCH_MIPS) && !defined(V8_TARGET_ARCH_MIPS64) && \ - !defined(V8_TARGET_ARCH_RISCV64) -void WasmI32AtomicWait32Descriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - DefaultInitializePlatformSpecific(data, kParameterCount); -} - -void WasmI64AtomicWait32Descriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - DefaultInitializePlatformSpecific(data, - kParameterCount - kStackArgumentsCount); -} + return true; #endif - -void CloneObjectWithVectorDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - DefaultInitializePlatformSpecific(data, kParameterCount); -} - -void CloneObjectBaselineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - DefaultInitializePlatformSpecific(data, kParameterCount); -} - -// static -Register RunMicrotasksDescriptor::MicrotaskQueueRegister() { - return CallDescriptors::call_descriptor_data(CallDescriptors::RunMicrotasks) - ->register_param(0); -} - -void RunMicrotasksDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - DefaultInitializePlatformSpecific(data, kParameterCount); -} - -void I64ToBigIntDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - DefaultInitializePlatformSpecific(data, kParameterCount); -} - -void I32PairToBigIntDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - DefaultInitializePlatformSpecific(data, kParameterCount); -} - -void BigIntToI64Descriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - DefaultInitializePlatformSpecific(data, kParameterCount); -} - -void BigIntToI32PairDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - DefaultInitializePlatformSpecific(data, kParameterCount); -} - -void BinaryOp_WithFeedbackDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - DefaultInitializePlatformSpecific(data, 4); -} - -void CallTrampoline_BaselineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - DefaultInitializePlatformSpecific(data, kParameterCount); -} - -void CallTrampoline_WithFeedbackDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - DefaultInitializePlatformSpecific(data, 4); -} - -void CallWithArrayLike_WithFeedbackDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - DefaultInitializePlatformSpecific(data, 4); -} - -void CallWithSpread_BaselineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - DefaultInitializePlatformSpecific(data, kParameterCount); -} - -void CallWithSpread_WithFeedbackDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - DefaultInitializePlatformSpecific(data, 4); -} - -void ConstructWithArrayLike_WithFeedbackDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - DefaultInitializePlatformSpecific(data, 4); -} - -void ConstructWithSpread_BaselineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - DefaultInitializePlatformSpecific(data, - kParameterCount - kStackArgumentsCount); -} - -void ConstructWithSpread_WithFeedbackDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - DefaultInitializePlatformSpecific(data, 4); -} - -void Compare_WithFeedbackDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - DefaultInitializePlatformSpecific(data, 4); -} - -void UnaryOp_WithFeedbackDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - DefaultInitializePlatformSpecific(data, 3); -} - -void UnaryOp_BaselineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - DefaultInitializePlatformSpecific(data, 2); -} - -void ForInPrepareDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - DefaultInitializePlatformSpecific(data, kParameterCount); -} - -void SuspendGeneratorBaselineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - DefaultInitializePlatformSpecific(data, kParameterCount); -} - -void ResumeGeneratorBaselineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - DefaultInitializePlatformSpecific(data, kParameterCount); } } // namespace internal diff --git a/deps/v8/src/codegen/interface-descriptors.h b/deps/v8/src/codegen/interface-descriptors.h index 8d03907efc..e64826e6fc 100644 --- a/deps/v8/src/codegen/interface-descriptors.h +++ b/deps/v8/src/codegen/interface-descriptors.h @@ -7,6 +7,7 @@ #include <memory> +#include "src/base/logging.h" #include "src/codegen/machine-type.h" #include "src/codegen/register-arch.h" #include "src/codegen/tnode.h" @@ -39,6 +40,7 @@ namespace internal { V(CallFunctionTemplate) \ V(CallTrampoline) \ V(CallTrampoline_Baseline) \ + V(CallTrampoline_Baseline_Compact) \ V(CallTrampoline_WithFeedback) \ V(CallVarargs) \ V(CallWithArrayLike) \ @@ -68,7 +70,6 @@ namespace internal { V(EphemeronKeyBarrier) \ V(FastNewObject) \ V(ForInPrepare) \ - V(FrameDropperTrampoline) \ V(GetIteratorStackParameter) \ V(GetProperty) \ V(GrowArrayElements) \ @@ -151,17 +152,21 @@ class V8_EXPORT_PRIVATE CallInterfaceDescriptorData { }; using Flags = base::Flags<Flag>; + static constexpr int kUninitializedCount = -1; + CallInterfaceDescriptorData() = default; CallInterfaceDescriptorData(const CallInterfaceDescriptorData&) = delete; CallInterfaceDescriptorData& operator=(const CallInterfaceDescriptorData&) = delete; - // A copy of the passed in registers and param_representations is made - // and owned by the CallInterfaceDescriptorData. - - void InitializePlatformSpecific(int register_parameter_count, - const Register* registers); + // The passed registers are owned by the caller, and their lifetime is + // expected to exceed that of this data. In practice, they are expected to + // be in a static local. + void InitializeRegisters(Flags flags, int return_count, int parameter_count, + StackArgumentOrder stack_order, + int register_parameter_count, + const Register* registers); // if machine_types is null, then an array of size // (return_count + parameter_count) will be created with @@ -171,17 +176,13 @@ class V8_EXPORT_PRIVATE CallInterfaceDescriptorData { // (return_count + parameter_count). Those members of the parameter array will // be initialized from {machine_types}, and the rest initialized to // MachineType::AnyTagged(). - void InitializePlatformIndependent(Flags flags, int return_count, - int parameter_count, - const MachineType* machine_types, - int machine_types_length, - StackArgumentOrder stack_order); + void InitializeTypes(const MachineType* machine_types, + int machine_types_length); void Reset(); bool IsInitialized() const { - return IsInitializedPlatformSpecific() && - IsInitializedPlatformIndependent(); + return IsInitializedRegisters() && IsInitializedTypes(); } Flags flags() const { return flags_; } @@ -189,7 +190,6 @@ class V8_EXPORT_PRIVATE CallInterfaceDescriptorData { int param_count() const { return param_count_; } int register_param_count() const { return register_param_count_; } Register register_param(int index) const { return register_params_[index]; } - Register* register_params() const { return register_params_; } MachineType return_type(int index) const { DCHECK_LT(index, return_count_); return machine_types_[index]; @@ -200,9 +200,9 @@ class V8_EXPORT_PRIVATE CallInterfaceDescriptorData { } StackArgumentOrder stack_order() const { return stack_order_; } - void RestrictAllocatableRegisters(const Register* registers, int num) { + void RestrictAllocatableRegisters(const Register* registers, size_t num) { DCHECK_EQ(allocatable_registers_, 0); - for (int i = 0; i < num; ++i) { + for (size_t i = 0; i < num; ++i) { allocatable_registers_ |= registers[i].bit(); } DCHECK_GT(NumRegs(allocatable_registers_), 0); @@ -211,17 +211,17 @@ class V8_EXPORT_PRIVATE CallInterfaceDescriptorData { RegList allocatable_registers() const { return allocatable_registers_; } private: - bool IsInitializedPlatformSpecific() const { + bool IsInitializedRegisters() const { const bool initialized = - (register_param_count_ == 0 && register_params_ == nullptr) || - (register_param_count_ > 0 && register_params_ != nullptr); - // Platform-specific initialization happens before platform-independent. + return_count_ != kUninitializedCount && + param_count_ != kUninitializedCount && + (register_param_count_ == 0 || register_params_ != nullptr); + // Register initialization happens before type initialization. return initialized; } - bool IsInitializedPlatformIndependent() const { - const bool initialized = - return_count_ >= 0 && param_count_ >= 0 && machine_types_ != nullptr; - // Platform-specific initialization happens before platform-independent. + bool IsInitializedTypes() const { + const bool initialized = machine_types_ != nullptr; + // Register initialization happens before type initialization. return initialized; } @@ -229,9 +229,9 @@ class V8_EXPORT_PRIVATE CallInterfaceDescriptorData { bool AllStackParametersAreTagged() const; #endif // DEBUG - int register_param_count_ = -1; - int return_count_ = -1; - int param_count_ = -1; + int register_param_count_ = kUninitializedCount; + int return_count_ = kUninitializedCount; + int param_count_ = kUninitializedCount; Flags flags_ = kNoFlags; StackArgumentOrder stack_order_ = StackArgumentOrder::kDefault; @@ -242,10 +242,10 @@ class V8_EXPORT_PRIVATE CallInterfaceDescriptorData { // |registers_params_| defines registers that are used for parameter passing. // |machine_types_| defines machine types for resulting values and incomping // parameters. - // Both arrays are allocated dynamically by the InterfaceDescriptor and - // freed on destruction. This is because static arrays cause creation of - // runtime static initializers which we don't want. - Register* register_params_ = nullptr; + // The register params array is owned by the caller, and it's expected that it + // is a static local stored in the caller function. The machine types are + // allocated dynamically by the InterfaceDescriptor and freed on destruction. + const Register* register_params_ = nullptr; MachineType* machine_types_ = nullptr; }; @@ -278,12 +278,35 @@ class V8_EXPORT_PRIVATE CallDescriptors : public AllStatic { call_descriptor_data_[NUMBER_OF_DESCRIPTORS]; }; +#if defined(V8_TARGET_ARCH_IA32) +// To support all possible cases, we must limit the number of register args for +// TFS builtins on ia32 to 3. Out of the 6 allocatable registers, esi is taken +// as the context register and ebx is the root register. One register must +// remain available to store the jump/call target. Thus 3 registers remain for +// arguments. The reason this applies to TFS builtins specifically is because +// this becomes relevant for builtins used as targets of Torque function +// pointers (which must have a register available to store the target). +// TODO(jgruber): Ideally we should just decrement kMaxBuiltinRegisterParams but +// that comes with its own set of complications. It's possible, but requires +// refactoring the calling convention of other existing stubs. +constexpr int kMaxBuiltinRegisterParams = 4; +constexpr int kMaxTFSBuiltinRegisterParams = 3; +#else +constexpr int kMaxBuiltinRegisterParams = 5; +constexpr int kMaxTFSBuiltinRegisterParams = kMaxBuiltinRegisterParams; +#endif +STATIC_ASSERT(kMaxTFSBuiltinRegisterParams <= kMaxBuiltinRegisterParams); +constexpr int kJSBuiltinRegisterParams = 4; + +// Polymorphic base class for call interface descriptors, which defines getters +// for the various descriptor properties via a runtime-loaded +// CallInterfaceDescriptorData field. class V8_EXPORT_PRIVATE CallInterfaceDescriptor { public: using Flags = CallInterfaceDescriptorData::Flags; CallInterfaceDescriptor() : data_(nullptr) {} - virtual ~CallInterfaceDescriptor() = default; + ~CallInterfaceDescriptor() = default; explicit CallInterfaceDescriptor(CallDescriptors::Key key) : data_(CallDescriptors::call_descriptor_data(key)) {} @@ -333,7 +356,9 @@ class V8_EXPORT_PRIVATE CallInterfaceDescriptor { return data()->stack_order(); } - static const Register ContextRegister(); + static constexpr inline Register ContextRegister() { + return kContextRegister; + } const char* DebugName() const; @@ -344,39 +369,13 @@ class V8_EXPORT_PRIVATE CallInterfaceDescriptor { protected: const CallInterfaceDescriptorData* data() const { return data_; } - virtual void InitializePlatformSpecific(CallInterfaceDescriptorData* data) { - UNREACHABLE(); - } - - // Initializes |data| to an unspecified state, for platforms that haven't - // implemented a given builtin. - static void InitializePlatformUnimplemented(CallInterfaceDescriptorData* data, - int register_parameter_count) { - DefaultInitializePlatformSpecific(data, - std::min(register_parameter_count, 4)); - } - - virtual void InitializePlatformIndependent( - CallInterfaceDescriptorData* data) { - // Default descriptor configuration: one result, all parameters are passed - // in registers and all parameters have MachineType::AnyTagged() type. - data->InitializePlatformIndependent( - CallInterfaceDescriptorData::kNoFlags, 1, data->register_param_count(), - nullptr, 0, StackArgumentOrder::kDefault); - } - - // Initializes |data| using the platform dependent default set of registers. - // It is intended to be used for TurboFan stubs when particular set of - // registers does not matter. - static void DefaultInitializePlatformSpecific( - CallInterfaceDescriptorData* data, int register_parameter_count); - - // Initializes |data| using the platform dependent default set of registers - // for JavaScript-compatible calling convention. - // It is intended to be used for TurboFan stubs being called with JavaScript - // linkage + additional parameters on registers and stack. - static void JSDefaultInitializePlatformSpecific( - CallInterfaceDescriptorData* data, int non_js_register_parameter_count); + // Helper for defining the default register set. + // + // Use auto for the return type to allow different architectures to have + // differently sized default register arrays. + static constexpr inline auto DefaultRegisterArray(); + static constexpr inline std::array<Register, kJSBuiltinRegisterParams> + DefaultJSRegisterArray(); // Checks if float parameters are not assigned invalid registers. bool CheckFloatingPointParameters(CallInterfaceDescriptorData* data) { @@ -393,104 +392,164 @@ class V8_EXPORT_PRIVATE CallInterfaceDescriptor { bool IsValidFloatParameterRegister(Register reg); private: + const CallInterfaceDescriptorData* data_; +}; + +// CRTP base class for call interface descriptors, which defines static getters +// for the various descriptor properties based on static values defined in the +// subclass. +template <typename DerivedDescriptor> +class StaticCallInterfaceDescriptor : public CallInterfaceDescriptor { + public: + // =========================================================================== + // The following are the descriptor's CRTP configuration points, overwritable + // by DerivedDescriptor. + static constexpr int kReturnCount = + CallInterfaceDescriptorData::kUninitializedCount; + static constexpr int kParameterCount = + CallInterfaceDescriptorData::kUninitializedCount; + static constexpr bool kNoContext = false; + static constexpr bool kAllowVarArgs = false; + static constexpr bool kNoStackScan = false; + static constexpr auto kStackArgumentOrder = StackArgumentOrder::kDefault; + + // The set of registers available to the parameters, as a + // std::array<Register,N>. Can be larger or smaller than kParameterCount; if + // larger then any remaining registers are ignored; if smaller, any parameters + // after registers().size() will be stack registers. + // + // Defaults to CallInterfaceDescriptor::DefaultRegisterArray(). + static constexpr inline auto registers(); + + // An additional limit on the number of register parameters allowed. This is + // here so that it can be overwritten to kMaxTFSBuiltinRegisterParams for TFS + // builtins, see comment on kMaxTFSBuiltinRegisterParams above. + static constexpr int kMaxRegisterParams = kMaxBuiltinRegisterParams; + + // If set to true, the descriptor will restrict the set of allocatable + // registers to the set returned by registers(). Then, it is expected that + // the first kParameterCount registers() are the parameters of the builtin. + static constexpr bool kRestrictAllocatableRegisters = false; + + // End of customization points. + // =========================================================================== + + static constexpr inline Flags flags() { + return Flags((DerivedDescriptor::kNoContext + ? CallInterfaceDescriptorData::kNoContext + : 0) | + (DerivedDescriptor::kAllowVarArgs + ? CallInterfaceDescriptorData::kAllowVarArgs + : 0) | + (DerivedDescriptor::kNoStackScan + ? CallInterfaceDescriptorData::kNoStackScan + : 0)); + } + static constexpr inline bool AllowVarArgs() { + return DerivedDescriptor::kAllowVarArgs; + } + static constexpr inline bool HasContextParameter() { + return !DerivedDescriptor::kNoContext; + } + + static constexpr inline int GetReturnCount(); + static constexpr inline int GetParameterCount(); + static constexpr inline int GetRegisterParameterCount(); + static constexpr inline int GetStackParameterCount(); + static constexpr inline Register* GetRegisterData(); + + static constexpr inline Register GetRegisterParameter(int i) { + return DerivedDescriptor::registers()[i]; + } + + explicit StaticCallInterfaceDescriptor(CallDescriptors::Key key) + : CallInterfaceDescriptor(key) {} + + private: // {CallDescriptors} is allowed to call the private {Initialize} method. friend class CallDescriptors; - const CallInterfaceDescriptorData* data_; + inline void Initialize(CallInterfaceDescriptorData* data); - void Initialize(CallInterfaceDescriptorData* data) { - // The passed pointer should be a modifiable pointer to our own data. - DCHECK_EQ(data, data_); - DCHECK(!data->IsInitialized()); - InitializePlatformSpecific(data); - InitializePlatformIndependent(data); - DCHECK(data->IsInitialized()); - DCHECK(CheckFloatingPointParameters(data)); + // Set up the types of the descriptor. This is a static function, so that it + // is overwritable by subclasses. By default, all parameters have + // MachineType::AnyTagged() type. + static void InitializeTypes(CallInterfaceDescriptorData* data) { + data->InitializeTypes(nullptr, 0); } }; -#define DECLARE_DESCRIPTOR_WITH_BASE(name, base) \ - public: \ - explicit name() : base(key()) {} \ - static inline CallDescriptors::Key key(); +template <typename Descriptor> +class StaticJSCallInterfaceDescriptor + : public StaticCallInterfaceDescriptor<Descriptor> { + public: + static constexpr auto kStackArgumentOrder = StackArgumentOrder::kJS; + static constexpr inline auto registers(); -#if defined(V8_TARGET_ARCH_IA32) -// To support all possible cases, we must limit the number of register args for -// TFS builtins on ia32 to 3. Out of the 6 allocatable registers, esi is taken -// as the context register and ebx is the root register. One register must -// remain available to store the jump/call target. Thus 3 registers remain for -// arguments. The reason this applies to TFS builtins specifically is because -// this becomes relevant for builtins used as targets of Torque function -// pointers (which must have a register available to store the target). -// TODO(jgruber): Ideally we should just decrement kMaxBuiltinRegisterParams but -// that comes with its own set of complications. It's possible, but requires -// refactoring the calling convention of other existing stubs. -constexpr int kMaxBuiltinRegisterParams = 4; -constexpr int kMaxTFSBuiltinRegisterParams = 3; -#else -constexpr int kMaxBuiltinRegisterParams = 5; -constexpr int kMaxTFSBuiltinRegisterParams = kMaxBuiltinRegisterParams; -#endif -STATIC_ASSERT(kMaxTFSBuiltinRegisterParams <= kMaxBuiltinRegisterParams); + using StaticCallInterfaceDescriptor< + Descriptor>::StaticCallInterfaceDescriptor; +}; -#define DECLARE_DEFAULT_DESCRIPTOR(name, base) \ - DECLARE_DESCRIPTOR_WITH_BASE(name, base) \ - protected: \ - static const int kRegisterParams = \ - kParameterCount > kMaxTFSBuiltinRegisterParams \ - ? kMaxTFSBuiltinRegisterParams \ - : kParameterCount; \ - static const int kStackParams = kParameterCount - kRegisterParams; \ - void InitializePlatformSpecific(CallInterfaceDescriptorData* data) \ - override { \ - DefaultInitializePlatformSpecific(data, kRegisterParams); \ - } \ - void InitializePlatformIndependent(CallInterfaceDescriptorData* data) \ - override { \ - data->InitializePlatformIndependent(Flags(kDescriptorFlags), kReturnCount, \ - kParameterCount, nullptr, 0, \ - kStackArgumentOrder); \ - } \ - name(CallDescriptors::Key key) : base(key) {} \ - \ - public: - -#define DECLARE_JS_COMPATIBLE_DESCRIPTOR(name, base, \ - non_js_reg_parameters_count) \ - DECLARE_DESCRIPTOR_WITH_BASE(name, base) \ - protected: \ - void InitializePlatformSpecific(CallInterfaceDescriptorData* data) \ - override { \ - JSDefaultInitializePlatformSpecific(data, non_js_reg_parameters_count); \ - } \ - name(CallDescriptors::Key key) : base(key) {} \ - \ - public: - -#define DEFINE_FLAGS_AND_RESULT_AND_PARAMETERS(flags, stack_order, \ - return_count, ...) \ - static constexpr int kDescriptorFlags = flags; \ - static constexpr int kReturnCount = return_count; \ - static constexpr StackArgumentOrder kStackArgumentOrder = stack_order; \ - enum ParameterIndices { \ - __dummy = -1, /* to be able to pass zero arguments */ \ - ##__VA_ARGS__, \ - \ - kParameterCount, \ - kContext = kParameterCount /* implicit parameter */ \ - }; +template <Builtins::Name kBuiltin> +struct CallInterfaceDescriptorFor; + +// Stub class replacing std::array<Register, 0>, as a workaround for MSVC's +// https://github.com/microsoft/STL/issues/942 +struct EmptyRegisterArray { + Register* data() { return nullptr; } + size_t size() const { return 0; } + Register operator[](size_t i) const { UNREACHABLE(); } +}; -#define DEFINE_RESULT_AND_PARAMETERS(return_count, ...) \ - DEFINE_FLAGS_AND_RESULT_AND_PARAMETERS( \ - CallInterfaceDescriptorData::kNoFlags, StackArgumentOrder::kDefault, \ - return_count, ##__VA_ARGS__) +// Helper method for defining an array of registers for the various +// Descriptor::registers() methods. +template <typename... Registers> +constexpr std::array<Register, 1 + sizeof...(Registers)> RegisterArray( + Register first_reg, Registers... regs) { + return {first_reg, regs...}; +} +constexpr EmptyRegisterArray RegisterArray() { return {}; } + +#define DECLARE_DESCRIPTOR_WITH_BASE(name, base) \ + public: \ + /* StaticCallInterfaceDescriptor can call Initialize methods */ \ + friend class StaticCallInterfaceDescriptor<name>; \ + explicit name() : base(key()) {} \ + static inline CallDescriptors::Key key(); + +#define DECLARE_DEFAULT_DESCRIPTOR(name) \ + DECLARE_DESCRIPTOR_WITH_BASE(name, StaticCallInterfaceDescriptor) \ + static constexpr int kMaxRegisterParams = kMaxTFSBuiltinRegisterParams; \ + \ + protected: \ + explicit name(CallDescriptors::Key key) \ + : StaticCallInterfaceDescriptor(key) {} \ + \ + public: + +#define DECLARE_JS_COMPATIBLE_DESCRIPTOR(name) \ + DECLARE_DESCRIPTOR_WITH_BASE(name, StaticJSCallInterfaceDescriptor) \ + protected: \ + explicit name(CallDescriptors::Key key) \ + : StaticJSCallInterfaceDescriptor(key) {} \ + \ + public: + +#define DEFINE_RESULT_AND_PARAMETERS(return_count, ...) \ + static constexpr int kReturnCount = return_count; \ + enum ParameterIndices { \ + __dummy = -1, /* to be able to pass zero arguments */ \ + ##__VA_ARGS__, \ + \ + kParameterCount, \ + kContext = kParameterCount /* implicit parameter */ \ + }; // This is valid only for builtins that use EntryFrame, which does not scan // stack arguments on GC. #define DEFINE_PARAMETERS_ENTRY(...) \ - static constexpr int kDescriptorFlags = \ - CallInterfaceDescriptorData::kNoContext | \ - CallInterfaceDescriptorData::kNoStackScan; \ + static constexpr bool kNoContext = true; \ + static constexpr bool kNoStackScan = true; \ static constexpr StackArgumentOrder kStackArgumentOrder = \ StackArgumentOrder::kDefault; \ static constexpr int kReturnCount = 1; \ @@ -501,37 +560,37 @@ STATIC_ASSERT(kMaxTFSBuiltinRegisterParams <= kMaxBuiltinRegisterParams); kParameterCount \ }; -#define DEFINE_PARAMETERS(...) \ - DEFINE_FLAGS_AND_RESULT_AND_PARAMETERS( \ - CallInterfaceDescriptorData::kNoFlags, StackArgumentOrder::kDefault, 1, \ - ##__VA_ARGS__) +#define DEFINE_PARAMETERS(...) DEFINE_RESULT_AND_PARAMETERS(1, ##__VA_ARGS__) + +#define DEFINE_PARAMETERS_NO_CONTEXT(...) \ + DEFINE_PARAMETERS(__VA_ARGS__) \ + static constexpr bool kNoContext = true; + +#define DEFINE_PARAMETERS_VARARGS(...) \ + DEFINE_PARAMETERS(__VA_ARGS__) \ + static constexpr bool kAllowVarArgs = true; \ + static constexpr StackArgumentOrder kStackArgumentOrder = \ + StackArgumentOrder::kJS; -#define DEFINE_PARAMETERS_NO_CONTEXT(...) \ - DEFINE_FLAGS_AND_RESULT_AND_PARAMETERS( \ - CallInterfaceDescriptorData::kNoContext, StackArgumentOrder::kDefault, \ - 1, ##__VA_ARGS__) +#define DEFINE_PARAMETERS_NO_CONTEXT_VARARGS(...) \ + DEFINE_PARAMETERS_NO_CONTEXT(__VA_ARGS__) \ + static constexpr bool kAllowVarArgs = true; \ + static constexpr StackArgumentOrder kStackArgumentOrder = \ + StackArgumentOrder::kJS; -#define DEFINE_PARAMETERS_VARARGS(...) \ - DEFINE_FLAGS_AND_RESULT_AND_PARAMETERS( \ - CallInterfaceDescriptorData::kAllowVarArgs, StackArgumentOrder::kJS, 1, \ - ##__VA_ARGS__) +#define DEFINE_RESULT_AND_PARAMETERS_NO_CONTEXT(return_count, ...) \ + DEFINE_RESULT_AND_PARAMETERS(return_count, ##__VA_ARGS__) \ + static constexpr bool kNoContext = true; -#define DEFINE_RESULT_AND_PARAMETER_TYPES_WITH_FLAG(flag, ...) \ - void InitializePlatformIndependent(CallInterfaceDescriptorData* data) \ - override { \ +#define DEFINE_RESULT_AND_PARAMETER_TYPES(...) \ + static void InitializeTypes(CallInterfaceDescriptorData* data) { \ MachineType machine_types[] = {__VA_ARGS__}; \ static_assert( \ kReturnCount + kParameterCount == arraysize(machine_types), \ "Parameter names definition is not consistent with parameter types"); \ - data->InitializePlatformIndependent( \ - Flags(flag | kDescriptorFlags), kReturnCount, kParameterCount, \ - machine_types, arraysize(machine_types), kStackArgumentOrder); \ + data->InitializeTypes(machine_types, arraysize(machine_types)); \ } -#define DEFINE_RESULT_AND_PARAMETER_TYPES(...) \ - DEFINE_RESULT_AND_PARAMETER_TYPES_WITH_FLAG( \ - CallInterfaceDescriptorData::kNoFlags, __VA_ARGS__) - #define DEFINE_PARAMETER_TYPES(...) \ DEFINE_RESULT_AND_PARAMETER_TYPES(MachineType::AnyTagged() /* result */, \ ##__VA_ARGS__) @@ -539,8 +598,7 @@ STATIC_ASSERT(kMaxTFSBuiltinRegisterParams <= kMaxBuiltinRegisterParams); // When the extra arguments described here are located in the stack, they are // just above the return address in the frame (first arguments). #define DEFINE_JS_PARAMETERS(...) \ - static constexpr int kDescriptorFlags = \ - CallInterfaceDescriptorData::kAllowVarArgs; \ + static constexpr bool kAllowVarArgs = true; \ static constexpr int kReturnCount = 1; \ static constexpr StackArgumentOrder kStackArgumentOrder = \ StackArgumentOrder::kJS; \ @@ -554,9 +612,8 @@ STATIC_ASSERT(kMaxTFSBuiltinRegisterParams <= kMaxBuiltinRegisterParams); }; #define DEFINE_JS_PARAMETERS_NO_CONTEXT(...) \ - static constexpr int kDescriptorFlags = \ - CallInterfaceDescriptorData::kAllowVarArgs | \ - CallInterfaceDescriptorData::kNoContext; \ + static constexpr bool kAllowVarArgs = true; \ + static constexpr bool kNoContext = true; \ static constexpr int kReturnCount = 1; \ static constexpr StackArgumentOrder kStackArgumentOrder = \ StackArgumentOrder::kJS; \ @@ -574,63 +631,22 @@ STATIC_ASSERT(kMaxTFSBuiltinRegisterParams <= kMaxBuiltinRegisterParams); MachineType::Int32(), /* kActualArgumentsCount */ \ ##__VA_ARGS__) -#define DECLARE_DESCRIPTOR(name, base) \ - DECLARE_DESCRIPTOR_WITH_BASE(name, base) \ - protected: \ - void InitializePlatformSpecific(CallInterfaceDescriptorData* data) override; \ - name(CallDescriptors::Key key) : base(key) {} \ - \ +#define DECLARE_DESCRIPTOR(name) \ + DECLARE_DESCRIPTOR_WITH_BASE(name, StaticCallInterfaceDescriptor) \ + protected: \ + explicit name(CallDescriptors::Key key) \ + : StaticCallInterfaceDescriptor(key) {} \ + \ public: -class V8_EXPORT_PRIVATE VoidDescriptor : public CallInterfaceDescriptor { +class V8_EXPORT_PRIVATE VoidDescriptor + : public StaticCallInterfaceDescriptor<VoidDescriptor> { public: DEFINE_PARAMETERS() DEFINE_PARAMETER_TYPES() - DECLARE_DESCRIPTOR(VoidDescriptor, CallInterfaceDescriptor) -}; - -// This class is subclassed by Torque-generated call interface descriptors. -template <int return_count, int parameter_count, bool has_context_parameter> -class TorqueInterfaceDescriptor : public CallInterfaceDescriptor { - public: - static constexpr int kDescriptorFlags = - has_context_parameter ? CallInterfaceDescriptorData::kNoFlags - : CallInterfaceDescriptorData::kNoContext; - static constexpr int kParameterCount = parameter_count; - enum ParameterIndices { kContext = kParameterCount }; - template <int i> - static ParameterIndices ParameterIndex() { - STATIC_ASSERT(0 <= i && i < kParameterCount); - return static_cast<ParameterIndices>(i); - } - static constexpr int kReturnCount = return_count; - - using CallInterfaceDescriptor::CallInterfaceDescriptor; + DECLARE_DESCRIPTOR(VoidDescriptor) - protected: - static const int kRegisterParams = - kParameterCount > kMaxTFSBuiltinRegisterParams - ? kMaxTFSBuiltinRegisterParams - : kParameterCount; - static const int kStackParams = kParameterCount - kRegisterParams; - virtual std::vector<MachineType> ReturnType() = 0; - virtual std::array<MachineType, kParameterCount> ParameterTypes() = 0; - void InitializePlatformSpecific(CallInterfaceDescriptorData* data) override { - DefaultInitializePlatformSpecific(data, kRegisterParams); - } - void InitializePlatformIndependent( - CallInterfaceDescriptorData* data) override { - std::vector<MachineType> machine_types = ReturnType(); - DCHECK_EQ(kReturnCount, machine_types.size()); - auto parameter_types = ParameterTypes(); - machine_types.insert(machine_types.end(), parameter_types.begin(), - parameter_types.end()); - DCHECK_EQ(kReturnCount + kParameterCount, machine_types.size()); - data->InitializePlatformIndependent(Flags(kDescriptorFlags), kReturnCount, - kParameterCount, machine_types.data(), - static_cast<int>(machine_types.size()), - StackArgumentOrder::kDefault); - } + static constexpr auto registers(); }; // Dummy descriptor used to mark builtins that don't yet have their proper @@ -646,180 +662,171 @@ using CCallDescriptor = VoidDescriptor; // here. using DeoptimizationEntryDescriptor = VoidDescriptor; -class AllocateDescriptor : public CallInterfaceDescriptor { +class AllocateDescriptor + : public StaticCallInterfaceDescriptor<AllocateDescriptor> { public: DEFINE_PARAMETERS_NO_CONTEXT(kRequestedSize) DEFINE_RESULT_AND_PARAMETER_TYPES(MachineType::TaggedPointer(), // result 1 MachineType::IntPtr()) // kRequestedSize - DECLARE_DESCRIPTOR(AllocateDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(AllocateDescriptor) + + static constexpr auto registers(); }; // This descriptor defines the JavaScript calling convention that can be used // by stubs: target, new.target, argc (not including the receiver) and context // are passed in registers while receiver and the rest of the JS arguments are // passed on the stack. -class JSTrampolineDescriptor : public CallInterfaceDescriptor { +class JSTrampolineDescriptor + : public StaticJSCallInterfaceDescriptor<JSTrampolineDescriptor> { public: DEFINE_JS_PARAMETERS() DEFINE_JS_PARAMETER_TYPES() - DECLARE_JS_COMPATIBLE_DESCRIPTOR(JSTrampolineDescriptor, - CallInterfaceDescriptor, 0) + DECLARE_JS_COMPATIBLE_DESCRIPTOR(JSTrampolineDescriptor) }; -class ContextOnlyDescriptor : public CallInterfaceDescriptor { +class ContextOnlyDescriptor + : public StaticCallInterfaceDescriptor<ContextOnlyDescriptor> { public: DEFINE_PARAMETERS() DEFINE_PARAMETER_TYPES() - DECLARE_DESCRIPTOR(ContextOnlyDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(ContextOnlyDescriptor) + + static constexpr auto registers(); }; -class NoContextDescriptor : public CallInterfaceDescriptor { +class NoContextDescriptor + : public StaticCallInterfaceDescriptor<NoContextDescriptor> { public: DEFINE_PARAMETERS_NO_CONTEXT() DEFINE_PARAMETER_TYPES() - DECLARE_DESCRIPTOR(NoContextDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(NoContextDescriptor) + + static constexpr auto registers(); }; // LoadDescriptor is used by all stubs that implement Load/KeyedLoad ICs. -class LoadDescriptor : public CallInterfaceDescriptor { +class LoadDescriptor : public StaticCallInterfaceDescriptor<LoadDescriptor> { public: DEFINE_PARAMETERS(kReceiver, kName, kSlot) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kReceiver MachineType::AnyTagged(), // kName MachineType::TaggedSigned()) // kSlot - DECLARE_DESCRIPTOR(LoadDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(LoadDescriptor) + + static constexpr inline Register ReceiverRegister(); + static constexpr inline Register NameRegister(); + static constexpr inline Register SlotRegister(); - static const Register ReceiverRegister(); - static const Register NameRegister(); - static const Register SlotRegister(); + static constexpr auto registers(); }; // LoadBaselineDescriptor is a load descriptor that does not take a context as // input. -class LoadBaselineDescriptor : public CallInterfaceDescriptor { +class LoadBaselineDescriptor + : public StaticCallInterfaceDescriptor<LoadBaselineDescriptor> { public: DEFINE_PARAMETERS_NO_CONTEXT(kReceiver, kName, kSlot) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kReceiver MachineType::AnyTagged(), // kName MachineType::TaggedSigned()) // kSlot - DECLARE_DESCRIPTOR(LoadBaselineDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(LoadBaselineDescriptor) + + static constexpr auto registers(); }; -class LoadGlobalNoFeedbackDescriptor : public CallInterfaceDescriptor { +class LoadGlobalNoFeedbackDescriptor + : public StaticCallInterfaceDescriptor<LoadGlobalNoFeedbackDescriptor> { public: DEFINE_PARAMETERS(kName, kICKind) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kName MachineType::TaggedSigned()) // kICKind - DECLARE_DESCRIPTOR(LoadGlobalNoFeedbackDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(LoadGlobalNoFeedbackDescriptor) - static const Register NameRegister() { - return LoadDescriptor::NameRegister(); - } + static constexpr inline Register ICKindRegister(); - static const Register ICKindRegister() { - return LoadDescriptor::SlotRegister(); - } + static constexpr auto registers(); }; -class LoadNoFeedbackDescriptor : public LoadGlobalNoFeedbackDescriptor { +class LoadNoFeedbackDescriptor + : public StaticCallInterfaceDescriptor<LoadNoFeedbackDescriptor> { public: DEFINE_PARAMETERS(kReceiver, kName, kICKind) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kReceiver MachineType::AnyTagged(), // kName MachineType::TaggedSigned()) // kICKind - DECLARE_DESCRIPTOR(LoadNoFeedbackDescriptor, LoadGlobalNoFeedbackDescriptor) - - static const Register ReceiverRegister() { - return LoadDescriptor::ReceiverRegister(); - } + DECLARE_DESCRIPTOR(LoadNoFeedbackDescriptor) - static const Register NameRegister() { - return LoadGlobalNoFeedbackDescriptor::NameRegister(); - } + static constexpr inline Register ICKindRegister(); - static const Register ICKindRegister() { - return LoadGlobalNoFeedbackDescriptor::ICKindRegister(); - } + static constexpr auto registers(); }; -class LoadGlobalDescriptor : public CallInterfaceDescriptor { +class LoadGlobalDescriptor + : public StaticCallInterfaceDescriptor<LoadGlobalDescriptor> { public: DEFINE_PARAMETERS(kName, kSlot) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kName MachineType::TaggedSigned()) // kSlot - DECLARE_DESCRIPTOR(LoadGlobalDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(LoadGlobalDescriptor) - static const Register NameRegister() { - return LoadDescriptor::NameRegister(); - } - - static const Register SlotRegister() { - return LoadDescriptor::SlotRegister(); - } + static constexpr auto registers(); }; -class LoadGlobalBaselineDescriptor : public CallInterfaceDescriptor { +class LoadGlobalBaselineDescriptor + : public StaticCallInterfaceDescriptor<LoadGlobalBaselineDescriptor> { public: DEFINE_PARAMETERS_NO_CONTEXT(kName, kSlot) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kName MachineType::TaggedSigned()) // kSlot - DECLARE_DESCRIPTOR(LoadGlobalBaselineDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(LoadGlobalBaselineDescriptor) + + static constexpr auto registers(); }; -class LookupBaselineDescriptor : public CallInterfaceDescriptor { +class LookupBaselineDescriptor + : public StaticCallInterfaceDescriptor<LookupBaselineDescriptor> { public: DEFINE_PARAMETERS_NO_CONTEXT(kName, kDepth, kSlot) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kName MachineType::AnyTagged(), // kDepth MachineType::AnyTagged()) // kSlot - DECLARE_DESCRIPTOR(LookupBaselineDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(LookupBaselineDescriptor) }; -class StoreDescriptor : public CallInterfaceDescriptor { +class StoreDescriptor : public StaticCallInterfaceDescriptor<StoreDescriptor> { public: DEFINE_PARAMETERS(kReceiver, kName, kValue, kSlot) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kReceiver MachineType::AnyTagged(), // kName MachineType::AnyTagged(), // kValue MachineType::TaggedSigned()) // kSlot - DECLARE_DESCRIPTOR(StoreDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(StoreDescriptor) - static const Register ReceiverRegister(); - static const Register NameRegister(); - static const Register ValueRegister(); - static const Register SlotRegister(); + static constexpr inline Register ReceiverRegister(); + static constexpr inline Register NameRegister(); + static constexpr inline Register ValueRegister(); + static constexpr inline Register SlotRegister(); -#if V8_TARGET_ARCH_IA32 - static const bool kPassLastArgsOnStack = true; -#else - static const bool kPassLastArgsOnStack = false; -#endif - - // Pass value and slot through the stack. - static const int kStackArgumentsCount = kPassLastArgsOnStack ? 2 : 0; + static constexpr auto registers(); }; -class StoreBaselineDescriptor : public CallInterfaceDescriptor { +class StoreBaselineDescriptor + : public StaticCallInterfaceDescriptor<StoreBaselineDescriptor> { public: DEFINE_PARAMETERS_NO_CONTEXT(kReceiver, kName, kValue, kSlot) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kReceiver MachineType::AnyTagged(), // kName MachineType::AnyTagged(), // kValue MachineType::TaggedSigned()) // kSlot - DECLARE_DESCRIPTOR(StoreBaselineDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(StoreBaselineDescriptor) -#if V8_TARGET_ARCH_IA32 - static const bool kPassLastArgsOnStack = true; -#else - static const bool kPassLastArgsOnStack = false; -#endif - - // Pass value and slot through the stack. - static const int kStackArgumentsCount = kPassLastArgsOnStack ? 2 : 0; + static constexpr auto registers(); }; -class StoreTransitionDescriptor : public StoreDescriptor { +class StoreTransitionDescriptor + : public StaticCallInterfaceDescriptor<StoreTransitionDescriptor> { public: DEFINE_PARAMETERS(kReceiver, kName, kMap, kValue, kSlot, kVector) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kReceiver @@ -828,17 +835,15 @@ class StoreTransitionDescriptor : public StoreDescriptor { MachineType::AnyTagged(), // kValue MachineType::TaggedSigned(), // kSlot MachineType::AnyTagged()) // kVector - DECLARE_DESCRIPTOR(StoreTransitionDescriptor, StoreDescriptor) + DECLARE_DESCRIPTOR(StoreTransitionDescriptor) - static const Register MapRegister(); - static const Register SlotRegister(); - static const Register VectorRegister(); + static constexpr inline Register MapRegister(); - // Pass value, slot and vector through the stack. - static const int kStackArgumentsCount = kPassLastArgsOnStack ? 3 : 0; + static constexpr auto registers(); }; -class StoreWithVectorDescriptor : public StoreDescriptor { +class StoreWithVectorDescriptor + : public StaticCallInterfaceDescriptor<StoreWithVectorDescriptor> { public: DEFINE_PARAMETERS(kReceiver, kName, kValue, kSlot, kVector) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kReceiver @@ -846,72 +851,52 @@ class StoreWithVectorDescriptor : public StoreDescriptor { MachineType::AnyTagged(), // kValue MachineType::TaggedSigned(), // kSlot MachineType::AnyTagged()) // kVector - DECLARE_DESCRIPTOR(StoreWithVectorDescriptor, StoreDescriptor) + DECLARE_DESCRIPTOR(StoreWithVectorDescriptor) - static const Register VectorRegister(); + static constexpr inline Register VectorRegister(); - // Pass value, slot and vector through the stack. - static const int kStackArgumentsCount = kPassLastArgsOnStack ? 3 : 0; + static constexpr auto registers(); }; -class StoreGlobalDescriptor : public CallInterfaceDescriptor { +class StoreGlobalDescriptor + : public StaticCallInterfaceDescriptor<StoreGlobalDescriptor> { public: DEFINE_PARAMETERS(kName, kValue, kSlot) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kName MachineType::AnyTagged(), // kValue MachineType::TaggedSigned()) // kSlot - DECLARE_DESCRIPTOR(StoreGlobalDescriptor, CallInterfaceDescriptor) - - static const bool kPassLastArgsOnStack = - StoreDescriptor::kPassLastArgsOnStack; - // Pass value and slot through the stack. - static const int kStackArgumentsCount = kPassLastArgsOnStack ? 2 : 0; - - static const Register NameRegister() { - return StoreDescriptor::NameRegister(); - } - - static const Register ValueRegister() { - return StoreDescriptor::ValueRegister(); - } + DECLARE_DESCRIPTOR(StoreGlobalDescriptor) - static const Register SlotRegister() { - return StoreDescriptor::SlotRegister(); - } + static constexpr auto registers(); }; -class StoreGlobalBaselineDescriptor : public CallInterfaceDescriptor { +class StoreGlobalBaselineDescriptor + : public StaticCallInterfaceDescriptor<StoreGlobalBaselineDescriptor> { public: DEFINE_PARAMETERS_NO_CONTEXT(kName, kValue, kSlot) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kName MachineType::AnyTagged(), // kValue MachineType::TaggedSigned()) // kSlot - DECLARE_DESCRIPTOR(StoreGlobalBaselineDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(StoreGlobalBaselineDescriptor) - static const bool kPassLastArgsOnStack = - StoreDescriptor::kPassLastArgsOnStack; - // Pass value and slot through the stack. - static const int kStackArgumentsCount = kPassLastArgsOnStack ? 2 : 0; + static constexpr auto registers(); }; -class StoreGlobalWithVectorDescriptor : public StoreGlobalDescriptor { +class StoreGlobalWithVectorDescriptor + : public StaticCallInterfaceDescriptor<StoreGlobalWithVectorDescriptor> { public: DEFINE_PARAMETERS(kName, kValue, kSlot, kVector) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kName MachineType::AnyTagged(), // kValue MachineType::TaggedSigned(), // kSlot MachineType::AnyTagged()) // kVector - DECLARE_DESCRIPTOR(StoreGlobalWithVectorDescriptor, StoreGlobalDescriptor) - - static const Register VectorRegister() { - return StoreWithVectorDescriptor::VectorRegister(); - } + DECLARE_DESCRIPTOR(StoreGlobalWithVectorDescriptor) - // Pass value, slot and vector through the stack. - static const int kStackArgumentsCount = kPassLastArgsOnStack ? 3 : 0; + static constexpr auto registers(); }; -class LoadWithVectorDescriptor : public LoadDescriptor { +class LoadWithVectorDescriptor + : public StaticCallInterfaceDescriptor<LoadWithVectorDescriptor> { public: // TODO(v8:9497): Revert the Machine type for kSlot to the // TaggedSigned once Torque can emit better call descriptors @@ -920,24 +905,19 @@ class LoadWithVectorDescriptor : public LoadDescriptor { MachineType::AnyTagged(), // kName MachineType::AnyTagged(), // kSlot MachineType::AnyTagged()) // kVector - DECLARE_DESCRIPTOR(LoadWithVectorDescriptor, LoadDescriptor) + DECLARE_DESCRIPTOR(LoadWithVectorDescriptor) - static const Register VectorRegister(); - -#if V8_TARGET_ARCH_IA32 - static const bool kPassLastArgsOnStack = true; -#else - static const bool kPassLastArgsOnStack = false; -#endif + static constexpr inline Register VectorRegister(); - // Pass vector through the stack. - static const int kStackArgumentsCount = kPassLastArgsOnStack ? 1 : 0; + static constexpr auto registers(); }; // Like LoadWithVectorDescriptor, except we pass the receiver (the object which // should be used as the receiver for accessor function calls) and the lookup // start object separately. -class LoadWithReceiverAndVectorDescriptor : public LoadWithVectorDescriptor { +class LoadWithReceiverAndVectorDescriptor + : public StaticCallInterfaceDescriptor< + LoadWithReceiverAndVectorDescriptor> { public: // TODO(v8:9497): Revert the Machine type for kSlot to the // TaggedSigned once Torque can emit better call descriptors @@ -947,22 +927,15 @@ class LoadWithReceiverAndVectorDescriptor : public LoadWithVectorDescriptor { MachineType::AnyTagged(), // kName MachineType::AnyTagged(), // kSlot MachineType::AnyTagged()) // kVector - DECLARE_DESCRIPTOR(LoadWithReceiverAndVectorDescriptor, - LoadWithVectorDescriptor) + DECLARE_DESCRIPTOR(LoadWithReceiverAndVectorDescriptor) - static const Register LookupStartObjectRegister(); + static constexpr inline Register LookupStartObjectRegister(); -#if V8_TARGET_ARCH_IA32 - static const bool kPassLastArgsOnStack = true; -#else - static const bool kPassLastArgsOnStack = false; -#endif - - // Pass vector through the stack. - static const int kStackArgumentsCount = kPassLastArgsOnStack ? 1 : 0; + static constexpr auto registers(); }; -class LoadWithReceiverBaselineDescriptor : public LoadBaselineDescriptor { +class LoadWithReceiverBaselineDescriptor + : public StaticCallInterfaceDescriptor<LoadWithReceiverBaselineDescriptor> { public: // TODO(v8:9497): Revert the Machine type for kSlot to the // TaggedSigned once Torque can emit better call descriptors @@ -971,29 +944,27 @@ class LoadWithReceiverBaselineDescriptor : public LoadBaselineDescriptor { MachineType::AnyTagged(), // kLookupStartObject MachineType::AnyTagged(), // kName MachineType::AnyTagged()) // kSlot - DECLARE_DESCRIPTOR(LoadWithReceiverBaselineDescriptor, LoadBaselineDescriptor) + DECLARE_DESCRIPTOR(LoadWithReceiverBaselineDescriptor) + + static constexpr auto registers(); }; -class LoadGlobalWithVectorDescriptor : public LoadGlobalDescriptor { +class LoadGlobalWithVectorDescriptor + : public StaticCallInterfaceDescriptor<LoadGlobalWithVectorDescriptor> { public: DEFINE_PARAMETERS(kName, kSlot, kVector) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kName MachineType::TaggedSigned(), // kSlot MachineType::AnyTagged()) // kVector - DECLARE_DESCRIPTOR(LoadGlobalWithVectorDescriptor, LoadGlobalDescriptor) + DECLARE_DESCRIPTOR(LoadGlobalWithVectorDescriptor) -#if V8_TARGET_ARCH_IA32 - // On ia32, LoadWithVectorDescriptor passes vector on the stack and thus we - // need to choose a new register here. - static const Register VectorRegister() { return edx; } -#else - static const Register VectorRegister() { - return LoadWithVectorDescriptor::VectorRegister(); - } -#endif + static constexpr inline Register VectorRegister(); + + static constexpr auto registers(); }; -class DynamicCheckMapsDescriptor final : public CallInterfaceDescriptor { +class DynamicCheckMapsDescriptor final + : public StaticCallInterfaceDescriptor<DynamicCheckMapsDescriptor> { public: DEFINE_PARAMETERS(kMap, kSlot, kHandler) DEFINE_RESULT_AND_PARAMETER_TYPES(MachineType::Int32(), // return val @@ -1001,20 +972,28 @@ class DynamicCheckMapsDescriptor final : public CallInterfaceDescriptor { MachineType::IntPtr(), // kSlot MachineType::TaggedSigned()) // kHandler - DECLARE_DESCRIPTOR(DynamicCheckMapsDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(DynamicCheckMapsDescriptor) + + static constexpr auto registers(); + static constexpr bool kRestrictAllocatableRegisters = true; }; -class FastNewObjectDescriptor : public CallInterfaceDescriptor { +class FastNewObjectDescriptor + : public StaticCallInterfaceDescriptor<FastNewObjectDescriptor> { public: DEFINE_PARAMETERS(kTarget, kNewTarget) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kTarget MachineType::AnyTagged()) // kNewTarget - DECLARE_DESCRIPTOR(FastNewObjectDescriptor, CallInterfaceDescriptor) - static const Register TargetRegister(); - static const Register NewTargetRegister(); + DECLARE_DESCRIPTOR(FastNewObjectDescriptor) + + static constexpr inline Register TargetRegister(); + static constexpr inline Register NewTargetRegister(); + + static constexpr auto registers(); }; -class RecordWriteDescriptor final : public CallInterfaceDescriptor { +class RecordWriteDescriptor final + : public StaticCallInterfaceDescriptor<RecordWriteDescriptor> { public: DEFINE_PARAMETERS_NO_CONTEXT(kObject, kSlot, kRememberedSet, kFPMode) DEFINE_PARAMETER_TYPES(MachineType::TaggedPointer(), // kObject @@ -1022,90 +1001,119 @@ class RecordWriteDescriptor final : public CallInterfaceDescriptor { MachineType::TaggedSigned(), // kRememberedSet MachineType::TaggedSigned()) // kFPMode - DECLARE_DESCRIPTOR(RecordWriteDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(RecordWriteDescriptor) + + static constexpr auto registers(); + static constexpr bool kRestrictAllocatableRegisters = true; }; -class EphemeronKeyBarrierDescriptor final : public CallInterfaceDescriptor { +class EphemeronKeyBarrierDescriptor final + : public StaticCallInterfaceDescriptor<EphemeronKeyBarrierDescriptor> { public: DEFINE_PARAMETERS_NO_CONTEXT(kObject, kSlotAddress, kFPMode) DEFINE_PARAMETER_TYPES(MachineType::TaggedPointer(), // kObject MachineType::Pointer(), // kSlotAddress MachineType::TaggedSigned()) // kFPMode - DECLARE_DESCRIPTOR(EphemeronKeyBarrierDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(EphemeronKeyBarrierDescriptor) + + static constexpr auto registers(); + static constexpr bool kRestrictAllocatableRegisters = true; }; -class TypeConversionDescriptor final : public CallInterfaceDescriptor { +class TypeConversionDescriptor final + : public StaticCallInterfaceDescriptor<TypeConversionDescriptor> { public: DEFINE_PARAMETERS(kArgument) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged()) - DECLARE_DESCRIPTOR(TypeConversionDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(TypeConversionDescriptor) + + static constexpr inline Register ArgumentRegister(); - static const Register ArgumentRegister(); + static constexpr auto registers(); }; -class TypeConversionNoContextDescriptor final : public CallInterfaceDescriptor { +class TypeConversionNoContextDescriptor final + : public StaticCallInterfaceDescriptor<TypeConversionNoContextDescriptor> { public: DEFINE_PARAMETERS_NO_CONTEXT(kArgument) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged()) - DECLARE_DESCRIPTOR(TypeConversionNoContextDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(TypeConversionNoContextDescriptor) + + static constexpr auto registers(); }; -class TypeConversion_BaselineDescriptor final : public CallInterfaceDescriptor { +class TypeConversion_BaselineDescriptor final + : public StaticCallInterfaceDescriptor<TypeConversion_BaselineDescriptor> { public: DEFINE_PARAMETERS_NO_CONTEXT(kArgument, kSlot) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), MachineType::UintPtr()) - DECLARE_DESCRIPTOR(TypeConversion_BaselineDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(TypeConversion_BaselineDescriptor) }; -class SingleParameterOnStackDescriptor final : public CallInterfaceDescriptor { +class SingleParameterOnStackDescriptor final + : public StaticCallInterfaceDescriptor<SingleParameterOnStackDescriptor> { public: DEFINE_PARAMETERS(kArgument) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged()) - DECLARE_DESCRIPTOR(SingleParameterOnStackDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(SingleParameterOnStackDescriptor) + + static constexpr auto registers(); }; class AsyncFunctionStackParameterDescriptor final - : public CallInterfaceDescriptor { + : public StaticCallInterfaceDescriptor< + AsyncFunctionStackParameterDescriptor> { public: DEFINE_PARAMETERS(kPromise, kResult) DEFINE_PARAMETER_TYPES(MachineType::TaggedPointer(), MachineType::AnyTagged()) - DECLARE_DESCRIPTOR(AsyncFunctionStackParameterDescriptor, - CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(AsyncFunctionStackParameterDescriptor) + + static constexpr auto registers(); }; class GetIteratorStackParameterDescriptor final - : public CallInterfaceDescriptor { + : public StaticCallInterfaceDescriptor< + GetIteratorStackParameterDescriptor> { public: DEFINE_PARAMETERS(kReceiver, kCallSlot, kFeedback, kResult) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), MachineType::AnyTagged(), MachineType::AnyTagged(), MachineType::AnyTagged()) - DECLARE_DESCRIPTOR(GetIteratorStackParameterDescriptor, - CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(GetIteratorStackParameterDescriptor) + + static constexpr auto registers(); }; -class GetPropertyDescriptor final : public CallInterfaceDescriptor { +class GetPropertyDescriptor final + : public StaticCallInterfaceDescriptor<GetPropertyDescriptor> { public: DEFINE_PARAMETERS(kObject, kKey) - DECLARE_DEFAULT_DESCRIPTOR(GetPropertyDescriptor, CallInterfaceDescriptor) + DECLARE_DEFAULT_DESCRIPTOR(GetPropertyDescriptor) }; -class TypeofDescriptor : public CallInterfaceDescriptor { +class TypeofDescriptor + : public StaticCallInterfaceDescriptor<TypeofDescriptor> { public: DEFINE_PARAMETERS(kObject) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged()) - DECLARE_DESCRIPTOR(TypeofDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(TypeofDescriptor) + + static constexpr inline auto registers(); }; -class CallTrampolineDescriptor : public CallInterfaceDescriptor { +class CallTrampolineDescriptor + : public StaticCallInterfaceDescriptor<CallTrampolineDescriptor> { public: DEFINE_PARAMETERS_VARARGS(kFunction, kActualArgumentsCount) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kFunction MachineType::Int32()) // kActualArgumentsCount - DECLARE_DESCRIPTOR(CallTrampolineDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(CallTrampolineDescriptor) + + static constexpr inline auto registers(); }; -class CallVarargsDescriptor : public CallInterfaceDescriptor { +class CallVarargsDescriptor + : public StaticCallInterfaceDescriptor<CallVarargsDescriptor> { public: DEFINE_PARAMETERS_VARARGS(kTarget, kActualArgumentsCount, kArgumentsLength, kArgumentsList) @@ -1113,123 +1121,143 @@ class CallVarargsDescriptor : public CallInterfaceDescriptor { MachineType::Int32(), // kActualArgumentsCount MachineType::Int32(), // kArgumentsLength MachineType::AnyTagged()) // kArgumentsList - DECLARE_DESCRIPTOR(CallVarargsDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(CallVarargsDescriptor) + + static constexpr inline auto registers(); }; -class CallForwardVarargsDescriptor : public CallInterfaceDescriptor { +class CallForwardVarargsDescriptor + : public StaticCallInterfaceDescriptor<CallForwardVarargsDescriptor> { public: DEFINE_PARAMETERS_VARARGS(kTarget, kActualArgumentsCount, kStartIndex) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kTarget MachineType::Int32(), // kActualArgumentsCount MachineType::Int32()) // kStartIndex - DECLARE_DESCRIPTOR(CallForwardVarargsDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(CallForwardVarargsDescriptor) + + static constexpr inline auto registers(); }; -class CallFunctionTemplateDescriptor : public CallInterfaceDescriptor { +class CallFunctionTemplateDescriptor + : public StaticCallInterfaceDescriptor<CallFunctionTemplateDescriptor> { public: DEFINE_PARAMETERS_VARARGS(kFunctionTemplateInfo, kArgumentsCount) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kFunctionTemplateInfo MachineType::IntPtr()) // kArgumentsCount - DECLARE_DESCRIPTOR(CallFunctionTemplateDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(CallFunctionTemplateDescriptor) + + static constexpr inline auto registers(); }; -class CallWithSpreadDescriptor : public CallInterfaceDescriptor { +class CallWithSpreadDescriptor + : public StaticCallInterfaceDescriptor<CallWithSpreadDescriptor> { public: DEFINE_PARAMETERS_VARARGS(kTarget, kArgumentsCount, kSpread) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kTarget MachineType::Int32(), // kArgumentsCount MachineType::AnyTagged()) // kSpread - DECLARE_DESCRIPTOR(CallWithSpreadDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(CallWithSpreadDescriptor) + + static constexpr inline auto registers(); }; -class CallWithSpread_BaselineDescriptor : public CallInterfaceDescriptor { +class CallWithSpread_BaselineDescriptor + : public StaticCallInterfaceDescriptor<CallWithSpread_BaselineDescriptor> { public: - DEFINE_PARAMETERS_VARARGS(kTarget, kArgumentsCount, kSpread, kSlot) + DEFINE_PARAMETERS_NO_CONTEXT_VARARGS(kTarget, kArgumentsCount, kSpread, kSlot) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kTarget MachineType::Int32(), // kArgumentsCount MachineType::AnyTagged(), // kSpread MachineType::UintPtr()) // kSlot - DECLARE_DESCRIPTOR(CallWithSpread_BaselineDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(CallWithSpread_BaselineDescriptor) }; -class CallWithSpread_WithFeedbackDescriptor : public CallInterfaceDescriptor { +class CallWithSpread_WithFeedbackDescriptor + : public StaticCallInterfaceDescriptor< + CallWithSpread_WithFeedbackDescriptor> { public: DEFINE_PARAMETERS_VARARGS(kTarget, kArgumentsCount, kSpread, kSlot, - kFeedbackVector) + kFeedbackVector, kReceiver) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kTarget MachineType::Int32(), // kArgumentsCount MachineType::AnyTagged(), // kSpread MachineType::UintPtr(), // kSlot - MachineType::AnyTagged()) // kFeedbackVector - DECLARE_DESCRIPTOR(CallWithSpread_WithFeedbackDescriptor, - CallInterfaceDescriptor) + MachineType::AnyTagged(), // kFeedbackVector + MachineType::AnyTagged()) // kReceiver + DECLARE_DESCRIPTOR(CallWithSpread_WithFeedbackDescriptor) }; -class CallWithArrayLikeDescriptor : public CallInterfaceDescriptor { +class CallWithArrayLikeDescriptor + : public StaticCallInterfaceDescriptor<CallWithArrayLikeDescriptor> { public: DEFINE_PARAMETERS(kTarget, kArgumentsList) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kTarget MachineType::AnyTagged()) // kArgumentsList - DECLARE_DESCRIPTOR(CallWithArrayLikeDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(CallWithArrayLikeDescriptor) + + static constexpr inline auto registers(); }; class CallWithArrayLike_WithFeedbackDescriptor - : public CallInterfaceDescriptor { + : public StaticCallInterfaceDescriptor< + CallWithArrayLike_WithFeedbackDescriptor> { public: - DEFINE_PARAMETERS(kTarget, kArgumentsList, kSlot, kFeedbackVector) + DEFINE_PARAMETERS(kTarget, kArgumentsList, kSlot, kFeedbackVector, kReceiver) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kTarget MachineType::AnyTagged(), // kArgumentsList MachineType::UintPtr(), // kSlot - MachineType::AnyTagged()) // kFeedbackVector - DECLARE_DESCRIPTOR(CallWithArrayLike_WithFeedbackDescriptor, - CallInterfaceDescriptor) + MachineType::AnyTagged(), // kFeedbackVector + MachineType::AnyTagged()) // kReceiver + DECLARE_DESCRIPTOR(CallWithArrayLike_WithFeedbackDescriptor) }; -class ConstructVarargsDescriptor : public CallInterfaceDescriptor { +class ConstructVarargsDescriptor + : public StaticCallInterfaceDescriptor<ConstructVarargsDescriptor> { public: DEFINE_JS_PARAMETERS(kArgumentsLength, kArgumentsList) DEFINE_JS_PARAMETER_TYPES(MachineType::Int32(), // kArgumentsLength MachineType::AnyTagged()) // kArgumentsList - DECLARE_DESCRIPTOR(ConstructVarargsDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(ConstructVarargsDescriptor) + + static constexpr inline auto registers(); }; -class ConstructForwardVarargsDescriptor : public CallInterfaceDescriptor { +class ConstructForwardVarargsDescriptor + : public StaticCallInterfaceDescriptor<ConstructForwardVarargsDescriptor> { public: DEFINE_JS_PARAMETERS(kStartIndex) DEFINE_JS_PARAMETER_TYPES(MachineType::Int32()) - DECLARE_DESCRIPTOR(ConstructForwardVarargsDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(ConstructForwardVarargsDescriptor) + + static constexpr inline auto registers(); }; -class ConstructWithSpreadDescriptor : public CallInterfaceDescriptor { +class ConstructWithSpreadDescriptor + : public StaticCallInterfaceDescriptor<ConstructWithSpreadDescriptor> { public: DEFINE_JS_PARAMETERS(kSpread) DEFINE_JS_PARAMETER_TYPES(MachineType::AnyTagged()) - DECLARE_DESCRIPTOR(ConstructWithSpreadDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(ConstructWithSpreadDescriptor) + + static constexpr inline auto registers(); }; -class ConstructWithSpread_BaselineDescriptor : public CallInterfaceDescriptor { +class ConstructWithSpread_BaselineDescriptor + : public StaticCallInterfaceDescriptor< + ConstructWithSpread_BaselineDescriptor> { public: // Note: kSlot comes before kSpread since as an untagged value it must be // passed in a register. - DEFINE_JS_PARAMETERS(kSlot, kSpread) + DEFINE_JS_PARAMETERS_NO_CONTEXT(kSlot, kSpread) DEFINE_JS_PARAMETER_TYPES(MachineType::UintPtr(), // kSlot MachineType::AnyTagged()) // kSpread - DECLARE_DESCRIPTOR(ConstructWithSpread_BaselineDescriptor, - CallInterfaceDescriptor) - -#if V8_TARGET_ARCH_IA32 - static const bool kPassLastArgsOnStack = true; -#else - static const bool kPassLastArgsOnStack = false; -#endif - - // Pass spread through the stack. - static const int kStackArgumentsCount = kPassLastArgsOnStack ? 1 : 0; + DECLARE_DESCRIPTOR(ConstructWithSpread_BaselineDescriptor) }; class ConstructWithSpread_WithFeedbackDescriptor - : public CallInterfaceDescriptor { + : public StaticCallInterfaceDescriptor< + ConstructWithSpread_WithFeedbackDescriptor> { public: // Note: kSlot comes before kSpread since as an untagged value it must be // passed in a register. @@ -1237,21 +1265,24 @@ class ConstructWithSpread_WithFeedbackDescriptor DEFINE_JS_PARAMETER_TYPES(MachineType::UintPtr(), // kSlot MachineType::AnyTagged(), // kSpread MachineType::AnyTagged()) // kFeedbackVector - DECLARE_DESCRIPTOR(ConstructWithSpread_WithFeedbackDescriptor, - CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(ConstructWithSpread_WithFeedbackDescriptor) }; -class ConstructWithArrayLikeDescriptor : public CallInterfaceDescriptor { +class ConstructWithArrayLikeDescriptor + : public StaticCallInterfaceDescriptor<ConstructWithArrayLikeDescriptor> { public: DEFINE_PARAMETERS(kTarget, kNewTarget, kArgumentsList) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kTarget MachineType::AnyTagged(), // kNewTarget MachineType::AnyTagged()) // kArgumentsList - DECLARE_DESCRIPTOR(ConstructWithArrayLikeDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(ConstructWithArrayLikeDescriptor) + + static constexpr inline auto registers(); }; class ConstructWithArrayLike_WithFeedbackDescriptor - : public CallInterfaceDescriptor { + : public StaticCallInterfaceDescriptor< + ConstructWithArrayLike_WithFeedbackDescriptor> { public: DEFINE_PARAMETERS(kTarget, kNewTarget, kArgumentsList, kSlot, kFeedbackVector) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kTarget @@ -1259,38 +1290,44 @@ class ConstructWithArrayLike_WithFeedbackDescriptor MachineType::AnyTagged(), // kArgumentsList MachineType::UintPtr(), // kSlot MachineType::AnyTagged()) // kFeedbackVector - DECLARE_DESCRIPTOR(ConstructWithArrayLike_WithFeedbackDescriptor, - CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(ConstructWithArrayLike_WithFeedbackDescriptor) }; // TODO(ishell): consider merging this with ArrayConstructorDescriptor -class ConstructStubDescriptor : public CallInterfaceDescriptor { +class ConstructStubDescriptor + : public StaticCallInterfaceDescriptor<ConstructStubDescriptor> { public: // TODO(jgruber): Remove the unused allocation site parameter. DEFINE_JS_PARAMETERS(kAllocationSite) DEFINE_JS_PARAMETER_TYPES(MachineType::AnyTagged()) // TODO(ishell): Use DECLARE_JS_COMPATIBLE_DESCRIPTOR if registers match - DECLARE_DESCRIPTOR(ConstructStubDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(ConstructStubDescriptor) + + static constexpr inline auto registers(); }; -class AbortDescriptor : public CallInterfaceDescriptor { +class AbortDescriptor : public StaticCallInterfaceDescriptor<AbortDescriptor> { public: DEFINE_PARAMETERS_NO_CONTEXT(kMessageOrMessageId) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged()) - DECLARE_DESCRIPTOR(AbortDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(AbortDescriptor) + + static constexpr inline auto registers(); }; -class ArrayConstructorDescriptor : public CallInterfaceDescriptor { +class ArrayConstructorDescriptor + : public StaticJSCallInterfaceDescriptor<ArrayConstructorDescriptor> { public: DEFINE_JS_PARAMETERS(kAllocationSite) DEFINE_JS_PARAMETER_TYPES(MachineType::AnyTagged()) - DECLARE_JS_COMPATIBLE_DESCRIPTOR(ArrayConstructorDescriptor, - CallInterfaceDescriptor, 1) + DECLARE_JS_COMPATIBLE_DESCRIPTOR(ArrayConstructorDescriptor) }; -class ArrayNArgumentsConstructorDescriptor : public CallInterfaceDescriptor { +class ArrayNArgumentsConstructorDescriptor + : public StaticCallInterfaceDescriptor< + ArrayNArgumentsConstructorDescriptor> { public: // This descriptor declares only register arguments while respective number // of JS arguments stay on the expression stack. @@ -1300,12 +1337,14 @@ class ArrayNArgumentsConstructorDescriptor : public CallInterfaceDescriptor { DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kFunction, MachineType::AnyTagged(), // kAllocationSite MachineType::Int32()) // kActualArgumentsCount - DECLARE_DESCRIPTOR(ArrayNArgumentsConstructorDescriptor, - CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(ArrayNArgumentsConstructorDescriptor) + + static constexpr auto registers(); }; class ArrayNoArgumentConstructorDescriptor - : public ArrayNArgumentsConstructorDescriptor { + : public StaticCallInterfaceDescriptor< + ArrayNoArgumentConstructorDescriptor> { public: // This descriptor declares same register arguments as the parent // ArrayNArgumentsConstructorDescriptor and it declares indices for @@ -1316,12 +1355,14 @@ class ArrayNoArgumentConstructorDescriptor MachineType::AnyTagged(), // kAllocationSite MachineType::Int32(), // kActualArgumentsCount MachineType::AnyTagged()) // kFunctionParameter - DECLARE_DESCRIPTOR(ArrayNoArgumentConstructorDescriptor, - ArrayNArgumentsConstructorDescriptor) + DECLARE_DESCRIPTOR(ArrayNoArgumentConstructorDescriptor) + + static constexpr auto registers(); }; class ArraySingleArgumentConstructorDescriptor - : public ArrayNArgumentsConstructorDescriptor { + : public StaticCallInterfaceDescriptor< + ArraySingleArgumentConstructorDescriptor> { public: // This descriptor declares same register arguments as the parent // ArrayNArgumentsConstructorDescriptor and it declares indices for @@ -1334,44 +1375,56 @@ class ArraySingleArgumentConstructorDescriptor // JS arguments on the stack MachineType::AnyTagged(), // kArraySizeSmiParameter MachineType::AnyTagged()) // kReceiverParameter - DECLARE_DESCRIPTOR(ArraySingleArgumentConstructorDescriptor, - ArrayNArgumentsConstructorDescriptor) + DECLARE_DESCRIPTOR(ArraySingleArgumentConstructorDescriptor) + + static constexpr auto registers(); }; -class CompareDescriptor : public CallInterfaceDescriptor { +class CompareDescriptor + : public StaticCallInterfaceDescriptor<CompareDescriptor> { public: DEFINE_PARAMETERS(kLeft, kRight) - DECLARE_DESCRIPTOR(CompareDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(CompareDescriptor) + + static constexpr inline auto registers(); }; -class BinaryOpDescriptor : public CallInterfaceDescriptor { +class BinaryOpDescriptor + : public StaticCallInterfaceDescriptor<BinaryOpDescriptor> { public: DEFINE_PARAMETERS(kLeft, kRight) - DECLARE_DESCRIPTOR(BinaryOpDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(BinaryOpDescriptor) + + static constexpr inline auto registers(); }; -class BinaryOp_BaselineDescriptor : public CallInterfaceDescriptor { +class BinaryOp_BaselineDescriptor + : public StaticCallInterfaceDescriptor<BinaryOp_BaselineDescriptor> { public: DEFINE_PARAMETERS_NO_CONTEXT(kLeft, kRight, kSlot) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kLeft MachineType::AnyTagged(), // kRight MachineType::UintPtr()) // kSlot - DECLARE_DESCRIPTOR(BinaryOp_BaselineDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(BinaryOp_BaselineDescriptor) + + static constexpr inline auto registers(); }; // This desciptor is shared among String.p.charAt/charCodeAt/codePointAt // as they all have the same interface. -class StringAtDescriptor final : public CallInterfaceDescriptor { +class StringAtDescriptor final + : public StaticCallInterfaceDescriptor<StringAtDescriptor> { public: DEFINE_PARAMETERS(kReceiver, kPosition) // TODO(turbofan): Return untagged value here. DEFINE_RESULT_AND_PARAMETER_TYPES(MachineType::TaggedSigned(), // result 1 MachineType::AnyTagged(), // kReceiver MachineType::IntPtr()) // kPosition - DECLARE_DESCRIPTOR(StringAtDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(StringAtDescriptor) }; -class StringAtAsStringDescriptor final : public CallInterfaceDescriptor { +class StringAtAsStringDescriptor final + : public StaticCallInterfaceDescriptor<StringAtAsStringDescriptor> { public: DEFINE_PARAMETERS(kReceiver, kPosition) // TODO(turbofan): Return untagged value here. @@ -1379,10 +1432,11 @@ class StringAtAsStringDescriptor final : public CallInterfaceDescriptor { MachineType::TaggedPointer(), // result string MachineType::AnyTagged(), // kReceiver MachineType::IntPtr()) // kPosition - DECLARE_DESCRIPTOR(StringAtAsStringDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(StringAtAsStringDescriptor) }; -class StringSubstringDescriptor final : public CallInterfaceDescriptor { +class StringSubstringDescriptor final + : public StaticCallInterfaceDescriptor<StringSubstringDescriptor> { public: DEFINE_PARAMETERS(kString, kFrom, kTo) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kString @@ -1390,18 +1444,19 @@ class StringSubstringDescriptor final : public CallInterfaceDescriptor { MachineType::IntPtr()) // kTo // TODO(turbofan): Allow builtins to return untagged values. - DECLARE_DESCRIPTOR(StringSubstringDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(StringSubstringDescriptor) }; -class CppBuiltinAdaptorDescriptor : public CallInterfaceDescriptor { +class CppBuiltinAdaptorDescriptor + : public StaticJSCallInterfaceDescriptor<CppBuiltinAdaptorDescriptor> { public: DEFINE_JS_PARAMETERS(kCFunction) DEFINE_JS_PARAMETER_TYPES(MachineType::Pointer()) - DECLARE_JS_COMPATIBLE_DESCRIPTOR(CppBuiltinAdaptorDescriptor, - CallInterfaceDescriptor, 1) + DECLARE_JS_COMPATIBLE_DESCRIPTOR(CppBuiltinAdaptorDescriptor) }; -class CEntry1ArgvOnStackDescriptor : public CallInterfaceDescriptor { +class CEntry1ArgvOnStackDescriptor + : public StaticCallInterfaceDescriptor<CEntry1ArgvOnStackDescriptor> { public: DEFINE_PARAMETERS(kArity, // register argument kCFunction, // register argument @@ -1415,10 +1470,13 @@ class CEntry1ArgvOnStackDescriptor : public CallInterfaceDescriptor { MachineType::AnyTagged(), // kArgcSmi MachineType::AnyTagged(), // kTargetCopy MachineType::AnyTagged()) // kNewTargetCopy - DECLARE_DESCRIPTOR(CEntry1ArgvOnStackDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(CEntry1ArgvOnStackDescriptor) + + static constexpr auto registers(); }; -class ApiCallbackDescriptor : public CallInterfaceDescriptor { +class ApiCallbackDescriptor + : public StaticCallInterfaceDescriptor<ApiCallbackDescriptor> { public: DEFINE_PARAMETERS_VARARGS(kApiFunctionAddress, kActualArgumentsCount, kCallData, kHolder) @@ -1428,44 +1486,56 @@ class ApiCallbackDescriptor : public CallInterfaceDescriptor { MachineType::IntPtr(), // kActualArgumentsCount MachineType::AnyTagged(), // kCallData MachineType::AnyTagged()) // kHolder - DECLARE_DESCRIPTOR(ApiCallbackDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(ApiCallbackDescriptor) + + static constexpr inline auto registers(); }; -class ApiGetterDescriptor : public CallInterfaceDescriptor { +class ApiGetterDescriptor + : public StaticCallInterfaceDescriptor<ApiGetterDescriptor> { public: DEFINE_PARAMETERS(kReceiver, kHolder, kCallback) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kReceiver MachineType::AnyTagged(), // kHolder MachineType::AnyTagged()) // kCallback - DECLARE_DESCRIPTOR(ApiGetterDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(ApiGetterDescriptor) - static const Register ReceiverRegister(); - static const Register HolderRegister(); - static const Register CallbackRegister(); + static constexpr inline Register ReceiverRegister(); + static constexpr inline Register HolderRegister(); + static constexpr inline Register CallbackRegister(); + + static constexpr auto registers(); }; // TODO(turbofan): We should probably rename this to GrowFastElementsDescriptor. -class GrowArrayElementsDescriptor : public CallInterfaceDescriptor { +class GrowArrayElementsDescriptor + : public StaticCallInterfaceDescriptor<GrowArrayElementsDescriptor> { public: DEFINE_PARAMETERS(kObject, kKey) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kObject MachineType::AnyTagged()) // kKey - DECLARE_DESCRIPTOR(GrowArrayElementsDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(GrowArrayElementsDescriptor) + + static constexpr inline Register ObjectRegister(); + static constexpr inline Register KeyRegister(); - static const Register ObjectRegister(); - static const Register KeyRegister(); + static constexpr auto registers(); }; class V8_EXPORT_PRIVATE TailCallOptimizedCodeSlotDescriptor - : public CallInterfaceDescriptor { + : public StaticCallInterfaceDescriptor< + TailCallOptimizedCodeSlotDescriptor> { public: DEFINE_PARAMETERS(kOptimizedCodeEntry) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged()) // kAccumulator - DECLARE_DESCRIPTOR(TailCallOptimizedCodeSlotDescriptor, - CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(TailCallOptimizedCodeSlotDescriptor) + + static constexpr auto registers(); }; -class BaselineOutOfLinePrologueDescriptor : public CallInterfaceDescriptor { +class BaselineOutOfLinePrologueDescriptor + : public StaticCallInterfaceDescriptor< + BaselineOutOfLinePrologueDescriptor> { public: DEFINE_PARAMETERS_NO_CONTEXT(kCalleeContext, kClosure, kJavaScriptCallArgCount, kStackFrameSize, @@ -1477,32 +1547,31 @@ class BaselineOutOfLinePrologueDescriptor : public CallInterfaceDescriptor { MachineType::Int32(), // kStackFrameSize MachineType::AnyTagged(), // kJavaScriptCallNewTarget MachineType::AnyTagged()) // kInterpreterBytecodeArray - DECLARE_DESCRIPTOR(BaselineOutOfLinePrologueDescriptor, - CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(BaselineOutOfLinePrologueDescriptor) -#if V8_TARGET_ARCH_IA32 - static const bool kPassLastArgsOnStack = true; -#else - static const bool kPassLastArgsOnStack = false; -#endif + static constexpr inline auto registers(); - // Pass bytecode array through the stack. - static const int kStackArgumentsCount = kPassLastArgsOnStack ? 1 : 0; + // We pass the context manually, so we have one extra register. + static constexpr int kMaxRegisterParams = + StaticCallInterfaceDescriptor::kMaxRegisterParams + 1; }; -class BaselineLeaveFrameDescriptor : public CallInterfaceDescriptor { +class BaselineLeaveFrameDescriptor + : public StaticCallInterfaceDescriptor<BaselineLeaveFrameDescriptor> { public: DEFINE_PARAMETERS_NO_CONTEXT(kParamsSize, kWeight) DEFINE_PARAMETER_TYPES(MachineType::Int32(), // kParamsSize MachineType::Int32()) // kWeight - DECLARE_DESCRIPTOR(BaselineLeaveFrameDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(BaselineLeaveFrameDescriptor) + + static constexpr inline Register ParamsSizeRegister(); + static constexpr inline Register WeightRegister(); - static const Register ParamsSizeRegister(); - static const Register WeightRegister(); + static constexpr inline auto registers(); }; class V8_EXPORT_PRIVATE InterpreterDispatchDescriptor - : public CallInterfaceDescriptor { + : public StaticCallInterfaceDescriptor<InterpreterDispatchDescriptor> { public: DEFINE_PARAMETERS(kAccumulator, kBytecodeOffset, kBytecodeArray, kDispatchTable) @@ -1510,21 +1579,27 @@ class V8_EXPORT_PRIVATE InterpreterDispatchDescriptor MachineType::IntPtr(), // kBytecodeOffset MachineType::AnyTagged(), // kBytecodeArray MachineType::IntPtr()) // kDispatchTable - DECLARE_DESCRIPTOR(InterpreterDispatchDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(InterpreterDispatchDescriptor) + + static constexpr inline auto registers(); }; -class InterpreterPushArgsThenCallDescriptor : public CallInterfaceDescriptor { +class InterpreterPushArgsThenCallDescriptor + : public StaticCallInterfaceDescriptor< + InterpreterPushArgsThenCallDescriptor> { public: DEFINE_PARAMETERS(kNumberOfArguments, kFirstArgument, kFunction) DEFINE_PARAMETER_TYPES(MachineType::Int32(), // kNumberOfArguments MachineType::Pointer(), // kFirstArgument MachineType::AnyTagged()) // kFunction - DECLARE_DESCRIPTOR(InterpreterPushArgsThenCallDescriptor, - CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(InterpreterPushArgsThenCallDescriptor) + + static constexpr inline auto registers(); }; class InterpreterPushArgsThenConstructDescriptor - : public CallInterfaceDescriptor { + : public StaticCallInterfaceDescriptor< + InterpreterPushArgsThenConstructDescriptor> { public: DEFINE_PARAMETERS(kNumberOfArguments, kFirstArgument, kConstructor, kNewTarget, kFeedbackElement) @@ -1533,20 +1608,13 @@ class InterpreterPushArgsThenConstructDescriptor MachineType::AnyTagged(), // kConstructor MachineType::AnyTagged(), // kNewTarget MachineType::AnyTagged()) // kFeedbackElement - DECLARE_DESCRIPTOR(InterpreterPushArgsThenConstructDescriptor, - CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(InterpreterPushArgsThenConstructDescriptor) -#if V8_TARGET_ARCH_IA32 - static const bool kPassLastArgsOnStack = true; -#else - static const bool kPassLastArgsOnStack = false; -#endif - - // Pass constructor, new target and feedback element through the stack. - static const int kStackArgumentsCount = kPassLastArgsOnStack ? 3 : 0; + static constexpr inline auto registers(); }; -class InterpreterCEntry1Descriptor : public CallInterfaceDescriptor { +class InterpreterCEntry1Descriptor + : public StaticCallInterfaceDescriptor<InterpreterCEntry1Descriptor> { public: DEFINE_RESULT_AND_PARAMETERS(1, kNumberOfArguments, kFirstArgument, kFunctionEntry) @@ -1554,10 +1622,13 @@ class InterpreterCEntry1Descriptor : public CallInterfaceDescriptor { MachineType::Int32(), // kNumberOfArguments MachineType::Pointer(), // kFirstArgument MachineType::Pointer()) // kFunctionEntry - DECLARE_DESCRIPTOR(InterpreterCEntry1Descriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(InterpreterCEntry1Descriptor) + + static constexpr auto registers(); }; -class InterpreterCEntry2Descriptor : public CallInterfaceDescriptor { +class InterpreterCEntry2Descriptor + : public StaticCallInterfaceDescriptor<InterpreterCEntry2Descriptor> { public: DEFINE_RESULT_AND_PARAMETERS(2, kNumberOfArguments, kFirstArgument, kFunctionEntry) @@ -1566,10 +1637,13 @@ class InterpreterCEntry2Descriptor : public CallInterfaceDescriptor { MachineType::Int32(), // kNumberOfArguments MachineType::Pointer(), // kFirstArgument MachineType::Pointer()) // kFunctionEntry - DECLARE_DESCRIPTOR(InterpreterCEntry2Descriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(InterpreterCEntry2Descriptor) + + static constexpr auto registers(); }; -class ForInPrepareDescriptor : public CallInterfaceDescriptor { +class ForInPrepareDescriptor + : public StaticCallInterfaceDescriptor<ForInPrepareDescriptor> { public: DEFINE_RESULT_AND_PARAMETERS(2, kEnumerator, kVectorIndex, kFeedbackVector) DEFINE_RESULT_AND_PARAMETER_TYPES( @@ -1578,120 +1652,133 @@ class ForInPrepareDescriptor : public CallInterfaceDescriptor { MachineType::AnyTagged(), // kEnumerator MachineType::TaggedSigned(), // kVectorIndex MachineType::AnyTagged()) // kFeedbackVector - DECLARE_DESCRIPTOR(ForInPrepareDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(ForInPrepareDescriptor) }; -class ResumeGeneratorDescriptor final : public CallInterfaceDescriptor { +class ResumeGeneratorDescriptor final + : public StaticCallInterfaceDescriptor<ResumeGeneratorDescriptor> { public: DEFINE_PARAMETERS(kValue, kGenerator) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kValue MachineType::AnyTagged()) // kGenerator - DECLARE_DESCRIPTOR(ResumeGeneratorDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(ResumeGeneratorDescriptor) + + static constexpr inline auto registers(); }; -class ResumeGeneratorBaselineDescriptor final : public CallInterfaceDescriptor { +class ResumeGeneratorBaselineDescriptor final + : public StaticCallInterfaceDescriptor<ResumeGeneratorBaselineDescriptor> { public: - DEFINE_PARAMETERS(kGeneratorObject, kRegisterCount) + DEFINE_PARAMETERS_NO_CONTEXT(kGeneratorObject, kRegisterCount) DEFINE_RESULT_AND_PARAMETER_TYPES( MachineType::TaggedSigned(), // return type MachineType::AnyTagged(), // kGeneratorObject MachineType::IntPtr(), // kRegisterCount ) - DECLARE_DESCRIPTOR(ResumeGeneratorBaselineDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(ResumeGeneratorBaselineDescriptor) }; class SuspendGeneratorBaselineDescriptor final - : public CallInterfaceDescriptor { + : public StaticCallInterfaceDescriptor<SuspendGeneratorBaselineDescriptor> { public: - DEFINE_PARAMETERS(kGeneratorObject, kSuspendId, kBytecodeOffset, - kRegisterCount) + DEFINE_PARAMETERS_NO_CONTEXT(kGeneratorObject, kSuspendId, kBytecodeOffset, + kRegisterCount) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kGeneratorObject MachineType::IntPtr(), // kSuspendId MachineType::IntPtr(), // kBytecodeOffset MachineType::IntPtr(), // kRegisterCount ) - DECLARE_DESCRIPTOR(SuspendGeneratorBaselineDescriptor, - CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(SuspendGeneratorBaselineDescriptor) }; -class FrameDropperTrampolineDescriptor final : public CallInterfaceDescriptor { - public: - DEFINE_PARAMETERS(kRestartFp) - DEFINE_PARAMETER_TYPES(MachineType::Pointer()) - DECLARE_DESCRIPTOR(FrameDropperTrampolineDescriptor, CallInterfaceDescriptor) -}; - -class RunMicrotasksEntryDescriptor final : public CallInterfaceDescriptor { +class RunMicrotasksEntryDescriptor final + : public StaticCallInterfaceDescriptor<RunMicrotasksEntryDescriptor> { public: DEFINE_PARAMETERS_ENTRY(kRootRegisterValue, kMicrotaskQueue) DEFINE_PARAMETER_TYPES(MachineType::Pointer(), // kRootRegisterValue MachineType::Pointer()) // kMicrotaskQueue - DECLARE_DESCRIPTOR(RunMicrotasksEntryDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(RunMicrotasksEntryDescriptor) + + static constexpr inline auto registers(); }; -class RunMicrotasksDescriptor final : public CallInterfaceDescriptor { +class RunMicrotasksDescriptor final + : public StaticCallInterfaceDescriptor<RunMicrotasksDescriptor> { public: DEFINE_PARAMETERS(kMicrotaskQueue) DEFINE_PARAMETER_TYPES(MachineType::Pointer()) - DECLARE_DESCRIPTOR(RunMicrotasksDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(RunMicrotasksDescriptor) - static Register MicrotaskQueueRegister(); + static constexpr inline Register MicrotaskQueueRegister(); }; -class WasmFloat32ToNumberDescriptor final : public CallInterfaceDescriptor { +class WasmFloat32ToNumberDescriptor final + : public StaticCallInterfaceDescriptor<WasmFloat32ToNumberDescriptor> { public: DEFINE_PARAMETERS_NO_CONTEXT(kValue) DEFINE_RESULT_AND_PARAMETER_TYPES(MachineType::AnyTagged(), // result MachineType::Float32()) // value - DECLARE_DESCRIPTOR(WasmFloat32ToNumberDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(WasmFloat32ToNumberDescriptor) + +#if V8_TARGET_ARCH_IA32 + // We need a custom descriptor on ia32 to avoid using xmm0. + static constexpr inline auto registers(); +#endif }; -class WasmFloat64ToNumberDescriptor final : public CallInterfaceDescriptor { +class WasmFloat64ToNumberDescriptor final + : public StaticCallInterfaceDescriptor<WasmFloat64ToNumberDescriptor> { public: DEFINE_PARAMETERS_NO_CONTEXT(kValue) DEFINE_RESULT_AND_PARAMETER_TYPES(MachineType::AnyTagged(), // result MachineType::Float64()) // value - DECLARE_DESCRIPTOR(WasmFloat64ToNumberDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(WasmFloat64ToNumberDescriptor) + +#if V8_TARGET_ARCH_IA32 + // We need a custom descriptor on ia32 to avoid using xmm0. + static constexpr inline auto registers(); +#endif }; class V8_EXPORT_PRIVATE I64ToBigIntDescriptor final - : public CallInterfaceDescriptor { + : public StaticCallInterfaceDescriptor<I64ToBigIntDescriptor> { public: DEFINE_PARAMETERS_NO_CONTEXT(kArgument) DEFINE_PARAMETER_TYPES(MachineType::Int64()) // kArgument - DECLARE_DESCRIPTOR(I64ToBigIntDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(I64ToBigIntDescriptor) }; // 32 bits version of the I64ToBigIntDescriptor call interface descriptor class V8_EXPORT_PRIVATE I32PairToBigIntDescriptor final - : public CallInterfaceDescriptor { + : public StaticCallInterfaceDescriptor<I32PairToBigIntDescriptor> { public: DEFINE_PARAMETERS_NO_CONTEXT(kLow, kHigh) DEFINE_PARAMETER_TYPES(MachineType::Uint32(), // kLow MachineType::Uint32()) // kHigh - DECLARE_DESCRIPTOR(I32PairToBigIntDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(I32PairToBigIntDescriptor) }; class V8_EXPORT_PRIVATE BigIntToI64Descriptor final - : public CallInterfaceDescriptor { + : public StaticCallInterfaceDescriptor<BigIntToI64Descriptor> { public: DEFINE_PARAMETERS(kArgument) DEFINE_RESULT_AND_PARAMETER_TYPES(MachineType::Int64(), // result 1 MachineType::AnyTagged()) // kArgument - DECLARE_DESCRIPTOR(BigIntToI64Descriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(BigIntToI64Descriptor) }; class V8_EXPORT_PRIVATE BigIntToI32PairDescriptor final - : public CallInterfaceDescriptor { + : public StaticCallInterfaceDescriptor<BigIntToI32PairDescriptor> { public: DEFINE_RESULT_AND_PARAMETERS(2, kArgument) DEFINE_RESULT_AND_PARAMETER_TYPES(MachineType::Uint32(), // result 1 MachineType::Uint32(), // result 2 MachineType::AnyTagged()) // kArgument - DECLARE_DESCRIPTOR(BigIntToI32PairDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(BigIntToI32PairDescriptor) }; -class WasmI32AtomicWait32Descriptor final : public CallInterfaceDescriptor { +class WasmI32AtomicWait32Descriptor final + : public StaticCallInterfaceDescriptor<WasmI32AtomicWait32Descriptor> { public: DEFINE_PARAMETERS_NO_CONTEXT(kAddress, kExpectedValue, kTimeoutLow, kTimeoutHigh) @@ -1700,36 +1787,30 @@ class WasmI32AtomicWait32Descriptor final : public CallInterfaceDescriptor { MachineType::Int32(), // kExpectedValue MachineType::Uint32(), // kTimeoutLow MachineType::Uint32()) // kTimeoutHigh - DECLARE_DESCRIPTOR(WasmI32AtomicWait32Descriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(WasmI32AtomicWait32Descriptor) }; -class WasmI64AtomicWait32Descriptor final : public CallInterfaceDescriptor { +class WasmI64AtomicWait32Descriptor final + : public StaticCallInterfaceDescriptor<WasmI64AtomicWait32Descriptor> { public: DEFINE_PARAMETERS_NO_CONTEXT(kAddress, kExpectedValueLow, kExpectedValueHigh, kTimeoutLow, kTimeoutHigh) - DEFINE_RESULT_AND_PARAMETER_TYPES_WITH_FLAG( - CallInterfaceDescriptorData::kNoStackScan, // allow untagged stack params - MachineType::Uint32(), // result 1 - MachineType::Uint32(), // kAddress - MachineType::Uint32(), // kExpectedValueLow - MachineType::Uint32(), // kExpectedValueHigh - MachineType::Uint32(), // kTimeoutLow - MachineType::Uint32()) // kTimeoutHigh + static constexpr bool kNoStackScan = true; -#if V8_TARGET_ARCH_IA32 - static constexpr bool kPassLastArgOnStack = true; -#else - static constexpr bool kPassLastArgOnStack = false; -#endif - - // Pass the last parameter through the stack. - static constexpr int kStackArgumentsCount = kPassLastArgOnStack ? 1 : 0; + DEFINE_RESULT_AND_PARAMETER_TYPES( + MachineType::Uint32(), // result 1 + MachineType::Uint32(), // kAddress + MachineType::Uint32(), // kExpectedValueLow + MachineType::Uint32(), // kExpectedValueHigh + MachineType::Uint32(), // kTimeoutLow + MachineType::Uint32()) // kTimeoutHigh - DECLARE_DESCRIPTOR(WasmI64AtomicWait32Descriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(WasmI64AtomicWait32Descriptor) }; -class CloneObjectWithVectorDescriptor final : public CallInterfaceDescriptor { +class CloneObjectWithVectorDescriptor final + : public StaticCallInterfaceDescriptor<CloneObjectWithVectorDescriptor> { public: DEFINE_PARAMETERS(kSource, kFlags, kSlot, kVector) DEFINE_RESULT_AND_PARAMETER_TYPES(MachineType::TaggedPointer(), // result 1 @@ -1737,108 +1818,142 @@ class CloneObjectWithVectorDescriptor final : public CallInterfaceDescriptor { MachineType::TaggedSigned(), // kFlags MachineType::TaggedSigned(), // kSlot MachineType::AnyTagged()) // kVector - DECLARE_DESCRIPTOR(CloneObjectWithVectorDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(CloneObjectWithVectorDescriptor) }; -class CloneObjectBaselineDescriptor final : public CallInterfaceDescriptor { +class CloneObjectBaselineDescriptor final + : public StaticCallInterfaceDescriptor<CloneObjectBaselineDescriptor> { public: DEFINE_PARAMETERS_NO_CONTEXT(kSource, kFlags, kSlot) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kSource MachineType::TaggedSigned(), // kFlags MachineType::TaggedSigned()) // kSlot - DECLARE_DESCRIPTOR(CloneObjectBaselineDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(CloneObjectBaselineDescriptor) }; -class BinaryOp_WithFeedbackDescriptor : public CallInterfaceDescriptor { +class BinaryOp_WithFeedbackDescriptor + : public StaticCallInterfaceDescriptor<BinaryOp_WithFeedbackDescriptor> { public: DEFINE_PARAMETERS(kLeft, kRight, kSlot, kFeedbackVector) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kLeft MachineType::AnyTagged(), // kRight MachineType::UintPtr(), // kSlot MachineType::AnyTagged()) // kFeedbackVector - DECLARE_DESCRIPTOR(BinaryOp_WithFeedbackDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(BinaryOp_WithFeedbackDescriptor) +}; + +class CallTrampoline_Baseline_CompactDescriptor + : public StaticCallInterfaceDescriptor< + CallTrampoline_Baseline_CompactDescriptor> { + public: + using ArgumentCountField = base::BitField<uint32_t, 0, 8>; + using SlotField = base::BitField<uintptr_t, 8, 24>; + + static bool EncodeBitField(uint32_t argc, uintptr_t slot, uint32_t* out) { + if (ArgumentCountField::is_valid(argc) && SlotField::is_valid(slot)) { + *out = ArgumentCountField::encode(argc) | SlotField::encode(slot); + return true; + } + return false; + } + + DEFINE_PARAMETERS_NO_CONTEXT_VARARGS(kFunction, kBitField) + DEFINE_PARAMETER_TYPES( + MachineType::AnyTagged(), // kFunction + MachineType::Uint32()) // kBitField = ArgumentCountField | SlotField + DECLARE_DESCRIPTOR(CallTrampoline_Baseline_CompactDescriptor) }; -class CallTrampoline_BaselineDescriptor : public CallInterfaceDescriptor { +class CallTrampoline_BaselineDescriptor + : public StaticCallInterfaceDescriptor<CallTrampoline_BaselineDescriptor> { public: - DEFINE_PARAMETERS_VARARGS(kFunction, kActualArgumentsCount, kSlot) + DEFINE_PARAMETERS_NO_CONTEXT_VARARGS(kFunction, kActualArgumentsCount, kSlot) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kFunction MachineType::Int32(), // kActualArgumentsCount MachineType::UintPtr()) // kSlot - DECLARE_DESCRIPTOR(CallTrampoline_BaselineDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(CallTrampoline_BaselineDescriptor) }; -class CallTrampoline_WithFeedbackDescriptor : public CallInterfaceDescriptor { +class CallTrampoline_WithFeedbackDescriptor + : public StaticCallInterfaceDescriptor< + CallTrampoline_WithFeedbackDescriptor> { public: DEFINE_PARAMETERS_VARARGS(kFunction, kActualArgumentsCount, kSlot, - kFeedbackVector) + kFeedbackVector, kReceiver) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kFunction MachineType::Int32(), // kActualArgumentsCount MachineType::UintPtr(), // kSlot - MachineType::AnyTagged()) // kFeedbackVector - DECLARE_DESCRIPTOR(CallTrampoline_WithFeedbackDescriptor, - CallInterfaceDescriptor) + MachineType::AnyTagged(), // kFeedbackVector + MachineType::AnyTagged()) // kReceiver + DECLARE_DESCRIPTOR(CallTrampoline_WithFeedbackDescriptor) }; -class Compare_WithFeedbackDescriptor : public CallInterfaceDescriptor { +class Compare_WithFeedbackDescriptor + : public StaticCallInterfaceDescriptor<Compare_WithFeedbackDescriptor> { public: DEFINE_PARAMETERS(kLeft, kRight, kSlot, kFeedbackVector) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kLeft MachineType::AnyTagged(), // kRight MachineType::UintPtr(), // kSlot MachineType::AnyTagged()) // kFeedbackVector - DECLARE_DESCRIPTOR(Compare_WithFeedbackDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(Compare_WithFeedbackDescriptor) }; -class Compare_BaselineDescriptor : public CallInterfaceDescriptor { +class Compare_BaselineDescriptor + : public StaticCallInterfaceDescriptor<Compare_BaselineDescriptor> { public: DEFINE_PARAMETERS_NO_CONTEXT(kLeft, kRight, kSlot) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kLeft MachineType::AnyTagged(), // kRight MachineType::UintPtr()) // kSlot - DECLARE_DESCRIPTOR(Compare_BaselineDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(Compare_BaselineDescriptor) + + static constexpr inline auto registers(); }; -class Construct_BaselineDescriptor : public CallInterfaceDescriptor { +class Construct_BaselineDescriptor + : public StaticJSCallInterfaceDescriptor<Construct_BaselineDescriptor> { public: DEFINE_JS_PARAMETERS_NO_CONTEXT(kSlot) DEFINE_JS_PARAMETER_TYPES(MachineType::UintPtr()) // kSlot - DECLARE_JS_COMPATIBLE_DESCRIPTOR(Construct_BaselineDescriptor, - CallInterfaceDescriptor, 1) + DECLARE_JS_COMPATIBLE_DESCRIPTOR(Construct_BaselineDescriptor) }; -class Construct_WithFeedbackDescriptor : public CallInterfaceDescriptor { +class Construct_WithFeedbackDescriptor + : public StaticJSCallInterfaceDescriptor<Construct_WithFeedbackDescriptor> { public: // kSlot is passed in a register, kFeedbackVector on the stack. DEFINE_JS_PARAMETERS(kSlot, kFeedbackVector) DEFINE_JS_PARAMETER_TYPES(MachineType::UintPtr(), // kSlot MachineType::AnyTagged()) // kFeedbackVector - DECLARE_JS_COMPATIBLE_DESCRIPTOR(Construct_WithFeedbackDescriptor, - CallInterfaceDescriptor, 1) + DECLARE_JS_COMPATIBLE_DESCRIPTOR(Construct_WithFeedbackDescriptor) }; -class UnaryOp_WithFeedbackDescriptor : public CallInterfaceDescriptor { +class UnaryOp_WithFeedbackDescriptor + : public StaticCallInterfaceDescriptor<UnaryOp_WithFeedbackDescriptor> { public: DEFINE_PARAMETERS(kValue, kSlot, kFeedbackVector) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kValue MachineType::UintPtr(), // kSlot MachineType::AnyTagged()) // kFeedbackVector - DECLARE_DESCRIPTOR(UnaryOp_WithFeedbackDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(UnaryOp_WithFeedbackDescriptor) }; -class UnaryOp_BaselineDescriptor : public CallInterfaceDescriptor { +class UnaryOp_BaselineDescriptor + : public StaticCallInterfaceDescriptor<UnaryOp_BaselineDescriptor> { public: - DEFINE_PARAMETERS(kValue, kSlot) + DEFINE_PARAMETERS_NO_CONTEXT(kValue, kSlot) DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), // kValue MachineType::UintPtr()) // kSlot - DECLARE_DESCRIPTOR(UnaryOp_BaselineDescriptor, CallInterfaceDescriptor) + DECLARE_DESCRIPTOR(UnaryOp_BaselineDescriptor) }; -#define DEFINE_TFS_BUILTIN_DESCRIPTOR(Name, ...) \ - class Name##Descriptor : public CallInterfaceDescriptor { \ - public: \ - DEFINE_PARAMETERS(__VA_ARGS__) \ - DECLARE_DEFAULT_DESCRIPTOR(Name##Descriptor, CallInterfaceDescriptor) \ +#define DEFINE_TFS_BUILTIN_DESCRIPTOR(Name, ...) \ + class Name##Descriptor \ + : public StaticCallInterfaceDescriptor<Name##Descriptor> { \ + public: \ + DEFINE_PARAMETERS(__VA_ARGS__) \ + DECLARE_DEFAULT_DESCRIPTOR(Name##Descriptor) \ }; BUILTIN_LIST_TFS(DEFINE_TFS_BUILTIN_DESCRIPTOR) #undef DEFINE_TFS_BUILTIN_DESCRIPTOR @@ -1852,11 +1967,12 @@ BUILTIN_LIST_TFS(DEFINE_TFS_BUILTIN_DESCRIPTOR) #undef DECLARE_DESCRIPTOR_WITH_BASE #undef DECLARE_DESCRIPTOR #undef DECLARE_JS_COMPATIBLE_DESCRIPTOR -#undef DEFINE_FLAGS_AND_RESULT_AND_PARAMETERS #undef DEFINE_RESULT_AND_PARAMETERS +#undef DEFINE_PARAMETERS_ENTRY #undef DEFINE_PARAMETERS #undef DEFINE_PARAMETERS_VARARGS #undef DEFINE_PARAMETERS_NO_CONTEXT +#undef DEFINE_RESULT_AND_PARAMETERS_NO_CONTEXT #undef DEFINE_RESULT_AND_PARAMETER_TYPES #undef DEFINE_PARAMETER_TYPES #undef DEFINE_JS_PARAMETERS diff --git a/deps/v8/src/codegen/machine-type.cc b/deps/v8/src/codegen/machine-type.cc index 86fc480ea5..1972c41b24 100644 --- a/deps/v8/src/codegen/machine-type.cc +++ b/deps/v8/src/codegen/machine-type.cc @@ -55,6 +55,8 @@ const char* MachineReprToString(MachineRepresentation rep) { return "kRepCompressedPointer"; case MachineRepresentation::kCompressed: return "kRepCompressed"; + case MachineRepresentation::kMapWord: + return "kRepMapWord"; } UNREACHABLE(); } diff --git a/deps/v8/src/codegen/machine-type.h b/deps/v8/src/codegen/machine-type.h index ac21d3c3e6..7a00608459 100644 --- a/deps/v8/src/codegen/machine-type.h +++ b/deps/v8/src/codegen/machine-type.h @@ -22,6 +22,19 @@ enum class MachineRepresentation : uint8_t { kWord16, kWord32, kWord64, + // (uncompressed) MapWord + // kMapWord is the representation of a map word, i.e. a map in the header + // of a HeapObject. + // If V8_MAP_PACKING is disabled, a map word is just the map itself. Hence + // kMapWord is equivalent to kTaggedPointer -- in fact it will be + // translated to kTaggedPointer during memory lowering. + // If V8_MAP_PACKING is enabled, a map word is a Smi-like encoding of a map + // and some meta data. Memory lowering of kMapWord loads/stores + // produces low-level kTagged loads/stores plus the necessary + // decode/encode operations. + // In either case, the kMapWord representation is not used after memory + // lowering. + kMapWord, kTaggedSigned, // (uncompressed) Smi kTaggedPointer, // (uncompressed) HeapObject kTagged, // (uncompressed) Object (Smi or HeapObject) @@ -102,6 +115,10 @@ class MachineType { return representation() == MachineRepresentation::kNone; } + constexpr bool IsMapWord() const { + return representation() == MachineRepresentation::kMapWord; + } + constexpr bool IsSigned() const { return semantic() == MachineSemantic::kInt32 || semantic() == MachineSemantic::kInt64; @@ -187,6 +204,9 @@ class MachineType { return MachineType(MachineRepresentation::kTaggedPointer, MachineSemantic::kAny); } + constexpr static MachineType MapInHeader() { + return MachineType(MachineRepresentation::kMapWord, MachineSemantic::kAny); + } constexpr static MachineType TaggedSigned() { return MachineType(MachineRepresentation::kTaggedSigned, MachineSemantic::kInt32); @@ -283,7 +303,8 @@ inline bool IsFloatingPoint(MachineRepresentation rep) { inline bool CanBeTaggedPointer(MachineRepresentation rep) { return rep == MachineRepresentation::kTagged || - rep == MachineRepresentation::kTaggedPointer; + rep == MachineRepresentation::kTaggedPointer || + rep == MachineRepresentation::kMapWord; } inline bool CanBeTaggedSigned(MachineRepresentation rep) { @@ -328,16 +349,12 @@ V8_EXPORT_PRIVATE inline constexpr int ElementSizeLog2Of( case MachineRepresentation::kTaggedSigned: case MachineRepresentation::kTaggedPointer: case MachineRepresentation::kTagged: + case MachineRepresentation::kMapWord: case MachineRepresentation::kCompressedPointer: case MachineRepresentation::kCompressed: return kTaggedSizeLog2; default: -#if V8_HAS_CXX14_CONSTEXPR UNREACHABLE(); -#else - // Return something for older compilers. - return -1; -#endif } } diff --git a/deps/v8/src/codegen/macro-assembler.h b/deps/v8/src/codegen/macro-assembler.h index ce3ccbf332..484ec9e4b2 100644 --- a/deps/v8/src/codegen/macro-assembler.h +++ b/deps/v8/src/codegen/macro-assembler.h @@ -10,7 +10,7 @@ #include "src/heap/heap.h" // Helper types to make boolean flag easier to read at call-site. -enum InvokeFlag { CALL_FUNCTION, JUMP_FUNCTION }; +enum class InvokeType { kCall, kJump }; // Flags used for the AllocateInNewSpace functions. enum AllocationFlags { @@ -28,6 +28,10 @@ enum AllocationFlags { PRETENURE = 1 << 3, }; +enum class RememberedSetAction { kOmit, kEmit }; + +enum class SmiCheck { kOmit, kInline }; + // This is the only place allowed to include the platform-specific headers. #define INCLUDED_FROM_MACRO_ASSEMBLER_H #if V8_TARGET_ARCH_IA32 diff --git a/deps/v8/src/codegen/mips/assembler-mips.cc b/deps/v8/src/codegen/mips/assembler-mips.cc index 2ef08ae87c..c254860b14 100644 --- a/deps/v8/src/codegen/mips/assembler-mips.cc +++ b/deps/v8/src/codegen/mips/assembler-mips.cc @@ -261,29 +261,27 @@ static const int kNegOffset = 0x00008000; // operations as post-increment of sp. const Instr kPopInstruction = ADDIU | (sp.code() << kRsShift) | (sp.code() << kRtShift) | - (kPointerSize & kImm16Mask); // NOLINT + (kPointerSize & kImm16Mask); // addiu(sp, sp, -4) part of Push(r) operation as pre-decrement of sp. const Instr kPushInstruction = ADDIU | (sp.code() << kRsShift) | (sp.code() << kRtShift) | - (-kPointerSize & kImm16Mask); // NOLINT + (-kPointerSize & kImm16Mask); // sw(r, MemOperand(sp, 0)) -const Instr kPushRegPattern = - SW | (sp.code() << kRsShift) | (0 & kImm16Mask); // NOLINT +const Instr kPushRegPattern = SW | (sp.code() << kRsShift) | (0 & kImm16Mask); // lw(r, MemOperand(sp, 0)) -const Instr kPopRegPattern = - LW | (sp.code() << kRsShift) | (0 & kImm16Mask); // NOLINT +const Instr kPopRegPattern = LW | (sp.code() << kRsShift) | (0 & kImm16Mask); const Instr kLwRegFpOffsetPattern = - LW | (fp.code() << kRsShift) | (0 & kImm16Mask); // NOLINT + LW | (fp.code() << kRsShift) | (0 & kImm16Mask); const Instr kSwRegFpOffsetPattern = - SW | (fp.code() << kRsShift) | (0 & kImm16Mask); // NOLINT + SW | (fp.code() << kRsShift) | (0 & kImm16Mask); const Instr kLwRegFpNegOffsetPattern = - LW | (fp.code() << kRsShift) | (kNegOffset & kImm16Mask); // NOLINT + LW | (fp.code() << kRsShift) | (kNegOffset & kImm16Mask); const Instr kSwRegFpNegOffsetPattern = - SW | (fp.code() << kRsShift) | (kNegOffset & kImm16Mask); // NOLINT + SW | (fp.code() << kRsShift) | (kNegOffset & kImm16Mask); // A mask for the Rt register for push, pop, lw, sw instructions. const Instr kRtMask = kRtFieldMask; const Instr kLwSwInstrTypeMask = 0xFFE00000; diff --git a/deps/v8/src/codegen/mips/assembler-mips.h b/deps/v8/src/codegen/mips/assembler-mips.h index ccdea03a79..47bdf26d55 100644 --- a/deps/v8/src/codegen/mips/assembler-mips.h +++ b/deps/v8/src/codegen/mips/assembler-mips.h @@ -1907,7 +1907,7 @@ class V8_EXPORT_PRIVATE Assembler : public AssemblerBase { class EnsureSpace { public: - explicit inline EnsureSpace(Assembler* assembler); + explicit V8_INLINE EnsureSpace(Assembler* assembler); }; class V8_EXPORT_PRIVATE V8_NODISCARD UseScratchRegisterScope { diff --git a/deps/v8/src/codegen/mips/interface-descriptors-mips-inl.h b/deps/v8/src/codegen/mips/interface-descriptors-mips-inl.h new file mode 100644 index 0000000000..edea1b3844 --- /dev/null +++ b/deps/v8/src/codegen/mips/interface-descriptors-mips-inl.h @@ -0,0 +1,258 @@ +// Copyright 2012 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef V8_CODEGEN_MIPS_INTERFACE_DESCRIPTORS_MIPS_INL_H_ +#define V8_CODEGEN_MIPS_INTERFACE_DESCRIPTORS_MIPS_INL_H_ + +#if V8_TARGET_ARCH_MIPS + +#include "src/codegen/interface-descriptors.h" +#include "src/execution/frames.h" + +namespace v8 { +namespace internal { + +constexpr auto CallInterfaceDescriptor::DefaultRegisterArray() { + auto registers = RegisterArray(a0, a1, a2, a3, t0); + STATIC_ASSERT(registers.size() == kMaxBuiltinRegisterParams); + return registers; +} + +// static +constexpr auto RecordWriteDescriptor::registers() { + return RegisterArray(a0, a1, a2, a3, kReturnRegister0); +} + +// static +constexpr auto DynamicCheckMapsDescriptor::registers() { + return RegisterArray(kReturnRegister0, a0, a1, a2, cp); +} + +// static +constexpr auto EphemeronKeyBarrierDescriptor::registers() { + return RegisterArray(a0, a1, a2, a3, kReturnRegister0); +} + +// static +constexpr Register LoadDescriptor::ReceiverRegister() { return a1; } +// static +constexpr Register LoadDescriptor::NameRegister() { return a2; } +// static +constexpr Register LoadDescriptor::SlotRegister() { return a0; } + +// static +constexpr Register LoadWithVectorDescriptor::VectorRegister() { return a3; } + +// static +constexpr Register +LoadWithReceiverAndVectorDescriptor::LookupStartObjectRegister() { + return t0; +} + +// static +constexpr Register StoreDescriptor::ReceiverRegister() { return a1; } +// static +constexpr Register StoreDescriptor::NameRegister() { return a2; } +// static +constexpr Register StoreDescriptor::ValueRegister() { return a0; } +// static +constexpr Register StoreDescriptor::SlotRegister() { return t0; } + +// static +constexpr Register StoreWithVectorDescriptor::VectorRegister() { return a3; } + +// static +constexpr Register StoreTransitionDescriptor::MapRegister() { return t1; } + +// static +constexpr Register ApiGetterDescriptor::HolderRegister() { return a0; } +// static +constexpr Register ApiGetterDescriptor::CallbackRegister() { return a3; } + +// static +constexpr Register GrowArrayElementsDescriptor::ObjectRegister() { return a0; } +// static +constexpr Register GrowArrayElementsDescriptor::KeyRegister() { return a3; } + +// static +constexpr Register BaselineLeaveFrameDescriptor::ParamsSizeRegister() { + // TODO(v8:11421): Implement on this platform. + return a3; +} + +// static +constexpr Register BaselineLeaveFrameDescriptor::WeightRegister() { + // TODO(v8:11421): Implement on this platform. + return t0; +} + +// static +constexpr Register TypeConversionDescriptor::ArgumentRegister() { return a0; } + +// static +constexpr auto TypeofDescriptor::registers() { return RegisterArray(a3); } + +// static +constexpr auto CallTrampolineDescriptor::registers() { + // a1: target + // a0: number of arguments + return RegisterArray(a1, a0); +} + +// static +constexpr auto CallVarargsDescriptor::registers() { + // a0 : number of arguments (on the stack, not including receiver) + // a1 : the target to call + // t0 : arguments list length (untagged) + // a2 : arguments list (FixedArray) + return RegisterArray(a1, a0, t0, a2); +} + +// static +constexpr auto CallForwardVarargsDescriptor::registers() { + // a1: the target to call + // a0: number of arguments + // a2: start index (to support rest parameters) + return RegisterArray(a1, a0, a2); +} + +// static +constexpr auto CallFunctionTemplateDescriptor::registers() { + // a1 : function template info + // a0 : number of arguments (on the stack, not including receiver) + return RegisterArray(a1, a0); +} + +// static +constexpr auto CallWithSpreadDescriptor::registers() { + // a0 : number of arguments (on the stack, not including receiver) + // a1 : the target to call + // a2 : the object to spread + return RegisterArray(a1, a0, a2); +} + +// static +constexpr auto CallWithArrayLikeDescriptor::registers() { + // a1 : the target to call + // a2 : the arguments list + return RegisterArray(a1, a2); +} + +// static +constexpr auto ConstructVarargsDescriptor::registers() { + // a0 : number of arguments (on the stack, not including receiver) + // a1 : the target to call + // a3 : the new target + // t0 : arguments list length (untagged) + // a2 : arguments list (FixedArray) + return RegisterArray(a1, a3, a0, t0, a2); +} + +// static +constexpr auto ConstructForwardVarargsDescriptor::registers() { + // a1: the target to call + // a3: new target + // a0: number of arguments + // a2: start index (to support rest parameters) + return RegisterArray(a1, a3, a0, a2); +} + +// static +constexpr auto ConstructWithSpreadDescriptor::registers() { + // a0 : number of arguments (on the stack, not including receiver) + // a1 : the target to call + // a3 : the new target + // a2 : the object to spread + return RegisterArray(a1, a3, a0, a2); +} + +// static +constexpr auto ConstructWithArrayLikeDescriptor::registers() { + // a1 : the target to call + // a3 : the new target + // a2 : the arguments list + return RegisterArray(a1, a3, a2); +} + +// static +constexpr auto ConstructStubDescriptor::registers() { + // a1: target + // a3: new target + // a0: number of arguments + // a2: allocation site or undefined + return RegisterArray(a1, a3, a0, a2); +} + +// static +constexpr auto AbortDescriptor::registers() { return RegisterArray(a0); } + +// static +constexpr auto CompareDescriptor::registers() { return RegisterArray(a1, a0); } + +// static +constexpr auto Compare_BaselineDescriptor::registers() { + return RegisterArray(a1, a0, a2); +} + +// static +constexpr auto BinaryOpDescriptor::registers() { return RegisterArray(a1, a0); } + +// static +constexpr auto BinaryOp_BaselineDescriptor::registers() { + // TODO(v8:11421): Implement on this platform. + return RegisterArray(a1, a0, a2); +} + +// static +constexpr auto ApiCallbackDescriptor::registers() { + // a1 : kApiFunctionAddress + // a2 : kArgc + // a3 : kCallData + // a0 : kHolder + return RegisterArray(a1, a2, a3, a0); +} + +// static +constexpr auto InterpreterDispatchDescriptor::registers() { + return RegisterArray( + kInterpreterAccumulatorRegister, kInterpreterBytecodeOffsetRegister, + kInterpreterBytecodeArrayRegister, kInterpreterDispatchTableRegister); +} + +// static +constexpr auto InterpreterPushArgsThenCallDescriptor::registers() { + // a0 : argument count (not including receiver + // a2 : address of first argument + // a1 : the target callable to be call + return RegisterArray(a0, a2, a1); +} + +// static +constexpr auto InterpreterPushArgsThenConstructDescriptor::registers() { + // a0 : argument count (not including receiver) + // t4 : address of the first argument + // a1 : constructor to call + // a3 : new target + // a2 : allocation site feedback if available, undefined otherwise + return RegisterArray(a0, t4, a1, a3, a2); +} + +// static +constexpr auto ResumeGeneratorDescriptor::registers() { + // v0 : the value to pass to the generator + // a1 : the JSGeneratorObject to resume + return RegisterArray(v0, a1); +} + +// static +constexpr auto RunMicrotasksEntryDescriptor::registers() { + return RegisterArray(a0, a1); +} + +} // namespace internal +} // namespace v8 + +#endif // V8_TARGET_ARCH_MIPS + +#endif // V8_CODEGEN_MIPS_INTERFACE_DESCRIPTORS_MIPS_INL_H_ diff --git a/deps/v8/src/codegen/mips/interface-descriptors-mips.cc b/deps/v8/src/codegen/mips/interface-descriptors-mips.cc deleted file mode 100644 index f41a0e14ca..0000000000 --- a/deps/v8/src/codegen/mips/interface-descriptors-mips.cc +++ /dev/null @@ -1,332 +0,0 @@ -// Copyright 2012 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#if V8_TARGET_ARCH_MIPS - -#include "src/codegen/interface-descriptors.h" - -#include "src/execution/frames.h" - -namespace v8 { -namespace internal { - -const Register CallInterfaceDescriptor::ContextRegister() { return cp; } - -void CallInterfaceDescriptor::DefaultInitializePlatformSpecific( - CallInterfaceDescriptorData* data, int register_parameter_count) { - const Register default_stub_registers[] = {a0, a1, a2, a3, t0}; - CHECK_LE(static_cast<size_t>(register_parameter_count), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(register_parameter_count, - default_stub_registers); -} - -// On MIPS it is not allowed to use odd numbered floating point registers -// (e.g. f1, f3, etc.) for parameters. This can happen if we use -// DefaultInitializePlatformSpecific to assign float registers for parameters. -// E.g if fourth parameter goes to float register, f7 would be assigned for -// parameter (a3 casted to int is 7). -bool CallInterfaceDescriptor::IsValidFloatParameterRegister(Register reg) { - return reg.code() % 2 == 0; -} - -void WasmI32AtomicWait32Descriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - const Register default_stub_registers[] = {a0, a1, a2, a3}; - CHECK_EQ(static_cast<size_t>(kParameterCount), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(kParameterCount, default_stub_registers); -} - -void WasmI64AtomicWait32Descriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - const Register default_stub_registers[] = {a0, a1, a2, a3, t0}; - CHECK_EQ(static_cast<size_t>(kParameterCount - kStackArgumentsCount), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(kParameterCount - kStackArgumentsCount, - default_stub_registers); -} - -void RecordWriteDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - const Register default_stub_registers[] = {a0, a1, a2, a3, kReturnRegister0}; - - data->RestrictAllocatableRegisters(default_stub_registers, - arraysize(default_stub_registers)); - - CHECK_LE(static_cast<size_t>(kParameterCount), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(kParameterCount, default_stub_registers); -} - -void DynamicCheckMapsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register default_stub_registers[] = {kReturnRegister0, a0, a1, a2, cp}; - - data->RestrictAllocatableRegisters(default_stub_registers, - arraysize(default_stub_registers)); - - CHECK_LE(static_cast<size_t>(kParameterCount), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(kParameterCount, default_stub_registers); -} - -void EphemeronKeyBarrierDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - const Register default_stub_registers[] = {a0, a1, a2, a3, kReturnRegister0}; - - data->RestrictAllocatableRegisters(default_stub_registers, - arraysize(default_stub_registers)); - - CHECK_LE(static_cast<size_t>(kParameterCount), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(kParameterCount, default_stub_registers); -} - -const Register LoadDescriptor::ReceiverRegister() { return a1; } -const Register LoadDescriptor::NameRegister() { return a2; } -const Register LoadDescriptor::SlotRegister() { return a0; } - -const Register LoadWithVectorDescriptor::VectorRegister() { return a3; } - -const Register -LoadWithReceiverAndVectorDescriptor::LookupStartObjectRegister() { - return t0; -} - -const Register StoreDescriptor::ReceiverRegister() { return a1; } -const Register StoreDescriptor::NameRegister() { return a2; } -const Register StoreDescriptor::ValueRegister() { return a0; } -const Register StoreDescriptor::SlotRegister() { return t0; } - -const Register StoreWithVectorDescriptor::VectorRegister() { return a3; } - -const Register StoreTransitionDescriptor::SlotRegister() { return t0; } -const Register StoreTransitionDescriptor::VectorRegister() { return a3; } -const Register StoreTransitionDescriptor::MapRegister() { return t1; } - -const Register ApiGetterDescriptor::HolderRegister() { return a0; } -const Register ApiGetterDescriptor::CallbackRegister() { return a3; } - -const Register GrowArrayElementsDescriptor::ObjectRegister() { return a0; } -const Register GrowArrayElementsDescriptor::KeyRegister() { return a3; } - -const Register BaselineLeaveFrameDescriptor::ParamsSizeRegister() { - // TODO(v8:11421): Implement on this platform. - UNREACHABLE(); -} -const Register BaselineLeaveFrameDescriptor::WeightRegister() { - // TODO(v8:11421): Implement on this platform. - UNREACHABLE(); -} - -// static -const Register TypeConversionDescriptor::ArgumentRegister() { return a0; } - -void TypeofDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {a3}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallTrampolineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // a1: target - // a0: number of arguments - Register registers[] = {a1, a0}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // a0 : number of arguments (on the stack, not including receiver) - // a1 : the target to call - // t0 : arguments list length (untagged) - // a2 : arguments list (FixedArray) - Register registers[] = {a1, a0, t0, a2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallForwardVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // a1: the target to call - // a0: number of arguments - // a2: start index (to support rest parameters) - Register registers[] = {a1, a0, a2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallFunctionTemplateDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // a1 : function template info - // a0 : number of arguments (on the stack, not including receiver) - Register registers[] = {a1, a0}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallWithSpreadDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // a0 : number of arguments (on the stack, not including receiver) - // a1 : the target to call - // a2 : the object to spread - Register registers[] = {a1, a0, a2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallWithArrayLikeDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // a1 : the target to call - // a2 : the arguments list - Register registers[] = {a1, a2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // a0 : number of arguments (on the stack, not including receiver) - // a1 : the target to call - // a3 : the new target - // t0 : arguments list length (untagged) - // a2 : arguments list (FixedArray) - Register registers[] = {a1, a3, a0, t0, a2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructForwardVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // a1: the target to call - // a3: new target - // a0: number of arguments - // a2: start index (to support rest parameters) - Register registers[] = {a1, a3, a0, a2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructWithSpreadDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // a0 : number of arguments (on the stack, not including receiver) - // a1 : the target to call - // a3 : the new target - // a2 : the object to spread - Register registers[] = {a1, a3, a0, a2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructWithArrayLikeDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // a1 : the target to call - // a3 : the new target - // a2 : the arguments list - Register registers[] = {a1, a3, a2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructStubDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // a1: target - // a3: new target - // a0: number of arguments - // a2: allocation site or undefined - Register registers[] = {a1, a3, a0, a2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void AbortDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {a0}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CompareDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {a1, a0}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void Compare_BaselineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // TODO(v8:11421): Implement on this platform. - InitializePlatformUnimplemented(data, kParameterCount); -} - -void BinaryOpDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {a1, a0}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void BinaryOp_BaselineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // TODO(v8:11421): Implement on this platform. - InitializePlatformUnimplemented(data, kParameterCount); -} - -void ApiCallbackDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - a1, // kApiFunctionAddress - a2, // kArgc - a3, // kCallData - a0, // kHolder - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void InterpreterDispatchDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - kInterpreterAccumulatorRegister, kInterpreterBytecodeOffsetRegister, - kInterpreterBytecodeArrayRegister, kInterpreterDispatchTableRegister}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void InterpreterPushArgsThenCallDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - a0, // argument count (not including receiver) - a2, // address of first argument - a1 // the target callable to be call - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void InterpreterPushArgsThenConstructDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - a0, // argument count (not including receiver) - t4, // address of the first argument - a1, // constructor to call - a3, // new target - a2, // allocation site feedback if available, undefined otherwise - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ResumeGeneratorDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - v0, // the value to pass to the generator - a1 // the JSGeneratorObject to resume - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void FrameDropperTrampolineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - a1, // loaded new FP - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void RunMicrotasksEntryDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {a0, a1}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -} // namespace internal -} // namespace v8 - -#endif // V8_TARGET_ARCH_MIPS diff --git a/deps/v8/src/codegen/mips/macro-assembler-mips.cc b/deps/v8/src/codegen/mips/macro-assembler-mips.cc index 8bbdbca662..d48b441c7b 100644 --- a/deps/v8/src/codegen/mips/macro-assembler-mips.cc +++ b/deps/v8/src/codegen/mips/macro-assembler-mips.cc @@ -12,6 +12,7 @@ #include "src/codegen/callable.h" #include "src/codegen/code-factory.h" #include "src/codegen/external-reference-table.h" +#include "src/codegen/interface-descriptors-inl.h" #include "src/codegen/macro-assembler.h" #include "src/codegen/register-configuration.h" #include "src/debug/debug.h" @@ -64,7 +65,7 @@ int TurboAssembler::RequiredStackSizeForCallerSaved(SaveFPRegsMode fp_mode, RegList list = kJSCallerSaved & ~exclusions; bytes += NumRegs(list) * kPointerSize; - if (fp_mode == kSaveFPRegs) { + if (fp_mode == SaveFPRegsMode::kSave) { bytes += NumRegs(kCallerSavedFPU) * kDoubleSize; } @@ -89,7 +90,7 @@ int TurboAssembler::PushCallerSaved(SaveFPRegsMode fp_mode, Register exclusion1, MultiPush(list); bytes += NumRegs(list) * kPointerSize; - if (fp_mode == kSaveFPRegs) { + if (fp_mode == SaveFPRegsMode::kSave) { MultiPushFPU(kCallerSavedFPU); bytes += NumRegs(kCallerSavedFPU) * kDoubleSize; } @@ -100,7 +101,7 @@ int TurboAssembler::PushCallerSaved(SaveFPRegsMode fp_mode, Register exclusion1, int TurboAssembler::PopCallerSaved(SaveFPRegsMode fp_mode, Register exclusion1, Register exclusion2, Register exclusion3) { int bytes = 0; - if (fp_mode == kSaveFPRegs) { + if (fp_mode == SaveFPRegsMode::kSave) { MultiPopFPU(kCallerSavedFPU); bytes += NumRegs(kCallerSavedFPU) * kDoubleSize; } @@ -179,7 +180,7 @@ void MacroAssembler::RecordWriteField(Register object, int offset, Label done; // Skip barrier if writing a smi. - if (smi_check == INLINE_SMI_CHECK) { + if (smi_check == SmiCheck::kInline) { JumpIfSmi(value, &done); } @@ -188,7 +189,7 @@ void MacroAssembler::RecordWriteField(Register object, int offset, DCHECK(IsAligned(offset, kPointerSize)); Addu(dst, object, Operand(offset - kHeapObjectTag)); - if (emit_debug_code()) { + if (FLAG_debug_code) { BlockTrampolinePoolScope block_trampoline_pool(this); Label ok; And(t8, dst, Operand(kPointerSize - 1)); @@ -198,13 +199,13 @@ void MacroAssembler::RecordWriteField(Register object, int offset, } RecordWrite(object, dst, value, ra_status, save_fp, remembered_set_action, - OMIT_SMI_CHECK); + SmiCheck::kOmit); bind(&done); // Clobber clobbered input registers when running with the debug-code flag // turned on to provoke errors. - if (emit_debug_code()) { + if (FLAG_debug_code) { li(value, Operand(bit_cast<int32_t>(kZapValue + 4))); li(dst, Operand(bit_cast<int32_t>(kZapValue + 8))); } @@ -336,7 +337,7 @@ void MacroAssembler::RecordWrite(Register object, Register address, DCHECK(!AreAliased(object, address, value, t8)); DCHECK(!AreAliased(object, address, value, t9)); - if (emit_debug_code()) { + if (FLAG_debug_code) { UseScratchRegisterScope temps(this); Register scratch = temps.Acquire(); lw(scratch, MemOperand(address)); @@ -344,7 +345,7 @@ void MacroAssembler::RecordWrite(Register object, Register address, Operand(value)); } - if ((remembered_set_action == OMIT_REMEMBERED_SET && + if ((remembered_set_action == RememberedSetAction::kOmit && !FLAG_incremental_marking) || FLAG_disable_write_barriers) { return; @@ -354,7 +355,7 @@ void MacroAssembler::RecordWrite(Register object, Register address, // catch stores of smis and stores into the young generation. Label done; - if (smi_check == INLINE_SMI_CHECK) { + if (smi_check == SmiCheck::kInline) { DCHECK_EQ(0, kSmiTag); JumpIfSmi(value, &done); } @@ -379,7 +380,7 @@ void MacroAssembler::RecordWrite(Register object, Register address, // Clobber clobbered registers when running with the debug-code flag // turned on to provoke errors. - if (emit_debug_code()) { + if (FLAG_debug_code) { li(address, Operand(bit_cast<int32_t>(kZapValue + 12))); li(value, Operand(bit_cast<int32_t>(kZapValue + 16))); } @@ -4176,14 +4177,6 @@ void TurboAssembler::PushArray(Register array, Register size, Register scratch, } } -void MacroAssembler::MaybeDropFrames() { - // Check whether we need to drop frames to restart a function on the stack. - li(a1, ExternalReference::debug_restart_fp_address(isolate())); - lw(a1, MemOperand(a1)); - Jump(BUILTIN_CODE(isolate(), FrameDropperTrampoline), RelocInfo::CODE_TARGET, - ne, a1, Operand(zero_reg)); -} - // --------------------------------------------------------------------------- // Exception handling. @@ -4373,7 +4366,7 @@ void MacroAssembler::StackOverflowCheck(Register num_args, Register scratch1, void MacroAssembler::InvokePrologue(Register expected_parameter_count, Register actual_parameter_count, - Label* done, InvokeFlag flag) { + Label* done, InvokeType type) { Label regular_invoke; // a0: actual arguments count @@ -4484,9 +4477,9 @@ void MacroAssembler::CheckDebugHook(Register fun, Register new_target, void MacroAssembler::InvokeFunctionCode(Register function, Register new_target, Register expected_parameter_count, Register actual_parameter_count, - InvokeFlag flag) { + InvokeType type) { // You can't call a function without a valid frame. - DCHECK_IMPLIES(flag == CALL_FUNCTION, has_frame()); + DCHECK_IMPLIES(type == InvokeType::kCall, has_frame()); DCHECK_EQ(function, a1); DCHECK_IMPLIES(new_target.is_valid(), new_target == a3); @@ -4500,19 +4493,21 @@ void MacroAssembler::InvokeFunctionCode(Register function, Register new_target, } Label done; - InvokePrologue(expected_parameter_count, actual_parameter_count, &done, flag); + InvokePrologue(expected_parameter_count, actual_parameter_count, &done, type); // We call indirectly through the code field in the function to // allow recompilation to take effect without changing any of the // call sites. Register code = kJavaScriptCallCodeStartRegister; lw(code, FieldMemOperand(function, JSFunction::kCodeOffset)); - if (flag == CALL_FUNCTION) { - Addu(code, code, Code::kHeaderSize - kHeapObjectTag); - Call(code); - } else { - DCHECK(flag == JUMP_FUNCTION); - Addu(code, code, Code::kHeaderSize - kHeapObjectTag); - Jump(code); + switch (type) { + case InvokeType::kCall: + Addu(code, code, Code::kHeaderSize - kHeapObjectTag); + Call(code); + break; + case InvokeType::kJump: + Addu(code, code, Code::kHeaderSize - kHeapObjectTag); + Jump(code); + break; } // Continue here if InvokePrologue does handle the invocation due to @@ -4522,9 +4517,9 @@ void MacroAssembler::InvokeFunctionCode(Register function, Register new_target, void MacroAssembler::InvokeFunctionWithNewTarget( Register function, Register new_target, Register actual_parameter_count, - InvokeFlag flag) { + InvokeType type) { // You can't call a function without a valid frame. - DCHECK_IMPLIES(flag == CALL_FUNCTION, has_frame()); + DCHECK_IMPLIES(type == InvokeType::kCall, has_frame()); // Contract with called JS functions requires that function is passed in a1. DCHECK_EQ(function, a1); @@ -4538,15 +4533,15 @@ void MacroAssembler::InvokeFunctionWithNewTarget( SharedFunctionInfo::kFormalParameterCountOffset)); InvokeFunctionCode(function, new_target, expected_reg, actual_parameter_count, - flag); + type); } void MacroAssembler::InvokeFunction(Register function, Register expected_parameter_count, Register actual_parameter_count, - InvokeFlag flag) { + InvokeType type) { // You can't call a function without a valid frame. - DCHECK_IMPLIES(flag == CALL_FUNCTION, has_frame()); + DCHECK_IMPLIES(type == InvokeType::kCall, has_frame()); // Contract with called JS functions requires that function is passed in a1. DCHECK_EQ(function, a1); @@ -4555,7 +4550,7 @@ void MacroAssembler::InvokeFunction(Register function, lw(cp, FieldMemOperand(a1, JSFunction::kContextOffset)); InvokeFunctionCode(a1, no_reg, expected_parameter_count, - actual_parameter_count, flag); + actual_parameter_count, type); } // --------------------------------------------------------------------------- @@ -4699,8 +4694,8 @@ void MacroAssembler::JumpToExternalReference(const ExternalReference& builtin, BranchDelaySlot bd, bool builtin_exit_frame) { PrepareCEntryFunction(builtin); - Handle<Code> code = CodeFactory::CEntry(isolate(), 1, kDontSaveFPRegs, - kArgvOnStack, builtin_exit_frame); + Handle<Code> code = CodeFactory::CEntry(isolate(), 1, SaveFPRegsMode::kIgnore, + ArgvMode::kStack, builtin_exit_frame); Jump(code, RelocInfo::CODE_TARGET, al, zero_reg, Operand(zero_reg), bd); } @@ -4746,7 +4741,7 @@ void TurboAssembler::DebugBreak() { stop(); } void TurboAssembler::Assert(Condition cc, AbortReason reason, Register rs, Operand rt) { - if (emit_debug_code()) Check(cc, reason, rs, rt); + if (FLAG_debug_code) Check(cc, reason, rs, rt); } void TurboAssembler::Check(Condition cc, AbortReason reason, Register rs, @@ -4761,11 +4756,11 @@ void TurboAssembler::Check(Condition cc, AbortReason reason, Register rs, void TurboAssembler::Abort(AbortReason reason) { Label abort_start; bind(&abort_start); -#ifdef DEBUG - const char* msg = GetAbortReason(reason); - RecordComment("Abort message: "); - RecordComment(msg); -#endif + if (FLAG_code_comments) { + const char* msg = GetAbortReason(reason); + RecordComment("Abort message: "); + RecordComment(msg); + } // Avoid emitting call to builtin if requested. if (trap_on_abort()) { @@ -4885,7 +4880,7 @@ void MacroAssembler::EnterExitFrame(bool save_doubles, int stack_space, // Set up new frame pointer. addiu(fp, sp, ExitFrameConstants::kFixedFrameSizeFromFp); - if (emit_debug_code()) { + if (FLAG_debug_code) { sw(zero_reg, MemOperand(fp, ExitFrameConstants::kSPOffset)); } @@ -4999,7 +4994,7 @@ int TurboAssembler::ActivationFrameAlignment() { } void MacroAssembler::AssertStackIsAligned() { - if (emit_debug_code()) { + if (FLAG_debug_code) { const int frame_alignment = ActivationFrameAlignment(); const int frame_alignment_mask = frame_alignment - 1; @@ -5032,7 +5027,7 @@ void MacroAssembler::JumpIfNotSmi(Register value, Label* not_smi_label, } void MacroAssembler::AssertNotSmi(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { STATIC_ASSERT(kSmiTag == 0); UseScratchRegisterScope temps(this); Register scratch = temps.Acquire(); @@ -5042,7 +5037,7 @@ void MacroAssembler::AssertNotSmi(Register object) { } void MacroAssembler::AssertSmi(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { STATIC_ASSERT(kSmiTag == 0); UseScratchRegisterScope temps(this); Register scratch = temps.Acquire(); @@ -5052,7 +5047,7 @@ void MacroAssembler::AssertSmi(Register object) { } void MacroAssembler::AssertConstructor(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { BlockTrampolinePoolScope block_trampoline_pool(this); STATIC_ASSERT(kSmiTag == 0); SmiTst(object, t8); @@ -5067,7 +5062,7 @@ void MacroAssembler::AssertConstructor(Register object) { } void MacroAssembler::AssertFunction(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { BlockTrampolinePoolScope block_trampoline_pool(this); STATIC_ASSERT(kSmiTag == 0); SmiTst(object, t8); @@ -5083,7 +5078,7 @@ void MacroAssembler::AssertFunction(Register object) { } void MacroAssembler::AssertBoundFunction(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { BlockTrampolinePoolScope block_trampoline_pool(this); STATIC_ASSERT(kSmiTag == 0); SmiTst(object, t8); @@ -5096,7 +5091,7 @@ void MacroAssembler::AssertBoundFunction(Register object) { } void MacroAssembler::AssertGeneratorObject(Register object) { - if (!emit_debug_code()) return; + if (!FLAG_debug_code) return; BlockTrampolinePoolScope block_trampoline_pool(this); STATIC_ASSERT(kSmiTag == 0); SmiTst(object, t8); @@ -5123,7 +5118,7 @@ void MacroAssembler::AssertGeneratorObject(Register object) { void MacroAssembler::AssertUndefinedOrAllocationSite(Register object, Register scratch) { - if (emit_debug_code()) { + if (FLAG_debug_code) { Label done_checking; AssertNotSmi(object); LoadRoot(scratch, RootIndex::kUndefinedValue); @@ -5416,7 +5411,7 @@ void TurboAssembler::CallCFunctionHelper(Register function_base, // PrepareCallCFunction. The C function must be called via t9, for mips ABI. #if V8_HOST_ARCH_MIPS - if (emit_debug_code()) { + if (FLAG_debug_code) { int frame_alignment = base::OS::ActivationFrameAlignment(); int frame_alignment_mask = frame_alignment - 1; if (frame_alignment > kPointerSize) { diff --git a/deps/v8/src/codegen/mips/macro-assembler-mips.h b/deps/v8/src/codegen/mips/macro-assembler-mips.h index 8d54e0b737..8a82eea6fa 100644 --- a/deps/v8/src/codegen/mips/macro-assembler-mips.h +++ b/deps/v8/src/codegen/mips/macro-assembler-mips.h @@ -45,8 +45,6 @@ enum LiFlags { CONSTANT_SIZE = 1 }; -enum RememberedSetAction { EMIT_REMEMBERED_SET, OMIT_REMEMBERED_SET }; -enum SmiCheck { INLINE_SMI_CHECK, OMIT_SMI_CHECK }; enum RAStatus { kRAHasNotBeenSaved, kRAHasBeenSaved }; Register GetRegisterThatIsNotOneOf(Register reg1, Register reg2 = no_reg, @@ -974,8 +972,8 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { void RecordWriteField( Register object, int offset, Register value, Register scratch, RAStatus ra_status, SaveFPRegsMode save_fp, - RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, - SmiCheck smi_check = INLINE_SMI_CHECK); + RememberedSetAction remembered_set_action = RememberedSetAction::kEmit, + SmiCheck smi_check = SmiCheck::kInline); // For a given |object| notify the garbage collector that the slot |address| // has been written. |value| is the object being stored. The value and @@ -983,8 +981,8 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { void RecordWrite( Register object, Register address, Register value, RAStatus ra_status, SaveFPRegsMode save_fp, - RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, - SmiCheck smi_check = INLINE_SMI_CHECK); + RememberedSetAction remembered_set_action = RememberedSetAction::kEmit, + SmiCheck smi_check = SmiCheck::kInline); void Pref(int32_t hint, const MemOperand& rs); @@ -1016,7 +1014,7 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { // Invoke the JavaScript function code by either calling or jumping. void InvokeFunctionCode(Register function, Register new_target, Register expected_parameter_count, - Register actual_parameter_count, InvokeFlag flag); + Register actual_parameter_count, InvokeType type); // On function call, call into the debugger if necessary. void CheckDebugHook(Register fun, Register new_target, @@ -1027,13 +1025,10 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { // current context to the context in the function before invoking. void InvokeFunctionWithNewTarget(Register function, Register new_target, Register actual_parameter_count, - InvokeFlag flag); + InvokeType type); void InvokeFunction(Register function, Register expected_parameter_count, - Register actual_parameter_count, InvokeFlag flag); - - // Frame restart support. - void MaybeDropFrames(); + Register actual_parameter_count, InvokeType type); // Exception handling. @@ -1057,18 +1052,18 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { // Call a runtime routine. void CallRuntime(const Runtime::Function* f, int num_arguments, - SaveFPRegsMode save_doubles = kDontSaveFPRegs); + SaveFPRegsMode save_doubles = SaveFPRegsMode::kIgnore); // Convenience function: Same as above, but takes the fid instead. void CallRuntime(Runtime::FunctionId fid, - SaveFPRegsMode save_doubles = kDontSaveFPRegs) { + SaveFPRegsMode save_doubles = SaveFPRegsMode::kIgnore) { const Runtime::Function* function = Runtime::FunctionForId(fid); CallRuntime(function, function->nargs, save_doubles); } // Convenience function: Same as above, but takes the fid instead. void CallRuntime(Runtime::FunctionId id, int num_arguments, - SaveFPRegsMode save_doubles = kDontSaveFPRegs) { + SaveFPRegsMode save_doubles = SaveFPRegsMode::kIgnore) { CallRuntime(Runtime::FunctionForId(id), num_arguments, save_doubles); } @@ -1155,7 +1150,7 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { // Helper functions for generating invokes. void InvokePrologue(Register expected_parameter_count, Register actual_parameter_count, Label* done, - InvokeFlag flag); + InvokeType type); // Compute memory operands for safepoint stack slots. static int SafepointRegisterStackIndex(int reg_code); diff --git a/deps/v8/src/codegen/mips64/assembler-mips64.cc b/deps/v8/src/codegen/mips64/assembler-mips64.cc index 7f7ebd2c73..70a02ddb6f 100644 --- a/deps/v8/src/codegen/mips64/assembler-mips64.cc +++ b/deps/v8/src/codegen/mips64/assembler-mips64.cc @@ -235,29 +235,27 @@ void Assembler::AllocateAndInstallRequestedHeapObjects(Isolate* isolate) { // operations as post-increment of sp. const Instr kPopInstruction = DADDIU | (sp.code() << kRsShift) | (sp.code() << kRtShift) | - (kPointerSize & kImm16Mask); // NOLINT + (kPointerSize & kImm16Mask); // daddiu(sp, sp, -8) part of Push(r) operation as pre-decrement of sp. const Instr kPushInstruction = DADDIU | (sp.code() << kRsShift) | (sp.code() << kRtShift) | - (-kPointerSize & kImm16Mask); // NOLINT + (-kPointerSize & kImm16Mask); // Sd(r, MemOperand(sp, 0)) -const Instr kPushRegPattern = - SD | (sp.code() << kRsShift) | (0 & kImm16Mask); // NOLINT +const Instr kPushRegPattern = SD | (sp.code() << kRsShift) | (0 & kImm16Mask); // Ld(r, MemOperand(sp, 0)) -const Instr kPopRegPattern = - LD | (sp.code() << kRsShift) | (0 & kImm16Mask); // NOLINT +const Instr kPopRegPattern = LD | (sp.code() << kRsShift) | (0 & kImm16Mask); const Instr kLwRegFpOffsetPattern = - LW | (fp.code() << kRsShift) | (0 & kImm16Mask); // NOLINT + LW | (fp.code() << kRsShift) | (0 & kImm16Mask); const Instr kSwRegFpOffsetPattern = - SW | (fp.code() << kRsShift) | (0 & kImm16Mask); // NOLINT + SW | (fp.code() << kRsShift) | (0 & kImm16Mask); const Instr kLwRegFpNegOffsetPattern = - LW | (fp.code() << kRsShift) | (kNegOffset & kImm16Mask); // NOLINT + LW | (fp.code() << kRsShift) | (kNegOffset & kImm16Mask); const Instr kSwRegFpNegOffsetPattern = - SW | (fp.code() << kRsShift) | (kNegOffset & kImm16Mask); // NOLINT + SW | (fp.code() << kRsShift) | (kNegOffset & kImm16Mask); // A mask for the Rt register for push, pop, lw, sw instructions. const Instr kRtMask = kRtFieldMask; const Instr kLwSwInstrTypeMask = 0xFFE00000; diff --git a/deps/v8/src/codegen/mips64/interface-descriptors-mips64-inl.h b/deps/v8/src/codegen/mips64/interface-descriptors-mips64-inl.h new file mode 100644 index 0000000000..62e32776ef --- /dev/null +++ b/deps/v8/src/codegen/mips64/interface-descriptors-mips64-inl.h @@ -0,0 +1,258 @@ +// Copyright 2012 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef V8_CODEGEN_MIPS64_INTERFACE_DESCRIPTORS_MIPS64_INL_H_ +#define V8_CODEGEN_MIPS64_INTERFACE_DESCRIPTORS_MIPS64_INL_H_ + +#if V8_TARGET_ARCH_MIPS64 + +#include "src/codegen/interface-descriptors.h" +#include "src/execution/frames.h" + +namespace v8 { +namespace internal { + +constexpr auto CallInterfaceDescriptor::DefaultRegisterArray() { + auto registers = RegisterArray(a0, a1, a2, a3, a4); + STATIC_ASSERT(registers.size() == kMaxBuiltinRegisterParams); + return registers; +} + +// static +constexpr auto RecordWriteDescriptor::registers() { + return RegisterArray(a0, a1, a2, a3, kReturnRegister0); +} + +// static +constexpr auto DynamicCheckMapsDescriptor::registers() { + return RegisterArray(kReturnRegister0, a0, a1, a2, cp); +} + +// static +constexpr auto EphemeronKeyBarrierDescriptor::registers() { + return RegisterArray(a0, a1, a2, a3, kReturnRegister0); +} + +// static +constexpr Register LoadDescriptor::ReceiverRegister() { return a1; } +// static +constexpr Register LoadDescriptor::NameRegister() { return a2; } +// static +constexpr Register LoadDescriptor::SlotRegister() { return a0; } + +// static +constexpr Register LoadWithVectorDescriptor::VectorRegister() { return a3; } + +// static +constexpr Register +LoadWithReceiverAndVectorDescriptor::LookupStartObjectRegister() { + return a4; +} + +// static +constexpr Register StoreDescriptor::ReceiverRegister() { return a1; } +// static +constexpr Register StoreDescriptor::NameRegister() { return a2; } +// static +constexpr Register StoreDescriptor::ValueRegister() { return a0; } +// static +constexpr Register StoreDescriptor::SlotRegister() { return a4; } + +// static +constexpr Register StoreWithVectorDescriptor::VectorRegister() { return a3; } + +// static +constexpr Register StoreTransitionDescriptor::MapRegister() { return a5; } + +// static +constexpr Register ApiGetterDescriptor::HolderRegister() { return a0; } +// static +constexpr Register ApiGetterDescriptor::CallbackRegister() { return a3; } + +// static +constexpr Register GrowArrayElementsDescriptor::ObjectRegister() { return a0; } +// static +constexpr Register GrowArrayElementsDescriptor::KeyRegister() { return a3; } + +// static +constexpr Register BaselineLeaveFrameDescriptor::ParamsSizeRegister() { + // TODO(v8:11421): Implement on this platform. + return a3; +} + +// static +constexpr Register BaselineLeaveFrameDescriptor::WeightRegister() { + // TODO(v8:11421): Implement on this platform. + return a4; +} + +// static +constexpr Register TypeConversionDescriptor::ArgumentRegister() { return a0; } + +// static +constexpr auto TypeofDescriptor::registers() { return RegisterArray(a3); } + +// static +constexpr auto CallTrampolineDescriptor::registers() { + // a1: target + // a0: number of arguments + return RegisterArray(a1, a0); +} + +// static +constexpr auto CallVarargsDescriptor::registers() { + // a0 : number of arguments (on the stack, not including receiver) + // a1 : the target to call + // a4 : arguments list length (untagged) + // a2 : arguments list (FixedArray) + return RegisterArray(a1, a0, a4, a2); +} + +// static +constexpr auto CallForwardVarargsDescriptor::registers() { + // a1: the target to call + // a0: number of arguments + // a2: start index (to support rest parameters) + return RegisterArray(a1, a0, a2); +} + +// static +constexpr auto CallFunctionTemplateDescriptor::registers() { + // a1 : function template info + // a0 : number of arguments (on the stack, not including receiver) + return RegisterArray(a1, a0); +} + +// static +constexpr auto CallWithSpreadDescriptor::registers() { + // a0 : number of arguments (on the stack, not including receiver) + // a1 : the target to call + // a2 : the object to spread + return RegisterArray(a1, a0, a2); +} + +// static +constexpr auto CallWithArrayLikeDescriptor::registers() { + // a1 : the target to call + // a2 : the arguments list + return RegisterArray(a1, a2); +} + +// static +constexpr auto ConstructVarargsDescriptor::registers() { + // a0 : number of arguments (on the stack, not including receiver) + // a1 : the target to call + // a3 : the new target + // a4 : arguments list length (untagged) + // a2 : arguments list (FixedArray) + return RegisterArray(a1, a3, a0, a4, a2); +} + +// static +constexpr auto ConstructForwardVarargsDescriptor::registers() { + // a1: the target to call + // a3: new target + // a0: number of arguments + // a2: start index (to support rest parameters) + return RegisterArray(a1, a3, a0, a2); +} + +// static +constexpr auto ConstructWithSpreadDescriptor::registers() { + // a0 : number of arguments (on the stack, not including receiver) + // a1 : the target to call + // a3 : the new target + // a2 : the object to spread + return RegisterArray(a1, a3, a0, a2); +} + +// static +constexpr auto ConstructWithArrayLikeDescriptor::registers() { + // a1 : the target to call + // a3 : the new target + // a2 : the arguments list + return RegisterArray(a1, a3, a2); +} + +// static +constexpr auto ConstructStubDescriptor::registers() { + // a1: target + // a3: new target + // a0: number of arguments + // a2: allocation site or undefined + return RegisterArray(a1, a3, a0, a2); +} + +// static +constexpr auto AbortDescriptor::registers() { return RegisterArray(a0); } + +// static +constexpr auto CompareDescriptor::registers() { return RegisterArray(a1, a0); } + +// static +constexpr auto Compare_BaselineDescriptor::registers() { + // TODO(v8:11421): Implement on this platform. + return RegisterArray(a1, a0, a2); +} + +// static +constexpr auto BinaryOpDescriptor::registers() { return RegisterArray(a1, a0); } + +// static +constexpr auto BinaryOp_BaselineDescriptor::registers() { + return RegisterArray(a1, a0, a2); +} + +// static +constexpr auto ApiCallbackDescriptor::registers() { + // a1 : kApiFunctionAddress + // a2 : kArgc + // a3 : kCallData + // a0 : kHolder + return RegisterArray(a1, a2, a3, a0); +} + +// static +constexpr auto InterpreterDispatchDescriptor::registers() { + return RegisterArray( + kInterpreterAccumulatorRegister, kInterpreterBytecodeOffsetRegister, + kInterpreterBytecodeArrayRegister, kInterpreterDispatchTableRegister); +} + +// static +constexpr auto InterpreterPushArgsThenCallDescriptor::registers() { + // a0 : argument count (not including receiver) + // a2 : address of first argument + // a1 : the target callable to be call + return RegisterArray(a0, a2, a1); +} + +// static +constexpr auto InterpreterPushArgsThenConstructDescriptor::registers() { + // a0 : argument count (not including receiver) + // a4 : address of the first argument + // a1 : constructor to call + // a3 : new target + // a2 : allocation site feedback if available, undefined otherwise + return RegisterArray(a0, a4, a1, a3, a2); +} + +// static +constexpr auto ResumeGeneratorDescriptor::registers() { + // v0 : the value to pass to the generator + // a1 : the JSGeneratorObject to resume + return RegisterArray(v0, a1); +} + +// static +constexpr auto RunMicrotasksEntryDescriptor::registers() { + return RegisterArray(a0, a1); +} + +} // namespace internal +} // namespace v8 + +#endif // V8_TARGET_ARCH_MIPS64 + +#endif // V8_CODEGEN_MIPS64_INTERFACE_DESCRIPTORS_MIPS64_INL_H_ diff --git a/deps/v8/src/codegen/mips64/interface-descriptors-mips64.cc b/deps/v8/src/codegen/mips64/interface-descriptors-mips64.cc deleted file mode 100644 index f34d16e15b..0000000000 --- a/deps/v8/src/codegen/mips64/interface-descriptors-mips64.cc +++ /dev/null @@ -1,332 +0,0 @@ -// Copyright 2012 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#if V8_TARGET_ARCH_MIPS64 - -#include "src/codegen/interface-descriptors.h" - -#include "src/execution/frames.h" - -namespace v8 { -namespace internal { - -const Register CallInterfaceDescriptor::ContextRegister() { return cp; } - -void CallInterfaceDescriptor::DefaultInitializePlatformSpecific( - CallInterfaceDescriptorData* data, int register_parameter_count) { - const Register default_stub_registers[] = {a0, a1, a2, a3, a4}; - CHECK_LE(static_cast<size_t>(register_parameter_count), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(register_parameter_count, - default_stub_registers); -} - -// On MIPS it is not allowed to use odd numbered floating point registers -// (e.g. f1, f3, etc.) for parameters. This can happen if we use -// DefaultInitializePlatformSpecific to assign float registers for parameters. -// E.g if fourth parameter goes to float register, f7 would be assigned for -// parameter (a3 casted to int is 7). -bool CallInterfaceDescriptor::IsValidFloatParameterRegister(Register reg) { - return reg.code() % 2 == 0; -} - -void WasmI32AtomicWait32Descriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - const Register default_stub_registers[] = {a0, a1, a2, a3}; - CHECK_EQ(static_cast<size_t>(kParameterCount), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(kParameterCount, default_stub_registers); -} - -void WasmI64AtomicWait32Descriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - const Register default_stub_registers[] = {a0, a1, a2, a3, a4}; - CHECK_EQ(static_cast<size_t>(kParameterCount - kStackArgumentsCount), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(kParameterCount - kStackArgumentsCount, - default_stub_registers); -} - -void RecordWriteDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - const Register default_stub_registers[] = {a0, a1, a2, a3, kReturnRegister0}; - - data->RestrictAllocatableRegisters(default_stub_registers, - arraysize(default_stub_registers)); - - CHECK_LE(static_cast<size_t>(kParameterCount), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(kParameterCount, default_stub_registers); -} - -void DynamicCheckMapsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register default_stub_registers[] = {kReturnRegister0, a0, a1, a2, cp}; - - data->RestrictAllocatableRegisters(default_stub_registers, - arraysize(default_stub_registers)); - - CHECK_LE(static_cast<size_t>(kParameterCount), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(kParameterCount, default_stub_registers); -} - -void EphemeronKeyBarrierDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - const Register default_stub_registers[] = {a0, a1, a2, a3, kReturnRegister0}; - - data->RestrictAllocatableRegisters(default_stub_registers, - arraysize(default_stub_registers)); - - CHECK_LE(static_cast<size_t>(kParameterCount), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(kParameterCount, default_stub_registers); -} - -const Register LoadDescriptor::ReceiverRegister() { return a1; } -const Register LoadDescriptor::NameRegister() { return a2; } -const Register LoadDescriptor::SlotRegister() { return a0; } - -const Register LoadWithVectorDescriptor::VectorRegister() { return a3; } - -const Register -LoadWithReceiverAndVectorDescriptor::LookupStartObjectRegister() { - return a4; -} - -const Register StoreDescriptor::ReceiverRegister() { return a1; } -const Register StoreDescriptor::NameRegister() { return a2; } -const Register StoreDescriptor::ValueRegister() { return a0; } -const Register StoreDescriptor::SlotRegister() { return a4; } - -const Register StoreWithVectorDescriptor::VectorRegister() { return a3; } - -const Register StoreTransitionDescriptor::SlotRegister() { return a4; } -const Register StoreTransitionDescriptor::VectorRegister() { return a3; } -const Register StoreTransitionDescriptor::MapRegister() { return a5; } - -const Register ApiGetterDescriptor::HolderRegister() { return a0; } -const Register ApiGetterDescriptor::CallbackRegister() { return a3; } - -const Register GrowArrayElementsDescriptor::ObjectRegister() { return a0; } -const Register GrowArrayElementsDescriptor::KeyRegister() { return a3; } - -const Register BaselineLeaveFrameDescriptor::ParamsSizeRegister() { - // TODO(v8:11421): Implement on this platform. - UNREACHABLE(); -} -const Register BaselineLeaveFrameDescriptor::WeightRegister() { - // TODO(v8:11421): Implement on this platform. - UNREACHABLE(); -} - -// static -const Register TypeConversionDescriptor::ArgumentRegister() { return a0; } - -void TypeofDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {a3}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallTrampolineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // a1: target - // a0: number of arguments - Register registers[] = {a1, a0}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // a0 : number of arguments (on the stack, not including receiver) - // a1 : the target to call - // a4 : arguments list length (untagged) - // a2 : arguments list (FixedArray) - Register registers[] = {a1, a0, a4, a2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallForwardVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // a1: the target to call - // a0: number of arguments - // a2: start index (to support rest parameters) - Register registers[] = {a1, a0, a2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallFunctionTemplateDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // a1 : function template info - // a0 : number of arguments (on the stack, not including receiver) - Register registers[] = {a1, a0}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallWithSpreadDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // a0 : number of arguments (on the stack, not including receiver) - // a1 : the target to call - // a2 : the object to spread - Register registers[] = {a1, a0, a2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallWithArrayLikeDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // a1 : the target to call - // a2 : the arguments list - Register registers[] = {a1, a2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // a0 : number of arguments (on the stack, not including receiver) - // a1 : the target to call - // a3 : the new target - // a4 : arguments list length (untagged) - // a2 : arguments list (FixedArray) - Register registers[] = {a1, a3, a0, a4, a2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructForwardVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // a1: the target to call - // a3: new target - // a0: number of arguments - // a2: start index (to support rest parameters) - Register registers[] = {a1, a3, a0, a2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructWithSpreadDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // a0 : number of arguments (on the stack, not including receiver) - // a1 : the target to call - // a3 : the new target - // a2 : the object to spread - Register registers[] = {a1, a3, a0, a2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructWithArrayLikeDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // a1 : the target to call - // a3 : the new target - // a2 : the arguments list - Register registers[] = {a1, a3, a2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructStubDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // a1: target - // a3: new target - // a0: number of arguments - // a2: allocation site or undefined - Register registers[] = {a1, a3, a0, a2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void AbortDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {a0}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CompareDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {a1, a0}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void Compare_BaselineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // TODO(v8:11421): Implement on this platform. - InitializePlatformUnimplemented(data, kParameterCount); -} - -void BinaryOpDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {a1, a0}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void BinaryOp_BaselineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // TODO(v8:11421): Implement on this platform. - InitializePlatformUnimplemented(data, kParameterCount); -} - -void ApiCallbackDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - a1, // kApiFunctionAddress - a2, // kArgc - a3, // kCallData - a0, // kHolder - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void InterpreterDispatchDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - kInterpreterAccumulatorRegister, kInterpreterBytecodeOffsetRegister, - kInterpreterBytecodeArrayRegister, kInterpreterDispatchTableRegister}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void InterpreterPushArgsThenCallDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - a0, // argument count (not including receiver) - a2, // address of first argument - a1 // the target callable to be call - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void InterpreterPushArgsThenConstructDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - a0, // argument count (not including receiver) - a4, // address of the first argument - a1, // constructor to call - a3, // new target - a2, // allocation site feedback if available, undefined otherwise - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ResumeGeneratorDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - v0, // the value to pass to the generator - a1 // the JSGeneratorObject to resume - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void FrameDropperTrampolineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - a1, // loaded new FP - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void RunMicrotasksEntryDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {a0, a1}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -} // namespace internal -} // namespace v8 - -#endif // V8_TARGET_ARCH_MIPS64 diff --git a/deps/v8/src/codegen/mips64/macro-assembler-mips64.cc b/deps/v8/src/codegen/mips64/macro-assembler-mips64.cc index 29443a2e58..a1896624e5 100644 --- a/deps/v8/src/codegen/mips64/macro-assembler-mips64.cc +++ b/deps/v8/src/codegen/mips64/macro-assembler-mips64.cc @@ -12,6 +12,7 @@ #include "src/codegen/callable.h" #include "src/codegen/code-factory.h" #include "src/codegen/external-reference-table.h" +#include "src/codegen/interface-descriptors-inl.h" #include "src/codegen/macro-assembler.h" #include "src/codegen/register-configuration.h" #include "src/debug/debug.h" @@ -64,7 +65,7 @@ int TurboAssembler::RequiredStackSizeForCallerSaved(SaveFPRegsMode fp_mode, RegList list = kJSCallerSaved & ~exclusions; bytes += NumRegs(list) * kPointerSize; - if (fp_mode == kSaveFPRegs) { + if (fp_mode == SaveFPRegsMode::kSave) { bytes += NumRegs(kCallerSavedFPU) * kDoubleSize; } @@ -89,7 +90,7 @@ int TurboAssembler::PushCallerSaved(SaveFPRegsMode fp_mode, Register exclusion1, MultiPush(list); bytes += NumRegs(list) * kPointerSize; - if (fp_mode == kSaveFPRegs) { + if (fp_mode == SaveFPRegsMode::kSave) { MultiPushFPU(kCallerSavedFPU); bytes += NumRegs(kCallerSavedFPU) * kDoubleSize; } @@ -100,7 +101,7 @@ int TurboAssembler::PushCallerSaved(SaveFPRegsMode fp_mode, Register exclusion1, int TurboAssembler::PopCallerSaved(SaveFPRegsMode fp_mode, Register exclusion1, Register exclusion2, Register exclusion3) { int bytes = 0; - if (fp_mode == kSaveFPRegs) { + if (fp_mode == SaveFPRegsMode::kSave) { MultiPopFPU(kCallerSavedFPU); bytes += NumRegs(kCallerSavedFPU) * kDoubleSize; } @@ -177,7 +178,7 @@ void MacroAssembler::RecordWriteField(Register object, int offset, Label done; // Skip barrier if writing a smi. - if (smi_check == INLINE_SMI_CHECK) { + if (smi_check == SmiCheck::kInline) { JumpIfSmi(value, &done); } @@ -186,7 +187,7 @@ void MacroAssembler::RecordWriteField(Register object, int offset, DCHECK(IsAligned(offset, kPointerSize)); Daddu(dst, object, Operand(offset - kHeapObjectTag)); - if (emit_debug_code()) { + if (FLAG_debug_code) { BlockTrampolinePoolScope block_trampoline_pool(this); Label ok; And(t8, dst, Operand(kPointerSize - 1)); @@ -196,13 +197,13 @@ void MacroAssembler::RecordWriteField(Register object, int offset, } RecordWrite(object, dst, value, ra_status, save_fp, remembered_set_action, - OMIT_SMI_CHECK); + SmiCheck::kOmit); bind(&done); // Clobber clobbered input registers when running with the debug-code flag // turned on to provoke errors. - if (emit_debug_code()) { + if (FLAG_debug_code) { li(value, Operand(bit_cast<int64_t>(kZapValue + 4))); li(dst, Operand(bit_cast<int64_t>(kZapValue + 8))); } @@ -334,7 +335,7 @@ void MacroAssembler::RecordWrite(Register object, Register address, DCHECK(!AreAliased(object, address, value, t8)); DCHECK(!AreAliased(object, address, value, t9)); - if (emit_debug_code()) { + if (FLAG_debug_code) { UseScratchRegisterScope temps(this); Register scratch = temps.Acquire(); Ld(scratch, MemOperand(address)); @@ -342,7 +343,7 @@ void MacroAssembler::RecordWrite(Register object, Register address, Operand(value)); } - if ((remembered_set_action == OMIT_REMEMBERED_SET && + if ((remembered_set_action == RememberedSetAction::kOmit && !FLAG_incremental_marking) || FLAG_disable_write_barriers) { return; @@ -352,7 +353,7 @@ void MacroAssembler::RecordWrite(Register object, Register address, // catch stores of smis and stores into the young generation. Label done; - if (smi_check == INLINE_SMI_CHECK) { + if (smi_check == SmiCheck::kInline) { DCHECK_EQ(0, kSmiTag); JumpIfSmi(value, &done); } @@ -377,7 +378,7 @@ void MacroAssembler::RecordWrite(Register object, Register address, // Clobber clobbered registers when running with the debug-code flag // turned on to provoke errors. - if (emit_debug_code()) { + if (FLAG_debug_code) { li(address, Operand(bit_cast<int64_t>(kZapValue + 12))); li(value, Operand(bit_cast<int64_t>(kZapValue + 16))); } @@ -4687,14 +4688,6 @@ void TurboAssembler::PushArray(Register array, Register size, Register scratch, } } -void MacroAssembler::MaybeDropFrames() { - // Check whether we need to drop frames to restart a function on the stack. - li(a1, ExternalReference::debug_restart_fp_address(isolate())); - Ld(a1, MemOperand(a1)); - Jump(BUILTIN_CODE(isolate(), FrameDropperTrampoline), RelocInfo::CODE_TARGET, - ne, a1, Operand(zero_reg)); -} - // --------------------------------------------------------------------------- // Exception handling. @@ -4887,7 +4880,7 @@ void MacroAssembler::StackOverflowCheck(Register num_args, Register scratch1, void MacroAssembler::InvokePrologue(Register expected_parameter_count, Register actual_parameter_count, - Label* done, InvokeFlag flag) { + Label* done, InvokeType type) { Label regular_invoke; // a0: actual arguments count @@ -4999,9 +4992,9 @@ void MacroAssembler::CheckDebugHook(Register fun, Register new_target, void MacroAssembler::InvokeFunctionCode(Register function, Register new_target, Register expected_parameter_count, Register actual_parameter_count, - InvokeFlag flag) { + InvokeType type) { // You can't call a function without a valid frame. - DCHECK_IMPLIES(flag == CALL_FUNCTION, has_frame()); + DCHECK_IMPLIES(type == InvokeType::kCall, has_frame()); DCHECK_EQ(function, a1); DCHECK_IMPLIES(new_target.is_valid(), new_target == a3); @@ -5015,19 +5008,21 @@ void MacroAssembler::InvokeFunctionCode(Register function, Register new_target, } Label done; - InvokePrologue(expected_parameter_count, actual_parameter_count, &done, flag); + InvokePrologue(expected_parameter_count, actual_parameter_count, &done, type); // We call indirectly through the code field in the function to // allow recompilation to take effect without changing any of the // call sites. Register code = kJavaScriptCallCodeStartRegister; Ld(code, FieldMemOperand(function, JSFunction::kCodeOffset)); - if (flag == CALL_FUNCTION) { - Daddu(code, code, Operand(Code::kHeaderSize - kHeapObjectTag)); - Call(code); - } else { - DCHECK(flag == JUMP_FUNCTION); - Daddu(code, code, Operand(Code::kHeaderSize - kHeapObjectTag)); - Jump(code); + switch (type) { + case InvokeType::kCall: + Daddu(code, code, Operand(Code::kHeaderSize - kHeapObjectTag)); + Call(code); + break; + case InvokeType::kJump: + Daddu(code, code, Operand(Code::kHeaderSize - kHeapObjectTag)); + Jump(code); + break; } // Continue here if InvokePrologue does handle the invocation due to @@ -5037,9 +5032,9 @@ void MacroAssembler::InvokeFunctionCode(Register function, Register new_target, void MacroAssembler::InvokeFunctionWithNewTarget( Register function, Register new_target, Register actual_parameter_count, - InvokeFlag flag) { + InvokeType type) { // You can't call a function without a valid frame. - DCHECK_IMPLIES(flag == CALL_FUNCTION, has_frame()); + DCHECK_IMPLIES(type == InvokeType::kCall, has_frame()); // Contract with called JS functions requires that function is passed in a1. DCHECK_EQ(function, a1); @@ -5053,15 +5048,15 @@ void MacroAssembler::InvokeFunctionWithNewTarget( SharedFunctionInfo::kFormalParameterCountOffset)); InvokeFunctionCode(a1, new_target, expected_parameter_count, - actual_parameter_count, flag); + actual_parameter_count, type); } void MacroAssembler::InvokeFunction(Register function, Register expected_parameter_count, Register actual_parameter_count, - InvokeFlag flag) { + InvokeType type) { // You can't call a function without a valid frame. - DCHECK_IMPLIES(flag == CALL_FUNCTION, has_frame()); + DCHECK_IMPLIES(type == InvokeType::kCall, has_frame()); // Contract with called JS functions requires that function is passed in a1. DCHECK_EQ(function, a1); @@ -5070,7 +5065,7 @@ void MacroAssembler::InvokeFunction(Register function, Ld(cp, FieldMemOperand(a1, JSFunction::kContextOffset)); InvokeFunctionCode(a1, no_reg, expected_parameter_count, - actual_parameter_count, flag); + actual_parameter_count, type); } // --------------------------------------------------------------------------- @@ -5214,8 +5209,8 @@ void MacroAssembler::JumpToExternalReference(const ExternalReference& builtin, BranchDelaySlot bd, bool builtin_exit_frame) { PrepareCEntryFunction(builtin); - Handle<Code> code = CodeFactory::CEntry(isolate(), 1, kDontSaveFPRegs, - kArgvOnStack, builtin_exit_frame); + Handle<Code> code = CodeFactory::CEntry(isolate(), 1, SaveFPRegsMode::kIgnore, + ArgvMode::kStack, builtin_exit_frame); Jump(code, RelocInfo::CODE_TARGET, al, zero_reg, Operand(zero_reg), bd); } @@ -5267,7 +5262,7 @@ void TurboAssembler::DebugBreak() { stop(); } void TurboAssembler::Assert(Condition cc, AbortReason reason, Register rs, Operand rt) { - if (emit_debug_code()) Check(cc, reason, rs, rt); + if (FLAG_debug_code) Check(cc, reason, rs, rt); } void TurboAssembler::Check(Condition cc, AbortReason reason, Register rs, @@ -5282,11 +5277,11 @@ void TurboAssembler::Check(Condition cc, AbortReason reason, Register rs, void TurboAssembler::Abort(AbortReason reason) { Label abort_start; bind(&abort_start); -#ifdef DEBUG - const char* msg = GetAbortReason(reason); - RecordComment("Abort message: "); - RecordComment(msg); -#endif + if (FLAG_code_comments) { + const char* msg = GetAbortReason(reason); + RecordComment("Abort message: "); + RecordComment(msg); + } // Avoid emitting call to builtin if requested. if (trap_on_abort()) { @@ -5405,7 +5400,7 @@ void MacroAssembler::EnterExitFrame(bool save_doubles, int stack_space, // Set up new frame pointer. daddiu(fp, sp, ExitFrameConstants::kFixedFrameSizeFromFp); - if (emit_debug_code()) { + if (FLAG_debug_code) { Sd(zero_reg, MemOperand(fp, ExitFrameConstants::kSPOffset)); } @@ -5521,7 +5516,7 @@ int TurboAssembler::ActivationFrameAlignment() { } void MacroAssembler::AssertStackIsAligned() { - if (emit_debug_code()) { + if (FLAG_debug_code) { const int frame_alignment = ActivationFrameAlignment(); const int frame_alignment_mask = frame_alignment - 1; @@ -5566,7 +5561,7 @@ void MacroAssembler::JumpIfNotSmi(Register value, Label* not_smi_label, } void MacroAssembler::AssertNotSmi(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { STATIC_ASSERT(kSmiTag == 0); UseScratchRegisterScope temps(this); Register scratch = temps.Acquire(); @@ -5576,7 +5571,7 @@ void MacroAssembler::AssertNotSmi(Register object) { } void MacroAssembler::AssertSmi(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { STATIC_ASSERT(kSmiTag == 0); UseScratchRegisterScope temps(this); Register scratch = temps.Acquire(); @@ -5586,7 +5581,7 @@ void MacroAssembler::AssertSmi(Register object) { } void MacroAssembler::AssertConstructor(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { BlockTrampolinePoolScope block_trampoline_pool(this); STATIC_ASSERT(kSmiTag == 0); SmiTst(object, t8); @@ -5601,7 +5596,7 @@ void MacroAssembler::AssertConstructor(Register object) { } void MacroAssembler::AssertFunction(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { BlockTrampolinePoolScope block_trampoline_pool(this); STATIC_ASSERT(kSmiTag == 0); SmiTst(object, t8); @@ -5617,7 +5612,7 @@ void MacroAssembler::AssertFunction(Register object) { } void MacroAssembler::AssertBoundFunction(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { BlockTrampolinePoolScope block_trampoline_pool(this); STATIC_ASSERT(kSmiTag == 0); SmiTst(object, t8); @@ -5630,7 +5625,7 @@ void MacroAssembler::AssertBoundFunction(Register object) { } void MacroAssembler::AssertGeneratorObject(Register object) { - if (!emit_debug_code()) return; + if (!FLAG_debug_code) return; BlockTrampolinePoolScope block_trampoline_pool(this); STATIC_ASSERT(kSmiTag == 0); SmiTst(object, t8); @@ -5657,7 +5652,7 @@ void MacroAssembler::AssertGeneratorObject(Register object) { void MacroAssembler::AssertUndefinedOrAllocationSite(Register object, Register scratch) { - if (emit_debug_code()) { + if (FLAG_debug_code) { Label done_checking; AssertNotSmi(object); LoadRoot(scratch, RootIndex::kUndefinedValue); @@ -5949,7 +5944,7 @@ void TurboAssembler::CallCFunctionHelper(Register function, // PrepareCallCFunction. The C function must be called via t9, for mips ABI. #if V8_HOST_ARCH_MIPS || V8_HOST_ARCH_MIPS64 - if (emit_debug_code()) { + if (FLAG_debug_code) { int frame_alignment = base::OS::ActivationFrameAlignment(); int frame_alignment_mask = frame_alignment - 1; if (frame_alignment > kPointerSize) { diff --git a/deps/v8/src/codegen/mips64/macro-assembler-mips64.h b/deps/v8/src/codegen/mips64/macro-assembler-mips64.h index 756b594edb..054f3345d1 100644 --- a/deps/v8/src/codegen/mips64/macro-assembler-mips64.h +++ b/deps/v8/src/codegen/mips64/macro-assembler-mips64.h @@ -55,8 +55,6 @@ enum LiFlags { ADDRESS_LOAD = 2 }; -enum RememberedSetAction { EMIT_REMEMBERED_SET, OMIT_REMEMBERED_SET }; -enum SmiCheck { INLINE_SMI_CHECK, OMIT_SMI_CHECK }; enum RAStatus { kRAHasNotBeenSaved, kRAHasBeenSaved }; Register GetRegisterThatIsNotOneOf(Register reg1, Register reg2 = no_reg, @@ -994,8 +992,8 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { void RecordWriteField( Register object, int offset, Register value, Register scratch, RAStatus ra_status, SaveFPRegsMode save_fp, - RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, - SmiCheck smi_check = INLINE_SMI_CHECK); + RememberedSetAction remembered_set_action = RememberedSetAction::kEmit, + SmiCheck smi_check = SmiCheck::kInline); // For a given |object| notify the garbage collector that the slot |address| // has been written. |value| is the object being stored. The value and @@ -1003,8 +1001,8 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { void RecordWrite( Register object, Register address, Register value, RAStatus ra_status, SaveFPRegsMode save_fp, - RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, - SmiCheck smi_check = INLINE_SMI_CHECK); + RememberedSetAction remembered_set_action = RememberedSetAction::kEmit, + SmiCheck smi_check = SmiCheck::kInline); void Pref(int32_t hint, const MemOperand& rs); @@ -1072,7 +1070,7 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { // Invoke the JavaScript function code by either calling or jumping. void InvokeFunctionCode(Register function, Register new_target, Register expected_parameter_count, - Register actual_parameter_count, InvokeFlag flag); + Register actual_parameter_count, InvokeType type); // On function call, call into the debugger if necessary. void CheckDebugHook(Register fun, Register new_target, @@ -1083,12 +1081,9 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { // current context to the context in the function before invoking. void InvokeFunctionWithNewTarget(Register function, Register new_target, Register actual_parameter_count, - InvokeFlag flag); + InvokeType type); void InvokeFunction(Register function, Register expected_parameter_count, - Register actual_parameter_count, InvokeFlag flag); - - // Frame restart support. - void MaybeDropFrames(); + Register actual_parameter_count, InvokeType type); // Exception handling. @@ -1112,18 +1107,18 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { // Call a runtime routine. void CallRuntime(const Runtime::Function* f, int num_arguments, - SaveFPRegsMode save_doubles = kDontSaveFPRegs); + SaveFPRegsMode save_doubles = SaveFPRegsMode::kIgnore); // Convenience function: Same as above, but takes the fid instead. void CallRuntime(Runtime::FunctionId fid, - SaveFPRegsMode save_doubles = kDontSaveFPRegs) { + SaveFPRegsMode save_doubles = SaveFPRegsMode::kIgnore) { const Runtime::Function* function = Runtime::FunctionForId(fid); CallRuntime(function, function->nargs, save_doubles); } // Convenience function: Same as above, but takes the fid instead. void CallRuntime(Runtime::FunctionId fid, int num_arguments, - SaveFPRegsMode save_doubles = kDontSaveFPRegs) { + SaveFPRegsMode save_doubles = SaveFPRegsMode::kIgnore) { CallRuntime(Runtime::FunctionForId(fid), num_arguments, save_doubles); } @@ -1230,7 +1225,7 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { // Helper functions for generating invokes. void InvokePrologue(Register expected_parameter_count, Register actual_parameter_count, Label* done, - InvokeFlag flag); + InvokeType type); // Compute memory operands for safepoint stack slots. static int SafepointRegisterStackIndex(int reg_code); diff --git a/deps/v8/src/codegen/optimized-compilation-info.cc b/deps/v8/src/codegen/optimized-compilation-info.cc index f6fd5862fd..4d5c7a1d57 100644 --- a/deps/v8/src/codegen/optimized-compilation-info.cc +++ b/deps/v8/src/codegen/optimized-compilation-info.cc @@ -23,12 +23,16 @@ namespace internal { OptimizedCompilationInfo::OptimizedCompilationInfo( Zone* zone, Isolate* isolate, Handle<SharedFunctionInfo> shared, - Handle<JSFunction> closure, CodeKind code_kind) + Handle<JSFunction> closure, CodeKind code_kind, BytecodeOffset osr_offset, + JavaScriptFrame* osr_frame) : code_kind_(code_kind), + osr_offset_(osr_offset), + osr_frame_(osr_frame), zone_(zone), optimization_id_(isolate->NextOptimizationId()) { DCHECK_EQ(*shared, closure->shared()); DCHECK(shared->is_compiled()); + DCHECK_IMPLIES(is_osr(), IsOptimizing()); bytecode_array_ = handle(shared->GetBytecodeArray(isolate), isolate); shared_info_ = shared; closure_ = closure; @@ -64,8 +68,6 @@ bool OptimizedCompilationInfo::FlagSetIsValid(Flag flag) const { switch (flag) { case kPoisonRegisterArguments: return untrusted_code_mitigations(); - case kFunctionContextSpecializing: - return !IsNativeContextIndependent(); default: return true; } @@ -86,18 +88,22 @@ bool OptimizedCompilationInfo::FlagGetIsValid(Flag flag) const { void OptimizedCompilationInfo::ConfigureFlags() { if (FLAG_untrusted_code_mitigations) set_untrusted_code_mitigations(); + if (FLAG_turbo_inline_js_wasm_calls) set_inline_js_wasm_calls(); + + if (!is_osr() && (IsTurboprop() || FLAG_concurrent_inlining)) { + set_concurrent_inlining(); + } switch (code_kind_) { case CodeKind::TURBOFAN: if (FLAG_function_context_specialization) { set_function_context_specializing(); } + if (FLAG_turbo_splitting) set_splitting(); V8_FALLTHROUGH; case CodeKind::TURBOPROP: - case CodeKind::NATIVE_CONTEXT_INDEPENDENT: set_called_with_code_start_register(); set_switch_jump_table(); - if (FLAG_turbo_splitting) set_splitting(); if (FLAG_untrusted_code_mitigations) set_poison_register_arguments(); // TODO(yangguo): Disable this in case of debugging for crbug.com/826613 if (FLAG_analyze_environment_liveness) set_analyze_environment_liveness(); diff --git a/deps/v8/src/codegen/optimized-compilation-info.h b/deps/v8/src/codegen/optimized-compilation-info.h index 20386cbbee..b5ad1c9816 100644 --- a/deps/v8/src/codegen/optimized-compilation-info.h +++ b/deps/v8/src/codegen/optimized-compilation-info.h @@ -70,7 +70,9 @@ class V8_EXPORT_PRIVATE OptimizedCompilationInfo final { V(TraceTurboAllocation, trace_turbo_allocation, 16) \ V(TraceHeapBroker, trace_heap_broker, 17) \ V(WasmRuntimeExceptionSupport, wasm_runtime_exception_support, 18) \ - V(ConcurrentInlining, concurrent_inlining, 19) + V(ConcurrentInlining, concurrent_inlining, 19) \ + V(DiscardResultForTesting, discard_result_for_testing, 20) \ + V(InlineJSWasmCalls, inline_js_wasm_calls, 21) enum Flag { #define DEF_ENUM(Camel, Lower, Bit) k##Camel = 1 << Bit, @@ -102,7 +104,15 @@ class V8_EXPORT_PRIVATE OptimizedCompilationInfo final { // Construct a compilation info for optimized compilation. OptimizedCompilationInfo(Zone* zone, Isolate* isolate, Handle<SharedFunctionInfo> shared, - Handle<JSFunction> closure, CodeKind code_kind); + Handle<JSFunction> closure, CodeKind code_kind, + BytecodeOffset osr_offset, + JavaScriptFrame* osr_frame); + // For testing. + OptimizedCompilationInfo(Zone* zone, Isolate* isolate, + Handle<SharedFunctionInfo> shared, + Handle<JSFunction> closure, CodeKind code_kind) + : OptimizedCompilationInfo(zone, isolate, shared, closure, code_kind, + BytecodeOffset::None(), nullptr) {} // Construct a compilation info for stub compilation, Wasm, and testing. OptimizedCompilationInfo(Vector<const char> debug_name, Zone* zone, CodeKind code_kind); @@ -160,21 +170,11 @@ class V8_EXPORT_PRIVATE OptimizedCompilationInfo final { bool IsOptimizing() const { return CodeKindIsOptimizedJSFunction(code_kind()); } - bool IsNativeContextIndependent() const { - return code_kind() == CodeKind::NATIVE_CONTEXT_INDEPENDENT; - } bool IsTurboprop() const { return code_kind() == CodeKind::TURBOPROP; } #if V8_ENABLE_WEBASSEMBLY bool IsWasm() const { return code_kind() == CodeKind::WASM_FUNCTION; } #endif // V8_ENABLE_WEBASSEMBLY - void SetOptimizingForOsr(BytecodeOffset osr_offset, - JavaScriptFrame* osr_frame) { - DCHECK(IsOptimizing()); - osr_offset_ = osr_offset; - osr_frame_ = osr_frame; - } - void set_persistent_handles( std::unique_ptr<PersistentHandles> persistent_handles) { DCHECK_NULL(ph_); @@ -293,7 +293,9 @@ class V8_EXPORT_PRIVATE OptimizedCompilationInfo final { #endif // V8_ENABLE_WEBASSEMBLY // Entry point when compiling for OSR, {BytecodeOffset::None} otherwise. - BytecodeOffset osr_offset_ = BytecodeOffset::None(); + const BytecodeOffset osr_offset_ = BytecodeOffset::None(); + // The current OSR frame for specialization or {nullptr}. + JavaScriptFrame* const osr_frame_ = nullptr; // The zone from which the compilation pipeline working on this // OptimizedCompilationInfo allocates. @@ -309,9 +311,6 @@ class V8_EXPORT_PRIVATE OptimizedCompilationInfo final { const int optimization_id_; unsigned inlined_bytecode_size_ = 0; - // The current OSR frame for specialization or {nullptr}. - JavaScriptFrame* osr_frame_ = nullptr; - Vector<const char> debug_name_; std::unique_ptr<char[]> trace_turbo_filename_; diff --git a/deps/v8/src/codegen/ppc/assembler-ppc.cc b/deps/v8/src/codegen/ppc/assembler-ppc.cc index 7da9484cce..437f5f96c6 100644 --- a/deps/v8/src/codegen/ppc/assembler-ppc.cc +++ b/deps/v8/src/codegen/ppc/assembler-ppc.cc @@ -55,7 +55,11 @@ static unsigned CpuFeaturesImpliedByCompiler() { } bool CpuFeatures::SupportsWasmSimd128() { +#if V8_ENABLE_WEBASSEMBLY return CpuFeatures::IsSupported(SIMD); +#else + return false; +#endif // V8_ENABLE_WEBASSEMBLY } void CpuFeatures::ProbeImpl(bool cross_compile) { @@ -1824,6 +1828,12 @@ void Assembler::lxvd(const Simd128Register rt, const MemOperand& src) { TX); } +void Assembler::lxvx(const Simd128Register rt, const MemOperand& src) { + int TX = 1; + emit(LXVX | rt.code() * B21 | src.ra().code() * B16 | src.rb().code() * B11 | + TX); +} + void Assembler::lxsdx(const Simd128Register rt, const MemOperand& src) { int TX = 1; emit(LXSDX | rt.code() * B21 | src.ra().code() * B16 | src.rb().code() * B11 | @@ -1878,18 +1888,18 @@ void Assembler::stxvd(const Simd128Register rt, const MemOperand& dst) { SX); } +void Assembler::stxvx(const Simd128Register rt, const MemOperand& dst) { + int SX = 1; + emit(STXVX | rt.code() * B21 | dst.ra().code() * B16 | dst.rb().code() * B11 | + SX); +} + void Assembler::xxspltib(const Simd128Register rt, const Operand& imm) { int TX = 1; CHECK(is_uint8(imm.immediate())); emit(XXSPLTIB | rt.code() * B21 | imm.immediate() * B11 | TX); } -void Assembler::xxbrq(const Simd128Register rt, const Simd128Register rb) { - int BX = 1; - int TX = 1; - emit(XXBRQ | rt.code() * B21 | 31 * B16 | rb.code() * B11 | BX * B1 | TX); -} - // Pseudo instructions. void Assembler::nop(int type) { Register reg = r0; diff --git a/deps/v8/src/codegen/ppc/assembler-ppc.h b/deps/v8/src/codegen/ppc/assembler-ppc.h index d5b37fe59f..1d7ecf76d7 100644 --- a/deps/v8/src/codegen/ppc/assembler-ppc.h +++ b/deps/v8/src/codegen/ppc/assembler-ppc.h @@ -448,6 +448,7 @@ class Assembler : public AssemblerBase { } PPC_XX2_OPCODE_A_FORM_LIST(DECLARE_PPC_XX2_INSTRUCTIONS) + PPC_XX2_OPCODE_B_FORM_LIST(DECLARE_PPC_XX2_INSTRUCTIONS) #undef DECLARE_PPC_XX2_INSTRUCTIONS #define DECLARE_PPC_XX3_INSTRUCTIONS(name, instr_name, instr_value) \ @@ -500,6 +501,9 @@ class Assembler : public AssemblerBase { PPC_VX_OPCODE_A_FORM_LIST(DECLARE_PPC_VX_INSTRUCTIONS_A_FORM) PPC_VX_OPCODE_B_FORM_LIST(DECLARE_PPC_VX_INSTRUCTIONS_B_FORM) PPC_VX_OPCODE_C_FORM_LIST(DECLARE_PPC_VX_INSTRUCTIONS_C_FORM) + PPC_VX_OPCODE_D_FORM_LIST( + DECLARE_PPC_VX_INSTRUCTIONS_C_FORM) /* OPCODE_D_FORM can use + INSTRUCTIONS_C_FORM */ #undef DECLARE_PPC_VX_INSTRUCTIONS_A_FORM #undef DECLARE_PPC_VX_INSTRUCTIONS_B_FORM #undef DECLARE_PPC_VX_INSTRUCTIONS_C_FORM @@ -1028,6 +1032,7 @@ class Assembler : public AssemblerBase { void mtvsrd(const Simd128Register rt, const Register ra); void mtvsrdd(const Simd128Register rt, const Register ra, const Register rb); void lxvd(const Simd128Register rt, const MemOperand& src); + void lxvx(const Simd128Register rt, const MemOperand& src); void lxsdx(const Simd128Register rt, const MemOperand& src); void lxsibzx(const Simd128Register rt, const MemOperand& src); void lxsihzx(const Simd128Register rt, const MemOperand& src); @@ -1037,8 +1042,8 @@ class Assembler : public AssemblerBase { void stxsihx(const Simd128Register rs, const MemOperand& src); void stxsiwx(const Simd128Register rs, const MemOperand& src); void stxvd(const Simd128Register rt, const MemOperand& src); + void stxvx(const Simd128Register rt, const MemOperand& src); void xxspltib(const Simd128Register rt, const Operand& imm); - void xxbrq(const Simd128Register rt, const Simd128Register rb); // Pseudo instructions diff --git a/deps/v8/src/codegen/ppc/constants-ppc.h b/deps/v8/src/codegen/ppc/constants-ppc.h index 5b37a2ee11..56732b7f8b 100644 --- a/deps/v8/src/codegen/ppc/constants-ppc.h +++ b/deps/v8/src/codegen/ppc/constants-ppc.h @@ -418,6 +418,10 @@ using Instr = uint32_t; /* Saturate */ \ V(xvcvdpuxws, XVCVDPUXWS, 0xF0000320) +#define PPC_XX2_OPCODE_B_FORM_LIST(V) \ + /* Vector Byte-Reverse Quadword */ \ + V(xxbrq, XXBRQ, 0xF01F076C) + #define PPC_XX2_OPCODE_UNUSED_LIST(V) \ /* VSX Scalar Square Root Double-Precision */ \ V(xssqrtdp, XSSQRTDP, 0xF000012C) \ @@ -520,12 +524,11 @@ using Instr = uint32_t; /* VSX Vector Test for software Square Root Single-Precision */ \ V(xvtsqrtsp, XVTSQRTSP, 0xF00002A8) \ /* Vector Splat Immediate Byte */ \ - V(xxspltib, XXSPLTIB, 0xF00002D0) \ - /* Vector Byte-Reverse Quadword */ \ - V(xxbrq, XXBRQ, 0xF000076C) + V(xxspltib, XXSPLTIB, 0xF00002D0) #define PPC_XX2_OPCODE_LIST(V) \ PPC_XX2_OPCODE_A_FORM_LIST(V) \ + PPC_XX2_OPCODE_B_FORM_LIST(V) \ PPC_XX2_OPCODE_UNUSED_LIST(V) #define PPC_EVX_OPCODE_LIST(V) \ @@ -1983,6 +1986,8 @@ using Instr = uint32_t; V(lxsspx, LXSSPX, 0x7C000418) \ /* Load VSR Vector Doubleword*2 Indexed */ \ V(lxvd, LXVD, 0x7C000698) \ + /* Load VSX Vector Indexed */ \ + V(lxvx, LXVX, 0x7C000218) \ /* Load VSR Vector Doubleword & Splat Indexed */ \ V(lxvdsx, LXVDSX, 0x7C000298) \ /* Load VSR Vector Word*4 Indexed */ \ @@ -2011,6 +2016,8 @@ using Instr = uint32_t; V(stxsspx, STXSSPX, 0x7C000518) \ /* Store VSR Vector Doubleword*2 Indexed */ \ V(stxvd, STXVD, 0x7C000798) \ + /* Store VSX Vector Indexed */ \ + V(stxvx, STXVX, 0x7C000318) \ /* Store VSR Vector Word*4 Indexed */ \ V(stxvw, STXVW, 0x7C000718) @@ -2430,6 +2437,12 @@ using Instr = uint32_t; /* Vector Population Count Byte */ \ V(vpopcntb, VPOPCNTB, 0x10000703) +#define PPC_VX_OPCODE_D_FORM_LIST(V) \ + /* Vector Negate Word */ \ + V(vnegw, VNEGW, 0x10060602) \ + /* Vector Negate Doubleword */ \ + V(vnegd, VNEGD, 0x10070602) + #define PPC_VX_OPCODE_UNUSED_LIST(V) \ /* Decimal Add Modulo */ \ V(bcdadd, BCDADD, 0xF0000400) \ @@ -2586,6 +2599,7 @@ using Instr = uint32_t; PPC_VX_OPCODE_A_FORM_LIST(V) \ PPC_VX_OPCODE_B_FORM_LIST(V) \ PPC_VX_OPCODE_C_FORM_LIST(V) \ + PPC_VX_OPCODE_D_FORM_LIST(V) \ PPC_VX_OPCODE_UNUSED_LIST(V) #define PPC_XS_OPCODE_LIST(V) \ @@ -2919,9 +2933,19 @@ class Instruction { PPC_VA_OPCODE_LIST(OPCODE_CASES) return static_cast<Opcode>(opcode); } + // Some VX opcodes have integers hard coded in the middle, handle those + // first. + opcode = extcode | BitField(20, 16) | BitField(10, 0); + switch (opcode) { + PPC_VX_OPCODE_D_FORM_LIST(OPCODE_CASES) + return static_cast<Opcode>(opcode); + } opcode = extcode | BitField(10, 0); switch (opcode) { - PPC_VX_OPCODE_LIST(OPCODE_CASES) + PPC_VX_OPCODE_A_FORM_LIST(OPCODE_CASES) + PPC_VX_OPCODE_B_FORM_LIST(OPCODE_CASES) + PPC_VX_OPCODE_C_FORM_LIST(OPCODE_CASES) + PPC_VX_OPCODE_UNUSED_LIST(OPCODE_CASES) PPC_X_OPCODE_EH_S_FORM_LIST(OPCODE_CASES) return static_cast<Opcode>(opcode); } @@ -2935,9 +2959,17 @@ class Instruction { PPC_XFX_OPCODE_LIST(OPCODE_CASES) return static_cast<Opcode>(opcode); } + // Some XX2 opcodes have integers hard coded in the middle, handle those + // first. + opcode = extcode | BitField(20, 16) | BitField(10, 2); + switch (opcode) { + PPC_XX2_OPCODE_B_FORM_LIST(OPCODE_CASES) + return static_cast<Opcode>(opcode); + } opcode = extcode | BitField(10, 2); switch (opcode) { - PPC_XX2_OPCODE_LIST(OPCODE_CASES) + PPC_XX2_OPCODE_A_FORM_LIST(OPCODE_CASES) + PPC_XX2_OPCODE_UNUSED_LIST(OPCODE_CASES) return static_cast<Opcode>(opcode); } opcode = extcode | BitField(10, 1); diff --git a/deps/v8/src/codegen/ppc/interface-descriptors-ppc-inl.h b/deps/v8/src/codegen/ppc/interface-descriptors-ppc-inl.h new file mode 100644 index 0000000000..69529a3ce6 --- /dev/null +++ b/deps/v8/src/codegen/ppc/interface-descriptors-ppc-inl.h @@ -0,0 +1,256 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef V8_CODEGEN_PPC_INTERFACE_DESCRIPTORS_PPC_INL_H_ +#define V8_CODEGEN_PPC_INTERFACE_DESCRIPTORS_PPC_INL_H_ + +#if V8_TARGET_ARCH_PPC || V8_TARGET_ARCH_PPC64 + +#include "src/codegen/interface-descriptors.h" +#include "src/execution/frames.h" + +namespace v8 { +namespace internal { + +constexpr auto CallInterfaceDescriptor::DefaultRegisterArray() { + auto registers = RegisterArray(r3, r4, r5, r6, r7); + STATIC_ASSERT(registers.size() == kMaxBuiltinRegisterParams); + return registers; +} + +// static +constexpr auto RecordWriteDescriptor::registers() { + return RegisterArray(r3, r4, r5, r6, r7, kReturnRegister0); +} + +// static +constexpr auto DynamicCheckMapsDescriptor::registers() { + return RegisterArray(r3, r4, r5, r6, cp); +} + +// static +constexpr auto EphemeronKeyBarrierDescriptor::registers() { + return RegisterArray(r3, r4, r5, r6, r7, kReturnRegister0); +} + +// static +constexpr Register LoadDescriptor::ReceiverRegister() { return r4; } +// static +constexpr Register LoadDescriptor::NameRegister() { return r5; } +// static +constexpr Register LoadDescriptor::SlotRegister() { return r3; } + +// static +constexpr Register LoadWithVectorDescriptor::VectorRegister() { return r6; } + +// static +constexpr Register +LoadWithReceiverAndVectorDescriptor::LookupStartObjectRegister() { + return r7; +} + +// static +constexpr Register StoreDescriptor::ReceiverRegister() { return r4; } +// static +constexpr Register StoreDescriptor::NameRegister() { return r5; } +// static +constexpr Register StoreDescriptor::ValueRegister() { return r3; } +// static +constexpr Register StoreDescriptor::SlotRegister() { return r7; } + +// static +constexpr Register StoreWithVectorDescriptor::VectorRegister() { return r6; } + +// static +constexpr Register StoreTransitionDescriptor::MapRegister() { return r8; } + +// static +constexpr Register ApiGetterDescriptor::HolderRegister() { return r3; } +// static +constexpr Register ApiGetterDescriptor::CallbackRegister() { return r6; } + +// static +constexpr Register GrowArrayElementsDescriptor::ObjectRegister() { return r3; } +// static +constexpr Register GrowArrayElementsDescriptor::KeyRegister() { return r6; } + +// static +constexpr Register BaselineLeaveFrameDescriptor::ParamsSizeRegister() { + // TODO(v8:11421): Implement on this platform. + return r6; +} +// static +constexpr Register BaselineLeaveFrameDescriptor::WeightRegister() { + // TODO(v8:11421): Implement on this platform. + return r7; +} + +// static +// static +constexpr Register TypeConversionDescriptor::ArgumentRegister() { return r3; } + +// static +constexpr auto TypeofDescriptor::registers() { return RegisterArray(r6); } + +// static +constexpr auto CallTrampolineDescriptor::registers() { + // r3 : number of arguments + // r4 : the target to call + return RegisterArray(r4, r3); +} + +// static +constexpr auto CallVarargsDescriptor::registers() { + // r3 : number of arguments (on the stack, not including receiver) + // r4 : the target to call + // r7 : arguments list length (untagged) + // r5 : arguments list (FixedArray) + return RegisterArray(r4, r3, r7, r5); +} + +// static +constexpr auto CallForwardVarargsDescriptor::registers() { + // r3 : number of arguments + // r5 : start index (to support rest parameters) + // r4 : the target to call + return RegisterArray(r4, r3, r5); +} + +// static +constexpr auto CallFunctionTemplateDescriptor::registers() { + // r4 : function template info + // r5 : number of arguments (on the stack, not including receiver) + return RegisterArray(r4, r5); +} + +// static +constexpr auto CallWithSpreadDescriptor::registers() { + // r3 : number of arguments (on the stack, not including receiver) + // r4 : the target to call + // r5 : the object to spread + return RegisterArray(r4, r3, r5); +} + +// static +constexpr auto CallWithArrayLikeDescriptor::registers() { + // r4 : the target to call + // r5 : the arguments list + return RegisterArray(r4, r5); +} + +// static +constexpr auto ConstructVarargsDescriptor::registers() { + // r3 : number of arguments (on the stack, not including receiver) + // r4 : the target to call + // r6 : the new target + // r7 : arguments list length (untagged) + // r5 : arguments list (FixedArray) + return RegisterArray(r4, r6, r3, r7, r5); +} + +// static +constexpr auto ConstructForwardVarargsDescriptor::registers() { + // r3 : number of arguments + // r6 : the new target + // r5 : start index (to support rest parameters) + // r4 : the target to call + return RegisterArray(r4, r6, r3, r5); +} + +// static +constexpr auto ConstructWithSpreadDescriptor::registers() { + // r3 : number of arguments (on the stack, not including receiver) + // r4 : the target to call + // r6 : the new target + // r5 : the object to spread + return RegisterArray(r4, r6, r3, r5); +} + +// static +constexpr auto ConstructWithArrayLikeDescriptor::registers() { + // r4 : the target to call + // r6 : the new target + // r5 : the arguments list + return RegisterArray(r4, r6, r5); +} + +// static +constexpr auto ConstructStubDescriptor::registers() { + // r3 : number of arguments + // r4 : the target to call + // r6 : the new target + // r5 : allocation site or undefined + return RegisterArray(r4, r6, r3, r5); +} + +// static +constexpr auto AbortDescriptor::registers() { return RegisterArray(r4); } + +// static +constexpr auto CompareDescriptor::registers() { return RegisterArray(r4, r3); } + +// static +constexpr auto Compare_BaselineDescriptor::registers() { + // TODO(v8:11421): Implement on this platform. + return DefaultRegisterArray(); +} + +// static +constexpr auto BinaryOpDescriptor::registers() { return RegisterArray(r4, r3); } + +// static +constexpr auto BinaryOp_BaselineDescriptor::registers() { + // TODO(v8:11421): Implement on this platform. + return DefaultRegisterArray(); +} + +// static +constexpr auto ApiCallbackDescriptor::registers() { + return RegisterArray(r4, // kApiFunctionAddress + r5, // kArgc + r6, // kCallData + r3); // kHolder +} + +// static +constexpr auto InterpreterDispatchDescriptor::registers() { + return RegisterArray( + kInterpreterAccumulatorRegister, kInterpreterBytecodeOffsetRegister, + kInterpreterBytecodeArrayRegister, kInterpreterDispatchTableRegister); +} + +// static +constexpr auto InterpreterPushArgsThenCallDescriptor::registers() { + return RegisterArray(r3, // argument count (not including receiver) + r5, // address of first argument + r4); // the target callable to be call +} + +// static +constexpr auto InterpreterPushArgsThenConstructDescriptor::registers() { + return RegisterArray( + r3, // argument count (not including receiver) + r7, // address of the first argument + r4, // constructor to call + r6, // new target + r5); // allocation site feedback if available, undefined otherwise +} + +// static +constexpr auto ResumeGeneratorDescriptor::registers() { + return RegisterArray(r3, // the value to pass to the generator + r4); // the JSGeneratorObject to resume +} + +// static +constexpr auto RunMicrotasksEntryDescriptor::registers() { + return RegisterArray(r3, r4); +} + +} // namespace internal +} // namespace v8 + +#endif // V8_TARGET_ARCH_PPC || V8_TARGET_ARCH_PPC64 + +#endif // V8_CODEGEN_PPC_INTERFACE_DESCRIPTORS_PPC_INL_H_ diff --git a/deps/v8/src/codegen/ppc/interface-descriptors-ppc.cc b/deps/v8/src/codegen/ppc/interface-descriptors-ppc.cc deleted file mode 100644 index ed304e80fc..0000000000 --- a/deps/v8/src/codegen/ppc/interface-descriptors-ppc.cc +++ /dev/null @@ -1,306 +0,0 @@ -// Copyright 2014 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#if V8_TARGET_ARCH_PPC || V8_TARGET_ARCH_PPC64 - -#include "src/codegen/interface-descriptors.h" - -#include "src/execution/frames.h" - -namespace v8 { -namespace internal { - -const Register CallInterfaceDescriptor::ContextRegister() { return cp; } - -void CallInterfaceDescriptor::DefaultInitializePlatformSpecific( - CallInterfaceDescriptorData* data, int register_parameter_count) { - const Register default_stub_registers[] = {r3, r4, r5, r6, r7}; - CHECK_LE(static_cast<size_t>(register_parameter_count), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(register_parameter_count, - default_stub_registers); -} - -void RecordWriteDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - const Register default_stub_registers[] = {r3, r4, r5, r6, r7}; - - data->RestrictAllocatableRegisters(default_stub_registers, - arraysize(default_stub_registers)); - - CHECK_LE(static_cast<size_t>(kParameterCount), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(kParameterCount, default_stub_registers); -} - -void DynamicCheckMapsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register default_stub_registers[] = {r3, r4, r5, r6, cp}; - - data->RestrictAllocatableRegisters(default_stub_registers, - arraysize(default_stub_registers)); - - CHECK_LE(static_cast<size_t>(kParameterCount), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(kParameterCount, default_stub_registers); -} - -void EphemeronKeyBarrierDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - const Register default_stub_registers[] = {r3, r4, r5, r6, r7}; - - data->RestrictAllocatableRegisters(default_stub_registers, - arraysize(default_stub_registers)); - - CHECK_LE(static_cast<size_t>(kParameterCount), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(kParameterCount, default_stub_registers); -} - -const Register LoadDescriptor::ReceiverRegister() { return r4; } -const Register LoadDescriptor::NameRegister() { return r5; } -const Register LoadDescriptor::SlotRegister() { return r3; } - -const Register LoadWithVectorDescriptor::VectorRegister() { return r6; } - -const Register -LoadWithReceiverAndVectorDescriptor::LookupStartObjectRegister() { - return r7; -} - -const Register StoreDescriptor::ReceiverRegister() { return r4; } -const Register StoreDescriptor::NameRegister() { return r5; } -const Register StoreDescriptor::ValueRegister() { return r3; } -const Register StoreDescriptor::SlotRegister() { return r7; } - -const Register StoreWithVectorDescriptor::VectorRegister() { return r6; } - -const Register StoreTransitionDescriptor::SlotRegister() { return r7; } -const Register StoreTransitionDescriptor::VectorRegister() { return r6; } -const Register StoreTransitionDescriptor::MapRegister() { return r8; } - -const Register ApiGetterDescriptor::HolderRegister() { return r3; } -const Register ApiGetterDescriptor::CallbackRegister() { return r6; } - -const Register GrowArrayElementsDescriptor::ObjectRegister() { return r3; } -const Register GrowArrayElementsDescriptor::KeyRegister() { return r6; } - -const Register BaselineLeaveFrameDescriptor::ParamsSizeRegister() { - // TODO(v8:11421): Implement on this platform. - UNREACHABLE(); -} -const Register BaselineLeaveFrameDescriptor::WeightRegister() { - // TODO(v8:11421): Implement on this platform. - UNREACHABLE(); -} - -// static -const Register TypeConversionDescriptor::ArgumentRegister() { return r3; } - -void TypeofDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {r6}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallTrampolineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r3 : number of arguments - // r4 : the target to call - Register registers[] = {r4, r3}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r3 : number of arguments (on the stack, not including receiver) - // r4 : the target to call - // r7 : arguments list length (untagged) - // r5 : arguments list (FixedArray) - Register registers[] = {r4, r3, r7, r5}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallForwardVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r3 : number of arguments - // r5 : start index (to support rest parameters) - // r4 : the target to call - Register registers[] = {r4, r3, r5}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallFunctionTemplateDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r4 : function template info - // r5 : number of arguments (on the stack, not including receiver) - Register registers[] = {r4, r5}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallWithSpreadDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r3 : number of arguments (on the stack, not including receiver) - // r4 : the target to call - // r5 : the object to spread - Register registers[] = {r4, r3, r5}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallWithArrayLikeDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r4 : the target to call - // r5 : the arguments list - Register registers[] = {r4, r5}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r3 : number of arguments (on the stack, not including receiver) - // r4 : the target to call - // r6 : the new target - // r7 : arguments list length (untagged) - // r5 : arguments list (FixedArray) - Register registers[] = {r4, r6, r3, r7, r5}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructForwardVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r3 : number of arguments - // r6 : the new target - // r5 : start index (to support rest parameters) - // r4 : the target to call - Register registers[] = {r4, r6, r3, r5}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructWithSpreadDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r3 : number of arguments (on the stack, not including receiver) - // r4 : the target to call - // r6 : the new target - // r5 : the object to spread - Register registers[] = {r4, r6, r3, r5}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructWithArrayLikeDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r4 : the target to call - // r6 : the new target - // r5 : the arguments list - Register registers[] = {r4, r6, r5}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructStubDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r3 : number of arguments - // r4 : the target to call - // r6 : the new target - // r5 : allocation site or undefined - Register registers[] = {r4, r6, r3, r5}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void AbortDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {r4}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CompareDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {r4, r3}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void Compare_BaselineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // TODO(v8:11421): Implement on this platform. - InitializePlatformUnimplemented(data, kParameterCount); -} - -void BinaryOpDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {r4, r3}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void BinaryOp_BaselineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // TODO(v8:11421): Implement on this platform. - InitializePlatformUnimplemented(data, kParameterCount); -} - -void ApiCallbackDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - r4, // kApiFunctionAddress - r5, // kArgc - r6, // kCallData - r3, // kHolder - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void InterpreterDispatchDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - kInterpreterAccumulatorRegister, kInterpreterBytecodeOffsetRegister, - kInterpreterBytecodeArrayRegister, kInterpreterDispatchTableRegister}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void InterpreterPushArgsThenCallDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - r3, // argument count (not including receiver) - r5, // address of first argument - r4 // the target callable to be call - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void InterpreterPushArgsThenConstructDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - r3, // argument count (not including receiver) - r7, // address of the first argument - r4, // constructor to call - r6, // new target - r5, // allocation site feedback if available, undefined otherwise - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ResumeGeneratorDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - r3, // the value to pass to the generator - r4 // the JSGeneratorObject to resume - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void FrameDropperTrampolineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - r4, // loaded new FP - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void RunMicrotasksEntryDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {r3, r4}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -} // namespace internal -} // namespace v8 - -#endif // V8_TARGET_ARCH_PPC || V8_TARGET_ARCH_PPC64 diff --git a/deps/v8/src/codegen/ppc/macro-assembler-ppc.cc b/deps/v8/src/codegen/ppc/macro-assembler-ppc.cc index 658a41f381..e9bce8411f 100644 --- a/deps/v8/src/codegen/ppc/macro-assembler-ppc.cc +++ b/deps/v8/src/codegen/ppc/macro-assembler-ppc.cc @@ -12,6 +12,7 @@ #include "src/codegen/callable.h" #include "src/codegen/code-factory.h" #include "src/codegen/external-reference-table.h" +#include "src/codegen/interface-descriptors-inl.h" #include "src/codegen/macro-assembler.h" #include "src/codegen/register-configuration.h" #include "src/debug/debug.h" @@ -55,7 +56,7 @@ int TurboAssembler::RequiredStackSizeForCallerSaved(SaveFPRegsMode fp_mode, RegList list = kJSCallerSaved & ~exclusions; bytes += NumRegs(list) * kSystemPointerSize; - if (fp_mode == kSaveFPRegs) { + if (fp_mode == SaveFPRegsMode::kSave) { bytes += kNumCallerSavedDoubles * kDoubleSize; } @@ -80,7 +81,7 @@ int TurboAssembler::PushCallerSaved(SaveFPRegsMode fp_mode, Register exclusion1, MultiPush(list); bytes += NumRegs(list) * kSystemPointerSize; - if (fp_mode == kSaveFPRegs) { + if (fp_mode == SaveFPRegsMode::kSave) { MultiPushDoubles(kCallerSavedDoubles); bytes += kNumCallerSavedDoubles * kDoubleSize; } @@ -91,7 +92,7 @@ int TurboAssembler::PushCallerSaved(SaveFPRegsMode fp_mode, Register exclusion1, int TurboAssembler::PopCallerSaved(SaveFPRegsMode fp_mode, Register exclusion1, Register exclusion2, Register exclusion3) { int bytes = 0; - if (fp_mode == kSaveFPRegs) { + if (fp_mode == SaveFPRegsMode::kSave) { MultiPopDoubles(kCallerSavedDoubles); bytes += kNumCallerSavedDoubles * kDoubleSize; } @@ -133,7 +134,7 @@ void TurboAssembler::LoadFromConstantsTable(Register destination, } void TurboAssembler::LoadRootRelative(Register destination, int32_t offset) { - LoadP(destination, MemOperand(kRootRegister, offset), r0); + LoadU64(destination, MemOperand(kRootRegister, offset), r0); } void TurboAssembler::LoadRootRegisterOffset(Register destination, @@ -184,7 +185,7 @@ void TurboAssembler::Jump(Handle<Code> code, RelocInfo::Mode rmode, Register scratch = ip; int offset = code->builtin_index() * kSystemPointerSize + IsolateData::builtin_entry_table_offset(); - LoadP(scratch, MemOperand(kRootRegister, offset), r0); + LoadU64(scratch, MemOperand(kRootRegister, offset), r0); if (cond != al) b(NegateCondition(cond), &skip, cr); Jump(scratch); bind(&skip); @@ -214,9 +215,9 @@ void TurboAssembler::Jump(const ExternalReference& reference) { if (ABI_USES_FUNCTION_DESCRIPTORS) { // AIX uses a function descriptor. When calling C code be // aware of this descriptor and pick up values from it. - LoadP(ToRegister(ABI_TOC_REGISTER), - MemOperand(scratch, kSystemPointerSize)); - LoadP(scratch, MemOperand(scratch, 0)); + LoadU64(ToRegister(ABI_TOC_REGISTER), + MemOperand(scratch, kSystemPointerSize)); + LoadU64(scratch, MemOperand(scratch, 0)); } Jump(scratch); } @@ -272,7 +273,7 @@ void TurboAssembler::Call(Handle<Code> code, RelocInfo::Mode rmode, Label skip; int offset = code->builtin_index() * kSystemPointerSize + IsolateData::builtin_entry_table_offset(); - LoadP(ip, MemOperand(kRootRegister, offset)); + LoadU64(ip, MemOperand(kRootRegister, offset)); if (cond != al) b(NegateCondition(cond), &skip); Call(ip); bind(&skip); @@ -411,7 +412,7 @@ void TurboAssembler::MultiPop(RegList regs, Register location) { for (int16_t i = 0; i < Register::kNumRegisters; i++) { if ((regs & (1 << i)) != 0) { - LoadP(ToRegister(i), MemOperand(location, stack_offset)); + LoadU64(ToRegister(i), MemOperand(location, stack_offset)); stack_offset += kSystemPointerSize; } } @@ -442,7 +443,7 @@ void TurboAssembler::MultiPushV128(RegList dregs, Register location) { Simd128Register dreg = Simd128Register::from_code(i); stack_offset -= kSimd128Size; li(ip, Operand(stack_offset)); - StoreSimd128(dreg, MemOperand(location, ip), r0, kScratchSimd128Reg); + StoreSimd128(dreg, MemOperand(location, ip)); } } } @@ -467,7 +468,7 @@ void TurboAssembler::MultiPopV128(RegList dregs, Register location) { if ((dregs & (1 << i)) != 0) { Simd128Register dreg = Simd128Register::from_code(i); li(ip, Operand(stack_offset)); - LoadSimd128(dreg, MemOperand(location, ip), r0, kScratchSimd128Reg); + LoadSimd128(dreg, MemOperand(location, ip)); stack_offset += kSimd128Size; } } @@ -477,8 +478,8 @@ void TurboAssembler::MultiPopV128(RegList dregs, Register location) { void TurboAssembler::LoadRoot(Register destination, RootIndex index, Condition cond) { DCHECK(cond == al); - LoadP(destination, - MemOperand(kRootRegister, RootRegisterOffsetForRootIndex(index)), r0); + LoadU64(destination, + MemOperand(kRootRegister, RootRegisterOffsetForRootIndex(index)), r0); } void TurboAssembler::LoadTaggedPointerField(const Register& destination, @@ -487,7 +488,7 @@ void TurboAssembler::LoadTaggedPointerField(const Register& destination, if (COMPRESS_POINTERS_BOOL) { DecompressTaggedPointer(destination, field_operand); } else { - LoadP(destination, field_operand, scratch); + LoadU64(destination, field_operand, scratch); } } @@ -497,7 +498,7 @@ void TurboAssembler::LoadAnyTaggedField(const Register& destination, if (COMPRESS_POINTERS_BOOL) { DecompressAnyTagged(destination, field_operand); } else { - LoadP(destination, field_operand, scratch); + LoadU64(destination, field_operand, scratch); } } @@ -505,7 +506,7 @@ void TurboAssembler::SmiUntag(Register dst, const MemOperand& src, RCBit rc) { if (SmiValuesAre31Bits()) { lwz(dst, src); } else { - LoadP(dst, src); + LoadU64(dst, src); } SmiUntag(dst, rc); @@ -550,7 +551,7 @@ void TurboAssembler::DecompressTaggedSigned(Register destination, void TurboAssembler::DecompressTaggedSigned(Register destination, MemOperand field_operand) { RecordComment("[ DecompressTaggedSigned"); - LoadWord(destination, field_operand, r0); + LoadU32(destination, field_operand, r0); RecordComment("]"); } @@ -565,7 +566,7 @@ void TurboAssembler::DecompressTaggedPointer(Register destination, void TurboAssembler::DecompressTaggedPointer(Register destination, MemOperand field_operand) { RecordComment("[ DecompressTaggedPointer"); - LoadWord(destination, field_operand, r0); + LoadU32(destination, field_operand, r0); add(destination, destination, kRootRegister); RecordComment("]"); } @@ -573,7 +574,7 @@ void TurboAssembler::DecompressTaggedPointer(Register destination, void TurboAssembler::DecompressAnyTagged(Register destination, MemOperand field_operand) { RecordComment("[ DecompressAnyTagged"); - LoadWord(destination, field_operand, r0); + LoadU32(destination, field_operand, r0); add(destination, destination, kRootRegister); RecordComment("]"); } @@ -597,7 +598,7 @@ void MacroAssembler::RecordWriteField(Register object, int offset, Label done; // Skip barrier if writing a smi. - if (smi_check == INLINE_SMI_CHECK) { + if (smi_check == SmiCheck::kInline) { JumpIfSmi(value, &done); } @@ -606,7 +607,7 @@ void MacroAssembler::RecordWriteField(Register object, int offset, DCHECK(IsAligned(offset, kTaggedSize)); Add(dst, object, offset - kHeapObjectTag, r0); - if (emit_debug_code()) { + if (FLAG_debug_code) { Label ok; andi(r0, dst, Operand(kTaggedSize - 1)); beq(&ok, cr0); @@ -615,13 +616,13 @@ void MacroAssembler::RecordWriteField(Register object, int offset, } RecordWrite(object, dst, value, lr_status, save_fp, remembered_set_action, - OMIT_SMI_CHECK); + SmiCheck::kOmit); bind(&done); // Clobber clobbered input registers when running with the debug-code flag // turned on to provoke errors. - if (emit_debug_code()) { + if (FLAG_debug_code) { mov(value, Operand(bit_cast<intptr_t>(kZapValue + 4))); mov(dst, Operand(bit_cast<intptr_t>(kZapValue + 8))); } @@ -752,13 +753,13 @@ void MacroAssembler::RecordWrite(Register object, Register address, RememberedSetAction remembered_set_action, SmiCheck smi_check) { DCHECK(object != value); - if (emit_debug_code()) { + if (FLAG_debug_code) { LoadTaggedPointerField(r0, MemOperand(address)); cmp(r0, value); Check(eq, AbortReason::kWrongAddressOrValuePassedToRecordWrite); } - if ((remembered_set_action == OMIT_REMEMBERED_SET && + if ((remembered_set_action == RememberedSetAction::kOmit && !FLAG_incremental_marking) || FLAG_disable_write_barriers) { return; @@ -768,7 +769,7 @@ void MacroAssembler::RecordWrite(Register object, Register address, // catch stores of smis and stores into the young generation. Label done; - if (smi_check == INLINE_SMI_CHECK) { + if (smi_check == SmiCheck::kInline) { JumpIfSmi(value, &done); } @@ -794,7 +795,7 @@ void MacroAssembler::RecordWrite(Register object, Register address, // Clobber clobbered registers when running with the debug-code flag // turned on to provoke errors. - if (emit_debug_code()) { + if (FLAG_debug_code) { mov(address, Operand(bit_cast<intptr_t>(kZapValue + 12))); mov(value, Operand(bit_cast<intptr_t>(kZapValue + 16))); } @@ -849,12 +850,12 @@ void TurboAssembler::PushStandardFrame(Register function_reg) { void TurboAssembler::RestoreFrameStateForTailCall() { if (FLAG_enable_embedded_constant_pool) { - LoadP(kConstantPoolRegister, - MemOperand(fp, StandardFrameConstants::kConstantPoolOffset)); + LoadU64(kConstantPoolRegister, + MemOperand(fp, StandardFrameConstants::kConstantPoolOffset)); set_constant_pool_available(false); } - LoadP(r0, MemOperand(fp, StandardFrameConstants::kCallerPCOffset)); - LoadP(fp, MemOperand(fp, StandardFrameConstants::kCallerFPOffset)); + LoadU64(r0, MemOperand(fp, StandardFrameConstants::kCallerPCOffset)); + LoadU64(fp, MemOperand(fp, StandardFrameConstants::kCallerFPOffset)); mtlr(r0); } @@ -1174,11 +1175,11 @@ int TurboAssembler::LeaveFrame(StackFrame::Type type, int stack_adjustment) { // Drop the execution stack down to the frame pointer and restore // the caller's state. int frame_ends; - LoadP(r0, MemOperand(fp, StandardFrameConstants::kCallerPCOffset)); - LoadP(ip, MemOperand(fp, StandardFrameConstants::kCallerFPOffset)); + LoadU64(r0, MemOperand(fp, StandardFrameConstants::kCallerPCOffset)); + LoadU64(ip, MemOperand(fp, StandardFrameConstants::kCallerFPOffset)); if (FLAG_enable_embedded_constant_pool) { - LoadP(kConstantPoolRegister, - MemOperand(fp, StandardFrameConstants::kConstantPoolOffset)); + LoadU64(kConstantPoolRegister, + MemOperand(fp, StandardFrameConstants::kConstantPoolOffset)); } mtlr(r0); frame_ends = pc_offset(); @@ -1221,7 +1222,7 @@ void MacroAssembler::EnterExitFrame(bool save_doubles, int stack_space, // Reserve room for saved entry sp. subi(sp, fp, Operand(ExitFrameConstants::kFixedFrameSizeFromFp)); - if (emit_debug_code()) { + if (FLAG_debug_code) { li(r8, Operand::Zero()); StoreP(r8, MemOperand(fp, ExitFrameConstants::kSPOffset)); } @@ -1305,7 +1306,7 @@ void MacroAssembler::LeaveExitFrame(bool save_doubles, Register argument_count, // Restore current context from top and clear it in debug mode. Move(ip, ExternalReference::Create(IsolateAddressId::kContextAddress, isolate())); - LoadP(cp, MemOperand(ip)); + LoadU64(cp, MemOperand(ip)); #ifdef DEBUG mov(r6, Operand(Context::kInvalidContext)); @@ -1393,7 +1394,7 @@ void MacroAssembler::LoadStackLimit(Register destination, StackLimitKind kind) { intptr_t offset = TurboAssembler::RootRegisterOffsetForExternalReference(isolate, limit); CHECK(is_int32(offset)); - LoadP(destination, MemOperand(kRootRegister, offset), r0); + LoadU64(destination, MemOperand(kRootRegister, offset), r0); } void MacroAssembler::StackOverflowCheck(Register num_args, Register scratch, @@ -1413,7 +1414,7 @@ void MacroAssembler::StackOverflowCheck(Register num_args, Register scratch, void MacroAssembler::InvokePrologue(Register expected_parameter_count, Register actual_parameter_count, - Label* done, InvokeFlag flag) { + Label* done, InvokeType type) { Label regular_invoke; // r3: actual arguments count @@ -1528,9 +1529,9 @@ void MacroAssembler::CheckDebugHook(Register fun, Register new_target, void MacroAssembler::InvokeFunctionCode(Register function, Register new_target, Register expected_parameter_count, Register actual_parameter_count, - InvokeFlag flag) { + InvokeType type) { // You can't call a function without a valid frame. - DCHECK_IMPLIES(flag == CALL_FUNCTION, has_frame()); + DCHECK_IMPLIES(type == InvokeType::kCall, has_frame()); DCHECK_EQ(function, r4); DCHECK_IMPLIES(new_target.is_valid(), new_target == r6); @@ -1544,18 +1545,20 @@ void MacroAssembler::InvokeFunctionCode(Register function, Register new_target, } Label done; - InvokePrologue(expected_parameter_count, actual_parameter_count, &done, flag); + InvokePrologue(expected_parameter_count, actual_parameter_count, &done, type); // We call indirectly through the code field in the function to // allow recompilation to take effect without changing any of the // call sites. Register code = kJavaScriptCallCodeStartRegister; LoadTaggedPointerField(code, FieldMemOperand(function, JSFunction::kCodeOffset)); - if (flag == CALL_FUNCTION) { - CallCodeObject(code); - } else { - DCHECK(flag == JUMP_FUNCTION); - JumpCodeObject(code); + switch (type) { + case InvokeType::kCall: + CallCodeObject(code); + break; + case InvokeType::kJump: + JumpCodeObject(code); + break; } // Continue here if InvokePrologue does handle the invocation due to @@ -1565,9 +1568,9 @@ void MacroAssembler::InvokeFunctionCode(Register function, Register new_target, void MacroAssembler::InvokeFunctionWithNewTarget( Register fun, Register new_target, Register actual_parameter_count, - InvokeFlag flag) { + InvokeType type) { // You can't call a function without a valid frame. - DCHECK_IMPLIES(flag == CALL_FUNCTION, has_frame()); + DCHECK_IMPLIES(type == InvokeType::kCall, has_frame()); // Contract with called JS functions requires that function is passed in r4. DCHECK_EQ(fun, r4); @@ -1583,15 +1586,15 @@ void MacroAssembler::InvokeFunctionWithNewTarget( temp_reg, SharedFunctionInfo::kFormalParameterCountOffset)); InvokeFunctionCode(fun, new_target, expected_reg, actual_parameter_count, - flag); + type); } void MacroAssembler::InvokeFunction(Register function, Register expected_parameter_count, Register actual_parameter_count, - InvokeFlag flag) { + InvokeType type) { // You can't call a function without a valid frame. - DCHECK_IMPLIES(flag == CALL_FUNCTION, has_frame()); + DCHECK_IMPLIES(type == InvokeType::kCall, has_frame()); // Contract with called JS functions requires that function is passed in r4. DCHECK_EQ(function, r4); @@ -1600,18 +1603,7 @@ void MacroAssembler::InvokeFunction(Register function, LoadTaggedPointerField(cp, FieldMemOperand(r4, JSFunction::kContextOffset)); InvokeFunctionCode(r4, no_reg, expected_parameter_count, - actual_parameter_count, flag); -} - -void MacroAssembler::MaybeDropFrames() { - // Check whether we need to drop frames to restart a function on the stack. - ExternalReference restart_fp = - ExternalReference::debug_restart_fp_address(isolate()); - Move(r4, restart_fp); - LoadP(r4, MemOperand(r4)); - cmpi(r4, Operand::Zero()); - Jump(BUILTIN_CODE(isolate(), FrameDropperTrampoline), RelocInfo::CODE_TARGET, - ne); + actual_parameter_count, type); } void MacroAssembler::PushStackHandler() { @@ -1625,7 +1617,7 @@ void MacroAssembler::PushStackHandler() { // Preserve r4-r8. Move(r3, ExternalReference::Create(IsolateAddressId::kHandlerAddress, isolate())); - LoadP(r0, MemOperand(r3)); + LoadU64(r0, MemOperand(r3)); push(r0); // Set this new handler as the current one. @@ -1806,7 +1798,7 @@ void TurboAssembler::TruncateDoubleToI(Isolate* isolate, Zone* zone, Call(BUILTIN_CODE(isolate, DoubleToI), RelocInfo::CODE_TARGET); } - LoadP(result, MemOperand(sp)); + LoadU64(result, MemOperand(sp)); addi(sp, sp, Operand(kDoubleSize)); pop(r0); mtlr(r0); @@ -1873,8 +1865,8 @@ void MacroAssembler::TailCallRuntime(Runtime::FunctionId fid) { void MacroAssembler::JumpToExternalReference(const ExternalReference& builtin, bool builtin_exit_frame) { Move(r4, builtin); - Handle<Code> code = CodeFactory::CEntry(isolate(), 1, kDontSaveFPRegs, - kArgvOnStack, builtin_exit_frame); + Handle<Code> code = CodeFactory::CEntry(isolate(), 1, SaveFPRegsMode::kIgnore, + ArgvMode::kStack, builtin_exit_frame); Jump(code, RelocInfo::CODE_TARGET); } @@ -1921,7 +1913,7 @@ void MacroAssembler::DecrementCounter(StatsCounter* counter, int value, } void TurboAssembler::Assert(Condition cond, AbortReason reason, CRegister cr) { - if (emit_debug_code()) Check(cond, reason, cr); + if (FLAG_debug_code) Check(cond, reason, cr); } void TurboAssembler::Check(Condition cond, AbortReason reason, CRegister cr) { @@ -1935,11 +1927,11 @@ void TurboAssembler::Check(Condition cond, AbortReason reason, CRegister cr) { void TurboAssembler::Abort(AbortReason reason) { Label abort_start; bind(&abort_start); -#ifdef DEBUG - const char* msg = GetAbortReason(reason); - RecordComment("Abort message: "); - RecordComment(msg); -#endif + if (FLAG_code_comments) { + const char* msg = GetAbortReason(reason); + RecordComment("Abort message: "); + RecordComment(msg); + } // Avoid emitting call to builtin if requested. if (trap_on_abort()) { @@ -1984,7 +1976,7 @@ void MacroAssembler::LoadNativeContextSlot(Register dst, int index) { } void MacroAssembler::AssertNotSmi(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { STATIC_ASSERT(kSmiTag == 0); TestIfSmi(object, r0); Check(ne, AbortReason::kOperandIsASmi, cr0); @@ -1992,7 +1984,7 @@ void MacroAssembler::AssertNotSmi(Register object) { } void MacroAssembler::AssertSmi(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { STATIC_ASSERT(kSmiTag == 0); TestIfSmi(object, r0); Check(eq, AbortReason::kOperandIsNotASmi, cr0); @@ -2000,7 +1992,7 @@ void MacroAssembler::AssertSmi(Register object) { } void MacroAssembler::AssertConstructor(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { STATIC_ASSERT(kSmiTag == 0); TestIfSmi(object, r0); Check(ne, AbortReason::kOperandIsASmiAndNotAConstructor, cr0); @@ -2014,7 +2006,7 @@ void MacroAssembler::AssertConstructor(Register object) { } void MacroAssembler::AssertFunction(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { STATIC_ASSERT(kSmiTag == 0); TestIfSmi(object, r0); Check(ne, AbortReason::kOperandIsASmiAndNotAFunction, cr0); @@ -2028,7 +2020,7 @@ void MacroAssembler::AssertFunction(Register object) { } void MacroAssembler::AssertBoundFunction(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { STATIC_ASSERT(kSmiTag == 0); TestIfSmi(object, r0); Check(ne, AbortReason::kOperandIsASmiAndNotABoundFunction, cr0); @@ -2040,7 +2032,7 @@ void MacroAssembler::AssertBoundFunction(Register object) { } void MacroAssembler::AssertGeneratorObject(Register object) { - if (!emit_debug_code()) return; + if (!FLAG_debug_code) return; TestIfSmi(object, r0); Check(ne, AbortReason::kOperandIsASmiAndNotAGeneratorObject, cr0); @@ -2070,7 +2062,7 @@ void MacroAssembler::AssertGeneratorObject(Register object) { void MacroAssembler::AssertUndefinedOrAllocationSite(Register object, Register scratch) { - if (emit_debug_code()) { + if (FLAG_debug_code) { Label done_checking; AssertNotSmi(object); CompareRoot(object, RootIndex::kUndefinedValue); @@ -2217,9 +2209,9 @@ void TurboAssembler::CallCFunctionHelper(Register function, if (ABI_USES_FUNCTION_DESCRIPTORS && has_function_descriptor) { // AIX/PPC64BE Linux uses a function descriptor. When calling C code be // aware of this descriptor and pick up values from it - LoadP(ToRegister(ABI_TOC_REGISTER), - MemOperand(function, kSystemPointerSize)); - LoadP(ip, MemOperand(function, 0)); + LoadU64(ToRegister(ABI_TOC_REGISTER), + MemOperand(function, kSystemPointerSize)); + LoadU64(ip, MemOperand(function, 0)); dest = ip; } else if (ABI_CALL_VIA_IP) { // pLinux and Simualtor, not AIX @@ -2251,7 +2243,7 @@ void TurboAssembler::CallCFunctionHelper(Register function, CalculateStackPassedWords(num_reg_arguments, num_double_arguments); int stack_space = kNumRequiredStackFrameSlots + stack_passed_arguments; if (ActivationFrameAlignment() > kSystemPointerSize) { - LoadP(sp, MemOperand(sp, stack_space * kSystemPointerSize)); + LoadU64(sp, MemOperand(sp, stack_space * kSystemPointerSize)); } else { addi(sp, sp, Operand(stack_space * kSystemPointerSize)); } @@ -2263,7 +2255,7 @@ void TurboAssembler::CheckPageFlag( int mask, Condition cc, Label* condition_met) { DCHECK(cc == ne || cc == eq); ClearRightImm(scratch, object, Operand(kPageSizeBits)); - LoadP(scratch, MemOperand(scratch, BasicMemoryChunk::kFlagsOffset)); + LoadU64(scratch, MemOperand(scratch, BasicMemoryChunk::kFlagsOffset)); mov(r0, Operand(mask)); and_(r0, scratch, r0, SetRC); @@ -2703,8 +2695,8 @@ void MacroAssembler::AndSmiLiteral(Register dst, Register src, Smi smi, } // Load a "pointer" sized value from the memory location -void TurboAssembler::LoadP(Register dst, const MemOperand& mem, - Register scratch) { +void TurboAssembler::LoadU64(Register dst, const MemOperand& mem, + Register scratch) { DCHECK_EQ(mem.rb(), no_reg); int offset = mem.offset(); int misaligned = (offset & 3); @@ -2797,43 +2789,41 @@ void TurboAssembler::StorePU(Register src, const MemOperand& mem, } } -void TurboAssembler::LoadWordArith(Register dst, const MemOperand& mem, - Register scratch) { +void TurboAssembler::LoadS32(Register dst, const MemOperand& mem, + Register scratch) { int offset = mem.offset(); if (!is_int16(offset)) { - DCHECK(scratch != no_reg); + CHECK(scratch != no_reg); mov(scratch, Operand(offset)); lwax(dst, MemOperand(mem.ra(), scratch)); } else { -#if V8_TARGET_ARCH_PPC64 int misaligned = (offset & 3); if (misaligned) { // adjust base to conform to offset alignment requirements // Todo: enhance to use scratch if dst is unsuitable - DCHECK(dst != r0); + CHECK(dst != r0); addi(dst, mem.ra(), Operand((offset & 3) - 4)); lwa(dst, MemOperand(dst, (offset & ~3) + 4)); } else { lwa(dst, mem); } -#else - lwz(dst, mem); -#endif } } // Variable length depending on whether offset fits into immediate field // MemOperand currently only supports d-form -void TurboAssembler::LoadWord(Register dst, const MemOperand& mem, - Register scratch) { +void TurboAssembler::LoadU32(Register dst, const MemOperand& mem, + Register scratch) { Register base = mem.ra(); int offset = mem.offset(); if (!is_int16(offset)) { - LoadIntLiteral(scratch, offset); + CHECK(scratch != no_reg); + mov(scratch, Operand(offset)); lwzx(dst, MemOperand(base, scratch)); } else { + // lwz can handle offset misalign lwz(dst, mem); } } @@ -2992,22 +2982,8 @@ void TurboAssembler::LoadSingleU(DoubleRegister dst, const MemOperand& mem, } } -void TurboAssembler::LoadSimd128(Simd128Register dst, const MemOperand& mem, - Register ScratchReg, - Simd128Register ScratchDoubleReg) { - // lvx needs the stack to be 16 byte aligned. - // We first use lxvd/stxvd to copy the content on an aligned address. lxvd - // itself reverses the lanes so it cannot be used as is. - lxvd(ScratchDoubleReg, mem); - mr(ScratchReg, sp); - ClearRightImm( - sp, sp, - Operand(base::bits::WhichPowerOfTwo(16))); // equivalent to &= -16 - addi(sp, sp, Operand(-16)); - stxvd(ScratchDoubleReg, MemOperand(r0, sp)); - // Load it with correct lane ordering. - lvx(dst, MemOperand(r0, sp)); - mr(sp, ScratchReg); +void TurboAssembler::LoadSimd128(Simd128Register dst, const MemOperand& mem) { + lxvx(dst, mem); } void TurboAssembler::StoreDouble(DoubleRegister src, const MemOperand& mem, @@ -3062,21 +3038,8 @@ void TurboAssembler::StoreSingleU(DoubleRegister src, const MemOperand& mem, } } -void TurboAssembler::StoreSimd128(Simd128Register src, const MemOperand& mem, - Register ScratchReg, - Simd128Register ScratchDoubleReg) { - // stvx needs the stack to be 16 byte aligned. - // We use lxvd/stxvd to store the content on an aligned address. stxvd - // itself reverses the lanes so it cannot be used as is. - mr(ScratchReg, sp); - ClearRightImm( - sp, sp, - Operand(base::bits::WhichPowerOfTwo(16))); // equivalent to &= -16 - addi(sp, sp, Operand(-16)); - stvx(src, MemOperand(r0, sp)); - lxvd(ScratchDoubleReg, MemOperand(r0, sp)); - mr(sp, ScratchReg); - stxvd(ScratchDoubleReg, mem); +void TurboAssembler::StoreSimd128(Simd128Register src, const MemOperand& mem) { + stxvx(src, mem); } Register GetRegisterThatIsNotOneOf(Register reg1, Register reg2, Register reg3, @@ -3115,7 +3078,7 @@ void TurboAssembler::SwapP(Register src, MemOperand dst, Register scratch) { DCHECK(!AreAliased(src, dst.rb(), scratch)); DCHECK(!AreAliased(src, scratch)); mr(scratch, src); - LoadP(src, dst, r0); + LoadU64(src, dst, r0); StoreP(scratch, dst, r0); } @@ -3137,14 +3100,14 @@ void TurboAssembler::SwapP(MemOperand src, MemOperand dst, Register scratch_0, src = dst; dst = temp; } - LoadP(scratch_1, dst, scratch_0); - LoadP(scratch_0, src); + LoadU64(scratch_1, dst, scratch_0); + LoadU64(scratch_0, src); StoreP(scratch_1, src); StoreP(scratch_0, dst, scratch_1); } else { - LoadP(scratch_1, dst, scratch_0); + LoadU64(scratch_1, dst, scratch_0); push(scratch_1); - LoadP(scratch_0, src, scratch_1); + LoadU64(scratch_0, src, scratch_1); StoreP(scratch_0, dst, scratch_1); pop(scratch_1); StoreP(scratch_1, src, scratch_0); @@ -3218,13 +3181,13 @@ void TurboAssembler::SwapSimd128(Simd128Register src, MemOperand dst, DCHECK(src != scratch); // push v0, to be used as scratch addi(sp, sp, Operand(-kSimd128Size)); - StoreSimd128(v0, MemOperand(r0, sp), r0, scratch); + StoreSimd128(v0, MemOperand(r0, sp)); mov(ip, Operand(dst.offset())); - LoadSimd128(v0, MemOperand(dst.ra(), ip), r0, scratch); - StoreSimd128(src, MemOperand(dst.ra(), ip), r0, scratch); + LoadSimd128(v0, MemOperand(dst.ra(), ip)); + StoreSimd128(src, MemOperand(dst.ra(), ip)); vor(src, v0, v0); // restore v0 - LoadSimd128(v0, MemOperand(r0, sp), ip, scratch); + LoadSimd128(v0, MemOperand(r0, sp)); addi(sp, sp, Operand(kSimd128Size)); } @@ -3232,23 +3195,23 @@ void TurboAssembler::SwapSimd128(MemOperand src, MemOperand dst, Simd128Register scratch) { // push v0 and v1, to be used as scratch addi(sp, sp, Operand(2 * -kSimd128Size)); - StoreSimd128(v0, MemOperand(r0, sp), ip, scratch); + StoreSimd128(v0, MemOperand(r0, sp)); li(ip, Operand(kSimd128Size)); - StoreSimd128(v1, MemOperand(ip, sp), r0, scratch); + StoreSimd128(v1, MemOperand(ip, sp)); mov(ip, Operand(src.offset())); - LoadSimd128(v0, MemOperand(src.ra(), ip), r0, scratch); + LoadSimd128(v0, MemOperand(src.ra(), ip)); mov(ip, Operand(dst.offset())); - LoadSimd128(v1, MemOperand(dst.ra(), ip), r0, scratch); + LoadSimd128(v1, MemOperand(dst.ra(), ip)); - StoreSimd128(v0, MemOperand(dst.ra(), ip), r0, scratch); + StoreSimd128(v0, MemOperand(dst.ra(), ip)); mov(ip, Operand(src.offset())); - StoreSimd128(v1, MemOperand(src.ra(), ip), r0, scratch); + StoreSimd128(v1, MemOperand(src.ra(), ip)); // restore v0 and v1 - LoadSimd128(v0, MemOperand(r0, sp), ip, scratch); + LoadSimd128(v0, MemOperand(r0, sp)); li(ip, Operand(kSimd128Size)); - LoadSimd128(v1, MemOperand(ip, sp), r0, scratch); + LoadSimd128(v1, MemOperand(ip, sp)); addi(sp, sp, Operand(2 * kSimd128Size)); } @@ -3313,7 +3276,7 @@ void TurboAssembler::LoadCodeObjectEntry(Register destination, // Check whether the Code object is an off-heap trampoline. If so, call its // (off-heap) entry point directly without going through the (on-heap) // trampoline. Otherwise, just call the Code object as always. - LoadWordArith(scratch, FieldMemOperand(code_object, Code::kFlagsOffset)); + LoadS32(scratch, FieldMemOperand(code_object, Code::kFlagsOffset)); mov(r0, Operand(Code::IsOffHeapTrampoline::kMask)); and_(r0, scratch, r0, SetRC); bne(&if_code_is_off_heap, cr0); @@ -3326,13 +3289,12 @@ void TurboAssembler::LoadCodeObjectEntry(Register destination, // An off-heap trampoline, the entry point is loaded from the builtin entry // table. bind(&if_code_is_off_heap); - LoadWordArith(scratch, - FieldMemOperand(code_object, Code::kBuiltinIndexOffset)); + LoadS32(scratch, FieldMemOperand(code_object, Code::kBuiltinIndexOffset)); ShiftLeftImm(destination, scratch, Operand(kSystemPointerSizeLog2)); add(destination, destination, kRootRegister); - LoadP(destination, - MemOperand(destination, IsolateData::builtin_entry_table_offset()), - r0); + LoadU64(destination, + MemOperand(destination, IsolateData::builtin_entry_table_offset()), + r0); bind(&out); } else { @@ -3366,8 +3328,9 @@ void TurboAssembler::StoreReturnAddressAndCall(Register target) { if (ABI_USES_FUNCTION_DESCRIPTORS) { // AIX/PPC64BE Linux uses a function descriptor. When calling C code be // aware of this descriptor and pick up values from it - LoadP(ToRegister(ABI_TOC_REGISTER), MemOperand(target, kSystemPointerSize)); - LoadP(ip, MemOperand(target, 0)); + LoadU64(ToRegister(ABI_TOC_REGISTER), + MemOperand(target, kSystemPointerSize)); + LoadU64(ip, MemOperand(target, 0)); dest = ip; } else if (ABI_CALL_VIA_IP && dest != ip) { Move(ip, target); @@ -3388,8 +3351,8 @@ void TurboAssembler::CallForDeoptimization(Builtins::Name target, int, Label* exit, DeoptimizeKind kind, Label* ret, Label*) { BlockTrampolinePoolScope block_trampoline_pool(this); - LoadP(ip, MemOperand(kRootRegister, - IsolateData::builtin_entry_slot_offset(target))); + LoadU64(ip, MemOperand(kRootRegister, + IsolateData::builtin_entry_slot_offset(target))); Call(ip); DCHECK_EQ(SizeOfCodeGeneratedSince(exit), (kind == DeoptimizeKind::kLazy) diff --git a/deps/v8/src/codegen/ppc/macro-assembler-ppc.h b/deps/v8/src/codegen/ppc/macro-assembler-ppc.h index 1d8f3a388d..f657f90f76 100644 --- a/deps/v8/src/codegen/ppc/macro-assembler-ppc.h +++ b/deps/v8/src/codegen/ppc/macro-assembler-ppc.h @@ -28,8 +28,6 @@ inline MemOperand FieldMemOperand(Register object, int offset) { return MemOperand(object, offset - kHeapObjectTag); } -enum RememberedSetAction { EMIT_REMEMBERED_SET, OMIT_REMEMBERED_SET }; -enum SmiCheck { INLINE_SMI_CHECK, OMIT_SMI_CHECK }; enum LinkRegisterStatus { kLRHasNotBeenSaved, kLRHasBeenSaved }; Register GetRegisterThatIsNotOneOf(Register reg1, Register reg2 = no_reg, @@ -149,10 +147,9 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase { } // These exist to provide portability between 32 and 64bit - void LoadP(Register dst, const MemOperand& mem, Register scratch = no_reg); + void LoadU64(Register dst, const MemOperand& mem, Register scratch = no_reg); void LoadPU(Register dst, const MemOperand& mem, Register scratch = no_reg); - void LoadWordArith(Register dst, const MemOperand& mem, - Register scratch = no_reg); + void LoadS32(Register dst, const MemOperand& mem, Register scratch = no_reg); void StoreP(Register src, const MemOperand& mem, Register scratch = no_reg); void StorePU(Register src, const MemOperand& mem, Register scratch = no_reg); @@ -161,8 +158,7 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase { void LoadFloat32(DoubleRegister dst, const MemOperand& mem, Register scratch = no_reg); void LoadDoubleLiteral(DoubleRegister result, Double value, Register scratch); - void LoadSimd128(Simd128Register dst, const MemOperand& mem, - Register ScratchReg, Simd128Register ScratchDoubleReg); + void LoadSimd128(Simd128Register dst, const MemOperand& mem); // load a literal signed int value <value> to GPR <dst> void LoadIntLiteral(Register dst, int value); @@ -185,8 +181,7 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase { Register scratch = no_reg); void StoreSingleU(DoubleRegister src, const MemOperand& mem, Register scratch = no_reg); - void StoreSimd128(Simd128Register src, const MemOperand& mem, - Register ScratchReg, Simd128Register ScratchDoubleReg); + void StoreSimd128(Simd128Register src, const MemOperand& mem); void Cmpi(Register src1, const Operand& src2, Register scratch, CRegister cr = cr7); @@ -253,36 +248,36 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase { // Pop two registers. Pops rightmost register first (from lower address). void Pop(Register src1, Register src2) { - LoadP(src2, MemOperand(sp, 0)); - LoadP(src1, MemOperand(sp, kSystemPointerSize)); + LoadU64(src2, MemOperand(sp, 0)); + LoadU64(src1, MemOperand(sp, kSystemPointerSize)); addi(sp, sp, Operand(2 * kSystemPointerSize)); } // Pop three registers. Pops rightmost register first (from lower address). void Pop(Register src1, Register src2, Register src3) { - LoadP(src3, MemOperand(sp, 0)); - LoadP(src2, MemOperand(sp, kSystemPointerSize)); - LoadP(src1, MemOperand(sp, 2 * kSystemPointerSize)); + LoadU64(src3, MemOperand(sp, 0)); + LoadU64(src2, MemOperand(sp, kSystemPointerSize)); + LoadU64(src1, MemOperand(sp, 2 * kSystemPointerSize)); addi(sp, sp, Operand(3 * kSystemPointerSize)); } // Pop four registers. Pops rightmost register first (from lower address). void Pop(Register src1, Register src2, Register src3, Register src4) { - LoadP(src4, MemOperand(sp, 0)); - LoadP(src3, MemOperand(sp, kSystemPointerSize)); - LoadP(src2, MemOperand(sp, 2 * kSystemPointerSize)); - LoadP(src1, MemOperand(sp, 3 * kSystemPointerSize)); + LoadU64(src4, MemOperand(sp, 0)); + LoadU64(src3, MemOperand(sp, kSystemPointerSize)); + LoadU64(src2, MemOperand(sp, 2 * kSystemPointerSize)); + LoadU64(src1, MemOperand(sp, 3 * kSystemPointerSize)); addi(sp, sp, Operand(4 * kSystemPointerSize)); } // Pop five registers. Pops rightmost register first (from lower address). void Pop(Register src1, Register src2, Register src3, Register src4, Register src5) { - LoadP(src5, MemOperand(sp, 0)); - LoadP(src4, MemOperand(sp, kSystemPointerSize)); - LoadP(src3, MemOperand(sp, 2 * kSystemPointerSize)); - LoadP(src2, MemOperand(sp, 3 * kSystemPointerSize)); - LoadP(src1, MemOperand(sp, 4 * kSystemPointerSize)); + LoadU64(src5, MemOperand(sp, 0)); + LoadU64(src4, MemOperand(sp, kSystemPointerSize)); + LoadU64(src3, MemOperand(sp, 2 * kSystemPointerSize)); + LoadU64(src2, MemOperand(sp, 3 * kSystemPointerSize)); + LoadU64(src1, MemOperand(sp, 4 * kSystemPointerSize)); addi(sp, sp, Operand(5 * kSystemPointerSize)); } @@ -716,7 +711,7 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase { void DecompressAnyTagged(Register destination, MemOperand field_operand); void DecompressAnyTagged(Register destination, Register source); - void LoadWord(Register dst, const MemOperand& mem, Register scratch); + void LoadU32(Register dst, const MemOperand& mem, Register scratch); void StoreWord(Register src, const MemOperand& mem, Register scratch); private: @@ -743,7 +738,7 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { // TODO(victorgomes): Remove this function once we stick with the reversed // arguments order. void LoadReceiver(Register dest, Register argc) { - LoadP(dest, MemOperand(sp, 0)); + LoadU64(dest, MemOperand(sp, 0)); } void StoreReceiver(Register rec, Register argc, Register scratch) { @@ -761,8 +756,8 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { void RecordWriteField( Register object, int offset, Register value, Register scratch, LinkRegisterStatus lr_status, SaveFPRegsMode save_fp, - RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, - SmiCheck smi_check = INLINE_SMI_CHECK); + RememberedSetAction remembered_set_action = RememberedSetAction::kEmit, + SmiCheck smi_check = SmiCheck::kInline); // For a given |object| notify the garbage collector that the slot |address| // has been written. |value| is the object being stored. The value and @@ -770,8 +765,8 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { void RecordWrite( Register object, Register address, Register value, LinkRegisterStatus lr_status, SaveFPRegsMode save_fp, - RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, - SmiCheck smi_check = INLINE_SMI_CHECK); + RememberedSetAction remembered_set_action = RememberedSetAction::kEmit, + SmiCheck smi_check = SmiCheck::kInline); // Enter exit frame. // stack_space - extra stack space, used for parameters before call to C. @@ -837,7 +832,7 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { // Invoke the JavaScript function code by either calling or jumping. void InvokeFunctionCode(Register function, Register new_target, Register expected_parameter_count, - Register actual_parameter_count, InvokeFlag flag); + Register actual_parameter_count, InvokeType type); // On function call, call into the debugger if necessary. void CheckDebugHook(Register fun, Register new_target, @@ -848,12 +843,9 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { // current context to the context in the function before invoking. void InvokeFunctionWithNewTarget(Register function, Register new_target, Register actual_parameter_count, - InvokeFlag flag); + InvokeType type); void InvokeFunction(Register function, Register expected_parameter_count, - Register actual_parameter_count, InvokeFlag flag); - - // Frame restart support - void MaybeDropFrames(); + Register actual_parameter_count, InvokeType type); // Exception handling @@ -926,22 +918,22 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { // Call a runtime routine. void CallRuntime(const Runtime::Function* f, int num_arguments, - SaveFPRegsMode save_doubles = kDontSaveFPRegs); + SaveFPRegsMode save_doubles = SaveFPRegsMode::kIgnore); void CallRuntimeSaveDoubles(Runtime::FunctionId fid) { const Runtime::Function* function = Runtime::FunctionForId(fid); - CallRuntime(function, function->nargs, kSaveFPRegs); + CallRuntime(function, function->nargs, SaveFPRegsMode::kSave); } // Convenience function: Same as above, but takes the fid instead. void CallRuntime(Runtime::FunctionId fid, - SaveFPRegsMode save_doubles = kDontSaveFPRegs) { + SaveFPRegsMode save_doubles = SaveFPRegsMode::kIgnore) { const Runtime::Function* function = Runtime::FunctionForId(fid); CallRuntime(function, function->nargs, save_doubles); } // Convenience function: Same as above, but takes the fid instead. void CallRuntime(Runtime::FunctionId fid, int num_arguments, - SaveFPRegsMode save_doubles = kDontSaveFPRegs) { + SaveFPRegsMode save_doubles = SaveFPRegsMode::kIgnore) { CallRuntime(Runtime::FunctionForId(fid), num_arguments, save_doubles); } @@ -1053,7 +1045,7 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { // Helper functions for generating invokes. void InvokePrologue(Register expected_parameter_count, Register actual_parameter_count, Label* done, - InvokeFlag flag); + InvokeType type); DISALLOW_IMPLICIT_CONSTRUCTORS(MacroAssembler); }; diff --git a/deps/v8/src/codegen/register-arch.h b/deps/v8/src/codegen/register-arch.h index 3936ee80cc..eb4cdb8789 100644 --- a/deps/v8/src/codegen/register-arch.h +++ b/deps/v8/src/codegen/register-arch.h @@ -41,6 +41,27 @@ constexpr bool ShouldPadArguments(int argument_count) { return ArgumentPaddingSlots(argument_count) != 0; } +#ifdef DEBUG +struct CountIfValidRegisterFunctor { + template <typename RegType> + constexpr int operator()(int count, RegType reg) const { + return count + (reg.is_valid() ? 1 : 0); + } +}; + +template <typename RegType, typename... RegTypes, + // All arguments must be either Register or DoubleRegister. + typename = typename std::enable_if< + base::is_same<Register, RegType, RegTypes...>::value || + base::is_same<DoubleRegister, RegType, RegTypes...>::value>::type> +inline constexpr bool AreAliased(RegType first_reg, RegTypes... regs) { + int num_different_regs = NumRegs(RegType::ListOf(first_reg, regs...)); + int num_given_regs = + base::fold(CountIfValidRegisterFunctor{}, 0, first_reg, regs...); + return num_different_regs < num_given_regs; +} +#endif + } // namespace internal } // namespace v8 diff --git a/deps/v8/src/codegen/register.h b/deps/v8/src/codegen/register.h index 57f3a1c62a..49f67ceb1d 100644 --- a/deps/v8/src/codegen/register.h +++ b/deps/v8/src/codegen/register.h @@ -33,7 +33,7 @@ class RegisterBase { static constexpr SubType no_reg() { return SubType{kCode_no_reg}; } static constexpr SubType from_code(int code) { - CONSTEXPR_DCHECK(base::IsInRange(code, 0, kNumRegisters - 1)); + DCHECK(base::IsInRange(code, 0, kNumRegisters - 1)); return SubType{code}; } @@ -45,7 +45,7 @@ class RegisterBase { constexpr bool is_valid() const { return reg_code_ != kCode_no_reg; } constexpr int code() const { - CONSTEXPR_DCHECK(is_valid()); + DCHECK(is_valid()); return reg_code_; } diff --git a/deps/v8/src/codegen/reloc-info.cc b/deps/v8/src/codegen/reloc-info.cc index 753b34bdbf..4781e7609b 100644 --- a/deps/v8/src/codegen/reloc-info.cc +++ b/deps/v8/src/codegen/reloc-info.cc @@ -4,6 +4,7 @@ #include "src/codegen/reloc-info.h" +#include "src/base/vlq.h" #include "src/codegen/assembler-inl.h" #include "src/codegen/code-reference.h" #include "src/codegen/external-reference-encoder.h" @@ -56,11 +57,10 @@ const char* const RelocInfo::kFillerCommentString = "DEOPTIMIZATION PADDING"; // the following record in the usual way. The long pc jump record has variable // length: // pc-jump: [PC_JUMP] 11 -// [7 bits data] 0 +// 1 [7 bits data] // ... -// [7 bits data] 1 -// (Bits 6..31 of pc delta, with leading zeroes -// dropped, and last non-zero chunk tagged with 1.) +// 0 [7 bits data] +// (Bits 6..31 of pc delta, encoded with VLQ.) const int kTagBits = 2; const int kTagMask = (1 << kTagBits) - 1; @@ -75,12 +75,6 @@ const int kSmallPCDeltaBits = kBitsPerByte - kTagBits; const int kSmallPCDeltaMask = (1 << kSmallPCDeltaBits) - 1; const int RelocInfo::kMaxSmallPCDelta = kSmallPCDeltaMask; -const int kChunkBits = 7; -const int kChunkMask = (1 << kChunkBits) - 1; -const int kLastChunkTagBits = 1; -const int kLastChunkTagMask = 1; -const int kLastChunkTag = 1; - uint32_t RelocInfoWriter::WriteLongPCJump(uint32_t pc_delta) { // Return if the pc_delta can fit in kSmallPCDeltaBits bits. // Otherwise write a variable length PC jump for the bits that do @@ -89,13 +83,12 @@ uint32_t RelocInfoWriter::WriteLongPCJump(uint32_t pc_delta) { WriteMode(RelocInfo::PC_JUMP); uint32_t pc_jump = pc_delta >> kSmallPCDeltaBits; DCHECK_GT(pc_jump, 0); - // Write kChunkBits size chunks of the pc_jump. - for (; pc_jump > 0; pc_jump = pc_jump >> kChunkBits) { - byte b = pc_jump & kChunkMask; - *--pos_ = b << kLastChunkTagBits; - } - // Tag the last chunk so it can be identified. - *pos_ = *pos_ | kLastChunkTag; + base::VLQEncodeUnsigned( + [this](byte byte) { + *--pos_ = byte; + return pos_; + }, + pc_jump); // Return the remaining kSmallPCDeltaBits of the pc_delta. return pc_delta & kSmallPCDeltaMask; } @@ -205,14 +198,8 @@ void RelocIterator::AdvanceReadData() { void RelocIterator::AdvanceReadLongPCJump() { // Read the 32-kSmallPCDeltaBits most significant bits of the - // pc jump in kChunkBits bit chunks and shift them into place. - // Stop when the last chunk is encountered. - uint32_t pc_jump = 0; - for (int i = 0; i < kIntSize; i++) { - byte pc_jump_part = *--pos_; - pc_jump |= (pc_jump_part >> kLastChunkTagBits) << i * kChunkBits; - if ((pc_jump_part & kLastChunkTagMask) == 1) break; - } + // pc jump as a VLQ encoded integer. + uint32_t pc_jump = base::VLQDecodeUnsigned([this] { return *--pos_; }); // The least significant kSmallPCDeltaBits bits will be added // later. rinfo_.pc_ += pc_jump << kSmallPCDeltaBits; @@ -450,7 +437,7 @@ const char* RelocInfo::RelocModeName(RelocInfo::Mode rmode) { return "unknown relocation type"; } -void RelocInfo::Print(Isolate* isolate, std::ostream& os) { // NOLINT +void RelocInfo::Print(Isolate* isolate, std::ostream& os) { os << reinterpret_cast<const void*>(pc_) << " " << RelocModeName(rmode_); if (rmode_ == DEOPT_SCRIPT_OFFSET || rmode_ == DEOPT_INLINING_ID) { os << " (" << data() << ")"; diff --git a/deps/v8/src/codegen/reloc-info.h b/deps/v8/src/codegen/reloc-info.h index bef433e10b..e8b3c0b98b 100644 --- a/deps/v8/src/codegen/reloc-info.h +++ b/deps/v8/src/codegen/reloc-info.h @@ -328,8 +328,8 @@ class RelocInfo { #ifdef ENABLE_DISASSEMBLER // Printing static const char* RelocModeName(Mode rmode); - void Print(Isolate* isolate, std::ostream& os); // NOLINT -#endif // ENABLE_DISASSEMBLER + void Print(Isolate* isolate, std::ostream& os); +#endif // ENABLE_DISASSEMBLER #ifdef VERIFY_HEAP void Verify(Isolate* isolate); #endif diff --git a/deps/v8/src/codegen/riscv64/assembler-riscv64-inl.h b/deps/v8/src/codegen/riscv64/assembler-riscv64-inl.h index 40bd56d15b..d301a00bf4 100644 --- a/deps/v8/src/codegen/riscv64/assembler-riscv64-inl.h +++ b/deps/v8/src/codegen/riscv64/assembler-riscv64-inl.h @@ -63,11 +63,15 @@ void RelocInfo::apply(intptr_t delta) { if (IsInternalReference(rmode_) || IsInternalReferenceEncoded(rmode_)) { // Absolute code pointer inside code object moves with the code object. Assembler::RelocateInternalReference(rmode_, pc_, delta); + } else { + DCHECK(IsRelativeCodeTarget(rmode_)); + Assembler::RelocateRelativeReference(rmode_, pc_, delta); } } Address RelocInfo::target_address() { - DCHECK(IsCodeTarget(rmode_) || IsRuntimeEntry(rmode_) || IsWasmCall(rmode_)); + DCHECK(IsCodeTargetMode(rmode_) || IsRuntimeEntry(rmode_) || + IsWasmCall(rmode_)); return Assembler::target_address_at(pc_, constant_pool_); } @@ -133,9 +137,13 @@ HeapObject RelocInfo::target_object_no_host(Isolate* isolate) { } Handle<HeapObject> RelocInfo::target_object_handle(Assembler* origin) { - DCHECK(IsCodeTarget(rmode_) || IsFullEmbeddedObject(rmode_)); - return Handle<HeapObject>(reinterpret_cast<Address*>( - Assembler::target_address_at(pc_, constant_pool_))); + if (IsCodeTarget(rmode_) || IsFullEmbeddedObject(rmode_)) { + return Handle<HeapObject>(reinterpret_cast<Address*>( + Assembler::target_address_at(pc_, constant_pool_))); + } else { + DCHECK(IsRelativeCodeTarget(rmode_)); + return origin->relative_code_target_object_handle_at(pc_); + } } void RelocInfo::set_target_object(Heap* heap, HeapObject target, @@ -163,11 +171,11 @@ void RelocInfo::set_target_external_reference( } Address RelocInfo::target_internal_reference() { - if (rmode_ == INTERNAL_REFERENCE) { + if (IsInternalReference(rmode_)) { return Memory<Address>(pc_); } else { // Encoded internal references are j/jal instructions. - DCHECK(rmode_ == INTERNAL_REFERENCE_ENCODED); + DCHECK(IsInternalReferenceEncoded(rmode_)); DCHECK(Assembler::IsLui(Assembler::instr_at(pc_ + 0 * kInstrSize))); Address address = Assembler::target_address_at(pc_); return address; @@ -175,10 +183,20 @@ Address RelocInfo::target_internal_reference() { } Address RelocInfo::target_internal_reference_address() { - DCHECK(rmode_ == INTERNAL_REFERENCE || rmode_ == INTERNAL_REFERENCE_ENCODED); + DCHECK(IsInternalReference(rmode_) || IsInternalReferenceEncoded(rmode_)); return pc_; } +Handle<Code> Assembler::relative_code_target_object_handle_at( + Address pc) const { + Instr instr1 = Assembler::instr_at(pc); + Instr instr2 = Assembler::instr_at(pc + kInstrSize); + DCHECK(IsAuipc(instr1)); + DCHECK(IsJalr(instr2)); + int32_t code_target_index = BrachlongOffset(instr1, instr2); + return GetCodeTarget(code_target_index); +} + Address RelocInfo::target_runtime_entry(Assembler* origin) { DCHECK(IsRuntimeEntry(rmode_)); return target_address(); diff --git a/deps/v8/src/codegen/riscv64/assembler-riscv64.cc b/deps/v8/src/codegen/riscv64/assembler-riscv64.cc index 914ea26f9f..35c56ccdf5 100644 --- a/deps/v8/src/codegen/riscv64/assembler-riscv64.cc +++ b/deps/v8/src/codegen/riscv64/assembler-riscv64.cc @@ -128,7 +128,8 @@ Register ToRegister(int num) { const int RelocInfo::kApplyMask = RelocInfo::ModeMask(RelocInfo::INTERNAL_REFERENCE) | - RelocInfo::ModeMask(RelocInfo::INTERNAL_REFERENCE_ENCODED); + RelocInfo::ModeMask(RelocInfo::INTERNAL_REFERENCE_ENCODED) | + RelocInfo::ModeMask(RelocInfo::RELATIVE_CODE_TARGET); bool RelocInfo::IsCodedSpecially() { // The deserializer needs to know whether a pointer is specially coded. Being @@ -454,6 +455,16 @@ static inline Instr SetAuipcOffset(int32_t offset, Instr instr) { return instr; } +static inline Instr SetJalrOffset(int32_t offset, Instr instr) { + DCHECK(Assembler::IsJalr(instr)); + DCHECK(is_int12(offset)); + instr &= ~kImm12Mask; + int32_t imm12 = offset << kImm12Shift; + DCHECK(Assembler::IsJalr(instr | (imm12 & kImm12Mask))); + DCHECK(Assembler::JalrOffset(instr | (imm12 & kImm12Mask)) == offset); + return instr | (imm12 & kImm12Mask); +} + static inline Instr SetJalOffset(int32_t pos, int32_t target_pos, Instr instr) { DCHECK(Assembler::IsJal(instr)); int32_t imm = target_pos - pos; @@ -689,17 +700,36 @@ int Assembler::CJumpOffset(Instr instr) { int Assembler::BrachlongOffset(Instr auipc, Instr instr_I) { DCHECK(reinterpret_cast<Instruction*>(&instr_I)->InstructionType() == InstructionBase::kIType); - const int kImm19_0Mask = ((1 << 20) - 1); - int32_t imm_auipc = auipc & (kImm19_0Mask << 12); - int32_t imm_12 = instr_I >> 20; - int32_t offset = imm_12 + imm_auipc; + DCHECK(IsAuipc(auipc)); + int32_t imm_auipc = AuipcOffset(auipc); + int32_t imm12 = (instr_I & kImm12Mask) >> 20; + int32_t offset = imm12 + imm_auipc; return offset; } +int Assembler::PatchBranchlongOffset(Address pc, Instr instr_auipc, + Instr instr_jalr, int32_t offset) { + DCHECK(IsAuipc(instr_auipc)); + DCHECK(IsJalr(instr_jalr)); + int32_t Hi20 = (((int32_t)offset + 0x800) >> 12); + int32_t Lo12 = (int32_t)offset << 20 >> 20; + CHECK(is_int32(offset)); + instr_at_put(pc, SetAuipcOffset(Hi20, instr_auipc)); + instr_at_put(pc + 4, SetJalrOffset(Lo12, instr_jalr)); + DCHECK(offset == + BrachlongOffset(Assembler::instr_at(pc), Assembler::instr_at(pc + 4))); + return 2; +} + int Assembler::LdOffset(Instr instr) { DCHECK(IsLd(instr)); int32_t imm12 = (instr & kImm12Mask) >> 20; - imm12 = imm12 << 12 >> 12; + return imm12; +} + +int Assembler::JalrOffset(Instr instr) { + DCHECK(IsJalr(instr)); + int32_t imm12 = (instr & kImm12Mask) >> 20; return imm12; } @@ -717,7 +747,7 @@ bool Assembler::MustUseReg(RelocInfo::Mode rmode) { } void Assembler::disassembleInstr(Instr instr) { - if (!FLAG_debug_riscv) return; + if (!FLAG_riscv_debug) return; disasm::NameConverter converter; disasm::Disassembler disasm(converter); EmbeddedVector<char, 128> disasm_buffer; @@ -2567,9 +2597,25 @@ void Assembler::AdjustBaseAndOffset(MemOperand* src, Register scratch, // Must not overwrite the register 'base' while loading 'offset'. DCHECK(src->rm() != scratch); - RV_li(scratch, src->offset()); - add(scratch, scratch, src->rm()); - src->offset_ = 0; + constexpr int32_t kMinOffsetForSimpleAdjustment = 0x7F8; + constexpr int32_t kMaxOffsetForSimpleAdjustment = + 2 * kMinOffsetForSimpleAdjustment; + if (0 <= src->offset() && src->offset() <= kMaxOffsetForSimpleAdjustment) { + addi(scratch, src->rm(), kMinOffsetForSimpleAdjustment); + src->offset_ -= kMinOffsetForSimpleAdjustment; + } else if (-kMaxOffsetForSimpleAdjustment <= src->offset() && + src->offset() < 0) { + addi(scratch, src->rm(), -kMinOffsetForSimpleAdjustment); + src->offset_ += kMinOffsetForSimpleAdjustment; + } else if (access_type == OffsetAccessType::SINGLE_ACCESS) { + RV_li(scratch, (static_cast<int64_t>(src->offset()) + 0x800) >> 12 << 12); + add(scratch, scratch, src->rm()); + src->offset_ = src->offset() << 20 >> 20; + } else { + RV_li(scratch, src->offset()); + add(scratch, scratch, src->rm()); + src->offset_ = 0; + } src->rm_ = scratch; } @@ -2596,6 +2642,22 @@ int Assembler::RelocateInternalReference(RelocInfo::Mode rmode, Address pc, } } +void Assembler::RelocateRelativeReference(RelocInfo::Mode rmode, Address pc, + intptr_t pc_delta) { + Instr instr = instr_at(pc); + Instr instr1 = instr_at(pc + 1 * kInstrSize); + DCHECK(RelocInfo::IsRelativeCodeTarget(rmode)); + if (IsAuipc(instr) && IsJalr(instr1)) { + int32_t imm; + imm = BrachlongOffset(instr, instr1); + imm -= pc_delta; + PatchBranchlongOffset(pc, instr, instr1, imm); + return; + } else { + UNREACHABLE(); + } +} + void Assembler::GrowBuffer() { DEBUG_PRINTF("GrowBuffer: %p -> ", buffer_start_); // Compute new buffer size. @@ -2766,12 +2828,23 @@ void Assembler::set_target_address_at(Address pc, Address constant_pool, ICacheFlushMode icache_flush_mode) { Instr* instr = reinterpret_cast<Instr*>(pc); if (IsAuipc(*instr)) { - DCHECK(IsLd(*reinterpret_cast<Instr*>(pc + 4))); - int32_t Hi20 = AuipcOffset(*instr); - int32_t Lo12 = LdOffset(*reinterpret_cast<Instr*>(pc + 4)); - Memory<Address>(pc + Hi20 + Lo12) = target; - if (icache_flush_mode != SKIP_ICACHE_FLUSH) { - FlushInstructionCache(pc + Hi20 + Lo12, 2 * kInstrSize); + if (IsLd(*reinterpret_cast<Instr*>(pc + 4))) { + int32_t Hi20 = AuipcOffset(*instr); + int32_t Lo12 = LdOffset(*reinterpret_cast<Instr*>(pc + 4)); + Memory<Address>(pc + Hi20 + Lo12) = target; + if (icache_flush_mode != SKIP_ICACHE_FLUSH) { + FlushInstructionCache(pc + Hi20 + Lo12, 2 * kInstrSize); + } + } else { + DCHECK(IsJalr(*reinterpret_cast<Instr*>(pc + 4))); + int64_t imm = (int64_t)target - (int64_t)pc; + Instr instr = instr_at(pc); + Instr instr1 = instr_at(pc + 1 * kInstrSize); + DCHECK(is_int32(imm)); + int num = PatchBranchlongOffset(pc, instr, instr1, (int32_t)imm); + if (icache_flush_mode != SKIP_ICACHE_FLUSH) { + FlushInstructionCache(pc, num * kInstrSize); + } } } else { set_target_address_at(pc, target, icache_flush_mode); @@ -2781,10 +2854,17 @@ void Assembler::set_target_address_at(Address pc, Address constant_pool, Address Assembler::target_address_at(Address pc, Address constant_pool) { Instr* instr = reinterpret_cast<Instr*>(pc); if (IsAuipc(*instr)) { - DCHECK(IsLd(*reinterpret_cast<Instr*>(pc + 4))); - int32_t Hi20 = AuipcOffset(*instr); - int32_t Lo12 = LdOffset(*reinterpret_cast<Instr*>(pc + 4)); - return Memory<Address>(pc + Hi20 + Lo12); + if (IsLd(*reinterpret_cast<Instr*>(pc + 4))) { + int32_t Hi20 = AuipcOffset(*instr); + int32_t Lo12 = LdOffset(*reinterpret_cast<Instr*>(pc + 4)); + return Memory<Address>(pc + Hi20 + Lo12); + } else { + DCHECK(IsJalr(*reinterpret_cast<Instr*>(pc + 4))); + int32_t Hi20 = AuipcOffset(*instr); + int32_t Lo12 = JalrOffset(*reinterpret_cast<Instr*>(pc + 4)); + return pc + Hi20 + Lo12; + } + } else { return target_address_at(pc); } @@ -2890,17 +2970,17 @@ bool UseScratchRegisterScope::hasAvailable() const { return *available_ != 0; } bool Assembler::IsConstantPoolAt(Instruction* instr) { // The constant pool marker is made of two instructions. These instructions // will never be emitted by the JIT, so checking for the first one is enough: - // 0: ld x0, t3, #offset + // 0: ld x0, x0, #offset Instr instr_value = *reinterpret_cast<Instr*>(instr); - - bool result = IsLd(instr_value) && (instr->RdValue() == kRegCode_zero_reg); - // It is still worth asserting the marker is complete. - // 4: j 0 + bool result = IsLd(instr_value) && (instr->Rs1Value() == kRegCode_zero_reg) && + (instr->RdValue() == kRegCode_zero_reg); #ifdef DEBUG - Instruction* instr_fllowing = instr + kInstrSize; - DCHECK(!result || (IsJal(*reinterpret_cast<Instr*>(instr_fllowing)) && - instr_fllowing->Imm20JValue() == 0 && - instr_fllowing->RdValue() == kRegCode_zero_reg)); + // It is still worth asserting the marker is complete. + // 1: j 0x0 + Instruction* instr_following = instr + kInstrSize; + DCHECK(!result || (IsJal(*reinterpret_cast<Instr*>(instr_following)) && + instr_following->Imm20JValue() == 0 && + instr_following->RdValue() == kRegCode_zero_reg)); #endif return result; } @@ -2941,9 +3021,9 @@ void ConstantPool::EmitPrologue(Alignment require_alignment) { int ConstantPool::PrologueSize(Jump require_jump) const { // Prologue is: - // j over ;; if require_jump - // ld x0, t3, #pool_size - // j xzr + // j over ;; if require_jump + // ld x0, x0, #pool_size + // j 0x0 int prologue_size = require_jump == Jump::kRequired ? kInstrSize : 0; prologue_size += 2 * kInstrSize; return prologue_size; @@ -2954,7 +3034,7 @@ void ConstantPool::SetLoadOffsetToConstPoolEntry(int load_offset, const ConstantPoolKey& key) { Instr instr_auipc = assm_->instr_at(load_offset); Instr instr_ld = assm_->instr_at(load_offset + 4); - // Instruction to patch must be 'ld t3, t3, offset' with offset == kInstrSize. + // Instruction to patch must be 'ld rd, offset(rd)' with 'offset == 0'. DCHECK(assm_->IsAuipc(instr_auipc)); DCHECK(assm_->IsLd(instr_ld)); DCHECK_EQ(assm_->LdOffset(instr_ld), 0); diff --git a/deps/v8/src/codegen/riscv64/assembler-riscv64.h b/deps/v8/src/codegen/riscv64/assembler-riscv64.h index 1dcf4e0aae..ff66351d6a 100644 --- a/deps/v8/src/codegen/riscv64/assembler-riscv64.h +++ b/deps/v8/src/codegen/riscv64/assembler-riscv64.h @@ -53,7 +53,7 @@ namespace v8 { namespace internal { #define DEBUG_PRINTF(...) \ - if (FLAG_debug_riscv) { \ + if (FLAG_riscv_debug) { \ printf(__VA_ARGS__); \ } @@ -160,6 +160,7 @@ class V8_EXPORT_PRIVATE Assembler : public AssemblerBase { virtual ~Assembler() { CHECK(constpool_.IsEmpty()); } + void AbortedCodeGeneration() { constpool_.Clear(); } // GetCode emits any pending (non-emitted) code and fills the descriptor desc. static constexpr int kNoHandlerTable = 0; static constexpr SafepointTableBuilder* kNoSafepointTable = nullptr; @@ -208,11 +209,14 @@ class V8_EXPORT_PRIVATE Assembler : public AssemblerBase { // Get offset from instr. int BranchOffset(Instr instr); - int BrachlongOffset(Instr auipc, Instr jalr); + static int BrachlongOffset(Instr auipc, Instr jalr); + static int PatchBranchlongOffset(Address pc, Instr auipc, Instr instr_I, + int32_t offset); int JumpOffset(Instr instr); int CJumpOffset(Instr instr); static int LdOffset(Instr instr); static int AuipcOffset(Instr instr); + static int JalrOffset(Instr instr); // Returns the branch offset to the given label from the current code // position. Links the label to the current position if it is still unbound. @@ -800,6 +804,8 @@ class V8_EXPORT_PRIVATE Assembler : public AssemblerBase { static int RelocateInternalReference(RelocInfo::Mode rmode, Address pc, intptr_t pc_delta); + static void RelocateRelativeReference(RelocInfo::Mode rmode, Address pc, + intptr_t pc_delta); // Writes a single byte or word of data in the code stream. Used for // inline tables, e.g., jump-tables. @@ -862,8 +868,40 @@ class V8_EXPORT_PRIVATE Assembler : public AssemblerBase { static bool IsLd(Instr instr); void CheckTrampolinePool(); + // Get the code target object for a pc-relative call or jump. + V8_INLINE Handle<Code> relative_code_target_object_handle_at( + Address pc_) const; + inline int UnboundLabelsCount() { return unbound_labels_count_; } + using BlockPoolsScope = BlockTrampolinePoolScope; + + void RecordConstPool(int size); + + void ForceConstantPoolEmissionWithoutJump() { + constpool_.Check(Emission::kForced, Jump::kOmitted); + } + void ForceConstantPoolEmissionWithJump() { + constpool_.Check(Emission::kForced, Jump::kRequired); + } + // Check if the const pool needs to be emitted while pretending that {margin} + // more bytes of instructions have already been emitted. + void EmitConstPoolWithJumpIfNeeded(size_t margin = 0) { + constpool_.Check(Emission::kIfNeeded, Jump::kRequired, margin); + } + + void EmitConstPoolWithoutJumpIfNeeded(size_t margin = 0) { + constpool_.Check(Emission::kIfNeeded, Jump::kOmitted, margin); + } + + void RecordEntry(uint32_t data, RelocInfo::Mode rmode) { + constpool_.RecordEntry(data, rmode); + } + + void RecordEntry(uint64_t data, RelocInfo::Mode rmode) { + constpool_.RecordEntry(data, rmode); + } + protected: // Readable constants for base and offset adjustment helper, these indicate if // aside from offset, another value like offset + 4 should fit into int16. @@ -949,34 +987,6 @@ class V8_EXPORT_PRIVATE Assembler : public AssemblerBase { } } - using BlockPoolsScope = BlockTrampolinePoolScope; - - void RecordConstPool(int size); - - void ForceConstantPoolEmissionWithoutJump() { - constpool_.Check(Emission::kForced, Jump::kOmitted); - } - void ForceConstantPoolEmissionWithJump() { - constpool_.Check(Emission::kForced, Jump::kRequired); - } - // Check if the const pool needs to be emitted while pretending that {margin} - // more bytes of instructions have already been emitted. - void EmitConstPoolWithJumpIfNeeded(size_t margin = 0) { - constpool_.Check(Emission::kIfNeeded, Jump::kRequired, margin); - } - - void EmitConstPoolWithoutJumpIfNeeded(size_t margin = 0) { - constpool_.Check(Emission::kIfNeeded, Jump::kOmitted, margin); - } - - void RecordEntry(uint32_t data, RelocInfo::Mode rmode) { - constpool_.RecordEntry(data, rmode); - } - - void RecordEntry(uint64_t data, RelocInfo::Mode rmode) { - constpool_.RecordEntry(data, rmode); - } - private: // Avoid overflows for displacements etc. static const int kMaximalBufferSize = 512 * MB; @@ -1231,6 +1241,16 @@ class V8_EXPORT_PRIVATE UseScratchRegisterScope { Register Acquire(); bool hasAvailable() const; + void Include(const RegList& list) { *available_ |= list; } + void Exclude(const RegList& list) { *available_ &= ~list; } + void Include(const Register& reg1, const Register& reg2 = no_reg) { + RegList list(reg1.bit() | reg2.bit()); + Include(list); + } + void Exclude(const Register& reg1, const Register& reg2 = no_reg) { + RegList list(reg1.bit() | reg2.bit()); + Exclude(list); + } private: RegList* available_; diff --git a/deps/v8/src/codegen/riscv64/constants-riscv64.cc b/deps/v8/src/codegen/riscv64/constants-riscv64.cc index 045488bf7f..d2709dc2c7 100644 --- a/deps/v8/src/codegen/riscv64/constants-riscv64.cc +++ b/deps/v8/src/codegen/riscv64/constants-riscv64.cc @@ -106,8 +106,11 @@ int FPURegisters::Number(const char* name) { } InstructionBase::Type InstructionBase::InstructionType() const { + if (IsIllegalInstruction()) { + return kUnsupported; + } // RV64C Instruction - if (IsShortInstruction()) { + if (FLAG_riscv_c_extension && IsShortInstruction()) { switch (InstructionBits() & kRvcOpcodeMask) { case RO_C_ADDI4SPN: return kCIWType; diff --git a/deps/v8/src/codegen/riscv64/constants-riscv64.h b/deps/v8/src/codegen/riscv64/constants-riscv64.h index 3b5ffff6da..c8f54d8f7f 100644 --- a/deps/v8/src/codegen/riscv64/constants-riscv64.h +++ b/deps/v8/src/codegen/riscv64/constants-riscv64.h @@ -8,6 +8,7 @@ #include "src/base/logging.h" #include "src/base/macros.h" #include "src/common/globals.h" +#include "src/flags/flags.h" // UNIMPLEMENTED_ macro for RISCV. #ifdef DEBUG @@ -55,8 +56,7 @@ const uint32_t kLessSignificantWordInDoublewordOffset = 4; namespace v8 { namespace internal { -// TODO(sigurds): Change this value once we use relative jumps. -constexpr size_t kMaxPCRelativeCodeRangeInMB = 0; +constexpr size_t kMaxPCRelativeCodeRangeInMB = 4096; // ----------------------------------------------------------------------------- // Registers and FPURegisters. @@ -727,18 +727,25 @@ class InstructionBase { kUnsupported = -1 }; + inline bool IsIllegalInstruction() const { + uint8_t FirstHalfWord = *reinterpret_cast<const uint16_t*>(this); + return FirstHalfWord == 0; + } + inline bool IsShortInstruction() const { uint8_t FirstByte = *reinterpret_cast<const uint8_t*>(this); return (FirstByte & 0x03) <= C2; } inline uint8_t InstructionSize() const { - return this->IsShortInstruction() ? kShortInstrSize : kInstrSize; + return (FLAG_riscv_c_extension && this->IsShortInstruction()) + ? kShortInstrSize + : kInstrSize; } // Get the raw instruction bits. inline Instr InstructionBits() const { - if (this->IsShortInstruction()) { + if (FLAG_riscv_c_extension && this->IsShortInstruction()) { return 0x0000FFFF & (*reinterpret_cast<const ShortInstr*>(this)); } return *reinterpret_cast<const Instr*>(this); diff --git a/deps/v8/src/codegen/riscv64/interface-descriptors-riscv64-inl.h b/deps/v8/src/codegen/riscv64/interface-descriptors-riscv64-inl.h new file mode 100644 index 0000000000..4a8bb0d9ee --- /dev/null +++ b/deps/v8/src/codegen/riscv64/interface-descriptors-riscv64-inl.h @@ -0,0 +1,265 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef V8_CODEGEN_RISCV64_INTERFACE_DESCRIPTORS_RISCV64_INL_H_ +#define V8_CODEGEN_RISCV64_INTERFACE_DESCRIPTORS_RISCV64_INL_H_ + +#if V8_TARGET_ARCH_RISCV64 + +#include "src/base/template-utils.h" +#include "src/codegen/interface-descriptors.h" +#include "src/execution/frames.h" + +namespace v8 { +namespace internal { + +constexpr auto CallInterfaceDescriptor::DefaultRegisterArray() { + auto registers = RegisterArray(a0, a1, a2, a3, a4); + STATIC_ASSERT(registers.size() == kMaxBuiltinRegisterParams); + return registers; +} + +// static +constexpr auto RecordWriteDescriptor::registers() { + return RegisterArray(a0, a1, a2, a3, kReturnRegister0); +} + +// static +constexpr auto DynamicCheckMapsDescriptor::registers() { + return RegisterArray(kReturnRegister0, a1, a2, a3, cp); +} + +// static +constexpr auto EphemeronKeyBarrierDescriptor::registers() { + return RegisterArray(a0, a1, a2, a3, kReturnRegister0); +} + +// static +constexpr Register LoadDescriptor::ReceiverRegister() { return a1; } +// static +constexpr Register LoadDescriptor::NameRegister() { return a2; } +// static +constexpr Register LoadDescriptor::SlotRegister() { return a0; } + +// static +constexpr Register LoadWithVectorDescriptor::VectorRegister() { return a3; } + +// static +constexpr Register +LoadWithReceiverAndVectorDescriptor::LookupStartObjectRegister() { + return a4; +} + +// static +constexpr Register StoreDescriptor::ReceiverRegister() { return a1; } +// static +constexpr Register StoreDescriptor::NameRegister() { return a2; } +// static +constexpr Register StoreDescriptor::ValueRegister() { return a0; } +// static +constexpr Register StoreDescriptor::SlotRegister() { return a4; } + +// static +constexpr Register StoreWithVectorDescriptor::VectorRegister() { return a3; } + +// static +constexpr Register StoreTransitionDescriptor::MapRegister() { return a5; } + +// static +constexpr Register ApiGetterDescriptor::HolderRegister() { return a0; } +// static +constexpr Register ApiGetterDescriptor::CallbackRegister() { return a3; } + +// static +constexpr Register GrowArrayElementsDescriptor::ObjectRegister() { return a0; } +// static +constexpr Register GrowArrayElementsDescriptor::KeyRegister() { return a3; } + +// static +constexpr Register BaselineLeaveFrameDescriptor::ParamsSizeRegister() { + return a2; +} +// static +constexpr Register BaselineLeaveFrameDescriptor::WeightRegister() { return a3; } + +// static +// static +constexpr Register TypeConversionDescriptor::ArgumentRegister() { return a0; } + +// static +constexpr auto TypeofDescriptor::registers() { return RegisterArray(a3); } + +// static +constexpr auto CallTrampolineDescriptor::registers() { + // a1: target + // a0: number of arguments + return RegisterArray(a1, a0); +} + +// static +constexpr auto CallVarargsDescriptor::registers() { + // a0 : number of arguments (on the stack, not including receiver) + // a1 : the target to call + // a4 : arguments list length (untagged) + // a2 : arguments list (FixedArray) + return RegisterArray(a1, a0, a4, a2); +} + +// static +constexpr auto CallForwardVarargsDescriptor::registers() { + // a1: target + // a0: number of arguments + // a2: start index (to supported rest parameters) + return RegisterArray(a1, a0, a2); +} + +// static +constexpr auto CallFunctionTemplateDescriptor::registers() { + // a1 : function template info + // a0 : number of arguments (on the stack, not including receiver) + return RegisterArray(a1, a0); +} + +// static +constexpr auto CallWithSpreadDescriptor::registers() { + // a0 : number of arguments (on the stack, not including receiver) + // a1 : the target to call + // a2 : the object to spread + return RegisterArray(a1, a0, a2); +} + +// static +constexpr auto CallWithArrayLikeDescriptor::registers() { + // a1 : the target to call + // a2 : the arguments list + return RegisterArray(a1, a2); +} + +// static +constexpr auto ConstructVarargsDescriptor::registers() { + // a0 : number of arguments (on the stack, not including receiver) + // a1 : the target to call + // a3 : the new target + // a4 : arguments list length (untagged) + // a2 : arguments list (FixedArray) + return RegisterArray(a1, a3, a0, a4, a2); +} + +// static +constexpr auto ConstructForwardVarargsDescriptor::registers() { + // a3: new target + // a1: target + // a0: number of arguments + // a2: start index (to supported rest parameters) + return RegisterArray(a1, a3, a0, a2); +} + +// static +constexpr auto ConstructWithSpreadDescriptor::registers() { + // a0 : number of arguments (on the stack, not including receiver) + // a1 : the target to call + // a3 : the new target + // a2 : the object to spread + return RegisterArray(a1, a3, a0, a2); +} + +// static +constexpr auto ConstructWithArrayLikeDescriptor::registers() { + // a1 : the target to call + // a3 : the new target + // a2 : the arguments list + return RegisterArray(a1, a3, a2); +} + +// static +constexpr auto ConstructStubDescriptor::registers() { + // a3: new target + // a1: target + // a0: number of arguments + // a2: allocation site or undefined + return RegisterArray(a1, a3, a0, a2); +} + +// static +constexpr auto AbortDescriptor::registers() { return RegisterArray(a0); } + +// static +constexpr auto CompareDescriptor::registers() { + // a1: left operand + // a0: right operand + return RegisterArray(a1, a0); +} + +// static +constexpr auto Compare_BaselineDescriptor::registers() { + // a1: left operand + // a0: right operand + // a2: feedback slot + return RegisterArray(a1, a0, a2); +} + +// static +constexpr auto BinaryOpDescriptor::registers() { + // a1: left operand + // a0: right operand + return RegisterArray(a1, a0); +} + +// static +constexpr auto BinaryOp_BaselineDescriptor::registers() { + // a1: left operand + // a0: right operand + // a2: feedback slot + return RegisterArray(a1, a0, a2); +} + +// static +constexpr auto ApiCallbackDescriptor::registers() { + return RegisterArray(a1, // kApiFunctionAddress + a2, // kArgc + a3, // kCallData + a0); // kHolder +} + +// static +constexpr auto InterpreterDispatchDescriptor::registers() { + return RegisterArray( + kInterpreterAccumulatorRegister, kInterpreterBytecodeOffsetRegister, + kInterpreterBytecodeArrayRegister, kInterpreterDispatchTableRegister); +} + +// static +constexpr auto InterpreterPushArgsThenCallDescriptor::registers() { + return RegisterArray(a0, // argument count (not including receiver) + a2, // address of first argument + a1); // the target callable to be call +} + +// static +constexpr auto InterpreterPushArgsThenConstructDescriptor::registers() { + return RegisterArray( + a0, // argument count (not including receiver) + a4, // address of the first argument + a1, // constructor to call + a3, // new target + a2); // allocation site feedback if available, undefined otherwise +} + +// static +constexpr auto ResumeGeneratorDescriptor::registers() { + return RegisterArray(a0, // the value to pass to the generator + a1); // the JSGeneratorObject to resume +} + +// static +constexpr auto RunMicrotasksEntryDescriptor::registers() { + return RegisterArray(a0, a1); +} + +} // namespace internal +} // namespace v8 + +#endif // V8_TARGET_ARCH_RISCV64 + +#endif // V8_CODEGEN_RISCV64_INTERFACE_DESCRIPTORS_RISCV64_INL_H_ diff --git a/deps/v8/src/codegen/riscv64/interface-descriptors-riscv64.cc b/deps/v8/src/codegen/riscv64/interface-descriptors-riscv64.cc deleted file mode 100644 index 23953097cd..0000000000 --- a/deps/v8/src/codegen/riscv64/interface-descriptors-riscv64.cc +++ /dev/null @@ -1,313 +0,0 @@ -// Copyright 2021 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#if V8_TARGET_ARCH_RISCV64 - -#include "src/codegen/interface-descriptors.h" -#include "src/execution/frames.h" - -namespace v8 { -namespace internal { - -const Register CallInterfaceDescriptor::ContextRegister() { return cp; } - -void CallInterfaceDescriptor::DefaultInitializePlatformSpecific( - CallInterfaceDescriptorData* data, int register_parameter_count) { - const Register default_stub_registers[] = {a0, a1, a2, a3, a4}; - CHECK_LE(static_cast<size_t>(register_parameter_count), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(register_parameter_count, - default_stub_registers); -} - -void WasmI32AtomicWait32Descriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - const Register default_stub_registers[] = {a0, a1, a2, a3}; - CHECK_EQ(static_cast<size_t>(kParameterCount), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(kParameterCount, default_stub_registers); -} - -void WasmI64AtomicWait32Descriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - const Register default_stub_registers[] = {a0, a1, a2, a3, a4}; - CHECK_EQ(static_cast<size_t>(kParameterCount - kStackArgumentsCount), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(kParameterCount - kStackArgumentsCount, - default_stub_registers); -} - -void RecordWriteDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - const Register default_stub_registers[] = {a0, a1, a2, a3, kReturnRegister0}; - - data->RestrictAllocatableRegisters(default_stub_registers, - arraysize(default_stub_registers)); - - CHECK_LE(static_cast<size_t>(kParameterCount), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(kParameterCount, default_stub_registers); -} - -void EphemeronKeyBarrierDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - const Register default_stub_registers[] = {a0, a1, a2, a3, kReturnRegister0}; - - data->RestrictAllocatableRegisters(default_stub_registers, - arraysize(default_stub_registers)); - - CHECK_LE(static_cast<size_t>(kParameterCount), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(kParameterCount, default_stub_registers); -} - -void DynamicCheckMapsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register default_stub_registers[] = {kReturnRegister0, a1, a2, a3, cp}; - - data->RestrictAllocatableRegisters(default_stub_registers, - arraysize(default_stub_registers)); - - CHECK_LE(static_cast<size_t>(kParameterCount), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(kParameterCount, default_stub_registers); -} - -const Register LoadDescriptor::ReceiverRegister() { return a1; } -const Register LoadDescriptor::NameRegister() { return a2; } -const Register LoadDescriptor::SlotRegister() { return a0; } - -const Register LoadWithVectorDescriptor::VectorRegister() { return a3; } - -const Register -LoadWithReceiverAndVectorDescriptor::LookupStartObjectRegister() { - return a4; -} - -const Register StoreDescriptor::ReceiverRegister() { return a1; } -const Register StoreDescriptor::NameRegister() { return a2; } -const Register StoreDescriptor::ValueRegister() { return a0; } -const Register StoreDescriptor::SlotRegister() { return a4; } - -const Register StoreWithVectorDescriptor::VectorRegister() { return a3; } - -const Register StoreTransitionDescriptor::SlotRegister() { return a4; } -const Register StoreTransitionDescriptor::VectorRegister() { return a3; } -const Register StoreTransitionDescriptor::MapRegister() { return a5; } - -const Register ApiGetterDescriptor::HolderRegister() { return a0; } -const Register ApiGetterDescriptor::CallbackRegister() { return a3; } - -const Register GrowArrayElementsDescriptor::ObjectRegister() { return a0; } -const Register GrowArrayElementsDescriptor::KeyRegister() { return a3; } - -// static -const Register TypeConversionDescriptor::ArgumentRegister() { return a0; } - -void TypeofDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {a3}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallTrampolineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // a1: target - // a0: number of arguments - Register registers[] = {a1, a0}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // a0 : number of arguments (on the stack, not including receiver) - // a1 : the target to call - // a4 : arguments list length (untagged) - // a2 : arguments list (FixedArray) - Register registers[] = {a1, a0, a4, a2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallForwardVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // a1: the target to call - // a0: number of arguments - // a2: start index (to support rest parameters) - Register registers[] = {a1, a0, a2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallFunctionTemplateDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // a1 : function template info - // a0 : number of arguments (on the stack, not including receiver) - Register registers[] = {a1, a0}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallWithSpreadDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // a0 : number of arguments (on the stack, not including receiver) - // a1 : the target to call - // a2 : the object to spread - Register registers[] = {a1, a0, a2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallWithArrayLikeDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // a1 : the target to call - // a2 : the arguments list - Register registers[] = {a1, a2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // a0 : number of arguments (on the stack, not including receiver) - // a1 : the target to call - // a3 : the new target - // a4 : arguments list length (untagged) - // a2 : arguments list (FixedArray) - Register registers[] = {a1, a3, a0, a4, a2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructForwardVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // a1: the target to call - // a3: new target - // a0: number of arguments - // a2: start index (to support rest parameters) - Register registers[] = {a1, a3, a0, a2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructWithSpreadDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // a0 : number of arguments (on the stack, not including receiver) - // a1 : the target to call - // a3 : the new target - // a2 : the object to spread - Register registers[] = {a1, a3, a0, a2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructWithArrayLikeDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // a1 : the target to call - // a3 : the new target - // a2 : the arguments list - Register registers[] = {a1, a3, a2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructStubDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // a1: target - // a3: new target - // a0: number of arguments - // a2: allocation site or undefined - Register registers[] = {a1, a3, a0, a2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void AbortDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {a0}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CompareDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {a1, a0}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void BinaryOpDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {a1, a0}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ApiCallbackDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - a1, // kApiFunctionAddress - a2, // kArgc - a3, // kCallData - a0, // kHolder - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void InterpreterDispatchDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - kInterpreterAccumulatorRegister, kInterpreterBytecodeOffsetRegister, - kInterpreterBytecodeArrayRegister, kInterpreterDispatchTableRegister}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void InterpreterPushArgsThenCallDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - a0, // argument count (not including receiver) - a2, // address of first argument - a1 // the target callable to be call - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void InterpreterPushArgsThenConstructDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - a0, // argument count (not including receiver) - a4, // address of the first argument - a1, // constructor to call - a3, // new target - a2, // allocation site feedback if available, undefined otherwise - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ResumeGeneratorDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - a0, // the value to pass to the generator - a1 // the JSGeneratorObject to resume - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void BinaryOp_BaselineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // TODO(v8:11421): Implement on this platform. - InitializePlatformUnimplemented(data, kParameterCount); -} - -void Compare_BaselineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // TODO(v8:11421): Implement on this platform. - InitializePlatformUnimplemented(data, kParameterCount); -} - -void FrameDropperTrampolineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - a1, // loaded new FP - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void RunMicrotasksEntryDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {a0, a1}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -} // namespace internal -} // namespace v8 - -#endif // V8_TARGET_ARCH_RISCV64 diff --git a/deps/v8/src/codegen/riscv64/macro-assembler-riscv64.cc b/deps/v8/src/codegen/riscv64/macro-assembler-riscv64.cc index ff798da0e9..801a74f569 100644 --- a/deps/v8/src/codegen/riscv64/macro-assembler-riscv64.cc +++ b/deps/v8/src/codegen/riscv64/macro-assembler-riscv64.cc @@ -12,6 +12,7 @@ #include "src/codegen/callable.h" #include "src/codegen/code-factory.h" #include "src/codegen/external-reference-table.h" +#include "src/codegen/interface-descriptors-inl.h" #include "src/codegen/macro-assembler.h" #include "src/codegen/register-configuration.h" #include "src/debug/debug.h" @@ -61,7 +62,7 @@ int TurboAssembler::RequiredStackSizeForCallerSaved(SaveFPRegsMode fp_mode, RegList list = kJSCallerSaved & ~exclusions; bytes += NumRegs(list) * kPointerSize; - if (fp_mode == kSaveFPRegs) { + if (fp_mode == SaveFPRegsMode::kSave) { bytes += NumRegs(kCallerSavedFPU) * kDoubleSize; } @@ -86,7 +87,7 @@ int TurboAssembler::PushCallerSaved(SaveFPRegsMode fp_mode, Register exclusion1, MultiPush(list); bytes += NumRegs(list) * kPointerSize; - if (fp_mode == kSaveFPRegs) { + if (fp_mode == SaveFPRegsMode::kSave) { MultiPushFPU(kCallerSavedFPU); bytes += NumRegs(kCallerSavedFPU) * kDoubleSize; } @@ -97,7 +98,7 @@ int TurboAssembler::PushCallerSaved(SaveFPRegsMode fp_mode, Register exclusion1, int TurboAssembler::PopCallerSaved(SaveFPRegsMode fp_mode, Register exclusion1, Register exclusion2, Register exclusion3) { int bytes = 0; - if (fp_mode == kSaveFPRegs) { + if (fp_mode == SaveFPRegsMode::kSave) { MultiPopFPU(kCallerSavedFPU); bytes += NumRegs(kCallerSavedFPU) * kDoubleSize; } @@ -175,7 +176,7 @@ void MacroAssembler::RecordWriteField(Register object, int offset, Label done; // Skip barrier if writing a smi. - if (smi_check == INLINE_SMI_CHECK) { + if (smi_check == SmiCheck::kInline) { JumpIfSmi(value, &done); } @@ -184,7 +185,7 @@ void MacroAssembler::RecordWriteField(Register object, int offset, DCHECK(IsAligned(offset, kPointerSize)); Add64(dst, object, Operand(offset - kHeapObjectTag)); - if (emit_debug_code()) { + if (FLAG_debug_code) { UseScratchRegisterScope temps(this); Register scratch = temps.Acquire(); BlockTrampolinePoolScope block_trampoline_pool(this); @@ -197,13 +198,13 @@ void MacroAssembler::RecordWriteField(Register object, int offset, } RecordWrite(object, dst, value, ra_status, save_fp, remembered_set_action, - OMIT_SMI_CHECK); + SmiCheck::kOmit); bind(&done); // Clobber clobbered input registers when running with the debug-code flag // turned on to provoke errors. - if (emit_debug_code()) { + if (FLAG_debug_code) { li(value, Operand(bit_cast<int64_t>(kZapValue + 4))); li(dst, Operand(bit_cast<int64_t>(kZapValue + 8))); } @@ -336,14 +337,14 @@ void MacroAssembler::RecordWrite(Register object, Register address, SaveFPRegsMode fp_mode, RememberedSetAction remembered_set_action, SmiCheck smi_check) { - if (emit_debug_code()) { + if (FLAG_debug_code) { DCHECK(!AreAliased(object, address, value, kScratchReg)); Ld(kScratchReg, MemOperand(address)); Assert(eq, AbortReason::kWrongAddressOrValuePassedToRecordWrite, kScratchReg, Operand(value)); } - if ((remembered_set_action == OMIT_REMEMBERED_SET && + if ((remembered_set_action == RememberedSetAction::kOmit && !FLAG_incremental_marking) || FLAG_disable_write_barriers) { return; @@ -353,7 +354,7 @@ void MacroAssembler::RecordWrite(Register object, Register address, // catch stores of smis and stores into the young generation. Label done; - if (smi_check == INLINE_SMI_CHECK) { + if (smi_check == SmiCheck::kInline) { DCHECK_EQ(0, kSmiTag); JumpIfSmi(value, &done); } @@ -378,7 +379,7 @@ void MacroAssembler::RecordWrite(Register object, Register address, // Clobber clobbered registers when running with the debug-code flag // turned on to provoke errors. - if (emit_debug_code()) { + if (FLAG_debug_code) { li(address, Operand(bit_cast<int64_t>(kZapValue + 12))); li(value, Operand(bit_cast<int64_t>(kZapValue + 16))); } @@ -393,6 +394,10 @@ void TurboAssembler::Add32(Register rd, Register rs, const Operand& rt) { } else { if (is_int12(rt.immediate()) && !MustUseReg(rt.rmode())) { addiw(rd, rs, static_cast<int32_t>(rt.immediate())); + } else if ((-4096 <= rt.immediate() && rt.immediate() <= -2049) || + (2048 <= rt.immediate() && rt.immediate() <= 4094)) { + addiw(rd, rs, rt.immediate() / 2); + addiw(rd, rd, rt.immediate() - (rt.immediate() / 2)); } else { // li handles the relocation. UseScratchRegisterScope temps(this); @@ -409,6 +414,10 @@ void TurboAssembler::Add64(Register rd, Register rs, const Operand& rt) { } else { if (is_int12(rt.immediate()) && !MustUseReg(rt.rmode())) { addi(rd, rs, static_cast<int32_t>(rt.immediate())); + } else if ((-4096 <= rt.immediate() && rt.immediate() <= -2049) || + (2048 <= rt.immediate() && rt.immediate() <= 4094)) { + addi(rd, rs, rt.immediate() / 2); + addi(rd, rd, rt.immediate() - (rt.immediate() / 2)); } else { // li handles the relocation. UseScratchRegisterScope temps(this); @@ -429,6 +438,10 @@ void TurboAssembler::Sub32(Register rd, Register rs, const Operand& rt) { addiw(rd, rs, static_cast<int32_t>( -rt.immediate())); // No subiw instr, use addiw(x, y, -imm). + } else if ((-4096 <= -rt.immediate() && -rt.immediate() <= -2049) || + (2048 <= -rt.immediate() && -rt.immediate() <= 4094)) { + addiw(rd, rs, -rt.immediate() / 2); + addiw(rd, rd, -rt.immediate() - (-rt.immediate() / 2)); } else { UseScratchRegisterScope temps(this); Register scratch = temps.Acquire(); @@ -452,6 +465,10 @@ void TurboAssembler::Sub64(Register rd, Register rs, const Operand& rt) { addi(rd, rs, static_cast<int32_t>( -rt.immediate())); // No subi instr, use addi(x, y, -imm). + } else if ((-4096 <= -rt.immediate() && -rt.immediate() <= -2049) || + (2048 <= -rt.immediate() && -rt.immediate() <= 4094)) { + addi(rd, rs, -rt.immediate() / 2); + addi(rd, rd, -rt.immediate() - (-rt.immediate() / 2)); } else { int li_count = InstrCountForLi64Bit(rt.immediate()); int li_neg_count = InstrCountForLi64Bit(-rt.immediate()); @@ -884,6 +901,7 @@ void TurboAssembler::Sll64(Register rd, Register rs, const Operand& rt) { void TurboAssembler::Ror(Register rd, Register rs, const Operand& rt) { UseScratchRegisterScope temps(this); Register scratch = temps.Acquire(); + BlockTrampolinePoolScope block_trampoline_pool(this); if (rt.is_reg()) { negw(scratch, rt.rm()); sllw(scratch, rs, scratch); @@ -908,6 +926,7 @@ void TurboAssembler::Ror(Register rd, Register rs, const Operand& rt) { void TurboAssembler::Dror(Register rd, Register rs, const Operand& rt) { UseScratchRegisterScope temps(this); Register scratch = temps.Acquire(); + BlockTrampolinePoolScope block_trampoline_pool(this); if (rt.is_reg()) { negw(scratch, rt.rm()); sll(scratch, rs, scratch); @@ -928,9 +947,10 @@ void TurboAssembler::Dror(Register rd, Register rs, const Operand& rt) { } void TurboAssembler::CalcScaledAddress(Register rd, Register rt, Register rs, - uint8_t sa, Register scratch) { + uint8_t sa) { DCHECK(sa >= 1 && sa <= 31); - Register tmp = rd == rt ? scratch : rd; + UseScratchRegisterScope temps(this); + Register tmp = rd == rt ? temps.Acquire() : rd; DCHECK(tmp != rt); slli(tmp, rs, sa); Add64(rd, rt, tmp); @@ -1215,8 +1235,9 @@ void TurboAssembler::Uld(Register rd, const MemOperand& rs) { // Load consequent 32-bit word pair in 64-bit reg. and put first word in low // bits, // second word in high bits. -void MacroAssembler::LoadWordPair(Register rd, const MemOperand& rs, - Register scratch) { +void MacroAssembler::LoadWordPair(Register rd, const MemOperand& rs) { + UseScratchRegisterScope temps(this); + Register scratch = temps.Acquire(); Lwu(rd, rs); Lw(scratch, MemOperand(rs.rm(), rs.offset() + kPointerSize / 2)); slli(scratch, scratch, 32); @@ -1228,8 +1249,9 @@ void TurboAssembler::Usd(Register rd, const MemOperand& rs) { } // Do 64-bit store as two consequent 32-bit stores to unaligned address. -void MacroAssembler::StoreWordPair(Register rd, const MemOperand& rs, - Register scratch) { +void MacroAssembler::StoreWordPair(Register rd, const MemOperand& rs) { + UseScratchRegisterScope temps(this); + Register scratch = temps.Acquire(); Sw(rd, rs); srai(scratch, rd, 32); Sw(scratch, MemOperand(rs.rm(), rs.offset() + kPointerSize / 2)); @@ -1464,7 +1486,7 @@ void TurboAssembler::li(Register rd, Operand j, LiFlags mode) { UseScratchRegisterScope temps(this); int count = li_estimate(j.immediate(), temps.hasAvailable()); int reverse_count = li_estimate(~j.immediate(), temps.hasAvailable()); - if (!FLAG_disable_riscv_constant_pool && count >= 4 && reverse_count >= 4) { + if (FLAG_riscv_constant_pool && count >= 4 && reverse_count >= 4) { // Ld a Address from a constant pool. RecordEntry((uint64_t)j.immediate(), j.rmode()); auipc(rd, 0); @@ -1864,6 +1886,28 @@ void TurboAssembler::RoundHelper(FPURegister dst, FPURegister src, fmv_s(dst, src); } } + { + Label not_NaN; + UseScratchRegisterScope temps2(this); + Register scratch = temps2.Acquire(); + // According to the wasm spec + // (https://webassembly.github.io/spec/core/exec/numerics.html#aux-nans) + // if input is canonical NaN, then output is canonical NaN, and if input is + // any other NaN, then output is any NaN with most significant bit of + // payload is 1. In RISC-V, feq_d will set scratch to 0 if src is a NaN. If + // src is not a NaN, branch to the label and do nothing, but if it is, + // fmin_d will set dst to the canonical NaN. + if (std::is_same<F, double>::value) { + feq_d(scratch, src, src); + bnez(scratch, ¬_NaN); + fmin_d(dst, src, src); + } else { + feq_s(scratch, src, src); + bnez(scratch, ¬_NaN); + fmin_s(dst, src, src); + } + bind(¬_NaN); + } // If real exponent (i.e., t6 - kFloatExponentBias) is greater than // kFloat32MantissaBits, it means the floating-point value has no fractional @@ -2030,8 +2074,8 @@ void TurboAssembler::CompareF64(Register rd, FPUCondition cc, FPURegister cmp1, } } -void TurboAssembler::CompareIsNanF32(Register rd, FPURegister cmp1, - FPURegister cmp2) { +void TurboAssembler::CompareIsNotNanF32(Register rd, FPURegister cmp1, + FPURegister cmp2) { UseScratchRegisterScope temps(this); BlockTrampolinePoolScope block_trampoline_pool(this); Register scratch = temps.Acquire(); @@ -2039,11 +2083,10 @@ void TurboAssembler::CompareIsNanF32(Register rd, FPURegister cmp1, feq_s(rd, cmp1, cmp1); // rd <- !isNan(cmp1) feq_s(scratch, cmp2, cmp2); // scratch <- !isNaN(cmp2) And(rd, rd, scratch); // rd <- !isNan(cmp1) && !isNan(cmp2) - Xor(rd, rd, 1); // rd <- isNan(cmp1) || isNan(cmp2) } -void TurboAssembler::CompareIsNanF64(Register rd, FPURegister cmp1, - FPURegister cmp2) { +void TurboAssembler::CompareIsNotNanF64(Register rd, FPURegister cmp1, + FPURegister cmp2) { UseScratchRegisterScope temps(this); BlockTrampolinePoolScope block_trampoline_pool(this); Register scratch = temps.Acquire(); @@ -2051,7 +2094,18 @@ void TurboAssembler::CompareIsNanF64(Register rd, FPURegister cmp1, feq_d(rd, cmp1, cmp1); // rd <- !isNan(cmp1) feq_d(scratch, cmp2, cmp2); // scratch <- !isNaN(cmp2) And(rd, rd, scratch); // rd <- !isNan(cmp1) && !isNan(cmp2) - Xor(rd, rd, 1); // rd <- isNan(cmp1) || isNan(cmp2) +} + +void TurboAssembler::CompareIsNanF32(Register rd, FPURegister cmp1, + FPURegister cmp2) { + CompareIsNotNanF32(rd, cmp1, cmp2); // rd <- !isNan(cmp1) && !isNan(cmp2) + Xor(rd, rd, 1); // rd <- isNan(cmp1) || isNan(cmp2) +} + +void TurboAssembler::CompareIsNanF64(Register rd, FPURegister cmp1, + FPURegister cmp2) { + CompareIsNotNanF64(rd, cmp1, cmp2); // rd <- !isNan(cmp1) && !isNan(cmp2) + Xor(rd, rd, 1); // rd <- isNan(cmp1) || isNan(cmp2) } void TurboAssembler::BranchTrueShortF(Register rs, Label* target) { @@ -2949,9 +3003,20 @@ void TurboAssembler::Jump(Handle<Code> code, RelocInfo::Mode rmode, bool target_is_isolate_independent_builtin = isolate()->builtins()->IsBuiltinHandle(code, &builtin_index) && Builtins::IsIsolateIndependent(builtin_index); - - if (root_array_available_ && options().isolate_independent_code && - target_is_isolate_independent_builtin) { + if (target_is_isolate_independent_builtin && + options().use_pc_relative_calls_and_jumps) { + int32_t code_target_index = AddCodeTarget(code); + Label skip; + BlockTrampolinePoolScope block_trampoline_pool(this); + if (cond != al) { + Branch(&skip, NegateCondition(cond), rs, rt); + } + RecordRelocInfo(RelocInfo::RELATIVE_CODE_TARGET); + GenPCRelativeJump(t6, code_target_index); + bind(&skip); + return; + } else if (root_array_available_ && options().isolate_independent_code && + target_is_isolate_independent_builtin) { int offset = code->builtin_index() * kSystemPointerSize + IsolateData::builtin_entry_table_offset(); Ld(t6, MemOperand(kRootRegister, offset)); @@ -3017,8 +3082,22 @@ void TurboAssembler::Call(Handle<Code> code, RelocInfo::Mode rmode, bool target_is_isolate_independent_builtin = isolate()->builtins()->IsBuiltinHandle(code, &builtin_index) && Builtins::IsIsolateIndependent(builtin_index); - if (root_array_available_ && options().isolate_independent_code && - target_is_isolate_independent_builtin) { + if (target_is_isolate_independent_builtin && + options().use_pc_relative_calls_and_jumps) { + int32_t code_target_index = AddCodeTarget(code); + Label skip; + BlockTrampolinePoolScope block_trampoline_pool(this); + RecordCommentForOffHeapTrampoline(builtin_index); + if (cond != al) { + Branch(&skip, NegateCondition(cond), rs, rt); + } + RecordRelocInfo(RelocInfo::RELATIVE_CODE_TARGET); + GenPCRelativeJumpAndLink(t6, code_target_index); + bind(&skip); + RecordComment("]"); + return; + } else if (root_array_available_ && options().isolate_independent_code && + target_is_isolate_independent_builtin) { int offset = code->builtin_index() * kSystemPointerSize + IsolateData::builtin_entry_table_offset(); LoadRootRelative(t6, offset); @@ -3059,6 +3138,46 @@ void TurboAssembler::CallBuiltinByIndex(Register builtin_index) { Call(builtin_index); } +void TurboAssembler::CallBuiltin(int builtin_index) { + DCHECK(Builtins::IsBuiltinId(builtin_index)); + RecordCommentForOffHeapTrampoline(builtin_index); + CHECK_NE(builtin_index, Builtins::kNoBuiltinId); + EmbeddedData d = EmbeddedData::FromBlob(isolate()); + Address entry = d.InstructionStartOfBuiltin(builtin_index); + if (options().short_builtin_calls) { + Call(entry, RelocInfo::RUNTIME_ENTRY); + } else { + Call(entry, RelocInfo::OFF_HEAP_TARGET); + } + RecordComment("]"); +} + +void TurboAssembler::TailCallBuiltin(int builtin_index) { + DCHECK(Builtins::IsBuiltinId(builtin_index)); + RecordCommentForOffHeapTrampoline(builtin_index); + CHECK_NE(builtin_index, Builtins::kNoBuiltinId); + EmbeddedData d = EmbeddedData::FromBlob(isolate()); + Address entry = d.InstructionStartOfBuiltin(builtin_index); + if (options().short_builtin_calls) { + Jump(entry, RelocInfo::RUNTIME_ENTRY); + } else { + Jump(entry, RelocInfo::OFF_HEAP_TARGET); + } + RecordComment("]"); +} + +void TurboAssembler::LoadEntryFromBuiltinIndex(Builtins::Name builtin_index, + Register destination) { + Ld(destination, EntryFromBuiltinIndexAsOperand(builtin_index)); +} + +MemOperand TurboAssembler::EntryFromBuiltinIndexAsOperand( + Builtins::Name builtin_index) { + DCHECK(root_array_available()); + return MemOperand(kRootRegister, + IsolateData::builtin_entry_slot_offset(builtin_index)); +} + void TurboAssembler::PatchAndJump(Address target) { UseScratchRegisterScope temps(this); Register scratch = temps.Acquire(); @@ -3115,16 +3234,28 @@ void TurboAssembler::Ret(Condition cond, Register rs, const Operand& rt) { } } +void TurboAssembler::GenPCRelativeJump(Register rd, int64_t imm32) { + DCHECK(is_int32(imm32)); + int32_t Hi20 = (((int32_t)imm32 + 0x800) >> 12); + int32_t Lo12 = (int32_t)imm32 << 20 >> 20; + auipc(rd, Hi20); // Read PC + Hi20 into scratch. + jr(rd, Lo12); // jump PC + Hi20 + Lo12 +} + +void TurboAssembler::GenPCRelativeJumpAndLink(Register rd, int64_t imm32) { + DCHECK(is_int32(imm32)); + int32_t Hi20 = (((int32_t)imm32 + 0x800) >> 12); + int32_t Lo12 = (int32_t)imm32 << 20 >> 20; + auipc(rd, Hi20); // Read PC + Hi20 into scratch. + jalr(rd, Lo12); // jump PC + Hi20 + Lo12 +} + void TurboAssembler::BranchLong(Label* L) { // Generate position independent long branch. BlockTrampolinePoolScope block_trampoline_pool(this); int64_t imm64; imm64 = branch_long_offset(L); - DCHECK(is_int32(imm64)); - int32_t Hi20 = (((int32_t)imm64 + 0x800) >> 12); - int32_t Lo12 = (int32_t)imm64 << 20 >> 20; - auipc(t6, Hi20); // Read PC + Hi20 into scratch. - jr(t6, Lo12); // jump PC + Hi20 + Lo12 + GenPCRelativeJump(t6, imm64); EmitConstPoolWithJumpIfNeeded(); } @@ -3133,11 +3264,7 @@ void TurboAssembler::BranchAndLinkLong(Label* L) { BlockTrampolinePoolScope block_trampoline_pool(this); int64_t imm64; imm64 = branch_long_offset(L); - DCHECK(is_int32(imm64)); - int32_t Hi20 = (((int32_t)imm64 + 0x800) >> 12); - int32_t Lo12 = (int32_t)imm64 << 20 >> 20; - auipc(t6, Hi20); // Read PC + Hi20 into scratch. - jalr(t6, Lo12); // jump PC + Hi20 + Lo12 and read PC + 4 to ra + GenPCRelativeJumpAndLink(t6, imm64); } void TurboAssembler::DropAndRet(int drop) { @@ -3251,14 +3378,6 @@ void TurboAssembler::Push(Handle<HeapObject> handle) { push(scratch); } -void MacroAssembler::MaybeDropFrames() { - // Check whether we need to drop frames to restart a function on the stack. - li(a1, ExternalReference::debug_restart_fp_address(isolate())); - Ld(a1, MemOperand(a1)); - Jump(BUILTIN_CODE(isolate(), FrameDropperTrampoline), RelocInfo::CODE_TARGET, - ne, a1, Operand(zero_reg)); -} - // --------------------------------------------------------------------------- // Exception handling. @@ -3294,16 +3413,10 @@ void MacroAssembler::PopStackHandler() { void TurboAssembler::FPUCanonicalizeNaN(const DoubleRegister dst, const DoubleRegister src) { - UseScratchRegisterScope temps(this); - Register scratch = temps.Acquire(); - Label NotNaN; - - fmv_d(dst, src); - feq_d(scratch, src, src); - bne(scratch, zero_reg, &NotNaN); - RV_li(scratch, 0x7ff8000000000000ULL); // This is the canonical NaN - fmv_d_x(dst, scratch); - bind(&NotNaN); + // Subtracting 0.0 preserves all inputs except for signalling NaNs, which + // become quiet NaNs. We use fsub rather than fadd because fsub preserves -0.0 + // inputs: -0.0 + 0.0 = 0.0, but -0.0 - 0.0 = -0.0. + fsub_d(dst, src, kDoubleRegZero); } void TurboAssembler::MovFromFloatResult(const DoubleRegister dst) { @@ -3414,7 +3527,7 @@ void MacroAssembler::StackOverflowCheck(Register num_args, Register scratch1, void MacroAssembler::InvokePrologue(Register expected_parameter_count, Register actual_parameter_count, - Label* done, InvokeFlag flag) { + Label* done, InvokeType type) { Label regular_invoke; // a0: actual arguments count @@ -3524,9 +3637,9 @@ void MacroAssembler::CheckDebugHook(Register fun, Register new_target, void MacroAssembler::InvokeFunctionCode(Register function, Register new_target, Register expected_parameter_count, Register actual_parameter_count, - InvokeFlag flag) { + InvokeType type) { // You can't call a function without a valid frame. - DCHECK_IMPLIES(flag == CALL_FUNCTION, has_frame()); + DCHECK_IMPLIES(type == InvokeType::kCall, has_frame()); DCHECK_EQ(function, a1); DCHECK_IMPLIES(new_target.is_valid(), new_target == a3); @@ -3540,17 +3653,19 @@ void MacroAssembler::InvokeFunctionCode(Register function, Register new_target, } Label done; - InvokePrologue(expected_parameter_count, actual_parameter_count, &done, flag); + InvokePrologue(expected_parameter_count, actual_parameter_count, &done, type); // We call indirectly through the code field in the function to // allow recompilation to take effect without changing any of the // call sites. Register code = kJavaScriptCallCodeStartRegister; Ld(code, FieldMemOperand(function, JSFunction::kCodeOffset)); - if (flag == CALL_FUNCTION) { - CallCodeObject(code); - } else { - DCHECK(flag == JUMP_FUNCTION); - JumpCodeObject(code); + switch (type) { + case InvokeType::kCall: + CallCodeObject(code); + break; + case InvokeType::kJump: + JumpCodeObject(code); + break; } // Continue here if InvokePrologue does handle the invocation due to @@ -3560,9 +3675,9 @@ void MacroAssembler::InvokeFunctionCode(Register function, Register new_target, void MacroAssembler::InvokeFunctionWithNewTarget( Register function, Register new_target, Register actual_parameter_count, - InvokeFlag flag) { + InvokeType type) { // You can't call a function without a valid frame. - DCHECK_IMPLIES(flag == CALL_FUNCTION, has_frame()); + DCHECK_IMPLIES(type == InvokeType::kCall, has_frame()); // Contract with called JS functions requires that function is passed in a1. DCHECK_EQ(function, a1); @@ -3576,15 +3691,15 @@ void MacroAssembler::InvokeFunctionWithNewTarget( SharedFunctionInfo::kFormalParameterCountOffset)); InvokeFunctionCode(a1, new_target, expected_parameter_count, - actual_parameter_count, flag); + actual_parameter_count, type); } void MacroAssembler::InvokeFunction(Register function, Register expected_parameter_count, Register actual_parameter_count, - InvokeFlag flag) { + InvokeType type) { // You can't call a function without a valid frame. - DCHECK_IMPLIES(flag == CALL_FUNCTION, has_frame()); + DCHECK_IMPLIES(type == InvokeType::kCall, has_frame()); // Contract with called JS functions requires that function is passed in a1. DCHECK_EQ(function, a1); @@ -3593,7 +3708,7 @@ void MacroAssembler::InvokeFunction(Register function, Ld(cp, FieldMemOperand(a1, JSFunction::kContextOffset)); InvokeFunctionCode(a1, no_reg, expected_parameter_count, - actual_parameter_count, flag); + actual_parameter_count, type); } // --------------------------------------------------------------------------- @@ -3734,15 +3849,15 @@ void MacroAssembler::TailCallRuntime(Runtime::FunctionId fid) { void MacroAssembler::JumpToExternalReference(const ExternalReference& builtin, bool builtin_exit_frame) { PrepareCEntryFunction(builtin); - Handle<Code> code = CodeFactory::CEntry(isolate(), 1, kDontSaveFPRegs, - kArgvOnStack, builtin_exit_frame); + Handle<Code> code = CodeFactory::CEntry(isolate(), 1, SaveFPRegsMode::kIgnore, + ArgvMode::kStack, builtin_exit_frame); Jump(code, RelocInfo::CODE_TARGET, al, zero_reg, Operand(zero_reg)); } void MacroAssembler::JumpToInstructionStream(Address entry) { // Ld a Address from a constant pool. // Record a value into constant pool. - if (FLAG_disable_riscv_constant_pool) { + if (!FLAG_riscv_constant_pool) { li(kOffHeapTrampolineRegister, Operand(entry, RelocInfo::OFF_HEAP_TARGET)); } else { RecordEntry(entry, RelocInfo::OFF_HEAP_TARGET); @@ -3795,7 +3910,7 @@ void TurboAssembler::DebugBreak() { stop(); } void TurboAssembler::Assert(Condition cc, AbortReason reason, Register rs, Operand rt) { - if (emit_debug_code()) Check(cc, reason, rs, rt); + if (FLAG_debug_code) Check(cc, reason, rs, rt); } void TurboAssembler::Check(Condition cc, AbortReason reason, Register rs, @@ -3810,11 +3925,11 @@ void TurboAssembler::Check(Condition cc, AbortReason reason, Register rs, void TurboAssembler::Abort(AbortReason reason) { Label abort_start; bind(&abort_start); -#ifdef DEBUG - const char* msg = GetAbortReason(reason); - RecordComment("Abort message: "); - RecordComment(msg); -#endif + if (FLAG_code_comments) { + const char* msg = GetAbortReason(reason); + RecordComment("Abort message: "); + RecordComment(msg); + } // Avoid emitting call to builtin if requested. if (trap_on_abort()) { @@ -3882,19 +3997,12 @@ void TurboAssembler::EnterFrame(StackFrame::Type type) { UseScratchRegisterScope temps(this); Register scratch = temps.Acquire(); BlockTrampolinePoolScope block_trampoline_pool(this); - int stack_offset = -3 * kPointerSize; - const int fp_offset = 1 * kPointerSize; - addi(sp, sp, stack_offset); - stack_offset = -stack_offset - kPointerSize; - Sd(ra, MemOperand(sp, stack_offset)); - stack_offset -= kPointerSize; - Sd(fp, MemOperand(sp, stack_offset)); - stack_offset -= kPointerSize; - li(scratch, Operand(StackFrame::TypeToMarker(type))); - Sd(scratch, MemOperand(sp, stack_offset)); - // Adjust FP to point to saved FP. - DCHECK_EQ(stack_offset, 0); - Add64(fp, sp, Operand(fp_offset)); + Push(ra, fp); + Move(fp, sp); + if (!StackFrame::IsJavaScript(type)) { + li(scratch, Operand(StackFrame::TypeToMarker(type))); + Push(scratch); + } } void TurboAssembler::LeaveFrame(StackFrame::Type type) { @@ -3935,7 +4043,7 @@ void MacroAssembler::EnterExitFrame(bool save_doubles, int stack_space, // Set up new frame pointer. addi(fp, sp, ExitFrameConstants::kFixedFrameSizeFromFp); - if (emit_debug_code()) { + if (FLAG_debug_code) { Sd(zero_reg, MemOperand(fp, ExitFrameConstants::kSPOffset)); } @@ -4011,11 +4119,12 @@ void MacroAssembler::LeaveExitFrame(bool save_doubles, Register argument_count, ExternalReference::Create(IsolateAddressId::kContextAddress, isolate())); Ld(cp, MemOperand(scratch)); -#ifdef DEBUG - li(scratch, - ExternalReference::Create(IsolateAddressId::kContextAddress, isolate())); - Sd(a3, MemOperand(scratch)); -#endif + if (FLAG_debug_code) { + UseScratchRegisterScope temp(this); + Register scratch2 = temp.Acquire(); + li(scratch2, Operand(Context::kInvalidContext)); + Sd(scratch2, MemOperand(scratch)); + } // Pop the arguments, restore registers, and return. mv(sp, fp); // Respect ABI stack constraint. @@ -4026,7 +4135,7 @@ void MacroAssembler::LeaveExitFrame(bool save_doubles, Register argument_count, if (argument_count_is_length) { add(sp, sp, argument_count); } else { - CalcScaledAddress(sp, sp, argument_count, kPointerSizeLog2, scratch); + CalcScaledAddress(sp, sp, argument_count, kPointerSizeLog2); } } @@ -4054,7 +4163,7 @@ int TurboAssembler::ActivationFrameAlignment() { } void MacroAssembler::AssertStackIsAligned() { - if (emit_debug_code()) { + if (FLAG_debug_code) { const int frame_alignment = ActivationFrameAlignment(); const int frame_alignment_mask = frame_alignment - 1; @@ -4084,22 +4193,24 @@ void TurboAssembler::SmiUntag(Register dst, const MemOperand& src) { } } -void TurboAssembler::JumpIfSmi(Register value, Label* smi_label, - Register scratch) { +void TurboAssembler::JumpIfSmi(Register value, Label* smi_label) { DCHECK_EQ(0, kSmiTag); + UseScratchRegisterScope temps(this); + Register scratch = temps.Acquire(); andi(scratch, value, kSmiTagMask); Branch(smi_label, eq, scratch, Operand(zero_reg)); } -void MacroAssembler::JumpIfNotSmi(Register value, Label* not_smi_label, - Register scratch) { +void MacroAssembler::JumpIfNotSmi(Register value, Label* not_smi_label) { + UseScratchRegisterScope temps(this); + Register scratch = temps.Acquire(); DCHECK_EQ(0, kSmiTag); andi(scratch, value, kSmiTagMask); Branch(not_smi_label, ne, scratch, Operand(zero_reg)); } void MacroAssembler::AssertNotSmi(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { STATIC_ASSERT(kSmiTag == 0); DCHECK(object != kScratchReg); andi(kScratchReg, object, kSmiTagMask); @@ -4108,7 +4219,7 @@ void MacroAssembler::AssertNotSmi(Register object) { } void MacroAssembler::AssertSmi(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { STATIC_ASSERT(kSmiTag == 0); DCHECK(object != kScratchReg); andi(kScratchReg, object, kSmiTagMask); @@ -4117,7 +4228,7 @@ void MacroAssembler::AssertSmi(Register object) { } void MacroAssembler::AssertConstructor(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { DCHECK(object != kScratchReg); BlockTrampolinePoolScope block_trampoline_pool(this); STATIC_ASSERT(kSmiTag == 0); @@ -4134,7 +4245,7 @@ void MacroAssembler::AssertConstructor(Register object) { } void MacroAssembler::AssertFunction(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { BlockTrampolinePoolScope block_trampoline_pool(this); STATIC_ASSERT(kSmiTag == 0); DCHECK(object != kScratchReg); @@ -4151,7 +4262,7 @@ void MacroAssembler::AssertFunction(Register object) { } void MacroAssembler::AssertBoundFunction(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { BlockTrampolinePoolScope block_trampoline_pool(this); STATIC_ASSERT(kSmiTag == 0); DCHECK(object != kScratchReg); @@ -4165,7 +4276,7 @@ void MacroAssembler::AssertBoundFunction(Register object) { } void MacroAssembler::AssertGeneratorObject(Register object) { - if (!emit_debug_code()) return; + if (!FLAG_debug_code) return; BlockTrampolinePoolScope block_trampoline_pool(this); STATIC_ASSERT(kSmiTag == 0); DCHECK(object != kScratchReg); @@ -4193,7 +4304,7 @@ void MacroAssembler::AssertGeneratorObject(Register object) { void MacroAssembler::AssertUndefinedOrAllocationSite(Register object, Register scratch) { - if (emit_debug_code()) { + if (FLAG_debug_code) { Label done_checking; AssertNotSmi(object); LoadRoot(scratch, RootIndex::kUndefinedValue); @@ -4229,11 +4340,11 @@ void TurboAssembler::FloatMinMaxHelper(FPURegister dst, FPURegister src1, UseScratchRegisterScope temps(this); Register scratch = temps.Acquire(); if (std::is_same<float, F_TYPE>::value) { - CompareIsNanF32(scratch, src1, src2); + CompareIsNotNanF32(scratch, src1, src2); } else { - CompareIsNanF64(scratch, src1, src2); + CompareIsNotNanF64(scratch, src1, src2); } - BranchTrueF(scratch, &nan); + BranchFalseF(scratch, &nan); if (kind == MaxMinKind::kMax) { if (std::is_same<float, F_TYPE>::value) { @@ -4330,11 +4441,9 @@ void TurboAssembler::PrepareCallCFunction(int num_reg_arguments, void TurboAssembler::CallCFunction(ExternalReference function, int num_reg_arguments, int num_double_arguments) { - UseScratchRegisterScope temps(this); - Register scratch = temps.Acquire(); BlockTrampolinePoolScope block_trampoline_pool(this); - li(scratch, function); - CallCFunctionHelper(scratch, num_reg_arguments, num_double_arguments); + li(t6, function); + CallCFunctionHelper(t6, num_reg_arguments, num_double_arguments); } void TurboAssembler::CallCFunction(Register function, int num_reg_arguments, @@ -4363,7 +4472,7 @@ void TurboAssembler::CallCFunctionHelper(Register function, // PrepareCallCFunction. #if V8_HOST_ARCH_RISCV64 - if (emit_debug_code()) { + if (FLAG_debug_code) { int frame_alignment = base::OS::ActivationFrameAlignment(); int frame_alignment_mask = frame_alignment - 1; if (frame_alignment > kPointerSize) { @@ -4387,12 +4496,9 @@ void TurboAssembler::CallCFunctionHelper(Register function, // allow preemption, so the return address in the link register // stays correct. { - UseScratchRegisterScope temps(this); - Register func_scratch = temps.Acquire(); - BlockTrampolinePoolScope block_trampoline_pool(this); - if (function != func_scratch) { - mv(func_scratch, function); - function = func_scratch; + if (function != t6) { + mv(t6, function); + function = t6; } // Save the frame pointer and PC so that the stack layout remains @@ -4401,7 +4507,6 @@ void TurboAssembler::CallCFunctionHelper(Register function, // 't' registers are caller-saved so this is safe as a scratch register. Register pc_scratch = t1; Register scratch = t2; - DCHECK(!AreAliased(pc_scratch, scratch, function)); auipc(pc_scratch, 0); // TODO(RISCV): Does this need an offset? It seems like this should be the @@ -4494,12 +4599,10 @@ void TurboAssembler::ResetSpeculationPoisonRegister() { void TurboAssembler::CallForDeoptimization(Builtins::Name target, int, Label* exit, DeoptimizeKind kind, Label* ret, Label*) { - UseScratchRegisterScope temps(this); BlockTrampolinePoolScope block_trampoline_pool(this); - Register scratch = temps.Acquire(); - Ld(scratch, + Ld(t6, MemOperand(kRootRegister, IsolateData::builtin_entry_slot_offset(target))); - Call(scratch); + Call(t6); DCHECK_EQ(SizeOfCodeGeneratedSince(exit), (kind == DeoptimizeKind::kLazy) ? Deoptimizer::kLazyDeoptExitSize diff --git a/deps/v8/src/codegen/riscv64/macro-assembler-riscv64.h b/deps/v8/src/codegen/riscv64/macro-assembler-riscv64.h index b260f1c200..81e5565606 100644 --- a/deps/v8/src/codegen/riscv64/macro-assembler-riscv64.h +++ b/deps/v8/src/codegen/riscv64/macro-assembler-riscv64.h @@ -12,6 +12,7 @@ #include "src/codegen/assembler.h" #include "src/codegen/riscv64/assembler-riscv64.h" #include "src/common/globals.h" +#include "src/objects/tagged-index.h" namespace v8 { namespace internal { @@ -53,8 +54,6 @@ enum LiFlags { ADDRESS_LOAD = 2 }; -enum RememberedSetAction { EMIT_REMEMBERED_SET, OMIT_REMEMBERED_SET }; -enum SmiCheck { INLINE_SMI_CHECK, OMIT_SMI_CHECK }; enum RAStatus { kRAHasNotBeenSaved, kRAHasBeenSaved }; Register GetRegisterThatIsNotOneOf(Register reg1, Register reg2 = no_reg, @@ -166,6 +165,8 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase { // Compare double, if any operand is NaN, result is false except for NE void CompareF64(Register rd, FPUCondition cc, FPURegister cmp1, FPURegister cmp2); + void CompareIsNotNanF32(Register rd, FPURegister cmp1, FPURegister cmp2); + void CompareIsNotNanF64(Register rd, FPURegister cmp1, FPURegister cmp2); void CompareIsNanF32(Register rd, FPURegister cmp1, FPURegister cmp2); void CompareIsNanF64(Register rd, FPURegister cmp1, FPURegister cmp2); @@ -187,6 +188,8 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase { li(rd, Operand(j), mode); } + inline void Move(Register output, MemOperand operand) { Ld(output, operand); } + void li(Register dst, Handle<HeapObject> value, LiFlags mode = OPTIMIZE_SIZE); void li(Register dst, ExternalReference value, LiFlags mode = OPTIMIZE_SIZE); void li(Register dst, const StringConstantBase* string, @@ -197,6 +200,8 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase { void LoadRootRegisterOffset(Register destination, intptr_t offset) override; void LoadRootRelative(Register destination, int32_t offset) override; + inline void GenPCRelativeJump(Register rd, int64_t imm32); + inline void GenPCRelativeJumpAndLink(Register rd, int64_t imm32); // Jump, Call, and Ret pseudo instructions implementing inter-working. #define COND_ARGS \ Condition cond = al, Register rs = zero_reg, \ @@ -223,7 +228,20 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase { // Load the builtin given by the Smi in |builtin_index| into the same // register. void LoadEntryFromBuiltinIndex(Register builtin_index); + void LoadEntryFromBuiltinIndex(Builtins::Name builtin_index, + Register destination); + MemOperand EntryFromBuiltinIndexAsOperand(Builtins::Name builtin_index); void CallBuiltinByIndex(Register builtin_index) override; + void CallBuiltin(Builtins::Name builtin) { + // TODO(11527): drop the int overload in favour of the Builtins::Name one. + return CallBuiltin(static_cast<int>(builtin)); + } + void CallBuiltin(int builtin_index); + void TailCallBuiltin(Builtins::Name builtin) { + // TODO(11527): drop the int overload in favour of the Builtins::Name one. + return TailCallBuiltin(static_cast<int>(builtin)); + } + void TailCallBuiltin(int builtin_index); void LoadCodeObjectEntry(Register destination, Register code_object) override; void CallCodeObject(Register code_object) override; @@ -799,7 +817,7 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase { void Ceil_s_s(FPURegister fd, FPURegister fs, FPURegister fpu_scratch); // Jump the register contains a smi. - void JumpIfSmi(Register value, Label* smi_label, Register scratch = t3); + void JumpIfSmi(Register value, Label* smi_label); void JumpIfEqual(Register a, int32_t b, Label* dest) { Branch(dest, eq, a, Operand(b)); @@ -816,8 +834,7 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase { static int ActivationFrameAlignment(); // Calculated scaled address (rd) as rt + rs << sa - void CalcScaledAddress(Register rd, Register rs, Register rt, uint8_t sa, - Register scratch = t3); + void CalcScaledAddress(Register rd, Register rs, Register rt, uint8_t sa); // Compute the start of the generated instruction stream from the current PC. // This is an alternative to embedding the {CodeObject} handle as a reference. @@ -953,8 +970,8 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { void RecordWriteField( Register object, int offset, Register value, Register scratch, RAStatus ra_status, SaveFPRegsMode save_fp, - RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, - SmiCheck smi_check = INLINE_SMI_CHECK); + RememberedSetAction remembered_set_action = RememberedSetAction::kEmit, + SmiCheck smi_check = SmiCheck::kInline); // For a given |object| notify the garbage collector that the slot |address| // has been written. |value| is the object being stored. The value and @@ -962,16 +979,16 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { void RecordWrite( Register object, Register address, Register value, RAStatus ra_status, SaveFPRegsMode save_fp, - RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, - SmiCheck smi_check = INLINE_SMI_CHECK); + RememberedSetAction remembered_set_action = RememberedSetAction::kEmit, + SmiCheck smi_check = SmiCheck::kInline); // void Pref(int32_t hint, const MemOperand& rs); // --------------------------------------------------------------------------- // Pseudo-instructions. - void LoadWordPair(Register rd, const MemOperand& rs, Register scratch = t3); - void StoreWordPair(Register rd, const MemOperand& rs, Register scratch = t3); + void LoadWordPair(Register rd, const MemOperand& rs); + void StoreWordPair(Register rd, const MemOperand& rs); void Madd_s(FPURegister fd, FPURegister fr, FPURegister fs, FPURegister ft); void Madd_d(FPURegister fd, FPURegister fr, FPURegister fs, FPURegister ft); @@ -1011,7 +1028,7 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { // Invoke the JavaScript function code by either calling or jumping. void InvokeFunctionCode(Register function, Register new_target, Register expected_parameter_count, - Register actual_parameter_count, InvokeFlag flag); + Register actual_parameter_count, InvokeType type); // On function call, call into the debugger if necessary. void CheckDebugHook(Register fun, Register new_target, @@ -1022,12 +1039,9 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { // current context to the context in the function before invoking. void InvokeFunctionWithNewTarget(Register function, Register new_target, Register actual_parameter_count, - InvokeFlag flag); + InvokeType type); void InvokeFunction(Register function, Register expected_parameter_count, - Register actual_parameter_count, InvokeFlag flag); - - // Frame restart support. - void MaybeDropFrames(); + Register actual_parameter_count, InvokeType type); // Exception handling. @@ -1051,18 +1065,18 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { // Call a runtime routine. void CallRuntime(const Runtime::Function* f, int num_arguments, - SaveFPRegsMode save_doubles = kDontSaveFPRegs); + SaveFPRegsMode save_doubles = SaveFPRegsMode::kIgnore); // Convenience function: Same as above, but takes the fid instead. void CallRuntime(Runtime::FunctionId fid, - SaveFPRegsMode save_doubles = kDontSaveFPRegs) { + SaveFPRegsMode save_doubles = SaveFPRegsMode::kIgnore) { const Runtime::Function* function = Runtime::FunctionForId(fid); CallRuntime(function, function->nargs, save_doubles); } // Convenience function: Same as above, but takes the fid instead. void CallRuntime(Runtime::FunctionId fid, int num_arguments, - SaveFPRegsMode save_doubles = kDontSaveFPRegs) { + SaveFPRegsMode save_doubles = SaveFPRegsMode::kIgnore) { CallRuntime(Runtime::FunctionForId(fid), num_arguments, save_doubles); } @@ -1131,8 +1145,7 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { } // Jump if the register contains a non-smi. - void JumpIfNotSmi(Register value, Label* not_smi_label, - Register scratch = t3); + void JumpIfNotSmi(Register value, Label* not_smi_label); // Abort execution if argument is a smi, enabled via --debug-code. void AssertNotSmi(Register object); @@ -1170,7 +1183,7 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { // Helper functions for generating invokes. void InvokePrologue(Register expected_parameter_count, Register actual_parameter_count, Label* done, - InvokeFlag flag); + InvokeType type); // Compute memory operands for safepoint stack slots. static int SafepointRegisterStackIndex(int reg_code); diff --git a/deps/v8/src/codegen/riscv64/register-riscv64.h b/deps/v8/src/codegen/riscv64/register-riscv64.h index b97594becd..4aacad611d 100644 --- a/deps/v8/src/codegen/riscv64/register-riscv64.h +++ b/deps/v8/src/codegen/riscv64/register-riscv64.h @@ -337,7 +337,7 @@ constexpr Register kJavaScriptCallTargetRegister = kJSFunctionRegister; constexpr Register kJavaScriptCallNewTargetRegister = a3; constexpr Register kJavaScriptCallExtraArg1Register = a2; -constexpr Register kOffHeapTrampolineRegister = t3; +constexpr Register kOffHeapTrampolineRegister = t6; constexpr Register kRuntimeCallFunctionRegister = a1; constexpr Register kRuntimeCallArgCountRegister = a0; constexpr Register kRuntimeCallArgvRegister = a2; diff --git a/deps/v8/src/codegen/s390/assembler-s390.cc b/deps/v8/src/codegen/s390/assembler-s390.cc index dd5f59bc0b..da51395dfd 100644 --- a/deps/v8/src/codegen/s390/assembler-s390.cc +++ b/deps/v8/src/codegen/s390/assembler-s390.cc @@ -160,7 +160,11 @@ static bool supportsSTFLE() { } bool CpuFeatures::SupportsWasmSimd128() { +#if V8_ENABLE_WEBASSEMBLY return CpuFeatures::IsSupported(VECTOR_ENHANCE_FACILITY_1); +#else + return false; +#endif // V8_ENABLE_WEBASSEMBLY } void CpuFeatures::ProbeImpl(bool cross_compile) { diff --git a/deps/v8/src/codegen/s390/interface-descriptors-s390-inl.h b/deps/v8/src/codegen/s390/interface-descriptors-s390-inl.h new file mode 100644 index 0000000000..d672c4354d --- /dev/null +++ b/deps/v8/src/codegen/s390/interface-descriptors-s390-inl.h @@ -0,0 +1,256 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef V8_CODEGEN_S390_INTERFACE_DESCRIPTORS_S390_INL_H_ +#define V8_CODEGEN_S390_INTERFACE_DESCRIPTORS_S390_INL_H_ + +#if V8_TARGET_ARCH_S390 + +#include "src/codegen/interface-descriptors.h" +#include "src/execution/frames.h" + +namespace v8 { +namespace internal { + +constexpr auto CallInterfaceDescriptor::DefaultRegisterArray() { + auto registers = RegisterArray(r2, r3, r4, r5, r6); + STATIC_ASSERT(registers.size() == kMaxBuiltinRegisterParams); + return registers; +} + +// static +constexpr auto RecordWriteDescriptor::registers() { + return RegisterArray(r2, r3, r4, r5, r6, kReturnRegister0); +} + +// static +constexpr auto DynamicCheckMapsDescriptor::registers() { + return RegisterArray(r2, r3, r4, r5, cp); +} + +// static +constexpr auto EphemeronKeyBarrierDescriptor::registers() { + return RegisterArray(r2, r3, r4, r5, r6, kReturnRegister0); +} + +// static +constexpr Register LoadDescriptor::ReceiverRegister() { return r3; } +// static +constexpr Register LoadDescriptor::NameRegister() { return r4; } +// static +constexpr Register LoadDescriptor::SlotRegister() { return r2; } + +// static +constexpr Register LoadWithVectorDescriptor::VectorRegister() { return r5; } + +// static +constexpr Register +LoadWithReceiverAndVectorDescriptor::LookupStartObjectRegister() { + return r6; +} + +// static +constexpr Register StoreDescriptor::ReceiverRegister() { return r3; } +// static +constexpr Register StoreDescriptor::NameRegister() { return r4; } +// static +constexpr Register StoreDescriptor::ValueRegister() { return r2; } +// static +constexpr Register StoreDescriptor::SlotRegister() { return r6; } + +// static +constexpr Register StoreWithVectorDescriptor::VectorRegister() { return r5; } + +// static +constexpr Register StoreTransitionDescriptor::MapRegister() { return r7; } + +// static +constexpr Register ApiGetterDescriptor::HolderRegister() { return r2; } +// static +constexpr Register ApiGetterDescriptor::CallbackRegister() { return r5; } + +// static +constexpr Register GrowArrayElementsDescriptor::ObjectRegister() { return r2; } +// static +constexpr Register GrowArrayElementsDescriptor::KeyRegister() { return r5; } + +// static +constexpr Register BaselineLeaveFrameDescriptor::ParamsSizeRegister() { + // TODO(v8:11421): Implement on this platform. + return r5; +} +// static +constexpr Register BaselineLeaveFrameDescriptor::WeightRegister() { + // TODO(v8:11421): Implement on this platform. + return r6; +} + +// static +// static +constexpr Register TypeConversionDescriptor::ArgumentRegister() { return r2; } + +// static +constexpr auto TypeofDescriptor::registers() { return RegisterArray(r5); } + +// static +constexpr auto CallTrampolineDescriptor::registers() { + // r2 : number of arguments + // r3 : the target to call + return RegisterArray(r3, r2); +} + +// static +constexpr auto CallVarargsDescriptor::registers() { + // r2 : number of arguments (on the stack, not including receiver) + // r3 : the target to call + // r6 : arguments list length (untagged) + // r4 : arguments list (FixedArray) + return RegisterArray(r3, r2, r6, r4); +} + +// static +constexpr auto CallForwardVarargsDescriptor::registers() { + // r2 : number of arguments + // r4 : start index (to support rest parameters) + // r3 : the target to call + return RegisterArray(r3, r2, r4); +} + +// static +constexpr auto CallFunctionTemplateDescriptor::registers() { + // r3 : function template info + // r4 : number of arguments (on the stack, not including receiver) + return RegisterArray(r3, r4); +} + +// static +constexpr auto CallWithSpreadDescriptor::registers() { + // r2: number of arguments (on the stack, not including receiver) + // r3 : the target to call + // r4 : the object to spread + return RegisterArray(r3, r2, r4); +} + +// static +constexpr auto CallWithArrayLikeDescriptor::registers() { + // r3 : the target to call + // r4 : the arguments list + return RegisterArray(r3, r4); +} + +// static +constexpr auto ConstructVarargsDescriptor::registers() { + // r2 : number of arguments (on the stack, not including receiver) + // r3 : the target to call + // r5 : the new target + // r6 : arguments list length (untagged) + // r4 : arguments list (FixedArray) + return RegisterArray(r3, r5, r2, r6, r4); +} + +// static +constexpr auto ConstructForwardVarargsDescriptor::registers() { + // r2 : number of arguments + // r5 : the new target + // r4 : start index (to support rest parameters) + // r3 : the target to call + return RegisterArray(r3, r5, r2, r4); +} + +// static +constexpr auto ConstructWithSpreadDescriptor::registers() { + // r2 : number of arguments (on the stack, not including receiver) + // r3 : the target to call + // r5 : the new target + // r4 : the object to spread + return RegisterArray(r3, r5, r2, r4); +} + +// static +constexpr auto ConstructWithArrayLikeDescriptor::registers() { + // r3 : the target to call + // r5 : the new target + // r4 : the arguments list + return RegisterArray(r3, r5, r4); +} + +// static +constexpr auto ConstructStubDescriptor::registers() { + // r2 : number of arguments + // r3 : the target to call + // r5 : the new target + // r4 : allocation site or undefined + return RegisterArray(r3, r5, r2, r4); +} + +// static +constexpr auto AbortDescriptor::registers() { return RegisterArray(r3); } + +// static +constexpr auto CompareDescriptor::registers() { return RegisterArray(r3, r2); } + +// static +constexpr auto Compare_BaselineDescriptor::registers() { + // TODO(v8:11421): Implement on this platform. + return DefaultRegisterArray(); +} + +// static +constexpr auto BinaryOpDescriptor::registers() { return RegisterArray(r3, r2); } + +// static +constexpr auto BinaryOp_BaselineDescriptor::registers() { + // TODO(v8:11421): Implement on this platform. + return DefaultRegisterArray(); +} + +// static +constexpr auto ApiCallbackDescriptor::registers() { + return RegisterArray(r3, // kApiFunctionAddress + r4, // kArgc + r5, // kCallData + r2); // kHolder +} + +// static +constexpr auto InterpreterDispatchDescriptor::registers() { + return RegisterArray( + kInterpreterAccumulatorRegister, kInterpreterBytecodeOffsetRegister, + kInterpreterBytecodeArrayRegister, kInterpreterDispatchTableRegister); +} + +// static +constexpr auto InterpreterPushArgsThenCallDescriptor::registers() { + return RegisterArray(r2, // argument count (not including receiver) + r4, // address of first argument + r3); // the target callable to be call +} + +// static +constexpr auto InterpreterPushArgsThenConstructDescriptor::registers() { + return RegisterArray( + r2, // argument count (not including receiver) + r6, // address of the first argument + r3, // constructor to call + r5, // new target + r4); // allocation site feedback if available, undefined otherwise +} + +// static +constexpr auto ResumeGeneratorDescriptor::registers() { + return RegisterArray(r2, // the value to pass to the generator + r3); // the JSGeneratorObject to resume +} + +// static +constexpr auto RunMicrotasksEntryDescriptor::registers() { + return RegisterArray(r2, r3); +} + +} // namespace internal +} // namespace v8 + +#endif // V8_TARGET_ARCH_S390 + +#endif // V8_CODEGEN_S390_INTERFACE_DESCRIPTORS_S390_INL_H_ diff --git a/deps/v8/src/codegen/s390/interface-descriptors-s390.cc b/deps/v8/src/codegen/s390/interface-descriptors-s390.cc deleted file mode 100644 index 9a9ecdcb8b..0000000000 --- a/deps/v8/src/codegen/s390/interface-descriptors-s390.cc +++ /dev/null @@ -1,306 +0,0 @@ -// Copyright 2015 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#if V8_TARGET_ARCH_S390 - -#include "src/codegen/interface-descriptors.h" - -#include "src/execution/frames.h" - -namespace v8 { -namespace internal { - -const Register CallInterfaceDescriptor::ContextRegister() { return cp; } - -void CallInterfaceDescriptor::DefaultInitializePlatformSpecific( - CallInterfaceDescriptorData* data, int register_parameter_count) { - const Register default_stub_registers[] = {r2, r3, r4, r5, r6}; - CHECK_LE(static_cast<size_t>(register_parameter_count), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(register_parameter_count, - default_stub_registers); -} - -void RecordWriteDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - const Register default_stub_registers[] = {r2, r3, r4, r5, r6}; - - data->RestrictAllocatableRegisters(default_stub_registers, - arraysize(default_stub_registers)); - - CHECK_LE(static_cast<size_t>(kParameterCount), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(kParameterCount, default_stub_registers); -} - -void DynamicCheckMapsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register default_stub_registers[] = {r2, r3, r4, r5, cp}; - - data->RestrictAllocatableRegisters(default_stub_registers, - arraysize(default_stub_registers)); - - CHECK_LE(static_cast<size_t>(kParameterCount), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(kParameterCount, default_stub_registers); -} - -void EphemeronKeyBarrierDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - const Register default_stub_registers[] = {r2, r3, r4, r5, r6}; - - data->RestrictAllocatableRegisters(default_stub_registers, - arraysize(default_stub_registers)); - - CHECK_LE(static_cast<size_t>(kParameterCount), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(kParameterCount, default_stub_registers); -} - -const Register LoadDescriptor::ReceiverRegister() { return r3; } -const Register LoadDescriptor::NameRegister() { return r4; } -const Register LoadDescriptor::SlotRegister() { return r2; } - -const Register LoadWithVectorDescriptor::VectorRegister() { return r5; } - -const Register -LoadWithReceiverAndVectorDescriptor::LookupStartObjectRegister() { - return r6; -} - -const Register StoreDescriptor::ReceiverRegister() { return r3; } -const Register StoreDescriptor::NameRegister() { return r4; } -const Register StoreDescriptor::ValueRegister() { return r2; } -const Register StoreDescriptor::SlotRegister() { return r6; } - -const Register StoreWithVectorDescriptor::VectorRegister() { return r5; } - -const Register StoreTransitionDescriptor::SlotRegister() { return r6; } -const Register StoreTransitionDescriptor::VectorRegister() { return r5; } -const Register StoreTransitionDescriptor::MapRegister() { return r7; } - -const Register ApiGetterDescriptor::HolderRegister() { return r2; } -const Register ApiGetterDescriptor::CallbackRegister() { return r5; } - -const Register GrowArrayElementsDescriptor::ObjectRegister() { return r2; } -const Register GrowArrayElementsDescriptor::KeyRegister() { return r5; } - -const Register BaselineLeaveFrameDescriptor::ParamsSizeRegister() { - // TODO(v8:11421): Implement on this platform. - UNREACHABLE(); -} -const Register BaselineLeaveFrameDescriptor::WeightRegister() { - // TODO(v8:11421): Implement on this platform. - UNREACHABLE(); -} - -// static -const Register TypeConversionDescriptor::ArgumentRegister() { return r2; } - -void TypeofDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {r5}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallTrampolineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r2 : number of arguments - // r3 : the target to call - Register registers[] = {r3, r2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r2 : number of arguments (on the stack, not including receiver) - // r3 : the target to call - // r6 : arguments list length (untagged) - // r4 : arguments list (FixedArray) - Register registers[] = {r3, r2, r6, r4}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallForwardVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r2 : number of arguments - // r4 : start index (to support rest parameters) - // r3 : the target to call - Register registers[] = {r3, r2, r4}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallFunctionTemplateDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r3 : function template info - // r4 : number of arguments (on the stack, not including receiver) - Register registers[] = {r3, r4}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallWithSpreadDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r2 : number of arguments (on the stack, not including receiver) - // r3 : the target to call - // r4 : the object to spread - Register registers[] = {r3, r2, r4}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallWithArrayLikeDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r3 : the target to call - // r4 : the arguments list - Register registers[] = {r3, r4}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r2 : number of arguments (on the stack, not including receiver) - // r3 : the target to call - // r5 : the new target - // r6 : arguments list length (untagged) - // r4 : arguments list (FixedArray) - Register registers[] = {r3, r5, r2, r6, r4}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructForwardVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r2 : number of arguments - // r5 : the new target - // r4 : start index (to support rest parameters) - // r3 : the target to call - Register registers[] = {r3, r5, r2, r4}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructWithSpreadDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r2 : number of arguments (on the stack, not including receiver) - // r3 : the target to call - // r5 : the new target - // r4 : the object to spread - Register registers[] = {r3, r5, r2, r4}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructWithArrayLikeDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r3 : the target to call - // r5 : the new target - // r4 : the arguments list - Register registers[] = {r3, r5, r4}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructStubDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // r2 : number of arguments - // r3 : the target to call - // r5 : the new target - // r4 : allocation site or undefined - Register registers[] = {r3, r5, r2, r4}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void AbortDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {r3}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CompareDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {r3, r2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void Compare_BaselineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // TODO(v8:11421): Implement on this platform. - InitializePlatformUnimplemented(data, kParameterCount); -} - -void BinaryOpDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {r3, r2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void BinaryOp_BaselineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // TODO(v8:11421): Implement on this platform. - InitializePlatformUnimplemented(data, kParameterCount); -} - -void ApiCallbackDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - r3, // kApiFunctionAddress - r4, // kArgc - r5, // kCallData - r2, // kHolder - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void InterpreterDispatchDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - kInterpreterAccumulatorRegister, kInterpreterBytecodeOffsetRegister, - kInterpreterBytecodeArrayRegister, kInterpreterDispatchTableRegister}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void InterpreterPushArgsThenCallDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - r2, // argument count (not including receiver) - r4, // address of first argument - r3 // the target callable to be call - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void InterpreterPushArgsThenConstructDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - r2, // argument count (not including receiver) - r6, // address of the first argument - r3, // constructor to call - r5, // new target - r4, // allocation site feedback if available, undefined otherwise - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ResumeGeneratorDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - r2, // the value to pass to the generator - r3 // the JSGeneratorObject to resume - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void FrameDropperTrampolineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - r3, // loaded new FP - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void RunMicrotasksEntryDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {r2, r3}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -} // namespace internal -} // namespace v8 - -#endif // V8_TARGET_ARCH_S390 diff --git a/deps/v8/src/codegen/s390/macro-assembler-s390.cc b/deps/v8/src/codegen/s390/macro-assembler-s390.cc index be5798d8d4..de25a93d8b 100644 --- a/deps/v8/src/codegen/s390/macro-assembler-s390.cc +++ b/deps/v8/src/codegen/s390/macro-assembler-s390.cc @@ -12,6 +12,7 @@ #include "src/codegen/callable.h" #include "src/codegen/code-factory.h" #include "src/codegen/external-reference-table.h" +#include "src/codegen/interface-descriptors-inl.h" #include "src/codegen/macro-assembler.h" #include "src/codegen/register-configuration.h" #include "src/debug/debug.h" @@ -40,6 +41,12 @@ namespace internal { void TurboAssembler::DoubleMax(DoubleRegister result_reg, DoubleRegister left_reg, DoubleRegister right_reg) { + if (CpuFeatures::IsSupported(VECTOR_ENHANCE_FACILITY_1)) { + vfmax(result_reg, left_reg, right_reg, Condition(1), Condition(8), + Condition(3)); + return; + } + Label check_zero, return_left, return_right, return_nan, done; cdbr(left_reg, right_reg); bunordered(&return_nan, Label::kNear); @@ -80,6 +87,11 @@ void TurboAssembler::DoubleMax(DoubleRegister result_reg, void TurboAssembler::DoubleMin(DoubleRegister result_reg, DoubleRegister left_reg, DoubleRegister right_reg) { + if (CpuFeatures::IsSupported(VECTOR_ENHANCE_FACILITY_1)) { + vfmin(result_reg, left_reg, right_reg, Condition(1), Condition(8), + Condition(3)); + return; + } Label check_zero, return_left, return_right, return_nan, done; cdbr(left_reg, right_reg); bunordered(&return_nan, Label::kNear); @@ -126,6 +138,11 @@ void TurboAssembler::DoubleMin(DoubleRegister result_reg, void TurboAssembler::FloatMax(DoubleRegister result_reg, DoubleRegister left_reg, DoubleRegister right_reg) { + if (CpuFeatures::IsSupported(VECTOR_ENHANCE_FACILITY_1)) { + vfmax(result_reg, left_reg, right_reg, Condition(1), Condition(8), + Condition(2)); + return; + } Label check_zero, return_left, return_right, return_nan, done; cebr(left_reg, right_reg); bunordered(&return_nan, Label::kNear); @@ -166,6 +183,12 @@ void TurboAssembler::FloatMax(DoubleRegister result_reg, void TurboAssembler::FloatMin(DoubleRegister result_reg, DoubleRegister left_reg, DoubleRegister right_reg) { + if (CpuFeatures::IsSupported(VECTOR_ENHANCE_FACILITY_1)) { + vfmin(result_reg, left_reg, right_reg, Condition(1), Condition(8), + Condition(2)); + return; + } + Label check_zero, return_left, return_right, return_nan, done; cebr(left_reg, right_reg); bunordered(&return_nan, Label::kNear); @@ -208,6 +231,39 @@ void TurboAssembler::FloatMin(DoubleRegister result_reg, } bind(&done); } + +void TurboAssembler::CeilF32(DoubleRegister dst, DoubleRegister src) { + fiebra(ROUND_TOWARD_POS_INF, dst, src); +} + +void TurboAssembler::CeilF64(DoubleRegister dst, DoubleRegister src) { + fidbra(ROUND_TOWARD_POS_INF, dst, src); +} + +void TurboAssembler::FloorF32(DoubleRegister dst, DoubleRegister src) { + fiebra(ROUND_TOWARD_NEG_INF, dst, src); +} + +void TurboAssembler::FloorF64(DoubleRegister dst, DoubleRegister src) { + fidbra(ROUND_TOWARD_NEG_INF, dst, src); +} + +void TurboAssembler::TruncF32(DoubleRegister dst, DoubleRegister src) { + fiebra(ROUND_TOWARD_0, dst, src); +} + +void TurboAssembler::TruncF64(DoubleRegister dst, DoubleRegister src) { + fidbra(ROUND_TOWARD_0, dst, src); +} + +void TurboAssembler::NearestIntF32(DoubleRegister dst, DoubleRegister src) { + fiebra(ROUND_TO_NEAREST_TO_EVEN, dst, src); +} + +void TurboAssembler::NearestIntF64(DoubleRegister dst, DoubleRegister src) { + fidbra(ROUND_TO_NEAREST_TO_EVEN, dst, src); +} + int TurboAssembler::RequiredStackSizeForCallerSaved(SaveFPRegsMode fp_mode, Register exclusion1, Register exclusion2, @@ -227,7 +283,7 @@ int TurboAssembler::RequiredStackSizeForCallerSaved(SaveFPRegsMode fp_mode, RegList list = kJSCallerSaved & ~exclusions; bytes += NumRegs(list) * kSystemPointerSize; - if (fp_mode == kSaveFPRegs) { + if (fp_mode == SaveFPRegsMode::kSave) { bytes += NumRegs(kCallerSavedDoubles) * kDoubleSize; } @@ -252,7 +308,7 @@ int TurboAssembler::PushCallerSaved(SaveFPRegsMode fp_mode, Register exclusion1, MultiPush(list); bytes += NumRegs(list) * kSystemPointerSize; - if (fp_mode == kSaveFPRegs) { + if (fp_mode == SaveFPRegsMode::kSave) { MultiPushDoubles(kCallerSavedDoubles); bytes += NumRegs(kCallerSavedDoubles) * kDoubleSize; } @@ -263,7 +319,7 @@ int TurboAssembler::PushCallerSaved(SaveFPRegsMode fp_mode, Register exclusion1, int TurboAssembler::PopCallerSaved(SaveFPRegsMode fp_mode, Register exclusion1, Register exclusion2, Register exclusion3) { int bytes = 0; - if (fp_mode == kSaveFPRegs) { + if (fp_mode == SaveFPRegsMode::kSave) { MultiPopDoubles(kCallerSavedDoubles); bytes += NumRegs(kCallerSavedDoubles) * kDoubleSize; } @@ -759,7 +815,7 @@ void MacroAssembler::RecordWriteField(Register object, int offset, Label done; // Skip barrier if writing a smi. - if (smi_check == INLINE_SMI_CHECK) { + if (smi_check == SmiCheck::kInline) { JumpIfSmi(value, &done); } @@ -768,7 +824,7 @@ void MacroAssembler::RecordWriteField(Register object, int offset, DCHECK(IsAligned(offset, kTaggedSize)); lay(dst, MemOperand(object, offset - kHeapObjectTag)); - if (emit_debug_code()) { + if (FLAG_debug_code) { Label ok; AndP(r0, dst, Operand(kTaggedSize - 1)); beq(&ok, Label::kNear); @@ -777,13 +833,13 @@ void MacroAssembler::RecordWriteField(Register object, int offset, } RecordWrite(object, dst, value, lr_status, save_fp, remembered_set_action, - OMIT_SMI_CHECK); + SmiCheck::kOmit); bind(&done); // Clobber clobbered input registers when running with the debug-code flag // turned on to provoke errors. - if (emit_debug_code()) { + if (FLAG_debug_code) { mov(value, Operand(bit_cast<intptr_t>(kZapValue + 4))); mov(dst, Operand(bit_cast<intptr_t>(kZapValue + 8))); } @@ -911,13 +967,13 @@ void MacroAssembler::RecordWrite(Register object, Register address, RememberedSetAction remembered_set_action, SmiCheck smi_check) { DCHECK(object != value); - if (emit_debug_code()) { + if (FLAG_debug_code) { LoadTaggedPointerField(r0, MemOperand(address)); CmpS64(value, r0); Check(eq, AbortReason::kWrongAddressOrValuePassedToRecordWrite); } - if ((remembered_set_action == OMIT_REMEMBERED_SET && + if ((remembered_set_action == RememberedSetAction::kOmit && !FLAG_incremental_marking) || FLAG_disable_write_barriers) { return; @@ -926,7 +982,7 @@ void MacroAssembler::RecordWrite(Register object, Register address, // catch stores of smis and stores into the young generation. Label done; - if (smi_check == INLINE_SMI_CHECK) { + if (smi_check == SmiCheck::kInline) { JumpIfSmi(value, &done); } @@ -950,7 +1006,7 @@ void MacroAssembler::RecordWrite(Register object, Register address, // Clobber clobbered registers when running with the debug-code flag // turned on to provoke errors. - if (emit_debug_code()) { + if (FLAG_debug_code) { mov(address, Operand(bit_cast<intptr_t>(kZapValue + 12))); mov(value, Operand(bit_cast<intptr_t>(kZapValue + 16))); } @@ -1352,7 +1408,7 @@ void MacroAssembler::EnterExitFrame(bool save_doubles, int stack_space, // Reserve room for saved entry sp. lay(sp, MemOperand(fp, -ExitFrameConstants::kFixedFrameSizeFromFp)); - if (emit_debug_code()) { + if (FLAG_debug_code) { StoreU64(MemOperand(fp, ExitFrameConstants::kSPOffset), Operand::Zero(), r1); } @@ -1537,7 +1593,7 @@ void MacroAssembler::StackOverflowCheck(Register num_args, Register scratch, void MacroAssembler::InvokePrologue(Register expected_parameter_count, Register actual_parameter_count, - Label* done, InvokeFlag flag) { + Label* done, InvokeType type) { Label regular_invoke; // r2: actual arguments count @@ -1653,9 +1709,9 @@ void MacroAssembler::CheckDebugHook(Register fun, Register new_target, void MacroAssembler::InvokeFunctionCode(Register function, Register new_target, Register expected_parameter_count, Register actual_parameter_count, - InvokeFlag flag) { + InvokeType type) { // You can't call a function without a valid frame. - DCHECK_IMPLIES(flag == CALL_FUNCTION, has_frame()); + DCHECK_IMPLIES(type == InvokeType::kCall, has_frame()); DCHECK_EQ(function, r3); DCHECK_IMPLIES(new_target.is_valid(), new_target == r5); @@ -1669,18 +1725,20 @@ void MacroAssembler::InvokeFunctionCode(Register function, Register new_target, } Label done; - InvokePrologue(expected_parameter_count, actual_parameter_count, &done, flag); + InvokePrologue(expected_parameter_count, actual_parameter_count, &done, type); // We call indirectly through the code field in the function to // allow recompilation to take effect without changing any of the // call sites. Register code = kJavaScriptCallCodeStartRegister; LoadTaggedPointerField(code, FieldMemOperand(function, JSFunction::kCodeOffset)); - if (flag == CALL_FUNCTION) { - CallCodeObject(code); - } else { - DCHECK(flag == JUMP_FUNCTION); - JumpCodeObject(code); + switch (type) { + case InvokeType::kCall: + CallCodeObject(code); + break; + case InvokeType::kJump: + JumpCodeObject(code); + break; } // Continue here if InvokePrologue does handle the invocation due to // mismatched parameter counts. @@ -1689,9 +1747,9 @@ void MacroAssembler::InvokeFunctionCode(Register function, Register new_target, void MacroAssembler::InvokeFunctionWithNewTarget( Register fun, Register new_target, Register actual_parameter_count, - InvokeFlag flag) { + InvokeType type) { // You can't call a function without a valid frame. - DCHECK_IMPLIES(flag == CALL_FUNCTION, has_frame()); + DCHECK_IMPLIES(type == InvokeType::kCall, has_frame()); // Contract with called JS functions requires that function is passed in r3. DCHECK_EQ(fun, r3); @@ -1707,15 +1765,15 @@ void MacroAssembler::InvokeFunctionWithNewTarget( SharedFunctionInfo::kFormalParameterCountOffset)); InvokeFunctionCode(fun, new_target, expected_reg, actual_parameter_count, - flag); + type); } void MacroAssembler::InvokeFunction(Register function, Register expected_parameter_count, Register actual_parameter_count, - InvokeFlag flag) { + InvokeType type) { // You can't call a function without a valid frame. - DCHECK_IMPLIES(flag == CALL_FUNCTION, has_frame()); + DCHECK_IMPLIES(type == InvokeType::kCall, has_frame()); // Contract with called JS functions requires that function is passed in r3. DCHECK_EQ(function, r3); @@ -1725,18 +1783,7 @@ void MacroAssembler::InvokeFunction(Register function, FieldMemOperand(function, JSFunction::kContextOffset)); InvokeFunctionCode(r3, no_reg, expected_parameter_count, - actual_parameter_count, flag); -} - -void MacroAssembler::MaybeDropFrames() { - // Check whether we need to drop frames to restart a function on the stack. - ExternalReference restart_fp = - ExternalReference::debug_restart_fp_address(isolate()); - Move(r3, restart_fp); - LoadU64(r3, MemOperand(r3)); - CmpS64(r3, Operand::Zero()); - Jump(BUILTIN_CODE(isolate(), FrameDropperTrampoline), RelocInfo::CODE_TARGET, - ne); + actual_parameter_count, type); } void MacroAssembler::PushStackHandler() { @@ -1904,8 +1951,8 @@ void MacroAssembler::TailCallRuntime(Runtime::FunctionId fid) { void MacroAssembler::JumpToExternalReference(const ExternalReference& builtin, bool builtin_exit_frame) { Move(r3, builtin); - Handle<Code> code = CodeFactory::CEntry(isolate(), 1, kDontSaveFPRegs, - kArgvOnStack, builtin_exit_frame); + Handle<Code> code = CodeFactory::CEntry(isolate(), 1, SaveFPRegsMode::kIgnore, + ArgvMode::kStack, builtin_exit_frame); Jump(code, RelocInfo::CODE_TARGET); } @@ -1947,11 +1994,11 @@ void MacroAssembler::DecrementCounter(StatsCounter* counter, int value, } void TurboAssembler::Assert(Condition cond, AbortReason reason, CRegister cr) { - if (emit_debug_code()) Check(cond, reason, cr); + if (FLAG_debug_code) Check(cond, reason, cr); } void TurboAssembler::AssertUnreachable(AbortReason reason) { - if (emit_debug_code()) Abort(reason); + if (FLAG_debug_code) Abort(reason); } void TurboAssembler::Check(Condition cond, AbortReason reason, CRegister cr) { @@ -1965,11 +2012,11 @@ void TurboAssembler::Check(Condition cond, AbortReason reason, CRegister cr) { void TurboAssembler::Abort(AbortReason reason) { Label abort_start; bind(&abort_start); -#ifdef DEBUG - const char* msg = GetAbortReason(reason); - RecordComment("Abort message: "); - RecordComment(msg); -#endif + if (FLAG_code_comments) { + const char* msg = GetAbortReason(reason); + RecordComment("Abort message: "); + RecordComment(msg); + } // Avoid emitting call to builtin if requested. if (trap_on_abort()) { @@ -2017,7 +2064,7 @@ void MacroAssembler::LoadNativeContextSlot(Register dst, int index) { } void MacroAssembler::AssertNotSmi(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { STATIC_ASSERT(kSmiTag == 0); TestIfSmi(object); Check(ne, AbortReason::kOperandIsASmi, cr0); @@ -2025,7 +2072,7 @@ void MacroAssembler::AssertNotSmi(Register object) { } void MacroAssembler::AssertSmi(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { STATIC_ASSERT(kSmiTag == 0); TestIfSmi(object); Check(eq, AbortReason::kOperandIsNotASmi, cr0); @@ -2033,7 +2080,7 @@ void MacroAssembler::AssertSmi(Register object) { } void MacroAssembler::AssertConstructor(Register object, Register scratch) { - if (emit_debug_code()) { + if (FLAG_debug_code) { STATIC_ASSERT(kSmiTag == 0); TestIfSmi(object); Check(ne, AbortReason::kOperandIsASmiAndNotAConstructor); @@ -2045,7 +2092,7 @@ void MacroAssembler::AssertConstructor(Register object, Register scratch) { } void MacroAssembler::AssertFunction(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { STATIC_ASSERT(kSmiTag == 0); TestIfSmi(object); Check(ne, AbortReason::kOperandIsASmiAndNotAFunction, cr0); @@ -2059,7 +2106,7 @@ void MacroAssembler::AssertFunction(Register object) { } void MacroAssembler::AssertBoundFunction(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { STATIC_ASSERT(kSmiTag == 0); TestIfSmi(object); Check(ne, AbortReason::kOperandIsASmiAndNotABoundFunction, cr0); @@ -2071,7 +2118,7 @@ void MacroAssembler::AssertBoundFunction(Register object) { } void MacroAssembler::AssertGeneratorObject(Register object) { - if (!emit_debug_code()) return; + if (!FLAG_debug_code) return; TestIfSmi(object); Check(ne, AbortReason::kOperandIsASmiAndNotAGeneratorObject, cr0); @@ -2101,7 +2148,7 @@ void MacroAssembler::AssertGeneratorObject(Register object) { void MacroAssembler::AssertUndefinedOrAllocationSite(Register object, Register scratch) { - if (emit_debug_code()) { + if (FLAG_debug_code) { Label done_checking; AssertNotSmi(object); CompareRoot(object, RootIndex::kUndefinedValue); diff --git a/deps/v8/src/codegen/s390/macro-assembler-s390.h b/deps/v8/src/codegen/s390/macro-assembler-s390.h index f2719c3086..13d7ac696b 100644 --- a/deps/v8/src/codegen/s390/macro-assembler-s390.h +++ b/deps/v8/src/codegen/s390/macro-assembler-s390.h @@ -32,8 +32,6 @@ inline MemOperand FieldMemOperand(Register object, Register index, int offset) { return MemOperand(object, index, offset - kHeapObjectTag); } -enum RememberedSetAction { EMIT_REMEMBERED_SET, OMIT_REMEMBERED_SET }; -enum SmiCheck { INLINE_SMI_CHECK, OMIT_SMI_CHECK }; enum LinkRegisterStatus { kLRHasNotBeenSaved, kLRHasBeenSaved }; Register GetRegisterThatIsNotOneOf(Register reg1, Register reg2 = no_reg, @@ -70,6 +68,15 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase { DoubleRegister right_reg); void FloatMin(DoubleRegister result_reg, DoubleRegister left_reg, DoubleRegister right_reg); + void CeilF32(DoubleRegister dst, DoubleRegister src); + void CeilF64(DoubleRegister dst, DoubleRegister src); + void FloorF32(DoubleRegister dst, DoubleRegister src); + void FloorF64(DoubleRegister dst, DoubleRegister src); + void TruncF32(DoubleRegister dst, DoubleRegister src); + void TruncF64(DoubleRegister dst, DoubleRegister src); + void NearestIntF32(DoubleRegister dst, DoubleRegister src); + void NearestIntF64(DoubleRegister dst, DoubleRegister src); + void LoadFromConstantsTable(Register destination, int constant_index) override; void LoadRootRegisterOffset(Register destination, intptr_t offset) override; @@ -769,9 +776,6 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase { void ResetRoundingMode(); // These exist to provide portability between 32 and 64bit - void LoadP(Register dst, const MemOperand& mem, Register scratch = no_reg) { - LoadU64(dst, mem, scratch); - } void LoadMultipleP(Register dst1, Register dst2, const MemOperand& mem); void StoreMultipleP(Register dst1, Register dst2, const MemOperand& mem); void LoadMultipleW(Register dst1, Register dst2, const MemOperand& mem); @@ -1094,22 +1098,22 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { } void CallRuntime(const Runtime::Function* f, int num_arguments, - SaveFPRegsMode save_doubles = kDontSaveFPRegs); + SaveFPRegsMode save_doubles = SaveFPRegsMode::kIgnore); void CallRuntimeSaveDoubles(Runtime::FunctionId fid) { const Runtime::Function* function = Runtime::FunctionForId(fid); - CallRuntime(function, function->nargs, kSaveFPRegs); + CallRuntime(function, function->nargs, SaveFPRegsMode::kSave); } // Convenience function: Same as above, but takes the fid instead. void CallRuntime(Runtime::FunctionId fid, - SaveFPRegsMode save_doubles = kDontSaveFPRegs) { + SaveFPRegsMode save_doubles = SaveFPRegsMode::kIgnore) { const Runtime::Function* function = Runtime::FunctionForId(fid); CallRuntime(function, function->nargs, save_doubles); } // Convenience function: Same as above, but takes the fid instead. void CallRuntime(Runtime::FunctionId fid, int num_arguments, - SaveFPRegsMode save_doubles = kDontSaveFPRegs) { + SaveFPRegsMode save_doubles = SaveFPRegsMode::kIgnore) { CallRuntime(Runtime::FunctionForId(fid), num_arguments, save_doubles); } @@ -1220,7 +1224,7 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { // Invoke the JavaScript function code by either calling or jumping. void InvokeFunctionCode(Register function, Register new_target, Register expected_parameter_count, - Register actual_parameter_count, InvokeFlag flag); + Register actual_parameter_count, InvokeType type); // On function call, call into the debugger if necessary. void CheckDebugHook(Register fun, Register new_target, @@ -1231,12 +1235,9 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { // current context to the context in the function before invoking. void InvokeFunctionWithNewTarget(Register function, Register new_target, Register actual_parameter_count, - InvokeFlag flag); + InvokeType type); void InvokeFunction(Register function, Register expected_parameter_count, - Register actual_parameter_count, InvokeFlag flag); - - // Frame restart support - void MaybeDropFrames(); + Register actual_parameter_count, InvokeType type); // Exception handling @@ -1353,8 +1354,8 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { void RecordWriteField( Register object, int offset, Register value, Register scratch, LinkRegisterStatus lr_status, SaveFPRegsMode save_fp, - RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, - SmiCheck smi_check = INLINE_SMI_CHECK); + RememberedSetAction remembered_set_action = RememberedSetAction::kEmit, + SmiCheck smi_check = SmiCheck::kInline); // For a given |object| notify the garbage collector that the slot |address| // has been written. |value| is the object being stored. The value and @@ -1362,15 +1363,15 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { void RecordWrite( Register object, Register address, Register value, LinkRegisterStatus lr_status, SaveFPRegsMode save_fp, - RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, - SmiCheck smi_check = INLINE_SMI_CHECK); + RememberedSetAction remembered_set_action = RememberedSetAction::kEmit, + SmiCheck smi_check = SmiCheck::kInline); private: static const int kSmiShift = kSmiTagSize + kSmiShiftSize; // Helper functions for generating invokes. void InvokePrologue(Register expected_parameter_count, Register actual_parameter_count, Label* done, - InvokeFlag flag); + InvokeType type); DISALLOW_IMPLICIT_CONSTRUCTORS(MacroAssembler); }; diff --git a/deps/v8/src/codegen/safepoint-table.cc b/deps/v8/src/codegen/safepoint-table.cc index 58fb6ed9e1..67a17d5f0e 100644 --- a/deps/v8/src/codegen/safepoint-table.cc +++ b/deps/v8/src/codegen/safepoint-table.cc @@ -20,20 +20,18 @@ namespace internal { SafepointTable::SafepointTable(Isolate* isolate, Address pc, Code code) : SafepointTable(code.InstructionStart(isolate, pc), - code.SafepointTableAddress(), code.stack_slots(), true) {} + code.SafepointTableAddress(), true) {} #if V8_ENABLE_WEBASSEMBLY SafepointTable::SafepointTable(const wasm::WasmCode* code) : SafepointTable(code->instruction_start(), code->instruction_start() + code->safepoint_table_offset(), - code->stack_slots(), false) {} + false) {} #endif // V8_ENABLE_WEBASSEMBLY SafepointTable::SafepointTable(Address instruction_start, - Address safepoint_table_address, - uint32_t stack_slots, bool has_deopt) + Address safepoint_table_address, bool has_deopt) : instruction_start_(instruction_start), - stack_slots_(stack_slots), has_deopt_(has_deopt), safepoint_table_address_(safepoint_table_address), length_(ReadLength(safepoint_table_address)), @@ -69,27 +67,18 @@ SafepointEntry SafepointTable::FindEntry(Address pc) const { UNREACHABLE(); } -void SafepointTable::PrintEntry(unsigned index, - std::ostream& os) const { // NOLINT +void SafepointTable::PrintEntry(unsigned index, std::ostream& os) const { disasm::NameConverter converter; SafepointEntry entry = GetEntry(index); uint8_t* bits = entry.bits(); // Print the stack slot bits. if (entry_size_ > 0) { - const int first = 0; - int last = entry_size_ - 1; - for (int i = first; i < last; i++) PrintBits(os, bits[i], kBitsPerByte); - int last_bits = stack_slots_ - ((last - first) * kBitsPerByte); - PrintBits(os, bits[last], last_bits); - } -} - -void SafepointTable::PrintBits(std::ostream& os, // NOLINT - uint8_t byte, int digits) { - DCHECK(digits >= 0 && digits <= kBitsPerByte); - for (int i = 0; i < digits; i++) { - os << (((byte & (1 << i)) == 0) ? "0" : "1"); + for (uint32_t i = 0; i < entry_size_; ++i) { + for (int bit = 0; bit < kBitsPerByte; ++bit) { + os << ((bits[i] & (1 << bit)) ? "1" : "0"); + } + } } } @@ -122,6 +111,12 @@ int SafepointTableBuilder::UpdateDeoptimizationInfo(int pc, int trampoline, void SafepointTableBuilder::Emit(Assembler* assembler, int bits_per_entry) { RemoveDuplicates(); + TrimEntries(&bits_per_entry); + +#if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 + // We cannot emit a const pool within the safepoint table. + Assembler::BlockConstPoolScope block_const_pool(assembler); +#endif // Make sure the safepoint table is properly aligned. Pad with nops. assembler->Align(Code::kMetadataAlignment); @@ -168,6 +163,7 @@ void SafepointTableBuilder::Emit(Assembler* assembler, int bits_per_entry) { // Run through the indexes and build a bitmap. for (int idx : *indexes) { + DCHECK_GT(bits_per_entry, idx); int index = bits_per_entry - 1 - idx; int byte_index = index >> kBitsPerByteLog2; int bit_index = index & (kBitsPerByte - 1); @@ -203,6 +199,28 @@ void SafepointTableBuilder::RemoveDuplicates() { deoptimization_info_.front().pc = kMaxUInt32; } +void SafepointTableBuilder::TrimEntries(int* bits_per_entry) { + int min_index = *bits_per_entry; + if (min_index == 0) return; // Early exit: nothing to trim. + + for (auto& info : deoptimization_info_) { + for (int idx : *info.stack_indexes) { + DCHECK_GT(*bits_per_entry, idx); // Validity check. + if (idx >= min_index) continue; + if (idx == 0) return; // Early exit: nothing to trim. + min_index = idx; + } + } + + DCHECK_LT(0, min_index); + *bits_per_entry -= min_index; + for (auto& info : deoptimization_info_) { + for (int& idx : *info.stack_indexes) { + idx -= min_index; + } + } +} + bool SafepointTableBuilder::IsIdenticalExceptForPc( const DeoptimizationInfo& info1, const DeoptimizationInfo& info2) const { if (info1.deopt_index != info2.deopt_index) return false; diff --git a/deps/v8/src/codegen/safepoint-table.h b/deps/v8/src/codegen/safepoint-table.h index 623b524698..07bbcaf9a0 100644 --- a/deps/v8/src/codegen/safepoint-table.h +++ b/deps/v8/src/codegen/safepoint-table.h @@ -5,6 +5,7 @@ #ifndef V8_CODEGEN_SAFEPOINT_TABLE_H_ #define V8_CODEGEN_SAFEPOINT_TABLE_H_ +#include "src/base/iterator.h" #include "src/base/memory.h" #include "src/common/assert-scope.h" #include "src/utils/allocation.h" @@ -21,11 +22,14 @@ class WasmCode; class SafepointEntry { public: - SafepointEntry() - : deopt_index_(0), bits_(nullptr), trampoline_pc_(kNoTrampolinePC) {} - - SafepointEntry(unsigned deopt_index, uint8_t* bits, int trampoline_pc) - : deopt_index_(deopt_index), bits_(bits), trampoline_pc_(trampoline_pc) { + SafepointEntry() = default; + + SafepointEntry(unsigned deopt_index, uint8_t* bits, uint8_t* bits_end, + int trampoline_pc) + : deopt_index_(deopt_index), + bits_(bits), + bits_end_(bits_end), + trampoline_pc_(trampoline_pc) { DCHECK(is_valid()); } @@ -38,6 +42,7 @@ class SafepointEntry { void Reset() { deopt_index_ = 0; bits_ = nullptr; + bits_end_ = nullptr; } int trampoline_pc() { return trampoline_pc_; } @@ -67,16 +72,23 @@ class SafepointEntry { return deopt_index_ != kNoDeoptIndex; } - uint8_t* bits() { + uint8_t* bits() const { DCHECK(is_valid()); return bits_; } + base::iterator_range<uint8_t*> iterate_bits() const { + return base::make_iterator_range(bits_, bits_end_); + } + + size_t entry_size() const { return bits_end_ - bits_; } + private: - uint32_t deopt_index_; - uint8_t* bits_; + uint32_t deopt_index_ = 0; + uint8_t* bits_ = nullptr; + uint8_t* bits_end_ = nullptr; // It needs to be an integer as it is -1 for eager deoptimizations. - int trampoline_pc_; + int trampoline_pc_ = kNoTrampolinePC; }; class SafepointTable { @@ -117,17 +129,17 @@ class SafepointTable { int trampoline_pc = has_deopt_ ? base::Memory<int>(GetTrampolineLocation(index)) : SafepointEntry::kNoTrampolinePC; - return SafepointEntry(deopt_index, bits, trampoline_pc); + return SafepointEntry(deopt_index, bits, bits + entry_size_, trampoline_pc); } // Returns the entry for the given pc. SafepointEntry FindEntry(Address pc) const; - void PrintEntry(unsigned index, std::ostream& os) const; // NOLINT + void PrintEntry(unsigned index, std::ostream& os) const; private: SafepointTable(Address instruction_start, Address safepoint_table_address, - uint32_t stack_slots, bool has_deopt); + bool has_deopt); static const uint8_t kNoRegisters = 0xFF; @@ -165,12 +177,9 @@ class SafepointTable { return GetPcOffsetLocation(index) + kTrampolinePcOffset; } - static void PrintBits(std::ostream& os, uint8_t byte, int digits); - DISALLOW_GARBAGE_COLLECTION(no_gc_) const Address instruction_start_; - const uint32_t stack_slots_; const bool has_deopt_; // Safepoint table layout. @@ -254,6 +263,10 @@ class SafepointTableBuilder { // If all entries are identical, replace them by 1 entry with pc = kMaxUInt32. void RemoveDuplicates(); + // Try to trim entries by removing trailing zeros (and shrinking + // {bits_per_entry}). + void TrimEntries(int* bits_per_entry); + ZoneChunkList<DeoptimizationInfo> deoptimization_info_; unsigned offset_; diff --git a/deps/v8/src/codegen/shared-ia32-x64/macro-assembler-shared-ia32-x64.cc b/deps/v8/src/codegen/shared-ia32-x64/macro-assembler-shared-ia32-x64.cc index 366d1afac9..3a73ae09f8 100644 --- a/deps/v8/src/codegen/shared-ia32-x64/macro-assembler-shared-ia32-x64.cc +++ b/deps/v8/src/codegen/shared-ia32-x64/macro-assembler-shared-ia32-x64.cc @@ -29,6 +29,174 @@ void SharedTurboAssembler::Movapd(XMMRegister dst, XMMRegister src) { } } +void SharedTurboAssembler::Shufps(XMMRegister dst, XMMRegister src1, + XMMRegister src2, uint8_t imm8) { + if (CpuFeatures::IsSupported(AVX)) { + CpuFeatureScope avx_scope(this, AVX); + vshufps(dst, src1, src2, imm8); + } else { + if (dst != src1) { + movaps(dst, src1); + } + shufps(dst, src2, imm8); + } +} + +void SharedTurboAssembler::F64x2ExtractLane(DoubleRegister dst, XMMRegister src, + uint8_t lane) { + if (lane == 0) { + if (dst != src) { + Movaps(dst, src); + } + } else { + DCHECK_EQ(1, lane); + if (CpuFeatures::IsSupported(AVX)) { + CpuFeatureScope avx_scope(this, AVX); + // Pass src as operand to avoid false-dependency on dst. + vmovhlps(dst, src, src); + } else { + movhlps(dst, src); + } + } +} + +void SharedTurboAssembler::F64x2ReplaceLane(XMMRegister dst, XMMRegister src, + DoubleRegister rep, uint8_t lane) { + if (CpuFeatures::IsSupported(AVX)) { + CpuFeatureScope scope(this, AVX); + if (lane == 0) { + vpblendw(dst, src, rep, 0b00001111); + } else { + vmovlhps(dst, src, rep); + } + } else { + CpuFeatureScope scope(this, SSE4_1); + if (dst != src) { + DCHECK_NE(dst, rep); // Ensure rep is not overwritten. + movaps(dst, src); + } + if (lane == 0) { + pblendw(dst, rep, 0b00001111); + } else { + movlhps(dst, rep); + } + } +} + +void SharedTurboAssembler::F64x2Min(XMMRegister dst, XMMRegister lhs, + XMMRegister rhs, XMMRegister scratch) { + if (CpuFeatures::IsSupported(AVX)) { + CpuFeatureScope scope(this, AVX); + // The minpd instruction doesn't propagate NaNs and +0's in its first + // operand. Perform minpd in both orders, merge the resuls, and adjust. + vminpd(scratch, lhs, rhs); + vminpd(dst, rhs, lhs); + // propagate -0's and NaNs, which may be non-canonical. + vorpd(scratch, scratch, dst); + // Canonicalize NaNs by quieting and clearing the payload. + vcmpunordpd(dst, dst, scratch); + vorpd(scratch, scratch, dst); + vpsrlq(dst, dst, byte{13}); + vandnpd(dst, dst, scratch); + } else { + // Compare lhs with rhs, and rhs with lhs, and have the results in scratch + // and dst. If dst overlaps with lhs or rhs, we can save a move. + if (dst == lhs || dst == rhs) { + XMMRegister src = dst == lhs ? rhs : lhs; + movaps(scratch, src); + minpd(scratch, dst); + minpd(dst, src); + } else { + movaps(scratch, lhs); + movaps(dst, rhs); + minpd(scratch, rhs); + minpd(dst, lhs); + } + orpd(scratch, dst); + cmpunordpd(dst, scratch); + orpd(scratch, dst); + psrlq(dst, byte{13}); + andnpd(dst, scratch); + } +} + +void SharedTurboAssembler::F64x2Max(XMMRegister dst, XMMRegister lhs, + XMMRegister rhs, XMMRegister scratch) { + if (CpuFeatures::IsSupported(AVX)) { + CpuFeatureScope scope(this, AVX); + // The maxpd instruction doesn't propagate NaNs and +0's in its first + // operand. Perform maxpd in both orders, merge the resuls, and adjust. + vmaxpd(scratch, lhs, rhs); + vmaxpd(dst, rhs, lhs); + // Find discrepancies. + vxorpd(dst, dst, scratch); + // Propagate NaNs, which may be non-canonical. + vorpd(scratch, scratch, dst); + // Propagate sign discrepancy and (subtle) quiet NaNs. + vsubpd(scratch, scratch, dst); + // Canonicalize NaNs by clearing the payload. Sign is non-deterministic. + vcmpunordpd(dst, dst, scratch); + vpsrlq(dst, dst, byte{13}); + vandnpd(dst, dst, scratch); + } else { + if (dst == lhs || dst == rhs) { + XMMRegister src = dst == lhs ? rhs : lhs; + movaps(scratch, src); + maxpd(scratch, dst); + maxpd(dst, src); + } else { + movaps(scratch, lhs); + movaps(dst, rhs); + maxpd(scratch, rhs); + maxpd(dst, lhs); + } + xorpd(dst, scratch); + orpd(scratch, dst); + subpd(scratch, dst); + cmpunordpd(dst, scratch); + psrlq(dst, byte{13}); + andnpd(dst, scratch); + } +} + +void SharedTurboAssembler::F32x4Splat(XMMRegister dst, DoubleRegister src) { + if (CpuFeatures::IsSupported(AVX2)) { + CpuFeatureScope avx2_scope(this, AVX2); + vbroadcastss(dst, src); + } else if (CpuFeatures::IsSupported(AVX)) { + CpuFeatureScope avx_scope(this, AVX); + vshufps(dst, src, src, 0); + } else { + if (dst == src) { + // 1 byte shorter than pshufd. + shufps(dst, src, 0); + } else { + pshufd(dst, src, 0); + } + } +} + +void SharedTurboAssembler::F32x4ExtractLane(FloatRegister dst, XMMRegister src, + uint8_t lane) { + DCHECK_LT(lane, 4); + // These instructions are shorter than insertps, but will leave junk in + // the top lanes of dst. + if (lane == 0) { + if (dst != src) { + Movaps(dst, src); + } + } else if (lane == 1) { + Movshdup(dst, src); + } else if (lane == 2 && dst == src) { + // Check dst == src to avoid false dependency on dst. + Movhlps(dst, src); + } else if (dst == src) { + Shufps(dst, src, src, lane); + } else { + Pshufd(dst, src, lane); + } +} + void SharedTurboAssembler::S128Store32Lane(Operand dst, XMMRegister src, uint8_t laneidx) { if (laneidx == 0) { @@ -233,6 +401,22 @@ void SharedTurboAssembler::I32x4UConvertI16x8High(XMMRegister dst, } } +void SharedTurboAssembler::I64x2Neg(XMMRegister dst, XMMRegister src, + XMMRegister scratch) { + if (CpuFeatures::IsSupported(AVX)) { + CpuFeatureScope scope(this, AVX); + vpxor(scratch, scratch, scratch); + vpsubq(dst, scratch, src); + } else { + if (dst == src) { + movaps(scratch, src); + std::swap(src, scratch); + } + pxor(dst, dst); + psubq(dst, src); + } +} + void SharedTurboAssembler::I64x2Abs(XMMRegister dst, XMMRegister src, XMMRegister scratch) { if (CpuFeatures::IsSupported(AVX)) { @@ -379,6 +563,17 @@ void SharedTurboAssembler::I64x2UConvertI32x4High(XMMRegister dst, } } +void SharedTurboAssembler::S128Not(XMMRegister dst, XMMRegister src, + XMMRegister scratch) { + if (dst == src) { + Pcmpeqd(scratch, scratch); + Pxor(dst, scratch); + } else { + Pcmpeqd(dst, dst); + Pxor(dst, src); + } +} + void SharedTurboAssembler::S128Select(XMMRegister dst, XMMRegister mask, XMMRegister src1, XMMRegister src2, XMMRegister scratch) { diff --git a/deps/v8/src/codegen/shared-ia32-x64/macro-assembler-shared-ia32-x64.h b/deps/v8/src/codegen/shared-ia32-x64/macro-assembler-shared-ia32-x64.h index e2778e472d..6be9444c65 100644 --- a/deps/v8/src/codegen/shared-ia32-x64/macro-assembler-shared-ia32-x64.h +++ b/deps/v8/src/codegen/shared-ia32-x64/macro-assembler-shared-ia32-x64.h @@ -39,121 +39,252 @@ class V8_EXPORT_PRIVATE SharedTurboAssembler : public TurboAssemblerBase { } } - template <typename Dst, typename... Args> + // Shufps that will mov src1 into dst if AVX is not supported. + void Shufps(XMMRegister dst, XMMRegister src1, XMMRegister src2, + uint8_t imm8); + + // Helper struct to implement functions that check for AVX support and + // dispatch to the appropriate AVX/SSE instruction. + template <typename Dst, typename Arg, typename... Args> struct AvxHelper { Assembler* assm; base::Optional<CpuFeature> feature = base::nullopt; // Call a method where the AVX version expects the dst argument to be // duplicated. - template <void (Assembler::*avx)(Dst, Dst, Args...), + // E.g. Andps(x, y) -> vandps(x, x, y) + // -> andps(x, y) + template <void (Assembler::*avx)(Dst, Dst, Arg, Args...), + void (Assembler::*no_avx)(Dst, Arg, Args...)> + void emit(Dst dst, Arg arg, Args... args) { + if (CpuFeatures::IsSupported(AVX)) { + CpuFeatureScope scope(assm, AVX); + (assm->*avx)(dst, dst, arg, args...); + } else if (feature.has_value()) { + DCHECK(CpuFeatures::IsSupported(*feature)); + CpuFeatureScope scope(assm, *feature); + (assm->*no_avx)(dst, arg, args...); + } else { + (assm->*no_avx)(dst, arg, args...); + } + } + + // Call a method in the AVX form (one more operand), but if unsupported will + // check that dst == first src. + // E.g. Andps(x, y, z) -> vandps(x, y, z) + // -> andps(x, z) and check that x == y + template <void (Assembler::*avx)(Dst, Arg, Args...), void (Assembler::*no_avx)(Dst, Args...)> - void emit(Dst dst, Args... args) { + void emit(Dst dst, Arg arg, Args... args) { if (CpuFeatures::IsSupported(AVX)) { CpuFeatureScope scope(assm, AVX); - (assm->*avx)(dst, dst, args...); + (assm->*avx)(dst, arg, args...); } else if (feature.has_value()) { + DCHECK_EQ(dst, arg); DCHECK(CpuFeatures::IsSupported(*feature)); CpuFeatureScope scope(assm, *feature); (assm->*no_avx)(dst, args...); } else { + DCHECK_EQ(dst, arg); (assm->*no_avx)(dst, args...); } } // Call a method where the AVX version expects no duplicated dst argument. - template <void (Assembler::*avx)(Dst, Args...), - void (Assembler::*no_avx)(Dst, Args...)> - void emit(Dst dst, Args... args) { + // E.g. Movddup(x, y) -> vmovddup(x, y) + // -> movddup(x, y) + template <void (Assembler::*avx)(Dst, Arg, Args...), + void (Assembler::*no_avx)(Dst, Arg, Args...)> + void emit(Dst dst, Arg arg, Args... args) { if (CpuFeatures::IsSupported(AVX)) { CpuFeatureScope scope(assm, AVX); - (assm->*avx)(dst, args...); + (assm->*avx)(dst, arg, args...); } else if (feature.has_value()) { DCHECK(CpuFeatures::IsSupported(*feature)); CpuFeatureScope scope(assm, *feature); - (assm->*no_avx)(dst, args...); + (assm->*no_avx)(dst, arg, args...); } else { - (assm->*no_avx)(dst, args...); + (assm->*no_avx)(dst, arg, args...); } } }; -#define AVX_OP(macro_name, name) \ - template <typename Dst, typename... Args> \ - void macro_name(Dst dst, Args... args) { \ - AvxHelper<Dst, Args...>{this} \ - .template emit<&Assembler::v##name, &Assembler::name>(dst, args...); \ +#define AVX_OP(macro_name, name) \ + template <typename Dst, typename Arg, typename... Args> \ + void macro_name(Dst dst, Arg arg, Args... args) { \ + AvxHelper<Dst, Arg, Args...>{this} \ + .template emit<&Assembler::v##name, &Assembler::name>(dst, arg, \ + args...); \ } -#define AVX_OP_SSE3(macro_name, name) \ - template <typename Dst, typename... Args> \ - void macro_name(Dst dst, Args... args) { \ - AvxHelper<Dst, Args...>{this, base::Optional<CpuFeature>(SSE3)} \ - .template emit<&Assembler::v##name, &Assembler::name>(dst, args...); \ +#define AVX_OP_SSE3(macro_name, name) \ + template <typename Dst, typename Arg, typename... Args> \ + void macro_name(Dst dst, Arg arg, Args... args) { \ + AvxHelper<Dst, Arg, Args...>{this, base::Optional<CpuFeature>(SSE3)} \ + .template emit<&Assembler::v##name, &Assembler::name>(dst, arg, \ + args...); \ } -#define AVX_OP_SSSE3(macro_name, name) \ - template <typename Dst, typename... Args> \ - void macro_name(Dst dst, Args... args) { \ - AvxHelper<Dst, Args...>{this, base::Optional<CpuFeature>(SSSE3)} \ - .template emit<&Assembler::v##name, &Assembler::name>(dst, args...); \ +#define AVX_OP_SSSE3(macro_name, name) \ + template <typename Dst, typename Arg, typename... Args> \ + void macro_name(Dst dst, Arg arg, Args... args) { \ + AvxHelper<Dst, Arg, Args...>{this, base::Optional<CpuFeature>(SSSE3)} \ + .template emit<&Assembler::v##name, &Assembler::name>(dst, arg, \ + args...); \ } -#define AVX_OP_SSE4_1(macro_name, name) \ - template <typename Dst, typename... Args> \ - void macro_name(Dst dst, Args... args) { \ - AvxHelper<Dst, Args...>{this, base::Optional<CpuFeature>(SSE4_1)} \ - .template emit<&Assembler::v##name, &Assembler::name>(dst, args...); \ +#define AVX_OP_SSE4_1(macro_name, name) \ + template <typename Dst, typename Arg, typename... Args> \ + void macro_name(Dst dst, Arg arg, Args... args) { \ + AvxHelper<Dst, Arg, Args...>{this, base::Optional<CpuFeature>(SSE4_1)} \ + .template emit<&Assembler::v##name, &Assembler::name>(dst, arg, \ + args...); \ } -#define AVX_OP_SSE4_2(macro_name, name) \ - template <typename Dst, typename... Args> \ - void macro_name(Dst dst, Args... args) { \ - AvxHelper<Dst, Args...>{this, base::Optional<CpuFeature>(SSE4_2)} \ - .template emit<&Assembler::v##name, &Assembler::name>(dst, args...); \ +#define AVX_OP_SSE4_2(macro_name, name) \ + template <typename Dst, typename Arg, typename... Args> \ + void macro_name(Dst dst, Arg arg, Args... args) { \ + AvxHelper<Dst, Arg, Args...>{this, base::Optional<CpuFeature>(SSE4_2)} \ + .template emit<&Assembler::v##name, &Assembler::name>(dst, arg, \ + args...); \ } + // Keep this list sorted by required extension, then instruction name. + AVX_OP(Addpd, addpd) + AVX_OP(Addps, addps) + AVX_OP(Andnpd, andnpd) + AVX_OP(Andnps, andnps) + AVX_OP(Andpd, andpd) + AVX_OP(Andps, andps) + AVX_OP(Cmpeqpd, cmpeqpd) + AVX_OP(Cmplepd, cmplepd) + AVX_OP(Cmpleps, cmpleps) + AVX_OP(Cmpltpd, cmpltpd) + AVX_OP(Cmpneqpd, cmpneqpd) + AVX_OP(Cmpunordpd, cmpunordpd) + AVX_OP(Cmpunordps, cmpunordps) AVX_OP(Cvtdq2pd, cvtdq2pd) AVX_OP(Cvtdq2ps, cvtdq2ps) - AVX_OP(Cvtps2pd, cvtps2pd) AVX_OP(Cvtpd2ps, cvtpd2ps) + AVX_OP(Cvtps2pd, cvtps2pd) AVX_OP(Cvttps2dq, cvttps2dq) + AVX_OP(Divpd, divpd) + AVX_OP(Divps, divps) + AVX_OP(Maxpd, maxpd) + AVX_OP(Maxps, maxps) + AVX_OP(Minpd, minpd) + AVX_OP(Minps, minps) AVX_OP(Movaps, movaps) AVX_OP(Movd, movd) + AVX_OP(Movhlps, movhlps) AVX_OP(Movhps, movhps) AVX_OP(Movlps, movlps) AVX_OP(Movmskpd, movmskpd) AVX_OP(Movmskps, movmskps) - AVX_OP(Movss, movss) AVX_OP(Movsd, movsd) + AVX_OP(Movss, movss) AVX_OP(Movupd, movupd) AVX_OP(Movups, movups) + AVX_OP(Mulpd, mulpd) + AVX_OP(Mulps, mulps) + AVX_OP(Orpd, orpd) + AVX_OP(Orps, orps) + AVX_OP(Packssdw, packssdw) + AVX_OP(Packsswb, packsswb) + AVX_OP(Packuswb, packuswb) + AVX_OP(Paddb, paddb) + AVX_OP(Paddd, paddd) + AVX_OP(Paddq, paddq) + AVX_OP(Paddsb, paddsb) + AVX_OP(Paddusb, paddusb) + AVX_OP(Paddusw, paddusw) + AVX_OP(Paddw, paddw) + AVX_OP(Pand, pand) + AVX_OP(Pavgb, pavgb) + AVX_OP(Pavgw, pavgw) + AVX_OP(Pcmpgtb, pcmpgtb) + AVX_OP(Pcmpeqd, pcmpeqd) + AVX_OP(Pmaxub, pmaxub) + AVX_OP(Pminub, pminub) AVX_OP(Pmovmskb, pmovmskb) AVX_OP(Pmullw, pmullw) - AVX_OP(Pshuflw, pshuflw) - AVX_OP(Pshufhw, pshufhw) + AVX_OP(Pmuludq, pmuludq) + AVX_OP(Por, por) AVX_OP(Pshufd, pshufd) + AVX_OP(Pshufhw, pshufhw) + AVX_OP(Pshuflw, pshuflw) + AVX_OP(Pslld, pslld) + AVX_OP(Psllq, psllq) + AVX_OP(Psllw, psllw) + AVX_OP(Psrad, psrad) + AVX_OP(Psraw, psraw) + AVX_OP(Psrld, psrld) + AVX_OP(Psrlq, psrlq) + AVX_OP(Psrlw, psrlw) + AVX_OP(Psubb, psubb) + AVX_OP(Psubd, psubd) + AVX_OP(Psubq, psubq) + AVX_OP(Psubsb, psubsb) + AVX_OP(Psubusb, psubusb) + AVX_OP(Psubw, psubw) + AVX_OP(Punpckhbw, punpckhbw) + AVX_OP(Punpckhdq, punpckhdq) + AVX_OP(Punpckhqdq, punpckhqdq) + AVX_OP(Punpckhwd, punpckhwd) + AVX_OP(Punpcklbw, punpcklbw) + AVX_OP(Punpckldq, punpckldq) + AVX_OP(Punpcklqdq, punpcklqdq) + AVX_OP(Punpcklwd, punpcklwd) + AVX_OP(Pxor, pxor) AVX_OP(Rcpps, rcpps) AVX_OP(Rsqrtps, rsqrtps) - AVX_OP(Sqrtps, sqrtps) AVX_OP(Sqrtpd, sqrtpd) + AVX_OP(Sqrtps, sqrtps) + AVX_OP(Sqrtsd, sqrtsd) + AVX_OP(Sqrtss, sqrtss) + AVX_OP(Subpd, subpd) + AVX_OP(Subps, subps) + AVX_OP(Unpcklps, unpcklps) + AVX_OP(Xorpd, xorpd) + AVX_OP(Xorps, xorps) + + AVX_OP_SSE3(Haddps, haddps) AVX_OP_SSE3(Movddup, movddup) AVX_OP_SSE3(Movshdup, movshdup) + AVX_OP_SSSE3(Pabsb, pabsb) - AVX_OP_SSSE3(Pabsw, pabsw) AVX_OP_SSSE3(Pabsd, pabsd) + AVX_OP_SSSE3(Pabsw, pabsw) + AVX_OP_SSSE3(Palignr, palignr) + AVX_OP_SSSE3(Psignb, psignb) + AVX_OP_SSSE3(Psignd, psignd) + AVX_OP_SSSE3(Psignw, psignw) + AVX_OP_SSE4_1(Extractps, extractps) + AVX_OP_SSE4_1(Pblendw, pblendw) AVX_OP_SSE4_1(Pextrb, pextrb) AVX_OP_SSE4_1(Pextrw, pextrw) + AVX_OP_SSE4_1(Pmaxsb, pmaxsb) + AVX_OP_SSE4_1(Pmaxsd, pmaxsd) + AVX_OP_SSE4_1(Pminsb, pminsb) AVX_OP_SSE4_1(Pmovsxbw, pmovsxbw) - AVX_OP_SSE4_1(Pmovsxwd, pmovsxwd) AVX_OP_SSE4_1(Pmovsxdq, pmovsxdq) + AVX_OP_SSE4_1(Pmovsxwd, pmovsxwd) AVX_OP_SSE4_1(Pmovzxbw, pmovzxbw) - AVX_OP_SSE4_1(Pmovzxwd, pmovzxwd) AVX_OP_SSE4_1(Pmovzxdq, pmovzxdq) + AVX_OP_SSE4_1(Pmovzxwd, pmovzxwd) AVX_OP_SSE4_1(Ptest, ptest) - AVX_OP_SSE4_1(Roundps, roundps) AVX_OP_SSE4_1(Roundpd, roundpd) + AVX_OP_SSE4_1(Roundps, roundps) + void F64x2ExtractLane(DoubleRegister dst, XMMRegister src, uint8_t lane); + void F64x2ReplaceLane(XMMRegister dst, XMMRegister src, DoubleRegister rep, + uint8_t lane); + void F64x2Min(XMMRegister dst, XMMRegister lhs, XMMRegister rhs, + XMMRegister scratch); + void F64x2Max(XMMRegister dst, XMMRegister lhs, XMMRegister rhs, + XMMRegister scratch); + void F32x4Splat(XMMRegister dst, DoubleRegister src); + void F32x4ExtractLane(FloatRegister dst, XMMRegister src, uint8_t lane); void S128Store32Lane(Operand dst, XMMRegister src, uint8_t laneidx); void I16x8ExtMulLow(XMMRegister dst, XMMRegister src1, XMMRegister src2, XMMRegister scrat, bool is_signed); @@ -170,6 +301,7 @@ class V8_EXPORT_PRIVATE SharedTurboAssembler : public TurboAssemblerBase { void I32x4SConvertI16x8High(XMMRegister dst, XMMRegister src); void I32x4UConvertI16x8High(XMMRegister dst, XMMRegister src, XMMRegister scratch); + void I64x2Neg(XMMRegister dst, XMMRegister src, XMMRegister scratch); void I64x2Abs(XMMRegister dst, XMMRegister src, XMMRegister scratch); void I64x2GtS(XMMRegister dst, XMMRegister src0, XMMRegister src1, XMMRegister scratch); @@ -180,6 +312,7 @@ class V8_EXPORT_PRIVATE SharedTurboAssembler : public TurboAssemblerBase { void I64x2SConvertI32x4High(XMMRegister dst, XMMRegister src); void I64x2UConvertI32x4High(XMMRegister dst, XMMRegister src, XMMRegister scratch); + void S128Not(XMMRegister dst, XMMRegister src, XMMRegister scratch); // Requires dst == mask when AVX is not supported. void S128Select(XMMRegister dst, XMMRegister mask, XMMRegister src1, XMMRegister src2, XMMRegister scratch); diff --git a/deps/v8/src/codegen/signature.h b/deps/v8/src/codegen/signature.h index 2c4ca3e0d9..d6d8b5da0f 100644 --- a/deps/v8/src/codegen/signature.h +++ b/deps/v8/src/codegen/signature.h @@ -104,6 +104,14 @@ class Signature : public ZoneObject { T* buffer_; }; + static Signature<T>* Build(Zone* zone, std::initializer_list<T> returns, + std::initializer_list<T> params) { + Builder builder(zone, returns.size(), params.size()); + for (T ret : returns) builder.AddReturn(ret); + for (T param : params) builder.AddParam(param); + return builder.Build(); + } + static constexpr size_t kReturnCountOffset = 0; static constexpr size_t kParameterCountOffset = kReturnCountOffset + kSizetSize; diff --git a/deps/v8/src/codegen/source-position-table.cc b/deps/v8/src/codegen/source-position-table.cc index 63f1d17c70..27466a2690 100644 --- a/deps/v8/src/codegen/source-position-table.cc +++ b/deps/v8/src/codegen/source-position-table.cc @@ -170,9 +170,9 @@ void SourcePositionTableBuilder::AddEntry(const PositionTableEntry& entry) { #endif } -template <typename LocalIsolate> +template <typename IsolateT> Handle<ByteArray> SourcePositionTableBuilder::ToSourcePositionTable( - LocalIsolate* isolate) { + IsolateT* isolate) { if (bytes_.empty()) return isolate->factory()->empty_byte_array(); DCHECK(!Omit()); diff --git a/deps/v8/src/codegen/source-position-table.h b/deps/v8/src/codegen/source-position-table.h index 72a4c9f45a..afd7cc434c 100644 --- a/deps/v8/src/codegen/source-position-table.h +++ b/deps/v8/src/codegen/source-position-table.h @@ -54,9 +54,9 @@ class V8_EXPORT_PRIVATE SourcePositionTableBuilder { void AddPosition(size_t code_offset, SourcePosition source_position, bool is_statement); - template <typename LocalIsolate> + template <typename IsolateT> EXPORT_TEMPLATE_DECLARE(V8_EXPORT_PRIVATE) - Handle<ByteArray> ToSourcePositionTable(LocalIsolate* isolate); + Handle<ByteArray> ToSourcePositionTable(IsolateT* isolate); OwnedVector<byte> ToSourcePositionTableVector(); inline bool Omit() const { return mode_ != RECORD_SOURCE_POSITIONS; } diff --git a/deps/v8/src/codegen/string-constants.cc b/deps/v8/src/codegen/string-constants.cc index 92a5e97396..c1ad5a7b4b 100644 --- a/deps/v8/src/codegen/string-constants.cc +++ b/deps/v8/src/codegen/string-constants.cc @@ -5,7 +5,6 @@ #include "src/codegen/string-constants.h" #include "src/base/functional.h" -#include "src/numbers/dtoa.h" #include "src/objects/objects.h" #include "src/objects/string-inl.h" @@ -176,7 +175,7 @@ size_t StringConstantBase::GetMaxStringConstantLength() const { size_t StringLiteral::GetMaxStringConstantLength() const { return length_; } size_t NumberToStringConstant::GetMaxStringConstantLength() const { - return kBase10MaximalLength + 1; + return kMaxDoubleStringLength; } size_t StringCons::GetMaxStringConstantLength() const { diff --git a/deps/v8/src/codegen/turbo-assembler.cc b/deps/v8/src/codegen/turbo-assembler.cc index e4c694097b..a9f9e08ead 100644 --- a/deps/v8/src/codegen/turbo-assembler.cc +++ b/deps/v8/src/codegen/turbo-assembler.cc @@ -115,12 +115,5 @@ bool TurboAssemblerBase::IsAddressableThroughRootRegister( return isolate->root_register_addressable_region().contains(address); } -void TurboAssemblerBase::RecordCommentForOffHeapTrampoline(int builtin_index) { - if (!FLAG_code_comments) return; - std::ostringstream str; - str << "[ Inlined Trampoline to " << Builtins::name(builtin_index); - RecordComment(str.str().c_str()); -} - } // namespace internal } // namespace v8 diff --git a/deps/v8/src/codegen/turbo-assembler.h b/deps/v8/src/codegen/turbo-assembler.h index cc9ef92919..e25ee2a629 100644 --- a/deps/v8/src/codegen/turbo-assembler.h +++ b/deps/v8/src/codegen/turbo-assembler.h @@ -118,13 +118,18 @@ class V8_EXPORT_PRIVATE TurboAssemblerBase : public Assembler { static bool IsAddressableThroughRootRegister( Isolate* isolate, const ExternalReference& reference); -#ifdef V8_TARGET_OS_WIN +#if defined(V8_TARGET_OS_WIN) || defined(V8_TARGET_OS_MACOSX) // Minimum page size. We must touch memory once per page when expanding the // stack, to avoid access violations. static constexpr int kStackPageSize = 4 * KB; #endif - void RecordCommentForOffHeapTrampoline(int builtin_index); + V8_INLINE void RecordCommentForOffHeapTrampoline(int builtin_index) { + if (!FLAG_code_comments) return; + std::ostringstream str; + str << "[ Inlined Trampoline to " << Builtins::name(builtin_index); + RecordComment(str.str().c_str()); + } protected: Isolate* const isolate_ = nullptr; @@ -150,8 +155,7 @@ class V8_EXPORT_PRIVATE TurboAssemblerBase : public Assembler { }; // Avoids emitting calls to the {Builtins::kAbort} builtin when emitting debug -// code during the lifetime of this scope object. For disabling debug code -// entirely use the {DontEmitDebugCodeScope} instead. +// code during the lifetime of this scope object. class V8_NODISCARD HardAbortScope { public: explicit HardAbortScope(TurboAssemblerBase* assembler) @@ -165,27 +169,6 @@ class V8_NODISCARD HardAbortScope { bool old_value_; }; -#ifdef DEBUG -struct CountIfValidRegisterFunctor { - template <typename RegType> - constexpr int operator()(int count, RegType reg) const { - return count + (reg.is_valid() ? 1 : 0); - } -}; - -template <typename RegType, typename... RegTypes, - // All arguments must be either Register or DoubleRegister. - typename = typename std::enable_if< - base::is_same<Register, RegType, RegTypes...>::value || - base::is_same<DoubleRegister, RegType, RegTypes...>::value>::type> -inline bool AreAliased(RegType first_reg, RegTypes... regs) { - int num_different_regs = NumRegs(RegType::ListOf(first_reg, regs...)); - int num_given_regs = - base::fold(CountIfValidRegisterFunctor{}, 0, first_reg, regs...); - return num_different_regs < num_given_regs; -} -#endif - } // namespace internal } // namespace v8 diff --git a/deps/v8/src/codegen/x64/assembler-x64.cc b/deps/v8/src/codegen/x64/assembler-x64.cc index 032f7eb13d..eb07f3ba3b 100644 --- a/deps/v8/src/codegen/x64/assembler-x64.cc +++ b/deps/v8/src/codegen/x64/assembler-x64.cc @@ -86,45 +86,40 @@ void CpuFeatures::ProbeImpl(bool cross_compile) { // Only use statically determined features for cross compile (snapshot). if (cross_compile) return; - - // To deal with any combination of flags (e.g. --no-enable-sse4-1 - // --enable-sse-4-2), we start checking from the "highest" supported - // extension, for each extension, enable if newer extension is supported. - if (cpu.has_avx2() && FLAG_enable_avx2 && IsSupported(AVX)) { - supported_ |= 1u << AVX2; - } - if (cpu.has_fma3() && FLAG_enable_fma3 && cpu.has_osxsave() && - OSHasAVXSupport()) { - supported_ |= 1u << FMA3; - } - if ((cpu.has_avx() && FLAG_enable_avx && cpu.has_osxsave() && - OSHasAVXSupport()) || - IsSupported(AVX2) || IsSupported(FMA3)) { - supported_ |= 1u << AVX; - } - if ((cpu.has_sse42() && FLAG_enable_sse4_2) || IsSupported(AVX)) { - supported_ |= 1u << SSE4_2; - } - if ((cpu.has_sse41() && FLAG_enable_sse4_1) || IsSupported(SSE4_2)) { - supported_ |= 1u << SSE4_1; - } - if ((cpu.has_ssse3() && FLAG_enable_ssse3) || IsSupported(SSE4_1)) { - supported_ |= 1u << SSSE3; + if (cpu.has_sse42()) SetSupported(SSE4_2); + if (cpu.has_sse41()) SetSupported(SSE4_1); + if (cpu.has_ssse3()) SetSupported(SSSE3); + if (cpu.has_sse3()) SetSupported(SSE3); + if (cpu.has_avx() && cpu.has_osxsave() && OSHasAVXSupport()) { + SetSupported(AVX); + if (cpu.has_avx2()) SetSupported(AVX2); + if (cpu.has_fma3()) SetSupported(FMA3); } - if ((cpu.has_sse3() && FLAG_enable_sse3) || IsSupported(SSSE3)) - supported_ |= 1u << SSE3; + // SAHF is not generally available in long mode. - if (cpu.has_sahf() && FLAG_enable_sahf) supported_ |= 1u << SAHF; - if (cpu.has_bmi1() && FLAG_enable_bmi1) supported_ |= 1u << BMI1; - if (cpu.has_bmi2() && FLAG_enable_bmi2) supported_ |= 1u << BMI2; - if (cpu.has_lzcnt() && FLAG_enable_lzcnt) supported_ |= 1u << LZCNT; - if (cpu.has_popcnt() && FLAG_enable_popcnt) supported_ |= 1u << POPCNT; + if (cpu.has_sahf() && FLAG_enable_sahf) SetSupported(SAHF); + if (cpu.has_bmi1() && FLAG_enable_bmi1) SetSupported(BMI1); + if (cpu.has_bmi2() && FLAG_enable_bmi2) SetSupported(BMI2); + if (cpu.has_lzcnt() && FLAG_enable_lzcnt) SetSupported(LZCNT); + if (cpu.has_popcnt() && FLAG_enable_popcnt) SetSupported(POPCNT); if (strcmp(FLAG_mcpu, "auto") == 0) { - if (cpu.is_atom()) supported_ |= 1u << ATOM; + if (cpu.is_atom()) SetSupported(ATOM); } else if (strcmp(FLAG_mcpu, "atom") == 0) { - supported_ |= 1u << ATOM; + SetSupported(ATOM); } + // Ensure that supported cpu features make sense. E.g. it is wrong to support + // AVX but not SSE4_2, if we have --enable-avx and --no-enable-sse4-2, the + // code above would set AVX to supported, and SSE4_2 to unsupported, then the + // checks below will set AVX to unsupported. + if (!FLAG_enable_sse3) SetUnsupported(SSE3); + if (!FLAG_enable_ssse3 || !IsSupported(SSE3)) SetUnsupported(SSSE3); + if (!FLAG_enable_sse4_1 || !IsSupported(SSSE3)) SetUnsupported(SSE4_1); + if (!FLAG_enable_sse4_2 || !IsSupported(SSE4_1)) SetUnsupported(SSE4_2); + if (!FLAG_enable_avx || !IsSupported(SSE4_2)) SetUnsupported(AVX); + if (!FLAG_enable_avx2 || !IsSupported(AVX)) SetUnsupported(AVX2); + if (!FLAG_enable_fma3 || !IsSupported(AVX)) SetUnsupported(FMA3); + // Set a static value on whether Simd is supported. // This variable is only used for certain archs to query SupportWasmSimd128() // at runtime in builtins using an extern ref. Other callers should use @@ -1419,12 +1414,13 @@ void Assembler::j(Condition cc, Label* L, Label::Distance distance) { } void Assembler::j(Condition cc, Address entry, RelocInfo::Mode rmode) { - DCHECK(RelocInfo::IsRuntimeEntry(rmode)); + DCHECK(RelocInfo::IsWasmStubCall(rmode)); EnsureSpace ensure_space(this); DCHECK(is_uint4(cc)); emit(0x0F); emit(0x80 | cc); - emit_runtime_entry(entry, rmode); + RecordRelocInfo(rmode); + emitl(static_cast<int32_t>(entry)); } void Assembler::j(Condition cc, Handle<Code> target, RelocInfo::Mode rmode) { diff --git a/deps/v8/src/codegen/x64/assembler-x64.h b/deps/v8/src/codegen/x64/assembler-x64.h index 97e18ed8fe..e6205311c2 100644 --- a/deps/v8/src/codegen/x64/assembler-x64.h +++ b/deps/v8/src/codegen/x64/assembler-x64.h @@ -124,6 +124,9 @@ class Immediate { DCHECK(SmiValuesAre31Bits()); // Only available for 31-bit SMI. } + int32_t value() const { return value_; } + RelocInfo::Mode rmode() const { return rmode_; } + private: const int32_t value_; const RelocInfo::Mode rmode_ = RelocInfo::NONE; @@ -1274,6 +1277,7 @@ class V8_EXPORT_PRIVATE Assembler : public AssemblerBase { SSE_CMP_P(cmpeq, 0x0) SSE_CMP_P(cmplt, 0x1) SSE_CMP_P(cmple, 0x2) + SSE_CMP_P(cmpunord, 0x3) SSE_CMP_P(cmpneq, 0x4) SSE_CMP_P(cmpnlt, 0x5) SSE_CMP_P(cmpnle, 0x6) @@ -1571,6 +1575,7 @@ class V8_EXPORT_PRIVATE Assembler : public AssemblerBase { AVX_CMP_P(vcmpeq, 0x0) AVX_CMP_P(vcmplt, 0x1) AVX_CMP_P(vcmple, 0x2) + AVX_CMP_P(vcmpunord, 0x3) AVX_CMP_P(vcmpneq, 0x4) AVX_CMP_P(vcmpnlt, 0x5) AVX_CMP_P(vcmpnle, 0x6) @@ -2374,8 +2379,8 @@ class V8_EXPORT_PRIVATE Assembler : public AssemblerBase { // checks that we did not generate too much. class EnsureSpace { public: - explicit EnsureSpace(Assembler* assembler) : assembler_(assembler) { - if (assembler_->buffer_overflow()) assembler_->GrowBuffer(); + explicit V8_INLINE EnsureSpace(Assembler* assembler) : assembler_(assembler) { + if (V8_UNLIKELY(assembler_->buffer_overflow())) assembler_->GrowBuffer(); #ifdef DEBUG space_before_ = assembler_->available_space(); #endif @@ -2389,7 +2394,7 @@ class EnsureSpace { #endif private: - Assembler* assembler_; + Assembler* const assembler_; #ifdef DEBUG int space_before_; #endif diff --git a/deps/v8/src/codegen/x64/interface-descriptors-x64-inl.h b/deps/v8/src/codegen/x64/interface-descriptors-x64-inl.h new file mode 100644 index 0000000000..a24330a4c7 --- /dev/null +++ b/deps/v8/src/codegen/x64/interface-descriptors-x64-inl.h @@ -0,0 +1,258 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef V8_CODEGEN_X64_INTERFACE_DESCRIPTORS_X64_INL_H_ +#define V8_CODEGEN_X64_INTERFACE_DESCRIPTORS_X64_INL_H_ + +#if V8_TARGET_ARCH_X64 + +#include "src/codegen/interface-descriptors.h" + +namespace v8 { +namespace internal { + +constexpr auto CallInterfaceDescriptor::DefaultRegisterArray() { + auto registers = RegisterArray(rax, rbx, rcx, rdx, rdi); + STATIC_ASSERT(registers.size() == kMaxBuiltinRegisterParams); + return registers; +} + +// static +constexpr auto RecordWriteDescriptor::registers() { + return RegisterArray(arg_reg_1, arg_reg_2, arg_reg_3, arg_reg_4, + kReturnRegister0); +} + +// static +constexpr auto DynamicCheckMapsDescriptor::registers() { + return RegisterArray(kReturnRegister0, arg_reg_1, arg_reg_2, arg_reg_3, + kRuntimeCallFunctionRegister, kContextRegister); +} + +// static +constexpr auto EphemeronKeyBarrierDescriptor::registers() { + return RegisterArray(arg_reg_1, arg_reg_2, arg_reg_3, arg_reg_4, + kReturnRegister0); +} + +// static +constexpr Register LoadDescriptor::ReceiverRegister() { return rdx; } +// static +constexpr Register LoadDescriptor::NameRegister() { return rcx; } +// static +constexpr Register LoadDescriptor::SlotRegister() { return rax; } + +// static +constexpr Register LoadWithVectorDescriptor::VectorRegister() { return rbx; } + +// static +constexpr Register +LoadWithReceiverAndVectorDescriptor::LookupStartObjectRegister() { + return rdi; +} + +// static +constexpr Register StoreDescriptor::ReceiverRegister() { return rdx; } +// static +constexpr Register StoreDescriptor::NameRegister() { return rcx; } +// static +constexpr Register StoreDescriptor::ValueRegister() { return rax; } +// static +constexpr Register StoreDescriptor::SlotRegister() { return rdi; } + +// static +constexpr Register StoreWithVectorDescriptor::VectorRegister() { return rbx; } + +// static +constexpr Register StoreTransitionDescriptor::MapRegister() { return r11; } + +// static +constexpr Register ApiGetterDescriptor::HolderRegister() { return rcx; } +// static +constexpr Register ApiGetterDescriptor::CallbackRegister() { return rbx; } + +// static +constexpr Register GrowArrayElementsDescriptor::ObjectRegister() { return rax; } +// static +constexpr Register GrowArrayElementsDescriptor::KeyRegister() { return rbx; } + +// static +constexpr Register BaselineLeaveFrameDescriptor::ParamsSizeRegister() { + return rbx; +} +// static +constexpr Register BaselineLeaveFrameDescriptor::WeightRegister() { + return rcx; +} + +// static +constexpr Register TypeConversionDescriptor::ArgumentRegister() { return rax; } + +// static +constexpr auto TypeofDescriptor::registers() { return RegisterArray(rbx); } + +// static +constexpr auto CallTrampolineDescriptor::registers() { + // rax : number of arguments + // rdi : the target to call + return RegisterArray(rdi, rax); +} + +// static +constexpr auto CallVarargsDescriptor::registers() { + // rax : number of arguments (on the stack, not including receiver) + // rdi : the target to call + // rcx : arguments list length (untagged) + // rbx : arguments list (FixedArray) + return RegisterArray(rdi, rax, rcx, rbx); +} + +// static +constexpr auto CallForwardVarargsDescriptor::registers() { + // rax : number of arguments + // rcx : start index (to support rest parameters) + // rdi : the target to call + return RegisterArray(rdi, rax, rcx); +} + +// static +constexpr auto CallFunctionTemplateDescriptor::registers() { + // rdx: the function template info + // rcx: number of arguments (on the stack, not including receiver) + return RegisterArray(rdx, rcx); +} + +// static +constexpr auto CallWithSpreadDescriptor::registers() { + // rax : number of arguments (on the stack, not including receiver) + // rdi : the target to call + // rbx : the object to spread + return RegisterArray(rdi, rax, rbx); +} + +// static +constexpr auto CallWithArrayLikeDescriptor::registers() { + // rdi : the target to call + // rbx : the arguments list + return RegisterArray(rdi, rbx); +} + +// static +constexpr auto ConstructVarargsDescriptor::registers() { + // rax : number of arguments (on the stack, not including receiver) + // rdi : the target to call + // rdx : the new target + // rcx : arguments list length (untagged) + // rbx : arguments list (FixedArray) + return RegisterArray(rdi, rdx, rax, rcx, rbx); +} + +// static +constexpr auto ConstructForwardVarargsDescriptor::registers() { + // rax : number of arguments + // rdx : the new target + // rcx : start index (to support rest parameters) + // rdi : the target to call + return RegisterArray(rdi, rdx, rax, rcx); +} + +// static +constexpr auto ConstructWithSpreadDescriptor::registers() { + // rax : number of arguments (on the stack, not including receiver) + // rdi : the target to call + // rdx : the new target + // rbx : the object to spread + return RegisterArray(rdi, rdx, rax, rbx); +} + +// static +constexpr auto ConstructWithArrayLikeDescriptor::registers() { + // rdi : the target to call + // rdx : the new target + // rbx : the arguments list + return RegisterArray(rdi, rdx, rbx); +} + +// static +constexpr auto ConstructStubDescriptor::registers() { + // rax : number of arguments + // rdx : the new target + // rdi : the target to call + // rbx : allocation site or undefined + return RegisterArray(rdi, rdx, rax, rbx); +} + +// static +constexpr auto AbortDescriptor::registers() { return RegisterArray(rdx); } + +// static +constexpr auto CompareDescriptor::registers() { + return RegisterArray(rdx, rax); +} + +// static +constexpr auto BinaryOpDescriptor::registers() { + return RegisterArray(rdx, rax); +} + +// static +constexpr auto Compare_BaselineDescriptor::registers() { + return RegisterArray(rdx, rax, rbx); +} + +// static +constexpr auto BinaryOp_BaselineDescriptor::registers() { + return RegisterArray(rdx, rax, rbx); +} + +// static +constexpr auto ApiCallbackDescriptor::registers() { + return RegisterArray(rdx, // api function address + rcx, // argument count (not including receiver) + rbx, // call data + rdi); // holder +} + +// static +constexpr auto InterpreterDispatchDescriptor::registers() { + return RegisterArray( + kInterpreterAccumulatorRegister, kInterpreterBytecodeOffsetRegister, + kInterpreterBytecodeArrayRegister, kInterpreterDispatchTableRegister); +} + +// static +constexpr auto InterpreterPushArgsThenCallDescriptor::registers() { + return RegisterArray(rax, // argument count (not including receiver) + rbx, // address of first argument + rdi); // the target callable to be call +} + +// static +constexpr auto InterpreterPushArgsThenConstructDescriptor::registers() { + return RegisterArray( + rax, // argument count (not including receiver) + rcx, // address of first argument + rdi, // constructor to call + rdx, // new target + rbx); // allocation site feedback if available, undefined otherwise +} + +// static +constexpr auto ResumeGeneratorDescriptor::registers() { + return RegisterArray( + rax, // the value to pass to the generator + rdx); // the JSGeneratorObject / JSAsyncGeneratorObject to resume +} + +// static +constexpr auto RunMicrotasksEntryDescriptor::registers() { + return RegisterArray(arg_reg_1, arg_reg_2); +} + +} // namespace internal +} // namespace v8 + +#endif // V8_TARGET_ARCH_X64 + +#endif // V8_CODEGEN_X64_INTERFACE_DESCRIPTORS_X64_INL_H_ diff --git a/deps/v8/src/codegen/x64/interface-descriptors-x64.cc b/deps/v8/src/codegen/x64/interface-descriptors-x64.cc deleted file mode 100644 index 4029b56d2b..0000000000 --- a/deps/v8/src/codegen/x64/interface-descriptors-x64.cc +++ /dev/null @@ -1,309 +0,0 @@ -// Copyright 2012 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#if V8_TARGET_ARCH_X64 - -#include "src/codegen/interface-descriptors.h" - -#include "src/execution/frames.h" - -namespace v8 { -namespace internal { - -const Register CallInterfaceDescriptor::ContextRegister() { return rsi; } - -void CallInterfaceDescriptor::DefaultInitializePlatformSpecific( - CallInterfaceDescriptorData* data, int register_parameter_count) { - const Register default_stub_registers[] = {rax, rbx, rcx, rdx, rdi}; - CHECK_LE(static_cast<size_t>(register_parameter_count), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(register_parameter_count, - default_stub_registers); -} - -void RecordWriteDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - const Register default_stub_registers[] = {arg_reg_1, arg_reg_2, arg_reg_3, - arg_reg_4, kReturnRegister0}; - - data->RestrictAllocatableRegisters(default_stub_registers, - arraysize(default_stub_registers)); - - CHECK_LE(static_cast<size_t>(kParameterCount), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(kParameterCount, default_stub_registers); -} - -void DynamicCheckMapsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register default_stub_registers[] = {kReturnRegister0, - arg_reg_1, - arg_reg_2, - arg_reg_3, - kRuntimeCallFunctionRegister, - kContextRegister}; - - data->RestrictAllocatableRegisters(default_stub_registers, - arraysize(default_stub_registers)); - - CHECK_LE(static_cast<size_t>(kParameterCount), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(kParameterCount, default_stub_registers); -} - -void EphemeronKeyBarrierDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - const Register default_stub_registers[] = {arg_reg_1, arg_reg_2, arg_reg_3, - arg_reg_4, kReturnRegister0}; - - data->RestrictAllocatableRegisters(default_stub_registers, - arraysize(default_stub_registers)); - - CHECK_LE(static_cast<size_t>(kParameterCount), - arraysize(default_stub_registers)); - data->InitializePlatformSpecific(kParameterCount, default_stub_registers); -} - -const Register LoadDescriptor::ReceiverRegister() { return rdx; } -const Register LoadDescriptor::NameRegister() { return rcx; } -const Register LoadDescriptor::SlotRegister() { return rax; } - -const Register LoadWithVectorDescriptor::VectorRegister() { return rbx; } - -const Register -LoadWithReceiverAndVectorDescriptor::LookupStartObjectRegister() { - return rdi; -} - -const Register StoreDescriptor::ReceiverRegister() { return rdx; } -const Register StoreDescriptor::NameRegister() { return rcx; } -const Register StoreDescriptor::ValueRegister() { return rax; } -const Register StoreDescriptor::SlotRegister() { return rdi; } - -const Register StoreWithVectorDescriptor::VectorRegister() { return rbx; } - -const Register StoreTransitionDescriptor::SlotRegister() { return rdi; } -const Register StoreTransitionDescriptor::VectorRegister() { return rbx; } -const Register StoreTransitionDescriptor::MapRegister() { return r11; } - -const Register ApiGetterDescriptor::HolderRegister() { return rcx; } -const Register ApiGetterDescriptor::CallbackRegister() { return rbx; } - -const Register GrowArrayElementsDescriptor::ObjectRegister() { return rax; } -const Register GrowArrayElementsDescriptor::KeyRegister() { return rbx; } - -const Register BaselineLeaveFrameDescriptor::ParamsSizeRegister() { - return rbx; -} -const Register BaselineLeaveFrameDescriptor::WeightRegister() { return rcx; } - -void TypeofDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {rbx}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -// static -const Register TypeConversionDescriptor::ArgumentRegister() { return rax; } - -void CallTrampolineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // rax : number of arguments - // rdi : the target to call - Register registers[] = {rdi, rax}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // rax : number of arguments (on the stack, not including receiver) - // rdi : the target to call - // rcx : arguments list length (untagged) - // rbx : arguments list (FixedArray) - Register registers[] = {rdi, rax, rcx, rbx}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallForwardVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // rax : number of arguments - // rcx : start index (to support rest parameters) - // rdi : the target to call - Register registers[] = {rdi, rax, rcx}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallFunctionTemplateDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // rdx: the function template info - // rcx: number of arguments (on the stack, not including receiver) - Register registers[] = {rdx, rcx}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallWithSpreadDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // rax : number of arguments (on the stack, not including receiver) - // rdi : the target to call - // rbx : the object to spread - Register registers[] = {rdi, rax, rbx}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CallWithArrayLikeDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // rdi : the target to call - // rbx : the arguments list - Register registers[] = {rdi, rbx}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // rax : number of arguments (on the stack, not including receiver) - // rdi : the target to call - // rdx : the new target - // rcx : arguments list length (untagged) - // rbx : arguments list (FixedArray) - Register registers[] = {rdi, rdx, rax, rcx, rbx}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructForwardVarargsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // rax : number of arguments - // rdx : the new target - // rcx : start index (to support rest parameters) - // rdi : the target to call - Register registers[] = {rdi, rdx, rax, rcx}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructWithSpreadDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // rax : number of arguments (on the stack, not including receiver) - // rdi : the target to call - // rdx : the new target - // rbx : the object to spread - Register registers[] = {rdi, rdx, rax, rbx}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructWithArrayLikeDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // rdi : the target to call - // rdx : the new target - // rbx : the arguments list - Register registers[] = {rdi, rdx, rbx}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ConstructStubDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - // rax : number of arguments - // rdx : the new target - // rdi : the target to call - // rbx : allocation site or undefined - Register registers[] = {rdi, rdx, rax, rbx}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void AbortDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {rdx}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void CompareDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {rdx, rax}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void Compare_BaselineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {rdx, rax, rbx}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void BinaryOpDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {rdx, rax}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void BinaryOp_BaselineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {rdx, rax, rbx}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ApiCallbackDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - rdx, // api function address - rcx, // argument count (not including receiver) - rbx, // call data - rdi, // holder - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void InterpreterDispatchDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - kInterpreterAccumulatorRegister, kInterpreterBytecodeOffsetRegister, - kInterpreterBytecodeArrayRegister, kInterpreterDispatchTableRegister}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void InterpreterPushArgsThenCallDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - rax, // argument count (not including receiver) - rbx, // address of first argument - rdi // the target callable to be call - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void InterpreterPushArgsThenConstructDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - rax, // argument count (not including receiver) - rcx, // address of first argument - rdi, // constructor to call - rdx, // new target - rbx, // allocation site feedback if available, undefined otherwise - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void ResumeGeneratorDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - rax, // the value to pass to the generator - rdx // the JSGeneratorObject / JSAsyncGeneratorObject to resume - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void FrameDropperTrampolineDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = { - rbx, // loaded new FP - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void RunMicrotasksEntryDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {arg_reg_1, arg_reg_2}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -} // namespace internal -} // namespace v8 - -#endif // V8_TARGET_ARCH_X64 diff --git a/deps/v8/src/codegen/x64/macro-assembler-x64.cc b/deps/v8/src/codegen/x64/macro-assembler-x64.cc index cb254370b2..53f3f97f9a 100644 --- a/deps/v8/src/codegen/x64/macro-assembler-x64.cc +++ b/deps/v8/src/codegen/x64/macro-assembler-x64.cc @@ -12,6 +12,7 @@ #include "src/codegen/code-factory.h" #include "src/codegen/cpu-features.h" #include "src/codegen/external-reference-table.h" +#include "src/codegen/interface-descriptors-inl.h" #include "src/codegen/macro-assembler.h" #include "src/codegen/register-configuration.h" #include "src/codegen/string-constants.h" @@ -194,6 +195,9 @@ void TurboAssembler::CompareRoot(Operand with, RootIndex index) { void TurboAssembler::LoadMap(Register destination, Register object) { LoadTaggedPointerField(destination, FieldOperand(object, HeapObject::kMapOffset)); +#ifdef V8_MAP_PACKING + UnpackMapWord(destination); +#endif } void TurboAssembler::LoadTaggedPointerField(Register destination, @@ -205,6 +209,16 @@ void TurboAssembler::LoadTaggedPointerField(Register destination, } } +#ifdef V8_MAP_PACKING +void TurboAssembler::UnpackMapWord(Register r) { + // Clear the top two bytes (which may include metadata). Must be in sync with + // MapWord::Unpack, and vice versa. + shlq(r, Immediate(16)); + shrq(r, Immediate(16)); + xorq(r, Immediate(Internals::kMapWordXorMask)); +} +#endif + void TurboAssembler::LoadTaggedSignedField(Register destination, Operand field_operand) { if (COMPRESS_POINTERS_BOOL) { @@ -288,7 +302,7 @@ void TurboAssembler::DecompressTaggedPointer(Register destination, Operand field_operand) { RecordComment("[ DecompressTaggedPointer"); movl(destination, field_operand); - addq(destination, kPointerCageBaseRegister); + addq(destination, kPtrComprCageBaseRegister); RecordComment("]"); } @@ -296,7 +310,7 @@ void TurboAssembler::DecompressTaggedPointer(Register destination, Register source) { RecordComment("[ DecompressTaggedPointer"); movl(destination, source); - addq(destination, kPointerCageBaseRegister); + addq(destination, kPtrComprCageBaseRegister); RecordComment("]"); } @@ -304,7 +318,7 @@ void TurboAssembler::DecompressAnyTagged(Register destination, Operand field_operand) { RecordComment("[ DecompressAnyTagged"); movl(destination, field_operand); - addq(destination, kPointerCageBaseRegister); + addq(destination, kPtrComprCageBaseRegister); RecordComment("]"); } @@ -318,7 +332,7 @@ void MacroAssembler::RecordWriteField(Register object, int offset, Label done; // Skip barrier if writing a smi. - if (smi_check == INLINE_SMI_CHECK) { + if (smi_check == SmiCheck::kInline) { JumpIfSmi(value, &done); } @@ -327,7 +341,7 @@ void MacroAssembler::RecordWriteField(Register object, int offset, DCHECK(IsAligned(offset, kTaggedSize)); leaq(dst, FieldOperand(object, offset)); - if (emit_debug_code()) { + if (FLAG_debug_code) { Label ok; testb(dst, Immediate(kTaggedSize - 1)); j(zero, &ok, Label::kNear); @@ -336,13 +350,13 @@ void MacroAssembler::RecordWriteField(Register object, int offset, } RecordWrite(object, dst, value, save_fp, remembered_set_action, - OMIT_SMI_CHECK); + SmiCheck::kOmit); bind(&done); // Clobber clobbered input registers when running with the debug-code flag // turned on to provoke errors. - if (emit_debug_code()) { + if (FLAG_debug_code) { Move(value, kZapValue, RelocInfo::NONE); Move(dst, kZapValue, RelocInfo::NONE); } @@ -357,19 +371,27 @@ void TurboAssembler::SaveRegisters(RegList registers) { } } -void TurboAssembler::LoadExternalPointerField(Register destination, - Operand field_operand, - ExternalPointerTag tag) { +void TurboAssembler::LoadExternalPointerField( + Register destination, Operand field_operand, ExternalPointerTag tag, + Register scratch, IsolateRootLocation isolateRootLocation) { #ifdef V8_HEAP_SANDBOX - LoadAddress(kScratchRegister, - ExternalReference::external_pointer_table_address(isolate())); - movq(kScratchRegister, - Operand(kScratchRegister, Internals::kExternalPointerTableBufferOffset)); + DCHECK(!field_operand.AddressUsesRegister(scratch)); + if (isolateRootLocation == IsolateRootLocation::kInRootRegister) { + DCHECK(root_array_available_); + movq(scratch, Operand(kRootRegister, + IsolateData::external_pointer_table_offset() + + Internals::kExternalPointerTableBufferOffset)); + } else { + DCHECK(isolateRootLocation == IsolateRootLocation::kInScratchRegister); + movq(scratch, + Operand(scratch, IsolateData::external_pointer_table_offset() + + Internals::kExternalPointerTableBufferOffset)); + } movl(destination, field_operand); - movq(destination, Operand(kScratchRegister, destination, times_8, 0)); + movq(destination, Operand(scratch, destination, times_8, 0)); if (tag != 0) { - movq(kScratchRegister, Immediate64(tag)); - xorq(destination, kScratchRegister); + movq(scratch, Immediate64(~tag)); + andq(destination, scratch); } #else movq(destination, field_operand); @@ -480,13 +502,13 @@ void MacroAssembler::RecordWrite(Register object, Register address, DCHECK(value != address); AssertNotSmi(object); - if ((remembered_set_action == OMIT_REMEMBERED_SET && + if ((remembered_set_action == RememberedSetAction::kOmit && !FLAG_incremental_marking) || FLAG_disable_write_barriers) { return; } - if (emit_debug_code()) { + if (FLAG_debug_code) { Label ok; cmp_tagged(value, Operand(address, 0)); j(equal, &ok, Label::kNear); @@ -498,7 +520,7 @@ void MacroAssembler::RecordWrite(Register object, Register address, // catch stores of smis and stores into the young generation. Label done; - if (smi_check == INLINE_SMI_CHECK) { + if (smi_check == SmiCheck::kInline) { // Skip barrier if writing a smi. JumpIfSmi(value, &done); } @@ -519,18 +541,18 @@ void MacroAssembler::RecordWrite(Register object, Register address, // Clobber clobbered registers when running with the debug-code flag // turned on to provoke errors. - if (emit_debug_code()) { + if (FLAG_debug_code) { Move(address, kZapValue, RelocInfo::NONE); Move(value, kZapValue, RelocInfo::NONE); } } void TurboAssembler::Assert(Condition cc, AbortReason reason) { - if (emit_debug_code()) Check(cc, reason); + if (FLAG_debug_code) Check(cc, reason); } void TurboAssembler::AssertUnreachable(AbortReason reason) { - if (emit_debug_code()) Abort(reason); + if (FLAG_debug_code) Abort(reason); } void TurboAssembler::Check(Condition cc, AbortReason reason) { @@ -556,11 +578,11 @@ void TurboAssembler::CheckStackAlignment() { } void TurboAssembler::Abort(AbortReason reason) { -#ifdef DEBUG - const char* msg = GetAbortReason(reason); - RecordComment("Abort message: "); - RecordComment(msg); -#endif + if (FLAG_code_comments) { + const char* msg = GetAbortReason(reason); + RecordComment("Abort message: "); + RecordComment(msg); + } // Avoid emitting call to builtin if requested. if (trap_on_abort()) { @@ -603,7 +625,7 @@ void MacroAssembler::CallRuntime(const Runtime::Function* f, int num_arguments, // arguments passed in because it is constant. At some point we // should remove this need and make the runtime routine entry code // smarter. - Set(rax, num_arguments); + Move(rax, num_arguments); LoadAddress(rbx, ExternalReference::Create(f)); Handle<Code> code = CodeFactory::CEntry(isolate(), f->result_size, save_doubles); @@ -624,7 +646,7 @@ void MacroAssembler::TailCallRuntime(Runtime::FunctionId fid) { const Runtime::Function* function = Runtime::FunctionForId(fid); DCHECK_EQ(1, function->result_size); if (function->nargs >= 0) { - Set(rax, function->nargs); + Move(rax, function->nargs); } JumpToExternalReference(ExternalReference::Create(fid)); } @@ -633,8 +655,8 @@ void MacroAssembler::JumpToExternalReference(const ExternalReference& ext, bool builtin_exit_frame) { // Set the entry point and jump to the C entry runtime stub. LoadAddress(rbx, ext); - Handle<Code> code = CodeFactory::CEntry(isolate(), 1, kDontSaveFPRegs, - kArgvOnStack, builtin_exit_frame); + Handle<Code> code = CodeFactory::CEntry(isolate(), 1, SaveFPRegsMode::kIgnore, + ArgvMode::kStack, builtin_exit_frame); Jump(code, RelocInfo::CODE_TARGET); } @@ -656,7 +678,7 @@ int TurboAssembler::RequiredStackSizeForCallerSaved(SaveFPRegsMode fp_mode, } // R12 to r15 are callee save on all platforms. - if (fp_mode == kSaveFPRegs) { + if (fp_mode == SaveFPRegsMode::kSave) { bytes += kDoubleSize * XMMRegister::kNumRegisters; } @@ -678,7 +700,7 @@ int TurboAssembler::PushCallerSaved(SaveFPRegsMode fp_mode, Register exclusion1, } // R12 to r15 are callee save on all platforms. - if (fp_mode == kSaveFPRegs) { + if (fp_mode == SaveFPRegsMode::kSave) { int delta = kDoubleSize * XMMRegister::kNumRegisters; AllocateStackSpace(delta); for (int i = 0; i < XMMRegister::kNumRegisters; i++) { @@ -694,7 +716,7 @@ int TurboAssembler::PushCallerSaved(SaveFPRegsMode fp_mode, Register exclusion1, int TurboAssembler::PopCallerSaved(SaveFPRegsMode fp_mode, Register exclusion1, Register exclusion2, Register exclusion3) { int bytes = 0; - if (fp_mode == kSaveFPRegs) { + if (fp_mode == SaveFPRegsMode::kSave) { for (int i = 0; i < XMMRegister::kNumRegisters; i++) { XMMRegister reg = XMMRegister::from_code(i); Movsd(reg, Operand(rsp, i * kDoubleSize)); @@ -715,6 +737,24 @@ int TurboAssembler::PopCallerSaved(SaveFPRegsMode fp_mode, Register exclusion1, return bytes; } +void TurboAssembler::Movq(XMMRegister dst, Register src) { + if (CpuFeatures::IsSupported(AVX)) { + CpuFeatureScope avx_scope(this, AVX); + vmovq(dst, src); + } else { + movq(dst, src); + } +} + +void TurboAssembler::Movq(Register dst, XMMRegister src) { + if (CpuFeatures::IsSupported(AVX)) { + CpuFeatureScope avx_scope(this, AVX); + vmovq(dst, src); + } else { + movq(dst, src); + } +} + void TurboAssembler::Movdqa(XMMRegister dst, Operand src) { // See comments in Movdqa(XMMRegister, XMMRegister). if (CpuFeatures::IsSupported(AVX)) { @@ -1033,7 +1073,7 @@ void ConvertFloatToUint64(TurboAssembler* tasm, Register dst, // The input value is within uint64 range and the second conversion worked // successfully, but we still have to undo the subtraction we did // earlier. - tasm->Set(kScratchRegister, 0x8000000000000000); + tasm->Move(kScratchRegister, 0x8000000000000000); tasm->orq(dst, kScratchRegister); tasm->bind(&success); } @@ -1055,26 +1095,6 @@ void TurboAssembler::Cvttss2uiq(Register dst, XMMRegister src, Label* fail) { ConvertFloatToUint64<XMMRegister, false>(this, dst, src, fail); } -void TurboAssembler::Set(Register dst, int64_t x) { - if (x == 0) { - xorl(dst, dst); - } else if (is_uint32(x)) { - movl(dst, Immediate(static_cast<uint32_t>(x))); - } else if (is_int32(x)) { - movq(dst, Immediate(static_cast<int32_t>(x))); - } else { - movq(dst, x); - } -} - -void TurboAssembler::Set(Operand dst, intptr_t x) { - if (is_int32(x)) { - movq(dst, Immediate(static_cast<int32_t>(x))); - } else { - Set(kScratchRegister, x); - movq(dst, kScratchRegister); - } -} // ---------------------------------------------------------------------------- // Smi tagging, untagging and tag detection. @@ -1084,36 +1104,6 @@ Register TurboAssembler::GetSmiConstant(Smi source) { return kScratchRegister; } -void TurboAssembler::Move(Register dst, Smi source) { - STATIC_ASSERT(kSmiTag == 0); - int value = source.value(); - if (value == 0) { - xorl(dst, dst); - } else if (SmiValuesAre32Bits() || value < 0) { - Move(dst, source.ptr(), RelocInfo::NONE); - } else { - uint32_t uvalue = static_cast<uint32_t>(source.ptr()); - if (uvalue <= 0xFF) { - // Emit shorter instructions for small Smis - xorl(dst, dst); - movb(dst, Immediate(uvalue)); - } else { - movl(dst, Immediate(uvalue)); - } - } -} - -void TurboAssembler::Move(Register dst, ExternalReference ext) { - // TODO(jgruber,v8:8887): Also consider a root-relative load when generating - // non-isolate-independent code. In many cases it might be cheaper than - // embedding the relocatable value. - if (root_array_available_ && options().isolate_independent_code) { - IndirectLoadExternalReference(dst, ext); - return; - } - movq(dst, Immediate64(ext.address(), RelocInfo::EXTERNAL_REFERENCE)); -} - void MacroAssembler::Cmp(Register dst, int32_t src) { if (src == 0) { testl(dst, dst); @@ -1335,6 +1325,39 @@ void TurboAssembler::Push(Smi source) { // ---------------------------------------------------------------------------- +void TurboAssembler::Move(Register dst, Smi source) { + STATIC_ASSERT(kSmiTag == 0); + int value = source.value(); + if (value == 0) { + xorl(dst, dst); + } else if (SmiValuesAre32Bits() || value < 0) { + Move(dst, source.ptr(), RelocInfo::NONE); + } else { + uint32_t uvalue = static_cast<uint32_t>(source.ptr()); + Move(dst, uvalue); + } +} + +void TurboAssembler::Move(Operand dst, intptr_t x) { + if (is_int32(x)) { + movq(dst, Immediate(static_cast<int32_t>(x))); + } else { + Move(kScratchRegister, x); + movq(dst, kScratchRegister); + } +} + +void TurboAssembler::Move(Register dst, ExternalReference ext) { + // TODO(jgruber,v8:8887): Also consider a root-relative load when generating + // non-isolate-independent code. In many cases it might be cheaper than + // embedding the relocatable value. + if (root_array_available_ && options().isolate_independent_code) { + IndirectLoadExternalReference(dst, ext); + return; + } + movq(dst, Immediate64(ext.address(), RelocInfo::EXTERNAL_REFERENCE)); +} + void TurboAssembler::Move(Register dst, Register src) { if (dst != src) { movq(dst, src); @@ -1342,7 +1365,13 @@ void TurboAssembler::Move(Register dst, Register src) { } void TurboAssembler::Move(Register dst, Operand src) { movq(dst, src); } -void TurboAssembler::Move(Register dst, Immediate src) { movl(dst, src); } +void TurboAssembler::Move(Register dst, Immediate src) { + if (src.rmode() == RelocInfo::Mode::NONE) { + Move(dst, src.value()); + } else { + movl(dst, src); + } +} void TurboAssembler::Move(XMMRegister dst, XMMRegister src) { if (dst != src) { @@ -1481,7 +1510,7 @@ void TurboAssembler::PushArray(Register array, Register size, Register scratch, Register counter = scratch; Label loop, entry; if (order == PushArrayOrder::kReverse) { - Set(counter, 0); + Move(counter, 0); jmp(&entry); bind(&loop); Push(Operand(array, counter, times_system_pointer_size, 0)); @@ -1681,7 +1710,7 @@ void TurboAssembler::CallBuiltin(int builtin_index) { Move(kScratchRegister, entry, RelocInfo::OFF_HEAP_TARGET); call(kScratchRegister); } - if (FLAG_code_comments) RecordComment("]"); + RecordComment("]"); } void TurboAssembler::TailCallBuiltin(int builtin_index) { @@ -1698,7 +1727,7 @@ void TurboAssembler::TailCallBuiltin(int builtin_index) { Address entry = d.InstructionStartOfBuiltin(builtin_index); Jump(entry, RelocInfo::OFF_HEAP_TARGET); } - if (FLAG_code_comments) RecordComment("]"); + RecordComment("]"); } void TurboAssembler::LoadCodeObjectEntry(Register destination, @@ -1854,29 +1883,6 @@ void TurboAssembler::Pmaddubsw(XMMRegister dst, XMMRegister src1, } } -void TurboAssembler::Unpcklps(XMMRegister dst, XMMRegister src1, Operand src2) { - if (CpuFeatures::IsSupported(AVX)) { - CpuFeatureScope avx_scope(this, AVX); - vunpcklps(dst, src1, src2); - } else { - DCHECK_EQ(dst, src1); - unpcklps(dst, src2); - } -} - -void TurboAssembler::Shufps(XMMRegister dst, XMMRegister src1, XMMRegister src2, - byte imm8) { - if (CpuFeatures::IsSupported(AVX)) { - CpuFeatureScope avx_scope(this, AVX); - vshufps(dst, src1, src2, imm8); - } else { - if (dst != src1) { - movaps(dst, src1); - } - shufps(dst, src2, imm8); - } -} - void TurboAssembler::Pextrd(Register dst, XMMRegister src, uint8_t imm8) { if (imm8 == 0) { Movd(dst, src); @@ -2008,36 +2014,6 @@ void TurboAssembler::Pinsrq(XMMRegister dst, XMMRegister src1, Operand src2, imm8, base::Optional<CpuFeature>(SSE4_1)); } -void TurboAssembler::Psllq(XMMRegister dst, byte imm8) { - if (CpuFeatures::IsSupported(AVX)) { - CpuFeatureScope scope(this, AVX); - vpsllq(dst, dst, imm8); - } else { - DCHECK(!IsEnabled(AVX)); - psllq(dst, imm8); - } -} - -void TurboAssembler::Psrlq(XMMRegister dst, byte imm8) { - if (CpuFeatures::IsSupported(AVX)) { - CpuFeatureScope scope(this, AVX); - vpsrlq(dst, dst, imm8); - } else { - DCHECK(!IsEnabled(AVX)); - psrlq(dst, imm8); - } -} - -void TurboAssembler::Pslld(XMMRegister dst, byte imm8) { - if (CpuFeatures::IsSupported(AVX)) { - CpuFeatureScope scope(this, AVX); - vpslld(dst, dst, imm8); - } else { - DCHECK(!IsEnabled(AVX)); - pslld(dst, imm8); - } -} - void TurboAssembler::Pblendvb(XMMRegister dst, XMMRegister src1, XMMRegister src2, XMMRegister mask) { if (CpuFeatures::IsSupported(AVX)) { @@ -2375,21 +2351,6 @@ void TurboAssembler::Negpd(XMMRegister dst) { ExternalReference::address_of_double_neg_constant())); } -void TurboAssembler::Psrld(XMMRegister dst, byte imm8) { - Psrld(dst, dst, imm8); -} - -void TurboAssembler::Psrld(XMMRegister dst, XMMRegister src, byte imm8) { - if (CpuFeatures::IsSupported(AVX)) { - CpuFeatureScope scope(this, AVX); - vpsrld(dst, src, imm8); - } else { - DCHECK(!IsEnabled(AVX)); - DCHECK_EQ(dst, src); - psrld(dst, imm8); - } -} - void TurboAssembler::Lzcntl(Register dst, Register src) { if (CpuFeatures::IsSupported(LZCNT)) { CpuFeatureScope scope(this, LZCNT); @@ -2593,28 +2554,28 @@ void MacroAssembler::CmpInstanceTypeRange(Register map, } void MacroAssembler::AssertNotSmi(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { Condition is_smi = CheckSmi(object); Check(NegateCondition(is_smi), AbortReason::kOperandIsASmi); } } void MacroAssembler::AssertSmi(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { Condition is_smi = CheckSmi(object); Check(is_smi, AbortReason::kOperandIsNotASmi); } } void MacroAssembler::AssertSmi(Operand object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { Condition is_smi = CheckSmi(object); Check(is_smi, AbortReason::kOperandIsNotASmi); } } void TurboAssembler::AssertZeroExtended(Register int32_register) { - if (emit_debug_code()) { + if (FLAG_debug_code) { DCHECK_NE(int32_register, kScratchRegister); movq(kScratchRegister, int64_t{0x0000000100000000}); cmpq(kScratchRegister, int32_register); @@ -2623,7 +2584,7 @@ void TurboAssembler::AssertZeroExtended(Register int32_register) { } void MacroAssembler::AssertConstructor(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { testb(object, Immediate(kSmiTagMask)); Check(not_equal, AbortReason::kOperandIsASmiAndNotAConstructor); Push(object); @@ -2636,7 +2597,7 @@ void MacroAssembler::AssertConstructor(Register object) { } void MacroAssembler::AssertFunction(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { testb(object, Immediate(kSmiTagMask)); Check(not_equal, AbortReason::kOperandIsASmiAndNotAFunction); Push(object); @@ -2648,7 +2609,7 @@ void MacroAssembler::AssertFunction(Register object) { } void MacroAssembler::AssertBoundFunction(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { testb(object, Immediate(kSmiTagMask)); Check(not_equal, AbortReason::kOperandIsASmiAndNotABoundFunction); Push(object); @@ -2659,7 +2620,7 @@ void MacroAssembler::AssertBoundFunction(Register object) { } void MacroAssembler::AssertGeneratorObject(Register object) { - if (!emit_debug_code()) return; + if (!FLAG_debug_code) return; testb(object, Immediate(kSmiTagMask)); Check(not_equal, AbortReason::kOperandIsASmiAndNotAGeneratorObject); @@ -2687,12 +2648,16 @@ void MacroAssembler::AssertGeneratorObject(Register object) { } void MacroAssembler::AssertUndefinedOrAllocationSite(Register object) { - if (emit_debug_code()) { + if (FLAG_debug_code) { Label done_checking; AssertNotSmi(object); Cmp(object, isolate()->factory()->undefined_value()); j(equal, &done_checking); - Cmp(FieldOperand(object, 0), isolate()->factory()->allocation_site_map()); + Register map = object; + Push(object); + LoadMap(map, object); + Cmp(map, isolate()->factory()->allocation_site_map()); + Pop(object); Assert(equal, AbortReason::kExpectedUndefinedOrCell); bind(&done_checking); } @@ -2737,20 +2702,6 @@ void MacroAssembler::DecrementCounter(StatsCounter* counter, int value) { } } -void MacroAssembler::MaybeDropFrames() { - // Check whether we need to drop frames to restart a function on the stack. - ExternalReference restart_fp = - ExternalReference::debug_restart_fp_address(isolate()); - Load(rbx, restart_fp); - testq(rbx, rbx); - - Label dont_drop; - j(zero, &dont_drop, Label::kNear); - Jump(BUILTIN_CODE(isolate(), FrameDropperTrampoline), RelocInfo::CODE_TARGET); - - bind(&dont_drop); -} - void TurboAssembler::PrepareForTailCall(Register callee_args_count, Register caller_args_count, Register scratch0, Register scratch1) { @@ -2801,32 +2752,32 @@ void TurboAssembler::PrepareForTailCall(Register callee_args_count, void MacroAssembler::InvokeFunction(Register function, Register new_target, Register actual_parameter_count, - InvokeFlag flag) { + InvokeType type) { LoadTaggedPointerField( rbx, FieldOperand(function, JSFunction::kSharedFunctionInfoOffset)); movzxwq(rbx, FieldOperand(rbx, SharedFunctionInfo::kFormalParameterCountOffset)); - InvokeFunction(function, new_target, rbx, actual_parameter_count, flag); + InvokeFunction(function, new_target, rbx, actual_parameter_count, type); } void MacroAssembler::InvokeFunction(Register function, Register new_target, Register expected_parameter_count, Register actual_parameter_count, - InvokeFlag flag) { - DCHECK(function == rdi); + InvokeType type) { + DCHECK_EQ(function, rdi); LoadTaggedPointerField(rsi, FieldOperand(function, JSFunction::kContextOffset)); InvokeFunctionCode(rdi, new_target, expected_parameter_count, - actual_parameter_count, flag); + actual_parameter_count, type); } void MacroAssembler::InvokeFunctionCode(Register function, Register new_target, Register expected_parameter_count, Register actual_parameter_count, - InvokeFlag flag) { + InvokeType type) { // You can't call a function without a valid frame. - DCHECK_IMPLIES(flag == CALL_FUNCTION, has_frame()); + DCHECK_IMPLIES(type == InvokeType::kCall, has_frame()); DCHECK_EQ(function, rdi); DCHECK_IMPLIES(new_target.is_valid(), new_target == rdx); @@ -2848,17 +2799,19 @@ void MacroAssembler::InvokeFunctionCode(Register function, Register new_target, } Label done; - InvokePrologue(expected_parameter_count, actual_parameter_count, &done, flag); + InvokePrologue(expected_parameter_count, actual_parameter_count, &done, type); // We call indirectly through the code field in the function to // allow recompilation to take effect without changing any of the // call sites. static_assert(kJavaScriptCallCodeStartRegister == rcx, "ABI mismatch"); LoadTaggedPointerField(rcx, FieldOperand(function, JSFunction::kCodeOffset)); - if (flag == CALL_FUNCTION) { - CallCodeObject(rcx); - } else { - DCHECK(flag == JUMP_FUNCTION); - JumpCodeObject(rcx); + switch (type) { + case InvokeType::kCall: + CallCodeObject(rcx); + break; + case InvokeType::kJump: + JumpCodeObject(rcx); + break; } jmp(&done, Label::kNear); @@ -2911,7 +2864,7 @@ void MacroAssembler::StackOverflowCheck( void MacroAssembler::InvokePrologue(Register expected_parameter_count, Register actual_parameter_count, - Label* done, InvokeFlag flag) { + Label* done, InvokeType type) { if (expected_parameter_count != actual_parameter_count) { Label regular_invoke; // If the expected parameter count is equal to the adaptor sentinel, no need @@ -2937,9 +2890,9 @@ void MacroAssembler::InvokePrologue(Register expected_parameter_count, Operand(expected_parameter_count, times_system_pointer_size, 0)); AllocateStackSpace(kScratchRegister); // Extra words are the receiver and the return address (if a jump). - int extra_words = flag == CALL_FUNCTION ? 1 : 2; + int extra_words = type == InvokeType::kCall ? 1 : 2; leaq(num, Operand(rax, extra_words)); // Number of words to copy. - Set(current, 0); + Move(current, 0); // Fall-through to the loop body because there are non-zero words to copy. bind(©); movq(kScratchRegister, @@ -3034,7 +2987,7 @@ void TurboAssembler::LeaveFrame(StackFrame::Type type) { // TODO(v8:11429): Consider passing BASELINE instead, and checking for // IsJSFrame or similar. Could then unify with manual frame leaves in the // interpreter too. - if (emit_debug_code() && !StackFrame::IsJavaScript(type)) { + if (FLAG_debug_code && !StackFrame::IsJavaScript(type)) { cmpq(Operand(rbp, CommonFrameConstants::kContextOrFrameTypeOffset), Immediate(StackFrame::TypeToMarker(type))); Check(equal, AbortReason::kStackFrameTypesMustMatch); @@ -3043,11 +2996,11 @@ void TurboAssembler::LeaveFrame(StackFrame::Type type) { popq(rbp); } -#ifdef V8_TARGET_OS_WIN +#if defined(V8_TARGET_OS_WIN) || defined(V8_TARGET_OS_MACOSX) void TurboAssembler::AllocateStackSpace(Register bytes_scratch) { - // In windows, we cannot increment the stack size by more than one page - // (minimum page size is 4KB) without accessing at least one byte on the - // page. Check this: + // On Windows and on macOS, we cannot increment the stack size by more than + // one page (minimum page size is 4KB) without accessing at least one byte on + // the page. Check this: // https://msdn.microsoft.com/en-us/library/aa227153(v=vs.60).aspx. Label check_offset; Label touch_next_page; @@ -3278,7 +3231,7 @@ void TurboAssembler::CallCFunction(Register function, int num_arguments) { DCHECK_LE(num_arguments, kMaxCParameters); DCHECK(has_frame()); // Check stack alignment. - if (emit_debug_code()) { + if (FLAG_debug_code) { CheckStackAlignment(); } @@ -3376,7 +3329,7 @@ void TurboAssembler::ComputeCodeStartAddress(Register dst) { void TurboAssembler::ResetSpeculationPoisonRegister() { // TODO(turbofan): Perhaps, we want to put an lfence here. - Set(kSpeculationPoisonRegister, -1); + Move(kSpeculationPoisonRegister, -1); } void TurboAssembler::CallForDeoptimization(Builtins::Name target, int, diff --git a/deps/v8/src/codegen/x64/macro-assembler-x64.h b/deps/v8/src/codegen/x64/macro-assembler-x64.h index 40ab1b925c..da5cf7dae3 100644 --- a/deps/v8/src/codegen/x64/macro-assembler-x64.h +++ b/deps/v8/src/codegen/x64/macro-assembler-x64.h @@ -14,6 +14,7 @@ #include "src/codegen/shared-ia32-x64/macro-assembler-shared-ia32-x64.h" #include "src/codegen/x64/assembler-x64.h" #include "src/common/globals.h" +#include "src/execution/isolate-data.h" #include "src/objects/contexts.h" #include "src/objects/tagged-index.h" @@ -25,9 +26,6 @@ using MemOperand = Operand; class StringConstantBase; -enum RememberedSetAction { EMIT_REMEMBERED_SET, OMIT_REMEMBERED_SET }; -enum SmiCheck { INLINE_SMI_CHECK, OMIT_SMI_CHECK }; - struct SmiIndex { SmiIndex(Register index_register, ScaleFactor scale) : reg(index_register), scale(scale) {} @@ -65,124 +63,43 @@ class V8_EXPORT_PRIVATE TurboAssembler : public SharedTurboAssembler { AVX_OP(Subsd, subsd) AVX_OP(Divss, divss) AVX_OP(Divsd, divsd) - AVX_OP(Orps, orps) - AVX_OP(Xorps, xorps) - AVX_OP(Xorpd, xorpd) - AVX_OP(Movq, movq) - AVX_OP(Movhlps, movhlps) - AVX_OP(Pcmpeqb, pcmpeqb) - AVX_OP(Pcmpeqw, pcmpeqw) - AVX_OP(Pcmpeqd, pcmpeqd) - AVX_OP(Pcmpgtb, pcmpgtb) AVX_OP(Pcmpgtw, pcmpgtw) AVX_OP(Pmaxsw, pmaxsw) - AVX_OP(Pmaxub, pmaxub) AVX_OP(Pminsw, pminsw) - AVX_OP(Pminub, pminub) AVX_OP(Addss, addss) AVX_OP(Addsd, addsd) AVX_OP(Mulsd, mulsd) - AVX_OP(Andps, andps) - AVX_OP(Andnps, andnps) - AVX_OP(Andpd, andpd) - AVX_OP(Andnpd, andnpd) - AVX_OP(Orpd, orpd) AVX_OP(Cmpeqps, cmpeqps) AVX_OP(Cmpltps, cmpltps) - AVX_OP(Cmpleps, cmpleps) AVX_OP(Cmpneqps, cmpneqps) AVX_OP(Cmpnltps, cmpnltps) AVX_OP(Cmpnleps, cmpnleps) - AVX_OP(Cmpeqpd, cmpeqpd) - AVX_OP(Cmpltpd, cmpltpd) - AVX_OP(Cmplepd, cmplepd) - AVX_OP(Cmpneqpd, cmpneqpd) AVX_OP(Cmpnltpd, cmpnltpd) AVX_OP(Cmpnlepd, cmpnlepd) - AVX_OP(Sqrtss, sqrtss) - AVX_OP(Sqrtsd, sqrtsd) AVX_OP(Cvttpd2dq, cvttpd2dq) AVX_OP(Ucomiss, ucomiss) AVX_OP(Ucomisd, ucomisd) - AVX_OP(Pand, pand) - AVX_OP(Por, por) - AVX_OP(Pxor, pxor) - AVX_OP(Psubb, psubb) - AVX_OP(Psubw, psubw) - AVX_OP(Psubd, psubd) - AVX_OP(Psubq, psubq) - AVX_OP(Psubsb, psubsb) AVX_OP(Psubsw, psubsw) - AVX_OP(Psubusb, psubusb) AVX_OP(Psubusw, psubusw) - AVX_OP(Pslld, pslld) - AVX_OP(Pavgb, pavgb) - AVX_OP(Pavgw, pavgw) - AVX_OP(Psraw, psraw) - AVX_OP(Psrad, psrad) - AVX_OP(Psllw, psllw) - AVX_OP(Psllq, psllq) - AVX_OP(Psrlw, psrlw) - AVX_OP(Psrld, psrld) - AVX_OP(Psrlq, psrlq) - AVX_OP(Paddb, paddb) - AVX_OP(Paddw, paddw) - AVX_OP(Paddd, paddd) - AVX_OP(Paddq, paddq) - AVX_OP(Paddsb, paddsb) AVX_OP(Paddsw, paddsw) - AVX_OP(Paddusb, paddusb) - AVX_OP(Paddusw, paddusw) AVX_OP(Pcmpgtd, pcmpgtd) - AVX_OP(Pmuludq, pmuludq) - AVX_OP(Addpd, addpd) - AVX_OP(Subpd, subpd) - AVX_OP(Mulpd, mulpd) - AVX_OP(Minps, minps) - AVX_OP(Minpd, minpd) - AVX_OP(Divpd, divpd) - AVX_OP(Maxps, maxps) - AVX_OP(Maxpd, maxpd) - AVX_OP(Addps, addps) - AVX_OP(Subps, subps) - AVX_OP(Mulps, mulps) - AVX_OP(Divps, divps) - AVX_OP(Packsswb, packsswb) - AVX_OP(Packuswb, packuswb) - AVX_OP(Packssdw, packssdw) - AVX_OP(Punpcklbw, punpcklbw) - AVX_OP(Punpcklwd, punpcklwd) - AVX_OP(Punpckldq, punpckldq) - AVX_OP(Punpckhbw, punpckhbw) - AVX_OP(Punpckhwd, punpckhwd) - AVX_OP(Punpckhdq, punpckhdq) - AVX_OP(Punpcklqdq, punpcklqdq) - AVX_OP(Punpckhqdq, punpckhqdq) - AVX_OP(Cmpps, cmpps) - AVX_OP(Cmppd, cmppd) + AVX_OP(Pcmpeqb, pcmpeqb) + AVX_OP(Pcmpeqw, pcmpeqw) + AVX_OP(Pcmpeqd, pcmpeqd) AVX_OP(Movlhps, movlhps) - AVX_OP_SSE3(Haddps, haddps) AVX_OP_SSSE3(Phaddd, phaddd) AVX_OP_SSSE3(Phaddw, phaddw) AVX_OP_SSSE3(Pshufb, pshufb) - AVX_OP_SSSE3(Psignb, psignb) - AVX_OP_SSSE3(Psignw, psignw) - AVX_OP_SSSE3(Psignd, psignd) - AVX_OP_SSSE3(Palignr, palignr) AVX_OP_SSE4_1(Pcmpeqq, pcmpeqq) AVX_OP_SSE4_1(Packusdw, packusdw) - AVX_OP_SSE4_1(Pminsb, pminsb) AVX_OP_SSE4_1(Pminsd, pminsd) AVX_OP_SSE4_1(Pminuw, pminuw) AVX_OP_SSE4_1(Pminud, pminud) - AVX_OP_SSE4_1(Pmaxsb, pmaxsb) - AVX_OP_SSE4_1(Pmaxsd, pmaxsd) AVX_OP_SSE4_1(Pmaxuw, pmaxuw) AVX_OP_SSE4_1(Pmaxud, pmaxud) AVX_OP_SSE4_1(Pmulld, pmulld) AVX_OP_SSE4_1(Insertps, insertps) AVX_OP_SSE4_1(Pinsrq, pinsrq) - AVX_OP_SSE4_1(Pblendw, pblendw) AVX_OP_SSE4_1(Pextrq, pextrq) AVX_OP_SSE4_1(Roundss, roundss) AVX_OP_SSE4_1(Roundsd, roundsd) @@ -190,6 +107,12 @@ class V8_EXPORT_PRIVATE TurboAssembler : public SharedTurboAssembler { #undef AVX_OP + // Define movq here instead of using AVX_OP. movq is defined using templates + // and there is a function template `void movq(P1)`, while technically + // impossible, will be selected when deducing the arguments for AvxHelper. + void Movq(XMMRegister dst, Register src); + void Movq(Register dst, XMMRegister src); + void PushReturnAddressFrom(Register src) { pushq(src); } void PopReturnAddressTo(Register dst) { popq(dst); } @@ -199,10 +122,6 @@ class V8_EXPORT_PRIVATE TurboAssembler : public SharedTurboAssembler { // may be bigger than 2^16 - 1. Requires a scratch register. void Ret(int bytes_dropped, Register scratch); - // Load a register with a long value as efficiently as possible. - void Set(Register dst, int64_t x); - void Set(Operand dst, intptr_t x); - // Operations on roots in the root-array. void LoadRoot(Register destination, RootIndex index) override; void LoadRoot(Operand destination, RootIndex index) { @@ -323,8 +242,28 @@ class V8_EXPORT_PRIVATE TurboAssembler : public SharedTurboAssembler { j(less, dest); } +#ifdef V8_MAP_PACKING + void UnpackMapWord(Register r); +#endif + void LoadMap(Register destination, Register object); + void Move(Register dst, intptr_t x) { + if (x == 0) { + xorl(dst, dst); + } else if (is_uint8(x)) { + xorl(dst, dst); + movb(dst, Immediate(static_cast<uint32_t>(x))); + } else if (is_uint32(x)) { + movl(dst, Immediate(static_cast<uint32_t>(x))); + } else if (is_int32(x)) { + // "movq reg64, imm32" is sign extending. + movq(dst, Immediate(static_cast<int32_t>(x))); + } else { + movq(dst, Immediate64(x)); + } + } + void Move(Operand dst, intptr_t x); void Move(Register dst, Smi source); void Move(Operand dst, Smi source) { @@ -332,13 +271,9 @@ class V8_EXPORT_PRIVATE TurboAssembler : public SharedTurboAssembler { movq(dst, constant); } - void Move(Register dst, TaggedIndex source) { - movl(dst, Immediate(static_cast<uint32_t>(source.ptr()))); - } + void Move(Register dst, TaggedIndex source) { Move(dst, source.ptr()); } - void Move(Operand dst, TaggedIndex source) { - movl(dst, Immediate(static_cast<uint32_t>(source.ptr()))); - } + void Move(Operand dst, TaggedIndex source) { Move(dst, source.ptr()); } void Move(Register dst, ExternalReference ext); @@ -449,10 +384,6 @@ class V8_EXPORT_PRIVATE TurboAssembler : public SharedTurboAssembler { void Pmaddubsw(XMMRegister dst, XMMRegister src1, Operand src2); void Pmaddubsw(XMMRegister dst, XMMRegister src1, XMMRegister src2); - void Unpcklps(XMMRegister dst, XMMRegister src1, Operand src2); - // Shufps that will mov src1 into dst if AVX is not supported. - void Shufps(XMMRegister dst, XMMRegister src1, XMMRegister src2, byte imm8); - // Non-SSE2 instructions. void Pextrd(Register dst, XMMRegister src, uint8_t imm8); @@ -467,16 +398,6 @@ class V8_EXPORT_PRIVATE TurboAssembler : public SharedTurboAssembler { void Pinsrq(XMMRegister dst, XMMRegister src1, Register src2, uint8_t imm8); void Pinsrq(XMMRegister dst, XMMRegister src1, Operand src2, uint8_t imm8); - void Psllq(XMMRegister dst, int imm8) { Psllq(dst, static_cast<byte>(imm8)); } - void Psllq(XMMRegister dst, byte imm8); - void Psrlq(XMMRegister dst, int imm8) { Psrlq(dst, static_cast<byte>(imm8)); } - void Psrlq(XMMRegister dst, byte imm8); - void Pslld(XMMRegister dst, byte imm8); - void Psrld(XMMRegister dst, byte imm8); - - // Supports both AVX (dst != src1) and SSE (checks that dst == src1). - void Psrld(XMMRegister dst, XMMRegister src, byte imm8); - void Pblendvb(XMMRegister dst, XMMRegister src1, XMMRegister src2, XMMRegister mask); void Blendvps(XMMRegister dst, XMMRegister src1, XMMRegister src2, @@ -551,7 +472,7 @@ class V8_EXPORT_PRIVATE TurboAssembler : public SharedTurboAssembler { // stack check, do it before calling this function because this function may // write into the newly allocated space. It may also overwrite the given // register's value, in the version that takes a register. -#ifdef V8_TARGET_OS_WIN +#if defined(V8_TARGET_OS_WIN) || defined(V8_TARGET_OS_MACOSX) void AllocateStackSpace(Register bytes_scratch); void AllocateStackSpace(int bytes); #else @@ -575,7 +496,8 @@ class V8_EXPORT_PRIVATE TurboAssembler : public SharedTurboAssembler { ExternalReference isolate_root = ExternalReference::isolate_root(isolate()); Move(kRootRegister, isolate_root); #ifdef V8_COMPRESS_POINTERS_IN_SHARED_CAGE - Move(kPointerCageBaseRegister, isolate_root); + LoadRootRelative(kPtrComprCageBaseRegister, + IsolateData::cage_base_offset()); #endif } @@ -675,10 +597,13 @@ class V8_EXPORT_PRIVATE TurboAssembler : public SharedTurboAssembler { // --------------------------------------------------------------------------- // V8 Heap sandbox support + enum class IsolateRootLocation { kInScratchRegister, kInRootRegister }; // Loads a field containing off-heap pointer and does necessary decoding // if V8 heap sandbox is enabled. void LoadExternalPointerField(Register destination, Operand field_operand, - ExternalPointerTag tag); + ExternalPointerTag tag, Register scratch, + IsolateRootLocation isolateRootLocation = + IsolateRootLocation::kInRootRegister); protected: static const int kSmiShift = kSmiTagSize + kSmiShiftSize; @@ -751,8 +676,8 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { void RecordWriteField( Register object, int offset, Register value, Register scratch, SaveFPRegsMode save_fp, - RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, - SmiCheck smi_check = INLINE_SMI_CHECK); + RememberedSetAction remembered_set_action = RememberedSetAction::kEmit, + SmiCheck smi_check = SmiCheck::kInline); // For page containing |object| mark region covering |address| // dirty. |object| is the object being stored into, |value| is the @@ -761,11 +686,8 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { // the write barrier if the value is a smi. void RecordWrite( Register object, Register address, Register value, SaveFPRegsMode save_fp, - RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, - SmiCheck smi_check = INLINE_SMI_CHECK); - - // Frame restart support. - void MaybeDropFrames(); + RememberedSetAction remembered_set_action = RememberedSetAction::kEmit, + SmiCheck smi_check = SmiCheck::kInline); // Enter specific kind of exit frame; either in normal or // debug mode. Expects the number of arguments in register rax and @@ -797,7 +719,7 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { // Invoke the JavaScript function code by either calling or jumping. void InvokeFunctionCode(Register function, Register new_target, Register expected_parameter_count, - Register actual_parameter_count, InvokeFlag flag); + Register actual_parameter_count, InvokeType type); // On function call, call into the debugger. void CallDebugOnFunctionCall(Register fun, Register new_target, @@ -807,11 +729,11 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { // Invoke the JavaScript function in the given register. Changes the // current context to the context in the function before invoking. void InvokeFunction(Register function, Register new_target, - Register actual_parameter_count, InvokeFlag flag); + Register actual_parameter_count, InvokeType type); void InvokeFunction(Register function, Register new_target, Register expected_parameter_count, - Register actual_parameter_count, InvokeFlag flag); + Register actual_parameter_count, InvokeType type); // --------------------------------------------------------------------------- // Conversions between tagged smi values and non-tagged integer values. @@ -975,18 +897,18 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { // Call a runtime routine. void CallRuntime(const Runtime::Function* f, int num_arguments, - SaveFPRegsMode save_doubles = kDontSaveFPRegs); + SaveFPRegsMode save_doubles = SaveFPRegsMode::kIgnore); // Convenience function: Same as above, but takes the fid instead. void CallRuntime(Runtime::FunctionId fid, - SaveFPRegsMode save_doubles = kDontSaveFPRegs) { + SaveFPRegsMode save_doubles = SaveFPRegsMode::kIgnore) { const Runtime::Function* function = Runtime::FunctionForId(fid); CallRuntime(function, function->nargs, save_doubles); } // Convenience function: Same as above, but takes the fid instead. void CallRuntime(Runtime::FunctionId fid, int num_arguments, - SaveFPRegsMode save_doubles = kDontSaveFPRegs) { + SaveFPRegsMode save_doubles = SaveFPRegsMode::kIgnore) { CallRuntime(Runtime::FunctionForId(fid), num_arguments, save_doubles); } @@ -1017,7 +939,7 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { // Helper functions for generating invokes. void InvokePrologue(Register expected_parameter_count, Register actual_parameter_count, Label* done, - InvokeFlag flag); + InvokeType type); void EnterExitFramePrologue(Register saved_rax_reg, StackFrame::Type frame_type); diff --git a/deps/v8/src/codegen/x64/register-x64.h b/deps/v8/src/codegen/x64/register-x64.h index 9a812d06a1..61e7ccf396 100644 --- a/deps/v8/src/codegen/x64/register-x64.h +++ b/deps/v8/src/codegen/x64/register-x64.h @@ -212,7 +212,7 @@ constexpr Register kReturnRegister2 = r8; constexpr Register kJSFunctionRegister = rdi; constexpr Register kContextRegister = rsi; constexpr Register kAllocateSizeRegister = rdx; -constexpr Register kSpeculationPoisonRegister = r12; +constexpr Register kSpeculationPoisonRegister = r11; constexpr Register kInterpreterAccumulatorRegister = rax; constexpr Register kInterpreterBytecodeOffsetRegister = r9; constexpr Register kInterpreterBytecodeArrayRegister = r12; @@ -236,9 +236,9 @@ constexpr Register kScratchRegister = r10; constexpr XMMRegister kScratchDoubleReg = xmm15; constexpr Register kRootRegister = r13; // callee save #ifdef V8_COMPRESS_POINTERS_IN_SHARED_CAGE -constexpr Register kPointerCageBaseRegister = r14; // callee save +constexpr Register kPtrComprCageBaseRegister = r14; // callee save #else -constexpr Register kPointerCageBaseRegister = kRootRegister; +constexpr Register kPtrComprCageBaseRegister = kRootRegister; #endif constexpr Register kOffHeapTrampolineRegister = kScratchRegister; diff --git a/deps/v8/src/common/external-pointer-inl.h b/deps/v8/src/common/external-pointer-inl.h index bc7aea3691..737bd55e5c 100644 --- a/deps/v8/src/common/external-pointer-inl.h +++ b/deps/v8/src/common/external-pointer-inl.h @@ -12,20 +12,13 @@ namespace v8 { namespace internal { -V8_INLINE Address DecodeExternalPointer(PtrComprCageBase isolate_root, +V8_INLINE Address DecodeExternalPointer(const Isolate* isolate, ExternalPointer_t encoded_pointer, ExternalPointerTag tag) { STATIC_ASSERT(kExternalPointerSize == kSystemPointerSize); #ifdef V8_HEAP_SANDBOX - - // TODO(syg): V8_HEAP_SANDBOX doesn't work with pointer cage -#ifdef V8_COMPRESS_POINTERS_IN_SHARED_CAGE -#error "V8_HEAP_SANDBOX requires per-Isolate pointer compression cage" -#endif - uint32_t index = static_cast<uint32_t>(encoded_pointer); - const Isolate* isolate = Isolate::FromRootAddress(isolate_root.address()); - return isolate->external_pointer_table().get(index) ^ tag; + return isolate->external_pointer_table().get(index) & ~tag; #else return encoded_pointer; #endif @@ -47,9 +40,10 @@ V8_INLINE void InitExternalPointerField(Address field_address, V8_INLINE void InitExternalPointerField(Address field_address, Isolate* isolate, Address value, ExternalPointerTag tag) { #ifdef V8_HEAP_SANDBOX + DCHECK_EQ(value & kExternalPointerTagMask, 0); ExternalPointer_t index = isolate->external_pointer_table().allocate(); isolate->external_pointer_table().set(static_cast<uint32_t>(index), - value ^ tag); + value | tag); static_assert(kExternalPointerSize == kSystemPointerSize, "Review the code below, once kExternalPointerSize is 4-byte " "the address of the field will always be aligned"); @@ -68,7 +62,7 @@ V8_INLINE void InitExternalPointerField(Address field_address, Isolate* isolate, } V8_INLINE Address ReadExternalPointerField(Address field_address, - PtrComprCageBase cage_base, + const Isolate* isolate, ExternalPointerTag tag) { // Pointer compression causes types larger than kTaggedSize to be unaligned. constexpr bool v8_pointer_compression_unaligned = @@ -79,7 +73,7 @@ V8_INLINE Address ReadExternalPointerField(Address field_address, } else { encoded_value = base::Memory<ExternalPointer_t>(field_address); } - return DecodeExternalPointer(cage_base, encoded_value, tag); + return DecodeExternalPointer(isolate, encoded_value, tag); } V8_INLINE void WriteExternalPointerField(Address field_address, @@ -89,11 +83,12 @@ V8_INLINE void WriteExternalPointerField(Address field_address, static_assert(kExternalPointerSize == kSystemPointerSize, "Review the code below, once kExternalPointerSize is 4-byte " "the address of the field will always be aligned"); + DCHECK_EQ(value & kExternalPointerTagMask, 0); ExternalPointer_t index = base::ReadUnalignedValue<ExternalPointer_t>(field_address); isolate->external_pointer_table().set(static_cast<uint32_t>(index), - value ^ tag); + value | tag); #else // Pointer compression causes types larger than kTaggedSize to be unaligned. constexpr bool v8_pointer_compression_unaligned = diff --git a/deps/v8/src/common/external-pointer.h b/deps/v8/src/common/external-pointer.h index c0941f2978..5c1995749c 100644 --- a/deps/v8/src/common/external-pointer.h +++ b/deps/v8/src/common/external-pointer.h @@ -12,7 +12,7 @@ namespace internal { // Convert external pointer from on-V8-heap representation to an actual external // pointer value. -V8_INLINE Address DecodeExternalPointer(PtrComprCageBase isolate, +V8_INLINE Address DecodeExternalPointer(const Isolate* isolate, ExternalPointer_t encoded_pointer, ExternalPointerTag tag); @@ -34,7 +34,7 @@ V8_INLINE void InitExternalPointerField(Address field_address, Isolate* isolate, // Reads external pointer for the field, and decodes it if the sandbox is // enabled. V8_INLINE Address ReadExternalPointerField(Address field_address, - PtrComprCageBase isolate, + const Isolate* isolate, ExternalPointerTag tag); // Encodes value if the sandbox is enabled and writes it into the field. diff --git a/deps/v8/src/common/globals.h b/deps/v8/src/common/globals.h index f51c3210f8..1be0efd023 100644 --- a/deps/v8/src/common/globals.h +++ b/deps/v8/src/common/globals.h @@ -209,6 +209,15 @@ constexpr int kElidedFrameSlots = 0; #endif constexpr int kDoubleSizeLog2 = 3; +// The maximal length of the string representation for a double value +// (e.g. "-2.2250738585072020E-308"). It is composed as follows: +// - 17 decimal digits, see kBase10MaximalLength (dtoa.h) +// - 1 sign +// - 1 decimal point +// - 1 E or e +// - 1 exponent sign +// - 3 exponent +constexpr int kMaxDoubleStringLength = 24; // Total wasm code space per engine (i.e. per process) is limited to make // certain attacks that rely on heap spraying harder. @@ -457,11 +466,11 @@ inline LanguageMode stricter_language_mode(LanguageMode mode1, // a keyed store is of the form a[expression] = foo. enum class StoreOrigin { kMaybeKeyed, kNamed }; -enum TypeofMode : int { INSIDE_TYPEOF, NOT_INSIDE_TYPEOF }; +enum class TypeofMode { kInside, kNotInside }; // Enums used by CEntry. -enum SaveFPRegsMode { kDontSaveFPRegs, kSaveFPRegs }; -enum ArgvMode { kArgvOnStack, kArgvInRegister }; +enum class SaveFPRegsMode { kIgnore, kSave }; +enum class ArgvMode { kStack, kRegister }; // This constant is used as an undefined value when passing source positions. constexpr int kNoSourcePosition = -1; @@ -789,11 +798,14 @@ constexpr int kSpaceTagSize = 4; STATIC_ASSERT(FIRST_SPACE == 0); enum class AllocationType : uint8_t { - kYoung, // Regular object allocated in NEW_SPACE or NEW_LO_SPACE - kOld, // Regular object allocated in OLD_SPACE or LO_SPACE - kCode, // Code object allocated in CODE_SPACE or CODE_LO_SPACE - kMap, // Map object allocated in MAP_SPACE - kReadOnly // Object allocated in RO_SPACE + kYoung, // Regular object allocated in NEW_SPACE or NEW_LO_SPACE + kOld, // Regular object allocated in OLD_SPACE or LO_SPACE + kCode, // Code object allocated in CODE_SPACE or CODE_LO_SPACE + kMap, // Map object allocated in MAP_SPACE + kReadOnly, // Object allocated in RO_SPACE + kSharedOld, // Regular object allocated in SHARED_OLD_SPACE or + // SHARED_LO_SPACE + kSharedMap, // Map object in SHARED_MAP_SPACE }; inline size_t hash_value(AllocationType kind) { @@ -812,6 +824,10 @@ inline std::ostream& operator<<(std::ostream& os, AllocationType kind) { return os << "Map"; case AllocationType::kReadOnly: return os << "ReadOnly"; + case AllocationType::kSharedOld: + return os << "SharedOld"; + case AllocationType::kSharedMap: + return os << "SharedMap"; } UNREACHABLE(); } @@ -880,6 +896,8 @@ enum InlineCacheState { RECOMPUTE_HANDLER, // Multiple receiver types have been seen. POLYMORPHIC, + // Many DOM receiver types have been seen for the same accessor. + MEGADOM, // Many receiver types have been seen. MEGAMORPHIC, // A generic handler is installed and no extra typefeedback is recorded. @@ -901,6 +919,8 @@ inline const char* InlineCacheState2String(InlineCacheState state) { return "POLYMORPHIC"; case MEGAMORPHIC: return "MEGAMORPHIC"; + case MEGADOM: + return "MEGADOM"; case GENERIC: return "GENERIC"; } @@ -1602,6 +1622,7 @@ inline std::ostream& operator<<(std::ostream& os, } enum class SpeculationMode { kAllowSpeculation, kDisallowSpeculation }; +enum class CallFeedbackContent { kTarget, kReceiver }; inline std::ostream& operator<<(std::ostream& os, SpeculationMode speculation_mode) { @@ -1758,6 +1779,10 @@ class PtrComprCageBase { inline Address address() const; + bool operator==(const PtrComprCageBase& other) const { + return address_ == other.address_; + } + private: Address address_; }; diff --git a/deps/v8/src/common/message-template.h b/deps/v8/src/common/message-template.h index 5193a0bae3..6d7116f73e 100644 --- a/deps/v8/src/common/message-template.h +++ b/deps/v8/src/common/message-template.h @@ -330,6 +330,8 @@ namespace internal { "Expected letters optionally connected with underscores or hyphens for " \ "a location, got %") \ T(InvalidArrayBufferLength, "Invalid array buffer length") \ + T(InvalidArrayBufferMaxLength, "Invalid array buffer max length") \ + T(InvalidArrayBufferResizeLength, "%: Invalid length parameter") \ T(ArrayBufferAllocationFailed, "Array buffer allocation failed") \ T(Invalid, "Invalid % : %") \ T(InvalidArrayLength, "Invalid array length") \ @@ -354,6 +356,7 @@ namespace internal { T(LetInLexicalBinding, "let is disallowed as a lexically bound name") \ T(LocaleMatcher, "Illegal value for localeMatcher:%") \ T(NormalizationForm, "The normalization form should be one of %.") \ + T(OutOfMemory, "%: Out of memory") \ T(ParameterOfFunctionOutOfRange, \ "Paramenter % of function %() is % and out of range") \ T(ZeroDigitNumericSeparator, \ @@ -564,7 +567,7 @@ namespace internal { T(WasmTrapRemByZero, "remainder by zero") \ T(WasmTrapFloatUnrepresentable, "float unrepresentable in integer range") \ T(WasmTrapTableOutOfBounds, "table index is out of bounds") \ - T(WasmTrapFuncSigMismatch, "function signature mismatch") \ + T(WasmTrapFuncSigMismatch, "null function or function signature mismatch") \ T(WasmTrapMultiReturnLengthMismatch, "multi-return length mismatch") \ T(WasmTrapJSTypeError, "type incompatibility when transforming from/to JS") \ T(WasmTrapDataSegmentDropped, "data segment has been dropped") \ diff --git a/deps/v8/src/common/ptr-compr-inl.h b/deps/v8/src/common/ptr-compr-inl.h index 66c22311b0..7a4d940891 100644 --- a/deps/v8/src/common/ptr-compr-inl.h +++ b/deps/v8/src/common/ptr-compr-inl.h @@ -15,30 +15,10 @@ namespace internal { #ifdef V8_COMPRESS_POINTERS -#if defined V8_COMPRESS_POINTERS_IN_ISOLATE_CAGE - -PtrComprCageBase::PtrComprCageBase(const Isolate* isolate) - : address_(isolate->isolate_root()) {} -PtrComprCageBase::PtrComprCageBase(const LocalIsolate* isolate) - : address_(isolate->isolate_root()) {} - -#elif defined V8_COMPRESS_POINTERS_IN_SHARED_CAGE - PtrComprCageBase::PtrComprCageBase(const Isolate* isolate) - : address_(isolate->isolate_root()) { - UNIMPLEMENTED(); -} + : address_(isolate->cage_base()) {} PtrComprCageBase::PtrComprCageBase(const LocalIsolate* isolate) - : address_(isolate->isolate_root()) { - UNIMPLEMENTED(); -} - -#else - -#error "Pointer compression build configuration error" - -#endif // V8_COMPRESS_POINTERS_IN_ISOLATE_CAGE, - // V8_COMPRESS_POINTERS_IN_SHARED_CAGE + : address_(isolate->cage_base()) {} Address PtrComprCageBase::address() const { Address ret = address_; diff --git a/deps/v8/src/compiler-dispatcher/compiler-dispatcher.cc b/deps/v8/src/compiler-dispatcher/compiler-dispatcher.cc index a22c79e0ad..2af0fd498c 100644 --- a/deps/v8/src/compiler-dispatcher/compiler-dispatcher.cc +++ b/deps/v8/src/compiler-dispatcher/compiler-dispatcher.cc @@ -59,8 +59,7 @@ base::Optional<CompilerDispatcher::JobId> CompilerDispatcher::Enqueue( const FunctionLiteral* function_literal) { TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.CompilerDispatcherEnqueue"); - RuntimeCallTimerScope runtimeTimer( - isolate_, RuntimeCallCounterId::kCompileEnqueueOnDispatcher); + RCS_SCOPE(isolate_, RuntimeCallCounterId::kCompileEnqueueOnDispatcher); if (!IsEnabled()) return base::nullopt; @@ -129,8 +128,7 @@ void CompilerDispatcher::RegisterSharedFunctionInfo( void CompilerDispatcher::WaitForJobIfRunningOnBackground(Job* job) { TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.CompilerDispatcherWaitForBackgroundJob"); - RuntimeCallTimerScope runtimeTimer( - isolate_, RuntimeCallCounterId::kCompileWaitForDispatcher); + RCS_SCOPE(isolate_, RuntimeCallCounterId::kCompileWaitForDispatcher); base::MutexGuard lock(&mutex_); if (running_background_jobs_.find(job) == running_background_jobs_.end()) { @@ -149,8 +147,7 @@ void CompilerDispatcher::WaitForJobIfRunningOnBackground(Job* job) { bool CompilerDispatcher::FinishNow(Handle<SharedFunctionInfo> function) { TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.CompilerDispatcherFinishNow"); - RuntimeCallTimerScope runtimeTimer( - isolate_, RuntimeCallCounterId::kCompileFinishNowOnDispatcher); + RCS_SCOPE(isolate_, RuntimeCallCounterId::kCompileFinishNowOnDispatcher); if (trace_compiler_dispatcher_) { PrintF("CompilerDispatcher: finishing "); function->ShortPrint(); diff --git a/deps/v8/src/compiler-dispatcher/optimizing-compile-dispatcher.cc b/deps/v8/src/compiler-dispatcher/optimizing-compile-dispatcher.cc index 73292dd5ad..c7727c951b 100644 --- a/deps/v8/src/compiler-dispatcher/optimizing-compile-dispatcher.cc +++ b/deps/v8/src/compiler-dispatcher/optimizing-compile-dispatcher.cc @@ -57,16 +57,19 @@ class OptimizingCompileDispatcher::CompileTask : public CancelableTask { private: // v8::Task overrides. void RunInternal() override { +#ifdef V8_RUNTIME_CALL_STATS WorkerThreadRuntimeCallStatsScope runtime_call_stats_scope( worker_thread_runtime_call_stats_); LocalIsolate local_isolate(isolate_, ThreadKind::kBackground, runtime_call_stats_scope.Get()); +#else // V8_RUNTIME_CALL_STATS + LocalIsolate local_isolate(isolate_, ThreadKind::kBackground); +#endif // V8_RUNTIME_CALL_STATS DCHECK(local_isolate.heap()->IsParked()); { - RuntimeCallTimerScope runtimeTimer( - runtime_call_stats_scope.Get(), - RuntimeCallCounterId::kOptimizeBackgroundDispatcherJob); + RCS_SCOPE(runtime_call_stats_scope.Get(), + RuntimeCallCounterId::kOptimizeBackgroundDispatcherJob); TimerEventScope<TimerEventRecompileConcurrent> timer(isolate_); TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), @@ -78,7 +81,7 @@ class OptimizingCompileDispatcher::CompileTask : public CancelableTask { } dispatcher_->CompileNext(dispatcher_->NextInput(&local_isolate), - runtime_call_stats_scope.Get(), &local_isolate); + &local_isolate); } { base::MutexGuard lock_guard(&dispatcher_->ref_count_mutex_); @@ -111,12 +114,12 @@ OptimizedCompilationJob* OptimizingCompileDispatcher::NextInput( } void OptimizingCompileDispatcher::CompileNext(OptimizedCompilationJob* job, - RuntimeCallStats* stats, LocalIsolate* local_isolate) { if (!job) return; // The function may have already been optimized by OSR. Simply continue. - CompilationJob::Status status = job->ExecuteJob(stats, local_isolate); + CompilationJob::Status status = + job->ExecuteJob(local_isolate->runtime_call_stats(), local_isolate); USE(status); // Prevent an unused-variable error. { @@ -167,6 +170,7 @@ void OptimizingCompileDispatcher::FlushQueues( } void OptimizingCompileDispatcher::Flush(BlockingBehavior blocking_behavior) { + HandleScope handle_scope(isolate_); FlushQueues(blocking_behavior, true); if (FLAG_trace_concurrent_recompilation) { PrintF(" ** Flushed concurrent recompilation queues. (mode: %s)\n", @@ -176,6 +180,7 @@ void OptimizingCompileDispatcher::Flush(BlockingBehavior blocking_behavior) { } void OptimizingCompileDispatcher::Stop() { + HandleScope handle_scope(isolate_); FlushQueues(BlockingBehavior::kBlock, false); // At this point the optimizing compiler thread's event loop has stopped. // There is no need for a mutex when reading input_queue_length_. diff --git a/deps/v8/src/compiler-dispatcher/optimizing-compile-dispatcher.h b/deps/v8/src/compiler-dispatcher/optimizing-compile-dispatcher.h index 37454c67e0..4ae966192f 100644 --- a/deps/v8/src/compiler-dispatcher/optimizing-compile-dispatcher.h +++ b/deps/v8/src/compiler-dispatcher/optimizing-compile-dispatcher.h @@ -64,8 +64,7 @@ class V8_EXPORT_PRIVATE OptimizingCompileDispatcher { bool restore_function_code); void FlushInputQueue(); void FlushOutputQueue(bool restore_function_code); - void CompileNext(OptimizedCompilationJob* job, RuntimeCallStats* stats, - LocalIsolate* local_isolate); + void CompileNext(OptimizedCompilationJob* job, LocalIsolate* local_isolate); OptimizedCompilationJob* NextInput(LocalIsolate* local_isolate); inline int InputQueueIndex(int i) { diff --git a/deps/v8/src/compiler/OWNERS b/deps/v8/src/compiler/OWNERS index 5260502f32..1626bc5487 100644 --- a/deps/v8/src/compiler/OWNERS +++ b/deps/v8/src/compiler/OWNERS @@ -11,6 +11,8 @@ per-file wasm-*=bbudge@chromium.org per-file wasm-*=clemensb@chromium.org per-file wasm-*=gdeepti@chromium.org per-file wasm-*=jkummerow@chromium.org +per-file wasm-*=manoskouk@chromium.org +per-file wasm-*=thibaudm@chromium.org per-file int64-lowering.*=ahaas@chromium.org @@ -23,7 +25,3 @@ per-file opcodes.*=ahaas@chromium.org per-file opcodes.*=bbudge@chromium.org per-file opcodes.*=gdeepti@chromium.org per-file opcodes.*=zhin@chromium.org - -per-file simd-scalar-lowering.*=bbudge@chromium.org -per-file simd-scalar-lowering.*=gdeepti@chromium.org -per-file simd-scalar-lowering.*=zhin@chromium.org diff --git a/deps/v8/src/compiler/access-builder.cc b/deps/v8/src/compiler/access-builder.cc index 3cc4000d12..675371df57 100644 --- a/deps/v8/src/compiler/access-builder.cc +++ b/deps/v8/src/compiler/access-builder.cc @@ -31,11 +31,11 @@ FieldAccess AccessBuilder::ForExternalIntPtr() { } // static -FieldAccess AccessBuilder::ForMap() { +FieldAccess AccessBuilder::ForMap(WriteBarrierKind write_barrier) { FieldAccess access = {kTaggedBase, HeapObject::kMapOffset, MaybeHandle<Name>(), MaybeHandle<Map>(), - Type::OtherInternal(), MachineType::TaggedPointer(), - kMapWriteBarrier}; + Type::OtherInternal(), MachineType::MapInHeader(), + write_barrier}; return access; } @@ -105,12 +105,12 @@ FieldAccess AccessBuilder::ForJSObjectElements() { } // static -FieldAccess AccessBuilder::ForJSObjectInObjectProperty(const MapRef& map, - int index) { +FieldAccess AccessBuilder::ForJSObjectInObjectProperty( + const MapRef& map, int index, MachineType machine_type) { int const offset = map.GetInObjectPropertyOffset(index); FieldAccess access = {kTaggedBase, offset, MaybeHandle<Name>(), MaybeHandle<Map>(), - Type::NonInternal(), MachineType::AnyTagged(), + Type::NonInternal(), machine_type, kFullWriteBarrier}; return access; } @@ -760,7 +760,7 @@ FieldAccess AccessBuilder::ForExternalStringResourceData() { ConstFieldInfo::None(), false, #ifdef V8_HEAP_SANDBOX - kExternalStringResourceTag, + kExternalStringResourceDataTag, #endif }; return access; diff --git a/deps/v8/src/compiler/access-builder.h b/deps/v8/src/compiler/access-builder.h index 08e11179ba..fa68628cf8 100644 --- a/deps/v8/src/compiler/access-builder.h +++ b/deps/v8/src/compiler/access-builder.h @@ -31,7 +31,7 @@ class V8_EXPORT_PRIVATE AccessBuilder final // Access to heap object fields and elements (based on tagged pointer). // Provides access to HeapObject::map() field. - static FieldAccess ForMap(); + static FieldAccess ForMap(WriteBarrierKind write_barrier = kMapWriteBarrier); // Provides access to HeapNumber::value() field. static FieldAccess ForHeapNumberValue(); @@ -58,7 +58,9 @@ class V8_EXPORT_PRIVATE AccessBuilder final static FieldAccess ForJSObjectElements(); // Provides access to JSObject inobject property fields. - static FieldAccess ForJSObjectInObjectProperty(const MapRef& map, int index); + static FieldAccess ForJSObjectInObjectProperty( + const MapRef& map, int index, + MachineType machine_type = MachineType::AnyTagged()); static FieldAccess ForJSObjectOffset( int offset, WriteBarrierKind write_barrier_kind = kFullWriteBarrier); diff --git a/deps/v8/src/compiler/access-info.cc b/deps/v8/src/compiler/access-info.cc index bc3f113eb7..0e3ccc1948 100644 --- a/deps/v8/src/compiler/access-info.cc +++ b/deps/v8/src/compiler/access-info.cc @@ -385,9 +385,10 @@ AccessInfoFactory::AccessInfoFactory(JSHeapBroker* broker, base::Optional<ElementAccessInfo> AccessInfoFactory::ComputeElementAccessInfo( Handle<Map> map, AccessMode access_mode) const { // Check if it is safe to inline element access for the {map}. - MapRef map_ref(broker(), map); - if (!CanInlineElementAccess(map_ref)) return base::nullopt; - ElementsKind const elements_kind = map_ref.elements_kind(); + base::Optional<MapRef> map_ref = TryMakeRef(broker(), map); + if (!map_ref.has_value()) return {}; + if (!CanInlineElementAccess(*map_ref)) return base::nullopt; + ElementsKind const elements_kind = map_ref->elements_kind(); return ElementAccessInfo({{map}, zone()}, elements_kind, zone()); } @@ -427,8 +428,8 @@ PropertyAccessInfo AccessInfoFactory::ComputeDataFieldAccessInfo( Handle<Map> receiver_map, Handle<Map> map, MaybeHandle<JSObject> holder, InternalIndex descriptor, AccessMode access_mode) const { DCHECK(descriptor.is_found()); - Handle<DescriptorArray> descriptors(map->instance_descriptors(isolate()), - isolate()); + Handle<DescriptorArray> descriptors = broker()->CanonicalPersistentHandle( + map->instance_descriptors(kAcquireLoad)); PropertyDetails const details = descriptors->GetDetails(descriptor); int index = descriptors->GetFieldIndex(descriptor); Representation details_representation = details.representation(); @@ -438,46 +439,55 @@ PropertyAccessInfo AccessInfoFactory::ComputeDataFieldAccessInfo( // fields for which the representation has not yet been // determined by the runtime. So we need to catch this case // here and fall back to use the regular IC logic instead. - return PropertyAccessInfo::Invalid(zone()); + return Invalid(); } FieldIndex field_index = FieldIndex::ForPropertyIndex(*map, index, details_representation); Type field_type = Type::NonInternal(); MaybeHandle<Map> field_map; - MapRef map_ref(broker(), map); + + base::Optional<MapRef> map_ref = TryMakeRef(broker(), map); + if (!map_ref.has_value()) return Invalid(); + ZoneVector<CompilationDependency const*> unrecorded_dependencies(zone()); - map_ref.SerializeOwnDescriptor(descriptor); + if (!map_ref->TrySerializeOwnDescriptor(descriptor)) { + return Invalid(); + } if (details_representation.IsSmi()) { field_type = Type::SignedSmall(); unrecorded_dependencies.push_back( - dependencies()->FieldRepresentationDependencyOffTheRecord(map_ref, + dependencies()->FieldRepresentationDependencyOffTheRecord(*map_ref, descriptor)); } else if (details_representation.IsDouble()) { field_type = type_cache_->kFloat64; unrecorded_dependencies.push_back( - dependencies()->FieldRepresentationDependencyOffTheRecord(map_ref, + dependencies()->FieldRepresentationDependencyOffTheRecord(*map_ref, descriptor)); } else if (details_representation.IsHeapObject()) { // Extract the field type from the property details (make sure its // representation is TaggedPointer to reflect the heap object case). - Handle<FieldType> descriptors_field_type( - descriptors->GetFieldType(descriptor), isolate()); + Handle<FieldType> descriptors_field_type = + broker()->CanonicalPersistentHandle( + descriptors->GetFieldType(descriptor)); if (descriptors_field_type->IsNone()) { // Store is not safe if the field type was cleared. if (access_mode == AccessMode::kStore) { - return PropertyAccessInfo::Invalid(zone()); + return Invalid(); } // The field type was cleared by the GC, so we don't know anything // about the contents now. } unrecorded_dependencies.push_back( - dependencies()->FieldRepresentationDependencyOffTheRecord(map_ref, + dependencies()->FieldRepresentationDependencyOffTheRecord(*map_ref, descriptor)); if (descriptors_field_type->IsClass()) { // Remember the field map, and try to infer a useful type. - Handle<Map> map(descriptors_field_type->AsClass(), isolate()); - field_type = Type::For(MapRef(broker(), map)); + Handle<Map> map = broker()->CanonicalPersistentHandle( + descriptors_field_type->AsClass()); + base::Optional<MapRef> maybe_ref = TryMakeRef(broker(), map); + if (!maybe_ref.has_value()) return Invalid(); + field_type = Type::For(*maybe_ref); field_map = MaybeHandle<Map>(map); } } else { @@ -486,7 +496,7 @@ PropertyAccessInfo AccessInfoFactory::ComputeDataFieldAccessInfo( // TODO(turbofan): We may want to do this only depending on the use // of the access info. unrecorded_dependencies.push_back( - dependencies()->FieldTypeDependencyOffTheRecord(map_ref, descriptor)); + dependencies()->FieldTypeDependencyOffTheRecord(*map_ref, descriptor)); PropertyConstness constness; if (details.IsReadOnly() && !details.IsConfigurable()) { @@ -497,11 +507,11 @@ PropertyAccessInfo AccessInfoFactory::ComputeDataFieldAccessInfo( // of turboprop. constness = PropertyConstness::kMutable; } else { - map_ref.SerializeOwnDescriptor(descriptor); - constness = dependencies()->DependOnFieldConstness(map_ref, descriptor); + constness = dependencies()->DependOnFieldConstness(*map_ref, descriptor); } - Handle<Map> field_owner_map(map->FindFieldOwner(isolate(), descriptor), - isolate()); + // TODO(v8:11670): Make FindFieldOwner and friends robust wrt concurrency. + Handle<Map> field_owner_map = broker()->CanonicalPersistentHandle( + map->FindFieldOwner(isolate(), descriptor)); switch (constness) { case PropertyConstness::kMutable: return PropertyAccessInfo::DataField( @@ -527,13 +537,14 @@ PropertyAccessInfo AccessorAccessInfoHelper( AccessMode access_mode, AccessorsObjectGetter get_accessors) { if (map->instance_type() == JS_MODULE_NAMESPACE_TYPE) { DCHECK(map->is_prototype_map()); - Handle<PrototypeInfo> proto_info(PrototypeInfo::cast(map->prototype_info()), - isolate); - Handle<JSModuleNamespace> module_namespace( - JSModuleNamespace::cast(proto_info->module_namespace()), isolate); - Handle<Cell> cell(Cell::cast(module_namespace->module().exports().Lookup( - isolate, name, Smi::ToInt(name->GetHash()))), - isolate); + Handle<PrototypeInfo> proto_info = broker->CanonicalPersistentHandle( + PrototypeInfo::cast(map->prototype_info())); + Handle<JSModuleNamespace> module_namespace = + broker->CanonicalPersistentHandle( + JSModuleNamespace::cast(proto_info->module_namespace())); + Handle<Cell> cell = broker->CanonicalPersistentHandle( + Cell::cast(module_namespace->module().exports().Lookup( + isolate, name, Smi::ToInt(name->GetHash())))); if (cell->value().IsTheHole(isolate)) { // This module has not been fully initialized yet. return PropertyAccessInfo::Invalid(zone); @@ -548,16 +559,20 @@ PropertyAccessInfo AccessorAccessInfoHelper( return PropertyAccessInfo::FastAccessorConstant(zone, receiver_map, Handle<Object>(), holder); } - Handle<Object> accessors = get_accessors(); - if (!accessors->IsAccessorPair()) { + Handle<Object> maybe_accessors = get_accessors(); + if (!maybe_accessors->IsAccessorPair()) { return PropertyAccessInfo::Invalid(zone); } - Handle<Object> accessor(access_mode == AccessMode::kLoad - ? Handle<AccessorPair>::cast(accessors)->getter() - : Handle<AccessorPair>::cast(accessors)->setter(), - isolate); + Handle<AccessorPair> accessors = Handle<AccessorPair>::cast(maybe_accessors); + Handle<Object> accessor = broker->CanonicalPersistentHandle( + access_mode == AccessMode::kLoad ? accessors->getter() + : accessors->setter()); + + ObjectData* data = broker->TryGetOrCreateData(accessor); + if (data == nullptr) return PropertyAccessInfo::Invalid(zone); + if (!accessor->IsJSFunction()) { - CallOptimization optimization(isolate, accessor); + CallOptimization optimization(broker->local_isolate_or_isolate(), accessor); if (!optimization.is_simple_api_call() || optimization.IsCrossContextLazyAccessorPair( *broker->target_native_context().object(), *map)) { @@ -565,7 +580,9 @@ PropertyAccessInfo AccessorAccessInfoHelper( } CallOptimization::HolderLookup lookup; - holder = optimization.LookupHolderOfExpectedType(receiver_map, &lookup); + holder = broker->CanonicalPersistentHandle( + optimization.LookupHolderOfExpectedType( + broker->local_isolate_or_isolate(), receiver_map, &lookup)); if (lookup == CallOptimization::kHolderNotFound) { return PropertyAccessInfo::Invalid(zone); } @@ -574,9 +591,11 @@ PropertyAccessInfo AccessorAccessInfoHelper( DCHECK_IMPLIES(lookup == CallOptimization::kHolderFound, !holder.is_null()); } if (access_mode == AccessMode::kLoad) { - Handle<Name> cached_property_name; - if (FunctionTemplateInfo::TryGetCachedPropertyName(isolate, accessor) - .ToHandle(&cached_property_name)) { + base::Optional<Name> maybe_cached_property_name = + FunctionTemplateInfo::TryGetCachedPropertyName(isolate, *accessor); + if (maybe_cached_property_name.has_value()) { + Handle<Name> cached_property_name = + broker->CanonicalPersistentHandle(maybe_cached_property_name.value()); PropertyAccessInfo access_info = ai_factory->ComputePropertyAccessInfo( map, cached_property_name, access_mode); if (!access_info.IsInvalid()) return access_info; @@ -598,12 +617,13 @@ PropertyAccessInfo AccessInfoFactory::ComputeAccessorDescriptorAccessInfo( MaybeHandle<JSObject> holder, InternalIndex descriptor, AccessMode access_mode) const { DCHECK(descriptor.is_found()); - Handle<DescriptorArray> descriptors( - holder_map->instance_descriptors(kRelaxedLoad), isolate()); + Handle<DescriptorArray> descriptors = broker()->CanonicalPersistentHandle( + holder_map->instance_descriptors(kRelaxedLoad)); SLOW_DCHECK(descriptor == descriptors->Search(*name, *holder_map)); auto get_accessors = [&]() { - return handle(descriptors->GetStrongValue(descriptor), isolate()); + return broker()->CanonicalPersistentHandle( + descriptors->GetStrongValue(descriptor)); }; return AccessorAccessInfoHelper(isolate(), zone(), broker(), this, receiver_map, name, holder_map, holder, @@ -620,7 +640,7 @@ PropertyAccessInfo AccessInfoFactory::ComputeDictionaryProtoAccessInfo( // We can only inline accesses to constant properties. if (details.constness() != PropertyConstness::kConst) { - return PropertyAccessInfo::Invalid(zone()); + return Invalid(); } if (details.kind() == PropertyKind::kData) { @@ -631,7 +651,7 @@ PropertyAccessInfo AccessInfoFactory::ComputeDictionaryProtoAccessInfo( auto get_accessors = [&]() { return JSObject::DictionaryPropertyAt(holder, dictionary_index); }; - Handle<Map> holder_map = handle(holder->map(), isolate()); + Handle<Map> holder_map = broker()->CanonicalPersistentHandle(holder->map()); return AccessorAccessInfoHelper(isolate(), zone(), broker(), this, receiver_map, name, holder_map, holder, access_mode, get_accessors); @@ -699,17 +719,16 @@ PropertyAccessInfo AccessInfoFactory::ComputePropertyAccessInfo( Handle<Map> map, Handle<Name> name, AccessMode access_mode) const { CHECK(name->IsUniqueName()); - base::SharedMutexGuardIf<base::kShared> mutex_guard( - isolate()->map_updater_access(), should_lock_mutex()); - MapUpdaterMutexDepthScope mumd_scope(this); + JSHeapBroker::MapUpdaterGuardIfNeeded mumd_scope( + broker(), isolate()->map_updater_access()); if (access_mode == AccessMode::kHas && !map->IsJSReceiverMap()) { - return PropertyAccessInfo::Invalid(zone()); + return Invalid(); } // Check if it is safe to inline property access for the {map}. if (!CanInlinePropertyAccess(map, access_mode)) { - return PropertyAccessInfo::Invalid(zone()); + return Invalid(); } // We support fast inline cases for certain JSObject getters. @@ -729,7 +748,7 @@ PropertyAccessInfo AccessInfoFactory::ComputePropertyAccessInfo( PropertyDetails details = PropertyDetails::Empty(); InternalIndex index = InternalIndex::NotFound(); if (!TryLoadPropertyDetails(map, holder, name, &index, &details)) { - return PropertyAccessInfo::Invalid(zone()); + return Invalid(); } if (index.is_found()) { @@ -739,7 +758,7 @@ PropertyAccessInfo AccessInfoFactory::ComputePropertyAccessInfo( // Don't bother optimizing stores to read-only properties. if (details.IsReadOnly()) { - return PropertyAccessInfo::Invalid(zone()); + return Invalid(); } if (details.kind() == kData && !holder.is_null()) { // This is a store to a property not found on the receiver but on a @@ -758,7 +777,7 @@ PropertyAccessInfo AccessInfoFactory::ComputePropertyAccessInfo( // reaching a dictionary mode prototype holding the property . Due to // this only being an intermediate state, we don't stupport these kind // of heterogenous prototype chains. - return PropertyAccessInfo::Invalid(zone()); + return Invalid(); } // TryLoadPropertyDetails only succeeds if we know the holder. @@ -781,7 +800,7 @@ PropertyAccessInfo AccessInfoFactory::ComputePropertyAccessInfo( // due to the complications of checking dictionary mode prototypes for // modification, we don't attempt to support dictionary mode prototypes // occuring before a fast mode holder on the chain. - return PropertyAccessInfo::Invalid(zone()); + return Invalid(); } if (details.location() == kField) { if (details.kind() == kData) { @@ -790,7 +809,7 @@ PropertyAccessInfo AccessInfoFactory::ComputePropertyAccessInfo( } else { DCHECK_EQ(kAccessor, details.kind()); // TODO(turbofan): Add support for general accessors? - return PropertyAccessInfo::Invalid(zone()); + return Invalid(); } } else { DCHECK_EQ(kDescriptor, details.location()); @@ -806,9 +825,17 @@ PropertyAccessInfo AccessInfoFactory::ComputePropertyAccessInfo( // Don't search on the prototype chain for special indices in case of // integer indexed exotic objects (see ES6 section 9.4.5). - if (map->IsJSTypedArrayMap() && name->IsString() && - IsSpecialIndex(String::cast(*name))) { - return PropertyAccessInfo::Invalid(zone()); + if (map->IsJSTypedArrayMap() && name->IsString()) { + if (broker()->IsMainThread()) { + if (IsSpecialIndex(String::cast(*name))) { + return Invalid(); + } + } else { + // TODO(jgruber): We are being conservative here since we can't access + // string contents from background threads. Should that become possible + // in the future, remove this bailout. + return Invalid(); + } } // Don't search on the prototype when storing in literals. @@ -818,7 +845,7 @@ PropertyAccessInfo AccessInfoFactory::ComputePropertyAccessInfo( // Don't lookup private symbols on the prototype chain. if (name->IsPrivate()) { - return PropertyAccessInfo::Invalid(zone()); + return Invalid(); } if (V8_DICT_PROPERTY_CONST_TRACKING_BOOL && !holder.is_null()) { @@ -833,21 +860,26 @@ PropertyAccessInfo AccessInfoFactory::ComputePropertyAccessInfo( } // Walk up the prototype chain. - MapRef(broker(), map).SerializePrototype(); + base::Optional<MapRef> map_ref = TryMakeRef(broker(), map); + if (!map_ref.has_value()) return Invalid(); + if (!map_ref->TrySerializePrototype()) return Invalid(); + // Acquire synchronously the map's prototype's map to guarantee that every // time we use it, we use the same Map. - Handle<Map> map_prototype_map(map->prototype().synchronized_map(), - isolate()); + Handle<Map> map_prototype_map = + broker()->CanonicalPersistentHandle(map->prototype().map(kAcquireLoad)); if (!map_prototype_map->IsJSObjectMap()) { // Perform the implicit ToObject for primitives here. // Implemented according to ES6 section 7.3.2 GetV (V, P). Handle<JSFunction> constructor; - if (Map::GetConstructorFunction( - map, broker()->target_native_context().object()) - .ToHandle(&constructor)) { - map = handle(constructor->initial_map(), isolate()); - map_prototype_map = - handle(map->prototype().synchronized_map(), isolate()); + base::Optional<JSFunction> maybe_constructor = + Map::GetConstructorFunction( + *map, *broker()->target_native_context().object()); + if (maybe_constructor.has_value()) { + map = broker()->CanonicalPersistentHandle( + maybe_constructor->initial_map()); + map_prototype_map = broker()->CanonicalPersistentHandle( + map->prototype().map(kAcquireLoad)); DCHECK(map_prototype_map->IsJSObjectMap()); } else if (map->prototype().IsNull()) { if (dictionary_prototype_on_chain) { @@ -856,7 +888,7 @@ PropertyAccessInfo AccessInfoFactory::ComputePropertyAccessInfo( // with dictionary mode prototypes on the chain, either. This is again // just due to how we currently deal with dependencies for dictionary // properties during finalization. - return PropertyAccessInfo::Invalid(zone()); + return Invalid(); } // Store to property not found on the receiver or any prototype, we need @@ -870,16 +902,17 @@ PropertyAccessInfo AccessInfoFactory::ComputePropertyAccessInfo( // Implemented according to ES6 section 9.1.8 [[Get]] (P, Receiver) return PropertyAccessInfo::NotFound(zone(), receiver_map, holder); } else { - return PropertyAccessInfo::Invalid(zone()); + return Invalid(); } } - holder = handle(JSObject::cast(map->prototype()), isolate()); + holder = + broker()->CanonicalPersistentHandle(JSObject::cast(map->prototype())); map = map_prototype_map; CHECK(!map->is_deprecated()); if (!CanInlinePropertyAccess(map, access_mode)) { - return PropertyAccessInfo::Invalid(zone()); + return Invalid(); } // Successful lookup on prototype chain needs to guarantee that all the @@ -901,7 +934,7 @@ PropertyAccessInfo AccessInfoFactory::FinalizePropertyAccessInfosAsOne( return result; } } - return PropertyAccessInfo::Invalid(zone()); + return Invalid(); } void AccessInfoFactory::ComputePropertyAccessInfos( @@ -982,23 +1015,26 @@ base::Optional<ElementAccessInfo> AccessInfoFactory::ConsolidateElementLoad( if (feedback.transition_groups().empty()) return base::nullopt; DCHECK(!feedback.transition_groups().front().empty()); - MapRef first_map(broker(), feedback.transition_groups().front().front()); - InstanceType instance_type = first_map.instance_type(); - ElementsKind elements_kind = first_map.elements_kind(); + Handle<Map> first_map = feedback.transition_groups().front().front(); + base::Optional<MapRef> first_map_ref = TryMakeRef(broker(), first_map); + if (!first_map_ref.has_value()) return {}; + InstanceType instance_type = first_map_ref->instance_type(); + ElementsKind elements_kind = first_map_ref->elements_kind(); ZoneVector<Handle<Map>> maps(zone()); for (auto const& group : feedback.transition_groups()) { for (Handle<Map> map_handle : group) { - MapRef map(broker(), map_handle); - if (map.instance_type() != instance_type || - !CanInlineElementAccess(map)) { + base::Optional<MapRef> map = TryMakeRef(broker(), map_handle); + if (!map.has_value()) return {}; + if (map->instance_type() != instance_type || + !CanInlineElementAccess(*map)) { return base::nullopt; } - if (!GeneralizeElementsKind(elements_kind, map.elements_kind()) + if (!GeneralizeElementsKind(elements_kind, map->elements_kind()) .To(&elements_kind)) { return base::nullopt; } - maps.push_back(map.object()); + maps.push_back(map->object()); } } @@ -1012,7 +1048,7 @@ PropertyAccessInfo AccessInfoFactory::LookupSpecialFieldAccessor( if (Name::Equals(isolate(), name, isolate()->factory()->length_string())) { return PropertyAccessInfo::StringLength(zone(), map); } - return PropertyAccessInfo::Invalid(zone()); + return Invalid(); } // Check for special JSObject field accessors. FieldIndex field_index; @@ -1041,7 +1077,7 @@ PropertyAccessInfo AccessInfoFactory::LookupSpecialFieldAccessor( return PropertyAccessInfo::DataField(zone(), map, {{}, zone()}, field_index, field_representation, field_type, map); } - return PropertyAccessInfo::Invalid(zone()); + return Invalid(); } PropertyAccessInfo AccessInfoFactory::LookupTransition( @@ -1051,21 +1087,21 @@ PropertyAccessInfo AccessInfoFactory::LookupTransition( TransitionsAccessor(isolate(), map, broker()->is_concurrent_inlining()) .SearchTransition(*name, kData, NONE); if (transition.is_null()) { - return PropertyAccessInfo::Invalid(zone()); + return Invalid(); } - Handle<Map> transition_map(transition, isolate()); + Handle<Map> transition_map = broker()->CanonicalPersistentHandle(transition); InternalIndex const number = transition_map->LastAdded(); - Handle<DescriptorArray> descriptors( - transition_map->instance_descriptors(kAcquireLoad), isolate()); + Handle<DescriptorArray> descriptors = broker()->CanonicalPersistentHandle( + transition_map->instance_descriptors(kAcquireLoad)); PropertyDetails const details = descriptors->GetDetails(number); // Don't bother optimizing stores to read-only properties. if (details.IsReadOnly()) { - return PropertyAccessInfo::Invalid(zone()); + return Invalid(); } // TODO(bmeurer): Handle transition to data constant? if (details.location() != kField) { - return PropertyAccessInfo::Invalid(zone()); + return Invalid(); } int const index = details.field_index(); Representation details_representation = details.representation(); @@ -1073,51 +1109,63 @@ PropertyAccessInfo AccessInfoFactory::LookupTransition( details_representation); Type field_type = Type::NonInternal(); MaybeHandle<Map> field_map; - MapRef transition_map_ref(broker(), transition_map); + + base::Optional<MapRef> transition_map_ref = + TryMakeRef(broker(), transition_map); + if (!transition_map_ref.has_value()) return Invalid(); + ZoneVector<CompilationDependency const*> unrecorded_dependencies(zone()); if (details_representation.IsSmi()) { field_type = Type::SignedSmall(); - transition_map_ref.SerializeOwnDescriptor(number); + if (!transition_map_ref->TrySerializeOwnDescriptor(number)) { + return Invalid(); + } unrecorded_dependencies.push_back( dependencies()->FieldRepresentationDependencyOffTheRecord( - transition_map_ref, number)); + *transition_map_ref, number)); } else if (details_representation.IsDouble()) { field_type = type_cache_->kFloat64; - transition_map_ref.SerializeOwnDescriptor(number); + if (!transition_map_ref->TrySerializeOwnDescriptor(number)) { + return Invalid(); + } unrecorded_dependencies.push_back( dependencies()->FieldRepresentationDependencyOffTheRecord( - transition_map_ref, number)); + *transition_map_ref, number)); } else if (details_representation.IsHeapObject()) { // Extract the field type from the property details (make sure its // representation is TaggedPointer to reflect the heap object case). - Handle<FieldType> descriptors_field_type(descriptors->GetFieldType(number), - isolate()); + Handle<FieldType> descriptors_field_type = + broker()->CanonicalPersistentHandle(descriptors->GetFieldType(number)); if (descriptors_field_type->IsNone()) { // Store is not safe if the field type was cleared. - return PropertyAccessInfo::Invalid(zone()); + return Invalid(); + } + if (!transition_map_ref->TrySerializeOwnDescriptor(number)) { + return Invalid(); } - transition_map_ref.SerializeOwnDescriptor(number); unrecorded_dependencies.push_back( dependencies()->FieldRepresentationDependencyOffTheRecord( - transition_map_ref, number)); + *transition_map_ref, number)); if (descriptors_field_type->IsClass()) { unrecorded_dependencies.push_back( - dependencies()->FieldTypeDependencyOffTheRecord(transition_map_ref, + dependencies()->FieldTypeDependencyOffTheRecord(*transition_map_ref, number)); // Remember the field map, and try to infer a useful type. - Handle<Map> map(descriptors_field_type->AsClass(), isolate()); - field_type = Type::For(MapRef(broker(), map)); - field_map = MaybeHandle<Map>(map); + Handle<Map> map = broker()->CanonicalPersistentHandle( + descriptors_field_type->AsClass()); + base::Optional<MapRef> map_ref = TryMakeRef(broker(), map); + if (!map_ref.has_value()) return Invalid(); + field_type = Type::For(*map_ref); + field_map = map; } } unrecorded_dependencies.push_back( - dependencies()->TransitionDependencyOffTheRecord( - MapRef(broker(), transition_map))); - transition_map_ref.SerializeBackPointer(); // For BuildPropertyStore. + dependencies()->TransitionDependencyOffTheRecord(*transition_map_ref)); + transition_map_ref->SerializeBackPointer(); // For BuildPropertyStore. // Transitioning stores *may* store to const fields. The resulting // DataConstant access infos can be distinguished from later, i.e. redundant, // stores to the same constant field by the presence of a transition map. - switch (dependencies()->DependOnFieldConstness(transition_map_ref, number)) { + switch (dependencies()->DependOnFieldConstness(*transition_map_ref, number)) { case PropertyConstness::kMutable: return PropertyAccessInfo::DataField( zone(), map, std::move(unrecorded_dependencies), field_index, diff --git a/deps/v8/src/compiler/access-info.h b/deps/v8/src/compiler/access-info.h index b430dacd3a..93215ea0a0 100644 --- a/deps/v8/src/compiler/access-info.h +++ b/deps/v8/src/compiler/access-info.h @@ -305,6 +305,10 @@ class AccessInfoFactory final { MaybeHandle<JSObject> holder, InternalIndex descriptor, AccessMode access_mode) const; + PropertyAccessInfo Invalid() const { + return PropertyAccessInfo::Invalid(zone()); + } + void MergePropertyAccessInfos(ZoneVector<PropertyAccessInfo> infos, AccessMode access_mode, ZoneVector<PropertyAccessInfo>* result) const; @@ -313,28 +317,6 @@ class AccessInfoFactory final { Handle<Name> name, InternalIndex* index_out, PropertyDetails* details_out) const; - bool should_lock_mutex() const { return map_updater_mutex_depth_ == 0; } - - class MapUpdaterMutexDepthScope final { - public: - explicit MapUpdaterMutexDepthScope(const AccessInfoFactory* ptr) - : ptr_(ptr), - initial_map_updater_mutex_depth_(ptr->map_updater_mutex_depth_) { - ptr_->map_updater_mutex_depth_++; - } - - ~MapUpdaterMutexDepthScope() { - ptr_->map_updater_mutex_depth_--; - DCHECK_EQ(initial_map_updater_mutex_depth_, - ptr_->map_updater_mutex_depth_); - USE(initial_map_updater_mutex_depth_); - } - - private: - const AccessInfoFactory* const ptr_; - const int initial_map_updater_mutex_depth_; - }; - CompilationDependencies* dependencies() const { return dependencies_; } JSHeapBroker* broker() const { return broker_; } Isolate* isolate() const; @@ -345,12 +327,6 @@ class AccessInfoFactory final { TypeCache const* const type_cache_; Zone* const zone_; - // ComputePropertyAccessInfo can be called recursively, thus we need to - // emulate a recursive mutex. This field holds the locking depth, i.e. how - // many times the mutex has been recursively locked. Only the outermost - // locker actually locks underneath. - mutable int map_updater_mutex_depth_ = 0; - // TODO(nicohartmann@): Move to public AccessInfoFactory(const AccessInfoFactory&) = delete; AccessInfoFactory& operator=(const AccessInfoFactory&) = delete; diff --git a/deps/v8/src/compiler/add-type-assertions-reducer.cc b/deps/v8/src/compiler/add-type-assertions-reducer.cc index 59d2fe6820..d555d518d2 100644 --- a/deps/v8/src/compiler/add-type-assertions-reducer.cc +++ b/deps/v8/src/compiler/add-type-assertions-reducer.cc @@ -27,9 +27,7 @@ Reduction AddTypeAssertionsReducer::Reduce(Node* node) { visited_.Set(node, true); Type type = NodeProperties::GetType(node); - if (!type.IsRange()) { - return NoChange(); - } + if (!type.CanBeAsserted()) return NoChange(); Node* assertion = graph()->NewNode(simplified()->AssertType(type), node); NodeProperties::SetType(assertion, type); diff --git a/deps/v8/src/compiler/backend/arm/code-generator-arm.cc b/deps/v8/src/compiler/backend/arm/code-generator-arm.cc index dba31fe0bc..35d8cb7361 100644 --- a/deps/v8/src/compiler/backend/arm/code-generator-arm.cc +++ b/deps/v8/src/compiler/backend/arm/code-generator-arm.cc @@ -194,16 +194,14 @@ class OutOfLineRecordWrite final : public OutOfLineCode { } void Generate() final { - if (mode_ > RecordWriteMode::kValueIsPointer) { - __ JumpIfSmi(value_, exit()); - } __ CheckPageFlag(value_, MemoryChunk::kPointersToHereAreInterestingMask, eq, exit()); RememberedSetAction const remembered_set_action = - mode_ > RecordWriteMode::kValueIsMap ? EMIT_REMEMBERED_SET - : OMIT_REMEMBERED_SET; - SaveFPRegsMode const save_fp_mode = - frame()->DidAllocateDoubleRegisters() ? kSaveFPRegs : kDontSaveFPRegs; + mode_ > RecordWriteMode::kValueIsMap ? RememberedSetAction::kEmit + : RememberedSetAction::kOmit; + SaveFPRegsMode const save_fp_mode = frame()->DidAllocateDoubleRegisters() + ? SaveFPRegsMode::kSave + : SaveFPRegsMode::kIgnore; if (must_save_lr_) { // We need to save and restore lr if the frame was elided. __ Push(lr); @@ -828,7 +826,8 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( case kArchSaveCallerRegisters: { fp_mode_ = static_cast<SaveFPRegsMode>(MiscField::decode(instr->opcode())); - DCHECK(fp_mode_ == kDontSaveFPRegs || fp_mode_ == kSaveFPRegs); + DCHECK(fp_mode_ == SaveFPRegsMode::kIgnore || + fp_mode_ == SaveFPRegsMode::kSave); // kReturnRegister0 should have been saved before entering the stub. int bytes = __ PushCallerSaved(fp_mode_, kReturnRegister0); DCHECK(IsAligned(bytes, kSystemPointerSize)); @@ -841,7 +840,8 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( case kArchRestoreCallerRegisters: { DCHECK(fp_mode_ == static_cast<SaveFPRegsMode>(MiscField::decode(instr->opcode()))); - DCHECK(fp_mode_ == kDontSaveFPRegs || fp_mode_ == kSaveFPRegs); + DCHECK(fp_mode_ == SaveFPRegsMode::kIgnore || + fp_mode_ == SaveFPRegsMode::kSave); // Don't overwrite the returned value. int bytes = __ PopCallerSaved(fp_mode_, kReturnRegister0); frame_access_state()->IncreaseSPDelta(-(bytes / kSystemPointerSize)); @@ -999,6 +999,9 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( auto ool = zone()->New<OutOfLineRecordWrite>( this, object, offset, value, mode, DetermineStubCallMode(), &unwinding_info_writer_); + if (mode > RecordWriteMode::kValueIsPointer) { + __ JumpIfSmi(value, ool->exit()); + } __ CheckPageFlag(object, MemoryChunk::kPointersFromHereAreInterestingMask, ne, ool->entry()); __ bind(ool->exit()); @@ -3576,7 +3579,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( #undef ASSEMBLE_SIMD_SHIFT_RIGHT } return kSuccess; -} // NOLINT(readability/fn_size) +} // Assembles branches after an instruction. void CodeGenerator::AssembleArchBranch(Instruction* instr, BranchInfo* branch) { @@ -3793,7 +3796,7 @@ void CodeGenerator::AssembleConstructFrame() { // frame is still on the stack. Optimized code uses OSR values directly from // the unoptimized frame. Thus, all that needs to be done is to allocate the // remaining stack slots. - if (FLAG_code_comments) __ RecordComment("-- OSR entrypoint --"); + __ RecordComment("-- OSR entrypoint --"); osr_pc_offset_ = __ pc_offset(); required_slots -= osr_helper()->UnoptimizedFrameSlots(); ResetSpeculationPoison(); @@ -3906,7 +3909,7 @@ void CodeGenerator::AssembleReturn(InstructionOperand* additional_pop_count) { if (parameter_slots != 0) { if (additional_pop_count->IsImmediate()) { DCHECK_EQ(g.ToConstant(additional_pop_count).ToInt32(), 0); - } else if (__ emit_debug_code()) { + } else if (FLAG_debug_code) { __ cmp(g.ToRegister(additional_pop_count), Operand(0)); __ Assert(eq, AbortReason::kUnexpectedAdditionalPopValue); } diff --git a/deps/v8/src/compiler/backend/arm/instruction-selector-arm.cc b/deps/v8/src/compiler/backend/arm/instruction-selector-arm.cc index d28ada322d..bb17d45253 100644 --- a/deps/v8/src/compiler/backend/arm/instruction-selector-arm.cc +++ b/deps/v8/src/compiler/backend/arm/instruction-selector-arm.cc @@ -626,6 +626,7 @@ void InstructionSelector::VisitLoad(Node* node) { case MachineRepresentation::kCompressedPointer: // Fall through. case MachineRepresentation::kCompressed: // Fall through. case MachineRepresentation::kWord64: // Fall through. + case MachineRepresentation::kMapWord: // Fall through. case MachineRepresentation::kNone: UNREACHABLE(); } @@ -709,6 +710,7 @@ void InstructionSelector::VisitStore(Node* node) { case MachineRepresentation::kCompressedPointer: // Fall through. case MachineRepresentation::kCompressed: // Fall through. case MachineRepresentation::kWord64: // Fall through. + case MachineRepresentation::kMapWord: // Fall through. case MachineRepresentation::kNone: UNREACHABLE(); } @@ -3170,6 +3172,12 @@ void InstructionSelector::VisitF64x2PromoteLowF32x4(Node* node) { g.UseFixed(node->InputAt(0), q0)); } +void InstructionSelector::AddOutputToSelectContinuation(OperandGenerator* g, + int first_input_index, + Node* node) { + UNREACHABLE(); +} + // static MachineOperatorBuilder::Flags InstructionSelector::SupportedMachineOperatorFlags() { diff --git a/deps/v8/src/compiler/backend/arm64/code-generator-arm64.cc b/deps/v8/src/compiler/backend/arm64/code-generator-arm64.cc index 91b8f1f04b..dfbdf4d093 100644 --- a/deps/v8/src/compiler/backend/arm64/code-generator-arm64.cc +++ b/deps/v8/src/compiler/backend/arm64/code-generator-arm64.cc @@ -282,19 +282,17 @@ class OutOfLineRecordWrite final : public OutOfLineCode { } void Generate() final { - if (mode_ > RecordWriteMode::kValueIsPointer) { - __ JumpIfSmi(value_, exit()); - } if (COMPRESS_POINTERS_BOOL) { __ DecompressTaggedPointer(value_, value_); } __ CheckPageFlag(value_, MemoryChunk::kPointersToHereAreInterestingMask, ne, exit()); RememberedSetAction const remembered_set_action = - mode_ > RecordWriteMode::kValueIsMap ? EMIT_REMEMBERED_SET - : OMIT_REMEMBERED_SET; - SaveFPRegsMode const save_fp_mode = - frame()->DidAllocateDoubleRegisters() ? kSaveFPRegs : kDontSaveFPRegs; + mode_ > RecordWriteMode::kValueIsMap ? RememberedSetAction::kEmit + : RememberedSetAction::kOmit; + SaveFPRegsMode const save_fp_mode = frame()->DidAllocateDoubleRegisters() + ? SaveFPRegsMode::kSave + : SaveFPRegsMode::kIgnore; if (must_save_lr_) { // We need to save and restore lr if the frame was elided. __ Push<TurboAssembler::kSignLR>(lr, padreg); @@ -859,7 +857,8 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( case kArchSaveCallerRegisters: { fp_mode_ = static_cast<SaveFPRegsMode>(MiscField::decode(instr->opcode())); - DCHECK(fp_mode_ == kDontSaveFPRegs || fp_mode_ == kSaveFPRegs); + DCHECK(fp_mode_ == SaveFPRegsMode::kIgnore || + fp_mode_ == SaveFPRegsMode::kSave); // kReturnRegister0 should have been saved before entering the stub. int bytes = __ PushCallerSaved(fp_mode_, kReturnRegister0); DCHECK(IsAligned(bytes, kSystemPointerSize)); @@ -872,7 +871,8 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( case kArchRestoreCallerRegisters: { DCHECK(fp_mode_ == static_cast<SaveFPRegsMode>(MiscField::decode(instr->opcode()))); - DCHECK(fp_mode_ == kDontSaveFPRegs || fp_mode_ == kSaveFPRegs); + DCHECK(fp_mode_ == SaveFPRegsMode::kIgnore || + fp_mode_ == SaveFPRegsMode::kSave); // Don't overwrite the returned value. int bytes = __ PopCallerSaved(fp_mode_, kReturnRegister0); frame_access_state()->IncreaseSPDelta(-(bytes / kSystemPointerSize)); @@ -1026,6 +1026,9 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( this, object, offset, value, mode, DetermineStubCallMode(), &unwinding_info_writer_); __ StoreTaggedField(value, MemOperand(object, offset)); + if (mode > RecordWriteMode::kValueIsPointer) { + __ JumpIfSmi(value, ool->exit()); + } __ CheckPageFlag(object, MemoryChunk::kPointersFromHereAreInterestingMask, eq, ool->entry()); __ Bind(ool->exit()); @@ -2862,7 +2865,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( SIMD_REDUCE_OP_CASE(kArm64I8x16AllTrue, Uminv, kFormatB, 16B); } return kSuccess; -} // NOLINT(readability/fn_size) +} #undef SIMD_UNOP_CASE #undef SIMD_BINOP_CASE @@ -3106,7 +3109,7 @@ void CodeGenerator::AssembleConstructFrame() { // unoptimized frame is still on the stack. Optimized code uses OSR values // directly from the unoptimized frame. Thus, all that needs to be done is // to allocate the remaining stack slots. - if (FLAG_code_comments) __ RecordComment("-- OSR entrypoint --"); + __ RecordComment("-- OSR entrypoint --"); osr_pc_offset_ = __ pc_offset(); __ CodeEntry(); size_t unoptimized_frame_slots = osr_helper()->UnoptimizedFrameSlots(); @@ -3280,7 +3283,7 @@ void CodeGenerator::AssembleReturn(InstructionOperand* additional_pop_count) { if (parameter_slots != 0) { if (additional_pop_count->IsImmediate()) { DCHECK_EQ(g.ToConstant(additional_pop_count).ToInt32(), 0); - } else if (__ emit_debug_code()) { + } else if (FLAG_debug_code) { __ cmp(g.ToRegister(additional_pop_count), Operand(0)); __ Assert(eq, AbortReason::kUnexpectedAdditionalPopValue); } diff --git a/deps/v8/src/compiler/backend/arm64/instruction-selector-arm64.cc b/deps/v8/src/compiler/backend/arm64/instruction-selector-arm64.cc index d9e388b4b5..2b71b2da1a 100644 --- a/deps/v8/src/compiler/backend/arm64/instruction-selector-arm64.cc +++ b/deps/v8/src/compiler/backend/arm64/instruction-selector-arm64.cc @@ -354,6 +354,12 @@ bool TryMatchAnyExtend(Arm64OperandGenerator* g, InstructionSelector* selector, return true; } } + } else if (nm.IsChangeInt32ToInt64()) { + // Use extended register form. + *opcode |= AddressingModeField::encode(kMode_Operand2_R_SXTW); + *left_op = g->UseRegister(left_node); + *right_op = g->UseRegister(right_node->InputAt(0)); + return true; } return false; } @@ -827,6 +833,7 @@ void InstructionSelector::VisitLoad(Node* node) { opcode = kArm64LdrQ; immediate_mode = kNoImmediate; break; + case MachineRepresentation::kMapWord: // Fall through. case MachineRepresentation::kNone: UNREACHABLE(); } @@ -936,6 +943,7 @@ void InstructionSelector::VisitStore(Node* node) { opcode = kArm64StrQ; immediate_mode = kNoImmediate; break; + case MachineRepresentation::kMapWord: // Fall through. case MachineRepresentation::kNone: UNREACHABLE(); } @@ -4040,6 +4048,12 @@ void InstructionSelector::VisitI8x16Popcnt(Node* node) { VisitRR(this, code, node); } +void InstructionSelector::AddOutputToSelectContinuation(OperandGenerator* g, + int first_input_index, + Node* node) { + continuation_outputs_.push_back(g->DefineAsRegister(node)); +} + // static MachineOperatorBuilder::Flags InstructionSelector::SupportedMachineOperatorFlags() { diff --git a/deps/v8/src/compiler/backend/code-generator.cc b/deps/v8/src/compiler/backend/code-generator.cc index 3ed9eaabf1..5abe799e77 100644 --- a/deps/v8/src/compiler/backend/code-generator.cc +++ b/deps/v8/src/compiler/backend/code-generator.cc @@ -588,11 +588,6 @@ MaybeHandle<Code> CodeGenerator::FinalizeCode() { return MaybeHandle<Code>(); } - // TODO(jgruber,v8:8888): Turn this into a DCHECK once confidence is - // high that the implementation is complete. - CHECK_IMPLIES(info()->IsNativeContextIndependent(), - code->IsNativeContextIndependent(isolate())); - // Counts both compiled code and metadata. isolate()->counters()->total_compiled_code_size()->Increment( code->raw_body_size()); @@ -1400,7 +1395,8 @@ void CodeGenerator::AddTranslationForOperand(Instruction* instr, default: UNREACHABLE(); } - if (literal.object().equals(info()->closure())) { + if (literal.object().equals(info()->closure()) && + info()->function_context_specializing()) { translations_.StoreJSFrameFunction(); } else { int literal_id = DefineDeoptimizationLiteral(literal); diff --git a/deps/v8/src/compiler/backend/ia32/code-generator-ia32.cc b/deps/v8/src/compiler/backend/ia32/code-generator-ia32.cc index ac5d589790..af2eec4e8e 100644 --- a/deps/v8/src/compiler/backend/ia32/code-generator-ia32.cc +++ b/deps/v8/src/compiler/backend/ia32/code-generator-ia32.cc @@ -320,18 +320,16 @@ class OutOfLineRecordWrite final : public OutOfLineCode { } void Generate() final { - if (mode_ > RecordWriteMode::kValueIsPointer) { - __ JumpIfSmi(value_, exit()); - } __ CheckPageFlag(value_, scratch0_, MemoryChunk::kPointersToHereAreInterestingMask, zero, exit()); __ lea(scratch1_, operand_); RememberedSetAction const remembered_set_action = - mode_ > RecordWriteMode::kValueIsMap ? EMIT_REMEMBERED_SET - : OMIT_REMEMBERED_SET; - SaveFPRegsMode const save_fp_mode = - frame()->DidAllocateDoubleRegisters() ? kSaveFPRegs : kDontSaveFPRegs; + mode_ > RecordWriteMode::kValueIsMap ? RememberedSetAction::kEmit + : RememberedSetAction::kOmit; + SaveFPRegsMode const save_fp_mode = frame()->DidAllocateDoubleRegisters() + ? SaveFPRegsMode::kSave + : SaveFPRegsMode::kIgnore; if (mode_ == RecordWriteMode::kValueIsEphemeronKey) { __ CallEphemeronKeyBarrier(object_, scratch1_, save_fp_mode); #if V8_ENABLE_WEBASSEMBLY @@ -832,7 +830,8 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( case kArchSaveCallerRegisters: { fp_mode_ = static_cast<SaveFPRegsMode>(MiscField::decode(instr->opcode())); - DCHECK(fp_mode_ == kDontSaveFPRegs || fp_mode_ == kSaveFPRegs); + DCHECK(fp_mode_ == SaveFPRegsMode::kIgnore || + fp_mode_ == SaveFPRegsMode::kSave); // kReturnRegister0 should have been saved before entering the stub. int bytes = __ PushCallerSaved(fp_mode_, kReturnRegister0); DCHECK(IsAligned(bytes, kSystemPointerSize)); @@ -845,7 +844,8 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( case kArchRestoreCallerRegisters: { DCHECK(fp_mode_ == static_cast<SaveFPRegsMode>(MiscField::decode(instr->opcode()))); - DCHECK(fp_mode_ == kDontSaveFPRegs || fp_mode_ == kSaveFPRegs); + DCHECK(fp_mode_ == SaveFPRegsMode::kIgnore || + fp_mode_ == SaveFPRegsMode::kSave); // Don't overwrite the returned value. int bytes = __ PopCallerSaved(fp_mode_, kReturnRegister0); frame_access_state()->IncreaseSPDelta(-(bytes / kSystemPointerSize)); @@ -1004,6 +1004,9 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( scratch0, scratch1, mode, DetermineStubCallMode()); __ mov(operand, value); + if (mode > RecordWriteMode::kValueIsPointer) { + __ JumpIfSmi(value, ool->exit()); + } __ CheckPageFlag(object, scratch0, MemoryChunk::kPointersFromHereAreInterestingMask, not_zero, ool->entry()); @@ -1866,77 +1869,17 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( break; } case kIA32F64x2Splat: { - XMMRegister dst = i.OutputDoubleRegister(); - XMMRegister src = i.InputDoubleRegister(0); - if (CpuFeatures::IsSupported(AVX)) { - CpuFeatureScope avx_scope(tasm(), AVX); - __ vshufpd(i.OutputSimd128Register(), src, src, 0x0); - } else { - DCHECK_EQ(dst, src); - __ shufpd(dst, src, 0x0); - } - break; - } - case kSSEF64x2ExtractLane: { - DCHECK_EQ(i.OutputDoubleRegister(), i.InputDoubleRegister(0)); - XMMRegister dst = i.OutputDoubleRegister(); - int8_t lane = i.InputInt8(1); - if (lane != 0) { - DCHECK_EQ(lane, 1); - __ shufpd(dst, dst, lane); - } + __ Movddup(i.OutputSimd128Register(), i.InputDoubleRegister(0)); break; } - case kAVXF64x2ExtractLane: { - CpuFeatureScope avx_scope(tasm(), AVX); - XMMRegister dst = i.OutputDoubleRegister(); - XMMRegister src = i.InputSimd128Register(0); - int8_t lane = i.InputInt8(1); - if (lane == 0) { - if (dst != src) __ vmovapd(dst, src); - } else { - DCHECK_EQ(lane, 1); - __ vshufpd(dst, src, src, lane); - } + case kF64x2ExtractLane: { + __ F64x2ExtractLane(i.OutputDoubleRegister(), i.InputDoubleRegister(0), + i.InputUint8(1)); break; } - case kSSEF64x2ReplaceLane: { - DCHECK_EQ(i.OutputSimd128Register(), i.InputSimd128Register(0)); - CpuFeatureScope sse_scope(tasm(), SSE4_1); - XMMRegister dst = i.OutputSimd128Register(); - int8_t lane = i.InputInt8(1); - DoubleRegister rep = i.InputDoubleRegister(2); - - // insertps takes a mask which contains (high to low): - // - 2 bit specifying source float element to copy - // - 2 bit specifying destination float element to write to - // - 4 bits specifying which elements of the destination to zero - DCHECK_LT(lane, 2); - if (lane == 0) { - __ insertps(dst, rep, 0b00000000); - __ insertps(dst, rep, 0b01010000); - } else { - __ insertps(dst, rep, 0b00100000); - __ insertps(dst, rep, 0b01110000); - } - break; - } - case kAVXF64x2ReplaceLane: { - CpuFeatureScope avx_scope(tasm(), AVX); - XMMRegister dst = i.OutputSimd128Register(); - XMMRegister src = i.InputSimd128Register(0); - int8_t lane = i.InputInt8(1); - DoubleRegister rep = i.InputDoubleRegister(2); - DCHECK_NE(dst, rep); - - DCHECK_LT(lane, 2); - if (lane == 0) { - __ vinsertps(dst, src, rep, 0b00000000); - __ vinsertps(dst, dst, rep, 0b01010000); - } else { - __ vinsertps(dst, src, rep, 0b00100000); - __ vinsertps(dst, dst, rep, 0b01110000); - } + case kF64x2ReplaceLane: { + __ F64x2ReplaceLane(i.OutputSimd128Register(), i.InputSimd128Register(0), + i.InputDoubleRegister(2), i.InputInt8(1)); break; } case kIA32F64x2Sqrt: { @@ -1964,44 +1907,13 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( break; } case kIA32F64x2Min: { - Operand src1 = i.InputOperand(1); - XMMRegister dst = i.OutputSimd128Register(), - src = i.InputSimd128Register(0), - tmp = i.TempSimd128Register(0); - // The minpd instruction doesn't propagate NaNs and +0's in its first - // operand. Perform minpd in both orders, merge the resuls, and adjust. - __ Movupd(tmp, src1); - __ Minpd(tmp, tmp, src); - __ Minpd(dst, src, src1); - // propagate -0's and NaNs, which may be non-canonical. - __ Orpd(tmp, dst); - // Canonicalize NaNs by quieting and clearing the payload. - __ Cmpunordpd(dst, dst, tmp); - __ Orpd(tmp, dst); - __ Psrlq(dst, 13); - __ Andnpd(dst, tmp); + __ F64x2Min(i.OutputSimd128Register(), i.InputSimd128Register(0), + i.InputSimd128Register(1), kScratchDoubleReg); break; } case kIA32F64x2Max: { - Operand src1 = i.InputOperand(1); - XMMRegister dst = i.OutputSimd128Register(), - src = i.InputSimd128Register(0), - tmp = i.TempSimd128Register(0); - // The maxpd instruction doesn't propagate NaNs and +0's in its first - // operand. Perform maxpd in both orders, merge the resuls, and adjust. - __ Movupd(tmp, src1); - __ Maxpd(tmp, tmp, src); - __ Maxpd(dst, src, src1); - // Find discrepancies. - __ Xorpd(dst, tmp); - // Propagate NaNs, which may be non-canonical. - __ Orpd(tmp, dst); - // Propagate sign discrepancy and (subtle) quiet NaNs. - __ Subpd(tmp, tmp, dst); - // Canonicalize NaNs by clearing the payload. Sign is non-deterministic. - __ Cmpunordpd(dst, dst, tmp); - __ Psrlq(dst, 13); - __ Andnpd(dst, tmp); + __ F64x2Max(i.OutputSimd128Register(), i.InputSimd128Register(0), + i.InputSimd128Register(1), kScratchDoubleReg); break; } case kIA32F64x2Eq: { @@ -2158,10 +2070,8 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( break; } case kIA32I64x2Neg: { - XMMRegister dst = i.OutputSimd128Register(); - Operand src = i.InputOperand(0); - __ Pxor(dst, dst); - __ Psubq(dst, src); + __ I64x2Neg(i.OutputSimd128Register(), i.InputSimd128Register(0), + kScratchDoubleReg); break; } case kIA32I64x2Shl: { @@ -2181,7 +2091,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( // Set up a mask [0x80000000,0,0x80000000,0]. __ Pcmpeqb(tmp2, tmp2); - __ Psllq(tmp2, tmp2, 63); + __ Psllq(tmp2, tmp2, byte{63}); __ Psrlq(tmp2, tmp2, tmp); __ Psrlq(dst, src, tmp); @@ -2210,15 +2120,15 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( __ Movaps(tmp2, right); // Multiply high dword of each qword of left with right. - __ Psrlq(tmp1, 32); + __ Psrlq(tmp1, byte{32}); __ Pmuludq(tmp1, tmp1, right); // Multiply high dword of each qword of right with left. - __ Psrlq(tmp2, 32); + __ Psrlq(tmp2, byte{32}); __ Pmuludq(tmp2, tmp2, left); __ Paddq(tmp2, tmp2, tmp1); - __ Psllq(tmp2, tmp2, 32); + __ Psllq(tmp2, tmp2, byte{32}); __ Pmuludq(dst, left, right); __ Paddq(dst, dst, tmp2); @@ -2302,38 +2212,12 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( break; } case kIA32F32x4Splat: { - XMMRegister dst = i.OutputDoubleRegister(); - XMMRegister src = i.InputDoubleRegister(0); - if (CpuFeatures::IsSupported(AVX)) { - CpuFeatureScope avx_scope(tasm(), AVX); - __ vshufps(i.OutputSimd128Register(), src, src, 0x0); - } else { - DCHECK_EQ(dst, src); - __ shufps(dst, src, 0x0); - } + __ F32x4Splat(i.OutputSimd128Register(), i.InputDoubleRegister(0)); break; } case kIA32F32x4ExtractLane: { - XMMRegister dst = i.OutputFloatRegister(); - XMMRegister src = i.InputSimd128Register(0); - uint8_t lane = i.InputUint8(1); - DCHECK_LT(lane, 4); - // These instructions are shorter than insertps, but will leave junk in - // the top lanes of dst. - if (lane == 0) { - if (dst != src) { - __ Movaps(dst, src); - } - } else if (lane == 1) { - __ Movshdup(dst, src); - } else if (lane == 2 && dst == src) { - // Check dst == src to avoid false dependency on dst. - __ Movhlps(dst, src); - } else if (dst == src) { - __ Shufps(dst, src, src, lane); - } else { - __ Pshufd(dst, src, lane); - } + __ F32x4ExtractLane(i.OutputFloatRegister(), i.InputSimd128Register(0), + i.InputUint8(1)); break; } case kIA32Insertps: { @@ -2357,10 +2241,10 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( XMMRegister dst = i.OutputSimd128Register(); XMMRegister src = i.InputSimd128Register(0); __ Pxor(kScratchDoubleReg, kScratchDoubleReg); // zeros - __ Pblendw(kScratchDoubleReg, src, 0x55); // get lo 16 bits + __ Pblendw(kScratchDoubleReg, src, uint8_t{0x55}); // get lo 16 bits __ Psubd(dst, src, kScratchDoubleReg); // get hi 16 bits __ Cvtdq2ps(kScratchDoubleReg, kScratchDoubleReg); // convert lo exactly - __ Psrld(dst, dst, 1); // divide by 2 to get in unsigned range + __ Psrld(dst, dst, byte{1}); // divide by 2 to get in unsigned range __ Cvtdq2ps(dst, dst); // convert hi exactly __ Addps(dst, dst, dst); // double hi, exactly __ Addps(dst, dst, kScratchDoubleReg); // add hi and lo, may round. @@ -2371,11 +2255,11 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( XMMRegister src = i.InputSimd128Register(0); if (dst == src) { __ Pcmpeqd(kScratchDoubleReg, kScratchDoubleReg); - __ Psrld(kScratchDoubleReg, kScratchDoubleReg, 1); + __ Psrld(kScratchDoubleReg, kScratchDoubleReg, byte{1}); __ Andps(dst, kScratchDoubleReg); } else { __ Pcmpeqd(dst, dst); - __ Psrld(dst, dst, 1); + __ Psrld(dst, dst, byte{1}); __ Andps(dst, src); } break; @@ -2385,11 +2269,11 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( XMMRegister src = i.InputSimd128Register(0); if (dst == src) { __ Pcmpeqd(kScratchDoubleReg, kScratchDoubleReg); - __ Pslld(kScratchDoubleReg, kScratchDoubleReg, 31); + __ Pslld(kScratchDoubleReg, kScratchDoubleReg, byte{31}); __ Xorps(dst, kScratchDoubleReg); } else { __ Pcmpeqd(dst, dst); - __ Pslld(dst, dst, 31); + __ Pslld(dst, dst, byte{31}); __ Xorps(dst, src); } break; @@ -2580,7 +2464,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( __ Cvttps2dq(dst, dst); // Set top bit if >=0 is now < 0 __ Pand(kScratchDoubleReg, dst); - __ Psrad(kScratchDoubleReg, kScratchDoubleReg, 31); + __ Psrad(kScratchDoubleReg, kScratchDoubleReg, byte{31}); // Set positive overflow lanes to 0x7FFFFFFF __ Pxor(dst, kScratchDoubleReg); break; @@ -3564,15 +3448,8 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( break; } case kIA32S128Not: { - XMMRegister dst = i.OutputSimd128Register(); - XMMRegister src = i.InputSimd128Register(0); - if (dst == src) { - __ Pcmpeqd(kScratchDoubleReg, kScratchDoubleReg); - __ Pxor(dst, kScratchDoubleReg); - } else { - __ Pcmpeqd(dst, dst); - __ Pxor(dst, src); - } + __ S128Not(i.OutputSimd128Register(), i.InputSimd128Register(0), + kScratchDoubleReg); break; } case kSSES128And: { @@ -3739,7 +3616,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( DCHECK_NE(0xe4, shuffle); // A simple blend should be handled below. __ Pshufd(kScratchDoubleReg, i.InputOperand(1), shuffle); __ Pshufd(i.OutputSimd128Register(), i.InputOperand(0), shuffle); - __ Pblendw(i.OutputSimd128Register(), kScratchDoubleReg, i.InputInt8(3)); + __ Pblendw(i.OutputSimd128Register(), kScratchDoubleReg, i.InputUint8(3)); break; } case kIA32S16x8Blend: @@ -3757,7 +3634,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( __ Pshufhw(kScratchDoubleReg, kScratchDoubleReg, i.InputUint8(3)); __ Pshuflw(dst, i.InputOperand(0), i.InputUint8(2)); __ Pshufhw(dst, dst, i.InputUint8(3)); - __ Pblendw(dst, kScratchDoubleReg, i.InputInt8(4)); + __ Pblendw(dst, kScratchDoubleReg, i.InputUint8(4)); break; } case kIA32S8x16Alignr: @@ -4250,7 +4127,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( break; } return kSuccess; -} // NOLINT(readability/fn_size) +} static Condition FlagsConditionToCondition(FlagsCondition condition) { switch (condition) { @@ -4649,7 +4526,7 @@ void CodeGenerator::AssembleConstructFrame() { // frame is still on the stack. Optimized code uses OSR values directly from // the unoptimized frame. Thus, all that needs to be done is to allocate the // remaining stack slots. - if (FLAG_code_comments) __ RecordComment("-- OSR entrypoint --"); + __ RecordComment("-- OSR entrypoint --"); osr_pc_offset_ = __ pc_offset(); required_slots -= osr_helper()->UnoptimizedFrameSlots(); } @@ -4738,7 +4615,7 @@ void CodeGenerator::AssembleReturn(InstructionOperand* additional_pop_count) { if (parameter_slots != 0) { if (additional_pop_count->IsImmediate()) { DCHECK_EQ(g.ToConstant(additional_pop_count).ToInt32(), 0); - } else if (__ emit_debug_code()) { + } else if (FLAG_debug_code) { __ cmp(g.ToRegister(additional_pop_count), Immediate(0)); __ Assert(equal, AbortReason::kUnexpectedAdditionalPopValue); } diff --git a/deps/v8/src/compiler/backend/ia32/instruction-codes-ia32.h b/deps/v8/src/compiler/backend/ia32/instruction-codes-ia32.h index f06ed5156e..42af3326f3 100644 --- a/deps/v8/src/compiler/backend/ia32/instruction-codes-ia32.h +++ b/deps/v8/src/compiler/backend/ia32/instruction-codes-ia32.h @@ -117,10 +117,8 @@ namespace compiler { V(IA32Poke) \ V(IA32Peek) \ V(IA32F64x2Splat) \ - V(SSEF64x2ExtractLane) \ - V(AVXF64x2ExtractLane) \ - V(SSEF64x2ReplaceLane) \ - V(AVXF64x2ReplaceLane) \ + V(F64x2ExtractLane) \ + V(F64x2ReplaceLane) \ V(IA32F64x2Sqrt) \ V(IA32F64x2Add) \ V(IA32F64x2Sub) \ diff --git a/deps/v8/src/compiler/backend/ia32/instruction-scheduler-ia32.cc b/deps/v8/src/compiler/backend/ia32/instruction-scheduler-ia32.cc index 3d1c707359..278e7ea99b 100644 --- a/deps/v8/src/compiler/backend/ia32/instruction-scheduler-ia32.cc +++ b/deps/v8/src/compiler/backend/ia32/instruction-scheduler-ia32.cc @@ -102,10 +102,8 @@ int InstructionScheduler::GetTargetInstructionFlags( case kIA32BitcastFI: case kIA32BitcastIF: case kIA32F64x2Splat: - case kSSEF64x2ExtractLane: - case kAVXF64x2ExtractLane: - case kSSEF64x2ReplaceLane: - case kAVXF64x2ReplaceLane: + case kF64x2ExtractLane: + case kF64x2ReplaceLane: case kIA32F64x2Sqrt: case kIA32F64x2Add: case kIA32F64x2Sub: diff --git a/deps/v8/src/compiler/backend/ia32/instruction-selector-ia32.cc b/deps/v8/src/compiler/backend/ia32/instruction-selector-ia32.cc index 033a566e11..703d574eed 100644 --- a/deps/v8/src/compiler/backend/ia32/instruction-selector-ia32.cc +++ b/deps/v8/src/compiler/backend/ia32/instruction-selector-ia32.cc @@ -65,7 +65,8 @@ class IA32OperandGenerator final : public OperandGenerator { bool CanBeMemoryOperand(InstructionCode opcode, Node* node, Node* input, int effect_level) { - if (input->opcode() != IrOpcode::kLoad || + if ((input->opcode() != IrOpcode::kLoad && + input->opcode() != IrOpcode::kLoadImmutable) || !selector()->CanCover(node, input)) { return false; } @@ -551,6 +552,7 @@ void InstructionSelector::VisitLoad(Node* node) { case MachineRepresentation::kCompressed: // Fall through. case MachineRepresentation::kWord64: // Fall through. case MachineRepresentation::kNone: + case MachineRepresentation::kMapWord: UNREACHABLE(); } @@ -633,6 +635,7 @@ void InstructionSelector::VisitStore(Node* node) { case MachineRepresentation::kCompressedPointer: // Fall through. case MachineRepresentation::kCompressed: // Fall through. case MachineRepresentation::kWord64: // Fall through. + case MachineRepresentation::kMapWord: // Fall through. case MachineRepresentation::kNone: UNREACHABLE(); } @@ -816,7 +819,8 @@ void InstructionSelector::VisitStackPointerGreaterThan( Node* const value = node->InputAt(0); if (g.CanBeMemoryOperand(kIA32Cmp, node, value, effect_level)) { - DCHECK_EQ(IrOpcode::kLoad, value->opcode()); + DCHECK(value->opcode() == IrOpcode::kLoad || + value->opcode() == IrOpcode::kLoadImmutable); // GetEffectiveAddressMemoryOperand can create at most 3 inputs. static constexpr int kMaxInputCount = 3; @@ -1432,7 +1436,8 @@ void VisitCompareWithMemoryOperand(InstructionSelector* selector, InstructionCode opcode, Node* left, InstructionOperand right, FlagsContinuation* cont) { - DCHECK_EQ(IrOpcode::kLoad, left->opcode()); + DCHECK(left->opcode() == IrOpcode::kLoad || + left->opcode() == IrOpcode::kLoadImmutable); IA32OperandGenerator g(selector); size_t input_count = 0; InstructionOperand inputs[4]; @@ -1463,7 +1468,8 @@ void VisitCompare(InstructionSelector* selector, InstructionCode opcode, } MachineType MachineTypeForNarrow(Node* node, Node* hint_node) { - if (hint_node->opcode() == IrOpcode::kLoad) { + if (hint_node->opcode() == IrOpcode::kLoad || + hint_node->opcode() == IrOpcode::kLoadImmutable) { MachineType hint = LoadRepresentationOf(hint_node->op()); if (node->opcode() == IrOpcode::kInt32Constant || node->opcode() == IrOpcode::kInt64Constant) { @@ -1497,8 +1503,10 @@ MachineType MachineTypeForNarrow(Node* node, Node* hint_node) { } } } - return node->opcode() == IrOpcode::kLoad ? LoadRepresentationOf(node->op()) - : MachineType::None(); + return node->opcode() == IrOpcode::kLoad || + node->opcode() == IrOpcode::kLoadImmutable + ? LoadRepresentationOf(node->op()) + : MachineType::None(); } // Tries to match the size of the given opcode to that of the operands, if @@ -2346,30 +2354,24 @@ void InstructionSelector::VisitS128Const(Node* node) { void InstructionSelector::VisitF64x2Min(Node* node) { IA32OperandGenerator g(this); - InstructionOperand temps[] = {g.TempSimd128Register()}; - InstructionOperand operand0 = g.UseUniqueRegister(node->InputAt(0)); - InstructionOperand operand1 = g.UseUniqueRegister(node->InputAt(1)); + InstructionOperand operand0 = g.UseRegister(node->InputAt(0)); + InstructionOperand operand1 = g.UseRegister(node->InputAt(1)); if (IsSupported(AVX)) { - Emit(kIA32F64x2Min, g.DefineAsRegister(node), operand0, operand1, - arraysize(temps), temps); + Emit(kIA32F64x2Min, g.DefineAsRegister(node), operand0, operand1); } else { - Emit(kIA32F64x2Min, g.DefineSameAsFirst(node), operand0, operand1, - arraysize(temps), temps); + Emit(kIA32F64x2Min, g.DefineSameAsFirst(node), operand0, operand1); } } void InstructionSelector::VisitF64x2Max(Node* node) { IA32OperandGenerator g(this); - InstructionOperand temps[] = {g.TempSimd128Register()}; - InstructionOperand operand0 = g.UseUniqueRegister(node->InputAt(0)); - InstructionOperand operand1 = g.UseUniqueRegister(node->InputAt(1)); + InstructionOperand operand0 = g.UseRegister(node->InputAt(0)); + InstructionOperand operand1 = g.UseRegister(node->InputAt(1)); if (IsSupported(AVX)) { - Emit(kIA32F64x2Max, g.DefineAsRegister(node), operand0, operand1, - arraysize(temps), temps); + Emit(kIA32F64x2Max, g.DefineAsRegister(node), operand0, operand1); } else { - Emit(kIA32F64x2Max, g.DefineSameAsFirst(node), operand0, operand1, - arraysize(temps), temps); + Emit(kIA32F64x2Max, g.DefineSameAsFirst(node), operand0, operand1); } } @@ -2378,7 +2380,7 @@ void InstructionSelector::VisitF64x2Splat(Node* node) { } void InstructionSelector::VisitF64x2ExtractLane(Node* node) { - VisitRRISimd(this, node, kAVXF64x2ExtractLane, kSSEF64x2ExtractLane); + VisitRRISimd(this, node, kF64x2ExtractLane, kF64x2ExtractLane); } void InstructionSelector::VisitI64x2SplatI32Pair(Node* node) { @@ -2406,7 +2408,10 @@ void InstructionSelector::VisitI64x2ReplaceLaneI32Pair(Node* node) { void InstructionSelector::VisitI64x2Neg(Node* node) { IA32OperandGenerator g(this); - InstructionOperand operand0 = g.UseUnique(node->InputAt(0)); + // If AVX unsupported, make sure dst != src to avoid a move. + InstructionOperand operand0 = IsSupported(AVX) + ? g.UseRegister(node->InputAt(0)) + : g.UseUnique(node->InputAt(0)); Emit(kIA32I64x2Neg, g.DefineAsRegister(node), operand0); } @@ -2546,27 +2551,15 @@ SIMD_REPLACE_LANE_TYPE_OP(VISIT_SIMD_REPLACE_LANE) #undef VISIT_SIMD_REPLACE_LANE #undef SIMD_REPLACE_LANE_TYPE_OP -// The difference between this and VISIT_SIMD_REPLACE_LANE is that this forces -// operand2 to be UseRegister, because the codegen relies on insertps using -// registers. -// TODO(v8:9764) Remove this UseRegister requirement -#define VISIT_SIMD_REPLACE_LANE_USE_REG(Type) \ - void InstructionSelector::Visit##Type##ReplaceLane(Node* node) { \ - IA32OperandGenerator g(this); \ - InstructionOperand operand0 = g.UseRegister(node->InputAt(0)); \ - InstructionOperand operand1 = \ - g.UseImmediate(OpParameter<int32_t>(node->op())); \ - InstructionOperand operand2 = g.UseUniqueRegister(node->InputAt(1)); \ - if (IsSupported(AVX)) { \ - Emit(kAVX##Type##ReplaceLane, g.DefineAsRegister(node), operand0, \ - operand1, operand2); \ - } else { \ - Emit(kSSE##Type##ReplaceLane, g.DefineSameAsFirst(node), operand0, \ - operand1, operand2); \ - } \ - } -VISIT_SIMD_REPLACE_LANE_USE_REG(F64x2) -#undef VISIT_SIMD_REPLACE_LANE_USE_REG +void InstructionSelector::VisitF64x2ReplaceLane(Node* node) { + IA32OperandGenerator g(this); + int32_t lane = OpParameter<int32_t>(node->op()); + // When no-AVX, define dst == src to save a move. + InstructionOperand dst = + IsSupported(AVX) ? g.DefineAsRegister(node) : g.DefineSameAsFirst(node); + Emit(kF64x2ReplaceLane, dst, g.UseRegister(node->InputAt(0)), + g.UseImmediate(lane), g.UseRegister(node->InputAt(1))); +} #define VISIT_SIMD_SHIFT_UNIFIED_SSE_AVX(Opcode) \ void InstructionSelector::Visit##Opcode(Node* node) { \ @@ -3159,6 +3152,12 @@ void InstructionSelector::VisitI64x2Abs(Node* node) { VisitRRSimd(this, node, kIA32I64x2Abs, kIA32I64x2Abs); } +void InstructionSelector::AddOutputToSelectContinuation(OperandGenerator* g, + int first_input_index, + Node* node) { + UNREACHABLE(); +} + // static MachineOperatorBuilder::Flags InstructionSelector::SupportedMachineOperatorFlags() { diff --git a/deps/v8/src/compiler/backend/instruction-scheduler.h b/deps/v8/src/compiler/backend/instruction-scheduler.h index a7c1cc5246..c22190bd50 100644 --- a/deps/v8/src/compiler/backend/instruction-scheduler.h +++ b/deps/v8/src/compiler/backend/instruction-scheduler.h @@ -6,15 +6,11 @@ #define V8_COMPILER_BACKEND_INSTRUCTION_SCHEDULER_H_ #include "src/base/optional.h" +#include "src/base/utils/random-number-generator.h" #include "src/compiler/backend/instruction.h" #include "src/zone/zone-containers.h" namespace v8 { - -namespace base { -class RandomNumberGenerator; -} // namespace base - namespace internal { namespace compiler { diff --git a/deps/v8/src/compiler/backend/instruction-selector-impl.h b/deps/v8/src/compiler/backend/instruction-selector-impl.h index 7e1f183fb7..539ba5dc25 100644 --- a/deps/v8/src/compiler/backend/instruction-selector-impl.h +++ b/deps/v8/src/compiler/backend/instruction-selector-impl.h @@ -85,10 +85,12 @@ class OperandGenerator { GetVReg(node))); } + InstructionOperand DefineSameAsInput(Node* node, int input_index) { + return Define(node, UnallocatedOperand(GetVReg(node), input_index)); + } + InstructionOperand DefineSameAsFirst(Node* node) { - return Define(node, - UnallocatedOperand(UnallocatedOperand::SAME_AS_FIRST_INPUT, - GetVReg(node))); + return DefineSameAsInput(node, 0); } InstructionOperand DefineAsFixed(Node* node, Register reg) { @@ -224,7 +226,7 @@ class OperandGenerator { int AllocateVirtualRegister() { return sequence()->NextVirtualRegister(); } InstructionOperand DefineSameAsFirstForVreg(int vreg) { - return UnallocatedOperand(UnallocatedOperand::SAME_AS_FIRST_INPUT, vreg); + return UnallocatedOperand(UnallocatedOperand::SAME_AS_INPUT, vreg); } InstructionOperand DefineAsRegistertForVreg(int vreg) { diff --git a/deps/v8/src/compiler/backend/instruction-selector.cc b/deps/v8/src/compiler/backend/instruction-selector.cc index 5638ff1241..c806ad8bbe 100644 --- a/deps/v8/src/compiler/backend/instruction-selector.cc +++ b/deps/v8/src/compiler/backend/instruction-selector.cc @@ -9,6 +9,7 @@ #include "src/base/iterator.h" #include "src/base/platform/wrappers.h" #include "src/codegen/assembler-inl.h" +#include "src/codegen/interface-descriptors-inl.h" #include "src/codegen/tick-counter.h" #include "src/compiler/backend/instruction-selector-impl.h" #include "src/compiler/compiler-source-position-table.h" @@ -802,11 +803,6 @@ size_t InstructionSelector::AddInputsToFrameStateDescriptor( } Instruction* InstructionSelector::EmitWithContinuation( - InstructionCode opcode, FlagsContinuation* cont) { - return EmitWithContinuation(opcode, 0, nullptr, 0, nullptr, cont); -} - -Instruction* InstructionSelector::EmitWithContinuation( InstructionCode opcode, InstructionOperand a, FlagsContinuation* cont) { return EmitWithContinuation(opcode, 0, nullptr, 1, &a, cont); } @@ -880,8 +876,16 @@ Instruction* InstructionSelector::EmitWithContinuation( AppendDeoptimizeArguments(&continuation_inputs_, cont->kind(), cont->reason(), cont->feedback(), FrameState{cont->frame_state()}); - } else if (cont->IsSet() || cont->IsSelect()) { + } else if (cont->IsSet()) { continuation_outputs_.push_back(g.DefineAsRegister(cont->result())); + } else if (cont->IsSelect()) { + // The {Select} should put one of two values into the output register, + // depending on the result of the condition. The two result values are in + // the last two input slots, the {false_value} in {input_count - 2}, and the + // true_value in {input_count - 1}. The other inputs are used for the + // condition. + AddOutputToSelectContinuation(&g, static_cast<int>(input_count) - 2, + cont->result()); } else if (cont->IsTrap()) { int trap_id = static_cast<int>(cont->trap_id()); continuation_inputs_.push_back(g.UseImmediate(trap_id)); @@ -1554,6 +1558,8 @@ void InstructionSelector::VisitNode(Node* node) { return MarkAsWord32(node), VisitWord32Popcnt(node); case IrOpcode::kWord64Popcnt: return MarkAsWord32(node), VisitWord64Popcnt(node); + case IrOpcode::kWord32Select: + return MarkAsWord32(node), VisitSelect(node); case IrOpcode::kWord64And: return MarkAsWord64(node), VisitWord64And(node); case IrOpcode::kWord64Or: @@ -1584,6 +1590,8 @@ void InstructionSelector::VisitNode(Node* node) { return MarkAsWord64(node), VisitInt64AbsWithOverflow(node); case IrOpcode::kWord64Equal: return VisitWord64Equal(node); + case IrOpcode::kWord64Select: + return MarkAsWord64(node), VisitSelect(node); case IrOpcode::kInt32Add: return MarkAsWord32(node), VisitInt32Add(node); case IrOpcode::kInt32AddWithOverflow: @@ -2842,7 +2850,7 @@ constexpr InstructionCode EncodeCallDescriptorFlags( // Note: Not all bits of `flags` are preserved. STATIC_ASSERT(CallDescriptor::kFlagsBitsEncodedInInstructionCode == MiscField::kSize); - CONSTEXPR_DCHECK(Instruction::IsCallWithDescriptorFlags(opcode)); + DCHECK(Instruction::IsCallWithDescriptorFlags(opcode)); return opcode | MiscField::encode(flags & MiscField::kMax); } @@ -2927,8 +2935,8 @@ void InstructionSelector::VisitCall(Node* node, BasicBlock* handler) { if (call_descriptor->NeedsCallerSavedRegisters()) { SaveFPRegsMode mode = call_descriptor->NeedsCallerSavedFPRegisters() - ? kSaveFPRegs - : kDontSaveFPRegs; + ? SaveFPRegsMode::kSave + : SaveFPRegsMode::kIgnore; Emit(kArchSaveCallerRegisters | MiscField::encode(static_cast<int>(mode)), g.NoOutput()); } @@ -3007,8 +3015,8 @@ void InstructionSelector::VisitCall(Node* node, BasicBlock* handler) { if (call_descriptor->NeedsCallerSavedRegisters()) { SaveFPRegsMode mode = call_descriptor->NeedsCallerSavedFPRegisters() - ? kSaveFPRegs - : kDontSaveFPRegs; + ? SaveFPRegsMode::kSave + : SaveFPRegsMode::kIgnore; Emit( kArchRestoreCallerRegisters | MiscField::encode(static_cast<int>(mode)), g.NoOutput()); diff --git a/deps/v8/src/compiler/backend/instruction-selector.h b/deps/v8/src/compiler/backend/instruction-selector.h index 8984c05c3a..8bfe7fff6f 100644 --- a/deps/v8/src/compiler/backend/instruction-selector.h +++ b/deps/v8/src/compiler/backend/instruction-selector.h @@ -680,6 +680,9 @@ class V8_EXPORT_PRIVATE InstructionSelector final { bool CanProduceSignalingNaN(Node* node); + void AddOutputToSelectContinuation(OperandGenerator* g, int first_input_index, + Node* node); + // =========================================================================== // ============= Vector instruction (SIMD) helper fns. ======================= // =========================================================================== diff --git a/deps/v8/src/compiler/backend/instruction.cc b/deps/v8/src/compiler/backend/instruction.cc index 43824e8fcb..f90a249d9a 100644 --- a/deps/v8/src/compiler/backend/instruction.cc +++ b/deps/v8/src/compiler/backend/instruction.cc @@ -155,8 +155,8 @@ std::ostream& operator<<(std::ostream& os, const InstructionOperand& op) { return os << "(R)"; case UnallocatedOperand::MUST_HAVE_SLOT: return os << "(S)"; - case UnallocatedOperand::SAME_AS_FIRST_INPUT: - return os << "(1)"; + case UnallocatedOperand::SAME_AS_INPUT: + return os << "(" << unalloc->input_index() << ")"; case UnallocatedOperand::REGISTER_OR_SLOT: return os << "(-)"; case UnallocatedOperand::REGISTER_OR_SLOT_OR_CONSTANT: @@ -247,6 +247,8 @@ std::ostream& operator<<(std::ostream& os, const InstructionOperand& op) { case MachineRepresentation::kCompressed: os << "|c"; break; + case MachineRepresentation::kMapWord: + UNREACHABLE(); } return os << "]"; } @@ -914,6 +916,7 @@ static MachineRepresentation FilterRepresentation(MachineRepresentation rep) { case MachineRepresentation::kCompressed: return rep; case MachineRepresentation::kNone: + case MachineRepresentation::kMapWord: break; } diff --git a/deps/v8/src/compiler/backend/instruction.h b/deps/v8/src/compiler/backend/instruction.h index 88a114e08e..33146f3c4f 100644 --- a/deps/v8/src/compiler/backend/instruction.h +++ b/deps/v8/src/compiler/backend/instruction.h @@ -185,7 +185,7 @@ class UnallocatedOperand final : public InstructionOperand { FIXED_FP_REGISTER, MUST_HAVE_REGISTER, MUST_HAVE_SLOT, - SAME_AS_FIRST_INPUT + SAME_AS_INPUT }; // Lifetime of operand inside the instruction. @@ -208,6 +208,14 @@ class UnallocatedOperand final : public InstructionOperand { value_ |= LifetimeField::encode(USED_AT_END); } + UnallocatedOperand(int virtual_register, int input_index) + : UnallocatedOperand(virtual_register) { + value_ |= BasicPolicyField::encode(EXTENDED_POLICY); + value_ |= ExtendedPolicyField::encode(SAME_AS_INPUT); + value_ |= LifetimeField::encode(USED_AT_END); + value_ |= InputIndexField::encode(input_index); + } + UnallocatedOperand(BasicPolicy policy, int index, int virtual_register) : UnallocatedOperand(virtual_register) { DCHECK(policy == FIXED_SLOT); @@ -270,7 +278,7 @@ class UnallocatedOperand final : public InstructionOperand { } bool HasSameAsInputPolicy() const { return basic_policy() == EXTENDED_POLICY && - extended_policy() == SAME_AS_FIRST_INPUT; + extended_policy() == SAME_AS_INPUT; } bool HasFixedSlotPolicy() const { return basic_policy() == FIXED_SLOT; } bool HasFixedRegisterPolicy() const { @@ -300,6 +308,11 @@ class UnallocatedOperand final : public InstructionOperand { return ExtendedPolicyField::decode(value_); } + int input_index() const { + DCHECK(HasSameAsInputPolicy()); + return InputIndexField::decode(value_); + } + // [fixed_slot_index]: Only for FIXED_SLOT. int fixed_slot_index() const { DCHECK(HasFixedSlotPolicy()); @@ -362,6 +375,7 @@ class UnallocatedOperand final : public InstructionOperand { using HasSecondaryStorageField = base::BitField64<bool, 40, 1>; using FixedRegisterField = base::BitField64<int, 41, 6>; using SecondaryStorageField = base::BitField64<int, 47, 3>; + using InputIndexField = base::BitField64<int, 50, 3>; private: explicit UnallocatedOperand(int virtual_register) @@ -545,6 +559,8 @@ class LocationOperand : public InstructionOperand { case MachineRepresentation::kWord16: case MachineRepresentation::kNone: return false; + case MachineRepresentation::kMapWord: + break; } UNREACHABLE(); } diff --git a/deps/v8/src/compiler/backend/mid-tier-register-allocator.cc b/deps/v8/src/compiler/backend/mid-tier-register-allocator.cc index 394f319dc0..ee9cd3ddde 100644 --- a/deps/v8/src/compiler/backend/mid-tier-register-allocator.cc +++ b/deps/v8/src/compiler/backend/mid-tier-register-allocator.cc @@ -587,8 +587,7 @@ void VirtualRegisterData::AddSpillUse(int instr_index, const InstructionBlock* block = data->GetBlock(instr_index); if (CouldSpillOnEntryToDeferred(block)) { - // TODO(1180335): Remove once crbug.com/1180335 is fixed. - CHECK(HasSpillRange()); + DCHECK(HasSpillRange()); data->block_state(block->rpo_number()) .deferred_blocks_region() ->DeferSpillOutputUntilEntry(vreg()); @@ -614,8 +613,7 @@ void VirtualRegisterData::AddDeferredSpillOutput( AllocatedOperand allocated_op, int instr_index, MidTierRegisterAllocationData* data) { DCHECK(!NeedsSpillAtOutput()); - // TODO(1180335): Make DCHECK once crbug.com/1180335 is fixed. - CHECK(HasSpillRange()); + DCHECK(HasSpillRange()); spill_range_->AddDeferredSpillOutput(allocated_op, instr_index, data); } @@ -937,9 +935,8 @@ void RegisterState::Register::Use(int virtual_register, int instr_index) { // A register can have many pending uses, but should only ever have a single // non-pending use, since any subsiquent use will commit the preceeding use // first. - // TODO(1180335): Make DCHECK once crbug.com/1180335 is fixed. - CHECK(!is_allocated()); - CHECK(!is_shared()); + DCHECK(!is_allocated()); + DCHECK(!is_shared()); needs_gap_move_on_spill_ = true; virtual_register_ = virtual_register; last_use_instr_index_ = instr_index; @@ -950,8 +947,7 @@ void RegisterState::Register::PendingUse(InstructionOperand* operand, int virtual_register, bool can_be_constant, int instr_index) { - // TODO(1180335): Make DCHECK once crbug.com/1180335 is fixed. - CHECK(!was_spilled_while_shared()); + DCHECK(!was_spilled_while_shared()); if (!is_allocated()) { virtual_register_ = virtual_register; last_use_instr_index_ = instr_index; @@ -972,8 +968,7 @@ void RegisterState::Register::MarkAsPhiMove() { void RegisterState::Register::AddDeferredBlockSpill(int instr_index, bool on_exit, Zone* zone) { - // TODO(1180335): Make DCHECK once crbug.com/1180335 is fixed. - CHECK(is_allocated()); + DCHECK(is_allocated()); if (!deferred_block_spills_) { deferred_block_spills_.emplace(zone); } @@ -981,16 +976,14 @@ void RegisterState::Register::AddDeferredBlockSpill(int instr_index, } void RegisterState::Register::AddSharedUses(int shared_use_count) { - // TODO(1180335): Make DCHECK once crbug.com/1180335 is fixed. - CHECK(!was_spilled_while_shared()); + DCHECK(!was_spilled_while_shared()); is_shared_ = true; num_commits_required_ += shared_use_count; } void RegisterState::Register::CommitAtMerge() { - // TODO(1180335): Make DCHECK once crbug.com/1180335 is fixed. - CHECK(is_shared()); - CHECK(is_allocated()); + DCHECK(is_shared()); + DCHECK(is_allocated()); --num_commits_required_; // We should still have commits required that will be resolved in the merge // block. @@ -999,9 +992,8 @@ void RegisterState::Register::CommitAtMerge() { void RegisterState::Register::Commit(AllocatedOperand allocated_op, MidTierRegisterAllocationData* data) { - // TODO(1180335): Make DCHECK once crbug.com/1180335 is fixed. - CHECK(is_allocated()); - CHECK_GT(num_commits_required_, 0); + DCHECK(is_allocated()); + DCHECK_GT(num_commits_required_, 0); if (--num_commits_required_ == 0) { // Allocate all pending uses to |allocated_op| if this commit is non-shared, @@ -1038,8 +1030,7 @@ void RegisterState::Register::Commit(AllocatedOperand allocated_op, vreg_data.EmitDeferredSpillOutputs(data); } } - // TODO(1180335): Make DCHECK once crbug.com/1180335 is fixed. - CHECK_IMPLIES(num_commits_required_ > 0, is_shared()); + DCHECK_IMPLIES(num_commits_required_ > 0, is_shared()); } void RegisterState::Register::Spill(AllocatedOperand allocated_op, @@ -1106,9 +1097,8 @@ void RegisterState::Register::SpillPendingUses( void RegisterState::Register::SpillForDeferred( AllocatedOperand allocated, int instr_index, MidTierRegisterAllocationData* data) { - // TODO(1180335): Make DCHECK once crbug.com/1180335 is fixed. - CHECK(is_allocated()); - CHECK(is_shared()); + DCHECK(is_allocated()); + DCHECK(is_shared()); // Add a pending deferred spill, then commit the register (with the commit // being fullfilled by the deferred spill if the register is fully commited). data->VirtualRegisterDataFor(virtual_register()) @@ -1120,8 +1110,7 @@ void RegisterState::Register::SpillForDeferred( void RegisterState::Register::MoveToSpillSlotOnDeferred( int virtual_register, int instr_index, MidTierRegisterAllocationData* data) { - // TODO(1180335): Make DCHECK once crbug.com/1180335 is fixed. - CHECK(!was_spilled_while_shared()); + DCHECK(!was_spilled_while_shared()); if (!is_allocated()) { virtual_register_ = virtual_register; last_use_instr_index_ = instr_index; @@ -2168,8 +2157,7 @@ void SinglePassRegisterAllocator::AllocateDeferredBlockSpillOutput( int instr_index, RpoNumber deferred_block, VirtualRegisterData& virtual_register) { DCHECK(data()->GetBlock(deferred_block)->IsDeferred()); - // TODO(1180335): Make DCHECK once crbug.com/1180335 is fixed. - CHECK(virtual_register.HasSpillRange()); + DCHECK(virtual_register.HasSpillRange()); if (!virtual_register.NeedsSpillAtOutput() && !DefinedAfter(virtual_register.vreg(), instr_index, UsePosition::kEnd)) { // If a register has been assigned to the virtual register, and the virtual diff --git a/deps/v8/src/compiler/backend/mips/code-generator-mips.cc b/deps/v8/src/compiler/backend/mips/code-generator-mips.cc index 4066ba77e8..4e7b69e45b 100644 --- a/deps/v8/src/compiler/backend/mips/code-generator-mips.cc +++ b/deps/v8/src/compiler/backend/mips/code-generator-mips.cc @@ -161,18 +161,16 @@ class OutOfLineRecordWrite final : public OutOfLineCode { } void Generate() final { - if (mode_ > RecordWriteMode::kValueIsPointer) { - __ JumpIfSmi(value_, exit()); - } __ CheckPageFlag(value_, scratch0_, MemoryChunk::kPointersToHereAreInterestingMask, eq, exit()); __ Addu(scratch1_, object_, index_); RememberedSetAction const remembered_set_action = - mode_ > RecordWriteMode::kValueIsMap ? EMIT_REMEMBERED_SET - : OMIT_REMEMBERED_SET; - SaveFPRegsMode const save_fp_mode = - frame()->DidAllocateDoubleRegisters() ? kSaveFPRegs : kDontSaveFPRegs; + mode_ > RecordWriteMode::kValueIsMap ? RememberedSetAction::kEmit + : RememberedSetAction::kOmit; + SaveFPRegsMode const save_fp_mode = frame()->DidAllocateDoubleRegisters() + ? SaveFPRegsMode::kSave + : SaveFPRegsMode::kIgnore; if (must_save_lr_) { // We need to save and restore ra if the frame was elided. __ Push(ra); @@ -373,10 +371,10 @@ void EmitWordLoadPoisoningIfNeeded(CodeGenerator* codegen, } else { \ FrameScope scope(tasm(), StackFrame::MANUAL); \ __ Addu(a0, i.InputRegister(0), i.InputRegister(1)); \ - __ PushCallerSaved(kDontSaveFPRegs, v0, v1); \ + __ PushCallerSaved(SaveFPRegsMode::kIgnore, v0, v1); \ __ PrepareCallCFunction(3, 0, kScratchReg); \ __ CallCFunction(ExternalReference::external(), 3, 0); \ - __ PopCallerSaved(kDontSaveFPRegs, v0, v1); \ + __ PopCallerSaved(SaveFPRegsMode::kIgnore, v0, v1); \ } \ } while (0) @@ -403,10 +401,10 @@ void EmitWordLoadPoisoningIfNeeded(CodeGenerator* codegen, } else { \ FrameScope scope(tasm(), StackFrame::MANUAL); \ __ Addu(a0, i.InputRegister(0), i.InputRegister(1)); \ - __ PushCallerSaved(kDontSaveFPRegs, v0, v1); \ + __ PushCallerSaved(SaveFPRegsMode::kIgnore, v0, v1); \ __ PrepareCallCFunction(3, 0, kScratchReg); \ __ CallCFunction(ExternalReference::external(), 3, 0); \ - __ PopCallerSaved(kDontSaveFPRegs, v0, v1); \ + __ PopCallerSaved(SaveFPRegsMode::kIgnore, v0, v1); \ } \ } while (0) @@ -494,8 +492,8 @@ void EmitWordLoadPoisoningIfNeeded(CodeGenerator* codegen, __ Ll(i.TempRegister(2), MemOperand(i.TempRegister(0), 0)); \ __ ExtractBits(i.OutputRegister(0), i.TempRegister(2), i.TempRegister(1), \ size, sign_extend); \ - __ ExtractBits(i.InputRegister(2), i.InputRegister(2), i.TempRegister(1), \ - size, sign_extend); \ + __ ExtractBits(i.InputRegister(2), i.InputRegister(2), zero_reg, size, \ + sign_extend); \ __ BranchShort(&exit, ne, i.InputRegister(2), \ Operand(i.OutputRegister(0))); \ __ InsertBits(i.TempRegister(2), i.InputRegister(3), i.TempRegister(1), \ @@ -746,7 +744,8 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( case kArchSaveCallerRegisters: { fp_mode_ = static_cast<SaveFPRegsMode>(MiscField::decode(instr->opcode())); - DCHECK(fp_mode_ == kDontSaveFPRegs || fp_mode_ == kSaveFPRegs); + DCHECK(fp_mode_ == SaveFPRegsMode::kIgnore || + fp_mode_ == SaveFPRegsMode::kSave); // kReturnRegister0 should have been saved before entering the stub. int bytes = __ PushCallerSaved(fp_mode_, kReturnRegister0); DCHECK(IsAligned(bytes, kSystemPointerSize)); @@ -759,7 +758,8 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( case kArchRestoreCallerRegisters: { DCHECK(fp_mode_ == static_cast<SaveFPRegsMode>(MiscField::decode(instr->opcode()))); - DCHECK(fp_mode_ == kDontSaveFPRegs || fp_mode_ == kSaveFPRegs); + DCHECK(fp_mode_ == SaveFPRegsMode::kIgnore || + fp_mode_ == SaveFPRegsMode::kSave); // Don't overwrite the returned value. int bytes = __ PopCallerSaved(fp_mode_, kReturnRegister0); frame_access_state()->IncreaseSPDelta(-(bytes / kSystemPointerSize)); @@ -781,7 +781,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( int offset = __ root_array_available() ? 68 : 80; #endif // V8_ENABLE_WEBASSEMBLY #if V8_HOST_ARCH_MIPS - if (__ emit_debug_code()) { + if (FLAG_debug_code) { offset += 16; } #endif @@ -873,9 +873,16 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( case kArchRet: AssembleReturn(instr->InputAt(0)); break; - case kArchStackPointerGreaterThan: - // Pseudo-instruction used for cmp/branch. No opcode emitted here. + case kArchStackPointerGreaterThan: { + Register lhs_register = sp; + uint32_t offset; + if (ShouldApplyOffsetToStackCheck(instr, &offset)) { + lhs_register = i.TempRegister(1); + __ Subu(lhs_register, sp, offset); + } + __ Sltu(i.TempRegister(0), i.InputRegister(0), lhs_register); break; + } case kArchStackCheckOffset: __ Move(i.OutputRegister(), Smi::FromInt(GetStackCheckOffset())); break; @@ -906,6 +913,9 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( DetermineStubCallMode()); __ Addu(kScratchReg, object, index); __ sw(value, MemOperand(kScratchReg)); + if (mode > RecordWriteMode::kValueIsPointer) { + __ JumpIfSmi(value, ool->exit()); + } __ CheckPageFlag(object, scratch0, MemoryChunk::kPointersFromHereAreInterestingMask, ne, ool->entry()); @@ -1922,10 +1932,10 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( } else { FrameScope scope(tasm(), StackFrame::MANUAL); __ Addu(a0, i.InputRegister(0), i.InputRegister(1)); - __ PushCallerSaved(kDontSaveFPRegs, v0, v1); + __ PushCallerSaved(SaveFPRegsMode::kIgnore, v0, v1); __ PrepareCallCFunction(1, 0, kScratchReg); __ CallCFunction(ExternalReference::atomic_pair_load_function(), 1, 0); - __ PopCallerSaved(kDontSaveFPRegs, v0, v1); + __ PopCallerSaved(SaveFPRegsMode::kIgnore, v0, v1); } break; } @@ -1945,10 +1955,10 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( } else { FrameScope scope(tasm(), StackFrame::MANUAL); __ Addu(a0, i.InputRegister(0), i.InputRegister(1)); - __ PushCallerSaved(kDontSaveFPRegs); + __ PushCallerSaved(SaveFPRegsMode::kIgnore); __ PrepareCallCFunction(3, 0, kScratchReg); __ CallCFunction(ExternalReference::atomic_pair_store_function(), 3, 0); - __ PopCallerSaved(kDontSaveFPRegs); + __ PopCallerSaved(SaveFPRegsMode::kIgnore); } break; } @@ -1986,12 +1996,12 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( __ sync(); } else { FrameScope scope(tasm(), StackFrame::MANUAL); - __ PushCallerSaved(kDontSaveFPRegs, v0, v1); + __ PushCallerSaved(SaveFPRegsMode::kIgnore, v0, v1); __ PrepareCallCFunction(3, 0, kScratchReg); __ Addu(a0, i.InputRegister(0), i.InputRegister(1)); __ CallCFunction(ExternalReference::atomic_pair_exchange_function(), 3, 0); - __ PopCallerSaved(kDontSaveFPRegs, v0, v1); + __ PopCallerSaved(SaveFPRegsMode::kIgnore, v0, v1); } break; case kMipsWord32AtomicPairCompareExchange: { @@ -2016,13 +2026,13 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( __ sync(); } else { FrameScope scope(tasm(), StackFrame::MANUAL); - __ PushCallerSaved(kDontSaveFPRegs, v0, v1); + __ PushCallerSaved(SaveFPRegsMode::kIgnore, v0, v1); __ PrepareCallCFunction(5, 0, kScratchReg); __ addu(a0, i.InputRegister(0), i.InputRegister(1)); __ sw(i.InputRegister(5), MemOperand(sp, 16)); __ CallCFunction( ExternalReference::atomic_pair_compare_exchange_function(), 5, 0); - __ PopCallerSaved(kDontSaveFPRegs, v0, v1); + __ PopCallerSaved(SaveFPRegsMode::kIgnore, v0, v1); } break; } @@ -3652,7 +3662,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( } } return kSuccess; -} // NOLINT(readability/fn_size) +} void AssembleBranchToLabels(CodeGenerator* gen, TurboAssembler* tasm, Instruction* instr, FlagsCondition condition, @@ -3704,13 +3714,11 @@ void AssembleBranchToLabels(CodeGenerator* gen, TurboAssembler* tasm, __ Branch(tlabel, cc, i.InputRegister(0), i.InputOperand(1)); } else if (instr->arch_opcode() == kArchStackPointerGreaterThan) { cc = FlagsConditionToConditionCmp(condition); - Register lhs_register = sp; - uint32_t offset; - if (gen->ShouldApplyOffsetToStackCheck(instr, &offset)) { - lhs_register = i.TempRegister(0); - __ Subu(lhs_register, sp, offset); + DCHECK((cc == ls) || (cc == hi)); + if (cc == ls) { + __ xori(i.TempRegister(0), i.TempRegister(0), 1); } - __ Branch(tlabel, cc, lhs_register, Operand(i.InputRegister(0))); + __ Branch(tlabel, ne, i.TempRegister(0), Operand(zero_reg)); } else if (instr->arch_opcode() == kMipsCmpS || instr->arch_opcode() == kMipsCmpD) { bool predicate; @@ -4020,6 +4028,13 @@ void CodeGenerator::AssembleArchBoolean(Instruction* instr, } } return; + } else if (instr->arch_opcode() == kArchStackPointerGreaterThan) { + cc = FlagsConditionToConditionCmp(condition); + DCHECK((cc == ls) || (cc == hi)); + if (cc == ls) { + __ xori(i.OutputRegister(), i.TempRegister(0), 1); + } + return; } else { PrintF("AssembleArchBoolean Unimplemented arch_opcode is : %d\n", instr->arch_opcode()); @@ -4132,7 +4147,7 @@ void CodeGenerator::AssembleConstructFrame() { // frame is still on the stack. Optimized code uses OSR values directly from // the unoptimized frame. Thus, all that needs to be done is to allocate the // remaining stack slots. - if (FLAG_code_comments) __ RecordComment("-- OSR entrypoint --"); + __ RecordComment("-- OSR entrypoint --"); osr_pc_offset_ = __ pc_offset(); required_slots -= osr_helper()->UnoptimizedFrameSlots(); ResetSpeculationPoison(); @@ -4234,7 +4249,7 @@ void CodeGenerator::AssembleReturn(InstructionOperand* additional_pop_count) { if (parameter_slots != 0) { if (additional_pop_count->IsImmediate()) { DCHECK_EQ(g.ToConstant(additional_pop_count).ToInt32(), 0); - } else if (__ emit_debug_code()) { + } else if (FLAG_debug_code) { __ Assert(eq, AbortReason::kUnexpectedAdditionalPopValue, g.ToRegister(additional_pop_count), Operand(static_cast<int64_t>(0))); diff --git a/deps/v8/src/compiler/backend/mips/instruction-scheduler-mips.cc b/deps/v8/src/compiler/backend/mips/instruction-scheduler-mips.cc index 0b8a022014..48635c9c15 100644 --- a/deps/v8/src/compiler/backend/mips/instruction-scheduler-mips.cc +++ b/deps/v8/src/compiler/backend/mips/instruction-scheduler-mips.cc @@ -1302,7 +1302,7 @@ int MultiPushFPULatency() { int PushCallerSavedLatency(SaveFPRegsMode fp_mode) { int latency = MultiPushLatency(); - if (fp_mode == kSaveFPRegs) { + if (fp_mode == SaveFPRegsMode::kSave) { latency += MultiPushFPULatency(); } return latency; @@ -1326,7 +1326,7 @@ int MultiPopLatency() { int PopCallerSavedLatency(SaveFPRegsMode fp_mode) { int latency = 0; - if (fp_mode == kSaveFPRegs) { + if (fp_mode == SaveFPRegsMode::kSave) { latency += MultiPopFPULatency(); } return latency + MultiPopLatency(); diff --git a/deps/v8/src/compiler/backend/mips/instruction-selector-mips.cc b/deps/v8/src/compiler/backend/mips/instruction-selector-mips.cc index dcea4c8566..b001578b88 100644 --- a/deps/v8/src/compiler/backend/mips/instruction-selector-mips.cc +++ b/deps/v8/src/compiler/backend/mips/instruction-selector-mips.cc @@ -372,6 +372,7 @@ void InstructionSelector::VisitLoad(Node* node) { case MachineRepresentation::kCompressedPointer: // Fall through. case MachineRepresentation::kCompressed: // Fall through. case MachineRepresentation::kWord64: // Fall through. + case MachineRepresentation::kMapWord: // Fall through. case MachineRepresentation::kNone: UNREACHABLE(); } @@ -457,6 +458,7 @@ void InstructionSelector::VisitStore(Node* node) { case MachineRepresentation::kCompressedPointer: // Fall through. case MachineRepresentation::kCompressed: // Fall through. case MachineRepresentation::kWord64: // Fall through. + case MachineRepresentation::kMapWord: // Fall through. case MachineRepresentation::kNone: UNREACHABLE(); } @@ -1432,6 +1434,7 @@ void InstructionSelector::VisitUnalignedLoad(Node* node) { case MachineRepresentation::kCompressedPointer: // Fall through. case MachineRepresentation::kCompressed: // Fall through. case MachineRepresentation::kWord64: // Fall through. + case MachineRepresentation::kMapWord: // Fall through. case MachineRepresentation::kNone: UNREACHABLE(); } @@ -1485,6 +1488,7 @@ void InstructionSelector::VisitUnalignedStore(Node* node) { case MachineRepresentation::kCompressedPointer: // Fall through. case MachineRepresentation::kCompressed: // Fall through. case MachineRepresentation::kWord64: // Fall through. + case MachineRepresentation::kMapWord: // Fall through. case MachineRepresentation::kNone: UNREACHABLE(); } @@ -1630,11 +1634,12 @@ void InstructionSelector::VisitStackPointerGreaterThan( InstructionOperand* const outputs = nullptr; const int output_count = 0; + // TempRegister(0) is used to store the comparison result. // Applying an offset to this stack check requires a temp register. Offsets // are only applied to the first stack check. If applying an offset, we must // ensure the input and temp registers do not alias, thus kUniqueRegister. - InstructionOperand temps[] = {g.TempRegister()}; - const int temp_count = (kind == StackCheckKind::kJSFunctionEntry ? 1 : 0); + InstructionOperand temps[] = {g.TempRegister(), g.TempRegister()}; + const int temp_count = (kind == StackCheckKind::kJSFunctionEntry ? 2 : 1); const auto register_mode = (kind == StackCheckKind::kJSFunctionEntry) ? OperandGenerator::kUniqueRegister : OperandGenerator::kRegister; @@ -2500,6 +2505,12 @@ void InstructionSelector::VisitF64x2Pmax(Node* node) { VisitUniqueRRR(this, kMipsF64x2Pmax, node); } +void InstructionSelector::AddOutputToSelectContinuation(OperandGenerator* g, + int first_input_index, + Node* node) { + UNREACHABLE(); +} + // static MachineOperatorBuilder::Flags InstructionSelector::SupportedMachineOperatorFlags() { diff --git a/deps/v8/src/compiler/backend/mips64/code-generator-mips64.cc b/deps/v8/src/compiler/backend/mips64/code-generator-mips64.cc index 6edb153943..257ef1bca1 100644 --- a/deps/v8/src/compiler/backend/mips64/code-generator-mips64.cc +++ b/deps/v8/src/compiler/backend/mips64/code-generator-mips64.cc @@ -163,18 +163,16 @@ class OutOfLineRecordWrite final : public OutOfLineCode { } void Generate() final { - if (mode_ > RecordWriteMode::kValueIsPointer) { - __ JumpIfSmi(value_, exit()); - } __ CheckPageFlag(value_, scratch0_, MemoryChunk::kPointersToHereAreInterestingMask, eq, exit()); __ Daddu(scratch1_, object_, index_); RememberedSetAction const remembered_set_action = - mode_ > RecordWriteMode::kValueIsMap ? EMIT_REMEMBERED_SET - : OMIT_REMEMBERED_SET; - SaveFPRegsMode const save_fp_mode = - frame()->DidAllocateDoubleRegisters() ? kSaveFPRegs : kDontSaveFPRegs; + mode_ > RecordWriteMode::kValueIsMap ? RememberedSetAction::kEmit + : RememberedSetAction::kOmit; + SaveFPRegsMode const save_fp_mode = frame()->DidAllocateDoubleRegisters() + ? SaveFPRegsMode::kSave + : SaveFPRegsMode::kIgnore; if (must_save_lr_) { // We need to save and restore ra if the frame was elided. __ Push(ra); @@ -465,8 +463,8 @@ void EmitWordLoadPoisoningIfNeeded(CodeGenerator* codegen, __ load_linked(i.TempRegister(2), MemOperand(i.TempRegister(0), 0)); \ __ ExtractBits(i.OutputRegister(0), i.TempRegister(2), i.TempRegister(1), \ size, sign_extend); \ - __ ExtractBits(i.InputRegister(2), i.InputRegister(2), i.TempRegister(1), \ - size, sign_extend); \ + __ ExtractBits(i.InputRegister(2), i.InputRegister(2), zero_reg, size, \ + sign_extend); \ __ BranchShort(&exit, ne, i.InputRegister(2), \ Operand(i.OutputRegister(0))); \ __ InsertBits(i.TempRegister(2), i.InputRegister(3), i.TempRegister(1), \ @@ -711,7 +709,8 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( case kArchSaveCallerRegisters: { fp_mode_ = static_cast<SaveFPRegsMode>(MiscField::decode(instr->opcode())); - DCHECK(fp_mode_ == kDontSaveFPRegs || fp_mode_ == kSaveFPRegs); + DCHECK(fp_mode_ == SaveFPRegsMode::kIgnore || + fp_mode_ == SaveFPRegsMode::kSave); // kReturnRegister0 should have been saved before entering the stub. int bytes = __ PushCallerSaved(fp_mode_, kReturnRegister0); DCHECK(IsAligned(bytes, kSystemPointerSize)); @@ -724,7 +723,8 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( case kArchRestoreCallerRegisters: { DCHECK(fp_mode_ == static_cast<SaveFPRegsMode>(MiscField::decode(instr->opcode()))); - DCHECK(fp_mode_ == kDontSaveFPRegs || fp_mode_ == kSaveFPRegs); + DCHECK(fp_mode_ == SaveFPRegsMode::kIgnore || + fp_mode_ == SaveFPRegsMode::kSave); // Don't overwrite the returned value. int bytes = __ PopCallerSaved(fp_mode_, kReturnRegister0); frame_access_state()->IncreaseSPDelta(-(bytes / kSystemPointerSize)); @@ -746,7 +746,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( int offset = __ root_array_available() ? 76 : 88; #endif // V8_ENABLE_WEBASSEMBLY #if V8_HOST_ARCH_MIPS64 - if (__ emit_debug_code()) { + if (FLAG_debug_code) { offset += 16; } #endif @@ -835,9 +835,16 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( case kArchRet: AssembleReturn(instr->InputAt(0)); break; - case kArchStackPointerGreaterThan: - // Pseudo-instruction used for cmp/branch. No opcode emitted here. + case kArchStackPointerGreaterThan: { + Register lhs_register = sp; + uint32_t offset; + if (ShouldApplyOffsetToStackCheck(instr, &offset)) { + lhs_register = i.TempRegister(1); + __ Dsubu(lhs_register, sp, offset); + } + __ Sltu(i.TempRegister(0), i.InputRegister(0), lhs_register); break; + } case kArchStackCheckOffset: __ Move(i.OutputRegister(), Smi::FromInt(GetStackCheckOffset())); break; @@ -868,6 +875,9 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( DetermineStubCallMode()); __ Daddu(kScratchReg, object, index); __ Sd(value, MemOperand(kScratchReg)); + if (mode > RecordWriteMode::kValueIsPointer) { + __ JumpIfSmi(value, ool->exit()); + } __ CheckPageFlag(object, scratch0, MemoryChunk::kPointersFromHereAreInterestingMask, ne, ool->entry()); @@ -3817,7 +3827,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( } } return kSuccess; -} // NOLINT(readability/fn_size) +} #define UNSUPPORTED_COND(opcode, condition) \ StdoutStream{} << "Unsupported " << #opcode << " condition: \"" << condition \ @@ -3880,13 +3890,11 @@ void AssembleBranchToLabels(CodeGenerator* gen, TurboAssembler* tasm, __ Branch(tlabel, cc, i.InputRegister(0), i.InputOperand(1)); } else if (instr->arch_opcode() == kArchStackPointerGreaterThan) { cc = FlagsConditionToConditionCmp(condition); - Register lhs_register = sp; - uint32_t offset; - if (gen->ShouldApplyOffsetToStackCheck(instr, &offset)) { - lhs_register = i.TempRegister(0); - __ Dsubu(lhs_register, sp, offset); + DCHECK((cc == ls) || (cc == hi)); + if (cc == ls) { + __ xori(i.TempRegister(0), i.TempRegister(0), 1); } - __ Branch(tlabel, cc, lhs_register, Operand(i.InputRegister(0))); + __ Branch(tlabel, ne, i.TempRegister(0), Operand(zero_reg)); } else if (instr->arch_opcode() == kMips64CmpS || instr->arch_opcode() == kMips64CmpD) { bool predicate; @@ -4232,6 +4240,13 @@ void CodeGenerator::AssembleArchBoolean(Instruction* instr, } } return; + } else if (instr->arch_opcode() == kArchStackPointerGreaterThan) { + cc = FlagsConditionToConditionCmp(condition); + DCHECK((cc == ls) || (cc == hi)); + if (cc == ls) { + __ xori(i.OutputRegister(), i.TempRegister(0), 1); + } + return; } else { PrintF("AssembleArchBranch Unimplemented arch_opcode is : %d\n", instr->arch_opcode()); @@ -4342,7 +4357,7 @@ void CodeGenerator::AssembleConstructFrame() { // frame is still on the stack. Optimized code uses OSR values directly from // the unoptimized frame. Thus, all that needs to be done is to allocate the // remaining stack slots. - if (FLAG_code_comments) __ RecordComment("-- OSR entrypoint --"); + __ RecordComment("-- OSR entrypoint --"); osr_pc_offset_ = __ pc_offset(); required_slots -= osr_helper()->UnoptimizedFrameSlots(); ResetSpeculationPoison(); @@ -4446,7 +4461,7 @@ void CodeGenerator::AssembleReturn(InstructionOperand* additional_pop_count) { if (parameter_slots != 0) { if (additional_pop_count->IsImmediate()) { DCHECK_EQ(g.ToConstant(additional_pop_count).ToInt32(), 0); - } else if (__ emit_debug_code()) { + } else if (FLAG_debug_code) { __ Assert(eq, AbortReason::kUnexpectedAdditionalPopValue, g.ToRegister(additional_pop_count), Operand(static_cast<int64_t>(0))); diff --git a/deps/v8/src/compiler/backend/mips64/instruction-scheduler-mips64.cc b/deps/v8/src/compiler/backend/mips64/instruction-scheduler-mips64.cc index 3b0e5b85fb..c63e0aa3d3 100644 --- a/deps/v8/src/compiler/backend/mips64/instruction-scheduler-mips64.cc +++ b/deps/v8/src/compiler/backend/mips64/instruction-scheduler-mips64.cc @@ -932,7 +932,7 @@ int MultiPushFPULatency() { int PushCallerSavedLatency(SaveFPRegsMode fp_mode) { int latency = MultiPushLatency(); - if (fp_mode == kSaveFPRegs) { + if (fp_mode == SaveFPRegsMode::kSave) { latency += MultiPushFPULatency(); } return latency; @@ -956,7 +956,7 @@ int MultiPopFPULatency() { int PopCallerSavedLatency(SaveFPRegsMode fp_mode) { int latency = MultiPopLatency(); - if (fp_mode == kSaveFPRegs) { + if (fp_mode == SaveFPRegsMode::kSave) { latency += MultiPopFPULatency(); } return latency; diff --git a/deps/v8/src/compiler/backend/mips64/instruction-selector-mips64.cc b/deps/v8/src/compiler/backend/mips64/instruction-selector-mips64.cc index b0b3fec8f3..6d6b487ccd 100644 --- a/deps/v8/src/compiler/backend/mips64/instruction-selector-mips64.cc +++ b/deps/v8/src/compiler/backend/mips64/instruction-selector-mips64.cc @@ -512,6 +512,7 @@ void InstructionSelector::VisitLoad(Node* node) { break; case MachineRepresentation::kCompressedPointer: // Fall through. case MachineRepresentation::kCompressed: // Fall through. + case MachineRepresentation::kMapWord: // Fall through. case MachineRepresentation::kNone: UNREACHABLE(); } @@ -589,6 +590,7 @@ void InstructionSelector::VisitStore(Node* node) { break; case MachineRepresentation::kCompressedPointer: // Fall through. case MachineRepresentation::kCompressed: // Fall through. + case MachineRepresentation::kMapWord: // Fall through. case MachineRepresentation::kNone: UNREACHABLE(); } @@ -1452,7 +1454,9 @@ void InstructionSelector::VisitBitcastWord32ToWord64(Node* node) { void InstructionSelector::VisitChangeInt32ToInt64(Node* node) { Node* value = node->InputAt(0); - if (value->opcode() == IrOpcode::kLoad && CanCover(node, value)) { + if ((value->opcode() == IrOpcode::kLoad || + value->opcode() == IrOpcode::kLoadImmutable) && + CanCover(node, value)) { // Generate sign-extending load. LoadRepresentation load_rep = LoadRepresentationOf(value->op()); InstructionCode opcode = kArchNop; @@ -1853,6 +1857,7 @@ void InstructionSelector::VisitUnalignedLoad(Node* node) { case MachineRepresentation::kBit: // Fall through. case MachineRepresentation::kCompressedPointer: // Fall through. case MachineRepresentation::kCompressed: // Fall through. + case MachineRepresentation::kMapWord: // Fall through. case MachineRepresentation::kNone: UNREACHABLE(); } @@ -1906,6 +1911,7 @@ void InstructionSelector::VisitUnalignedStore(Node* node) { case MachineRepresentation::kBit: // Fall through. case MachineRepresentation::kCompressedPointer: // Fall through. case MachineRepresentation::kCompressed: // Fall through. + case MachineRepresentation::kMapWord: // Fall through. case MachineRepresentation::kNone: UNREACHABLE(); } @@ -2265,11 +2271,12 @@ void InstructionSelector::VisitStackPointerGreaterThan( InstructionOperand* const outputs = nullptr; const int output_count = 0; + // TempRegister(0) is used to store the comparison result. // Applying an offset to this stack check requires a temp register. Offsets // are only applied to the first stack check. If applying an offset, we must // ensure the input and temp registers do not alias, thus kUniqueRegister. - InstructionOperand temps[] = {g.TempRegister()}; - const int temp_count = (kind == StackCheckKind::kJSFunctionEntry ? 1 : 0); + InstructionOperand temps[] = {g.TempRegister(), g.TempRegister()}; + const int temp_count = (kind == StackCheckKind::kJSFunctionEntry ? 2 : 1); const auto register_mode = (kind == StackCheckKind::kJSFunctionEntry) ? OperandGenerator::kUniqueRegister : OperandGenerator::kRegister; @@ -3291,6 +3298,12 @@ VISIT_EXTADD_PAIRWISE(I32x4ExtAddPairwiseI16x8S, MSAS16) VISIT_EXTADD_PAIRWISE(I32x4ExtAddPairwiseI16x8U, MSAU16) #undef VISIT_EXTADD_PAIRWISE +void InstructionSelector::AddOutputToSelectContinuation(OperandGenerator* g, + int first_input_index, + Node* node) { + UNREACHABLE(); +} + // static MachineOperatorBuilder::Flags InstructionSelector::SupportedMachineOperatorFlags() { diff --git a/deps/v8/src/compiler/backend/ppc/OWNERS b/deps/v8/src/compiler/backend/ppc/OWNERS deleted file mode 100644 index 02c2cd757c..0000000000 --- a/deps/v8/src/compiler/backend/ppc/OWNERS +++ /dev/null @@ -1,5 +0,0 @@ -junyan@redhat.com -joransiu@ca.ibm.com -midawson@redhat.com -mfarazma@redhat.com -vasili.skurydzin@ibm.com diff --git a/deps/v8/src/compiler/backend/ppc/code-generator-ppc.cc b/deps/v8/src/compiler/backend/ppc/code-generator-ppc.cc index 334d318f02..2dfae5d2d6 100644 --- a/deps/v8/src/compiler/backend/ppc/code-generator-ppc.cc +++ b/deps/v8/src/compiler/backend/ppc/code-generator-ppc.cc @@ -171,9 +171,6 @@ class OutOfLineRecordWrite final : public OutOfLineCode { void Generate() final { ConstantPoolUnavailableScope constant_pool_unavailable(tasm()); - if (mode_ > RecordWriteMode::kValueIsPointer) { - __ JumpIfSmi(value_, exit()); - } if (COMPRESS_POINTERS_BOOL) { __ DecompressTaggedPointer(value_, value_); } @@ -187,10 +184,11 @@ class OutOfLineRecordWrite final : public OutOfLineCode { __ add(scratch1_, object_, offset_); } RememberedSetAction const remembered_set_action = - mode_ > RecordWriteMode::kValueIsMap ? EMIT_REMEMBERED_SET - : OMIT_REMEMBERED_SET; - SaveFPRegsMode const save_fp_mode = - frame()->DidAllocateDoubleRegisters() ? kSaveFPRegs : kDontSaveFPRegs; + mode_ > RecordWriteMode::kValueIsMap ? RememberedSetAction::kEmit + : RememberedSetAction::kOmit; + SaveFPRegsMode const save_fp_mode = frame()->DidAllocateDoubleRegisters() + ? SaveFPRegsMode::kSave + : SaveFPRegsMode::kIgnore; if (must_save_lr_) { // We need to save and restore lr if the frame was elided. __ mflr(scratch0_); @@ -824,8 +822,8 @@ void CodeGenerator::BailoutIfDeoptimized() { int offset = Code::kCodeDataContainerOffset - Code::kHeaderSize; __ LoadTaggedPointerField( r11, MemOperand(kJavaScriptCallCodeStartRegister, offset)); - __ LoadWordArith( - r11, FieldMemOperand(r11, CodeDataContainer::kKindSpecificFlagsOffset)); + __ LoadS32(r11, + FieldMemOperand(r11, CodeDataContainer::kKindSpecificFlagsOffset)); __ TestBit(r11, Code::kMarkedForDeoptimizationBit); __ Jump(BUILTIN_CODE(isolate(), CompileLazyDeoptimizedCode), RelocInfo::CODE_TARGET, ne, cr0); @@ -981,7 +979,8 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( case kArchSaveCallerRegisters: { fp_mode_ = static_cast<SaveFPRegsMode>(MiscField::decode(instr->opcode())); - DCHECK(fp_mode_ == kDontSaveFPRegs || fp_mode_ == kSaveFPRegs); + DCHECK(fp_mode_ == SaveFPRegsMode::kIgnore || + fp_mode_ == SaveFPRegsMode::kSave); // kReturnRegister0 should have been saved before entering the stub. int bytes = __ PushCallerSaved(fp_mode_, kReturnRegister0); DCHECK(IsAligned(bytes, kSystemPointerSize)); @@ -994,7 +993,8 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( case kArchRestoreCallerRegisters: { DCHECK(fp_mode_ == static_cast<SaveFPRegsMode>(MiscField::decode(instr->opcode()))); - DCHECK(fp_mode_ == kDontSaveFPRegs || fp_mode_ == kSaveFPRegs); + DCHECK(fp_mode_ == SaveFPRegsMode::kIgnore || + fp_mode_ == SaveFPRegsMode::kSave); // Don't overwrite the returned value. int bytes = __ PopCallerSaved(fp_mode_, kReturnRegister0); frame_access_state()->IncreaseSPDelta(-(bytes / kSystemPointerSize)); @@ -1130,7 +1130,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( break; case kArchParentFramePointer: if (frame_access_state()->has_frame()) { - __ LoadP(i.OutputRegister(), MemOperand(fp, 0)); + __ LoadU64(i.OutputRegister(), MemOperand(fp, 0)); } else { __ mr(i.OutputRegister(), fp); } @@ -1192,6 +1192,9 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( DetermineStubCallMode(), &unwinding_info_writer_); __ StoreTaggedFieldX(value, MemOperand(object, offset), r0); } + if (mode > RecordWriteMode::kValueIsPointer) { + __ JumpIfSmi(value, ool->exit()); + } __ CheckPageFlag(object, scratch0, MemoryChunk::kPointersFromHereAreInterestingMask, ne, ool->entry()); @@ -1222,11 +1225,10 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( } else { DCHECK_EQ(MachineRepresentation::kSimd128, op->representation()); __ mov(ip, Operand(offset)); - __ LoadSimd128(i.OutputSimd128Register(), MemOperand(fp, ip), r0, - kScratchSimd128Reg); + __ LoadSimd128(i.OutputSimd128Register(), MemOperand(fp, ip)); } } else { - __ LoadP(i.OutputRegister(), MemOperand(fp, offset), r0); + __ LoadU64(i.OutputRegister(), MemOperand(fp, offset), r0); } break; } @@ -1748,8 +1750,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( break; case MachineRepresentation::kSimd128: __ addi(sp, sp, Operand(-kSimd128Size)); - __ StoreSimd128(i.InputSimd128Register(1), MemOperand(r0, sp), r0, - kScratchSimd128Reg); + __ StoreSimd128(i.InputSimd128Register(1), MemOperand(r0, sp)); break; default: __ StorePU(i.InputRegister(1), MemOperand(sp, -kSystemPointerSize), @@ -1791,8 +1792,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( } else { DCHECK_EQ(MachineRepresentation::kSimd128, op->representation()); __ mov(ip, Operand(slot * kSystemPointerSize)); - __ StoreSimd128(i.InputSimd128Register(0), MemOperand(ip, sp), r0, - kScratchSimd128Reg); + __ StoreSimd128(i.InputSimd128Register(0), MemOperand(ip, sp)); } } else { __ StoreP(i.InputRegister(0), MemOperand(sp, slot * kSystemPointerSize), @@ -2057,9 +2057,8 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( AddressingMode mode = kMode_None; MemOperand operand = i.MemoryOperand(&mode); bool is_atomic = i.InputInt32(2); - // lvx only supports MRR. DCHECK_EQ(mode, kMode_MRR); - __ LoadSimd128(result, operand, r0, kScratchSimd128Reg); + __ LoadSimd128(result, operand); if (is_atomic) __ lwsync(); DCHECK_EQ(LeaveRC, i.OutputRCBit()); break; @@ -2095,9 +2094,8 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( Simd128Register value = i.InputSimd128Register(index); bool is_atomic = i.InputInt32(3); if (is_atomic) __ lwsync(); - // stvx only supports MRR. DCHECK_EQ(mode, kMode_MRR); - __ StoreSimd128(value, operand, r0, kScratchSimd128Reg); + __ StoreSimd128(value, operand); if (is_atomic) __ sync(); DCHECK_EQ(LeaveRC, i.OutputRCBit()); break; @@ -2479,21 +2477,11 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( i.InputSimd128Register(1)); break; } - case kPPC_I64x2MinS: { - __ vminsd(i.OutputSimd128Register(), i.InputSimd128Register(0), - i.InputSimd128Register(1)); - break; - } case kPPC_I32x4MinS: { __ vminsw(i.OutputSimd128Register(), i.InputSimd128Register(0), i.InputSimd128Register(1)); break; } - case kPPC_I64x2MinU: { - __ vminud(i.OutputSimd128Register(), i.InputSimd128Register(0), - i.InputSimd128Register(1)); - break; - } case kPPC_I32x4MinU: { __ vminuw(i.OutputSimd128Register(), i.InputSimd128Register(0), i.InputSimd128Register(1)); @@ -2519,21 +2507,11 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( i.InputSimd128Register(1)); break; } - case kPPC_I64x2MaxS: { - __ vmaxsd(i.OutputSimd128Register(), i.InputSimd128Register(0), - i.InputSimd128Register(1)); - break; - } case kPPC_I32x4MaxS: { __ vmaxsw(i.OutputSimd128Register(), i.InputSimd128Register(0), i.InputSimd128Register(1)); break; } - case kPPC_I64x2MaxU: { - __ vmaxud(i.OutputSimd128Register(), i.InputSimd128Register(0), - i.InputSimd128Register(1)); - break; - } case kPPC_I32x4MaxU: { __ vmaxuw(i.OutputSimd128Register(), i.InputSimd128Register(0), i.InputSimd128Register(1)); @@ -2662,26 +2640,17 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( break; } case kPPC_I64x2GeS: { - __ vcmpequd(kScratchSimd128Reg, i.InputSimd128Register(0), - i.InputSimd128Register(1)); - __ vcmpgtsd(i.OutputSimd128Register(), i.InputSimd128Register(0), - i.InputSimd128Register(1)); - __ vor(i.OutputSimd128Register(), i.OutputSimd128Register(), - kScratchSimd128Reg); + __ vcmpgtsd(kScratchSimd128Reg, i.InputSimd128Register(1), + i.InputSimd128Register(0)); + __ vnor(i.OutputSimd128Register(), kScratchSimd128Reg, + kScratchSimd128Reg); break; } case kPPC_I32x4GeS: { - __ vcmpequw(kScratchSimd128Reg, i.InputSimd128Register(0), - i.InputSimd128Register(1)); - __ vcmpgtsw(i.OutputSimd128Register(), i.InputSimd128Register(0), - i.InputSimd128Register(1)); - __ vor(i.OutputSimd128Register(), i.OutputSimd128Register(), - kScratchSimd128Reg); - break; - } - case kPPC_I64x2GtU: { - __ vcmpgtud(i.OutputSimd128Register(), i.InputSimd128Register(0), - i.InputSimd128Register(1)); + __ vcmpgtsw(kScratchSimd128Reg, i.InputSimd128Register(1), + i.InputSimd128Register(0)); + __ vnor(i.OutputSimd128Register(), kScratchSimd128Reg, + kScratchSimd128Reg); break; } case kPPC_I32x4GtU: { @@ -2690,16 +2659,6 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( break; } - case kPPC_I64x2GeU: { - __ vcmpequd(kScratchSimd128Reg, i.InputSimd128Register(0), - i.InputSimd128Register(1)); - __ vcmpgtud(i.OutputSimd128Register(), i.InputSimd128Register(0), - i.InputSimd128Register(1)); - __ vor(i.OutputSimd128Register(), i.OutputSimd128Register(), - kScratchSimd128Reg); - - break; - } case kPPC_I32x4GeU: { __ vcmpequw(kScratchSimd128Reg, i.InputSimd128Register(0), i.InputSimd128Register(1)); @@ -2715,12 +2674,10 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( break; } case kPPC_I16x8GeS: { - __ vcmpequh(kScratchSimd128Reg, i.InputSimd128Register(0), - i.InputSimd128Register(1)); - __ vcmpgtsh(i.OutputSimd128Register(), i.InputSimd128Register(0), - i.InputSimd128Register(1)); - __ vor(i.OutputSimd128Register(), i.OutputSimd128Register(), - kScratchSimd128Reg); + __ vcmpgtsh(kScratchSimd128Reg, i.InputSimd128Register(1), + i.InputSimd128Register(0)); + __ vnor(i.OutputSimd128Register(), kScratchSimd128Reg, + kScratchSimd128Reg); break; } case kPPC_I16x8GtU: { @@ -2743,12 +2700,10 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( break; } case kPPC_I8x16GeS: { - __ vcmpequb(kScratchSimd128Reg, i.InputSimd128Register(0), - i.InputSimd128Register(1)); - __ vcmpgtsb(i.OutputSimd128Register(), i.InputSimd128Register(0), - i.InputSimd128Register(1)); - __ vor(i.OutputSimd128Register(), i.OutputSimd128Register(), - kScratchSimd128Reg); + __ vcmpgtsb(kScratchSimd128Reg, i.InputSimd128Register(1), + i.InputSimd128Register(0)); + __ vnor(i.OutputSimd128Register(), kScratchSimd128Reg, + kScratchSimd128Reg); break; } case kPPC_I8x16GtU: { @@ -2840,15 +2795,11 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( break; } case kPPC_S128Const: { - Simd128Register dst = i.OutputSimd128Register(); - constexpr int lane_width_in_bytes = 8; uint64_t low = make_uint64(i.InputUint32(1), i.InputUint32(0)); uint64_t high = make_uint64(i.InputUint32(3), i.InputUint32(2)); __ mov(r0, Operand(low)); __ mov(ip, Operand(high)); - __ mtvsrd(dst, ip); - __ mtvsrd(kScratchSimd128Reg, r0); - __ vinsertd(dst, kScratchSimd128Reg, Operand(1 * lane_width_in_bytes)); + __ mtvsrdd(i.OutputSimd128Register(), ip, r0); break; } case kPPC_S128Zero: { @@ -2908,24 +2859,11 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( break; } case kPPC_I64x2Neg: { - constexpr int lane_width_in_bytes = 8; - Simd128Register tempFPReg1 = i.ToSimd128Register(instr->TempAt(0)); - __ li(kScratchReg, Operand(1)); - __ mtvsrd(kScratchSimd128Reg, kScratchReg); - __ vinsertd(kScratchSimd128Reg, kScratchSimd128Reg, - Operand(1 * lane_width_in_bytes)); - // Perform negation. - __ vnor(tempFPReg1, i.InputSimd128Register(0), i.InputSimd128Register(0)); - __ vaddudm(i.OutputSimd128Register(), tempFPReg1, kScratchSimd128Reg); + __ vnegd(i.OutputSimd128Register(), i.InputSimd128Register(0)); break; } case kPPC_I32x4Neg: { - Simd128Register tempFPReg1 = i.ToSimd128Register(instr->TempAt(0)); - __ li(ip, Operand(1)); - __ mtvsrd(kScratchSimd128Reg, ip); - __ vspltw(kScratchSimd128Reg, kScratchSimd128Reg, Operand(1)); - __ vnor(tempFPReg1, i.InputSimd128Register(0), i.InputSimd128Register(0)); - __ vadduwm(i.OutputSimd128Register(), kScratchSimd128Reg, tempFPReg1); + __ vnegw(i.OutputSimd128Register(), i.InputSimd128Register(0)); break; } case kPPC_I64x2Abs: { @@ -3170,15 +3108,14 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( break; } case kPPC_I8x16Shuffle: { - constexpr int lane_width_in_bytes = 8; Simd128Register dst = i.OutputSimd128Register(), src0 = i.InputSimd128Register(0), src1 = i.InputSimd128Register(1); - __ mov(r0, Operand(make_uint64(i.InputUint32(3), i.InputUint32(2)))); - __ mov(ip, Operand(make_uint64(i.InputUint32(5), i.InputUint32(4)))); - __ mtvsrd(kScratchSimd128Reg, r0); - __ mtvsrd(dst, ip); - __ vinsertd(dst, kScratchSimd128Reg, Operand(1 * lane_width_in_bytes)); + uint64_t low = make_uint64(i.InputUint32(3), i.InputUint32(2)); + uint64_t high = make_uint64(i.InputUint32(5), i.InputUint32(4)); + __ mov(r0, Operand(low)); + __ mov(ip, Operand(high)); + __ mtvsrdd(dst, ip, r0); __ vperm(dst, src0, src1, dst); break; } @@ -3226,24 +3163,15 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( Simd128Register dst = i.OutputSimd128Register(), src0 = i.InputSimd128Register(0), src1 = i.InputSimd128Register(1), - tempFPReg1 = i.ToSimd128Register(instr->TempAt(0)), - tempFPReg2 = i.ToSimd128Register(instr->TempAt(1)); + tempFPReg1 = i.ToSimd128Register(instr->TempAt(0)); // Saturate the indices to 5 bits. Input indices more than 31 should // return 0. - __ xxspltib(tempFPReg2, Operand(31)); - __ vminub(tempFPReg2, src1, tempFPReg2); - __ addi(sp, sp, Operand(-16)); - __ stxvd(src0, MemOperand(r0, sp)); - __ ldbrx(r0, MemOperand(r0, sp)); - __ li(ip, Operand(8)); - __ ldbrx(ip, MemOperand(ip, sp)); - __ stdx(ip, MemOperand(r0, sp)); - __ li(ip, Operand(8)); - __ stdx(r0, MemOperand(ip, sp)); - __ lxvd(kScratchSimd128Reg, MemOperand(r0, sp)); - __ addi(sp, sp, Operand(16)); - __ vxor(tempFPReg1, tempFPReg1, tempFPReg1); - __ vperm(dst, kScratchSimd128Reg, tempFPReg1, tempFPReg2); + __ xxspltib(tempFPReg1, Operand(31)); + __ vminub(tempFPReg1, src1, tempFPReg1); + // input needs to be reversed. + __ xxbrq(dst, src0); + __ vxor(kScratchSimd128Reg, kScratchSimd128Reg, kScratchSimd128Reg); + __ vperm(dst, dst, kScratchSimd128Reg, tempFPReg1); break; } case kPPC_F64x2Qfma: { @@ -3871,7 +3799,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( UNREACHABLE(); } return kSuccess; -} // NOLINT(readability/fn_size) +} // Assembles branches after an instruction. void CodeGenerator::AssembleArchBranch(Instruction* instr, BranchInfo* branch) { @@ -4174,7 +4102,7 @@ void CodeGenerator::AssembleConstructFrame() { // frame is still on the stack. Optimized code uses OSR values directly from // the unoptimized frame. Thus, all that needs to be done is to allocate the // remaining stack slots. - if (FLAG_code_comments) __ RecordComment("-- OSR entrypoint --"); + __ RecordComment("-- OSR entrypoint --"); osr_pc_offset_ = __ pc_offset(); required_slots -= osr_helper()->UnoptimizedFrameSlots(); ResetSpeculationPoison(); @@ -4200,11 +4128,11 @@ void CodeGenerator::AssembleConstructFrame() { // check in the condition code. if ((required_slots * kSystemPointerSize) < (FLAG_stack_size * 1024)) { Register scratch = ip; - __ LoadP( + __ LoadU64( scratch, FieldMemOperand(kWasmInstanceRegister, WasmInstanceObject::kRealStackLimitAddressOffset)); - __ LoadP(scratch, MemOperand(scratch), r0); + __ LoadU64(scratch, MemOperand(scratch), r0); __ Add(scratch, scratch, required_slots * kSystemPointerSize, r0); __ cmpl(sp, scratch); __ bge(&done); @@ -4284,7 +4212,7 @@ void CodeGenerator::AssembleReturn(InstructionOperand* additional_pop_count) { if (parameter_slots != 0) { if (additional_pop_count->IsImmediate()) { DCHECK_EQ(g.ToConstant(additional_pop_count).ToInt32(), 0); - } else if (__ emit_debug_code()) { + } else if (FLAG_debug_code) { __ cmpi(g.ToRegister(additional_pop_count), Operand(0)); __ Assert(eq, AbortReason::kUnexpectedAdditionalPopValue); } @@ -4315,7 +4243,7 @@ void CodeGenerator::AssembleReturn(InstructionOperand* additional_pop_count) { } if (drop_jsargs) { // Get the actual argument count. - __ LoadP(argc_reg, MemOperand(fp, StandardFrameConstants::kArgCOffset)); + __ LoadU64(argc_reg, MemOperand(fp, StandardFrameConstants::kArgCOffset)); } AssembleDeconstructFrame(); } @@ -4327,7 +4255,7 @@ void CodeGenerator::AssembleReturn(InstructionOperand* additional_pop_count) { __ addi(argc_reg, argc_reg, Operand(1)); // Also pop the receiver. if (parameter_slots > 1) { Label skip; - __ cmpi(argc_reg, Operand(parameter_slots)); + __ Cmpi(argc_reg, Operand(parameter_slots), r0); __ bgt(&skip); __ mov(argc_reg, Operand(parameter_slots)); __ bind(&skip); @@ -4378,10 +4306,10 @@ void CodeGenerator::AssembleMove(InstructionOperand* source, DCHECK(destination->IsRegister() || destination->IsStackSlot()); MemOperand src = g.ToMemOperand(source); if (destination->IsRegister()) { - __ LoadP(g.ToRegister(destination), src, r0); + __ LoadU64(g.ToRegister(destination), src, r0); } else { Register temp = kScratchReg; - __ LoadP(temp, src, r0); + __ LoadU64(temp, src, r0); __ StoreP(temp, g.ToMemOperand(destination), r0); } } else if (source->IsConstant()) { @@ -4494,8 +4422,7 @@ void CodeGenerator::AssembleMove(InstructionOperand* source, DCHECK(destination->IsSimd128StackSlot()); MemOperand dst = g.ToMemOperand(destination); __ mov(ip, Operand(dst.offset())); - __ StoreSimd128(g.ToSimd128Register(source), MemOperand(dst.ra(), ip), - r0, kScratchSimd128Reg); + __ StoreSimd128(g.ToSimd128Register(source), MemOperand(dst.ra(), ip)); } } else { DoubleRegister src = g.ToDoubleRegister(source); @@ -4526,7 +4453,7 @@ void CodeGenerator::AssembleMove(InstructionOperand* source, MemOperand src = g.ToMemOperand(source); __ mov(ip, Operand(src.offset())); __ LoadSimd128(g.ToSimd128Register(destination), - MemOperand(src.ra(), ip), r0, kScratchSimd128Reg); + MemOperand(src.ra(), ip)); } } else { LocationOperand* op = LocationOperand::cast(source); @@ -4541,15 +4468,15 @@ void CodeGenerator::AssembleMove(InstructionOperand* source, DCHECK_EQ(MachineRepresentation::kSimd128, op->representation()); // push v0, to be used as scratch __ addi(sp, sp, Operand(-kSimd128Size)); - __ StoreSimd128(v0, MemOperand(r0, sp), r0, kScratchSimd128Reg); + __ StoreSimd128(v0, MemOperand(r0, sp)); MemOperand src = g.ToMemOperand(source); MemOperand dst = g.ToMemOperand(destination); __ mov(ip, Operand(src.offset())); - __ LoadSimd128(v0, MemOperand(src.ra(), ip), r0, kScratchSimd128Reg); + __ LoadSimd128(v0, MemOperand(src.ra(), ip)); __ mov(ip, Operand(dst.offset())); - __ StoreSimd128(v0, MemOperand(dst.ra(), ip), r0, kScratchSimd128Reg); + __ StoreSimd128(v0, MemOperand(dst.ra(), ip)); // restore v0 - __ LoadSimd128(v0, MemOperand(r0, sp), ip, kScratchSimd128Reg); + __ LoadSimd128(v0, MemOperand(r0, sp)); __ addi(sp, sp, Operand(kSimd128Size)); } } diff --git a/deps/v8/src/compiler/backend/ppc/instruction-codes-ppc.h b/deps/v8/src/compiler/backend/ppc/instruction-codes-ppc.h index 787cc2a27d..ccbce18045 100644 --- a/deps/v8/src/compiler/backend/ppc/instruction-codes-ppc.h +++ b/deps/v8/src/compiler/backend/ppc/instruction-codes-ppc.h @@ -255,15 +255,9 @@ namespace compiler { V(PPC_I64x2Add) \ V(PPC_I64x2Sub) \ V(PPC_I64x2Mul) \ - V(PPC_I64x2MinS) \ - V(PPC_I64x2MinU) \ - V(PPC_I64x2MaxS) \ - V(PPC_I64x2MaxU) \ V(PPC_I64x2Eq) \ V(PPC_I64x2Ne) \ V(PPC_I64x2GtS) \ - V(PPC_I64x2GtU) \ - V(PPC_I64x2GeU) \ V(PPC_I64x2GeS) \ V(PPC_I64x2Shl) \ V(PPC_I64x2ShrS) \ diff --git a/deps/v8/src/compiler/backend/ppc/instruction-scheduler-ppc.cc b/deps/v8/src/compiler/backend/ppc/instruction-scheduler-ppc.cc index 749905a055..e6c59fef22 100644 --- a/deps/v8/src/compiler/backend/ppc/instruction-scheduler-ppc.cc +++ b/deps/v8/src/compiler/backend/ppc/instruction-scheduler-ppc.cc @@ -177,15 +177,9 @@ int InstructionScheduler::GetTargetInstructionFlags( case kPPC_I64x2Add: case kPPC_I64x2Sub: case kPPC_I64x2Mul: - case kPPC_I64x2MinS: - case kPPC_I64x2MinU: - case kPPC_I64x2MaxS: - case kPPC_I64x2MaxU: case kPPC_I64x2Eq: case kPPC_I64x2Ne: case kPPC_I64x2GtS: - case kPPC_I64x2GtU: - case kPPC_I64x2GeU: case kPPC_I64x2GeS: case kPPC_I64x2Shl: case kPPC_I64x2ShrS: diff --git a/deps/v8/src/compiler/backend/ppc/instruction-selector-ppc.cc b/deps/v8/src/compiler/backend/ppc/instruction-selector-ppc.cc index 849723bdac..d4ef108699 100644 --- a/deps/v8/src/compiler/backend/ppc/instruction-selector-ppc.cc +++ b/deps/v8/src/compiler/backend/ppc/instruction-selector-ppc.cc @@ -224,6 +224,7 @@ void InstructionSelector::VisitLoad(Node* node) { // Vectors do not support MRI mode, only MRR is available. mode = kNoImmediate; break; + case MachineRepresentation::kMapWord: // Fall through. case MachineRepresentation::kNone: UNREACHABLE(); } @@ -356,6 +357,7 @@ void InstructionSelector::VisitStore(Node* node) { // Vectors do not support MRI mode, only MRR is available. mode = kNoImmediate; break; + case MachineRepresentation::kMapWord: // Fall through. case MachineRepresentation::kNone: UNREACHABLE(); } @@ -2642,6 +2644,12 @@ void InstructionSelector::VisitStoreLane(Node* node) { Emit(opcode | AddressingModeField::encode(kMode_MRR), 0, nullptr, 4, inputs); } +void InstructionSelector::AddOutputToSelectContinuation(OperandGenerator* g, + int first_input_index, + Node* node) { + UNREACHABLE(); +} + // static MachineOperatorBuilder::Flags InstructionSelector::SupportedMachineOperatorFlags() { diff --git a/deps/v8/src/compiler/backend/register-allocation.h b/deps/v8/src/compiler/backend/register-allocation.h index f4a7558b04..37173da1fc 100644 --- a/deps/v8/src/compiler/backend/register-allocation.h +++ b/deps/v8/src/compiler/backend/register-allocation.h @@ -65,6 +65,7 @@ inline int ByteWidthForStackSlot(MachineRepresentation rep) { case MachineRepresentation::kSimd128: return kSimd128Size; case MachineRepresentation::kNone: + case MachineRepresentation::kMapWord: break; } UNREACHABLE(); diff --git a/deps/v8/src/compiler/backend/register-allocator-verifier.cc b/deps/v8/src/compiler/backend/register-allocator-verifier.cc index 1587f0ee18..b4099c5fad 100644 --- a/deps/v8/src/compiler/backend/register-allocator-verifier.cc +++ b/deps/v8/src/compiler/backend/register-allocator-verifier.cc @@ -72,7 +72,7 @@ RegisterAllocatorVerifier::RegisterAllocatorVerifier( constraints_.reserve(sequence->instructions().size()); // TODO(dcarney): model unique constraints. // Construct OperandConstraints for all InstructionOperands, eliminating - // kSameAsFirst along the way. + // kSameAsInput along the way. for (const Instruction* instr : sequence->instructions()) { // All gaps should be totally unallocated at this point. VerifyEmptyGaps(instr); @@ -90,10 +90,11 @@ RegisterAllocatorVerifier::RegisterAllocatorVerifier( } for (size_t i = 0; i < instr->OutputCount(); ++i, ++count) { BuildConstraint(instr->OutputAt(i), &op_constraints[count]); - if (op_constraints[count].type_ == kSameAsFirst) { - CHECK_LT(0, instr->InputCount()); - op_constraints[count].type_ = op_constraints[0].type_; - op_constraints[count].value_ = op_constraints[0].value_; + if (op_constraints[count].type_ == kSameAsInput) { + int input_index = op_constraints[count].value_; + CHECK_LT(input_index, instr->InputCount()); + op_constraints[count].type_ = op_constraints[input_index].type_; + op_constraints[count].value_ = op_constraints[input_index].value_; } VerifyOutput(op_constraints[count]); } @@ -105,7 +106,7 @@ RegisterAllocatorVerifier::RegisterAllocatorVerifier( void RegisterAllocatorVerifier::VerifyInput( const OperandConstraint& constraint) { - CHECK_NE(kSameAsFirst, constraint.type_); + CHECK_NE(kSameAsInput, constraint.type_); if (constraint.type_ != kImmediate) { CHECK_NE(InstructionOperand::kInvalidVirtualRegister, constraint.virtual_register_); @@ -114,7 +115,7 @@ void RegisterAllocatorVerifier::VerifyInput( void RegisterAllocatorVerifier::VerifyTemp( const OperandConstraint& constraint) { - CHECK_NE(kSameAsFirst, constraint.type_); + CHECK_NE(kSameAsInput, constraint.type_); CHECK_NE(kImmediate, constraint.type_); CHECK_NE(kConstant, constraint.type_); } @@ -212,8 +213,9 @@ void RegisterAllocatorVerifier::BuildConstraint(const InstructionOperand* op, constraint->value_ = ElementSizeLog2Of(sequence()->GetRepresentation(vreg)); break; - case UnallocatedOperand::SAME_AS_FIRST_INPUT: - constraint->type_ = kSameAsFirst; + case UnallocatedOperand::SAME_AS_INPUT: + constraint->type_ = kSameAsInput; + constraint->value_ = unallocated->input_index(); break; } } @@ -269,7 +271,7 @@ void RegisterAllocatorVerifier::CheckConstraint( CHECK_WITH_MSG(op->IsRegister() || op->IsStackSlot() || op->IsConstant(), caller_info_); return; - case kSameAsFirst: + case kSameAsInput: CHECK_WITH_MSG(false, caller_info_); return; } diff --git a/deps/v8/src/compiler/backend/register-allocator-verifier.h b/deps/v8/src/compiler/backend/register-allocator-verifier.h index 11bd4924f4..c812642d33 100644 --- a/deps/v8/src/compiler/backend/register-allocator-verifier.h +++ b/deps/v8/src/compiler/backend/register-allocator-verifier.h @@ -219,7 +219,7 @@ class RegisterAllocatorVerifier final : public ZoneObject { kRegisterOrSlot, kRegisterOrSlotFP, kRegisterOrSlotOrConstant, - kSameAsFirst, + kSameAsInput, kRegisterAndSlot }; diff --git a/deps/v8/src/compiler/backend/register-allocator.cc b/deps/v8/src/compiler/backend/register-allocator.cc index 3cd6cd98de..0649fd5fd0 100644 --- a/deps/v8/src/compiler/backend/register-allocator.cc +++ b/deps/v8/src/compiler/backend/register-allocator.cc @@ -1373,21 +1373,6 @@ TopLevelLiveRange* TopTierRegisterAllocationData::NewLiveRange( return allocation_zone()->New<TopLevelLiveRange>(index, rep); } -int TopTierRegisterAllocationData::GetNextLiveRangeId() { - int vreg = virtual_register_count_++; - if (vreg >= static_cast<int>(live_ranges().size())) { - live_ranges().resize(vreg + 1, nullptr); - } - return vreg; -} - -TopLevelLiveRange* TopTierRegisterAllocationData::NextLiveRange( - MachineRepresentation rep) { - int vreg = GetNextLiveRangeId(); - TopLevelLiveRange* ret = NewLiveRange(vreg, rep); - return ret; -} - TopTierRegisterAllocationData::PhiMapValue* TopTierRegisterAllocationData::InitializePhiMap(const InstructionBlock* block, PhiInstruction* phi) { @@ -1747,6 +1732,7 @@ void ConstraintBuilder::MeetConstraintsAfter(int instr_index) { void ConstraintBuilder::MeetConstraintsBefore(int instr_index) { Instruction* second = code()->InstructionAt(instr_index); // Handle fixed input operands of second instruction. + ZoneVector<TopLevelLiveRange*>* spilled_consts = nullptr; for (size_t i = 0; i < second->InputCount(); i++) { InstructionOperand* input = second->InputAt(i); if (input->IsImmediate()) { @@ -1757,8 +1743,19 @@ void ConstraintBuilder::MeetConstraintsBefore(int instr_index) { TopLevelLiveRange* range = data()->GetOrCreateLiveRangeFor(cur_input->virtual_register()); if (range->HasSpillOperand() && range->GetSpillOperand()->IsConstant()) { + bool already_spilled = false; + if (spilled_consts == nullptr) { + spilled_consts = + allocation_zone()->New<ZoneVector<TopLevelLiveRange*>>( + allocation_zone()); + } else { + auto it = + std::find(spilled_consts->begin(), spilled_consts->end(), range); + already_spilled = it != spilled_consts->end(); + } auto it = data()->slot_for_const_range().find(range); if (it == data()->slot_for_const_range().end()) { + DCHECK(!already_spilled); int width = ByteWidthForStackSlot(range->representation()); int index = data()->frame()->AllocateSpillSlot(width); auto* slot = AllocatedOperand::New(allocation_zone(), @@ -1766,13 +1763,15 @@ void ConstraintBuilder::MeetConstraintsBefore(int instr_index) { range->representation(), index); it = data()->slot_for_const_range().emplace(range, slot).first; } - auto* slot = it->second; - int input_vreg = cur_input->virtual_register(); - UnallocatedOperand input_copy(UnallocatedOperand::REGISTER_OR_SLOT, - input_vreg); - // Spill at every use position for simplicity. This case is very rare - - // the only known instance is crbug.com/1146880. - data()->AddGapMove(instr_index, Instruction::END, input_copy, *slot); + if (!already_spilled) { + auto* slot = it->second; + int input_vreg = cur_input->virtual_register(); + UnallocatedOperand input_copy(UnallocatedOperand::REGISTER_OR_SLOT, + input_vreg); + // Spill at every use position for simplicity, this case is very rare. + data()->AddGapMove(instr_index, Instruction::END, input_copy, *slot); + spilled_consts->push_back(range); + } } } if (cur_input->HasFixedPolicy()) { @@ -1792,7 +1791,7 @@ void ConstraintBuilder::MeetConstraintsBefore(int instr_index) { if (!second_output->HasSameAsInputPolicy()) continue; DCHECK_EQ(0, i); // Only valid for first output. UnallocatedOperand* cur_input = - UnallocatedOperand::cast(second->InputAt(0)); + UnallocatedOperand::cast(second->InputAt(second_output->input_index())); int output_vreg = second_output->virtual_register(); int input_vreg = cur_input->virtual_register(); UnallocatedOperand input_copy(UnallocatedOperand::REGISTER_OR_SLOT, @@ -3958,7 +3957,8 @@ void LinearScanAllocator::FindFreeRegistersForRange( // interesting to this range anyway. // TODO(mtrofin): extend to aliased ranges, too. if ((kSimpleFPAliasing || !check_fp_aliasing()) && - positions[cur_reg] <= cur_inactive->NextStart()) { + (positions[cur_reg] <= cur_inactive->NextStart() || + range->End() <= cur_inactive->NextStart())) { break; } LifetimePosition next_intersection = diff --git a/deps/v8/src/compiler/backend/register-allocator.h b/deps/v8/src/compiler/backend/register-allocator.h index 214a1d1308..a9c3ca5ae0 100644 --- a/deps/v8/src/compiler/backend/register-allocator.h +++ b/deps/v8/src/compiler/backend/register-allocator.h @@ -305,7 +305,6 @@ class TopTierRegisterAllocationData final : public RegisterAllocationData { TopLevelLiveRange* GetOrCreateLiveRangeFor(int index); // Creates a new live range. TopLevelLiveRange* NewLiveRange(int index, MachineRepresentation rep); - TopLevelLiveRange* NextLiveRange(MachineRepresentation rep); SpillRange* AssignSpillRangeToLiveRange(TopLevelLiveRange* range, SpillMode spill_mode); @@ -356,8 +355,6 @@ class TopTierRegisterAllocationData final : public RegisterAllocationData { } private: - int GetNextLiveRangeId(); - Zone* const allocation_zone_; Frame* const frame_; InstructionSequence* const code_; diff --git a/deps/v8/src/compiler/backend/riscv64/code-generator-riscv64.cc b/deps/v8/src/compiler/backend/riscv64/code-generator-riscv64.cc index f01941883e..007edd7a96 100644 --- a/deps/v8/src/compiler/backend/riscv64/code-generator-riscv64.cc +++ b/deps/v8/src/compiler/backend/riscv64/code-generator-riscv64.cc @@ -157,18 +157,16 @@ class OutOfLineRecordWrite final : public OutOfLineCode { zone_(gen->zone()) {} void Generate() final { - if (mode_ > RecordWriteMode::kValueIsPointer) { - __ JumpIfSmi(value_, exit()); - } __ CheckPageFlag(value_, scratch0_, MemoryChunk::kPointersToHereAreInterestingMask, eq, exit()); __ Add64(scratch1_, object_, index_); RememberedSetAction const remembered_set_action = - mode_ > RecordWriteMode::kValueIsMap ? EMIT_REMEMBERED_SET - : OMIT_REMEMBERED_SET; - SaveFPRegsMode const save_fp_mode = - frame()->DidAllocateDoubleRegisters() ? kSaveFPRegs : kDontSaveFPRegs; + mode_ > RecordWriteMode::kValueIsMap ? RememberedSetAction::kEmit + : RememberedSetAction::kOmit; + SaveFPRegsMode const save_fp_mode = frame()->DidAllocateDoubleRegisters() + ? SaveFPRegsMode::kSave + : SaveFPRegsMode::kIgnore; if (must_save_lr_) { // We need to save and restore ra if the frame was elided. __ Push(ra); @@ -488,6 +486,11 @@ void CodeGenerator::AssemblePrepareTailCall() { frame_access_state()->SetFrameAccessToSP(); } +void CodeGenerator::AssembleArchSelect(Instruction* instr, + FlagsCondition condition) { + UNIMPLEMENTED(); +} + namespace { void AdjustStackPointerForTailCall(TurboAssembler* tasm, @@ -606,8 +609,8 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( Address wasm_code = static_cast<Address>(constant.ToInt64()); __ Call(wasm_code, constant.rmode()); } else { - __ Add64(kScratchReg, i.InputRegister(0), 0); - __ Call(kScratchReg); + __ Add64(t6, i.InputRegister(0), 0); + __ Call(t6); } RecordCallPosition(instr); frame_access_state()->ClearSPDelta(); @@ -676,7 +679,8 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( case kArchSaveCallerRegisters: { fp_mode_ = static_cast<SaveFPRegsMode>(MiscField::decode(instr->opcode())); - DCHECK(fp_mode_ == kDontSaveFPRegs || fp_mode_ == kSaveFPRegs); + DCHECK(fp_mode_ == SaveFPRegsMode::kIgnore || + fp_mode_ == SaveFPRegsMode::kSave); // kReturnRegister0 should have been saved before entering the stub. int bytes = __ PushCallerSaved(fp_mode_, kReturnRegister0); DCHECK(IsAligned(bytes, kSystemPointerSize)); @@ -689,7 +693,8 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( case kArchRestoreCallerRegisters: { DCHECK(fp_mode_ == static_cast<SaveFPRegsMode>(MiscField::decode(instr->opcode()))); - DCHECK(fp_mode_ == kDontSaveFPRegs || fp_mode_ == kSaveFPRegs); + DCHECK(fp_mode_ == SaveFPRegsMode::kIgnore || + fp_mode_ == SaveFPRegsMode::kSave); // Don't overwrite the returned value. int bytes = __ PopCallerSaved(fp_mode_, kReturnRegister0); frame_access_state()->IncreaseSPDelta(-(bytes / kSystemPointerSize)); @@ -816,6 +821,9 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( DetermineStubCallMode()); __ Add64(kScratchReg, object, index); __ Sd(value, MemOperand(kScratchReg)); + if (mode > RecordWriteMode::kValueIsPointer) { + __ JumpIfSmi(value, ool->exit()); + } __ CheckPageFlag(object, scratch0, MemoryChunk::kPointersFromHereAreInterestingMask, ne, ool->entry()); @@ -1122,6 +1130,9 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( case kRiscvCmp: // Pseudo-instruction used for cmp/branch. No opcode emitted here. break; + case kRiscvCmpZero: + // Pseudo-instruction used for cmpzero/branch. No opcode emitted here. + break; case kRiscvMov: // TODO(plind): Should we combine mov/li like this, or use separate instr? // - Also see x64 ASSEMBLE_BINOP & RegisterOrOperandType @@ -1841,7 +1852,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( UNIMPLEMENTED(); } return kSuccess; -} // NOLINT(readability/fn_size) +} #define UNSUPPORTED_COND(opcode, condition) \ StdoutStream{} << "Unsupported " << #opcode << " condition: \"" << condition \ @@ -1902,6 +1913,9 @@ void AssembleBranchToLabels(CodeGenerator* gen, TurboAssembler* tasm, } else if (instr->arch_opcode() == kRiscvCmp) { cc = FlagsConditionToConditionCmp(condition); __ Branch(tlabel, cc, i.InputRegister(0), i.InputOperand(1)); + } else if (instr->arch_opcode() == kRiscvCmpZero) { + cc = FlagsConditionToConditionCmp(condition); + __ Branch(tlabel, cc, i.InputRegister(0), Operand(zero_reg)); } else if (instr->arch_opcode() == kArchStackPointerGreaterThan) { cc = FlagsConditionToConditionCmp(condition); Register lhs_register = sp; @@ -1957,6 +1971,12 @@ void CodeGenerator::AssembleBranchPoisoning(FlagsCondition condition, __ LoadZeroIfConditionNotZero(kSpeculationPoisonRegister, kScratchReg); } return; + case kRiscvCmpZero: { + __ CompareI(kScratchReg, i.InputRegister(0), Operand(zero_reg), + FlagsConditionToConditionCmp(condition)); + __ LoadZeroIfConditionNotZero(kSpeculationPoisonRegister, kScratchReg); + } + return; case kRiscvTst: { switch (condition) { case kEqual: @@ -2224,6 +2244,68 @@ void CodeGenerator::AssembleArchBoolean(Instruction* instr, UNREACHABLE(); } return; + } else if (instr->arch_opcode() == kRiscvCmpZero) { + cc = FlagsConditionToConditionCmp(condition); + switch (cc) { + case eq: { + Register left = i.InputRegister(0); + __ Sltu(result, left, 1); + break; + } + case ne: { + Register left = i.InputRegister(0); + __ Sltu(result, zero_reg, left); + break; + } + case lt: + case ge: { + Register left = i.InputRegister(0); + Operand right = Operand(zero_reg); + __ Slt(result, left, right); + if (cc == ge) { + __ Xor(result, result, 1); + } + } break; + case gt: + case le: { + Operand left = i.InputOperand(0); + __ Slt(result, zero_reg, left); + if (cc == le) { + __ Xor(result, result, 1); + } + } break; + case Uless: + case Ugreater_equal: { + Register left = i.InputRegister(0); + Operand right = Operand(zero_reg); + __ Sltu(result, left, right); + if (cc == Ugreater_equal) { + __ Xor(result, result, 1); + } + } break; + case Ugreater: + case Uless_equal: { + Register left = zero_reg; + Operand right = i.InputOperand(0); + __ Sltu(result, left, right); + if (cc == Uless_equal) { + __ Xor(result, result, 1); + } + } break; + default: + UNREACHABLE(); + } + return; + } else if (instr->arch_opcode() == kArchStackPointerGreaterThan) { + cc = FlagsConditionToConditionCmp(condition); + Register lhs_register = sp; + uint32_t offset; + if (ShouldApplyOffsetToStackCheck(instr, &offset)) { + lhs_register = i.TempRegister(0); + __ Sub64(lhs_register, sp, offset); + } + __ Sgtu(result, lhs_register, Operand(i.InputRegister(0))); + return; } else if (instr->arch_opcode() == kRiscvCmpD || instr->arch_opcode() == kRiscvCmpS) { FPURegister left = i.InputOrZeroDoubleRegister(0); @@ -2346,7 +2428,7 @@ void CodeGenerator::AssembleConstructFrame() { // frame is still on the stack. Optimized code uses OSR values directly from // the unoptimized frame. Thus, all that needs to be done is to allocate the // remaining stack slots. - if (FLAG_code_comments) __ RecordComment("-- OSR entrypoint --"); + __ RecordComment("-- OSR entrypoint --"); osr_pc_offset_ = __ pc_offset(); required_slots -= osr_helper()->UnoptimizedFrameSlots(); ResetSpeculationPoison(); @@ -2448,7 +2530,7 @@ void CodeGenerator::AssembleReturn(InstructionOperand* additional_pop_count) { if (parameter_slots != 0) { if (additional_pop_count->IsImmediate()) { DCHECK_EQ(g.ToConstant(additional_pop_count).ToInt32(), 0); - } else if (__ emit_debug_code()) { + } else if (FLAG_debug_code) { __ Assert(eq, AbortReason::kUnexpectedAdditionalPopValue, g.ToRegister(additional_pop_count), Operand(static_cast<int64_t>(0))); @@ -2510,7 +2592,7 @@ void CodeGenerator::AssembleReturn(InstructionOperand* additional_pop_count) { __ Ret(); } -void CodeGenerator::FinishCode() {} +void CodeGenerator::FinishCode() { __ ForceConstantPoolEmissionWithoutJump(); } void CodeGenerator::PrepareForDeoptimizationExits( ZoneDeque<DeoptimizationExit*>* exits) {} diff --git a/deps/v8/src/compiler/backend/riscv64/instruction-codes-riscv64.h b/deps/v8/src/compiler/backend/riscv64/instruction-codes-riscv64.h index 61921d1585..f230ce3377 100644 --- a/deps/v8/src/compiler/backend/riscv64/instruction-codes-riscv64.h +++ b/deps/v8/src/compiler/backend/riscv64/instruction-codes-riscv64.h @@ -59,6 +59,7 @@ namespace compiler { V(RiscvMov) \ V(RiscvTst) \ V(RiscvCmp) \ + V(RiscvCmpZero) \ V(RiscvCmpS) \ V(RiscvAddS) \ V(RiscvSubS) \ diff --git a/deps/v8/src/compiler/backend/riscv64/instruction-scheduler-riscv64.cc b/deps/v8/src/compiler/backend/riscv64/instruction-scheduler-riscv64.cc index b83942ffce..c9210ded8f 100644 --- a/deps/v8/src/compiler/backend/riscv64/instruction-scheduler-riscv64.cc +++ b/deps/v8/src/compiler/backend/riscv64/instruction-scheduler-riscv64.cc @@ -32,6 +32,7 @@ int InstructionScheduler::GetTargetInstructionFlags( case kRiscvCeilWS: case kRiscvClz32: case kRiscvCmp: + case kRiscvCmpZero: case kRiscvCmpD: case kRiscvCmpS: case kRiscvCtz32: @@ -812,7 +813,7 @@ int MultiPushFPULatency() { int PushCallerSavedLatency(SaveFPRegsMode fp_mode) { int latency = MultiPushLatency(); - if (fp_mode == kSaveFPRegs) { + if (fp_mode == SaveFPRegsMode::kSave) { latency += MultiPushFPULatency(); } return latency; @@ -836,7 +837,7 @@ int MultiPopFPULatency() { int PopCallerSavedLatency(SaveFPRegsMode fp_mode) { int latency = MultiPopLatency(); - if (fp_mode == kSaveFPRegs) { + if (fp_mode == SaveFPRegsMode::kSave) { latency += MultiPopFPULatency(); } return latency; diff --git a/deps/v8/src/compiler/backend/riscv64/instruction-selector-riscv64.cc b/deps/v8/src/compiler/backend/riscv64/instruction-selector-riscv64.cc index 1d6b506685..83865fde13 100644 --- a/deps/v8/src/compiler/backend/riscv64/instruction-selector-riscv64.cc +++ b/deps/v8/src/compiler/backend/riscv64/instruction-selector-riscv64.cc @@ -459,6 +459,7 @@ void InstructionSelector::VisitLoad(Node* node) { break; case MachineRepresentation::kCompressedPointer: // Fall through. case MachineRepresentation::kCompressed: // Fall through. + case MachineRepresentation::kMapWord: // Fall through. case MachineRepresentation::kNone: UNREACHABLE(); } @@ -533,6 +534,7 @@ void InstructionSelector::VisitStore(Node* node) { break; case MachineRepresentation::kCompressedPointer: // Fall through. case MachineRepresentation::kCompressed: // Fall through. + case MachineRepresentation::kMapWord: // Fall through. case MachineRepresentation::kNone: UNREACHABLE(); } @@ -1214,7 +1216,9 @@ void InstructionSelector::VisitBitcastWord32ToWord64(Node* node) { void InstructionSelector::VisitChangeInt32ToInt64(Node* node) { Node* value = node->InputAt(0); - if (value->opcode() == IrOpcode::kLoad && CanCover(node, value)) { + if ((value->opcode() == IrOpcode::kLoad || + value->opcode() == IrOpcode::kLoadImmutable) && + CanCover(node, value)) { // Generate sign-extending load. LoadRepresentation load_rep = LoadRepresentationOf(value->op()); InstructionCode opcode = kArchNop; @@ -1242,7 +1246,8 @@ void InstructionSelector::VisitChangeInt32ToInt64(Node* node) { bool InstructionSelector::ZeroExtendsWord32ToWord64NoPhis(Node* node) { DCHECK_NE(node->opcode(), IrOpcode::kPhi); - if (node->opcode() == IrOpcode::kLoad) { + if (node->opcode() == IrOpcode::kLoad || + node->opcode() == IrOpcode::kLoadImmutable) { LoadRepresentation load_rep = LoadRepresentationOf(node->op()); if (load_rep.IsUnsigned()) { switch (load_rep.representation()) { @@ -1598,6 +1603,7 @@ void InstructionSelector::VisitUnalignedLoad(Node* node) { case MachineRepresentation::kBit: // Fall through. case MachineRepresentation::kCompressedPointer: // Fall through. case MachineRepresentation::kCompressed: // Fall through. + case MachineRepresentation::kMapWord: // Fall through. case MachineRepresentation::kNone: UNREACHABLE(); } @@ -1651,6 +1657,7 @@ void InstructionSelector::VisitUnalignedStore(Node* node) { case MachineRepresentation::kBit: // Fall through. case MachineRepresentation::kCompressedPointer: // Fall through. case MachineRepresentation::kCompressed: // Fall through. + case MachineRepresentation::kMapWord: // Fall through. case MachineRepresentation::kNone: UNREACHABLE(); } @@ -1878,8 +1885,7 @@ void VisitWord64Compare(InstructionSelector* selector, Node* node, void EmitWordCompareZero(InstructionSelector* selector, Node* value, FlagsContinuation* cont) { RiscvOperandGenerator g(selector); - selector->EmitWithContinuation(kRiscvCmp, g.UseRegister(value), - g.TempImmediate(0), cont); + selector->EmitWithContinuation(kRiscvCmpZero, g.UseRegister(value), cont); } void VisitAtomicLoad(InstructionSelector* selector, Node* node, @@ -2654,7 +2660,7 @@ void InstructionSelector::VisitInt64AbsWithOverflow(Node* node) { V(I32x4AllTrue, kRiscvI32x4AllTrue) \ V(I16x8AllTrue, kRiscvI16x8AllTrue) \ V(I8x16AllTrue, kRiscvI8x16AllTrue) \ - V(I64x2AllTrue, kRiscvI64x2AllTrue) \ + V(I64x2AllTrue, kRiscvI64x2AllTrue) #define SIMD_SHIFT_OP_LIST(V) \ V(I64x2Shl) \ @@ -3015,6 +3021,12 @@ VISIT_EXT_MUL(I16x8, I8x16S) VISIT_EXT_MUL(I16x8, I8x16U) #undef VISIT_EXT_MUL +void InstructionSelector::AddOutputToSelectContinuation(OperandGenerator* g, + int first_input_index, + Node* node) { + UNREACHABLE(); +} + // static MachineOperatorBuilder::Flags InstructionSelector::SupportedMachineOperatorFlags() { diff --git a/deps/v8/src/compiler/backend/s390/code-generator-s390.cc b/deps/v8/src/compiler/backend/s390/code-generator-s390.cc index c5e16b3e49..a6c7dda9b4 100644 --- a/deps/v8/src/compiler/backend/s390/code-generator-s390.cc +++ b/deps/v8/src/compiler/backend/s390/code-generator-s390.cc @@ -206,9 +206,6 @@ class OutOfLineRecordWrite final : public OutOfLineCode { zone_(gen->zone()) {} void Generate() final { - if (mode_ > RecordWriteMode::kValueIsPointer) { - __ JumpIfSmi(value_, exit()); - } if (COMPRESS_POINTERS_BOOL) { __ DecompressTaggedPointer(value_, value_); } @@ -222,10 +219,11 @@ class OutOfLineRecordWrite final : public OutOfLineCode { __ AddS64(scratch1_, object_, offset_); } RememberedSetAction const remembered_set_action = - mode_ > RecordWriteMode::kValueIsMap ? EMIT_REMEMBERED_SET - : OMIT_REMEMBERED_SET; - SaveFPRegsMode const save_fp_mode = - frame()->DidAllocateDoubleRegisters() ? kSaveFPRegs : kDontSaveFPRegs; + mode_ > RecordWriteMode::kValueIsMap ? RememberedSetAction::kEmit + : RememberedSetAction::kOmit; + SaveFPRegsMode const save_fp_mode = frame()->DidAllocateDoubleRegisters() + ? SaveFPRegsMode::kSave + : SaveFPRegsMode::kIgnore; if (must_save_lr_) { // We need to save and restore r14 if the frame was elided. __ Push(r14); @@ -1207,7 +1205,8 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( case kArchSaveCallerRegisters: { fp_mode_ = static_cast<SaveFPRegsMode>(MiscField::decode(instr->opcode())); - DCHECK(fp_mode_ == kDontSaveFPRegs || fp_mode_ == kSaveFPRegs); + DCHECK(fp_mode_ == SaveFPRegsMode::kIgnore || + fp_mode_ == SaveFPRegsMode::kSave); // kReturnRegister0 should have been saved before entering the stub. int bytes = __ PushCallerSaved(fp_mode_, kReturnRegister0); DCHECK(IsAligned(bytes, kSystemPointerSize)); @@ -1220,7 +1219,8 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( case kArchRestoreCallerRegisters: { DCHECK(fp_mode_ == static_cast<SaveFPRegsMode>(MiscField::decode(instr->opcode()))); - DCHECK(fp_mode_ == kDontSaveFPRegs || fp_mode_ == kSaveFPRegs); + DCHECK(fp_mode_ == SaveFPRegsMode::kIgnore || + fp_mode_ == SaveFPRegsMode::kSave); // Don't overwrite the returned value. int bytes = __ PopCallerSaved(fp_mode_, kReturnRegister0); frame_access_state()->IncreaseSPDelta(-(bytes / kSystemPointerSize)); @@ -1374,6 +1374,9 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( DetermineStubCallMode(), &unwinding_info_writer_); __ StoreTaggedField(value, MemOperand(object, offset)); } + if (mode > RecordWriteMode::kValueIsPointer) { + __ JumpIfSmi(value, ool->exit()); + } __ CheckPageFlag(object, scratch0, MemoryChunk::kPointersFromHereAreInterestingMask, ne, ool->entry()); @@ -1692,16 +1695,13 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( ASSEMBLE_UNARY_OP(D_DInstr(sqdbr), nullInstr, nullInstr); break; case kS390_FloorFloat: - __ fiebra(ROUND_TOWARD_NEG_INF, i.OutputDoubleRegister(), - i.InputDoubleRegister(0)); + __ FloorF32(i.OutputDoubleRegister(), i.InputDoubleRegister(0)); break; case kS390_CeilFloat: - __ fiebra(ROUND_TOWARD_POS_INF, i.OutputDoubleRegister(), - i.InputDoubleRegister(0)); + __ CeilF32(i.OutputDoubleRegister(), i.InputDoubleRegister(0)); break; case kS390_TruncateFloat: - __ fiebra(ROUND_TOWARD_0, i.OutputDoubleRegister(), - i.InputDoubleRegister(0)); + __ TruncF32(i.OutputDoubleRegister(), i.InputDoubleRegister(0)); break; // Double operations case kS390_ModDouble: @@ -1797,16 +1797,13 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( __ lpdbr(i.OutputDoubleRegister(), i.InputDoubleRegister(0)); break; case kS390_FloorDouble: - __ fidbra(ROUND_TOWARD_NEG_INF, i.OutputDoubleRegister(), - i.InputDoubleRegister(0)); + __ FloorF64(i.OutputDoubleRegister(), i.InputDoubleRegister(0)); break; case kS390_CeilDouble: - __ fidbra(ROUND_TOWARD_POS_INF, i.OutputDoubleRegister(), - i.InputDoubleRegister(0)); + __ CeilF64(i.OutputDoubleRegister(), i.InputDoubleRegister(0)); break; case kS390_TruncateDouble: - __ fidbra(ROUND_TOWARD_0, i.OutputDoubleRegister(), - i.InputDoubleRegister(0)); + __ TruncF64(i.OutputDoubleRegister(), i.InputDoubleRegister(0)); break; case kS390_RoundDouble: __ fidbra(ROUND_TO_NEAREST_AWAY_FROM_0, i.OutputDoubleRegister(), @@ -2992,12 +2989,10 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( break; } case kS390_I32x4GeS: { - __ vceq(kScratchDoubleReg, i.InputSimd128Register(0), - i.InputSimd128Register(1), Condition(0), Condition(2)); - __ vch(i.OutputSimd128Register(), i.InputSimd128Register(0), - i.InputSimd128Register(1), Condition(0), Condition(2)); - __ vo(i.OutputSimd128Register(), i.OutputSimd128Register(), - kScratchDoubleReg, Condition(0), Condition(0), Condition(2)); + __ vch(kScratchDoubleReg, i.InputSimd128Register(1), + i.InputSimd128Register(0), Condition(0), Condition(2)); + __ vno(i.OutputSimd128Register(), kScratchDoubleReg, kScratchDoubleReg, + Condition(0), Condition(0), Condition(2)); break; } case kS390_I32x4GtU: { @@ -3020,12 +3015,10 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( break; } case kS390_I16x8GeS: { - __ vceq(kScratchDoubleReg, i.InputSimd128Register(0), - i.InputSimd128Register(1), Condition(0), Condition(1)); - __ vch(i.OutputSimd128Register(), i.InputSimd128Register(0), - i.InputSimd128Register(1), Condition(0), Condition(1)); - __ vo(i.OutputSimd128Register(), i.OutputSimd128Register(), - kScratchDoubleReg, Condition(0), Condition(0), Condition(1)); + __ vch(kScratchDoubleReg, i.InputSimd128Register(1), + i.InputSimd128Register(0), Condition(0), Condition(1)); + __ vno(i.OutputSimd128Register(), kScratchDoubleReg, kScratchDoubleReg, + Condition(0), Condition(0), Condition(1)); break; } case kS390_I16x8GtU: { @@ -3048,12 +3041,10 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( break; } case kS390_I8x16GeS: { - __ vceq(kScratchDoubleReg, i.InputSimd128Register(0), - i.InputSimd128Register(1), Condition(0), Condition(0)); - __ vch(i.OutputSimd128Register(), i.InputSimd128Register(0), - i.InputSimd128Register(1), Condition(0), Condition(0)); - __ vo(i.OutputSimd128Register(), i.OutputSimd128Register(), - kScratchDoubleReg, Condition(0), Condition(0), Condition(0)); + __ vch(kScratchDoubleReg, i.InputSimd128Register(1), + i.InputSimd128Register(0), Condition(0), Condition(0)); + __ vno(i.OutputSimd128Register(), kScratchDoubleReg, kScratchDoubleReg, + Condition(0), Condition(0), Condition(0)); break; } case kS390_I8x16GtU: { @@ -3289,11 +3280,11 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( break; } case kS390_S128Const: { - for (int index = 0, j = 0; index < 2; index++, j = +2) { - __ mov(index < 1 ? ip : r0, Operand(i.InputInt32(j))); - __ iihf(index < 1 ? ip : r0, Operand(i.InputInt32(j + 1))); - } - __ vlvgp(i.OutputSimd128Register(), r0, ip); + uint64_t low = make_uint64(i.InputUint32(1), i.InputUint32(0)); + uint64_t high = make_uint64(i.InputUint32(3), i.InputUint32(2)); + __ mov(r0, Operand(low)); + __ mov(ip, Operand(high)); + __ vlvgp(i.OutputSimd128Register(), ip, r0); break; } case kS390_S128Zero: { @@ -3561,15 +3552,12 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( Simd128Register dst = i.OutputSimd128Register(), src0 = i.InputSimd128Register(0), src1 = i.InputSimd128Register(1); - int32_t k8x16_indices[] = {i.InputInt32(2), i.InputInt32(3), - i.InputInt32(4), i.InputInt32(5)}; - // create 2 * 8 byte inputs indicating new indices - for (int i = 0, j = 0; i < 2; i++, j = +2) { - __ mov(i < 1 ? ip : r0, Operand(k8x16_indices[j])); - __ iihf(i < 1 ? ip : r0, Operand(k8x16_indices[j + 1])); - } - __ vlvgp(kScratchDoubleReg, r0, ip); - __ vperm(dst, src0, src1, kScratchDoubleReg, Condition(0), Condition(0)); + uint64_t low = make_uint64(i.InputUint32(3), i.InputUint32(2)); + uint64_t high = make_uint64(i.InputUint32(5), i.InputUint32(4)); + __ mov(r0, Operand(low)); + __ mov(ip, Operand(high)); + __ vlvgp(dst, ip, r0); + __ vperm(dst, src0, src1, dst, Condition(0), Condition(0)); break; } case kS390_I8x16Swizzle: { @@ -3712,80 +3700,65 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( Condition(0), Condition(0), Condition(2)); break; } -#define ASSEMBLE_SIMD_I64X2_EXT_MUL(UNPACK_INSTR) \ - __ UNPACK_INSTR(kScratchDoubleReg, i.InputSimd128Register(0), Condition(0), \ - Condition(0), Condition(2)); \ - __ UNPACK_INSTR(i.OutputSimd128Register(), i.InputSimd128Register(1), \ - Condition(0), Condition(0), Condition(2)); \ - Register scratch_0 = r0; \ - Register scratch_1 = r1; \ - for (int lane = 0; lane < 2; lane++) { \ - __ vlgv(scratch_0, kScratchDoubleReg, MemOperand(r0, lane), Condition(3)); \ - __ vlgv(scratch_1, i.OutputSimd128Register(), MemOperand(r0, lane), \ - Condition(3)); \ - __ MulS64(scratch_0, scratch_1); \ - scratch_0 = r1; \ - scratch_1 = ip; \ - } \ - __ vlvgp(i.OutputSimd128Register(), r0, r1); +#define EXT_MUL(mul_even, mul_odd, merge, mode) \ + Simd128Register dst = i.OutputSimd128Register(), \ + src0 = i.InputSimd128Register(0), \ + src1 = i.InputSimd128Register(1); \ + __ mul_even(dst, src0, src1, Condition(0), Condition(0), Condition(mode)); \ + __ mul_odd(kScratchDoubleReg, src0, src1, Condition(0), Condition(0), \ + Condition(mode)); \ + __ merge(dst, dst, kScratchDoubleReg, Condition(0), Condition(0), \ + Condition(mode + 1)); case kS390_I64x2ExtMulLowI32x4S: { - ASSEMBLE_SIMD_I64X2_EXT_MUL(vupl) + EXT_MUL(vme, vmo, vmrl, 2) break; } case kS390_I64x2ExtMulHighI32x4S: { - ASSEMBLE_SIMD_I64X2_EXT_MUL(vuph) + EXT_MUL(vme, vmo, vmrh, 2) break; } case kS390_I64x2ExtMulLowI32x4U: { - ASSEMBLE_SIMD_I64X2_EXT_MUL(vupll) + EXT_MUL(vmle, vmlo, vmrl, 2) break; } case kS390_I64x2ExtMulHighI32x4U: { - ASSEMBLE_SIMD_I64X2_EXT_MUL(vuplh) - break; - } -#undef ASSEMBLE_SIMD_I64X2_EXT_MUL -#define ASSEMBLE_SIMD_I32X4_I16X8_EXT_MUL(UNPACK_INSTR, MODE) \ - __ UNPACK_INSTR(kScratchDoubleReg, i.InputSimd128Register(0), Condition(0), \ - Condition(0), Condition(MODE)); \ - __ UNPACK_INSTR(i.OutputSimd128Register(), i.InputSimd128Register(1), \ - Condition(0), Condition(0), Condition(MODE)); \ - __ vml(i.OutputSimd128Register(), kScratchDoubleReg, \ - i.OutputSimd128Register(), Condition(0), Condition(0), \ - Condition(MODE + 1)); + EXT_MUL(vmle, vmlo, vmrh, 2) + break; + } case kS390_I32x4ExtMulLowI16x8S: { - ASSEMBLE_SIMD_I32X4_I16X8_EXT_MUL(vupl, 1) + EXT_MUL(vme, vmo, vmrl, 1) break; } case kS390_I32x4ExtMulHighI16x8S: { - ASSEMBLE_SIMD_I32X4_I16X8_EXT_MUL(vuph, 1) + EXT_MUL(vme, vmo, vmrh, 1) break; } case kS390_I32x4ExtMulLowI16x8U: { - ASSEMBLE_SIMD_I32X4_I16X8_EXT_MUL(vupll, 1) + EXT_MUL(vmle, vmlo, vmrl, 1) break; } case kS390_I32x4ExtMulHighI16x8U: { - ASSEMBLE_SIMD_I32X4_I16X8_EXT_MUL(vuplh, 1) + EXT_MUL(vmle, vmlo, vmrh, 1) break; } + case kS390_I16x8ExtMulLowI8x16S: { - ASSEMBLE_SIMD_I32X4_I16X8_EXT_MUL(vupl, 0) + EXT_MUL(vme, vmo, vmrl, 0) break; } case kS390_I16x8ExtMulHighI8x16S: { - ASSEMBLE_SIMD_I32X4_I16X8_EXT_MUL(vuph, 0) + EXT_MUL(vme, vmo, vmrh, 0) break; } case kS390_I16x8ExtMulLowI8x16U: { - ASSEMBLE_SIMD_I32X4_I16X8_EXT_MUL(vupll, 0) + EXT_MUL(vmle, vmlo, vmrl, 0) break; } case kS390_I16x8ExtMulHighI8x16U: { - ASSEMBLE_SIMD_I32X4_I16X8_EXT_MUL(vuplh, 0) + EXT_MUL(vmle, vmlo, vmrh, 0) break; } -#undef ASSEMBLE_SIMD_I32X4_I16X8_EXT_MUL +#undef EXT_MUL #define EXT_ADD_PAIRWISE(lane_size, mul_even, mul_odd) \ Simd128Register src = i.InputSimd128Register(0); \ Simd128Register dst = i.OutputSimd128Register(); \ @@ -3942,7 +3915,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( UNREACHABLE(); } return kSuccess; -} // NOLINT(readability/fn_size) +} // Assembles branches after an instruction. void CodeGenerator::AssembleArchBranch(Instruction* instr, BranchInfo* branch) { @@ -4204,7 +4177,7 @@ void CodeGenerator::AssembleConstructFrame() { // frame is still on the stack. Optimized code uses OSR values directly from // the unoptimized frame. Thus, all that needs to be done is to allocate the // remaining stack slots. - if (FLAG_code_comments) __ RecordComment("-- OSR entrypoint --"); + __ RecordComment("-- OSR entrypoint --"); osr_pc_offset_ = __ pc_offset(); required_slots -= osr_helper()->UnoptimizedFrameSlots(); ResetSpeculationPoison(); @@ -4309,7 +4282,7 @@ void CodeGenerator::AssembleReturn(InstructionOperand* additional_pop_count) { if (parameter_slots != 0) { if (additional_pop_count->IsImmediate()) { DCHECK_EQ(g.ToConstant(additional_pop_count).ToInt32(), 0); - } else if (__ emit_debug_code()) { + } else if (FLAG_debug_code) { __ CmpS64(g.ToRegister(additional_pop_count), Operand(0)); __ Assert(eq, AbortReason::kUnexpectedAdditionalPopValue); } diff --git a/deps/v8/src/compiler/backend/s390/instruction-selector-s390.cc b/deps/v8/src/compiler/backend/s390/instruction-selector-s390.cc index f2375525bb..8be70adf54 100644 --- a/deps/v8/src/compiler/backend/s390/instruction-selector-s390.cc +++ b/deps/v8/src/compiler/backend/s390/instruction-selector-s390.cc @@ -141,7 +141,8 @@ class S390OperandGenerator final : public OperandGenerator { bool CanBeMemoryOperand(InstructionCode opcode, Node* user, Node* input, int effect_level) { - if (input->opcode() != IrOpcode::kLoad || + if ((input->opcode() != IrOpcode::kLoad && + input->opcode() != IrOpcode::kLoadImmutable) || !selector()->CanCover(user, input)) { return false; } @@ -320,6 +321,7 @@ ArchOpcode SelectLoadOpcode(Node* node) { case MachineRepresentation::kSimd128: opcode = kS390_LoadSimd128; break; + case MachineRepresentation::kMapWord: // Fall through. case MachineRepresentation::kNone: default: UNREACHABLE(); @@ -798,6 +800,7 @@ static void VisitGeneralStore( value = value->InputAt(0); } break; + case MachineRepresentation::kMapWord: // Fall through. case MachineRepresentation::kNone: UNREACHABLE(); } @@ -2849,6 +2852,12 @@ void InstructionSelector::VisitTruncateFloat32ToUint32(Node* node) { Emit(opcode, g.DefineAsRegister(node), g.UseRegister(node->InputAt(0))); } +void InstructionSelector::AddOutputToSelectContinuation(OperandGenerator* g, + int first_input_index, + Node* node) { + UNREACHABLE(); +} + // static MachineOperatorBuilder::Flags InstructionSelector::SupportedMachineOperatorFlags() { diff --git a/deps/v8/src/compiler/backend/x64/code-generator-x64.cc b/deps/v8/src/compiler/backend/x64/code-generator-x64.cc index 814f14fb4a..11bba2f0f8 100644 --- a/deps/v8/src/compiler/backend/x64/code-generator-x64.cc +++ b/deps/v8/src/compiler/backend/x64/code-generator-x64.cc @@ -276,9 +276,6 @@ class OutOfLineRecordWrite final : public OutOfLineCode { } void Generate() final { - if (mode_ > RecordWriteMode::kValueIsPointer) { - __ JumpIfSmi(value_, exit()); - } if (COMPRESS_POINTERS_BOOL) { __ DecompressTaggedPointer(value_, value_); } @@ -288,10 +285,11 @@ class OutOfLineRecordWrite final : public OutOfLineCode { __ leaq(scratch1_, operand_); RememberedSetAction const remembered_set_action = - mode_ > RecordWriteMode::kValueIsMap ? EMIT_REMEMBERED_SET - : OMIT_REMEMBERED_SET; - SaveFPRegsMode const save_fp_mode = - frame()->DidAllocateDoubleRegisters() ? kSaveFPRegs : kDontSaveFPRegs; + mode_ > RecordWriteMode::kValueIsMap ? RememberedSetAction::kEmit + : RememberedSetAction::kOmit; + SaveFPRegsMode const save_fp_mode = frame()->DidAllocateDoubleRegisters() + ? SaveFPRegsMode::kSave + : SaveFPRegsMode::kIgnore; if (mode_ == RecordWriteMode::kValueIsEphemeronKey) { __ CallEphemeronKeyBarrier(object_, scratch1_, save_fp_mode); @@ -1016,7 +1014,8 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( case kArchSaveCallerRegisters: { fp_mode_ = static_cast<SaveFPRegsMode>(MiscField::decode(instr->opcode())); - DCHECK(fp_mode_ == kDontSaveFPRegs || fp_mode_ == kSaveFPRegs); + DCHECK(fp_mode_ == SaveFPRegsMode::kIgnore || + fp_mode_ == SaveFPRegsMode::kSave); // kReturnRegister0 should have been saved before entering the stub. int bytes = __ PushCallerSaved(fp_mode_, kReturnRegister0); DCHECK(IsAligned(bytes, kSystemPointerSize)); @@ -1029,7 +1028,8 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( case kArchRestoreCallerRegisters: { DCHECK(fp_mode_ == static_cast<SaveFPRegsMode>(MiscField::decode(instr->opcode()))); - DCHECK(fp_mode_ == kDontSaveFPRegs || fp_mode_ == kSaveFPRegs); + DCHECK(fp_mode_ == SaveFPRegsMode::kIgnore || + fp_mode_ == SaveFPRegsMode::kSave); // Don't overwrite the returned value. int bytes = __ PopCallerSaved(fp_mode_, kReturnRegister0); frame_access_state()->IncreaseSPDelta(-(bytes / kSystemPointerSize)); @@ -1190,6 +1190,9 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( scratch0, scratch1, mode, DetermineStubCallMode()); __ StoreTaggedField(operand, value); + if (mode > RecordWriteMode::kValueIsPointer) { + __ JumpIfSmi(value, ool->exit()); + } __ CheckPageFlag(object, scratch0, MemoryChunk::kPointersFromHereAreInterestingMask, not_zero, ool->entry()); @@ -1478,7 +1481,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( // TODO(bmeurer): Use RIP relative 128-bit constants. XMMRegister tmp = i.ToDoubleRegister(instr->TempAt(0)); __ Pcmpeqd(tmp, tmp); - __ Psrlq(tmp, 33); + __ Psrlq(tmp, byte{33}); __ Andps(i.OutputDoubleRegister(), tmp); break; } @@ -1486,7 +1489,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( // TODO(bmeurer): Use RIP relative 128-bit constants. XMMRegister tmp = i.ToDoubleRegister(instr->TempAt(0)); __ Pcmpeqd(tmp, tmp); - __ Psllq(tmp, 31); + __ Psllq(tmp, byte{31}); __ Xorps(i.OutputDoubleRegister(), tmp); break; } @@ -1734,7 +1737,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( __ Cvttss2siq(i.OutputRegister(), i.InputOperand(0)); } if (instr->OutputCount() > 1) { - __ Set(i.OutputRegister(1), 1); + __ Move(i.OutputRegister(1), 1); Label done; Label fail; __ Move(kScratchDoubleReg, static_cast<float>(INT64_MIN)); @@ -1752,7 +1755,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( // INT64_MIN, then the conversion fails. __ j(no_overflow, &done, Label::kNear); __ bind(&fail); - __ Set(i.OutputRegister(1), 0); + __ Move(i.OutputRegister(1), 0); __ bind(&done); } break; @@ -1763,7 +1766,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( __ Cvttsd2siq(i.OutputRegister(0), i.InputOperand(0)); } if (instr->OutputCount() > 1) { - __ Set(i.OutputRegister(1), 1); + __ Move(i.OutputRegister(1), 1); Label done; Label fail; __ Move(kScratchDoubleReg, static_cast<double>(INT64_MIN)); @@ -1781,31 +1784,31 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( // INT64_MIN, then the conversion fails. __ j(no_overflow, &done, Label::kNear); __ bind(&fail); - __ Set(i.OutputRegister(1), 0); + __ Move(i.OutputRegister(1), 0); __ bind(&done); } break; case kSSEFloat32ToUint64: { Label fail; - if (instr->OutputCount() > 1) __ Set(i.OutputRegister(1), 0); + if (instr->OutputCount() > 1) __ Move(i.OutputRegister(1), 0); if (instr->InputAt(0)->IsFPRegister()) { __ Cvttss2uiq(i.OutputRegister(), i.InputDoubleRegister(0), &fail); } else { __ Cvttss2uiq(i.OutputRegister(), i.InputOperand(0), &fail); } - if (instr->OutputCount() > 1) __ Set(i.OutputRegister(1), 1); + if (instr->OutputCount() > 1) __ Move(i.OutputRegister(1), 1); __ bind(&fail); break; } case kSSEFloat64ToUint64: { Label fail; - if (instr->OutputCount() > 1) __ Set(i.OutputRegister(1), 0); + if (instr->OutputCount() > 1) __ Move(i.OutputRegister(1), 0); if (instr->InputAt(0)->IsFPRegister()) { __ Cvttsd2uiq(i.OutputRegister(), i.InputDoubleRegister(0), &fail); } else { __ Cvttsd2uiq(i.OutputRegister(), i.InputOperand(0), &fail); } - if (instr->OutputCount() > 1) __ Set(i.OutputRegister(1), 1); + if (instr->OutputCount() > 1) __ Move(i.OutputRegister(1), 1); __ bind(&fail); break; } @@ -2390,21 +2393,13 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( break; } case kX64F64x2ExtractLane: { - DoubleRegister dst = i.OutputDoubleRegister(); - XMMRegister src = i.InputSimd128Register(0); - uint8_t lane = i.InputUint8(1); - if (lane == 0) { - __ Move(dst, src); - } else { - DCHECK_EQ(1, lane); - if (CpuFeatures::IsSupported(AVX)) { - CpuFeatureScope avx_scope(tasm(), AVX); - // Pass src as operand to avoid false-dependency on dst. - __ vmovhlps(dst, src, src); - } else { - __ movhlps(dst, src); - } - } + __ F64x2ExtractLane(i.OutputDoubleRegister(), i.InputDoubleRegister(0), + i.InputUint8(1)); + break; + } + case kX64F64x2ReplaceLane: { + __ F64x2ReplaceLane(i.OutputSimd128Register(), i.InputSimd128Register(0), + i.InputDoubleRegister(2), i.InputInt8(1)); break; } case kX64F64x2Sqrt: { @@ -2428,42 +2423,17 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( break; } case kX64F64x2Min: { - XMMRegister src1 = i.InputSimd128Register(1), - dst = i.OutputSimd128Register(); - DCHECK_EQ(dst, i.InputSimd128Register(0)); - // The minpd instruction doesn't propagate NaNs and +0's in its first - // operand. Perform minpd in both orders, merge the resuls, and adjust. - __ Movapd(kScratchDoubleReg, src1); - __ Minpd(kScratchDoubleReg, dst); - __ Minpd(dst, src1); - // propagate -0's and NaNs, which may be non-canonical. - __ Orpd(kScratchDoubleReg, dst); - // Canonicalize NaNs by quieting and clearing the payload. - __ Cmppd(dst, kScratchDoubleReg, int8_t{3}); - __ Orpd(kScratchDoubleReg, dst); - __ Psrlq(dst, 13); - __ Andnpd(dst, kScratchDoubleReg); + // Avoids a move in no-AVX case if dst = src0. + DCHECK_EQ(i.OutputSimd128Register(), i.InputSimd128Register(0)); + __ F64x2Min(i.OutputSimd128Register(), i.InputSimd128Register(0), + i.InputSimd128Register(1), kScratchDoubleReg); break; } case kX64F64x2Max: { - XMMRegister src1 = i.InputSimd128Register(1), - dst = i.OutputSimd128Register(); - DCHECK_EQ(dst, i.InputSimd128Register(0)); - // The maxpd instruction doesn't propagate NaNs and +0's in its first - // operand. Perform maxpd in both orders, merge the resuls, and adjust. - __ Movapd(kScratchDoubleReg, src1); - __ Maxpd(kScratchDoubleReg, dst); - __ Maxpd(dst, src1); - // Find discrepancies. - __ Xorpd(dst, kScratchDoubleReg); - // Propagate NaNs, which may be non-canonical. - __ Orpd(kScratchDoubleReg, dst); - // Propagate sign discrepancy and (subtle) quiet NaNs. - __ Subpd(kScratchDoubleReg, dst); - // Canonicalize NaNs by clearing the payload. Sign is non-deterministic. - __ Cmppd(dst, kScratchDoubleReg, int8_t{3}); - __ Psrlq(dst, 13); - __ Andnpd(dst, kScratchDoubleReg); + // Avoids a move in no-AVX case if dst = src0. + DCHECK_EQ(i.OutputSimd128Register(), i.InputSimd128Register(0)); + __ F64x2Max(i.OutputSimd128Register(), i.InputSimd128Register(0), + i.InputSimd128Register(1), kScratchDoubleReg); break; } case kX64F64x2Eq: { @@ -2534,43 +2504,12 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( break; } case kX64F32x4Splat: { - XMMRegister dst = i.OutputSimd128Register(); - XMMRegister src = i.InputDoubleRegister(0); - if (CpuFeatures::IsSupported(AVX2)) { - CpuFeatureScope avx2_scope(tasm(), AVX2); - __ vbroadcastss(dst, src); - } else if (CpuFeatures::IsSupported(AVX)) { - CpuFeatureScope avx_scope(tasm(), AVX); - __ vshufps(dst, src, src, 0); - } else { - if (dst == src) { - // 1 byte shorter than pshufd. - __ shufps(dst, src, 0); - } else { - __ pshufd(dst, src, 0); - } - } + __ F32x4Splat(i.OutputSimd128Register(), i.InputDoubleRegister(0)); break; } case kX64F32x4ExtractLane: { - XMMRegister dst = i.OutputDoubleRegister(); - XMMRegister src = i.InputSimd128Register(0); - uint8_t lane = i.InputUint8(1); - DCHECK_LT(lane, 4); - // These instructions are shorter than insertps, but will leave junk in - // the top lanes of dst. - if (lane == 0) { - __ Move(dst, src); - } else if (lane == 1) { - __ Movshdup(dst, src); - } else if (lane == 2 && dst == src) { - // Check dst == src to avoid false dependency on dst. - __ Movhlps(dst, src); - } else if (dst == src) { - __ Shufps(dst, src, src, lane); - } else { - __ Pshufd(dst, src, lane); - } + __ F32x4ExtractLane(i.OutputFloatRegister(), i.InputSimd128Register(0), + i.InputUint8(1)); break; } case kX64F32x4ReplaceLane: { @@ -2671,7 +2610,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( // propagate -0's and NaNs, which may be non-canonical. __ Orps(kScratchDoubleReg, dst); // Canonicalize NaNs by quieting and clearing the payload. - __ Cmpps(dst, kScratchDoubleReg, int8_t{3}); + __ Cmpunordps(dst, kScratchDoubleReg); __ Orps(kScratchDoubleReg, dst); __ Psrld(dst, byte{10}); __ Andnps(dst, kScratchDoubleReg); @@ -2693,7 +2632,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( // Propagate sign discrepancy and (subtle) quiet NaNs. __ Subps(kScratchDoubleReg, dst); // Canonicalize NaNs by clearing the payload. Sign is non-deterministic. - __ Cmpps(dst, kScratchDoubleReg, int8_t{3}); + __ Cmpunordps(dst, kScratchDoubleReg); __ Psrld(dst, byte{10}); __ Andnps(dst, kScratchDoubleReg); break; @@ -2786,14 +2725,8 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( break; } case kX64I64x2Neg: { - XMMRegister dst = i.OutputSimd128Register(); - XMMRegister src = i.InputSimd128Register(0); - if (dst == src) { - __ Movdqa(kScratchDoubleReg, src); - src = kScratchDoubleReg; - } - __ Pxor(dst, dst); - __ Psubq(dst, src); + __ I64x2Neg(i.OutputSimd128Register(), i.InputSimd128Register(0), + kScratchDoubleReg); break; } case kX64I64x2BitMask: { @@ -2843,15 +2776,15 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( __ Movdqa(tmp2, right); // Multiply high dword of each qword of left with right. - __ Psrlq(tmp1, 32); + __ Psrlq(tmp1, byte{32}); __ Pmuludq(tmp1, right); // Multiply high dword of each qword of right with left. - __ Psrlq(tmp2, 32); + __ Psrlq(tmp2, byte{32}); __ Pmuludq(tmp2, left); __ Paddq(tmp2, tmp1); - __ Psllq(tmp2, 32); + __ Psllq(tmp2, byte{32}); __ Pmuludq(left, right); __ Paddq(left, tmp2); // left == dst @@ -3675,15 +3608,8 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( break; } case kX64S128Not: { - XMMRegister dst = i.OutputSimd128Register(); - XMMRegister src = i.InputSimd128Register(0); - if (dst == src) { - __ Pcmpeqd(kScratchDoubleReg, kScratchDoubleReg); - __ Pxor(dst, kScratchDoubleReg); - } else { - __ Pcmpeqd(dst, dst); - __ Pxor(dst, src); - } + __ S128Not(i.OutputSimd128Register(), i.InputSimd128Register(0), + kScratchDoubleReg); break; } case kX64S128Select: { @@ -4360,7 +4286,7 @@ void CodeGenerator::AssembleArchDeoptBranch(Instruction* instr, __ decl(rax); __ j(not_zero, &nodeopt, Label::kNear); - __ Set(rax, FLAG_deopt_every_n_times); + __ Move(rax, FLAG_deopt_every_n_times); __ store_rax(counter); __ popq(rax); __ popfq(); @@ -4451,7 +4377,43 @@ void CodeGenerator::AssembleArchTableSwitch(Instruction* instr) { void CodeGenerator::AssembleArchSelect(Instruction* instr, FlagsCondition condition) { - UNIMPLEMENTED(); + X64OperandConverter i(this, instr); + MachineRepresentation rep = + LocationOperand::cast(instr->OutputAt(0))->representation(); + Condition cc = FlagsConditionToCondition(condition); + DCHECK_EQ(i.OutputRegister(), i.InputRegister(instr->InputCount() - 2)); + size_t last_input = instr->InputCount() - 1; + // kUnorderedNotEqual can be implemented more efficiently than + // kUnorderedEqual. As the OR of two flags, it can be done with just two + // cmovs. If the condition was originally a kUnorderedEqual, expect the + // instruction selector to have inverted it and swapped the input. + DCHECK_NE(condition, kUnorderedEqual); + if (rep == MachineRepresentation::kWord32) { + if (HasRegisterInput(instr, last_input)) { + __ cmovl(cc, i.OutputRegister(), i.InputRegister(last_input)); + if (condition == kUnorderedNotEqual) { + __ cmovl(parity_even, i.OutputRegister(), i.InputRegister(last_input)); + } + } else { + __ cmovl(cc, i.OutputRegister(), i.InputOperand(last_input)); + if (condition == kUnorderedNotEqual) { + __ cmovl(parity_even, i.OutputRegister(), i.InputOperand(last_input)); + } + } + } else { + DCHECK_EQ(rep, MachineRepresentation::kWord64); + if (HasRegisterInput(instr, last_input)) { + __ cmovq(cc, i.OutputRegister(), i.InputRegister(last_input)); + if (condition == kUnorderedNotEqual) { + __ cmovq(parity_even, i.OutputRegister(), i.InputRegister(last_input)); + } + } else { + __ cmovq(cc, i.OutputRegister(), i.InputOperand(last_input)); + if (condition == kUnorderedNotEqual) { + __ cmovq(parity_even, i.OutputRegister(), i.InputOperand(last_input)); + } + } + } } namespace { @@ -4464,13 +4426,11 @@ void CodeGenerator::FinishFrame(Frame* frame) { CallDescriptor* call_descriptor = linkage()->GetIncomingDescriptor(); const RegList saves_fp = call_descriptor->CalleeSavedFPRegisters(); - if (saves_fp != 0) { + if (saves_fp != 0) { // Save callee-saved XMM registers. frame->AlignSavedCalleeRegisterSlots(); - if (saves_fp != 0) { // Save callee-saved XMM registers. - const uint32_t saves_fp_count = base::bits::CountPopulation(saves_fp); - frame->AllocateSavedCalleeRegisterSlots( - saves_fp_count * (kQuadWordSize / kSystemPointerSize)); - } + const uint32_t saves_fp_count = base::bits::CountPopulation(saves_fp); + frame->AllocateSavedCalleeRegisterSlots( + saves_fp_count * (kQuadWordSize / kSystemPointerSize)); } const RegList saves = call_descriptor->CalleeSavedRegisters(); if (saves != 0) { // Save callee-saved registers. @@ -4540,7 +4500,7 @@ void CodeGenerator::AssembleConstructFrame() { // frame is still on the stack. Optimized code uses OSR values directly from // the unoptimized frame. Thus, all that needs to be done is to allocate the // remaining stack slots. - if (FLAG_code_comments) __ RecordComment("-- OSR entrypoint --"); + __ RecordComment("-- OSR entrypoint --"); osr_pc_offset_ = __ pc_offset(); required_slots -= static_cast<int>(osr_helper()->UnoptimizedFrameSlots()); ResetSpeculationPoison(); @@ -4664,7 +4624,7 @@ void CodeGenerator::AssembleReturn(InstructionOperand* additional_pop_count) { if (parameter_slots != 0) { if (additional_pop_count->IsImmediate()) { DCHECK_EQ(g.ToConstant(additional_pop_count).ToInt32(), 0); - } else if (__ emit_debug_code()) { + } else if (FLAG_debug_code) { __ cmpq(g.ToRegister(additional_pop_count), Immediate(0)); __ Assert(equal, AbortReason::kUnexpectedAdditionalPopValue); } @@ -4787,7 +4747,7 @@ void CodeGenerator::AssembleMove(InstructionOperand* source, if (RelocInfo::IsWasmReference(src.rmode())) { __ movq(dst, Immediate64(src.ToInt64(), src.rmode())); } else { - __ Set(dst, src.ToInt64()); + __ Move(dst, src.ToInt64()); } break; case Constant::kFloat32: @@ -4837,7 +4797,7 @@ void CodeGenerator::AssembleMove(InstructionOperand* source, __ movq(dst, Immediate(src.ToInt32())); return; case Constant::kInt64: - __ Set(dst, src.ToInt64()); + __ Move(dst, src.ToInt64()); return; default: break; diff --git a/deps/v8/src/compiler/backend/x64/instruction-codes-x64.h b/deps/v8/src/compiler/backend/x64/instruction-codes-x64.h index 2ad717c0a0..eba23dcfa9 100644 --- a/deps/v8/src/compiler/backend/x64/instruction-codes-x64.h +++ b/deps/v8/src/compiler/backend/x64/instruction-codes-x64.h @@ -156,6 +156,7 @@ namespace compiler { V(X64Peek) \ V(X64F64x2Splat) \ V(X64F64x2ExtractLane) \ + V(X64F64x2ReplaceLane) \ V(X64F64x2Abs) \ V(X64F64x2Neg) \ V(X64F64x2Sqrt) \ diff --git a/deps/v8/src/compiler/backend/x64/instruction-scheduler-x64.cc b/deps/v8/src/compiler/backend/x64/instruction-scheduler-x64.cc index dc323d4cc7..4fada93a31 100644 --- a/deps/v8/src/compiler/backend/x64/instruction-scheduler-x64.cc +++ b/deps/v8/src/compiler/backend/x64/instruction-scheduler-x64.cc @@ -132,6 +132,7 @@ int InstructionScheduler::GetTargetInstructionFlags( case kX64Pinsrq: case kX64F64x2Splat: case kX64F64x2ExtractLane: + case kX64F64x2ReplaceLane: case kX64F64x2Abs: case kX64F64x2Neg: case kX64F64x2Sqrt: diff --git a/deps/v8/src/compiler/backend/x64/instruction-selector-x64.cc b/deps/v8/src/compiler/backend/x64/instruction-selector-x64.cc index 23bbed3613..40eddf3131 100644 --- a/deps/v8/src/compiler/backend/x64/instruction-selector-x64.cc +++ b/deps/v8/src/compiler/backend/x64/instruction-selector-x64.cc @@ -66,7 +66,8 @@ class X64OperandGenerator final : public OperandGenerator { bool CanBeMemoryOperand(InstructionCode opcode, Node* node, Node* input, int effect_level) { - if (input->opcode() != IrOpcode::kLoad || + if ((input->opcode() != IrOpcode::kLoad && + input->opcode() != IrOpcode::kLoadImmutable) || !selector()->CanCover(node, input)) { return false; } @@ -298,6 +299,7 @@ ArchOpcode GetLoadOpcode(LoadRepresentation load_rep) { opcode = kX64Movdqu; break; case MachineRepresentation::kNone: + case MachineRepresentation::kMapWord: UNREACHABLE(); } return opcode; @@ -332,6 +334,7 @@ ArchOpcode GetStoreOpcode(StoreRepresentation store_rep) { case MachineRepresentation::kSimd128: // Fall through. return kX64Movdqu; case MachineRepresentation::kNone: + case MachineRepresentation::kMapWord: UNREACHABLE(); } UNREACHABLE(); @@ -465,6 +468,7 @@ void InstructionSelector::VisitLoad(Node* node, Node* value, void InstructionSelector::VisitLoad(Node* node) { LoadRepresentation load_rep = LoadRepresentationOf(node->op()); + DCHECK(!load_rep.IsMapWord()); VisitLoad(node, node, GetLoadOpcode(load_rep)); } @@ -479,6 +483,7 @@ void InstructionSelector::VisitStore(Node* node) { Node* value = node->InputAt(2); StoreRepresentation store_rep = StoreRepresentationOf(node->op()); + DCHECK_NE(store_rep.representation(), MachineRepresentation::kMapWord); WriteBarrierKind write_barrier_kind = store_rep.write_barrier_kind(); if (FLAG_enable_unconditional_write_barriers && @@ -704,7 +709,8 @@ void InstructionSelector::VisitStackPointerGreaterThan( X64OperandGenerator g(this); Node* const value = node->InputAt(0); if (g.CanBeMemoryOperand(kX64Cmp, node, value, effect_level)) { - DCHECK_EQ(IrOpcode::kLoad, value->opcode()); + DCHECK(IrOpcode::kLoad == value->opcode() || + IrOpcode::kLoadImmutable == value->opcode()); // GetEffectiveAddressMemoryOperand can create at most 3 inputs. static constexpr int kMaxInputCount = 3; @@ -726,7 +732,9 @@ namespace { bool TryMergeTruncateInt64ToInt32IntoLoad(InstructionSelector* selector, Node* node, Node* load) { - if (load->opcode() == IrOpcode::kLoad && selector->CanCover(node, load)) { + if ((load->opcode() == IrOpcode::kLoad || + load->opcode() == IrOpcode::kLoadImmutable) && + selector->CanCover(node, load)) { LoadRepresentation load_rep = LoadRepresentationOf(load->op()); MachineRepresentation rep = load_rep.representation(); InstructionCode opcode; @@ -1363,7 +1371,9 @@ void InstructionSelector::VisitChangeInt32ToInt64(Node* node) { X64OperandGenerator g(this); Node* const value = node->InputAt(0); - if (value->opcode() == IrOpcode::kLoad && CanCover(node, value)) { + if ((value->opcode() == IrOpcode::kLoad || + value->opcode() == IrOpcode::kLoadImmutable) && + CanCover(node, value)) { LoadRepresentation load_rep = LoadRepresentationOf(value->op()); MachineRepresentation rep = load_rep.representation(); InstructionCode opcode; @@ -1870,14 +1880,25 @@ void VisitCompareWithMemoryOperand(InstructionSelector* selector, InstructionCode opcode, Node* left, InstructionOperand right, FlagsContinuation* cont) { - DCHECK_EQ(IrOpcode::kLoad, left->opcode()); + DCHECK(IrOpcode::kLoad == left->opcode() || + IrOpcode::kLoadImmutable == left->opcode()); X64OperandGenerator g(selector); size_t input_count = 0; - InstructionOperand inputs[4]; + InstructionOperand inputs[6]; AddressingMode addressing_mode = g.GetEffectiveAddressMemoryOperand(left, inputs, &input_count); opcode |= AddressingModeField::encode(addressing_mode); inputs[input_count++] = right; + if (cont->IsSelect()) { + if (opcode == kUnorderedEqual) { + cont->Negate(); + inputs[input_count++] = g.UseRegister(cont->true_value()); + inputs[input_count++] = g.Use(cont->false_value()); + } else { + inputs[input_count++] = g.UseRegister(cont->false_value()); + inputs[input_count++] = g.Use(cont->true_value()); + } + } selector->EmitWithContinuation(opcode, 0, nullptr, input_count, inputs, cont); } @@ -1886,6 +1907,20 @@ void VisitCompareWithMemoryOperand(InstructionSelector* selector, void VisitCompare(InstructionSelector* selector, InstructionCode opcode, InstructionOperand left, InstructionOperand right, FlagsContinuation* cont) { + if (cont->IsSelect()) { + X64OperandGenerator g(selector); + InstructionOperand inputs[4] = {left, right}; + if (cont->condition() == kUnorderedEqual) { + cont->Negate(); + inputs[2] = g.UseRegister(cont->true_value()); + inputs[3] = g.Use(cont->false_value()); + } else { + inputs[2] = g.UseRegister(cont->false_value()); + inputs[3] = g.Use(cont->true_value()); + } + selector->EmitWithContinuation(opcode, 0, nullptr, 4, inputs, cont); + return; + } selector->EmitWithContinuation(opcode, left, right, cont); } @@ -1901,7 +1936,8 @@ void VisitCompare(InstructionSelector* selector, InstructionCode opcode, } MachineType MachineTypeForNarrow(Node* node, Node* hint_node) { - if (hint_node->opcode() == IrOpcode::kLoad) { + if (hint_node->opcode() == IrOpcode::kLoad || + hint_node->opcode() == IrOpcode::kLoadImmutable) { MachineType hint = LoadRepresentationOf(hint_node->op()); if (node->opcode() == IrOpcode::kInt32Constant || node->opcode() == IrOpcode::kInt64Constant) { @@ -1935,8 +1971,10 @@ MachineType MachineTypeForNarrow(Node* node, Node* hint_node) { } } } - return node->opcode() == IrOpcode::kLoad ? LoadRepresentationOf(node->op()) - : MachineType::None(); + return node->opcode() == IrOpcode::kLoad || + node->opcode() == IrOpcode::kLoadImmutable + ? LoadRepresentationOf(node->op()) + : MachineType::None(); } // Tries to match the size of the given opcode to that of the operands, if @@ -2151,7 +2189,8 @@ void VisitCompareZero(InstructionSelector* selector, Node* user, Node* node, } } int effect_level = selector->GetEffectLevel(node, cont); - if (node->opcode() == IrOpcode::kLoad) { + if (node->opcode() == IrOpcode::kLoad || + node->opcode() == IrOpcode::kLoadImmutable) { switch (LoadRepresentationOf(node->op()).representation()) { case MachineRepresentation::kWord8: if (opcode == kX64Cmp32) { @@ -2920,7 +2959,6 @@ VISIT_ATOMIC_BINOP(Xor) V(F32x4RecipApprox) \ V(F32x4RecipSqrtApprox) \ V(F32x4DemoteF64x2Zero) \ - V(I64x2Neg) \ V(I64x2BitMask) \ V(I64x2SConvertI32x4Low) \ V(I64x2SConvertI32x4High) \ @@ -3045,6 +3083,16 @@ void InstructionSelector::VisitF32x4ReplaceLane(Node* node) { g.Use(node->InputAt(1))); } +void InstructionSelector::VisitF64x2ReplaceLane(Node* node) { + X64OperandGenerator g(this); + int32_t lane = OpParameter<int32_t>(node->op()); + // When no-AVX, define dst == src to save a move. + InstructionOperand dst = + IsSupported(AVX) ? g.DefineAsRegister(node) : g.DefineSameAsFirst(node); + Emit(kX64F64x2ReplaceLane, dst, g.UseRegister(node->InputAt(0)), + g.UseImmediate(lane), g.UseRegister(node->InputAt(1))); +} + #define VISIT_SIMD_REPLACE_LANE(TYPE, OPCODE) \ void InstructionSelector::Visit##TYPE##ReplaceLane(Node* node) { \ X64OperandGenerator g(this); \ @@ -3054,7 +3102,6 @@ void InstructionSelector::VisitF32x4ReplaceLane(Node* node) { } #define SIMD_TYPES_FOR_REPLACE_LANE(V) \ - V(F64x2, kX64Pinsrq) \ V(I64x2, kX64Pinsrq) \ V(I32x4, kX64Pinsrd) \ V(I16x8, kX64Pinsrw) \ @@ -3186,6 +3233,15 @@ VISIT_SIMD_QFMOP(F32x4Qfma) VISIT_SIMD_QFMOP(F32x4Qfms) #undef VISIT_SIMD_QFMOP +void InstructionSelector::VisitI64x2Neg(Node* node) { + X64OperandGenerator g(this); + // If AVX unsupported, make sure dst != src to avoid a move. + InstructionOperand operand0 = IsSupported(AVX) + ? g.UseRegister(node->InputAt(0)) + : g.UseUnique(node->InputAt(0)); + Emit(kX64I64x2Neg, g.DefineAsRegister(node), operand0); +} + void InstructionSelector::VisitI64x2ShrS(Node* node) { X64OperandGenerator g(this); InstructionOperand temps[] = {g.TempRegister()}; @@ -3707,13 +3763,22 @@ void InstructionSelector::VisitI64x2Abs(Node* node) { } } +void InstructionSelector::AddOutputToSelectContinuation(OperandGenerator* g, + int first_input_index, + Node* node) { + continuation_outputs_.push_back( + g->DefineSameAsInput(node, first_input_index)); +} + // static MachineOperatorBuilder::Flags InstructionSelector::SupportedMachineOperatorFlags() { MachineOperatorBuilder::Flags flags = MachineOperatorBuilder::kWord32ShiftIsSafe | MachineOperatorBuilder::kWord32Ctz | MachineOperatorBuilder::kWord64Ctz | - MachineOperatorBuilder::kWord32Rol | MachineOperatorBuilder::kWord64Rol; + MachineOperatorBuilder::kWord32Rol | MachineOperatorBuilder::kWord64Rol | + MachineOperatorBuilder::kWord32Select | + MachineOperatorBuilder::kWord64Select; if (CpuFeatures::IsSupported(POPCNT)) { flags |= MachineOperatorBuilder::kWord32Popcnt | MachineOperatorBuilder::kWord64Popcnt; diff --git a/deps/v8/src/compiler/bytecode-graph-builder.cc b/deps/v8/src/compiler/bytecode-graph-builder.cc index 54996bb475..faae9c1eab 100644 --- a/deps/v8/src/compiler/bytecode-graph-builder.cc +++ b/deps/v8/src/compiler/bytecode-graph-builder.cc @@ -27,7 +27,7 @@ #include "src/objects/literal-objects-inl.h" #include "src/objects/objects-inl.h" #include "src/objects/smi.h" -#include "src/objects/template-objects.h" +#include "src/objects/template-objects-inl.h" namespace v8 { namespace internal { @@ -72,7 +72,8 @@ class BytecodeGraphBuilder { CodeKind code_kind() const { return code_kind_; } bool native_context_independent() const { - return CodeKindIsNativeContextIndependentJSFunction(code_kind_); + // TODO(jgruber,v8:8888): Remove dependent code. + return false; } bool is_turboprop() const { return code_kind_ == CodeKind::TURBOPROP; } bool generate_full_feedback_collection() const { @@ -346,6 +347,10 @@ class BytecodeGraphBuilder { // feedback. Returns kDisallowSpeculation if feedback is insufficient. SpeculationMode GetSpeculationMode(int slot_id) const; + // Helper function to determine the call feedback relation from the recorded + // type feedback. Returns kUnrelated if feedback is insufficient. + CallFeedbackRelation ComputeCallFeedbackRelation(int slot_id) const; + // Helpers for building the implicit FunctionEntry and IterationBody // StackChecks. void BuildFunctionEntryStackCheck(); @@ -412,10 +417,15 @@ class BytecodeGraphBuilder { int context_register_; // Index of register holding handler context. }; - Handle<Object> GetConstantForIndexOperand(int operand_index) const { - return broker_->CanonicalPersistentHandle( - bytecode_iterator().GetConstantForIndexOperand(operand_index, - local_isolate_)); + template <class T = Object> + typename ref_traits<T>::ref_type MakeRefForConstantForIndexOperand( + int operand_index) { + // The BytecodeArray itself was fetched by using a barrier so all reads + // from the constant pool are safe. + return MakeRefAssumeMemoryFence( + broker(), broker()->CanonicalPersistentHandle(Handle<T>::cast( + bytecode_iterator().GetConstantForIndexOperand( + operand_index, local_isolate_)))); } Graph* graph() const { return jsgraph_->graph(); } @@ -428,9 +438,7 @@ class BytecodeGraphBuilder { return jsgraph_->simplified(); } Zone* local_zone() const { return local_zone_; } - BytecodeArrayRef bytecode_array() const { - return shared_info().GetBytecodeArray(); - } + BytecodeArrayRef bytecode_array() const { return bytecode_array_; } FeedbackVectorRef const& feedback_vector() const { return feedback_vector_; } const JSTypeHintLowering& type_hint_lowering() const { return type_hint_lowering_; @@ -480,6 +488,7 @@ class BytecodeGraphBuilder { // The native context for which we optimize. NativeContextRef const native_context_; SharedFunctionInfoRef const shared_info_; + BytecodeArrayRef const bytecode_array_; FeedbackCellRef const feedback_cell_; FeedbackVectorRef const feedback_vector_; CallFrequency const invocation_frequency_; @@ -1065,6 +1074,7 @@ BytecodeGraphBuilder::BytecodeGraphBuilder( jsgraph_(jsgraph), native_context_(native_context), shared_info_(shared_info), + bytecode_array_(shared_info.GetBytecodeArray()), feedback_cell_(feedback_cell), feedback_vector_(feedback_cell.value()->AsFeedbackVector()), invocation_frequency_(invocation_frequency), @@ -1569,7 +1579,7 @@ void BytecodeGraphBuilder::VisitBytecodes() { } // TODO(leszeks): Increment usage counter on BG thread. - if (!FLAG_concurrent_inlining && has_one_shot_bytecode) { + if (!broker()->is_concurrent_inlining() && has_one_shot_bytecode) { // (For concurrent inlining this is done in the serializer instead.) isolate()->CountUsage( v8::Isolate::UseCounterFeature::kOptimizedFunctionWithOneShotBytecode); @@ -1589,8 +1599,7 @@ void BytecodeGraphBuilder::VisitLdaSmi() { } void BytecodeGraphBuilder::VisitLdaConstant() { - ObjectRef object(broker(), GetConstantForIndexOperand(0), - ObjectRef::BackgroundSerialization::kAllowed); + ObjectRef object = MakeRefForConstantForIndexOperand(0); Node* node = jsgraph()->Constant(object); environment()->BindAccumulator(node); } @@ -1660,25 +1669,24 @@ Node* BytecodeGraphBuilder::BuildLoadGlobal(NameRef name, void BytecodeGraphBuilder::VisitLdaGlobal() { PrepareEagerCheckpoint(); - NameRef name(broker(), GetConstantForIndexOperand(0)); + NameRef name = MakeRefForConstantForIndexOperand<Name>(0); uint32_t feedback_slot_index = bytecode_iterator().GetIndexOperand(1); Node* node = - BuildLoadGlobal(name, feedback_slot_index, TypeofMode::NOT_INSIDE_TYPEOF); + BuildLoadGlobal(name, feedback_slot_index, TypeofMode::kNotInside); environment()->BindAccumulator(node, Environment::kAttachFrameState); } void BytecodeGraphBuilder::VisitLdaGlobalInsideTypeof() { PrepareEagerCheckpoint(); - NameRef name(broker(), GetConstantForIndexOperand(0)); + NameRef name = MakeRefForConstantForIndexOperand<Name>(0); uint32_t feedback_slot_index = bytecode_iterator().GetIndexOperand(1); - Node* node = - BuildLoadGlobal(name, feedback_slot_index, TypeofMode::INSIDE_TYPEOF); + Node* node = BuildLoadGlobal(name, feedback_slot_index, TypeofMode::kInside); environment()->BindAccumulator(node, Environment::kAttachFrameState); } void BytecodeGraphBuilder::VisitStaGlobal() { PrepareEagerCheckpoint(); - NameRef name(broker(), GetConstantForIndexOperand(0)); + NameRef name = MakeRefForConstantForIndexOperand<Name>(0); FeedbackSource feedback = CreateFeedbackSource(bytecode_iterator().GetIndexOperand(1)); Node* value = environment()->LookupAccumulator(); @@ -1819,10 +1827,9 @@ void BytecodeGraphBuilder::VisitStaCurrentContextSlot() { void BytecodeGraphBuilder::BuildLdaLookupSlot(TypeofMode typeof_mode) { PrepareEagerCheckpoint(); - Node* name = - jsgraph()->Constant(ObjectRef(broker(), GetConstantForIndexOperand(0))); + Node* name = jsgraph()->Constant(MakeRefForConstantForIndexOperand(0)); const Operator* op = - javascript()->CallRuntime(typeof_mode == TypeofMode::NOT_INSIDE_TYPEOF + javascript()->CallRuntime(typeof_mode == TypeofMode::kNotInside ? Runtime::kLoadLookupSlot : Runtime::kLoadLookupSlotInsideTypeof); Node* value = NewNode(op, name); @@ -1830,11 +1837,11 @@ void BytecodeGraphBuilder::BuildLdaLookupSlot(TypeofMode typeof_mode) { } void BytecodeGraphBuilder::VisitLdaLookupSlot() { - BuildLdaLookupSlot(TypeofMode::NOT_INSIDE_TYPEOF); + BuildLdaLookupSlot(TypeofMode::kNotInside); } void BytecodeGraphBuilder::VisitLdaLookupSlotInsideTypeof() { - BuildLdaLookupSlot(TypeofMode::INSIDE_TYPEOF); + BuildLdaLookupSlot(TypeofMode::kInside); } BytecodeGraphBuilder::Environment* @@ -1870,13 +1877,13 @@ base::Optional<ScopeInfoRef> BytecodeGraphBuilder::TryGetScopeInfo() { Node* context = environment()->Context(); switch (context->opcode()) { case IrOpcode::kJSCreateFunctionContext: - return ScopeInfoRef( + return MakeRef( broker(), CreateFunctionContextParametersOf(context->op()).scope_info()); case IrOpcode::kJSCreateBlockContext: case IrOpcode::kJSCreateCatchContext: case IrOpcode::kJSCreateWithContext: - return ScopeInfoRef(broker(), ScopeInfoOf(context->op())); + return MakeRef(broker(), ScopeInfoOf(context->op())); case IrOpcode::kParameter: { ScopeInfoRef scope_info = shared_info_.scope_info(); if (scope_info.HasOuterScopeInfo()) { @@ -1972,11 +1979,10 @@ void BytecodeGraphBuilder::BuildLdaLookupContextSlot(TypeofMode typeof_mode) { // Slow path, do a runtime load lookup. set_environment(slow_environment); { - Node* name = jsgraph()->Constant( - ObjectRef(broker(), GetConstantForIndexOperand(0))); + Node* name = jsgraph()->Constant(MakeRefForConstantForIndexOperand(0)); const Operator* op = - javascript()->CallRuntime(typeof_mode == TypeofMode::NOT_INSIDE_TYPEOF + javascript()->CallRuntime(typeof_mode == TypeofMode::kNotInside ? Runtime::kLoadLookupSlot : Runtime::kLoadLookupSlotInsideTypeof); Node* value = NewNode(op, name); @@ -1992,11 +1998,11 @@ void BytecodeGraphBuilder::BuildLdaLookupContextSlot(TypeofMode typeof_mode) { } void BytecodeGraphBuilder::VisitLdaLookupContextSlot() { - BuildLdaLookupContextSlot(TypeofMode::NOT_INSIDE_TYPEOF); + BuildLdaLookupContextSlot(TypeofMode::kNotInside); } void BytecodeGraphBuilder::VisitLdaLookupContextSlotInsideTypeof() { - BuildLdaLookupContextSlot(TypeofMode::INSIDE_TYPEOF); + BuildLdaLookupContextSlot(TypeofMode::kInside); } void BytecodeGraphBuilder::BuildLdaLookupGlobalSlot(TypeofMode typeof_mode) { @@ -2008,7 +2014,7 @@ void BytecodeGraphBuilder::BuildLdaLookupGlobalSlot(TypeofMode typeof_mode) { // Fast path, do a global load. { PrepareEagerCheckpoint(); - NameRef name(broker(), GetConstantForIndexOperand(0)); + NameRef name = MakeRefForConstantForIndexOperand<Name>(0); uint32_t feedback_slot_index = bytecode_iterator().GetIndexOperand(1); Node* node = BuildLoadGlobal(name, feedback_slot_index, typeof_mode); environment()->BindAccumulator(node, Environment::kAttachFrameState); @@ -2024,10 +2030,10 @@ void BytecodeGraphBuilder::BuildLdaLookupGlobalSlot(TypeofMode typeof_mode) { set_environment(slow_environment); { Node* name = - jsgraph()->Constant(NameRef(broker(), GetConstantForIndexOperand(0))); + jsgraph()->Constant(MakeRefForConstantForIndexOperand<Name>(0)); const Operator* op = - javascript()->CallRuntime(typeof_mode == TypeofMode::NOT_INSIDE_TYPEOF + javascript()->CallRuntime(typeof_mode == TypeofMode::kNotInside ? Runtime::kLoadLookupSlot : Runtime::kLoadLookupSlotInsideTypeof); Node* value = NewNode(op, name); @@ -2043,18 +2049,17 @@ void BytecodeGraphBuilder::BuildLdaLookupGlobalSlot(TypeofMode typeof_mode) { } void BytecodeGraphBuilder::VisitLdaLookupGlobalSlot() { - BuildLdaLookupGlobalSlot(TypeofMode::NOT_INSIDE_TYPEOF); + BuildLdaLookupGlobalSlot(TypeofMode::kNotInside); } void BytecodeGraphBuilder::VisitLdaLookupGlobalSlotInsideTypeof() { - BuildLdaLookupGlobalSlot(TypeofMode::INSIDE_TYPEOF); + BuildLdaLookupGlobalSlot(TypeofMode::kInside); } void BytecodeGraphBuilder::VisitStaLookupSlot() { PrepareEagerCheckpoint(); Node* value = environment()->LookupAccumulator(); - Node* name = - jsgraph()->Constant(ObjectRef(broker(), GetConstantForIndexOperand(0))); + Node* name = jsgraph()->Constant(MakeRefForConstantForIndexOperand(0)); int bytecode_flags = bytecode_iterator().GetFlagOperand(1); LanguageMode language_mode = static_cast<LanguageMode>( interpreter::StoreLookupSlotFlags::LanguageModeBit::decode( @@ -2078,7 +2083,7 @@ void BytecodeGraphBuilder::VisitLdaNamedProperty() { PrepareEagerCheckpoint(); Node* object = environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0)); - NameRef name(broker(), GetConstantForIndexOperand(1)); + NameRef name = MakeRefForConstantForIndexOperand<Name>(1); FeedbackSource feedback = CreateFeedbackSource(bytecode_iterator().GetIndexOperand(2)); const Operator* op = javascript()->LoadNamed(name.object(), feedback); @@ -2102,7 +2107,7 @@ void BytecodeGraphBuilder::VisitLdaNamedPropertyNoFeedback() { PrepareEagerCheckpoint(); Node* object = environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0)); - NameRef name(broker(), GetConstantForIndexOperand(1)); + NameRef name = MakeRefForConstantForIndexOperand<Name>(1); const Operator* op = javascript()->LoadNamed(name.object(), FeedbackSource()); DCHECK(IrOpcode::IsFeedbackCollectingOpcode(op->opcode())); Node* node = NewNode(op, object, feedback_vector_node()); @@ -2114,7 +2119,7 @@ void BytecodeGraphBuilder::VisitLdaNamedPropertyFromSuper() { Node* receiver = environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0)); Node* home_object = environment()->LookupAccumulator(); - NameRef name(broker(), GetConstantForIndexOperand(1)); + NameRef name = MakeRefForConstantForIndexOperand<Name>(1); FeedbackSource feedback = CreateFeedbackSource(bytecode_iterator().GetIndexOperand(2)); @@ -2168,7 +2173,7 @@ void BytecodeGraphBuilder::BuildNamedStore(StoreMode store_mode) { Node* value = environment()->LookupAccumulator(); Node* object = environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0)); - NameRef name(broker(), GetConstantForIndexOperand(1)); + NameRef name = MakeRefForConstantForIndexOperand<Name>(1); FeedbackSource feedback = CreateFeedbackSource(bytecode_iterator().GetIndexOperand(2)); @@ -2209,7 +2214,7 @@ void BytecodeGraphBuilder::VisitStaNamedPropertyNoFeedback() { Node* value = environment()->LookupAccumulator(); Node* object = environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0)); - NameRef name(broker(), GetConstantForIndexOperand(1)); + NameRef name = MakeRefForConstantForIndexOperand<Name>(1); LanguageMode language_mode = static_cast<LanguageMode>(bytecode_iterator().GetFlagOperand(2)); const Operator* op = @@ -2288,7 +2293,8 @@ void BytecodeGraphBuilder::VisitPopContext() { } void BytecodeGraphBuilder::VisitCreateClosure() { - SharedFunctionInfoRef shared_info(broker(), GetConstantForIndexOperand(0)); + SharedFunctionInfoRef shared_info = + MakeRefForConstantForIndexOperand<SharedFunctionInfo>(0); AllocationType allocation = interpreter::CreateClosureFlags::PretenuredBit::decode( bytecode_iterator().GetFlagOperand(2)) @@ -2305,14 +2311,14 @@ void BytecodeGraphBuilder::VisitCreateClosure() { } void BytecodeGraphBuilder::VisitCreateBlockContext() { - ScopeInfoRef scope_info(broker(), GetConstantForIndexOperand(0)); + ScopeInfoRef scope_info = MakeRefForConstantForIndexOperand<ScopeInfo>(0); const Operator* op = javascript()->CreateBlockContext(scope_info.object()); Node* context = NewNode(op); environment()->BindAccumulator(context); } void BytecodeGraphBuilder::VisitCreateFunctionContext() { - ScopeInfoRef scope_info(broker(), GetConstantForIndexOperand(0)); + ScopeInfoRef scope_info = MakeRefForConstantForIndexOperand<ScopeInfo>(0); uint32_t slots = bytecode_iterator().GetUnsignedImmediateOperand(1); const Operator* op = javascript()->CreateFunctionContext( scope_info.object(), slots, FUNCTION_SCOPE); @@ -2321,7 +2327,7 @@ void BytecodeGraphBuilder::VisitCreateFunctionContext() { } void BytecodeGraphBuilder::VisitCreateEvalContext() { - ScopeInfoRef scope_info(broker(), GetConstantForIndexOperand(0)); + ScopeInfoRef scope_info = MakeRefForConstantForIndexOperand<ScopeInfo>(0); uint32_t slots = bytecode_iterator().GetUnsignedImmediateOperand(1); const Operator* op = javascript()->CreateFunctionContext(scope_info.object(), slots, EVAL_SCOPE); @@ -2332,7 +2338,7 @@ void BytecodeGraphBuilder::VisitCreateEvalContext() { void BytecodeGraphBuilder::VisitCreateCatchContext() { interpreter::Register reg = bytecode_iterator().GetRegisterOperand(0); Node* exception = environment()->LookupRegister(reg); - ScopeInfoRef scope_info(broker(), GetConstantForIndexOperand(1)); + ScopeInfoRef scope_info = MakeRefForConstantForIndexOperand<ScopeInfo>(1); const Operator* op = javascript()->CreateCatchContext(scope_info.object()); Node* context = NewNode(op, exception); @@ -2342,7 +2348,7 @@ void BytecodeGraphBuilder::VisitCreateCatchContext() { void BytecodeGraphBuilder::VisitCreateWithContext() { Node* object = environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0)); - ScopeInfoRef scope_info(broker(), GetConstantForIndexOperand(1)); + ScopeInfoRef scope_info = MakeRefForConstantForIndexOperand<ScopeInfo>(1); const Operator* op = javascript()->CreateWithContext(scope_info.object()); Node* context = NewNode(op, object); @@ -2368,7 +2374,7 @@ void BytecodeGraphBuilder::VisitCreateRestParameter() { } void BytecodeGraphBuilder::VisitCreateRegExpLiteral() { - StringRef constant_pattern(broker(), GetConstantForIndexOperand(0)); + StringRef constant_pattern = MakeRefForConstantForIndexOperand<String>(0); int const slot_id = bytecode_iterator().GetIndexOperand(1); FeedbackSource pair = CreateFeedbackSource(slot_id); int literal_flags = bytecode_iterator().GetFlagOperand(2); @@ -2381,8 +2387,8 @@ void BytecodeGraphBuilder::VisitCreateRegExpLiteral() { } void BytecodeGraphBuilder::VisitCreateArrayLiteral() { - ArrayBoilerplateDescriptionRef array_boilerplate_description( - broker(), GetConstantForIndexOperand(0)); + ArrayBoilerplateDescriptionRef array_boilerplate_description = + MakeRefForConstantForIndexOperand<ArrayBoilerplateDescription>(0); int const slot_id = bytecode_iterator().GetIndexOperand(1); FeedbackSource pair = CreateFeedbackSource(slot_id); int bytecode_flags = bytecode_iterator().GetFlagOperand(2); @@ -2420,8 +2426,8 @@ void BytecodeGraphBuilder::VisitCreateArrayFromIterable() { } void BytecodeGraphBuilder::VisitCreateObjectLiteral() { - ObjectBoilerplateDescriptionRef constant_properties( - broker(), GetConstantForIndexOperand(0)); + ObjectBoilerplateDescriptionRef constant_properties = + MakeRefForConstantForIndexOperand<ObjectBoilerplateDescription>(0); int const slot_id = bytecode_iterator().GetIndexOperand(1); FeedbackSource pair = CreateFeedbackSource(slot_id); int bytecode_flags = bytecode_iterator().GetFlagOperand(2); @@ -2459,8 +2465,8 @@ void BytecodeGraphBuilder::VisitCloneObject() { void BytecodeGraphBuilder::VisitGetTemplateObject() { FeedbackSource source = CreateFeedbackSource(bytecode_iterator().GetIndexOperand(1)); - TemplateObjectDescriptionRef description(broker(), - GetConstantForIndexOperand(0)); + TemplateObjectDescriptionRef description = + MakeRefForConstantForIndexOperand<TemplateObjectDescription>(0); STATIC_ASSERT(JSGetTemplateObjectNode::FeedbackVectorIndex() == 0); const Operator* op = javascript()->GetTemplateObject( description.object(), shared_info().object(), source); @@ -2508,9 +2514,11 @@ void BytecodeGraphBuilder::BuildCall(ConvertReceiverMode receiver_mode, FeedbackSource feedback = CreateFeedbackSource(slot_id); CallFrequency frequency = ComputeCallFrequency(slot_id); SpeculationMode speculation_mode = GetSpeculationMode(slot_id); + CallFeedbackRelation call_feedback_relation = + ComputeCallFeedbackRelation(slot_id); const Operator* op = javascript()->Call(arg_count, frequency, feedback, receiver_mode, - speculation_mode, CallFeedbackRelation::kRelated); + speculation_mode, call_feedback_relation); DCHECK(IrOpcode::IsFeedbackCollectingOpcode(op->opcode())); JSTypeHintLowering::LoweringResult lowering = TryBuildSimplifiedCall( @@ -2955,8 +2963,7 @@ void BytecodeGraphBuilder::VisitThrowReferenceErrorIfHole() { Node* accumulator = environment()->LookupAccumulator(); Node* check_for_hole = NewNode(simplified()->ReferenceEqual(), accumulator, jsgraph()->TheHoleConstant()); - Node* name = - jsgraph()->Constant(ObjectRef(broker(), GetConstantForIndexOperand(0))); + Node* name = jsgraph()->Constant(MakeRefForConstantForIndexOperand(0)); BuildHoleCheckAndThrow(check_for_hole, Runtime::kThrowAccessedUninitializedVariable, name); } @@ -3088,6 +3095,19 @@ SpeculationMode BytecodeGraphBuilder::GetSpeculationMode(int slot_id) const { : feedback.AsCall().speculation_mode(); } +CallFeedbackRelation BytecodeGraphBuilder::ComputeCallFeedbackRelation( + int slot_id) const { + FeedbackSlot slot = FeedbackVector::ToSlot(slot_id); + FeedbackSource source(feedback_vector(), slot); + ProcessedFeedback const& feedback = broker()->GetFeedbackForCall(source); + if (feedback.IsInsufficient()) return CallFeedbackRelation::kUnrelated; + CallFeedbackContent call_feedback_content = + feedback.AsCall().call_feedback_content(); + return call_feedback_content == CallFeedbackContent::kTarget + ? CallFeedbackRelation::kTarget + : CallFeedbackRelation::kReceiver; +} + void BytecodeGraphBuilder::VisitBitwiseNot() { FeedbackSource feedback = CreateFeedbackSource( bytecode_iterator().GetSlotOperand(kUnaryOperationHintIndex)); diff --git a/deps/v8/src/compiler/code-assembler.cc b/deps/v8/src/compiler/code-assembler.cc index 4ec0c8f9d8..8ff1777366 100644 --- a/deps/v8/src/compiler/code-assembler.cc +++ b/deps/v8/src/compiler/code-assembler.cc @@ -8,7 +8,7 @@ #include "src/base/bits.h" #include "src/codegen/code-factory.h" -#include "src/codegen/interface-descriptors.h" +#include "src/codegen/interface-descriptors-inl.h" #include "src/codegen/machine-type.h" #include "src/codegen/macro-assembler.h" #include "src/compiler/backend/instruction-selector.h" @@ -331,6 +331,10 @@ TNode<Float64T> CodeAssembler::Float64Constant(double value) { return UncheckedCast<Float64T>(jsgraph()->Float64Constant(value)); } +bool CodeAssembler::IsMapOffsetConstant(Node* node) { + return raw_assembler()->IsMapOffsetConstant(node); +} + bool CodeAssembler::TryToInt32Constant(TNode<IntegralT> node, int32_t* out_value) { { @@ -689,11 +693,15 @@ TNode<Object> CodeAssembler::LoadFullTagged(Node* base, TNode<Object> CodeAssembler::LoadFullTagged(Node* base, TNode<IntPtrT> offset, LoadSensitivity needs_poisoning) { + // Please use LoadFromObject(MachineType::MapInHeader(), object, + // IntPtrConstant(-kHeapObjectTag)) instead. + DCHECK(!raw_assembler()->IsMapOffsetConstantMinusTag(offset)); return BitcastWordToTagged(Load<RawPtrT>(base, offset, needs_poisoning)); } Node* CodeAssembler::AtomicLoad(MachineType type, TNode<RawPtrT> base, TNode<WordT> offset) { + DCHECK(!raw_assembler()->IsMapOffsetConstantMinusTag(offset)); return raw_assembler()->AtomicLoad(type, base, offset); } @@ -713,6 +721,27 @@ Node* CodeAssembler::LoadFromObject(MachineType type, TNode<Object> object, return raw_assembler()->LoadFromObject(type, object, offset); } +#ifdef V8_MAP_PACKING +Node* CodeAssembler::PackMapWord(Node* value) { + TNode<IntPtrT> map_word = + BitcastTaggedToWordForTagAndSmiBits(UncheckedCast<AnyTaggedT>(value)); + TNode<WordT> packed = WordXor(UncheckedCast<WordT>(map_word), + IntPtrConstant(Internals::kMapWordXorMask)); + return BitcastWordToTaggedSigned(packed); +} +#endif + +TNode<AnyTaggedT> CodeAssembler::LoadRootMapWord(RootIndex root_index) { +#ifdef V8_MAP_PACKING + Handle<Object> root = isolate()->root_handle(root_index); + Node* map = HeapConstant(Handle<Map>::cast(root)); + map = PackMapWord(map); + return ReinterpretCast<AnyTaggedT>(map); +#else + return LoadRoot(root_index); +#endif +} + TNode<Object> CodeAssembler::LoadRoot(RootIndex root_index) { if (RootsTable::IsImmortalImmovable(root_index)) { Handle<Object> root = isolate()->root_handle(root_index); @@ -794,11 +823,14 @@ void CodeAssembler::OptimizedStoreMap(TNode<HeapObject> object, } void CodeAssembler::Store(Node* base, Node* offset, Node* value) { + // Please use OptimizedStoreMap(base, value) instead. + DCHECK(!raw_assembler()->IsMapOffsetConstantMinusTag(offset)); raw_assembler()->Store(MachineRepresentation::kTagged, base, offset, value, kFullWriteBarrier); } void CodeAssembler::StoreEphemeronKey(Node* base, Node* offset, Node* value) { + DCHECK(!raw_assembler()->IsMapOffsetConstantMinusTag(offset)); raw_assembler()->Store(MachineRepresentation::kTagged, base, offset, value, kEphemeronKeyWriteBarrier); } @@ -812,6 +844,8 @@ void CodeAssembler::StoreNoWriteBarrier(MachineRepresentation rep, Node* base, void CodeAssembler::StoreNoWriteBarrier(MachineRepresentation rep, Node* base, Node* offset, Node* value) { + // Please use OptimizedStoreMap(base, value) instead. + DCHECK(!raw_assembler()->IsMapOffsetConstantMinusTag(offset)); raw_assembler()->Store( rep, base, offset, value, CanBeTaggedPointer(rep) ? kAssertNoWriteBarrier : kNoWriteBarrier); @@ -825,6 +859,8 @@ void CodeAssembler::UnsafeStoreNoWriteBarrier(MachineRepresentation rep, void CodeAssembler::UnsafeStoreNoWriteBarrier(MachineRepresentation rep, Node* base, Node* offset, Node* value) { + // Please use OptimizedStoreMap(base, value) instead. + DCHECK(!raw_assembler()->IsMapOffsetConstantMinusTag(offset)); raw_assembler()->Store(rep, base, offset, value, kNoWriteBarrier); } @@ -837,12 +873,15 @@ void CodeAssembler::StoreFullTaggedNoWriteBarrier(TNode<RawPtrT> base, void CodeAssembler::StoreFullTaggedNoWriteBarrier(TNode<RawPtrT> base, TNode<IntPtrT> offset, TNode<Object> tagged_value) { + // Please use OptimizedStoreMap(base, tagged_value) instead. + DCHECK(!raw_assembler()->IsMapOffsetConstantMinusTag(offset)); StoreNoWriteBarrier(MachineType::PointerRepresentation(), base, offset, BitcastTaggedToWord(tagged_value)); } void CodeAssembler::AtomicStore(MachineRepresentation rep, TNode<RawPtrT> base, TNode<WordT> offset, TNode<Word32T> value) { + DCHECK(!raw_assembler()->IsMapOffsetConstantMinusTag(offset)); raw_assembler()->AtomicStore(rep, base, offset, value); } diff --git a/deps/v8/src/compiler/code-assembler.h b/deps/v8/src/compiler/code-assembler.h index 9163295cd6..75cb1a9583 100644 --- a/deps/v8/src/compiler/code-assembler.h +++ b/deps/v8/src/compiler/code-assembler.h @@ -310,7 +310,6 @@ class CodeAssemblerParameterizedLabel; V(Word64And, Word64T, Word64T, Word64T) \ V(Word64Or, Word64T, Word64T, Word64T) \ V(Word64Xor, Word64T, Word64T, Word64T) \ - V(Word64Ror, Word64T, Word64T, Word64T) \ V(Word64Shl, Word64T, Word64T, Word64T) \ V(Word64Shr, Word64T, Word64T, Word64T) \ V(Word64Sar, Word64T, Word64T, Word64T) @@ -585,6 +584,8 @@ class V8_EXPORT_PRIVATE CodeAssembler { return value ? Int32TrueConstant() : Int32FalseConstant(); } + bool IsMapOffsetConstant(Node* node); + bool TryToInt32Constant(TNode<IntegralT> node, int32_t* out_value); bool TryToInt64Constant(TNode<IntegralT> node, int64_t* out_value); bool TryToIntPtrConstant(TNode<IntegralT> node, intptr_t* out_value); @@ -789,8 +790,16 @@ class V8_EXPORT_PRIVATE CodeAssembler { Node* LoadFromObject(MachineType type, TNode<Object> object, TNode<IntPtrT> offset); +#ifdef V8_MAP_PACKING + Node* PackMapWord(Node* value); +#endif + // Load a value from the root array. + // If map packing is enabled, LoadRoot for a root map returns the unpacked map + // word (i.e., the map). Use LoadRootMapWord to obtain the packed map word + // instead. TNode<Object> LoadRoot(RootIndex root_index); + TNode<AnyTaggedT> LoadRootMapWord(RootIndex root_index); template <typename Type> TNode<Type> UnalignedLoad(TNode<RawPtrT> base, TNode<IntPtrT> offset) { @@ -978,6 +987,11 @@ class V8_EXPORT_PRIVATE CodeAssembler { static_cast<TNode<Word32T>>(right))); } + TNode<IntPtrT> WordOr(TNode<IntPtrT> left, TNode<IntPtrT> right) { + return Signed(WordOr(static_cast<TNode<WordT>>(left), + static_cast<TNode<WordT>>(right))); + } + TNode<Int32T> Word32Or(TNode<Int32T> left, TNode<Int32T> right) { return Signed(Word32Or(static_cast<TNode<Word32T>>(left), static_cast<TNode<Word32T>>(right))); @@ -995,6 +1009,9 @@ class V8_EXPORT_PRIVATE CodeAssembler { TNode<BoolT> Word64Equal(TNode<Word64T> left, TNode<Word64T> right); TNode<BoolT> Word64NotEqual(TNode<Word64T> left, TNode<Word64T> right); + TNode<IntPtrT> WordNot(TNode<IntPtrT> a) { + return Signed(WordNot(static_cast<TNode<WordT>>(a))); + } TNode<BoolT> Word32Or(TNode<BoolT> left, TNode<BoolT> right) { return UncheckedCast<BoolT>(Word32Or(static_cast<TNode<Word32T>>(left), static_cast<TNode<Word32T>>(right))); diff --git a/deps/v8/src/compiler/common-operator-reducer.cc b/deps/v8/src/compiler/common-operator-reducer.cc index 874bdb0d32..f002f34a40 100644 --- a/deps/v8/src/compiler/common-operator-reducer.cc +++ b/deps/v8/src/compiler/common-operator-reducer.cc @@ -8,10 +8,11 @@ #include "src/compiler/common-operator.h" #include "src/compiler/graph.h" +#include "src/compiler/js-heap-broker.h" #include "src/compiler/machine-operator.h" -#include "src/compiler/node.h" #include "src/compiler/node-matchers.h" #include "src/compiler/node-properties.h" +#include "src/compiler/node.h" namespace v8 { namespace internal { @@ -28,7 +29,9 @@ Decision DecideCondition(JSHeapBroker* broker, Node* const cond) { } case IrOpcode::kHeapConstant: { HeapObjectMatcher m(unwrapped); - return m.Ref(broker).BooleanValue() ? Decision::kTrue : Decision::kFalse; + base::Optional<bool> maybe_result = m.Ref(broker).TryGetBooleanValue(); + if (!maybe_result.has_value()) return Decision::kUnknown; + return *maybe_result ? Decision::kTrue : Decision::kFalse; } default: return Decision::kUnknown; @@ -53,7 +56,8 @@ CommonOperatorReducer::CommonOperatorReducer(Editor* editor, Graph* graph, } Reduction CommonOperatorReducer::Reduce(Node* node) { - DisallowHeapAccessIf no_heap_access(!FLAG_turbo_direct_heap_access); + DisallowHeapAccessIf no_heap_access(broker() == nullptr || + !broker()->is_concurrent_inlining()); switch (node->opcode()) { case IrOpcode::kBranch: return ReduceBranch(node); diff --git a/deps/v8/src/compiler/common-operator.h b/deps/v8/src/compiler/common-operator.h index 77483b14e8..4115414908 100644 --- a/deps/v8/src/compiler/common-operator.h +++ b/deps/v8/src/compiler/common-operator.h @@ -617,8 +617,8 @@ class FrameState : public CommonNodeWrapperBase { // test, among others). Also, outer_frame_state points at the start node // for non-inlined functions. This could be avoided by checking // has_outer_frame_state() before casting to FrameState. - CONSTEXPR_DCHECK(node->opcode() == IrOpcode::kFrameState || - node->opcode() == IrOpcode::kStart); + DCHECK(node->opcode() == IrOpcode::kFrameState || + node->opcode() == IrOpcode::kStart); } FrameStateInfo frame_state_info() const { @@ -668,7 +668,7 @@ class FrameState : public CommonNodeWrapperBase { class StartNode final : public CommonNodeWrapperBase { public: explicit constexpr StartNode(Node* node) : CommonNodeWrapperBase(node) { - CONSTEXPR_DCHECK(node->opcode() == IrOpcode::kStart); + DCHECK_EQ(IrOpcode::kStart, node->opcode()); } // The receiver is counted as part of formal parameters. @@ -687,10 +687,10 @@ class StartNode final : public CommonNodeWrapperBase { kExtraOutputCount); // Checking related linkage methods here since they rely on Start node // layout. - CONSTEXPR_DCHECK(Linkage::kJSCallClosureParamIndex == -1); - CONSTEXPR_DCHECK(Linkage::GetJSCallNewTargetParamIndex(argc) == argc + 0); - CONSTEXPR_DCHECK(Linkage::GetJSCallArgCountParamIndex(argc) == argc + 1); - CONSTEXPR_DCHECK(Linkage::GetJSCallContextParamIndex(argc) == argc + 2); + DCHECK_EQ(-1, Linkage::kJSCallClosureParamIndex); + DCHECK_EQ(argc + 0, Linkage::GetJSCallNewTargetParamIndex(argc)); + DCHECK_EQ(argc + 1, Linkage::GetJSCallArgCountParamIndex(argc)); + DCHECK_EQ(argc + 2, Linkage::GetJSCallContextParamIndex(argc)); return argc + kClosure + kNewTarget + kArgCount + kContext; } @@ -773,8 +773,7 @@ class DynamicCheckMapsWithDeoptUnlessNode final : public CommonNodeWrapperBase { public: explicit constexpr DynamicCheckMapsWithDeoptUnlessNode(Node* node) : CommonNodeWrapperBase(node) { - CONSTEXPR_DCHECK(node->opcode() == - IrOpcode::kDynamicCheckMapsWithDeoptUnless); + DCHECK_EQ(IrOpcode::kDynamicCheckMapsWithDeoptUnless, node->opcode()); } #define INPUTS(V) \ diff --git a/deps/v8/src/compiler/compilation-dependencies.cc b/deps/v8/src/compiler/compilation-dependencies.cc index 3149fe490b..8c73a759ff 100644 --- a/deps/v8/src/compiler/compilation-dependencies.cc +++ b/deps/v8/src/compiler/compilation-dependencies.cc @@ -444,7 +444,7 @@ class ElementsKindDependency final : public CompilationDependency { bool IsValid() const override { Handle<AllocationSite> site = site_.object(); ElementsKind kind = site->PointsToLiteral() - ? site->boilerplate().GetElementsKind() + ? site->boilerplate(kAcquireLoad).GetElementsKind() : site->GetElementsKind(); return kind_ == kind; } @@ -580,38 +580,38 @@ bool CompilationDependencies::DependOnProtector(const PropertyCellRef& cell) { } bool CompilationDependencies::DependOnArrayBufferDetachingProtector() { - return DependOnProtector(PropertyCellRef( + return DependOnProtector(MakeRef( broker_, broker_->isolate()->factory()->array_buffer_detaching_protector())); } bool CompilationDependencies::DependOnArrayIteratorProtector() { - return DependOnProtector(PropertyCellRef( + return DependOnProtector(MakeRef( broker_, broker_->isolate()->factory()->array_iterator_protector())); } bool CompilationDependencies::DependOnArraySpeciesProtector() { - return DependOnProtector(PropertyCellRef( + return DependOnProtector(MakeRef( broker_, broker_->isolate()->factory()->array_species_protector())); } bool CompilationDependencies::DependOnNoElementsProtector() { - return DependOnProtector(PropertyCellRef( - broker_, broker_->isolate()->factory()->no_elements_protector())); + return DependOnProtector( + MakeRef(broker_, broker_->isolate()->factory()->no_elements_protector())); } bool CompilationDependencies::DependOnPromiseHookProtector() { - return DependOnProtector(PropertyCellRef( + return DependOnProtector(MakeRef( broker_, broker_->isolate()->factory()->promise_hook_protector())); } bool CompilationDependencies::DependOnPromiseSpeciesProtector() { - return DependOnProtector(PropertyCellRef( + return DependOnProtector(MakeRef( broker_, broker_->isolate()->factory()->promise_species_protector())); } bool CompilationDependencies::DependOnPromiseThenProtector() { - return DependOnProtector(PropertyCellRef( + return DependOnProtector(MakeRef( broker_, broker_->isolate()->factory()->promise_then_protector())); } @@ -680,7 +680,7 @@ namespace { void DependOnStablePrototypeChain(CompilationDependencies* deps, MapRef map, base::Optional<JSObjectRef> last_prototype) { while (true) { - HeapObjectRef proto = map.prototype(); + HeapObjectRef proto = map.prototype().value(); if (!proto.IsJSObject()) { CHECK_EQ(proto.map().oddball_type(), OddballType::kNull); break; @@ -697,7 +697,7 @@ void CompilationDependencies::DependOnStablePrototypeChains( MapContainer const& receiver_maps, WhereToStart start, base::Optional<JSObjectRef> last_prototype) { for (auto map : receiver_maps) { - MapRef receiver_map(broker_, map); + MapRef receiver_map = MakeRef(broker_, map); if (start == kStartAtReceiver) DependOnStableMap(receiver_map); if (receiver_map.IsPrimitiveMap()) { // Perform the implicit ToObject for primitives here. diff --git a/deps/v8/src/compiler/compilation-dependencies.h b/deps/v8/src/compiler/compilation-dependencies.h index 5cf2a3f94c..d2acc35261 100644 --- a/deps/v8/src/compiler/compilation-dependencies.h +++ b/deps/v8/src/compiler/compilation-dependencies.h @@ -34,6 +34,10 @@ class V8_EXPORT_PRIVATE CompilationDependencies : public ZoneObject { V8_WARN_UNUSED_RESULT bool Commit(Handle<Code> code); + // TODO(jgruber): Remove this method once GetPropertyAccessInfo no longer + // uses the two-phase approach between serialization and compilation. + void ClearForConcurrentGetPropertyAccessInfo() { dependencies_.clear(); } + // Return the initial map of {function} and record the assumption that it // stays the initial map. MapRef DependOnInitialMap(const JSFunctionRef& function); diff --git a/deps/v8/src/compiler/constant-folding-reducer.cc b/deps/v8/src/compiler/constant-folding-reducer.cc index 1c672c700d..3b187467db 100644 --- a/deps/v8/src/compiler/constant-folding-reducer.cc +++ b/deps/v8/src/compiler/constant-folding-reducer.cc @@ -5,6 +5,7 @@ #include "src/compiler/constant-folding-reducer.h" #include "src/compiler/js-graph.h" +#include "src/compiler/js-heap-broker.h" #include "src/objects/objects-inl.h" namespace v8 { @@ -63,7 +64,7 @@ ConstantFoldingReducer::ConstantFoldingReducer(Editor* editor, JSGraph* jsgraph, ConstantFoldingReducer::~ConstantFoldingReducer() = default; Reduction ConstantFoldingReducer::Reduce(Node* node) { - DisallowHeapAccessIf no_heap_access(!FLAG_turbo_direct_heap_access); + DisallowHeapAccessIf no_heap_access(!broker()->is_concurrent_inlining()); if (!NodeProperties::IsConstant(node) && NodeProperties::IsTyped(node) && node->op()->HasProperty(Operator::kEliminatable) && node->opcode() != IrOpcode::kFinishRegion) { diff --git a/deps/v8/src/compiler/dead-code-elimination.cc b/deps/v8/src/compiler/dead-code-elimination.cc index 61552ba523..9b5958c81a 100644 --- a/deps/v8/src/compiler/dead-code-elimination.cc +++ b/deps/v8/src/compiler/dead-code-elimination.cc @@ -16,12 +16,14 @@ namespace compiler { DeadCodeElimination::DeadCodeElimination(Editor* editor, Graph* graph, CommonOperatorBuilder* common, - Zone* temp_zone) + Zone* temp_zone, + bool is_concurrent_inlining) : AdvancedReducer(editor), graph_(graph), common_(common), dead_(graph->NewNode(common->Dead())), - zone_(temp_zone) { + zone_(temp_zone), + is_concurrent_inlining_(is_concurrent_inlining) { NodeProperties::SetType(dead_, Type::None()); } @@ -46,7 +48,7 @@ Node* FindDeadInput(Node* node) { } // namespace Reduction DeadCodeElimination::Reduce(Node* node) { - DisallowHeapAccessIf no_heap_access(!FLAG_turbo_direct_heap_access); + DisallowHeapAccessIf no_heap_access(!is_concurrent_inlining_); switch (node->opcode()) { case IrOpcode::kEnd: return ReduceEnd(node); diff --git a/deps/v8/src/compiler/dead-code-elimination.h b/deps/v8/src/compiler/dead-code-elimination.h index 7fb22838c7..3e6914d5e1 100644 --- a/deps/v8/src/compiler/dead-code-elimination.h +++ b/deps/v8/src/compiler/dead-code-elimination.h @@ -40,7 +40,8 @@ class V8_EXPORT_PRIVATE DeadCodeElimination final : public NON_EXPORTED_BASE(AdvancedReducer) { public: DeadCodeElimination(Editor* editor, Graph* graph, - CommonOperatorBuilder* common, Zone* temp_zone); + CommonOperatorBuilder* common, Zone* temp_zone, + bool is_concurrent_inlining); ~DeadCodeElimination() final = default; DeadCodeElimination(const DeadCodeElimination&) = delete; DeadCodeElimination& operator=(const DeadCodeElimination&) = delete; @@ -78,6 +79,8 @@ class V8_EXPORT_PRIVATE DeadCodeElimination final CommonOperatorBuilder* const common_; Node* const dead_; Zone* zone_; + + const bool is_concurrent_inlining_; }; } // namespace compiler diff --git a/deps/v8/src/compiler/decompression-optimizer.cc b/deps/v8/src/compiler/decompression-optimizer.cc index 9b2362c9ef..a8c29d51e4 100644 --- a/deps/v8/src/compiler/decompression-optimizer.cc +++ b/deps/v8/src/compiler/decompression-optimizer.cc @@ -17,7 +17,8 @@ bool IsMachineLoad(Node* const node) { const IrOpcode::Value opcode = node->opcode(); return opcode == IrOpcode::kLoad || opcode == IrOpcode::kPoisonedLoad || opcode == IrOpcode::kProtectedLoad || - opcode == IrOpcode::kUnalignedLoad; + opcode == IrOpcode::kUnalignedLoad || + opcode == IrOpcode::kLoadImmutable; } bool IsTaggedMachineLoad(Node* const node) { @@ -204,6 +205,10 @@ void DecompressionOptimizer::ChangeLoad(Node* const node) { case IrOpcode::kLoad: NodeProperties::ChangeOp(node, machine()->Load(compressed_load_rep)); break; + case IrOpcode::kLoadImmutable: + NodeProperties::ChangeOp(node, + machine()->LoadImmutable(compressed_load_rep)); + break; case IrOpcode::kPoisonedLoad: NodeProperties::ChangeOp(node, machine()->PoisonedLoad(compressed_load_rep)); diff --git a/deps/v8/src/compiler/effect-control-linearizer.cc b/deps/v8/src/compiler/effect-control-linearizer.cc index dedf68e93c..9799691ce6 100644 --- a/deps/v8/src/compiler/effect-control-linearizer.cc +++ b/deps/v8/src/compiler/effect-control-linearizer.cc @@ -7,6 +7,7 @@ #include "include/v8-fast-api-calls.h" #include "src/base/bits.h" #include "src/codegen/code-factory.h" +#include "src/codegen/interface-descriptors-inl.h" #include "src/codegen/machine-type.h" #include "src/common/ptr-compr-inl.h" #include "src/compiler/access-builder.h" @@ -16,11 +17,13 @@ #include "src/compiler/js-graph.h" #include "src/compiler/js-heap-broker.h" #include "src/compiler/linkage.h" +#include "src/compiler/memory-lowering.h" #include "src/compiler/node-matchers.h" #include "src/compiler/node-origin-table.h" #include "src/compiler/node-properties.h" #include "src/compiler/node.h" #include "src/compiler/schedule.h" +#include "src/compiler/select-lowering.h" #include "src/execution/frames.h" #include "src/heap/factory-inl.h" #include "src/objects/heap-number.h" @@ -31,10 +34,13 @@ namespace v8 { namespace internal { namespace compiler { +enum class MaintainSchedule { kMaintain, kDiscard }; +enum class MaskArrayIndexEnable { kDoNotMaskArrayIndex, kMaskArrayIndex }; + class EffectControlLinearizer { public: EffectControlLinearizer(JSGraph* js_graph, Schedule* schedule, - Zone* temp_zone, + JSGraphAssembler* graph_assembler, Zone* temp_zone, SourcePositionTable* source_positions, NodeOriginTable* node_origins, MaskArrayIndexEnable mask_array_index, @@ -48,8 +54,7 @@ class EffectControlLinearizer { source_positions_(source_positions), node_origins_(node_origins), broker_(broker), - graph_assembler_(js_graph, temp_zone, base::nullopt, - should_maintain_schedule() ? schedule : nullptr), + graph_assembler_(graph_assembler), frame_state_zapper_(nullptr) {} void Run(); @@ -112,7 +117,6 @@ class EffectControlLinearizer { Node* LowerCheckedTaggedToFloat64(Node* node, Node* frame_state); Node* LowerCheckedTaggedToTaggedSigned(Node* node, Node* frame_state); Node* LowerCheckedTaggedToTaggedPointer(Node* node, Node* frame_state); - Node* LowerBigIntAsUintN(Node* node, Node* frame_state); Node* LowerChangeUint64ToBigInt(Node* node); Node* LowerTruncateBigIntToUint64(Node* node); Node* LowerChangeTaggedToFloat64(Node* node); @@ -192,6 +196,7 @@ class EffectControlLinearizer { void LowerTransitionElementsKind(Node* node); Node* LowerLoadFieldByIndex(Node* node); Node* LowerLoadMessage(Node* node); + Node* AdaptFastCallArgument(Node* node, CTypeInfo::Type arg_type); Node* LowerFastApiCall(Node* node); Node* LowerLoadTypedElement(Node* node); Node* LowerLoadDataViewElement(Node* node); @@ -307,7 +312,7 @@ class EffectControlLinearizer { return js_graph_->simplified(); } MachineOperatorBuilder* machine() const { return js_graph_->machine(); } - JSGraphAssembler* gasm() { return &graph_assembler_; } + JSGraphAssembler* gasm() const { return graph_assembler_; } JSHeapBroker* broker() const { return broker_; } JSGraph* js_graph_; @@ -319,7 +324,7 @@ class EffectControlLinearizer { SourcePositionTable* source_positions_; NodeOriginTable* node_origins_; JSHeapBroker* broker_; - JSGraphAssembler graph_assembler_; + JSGraphAssembler* graph_assembler_; Node* frame_state_zapper_; // For tracking down compiler::Node::New crashes. }; @@ -1059,9 +1064,6 @@ bool EffectControlLinearizer::TryWireInStateEffect(Node* node, case IrOpcode::kCheckedTaggedToTaggedPointer: result = LowerCheckedTaggedToTaggedPointer(node, frame_state); break; - case IrOpcode::kBigIntAsUintN: - result = LowerBigIntAsUintN(node, frame_state); - break; case IrOpcode::kChangeUint64ToBigInt: result = LowerChangeUint64ToBigInt(node); break; @@ -2934,22 +2936,6 @@ Node* EffectControlLinearizer::LowerCheckBigInt(Node* node, Node* frame_state) { return value; } -Node* EffectControlLinearizer::LowerBigIntAsUintN(Node* node, - Node* frame_state) { - DCHECK(machine()->Is64()); - - const int bits = OpParameter<int>(node->op()); - DCHECK(0 <= bits && bits <= 64); - - if (bits == 64) { - // Reduce to nop. - return node->InputAt(0); - } else { - const uint64_t msk = (1ULL << bits) - 1ULL; - return __ Word64And(node->InputAt(0), __ Int64Constant(msk)); - } -} - Node* EffectControlLinearizer::LowerChangeUint64ToBigInt(Node* node) { DCHECK(machine()->Is64()); @@ -3683,8 +3669,7 @@ Node* EffectControlLinearizer::LowerToBoolean(Node* node) { auto call_descriptor = Linkage::GetStubCallDescriptor( graph()->zone(), callable.descriptor(), callable.descriptor().GetStackParameterCount(), flags, properties); - return __ Call(call_descriptor, __ HeapConstant(callable.code()), obj, - __ NoContextConstant()); + return __ Call(call_descriptor, __ HeapConstant(callable.code()), obj); } Node* EffectControlLinearizer::LowerArgumentsLength(Node* node) { @@ -4974,7 +4959,8 @@ void EffectControlLinearizer::LowerStoreMessage(Node* node) { __ StoreField(AccessBuilder::ForExternalIntPtr(), offset, object_pattern); } -static MachineType MachineTypeFor(CTypeInfo::Type type) { +namespace { +MachineType MachineTypeFor(CTypeInfo::Type type) { switch (type) { case CTypeInfo::Type::kVoid: return MachineType::AnyTagged(); @@ -4993,9 +4979,34 @@ static MachineType MachineTypeFor(CTypeInfo::Type type) { case CTypeInfo::Type::kFloat64: return MachineType::Float64(); case CTypeInfo::Type::kV8Value: + case CTypeInfo::Type::kApiObject: return MachineType::AnyTagged(); } } +} // namespace + +Node* EffectControlLinearizer::AdaptFastCallArgument(Node* node, + CTypeInfo::Type arg_type) { + switch (arg_type) { + case CTypeInfo::Type::kV8Value: { + int kAlign = alignof(uintptr_t); + int kSize = sizeof(uintptr_t); + Node* stack_slot = __ StackSlot(kSize, kAlign); + + __ Store(StoreRepresentation(MachineType::PointerRepresentation(), + kNoWriteBarrier), + stack_slot, 0, node); + + return stack_slot; + } + case CTypeInfo::Type::kFloat32: { + return __ TruncateFloat64ToFloat32(node); + } + default: { + return node; + } + } +} Node* EffectControlLinearizer::LowerFastApiCall(Node* node) { FastApiCallNode n(node); @@ -5060,13 +5071,9 @@ Node* EffectControlLinearizer::LowerFastApiCall(Node* node) { inputs[0] = n.target(); for (int i = FastApiCallNode::kFastTargetInputCount; i < c_arg_count + FastApiCallNode::kFastTargetInputCount; ++i) { - if (c_signature->ArgumentInfo(i - 1).GetType() == - CTypeInfo::Type::kFloat32) { - inputs[i] = - __ TruncateFloat64ToFloat32(NodeProperties::GetValueInput(node, i)); - } else { - inputs[i] = NodeProperties::GetValueInput(node, i); - } + inputs[i] = + AdaptFastCallArgument(NodeProperties::GetValueInput(node, i), + c_signature->ArgumentInfo(i - 1).GetType()); } if (c_signature->HasOptions()) { inputs[c_arg_count + 1] = stack_slot; @@ -5113,6 +5120,7 @@ Node* EffectControlLinearizer::LowerFastApiCall(Node* node) { c_call_result, CheckForMinusZeroMode::kCheckForMinusZero); break; case CTypeInfo::Type::kV8Value: + case CTypeInfo::Type::kApiObject: UNREACHABLE(); } @@ -5859,11 +5867,10 @@ Node* EffectControlLinearizer::CallBuiltin(Builtins::Name builtin, Node* EffectControlLinearizer::LowerAssertType(Node* node) { DCHECK_EQ(node->opcode(), IrOpcode::kAssertType); Type type = OpParameter<Type>(node->op()); - DCHECK(type.IsRange()); - auto range = type.AsRange(); + CHECK(type.CanBeAsserted()); Node* const input = node->InputAt(0); - Node* const min = __ NumberConstant(range->Min()); - Node* const max = __ NumberConstant(range->Max()); + Node* const min = __ NumberConstant(type.Min()); + Node* const max = __ NumberConstant(type.Max()); CallBuiltin(Builtins::kCheckNumberInRange, node->op()->properties(), input, min, max, __ SmiConstant(node->id())); return input; @@ -6462,15 +6469,47 @@ Node* EffectControlLinearizer::BuildIsClearedWeakReference(Node* maybe_object) { #undef __ +namespace { + +MaskArrayIndexEnable MaskArrayForPoisonLevel( + PoisoningMitigationLevel poison_level) { + return (poison_level != PoisoningMitigationLevel::kDontPoison) + ? MaskArrayIndexEnable::kMaskArrayIndex + : MaskArrayIndexEnable::kDoNotMaskArrayIndex; +} + +} // namespace + void LinearizeEffectControl(JSGraph* graph, Schedule* schedule, Zone* temp_zone, SourcePositionTable* source_positions, NodeOriginTable* node_origins, - MaskArrayIndexEnable mask_array_index, - MaintainSchedule maintain_schedule, + PoisoningMitigationLevel poison_level, + JSHeapBroker* broker) { + JSGraphAssembler graph_assembler_(graph, temp_zone, base::nullopt, nullptr); + EffectControlLinearizer linearizer(graph, schedule, &graph_assembler_, + temp_zone, source_positions, node_origins, + MaskArrayForPoisonLevel(poison_level), + MaintainSchedule::kDiscard, broker); + linearizer.Run(); +} + +void LowerToMachineSchedule(JSGraph* js_graph, Schedule* schedule, + Zone* temp_zone, + SourcePositionTable* source_positions, + NodeOriginTable* node_origins, + PoisoningMitigationLevel poison_level, JSHeapBroker* broker) { - EffectControlLinearizer linearizer( - graph, schedule, temp_zone, source_positions, node_origins, - mask_array_index, maintain_schedule, broker); + JSGraphAssembler graph_assembler(js_graph, temp_zone, base::nullopt, + schedule); + EffectControlLinearizer linearizer(js_graph, schedule, &graph_assembler, + temp_zone, source_positions, node_origins, + MaskArrayForPoisonLevel(poison_level), + MaintainSchedule::kMaintain, broker); + MemoryLowering memory_lowering(js_graph, temp_zone, &graph_assembler, + poison_level); + SelectLowering select_lowering(&graph_assembler, js_graph->graph()); + graph_assembler.AddInlineReducer(&memory_lowering); + graph_assembler.AddInlineReducer(&select_lowering); linearizer.Run(); } diff --git a/deps/v8/src/compiler/effect-control-linearizer.h b/deps/v8/src/compiler/effect-control-linearizer.h index fbfd3046dc..fca4899263 100644 --- a/deps/v8/src/compiler/effect-control-linearizer.h +++ b/deps/v8/src/compiler/effect-control-linearizer.h @@ -23,15 +23,18 @@ class Schedule; class SourcePositionTable; class JSHeapBroker; -enum class MaskArrayIndexEnable { kDoNotMaskArrayIndex, kMaskArrayIndex }; - -enum class MaintainSchedule { kMaintain, kDiscard }; - V8_EXPORT_PRIVATE void LinearizeEffectControl( JSGraph* graph, Schedule* schedule, Zone* temp_zone, SourcePositionTable* source_positions, NodeOriginTable* node_origins, - MaskArrayIndexEnable mask_array_index, MaintainSchedule maintain_schedule, - JSHeapBroker* broker); + PoisoningMitigationLevel poison_level, JSHeapBroker* broker); + +// Performs effect control linearization lowering in addition to machine +// lowering, producing a scheduled graph that is ready for instruction +// selection. +V8_EXPORT_PRIVATE void LowerToMachineSchedule( + JSGraph* graph, Schedule* schedule, Zone* temp_zone, + SourcePositionTable* source_positions, NodeOriginTable* node_origins, + PoisoningMitigationLevel poison_level, JSHeapBroker* broker); } // namespace compiler } // namespace internal diff --git a/deps/v8/src/compiler/globals.h b/deps/v8/src/compiler/globals.h index ff5b5a5732..66b3272b43 100644 --- a/deps/v8/src/compiler/globals.h +++ b/deps/v8/src/compiler/globals.h @@ -49,17 +49,24 @@ inline size_t hash_value(StackCheckKind kind) { return static_cast<size_t>(kind); } -// The CallFeedbackRelation states whether the target feedback stored with a -// JSCall is related to the call. If, during lowering, a JSCall (e.g. of a -// higher order function) is replaced by a JSCall with another target, the -// feedback has to be kept but is now unrelated. -enum class CallFeedbackRelation { kRelated, kUnrelated }; +// The CallFeedbackRelation provides the meaning of the call feedback for a +// TurboFan JSCall operator +// - kReceiver: The call target was Function.prototype.apply and its receiver +// was recorded as the feedback value. +// - kTarget: The call target was recorded as the feedback value. +// - kUnrelated: The feedback is no longer related to the call. If, during +// lowering, a JSCall (e.g. of a higher order function) is replaced by a +// JSCall with another target, the feedback has to be kept but is now +// unrelated. +enum class CallFeedbackRelation { kReceiver, kTarget, kUnrelated }; inline std::ostream& operator<<(std::ostream& os, CallFeedbackRelation call_feedback_relation) { switch (call_feedback_relation) { - case CallFeedbackRelation::kRelated: - return os << "CallFeedbackRelation::kRelated"; + case CallFeedbackRelation::kReceiver: + return os << "CallFeedbackRelation::kReceiver"; + case CallFeedbackRelation::kTarget: + return os << "CallFeedbackRelation::kTarget"; case CallFeedbackRelation::kUnrelated: return os << "CallFeedbackRelation::kUnrelated"; } diff --git a/deps/v8/src/compiler/graph-assembler.cc b/deps/v8/src/compiler/graph-assembler.cc index 897e22ac26..73938a5fb9 100644 --- a/deps/v8/src/compiler/graph-assembler.cc +++ b/deps/v8/src/compiler/graph-assembler.cc @@ -5,6 +5,8 @@ #include "src/compiler/graph-assembler.h" #include "src/codegen/code-factory.h" +#include "src/compiler/access-builder.h" +#include "src/compiler/graph-reducer.h" #include "src/compiler/linkage.h" #include "src/compiler/schedule.h" // For TNode types. @@ -329,6 +331,21 @@ BasicBlock* GraphAssembler::BasicBlockUpdater::Finalize(BasicBlock* original) { return block; } +class V8_NODISCARD GraphAssembler::BlockInlineReduction { + public: + explicit BlockInlineReduction(GraphAssembler* gasm) : gasm_(gasm) { + DCHECK(!gasm_->inline_reductions_blocked_); + gasm_->inline_reductions_blocked_ = true; + } + ~BlockInlineReduction() { + DCHECK(gasm_->inline_reductions_blocked_); + gasm_->inline_reductions_blocked_ = false; + } + + private: + GraphAssembler* gasm_; +}; + GraphAssembler::GraphAssembler( MachineGraph* mcgraph, Zone* zone, base::Optional<NodeChangedCallback> node_changed_callback, @@ -342,6 +359,8 @@ GraphAssembler::GraphAssembler( ? new BasicBlockUpdater(schedule, mcgraph->graph(), mcgraph->common(), zone) : nullptr), + inline_reducers_(zone), + inline_reductions_blocked_(false), loop_headers_(zone), mark_loop_exits_(mark_loop_exits) {} @@ -530,6 +549,31 @@ Node* JSGraphAssembler::StoreField(FieldAccess const& access, Node* object, value, effect(), control())); } +#ifdef V8_MAP_PACKING +TNode<Map> GraphAssembler::UnpackMapWord(Node* map_word) { + map_word = BitcastTaggedToWordForTagAndSmiBits(map_word); + // TODO(wenyuzhao): Clear header metadata. + Node* map = WordXor(map_word, IntPtrConstant(Internals::kMapWordXorMask)); + return TNode<Map>::UncheckedCast(BitcastWordToTagged(map)); +} + +Node* GraphAssembler::PackMapWord(TNode<Map> map) { + Node* map_word = BitcastTaggedToWordForTagAndSmiBits(map); + Node* packed = WordXor(map_word, IntPtrConstant(Internals::kMapWordXorMask)); + return BitcastWordToTaggedSigned(packed); +} +#endif + +TNode<Map> GraphAssembler::LoadMap(Node* object) { + Node* map_word = Load(MachineType::TaggedPointer(), object, + HeapObject::kMapOffset - kHeapObjectTag); +#ifdef V8_MAP_PACKING + return UnpackMapWord(map_word); +#else + return TNode<Map>::UncheckedCast(map_word); +#endif +} + Node* JSGraphAssembler::StoreElement(ElementAccess const& access, Node* object, Node* index, Node* value) { return AddNode(graph()->NewNode(simplified()->StoreElement(access), object, @@ -968,6 +1012,28 @@ Node* GraphAssembler::AddClonedNode(Node* node) { } Node* GraphAssembler::AddNode(Node* node) { + if (!inline_reducers_.empty() && !inline_reductions_blocked_) { + // Reducers may add new nodes to the graph using this graph assembler, + // however they should never introduce nodes that need further reduction, + // so block reduction + BlockInlineReduction scope(this); + Reduction reduction; + for (auto reducer : inline_reducers_) { + reduction = reducer->Reduce(node, nullptr); + if (reduction.Changed()) break; + } + if (reduction.Changed()) { + Node* replacement = reduction.replacement(); + if (replacement != node) { + // Replace all uses of node and kill the node to make sure we don't + // leave dangling dead uses. + NodeProperties::ReplaceUses(node, replacement, effect(), control()); + node->Kill(); + return replacement; + } + } + } + if (block_updater_) { block_updater_->AddNode(node); } diff --git a/deps/v8/src/compiler/graph-assembler.h b/deps/v8/src/compiler/graph-assembler.h index bb3bc34a58..d368f36407 100644 --- a/deps/v8/src/compiler/graph-assembler.h +++ b/deps/v8/src/compiler/graph-assembler.h @@ -27,6 +27,7 @@ namespace compiler { class Schedule; class BasicBlock; +class Reducer; #define PURE_ASSEMBLER_MACH_UNOP_LIST(V) \ V(BitcastFloat32ToInt32) \ @@ -270,6 +271,12 @@ class V8_EXPORT_PRIVATE GraphAssembler { CHECKED_ASSEMBLER_MACH_BINOP_LIST(BINOP_DECL) #undef BINOP_DECL +#ifdef V8_MAP_PACKING + Node* PackMapWord(TNode<Map> map); + TNode<Map> UnpackMapWord(Node* map_word); +#endif + TNode<Map> LoadMap(Node* object); + Node* DebugBreak(); // Unreachable nodes are similar to Goto in that they reset effect/control to @@ -436,6 +443,16 @@ class V8_EXPORT_PRIVATE GraphAssembler { void ConnectUnreachableToEnd(); + // Add an inline reducers such that nodes added to the graph will be run + // through the reducers and possibly further lowered. Each reducer should + // operate on independent node types since once a reducer changes a node we + // no longer run any other reducers on that node. The reducers should also + // only generate new nodes that wouldn't be further reduced, as new nodes + // generated by a reducer won't be passed through the reducers again. + void AddInlineReducer(Reducer* reducer) { + inline_reducers_.push_back(reducer); + } + Control control() const { return Control(control_); } Effect effect() const { return Effect(effect_); } @@ -532,6 +549,8 @@ class V8_EXPORT_PRIVATE GraphAssembler { }; private: + class BlockInlineReduction; + template <typename... Vars> void BranchImpl(Node* condition, GraphAssemblerLabel<sizeof...(Vars)>* if_true, @@ -551,6 +570,11 @@ class V8_EXPORT_PRIVATE GraphAssembler { base::Optional<NodeChangedCallback> node_changed_callback_; std::unique_ptr<BasicBlockUpdater> block_updater_; + // Inline reducers enable reductions to be performed to nodes as they are + // added to the graph with the graph assembler. + ZoneVector<Reducer*> inline_reducers_; + bool inline_reductions_blocked_; + // Track loop information in order to properly mark loop exits with // {LoopExit,LoopExitEffect,LoopExitValue} nodes. The outermost level has // a nesting level of 0. See also GraphAssembler::LoopScope. diff --git a/deps/v8/src/compiler/graph-reducer.cc b/deps/v8/src/compiler/graph-reducer.cc index 998f37eea8..643f662262 100644 --- a/deps/v8/src/compiler/graph-reducer.cc +++ b/deps/v8/src/compiler/graph-reducer.cc @@ -112,7 +112,7 @@ Reduction GraphReducer::Reduce(Node* const node) { if (FLAG_trace_turbo_reduction) { UnparkedScopeIfNeeded unparked(broker_); // TODO(neis): Disallow racy handle dereference once we stop - // supporting --no-local-heaps --no-turbo-direct-heap-access. + // supporting --no-local-heaps --no-concurrent-inlining. AllowHandleDereference allow_deref; StdoutStream{} << "- In-place update of #" << *node << " by reducer " << (*i)->reducer_name() << std::endl; @@ -125,7 +125,7 @@ Reduction GraphReducer::Reduce(Node* const node) { if (FLAG_trace_turbo_reduction) { UnparkedScopeIfNeeded unparked(broker_); // TODO(neis): Disallow racy handle dereference once we stop - // supporting --no-local-heaps --no-turbo-direct-heap-access. + // supporting --no-local-heaps --no-concurrent-inlining. AllowHandleDereference allow_deref; StdoutStream{} << "- Replacement of #" << *node << " with #" << *(reduction.replacement()) << " by reducer " diff --git a/deps/v8/src/compiler/graph-visualizer.cc b/deps/v8/src/compiler/graph-visualizer.cc index eb3e4168f9..cc1d07085f 100644 --- a/deps/v8/src/compiler/graph-visualizer.cc +++ b/deps/v8/src/compiler/graph-visualizer.cc @@ -421,7 +421,7 @@ std::ostream& operator<<(std::ostream& os, const GraphAsJSON& ad) { class GraphC1Visualizer { public: - GraphC1Visualizer(std::ostream& os, Zone* zone); // NOLINT + GraphC1Visualizer(std::ostream& os, Zone* zone); GraphC1Visualizer(const GraphC1Visualizer&) = delete; GraphC1Visualizer& operator=(const GraphC1Visualizer&) = delete; @@ -1132,8 +1132,9 @@ std::ostream& operator<<(std::ostream& os, const InstructionOperandAsJSON& o) { os << ",\"tooltip\": \"MUST_HAVE_SLOT\""; break; } - case UnallocatedOperand::SAME_AS_FIRST_INPUT: { - os << ",\"tooltip\": \"SAME_AS_FIRST_INPUT\""; + case UnallocatedOperand::SAME_AS_INPUT: { + os << ",\"tooltip\": \"SAME_AS_INPUT: " << unalloc->input_index() + << "\""; break; } case UnallocatedOperand::REGISTER_OR_SLOT: { diff --git a/deps/v8/src/compiler/graph-visualizer.h b/deps/v8/src/compiler/graph-visualizer.h index 5585933015..39a2ef5021 100644 --- a/deps/v8/src/compiler/graph-visualizer.h +++ b/deps/v8/src/compiler/graph-visualizer.h @@ -6,7 +6,8 @@ #define V8_COMPILER_GRAPH_VISUALIZER_H_ #include <stdio.h> -#include <fstream> // NOLINT(readability/streams) + +#include <fstream> #include <iosfwd> #include <memory> diff --git a/deps/v8/src/compiler/graph.h b/deps/v8/src/compiler/graph.h index eb6bfd7e77..25682dc9ae 100644 --- a/deps/v8/src/compiler/graph.h +++ b/deps/v8/src/compiler/graph.h @@ -67,7 +67,7 @@ class V8_EXPORT_PRIVATE Graph final : public NON_EXPORTED_BASE(ZoneObject) { // Factory template for nodes with static input counts. // Note: Template magic below is used to ensure this method is only considered - // for argument types convertible to Node* during overload resoluation. + // for argument types convertible to Node* during overload resolution. template <typename... Nodes, typename = typename std::enable_if_t< base::all(std::is_convertible<Nodes, Node*>::value...)>> diff --git a/deps/v8/src/compiler/heap-refs.cc b/deps/v8/src/compiler/heap-refs.cc new file mode 100644 index 0000000000..7931407a7e --- /dev/null +++ b/deps/v8/src/compiler/heap-refs.cc @@ -0,0 +1,4594 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "src/compiler/heap-refs.h" + +#ifdef ENABLE_SLOW_DCHECKS +#include <algorithm> +#endif + +#include "src/api/api-inl.h" +#include "src/ast/modules.h" +#include "src/codegen/code-factory.h" +#include "src/compiler/graph-reducer.h" +#include "src/compiler/js-heap-broker.h" +#include "src/execution/protectors-inl.h" +#include "src/objects/descriptor-array.h" +#include "src/objects/heap-number-inl.h" +#include "src/objects/js-array-buffer-inl.h" +#include "src/objects/property-cell.h" +#include "src/objects/template-objects-inl.h" + +namespace v8 { +namespace internal { +namespace compiler { + +#define TRACE(broker, x) TRACE_BROKER(broker, x) +#define TRACE_MISSING(broker, x) TRACE_BROKER_MISSING(broker, x) + +#define FORWARD_DECL(Name, ...) class Name##Data; +HEAP_BROKER_OBJECT_LIST(FORWARD_DECL) +#undef FORWARD_DECL + +// There are several kinds of ObjectData values. +// +// kSmi: The underlying V8 object is a Smi and the data is an instance of the +// base class (ObjectData), i.e. it's basically just the handle. Because the +// object is a Smi, it's safe to access the handle in order to extract the +// number value, and AsSmi() does exactly that. +// +// kSerializedHeapObject: The underlying V8 object is a HeapObject and the +// data is an instance of the corresponding (most-specific) subclass, e.g. +// JSFunctionData, which provides serialized information about the object. +// +// kBackgroundSerializedHeapObject: Like kSerializedHeapObject, but +// allows serialization from the background thread. +// +// kUnserializedHeapObject: The underlying V8 object is a HeapObject and the +// data is an instance of the base class (ObjectData), i.e. it basically +// carries no information other than the handle. +// +// kNeverSerializedHeapObject: The underlying V8 object is a (potentially +// mutable) HeapObject and the data is an instance of ObjectData. Its handle +// must be persistent so that the GC can update it at a safepoint. Via this +// handle, the object can be accessed concurrently to the main thread. To be +// used the flag --concurrent-inlining must be on. +// +// kUnserializedReadOnlyHeapObject: The underlying V8 object is a read-only +// HeapObject and the data is an instance of ObjectData. For +// ReadOnlyHeapObjects, it is OK to access heap even from off-thread, so +// these objects need not be serialized. +enum ObjectDataKind { + kSmi, + kSerializedHeapObject, + kBackgroundSerializedHeapObject, + kUnserializedHeapObject, + kNeverSerializedHeapObject, + kUnserializedReadOnlyHeapObject +}; + +namespace { + +bool IsReadOnlyHeapObjectForCompiler(HeapObject object) { + DisallowGarbageCollection no_gc; + // TODO(jgruber): Remove this compiler-specific predicate and use the plain + // heap predicate instead. This would involve removing the special cases for + // builtins. + return (object.IsCode() && Code::cast(object).is_builtin()) || + (object.IsHeapObject() && + ReadOnlyHeap::Contains(HeapObject::cast(object))); +} + +} // namespace + +class ObjectData : public ZoneObject { + public: + ObjectData(JSHeapBroker* broker, ObjectData** storage, Handle<Object> object, + ObjectDataKind kind) + : object_(object), + kind_(kind) +#ifdef DEBUG + , + broker_(broker) +#endif // DEBUG + { + // This assignment ensures we don't end up inserting the same object + // in an endless recursion. + *storage = this; + + TRACE(broker, "Creating data " << this << " for handle " << object.address() + << " (" << Brief(*object) << ")"); + + // It is safe to access read only heap objects and builtins from a + // background thread. When we read fileds of these objects, we may create + // ObjectData on the background thread even without a canonical handle + // scope. This is safe too since we don't create handles but just get + // handles from read only root table or builtins table which is what + // canonical scope uses as well. For all other objects we should have + // created ObjectData in canonical handle scope on the main thread. + CHECK_IMPLIES( + broker->mode() == JSHeapBroker::kDisabled || + broker->mode() == JSHeapBroker::kSerializing, + broker->isolate()->handle_scope_data()->canonical_scope != nullptr); + CHECK_IMPLIES(broker->mode() == JSHeapBroker::kSerialized, + kind == kUnserializedReadOnlyHeapObject || kind == kSmi || + kind == kNeverSerializedHeapObject || + kind == kBackgroundSerializedHeapObject); + CHECK_IMPLIES(kind == kUnserializedReadOnlyHeapObject, + object->IsHeapObject() && IsReadOnlyHeapObjectForCompiler( + HeapObject::cast(*object))); + } + +#define DECLARE_IS(Name, ...) bool Is##Name() const; + HEAP_BROKER_OBJECT_LIST(DECLARE_IS) +#undef DECLARE_IS + +#define DECLARE_AS(Name, ...) Name##Data* As##Name(); + HEAP_BROKER_OBJECT_LIST(DECLARE_AS) +#undef DECLARE_AS + + Handle<Object> object() const { return object_; } + ObjectDataKind kind() const { return kind_; } + bool is_smi() const { return kind_ == kSmi; } + bool should_access_heap() const { + return kind_ == kUnserializedHeapObject || + kind_ == kNeverSerializedHeapObject || + kind_ == kUnserializedReadOnlyHeapObject; + } + bool IsNull() const { return object_->IsNull(); } + +#ifdef DEBUG + enum class Usage{kUnused, kOnlyIdentityUsed, kDataUsed}; + mutable Usage used_status = Usage::kUnused; + + JSHeapBroker* broker() const { return broker_; } +#endif // DEBUG + + private: + Handle<Object> const object_; + ObjectDataKind const kind_; +#ifdef DEBUG + JSHeapBroker* const broker_; // For DCHECKs. +#endif // DEBUG +}; + +namespace { + +template <class T> +constexpr bool IsSerializedRef() { + return ref_traits<T>::ref_serialization_kind == + RefSerializationKind::kSerialized; +} + +RefSerializationKind RefSerializationKindOf(ObjectData* const data) { + Object o = *data->object(); + if (o.IsSmi()) { + return RefSerializationKind::kNeverSerialized; +#define DEFINE_REF_SERIALIZATION_KIND(Name, Kind) \ + } \ + /* NOLINTNEXTLINE(readability/braces) */ \ + else if (o.Is##Name()) { \ + return ref_traits<Name>::ref_serialization_kind; + HEAP_BROKER_OBJECT_LIST(DEFINE_REF_SERIALIZATION_KIND) +#undef DEFINE_REF_SERIALIZATION_KIND + } + UNREACHABLE(); +} + +} // namespace + +class HeapObjectData : public ObjectData { + public: + HeapObjectData(JSHeapBroker* broker, ObjectData** storage, + Handle<HeapObject> object, + ObjectDataKind kind = ObjectDataKind::kSerializedHeapObject); + + base::Optional<bool> TryGetBooleanValue(JSHeapBroker* broker) const; + ObjectData* map() const { return map_; } + InstanceType GetMapInstanceType() const; + + private: + base::Optional<bool> TryGetBooleanValueImpl(JSHeapBroker* broker) const; + + ObjectData* const map_; +}; + +class PropertyCellData : public HeapObjectData { + public: + PropertyCellData(JSHeapBroker* broker, ObjectData** storage, + Handle<PropertyCell> object, + ObjectDataKind kind = ObjectDataKind::kSerializedHeapObject); + + bool Serialize(JSHeapBroker* broker); + + PropertyDetails property_details() const { + CHECK(serialized()); + return property_details_; + } + + ObjectData* value() const { + DCHECK(serialized()); + return value_; + } + + private: + PropertyDetails property_details_ = PropertyDetails::Empty(); + ObjectData* value_ = nullptr; + + bool serialized() const { return value_ != nullptr; } +}; + +// TODO(mslekova): Once we have real-world usage data, we might want to +// reimplement this as sorted vector instead, to reduce the memory overhead. +typedef ZoneMap<ObjectData*, HolderLookupResult> KnownReceiversMap; + +class FunctionTemplateInfoData : public HeapObjectData { + public: + FunctionTemplateInfoData(JSHeapBroker* broker, ObjectData** storage, + Handle<FunctionTemplateInfo> object); + + bool is_signature_undefined() const { return is_signature_undefined_; } + bool accept_any_receiver() const { return accept_any_receiver_; } + bool has_call_code() const { return has_call_code_; } + + void SerializeCallCode(JSHeapBroker* broker); + ObjectData* call_code() const { return call_code_; } + ZoneVector<Address> c_functions() const { return c_functions_; } + ZoneVector<const CFunctionInfo*> c_signatures() const { + return c_signatures_; + } + KnownReceiversMap& known_receivers() { return known_receivers_; } + + private: + bool is_signature_undefined_ = false; + bool accept_any_receiver_ = false; + bool has_call_code_ = false; + + ObjectData* call_code_ = nullptr; + ZoneVector<Address> c_functions_; + ZoneVector<const CFunctionInfo*> c_signatures_; + KnownReceiversMap known_receivers_; +}; + +class CallHandlerInfoData : public HeapObjectData { + public: + CallHandlerInfoData(JSHeapBroker* broker, ObjectData** storage, + Handle<CallHandlerInfo> object); + + Address callback() const { return callback_; } + + void Serialize(JSHeapBroker* broker); + ObjectData* data() const { return data_; } + + private: + Address const callback_; + + ObjectData* data_ = nullptr; +}; + +namespace { + +ZoneVector<Address> GetCFunctions(FixedArray function_overloads, Zone* zone) { + const int len = function_overloads.length() / + FunctionTemplateInfo::kFunctionOverloadEntrySize; + ZoneVector<Address> c_functions = ZoneVector<Address>(len, zone); + for (int i = 0; i < len; i++) { + c_functions[i] = v8::ToCData<Address>(function_overloads.get( + FunctionTemplateInfo::kFunctionOverloadEntrySize * i)); + } + return c_functions; +} + +ZoneVector<const CFunctionInfo*> GetCSignatures(FixedArray function_overloads, + Zone* zone) { + const int len = function_overloads.length() / + FunctionTemplateInfo::kFunctionOverloadEntrySize; + ZoneVector<const CFunctionInfo*> c_signatures = + ZoneVector<const CFunctionInfo*>(len, zone); + for (int i = 0; i < len; i++) { + c_signatures[i] = v8::ToCData<const CFunctionInfo*>(function_overloads.get( + FunctionTemplateInfo::kFunctionOverloadEntrySize * i + 1)); + } + return c_signatures; +} + +} // namespace + +FunctionTemplateInfoData::FunctionTemplateInfoData( + JSHeapBroker* broker, ObjectData** storage, + Handle<FunctionTemplateInfo> object) + : HeapObjectData(broker, storage, object), + c_functions_(broker->zone()), + c_signatures_(broker->zone()), + known_receivers_(broker->zone()) { + DCHECK(!broker->is_concurrent_inlining()); + + auto function_template_info = Handle<FunctionTemplateInfo>::cast(object); + + FixedArray function_overloads_array = + FixedArray::cast(function_template_info->GetCFunctionOverloads()); + c_functions_ = GetCFunctions(function_overloads_array, broker->zone()); + c_signatures_ = GetCSignatures(function_overloads_array, broker->zone()); + + is_signature_undefined_ = + function_template_info->signature().IsUndefined(broker->isolate()); + accept_any_receiver_ = function_template_info->accept_any_receiver(); + + CallOptimization call_optimization(broker->local_isolate_or_isolate(), + object); + has_call_code_ = call_optimization.is_simple_api_call(); +} + +CallHandlerInfoData::CallHandlerInfoData(JSHeapBroker* broker, + ObjectData** storage, + Handle<CallHandlerInfo> object) + : HeapObjectData(broker, storage, object), + callback_(v8::ToCData<Address>(object->callback())) { + DCHECK(!broker->is_concurrent_inlining()); +} + +PropertyCellData::PropertyCellData(JSHeapBroker* broker, ObjectData** storage, + Handle<PropertyCell> object, + ObjectDataKind kind) + : HeapObjectData(broker, storage, object, kind) {} + +bool PropertyCellData::Serialize(JSHeapBroker* broker) { + if (serialized()) return true; + + TraceScope tracer(broker, this, "PropertyCellData::Serialize"); + auto cell = Handle<PropertyCell>::cast(object()); + + // While this code runs on a background thread, the property cell might + // undergo state transitions via calls to PropertyCell::Transition. These + // transitions follow a certain protocol on which we rely here to ensure that + // we only report success when we can guarantee consistent data. A key + // property is that after transitioning from cell type A to B (A != B), there + // will never be a transition back to A, unless A is kConstant and the new + // value is the hole (i.e. the property cell was invalidated, which is a final + // state). + + PropertyDetails property_details = cell->property_details(kAcquireLoad); + + Handle<Object> value = + broker->CanonicalPersistentHandle(cell->value(kAcquireLoad)); + if (broker->ObjectMayBeUninitialized(value)) { + DCHECK(!broker->IsMainThread()); + return false; + } + + { + PropertyDetails property_details_again = + cell->property_details(kAcquireLoad); + if (property_details != property_details_again) { + DCHECK(!broker->IsMainThread()); + return false; + } + } + + if (property_details.cell_type() == PropertyCellType::kConstant) { + Handle<Object> value_again = + broker->CanonicalPersistentHandle(cell->value(kAcquireLoad)); + if (*value != *value_again) { + DCHECK(!broker->IsMainThread()); + return false; + } + } + + ObjectData* value_data = broker->TryGetOrCreateData(value); + if (value_data == nullptr) { + DCHECK(!broker->IsMainThread()); + return false; + } + + PropertyCell::CheckDataIsCompatible(property_details, *value); + + DCHECK(!serialized()); + property_details_ = property_details; + value_ = value_data; + DCHECK(serialized()); + return true; +} + +void FunctionTemplateInfoData::SerializeCallCode(JSHeapBroker* broker) { + if (call_code_ != nullptr) return; + + TraceScope tracer(broker, this, + "FunctionTemplateInfoData::SerializeCallCode"); + auto function_template_info = Handle<FunctionTemplateInfo>::cast(object()); + call_code_ = + broker->GetOrCreateData(function_template_info->call_code(kAcquireLoad)); + if (call_code_->should_access_heap()) { + // TODO(mvstanton): When ObjectRef is in the never serialized list, this + // code can be removed. + broker->GetOrCreateData( + Handle<CallHandlerInfo>::cast(call_code_->object())->data()); + } else { + call_code_->AsCallHandlerInfo()->Serialize(broker); + } +} + +void CallHandlerInfoData::Serialize(JSHeapBroker* broker) { + if (data_ != nullptr) return; + + TraceScope tracer(broker, this, "CallHandlerInfoData::Serialize"); + auto call_handler_info = Handle<CallHandlerInfo>::cast(object()); + data_ = broker->GetOrCreateData(call_handler_info->data()); +} + +class JSReceiverData : public HeapObjectData { + public: + JSReceiverData(JSHeapBroker* broker, ObjectData** storage, + Handle<JSReceiver> object, ObjectDataKind kind) + : HeapObjectData(broker, storage, object, kind) {} +}; + +class JSObjectData : public JSReceiverData { + public: + JSObjectData(JSHeapBroker* broker, ObjectData** storage, + Handle<JSObject> object); + + // Recursive serialization of all reachable JSObjects. + void SerializeAsBoilerplate(JSHeapBroker* broker); + ObjectData* GetInobjectField(int property_index) const; + + // Shallow serialization of {elements}. + void SerializeElements(JSHeapBroker* broker); + bool serialized_elements() const { return serialized_elements_; } + ObjectData* elements() const; + + void SerializeObjectCreateMap(JSHeapBroker* broker); + + ObjectData* object_create_map( + JSHeapBroker* broker) const { // Can be nullptr. + if (!serialized_object_create_map_) { + DCHECK_NULL(object_create_map_); + TRACE_MISSING(broker, "object_create_map on " << this); + } + return object_create_map_; + } + + ObjectData* GetOwnConstantElement( + JSHeapBroker* broker, uint32_t index, + SerializationPolicy policy = SerializationPolicy::kAssumeSerialized); + ObjectData* GetOwnFastDataProperty( + JSHeapBroker* broker, Representation representation, + FieldIndex field_index, + SerializationPolicy policy = SerializationPolicy::kAssumeSerialized); + ObjectData* GetOwnDictionaryProperty(JSHeapBroker* broker, + InternalIndex dict_index, + SerializationPolicy policy); + + // This method is only used to assert our invariants. + bool cow_or_empty_elements_tenured() const; + + private: + void SerializeRecursiveAsBoilerplate(JSHeapBroker* broker, int max_depths); + + ObjectData* elements_ = nullptr; + bool cow_or_empty_elements_tenured_ = false; + // The {serialized_as_boilerplate} flag is set when all recursively + // reachable JSObjects are serialized. + bool serialized_as_boilerplate_ = false; + bool serialized_elements_ = false; + + ZoneVector<ObjectData*> inobject_fields_; + + bool serialized_object_create_map_ = false; + ObjectData* object_create_map_ = nullptr; + + // Elements (indexed properties) that either + // (1) are known to exist directly on the object as non-writable and + // non-configurable, or (2) are known not to (possibly they don't exist at + // all). In case (2), the second pair component is nullptr. + ZoneVector<std::pair<uint32_t, ObjectData*>> own_constant_elements_; + // Properties that either: + // (1) are known to exist directly on the object, or + // (2) are known not to (possibly they don't exist at all). + // In case (2), the second pair component is nullptr. + // For simplicity, this may in theory overlap with inobject_fields_. + // For fast mode objects, the keys of the map are the property_index() values + // of the respective property FieldIndex'es. For slow mode objects, the keys + // are the dictionary indicies. + ZoneUnorderedMap<int, ObjectData*> own_properties_; +}; + +void JSObjectData::SerializeObjectCreateMap(JSHeapBroker* broker) { + if (serialized_object_create_map_) return; + serialized_object_create_map_ = true; + + TraceScope tracer(broker, this, "JSObjectData::SerializeObjectCreateMap"); + Handle<JSObject> jsobject = Handle<JSObject>::cast(object()); + + if (jsobject->map().is_prototype_map()) { + Handle<Object> maybe_proto_info(jsobject->map().prototype_info(), + broker->isolate()); + if (maybe_proto_info->IsPrototypeInfo()) { + auto proto_info = Handle<PrototypeInfo>::cast(maybe_proto_info); + if (proto_info->HasObjectCreateMap()) { + DCHECK_NULL(object_create_map_); + object_create_map_ = + broker->GetOrCreateData(proto_info->ObjectCreateMap()); + } + } + } +} + +namespace { + +base::Optional<ObjectRef> GetOwnElementFromHeap(JSHeapBroker* broker, + Handle<Object> receiver, + uint32_t index, + bool constant_only) { + LookupIterator it(broker->isolate(), receiver, index, LookupIterator::OWN); + if (it.state() == LookupIterator::DATA && + (!constant_only || (it.IsReadOnly() && !it.IsConfigurable()))) { + return MakeRef(broker, it.GetDataValue()); + } + return base::nullopt; +} + +ObjectRef GetOwnFastDataPropertyFromHeap(JSHeapBroker* broker, + Handle<JSObject> receiver, + Representation representation, + FieldIndex field_index) { + Handle<Object> constant = + JSObject::FastPropertyAt(receiver, representation, field_index); + return ObjectRef(broker, constant); +} + +ObjectRef GetOwnDictionaryPropertyFromHeap(JSHeapBroker* broker, + Handle<JSObject> receiver, + InternalIndex dict_index) { + Handle<Object> constant = + JSObject::DictionaryPropertyAt(receiver, dict_index); + return ObjectRef(broker, constant); +} + +} // namespace + +ObjectData* JSObjectData::GetOwnConstantElement(JSHeapBroker* broker, + uint32_t index, + SerializationPolicy policy) { + for (auto const& p : own_constant_elements_) { + if (p.first == index) return p.second; + } + + if (policy == SerializationPolicy::kAssumeSerialized) { + TRACE_MISSING(broker, "knowledge about index " << index << " on " << this); + return nullptr; + } + + base::Optional<ObjectRef> element = + GetOwnElementFromHeap(broker, object(), index, true); + ObjectData* result = element.has_value() ? element->data() : nullptr; + own_constant_elements_.push_back({index, result}); + return result; +} + +ObjectData* JSObjectData::GetOwnFastDataProperty(JSHeapBroker* broker, + Representation representation, + FieldIndex field_index, + SerializationPolicy policy) { + auto p = own_properties_.find(field_index.property_index()); + if (p != own_properties_.end()) return p->second; + + if (policy == SerializationPolicy::kAssumeSerialized) { + TRACE_MISSING(broker, "knowledge about fast property with index " + << field_index.property_index() << " on " + << this); + return nullptr; + } + + ObjectRef property = GetOwnFastDataPropertyFromHeap( + broker, Handle<JSObject>::cast(object()), representation, field_index); + ObjectData* result(property.data()); + own_properties_.insert(std::make_pair(field_index.property_index(), result)); + return result; +} + +ObjectData* JSObjectData::GetOwnDictionaryProperty(JSHeapBroker* broker, + InternalIndex dict_index, + SerializationPolicy policy) { + auto p = own_properties_.find(dict_index.as_int()); + if (p != own_properties_.end()) return p->second; + + if (policy == SerializationPolicy::kAssumeSerialized) { + TRACE_MISSING(broker, "knowledge about dictionary property with index " + << dict_index.as_int() << " on " << this); + return nullptr; + } + + ObjectRef property = GetOwnDictionaryPropertyFromHeap( + broker, Handle<JSObject>::cast(object()), dict_index); + ObjectData* result(property.data()); + own_properties_.insert(std::make_pair(dict_index.as_int(), result)); + return result; +} + +class JSTypedArrayData : public JSObjectData { + public: + JSTypedArrayData(JSHeapBroker* broker, ObjectData** storage, + Handle<JSTypedArray> object) + : JSObjectData(broker, storage, object) {} + + // TODO(v8:7790): Once JSObject is no longer serialized, also make + // JSTypedArrayRef never-serialized. + STATIC_ASSERT(IsSerializedRef<JSObject>()); + + void Serialize(JSHeapBroker* broker); + bool serialized() const { return serialized_; } + + bool is_on_heap() const { return is_on_heap_; } + size_t length() const { return length_; } + void* data_ptr() const { return data_ptr_; } + + ObjectData* buffer() const { return buffer_; } + + private: + bool serialized_ = false; + bool is_on_heap_ = false; + size_t length_ = 0; + void* data_ptr_ = nullptr; + ObjectData* buffer_ = nullptr; +}; + +void JSTypedArrayData::Serialize(JSHeapBroker* broker) { + if (serialized_) return; + serialized_ = true; + + TraceScope tracer(broker, this, "JSTypedArrayData::Serialize"); + Handle<JSTypedArray> typed_array = Handle<JSTypedArray>::cast(object()); + + is_on_heap_ = typed_array->is_on_heap(); + length_ = typed_array->length(); + data_ptr_ = typed_array->DataPtr(); + + if (!is_on_heap()) { + DCHECK_NULL(buffer_); + buffer_ = broker->GetOrCreateData(typed_array->buffer()); + } +} + +class ArrayBoilerplateDescriptionData : public HeapObjectData { + public: + ArrayBoilerplateDescriptionData(JSHeapBroker* broker, ObjectData** storage, + Handle<ArrayBoilerplateDescription> object) + : HeapObjectData(broker, storage, object), + constants_elements_length_(object->constant_elements().length()) { + DCHECK(!broker->is_concurrent_inlining()); + } + + int constants_elements_length() const { return constants_elements_length_; } + + private: + int const constants_elements_length_; +}; + +class JSDataViewData : public JSObjectData { + public: + JSDataViewData(JSHeapBroker* broker, ObjectData** storage, + Handle<JSDataView> object); + + size_t byte_length() const { return byte_length_; } + + private: + size_t const byte_length_; +}; + +class JSBoundFunctionData : public JSObjectData { + public: + JSBoundFunctionData(JSHeapBroker* broker, ObjectData** storage, + Handle<JSBoundFunction> object); + + bool Serialize(JSHeapBroker* broker); + bool serialized() const { return serialized_; } + + ObjectData* bound_target_function() const { + DCHECK(!broker()->is_concurrent_inlining()); + return bound_target_function_; + } + ObjectData* bound_this() const { + DCHECK(!broker()->is_concurrent_inlining()); + return bound_this_; + } + ObjectData* bound_arguments() const { + DCHECK(!broker()->is_concurrent_inlining()); + return bound_arguments_; + } + + private: + bool serialized_ = false; + + ObjectData* bound_target_function_ = nullptr; + ObjectData* bound_this_ = nullptr; + ObjectData* bound_arguments_ = nullptr; +}; + +class JSFunctionData : public JSObjectData { + public: + JSFunctionData(JSHeapBroker* broker, ObjectData** storage, + Handle<JSFunction> object); + + bool has_feedback_vector() const { return has_feedback_vector_; } + bool has_initial_map() const { return has_initial_map_; } + bool has_prototype() const { return has_prototype_; } + bool PrototypeRequiresRuntimeLookup() const { + return PrototypeRequiresRuntimeLookup_; + } + + void Serialize(JSHeapBroker* broker); + bool serialized() const { return serialized_; } + + void SerializeCodeAndFeedback(JSHeapBroker* broker); + bool serialized_code_and_feedback() const { + return serialized_code_and_feedback_; + } + + ObjectData* context() const { return context_; } + ObjectData* native_context() const { return native_context_; } + ObjectData* initial_map() const { return initial_map_; } + ObjectData* prototype() const { return prototype_; } + ObjectData* shared() const { return shared_; } + ObjectData* raw_feedback_cell() const { + DCHECK(serialized_code_and_feedback()); + return feedback_cell_; + } + ObjectData* feedback_vector() const { + DCHECK(serialized_code_and_feedback()); + return feedback_vector_; + } + ObjectData* code() const { + DCHECK(serialized_code_and_feedback()); + DCHECK(!broker()->is_concurrent_inlining()); + return code_; + } + int initial_map_instance_size_with_min_slack() const { + CHECK(serialized_); + return initial_map_instance_size_with_min_slack_; + } + + private: + bool has_feedback_vector_; + bool has_initial_map_; + bool has_prototype_; + bool PrototypeRequiresRuntimeLookup_; + + bool serialized_ = false; + bool serialized_code_and_feedback_ = false; + + ObjectData* context_ = nullptr; + ObjectData* native_context_ = nullptr; + ObjectData* initial_map_ = nullptr; + ObjectData* prototype_ = nullptr; + ObjectData* shared_ = nullptr; + ObjectData* feedback_vector_ = nullptr; + ObjectData* feedback_cell_ = nullptr; + ObjectData* code_ = nullptr; + int initial_map_instance_size_with_min_slack_; +}; + +class RegExpBoilerplateDescriptionData : public HeapObjectData { + public: + RegExpBoilerplateDescriptionData(JSHeapBroker* broker, ObjectData** storage, + Handle<RegExpBoilerplateDescription> object) + : HeapObjectData(broker, storage, object) {} + + void Serialize(JSHeapBroker* broker); + ObjectData* data() const { + CHECK(serialized_); + return data_; + } + ObjectData* source() const { + CHECK(serialized_); + return source_; + } + int flags() const { + CHECK(serialized_); + return flags_; + } + + private: + bool serialized_ = false; + ObjectData* data_ = nullptr; + ObjectData* source_ = nullptr; + int flags_; +}; + +class HeapNumberData : public HeapObjectData { + public: + HeapNumberData(JSHeapBroker* broker, ObjectData** storage, + Handle<HeapNumber> object, + ObjectDataKind kind = ObjectDataKind::kSerializedHeapObject) + : HeapObjectData(broker, storage, object, kind), + value_(object->value()) {} + + double value() const { return value_; } + + private: + double const value_; +}; + +class ContextData : public HeapObjectData { + public: + ContextData(JSHeapBroker* broker, ObjectData** storage, + Handle<Context> object); + + ObjectData* previous( + JSHeapBroker* broker, + SerializationPolicy policy = SerializationPolicy::kAssumeSerialized); + + // Returns nullptr if the slot index isn't valid or wasn't serialized, + // unless {policy} is {kSerializeIfNeeded}. + ObjectData* GetSlot( + JSHeapBroker* broker, int index, + SerializationPolicy policy = SerializationPolicy::kAssumeSerialized); + + private: + ZoneMap<int, ObjectData*> slots_; + ObjectData* previous_ = nullptr; +}; + +ContextData::ContextData(JSHeapBroker* broker, ObjectData** storage, + Handle<Context> object) + : HeapObjectData(broker, storage, object), slots_(broker->zone()) {} + +ObjectData* ContextData::previous(JSHeapBroker* broker, + SerializationPolicy policy) { + if (policy == SerializationPolicy::kSerializeIfNeeded && + previous_ == nullptr) { + TraceScope tracer(broker, this, "ContextData::previous"); + Handle<Context> context = Handle<Context>::cast(object()); + previous_ = broker->GetOrCreateData(context->unchecked_previous()); + } + return previous_; +} + +ObjectData* ContextData::GetSlot(JSHeapBroker* broker, int index, + SerializationPolicy policy) { + DCHECK_GE(index, 0); + auto search = slots_.find(index); + if (search != slots_.end()) { + return search->second; + } + + if (policy == SerializationPolicy::kSerializeIfNeeded) { + Handle<Context> context = Handle<Context>::cast(object()); + if (index < context->length()) { + TraceScope tracer(broker, this, "ContextData::GetSlot"); + TRACE(broker, "Serializing context slot " << index); + ObjectData* odata = broker->GetOrCreateData(context->get(index)); + slots_.insert(std::make_pair(index, odata)); + return odata; + } + } + + return nullptr; +} + +class NativeContextData : public ContextData { + public: +#define DECL_ACCESSOR(type, name) \ + ObjectData* name() const { return name##_; } + BROKER_NATIVE_CONTEXT_FIELDS(DECL_ACCESSOR) +#undef DECL_ACCESSOR + + const ZoneVector<ObjectData*>& function_maps() const { + CHECK_NE(state_, State::kUnserialized); + return function_maps_; + } + + ObjectData* scope_info() const { + CHECK_NE(state_, State::kUnserialized); + return scope_info_; + } + + NativeContextData(JSHeapBroker* broker, ObjectData** storage, + Handle<NativeContext> object); + void Serialize(JSHeapBroker* broker); + void SerializeOnBackground(JSHeapBroker* broker); + + private: + // After Serialize is called the class is partially serialized and it the + // kSerializedOnMainThread state. It then becomes kFullySerialized once + // SerializeOnBackground is called. + enum class State { kUnserialized, kSerializedOnMainThread, kFullySerialized }; + State state_; + +#define DECL_MEMBER(type, name) ObjectData* name##_ = nullptr; + BROKER_NATIVE_CONTEXT_FIELDS(DECL_MEMBER) +#undef DECL_MEMBER + ZoneVector<ObjectData*> function_maps_; + ObjectData* scope_info_ = nullptr; +}; + +class NameData : public HeapObjectData { + public: + NameData(JSHeapBroker* broker, ObjectData** storage, Handle<Name> object) + : HeapObjectData(broker, storage, object) { + DCHECK(!broker->is_concurrent_inlining()); + } +}; + +class StringData : public NameData { + public: + StringData(JSHeapBroker* broker, ObjectData** storage, Handle<String> object); + + int length() const { return length_; } + uint16_t first_char() const { return first_char_; } + base::Optional<double> to_number() const { return to_number_; } + bool is_external_string() const { return is_external_string_; } + bool is_seq_string() const { return is_seq_string_; } + + ObjectData* GetCharAsStringOrUndefined( + JSHeapBroker* broker, uint32_t index, + SerializationPolicy policy = SerializationPolicy::kAssumeSerialized); + + private: + int const length_; + uint16_t const first_char_; + base::Optional<double> to_number_; + bool const is_external_string_; + bool const is_seq_string_; + + // Known individual characters as strings, corresponding to the semantics of + // element access (s[i]). The first pair component is always less than + // {length_}. The second component is never nullptr. + ZoneVector<std::pair<uint32_t, ObjectData*>> chars_as_strings_; +}; + +class SymbolData : public NameData { + public: + SymbolData(JSHeapBroker* broker, ObjectData** storage, Handle<Symbol> object) + : NameData(broker, storage, object) { + DCHECK(!broker->is_concurrent_inlining()); + } +}; + +StringData::StringData(JSHeapBroker* broker, ObjectData** storage, + Handle<String> object) + : NameData(broker, storage, object), + length_(object->length()), + first_char_(length_ > 0 ? object->Get(0) : 0), + to_number_(TryStringToDouble(broker->local_isolate(), object)), + is_external_string_(object->IsExternalString()), + is_seq_string_(object->IsSeqString()), + chars_as_strings_(broker->zone()) { + DCHECK(!broker->is_concurrent_inlining()); +} + +class InternalizedStringData : public StringData { + public: + InternalizedStringData(JSHeapBroker* broker, ObjectData** storage, + Handle<InternalizedString> object) + : StringData(broker, storage, object) { + DCHECK(!broker->is_concurrent_inlining()); + } +}; + +ObjectData* StringData::GetCharAsStringOrUndefined(JSHeapBroker* broker, + uint32_t index, + SerializationPolicy policy) { + if (index >= static_cast<uint32_t>(length())) return nullptr; + + for (auto const& p : chars_as_strings_) { + if (p.first == index) return p.second; + } + + if (policy == SerializationPolicy::kAssumeSerialized) { + TRACE_MISSING(broker, "knowledge about index " << index << " on " << this); + return nullptr; + } + + base::Optional<ObjectRef> element = + GetOwnElementFromHeap(broker, object(), index, true); + ObjectData* result = element.has_value() ? element->data() : nullptr; + chars_as_strings_.push_back({index, result}); + return result; +} + +namespace { + +bool IsFastLiteralHelper(Handle<JSObject> boilerplate, int max_depth, + int* max_properties) { + DCHECK_GE(max_depth, 0); + DCHECK_GE(*max_properties, 0); + + // Check for too deep nesting. + if (max_depth == 0) return false; + + Isolate* const isolate = boilerplate->GetIsolate(); + + // If the boilerplate map has been deprecated, bailout of fast literal + // optimization. The map could be deprecated at some point after the line + // below, but it's not a correctness issue -- it only means the literal isn't + // created with the most up to date map(s). + if (boilerplate->map().is_deprecated()) return false; + + // Check the elements. + Handle<FixedArrayBase> elements(boilerplate->elements(), isolate); + if (elements->length() > 0 && + elements->map() != ReadOnlyRoots(isolate).fixed_cow_array_map()) { + if (boilerplate->HasSmiOrObjectElements()) { + Handle<FixedArray> fast_elements = Handle<FixedArray>::cast(elements); + int length = elements->length(); + for (int i = 0; i < length; i++) { + if ((*max_properties)-- == 0) return false; + Handle<Object> value(fast_elements->get(i), isolate); + if (value->IsJSObject()) { + Handle<JSObject> value_object = Handle<JSObject>::cast(value); + if (!IsFastLiteralHelper(value_object, max_depth - 1, + max_properties)) { + return false; + } + } + } + } else if (boilerplate->HasDoubleElements()) { + if (elements->Size() > kMaxRegularHeapObjectSize) return false; + } else { + return false; + } + } + + // TODO(turbofan): Do we want to support out-of-object properties? + if (!(boilerplate->HasFastProperties() && + boilerplate->property_array().length() == 0)) { + return false; + } + + // Check the in-object properties. + Handle<DescriptorArray> descriptors( + boilerplate->map().instance_descriptors(isolate, kRelaxedLoad), isolate); + for (InternalIndex i : boilerplate->map().IterateOwnDescriptors()) { + PropertyDetails details = descriptors->GetDetails(i); + if (details.location() != kField) continue; + DCHECK_EQ(kData, details.kind()); + if ((*max_properties)-- == 0) return false; + FieldIndex field_index = FieldIndex::ForDescriptor(boilerplate->map(), i); + Handle<Object> value(boilerplate->RawFastPropertyAt(field_index), isolate); + if (value->IsJSObject()) { + Handle<JSObject> value_object = Handle<JSObject>::cast(value); + if (!IsFastLiteralHelper(value_object, max_depth - 1, max_properties)) { + return false; + } + } + } + return true; +} + +// Maximum depth and total number of elements and properties for literal +// graphs to be considered for fast deep-copying. The limit is chosen to +// match the maximum number of inobject properties, to ensure that the +// performance of using object literals is not worse than using constructor +// functions, see crbug.com/v8/6211 for details. +const int kMaxFastLiteralDepth = 3; +const int kMaxFastLiteralProperties = JSObject::kMaxInObjectProperties; + +// Determines whether the given array or object literal boilerplate satisfies +// all limits to be considered for fast deep-copying and computes the total +// size of all objects that are part of the graph. +bool IsInlinableFastLiteral(Handle<JSObject> boilerplate) { + int max_properties = kMaxFastLiteralProperties; + return IsFastLiteralHelper(boilerplate, kMaxFastLiteralDepth, + &max_properties); +} + +} // namespace + +class AccessorInfoData : public HeapObjectData { + public: + AccessorInfoData(JSHeapBroker* broker, ObjectData** storage, + Handle<AccessorInfo> object); +}; + +class AllocationSiteData : public HeapObjectData { + public: + AllocationSiteData(JSHeapBroker* broker, ObjectData** storage, + Handle<AllocationSite> object); + void SerializeBoilerplate(JSHeapBroker* broker); + + bool PointsToLiteral() const { return PointsToLiteral_; } + AllocationType GetAllocationType() const { return GetAllocationType_; } + ObjectData* nested_site() const { return nested_site_; } + bool IsFastLiteral() const { return IsFastLiteral_; } + ObjectData* boilerplate() const { return boilerplate_; } + + // These are only valid if PointsToLiteral is false. + ElementsKind GetElementsKind() const { return GetElementsKind_; } + bool CanInlineCall() const { return CanInlineCall_; } + + private: + bool const PointsToLiteral_; + AllocationType const GetAllocationType_; + ObjectData* nested_site_ = nullptr; + bool IsFastLiteral_ = false; + ObjectData* boilerplate_ = nullptr; + ElementsKind GetElementsKind_ = NO_ELEMENTS; + bool CanInlineCall_ = false; + bool serialized_boilerplate_ = false; +}; + +class BigIntData : public HeapObjectData { + public: + BigIntData(JSHeapBroker* broker, ObjectData** storage, Handle<BigInt> object, + ObjectDataKind kind) + : HeapObjectData(broker, storage, object, kind), + as_uint64_(object->AsUint64(nullptr)) {} + + uint64_t AsUint64() const { return as_uint64_; } + + private: + const uint64_t as_uint64_; +}; + +struct PropertyDescriptor { + ObjectData* key = nullptr; + ObjectData* value = nullptr; + PropertyDetails details = PropertyDetails::Empty(); + FieldIndex field_index; + ObjectData* field_owner = nullptr; + ObjectData* field_type = nullptr; +}; + +class MapData : public HeapObjectData { + public: + MapData(JSHeapBroker* broker, ObjectData** storage, Handle<Map> object, + ObjectDataKind kind = ObjectDataKind::kSerializedHeapObject); + + InstanceType instance_type() const { return instance_type_; } + int instance_size() const { return instance_size_; } + byte bit_field() const { return bit_field_; } + byte bit_field2() const { return bit_field2_; } + uint32_t bit_field3() const { return bit_field3_; } + bool can_be_deprecated() const { return can_be_deprecated_; } + bool can_transition() const { return can_transition_; } + int in_object_properties_start_in_words() const { + CHECK(InstanceTypeChecker::IsJSObject(instance_type())); + return in_object_properties_start_in_words_; + } + int in_object_properties() const { + CHECK(InstanceTypeChecker::IsJSObject(instance_type())); + return in_object_properties_; + } + int constructor_function_index() const { return constructor_function_index_; } + int NextFreePropertyIndex() const { return next_free_property_index_; } + int UnusedPropertyFields() const { return unused_property_fields_; } + bool supports_fast_array_iteration() const { + return supports_fast_array_iteration_; + } + bool supports_fast_array_resize() const { + return supports_fast_array_resize_; + } + bool is_abandoned_prototype_map() const { + return is_abandoned_prototype_map_; + } + + // Extra information. + + void SerializeElementsKindGeneralizations(JSHeapBroker* broker); + const ZoneVector<ObjectData*>& elements_kind_generalizations() const { + CHECK(serialized_elements_kind_generalizations_); + return elements_kind_generalizations_; + } + + // Serialize a single (or all) own slot(s) of the descriptor array and recurse + // on field owner(s). + bool TrySerializeOwnDescriptor(JSHeapBroker* broker, + InternalIndex descriptor_index); + void SerializeOwnDescriptor(JSHeapBroker* broker, + InternalIndex descriptor_index) { + CHECK(TrySerializeOwnDescriptor(broker, descriptor_index)); + } + void SerializeOwnDescriptors(JSHeapBroker* broker); + ObjectData* GetStrongValue(InternalIndex descriptor_index) const; + ObjectData* instance_descriptors() const { return instance_descriptors_; } + + void SerializeRootMap(JSHeapBroker* broker); + ObjectData* FindRootMap() const; + + void SerializeConstructor(JSHeapBroker* broker); + ObjectData* GetConstructor() const { + CHECK(serialized_constructor_); + return constructor_; + } + + void SerializeBackPointer(JSHeapBroker* broker); + ObjectData* GetBackPointer() const { + CHECK(serialized_backpointer_); + return backpointer_; + } + + bool TrySerializePrototype(JSHeapBroker* broker); + void SerializePrototype(JSHeapBroker* broker) { + CHECK(TrySerializePrototype(broker)); + } + ObjectData* prototype() const { + DCHECK_EQ(serialized_prototype_, prototype_ != nullptr); + return prototype_; + } + + void SerializeForElementLoad(JSHeapBroker* broker); + + void SerializeForElementStore(JSHeapBroker* broker); + + bool has_extra_serialized_data() const { + return serialized_elements_kind_generalizations_ || + serialized_own_descriptors_ || serialized_constructor_ || + serialized_backpointer_ || serialized_prototype_ || + serialized_root_map_ || serialized_for_element_load_ || + serialized_for_element_store_; + } + + private: + // The following fields should be const in principle, but construction + // requires locking the MapUpdater lock. For this reason, it's easier to + // initialize these inside the constructor body, not in the initializer list. + + // This block of fields will always be serialized. + InstanceType instance_type_; + int instance_size_; + uint32_t bit_field3_; + int unused_property_fields_; + bool is_abandoned_prototype_map_; + int in_object_properties_; + + // These fields will only serialized if we are not concurrent inlining. + byte bit_field_; + byte bit_field2_; + bool can_be_deprecated_; + bool can_transition_; + int in_object_properties_start_in_words_; + int constructor_function_index_; + int next_free_property_index_; + bool supports_fast_array_iteration_; + bool supports_fast_array_resize_; + + // These extra fields still have to be serialized (e.g prototype_) even with + // concurrent inling, since those classes have fields themselves which are not + // being directly read. This means that, for example, even though we can get + // the prototype itself with direct reads, some of its fields require + // serialization. + bool serialized_elements_kind_generalizations_ = false; + ZoneVector<ObjectData*> elements_kind_generalizations_; + + bool serialized_own_descriptors_ = false; + ObjectData* instance_descriptors_ = nullptr; + + bool serialized_constructor_ = false; + ObjectData* constructor_ = nullptr; + + bool serialized_backpointer_ = false; + ObjectData* backpointer_ = nullptr; + + bool serialized_prototype_ = false; + ObjectData* prototype_ = nullptr; + + bool serialized_root_map_ = false; + ObjectData* root_map_ = nullptr; + + bool serialized_for_element_load_ = false; + + bool serialized_for_element_store_ = false; +}; + +AccessorInfoData::AccessorInfoData(JSHeapBroker* broker, ObjectData** storage, + Handle<AccessorInfo> object) + : HeapObjectData(broker, storage, object) { + DCHECK(!broker->is_concurrent_inlining()); +} + +AllocationSiteData::AllocationSiteData(JSHeapBroker* broker, + ObjectData** storage, + Handle<AllocationSite> object) + : HeapObjectData(broker, storage, object), + PointsToLiteral_(object->PointsToLiteral()), + GetAllocationType_(object->GetAllocationType()) { + if (PointsToLiteral_) { + IsFastLiteral_ = IsInlinableFastLiteral( + handle(object->boilerplate(kAcquireLoad), broker->isolate())); + } else { + GetElementsKind_ = object->GetElementsKind(); + CanInlineCall_ = object->CanInlineCall(); + } +} + +void AllocationSiteData::SerializeBoilerplate(JSHeapBroker* broker) { + if (serialized_boilerplate_) return; + serialized_boilerplate_ = true; + + TraceScope tracer(broker, this, "AllocationSiteData::SerializeBoilerplate"); + Handle<AllocationSite> site = Handle<AllocationSite>::cast(object()); + + CHECK(IsFastLiteral_); + DCHECK_NULL(boilerplate_); + boilerplate_ = broker->GetOrCreateData(site->boilerplate(kAcquireLoad)); + if (!boilerplate_->should_access_heap()) { + boilerplate_->AsJSObject()->SerializeAsBoilerplate(broker); + } + + DCHECK_NULL(nested_site_); + nested_site_ = broker->GetOrCreateData(site->nested_site()); + if (nested_site_->IsAllocationSite() && !nested_site_->should_access_heap()) { + nested_site_->AsAllocationSite()->SerializeBoilerplate(broker); + } +} + +HeapObjectData::HeapObjectData(JSHeapBroker* broker, ObjectData** storage, + Handle<HeapObject> object, ObjectDataKind kind) + : ObjectData(broker, storage, object, kind), + // We have to use a raw cast below instead of AsMap() because of + // recursion. AsMap() would call IsMap(), which accesses the + // instance_type_ member. In the case of constructing the MapData for the + // meta map (whose map is itself), this member has not yet been + // initialized. + map_(broker->GetOrCreateData(object->map(kAcquireLoad))) { + CHECK_IMPLIES(kind == kSerializedHeapObject, + broker->mode() == JSHeapBroker::kSerializing); + CHECK_IMPLIES(broker->mode() == JSHeapBroker::kSerialized, + kind == kBackgroundSerializedHeapObject); +} + +base::Optional<bool> HeapObjectData::TryGetBooleanValue( + JSHeapBroker* broker) const { + // Keep in sync with Object::BooleanValue. + auto result = TryGetBooleanValueImpl(broker); + DCHECK_IMPLIES(broker->IsMainThread() && result.has_value(), + result.value() == object()->BooleanValue(broker->isolate())); + return result; +} + +base::Optional<bool> HeapObjectData::TryGetBooleanValueImpl( + JSHeapBroker* broker) const { + DisallowGarbageCollection no_gc; + Object o = *object(); + Isolate* isolate = broker->isolate(); + const InstanceType t = GetMapInstanceType(); + if (o.IsTrue(isolate)) { + return true; + } else if (o.IsFalse(isolate)) { + return false; + } else if (o.IsNullOrUndefined(isolate)) { + return false; + } else if (MapRef{broker, map()}.is_undetectable()) { + return false; // Undetectable object is false. + } else if (InstanceTypeChecker::IsString(t)) { + // TODO(jgruber): Implement in possible cases. + return {}; + } else if (InstanceTypeChecker::IsHeapNumber(t)) { + return {}; + } else if (InstanceTypeChecker::IsBigInt(t)) { + return {}; + } + return true; +} + +InstanceType HeapObjectData::GetMapInstanceType() const { + ObjectData* map_data = map(); + if (map_data->should_access_heap()) { + return Handle<Map>::cast(map_data->object())->instance_type(); + } + return map_data->AsMap()->instance_type(); +} + +namespace { + +bool IsReadOnlyLengthDescriptor(Isolate* isolate, Handle<Map> jsarray_map) { + DCHECK(!jsarray_map->is_dictionary_map()); + DescriptorArray descriptors = + jsarray_map->instance_descriptors(isolate, kRelaxedLoad); + static_assert( + JSArray::kLengthOffset == JSObject::kHeaderSize, + "The length should be the first property on the descriptor array"); + InternalIndex offset(0); + return descriptors.GetDetails(offset).IsReadOnly(); +} + +// Important: this predicate does not check Protectors::IsNoElementsIntact. The +// compiler checks protectors through the compilation dependency mechanism; it +// doesn't make sense to do that here as part of every MapData construction. +// Callers *must* take care to take the correct dependency themselves. +bool SupportsFastArrayIteration(JSHeapBroker* broker, Handle<Map> map) { + return map->instance_type() == JS_ARRAY_TYPE && + IsFastElementsKind(map->elements_kind()) && + map->prototype().IsJSArray() && + broker->IsArrayOrObjectPrototype(broker->CanonicalPersistentHandle( + JSArray::cast(map->prototype()))); +} + +bool SupportsFastArrayResize(JSHeapBroker* broker, Handle<Map> map) { + return SupportsFastArrayIteration(broker, map) && map->is_extensible() && + !map->is_dictionary_map() && + !IsReadOnlyLengthDescriptor(broker->isolate(), map); +} + +} // namespace + +MapData::MapData(JSHeapBroker* broker, ObjectData** storage, Handle<Map> object, + ObjectDataKind kind) + : HeapObjectData(broker, storage, object, kind), + elements_kind_generalizations_(broker->zone()) { + // This lock ensure that MapData can always be background-serialized, i.e. + // while the lock is held the Map object may not be modified (except in + // benign ways). + // TODO(jgruber): Consider removing this lock by being smrt. + JSHeapBroker::MapUpdaterGuardIfNeeded mumd_scope( + broker, broker->isolate()->map_updater_access()); + + // When background serializing the map, we can perform a lite serialization + // since the MapRef will read some of the Map's fields can be read directly. + + // Even though MapRefs can read {instance_type} directly, other classes depend + // on {instance_type} being serialized. + instance_type_ = object->instance_type(); + instance_size_ = object->instance_size(); + + // Both bit_field3 (and below bit_field) are special fields: Even though most + // of the individual bits inside of the bitfield could be read / written + // non-atomically, the bitfield itself has to use atomic relaxed accessors + // since some fields since can be modified in live objects. + // TODO(solanes, v8:7790): Assess if adding the exclusive lock in more places + // (e.g for set_has_non_instance_prototype) makes sense. Pros: these fields + // can use the non-atomic accessors. Cons: We would be acquiring an exclusive + // lock in more places. + bit_field3_ = object->relaxed_bit_field3(); + unused_property_fields_ = object->UnusedPropertyFields(); + is_abandoned_prototype_map_ = object->is_abandoned_prototype_map(); + in_object_properties_ = + object->IsJSObjectMap() ? object->GetInObjectProperties() : 0; + + // These fields are only needed to be serialized when not concurrent inlining + // and thus disabling direct reads. + if (!broker->is_concurrent_inlining()) { + bit_field_ = object->relaxed_bit_field(); + bit_field2_ = object->bit_field2(); + can_be_deprecated_ = object->NumberOfOwnDescriptors() > 0 + ? object->CanBeDeprecated() + : false; + can_transition_ = object->CanTransition(); + in_object_properties_start_in_words_ = + object->IsJSObjectMap() ? object->GetInObjectPropertiesStartInWords() + : 0; + next_free_property_index_ = object->NextFreePropertyIndex(); + constructor_function_index_ = object->IsPrimitiveMap() + ? object->GetConstructorFunctionIndex() + : Map::kNoConstructorFunctionIndex; + supports_fast_array_iteration_ = SupportsFastArrayIteration(broker, object); + supports_fast_array_resize_ = SupportsFastArrayResize(broker, object); + } +} + +JSFunctionData::JSFunctionData(JSHeapBroker* broker, ObjectData** storage, + Handle<JSFunction> object) + : JSObjectData(broker, storage, object), + has_feedback_vector_(object->has_feedback_vector()), + has_initial_map_(object->has_prototype_slot() && + object->has_initial_map()), + has_prototype_(object->has_prototype_slot() && object->has_prototype()), + PrototypeRequiresRuntimeLookup_( + object->PrototypeRequiresRuntimeLookup()) {} + +void JSFunctionData::Serialize(JSHeapBroker* broker) { + if (serialized_) return; + serialized_ = true; + + TraceScope tracer(broker, this, "JSFunctionData::Serialize"); + Handle<JSFunction> function = Handle<JSFunction>::cast(object()); + + DCHECK_NULL(context_); + DCHECK_NULL(native_context_); + DCHECK_NULL(initial_map_); + DCHECK_NULL(prototype_); + DCHECK_NULL(shared_); + + context_ = broker->GetOrCreateData(function->context()); + native_context_ = broker->GetOrCreateData(function->native_context()); + shared_ = broker->GetOrCreateData(function->shared()); + + initial_map_ = has_initial_map() + ? broker->GetOrCreateData(function->initial_map()) + : nullptr; + prototype_ = has_prototype() ? broker->GetOrCreateData(function->prototype()) + : nullptr; + + if (initial_map_ != nullptr) { + initial_map_instance_size_with_min_slack_ = + function->ComputeInstanceSizeWithMinSlack(broker->isolate()); + } + if (initial_map_ != nullptr && !initial_map_->should_access_heap()) { + if (initial_map_->AsMap()->instance_type() == JS_ARRAY_TYPE) { + initial_map_->AsMap()->SerializeElementsKindGeneralizations(broker); + } + initial_map_->AsMap()->SerializeConstructor(broker); + // TODO(neis): This is currently only needed for native_context's + // object_function, as used by GetObjectCreateMap. If no further use sites + // show up, we should move this into NativeContextData::Serialize. + initial_map_->AsMap()->SerializePrototype(broker); + } +} + +void JSFunctionData::SerializeCodeAndFeedback(JSHeapBroker* broker) { + DCHECK(serialized_); + if (serialized_code_and_feedback_) return; + serialized_code_and_feedback_ = true; + + TraceScope tracer(broker, this, "JSFunctionData::SerializeCodeAndFeedback"); + Handle<JSFunction> function = Handle<JSFunction>::cast(object()); + + DCHECK_NULL(feedback_cell_); + DCHECK_NULL(feedback_vector_); + DCHECK_NULL(code_); + if (!broker->is_concurrent_inlining()) { + // This is conditionalized because Code objects are never serialized now. + // We only need to represent the code object in serialized data when + // we're unable to perform direct heap accesses. + code_ = broker->GetOrCreateData(function->code(kAcquireLoad)); + } + feedback_cell_ = broker->GetOrCreateData(function->raw_feedback_cell()); + feedback_vector_ = has_feedback_vector() + ? broker->GetOrCreateData(function->feedback_vector()) + : nullptr; +} + +void MapData::SerializeElementsKindGeneralizations(JSHeapBroker* broker) { + if (serialized_elements_kind_generalizations_) return; + serialized_elements_kind_generalizations_ = true; + + TraceScope tracer(broker, this, + "MapData::SerializeElementsKindGeneralizations"); + DCHECK_EQ(instance_type(), JS_ARRAY_TYPE); + MapRef self(broker, this); + ElementsKind from_kind = self.elements_kind(); + DCHECK(elements_kind_generalizations_.empty()); + for (int i = FIRST_FAST_ELEMENTS_KIND; i <= LAST_FAST_ELEMENTS_KIND; i++) { + ElementsKind to_kind = static_cast<ElementsKind>(i); + if (IsMoreGeneralElementsKindTransition(from_kind, to_kind)) { + Handle<Map> target = + Map::AsElementsKind(broker->isolate(), self.object(), to_kind); + elements_kind_generalizations_.push_back(broker->GetOrCreateData(target)); + } + } +} + +class DescriptorArrayData : public HeapObjectData { + public: + DescriptorArrayData(JSHeapBroker* broker, ObjectData** storage, + Handle<DescriptorArray> object) + : HeapObjectData(broker, storage, object), contents_(broker->zone()) { + DCHECK(!broker->is_concurrent_inlining()); + } + + ObjectData* FindFieldOwner(InternalIndex descriptor_index) const { + return contents_.at(descriptor_index.as_int()).field_owner; + } + + PropertyDetails GetPropertyDetails(InternalIndex descriptor_index) const { + return contents_.at(descriptor_index.as_int()).details; + } + + ObjectData* GetPropertyKey(InternalIndex descriptor_index) const { + return contents_.at(descriptor_index.as_int()).key; + } + + FieldIndex GetFieldIndexFor(InternalIndex descriptor_index) const { + return contents_.at(descriptor_index.as_int()).field_index; + } + + ObjectData* GetFieldType(InternalIndex descriptor_index) const { + return contents_.at(descriptor_index.as_int()).field_type; + } + + ObjectData* GetStrongValue(InternalIndex descriptor_index) const { + return contents_.at(descriptor_index.as_int()).value; + } + + bool serialized_descriptor(InternalIndex descriptor_index) const { + return contents_.find(descriptor_index.as_int()) != contents_.end(); + } + + void SerializeDescriptor(JSHeapBroker* broker, Handle<Map> map, + InternalIndex descriptor_index); + + private: + ZoneMap<int, PropertyDescriptor> contents_; +}; + +void DescriptorArrayData::SerializeDescriptor(JSHeapBroker* broker, + Handle<Map> map, + InternalIndex descriptor_index) { + CHECK_LT(descriptor_index.as_int(), map->NumberOfOwnDescriptors()); + if (contents_.find(descriptor_index.as_int()) != contents_.end()) return; + + Isolate* const isolate = broker->isolate(); + auto descriptors = Handle<DescriptorArray>::cast(object()); + CHECK_EQ(*descriptors, map->instance_descriptors(isolate)); + + PropertyDescriptor d; + d.key = broker->GetOrCreateData(descriptors->GetKey(descriptor_index)); + MaybeObject value = descriptors->GetValue(descriptor_index); + HeapObject obj; + if (value.GetHeapObjectIfStrong(&obj)) { + d.value = broker->GetOrCreateData(obj); + } + d.details = descriptors->GetDetails(descriptor_index); + if (d.details.location() == kField) { + d.field_index = FieldIndex::ForDescriptor(*map, descriptor_index); + d.field_owner = + broker->GetOrCreateData(map->FindFieldOwner(isolate, descriptor_index)); + d.field_type = + broker->GetOrCreateData(descriptors->GetFieldType(descriptor_index)); + } + contents_[descriptor_index.as_int()] = d; + + if (d.details.location() == kField && !d.field_owner->should_access_heap()) { + // Recurse on the owner map. + d.field_owner->AsMap()->SerializeOwnDescriptor(broker, descriptor_index); + } + + TRACE(broker, "Copied descriptor " << descriptor_index.as_int() << " into " + << this << " (" << contents_.size() + << " total)"); +} + +class FeedbackCellData : public HeapObjectData { + public: + FeedbackCellData(JSHeapBroker* broker, ObjectData** storage, + Handle<FeedbackCell> object); + + ObjectData* value() const { return value_; } + + private: + ObjectData* const value_; +}; + +FeedbackCellData::FeedbackCellData(JSHeapBroker* broker, ObjectData** storage, + Handle<FeedbackCell> object) + : HeapObjectData(broker, storage, object), + value_(object->value().IsFeedbackVector() + ? broker->GetOrCreateData(object->value()) + : nullptr) { + DCHECK(!broker->is_concurrent_inlining()); +} + +class FeedbackVectorData : public HeapObjectData { + public: + FeedbackVectorData(JSHeapBroker* broker, ObjectData** storage, + Handle<FeedbackVector> object); + + double invocation_count() const { return invocation_count_; } + + ObjectData* shared_function_info() { + CHECK(serialized_); + return shared_function_info_; + } + + void Serialize(JSHeapBroker* broker); + bool serialized() const { return serialized_; } + ObjectData* GetClosureFeedbackCell(JSHeapBroker* broker, int index) const; + + private: + double const invocation_count_; + + bool serialized_ = false; + ObjectData* shared_function_info_; + ZoneVector<ObjectData*> closure_feedback_cell_array_; +}; + +FeedbackVectorData::FeedbackVectorData(JSHeapBroker* broker, + ObjectData** storage, + Handle<FeedbackVector> object) + : HeapObjectData(broker, storage, object), + invocation_count_(object->invocation_count()), + closure_feedback_cell_array_(broker->zone()) { + DCHECK(!broker->is_concurrent_inlining()); +} + +ObjectData* FeedbackVectorData::GetClosureFeedbackCell(JSHeapBroker* broker, + int index) const { + CHECK_GE(index, 0); + + size_t cell_array_size = closure_feedback_cell_array_.size(); + if (!serialized_) { + DCHECK_EQ(cell_array_size, 0); + TRACE_BROKER_MISSING(broker, + " closure feedback cell array for vector " << this); + return nullptr; + } + CHECK_LT(index, cell_array_size); + return closure_feedback_cell_array_[index]; +} + +void FeedbackVectorData::Serialize(JSHeapBroker* broker) { + if (serialized_) return; + serialized_ = true; + + TraceScope tracer(broker, this, "FeedbackVectorData::Serialize"); + Handle<FeedbackVector> vector = Handle<FeedbackVector>::cast(object()); + Handle<SharedFunctionInfo> sfi(vector->shared_function_info(), + broker->isolate()); + shared_function_info_ = broker->GetOrCreateData(sfi); + DCHECK(closure_feedback_cell_array_.empty()); + int length = vector->closure_feedback_cell_array().length(); + closure_feedback_cell_array_.reserve(length); + for (int i = 0; i < length; ++i) { + Handle<FeedbackCell> cell = vector->GetClosureFeedbackCell(i); + ObjectData* cell_data = broker->GetOrCreateData(cell); + closure_feedback_cell_array_.push_back(cell_data); + } + TRACE(broker, "Copied " << length << " feedback cells"); +} + +class FixedArrayBaseData : public HeapObjectData { + public: + FixedArrayBaseData(JSHeapBroker* broker, ObjectData** storage, + Handle<FixedArrayBase> object, ObjectDataKind kind) + : HeapObjectData(broker, storage, object, kind), + length_(object->length()) {} + + int length() const { return length_; } + + private: + int const length_; +}; + +class FixedArrayData : public FixedArrayBaseData { + public: + FixedArrayData(JSHeapBroker* broker, ObjectData** storage, + Handle<FixedArray> object, ObjectDataKind kind) + : FixedArrayBaseData(broker, storage, object, kind) {} +}; + +class ObjectBoilerplateDescriptionData : public FixedArrayData { + public: + ObjectBoilerplateDescriptionData( + JSHeapBroker* broker, ObjectData** storage, + Handle<ObjectBoilerplateDescription> object, + ObjectDataKind kind = ObjectDataKind::kSerializedHeapObject) + : FixedArrayData(broker, storage, object, kind), size_(object->size()) { + DCHECK(!broker->is_concurrent_inlining()); + } + + int size() const { return size_; } + + private: + int const size_; +}; + +// Only used in JSNativeContextSpecialization. +class ScriptContextTableData : public FixedArrayData { + public: + ScriptContextTableData(JSHeapBroker* broker, ObjectData** storage, + Handle<ScriptContextTable> object, ObjectDataKind kind) + : FixedArrayData(broker, storage, object, kind) {} +}; + +JSDataViewData::JSDataViewData(JSHeapBroker* broker, ObjectData** storage, + Handle<JSDataView> object) + : JSObjectData(broker, storage, object), + byte_length_(object->byte_length()) {} + +JSBoundFunctionData::JSBoundFunctionData(JSHeapBroker* broker, + ObjectData** storage, + Handle<JSBoundFunction> object) + : JSObjectData(broker, storage, object) {} + +bool JSBoundFunctionData::Serialize(JSHeapBroker* broker) { + if (serialized_) return true; + if (broker->StackHasOverflowed()) return false; + + TraceScope tracer(broker, this, "JSBoundFunctionData::Serialize"); + Handle<JSBoundFunction> function = Handle<JSBoundFunction>::cast(object()); + + // We don't immediately set {serialized_} in order to correctly handle the + // case where a recursive call to this method reaches the stack limit. + + DCHECK_NULL(bound_target_function_); + bound_target_function_ = + broker->GetOrCreateData(function->bound_target_function()); + bool serialized_nested = true; + if (!bound_target_function_->should_access_heap()) { + if (bound_target_function_->IsJSBoundFunction()) { + serialized_nested = + bound_target_function_->AsJSBoundFunction()->Serialize(broker); + } else if (bound_target_function_->IsJSFunction()) { + bound_target_function_->AsJSFunction()->Serialize(broker); + } + } + if (!serialized_nested) { + // We couldn't serialize all nested bound functions due to stack + // overflow. Give up. + DCHECK(!serialized_); + bound_target_function_ = nullptr; // Reset to sync with serialized_. + return false; + } + + serialized_ = true; + + DCHECK_NULL(bound_arguments_); + bound_arguments_ = broker->GetOrCreateData(function->bound_arguments()); + + DCHECK_NULL(bound_this_); + bound_this_ = broker->GetOrCreateData(function->bound_this()); + + return true; +} + +JSObjectData::JSObjectData(JSHeapBroker* broker, ObjectData** storage, + Handle<JSObject> object) + : JSReceiverData(broker, storage, object, + ObjectDataKind::kSerializedHeapObject), + inobject_fields_(broker->zone()), + own_constant_elements_(broker->zone()), + own_properties_(broker->zone()) {} + +class FixedDoubleArrayData : public FixedArrayBaseData { + public: + FixedDoubleArrayData( + JSHeapBroker* broker, ObjectData** storage, + Handle<FixedDoubleArray> object, + ObjectDataKind kind = ObjectDataKind::kNeverSerializedHeapObject) + : FixedArrayBaseData(broker, storage, object, kind) { + DCHECK(!broker->is_concurrent_inlining()); + } +}; + +class BytecodeArrayData : public FixedArrayBaseData { + public: + int register_count() const { return register_count_; } + int parameter_count() const { return parameter_count_; } + interpreter::Register incoming_new_target_or_generator_register() const { + return incoming_new_target_or_generator_register_; + } + + BytecodeArrayData(JSHeapBroker* broker, ObjectData** storage, + Handle<BytecodeArray> object) + : FixedArrayBaseData(broker, storage, object, + ObjectDataKind::kNeverSerializedHeapObject), + register_count_(object->register_count()), + parameter_count_(object->parameter_count()), + incoming_new_target_or_generator_register_( + object->incoming_new_target_or_generator_register()) {} + + private: + int const register_count_; + int const parameter_count_; + interpreter::Register const incoming_new_target_or_generator_register_; +}; + +class JSArrayData : public JSObjectData { + public: + JSArrayData(JSHeapBroker* broker, ObjectData** storage, + Handle<JSArray> object); + + void Serialize(JSHeapBroker* broker); + ObjectData* length() const { + CHECK(serialized_); + return length_; + } + + ObjectData* GetOwnElement( + JSHeapBroker* broker, uint32_t index, + SerializationPolicy policy = SerializationPolicy::kAssumeSerialized); + + private: + bool serialized_ = false; + ObjectData* length_ = nullptr; + + // Elements (indexed properties) that either + // (1) are known to exist directly on the object, or + // (2) are known not to (possibly they don't exist at all). + // In case (2), the second pair component is nullptr. + ZoneVector<std::pair<uint32_t, ObjectData*>> own_elements_; +}; + +JSArrayData::JSArrayData(JSHeapBroker* broker, ObjectData** storage, + Handle<JSArray> object) + : JSObjectData(broker, storage, object), own_elements_(broker->zone()) {} + +void JSArrayData::Serialize(JSHeapBroker* broker) { + CHECK(!broker->is_concurrent_inlining()); + + if (serialized_) return; + serialized_ = true; + + TraceScope tracer(broker, this, "JSArrayData::Serialize"); + Handle<JSArray> jsarray = Handle<JSArray>::cast(object()); + + DCHECK_NULL(length_); + length_ = broker->GetOrCreateData(jsarray->length()); +} + +ObjectData* JSArrayData::GetOwnElement(JSHeapBroker* broker, uint32_t index, + SerializationPolicy policy) { + for (auto const& p : own_elements_) { + if (p.first == index) return p.second; + } + + if (policy == SerializationPolicy::kAssumeSerialized) { + TRACE_MISSING(broker, "knowledge about index " << index << " on " << this); + return nullptr; + } + + base::Optional<ObjectRef> element = + GetOwnElementFromHeap(broker, object(), index, false); + ObjectData* result = element.has_value() ? element->data() : nullptr; + own_elements_.push_back({index, result}); + return result; +} + +class ScopeInfoData : public HeapObjectData { + public: + ScopeInfoData(JSHeapBroker* broker, ObjectData** storage, + Handle<ScopeInfo> object); + + int ContextLength() const { return context_length_; } + bool HasContextExtensionSlot() const { return has_context_extension_slot_; } + bool HasOuterScopeInfo() const { return has_outer_scope_info_; } + + ObjectData* OuterScopeInfo() const { return outer_scope_info_; } + void SerializeScopeInfoChain(JSHeapBroker* broker); + + private: + int const context_length_; + bool const has_context_extension_slot_; + bool const has_outer_scope_info_; + + // Only serialized via SerializeScopeInfoChain. + ObjectData* outer_scope_info_; +}; + +ScopeInfoData::ScopeInfoData(JSHeapBroker* broker, ObjectData** storage, + Handle<ScopeInfo> object) + : HeapObjectData(broker, storage, object), + context_length_(object->ContextLength()), + has_context_extension_slot_(object->HasContextExtensionSlot()), + has_outer_scope_info_(object->HasOuterScopeInfo()), + outer_scope_info_(nullptr) { + DCHECK(!broker->is_concurrent_inlining()); +} + +void ScopeInfoData::SerializeScopeInfoChain(JSHeapBroker* broker) { + if (outer_scope_info_) return; + if (!has_outer_scope_info_) return; + outer_scope_info_ = broker->GetOrCreateData( + Handle<ScopeInfo>::cast(object())->OuterScopeInfo()); + if (!outer_scope_info_->should_access_heap()) { + outer_scope_info_->AsScopeInfo()->SerializeScopeInfoChain(broker); + } +} + +class SharedFunctionInfoData : public HeapObjectData { + public: + SharedFunctionInfoData(JSHeapBroker* broker, ObjectData** storage, + Handle<SharedFunctionInfo> object); + + int builtin_id() const { return builtin_id_; } + int context_header_size() const { return context_header_size_; } + ObjectData* GetBytecodeArray() const { return GetBytecodeArray_; } + SharedFunctionInfo::Inlineability GetInlineability() const { + return inlineability_; + } + void SerializeFunctionTemplateInfo(JSHeapBroker* broker); + ObjectData* scope_info() const { return scope_info_; } + void SerializeScopeInfoChain(JSHeapBroker* broker); + ObjectData* function_template_info() const { return function_template_info_; } + ObjectData* GetTemplateObject(FeedbackSlot slot) const { + auto lookup_it = template_objects_.find(slot.ToInt()); + if (lookup_it != template_objects_.cend()) { + return lookup_it->second; + } + return nullptr; + } + void SetTemplateObject(FeedbackSlot slot, ObjectData* object) { + CHECK( + template_objects_.insert(std::make_pair(slot.ToInt(), object)).second); + } + +#define DECL_ACCESSOR(type, name) \ + type name() const { return name##_; } + BROKER_SFI_FIELDS(DECL_ACCESSOR) +#undef DECL_ACCESSOR + + private: + int const builtin_id_; + int const context_header_size_; + ObjectData* const GetBytecodeArray_; +#define DECL_MEMBER(type, name) type const name##_; + BROKER_SFI_FIELDS(DECL_MEMBER) +#undef DECL_MEMBER + SharedFunctionInfo::Inlineability const inlineability_; + ObjectData* function_template_info_; + ZoneMap<int, ObjectData*> template_objects_; + ObjectData* scope_info_; +}; + +SharedFunctionInfoData::SharedFunctionInfoData( + JSHeapBroker* broker, ObjectData** storage, + Handle<SharedFunctionInfo> object) + : HeapObjectData(broker, storage, object), + builtin_id_(object->HasBuiltinId() ? object->builtin_id() + : Builtins::kNoBuiltinId), + context_header_size_(object->scope_info().ContextHeaderLength()), + GetBytecodeArray_(object->HasBytecodeArray() + ? broker->GetOrCreateData( + object->GetBytecodeArray(broker->isolate())) + : nullptr) +#define INIT_MEMBER(type, name) , name##_(object->name()) + BROKER_SFI_FIELDS(INIT_MEMBER) +#undef INIT_MEMBER + , + inlineability_(object->GetInlineability(broker->isolate())), + function_template_info_(nullptr), + template_objects_(broker->zone()), + scope_info_(nullptr) { + DCHECK_EQ(HasBuiltinId_, builtin_id_ != Builtins::kNoBuiltinId); + DCHECK_EQ(HasBytecodeArray_, GetBytecodeArray_ != nullptr); +} + +void SharedFunctionInfoData::SerializeFunctionTemplateInfo( + JSHeapBroker* broker) { + if (function_template_info_) return; + function_template_info_ = broker->GetOrCreateData( + Handle<SharedFunctionInfo>::cast(object())->function_data(kAcquireLoad)); +} + +void SharedFunctionInfoData::SerializeScopeInfoChain(JSHeapBroker* broker) { + if (scope_info_) return; + scope_info_ = broker->GetOrCreateData( + Handle<SharedFunctionInfo>::cast(object())->scope_info()); + if (!scope_info_->should_access_heap()) { + scope_info_->AsScopeInfo()->SerializeScopeInfoChain(broker); + } +} + +class SourceTextModuleData : public HeapObjectData { + public: + SourceTextModuleData(JSHeapBroker* broker, ObjectData** storage, + Handle<SourceTextModule> object); + void Serialize(JSHeapBroker* broker); + + ObjectData* GetCell(JSHeapBroker* broker, int cell_index) const; + ObjectData* GetImportMeta(JSHeapBroker* broker) const; + + private: + bool serialized_ = false; + ZoneVector<ObjectData*> imports_; + ZoneVector<ObjectData*> exports_; + ObjectData* import_meta_; +}; + +SourceTextModuleData::SourceTextModuleData(JSHeapBroker* broker, + ObjectData** storage, + Handle<SourceTextModule> object) + : HeapObjectData(broker, storage, object), + imports_(broker->zone()), + exports_(broker->zone()), + import_meta_(nullptr) {} + +ObjectData* SourceTextModuleData::GetCell(JSHeapBroker* broker, + int cell_index) const { + if (!serialized_) { + DCHECK(imports_.empty()); + TRACE_BROKER_MISSING(broker, + "module cell " << cell_index << " on " << this); + return nullptr; + } + ObjectData* cell; + switch (SourceTextModuleDescriptor::GetCellIndexKind(cell_index)) { + case SourceTextModuleDescriptor::kImport: + cell = imports_.at(SourceTextModule::ImportIndex(cell_index)); + break; + case SourceTextModuleDescriptor::kExport: + cell = exports_.at(SourceTextModule::ExportIndex(cell_index)); + break; + case SourceTextModuleDescriptor::kInvalid: + UNREACHABLE(); + } + CHECK_NOT_NULL(cell); + return cell; +} + +ObjectData* SourceTextModuleData::GetImportMeta(JSHeapBroker* broker) const { + CHECK(serialized_); + return import_meta_; +} + +void SourceTextModuleData::Serialize(JSHeapBroker* broker) { + if (serialized_) return; + serialized_ = true; + + TraceScope tracer(broker, this, "SourceTextModuleData::Serialize"); + Handle<SourceTextModule> module = Handle<SourceTextModule>::cast(object()); + + // TODO(neis): We could be smarter and only serialize the cells we care about. + // TODO(neis): Define a helper for serializing a FixedArray into a ZoneVector. + + DCHECK(imports_.empty()); + Handle<FixedArray> imports(module->regular_imports(), broker->isolate()); + int const imports_length = imports->length(); + imports_.reserve(imports_length); + for (int i = 0; i < imports_length; ++i) { + imports_.push_back(broker->GetOrCreateData(imports->get(i))); + } + TRACE(broker, "Copied " << imports_.size() << " imports"); + + DCHECK(exports_.empty()); + Handle<FixedArray> exports(module->regular_exports(), broker->isolate()); + int const exports_length = exports->length(); + exports_.reserve(exports_length); + for (int i = 0; i < exports_length; ++i) { + exports_.push_back(broker->GetOrCreateData(exports->get(i))); + } + TRACE(broker, "Copied " << exports_.size() << " exports"); + + DCHECK_NULL(import_meta_); + import_meta_ = broker->GetOrCreateData(module->import_meta(kAcquireLoad)); + TRACE(broker, "Copied import_meta"); +} + +class CellData : public HeapObjectData { + public: + CellData(JSHeapBroker* broker, ObjectData** storage, Handle<Cell> object) + : HeapObjectData(broker, storage, object) { + DCHECK(!broker->is_concurrent_inlining()); + } +}; + +class JSGlobalObjectData : public JSObjectData { + public: + JSGlobalObjectData(JSHeapBroker* broker, ObjectData** storage, + Handle<JSGlobalObject> object); + bool IsDetached() const { return is_detached_; } + + ObjectData* GetPropertyCell( + JSHeapBroker* broker, ObjectData* name, + SerializationPolicy policy = SerializationPolicy::kAssumeSerialized); + + private: + bool const is_detached_; + + // Properties that either + // (1) are known to exist as property cells on the global object, or + // (2) are known not to (possibly they don't exist at all). + // In case (2), the second pair component is nullptr. + ZoneVector<std::pair<ObjectData*, ObjectData*>> properties_; +}; + +JSGlobalObjectData::JSGlobalObjectData(JSHeapBroker* broker, + ObjectData** storage, + Handle<JSGlobalObject> object) + : JSObjectData(broker, storage, object), + is_detached_(object->IsDetached()), + properties_(broker->zone()) {} + +class JSGlobalProxyData : public JSObjectData { + public: + JSGlobalProxyData(JSHeapBroker* broker, ObjectData** storage, + Handle<JSGlobalProxy> object); +}; + +JSGlobalProxyData::JSGlobalProxyData(JSHeapBroker* broker, ObjectData** storage, + Handle<JSGlobalProxy> object) + : JSObjectData(broker, storage, object) {} + +namespace { + +base::Optional<PropertyCellRef> GetPropertyCellFromHeap(JSHeapBroker* broker, + Handle<Name> name) { + LookupIterator it( + broker->isolate(), + handle(broker->target_native_context().object()->global_object(), + broker->isolate()), + name, LookupIterator::OWN); + it.TryLookupCachedProperty(); + if (it.state() == LookupIterator::DATA && + it.GetHolder<JSObject>()->IsJSGlobalObject()) { + return TryMakeRef(broker, it.GetPropertyCell()); + } + return base::nullopt; +} + +} // namespace + +ObjectData* JSGlobalObjectData::GetPropertyCell(JSHeapBroker* broker, + ObjectData* name, + SerializationPolicy policy) { + CHECK_NOT_NULL(name); + for (auto const& p : properties_) { + if (p.first == name) return p.second; + } + + if (policy == SerializationPolicy::kAssumeSerialized) { + TRACE_MISSING(broker, "knowledge about global property " << name); + return nullptr; + } + + ObjectData* result = nullptr; + base::Optional<PropertyCellRef> cell = + GetPropertyCellFromHeap(broker, Handle<Name>::cast(name->object())); + if (cell.has_value()) { + result = cell->data(); + if (!result->should_access_heap()) { + result->AsPropertyCell()->Serialize(broker); + } + } + properties_.push_back({name, result}); + return result; +} + +class TemplateObjectDescriptionData : public HeapObjectData { + public: + TemplateObjectDescriptionData(JSHeapBroker* broker, ObjectData** storage, + Handle<TemplateObjectDescription> object) + : HeapObjectData(broker, storage, object) { + DCHECK(!broker->is_concurrent_inlining()); + } +}; + +class CodeData : public HeapObjectData { + public: + CodeData(JSHeapBroker* broker, ObjectData** storage, Handle<Code> object) + : HeapObjectData(broker, storage, object), + inlined_bytecode_size_(object->inlined_bytecode_size() > 0 && + !object->marked_for_deoptimization() + ? object->inlined_bytecode_size() + : 0) { + DCHECK(!broker->is_concurrent_inlining()); + } + + unsigned inlined_bytecode_size() const { return inlined_bytecode_size_; } + + private: + unsigned const inlined_bytecode_size_; +}; + +#define DEFINE_IS(Name, ...) \ + bool ObjectData::Is##Name() const { \ + if (should_access_heap()) { \ + return object()->Is##Name(); \ + } \ + if (is_smi()) return false; \ + InstanceType instance_type = \ + static_cast<const HeapObjectData*>(this)->GetMapInstanceType(); \ + return InstanceTypeChecker::Is##Name(instance_type); \ + } +HEAP_BROKER_OBJECT_LIST(DEFINE_IS) +#undef DEFINE_IS + +#define DEFINE_AS(Name, Kind) \ + Name##Data* ObjectData::As##Name() { \ + CHECK(Is##Name()); \ + CHECK(kind_ == kSerializedHeapObject || \ + kind_ == kBackgroundSerializedHeapObject); \ + return static_cast<Name##Data*>(this); \ + } +HEAP_BROKER_OBJECT_LIST(DEFINE_AS) +#undef DEFINE_AS + +ObjectData* JSObjectData::GetInobjectField(int property_index) const { + CHECK_LT(static_cast<size_t>(property_index), inobject_fields_.size()); + return inobject_fields_[property_index]; +} + +bool JSObjectData::cow_or_empty_elements_tenured() const { + return cow_or_empty_elements_tenured_; +} + +ObjectData* JSObjectData::elements() const { + CHECK(serialized_elements_); + return elements_; +} + +void JSObjectData::SerializeAsBoilerplate(JSHeapBroker* broker) { + SerializeRecursiveAsBoilerplate(broker, kMaxFastLiteralDepth); +} + +void JSObjectData::SerializeElements(JSHeapBroker* broker) { + if (serialized_elements_) return; + serialized_elements_ = true; + + TraceScope tracer(broker, this, "JSObjectData::SerializeElements"); + Handle<JSObject> boilerplate = Handle<JSObject>::cast(object()); + Handle<FixedArrayBase> elements_object(boilerplate->elements(), + broker->isolate()); + DCHECK_NULL(elements_); + elements_ = broker->GetOrCreateData(elements_object); + DCHECK(elements_->IsFixedArrayBase()); +} + +void MapData::SerializeConstructor(JSHeapBroker* broker) { + if (serialized_constructor_) return; + serialized_constructor_ = true; + + TraceScope tracer(broker, this, "MapData::SerializeConstructor"); + Handle<Map> map = Handle<Map>::cast(object()); + DCHECK(!map->IsContextMap()); + DCHECK_NULL(constructor_); + constructor_ = broker->GetOrCreateData(map->GetConstructor()); +} + +void MapData::SerializeBackPointer(JSHeapBroker* broker) { + if (serialized_backpointer_) return; + serialized_backpointer_ = true; + + TraceScope tracer(broker, this, "MapData::SerializeBackPointer"); + Handle<Map> map = Handle<Map>::cast(object()); + DCHECK_NULL(backpointer_); + DCHECK(!map->IsContextMap()); + backpointer_ = broker->GetOrCreateData(map->GetBackPointer()); +} + +bool MapData::TrySerializePrototype(JSHeapBroker* broker) { + if (serialized_prototype_) return true; + + TraceScope tracer(broker, this, "MapData::SerializePrototype"); + Handle<Map> map = Handle<Map>::cast(object()); + DCHECK_NULL(prototype_); + prototype_ = broker->TryGetOrCreateData(map->prototype()); + if (prototype_ == nullptr) return false; + serialized_prototype_ = true; + return true; +} + +void MapData::SerializeOwnDescriptors(JSHeapBroker* broker) { + if (serialized_own_descriptors_) return; + serialized_own_descriptors_ = true; + + TraceScope tracer(broker, this, "MapData::SerializeOwnDescriptors"); + Handle<Map> map = Handle<Map>::cast(object()); + + for (InternalIndex i : map->IterateOwnDescriptors()) { + SerializeOwnDescriptor(broker, i); + } +} + +bool MapData::TrySerializeOwnDescriptor(JSHeapBroker* broker, + InternalIndex descriptor_index) { + TraceScope tracer(broker, this, "MapData::SerializeOwnDescriptor"); + Handle<Map> map = Handle<Map>::cast(object()); + Isolate* isolate = broker->isolate(); + + if (instance_descriptors_ == nullptr) { + instance_descriptors_ = + broker->TryGetOrCreateData(map->instance_descriptors(kAcquireLoad)); + if (instance_descriptors_ == nullptr) return false; + } + + if (instance_descriptors()->should_access_heap()) { + // When accessing the fields concurrently, we still have to recurse on the + // owner map if it is different than the current map. This is because + // {instance_descriptors_} gets set on SerializeOwnDescriptor and otherwise + // we risk the field owner having a null {instance_descriptors_}. + Handle<DescriptorArray> descriptors = broker->CanonicalPersistentHandle( + map->instance_descriptors(kAcquireLoad)); + if (descriptors->GetDetails(descriptor_index).location() == kField) { + Handle<Map> owner = broker->CanonicalPersistentHandle( + map->FindFieldOwner(isolate, descriptor_index)); + if (!owner.equals(map)) { + ObjectData* data = broker->TryGetOrCreateData(owner); + if (data == nullptr) return false; + data->AsMap()->SerializeOwnDescriptor(broker, descriptor_index); + } + } + } else { + DescriptorArrayData* descriptors = + instance_descriptors()->AsDescriptorArray(); + descriptors->SerializeDescriptor(broker, map, descriptor_index); + } + + return true; +} + +void MapData::SerializeRootMap(JSHeapBroker* broker) { + if (serialized_root_map_) return; + serialized_root_map_ = true; + + TraceScope tracer(broker, this, "MapData::SerializeRootMap"); + Handle<Map> map = Handle<Map>::cast(object()); + DCHECK_NULL(root_map_); + root_map_ = broker->GetOrCreateData(map->FindRootMap(broker->isolate())); +} + +ObjectData* MapData::FindRootMap() const { return root_map_; } + +void JSObjectData::SerializeRecursiveAsBoilerplate(JSHeapBroker* broker, + int depth) { + if (serialized_as_boilerplate_) return; + serialized_as_boilerplate_ = true; + + TraceScope tracer(broker, this, + "JSObjectData::SerializeRecursiveAsBoilerplate"); + Handle<JSObject> boilerplate = Handle<JSObject>::cast(object()); + + // We only serialize boilerplates that pass the IsInlinableFastLiteral + // check, so we only do a check on the depth here. + CHECK_GT(depth, 0); + + // Serialize the elements. + Isolate* const isolate = broker->isolate(); + Handle<FixedArrayBase> elements_object(boilerplate->elements(), isolate); + + // Boilerplates need special serialization - we need to make sure COW arrays + // are tenured. Boilerplate objects should only be reachable from their + // allocation site, so it is safe to assume that the elements have not been + // serialized yet. + + bool const empty_or_cow = + elements_object->length() == 0 || + elements_object->map() == ReadOnlyRoots(isolate).fixed_cow_array_map(); + if (empty_or_cow) { + // We need to make sure copy-on-write elements are tenured. + if (ObjectInYoungGeneration(*elements_object)) { + elements_object = isolate->factory()->CopyAndTenureFixedCOWArray( + Handle<FixedArray>::cast(elements_object)); + boilerplate->set_elements(*elements_object); + } + cow_or_empty_elements_tenured_ = true; + } + + DCHECK_NULL(elements_); + DCHECK(!serialized_elements_); + serialized_elements_ = true; + elements_ = broker->GetOrCreateData(elements_object); + DCHECK(elements_->IsFixedArrayBase()); + + if (empty_or_cow || elements_->should_access_heap()) { + // No need to do anything here. Empty or copy-on-write elements + // do not need to be serialized because we only need to store the elements + // reference to the allocated object. + } else if (boilerplate->HasSmiOrObjectElements()) { + Handle<FixedArray> fast_elements = + Handle<FixedArray>::cast(elements_object); + int length = elements_object->length(); + for (int i = 0; i < length; i++) { + Handle<Object> value(fast_elements->get(i), isolate); + if (value->IsJSObject()) { + ObjectData* value_data = broker->GetOrCreateData(value); + if (!value_data->should_access_heap()) { + value_data->AsJSObject()->SerializeRecursiveAsBoilerplate(broker, + depth - 1); + } + } + } + } else { + CHECK(boilerplate->HasDoubleElements()); + CHECK_LE(elements_object->Size(), kMaxRegularHeapObjectSize); + } + + // TODO(turbofan): Do we want to support out-of-object properties? + CHECK(boilerplate->HasFastProperties() && + boilerplate->property_array().length() == 0); + CHECK_EQ(inobject_fields_.size(), 0u); + + // Check the in-object properties. + Handle<DescriptorArray> descriptors( + boilerplate->map().instance_descriptors(isolate), isolate); + for (InternalIndex i : boilerplate->map().IterateOwnDescriptors()) { + PropertyDetails details = descriptors->GetDetails(i); + if (details.location() != kField) continue; + DCHECK_EQ(kData, details.kind()); + + FieldIndex field_index = FieldIndex::ForDescriptor(boilerplate->map(), i); + // Make sure {field_index} agrees with {inobject_properties} on the index of + // this field. + DCHECK_EQ(field_index.property_index(), + static_cast<int>(inobject_fields_.size())); + Handle<Object> value(boilerplate->RawFastPropertyAt(field_index), isolate); + // In case of double fields we use a sentinel NaN value to mark + // uninitialized fields. A boilerplate value with such a field may migrate + // from its double to a tagged representation. The sentinel value carries + // no special meaning when it occurs in a heap number, so we would like to + // recover the uninitialized value. We check for the sentinel here, + // specifically, since migrations might have been triggered as part of + // boilerplate serialization. + if (!details.representation().IsDouble() && value->IsHeapNumber() && + HeapNumber::cast(*value).value_as_bits() == kHoleNanInt64) { + value = isolate->factory()->uninitialized_value(); + } + ObjectData* value_data = broker->GetOrCreateData(value); + if (value_data->IsJSObject() && !value_data->should_access_heap()) { + value_data->AsJSObject()->SerializeRecursiveAsBoilerplate(broker, + depth - 1); + } + inobject_fields_.push_back(value_data); + } + TRACE(broker, "Copied " << inobject_fields_.size() << " in-object fields"); + + if (!map()->should_access_heap()) { + map()->AsMap()->SerializeOwnDescriptors(broker); + } + + if (IsJSArray() && !broker->is_concurrent_inlining()) { + AsJSArray()->Serialize(broker); + } +} + +void RegExpBoilerplateDescriptionData::Serialize(JSHeapBroker* broker) { + if (serialized_) return; // Only serialize once. + serialized_ = true; + + TraceScope tracer(broker, this, + "RegExpBoilerplateDescriptionData::Serialize"); + auto boilerplate = Handle<RegExpBoilerplateDescription>::cast(object()); + + data_ = broker->GetOrCreateData(boilerplate->data()); + source_ = broker->GetOrCreateData(boilerplate->source()); + flags_ = boilerplate->flags(); +} + +#ifdef DEBUG +bool ObjectRef::IsNeverSerializedHeapObject() const { + return data_->kind() == ObjectDataKind::kNeverSerializedHeapObject; +} +#endif // DEBUG + +bool ObjectRef::equals(const ObjectRef& other) const { +#ifdef DEBUG + if (broker()->mode() == JSHeapBroker::kSerialized && + data_->used_status == ObjectData::Usage::kUnused) { + data_->used_status = ObjectData::Usage::kOnlyIdentityUsed; + } +#endif // DEBUG + // TODO(jgruber): Consider going back to reference-equality on data_ once + // ObjectData objects are guaranteed to be canonicalized (see also: + // ClearReconstructibleData). + return data_->object().is_identical_to(other.data_->object()); +} + +Isolate* ObjectRef::isolate() const { return broker()->isolate(); } + +ContextRef ContextRef::previous(size_t* depth, + SerializationPolicy policy) const { + DCHECK_NOT_NULL(depth); + + if (data_->should_access_heap()) { + Context current = *object(); + while (*depth != 0 && current.unchecked_previous().IsContext()) { + current = Context::cast(current.unchecked_previous()); + (*depth)--; + } + return MakeRef(broker(), current); + } + + if (*depth == 0) return *this; + + ObjectData* previous_data = data()->AsContext()->previous(broker(), policy); + if (previous_data == nullptr || !previous_data->IsContext()) return *this; + + *depth = *depth - 1; + return ContextRef(broker(), previous_data).previous(depth, policy); +} + +base::Optional<ObjectRef> ContextRef::get(int index, + SerializationPolicy policy) const { + CHECK_LE(0, index); + if (data_->should_access_heap()) { + if (index >= object()->length()) return {}; + return TryMakeRef(broker(), object()->get(index)); + } + ObjectData* optional_slot = + data()->AsContext()->GetSlot(broker(), index, policy); + if (optional_slot == nullptr) return {}; + return ObjectRef(broker(), optional_slot); +} + +SourceTextModuleRef ContextRef::GetModule(SerializationPolicy policy) const { + ContextRef current = *this; + while (current.map().instance_type() != MODULE_CONTEXT_TYPE) { + size_t depth = 1; + current = current.previous(&depth, policy); + CHECK_EQ(depth, 0); + } + return current.get(Context::EXTENSION_INDEX, policy) + .value() + .AsSourceTextModule(); +} + +#ifdef DEBUG +void JSHeapBroker::PrintRefsAnalysis() const { + // Usage counts + size_t used_total = 0, unused_total = 0, identity_used_total = 0; + for (RefsMap::Entry* ref = refs_->Start(); ref != nullptr; + ref = refs_->Next(ref)) { + switch (ref->value->used_status) { + case ObjectData::Usage::kUnused: + ++unused_total; + break; + case ObjectData::Usage::kOnlyIdentityUsed: + ++identity_used_total; + break; + case ObjectData::Usage::kDataUsed: + ++used_total; + break; + } + } + + // Ref types analysis + TRACE_BROKER_MEMORY( + this, "Refs: " << refs_->occupancy() << "; data used: " << used_total + << "; only identity used: " << identity_used_total + << "; unused: " << unused_total); + size_t used_smis = 0, unused_smis = 0, identity_used_smis = 0; + size_t used[LAST_TYPE + 1] = {0}; + size_t unused[LAST_TYPE + 1] = {0}; + size_t identity_used[LAST_TYPE + 1] = {0}; + for (RefsMap::Entry* ref = refs_->Start(); ref != nullptr; + ref = refs_->Next(ref)) { + if (ref->value->is_smi()) { + switch (ref->value->used_status) { + case ObjectData::Usage::kUnused: + ++unused_smis; + break; + case ObjectData::Usage::kOnlyIdentityUsed: + ++identity_used_smis; + break; + case ObjectData::Usage::kDataUsed: + ++used_smis; + break; + } + } else { + InstanceType instance_type; + if (ref->value->should_access_heap()) { + instance_type = Handle<HeapObject>::cast(ref->value->object()) + ->map() + .instance_type(); + } else { + instance_type = ref->value->AsHeapObject()->GetMapInstanceType(); + } + CHECK_LE(FIRST_TYPE, instance_type); + CHECK_LE(instance_type, LAST_TYPE); + switch (ref->value->used_status) { + case ObjectData::Usage::kUnused: + ++unused[instance_type]; + break; + case ObjectData::Usage::kOnlyIdentityUsed: + ++identity_used[instance_type]; + break; + case ObjectData::Usage::kDataUsed: + ++used[instance_type]; + break; + } + } + } + + TRACE_BROKER_MEMORY( + this, "Smis: " << used_smis + identity_used_smis + unused_smis + << "; data used: " << used_smis << "; only identity used: " + << identity_used_smis << "; unused: " << unused_smis); + for (uint16_t i = FIRST_TYPE; i <= LAST_TYPE; ++i) { + size_t total = used[i] + identity_used[i] + unused[i]; + if (total == 0) continue; + TRACE_BROKER_MEMORY( + this, InstanceType(i) << ": " << total << "; data used: " << used[i] + << "; only identity used: " << identity_used[i] + << "; unused: " << unused[i]); + } +} +#endif // DEBUG + +void JSHeapBroker::InitializeAndStartSerializing() { + TraceScope tracer(this, "JSHeapBroker::InitializeAndStartSerializing"); + + CHECK_EQ(mode_, kDisabled); + mode_ = kSerializing; + + // Throw away the dummy data that we created while disabled. + refs_->Clear(); + refs_ = + zone()->New<RefsMap>(kInitialRefsBucketCount, AddressMatcher(), zone()); + + CollectArrayAndObjectPrototypes(); + + SetTargetNativeContextRef(target_native_context().object()); + target_native_context().Serialize(); + if (!is_concurrent_inlining()) { + // Perform full native context serialization now if we can't do it later on + // the background thread. + target_native_context().SerializeOnBackground(); + } + + Factory* const f = isolate()->factory(); + if (!is_concurrent_inlining()) { + ObjectData* data; + data = GetOrCreateData(f->array_buffer_detaching_protector()); + if (!data->should_access_heap()) data->AsPropertyCell()->Serialize(this); + data = GetOrCreateData(f->array_constructor_protector()); + if (!data->should_access_heap()) data->AsPropertyCell()->Serialize(this); + data = GetOrCreateData(f->array_iterator_protector()); + if (!data->should_access_heap()) data->AsPropertyCell()->Serialize(this); + data = GetOrCreateData(f->array_species_protector()); + if (!data->should_access_heap()) data->AsPropertyCell()->Serialize(this); + data = GetOrCreateData(f->no_elements_protector()); + if (!data->should_access_heap()) data->AsPropertyCell()->Serialize(this); + data = GetOrCreateData(f->promise_hook_protector()); + if (!data->should_access_heap()) data->AsPropertyCell()->Serialize(this); + data = GetOrCreateData(f->promise_species_protector()); + if (!data->should_access_heap()) data->AsPropertyCell()->Serialize(this); + data = GetOrCreateData(f->promise_then_protector()); + if (!data->should_access_heap()) data->AsPropertyCell()->Serialize(this); + data = GetOrCreateData(f->string_length_protector()); + if (!data->should_access_heap()) data->AsPropertyCell()->Serialize(this); + } + GetOrCreateData(f->many_closures_cell()); + GetOrCreateData(CodeFactory::CEntry(isolate(), 1, SaveFPRegsMode::kIgnore, + ArgvMode::kStack, true)); + + TRACE(this, "Finished serializing standard objects"); +} + +namespace { + +template <RefSerializationKind Kind, class DataT, class ObjectT> +struct CreateDataFunctor { + bool operator()(JSHeapBroker* broker, RefsMap* refs, + Handle<Object> object, RefsMap::Entry** entry_out, + ObjectData** object_data_out) { + USE(broker, refs, object, entry_out, object_data_out); + UNREACHABLE(); + } +}; + +template <class DataT, class ObjectT> +struct CreateDataFunctor<RefSerializationKind::kSerialized, DataT, ObjectT> { + bool operator()(JSHeapBroker* broker, RefsMap* refs, + Handle<Object> object, RefsMap::Entry** entry_out, + ObjectData** object_data_out) { + if (broker->mode() == JSHeapBroker::kSerializing) { + RefsMap::Entry* entry = refs->LookupOrInsert(object.address()); + *object_data_out = broker->zone()->New<DataT>( + broker, &entry->value, Handle<ObjectT>::cast(object)); + *entry_out = entry; + return true; + } + return false; + } +}; + +template <class DataT, class ObjectT> +struct CreateDataFunctor<RefSerializationKind::kBackgroundSerialized, DataT, + ObjectT> { + bool operator()(JSHeapBroker* broker, RefsMap* refs, + Handle<Object> object, RefsMap::Entry** entry_out, + ObjectData** object_data_out) { + if (broker->is_concurrent_inlining()) { + RefsMap::Entry* entry = refs->LookupOrInsert(object.address()); + *object_data_out = broker->zone()->New<DataT>( + broker, &entry->value, Handle<ObjectT>::cast(object), + kBackgroundSerializedHeapObject); + *entry_out = entry; + return true; + } else if (broker->mode() == JSHeapBroker::kSerializing) { + RefsMap::Entry* entry = refs->LookupOrInsert(object.address()); + *object_data_out = broker->zone()->New<DataT>( + broker, &entry->value, Handle<ObjectT>::cast(object), + ObjectDataKind::kSerializedHeapObject); + *entry_out = entry; + return true; + } + return false; + } +}; + +template <class DataT, class ObjectT> +struct CreateDataFunctor<RefSerializationKind::kNeverSerialized, DataT, + ObjectT> { + bool operator()(JSHeapBroker* broker, RefsMap* refs, Handle<Object> object, + RefsMap::Entry** entry_out, ObjectData** object_data_out) { + // TODO(solanes, v8:10866): Remove the `(mode() == kSerializing)` case + // below when all classes skip serialization. Same for similar spots if we + // end up keeping them. + if (broker->is_concurrent_inlining()) { + RefsMap::Entry* entry = refs->LookupOrInsert(object.address()); + *object_data_out = broker->zone()->New<ObjectData>( + broker, &entry->value, object, kNeverSerializedHeapObject); + *entry_out = entry; + return true; + } else if (broker->mode() == JSHeapBroker::kSerializing) { + RefsMap::Entry* entry = refs->LookupOrInsert(object.address()); + *object_data_out = broker->zone()->New<DataT>( + broker, &entry->value, Handle<ObjectT>::cast(object)); + *entry_out = entry; + return true; + } + return false; + } +}; + +} // namespace + +void JSHeapBroker::ClearReconstructibleData() { + RefsMap::Entry* p = refs_->Start(); + while (p != nullptr) { + Address key = p->key; + ObjectData* value = p->value; + p = refs_->Next(p); + const auto kind = RefSerializationKindOf(value); + if (kind == RefSerializationKind::kNeverSerialized || + kind == RefSerializationKind::kBackgroundSerialized) { + if (value->IsMap() && + value->kind() == ObjectDataKind::kBackgroundSerializedHeapObject && + value->AsMap()->has_extra_serialized_data()) { + continue; + } + // Can be reconstructed from the background thread. + CHECK_NOT_NULL(refs_->Remove(key)); + } + } +} + +ObjectData* JSHeapBroker::TryGetOrCreateData(Handle<Object> object, + GetOrCreateDataFlags flags) { + RefsMap::Entry* entry = refs_->Lookup(object.address()); + if (entry != nullptr) return entry->value; + + if (mode() == JSHeapBroker::kDisabled) { + entry = refs_->LookupOrInsert(object.address()); + ObjectData** storage = &entry->value; + if (*storage == nullptr) { + entry->value = zone()->New<ObjectData>( + this, storage, object, + object->IsSmi() ? kSmi : kUnserializedHeapObject); + } + return *storage; + } + + CHECK(mode() == JSHeapBroker::kSerializing || + mode() == JSHeapBroker::kSerialized); + + ObjectData* object_data; + if (object->IsSmi()) { + entry = refs_->LookupOrInsert(object.address()); + return zone()->New<ObjectData>(this, &entry->value, object, kSmi); + } + + DCHECK(!object->IsSmi()); + + const bool crash_on_error = (flags & kCrashOnError) != 0; + + // TODO(jgruber): Remove this flag check (and the flag) once TSAN failures + // are fixed. + // See also: crbug.com/v8/11779 + if (FLAG_turbo_concurrent_inlining_check_ispendingallocation) { + if ((flags & kAssumeMemoryFence) == 0 && + ObjectMayBeUninitialized(HeapObject::cast(*object))) { + TRACE_BROKER_MISSING(this, "Object may be uninitialized " << *object); + CHECK_WITH_MSG(!crash_on_error, "Ref construction failed"); + return nullptr; + } + } + + if (IsReadOnlyHeapObjectForCompiler(HeapObject::cast(*object))) { + entry = refs_->LookupOrInsert(object.address()); + return zone()->New<ObjectData>(this, &entry->value, object, + kUnserializedReadOnlyHeapObject); + } + +#define CREATE_DATA(Name, Kind) \ + if (object->Is##Name()) { \ + CreateDataFunctor<Kind, Name##Data, Name> f; \ + if (!f(this, refs_, object, &entry, &object_data)) { \ + CHECK_WITH_MSG(!crash_on_error, "Ref construction failed"); \ + return nullptr; \ + } \ + /* NOLINTNEXTLINE(readability/braces) */ \ + } else + HEAP_BROKER_OBJECT_LIST(CREATE_DATA) +#undef CREATE_DATA + { + UNREACHABLE(); + } + // At this point the entry pointer is not guaranteed to be valid as + // the refs_ hash hable could be resized by one of the constructors above. + DCHECK_EQ(object_data, refs_->Lookup(object.address())->value); + return object_data; +} + +#define DEFINE_IS_AND_AS(Name, ...) \ + bool ObjectRef::Is##Name() const { return data()->Is##Name(); } \ + Name##Ref ObjectRef::As##Name() const { \ + DCHECK(Is##Name()); \ + return Name##Ref(broker(), data()); \ + } +HEAP_BROKER_OBJECT_LIST(DEFINE_IS_AND_AS) +#undef DEFINE_IS_AND_AS + +bool ObjectRef::IsSmi() const { return data()->is_smi(); } + +int ObjectRef::AsSmi() const { + DCHECK(IsSmi()); + // Handle-dereference is always allowed for Handle<Smi>. + return Handle<Smi>::cast(object())->value(); +} + +base::Optional<MapRef> JSObjectRef::GetObjectCreateMap() const { + if (data_->should_access_heap()) { + Handle<Map> instance_map; + if (Map::TryGetObjectCreateMap(broker()->isolate(), object()) + .ToHandle(&instance_map)) { + return MakeRef(broker(), instance_map); + } else { + return base::Optional<MapRef>(); + } + } + ObjectData* map_data = data()->AsJSObject()->object_create_map(broker()); + if (map_data == nullptr) return base::Optional<MapRef>(); + if (map_data->should_access_heap()) { + return MakeRef(broker(), Handle<Map>::cast(map_data->object())); + } + return MapRef(broker(), map_data->AsMap()); +} + +#define DEF_TESTER(Type, ...) \ + bool MapRef::Is##Type##Map() const { \ + return InstanceTypeChecker::Is##Type(instance_type()); \ + } +INSTANCE_TYPE_CHECKERS(DEF_TESTER) +#undef DEF_TESTER + +base::Optional<MapRef> MapRef::AsElementsKind(ElementsKind kind) const { + if (data_->should_access_heap()) { + return MakeRef(broker(), + Map::AsElementsKind(broker()->isolate(), object(), kind)); + } + if (kind == elements_kind()) return *this; + const ZoneVector<ObjectData*>& elements_kind_generalizations = + data()->AsMap()->elements_kind_generalizations(); + for (auto data : elements_kind_generalizations) { + MapRef map(broker(), data); + if (map.elements_kind() == kind) return map; + } + return base::Optional<MapRef>(); +} + +void MapRef::SerializeForElementLoad() { + if (data()->should_access_heap()) return; + CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); + data()->AsMap()->SerializeForElementLoad(broker()); +} + +void MapRef::SerializeForElementStore() { + if (data()->should_access_heap()) return; + CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); + data()->AsMap()->SerializeForElementStore(broker()); +} + +void MapData::SerializeForElementLoad(JSHeapBroker* broker) { + if (serialized_for_element_load_) return; + serialized_for_element_load_ = true; + + TraceScope tracer(broker, this, "MapData::SerializeForElementLoad"); + SerializePrototype(broker); +} + +void MapData::SerializeForElementStore(JSHeapBroker* broker) { + if (serialized_for_element_store_) return; + serialized_for_element_store_ = true; + + TraceScope tracer(broker, this, "MapData::SerializeForElementStore"); + // TODO(solanes, v8:7790): This should use MapData methods rather than + // constructing MapRefs, but it involves non-trivial refactoring and this + // method should go away anyway once the compiler is fully concurrent. + MapRef map(broker, this); + do { + map.SerializePrototype(); + map = map.prototype().value().map(); + } while (map.IsJSObjectMap() && map.is_stable() && + IsFastElementsKind(map.elements_kind())); +} + +bool MapRef::HasOnlyStablePrototypesWithFastElements( + ZoneVector<MapRef>* prototype_maps) { + DCHECK_NOT_NULL(prototype_maps); + MapRef prototype_map = prototype().value().map(); + while (prototype_map.oddball_type() != OddballType::kNull) { + if (!prototype_map.IsJSObjectMap() || !prototype_map.is_stable() || + !IsFastElementsKind(prototype_map.elements_kind())) { + return false; + } + prototype_maps->push_back(prototype_map); + prototype_map = prototype_map.prototype().value().map(); + } + return true; +} + +bool MapRef::supports_fast_array_iteration() const { + if (data_->should_access_heap() || broker()->is_concurrent_inlining()) { + return SupportsFastArrayIteration(broker(), object()); + } + return data()->AsMap()->supports_fast_array_iteration(); +} + +bool MapRef::supports_fast_array_resize() const { + if (data_->should_access_heap() || broker()->is_concurrent_inlining()) { + return SupportsFastArrayResize(broker(), object()); + } + return data()->AsMap()->supports_fast_array_resize(); +} + +int JSFunctionRef::InitialMapInstanceSizeWithMinSlack() const { + if (data_->should_access_heap()) { + return object()->ComputeInstanceSizeWithMinSlack(broker()->isolate()); + } + return data()->AsJSFunction()->initial_map_instance_size_with_min_slack(); +} + +OddballType MapRef::oddball_type() const { + if (instance_type() != ODDBALL_TYPE) { + return OddballType::kNone; + } + Factory* f = broker()->isolate()->factory(); + if (equals(MakeRef(broker(), f->undefined_map()))) { + return OddballType::kUndefined; + } + if (equals(MakeRef(broker(), f->null_map()))) { + return OddballType::kNull; + } + if (equals(MakeRef(broker(), f->boolean_map()))) { + return OddballType::kBoolean; + } + if (equals(MakeRef(broker(), f->the_hole_map()))) { + return OddballType::kHole; + } + if (equals(MakeRef(broker(), f->uninitialized_map()))) { + return OddballType::kUninitialized; + } + DCHECK(equals(MakeRef(broker(), f->termination_exception_map())) || + equals(MakeRef(broker(), f->arguments_marker_map())) || + equals(MakeRef(broker(), f->optimized_out_map())) || + equals(MakeRef(broker(), f->stale_register_map()))); + return OddballType::kOther; +} + +FeedbackCellRef FeedbackVectorRef::GetClosureFeedbackCell(int index) const { + if (data_->should_access_heap()) { + // These should all be available because we request the cell for each + // CreateClosure bytecode. + return MakeRef(broker(), object()->closure_feedback_cell(index)); + } + + return FeedbackCellRef( + broker(), + data()->AsFeedbackVector()->GetClosureFeedbackCell(broker(), index)); +} + +ObjectRef JSObjectRef::RawFastPropertyAt(FieldIndex index) const { + CHECK(index.is_inobject()); + if (data_->should_access_heap()) { + return MakeRef(broker(), object()->RawFastPropertyAt(index)); + } + JSObjectData* object_data = data()->AsJSObject(); + return ObjectRef(broker(), + object_data->GetInobjectField(index.property_index())); +} + +bool AllocationSiteRef::IsFastLiteral() const { + if (data_->should_access_heap()) { + CHECK_NE(data_->kind(), ObjectDataKind::kNeverSerializedHeapObject); + return IsInlinableFastLiteral( + handle(object()->boilerplate(kAcquireLoad), broker()->isolate())); + } + return data()->AsAllocationSite()->IsFastLiteral(); +} + +void AllocationSiteRef::SerializeBoilerplate() { + if (data_->should_access_heap()) return; + CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); + data()->AsAllocationSite()->SerializeBoilerplate(broker()); +} + +void JSObjectRef::SerializeElements() { + if (data_->should_access_heap()) return; + CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); + data()->AsJSObject()->SerializeElements(broker()); +} + +void JSObjectRef::EnsureElementsTenured() { + if (data_->should_access_heap()) { + Handle<FixedArrayBase> object_elements = elements().value().object(); + if (ObjectInYoungGeneration(*object_elements)) { + // If we would like to pretenure a fixed cow array, we must ensure that + // the array is already in old space, otherwise we'll create too many + // old-to-new-space pointers (overflowing the store buffer). + object_elements = + broker()->isolate()->factory()->CopyAndTenureFixedCOWArray( + Handle<FixedArray>::cast(object_elements)); + object()->set_elements(*object_elements); + } + return; + } + CHECK(data()->AsJSObject()->cow_or_empty_elements_tenured()); +} + +FieldIndex MapRef::GetFieldIndexFor(InternalIndex descriptor_index) const { + CHECK_LT(descriptor_index.as_int(), NumberOfOwnDescriptors()); + if (data_->should_access_heap() || broker()->is_concurrent_inlining()) { + FieldIndex result = FieldIndex::ForDescriptor(*object(), descriptor_index); + DCHECK(result.is_inobject()); + return result; + } + DescriptorArrayData* descriptors = + data()->AsMap()->instance_descriptors()->AsDescriptorArray(); + FieldIndex result = descriptors->GetFieldIndexFor(descriptor_index); + DCHECK(result.is_inobject()); + return result; +} + +int MapRef::GetInObjectPropertyOffset(int i) const { + if (data_->should_access_heap() || broker()->is_concurrent_inlining()) { + return object()->GetInObjectPropertyOffset(i); + } + return (GetInObjectPropertiesStartInWords() + i) * kTaggedSize; +} + +PropertyDetails MapRef::GetPropertyDetails( + InternalIndex descriptor_index) const { + CHECK_LT(descriptor_index.as_int(), NumberOfOwnDescriptors()); + return instance_descriptors().GetPropertyDetails(descriptor_index); +} + +NameRef MapRef::GetPropertyKey(InternalIndex descriptor_index) const { + CHECK_LT(descriptor_index.as_int(), NumberOfOwnDescriptors()); + return instance_descriptors().GetPropertyKey(descriptor_index); +} + +bool MapRef::IsFixedCowArrayMap() const { + Handle<Map> fixed_cow_array_map = + ReadOnlyRoots(broker()->isolate()).fixed_cow_array_map_handle(); + return equals(MakeRef(broker(), fixed_cow_array_map)); +} + +bool MapRef::IsPrimitiveMap() const { + return instance_type() <= LAST_PRIMITIVE_HEAP_OBJECT_TYPE; +} + +MapRef MapRef::FindFieldOwner(InternalIndex descriptor_index) const { + CHECK_LT(descriptor_index.as_int(), NumberOfOwnDescriptors()); + if (data_->should_access_heap() || broker()->is_concurrent_inlining()) { + // TODO(solanes, v8:7790): Consider caching the result of the field owner on + // the descriptor array. It would be useful for same map as well as any + // other map sharing that descriptor array. + return MapRef(broker(), broker()->GetOrCreateData(object()->FindFieldOwner( + broker()->isolate(), descriptor_index))); + } + DescriptorArrayData* descriptors = + data()->AsMap()->instance_descriptors()->AsDescriptorArray(); + return MapRef(broker(), descriptors->FindFieldOwner(descriptor_index)); +} + +ObjectRef MapRef::GetFieldType(InternalIndex descriptor_index) const { + CHECK_LT(descriptor_index.as_int(), NumberOfOwnDescriptors()); + return instance_descriptors().GetFieldType(descriptor_index); +} + +base::Optional<ObjectRef> StringRef::GetCharAsStringOrUndefined( + uint32_t index, SerializationPolicy policy) const { + if (data_->should_access_heap()) { + // TODO(solanes, neis, v8:7790, v8:11012): Re-enable this optimization for + // concurrent inlining when we have the infrastructure to safely do so. + if (broker()->is_concurrent_inlining()) return base::nullopt; + CHECK_EQ(data_->kind(), ObjectDataKind::kUnserializedHeapObject); + return GetOwnElementFromHeap(broker(), object(), index, true); + } + ObjectData* element = + data()->AsString()->GetCharAsStringOrUndefined(broker(), index, policy); + if (element == nullptr) return base::nullopt; + return ObjectRef(broker(), element); +} + +base::Optional<int> StringRef::length() const { + if (data_->should_access_heap()) { + if (data_->kind() == kNeverSerializedHeapObject && + !this->IsInternalizedString()) { + TRACE_BROKER_MISSING( + broker(), + "length for kNeverSerialized non-internalized string " << *this); + return base::nullopt; + } else { + return object()->length(kAcquireLoad); + } + } + return data()->AsString()->length(); +} + +base::Optional<uint16_t> StringRef::GetFirstChar() { + if (data_->should_access_heap()) { + if (data_->kind() == kNeverSerializedHeapObject && + !this->IsInternalizedString()) { + TRACE_BROKER_MISSING( + broker(), + "first char for kNeverSerialized non-internalized string " << *this); + return base::nullopt; + } + + if (!broker()->IsMainThread()) { + return object()->Get(0, broker()->local_isolate()); + } else { + // TODO(solanes, v8:7790): Remove this case once the inlining phase is + // done concurrently all the time. + return object()->Get(0); + } + } + return data()->AsString()->first_char(); +} + +base::Optional<double> StringRef::ToNumber() { + if (data_->should_access_heap()) { + if (data_->kind() == kNeverSerializedHeapObject && + !this->IsInternalizedString()) { + TRACE_BROKER_MISSING( + broker(), + "number for kNeverSerialized non-internalized string " << *this); + return base::nullopt; + } + + return TryStringToDouble(broker()->local_isolate(), object()); + } + return data()->AsString()->to_number(); +} + +int ArrayBoilerplateDescriptionRef::constants_elements_length() const { + if (data_->should_access_heap()) { + return object()->constant_elements().length(); + } + return data()->AsArrayBoilerplateDescription()->constants_elements_length(); +} + +ObjectRef FixedArrayRef::get(int i) const { return TryGet(i).value(); } + +base::Optional<ObjectRef> FixedArrayRef::TryGet(int i) const { + return TryMakeRef(broker(), object()->get(i, kRelaxedLoad)); +} + +Float64 FixedDoubleArrayRef::GetFromImmutableFixedDoubleArray(int i) const { + STATIC_ASSERT(ref_traits<FixedDoubleArray>::ref_serialization_kind == + RefSerializationKind::kNeverSerialized); + return Float64::FromBits(object()->get_representation(i)); +} + +Handle<ByteArray> BytecodeArrayRef::SourcePositionTable() const { + return broker()->CanonicalPersistentHandle(object()->SourcePositionTable()); +} + +Address BytecodeArrayRef::handler_table_address() const { + return reinterpret_cast<Address>( + object()->handler_table().GetDataStartAddress()); +} + +int BytecodeArrayRef::handler_table_size() const { + return object()->handler_table().length(); +} + +#define IF_ACCESS_FROM_HEAP_C(name) \ + if (data_->should_access_heap()) { \ + return object()->name(); \ + } + +#define IF_ACCESS_FROM_HEAP(result, name) \ + if (data_->should_access_heap()) { \ + return MakeRef(broker(), result::cast(object()->name())); \ + } + +// Macros for definining a const getter that, depending on the data kind, +// either looks into the heap or into the serialized data. +#define BIMODAL_ACCESSOR(holder, result, name) \ + result##Ref holder##Ref::name() const { \ + IF_ACCESS_FROM_HEAP(result, name); \ + return result##Ref(broker(), ObjectRef::data()->As##holder()->name()); \ + } + +// Like above except that the result type is not an XYZRef. +#define BIMODAL_ACCESSOR_C(holder, result, name) \ + result holder##Ref::name() const { \ + IF_ACCESS_FROM_HEAP_C(name); \ + return ObjectRef::data()->As##holder()->name(); \ + } + +// Like above but for BitFields. +#define BIMODAL_ACCESSOR_B(holder, field, name, BitField) \ + typename BitField::FieldType holder##Ref::name() const { \ + IF_ACCESS_FROM_HEAP_C(name); \ + return BitField::decode(ObjectRef::data()->As##holder()->field()); \ + } + +// Like IF_ACCESS_FROM_HEAP[_C] but we also allow direct heap access for +// kSerialized only for methods that we identified to be safe. +#define IF_ACCESS_FROM_HEAP_WITH_FLAG(result, name) \ + if (data_->should_access_heap() || broker()->is_concurrent_inlining()) { \ + return MakeRef(broker(), result::cast(object()->name())); \ + } +#define IF_ACCESS_FROM_HEAP_WITH_FLAG_C(name) \ + if (data_->should_access_heap() || broker()->is_concurrent_inlining()) { \ + return object()->name(); \ + } + +// Like BIMODAL_ACCESSOR[_C] except that we force a direct heap access if +// broker()->is_concurrent_inlining() is true (even for kSerialized). This is +// because we identified the method to be safe to use direct heap access, but +// the holder##Data class still needs to be serialized. +#define BIMODAL_ACCESSOR_WITH_FLAG(holder, result, name) \ + result##Ref holder##Ref::name() const { \ + IF_ACCESS_FROM_HEAP_WITH_FLAG(result, name); \ + return result##Ref(broker(), ObjectRef::data()->As##holder()->name()); \ + } +#define BIMODAL_ACCESSOR_WITH_FLAG_C(holder, result, name) \ + result holder##Ref::name() const { \ + IF_ACCESS_FROM_HEAP_WITH_FLAG_C(name); \ + return ObjectRef::data()->As##holder()->name(); \ + } +#define BIMODAL_ACCESSOR_WITH_FLAG_B(holder, field, name, BitField) \ + typename BitField::FieldType holder##Ref::name() const { \ + IF_ACCESS_FROM_HEAP_WITH_FLAG_C(name); \ + return BitField::decode(ObjectRef::data()->As##holder()->field()); \ + } + +BIMODAL_ACCESSOR(AllocationSite, Object, nested_site) +BIMODAL_ACCESSOR_C(AllocationSite, bool, CanInlineCall) +BIMODAL_ACCESSOR_C(AllocationSite, bool, PointsToLiteral) +BIMODAL_ACCESSOR_C(AllocationSite, ElementsKind, GetElementsKind) +BIMODAL_ACCESSOR_C(AllocationSite, AllocationType, GetAllocationType) + +BIMODAL_ACCESSOR_C(BigInt, uint64_t, AsUint64) + +BIMODAL_ACCESSOR_C(BytecodeArray, int, register_count) +BIMODAL_ACCESSOR_C(BytecodeArray, int, parameter_count) +BIMODAL_ACCESSOR_C(BytecodeArray, interpreter::Register, + incoming_new_target_or_generator_register) + +BIMODAL_ACCESSOR_C(FeedbackVector, double, invocation_count) + +BIMODAL_ACCESSOR(HeapObject, Map, map) + +BIMODAL_ACCESSOR_C(HeapNumber, double, value) + +// These JSBoundFunction fields are immutable after initialization. Moreover, +// as long as JSObjects are still serialized on the main thread, all +// JSBoundFunctionRefs are created at a time when the underlying objects are +// guaranteed to be fully initialized. +BIMODAL_ACCESSOR_WITH_FLAG(JSBoundFunction, JSReceiver, bound_target_function) +BIMODAL_ACCESSOR_WITH_FLAG(JSBoundFunction, Object, bound_this) +BIMODAL_ACCESSOR_WITH_FLAG(JSBoundFunction, FixedArray, bound_arguments) + +BIMODAL_ACCESSOR_C(JSDataView, size_t, byte_length) + +BIMODAL_ACCESSOR_C(JSFunction, bool, has_feedback_vector) +BIMODAL_ACCESSOR_C(JSFunction, bool, has_initial_map) +BIMODAL_ACCESSOR_C(JSFunction, bool, has_prototype) +BIMODAL_ACCESSOR_C(JSFunction, bool, PrototypeRequiresRuntimeLookup) +BIMODAL_ACCESSOR(JSFunction, Context, context) +BIMODAL_ACCESSOR(JSFunction, NativeContext, native_context) +BIMODAL_ACCESSOR(JSFunction, Map, initial_map) +BIMODAL_ACCESSOR(JSFunction, Object, prototype) +BIMODAL_ACCESSOR(JSFunction, SharedFunctionInfo, shared) +BIMODAL_ACCESSOR(JSFunction, FeedbackCell, raw_feedback_cell) +BIMODAL_ACCESSOR(JSFunction, FeedbackVector, feedback_vector) + +BIMODAL_ACCESSOR_C(JSGlobalObject, bool, IsDetached) + +BIMODAL_ACCESSOR_WITH_FLAG_B(Map, bit_field2, elements_kind, + Map::Bits2::ElementsKindBits) +BIMODAL_ACCESSOR_WITH_FLAG_B(Map, bit_field3, is_dictionary_map, + Map::Bits3::IsDictionaryMapBit) +BIMODAL_ACCESSOR_WITH_FLAG_B(Map, bit_field3, is_deprecated, + Map::Bits3::IsDeprecatedBit) +BIMODAL_ACCESSOR_WITH_FLAG_B(Map, bit_field3, NumberOfOwnDescriptors, + Map::Bits3::NumberOfOwnDescriptorsBits) +BIMODAL_ACCESSOR_WITH_FLAG_B(Map, bit_field3, is_migration_target, + Map::Bits3::IsMigrationTargetBit) +BIMODAL_ACCESSOR_WITH_FLAG_B(Map, bit_field, has_prototype_slot, + Map::Bits1::HasPrototypeSlotBit) +BIMODAL_ACCESSOR_WITH_FLAG_B(Map, bit_field, is_access_check_needed, + Map::Bits1::IsAccessCheckNeededBit) +BIMODAL_ACCESSOR_WITH_FLAG_B(Map, bit_field, is_callable, + Map::Bits1::IsCallableBit) +BIMODAL_ACCESSOR_WITH_FLAG_B(Map, bit_field, has_indexed_interceptor, + Map::Bits1::HasIndexedInterceptorBit) +BIMODAL_ACCESSOR_WITH_FLAG_B(Map, bit_field, is_constructor, + Map::Bits1::IsConstructorBit) +BIMODAL_ACCESSOR_WITH_FLAG_B(Map, bit_field, is_undetectable, + Map::Bits1::IsUndetectableBit) +BIMODAL_ACCESSOR_C(Map, int, instance_size) +BIMODAL_ACCESSOR_WITH_FLAG_C(Map, int, NextFreePropertyIndex) +BIMODAL_ACCESSOR_C(Map, int, UnusedPropertyFields) +BIMODAL_ACCESSOR_WITH_FLAG_C(Map, InstanceType, instance_type) +BIMODAL_ACCESSOR_WITH_FLAG(Map, Object, GetConstructor) +BIMODAL_ACCESSOR_WITH_FLAG(Map, HeapObject, GetBackPointer) +BIMODAL_ACCESSOR_C(Map, bool, is_abandoned_prototype_map) + +#define DEF_NATIVE_CONTEXT_ACCESSOR(type, name) \ + BIMODAL_ACCESSOR(NativeContext, type, name) +BROKER_NATIVE_CONTEXT_FIELDS(DEF_NATIVE_CONTEXT_ACCESSOR) +#undef DEF_NATIVE_CONTEXT_ACCESSOR + +BIMODAL_ACCESSOR_C(ObjectBoilerplateDescription, int, size) + +BIMODAL_ACCESSOR(PropertyCell, Object, value) +BIMODAL_ACCESSOR_C(PropertyCell, PropertyDetails, property_details) + +BIMODAL_ACCESSOR(RegExpBoilerplateDescription, FixedArray, data) +BIMODAL_ACCESSOR(RegExpBoilerplateDescription, String, source) +BIMODAL_ACCESSOR_C(RegExpBoilerplateDescription, int, flags) + +base::Optional<CallHandlerInfoRef> FunctionTemplateInfoRef::call_code() const { + if (data_->should_access_heap()) { + HeapObject call_code = object()->call_code(kAcquireLoad); + if (call_code.IsUndefined()) return base::nullopt; + return TryMakeRef(broker(), CallHandlerInfo::cast(call_code)); + } + ObjectData* call_code = data()->AsFunctionTemplateInfo()->call_code(); + if (!call_code) return base::nullopt; + return CallHandlerInfoRef(broker(), call_code); +} + +bool FunctionTemplateInfoRef::is_signature_undefined() const { + if (data_->should_access_heap()) { + return object()->signature().IsUndefined(broker()->isolate()); + } + return data()->AsFunctionTemplateInfo()->is_signature_undefined(); +} + +bool FunctionTemplateInfoRef::has_call_code() const { + if (data_->should_access_heap()) { + HeapObject call_code = object()->call_code(kAcquireLoad); + return !call_code.IsUndefined(); + } + return data()->AsFunctionTemplateInfo()->has_call_code(); +} + +bool FunctionTemplateInfoRef ::accept_any_receiver() const { + if (data_->should_access_heap()) { + return object()->accept_any_receiver(); + } + return ObjectRef ::data()->AsFunctionTemplateInfo()->accept_any_receiver(); +} + +HolderLookupResult FunctionTemplateInfoRef::LookupHolderOfExpectedType( + MapRef receiver_map, SerializationPolicy policy) { + const HolderLookupResult not_found; + + if (data_->should_access_heap()) { + // There are currently two ways we can see a FunctionTemplateInfo on the + // background thread: 1.) As part of a SharedFunctionInfo and 2.) in an + // AccessorPair. In both cases, the FTI is fully constructed on the main + // thread before. + // TODO(nicohartmann@, v8:7790): Once the above no longer holds, we might + // have to use the GC predicate to check whether objects are fully + // initialized and safe to read. + if (!receiver_map.IsJSReceiverMap() || + (receiver_map.is_access_check_needed() && + !object()->accept_any_receiver())) { + return not_found; + } + + if (!receiver_map.IsJSObjectMap()) return not_found; + + DCHECK(has_call_code()); + + DisallowGarbageCollection no_gc; + HeapObject signature = object()->signature(); + if (signature.IsUndefined()) { + return HolderLookupResult(CallOptimization::kHolderIsReceiver); + } + auto expected_receiver_type = FunctionTemplateInfo::cast(signature); + if (expected_receiver_type.IsTemplateFor(*receiver_map.object())) { + return HolderLookupResult(CallOptimization::kHolderIsReceiver); + } + + if (!receiver_map.IsJSGlobalProxyMap()) return not_found; + if (policy == SerializationPolicy::kSerializeIfNeeded) { + receiver_map.SerializePrototype(); + } + base::Optional<HeapObjectRef> prototype = receiver_map.prototype(); + if (!prototype.has_value()) return not_found; + if (prototype->IsNull()) return not_found; + + JSObject raw_prototype = JSObject::cast(*prototype->object()); + if (!expected_receiver_type.IsTemplateFor(raw_prototype.map())) { + return not_found; + } + return HolderLookupResult(CallOptimization::kHolderFound, + prototype->AsJSObject()); + } + + FunctionTemplateInfoData* fti_data = data()->AsFunctionTemplateInfo(); + KnownReceiversMap::iterator lookup_it = + fti_data->known_receivers().find(receiver_map.data()); + if (lookup_it != fti_data->known_receivers().cend()) { + return lookup_it->second; + } + if (policy == SerializationPolicy::kAssumeSerialized) { + TRACE_BROKER_MISSING(broker(), + "holder for receiver with map " << receiver_map); + return not_found; + } + if (!receiver_map.IsJSReceiverMap() || + (receiver_map.is_access_check_needed() && !accept_any_receiver())) { + fti_data->known_receivers().insert({receiver_map.data(), not_found}); + return not_found; + } + + HolderLookupResult result; + CallOptimization call_optimization(broker()->local_isolate_or_isolate(), + object()); + Handle<JSObject> holder = broker()->CanonicalPersistentHandle( + call_optimization.LookupHolderOfExpectedType( + broker()->local_isolate_or_isolate(), receiver_map.object(), + &result.lookup)); + + switch (result.lookup) { + case CallOptimization::kHolderFound: { + result.holder = MakeRef(broker(), holder); + fti_data->known_receivers().insert({receiver_map.data(), result}); + break; + } + default: { + DCHECK_EQ(result.holder, base::nullopt); + fti_data->known_receivers().insert({receiver_map.data(), result}); + } + } + return result; +} + +BIMODAL_ACCESSOR(CallHandlerInfo, Object, data) + +BIMODAL_ACCESSOR_C(ScopeInfo, int, ContextLength) +BIMODAL_ACCESSOR_C(ScopeInfo, bool, HasContextExtensionSlot) +BIMODAL_ACCESSOR_C(ScopeInfo, bool, HasOuterScopeInfo) +BIMODAL_ACCESSOR(ScopeInfo, ScopeInfo, OuterScopeInfo) + +BIMODAL_ACCESSOR_C(SharedFunctionInfo, int, builtin_id) +BytecodeArrayRef SharedFunctionInfoRef::GetBytecodeArray() const { + if (data_->should_access_heap() || broker()->is_concurrent_inlining()) { + BytecodeArray bytecode_array; + if (!broker()->IsMainThread()) { + bytecode_array = object()->GetBytecodeArray(broker()->local_isolate()); + } else { + bytecode_array = object()->GetBytecodeArray(broker()->isolate()); + } + return MakeRef(broker(), bytecode_array); + } + return BytecodeArrayRef( + broker(), ObjectRef ::data()->AsSharedFunctionInfo()->GetBytecodeArray()); +} +#define DEF_SFI_ACCESSOR(type, name) \ + BIMODAL_ACCESSOR_WITH_FLAG_C(SharedFunctionInfo, type, name) +BROKER_SFI_FIELDS(DEF_SFI_ACCESSOR) +#undef DEF_SFI_ACCESSOR +SharedFunctionInfo::Inlineability SharedFunctionInfoRef::GetInlineability() + const { + if (data_->should_access_heap()) { + if (!broker()->IsMainThread()) { + return object()->GetInlineability(broker()->local_isolate()); + } else { + return object()->GetInlineability(broker()->isolate()); + } + } + return ObjectRef ::data()->AsSharedFunctionInfo()->GetInlineability(); +} + +base::Optional<FeedbackVectorRef> FeedbackCellRef::value() const { + if (data_->should_access_heap()) { + // Note that we use the synchronized accessor. + Object value = object()->value(kAcquireLoad); + if (!value.IsFeedbackVector()) return base::nullopt; + return TryMakeRef(broker(), FeedbackVector::cast(value)); + } + ObjectData* vector = ObjectRef::data()->AsFeedbackCell()->value(); + return FeedbackVectorRef(broker(), vector->AsFeedbackVector()); +} + +base::Optional<ObjectRef> MapRef::GetStrongValue( + InternalIndex descriptor_index) const { + CHECK_LT(descriptor_index.as_int(), NumberOfOwnDescriptors()); + return instance_descriptors().GetStrongValue(descriptor_index); +} + +DescriptorArrayRef MapRef::instance_descriptors() const { + if (data_->should_access_heap() || broker()->is_concurrent_inlining()) { + return MakeRefAssumeMemoryFence( + broker(), + object()->instance_descriptors(broker()->isolate(), kAcquireLoad)); + } + + return DescriptorArrayRef(broker(), data()->AsMap()->instance_descriptors()); +} + +base::Optional<HeapObjectRef> MapRef::prototype() const { + if (data_->should_access_heap() || broker()->is_concurrent_inlining()) { + return TryMakeRef(broker(), HeapObject::cast(object()->prototype())); + } + ObjectData* prototype_data = data()->AsMap()->prototype(); + if (prototype_data == nullptr) { + TRACE_BROKER_MISSING(broker(), "prototype for map " << *this); + return {}; + } + return HeapObjectRef(broker(), prototype_data); +} + +void MapRef::SerializeRootMap() { + if (data_->should_access_heap()) return; + CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); + data()->AsMap()->SerializeRootMap(broker()); +} + +// TODO(solanes, v8:7790): Remove base::Optional from the return type when +// deleting serialization. +base::Optional<MapRef> MapRef::FindRootMap() const { + if (data_->should_access_heap() || broker()->is_concurrent_inlining()) { + // TODO(solanes): Change TryMakeRef to MakeRef when Map is moved to + // kNeverSerialized. + // TODO(solanes, v8:7790): Consider caching the result of the root map. + return TryMakeRef(broker(), object()->FindRootMap(broker()->isolate())); + } + ObjectData* map_data = data()->AsMap()->FindRootMap(); + if (map_data != nullptr) { + return MapRef(broker(), map_data); + } + TRACE_BROKER_MISSING(broker(), "root map for object " << *this); + return base::nullopt; +} + +bool JSTypedArrayRef::is_on_heap() const { + if (data_->should_access_heap() || broker()->is_concurrent_inlining()) { + // Safe to read concurrently because: + // - host object seen by serializer. + // - underlying field written 1. during initialization or 2. with + // release-store. + return object()->is_on_heap(kAcquireLoad); + } + return data()->AsJSTypedArray()->data_ptr(); +} + +size_t JSTypedArrayRef::length() const { + CHECK(!is_on_heap()); + if (data_->should_access_heap() || broker()->is_concurrent_inlining()) { + // Safe to read concurrently because: + // - immutable after initialization. + // - host object seen by serializer. + return object()->length(); + } + return data()->AsJSTypedArray()->length(); +} + +HeapObjectRef JSTypedArrayRef::buffer() const { + CHECK(!is_on_heap()); + if (data_->should_access_heap() || broker()->is_concurrent_inlining()) { + // Safe to read concurrently because: + // - immutable after initialization. + // - host object seen by serializer. + return MakeRef<HeapObject>(broker(), object()->buffer()); + } + return HeapObjectRef{broker(), data()->AsJSTypedArray()->buffer()}; +} + +void* JSTypedArrayRef::data_ptr() const { + CHECK(!is_on_heap()); + if (data_->should_access_heap() || broker()->is_concurrent_inlining()) { + // Safe to read concurrently because: + // - host object seen by serializer. + // - underlying field written 1. during initialization or 2. protected by + // the is_on_heap release/acquire semantics (external_pointer store + // happens-before base_pointer store, and this external_pointer load + // happens-after base_pointer load). + STATIC_ASSERT(JSTypedArray::kOffHeapDataPtrEqualsExternalPointer); + return object()->DataPtr(); + } + return data()->AsJSTypedArray()->data_ptr(); +} + +bool MapRef::IsInobjectSlackTrackingInProgress() const { + IF_ACCESS_FROM_HEAP_WITH_FLAG_C(IsInobjectSlackTrackingInProgress); + return Map::Bits3::ConstructionCounterBits::decode( + data()->AsMap()->bit_field3()) != Map::kNoSlackTracking; +} + +int MapRef::constructor_function_index() const { + IF_ACCESS_FROM_HEAP_WITH_FLAG_C(GetConstructorFunctionIndex); + CHECK(IsPrimitiveMap()); + return data()->AsMap()->constructor_function_index(); +} + +bool MapRef::is_stable() const { + IF_ACCESS_FROM_HEAP_C(is_stable); + return !Map::Bits3::IsUnstableBit::decode(data()->AsMap()->bit_field3()); +} + +bool MapRef::CanBeDeprecated() const { + IF_ACCESS_FROM_HEAP_WITH_FLAG_C(CanBeDeprecated); + CHECK_GT(NumberOfOwnDescriptors(), 0); + return data()->AsMap()->can_be_deprecated(); +} + +bool MapRef::CanTransition() const { + IF_ACCESS_FROM_HEAP_WITH_FLAG_C(CanTransition); + return data()->AsMap()->can_transition(); +} + +int MapRef::GetInObjectPropertiesStartInWords() const { + IF_ACCESS_FROM_HEAP_WITH_FLAG_C(GetInObjectPropertiesStartInWords); + return data()->AsMap()->in_object_properties_start_in_words(); +} + +int MapRef::GetInObjectProperties() const { + IF_ACCESS_FROM_HEAP_C(GetInObjectProperties); + return data()->AsMap()->in_object_properties(); +} + +void ScopeInfoRef::SerializeScopeInfoChain() { + if (data_->should_access_heap()) return; + CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); + data()->AsScopeInfo()->SerializeScopeInfoChain(broker()); +} + +bool StringRef::IsExternalString() const { + IF_ACCESS_FROM_HEAP_C(IsExternalString); + return data()->AsString()->is_external_string(); +} + +Address CallHandlerInfoRef::callback() const { + if (data_->should_access_heap()) { + return v8::ToCData<Address>(object()->callback()); + } + return HeapObjectRef::data()->AsCallHandlerInfo()->callback(); +} + +ZoneVector<Address> FunctionTemplateInfoRef::c_functions() const { + if (data_->should_access_heap()) { + return GetCFunctions(FixedArray::cast(object()->GetCFunctionOverloads()), + broker()->zone()); + } + return HeapObjectRef::data()->AsFunctionTemplateInfo()->c_functions(); +} + +ZoneVector<const CFunctionInfo*> FunctionTemplateInfoRef::c_signatures() const { + if (data_->should_access_heap()) { + return GetCSignatures(FixedArray::cast(object()->GetCFunctionOverloads()), + broker()->zone()); + } + return HeapObjectRef::data()->AsFunctionTemplateInfo()->c_signatures(); +} + +bool StringRef::IsSeqString() const { + IF_ACCESS_FROM_HEAP_C(IsSeqString); + return data()->AsString()->is_seq_string(); +} + +bool NativeContextRef::is_unserialized_heap_object() const { + return data_->kind() == kUnserializedHeapObject; +} + +ScopeInfoRef NativeContextRef::scope_info() const { + if (data_->should_access_heap()) { + // The scope_info is immutable after initialization. + return MakeRefAssumeMemoryFence(broker(), object()->scope_info()); + } + return ScopeInfoRef(broker(), data()->AsNativeContext()->scope_info()); +} + +SharedFunctionInfoRef FeedbackVectorRef::shared_function_info() const { + if (data_->should_access_heap()) { + return MakeRef(broker(), object()->shared_function_info()); + } + + return SharedFunctionInfoRef( + broker(), data()->AsFeedbackVector()->shared_function_info()); +} + +MapRef NativeContextRef::GetFunctionMapFromIndex(int index) const { + DCHECK_GE(index, Context::FIRST_FUNCTION_MAP_INDEX); + DCHECK_LE(index, Context::LAST_FUNCTION_MAP_INDEX); + if (data_->should_access_heap()) { + CHECK_LT(index, object()->length()); + return MakeRefAssumeMemoryFence(broker(), + object()->get(index, kAcquireLoad)) + .AsMap(); + } + return MapRef(broker(), data()->AsNativeContext()->function_maps().at( + index - Context::FIRST_FUNCTION_MAP_INDEX)); +} + +MapRef NativeContextRef::GetInitialJSArrayMap(ElementsKind kind) const { + switch (kind) { + case PACKED_SMI_ELEMENTS: + return js_array_packed_smi_elements_map(); + case HOLEY_SMI_ELEMENTS: + return js_array_holey_smi_elements_map(); + case PACKED_DOUBLE_ELEMENTS: + return js_array_packed_double_elements_map(); + case HOLEY_DOUBLE_ELEMENTS: + return js_array_holey_double_elements_map(); + case PACKED_ELEMENTS: + return js_array_packed_elements_map(); + case HOLEY_ELEMENTS: + return js_array_holey_elements_map(); + default: + UNREACHABLE(); + } +} + +base::Optional<JSFunctionRef> NativeContextRef::GetConstructorFunction( + const MapRef& map) const { + CHECK(map.IsPrimitiveMap()); + switch (map.constructor_function_index()) { + case Map::kNoConstructorFunctionIndex: + return base::nullopt; + case Context::BIGINT_FUNCTION_INDEX: + return bigint_function(); + case Context::BOOLEAN_FUNCTION_INDEX: + return boolean_function(); + case Context::NUMBER_FUNCTION_INDEX: + return number_function(); + case Context::STRING_FUNCTION_INDEX: + return string_function(); + case Context::SYMBOL_FUNCTION_INDEX: + return symbol_function(); + default: + UNREACHABLE(); + } +} + +bool ObjectRef::IsNull() const { return object()->IsNull(); } + +bool ObjectRef::IsNullOrUndefined() const { + if (IsSmi()) return false; + OddballType type = AsHeapObject().map().oddball_type(); + return type == OddballType::kNull || type == OddballType::kUndefined; +} + +bool ObjectRef::IsTheHole() const { + return IsHeapObject() && + AsHeapObject().map().oddball_type() == OddballType::kHole; +} + +base::Optional<bool> ObjectRef::TryGetBooleanValue() const { + if (data_->should_access_heap()) { + return object()->BooleanValue(broker()->isolate()); + } + if (IsSmi()) return AsSmi() != 0; + return data()->AsHeapObject()->TryGetBooleanValue(broker()); +} + +Maybe<double> ObjectRef::OddballToNumber() const { + OddballType type = AsHeapObject().map().oddball_type(); + + switch (type) { + case OddballType::kBoolean: { + ObjectRef true_ref(broker(), + broker()->isolate()->factory()->true_value()); + return this->equals(true_ref) ? Just(1.0) : Just(0.0); + break; + } + case OddballType::kUndefined: { + return Just(std::numeric_limits<double>::quiet_NaN()); + break; + } + case OddballType::kNull: { + return Just(0.0); + break; + } + default: { + return Nothing<double>(); + break; + } + } +} + +base::Optional<ObjectRef> JSObjectRef::GetOwnConstantElement( + uint32_t index, SerializationPolicy policy) const { + if (data_->should_access_heap() || broker()->is_concurrent_inlining()) { + // `elements` are currently still serialized as members of JSObjectRef. + // TODO(jgruber,v8:7790): Once JSObject is no longer serialized, we must + // guarantee consistency between `object`, `elements_kind` and `elements` + // through other means (store/load order? locks? storing elements_kind in + // elements.map?). + STATIC_ASSERT(IsSerializedRef<JSObject>()); + + base::Optional<FixedArrayBaseRef> maybe_elements_ref = elements(); + if (!maybe_elements_ref.has_value()) { + TRACE_BROKER_MISSING(broker(), "JSObject::elements" << *this); + return {}; + } + + FixedArrayBaseRef elements_ref = maybe_elements_ref.value(); + ElementsKind elements_kind = GetElementsKind(); + + DCHECK_LE(index, JSObject::kMaxElementIndex); + + // See also ElementsAccessorBase::GetMaxIndex. + if (IsJSArray()) { + // For JSArrays we additionally need to check against JSArray::length. + // Length_unsafe is safe to use in this case since: + // - GetOwnConstantElement only detects a constant for JSArray holders if + // the array is frozen/sealed. + // - Frozen/sealed arrays can't change length. + // - We've already seen a map with frozen/sealed elements_kinds (above); + // - The release-load of that map ensures we read the newest value + // of `length` below. + uint32_t array_length; + if (!AsJSArray().length_unsafe().object()->ToArrayLength(&array_length)) { + return {}; + } + if (index >= array_length) return {}; + } + + Object maybe_element; + auto result = ConcurrentLookupIterator::TryGetOwnConstantElement( + &maybe_element, broker()->isolate(), broker()->local_isolate(), + *object(), *elements_ref.object(), elements_kind, index); + + if (result == ConcurrentLookupIterator::kGaveUp) { + TRACE_BROKER_MISSING(broker(), "JSObject::GetOwnConstantElement on " + << *this << " at index " << index); + return {}; + } else if (result == ConcurrentLookupIterator::kNotPresent) { + return {}; + } + + DCHECK_EQ(result, ConcurrentLookupIterator::kPresent); + return MakeRef(broker(), maybe_element); + } else { + ObjectData* element = + data()->AsJSObject()->GetOwnConstantElement(broker(), index, policy); + if (element == nullptr) return base::nullopt; + return ObjectRef(broker(), element); + } +} + +base::Optional<ObjectRef> JSObjectRef::GetOwnFastDataProperty( + Representation field_representation, FieldIndex index, + SerializationPolicy policy) const { + if (data_->should_access_heap()) { + return GetOwnFastDataPropertyFromHeap(broker(), + Handle<JSObject>::cast(object()), + field_representation, index); + } + ObjectData* property = data()->AsJSObject()->GetOwnFastDataProperty( + broker(), field_representation, index, policy); + if (property == nullptr) return base::nullopt; + return ObjectRef(broker(), property); +} + +ObjectRef JSObjectRef::GetOwnDictionaryProperty( + InternalIndex index, SerializationPolicy policy) const { + CHECK(index.is_found()); + if (data_->should_access_heap()) { + return GetOwnDictionaryPropertyFromHeap( + broker(), Handle<JSObject>::cast(object()), index); + } + ObjectData* property = + data()->AsJSObject()->GetOwnDictionaryProperty(broker(), index, policy); + CHECK_NE(property, nullptr); + return ObjectRef(broker(), property); +} + +ObjectRef JSArrayRef::GetBoilerplateLength() const { + // Safe to read concurrently because: + // - boilerplates are immutable after initialization. + // - boilerplates are published into the feedback vector. + return length_unsafe(); +} + +ObjectRef JSArrayRef::length_unsafe() const { + if (data_->should_access_heap() || broker()->is_concurrent_inlining()) { + return MakeRef(broker(), + object()->length(broker()->isolate(), kRelaxedLoad)); + } else { + return ObjectRef{broker(), data()->AsJSArray()->length()}; + } +} + +base::Optional<ObjectRef> JSArrayRef::GetOwnCowElement( + FixedArrayBaseRef elements_ref, uint32_t index, + SerializationPolicy policy) const { + if (data_->should_access_heap() || broker()->is_concurrent_inlining()) { + // `elements` are currently still serialized as members of JSObjectRef. + // TODO(jgruber,v8:7790): Remove the elements equality DCHECK below once + // JSObject is no longer serialized. + static_assert(std::is_base_of<JSObject, JSArray>::value, ""); + STATIC_ASSERT(IsSerializedRef<JSObject>()); + + // The elements_ref is passed in by callers to make explicit that it is + // also used outside of this function, and must match the `elements` used + // inside this function. + DCHECK(elements_ref.equals(elements().value())); + + // Due to concurrency, the kind read here may not be consistent with + // `elements_ref`. But consistency is guaranteed at runtime due to the + // `elements` equality check in the caller. + ElementsKind elements_kind = GetElementsKind(); + + // We only inspect fixed COW arrays, which may only occur for fast + // smi/objects elements kinds. + if (!IsSmiOrObjectElementsKind(elements_kind)) return {}; + DCHECK(IsFastElementsKind(elements_kind)); + if (!elements_ref.map().IsFixedCowArrayMap()) return {}; + + // As the name says, the `length` read here is unsafe and may not match + // `elements`. We rely on the invariant that any `length` change will + // also result in an `elements` change to make this safe. The `elements` + // equality check in the caller thus also guards the value of `length`. + ObjectRef length_ref = length_unsafe(); + + // Likewise we only deal with smi lengths. + if (!length_ref.IsSmi()) return {}; + + base::Optional<Object> result = + ConcurrentLookupIterator::TryGetOwnCowElement( + broker()->isolate(), *elements_ref.AsFixedArray().object(), + elements_kind, length_ref.AsSmi(), index); + if (!result.has_value()) return {}; + + return MakeRef(broker(), result.value()); + } else { + DCHECK(!data_->should_access_heap()); + DCHECK(!broker()->is_concurrent_inlining()); + + // Just to clarify that `elements_ref` is not used on this path. + // GetOwnElement accesses the serialized `elements` field on its own. + USE(elements_ref); + + if (!elements().value().map().IsFixedCowArrayMap()) return base::nullopt; + + ObjectData* element = + data()->AsJSArray()->GetOwnElement(broker(), index, policy); + if (element == nullptr) return base::nullopt; + return ObjectRef(broker(), element); + } +} + +base::Optional<CellRef> SourceTextModuleRef::GetCell(int cell_index) const { + if (data_->should_access_heap()) { + return TryMakeRef(broker(), object()->GetCell(cell_index)); + } + ObjectData* cell = + data()->AsSourceTextModule()->GetCell(broker(), cell_index); + if (cell == nullptr) return base::nullopt; + return CellRef(broker(), cell); +} + +base::Optional<ObjectRef> SourceTextModuleRef::import_meta() const { + if (data_->should_access_heap()) { + return TryMakeRef(broker(), object()->import_meta(kAcquireLoad)); + } + return ObjectRef(broker(), + data()->AsSourceTextModule()->GetImportMeta(broker())); +} + +ObjectRef::ObjectRef(JSHeapBroker* broker, Handle<Object> object, + bool check_type) + : broker_(broker) { + CHECK_NE(broker->mode(), JSHeapBroker::kRetired); + data_ = broker->GetOrCreateData(object); +} + +namespace { + +OddballType GetOddballType(Isolate* isolate, Map map) { + if (map.instance_type() != ODDBALL_TYPE) { + return OddballType::kNone; + } + ReadOnlyRoots roots(isolate); + if (map == roots.undefined_map()) { + return OddballType::kUndefined; + } + if (map == roots.null_map()) { + return OddballType::kNull; + } + if (map == roots.boolean_map()) { + return OddballType::kBoolean; + } + if (map == roots.the_hole_map()) { + return OddballType::kHole; + } + if (map == roots.uninitialized_map()) { + return OddballType::kUninitialized; + } + DCHECK(map == roots.termination_exception_map() || + map == roots.arguments_marker_map() || + map == roots.optimized_out_map() || map == roots.stale_register_map()); + return OddballType::kOther; +} + +} // namespace + +HeapObjectType HeapObjectRef::GetHeapObjectType() const { + if (data_->should_access_heap()) { + Map map = Handle<HeapObject>::cast(object())->map(); + HeapObjectType::Flags flags(0); + if (map.is_undetectable()) flags |= HeapObjectType::kUndetectable; + if (map.is_callable()) flags |= HeapObjectType::kCallable; + return HeapObjectType(map.instance_type(), flags, + GetOddballType(broker()->isolate(), map)); + } + HeapObjectType::Flags flags(0); + if (map().is_undetectable()) flags |= HeapObjectType::kUndetectable; + if (map().is_callable()) flags |= HeapObjectType::kCallable; + return HeapObjectType(map().instance_type(), flags, map().oddball_type()); +} + +base::Optional<JSObjectRef> AllocationSiteRef::boilerplate() const { + if (data_->should_access_heap()) { + return TryMakeRef(broker(), object()->boilerplate(kAcquireLoad)); + } + ObjectData* boilerplate = data()->AsAllocationSite()->boilerplate(); + if (boilerplate) { + return JSObjectRef(broker(), boilerplate); + } else { + return base::nullopt; + } +} + +ElementsKind JSObjectRef::GetElementsKind() const { + return map().elements_kind(); +} + +base::Optional<FixedArrayBaseRef> JSObjectRef::elements() const { + if (data_->should_access_heap()) { + return TryMakeRef(broker(), object()->elements()); + } + const JSObjectData* d = data()->AsJSObject(); + if (!d->serialized_elements()) { + TRACE(broker(), "'elements' on " << this); + return base::nullopt; + } + return FixedArrayBaseRef(broker(), d->elements()); +} + +int FixedArrayBaseRef::length() const { + IF_ACCESS_FROM_HEAP_C(length); + return data()->AsFixedArrayBase()->length(); +} + +PropertyDetails DescriptorArrayRef::GetPropertyDetails( + InternalIndex descriptor_index) const { + if (data_->should_access_heap()) { + return object()->GetDetails(descriptor_index); + } + return data()->AsDescriptorArray()->GetPropertyDetails(descriptor_index); +} + +NameRef DescriptorArrayRef::GetPropertyKey( + InternalIndex descriptor_index) const { + if (data_->should_access_heap()) { + NameRef result = MakeRef(broker(), object()->GetKey(descriptor_index)); + CHECK(result.IsUniqueName()); + return result; + } + return NameRef(broker(), + data()->AsDescriptorArray()->GetPropertyKey(descriptor_index)); +} + +ObjectRef DescriptorArrayRef::GetFieldType( + InternalIndex descriptor_index) const { + if (data_->should_access_heap()) { + return MakeRef<Object>(broker(), object()->GetFieldType(descriptor_index)); + } + return ObjectRef(broker(), + data()->AsDescriptorArray()->GetFieldType(descriptor_index)); +} + +base::Optional<ObjectRef> DescriptorArrayRef::GetStrongValue( + InternalIndex descriptor_index) const { + if (data_->should_access_heap()) { + HeapObject heap_object; + if (!object() + ->GetValue(descriptor_index) + .GetHeapObjectIfStrong(&heap_object)) { + return {}; + } + // Since the descriptors in the descriptor array can be changed in-place + // via DescriptorArray::Replace, we might get a value that we haven't seen + // before. + return TryMakeRef(broker(), heap_object); + } + ObjectData* value = + data()->AsDescriptorArray()->GetStrongValue(descriptor_index); + if (!value) return base::nullopt; + return ObjectRef(broker(), value); +} + +base::Optional<SharedFunctionInfoRef> FeedbackCellRef::shared_function_info() + const { + if (value()) { + FeedbackVectorRef vector = *value(); + if (vector.serialized()) { + return vector.shared_function_info(); + } + } + return base::nullopt; +} + +void FeedbackVectorRef::Serialize() { + if (data_->should_access_heap()) return; + CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); + data()->AsFeedbackVector()->Serialize(broker()); +} + +bool FeedbackVectorRef::serialized() const { + if (data_->should_access_heap()) return true; + return data()->AsFeedbackVector()->serialized(); +} + +bool NameRef::IsUniqueName() const { + // Must match Name::IsUniqueName. + return IsInternalizedString() || IsSymbol(); +} + +void RegExpBoilerplateDescriptionRef::Serialize() { + if (data_->should_access_heap()) return; + CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); + HeapObjectRef::data()->AsRegExpBoilerplateDescription()->Serialize(broker()); +} + +Handle<Object> ObjectRef::object() const { +#ifdef DEBUG + if (broker()->mode() == JSHeapBroker::kSerialized && + data_->used_status == ObjectData::Usage::kUnused) { + data_->used_status = ObjectData::Usage::kOnlyIdentityUsed; + } +#endif // DEBUG + return data_->object(); +} + +#ifdef DEBUG +#define DEF_OBJECT_GETTER(T, ...) \ + Handle<T> T##Ref::object() const { \ + if (broker()->mode() == JSHeapBroker::kSerialized && \ + data_->used_status == ObjectData::Usage::kUnused) { \ + data_->used_status = ObjectData::Usage::kOnlyIdentityUsed; \ + } \ + return Handle<T>(reinterpret_cast<Address*>(data_->object().address())); \ + } +#else +#define DEF_OBJECT_GETTER(T, ...) \ + Handle<T> T##Ref::object() const { \ + return Handle<T>(reinterpret_cast<Address*>(data_->object().address())); \ + } +#endif // DEBUG + +HEAP_BROKER_OBJECT_LIST(DEF_OBJECT_GETTER) +#undef DEF_OBJECT_GETTER + +JSHeapBroker* ObjectRef::broker() const { return broker_; } + +ObjectData* ObjectRef::data() const { + switch (broker()->mode()) { + case JSHeapBroker::kDisabled: + CHECK_NE(data_->kind(), kSerializedHeapObject); + return data_; + case JSHeapBroker::kSerializing: + CHECK_NE(data_->kind(), kUnserializedHeapObject); + return data_; + case JSHeapBroker::kSerialized: +#ifdef DEBUG + data_->used_status = ObjectData::Usage::kDataUsed; +#endif // DEBUG + CHECK_NE(data_->kind(), kUnserializedHeapObject); + return data_; + case JSHeapBroker::kRetired: + UNREACHABLE(); + } +} + +Reduction NoChangeBecauseOfMissingData(JSHeapBroker* broker, + const char* function, int line) { + TRACE_MISSING(broker, "data in function " << function << " at line " << line); + return AdvancedReducer::NoChange(); +} + +NativeContextData::NativeContextData(JSHeapBroker* broker, ObjectData** storage, + Handle<NativeContext> object) + : ContextData(broker, storage, object), + state_(State::kUnserialized), + function_maps_(broker->zone()) {} + +void NativeContextData::Serialize(JSHeapBroker* broker) { + if (state_ != State::kUnserialized) return; + state_ = State::kSerializedOnMainThread; + + TraceScope tracer(broker, this, "NativeContextData::Serialize"); + Handle<NativeContext> context = Handle<NativeContext>::cast(object()); + +#define SERIALIZE_MEMBER(type, name) \ + DCHECK_NULL(name##_); \ + name##_ = broker->GetOrCreateData(context->name()); \ + if (!name##_->should_access_heap()) { \ + if (name##_->IsMap() && \ + !InstanceTypeChecker::IsContext(name##_->AsMap()->instance_type())) { \ + name##_->AsMap()->SerializeConstructor(broker); \ + } \ + if (name##_->IsJSFunction()) { \ + name##_->AsJSFunction()->Serialize(broker); \ + } \ + } + BROKER_COMPULSORY_NATIVE_CONTEXT_FIELDS(SERIALIZE_MEMBER) + if (!broker->is_isolate_bootstrapping()) { + BROKER_OPTIONAL_NATIVE_CONTEXT_FIELDS(SERIALIZE_MEMBER) + } +#undef SERIALIZE_MEMBER + + if (!bound_function_with_constructor_map_->should_access_heap()) { + bound_function_with_constructor_map_->AsMap()->SerializePrototype(broker); + } + if (!bound_function_without_constructor_map_->should_access_heap()) { + bound_function_without_constructor_map_->AsMap()->SerializePrototype( + broker); + } + + scope_info_ = broker->GetOrCreateData(context->scope_info()); +} + +void NativeContextData::SerializeOnBackground(JSHeapBroker* broker) { + if (state_ == State::kFullySerialized) return; + DCHECK_EQ(state_, State::kSerializedOnMainThread); + state_ = State::kSerializedOnMainThread; + + UnparkedScopeIfNeeded unparked_scope(broker); + TraceScope tracer(broker, this, "NativeContextData::SerializeOnBackground"); + Handle<NativeContext> context = Handle<NativeContext>::cast(object()); + +#define SERIALIZE_MEMBER(type, name) \ + DCHECK_NULL(name##_); \ + name##_ = broker->GetOrCreateData(context->name(kAcquireLoad), \ + kAssumeMemoryFence); \ + if (!name##_->should_access_heap()) { \ + DCHECK(!name##_->IsJSFunction()); \ + } + BROKER_COMPULSORY_BACKGROUND_NATIVE_CONTEXT_FIELDS(SERIALIZE_MEMBER) + if (!broker->is_isolate_bootstrapping()) { + BROKER_OPTIONAL_BACKGROUND_NATIVE_CONTEXT_FIELDS(SERIALIZE_MEMBER) + } +#undef SERIALIZE_MEMBER + + DCHECK(function_maps_.empty()); + int const first = Context::FIRST_FUNCTION_MAP_INDEX; + int const last = Context::LAST_FUNCTION_MAP_INDEX; + function_maps_.reserve(last + 1 - first); + for (int i = first; i <= last; ++i) { + function_maps_.push_back(broker->GetOrCreateData( + context->get(i, kAcquireLoad), kAssumeMemoryFence)); + } +} + +void JSFunctionRef::Serialize() { + if (data_->should_access_heap()) return; + CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); + data()->AsJSFunction()->Serialize(broker()); +} + +void JSFunctionRef::SerializeCodeAndFeedback() { + if (data_->should_access_heap()) return; + CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); + data()->AsJSFunction()->SerializeCodeAndFeedback(broker()); +} + +bool JSBoundFunctionRef::serialized() const { + if (data_->should_access_heap()) return true; + if (data_->AsJSBoundFunction()->serialized()) return true; + TRACE_BROKER_MISSING(broker(), "data for JSBoundFunction " << this); + return false; +} + +bool JSFunctionRef::serialized() const { + if (data_->should_access_heap()) return true; + if (data_->AsJSFunction()->serialized()) return true; + TRACE_BROKER_MISSING(broker(), "data for JSFunction " << this); + return false; +} + +bool JSFunctionRef::serialized_code_and_feedback() const { + if (data_->should_access_heap()) return true; + return data()->AsJSFunction()->serialized_code_and_feedback(); +} + +CodeRef JSFunctionRef::code() const { + if (data_->should_access_heap() || broker()->is_concurrent_inlining()) { + return MakeRefAssumeMemoryFence(broker(), object()->code(kAcquireLoad)); + } + + return CodeRef(broker(), ObjectRef::data()->AsJSFunction()->code()); +} + +void SharedFunctionInfoRef::SerializeFunctionTemplateInfo() { + if (data_->should_access_heap()) return; + CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); + data()->AsSharedFunctionInfo()->SerializeFunctionTemplateInfo(broker()); +} + +void SharedFunctionInfoRef::SerializeScopeInfoChain() { + if (data_->should_access_heap()) return; + CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); + data()->AsSharedFunctionInfo()->SerializeScopeInfoChain(broker()); +} + +base::Optional<FunctionTemplateInfoRef> +SharedFunctionInfoRef::function_template_info() const { + if (data_->should_access_heap()) { + if (!object()->IsApiFunction()) return {}; + return TryMakeRef(broker(), FunctionTemplateInfo::cast( + object()->function_data(kAcquireLoad))); + } + ObjectData* function_template_info = + data()->AsSharedFunctionInfo()->function_template_info(); + if (!function_template_info) return base::nullopt; + return FunctionTemplateInfoRef(broker(), function_template_info); +} + +int SharedFunctionInfoRef::context_header_size() const { + IF_ACCESS_FROM_HEAP_C(scope_info().ContextHeaderLength); + return data()->AsSharedFunctionInfo()->context_header_size(); +} + +ScopeInfoRef SharedFunctionInfoRef::scope_info() const { + if (data_->should_access_heap()) { + return MakeRef(broker(), object()->scope_info()); + } + return ScopeInfoRef(broker(), data()->AsSharedFunctionInfo()->scope_info()); +} + +void JSObjectRef::SerializeObjectCreateMap() { + if (data_->should_access_heap()) return; + CHECK_IMPLIES(!FLAG_turbo_concurrent_get_property_access_info, + broker()->mode() == JSHeapBroker::kSerializing); + data()->AsJSObject()->SerializeObjectCreateMap(broker()); +} + +bool MapRef::TrySerializeOwnDescriptor(InternalIndex descriptor_index) { + CHECK_LT(descriptor_index.as_int(), NumberOfOwnDescriptors()); + if (data_->should_access_heap()) return true; + CHECK_IMPLIES(!FLAG_turbo_concurrent_get_property_access_info, + broker()->mode() == JSHeapBroker::kSerializing); + return data()->AsMap()->TrySerializeOwnDescriptor(broker(), descriptor_index); +} + +void MapRef::SerializeOwnDescriptor(InternalIndex descriptor_index) { + CHECK(TrySerializeOwnDescriptor(descriptor_index)); +} + +bool MapRef::serialized_own_descriptor(InternalIndex descriptor_index) const { + CHECK_LT(descriptor_index.as_int(), NumberOfOwnDescriptors()); + if (data_->should_access_heap()) return true; + ObjectData* maybe_desc_array_data = data()->AsMap()->instance_descriptors(); + if (!maybe_desc_array_data) return false; + if (maybe_desc_array_data->should_access_heap()) return true; + DescriptorArrayData* desc_array_data = + maybe_desc_array_data->AsDescriptorArray(); + return desc_array_data->serialized_descriptor(descriptor_index); +} + +void MapRef::SerializeBackPointer() { + if (data_->should_access_heap()) return; + CHECK_IMPLIES(!FLAG_turbo_concurrent_get_property_access_info, + broker()->mode() == JSHeapBroker::kSerializing); + data()->AsMap()->SerializeBackPointer(broker()); +} + +bool MapRef::TrySerializePrototype() { + if (data_->should_access_heap()) return true; + CHECK_IMPLIES(!FLAG_turbo_concurrent_get_property_access_info, + broker()->mode() == JSHeapBroker::kSerializing); + return data()->AsMap()->TrySerializePrototype(broker()); +} + +void MapRef::SerializePrototype() { CHECK(TrySerializePrototype()); } + +void SourceTextModuleRef::Serialize() { + if (data_->should_access_heap()) return; + CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); + data()->AsSourceTextModule()->Serialize(broker()); +} + +void NativeContextRef::Serialize() { + if (data_->should_access_heap()) return; + CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); + data()->AsNativeContext()->Serialize(broker()); +} + +void NativeContextRef::SerializeOnBackground() { + if (data_->should_access_heap()) return; + CHECK(broker()->mode() == JSHeapBroker::kSerializing || + broker()->mode() == JSHeapBroker::kSerialized); + data()->AsNativeContext()->SerializeOnBackground(broker()); +} + +void JSTypedArrayRef::Serialize() { + if (data_->should_access_heap() || broker()->is_concurrent_inlining()) { + // Even if the typed array object itself is no longer serialized (besides + // the JSObject parts), the `buffer` field still is and thus we need to + // make sure to visit it. + // TODO(jgruber,v8:7790): Remove once JSObject is no longer serialized. + static_assert( + std::is_base_of<JSObject, decltype(object()->buffer())>::value, ""); + STATIC_ASSERT(IsSerializedRef<JSObject>()); + MakeRef<JSObject>(broker(), object()->buffer()); + } else { + CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); + data()->AsJSTypedArray()->Serialize(broker()); + } +} + +bool JSTypedArrayRef::serialized() const { + if (data_->should_access_heap()) return true; + if (broker()->is_concurrent_inlining()) return true; + if (data_->AsJSTypedArray()->serialized()) return true; + TRACE_BROKER_MISSING(broker(), "data for JSTypedArray " << this); + return false; +} + +bool JSBoundFunctionRef::Serialize() { + if (data_->should_access_heap()) return true; + CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); + return data()->AsJSBoundFunction()->Serialize(broker()); +} + +bool PropertyCellRef::Serialize() const { + if (data_->should_access_heap()) return true; + CHECK(broker()->mode() == JSHeapBroker::kSerializing || + broker()->mode() == JSHeapBroker::kSerialized); + return data()->AsPropertyCell()->Serialize(broker()); +} + +void FunctionTemplateInfoRef::SerializeCallCode() { + if (data_->should_access_heap()) { + CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); + // CallHandlerInfo::data may still hold a serialized heap object, so we + // have to make the broker aware of it. + // TODO(v8:7790): Remove this case once ObjectRef is never serialized. + Handle<HeapObject> call_code(object()->call_code(kAcquireLoad), + broker()->isolate()); + if (call_code->IsCallHandlerInfo()) { + broker()->GetOrCreateData( + Handle<CallHandlerInfo>::cast(call_code)->data()); + } + return; + } + CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); + data()->AsFunctionTemplateInfo()->SerializeCallCode(broker()); +} + +base::Optional<PropertyCellRef> JSGlobalObjectRef::GetPropertyCell( + NameRef const& name, SerializationPolicy policy) const { + if (data_->should_access_heap()) { + return GetPropertyCellFromHeap(broker(), name.object()); + } + ObjectData* property_cell_data = data()->AsJSGlobalObject()->GetPropertyCell( + broker(), name.data(), policy); + if (property_cell_data == nullptr) return base::nullopt; + return PropertyCellRef(broker(), property_cell_data); +} + +std::ostream& operator<<(std::ostream& os, const ObjectRef& ref) { + if (!FLAG_concurrent_recompilation) { + // We cannot be in a background thread so it's safe to read the heap. + AllowHandleDereference allow_handle_dereference; + return os << ref.data() << " {" << ref.object() << "}"; + } else if (ref.data_->should_access_heap()) { + return os << ref.data() << " {" << ref.object() << "}"; + } else { + return os << ref.data(); + } +} + +unsigned CodeRef::GetInlinedBytecodeSize() const { + if (data_->should_access_heap()) { + unsigned value = object()->inlined_bytecode_size(); + if (value > 0) { + // Don't report inlined bytecode size if the code object was already + // deoptimized. + value = object()->marked_for_deoptimization() ? 0 : value; + } + return value; + } + + return ObjectRef::data()->AsCode()->inlined_bytecode_size(); +} + +#undef BIMODAL_ACCESSOR +#undef BIMODAL_ACCESSOR_B +#undef BIMODAL_ACCESSOR_C +#undef IF_ACCESS_FROM_HEAP +#undef IF_ACCESS_FROM_HEAP_C +#undef TRACE +#undef TRACE_MISSING + +} // namespace compiler +} // namespace internal +} // namespace v8 diff --git a/deps/v8/src/compiler/heap-refs.h b/deps/v8/src/compiler/heap-refs.h index 9d12553766..d1f40bbedf 100644 --- a/deps/v8/src/compiler/heap-refs.h +++ b/deps/v8/src/compiler/heap-refs.h @@ -40,6 +40,13 @@ struct WasmModule; namespace compiler { +class CompilationDependencies; +struct FeedbackSource; +class JSHeapBroker; +class ObjectData; +class PerIsolateCompilerCache; +class PropertyAccessInfo; + // Whether we are loading a property or storing to a property. // For a store during literal creation, do not walk up the prototype chain. enum class AccessMode { kLoad, kStore, kStoreInLiteral, kHas }; @@ -60,111 +67,100 @@ enum class OddballType : uint8_t { kOther // Oddball, but none of the above. }; -// This list is sorted such that subtypes appear before their supertypes. -// This list must not contain a type if it doesn't contain all of its subtypes -// too. For example, it CANNOT contain FixedArrayBase if it doesn't contain -// FixedDoubleArray, BytecodeArray and FixedArray. -// DO NOT VIOLATE THESE TWO PROPERTIES! -// Classes on this list will skip serialization when -// FLAG_turbo_direct_heap_access is on. Otherwise, they might get serialized. -#define HEAP_BROKER_NEVER_SERIALIZED_OBJECT_LIST(V) \ - /* Subtypes of FixedArray */ \ - V(ObjectBoilerplateDescription) \ - V(ScopeInfo) \ - /* Subtypes of String */ \ - V(InternalizedString) \ - /* Subtypes of FixedArrayBase */ \ - V(BytecodeArray) \ - /* Subtypes of Name */ \ - V(String) \ - V(Symbol) \ - /* Subtypes of HeapObject */ \ - V(AccessorInfo) \ - V(ArrayBoilerplateDescription) \ - V(CallHandlerInfo) \ - V(Cell) \ - V(Code) \ - V(DescriptorArray) \ - V(FeedbackCell) \ - V(FeedbackVector) \ - V(FunctionTemplateInfo) \ - V(Name) \ - V(RegExpBoilerplateDescription) \ - V(SharedFunctionInfo) \ - V(TemplateObjectDescription) +enum class RefSerializationKind { + // Will skip serialization when --concurrent-inlining is on. Otherwise, they + // might get serialized. (The cake is a lie.) + kNeverSerialized, + // Can be serialized on demand from the background thread. + kBackgroundSerialized, + kSerialized, +}; // This list is sorted such that subtypes appear before their supertypes. // DO NOT VIOLATE THIS PROPERTY! -// Classes in this list behave like serialized classes, but they allow lazy -// serialization from background threads where this is safe (e.g. for objects -// that are immutable and fully initialized once visible). Pass -// ObjectRef::BackgroundSerialization::kAllowed to the ObjectRef constructor -// for objects where serialization from the background thread is safe. -#define HEAP_BROKER_POSSIBLY_BACKGROUND_SERIALIZED_OBJECT_LIST(V) \ - /* Subtypes of HeapObject */ \ - V(BigInt) \ - V(HeapNumber) \ - V(Map) +#define HEAP_BROKER_OBJECT_LIST(V) \ + /* Subtypes of JSObject */ \ + V(JSArray, RefSerializationKind::kSerialized) \ + V(JSBoundFunction, RefSerializationKind::kSerialized) \ + V(JSDataView, RefSerializationKind::kSerialized) \ + V(JSFunction, RefSerializationKind::kSerialized) \ + V(JSGlobalObject, RefSerializationKind::kSerialized) \ + V(JSGlobalProxy, RefSerializationKind::kSerialized) \ + V(JSTypedArray, RefSerializationKind::kSerialized) \ + /* Subtypes of Context */ \ + V(NativeContext, RefSerializationKind::kSerialized) \ + /* Subtypes of FixedArray */ \ + V(ObjectBoilerplateDescription, RefSerializationKind::kNeverSerialized) \ + V(ScriptContextTable, RefSerializationKind::kBackgroundSerialized) \ + /* Subtypes of String */ \ + V(InternalizedString, RefSerializationKind::kNeverSerialized) \ + /* Subtypes of FixedArrayBase */ \ + V(BytecodeArray, RefSerializationKind::kNeverSerialized) \ + V(FixedArray, RefSerializationKind::kBackgroundSerialized) \ + V(FixedDoubleArray, RefSerializationKind::kNeverSerialized) \ + /* Subtypes of Name */ \ + V(String, RefSerializationKind::kNeverSerialized) \ + V(Symbol, RefSerializationKind::kNeverSerialized) \ + /* Subtypes of JSReceiver */ \ + V(JSObject, RefSerializationKind::kSerialized) \ + /* Subtypes of HeapObject */ \ + V(AccessorInfo, RefSerializationKind::kNeverSerialized) \ + V(AllocationSite, RefSerializationKind::kSerialized) \ + V(ArrayBoilerplateDescription, RefSerializationKind::kNeverSerialized) \ + V(BigInt, RefSerializationKind::kBackgroundSerialized) \ + V(CallHandlerInfo, RefSerializationKind::kNeverSerialized) \ + V(Cell, RefSerializationKind::kNeverSerialized) \ + V(Code, RefSerializationKind::kNeverSerialized) \ + V(Context, RefSerializationKind::kSerialized) \ + V(DescriptorArray, RefSerializationKind::kNeverSerialized) \ + V(FeedbackCell, RefSerializationKind::kNeverSerialized) \ + V(FeedbackVector, RefSerializationKind::kNeverSerialized) \ + V(FixedArrayBase, RefSerializationKind::kBackgroundSerialized) \ + V(FunctionTemplateInfo, RefSerializationKind::kNeverSerialized) \ + V(HeapNumber, RefSerializationKind::kNeverSerialized) \ + V(JSReceiver, RefSerializationKind::kBackgroundSerialized) \ + V(Map, RefSerializationKind::kBackgroundSerialized) \ + V(Name, RefSerializationKind::kNeverSerialized) \ + V(PropertyCell, RefSerializationKind::kBackgroundSerialized) \ + V(RegExpBoilerplateDescription, RefSerializationKind::kNeverSerialized) \ + V(ScopeInfo, RefSerializationKind::kNeverSerialized) \ + V(SharedFunctionInfo, RefSerializationKind::kNeverSerialized) \ + V(SourceTextModule, RefSerializationKind::kNeverSerialized) \ + V(TemplateObjectDescription, RefSerializationKind::kNeverSerialized) \ + /* Subtypes of Object */ \ + V(HeapObject, RefSerializationKind::kBackgroundSerialized) + +#define FORWARD_DECL(Name, ...) class Name##Ref; +HEAP_BROKER_OBJECT_LIST(FORWARD_DECL) +#undef FORWARD_DECL -// This list is sorted such that subtypes appear before their supertypes. -// DO NOT VIOLATE THIS PROPERTY! -// Types in this list can be serialized on demand from the background thread. -#define HEAP_BROKER_BACKGROUND_SERIALIZED_OBJECT_LIST(V) \ - /* Subtypes of HeapObject */ \ - V(PropertyCell) +class ObjectRef; -// This list is sorted such that subtypes appear before their supertypes. -// DO NOT VIOLATE THIS PROPERTY! -#define HEAP_BROKER_SERIALIZED_OBJECT_LIST(V) \ - /* Subtypes of JSObject */ \ - V(JSArray) \ - V(JSBoundFunction) \ - V(JSDataView) \ - V(JSFunction) \ - V(JSGlobalObject) \ - V(JSGlobalProxy) \ - V(JSTypedArray) \ - /* Subtypes of Context */ \ - V(NativeContext) \ - /* Subtypes of FixedArray */ \ - V(Context) \ - V(ScriptContextTable) \ - /* Subtypes of FixedArrayBase */ \ - V(FixedArray) \ - V(FixedDoubleArray) \ - /* Subtypes of JSReceiver */ \ - V(JSObject) \ - /* Subtypes of HeapObject */ \ - V(AllocationSite) \ - V(FixedArrayBase) \ - V(JSReceiver) \ - V(SourceTextModule) \ - /* Subtypes of Object */ \ - V(HeapObject) +template <class T> +struct ref_traits; -class CompilationDependencies; -struct FeedbackSource; -class JSHeapBroker; -class ObjectData; -class PerIsolateCompilerCache; -class PropertyAccessInfo; -#define FORWARD_DECL(Name) class Name##Ref; -HEAP_BROKER_SERIALIZED_OBJECT_LIST(FORWARD_DECL) -HEAP_BROKER_POSSIBLY_BACKGROUND_SERIALIZED_OBJECT_LIST(FORWARD_DECL) -HEAP_BROKER_BACKGROUND_SERIALIZED_OBJECT_LIST(FORWARD_DECL) -HEAP_BROKER_NEVER_SERIALIZED_OBJECT_LIST(FORWARD_DECL) -#undef FORWARD_DECL +#define REF_TRAITS(Name, Kind) \ + template <> \ + struct ref_traits<Name> { \ + using ref_type = Name##Ref; \ + static constexpr RefSerializationKind ref_serialization_kind = Kind; \ + }; +HEAP_BROKER_OBJECT_LIST(REF_TRAITS) +#undef REF_TYPE + +template <> +struct ref_traits<Object> { + using ref_type = ObjectRef; + // Note: While a bit awkward, this artificial ref serialization kind value is + // okay: smis are never-serialized, and we never create raw non-smi + // ObjectRefs (they would at least be HeapObjectRefs instead). + static constexpr RefSerializationKind ref_serialization_kind = + RefSerializationKind::kNeverSerialized; +}; class V8_EXPORT_PRIVATE ObjectRef { public: - enum class BackgroundSerialization { - kDisallowed, - kAllowed, - }; - ObjectRef(JSHeapBroker* broker, Handle<Object> object, - BackgroundSerialization background_serialization = - BackgroundSerialization::kDisallowed, bool check_type = true); ObjectRef(JSHeapBroker* broker, ObjectData* data, bool check_type = true) : data_(data), broker_(broker) { @@ -178,25 +174,19 @@ class V8_EXPORT_PRIVATE ObjectRef { bool IsSmi() const; int AsSmi() const; -#define HEAP_IS_METHOD_DECL(Name) bool Is##Name() const; - HEAP_BROKER_SERIALIZED_OBJECT_LIST(HEAP_IS_METHOD_DECL) - HEAP_BROKER_POSSIBLY_BACKGROUND_SERIALIZED_OBJECT_LIST(HEAP_IS_METHOD_DECL) - HEAP_BROKER_BACKGROUND_SERIALIZED_OBJECT_LIST(HEAP_IS_METHOD_DECL) - HEAP_BROKER_NEVER_SERIALIZED_OBJECT_LIST(HEAP_IS_METHOD_DECL) +#define HEAP_IS_METHOD_DECL(Name, ...) bool Is##Name() const; + HEAP_BROKER_OBJECT_LIST(HEAP_IS_METHOD_DECL) #undef HEAP_IS_METHOD_DECL -#define HEAP_AS_METHOD_DECL(Name) Name##Ref As##Name() const; - HEAP_BROKER_SERIALIZED_OBJECT_LIST(HEAP_AS_METHOD_DECL) - HEAP_BROKER_POSSIBLY_BACKGROUND_SERIALIZED_OBJECT_LIST(HEAP_AS_METHOD_DECL) - HEAP_BROKER_BACKGROUND_SERIALIZED_OBJECT_LIST(HEAP_AS_METHOD_DECL) - HEAP_BROKER_NEVER_SERIALIZED_OBJECT_LIST(HEAP_AS_METHOD_DECL) +#define HEAP_AS_METHOD_DECL(Name, ...) Name##Ref As##Name() const; + HEAP_BROKER_OBJECT_LIST(HEAP_AS_METHOD_DECL) #undef HEAP_AS_METHOD_DECL bool IsNull() const; bool IsNullOrUndefined() const; bool IsTheHole() const; - bool BooleanValue() const; + base::Optional<bool> TryGetBooleanValue() const; Maybe<double> OddballToNumber() const; Isolate* isolate() const; @@ -272,20 +262,11 @@ class HeapObjectType { // Constructors are carefully defined such that we do a type check on // the outermost Ref class in the inheritance chain only. -#define DEFINE_REF_CONSTRUCTOR(name, base) \ - name##Ref(JSHeapBroker* broker, Handle<Object> object, \ - BackgroundSerialization background_serialization = \ - BackgroundSerialization::kDisallowed, \ - bool check_type = true) \ - : base(broker, object, background_serialization, false) { \ +#define DEFINE_REF_CONSTRUCTOR(Name, Base) \ + Name##Ref(JSHeapBroker* broker, ObjectData* data, bool check_type = true) \ + : Base(broker, data, false) { \ if (check_type) { \ - CHECK(Is##name()); \ - } \ - } \ - name##Ref(JSHeapBroker* broker, ObjectData* data, bool check_type = true) \ - : base(broker, data, false) { \ - if (check_type) { \ - CHECK(Is##name()); \ + CHECK(Is##Name()); \ } \ } @@ -435,6 +416,11 @@ class RegExpBoilerplateDescriptionRef : public HeapObjectRef { int flags() const; }; +// HeapNumberRef is only created for immutable HeapNumbers. Mutable +// HeapNumbers (those owned by in-object or backing store fields with +// representation type Double are not exposed to the compiler through +// HeapNumberRef. Instead, we read their value, and protect that read +// with a field-constness Dependency. class HeapNumberRef : public HeapObjectRef { public: DEFINE_REF_CONSTRUCTOR(HeapNumber, HeapObjectRef) @@ -451,9 +437,9 @@ class ContextRef : public HeapObjectRef { Handle<Context> object() const; // {previous} decrements {depth} by 1 for each previous link successfully - // followed. If {depth} != 0 on function return, then it only got - // partway to the desired depth. If {serialize} is true, then - // {previous} will cache its findings. + // followed. If {depth} != 0 on function return, then it only got partway to + // the desired depth. If {serialize} is true, then {previous} will cache its + // findings (unless concurrent inlining is enabled). ContextRef previous(size_t* depth, SerializationPolicy policy = SerializationPolicy::kAssumeSerialized) const; @@ -464,15 +450,14 @@ class ContextRef : public HeapObjectRef { SerializationPolicy::kAssumeSerialized) const; SourceTextModuleRef GetModule(SerializationPolicy policy) const; - - // We only serialize the ScopeInfo if certain Promise - // builtins are called. - void SerializeScopeInfo(); - base::Optional<ScopeInfoRef> scope_info() const; }; +// TODO(jgruber): Don't serialize NativeContext fields once all refs can be +// created concurrently. + #define BROKER_COMPULSORY_NATIVE_CONTEXT_FIELDS(V) \ V(JSFunction, array_function) \ + V(JSFunction, function_prototype_apply) \ V(JSFunction, boolean_function) \ V(JSFunction, bigint_function) \ V(JSFunction, number_function) \ @@ -532,6 +517,8 @@ class NativeContextRef : public ContextRef { public: DEFINE_REF_CONSTRUCTOR(NativeContext, ContextRef) + bool is_unserialized_heap_object() const; + Handle<NativeContext> object() const; void Serialize(); @@ -556,13 +543,6 @@ class NameRef : public HeapObjectRef { bool IsUniqueName() const; }; -class ScriptContextTableRef : public HeapObjectRef { - public: - DEFINE_REF_CONSTRUCTOR(ScriptContextTable, HeapObjectRef) - - Handle<ScriptContextTable> object() const; -}; - class DescriptorArrayRef : public HeapObjectRef { public: DEFINE_REF_CONSTRUCTOR(DescriptorArray, HeapObjectRef) @@ -701,8 +681,11 @@ class V8_EXPORT_PRIVATE MapRef : public HeapObjectRef { HeapObjectRef GetBackPointer() const; void SerializePrototype(); - bool serialized_prototype() const; - HeapObjectRef prototype() const; + // TODO(neis): We should be able to remove TrySerializePrototype once + // concurrent-inlining is always on. Then we can also change the return type + // of prototype() back to HeapObjectRef. + bool TrySerializePrototype(); + base::Optional<HeapObjectRef> prototype() const; void SerializeForElementLoad(); @@ -711,6 +694,7 @@ class V8_EXPORT_PRIVATE MapRef : public HeapObjectRef { ZoneVector<MapRef>* prototype_maps); // Concerning the underlying instance_descriptors: + bool TrySerializeOwnDescriptor(InternalIndex descriptor_index); void SerializeOwnDescriptor(InternalIndex descriptor_index); bool serialized_own_descriptor(InternalIndex descriptor_index) const; MapRef FindFieldOwner(InternalIndex descriptor_index) const; @@ -754,8 +738,8 @@ class FunctionTemplateInfoRef : public HeapObjectRef { void SerializeCallCode(); base::Optional<CallHandlerInfoRef> call_code() const; - Address c_function() const; - const CFunctionInfo* c_signature() const; + ZoneVector<Address> c_functions() const; + ZoneVector<const CFunctionInfo*> c_signatures() const; HolderLookupResult LookupHolderOfExpectedType( MapRef receiver_map, @@ -779,14 +763,6 @@ class ArrayBoilerplateDescriptionRef : public HeapObjectRef { int constants_elements_length() const; }; -class ObjectBoilerplateDescriptionRef : public HeapObjectRef { - public: - using HeapObjectRef::HeapObjectRef; - Handle<ObjectBoilerplateDescription> object() const; - - int size() const; -}; - class FixedArrayRef : public FixedArrayBaseRef { public: DEFINE_REF_CONSTRUCTOR(FixedArray, FixedArrayBaseRef) @@ -794,6 +770,12 @@ class FixedArrayRef : public FixedArrayBaseRef { Handle<FixedArray> object() const; ObjectRef get(int i) const; + + // As above but may fail if Ref construction is not possible (e.g. for + // serialized types on the background thread). + // TODO(jgruber): Remove once all Ref types are never-serialized or + // background-serialized and can thus be created on background threads. + base::Optional<ObjectRef> TryGet(int i) const; }; class FixedDoubleArrayRef : public FixedArrayBaseRef { @@ -802,7 +784,10 @@ class FixedDoubleArrayRef : public FixedArrayBaseRef { Handle<FixedDoubleArray> object() const; - Float64 get(int i) const; + // Due to 64-bit unaligned reads, only usable for + // immutable-after-initialization FixedDoubleArrays protected by + // acquire-release semantics (such as boilerplate elements). + Float64 GetFromImmutableFixedDoubleArray(int i) const; }; class BytecodeArrayRef : public FixedArrayBaseRef { @@ -826,6 +811,22 @@ class BytecodeArrayRef : public FixedArrayBaseRef { int handler_table_size() const; }; +class ScriptContextTableRef : public FixedArrayRef { + public: + DEFINE_REF_CONSTRUCTOR(ScriptContextTable, FixedArrayRef) + + Handle<ScriptContextTable> object() const; +}; + +class ObjectBoilerplateDescriptionRef : public FixedArrayRef { + public: + DEFINE_REF_CONSTRUCTOR(ObjectBoilerplateDescription, FixedArrayRef) + + Handle<ObjectBoilerplateDescription> object() const; + + int size() const; +}; + class JSArrayRef : public JSObjectRef { public: DEFINE_REF_CONSTRUCTOR(JSArray, JSObjectRef) @@ -965,7 +966,7 @@ class SourceTextModuleRef : public HeapObjectRef { void Serialize(); base::Optional<CellRef> GetCell(int cell_index) const; - ObjectRef import_meta() const; + base::Optional<ObjectRef> import_meta() const; }; class TemplateObjectDescriptionRef : public HeapObjectRef { diff --git a/deps/v8/src/compiler/int64-lowering.cc b/deps/v8/src/compiler/int64-lowering.cc index 706cd7de50..28eb30969c 100644 --- a/deps/v8/src/compiler/int64-lowering.cc +++ b/deps/v8/src/compiler/int64-lowering.cc @@ -392,8 +392,7 @@ void Int64Lowering::LowerNode(Node* node) { if (call_descriptor->GetReturnType(old_index).representation() == MachineRepresentation::kWord64) { Node* high_node = graph()->NewNode( - common()->Projection(new_index + 1), node, - graph()->start()); + common()->Projection(new_index + 1), node, graph()->start()); ReplaceNode(use_node, use_node, high_node); ++new_index; } @@ -684,11 +683,11 @@ void Int64Lowering::LowerNode(Node* node) { ReplaceNode(node, low_node, high_node); break; } - case IrOpcode::kWord64Rol: + case IrOpcode::kWord64RolLowerable: DCHECK(machine()->Word32Rol().IsSupported()); V8_FALLTHROUGH; - case IrOpcode::kWord64Ror: { - DCHECK_EQ(2, node->InputCount()); + case IrOpcode::kWord64RorLowerable: { + DCHECK_EQ(3, node->InputCount()); Node* input = node->InputAt(0); Node* shift = HasReplacementLow(node->InputAt(1)) ? GetReplacementLow(node->InputAt(1)) @@ -721,7 +720,7 @@ void Int64Lowering::LowerNode(Node* node) { auto* op1 = machine()->Word32Shr(); auto* op2 = machine()->Word32Shl(); - bool is_ror = node->opcode() == IrOpcode::kWord64Ror; + bool is_ror = node->opcode() == IrOpcode::kWord64RorLowerable; if (!is_ror) std::swap(op1, op2); Node* low_node = @@ -742,7 +741,7 @@ void Int64Lowering::LowerNode(Node* node) { graph()->NewNode(common()->Int32Constant(0x1F))); } - bool is_ror = node->opcode() == IrOpcode::kWord64Ror; + bool is_ror = node->opcode() == IrOpcode::kWord64RorLowerable; Node* inv_mask = is_ror ? graph()->NewNode( machine()->Word32Xor(), @@ -774,6 +773,7 @@ void Int64Lowering::LowerNode(Node* node) { graph(), common(), graph()->NewNode(machine()->Int32LessThan(), masked_shift6, graph()->NewNode(common()->Int32Constant(32)))); + lt32.Chain(NodeProperties::GetControlInput(node)); // The low word and the high word can be swapped either at the input or // at the output. We swap the inputs so that shift does not have to be @@ -807,13 +807,14 @@ void Int64Lowering::LowerNode(Node* node) { } break; } - case IrOpcode::kWord64Clz: { - DCHECK_EQ(1, node->InputCount()); + case IrOpcode::kWord64ClzLowerable: { + DCHECK_EQ(2, node->InputCount()); Node* input = node->InputAt(0); Diamond d( graph(), common(), graph()->NewNode(machine()->Word32Equal(), GetReplacementHigh(input), graph()->NewNode(common()->Int32Constant(0)))); + d.Chain(NodeProperties::GetControlInput(node)); Node* low_node = d.Phi( MachineRepresentation::kWord32, @@ -825,14 +826,16 @@ void Int64Lowering::LowerNode(Node* node) { ReplaceNode(node, low_node, graph()->NewNode(common()->Int32Constant(0))); break; } - case IrOpcode::kWord64Ctz: { - DCHECK_EQ(1, node->InputCount()); + case IrOpcode::kWord64CtzLowerable: { + DCHECK_EQ(2, node->InputCount()); DCHECK(machine()->Word32Ctz().IsSupported()); Node* input = node->InputAt(0); Diamond d( graph(), common(), graph()->NewNode(machine()->Word32Equal(), GetReplacementLow(input), graph()->NewNode(common()->Int32Constant(0)))); + d.Chain(NodeProperties::GetControlInput(node)); + Node* low_node = d.Phi(MachineRepresentation::kWord32, graph()->NewNode(machine()->Int32Add(), @@ -844,6 +847,12 @@ void Int64Lowering::LowerNode(Node* node) { ReplaceNode(node, low_node, graph()->NewNode(common()->Int32Constant(0))); break; } + case IrOpcode::kWord64Ror: + case IrOpcode::kWord64Rol: + case IrOpcode::kWord64Ctz: + case IrOpcode::kWord64Clz: + FATAL("%s operator should not be used in 32-bit systems", + node->op()->mnemonic()); case IrOpcode::kWord64Popcnt: { DCHECK_EQ(1, node->InputCount()); Node* input = node->InputAt(0); @@ -1030,7 +1039,7 @@ void Int64Lowering::LowerNode(Node* node) { default: { DefaultLowering(node); } } -} // NOLINT(readability/fn_size) +} void Int64Lowering::LowerComparison(Node* node, const Operator* high_word_op, const Operator* low_word_op) { diff --git a/deps/v8/src/compiler/js-call-reducer.cc b/deps/v8/src/compiler/js-call-reducer.cc index bb7a11d16d..99a29715f5 100644 --- a/deps/v8/src/compiler/js-call-reducer.cc +++ b/deps/v8/src/compiler/js-call-reducer.cc @@ -15,6 +15,7 @@ #include "src/codegen/tnode.h" #include "src/compiler/access-builder.h" #include "src/compiler/access-info.h" +#include "src/compiler/allocation-builder-inl.h" #include "src/compiler/allocation-builder.h" #include "src/compiler/compilation-dependencies.h" #include "src/compiler/feedback-source.h" @@ -42,7 +43,7 @@ namespace internal { namespace compiler { // Shorter lambda declarations with less visual clutter. -#define _ [&]() // NOLINT(whitespace/braces) +#define _ [&]() class JSCallReducerAssembler : public JSGraphAssembler { protected: @@ -889,8 +890,8 @@ class FastApiCallReducerAssembler : public JSCallReducerAssembler { Node* holder, const SharedFunctionInfoRef shared, Node* target, const int arity, Node* effect) : JSCallReducerAssembler(reducer, node), - c_function_(function_template_info.c_function()), - c_signature_(function_template_info.c_signature()), + c_functions_(function_template_info.c_functions()), + c_signatures_(function_template_info.c_signatures()), function_template_info_(function_template_info), receiver_(receiver), holder_(holder), @@ -898,8 +899,8 @@ class FastApiCallReducerAssembler : public JSCallReducerAssembler { target_(target), arity_(arity) { DCHECK_EQ(IrOpcode::kJSCall, node->opcode()); - DCHECK_NE(c_function_, kNullAddress); - CHECK_NOT_NULL(c_signature_); + CHECK_GT(c_functions_.size(), 0); + CHECK_GT(c_signatures_.size(), 0); InitializeEffectControl(effect, NodeProperties::GetControlInput(node)); } @@ -908,13 +909,16 @@ class FastApiCallReducerAssembler : public JSCallReducerAssembler { // C arguments include the receiver at index 0. Thus C index 1 corresponds // to the JS argument 0, etc. const int c_argument_count = - static_cast<int>(c_signature_->ArgumentCount()); + static_cast<int>(c_signatures_[0]->ArgumentCount()); CHECK_GE(c_argument_count, kReceiver); int cursor = 0; base::SmallVector<Node*, kInlineSize> inputs(c_argument_count + arity_ + kExtraInputsCount); - inputs[cursor++] = ExternalConstant(ExternalReference::Create(c_function_)); + // Multiple function overloads not supported yet, always call the first + // overload. + inputs[cursor++] = + ExternalConstant(ExternalReference::Create(c_functions_[0])); inputs[cursor++] = n.receiver(); @@ -986,12 +990,12 @@ class FastApiCallReducerAssembler : public JSCallReducerAssembler { TNode<Object> FastApiCall(CallDescriptor* descriptor, Node** inputs, size_t inputs_size) { return AddNode<Object>(graph()->NewNode( - simplified()->FastApiCall(c_signature_, feedback(), descriptor), + simplified()->FastApiCall(c_signatures_[0], feedback(), descriptor), static_cast<int>(inputs_size), inputs)); } - const Address c_function_; - const CFunctionInfo* const c_signature_; + const ZoneVector<Address> c_functions_; + const ZoneVector<const CFunctionInfo*> c_signatures_; const FunctionTemplateInfoRef function_template_info_; Node* const receiver_; Node* const holder_; @@ -2170,17 +2174,17 @@ TNode<Object> PromiseBuiltinReducerAssembler::ReducePromiseConstructor( TrueConstant()); // Allocate closures for the resolve and reject cases. - SharedFunctionInfoRef resolve_sfi( - broker_, broker_->isolate() - ->factory() - ->promise_capability_default_resolve_shared_fun()); + SharedFunctionInfoRef resolve_sfi = + MakeRef(broker_, broker_->isolate() + ->factory() + ->promise_capability_default_resolve_shared_fun()); TNode<JSFunction> resolve = CreateClosureFromBuiltinSharedFunctionInfo(resolve_sfi, promise_context); - SharedFunctionInfoRef reject_sfi( - broker_, broker_->isolate() - ->factory() - ->promise_capability_default_reject_shared_fun()); + SharedFunctionInfoRef reject_sfi = + MakeRef(broker_, broker_->isolate() + ->factory() + ->promise_capability_default_reject_shared_fun()); TNode<JSFunction> reject = CreateClosureFromBuiltinSharedFunctionInfo(reject_sfi, promise_context); @@ -2447,6 +2451,10 @@ Reduction JSCallReducer::ReduceObjectConstructor(Node* node) { Reduction JSCallReducer::ReduceFunctionPrototypeApply(Node* node) { JSCallNode n(node); CallParameters const& p = n.Parameters(); + CallFeedbackRelation new_feedback_relation = + p.feedback_relation() == CallFeedbackRelation::kReceiver + ? CallFeedbackRelation::kTarget + : CallFeedbackRelation::kUnrelated; int arity = p.arity_without_implicit_args(); ConvertReceiverMode convert_mode = ConvertReceiverMode::kAny; if (arity == 0) { @@ -2479,9 +2487,9 @@ Reduction JSCallReducer::ReduceFunctionPrototypeApply(Node* node) { // Morph the {node} to a {JSCallWithArrayLike}. NodeProperties::ChangeOp( - node, javascript()->CallWithArrayLike( - p.frequency(), p.feedback(), p.speculation_mode(), - CallFeedbackRelation::kUnrelated)); + node, javascript()->CallWithArrayLike(p.frequency(), p.feedback(), + p.speculation_mode(), + new_feedback_relation)); return Changed(node).FollowedBy(ReduceJSCallWithArrayLike(node)); } else { // Check whether {arguments_list} is null. @@ -2509,7 +2517,7 @@ Reduction JSCallReducer::ReduceFunctionPrototypeApply(Node* node) { Node* value0 = effect0 = control0 = graph()->NewNode( javascript()->CallWithArrayLike(p.frequency(), p.feedback(), p.speculation_mode(), - CallFeedbackRelation::kUnrelated), + new_feedback_relation), target, this_argument, arguments_list, n.feedback_vector(), context, frame_state, effect0, control0); @@ -2559,7 +2567,7 @@ Reduction JSCallReducer::ReduceFunctionPrototypeApply(Node* node) { NodeProperties::ChangeOp( node, javascript()->Call(JSCallNode::ArityForArgc(arity), p.frequency(), p.feedback(), convert_mode, p.speculation_mode(), - CallFeedbackRelation::kUnrelated)); + new_feedback_relation)); // Try to further reduce the JSCall {node}. return Changed(node).FollowedBy(ReduceJSCall(node)); } @@ -2591,28 +2599,20 @@ Reduction JSCallReducer::ReduceFunctionPrototypeBind(Node* node) { if (!inference.HaveMaps()) return NoChange(); MapHandles const& receiver_maps = inference.GetMaps(); - MapRef first_receiver_map(broker(), receiver_maps[0]); + MapRef first_receiver_map = MakeRef(broker(), receiver_maps[0]); bool const is_constructor = first_receiver_map.is_constructor(); - if (first_receiver_map.ShouldHaveBeenSerialized() && - !first_receiver_map.serialized_prototype()) { - TRACE_BROKER_MISSING(broker(), - "serialized prototype on map " << first_receiver_map); - return inference.NoChange(); - } - ObjectRef const prototype = first_receiver_map.prototype(); - for (Handle<Map> const map : receiver_maps) { - MapRef receiver_map(broker(), map); + base::Optional<HeapObjectRef> const prototype = + first_receiver_map.prototype(); + if (!prototype.has_value()) return inference.NoChange(); - if (receiver_map.ShouldHaveBeenSerialized() && - !receiver_map.serialized_prototype()) { - TRACE_BROKER_MISSING(broker(), - "serialized prototype on map " << receiver_map); - return inference.NoChange(); - } + for (Handle<Map> const map : receiver_maps) { + MapRef receiver_map = MakeRef(broker(), map); + base::Optional<HeapObjectRef> map_prototype = receiver_map.prototype(); + if (!map_prototype.has_value()) return inference.NoChange(); // Check for consistency among the {receiver_maps}. - if (!receiver_map.prototype().equals(prototype) || + if (!map_prototype->equals(*prototype) || receiver_map.is_constructor() != is_constructor || !InstanceTypeChecker::IsJSFunctionOrBoundFunction( receiver_map.instance_type())) { @@ -2643,8 +2643,8 @@ Reduction JSCallReducer::ReduceFunctionPrototypeBind(Node* node) { return inference.NoChange(); } ReadOnlyRoots roots(isolate()); - StringRef length_string(broker(), roots.length_string_handle()); - StringRef name_string(broker(), roots.name_string_handle()); + StringRef length_string = MakeRef(broker(), roots.length_string_handle()); + StringRef name_string = MakeRef(broker(), roots.name_string_handle()); base::Optional<ObjectRef> length_value( receiver_map.GetStrongValue(kLengthIndex)); @@ -2668,7 +2668,7 @@ Reduction JSCallReducer::ReduceFunctionPrototypeBind(Node* node) { MapRef map = is_constructor ? native_context().bound_function_with_constructor_map() : native_context().bound_function_without_constructor_map(); - if (!map.prototype().equals(prototype)) return inference.NoChange(); + if (!map.prototype().value().equals(*prototype)) return inference.NoChange(); inference.RelyOnMapsPreferStability(dependencies(), jsgraph(), &effect, control, p.feedback()); @@ -2677,6 +2677,15 @@ Reduction JSCallReducer::ReduceFunctionPrototypeBind(Node* node) { static constexpr int kBoundThis = 1; static constexpr int kReceiverContextEffectAndControl = 4; int const arity = n.ArgumentCount(); + + if (arity > 0) { + MapRef fixed_array_map = MakeRef(broker(), factory()->fixed_array_map()); + AllocationBuilder ab(jsgraph(), effect, control); + if (!ab.CanAllocateArray(arity, fixed_array_map)) { + return NoChange(); + } + } + int const arity_with_bound_this = std::max(arity, kBoundThis); int const input_count = arity_with_bound_this + kReceiverContextEffectAndControl; @@ -2713,10 +2722,7 @@ Reduction JSCallReducer::ReduceFunctionPrototypeCall(Node* node) { HeapObjectMatcher m(target); if (m.HasResolvedValue() && m.Ref(broker()).IsJSFunction()) { JSFunctionRef function = m.Ref(broker()).AsJSFunction(); - if (function.ShouldHaveBeenSerialized() && !function.serialized()) { - TRACE_BROKER_MISSING(broker(), "Serialize call on function " << function); - return NoChange(); - } + if (!function.serialized()) return NoChange(); context = jsgraph()->Constant(function.context()); } else { context = effect = graph()->NewNode( @@ -2785,24 +2791,17 @@ Reduction JSCallReducer::ReduceObjectGetPrototype(Node* node, Node* object) { if (!inference.HaveMaps()) return NoChange(); MapHandles const& object_maps = inference.GetMaps(); - MapRef candidate_map(broker(), object_maps[0]); - if (candidate_map.ShouldHaveBeenSerialized() && - !candidate_map.serialized_prototype()) { - TRACE_BROKER_MISSING(broker(), "prototype for map " << candidate_map); - return inference.NoChange(); - } - ObjectRef candidate_prototype = candidate_map.prototype(); + MapRef candidate_map = MakeRef(broker(), object_maps[0]); + base::Optional<HeapObjectRef> candidate_prototype = candidate_map.prototype(); + if (!candidate_prototype.has_value()) return inference.NoChange(); // Check if we can constant-fold the {candidate_prototype}. for (size_t i = 0; i < object_maps.size(); ++i) { - MapRef object_map(broker(), object_maps[i]); - if (object_map.ShouldHaveBeenSerialized() && - !object_map.serialized_prototype()) { - TRACE_BROKER_MISSING(broker(), "prototype for map " << object_map); - return inference.NoChange(); - } + MapRef object_map = MakeRef(broker(), object_maps[i]); + base::Optional<HeapObjectRef> map_prototype = object_map.prototype(); + if (!map_prototype.has_value()) return inference.NoChange(); if (IsSpecialReceiverInstanceType(object_map.instance_type()) || - !object_map.prototype().equals(candidate_prototype)) { + !map_prototype->equals(*candidate_prototype)) { // We exclude special receivers, like JSProxy or API objects that // might require access checks here; we also don't want to deal // with hidden prototypes at this point. @@ -2815,7 +2814,7 @@ Reduction JSCallReducer::ReduceObjectGetPrototype(Node* node, Node* object) { if (!inference.RelyOnMapsViaStability(dependencies())) { return inference.NoChange(); } - Node* value = jsgraph()->Constant(candidate_prototype); + Node* value = jsgraph()->Constant(*candidate_prototype); ReplaceWithValue(node, value); return Replace(value); } @@ -3177,9 +3176,9 @@ bool CanInlineArrayIteratingBuiltin(JSHeapBroker* broker, MapHandles const& receiver_maps, ElementsKind* kind_return) { DCHECK_NE(0, receiver_maps.size()); - *kind_return = MapRef(broker, receiver_maps[0]).elements_kind(); + *kind_return = MakeRef(broker, receiver_maps[0]).elements_kind(); for (auto receiver_map : receiver_maps) { - MapRef map(broker, receiver_map); + MapRef map = MakeRef(broker, receiver_map); if (!map.supports_fast_array_iteration() || !UnionElementsKindUptoSize(kind_return, map.elements_kind())) { return false; @@ -3194,7 +3193,7 @@ bool CanInlineArrayResizingBuiltin(JSHeapBroker* broker, bool builtin_is_push = false) { DCHECK_NE(0, receiver_maps.size()); for (auto receiver_map : receiver_maps) { - MapRef map(broker, receiver_map); + MapRef map = MakeRef(broker, receiver_map); if (!map.supports_fast_array_resize()) return false; // TODO(turbofan): We should also handle fast holey double elements once // we got the hole NaN mess sorted out in TurboFan/V8. @@ -3432,8 +3431,8 @@ Reduction JSCallReducer::ReduceArraySome(Node* node, #if V8_ENABLE_WEBASSEMBLY namespace { + bool CanInlineJSToWasmCall(const wasm::FunctionSig* wasm_signature) { - DCHECK(FLAG_turbo_inline_js_wasm_calls); if (wasm_signature->return_count() > 1) { return false; } @@ -3450,10 +3449,13 @@ bool CanInlineJSToWasmCall(const wasm::FunctionSig* wasm_signature) { return true; } + } // namespace Reduction JSCallReducer::ReduceCallWasmFunction( Node* node, const SharedFunctionInfoRef& shared) { + DCHECK(flags() & kInlineJSToWasmCalls); + JSCallNode n(node); const CallParameters& p = n.Parameters(); @@ -3540,11 +3542,13 @@ bool Has64BitIntegerParamsInSignature(const CFunctionInfo* c_signature) { bool CanOptimizeFastCall( const FunctionTemplateInfoRef& function_template_info) { - const CFunctionInfo* c_signature = function_template_info.c_signature(); + if (function_template_info.c_functions().empty()) return false; + + // Multiple function overloads not supported yet, always call the first + // overload. + const CFunctionInfo* c_signature = function_template_info.c_signatures()[0]; - bool optimize_to_fast_call = - FLAG_turbo_fast_api_calls && - function_template_info.c_function() != kNullAddress; + bool optimize_to_fast_call = FLAG_turbo_fast_api_calls; #ifndef V8_ENABLE_FP_PARAMS_IN_C_LINKAGE optimize_to_fast_call = optimize_to_fast_call && !HasFPParamsInSignature(c_signature); @@ -3612,7 +3616,7 @@ Reduction JSCallReducer::ReduceCallApiFunction( MapInference inference(broker(), receiver, effect); if (inference.HaveMaps()) { MapHandles const& receiver_maps = inference.GetMaps(); - MapRef first_receiver_map(broker(), receiver_maps[0]); + MapRef first_receiver_map = MakeRef(broker(), receiver_maps[0]); // See if we can constant-fold the compatible receiver checks. HolderLookupResult api_holder = @@ -3645,7 +3649,7 @@ Reduction JSCallReducer::ReduceCallApiFunction( function_template_info.accept_any_receiver()); for (size_t i = 1; i < receiver_maps.size(); ++i) { - MapRef receiver_map(broker(), receiver_maps[i]); + MapRef receiver_map = MakeRef(broker(), receiver_maps[i]); HolderLookupResult holder_i = function_template_info.LookupHolderOfExpectedType(receiver_map); @@ -3893,8 +3897,8 @@ Reduction JSCallReducer::ReduceCallOrConstructWithArrayLikeOrSpread( if (!frame_state.frame_state_info().shared_info().ToHandle(&shared)) { return NoChange(); } - formal_parameter_count = SharedFunctionInfoRef(broker(), shared) - .internal_formal_parameter_count(); + formal_parameter_count = + MakeRef(broker(), shared).internal_formal_parameter_count(); } if (type == CreateArgumentsType::kMappedArguments) { @@ -3971,10 +3975,9 @@ Reduction JSCallReducer::ReduceCallOrConstructWithArrayLikeOrSpread( if (IsCallWithArrayLikeOrSpread(node)) { NodeProperties::ChangeOp( - node, - javascript()->Call(JSCallNode::ArityForArgc(argc), frequency, feedback, - ConvertReceiverMode::kAny, speculation_mode, - CallFeedbackRelation::kUnrelated)); + node, javascript()->Call(JSCallNode::ArityForArgc(argc), frequency, + feedback, ConvertReceiverMode::kAny, + speculation_mode, feedback_relation)); return Changed(node).FollowedBy(ReduceJSCall(node)); } else { NodeProperties::ChangeOp( @@ -4048,7 +4051,9 @@ bool ShouldUseCallICFeedback(Node* node) { } else if (m.IsPhi()) { // Protect against endless loops here. Node* control = NodeProperties::GetControlInput(node); - if (control->opcode() == IrOpcode::kLoop) return false; + if (control->opcode() == IrOpcode::kLoop || + control->opcode() == IrOpcode::kDead) + return false; // Check if {node} is a Phi of nodes which shouldn't // use CallIC feedback (not looking through loops). int const value_input_count = m.node()->op()->ValueInputCount(); @@ -4063,11 +4068,7 @@ bool ShouldUseCallICFeedback(Node* node) { } // namespace bool JSCallReducer::IsBuiltinOrApiFunction(JSFunctionRef function) const { - if (function.ShouldHaveBeenSerialized() && !function.serialized()) { - TRACE_BROKER_MISSING(broker(), "data for function " << function); - return false; - } - + if (!function.serialized()) return false; // TODO(neis): Add a way to check if function template info isn't serialized // and add a warning in such cases. Currently we can't tell if function // template info doesn't exist or wasn't serialized. @@ -4091,10 +4092,7 @@ Reduction JSCallReducer::ReduceJSCall(Node* node) { ObjectRef target_ref = m.Ref(broker()); if (target_ref.IsJSFunction()) { JSFunctionRef function = target_ref.AsJSFunction(); - if (function.ShouldHaveBeenSerialized() && !function.serialized()) { - TRACE_BROKER_MISSING(broker(), "data for function " << function); - return NoChange(); - } + if (!function.serialized()) return NoChange(); // Don't inline cross native context. if (!function.native_context().equals(native_context())) { @@ -4104,10 +4102,7 @@ Reduction JSCallReducer::ReduceJSCall(Node* node) { return ReduceJSCall(node, function.shared()); } else if (target_ref.IsJSBoundFunction()) { JSBoundFunctionRef function = target_ref.AsJSBoundFunction(); - if (function.ShouldHaveBeenSerialized() && !function.serialized()) { - TRACE_BROKER_MISSING(broker(), "data for function " << function); - return NoChange(); - } + if (!function.serialized()) return NoChange(); ObjectRef bound_this = function.bound_this(); ConvertReceiverMode const convert_mode = @@ -4115,6 +4110,21 @@ Reduction JSCallReducer::ReduceJSCall(Node* node) { ? ConvertReceiverMode::kNullOrUndefined : ConvertReceiverMode::kNotNullOrUndefined; + // TODO(jgruber): Inline this block below once TryGet is guaranteed to + // succeed. + FixedArrayRef bound_arguments = function.bound_arguments(); + const int bound_arguments_length = bound_arguments.length(); + static constexpr int kInlineSize = 16; // Arbitrary. + base::SmallVector<Node*, kInlineSize> args; + for (int i = 0; i < bound_arguments_length; ++i) { + base::Optional<ObjectRef> maybe_arg = bound_arguments.TryGet(i); + if (!maybe_arg.has_value()) { + TRACE_BROKER_MISSING(broker(), "bound argument"); + return NoChange(); + } + args.emplace_back(jsgraph()->Constant(maybe_arg.value())); + } + // Patch {node} to use [[BoundTargetFunction]] and [[BoundThis]]. NodeProperties::ReplaceValueInput( node, jsgraph()->Constant(function.bound_target_function()), @@ -4123,10 +4133,8 @@ Reduction JSCallReducer::ReduceJSCall(Node* node) { JSCallNode::ReceiverIndex()); // Insert the [[BoundArguments]] for {node}. - FixedArrayRef bound_arguments = function.bound_arguments(); - for (int i = 0; i < bound_arguments.length(); ++i) { - node->InsertInput(graph()->zone(), i + 2, - jsgraph()->Constant(bound_arguments.get(i))); + for (int i = 0; i < bound_arguments_length; ++i) { + node->InsertInput(graph()->zone(), i + 2, args[i]); arity++; } @@ -4152,9 +4160,9 @@ Reduction JSCallReducer::ReduceJSCall(Node* node) { // Same if the {target} is the result of a CheckClosure operation. if (target->opcode() == IrOpcode::kJSCreateClosure) { CreateClosureParameters const& p = JSCreateClosureNode{target}.Parameters(); - return ReduceJSCall(node, SharedFunctionInfoRef(broker(), p.shared_info())); + return ReduceJSCall(node, MakeRef(broker(), p.shared_info())); } else if (target->opcode() == IrOpcode::kCheckClosure) { - FeedbackCellRef cell(broker(), FeedbackCellOf(target->op())); + FeedbackCellRef cell = MakeRef(broker(), FeedbackCellOf(target->op())); if (cell.shared_function_info().has_value()) { return ReduceJSCall(node, *cell.shared_function_info()); } else { @@ -4201,7 +4209,7 @@ Reduction JSCallReducer::ReduceJSCall(Node* node) { } if (!ShouldUseCallICFeedback(target) || - p.feedback_relation() != CallFeedbackRelation::kRelated || + p.feedback_relation() == CallFeedbackRelation::kUnrelated || !p.feedback().IsValid()) { return NoChange(); } @@ -4213,7 +4221,14 @@ Reduction JSCallReducer::ReduceJSCall(Node* node) { node, DeoptimizeReason::kInsufficientTypeFeedbackForCall); } - base::Optional<HeapObjectRef> feedback_target = feedback.AsCall().target(); + base::Optional<HeapObjectRef> feedback_target; + if (p.feedback_relation() == CallFeedbackRelation::kTarget) { + feedback_target = feedback.AsCall().target(); + } else { + DCHECK_EQ(p.feedback_relation(), CallFeedbackRelation::kReceiver); + feedback_target = native_context().function_prototype_apply(); + } + if (feedback_target.has_value() && feedback_target->map().is_callable()) { Node* target_function = jsgraph()->Constant(*feedback_target); @@ -4238,8 +4253,8 @@ Reduction JSCallReducer::ReduceJSCall(Node* node) { // Try to further reduce the JSCall {node}. return Changed(node).FollowedBy(ReduceJSCall(node)); } else if (feedback_target.has_value() && feedback_target->IsFeedbackCell()) { - FeedbackCellRef feedback_cell( - broker(), feedback_target.value().AsFeedbackCell().object()); + FeedbackCellRef feedback_cell = + MakeRef(broker(), feedback_target.value().AsFeedbackCell().object()); if (feedback_cell.value().has_value()) { // Check that {target} is a closure with given {feedback_cell}, // which uniquely identifies a given function inside a native context. @@ -4276,6 +4291,9 @@ Reduction JSCallReducer::ReduceJSCall(Node* node, Node* target = n.target(); // Do not reduce calls to functions with break points. + // If this state changes during background compilation, the compilation + // job will be aborted from the main thread (see + // Debug::PrepareFunctionForDebugExecution()). if (shared.HasBreakInfo()) return NoChange(); // Raise a TypeError if the {target} is a "classConstructor". @@ -4736,13 +4754,12 @@ Reduction JSCallReducer::ReduceJSConstruct(Node* node) { if (target_ref.IsJSFunction()) { JSFunctionRef function = target_ref.AsJSFunction(); - if (function.ShouldHaveBeenSerialized() && !function.serialized()) { - TRACE_BROKER_MISSING(broker(), - "function, not serialized: " << function); - return NoChange(); - } + if (!function.serialized()) return NoChange(); // Do not reduce constructors with break points. + // If this state changes during background compilation, the compilation + // job will be aborted from the main thread (see + // Debug::PrepareFunctionForDebugExecution()). if (function.shared().HasBreakInfo()) return NoChange(); // Don't inline cross native context. @@ -4799,14 +4816,23 @@ Reduction JSCallReducer::ReduceJSConstruct(Node* node) { } } else if (target_ref.IsJSBoundFunction()) { JSBoundFunctionRef function = target_ref.AsJSBoundFunction(); - if (function.ShouldHaveBeenSerialized() && !function.serialized()) { - TRACE_BROKER_MISSING(broker(), - "function, not serialized: " << function); - return NoChange(); - } - + if (!function.serialized()) return NoChange(); ObjectRef bound_target_function = function.bound_target_function(); FixedArrayRef bound_arguments = function.bound_arguments(); + const int bound_arguments_length = bound_arguments.length(); + + // TODO(jgruber): Inline this block below once TryGet is guaranteed to + // succeed. + static constexpr int kInlineSize = 16; // Arbitrary. + base::SmallVector<Node*, kInlineSize> args; + for (int i = 0; i < bound_arguments_length; ++i) { + base::Optional<ObjectRef> maybe_arg = bound_arguments.TryGet(i); + if (!maybe_arg.has_value()) { + TRACE_BROKER_MISSING(broker(), "bound argument"); + return NoChange(); + } + args.emplace_back(jsgraph()->Constant(maybe_arg.value())); + } // Patch {node} to use [[BoundTargetFunction]]. node->ReplaceInput(n.TargetIndex(), @@ -4823,9 +4849,8 @@ Reduction JSCallReducer::ReduceJSConstruct(Node* node) { new_target)); // Insert the [[BoundArguments]] for {node}. - for (int i = 0; i < bound_arguments.length(); ++i) { - node->InsertInput(graph()->zone(), n.ArgumentIndex(i), - jsgraph()->Constant(bound_arguments.get(i))); + for (int i = 0; i < bound_arguments_length; ++i) { + node->InsertInput(graph()->zone(), n.ArgumentIndex(i), args[i]); arity++; } @@ -5064,7 +5089,7 @@ Reduction JSCallReducer::ReduceJSConstructWithArrayLike(Node* node) { DCHECK_EQ(n.ArgumentCount(), 1); // The arraylike object. return ReduceCallOrConstructWithArrayLikeOrSpread( node, arraylike_index, p.frequency(), p.feedback(), - SpeculationMode::kDisallowSpeculation, CallFeedbackRelation::kRelated); + SpeculationMode::kDisallowSpeculation, CallFeedbackRelation::kTarget); } Reduction JSCallReducer::ReduceJSConstructWithSpread(Node* node) { @@ -5074,7 +5099,7 @@ Reduction JSCallReducer::ReduceJSConstructWithSpread(Node* node) { DCHECK_GE(n.ArgumentCount(), 1); // At least the spread. return ReduceCallOrConstructWithArrayLikeOrSpread( node, spread_index, p.frequency(), p.feedback(), - SpeculationMode::kDisallowSpeculation, CallFeedbackRelation::kRelated); + SpeculationMode::kDisallowSpeculation, CallFeedbackRelation::kTarget); } Reduction JSCallReducer::ReduceReturnReceiver(Node* node) { @@ -5611,8 +5636,8 @@ Reduction JSCallReducer::ReduceArrayPrototypeShift(Node* node) { graph()->zone(), 1, BuiltinArguments::kNumExtraArgsWithReceiver, Builtins::name(builtin_index), node->op()->properties(), CallDescriptor::kNeedsFrameState); - Node* stub_code = jsgraph()->CEntryStubConstant(1, kDontSaveFPRegs, - kArgvOnStack, true); + Node* stub_code = jsgraph()->CEntryStubConstant( + 1, SaveFPRegsMode::kIgnore, ArgvMode::kStack, true); Address builtin_entry = Builtins::CppEntryOf(builtin_index); Node* entry = jsgraph()->ExternalConstant( ExternalReference::Create(builtin_entry)); @@ -5701,16 +5726,18 @@ Reduction JSCallReducer::ReduceArrayPrototypeSlice(Node* node) { // `slice.call(arguments)`, for example jQuery makes heavy use of that. bool can_be_holey = false; for (Handle<Map> map : receiver_maps) { - MapRef receiver_map(broker(), map); - if (!receiver_map.supports_fast_array_iteration()) + MapRef receiver_map = MakeRef(broker(), map); + if (!receiver_map.supports_fast_array_iteration()) { return inference.NoChange(); + } if (IsHoleyElementsKind(receiver_map.elements_kind())) { can_be_holey = true; } } - if (!dependencies()->DependOnArraySpeciesProtector()) + if (!dependencies()->DependOnArraySpeciesProtector()) { return inference.NoChange(); + } if (can_be_holey && !dependencies()->DependOnNoElementsProtector()) { return inference.NoChange(); } @@ -5851,7 +5878,7 @@ Reduction JSCallReducer::ReduceArrayIteratorPrototypeNext(Node* node) { // Check that various {iterated_object_maps} have compatible elements kinds. ElementsKind elements_kind = - MapRef(broker(), iterated_object_maps[0]).elements_kind(); + MakeRef(broker(), iterated_object_maps[0]).elements_kind(); if (IsTypedArrayElementsKind(elements_kind)) { // TurboFan doesn't support loading from BigInt typed arrays yet. if (elements_kind == BIGUINT64_ELEMENTS || @@ -5859,7 +5886,7 @@ Reduction JSCallReducer::ReduceArrayIteratorPrototypeNext(Node* node) { return inference.NoChange(); } for (Handle<Map> map : iterated_object_maps) { - MapRef iterated_object_map(broker(), map); + MapRef iterated_object_map = MakeRef(broker(), map); if (iterated_object_map.elements_kind() != elements_kind) { return inference.NoChange(); } @@ -6475,15 +6502,11 @@ bool JSCallReducer::DoPromiseChecks(MapInference* inference) { // Check whether all {receiver_maps} are JSPromise maps and // have the initial Promise.prototype as their [[Prototype]]. for (Handle<Map> map : receiver_maps) { - MapRef receiver_map(broker(), map); + MapRef receiver_map = MakeRef(broker(), map); if (!receiver_map.IsJSPromiseMap()) return false; - if (receiver_map.ShouldHaveBeenSerialized() && - !receiver_map.serialized_prototype()) { - TRACE_BROKER_MISSING(broker(), "prototype for map " << receiver_map); - return false; - } - if (!receiver_map.prototype().equals( - native_context().promise_prototype())) { + base::Optional<HeapObjectRef> prototype = receiver_map.prototype(); + if (!prototype.has_value() || + !prototype->equals(native_context().promise_prototype())) { return false; } } @@ -6604,14 +6627,14 @@ Reduction JSCallReducer::ReducePromisePrototypeFinally(Node* node) { context, constructor, etrue, if_true); // Allocate the closure for the reject case. - SharedFunctionInfoRef promise_catch_finally( - broker(), factory()->promise_catch_finally_shared_fun()); + SharedFunctionInfoRef promise_catch_finally = + MakeRef(broker(), factory()->promise_catch_finally_shared_fun()); catch_true = etrue = CreateClosureFromBuiltinSharedFunctionInfo( promise_catch_finally, context, etrue, if_true); // Allocate the closure for the fulfill case. - SharedFunctionInfoRef promise_then_finally( - broker(), factory()->promise_then_finally_shared_fun()); + SharedFunctionInfoRef promise_then_finally = + MakeRef(broker(), factory()->promise_then_finally_shared_fun()); then_true = etrue = CreateClosureFromBuiltinSharedFunctionInfo( promise_then_finally, context, etrue, if_true); } @@ -7085,9 +7108,10 @@ Reduction JSCallReducer::ReduceCollectionIteratorPrototypeNext( MapInference inference(broker(), receiver, effect); if (!inference.HaveMaps()) return NoChange(); MapHandles const& receiver_maps = inference.GetMaps(); - receiver_instance_type = MapRef(broker(), receiver_maps[0]).instance_type(); + receiver_instance_type = + MakeRef(broker(), receiver_maps[0]).instance_type(); for (size_t i = 1; i < receiver_maps.size(); ++i) { - if (MapRef(broker(), receiver_maps[i]).instance_type() != + if (MakeRef(broker(), receiver_maps[i]).instance_type() != receiver_instance_type) { return inference.NoChange(); } @@ -7690,10 +7714,10 @@ Reduction JSCallReducer::ReduceRegExpPrototypeTest(Node* node) { if (broker()->is_concurrent_inlining()) { // Obtain precomputed access infos from the broker. for (auto map : regexp_maps) { - MapRef map_ref(broker(), map); + MapRef map_ref = MakeRef(broker(), map); PropertyAccessInfo access_info = broker()->GetPropertyAccessInfo( - map_ref, NameRef(broker(), isolate()->factory()->exec_string()), - AccessMode::kLoad); + map_ref, MakeRef(broker(), isolate()->factory()->exec_string()), + AccessMode::kLoad, dependencies()); access_infos.push_back(access_info); } } else { @@ -7714,7 +7738,7 @@ Reduction JSCallReducer::ReduceRegExpPrototypeTest(Node* node) { // Do not reduce if the exec method is not on the prototype chain. if (!ai_exec.holder().ToHandle(&holder)) return inference.NoChange(); - JSObjectRef holder_ref(broker(), holder); + JSObjectRef holder_ref = MakeRef(broker(), holder); // Bail out if the exec method is not the original one. base::Optional<ObjectRef> constant = holder_ref.GetOwnFastDataProperty( @@ -7727,7 +7751,7 @@ Reduction JSCallReducer::ReduceRegExpPrototypeTest(Node* node) { // Add proper dependencies on the {regexp}s [[Prototype]]s. dependencies()->DependOnStablePrototypeChains( ai_exec.lookup_start_object_maps(), kStartAtPrototype, - JSObjectRef(broker(), holder)); + MakeRef(broker(), holder)); } else { // TODO(v8:11457) Support dictionary mode protoypes here. return inference.NoChange(); @@ -7814,9 +7838,9 @@ Reduction JSCallReducer::ReduceBigIntAsUintN(Node* node) { NumberMatcher matcher(bits); if (matcher.IsInteger() && matcher.IsInRange(0, 64)) { const int bits_value = static_cast<int>(matcher.ResolvedValue()); - value = effect = graph()->NewNode(simplified()->CheckBigInt(p.feedback()), - value, effect, control); - value = graph()->NewNode(simplified()->BigIntAsUintN(bits_value), value); + value = effect = graph()->NewNode( + simplified()->SpeculativeBigIntAsUintN(bits_value, p.feedback()), value, + effect, control); ReplaceWithValue(node, value, effect); return Replace(value); } diff --git a/deps/v8/src/compiler/js-context-specialization.cc b/deps/v8/src/compiler/js-context-specialization.cc index 448652ad8d..9c53cf1315 100644 --- a/deps/v8/src/compiler/js-context-specialization.cc +++ b/deps/v8/src/compiler/js-context-specialization.cc @@ -40,7 +40,7 @@ Reduction JSContextSpecialization::ReduceParameter(Node* node) { // Constant-fold the function parameter {node}. Handle<JSFunction> function; if (closure().ToHandle(&function)) { - Node* value = jsgraph()->Constant(JSFunctionRef(broker_, function)); + Node* value = jsgraph()->Constant(MakeRef(broker_, function)); return Replace(value); } } @@ -103,7 +103,7 @@ base::Optional<ContextRef> GetSpecializationContext( Maybe<OuterContext> maybe_outer) { switch (node->opcode()) { case IrOpcode::kHeapConstant: { - HeapObjectRef object(broker, HeapConstantOf(node->op())); + HeapObjectRef object = MakeRef(broker, HeapConstantOf(node->op())); if (object.IsContext()) return object.AsContext(); break; } @@ -112,7 +112,7 @@ base::Optional<ContextRef> GetSpecializationContext( if (maybe_outer.To(&outer) && IsContextParameter(node) && *distance >= outer.distance) { *distance -= outer.distance; - return ContextRef(broker, outer.context); + return MakeRef(broker, outer.context); } break; } @@ -231,7 +231,7 @@ base::Optional<ContextRef> GetModuleContext(JSHeapBroker* broker, Node* node, switch (context->opcode()) { case IrOpcode::kHeapConstant: { - HeapObjectRef object(broker, HeapConstantOf(context->op())); + HeapObjectRef object = MakeRef(broker, HeapConstantOf(context->op())); if (object.IsContext()) { return find_context(object.AsContext()); } @@ -240,7 +240,7 @@ base::Optional<ContextRef> GetModuleContext(JSHeapBroker* broker, Node* node, case IrOpcode::kParameter: { OuterContext outer; if (maybe_context.To(&outer) && IsContextParameter(context)) { - return find_context(ContextRef(broker, outer.context)); + return find_context(MakeRef(broker, outer.context)); } break; } @@ -259,17 +259,18 @@ Reduction JSContextSpecialization::ReduceJSGetImportMeta(Node* node) { ContextRef context = maybe_context.value(); SourceTextModuleRef module = context.get(Context::EXTENSION_INDEX).value().AsSourceTextModule(); - ObjectRef import_meta = module.import_meta(); - if (import_meta.IsJSObject()) { - Node* import_meta_const = jsgraph()->Constant(import_meta); - ReplaceWithValue(node, import_meta_const); - return Changed(import_meta_const); - } else { - DCHECK(import_meta.IsTheHole()); + base::Optional<ObjectRef> import_meta = module.import_meta(); + if (!import_meta.has_value()) return NoChange(); + if (!import_meta->IsJSObject()) { + DCHECK(import_meta->IsTheHole()); // The import.meta object has not yet been created. Let JSGenericLowering // replace the operator with a runtime call. return NoChange(); } + + Node* import_meta_const = jsgraph()->Constant(*import_meta); + ReplaceWithValue(node, import_meta_const); + return Changed(import_meta_const); } Isolate* JSContextSpecialization::isolate() const { diff --git a/deps/v8/src/compiler/js-create-lowering.cc b/deps/v8/src/compiler/js-create-lowering.cc index 899922a27f..21ba072f31 100644 --- a/deps/v8/src/compiler/js-create-lowering.cc +++ b/deps/v8/src/compiler/js-create-lowering.cc @@ -151,8 +151,8 @@ Reduction JSCreateLowering::ReduceJSCreateArguments(Node* node) { FrameState frame_state{NodeProperties::GetFrameStateInput(node)}; Node* const control = graph()->start(); FrameStateInfo state_info = frame_state.frame_state_info(); - SharedFunctionInfoRef shared(broker(), - state_info.shared_info().ToHandleChecked()); + SharedFunctionInfoRef shared = + MakeRef(broker(), state_info.shared_info().ToHandleChecked()); // Use the ArgumentsAccessStub for materializing both mapped and unmapped // arguments object, but only for non-inlined (i.e. outermost) frames. @@ -404,7 +404,7 @@ Reduction JSCreateLowering::ReduceJSCreateGeneratorObject(Node* node) { int parameter_count_no_receiver = shared.internal_formal_parameter_count(); int length = parameter_count_no_receiver + shared.GetBytecodeArray().register_count(); - MapRef fixed_array_map(broker(), factory()->fixed_array_map()); + MapRef fixed_array_map = MakeRef(broker(), factory()->fixed_array_map()); AllocationBuilder ab(jsgraph(), effect, control); if (!ab.CanAllocateArray(length, fixed_array_map)) { return NoChange(); @@ -622,7 +622,7 @@ Reduction JSCreateLowering::ReduceJSCreateArray(Node* node) { { Handle<AllocationSite> site; if (p.site().ToHandle(&site)) { - site_ref = AllocationSiteRef(broker(), site); + site_ref = MakeRef(broker(), site); } } AllocationType allocation = AllocationType::kYoung; @@ -650,8 +650,8 @@ Reduction JSCreateLowering::ReduceJSCreateArray(Node* node) { allocation = dependencies()->DependOnPretenureMode(*site_ref); dependencies()->DependOnElementsKind(*site_ref); } else { - PropertyCellRef array_constructor_protector( - broker(), factory()->array_constructor_protector()); + PropertyCellRef array_constructor_protector = + MakeRef(broker(), factory()->array_constructor_protector()); array_constructor_protector.SerializeAsProtector(); can_inline_call = array_constructor_protector.value().AsSmi() == Protectors::kProtectorValid; @@ -775,11 +775,9 @@ Reduction JSCreateLowering::ReduceJSCreateAsyncFunctionObject(Node* node) { Node* control = NodeProperties::GetControlInput(node); // Create the register file. - MapRef fixed_array_map(broker(), factory()->fixed_array_map()); + MapRef fixed_array_map = MakeRef(broker(), factory()->fixed_array_map()); AllocationBuilder ab(jsgraph(), effect, control); - if (!ab.CanAllocateArray(register_count, fixed_array_map)) { - return NoChange(); - } + CHECK(ab.CanAllocateArray(register_count, fixed_array_map)); ab.AllocateArray(register_count, fixed_array_map); for (int i = 0; i < register_count; ++i) { ab.Store(AccessBuilder::ForFixedArraySlot(i), @@ -881,7 +879,7 @@ Reduction JSCreateLowering::ReduceJSCreateBoundFunction(Node* node) { CreateBoundFunctionParameters const& p = CreateBoundFunctionParametersOf(node->op()); int const arity = static_cast<int>(p.arity()); - MapRef const map(broker(), p.map()); + MapRef const map = MakeRef(broker(), p.map()); Node* bound_target_function = NodeProperties::GetValueInput(node, 0); Node* bound_this = NodeProperties::GetValueInput(node, 1); Node* effect = NodeProperties::GetEffectInput(node); @@ -890,11 +888,9 @@ Reduction JSCreateLowering::ReduceJSCreateBoundFunction(Node* node) { // Create the [[BoundArguments]] for the result. Node* bound_arguments = jsgraph()->EmptyFixedArrayConstant(); if (arity > 0) { - MapRef fixed_array_map(broker(), factory()->fixed_array_map()); + MapRef fixed_array_map = MakeRef(broker(), factory()->fixed_array_map()); AllocationBuilder ab(jsgraph(), effect, control); - if (!ab.CanAllocateArray(arity, fixed_array_map)) { - return NoChange(); - } + CHECK(ab.CanAllocateArray(arity, fixed_array_map)); ab.AllocateArray(arity, fixed_array_map); for (int i = 0; i < arity; ++i) { ab.Store(AccessBuilder::ForFixedArraySlot(i), @@ -924,9 +920,9 @@ Reduction JSCreateLowering::ReduceJSCreateBoundFunction(Node* node) { Reduction JSCreateLowering::ReduceJSCreateClosure(Node* node) { JSCreateClosureNode n(node); CreateClosureParameters const& p = n.Parameters(); - SharedFunctionInfoRef shared(broker(), p.shared_info()); + SharedFunctionInfoRef shared = MakeRef(broker(), p.shared_info()); FeedbackCellRef feedback_cell = n.GetFeedbackCellRefChecked(broker()); - HeapObjectRef code(broker(), p.code()); + HeapObjectRef code = MakeRef(broker(), p.code()); Effect effect = n.effect(); Control control = n.control(); Node* context = n.context(); @@ -935,7 +931,7 @@ Reduction JSCreateLowering::ReduceJSCreateClosure(Node* node) { // seen more than one instantiation, this simplifies the generated code and // also serves as a heuristic of which allocation sites benefit from it. if (!feedback_cell.map().equals( - MapRef(broker(), factory()->many_closures_cell_map()))) { + MakeRef(broker(), factory()->many_closures_cell_map()))) { return NoChange(); } @@ -1041,7 +1037,7 @@ Reduction JSCreateLowering::ReduceJSCreateKeyValueArray(Node* node) { Node* length = jsgraph()->Constant(2); AllocationBuilder aa(jsgraph(), effect, graph()->start()); - aa.AllocateArray(2, MapRef(broker(), factory()->fixed_array_map())); + aa.AllocateArray(2, MakeRef(broker(), factory()->fixed_array_map())); aa.Store(AccessBuilder::ForFixedArrayElement(PACKED_ELEMENTS), jsgraph()->ZeroConstant(), key); aa.Store(AccessBuilder::ForFixedArrayElement(PACKED_ELEMENTS), @@ -1100,14 +1096,21 @@ Reduction JSCreateLowering::ReduceJSCreateLiteralArrayOrObject(Node* node) { if (!feedback.IsInsufficient()) { AllocationSiteRef site = feedback.AsLiteral().value(); if (site.IsFastLiteral()) { - AllocationType allocation = AllocationType::kYoung; + AllocationType allocation = FLAG_allocation_site_pretenuring + ? site.GetAllocationType() + : AllocationType::kYoung; + JSObjectRef boilerplate = site.boilerplate().value(); + base::Optional<Node*> maybe_value = + TryAllocateFastLiteral(effect, control, boilerplate, allocation); + if (!maybe_value.has_value()) { + TRACE_BROKER_MISSING(broker(), "bound argument"); + return NoChange(); + } if (FLAG_allocation_site_pretenuring) { - allocation = dependencies()->DependOnPretenureMode(site); + CHECK_EQ(dependencies()->DependOnPretenureMode(site), allocation); } dependencies()->DependOnElementsKinds(site); - JSObjectRef boilerplate = site.boilerplate().value(); - Node* value = effect = - AllocateFastLiteral(effect, control, boilerplate, allocation); + Node* value = effect = maybe_value.value(); ReplaceWithValue(node, value, effect, control); return Replace(value); } @@ -1209,7 +1212,7 @@ Reduction JSCreateLowering::ReduceJSCreateFunctionContext(Node* node) { DCHECK_EQ(IrOpcode::kJSCreateFunctionContext, node->opcode()); const CreateFunctionContextParameters& parameters = CreateFunctionContextParametersOf(node->op()); - ScopeInfoRef scope_info(broker(), parameters.scope_info()); + ScopeInfoRef scope_info = MakeRef(broker(), parameters.scope_info()); int slot_count = parameters.slot_count(); ScopeType scope_type = parameters.scope_type(); @@ -1249,7 +1252,7 @@ Reduction JSCreateLowering::ReduceJSCreateFunctionContext(Node* node) { Reduction JSCreateLowering::ReduceJSCreateWithContext(Node* node) { DCHECK_EQ(IrOpcode::kJSCreateWithContext, node->opcode()); - ScopeInfoRef scope_info(broker(), ScopeInfoOf(node->op())); + ScopeInfoRef scope_info = MakeRef(broker(), ScopeInfoOf(node->op())); Node* extension = NodeProperties::GetValueInput(node, 0); Node* effect = NodeProperties::GetEffectInput(node); Node* control = NodeProperties::GetControlInput(node); @@ -1270,7 +1273,7 @@ Reduction JSCreateLowering::ReduceJSCreateWithContext(Node* node) { Reduction JSCreateLowering::ReduceJSCreateCatchContext(Node* node) { DCHECK_EQ(IrOpcode::kJSCreateCatchContext, node->opcode()); - ScopeInfoRef scope_info(broker(), ScopeInfoOf(node->op())); + ScopeInfoRef scope_info = MakeRef(broker(), ScopeInfoOf(node->op())); Node* exception = NodeProperties::GetValueInput(node, 0); Node* effect = NodeProperties::GetEffectInput(node); Node* control = NodeProperties::GetControlInput(node); @@ -1291,7 +1294,7 @@ Reduction JSCreateLowering::ReduceJSCreateCatchContext(Node* node) { Reduction JSCreateLowering::ReduceJSCreateBlockContext(Node* node) { DCHECK_EQ(IrOpcode::kJSCreateBlockContext, node->opcode()); - ScopeInfoRef scope_info(broker(), ScopeInfoOf(node->op())); + ScopeInfoRef scope_info = MakeRef(broker(), ScopeInfoOf(node->op())); int const context_length = scope_info.ContextLength(); // Use inline allocation for block contexts up to a size limit. @@ -1323,7 +1326,7 @@ base::Optional<MapRef> GetObjectCreateMap(JSHeapBroker* broker, HeapObjectRef prototype) { MapRef standard_map = broker->target_native_context().object_function().initial_map(); - if (prototype.equals(standard_map.prototype())) { + if (prototype.equals(standard_map.prototype().value())) { return standard_map; } if (prototype.map().oddball_type() == OddballType::kNull) { @@ -1354,7 +1357,7 @@ Reduction JSCreateLowering::ReduceJSCreateObject(Node* node) { if (instance_map.is_dictionary_map()) { DCHECK_EQ(prototype_const.map().oddball_type(), OddballType::kNull); // Allocate an empty NameDictionary as backing store for the properties. - MapRef map(broker(), factory()->name_dictionary_map()); + MapRef map = MakeRef(broker(), factory()->name_dictionary_map()); int capacity = NameDictionary::ComputeCapacity(NameDictionary::kInitialCapacity); DCHECK(base::bits::IsPowerOfTwo(capacity)); @@ -1430,7 +1433,7 @@ Node* JSCreateLowering::TryAllocateArguments(Node* effect, Node* control, auto parameters_it = parameters_access.begin_without_receiver(); // Actually allocate the backing store. - MapRef fixed_array_map(broker(), factory()->fixed_array_map()); + MapRef fixed_array_map = MakeRef(broker(), factory()->fixed_array_map()); AllocationBuilder ab(jsgraph(), effect, control); if (!ab.CanAllocateArray(argument_count, fixed_array_map)) { return nullptr; @@ -1461,7 +1464,7 @@ Node* JSCreateLowering::TryAllocateRestArguments(Node* effect, Node* control, parameters_access.begin_without_receiver_and_skip(start_index); // Actually allocate the backing store. - MapRef fixed_array_map(broker(), factory()->fixed_array_map()); + MapRef fixed_array_map = MakeRef(broker(), factory()->fixed_array_map()); AllocationBuilder ab(jsgraph(), effect, control); if (!ab.CanAllocateArray(num_elements, fixed_array_map)) { return nullptr; @@ -1496,14 +1499,14 @@ Node* JSCreateLowering::TryAllocateAliasedArguments( int mapped_count = std::min(argument_count, parameter_count); *has_aliased_arguments = true; - MapRef sloppy_arguments_elements_map( - broker(), factory()->sloppy_arguments_elements_map()); + MapRef sloppy_arguments_elements_map = + MakeRef(broker(), factory()->sloppy_arguments_elements_map()); if (!AllocationBuilder::CanAllocateSloppyArgumentElements( mapped_count, sloppy_arguments_elements_map)) { return nullptr; } - MapRef fixed_array_map(broker(), factory()->fixed_array_map()); + MapRef fixed_array_map = MakeRef(broker(), factory()->fixed_array_map()); if (!AllocationBuilder::CanAllocateArray(argument_count, fixed_array_map)) { return nullptr; } @@ -1561,8 +1564,8 @@ Node* JSCreateLowering::TryAllocateAliasedArguments( } int mapped_count = parameter_count; - MapRef sloppy_arguments_elements_map( - broker(), factory()->sloppy_arguments_elements_map()); + MapRef sloppy_arguments_elements_map = + MakeRef(broker(), factory()->sloppy_arguments_elements_map()); if (!AllocationBuilder::CanAllocateSloppyArgumentElements( mapped_count, sloppy_arguments_elements_map)) { return nullptr; @@ -1617,7 +1620,7 @@ Node* JSCreateLowering::AllocateElements(Node* effect, Node* control, // Actually allocate the backing store. AllocationBuilder a(jsgraph(), effect, control); - a.AllocateArray(capacity, MapRef(broker(), elements_map), allocation); + a.AllocateArray(capacity, MakeRef(broker(), elements_map), allocation); for (int i = 0; i < capacity; ++i) { Node* index = jsgraph()->Constant(i); a.Store(access, index, value); @@ -1642,7 +1645,7 @@ Node* JSCreateLowering::AllocateElements(Node* effect, Node* control, // Actually allocate the backing store. AllocationBuilder a(jsgraph(), effect, control); - a.AllocateArray(capacity, MapRef(broker(), elements_map), allocation); + a.AllocateArray(capacity, MakeRef(broker(), elements_map), allocation); for (int i = 0; i < capacity; ++i) { Node* index = jsgraph()->Constant(i); a.Store(access, index, values[i]); @@ -1650,9 +1653,9 @@ Node* JSCreateLowering::AllocateElements(Node* effect, Node* control, return a.Finish(); } -Node* JSCreateLowering::AllocateFastLiteral(Node* effect, Node* control, - JSObjectRef boilerplate, - AllocationType allocation) { +base::Optional<Node*> JSCreateLowering::TryAllocateFastLiteral( + Node* effect, Node* control, JSObjectRef boilerplate, + AllocationType allocation) { // Compute the in-object properties to store first (might have effects). MapRef boilerplate_map = boilerplate.map(); ZoneVector<std::pair<FieldAccess, Node*>> inobject_fields(zone()); @@ -1686,15 +1689,17 @@ Node* JSCreateLowering::AllocateFastLiteral(Node* effect, Node* control, Node* value; if (boilerplate_value.IsJSObject()) { JSObjectRef boilerplate_object = boilerplate_value.AsJSObject(); - value = effect = - AllocateFastLiteral(effect, control, boilerplate_object, allocation); + base::Optional<Node*> maybe_value = TryAllocateFastLiteral( + effect, control, boilerplate_object, allocation); + if (!maybe_value.has_value()) return {}; + value = effect = maybe_value.value(); } else if (property_details.representation().IsDouble()) { double number = boilerplate_value.AsHeapNumber().value(); // Allocate a mutable HeapNumber box and store the value into it. AllocationBuilder builder(jsgraph(), effect, control); builder.Allocate(HeapNumber::kSize, allocation); builder.Store(AccessBuilder::ForMap(), - MapRef(broker(), factory()->heap_number_map())); + MakeRef(broker(), factory()->heap_number_map())); builder.Store(AccessBuilder::ForHeapNumberValue(), jsgraph()->Constant(number)); value = effect = builder.Finish(); @@ -1712,6 +1717,9 @@ Node* JSCreateLowering::AllocateFastLiteral(Node* effect, Node* control, int const boilerplate_length = boilerplate_map.GetInObjectProperties(); for (int index = static_cast<int>(inobject_fields.size()); index < boilerplate_length; ++index) { + DCHECK(!V8_MAP_PACKING_BOOL); + // TODO(wenyuzhao): Fix incorrect MachineType when V8_MAP_PACKING is + // enabled. FieldAccess access = AccessBuilder::ForJSObjectInObjectProperty(boilerplate_map, index); Node* value = jsgraph()->HeapConstant(factory()->one_pointer_filler_map()); @@ -1719,8 +1727,10 @@ Node* JSCreateLowering::AllocateFastLiteral(Node* effect, Node* control, } // Setup the elements backing store. - Node* elements = - AllocateFastLiteralElements(effect, control, boilerplate, allocation); + base::Optional<Node*> maybe_elements = + TryAllocateFastLiteralElements(effect, control, boilerplate, allocation); + if (!maybe_elements.has_value()) return {}; + Node* elements = maybe_elements.value(); if (elements->op()->EffectOutputCount() > 0) effect = elements; // Actually allocate and initialize the object. @@ -1743,9 +1753,9 @@ Node* JSCreateLowering::AllocateFastLiteral(Node* effect, Node* control, return builder.Finish(); } -Node* JSCreateLowering::AllocateFastLiteralElements(Node* effect, Node* control, - JSObjectRef boilerplate, - AllocationType allocation) { +base::Optional<Node*> JSCreateLowering::TryAllocateFastLiteralElements( + Node* effect, Node* control, JSObjectRef boilerplate, + AllocationType allocation) { FixedArrayBaseRef boilerplate_elements = boilerplate.elements().value(); // Empty or copy-on-write elements just store a constant. @@ -1764,7 +1774,7 @@ Node* JSCreateLowering::AllocateFastLiteralElements(Node* effect, Node* control, if (elements_map.instance_type() == FIXED_DOUBLE_ARRAY_TYPE) { FixedDoubleArrayRef elements = boilerplate_elements.AsFixedDoubleArray(); for (int i = 0; i < elements_length; ++i) { - Float64 value = elements.get(i); + Float64 value = elements.GetFromImmutableFixedDoubleArray(i); if (value.is_hole_nan()) { elements_values[i] = jsgraph()->TheHoleConstant(); } else { @@ -1774,10 +1784,14 @@ Node* JSCreateLowering::AllocateFastLiteralElements(Node* effect, Node* control, } else { FixedArrayRef elements = boilerplate_elements.AsFixedArray(); for (int i = 0; i < elements_length; ++i) { - ObjectRef element_value = elements.get(i); + base::Optional<ObjectRef> maybe_element_value = elements.TryGet(i); + if (!maybe_element_value.has_value()) return {}; + ObjectRef element_value = maybe_element_value.value(); if (element_value.IsJSObject()) { - elements_values[i] = effect = AllocateFastLiteral( + base::Optional<Node*> maybe_value = TryAllocateFastLiteral( effect, control, element_value.AsJSObject(), allocation); + if (!maybe_value.has_value()) return {}; + elements_values[i] = effect = maybe_value.value(); } else { elements_values[i] = jsgraph()->Constant(element_value); } diff --git a/deps/v8/src/compiler/js-create-lowering.h b/deps/v8/src/compiler/js-create-lowering.h index 0edbda79a0..e780b685bf 100644 --- a/deps/v8/src/compiler/js-create-lowering.h +++ b/deps/v8/src/compiler/js-create-lowering.h @@ -97,6 +97,12 @@ class V8_EXPORT_PRIVATE JSCreateLowering final Node* arguments_length, const SharedFunctionInfoRef& shared, bool* has_aliased_arguments); + base::Optional<Node*> TryAllocateFastLiteral(Node* effect, Node* control, + JSObjectRef boilerplate, + AllocationType allocation); + base::Optional<Node*> TryAllocateFastLiteralElements( + Node* effect, Node* control, JSObjectRef boilerplate, + AllocationType allocation); Node* AllocateElements(Node* effect, Node* control, ElementsKind elements_kind, int capacity, @@ -107,11 +113,6 @@ class V8_EXPORT_PRIVATE JSCreateLowering final ElementsKind elements_kind, std::vector<Node*> const& values, AllocationType allocation); - Node* AllocateFastLiteral(Node* effect, Node* control, - JSObjectRef boilerplate, AllocationType allocation); - Node* AllocateFastLiteralElements(Node* effect, Node* control, - JSObjectRef boilerplate, - AllocationType allocation); Node* AllocateLiteralRegExp(Node* effect, Node* control, RegExpBoilerplateDescriptionRef boilerplate); diff --git a/deps/v8/src/compiler/js-generic-lowering.cc b/deps/v8/src/compiler/js-generic-lowering.cc index 71a0d43a41..935581b346 100644 --- a/deps/v8/src/compiler/js-generic-lowering.cc +++ b/deps/v8/src/compiler/js-generic-lowering.cc @@ -7,6 +7,7 @@ #include "src/ast/ast.h" #include "src/builtins/builtins-constructor.h" #include "src/codegen/code-factory.h" +#include "src/codegen/interface-descriptors-inl.h" #include "src/compiler/access-builder.h" #include "src/compiler/common-operator.h" #include "src/compiler/js-graph.h" @@ -715,8 +716,8 @@ void JSGenericLowering::LowerJSCreateLiteralArray(Node* node) { void JSGenericLowering::LowerJSGetTemplateObject(Node* node) { JSGetTemplateObjectNode n(node); GetTemplateObjectParameters const& p = n.Parameters(); - SharedFunctionInfoRef shared(broker(), p.shared()); - TemplateObjectDescriptionRef description(broker(), p.description()); + SharedFunctionInfoRef shared = MakeRef(broker(), p.shared()); + TemplateObjectDescriptionRef description = MakeRef(broker(), p.description()); DCHECK_EQ(node->op()->ControlInputCount(), 1); node->RemoveInput(NodeProperties::FirstControlIndex(node)); @@ -1443,7 +1444,7 @@ void JSGenericLowering::LowerJSStackCheck(Node* node) { } void JSGenericLowering::LowerJSDebugger(Node* node) { - ReplaceWithBuiltinCall(node, Builtins::kHandleDebuggerStatement); + ReplaceWithRuntimeCall(node, Runtime::kHandleDebuggerStatement); } Zone* JSGenericLowering::zone() const { return graph()->zone(); } diff --git a/deps/v8/src/compiler/js-graph.cc b/deps/v8/src/compiler/js-graph.cc index aca12b4cb5..652c7391fa 100644 --- a/deps/v8/src/compiler/js-graph.cc +++ b/deps/v8/src/compiler/js-graph.cc @@ -20,7 +20,8 @@ namespace compiler { Node* JSGraph::CEntryStubConstant(int result_size, SaveFPRegsMode save_doubles, ArgvMode argv_mode, bool builtin_exit_frame) { - if (save_doubles == kDontSaveFPRegs && argv_mode == kArgvOnStack) { + if (save_doubles == SaveFPRegsMode::kIgnore && + argv_mode == ArgvMode::kStack) { DCHECK(result_size >= 1 && result_size <= 3); if (!builtin_exit_frame) { Node** ptr = nullptr; diff --git a/deps/v8/src/compiler/js-graph.h b/deps/v8/src/compiler/js-graph.h index e86bb594ba..c38d868db4 100644 --- a/deps/v8/src/compiler/js-graph.h +++ b/deps/v8/src/compiler/js-graph.h @@ -38,10 +38,9 @@ class V8_EXPORT_PRIVATE JSGraph : public MachineGraph { JSGraph& operator=(const JSGraph&) = delete; // CEntryStubs are cached depending on the result size and other flags. - Node* CEntryStubConstant(int result_size, - SaveFPRegsMode save_doubles = kDontSaveFPRegs, - ArgvMode argv_mode = kArgvOnStack, - bool builtin_exit_frame = false); + Node* CEntryStubConstant( + int result_size, SaveFPRegsMode save_doubles = SaveFPRegsMode::kIgnore, + ArgvMode argv_mode = ArgvMode::kStack, bool builtin_exit_frame = false); // Used for padding frames. (alias: the hole) Node* PaddingConstant() { return TheHoleConstant(); } diff --git a/deps/v8/src/compiler/js-heap-broker.cc b/deps/v8/src/compiler/js-heap-broker.cc index ac90e4c667..13cd02ab08 100644 --- a/deps/v8/src/compiler/js-heap-broker.cc +++ b/deps/v8/src/compiler/js-heap-broker.cc @@ -4,291 +4,26 @@ #include "src/compiler/js-heap-broker.h" -#include "src/common/globals.h" -#include "src/compiler/heap-refs.h" - #ifdef ENABLE_SLOW_DCHECKS #include <algorithm> #endif -#include "include/v8-fast-api-calls.h" -#include "src/api/api-inl.h" -#include "src/ast/modules.h" #include "src/codegen/code-factory.h" #include "src/codegen/optimized-compilation-info.h" -#include "src/compiler/access-info.h" -#include "src/compiler/graph-reducer.h" -#include "src/compiler/per-isolate-compiler-cache.h" -#include "src/execution/protectors-inl.h" +#include "src/handles/handles-inl.h" +#include "src/ic/handler-configuration.h" #include "src/init/bootstrapper.h" -#include "src/objects/allocation-site-inl.h" -#include "src/objects/api-callbacks.h" -#include "src/objects/cell-inl.h" -#include "src/objects/heap-number-inl.h" -#include "src/objects/instance-type-inl.h" -#include "src/objects/js-array-buffer-inl.h" +#include "src/objects/feedback-cell.h" #include "src/objects/js-array-inl.h" -#include "src/objects/js-regexp-inl.h" -#include "src/objects/literal-objects-inl.h" -#include "src/objects/module-inl.h" #include "src/objects/objects-inl.h" -#include "src/objects/property-details.h" -#include "src/objects/template-objects-inl.h" -#include "src/objects/templates.h" -#include "src/utils/utils.h" +#include "src/objects/oddball.h" +#include "src/objects/property-cell.h" namespace v8 { namespace internal { namespace compiler { #define TRACE(broker, x) TRACE_BROKER(broker, x) -#define TRACE_MISSING(broker, x) TRACE_BROKER_MISSING(broker, x) - -#define FORWARD_DECL(Name) class Name##Data; -HEAP_BROKER_SERIALIZED_OBJECT_LIST(FORWARD_DECL) -HEAP_BROKER_POSSIBLY_BACKGROUND_SERIALIZED_OBJECT_LIST(FORWARD_DECL) -HEAP_BROKER_BACKGROUND_SERIALIZED_OBJECT_LIST(FORWARD_DECL) -HEAP_BROKER_NEVER_SERIALIZED_OBJECT_LIST(FORWARD_DECL) -#undef FORWARD_DECL - -// There are several kinds of ObjectData values. -// -// kSmi: The underlying V8 object is a Smi and the data is an instance of the -// base class (ObjectData), i.e. it's basically just the handle. Because the -// object is a Smi, it's safe to access the handle in order to extract the -// number value, and AsSmi() does exactly that. -// -// kSerializedHeapObject: The underlying V8 object is a HeapObject and the -// data is an instance of the corresponding (most-specific) subclass, e.g. -// JSFunctionData, which provides serialized information about the object. -// -// kBackgroundSerializedHeapObject: Like kSerializedHeapObject, but -// allows serialization from the background thread. -// -// kUnserializedHeapObject: The underlying V8 object is a HeapObject and the -// data is an instance of the base class (ObjectData), i.e. it basically -// carries no information other than the handle. -// -// kNeverSerializedHeapObject: The underlying V8 object is a (potentially -// mutable) HeapObject and the data is an instance of ObjectData. Its handle -// must be persistent so that the GC can update it at a safepoint. Via this -// handle, the object can be accessed concurrently to the main thread. To be -// used the flag --turbo-direct-heap-access must be on. -// -// kUnserializedReadOnlyHeapObject: The underlying V8 object is a read-only -// HeapObject and the data is an instance of ObjectData. For -// ReadOnlyHeapObjects, it is OK to access heap even from off-thread, so -// these objects need not be serialized. -enum ObjectDataKind { - kSmi, - kSerializedHeapObject, - kBackgroundSerializedHeapObject, - kUnserializedHeapObject, - kNeverSerializedHeapObject, - kUnserializedReadOnlyHeapObject -}; - -namespace { -bool IsReadOnlyHeapObject(Object object) { - DisallowGarbageCollection no_gc; - return (object.IsCode() && Code::cast(object).is_builtin()) || - (object.IsHeapObject() && - ReadOnlyHeap::Contains(HeapObject::cast(object))); -} - -template <class T> -constexpr bool IsSerializedHeapObject() { - return false; -} - -#define DEFINE_MARKER(Name) \ - template <> \ - constexpr bool IsSerializedHeapObject<Name>() { \ - return true; \ - } \ - STATIC_ASSERT(IsSerializedHeapObject<Name>()); -HEAP_BROKER_SERIALIZED_OBJECT_LIST(DEFINE_MARKER) -#undef DEFINE_MARKER -} // namespace - -class ObjectData : public ZoneObject { - public: - ObjectData(JSHeapBroker* broker, ObjectData** storage, Handle<Object> object, - ObjectDataKind kind) - : object_(object), kind_(kind) { - // This assignment ensures we don't end up inserting the same object - // in an endless recursion. - *storage = this; - - TRACE(broker, "Creating data " << this << " for handle " << object.address() - << " (" << Brief(*object) << ")"); - - // It is safe to access read only heap objects and builtins from a - // background thread. When we read fileds of these objects, we may create - // ObjectData on the background thread even without a canonical handle - // scope. This is safe too since we don't create handles but just get - // handles from read only root table or builtins table which is what - // canonical scope uses as well. For all other objects we should have - // created ObjectData in canonical handle scope on the main thread. - CHECK_IMPLIES( - broker->mode() == JSHeapBroker::kDisabled || - broker->mode() == JSHeapBroker::kSerializing, - broker->isolate()->handle_scope_data()->canonical_scope != nullptr); - CHECK_IMPLIES(broker->mode() == JSHeapBroker::kSerialized, - kind == kUnserializedReadOnlyHeapObject || kind == kSmi || - kind == kNeverSerializedHeapObject || - kind == kBackgroundSerializedHeapObject); - CHECK_IMPLIES(kind == kUnserializedReadOnlyHeapObject, - IsReadOnlyHeapObject(*object)); - } - -#define DECLARE_IS(Name) bool Is##Name() const; - HEAP_BROKER_SERIALIZED_OBJECT_LIST(DECLARE_IS) - HEAP_BROKER_POSSIBLY_BACKGROUND_SERIALIZED_OBJECT_LIST(DECLARE_IS) - HEAP_BROKER_BACKGROUND_SERIALIZED_OBJECT_LIST(DECLARE_IS) - HEAP_BROKER_NEVER_SERIALIZED_OBJECT_LIST(DECLARE_IS) -#undef DECLARE_IS - -#define DECLARE_AS(Name) Name##Data* As##Name(); - HEAP_BROKER_SERIALIZED_OBJECT_LIST(DECLARE_AS) - HEAP_BROKER_POSSIBLY_BACKGROUND_SERIALIZED_OBJECT_LIST(DECLARE_AS) - HEAP_BROKER_BACKGROUND_SERIALIZED_OBJECT_LIST(DECLARE_AS) - HEAP_BROKER_NEVER_SERIALIZED_OBJECT_LIST(DECLARE_AS) -#undef DECLARE_AS - - Handle<Object> object() const { return object_; } - ObjectDataKind kind() const { return kind_; } - bool is_smi() const { return kind_ == kSmi; } - bool should_access_heap() const { - return kind_ == kUnserializedHeapObject || - kind_ == kNeverSerializedHeapObject || - kind_ == kUnserializedReadOnlyHeapObject; - } - bool IsNull() const { return object_->IsNull(); } - -#ifdef DEBUG - enum class Usage{kUnused, kOnlyIdentityUsed, kDataUsed}; - mutable Usage used_status = Usage::kUnused; -#endif // DEBUG - - private: - Handle<Object> const object_; - ObjectDataKind const kind_; -}; - -class HeapObjectData : public ObjectData { - public: - HeapObjectData(JSHeapBroker* broker, ObjectData** storage, - Handle<HeapObject> object, - ObjectDataKind kind = ObjectDataKind::kSerializedHeapObject); - - bool boolean_value() const { return boolean_value_; } - ObjectData* map() const { return map_; } - InstanceType GetMapInstanceType() const; - - static HeapObjectData* Serialize(JSHeapBroker* broker, - Handle<HeapObject> object); - - private: - bool const boolean_value_; - ObjectData* const map_; -}; - -class PropertyCellData : public HeapObjectData { - public: - PropertyCellData(JSHeapBroker* broker, ObjectData** storage, - Handle<PropertyCell> object, - ObjectDataKind kind = ObjectDataKind::kSerializedHeapObject); - - bool Serialize(JSHeapBroker* broker); - - PropertyDetails property_details() const { - CHECK(serialized()); - return property_details_; - } - - ObjectData* value() const { - DCHECK(serialized()); - return value_; - } - - private: - PropertyDetails property_details_ = PropertyDetails::Empty(); - ObjectData* value_ = nullptr; - - bool serialized() const { return value_ != nullptr; } -}; - -// TODO(mslekova): Once we have real-world usage data, we might want to -// reimplement this as sorted vector instead, to reduce the memory overhead. -typedef ZoneMap<ObjectData*, HolderLookupResult> KnownReceiversMap; - -class FunctionTemplateInfoData : public HeapObjectData { - public: - FunctionTemplateInfoData(JSHeapBroker* broker, ObjectData** storage, - Handle<FunctionTemplateInfo> object); - - bool is_signature_undefined() const { return is_signature_undefined_; } - bool accept_any_receiver() const { return accept_any_receiver_; } - bool has_call_code() const { return has_call_code_; } - - void SerializeCallCode(JSHeapBroker* broker); - ObjectData* call_code() const { return call_code_; } - Address c_function() const { return c_function_; } - const CFunctionInfo* c_signature() const { return c_signature_; } - KnownReceiversMap& known_receivers() { return known_receivers_; } - - private: - bool is_signature_undefined_ = false; - bool accept_any_receiver_ = false; - bool has_call_code_ = false; - - ObjectData* call_code_ = nullptr; - const Address c_function_; - const CFunctionInfo* const c_signature_; - KnownReceiversMap known_receivers_; -}; - -class CallHandlerInfoData : public HeapObjectData { - public: - CallHandlerInfoData(JSHeapBroker* broker, ObjectData** storage, - Handle<CallHandlerInfo> object); - - Address callback() const { return callback_; } - - void Serialize(JSHeapBroker* broker); - ObjectData* data() const { return data_; } - - private: - Address const callback_; - - ObjectData* data_ = nullptr; -}; - -FunctionTemplateInfoData::FunctionTemplateInfoData( - JSHeapBroker* broker, ObjectData** storage, - Handle<FunctionTemplateInfo> object) - : HeapObjectData(broker, storage, object), - c_function_(v8::ToCData<Address>(object->GetCFunction())), - c_signature_(v8::ToCData<CFunctionInfo*>(object->GetCSignature())), - known_receivers_(broker->zone()) { - DCHECK(!FLAG_turbo_direct_heap_access); - auto function_template_info = Handle<FunctionTemplateInfo>::cast(object); - is_signature_undefined_ = - function_template_info->signature().IsUndefined(broker->isolate()); - accept_any_receiver_ = function_template_info->accept_any_receiver(); - - CallOptimization call_optimization(broker->isolate(), object); - has_call_code_ = call_optimization.is_simple_api_call(); -} - -CallHandlerInfoData::CallHandlerInfoData(JSHeapBroker* broker, - ObjectData** storage, - Handle<CallHandlerInfo> object) - : HeapObjectData(broker, storage, object), - callback_(v8::ToCData<Address>(object->callback())) { - DCHECK(!FLAG_turbo_direct_heap_access); -} // These definitions are here in order to please the linker, which in debug mode // sometimes requires static constants to be defined in .cc files. @@ -299,2243 +34,6 @@ void JSHeapBroker::IncrementTracingIndentation() { ++trace_indentation_; } void JSHeapBroker::DecrementTracingIndentation() { --trace_indentation_; } -PropertyCellData::PropertyCellData(JSHeapBroker* broker, ObjectData** storage, - Handle<PropertyCell> object, - ObjectDataKind kind) - : HeapObjectData(broker, storage, object, kind) {} - -bool PropertyCellData::Serialize(JSHeapBroker* broker) { - if (serialized()) return true; - - TraceScope tracer(broker, this, "PropertyCellData::Serialize"); - auto cell = Handle<PropertyCell>::cast(object()); - - // While this code runs on a background thread, the property cell might - // undergo state transitions via calls to PropertyCell::Transition. These - // transitions follow a certain protocol on which we rely here to ensure that - // we only report success when we can guarantee consistent data. A key - // property is that after transitioning from cell type A to B (A != B), there - // will never be a transition back to A, unless A is kConstant and the new - // value is the hole (i.e. the property cell was invalidated, which is a final - // state). - - PropertyDetails property_details = cell->property_details(kAcquireLoad); - - Handle<Object> value = - broker->CanonicalPersistentHandle(cell->value(kAcquireLoad)); - if (broker->ObjectMayBeUninitialized(value)) { - DCHECK(!broker->IsMainThread()); - return false; - } - - { - PropertyDetails property_details_again = - cell->property_details(kAcquireLoad); - if (property_details != property_details_again) { - DCHECK(!broker->IsMainThread()); - return false; - } - } - - if (property_details.cell_type() == PropertyCellType::kConstant) { - Handle<Object> value_again = - broker->CanonicalPersistentHandle(cell->value(kAcquireLoad)); - if (*value != *value_again) { - DCHECK(!broker->IsMainThread()); - return false; - } - } - - ObjectData* value_data = broker->TryGetOrCreateData(value, false); - if (value_data == nullptr) { - DCHECK(!broker->IsMainThread()); - return false; - } - - PropertyCell::CheckDataIsCompatible(property_details, *value); - - DCHECK(!serialized()); - property_details_ = property_details; - value_ = value_data; - DCHECK(serialized()); - return true; -} - -void FunctionTemplateInfoData::SerializeCallCode(JSHeapBroker* broker) { - if (call_code_ != nullptr) return; - - TraceScope tracer(broker, this, - "FunctionTemplateInfoData::SerializeCallCode"); - auto function_template_info = Handle<FunctionTemplateInfo>::cast(object()); - call_code_ = - broker->GetOrCreateData(function_template_info->call_code(kAcquireLoad)); - if (call_code_->should_access_heap()) { - // TODO(mvstanton): When ObjectRef is in the never serialized list, this - // code can be removed. - broker->GetOrCreateData( - Handle<CallHandlerInfo>::cast(call_code_->object())->data()); - } else { - call_code_->AsCallHandlerInfo()->Serialize(broker); - } -} - -void CallHandlerInfoData::Serialize(JSHeapBroker* broker) { - if (data_ != nullptr) return; - - TraceScope tracer(broker, this, "CallHandlerInfoData::Serialize"); - auto call_handler_info = Handle<CallHandlerInfo>::cast(object()); - data_ = broker->GetOrCreateData(call_handler_info->data()); -} - -class JSReceiverData : public HeapObjectData { - public: - JSReceiverData(JSHeapBroker* broker, ObjectData** storage, - Handle<JSReceiver> object) - : HeapObjectData(broker, storage, object) {} -}; - -class JSObjectData : public JSReceiverData { - public: - JSObjectData(JSHeapBroker* broker, ObjectData** storage, - Handle<JSObject> object); - - // Recursive serialization of all reachable JSObjects. - void SerializeAsBoilerplate(JSHeapBroker* broker); - ObjectData* GetInobjectField(int property_index) const; - - // Shallow serialization of {elements}. - void SerializeElements(JSHeapBroker* broker); - bool serialized_elements() const { return serialized_elements_; } - ObjectData* elements() const; - - void SerializeObjectCreateMap(JSHeapBroker* broker); - - ObjectData* object_create_map( - JSHeapBroker* broker) const { // Can be nullptr. - if (!serialized_object_create_map_) { - DCHECK_NULL(object_create_map_); - TRACE_MISSING(broker, "object_create_map on " << this); - } - return object_create_map_; - } - - ObjectData* GetOwnConstantElement( - JSHeapBroker* broker, uint32_t index, - SerializationPolicy policy = SerializationPolicy::kAssumeSerialized); - ObjectData* GetOwnFastDataProperty( - JSHeapBroker* broker, Representation representation, - FieldIndex field_index, - SerializationPolicy policy = SerializationPolicy::kAssumeSerialized); - ObjectData* GetOwnDictionaryProperty(JSHeapBroker* broker, - InternalIndex dict_index, - SerializationPolicy policy); - - // This method is only used to assert our invariants. - bool cow_or_empty_elements_tenured() const; - - private: - void SerializeRecursiveAsBoilerplate(JSHeapBroker* broker, int max_depths); - - ObjectData* elements_ = nullptr; - bool cow_or_empty_elements_tenured_ = false; - // The {serialized_as_boilerplate} flag is set when all recursively - // reachable JSObjects are serialized. - bool serialized_as_boilerplate_ = false; - bool serialized_elements_ = false; - - ZoneVector<ObjectData*> inobject_fields_; - - bool serialized_object_create_map_ = false; - ObjectData* object_create_map_ = nullptr; - - // Elements (indexed properties) that either - // (1) are known to exist directly on the object as non-writable and - // non-configurable, or (2) are known not to (possibly they don't exist at - // all). In case (2), the second pair component is nullptr. - ZoneVector<std::pair<uint32_t, ObjectData*>> own_constant_elements_; - // Properties that either: - // (1) are known to exist directly on the object, or - // (2) are known not to (possibly they don't exist at all). - // In case (2), the second pair component is nullptr. - // For simplicity, this may in theory overlap with inobject_fields_. - // For fast mode objects, the keys of the map are the property_index() values - // of the respective property FieldIndex'es. For slow mode objects, the keys - // are the dictionary indicies. - ZoneUnorderedMap<int, ObjectData*> own_properties_; -}; - -void JSObjectData::SerializeObjectCreateMap(JSHeapBroker* broker) { - if (serialized_object_create_map_) return; - serialized_object_create_map_ = true; - - TraceScope tracer(broker, this, "JSObjectData::SerializeObjectCreateMap"); - Handle<JSObject> jsobject = Handle<JSObject>::cast(object()); - - if (jsobject->map().is_prototype_map()) { - Handle<Object> maybe_proto_info(jsobject->map().prototype_info(), - broker->isolate()); - if (maybe_proto_info->IsPrototypeInfo()) { - auto proto_info = Handle<PrototypeInfo>::cast(maybe_proto_info); - if (proto_info->HasObjectCreateMap()) { - DCHECK_NULL(object_create_map_); - object_create_map_ = - broker->GetOrCreateData(proto_info->ObjectCreateMap()); - } - } - } -} - -namespace { - -base::Optional<ObjectRef> GetOwnElementFromHeap(JSHeapBroker* broker, - Handle<Object> receiver, - uint32_t index, - bool constant_only) { - LookupIterator it(broker->isolate(), receiver, index, LookupIterator::OWN); - if (it.state() == LookupIterator::DATA && - (!constant_only || (it.IsReadOnly() && !it.IsConfigurable()))) { - return ObjectRef(broker, - broker->CanonicalPersistentHandle(it.GetDataValue())); - } - return base::nullopt; -} - -ObjectRef GetOwnFastDataPropertyFromHeap(JSHeapBroker* broker, - Handle<JSObject> receiver, - Representation representation, - FieldIndex field_index) { - Handle<Object> constant = - JSObject::FastPropertyAt(receiver, representation, field_index); - return ObjectRef(broker, constant); -} - -ObjectRef GetOwnDictionaryPropertyFromHeap(JSHeapBroker* broker, - Handle<JSObject> receiver, - InternalIndex dict_index) { - Handle<Object> constant = - JSObject::DictionaryPropertyAt(receiver, dict_index); - return ObjectRef(broker, constant); -} - -} // namespace - -ObjectData* JSObjectData::GetOwnConstantElement(JSHeapBroker* broker, - uint32_t index, - SerializationPolicy policy) { - for (auto const& p : own_constant_elements_) { - if (p.first == index) return p.second; - } - - if (policy == SerializationPolicy::kAssumeSerialized) { - TRACE_MISSING(broker, "knowledge about index " << index << " on " << this); - return nullptr; - } - - base::Optional<ObjectRef> element = - GetOwnElementFromHeap(broker, object(), index, true); - ObjectData* result = element.has_value() ? element->data() : nullptr; - own_constant_elements_.push_back({index, result}); - return result; -} - -ObjectData* JSObjectData::GetOwnFastDataProperty(JSHeapBroker* broker, - Representation representation, - FieldIndex field_index, - SerializationPolicy policy) { - auto p = own_properties_.find(field_index.property_index()); - if (p != own_properties_.end()) return p->second; - - if (policy == SerializationPolicy::kAssumeSerialized) { - TRACE_MISSING(broker, "knowledge about fast property with index " - << field_index.property_index() << " on " - << this); - return nullptr; - } - - ObjectRef property = GetOwnFastDataPropertyFromHeap( - broker, Handle<JSObject>::cast(object()), representation, field_index); - ObjectData* result(property.data()); - own_properties_.insert(std::make_pair(field_index.property_index(), result)); - return result; -} - -ObjectData* JSObjectData::GetOwnDictionaryProperty(JSHeapBroker* broker, - InternalIndex dict_index, - SerializationPolicy policy) { - auto p = own_properties_.find(dict_index.as_int()); - if (p != own_properties_.end()) return p->second; - - if (policy == SerializationPolicy::kAssumeSerialized) { - TRACE_MISSING(broker, "knowledge about dictionary property with index " - << dict_index.as_int() << " on " << this); - return nullptr; - } - - ObjectRef property = GetOwnDictionaryPropertyFromHeap( - broker, Handle<JSObject>::cast(object()), dict_index); - ObjectData* result(property.data()); - own_properties_.insert(std::make_pair(dict_index.as_int(), result)); - return result; -} - -class JSTypedArrayData : public JSObjectData { - public: - JSTypedArrayData(JSHeapBroker* broker, ObjectData** storage, - Handle<JSTypedArray> object) - : JSObjectData(broker, storage, object) {} - - // TODO(v8:7790): Once JSObject is no longer serialized, also make - // JSTypedArrayRef never-serialized. - STATIC_ASSERT(IsSerializedHeapObject<JSObject>()); - - void Serialize(JSHeapBroker* broker); - bool serialized() const { return serialized_; } - - bool is_on_heap() const { return is_on_heap_; } - size_t length() const { return length_; } - void* data_ptr() const { return data_ptr_; } - - ObjectData* buffer() const { return buffer_; } - - private: - bool serialized_ = false; - bool is_on_heap_ = false; - size_t length_ = 0; - void* data_ptr_ = nullptr; - ObjectData* buffer_ = nullptr; -}; - -void JSTypedArrayData::Serialize(JSHeapBroker* broker) { - if (serialized_) return; - serialized_ = true; - - TraceScope tracer(broker, this, "JSTypedArrayData::Serialize"); - Handle<JSTypedArray> typed_array = Handle<JSTypedArray>::cast(object()); - - is_on_heap_ = typed_array->is_on_heap(); - length_ = typed_array->length(); - data_ptr_ = typed_array->DataPtr(); - - if (!is_on_heap()) { - DCHECK_NULL(buffer_); - buffer_ = broker->GetOrCreateData(typed_array->buffer()); - } -} - -class ArrayBoilerplateDescriptionData : public HeapObjectData { - public: - ArrayBoilerplateDescriptionData(JSHeapBroker* broker, ObjectData** storage, - Handle<ArrayBoilerplateDescription> object) - : HeapObjectData(broker, storage, object), - constants_elements_length_(object->constant_elements().length()) { - DCHECK(!FLAG_turbo_direct_heap_access); - } - - int constants_elements_length() const { return constants_elements_length_; } - - private: - int const constants_elements_length_; -}; - -class ObjectBoilerplateDescriptionData : public HeapObjectData { - public: - ObjectBoilerplateDescriptionData(JSHeapBroker* broker, ObjectData** storage, - Handle<ObjectBoilerplateDescription> object) - : HeapObjectData(broker, storage, object), size_(object->size()) { - DCHECK(!FLAG_turbo_direct_heap_access); - } - - int size() const { return size_; } - - private: - int const size_; -}; - -class JSDataViewData : public JSObjectData { - public: - JSDataViewData(JSHeapBroker* broker, ObjectData** storage, - Handle<JSDataView> object); - - size_t byte_length() const { return byte_length_; } - - private: - size_t const byte_length_; -}; - -class JSBoundFunctionData : public JSObjectData { - public: - JSBoundFunctionData(JSHeapBroker* broker, ObjectData** storage, - Handle<JSBoundFunction> object); - - bool Serialize(JSHeapBroker* broker); - bool serialized() const { return serialized_; } - - ObjectData* bound_target_function() const { - DCHECK(!FLAG_turbo_direct_heap_access); - return bound_target_function_; - } - ObjectData* bound_this() const { - DCHECK(!FLAG_turbo_direct_heap_access); - return bound_this_; - } - ObjectData* bound_arguments() const { - DCHECK(!FLAG_turbo_direct_heap_access); - return bound_arguments_; - } - - private: - bool serialized_ = false; - - ObjectData* bound_target_function_ = nullptr; - ObjectData* bound_this_ = nullptr; - ObjectData* bound_arguments_ = nullptr; -}; - -class JSFunctionData : public JSObjectData { - public: - JSFunctionData(JSHeapBroker* broker, ObjectData** storage, - Handle<JSFunction> object); - - bool has_feedback_vector() const { return has_feedback_vector_; } - bool has_initial_map() const { return has_initial_map_; } - bool has_prototype() const { return has_prototype_; } - bool PrototypeRequiresRuntimeLookup() const { - return PrototypeRequiresRuntimeLookup_; - } - - void Serialize(JSHeapBroker* broker); - bool serialized() const { return serialized_; } - - void SerializeCodeAndFeedback(JSHeapBroker* broker); - bool serialized_code_and_feedback() const { - return serialized_code_and_feedback_; - } - - ObjectData* context() const { return context_; } - ObjectData* native_context() const { return native_context_; } - ObjectData* initial_map() const { return initial_map_; } - ObjectData* prototype() const { return prototype_; } - ObjectData* shared() const { return shared_; } - ObjectData* raw_feedback_cell() const { - DCHECK(serialized_code_and_feedback()); - return feedback_cell_; - } - ObjectData* feedback_vector() const { - DCHECK(serialized_code_and_feedback()); - return feedback_vector_; - } - ObjectData* code() const { - DCHECK(serialized_code_and_feedback()); - DCHECK(!FLAG_turbo_direct_heap_access); - return code_; - } - int initial_map_instance_size_with_min_slack() const { - CHECK(serialized_); - return initial_map_instance_size_with_min_slack_; - } - - private: - bool has_feedback_vector_; - bool has_initial_map_; - bool has_prototype_; - bool PrototypeRequiresRuntimeLookup_; - - bool serialized_ = false; - bool serialized_code_and_feedback_ = false; - - ObjectData* context_ = nullptr; - ObjectData* native_context_ = nullptr; - ObjectData* initial_map_ = nullptr; - ObjectData* prototype_ = nullptr; - ObjectData* shared_ = nullptr; - ObjectData* feedback_vector_ = nullptr; - ObjectData* feedback_cell_ = nullptr; - ObjectData* code_ = nullptr; - int initial_map_instance_size_with_min_slack_; -}; - -class RegExpBoilerplateDescriptionData : public HeapObjectData { - public: - RegExpBoilerplateDescriptionData(JSHeapBroker* broker, ObjectData** storage, - Handle<RegExpBoilerplateDescription> object) - : HeapObjectData(broker, storage, object) {} - - void Serialize(JSHeapBroker* broker); - ObjectData* data() const { - CHECK(serialized_); - return data_; - } - ObjectData* source() const { - CHECK(serialized_); - return source_; - } - int flags() const { - CHECK(serialized_); - return flags_; - } - - private: - bool serialized_ = false; - ObjectData* data_ = nullptr; - ObjectData* source_ = nullptr; - int flags_; -}; - -class HeapNumberData : public HeapObjectData { - public: - HeapNumberData(JSHeapBroker* broker, ObjectData** storage, - Handle<HeapNumber> object, - ObjectDataKind kind = ObjectDataKind::kSerializedHeapObject) - : HeapObjectData(broker, storage, object, kind), - value_(object->value()) {} - - double value() const { return value_; } - - private: - double const value_; -}; - -class ContextData : public HeapObjectData { - public: - ContextData(JSHeapBroker* broker, ObjectData** storage, - Handle<Context> object); - - ObjectData* previous( - JSHeapBroker* broker, - SerializationPolicy policy = SerializationPolicy::kAssumeSerialized); - - // Returns nullptr if the slot index isn't valid or wasn't serialized, - // unless {policy} is {kSerializeIfNeeded}. - ObjectData* GetSlot( - JSHeapBroker* broker, int index, - SerializationPolicy policy = SerializationPolicy::kAssumeSerialized); - - private: - ZoneMap<int, ObjectData*> slots_; - ObjectData* previous_ = nullptr; -}; - -ContextData::ContextData(JSHeapBroker* broker, ObjectData** storage, - Handle<Context> object) - : HeapObjectData(broker, storage, object), slots_(broker->zone()) {} - -ObjectData* ContextData::previous(JSHeapBroker* broker, - SerializationPolicy policy) { - if (policy == SerializationPolicy::kSerializeIfNeeded && - previous_ == nullptr) { - TraceScope tracer(broker, this, "ContextData::previous"); - Handle<Context> context = Handle<Context>::cast(object()); - previous_ = broker->GetOrCreateData(context->unchecked_previous()); - } - return previous_; -} - -ObjectData* ContextData::GetSlot(JSHeapBroker* broker, int index, - SerializationPolicy policy) { - CHECK_GE(index, 0); - auto search = slots_.find(index); - if (search != slots_.end()) { - return search->second; - } - - if (policy == SerializationPolicy::kSerializeIfNeeded) { - Handle<Context> context = Handle<Context>::cast(object()); - if (index < context->length()) { - TraceScope tracer(broker, this, "ContextData::GetSlot"); - TRACE(broker, "Serializing context slot " << index); - ObjectData* odata = broker->GetOrCreateData(context->get(index)); - slots_.insert(std::make_pair(index, odata)); - return odata; - } - } - - return nullptr; -} - -class NativeContextData : public ContextData { - public: -#define DECL_ACCESSOR(type, name) \ - ObjectData* name() const { return name##_; } - BROKER_NATIVE_CONTEXT_FIELDS(DECL_ACCESSOR) -#undef DECL_ACCESSOR - - const ZoneVector<ObjectData*>& function_maps() const { - CHECK_NE(state_, State::kUnserialized); - return function_maps_; - } - - ObjectData* scope_info() const { - CHECK_NE(state_, State::kUnserialized); - return scope_info_; - } - - NativeContextData(JSHeapBroker* broker, ObjectData** storage, - Handle<NativeContext> object); - void Serialize(JSHeapBroker* broker); - void SerializeOnBackground(JSHeapBroker* broker); - - private: - // After Serialize is called the class is partially serialized and it the - // kSerializedOnMainThread state. It then becomes kFullySerialized once - // SerializeOnBackground is called. - enum class State { kUnserialized, kSerializedOnMainThread, kFullySerialized }; - State state_; - -#define DECL_MEMBER(type, name) ObjectData* name##_ = nullptr; - BROKER_NATIVE_CONTEXT_FIELDS(DECL_MEMBER) -#undef DECL_MEMBER - ZoneVector<ObjectData*> function_maps_; - ObjectData* scope_info_ = nullptr; -}; - -class NameData : public HeapObjectData { - public: - NameData(JSHeapBroker* broker, ObjectData** storage, Handle<Name> object) - : HeapObjectData(broker, storage, object) { - DCHECK(!FLAG_turbo_direct_heap_access); - } -}; - -class StringData : public NameData { - public: - StringData(JSHeapBroker* broker, ObjectData** storage, Handle<String> object); - - int length() const { return length_; } - uint16_t first_char() const { return first_char_; } - base::Optional<double> to_number() const { return to_number_; } - bool is_external_string() const { return is_external_string_; } - bool is_seq_string() const { return is_seq_string_; } - - ObjectData* GetCharAsStringOrUndefined( - JSHeapBroker* broker, uint32_t index, - SerializationPolicy policy = SerializationPolicy::kAssumeSerialized); - - private: - int const length_; - uint16_t const first_char_; - base::Optional<double> to_number_; - bool const is_external_string_; - bool const is_seq_string_; - - // Known individual characters as strings, corresponding to the semantics of - // element access (s[i]). The first pair component is always less than - // {length_}. The second component is never nullptr. - ZoneVector<std::pair<uint32_t, ObjectData*>> chars_as_strings_; -}; - -class SymbolData : public NameData { - public: - SymbolData(JSHeapBroker* broker, ObjectData** storage, Handle<Symbol> object) - : NameData(broker, storage, object) { - DCHECK(!FLAG_turbo_direct_heap_access); - } -}; - -StringData::StringData(JSHeapBroker* broker, ObjectData** storage, - Handle<String> object) - : NameData(broker, storage, object), - length_(object->length()), - first_char_(length_ > 0 ? object->Get(0) : 0), - to_number_(TryStringToDouble(broker->local_isolate(), object)), - is_external_string_(object->IsExternalString()), - is_seq_string_(object->IsSeqString()), - chars_as_strings_(broker->zone()) { - DCHECK(!FLAG_turbo_direct_heap_access); -} - -class InternalizedStringData : public StringData { - public: - InternalizedStringData(JSHeapBroker* broker, ObjectData** storage, - Handle<InternalizedString> object) - : StringData(broker, storage, object) { - DCHECK(!FLAG_turbo_direct_heap_access); - } -}; - -ObjectData* StringData::GetCharAsStringOrUndefined(JSHeapBroker* broker, - uint32_t index, - SerializationPolicy policy) { - if (index >= static_cast<uint32_t>(length())) return nullptr; - - for (auto const& p : chars_as_strings_) { - if (p.first == index) return p.second; - } - - if (policy == SerializationPolicy::kAssumeSerialized) { - TRACE_MISSING(broker, "knowledge about index " << index << " on " << this); - return nullptr; - } - - base::Optional<ObjectRef> element = - GetOwnElementFromHeap(broker, object(), index, true); - ObjectData* result = element.has_value() ? element->data() : nullptr; - chars_as_strings_.push_back({index, result}); - return result; -} - -namespace { - -bool IsFastLiteralHelper(Handle<JSObject> boilerplate, int max_depth, - int* max_properties) { - DCHECK_GE(max_depth, 0); - DCHECK_GE(*max_properties, 0); - - Isolate* const isolate = boilerplate->GetIsolate(); - - // Make sure the boilerplate map is not deprecated. - if (!JSObject::TryMigrateInstance(isolate, boilerplate)) return false; - - // Check for too deep nesting. - if (max_depth == 0) return false; - - // Check the elements. - Handle<FixedArrayBase> elements(boilerplate->elements(), isolate); - if (elements->length() > 0 && - elements->map() != ReadOnlyRoots(isolate).fixed_cow_array_map()) { - if (boilerplate->HasSmiOrObjectElements()) { - Handle<FixedArray> fast_elements = Handle<FixedArray>::cast(elements); - int length = elements->length(); - for (int i = 0; i < length; i++) { - if ((*max_properties)-- == 0) return false; - Handle<Object> value(fast_elements->get(i), isolate); - if (value->IsJSObject()) { - Handle<JSObject> value_object = Handle<JSObject>::cast(value); - if (!IsFastLiteralHelper(value_object, max_depth - 1, - max_properties)) { - return false; - } - } - } - } else if (boilerplate->HasDoubleElements()) { - if (elements->Size() > kMaxRegularHeapObjectSize) return false; - } else { - return false; - } - } - - // TODO(turbofan): Do we want to support out-of-object properties? - if (!(boilerplate->HasFastProperties() && - boilerplate->property_array().length() == 0)) { - return false; - } - - // Check the in-object properties. - Handle<DescriptorArray> descriptors( - boilerplate->map().instance_descriptors(isolate, kRelaxedLoad), isolate); - for (InternalIndex i : boilerplate->map().IterateOwnDescriptors()) { - PropertyDetails details = descriptors->GetDetails(i); - if (details.location() != kField) continue; - DCHECK_EQ(kData, details.kind()); - if ((*max_properties)-- == 0) return false; - FieldIndex field_index = FieldIndex::ForDescriptor(boilerplate->map(), i); - Handle<Object> value(boilerplate->RawFastPropertyAt(field_index), isolate); - if (value->IsJSObject()) { - Handle<JSObject> value_object = Handle<JSObject>::cast(value); - if (!IsFastLiteralHelper(value_object, max_depth - 1, max_properties)) { - return false; - } - } - } - return true; -} - -// Maximum depth and total number of elements and properties for literal -// graphs to be considered for fast deep-copying. The limit is chosen to -// match the maximum number of inobject properties, to ensure that the -// performance of using object literals is not worse than using constructor -// functions, see crbug.com/v8/6211 for details. -const int kMaxFastLiteralDepth = 3; -const int kMaxFastLiteralProperties = JSObject::kMaxInObjectProperties; - -// Determines whether the given array or object literal boilerplate satisfies -// all limits to be considered for fast deep-copying and computes the total -// size of all objects that are part of the graph. -bool IsInlinableFastLiteral(Handle<JSObject> boilerplate) { - int max_properties = kMaxFastLiteralProperties; - return IsFastLiteralHelper(boilerplate, kMaxFastLiteralDepth, - &max_properties); -} - -} // namespace - -class AccessorInfoData : public HeapObjectData { - public: - AccessorInfoData(JSHeapBroker* broker, ObjectData** storage, - Handle<AccessorInfo> object); -}; - -class AllocationSiteData : public HeapObjectData { - public: - AllocationSiteData(JSHeapBroker* broker, ObjectData** storage, - Handle<AllocationSite> object); - void SerializeBoilerplate(JSHeapBroker* broker); - - bool PointsToLiteral() const { return PointsToLiteral_; } - AllocationType GetAllocationType() const { return GetAllocationType_; } - ObjectData* nested_site() const { return nested_site_; } - bool IsFastLiteral() const { return IsFastLiteral_; } - ObjectData* boilerplate() const { return boilerplate_; } - - // These are only valid if PointsToLiteral is false. - ElementsKind GetElementsKind() const { return GetElementsKind_; } - bool CanInlineCall() const { return CanInlineCall_; } - - private: - bool const PointsToLiteral_; - AllocationType const GetAllocationType_; - ObjectData* nested_site_ = nullptr; - bool IsFastLiteral_ = false; - ObjectData* boilerplate_ = nullptr; - ElementsKind GetElementsKind_ = NO_ELEMENTS; - bool CanInlineCall_ = false; - bool serialized_boilerplate_ = false; -}; - -class BigIntData : public HeapObjectData { - public: - BigIntData(JSHeapBroker* broker, ObjectData** storage, Handle<BigInt> object, - ObjectDataKind kind = ObjectDataKind::kSerializedHeapObject) - : HeapObjectData(broker, storage, object, kind), - as_uint64_(object->AsUint64(nullptr)) {} - - uint64_t AsUint64() const { return as_uint64_; } - - private: - const uint64_t as_uint64_; -}; - -// Only used in JSNativeContextSpecialization. -class ScriptContextTableData : public HeapObjectData { - public: - ScriptContextTableData(JSHeapBroker* broker, ObjectData** storage, - Handle<ScriptContextTable> object) - : HeapObjectData(broker, storage, object) {} -}; - -struct PropertyDescriptor { - ObjectData* key = nullptr; - ObjectData* value = nullptr; - PropertyDetails details = PropertyDetails::Empty(); - FieldIndex field_index; - ObjectData* field_owner = nullptr; - ObjectData* field_type = nullptr; -}; - -class MapData : public HeapObjectData { - public: - MapData(JSHeapBroker* broker, ObjectData** storage, Handle<Map> object, - ObjectDataKind kind = ObjectDataKind::kSerializedHeapObject); - - InstanceType instance_type() const { return instance_type_; } - int instance_size() const { return instance_size_; } - byte bit_field() const { return bit_field_; } - byte bit_field2() const { return bit_field2_; } - uint32_t bit_field3() const { return bit_field3_; } - bool can_be_deprecated() const { return can_be_deprecated_; } - bool can_transition() const { return can_transition_; } - int in_object_properties_start_in_words() const { - CHECK(InstanceTypeChecker::IsJSObject(instance_type())); - return in_object_properties_start_in_words_; - } - int in_object_properties() const { - CHECK(InstanceTypeChecker::IsJSObject(instance_type())); - return in_object_properties_; - } - int constructor_function_index() const { return constructor_function_index_; } - int NextFreePropertyIndex() const { return next_free_property_index_; } - int UnusedPropertyFields() const { return unused_property_fields_; } - bool supports_fast_array_iteration() const { - return supports_fast_array_iteration_; - } - bool supports_fast_array_resize() const { - return supports_fast_array_resize_; - } - bool is_abandoned_prototype_map() const { - return is_abandoned_prototype_map_; - } - - // Extra information. - - void SerializeElementsKindGeneralizations(JSHeapBroker* broker); - const ZoneVector<ObjectData*>& elements_kind_generalizations() const { - CHECK(serialized_elements_kind_generalizations_); - return elements_kind_generalizations_; - } - - // Serialize a single (or all) own slot(s) of the descriptor array and recurse - // on field owner(s). - void SerializeOwnDescriptor(JSHeapBroker* broker, - InternalIndex descriptor_index); - void SerializeOwnDescriptors(JSHeapBroker* broker); - ObjectData* GetStrongValue(InternalIndex descriptor_index) const; - ObjectData* instance_descriptors() const { return instance_descriptors_; } - - void SerializeRootMap(JSHeapBroker* broker); - ObjectData* FindRootMap() const; - - void SerializeConstructor(JSHeapBroker* broker); - ObjectData* GetConstructor() const { - CHECK(serialized_constructor_); - return constructor_; - } - - void SerializeBackPointer(JSHeapBroker* broker); - ObjectData* GetBackPointer() const { - CHECK(serialized_backpointer_); - return backpointer_; - } - - void SerializePrototype(JSHeapBroker* broker); - bool serialized_prototype() const { return serialized_prototype_; } - ObjectData* prototype() const { - CHECK(serialized_prototype_); - return prototype_; - } - - void SerializeForElementLoad(JSHeapBroker* broker); - - void SerializeForElementStore(JSHeapBroker* broker); - - private: - InstanceType const instance_type_; - int const instance_size_; - byte const bit_field_; - byte const bit_field2_; - uint32_t const bit_field3_; - bool const can_be_deprecated_; - bool const can_transition_; - int const in_object_properties_start_in_words_; - int const in_object_properties_; - int const constructor_function_index_; - int const next_free_property_index_; - int const unused_property_fields_; - bool const supports_fast_array_iteration_; - bool const supports_fast_array_resize_; - bool const is_abandoned_prototype_map_; - - bool serialized_elements_kind_generalizations_ = false; - ZoneVector<ObjectData*> elements_kind_generalizations_; - - bool serialized_own_descriptors_ = false; - ObjectData* instance_descriptors_ = nullptr; - - bool serialized_constructor_ = false; - ObjectData* constructor_ = nullptr; - - bool serialized_backpointer_ = false; - ObjectData* backpointer_ = nullptr; - - bool serialized_prototype_ = false; - ObjectData* prototype_ = nullptr; - - bool serialized_root_map_ = false; - ObjectData* root_map_ = nullptr; - - bool serialized_for_element_load_ = false; - - bool serialized_for_element_store_ = false; -}; - -AccessorInfoData::AccessorInfoData(JSHeapBroker* broker, ObjectData** storage, - Handle<AccessorInfo> object) - : HeapObjectData(broker, storage, object) { - DCHECK(!FLAG_turbo_direct_heap_access); -} - -AllocationSiteData::AllocationSiteData(JSHeapBroker* broker, - ObjectData** storage, - Handle<AllocationSite> object) - : HeapObjectData(broker, storage, object), - PointsToLiteral_(object->PointsToLiteral()), - GetAllocationType_(object->GetAllocationType()) { - if (PointsToLiteral_) { - IsFastLiteral_ = IsInlinableFastLiteral( - handle(object->boilerplate(), broker->isolate())); - } else { - GetElementsKind_ = object->GetElementsKind(); - CanInlineCall_ = object->CanInlineCall(); - } -} - -void AllocationSiteData::SerializeBoilerplate(JSHeapBroker* broker) { - if (serialized_boilerplate_) return; - serialized_boilerplate_ = true; - - TraceScope tracer(broker, this, "AllocationSiteData::SerializeBoilerplate"); - Handle<AllocationSite> site = Handle<AllocationSite>::cast(object()); - - CHECK(IsFastLiteral_); - DCHECK_NULL(boilerplate_); - boilerplate_ = broker->GetOrCreateData(site->boilerplate()); - if (!boilerplate_->should_access_heap()) { - boilerplate_->AsJSObject()->SerializeAsBoilerplate(broker); - } - - DCHECK_NULL(nested_site_); - nested_site_ = broker->GetOrCreateData(site->nested_site()); - if (nested_site_->IsAllocationSite() && !nested_site_->should_access_heap()) { - nested_site_->AsAllocationSite()->SerializeBoilerplate(broker); - } -} - -HeapObjectData::HeapObjectData(JSHeapBroker* broker, ObjectData** storage, - Handle<HeapObject> object, ObjectDataKind kind) - : ObjectData(broker, storage, object, kind), - boolean_value_(object->BooleanValue(broker->isolate())), - // We have to use a raw cast below instead of AsMap() because of - // recursion. AsMap() would call IsMap(), which accesses the - // instance_type_ member. In the case of constructing the MapData for the - // meta map (whose map is itself), this member has not yet been - // initialized. - map_(broker->GetOrCreateData(object->map())) { - CHECK_IMPLIES(kind == kSerializedHeapObject, - broker->mode() == JSHeapBroker::kSerializing); - CHECK_IMPLIES(broker->mode() == JSHeapBroker::kSerialized, - kind == kBackgroundSerializedHeapObject); -} - -InstanceType HeapObjectData::GetMapInstanceType() const { - ObjectData* map_data = map(); - if (map_data->should_access_heap()) { - return Handle<Map>::cast(map_data->object())->instance_type(); - } - return map_data->AsMap()->instance_type(); -} - -namespace { -bool IsReadOnlyLengthDescriptor(Isolate* isolate, Handle<Map> jsarray_map) { - DCHECK(!jsarray_map->is_dictionary_map()); - Handle<Name> length_string = isolate->factory()->length_string(); - DescriptorArray descriptors = - jsarray_map->instance_descriptors(isolate, kRelaxedLoad); - // TODO(jkummerow): We could skip the search and hardcode number == 0. - InternalIndex number = descriptors.Search(*length_string, *jsarray_map); - DCHECK(number.is_found()); - return descriptors.GetDetails(number).IsReadOnly(); -} - -bool SupportsFastArrayIteration(Isolate* isolate, Handle<Map> map) { - return map->instance_type() == JS_ARRAY_TYPE && - IsFastElementsKind(map->elements_kind()) && - map->prototype().IsJSArray() && - isolate->IsAnyInitialArrayPrototype(JSArray::cast(map->prototype())) && - Protectors::IsNoElementsIntact(isolate); -} - -bool SupportsFastArrayResize(Isolate* isolate, Handle<Map> map) { - return SupportsFastArrayIteration(isolate, map) && map->is_extensible() && - !map->is_dictionary_map() && !IsReadOnlyLengthDescriptor(isolate, map); -} -} // namespace - -MapData::MapData(JSHeapBroker* broker, ObjectData** storage, Handle<Map> object, - ObjectDataKind kind) - : HeapObjectData(broker, storage, object, kind), - instance_type_(object->instance_type()), - instance_size_(object->instance_size()), - // We read the bit_field as relaxed since `has_non_instance_prototype` can - // be modified in live objects, and because we serialize some maps on the - // background. Those background-serialized maps are the native context's - // maps for which this bit is "set" but it doesn't change value (i.e. it - // is set to false when it was already false). - bit_field_(object->relaxed_bit_field()), - bit_field2_(object->bit_field2()), - bit_field3_(object->bit_field3()), - can_be_deprecated_(object->NumberOfOwnDescriptors() > 0 - ? object->CanBeDeprecated() - : false), - can_transition_(object->CanTransition()), - in_object_properties_start_in_words_( - object->IsJSObjectMap() ? object->GetInObjectPropertiesStartInWords() - : 0), - in_object_properties_( - object->IsJSObjectMap() ? object->GetInObjectProperties() : 0), - constructor_function_index_(object->IsPrimitiveMap() - ? object->GetConstructorFunctionIndex() - : Map::kNoConstructorFunctionIndex), - next_free_property_index_(object->NextFreePropertyIndex()), - unused_property_fields_(object->UnusedPropertyFields()), - supports_fast_array_iteration_( - SupportsFastArrayIteration(broker->isolate(), object)), - supports_fast_array_resize_( - SupportsFastArrayResize(broker->isolate(), object)), - is_abandoned_prototype_map_(object->is_abandoned_prototype_map()), - elements_kind_generalizations_(broker->zone()) {} - -JSFunctionData::JSFunctionData(JSHeapBroker* broker, ObjectData** storage, - Handle<JSFunction> object) - : JSObjectData(broker, storage, object), - has_feedback_vector_(object->has_feedback_vector()), - has_initial_map_(object->has_prototype_slot() && - object->has_initial_map()), - has_prototype_(object->has_prototype_slot() && object->has_prototype()), - PrototypeRequiresRuntimeLookup_( - object->PrototypeRequiresRuntimeLookup()) {} - -void JSFunctionData::Serialize(JSHeapBroker* broker) { - if (serialized_) return; - serialized_ = true; - - TraceScope tracer(broker, this, "JSFunctionData::Serialize"); - Handle<JSFunction> function = Handle<JSFunction>::cast(object()); - - DCHECK_NULL(context_); - DCHECK_NULL(native_context_); - DCHECK_NULL(initial_map_); - DCHECK_NULL(prototype_); - DCHECK_NULL(shared_); - - context_ = broker->GetOrCreateData(function->context()); - native_context_ = broker->GetOrCreateData(function->native_context()); - shared_ = broker->GetOrCreateData(function->shared()); - - initial_map_ = has_initial_map() - ? broker->GetOrCreateData(function->initial_map()) - : nullptr; - prototype_ = has_prototype() ? broker->GetOrCreateData(function->prototype()) - : nullptr; - - if (initial_map_ != nullptr) { - initial_map_instance_size_with_min_slack_ = - function->ComputeInstanceSizeWithMinSlack(broker->isolate()); - } - if (initial_map_ != nullptr && !initial_map_->should_access_heap()) { - if (initial_map_->AsMap()->instance_type() == JS_ARRAY_TYPE) { - initial_map_->AsMap()->SerializeElementsKindGeneralizations(broker); - } - initial_map_->AsMap()->SerializeConstructor(broker); - // TODO(neis): This is currently only needed for native_context's - // object_function, as used by GetObjectCreateMap. If no further use sites - // show up, we should move this into NativeContextData::Serialize. - initial_map_->AsMap()->SerializePrototype(broker); - } -} - -void JSFunctionData::SerializeCodeAndFeedback(JSHeapBroker* broker) { - DCHECK(serialized_); - if (serialized_code_and_feedback_) return; - serialized_code_and_feedback_ = true; - - TraceScope tracer(broker, this, "JSFunctionData::SerializeCodeAndFeedback"); - Handle<JSFunction> function = Handle<JSFunction>::cast(object()); - - DCHECK_NULL(feedback_cell_); - DCHECK_NULL(feedback_vector_); - DCHECK_NULL(code_); - if (!FLAG_turbo_direct_heap_access) { - // This is conditionalized because Code objects are never serialized now. - // We only need to represent the code object in serialized data when - // we're unable to perform direct heap accesses. - code_ = broker->GetOrCreateData(function->code(kAcquireLoad)); - } - feedback_cell_ = broker->GetOrCreateData(function->raw_feedback_cell()); - feedback_vector_ = has_feedback_vector() - ? broker->GetOrCreateData(function->feedback_vector()) - : nullptr; -} - -void MapData::SerializeElementsKindGeneralizations(JSHeapBroker* broker) { - if (serialized_elements_kind_generalizations_) return; - serialized_elements_kind_generalizations_ = true; - - TraceScope tracer(broker, this, - "MapData::SerializeElementsKindGeneralizations"); - DCHECK_EQ(instance_type(), JS_ARRAY_TYPE); - MapRef self(broker, this); - ElementsKind from_kind = self.elements_kind(); - DCHECK(elements_kind_generalizations_.empty()); - for (int i = FIRST_FAST_ELEMENTS_KIND; i <= LAST_FAST_ELEMENTS_KIND; i++) { - ElementsKind to_kind = static_cast<ElementsKind>(i); - if (IsMoreGeneralElementsKindTransition(from_kind, to_kind)) { - Handle<Map> target = - Map::AsElementsKind(broker->isolate(), self.object(), to_kind); - elements_kind_generalizations_.push_back(broker->GetOrCreateData(target)); - } - } -} - -class DescriptorArrayData : public HeapObjectData { - public: - DescriptorArrayData(JSHeapBroker* broker, ObjectData** storage, - Handle<DescriptorArray> object) - : HeapObjectData(broker, storage, object), contents_(broker->zone()) { - DCHECK(!FLAG_turbo_direct_heap_access); - } - - ObjectData* FindFieldOwner(InternalIndex descriptor_index) const { - return contents_.at(descriptor_index.as_int()).field_owner; - } - - PropertyDetails GetPropertyDetails(InternalIndex descriptor_index) const { - return contents_.at(descriptor_index.as_int()).details; - } - - ObjectData* GetPropertyKey(InternalIndex descriptor_index) const { - return contents_.at(descriptor_index.as_int()).key; - } - - FieldIndex GetFieldIndexFor(InternalIndex descriptor_index) const { - return contents_.at(descriptor_index.as_int()).field_index; - } - - ObjectData* GetFieldType(InternalIndex descriptor_index) const { - return contents_.at(descriptor_index.as_int()).field_type; - } - - ObjectData* GetStrongValue(InternalIndex descriptor_index) const { - return contents_.at(descriptor_index.as_int()).value; - } - - bool serialized_descriptor(InternalIndex descriptor_index) const { - return contents_.find(descriptor_index.as_int()) != contents_.end(); - } - - void SerializeDescriptor(JSHeapBroker* broker, Handle<Map> map, - InternalIndex descriptor_index); - - private: - ZoneMap<int, PropertyDescriptor> contents_; -}; - -void DescriptorArrayData::SerializeDescriptor(JSHeapBroker* broker, - Handle<Map> map, - InternalIndex descriptor_index) { - CHECK_LT(descriptor_index.as_int(), map->NumberOfOwnDescriptors()); - if (contents_.find(descriptor_index.as_int()) != contents_.end()) return; - - Isolate* const isolate = broker->isolate(); - auto descriptors = Handle<DescriptorArray>::cast(object()); - CHECK_EQ(*descriptors, map->instance_descriptors(isolate)); - - PropertyDescriptor d; - d.key = broker->GetOrCreateData(descriptors->GetKey(descriptor_index)); - MaybeObject value = descriptors->GetValue(descriptor_index); - HeapObject obj; - if (value.GetHeapObjectIfStrong(&obj)) { - d.value = broker->GetOrCreateData(obj); - } - d.details = descriptors->GetDetails(descriptor_index); - if (d.details.location() == kField) { - d.field_index = FieldIndex::ForDescriptor(*map, descriptor_index); - d.field_owner = - broker->GetOrCreateData(map->FindFieldOwner(isolate, descriptor_index)); - d.field_type = - broker->GetOrCreateData(descriptors->GetFieldType(descriptor_index)); - } - contents_[descriptor_index.as_int()] = d; - - if (d.details.location() == kField && !d.field_owner->should_access_heap()) { - // Recurse on the owner map. - d.field_owner->AsMap()->SerializeOwnDescriptor(broker, descriptor_index); - } - - TRACE(broker, "Copied descriptor " << descriptor_index.as_int() << " into " - << this << " (" << contents_.size() - << " total)"); -} - -class FeedbackCellData : public HeapObjectData { - public: - FeedbackCellData(JSHeapBroker* broker, ObjectData** storage, - Handle<FeedbackCell> object); - - ObjectData* value() const { return value_; } - - private: - ObjectData* const value_; -}; - -FeedbackCellData::FeedbackCellData(JSHeapBroker* broker, ObjectData** storage, - Handle<FeedbackCell> object) - : HeapObjectData(broker, storage, object), - value_(object->value().IsFeedbackVector() - ? broker->GetOrCreateData(object->value()) - : nullptr) { - DCHECK(!FLAG_turbo_direct_heap_access); -} - -class FeedbackVectorData : public HeapObjectData { - public: - FeedbackVectorData(JSHeapBroker* broker, ObjectData** storage, - Handle<FeedbackVector> object); - - double invocation_count() const { return invocation_count_; } - - ObjectData* shared_function_info() { - CHECK(serialized_); - return shared_function_info_; - } - - void Serialize(JSHeapBroker* broker); - bool serialized() const { return serialized_; } - ObjectData* GetClosureFeedbackCell(JSHeapBroker* broker, int index) const; - - private: - double const invocation_count_; - - bool serialized_ = false; - ObjectData* shared_function_info_; - ZoneVector<ObjectData*> closure_feedback_cell_array_; -}; - -FeedbackVectorData::FeedbackVectorData(JSHeapBroker* broker, - ObjectData** storage, - Handle<FeedbackVector> object) - : HeapObjectData(broker, storage, object), - invocation_count_(object->invocation_count()), - closure_feedback_cell_array_(broker->zone()) { - DCHECK(!FLAG_turbo_direct_heap_access); -} - -ObjectData* FeedbackVectorData::GetClosureFeedbackCell(JSHeapBroker* broker, - int index) const { - CHECK_GE(index, 0); - - size_t cell_array_size = closure_feedback_cell_array_.size(); - if (!serialized_) { - DCHECK_EQ(cell_array_size, 0); - TRACE_BROKER_MISSING(broker, - " closure feedback cell array for vector " << this); - return nullptr; - } - CHECK_LT(index, cell_array_size); - return closure_feedback_cell_array_[index]; -} - -void FeedbackVectorData::Serialize(JSHeapBroker* broker) { - if (serialized_) return; - serialized_ = true; - - TraceScope tracer(broker, this, "FeedbackVectorData::Serialize"); - Handle<FeedbackVector> vector = Handle<FeedbackVector>::cast(object()); - Handle<SharedFunctionInfo> sfi(vector->shared_function_info(), - broker->isolate()); - shared_function_info_ = broker->GetOrCreateData(sfi); - DCHECK(closure_feedback_cell_array_.empty()); - int length = vector->closure_feedback_cell_array().length(); - closure_feedback_cell_array_.reserve(length); - for (int i = 0; i < length; ++i) { - Handle<FeedbackCell> cell = vector->GetClosureFeedbackCell(i); - ObjectData* cell_data = broker->GetOrCreateData(cell); - closure_feedback_cell_array_.push_back(cell_data); - } - TRACE(broker, "Copied " << length << " feedback cells"); -} - -class FixedArrayBaseData : public HeapObjectData { - public: - FixedArrayBaseData(JSHeapBroker* broker, ObjectData** storage, - Handle<FixedArrayBase> object) - : HeapObjectData(broker, storage, object), length_(object->length()) {} - - int length() const { return length_; } - - private: - int const length_; -}; - -class FixedArrayData : public FixedArrayBaseData { - public: - FixedArrayData(JSHeapBroker* broker, ObjectData** storage, - Handle<FixedArray> object); - - // Creates all elements of the fixed array. - void SerializeContents(JSHeapBroker* broker); - - ObjectData* Get(int i) const; - - private: - bool serialized_contents_ = false; - ZoneVector<ObjectData*> contents_; -}; - -JSDataViewData::JSDataViewData(JSHeapBroker* broker, ObjectData** storage, - Handle<JSDataView> object) - : JSObjectData(broker, storage, object), - byte_length_(object->byte_length()) {} - -JSBoundFunctionData::JSBoundFunctionData(JSHeapBroker* broker, - ObjectData** storage, - Handle<JSBoundFunction> object) - : JSObjectData(broker, storage, object) {} - -bool JSBoundFunctionData::Serialize(JSHeapBroker* broker) { - if (serialized_) return true; - if (broker->StackHasOverflowed()) return false; - - TraceScope tracer(broker, this, "JSBoundFunctionData::Serialize"); - Handle<JSBoundFunction> function = Handle<JSBoundFunction>::cast(object()); - - // We don't immediately set {serialized_} in order to correctly handle the - // case where a recursive call to this method reaches the stack limit. - - DCHECK_NULL(bound_target_function_); - bound_target_function_ = - broker->GetOrCreateData(function->bound_target_function()); - bool serialized_nested = true; - if (!bound_target_function_->should_access_heap()) { - if (bound_target_function_->IsJSBoundFunction()) { - serialized_nested = - bound_target_function_->AsJSBoundFunction()->Serialize(broker); - } else if (bound_target_function_->IsJSFunction()) { - bound_target_function_->AsJSFunction()->Serialize(broker); - } - } - if (!serialized_nested) { - // We couldn't serialize all nested bound functions due to stack - // overflow. Give up. - DCHECK(!serialized_); - bound_target_function_ = nullptr; // Reset to sync with serialized_. - return false; - } - - serialized_ = true; - - DCHECK_NULL(bound_arguments_); - bound_arguments_ = broker->GetOrCreateData(function->bound_arguments()); - if (!bound_arguments_->should_access_heap()) { - bound_arguments_->AsFixedArray()->SerializeContents(broker); - } - - DCHECK_NULL(bound_this_); - bound_this_ = broker->GetOrCreateData(function->bound_this()); - - return true; -} - -JSObjectData::JSObjectData(JSHeapBroker* broker, ObjectData** storage, - Handle<JSObject> object) - : JSReceiverData(broker, storage, object), - inobject_fields_(broker->zone()), - own_constant_elements_(broker->zone()), - own_properties_(broker->zone()) {} - -FixedArrayData::FixedArrayData(JSHeapBroker* broker, ObjectData** storage, - Handle<FixedArray> object) - : FixedArrayBaseData(broker, storage, object), contents_(broker->zone()) {} - -void FixedArrayData::SerializeContents(JSHeapBroker* broker) { - if (serialized_contents_) return; - serialized_contents_ = true; - - TraceScope tracer(broker, this, "FixedArrayData::SerializeContents"); - Handle<FixedArray> array = Handle<FixedArray>::cast(object()); - CHECK_EQ(array->length(), length()); - CHECK(contents_.empty()); - contents_.reserve(static_cast<size_t>(length())); - - for (int i = 0; i < length(); i++) { - Handle<Object> value(array->get(i), broker->isolate()); - contents_.push_back(broker->GetOrCreateData(value)); - } - TRACE(broker, "Copied " << contents_.size() << " elements"); -} - -class FixedDoubleArrayData : public FixedArrayBaseData { - public: - FixedDoubleArrayData(JSHeapBroker* broker, ObjectData** storage, - Handle<FixedDoubleArray> object); - - // Serializes all elements of the fixed array. - void SerializeContents(JSHeapBroker* broker); - - Float64 Get(int i) const; - - private: - bool serialized_contents_ = false; - ZoneVector<Float64> contents_; -}; - -FixedDoubleArrayData::FixedDoubleArrayData(JSHeapBroker* broker, - ObjectData** storage, - Handle<FixedDoubleArray> object) - : FixedArrayBaseData(broker, storage, object), contents_(broker->zone()) {} - -void FixedDoubleArrayData::SerializeContents(JSHeapBroker* broker) { - if (serialized_contents_) return; - serialized_contents_ = true; - - TraceScope tracer(broker, this, "FixedDoubleArrayData::SerializeContents"); - Handle<FixedDoubleArray> self = Handle<FixedDoubleArray>::cast(object()); - CHECK_EQ(self->length(), length()); - CHECK(contents_.empty()); - contents_.reserve(static_cast<size_t>(length())); - - for (int i = 0; i < length(); i++) { - contents_.push_back(Float64::FromBits(self->get_representation(i))); - } - TRACE(broker, "Copied " << contents_.size() << " elements"); -} - -class BytecodeArrayData : public FixedArrayBaseData { - public: - int register_count() const { return register_count_; } - int parameter_count() const { return parameter_count_; } - interpreter::Register incoming_new_target_or_generator_register() const { - return incoming_new_target_or_generator_register_; - } - - BytecodeArrayData(JSHeapBroker* broker, ObjectData** storage, - Handle<BytecodeArray> object) - : FixedArrayBaseData(broker, storage, object), - register_count_(object->register_count()), - parameter_count_(object->parameter_count()), - incoming_new_target_or_generator_register_( - object->incoming_new_target_or_generator_register()) {} - - private: - int const register_count_; - int const parameter_count_; - interpreter::Register const incoming_new_target_or_generator_register_; -}; - -class JSArrayData : public JSObjectData { - public: - JSArrayData(JSHeapBroker* broker, ObjectData** storage, - Handle<JSArray> object); - - void Serialize(JSHeapBroker* broker); - ObjectData* length() const { - CHECK(serialized_); - return length_; - } - - ObjectData* GetOwnElement( - JSHeapBroker* broker, uint32_t index, - SerializationPolicy policy = SerializationPolicy::kAssumeSerialized); - - private: - bool serialized_ = false; - ObjectData* length_ = nullptr; - - // Elements (indexed properties) that either - // (1) are known to exist directly on the object, or - // (2) are known not to (possibly they don't exist at all). - // In case (2), the second pair component is nullptr. - ZoneVector<std::pair<uint32_t, ObjectData*>> own_elements_; -}; - -JSArrayData::JSArrayData(JSHeapBroker* broker, ObjectData** storage, - Handle<JSArray> object) - : JSObjectData(broker, storage, object), own_elements_(broker->zone()) {} - -void JSArrayData::Serialize(JSHeapBroker* broker) { - CHECK(!FLAG_turbo_direct_heap_access); - - if (serialized_) return; - serialized_ = true; - - TraceScope tracer(broker, this, "JSArrayData::Serialize"); - Handle<JSArray> jsarray = Handle<JSArray>::cast(object()); - - DCHECK_NULL(length_); - length_ = broker->GetOrCreateData(jsarray->length()); -} - -ObjectData* JSArrayData::GetOwnElement(JSHeapBroker* broker, uint32_t index, - SerializationPolicy policy) { - for (auto const& p : own_elements_) { - if (p.first == index) return p.second; - } - - if (policy == SerializationPolicy::kAssumeSerialized) { - TRACE_MISSING(broker, "knowledge about index " << index << " on " << this); - return nullptr; - } - - base::Optional<ObjectRef> element = - GetOwnElementFromHeap(broker, object(), index, false); - ObjectData* result = element.has_value() ? element->data() : nullptr; - own_elements_.push_back({index, result}); - return result; -} - -class ScopeInfoData : public HeapObjectData { - public: - ScopeInfoData(JSHeapBroker* broker, ObjectData** storage, - Handle<ScopeInfo> object); - - int ContextLength() const { return context_length_; } - bool HasContextExtensionSlot() const { return has_context_extension_slot_; } - bool HasOuterScopeInfo() const { return has_outer_scope_info_; } - - ObjectData* OuterScopeInfo() const { return outer_scope_info_; } - void SerializeScopeInfoChain(JSHeapBroker* broker); - - private: - int const context_length_; - bool const has_context_extension_slot_; - bool const has_outer_scope_info_; - - // Only serialized via SerializeScopeInfoChain. - ObjectData* outer_scope_info_; -}; - -ScopeInfoData::ScopeInfoData(JSHeapBroker* broker, ObjectData** storage, - Handle<ScopeInfo> object) - : HeapObjectData(broker, storage, object), - context_length_(object->ContextLength()), - has_context_extension_slot_(object->HasContextExtensionSlot()), - has_outer_scope_info_(object->HasOuterScopeInfo()), - outer_scope_info_(nullptr) { - DCHECK(!FLAG_turbo_direct_heap_access); -} - -void ScopeInfoData::SerializeScopeInfoChain(JSHeapBroker* broker) { - if (outer_scope_info_) return; - if (!has_outer_scope_info_) return; - outer_scope_info_ = broker->GetOrCreateData( - Handle<ScopeInfo>::cast(object())->OuterScopeInfo()); - if (!outer_scope_info_->should_access_heap()) { - outer_scope_info_->AsScopeInfo()->SerializeScopeInfoChain(broker); - } -} - -class SharedFunctionInfoData : public HeapObjectData { - public: - SharedFunctionInfoData(JSHeapBroker* broker, ObjectData** storage, - Handle<SharedFunctionInfo> object); - - int builtin_id() const { return builtin_id_; } - int context_header_size() const { return context_header_size_; } - ObjectData* GetBytecodeArray() const { return GetBytecodeArray_; } - SharedFunctionInfo::Inlineability GetInlineability() const { - return inlineability_; - } - void SerializeFunctionTemplateInfo(JSHeapBroker* broker); - ObjectData* scope_info() const { return scope_info_; } - void SerializeScopeInfoChain(JSHeapBroker* broker); - ObjectData* function_template_info() const { return function_template_info_; } - ObjectData* GetTemplateObject(FeedbackSlot slot) const { - auto lookup_it = template_objects_.find(slot.ToInt()); - if (lookup_it != template_objects_.cend()) { - return lookup_it->second; - } - return nullptr; - } - void SetTemplateObject(FeedbackSlot slot, ObjectData* object) { - CHECK( - template_objects_.insert(std::make_pair(slot.ToInt(), object)).second); - } - -#define DECL_ACCESSOR(type, name) \ - type name() const { return name##_; } - BROKER_SFI_FIELDS(DECL_ACCESSOR) -#undef DECL_ACCESSOR - - private: - int const builtin_id_; - int const context_header_size_; - ObjectData* const GetBytecodeArray_; -#define DECL_MEMBER(type, name) type const name##_; - BROKER_SFI_FIELDS(DECL_MEMBER) -#undef DECL_MEMBER - SharedFunctionInfo::Inlineability const inlineability_; - ObjectData* function_template_info_; - ZoneMap<int, ObjectData*> template_objects_; - ObjectData* scope_info_; -}; - -SharedFunctionInfoData::SharedFunctionInfoData( - JSHeapBroker* broker, ObjectData** storage, - Handle<SharedFunctionInfo> object) - : HeapObjectData(broker, storage, object), - builtin_id_(object->HasBuiltinId() ? object->builtin_id() - : Builtins::kNoBuiltinId), - context_header_size_(object->scope_info().ContextHeaderLength()), - GetBytecodeArray_(object->HasBytecodeArray() - ? broker->GetOrCreateData( - object->GetBytecodeArray(broker->isolate())) - : nullptr) -#define INIT_MEMBER(type, name) , name##_(object->name()) - BROKER_SFI_FIELDS(INIT_MEMBER) -#undef INIT_MEMBER - , - inlineability_(object->GetInlineability(broker->isolate())), - function_template_info_(nullptr), - template_objects_(broker->zone()), - scope_info_(nullptr) { - DCHECK_EQ(HasBuiltinId_, builtin_id_ != Builtins::kNoBuiltinId); - DCHECK_EQ(HasBytecodeArray_, GetBytecodeArray_ != nullptr); -} - -void SharedFunctionInfoData::SerializeFunctionTemplateInfo( - JSHeapBroker* broker) { - if (function_template_info_) return; - function_template_info_ = broker->GetOrCreateData( - Handle<SharedFunctionInfo>::cast(object())->function_data(kAcquireLoad)); -} - -void SharedFunctionInfoData::SerializeScopeInfoChain(JSHeapBroker* broker) { - if (scope_info_) return; - scope_info_ = broker->GetOrCreateData( - Handle<SharedFunctionInfo>::cast(object())->scope_info()); - if (!scope_info_->should_access_heap()) { - scope_info_->AsScopeInfo()->SerializeScopeInfoChain(broker); - } -} - -class SourceTextModuleData : public HeapObjectData { - public: - SourceTextModuleData(JSHeapBroker* broker, ObjectData** storage, - Handle<SourceTextModule> object); - void Serialize(JSHeapBroker* broker); - - ObjectData* GetCell(JSHeapBroker* broker, int cell_index) const; - ObjectData* GetImportMeta(JSHeapBroker* broker) const; - - private: - bool serialized_ = false; - ZoneVector<ObjectData*> imports_; - ZoneVector<ObjectData*> exports_; - ObjectData* import_meta_; -}; - -SourceTextModuleData::SourceTextModuleData(JSHeapBroker* broker, - ObjectData** storage, - Handle<SourceTextModule> object) - : HeapObjectData(broker, storage, object), - imports_(broker->zone()), - exports_(broker->zone()), - import_meta_(nullptr) {} - -ObjectData* SourceTextModuleData::GetCell(JSHeapBroker* broker, - int cell_index) const { - if (!serialized_) { - DCHECK(imports_.empty()); - TRACE_BROKER_MISSING(broker, - "module cell " << cell_index << " on " << this); - return nullptr; - } - ObjectData* cell; - switch (SourceTextModuleDescriptor::GetCellIndexKind(cell_index)) { - case SourceTextModuleDescriptor::kImport: - cell = imports_.at(SourceTextModule::ImportIndex(cell_index)); - break; - case SourceTextModuleDescriptor::kExport: - cell = exports_.at(SourceTextModule::ExportIndex(cell_index)); - break; - case SourceTextModuleDescriptor::kInvalid: - UNREACHABLE(); - } - CHECK_NOT_NULL(cell); - return cell; -} - -ObjectData* SourceTextModuleData::GetImportMeta(JSHeapBroker* broker) const { - CHECK(serialized_); - return import_meta_; -} - -void SourceTextModuleData::Serialize(JSHeapBroker* broker) { - if (serialized_) return; - serialized_ = true; - - TraceScope tracer(broker, this, "SourceTextModuleData::Serialize"); - Handle<SourceTextModule> module = Handle<SourceTextModule>::cast(object()); - - // TODO(neis): We could be smarter and only serialize the cells we care about. - // TODO(neis): Define a helper for serializing a FixedArray into a ZoneVector. - - DCHECK(imports_.empty()); - Handle<FixedArray> imports(module->regular_imports(), broker->isolate()); - int const imports_length = imports->length(); - imports_.reserve(imports_length); - for (int i = 0; i < imports_length; ++i) { - imports_.push_back(broker->GetOrCreateData(imports->get(i))); - } - TRACE(broker, "Copied " << imports_.size() << " imports"); - - DCHECK(exports_.empty()); - Handle<FixedArray> exports(module->regular_exports(), broker->isolate()); - int const exports_length = exports->length(); - exports_.reserve(exports_length); - for (int i = 0; i < exports_length; ++i) { - exports_.push_back(broker->GetOrCreateData(exports->get(i))); - } - TRACE(broker, "Copied " << exports_.size() << " exports"); - - DCHECK_NULL(import_meta_); - import_meta_ = broker->GetOrCreateData(module->import_meta()); - TRACE(broker, "Copied import_meta"); -} - -class CellData : public HeapObjectData { - public: - CellData(JSHeapBroker* broker, ObjectData** storage, Handle<Cell> object) - : HeapObjectData(broker, storage, object) { - DCHECK(!FLAG_turbo_direct_heap_access); - } -}; - -class JSGlobalObjectData : public JSObjectData { - public: - JSGlobalObjectData(JSHeapBroker* broker, ObjectData** storage, - Handle<JSGlobalObject> object); - bool IsDetached() const { return is_detached_; } - - ObjectData* GetPropertyCell( - JSHeapBroker* broker, ObjectData* name, - SerializationPolicy policy = SerializationPolicy::kAssumeSerialized); - - private: - bool const is_detached_; - - // Properties that either - // (1) are known to exist as property cells on the global object, or - // (2) are known not to (possibly they don't exist at all). - // In case (2), the second pair component is nullptr. - ZoneVector<std::pair<ObjectData*, ObjectData*>> properties_; -}; - -JSGlobalObjectData::JSGlobalObjectData(JSHeapBroker* broker, - ObjectData** storage, - Handle<JSGlobalObject> object) - : JSObjectData(broker, storage, object), - is_detached_(object->IsDetached()), - properties_(broker->zone()) {} - -class JSGlobalProxyData : public JSObjectData { - public: - JSGlobalProxyData(JSHeapBroker* broker, ObjectData** storage, - Handle<JSGlobalProxy> object); -}; - -JSGlobalProxyData::JSGlobalProxyData(JSHeapBroker* broker, ObjectData** storage, - Handle<JSGlobalProxy> object) - : JSObjectData(broker, storage, object) {} - -namespace { -base::Optional<PropertyCellRef> GetPropertyCellFromHeap(JSHeapBroker* broker, - Handle<Name> name) { - LookupIterator it( - broker->isolate(), - handle(broker->target_native_context().object()->global_object(), - broker->isolate()), - name, LookupIterator::OWN); - it.TryLookupCachedProperty(); - if (it.state() == LookupIterator::DATA && - it.GetHolder<JSObject>()->IsJSGlobalObject()) { - return PropertyCellRef(broker, it.GetPropertyCell()); - } - return base::nullopt; -} -} // namespace - -ObjectData* JSGlobalObjectData::GetPropertyCell(JSHeapBroker* broker, - ObjectData* name, - SerializationPolicy policy) { - CHECK_NOT_NULL(name); - for (auto const& p : properties_) { - if (p.first == name) return p.second; - } - - if (policy == SerializationPolicy::kAssumeSerialized) { - TRACE_MISSING(broker, "knowledge about global property " << name); - return nullptr; - } - - ObjectData* result = nullptr; - base::Optional<PropertyCellRef> cell = - GetPropertyCellFromHeap(broker, Handle<Name>::cast(name->object())); - if (cell.has_value()) { - result = cell->data(); - if (!result->should_access_heap()) { - result->AsPropertyCell()->Serialize(broker); - } - } - properties_.push_back({name, result}); - return result; -} - -class TemplateObjectDescriptionData : public HeapObjectData { - public: - TemplateObjectDescriptionData(JSHeapBroker* broker, ObjectData** storage, - Handle<TemplateObjectDescription> object) - : HeapObjectData(broker, storage, object) { - DCHECK(!FLAG_turbo_direct_heap_access); - } -}; - -class CodeData : public HeapObjectData { - public: - CodeData(JSHeapBroker* broker, ObjectData** storage, Handle<Code> object) - : HeapObjectData(broker, storage, object), - inlined_bytecode_size_(object->inlined_bytecode_size() > 0 && - !object->marked_for_deoptimization() - ? object->inlined_bytecode_size() - : 0) { - DCHECK(!FLAG_turbo_direct_heap_access); - } - - unsigned inlined_bytecode_size() const { return inlined_bytecode_size_; } - - private: - unsigned const inlined_bytecode_size_; -}; - -#define DEFINE_IS(Name) \ - bool ObjectData::Is##Name() const { \ - if (should_access_heap()) { \ - return object()->Is##Name(); \ - } \ - if (is_smi()) return false; \ - InstanceType instance_type = \ - static_cast<const HeapObjectData*>(this)->GetMapInstanceType(); \ - return InstanceTypeChecker::Is##Name(instance_type); \ - } -HEAP_BROKER_SERIALIZED_OBJECT_LIST(DEFINE_IS) -HEAP_BROKER_POSSIBLY_BACKGROUND_SERIALIZED_OBJECT_LIST(DEFINE_IS) -HEAP_BROKER_BACKGROUND_SERIALIZED_OBJECT_LIST(DEFINE_IS) -HEAP_BROKER_NEVER_SERIALIZED_OBJECT_LIST(DEFINE_IS) -#undef DEFINE_IS - -#define DEFINE_AS(Name) \ - Name##Data* ObjectData::As##Name() { \ - CHECK(Is##Name()); \ - CHECK(kind_ == kSerializedHeapObject || \ - kind_ == kBackgroundSerializedHeapObject); \ - return static_cast<Name##Data*>(this); \ - } -HEAP_BROKER_SERIALIZED_OBJECT_LIST(DEFINE_AS) -HEAP_BROKER_POSSIBLY_BACKGROUND_SERIALIZED_OBJECT_LIST(DEFINE_AS) -HEAP_BROKER_BACKGROUND_SERIALIZED_OBJECT_LIST(DEFINE_AS) -#undef DEFINE_AS - -// TODO(solanes, v8:10866): Remove once FLAG_turbo_direct_heap_access is -// removed. -// This macro defines the Asxxx methods for NeverSerialized objects, which -// should only be used with direct heap access off. -#define DEFINE_AS(Name) \ - Name##Data* ObjectData::As##Name() { \ - DCHECK(!FLAG_turbo_direct_heap_access); \ - CHECK(Is##Name()); \ - CHECK_EQ(kind_, kSerializedHeapObject); \ - return static_cast<Name##Data*>(this); \ - } -HEAP_BROKER_NEVER_SERIALIZED_OBJECT_LIST(DEFINE_AS) -#undef DEFINE_AS - -ObjectData* JSObjectData::GetInobjectField(int property_index) const { - CHECK_LT(static_cast<size_t>(property_index), inobject_fields_.size()); - return inobject_fields_[property_index]; -} - -bool JSObjectData::cow_or_empty_elements_tenured() const { - return cow_or_empty_elements_tenured_; -} - -ObjectData* JSObjectData::elements() const { - CHECK(serialized_elements_); - return elements_; -} - -void JSObjectData::SerializeAsBoilerplate(JSHeapBroker* broker) { - SerializeRecursiveAsBoilerplate(broker, kMaxFastLiteralDepth); -} - -void JSObjectData::SerializeElements(JSHeapBroker* broker) { - if (serialized_elements_) return; - serialized_elements_ = true; - - TraceScope tracer(broker, this, "JSObjectData::SerializeElements"); - Handle<JSObject> boilerplate = Handle<JSObject>::cast(object()); - Handle<FixedArrayBase> elements_object(boilerplate->elements(), - broker->isolate()); - DCHECK_NULL(elements_); - elements_ = broker->GetOrCreateData(elements_object); - DCHECK(elements_->IsFixedArrayBase()); -} - -void MapData::SerializeConstructor(JSHeapBroker* broker) { - if (serialized_constructor_) return; - serialized_constructor_ = true; - - TraceScope tracer(broker, this, "MapData::SerializeConstructor"); - Handle<Map> map = Handle<Map>::cast(object()); - DCHECK(!map->IsContextMap()); - DCHECK_NULL(constructor_); - constructor_ = broker->GetOrCreateData(map->GetConstructor()); -} - -void MapData::SerializeBackPointer(JSHeapBroker* broker) { - if (serialized_backpointer_) return; - serialized_backpointer_ = true; - - TraceScope tracer(broker, this, "MapData::SerializeBackPointer"); - Handle<Map> map = Handle<Map>::cast(object()); - DCHECK_NULL(backpointer_); - DCHECK(!map->IsContextMap()); - backpointer_ = broker->GetOrCreateData(map->GetBackPointer()); -} - -void MapData::SerializePrototype(JSHeapBroker* broker) { - if (serialized_prototype_) return; - serialized_prototype_ = true; - - TraceScope tracer(broker, this, "MapData::SerializePrototype"); - Handle<Map> map = Handle<Map>::cast(object()); - DCHECK_NULL(prototype_); - prototype_ = broker->GetOrCreateData(map->prototype()); -} - -void MapData::SerializeOwnDescriptors(JSHeapBroker* broker) { - if (serialized_own_descriptors_) return; - serialized_own_descriptors_ = true; - - TraceScope tracer(broker, this, "MapData::SerializeOwnDescriptors"); - Handle<Map> map = Handle<Map>::cast(object()); - - for (InternalIndex i : map->IterateOwnDescriptors()) { - SerializeOwnDescriptor(broker, i); - } -} - -void MapData::SerializeOwnDescriptor(JSHeapBroker* broker, - InternalIndex descriptor_index) { - TraceScope tracer(broker, this, "MapData::SerializeOwnDescriptor"); - Handle<Map> map = Handle<Map>::cast(object()); - Isolate* isolate = broker->isolate(); - - if (instance_descriptors_ == nullptr) { - instance_descriptors_ = - broker->GetOrCreateData(map->instance_descriptors(isolate)); - } - - if (instance_descriptors()->should_access_heap()) { - // When accessing the fields concurrently, we still have to recurse on the - // owner map if it is different than the current map. This is because - // {instance_descriptors_} gets set on SerializeOwnDescriptor and otherwise - // we risk the field owner having a null {instance_descriptors_}. - Handle<DescriptorArray> descriptors(map->instance_descriptors(isolate), - isolate); - if (descriptors->GetDetails(descriptor_index).location() == kField) { - Handle<Map> owner(map->FindFieldOwner(isolate, descriptor_index), - isolate); - if (!owner.equals(map)) { - broker->GetOrCreateData(owner)->AsMap()->SerializeOwnDescriptor( - broker, descriptor_index); - } - } - } else { - DescriptorArrayData* descriptors = - instance_descriptors()->AsDescriptorArray(); - descriptors->SerializeDescriptor(broker, map, descriptor_index); - } -} - -void MapData::SerializeRootMap(JSHeapBroker* broker) { - if (serialized_root_map_) return; - serialized_root_map_ = true; - - TraceScope tracer(broker, this, "MapData::SerializeRootMap"); - Handle<Map> map = Handle<Map>::cast(object()); - DCHECK_NULL(root_map_); - root_map_ = broker->GetOrCreateData(map->FindRootMap(broker->isolate())); -} - -ObjectData* MapData::FindRootMap() const { return root_map_; } - -void JSObjectData::SerializeRecursiveAsBoilerplate(JSHeapBroker* broker, - int depth) { - if (serialized_as_boilerplate_) return; - serialized_as_boilerplate_ = true; - - TraceScope tracer(broker, this, - "JSObjectData::SerializeRecursiveAsBoilerplate"); - Handle<JSObject> boilerplate = Handle<JSObject>::cast(object()); - - // We only serialize boilerplates that pass the IsInlinableFastLiteral - // check, so we only do a check on the depth here. - CHECK_GT(depth, 0); - CHECK(!boilerplate->map().is_deprecated()); - - // Serialize the elements. - Isolate* const isolate = broker->isolate(); - Handle<FixedArrayBase> elements_object(boilerplate->elements(), isolate); - - // Boilerplates need special serialization - we need to make sure COW arrays - // are tenured. Boilerplate objects should only be reachable from their - // allocation site, so it is safe to assume that the elements have not been - // serialized yet. - - bool const empty_or_cow = - elements_object->length() == 0 || - elements_object->map() == ReadOnlyRoots(isolate).fixed_cow_array_map(); - if (empty_or_cow) { - // We need to make sure copy-on-write elements are tenured. - if (ObjectInYoungGeneration(*elements_object)) { - elements_object = isolate->factory()->CopyAndTenureFixedCOWArray( - Handle<FixedArray>::cast(elements_object)); - boilerplate->set_elements(*elements_object); - } - cow_or_empty_elements_tenured_ = true; - } - - DCHECK_NULL(elements_); - DCHECK(!serialized_elements_); - serialized_elements_ = true; - elements_ = broker->GetOrCreateData(elements_object); - DCHECK(elements_->IsFixedArrayBase()); - - if (empty_or_cow || elements_->should_access_heap()) { - // No need to do anything here. Empty or copy-on-write elements - // do not need to be serialized because we only need to store the elements - // reference to the allocated object. - } else if (boilerplate->HasSmiOrObjectElements()) { - elements_->AsFixedArray()->SerializeContents(broker); - Handle<FixedArray> fast_elements = - Handle<FixedArray>::cast(elements_object); - int length = elements_object->length(); - for (int i = 0; i < length; i++) { - Handle<Object> value(fast_elements->get(i), isolate); - if (value->IsJSObject()) { - ObjectData* value_data = broker->GetOrCreateData(value); - if (!value_data->should_access_heap()) { - value_data->AsJSObject()->SerializeRecursiveAsBoilerplate(broker, - depth - 1); - } - } - } - } else { - CHECK(boilerplate->HasDoubleElements()); - CHECK_LE(elements_object->Size(), kMaxRegularHeapObjectSize); - DCHECK_EQ(elements_->kind(), ObjectDataKind::kSerializedHeapObject); - elements_->AsFixedDoubleArray()->SerializeContents(broker); - } - - // TODO(turbofan): Do we want to support out-of-object properties? - CHECK(boilerplate->HasFastProperties() && - boilerplate->property_array().length() == 0); - CHECK_EQ(inobject_fields_.size(), 0u); - - // Check the in-object properties. - Handle<DescriptorArray> descriptors( - boilerplate->map().instance_descriptors(isolate), isolate); - for (InternalIndex i : boilerplate->map().IterateOwnDescriptors()) { - PropertyDetails details = descriptors->GetDetails(i); - if (details.location() != kField) continue; - DCHECK_EQ(kData, details.kind()); - - FieldIndex field_index = FieldIndex::ForDescriptor(boilerplate->map(), i); - // Make sure {field_index} agrees with {inobject_properties} on the index of - // this field. - DCHECK_EQ(field_index.property_index(), - static_cast<int>(inobject_fields_.size())); - Handle<Object> value(boilerplate->RawFastPropertyAt(field_index), isolate); - // In case of double fields we use a sentinel NaN value to mark - // uninitialized fields. A boilerplate value with such a field may migrate - // from its double to a tagged representation. The sentinel value carries - // no special meaning when it occurs in a heap number, so we would like to - // recover the uninitialized value. We check for the sentinel here, - // specifically, since migrations might have been triggered as part of - // boilerplate serialization. - if (!details.representation().IsDouble() && value->IsHeapNumber() && - HeapNumber::cast(*value).value_as_bits() == kHoleNanInt64) { - value = isolate->factory()->uninitialized_value(); - } - ObjectData* value_data = broker->GetOrCreateData(value); - if (value_data->IsJSObject() && !value_data->should_access_heap()) { - value_data->AsJSObject()->SerializeRecursiveAsBoilerplate(broker, - depth - 1); - } - inobject_fields_.push_back(value_data); - } - TRACE(broker, "Copied " << inobject_fields_.size() << " in-object fields"); - - if (!map()->should_access_heap()) { - map()->AsMap()->SerializeOwnDescriptors(broker); - } - - if (IsJSArray() && !FLAG_turbo_direct_heap_access) { - AsJSArray()->Serialize(broker); - } -} - -void RegExpBoilerplateDescriptionData::Serialize(JSHeapBroker* broker) { - if (serialized_) return; // Only serialize once. - serialized_ = true; - - TraceScope tracer(broker, this, - "RegExpBoilerplateDescriptionData::Serialize"); - auto boilerplate = Handle<RegExpBoilerplateDescription>::cast(object()); - - data_ = broker->GetOrCreateData(boilerplate->data()); - source_ = broker->GetOrCreateData(boilerplate->source()); - flags_ = boilerplate->flags(); -} - -#ifdef DEBUG -bool ObjectRef::IsNeverSerializedHeapObject() const { - return data_->kind() == ObjectDataKind::kNeverSerializedHeapObject; -} -#endif // DEBUG - -bool ObjectRef::equals(const ObjectRef& other) const { -#ifdef DEBUG - if (broker()->mode() == JSHeapBroker::kSerialized && - data_->used_status == ObjectData::Usage::kUnused) { - data_->used_status = ObjectData::Usage::kOnlyIdentityUsed; - } -#endif // DEBUG - return data_ == other.data_; -} - -bool ObjectRef::ShouldHaveBeenSerialized() const { - return broker()->mode() == JSHeapBroker::kSerialized && - data()->kind() == kSerializedHeapObject; -} - -Isolate* ObjectRef::isolate() const { return broker()->isolate(); } - -ContextRef ContextRef::previous(size_t* depth, - SerializationPolicy policy) const { - DCHECK_NOT_NULL(depth); - - if (data_->should_access_heap()) { - Context current = *object(); - while (*depth != 0 && current.unchecked_previous().IsContext()) { - current = Context::cast(current.unchecked_previous()); - (*depth)--; - } - return ContextRef(broker(), broker()->CanonicalPersistentHandle(current)); - } - - if (*depth == 0) return *this; - - ObjectData* previous_data = data()->AsContext()->previous(broker(), policy); - if (previous_data == nullptr || !previous_data->IsContext()) return *this; - - *depth = *depth - 1; - return ContextRef(broker(), previous_data).previous(depth, policy); -} - -base::Optional<ObjectRef> ContextRef::get(int index, - SerializationPolicy policy) const { - if (data_->should_access_heap()) { - Handle<Object> value(object()->get(index), broker()->isolate()); - return ObjectRef(broker(), value); - } - ObjectData* optional_slot = - data()->AsContext()->GetSlot(broker(), index, policy); - if (optional_slot != nullptr) { - return ObjectRef(broker(), optional_slot); - } - return base::nullopt; -} - -SourceTextModuleRef ContextRef::GetModule(SerializationPolicy policy) const { - ContextRef current = *this; - while (current.map().instance_type() != MODULE_CONTEXT_TYPE) { - size_t depth = 1; - current = current.previous(&depth, policy); - CHECK_EQ(depth, 0); - } - return current.get(Context::EXTENSION_INDEX, policy) - .value() - .AsSourceTextModule(); -} - JSHeapBroker::JSHeapBroker(Isolate* isolate, Zone* broker_zone, bool tracing_enabled, bool is_concurrent_inlining, CodeKind code_kind) @@ -2560,7 +58,6 @@ JSHeapBroker::JSHeapBroker(Isolate* isolate, Zone* broker_zone, // immediately with a larger-capacity one. It doesn't seem to affect the // performance in a noticeable way though. TRACE(this, "Constructing heap broker"); - DCHECK_IMPLIES(is_concurrent_inlining_, FLAG_turbo_direct_heap_access); } JSHeapBroker::~JSHeapBroker() { DCHECK_NULL(local_isolate_); } @@ -2602,7 +99,7 @@ void JSHeapBroker::AttachLocalIsolate(OptimizedCompilationInfo* info, local_isolate_->heap()->AttachPersistentHandles( info->DetachPersistentHandles()); - if (FLAG_turbo_direct_heap_access) { + if (is_concurrent_inlining()) { // Ensure any serialization that happens on the background has been // performed. target_native_context().SerializeOnBackground(); @@ -2625,88 +122,6 @@ void JSHeapBroker::StopSerializing() { mode_ = kSerialized; } -#ifdef DEBUG -void JSHeapBroker::PrintRefsAnalysis() const { - // Usage counts - size_t used_total = 0, unused_total = 0, identity_used_total = 0; - for (RefsMap::Entry* ref = refs_->Start(); ref != nullptr; - ref = refs_->Next(ref)) { - switch (ref->value->used_status) { - case ObjectData::Usage::kUnused: - ++unused_total; - break; - case ObjectData::Usage::kOnlyIdentityUsed: - ++identity_used_total; - break; - case ObjectData::Usage::kDataUsed: - ++used_total; - break; - } - } - - // Ref types analysis - TRACE_BROKER_MEMORY( - this, "Refs: " << refs_->occupancy() << "; data used: " << used_total - << "; only identity used: " << identity_used_total - << "; unused: " << unused_total); - size_t used_smis = 0, unused_smis = 0, identity_used_smis = 0; - size_t used[LAST_TYPE + 1] = {0}; - size_t unused[LAST_TYPE + 1] = {0}; - size_t identity_used[LAST_TYPE + 1] = {0}; - for (RefsMap::Entry* ref = refs_->Start(); ref != nullptr; - ref = refs_->Next(ref)) { - if (ref->value->is_smi()) { - switch (ref->value->used_status) { - case ObjectData::Usage::kUnused: - ++unused_smis; - break; - case ObjectData::Usage::kOnlyIdentityUsed: - ++identity_used_smis; - break; - case ObjectData::Usage::kDataUsed: - ++used_smis; - break; - } - } else { - InstanceType instance_type; - if (ref->value->should_access_heap()) { - instance_type = Handle<HeapObject>::cast(ref->value->object()) - ->map() - .instance_type(); - } else { - instance_type = ref->value->AsHeapObject()->GetMapInstanceType(); - } - CHECK_LE(FIRST_TYPE, instance_type); - CHECK_LE(instance_type, LAST_TYPE); - switch (ref->value->used_status) { - case ObjectData::Usage::kUnused: - ++unused[instance_type]; - break; - case ObjectData::Usage::kOnlyIdentityUsed: - ++identity_used[instance_type]; - break; - case ObjectData::Usage::kDataUsed: - ++used[instance_type]; - break; - } - } - } - - TRACE_BROKER_MEMORY( - this, "Smis: " << used_smis + identity_used_smis + unused_smis - << "; data used: " << used_smis << "; only identity used: " - << identity_used_smis << "; unused: " << unused_smis); - for (uint16_t i = FIRST_TYPE; i <= LAST_TYPE; ++i) { - size_t total = used[i] + identity_used[i] + unused[i]; - if (total == 0) continue; - TRACE_BROKER_MEMORY( - this, InstanceType(i) << ": " << total << "; data used: " << used[i] - << "; only identity used: " << identity_used[i] - << "; unused: " << unused[i]); - } -} -#endif // DEBUG - void JSHeapBroker::Retire() { CHECK_EQ(mode_, kSerialized); TRACE(this, "Retiring"); @@ -2719,16 +134,11 @@ void JSHeapBroker::Retire() { void JSHeapBroker::SetTargetNativeContextRef( Handle<NativeContext> native_context) { - // The MapData constructor uses {target_native_context_}. This creates a - // benign cycle that we break by setting {target_native_context_} right before - // starting to serialize (thus creating dummy data), and then again properly - // right after. DCHECK((mode() == kDisabled && !target_native_context_.has_value()) || (mode() == kSerializing && - target_native_context_->object().equals(native_context) && - target_native_context_->data_->kind() == kUnserializedHeapObject)); - target_native_context_ = - NativeContextRef(this, CanonicalPersistentHandle(*native_context)); + target_native_context_->object().is_identical_to(native_context) && + target_native_context_->is_unserialized_heap_object())); + target_native_context_ = MakeRef(this, *native_context); } void JSHeapBroker::CollectArrayAndObjectPrototypes() { @@ -2755,7 +165,7 @@ StringRef JSHeapBroker::GetTypedArrayStringTag(ElementsKind kind) { switch (kind) { #define TYPED_ARRAY_STRING_TAG(Type, type, TYPE, ctype) \ case ElementsKind::TYPE##_ELEMENTS: \ - return StringRef(this, isolate()->factory()->Type##Array_string()); + return MakeRef(this, isolate()->factory()->Type##Array_string()); TYPED_ARRAYS(TYPED_ARRAY_STRING_TAG) #undef TYPED_ARRAY_STRING_TAG default: @@ -2798,201 +208,38 @@ bool JSHeapBroker::IsSerializedForCompilation( } bool JSHeapBroker::IsArrayOrObjectPrototype(const JSObjectRef& object) const { + return IsArrayOrObjectPrototype(object.object()); +} + +bool JSHeapBroker::IsArrayOrObjectPrototype(Handle<JSObject> object) const { if (mode() == kDisabled) { - return isolate()->IsInAnyContext(*object.object(), + return isolate()->IsInAnyContext(*object, Context::INITIAL_ARRAY_PROTOTYPE_INDEX) || - isolate()->IsInAnyContext(*object.object(), + isolate()->IsInAnyContext(*object, Context::INITIAL_OBJECT_PROTOTYPE_INDEX); } CHECK(!array_and_object_prototypes_.empty()); - return array_and_object_prototypes_.find(object.object()) != + return array_and_object_prototypes_.find(object) != array_and_object_prototypes_.end(); } -void JSHeapBroker::InitializeAndStartSerializing( - Handle<NativeContext> native_context) { - TraceScope tracer(this, "JSHeapBroker::InitializeAndStartSerializing"); - - CHECK_EQ(mode_, kDisabled); - mode_ = kSerializing; - - // Throw away the dummy data that we created while disabled. - refs_->Clear(); - refs_ = - zone()->New<RefsMap>(kInitialRefsBucketCount, AddressMatcher(), zone()); - - SetTargetNativeContextRef(native_context); - target_native_context().Serialize(); - if (!FLAG_turbo_direct_heap_access) { - // Perform full native context serialization now if we can't do it later on - // the background thread. - target_native_context().SerializeOnBackground(); - } - - CollectArrayAndObjectPrototypes(); - - Factory* const f = isolate()->factory(); - if (!FLAG_turbo_direct_heap_access) { - ObjectData* data; - data = GetOrCreateData(f->array_buffer_detaching_protector()); - if (!data->should_access_heap()) data->AsPropertyCell()->Serialize(this); - data = GetOrCreateData(f->array_constructor_protector()); - if (!data->should_access_heap()) data->AsPropertyCell()->Serialize(this); - data = GetOrCreateData(f->array_iterator_protector()); - if (!data->should_access_heap()) data->AsPropertyCell()->Serialize(this); - data = GetOrCreateData(f->array_species_protector()); - if (!data->should_access_heap()) data->AsPropertyCell()->Serialize(this); - data = GetOrCreateData(f->no_elements_protector()); - if (!data->should_access_heap()) data->AsPropertyCell()->Serialize(this); - data = GetOrCreateData(f->promise_hook_protector()); - if (!data->should_access_heap()) data->AsPropertyCell()->Serialize(this); - data = GetOrCreateData(f->promise_species_protector()); - if (!data->should_access_heap()) data->AsPropertyCell()->Serialize(this); - data = GetOrCreateData(f->promise_then_protector()); - if (!data->should_access_heap()) data->AsPropertyCell()->Serialize(this); - data = GetOrCreateData(f->string_length_protector()); - if (!data->should_access_heap()) data->AsPropertyCell()->Serialize(this); - } - GetOrCreateData(f->many_closures_cell()); - GetOrCreateData( - CodeFactory::CEntry(isolate(), 1, kDontSaveFPRegs, kArgvOnStack, true)); - - TRACE(this, "Finished serializing standard objects"); +ObjectData* JSHeapBroker::TryGetOrCreateData(Object object, + GetOrCreateDataFlags flags) { + return TryGetOrCreateData(CanonicalPersistentHandle(object), flags); } ObjectData* JSHeapBroker::GetOrCreateData(Handle<Object> object, - ObjectRef::BackgroundSerialization background_serialization) { - ObjectData* return_value = - TryGetOrCreateData(object, true, background_serialization); + GetOrCreateDataFlags flags) { + ObjectData* return_value = TryGetOrCreateData(object, flags | kCrashOnError); DCHECK_NOT_NULL(return_value); return return_value; } -// clang-format off -ObjectData* JSHeapBroker::TryGetOrCreateData(Handle<Object> object, - bool crash_on_error, - ObjectRef::BackgroundSerialization background_serialization) { - RefsMap::Entry* entry = refs_->Lookup(object.address()); - if (entry != nullptr) return entry->value; - - if (mode() == JSHeapBroker::kDisabled) { - entry = refs_->LookupOrInsert(object.address()); - ObjectData** storage = &(entry->value); - if (*storage == nullptr) { - entry->value = zone()->New<ObjectData>( - this, storage, object, - object->IsSmi() ? kSmi : kUnserializedHeapObject); - } - return *storage; - } - - CHECK(mode() == JSHeapBroker::kSerializing || - mode() == JSHeapBroker::kSerialized); - - ObjectData* object_data; - if (object->IsSmi()) { - entry = refs_->LookupOrInsert(object.address()); - object_data = zone()->New<ObjectData>(this, &(entry->value), object, kSmi); - } else if (IsReadOnlyHeapObject(*object)) { - entry = refs_->LookupOrInsert(object.address()); - object_data = zone()->New<ObjectData>(this, &(entry->value), object, - kUnserializedReadOnlyHeapObject); -// TODO(solanes, v8:10866): Remove the if/else in this macro once we remove the -// FLAG_turbo_direct_heap_access. -#define CREATE_DATA_FOR_DIRECT_READ(name) \ - } else if (object->Is##name()) { \ - if (FLAG_turbo_direct_heap_access) { \ - entry = refs_->LookupOrInsert(object.address()); \ - object_data = zone()->New<ObjectData>( \ - this, &(entry->value), object, kNeverSerializedHeapObject); \ - } else if (mode() == kSerializing) { \ - entry = refs_->LookupOrInsert(object.address()); \ - object_data = zone()->New<name##Data>(this, &(entry->value), \ - Handle<name>::cast(object)); \ - } else { \ - CHECK(!crash_on_error); \ - return nullptr; \ - } - HEAP_BROKER_NEVER_SERIALIZED_OBJECT_LIST(CREATE_DATA_FOR_DIRECT_READ) -#undef CREATE_DATA_FOR_DIRECT_READ -#define CREATE_DATA_FOR_POSSIBLE_SERIALIZATION(name) \ - } else if (object->Is##name()) { \ - if (mode() == kSerialized && \ - background_serialization != \ - ObjectRef::BackgroundSerialization::kAllowed) { \ - CHECK(!crash_on_error); \ - return nullptr; \ - } \ - entry = refs_->LookupOrInsert(object.address()); \ - ObjectDataKind kind = (background_serialization == \ - ObjectRef::BackgroundSerialization::kAllowed) \ - ? kBackgroundSerializedHeapObject \ - : kSerializedHeapObject; \ - object_data = zone()->New<name##Data>(this, &(entry->value), \ - Handle<name>::cast(object), \ - kind); - HEAP_BROKER_POSSIBLY_BACKGROUND_SERIALIZED_OBJECT_LIST( - CREATE_DATA_FOR_POSSIBLE_SERIALIZATION) -#undef CREATE_DATA_FOR_POSSIBLE_SERIALIZATION -#define CREATE_DATA_FOR_BACKGROUND_SERIALIZATION(name) \ - } else if (object->Is##name()) { \ - if (FLAG_turbo_direct_heap_access) { \ - entry = refs_->LookupOrInsert(object.address()); \ - object_data = zone()->New<name##Data>( \ - this, &(entry->value), Handle<name>::cast(object), \ - kBackgroundSerializedHeapObject); \ - } else if (mode() == kSerializing) { \ - entry = refs_->LookupOrInsert(object.address()); \ - object_data = zone()->New<name##Data>(this, &(entry->value), \ - Handle<name>::cast(object)); \ - } else { \ - CHECK(!crash_on_error); \ - return nullptr; \ - } - HEAP_BROKER_BACKGROUND_SERIALIZED_OBJECT_LIST( - CREATE_DATA_FOR_BACKGROUND_SERIALIZATION) -#undef CREATE_DATA_FOR_SERIALIZATION -#define CREATE_DATA_FOR_SERIALIZATION(name) \ - } else if (object->Is##name()) { \ - if (mode() == kSerializing) { \ - entry = refs_->LookupOrInsert(object.address()); \ - object_data = zone()->New<name##Data>(this, &(entry->value), \ - Handle<name>::cast(object)); \ - } else { \ - CHECK(!crash_on_error); \ - return nullptr; \ - } - HEAP_BROKER_SERIALIZED_OBJECT_LIST(CREATE_DATA_FOR_SERIALIZATION) -#undef CREATE_DATA_FOR_SERIALIZATION - } else { - UNREACHABLE(); - } - // At this point the entry pointer is not guaranteed to be valid as - // the refs_ hash hable could be resized by one of the constructors above. - DCHECK_EQ(object_data, refs_->Lookup(object.address())->value); - return object_data; -} -// clang-format on - -ObjectData* JSHeapBroker::GetOrCreateData( - Object object, - ObjectRef::BackgroundSerialization background_serialization) { - return GetOrCreateData(CanonicalPersistentHandle(object), - background_serialization); +ObjectData* JSHeapBroker::GetOrCreateData(Object object, + GetOrCreateDataFlags flags) { + return GetOrCreateData(CanonicalPersistentHandle(object), flags); } -#define DEFINE_IS_AND_AS(Name) \ - bool ObjectRef::Is##Name() const { return data()->Is##Name(); } \ - Name##Ref ObjectRef::As##Name() const { \ - DCHECK(Is##Name()); \ - return Name##Ref(broker(), data()); \ - } -HEAP_BROKER_SERIALIZED_OBJECT_LIST(DEFINE_IS_AND_AS) -HEAP_BROKER_POSSIBLY_BACKGROUND_SERIALIZED_OBJECT_LIST(DEFINE_IS_AND_AS) -HEAP_BROKER_BACKGROUND_SERIALIZED_OBJECT_LIST(DEFINE_IS_AND_AS) -HEAP_BROKER_NEVER_SERIALIZED_OBJECT_LIST(DEFINE_IS_AND_AS) -#undef DEFINE_IS_AND_AS - bool JSHeapBroker::StackHasOverflowed() const { DCHECK_IMPLIES(local_isolate_ == nullptr, ThreadId::Current() == isolate_->thread_id()); @@ -3002,1742 +249,12 @@ bool JSHeapBroker::StackHasOverflowed() const { } bool JSHeapBroker::ObjectMayBeUninitialized(Handle<Object> object) const { - return !IsMainThread() && object->IsHeapObject() && - isolate()->heap()->IsPendingAllocation(HeapObject::cast(*object)); -} - -bool ObjectRef::IsSmi() const { return data()->is_smi(); } - -int ObjectRef::AsSmi() const { - DCHECK(IsSmi()); - // Handle-dereference is always allowed for Handle<Smi>. - return Handle<Smi>::cast(object())->value(); -} - -base::Optional<MapRef> JSObjectRef::GetObjectCreateMap() const { - if (data_->should_access_heap()) { - Handle<Map> instance_map; - if (Map::TryGetObjectCreateMap(broker()->isolate(), object()) - .ToHandle(&instance_map)) { - return MapRef(broker(), instance_map); - } else { - return base::Optional<MapRef>(); - } - } - ObjectData* map_data = data()->AsJSObject()->object_create_map(broker()); - if (map_data == nullptr) return base::Optional<MapRef>(); - if (map_data->should_access_heap()) { - return MapRef(broker(), map_data->object()); - } - return MapRef(broker(), map_data->AsMap()); -} - -#define DEF_TESTER(Type, ...) \ - bool MapRef::Is##Type##Map() const { \ - return InstanceTypeChecker::Is##Type(instance_type()); \ - } -INSTANCE_TYPE_CHECKERS(DEF_TESTER) -#undef DEF_TESTER - -base::Optional<MapRef> MapRef::AsElementsKind(ElementsKind kind) const { - if (data_->should_access_heap()) { - return MapRef(broker(), - Map::AsElementsKind(broker()->isolate(), object(), kind)); - } - if (kind == elements_kind()) return *this; - const ZoneVector<ObjectData*>& elements_kind_generalizations = - data()->AsMap()->elements_kind_generalizations(); - for (auto data : elements_kind_generalizations) { - MapRef map(broker(), data); - if (map.elements_kind() == kind) return map; - } - return base::Optional<MapRef>(); + if (!object->IsHeapObject()) return false; + return ObjectMayBeUninitialized(HeapObject::cast(*object)); } -void MapRef::SerializeForElementLoad() { - if (data()->should_access_heap()) return; - CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); - data()->AsMap()->SerializeForElementLoad(broker()); -} - -void MapRef::SerializeForElementStore() { - if (data()->should_access_heap()) return; - CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); - data()->AsMap()->SerializeForElementStore(broker()); -} - -void MapData::SerializeForElementLoad(JSHeapBroker* broker) { - if (serialized_for_element_load_) return; - serialized_for_element_load_ = true; - - TraceScope tracer(broker, this, "MapData::SerializeForElementLoad"); - SerializePrototype(broker); -} - -void MapData::SerializeForElementStore(JSHeapBroker* broker) { - if (serialized_for_element_store_) return; - serialized_for_element_store_ = true; - - TraceScope tracer(broker, this, "MapData::SerializeForElementStore"); - // TODO(solanes, v8:7790): This should use MapData methods rather than - // constructing MapRefs, but it involves non-trivial refactoring and this - // method should go away anyway once the compiler is fully concurrent. - MapRef map(broker, this); - for (MapRef prototype_map = map;;) { - prototype_map.SerializePrototype(); - prototype_map = prototype_map.prototype().map(); - if (prototype_map.oddball_type() == OddballType::kNull || - !map.prototype().IsJSObject() || !prototype_map.is_stable() || - !IsFastElementsKind(prototype_map.elements_kind())) { - return; - } - } -} - -bool MapRef::HasOnlyStablePrototypesWithFastElements( - ZoneVector<MapRef>* prototype_maps) { - DCHECK_NOT_NULL(prototype_maps); - MapRef prototype_map = prototype().map(); - while (prototype_map.oddball_type() != OddballType::kNull) { - if (!prototype().IsJSObject() || !prototype_map.is_stable() || - !IsFastElementsKind(prototype_map.elements_kind())) { - return false; - } - prototype_maps->push_back(prototype_map); - prototype_map = prototype_map.prototype().map(); - } - return true; -} - -bool MapRef::supports_fast_array_iteration() const { - if (data_->should_access_heap()) { - return SupportsFastArrayIteration(broker()->isolate(), object()); - } - return data()->AsMap()->supports_fast_array_iteration(); -} - -bool MapRef::supports_fast_array_resize() const { - if (data_->should_access_heap()) { - return SupportsFastArrayResize(broker()->isolate(), object()); - } - return data()->AsMap()->supports_fast_array_resize(); -} - -int JSFunctionRef::InitialMapInstanceSizeWithMinSlack() const { - if (data_->should_access_heap()) { - return object()->ComputeInstanceSizeWithMinSlack(broker()->isolate()); - } - return data()->AsJSFunction()->initial_map_instance_size_with_min_slack(); -} - -OddballType MapRef::oddball_type() const { - if (instance_type() != ODDBALL_TYPE) { - return OddballType::kNone; - } - Factory* f = broker()->isolate()->factory(); - if (equals(MapRef(broker(), f->undefined_map()))) { - return OddballType::kUndefined; - } - if (equals(MapRef(broker(), f->null_map()))) { - return OddballType::kNull; - } - if (equals(MapRef(broker(), f->boolean_map()))) { - return OddballType::kBoolean; - } - if (equals(MapRef(broker(), f->the_hole_map()))) { - return OddballType::kHole; - } - if (equals(MapRef(broker(), f->uninitialized_map()))) { - return OddballType::kUninitialized; - } - DCHECK(equals(MapRef(broker(), f->termination_exception_map())) || - equals(MapRef(broker(), f->arguments_marker_map())) || - equals(MapRef(broker(), f->optimized_out_map())) || - equals(MapRef(broker(), f->stale_register_map()))); - return OddballType::kOther; -} - -FeedbackCellRef FeedbackVectorRef::GetClosureFeedbackCell(int index) const { - if (data_->should_access_heap()) { - FeedbackCell cell = object()->closure_feedback_cell(index); - Handle<FeedbackCell> cell_handle = - broker()->CanonicalPersistentHandle(cell); - // These should all be available because we request the cell for each - // CreateClosure bytecode. - ObjectData* cell_data = broker()->GetOrCreateData(cell_handle); - return FeedbackCellRef(broker(), cell_data); - } - - return FeedbackCellRef( - broker(), - data()->AsFeedbackVector()->GetClosureFeedbackCell(broker(), index)); -} - -ObjectRef JSObjectRef::RawFastPropertyAt(FieldIndex index) const { - CHECK(index.is_inobject()); - if (data_->should_access_heap()) { - return ObjectRef(broker(), broker()->CanonicalPersistentHandle( - object()->RawFastPropertyAt(index))); - } - JSObjectData* object_data = data()->AsJSObject(); - return ObjectRef(broker(), - object_data->GetInobjectField(index.property_index())); -} - -bool AllocationSiteRef::IsFastLiteral() const { - if (data_->should_access_heap()) { - CHECK_NE(data_->kind(), ObjectDataKind::kNeverSerializedHeapObject); - return IsInlinableFastLiteral( - handle(object()->boilerplate(), broker()->isolate())); - } - return data()->AsAllocationSite()->IsFastLiteral(); -} - -void AllocationSiteRef::SerializeBoilerplate() { - if (data_->should_access_heap()) return; - CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); - data()->AsAllocationSite()->SerializeBoilerplate(broker()); -} - -void JSObjectRef::SerializeElements() { - if (data_->should_access_heap()) return; - CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); - data()->AsJSObject()->SerializeElements(broker()); -} - -void JSObjectRef::EnsureElementsTenured() { - if (data_->should_access_heap()) { - Handle<FixedArrayBase> object_elements = elements().value().object(); - if (ObjectInYoungGeneration(*object_elements)) { - // If we would like to pretenure a fixed cow array, we must ensure that - // the array is already in old space, otherwise we'll create too many - // old-to-new-space pointers (overflowing the store buffer). - object_elements = - broker()->isolate()->factory()->CopyAndTenureFixedCOWArray( - Handle<FixedArray>::cast(object_elements)); - object()->set_elements(*object_elements); - } - return; - } - CHECK(data()->AsJSObject()->cow_or_empty_elements_tenured()); -} - -FieldIndex MapRef::GetFieldIndexFor(InternalIndex descriptor_index) const { - CHECK_LT(descriptor_index.as_int(), NumberOfOwnDescriptors()); - if (data_->should_access_heap() || FLAG_turbo_direct_heap_access) { - FieldIndex result = FieldIndex::ForDescriptor(*object(), descriptor_index); - DCHECK(result.is_inobject()); - return result; - } - DescriptorArrayData* descriptors = - data()->AsMap()->instance_descriptors()->AsDescriptorArray(); - FieldIndex result = descriptors->GetFieldIndexFor(descriptor_index); - DCHECK(result.is_inobject()); - return result; -} - -int MapRef::GetInObjectPropertyOffset(int i) const { - if (data_->should_access_heap()) { - return object()->GetInObjectPropertyOffset(i); - } - return (GetInObjectPropertiesStartInWords() + i) * kTaggedSize; -} - -PropertyDetails MapRef::GetPropertyDetails( - InternalIndex descriptor_index) const { - CHECK_LT(descriptor_index.as_int(), NumberOfOwnDescriptors()); - return instance_descriptors().GetPropertyDetails(descriptor_index); -} - -NameRef MapRef::GetPropertyKey(InternalIndex descriptor_index) const { - CHECK_LT(descriptor_index.as_int(), NumberOfOwnDescriptors()); - return instance_descriptors().GetPropertyKey(descriptor_index); -} - -bool MapRef::IsFixedCowArrayMap() const { - Handle<Map> fixed_cow_array_map = - ReadOnlyRoots(broker()->isolate()).fixed_cow_array_map_handle(); - return equals(MapRef(broker(), fixed_cow_array_map)); -} - -bool MapRef::IsPrimitiveMap() const { - return instance_type() <= LAST_PRIMITIVE_HEAP_OBJECT_TYPE; -} - -MapRef MapRef::FindFieldOwner(InternalIndex descriptor_index) const { - CHECK_LT(descriptor_index.as_int(), NumberOfOwnDescriptors()); - if (data_->should_access_heap() || FLAG_turbo_direct_heap_access) { - // TODO(solanes, v8:7790): Consider caching the result of the field owner on - // the descriptor array. It would be useful for same map as well as any - // other map sharing that descriptor array. - return MapRef(broker(), broker()->GetOrCreateData(object()->FindFieldOwner( - broker()->isolate(), descriptor_index))); - } - DescriptorArrayData* descriptors = - data()->AsMap()->instance_descriptors()->AsDescriptorArray(); - return MapRef(broker(), descriptors->FindFieldOwner(descriptor_index)); -} - -ObjectRef MapRef::GetFieldType(InternalIndex descriptor_index) const { - CHECK_LT(descriptor_index.as_int(), NumberOfOwnDescriptors()); - return instance_descriptors().GetFieldType(descriptor_index); -} - -base::Optional<ObjectRef> StringRef::GetCharAsStringOrUndefined( - uint32_t index, SerializationPolicy policy) const { - if (data_->should_access_heap()) { - // TODO(solanes, neis, v8:7790, v8:11012): Re-enable this optimization for - // concurrent inlining when we have the infrastructure to safely do so. - if (broker()->is_concurrent_inlining()) return base::nullopt; - CHECK_EQ(data_->kind(), ObjectDataKind::kUnserializedHeapObject); - return GetOwnElementFromHeap(broker(), object(), index, true); - } - ObjectData* element = - data()->AsString()->GetCharAsStringOrUndefined(broker(), index, policy); - if (element == nullptr) return base::nullopt; - return ObjectRef(broker(), element); -} - -base::Optional<int> StringRef::length() const { - if (data_->should_access_heap()) { - if (data_->kind() == kNeverSerializedHeapObject && - !this->IsInternalizedString()) { - TRACE_BROKER_MISSING( - broker(), - "length for kNeverSerialized non-internalized string " << *this); - return base::nullopt; - } else { - return object()->synchronized_length(); - } - } - return data()->AsString()->length(); -} - -base::Optional<uint16_t> StringRef::GetFirstChar() { - if (data_->should_access_heap()) { - if (data_->kind() == kNeverSerializedHeapObject && - !this->IsInternalizedString()) { - TRACE_BROKER_MISSING( - broker(), - "first char for kNeverSerialized non-internalized string " << *this); - return base::nullopt; - } - - if (!broker()->IsMainThread()) { - return object()->Get(0, broker()->local_isolate()); - } else { - // TODO(solanes, v8:7790): Remove this case once the inlining phase is - // done concurrently all the time. - return object()->Get(0); - } - } - return data()->AsString()->first_char(); -} - -base::Optional<double> StringRef::ToNumber() { - if (data_->should_access_heap()) { - if (data_->kind() == kNeverSerializedHeapObject && - !this->IsInternalizedString()) { - TRACE_BROKER_MISSING( - broker(), - "number for kNeverSerialized non-internalized string " << *this); - return base::nullopt; - } - - return TryStringToDouble(broker()->local_isolate(), object()); - } - return data()->AsString()->to_number(); -} - -int ArrayBoilerplateDescriptionRef::constants_elements_length() const { - if (data_->should_access_heap()) { - return object()->constant_elements().length(); - } - return data()->AsArrayBoilerplateDescription()->constants_elements_length(); -} - -ObjectRef FixedArrayRef::get(int i) const { - if (data_->should_access_heap()) { - return ObjectRef(broker(), - broker()->CanonicalPersistentHandle(object()->get(i))); - } - return ObjectRef(broker(), data()->AsFixedArray()->Get(i)); -} - -Float64 FixedDoubleArrayRef::get(int i) const { - if (data_->should_access_heap()) { - return Float64::FromBits(object()->get_representation(i)); - } else { - return data()->AsFixedDoubleArray()->Get(i); - } -} - -Handle<ByteArray> BytecodeArrayRef::SourcePositionTable() const { - return broker()->CanonicalPersistentHandle(object()->SourcePositionTable()); -} - -Address BytecodeArrayRef::handler_table_address() const { - return reinterpret_cast<Address>( - object()->handler_table().GetDataStartAddress()); -} - -int BytecodeArrayRef::handler_table_size() const { - return object()->handler_table().length(); -} - -#define IF_ACCESS_FROM_HEAP_C(name) \ - if (data_->should_access_heap()) { \ - return object()->name(); \ - } - -#define IF_ACCESS_FROM_HEAP(result, name) \ - if (data_->should_access_heap()) { \ - return result##Ref(broker(), \ - broker()->CanonicalPersistentHandle(object()->name())); \ - } - -// Macros for definining a const getter that, depending on the data kind, -// either looks into the heap or into the serialized data. -#define BIMODAL_ACCESSOR(holder, result, name) \ - result##Ref holder##Ref::name() const { \ - IF_ACCESS_FROM_HEAP(result, name); \ - return result##Ref(broker(), ObjectRef::data()->As##holder()->name()); \ - } - -// Like above except that the result type is not an XYZRef. -#define BIMODAL_ACCESSOR_C(holder, result, name) \ - result holder##Ref::name() const { \ - IF_ACCESS_FROM_HEAP_C(name); \ - return ObjectRef::data()->As##holder()->name(); \ - } - -// Like above but for BitFields. -#define BIMODAL_ACCESSOR_B(holder, field, name, BitField) \ - typename BitField::FieldType holder##Ref::name() const { \ - IF_ACCESS_FROM_HEAP_C(name); \ - return BitField::decode(ObjectRef::data()->As##holder()->field()); \ - } - -// Like IF_ACCESS_FROM_HEAP[_C] but we also allow direct heap access for -// kSerialized only for methods that we identified to be safe. -#define IF_ACCESS_FROM_HEAP_WITH_FLAG(result, name) \ - if (data_->should_access_heap() || FLAG_turbo_direct_heap_access) { \ - return result##Ref(broker(), \ - broker()->CanonicalPersistentHandle(object()->name())); \ - } -#define IF_ACCESS_FROM_HEAP_WITH_FLAG_C(name) \ - if (data_->should_access_heap() || FLAG_turbo_direct_heap_access) { \ - return object()->name(); \ - } - -// Like BIMODAL_ACCESSOR[_C] except that we force a direct heap access if -// FLAG_turbo_direct_heap_access is true (even for kSerialized). This is because -// we identified the method to be safe to use direct heap access, but the -// holder##Data class still needs to be serialized. -#define BIMODAL_ACCESSOR_WITH_FLAG(holder, result, name) \ - result##Ref holder##Ref::name() const { \ - IF_ACCESS_FROM_HEAP_WITH_FLAG(result, name); \ - return result##Ref(broker(), ObjectRef::data()->As##holder()->name()); \ - } -#define BIMODAL_ACCESSOR_WITH_FLAG_C(holder, result, name) \ - result holder##Ref::name() const { \ - IF_ACCESS_FROM_HEAP_WITH_FLAG_C(name); \ - return ObjectRef::data()->As##holder()->name(); \ - } -#define BIMODAL_ACCESSOR_WITH_FLAG_B(holder, field, name, BitField) \ - typename BitField::FieldType holder##Ref::name() const { \ - IF_ACCESS_FROM_HEAP_WITH_FLAG_C(name); \ - return BitField::decode(ObjectRef::data()->As##holder()->field()); \ - } - -BIMODAL_ACCESSOR(AllocationSite, Object, nested_site) -BIMODAL_ACCESSOR_C(AllocationSite, bool, CanInlineCall) -BIMODAL_ACCESSOR_C(AllocationSite, bool, PointsToLiteral) -BIMODAL_ACCESSOR_C(AllocationSite, ElementsKind, GetElementsKind) -BIMODAL_ACCESSOR_C(AllocationSite, AllocationType, GetAllocationType) - -BIMODAL_ACCESSOR_C(BigInt, uint64_t, AsUint64) - -BIMODAL_ACCESSOR_C(BytecodeArray, int, register_count) -BIMODAL_ACCESSOR_C(BytecodeArray, int, parameter_count) -BIMODAL_ACCESSOR_C(BytecodeArray, interpreter::Register, - incoming_new_target_or_generator_register) - -BIMODAL_ACCESSOR_C(FeedbackVector, double, invocation_count) - -BIMODAL_ACCESSOR(HeapObject, Map, map) - -BIMODAL_ACCESSOR_C(HeapNumber, double, value) - -// These JSBoundFunction fields are immutable after initialization. Moreover, -// as long as JSObjects are still serialized on the main thread, all -// JSBoundFunctionRefs are created at a time when the underlying objects are -// guaranteed to be fully initialized. -BIMODAL_ACCESSOR_WITH_FLAG(JSBoundFunction, JSReceiver, bound_target_function) -BIMODAL_ACCESSOR_WITH_FLAG(JSBoundFunction, Object, bound_this) -BIMODAL_ACCESSOR_WITH_FLAG(JSBoundFunction, FixedArray, bound_arguments) - -BIMODAL_ACCESSOR_C(JSDataView, size_t, byte_length) - -BIMODAL_ACCESSOR_C(JSFunction, bool, has_feedback_vector) -BIMODAL_ACCESSOR_C(JSFunction, bool, has_initial_map) -BIMODAL_ACCESSOR_C(JSFunction, bool, has_prototype) -BIMODAL_ACCESSOR_C(JSFunction, bool, PrototypeRequiresRuntimeLookup) -BIMODAL_ACCESSOR(JSFunction, Context, context) -BIMODAL_ACCESSOR(JSFunction, NativeContext, native_context) -BIMODAL_ACCESSOR(JSFunction, Map, initial_map) -BIMODAL_ACCESSOR(JSFunction, Object, prototype) -BIMODAL_ACCESSOR(JSFunction, SharedFunctionInfo, shared) -BIMODAL_ACCESSOR(JSFunction, FeedbackCell, raw_feedback_cell) -BIMODAL_ACCESSOR(JSFunction, FeedbackVector, feedback_vector) - -BIMODAL_ACCESSOR_C(JSGlobalObject, bool, IsDetached) - -BIMODAL_ACCESSOR_WITH_FLAG_B(Map, bit_field2, elements_kind, - Map::Bits2::ElementsKindBits) -BIMODAL_ACCESSOR_WITH_FLAG_B(Map, bit_field3, is_dictionary_map, - Map::Bits3::IsDictionaryMapBit) -BIMODAL_ACCESSOR_WITH_FLAG_B(Map, bit_field3, is_deprecated, - Map::Bits3::IsDeprecatedBit) -BIMODAL_ACCESSOR_WITH_FLAG_B(Map, bit_field3, NumberOfOwnDescriptors, - Map::Bits3::NumberOfOwnDescriptorsBits) -BIMODAL_ACCESSOR_WITH_FLAG_B(Map, bit_field3, is_migration_target, - Map::Bits3::IsMigrationTargetBit) -BIMODAL_ACCESSOR_WITH_FLAG_B(Map, bit_field, has_prototype_slot, - Map::Bits1::HasPrototypeSlotBit) -BIMODAL_ACCESSOR_WITH_FLAG_B(Map, bit_field, is_access_check_needed, - Map::Bits1::IsAccessCheckNeededBit) -BIMODAL_ACCESSOR_WITH_FLAG_B(Map, bit_field, is_callable, - Map::Bits1::IsCallableBit) -BIMODAL_ACCESSOR_WITH_FLAG_B(Map, bit_field, has_indexed_interceptor, - Map::Bits1::HasIndexedInterceptorBit) -BIMODAL_ACCESSOR_WITH_FLAG_B(Map, bit_field, is_constructor, - Map::Bits1::IsConstructorBit) -BIMODAL_ACCESSOR_WITH_FLAG_B(Map, bit_field, is_undetectable, - Map::Bits1::IsUndetectableBit) -BIMODAL_ACCESSOR_C(Map, int, instance_size) -BIMODAL_ACCESSOR_C(Map, int, NextFreePropertyIndex) -BIMODAL_ACCESSOR_C(Map, int, UnusedPropertyFields) -BIMODAL_ACCESSOR_WITH_FLAG(Map, HeapObject, prototype) -BIMODAL_ACCESSOR_WITH_FLAG_C(Map, InstanceType, instance_type) -BIMODAL_ACCESSOR_WITH_FLAG(Map, Object, GetConstructor) -BIMODAL_ACCESSOR_WITH_FLAG(Map, HeapObject, GetBackPointer) -BIMODAL_ACCESSOR_C(Map, bool, is_abandoned_prototype_map) - -#define DEF_NATIVE_CONTEXT_ACCESSOR(type, name) \ - BIMODAL_ACCESSOR(NativeContext, type, name) -BROKER_NATIVE_CONTEXT_FIELDS(DEF_NATIVE_CONTEXT_ACCESSOR) -#undef DEF_NATIVE_CONTEXT_ACCESSOR - -BIMODAL_ACCESSOR_C(ObjectBoilerplateDescription, int, size) - -BIMODAL_ACCESSOR(PropertyCell, Object, value) -BIMODAL_ACCESSOR_C(PropertyCell, PropertyDetails, property_details) - -BIMODAL_ACCESSOR(RegExpBoilerplateDescription, FixedArray, data) -BIMODAL_ACCESSOR(RegExpBoilerplateDescription, String, source) -BIMODAL_ACCESSOR_C(RegExpBoilerplateDescription, int, flags) - -base::Optional<CallHandlerInfoRef> FunctionTemplateInfoRef::call_code() const { - if (data_->should_access_heap()) { - HeapObject call_code = object()->call_code(kAcquireLoad); - if (call_code.IsUndefined()) return base::nullopt; - return CallHandlerInfoRef(broker(), - broker()->CanonicalPersistentHandle(call_code)); - } - ObjectData* call_code = data()->AsFunctionTemplateInfo()->call_code(); - if (!call_code) return base::nullopt; - return CallHandlerInfoRef(broker(), call_code); -} - -bool FunctionTemplateInfoRef::is_signature_undefined() const { - if (data_->should_access_heap()) { - return object()->signature().IsUndefined(broker()->isolate()); - } - return data()->AsFunctionTemplateInfo()->is_signature_undefined(); -} - -bool FunctionTemplateInfoRef::has_call_code() const { - if (data_->should_access_heap()) { - HeapObject call_code = object()->call_code(kAcquireLoad); - return !call_code.IsUndefined(); - } - return data()->AsFunctionTemplateInfo()->has_call_code(); -} - -bool FunctionTemplateInfoRef ::accept_any_receiver() const { - if (data_->should_access_heap()) { - return object()->accept_any_receiver(); - } - return ObjectRef ::data()->AsFunctionTemplateInfo()->accept_any_receiver(); -} - -HolderLookupResult FunctionTemplateInfoRef::LookupHolderOfExpectedType( - MapRef receiver_map, SerializationPolicy policy) { - const HolderLookupResult not_found; - - if (data_->should_access_heap()) { - // There are currently two ways we can see a FunctionTemplateInfo on the - // background thread: 1.) As part of a SharedFunctionInfo and 2.) in an - // AccessorPair. In both cases, the FTI is fully constructed on the main - // thread before. - // TODO(nicohartmann@, v8:7790): Once the above no longer holds, we might - // have to use the GC predicate to check whether objects are fully - // initialized and safe to read. - if (!receiver_map.IsJSReceiverMap() || - (receiver_map.is_access_check_needed() && - !object()->accept_any_receiver())) { - return not_found; - } - - if (!receiver_map.IsJSObjectMap()) return not_found; - - DCHECK(has_call_code()); - - DisallowGarbageCollection no_gc; - HeapObject signature = object()->signature(); - if (signature.IsUndefined()) { - return HolderLookupResult(CallOptimization::kHolderIsReceiver); - } - auto expected_receiver_type = FunctionTemplateInfo::cast(signature); - if (expected_receiver_type.IsTemplateFor(*receiver_map.object())) { - return HolderLookupResult(CallOptimization::kHolderIsReceiver); - } - - if (!receiver_map.IsJSGlobalProxyMap()) return not_found; - if (policy == SerializationPolicy::kSerializeIfNeeded) { - receiver_map.SerializePrototype(); - } - if (!receiver_map.serialized_prototype()) return not_found; - if (receiver_map.prototype().IsNull()) return not_found; - - JSObject raw_prototype = JSObject::cast(*receiver_map.prototype().object()); - if (!expected_receiver_type.IsTemplateFor(raw_prototype.map())) { - return not_found; - } - Handle<JSObject> prototype = - broker()->CanonicalPersistentHandle(raw_prototype); - if (ObjectData* data = broker()->TryGetOrCreateData(prototype)) { - return HolderLookupResult(CallOptimization::kHolderFound, - JSObjectRef(broker(), data)); - } - - TRACE_BROKER_MISSING(broker(), - "holder for receiver with map " << receiver_map); - return not_found; - } - - FunctionTemplateInfoData* fti_data = data()->AsFunctionTemplateInfo(); - KnownReceiversMap::iterator lookup_it = - fti_data->known_receivers().find(receiver_map.data()); - if (lookup_it != fti_data->known_receivers().cend()) { - return lookup_it->second; - } - if (policy == SerializationPolicy::kAssumeSerialized) { - TRACE_BROKER_MISSING(broker(), - "holder for receiver with map " << receiver_map); - return not_found; - } - if (!receiver_map.IsJSReceiverMap() || - (receiver_map.is_access_check_needed() && !accept_any_receiver())) { - fti_data->known_receivers().insert({receiver_map.data(), not_found}); - return not_found; - } - - HolderLookupResult result; - CallOptimization call_optimization(broker()->isolate(), object()); - Handle<JSObject> holder = call_optimization.LookupHolderOfExpectedType( - receiver_map.object(), &result.lookup); - - switch (result.lookup) { - case CallOptimization::kHolderFound: { - result.holder = JSObjectRef(broker(), holder); - fti_data->known_receivers().insert({receiver_map.data(), result}); - break; - } - default: { - DCHECK_EQ(result.holder, base::nullopt); - fti_data->known_receivers().insert({receiver_map.data(), result}); - } - } - return result; -} - -BIMODAL_ACCESSOR(CallHandlerInfo, Object, data) - -BIMODAL_ACCESSOR_C(ScopeInfo, int, ContextLength) -BIMODAL_ACCESSOR_C(ScopeInfo, bool, HasContextExtensionSlot) -BIMODAL_ACCESSOR_C(ScopeInfo, bool, HasOuterScopeInfo) -BIMODAL_ACCESSOR(ScopeInfo, ScopeInfo, OuterScopeInfo) - -BIMODAL_ACCESSOR_C(SharedFunctionInfo, int, builtin_id) -BytecodeArrayRef SharedFunctionInfoRef::GetBytecodeArray() const { - if (data_->should_access_heap() || FLAG_turbo_direct_heap_access) { - BytecodeArray bytecode_array; - if (!broker()->IsMainThread()) { - bytecode_array = object()->GetBytecodeArray(broker()->local_isolate()); - } else { - bytecode_array = object()->GetBytecodeArray(broker()->isolate()); - } - return BytecodeArrayRef( - broker(), broker()->CanonicalPersistentHandle(bytecode_array)); - } - return BytecodeArrayRef( - broker(), ObjectRef ::data()->AsSharedFunctionInfo()->GetBytecodeArray()); -} -#define DEF_SFI_ACCESSOR(type, name) \ - BIMODAL_ACCESSOR_WITH_FLAG_C(SharedFunctionInfo, type, name) -BROKER_SFI_FIELDS(DEF_SFI_ACCESSOR) -#undef DEF_SFI_ACCESSOR -SharedFunctionInfo::Inlineability SharedFunctionInfoRef::GetInlineability() - const { - if (data_->should_access_heap()) { - if (!broker()->IsMainThread()) { - return object()->GetInlineability(broker()->local_isolate()); - } else { - return object()->GetInlineability(broker()->isolate()); - } - } - return ObjectRef ::data()->AsSharedFunctionInfo()->GetInlineability(); -} - -base::Optional<FeedbackVectorRef> FeedbackCellRef::value() const { - if (data_->should_access_heap()) { - // Note that we use the synchronized accessor. - Object value = object()->value(kAcquireLoad); - if (!value.IsFeedbackVector()) return base::nullopt; - auto vector_handle = broker()->CanonicalPersistentHandle(value); - ObjectData* vector = broker()->TryGetOrCreateData(vector_handle); - if (vector) { - return FeedbackVectorRef(broker(), vector); - } - TRACE_BROKER_MISSING( - broker(), - "Unable to retrieve FeedbackVector from FeedbackCellRef " << *this); - return base::nullopt; - } - ObjectData* vector = ObjectRef::data()->AsFeedbackCell()->value(); - return FeedbackVectorRef(broker(), vector->AsFeedbackVector()); -} - -base::Optional<ObjectRef> MapRef::GetStrongValue( - InternalIndex descriptor_index) const { - CHECK_LT(descriptor_index.as_int(), NumberOfOwnDescriptors()); - return instance_descriptors().GetStrongValue(descriptor_index); -} - -DescriptorArrayRef MapRef::instance_descriptors() const { - if (data_->should_access_heap() || FLAG_turbo_direct_heap_access) { - return DescriptorArrayRef( - broker(), - broker()->CanonicalPersistentHandle( - object()->instance_descriptors(broker()->isolate(), kRelaxedLoad))); - } - - return DescriptorArrayRef(broker(), data()->AsMap()->instance_descriptors()); -} - -void MapRef::SerializeRootMap() { - if (data_->should_access_heap()) return; - CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); - data()->AsMap()->SerializeRootMap(broker()); -} - -// TODO(solanes, v8:7790): Remove base::Optional from the return type when -// deleting serialization. -base::Optional<MapRef> MapRef::FindRootMap() const { - if (data_->should_access_heap() || FLAG_turbo_direct_heap_access) { - // TODO(solanes): Remove the TryGetOrCreateData part when Map is moved to - // kNeverSerialized. - ObjectData* root_map = - broker()->TryGetOrCreateData(broker()->CanonicalPersistentHandle( - object()->FindRootMap(broker()->isolate()))); - if (root_map) { - // TODO(solanes, v8:7790): Consider caching the result of the root map. - return MapRef(broker(), root_map); - } - TRACE_BROKER_MISSING(broker(), "root map for object " << *this); - return base::nullopt; - } - ObjectData* map_data = data()->AsMap()->FindRootMap(); - if (map_data != nullptr) { - return MapRef(broker(), map_data); - } - TRACE_BROKER_MISSING(broker(), "root map for object " << *this); - return base::nullopt; -} - -bool JSTypedArrayRef::is_on_heap() const { - if (data_->should_access_heap() || FLAG_turbo_direct_heap_access) { - // Safe to read concurrently because: - // - host object seen by serializer. - // - underlying field written 1. during initialization or 2. with - // release-store. - return object()->is_on_heap(kAcquireLoad); - } - return data()->AsJSTypedArray()->data_ptr(); -} - -size_t JSTypedArrayRef::length() const { - CHECK(!is_on_heap()); - if (data_->should_access_heap() || FLAG_turbo_direct_heap_access) { - // Safe to read concurrently because: - // - immutable after initialization. - // - host object seen by serializer. - return object()->length(); - } - return data()->AsJSTypedArray()->length(); -} - -HeapObjectRef JSTypedArrayRef::buffer() const { - CHECK(!is_on_heap()); - if (data_->should_access_heap() || FLAG_turbo_direct_heap_access) { - // Safe to read concurrently because: - // - immutable after initialization. - // - host object seen by serializer. - Handle<JSArrayBuffer> value = - broker()->CanonicalPersistentHandle(object()->buffer()); - return JSObjectRef{broker(), value}; - } - return HeapObjectRef{broker(), data()->AsJSTypedArray()->buffer()}; -} - -void* JSTypedArrayRef::data_ptr() const { - CHECK(!is_on_heap()); - if (data_->should_access_heap() || FLAG_turbo_direct_heap_access) { - // Safe to read concurrently because: - // - host object seen by serializer. - // - underlying field written 1. during initialization or 2. protected by - // the is_on_heap release/acquire semantics (external_pointer store - // happens-before base_pointer store, and this external_pointer load - // happens-after base_pointer load). - STATIC_ASSERT(JSTypedArray::kOffHeapDataPtrEqualsExternalPointer); - return object()->DataPtr(); - } - return data()->AsJSTypedArray()->data_ptr(); -} - -bool MapRef::IsInobjectSlackTrackingInProgress() const { - IF_ACCESS_FROM_HEAP_WITH_FLAG_C(IsInobjectSlackTrackingInProgress); - return Map::Bits3::ConstructionCounterBits::decode( - data()->AsMap()->bit_field3()) != Map::kNoSlackTracking; -} - -int MapRef::constructor_function_index() const { - IF_ACCESS_FROM_HEAP_C(GetConstructorFunctionIndex); - CHECK(IsPrimitiveMap()); - return data()->AsMap()->constructor_function_index(); -} - -bool MapRef::is_stable() const { - IF_ACCESS_FROM_HEAP_C(is_stable); - return !Map::Bits3::IsUnstableBit::decode(data()->AsMap()->bit_field3()); -} - -bool MapRef::CanBeDeprecated() const { - IF_ACCESS_FROM_HEAP_C(CanBeDeprecated); - CHECK_GT(NumberOfOwnDescriptors(), 0); - return data()->AsMap()->can_be_deprecated(); -} - -bool MapRef::CanTransition() const { - IF_ACCESS_FROM_HEAP_C(CanTransition); - return data()->AsMap()->can_transition(); -} - -int MapRef::GetInObjectPropertiesStartInWords() const { - IF_ACCESS_FROM_HEAP_C(GetInObjectPropertiesStartInWords); - return data()->AsMap()->in_object_properties_start_in_words(); -} - -int MapRef::GetInObjectProperties() const { - IF_ACCESS_FROM_HEAP_C(GetInObjectProperties); - return data()->AsMap()->in_object_properties(); -} - -void ScopeInfoRef::SerializeScopeInfoChain() { - if (data_->should_access_heap()) return; - CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); - data()->AsScopeInfo()->SerializeScopeInfoChain(broker()); -} - -bool StringRef::IsExternalString() const { - IF_ACCESS_FROM_HEAP_C(IsExternalString); - return data()->AsString()->is_external_string(); -} - -Address CallHandlerInfoRef::callback() const { - if (data_->should_access_heap()) { - return v8::ToCData<Address>(object()->callback()); - } - return HeapObjectRef::data()->AsCallHandlerInfo()->callback(); -} - -Address FunctionTemplateInfoRef::c_function() const { - if (data_->should_access_heap()) { - return v8::ToCData<Address>(object()->GetCFunction()); - } - return HeapObjectRef::data()->AsFunctionTemplateInfo()->c_function(); -} - -const CFunctionInfo* FunctionTemplateInfoRef::c_signature() const { - if (data_->should_access_heap()) { - return v8::ToCData<CFunctionInfo*>(object()->GetCSignature()); - } - return HeapObjectRef::data()->AsFunctionTemplateInfo()->c_signature(); -} - -bool StringRef::IsSeqString() const { - IF_ACCESS_FROM_HEAP_C(IsSeqString); - return data()->AsString()->is_seq_string(); -} - -ScopeInfoRef NativeContextRef::scope_info() const { - if (data_->should_access_heap()) { - return ScopeInfoRef( - broker(), broker()->CanonicalPersistentHandle(object()->scope_info())); - } - return ScopeInfoRef(broker(), data()->AsNativeContext()->scope_info()); -} - -SharedFunctionInfoRef FeedbackVectorRef::shared_function_info() const { - if (data_->should_access_heap()) { - return SharedFunctionInfoRef( - broker(), - broker()->CanonicalPersistentHandle(object()->shared_function_info())); - } - - return SharedFunctionInfoRef( - broker(), data()->AsFeedbackVector()->shared_function_info()); -} - -MapRef NativeContextRef::GetFunctionMapFromIndex(int index) const { - DCHECK_GE(index, Context::FIRST_FUNCTION_MAP_INDEX); - DCHECK_LE(index, Context::LAST_FUNCTION_MAP_INDEX); - if (data_->should_access_heap()) { - return get(index).value().AsMap(); - } - return MapRef(broker(), data()->AsNativeContext()->function_maps().at( - index - Context::FIRST_FUNCTION_MAP_INDEX)); -} - -MapRef NativeContextRef::GetInitialJSArrayMap(ElementsKind kind) const { - switch (kind) { - case PACKED_SMI_ELEMENTS: - return js_array_packed_smi_elements_map(); - case HOLEY_SMI_ELEMENTS: - return js_array_holey_smi_elements_map(); - case PACKED_DOUBLE_ELEMENTS: - return js_array_packed_double_elements_map(); - case HOLEY_DOUBLE_ELEMENTS: - return js_array_holey_double_elements_map(); - case PACKED_ELEMENTS: - return js_array_packed_elements_map(); - case HOLEY_ELEMENTS: - return js_array_holey_elements_map(); - default: - UNREACHABLE(); - } -} - -base::Optional<JSFunctionRef> NativeContextRef::GetConstructorFunction( - const MapRef& map) const { - CHECK(map.IsPrimitiveMap()); - switch (map.constructor_function_index()) { - case Map::kNoConstructorFunctionIndex: - return base::nullopt; - case Context::BIGINT_FUNCTION_INDEX: - return bigint_function(); - case Context::BOOLEAN_FUNCTION_INDEX: - return boolean_function(); - case Context::NUMBER_FUNCTION_INDEX: - return number_function(); - case Context::STRING_FUNCTION_INDEX: - return string_function(); - case Context::SYMBOL_FUNCTION_INDEX: - return symbol_function(); - default: - UNREACHABLE(); - } -} - -bool ObjectRef::IsNull() const { return object()->IsNull(); } - -bool ObjectRef::IsNullOrUndefined() const { - if (IsSmi()) return false; - OddballType type = AsHeapObject().map().oddball_type(); - return type == OddballType::kNull || type == OddballType::kUndefined; -} - -bool ObjectRef::IsTheHole() const { - return IsHeapObject() && - AsHeapObject().map().oddball_type() == OddballType::kHole; -} - -bool ObjectRef::BooleanValue() const { - if (data_->should_access_heap()) { - return object()->BooleanValue(broker()->isolate()); - } - return IsSmi() ? (AsSmi() != 0) : data()->AsHeapObject()->boolean_value(); -} - -Maybe<double> ObjectRef::OddballToNumber() const { - OddballType type = AsHeapObject().map().oddball_type(); - - switch (type) { - case OddballType::kBoolean: { - ObjectRef true_ref(broker(), - broker()->isolate()->factory()->true_value()); - return this->equals(true_ref) ? Just(1.0) : Just(0.0); - break; - } - case OddballType::kUndefined: { - return Just(std::numeric_limits<double>::quiet_NaN()); - break; - } - case OddballType::kNull: { - return Just(0.0); - break; - } - default: { - return Nothing<double>(); - break; - } - } -} - -base::Optional<ObjectRef> JSObjectRef::GetOwnConstantElement( - uint32_t index, SerializationPolicy policy) const { - if (data_->should_access_heap() || FLAG_turbo_direct_heap_access) { - // `elements` are currently still serialized as members of JSObjectRef. - // TODO(jgruber,v8:7790): Once JSObject is no longer serialized, we must - // guarantee consistency between `object`, `elements_kind` and `elements` - // through other means (store/load order? locks? storing elements_kind in - // elements.map?). - STATIC_ASSERT(IsSerializedHeapObject<JSObject>()); - - base::Optional<FixedArrayBaseRef> maybe_elements_ref = elements(); - if (!maybe_elements_ref.has_value()) { - TRACE_BROKER_MISSING(broker(), "JSObject::elements" << *this); - return {}; - } - - FixedArrayBaseRef elements_ref = maybe_elements_ref.value(); - ElementsKind elements_kind = GetElementsKind(); - - DCHECK_LE(index, JSObject::kMaxElementIndex); - - // See also ElementsAccessorBase::GetMaxIndex. - if (IsJSArray()) { - // For JSArrays we additionally need to check against JSArray::length. - // Length_unsafe is safe to use in this case since: - // - GetOwnConstantElement only detects a constant for JSArray holders if - // the array is frozen/sealed. - // - Frozen/sealed arrays can't change length. - // - We've already seen a map with frozen/sealed elements_kinds (above); - // - The release-load of that map ensures we read the newest value - // of `length` below. - uint32_t array_length; - if (!AsJSArray().length_unsafe().object()->ToArrayLength(&array_length)) { - return {}; - } - if (index >= array_length) return {}; - } - - Object maybe_element; - auto result = ConcurrentLookupIterator::TryGetOwnConstantElement( - &maybe_element, broker()->isolate(), broker()->local_isolate(), - *object(), *elements_ref.object(), elements_kind, index); - - if (result == ConcurrentLookupIterator::kGaveUp) { - TRACE_BROKER_MISSING(broker(), "JSObject::GetOwnConstantElement on " - << *this << " at index " << index); - return {}; - } else if (result == ConcurrentLookupIterator::kNotPresent) { - return {}; - } - - DCHECK_EQ(result, ConcurrentLookupIterator::kPresent); - return ObjectRef{broker(), - broker()->CanonicalPersistentHandle(maybe_element)}; - } else { - ObjectData* element = - data()->AsJSObject()->GetOwnConstantElement(broker(), index, policy); - if (element == nullptr) return base::nullopt; - return ObjectRef(broker(), element); - } -} - -base::Optional<ObjectRef> JSObjectRef::GetOwnFastDataProperty( - Representation field_representation, FieldIndex index, - SerializationPolicy policy) const { - if (data_->should_access_heap()) { - return GetOwnFastDataPropertyFromHeap(broker(), - Handle<JSObject>::cast(object()), - field_representation, index); - } - ObjectData* property = data()->AsJSObject()->GetOwnFastDataProperty( - broker(), field_representation, index, policy); - if (property == nullptr) return base::nullopt; - return ObjectRef(broker(), property); -} - -ObjectRef JSObjectRef::GetOwnDictionaryProperty( - InternalIndex index, SerializationPolicy policy) const { - CHECK(index.is_found()); - if (data_->should_access_heap()) { - return GetOwnDictionaryPropertyFromHeap( - broker(), Handle<JSObject>::cast(object()), index); - } - ObjectData* property = - data()->AsJSObject()->GetOwnDictionaryProperty(broker(), index, policy); - CHECK_NE(property, nullptr); - return ObjectRef(broker(), property); -} - -ObjectRef JSArrayRef::GetBoilerplateLength() const { - // Safe to read concurrently because: - // - boilerplates are immutable after initialization. - // - boilerplates are published into the feedback vector. - return length_unsafe(); -} - -ObjectRef JSArrayRef::length_unsafe() const { - if (data_->should_access_heap() || FLAG_turbo_direct_heap_access) { - Object o = object()->length(broker()->isolate(), kRelaxedLoad); - return ObjectRef{broker(), broker()->CanonicalPersistentHandle(o)}; - } else { - return ObjectRef{broker(), data()->AsJSArray()->length()}; - } -} - -base::Optional<ObjectRef> JSArrayRef::GetOwnCowElement( - FixedArrayBaseRef elements_ref, uint32_t index, - SerializationPolicy policy) const { - if (data_->should_access_heap() || FLAG_turbo_direct_heap_access) { - // `elements` are currently still serialized as members of JSObjectRef. - // TODO(jgruber,v8:7790): Remove the elements equality DCHECK below once - // JSObject is no longer serialized. - static_assert(std::is_base_of<JSObject, JSArray>::value, ""); - STATIC_ASSERT(IsSerializedHeapObject<JSObject>()); - - // The elements_ref is passed in by callers to make explicit that it is - // also used outside of this function, and must match the `elements` used - // inside this function. - DCHECK(elements_ref.equals(elements().value())); - - // Due to concurrency, the kind read here may not be consistent with - // `elements_ref`. But consistency is guaranteed at runtime due to the - // `elements` equality check in the caller. - ElementsKind elements_kind = GetElementsKind(); - - // We only inspect fixed COW arrays, which may only occur for fast - // smi/objects elements kinds. - if (!IsSmiOrObjectElementsKind(elements_kind)) return {}; - DCHECK(IsFastElementsKind(elements_kind)); - if (!elements_ref.map().IsFixedCowArrayMap()) return {}; - - // As the name says, the `length` read here is unsafe and may not match - // `elements`. We rely on the invariant that any `length` change will - // also result in an `elements` change to make this safe. The `elements` - // equality check in the caller thus also guards the value of `length`. - ObjectRef length_ref = length_unsafe(); - - // Likewise we only deal with smi lengths. - if (!length_ref.IsSmi()) return {}; - - base::Optional<Object> result = - ConcurrentLookupIterator::TryGetOwnCowElement( - broker()->isolate(), *elements_ref.AsFixedArray().object(), - elements_kind, length_ref.AsSmi(), index); - - if (!result.has_value()) return {}; - - return ObjectRef{broker(), - broker()->CanonicalPersistentHandle(result.value())}; - } else { - DCHECK(!data_->should_access_heap()); - DCHECK(!FLAG_turbo_direct_heap_access); - - // Just to clarify that `elements_ref` is not used on this path. - // GetOwnElement accesses the serialized `elements` field on its own. - USE(elements_ref); - - if (!elements().value().map().IsFixedCowArrayMap()) return base::nullopt; - - ObjectData* element = - data()->AsJSArray()->GetOwnElement(broker(), index, policy); - if (element == nullptr) return base::nullopt; - return ObjectRef(broker(), element); - } -} - -base::Optional<CellRef> SourceTextModuleRef::GetCell(int cell_index) const { - if (data_->should_access_heap() || FLAG_turbo_direct_heap_access) { - return CellRef(broker(), broker()->CanonicalPersistentHandle( - object()->GetCell(cell_index))); - } - ObjectData* cell = - data()->AsSourceTextModule()->GetCell(broker(), cell_index); - if (cell == nullptr) return base::nullopt; - return CellRef(broker(), cell); -} - -ObjectRef SourceTextModuleRef::import_meta() const { - if (data_->should_access_heap()) { - return ObjectRef( - broker(), broker()->CanonicalPersistentHandle(object()->import_meta())); - } - return ObjectRef(broker(), - data()->AsSourceTextModule()->GetImportMeta(broker())); -} - -ObjectRef::ObjectRef(JSHeapBroker* broker, Handle<Object> object, - BackgroundSerialization background_serialization, - bool check_type) - : broker_(broker) { - CHECK_NE(broker->mode(), JSHeapBroker::kRetired); - - data_ = broker->GetOrCreateData(object, background_serialization); - if (!data_) { // TODO(mslekova): Remove once we're on the background thread. - object->Print(); - } - CHECK_WITH_MSG(data_ != nullptr, "Object is not known to the heap broker"); -} - -namespace { -OddballType GetOddballType(Isolate* isolate, Map map) { - if (map.instance_type() != ODDBALL_TYPE) { - return OddballType::kNone; - } - ReadOnlyRoots roots(isolate); - if (map == roots.undefined_map()) { - return OddballType::kUndefined; - } - if (map == roots.null_map()) { - return OddballType::kNull; - } - if (map == roots.boolean_map()) { - return OddballType::kBoolean; - } - if (map == roots.the_hole_map()) { - return OddballType::kHole; - } - if (map == roots.uninitialized_map()) { - return OddballType::kUninitialized; - } - DCHECK(map == roots.termination_exception_map() || - map == roots.arguments_marker_map() || - map == roots.optimized_out_map() || map == roots.stale_register_map()); - return OddballType::kOther; -} -} // namespace - -HeapObjectType HeapObjectRef::GetHeapObjectType() const { - if (data_->should_access_heap()) { - Map map = Handle<HeapObject>::cast(object())->map(); - HeapObjectType::Flags flags(0); - if (map.is_undetectable()) flags |= HeapObjectType::kUndetectable; - if (map.is_callable()) flags |= HeapObjectType::kCallable; - return HeapObjectType(map.instance_type(), flags, - GetOddballType(broker()->isolate(), map)); - } - HeapObjectType::Flags flags(0); - if (map().is_undetectable()) flags |= HeapObjectType::kUndetectable; - if (map().is_callable()) flags |= HeapObjectType::kCallable; - return HeapObjectType(map().instance_type(), flags, map().oddball_type()); -} -base::Optional<JSObjectRef> AllocationSiteRef::boilerplate() const { - if (data_->should_access_heap()) { - return JSObjectRef( - broker(), broker()->CanonicalPersistentHandle(object()->boilerplate())); - } - ObjectData* boilerplate = data()->AsAllocationSite()->boilerplate(); - if (boilerplate) { - return JSObjectRef(broker(), boilerplate); - } else { - return base::nullopt; - } -} - -ElementsKind JSObjectRef::GetElementsKind() const { - return map().elements_kind(); -} - -base::Optional<FixedArrayBaseRef> JSObjectRef::elements() const { - if (data_->should_access_heap()) { - return FixedArrayBaseRef( - broker(), broker()->CanonicalPersistentHandle(object()->elements())); - } - const JSObjectData* d = data()->AsJSObject(); - if (!d->serialized_elements()) { - TRACE(broker(), "'elements' on " << this); - return base::nullopt; - } - return FixedArrayBaseRef(broker(), d->elements()); -} - -int FixedArrayBaseRef::length() const { - IF_ACCESS_FROM_HEAP_C(length); - return data()->AsFixedArrayBase()->length(); -} - -ObjectData* FixedArrayData::Get(int i) const { - CHECK_LT(i, static_cast<int>(contents_.size())); - CHECK_NOT_NULL(contents_[i]); - return contents_[i]; -} - -Float64 FixedDoubleArrayData::Get(int i) const { - CHECK_LT(i, static_cast<int>(contents_.size())); - return contents_[i]; -} - -PropertyDetails DescriptorArrayRef::GetPropertyDetails( - InternalIndex descriptor_index) const { - if (data_->should_access_heap()) { - return object()->GetDetails(descriptor_index); - } - return data()->AsDescriptorArray()->GetPropertyDetails(descriptor_index); -} - -NameRef DescriptorArrayRef::GetPropertyKey( - InternalIndex descriptor_index) const { - if (data_->should_access_heap()) { - NameRef result(broker(), broker()->CanonicalPersistentHandle( - object()->GetKey(descriptor_index))); - CHECK(result.IsUniqueName()); - return result; - } - return NameRef(broker(), - data()->AsDescriptorArray()->GetPropertyKey(descriptor_index)); -} - -ObjectRef DescriptorArrayRef::GetFieldType( - InternalIndex descriptor_index) const { - if (data_->should_access_heap()) { - // This method only gets called for the creation of FieldTypeDependencies. - // These calls happen when the broker is either disabled or serializing, - // which means that GetOrCreateData would be able to successfully create the - // ObjectRef for the cases where we haven't seen the FieldType before. - DCHECK(broker()->mode() == JSHeapBroker::kDisabled || - broker()->mode() == JSHeapBroker::kSerializing); - return ObjectRef(broker(), broker()->CanonicalPersistentHandle( - object()->GetFieldType(descriptor_index))); - } - return ObjectRef(broker(), - data()->AsDescriptorArray()->GetFieldType(descriptor_index)); -} - -base::Optional<ObjectRef> DescriptorArrayRef::GetStrongValue( - InternalIndex descriptor_index) const { - if (data_->should_access_heap()) { - HeapObject heap_object; - if (object() - ->GetValue(descriptor_index) - .GetHeapObjectIfStrong(&heap_object)) { - // Since the descriptors in the descriptor array can be changed in-place - // via DescriptorArray::Replace, we might get a value that we haven't seen - // before. - ObjectData* data = broker()->TryGetOrCreateData( - broker()->CanonicalPersistentHandle(heap_object)); - if (data) return ObjectRef(broker(), data); - - TRACE_BROKER_MISSING(broker(), "strong value for descriptor array " - << *this << " at index " - << descriptor_index.as_int()); - // Fall through to the base::nullopt below. - } - return base::nullopt; - } - ObjectData* value = - data()->AsDescriptorArray()->GetStrongValue(descriptor_index); - if (!value) return base::nullopt; - return ObjectRef(broker(), value); -} - -base::Optional<SharedFunctionInfoRef> FeedbackCellRef::shared_function_info() - const { - if (value()) { - FeedbackVectorRef vector = *value(); - if (vector.serialized()) { - return vector.shared_function_info(); - } - } - return base::nullopt; -} - -void FeedbackVectorRef::Serialize() { - if (data_->should_access_heap()) return; - CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); - data()->AsFeedbackVector()->Serialize(broker()); -} - -bool FeedbackVectorRef::serialized() const { - if (data_->should_access_heap()) return true; - return data()->AsFeedbackVector()->serialized(); -} - -bool NameRef::IsUniqueName() const { - // Must match Name::IsUniqueName. - return IsInternalizedString() || IsSymbol(); -} - -void RegExpBoilerplateDescriptionRef::Serialize() { - if (data_->should_access_heap()) { - // Even if the regexp boilerplate object itself is no longer serialized, - // the `data` still is and thus we need to make sure to visit it. - // TODO(jgruber,v8:7790): Remove once it is no longer a serialized type. - STATIC_ASSERT(IsSerializedHeapObject<FixedArray>()); - FixedArrayRef data_ref{ - broker(), broker()->CanonicalPersistentHandle(object()->data())}; - } else { - CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); - HeapObjectRef::data()->AsRegExpBoilerplateDescription()->Serialize( - broker()); - } -} - -Handle<Object> ObjectRef::object() const { -#ifdef DEBUG - if (broker()->mode() == JSHeapBroker::kSerialized && - data_->used_status == ObjectData::Usage::kUnused) { - data_->used_status = ObjectData::Usage::kOnlyIdentityUsed; - } -#endif // DEBUG - return data_->object(); -} - -#ifdef DEBUG -#define DEF_OBJECT_GETTER(T) \ - Handle<T> T##Ref::object() const { \ - if (broker()->mode() == JSHeapBroker::kSerialized && \ - data_->used_status == ObjectData::Usage::kUnused) { \ - data_->used_status = ObjectData::Usage::kOnlyIdentityUsed; \ - } \ - return Handle<T>(reinterpret_cast<Address*>(data_->object().address())); \ - } -#else -#define DEF_OBJECT_GETTER(T) \ - Handle<T> T##Ref::object() const { \ - return Handle<T>(reinterpret_cast<Address*>(data_->object().address())); \ - } -#endif // DEBUG - -HEAP_BROKER_SERIALIZED_OBJECT_LIST(DEF_OBJECT_GETTER) -HEAP_BROKER_POSSIBLY_BACKGROUND_SERIALIZED_OBJECT_LIST(DEF_OBJECT_GETTER) -HEAP_BROKER_BACKGROUND_SERIALIZED_OBJECT_LIST(DEF_OBJECT_GETTER) -HEAP_BROKER_NEVER_SERIALIZED_OBJECT_LIST(DEF_OBJECT_GETTER) -#undef DEF_OBJECT_GETTER - -JSHeapBroker* ObjectRef::broker() const { return broker_; } - -ObjectData* ObjectRef::data() const { - switch (broker()->mode()) { - case JSHeapBroker::kDisabled: - CHECK_NE(data_->kind(), kSerializedHeapObject); - return data_; - case JSHeapBroker::kSerializing: - CHECK_NE(data_->kind(), kUnserializedHeapObject); - return data_; - case JSHeapBroker::kSerialized: -#ifdef DEBUG - data_->used_status = ObjectData::Usage::kDataUsed; -#endif // DEBUG - CHECK_NE(data_->kind(), kUnserializedHeapObject); - return data_; - case JSHeapBroker::kRetired: - UNREACHABLE(); - } -} - -Reduction NoChangeBecauseOfMissingData(JSHeapBroker* broker, - const char* function, int line) { - TRACE_MISSING(broker, "data in function " << function << " at line " << line); - return AdvancedReducer::NoChange(); -} - -NativeContextData::NativeContextData(JSHeapBroker* broker, ObjectData** storage, - Handle<NativeContext> object) - : ContextData(broker, storage, object), - state_(State::kUnserialized), - function_maps_(broker->zone()) {} - -void NativeContextData::Serialize(JSHeapBroker* broker) { - if (state_ != State::kUnserialized) return; - state_ = State::kSerializedOnMainThread; - - TraceScope tracer(broker, this, "NativeContextData::Serialize"); - Handle<NativeContext> context = Handle<NativeContext>::cast(object()); - -#define SERIALIZE_MEMBER(type, name) \ - DCHECK_NULL(name##_); \ - name##_ = broker->GetOrCreateData(context->name()); \ - if (!name##_->should_access_heap()) { \ - if (name##_->IsMap() && \ - !InstanceTypeChecker::IsContext(name##_->AsMap()->instance_type())) { \ - name##_->AsMap()->SerializeConstructor(broker); \ - } \ - if (name##_->IsJSFunction()) { \ - name##_->AsJSFunction()->Serialize(broker); \ - } \ - } - BROKER_COMPULSORY_NATIVE_CONTEXT_FIELDS(SERIALIZE_MEMBER) - if (!broker->is_isolate_bootstrapping()) { - BROKER_OPTIONAL_NATIVE_CONTEXT_FIELDS(SERIALIZE_MEMBER) - } -#undef SERIALIZE_MEMBER - - if (!bound_function_with_constructor_map_->should_access_heap()) { - bound_function_with_constructor_map_->AsMap()->SerializePrototype(broker); - } - if (!bound_function_without_constructor_map_->should_access_heap()) { - bound_function_without_constructor_map_->AsMap()->SerializePrototype( - broker); - } - - scope_info_ = broker->GetOrCreateData(context->scope_info()); -} - -void NativeContextData::SerializeOnBackground(JSHeapBroker* broker) { - if (state_ == State::kFullySerialized) return; - DCHECK_EQ(state_, State::kSerializedOnMainThread); - state_ = State::kSerializedOnMainThread; - - UnparkedScopeIfNeeded unparked_scope(broker); - TraceScope tracer(broker, this, "NativeContextData::SerializeOnBackground"); - Handle<NativeContext> context = Handle<NativeContext>::cast(object()); - - constexpr auto kAllowed = ObjectRef::BackgroundSerialization::kAllowed; -#define SERIALIZE_MEMBER(type, name) \ - DCHECK_NULL(name##_); \ - name##_ = broker->GetOrCreateData(context->name(), kAllowed); \ - if (!name##_->should_access_heap()) { \ - DCHECK(!name##_->IsJSFunction()); \ - } - BROKER_COMPULSORY_BACKGROUND_NATIVE_CONTEXT_FIELDS(SERIALIZE_MEMBER) - if (!broker->is_isolate_bootstrapping()) { - BROKER_OPTIONAL_BACKGROUND_NATIVE_CONTEXT_FIELDS(SERIALIZE_MEMBER) - } -#undef SERIALIZE_MEMBER - - DCHECK(function_maps_.empty()); - int const first = Context::FIRST_FUNCTION_MAP_INDEX; - int const last = Context::LAST_FUNCTION_MAP_INDEX; - function_maps_.reserve(last + 1 - first); - for (int i = first; i <= last; ++i) { - function_maps_.push_back( - broker->GetOrCreateData(context->get(i), kAllowed)); - } -} - -void JSFunctionRef::Serialize() { - if (data_->should_access_heap()) return; - CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); - data()->AsJSFunction()->Serialize(broker()); -} - -void JSFunctionRef::SerializeCodeAndFeedback() { - if (data_->should_access_heap()) return; - CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); - data()->AsJSFunction()->SerializeCodeAndFeedback(broker()); -} - -bool JSBoundFunctionRef::serialized() const { - if (data_->should_access_heap()) return true; - return data()->AsJSBoundFunction()->serialized(); -} - -bool JSFunctionRef::serialized() const { - if (data_->should_access_heap()) return true; - return data()->AsJSFunction()->serialized(); -} - -bool JSFunctionRef::serialized_code_and_feedback() const { - if (data_->should_access_heap()) return true; - return data()->AsJSFunction()->serialized_code_and_feedback(); -} - -CodeRef JSFunctionRef::code() const { - if (data_->should_access_heap() || FLAG_turbo_direct_heap_access) { - return CodeRef(broker(), broker()->CanonicalPersistentHandle( - object()->code(kAcquireLoad))); - } - - return CodeRef(broker(), ObjectRef::data()->AsJSFunction()->code()); -} - -void SharedFunctionInfoRef::SerializeFunctionTemplateInfo() { - if (data_->should_access_heap()) return; - CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); - data()->AsSharedFunctionInfo()->SerializeFunctionTemplateInfo(broker()); -} - -void SharedFunctionInfoRef::SerializeScopeInfoChain() { - if (data_->should_access_heap()) return; - CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); - data()->AsSharedFunctionInfo()->SerializeScopeInfoChain(broker()); -} - -base::Optional<FunctionTemplateInfoRef> -SharedFunctionInfoRef::function_template_info() const { - if (data_->should_access_heap()) { - if (object()->IsApiFunction()) { - ObjectData* data = - broker()->TryGetOrCreateData(broker()->CanonicalPersistentHandle( - object()->function_data(kAcquireLoad))); - if (data == nullptr) return base::nullopt; - return FunctionTemplateInfoRef(broker(), data, true); - } - return base::nullopt; - } - ObjectData* function_template_info = - data()->AsSharedFunctionInfo()->function_template_info(); - if (!function_template_info) return base::nullopt; - return FunctionTemplateInfoRef(broker(), function_template_info); -} - -int SharedFunctionInfoRef::context_header_size() const { - IF_ACCESS_FROM_HEAP_C(scope_info().ContextHeaderLength); - return data()->AsSharedFunctionInfo()->context_header_size(); -} - -ScopeInfoRef SharedFunctionInfoRef::scope_info() const { - if (data_->should_access_heap()) { - return ScopeInfoRef( - broker(), broker()->CanonicalPersistentHandle(object()->scope_info())); - } - return ScopeInfoRef(broker(), data()->AsSharedFunctionInfo()->scope_info()); -} - -void JSObjectRef::SerializeObjectCreateMap() { - if (data_->should_access_heap()) return; - CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); - data()->AsJSObject()->SerializeObjectCreateMap(broker()); -} - -void MapRef::SerializeOwnDescriptor(InternalIndex descriptor_index) { - CHECK_LT(descriptor_index.as_int(), NumberOfOwnDescriptors()); - if (data_->should_access_heap()) return; - CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); - data()->AsMap()->SerializeOwnDescriptor(broker(), descriptor_index); -} - -bool MapRef::serialized_own_descriptor(InternalIndex descriptor_index) const { - CHECK_LT(descriptor_index.as_int(), NumberOfOwnDescriptors()); - if (data_->should_access_heap()) return true; - ObjectData* maybe_desc_array_data = data()->AsMap()->instance_descriptors(); - if (!maybe_desc_array_data) return false; - if (maybe_desc_array_data->should_access_heap()) return true; - DescriptorArrayData* desc_array_data = - maybe_desc_array_data->AsDescriptorArray(); - return desc_array_data->serialized_descriptor(descriptor_index); -} - -void MapRef::SerializeBackPointer() { - if (data_->should_access_heap()) return; - CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); - data()->AsMap()->SerializeBackPointer(broker()); -} - -void MapRef::SerializePrototype() { - if (data_->should_access_heap()) return; - CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); - data()->AsMap()->SerializePrototype(broker()); -} - -bool MapRef::serialized_prototype() const { - if (data_->should_access_heap()) return true; - CHECK_NE(broker()->mode(), JSHeapBroker::kDisabled); - return data()->AsMap()->serialized_prototype(); -} - -void SourceTextModuleRef::Serialize() { - if (data_->should_access_heap()) return; - CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); - data()->AsSourceTextModule()->Serialize(broker()); -} - -void NativeContextRef::Serialize() { - if (data_->should_access_heap()) return; - CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); - data()->AsNativeContext()->Serialize(broker()); -} - -void NativeContextRef::SerializeOnBackground() { - if (data_->should_access_heap()) return; - CHECK(broker()->mode() == JSHeapBroker::kSerializing || - broker()->mode() == JSHeapBroker::kSerialized); - data()->AsNativeContext()->SerializeOnBackground(broker()); -} - -void JSTypedArrayRef::Serialize() { - if (data_->should_access_heap() || FLAG_turbo_direct_heap_access) { - // Even if the typed array object itself is no longer serialized (besides - // the JSObject parts), the `buffer` field still is and thus we need to - // make sure to visit it. - // TODO(jgruber,v8:7790): Remove once JSObject is no longer serialized. - static_assert( - std::is_base_of<JSObject, decltype(object()->buffer())>::value, ""); - STATIC_ASSERT(IsSerializedHeapObject<JSObject>()); - JSObjectRef data_ref{ - broker(), broker()->CanonicalPersistentHandle(object()->buffer())}; - } else { - CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); - data()->AsJSTypedArray()->Serialize(broker()); - } -} - -bool JSTypedArrayRef::serialized() const { - CHECK_NE(broker()->mode(), JSHeapBroker::kDisabled); - return data()->AsJSTypedArray()->serialized(); -} - -bool JSTypedArrayRef::ShouldHaveBeenSerialized() const { - if (FLAG_turbo_direct_heap_access) return false; - return ObjectRef::ShouldHaveBeenSerialized(); -} - -bool JSBoundFunctionRef::Serialize() { - if (data_->should_access_heap()) return true; - CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); - return data()->AsJSBoundFunction()->Serialize(broker()); -} - -bool PropertyCellRef::Serialize() const { - if (data_->should_access_heap()) return true; - CHECK(broker()->mode() == JSHeapBroker::kSerializing || - broker()->mode() == JSHeapBroker::kSerialized); - return data()->AsPropertyCell()->Serialize(broker()); -} - -void FunctionTemplateInfoRef::SerializeCallCode() { - if (data_->should_access_heap()) { - CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); - // CallHandlerInfo::data may still hold a serialized heap object, so we - // have to make the broker aware of it. - // TODO(v8:7790): Remove this case once ObjectRef is never serialized. - Handle<HeapObject> call_code(object()->call_code(kAcquireLoad), - broker()->isolate()); - if (call_code->IsCallHandlerInfo()) { - broker()->GetOrCreateData( - Handle<CallHandlerInfo>::cast(call_code)->data()); - } - return; - } - CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing); - data()->AsFunctionTemplateInfo()->SerializeCallCode(broker()); -} - -base::Optional<PropertyCellRef> JSGlobalObjectRef::GetPropertyCell( - NameRef const& name, SerializationPolicy policy) const { - if (data_->should_access_heap()) { - return GetPropertyCellFromHeap(broker(), name.object()); - } - ObjectData* property_cell_data = data()->AsJSGlobalObject()->GetPropertyCell( - broker(), name.data(), policy); - if (property_cell_data == nullptr) return base::nullopt; - return PropertyCellRef(broker(), property_cell_data); +bool JSHeapBroker::ObjectMayBeUninitialized(HeapObject object) const { + return !IsMainThread() && isolate()->heap()->IsPendingAllocation(object); } bool CanInlineElementAccess(MapRef const& map) { @@ -4942,7 +459,7 @@ ElementAccessFeedback::ElementAccessFeedback(Zone* zone, bool ElementAccessFeedback::HasOnlyStringMaps(JSHeapBroker* broker) const { for (auto const& group : transition_groups()) { for (Handle<Map> map : group) { - if (!MapRef(broker, map).IsStringMap()) return false; + if (!MakeRef(broker, map).IsStringMap()) return false; } } return true; @@ -5008,6 +525,7 @@ bool JSHeapBroker::FeedbackIsInsufficient(FeedbackSource const& source) const { } namespace { + // Remove unupdatable and abandoned prototype maps in-place. void FilterRelevantReceiverMaps(Isolate* isolate, MapHandles* maps) { auto in = maps->begin(); @@ -5074,6 +592,7 @@ bool HasMigrationTargets(const MapHandles& maps) { } return false; } + } // namespace bool JSHeapBroker::CanUseFeedback(const FeedbackNexus& nexus) const { @@ -5166,12 +685,12 @@ ProcessedFeedback const& JSHeapBroker::ReadFeedbackForGlobalAccess( isolate(), target_native_context().script_context_table().object(), script_context_index); { - ObjectRef contents(this, - handle(context->get(context_slot_index), isolate())); + ObjectRef contents = + MakeRef(this, handle(context->get(context_slot_index), isolate())); CHECK(!contents.equals( - ObjectRef(this, isolate()->factory()->the_hole_value()))); + MakeRef<Object>(this, isolate()->factory()->the_hole_value()))); } - ContextRef context_ref(this, context); + ContextRef context_ref = MakeRef(this, context); if (immutable) { context_ref.get(context_slot_index, SerializationPolicy::kSerializeIfNeeded); @@ -5183,11 +702,10 @@ ProcessedFeedback const& JSHeapBroker::ReadFeedbackForGlobalAccess( CHECK(feedback_value->IsPropertyCell()); // The wanted name belongs (or did belong) to a property on the global // object and the feedback is the cell holding its value. - PropertyCellRef cell(this, Handle<PropertyCell>::cast(feedback_value)); - ObjectRef( - this, - CanonicalPersistentHandle( - Handle<PropertyCell>::cast(feedback_value)->value(kAcquireLoad))); + PropertyCellRef cell = + MakeRef(this, Handle<PropertyCell>::cast(feedback_value)); + MakeRef(this, + Handle<PropertyCell>::cast(feedback_value)->value(kAcquireLoad)); return *zone()->New<GlobalAccessFeedback>(cell, nexus.kind()); } @@ -5228,7 +746,7 @@ ProcessedFeedback const& JSHeapBroker::ReadFeedbackForInstanceOf( MaybeHandle<JSObject> maybe_constructor = nexus.GetConstructorFeedback(); Handle<JSObject> constructor; if (maybe_constructor.ToHandle(&constructor)) { - optional_constructor = JSObjectRef(this, constructor); + optional_constructor = MakeRef(this, constructor); } } return *zone()->New<InstanceOfFeedback>(optional_constructor, nexus.kind()); @@ -5244,7 +762,8 @@ ProcessedFeedback const& JSHeapBroker::ReadFeedbackForArrayOrObjectLiteral( return NewInsufficientFeedback(nexus.kind()); } - AllocationSiteRef site(this, handle(object, isolate())); + AllocationSiteRef site = + MakeRef(this, handle(AllocationSite::cast(object), isolate())); if (site.IsFastLiteral()) { site.SerializeBoilerplate(); } @@ -5262,7 +781,8 @@ ProcessedFeedback const& JSHeapBroker::ReadFeedbackForRegExpLiteral( return NewInsufficientFeedback(nexus.kind()); } - RegExpBoilerplateDescriptionRef boilerplate(this, handle(object, isolate())); + RegExpBoilerplateDescriptionRef boilerplate = MakeRef( + this, handle(RegExpBoilerplateDescription::cast(object), isolate())); boilerplate.Serialize(); return *zone()->New<RegExpLiteralFeedback>(boilerplate, nexus.kind()); } @@ -5277,7 +797,7 @@ ProcessedFeedback const& JSHeapBroker::ReadFeedbackForTemplateObject( return NewInsufficientFeedback(nexus.kind()); } - JSArrayRef array(this, handle(object, isolate())); + JSArrayRef array = MakeRef(this, handle(JSArray::cast(object), isolate())); return *zone()->New<TemplateObjectFeedback>(array, nexus.kind()); } @@ -5297,12 +817,14 @@ ProcessedFeedback const& JSHeapBroker::ReadFeedbackForCall( MaybeObject maybe_target = nexus.GetFeedback(); HeapObject target_object; if (maybe_target->GetHeapObject(&target_object)) { - target_ref = HeapObjectRef(this, handle(target_object, isolate())); + target_ref = MakeRef(this, handle(target_object, isolate())); } } float frequency = nexus.ComputeCallFrequency(); SpeculationMode mode = nexus.GetSpeculationMode(); - return *zone()->New<CallFeedback>(target_ref, frequency, mode, nexus.kind()); + CallFeedbackContent content = nexus.GetCallFeedbackContent(); + return *zone()->New<CallFeedback>(target_ref, frequency, mode, content, + nexus.kind()); } BinaryOperationHint JSHeapBroker::GetFeedbackForBinaryOperation( @@ -5468,7 +990,7 @@ ElementAccessFeedback const& JSHeapBroker::ProcessFeedbackMapsForElementAccess( MapHandles possible_transition_targets; possible_transition_targets.reserve(maps.size()); for (Handle<Map> map : maps) { - MapRef map_ref(this, map); + MapRef map_ref = MakeRef(this, map); map_ref.SerializeRootMap(); if (CanInlineElementAccess(map_ref) && @@ -5531,23 +1053,11 @@ void ElementAccessFeedback::AddGroup(TransitionGroup&& group) { #endif } -std::ostream& operator<<(std::ostream& os, const ObjectRef& ref) { - if (!FLAG_concurrent_recompilation) { - // We cannot be in a background thread so it's safe to read the heap. - AllowHandleDereference allow_handle_dereference; - return os << ref.data() << " {" << ref.object() << "}"; - } else if (ref.data_->should_access_heap()) { - return os << ref.data() << " {" << ref.object() << "}"; - } else { - return os << ref.data(); - } -} - base::Optional<NameRef> JSHeapBroker::GetNameFeedback( FeedbackNexus const& nexus) { Name raw_name = nexus.GetName(); if (raw_name.is_null()) return base::nullopt; - return NameRef(this, handle(raw_name, isolate())); + return MakeRef(this, handle(raw_name, isolate())); } PropertyAccessInfo JSHeapBroker::GetPropertyAccessInfo( @@ -5557,7 +1067,8 @@ PropertyAccessInfo JSHeapBroker::GetPropertyAccessInfo( auto it = property_access_infos_.find(target); if (it != property_access_infos_.end()) return it->second; - if (policy == SerializationPolicy::kAssumeSerialized) { + if (policy == SerializationPolicy::kAssumeSerialized && + !FLAG_turbo_concurrent_get_property_access_info) { TRACE_BROKER_MISSING(this, "PropertyAccessInfo for " << access_mode << " of property " << name << " on map " << map); @@ -5569,7 +1080,8 @@ PropertyAccessInfo JSHeapBroker::GetPropertyAccessInfo( PropertyAccessInfo access_info = factory.ComputePropertyAccessInfo( map.object(), name.object(), access_mode); if (is_concurrent_inlining_) { - CHECK_EQ(mode(), kSerializing); + CHECK_IMPLIES(!FLAG_turbo_concurrent_get_property_access_info, + mode() == kSerializing); TRACE(this, "Storing PropertyAccessInfo for " << access_mode << " of property " << name << " on map " << map); @@ -5664,27 +1176,7 @@ TemplateObjectFeedback const& ProcessedFeedback::AsTemplateObject() const { return *static_cast<TemplateObjectFeedback const*>(this); } -unsigned CodeRef::GetInlinedBytecodeSize() const { - if (data_->should_access_heap()) { - unsigned value = object()->inlined_bytecode_size(); - if (value > 0) { - // Don't report inlined bytecode size if the code object was already - // deoptimized. - value = object()->marked_for_deoptimization() ? 0 : value; - } - return value; - } - - return ObjectRef::data()->AsCode()->inlined_bytecode_size(); -} - -#undef BIMODAL_ACCESSOR -#undef BIMODAL_ACCESSOR_B -#undef BIMODAL_ACCESSOR_C -#undef IF_ACCESS_FROM_HEAP -#undef IF_ACCESS_FROM_HEAP_C #undef TRACE -#undef TRACE_MISSING } // namespace compiler } // namespace internal diff --git a/deps/v8/src/compiler/js-heap-broker.h b/deps/v8/src/compiler/js-heap-broker.h index 32b09dddbc..cc842ca8e6 100644 --- a/deps/v8/src/compiler/js-heap-broker.h +++ b/deps/v8/src/compiler/js-heap-broker.h @@ -7,10 +7,12 @@ #include "src/base/compiler-specific.h" #include "src/base/optional.h" +#include "src/base/platform/mutex.h" #include "src/common/globals.h" #include "src/compiler/access-info.h" #include "src/compiler/feedback-source.h" #include "src/compiler/globals.h" +#include "src/compiler/heap-refs.h" #include "src/compiler/processed-feedback.h" #include "src/compiler/refs-map.h" #include "src/compiler/serializer-hints.h" @@ -78,6 +80,18 @@ struct PropertyAccessTarget { }; }; +enum GetOrCreateDataFlag { + // If set, a failure to create the data object results in a crash. + kCrashOnError = 1 << 0, + // If set, data construction assumes that the given object is protected by + // a memory fence (e.g. acquire-release) and thus fields required for + // construction (like Object::map) are safe to read. The protection can + // extend to some other situations as well. + kAssumeMemoryFence = 1 << 1, +}; +using GetOrCreateDataFlags = base::Flags<GetOrCreateDataFlag>; +DEFINE_OPERATORS_FOR_FLAGS(GetOrCreateDataFlags) + class V8_EXPORT_PRIVATE JSHeapBroker { public: JSHeapBroker(Isolate* isolate, Zone* broker_zone, bool tracing_enabled, @@ -98,7 +112,7 @@ class V8_EXPORT_PRIVATE JSHeapBroker { } void SetTargetNativeContextRef(Handle<NativeContext> native_context); - void InitializeAndStartSerializing(Handle<NativeContext> native_context); + void InitializeAndStartSerializing(); Isolate* isolate() const { return isolate_; } Zone* zone() const { return zone_; } @@ -106,7 +120,8 @@ class V8_EXPORT_PRIVATE JSHeapBroker { bool is_concurrent_inlining() const { return is_concurrent_inlining_; } bool is_isolate_bootstrapping() const { return is_isolate_bootstrapping_; } bool is_native_context_independent() const { - return code_kind_ == CodeKind::NATIVE_CONTEXT_INDEPENDENT; + // TODO(jgruber,v8:8888): Remove dependent code. + return false; } bool generate_full_feedback_collection() const { // NCI code currently collects full feedback. @@ -145,29 +160,25 @@ class V8_EXPORT_PRIVATE JSHeapBroker { void PrintRefsAnalysis() const; #endif // DEBUG - // Retruns the handle from root index table for read only heap objects. + // Returns the handle from root index table for read only heap objects. Handle<Object> GetRootHandle(Object object); // Never returns nullptr. - ObjectData* GetOrCreateData( - Handle<Object>, - ObjectRef::BackgroundSerialization background_serialization = - ObjectRef::BackgroundSerialization::kDisallowed); - // Like the previous but wraps argument in handle first (for convenience). - ObjectData* GetOrCreateData( - Object, ObjectRef::BackgroundSerialization background_serialization = - ObjectRef::BackgroundSerialization::kDisallowed); + ObjectData* GetOrCreateData(Handle<Object> object, + GetOrCreateDataFlags flags = {}); + ObjectData* GetOrCreateData(Object object, GetOrCreateDataFlags flags = {}); // Gets data only if we have it. However, thin wrappers will be created for // smis, read-only objects and never-serialized objects. - ObjectData* TryGetOrCreateData( - Handle<Object>, bool crash_on_error = false, - ObjectRef::BackgroundSerialization background_serialization = - ObjectRef::BackgroundSerialization::kDisallowed); + ObjectData* TryGetOrCreateData(Handle<Object> object, + GetOrCreateDataFlags flags = {}); + ObjectData* TryGetOrCreateData(Object object, + GetOrCreateDataFlags flags = {}); // Check if {object} is any native context's %ArrayPrototype% or // %ObjectPrototype%. bool IsArrayOrObjectPrototype(const JSObjectRef& object) const; + bool IsArrayOrObjectPrototype(Handle<JSObject> object) const; bool HasFeedback(FeedbackSource const& source) const; void SetFeedback(FeedbackSource const& source, @@ -240,6 +251,25 @@ class V8_EXPORT_PRIVATE JSHeapBroker { FeedbackSource const& source, SerializationPolicy policy = SerializationPolicy::kAssumeSerialized); + // Used to separate the problem of a concurrent GetPropertyAccessInfo (GPAI) + // from serialization. GPAI is currently called both during the serialization + // phase, and on the background thread. While some crucial objects (like + // JSObject) still must be serialized, we do the following: + // - Run GPAI during serialization to discover and serialize required objects. + // - After the serialization phase, clear cached property access infos. + // - On the background thread, rerun GPAI in a concurrent setting. The cache + // has been cleared, thus the actual logic runs again. + // Once all required object kinds no longer require serialization, this + // should be removed together with all GPAI calls during serialization. + void ClearCachedPropertyAccessInfos() { + CHECK(FLAG_turbo_concurrent_get_property_access_info); + property_access_infos_.clear(); + } + + // As above, clear cached ObjectData that can be reconstructed, i.e. is + // either never-serialized or background-serialized. + void ClearReconstructibleData(); + StringRef GetTypedArrayStringTag(ElementsKind kind); bool ShouldBeSerializedForCompilation(const SharedFunctionInfoRef& shared, @@ -257,6 +287,14 @@ class V8_EXPORT_PRIVATE JSHeapBroker { LocalIsolate* local_isolate() const { return local_isolate_; } + // TODO(jgruber): Consider always having local_isolate_ set to a real value. + // This seems not entirely trivial since we currently reset local_isolate_ to + // nullptr at some point in the JSHeapBroker lifecycle. + LocalIsolate* local_isolate_or_isolate() const { + return local_isolate() != nullptr ? local_isolate() + : isolate()->AsLocalIsolate(); + } + // Return the corresponding canonical persistent handle for {object}. Create // one if it does not exist. // If we have the canonical map, we can create the canonical & persistent @@ -291,6 +329,7 @@ class V8_EXPORT_PRIVATE JSHeapBroker { template <typename T> Handle<T> CanonicalPersistentHandle(Handle<T> object) { + if (object.is_null()) return object; // Can't deref a null handle. return CanonicalPersistentHandle<T>(*object); } @@ -313,6 +352,34 @@ class V8_EXPORT_PRIVATE JSHeapBroker { RootIndexMap const& root_index_map() { return root_index_map_; } + // Locks {mutex} through the duration of this scope iff it is the first + // occurrence. This is done to have a recursive shared lock on {mutex}. + class V8_NODISCARD MapUpdaterGuardIfNeeded final { + public: + explicit MapUpdaterGuardIfNeeded(JSHeapBroker* ptr, + base::SharedMutex* mutex) + : ptr_(ptr), + initial_map_updater_mutex_depth_(ptr->map_updater_mutex_depth_), + shared_mutex(mutex, should_lock()) { + ptr_->map_updater_mutex_depth_++; + } + + ~MapUpdaterGuardIfNeeded() { + ptr_->map_updater_mutex_depth_--; + DCHECK_EQ(initial_map_updater_mutex_depth_, + ptr_->map_updater_mutex_depth_); + } + + // Whether the MapUpdater mutex should be physically locked (if not, we + // already hold the lock). + bool should_lock() const { return initial_map_updater_mutex_depth_ == 0; } + + private: + JSHeapBroker* const ptr_; + const int initial_map_updater_mutex_depth_; + base::SharedMutexGuardIf<base::kShared> shared_mutex; + }; + private: friend class HeapObjectRef; friend class ObjectRef; @@ -323,6 +390,7 @@ class V8_EXPORT_PRIVATE JSHeapBroker { // thus safe to read from a memory safety perspective. The converse does not // necessarily hold. bool ObjectMayBeUninitialized(Handle<Object> object) const; + bool ObjectMayBeUninitialized(HeapObject object) const; bool CanUseFeedback(const FeedbackNexus& nexus) const; const ProcessedFeedback& NewInsufficientFeedback(FeedbackSlotKind kind) const; @@ -427,9 +495,19 @@ class V8_EXPORT_PRIVATE JSHeapBroker { }; ZoneMultimap<SerializedFunction, HintsVector> serialized_functions_; - static const size_t kMaxSerializedFunctionsCacheSize = 200; - static const uint32_t kMinimalRefsBucketCount = 8; // must be power of 2 - static const uint32_t kInitialRefsBucketCount = 1024; // must be power of 2 + // The MapUpdater mutex is used in recursive patterns; for example, + // ComputePropertyAccessInfo may call itself recursively. Thus we need to + // emulate a recursive mutex, which we do by checking if this heap broker + // instance already holds the mutex when a lock is requested. This field + // holds the locking depth, i.e. how many times the mutex has been + // recursively locked. Only the outermost locker actually locks underneath. + int map_updater_mutex_depth_ = 0; + + static constexpr size_t kMaxSerializedFunctionsCacheSize = 200; + static constexpr uint32_t kMinimalRefsBucketCount = 8; + STATIC_ASSERT(base::bits::IsPowerOfTwo(kMinimalRefsBucketCount)); + static constexpr uint32_t kInitialRefsBucketCount = 1024; + STATIC_ASSERT(base::bits::IsPowerOfTwo(kInitialRefsBucketCount)); }; class V8_NODISCARD TraceScope { @@ -490,6 +568,65 @@ class V8_NODISCARD UnparkedScopeIfNeeded { base::Optional<UnparkedScope> unparked_scope; }; +// Usage: +// +// base::Optional<FooRef> ref = TryMakeRef(broker, o); +// if (!ref.has_value()) return {}; // bailout +// +// or +// +// FooRef ref = MakeRef(broker, o); +template <class T, + typename = std::enable_if_t<std::is_convertible<T*, Object*>::value>> +base::Optional<typename ref_traits<T>::ref_type> TryMakeRef( + JSHeapBroker* broker, T object, GetOrCreateDataFlags flags = {}) { + ObjectData* data = broker->TryGetOrCreateData(object, flags); + if (data == nullptr) { + TRACE_BROKER_MISSING(broker, "ObjectData for " << Brief(object)); + return {}; + } + return {typename ref_traits<T>::ref_type(broker, data)}; +} + +template <class T, + typename = std::enable_if_t<std::is_convertible<T*, Object*>::value>> +base::Optional<typename ref_traits<T>::ref_type> TryMakeRef( + JSHeapBroker* broker, Handle<T> object, GetOrCreateDataFlags flags = {}) { + ObjectData* data = broker->TryGetOrCreateData(object, flags); + if (data == nullptr) { + TRACE_BROKER_MISSING(broker, "ObjectData for " << Brief(*object)); + return {}; + } + return {typename ref_traits<T>::ref_type(broker, data)}; +} + +template <class T, + typename = std::enable_if_t<std::is_convertible<T*, Object*>::value>> +typename ref_traits<T>::ref_type MakeRef(JSHeapBroker* broker, T object) { + return TryMakeRef(broker, object).value(); +} + +template <class T, + typename = std::enable_if_t<std::is_convertible<T*, Object*>::value>> +typename ref_traits<T>::ref_type MakeRef(JSHeapBroker* broker, + Handle<T> object) { + return TryMakeRef(broker, object).value(); +} + +template <class T, + typename = std::enable_if_t<std::is_convertible<T*, Object*>::value>> +typename ref_traits<T>::ref_type MakeRefAssumeMemoryFence(JSHeapBroker* broker, + T object) { + return TryMakeRef(broker, object, kAssumeMemoryFence).value(); +} + +template <class T, + typename = std::enable_if_t<std::is_convertible<T*, Object*>::value>> +typename ref_traits<T>::ref_type MakeRefAssumeMemoryFence(JSHeapBroker* broker, + Handle<T> object) { + return TryMakeRef(broker, object, kAssumeMemoryFence).value(); +} + } // namespace compiler } // namespace internal } // namespace v8 diff --git a/deps/v8/src/compiler/js-heap-copy-reducer.cc b/deps/v8/src/compiler/js-heap-copy-reducer.cc index 3b45b9d82b..b8f6274741 100644 --- a/deps/v8/src/compiler/js-heap-copy-reducer.cc +++ b/deps/v8/src/compiler/js-heap-copy-reducer.cc @@ -28,7 +28,7 @@ JSHeapBroker* JSHeapCopyReducer::broker() { return broker_; } Reduction JSHeapCopyReducer::Reduce(Node* node) { switch (node->opcode()) { case IrOpcode::kCheckClosure: { - FeedbackCellRef cell(broker(), FeedbackCellOf(node->op())); + FeedbackCellRef cell = MakeRef(broker(), FeedbackCellOf(node->op())); base::Optional<FeedbackVectorRef> feedback_vector = cell.value(); if (feedback_vector.has_value()) { feedback_vector->Serialize(); @@ -36,7 +36,7 @@ Reduction JSHeapCopyReducer::Reduce(Node* node) { break; } case IrOpcode::kHeapConstant: { - ObjectRef object(broker(), HeapConstantOf(node->op())); + ObjectRef object = MakeRef(broker(), HeapConstantOf(node->op())); if (object.IsJSFunction()) object.AsJSFunction().Serialize(); if (object.IsJSObject()) { object.AsJSObject().SerializeObjectCreateMap(); @@ -49,34 +49,33 @@ Reduction JSHeapCopyReducer::Reduce(Node* node) { case IrOpcode::kJSCreateArray: { CreateArrayParameters const& p = CreateArrayParametersOf(node->op()); Handle<AllocationSite> site; - if (p.site().ToHandle(&site)) AllocationSiteRef(broker(), site); + if (p.site().ToHandle(&site)) MakeRef(broker(), site); break; } case IrOpcode::kJSCreateArguments: { Node* const frame_state = NodeProperties::GetFrameStateInput(node); FrameStateInfo state_info = FrameStateInfoOf(frame_state->op()); - SharedFunctionInfoRef shared(broker(), - state_info.shared_info().ToHandleChecked()); + MakeRef(broker(), state_info.shared_info().ToHandleChecked()); break; } case IrOpcode::kJSCreateBlockContext: { - ScopeInfoRef(broker(), ScopeInfoOf(node->op())); + MakeRef(broker(), ScopeInfoOf(node->op())); break; } case IrOpcode::kJSCreateBoundFunction: { CreateBoundFunctionParameters const& p = CreateBoundFunctionParametersOf(node->op()); - MapRef(broker(), p.map()); + MakeRef(broker(), p.map()); break; } case IrOpcode::kJSCreateCatchContext: { - ScopeInfoRef(broker(), ScopeInfoOf(node->op())); + MakeRef(broker(), ScopeInfoOf(node->op())); break; } case IrOpcode::kJSCreateClosure: { CreateClosureParameters const& p = CreateClosureParametersOf(node->op()); - SharedFunctionInfoRef(broker(), p.shared_info()); - HeapObjectRef(broker(), p.code()); + MakeRef(broker(), p.shared_info()); + MakeRef(broker(), p.code()); break; } case IrOpcode::kJSCreateEmptyLiteralArray: { @@ -133,7 +132,7 @@ Reduction JSHeapCopyReducer::Reduce(Node* node) { case IrOpcode::kJSCreateFunctionContext: { CreateFunctionContextParameters const& p = CreateFunctionContextParametersOf(node->op()); - ScopeInfoRef(broker(), p.scope_info()); + MakeRef(broker(), p.scope_info()); break; } case IrOpcode::kJSCreateLiteralArray: @@ -154,18 +153,18 @@ Reduction JSHeapCopyReducer::Reduce(Node* node) { case IrOpcode::kJSGetTemplateObject: { GetTemplateObjectParameters const& p = GetTemplateObjectParametersOf(node->op()); - SharedFunctionInfoRef(broker(), p.shared()); - TemplateObjectDescriptionRef(broker(), p.description()); + MakeRef(broker(), p.shared()); + MakeRef(broker(), p.description()); broker()->ProcessFeedbackForTemplateObject(p.feedback()); break; } case IrOpcode::kJSCreateWithContext: { - ScopeInfoRef(broker(), ScopeInfoOf(node->op())); + MakeRef(broker(), ScopeInfoOf(node->op())); break; } case IrOpcode::kJSLoadNamed: { NamedAccess const& p = NamedAccessOf(node->op()); - NameRef name(broker(), p.name()); + NameRef name = MakeRef(broker(), p.name()); if (p.feedback().IsValid()) { broker()->ProcessFeedbackForPropertyAccess(p.feedback(), AccessMode::kLoad, name); @@ -174,7 +173,7 @@ Reduction JSHeapCopyReducer::Reduce(Node* node) { } case IrOpcode::kJSLoadNamedFromSuper: { NamedAccess const& p = NamedAccessOf(node->op()); - NameRef name(broker(), p.name()); + NameRef name = MakeRef(broker(), p.name()); if (p.feedback().IsValid()) { broker()->ProcessFeedbackForPropertyAccess(p.feedback(), AccessMode::kLoad, name); @@ -183,7 +182,7 @@ Reduction JSHeapCopyReducer::Reduce(Node* node) { } case IrOpcode::kJSStoreNamed: { NamedAccess const& p = NamedAccessOf(node->op()); - NameRef name(broker(), p.name()); + MakeRef(broker(), p.name()); break; } case IrOpcode::kStoreField: @@ -191,32 +190,32 @@ Reduction JSHeapCopyReducer::Reduce(Node* node) { FieldAccess access = FieldAccessOf(node->op()); Handle<Map> map_handle; if (access.map.ToHandle(&map_handle)) { - MapRef(broker(), map_handle); + MakeRef(broker(), map_handle); } Handle<Name> name_handle; if (access.name.ToHandle(&name_handle)) { - NameRef(broker(), name_handle); + MakeRef(broker(), name_handle); } break; } case IrOpcode::kMapGuard: { ZoneHandleSet<Map> const& maps = MapGuardMapsOf(node->op()); for (Handle<Map> map : maps) { - MapRef(broker(), map); + MakeRef(broker(), map); } break; } case IrOpcode::kCheckMaps: { ZoneHandleSet<Map> const& maps = CheckMapsParametersOf(node->op()).maps(); for (Handle<Map> map : maps) { - MapRef(broker(), map); + MakeRef(broker(), map); } break; } case IrOpcode::kCompareMaps: { ZoneHandleSet<Map> const& maps = CompareMapsParametersOf(node->op()); for (Handle<Map> map : maps) { - MapRef(broker(), map); + MakeRef(broker(), map); } break; } diff --git a/deps/v8/src/compiler/js-inlining-heuristic.cc b/deps/v8/src/compiler/js-inlining-heuristic.cc index 5777719107..8115f8e565 100644 --- a/deps/v8/src/compiler/js-inlining-heuristic.cc +++ b/deps/v8/src/compiler/js-inlining-heuristic.cc @@ -110,7 +110,7 @@ JSInliningHeuristic::Candidate JSInliningHeuristic::CollectFunctions( } if (m.IsCheckClosure()) { DCHECK(!out.functions[0].has_value()); - FeedbackCellRef feedback_cell(broker(), FeedbackCellOf(m.op())); + FeedbackCellRef feedback_cell = MakeRef(broker(), FeedbackCellOf(m.op())); SharedFunctionInfoRef shared_info = *feedback_cell.shared_function_info(); out.shared_info = shared_info; if (CanConsiderForInlining(broker(), shared_info, *feedback_cell.value())) { @@ -124,7 +124,7 @@ JSInliningHeuristic::Candidate JSInliningHeuristic::CollectFunctions( JSCreateClosureNode n(callee); CreateClosureParameters const& p = n.Parameters(); FeedbackCellRef feedback_cell = n.GetFeedbackCellRefChecked(broker()); - SharedFunctionInfoRef shared_info(broker(), p.shared_info()); + SharedFunctionInfoRef shared_info = MakeRef(broker(), p.shared_info()); out.shared_info = shared_info; if (feedback_cell.value().has_value() && CanConsiderForInlining(broker(), shared_info, *feedback_cell.value())) { diff --git a/deps/v8/src/compiler/js-inlining.cc b/deps/v8/src/compiler/js-inlining.cc index 6e64f2b677..e55efde5d8 100644 --- a/deps/v8/src/compiler/js-inlining.cc +++ b/deps/v8/src/compiler/js-inlining.cc @@ -335,7 +335,7 @@ base::Optional<SharedFunctionInfoRef> JSInliner::DetermineCallTarget( FeedbackCellRef cell = n.GetFeedbackCellRefChecked(broker()); return cell.shared_function_info(); } else if (match.IsCheckClosure()) { - FeedbackCellRef cell(broker(), FeedbackCellOf(match.op())); + FeedbackCellRef cell = MakeRef(broker(), FeedbackCellOf(match.op())); return cell.shared_function_info(); } @@ -373,7 +373,7 @@ FeedbackCellRef JSInliner::DetermineCallContext(Node* node, *context_out = NodeProperties::GetContextInput(match.node()); return cell; } else if (match.IsCheckClosure()) { - FeedbackCellRef cell(broker(), FeedbackCellOf(match.op())); + FeedbackCellRef cell = MakeRef(broker(), FeedbackCellOf(match.op())); Node* effect = NodeProperties::GetEffectInput(node); Node* control = NodeProperties::GetControlInput(node); @@ -475,7 +475,8 @@ Reduction JSInliner::ReduceJSCall(Node* node) { if (!shared_info.has_value()) return NoChange(); DCHECK(shared_info->IsInlineable()); - SharedFunctionInfoRef outer_shared_info(broker(), info_->shared_info()); + SharedFunctionInfoRef outer_shared_info = + MakeRef(broker(), info_->shared_info()); // Constructor must be constructable. if (node->opcode() == IrOpcode::kJSConstruct && diff --git a/deps/v8/src/compiler/js-intrinsic-lowering.cc b/deps/v8/src/compiler/js-intrinsic-lowering.cc index 449136051b..803d55cc27 100644 --- a/deps/v8/src/compiler/js-intrinsic-lowering.cc +++ b/deps/v8/src/compiler/js-intrinsic-lowering.cc @@ -30,11 +30,15 @@ Reduction JSIntrinsicLowering::Reduce(Node* node) { if (node->opcode() != IrOpcode::kJSCallRuntime) return NoChange(); const Runtime::Function* const f = Runtime::FunctionForId(CallRuntimeParametersOf(node->op()).id()); - if (f->function_id == Runtime::kTurbofanStaticAssert) { - return ReduceTurbofanStaticAssert(node); - } - if (f->function_id == Runtime::kIsBeingInterpreted) { - return ReduceIsBeingInterpreted(node); + switch (f->function_id) { + case Runtime::kIsBeingInterpreted: + return ReduceIsBeingInterpreted(node); + case Runtime::kTurbofanStaticAssert: + return ReduceTurbofanStaticAssert(node); + case Runtime::kVerifyType: + return ReduceVerifyType(node); + default: + break; } if (f->intrinsic_type != Runtime::IntrinsicType::INLINE) return NoChange(); switch (f->function_id) { @@ -80,8 +84,6 @@ Reduction JSIntrinsicLowering::Reduce(Node* node) { return ReduceToLength(node); case Runtime::kInlineToObject: return ReduceToObject(node); - case Runtime::kInlineToString: - return ReduceToString(node); case Runtime::kInlineCall: return ReduceCall(node); case Runtime::kInlineIncBlockCounter: @@ -290,6 +292,10 @@ Reduction JSIntrinsicLowering::ReduceTurbofanStaticAssert(Node* node) { return Changed(jsgraph_->UndefinedConstant()); } +Reduction JSIntrinsicLowering::ReduceVerifyType(Node* node) { + return Change(node, simplified()->VerifyType()); +} + Reduction JSIntrinsicLowering::ReduceIsBeingInterpreted(Node* node) { RelaxEffectsAndControls(node); return Changed(jsgraph_->FalseConstant()); diff --git a/deps/v8/src/compiler/js-intrinsic-lowering.h b/deps/v8/src/compiler/js-intrinsic-lowering.h index 3deeb5685e..f2d4dbccf2 100644 --- a/deps/v8/src/compiler/js-intrinsic-lowering.h +++ b/deps/v8/src/compiler/js-intrinsic-lowering.h @@ -60,6 +60,7 @@ class V8_EXPORT_PRIVATE JSIntrinsicLowering final Reduction ReduceIsSmi(Node* node); Reduction ReduceIsBeingInterpreted(Node* node); Reduction ReduceTurbofanStaticAssert(Node* node); + Reduction ReduceVerifyType(Node* node); Reduction ReduceToLength(Node* node); Reduction ReduceToObject(Node* node); Reduction ReduceToString(Node* node); diff --git a/deps/v8/src/compiler/js-native-context-specialization.cc b/deps/v8/src/compiler/js-native-context-specialization.cc index 3d9290a0bf..8c372d3453 100644 --- a/deps/v8/src/compiler/js-native-context-specialization.cc +++ b/deps/v8/src/compiler/js-native-context-specialization.cc @@ -10,6 +10,7 @@ #include "src/codegen/string-constants.h" #include "src/compiler/access-builder.h" #include "src/compiler/access-info.h" +#include "src/compiler/allocation-builder-inl.h" #include "src/compiler/allocation-builder.h" #include "src/compiler/compilation-dependencies.h" #include "src/compiler/js-graph.h" @@ -20,7 +21,6 @@ #include "src/compiler/property-access-builder.h" #include "src/compiler/type-cache.h" #include "src/execution/isolate-inl.h" -#include "src/numbers/dtoa.h" #include "src/objects/feedback-vector.h" #include "src/objects/field-index-inl.h" #include "src/objects/heap-number.h" @@ -36,7 +36,7 @@ namespace { bool HasNumberMaps(JSHeapBroker* broker, ZoneVector<Handle<Map>> const& maps) { for (auto map : maps) { - MapRef map_ref(broker, map); + MapRef map_ref = MakeRef(broker, map); if (map_ref.IsHeapNumberMap()) return true; } return false; @@ -45,7 +45,7 @@ bool HasNumberMaps(JSHeapBroker* broker, ZoneVector<Handle<Map>> const& maps) { bool HasOnlyJSArrayMaps(JSHeapBroker* broker, ZoneVector<Handle<Map>> const& maps) { for (auto map : maps) { - MapRef map_ref(broker, map); + MapRef map_ref = MakeRef(broker, map); if (!map_ref.IsJSArrayMap()) return false; } return true; @@ -139,7 +139,7 @@ base::Optional<size_t> JSNativeContextSpecialization::GetMaxStringLength( NumberMatcher number_matcher(node); if (number_matcher.HasResolvedValue()) { - return kBase10MaximalLength + 1; + return kMaxDoubleStringLength; } // We don't support objects with possibly monkey-patched prototype.toString @@ -228,12 +228,17 @@ Reduction JSNativeContextSpecialization::ReduceJSAsyncFunctionEnter( // Create the JSAsyncFunctionObject based on the SharedFunctionInfo // extracted from the top-most frame in {frame_state}. - SharedFunctionInfoRef shared( + SharedFunctionInfoRef shared = MakeRef( broker(), FrameStateInfoOf(frame_state->op()).shared_info().ToHandleChecked()); DCHECK(shared.is_compiled()); int register_count = shared.internal_formal_parameter_count() + shared.GetBytecodeArray().register_count(); + MapRef fixed_array_map = MakeRef(broker(), factory()->fixed_array_map()); + AllocationBuilder ab(jsgraph(), effect, control); + if (!ab.CanAllocateArray(register_count, fixed_array_map)) { + return NoChange(); + } Node* value = effect = graph()->NewNode(javascript()->CreateAsyncFunctionObject(register_count), closure, receiver, promise, context, effect, control); @@ -359,19 +364,15 @@ Reduction JSNativeContextSpecialization::ReduceJSGetSuperConstructor( } JSFunctionRef function = m.Ref(broker()).AsJSFunction(); MapRef function_map = function.map(); - if (function_map.ShouldHaveBeenSerialized() && - !function_map.serialized_prototype()) { - TRACE_BROKER_MISSING(broker(), "data for map " << function_map); - return NoChange(); - } - HeapObjectRef function_prototype = function_map.prototype(); + base::Optional<HeapObjectRef> function_prototype = function_map.prototype(); + if (!function_prototype.has_value()) return NoChange(); // We can constant-fold the super constructor access if the // {function}s map is stable, i.e. we can use a code dependency // to guard against [[Prototype]] changes of {function}. if (function_map.is_stable()) { dependencies()->DependOnStableMap(function_map); - Node* value = jsgraph()->Constant(function_prototype); + Node* value = jsgraph()->Constant(*function_prototype); ReplaceWithValue(node, value); return Replace(value); } @@ -407,15 +408,15 @@ Reduction JSNativeContextSpecialization::ReduceJSInstanceOf(Node* node) { return NoChange(); } - JSObjectRef receiver_ref(broker(), receiver); + JSObjectRef receiver_ref = MakeRef(broker(), receiver); MapRef receiver_map = receiver_ref.map(); PropertyAccessInfo access_info = PropertyAccessInfo::Invalid(graph()->zone()); if (broker()->is_concurrent_inlining()) { access_info = broker()->GetPropertyAccessInfo( receiver_map, - NameRef(broker(), isolate()->factory()->has_instance_symbol()), - AccessMode::kLoad); + MakeRef(broker(), isolate()->factory()->has_instance_symbol()), + AccessMode::kLoad, dependencies()); } else { AccessInfoFactory access_info_factory(broker(), dependencies(), graph()->zone()); @@ -457,7 +458,7 @@ Reduction JSNativeContextSpecialization::ReduceJSInstanceOf(Node* node) { Handle<JSObject> holder; bool found_on_proto = access_info.holder().ToHandle(&holder); JSObjectRef holder_ref = - found_on_proto ? JSObjectRef(broker(), holder) : receiver_ref; + found_on_proto ? MakeRef(broker(), holder) : receiver_ref; base::Optional<ObjectRef> constant = holder_ref.GetOwnFastDataProperty( access_info.field_representation(), access_info.field_index()); if (!constant.has_value() || !constant->IsHeapObject() || @@ -467,7 +468,7 @@ Reduction JSNativeContextSpecialization::ReduceJSInstanceOf(Node* node) { if (found_on_proto) { dependencies()->DependOnStablePrototypeChains( access_info.lookup_start_object_maps(), kStartAtPrototype, - JSObjectRef(broker(), holder)); + MakeRef(broker(), holder)); } // Check that {constructor} is actually {receiver}. @@ -535,7 +536,7 @@ JSNativeContextSpecialization::InferHasInPrototypeChain( bool all = true; bool none = true; for (size_t i = 0; i < receiver_maps.size(); ++i) { - MapRef map(broker(), receiver_maps[i]); + MapRef map = MakeRef(broker(), receiver_maps[i]); if (result == NodeProperties::kUnreliableMaps && !map.is_stable()) { return kMayBeInPrototypeChain; } @@ -547,15 +548,13 @@ JSNativeContextSpecialization::InferHasInPrototypeChain( all = false; break; } - if (map.ShouldHaveBeenSerialized() && !map.serialized_prototype()) { - TRACE_BROKER_MISSING(broker(), "prototype data for map " << map); - return kMayBeInPrototypeChain; - } - if (map.prototype().equals(prototype)) { + base::Optional<HeapObjectRef> map_prototype = map.prototype(); + if (!map_prototype.has_value()) return kMayBeInPrototypeChain; + if (map_prototype->equals(prototype)) { none = false; break; } - map = map.prototype().map(); + map = map_prototype->map(); // TODO(v8:11457) Support dictionary mode protoypes here. if (!map.is_stable() || map.is_dictionary_map()) return kMayBeInPrototypeChain; @@ -628,10 +627,7 @@ Reduction JSNativeContextSpecialization::ReduceJSOrdinaryHasInstance( // OrdinaryHasInstance on bound functions turns into a recursive invocation // of the instanceof operator again. JSBoundFunctionRef function = m.Ref(broker()).AsJSBoundFunction(); - if (function.ShouldHaveBeenSerialized() && !function.serialized()) { - TRACE_BROKER_MISSING(broker(), "data for JSBoundFunction " << function); - return NoChange(); - } + if (!function.serialized()) return NoChange(); JSReceiverRef bound_target_function = function.bound_target_function(); @@ -651,10 +647,7 @@ Reduction JSNativeContextSpecialization::ReduceJSOrdinaryHasInstance( // Optimize if we currently know the "prototype" property. JSFunctionRef function = m.Ref(broker()).AsJSFunction(); - if (function.ShouldHaveBeenSerialized() && !function.serialized()) { - TRACE_BROKER_MISSING(broker(), "data for JSFunction " << function); - return NoChange(); - } + if (!function.serialized()) return NoChange(); // TODO(neis): Remove the has_prototype_slot condition once the broker is // always enabled. @@ -736,10 +729,10 @@ Reduction JSNativeContextSpecialization::ReduceJSResolvePromise(Node* node) { } else { // Obtain pre-computed access infos from the broker. for (auto map : resolution_maps) { - MapRef map_ref(broker(), map); + MapRef map_ref = MakeRef(broker(), map); access_infos.push_back(broker()->GetPropertyAccessInfo( - map_ref, NameRef(broker(), isolate()->factory()->then_string()), - AccessMode::kLoad)); + map_ref, MakeRef(broker(), isolate()->factory()->then_string()), + AccessMode::kLoad, dependencies())); } } PropertyAccessInfo access_info = @@ -865,7 +858,7 @@ Reduction JSNativeContextSpecialization::ReduceGlobalAccess( simplified()->CheckMaps( CheckMapsFlag::kNone, ZoneHandleSet<Map>( - HeapObjectRef(broker(), global_proxy()).map().object())), + MakeRef(broker(), global_proxy()).map().object())), lookup_start_object, effect, control); } @@ -1035,7 +1028,7 @@ Reduction JSNativeContextSpecialization::ReduceJSLoadGlobal(Node* node) { return Replace(value); } else if (feedback.IsPropertyCell()) { return ReduceGlobalAccess(node, nullptr, nullptr, nullptr, - NameRef(broker(), p.name()), AccessMode::kLoad, + MakeRef(broker(), p.name()), AccessMode::kLoad, nullptr, feedback.property_cell()); } else { DCHECK(feedback.IsMegamorphic()); @@ -1066,7 +1059,7 @@ Reduction JSNativeContextSpecialization::ReduceJSStoreGlobal(Node* node) { return Replace(value); } else if (feedback.IsPropertyCell()) { return ReduceGlobalAccess(node, nullptr, nullptr, value, - NameRef(broker(), p.name()), AccessMode::kStore, + MakeRef(broker(), p.name()), AccessMode::kStore, nullptr, feedback.property_cell()); } else { DCHECK(feedback.IsMegamorphic()); @@ -1188,7 +1181,8 @@ Reduction JSNativeContextSpecialization::ReduceNamedAccess( // contexts' global proxy, and turn that into a direct access to the // corresponding global object instead. if (lookup_start_object_maps.size() == 1) { - MapRef lookup_start_object_map(broker(), lookup_start_object_maps[0]); + MapRef lookup_start_object_map = + MakeRef(broker(), lookup_start_object_maps[0]); if (lookup_start_object_map.equals( broker()->target_native_context().global_proxy_object().map()) && !broker()->target_native_context().global_object().IsDetached()) { @@ -1201,7 +1195,7 @@ Reduction JSNativeContextSpecialization::ReduceNamedAccess( { ZoneVector<PropertyAccessInfo> access_infos_for_feedback(zone()); for (Handle<Map> map_handle : lookup_start_object_maps) { - MapRef map(broker(), map_handle); + MapRef map = MakeRef(broker(), map_handle); if (map.is_deprecated()) continue; PropertyAccessInfo access_info = broker()->GetPropertyAccessInfo( map, feedback.name(), access_mode, dependencies(), @@ -1468,7 +1462,7 @@ Reduction JSNativeContextSpecialization::ReduceJSLoadNamed(Node* node) { JSLoadNamedNode n(node); NamedAccess const& p = n.Parameters(); Node* const receiver = n.object(); - NameRef name(broker(), p.name()); + NameRef name = MakeRef(broker(), p.name()); // Check if we have a constant receiver. HeapObjectMatcher m(receiver); @@ -1478,10 +1472,7 @@ Reduction JSNativeContextSpecialization::ReduceJSLoadNamed(Node* node) { name.equals(ObjectRef(broker(), factory()->prototype_string()))) { // Optimize "prototype" property of functions. JSFunctionRef function = object.AsJSFunction(); - if (function.ShouldHaveBeenSerialized() && !function.serialized()) { - TRACE_BROKER_MISSING(broker(), "data for function " << function); - return NoChange(); - } + if (!function.serialized()) return NoChange(); // TODO(neis): Remove the has_prototype_slot condition once the broker is // always enabled. if (!function.map().has_prototype_slot() || !function.has_prototype() || @@ -1511,7 +1502,7 @@ Reduction JSNativeContextSpecialization::ReduceJSLoadNamedFromSuper( Node* node) { JSLoadNamedFromSuperNode n(node); NamedAccess const& p = n.Parameters(); - NameRef name(broker(), p.name()); + NameRef name = MakeRef(broker(), p.name()); if (!p.feedback().IsValid()) return NoChange(); return ReducePropertyAccess(node, nullptr, name, jsgraph()->Dead(), @@ -1594,7 +1585,7 @@ Reduction JSNativeContextSpecialization::ReduceJSGetIterator(Node* node) { const Operator* call_op = javascript()->Call( JSCallNode::ArityForArgc(0), CallFrequency(), p.callFeedback(), ConvertReceiverMode::kNotNullOrUndefined, mode, - CallFeedbackRelation::kRelated); + CallFeedbackRelation::kTarget); Node* call_property = graph()->NewNode(call_op, load_property, receiver, n.feedback_vector(), context, frame_state, effect, control); @@ -1606,7 +1597,7 @@ Reduction JSNativeContextSpecialization::ReduceJSStoreNamed(Node* node) { JSStoreNamedNode n(node); NamedAccess const& p = n.Parameters(); if (!p.feedback().IsValid()) return NoChange(); - return ReducePropertyAccess(node, nullptr, NameRef(broker(), p.name()), + return ReducePropertyAccess(node, nullptr, MakeRef(broker(), p.name()), n.value(), FeedbackSource(p.feedback()), AccessMode::kStore); } @@ -1615,7 +1606,7 @@ Reduction JSNativeContextSpecialization::ReduceJSStoreNamedOwn(Node* node) { JSStoreNamedOwnNode n(node); StoreNamedOwnParameters const& p = n.Parameters(); if (!p.feedback().IsValid()) return NoChange(); - return ReducePropertyAccess(node, nullptr, NameRef(broker(), p.name()), + return ReducePropertyAccess(node, nullptr, MakeRef(broker(), p.name()), n.value(), FeedbackSource(p.feedback()), AccessMode::kStoreInLiteral); } @@ -1669,7 +1660,7 @@ void JSNativeContextSpecialization::RemoveImpossibleMaps( maps->erase( std::remove_if(maps->begin(), maps->end(), [root_map, this](Handle<Map> map) { - MapRef map_ref(broker(), map); + MapRef map_ref = MakeRef(broker(), map); return map_ref.is_abandoned_prototype_map() || (map_ref.FindRootMap().has_value() && !map_ref.FindRootMap()->equals(*root_map)); @@ -1758,7 +1749,7 @@ Reduction JSNativeContextSpecialization::ReduceElementAccess( ZoneVector<MapRef> prototype_maps(zone()); for (ElementAccessInfo const& access_info : access_infos) { for (Handle<Map> map : access_info.lookup_start_object_maps()) { - MapRef receiver_map(broker(), map); + MapRef receiver_map = MakeRef(broker(), map); // If the {receiver_map} has a prototype and its elements backing // store is either holey, or we have a potentially growing store, // then we need to check that all prototypes have stable maps with @@ -1790,12 +1781,8 @@ Reduction JSNativeContextSpecialization::ReduceElementAccess( if (!IsTypedArrayElementsKind(access_info.elements_kind())) continue; base::Optional<JSTypedArrayRef> typed_array = GetTypedArrayConstant(broker(), receiver); - if (typed_array.has_value()) { - if (typed_array->ShouldHaveBeenSerialized() && - !typed_array->serialized()) { - TRACE_BROKER_MISSING(broker(), "data for typed array " << *typed_array); - return NoChange(); - } + if (typed_array.has_value() && !typed_array->serialized()) { + return NoChange(); } } @@ -1805,11 +1792,11 @@ Reduction JSNativeContextSpecialization::ReduceElementAccess( ElementAccessInfo access_info = access_infos.front(); // Perform possible elements kind transitions. - MapRef transition_target(broker(), - access_info.lookup_start_object_maps().front()); + MapRef transition_target = + MakeRef(broker(), access_info.lookup_start_object_maps().front()); for (auto source : access_info.transition_sources()) { DCHECK_EQ(access_info.lookup_start_object_maps().size(), 1); - MapRef transition_source(broker(), source); + MapRef transition_source = MakeRef(broker(), source); effect = graph()->NewNode( simplified()->TransitionElementsKind(ElementsTransition( IsSimpleMapChangeTransition(transition_source.elements_kind(), @@ -1857,10 +1844,10 @@ Reduction JSNativeContextSpecialization::ReduceElementAccess( Node* this_control = fallthrough_control; // Perform possible elements kind transitions. - MapRef transition_target(broker(), - access_info.lookup_start_object_maps().front()); + MapRef transition_target = + MakeRef(broker(), access_info.lookup_start_object_maps().front()); for (auto source : access_info.transition_sources()) { - MapRef transition_source(broker(), source); + MapRef transition_source = MakeRef(broker(), source); DCHECK_EQ(access_info.lookup_start_object_maps().size(), 1); this_effect = graph()->NewNode( simplified()->TransitionElementsKind(ElementsTransition( @@ -2229,7 +2216,7 @@ Node* JSNativeContextSpecialization::InlinePropertyGetterCall( // For fast mode holders we recorded dependencies in BuildPropertyLoad. for (const Handle<Map> map : access_info.lookup_start_object_maps()) { dependencies()->DependOnConstantInDictionaryPrototypeChain( - MapRef{broker(), map}, NameRef{broker(), access_info.name()}, + MakeRef(broker(), map), MakeRef(broker(), access_info.name()), constant, PropertyKind::kAccessor); } } @@ -2362,7 +2349,7 @@ JSNativeContextSpecialization::BuildPropertyLoad( !access_info.HasDictionaryHolder()) { dependencies()->DependOnStablePrototypeChains( access_info.lookup_start_object_maps(), kStartAtPrototype, - JSObjectRef(broker(), holder)); + MakeRef(broker(), holder)); } // Generate the actual property access. @@ -2413,7 +2400,7 @@ JSNativeContextSpecialization::BuildPropertyTest( if (access_info.holder().ToHandle(&holder)) { dependencies()->DependOnStablePrototypeChains( access_info.lookup_start_object_maps(), kStartAtPrototype, - JSObjectRef(broker(), holder)); + MakeRef(broker(), holder)); } Node* value = access_info.IsNotFound() ? jsgraph()->FalseConstant() @@ -2457,7 +2444,7 @@ JSNativeContextSpecialization::BuildPropertyStore( DCHECK_NE(AccessMode::kStoreInLiteral, access_mode); dependencies()->DependOnStablePrototypeChains( access_info.lookup_start_object_maps(), kStartAtPrototype, - JSObjectRef(broker(), holder)); + MakeRef(broker(), holder)); } DCHECK(!access_info.IsNotFound()); @@ -2508,7 +2495,7 @@ JSNativeContextSpecialization::BuildPropertyStore( a.Allocate(HeapNumber::kSize, AllocationType::kYoung, Type::OtherInternal()); a.Store(AccessBuilder::ForMap(), - MapRef(broker(), factory()->heap_number_map())); + MakeRef(broker(), factory()->heap_number_map())); FieldAccess value_field_access = AccessBuilder::ForHeapNumberValue(); value_field_access.const_field_info = field_access.const_field_info; a.Store(value_field_access, value); @@ -2606,6 +2593,7 @@ JSNativeContextSpecialization::BuildPropertyStore( case MachineRepresentation::kWord64: case MachineRepresentation::kFloat32: case MachineRepresentation::kSimd128: + case MachineRepresentation::kMapWord: UNREACHABLE(); break; } @@ -2614,7 +2602,7 @@ JSNativeContextSpecialization::BuildPropertyStore( if (access_info.transition_map().ToHandle(&transition_map)) { // Check if we need to grow the properties backing store // with this transitioning store. - MapRef transition_map_ref(broker(), transition_map); + MapRef transition_map_ref = MakeRef(broker(), transition_map); MapRef original_map = transition_map_ref.GetBackPointer().AsMap(); if (original_map.UnusedPropertyFields() == 0) { DCHECK(!field_index.is_inobject()); @@ -3464,8 +3452,8 @@ bool JSNativeContextSpecialization::CanTreatHoleAsUndefined( // or Object.prototype objects as their prototype (in any of the current // native contexts, as the global Array protector works isolate-wide). for (Handle<Map> map : receiver_maps) { - MapRef receiver_map(broker(), map); - ObjectRef receiver_prototype = receiver_map.prototype(); + MapRef receiver_map = MakeRef(broker(), map); + ObjectRef receiver_prototype = receiver_map.prototype().value(); if (!receiver_prototype.IsJSObject() || !broker()->IsArrayOrObjectPrototype(receiver_prototype.AsJSObject())) { return false; @@ -3490,7 +3478,7 @@ bool JSNativeContextSpecialization::InferMaps( // For untrusted maps, we can still use the information // if the maps are stable. for (size_t i = 0; i < map_set.size(); ++i) { - MapRef map(broker(), map_set[i]); + MapRef map = MakeRef(broker(), map_set[i]); if (!map.is_stable()) return false; } for (size_t i = 0; i < map_set.size(); ++i) { diff --git a/deps/v8/src/compiler/js-operator.cc b/deps/v8/src/compiler/js-operator.cc index 4f491429f4..18380f4abd 100644 --- a/deps/v8/src/compiler/js-operator.cc +++ b/deps/v8/src/compiler/js-operator.cc @@ -8,6 +8,7 @@ #include "src/base/lazy-instance.h" #include "src/compiler/js-graph.h" +#include "src/compiler/js-heap-broker.h" #include "src/compiler/node-matchers.h" #include "src/compiler/operator.h" #include "src/handles/handles-inl.h" @@ -22,7 +23,7 @@ namespace { // Returns properties for the given binary op. constexpr Operator::Properties BinopProperties(Operator::Opcode opcode) { - CONSTEXPR_DCHECK(JSOperator::IsBinaryWithFeedback(opcode)); + DCHECK(JSOperator::IsBinaryWithFeedback(opcode)); return opcode == IrOpcode::kJSStrictEqual ? Operator::kPure : Operator::kNoProperties; } @@ -41,7 +42,7 @@ FeedbackCellRef JSCreateClosureNode::GetFeedbackCellRefChecked( JSHeapBroker* broker) const { HeapObjectMatcher m(feedback_cell()); CHECK(m.HasResolvedValue()); - return FeedbackCellRef(broker, m.ResolvedValue()); + return MakeRef(broker, Handle<FeedbackCell>::cast(m.ResolvedValue())); } std::ostream& operator<<(std::ostream& os, CallFrequency const& f) { @@ -338,12 +339,13 @@ bool operator!=(LoadGlobalParameters const& lhs, size_t hash_value(LoadGlobalParameters const& p) { - return base::hash_combine(p.name().location(), p.typeof_mode()); + return base::hash_combine(p.name().location(), + static_cast<int>(p.typeof_mode())); } std::ostream& operator<<(std::ostream& os, LoadGlobalParameters const& p) { - return os << Brief(*p.name()) << ", " << p.typeof_mode(); + return os << Brief(*p.name()) << ", " << static_cast<int>(p.typeof_mode()); } diff --git a/deps/v8/src/compiler/js-operator.h b/deps/v8/src/compiler/js-operator.h index 4e447149bc..8080d4caef 100644 --- a/deps/v8/src/compiler/js-operator.h +++ b/deps/v8/src/compiler/js-operator.h @@ -290,9 +290,9 @@ class CallParameters final { } using ArityField = base::BitField<size_t, 0, 27>; - using CallFeedbackRelationField = base::BitField<CallFeedbackRelation, 27, 1>; - using SpeculationModeField = base::BitField<SpeculationMode, 28, 1>; - using ConvertReceiverModeField = base::BitField<ConvertReceiverMode, 29, 2>; + using CallFeedbackRelationField = base::BitField<CallFeedbackRelation, 27, 2>; + using SpeculationModeField = base::BitField<SpeculationMode, 29, 1>; + using ConvertReceiverModeField = base::BitField<ConvertReceiverMode, 30, 2>; uint32_t const bit_field_; CallFrequency const frequency_; @@ -308,7 +308,7 @@ const CallParameters& CallParametersOf(const Operator* op); // Defines the arity and the ID for a runtime function call. This is used as a // parameter by JSCallRuntime operators. -class CallRuntimeParameters final { +class V8_EXPORT_PRIVATE CallRuntimeParameters final { public: CallRuntimeParameters(Runtime::FunctionId id, size_t arity) : id_(id), arity_(arity) {} @@ -328,8 +328,8 @@ size_t hash_value(CallRuntimeParameters const&); std::ostream& operator<<(std::ostream&, CallRuntimeParameters const&); -const CallRuntimeParameters& CallRuntimeParametersOf(const Operator* op); - +V8_EXPORT_PRIVATE const CallRuntimeParameters& CallRuntimeParametersOf( + const Operator* op); // Defines the location of a context slot relative to a specific scope. This is // used as a parameter by JSLoadContext and JSStoreContext operators and allows @@ -951,12 +951,12 @@ class V8_EXPORT_PRIVATE JSOperatorBuilder final CallFrequency const& frequency, const FeedbackSource& feedback = FeedbackSource{}, SpeculationMode speculation_mode = SpeculationMode::kDisallowSpeculation, - CallFeedbackRelation feedback_relation = CallFeedbackRelation::kRelated); + CallFeedbackRelation feedback_relation = CallFeedbackRelation::kTarget); const Operator* CallWithSpread( uint32_t arity, CallFrequency const& frequency = CallFrequency(), FeedbackSource const& feedback = FeedbackSource(), SpeculationMode speculation_mode = SpeculationMode::kDisallowSpeculation, - CallFeedbackRelation feedback_relation = CallFeedbackRelation::kRelated); + CallFeedbackRelation feedback_relation = CallFeedbackRelation::kTarget); const Operator* CallRuntime(Runtime::FunctionId id); const Operator* CallRuntime(Runtime::FunctionId id, size_t arity); const Operator* CallRuntime(const Runtime::Function* function, size_t arity); @@ -1002,7 +1002,7 @@ class V8_EXPORT_PRIVATE JSOperatorBuilder final const Operator* LoadGlobal(const Handle<Name>& name, const FeedbackSource& feedback, - TypeofMode typeof_mode = NOT_INSIDE_TYPEOF); + TypeofMode typeof_mode = TypeofMode::kNotInside); const Operator* StoreGlobal(LanguageMode language_mode, const Handle<Name>& name, const FeedbackSource& feedback); @@ -1112,7 +1112,7 @@ class JSNodeWrapperBase : public NodeWrapper { class JSUnaryOpNode final : public JSNodeWrapperBase { public: explicit constexpr JSUnaryOpNode(Node* node) : JSNodeWrapperBase(node) { - CONSTEXPR_DCHECK(JSOperator::IsUnaryWithFeedback(node->opcode())); + DCHECK(JSOperator::IsUnaryWithFeedback(node->opcode())); } #define INPUTS(V) \ @@ -1129,7 +1129,7 @@ JS_UNOP_WITH_FEEDBACK(V) class JSBinaryOpNode final : public JSNodeWrapperBase { public: explicit constexpr JSBinaryOpNode(Node* node) : JSNodeWrapperBase(node) { - CONSTEXPR_DCHECK(JSOperator::IsBinaryWithFeedback(node->opcode())); + DCHECK(JSOperator::IsBinaryWithFeedback(node->opcode())); } const FeedbackParameter& Parameters() const { @@ -1151,7 +1151,7 @@ JS_BINOP_WITH_FEEDBACK(V) class JSGetIteratorNode final : public JSNodeWrapperBase { public: explicit constexpr JSGetIteratorNode(Node* node) : JSNodeWrapperBase(node) { - CONSTEXPR_DCHECK(node->opcode() == IrOpcode::kJSGetIterator); + DCHECK_EQ(IrOpcode::kJSGetIterator, node->opcode()); } const GetIteratorParameters& Parameters() const { @@ -1168,7 +1168,7 @@ class JSGetIteratorNode final : public JSNodeWrapperBase { class JSCloneObjectNode final : public JSNodeWrapperBase { public: explicit constexpr JSCloneObjectNode(Node* node) : JSNodeWrapperBase(node) { - CONSTEXPR_DCHECK(node->opcode() == IrOpcode::kJSCloneObject); + DCHECK_EQ(IrOpcode::kJSCloneObject, node->opcode()); } const CloneObjectParameters& Parameters() const { @@ -1186,7 +1186,7 @@ class JSGetTemplateObjectNode final : public JSNodeWrapperBase { public: explicit constexpr JSGetTemplateObjectNode(Node* node) : JSNodeWrapperBase(node) { - CONSTEXPR_DCHECK(node->opcode() == IrOpcode::kJSGetTemplateObject); + DCHECK_EQ(IrOpcode::kJSGetTemplateObject, node->opcode()); } const GetTemplateObjectParameters& Parameters() const { @@ -1202,9 +1202,9 @@ class JSCreateLiteralOpNode final : public JSNodeWrapperBase { public: explicit constexpr JSCreateLiteralOpNode(Node* node) : JSNodeWrapperBase(node) { - CONSTEXPR_DCHECK(node->opcode() == IrOpcode::kJSCreateLiteralArray || - node->opcode() == IrOpcode::kJSCreateLiteralObject || - node->opcode() == IrOpcode::kJSCreateLiteralRegExp); + DCHECK(node->opcode() == IrOpcode::kJSCreateLiteralArray || + node->opcode() == IrOpcode::kJSCreateLiteralObject || + node->opcode() == IrOpcode::kJSCreateLiteralRegExp); } const CreateLiteralParameters& Parameters() const { @@ -1223,7 +1223,7 @@ using JSCreateLiteralRegExpNode = JSCreateLiteralOpNode; class JSHasPropertyNode final : public JSNodeWrapperBase { public: explicit constexpr JSHasPropertyNode(Node* node) : JSNodeWrapperBase(node) { - CONSTEXPR_DCHECK(node->opcode() == IrOpcode::kJSHasProperty); + DCHECK_EQ(IrOpcode::kJSHasProperty, node->opcode()); } const PropertyAccess& Parameters() const { @@ -1241,7 +1241,7 @@ class JSHasPropertyNode final : public JSNodeWrapperBase { class JSLoadPropertyNode final : public JSNodeWrapperBase { public: explicit constexpr JSLoadPropertyNode(Node* node) : JSNodeWrapperBase(node) { - CONSTEXPR_DCHECK(node->opcode() == IrOpcode::kJSLoadProperty); + DCHECK_EQ(IrOpcode::kJSLoadProperty, node->opcode()); } const PropertyAccess& Parameters() const { @@ -1259,7 +1259,7 @@ class JSLoadPropertyNode final : public JSNodeWrapperBase { class JSStorePropertyNode final : public JSNodeWrapperBase { public: explicit constexpr JSStorePropertyNode(Node* node) : JSNodeWrapperBase(node) { - CONSTEXPR_DCHECK(node->opcode() == IrOpcode::kJSStoreProperty); + DCHECK_EQ(IrOpcode::kJSStoreProperty, node->opcode()); } const PropertyAccess& Parameters() const { @@ -1284,14 +1284,14 @@ class JSCallOrConstructNode : public JSNodeWrapperBase { public: explicit constexpr JSCallOrConstructNode(Node* node) : JSNodeWrapperBase(node) { - CONSTEXPR_DCHECK(node->opcode() == IrOpcode::kJSCall || - node->opcode() == IrOpcode::kJSCallWithArrayLike || - node->opcode() == IrOpcode::kJSCallWithSpread || - node->opcode() == IrOpcode::kJSConstruct || - node->opcode() == IrOpcode::kJSConstructWithArrayLike || - node->opcode() == IrOpcode::kJSConstructWithSpread + DCHECK(node->opcode() == IrOpcode::kJSCall || + node->opcode() == IrOpcode::kJSCallWithArrayLike || + node->opcode() == IrOpcode::kJSCallWithSpread || + node->opcode() == IrOpcode::kJSConstruct || + node->opcode() == IrOpcode::kJSConstructWithArrayLike || + node->opcode() == IrOpcode::kJSConstructWithSpread #if V8_ENABLE_WEBASSEMBLY - || node->opcode() == IrOpcode::kJSWasmCall + || node->opcode() == IrOpcode::kJSWasmCall #endif // V8_ENABLE_WEBASSEMBLY ); // NOLINT(whitespace/parens) } @@ -1373,7 +1373,7 @@ template <int kOpcode> class JSCallNodeBase final : public JSCallOrConstructNode { public: explicit constexpr JSCallNodeBase(Node* node) : JSCallOrConstructNode(node) { - CONSTEXPR_DCHECK(node->opcode() == kOpcode); + DCHECK_EQ(kOpcode, node->opcode()); } const CallParameters& Parameters() const { @@ -1405,7 +1405,7 @@ using JSCallWithArrayLikeNode = JSCallNodeBase<IrOpcode::kJSCallWithArrayLike>; class JSWasmCallNode final : public JSCallOrConstructNode { public: explicit constexpr JSWasmCallNode(Node* node) : JSCallOrConstructNode(node) { - CONSTEXPR_DCHECK(node->opcode() == IrOpcode::kJSWasmCall); + DCHECK_EQ(IrOpcode::kJSWasmCall, node->opcode()); } const JSWasmCallParameters& Parameters() const { @@ -1437,7 +1437,7 @@ class JSConstructNodeBase final : public JSCallOrConstructNode { public: explicit constexpr JSConstructNodeBase(Node* node) : JSCallOrConstructNode(node) { - CONSTEXPR_DCHECK(node->opcode() == kOpcode); + DCHECK_EQ(kOpcode, node->opcode()); } const ConstructParameters& Parameters() const { @@ -1470,7 +1470,7 @@ using JSConstructWithArrayLikeNode = class JSLoadNamedNode final : public JSNodeWrapperBase { public: explicit constexpr JSLoadNamedNode(Node* node) : JSNodeWrapperBase(node) { - CONSTEXPR_DCHECK(node->opcode() == IrOpcode::kJSLoadNamed); + DCHECK_EQ(IrOpcode::kJSLoadNamed, node->opcode()); } const NamedAccess& Parameters() const { return NamedAccessOf(node()->op()); } @@ -1486,7 +1486,7 @@ class JSLoadNamedFromSuperNode final : public JSNodeWrapperBase { public: explicit constexpr JSLoadNamedFromSuperNode(Node* node) : JSNodeWrapperBase(node) { - CONSTEXPR_DCHECK(node->opcode() == IrOpcode::kJSLoadNamedFromSuper); + DCHECK_EQ(IrOpcode::kJSLoadNamedFromSuper, node->opcode()); } const NamedAccess& Parameters() const { return NamedAccessOf(node()->op()); } @@ -1502,7 +1502,7 @@ class JSLoadNamedFromSuperNode final : public JSNodeWrapperBase { class JSStoreNamedNode final : public JSNodeWrapperBase { public: explicit constexpr JSStoreNamedNode(Node* node) : JSNodeWrapperBase(node) { - CONSTEXPR_DCHECK(node->opcode() == IrOpcode::kJSStoreNamed); + DCHECK_EQ(IrOpcode::kJSStoreNamed, node->opcode()); } const NamedAccess& Parameters() const { return NamedAccessOf(node()->op()); } @@ -1518,7 +1518,7 @@ class JSStoreNamedNode final : public JSNodeWrapperBase { class JSStoreNamedOwnNode final : public JSNodeWrapperBase { public: explicit constexpr JSStoreNamedOwnNode(Node* node) : JSNodeWrapperBase(node) { - CONSTEXPR_DCHECK(node->opcode() == IrOpcode::kJSStoreNamedOwn); + DCHECK_EQ(IrOpcode::kJSStoreNamedOwn, node->opcode()); } const StoreNamedOwnParameters& Parameters() const { @@ -1536,7 +1536,7 @@ class JSStoreNamedOwnNode final : public JSNodeWrapperBase { class JSStoreGlobalNode final : public JSNodeWrapperBase { public: explicit constexpr JSStoreGlobalNode(Node* node) : JSNodeWrapperBase(node) { - CONSTEXPR_DCHECK(node->opcode() == IrOpcode::kJSStoreGlobal); + DCHECK_EQ(IrOpcode::kJSStoreGlobal, node->opcode()); } const StoreGlobalParameters& Parameters() const { @@ -1553,7 +1553,7 @@ class JSStoreGlobalNode final : public JSNodeWrapperBase { class JSLoadGlobalNode final : public JSNodeWrapperBase { public: explicit constexpr JSLoadGlobalNode(Node* node) : JSNodeWrapperBase(node) { - CONSTEXPR_DCHECK(node->opcode() == IrOpcode::kJSLoadGlobal); + DCHECK_EQ(IrOpcode::kJSLoadGlobal, node->opcode()); } const LoadGlobalParameters& Parameters() const { @@ -1569,7 +1569,7 @@ class JSCreateEmptyLiteralArrayNode final : public JSNodeWrapperBase { public: explicit constexpr JSCreateEmptyLiteralArrayNode(Node* node) : JSNodeWrapperBase(node) { - CONSTEXPR_DCHECK(node->opcode() == IrOpcode::kJSCreateEmptyLiteralArray); + DCHECK_EQ(IrOpcode::kJSCreateEmptyLiteralArray, node->opcode()); } const FeedbackParameter& Parameters() const { @@ -1585,7 +1585,7 @@ class JSStoreDataPropertyInLiteralNode final : public JSNodeWrapperBase { public: explicit constexpr JSStoreDataPropertyInLiteralNode(Node* node) : JSNodeWrapperBase(node) { - CONSTEXPR_DCHECK(node->opcode() == IrOpcode::kJSStoreDataPropertyInLiteral); + DCHECK_EQ(IrOpcode::kJSStoreDataPropertyInLiteral, node->opcode()); } const FeedbackParameter& Parameters() const { @@ -1606,7 +1606,7 @@ class JSStoreInArrayLiteralNode final : public JSNodeWrapperBase { public: explicit constexpr JSStoreInArrayLiteralNode(Node* node) : JSNodeWrapperBase(node) { - CONSTEXPR_DCHECK(node->opcode() == IrOpcode::kJSStoreInArrayLiteral); + DCHECK_EQ(IrOpcode::kJSStoreInArrayLiteral, node->opcode()); } const FeedbackParameter& Parameters() const { @@ -1625,7 +1625,7 @@ class JSStoreInArrayLiteralNode final : public JSNodeWrapperBase { class JSCreateClosureNode final : public JSNodeWrapperBase { public: explicit constexpr JSCreateClosureNode(Node* node) : JSNodeWrapperBase(node) { - CONSTEXPR_DCHECK(node->opcode() == IrOpcode::kJSCreateClosure); + DCHECK_EQ(IrOpcode::kJSCreateClosure, node->opcode()); } const CreateClosureParameters& Parameters() const { @@ -1642,7 +1642,7 @@ class JSCreateClosureNode final : public JSNodeWrapperBase { class JSForInPrepareNode final : public JSNodeWrapperBase { public: explicit constexpr JSForInPrepareNode(Node* node) : JSNodeWrapperBase(node) { - CONSTEXPR_DCHECK(node->opcode() == IrOpcode::kJSForInPrepare); + DCHECK_EQ(IrOpcode::kJSForInPrepare, node->opcode()); } const ForInParameters& Parameters() const { @@ -1659,7 +1659,7 @@ class JSForInPrepareNode final : public JSNodeWrapperBase { class JSForInNextNode final : public JSNodeWrapperBase { public: explicit constexpr JSForInNextNode(Node* node) : JSNodeWrapperBase(node) { - CONSTEXPR_DCHECK(node->opcode() == IrOpcode::kJSForInNext); + DCHECK_EQ(IrOpcode::kJSForInNext, node->opcode()); } const ForInParameters& Parameters() const { diff --git a/deps/v8/src/compiler/js-typed-lowering.cc b/deps/v8/src/compiler/js-typed-lowering.cc index 008aacdb39..ebd839acab 100644 --- a/deps/v8/src/compiler/js-typed-lowering.cc +++ b/deps/v8/src/compiler/js-typed-lowering.cc @@ -7,6 +7,7 @@ #include "src/ast/modules.h" #include "src/builtins/builtins-utils.h" #include "src/codegen/code-factory.h" +#include "src/codegen/interface-descriptors-inl.h" #include "src/compiler/access-builder.h" #include "src/compiler/allocation-builder.h" #include "src/compiler/graph-assembler.h" @@ -592,8 +593,8 @@ Reduction JSTypedLowering::ReduceJSAdd(Node* node) { Node* length = graph()->NewNode(simplified()->NumberAdd(), left_length, right_length); - PropertyCellRef string_length_protector( - broker(), factory()->string_length_protector()); + PropertyCellRef string_length_protector = + MakeRef(broker(), factory()->string_length_protector()); string_length_protector.SerializeAsProtector(); if (string_length_protector.value().AsSmi() == @@ -1171,8 +1172,8 @@ Reduction JSTypedLowering::ReduceJSLoadNamed(Node* node) { JSLoadNamedNode n(node); Node* receiver = n.object(); Type receiver_type = NodeProperties::GetType(receiver); - NameRef name(broker(), NamedAccessOf(node->op()).name()); - NameRef length_str(broker(), factory()->length_string()); + NameRef name = MakeRef(broker(), NamedAccessOf(node->op()).name()); + NameRef length_str = MakeRef(broker(), factory()->length_string()); // Optimize "length" property of strings. if (name.equals(length_str) && receiver_type.Is(Type::String())) { Node* value = graph()->NewNode(simplified()->StringLength(), receiver); @@ -1541,8 +1542,8 @@ void ReduceBuiltin(JSGraph* jsgraph, Node* node, int builtin_index, int arity, DCHECK(Builtins::IsCpp(builtin_index)); const bool has_builtin_exit_frame = true; - Node* stub = jsgraph->CEntryStubConstant(1, kDontSaveFPRegs, kArgvOnStack, - has_builtin_exit_frame); + Node* stub = jsgraph->CEntryStubConstant( + 1, SaveFPRegsMode::kIgnore, ArgvMode::kStack, has_builtin_exit_frame); node->ReplaceInput(0, stub); const int argc = arity + BuiltinArguments::kNumExtraArgsWithReceiver; @@ -1628,10 +1629,10 @@ Reduction JSTypedLowering::ReduceJSConstruct(Node* node) { // Patch {node} to an indirect call via the {function}s construct stub. bool use_builtin_construct_stub = function.shared().construct_as_builtin(); - CodeRef code(broker(), - use_builtin_construct_stub - ? BUILTIN_CODE(isolate(), JSBuiltinsConstructStub) - : BUILTIN_CODE(isolate(), JSConstructStubGeneric)); + CodeRef code = MakeRef( + broker(), use_builtin_construct_stub + ? BUILTIN_CODE(isolate(), JSBuiltinsConstructStub) + : BUILTIN_CODE(isolate(), JSConstructStubGeneric)); STATIC_ASSERT(JSConstructNode::TargetIndex() == 0); STATIC_ASSERT(JSConstructNode::NewTargetIndex() == 1); node->RemoveInput(n.FeedbackVectorIndex()); @@ -1712,9 +1713,9 @@ Reduction JSTypedLowering::ReduceJSCall(Node* node) { } else if (target->opcode() == IrOpcode::kJSCreateClosure) { CreateClosureParameters const& ccp = JSCreateClosureNode{target}.Parameters(); - shared = SharedFunctionInfoRef(broker(), ccp.shared_info()); + shared = MakeRef(broker(), ccp.shared_info()); } else if (target->opcode() == IrOpcode::kCheckClosure) { - FeedbackCellRef cell(broker(), FeedbackCellOf(target->op())); + FeedbackCellRef cell = MakeRef(broker(), FeedbackCellOf(target->op())); base::Optional<FeedbackVectorRef> feedback_vector = cell.value(); if (feedback_vector.has_value()) { shared = feedback_vector->shared_function_info(); @@ -1723,6 +1724,9 @@ Reduction JSTypedLowering::ReduceJSCall(Node* node) { if (shared.has_value()) { // Do not inline the call if we need to check whether to break at entry. + // If this state changes during background compilation, the compilation + // job will be aborted from the main thread (see + // Debug::PrepareFunctionForDebugExecution()). if (shared->HasBreakInfo()) return NoChange(); // Class constructors are callable, but [[Call]] will raise an exception. diff --git a/deps/v8/src/compiler/load-elimination.cc b/deps/v8/src/compiler/load-elimination.cc index 2a0189ae12..377654e421 100644 --- a/deps/v8/src/compiler/load-elimination.cc +++ b/deps/v8/src/compiler/load-elimination.cc @@ -1076,6 +1076,7 @@ Reduction LoadElimination::ReduceLoadElement(Node* node) { case MachineRepresentation::kTaggedSigned: case MachineRepresentation::kTaggedPointer: case MachineRepresentation::kTagged: + case MachineRepresentation::kMapWord: if (Node* replacement = state->LookupElement( object, index, access.machine_type.representation())) { // Make sure we don't resurrect dead {replacement} nodes. @@ -1131,6 +1132,7 @@ Reduction LoadElimination::ReduceStoreElement(Node* node) { case MachineRepresentation::kTaggedSigned: case MachineRepresentation::kTaggedPointer: case MachineRepresentation::kTagged: + case MachineRepresentation::kMapWord: state = state->AddElement(object, index, new_value, access.machine_type.representation(), zone()); break; @@ -1424,6 +1426,7 @@ LoadElimination::IndexRange LoadElimination::FieldIndexOf( case MachineRepresentation::kTaggedSigned: case MachineRepresentation::kTaggedPointer: case MachineRepresentation::kTagged: + case MachineRepresentation::kMapWord: case MachineRepresentation::kCompressedPointer: case MachineRepresentation::kCompressed: break; diff --git a/deps/v8/src/compiler/loop-analysis.cc b/deps/v8/src/compiler/loop-analysis.cc index 0d52e78004..ee56a665db 100644 --- a/deps/v8/src/compiler/loop-analysis.cc +++ b/deps/v8/src/compiler/loop-analysis.cc @@ -547,7 +547,6 @@ LoopTree* LoopFinder::BuildLoopTree(Graph* graph, TickCounter* tick_counter, ZoneUnorderedSet<Node*>* LoopFinder::FindUnnestedLoopFromHeader( Node* loop_header, Zone* zone, size_t max_size) { auto* visited = zone->New<ZoneUnorderedSet<Node*>>(zone); - std::vector<Node*> queue; DCHECK(loop_header->opcode() == IrOpcode::kLoop); @@ -589,6 +588,30 @@ ZoneUnorderedSet<Node*>* LoopFinder::FindUnnestedLoopFromHeader( } } + // Check that there is no floating control other than direct nodes to start(). + // We do this by checking that all non-start control inputs of loop nodes are + // also in the loop. + // TODO(manoskouk): This is a safety check. Consider making it DEBUG-only when + // we are confident there is no incompatible floating control generated in + // wasm. + for (Node* node : *visited) { + // The loop header is allowed to point outside the loop. + if (node == loop_header) continue; + + for (Edge edge : node->input_edges()) { + Node* input = edge.to(); + if (NodeProperties::IsControlEdge(edge) && visited->count(input) == 0 && + input->opcode() != IrOpcode::kStart) { + FATAL( + "Floating control detected in wasm turbofan graph: Node #%d:%s is " + "inside loop headed by #%d, but its control dependency #%d:%s is " + "outside", + node->id(), node->op()->mnemonic(), loop_header->id(), input->id(), + input->op()->mnemonic()); + } + } + } + return visited; } diff --git a/deps/v8/src/compiler/machine-graph-verifier.cc b/deps/v8/src/compiler/machine-graph-verifier.cc index cabf23f4d5..3aee3a8d35 100644 --- a/deps/v8/src/compiler/machine-graph-verifier.cc +++ b/deps/v8/src/compiler/machine-graph-verifier.cc @@ -999,6 +999,7 @@ class MachineRepresentationChecker { return IsAnyTagged(actual); case MachineRepresentation::kCompressed: return IsAnyCompressed(actual); + case MachineRepresentation::kMapWord: case MachineRepresentation::kTaggedSigned: case MachineRepresentation::kTaggedPointer: // TODO(turbofan): At the moment, the machine graph doesn't contain diff --git a/deps/v8/src/compiler/machine-operator.cc b/deps/v8/src/compiler/machine-operator.cc index 1a897a3203..3d61d70b02 100644 --- a/deps/v8/src/compiler/machine-operator.cc +++ b/deps/v8/src/compiler/machine-operator.cc @@ -252,6 +252,7 @@ std::ostream& operator<<(std::ostream& os, TruncateKind kind) { V(Word64Shl, Operator::kNoProperties, 2, 0, 1) \ V(Word64Shr, Operator::kNoProperties, 2, 0, 1) \ V(Word64Ror, Operator::kNoProperties, 2, 0, 1) \ + V(Word64RorLowerable, Operator::kNoProperties, 2, 1, 1) \ V(Word64Equal, Operator::kCommutative, 2, 0, 1) \ V(Int64Add, Operator::kAssociative | Operator::kCommutative, 2, 0, 1) \ V(Int64Sub, Operator::kNoProperties, 2, 0, 1) \ @@ -272,6 +273,7 @@ std::ostream& operator<<(std::ostream& os, TruncateKind kind) { PURE_BINARY_OP_LIST_64(V) \ V(Word32Clz, Operator::kNoProperties, 1, 0, 1) \ V(Word64Clz, Operator::kNoProperties, 1, 0, 1) \ + V(Word64ClzLowerable, Operator::kNoProperties, 1, 1, 1) \ V(Word32ReverseBytes, Operator::kNoProperties, 1, 0, 1) \ V(Word64ReverseBytes, Operator::kNoProperties, 1, 0, 1) \ V(Simd128ReverseBytes, Operator::kNoProperties, 1, 0, 1) \ @@ -566,8 +568,10 @@ std::ostream& operator<<(std::ostream& os, TruncateKind kind) { #define PURE_OPTIONAL_OP_LIST(V) \ V(Word32Ctz, Operator::kNoProperties, 1, 0, 1) \ V(Word64Ctz, Operator::kNoProperties, 1, 0, 1) \ + V(Word64CtzLowerable, Operator::kNoProperties, 1, 1, 1) \ V(Word32Rol, Operator::kNoProperties, 2, 0, 1) \ V(Word64Rol, Operator::kNoProperties, 2, 0, 1) \ + V(Word64RolLowerable, Operator::kNoProperties, 2, 1, 1) \ V(Word32ReverseBits, Operator::kNoProperties, 1, 0, 1) \ V(Word64ReverseBits, Operator::kNoProperties, 1, 0, 1) \ V(Int32AbsWithOverflow, Operator::kNoProperties, 1, 0, 2) \ @@ -583,6 +587,8 @@ std::ostream& operator<<(std::ostream& os, TruncateKind kind) { V(Float64RoundTiesAway, Operator::kNoProperties, 1, 0, 1) \ V(Float32RoundTiesEven, Operator::kNoProperties, 1, 0, 1) \ V(Float64RoundTiesEven, Operator::kNoProperties, 1, 0, 1) \ + V(Word32Select, Operator::kNoProperties, 3, 0, 1) \ + V(Word64Select, Operator::kNoProperties, 3, 0, 1) \ V(Float32Select, Operator::kNoProperties, 3, 0, 1) \ V(Float64Select, Operator::kNoProperties, 3, 0, 1) @@ -610,6 +616,7 @@ std::ostream& operator<<(std::ostream& os, TruncateKind kind) { V(Pointer) \ V(TaggedSigned) \ V(TaggedPointer) \ + V(MapInHeader) \ V(AnyTagged) \ V(CompressedPointer) \ V(AnyCompressed) @@ -622,6 +629,7 @@ std::ostream& operator<<(std::ostream& os, TruncateKind kind) { V(kWord16) \ V(kWord32) \ V(kWord64) \ + V(kMapWord) \ V(kTaggedSigned) \ V(kTaggedPointer) \ V(kTagged) \ @@ -1332,6 +1340,7 @@ OVERFLOW_OP_LIST(OVERFLOW_OP) #undef OVERFLOW_OP const Operator* MachineOperatorBuilder::Load(LoadRepresentation rep) { + DCHECK(!rep.IsMapWord()); #define LOAD(Type) \ if (rep == MachineType::Type()) { \ return &cache_.kLoad##Type; \ @@ -1491,6 +1500,7 @@ const Operator* MachineOperatorBuilder::StackSlot(MachineRepresentation rep, } const Operator* MachineOperatorBuilder::Store(StoreRepresentation store_rep) { + DCHECK_NE(store_rep.representation(), MachineRepresentation::kMapWord); switch (store_rep.representation()) { #define STORE(kRep) \ case MachineRepresentation::kRep: \ diff --git a/deps/v8/src/compiler/machine-operator.h b/deps/v8/src/compiler/machine-operator.h index 87a2eb891f..0ee3649ad0 100644 --- a/deps/v8/src/compiler/machine-operator.h +++ b/deps/v8/src/compiler/machine-operator.h @@ -104,7 +104,8 @@ V8_EXPORT_PRIVATE LoadLaneParameters const& LoadLaneParametersOf( Operator const*) V8_WARN_UNUSED_RESULT; // A Store needs a MachineType and a WriteBarrierKind in order to emit the -// correct write barrier. +// correct write barrier, and needs to state whether it is storing into the +// header word, so that the value can be packed, if necessary. class StoreRepresentation final { public: StoreRepresentation(MachineRepresentation representation, @@ -248,25 +249,30 @@ class V8_EXPORT_PRIVATE MachineOperatorBuilder final kWord32ShiftIsSafe = 1u << 11, kWord32Ctz = 1u << 12, kWord64Ctz = 1u << 13, - kWord32Popcnt = 1u << 14, - kWord64Popcnt = 1u << 15, - kWord32ReverseBits = 1u << 16, - kWord64ReverseBits = 1u << 17, - kFloat32Select = 1u << 18, - kFloat64Select = 1u << 19, - kInt32AbsWithOverflow = 1u << 20, - kInt64AbsWithOverflow = 1u << 21, - kWord32Rol = 1u << 22, - kWord64Rol = 1u << 23, - kSatConversionIsSafe = 1u << 24, + kWord64CtzLowerable = 1u << 14, + kWord32Popcnt = 1u << 15, + kWord64Popcnt = 1u << 16, + kWord32ReverseBits = 1u << 17, + kWord64ReverseBits = 1u << 18, + kFloat32Select = 1u << 19, + kFloat64Select = 1u << 20, + kInt32AbsWithOverflow = 1u << 21, + kInt64AbsWithOverflow = 1u << 22, + kWord32Rol = 1u << 23, + kWord64Rol = 1u << 24, + kWord64RolLowerable = 1u << 25, + kSatConversionIsSafe = 1u << 26, + kWord32Select = 1u << 27, + kWord64Select = 1u << 28, kAllOptionalOps = kFloat32RoundDown | kFloat64RoundDown | kFloat32RoundUp | kFloat64RoundUp | kFloat32RoundTruncate | kFloat64RoundTruncate | kFloat64RoundTiesAway | kFloat32RoundTiesEven | kFloat64RoundTiesEven | - kWord32Ctz | kWord64Ctz | kWord32Popcnt | kWord64Popcnt | - kWord32ReverseBits | kWord64ReverseBits | kInt32AbsWithOverflow | - kInt64AbsWithOverflow | kWord32Rol | kWord64Rol | kSatConversionIsSafe | - kFloat32Select | kFloat64Select + kWord32Ctz | kWord64Ctz | kWord64CtzLowerable | kWord32Popcnt | + kWord64Popcnt | kWord32ReverseBits | kWord64ReverseBits | + kInt32AbsWithOverflow | kInt64AbsWithOverflow | kWord32Rol | + kWord64Rol | kWord64RolLowerable | kSatConversionIsSafe | + kFloat32Select | kFloat64Select | kWord32Select | kWord64Select }; using Flags = base::Flags<Flag, unsigned>; @@ -386,10 +392,21 @@ class V8_EXPORT_PRIVATE MachineOperatorBuilder final const Operator* Word64SarShiftOutZeros() { return Word64Sar(ShiftKind::kShiftOutZeros); } + + // 64-bit rol, ror, clz and ctz operators have two versions: the non-suffixed + // ones are meant to be used in 64-bit systems and have no control input. The + // "Lowerable"-suffixed ones are meant to be temporary operators in 32-bit + // systems and will be lowered to 32-bit operators. They have a control input + // to enable the lowering. const OptionalOperator Word64Rol(); const Operator* Word64Ror(); const Operator* Word64Clz(); const OptionalOperator Word64Ctz(); + const OptionalOperator Word64RolLowerable(); + const Operator* Word64RorLowerable(); + const Operator* Word64ClzLowerable(); + const OptionalOperator Word64CtzLowerable(); + const Operator* Word64Equal(); const Operator* Int32PairAdd(); @@ -562,7 +579,11 @@ class V8_EXPORT_PRIVATE MachineOperatorBuilder final const OptionalOperator Float32RoundTiesEven(); const OptionalOperator Float64RoundTiesEven(); - // Floating point conditional selects. + // Conditional selects. Input 1 is the condition, Input 2 is the result value + // if the condition is {true}, Input 3 is the result value if the condition is + // false. + const OptionalOperator Word32Select(); + const OptionalOperator Word64Select(); const OptionalOperator Float32Select(); const OptionalOperator Float64Select(); diff --git a/deps/v8/src/compiler/map-inference.cc b/deps/v8/src/compiler/map-inference.cc index 1e1a59d784..b6c96163c6 100644 --- a/deps/v8/src/compiler/map-inference.cc +++ b/deps/v8/src/compiler/map-inference.cc @@ -68,7 +68,7 @@ bool MapInference::AllOfInstanceTypesUnsafe( CHECK(HaveMaps()); auto instance_type = [this, f](Handle<Map> map) { - MapRef map_ref(broker_, map); + MapRef map_ref = MakeRef(broker_, map); return f(map_ref.instance_type()); }; return std::all_of(maps_.begin(), maps_.end(), instance_type); @@ -79,7 +79,7 @@ bool MapInference::AnyOfInstanceTypesUnsafe( CHECK(HaveMaps()); auto instance_type = [this, f](Handle<Map> map) { - MapRef map_ref(broker_, map); + MapRef map_ref = MakeRef(broker_, map); return f(map_ref.instance_type()); }; @@ -134,13 +134,13 @@ bool MapInference::RelyOnMapsHelper(CompilationDependencies* dependencies, if (Safe()) return true; auto is_stable = [this](Handle<Map> map) { - MapRef map_ref(broker_, map); + MapRef map_ref = MakeRef(broker_, map); return map_ref.is_stable(); }; if (dependencies != nullptr && std::all_of(maps_.cbegin(), maps_.cend(), is_stable)) { for (Handle<Map> map : maps_) { - dependencies->DependOnStableMap(MapRef(broker_, map)); + dependencies->DependOnStableMap(MakeRef(broker_, map)); } SetGuarded(); return true; diff --git a/deps/v8/src/compiler/memory-lowering.cc b/deps/v8/src/compiler/memory-lowering.cc index b8a75ee950..ac113ddd70 100644 --- a/deps/v8/src/compiler/memory-lowering.cc +++ b/deps/v8/src/compiler/memory-lowering.cc @@ -4,8 +4,9 @@ #include "src/compiler/memory-lowering.h" -#include "src/codegen/interface-descriptors.h" +#include "src/codegen/interface-descriptors-inl.h" #include "src/common/external-pointer.h" +#include "src/compiler/access-builder.h" #include "src/compiler/js-graph.h" #include "src/compiler/linkage.h" #include "src/compiler/node-matchers.h" @@ -41,6 +42,15 @@ class MemoryLowering::AllocationGroup final : public ZoneObject { AllocationType const allocation_; Node* const size_; + static inline AllocationType CheckAllocationType(AllocationType allocation) { + // For non-generational heap, all young allocations are redirected to old + // space. + if (FLAG_single_generation && allocation == AllocationType::kYoung) { + return AllocationType::kOld; + } + return allocation; + } + DISALLOW_IMPLICIT_CONSTRUCTORS(AllocationGroup); }; @@ -98,6 +108,9 @@ Reduction MemoryLowering::ReduceAllocateRaw( DCHECK_EQ(IrOpcode::kAllocateRaw, node->opcode()); DCHECK_IMPLIES(allocation_folding_ == AllocationFolding::kDoAllocationFolding, state_ptr != nullptr); + if (FLAG_single_generation && allocation_type == AllocationType::kYoung) { + allocation_type = AllocationType::kOld; + } // Code objects may have a maximum size smaller than kMaxHeapObjectSize due to // guard pages. If we need to support allocating code here we would need to // call MemoryChunkLayout::MaxRegularCodeObjectSize() at runtime. @@ -292,12 +305,20 @@ Reduction MemoryLowering::ReduceAllocateRaw( Reduction MemoryLowering::ReduceLoadFromObject(Node* node) { DCHECK_EQ(IrOpcode::kLoadFromObject, node->opcode()); ObjectAccess const& access = ObjectAccessOf(node->op()); - MachineRepresentation rep = access.machine_type.representation(); - const Operator* load_op = ElementSizeInBytes(rep) > kTaggedSize && - !machine()->UnalignedLoadSupported( - access.machine_type.representation()) - ? machine()->UnalignedLoad(access.machine_type) - : machine()->Load(access.machine_type); + + MachineType machine_type = access.machine_type; + + if (machine_type.IsMapWord()) { + CHECK_EQ(machine_type.semantic(), MachineSemantic::kAny); + return ReduceLoadMap(node); + } + + MachineRepresentation rep = machine_type.representation(); + const Operator* load_op = + ElementSizeInBytes(rep) > kTaggedSize && + !machine()->UnalignedLoadSupported(machine_type.representation()) + ? machine()->UnalignedLoad(machine_type) + : machine()->Load(machine_type); NodeProperties::ChangeOp(node, load_op); return Changed(node); } @@ -308,6 +329,7 @@ Reduction MemoryLowering::ReduceLoadElement(Node* node) { Node* index = node->InputAt(1); node->ReplaceInput(1, ComputeIndex(access, index)); MachineType type = access.machine_type; + DCHECK(!type.IsMapWord()); if (NeedsPoisoning(access.load_sensitivity)) { NodeProperties::ChangeOp(node, machine()->PoisonedLoad(type)); } else { @@ -345,8 +367,8 @@ Node* MemoryLowering::DecodeExternalPointer( Node* decoded_ptr = __ Load(MachineType::Pointer(), table, __ ChangeUint32ToUint64(offset)); if (external_pointer_tag != 0) { - Node* tag = __ IntPtrConstant(external_pointer_tag); - decoded_ptr = __ WordXor(decoded_ptr, tag); + Node* tag = __ IntPtrConstant(~external_pointer_tag); + decoded_ptr = __ WordAnd(decoded_ptr, tag); } return decoded_ptr; #else @@ -354,6 +376,22 @@ Node* MemoryLowering::DecodeExternalPointer( #endif // V8_HEAP_SANDBOX } +Reduction MemoryLowering::ReduceLoadMap(Node* node) { +#ifdef V8_MAP_PACKING + NodeProperties::ChangeOp(node, machine()->Load(MachineType::AnyTagged())); + + Node* effect = NodeProperties::GetEffectInput(node); + Node* control = NodeProperties::GetControlInput(node); + __ InitializeEffectControl(effect, control); + + node = __ AddNode(graph()->CloneNode(node)); + return Replace(__ UnpackMapWord(node)); +#else + NodeProperties::ChangeOp(node, machine()->Load(MachineType::TaggedPointer())); + return Changed(node); +#endif +} + Reduction MemoryLowering::ReduceLoadField(Node* node) { DCHECK_EQ(IrOpcode::kLoadField, node->opcode()); FieldAccess const& access = FieldAccessOf(node->op()); @@ -365,11 +403,19 @@ Reduction MemoryLowering::ReduceLoadField(Node* node) { // External pointer table indices are 32bit numbers type = MachineType::Uint32(); } + + if (type.IsMapWord()) { + DCHECK(!NeedsPoisoning(access.load_sensitivity)); + DCHECK(!access.type.Is(Type::SandboxedExternalPointer())); + return ReduceLoadMap(node); + } + if (NeedsPoisoning(access.load_sensitivity)) { NodeProperties::ChangeOp(node, machine()->PoisonedLoad(type)); } else { NodeProperties::ChangeOp(node, machine()->Load(type)); } + if (V8_HEAP_SANDBOX_BOOL && access.type.Is(Type::SandboxedExternalPointer())) { #ifdef V8_HEAP_SANDBOX @@ -391,8 +437,10 @@ Reduction MemoryLowering::ReduceStoreToObject(Node* node, ObjectAccess const& access = ObjectAccessOf(node->op()); Node* object = node->InputAt(0); Node* value = node->InputAt(2); + WriteBarrierKind write_barrier_kind = ComputeWriteBarrierKind( node, object, value, state, access.write_barrier_kind); + DCHECK(!access.machine_type.IsMapWord()); MachineRepresentation rep = access.machine_type.representation(); StoreRepresentation store_rep(rep, write_barrier_kind); const Operator* store_op = ElementSizeInBytes(rep) > kTaggedSize && @@ -427,15 +475,29 @@ Reduction MemoryLowering::ReduceStoreField(Node* node, DCHECK_IMPLIES(V8_HEAP_SANDBOX_BOOL, !access.type.Is(Type::ExternalPointer()) && !access.type.Is(Type::SandboxedExternalPointer())); + MachineType machine_type = access.machine_type; Node* object = node->InputAt(0); Node* value = node->InputAt(1); + + Node* effect = NodeProperties::GetEffectInput(node); + Node* control = NodeProperties::GetControlInput(node); + __ InitializeEffectControl(effect, control); + WriteBarrierKind write_barrier_kind = ComputeWriteBarrierKind( node, object, value, state, access.write_barrier_kind); Node* offset = __ IntPtrConstant(access.offset - access.tag()); node->InsertInput(graph_zone(), 1, offset); + + if (machine_type.IsMapWord()) { + machine_type = MachineType::TaggedPointer(); +#ifdef V8_MAP_PACKING + Node* mapword = __ PackMapWord(TNode<Map>::UncheckedCast(value)); + node->ReplaceInput(2, mapword); +#endif + } NodeProperties::ChangeOp( - node, machine()->Store(StoreRepresentation( - access.machine_type.representation(), write_barrier_kind))); + node, machine()->Store(StoreRepresentation(machine_type.representation(), + write_barrier_kind))); return Changed(node); } @@ -513,6 +575,9 @@ WriteBarrierKind MemoryLowering::ComputeWriteBarrierKind( if (!ValueNeedsWriteBarrier(value, isolate())) { write_barrier_kind = kNoWriteBarrier; } + if (FLAG_disable_write_barriers) { + write_barrier_kind = kNoWriteBarrier; + } if (write_barrier_kind == WriteBarrierKind::kAssertNoWriteBarrier) { write_barrier_assert_failed_(node, object, function_debug_name_, zone()); } @@ -537,14 +602,18 @@ bool MemoryLowering::NeedsPoisoning(LoadSensitivity load_sensitivity) const { MemoryLowering::AllocationGroup::AllocationGroup(Node* node, AllocationType allocation, Zone* zone) - : node_ids_(zone), allocation_(allocation), size_(nullptr) { + : node_ids_(zone), + allocation_(CheckAllocationType(allocation)), + size_(nullptr) { node_ids_.insert(node->id()); } MemoryLowering::AllocationGroup::AllocationGroup(Node* node, AllocationType allocation, Node* size, Zone* zone) - : node_ids_(zone), allocation_(allocation), size_(size) { + : node_ids_(zone), + allocation_(CheckAllocationType(allocation)), + size_(size) { node_ids_.insert(node->id()); } diff --git a/deps/v8/src/compiler/memory-lowering.h b/deps/v8/src/compiler/memory-lowering.h index 7ad02b95af..1ebbf40bc8 100644 --- a/deps/v8/src/compiler/memory-lowering.h +++ b/deps/v8/src/compiler/memory-lowering.h @@ -110,6 +110,7 @@ class MemoryLowering final : public Reducer { AllocationState const* state, WriteBarrierKind); Node* DecodeExternalPointer(Node* encoded_pointer, ExternalPointerTag tag); + Reduction ReduceLoadMap(Node* encoded_pointer); Node* ComputeIndex(ElementAccess const& access, Node* node); bool NeedsPoisoning(LoadSensitivity load_sensitivity) const; diff --git a/deps/v8/src/compiler/memory-optimizer.cc b/deps/v8/src/compiler/memory-optimizer.cc index 1f36f25c29..7d6dcf880f 100644 --- a/deps/v8/src/compiler/memory-optimizer.cc +++ b/deps/v8/src/compiler/memory-optimizer.cc @@ -257,6 +257,15 @@ bool MemoryOptimizer::AllocationTypeNeedsUpdateToOld(Node* const node, return false; } +void MemoryOptimizer::ReplaceUsesAndKillNode(Node* node, Node* replacement) { + // Replace all uses of node and kill the node to make sure we don't leave + // dangling dead uses. + DCHECK_NE(replacement, node); + NodeProperties::ReplaceUses(node, replacement, graph_assembler_.effect(), + graph_assembler_.control()); + node->Kill(); +} + void MemoryOptimizer::VisitAllocateRaw(Node* node, AllocationState const* state) { DCHECK_EQ(IrOpcode::kAllocateRaw, node->opcode()); @@ -294,12 +303,7 @@ void MemoryOptimizer::VisitAllocateRaw(Node* node, node, allocation_type, allocation.allow_large_objects(), &state); CHECK(reduction.Changed() && reduction.replacement() != node); - // Replace all uses of node and kill the node to make sure we don't leave - // dangling dead uses. - NodeProperties::ReplaceUses(node, reduction.replacement(), - graph_assembler_.effect(), - graph_assembler_.control()); - node->Kill(); + ReplaceUsesAndKillNode(node, reduction.replacement()); EnqueueUses(state->effect(), state); } @@ -307,8 +311,11 @@ void MemoryOptimizer::VisitAllocateRaw(Node* node, void MemoryOptimizer::VisitLoadFromObject(Node* node, AllocationState const* state) { DCHECK_EQ(IrOpcode::kLoadFromObject, node->opcode()); - memory_lowering()->ReduceLoadFromObject(node); + Reduction reduction = memory_lowering()->ReduceLoadFromObject(node); EnqueueUses(node, state); + if (V8_MAP_PACKING_BOOL && reduction.replacement() != node) { + ReplaceUsesAndKillNode(node, reduction.replacement()); + } } void MemoryOptimizer::VisitStoreToObject(Node* node, @@ -333,16 +340,14 @@ void MemoryOptimizer::VisitLoadField(Node* node, AllocationState const* state) { // lowering, so we can proceed iterating the graph from the node uses. EnqueueUses(node, state); - // Node can be replaced only when V8_HEAP_SANDBOX_BOOL is enabled and - // when loading an external pointer value. - DCHECK_IMPLIES(!V8_HEAP_SANDBOX_BOOL, reduction.replacement() == node); - if (V8_HEAP_SANDBOX_BOOL && reduction.replacement() != node) { - // Replace all uses of node and kill the node to make sure we don't leave - // dangling dead uses. - NodeProperties::ReplaceUses(node, reduction.replacement(), - graph_assembler_.effect(), - graph_assembler_.control()); - node->Kill(); + // Node can be replaced under two cases: + // 1. V8_HEAP_SANDBOX_BOOL is enabled and loading an external pointer value. + // 2. V8_MAP_PACKING_BOOL is enabled. + DCHECK_IMPLIES(!V8_HEAP_SANDBOX_BOOL && !V8_MAP_PACKING_BOOL, + reduction.replacement() == node); + if ((V8_HEAP_SANDBOX_BOOL || V8_MAP_PACKING_BOOL) && + reduction.replacement() != node) { + ReplaceUsesAndKillNode(node, reduction.replacement()); } } diff --git a/deps/v8/src/compiler/memory-optimizer.h b/deps/v8/src/compiler/memory-optimizer.h index 0f85fea191..3845304fdd 100644 --- a/deps/v8/src/compiler/memory-optimizer.h +++ b/deps/v8/src/compiler/memory-optimizer.h @@ -68,6 +68,8 @@ class MemoryOptimizer final { void EnqueueUses(Node*, AllocationState const*); void EnqueueUse(Node*, int, AllocationState const*); + void ReplaceUsesAndKillNode(Node* node, Node* replacement); + // Returns true if the AllocationType of the current AllocateRaw node that we // are visiting needs to be updated to kOld, due to propagation of tenuring // from outer to inner allocations. diff --git a/deps/v8/src/compiler/node-matchers.h b/deps/v8/src/compiler/node-matchers.h index e5554d3cba..05ba661b51 100644 --- a/deps/v8/src/compiler/node-matchers.h +++ b/deps/v8/src/compiler/node-matchers.h @@ -238,7 +238,14 @@ struct HeapObjectMatcherImpl final } HeapObjectRef Ref(JSHeapBroker* broker) const { - return HeapObjectRef(broker, this->ResolvedValue()); + // TODO(jgruber,chromium:1209798): Using kAssumeMemoryFence works around + // the fact that the graph stores handles (and not refs). The assumption is + // that any handle inserted into the graph is safe to read; but we don't + // preserve the reason why it is safe to read. Thus we must over-approximate + // here and assume the existence of a memory fence. In the future, we should + // consider having the graph store ObjectRefs or ObjectData pointer instead, + // which would make new ref construction here unnecessary. + return MakeRefAssumeMemoryFence(broker, this->ResolvedValue()); } }; diff --git a/deps/v8/src/compiler/node-observer.h b/deps/v8/src/compiler/node-observer.h index 8978156464..a6c4619262 100644 --- a/deps/v8/src/compiler/node-observer.h +++ b/deps/v8/src/compiler/node-observer.h @@ -80,7 +80,7 @@ class NodeObserver : public ZoneObject { bool has_observed_changes() const { return has_observed_changes_; } private: - bool has_observed_changes_ = false; + std::atomic<bool> has_observed_changes_{false}; }; inline NodeObserver::~NodeObserver() = default; diff --git a/deps/v8/src/compiler/node-properties.h b/deps/v8/src/compiler/node-properties.h index bec18b1e59..50f3a17136 100644 --- a/deps/v8/src/compiler/node-properties.h +++ b/deps/v8/src/compiler/node-properties.h @@ -28,7 +28,7 @@ class V8_EXPORT_PRIVATE NodeProperties { // Inputs are always arranged in order as follows: // 0 [ values, context, frame state, effects, control ] node->InputCount() - static int FirstValueIndex(Node* node) { return 0; } + static int FirstValueIndex(const Node* node) { return 0; } static int FirstContextIndex(Node* node) { return PastValueIndex(node); } static int FirstFrameStateIndex(Node* node) { return PastContextIndex(node); } static int FirstEffectIndex(Node* node) { return PastFrameStateIndex(node); } @@ -65,6 +65,12 @@ class V8_EXPORT_PRIVATE NodeProperties { return node->InputAt(FirstValueIndex(node) + index); } + static const Node* GetValueInput(const Node* node, int index) { + CHECK_LE(0, index); + CHECK_LT(index, node->op()->ValueInputCount()); + return node->InputAt(FirstValueIndex(node) + index); + } + static Node* GetContextInput(Node* node) { CHECK(OperatorProperties::HasContextInput(node->op())); return node->InputAt(FirstContextIndex(node)); @@ -249,7 +255,7 @@ class V8_EXPORT_PRIVATE NodeProperties { // Type. static bool IsTyped(const Node* node) { return !node->type().IsInvalid(); } - static Type GetType(Node* node) { + static Type GetType(const Node* node) { DCHECK(IsTyped(node)); return node->type(); } diff --git a/deps/v8/src/compiler/opcodes.h b/deps/v8/src/compiler/opcodes.h index 3e5314d857..f51c82df48 100644 --- a/deps/v8/src/compiler/opcodes.h +++ b/deps/v8/src/compiler/opcodes.h @@ -385,7 +385,6 @@ V(NumberSilenceNaN) #define SIMPLIFIED_BIGINT_UNOP_LIST(V) \ - V(BigIntAsUintN) \ V(BigIntNegate) \ V(CheckBigInt) @@ -491,13 +490,16 @@ V(TransitionAndStoreNumberElement) \ V(TransitionElementsKind) \ V(TypeOf) \ - V(UpdateInterruptBudget) + V(UpdateInterruptBudget) \ + V(VerifyType) #define SIMPLIFIED_SPECULATIVE_BIGINT_BINOP_LIST(V) \ V(SpeculativeBigIntAdd) \ V(SpeculativeBigIntSubtract) -#define SIMPLIFIED_SPECULATIVE_BIGINT_UNOP_LIST(V) V(SpeculativeBigIntNegate) +#define SIMPLIFIED_SPECULATIVE_BIGINT_UNOP_LIST(V) \ + V(SpeculativeBigIntAsUintN) \ + V(SpeculativeBigIntNegate) #define SIMPLIFIED_OP_LIST(V) \ SIMPLIFIED_CHANGE_OP_LIST(V) \ @@ -570,6 +572,8 @@ V(Word64Sar) \ V(Word64Rol) \ V(Word64Ror) \ + V(Word64RolLowerable) \ + V(Word64RorLowerable) \ V(Int64Add) \ V(Int64AddWithOverflow) \ V(Int64Sub) \ @@ -688,6 +692,8 @@ V(Word64Popcnt) \ V(Word64Clz) \ V(Word64Ctz) \ + V(Word64ClzLowerable) \ + V(Word64CtzLowerable) \ V(Word64ReverseBits) \ V(Word64ReverseBytes) \ V(Simd128ReverseBytes) \ @@ -734,6 +740,8 @@ V(Float64ExtractHighWord32) \ V(Float64InsertLowWord32) \ V(Float64InsertHighWord32) \ + V(Word32Select) \ + V(Word64Select) \ V(Float32Select) \ V(Float64Select) \ V(TaggedPoisonOnSpeculation) \ diff --git a/deps/v8/src/compiler/operation-typer.cc b/deps/v8/src/compiler/operation-typer.cc index 8b889c6948..9e5816559e 100644 --- a/deps/v8/src/compiler/operation-typer.cc +++ b/deps/v8/src/compiler/operation-typer.cc @@ -576,8 +576,7 @@ Type OperationTyper::NumberSilenceNaN(Type type) { return type; } -Type OperationTyper::BigIntAsUintN(Type type) { - DCHECK(type.Is(Type::BigInt())); +Type OperationTyper::SpeculativeBigIntAsUintN(Type type) { return Type::BigInt(); } @@ -1263,14 +1262,12 @@ Type OperationTyper::StrictEqual(Type lhs, Type rhs) { Type OperationTyper::CheckBounds(Type index, Type length) { DCHECK(length.Is(cache_->kPositiveSafeInteger)); if (length.Is(cache_->kSingletonZero)) return Type::None(); - Type mask = Type::Range(0.0, length.Max() - 1, zone()); + Type const upper_bound = Type::Range(0.0, length.Max() - 1, zone()); + if (index.Maybe(Type::String())) return upper_bound; if (index.Maybe(Type::MinusZero())) { index = Type::Union(index, cache_->kSingletonZero, zone()); } - if (index.Maybe(Type::String())) { - index = Type::Union(index, cache_->kIntPtr, zone()); - } - return Type::Intersect(index, mask, zone()); + return Type::Intersect(index, upper_bound, zone()); } Type OperationTyper::CheckFloat64Hole(Type type) { diff --git a/deps/v8/src/compiler/operator.h b/deps/v8/src/compiler/operator.h index e47441208f..4206e753f1 100644 --- a/deps/v8/src/compiler/operator.h +++ b/deps/v8/src/compiler/operator.h @@ -5,7 +5,7 @@ #ifndef V8_COMPILER_OPERATOR_H_ #define V8_COMPILER_OPERATOR_H_ -#include <ostream> // NOLINT(readability/streams) +#include <ostream> #include "src/base/compiler-specific.h" #include "src/base/flags.h" diff --git a/deps/v8/src/compiler/pipeline.cc b/deps/v8/src/compiler/pipeline.cc index f80f3064ce..2ce65780ca 100644 --- a/deps/v8/src/compiler/pipeline.cc +++ b/deps/v8/src/compiler/pipeline.cc @@ -4,7 +4,7 @@ #include "src/compiler/pipeline.h" -#include <fstream> // NOLINT(readability/streams) +#include <fstream> #include <iostream> #include <memory> #include <sstream> @@ -67,7 +67,6 @@ #include "src/compiler/pipeline-statistics.h" #include "src/compiler/redundancy-elimination.h" #include "src/compiler/schedule.h" -#include "src/compiler/scheduled-machine-lowering.h" #include "src/compiler/scheduler.h" #include "src/compiler/select-lowering.h" #include "src/compiler/serializer-for-background-compilation.h" @@ -139,8 +138,7 @@ class PipelineData { // For main entry point. PipelineData(ZoneStats* zone_stats, Isolate* isolate, OptimizedCompilationInfo* info, - PipelineStatistics* pipeline_statistics, - bool is_concurrent_inlining) + PipelineStatistics* pipeline_statistics) : isolate_(isolate), allocator_(isolate->allocator()), info_(info), @@ -157,9 +155,9 @@ class PipelineData { instruction_zone_(instruction_zone_scope_.zone()), codegen_zone_scope_(zone_stats_, kCodegenZoneName), codegen_zone_(codegen_zone_scope_.zone()), - broker_(new JSHeapBroker(isolate_, info_->zone(), - info_->trace_heap_broker(), - is_concurrent_inlining, info->code_kind())), + broker_(new JSHeapBroker( + isolate_, info_->zone(), info_->trace_heap_broker(), + info_->concurrent_inlining(), info->code_kind())), register_allocation_zone_scope_(zone_stats_, kRegisterAllocationZoneName), register_allocation_zone_(register_allocation_zone_scope_.zone()), @@ -783,6 +781,7 @@ class NodeOriginsWrapper final : public Reducer { class V8_NODISCARD PipelineRunScope { public: +#ifdef V8_RUNTIME_CALL_STATS PipelineRunScope( PipelineData* data, const char* phase_name, RuntimeCallCounterId runtime_call_counter_id, @@ -794,6 +793,14 @@ class V8_NODISCARD PipelineRunScope { runtime_call_counter_id, counter_mode) { DCHECK_NOT_NULL(phase_name); } +#else // V8_RUNTIME_CALL_STATS + PipelineRunScope(PipelineData* data, const char* phase_name) + : phase_scope_(data->pipeline_statistics(), phase_name), + zone_scope_(data->zone_stats(), phase_name), + origin_scope_(data->node_origins(), phase_name) { + DCHECK_NOT_NULL(phase_name); + } +#endif // V8_RUNTIME_CALL_STATS Zone* zone() { return zone_scope_.zone(); } @@ -801,7 +808,9 @@ class V8_NODISCARD PipelineRunScope { PhaseScope phase_scope_; ZoneStats::Scope zone_scope_; NodeOriginTable::PhaseScope origin_scope_; +#ifdef V8_RUNTIME_CALL_STATS RuntimeCallTimerScope runtime_call_timer_scope; +#endif // V8_RUNTIME_CALL_STATS }; // LocalIsolateScope encapsulates the phase where persistent handles are @@ -902,8 +911,7 @@ void PrintCode(Isolate* isolate, Handle<Code> code, const bool print_code = FLAG_print_code || (info->IsOptimizing() && FLAG_print_opt_code && - info->shared_info()->PassesFilter(FLAG_print_opt_code_filter)) || - (info->IsNativeContextIndependent() && FLAG_print_nci_code); + info->shared_info()->PassesFilter(FLAG_print_opt_code_filter)); if (print_code) { std::unique_ptr<char[]> debug_name = info->GetDebugName(); CodeTracer::StreamScope tracing_scope(isolate->GetCodeTracer()); @@ -1095,15 +1103,6 @@ class PipelineCompilationJob final : public OptimizedCompilationJob { Linkage* linkage_; }; -namespace { - -bool ShouldUseConcurrentInlining(CodeKind code_kind, bool is_osr) { - if (is_osr) return false; - return code_kind == CodeKind::TURBOPROP || FLAG_concurrent_inlining; -} - -} // namespace - PipelineCompilationJob::PipelineCompilationJob( Isolate* isolate, Handle<SharedFunctionInfo> shared_info, Handle<JSFunction> function, BytecodeOffset osr_offset, @@ -1116,17 +1115,14 @@ PipelineCompilationJob::PipelineCompilationJob( kPipelineCompilationJobZoneName), zone_stats_(function->GetIsolate()->allocator()), compilation_info_(&zone_, function->GetIsolate(), shared_info, function, - code_kind), + code_kind, osr_offset, osr_frame), pipeline_statistics_(CreatePipelineStatistics( handle(Script::cast(shared_info->script()), isolate), compilation_info(), function->GetIsolate(), &zone_stats_)), data_(&zone_stats_, function->GetIsolate(), compilation_info(), - pipeline_statistics_.get(), - ShouldUseConcurrentInlining(code_kind, !osr_offset.IsNone())), + pipeline_statistics_.get()), pipeline_(&data_), - linkage_(nullptr) { - compilation_info_.SetOptimizingForOsr(osr_offset, osr_frame); -} + linkage_(nullptr) {} PipelineCompilationJob::~PipelineCompilationJob() = default; @@ -1159,14 +1155,13 @@ PipelineCompilationJob::Status PipelineCompilationJob::PrepareJobImpl( return AbortOptimization(BailoutReason::kFunctionTooBig); } - if (!FLAG_always_opt && !compilation_info()->IsNativeContextIndependent()) { + if (!FLAG_always_opt) { compilation_info()->set_bailout_on_uninitialized(); } if (FLAG_turbo_loop_peeling) { compilation_info()->set_loop_peeling(); } - if (FLAG_turbo_inlining && !compilation_info()->IsTurboprop() && - !compilation_info()->IsNativeContextIndependent()) { + if (FLAG_turbo_inlining && !compilation_info()->IsTurboprop()) { compilation_info()->set_inlining(); } @@ -1188,13 +1183,11 @@ PipelineCompilationJob::Status PipelineCompilationJob::PrepareJobImpl( // Determine whether to specialize the code for the function's context. // We can't do this in the case of OSR, because we want to cache the // generated code on the native context keyed on SharedFunctionInfo. - // We also can't do this for native context independent code (yet). // TODO(mythria): Check if it is better to key the OSR cache on JSFunction and // allow context specialization for OSR code. if (compilation_info()->closure()->raw_feedback_cell().map() == ReadOnlyRoots(isolate).one_closure_cell_map() && !compilation_info()->is_osr() && - !compilation_info()->IsNativeContextIndependent() && !compilation_info()->IsTurboprop()) { compilation_info()->set_function_context_specializing(); data_.ChooseSpecializationContext(); @@ -1222,7 +1215,7 @@ PipelineCompilationJob::Status PipelineCompilationJob::PrepareJobImpl( } } - if (FLAG_turbo_direct_heap_access) { + if (compilation_info()->concurrent_inlining()) { isolate->heap()->PublishPendingAllocations(); } @@ -1262,8 +1255,7 @@ PipelineCompilationJob::Status PipelineCompilationJob::FinalizeJobImpl( // Ensure that the RuntimeCallStats table of main thread is available for // phases happening during PrepareJob. PipelineJobScope scope(&data_, isolate->counters()->runtime_call_stats()); - RuntimeCallTimerScope runtimeTimer( - isolate, RuntimeCallCounterId::kOptimizeFinalizePipelineJob); + RCS_SCOPE(isolate, RuntimeCallCounterId::kOptimizeFinalizePipelineJob); MaybeHandle<Code> maybe_code = pipeline_.FinalizeCode(); Handle<Code> code; if (!maybe_code.ToHandle(&code)) { @@ -1309,17 +1301,26 @@ void PipelineCompilationJob::RegisterWeakObjectsInOptimizedCode( template <typename Phase, typename... Args> void PipelineImpl::Run(Args&&... args) { +#ifdef V8_RUNTIME_CALL_STATS PipelineRunScope scope(this->data_, Phase::phase_name(), Phase::kRuntimeCallCounterId, Phase::kCounterMode); +#else + PipelineRunScope scope(this->data_, Phase::phase_name()); +#endif Phase phase; phase.Run(this->data_, scope.zone(), std::forward<Args>(args)...); } +#ifdef V8_RUNTIME_CALL_STATS #define DECL_PIPELINE_PHASE_CONSTANTS_HELPER(Name, Mode) \ static const char* phase_name() { return "V8.TF" #Name; } \ static constexpr RuntimeCallCounterId kRuntimeCallCounterId = \ RuntimeCallCounterId::kOptimize##Name; \ static constexpr RuntimeCallStats::CounterMode kCounterMode = Mode; +#else // V8_RUNTIME_CALL_STATS +#define DECL_PIPELINE_PHASE_CONSTANTS_HELPER(Name, Mode) \ + static const char* phase_name() { return "V8.TF" #Name; } +#endif // V8_RUNTIME_CALL_STATS #define DECL_PIPELINE_PHASE_CONSTANTS(Name) \ DECL_PIPELINE_PHASE_CONSTANTS_HELPER(Name, RuntimeCallStats::kThreadSpecific) @@ -1339,7 +1340,7 @@ struct GraphBuilderPhase { flags |= BytecodeGraphBuilderFlag::kBailoutOnUninitialized; } - JSFunctionRef closure(data->broker(), data->info()->closure()); + JSFunctionRef closure = MakeRef(data->broker(), data->info()->closure()); CallFrequency frequency(1.0f); BuildGraphFromBytecode( data->broker(), temp_zone, closure.shared(), @@ -1361,7 +1362,8 @@ struct InliningPhase { data->broker(), data->jsgraph()->Dead(), data->observe_node_manager()); DeadCodeElimination dead_code_elimination(&graph_reducer, data->graph(), - data->common(), temp_zone); + data->common(), temp_zone, + info->concurrent_inlining()); CheckpointElimination checkpoint_elimination(&graph_reducer); CommonOperatorReducer common_reducer(&graph_reducer, data->graph(), data->broker(), data->common(), @@ -1370,7 +1372,7 @@ struct InliningPhase { if (data->info()->bailout_on_uninitialized()) { call_reducer_flags |= JSCallReducer::kBailoutOnUninitialized; } - if (FLAG_turbo_inline_js_wasm_calls && data->info()->inlining()) { + if (data->info()->inline_js_wasm_calls() && data->info()->inlining()) { call_reducer_flags |= JSCallReducer::kInlineJSToWasmCalls; } JSCallReducer call_reducer(&graph_reducer, data->jsgraph(), data->broker(), @@ -1400,12 +1402,12 @@ struct InliningPhase { JSIntrinsicLowering intrinsic_lowering(&graph_reducer, data->jsgraph(), data->broker()); AddReducer(data, &graph_reducer, &dead_code_elimination); - AddReducer(data, &graph_reducer, &checkpoint_elimination); - AddReducer(data, &graph_reducer, &common_reducer); - if (!data->info()->IsNativeContextIndependent()) { - AddReducer(data, &graph_reducer, &native_context_specialization); - AddReducer(data, &graph_reducer, &context_specialization); + if (!data->info()->IsTurboprop()) { + AddReducer(data, &graph_reducer, &checkpoint_elimination); + AddReducer(data, &graph_reducer, &common_reducer); } + AddReducer(data, &graph_reducer, &native_context_specialization); + AddReducer(data, &graph_reducer, &context_specialization); AddReducer(data, &graph_reducer, &intrinsic_lowering); AddReducer(data, &graph_reducer, &call_reducer); if (data->info()->inlining()) { @@ -1431,7 +1433,8 @@ struct WasmInliningPhase { GraphReducer graph_reducer(temp_zone, data->graph(), &info->tick_counter(), data->broker(), data->jsgraph()->Dead()); DeadCodeElimination dead_code_elimination(&graph_reducer, data->graph(), - data->common(), temp_zone); + data->common(), temp_zone, + info->concurrent_inlining()); CommonOperatorReducer common_reducer(&graph_reducer, data->graph(), data->broker(), data->common(), data->machine(), temp_zone); @@ -1503,7 +1506,7 @@ struct HeapBrokerInitializationPhase { DECL_MAIN_THREAD_PIPELINE_PHASE_CONSTANTS(HeapBrokerInitialization) void Run(PipelineData* data, Zone* temp_zone) { - data->broker()->InitializeAndStartSerializing(data->native_context()); + data->broker()->InitializeAndStartSerializing(); } }; @@ -1547,8 +1550,16 @@ struct SerializationPhase { data->zone_stats(), data->broker(), data->dependencies(), data->info()->closure(), flags, data->info()->osr_offset()); if (data->specialization_context().IsJust()) { - ContextRef(data->broker(), - data->specialization_context().FromJust().context); + MakeRef(data->broker(), + data->specialization_context().FromJust().context); + } + if (FLAG_turbo_concurrent_get_property_access_info) { + data->broker()->ClearCachedPropertyAccessInfos(); + data->dependencies()->ClearForConcurrentGetPropertyAccessInfo(); + } + if (FLAG_stress_concurrent_inlining) { + // Force re-serialization from the background thread. + data->broker()->ClearReconstructibleData(); } } }; @@ -1560,8 +1571,9 @@ struct TypedLoweringPhase { GraphReducer graph_reducer( temp_zone, data->graph(), &data->info()->tick_counter(), data->broker(), data->jsgraph()->Dead(), data->observe_node_manager()); - DeadCodeElimination dead_code_elimination(&graph_reducer, data->graph(), - data->common(), temp_zone); + DeadCodeElimination dead_code_elimination( + &graph_reducer, data->graph(), data->common(), temp_zone, + data->info()->concurrent_inlining()); JSCreateLowering create_lowering(&graph_reducer, data->dependencies(), data->jsgraph(), data->broker(), temp_zone); @@ -1579,10 +1591,10 @@ struct TypedLoweringPhase { data->machine(), temp_zone); AddReducer(data, &graph_reducer, &dead_code_elimination); - if (!data->info()->IsNativeContextIndependent()) { - AddReducer(data, &graph_reducer, &create_lowering); + AddReducer(data, &graph_reducer, &create_lowering); + if (!data->info()->IsTurboprop()) { + AddReducer(data, &graph_reducer, &constant_folding_reducer); } - AddReducer(data, &graph_reducer, &constant_folding_reducer); AddReducer(data, &graph_reducer, &typed_lowering); AddReducer(data, &graph_reducer, &typed_optimization); AddReducer(data, &graph_reducer, &simple_reducer); @@ -1747,8 +1759,9 @@ struct EarlyOptimizationPhase { GraphReducer graph_reducer( temp_zone, data->graph(), &data->info()->tick_counter(), data->broker(), data->jsgraph()->Dead(), data->observe_node_manager()); - DeadCodeElimination dead_code_elimination(&graph_reducer, data->graph(), - data->common(), temp_zone); + DeadCodeElimination dead_code_elimination( + &graph_reducer, data->graph(), data->common(), temp_zone, + data->info()->concurrent_inlining()); SimplifiedOperatorReducer simple_reducer(&graph_reducer, data->jsgraph(), data->broker()); RedundancyElimination redundancy_elimination(&graph_reducer, temp_zone); @@ -1804,11 +1817,6 @@ struct EffectControlLinearizationPhase { TraceScheduleAndVerify(data->info(), data, schedule, "effect linearization schedule"); - MaskArrayIndexEnable mask_array_index = - (data->info()->GetPoisoningMitigationLevel() != - PoisoningMitigationLevel::kDontPoison) - ? MaskArrayIndexEnable::kMaskArrayIndex - : MaskArrayIndexEnable::kDoNotMaskArrayIndex; // Post-pass for wiring the control/effects // - connect allocating representation changes into the control&effect // chains and lower them, @@ -1816,7 +1824,7 @@ struct EffectControlLinearizationPhase { // - introduce effect phis and rewire effects to get SSA again. LinearizeEffectControl(data->jsgraph(), schedule, temp_zone, data->source_positions(), data->node_origins(), - mask_array_index, MaintainSchedule::kDiscard, + data->info()->GetPoisoningMitigationLevel(), data->broker()); } { @@ -1829,8 +1837,9 @@ struct EffectControlLinearizationPhase { &data->info()->tick_counter(), data->broker(), data->jsgraph()->Dead(), data->observe_node_manager()); - DeadCodeElimination dead_code_elimination(&graph_reducer, data->graph(), - data->common(), temp_zone); + DeadCodeElimination dead_code_elimination( + &graph_reducer, data->graph(), data->common(), temp_zone, + data->info()->concurrent_inlining()); CommonOperatorReducer common_reducer(&graph_reducer, data->graph(), data->broker(), data->common(), data->machine(), temp_zone); @@ -1868,8 +1877,9 @@ struct LoadEliminationPhase { BranchElimination branch_condition_elimination(&graph_reducer, data->jsgraph(), temp_zone, BranchElimination::kEARLY); - DeadCodeElimination dead_code_elimination(&graph_reducer, data->graph(), - data->common(), temp_zone); + DeadCodeElimination dead_code_elimination( + &graph_reducer, data->graph(), data->common(), temp_zone, + data->info()->concurrent_inlining()); RedundancyElimination redundancy_elimination(&graph_reducer, temp_zone); LoadElimination load_elimination(&graph_reducer, data->jsgraph(), temp_zone); @@ -1936,8 +1946,9 @@ struct LateOptimizationPhase { data->jsgraph()->Dead(), data->observe_node_manager()); BranchElimination branch_condition_elimination(&graph_reducer, data->jsgraph(), temp_zone); - DeadCodeElimination dead_code_elimination(&graph_reducer, data->graph(), - data->common(), temp_zone); + DeadCodeElimination dead_code_elimination( + &graph_reducer, data->graph(), data->common(), temp_zone, + data->info()->concurrent_inlining()); ValueNumberingReducer value_numbering(temp_zone, data->graph()->zone()); MachineOperatorReducer machine_reducer(&graph_reducer, data->jsgraph()); CommonOperatorReducer common_reducer(&graph_reducer, data->graph(), @@ -2000,43 +2011,22 @@ struct ScheduledEffectControlLinearizationPhase { DECL_PIPELINE_PHASE_CONSTANTS(ScheduledEffectControlLinearization) void Run(PipelineData* data, Zone* temp_zone) { - MaskArrayIndexEnable mask_array_index = - (data->info()->GetPoisoningMitigationLevel() != - PoisoningMitigationLevel::kDontPoison) - ? MaskArrayIndexEnable::kMaskArrayIndex - : MaskArrayIndexEnable::kDoNotMaskArrayIndex; // Post-pass for wiring the control/effects // - connect allocating representation changes into the control&effect // chains and lower them, // - get rid of the region markers, - // - introduce effect phis and rewire effects to get SSA again. - LinearizeEffectControl(data->jsgraph(), data->schedule(), temp_zone, + // - introduce effect phis and rewire effects to get SSA again, + // - lower simplified memory and select nodes to machine level nodes. + LowerToMachineSchedule(data->jsgraph(), data->schedule(), temp_zone, data->source_positions(), data->node_origins(), - mask_array_index, MaintainSchedule::kMaintain, + data->info()->GetPoisoningMitigationLevel(), data->broker()); // TODO(rmcilroy) Avoid having to rebuild rpo_order on schedule each time. Scheduler::ComputeSpecialRPO(temp_zone, data->schedule()); - if (FLAG_turbo_verify) Scheduler::GenerateDominatorTree(data->schedule()); - TraceScheduleAndVerify(data->info(), data, data->schedule(), - "effect linearization schedule"); - } -}; - -struct ScheduledMachineLoweringPhase { - DECL_PIPELINE_PHASE_CONSTANTS(ScheduledMachineLowering) - - void Run(PipelineData* data, Zone* temp_zone) { - ScheduledMachineLowering machine_lowering( - data->jsgraph(), data->schedule(), temp_zone, data->source_positions(), - data->node_origins(), data->info()->GetPoisoningMitigationLevel()); - machine_lowering.Run(); - - // TODO(rmcilroy) Avoid having to rebuild rpo_order on schedule each time. - Scheduler::ComputeSpecialRPO(temp_zone, data->schedule()); Scheduler::GenerateDominatorTree(data->schedule()); TraceScheduleAndVerify(data->info(), data, data->schedule(), - "machine lowered schedule"); + "effect linearization schedule"); } }; @@ -2051,8 +2041,9 @@ struct CsaEarlyOptimizationPhase { allow_signalling_nan); BranchElimination branch_condition_elimination(&graph_reducer, data->jsgraph(), temp_zone); - DeadCodeElimination dead_code_elimination(&graph_reducer, data->graph(), - data->common(), temp_zone); + DeadCodeElimination dead_code_elimination( + &graph_reducer, data->graph(), data->common(), temp_zone, + data->info()->concurrent_inlining()); CommonOperatorReducer common_reducer(&graph_reducer, data->graph(), data->broker(), data->common(), data->machine(), temp_zone); @@ -2078,8 +2069,9 @@ struct CsaOptimizationPhase { data->jsgraph()->Dead(), data->observe_node_manager()); BranchElimination branch_condition_elimination(&graph_reducer, data->jsgraph(), temp_zone); - DeadCodeElimination dead_code_elimination(&graph_reducer, data->graph(), - data->common(), temp_zone); + DeadCodeElimination dead_code_elimination( + &graph_reducer, data->graph(), data->common(), temp_zone, + data->info()->concurrent_inlining()); MachineOperatorReducer machine_reducer(&graph_reducer, data->jsgraph(), allow_signalling_nan); CommonOperatorReducer common_reducer(&graph_reducer, data->graph(), @@ -2653,12 +2645,15 @@ bool PipelineImpl::CreateGraph() { RunPrintAndVerify(InliningPhase::phase_name(), true); // Remove dead->live edges from the graph. - Run<EarlyGraphTrimmingPhase>(); - RunPrintAndVerify(EarlyGraphTrimmingPhase::phase_name(), true); + if (!data->info()->IsTurboprop()) { + Run<EarlyGraphTrimmingPhase>(); + RunPrintAndVerify(EarlyGraphTrimmingPhase::phase_name(), true); + } // Determine the Typer operation flags. { - SharedFunctionInfoRef shared_info(data->broker(), info()->shared_info()); + SharedFunctionInfoRef shared_info = + MakeRef(data->broker(), info()->shared_info()); if (is_sloppy(shared_info.language_mode()) && shared_info.IsUserJavaScript()) { // Sloppy mode functions always have an Object for this. @@ -2735,7 +2730,7 @@ bool PipelineImpl::OptimizeGraph(Linkage* linkage) { #if V8_ENABLE_WEBASSEMBLY if (data->has_js_wasm_calls()) { - DCHECK(FLAG_turbo_inline_js_wasm_calls); + DCHECK(data->info()->inline_js_wasm_calls()); Run<WasmInliningPhase>(); RunPrintAndVerify(WasmInliningPhase::phase_name(), true); } @@ -2862,9 +2857,6 @@ bool PipelineImpl::OptimizeGraphForMidTier(Linkage* linkage) { RunPrintAndVerify(ScheduledEffectControlLinearizationPhase::phase_name(), true); - Run<ScheduledMachineLoweringPhase>(); - RunPrintAndVerify(ScheduledMachineLoweringPhase::phase_name(), true); - data->source_positions()->RemoveDecorator(); if (data->info()->trace_turbo_json()) { data->node_origins()->RemoveDecorator(); @@ -2966,8 +2958,7 @@ MaybeHandle<Code> Pipeline::GenerateCodeForCodeStub( should_optimize_jumps ? &jump_opt : nullptr, options, profile_data); PipelineJobScope scope(&data, isolate->counters()->runtime_call_stats()); - RuntimeCallTimerScope timer_scope(isolate, - RuntimeCallCounterId::kOptimizeCode); + RCS_SCOPE(isolate, RuntimeCallCounterId::kOptimizeCode); data.set_verify_graph(FLAG_verify_csa); std::unique_ptr<PipelineStatistics> pipeline_statistics; if (FLAG_turbo_stats || FLAG_turbo_stats_nvp) { @@ -3290,8 +3281,7 @@ MaybeHandle<Code> Pipeline::GenerateCodeForTesting( CreatePipelineStatistics(Handle<Script>::null(), info, isolate, &zone_stats)); - PipelineData data(&zone_stats, isolate, info, pipeline_statistics.get(), - i::FLAG_concurrent_inlining); + PipelineData data(&zone_stats, isolate, info, pipeline_statistics.get()); PipelineImpl pipeline(&data); Linkage linkage(Linkage::ComputeIncoming(data.instruction_zone(), info)); @@ -3422,8 +3412,10 @@ void PipelineImpl::ComputeScheduledGraph() { // We should only schedule the graph if it is not scheduled yet. DCHECK_NULL(data->schedule()); - Run<LateGraphTrimmingPhase>(); - RunPrintAndVerify(LateGraphTrimmingPhase::phase_name(), true); + if (!data->info()->IsTurboprop()) { + Run<LateGraphTrimmingPhase>(); + RunPrintAndVerify(LateGraphTrimmingPhase::phase_name(), true); + } Run<ComputeSchedulePhase>(); TraceScheduleAndVerify(data->info(), data, data->schedule(), "schedule"); diff --git a/deps/v8/src/compiler/processed-feedback.h b/deps/v8/src/compiler/processed-feedback.h index 4cecd338c5..78163a23a7 100644 --- a/deps/v8/src/compiler/processed-feedback.h +++ b/deps/v8/src/compiler/processed-feedback.h @@ -197,20 +197,24 @@ class MinimorphicLoadPropertyAccessFeedback : public ProcessedFeedback { class CallFeedback : public ProcessedFeedback { public: CallFeedback(base::Optional<HeapObjectRef> target, float frequency, - SpeculationMode mode, FeedbackSlotKind slot_kind) + SpeculationMode mode, CallFeedbackContent call_feedback_content, + FeedbackSlotKind slot_kind) : ProcessedFeedback(kCall, slot_kind), target_(target), frequency_(frequency), - mode_(mode) {} + mode_(mode), + content_(call_feedback_content) {} base::Optional<HeapObjectRef> target() const { return target_; } float frequency() const { return frequency_; } SpeculationMode speculation_mode() const { return mode_; } + CallFeedbackContent call_feedback_content() const { return content_; } private: base::Optional<HeapObjectRef> const target_; float const frequency_; SpeculationMode const mode_; + CallFeedbackContent const content_; }; template <class T, ProcessedFeedback::Kind K> diff --git a/deps/v8/src/compiler/property-access-builder.cc b/deps/v8/src/compiler/property-access-builder.cc index c5a70555a7..317d21a712 100644 --- a/deps/v8/src/compiler/property-access-builder.cc +++ b/deps/v8/src/compiler/property-access-builder.cc @@ -35,7 +35,7 @@ SimplifiedOperatorBuilder* PropertyAccessBuilder::simplified() const { bool HasOnlyStringMaps(JSHeapBroker* broker, ZoneVector<Handle<Map>> const& maps) { for (auto map : maps) { - MapRef map_ref(broker, map); + MapRef map_ref = MakeRef(broker, map); if (!map_ref.IsStringMap()) return false; } return true; @@ -46,7 +46,7 @@ namespace { bool HasOnlyNumberMaps(JSHeapBroker* broker, ZoneVector<Handle<Map>> const& maps) { for (auto map : maps) { - MapRef map_ref(broker, map); + MapRef map_ref = MakeRef(broker, map); if (map_ref.instance_type() != HEAP_NUMBER_TYPE) return false; } return true; @@ -89,7 +89,7 @@ void PropertyAccessBuilder::BuildCheckMaps( MapRef object_map = m.Ref(broker()).map(); if (object_map.is_stable()) { for (Handle<Map> map : maps) { - if (MapRef(broker(), map).equals(object_map)) { + if (MakeRef(broker(), map).equals(object_map)) { dependencies()->DependOnStableMap(object_map); return; } @@ -99,7 +99,7 @@ void PropertyAccessBuilder::BuildCheckMaps( ZoneHandleSet<Map> map_set; CheckMapsFlags flags = CheckMapsFlag::kNone; for (Handle<Map> map : maps) { - MapRef object_map(broker(), map); + MapRef object_map = MakeRef(broker(), map); map_set.insert(object_map.object(), graph()->zone()); if (object_map.is_migration_target()) { flags |= CheckMapsFlag::kTryMigrateInstance; @@ -153,7 +153,8 @@ Node* PropertyAccessBuilder::FoldLoadDictPrototypeConstant( DCHECK(V8_DICT_PROPERTY_CONST_TRACKING_BOOL); DCHECK(access_info.IsDictionaryProtoDataConstant()); - JSObjectRef holder(broker(), access_info.holder().ToHandleChecked()); + JSObjectRef holder = + MakeRef(broker(), access_info.holder().ToHandleChecked()); base::Optional<ObjectRef> value = holder.GetOwnDictionaryProperty(access_info.dictionary_index()); @@ -163,15 +164,15 @@ Node* PropertyAccessBuilder::FoldLoadDictPrototypeConstant( if (!map->IsJSReceiverMap()) { // Perform the implicit ToObject for primitives here. // Implemented according to ES6 section 7.3.2 GetV (V, P). - Handle<JSFunction> constructor = + JSFunction constructor = Map::GetConstructorFunction( - map, broker()->target_native_context().object()) - .ToHandleChecked(); - map = handle(constructor->initial_map(), isolate()); + *map, *broker()->target_native_context().object()) + .value(); + map = handle(constructor.initial_map(), isolate()); DCHECK(map->IsJSObjectMap()); } dependencies()->DependOnConstantInDictionaryPrototypeChain( - MapRef{broker(), map}, NameRef{broker(), access_info.name()}, + MakeRef(broker(), map), MakeRef(broker(), access_info.name()), value.value(), PropertyKind::kData); } @@ -197,7 +198,7 @@ Node* PropertyAccessBuilder::TryFoldLoadConstantDataField( if (std::find_if( access_info.lookup_start_object_maps().begin(), access_info.lookup_start_object_maps().end(), [&](Handle<Map> map) { - return MapRef(broker(), map).equals(lookup_start_object_map); + return MakeRef(broker(), map).equals(lookup_start_object_map); }) == access_info.lookup_start_object_maps().end()) { // The map of the lookup_start_object is not in the feedback, let us bail // out. @@ -206,7 +207,7 @@ Node* PropertyAccessBuilder::TryFoldLoadConstantDataField( holder = m.Ref(broker()).AsJSObject().object(); } - JSObjectRef holder_ref(broker(), holder); + JSObjectRef holder_ref = MakeRef(broker(), holder); base::Optional<ObjectRef> value = holder_ref.GetOwnFastDataProperty( access_info.field_representation(), access_info.field_index()); if (!value.has_value()) { @@ -329,7 +330,7 @@ Node* PropertyAccessBuilder::BuildLoadDataField( // used by the LoadElimination to eliminate map checks on the result. Handle<Map> field_map; if (access_info.field_map().ToHandle(&field_map)) { - MapRef field_map_ref(broker(), field_map); + MapRef field_map_ref = MakeRef(broker(), field_map); if (field_map_ref.is_stable()) { dependencies()->DependOnStableMap(field_map_ref); field_access.map = field_map; diff --git a/deps/v8/src/compiler/raw-machine-assembler.cc b/deps/v8/src/compiler/raw-machine-assembler.cc index f79776bad9..7ed217d4e3 100644 --- a/deps/v8/src/compiler/raw-machine-assembler.cc +++ b/deps/v8/src/compiler/raw-machine-assembler.cc @@ -747,7 +747,8 @@ Node* CallCFunctionImpl( } for (const auto& arg : args) builder.AddParam(arg.first); - bool caller_saved_fp_regs = caller_saved_regs && (mode == kSaveFPRegs); + bool caller_saved_fp_regs = + caller_saved_regs && (mode == SaveFPRegsMode::kSave); CallDescriptor::Flags flags = CallDescriptor::kNoFlags; if (caller_saved_regs) flags |= CallDescriptor::kCallerSavedRegisters; if (caller_saved_fp_regs) flags |= CallDescriptor::kCallerSavedFPRegisters; @@ -772,14 +773,14 @@ Node* RawMachineAssembler::CallCFunction( Node* function, base::Optional<MachineType> return_type, std::initializer_list<RawMachineAssembler::CFunctionArg> args) { return CallCFunctionImpl(this, function, return_type, args, false, - kDontSaveFPRegs, kHasFunctionDescriptor); + SaveFPRegsMode::kIgnore, kHasFunctionDescriptor); } Node* RawMachineAssembler::CallCFunctionWithoutFunctionDescriptor( Node* function, MachineType return_type, std::initializer_list<RawMachineAssembler::CFunctionArg> args) { return CallCFunctionImpl(this, function, return_type, args, false, - kDontSaveFPRegs, kNoFunctionDescriptor); + SaveFPRegsMode::kIgnore, kNoFunctionDescriptor); } Node* RawMachineAssembler::CallCFunctionWithCallerSavedRegisters( diff --git a/deps/v8/src/compiler/raw-machine-assembler.h b/deps/v8/src/compiler/raw-machine-assembler.h index 1dff0a7c0c..a811fa7bf9 100644 --- a/deps/v8/src/compiler/raw-machine-assembler.h +++ b/deps/v8/src/compiler/raw-machine-assembler.h @@ -15,6 +15,7 @@ #include "src/compiler/graph.h" #include "src/compiler/linkage.h" #include "src/compiler/machine-operator.h" +#include "src/compiler/node-matchers.h" #include "src/compiler/node.h" #include "src/compiler/operator.h" #include "src/compiler/simplified-operator.h" @@ -147,10 +148,38 @@ class V8_EXPORT_PRIVATE RawMachineAssembler { Node* load = AddNode(op, base, index); return load; } + Node* LoadImmutable(MachineType type, Node* base) { + return LoadImmutable(type, base, IntPtrConstant(0)); + } + Node* LoadImmutable(MachineType type, Node* base, Node* index) { + const Operator* op = machine()->LoadImmutable(type); + return AddNode(op, base, index); + } + bool IsMapOffsetConstant(Node* node) { + Int64Matcher m(node); + if (m.Is(HeapObject::kMapOffset)) return true; + // Test if `node` is a `Phi(Int64Constant(0))` + if (node->opcode() == IrOpcode::kPhi) { + for (Node* input : node->inputs()) { + if (!Int64Matcher(input).Is(HeapObject::kMapOffset)) return false; + } + return true; + } + return false; + } + bool IsMapOffsetConstantMinusTag(Node* node) { + Int64Matcher m(node); + return m.Is(HeapObject::kMapOffset - kHeapObjectTag); + } + bool IsMapOffsetConstantMinusTag(int offset) { + return offset == HeapObject::kMapOffset - kHeapObjectTag; + } Node* LoadFromObject( MachineType type, Node* base, Node* offset, LoadSensitivity needs_poisoning = LoadSensitivity::kSafe) { CHECK_EQ(needs_poisoning, LoadSensitivity::kSafe); + DCHECK_IMPLIES(V8_MAP_PACKING_BOOL && IsMapOffsetConstantMinusTag(offset), + type == MachineType::MapInHeader()); ObjectAccess access = {type, WriteBarrierKind::kNoWriteBarrier}; Node* load = AddNode(simplified()->LoadFromObject(access), base, offset); return load; @@ -169,18 +198,22 @@ class V8_EXPORT_PRIVATE RawMachineAssembler { Node* value, WriteBarrierKind write_barrier) { ObjectAccess access = {MachineType::TypeForRepresentation(rep), write_barrier}; + DCHECK(!IsMapOffsetConstantMinusTag(offset)); AddNode(simplified()->StoreToObject(access), object, offset, value); } void OptimizedStoreField(MachineRepresentation rep, Node* object, int offset, Node* value, WriteBarrierKind write_barrier) { + DCHECK(!IsMapOffsetConstantMinusTag(offset)); AddNode(simplified()->StoreField(FieldAccess( BaseTaggedness::kTaggedBase, offset, MaybeHandle<Name>(), MaybeHandle<Map>(), Type::Any(), MachineType::TypeForRepresentation(rep), write_barrier)), object, value); } - void OptimizedStoreMap(Node* object, Node* value) { - AddNode(simplified()->StoreField(AccessBuilder::ForMap()), object, value); + void OptimizedStoreMap(Node* object, Node* value, + WriteBarrierKind write_barrier = kMapWriteBarrier) { + AddNode(simplified()->StoreField(AccessBuilder::ForMap(write_barrier)), + object, value); } Node* Retain(Node* value) { return AddNode(common()->Retain(), value); } @@ -245,6 +278,7 @@ class V8_EXPORT_PRIVATE RawMachineAssembler { Node* AtomicStore(MachineRepresentation rep, Node* base, Node* index, Node* value) { + DCHECK(!IsMapOffsetConstantMinusTag(index)); DCHECK_NE(rep, MachineRepresentation::kWord64); return AddNode(machine()->Word32AtomicStore(rep), base, index, value); } @@ -547,6 +581,15 @@ class V8_EXPORT_PRIVATE RawMachineAssembler { } Node* Word32Ctz(Node* a) { return AddNode(machine()->Word32Ctz().op(), a); } Node* Word64Ctz(Node* a) { return AddNode(machine()->Word64Ctz().op(), a); } + + Node* Word32Select(Node* condition, Node* b, Node* c) { + return AddNode(machine()->Word32Select().op(), condition, b, c); + } + + Node* Word64Select(Node* condition, Node* b, Node* c) { + return AddNode(machine()->Word64Select().op(), condition, b, c); + } + Node* StackPointerGreaterThan(Node* value) { return AddNode( machine()->StackPointerGreaterThan(StackCheckKind::kCodeStubAssembler), diff --git a/deps/v8/src/compiler/refs-map.cc b/deps/v8/src/compiler/refs-map.cc index 7cf465f00b..149865b093 100644 --- a/deps/v8/src/compiler/refs-map.cc +++ b/deps/v8/src/compiler/refs-map.cc @@ -27,6 +27,10 @@ RefsMap::Entry* RefsMap::LookupOrInsert(const Address& key) { []() { return nullptr; }); } +ObjectData* RefsMap::Remove(const Address& key) { + return UnderlyingMap::Remove(key, RefsMap::Hash(key)); +} + uint32_t RefsMap::Hash(Address addr) { return static_cast<uint32_t>(addr); } } // namespace compiler diff --git a/deps/v8/src/compiler/refs-map.h b/deps/v8/src/compiler/refs-map.h index 708da8359f..3b26276072 100644 --- a/deps/v8/src/compiler/refs-map.h +++ b/deps/v8/src/compiler/refs-map.h @@ -42,6 +42,7 @@ class RefsMap // Wrappers around methods from UnderlyingMap Entry* Lookup(const Address& key) const; Entry* LookupOrInsert(const Address& key); + ObjectData* Remove(const Address& key); private: static uint32_t Hash(Address addr); diff --git a/deps/v8/src/compiler/representation-change.cc b/deps/v8/src/compiler/representation-change.cc index 4bfaa1ccee..750bc1fd56 100644 --- a/deps/v8/src/compiler/representation-change.cc +++ b/deps/v8/src/compiler/representation-change.cc @@ -237,6 +237,7 @@ Node* RepresentationChanger::GetRepresentationFor( return node; case MachineRepresentation::kCompressed: case MachineRepresentation::kCompressedPointer: + case MachineRepresentation::kMapWord: UNREACHABLE(); } UNREACHABLE(); @@ -510,7 +511,8 @@ Node* RepresentationChanger::GetTaggedRepresentationFor( break; } if (output_rep == MachineRepresentation::kTaggedSigned || - output_rep == MachineRepresentation::kTaggedPointer) { + output_rep == MachineRepresentation::kTaggedPointer || + output_rep == MachineRepresentation::kMapWord) { // this is a no-op. return node; } @@ -795,12 +797,12 @@ Node* RepresentationChanger::MakeTruncatedInt32Constant(double value) { return jsgraph()->Int32Constant(DoubleToInt32(value)); } -Node* RepresentationChanger::InsertUnconditionalDeopt(Node* node, - DeoptimizeReason reason) { +Node* RepresentationChanger::InsertUnconditionalDeopt( + Node* node, DeoptimizeReason reason, const FeedbackSource& feedback) { Node* effect = NodeProperties::GetEffectInput(node); Node* control = NodeProperties::GetControlInput(node); effect = - jsgraph()->graph()->NewNode(simplified()->CheckIf(reason), + jsgraph()->graph()->NewNode(simplified()->CheckIf(reason, feedback), jsgraph()->Int32Constant(0), effect, control); Node* unreachable = effect = jsgraph()->graph()->NewNode( jsgraph()->common()->Unreachable(), effect, control); @@ -1102,7 +1104,7 @@ Node* RepresentationChanger::GetWord64RepresentationFor( HeapObjectMatcher m(node); if (m.HasResolvedValue() && m.Ref(broker_).IsBigInt() && use_info.truncation().IsUsedAsWord64()) { - auto bigint = m.Ref(broker_).AsBigInt(); + BigIntRef bigint = m.Ref(broker_).AsBigInt(); return jsgraph()->Int64Constant( static_cast<int64_t>(bigint.AsUint64())); } @@ -1117,8 +1119,8 @@ Node* RepresentationChanger::GetWord64RepresentationFor( if (!CanBeTaggedPointer(output_rep) && output_rep != MachineRepresentation::kWord64) { DCHECK(!output_type.Equals(Type::BigInt())); - Node* unreachable = - InsertUnconditionalDeopt(use_node, DeoptimizeReason::kNotABigInt); + Node* unreachable = InsertUnconditionalDeopt( + use_node, DeoptimizeReason::kNotABigInt, use_info.feedback()); return jsgraph()->graph()->NewNode( jsgraph()->common()->DeadValue(MachineRepresentation::kWord64), unreachable); @@ -1157,11 +1159,11 @@ Node* RepresentationChanger::GetWord64RepresentationFor( MachineRepresentation::kWord64); } } else if (output_rep == MachineRepresentation::kFloat32) { - if (output_type.Is(cache_->kInt64)) { + if (output_type.Is(cache_->kDoubleRepresentableInt64)) { // float32 -> float64 -> int64 node = InsertChangeFloat32ToFloat64(node); op = machine()->ChangeFloat64ToInt64(); - } else if (output_type.Is(cache_->kUint64)) { + } else if (output_type.Is(cache_->kDoubleRepresentableUint64)) { // float32 -> float64 -> uint64 node = InsertChangeFloat32ToFloat64(node); op = machine()->ChangeFloat64ToUint64(); @@ -1179,9 +1181,9 @@ Node* RepresentationChanger::GetWord64RepresentationFor( MachineRepresentation::kWord64); } } else if (output_rep == MachineRepresentation::kFloat64) { - if (output_type.Is(cache_->kInt64)) { + if (output_type.Is(cache_->kDoubleRepresentableInt64)) { op = machine()->ChangeFloat64ToInt64(); - } else if (output_type.Is(cache_->kUint64)) { + } else if (output_type.Is(cache_->kDoubleRepresentableUint64)) { op = machine()->ChangeFloat64ToUint64(); } else if (use_info.type_check() == TypeCheckKind::kSigned64 || use_info.type_check() == TypeCheckKind::kArrayIndex) { @@ -1209,7 +1211,7 @@ Node* RepresentationChanger::GetWord64RepresentationFor( use_node, use_info); op = simplified()->TruncateBigIntToUint64(); } else if (CanBeTaggedPointer(output_rep)) { - if (output_type.Is(cache_->kInt64)) { + if (output_type.Is(cache_->kDoubleRepresentableInt64)) { op = simplified()->ChangeTaggedToInt64(); } else if (use_info.type_check() == TypeCheckKind::kSigned64) { op = simplified()->CheckedTaggedToInt64( @@ -1228,8 +1230,11 @@ Node* RepresentationChanger::GetWord64RepresentationFor( if (output_type.Is(Type::BigInt())) { return node; } else { - return TypeError(node, output_rep, output_type, - MachineRepresentation::kWord64); + Node* unreachable = InsertUnconditionalDeopt( + use_node, DeoptimizeReason::kNotABigInt, use_info.feedback()); + return jsgraph()->graph()->NewNode( + jsgraph()->common()->DeadValue(MachineRepresentation::kWord64), + unreachable); } } else { return TypeError(node, output_rep, output_type, diff --git a/deps/v8/src/compiler/representation-change.h b/deps/v8/src/compiler/representation-change.h index 334237ed1f..a4b05cbfe7 100644 --- a/deps/v8/src/compiler/representation-change.h +++ b/deps/v8/src/compiler/representation-change.h @@ -16,7 +16,7 @@ namespace compiler { // Foward declarations. class TypeCache; -enum IdentifyZeros { kIdentifyZeros, kDistinguishZeros }; +enum IdentifyZeros : uint8_t { kIdentifyZeros, kDistinguishZeros }; class Truncation final { public: @@ -180,10 +180,10 @@ class UseInfo { static UseInfo TruncatingWord32() { return UseInfo(MachineRepresentation::kWord32, Truncation::Word32()); } - static UseInfo TruncatingWord64() { - return UseInfo(MachineRepresentation::kWord64, Truncation::Word64()); - } static UseInfo CheckedBigIntTruncatingWord64(const FeedbackSource& feedback) { + // Note that Trunction::Word64() can safely use kIdentifyZero, because + // TypeCheckKind::kBigInt will make sure we deopt for anything other than + // type BigInt anyway. return UseInfo(MachineRepresentation::kWord64, Truncation::Word64(), TypeCheckKind::kBigInt, feedback); } @@ -400,7 +400,8 @@ class V8_EXPORT_PRIVATE RepresentationChanger final { Node* use_node); Node* InsertConversion(Node* node, const Operator* op, Node* use_node); Node* InsertTruncateInt64ToInt32(Node* node); - Node* InsertUnconditionalDeopt(Node* node, DeoptimizeReason reason); + Node* InsertUnconditionalDeopt(Node* node, DeoptimizeReason reason, + const FeedbackSource& feedback = {}); JSGraph* jsgraph() const { return jsgraph_; } Isolate* isolate() const; diff --git a/deps/v8/src/compiler/scheduled-machine-lowering.cc b/deps/v8/src/compiler/scheduled-machine-lowering.cc deleted file mode 100644 index fde836e4e8..0000000000 --- a/deps/v8/src/compiler/scheduled-machine-lowering.cc +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2019 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "src/compiler/scheduled-machine-lowering.h" - -#include "src/compiler/compiler-source-position-table.h" -#include "src/compiler/js-graph.h" -#include "src/compiler/node-origin-table.h" -#include "src/compiler/node-properties.h" -#include "src/compiler/schedule.h" - -namespace v8 { -namespace internal { -namespace compiler { - -ScheduledMachineLowering::ScheduledMachineLowering( - JSGraph* js_graph, Schedule* schedule, Zone* temp_zone, - SourcePositionTable* source_positions, NodeOriginTable* node_origins, - PoisoningMitigationLevel poison_level) - : schedule_(schedule), - graph_assembler_(js_graph, temp_zone, base::nullopt, schedule), - select_lowering_(&graph_assembler_, js_graph->graph()), - memory_lowering_(js_graph, temp_zone, &graph_assembler_, poison_level), - reducers_({&select_lowering_, &memory_lowering_}, temp_zone), - source_positions_(source_positions), - node_origins_(node_origins) {} - -void ScheduledMachineLowering::Run() { - // TODO(rmcilroy) We should not depend on having rpo_order on schedule, and - // instead just do our own RPO walk here. - for (BasicBlock* block : *(schedule()->rpo_order())) { - BasicBlock::iterator instr = block->begin(); - BasicBlock::iterator end_instr = block->end(); - gasm()->Reset(block); - - for (; instr != end_instr; instr++) { - Node* node = *instr; - Reduction reduction; - for (auto reducer : reducers_) { - reduction = reducer->Reduce(node, nullptr); - if (reduction.Changed()) break; - } - if (reduction.Changed()) { - Node* replacement = reduction.replacement(); - if (replacement != node) { - // Replace all uses of node and kill the node to make sure we don't - // leave dangling dead uses. - NodeProperties::ReplaceUses(node, replacement, gasm()->effect(), - gasm()->control()); - node->Kill(); - } else { - gasm()->AddNode(replacement); - } - } else { - gasm()->AddNode(node); - } - } - - gasm()->FinalizeCurrentBlock(block); - } - - schedule_->rpo_order()->clear(); -} - -} // namespace compiler -} // namespace internal -} // namespace v8 diff --git a/deps/v8/src/compiler/scheduled-machine-lowering.h b/deps/v8/src/compiler/scheduled-machine-lowering.h deleted file mode 100644 index ca078a2a53..0000000000 --- a/deps/v8/src/compiler/scheduled-machine-lowering.h +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2019 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef V8_COMPILER_SCHEDULED_MACHINE_LOWERING_H_ -#define V8_COMPILER_SCHEDULED_MACHINE_LOWERING_H_ - -#include "src/compiler/graph-assembler.h" -#include "src/compiler/memory-lowering.h" -#include "src/compiler/select-lowering.h" - -namespace v8 { -namespace internal { -namespace compiler { - -class NodeOriginTable; -class Schedule; -class SourcePositionTable; - -// Performs machine lowering on an already scheduled graph. -class ScheduledMachineLowering final { - public: - ScheduledMachineLowering(JSGraph* js_graph, Schedule* schedule, - Zone* temp_zone, - SourcePositionTable* source_positions, - NodeOriginTable* node_origins, - PoisoningMitigationLevel poison_level); - ~ScheduledMachineLowering() = default; - - void Run(); - - private: - bool LowerNode(Node* node); - - JSGraphAssembler* gasm() { return &graph_assembler_; } - Schedule* schedule() { return schedule_; } - - Schedule* schedule_; - JSGraphAssembler graph_assembler_; - SelectLowering select_lowering_; - MemoryLowering memory_lowering_; - ZoneVector<Reducer*> reducers_; - SourcePositionTable* source_positions_; - NodeOriginTable* node_origins_; -}; - -} // namespace compiler -} // namespace internal -} // namespace v8 - -#endif // V8_COMPILER_SCHEDULED_MACHINE_LOWERING_H_ diff --git a/deps/v8/src/compiler/scheduler.cc b/deps/v8/src/compiler/scheduler.cc index fdfa16052b..07a716bfa7 100644 --- a/deps/v8/src/compiler/scheduler.cc +++ b/deps/v8/src/compiler/scheduler.cc @@ -105,15 +105,8 @@ Scheduler::Placement Scheduler::InitializePlacement(Node* node) { data->placement_ = (p == kFixed ? kFixed : kCoupled); break; } -#define DEFINE_CONTROL_CASE(V) case IrOpcode::k##V: - CONTROL_OP_LIST(DEFINE_CONTROL_CASE) -#undef DEFINE_CONTROL_CASE - { - // Control nodes that were not control-reachable from end may float. - data->placement_ = kSchedulable; - break; - } default: + // Control nodes that were not control-reachable from end may float. data->placement_ = kSchedulable; break; } @@ -172,31 +165,32 @@ void Scheduler::UpdatePlacement(Node* node, Placement placement) { // Reduce the use count of the node's inputs to potentially make them // schedulable. If all the uses of a node have been scheduled, then the node // itself can be scheduled. + base::Optional<int> coupled_control_edge = GetCoupledControlEdge(node); for (Edge const edge : node->input_edges()) { - DecrementUnscheduledUseCount(edge.to(), edge.index(), edge.from()); + DCHECK_EQ(node, edge.from()); + if (edge.index() != coupled_control_edge) { + DecrementUnscheduledUseCount(edge.to(), node); + } } data->placement_ = placement; } - -bool Scheduler::IsCoupledControlEdge(Node* node, int index) { - return GetPlacement(node) == kCoupled && - NodeProperties::FirstControlIndex(node) == index; +base::Optional<int> Scheduler::GetCoupledControlEdge(Node* node) { + if (GetPlacement(node) == kCoupled) { + return NodeProperties::FirstControlIndex(node); + } + return {}; } - -void Scheduler::IncrementUnscheduledUseCount(Node* node, int index, - Node* from) { - // Make sure that control edges from coupled nodes are not counted. - if (IsCoupledControlEdge(from, index)) return; - +void Scheduler::IncrementUnscheduledUseCount(Node* node, Node* from) { // Tracking use counts for fixed nodes is useless. if (GetPlacement(node) == kFixed) return; // Use count for coupled nodes is summed up on their control. if (GetPlacement(node) == kCoupled) { - Node* control = NodeProperties::GetControlInput(node); - return IncrementUnscheduledUseCount(control, index, from); + node = NodeProperties::GetControlInput(node); + DCHECK_NE(GetPlacement(node), Placement::kFixed); + DCHECK_NE(GetPlacement(node), Placement::kCoupled); } ++(GetData(node)->unscheduled_count_); @@ -207,19 +201,15 @@ void Scheduler::IncrementUnscheduledUseCount(Node* node, int index, } } - -void Scheduler::DecrementUnscheduledUseCount(Node* node, int index, - Node* from) { - // Make sure that control edges from coupled nodes are not counted. - if (IsCoupledControlEdge(from, index)) return; - +void Scheduler::DecrementUnscheduledUseCount(Node* node, Node* from) { // Tracking use counts for fixed nodes is useless. if (GetPlacement(node) == kFixed) return; // Use count for coupled nodes is summed up on their control. if (GetPlacement(node) == kCoupled) { - Node* control = NodeProperties::GetControlInput(node); - return DecrementUnscheduledUseCount(control, index, from); + node = NodeProperties::GetControlInput(node); + DCHECK_NE(GetPlacement(node), Placement::kFixed); + DCHECK_NE(GetPlacement(node), Placement::kCoupled); } DCHECK_LT(0, GetData(node)->unscheduled_count_); @@ -235,7 +225,6 @@ void Scheduler::DecrementUnscheduledUseCount(Node* node, int index, } } - // ----------------------------------------------------------------------------- // Phase 1: Build control-flow graph. @@ -738,6 +727,8 @@ class SpecialRPONumberer : public ZoneObject { return empty_; } + bool HasLoopBlocks() const { return loops_.size() != 0; } + private: using Backedge = std::pair<BasicBlock*, size_t>; @@ -1221,10 +1212,26 @@ void Scheduler::GenerateDominatorTree() { class PrepareUsesVisitor { public: - explicit PrepareUsesVisitor(Scheduler* scheduler) - : scheduler_(scheduler), schedule_(scheduler->schedule_) {} + explicit PrepareUsesVisitor(Scheduler* scheduler, Graph* graph, Zone* zone) + : scheduler_(scheduler), + schedule_(scheduler->schedule_), + graph_(graph), + visited_(graph_->NodeCount(), false, zone), + stack_(zone) {} + + void Run() { + InitializePlacement(graph_->end()); + while (!stack_.empty()) { + Node* node = stack_.top(); + stack_.pop(); + VisitInputs(node); + } + } - void Pre(Node* node) { + private: + void InitializePlacement(Node* node) { + TRACE("Pre #%d:%s\n", node->id(), node->op()->mnemonic()); + DCHECK(!Visited(node)); if (scheduler_->InitializePlacement(node) == Scheduler::kFixed) { // Fixed nodes are always roots for schedule late. scheduler_->schedule_root_nodes_.push_back(node); @@ -1241,21 +1248,37 @@ class PrepareUsesVisitor { schedule_->AddNode(block, node); } } + stack_.push(node); + visited_[node->id()] = true; } - void PostEdge(Node* from, int index, Node* to) { - // If the edge is from an unscheduled node, then tally it in the use count - // for all of its inputs. The same criterion will be used in ScheduleLate - // for decrementing use counts. - if (!schedule_->IsScheduled(from)) { - DCHECK_NE(Scheduler::kFixed, scheduler_->GetPlacement(from)); - scheduler_->IncrementUnscheduledUseCount(to, index, from); + void VisitInputs(Node* node) { + DCHECK_NE(scheduler_->GetPlacement(node), Scheduler::kUnknown); + bool is_scheduled = schedule_->IsScheduled(node); + base::Optional<int> coupled_control_edge = + scheduler_->GetCoupledControlEdge(node); + for (auto edge : node->input_edges()) { + Node* to = edge.to(); + DCHECK_EQ(node, edge.from()); + if (!Visited(to)) { + InitializePlacement(to); + } + TRACE("PostEdge #%d:%s->#%d:%s\n", node->id(), node->op()->mnemonic(), + to->id(), to->op()->mnemonic()); + DCHECK_NE(scheduler_->GetPlacement(to), Scheduler::kUnknown); + if (!is_scheduled && edge.index() != coupled_control_edge) { + scheduler_->IncrementUnscheduledUseCount(to, node); + } } } - private: + bool Visited(Node* node) { return visited_[node->id()]; } + Scheduler* scheduler_; Schedule* schedule_; + Graph* graph_; + BoolVector visited_; + ZoneStack<Node*> stack_; }; @@ -1264,28 +1287,8 @@ void Scheduler::PrepareUses() { // Count the uses of every node, which is used to ensure that all of a // node's uses are scheduled before the node itself. - PrepareUsesVisitor prepare_uses(this); - - // TODO(turbofan): simplify the careful pre/post ordering here. - BoolVector visited(graph_->NodeCount(), false, zone_); - ZoneStack<Node::InputEdges::iterator> stack(zone_); - Node* node = graph_->end(); - prepare_uses.Pre(node); - visited[node->id()] = true; - stack.push(node->input_edges().begin()); - while (!stack.empty()) { - tick_counter_->TickAndMaybeEnterSafepoint(); - Edge edge = *stack.top(); - Node* node = edge.to(); - if (visited[node->id()]) { - prepare_uses.PostEdge(edge.from(), edge.index(), edge.to()); - if (++stack.top() == edge.from()->input_edges().end()) stack.pop(); - } else { - prepare_uses.Pre(node); - visited[node->id()] = true; - if (node->InputCount() > 0) stack.push(node->input_edges().begin()); - } - } + PrepareUsesVisitor prepare_uses(this, graph_, zone_); + prepare_uses.Run(); } @@ -1302,11 +1305,12 @@ class ScheduleEarlyNodeVisitor { void Run(NodeVector* roots) { for (Node* const root : *roots) { queue_.push(root); - while (!queue_.empty()) { - scheduler_->tick_counter_->TickAndMaybeEnterSafepoint(); - VisitNode(queue_.front()); - queue_.pop(); - } + } + + while (!queue_.empty()) { + scheduler_->tick_counter_->TickAndMaybeEnterSafepoint(); + VisitNode(queue_.front()); + queue_.pop(); } } @@ -1380,6 +1384,11 @@ class ScheduleEarlyNodeVisitor { void Scheduler::ScheduleEarly() { + if (!special_rpo_->HasLoopBlocks()) { + TRACE("--- NO LOOPS SO SKIPPING SCHEDULE EARLY --------------------\n"); + return; + } + TRACE("--- SCHEDULE EARLY -----------------------------------------\n"); if (FLAG_trace_turbo_scheduler) { TRACE("roots: "); @@ -1457,6 +1466,7 @@ class ScheduleLateNodeVisitor { // The schedule early block dominates the schedule late block. BasicBlock* min_block = scheduler_->GetData(node)->minimum_block_; DCHECK_EQ(min_block, BasicBlock::GetCommonDominator(block, min_block)); + TRACE( "Schedule late of #%d:%s is id:%d at loop depth %d, minimum = id:%d\n", node->id(), node->op()->mnemonic(), block->id().ToInt(), @@ -1468,6 +1478,7 @@ class ScheduleLateNodeVisitor { BasicBlock* hoist_block = GetHoistBlock(block); if (hoist_block && hoist_block->dominator_depth() >= min_block->dominator_depth()) { + DCHECK(scheduler_->special_rpo_->HasLoopBlocks()); do { TRACE(" hoisting #%d:%s to block id:%d\n", node->id(), node->op()->mnemonic(), hoist_block->id().ToInt()); @@ -1597,6 +1608,7 @@ class ScheduleLateNodeVisitor { } BasicBlock* GetHoistBlock(BasicBlock* block) { + if (!scheduler_->special_rpo_->HasLoopBlocks()) return nullptr; if (block->IsLoopHeader()) return block->dominator(); // We have to check to make sure that the {block} dominates all // of the outgoing blocks. If it doesn't, then there is a path @@ -1717,9 +1729,13 @@ class ScheduleLateNodeVisitor { Node* CloneNode(Node* node) { int const input_count = node->InputCount(); + base::Optional<int> coupled_control_edge = + scheduler_->GetCoupledControlEdge(node); for (int index = 0; index < input_count; ++index) { - Node* const input = node->InputAt(index); - scheduler_->IncrementUnscheduledUseCount(input, index, node); + if (index != coupled_control_edge) { + Node* const input = node->InputAt(index); + scheduler_->IncrementUnscheduledUseCount(input, node); + } } Node* const copy = scheduler_->graph_->CloneNode(node); TRACE(("clone #%d:%s -> #%d\n"), node->id(), node->op()->mnemonic(), diff --git a/deps/v8/src/compiler/scheduler.h b/deps/v8/src/compiler/scheduler.h index d8934ec157..9d9fd6aed0 100644 --- a/deps/v8/src/compiler/scheduler.h +++ b/deps/v8/src/compiler/scheduler.h @@ -103,9 +103,10 @@ class V8_EXPORT_PRIVATE Scheduler { void UpdatePlacement(Node* node, Placement placement); bool IsLive(Node* node); - inline bool IsCoupledControlEdge(Node* node, int index); - void IncrementUnscheduledUseCount(Node* node, int index, Node* from); - void DecrementUnscheduledUseCount(Node* node, int index, Node* from); + // If the node is coupled, returns the coupled control edge index. + inline base::Optional<int> GetCoupledControlEdge(Node* node); + void IncrementUnscheduledUseCount(Node* node, Node* from); + void DecrementUnscheduledUseCount(Node* node, Node* from); static void PropagateImmediateDominators(BasicBlock* block); diff --git a/deps/v8/src/compiler/select-lowering.cc b/deps/v8/src/compiler/select-lowering.cc index 590df6ae1f..e346e9171d 100644 --- a/deps/v8/src/compiler/select-lowering.cc +++ b/deps/v8/src/compiler/select-lowering.cc @@ -34,7 +34,11 @@ Reduction SelectLowering::LowerSelect(Node* node) { Node* vtrue = node->InputAt(1); Node* vfalse = node->InputAt(2); - gasm()->InitializeEffectControl(start(), start()); + bool reset_gasm = false; + if (gasm()->control() == nullptr) { + gasm()->InitializeEffectControl(start(), start()); + reset_gasm = true; + } auto done = __ MakeLabel(p.representation()); @@ -42,6 +46,10 @@ Reduction SelectLowering::LowerSelect(Node* node) { __ Goto(&done, vfalse); __ Bind(&done); + if (reset_gasm) { + gasm()->Reset(nullptr); + } + return Changed(done.PhiAt(0)); } diff --git a/deps/v8/src/compiler/serializer-for-background-compilation.cc b/deps/v8/src/compiler/serializer-for-background-compilation.cc index ad6879a02d..893d12f1e9 100644 --- a/deps/v8/src/compiler/serializer-for-background-compilation.cc +++ b/deps/v8/src/compiler/serializer-for-background-compilation.cc @@ -21,6 +21,7 @@ #include "src/objects/js-regexp-inl.h" #include "src/objects/literal-objects-inl.h" #include "src/objects/shared-function-info-inl.h" +#include "src/objects/template-objects-inl.h" #include "src/zone/zone-containers.h" #include "src/zone/zone.h" @@ -1071,8 +1072,9 @@ SerializerForBackgroundCompilation::SerializerForBackgroundCompilation( CompilationSubject(closure, broker_->isolate(), zone()))), arguments_(zone()) { closure_hints_.AddConstant(closure, zone(), broker_); - JSFunctionRef(broker, closure).Serialize(); - JSFunctionRef(broker, closure).SerializeCodeAndFeedback(); + JSFunctionRef closure_ref = MakeRef(broker, closure); + closure_ref.Serialize(); + closure_ref.SerializeCodeAndFeedback(); TRACE_BROKER(broker_, "Hints for <closure>: " << closure_hints_); TRACE_BROKER(broker_, "Initial environment:\n" << *environment_); @@ -1099,8 +1101,9 @@ SerializerForBackgroundCompilation::SerializerForBackgroundCompilation( Handle<JSFunction> closure; if (function.closure().ToHandle(&closure)) { closure_hints_.AddConstant(closure, zone(), broker); - JSFunctionRef(broker, closure).Serialize(); - JSFunctionRef(broker, closure).SerializeCodeAndFeedback(); + JSFunctionRef closure_ref = MakeRef(broker, closure); + closure_ref.Serialize(); + closure_ref.SerializeCodeAndFeedback(); } else { closure_hints_.AddVirtualClosure(function.virtual_closure(), zone(), broker); @@ -1145,8 +1148,8 @@ Hints SerializerForBackgroundCompilation::Run() { TRACE_BROKER_MEMORY(broker(), "[serializer start] Broker zone usage: " << broker()->zone()->allocation_size()); - SharedFunctionInfoRef shared(broker(), function().shared()); - FeedbackVectorRef feedback_vector_ref(broker(), feedback_vector()); + SharedFunctionInfoRef shared = MakeRef(broker(), function().shared()); + FeedbackVectorRef feedback_vector_ref = MakeRef(broker(), feedback_vector()); if (!broker()->ShouldBeSerializedForCompilation(shared, feedback_vector_ref, arguments_)) { TRACE_BROKER(broker(), @@ -1342,7 +1345,7 @@ void SerializerForBackgroundCompilation::VisitGetIterator( FeedbackSlot call_slot = iterator->GetSlotOperand(2); Handle<Name> name = broker()->isolate()->factory()->iterator_symbol(); - ProcessNamedPropertyAccess(receiver, NameRef(broker(), name), load_slot, + ProcessNamedPropertyAccess(receiver, MakeRef(broker(), name), load_slot, AccessMode::kLoad); if (environment()->IsDead()) return; @@ -1360,10 +1363,10 @@ void SerializerForBackgroundCompilation::VisitGetSuperConstructor( for (auto constant : environment()->accumulator_hints().constants()) { // For JSNativeContextSpecialization::ReduceJSGetSuperConstructor. if (!constant->IsJSFunction()) continue; - MapRef map(broker(), - handle(HeapObject::cast(*constant).map(), broker()->isolate())); + MapRef map = MakeRef(broker(), handle(HeapObject::cast(*constant).map(), + broker()->isolate())); map.SerializePrototype(); - ObjectRef proto = map.prototype(); + ObjectRef proto = map.prototype().value(); if (proto.IsHeapObject() && proto.AsHeapObject().map().is_constructor()) { result_hints.AddConstant(proto.object(), zone(), broker()); } @@ -1373,8 +1376,9 @@ void SerializerForBackgroundCompilation::VisitGetSuperConstructor( void SerializerForBackgroundCompilation::VisitGetTemplateObject( BytecodeArrayIterator* iterator) { - TemplateObjectDescriptionRef description( - broker(), iterator->GetConstantForIndexOperand(0, broker()->isolate())); + MakeRef(broker(), + Handle<TemplateObjectDescription>::cast( + iterator->GetConstantForIndexOperand(0, broker()->isolate()))); FeedbackSlot slot = iterator->GetSlotOperand(1); FeedbackSource source(feedback_vector(), slot); @@ -1511,12 +1515,12 @@ void SerializerForBackgroundCompilation::VisitInvokeIntrinsic( case Runtime::kInlineGetImportMetaObject: { Hints const& context_hints = environment()->current_context_hints(); for (auto x : context_hints.constants()) { - ContextRef(broker(), x) + MakeRef(broker(), Handle<Context>::cast(x)) .GetModule(SerializationPolicy::kSerializeIfNeeded) .Serialize(); } for (auto x : context_hints.virtual_contexts()) { - ContextRef(broker(), x.context) + MakeRef(broker(), Handle<Context>::cast(x.context)) .GetModule(SerializationPolicy::kSerializeIfNeeded) .Serialize(); } @@ -1535,7 +1539,7 @@ void SerializerForBackgroundCompilation::VisitLdaConstant( iterator->GetConstantForIndexOperand(0, broker()->isolate()); // TODO(v8:7790): FixedArrays still need to be serialized until they are // moved to kNeverSerialized. - if (!FLAG_turbo_direct_heap_access || constant->IsFixedArray()) { + if (!broker()->is_concurrent_inlining() || constant->IsFixedArray()) { ObjectRef(broker(), constant); } environment()->accumulator_hints() = Hints::SingleConstant(constant, zone()); @@ -1579,7 +1583,7 @@ void SerializerForBackgroundCompilation::ProcessContextAccess( for (auto x : context_hints.constants()) { if (x->IsContext()) { // Walk this context to the given depth and serialize the slot found. - ContextRef context_ref(broker(), x); + ContextRef context_ref = MakeRef(broker(), Handle<Context>::cast(x)); size_t remaining_depth = depth; context_ref = context_ref.previous( &remaining_depth, SerializationPolicy::kSerializeIfNeeded); @@ -1590,7 +1594,8 @@ void SerializerForBackgroundCompilation::ProcessContextAccess( } for (auto x : context_hints.virtual_contexts()) { if (x.distance <= static_cast<unsigned int>(depth)) { - ContextRef context_ref(broker(), x.context); + ContextRef context_ref = + MakeRef(broker(), Handle<Context>::cast(x.context)); size_t remaining_depth = depth - x.distance; context_ref = context_ref.previous( &remaining_depth, SerializationPolicy::kSerializeIfNeeded); @@ -1722,7 +1727,7 @@ void SerializerForBackgroundCompilation::VisitCreateRegExpLiteral( BytecodeArrayIterator* iterator) { Handle<String> constant_pattern = Handle<String>::cast( iterator->GetConstantForIndexOperand(0, broker()->isolate())); - StringRef description(broker(), constant_pattern); + MakeRef(broker(), constant_pattern); FeedbackSlot slot = iterator->GetSlotOperand(1); FeedbackSource source(feedback_vector(), slot); broker()->ProcessFeedbackForRegExpLiteral(source); @@ -1734,8 +1739,7 @@ void SerializerForBackgroundCompilation::VisitCreateArrayLiteral( Handle<ArrayBoilerplateDescription> array_boilerplate_description = Handle<ArrayBoilerplateDescription>::cast( iterator->GetConstantForIndexOperand(0, broker()->isolate())); - ArrayBoilerplateDescriptionRef description(broker(), - array_boilerplate_description); + MakeRef(broker(), array_boilerplate_description); FeedbackSlot slot = iterator->GetSlotOperand(1); FeedbackSource source(feedback_vector(), slot); broker()->ProcessFeedbackForArrayOrObjectLiteral(source); @@ -1755,7 +1759,7 @@ void SerializerForBackgroundCompilation::VisitCreateObjectLiteral( Handle<ObjectBoilerplateDescription> constant_properties = Handle<ObjectBoilerplateDescription>::cast( iterator->GetConstantForIndexOperand(0, broker()->isolate())); - ObjectBoilerplateDescriptionRef description(broker(), constant_properties); + MakeRef(broker(), constant_properties); FeedbackSlot slot = iterator->GetSlotOperand(1); FeedbackSource source(feedback_vector(), slot); broker()->ProcessFeedbackForArrayOrObjectLiteral(source); @@ -1804,7 +1808,7 @@ void SerializerForBackgroundCompilation::ProcessCreateContext( Handle<ScopeInfo> scope_info = Handle<ScopeInfo>::cast(iterator->GetConstantForIndexOperand( scopeinfo_operand_index, broker()->isolate())); - ScopeInfoRef scope_info_ref(broker(), scope_info); + ScopeInfoRef scope_info_ref = MakeRef(broker(), scope_info); scope_info_ref.SerializeScopeInfoChain(); Hints const& current_context_hints = environment()->current_context_hints(); @@ -1836,9 +1840,9 @@ void SerializerForBackgroundCompilation::VisitCreateClosure( iterator->GetConstantForIndexOperand(0, broker()->isolate())); Handle<FeedbackCell> feedback_cell = feedback_vector()->GetClosureFeedbackCell(iterator->GetIndexOperand(1)); - FeedbackCellRef feedback_cell_ref(broker(), feedback_cell); + MakeRef(broker(), feedback_cell); Handle<Object> cell_value(feedback_cell->value(), broker()->isolate()); - ObjectRef cell_value_ref(broker(), cell_value); + MakeRef(broker(), cell_value); Hints result_hints; if (cell_value->IsFeedbackVector()) { @@ -2109,8 +2113,8 @@ void SerializerForBackgroundCompilation::ProcessCalleeForCallOrConstruct( const HintsVector* actual_arguments = &arguments; HintsVector expanded_arguments(zone()); if (callee->IsJSBoundFunction()) { - JSBoundFunctionRef bound_function(broker(), - Handle<JSBoundFunction>::cast(callee)); + JSBoundFunctionRef bound_function = + MakeRef(broker(), Handle<JSBoundFunction>::cast(callee)); if (!bound_function.Serialize()) return; callee = UnrollBoundFunction(bound_function, broker(), arguments, &expanded_arguments, zone()) @@ -2119,7 +2123,7 @@ void SerializerForBackgroundCompilation::ProcessCalleeForCallOrConstruct( } if (!callee->IsJSFunction()) return; - JSFunctionRef function(broker(), Handle<JSFunction>::cast(callee)); + JSFunctionRef function = MakeRef(broker(), Handle<JSFunction>::cast(callee)); function.Serialize(); Callee new_callee(function.object()); ProcessCalleeForCallOrConstruct(new_callee, new_target, *actual_arguments, @@ -2266,13 +2270,13 @@ void SerializerForBackgroundCompilation::ProcessApiCall( Builtins::kCallFunctionTemplate_CheckAccessAndCompatibleReceiver}) { ObjectRef(broker(), broker()->isolate()->builtins()->builtin_handle(b)); } - FunctionTemplateInfoRef target_template_info( - broker(), - broker()->CanonicalPersistentHandle(target->function_data(kAcquireLoad))); + FunctionTemplateInfoRef target_template_info = + MakeRef(broker(), + FunctionTemplateInfo::cast(target->function_data(kAcquireLoad))); if (!target_template_info.has_call_code()) return; target_template_info.SerializeCallCode(); - SharedFunctionInfoRef target_ref(broker(), target); + SharedFunctionInfoRef target_ref = MakeRef(broker(), target); target_ref.SerializeFunctionTemplateInfo(); if (target_template_info.accept_any_receiver() && @@ -2308,7 +2312,7 @@ void SerializerForBackgroundCompilation::ProcessApiCall( void SerializerForBackgroundCompilation::ProcessReceiverMapForApiCall( FunctionTemplateInfoRef target, Handle<Map> receiver) { if (!receiver->is_access_check_needed()) { - MapRef receiver_map(broker(), receiver); + MapRef receiver_map = MakeRef(broker(), receiver); TRACE_BROKER(broker(), "Serializing holder for target: " << target); target.LookupHolderOfExpectedType(receiver_map, SerializationPolicy::kSerializeIfNeeded); @@ -2356,10 +2360,10 @@ void SerializerForBackgroundCompilation::ProcessBuiltinCall( if (arguments.size() >= 1) { ProcessMapHintsForPromises(arguments[0]); } - SharedFunctionInfoRef( + MakeRef( broker(), broker()->isolate()->factory()->promise_catch_finally_shared_fun()); - SharedFunctionInfoRef( + MakeRef( broker(), broker()->isolate()->factory()->promise_then_finally_shared_fun()); } @@ -2496,16 +2500,14 @@ void SerializerForBackgroundCompilation::ProcessBuiltinCall( kMissingArgumentsAreUnknown, result_hints); } } - SharedFunctionInfoRef( - broker(), broker() - ->isolate() - ->factory() - ->promise_capability_default_reject_shared_fun()); - SharedFunctionInfoRef( - broker(), broker() - ->isolate() - ->factory() - ->promise_capability_default_resolve_shared_fun()); + MakeRef(broker(), broker() + ->isolate() + ->factory() + ->promise_capability_default_reject_shared_fun()); + MakeRef(broker(), broker() + ->isolate() + ->factory() + ->promise_capability_default_resolve_shared_fun()); break; case Builtins::kFunctionPrototypeCall: @@ -2529,7 +2531,7 @@ void SerializerForBackgroundCompilation::ProcessBuiltinCall( if (arguments.size() >= 2) { for (auto constant : arguments[1].constants()) { if (constant->IsJSFunction()) { - JSFunctionRef(broker(), constant).Serialize(); + MakeRef(broker(), Handle<JSFunction>::cast(constant)).Serialize(); } } } @@ -2596,7 +2598,8 @@ void SerializerForBackgroundCompilation::ProcessHintsForOrdinaryHasInstance( // For JSNativeContextSpecialization::ReduceJSOrdinaryHasInstance. if (constructor->IsHeapObject()) { ProcessConstantForOrdinaryHasInstance( - HeapObjectRef(broker(), constructor), &walk_prototypes); + MakeRef(broker(), Handle<HeapObject>::cast(constructor)), + &walk_prototypes); } } // For JSNativeContextSpecialization::ReduceJSHasInPrototypeChain. @@ -2606,10 +2609,10 @@ void SerializerForBackgroundCompilation::ProcessHintsForOrdinaryHasInstance( void SerializerForBackgroundCompilation::ProcessHintsForHasInPrototypeChain( Hints const& instance_hints) { auto processMap = [&](Handle<Map> map_handle) { - MapRef map(broker(), map_handle); + MapRef map = MakeRef(broker(), map_handle); while (map.IsJSObjectMap()) { map.SerializePrototype(); - map = map.prototype().map(); + map = map.prototype().value().map(); } }; @@ -2627,8 +2630,8 @@ void SerializerForBackgroundCompilation::ProcessHintsForPromiseResolve( Hints const& resolution_hints) { auto processMap = [&](Handle<Map> map) { broker()->GetPropertyAccessInfo( - MapRef(broker(), map), - NameRef(broker(), broker()->isolate()->factory()->then_string()), + MakeRef(broker(), map), + MakeRef(broker(), broker()->isolate()->factory()->then_string()), AccessMode::kLoad, dependencies(), SerializationPolicy::kSerializeIfNeeded); }; @@ -2650,25 +2653,25 @@ void SerializerForBackgroundCompilation::ProcessMapHintsForPromises( if (!constant->IsJSPromise()) continue; Handle<Map> map(Handle<HeapObject>::cast(constant)->map(), broker()->isolate()); - MapRef(broker(), map).SerializePrototype(); + MakeRef(broker(), map).SerializePrototype(); } for (auto map : receiver_hints.maps()) { if (!map->IsJSPromiseMap()) continue; - MapRef(broker(), map).SerializePrototype(); + MakeRef(broker(), map).SerializePrototype(); } } PropertyAccessInfo SerializerForBackgroundCompilation::ProcessMapForRegExpTest( MapRef map) { PropertyAccessInfo ai_exec = broker()->GetPropertyAccessInfo( - map, NameRef(broker(), broker()->isolate()->factory()->exec_string()), + map, MakeRef(broker(), broker()->isolate()->factory()->exec_string()), AccessMode::kLoad, dependencies(), SerializationPolicy::kSerializeIfNeeded); Handle<JSObject> holder; if (ai_exec.IsFastDataConstant() && ai_exec.holder().ToHandle(&holder)) { // The property is on the prototype chain. - JSObjectRef holder_ref(broker(), holder); + JSObjectRef holder_ref = MakeRef(broker(), holder); holder_ref.GetOwnFastDataProperty(ai_exec.field_representation(), ai_exec.field_index(), SerializationPolicy::kSerializeIfNeeded); @@ -2680,14 +2683,14 @@ void SerializerForBackgroundCompilation::ProcessHintsForRegExpTest( Hints const& regexp_hints) { for (auto hint : regexp_hints.constants()) { if (!hint->IsJSRegExp()) continue; - Handle<JSRegExp> regexp(Handle<JSRegExp>::cast(hint)); + Handle<JSObject> regexp(Handle<JSObject>::cast(hint)); Handle<Map> regexp_map(regexp->map(), broker()->isolate()); PropertyAccessInfo ai_exec = - ProcessMapForRegExpTest(MapRef(broker(), regexp_map)); + ProcessMapForRegExpTest(MakeRef(broker(), regexp_map)); Handle<JSObject> holder; if (ai_exec.IsFastDataConstant() && !ai_exec.holder().ToHandle(&holder)) { // The property is on the object itself. - JSObjectRef holder_ref(broker(), regexp); + JSObjectRef holder_ref = MakeRef(broker(), regexp); holder_ref.GetOwnFastDataProperty( ai_exec.field_representation(), ai_exec.field_index(), SerializationPolicy::kSerializeIfNeeded); @@ -2696,7 +2699,7 @@ void SerializerForBackgroundCompilation::ProcessHintsForRegExpTest( for (auto map : regexp_hints.maps()) { if (!map->IsJSRegExpMap()) continue; - ProcessMapForRegExpTest(MapRef(broker(), map)); + ProcessMapForRegExpTest(MakeRef(broker(), map)); } } @@ -2718,14 +2721,15 @@ void SerializerForBackgroundCompilation::ProcessHintsForFunctionBind( Hints const& receiver_hints) { for (auto constant : receiver_hints.constants()) { if (!constant->IsJSFunction()) continue; - JSFunctionRef function(broker(), constant); + JSFunctionRef function = + MakeRef(broker(), Handle<JSFunction>::cast(constant)); function.Serialize(); ProcessMapForFunctionBind(function.map()); } for (auto map : receiver_hints.maps()) { if (!map->IsJSFunctionMap()) continue; - MapRef map_ref(broker(), map); + MapRef map_ref = MakeRef(broker(), map); ProcessMapForFunctionBind(map_ref); } } @@ -2734,13 +2738,13 @@ void SerializerForBackgroundCompilation::ProcessHintsForObjectGetPrototype( Hints const& object_hints) { for (auto constant : object_hints.constants()) { if (!constant->IsHeapObject()) continue; - HeapObjectRef object(broker(), constant); + HeapObjectRef object = + MakeRef(broker(), Handle<HeapObject>::cast(constant)); object.map().SerializePrototype(); } for (auto map : object_hints.maps()) { - MapRef map_ref(broker(), map); - map_ref.SerializePrototype(); + MakeRef(broker(), map).SerializePrototype(); } } @@ -2850,7 +2854,7 @@ void SerializerForBackgroundCompilation::ProcessGlobalAccess(FeedbackSlot slot, void SerializerForBackgroundCompilation::VisitLdaGlobal( BytecodeArrayIterator* iterator) { - NameRef(broker(), + MakeRef(broker(), iterator->GetConstantForIndexOperand(0, broker()->isolate())); FeedbackSlot slot = iterator->GetSlotOperand(1); ProcessGlobalAccess(slot, true); @@ -2863,15 +2867,15 @@ void SerializerForBackgroundCompilation::VisitLdaGlobalInsideTypeof( void SerializerForBackgroundCompilation::VisitLdaLookupSlot( BytecodeArrayIterator* iterator) { - ObjectRef(broker(), - iterator->GetConstantForIndexOperand(0, broker()->isolate())); + MakeRef(broker(), + iterator->GetConstantForIndexOperand(0, broker()->isolate())); environment()->accumulator_hints() = Hints(); } void SerializerForBackgroundCompilation::VisitLdaLookupSlotInsideTypeof( BytecodeArrayIterator* iterator) { - ObjectRef(broker(), - iterator->GetConstantForIndexOperand(0, broker()->isolate())); + MakeRef(broker(), + iterator->GetConstantForIndexOperand(0, broker()->isolate())); environment()->accumulator_hints() = Hints(); } @@ -2883,7 +2887,7 @@ void SerializerForBackgroundCompilation::ProcessCheckContextExtensions( ProcessContextAccess(context_hints, Context::EXTENSION_INDEX, i, kSerializeSlot); } - SharedFunctionInfoRef shared(broker(), function().shared()); + SharedFunctionInfoRef shared = MakeRef(broker(), function().shared()); shared.SerializeScopeInfoChain(); } @@ -2906,7 +2910,7 @@ void SerializerForBackgroundCompilation::VisitLdaLookupGlobalSlotInsideTypeof( void SerializerForBackgroundCompilation::VisitStaGlobal( BytecodeArrayIterator* iterator) { - NameRef(broker(), + MakeRef(broker(), iterator->GetConstantForIndexOperand(0, broker()->isolate())); FeedbackSlot slot = iterator->GetSlotOperand(1); ProcessGlobalAccess(slot, false); @@ -2916,7 +2920,7 @@ void SerializerForBackgroundCompilation::ProcessLdaLookupContextSlot( BytecodeArrayIterator* iterator) { const int slot_index = iterator->GetIndexOperand(1); const int depth = iterator->GetUnsignedImmediateOperand(2); - NameRef(broker(), + MakeRef(broker(), iterator->GetConstantForIndexOperand(0, broker()->isolate())); ProcessCheckContextExtensions(depth); environment()->accumulator_hints() = Hints(); @@ -3016,7 +3020,8 @@ SerializerForBackgroundCompilation::ProcessMapForNamedPropertyAccess( access_info.IsDictionaryProtoAccessorConstant()) && !access_info.constant().is_null()) { if (access_info.constant()->IsJSFunction()) { - JSFunctionRef function(broker(), access_info.constant()); + JSFunctionRef function = + MakeRef(broker(), Handle<JSFunction>::cast(access_info.constant())); if (receiver_map.has_value()) { // For JSCallReducer and JSInlining(Heuristic). @@ -3033,9 +3038,8 @@ SerializerForBackgroundCompilation::ProcessMapForNamedPropertyAccess( // For JSCallReducer::ReduceCallApiFunction. Handle<SharedFunctionInfo> sfi = function.shared().object(); if (sfi->IsApiFunction()) { - FunctionTemplateInfoRef fti_ref( - broker(), - broker()->CanonicalPersistentHandle(sfi->get_api_func_data())); + FunctionTemplateInfoRef fti_ref = + MakeRef(broker(), sfi->get_api_func_data()); if (fti_ref.has_call_code()) { fti_ref.SerializeCallCode(); ProcessReceiverMapForApiCall(fti_ref, receiver_map->object()); @@ -3043,19 +3047,19 @@ SerializerForBackgroundCompilation::ProcessMapForNamedPropertyAccess( } } } else if (access_info.constant()->IsJSBoundFunction()) { - JSBoundFunctionRef function(broker(), access_info.constant()); - // For JSCallReducer::ReduceJSCall. + JSBoundFunctionRef function = MakeRef( + broker(), Handle<JSBoundFunction>::cast(access_info.constant())); function.Serialize(); } else { - FunctionTemplateInfoRef fti(broker(), broker()->CanonicalPersistentHandle( - access_info.constant())); + FunctionTemplateInfoRef fti = MakeRef( + broker(), FunctionTemplateInfo::cast(*access_info.constant())); if (fti.has_call_code()) fti.SerializeCallCode(); } } else if (access_info.IsModuleExport()) { // For JSNativeContextSpecialization::BuildPropertyLoad DCHECK(!access_info.constant().is_null()); - CellRef(broker(), access_info.constant()); + MakeRef(broker(), Handle<Cell>::cast(access_info.constant())); } switch (access_mode) { @@ -3067,7 +3071,7 @@ SerializerForBackgroundCompilation::ProcessMapForNamedPropertyAccess( base::Optional<JSObjectRef> holder; Handle<JSObject> prototype; if (access_info.holder().ToHandle(&prototype)) { - holder = JSObjectRef(broker(), prototype); + holder = MakeRef(broker(), prototype); } else { CHECK_IMPLIES(concrete_receiver.has_value(), concrete_receiver->map().equals(*receiver_map)); @@ -3095,7 +3099,7 @@ SerializerForBackgroundCompilation::ProcessMapForNamedPropertyAccess( if (access_info.IsDataField() || access_info.IsFastDataConstant()) { Handle<Map> transition_map; if (access_info.transition_map().ToHandle(&transition_map)) { - MapRef map_ref(broker(), transition_map); + MapRef map_ref = MakeRef(broker(), transition_map); TRACE_BROKER(broker(), "Propagating transition map " << map_ref << " to receiver hints."); receiver->AddMap(transition_map, zone(), broker_, false); @@ -3225,7 +3229,7 @@ void SerializerForBackgroundCompilation::ProcessNamedAccess( Hints* receiver, NamedAccessFeedback const& feedback, AccessMode access_mode, Hints* result_hints) { for (Handle<Map> map : feedback.maps()) { - MapRef map_ref(broker(), map); + MapRef map_ref = MakeRef(broker(), map); TRACE_BROKER(broker(), "Propagating feedback map " << map_ref << " to receiver hints."); receiver->AddMap(map, zone(), broker_, false); @@ -3233,7 +3237,7 @@ void SerializerForBackgroundCompilation::ProcessNamedAccess( for (Handle<Map> map : GetRelevantReceiverMaps(broker()->isolate(), receiver->maps())) { - MapRef map_ref(broker(), map); + MapRef map_ref = MakeRef(broker(), map); ProcessMapForNamedPropertyAccess(receiver, map_ref, map_ref, feedback.name(), access_mode, base::nullopt, result_hints); @@ -3249,7 +3253,7 @@ void SerializerForBackgroundCompilation::ProcessNamedAccess( } // For JSNativeContextSpecialization::ReduceJSLoadNamed. if (access_mode == AccessMode::kLoad && object.IsJSFunction() && - feedback.name().equals(ObjectRef( + feedback.name().equals(MakeRef( broker(), broker()->isolate()->factory()->prototype_string()))) { JSFunctionRef function = object.AsJSFunction(); function.Serialize(); @@ -3269,9 +3273,9 @@ void SerializerForBackgroundCompilation::ProcessNamedSuperAccess( MapHandles receiver_maps = GetRelevantReceiverMaps(broker()->isolate(), receiver->maps()); for (Handle<Map> receiver_map : receiver_maps) { - MapRef receiver_map_ref(broker(), receiver_map); + MapRef receiver_map_ref = MakeRef(broker(), receiver_map); for (Handle<Map> feedback_map : feedback.maps()) { - MapRef feedback_map_ref(broker(), feedback_map); + MapRef feedback_map_ref = MakeRef(broker(), feedback_map); ProcessMapForNamedPropertyAccess( receiver, receiver_map_ref, feedback_map_ref, feedback.name(), access_mode, base::nullopt, result_hints); @@ -3279,7 +3283,7 @@ void SerializerForBackgroundCompilation::ProcessNamedSuperAccess( } if (receiver_maps.empty()) { for (Handle<Map> feedback_map : feedback.maps()) { - MapRef feedback_map_ref(broker(), feedback_map); + MapRef feedback_map_ref = MakeRef(broker(), feedback_map); ProcessMapForNamedPropertyAccess( receiver, base::nullopt, feedback_map_ref, feedback.name(), access_mode, base::nullopt, result_hints); @@ -3292,7 +3296,7 @@ void SerializerForBackgroundCompilation::ProcessElementAccess( ElementAccessFeedback const& feedback, AccessMode access_mode) { for (auto const& group : feedback.transition_groups()) { for (Handle<Map> map_handle : group) { - MapRef map(broker(), map_handle); + MapRef map = MakeRef(broker(), map_handle); switch (access_mode) { case AccessMode::kHas: case AccessMode::kLoad: @@ -3352,7 +3356,7 @@ void SerializerForBackgroundCompilation::ProcessElementAccess( // For JSNativeContextSpecialization::InferRootMap for (Handle<Map> map : receiver.maps()) { - MapRef map_ref(broker(), map); + MapRef map_ref = MakeRef(broker(), map); map_ref.SerializeRootMap(); } } @@ -3360,8 +3364,9 @@ void SerializerForBackgroundCompilation::ProcessElementAccess( void SerializerForBackgroundCompilation::VisitLdaNamedProperty( BytecodeArrayIterator* iterator) { Hints* receiver = ®ister_hints(iterator->GetRegisterOperand(0)); - NameRef name(broker(), - iterator->GetConstantForIndexOperand(1, broker()->isolate())); + NameRef name = + MakeRef(broker(), Handle<Name>::cast(iterator->GetConstantForIndexOperand( + 1, broker()->isolate()))); FeedbackSlot slot = iterator->GetSlotOperand(2); ProcessNamedPropertyAccess(receiver, name, slot, AccessMode::kLoad); } @@ -3369,8 +3374,9 @@ void SerializerForBackgroundCompilation::VisitLdaNamedProperty( void SerializerForBackgroundCompilation::VisitLdaNamedPropertyFromSuper( BytecodeArrayIterator* iterator) { Hints* receiver = ®ister_hints(iterator->GetRegisterOperand(0)); - NameRef name(broker(), - iterator->GetConstantForIndexOperand(1, broker()->isolate())); + NameRef name = + MakeRef(broker(), Handle<Name>::cast(iterator->GetConstantForIndexOperand( + 1, broker()->isolate()))); FeedbackSlot slot = iterator->GetSlotOperand(2); ProcessNamedSuperPropertyAccess(receiver, name, slot, AccessMode::kLoad); } @@ -3379,30 +3385,32 @@ void SerializerForBackgroundCompilation::VisitLdaNamedPropertyFromSuper( // bytecodes. void SerializerForBackgroundCompilation::VisitLdaNamedPropertyNoFeedback( BytecodeArrayIterator* iterator) { - NameRef(broker(), - iterator->GetConstantForIndexOperand(1, broker()->isolate())); + MakeRef(broker(), Handle<Name>::cast(iterator->GetConstantForIndexOperand( + 1, broker()->isolate()))); } void SerializerForBackgroundCompilation::VisitStaNamedProperty( BytecodeArrayIterator* iterator) { Hints* receiver = ®ister_hints(iterator->GetRegisterOperand(0)); - NameRef name(broker(), - iterator->GetConstantForIndexOperand(1, broker()->isolate())); + NameRef name = + MakeRef(broker(), Handle<Name>::cast(iterator->GetConstantForIndexOperand( + 1, broker()->isolate()))); FeedbackSlot slot = iterator->GetSlotOperand(2); ProcessNamedPropertyAccess(receiver, name, slot, AccessMode::kStore); } void SerializerForBackgroundCompilation::VisitStaNamedPropertyNoFeedback( BytecodeArrayIterator* iterator) { - NameRef(broker(), + MakeRef(broker(), iterator->GetConstantForIndexOperand(1, broker()->isolate())); } void SerializerForBackgroundCompilation::VisitStaNamedOwnProperty( BytecodeArrayIterator* iterator) { Hints* receiver = ®ister_hints(iterator->GetRegisterOperand(0)); - NameRef name(broker(), - iterator->GetConstantForIndexOperand(1, broker()->isolate())); + NameRef name = + MakeRef(broker(), Handle<Name>::cast(iterator->GetConstantForIndexOperand( + 1, broker()->isolate()))); FeedbackSlot slot = iterator->GetSlotOperand(2); ProcessNamedPropertyAccess(receiver, name, slot, AccessMode::kStoreInLiteral); } @@ -3440,7 +3448,7 @@ void SerializerForBackgroundCompilation::ProcessConstantForInstanceOf( PropertyAccessInfo access_info = broker()->GetPropertyAccessInfo( constructor_heap_object.map(), - NameRef(broker(), broker()->isolate()->factory()->has_instance_symbol()), + MakeRef(broker(), broker()->isolate()->factory()->has_instance_symbol()), AccessMode::kLoad, dependencies(), SerializationPolicy::kSerializeIfNeeded); @@ -3450,8 +3458,8 @@ void SerializerForBackgroundCompilation::ProcessConstantForInstanceOf( } else if (access_info.IsFastDataConstant()) { Handle<JSObject> holder; bool found_on_proto = access_info.holder().ToHandle(&holder); - JSObjectRef holder_ref = found_on_proto ? JSObjectRef(broker(), holder) - : constructor.AsJSObject(); + JSObjectRef holder_ref = + found_on_proto ? MakeRef(broker(), holder) : constructor.AsJSObject(); base::Optional<ObjectRef> constant = holder_ref.GetOwnFastDataProperty( access_info.field_representation(), access_info.field_index(), SerializationPolicy::kSerializeIfNeeded); diff --git a/deps/v8/src/compiler/simd-scalar-lowering.cc b/deps/v8/src/compiler/simd-scalar-lowering.cc deleted file mode 100644 index 7c96393c4c..0000000000 --- a/deps/v8/src/compiler/simd-scalar-lowering.cc +++ /dev/null @@ -1,2829 +0,0 @@ -// Copyright 2016 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "src/compiler/simd-scalar-lowering.h" - -#include "src/base/platform/wrappers.h" -#include "src/codegen/machine-type.h" -#include "src/common/globals.h" -#include "src/compiler/diamond.h" -#include "src/compiler/linkage.h" -#include "src/compiler/machine-operator.h" -#include "src/compiler/node-matchers.h" -#include "src/compiler/node-properties.h" -#include "src/compiler/node.h" -#include "src/compiler/wasm-compiler.h" - -namespace v8 { -namespace internal { -namespace compiler { - -namespace { -static const int kNumLanes64 = 2; -static const int kNumLanes32 = 4; -static const int kNumLanes16 = 8; -static const int kNumLanes8 = 16; -static const int32_t kMask16 = 0xFFFF; -static const int32_t kMask8 = 0xFF; -static const int32_t kShift16 = 16; -static const int32_t kShift8 = 24; -static const int32_t kShiftMask8 = 0x7; -static const int32_t kShiftMask16 = 0xF; -static const int32_t kShiftMask32 = 0x1F; -static const int32_t kShiftMask64 = 0x3F; - -// Shift values are taken modulo lane size. This helper calculates the mask -// required for different shift opcodes. -int GetMaskForShift(Node* node) { - switch (node->opcode()) { - case IrOpcode::kI8x16Shl: - case IrOpcode::kI8x16ShrS: - case IrOpcode::kI8x16ShrU: - return kShiftMask8; - case IrOpcode::kI16x8Shl: - case IrOpcode::kI16x8ShrS: - case IrOpcode::kI16x8ShrU: - return kShiftMask16; - case IrOpcode::kI32x4Shl: - case IrOpcode::kI32x4ShrS: - case IrOpcode::kI32x4ShrU: - return kShiftMask32; - case IrOpcode::kI64x2Shl: - case IrOpcode::kI64x2ShrS: - case IrOpcode::kI64x2ShrU: - return kShiftMask64; - default: - UNIMPLEMENTED(); - } -} -} // anonymous namespace - -SimdScalarLowering::SimdScalarLowering( - MachineGraph* mcgraph, SimplifiedOperatorBuilder* simplified, - Signature<MachineRepresentation>* signature) - : mcgraph_(mcgraph), - simplified_(simplified), - state_(mcgraph->graph(), 3), - stack_(mcgraph_->zone()), - replacements_(nullptr), - signature_(signature), - placeholder_(graph()->NewNode(common()->Dead())), - parameter_count_after_lowering_(-1) { - DCHECK_NOT_NULL(graph()); - DCHECK_NOT_NULL(graph()->end()); - replacements_ = zone()->NewArray<Replacement>(graph()->NodeCount()); - memset(static_cast<void*>(replacements_), 0, - sizeof(Replacement) * graph()->NodeCount()); -} - -void SimdScalarLowering::LowerGraph() { - stack_.push_back({graph()->end(), 0}); - state_.Set(graph()->end(), State::kOnStack); - replacements_[graph()->end()->id()].type = SimdType::kInt32x4; - - while (!stack_.empty()) { - NodeState& top = stack_.back(); - if (top.input_index == top.node->InputCount()) { - // All inputs of top have already been lowered, now lower top. - stack_.pop_back(); - state_.Set(top.node, State::kVisited); - LowerNode(top.node); - } else { - // Push the next input onto the stack. - Node* input = top.node->InputAt(top.input_index++); - if (state_.Get(input) == State::kUnvisited) { - SetLoweredType(input, top.node); - if (input->opcode() == IrOpcode::kPhi) { - // To break cycles with phi nodes we push phis on a separate stack so - // that they are processed after all other nodes. - PreparePhiReplacement(input); - stack_.push_front({input, 0}); - } else if (input->opcode() == IrOpcode::kEffectPhi || - input->opcode() == IrOpcode::kLoop) { - stack_.push_front({input, 0}); - } else { - stack_.push_back({input, 0}); - } - state_.Set(input, State::kOnStack); - } - } - } -} - -#define FOREACH_INT64X2_OPCODE(V) \ - V(I64x2Splat) \ - V(I64x2ExtractLane) \ - V(I64x2ReplaceLane) \ - V(I64x2Eq) \ - V(I64x2Ne) \ - V(I64x2Neg) \ - V(I64x2Shl) \ - V(I64x2ShrS) \ - V(I64x2ShrU) \ - V(I64x2Add) \ - V(I64x2Sub) \ - V(I64x2Mul) \ - V(I64x2ExtMulLowI32x4S) \ - V(I64x2ExtMulLowI32x4U) \ - V(I64x2ExtMulHighI32x4S) \ - V(I64x2ExtMulHighI32x4U) - -#define FOREACH_INT32X4_OPCODE(V) \ - V(I32x4Splat) \ - V(I32x4ExtractLane) \ - V(I32x4ReplaceLane) \ - V(I32x4SConvertF32x4) \ - V(I32x4UConvertF32x4) \ - V(I32x4SConvertI16x8Low) \ - V(I32x4SConvertI16x8High) \ - V(I32x4Neg) \ - V(I32x4Shl) \ - V(I32x4ShrS) \ - V(I32x4Add) \ - V(I32x4Sub) \ - V(I32x4Mul) \ - V(I32x4MinS) \ - V(I32x4MaxS) \ - V(I32x4ShrU) \ - V(I32x4MinU) \ - V(I32x4MaxU) \ - V(I32x4DotI16x8S) \ - V(I32x4Eq) \ - V(I32x4Ne) \ - V(I32x4LtS) \ - V(I32x4LtU) \ - V(I32x4GtS) \ - V(I32x4GtU) \ - V(I32x4LeS) \ - V(I32x4LeU) \ - V(I32x4GeS) \ - V(I32x4GeU) \ - V(I32x4UConvertI16x8Low) \ - V(I32x4UConvertI16x8High) \ - V(I32x4Abs) \ - V(S128And) \ - V(S128Or) \ - V(S128Xor) \ - V(S128Not) \ - V(S128AndNot) \ - V(S128Select) \ - V(I64x2AllTrue) \ - V(I32x4AllTrue) \ - V(I16x8AllTrue) \ - V(V128AnyTrue) \ - V(I8x16AllTrue) \ - V(I32x4BitMask) \ - V(I32x4ExtMulLowI16x8S) \ - V(I32x4ExtMulLowI16x8U) \ - V(I32x4ExtMulHighI16x8S) \ - V(I32x4ExtMulHighI16x8U) - -#define FOREACH_FLOAT64X2_OPCODE(V) \ - V(F64x2Splat) \ - V(F64x2ExtractLane) \ - V(F64x2ReplaceLane) \ - V(F64x2Abs) \ - V(F64x2Neg) \ - V(F64x2Sqrt) \ - V(F64x2Add) \ - V(F64x2Sub) \ - V(F64x2Mul) \ - V(F64x2Div) \ - V(F64x2Min) \ - V(F64x2Max) \ - V(F64x2Pmin) \ - V(F64x2Pmax) \ - V(F64x2Ceil) \ - V(F64x2Floor) \ - V(F64x2Trunc) \ - V(F64x2NearestInt) - -#define FOREACH_FLOAT32X4_OPCODE(V) \ - V(F32x4Splat) \ - V(F32x4ExtractLane) \ - V(F32x4ReplaceLane) \ - V(F32x4SConvertI32x4) \ - V(F32x4UConvertI32x4) \ - V(F32x4Abs) \ - V(F32x4Neg) \ - V(F32x4Sqrt) \ - V(F32x4RecipApprox) \ - V(F32x4RecipSqrtApprox) \ - V(F32x4Add) \ - V(F32x4Sub) \ - V(F32x4Mul) \ - V(F32x4Div) \ - V(F32x4Min) \ - V(F32x4Max) \ - V(F32x4Pmin) \ - V(F32x4Pmax) \ - V(F32x4Ceil) \ - V(F32x4Floor) \ - V(F32x4Trunc) \ - V(F32x4NearestInt) - -#define FOREACH_FLOAT64x2_TO_INT64x2OPCODE(V) \ - V(F64x2Eq) \ - V(F64x2Ne) \ - V(F64x2Lt) \ - V(F64x2Le) - -#define FOREACH_FLOAT32X4_TO_INT32X4OPCODE(V) \ - V(F32x4Eq) \ - V(F32x4Ne) \ - V(F32x4Lt) \ - V(F32x4Le) \ - V(F32x4Gt) \ - V(F32x4Ge) - -#define FOREACH_INT16X8_OPCODE(V) \ - V(I16x8Splat) \ - V(I16x8ExtractLaneU) \ - V(I16x8ExtractLaneS) \ - V(I16x8ReplaceLane) \ - V(I16x8SConvertI8x16Low) \ - V(I16x8SConvertI8x16High) \ - V(I16x8Neg) \ - V(I16x8Shl) \ - V(I16x8ShrS) \ - V(I16x8SConvertI32x4) \ - V(I16x8Add) \ - V(I16x8AddSatS) \ - V(I16x8Sub) \ - V(I16x8SubSatS) \ - V(I16x8Mul) \ - V(I16x8MinS) \ - V(I16x8MaxS) \ - V(I16x8UConvertI8x16Low) \ - V(I16x8UConvertI8x16High) \ - V(I16x8ShrU) \ - V(I16x8UConvertI32x4) \ - V(I16x8AddSatU) \ - V(I16x8SubSatU) \ - V(I16x8MinU) \ - V(I16x8MaxU) \ - V(I16x8Eq) \ - V(I16x8Ne) \ - V(I16x8LtS) \ - V(I16x8LtU) \ - V(I16x8GtS) \ - V(I16x8GtU) \ - V(I16x8LeS) \ - V(I16x8LeU) \ - V(I16x8GeS) \ - V(I16x8GeU) \ - V(I16x8RoundingAverageU) \ - V(I16x8Abs) \ - V(I16x8BitMask) \ - V(I16x8ExtMulLowI8x16S) \ - V(I16x8ExtMulLowI8x16U) \ - V(I16x8ExtMulHighI8x16S) \ - V(I16x8ExtMulHighI8x16U) - -#define FOREACH_INT8X16_OPCODE(V) \ - V(I8x16Splat) \ - V(I8x16ExtractLaneU) \ - V(I8x16ExtractLaneS) \ - V(I8x16ReplaceLane) \ - V(I8x16SConvertI16x8) \ - V(I8x16Neg) \ - V(I8x16Shl) \ - V(I8x16ShrS) \ - V(I8x16Add) \ - V(I8x16AddSatS) \ - V(I8x16Sub) \ - V(I8x16SubSatS) \ - V(I8x16MinS) \ - V(I8x16MaxS) \ - V(I8x16ShrU) \ - V(I8x16UConvertI16x8) \ - V(I8x16AddSatU) \ - V(I8x16SubSatU) \ - V(I8x16MinU) \ - V(I8x16MaxU) \ - V(I8x16Eq) \ - V(I8x16Ne) \ - V(I8x16LtS) \ - V(I8x16LtU) \ - V(I8x16GtS) \ - V(I8x16GtU) \ - V(I8x16LeS) \ - V(I8x16LeU) \ - V(I8x16GeS) \ - V(I8x16GeU) \ - V(I8x16Swizzle) \ - V(I8x16Shuffle) \ - V(I8x16RoundingAverageU) \ - V(I8x16Abs) \ - V(I8x16BitMask) - -MachineType SimdScalarLowering::MachineTypeFrom(SimdType simdType) { - switch (simdType) { - case SimdType::kFloat64x2: - return MachineType::Float64(); - case SimdType::kFloat32x4: - return MachineType::Float32(); - case SimdType::kInt64x2: - return MachineType::Int64(); - case SimdType::kInt32x4: - return MachineType::Int32(); - case SimdType::kInt16x8: - return MachineType::Int16(); - case SimdType::kInt8x16: - return MachineType::Int8(); - } - return MachineType::None(); -} - -void SimdScalarLowering::SetLoweredType(Node* node, Node* output) { - switch (node->opcode()) { -#define CASE_STMT(name) case IrOpcode::k##name: - FOREACH_FLOAT64X2_OPCODE(CASE_STMT) { - replacements_[node->id()].type = SimdType::kFloat64x2; - break; - } - FOREACH_INT64X2_OPCODE(CASE_STMT) { - replacements_[node->id()].type = SimdType::kInt64x2; - break; - } - FOREACH_INT32X4_OPCODE(CASE_STMT) - case IrOpcode::kReturn: - case IrOpcode::kParameter: - case IrOpcode::kPhi: - case IrOpcode::kCall: { - replacements_[node->id()].type = SimdType::kInt32x4; - break; - } - FOREACH_FLOAT32X4_OPCODE(CASE_STMT) { - replacements_[node->id()].type = SimdType::kFloat32x4; - break; - } - FOREACH_FLOAT32X4_TO_INT32X4OPCODE(CASE_STMT) { - replacements_[node->id()].type = SimdType::kInt32x4; - break; - } - FOREACH_FLOAT64x2_TO_INT64x2OPCODE(CASE_STMT) { - replacements_[node->id()].type = SimdType::kInt64x2; - break; - } - FOREACH_INT16X8_OPCODE(CASE_STMT) { - replacements_[node->id()].type = SimdType::kInt16x8; - break; - } - FOREACH_INT8X16_OPCODE(CASE_STMT) { - replacements_[node->id()].type = SimdType::kInt8x16; - break; - } - case IrOpcode::kLoadTransform: { - LoadTransformParameters params = LoadTransformParametersOf(node->op()); - switch (params.transformation) { - case LoadTransformation::kS128Load8Splat: - replacements_[node->id()].type = SimdType::kInt8x16; - break; - case LoadTransformation::kS128Load16Splat: - case LoadTransformation::kS128Load8x8S: - case LoadTransformation::kS128Load8x8U: - replacements_[node->id()].type = SimdType::kInt16x8; - break; - case LoadTransformation::kS128Load32Splat: - case LoadTransformation::kS128Load16x4S: - case LoadTransformation::kS128Load16x4U: - case LoadTransformation::kS128Load32Zero: - replacements_[node->id()].type = SimdType::kInt32x4; - break; - case LoadTransformation::kS128Load64Splat: - case LoadTransformation::kS128Load32x2S: - case LoadTransformation::kS128Load32x2U: - case LoadTransformation::kS128Load64Zero: - replacements_[node->id()].type = SimdType::kInt64x2; - break; - default: - UNIMPLEMENTED(); - } - break; - } - default: { - switch (output->opcode()) { - case IrOpcode::kF32x4SConvertI32x4: - case IrOpcode::kF32x4UConvertI32x4: - case IrOpcode::kI16x8SConvertI32x4: - case IrOpcode::kI16x8UConvertI32x4: { - replacements_[node->id()].type = SimdType::kInt32x4; - break; - } - case IrOpcode::kI8x16SConvertI16x8: - case IrOpcode::kI8x16UConvertI16x8: - case IrOpcode::kI32x4SConvertI16x8Low: - case IrOpcode::kI32x4SConvertI16x8High: - case IrOpcode::kI32x4UConvertI16x8Low: - case IrOpcode::kI32x4UConvertI16x8High: { - replacements_[node->id()].type = SimdType::kInt16x8; - break; - } - case IrOpcode::kI16x8SConvertI8x16Low: - case IrOpcode::kI16x8SConvertI8x16High: - case IrOpcode::kI16x8UConvertI8x16Low: - case IrOpcode::kI16x8UConvertI8x16High: { - replacements_[node->id()].type = SimdType::kInt8x16; - break; - } - FOREACH_FLOAT32X4_TO_INT32X4OPCODE(CASE_STMT) - case IrOpcode::kI32x4SConvertF32x4: - case IrOpcode::kI32x4UConvertF32x4: { - replacements_[node->id()].type = SimdType::kFloat32x4; - break; - } - case IrOpcode::kS128Select: { - replacements_[node->id()].type = SimdType::kInt32x4; - break; - } - default: { - replacements_[node->id()].type = replacements_[output->id()].type; - } - } - } -#undef CASE_STMT - } -} - -static int GetParameterIndexAfterLoweringSimd128( - Signature<MachineRepresentation>* signature, int old_index) { - // In function calls, the simd128 types are passed as 4 Int32 types. The - // parameters are typecast to the types as needed for various operations. - int result = old_index; - for (int i = 0; i < old_index; ++i) { - if (signature->GetParam(i) == MachineRepresentation::kSimd128) { - result += 3; - } - } - return result; -} - -int SimdScalarLowering::GetParameterCountAfterLowering() { - if (parameter_count_after_lowering_ == -1) { - // GetParameterIndexAfterLoweringSimd128(parameter_count) returns the - // parameter count after lowering. - parameter_count_after_lowering_ = GetParameterIndexAfterLoweringSimd128( - signature(), static_cast<int>(signature()->parameter_count())); - } - return parameter_count_after_lowering_; -} - -static int GetReturnCountAfterLoweringSimd128( - Signature<MachineRepresentation>* signature) { - int result = static_cast<int>(signature->return_count()); - for (int i = 0; i < static_cast<int>(signature->return_count()); ++i) { - if (signature->GetReturn(i) == MachineRepresentation::kSimd128) { - result += 3; - } - } - return result; -} - -int GetReturnIndexAfterLowering(const CallDescriptor* call_descriptor, - int old_index) { - int result = old_index; - for (int i = 0; i < old_index; ++i) { - if (call_descriptor->GetReturnType(i).representation() == - MachineRepresentation::kSimd128) { - result += kNumLanes32 - 1; - } - } - return result; -} - -static int GetReturnCountAfterLoweringSimd128( - const CallDescriptor* call_descriptor) { - return GetReturnIndexAfterLowering( - call_descriptor, static_cast<int>(call_descriptor->ReturnCount())); -} - -int SimdScalarLowering::NumLanes(SimdType type) { - int num_lanes = 0; - if (type == SimdType::kFloat64x2 || type == SimdType::kInt64x2) { - num_lanes = kNumLanes64; - } else if (type == SimdType::kFloat32x4 || type == SimdType::kInt32x4) { - num_lanes = kNumLanes32; - } else if (type == SimdType::kInt16x8) { - num_lanes = kNumLanes16; - } else if (type == SimdType::kInt8x16) { - num_lanes = kNumLanes8; - } else { - UNREACHABLE(); - } - return num_lanes; -} - -constexpr int SimdScalarLowering::kLaneOffsets[]; - -void SimdScalarLowering::GetIndexNodes(Node* index, Node** new_indices, - SimdType type) { - int num_lanes = NumLanes(type); - int lane_width = kSimd128Size / num_lanes; - int laneIndex = kLaneOffsets[0] / lane_width; - - Node* rep = index; - - if (HasReplacement(0, index)) { - // Index nodes are lowered to scalar nodes. - DCHECK_EQ(1, ReplacementCount(index)); - rep = GetReplacements(index)[0]; - } - - new_indices[laneIndex] = rep; - for (int i = 1; i < num_lanes; ++i) { - laneIndex = kLaneOffsets[i * lane_width] / lane_width; - new_indices[laneIndex] = graph()->NewNode( - machine()->Int32Add(), rep, - graph()->NewNode( - common()->Int32Constant(static_cast<int>(i) * lane_width))); - } -} - -void SimdScalarLowering::LowerLoadOp(Node* node, SimdType type) { - MachineRepresentation rep = - node->opcode() == IrOpcode::kLoadFromObject - ? ObjectAccessOf(node->op()).machine_type.representation() - : LoadRepresentationOf(node->op()).representation(); - const Operator* load_op; - switch (node->opcode()) { - case IrOpcode::kLoad: - load_op = machine()->Load(MachineTypeFrom(type)); - break; - case IrOpcode::kLoadImmutable: - load_op = machine()->LoadImmutable(MachineTypeFrom(type)); - break; - case IrOpcode::kLoadFromObject: - load_op = simplified()->LoadFromObject( - ObjectAccess(MachineTypeFrom(type), kNoWriteBarrier)); - break; - case IrOpcode::kUnalignedLoad: - load_op = machine()->UnalignedLoad(MachineTypeFrom(type)); - break; - case IrOpcode::kProtectedLoad: - load_op = machine()->ProtectedLoad(MachineTypeFrom(type)); - break; - default: - UNREACHABLE(); - } - if (rep == MachineRepresentation::kSimd128) { - Node* base = node->InputAt(0); - Node* index = node->InputAt(1); - int num_lanes = NumLanes(type); - Node** indices = zone()->NewArray<Node*>(num_lanes); - GetIndexNodes(index, indices, type); - Node** rep_nodes = zone()->NewArray<Node*>(num_lanes); - rep_nodes[0] = node; - rep_nodes[0]->ReplaceInput(1, indices[0]); - NodeProperties::ChangeOp(rep_nodes[0], load_op); - if (node->InputCount() > 2) { - DCHECK_LT(3, node->InputCount()); - Node* effect_input = node->InputAt(2); - Node* control_input = node->InputAt(3); - for (int i = num_lanes - 1; i > 0; --i) { - rep_nodes[i] = graph()->NewNode(load_op, base, indices[i], effect_input, - control_input); - effect_input = rep_nodes[i]; - } - rep_nodes[0]->ReplaceInput(2, rep_nodes[1]); - } else { - for (int i = 1; i < num_lanes; ++i) { - rep_nodes[i] = graph()->NewNode(load_op, base, indices[i]); - } - } - ReplaceNode(node, rep_nodes, num_lanes); - } else { - DefaultLowering(node); - } -} - -void SimdScalarLowering::LowerLoadTransformOp(Node* node, SimdType type) { - LoadTransformParameters params = LoadTransformParametersOf(node->op()); - MachineType load_rep = MachineType::None(); - SimdType load_type = type; - - // Load extends have a different machine type for loading. - switch (params.transformation) { - case LoadTransformation::kS128Load8x8S: - load_rep = MachineType::Int8(); - load_type = SimdType::kInt8x16; - break; - case LoadTransformation::kS128Load8x8U: - load_rep = MachineType::Uint8(); - load_type = SimdType::kInt8x16; - break; - case LoadTransformation::kS128Load16x4S: - load_rep = MachineType::Int16(); - load_type = SimdType::kInt16x8; - break; - case LoadTransformation::kS128Load16x4U: - load_rep = MachineType::Uint16(); - load_type = SimdType::kInt16x8; - break; - case LoadTransformation::kS128Load32x2S: - load_rep = MachineType::Int32(); - load_type = SimdType::kInt32x4; - break; - case LoadTransformation::kS128Load32x2U: - load_rep = MachineType::Uint32(); - load_type = SimdType::kInt32x4; - break; - case LoadTransformation::kS128Load8Splat: - case LoadTransformation::kS128Load16Splat: - case LoadTransformation::kS128Load32Splat: - case LoadTransformation::kS128Load64Splat: - case LoadTransformation::kS128Load32Zero: - case LoadTransformation::kS128Load64Zero: - load_rep = MachineTypeFrom(type); - break; - default: - UNREACHABLE(); - } - - DCHECK_NE(load_rep, MachineType::None()); - - const Operator* load_op; - switch (params.kind) { - case MemoryAccessKind::kNormal: - load_op = machine()->Load(load_rep); - break; - case MemoryAccessKind::kUnaligned: - load_op = machine()->UnalignedLoad(load_rep); - break; - case MemoryAccessKind::kProtected: - load_op = machine()->ProtectedLoad(load_rep); - break; - } - - Node* base = node->InputAt(0); - Node* index = node->InputAt(1); - int num_lanes = NumLanes(type); - Node** reps = zone()->NewArray<Node*>(num_lanes); - Node* effect_input = node->InputAt(2); - Node* control_input = node->InputAt(3); - - // This node is also used as effect input into other nodes, so we need to - // change this node in place. - reps[0] = node; - NodeProperties::ChangeOp(reps[0], load_op); - - if (type != load_type) { - // We load a smaller lane size, then extend to a larger lane size. So use - // the smaller lane size to calculte the index nodes for loads, but only - // actually load half of those lanes. - Node** indices = zone()->NewArray<Node*>(num_lanes * 2); - GetIndexNodes(index, indices, load_type); - - reps[0]->ReplaceInput(1, indices[0]); - - for (int i = num_lanes - 1; i > 0; --i) { - reps[i] = graph()->NewNode(load_op, base, indices[i], effect_input, - control_input); - effect_input = reps[i]; - } - } else { - if (params.transformation == LoadTransformation::kS128Load32Zero) { - for (int i = num_lanes - 1; i > 0; --i) { - reps[i] = mcgraph_->Int32Constant(0); - } - } else if (params.transformation == LoadTransformation::kS128Load64Zero) { - for (int i = num_lanes - 1; i > 0; --i) { - reps[i] = mcgraph_->Int64Constant(0); - } - } else { - // Load splat, load from the same index for every lane. - Node* rep = HasReplacement(0, index) ? GetReplacements(index)[0] : index; - - // Replace first node, we only called ChangeOp above. - reps[0]->ReplaceInput(1, rep); - for (int i = num_lanes - 1; i > 0; --i) { - reps[i] = - graph()->NewNode(load_op, base, rep, effect_input, control_input); - effect_input = reps[i]; - } - } - } - - // Update the effect input, completing the effect chain, but only if there is - // an effect output (LoadZero does not have an effect output, it is zero). - if (reps[1]->op()->EffectOutputCount() > 0) { - reps[0]->ReplaceInput(2, reps[1]); - } - - // Special case, the load nodes need to be sign extended, and we do it here so - // the loop above can connect all the effect edges correctly. - if (params.transformation == LoadTransformation::kS128Load32x2S) { - for (int i = 0; i < num_lanes; ++i) { - reps[i] = graph()->NewNode(machine()->ChangeInt32ToInt64(), reps[i]); - } - } else if (params.transformation == LoadTransformation::kS128Load32x2U) { - for (int i = 0; i < num_lanes; ++i) { - reps[i] = graph()->NewNode(machine()->ChangeUint32ToUint64(), reps[i]); - } - } - - ReplaceNode(node, reps, num_lanes); -} - -void SimdScalarLowering::LowerStoreOp(Node* node) { - // For store operation, use replacement type of its input instead of the - // one of its effected node. - DCHECK_LT(2, node->InputCount()); - SimdType rep_type = ReplacementType(node->InputAt(2)); - replacements_[node->id()].type = rep_type; - const Operator* store_op; - MachineRepresentation rep; - switch (node->opcode()) { - case IrOpcode::kStore: { - rep = StoreRepresentationOf(node->op()).representation(); - WriteBarrierKind write_barrier_kind = - StoreRepresentationOf(node->op()).write_barrier_kind(); - store_op = machine()->Store(StoreRepresentation( - MachineTypeFrom(rep_type).representation(), write_barrier_kind)); - break; - } - case IrOpcode::kStoreToObject: { - rep = ObjectAccessOf(node->op()).machine_type.representation(); - WriteBarrierKind write_barrier_kind = - ObjectAccessOf(node->op()).write_barrier_kind; - store_op = simplified()->StoreToObject( - ObjectAccess(MachineTypeFrom(rep_type), write_barrier_kind)); - break; - } - case IrOpcode::kUnalignedStore: { - rep = UnalignedStoreRepresentationOf(node->op()); - store_op = - machine()->UnalignedStore(MachineTypeFrom(rep_type).representation()); - break; - } - case IrOpcode::kProtectedStore: { - rep = StoreRepresentationOf(node->op()).representation(); - store_op = - machine()->ProtectedStore(MachineTypeFrom(rep_type).representation()); - break; - } - default: - UNREACHABLE(); - } - if (rep == MachineRepresentation::kSimd128) { - Node* base = node->InputAt(0); - Node* index = node->InputAt(1); - int num_lanes = NumLanes(rep_type); - Node** indices = zone()->NewArray<Node*>(num_lanes); - GetIndexNodes(index, indices, rep_type); - Node* value = node->InputAt(2); - DCHECK(HasReplacement(1, value)); - Node** rep_nodes = zone()->NewArray<Node*>(num_lanes); - rep_nodes[0] = node; - Node** rep_inputs = GetReplacementsWithType(value, rep_type); - rep_nodes[0]->ReplaceInput(2, rep_inputs[0]); - rep_nodes[0]->ReplaceInput(1, indices[0]); - NodeProperties::ChangeOp(node, store_op); - if (node->InputCount() > 3) { - DCHECK_LT(4, node->InputCount()); - Node* effect_input = node->InputAt(3); - Node* control_input = node->InputAt(4); - for (int i = num_lanes - 1; i > 0; --i) { - rep_nodes[i] = - graph()->NewNode(store_op, base, indices[i], rep_inputs[i], - effect_input, control_input); - effect_input = rep_nodes[i]; - } - rep_nodes[0]->ReplaceInput(3, rep_nodes[1]); - } else { - for (int i = 1; i < num_lanes; ++i) { - rep_nodes[i] = - graph()->NewNode(store_op, base, indices[i], rep_inputs[i]); - } - } - ReplaceNode(node, rep_nodes, num_lanes); - } else { - DefaultLowering(node); - } -} - -void SimdScalarLowering::LowerBinaryOp(Node* node, SimdType input_rep_type, - const Operator* op, - bool not_horizontal) { - DCHECK_EQ(2, node->InputCount()); - Node** rep_left = GetReplacementsWithType(node->InputAt(0), input_rep_type); - Node** rep_right = GetReplacementsWithType(node->InputAt(1), input_rep_type); - int num_lanes = NumLanes(input_rep_type); - Node** rep_node = zone()->NewArray<Node*>(num_lanes); - if (not_horizontal) { - for (int i = 0; i < num_lanes; ++i) { - rep_node[i] = graph()->NewNode(op, rep_left[i], rep_right[i]); - } - } else { - for (int i = 0; i < num_lanes / 2; ++i) { - rep_node[i] = graph()->NewNode(op, rep_left[i * 2], rep_left[i * 2 + 1]); - rep_node[i + num_lanes / 2] = - graph()->NewNode(op, rep_right[i * 2], rep_right[i * 2 + 1]); - } - } - ReplaceNode(node, rep_node, num_lanes); -} - -void SimdScalarLowering::LowerCompareOp(Node* node, SimdType input_rep_type, - const Operator* op, - bool invert_inputs) { - DCHECK_EQ(2, node->InputCount()); - Node** rep_left = GetReplacementsWithType(node->InputAt(0), input_rep_type); - Node** rep_right = GetReplacementsWithType(node->InputAt(1), input_rep_type); - int num_lanes = NumLanes(input_rep_type); - Node** rep_node = zone()->NewArray<Node*>(num_lanes); - for (int i = 0; i < num_lanes; ++i) { - Node* cmp_result = nullptr; - if (invert_inputs) { - cmp_result = graph()->NewNode(op, rep_right[i], rep_left[i]); - } else { - cmp_result = graph()->NewNode(op, rep_left[i], rep_right[i]); - } - Diamond d_cmp(graph(), common(), cmp_result); - rep_node[i] = ConstructPhiForComparison(d_cmp, input_rep_type, -1, 0); - } - ReplaceNode(node, rep_node, num_lanes); -} - -Node* SimdScalarLowering::FixUpperBits(Node* input, int32_t shift) { - return graph()->NewNode(machine()->Word32Sar(), - graph()->NewNode(machine()->Word32Shl(), input, - mcgraph_->Int32Constant(shift)), - mcgraph_->Int32Constant(shift)); -} - -void SimdScalarLowering::LowerBinaryOpForSmallInt(Node* node, - SimdType input_rep_type, - const Operator* op, - bool not_horizontal) { - DCHECK_EQ(2, node->InputCount()); - DCHECK(input_rep_type == SimdType::kInt16x8 || - input_rep_type == SimdType::kInt8x16); - Node** rep_left = GetReplacementsWithType(node->InputAt(0), input_rep_type); - Node** rep_right = GetReplacementsWithType(node->InputAt(1), input_rep_type); - int num_lanes = NumLanes(input_rep_type); - Node** rep_node = zone()->NewArray<Node*>(num_lanes); - int32_t shift_val = - (input_rep_type == SimdType::kInt16x8) ? kShift16 : kShift8; - if (not_horizontal) { - for (int i = 0; i < num_lanes; ++i) { - rep_node[i] = FixUpperBits( - graph()->NewNode(op, rep_left[i], rep_right[i]), shift_val); - } - } else { - for (int i = 0; i < num_lanes / 2; ++i) { - rep_node[i] = FixUpperBits( - graph()->NewNode(op, rep_left[i * 2], rep_left[i * 2 + 1]), - shift_val); - rep_node[i + num_lanes / 2] = FixUpperBits( - graph()->NewNode(op, rep_right[i * 2], rep_right[i * 2 + 1]), - shift_val); - } - } - ReplaceNode(node, rep_node, num_lanes); -} - -Node* SimdScalarLowering::Mask(Node* input, int32_t mask) { - return graph()->NewNode(machine()->Word32And(), input, - mcgraph_->Int32Constant(mask)); -} - -void SimdScalarLowering::LowerSaturateBinaryOp(Node* node, - SimdType input_rep_type, - const Operator* op, - bool is_signed) { - DCHECK_EQ(2, node->InputCount()); - DCHECK(input_rep_type == SimdType::kInt16x8 || - input_rep_type == SimdType::kInt8x16); - Node** rep_left = GetReplacementsWithType(node->InputAt(0), input_rep_type); - Node** rep_right = GetReplacementsWithType(node->InputAt(1), input_rep_type); - int32_t min = 0; - int32_t max = 0; - int32_t mask = 0; - int32_t shift_val = 0; - MachineRepresentation phi_rep; - if (input_rep_type == SimdType::kInt16x8) { - if (is_signed) { - min = std::numeric_limits<int16_t>::min(); - max = std::numeric_limits<int16_t>::max(); - } else { - min = std::numeric_limits<uint16_t>::min(); - max = std::numeric_limits<uint16_t>::max(); - } - mask = kMask16; - shift_val = kShift16; - phi_rep = MachineRepresentation::kWord16; - } else { - if (is_signed) { - min = std::numeric_limits<int8_t>::min(); - max = std::numeric_limits<int8_t>::max(); - } else { - min = std::numeric_limits<uint8_t>::min(); - max = std::numeric_limits<uint8_t>::max(); - } - mask = kMask8; - shift_val = kShift8; - phi_rep = MachineRepresentation::kWord8; - } - int num_lanes = NumLanes(input_rep_type); - Node** rep_node = zone()->NewArray<Node*>(num_lanes); - for (int i = 0; i < num_lanes; ++i) { - Node* op_result = nullptr; - Node* left = is_signed ? rep_left[i] : Mask(rep_left[i], mask); - Node* right = is_signed ? rep_right[i] : Mask(rep_right[i], mask); - op_result = graph()->NewNode(op, left, right); - Diamond d_min(graph(), common(), - graph()->NewNode(machine()->Int32LessThan(), op_result, - mcgraph_->Int32Constant(min))); - rep_node[i] = d_min.Phi(phi_rep, mcgraph_->Int32Constant(min), op_result); - Diamond d_max(graph(), common(), - graph()->NewNode(machine()->Int32LessThan(), - mcgraph_->Int32Constant(max), rep_node[i])); - rep_node[i] = d_max.Phi(phi_rep, mcgraph_->Int32Constant(max), rep_node[i]); - rep_node[i] = - is_signed ? rep_node[i] : FixUpperBits(rep_node[i], shift_val); - } - ReplaceNode(node, rep_node, num_lanes); -} - -void SimdScalarLowering::LowerUnaryOp(Node* node, SimdType input_rep_type, - const Operator* op) { - DCHECK_EQ(1, node->InputCount()); - Node** rep = GetReplacementsWithType(node->InputAt(0), input_rep_type); - int num_lanes = NumLanes(input_rep_type); - Node** rep_node = zone()->NewArray<Node*>(num_lanes); - for (int i = 0; i < num_lanes; ++i) { - rep_node[i] = graph()->NewNode(op, rep[i]); - } - ReplaceNode(node, rep_node, num_lanes); -} - -void SimdScalarLowering::LowerIntMinMax(Node* node, const Operator* op, - bool is_max, SimdType type) { - DCHECK_EQ(2, node->InputCount()); - Node** rep_left = GetReplacementsWithType(node->InputAt(0), type); - Node** rep_right = GetReplacementsWithType(node->InputAt(1), type); - int num_lanes = NumLanes(type); - Node** rep_node = zone()->NewArray<Node*>(num_lanes); - MachineRepresentation rep = MachineRepresentation::kNone; - if (type == SimdType::kInt32x4) { - rep = MachineRepresentation::kWord32; - } else if (type == SimdType::kInt16x8) { - rep = MachineRepresentation::kWord16; - } else if (type == SimdType::kInt8x16) { - rep = MachineRepresentation::kWord8; - } else { - UNREACHABLE(); - } - for (int i = 0; i < num_lanes; ++i) { - Diamond d(graph(), common(), - graph()->NewNode(op, rep_left[i], rep_right[i])); - if (is_max) { - rep_node[i] = d.Phi(rep, rep_right[i], rep_left[i]); - } else { - rep_node[i] = d.Phi(rep, rep_left[i], rep_right[i]); - } - } - ReplaceNode(node, rep_node, num_lanes); -} - -Node* SimdScalarLowering::BuildF64Trunc(Node* input) { - if (machine()->Float64RoundTruncate().IsSupported()) { - return graph()->NewNode(machine()->Float64RoundTruncate().op(), input); - } else { - ExternalReference ref = ExternalReference::wasm_f64_trunc(); - Node* stack_slot = - graph()->NewNode(machine()->StackSlot(MachineRepresentation::kFloat64)); - const Operator* store_op = machine()->Store( - StoreRepresentation(MachineRepresentation::kFloat64, kNoWriteBarrier)); - Node* effect = - graph()->NewNode(store_op, stack_slot, mcgraph_->Int32Constant(0), - input, graph()->start(), graph()->start()); - Node* function = graph()->NewNode(common()->ExternalConstant(ref)); - Node** args = zone()->NewArray<Node*>(4); - args[0] = function; - args[1] = stack_slot; - args[2] = effect; - args[3] = graph()->start(); - Signature<MachineType>::Builder sig_builder(zone(), 0, 1); - sig_builder.AddParam(MachineType::Pointer()); - auto call_descriptor = - Linkage::GetSimplifiedCDescriptor(zone(), sig_builder.Build()); - Node* call = graph()->NewNode(common()->Call(call_descriptor), 4, args); - return graph()->NewNode(machine()->Load(LoadRepresentation::Float64()), - stack_slot, mcgraph_->Int32Constant(0), call, - graph()->start()); - } -} - -void SimdScalarLowering::LowerConvertFromFloat(Node* node, bool is_signed) { - DCHECK_EQ(1, node->InputCount()); - Node** rep = GetReplacementsWithType(node->InputAt(0), SimdType::kFloat32x4); - Node* rep_node[kNumLanes32]; - Node* double_zero = graph()->NewNode(common()->Float64Constant(0.0)); - Node* min = graph()->NewNode( - common()->Float64Constant(static_cast<double>(is_signed ? kMinInt : 0))); - Node* max = graph()->NewNode(common()->Float64Constant( - static_cast<double>(is_signed ? kMaxInt : 0xFFFFFFFFu))); - for (int i = 0; i < kNumLanes32; ++i) { - Node* double_rep = - graph()->NewNode(machine()->ChangeFloat32ToFloat64(), rep[i]); - Diamond nan_d( - graph(), common(), - graph()->NewNode(machine()->Float64Equal(), double_rep, double_rep)); - Node* temp = - nan_d.Phi(MachineRepresentation::kFloat64, double_rep, double_zero); - Diamond min_d(graph(), common(), - graph()->NewNode(machine()->Float64LessThan(), temp, min)); - temp = min_d.Phi(MachineRepresentation::kFloat64, min, temp); - Diamond max_d(graph(), common(), - graph()->NewNode(machine()->Float64LessThan(), max, temp)); - temp = max_d.Phi(MachineRepresentation::kFloat64, max, temp); - Node* trunc = BuildF64Trunc(temp); - if (is_signed) { - rep_node[i] = graph()->NewNode(machine()->ChangeFloat64ToInt32(), trunc); - } else { - rep_node[i] = - graph()->NewNode(machine()->TruncateFloat64ToUint32(), trunc); - } - } - ReplaceNode(node, rep_node, kNumLanes32); -} - -void SimdScalarLowering::LowerConvertFromInt(Node* node, - SimdType input_rep_type, - SimdType output_rep_type, - bool is_signed, int start_index) { - DCHECK_EQ(1, node->InputCount()); - Node** rep = GetReplacementsWithType(node->InputAt(0), input_rep_type); - - int32_t mask = 0; - if (input_rep_type == SimdType::kInt16x8) { - DCHECK_EQ(output_rep_type, SimdType::kInt32x4); - mask = kMask16; - } else { - DCHECK_EQ(output_rep_type, SimdType::kInt16x8); - DCHECK_EQ(input_rep_type, SimdType::kInt8x16); - mask = kMask8; - } - - int num_lanes = NumLanes(output_rep_type); - Node** rep_node = zone()->NewArray<Node*>(num_lanes); - for (int i = 0; i < num_lanes; ++i) { - rep_node[i] = - is_signed ? rep[i + start_index] : Mask(rep[i + start_index], mask); - } - - ReplaceNode(node, rep_node, num_lanes); -} - -void SimdScalarLowering::LowerPack(Node* node, SimdType input_rep_type, - SimdType output_rep_type, bool is_signed) { - DCHECK_EQ(2, node->InputCount()); - Node** rep_left = GetReplacementsWithType(node->InputAt(0), input_rep_type); - Node** rep_right = GetReplacementsWithType(node->InputAt(1), input_rep_type); - const Operator* less_op = machine()->Int32LessThan(); - Node* min = nullptr; - Node* max = nullptr; - const Operator* sign_extend; - MachineRepresentation phi_rep; - if (output_rep_type == SimdType::kInt16x8) { - sign_extend = machine()->SignExtendWord16ToInt32(); - DCHECK(input_rep_type == SimdType::kInt32x4); - if (is_signed) { - min = mcgraph_->Int32Constant(std::numeric_limits<int16_t>::min()); - max = mcgraph_->Int32Constant(std::numeric_limits<int16_t>::max()); - } else { - min = mcgraph_->Uint32Constant(std::numeric_limits<uint16_t>::min()); - max = mcgraph_->Uint32Constant(std::numeric_limits<uint16_t>::max()); - } - phi_rep = MachineRepresentation::kWord16; - } else { - sign_extend = machine()->SignExtendWord8ToInt32(); - DCHECK(output_rep_type == SimdType::kInt8x16 && - input_rep_type == SimdType::kInt16x8); - if (is_signed) { - min = mcgraph_->Int32Constant(std::numeric_limits<int8_t>::min()); - max = mcgraph_->Int32Constant(std::numeric_limits<int8_t>::max()); - } else { - min = mcgraph_->Uint32Constant(std::numeric_limits<uint8_t>::min()); - max = mcgraph_->Uint32Constant(std::numeric_limits<uint8_t>::max()); - } - phi_rep = MachineRepresentation::kWord8; - } - int num_lanes = NumLanes(output_rep_type); - Node** rep_node = zone()->NewArray<Node*>(num_lanes); - for (int i = 0; i < num_lanes; ++i) { - Node* input = nullptr; - if (i < num_lanes / 2) - input = rep_left[i]; - else - input = rep_right[i - num_lanes / 2]; - Diamond d_min(graph(), common(), graph()->NewNode(less_op, input, min)); - input = d_min.Phi(phi_rep, min, input); - Diamond d_max(graph(), common(), graph()->NewNode(less_op, max, input)); - // We keep nodes in sign-extended form. E.g. for uint8_t, we need to - // compare with 0x000000ff (saturated narrowing), but the result of - // conversion should be 0xffffffff to work well with the rest of lowering. - rep_node[i] = graph()->NewNode(sign_extend, d_max.Phi(phi_rep, max, input)); - } - ReplaceNode(node, rep_node, num_lanes); -} - -void SimdScalarLowering::LowerShiftOp(Node* node, SimdType type) { - DCHECK_EQ(2, node->InputCount()); - - // The shift node, if it has a replacement, should be a single scalar. - DCHECK_GE(1, ReplacementCount(node->InputAt(1))); - Node* val = (HasReplacement(0, node->InputAt(1))) - ? GetReplacements(node->InputAt(1))[0] - : node->InputAt(1); - - Node* shift_node = Mask(val, GetMaskForShift(node)); - Node** rep = GetReplacementsWithType(node->InputAt(0), type); - int num_lanes = NumLanes(type); - Node** rep_node = zone()->NewArray<Node*>(num_lanes); - for (int i = 0; i < num_lanes; ++i) { - rep_node[i] = rep[i]; - switch (node->opcode()) { - case IrOpcode::kI8x16ShrU: - rep_node[i] = Mask(rep_node[i], kMask8); - rep_node[i] = - graph()->NewNode(machine()->Word32Shr(), rep_node[i], shift_node); - break; - case IrOpcode::kI16x8ShrU: - rep_node[i] = Mask(rep_node[i], kMask16); - V8_FALLTHROUGH; - case IrOpcode::kI32x4ShrU: - rep_node[i] = - graph()->NewNode(machine()->Word32Shr(), rep_node[i], shift_node); - break; - case IrOpcode::kI64x2ShrU: - rep_node[i] = - graph()->NewNode(machine()->Word64Shr(), rep_node[i], shift_node); - break; - case IrOpcode::kI64x2Shl: - rep_node[i] = - graph()->NewNode(machine()->Word64Shl(), rep_node[i], shift_node); - break; - case IrOpcode::kI32x4Shl: - rep_node[i] = - graph()->NewNode(machine()->Word32Shl(), rep_node[i], shift_node); - break; - case IrOpcode::kI16x8Shl: - rep_node[i] = - graph()->NewNode(machine()->Word32Shl(), rep_node[i], shift_node); - rep_node[i] = FixUpperBits(rep_node[i], kShift16); - break; - case IrOpcode::kI8x16Shl: - rep_node[i] = - graph()->NewNode(machine()->Word32Shl(), rep_node[i], shift_node); - rep_node[i] = FixUpperBits(rep_node[i], kShift8); - break; - case IrOpcode::kI64x2ShrS: - rep_node[i] = - graph()->NewNode(machine()->Word64Sar(), rep_node[i], shift_node); - break; - case IrOpcode::kI32x4ShrS: - case IrOpcode::kI16x8ShrS: - case IrOpcode::kI8x16ShrS: - rep_node[i] = - graph()->NewNode(machine()->Word32Sar(), rep_node[i], shift_node); - break; - default: - UNREACHABLE(); - } - } - ReplaceNode(node, rep_node, num_lanes); -} - -Node* SimdScalarLowering::ConstructPhiForComparison(Diamond d, - SimdType rep_type, - int true_value, - int false_value) { - // Close the given Diamond d using a Phi node, taking care of constructing the - // right kind of constants (Int32 or Int64) based on rep_type. - if (rep_type == SimdType::kFloat64x2 || rep_type == SimdType::kInt64x2) { - MachineRepresentation rep = MachineRepresentation::kWord64; - return d.Phi(rep, mcgraph_->Int64Constant(true_value), - mcgraph_->Int64Constant(false_value)); - } else { - MachineRepresentation rep = - (rep_type == SimdType::kFloat32x4) - ? MachineRepresentation::kWord32 - : MachineTypeFrom(rep_type).representation(); - return d.Phi(rep, mcgraph_->Int32Constant(true_value), - mcgraph_->Int32Constant(false_value)); - } -} - -void SimdScalarLowering::LowerNotEqual(Node* node, SimdType input_rep_type, - const Operator* op) { - DCHECK_EQ(2, node->InputCount()); - Node** rep_left = GetReplacementsWithType(node->InputAt(0), input_rep_type); - Node** rep_right = GetReplacementsWithType(node->InputAt(1), input_rep_type); - int num_lanes = NumLanes(input_rep_type); - Node** rep_node = zone()->NewArray<Node*>(num_lanes); - for (int i = 0; i < num_lanes; ++i) { - Diamond d(graph(), common(), - graph()->NewNode(op, rep_left[i], rep_right[i])); - rep_node[i] = ConstructPhiForComparison(d, input_rep_type, 0, -1); - } - ReplaceNode(node, rep_node, num_lanes); -} - -void SimdScalarLowering::LowerBitMaskOp(Node* node, SimdType rep_type, - int msb_index) { - Node** reps = GetReplacementsWithType(node->InputAt(0), rep_type); - int num_lanes = NumLanes(rep_type); - Node** rep_node = zone()->NewArray<Node*>(1); - Node* result = mcgraph_->Int32Constant(0); - uint32_t mask = 1 << msb_index; - - for (int i = 0; i < num_lanes; ++i) { - // Lane i should end up at bit i in the final result. - // +-----------------------------------------------------------------+ - // | | msb_index | (i < msb_index) | (i > msb_index) | - // +-------+-----------+----------------------+----------------------+ - // | i8x16 | 7 | msb >> (msb_index-i) | msb << (i-msb_index) | - // | i16x8 | 15 | msb >> (msb_index-i) | n/a | - // | i32x4 | 31 | msb >> (msb_index-i) | n/a | - // +-------+-----------+----------------------+----------------------+ - Node* msb = Mask(reps[i], mask); - - if (i < msb_index) { - int shift = msb_index - i; - Node* shifted = graph()->NewNode(machine()->Word32Shr(), msb, - mcgraph_->Int32Constant(shift)); - result = graph()->NewNode(machine()->Word32Or(), shifted, result); - } else if (i > msb_index) { - int shift = i - msb_index; - Node* shifted = graph()->NewNode(machine()->Word32Shl(), msb, - mcgraph_->Int32Constant(shift)); - result = graph()->NewNode(machine()->Word32Or(), shifted, result); - } else { - result = graph()->NewNode(machine()->Word32Or(), msb, result); - } - } - - rep_node[0] = result; - ReplaceNode(node, rep_node, 1); -} - -void SimdScalarLowering::LowerAllTrueOp(Node* node, SimdType rep_type) { - // AllTrue ops require the input to be of a particular SimdType, but the op - // itself is always replaced by a Int32x4 with 1 node. - int num_lanes = NumLanes(rep_type); - DCHECK_EQ(1, node->InputCount()); - Node** rep = GetReplacementsWithType(node->InputAt(0), rep_type); - Node* zero; - Node* tmp_result; - MachineRepresentation result_rep = MachineRepresentation::kWord32; - const Operator* equals; - - if (SimdType::kInt64x2 == rep_type) { - zero = mcgraph_->Int64Constant(0); - tmp_result = mcgraph_->Int64Constant(1); - result_rep = MachineRepresentation::kWord64; - equals = machine()->Word64Equal(); - } else { - zero = mcgraph_->Int32Constant(0); - tmp_result = mcgraph_->Int32Constant(1); - equals = machine()->Word32Equal(); - } - - Node** rep_node = zone()->NewArray<Node*>(num_lanes); - for (int i = 0; i < num_lanes; ++i) { - Diamond d(graph(), common(), graph()->NewNode(equals, rep[i], zero)); - tmp_result = d.Phi(result_rep, zero, tmp_result); - } - - if (SimdType::kInt64x2 == rep_type) { - tmp_result = - graph()->NewNode(machine()->TruncateInt64ToInt32(), tmp_result); - } - - rep_node[0] = tmp_result; - ReplaceNode(node, rep_node, 1); -} - -void SimdScalarLowering::LowerFloatPseudoMinMax(Node* node, const Operator* op, - bool is_max, SimdType type) { - DCHECK_EQ(2, node->InputCount()); - Node** rep_left = GetReplacementsWithType(node->InputAt(0), type); - Node** rep_right = GetReplacementsWithType(node->InputAt(1), type); - int num_lanes = NumLanes(type); - Node** rep_node = zone()->NewArray<Node*>(num_lanes); - MachineRepresentation rep = MachineTypeFrom(type).representation(); - for (int i = 0; i < num_lanes; ++i) { - Node* cmp = is_max ? graph()->NewNode(op, rep_left[i], rep_right[i]) - : graph()->NewNode(op, rep_right[i], rep_left[i]); - Diamond d(graph(), common(), cmp); - rep_node[i] = d.Phi(rep, rep_right[i], rep_left[i]); - } - ReplaceNode(node, rep_node, num_lanes); -} - -void SimdScalarLowering::LowerNode(Node* node) { - SimdType rep_type = ReplacementType(node); - int num_lanes = NumLanes(rep_type); - switch (node->opcode()) { - case IrOpcode::kS128Const: { - // We could use GetReplacementsWithType for all this, but it adds a lot of - // nodes, so sign extend the immediates ourselves here. - DCHECK_EQ(0, node->InputCount()); - Node** rep_node = zone()->NewArray<Node*>(num_lanes); - S128ImmediateParameter params = S128ImmediateParameterOf(node->op()); - - // For all the small ints below, we have a choice of static_cast or bit - // twiddling, clang seems to be able to optimize either - // (https://godbolt.org/z/9c65o8) so use static_cast for clarity. - switch (rep_type) { - case SimdType::kInt8x16: { - for (int i = 0; i < num_lanes; ++i) { - Address data_address = reinterpret_cast<Address>(params.data() + i); - rep_node[i] = mcgraph_->Int32Constant(static_cast<int32_t>( - base::ReadLittleEndianValue<int8_t>(data_address))); - } - break; - } - case SimdType::kInt16x8: { - int16_t val[kNumLanes16]; - base::Memcpy(val, params.data(), kSimd128Size); - for (int i = 0; i < num_lanes; ++i) { - rep_node[i] = mcgraph_->Int32Constant(static_cast<int32_t>( - base::ReadLittleEndianValue<int16_t>(&val[i]))); - } - break; - } - case SimdType::kInt32x4: { - uint32_t val[kNumLanes32]; - base::Memcpy(val, params.data(), kSimd128Size); - for (int i = 0; i < num_lanes; ++i) { - rep_node[i] = mcgraph_->Int32Constant( - base::ReadLittleEndianValue<uint32_t>(&val[i])); - } - break; - } - case SimdType::kInt64x2: { - uint64_t val[kNumLanes64]; - base::Memcpy(val, params.data(), kSimd128Size); - for (int i = 0; i < num_lanes; ++i) { - rep_node[i] = mcgraph_->Int64Constant( - base::ReadLittleEndianValue<uint64_t>(&val[i])); - } - break; - } - case SimdType::kFloat32x4: { - float val[kNumLanes32]; - base::Memcpy(val, params.data(), kSimd128Size); - for (int i = 0; i < num_lanes; ++i) { - rep_node[i] = mcgraph_->Float32Constant( - base::ReadLittleEndianValue<float>(&val[i])); - } - break; - } - case SimdType::kFloat64x2: { - double val[kNumLanes64]; - base::Memcpy(val, params.data(), kSimd128Size); - for (int i = 0; i < num_lanes; ++i) { - rep_node[i] = mcgraph_->Float64Constant( - base::ReadLittleEndianValue<double>(&val[i])); - } - break; - } - } - ReplaceNode(node, rep_node, num_lanes); - break; - } - case IrOpcode::kStart: { - int parameter_count = GetParameterCountAfterLowering(); - // Only exchange the node if the parameter count actually changed. - if (parameter_count != static_cast<int>(signature()->parameter_count())) { - int delta = - parameter_count - static_cast<int>(signature()->parameter_count()); - int new_output_count = node->op()->ValueOutputCount() + delta; - NodeProperties::ChangeOp(node, common()->Start(new_output_count)); - } - break; - } - case IrOpcode::kParameter: { - DCHECK_EQ(1, node->InputCount()); - int param_count = static_cast<int>(signature()->parameter_count()); - // Only exchange the node if the parameter count actually changed. We do - // not even have to do the default lowering because the start node, - // the only input of a parameter node, only changes if the parameter count - // changes. - if (GetParameterCountAfterLowering() != param_count) { - int old_index = ParameterIndexOf(node->op()); - // Parameter index 0 is the instance parameter, we will use old_index to - // index into the function signature, so we need to decrease it by 1. - --old_index; - int new_index = - GetParameterIndexAfterLoweringSimd128(signature(), old_index); - // Similarly, the index into function signature needs to account for the - // instance parameter, so increase it by 1. - ++new_index; - NodeProperties::ChangeOp(node, common()->Parameter(new_index)); - - if (old_index < 0) { - break; - } - - DCHECK(old_index < param_count); - - if (signature()->GetParam(old_index) == - MachineRepresentation::kSimd128) { - Node* new_node[kNumLanes32]; - new_node[0] = node; - for (int i = 1; i < kNumLanes32; ++i) { - new_node[i] = graph()->NewNode(common()->Parameter(new_index + i), - graph()->start()); - } - ReplaceNode(node, new_node, kNumLanes32); - } - } - break; - } - case IrOpcode::kSimd128ReverseBytes: { - DCHECK_EQ(1, node->InputCount()); - SimdType input_type = ReplacementType(node->InputAt(0)); - bool is_float = input_type == SimdType::kFloat32x4 || - input_type == SimdType::kFloat64x2; - replacements_[node->id()].type = - is_float ? SimdType::kFloat32x4 : SimdType::kInt32x4; - Node** rep = GetReplacementsWithType( - node->InputAt(0), - is_float ? SimdType::kFloat32x4 : SimdType::kInt32x4); - Node* rep_node[kNumLanes32]; - for (int i = 0; i < kNumLanes32; ++i) { - Node* temp = is_float ? graph()->NewNode( - machine()->BitcastFloat32ToInt32(), rep[i]) - : rep[i]; - temp = graph()->NewNode(machine()->Word32ReverseBytes(), temp); - rep_node[kNumLanes32 - 1 - i] = - is_float - ? graph()->NewNode(machine()->BitcastInt32ToFloat32(), temp) - : temp; - } - ReplaceNode(node, rep_node, kNumLanes32); - break; - } - case IrOpcode::kLoad: - case IrOpcode::kLoadFromObject: - case IrOpcode::kUnalignedLoad: - case IrOpcode::kProtectedLoad: - case IrOpcode::kLoadImmutable: { - LowerLoadOp(node, rep_type); - break; - } - case IrOpcode::kLoadTransform: { - LowerLoadTransformOp(node, rep_type); - break; - } - case IrOpcode::kStore: - case IrOpcode::kStoreToObject: - case IrOpcode::kUnalignedStore: - case IrOpcode::kProtectedStore: { - LowerStoreOp(node); - break; - } - case IrOpcode::kReturn: { - int old_input_count = node->InputCount(); - int return_arity = static_cast<int>(signature()->return_count()); - for (int i = 0; i < return_arity; i++) { - if (signature()->GetReturn(i) != MachineRepresentation::kSimd128) { - continue; - } - - // Return nodes have a hidden input at value 0. - Node* input = node->InputAt(i + 1); - if (!HasReplacement(0, input)) { - continue; - } - - // V128 return types are lowered to i32x4. - Node** reps = GetReplacementsWithType(input, rep_type); - ReplaceNode(input, reps, NumLanes(rep_type)); - } - - DefaultLowering(node); - // Nothing needs to be done here since inputs did not change. - if (old_input_count == node->InputCount()) { - break; - } - - int new_return_count = GetReturnCountAfterLoweringSimd128(signature()); - if (static_cast<int>(signature()->return_count()) != new_return_count) { - NodeProperties::ChangeOp(node, common()->Return(new_return_count)); - } - break; - } - case IrOpcode::kCall: { - // TODO(turbofan): Make wasm code const-correct wrt. CallDescriptor. - auto call_descriptor = - const_cast<CallDescriptor*>(CallDescriptorOf(node->op())); - bool returns_require_lowering = - GetReturnCountAfterLoweringSimd128(call_descriptor) != - static_cast<int>(call_descriptor->ReturnCount()); - - // All call arguments are lowered to i32x4 in the call descriptor, so the - // arguments need to be converted to i32x4 as well. - for (int i = NodeProperties::PastValueIndex(node) - 1; i >= 0; i--) { - Node* input = node->InputAt(i); - if (ReplacementCount(input) == 1) { - // Special case for extract lanes - Node** reps = GetReplacements(input); - ReplaceNode(input, reps, 1); - } else if (HasReplacement(0, input)) { - Node** reps = GetReplacementsWithType(input, SimdType::kInt32x4); - ReplaceNode(input, reps, NumLanes(SimdType::kInt32x4)); - } - } - - if (DefaultLowering(node) || returns_require_lowering) { - // We have to adjust the call descriptor. - const Operator* op = common()->Call( - GetI32WasmCallDescriptorForSimd(zone(), call_descriptor)); - NodeProperties::ChangeOp(node, op); - } - - if (!returns_require_lowering) { - break; - } - - size_t return_arity = call_descriptor->ReturnCount(); - - if (return_arity == 1) { - // We access the additional return values through projections. - // Special case for return_arity 1, with multi-returns, we would have - // already built projections for each return value, and will be handled - // by the following code. - Node* rep_node[kNumLanes32]; - for (int i = 0; i < kNumLanes32; ++i) { - rep_node[i] = - graph()->NewNode(common()->Projection(i), node, graph()->start()); - } - ReplaceNode(node, rep_node, kNumLanes32); - break; - } - - ZoneVector<Node*> projections(return_arity, zone()); - NodeProperties::CollectValueProjections(node, projections.data(), - return_arity); - - for (size_t old_index = 0, new_index = 0; old_index < return_arity; - ++old_index, ++new_index) { - Node* use_node = projections[old_index]; - DCHECK_EQ(ProjectionIndexOf(use_node->op()), old_index); - DCHECK_EQ(GetReturnIndexAfterLowering(call_descriptor, - static_cast<int>(old_index)), - static_cast<int>(new_index)); - if (new_index != old_index) { - NodeProperties::ChangeOp(use_node, common()->Projection(new_index)); - } - if (call_descriptor->GetReturnType(old_index).representation() == - MachineRepresentation::kSimd128) { - Node* rep_node[kNumLanes32]; - for (int i = 0; i < kNumLanes32; ++i) { - rep_node[i] = graph()->NewNode(common()->Projection(new_index + i), - node, graph()->start()); - } - ReplaceNode(use_node, rep_node, kNumLanes32); - new_index += kNumLanes32 - 1; - } - } - break; - } - case IrOpcode::kPhi: { - MachineRepresentation rep = PhiRepresentationOf(node->op()); - if (rep == MachineRepresentation::kSimd128) { - // The replacement nodes have already been created, we only have to - // replace placeholder nodes. - Node** rep_node = GetReplacements(node); - for (int i = 0; i < node->op()->ValueInputCount(); ++i) { - Node** rep_input = - GetReplacementsWithType(node->InputAt(i), rep_type); - for (int j = 0; j < num_lanes; j++) { - rep_node[j]->ReplaceInput(i, rep_input[j]); - } - } - } else { - DefaultLowering(node); - } - break; - } - case IrOpcode::kLoopExitValue: { - if (!HasReplacement(0, node->InputAt(0))) break; - Node* control = node->InputAt(NodeProperties::FirstControlIndex(node)); - Node** inputs = GetReplacementsWithType(node->InputAt(0), rep_type); - Node** rep_nodes = zone()->NewArray<Node*>(num_lanes); - for (int i = 0; i < num_lanes; i++) { - auto op = - common()->LoopExitValue(MachineTypeFrom(rep_type).representation()); - rep_nodes[i] = graph()->NewNode(op, inputs[i], control); - } - ReplaceNode(node, rep_nodes, num_lanes); - break; - } - case IrOpcode::kI64x2Add: { - LowerBinaryOp(node, rep_type, machine()->Int64Add()); - break; - } - case IrOpcode::kI64x2Sub: { - LowerBinaryOp(node, rep_type, machine()->Int64Sub()); - break; - } - case IrOpcode::kI64x2Mul: { - LowerBinaryOp(node, rep_type, machine()->Int64Mul()); - break; - } -#define I32X4_BINOP_CASE(opcode, instruction) \ - case IrOpcode::opcode: { \ - LowerBinaryOp(node, rep_type, machine()->instruction()); \ - break; \ - } - I32X4_BINOP_CASE(kI32x4Add, Int32Add) - I32X4_BINOP_CASE(kI32x4Sub, Int32Sub) - I32X4_BINOP_CASE(kI32x4Mul, Int32Mul) - I32X4_BINOP_CASE(kS128And, Word32And) - I32X4_BINOP_CASE(kS128Or, Word32Or) - I32X4_BINOP_CASE(kS128Xor, Word32Xor) -#undef I32X4_BINOP_CASE - case IrOpcode::kI16x8Add: - case IrOpcode::kI8x16Add: { - LowerBinaryOpForSmallInt(node, rep_type, machine()->Int32Add()); - break; - } - case IrOpcode::kI16x8Sub: - case IrOpcode::kI8x16Sub: { - LowerBinaryOpForSmallInt(node, rep_type, machine()->Int32Sub()); - break; - } - case IrOpcode::kI16x8Mul: { - LowerBinaryOpForSmallInt(node, rep_type, machine()->Int32Mul()); - break; - } - case IrOpcode::kI16x8AddSatS: - case IrOpcode::kI8x16AddSatS: { - LowerSaturateBinaryOp(node, rep_type, machine()->Int32Add(), true); - break; - } - case IrOpcode::kI16x8SubSatS: - case IrOpcode::kI8x16SubSatS: { - LowerSaturateBinaryOp(node, rep_type, machine()->Int32Sub(), true); - break; - } - case IrOpcode::kI16x8AddSatU: - case IrOpcode::kI8x16AddSatU: { - LowerSaturateBinaryOp(node, rep_type, machine()->Int32Add(), false); - break; - } - case IrOpcode::kI16x8SubSatU: - case IrOpcode::kI8x16SubSatU: { - LowerSaturateBinaryOp(node, rep_type, machine()->Int32Sub(), false); - break; - } - case IrOpcode::kI32x4MaxS: - case IrOpcode::kI16x8MaxS: - case IrOpcode::kI8x16MaxS: { - LowerIntMinMax(node, machine()->Int32LessThan(), true, rep_type); - break; - } - case IrOpcode::kI32x4MinS: - case IrOpcode::kI16x8MinS: - case IrOpcode::kI8x16MinS: { - LowerIntMinMax(node, machine()->Int32LessThan(), false, rep_type); - break; - } - case IrOpcode::kI32x4MaxU: - case IrOpcode::kI16x8MaxU: - case IrOpcode::kI8x16MaxU: { - LowerIntMinMax(node, machine()->Uint32LessThan(), true, rep_type); - break; - } - case IrOpcode::kI32x4MinU: - case IrOpcode::kI16x8MinU: - case IrOpcode::kI8x16MinU: { - LowerIntMinMax(node, machine()->Uint32LessThan(), false, rep_type); - break; - } - case IrOpcode::kI32x4DotI16x8S: { - // i32x4.dot_i16x8_s wants the inputs to be i16x8, but outputs to i32x4. - DCHECK_EQ(2, node->InputCount()); - Node** rep_left = - GetReplacementsWithType(node->InputAt(0), SimdType::kInt16x8); - Node** rep_right = - GetReplacementsWithType(node->InputAt(1), SimdType::kInt16x8); - int num_lanes = NumLanes(rep_type); - Node** rep_node = zone()->NewArray<Node*>(num_lanes); - for (int i = 0; i < num_lanes; ++i) { - Node* lo = graph()->NewNode(machine()->Int32Mul(), rep_left[i * 2], - rep_right[i * 2]); - Node* hi = graph()->NewNode(machine()->Int32Mul(), rep_left[i * 2 + 1], - rep_right[i * 2 + 1]); - rep_node[i] = graph()->NewNode(machine()->Int32Add(), lo, hi); - } - ReplaceNode(node, rep_node, num_lanes); - break; - } - case IrOpcode::kI64x2Neg: { - DCHECK_EQ(1, node->InputCount()); - Node** rep = GetReplacementsWithType(node->InputAt(0), rep_type); - int num_lanes = NumLanes(rep_type); - Node** rep_node = zone()->NewArray<Node*>(num_lanes); - Node* zero = graph()->NewNode(common()->Int64Constant(0)); - for (int i = 0; i < num_lanes; ++i) { - rep_node[i] = graph()->NewNode(machine()->Int64Sub(), zero, rep[i]); - } - ReplaceNode(node, rep_node, num_lanes); - break; - } - case IrOpcode::kI32x4Neg: - case IrOpcode::kI16x8Neg: - case IrOpcode::kI8x16Neg: { - DCHECK_EQ(1, node->InputCount()); - Node** rep = GetReplacementsWithType(node->InputAt(0), rep_type); - int num_lanes = NumLanes(rep_type); - Node** rep_node = zone()->NewArray<Node*>(num_lanes); - Node* zero = graph()->NewNode(common()->Int32Constant(0)); - for (int i = 0; i < num_lanes; ++i) { - rep_node[i] = graph()->NewNode(machine()->Int32Sub(), zero, rep[i]); - if (node->opcode() == IrOpcode::kI16x8Neg) { - rep_node[i] = FixUpperBits(rep_node[i], kShift16); - } else if (node->opcode() == IrOpcode::kI8x16Neg) { - rep_node[i] = FixUpperBits(rep_node[i], kShift8); - } - } - ReplaceNode(node, rep_node, num_lanes); - break; - } - case IrOpcode::kI32x4Abs: - case IrOpcode::kI16x8Abs: - case IrOpcode::kI8x16Abs: { - // From https://stackoverflow.com/a/14194764 - // abs(x) = (x XOR y) - y - Node** rep = GetReplacementsWithType(node->InputAt(0), rep_type); - Node** rep_node = zone()->NewArray<Node*>(num_lanes); - for (int i = 0; i < num_lanes; ++i) { - // It's fine to shift by 31 even for i8x16 since each node is - // effectively expanded to 32 bits. - Node* y = graph()->NewNode(machine()->Word32Sar(), rep[i], - mcgraph_->Int32Constant(31)); - rep_node[i] = graph()->NewNode( - machine()->Int32Sub(), - graph()->NewNode(machine()->Word32Xor(), rep[i], y), y); - if (node->opcode() == IrOpcode::kI16x8Neg) { - rep_node[i] = FixUpperBits(rep_node[i], kShift16); - } else if (node->opcode() == IrOpcode::kI8x16Neg) { - rep_node[i] = FixUpperBits(rep_node[i], kShift8); - } - } - ReplaceNode(node, rep_node, num_lanes); - break; - } - case IrOpcode::kS128Zero: { - DCHECK_EQ(0, node->InputCount()); - Node* rep_node[kNumLanes32]; - for (int i = 0; i < kNumLanes32; ++i) { - rep_node[i] = mcgraph_->Int32Constant(0); - } - ReplaceNode(node, rep_node, kNumLanes32); - break; - } - case IrOpcode::kS128Not: { - DCHECK_EQ(1, node->InputCount()); - Node** rep = GetReplacementsWithType(node->InputAt(0), rep_type); - Node* rep_node[kNumLanes32]; - Node* mask = graph()->NewNode(common()->Int32Constant(0xFFFFFFFF)); - for (int i = 0; i < kNumLanes32; ++i) { - rep_node[i] = graph()->NewNode(machine()->Word32Xor(), rep[i], mask); - } - ReplaceNode(node, rep_node, kNumLanes32); - break; - } - case IrOpcode::kS128AndNot: { - DCHECK_EQ(2, node->InputCount()); - Node** rep_left = GetReplacementsWithType(node->InputAt(0), rep_type); - Node** rep_right = GetReplacementsWithType(node->InputAt(1), rep_type); - int num_lanes = NumLanes(rep_type); - Node** rep_node = zone()->NewArray<Node*>(num_lanes); - Node* mask = graph()->NewNode(common()->Int32Constant(0xFFFFFFFF)); - for (int i = 0; i < num_lanes; ++i) { - Node* not_rep_right = - graph()->NewNode(machine()->Word32Xor(), rep_right[i], mask); - rep_node[i] = graph()->NewNode(machine()->Word32And(), rep_left[i], - not_rep_right); - } - ReplaceNode(node, rep_node, num_lanes); - break; - } - case IrOpcode::kI32x4SConvertF32x4: { - LowerConvertFromFloat(node, true); - break; - } - case IrOpcode::kI32x4UConvertF32x4: { - LowerConvertFromFloat(node, false); - break; - } - case IrOpcode::kI32x4SConvertI16x8Low: { - LowerConvertFromInt(node, SimdType::kInt16x8, SimdType::kInt32x4, true, - 0); - break; - } - case IrOpcode::kI32x4SConvertI16x8High: { - LowerConvertFromInt(node, SimdType::kInt16x8, SimdType::kInt32x4, true, - 4); - break; - } - case IrOpcode::kI32x4UConvertI16x8Low: { - LowerConvertFromInt(node, SimdType::kInt16x8, SimdType::kInt32x4, false, - 0); - break; - } - case IrOpcode::kI32x4UConvertI16x8High: { - LowerConvertFromInt(node, SimdType::kInt16x8, SimdType::kInt32x4, false, - 4); - break; - } - case IrOpcode::kI16x8SConvertI8x16Low: { - LowerConvertFromInt(node, SimdType::kInt8x16, SimdType::kInt16x8, true, - 0); - break; - } - case IrOpcode::kI16x8SConvertI8x16High: { - LowerConvertFromInt(node, SimdType::kInt8x16, SimdType::kInt16x8, true, - 8); - break; - } - case IrOpcode::kI16x8UConvertI8x16Low: { - LowerConvertFromInt(node, SimdType::kInt8x16, SimdType::kInt16x8, false, - 0); - break; - } - case IrOpcode::kI16x8UConvertI8x16High: { - LowerConvertFromInt(node, SimdType::kInt8x16, SimdType::kInt16x8, false, - 8); - break; - } - case IrOpcode::kI16x8SConvertI32x4: { - LowerPack(node, SimdType::kInt32x4, SimdType::kInt16x8, true); - break; - } - case IrOpcode::kI16x8UConvertI32x4: { - LowerPack(node, SimdType::kInt32x4, SimdType::kInt16x8, false); - break; - } - case IrOpcode::kI8x16SConvertI16x8: { - LowerPack(node, SimdType::kInt16x8, SimdType::kInt8x16, true); - break; - } - case IrOpcode::kI8x16UConvertI16x8: { - LowerPack(node, SimdType::kInt16x8, SimdType::kInt8x16, false); - break; - } - case IrOpcode::kI64x2Shl: - case IrOpcode::kI32x4Shl: - case IrOpcode::kI16x8Shl: - case IrOpcode::kI8x16Shl: - case IrOpcode::kI64x2ShrS: - case IrOpcode::kI32x4ShrS: - case IrOpcode::kI16x8ShrS: - case IrOpcode::kI8x16ShrS: - case IrOpcode::kI64x2ShrU: - case IrOpcode::kI32x4ShrU: - case IrOpcode::kI16x8ShrU: - case IrOpcode::kI8x16ShrU: { - LowerShiftOp(node, rep_type); - break; - } -#define F32X4_BINOP_CASE(name) \ - case IrOpcode::kF32x4##name: { \ - LowerBinaryOp(node, rep_type, machine()->Float32##name()); \ - break; \ - } - F32X4_BINOP_CASE(Add) - F32X4_BINOP_CASE(Sub) - F32X4_BINOP_CASE(Mul) - F32X4_BINOP_CASE(Div) - F32X4_BINOP_CASE(Min) - F32X4_BINOP_CASE(Max) - case IrOpcode::kF32x4Pmin: { - LowerFloatPseudoMinMax(node, machine()->Float32LessThan(), false, - rep_type); - break; - } - case IrOpcode::kF32x4Pmax: { - LowerFloatPseudoMinMax(node, machine()->Float32LessThan(), true, - rep_type); - break; - } -#undef F32X4_BINOP_CASE -#define F32X4_UNOP_CASE(name) \ - case IrOpcode::kF32x4##name: { \ - LowerUnaryOp(node, rep_type, machine()->Float32##name()); \ - break; \ - } - F32X4_UNOP_CASE(Abs) - F32X4_UNOP_CASE(Neg) - F32X4_UNOP_CASE(Sqrt) -#undef F32X4_UNOP_CASE - case IrOpcode::kF32x4Ceil: { - LowerUnaryOp(node, rep_type, machine()->Float32RoundUp().op()); - break; - } - case IrOpcode::kF32x4Floor: { - LowerUnaryOp(node, rep_type, machine()->Float32RoundDown().op()); - break; - } - case IrOpcode::kF32x4Trunc: { - LowerUnaryOp(node, rep_type, machine()->Float32RoundTruncate().op()); - break; - } - case IrOpcode::kF32x4NearestInt: { - LowerUnaryOp(node, rep_type, machine()->Float32RoundTiesEven().op()); - break; - } - case IrOpcode::kF32x4RecipApprox: - case IrOpcode::kF32x4RecipSqrtApprox: { - DCHECK_EQ(1, node->InputCount()); - Node** rep = GetReplacementsWithType(node->InputAt(0), rep_type); - Node** rep_node = zone()->NewArray<Node*>(num_lanes); - Node* float_one = graph()->NewNode(common()->Float32Constant(1.0)); - for (int i = 0; i < num_lanes; ++i) { - Node* tmp = rep[i]; - if (node->opcode() == IrOpcode::kF32x4RecipSqrtApprox) { - tmp = graph()->NewNode(machine()->Float32Sqrt(), rep[i]); - } - rep_node[i] = graph()->NewNode(machine()->Float32Div(), float_one, tmp); - } - ReplaceNode(node, rep_node, num_lanes); - break; - } - case IrOpcode::kF32x4SConvertI32x4: { - LowerUnaryOp(node, SimdType::kInt32x4, machine()->RoundInt32ToFloat32()); - break; - } - case IrOpcode::kF32x4UConvertI32x4: { - LowerUnaryOp(node, SimdType::kInt32x4, machine()->RoundUint32ToFloat32()); - break; - } - case IrOpcode::kF64x2Abs: { - LowerUnaryOp(node, rep_type, machine()->Float64Abs()); - break; - } - case IrOpcode::kF64x2Neg: { - LowerUnaryOp(node, rep_type, machine()->Float64Neg()); - break; - } - case IrOpcode::kF64x2Sqrt: { - LowerUnaryOp(node, rep_type, machine()->Float64Sqrt()); - break; - } - case IrOpcode::kF64x2Add: { - LowerBinaryOp(node, rep_type, machine()->Float64Add()); - break; - } - case IrOpcode::kF64x2Sub: { - LowerBinaryOp(node, rep_type, machine()->Float64Sub()); - break; - } - case IrOpcode::kF64x2Mul: { - LowerBinaryOp(node, rep_type, machine()->Float64Mul()); - break; - } - case IrOpcode::kF64x2Div: { - LowerBinaryOp(node, rep_type, machine()->Float64Div()); - break; - } - case IrOpcode::kF64x2Min: { - LowerBinaryOp(node, rep_type, machine()->Float64Min()); - break; - } - case IrOpcode::kF64x2Max: { - LowerBinaryOp(node, rep_type, machine()->Float64Max()); - break; - } - case IrOpcode::kF64x2Pmin: { - LowerFloatPseudoMinMax(node, machine()->Float64LessThan(), false, - rep_type); - break; - } - case IrOpcode::kF64x2Pmax: { - LowerFloatPseudoMinMax(node, machine()->Float64LessThan(), true, - rep_type); - break; - } - case IrOpcode::kF64x2Ceil: { - LowerUnaryOp(node, rep_type, machine()->Float64RoundUp().op()); - break; - } - case IrOpcode::kF64x2Floor: { - LowerUnaryOp(node, rep_type, machine()->Float64RoundDown().op()); - break; - } - case IrOpcode::kF64x2Trunc: { - LowerUnaryOp(node, rep_type, machine()->Float64RoundTruncate().op()); - break; - } - case IrOpcode::kF64x2NearestInt: { - LowerUnaryOp(node, rep_type, machine()->Float64RoundTiesEven().op()); - break; - } - case IrOpcode::kF64x2Splat: - case IrOpcode::kF32x4Splat: - case IrOpcode::kI64x2Splat: - case IrOpcode::kI32x4Splat: - case IrOpcode::kI16x8Splat: - case IrOpcode::kI8x16Splat: { - Node** rep_node = zone()->NewArray<Node*>(num_lanes); - Node* val = (HasReplacement(0, node->InputAt(0))) - ? GetReplacements(node->InputAt(0))[0] - : node->InputAt(0); - - // I16 and I8 are placed in Word32 nodes, we need to mask them - // accordingly, to account for overflows, then sign extend them. - if (node->opcode() == IrOpcode::kI16x8Splat) { - val = graph()->NewNode(machine()->SignExtendWord16ToInt32(), - Mask(val, kMask16)); - } else if (node->opcode() == IrOpcode::kI8x16Splat) { - val = graph()->NewNode(machine()->SignExtendWord8ToInt32(), - Mask(val, kMask8)); - } - - for (int i = 0; i < num_lanes; ++i) { - rep_node[i] = val; - } - ReplaceNode(node, rep_node, num_lanes); - break; - } - case IrOpcode::kF64x2ExtractLane: - case IrOpcode::kF32x4ExtractLane: - case IrOpcode::kI64x2ExtractLane: - case IrOpcode::kI32x4ExtractLane: - case IrOpcode::kI16x8ExtractLaneU: - case IrOpcode::kI16x8ExtractLaneS: - case IrOpcode::kI8x16ExtractLaneU: - case IrOpcode::kI8x16ExtractLaneS: { - int32_t lane = OpParameter<int32_t>(node->op()); - Node** rep_node = zone()->NewArray<Node*>(1); - rep_node[0] = GetReplacementsWithType(node->InputAt(0), rep_type)[lane]; - - // If unsigned, mask the top bits. - if (node->opcode() == IrOpcode::kI16x8ExtractLaneU) { - rep_node[0] = Mask(rep_node[0], kMask16); - } else if (node->opcode() == IrOpcode::kI8x16ExtractLaneU) { - rep_node[0] = Mask(rep_node[0], kMask8); - } - - ReplaceNode(node, rep_node, 1); - break; - } - case IrOpcode::kF64x2ReplaceLane: - case IrOpcode::kF32x4ReplaceLane: - case IrOpcode::kI64x2ReplaceLane: - case IrOpcode::kI32x4ReplaceLane: - case IrOpcode::kI16x8ReplaceLane: - case IrOpcode::kI8x16ReplaceLane: { - DCHECK_EQ(2, node->InputCount()); - Node* repNode = node->InputAt(1); - int32_t lane = OpParameter<int32_t>(node->op()); - Node** old_rep_node = GetReplacementsWithType(node->InputAt(0), rep_type); - Node** rep_node = zone()->NewArray<Node*>(num_lanes); - for (int i = 0; i < num_lanes; ++i) { - rep_node[i] = old_rep_node[i]; - } - if (HasReplacement(0, repNode)) { - rep_node[lane] = GetReplacements(repNode)[0]; - } else { - rep_node[lane] = repNode; - } - - // The replacement nodes for these opcodes are in Word32, and we always - // store nodes in sign extended form (and mask to account for overflows.) - if (node->opcode() == IrOpcode::kI16x8ReplaceLane) { - rep_node[lane] = graph()->NewNode(machine()->SignExtendWord16ToInt32(), - Mask(rep_node[lane], kMask16)); - } else if (node->opcode() == IrOpcode::kI8x16ReplaceLane) { - rep_node[lane] = graph()->NewNode(machine()->SignExtendWord8ToInt32(), - Mask(rep_node[lane], kMask8)); - } - - ReplaceNode(node, rep_node, num_lanes); - break; - } -#define COMPARISON_CASE(type, simd_op, lowering_op, invert) \ - case IrOpcode::simd_op: { \ - LowerCompareOp(node, SimdType::k##type, machine()->lowering_op(), invert); \ - break; \ - } - COMPARISON_CASE(Float64x2, kF64x2Eq, Float64Equal, false) - COMPARISON_CASE(Float64x2, kF64x2Lt, Float64LessThan, false) - COMPARISON_CASE(Float64x2, kF64x2Le, Float64LessThanOrEqual, false) - COMPARISON_CASE(Float32x4, kF32x4Eq, Float32Equal, false) - COMPARISON_CASE(Float32x4, kF32x4Lt, Float32LessThan, false) - COMPARISON_CASE(Float32x4, kF32x4Le, Float32LessThanOrEqual, false) - COMPARISON_CASE(Float32x4, kF32x4Gt, Float32LessThan, true) - COMPARISON_CASE(Float32x4, kF32x4Ge, Float32LessThanOrEqual, true) - COMPARISON_CASE(Int64x2, kI64x2Eq, Word64Equal, false) - COMPARISON_CASE(Int32x4, kI32x4Eq, Word32Equal, false) - COMPARISON_CASE(Int32x4, kI32x4LtS, Int32LessThan, false) - COMPARISON_CASE(Int32x4, kI32x4LeS, Int32LessThanOrEqual, false) - COMPARISON_CASE(Int32x4, kI32x4GtS, Int32LessThan, true) - COMPARISON_CASE(Int32x4, kI32x4GeS, Int32LessThanOrEqual, true) - COMPARISON_CASE(Int32x4, kI32x4LtU, Uint32LessThan, false) - COMPARISON_CASE(Int32x4, kI32x4LeU, Uint32LessThanOrEqual, false) - COMPARISON_CASE(Int32x4, kI32x4GtU, Uint32LessThan, true) - COMPARISON_CASE(Int32x4, kI32x4GeU, Uint32LessThanOrEqual, true) - COMPARISON_CASE(Int16x8, kI16x8Eq, Word32Equal, false) - COMPARISON_CASE(Int16x8, kI16x8LtS, Int32LessThan, false) - COMPARISON_CASE(Int16x8, kI16x8LeS, Int32LessThanOrEqual, false) - COMPARISON_CASE(Int16x8, kI16x8GtS, Int32LessThan, true) - COMPARISON_CASE(Int16x8, kI16x8GeS, Int32LessThanOrEqual, true) - COMPARISON_CASE(Int16x8, kI16x8LtU, Uint32LessThan, false) - COMPARISON_CASE(Int16x8, kI16x8LeU, Uint32LessThanOrEqual, false) - COMPARISON_CASE(Int16x8, kI16x8GtU, Uint32LessThan, true) - COMPARISON_CASE(Int16x8, kI16x8GeU, Uint32LessThanOrEqual, true) - COMPARISON_CASE(Int8x16, kI8x16Eq, Word32Equal, false) - COMPARISON_CASE(Int8x16, kI8x16LtS, Int32LessThan, false) - COMPARISON_CASE(Int8x16, kI8x16LeS, Int32LessThanOrEqual, false) - COMPARISON_CASE(Int8x16, kI8x16GtS, Int32LessThan, true) - COMPARISON_CASE(Int8x16, kI8x16GeS, Int32LessThanOrEqual, true) - COMPARISON_CASE(Int8x16, kI8x16LtU, Uint32LessThan, false) - COMPARISON_CASE(Int8x16, kI8x16LeU, Uint32LessThanOrEqual, false) - COMPARISON_CASE(Int8x16, kI8x16GtU, Uint32LessThan, true) - COMPARISON_CASE(Int8x16, kI8x16GeU, Uint32LessThanOrEqual, true) -#undef COMPARISON_CASE - case IrOpcode::kF64x2Ne: { - LowerNotEqual(node, SimdType::kFloat64x2, machine()->Float64Equal()); - break; - } - case IrOpcode::kF32x4Ne: { - LowerNotEqual(node, SimdType::kFloat32x4, machine()->Float32Equal()); - break; - } - case IrOpcode::kI64x2Ne: { - LowerNotEqual(node, SimdType::kInt64x2, machine()->Word64Equal()); - break; - } - case IrOpcode::kI32x4Ne: { - LowerNotEqual(node, SimdType::kInt32x4, machine()->Word32Equal()); - break; - } - case IrOpcode::kI16x8Ne: { - LowerNotEqual(node, SimdType::kInt16x8, machine()->Word32Equal()); - break; - } - case IrOpcode::kI8x16Ne: { - LowerNotEqual(node, SimdType::kInt8x16, machine()->Word32Equal()); - break; - } - case IrOpcode::kS128Select: { - DCHECK_EQ(3, node->InputCount()); - Node** boolean_input = - GetReplacementsWithType(node->InputAt(0), rep_type); - Node** rep_left = GetReplacementsWithType(node->InputAt(1), rep_type); - Node** rep_right = GetReplacementsWithType(node->InputAt(2), rep_type); - Node** rep_node = zone()->NewArray<Node*>(num_lanes); - for (int i = 0; i < num_lanes; ++i) { - Node* tmp1 = - graph()->NewNode(machine()->Word32Xor(), rep_left[i], rep_right[i]); - Node* tmp2 = - graph()->NewNode(machine()->Word32And(), boolean_input[i], tmp1); - rep_node[i] = - graph()->NewNode(machine()->Word32Xor(), rep_right[i], tmp2); - } - ReplaceNode(node, rep_node, num_lanes); - break; - } - case IrOpcode::kI8x16Swizzle: { - DCHECK_EQ(2, node->InputCount()); - Node** rep_left = GetReplacementsWithType(node->InputAt(0), rep_type); - Node** indices = GetReplacementsWithType(node->InputAt(1), rep_type); - Node** rep_nodes = zone()->NewArray<Node*>(num_lanes); - Node* stack_slot = graph()->NewNode( - machine()->StackSlot(MachineRepresentation::kSimd128)); - - // Push all num_lanes values into stack slot. - const Operator* store_op = machine()->Store( - StoreRepresentation(MachineRepresentation::kWord8, kNoWriteBarrier)); - Node* effect_input = graph()->start(); - for (int i = num_lanes - 1; i >= 0; i--) { - // We want all the stores to happen first before any of the loads - // below, so connect them via effect edge from i-1 to i. - Node* store = - graph()->NewNode(store_op, stack_slot, mcgraph_->Int32Constant(i), - rep_left[i], effect_input, graph()->start()); - effect_input = store; - } - - for (int i = num_lanes - 1; i >= 0; i--) { - // Only select lane when index is < num_lanes, otherwise write 0 to - // lane. Use Uint32 to take care of negative indices. - Diamond d(graph(), common(), - graph()->NewNode(machine()->Uint32LessThan(), indices[i], - mcgraph_->Int32Constant(num_lanes))); - - Node* load = - graph()->NewNode(machine()->Load(LoadRepresentation::Uint8()), - stack_slot, indices[i], effect_input, d.if_true); - - rep_nodes[i] = d.Phi(MachineRepresentation::kWord8, load, - mcgraph_->Int32Constant(0)); - } - - ReplaceNode(node, rep_nodes, num_lanes); - break; - } - case IrOpcode::kI8x16Shuffle: { - DCHECK_EQ(2, node->InputCount()); - S128ImmediateParameter shuffle = S128ImmediateParameterOf(node->op()); - Node** rep_left = GetReplacementsWithType(node->InputAt(0), rep_type); - Node** rep_right = GetReplacementsWithType(node->InputAt(1), rep_type); - Node** rep_node = zone()->NewArray<Node*>(16); - for (int i = 0; i < 16; i++) { - int lane = shuffle[i]; - rep_node[i] = lane < 16 ? rep_left[lane] : rep_right[lane - 16]; - } - ReplaceNode(node, rep_node, 16); - break; - } - case IrOpcode::kV128AnyTrue: { - DCHECK_EQ(1, node->InputCount()); - // AnyTrue always returns a I32x4, and can work with inputs of any shape, - // but we still need GetReplacementsWithType if input is float. - DCHECK_EQ(ReplacementType(node), SimdType::kInt32x4); - Node** reps = GetReplacementsWithType(node->InputAt(0), rep_type); - Node** rep_node = zone()->NewArray<Node*>(1); - Node* true_node = mcgraph_->Int32Constant(1); - Node* zero = mcgraph_->Int32Constant(0); - Node* tmp_result = zero; - for (int i = 0; i < num_lanes; ++i) { - Diamond d(graph(), common(), - graph()->NewNode(machine()->Word32Equal(), reps[i], zero)); - tmp_result = - d.Phi(MachineRepresentation::kWord32, tmp_result, true_node); - } - rep_node[0] = tmp_result; - ReplaceNode(node, rep_node, 1); - break; - } - case IrOpcode::kI64x2AllTrue: { - LowerAllTrueOp(node, SimdType::kInt64x2); - break; - } - case IrOpcode::kI32x4AllTrue: { - LowerAllTrueOp(node, SimdType::kInt32x4); - break; - } - case IrOpcode::kI16x8AllTrue: { - LowerAllTrueOp(node, SimdType::kInt16x8); - break; - } - case IrOpcode::kI8x16AllTrue: { - LowerAllTrueOp(node, SimdType::kInt8x16); - break; - } - case IrOpcode::kI8x16BitMask: { - LowerBitMaskOp(node, rep_type, 7); - break; - } - case IrOpcode::kI16x8BitMask: { - LowerBitMaskOp(node, rep_type, 15); - break; - } - case IrOpcode::kI32x4BitMask: { - LowerBitMaskOp(node, rep_type, 31); - break; - } - case IrOpcode::kI8x16RoundingAverageU: - case IrOpcode::kI16x8RoundingAverageU: { - DCHECK_EQ(2, node->InputCount()); - Node** rep_left = GetReplacementsWithType(node->InputAt(0), rep_type); - Node** rep_right = GetReplacementsWithType(node->InputAt(1), rep_type); - int num_lanes = NumLanes(rep_type); - Node** rep_node = zone()->NewArray<Node*>(num_lanes); - // Nodes are stored signed, so mask away the top bits. - // rounding_average(left, right) = (left + right + 1) >> 1 - const int bit_mask = num_lanes == 16 ? kMask8 : kMask16; - for (int i = 0; i < num_lanes; ++i) { - Node* mask_left = graph()->NewNode(machine()->Word32And(), rep_left[i], - mcgraph_->Int32Constant(bit_mask)); - Node* mask_right = - graph()->NewNode(machine()->Word32And(), rep_right[i], - mcgraph_->Int32Constant(bit_mask)); - Node* left_plus_right_plus_one = graph()->NewNode( - machine()->Int32Add(), - graph()->NewNode(machine()->Int32Add(), mask_left, mask_right), - mcgraph_->Int32Constant(1)); - rep_node[i] = - graph()->NewNode(machine()->Word32Shr(), left_plus_right_plus_one, - mcgraph_->Int32Constant(1)); - } - ReplaceNode(node, rep_node, num_lanes); - break; - } -#define LOWER_EXT_MUL(OP, MULTIPLY, INPUT_TYPE, LOW, SIGNED) \ - case IrOpcode::OP: { \ - LowerExtMul(node, machine()->MULTIPLY(), rep_type, SimdType::INPUT_TYPE, \ - LOW, SIGNED); \ - break; \ - } - LOWER_EXT_MUL(kI16x8ExtMulLowI8x16S, Int32Mul, kInt8x16, true, true) - LOWER_EXT_MUL(kI16x8ExtMulLowI8x16U, Int32Mul, kInt8x16, true, false) - LOWER_EXT_MUL(kI16x8ExtMulHighI8x16S, Int32Mul, kInt8x16, false, true) - LOWER_EXT_MUL(kI16x8ExtMulHighI8x16U, Int32Mul, kInt8x16, false, false) - LOWER_EXT_MUL(kI32x4ExtMulLowI16x8S, Int32Mul, kInt16x8, true, true) - LOWER_EXT_MUL(kI32x4ExtMulLowI16x8U, Int32Mul, kInt16x8, true, false) - LOWER_EXT_MUL(kI32x4ExtMulHighI16x8S, Int32Mul, kInt16x8, false, true) - LOWER_EXT_MUL(kI32x4ExtMulHighI16x8U, Int32Mul, kInt16x8, false, false) - LOWER_EXT_MUL(kI64x2ExtMulLowI32x4S, Int64Mul, kInt32x4, true, true) - LOWER_EXT_MUL(kI64x2ExtMulLowI32x4U, Int64Mul, kInt32x4, true, false) - LOWER_EXT_MUL(kI64x2ExtMulHighI32x4S, Int64Mul, kInt32x4, false, true) - LOWER_EXT_MUL(kI64x2ExtMulHighI32x4U, Int64Mul, kInt32x4, false, false) - default: { - DefaultLowering(node); - } - } -} - -Node* SimdScalarLowering::ExtendNode(Node* node, SimdType rep_type, - bool is_signed) { - if (rep_type == SimdType::kInt8x16 && !is_signed) { - node = Mask(node, kMask8); - } else if (rep_type == SimdType::kInt16x8 && !is_signed) { - node = Mask(node, kMask16); - } else if (rep_type == SimdType::kInt32x4) { - if (is_signed) { - node = graph()->NewNode(machine()->SignExtendWord32ToInt64(), node); - } else { - node = graph()->NewNode(machine()->ChangeUint32ToUint64(), node); - } - } - return node; -} - -void SimdScalarLowering::LowerExtMul(Node* node, const Operator* multiply, - SimdType output_type, SimdType input_type, - bool low, bool is_signed) { - DCHECK_EQ(2, node->InputCount()); - int num_lanes = NumLanes(output_type); - Node** rep_left = GetReplacementsWithType(node->InputAt(0), input_type); - Node** rep_right = GetReplacementsWithType(node->InputAt(1), input_type); - int start_index = low ? 0 : num_lanes; - Node** rep_node = zone()->NewArray<Node*>(num_lanes); - for (int i = 0; i < num_lanes; i++) { - Node* left = ExtendNode(rep_left[start_index + i], input_type, is_signed); - Node* right = ExtendNode(rep_right[start_index + i], input_type, is_signed); - rep_node[i] = graph()->NewNode(multiply, left, right); - } - ReplaceNode(node, rep_node, num_lanes); -} - -bool SimdScalarLowering::DefaultLowering(Node* node) { - bool something_changed = false; - for (int i = NodeProperties::PastValueIndex(node) - 1; i >= 0; i--) { - Node* input = node->InputAt(i); - if (HasReplacement(0, input)) { - something_changed = true; - node->ReplaceInput(i, GetReplacements(input)[0]); - } - if (ReplacementCount(input) > 1 && HasReplacement(1, input)) { - something_changed = true; - for (int j = 1; j < ReplacementCount(input); ++j) { - node->InsertInput(zone(), i + j, GetReplacements(input)[j]); - } - } - } - return something_changed; -} - -void SimdScalarLowering::ReplaceNode(Node* old, Node** new_nodes, int count) { - replacements_[old->id()].node = zone()->NewArray<Node*>(count); - for (int i = 0; i < count; ++i) { - replacements_[old->id()].node[i] = new_nodes[i]; - } - replacements_[old->id()].num_replacements = count; -} - -bool SimdScalarLowering::HasReplacement(size_t index, Node* node) { - return replacements_[node->id()].node != nullptr && - replacements_[node->id()].node[index] != nullptr; -} - -SimdScalarLowering::SimdType SimdScalarLowering::ReplacementType(Node* node) { - return replacements_[node->id()].type; -} - -Node** SimdScalarLowering::GetReplacements(Node* node) { - Node** result = replacements_[node->id()].node; - DCHECK(result); - return result; -} - -int SimdScalarLowering::ReplacementCount(Node* node) { - return replacements_[node->id()].num_replacements; -} - -void SimdScalarLowering::Int32ToFloat32(Node** replacements, Node** result) { - for (int i = 0; i < kNumLanes32; ++i) { - if (replacements[i] != nullptr) { - result[i] = - graph()->NewNode(machine()->BitcastInt32ToFloat32(), replacements[i]); - } else { - result[i] = nullptr; - } - } -} - -void SimdScalarLowering::Int64ToFloat64(Node** replacements, Node** result) { - for (int i = 0; i < kNumLanes64; ++i) { - if (replacements[i] != nullptr) { - result[i] = - graph()->NewNode(machine()->BitcastInt64ToFloat64(), replacements[i]); - } else { - result[i] = nullptr; - } - } -} - -void SimdScalarLowering::Float64ToInt64(Node** replacements, Node** result) { - for (int i = 0; i < kNumLanes64; ++i) { - if (replacements[i] != nullptr) { - result[i] = - graph()->NewNode(machine()->BitcastFloat64ToInt64(), replacements[i]); - } else { - result[i] = nullptr; - } - } -} - -void SimdScalarLowering::Float32ToInt32(Node** replacements, Node** result) { - for (int i = 0; i < kNumLanes32; ++i) { - if (replacements[i] != nullptr) { - result[i] = - graph()->NewNode(machine()->BitcastFloat32ToInt32(), replacements[i]); - } else { - result[i] = nullptr; - } - } -} - -void SimdScalarLowering::Int64ToInt32(Node** replacements, Node** result) { - const int num_ints = sizeof(int64_t) / sizeof(int32_t); - const int bit_size = sizeof(int32_t) * 8; - const Operator* truncate = machine()->TruncateInt64ToInt32(); - - for (int i = 0; i < kNumLanes64; i++) { - if (replacements[i] != nullptr) { - for (int j = 0; j < num_ints; j++) { - result[num_ints * i + j] = graph()->NewNode( - truncate, graph()->NewNode(machine()->Word64Sar(), replacements[i], - mcgraph_->Int32Constant(j * bit_size))); - } - } else { - for (int j = 0; j < num_ints; j++) { - result[num_ints * i + j] = nullptr; - } - } - } -} - -template <typename T> -void SimdScalarLowering::Int32ToSmallerInt(Node** replacements, Node** result) { - const int num_ints = sizeof(int32_t) / sizeof(T); - const int bit_size = sizeof(T) * 8; - const Operator* sign_extend; - switch (sizeof(T)) { - case 1: - sign_extend = machine()->SignExtendWord8ToInt32(); - break; - case 2: - sign_extend = machine()->SignExtendWord16ToInt32(); - break; - default: - UNREACHABLE(); - } - - for (int i = 0; i < kNumLanes32; i++) { - if (replacements[i] != nullptr) { - for (int j = 0; j < num_ints; j++) { - result[num_ints * i + j] = graph()->NewNode( - sign_extend, - graph()->NewNode(machine()->Word32Shr(), replacements[i], - mcgraph_->Int32Constant(j * bit_size))); - } - } else { - for (int j = 0; j < num_ints; j++) { - result[num_ints * i + j] = nullptr; - } - } - } -} - -template <typename T> -void SimdScalarLowering::SmallerIntToInt32(Node** replacements, Node** result) { - const int num_ints = sizeof(int32_t) / sizeof(T); - const int bit_size = sizeof(T) * 8; - const int bit_mask = (1 << bit_size) - 1; - - for (int i = 0; i < kNumLanes32; ++i) { - result[i] = mcgraph_->Int32Constant(0); - for (int j = 0; j < num_ints; j++) { - if (replacements[num_ints * i + j] != nullptr) { - Node* clean_bits = graph()->NewNode(machine()->Word32And(), - replacements[num_ints * i + j], - mcgraph_->Int32Constant(bit_mask)); - Node* shift = graph()->NewNode(machine()->Word32Shl(), clean_bits, - mcgraph_->Int32Constant(j * bit_size)); - result[i] = graph()->NewNode(machine()->Word32Or(), result[i], shift); - } - } - } -} - -void SimdScalarLowering::Int32ToInt64(Node** replacements, Node** result) { - const int num_ints = sizeof(int64_t) / sizeof(int32_t); - - for (int i = 0; i < kNumLanes64; i++) { - Node* i64 = graph()->NewNode(machine()->ChangeUint32ToUint64(), - replacements[num_ints * i + 1]); - Node* high = graph()->NewNode(machine()->Word64Shl(), i64, - mcgraph_->Int32Constant(32)); - Node* i64_low = graph()->NewNode(machine()->ChangeUint32ToUint64(), - replacements[num_ints * i]); - result[i] = graph()->NewNode(machine()->Word64Or(), high, i64_low); - } -} - -Node** SimdScalarLowering::GetReplacementsWithType(Node* node, SimdType type) { - // Operations like extract lane, bitmask, any_true, all_true replaces a SIMD - // node with a scalar. Those won't be correctly handled here. They should be - // special cased and replaced with the appropriate scalar. - DCHECK_LT(1, ReplacementCount(node)); - - Node** replacements = GetReplacements(node); - if (type == ReplacementType(node)) { - return replacements; - } - - int num_lanes = NumLanes(type); - Node** result = zone()->NewArray<Node*>(num_lanes); - - switch (type) { - case SimdType::kInt64x2: { - switch (ReplacementType(node)) { - case SimdType::kInt64x2: { - UNREACHABLE(); - } - case SimdType::kInt32x4: { - Int32ToInt64(replacements, result); - break; - } - case SimdType::kInt16x8: { - Node** to_int32 = zone()->NewArray<Node*>(kNumLanes32); - SmallerIntToInt32<int16_t>(replacements, to_int32); - Int32ToInt64(to_int32, result); - break; - } - case SimdType::kInt8x16: { - Node** to_int32 = zone()->NewArray<Node*>(kNumLanes32); - SmallerIntToInt32<int8_t>(replacements, to_int32); - Int32ToInt64(to_int32, result); - break; - } - case SimdType::kFloat64x2: { - Float64ToInt64(replacements, result); - break; - } - case SimdType::kFloat32x4: { - Node** to_int32 = zone()->NewArray<Node*>(kNumLanes32); - Float32ToInt32(replacements, to_int32); - Int32ToInt64(to_int32, result); - break; - } - } - break; - } - case SimdType::kInt32x4: { - switch (ReplacementType(node)) { - case SimdType::kInt64x2: { - Int64ToInt32(replacements, result); - break; - } - case SimdType::kInt32x4: { - UNREACHABLE(); - } - case SimdType::kInt16x8: { - SmallerIntToInt32<int16_t>(replacements, result); - break; - } - case SimdType::kInt8x16: { - SmallerIntToInt32<int8_t>(replacements, result); - break; - } - case SimdType::kFloat64x2: { - Node** float64_to_int64 = zone()->NewArray<Node*>(kNumLanes64); - Float64ToInt64(replacements, float64_to_int64); - Int64ToInt32(float64_to_int64, result); - break; - } - case SimdType::kFloat32x4: { - Float32ToInt32(replacements, result); - break; - } - } - break; - } - case SimdType::kInt16x8: { - switch (ReplacementType(node)) { - case SimdType::kInt64x2: { - Node** to_int32 = zone()->NewArray<Node*>(kNumLanes32); - Int64ToInt32(replacements, to_int32); - Int32ToSmallerInt<int16_t>(to_int32, result); - break; - } - case SimdType::kInt32x4: { - Int32ToSmallerInt<int16_t>(replacements, result); - break; - } - case SimdType::kInt16x8: { - UNREACHABLE(); - } - case SimdType::kInt8x16: { - Node** to_int32 = zone()->NewArray<Node*>(kNumLanes32); - SmallerIntToInt32<int8_t>(replacements, to_int32); - Int32ToSmallerInt<int16_t>(to_int32, result); - break; - } - case SimdType::kFloat64x2: { - Node** to_int64 = zone()->NewArray<Node*>(kNumLanes64); - Node** to_int32 = zone()->NewArray<Node*>(kNumLanes32); - Float64ToInt64(replacements, to_int64); - Int64ToInt32(to_int64, to_int32); - Int32ToSmallerInt<int16_t>(to_int32, result); - break; - } - case SimdType::kFloat32x4: { - Node** float32_to_int32 = zone()->NewArray<Node*>(kNumLanes32); - Float32ToInt32(replacements, float32_to_int32); - Int32ToSmallerInt<int16_t>(float32_to_int32, result); - break; - } - } - break; - } - case SimdType::kInt8x16: { - switch (ReplacementType(node)) { - case SimdType::kInt64x2: { - Node** int64_to_int32 = zone()->NewArray<Node*>(kNumLanes32); - Int64ToInt32(replacements, int64_to_int32); - Int32ToSmallerInt<int8_t>(int64_to_int32, result); - break; - } - case SimdType::kInt32x4: { - Int32ToSmallerInt<int8_t>(replacements, result); - break; - } - case SimdType::kInt16x8: { - Node** int16_to_int32 = zone()->NewArray<Node*>(kNumLanes32); - SmallerIntToInt32<int16_t>(replacements, int16_to_int32); - Int32ToSmallerInt<int8_t>(int16_to_int32, result); - break; - } - case SimdType::kInt8x16: { - UNREACHABLE(); - } - case SimdType::kFloat64x2: { - Node** to_int64 = zone()->NewArray<Node*>(kNumLanes64); - Node** to_int32 = zone()->NewArray<Node*>(kNumLanes32); - Float64ToInt64(replacements, to_int64); - Int64ToInt32(to_int64, to_int32); - Int32ToSmallerInt<int8_t>(to_int32, result); - break; - } - case SimdType::kFloat32x4: { - Node** float32_to_int32 = zone()->NewArray<Node*>(kNumLanes32); - Float32ToInt32(replacements, float32_to_int32); - Int32ToSmallerInt<int8_t>(float32_to_int32, result); - break; - } - } - break; - } - case SimdType::kFloat64x2: { - switch (ReplacementType(node)) { - case SimdType::kInt64x2: { - Int64ToFloat64(replacements, result); - break; - } - case SimdType::kInt32x4: { - Node** int32_to_int64 = zone()->NewArray<Node*>(kNumLanes64); - Int32ToInt64(replacements, int32_to_int64); - Int64ToFloat64(int32_to_int64, result); - break; - } - case SimdType::kInt16x8: { - Node** to_int32 = zone()->NewArray<Node*>(kNumLanes32); - Node** to_int64 = zone()->NewArray<Node*>(kNumLanes64); - SmallerIntToInt32<int16_t>(replacements, to_int32); - Int32ToInt64(to_int32, to_int64); - Int64ToFloat64(to_int64, result); - break; - } - case SimdType::kInt8x16: { - Node** to_int32 = zone()->NewArray<Node*>(kNumLanes32); - Node** to_int64 = zone()->NewArray<Node*>(kNumLanes64); - SmallerIntToInt32<int8_t>(replacements, to_int32); - Int32ToInt64(to_int32, to_int64); - Int64ToFloat64(to_int64, result); - break; - } - case SimdType::kFloat64x2: { - UNREACHABLE(); - } - case SimdType::kFloat32x4: { - Node** to_int32 = zone()->NewArray<Node*>(kNumLanes32); - Node** to_int64 = zone()->NewArray<Node*>(kNumLanes64); - Float32ToInt32(replacements, to_int32); - Int32ToInt64(to_int32, to_int64); - Int64ToFloat64(to_int64, result); - break; - } - } - break; - } - case SimdType::kFloat32x4: { - switch (ReplacementType(node)) { - case SimdType::kInt64x2: { - Node** to_int32 = zone()->NewArray<Node*>(kNumLanes32); - Int64ToInt32(replacements, to_int32); - Int32ToFloat32(to_int32, result); - break; - } - case SimdType::kInt32x4: { - Int32ToFloat32(replacements, result); - break; - } - case SimdType::kInt16x8: { - Node** to_int32 = zone()->NewArray<Node*>(kNumLanes32); - SmallerIntToInt32<int16_t>(replacements, to_int32); - Int32ToFloat32(to_int32, result); - break; - } - case SimdType::kInt8x16: { - SmallerIntToInt32<int8_t>(replacements, result); - Int32ToFloat32(result, result); - break; - } - case SimdType::kFloat64x2: { - Node** float64_to_int64 = zone()->NewArray<Node*>(kNumLanes64); - Node** int64_to_int32 = zone()->NewArray<Node*>(kNumLanes32); - Float64ToInt64(replacements, float64_to_int64); - Int64ToInt32(float64_to_int64, int64_to_int32); - Int32ToFloat32(int64_to_int32, result); - break; - } - case SimdType::kFloat32x4: { - UNREACHABLE(); - } - } - break; - } - } - return result; -} - -void SimdScalarLowering::PreparePhiReplacement(Node* phi) { - MachineRepresentation rep = PhiRepresentationOf(phi->op()); - if (rep == MachineRepresentation::kSimd128) { - // We have to create the replacements for a phi node before we actually - // lower the phi to break potential cycles in the graph. The replacements of - // input nodes do not exist yet, so we use a placeholder node to pass the - // graph verifier. - int value_count = phi->op()->ValueInputCount(); - SimdType type = ReplacementType(phi); - int num_lanes = NumLanes(type); - Node*** inputs_rep = zone()->NewArray<Node**>(num_lanes); - for (int i = 0; i < num_lanes; ++i) { - inputs_rep[i] = zone()->NewArray<Node*>(value_count + 1); - inputs_rep[i][value_count] = NodeProperties::GetControlInput(phi, 0); - } - for (int i = 0; i < value_count; ++i) { - for (int j = 0; j < num_lanes; ++j) { - inputs_rep[j][i] = placeholder_; - } - } - Node** rep_nodes = zone()->NewArray<Node*>(num_lanes); - for (int i = 0; i < num_lanes; ++i) { - rep_nodes[i] = graph()->NewNode( - common()->Phi(MachineTypeFrom(type).representation(), value_count), - value_count + 1, inputs_rep[i], false); - } - ReplaceNode(phi, rep_nodes, num_lanes); - } -} -} // namespace compiler -} // namespace internal -} // namespace v8 diff --git a/deps/v8/src/compiler/simd-scalar-lowering.h b/deps/v8/src/compiler/simd-scalar-lowering.h deleted file mode 100644 index d67c389d16..0000000000 --- a/deps/v8/src/compiler/simd-scalar-lowering.h +++ /dev/null @@ -1,150 +0,0 @@ -// Copyright 2016 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef V8_COMPILER_SIMD_SCALAR_LOWERING_H_ -#define V8_COMPILER_SIMD_SCALAR_LOWERING_H_ - -#include "src/compiler/common-operator.h" -#include "src/compiler/diamond.h" -#include "src/compiler/graph.h" -#include "src/compiler/machine-graph.h" -#include "src/compiler/machine-operator.h" -#include "src/compiler/node-marker.h" -#include "src/compiler/simplified-operator.h" -#include "src/zone/zone-containers.h" - -namespace v8 { -namespace internal { - -template <typename T> -class Signature; - -namespace compiler { - -class SimdScalarLowering { - public: - SimdScalarLowering(MachineGraph* mcgraph, - SimplifiedOperatorBuilder* simplified, - Signature<MachineRepresentation>* signature); - - void LowerGraph(); - - int GetParameterCountAfterLowering(); - - private: - enum class State : uint8_t { kUnvisited, kOnStack, kVisited }; - - enum class SimdType : uint8_t { - kFloat64x2, - kFloat32x4, - kInt64x2, - kInt32x4, - kInt16x8, - kInt8x16 - }; - -#if defined(V8_TARGET_BIG_ENDIAN) - static constexpr int kLaneOffsets[16] = {15, 14, 13, 12, 11, 10, 9, 8, - 7, 6, 5, 4, 3, 2, 1, 0}; -#else - static constexpr int kLaneOffsets[16] = {0, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15}; -#endif - struct Replacement { - Node** node = nullptr; - SimdType type; // represents output type - int num_replacements = 0; - }; - - struct NodeState { - Node* node; - int input_index; - }; - - Zone* zone() const { return mcgraph_->zone(); } - Graph* graph() const { return mcgraph_->graph(); } - MachineOperatorBuilder* machine() const { return mcgraph_->machine(); } - CommonOperatorBuilder* common() const { return mcgraph_->common(); } - SimplifiedOperatorBuilder* simplified() const { return simplified_; } - Signature<MachineRepresentation>* signature() const { return signature_; } - - void LowerNode(Node* node); - bool DefaultLowering(Node* node); - - int NumLanes(SimdType type); - void ReplaceNode(Node* old, Node** new_nodes, int count); - bool HasReplacement(size_t index, Node* node); - Node** GetReplacements(Node* node); - int ReplacementCount(Node* node); - void Float64ToInt64(Node** replacements, Node** result); - void Float32ToInt32(Node** replacements, Node** result); - void Int32ToFloat32(Node** replacements, Node** result); - void Int64ToFloat64(Node** replacements, Node** result); - void Int64ToInt32(Node** replacements, Node** result); - template <typename T> - void Int32ToSmallerInt(Node** replacements, Node** result); - template <typename T> - void SmallerIntToInt32(Node** replacements, Node** result); - void Int32ToInt64(Node** replacements, Node** result); - Node** GetReplacementsWithType(Node* node, SimdType type); - SimdType ReplacementType(Node* node); - void PreparePhiReplacement(Node* phi); - void SetLoweredType(Node* node, Node* output); - void GetIndexNodes(Node* index, Node** new_indices, SimdType type); - void LowerLoadOp(Node* node, SimdType type); - void LowerLoadTransformOp(Node* node, SimdType type); - void LowerStoreOp(Node* node); - void LowerBinaryOp(Node* node, SimdType input_rep_type, const Operator* op, - bool not_horizontal = true); - Node* ConstructPhiForComparison(Diamond d, SimdType rep_type, int true_value, - int false_value); - void LowerCompareOp(Node* node, SimdType input_rep_type, const Operator* op, - bool invert_inputs = false); - Node* FixUpperBits(Node* input, int32_t shift); - void LowerBinaryOpForSmallInt(Node* node, SimdType input_rep_type, - const Operator* op, bool not_horizontal = true); - Node* Mask(Node* input, int32_t mask); - void LowerSaturateBinaryOp(Node* node, SimdType input_rep_type, - const Operator* op, bool is_signed); - void LowerUnaryOp(Node* node, SimdType input_rep_type, const Operator* op); - void LowerIntMinMax(Node* node, const Operator* op, bool is_max, - SimdType type); - void LowerConvertFromFloat(Node* node, bool is_signed); - void LowerConvertFromInt(Node* node, SimdType input_rep_type, - SimdType output_rep_type, bool is_signed, - int start_index); - void LowerPack(Node* node, SimdType input_rep_type, SimdType output_rep_type, - bool is_signed); - void LowerShiftOp(Node* node, SimdType type); - Node* BuildF64Trunc(Node* input); - void LowerNotEqual(Node* node, SimdType input_rep_type, const Operator* op); - MachineType MachineTypeFrom(SimdType simdType); - void LowerBitMaskOp(Node* node, SimdType rep_type, int msb_index); - void LowerAllTrueOp(Node* node, SimdType rep_type); - void LowerFloatPseudoMinMax(Node* node, const Operator* op, bool is_max, - SimdType type); - void LowerExtMul(Node* node, const Operator* op, SimdType output_type, - SimdType input_type, bool low, bool is_signed); - - // Extends node, which is a lowered node of type rep_type, e.g. int8, int16, - // int32 to a 32-bit or 64-bit node. node should be a lowered node (i.e. not a - // SIMD node). The assumption here is that small ints are stored sign - // extended. - Node* ExtendNode(Node* node, SimdType rep_type, bool is_signed); - - MachineGraph* const mcgraph_; - SimplifiedOperatorBuilder* const simplified_; - NodeMarker<State> state_; - ZoneDeque<NodeState> stack_; - Replacement* replacements_; - Signature<MachineRepresentation>* signature_; - Node* placeholder_; - int parameter_count_after_lowering_; -}; - -} // namespace compiler -} // namespace internal -} // namespace v8 - -#endif // V8_COMPILER_SIMD_SCALAR_LOWERING_H_ diff --git a/deps/v8/src/compiler/simplified-lowering.cc b/deps/v8/src/compiler/simplified-lowering.cc index d5389df6ac..75de8ecc42 100644 --- a/deps/v8/src/compiler/simplified-lowering.cc +++ b/deps/v8/src/compiler/simplified-lowering.cc @@ -101,18 +101,20 @@ MachineRepresentation MachineRepresentationFromArrayType( } UseInfo CheckedUseInfoAsWord32FromHint( - NumberOperationHint hint, const FeedbackSource& feedback = FeedbackSource(), - IdentifyZeros identify_zeros = kDistinguishZeros) { + NumberOperationHint hint, IdentifyZeros identify_zeros = kDistinguishZeros, + const FeedbackSource& feedback = FeedbackSource()) { switch (hint) { case NumberOperationHint::kSignedSmall: case NumberOperationHint::kSignedSmallInputs: return UseInfo::CheckedSignedSmallAsWord32(identify_zeros, feedback); case NumberOperationHint::kNumber: + DCHECK_EQ(identify_zeros, kIdentifyZeros); return UseInfo::CheckedNumberAsWord32(feedback); case NumberOperationHint::kNumberOrBoolean: // Not used currently. UNREACHABLE(); case NumberOperationHint::kNumberOrOddball: + DCHECK_EQ(identify_zeros, kIdentifyZeros); return UseInfo::CheckedNumberOrOddballAsWord32(feedback); } UNREACHABLE(); @@ -142,6 +144,7 @@ UseInfo TruncatingUseInfoFromRepresentation(MachineRepresentation rep) { return UseInfo::TaggedSigned(); case MachineRepresentation::kTaggedPointer: case MachineRepresentation::kTagged: + case MachineRepresentation::kMapWord: return UseInfo::AnyTagged(); case MachineRepresentation::kFloat64: return UseInfo::TruncatingFloat64(); @@ -215,7 +218,7 @@ bool CanOverflowSigned32(const Operator* op, Type left, Type right, } bool IsSomePositiveOrderedNumber(Type type) { - return type.Is(Type::OrderedNumber()) && !type.IsNone() && type.Min() > 0; + return type.Is(Type::OrderedNumber()) && (type.IsNone() || type.Min() > 0); } } // namespace @@ -291,15 +294,17 @@ class RepresentationSelector { Type restriction_type() const { return restriction_type_; } private: + // Fields are ordered to avoid mixing byte and word size fields to minimize + // padding. enum State : uint8_t { kUnvisited, kPushed, kVisited, kQueued }; State state_ = kUnvisited; MachineRepresentation representation_ = MachineRepresentation::kNone; // Output representation. Truncation truncation_ = Truncation::None(); // Information about uses. + bool weakened_ = false; Type restriction_type_ = Type::Any(); Type feedback_type_; - bool weakened_ = false; }; RepresentationSelector(JSGraph* jsgraph, JSHeapBroker* broker, Zone* zone, @@ -717,7 +722,7 @@ class RepresentationSelector { void EnqueueInput(Node* use_node, int index, UseInfo use_info = UseInfo::None()) { static_assert(retype<T>() || lower<T>(), - "This version of ProcessRemainingInputs has to be called in " + "This version of EnqueueInput has to be called in " "the Retype or Lower phase."); } @@ -784,9 +789,9 @@ class RepresentationSelector { // TODO(jarin,turbofan) Find a way to unify/merge this insertion with // InsertUnreachableIfNecessary. Node* unreachable = effect = - graph()->NewNode(jsgraph_->common()->Unreachable(), effect, control); + graph()->NewNode(common()->Unreachable(), effect, control); const Operator* dead_value = - jsgraph_->common()->DeadValue(GetInfo(node)->representation()); + common()->DeadValue(GetInfo(node)->representation()); node->ReplaceInput(0, unreachable); node->TrimInputCount(dead_value->ValueInputCount()); ReplaceEffectControlUses(node, effect, control); @@ -833,7 +838,13 @@ class RepresentationSelector { } else { DCHECK_EQ(0, node->op()->ControlInputCount()); } - node->InsertInput(jsgraph_->zone(), new_input_index, new_input); + if (new_input_index == 0) { + node->InsertInput(jsgraph_->zone(), 0, new_input); + } else { + DCHECK_EQ(new_input_index, 1); + DCHECK_EQ(node->InputCount(), 1); + node->AppendInput(jsgraph_->zone(), new_input); + } ChangeOp(node, new_op); } @@ -924,7 +935,15 @@ class RepresentationSelector { ProcessInput<T>(node, i, UseInfo::None()); } ProcessRemainingInputs<T>(node, first_effect_index); - if (lower<T>()) Kill(node); + + if (lower<T>()) { + TRACE("disconnecting unused #%d:%s\n", node->id(), + node->op()->mnemonic()); + DisconnectFromEffectAndControl(node); + node->NullAllInputs(); + // We still keep the partial node connected to its uses, knowing that + // lowering these operators is going to eliminate the uses. + } } // Helper for no-op node. @@ -966,7 +985,8 @@ class RepresentationSelector { MachineRepresentation::kWord32); } NumberOperationHint hint = NumberOperationHintOf(node->op()); - return VisitBinop<T>(node, CheckedUseInfoAsWord32FromHint(hint), + return VisitBinop<T>(node, + CheckedUseInfoAsWord32FromHint(hint, kIdentifyZeros), MachineRepresentation::kWord32); } @@ -1233,7 +1253,7 @@ class RepresentationSelector { DeoptMachineTypeOf(GetInfo(input)->representation(), TypeOf(input)); } SparseInputMask mask = SparseInputMaskOf(node->op()); - ChangeOp(node, jsgraph_->common()->TypedStateValues(types, mask)); + ChangeOp(node, common()->TypedStateValues(types, mask)); } SetOutput<T>(node, MachineRepresentation::kTagged); } @@ -1282,9 +1302,9 @@ class RepresentationSelector { node->ReplaceInput( FrameState::kFrameStateStackInput, - jsgraph_->graph()->NewNode(jsgraph_->common()->TypedStateValues( - types, SparseInputMask::Dense()), - node.stack())); + jsgraph_->graph()->NewNode( + common()->TypedStateValues(types, SparseInputMask::Dense()), + node.stack())); } } @@ -1323,8 +1343,7 @@ class RepresentationSelector { ConvertInput(node, i, UseInfo::AnyTagged()); } } - ChangeOp(node, jsgraph_->common()->TypedObjectState( - ObjectIdOf(node->op()), types)); + ChangeOp(node, common()->TypedObjectState(ObjectIdOf(node->op()), types)); } SetOutput<T>(node, MachineRepresentation::kTagged); } @@ -1484,8 +1503,8 @@ class RepresentationSelector { } // Try to use type feedback. - NumberOperationHint hint = NumberOperationHintOf(node->op()); - DCHECK_EQ(hint, NumberOperationHint::kSignedSmall); + NumberOperationHint const hint = NumberOperationHint::kSignedSmall; + DCHECK_EQ(hint, NumberOperationHintOf(node->op())); Type left_feedback_type = TypeOf(node->InputAt(0)); Type right_feedback_type = TypeOf(node->InputAt(1)); @@ -1525,14 +1544,13 @@ class RepresentationSelector { !right_feedback_type.Maybe(Type::MinusZero())) { left_identify_zeros = kIdentifyZeros; } - UseInfo left_use = CheckedUseInfoAsWord32FromHint(hint, FeedbackSource(), - left_identify_zeros); + UseInfo left_use = + CheckedUseInfoAsWord32FromHint(hint, left_identify_zeros); // For CheckedInt32Add and CheckedInt32Sub, we don't need to do // a minus zero check for the right hand side, since we already // know that the left hand side is a proper Signed32 value, // potentially guarded by a check. - UseInfo right_use = CheckedUseInfoAsWord32FromHint(hint, FeedbackSource(), - kIdentifyZeros); + UseInfo right_use = CheckedUseInfoAsWord32FromHint(hint, kIdentifyZeros); VisitBinop<T>(node, left_use, right_use, MachineRepresentation::kWord32, restriction); } @@ -1543,7 +1561,6 @@ class RepresentationSelector { right_feedback_type, type_cache_, graph_zone())) { ChangeToPureOp(node, Int32Op(node)); - } else { ChangeToInt32OverflowOp(node); } @@ -1627,10 +1644,10 @@ class RepresentationSelector { // mode of the {truncation}; and for modulus the sign of the // right hand side doesn't matter anyways, so in particular there's // no observable difference between a 0 and a -0 then. - UseInfo const lhs_use = CheckedUseInfoAsWord32FromHint( - hint, FeedbackSource(), truncation.identify_zeros()); - UseInfo const rhs_use = CheckedUseInfoAsWord32FromHint( - hint, FeedbackSource(), kIdentifyZeros); + UseInfo const lhs_use = + CheckedUseInfoAsWord32FromHint(hint, truncation.identify_zeros()); + UseInfo const rhs_use = + CheckedUseInfoAsWord32FromHint(hint, kIdentifyZeros); if (truncation.IsUsedAsWord32()) { VisitBinop<T>(node, lhs_use, rhs_use, MachineRepresentation::kWord32); if (lower<T>()) DeferReplacement(node, lowering->Int32Mod(node)); @@ -1788,6 +1805,7 @@ class RepresentationSelector { case CTypeInfo::Type::kFloat64: return UseInfo::CheckedNumberAsFloat64(kDistinguishZeros, feedback); case CTypeInfo::Type::kV8Value: + case CTypeInfo::Type::kApiObject: return UseInfo::AnyTagged(); } } @@ -1944,6 +1962,33 @@ class RepresentationSelector { SimplifiedLowering* lowering) { tick_counter_->TickAndMaybeEnterSafepoint(); + if (lower<T>()) { + // Kill non-effectful operations that have a None-type input and are thus + // dead code. Otherwise we might end up lowering the operation in a way, + // e.g. by replacing it with a constant, that cuts the dependency on a + // deopting operation (the producer of the None type), possibly resulting + // in a nonsense schedule. + if (node->op()->EffectOutputCount() == 0 && + node->op()->ControlOutputCount() == 0 && + node->opcode() != IrOpcode::kDeadValue && + node->opcode() != IrOpcode::kStateValues && + node->opcode() != IrOpcode::kFrameState && + node->opcode() != IrOpcode::kPhi) { + for (int i = 0; i < node->op()->ValueInputCount(); i++) { + Node* input = node->InputAt(i); + if (TypeOf(input).IsNone()) { + node->ReplaceInput(0, input); + node->TrimInputCount(1); + ChangeOp(node, + common()->DeadValue(GetInfo(node)->representation())); + return; + } + } + } else { + InsertUnreachableIfNecessary<T>(node); + } + } + // Unconditionally eliminate unused pure nodes (only relevant if there's // a pure operation in between two effectful ones, where the last one // is unused). @@ -1957,8 +2002,6 @@ class RepresentationSelector { return VisitUnused<T>(node); } - if (lower<T>()) InsertUnreachableIfNecessary<T>(node); - switch (node->opcode()) { //------------------------------------------------------------------ // Common operators. @@ -2182,10 +2225,9 @@ class RepresentationSelector { switch (hint) { case NumberOperationHint::kSignedSmall: if (propagate<T>()) { - VisitBinop<T>(node, - CheckedUseInfoAsWord32FromHint( - hint, FeedbackSource(), kIdentifyZeros), - MachineRepresentation::kBit); + VisitBinop<T>( + node, CheckedUseInfoAsWord32FromHint(hint, kIdentifyZeros), + MachineRepresentation::kBit); } else if (retype<T>()) { SetOutput<T>(node, MachineRepresentation::kBit, Type::Any()); } else { @@ -2202,10 +2244,9 @@ class RepresentationSelector { node, changer_->TaggedSignedOperatorFor(node->opcode())); } else { - VisitBinop<T>(node, - CheckedUseInfoAsWord32FromHint( - hint, FeedbackSource(), kIdentifyZeros), - MachineRepresentation::kBit); + VisitBinop<T>( + node, CheckedUseInfoAsWord32FromHint(hint, kIdentifyZeros), + MachineRepresentation::kBit); ChangeToPureOp(node, Int32Op(node)); } } @@ -2497,7 +2538,8 @@ class RepresentationSelector { } NumberOperationHint hint = NumberOperationHintOf(node->op()); Type rhs_type = GetUpperBound(node->InputAt(1)); - VisitBinop<T>(node, CheckedUseInfoAsWord32FromHint(hint), + VisitBinop<T>(node, + CheckedUseInfoAsWord32FromHint(hint, kIdentifyZeros), MachineRepresentation::kWord32, Type::Signed32()); if (lower<T>()) { MaskShiftOperand(node, rhs_type); @@ -2530,7 +2572,8 @@ class RepresentationSelector { } NumberOperationHint hint = NumberOperationHintOf(node->op()); Type rhs_type = GetUpperBound(node->InputAt(1)); - VisitBinop<T>(node, CheckedUseInfoAsWord32FromHint(hint), + VisitBinop<T>(node, + CheckedUseInfoAsWord32FromHint(hint, kIdentifyZeros), MachineRepresentation::kWord32, Type::Signed32()); if (lower<T>()) { MaskShiftOperand(node, rhs_type); @@ -2559,7 +2602,8 @@ class RepresentationSelector { // have seen so far were of type Unsigned31. We speculate that this // will continue to hold. Moreover, since the RHS is 0, the result // will just be the (converted) LHS. - VisitBinop<T>(node, CheckedUseInfoAsWord32FromHint(hint), + VisitBinop<T>(node, + CheckedUseInfoAsWord32FromHint(hint, kIdentifyZeros), MachineRepresentation::kWord32, Type::Unsigned31()); if (lower<T>()) { node->RemoveInput(1); @@ -2578,7 +2622,8 @@ class RepresentationSelector { } return; } - VisitBinop<T>(node, CheckedUseInfoAsWord32FromHint(hint), + VisitBinop<T>(node, + CheckedUseInfoAsWord32FromHint(hint, kIdentifyZeros), MachineRepresentation::kWord32, Type::Unsigned32()); if (lower<T>()) { MaskShiftOperand(node, rhs_type); @@ -2785,9 +2830,25 @@ class RepresentationSelector { } return; } - case IrOpcode::kBigIntAsUintN: { - ProcessInput<T>(node, 0, UseInfo::TruncatingWord64()); + case IrOpcode::kSpeculativeBigIntAsUintN: { + const auto p = SpeculativeBigIntAsUintNParametersOf(node->op()); + DCHECK_LE(0, p.bits()); + DCHECK_LE(p.bits(), 64); + + ProcessInput<T>(node, 0, + UseInfo::CheckedBigIntTruncatingWord64(p.feedback())); SetOutput<T>(node, MachineRepresentation::kWord64, Type::BigInt()); + if (lower<T>()) { + if (p.bits() == 0) { + DeferReplacement(node, jsgraph_->ZeroConstant()); + } else if (p.bits() == 64) { + DeferReplacement(node, node->InputAt(0)); + } else { + const uint64_t mask = (1ULL << p.bits()) - 1ULL; + ChangeUnaryToPureBinaryOp(node, lowering->machine()->Word64And(), 1, + jsgraph_->Int64Constant(mask)); + } + } return; } case IrOpcode::kNumberAcos: @@ -3437,7 +3498,8 @@ class RepresentationSelector { case NumberOperationHint::kSignedSmall: case NumberOperationHint::kSignedSmallInputs: VisitUnop<T>(node, - CheckedUseInfoAsWord32FromHint(p.hint(), p.feedback()), + CheckedUseInfoAsWord32FromHint( + p.hint(), kDistinguishZeros, p.feedback()), MachineRepresentation::kWord32, Type::Signed32()); break; case NumberOperationHint::kNumber: @@ -3876,6 +3938,21 @@ class RepresentationSelector { case IrOpcode::kAssertType: return VisitUnop<T>(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged); + case IrOpcode::kVerifyType: { + Type inputType = TypeOf(node->InputAt(0)); + VisitUnop<T>(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged, + inputType); + if (lower<T>()) { + CHECK_IMPLIES(!FLAG_fuzzing, inputType.CanBeAsserted()); + if (inputType.CanBeAsserted()) { + ChangeOp(node, simplified()->AssertType(inputType)); + } else { + DeferReplacement(node, node->InputAt(0)); + } + } + return; + } + default: FATAL( "Representation inference: unsupported opcode %i (%s), node #%i\n.", @@ -3885,34 +3962,8 @@ class RepresentationSelector { UNREACHABLE(); } - void DeferReplacement(Node* node, Node* replacement) { - TRACE("defer replacement #%d:%s with #%d:%s\n", node->id(), - node->op()->mnemonic(), replacement->id(), - replacement->op()->mnemonic()); - - // Disconnect the node from effect and control chains, if necessary. - if (node->op()->EffectInputCount() > 0) { - DCHECK_LT(0, node->op()->ControlInputCount()); - // Disconnect the node from effect and control chains. - Node* control = NodeProperties::GetControlInput(node); - Node* effect = NodeProperties::GetEffectInput(node); - ReplaceEffectControlUses(node, effect, control); - } - - replacements_.push_back(node); - replacements_.push_back(replacement); - - node->NullAllInputs(); // Node is now dead. - - NotifyNodeReplaced(node, replacement); - } - - void Kill(Node* node) { - TRACE("killing #%d:%s\n", node->id(), node->op()->mnemonic()); - + void DisconnectFromEffectAndControl(Node* node) { if (node->op()->EffectInputCount() == 1) { - DCHECK_LT(0, node->op()->ControlInputCount()); - // Disconnect the node from effect and control chains. Node* control = NodeProperties::GetControlInput(node); Node* effect = NodeProperties::GetEffectInput(node); ReplaceEffectControlUses(node, effect, control); @@ -3921,10 +3972,20 @@ class RepresentationSelector { DCHECK_EQ(0, node->op()->ControlOutputCount()); DCHECK_EQ(0, node->op()->EffectOutputCount()); } + } + + void DeferReplacement(Node* node, Node* replacement) { + TRACE("defer replacement #%d:%s with #%d:%s\n", node->id(), + node->op()->mnemonic(), replacement->id(), + replacement->op()->mnemonic()); - node->ReplaceUses(jsgraph_->Dead()); + DisconnectFromEffectAndControl(node); + node->NullAllInputs(); // Node is now dead. - node->NullAllInputs(); // The {node} is now dead. + replacements_.push_back(node); + replacements_.push_back(replacement); + + NotifyNodeReplaced(node, replacement); } private: diff --git a/deps/v8/src/compiler/simplified-operator-reducer.cc b/deps/v8/src/compiler/simplified-operator-reducer.cc index b1d3f8b2f3..6bc984008d 100644 --- a/deps/v8/src/compiler/simplified-operator-reducer.cc +++ b/deps/v8/src/compiler/simplified-operator-reducer.cc @@ -5,6 +5,7 @@ #include "src/compiler/simplified-operator-reducer.h" #include "src/compiler/js-graph.h" +#include "src/compiler/js-heap-broker.h" #include "src/compiler/machine-operator.h" #include "src/compiler/node-matchers.h" #include "src/compiler/operator-properties.h" @@ -41,7 +42,7 @@ SimplifiedOperatorReducer::~SimplifiedOperatorReducer() = default; Reduction SimplifiedOperatorReducer::Reduce(Node* node) { - DisallowHeapAccessIf no_heap_access(!FLAG_turbo_direct_heap_access); + DisallowHeapAccessIf no_heap_access(!broker()->is_concurrent_inlining()); switch (node->opcode()) { case IrOpcode::kBooleanNot: { HeapObjectMatcher m(node->InputAt(0)); @@ -60,7 +61,9 @@ Reduction SimplifiedOperatorReducer::Reduce(Node* node) { case IrOpcode::kChangeTaggedToBit: { HeapObjectMatcher m(node->InputAt(0)); if (m.HasResolvedValue()) { - return ReplaceInt32(m.Ref(broker()).BooleanValue()); + base::Optional<bool> maybe_result = + m.Ref(broker()).TryGetBooleanValue(); + if (maybe_result.has_value()) return ReplaceInt32(*maybe_result); } if (m.IsChangeBitToTagged()) return Replace(m.InputAt(0)); break; diff --git a/deps/v8/src/compiler/simplified-operator.cc b/deps/v8/src/compiler/simplified-operator.cc index 09e3a80ec4..32cc9eea95 100644 --- a/deps/v8/src/compiler/simplified-operator.cc +++ b/deps/v8/src/compiler/simplified-operator.cc @@ -615,6 +615,27 @@ NumberOperationParameters const& NumberOperationParametersOf( return OpParameter<NumberOperationParameters>(op); } +bool operator==(SpeculativeBigIntAsUintNParameters const& lhs, + SpeculativeBigIntAsUintNParameters const& rhs) { + return lhs.bits() == rhs.bits() && lhs.feedback() == rhs.feedback(); +} + +size_t hash_value(SpeculativeBigIntAsUintNParameters const& p) { + FeedbackSource::Hash feedback_hash; + return base::hash_combine(p.bits(), feedback_hash(p.feedback())); +} + +std::ostream& operator<<(std::ostream& os, + SpeculativeBigIntAsUintNParameters const& p) { + return os << p.bits() << ", " << p.feedback(); +} + +SpeculativeBigIntAsUintNParameters const& SpeculativeBigIntAsUintNParametersOf( + Operator const* op) { + DCHECK_EQ(IrOpcode::kSpeculativeBigIntAsUintN, op->opcode()); + return OpParameter<SpeculativeBigIntAsUintNParameters>(op); +} + size_t hash_value(AllocateParameters info) { return base::hash_combine(info.type(), static_cast<int>(info.allocation_type())); @@ -1296,11 +1317,14 @@ const Operator* SimplifiedOperatorBuilder::RuntimeAbort(AbortReason reason) { static_cast<int>(reason)); // parameter } -const Operator* SimplifiedOperatorBuilder::BigIntAsUintN(int bits) { +const Operator* SimplifiedOperatorBuilder::SpeculativeBigIntAsUintN( + int bits, const FeedbackSource& feedback) { CHECK(0 <= bits && bits <= 64); - return zone()->New<Operator1<int>>(IrOpcode::kBigIntAsUintN, Operator::kPure, - "BigIntAsUintN", 1, 0, 0, 1, 0, 0, bits); + return zone()->New<Operator1<SpeculativeBigIntAsUintNParameters>>( + IrOpcode::kSpeculativeBigIntAsUintN, Operator::kNoProperties, + "SpeculativeBigIntAsUintN", 1, 1, 1, 1, 1, 0, + SpeculativeBigIntAsUintNParameters(bits, feedback)); } const Operator* SimplifiedOperatorBuilder::UpdateInterruptBudget(int delta) { @@ -1316,12 +1340,18 @@ const Operator* SimplifiedOperatorBuilder::TierUpCheck() { } const Operator* SimplifiedOperatorBuilder::AssertType(Type type) { - DCHECK(type.IsRange()); + DCHECK(type.CanBeAsserted()); return zone()->New<Operator1<Type>>(IrOpcode::kAssertType, Operator::kNoThrow | Operator::kNoDeopt, "AssertType", 1, 0, 0, 1, 0, 0, type); } +const Operator* SimplifiedOperatorBuilder::VerifyType() { + return zone()->New<Operator>(IrOpcode::kVerifyType, + Operator::kNoThrow | Operator::kNoDeopt, + "VerifyType", 1, 0, 0, 1, 0, 0); +} + const Operator* SimplifiedOperatorBuilder::CheckIf( DeoptimizeReason reason, const FeedbackSource& feedback) { if (!feedback.IsValid()) { diff --git a/deps/v8/src/compiler/simplified-operator.h b/deps/v8/src/compiler/simplified-operator.h index cd66b89ea4..03ca88bc9a 100644 --- a/deps/v8/src/compiler/simplified-operator.h +++ b/deps/v8/src/compiler/simplified-operator.h @@ -127,6 +127,13 @@ struct FieldAccess { #endif { DCHECK_GE(offset, 0); + DCHECK_IMPLIES( + machine_type.IsMapWord(), + offset == HeapObject::kMapOffset && base_is_tagged != kUntaggedBase); + DCHECK_IMPLIES(machine_type.IsMapWord(), + (write_barrier_kind == kMapWriteBarrier || + write_barrier_kind == kNoWriteBarrier || + write_barrier_kind == kAssertNoWriteBarrier)); } int tag() const { return base_is_tagged == kTaggedBase ? kHeapObjectTag : 0; } @@ -599,6 +606,30 @@ bool operator==(NumberOperationParameters const&, const NumberOperationParameters& NumberOperationParametersOf(const Operator* op) V8_WARN_UNUSED_RESULT; +class SpeculativeBigIntAsUintNParameters { + public: + SpeculativeBigIntAsUintNParameters(int bits, const FeedbackSource& feedback) + : bits_(bits), feedback_(feedback) { + DCHECK_GE(bits_, 0); + DCHECK_LE(bits_, 64); + } + + int bits() const { return bits_; } + const FeedbackSource& feedback() const { return feedback_; } + + private: + int bits_; + FeedbackSource feedback_; +}; + +size_t hash_value(SpeculativeBigIntAsUintNParameters const&); +V8_EXPORT_PRIVATE std::ostream& operator<<( + std::ostream&, const SpeculativeBigIntAsUintNParameters&); +bool operator==(SpeculativeBigIntAsUintNParameters const&, + SpeculativeBigIntAsUintNParameters const&); +const SpeculativeBigIntAsUintNParameters& SpeculativeBigIntAsUintNParametersOf( + const Operator* op) V8_WARN_UNUSED_RESULT; + int FormalParameterCountOf(const Operator* op) V8_WARN_UNUSED_RESULT; class AllocateParameters { @@ -806,7 +837,8 @@ class V8_EXPORT_PRIVATE SimplifiedOperatorBuilder final const Operator* SpeculativeBigIntAdd(BigIntOperationHint hint); const Operator* SpeculativeBigIntSubtract(BigIntOperationHint hint); const Operator* SpeculativeBigIntNegate(BigIntOperationHint hint); - const Operator* BigIntAsUintN(int bits); + const Operator* SpeculativeBigIntAsUintN(int bits, + const FeedbackSource& feedback); const Operator* ReferenceEqual(); const Operator* SameValue(); @@ -1054,6 +1086,10 @@ class V8_EXPORT_PRIVATE SimplifiedOperatorBuilder final // Abort if the value input does not inhabit the given type const Operator* AssertType(Type type); + // Abort if the value does not match the node's computed type after + // SimplifiedLowering. + const Operator* VerifyType(); + const Operator* DateNow(); // Represents the inputs necessary to construct a fast and a slow API call. @@ -1112,7 +1148,7 @@ class FastApiCallNode final : public SimplifiedNodeWrapperBase { public: explicit constexpr FastApiCallNode(Node* node) : SimplifiedNodeWrapperBase(node) { - CONSTEXPR_DCHECK(node->opcode() == IrOpcode::kFastApiCall); + DCHECK_EQ(IrOpcode::kFastApiCall, node->opcode()); } const FastApiCallParameters& Parameters() const { @@ -1184,7 +1220,7 @@ class TierUpCheckNode final : public SimplifiedNodeWrapperBase { public: explicit constexpr TierUpCheckNode(Node* node) : SimplifiedNodeWrapperBase(node) { - CONSTEXPR_DCHECK(node->opcode() == IrOpcode::kTierUpCheck); + DCHECK_EQ(IrOpcode::kTierUpCheck, node->opcode()); } #define INPUTS(V) \ @@ -1201,7 +1237,7 @@ class UpdateInterruptBudgetNode final : public SimplifiedNodeWrapperBase { public: explicit constexpr UpdateInterruptBudgetNode(Node* node) : SimplifiedNodeWrapperBase(node) { - CONSTEXPR_DCHECK(node->opcode() == IrOpcode::kUpdateInterruptBudget); + DCHECK_EQ(IrOpcode::kUpdateInterruptBudget, node->opcode()); } int delta() const { return OpParameter<int>(node()->op()); } diff --git a/deps/v8/src/compiler/store-store-elimination.cc b/deps/v8/src/compiler/store-store-elimination.cc index 70dadd9441..3600ee1a41 100644 --- a/deps/v8/src/compiler/store-store-elimination.cc +++ b/deps/v8/src/compiler/store-store-elimination.cc @@ -331,8 +331,8 @@ UnobservablesSet RedundantStoreFinder::RecomputeSet( bool RedundantStoreFinder::CannotObserveStoreField(Node* node) { IrOpcode::Value opcode = node->opcode(); return opcode == IrOpcode::kLoadElement || opcode == IrOpcode::kLoad || - opcode == IrOpcode::kStore || opcode == IrOpcode::kEffectPhi || - opcode == IrOpcode::kStoreElement || + opcode == IrOpcode::kLoadImmutable || opcode == IrOpcode::kStore || + opcode == IrOpcode::kEffectPhi || opcode == IrOpcode::kStoreElement || opcode == IrOpcode::kUnsafePointerAdd || opcode == IrOpcode::kRetain; } diff --git a/deps/v8/src/compiler/type-cache.h b/deps/v8/src/compiler/type-cache.h index 2ade5f68a3..6442b6f6b0 100644 --- a/deps/v8/src/compiler/type-cache.h +++ b/deps/v8/src/compiler/type-cache.h @@ -36,9 +36,10 @@ class V8_EXPORT_PRIVATE TypeCache final { Type const kUnsigned31 = Type::Unsigned31(); Type const kInt32 = Type::Signed32(); Type const kUint32 = Type::Unsigned32(); - Type const kInt64 = CreateRange<int64_t>(); - Type const kUint64 = CreateRange<uint64_t>(); - Type const kIntPtr = CreateRange<intptr_t>(); + Type const kDoubleRepresentableInt64 = CreateRange( + std::numeric_limits<int64_t>::min(), kMaxDoubleRepresentableInt64); + Type const kDoubleRepresentableUint64 = CreateRange( + std::numeric_limits<uint64_t>::min(), kMaxDoubleRepresentableUint64); Type const kFloat32 = Type::Number(); Type const kFloat64 = Type::Number(); Type const kBigInt64 = Type::BigInt(); @@ -190,8 +191,11 @@ class V8_EXPORT_PRIVATE TypeCache final { private: template <typename T> Type CreateRange() { - return CreateRange(std::numeric_limits<T>::min(), - std::numeric_limits<T>::max()); + T min = std::numeric_limits<T>::min(); + T max = std::numeric_limits<T>::max(); + DCHECK_EQ(min, static_cast<T>(static_cast<double>(min))); + DCHECK_EQ(max, static_cast<T>(static_cast<double>(max))); + return CreateRange(min, max); } Type CreateRange(double min, double max) { @@ -199,6 +203,10 @@ class V8_EXPORT_PRIVATE TypeCache final { } Zone* zone() { return &zone_; } + + static constexpr double kMaxDoubleRepresentableInt64 = 9223372036854774784.0; + static constexpr double kMaxDoubleRepresentableUint64 = + 18446744073709549568.0; }; } // namespace compiler diff --git a/deps/v8/src/compiler/type-narrowing-reducer.cc b/deps/v8/src/compiler/type-narrowing-reducer.cc index b24e82c53b..996b088376 100644 --- a/deps/v8/src/compiler/type-narrowing-reducer.cc +++ b/deps/v8/src/compiler/type-narrowing-reducer.cc @@ -5,6 +5,7 @@ #include "src/compiler/type-narrowing-reducer.h" #include "src/compiler/js-graph.h" +#include "src/compiler/js-heap-broker.h" namespace v8 { namespace internal { @@ -12,12 +13,15 @@ namespace compiler { TypeNarrowingReducer::TypeNarrowingReducer(Editor* editor, JSGraph* jsgraph, JSHeapBroker* broker) - : AdvancedReducer(editor), jsgraph_(jsgraph), op_typer_(broker, zone()) {} + : AdvancedReducer(editor), + jsgraph_(jsgraph), + broker_(broker), + op_typer_(broker, zone()) {} TypeNarrowingReducer::~TypeNarrowingReducer() = default; Reduction TypeNarrowingReducer::Reduce(Node* node) { - DisallowHeapAccessIf no_heap_access(!FLAG_turbo_direct_heap_access); + DisallowHeapAccessIf no_heap_access(!broker_->is_concurrent_inlining()); Type new_type = Type::Any(); diff --git a/deps/v8/src/compiler/type-narrowing-reducer.h b/deps/v8/src/compiler/type-narrowing-reducer.h index ab8c4a483c..9ec6883449 100644 --- a/deps/v8/src/compiler/type-narrowing-reducer.h +++ b/deps/v8/src/compiler/type-narrowing-reducer.h @@ -34,6 +34,7 @@ class V8_EXPORT_PRIVATE TypeNarrowingReducer final Zone* zone() const; JSGraph* const jsgraph_; + const JSHeapBroker* const broker_; OperationTyper op_typer_; }; diff --git a/deps/v8/src/compiler/typed-optimization.cc b/deps/v8/src/compiler/typed-optimization.cc index d5bc845f7c..3c16c7317c 100644 --- a/deps/v8/src/compiler/typed-optimization.cc +++ b/deps/v8/src/compiler/typed-optimization.cc @@ -34,7 +34,7 @@ TypedOptimization::TypedOptimization(Editor* editor, TypedOptimization::~TypedOptimization() = default; Reduction TypedOptimization::Reduce(Node* node) { - DisallowHeapAccessIf no_heap_access(!FLAG_turbo_direct_heap_access); + DisallowHeapAccessIf no_heap_access(!broker()->is_concurrent_inlining()); switch (node->opcode()) { case IrOpcode::kConvertReceiver: return ReduceConvertReceiver(node); diff --git a/deps/v8/src/compiler/typer.cc b/deps/v8/src/compiler/typer.cc index 0f18222236..09daaa3864 100644 --- a/deps/v8/src/compiler/typer.cc +++ b/deps/v8/src/compiler/typer.cc @@ -1839,8 +1839,6 @@ Type Typer::Visitor::TypeJSCallRuntime(Node* node) { return TypeUnaryOp(node, ToNumber); case Runtime::kInlineToObject: return TypeUnaryOp(node, ToObject); - case Runtime::kInlineToString: - return TypeUnaryOp(node, ToString); case Runtime::kHasInPrototypeChain: return Type::Boolean(); default: @@ -2361,6 +2359,10 @@ Type Typer::Visitor::TypeRuntimeAbort(Node* node) { UNREACHABLE(); } Type Typer::Visitor::TypeAssertType(Node* node) { UNREACHABLE(); } +Type Typer::Visitor::TypeVerifyType(Node* node) { + return TypeOrNone(node->InputAt(0)); +} + // Heap constants. Type Typer::Visitor::TypeConstant(Handle<Object> value) { diff --git a/deps/v8/src/compiler/types.cc b/deps/v8/src/compiler/types.cc index 236cff3cc6..5c6a4f7db9 100644 --- a/deps/v8/src/compiler/types.cc +++ b/deps/v8/src/compiler/types.cc @@ -6,6 +6,7 @@ #include <iomanip> +#include "src/compiler/js-heap-broker.h" #include "src/handles/handles-inl.h" #include "src/objects/instance-type.h" #include "src/objects/objects-inl.h" @@ -837,7 +838,14 @@ Type Type::Constant(double value, Zone* zone) { } Type Type::Constant(JSHeapBroker* broker, Handle<i::Object> value, Zone* zone) { - ObjectRef ref(broker, value); + // TODO(jgruber,chromium:1209798): Using kAssumeMemoryFence works around + // the fact that the graph stores handles (and not refs). The assumption is + // that any handle inserted into the graph is safe to read; but we don't + // preserve the reason why it is safe to read. Thus we must over-approximate + // here and assume the existence of a memory fence. In the future, we should + // consider having the graph store ObjectRefs or ObjectData pointer instead, + // which would make new ref construction here unnecessary. + ObjectRef ref = MakeRefAssumeMemoryFence(broker, value); if (ref.IsSmi()) { return Constant(static_cast<double>(ref.AsSmi()), zone); } @@ -969,8 +977,7 @@ const char* BitsetType::Name(bitset bits) { } } -void BitsetType::Print(std::ostream& os, // NOLINT - bitset bits) { +void BitsetType::Print(std::ostream& os, bitset bits) { DisallowGarbageCollection no_gc; const char* name = Name(bits); if (name != nullptr) { diff --git a/deps/v8/src/compiler/types.h b/deps/v8/src/compiler/types.h index b5692298ab..a28a28c59e 100644 --- a/deps/v8/src/compiler/types.h +++ b/deps/v8/src/compiler/types.h @@ -267,7 +267,7 @@ class V8_EXPORT_PRIVATE BitsetType { static bitset ExpandInternals(bitset bits); static const char* Name(bitset); - static void Print(std::ostream& os, bitset); // NOLINT + static void Print(std::ostream& os, bitset); #ifdef DEBUG static void Print(bitset); #endif @@ -413,6 +413,10 @@ class V8_EXPORT_PRIVATE Type { (Is(Type::PlainNumber()) && Min() == Max()); } + bool CanBeAsserted() const { + return IsRange() || (Is(Type::Integral32()) && !IsNone()); + } + const HeapConstantType* AsHeapConstant() const; const OtherNumberConstantType* AsOtherNumberConstant() const; const RangeType* AsRange() const; diff --git a/deps/v8/src/compiler/verifier.cc b/deps/v8/src/compiler/verifier.cc index b5b3ab5a98..8b7e22459b 100644 --- a/deps/v8/src/compiler/verifier.cc +++ b/deps/v8/src/compiler/verifier.cc @@ -482,8 +482,8 @@ void Verifier::Visitor::Check(Node* node, const AllNodes& all) { Node* control = NodeProperties::GetControlInput(node, 0); CHECK_EQ(effect_count, control->op()->ControlInputCount()); CHECK_EQ(input_count, 1 + effect_count); - // If the control input is a Merge, then make sure that at least one - // of it's usages is non-phi. + // If the control input is a Merge, then make sure that at least one of + // its usages is non-phi. if (control->opcode() == IrOpcode::kMerge) { bool non_phi_use_found = false; for (Node* use : control->uses()) { @@ -954,8 +954,8 @@ void Verifier::Visitor::Check(Node* node, const AllNodes& all) { case IrOpcode::kSpeculativeBigIntNegate: CheckTypeIs(node, Type::BigInt()); break; - case IrOpcode::kBigIntAsUintN: - CheckValueInputIs(node, 0, Type::BigInt()); + case IrOpcode::kSpeculativeBigIntAsUintN: + CheckValueInputIs(node, 0, Type::Any()); CheckTypeIs(node, Type::BigInt()); break; case IrOpcode::kBigIntAdd: @@ -1500,6 +1500,15 @@ void Verifier::Visitor::Check(Node* node, const AllNodes& all) { case IrOpcode::kAssertType: break; + case IrOpcode::kVerifyType: + if (NodeProperties::IsTyped(node)) { + Node* input = NodeProperties::GetValueInput(node, 0); + DCHECK(NodeProperties::IsTyped(input)); + CHECK(NodeProperties::GetType(node).Equals( + NodeProperties::GetType(input))); + } + break; + case IrOpcode::kCheckFloat64Hole: CheckValueInputIs(node, 0, Type::NumberOrHole()); CheckTypeIs(node, Type::NumberOrUndefined()); @@ -1658,8 +1667,12 @@ void Verifier::Visitor::Check(Node* node, const AllNodes& all) { case IrOpcode::kWord64Rol: case IrOpcode::kWord64Ror: case IrOpcode::kWord64Clz: - case IrOpcode::kWord64Popcnt: case IrOpcode::kWord64Ctz: + case IrOpcode::kWord64RolLowerable: + case IrOpcode::kWord64RorLowerable: + case IrOpcode::kWord64ClzLowerable: + case IrOpcode::kWord64CtzLowerable: + case IrOpcode::kWord64Popcnt: case IrOpcode::kWord64ReverseBits: case IrOpcode::kWord64ReverseBytes: case IrOpcode::kSimd128ReverseBytes: @@ -1791,6 +1804,8 @@ void Verifier::Visitor::Check(Node* node, const AllNodes& all) { case IrOpcode::kFloat64ExtractHighWord32: case IrOpcode::kFloat64InsertLowWord32: case IrOpcode::kFloat64InsertHighWord32: + case IrOpcode::kWord32Select: + case IrOpcode::kWord64Select: case IrOpcode::kFloat32Select: case IrOpcode::kFloat64Select: case IrOpcode::kInt32PairAdd: @@ -1850,7 +1865,7 @@ void Verifier::Visitor::Check(Node* node, const AllNodes& all) { // TODO(rossberg): Check. break; } -} // NOLINT(readability/fn_size) +} void Verifier::Run(Graph* graph, Typing typing, CheckInputs check_inputs, CodeType code_type) { diff --git a/deps/v8/src/compiler/wasm-compiler.cc b/deps/v8/src/compiler/wasm-compiler.cc index 1b858f5dfc..6e433def70 100644 --- a/deps/v8/src/compiler/wasm-compiler.cc +++ b/deps/v8/src/compiler/wasm-compiler.cc @@ -16,7 +16,7 @@ #include "src/codegen/assembler.h" #include "src/codegen/code-factory.h" #include "src/codegen/compiler.h" -#include "src/codegen/interface-descriptors.h" +#include "src/codegen/interface-descriptors-inl.h" #include "src/codegen/machine-type.h" #include "src/codegen/optimized-compilation-info.h" #include "src/compiler/backend/code-generator.h" @@ -34,7 +34,6 @@ #include "src/compiler/node-origin-table.h" #include "src/compiler/node-properties.h" #include "src/compiler/pipeline.h" -#include "src/compiler/simd-scalar-lowering.h" #include "src/compiler/zone-stats.h" #include "src/execution/isolate-inl.h" #include "src/heap/factory.h" @@ -131,11 +130,7 @@ constexpr Builtins::Name WasmRuntimeStubIdToBuiltinName( #undef DEF_CASE #undef DEF_TRAP_CASE default: -#if V8_HAS_CXX14_CONSTEXPR UNREACHABLE(); -#else - return Builtins::kAbort; -#endif } } @@ -291,10 +286,6 @@ class WasmGraphAssembler : public GraphAssembler { // Maps and their contents. - Node* LoadMap(Node* heap_object) { - return LoadFromObject(MachineType::TaggedPointer(), heap_object, - wasm::ObjectAccess::ToTagged(HeapObject::kMapOffset)); - } Node* LoadInstanceType(Node* map) { return LoadFromObject( MachineType::Uint16(), map, @@ -710,8 +701,23 @@ void WasmGraphBuilder::PatchInStackCheckIfNeeded() { if (effect() == dummy) return; // Now patch all control uses of {start} to use {control} and all effect uses - // to use {effect} instead. Then rewire the dummy node to use start instead. + // to use {effect} instead. We exclude Projection nodes: Projections pointing + // to start are floating control, and we want it to point directly to start + // because of restrictions later in the pipeline (specifically, loop + // unrolling). + // Then rewire the dummy node to use start instead. NodeProperties::ReplaceUses(start, start, effect(), control()); + { + // We need an intermediate vector because we are not allowed to modify a use + // while traversing uses(). + std::vector<Node*> projections; + for (Node* use : control()->uses()) { + if (use->opcode() == IrOpcode::kProjection) projections.emplace_back(use); + } + for (Node* use : projections) { + use->ReplaceInput(NodeProperties::FirstControlIndex(use), start); + } + } NodeProperties::ReplaceUses(dummy, nullptr, start, start); } @@ -874,17 +880,19 @@ Node* WasmGraphBuilder::Binop(wasm::WasmOpcode opcode, Node* left, Node* right, std::swap(left, right); break; case wasm::kExprI64Ror: - op = m->Word64Ror(); right = MaskShiftCount64(right); - break; + return m->Is64() ? graph()->NewNode(m->Word64Ror(), left, right) + : graph()->NewNode(m->Word64RorLowerable(), left, right, + control()); case wasm::kExprI64Rol: if (m->Word64Rol().IsSupported()) { - op = m->Word64Rol().op(); - right = MaskShiftCount64(right); - break; + return m->Is64() ? graph()->NewNode(m->Word64Rol().op(), left, + MaskShiftCount64(right)) + : graph()->NewNode(m->Word64RolLowerable().op(), left, + MaskShiftCount64(right), control()); } else if (m->Word32Rol().IsSupported()) { - op = m->Word64Rol().placeholder(); - break; + return graph()->NewNode(m->Word64RolLowerable().placeholder(), left, + right, control()); } return BuildI64Rol(left, right); case wasm::kExprF32CopySign: @@ -1175,19 +1183,22 @@ Node* WasmGraphBuilder::Unop(wasm::WasmOpcode opcode, Node* input, op = m->BitcastFloat64ToInt64(); break; case wasm::kExprI64Clz: - op = m->Word64Clz(); - break; + return m->Is64() + ? graph()->NewNode(m->Word64Clz(), input) + : graph()->NewNode(m->Word64ClzLowerable(), input, control()); case wasm::kExprI64Ctz: { - OptionalOperator ctz64 = m->Word64Ctz(); - if (ctz64.IsSupported()) { - op = ctz64.op(); - break; + if (m->Word64Ctz().IsSupported()) { + return m->Is64() ? graph()->NewNode(m->Word64Ctz().op(), input) + : graph()->NewNode(m->Word64CtzLowerable().op(), input, + control()); } else if (m->Is32() && m->Word32Ctz().IsSupported()) { - op = ctz64.placeholder(); - break; + return graph()->NewNode(m->Word64CtzLowerable().placeholder(), input, + control()); } else if (m->Word64ReverseBits().IsSupported()) { Node* reversed = graph()->NewNode(m->Word64ReverseBits().op(), input); - Node* result = graph()->NewNode(m->Word64Clz(), reversed); + Node* result = m->Is64() ? graph()->NewNode(m->Word64Clz(), reversed) + : graph()->NewNode(m->Word64ClzLowerable(), + reversed, control()); return result; } else { return BuildI64Ctz(input); @@ -1301,6 +1312,11 @@ Node* WasmGraphBuilder::BranchExpectFalse(Node* cond, Node** true_node, return gasm_->Branch(cond, true_node, false_node, BranchHint::kFalse); } +Node* WasmGraphBuilder::BranchExpectTrue(Node* cond, Node** true_node, + Node** false_node) { + return gasm_->Branch(cond, true_node, false_node, BranchHint::kTrue); +} + Node* WasmGraphBuilder::Select(Node *cond, Node* true_node, Node* false_node, wasm::ValueType type) { MachineOperatorBuilder* m = mcgraph()->machine(); @@ -1314,6 +1330,14 @@ Node* WasmGraphBuilder::Select(Node *cond, Node* true_node, return mcgraph()->graph()->NewNode(m->Float64Select().op(), cond, true_node, false_node); } + if (kind == wasm::kI32 && m->Word32Select().IsSupported()) { + return mcgraph()->graph()->NewNode(m->Word32Select().op(), cond, true_node, + false_node); + } + if (kind == wasm::kI64 && m->Word64Select().IsSupported()) { + return mcgraph()->graph()->NewNode(m->Word64Select().op(), cond, true_node, + false_node); + } // Default to control-flow. Node* controls[2]; BranchNoHint(cond, &controls[0], &controls[1]); @@ -2944,7 +2968,7 @@ Node* WasmGraphBuilder::BuildImportCall(const wasm::FunctionSig* sig, Node* imported_function_refs = LOAD_INSTANCE_FIELD(ImportedFunctionRefs, MachineType::TaggedPointer()); // Access fixed array at {header_size - tag + func_index * kTaggedSize}. - Node* func_index_intptr = Uint32ToUintptr(func_index); + Node* func_index_intptr = BuildChangeUint32ToUintPtr(func_index); Node* ref_node = gasm_->LoadFixedArrayElement( imported_function_refs, func_index_intptr, MachineType::TaggedPointer()); @@ -3070,36 +3094,28 @@ Node* WasmGraphBuilder::BuildIndirectCall(uint32_t table_index, const wasm::ValueType table_type = env_->module->tables[table_index].type; // Check that the table entry is not null and that the type of the function is - // a subtype of the function type declared at the call site. In the absence of - // function subtyping, the latter can only happen if the table type is (ref - // null? func). Also, subtyping reduces to normalized signature equality - // checking. - // TODO(7748): Expand this with function subtyping once we have that. + // **identical with** the function type declared at the call site (no + // subtyping of functions is allowed). + // Note: Since null entries are identified by having ift_sig_id (-1), we only + // need one comparison. + // TODO(9495): Change this if we should do full function subtyping instead. const bool needs_signature_check = + FLAG_experimental_wasm_gc || table_type.is_reference_to(wasm::HeapType::kFunc) || table_type.is_nullable(); if (needs_signature_check) { Node* int32_scaled_key = - Uint32ToUintptr(gasm_->Word32Shl(key, Int32Constant(2))); + BuildChangeUint32ToUintPtr(gasm_->Word32Shl(key, Int32Constant(2))); Node* loaded_sig = gasm_->LoadFromObject(MachineType::Int32(), ift_sig_ids, int32_scaled_key); - - if (table_type.is_reference_to(wasm::HeapType::kFunc)) { - int32_t expected_sig_id = env_->module->canonicalized_type_ids[sig_index]; - Node* sig_match = - gasm_->Word32Equal(loaded_sig, Int32Constant(expected_sig_id)); - TrapIfFalse(wasm::kTrapFuncSigMismatch, sig_match, position); - } else { - // If the table entries are nullable, we still have to check that the - // entry is initialized. - Node* function_is_null = - gasm_->Word32Equal(loaded_sig, Int32Constant(-1)); - TrapIfTrue(wasm::kTrapNullDereference, function_is_null, position); - } + int32_t expected_sig_id = env_->module->canonicalized_type_ids[sig_index]; + Node* sig_match = + gasm_->Word32Equal(loaded_sig, Int32Constant(expected_sig_id)); + TrapIfFalse(wasm::kTrapFuncSigMismatch, sig_match, position); } - Node* key_intptr = Uint32ToUintptr(key); + Node* key_intptr = BuildChangeUint32ToUintPtr(key); Node* target_instance = gasm_->LoadFixedArrayElement( ift_instances, key_intptr, MachineType::TaggedPointer()); @@ -3124,13 +3140,28 @@ Node* WasmGraphBuilder::BuildIndirectCall(uint32_t table_index, } } -Node* WasmGraphBuilder::BuildLoadJumpTableOffsetFromExportedFunctionData( +Node* WasmGraphBuilder::BuildLoadCallTargetFromExportedFunctionData( Node* function_data) { - Node* jump_table_offset_smi = gasm_->LoadFromObject( - MachineType::TaggedSigned(), function_data, - wasm::ObjectAccess::ToTagged( - WasmExportedFunctionData::kJumpTableOffsetOffset)); - return BuildChangeSmiToIntPtr(jump_table_offset_smi); + // TODO(saelo) move this code into a common LoadExternalPointer routine? +#ifdef V8_HEAP_SANDBOX + Node* index = gasm_->LoadFromObject( + MachineType::Pointer(), function_data, + wasm::ObjectAccess::ToTagged(WasmFunctionData::kForeignAddressOffset)); + + Node* isolate_root = BuildLoadIsolateRoot(); + Node* table = + gasm_->LoadFromObject(MachineType::Pointer(), isolate_root, + IsolateData::external_pointer_table_offset() + + Internals::kExternalPointerTableBufferOffset); + Node* offset = gasm_->Int32Mul(index, gasm_->Int32Constant(8)); + Node* decoded_ptr = gasm_->Load(MachineType::Pointer(), table, offset); + Node* tag = gasm_->IntPtrConstant(~kForeignForeignAddressTag); + return gasm_->WordAnd(decoded_ptr, tag); +#else + return gasm_->LoadFromObject( + MachineType::Pointer(), function_data, + wasm::ObjectAccess::ToTagged(WasmFunctionData::kForeignAddressOffset)); +#endif } // TODO(9495): Support CAPI function refs. @@ -3148,77 +3179,33 @@ Node* WasmGraphBuilder::BuildCallRef(uint32_t sig_index, Vector<Node*> args, Node* function_data = gasm_->LoadFunctionDataFromJSFunction(args[0]); - Node* is_js_function = - gasm_->HasInstanceType(function_data, WASM_JS_FUNCTION_DATA_TYPE); - - auto js_label = gasm_->MakeLabel(); - auto end_label = gasm_->MakeLabel(MachineRepresentation::kTaggedPointer, - MachineRepresentation::kTaggedPointer); + auto load_target = gasm_->MakeLabel(); + auto end_label = gasm_->MakeLabel(MachineType::PointerRepresentation()); - gasm_->GotoIf(is_js_function, &js_label); + Node* instance_node = gasm_->LoadFromObject( + MachineType::TaggedPointer(), function_data, + wasm::ObjectAccess::ToTagged(WasmFunctionData::kRefOffset)); + Node* is_pair = gasm_->HasInstanceType(instance_node, TUPLE2_TYPE); + gasm_->GotoIfNot(is_pair, &load_target); { - // Call to a WasmExportedFunction. - // Load instance object corresponding to module where callee is defined. - Node* callee_instance = gasm_->LoadExportedFunctionInstance(function_data); - Node* function_index = gasm_->LoadExportedFunctionIndexAsSmi(function_data); - - auto imported_label = gasm_->MakeLabel(); - - // Check if callee is a locally defined or imported function in its module. - Node* imported_function_refs = gasm_->LoadFromObject( - MachineType::TaggedPointer(), callee_instance, - wasm::ObjectAccess::ToTagged( - WasmInstanceObject::kImportedFunctionRefsOffset)); - Node* imported_functions_num = - gasm_->LoadFixedArrayLengthAsSmi(imported_function_refs); - gasm_->GotoIf(gasm_->SmiLessThan(function_index, imported_functions_num), - &imported_label); - { - // Function locally defined in module. - Node* jump_table_start = - gasm_->LoadFromObject(MachineType::Pointer(), callee_instance, - wasm::ObjectAccess::ToTagged( - WasmInstanceObject::kJumpTableStartOffset)); - Node* jump_table_offset = - BuildLoadJumpTableOffsetFromExportedFunctionData(function_data); - Node* jump_table_slot = - gasm_->IntAdd(jump_table_start, jump_table_offset); - - gasm_->Goto(&end_label, jump_table_slot, - callee_instance /* Unused, dummy value */); - } - - { - // Function imported to module. - gasm_->Bind(&imported_label); - Node* function_index_intptr = BuildChangeSmiToIntPtr(function_index); - - Node* imported_instance = gasm_->LoadFixedArrayElement( - imported_function_refs, function_index_intptr, - MachineType::TaggedPointer()); - - Node* imported_function_targets = gasm_->LoadFromObject( - MachineType::Pointer(), callee_instance, - wasm::ObjectAccess::ToTagged( - WasmInstanceObject::kImportedFunctionTargetsOffset)); - - Node* target_node = gasm_->LoadFromObject( - MachineType::Pointer(), imported_function_targets, - gasm_->IntMul(function_index_intptr, - gasm_->IntPtrConstant(kSystemPointerSize))); - - gasm_->Goto(&end_label, target_node, imported_instance); - } - } - + // Overwrite the tuple's "instance" entry with the current instance. + // TODO(jkummerow): Can we avoid this, by guaranteeing that it's always + // pre-populated? + gasm_->StoreToObject( + ObjectAccess(MachineType::TaggedPointer(), kFullWriteBarrier), + instance_node, wasm::ObjectAccess::ToTagged(Tuple2::kValue1Offset), + GetInstance()); + gasm_->Goto(&load_target); + } + + gasm_->Bind(&load_target); + Node* target = BuildLoadCallTargetFromExportedFunctionData(function_data); + Node* is_null_target = gasm_->WordEqual(target, gasm_->IntPtrConstant(0)); + gasm_->GotoIfNot(is_null_target, &end_label, target); { - // Call to a WasmJSFunction. The call target is - // function_data->wasm_to_js_wrapper_code()->instruction_start(). - // The instance_node is the pair - // (current WasmInstanceObject, function_data->callable()). - gasm_->Bind(&js_label); - + // Compute the call target from the (on-heap) wrapper code. The cached + // target can only be null for WasmJSFunctions. Node* wrapper_code = gasm_->LoadFromObject( MachineType::TaggedPointer(), function_data, wasm::ObjectAccess::ToTagged( @@ -3226,23 +3213,12 @@ Node* WasmGraphBuilder::BuildCallRef(uint32_t sig_index, Vector<Node*> args, Node* call_target = gasm_->IntAdd( wrapper_code, gasm_->IntPtrConstant(wasm::ObjectAccess::ToTagged(Code::kHeaderSize))); - - Node* callable = gasm_->LoadFromObject( - MachineType::TaggedPointer(), function_data, - wasm::ObjectAccess::ToTagged(WasmJSFunctionData::kCallableOffset)); - // TODO(manoskouk): Find an elegant way to avoid allocating this pair for - // every call. - Node* function_instance_node = - gasm_->CallBuiltin(Builtins::kWasmAllocatePair, Operator::kEliminatable, - GetInstance(), callable); - - gasm_->Goto(&end_label, call_target, function_instance_node); + gasm_->Goto(&end_label, call_target); } gasm_->Bind(&end_label); args[0] = end_label.PhiAt(0); - Node* instance_node = end_label.PhiAt(1); const UseRetpoline use_retpoline = untrusted_code_mitigations_ ? kRetpoline : kNoRetpoline; @@ -3345,6 +3321,25 @@ Node* WasmGraphBuilder::BuildChangeIntPtrToInt64(Node* value) { : value; } +Node* WasmGraphBuilder::BuildChangeUint32ToUintPtr(Node* node) { + if (mcgraph()->machine()->Is32()) return node; + // Fold instances of ChangeUint32ToUint64(IntConstant) directly. + Uint32Matcher matcher(node); + if (matcher.HasResolvedValue()) { + uintptr_t value = matcher.ResolvedValue(); + return mcgraph()->IntPtrConstant(bit_cast<intptr_t>(value)); + } + return gasm_->ChangeUint32ToUint64(node); +} + +Node* WasmGraphBuilder::BuildSmiShiftBitsConstant() { + return gasm_->IntPtrConstant(kSmiShiftSize + kSmiTagSize); +} + +Node* WasmGraphBuilder::BuildSmiShiftBitsConstant32() { + return Int32Constant(kSmiShiftSize + kSmiTagSize); +} + Node* WasmGraphBuilder::BuildChangeInt32ToSmi(Node* value) { // With pointer compression, only the lower 32 bits are used. return COMPRESS_POINTERS_BOOL @@ -3356,31 +3351,22 @@ Node* WasmGraphBuilder::BuildChangeInt32ToSmi(Node* value) { Node* WasmGraphBuilder::BuildChangeUint31ToSmi(Node* value) { return COMPRESS_POINTERS_BOOL ? gasm_->Word32Shl(value, BuildSmiShiftBitsConstant32()) - : gasm_->WordShl(Uint32ToUintptr(value), + : gasm_->WordShl(BuildChangeUint32ToUintPtr(value), BuildSmiShiftBitsConstant()); } -Node* WasmGraphBuilder::BuildSmiShiftBitsConstant() { - return gasm_->IntPtrConstant(kSmiShiftSize + kSmiTagSize); -} - -Node* WasmGraphBuilder::BuildSmiShiftBitsConstant32() { - return Int32Constant(kSmiShiftSize + kSmiTagSize); -} - Node* WasmGraphBuilder::BuildChangeSmiToInt32(Node* value) { return COMPRESS_POINTERS_BOOL - ? gasm_->Word32Sar(gasm_->TruncateInt64ToInt32(value), - BuildSmiShiftBitsConstant32()) - : BuildTruncateIntPtrToInt32(BuildChangeSmiToIntPtr(value)); + ? gasm_->Word32Sar(value, BuildSmiShiftBitsConstant32()) + : BuildTruncateIntPtrToInt32( + gasm_->WordSar(value, BuildSmiShiftBitsConstant())); } Node* WasmGraphBuilder::BuildChangeSmiToIntPtr(Node* value) { - if (COMPRESS_POINTERS_BOOL) { - value = BuildChangeSmiToInt32(value); - return BuildChangeInt32ToIntPtr(value); - } - return gasm_->WordSar(value, BuildSmiShiftBitsConstant()); + return COMPRESS_POINTERS_BOOL + ? BuildChangeInt32ToIntPtr( + gasm_->Word32Sar(value, BuildSmiShiftBitsConstant32())) + : gasm_->WordSar(value, BuildSmiShiftBitsConstant()); } Node* WasmGraphBuilder::BuildConvertUint32ToSmiWithSaturation(Node* value, @@ -3565,8 +3551,8 @@ void WasmGraphBuilder::GetBaseAndOffsetForImportedMutableExternRefGlobal( // From the index, calculate the actual offset in the FixedArray. This // is kHeaderSize + (index * kTaggedSize). kHeaderSize can be acquired with // wasm::ObjectAccess::ElementOffsetInTaggedFixedArray(0). - Node* index_times_tagged_size = - gasm_->IntMul(Uint32ToUintptr(index), Int32Constant(kTaggedSize)); + Node* index_times_tagged_size = gasm_->IntMul( + BuildChangeUint32ToUintPtr(index), Int32Constant(kTaggedSize)); *offset = gasm_->IntAdd( index_times_tagged_size, mcgraph()->IntPtrConstant( @@ -3763,7 +3749,7 @@ Node* WasmGraphBuilder::BoundsCheckMem(uint8_t access_size, Node* index, wasm::WasmCodePosition position, EnforceBoundsCheck enforce_check) { DCHECK_LE(1, access_size); - if (!env_->module->is_memory64) index = Uint32ToUintptr(index); + if (!env_->module->is_memory64) index = BuildChangeUint32ToUintPtr(index); if (!FLAG_wasm_bounds_checks) return index; if (use_trap_handler() && enforce_check == kCanOmitBoundsCheck) { @@ -4317,7 +4303,7 @@ Node* WasmGraphBuilder::BuildAsmjsLoadMem(MachineType type, Node* index) { // Note that we check against the memory size ignoring the size of the // stored value, which is conservative if misaligned. Technically, asm.js // should never have misaligned accesses. - index = Uint32ToUintptr(index); + index = BuildChangeUint32ToUintPtr(index); Diamond bounds_check(graph(), mcgraph()->common(), gasm_->UintLessThan(index, mem_size), BranchHint::kTrue); bounds_check.Chain(control()); @@ -4356,17 +4342,6 @@ Node* WasmGraphBuilder::BuildAsmjsLoadMem(MachineType type, Node* index) { return bounds_check.Phi(type.representation(), load, oob_value); } -Node* WasmGraphBuilder::Uint32ToUintptr(Node* node) { - if (mcgraph()->machine()->Is32()) return node; - // Fold instances of ChangeUint32ToUint64(IntConstant) directly. - Uint32Matcher matcher(node); - if (matcher.HasResolvedValue()) { - uintptr_t value = matcher.ResolvedValue(); - return mcgraph()->IntPtrConstant(bit_cast<intptr_t>(value)); - } - return gasm_->ChangeUint32ToUint64(node); -} - Node* WasmGraphBuilder::BuildAsmjsStoreMem(MachineType type, Node* index, Node* val) { DCHECK_NOT_NULL(instance_cache_); @@ -4391,7 +4366,7 @@ Node* WasmGraphBuilder::BuildAsmjsStoreMem(MachineType type, Node* index, index = gasm_->Word32And(index, mem_mask); } - index = Uint32ToUintptr(index); + index = BuildChangeUint32ToUintPtr(index); const Operator* store_op = mcgraph()->machine()->Store(StoreRepresentation( type.representation(), WriteBarrierKind::kNoWriteBarrier)); Node* store = graph()->NewNode(store_op, mem_start, index, val, effect(), @@ -5335,12 +5310,7 @@ Node* WasmGraphBuilder::AtomicOp(wasm::WasmOpcode opcode, Node* const* inputs, case wasm::kExprI64AtomicWait: return {kSpecial, MachineType::Int64(), OperatorByType{nullptr}}; default: -#if V8_HAS_CXX14_CONSTEXPR UNREACHABLE(); -#else - // Return something for older GCC. - return {kSpecial, MachineType::Int64(), OperatorByType{nullptr}}; -#endif } } }; @@ -5572,6 +5542,16 @@ Node* WasmGraphBuilder::StructNewWithRtt(uint32_t struct_index, for (uint32_t i = 0; i < type->field_count(); i++) { gasm_->StoreStructField(s, type, i, fields[i]); } + if (type->field_count() == 0) { + static_assert(Heap::kMinObjectSizeInTaggedWords == 2 && + WasmStruct::kHeaderSize == kTaggedSize, + "empty structs need exactly one padding field"); + wasm::ValueType fake_type = wasm::kWasmAnyRef; + Node* padding_offset = gasm_->IntPtrConstant( + wasm::ObjectAccess::ToTagged(WasmStruct::kHeaderSize)); + gasm_->StoreToObject(ObjectAccessForGCStores(fake_type), s, padding_offset, + RefNull()); + } return s; } @@ -6560,7 +6540,7 @@ class WasmWrapperGraphBuilder : public WasmGraphBuilder { Node* BuildCallAllocateJSArray(Node* array_length, Node* context) { // Since we don't check that args will fit in an array, // we make sure this is true based on statically known limits. - STATIC_ASSERT(wasm::kV8MaxWasmFunctionMultiReturns <= + STATIC_ASSERT(wasm::kV8MaxWasmFunctionReturns <= JSArray::kInitialMaxFastElementArray); return gasm_->CallBuiltin(Builtins::kWasmAllocateJSArray, Operator::kEliminatable, array_length, context); @@ -6588,15 +6568,8 @@ class WasmWrapperGraphBuilder : public WasmGraphBuilder { wasm::kNoCodePosition, function_index, kCallContinues); } else { // Call to a wasm function defined in this module. - // The call target is the jump table slot for that function. - Node* jump_table_start = - LOAD_INSTANCE_FIELD(JumpTableStart, MachineType::Pointer()); - Node* jump_table_offset = - BuildLoadJumpTableOffsetFromExportedFunctionData(function_data); - Node* jump_table_slot = - gasm_->IntAdd(jump_table_start, jump_table_offset); - args[0] = jump_table_slot; - + // The (cached) call target is the jump table slot for that function. + args[0] = BuildLoadCallTargetFromExportedFunctionData(function_data); BuildWasmCall(sig_, VectorOf(args), VectorOf(rets), wasm::kNoCodePosition, nullptr, kNoRetpoline, frame_state); @@ -6670,9 +6643,7 @@ class WasmWrapperGraphBuilder : public WasmGraphBuilder { case wasm::kF64: { auto done = gasm_->MakeLabel(); gasm_->GotoIf(IsSmi(input), &done); - Node* map = gasm_->LoadFromObject( - MachineType::TaggedPointer(), input, - wasm::ObjectAccess::ToTagged(HeapObject::kMapOffset)); + Node* map = gasm_->LoadMap(input); Node* heap_number_map = LOAD_ROOT(HeapNumberMap, heap_number_map); Node* is_heap_number = gasm_->WordEqual(heap_number_map, map); gasm_->GotoIf(is_heap_number, &done); @@ -7030,6 +7001,7 @@ class WasmWrapperGraphBuilder : public WasmGraphBuilder { BuildModifyThreadInWasmFlag(true); + Node* old_effect = effect(); Node* exception_branch = graph()->NewNode( mcgraph()->common()->Branch(BranchHint::kTrue), gasm_->WordEqual(return_value, mcgraph()->IntPtrConstant(0)), @@ -7046,10 +7018,9 @@ class WasmWrapperGraphBuilder : public WasmGraphBuilder { gasm_->Call(call_descriptor, call_target, return_value); TerminateThrow(effect(), control()); - SetEffectControl( - return_value, - graph()->NewNode(mcgraph()->common()->IfTrue(), exception_branch)); - DCHECK_LT(sig_->return_count(), wasm::kV8MaxWasmFunctionMultiReturns); + SetEffectControl(old_effect, graph()->NewNode(mcgraph()->common()->IfTrue(), + exception_branch)); + DCHECK_LT(sig_->return_count(), wasm::kV8MaxWasmFunctionReturns); size_t return_count = sig_->return_count(); if (return_count == 0) { Return(Int32Constant(0)); @@ -7090,9 +7061,12 @@ class WasmWrapperGraphBuilder : public WasmGraphBuilder { // Load the original callable from the closure. Node* func_data = gasm_->LoadFunctionDataFromJSFunction(closure); - Node* callable = gasm_->LoadFromObject( + Node* pair = gasm_->LoadFromObject( MachineType::AnyTagged(), func_data, - wasm::ObjectAccess::ToTagged(WasmJSFunctionData::kCallableOffset)); + wasm::ObjectAccess::ToTagged(WasmJSFunctionData::kRefOffset)); + Node* callable = gasm_->LoadFromObject( + MachineType::AnyTagged(), pair, + wasm::ObjectAccess::ToTagged(Tuple2::kValue2Offset)); // Call the underlying closure. base::SmallVector<Node*, 16> args(wasm_count + 7); @@ -7478,7 +7452,7 @@ wasm::WasmCompilationResult CompileWasmMathIntrinsic( wasm::CompilationEnv env( nullptr, wasm::UseTrapHandler::kNoTrapHandler, wasm::RuntimeExceptionSupport::kNoRuntimeExceptionSupport, - wasm::WasmFeatures::All(), wasm::LowerSimd::kNoLowerSimd); + wasm::WasmFeatures::All()); WasmGraphBuilder builder(&env, mcgraph->zone(), mcgraph, sig, source_positions); @@ -7644,7 +7618,7 @@ MaybeHandle<Code> CompileWasmToJSWrapper(Isolate* isolate, MachineGraph* mcgraph = zone->New<MachineGraph>(graph, common, machine); WasmWrapperGraphBuilder builder(zone.get(), mcgraph, sig, nullptr, nullptr, - nullptr, StubCallMode::kCallWasmRuntimeStub, + nullptr, StubCallMode::kCallBuiltinPointer, wasm::WasmFeatures::FromIsolate(isolate)); builder.BuildWasmToJSWrapper(kind, expected_arity); @@ -7792,7 +7766,7 @@ bool BuildGraphForWasmFunction(AccountingAllocator* allocator, source_positions); wasm::VoidResult graph_construction_result = wasm::BuildTFGraph( allocator, env->enabled_features, env->module, &builder, detected, - func_body, loop_infos, node_origins); + func_body, loop_infos, node_origins, func_index); if (graph_construction_result.failed()) { if (FLAG_trace_wasm_compiler) { StdoutStream{} << "Compilation failed: " @@ -7802,49 +7776,8 @@ bool BuildGraphForWasmFunction(AccountingAllocator* allocator, return false; } - // Lower SIMD first, i64x2 nodes will be lowered to int64 nodes, then int64 - // lowering will take care of them. auto sig = CreateMachineSignature(mcgraph->zone(), func_body.sig, WasmGraphBuilder::kCalledFromWasm); - if (builder.has_simd() && - (!CpuFeatures::SupportsWasmSimd128() || env->lower_simd)) { - SimplifiedOperatorBuilder simplified(mcgraph->zone()); - SimdScalarLowering(mcgraph, &simplified, sig).LowerGraph(); - - // SimdScalarLowering changes all v128 to 4 i32, so update the machine - // signature for the call to LowerInt64. - size_t return_count = 0; - size_t param_count = 0; - for (auto ret : sig->returns()) { - return_count += ret == MachineRepresentation::kSimd128 ? 4 : 1; - } - for (auto param : sig->parameters()) { - param_count += param == MachineRepresentation::kSimd128 ? 4 : 1; - } - - Signature<MachineRepresentation>::Builder sig_builder( - mcgraph->zone(), return_count, param_count); - for (auto ret : sig->returns()) { - if (ret == MachineRepresentation::kSimd128) { - for (int i = 0; i < 4; ++i) { - sig_builder.AddReturn(MachineRepresentation::kWord32); - } - } else { - sig_builder.AddReturn(ret); - } - } - for (auto param : sig->parameters()) { - if (param == MachineRepresentation::kSimd128) { - for (int i = 0; i < 4; ++i) { - sig_builder.AddParam(MachineRepresentation::kWord32); - } - } else { - sig_builder.AddParam(param); - } - } - sig = sig_builder.Build(); - } - builder.LowerInt64(sig); if (func_index >= FLAG_trace_wasm_ast_start && @@ -7919,8 +7852,7 @@ wasm::WasmCompilationResult ExecuteTurbofanWasmCompilation( call_descriptor = GetI32WasmCallDescriptor(&zone, call_descriptor); } - if (ContainsSimd(func_body.sig) && - (!CpuFeatures::SupportsWasmSimd128() || env->lower_simd)) { + if (ContainsSimd(func_body.sig) && !CpuFeatures::SupportsWasmSimd128()) { call_descriptor = GetI32WasmCallDescriptorForSimd(&zone, call_descriptor); } diff --git a/deps/v8/src/compiler/wasm-compiler.h b/deps/v8/src/compiler/wasm-compiler.h index a77e76a05d..bb8f5f5efc 100644 --- a/deps/v8/src/compiler/wasm-compiler.h +++ b/deps/v8/src/compiler/wasm-compiler.h @@ -281,6 +281,7 @@ class WasmGraphBuilder { //----------------------------------------------------------------------- Node* BranchNoHint(Node* cond, Node** true_node, Node** false_node); Node* BranchExpectFalse(Node* cond, Node** true_node, Node** false_node); + Node* BranchExpectTrue(Node* cond, Node** true_node, Node** false_node); void TrapIfTrue(wasm::TrapReason reason, Node* cond, wasm::WasmCodePosition position); @@ -530,7 +531,6 @@ class WasmGraphBuilder { Node* CheckBoundsAndAlignment(int8_t access_size, Node* index, uint64_t offset, wasm::WasmCodePosition); - Node* Uint32ToUintptr(Node*); const Operator* GetSafeLoadOperator(int offset, wasm::ValueType type); const Operator* GetSafeStoreOperator(int offset, wasm::ValueType type); Node* BuildChangeEndiannessStore(Node* node, MachineRepresentation rep, @@ -631,6 +631,7 @@ class WasmGraphBuilder { Node* BuildTruncateIntPtrToInt32(Node* value); Node* BuildChangeInt32ToIntPtr(Node* value); Node* BuildChangeIntPtrToInt64(Node* value); + Node* BuildChangeUint32ToUintPtr(Node*); Node* BuildChangeInt32ToSmi(Node* value); Node* BuildChangeUint31ToSmi(Node* value); Node* BuildSmiShiftBitsConstant(); @@ -700,7 +701,7 @@ class WasmGraphBuilder { Node* BuildMultiReturnFixedArrayFromIterable(const wasm::FunctionSig* sig, Node* iterable, Node* context); - Node* BuildLoadJumpTableOffsetFromExportedFunctionData(Node* function_data); + Node* BuildLoadCallTargetFromExportedFunctionData(Node* function_data); //----------------------------------------------------------------------- // Operations involving the CEntry, a dependency we want to remove diff --git a/deps/v8/src/d8/async-hooks-wrapper.cc b/deps/v8/src/d8/async-hooks-wrapper.cc index 2538e78acb..84191b9815 100644 --- a/deps/v8/src/d8/async-hooks-wrapper.cc +++ b/deps/v8/src/d8/async-hooks-wrapper.cc @@ -47,8 +47,7 @@ static AsyncHooksWrap* UnwrapHook( AsyncHooks* hooks = PerIsolateData::Get(isolate)->GetAsyncHooks(); if (!hooks->async_hook_ctor.Get(isolate)->HasInstance(hook)) { - isolate->ThrowException(String::NewFromUtf8Literal( - isolate, "Invalid 'this' passed instead of AsyncHooks instance")); + isolate->ThrowError("Invalid 'this' passed instead of AsyncHooks instance"); return nullptr; } @@ -87,8 +86,7 @@ Local<Object> AsyncHooks::CreateHook( Local<Context> currentContext = isolate->GetCurrentContext(); if (args.Length() != 1 || !args[0]->IsObject()) { - isolate->ThrowException(String::NewFromUtf8Literal( - isolate, "Invalid arguments passed to createHook")); + isolate->ThrowError("Invalid arguments passed to createHook"); return Local<Object>(); } diff --git a/deps/v8/src/d8/d8-console.cc b/deps/v8/src/d8/d8-console.cc index 7f0904e343..fc76bab7ab 100644 --- a/deps/v8/src/d8/d8-console.cc +++ b/deps/v8/src/d8/d8-console.cc @@ -19,7 +19,7 @@ void WriteToFile(const char* prefix, FILE* file, Isolate* isolate, Local<Value> arg = args[i]; Local<String> str_obj; - if (arg->IsSymbol()) arg = Local<Symbol>::Cast(arg)->Description(); + if (arg->IsSymbol()) arg = Local<Symbol>::Cast(arg)->Description(isolate); if (!arg->ToString(isolate->GetCurrentContext()).ToLocal(&str_obj)) return; v8::String::Utf8Value str(isolate, str_obj); @@ -43,8 +43,7 @@ void D8Console::Assert(const debug::ConsoleCallArguments& args, // false-ish. if (args.Length() > 0 && args[0]->BooleanValue(isolate_)) return; WriteToFile("console.assert", stdout, isolate_, args); - isolate_->ThrowException(v8::Exception::Error( - v8::String::NewFromUtf8Literal(isolate_, "console.assert failed"))); + isolate_->ThrowError("console.assert failed"); } void D8Console::Log(const debug::ConsoleCallArguments& args, diff --git a/deps/v8/src/d8/d8-posix.cc b/deps/v8/src/d8/d8-posix.cc index 047b62ef2c..fa30b9153d 100644 --- a/deps/v8/src/d8/d8-posix.cc +++ b/deps/v8/src/d8/d8-posix.cc @@ -159,8 +159,8 @@ class ExecArgs { bool Init(Isolate* isolate, Local<Value> arg0, Local<Array> command_args) { String::Utf8Value prog(isolate, arg0); if (*prog == nullptr) { - isolate->ThrowException(String::NewFromUtf8Literal( - isolate, "os.system(): String conversion of program name failed")); + isolate->ThrowError( + "os.system(): String conversion of program name failed"); return false; } int len = prog.length() + 3; @@ -176,8 +176,8 @@ class ExecArgs { String::Utf8Value utf8_arg(isolate, arg); if (*utf8_arg == nullptr) { exec_args_[i] = nullptr; // Consistent state for destructor. - isolate->ThrowException(String::NewFromUtf8Literal( - isolate, "os.system(): String conversion of argument failed.")); + isolate->ThrowError( + "os.system(): String conversion of argument failed."); return false; } int len = utf8_arg.length() + 1; @@ -214,8 +214,7 @@ static bool GetTimeouts(const v8::FunctionCallbackInfo<v8::Value>& args, ->Int32Value(args.GetIsolate()->GetCurrentContext()) .FromJust(); } else { - args.GetIsolate()->ThrowException(String::NewFromUtf8Literal( - args.GetIsolate(), "system: Argument 4 must be a number")); + args.GetIsolate()->ThrowError("system: Argument 4 must be a number"); return false; } } @@ -225,14 +224,19 @@ static bool GetTimeouts(const v8::FunctionCallbackInfo<v8::Value>& args, ->Int32Value(args.GetIsolate()->GetCurrentContext()) .FromJust(); } else { - args.GetIsolate()->ThrowException(String::NewFromUtf8Literal( - args.GetIsolate(), "system: Argument 3 must be a number")); + args.GetIsolate()->ThrowError("system: Argument 3 must be a number"); return false; } } return true; } +namespace { +v8::Local<v8::String> v8_strerror(v8::Isolate* isolate, int err) { + return v8::String::NewFromUtf8(isolate, strerror(err)).ToLocalChecked(); +} +} // namespace + static const int kReadFD = 0; static const int kWriteFD = 1; @@ -267,8 +271,7 @@ static bool ChildLaunchedOK(Isolate* isolate, int* exec_error_fds) { bytes_read = read(exec_error_fds[kReadFD], &err, sizeof(err)); } while (bytes_read == -1 && errno == EINTR); if (bytes_read != 0) { - isolate->ThrowException( - String::NewFromUtf8(isolate, strerror(err)).ToLocalChecked()); + isolate->ThrowError(v8_strerror(isolate, err)); return false; } return true; @@ -286,8 +289,7 @@ static Local<Value> GetStdout(Isolate* isolate, int child_fd, char buffer[kStdoutReadBufferSize]; if (fcntl(child_fd, F_SETFL, O_NONBLOCK) != 0) { - return isolate->ThrowException( - String::NewFromUtf8(isolate, strerror(errno)).ToLocalChecked()); + return isolate->ThrowError(v8_strerror(isolate, errno)); } int bytes_read; @@ -298,8 +300,7 @@ static Local<Value> GetStdout(Isolate* isolate, int child_fd, if (errno == EAGAIN) { if (!WaitOnFD(child_fd, read_timeout, total_timeout, start_time) || (TimeIsOut(start_time, total_timeout))) { - return isolate->ThrowException(String::NewFromUtf8Literal( - isolate, "Timed out waiting for output")); + return isolate->ThrowError("Timed out waiting for output"); } continue; } else if (errno == EINTR) { @@ -357,8 +358,7 @@ static bool WaitForChild(Isolate* isolate, int pid, if (useconds < 1000000) useconds <<= 1; if ((read_timeout != -1 && useconds / 1000 > read_timeout) || (TimeIsOut(start_time, total_timeout))) { - isolate->ThrowException(String::NewFromUtf8Literal( - isolate, "Timed out waiting for process to terminate")); + isolate->ThrowError("Timed out waiting for process to terminate"); kill(pid, SIGINT); return false; } @@ -367,16 +367,14 @@ static bool WaitForChild(Isolate* isolate, int pid, char message[999]; snprintf(message, sizeof(message), "Child killed by signal %d", child_info.si_status); - isolate->ThrowException( - String::NewFromUtf8(isolate, message).ToLocalChecked()); + isolate->ThrowError(message); return false; } if (child_info.si_code == CLD_EXITED && child_info.si_status != 0) { char message[999]; snprintf(message, sizeof(message), "Child exited with status %d", child_info.si_status); - isolate->ThrowException( - String::NewFromUtf8(isolate, message).ToLocalChecked()); + isolate->ThrowError(message); return false; } @@ -389,8 +387,7 @@ static bool WaitForChild(Isolate* isolate, int pid, char message[999]; snprintf(message, sizeof(message), "Child killed by signal %d", WTERMSIG(child_status)); - isolate->ThrowException( - String::NewFromUtf8(isolate, message).ToLocalChecked()); + isolate->ThrowError(message); return false; } if (WEXITSTATUS(child_status) != 0) { @@ -398,8 +395,7 @@ static bool WaitForChild(Isolate* isolate, int pid, int exit_status = WEXITSTATUS(child_status); snprintf(message, sizeof(message), "Child exited with status %d", exit_status); - isolate->ThrowException( - String::NewFromUtf8(isolate, message).ToLocalChecked()); + isolate->ThrowError(message); return false; } @@ -419,8 +415,7 @@ void Shell::System(const v8::FunctionCallbackInfo<v8::Value>& args) { Local<Array> command_args; if (args.Length() > 1) { if (!args[1]->IsArray()) { - args.GetIsolate()->ThrowException(String::NewFromUtf8Literal( - args.GetIsolate(), "system: Argument 2 must be an array")); + args.GetIsolate()->ThrowError("system: Argument 2 must be an array"); return; } command_args = args[1].As<Array>(); @@ -428,13 +423,11 @@ void Shell::System(const v8::FunctionCallbackInfo<v8::Value>& args) { command_args = Array::New(args.GetIsolate(), 0); } if (command_args->Length() > ExecArgs::kMaxArgs) { - args.GetIsolate()->ThrowException(String::NewFromUtf8Literal( - args.GetIsolate(), "Too many arguments to system()")); + args.GetIsolate()->ThrowError("Too many arguments to system()"); return; } if (args.Length() < 1) { - args.GetIsolate()->ThrowException(String::NewFromUtf8Literal( - args.GetIsolate(), "Too few arguments to system()")); + args.GetIsolate()->ThrowError("Too few arguments to system()"); return; } @@ -449,13 +442,11 @@ void Shell::System(const v8::FunctionCallbackInfo<v8::Value>& args) { int stdout_fds[2]; if (pipe(exec_error_fds) != 0) { - args.GetIsolate()->ThrowException( - String::NewFromUtf8Literal(args.GetIsolate(), "pipe syscall failed.")); + args.GetIsolate()->ThrowError("pipe syscall failed."); return; } if (pipe(stdout_fds) != 0) { - args.GetIsolate()->ThrowException( - String::NewFromUtf8Literal(args.GetIsolate(), "pipe syscall failed.")); + args.GetIsolate()->ThrowError("pipe syscall failed."); return; } @@ -493,29 +484,24 @@ void Shell::System(const v8::FunctionCallbackInfo<v8::Value>& args) { void Shell::ChangeDirectory(const v8::FunctionCallbackInfo<v8::Value>& args) { if (args.Length() != 1) { - args.GetIsolate()->ThrowException(String::NewFromUtf8Literal( - args.GetIsolate(), "chdir() takes one argument")); + args.GetIsolate()->ThrowError("chdir() takes one argument"); return; } String::Utf8Value directory(args.GetIsolate(), args[0]); if (*directory == nullptr) { - args.GetIsolate()->ThrowException(String::NewFromUtf8Literal( - args.GetIsolate(), - "os.chdir(): String conversion of argument failed.")); + args.GetIsolate()->ThrowError( + "os.chdir(): String conversion of argument failed."); return; } if (chdir(*directory) != 0) { - args.GetIsolate()->ThrowException( - String::NewFromUtf8(args.GetIsolate(), strerror(errno)) - .ToLocalChecked()); + args.GetIsolate()->ThrowError(v8_strerror(args.GetIsolate(), errno)); return; } } void Shell::SetUMask(const v8::FunctionCallbackInfo<v8::Value>& args) { if (args.Length() != 1) { - args.GetIsolate()->ThrowException(String::NewFromUtf8Literal( - args.GetIsolate(), "umask() takes one argument")); + args.GetIsolate()->ThrowError("umask() takes one argument"); return; } if (args[0]->IsNumber()) { @@ -524,8 +510,7 @@ void Shell::SetUMask(const v8::FunctionCallbackInfo<v8::Value>& args) { args.GetReturnValue().Set(previous); return; } else { - args.GetIsolate()->ThrowException(String::NewFromUtf8Literal( - args.GetIsolate(), "umask() argument must be numeric")); + args.GetIsolate()->ThrowError("umask() argument must be numeric"); return; } } @@ -534,13 +519,11 @@ static bool CheckItsADirectory(Isolate* isolate, char* directory) { struct stat stat_buf; int stat_result = stat(directory, &stat_buf); if (stat_result != 0) { - isolate->ThrowException( - String::NewFromUtf8(isolate, strerror(errno)).ToLocalChecked()); + isolate->ThrowError(v8_strerror(isolate, errno)); return false; } if ((stat_buf.st_mode & S_IFDIR) != 0) return true; - isolate->ThrowException( - String::NewFromUtf8(isolate, strerror(EEXIST)).ToLocalChecked()); + isolate->ThrowError(v8_strerror(isolate, EEXIST)); return false; } @@ -554,8 +537,7 @@ static bool mkdirp(Isolate* isolate, char* directory, mode_t mask) { } else if (errno == ENOENT) { // Intermediate path element is missing. char* last_slash = strrchr(directory, '/'); if (last_slash == nullptr) { - isolate->ThrowException( - String::NewFromUtf8(isolate, strerror(errno)).ToLocalChecked()); + isolate->ThrowError(v8_strerror(isolate, errno)); return false; } *last_slash = 0; @@ -566,12 +548,10 @@ static bool mkdirp(Isolate* isolate, char* directory, mode_t mask) { if (errno == EEXIST) { return CheckItsADirectory(isolate, directory); } - isolate->ThrowException( - String::NewFromUtf8(isolate, strerror(errno)).ToLocalChecked()); + isolate->ThrowError(v8_strerror(isolate, errno)); return false; } else { - isolate->ThrowException( - String::NewFromUtf8(isolate, strerror(errno)).ToLocalChecked()); + isolate->ThrowError(v8_strerror(isolate, errno)); return false; } } @@ -584,20 +564,17 @@ void Shell::MakeDirectory(const v8::FunctionCallbackInfo<v8::Value>& args) { ->Int32Value(args.GetIsolate()->GetCurrentContext()) .FromJust(); } else { - args.GetIsolate()->ThrowException(String::NewFromUtf8Literal( - args.GetIsolate(), "mkdirp() second argument must be numeric")); + args.GetIsolate()->ThrowError("mkdirp() second argument must be numeric"); return; } } else if (args.Length() != 1) { - args.GetIsolate()->ThrowException(String::NewFromUtf8Literal( - args.GetIsolate(), "mkdirp() takes one or two arguments")); + args.GetIsolate()->ThrowError("mkdirp() takes one or two arguments"); return; } String::Utf8Value directory(args.GetIsolate(), args[0]); if (*directory == nullptr) { - args.GetIsolate()->ThrowException(String::NewFromUtf8Literal( - args.GetIsolate(), - "os.mkdirp(): String conversion of argument failed.")); + args.GetIsolate()->ThrowError( + "os.mkdirp(): String conversion of argument failed."); return; } mkdirp(args.GetIsolate(), *directory, mask); @@ -605,15 +582,13 @@ void Shell::MakeDirectory(const v8::FunctionCallbackInfo<v8::Value>& args) { void Shell::RemoveDirectory(const v8::FunctionCallbackInfo<v8::Value>& args) { if (args.Length() != 1) { - args.GetIsolate()->ThrowException(String::NewFromUtf8Literal( - args.GetIsolate(), "rmdir() takes one or two arguments")); + args.GetIsolate()->ThrowError("rmdir() takes one or two arguments"); return; } String::Utf8Value directory(args.GetIsolate(), args[0]); if (*directory == nullptr) { - args.GetIsolate()->ThrowException(String::NewFromUtf8Literal( - args.GetIsolate(), - "os.rmdir(): String conversion of argument failed.")); + args.GetIsolate()->ThrowError( + "os.rmdir(): String conversion of argument failed."); return; } rmdir(*directory); @@ -621,22 +596,19 @@ void Shell::RemoveDirectory(const v8::FunctionCallbackInfo<v8::Value>& args) { void Shell::SetEnvironment(const v8::FunctionCallbackInfo<v8::Value>& args) { if (args.Length() != 2) { - args.GetIsolate()->ThrowException(String::NewFromUtf8Literal( - args.GetIsolate(), "setenv() takes two arguments")); + args.GetIsolate()->ThrowError("setenv() takes two arguments"); return; } String::Utf8Value var(args.GetIsolate(), args[0]); String::Utf8Value value(args.GetIsolate(), args[1]); if (*var == nullptr) { - args.GetIsolate()->ThrowException(String::NewFromUtf8Literal( - args.GetIsolate(), - "os.setenv(): String conversion of variable name failed.")); + args.GetIsolate()->ThrowError( + "os.setenv(): String conversion of variable name failed."); return; } if (*value == nullptr) { - args.GetIsolate()->ThrowException(String::NewFromUtf8Literal( - args.GetIsolate(), - "os.setenv(): String conversion of variable contents failed.")); + args.GetIsolate()->ThrowError( + "os.setenv(): String conversion of variable contents failed."); return; } setenv(*var, *value, 1); @@ -644,15 +616,13 @@ void Shell::SetEnvironment(const v8::FunctionCallbackInfo<v8::Value>& args) { void Shell::UnsetEnvironment(const v8::FunctionCallbackInfo<v8::Value>& args) { if (args.Length() != 1) { - args.GetIsolate()->ThrowException(String::NewFromUtf8Literal( - args.GetIsolate(), "unsetenv() takes one argument")); + args.GetIsolate()->ThrowError("unsetenv() takes one argument"); return; } String::Utf8Value var(args.GetIsolate(), args[0]); if (*var == nullptr) { - args.GetIsolate()->ThrowException(String::NewFromUtf8Literal( - args.GetIsolate(), - "os.setenv(): String conversion of variable name failed.")); + args.GetIsolate()->ThrowError( + "os.setenv(): String conversion of variable name failed."); return; } unsetenv(*var); diff --git a/deps/v8/src/d8/d8-test.cc b/deps/v8/src/d8/d8-test.cc index e5eb5e419b..741b838b76 100644 --- a/deps/v8/src/d8/d8-test.cc +++ b/deps/v8/src/d8/d8-test.cc @@ -21,16 +21,29 @@ namespace v8 { namespace { + +#define CHECK_SELF_OR_FALLBACK(return_value) \ + if (!self) { \ + options.fallback = 1; \ + return return_value; \ + } + +#define CHECK_SELF_OR_THROW() \ + if (!self) { \ + args.GetIsolate()->ThrowError( \ + "This method is not defined on objects inheriting from FastCAPI."); \ + return; \ + } + class FastCApiObject { public: - static double AddAllFastCallback(ApiObject receiver, bool should_fallback, + static double AddAllFastCallback(Local<Object> receiver, bool should_fallback, int32_t arg_i32, uint32_t arg_u32, int64_t arg_i64, uint64_t arg_u64, float arg_f32, double arg_f64, FastApiCallbackOptions& options) { - Value* receiver_value = reinterpret_cast<Value*>(&receiver); - CHECK(receiver_value->IsObject()); - FastCApiObject* self = UnwrapObject(Object::Cast(receiver_value)); + FastCApiObject* self = UnwrapObject(receiver); + CHECK_SELF_OR_FALLBACK(0); self->fast_call_count_++; if (should_fallback) { @@ -42,33 +55,42 @@ class FastCApiObject { static_cast<double>(arg_i64) + static_cast<double>(arg_u64) + static_cast<double>(arg_f32) + arg_f64; } + static double AddAllFastCallback_5Args(Local<Object> receiver, + bool should_fallback, int32_t arg_i32, + uint32_t arg_u32, int64_t arg_i64, + uint64_t arg_u64, float arg_f32, + FastApiCallbackOptions& options) { + return AddAllFastCallback(receiver, should_fallback, arg_i32, arg_u32, + arg_i64, arg_u64, arg_f32, 0, options); + } static void AddAllSlowCallback(const FunctionCallbackInfo<Value>& args) { Isolate* isolate = args.GetIsolate(); - FastCApiObject* self = UnwrapObject(*args.This()); + FastCApiObject* self = UnwrapObject(args.This()); + CHECK_SELF_OR_THROW(); self->slow_call_count_++; HandleScope handle_scope(isolate); double sum = 0; - if (args.Length() > 1) { + if (args.Length() > 1 && args[1]->IsNumber()) { sum += args[1]->Int32Value(isolate->GetCurrentContext()).FromJust(); } - if (args.Length() > 2) { + if (args.Length() > 2 && args[2]->IsNumber()) { sum += args[2]->Uint32Value(isolate->GetCurrentContext()).FromJust(); } - if (args.Length() > 3) { + if (args.Length() > 3 && args[3]->IsNumber()) { sum += args[3]->IntegerValue(isolate->GetCurrentContext()).FromJust(); } - if (args.Length() > 4) { + if (args.Length() > 4 && args[4]->IsNumber()) { sum += args[4]->IntegerValue(isolate->GetCurrentContext()).FromJust(); } - if (args.Length() > 5) { + if (args.Length() > 5 && args[5]->IsNumber()) { sum += args[5]->NumberValue(isolate->GetCurrentContext()).FromJust(); } else { sum += std::numeric_limits<double>::quiet_NaN(); } - if (args.Length() > 6) { + if (args.Length() > 6 && args[6]->IsNumber()) { sum += args[6]->NumberValue(isolate->GetCurrentContext()).FromJust(); } else { sum += std::numeric_limits<double>::quiet_NaN(); @@ -77,12 +99,12 @@ class FastCApiObject { args.GetReturnValue().Set(Number::New(isolate, sum)); } - static int Add32BitIntFastCallback(ApiObject receiver, bool should_fallback, - int32_t arg_i32, uint32_t arg_u32, + static int Add32BitIntFastCallback(v8::Local<v8::Object> receiver, + bool should_fallback, int32_t arg_i32, + uint32_t arg_u32, FastApiCallbackOptions& options) { - Value* receiver_value = reinterpret_cast<Value*>(&receiver); - CHECK(receiver_value->IsObject()); - FastCApiObject* self = UnwrapObject(Object::Cast(receiver_value)); + FastCApiObject* self = UnwrapObject(receiver); + CHECK_SELF_OR_FALLBACK(0); self->fast_call_count_++; if (should_fallback) { @@ -95,40 +117,104 @@ class FastCApiObject { static void Add32BitIntSlowCallback(const FunctionCallbackInfo<Value>& args) { Isolate* isolate = args.GetIsolate(); - FastCApiObject* self = UnwrapObject(*args.This()); + FastCApiObject* self = UnwrapObject(args.This()); + CHECK_SELF_OR_THROW(); self->slow_call_count_++; HandleScope handle_scope(isolate); double sum = 0; - if (args.Length() > 1) { + if (args.Length() > 1 && args[1]->IsNumber()) { sum += args[1]->Int32Value(isolate->GetCurrentContext()).FromJust(); } - if (args.Length() > 2) { + if (args.Length() > 2 && args[2]->IsNumber()) { sum += args[2]->Uint32Value(isolate->GetCurrentContext()).FromJust(); } args.GetReturnValue().Set(Number::New(isolate, sum)); } + static bool IsFastCApiObjectFastCallback(v8::Local<v8::Object> receiver, + bool should_fallback, + v8::Local<v8::Value> arg, + FastApiCallbackOptions& options) { + FastCApiObject* self = UnwrapObject(receiver); + CHECK_SELF_OR_FALLBACK(false); + self->fast_call_count_++; + + if (should_fallback) { + options.fallback = 1; + return false; + } + + if (!arg->IsObject()) { + return false; + } + Local<Object> object = arg.As<Object>(); + if (!IsValidApiObject(object)) return false; + + internal::Isolate* i_isolate = + internal::IsolateFromNeverReadOnlySpaceObject( + *reinterpret_cast<internal::Address*>(*object)); + CHECK_NOT_NULL(i_isolate); + Isolate* isolate = reinterpret_cast<Isolate*>(i_isolate); + HandleScope handle_scope(isolate); + return PerIsolateData::Get(isolate) + ->GetTestApiObjectCtor() + ->IsLeafTemplateForApiObject(object); + } + static void IsFastCApiObjectSlowCallback( + const FunctionCallbackInfo<Value>& args) { + Isolate* isolate = args.GetIsolate(); + + FastCApiObject* self = UnwrapObject(args.This()); + CHECK_SELF_OR_THROW(); + self->slow_call_count_++; + + HandleScope handle_scope(isolate); + + bool result = false; + if (args.Length() < 2) { + args.GetIsolate()->ThrowError( + "is_valid_api_object should be called with 2 arguments"); + return; + } + if (args[1]->IsObject()) { + Local<Object> object = args[1].As<Object>(); + if (!IsValidApiObject(object)) { + result = false; + } else { + result = PerIsolateData::Get(args.GetIsolate()) + ->GetTestApiObjectCtor() + ->IsLeafTemplateForApiObject(object); + } + } + + args.GetReturnValue().Set(Boolean::New(isolate, result)); + } + static void FastCallCount(const FunctionCallbackInfo<Value>& args) { - FastCApiObject* self = UnwrapObject(*args.This()); + FastCApiObject* self = UnwrapObject(args.This()); + CHECK_SELF_OR_THROW(); args.GetReturnValue().Set( Number::New(args.GetIsolate(), self->fast_call_count())); } static void SlowCallCount(const FunctionCallbackInfo<Value>& args) { - FastCApiObject* self = UnwrapObject(*args.This()); + FastCApiObject* self = UnwrapObject(args.This()); + CHECK_SELF_OR_THROW(); args.GetReturnValue().Set( Number::New(args.GetIsolate(), self->slow_call_count())); } static void ResetCounts(const FunctionCallbackInfo<Value>& args) { - FastCApiObject* self = UnwrapObject(*args.This()); + FastCApiObject* self = UnwrapObject(args.This()); + CHECK_SELF_OR_THROW(); self->reset_counts(); args.GetReturnValue().Set(Undefined(args.GetIsolate())); } - static void SupportsFPParams(const FunctionCallbackInfo<Value>& info) { - FastCApiObject* self = UnwrapObject(*info.This()); - info.GetReturnValue().Set(self->supports_fp_params_); + static void SupportsFPParams(const FunctionCallbackInfo<Value>& args) { + FastCApiObject* self = UnwrapObject(args.This()); + CHECK_SELF_OR_THROW(); + args.GetReturnValue().Set(self->supports_fp_params_); } int fast_call_count() const { return fast_call_count_; } @@ -141,12 +227,14 @@ class FastCApiObject { static const int kV8WrapperObjectIndex = 1; private: - static FastCApiObject* UnwrapObject(Object* object) { - i::Address addr = *reinterpret_cast<i::Address*>(object); + static bool IsValidApiObject(Local<Object> object) { + i::Address addr = *reinterpret_cast<i::Address*>(*object); auto instance_type = i::Internals::GetInstanceType(addr); - if (instance_type != i::Internals::kJSObjectType && - instance_type != i::Internals::kJSApiObjectType && - instance_type != i::Internals::kJSSpecialApiObjectType) { + return (instance_type == i::Internals::kJSApiObjectType || + instance_type == i::Internals::kJSSpecialApiObjectType); + } + static FastCApiObject* UnwrapObject(Local<Object> object) { + if (!IsValidApiObject(object)) { return nullptr; } FastCApiObject* wrapped = reinterpret_cast<FastCApiObject*>( @@ -162,18 +250,18 @@ class FastCApiObject { #endif // V8_ENABLE_FP_PARAMS_IN_C_LINKAGE }; +#undef CHECK_SELF_OR_THROW +#undef CHECK_SELF_OR_FALLBACK + // The object is statically initialized for simplicity, typically the embedder // will take care of managing their C++ objects lifetime. thread_local FastCApiObject kFastCApiObject; } // namespace -// TODO(mslekova): Rename the fast_c_api helper to FastCAPI. -void CreateObject(const FunctionCallbackInfo<Value>& info) { +void CreateFastCAPIObject(const FunctionCallbackInfo<Value>& info) { if (!info.IsConstructCall()) { - info.GetIsolate()->ThrowException( - v8::Exception::Error(String::NewFromUtf8Literal( - info.GetIsolate(), - "FastCAPI helper must be constructed with new."))); + info.GetIsolate()->ThrowError( + "FastCAPI helper must be constructed with new."); return; } Local<Object> api_object = info.Holder(); @@ -189,7 +277,8 @@ void CreateObject(const FunctionCallbackInfo<Value>& info) { Local<FunctionTemplate> Shell::CreateTestFastCApiTemplate(Isolate* isolate) { Local<FunctionTemplate> api_obj_ctor = - FunctionTemplate::New(isolate, CreateObject); + FunctionTemplate::New(isolate, CreateFastCAPIObject); + PerIsolateData::Get(isolate)->SetTestApiObjectCtor(api_obj_ctor); Local<Signature> signature = Signature::New(isolate, api_obj_ctor); { CFunction add_all_c_func = @@ -200,6 +289,19 @@ Local<FunctionTemplate> Shell::CreateTestFastCApiTemplate(Isolate* isolate) { Local<Value>(), signature, 1, ConstructorBehavior::kThrow, SideEffectType::kHasSideEffect, &add_all_c_func)); + + // To test function overloads. + CFunction add_all_5args_c_func = + CFunction::Make(FastCApiObject::AddAllFastCallback_5Args); + const CFunction c_function_overloads[] = {add_all_c_func, + add_all_5args_c_func}; + api_obj_ctor->PrototypeTemplate()->Set( + isolate, "overloaded_add_all", + FunctionTemplate::NewWithCFunctionOverloads( + isolate, FastCApiObject::AddAllSlowCallback, Local<Value>(), + signature, 1, ConstructorBehavior::kThrow, + SideEffectType::kHasSideEffect, {c_function_overloads, 2})); + CFunction add_32bit_int_c_func = CFunction::Make(FastCApiObject::Add32BitIntFastCallback); api_obj_ctor->PrototypeTemplate()->Set( @@ -208,6 +310,14 @@ Local<FunctionTemplate> Shell::CreateTestFastCApiTemplate(Isolate* isolate) { isolate, FastCApiObject::Add32BitIntSlowCallback, Local<Value>(), signature, 1, ConstructorBehavior::kThrow, SideEffectType::kHasSideEffect, &add_32bit_int_c_func)); + CFunction is_valid_api_object_c_func = + CFunction::Make(FastCApiObject::IsFastCApiObjectFastCallback); + api_obj_ctor->PrototypeTemplate()->Set( + isolate, "is_fast_c_api_object", + FunctionTemplate::New( + isolate, FastCApiObject::IsFastCApiObjectSlowCallback, + Local<Value>(), signature, 1, ConstructorBehavior::kThrow, + SideEffectType::kHasSideEffect, &is_valid_api_object_c_func)); api_obj_ctor->PrototypeTemplate()->Set( isolate, "fast_call_count", FunctionTemplate::New(isolate, FastCApiObject::FastCallCount, @@ -227,4 +337,20 @@ Local<FunctionTemplate> Shell::CreateTestFastCApiTemplate(Isolate* isolate) { return api_obj_ctor; } +void CreateLeafInterfaceObject(const FunctionCallbackInfo<Value>& info) { + if (!info.IsConstructCall()) { + info.GetIsolate()->ThrowError( + "LeafInterfaceType helper must be constructed with new."); + } +} + +Local<FunctionTemplate> Shell::CreateLeafInterfaceTypeTemplate( + Isolate* isolate) { + Local<FunctionTemplate> leaf_object_ctor = + FunctionTemplate::New(isolate, CreateLeafInterfaceObject); + leaf_object_ctor->SetClassName( + String::NewFromUtf8Literal(isolate, "LeafInterfaceType")); + return leaf_object_ctor; +} + } // namespace v8 diff --git a/deps/v8/src/d8/d8.cc b/deps/v8/src/d8/d8.cc index d5b4600ad6..8c9a4c3ae6 100644 --- a/deps/v8/src/d8/d8.cc +++ b/deps/v8/src/d8/d8.cc @@ -32,6 +32,7 @@ #include "src/base/platform/platform.h" #include "src/base/platform/time.h" #include "src/base/platform/wrappers.h" +#include "src/base/sanitizer/msan.h" #include "src/base/sys-info.h" #include "src/d8/d8-console.h" #include "src/d8/d8-platforms.h" @@ -53,7 +54,6 @@ #include "src/parsing/parsing.h" #include "src/parsing/scanner-character-streams.h" #include "src/profiler/profile-generator.h" -#include "src/sanitizer/msan.h" #include "src/snapshot/snapshot.h" #include "src/tasks/cancelable-task.h" #include "src/trap-handler/trap-handler.h" @@ -333,11 +333,6 @@ class MultiMappedAllocator : public ArrayBufferAllocatorBase { v8::Platform* g_default_platform; std::unique_ptr<v8::Platform> g_platform; -static Local<Value> Throw(Isolate* isolate, const char* message) { - return isolate->ThrowException(v8::Exception::Error( - String::NewFromUtf8(isolate, message).ToLocalChecked())); -} - static MaybeLocal<Value> TryGetValue(v8::Isolate* isolate, Local<Context> context, Local<v8::Object> object, @@ -355,13 +350,13 @@ static Local<Value> GetValue(v8::Isolate* isolate, Local<Context> context, std::shared_ptr<Worker> GetWorkerFromInternalField(Isolate* isolate, Local<Object> object) { if (object->InternalFieldCount() != 1) { - Throw(isolate, "this is not a Worker"); + isolate->ThrowError("this is not a Worker"); return nullptr; } i::Handle<i::Object> handle = Utils::OpenHandle(*object->GetInternalField(0)); if (handle->IsSmi()) { - Throw(isolate, "Worker is defunct because main thread is terminating"); + isolate->ThrowError("Worker is defunct because main thread is terminating"); return nullptr; } auto managed = i::Handle<i::Managed<Worker>>::cast(handle); @@ -696,6 +691,12 @@ bool Shell::ExecuteString(Isolate* isolate, Local<String> source, Local<Context> context(isolate->GetCurrentContext()); ScriptOrigin origin(isolate, name); + for (int i = 1; i < options.repeat_compile; ++i) { + HandleScope handle_scope(isolate); + if (CompileString<Script>(isolate, context, source, origin).IsEmpty()) { + return false; + } + } Local<Script> script; if (!CompileString<Script>(isolate, context, source, origin) .ToLocal(&script)) { @@ -710,6 +711,9 @@ bool Shell::ExecuteString(Isolate* isolate, Local<String> source, StoreInCodeCache(isolate, source, cached_data); delete cached_data; } + if (options.compile_only) { + return true; + } maybe_result = script->Run(realm); if (options.code_cache_options == ShellOptions::CodeCacheOptions::kProduceCacheAfterExecute) { @@ -728,7 +732,7 @@ bool Shell::ExecuteString(Isolate* isolate, Local<String> source, if (options.web_snapshot_config) { std::vector<std::string> exports; if (!ReadLines(options.web_snapshot_config, exports)) { - Throw(isolate, "Web snapshots: unable to read config"); + isolate->ThrowError("Web snapshots: unable to read config"); CHECK(try_catch.HasCaught()); ReportException(isolate, &try_catch); return false; @@ -965,7 +969,8 @@ MaybeLocal<Module> Shell::FetchModuleTree(Local<Module> referrer, CHECK(specifier_it != d->module_to_specifier_map.end()); msg += "\n imported by " + specifier_it->second; } - Throw(isolate, msg.c_str()); + isolate->ThrowError( + v8::String::NewFromUtf8(isolate, msg.c_str()).ToLocalChecked()); return MaybeLocal<Module>(); } ScriptOrigin origin( @@ -1024,7 +1029,7 @@ MaybeLocal<Module> Shell::FetchModuleTree(Local<Module> referrer, context, import_assertions, true); if (request_module_type == ModuleType::kInvalid) { - Throw(isolate, "Invalid module type was asserted"); + isolate->ThrowError("Invalid module type was asserted"); return MaybeLocal<Module>(); } @@ -1211,7 +1216,7 @@ void Shell::DoHostImportModuleDynamically(void* import_data) { try_catch.SetVerbose(true); if (module_type == ModuleType::kInvalid) { - Throw(isolate, "Invalid module type was asserted"); + isolate->ThrowError("Invalid module type was asserted"); CHECK(try_catch.HasCaught()); resolver->Reject(realm, try_catch.Exception()).ToChecked(); return; @@ -1358,7 +1363,7 @@ bool Shell::ExecuteWebSnapshot(Isolate* isolate, const char* file_name) { std::unique_ptr<uint8_t[]> snapshot_data( reinterpret_cast<uint8_t*>(ReadChars(absolute_path.c_str(), &length))); if (length == 0) { - Throw(isolate, "Error reading the web snapshot"); + isolate->ThrowError("Error reading the web snapshot"); DCHECK(try_catch.HasCaught()); ReportException(isolate, &try_catch); return false; @@ -1468,6 +1473,14 @@ void PerIsolateData::DeleteDynamicImportData(DynamicImportData* data) { delete data; } +Local<FunctionTemplate> PerIsolateData::GetTestApiObjectCtor() const { + return test_api_object_ctor_.Get(isolate_); +} + +void PerIsolateData::SetTestApiObjectCtor(Local<FunctionTemplate> ctor) { + test_api_object_ctor_.Reset(isolate_, ctor); +} + PerIsolateData::RealmScope::RealmScope(PerIsolateData* data) : data_(data) { data_->realm_count_ = 1; data_->realm_current_ = 0; @@ -1500,14 +1513,14 @@ int PerIsolateData::RealmFind(Local<Context> context) { int PerIsolateData::RealmIndexOrThrow( const v8::FunctionCallbackInfo<v8::Value>& args, int arg_offset) { if (args.Length() < arg_offset || !args[arg_offset]->IsNumber()) { - Throw(args.GetIsolate(), "Invalid argument"); + args.GetIsolate()->ThrowError("Invalid argument"); return -1; } int index = args[arg_offset] ->Int32Value(args.GetIsolate()->GetCurrentContext()) .FromMaybe(-1); if (index < 0 || index >= realm_count_ || realms_[index].IsEmpty()) { - Throw(args.GetIsolate(), "Invalid realm index"); + args.GetIsolate()->ThrowError("Invalid realm index"); return -1; } return index; @@ -1565,7 +1578,7 @@ void Shell::RealmOwner(const v8::FunctionCallbackInfo<v8::Value>& args) { Isolate* isolate = args.GetIsolate(); PerIsolateData* data = PerIsolateData::Get(isolate); if (args.Length() < 1 || !args[0]->IsObject()) { - Throw(args.GetIsolate(), "Invalid argument"); + args.GetIsolate()->ThrowError("Invalid argument"); return; } Local<Object> object = @@ -1577,7 +1590,7 @@ void Shell::RealmOwner(const v8::FunctionCallbackInfo<v8::Value>& args) { } Local<Context> creation_context; if (!object->GetCreationContext().ToLocal(&creation_context)) { - Throw(args.GetIsolate(), "object doesn't have creation context"); + args.GetIsolate()->ThrowError("object doesn't have creation context"); return; } int index = data->RealmFind(creation_context); @@ -1661,7 +1674,7 @@ void Shell::RealmNavigate(const v8::FunctionCallbackInfo<v8::Value>& args) { if (index == -1) return; if (index == 0 || index == data->realm_current_ || index == data->realm_switch_) { - Throw(args.GetIsolate(), "Invalid realm index"); + args.GetIsolate()->ThrowError("Invalid realm index"); return; } @@ -1690,7 +1703,7 @@ void Shell::RealmDetachGlobal(const v8::FunctionCallbackInfo<v8::Value>& args) { if (index == -1) return; if (index == 0 || index == data->realm_current_ || index == data->realm_switch_) { - Throw(args.GetIsolate(), "Invalid realm index"); + args.GetIsolate()->ThrowError("Invalid realm index"); return; } @@ -1707,7 +1720,7 @@ void Shell::RealmDispose(const v8::FunctionCallbackInfo<v8::Value>& args) { if (index == -1) return; if (index == 0 || index == data->realm_current_ || index == data->realm_switch_) { - Throw(args.GetIsolate(), "Invalid realm index"); + args.GetIsolate()->ThrowError("Invalid realm index"); return; } DisposeRealm(args, index); @@ -1729,7 +1742,7 @@ void Shell::RealmEval(const v8::FunctionCallbackInfo<v8::Value>& args) { int index = data->RealmIndexOrThrow(args, 0); if (index == -1) return; if (args.Length() < 2 || !args[1]->IsString()) { - Throw(args.GetIsolate(), "Invalid argument"); + args.GetIsolate()->ThrowError("Invalid argument"); return; } ScriptOrigin origin(isolate, @@ -1780,18 +1793,18 @@ void Shell::LogGetAndStop(const v8::FunctionCallbackInfo<v8::Value>& args) { std::string file_name = i_isolate->logger()->file_name(); if (!i::Log::IsLoggingToTemporaryFile(file_name)) { - Throw(isolate, "Only capturing from temporary files is supported."); + isolate->ThrowError("Only capturing from temporary files is supported."); return; } if (!i_isolate->logger()->is_logging()) { - Throw(isolate, "Logging not enabled."); + isolate->ThrowError("Logging not enabled."); return; } std::string raw_log; FILE* log_file = i_isolate->logger()->TearDownAndGetLogFile(); if (!log_file) { - Throw(isolate, "Log file does not exist."); + isolate->ThrowError("Log file does not exist."); return; } @@ -1800,7 +1813,7 @@ void Shell::LogGetAndStop(const v8::FunctionCallbackInfo<v8::Value>& args) { base::Fclose(log_file); if (!exists) { - Throw(isolate, "Unable to read log file."); + isolate->ThrowError("Unable to read log file."); return; } Local<String> result = @@ -1816,13 +1829,13 @@ void Shell::TestVerifySourcePositions( Isolate* isolate = args.GetIsolate(); // Check if the argument is a valid function. if (args.Length() != 1) { - Throw(isolate, "Expected function as single argument."); + isolate->ThrowError("Expected function as single argument."); return; } auto arg_handle = Utils::OpenHandle(*args[0]); if (!arg_handle->IsHeapObject() || !i::Handle<i::HeapObject>::cast(arg_handle) ->IsJSFunctionOrBoundFunction()) { - Throw(isolate, "Expected function as single argument."); + isolate->ThrowError("Expected function as single argument."); return; } @@ -1839,7 +1852,7 @@ void Shell::TestVerifySourcePositions( i::Handle<i::JSFunction> function = i::Handle<i::JSFunction>::cast(callable); if (!function->shared().HasBytecodeArray()) { - Throw(isolate, "Function has no BytecodeArray attached."); + isolate->ThrowError("Function has no BytecodeArray attached."); return; } i::Handle<i::BytecodeArray> bytecodes = @@ -1865,7 +1878,7 @@ void Shell::TestVerifySourcePositions( if (has_baseline) { if (offset_iterator->current_bytecode_offset() != bytecode_iterator.current_offset()) { - Throw(isolate, "Baseline bytecode offset mismatch."); + isolate->ThrowError("Baseline bytecode offset mismatch."); return; } // Check that we map every address to this bytecode correctly. @@ -1877,7 +1890,8 @@ void Shell::TestVerifySourcePositions( pc_lookup.AdvanceToPCOffset(pc); if (pc_lookup.current_bytecode_offset() != bytecode_iterator.current_offset()) { - Throw(isolate, "Baseline bytecode offset mismatch for PC lookup."); + isolate->ThrowError( + "Baseline bytecode offset mismatch for PC lookup."); return; } } @@ -1885,14 +1899,14 @@ void Shell::TestVerifySourcePositions( bytecode_iterator.Advance(); if (has_baseline && !bytecode_iterator.done()) { if (offset_iterator->done()) { - Throw(isolate, "Missing bytecode(s) in baseline offset mapping."); + isolate->ThrowError("Missing bytecode(s) in baseline offset mapping."); return; } offset_iterator->Advance(); } } if (has_baseline && !offset_iterator->done()) { - Throw(isolate, "Excess offsets in baseline offset mapping."); + isolate->ThrowError("Excess offsets in baseline offset mapping."); return; } } @@ -1928,6 +1942,13 @@ void Shell::AsyncHooksTriggerAsyncId( void Shell::SetPromiseHooks(const v8::FunctionCallbackInfo<v8::Value>& args) { Isolate* isolate = args.GetIsolate(); + if (i::FLAG_correctness_fuzzer_suppressions) { + // Make sure we have no pending promises if correctness fuzzing is active. + // Due to fast-paths we might have not created all intermediate promises + // that aren't spec visible. However, the promise hook might expose them + // and cause different output. + isolate->PerformMicrotaskCheckpoint(); + } Local<Context> context = isolate->GetCurrentContext(); HandleScope handle_scope(isolate); @@ -1953,7 +1974,7 @@ void WriteToFile(FILE* file, const v8::FunctionCallbackInfo<v8::Value>& args) { Local<String> str_obj; if (arg->IsSymbol()) { - arg = arg.As<Symbol>()->Description(); + arg = arg.As<Symbol>()->Description(args.GetIsolate()); } if (!arg->ToString(args.GetIsolate()->GetCurrentContext()) .ToLocal(&str_obj)) { @@ -1992,7 +2013,7 @@ void Shell::Write(const v8::FunctionCallbackInfo<v8::Value>& args) { void Shell::Read(const v8::FunctionCallbackInfo<v8::Value>& args) { String::Utf8Value file(args.GetIsolate(), args[0]); if (*file == nullptr) { - Throw(args.GetIsolate(), "Error loading file"); + args.GetIsolate()->ThrowError("Error loading file"); return; } if (args.Length() == 2) { @@ -2004,7 +2025,7 @@ void Shell::Read(const v8::FunctionCallbackInfo<v8::Value>& args) { } Local<String> source = ReadFile(args.GetIsolate(), *file); if (source.IsEmpty()) { - Throw(args.GetIsolate(), "Error loading file"); + args.GetIsolate()->ThrowError("Error loading file"); return; } args.GetReturnValue().Set(source); @@ -2052,12 +2073,12 @@ void Shell::Load(const v8::FunctionCallbackInfo<v8::Value>& args) { HandleScope handle_scope(args.GetIsolate()); String::Utf8Value file(args.GetIsolate(), args[i]); if (*file == nullptr) { - Throw(args.GetIsolate(), "Error loading file"); + args.GetIsolate()->ThrowError("Error loading file"); return; } Local<String> source = ReadFile(args.GetIsolate(), *file); if (source.IsEmpty()) { - Throw(args.GetIsolate(), "Error loading file"); + args.GetIsolate()->ThrowError("Error loading file"); return; } if (!ExecuteString( @@ -2066,7 +2087,7 @@ void Shell::Load(const v8::FunctionCallbackInfo<v8::Value>& args) { kNoPrintResult, options.quiet_load ? kNoReportExceptions : kReportExceptions, kNoProcessMessageQueue)) { - Throw(args.GetIsolate(), "Error executing file"); + args.GetIsolate()->ThrowError("Error executing file"); return; } } @@ -2129,7 +2150,7 @@ bool FunctionAndArgumentsToString(Local<Function> function, function->FunctionProtoToString(context); Local<String> function_string; if (!maybe_function_string.ToLocal(&function_string)) { - Throw(isolate, "Failed to convert function to string"); + isolate->ThrowError("Failed to convert function to string"); return false; } *source = String::NewFromUtf8Literal(isolate, "("); @@ -2138,7 +2159,7 @@ bool FunctionAndArgumentsToString(Local<Function> function, *source = String::Concat(isolate, *source, middle); if (!arguments.IsEmpty() && !arguments->IsUndefined()) { if (!arguments->IsArray()) { - Throw(isolate, "'arguments' must be an array"); + isolate->ThrowError("'arguments' must be an array"); return false; } Local<String> comma = String::NewFromUtf8Literal(isolate, ","); @@ -2150,12 +2171,12 @@ bool FunctionAndArgumentsToString(Local<Function> function, MaybeLocal<Value> maybe_argument = array->Get(context, i); Local<Value> argument; if (!maybe_argument.ToLocal(&argument)) { - Throw(isolate, "Failed to get argument"); + isolate->ThrowError("Failed to get argument"); return false; } Local<String> argument_string; if (!JSON::Stringify(context, argument).ToLocal(&argument_string)) { - Throw(isolate, "Failed to convert argument to string"); + isolate->ThrowError("Failed to convert argument to string"); return false; } *source = String::Concat(isolate, *source, argument_string); @@ -2170,7 +2191,7 @@ void Shell::WorkerNew(const v8::FunctionCallbackInfo<v8::Value>& args) { Isolate* isolate = args.GetIsolate(); HandleScope handle_scope(isolate); if (args.Length() < 1 || (!args[0]->IsString() && !args[0]->IsFunction())) { - Throw(isolate, "1st argument must be a string or a function"); + isolate->ThrowError("1st argument must be a string or a function"); return; } @@ -2184,7 +2205,7 @@ void Shell::WorkerNew(const v8::FunctionCallbackInfo<v8::Value>& args) { Local<Value> arguments; ReadWorkerTypeAndArguments(args, &worker_type, &arguments); if (worker_type != WorkerType::kFunction) { - Throw(isolate, "Invalid or missing worker type"); + isolate->ThrowError("Invalid or missing worker type"); return; } @@ -2203,7 +2224,7 @@ void Shell::WorkerNew(const v8::FunctionCallbackInfo<v8::Value>& args) { load_from_file = false; } else if (worker_type != WorkerType::kNone && worker_type != WorkerType::kClassic) { - Throw(isolate, "Invalid worker type"); + isolate->ThrowError("Invalid worker type"); return; } @@ -2211,7 +2232,7 @@ void Shell::WorkerNew(const v8::FunctionCallbackInfo<v8::Value>& args) { String::Utf8Value filename(isolate, args[0]); source = ReadFile(isolate, *filename); if (source.IsEmpty()) { - Throw(args.GetIsolate(), "Error loading worker script"); + args.GetIsolate()->ThrowError("Error loading worker script"); return; } } else { @@ -2220,7 +2241,7 @@ void Shell::WorkerNew(const v8::FunctionCallbackInfo<v8::Value>& args) { } if (!args.IsConstructCall()) { - Throw(isolate, "Worker must be constructed with new"); + isolate->ThrowError("Worker must be constructed with new"); return; } @@ -2237,7 +2258,7 @@ void Shell::WorkerNew(const v8::FunctionCallbackInfo<v8::Value>& args) { String::Utf8Value script(isolate, source); if (!*script) { - Throw(isolate, "Can't get worker script"); + isolate->ThrowError("Can't get worker script"); return; } @@ -2251,7 +2272,7 @@ void Shell::WorkerNew(const v8::FunctionCallbackInfo<v8::Value>& args) { i_isolate, kWorkerSizeEstimate, worker); args.Holder()->SetInternalField(0, Utils::ToLocal(managed)); if (!Worker::StartWorkerThread(std::move(worker))) { - Throw(isolate, "Can't start thread"); + isolate->ThrowError("Can't start thread"); return; } } @@ -2262,7 +2283,7 @@ void Shell::WorkerPostMessage(const v8::FunctionCallbackInfo<v8::Value>& args) { HandleScope handle_scope(isolate); if (args.Length() < 1) { - Throw(isolate, "Invalid argument"); + isolate->ThrowError("Invalid argument"); return; } @@ -2571,6 +2592,33 @@ Local<String> Shell::Stringify(Isolate* isolate, Local<Value> value) { return result.ToLocalChecked().As<String>(); } +void Shell::NodeTypeCallback(const v8::FunctionCallbackInfo<v8::Value>& args) { + v8::Isolate* isolate = args.GetIsolate(); + args.GetReturnValue().Set(v8::Number::New(isolate, 1)); +} + +Local<FunctionTemplate> Shell::CreateNodeTemplates(Isolate* isolate) { + Local<FunctionTemplate> node = FunctionTemplate::New(isolate); + Local<ObjectTemplate> proto_template = node->PrototypeTemplate(); + Local<Signature> signature = v8::Signature::New(isolate, node); + Local<FunctionTemplate> nodeType = FunctionTemplate::New( + isolate, NodeTypeCallback, Local<Value>(), signature); + nodeType->SetAcceptAnyReceiver(false); + proto_template->SetAccessorProperty( + String::NewFromUtf8Literal(isolate, "nodeType"), nodeType); + + Local<FunctionTemplate> element = FunctionTemplate::New(isolate); + element->Inherit(node); + + Local<FunctionTemplate> html_element = FunctionTemplate::New(isolate); + html_element->Inherit(element); + + Local<FunctionTemplate> div_element = FunctionTemplate::New(isolate); + div_element->Inherit(html_element); + + return div_element; +} + Local<ObjectTemplate> Shell::CreateGlobalTemplate(Isolate* isolate) { Local<ObjectTemplate> global_template = ObjectTemplate::New(isolate); global_template->Set(Symbol::GetToStringTag(isolate), @@ -2602,6 +2650,7 @@ Local<ObjectTemplate> Shell::CreateGlobalTemplate(Isolate* isolate) { global_template->Set(isolate, "performance", Shell::CreatePerformanceTemplate(isolate)); global_template->Set(isolate, "Worker", Shell::CreateWorkerTemplate(isolate)); + // Prevent fuzzers from creating side effects. if (!i::FLAG_fuzzing) { global_template->Set(isolate, "os", Shell::CreateOSTemplate(isolate)); @@ -2730,19 +2779,29 @@ Local<ObjectTemplate> Shell::CreateD8Template(Isolate* isolate) { FunctionTemplate::New(isolate, LogGetAndStop)); d8_template->Set(isolate, "log", log_template); + + Local<ObjectTemplate> dom_template = ObjectTemplate::New(isolate); + dom_template->Set(isolate, "Div", Shell::CreateNodeTemplates(isolate)); + d8_template->Set(isolate, "dom", dom_template); } { Local<ObjectTemplate> test_template = ObjectTemplate::New(isolate); - test_template->Set( - isolate, "verifySourcePositions", - FunctionTemplate::New(isolate, TestVerifySourcePositions)); + // For different runs of correctness fuzzing the bytecode of a function + // might get flushed, resulting in spurious errors. + if (!i::FLAG_correctness_fuzzer_suppressions) { + test_template->Set( + isolate, "verifySourcePositions", + FunctionTemplate::New(isolate, TestVerifySourcePositions)); + } // Correctness fuzzing will attempt to compare results of tests with and // without turbo_fast_api_calls, so we don't expose the fast_c_api // constructor when --correctness_fuzzer_suppressions is on. if (i::FLAG_turbo_fast_api_calls && !i::FLAG_correctness_fuzzer_suppressions) { - test_template->Set(isolate, "fast_c_api", + test_template->Set(isolate, "FastCAPI", Shell::CreateTestFastCApiTemplate(isolate)); + test_template->Set(isolate, "LeafInterfaceType", + Shell::CreateLeafInterfaceTypeTemplate(isolate)); } d8_template->Set(isolate, "test", test_template); @@ -3209,13 +3268,13 @@ void Shell::ReadBuffer(const v8::FunctionCallbackInfo<v8::Value>& args) { String::Utf8Value filename(isolate, args[0]); int length; if (*filename == nullptr) { - Throw(isolate, "Error loading file"); + isolate->ThrowError("Error loading file"); return; } uint8_t* data = reinterpret_cast<uint8_t*>(ReadChars(*filename, &length)); if (data == nullptr) { - Throw(isolate, "Error reading file"); + isolate->ThrowError("Error reading file"); return; } std::unique_ptr<v8::BackingStore> backing_store = @@ -3882,7 +3941,7 @@ void Worker::PostMessageOut(const v8::FunctionCallbackInfo<v8::Value>& args) { HandleScope handle_scope(isolate); if (args.Length() < 1) { - Throw(isolate, "Invalid argument"); + isolate->ThrowError("Invalid argument"); return; } @@ -3923,25 +3982,6 @@ bool Shell::SetOptions(int argc, char* argv[]) { strcmp(argv[i], "--no-stress-opt") == 0) { options.stress_opt = false; argv[i] = nullptr; - } else if (strcmp(argv[i], "--stress-snapshot") == 0) { - options.stress_snapshot = true; - // Incremental marking is incompatible with the stress_snapshot mode; - // specifically, serialization may clear bytecode arrays from shared - // function infos which the MarkCompactCollector (running concurrently) - // may still need. See also https://crbug.com/v8/10882. - // - // We thus force the implication - // - // --stress-snapshot ~~> --no-incremental-marking - // - // Note: This is not an issue in production because we don't clear SFI's - // there (that only happens in mksnapshot and in --stress-snapshot mode). - i::FLAG_incremental_marking = false; - argv[i] = nullptr; - } else if (strcmp(argv[i], "--nostress-snapshot") == 0 || - strcmp(argv[i], "--no-stress-snapshot") == 0) { - options.stress_snapshot = false; - argv[i] = nullptr; } else if (strcmp(argv[i], "--noalways-opt") == 0 || strcmp(argv[i], "--no-always-opt") == 0) { no_always_opt = true; @@ -4080,6 +4120,12 @@ bool Shell::SetOptions(int argc, char* argv[]) { } else if (strncmp(argv[i], "--web-snapshot-config=", 22) == 0) { options.web_snapshot_config = argv[i] + 22; argv[i] = nullptr; + } else if (strcmp(argv[i], "--compile-only") == 0) { + options.compile_only = true; + argv[i] = nullptr; + } else if (strncmp(argv[i], "--repeat-compile=", 17) == 0) { + options.repeat_compile = atoi(argv[i] + 17); + argv[i] = nullptr; #ifdef V8_FUZZILLI } else if (strcmp(argv[i], "--no-fuzzilli-enable-builtins-coverage") == 0) { options.fuzzilli_enable_builtins_coverage = false; @@ -4091,11 +4137,15 @@ bool Shell::SetOptions(int argc, char* argv[]) { } else if (strcmp(argv[i], "--fuzzy-module-file-extensions") == 0) { options.fuzzy_module_file_extensions = true; argv[i] = nullptr; -#if defined(V8_OS_WIN) && defined(V8_ENABLE_SYSTEM_INSTRUMENTATION) +#if defined(V8_ENABLE_SYSTEM_INSTRUMENTATION) } else if (strcmp(argv[i], "--enable-system-instrumentation") == 0) { options.enable_system_instrumentation = true; options.trace_enabled = true; +#if defined(V8_OS_WIN) + // Guard this bc the flag has a lot of overhead and is not currently used + // by macos i::FLAG_interpreted_frames_native_stack = true; +#endif argv[i] = nullptr; #endif } @@ -4186,7 +4236,7 @@ int Shell::RunMain(Isolate* isolate, bool last_run) { DisposeModuleEmbedderData(context); } WriteLcovData(isolate, options.lcov_file); - if (last_run && options.stress_snapshot) { + if (last_run && i::FLAG_stress_snapshot) { static constexpr bool kClearRecompilableData = true; i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); i::Handle<i::Context> i_context = Utils::OpenHandle(*context); @@ -4448,7 +4498,8 @@ class Serializer : public ValueSerializer::Delegate { Local<Value> element; if (transfer_array->Get(context, i).ToLocal(&element)) { if (!element->IsArrayBuffer()) { - Throw(isolate_, "Transfer array elements must be an ArrayBuffer"); + isolate_->ThrowError( + "Transfer array elements must be an ArrayBuffer"); return Nothing<bool>(); } @@ -4456,8 +4507,8 @@ class Serializer : public ValueSerializer::Delegate { if (std::find(array_buffers_.begin(), array_buffers_.end(), array_buffer) != array_buffers_.end()) { - Throw(isolate_, - "ArrayBuffer occurs in the transfer array more than once"); + isolate_->ThrowError( + "ArrayBuffer occurs in the transfer array more than once"); return Nothing<bool>(); } @@ -4472,7 +4523,7 @@ class Serializer : public ValueSerializer::Delegate { } else if (transfer->IsUndefined()) { return Just(true); } else { - Throw(isolate_, "Transfer list must be an Array or undefined"); + isolate_->ThrowError("Transfer list must be an Array or undefined"); return Nothing<bool>(); } } @@ -4482,7 +4533,7 @@ class Serializer : public ValueSerializer::Delegate { Local<ArrayBuffer> array_buffer = Local<ArrayBuffer>::New(isolate_, global_array_buffer); if (!array_buffer->IsDetachable()) { - Throw(isolate_, "ArrayBuffer could not be transferred"); + isolate_->ThrowError("ArrayBuffer could not be transferred"); return Nothing<bool>(); } diff --git a/deps/v8/src/d8/d8.h b/deps/v8/src/d8/d8.h index f99ef17b65..75c8046115 100644 --- a/deps/v8/src/d8/d8.h +++ b/deps/v8/src/d8/d8.h @@ -271,6 +271,9 @@ class PerIsolateData { void AddDynamicImportData(DynamicImportData*); void DeleteDynamicImportData(DynamicImportData*); + Local<FunctionTemplate> GetTestApiObjectCtor() const; + void SetTestApiObjectCtor(Local<FunctionTemplate> ctor); + private: friend class Shell; friend class RealmScope; @@ -289,6 +292,7 @@ class PerIsolateData { #if defined(LEAK_SANITIZER) std::unordered_set<DynamicImportData*> import_data_; #endif + Global<FunctionTemplate> test_api_object_ctor_; int RealmIndexOrThrow(const v8::FunctionCallbackInfo<v8::Value>& args, int arg_offset); @@ -358,7 +362,6 @@ class ShellOptions { DisallowReassignment<bool> simulate_errors = {"simulate-errors", false}; DisallowReassignment<bool> stress_opt = {"stress-opt", false}; DisallowReassignment<int> stress_runs = {"stress-runs", 1}; - DisallowReassignment<bool> stress_snapshot = {"stress-snapshot", false}; DisallowReassignment<bool> interactive_shell = {"shell", false}; bool test_shell = false; DisallowReassignment<bool> expected_to_throw = {"throws", false}; @@ -403,6 +406,8 @@ class ShellOptions { "enable-system-instrumentation", false}; DisallowReassignment<const char*> web_snapshot_config = { "web-snapshot-config", nullptr}; + DisallowReassignment<bool> compile_only = {"compile-only", false}; + DisallowReassignment<int> repeat_compile = {"repeat-compile", 1}; }; class Shell : public i::AllStatic { @@ -626,6 +631,9 @@ class Shell : public i::AllStatic { static void RunShell(Isolate* isolate); static bool SetOptions(int argc, char* argv[]); + static void NodeTypeCallback(const v8::FunctionCallbackInfo<v8::Value>& args); + + static Local<FunctionTemplate> CreateNodeTemplates(Isolate* isolate); static Local<ObjectTemplate> CreateGlobalTemplate(Isolate* isolate); static Local<ObjectTemplate> CreateOSTemplate(Isolate* isolate); static Local<FunctionTemplate> CreateWorkerTemplate(Isolate* isolate); @@ -635,6 +643,8 @@ class Shell : public i::AllStatic { static Local<ObjectTemplate> CreateRealmTemplate(Isolate* isolate); static Local<ObjectTemplate> CreateD8Template(Isolate* isolate); static Local<FunctionTemplate> CreateTestFastCApiTemplate(Isolate* isolate); + static Local<FunctionTemplate> CreateLeafInterfaceTypeTemplate( + Isolate* isolate); static MaybeLocal<Context> CreateRealm( const v8::FunctionCallbackInfo<v8::Value>& args, int index, diff --git a/deps/v8/src/debug/arm/debug-arm.cc b/deps/v8/src/debug/arm/debug-arm.cc deleted file mode 100644 index 238bc5b85d..0000000000 --- a/deps/v8/src/debug/arm/debug-arm.cc +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2012 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#if V8_TARGET_ARCH_ARM - -#include "src/debug/debug.h" - -#include "src/codegen/assembler-inl.h" -#include "src/codegen/macro-assembler.h" -#include "src/debug/liveedit.h" -#include "src/execution/frames-inl.h" -#include "src/objects/objects-inl.h" - -namespace v8 { -namespace internal { - -#define __ ACCESS_MASM(masm) - - -void DebugCodegen::GenerateHandleDebuggerStatement(MacroAssembler* masm) { - { - FrameScope scope(masm, StackFrame::INTERNAL); - __ CallRuntime(Runtime::kHandleDebuggerStatement, 0); - } - __ MaybeDropFrames(); - - // Return to caller. - __ Ret(); -} - -void DebugCodegen::GenerateFrameDropperTrampoline(MacroAssembler* masm) { - // Frame is being dropped: - // - Drop to the target frame specified by r1. - // - Look up current function on the frame. - // - Leave the frame. - // - Restart the frame by calling the function. - __ mov(fp, r1); - __ ldr(r1, MemOperand(fp, StandardFrameConstants::kFunctionOffset)); - __ ldr(r0, MemOperand(fp, StandardFrameConstants::kArgCOffset)); - __ LeaveFrame(StackFrame::INTERNAL); - - // The arguments are already in the stack (including any necessary padding), - // we should not try to massage the arguments again. - __ mov(r2, Operand(kDontAdaptArgumentsSentinel)); - __ InvokeFunction(r1, r2, r0, JUMP_FUNCTION); -} - - -const bool LiveEdit::kFrameDropperSupported = true; - -#undef __ - -} // namespace internal -} // namespace v8 - -#endif // V8_TARGET_ARCH_ARM diff --git a/deps/v8/src/debug/arm64/debug-arm64.cc b/deps/v8/src/debug/arm64/debug-arm64.cc deleted file mode 100644 index b12d235983..0000000000 --- a/deps/v8/src/debug/arm64/debug-arm64.cc +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2013 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#if V8_TARGET_ARCH_ARM64 - -#include "src/debug/debug.h" - -#include "src/codegen/arm64/macro-assembler-arm64-inl.h" -#include "src/debug/liveedit.h" -#include "src/execution/frame-constants.h" -#include "src/execution/frames-inl.h" -#include "src/objects/objects-inl.h" - -namespace v8 { -namespace internal { - -#define __ ACCESS_MASM(masm) - -void DebugCodegen::GenerateHandleDebuggerStatement(MacroAssembler* masm) { - { - FrameScope scope(masm, StackFrame::INTERNAL); - __ CallRuntime(Runtime::kHandleDebuggerStatement, 0); - } - __ MaybeDropFrames(); - - // Return to caller. - __ Ret(); -} - -void DebugCodegen::GenerateFrameDropperTrampoline(MacroAssembler* masm) { - // Frame is being dropped: - // - Drop to the target frame specified by x1. - // - Look up current function on the frame. - // - Leave the frame. - // - Restart the frame by calling the function. - __ Mov(fp, x1); - __ Ldr(x1, MemOperand(fp, StandardFrameConstants::kFunctionOffset)); - __ ldr(x0, MemOperand(fp, StandardFrameConstants::kArgCOffset)); - - __ Mov(sp, fp); - __ Pop<TurboAssembler::kAuthLR>(fp, lr); - - // The arguments are already in the stack (including any necessary padding), - // we should not try to massage the arguments again. - __ Mov(x3, kDontAdaptArgumentsSentinel); - __ InvokeFunctionWithNewTarget(x1, x3, x0, JUMP_FUNCTION); -} - - -const bool LiveEdit::kFrameDropperSupported = true; - -} // namespace internal -} // namespace v8 - -#undef __ - -#endif // V8_TARGET_ARCH_ARM64 diff --git a/deps/v8/src/debug/debug-coverage.cc b/deps/v8/src/debug/debug-coverage.cc index 56933602a6..7ff5809a18 100644 --- a/deps/v8/src/debug/debug-coverage.cc +++ b/deps/v8/src/debug/debug-coverage.cc @@ -61,8 +61,7 @@ bool CompareCoverageBlock(const CoverageBlock& a, const CoverageBlock& b) { return a.start < b.start; } -void SortBlockData( - std::vector<CoverageBlock>& v) { // NOLINT(runtime/references) +void SortBlockData(std::vector<CoverageBlock>& v) { // Sort according to the block nesting structure. std::sort(v.begin(), v.end(), CompareCoverageBlock); } diff --git a/deps/v8/src/debug/debug-evaluate.cc b/deps/v8/src/debug/debug-evaluate.cc index 4f317fcc89..54fac88f59 100644 --- a/deps/v8/src/debug/debug-evaluate.cc +++ b/deps/v8/src/debug/debug-evaluate.cc @@ -43,6 +43,22 @@ MaybeHandle<Object> DebugEvaluate::Global(Isolate* isolate, Handle<String> source, debug::EvaluateGlobalMode mode, REPLMode repl_mode) { + Handle<SharedFunctionInfo> shared_info; + if (!GetFunctionInfo(isolate, source, repl_mode).ToHandle(&shared_info)) { + return MaybeHandle<Object>(); + } + + Handle<NativeContext> context = isolate->native_context(); + Handle<JSFunction> fun = + Factory::JSFunctionBuilder{isolate, shared_info, context}.Build(); + + return Global(isolate, fun, mode, repl_mode); +} + +MaybeHandle<Object> DebugEvaluate::Global(Isolate* isolate, + Handle<JSFunction> function, + debug::EvaluateGlobalMode mode, + REPLMode repl_mode) { // Disable breaks in side-effect free mode. DisableBreak disable_break_scope( isolate->debug(), @@ -50,19 +66,14 @@ MaybeHandle<Object> DebugEvaluate::Global(Isolate* isolate, mode == debug::EvaluateGlobalMode::kDisableBreaksAndThrowOnSideEffect); - Handle<SharedFunctionInfo> shared_info; - if (!GetFunctionInfo(isolate, source, repl_mode).ToHandle(&shared_info)) { - return MaybeHandle<Object>(); - } + Handle<NativeContext> context = isolate->native_context(); + CHECK_EQ(function->native_context(), *context); - Handle<Context> context = isolate->native_context(); - Handle<JSFunction> fun = - Factory::JSFunctionBuilder{isolate, shared_info, context}.Build(); if (mode == debug::EvaluateGlobalMode::kDisableBreaksAndThrowOnSideEffect) { isolate->debug()->StartSideEffectCheckMode(); } MaybeHandle<Object> result = Execution::Call( - isolate, fun, Handle<JSObject>(context->global_proxy(), isolate), 0, + isolate, function, Handle<JSObject>(context->global_proxy(), isolate), 0, nullptr); if (mode == debug::EvaluateGlobalMode::kDisableBreaksAndThrowOnSideEffect) { isolate->debug()->StopSideEffectCheckMode(); @@ -1108,7 +1119,7 @@ void DebugEvaluate::VerifyTransitiveBuiltins(Isolate* isolate) { } CHECK(!failed); #if defined(V8_TARGET_ARCH_PPC) || defined(V8_TARGET_ARCH_PPC64) || \ - defined(V8_TARGET_ARCH_MIPS64) || defined(V8_TARGET_ARCH_RISCV64) + defined(V8_TARGET_ARCH_MIPS64) // Isolate-independent builtin calls and jumps do not emit reloc infos // on PPC. We try to avoid using PC relative code due to performance // issue with especially older hardwares. diff --git a/deps/v8/src/debug/debug-evaluate.h b/deps/v8/src/debug/debug-evaluate.h index 03836dd6da..34a6c8d4c7 100644 --- a/deps/v8/src/debug/debug-evaluate.h +++ b/deps/v8/src/debug/debug-evaluate.h @@ -27,6 +27,10 @@ class DebugEvaluate : public AllStatic { debug::EvaluateGlobalMode mode, REPLMode repl_mode = REPLMode::kNo); + static V8_EXPORT_PRIVATE MaybeHandle<Object> Global( + Isolate* isolate, Handle<JSFunction> function, + debug::EvaluateGlobalMode mode, REPLMode repl_mode = REPLMode::kNo); + // Evaluate a piece of JavaScript in the context of a stack frame for // debugging. Things that need special attention are: // - Parameters and stack-allocated locals need to be materialized. Altered diff --git a/deps/v8/src/debug/debug-frames.cc b/deps/v8/src/debug/debug-frames.cc index 2e5c9443ca..95b6801481 100644 --- a/deps/v8/src/debug/debug-frames.cc +++ b/deps/v8/src/debug/debug-frames.cc @@ -7,6 +7,10 @@ #include "src/builtins/accessors.h" #include "src/execution/frames-inl.h" +#if V8_ENABLE_WEBASSEMBLY +#include "src/debug/debug-wasm-objects.h" +#endif // V8_ENABLE_WEBASSEMBLY + namespace v8 { namespace internal { @@ -21,7 +25,6 @@ FrameInspector::FrameInspector(CommonFrame* frame, int inlined_frame_index, is_constructor_ = summary.is_constructor(); source_position_ = summary.SourcePosition(); - function_name_ = summary.FunctionName(); script_ = Handle<Script>::cast(summary.script()); receiver_ = summary.receiver(); @@ -70,6 +73,18 @@ Handle<Object> FrameInspector::GetContext() { : handle(frame_->context(), isolate_); } +Handle<String> FrameInspector::GetFunctionName() { +#if V8_ENABLE_WEBASSEMBLY + if (IsWasm()) { + auto wasm_frame = WasmFrame::cast(frame_); + auto wasm_instance = handle(wasm_frame->wasm_instance(), isolate_); + return GetWasmFunctionDebugName(isolate_, wasm_instance, + wasm_frame->function_index()); + } +#endif // V8_ENABLE_WEBASSEMBLY + return JSFunction::GetDebugName(function_); +} + #if V8_ENABLE_WEBASSEMBLY bool FrameInspector::IsWasm() { return frame_->is_wasm(); } #endif // V8_ENABLE_WEBASSEMBLY diff --git a/deps/v8/src/debug/debug-frames.h b/deps/v8/src/debug/debug-frames.h index 03f670e499..5197f86298 100644 --- a/deps/v8/src/debug/debug-frames.h +++ b/deps/v8/src/debug/debug-frames.h @@ -36,7 +36,7 @@ class FrameInspector { Handle<Object> GetContext(); Handle<Object> GetReceiver() { return receiver_; } - Handle<String> GetFunctionName() { return function_name_; } + Handle<String> GetFunctionName(); #if V8_ENABLE_WEBASSEMBLY bool IsWasm(); @@ -58,7 +58,6 @@ class FrameInspector { Handle<Script> script_; Handle<Object> receiver_; Handle<JSFunction> function_; - Handle<String> function_name_; int source_position_ = -1; bool is_optimized_ = false; bool is_constructor_ = false; diff --git a/deps/v8/src/debug/debug-interface.cc b/deps/v8/src/debug/debug-interface.cc index bf74d379b6..bc545a95d4 100644 --- a/deps/v8/src/debug/debug-interface.cc +++ b/deps/v8/src/debug/debug-interface.cc @@ -12,7 +12,9 @@ #include "src/debug/debug.h" #include "src/execution/vm-state-inl.h" #include "src/objects/js-generator-inl.h" +#include "src/objects/stack-frame-info-inl.h" #include "src/regexp/regexp-stack.h" +#include "src/strings/string-builder-inl.h" #if V8_ENABLE_WEBASSEMBLY #include "src/debug/debug-wasm-objects-inl.h" @@ -43,6 +45,54 @@ v8_inspector::V8Inspector* GetInspector(Isolate* isolate) { return reinterpret_cast<i::Isolate*>(isolate)->inspector(); } +Local<String> GetFunctionDebugName(Local<StackFrame> frame) { +#if V8_ENABLE_WEBASSEMBLY + auto info = Utils::OpenHandle(*frame); + if (info->IsWasm()) { + auto isolate = info->GetIsolate(); + auto instance = handle(info->GetWasmInstance(), isolate); + auto func_index = info->GetWasmFunctionIndex(); + return Utils::ToLocal( + i::GetWasmFunctionDebugName(isolate, instance, func_index)); + } +#endif // V8_ENABLE_WEBASSEMBLY + return frame->GetFunctionName(); +} + +Local<String> GetFunctionDescription(Local<Function> function) { + auto receiver = Utils::OpenHandle(*function); + if (receiver->IsJSBoundFunction()) { + return Utils::ToLocal(i::JSBoundFunction::ToString( + i::Handle<i::JSBoundFunction>::cast(receiver))); + } + if (receiver->IsJSFunction()) { + auto function = i::Handle<i::JSFunction>::cast(receiver); +#if V8_ENABLE_WEBASSEMBLY + if (function->shared().HasWasmExportedFunctionData()) { + auto isolate = function->GetIsolate(); + auto func_index = + function->shared().wasm_exported_function_data().function_index(); + auto instance = i::handle( + function->shared().wasm_exported_function_data().instance(), isolate); + if (instance->module()->origin == i::wasm::kWasmOrigin) { + // For asm.js functions, we can still print the source + // code (hopefully), so don't bother with them here. + auto debug_name = + i::GetWasmFunctionDebugName(isolate, instance, func_index); + i::IncrementalStringBuilder builder(isolate); + builder.AppendCString("function "); + builder.AppendString(debug_name); + builder.AppendCString("() { [native code] }"); + return Utils::ToLocal(builder.Finish().ToHandleChecked()); + } + } +#endif // V8_ENABLE_WEBASSEMBLY + return Utils::ToLocal(i::JSFunction::ToString(function)); + } + return Utils::ToLocal( + receiver->GetIsolate()->factory()->function_native_code_string()); +} + void SetBreakOnNextFunctionCall(Isolate* isolate) { reinterpret_cast<i::Isolate*>(isolate)->debug()->SetBreakOnNextFunctionCall(); } @@ -901,6 +951,21 @@ MaybeLocal<v8::Value> EvaluateGlobal(v8::Isolate* isolate, RETURN_ESCAPED(result); } +v8::MaybeLocal<v8::Value> EvaluateGlobalForTesting( + v8::Isolate* isolate, v8::Local<v8::Script> function, + v8::debug::EvaluateGlobalMode mode, bool repl) { + i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(isolate); + PREPARE_FOR_DEBUG_INTERFACE_EXECUTION_WITH_ISOLATE(internal_isolate, Value); + i::REPLMode repl_mode = repl ? i::REPLMode::kYes : i::REPLMode::kNo; + Local<Value> result; + has_pending_exception = !ToLocal<Value>( + i::DebugEvaluate::Global(internal_isolate, Utils::OpenHandle(*function), + mode, repl_mode), + &result); + RETURN_ON_FAILED_EXECUTION(Value); + RETURN_ESCAPED(result); +} + void QueryObjects(v8::Local<v8::Context> v8_context, QueryObjectPredicate* predicate, PersistentValueVector<v8::Object>* objects) { @@ -944,10 +1009,12 @@ int64_t GetNextRandomInt64(v8::Isolate* v8_isolate) { void EnumerateRuntimeCallCounters(v8::Isolate* v8_isolate, RuntimeCallCounterCallback callback) { +#ifdef V8_RUNTIME_CALL_STATS i::Isolate* isolate = reinterpret_cast<i::Isolate*>(v8_isolate); if (isolate->counters()) { isolate->counters()->runtime_call_stats()->EnumerateCounters(callback); } +#endif // V8_RUNTIME_CALL_STATS } int GetDebuggingId(v8::Local<v8::Function> function) { diff --git a/deps/v8/src/debug/debug-interface.h b/deps/v8/src/debug/debug-interface.h index 66c7f3997e..6c7ff9cbdd 100644 --- a/deps/v8/src/debug/debug-interface.h +++ b/deps/v8/src/debug/debug-interface.h @@ -7,7 +7,6 @@ #include <memory> -#include "include/v8-inspector.h" #include "include/v8-util.h" #include "include/v8.h" #include "src/base/platform/time.h" @@ -15,6 +14,10 @@ #include "src/debug/interface-types.h" #include "src/utils/vector.h" +namespace v8_inspector { +class V8Inspector; +} // namespace v8_inspector + namespace v8 { namespace internal { @@ -38,6 +41,16 @@ int GetContextId(Local<Context> context); void SetInspector(Isolate* isolate, v8_inspector::V8Inspector*); v8_inspector::V8Inspector* GetInspector(Isolate* isolate); +// Returns the debug name for the function, which is supposed to be used +// by the debugger and the developer tools. This can thus be different from +// the name returned by the StackFrame::GetFunctionName() method. For example, +// in case of WebAssembly, the debug name is WAT-compatible and thus always +// preceeded by a dollar ('$'). +Local<String> GetFunctionDebugName(Local<StackFrame> frame); + +// Returns a debug string representation of the function. +Local<String> GetFunctionDescription(Local<Function> function); + // Schedule a debugger break to happen when function is called inside given // isolate. V8_EXPORT_PRIVATE void SetBreakOnNextFunctionCall(Isolate* isolate); @@ -119,11 +132,7 @@ struct LiveEditResult { OK, COMPILE_ERROR, BLOCKED_BY_RUNNING_GENERATOR, - BLOCKED_BY_FUNCTION_ABOVE_BREAK_FRAME, - BLOCKED_BY_FUNCTION_BELOW_NON_DROPPABLE_FRAME, - BLOCKED_BY_ACTIVE_FUNCTION, - BLOCKED_BY_NEW_TARGET_IN_RESTART_FRAME, - FRAME_RESTART_IS_NOT_SUPPORTED + BLOCKED_BY_ACTIVE_FUNCTION }; Status status = OK; bool stack_changed = false; @@ -195,9 +204,8 @@ class WasmScript : public Script { }; #endif // V8_ENABLE_WEBASSEMBLY -V8_EXPORT_PRIVATE void GetLoadedScripts( - Isolate* isolate, - PersistentValueVector<Script>& scripts); // NOLINT(runtime/references) +V8_EXPORT_PRIVATE void GetLoadedScripts(Isolate* isolate, + PersistentValueVector<Script>& scripts); MaybeLocal<UnboundScript> CompileInspectorScript(Isolate* isolate, Local<String> source); @@ -480,7 +488,6 @@ class V8_EXPORT_PRIVATE StackTraceIterator { virtual v8::Local<v8::Function> GetFunction() const = 0; virtual std::unique_ptr<ScopeIterator> GetScopeIterator() const = 0; - virtual bool Restart() = 0; virtual v8::MaybeLocal<v8::Value> Evaluate(v8::Local<v8::String> source, bool throw_on_side_effect) = 0; }; @@ -523,6 +530,10 @@ V8_EXPORT_PRIVATE v8::MaybeLocal<v8::Value> EvaluateGlobal( v8::Isolate* isolate, v8::Local<v8::String> source, EvaluateGlobalMode mode, bool repl_mode = false); +V8_EXPORT_PRIVATE v8::MaybeLocal<v8::Value> EvaluateGlobalForTesting( + v8::Isolate* isolate, v8::Local<v8::Script> function, + v8::debug::EvaluateGlobalMode mode, bool repl); + int GetDebuggingId(v8::Local<v8::Function> function); bool SetFunctionBreakpoint(v8::Local<v8::Function> function, diff --git a/deps/v8/src/debug/debug-scopes.cc b/deps/v8/src/debug/debug-scopes.cc index 03d49fac5c..5f136d91d3 100644 --- a/deps/v8/src/debug/debug-scopes.cc +++ b/deps/v8/src/debug/debug-scopes.cc @@ -192,7 +192,13 @@ class ScopeChainRetriever { // functions that have the same end position. const bool position_fits_end = closure_scope_ ? position_ < end : position_ <= end; - return start < position_ && position_fits_end; + // While we're evaluating a class, the calling function will have a class + // context on the stack with a range that starts at Token::CLASS, and the + // source position will also point to Token::CLASS. To identify the + // matching scope we include start in the accepted range for class scopes. + const bool position_fits_start = + scope->is_class_scope() ? start <= position_ : start < position_; + return position_fits_start && position_fits_end; } }; diff --git a/deps/v8/src/debug/debug-stack-trace-iterator.cc b/deps/v8/src/debug/debug-stack-trace-iterator.cc index 9904f781f9..93722d0f16 100644 --- a/deps/v8/src/debug/debug-stack-trace-iterator.cc +++ b/deps/v8/src/debug/debug-stack-trace-iterator.cc @@ -172,14 +172,6 @@ DebugStackTraceIterator::GetScopeIterator() const { return std::make_unique<DebugScopeIterator>(isolate_, frame_inspector_.get()); } -bool DebugStackTraceIterator::Restart() { - DCHECK(!Done()); -#if V8_ENABLE_WEBASSEMBLY - if (iterator_.is_wasm()) return false; -#endif // V8_ENABLE_WEBASSEMBLY - return LiveEdit::RestartFrame(iterator_.javascript_frame()); -} - v8::MaybeLocal<v8::Value> DebugStackTraceIterator::Evaluate( v8::Local<v8::String> source, bool throw_on_side_effect) { DCHECK(!Done()); diff --git a/deps/v8/src/debug/debug-stack-trace-iterator.h b/deps/v8/src/debug/debug-stack-trace-iterator.h index 3319bc15f5..2d059e0ec5 100644 --- a/deps/v8/src/debug/debug-stack-trace-iterator.h +++ b/deps/v8/src/debug/debug-stack-trace-iterator.h @@ -31,7 +31,6 @@ class DebugStackTraceIterator final : public debug::StackTraceIterator { v8::Local<v8::Function> GetFunction() const override; std::unique_ptr<v8::debug::ScopeIterator> GetScopeIterator() const override; - bool Restart() override; v8::MaybeLocal<v8::Value> Evaluate(v8::Local<v8::String> source, bool throw_on_side_effect) override; diff --git a/deps/v8/src/debug/debug-wasm-objects.cc b/deps/v8/src/debug/debug-wasm-objects.cc index 070221f433..39286ed027 100644 --- a/deps/v8/src/debug/debug-wasm-objects.cc +++ b/deps/v8/src/debug/debug-wasm-objects.cc @@ -323,15 +323,7 @@ struct FunctionsProxy : NamedDebugProxy<FunctionsProxy, kFunctionsProxy> { static Handle<String> GetName(Isolate* isolate, Handle<WasmInstanceObject> instance, uint32_t index) { - Handle<WasmModuleObject> module_object(instance->module_object(), isolate); - MaybeHandle<String> name = - WasmModuleObject::GetFunctionNameOrNull(isolate, module_object, index); - if (name.is_null()) { - name = GetNameFromImportsAndExportsOrNull( - isolate, instance, wasm::ImportExportKindCode::kExternalFunction, - index); - } - return GetNameOrDefault(isolate, name, "$func", index); + return GetWasmFunctionDebugName(isolate, instance, index); } }; @@ -1050,78 +1042,75 @@ std::unique_ptr<debug::ScopeIterator> GetWasmScopeIterator(WasmFrame* frame) { return std::make_unique<DebugWasmScopeIterator>(frame); } -Handle<JSArray> GetWasmInstanceObjectInternalProperties( - Handle<WasmInstanceObject> instance) { - Isolate* isolate = instance->GetIsolate(); - Handle<FixedArray> result = isolate->factory()->NewFixedArray(2 * 5); - int length = 0; +Handle<String> GetWasmFunctionDebugName(Isolate* isolate, + Handle<WasmInstanceObject> instance, + uint32_t func_index) { + Handle<WasmModuleObject> module_object(instance->module_object(), isolate); + MaybeHandle<String> maybe_name = WasmModuleObject::GetFunctionNameOrNull( + isolate, module_object, func_index); + if (module_object->is_asm_js()) { + // In case of asm.js, we use the names from the function declarations. + return maybe_name.ToHandleChecked(); + } + if (maybe_name.is_null()) { + maybe_name = GetNameFromImportsAndExportsOrNull( + isolate, instance, wasm::ImportExportKindCode::kExternalFunction, + func_index); + } + return GetNameOrDefault(isolate, maybe_name, "$func", func_index); +} - Handle<String> module_str = - isolate->factory()->NewStringFromAsciiChecked("[[Module]]"); - Handle<Object> module_obj = handle(instance->module_object(), isolate); - result->set(length++, *module_str); - result->set(length++, *module_obj); +Handle<ArrayList> AddWasmInstanceObjectInternalProperties( + Isolate* isolate, Handle<ArrayList> result, + Handle<WasmInstanceObject> instance) { + result = ArrayList::Add( + isolate, result, + isolate->factory()->NewStringFromAsciiChecked("[[Module]]"), + handle(instance->module_object(), isolate)); if (FunctionsProxy::Count(isolate, instance) != 0) { - Handle<String> functions_str = - isolate->factory()->NewStringFromAsciiChecked("[[Functions]]"); - Handle<Object> functions_obj = - GetOrCreateInstanceProxy<FunctionsProxy>(isolate, instance); - result->set(length++, *functions_str); - result->set(length++, *functions_obj); + result = ArrayList::Add( + isolate, result, + isolate->factory()->NewStringFromAsciiChecked("[[Functions]]"), + GetOrCreateInstanceProxy<FunctionsProxy>(isolate, instance)); } if (GlobalsProxy::Count(isolate, instance) != 0) { - Handle<String> globals_str = - isolate->factory()->NewStringFromAsciiChecked("[[Globals]]"); - Handle<Object> globals_obj = - GetOrCreateInstanceProxy<GlobalsProxy>(isolate, instance); - result->set(length++, *globals_str); - result->set(length++, *globals_obj); + result = ArrayList::Add( + isolate, result, + isolate->factory()->NewStringFromAsciiChecked("[[Globals]]"), + GetOrCreateInstanceProxy<GlobalsProxy>(isolate, instance)); } if (MemoriesProxy::Count(isolate, instance) != 0) { - Handle<String> memories_str = - isolate->factory()->NewStringFromAsciiChecked("[[Memories]]"); - Handle<Object> memories_obj = - GetOrCreateInstanceProxy<MemoriesProxy>(isolate, instance); - result->set(length++, *memories_str); - result->set(length++, *memories_obj); + result = ArrayList::Add( + isolate, result, + isolate->factory()->NewStringFromAsciiChecked("[[Memories]]"), + GetOrCreateInstanceProxy<MemoriesProxy>(isolate, instance)); } if (TablesProxy::Count(isolate, instance) != 0) { - Handle<String> tables_str = - isolate->factory()->NewStringFromAsciiChecked("[[Tables]]"); - Handle<Object> tables_obj = - GetOrCreateInstanceProxy<TablesProxy>(isolate, instance); - result->set(length++, *tables_str); - result->set(length++, *tables_obj); + result = ArrayList::Add( + isolate, result, + isolate->factory()->NewStringFromAsciiChecked("[[Tables]]"), + GetOrCreateInstanceProxy<TablesProxy>(isolate, instance)); } - return isolate->factory()->NewJSArrayWithElements(result, PACKED_ELEMENTS, - length); + return result; } -Handle<JSArray> GetWasmModuleObjectInternalProperties( +Handle<ArrayList> AddWasmModuleObjectInternalProperties( + Isolate* isolate, Handle<ArrayList> result, Handle<WasmModuleObject> module_object) { - Isolate* isolate = module_object->GetIsolate(); - Handle<FixedArray> result = isolate->factory()->NewFixedArray(2 * 2); - int length = 0; - - Handle<String> exports_str = - isolate->factory()->NewStringFromStaticChars("[[Exports]]"); - Handle<JSArray> exports_obj = wasm::GetExports(isolate, module_object); - result->set(length++, *exports_str); - result->set(length++, *exports_obj); - - Handle<String> imports_str = - isolate->factory()->NewStringFromStaticChars("[[Imports]]"); - Handle<JSArray> imports_obj = wasm::GetImports(isolate, module_object); - result->set(length++, *imports_str); - result->set(length++, *imports_obj); - - return isolate->factory()->NewJSArrayWithElements(result, PACKED_ELEMENTS, - length); + result = ArrayList::Add( + isolate, result, + isolate->factory()->NewStringFromStaticChars("[[Exports]]"), + wasm::GetExports(isolate, module_object)); + result = ArrayList::Add( + isolate, result, + isolate->factory()->NewStringFromStaticChars("[[Imports]]"), + wasm::GetImports(isolate, module_object)); + return result; } } // namespace internal diff --git a/deps/v8/src/debug/debug-wasm-objects.h b/deps/v8/src/debug/debug-wasm-objects.h index 6eb075b9b6..62e437b727 100644 --- a/deps/v8/src/debug/debug-wasm-objects.h +++ b/deps/v8/src/debug/debug-wasm-objects.h @@ -28,6 +28,7 @@ class WasmValue; #include "torque-generated/src/debug/debug-wasm-objects-tq.inc" +class ArrayList; class WasmFrame; class WasmInstanceObject; class WasmModuleObject; @@ -68,9 +69,15 @@ Handle<JSObject> GetWasmDebugProxy(WasmFrame* frame); std::unique_ptr<debug::ScopeIterator> GetWasmScopeIterator(WasmFrame* frame); -Handle<JSArray> GetWasmInstanceObjectInternalProperties( +Handle<String> GetWasmFunctionDebugName(Isolate* isolate, + Handle<WasmInstanceObject> instance, + uint32_t func_index); + +Handle<ArrayList> AddWasmInstanceObjectInternalProperties( + Isolate* isolate, Handle<ArrayList> result, Handle<WasmInstanceObject> instance); -Handle<JSArray> GetWasmModuleObjectInternalProperties( +Handle<ArrayList> AddWasmModuleObjectInternalProperties( + Isolate* isolate, Handle<ArrayList> result, Handle<WasmModuleObject> module_object); } // namespace internal diff --git a/deps/v8/src/debug/debug.cc b/deps/v8/src/debug/debug.cc index 0b873f7c8c..42b800ef75 100644 --- a/deps/v8/src/debug/debug.cc +++ b/deps/v8/src/debug/debug.cc @@ -352,7 +352,6 @@ void Debug::ThreadInit() { thread_local_.return_value_ = Smi::zero(); thread_local_.last_breakpoint_id_ = 0; clear_suspended_generator(); - thread_local_.restart_fp_ = kNullAddress; base::Relaxed_Store(&thread_local_.current_debug_scope_, static_cast<base::AtomicWord>(0)); thread_local_.break_on_next_function_call_ = false; @@ -439,9 +438,6 @@ void Debug::Unload() { } void Debug::Break(JavaScriptFrame* frame, Handle<JSFunction> break_target) { - // Initialize LiveEdit. - LiveEdit::InitializeThreadLocal(this); - // Just continue if breaks are disabled or debugger cannot be loaded. if (break_disabled()) return; @@ -1245,7 +1241,7 @@ class DiscardBaselineCodeVisitor : public ThreadVisitor { BaselineFrame* frame = BaselineFrame::cast(it.frame()); int bytecode_offset = frame->GetBytecodeOffset(); Address* pc_addr = frame->pc_address(); - Address advance = BUILTIN_CODE(isolate, InterpreterEnterBytecodeAdvance) + Address advance = BUILTIN_CODE(isolate, InterpreterEnterAtNextBytecode) ->InstructionStart(); PointerAuthentication::ReplacePC(pc_addr, advance, kSystemPointerSize); InterpretedFrame::cast(it.Reframe()) @@ -1264,8 +1260,8 @@ class DiscardBaselineCodeVisitor : public ThreadVisitor { Address* pc_addr = frame->pc_address(); Builtins::Name advance = builtin_index == Builtins::kBaselineEnterAtBytecode - ? Builtins::kInterpreterEnterBytecodeDispatch - : Builtins::kInterpreterEnterBytecodeAdvance; + ? Builtins::kInterpreterEnterAtBytecode + : Builtins::kInterpreterEnterAtNextBytecode; Address advance_pc = isolate->builtins()->builtin(advance).InstructionStart(); PointerAuthentication::ReplacePC(pc_addr, advance_pc, @@ -1353,7 +1349,8 @@ void Debug::PrepareFunctionForDebugExecution( DCHECK(shared->is_compiled()); DCHECK(shared->HasDebugInfo()); Handle<DebugInfo> debug_info = GetOrCreateDebugInfo(shared); - if (debug_info->flags() & DebugInfo::kPreparedForDebugExecution) return; + if (debug_info->flags(kRelaxedLoad) & DebugInfo::kPreparedForDebugExecution) + return; if (shared->HasBytecodeArray()) { SharedFunctionInfo::InstallDebugBytecode(shared, isolate_); @@ -1372,8 +1369,9 @@ void Debug::PrepareFunctionForDebugExecution( redirect_visitor.VisitThread(isolate_, isolate_->thread_local_top()); isolate_->thread_manager()->IterateArchivedThreads(&redirect_visitor); } - debug_info->set_flags(debug_info->flags() | - DebugInfo::kPreparedForDebugExecution); + debug_info->set_flags( + debug_info->flags(kRelaxedLoad) | DebugInfo::kPreparedForDebugExecution, + kRelaxedStore); } void Debug::InstallDebugBreakTrampoline() { @@ -1630,7 +1628,9 @@ bool Debug::FindSharedFunctionInfosIntersectingRange( } if (!triedTopLevelCompile && !candidateSubsumesRange && - script->shared_function_infos().length() > 0) { + script->shared_function_info_count() > 0) { + DCHECK_LE(script->shared_function_info_count(), + script->shared_function_infos().length()); MaybeObject maybeToplevel = script->shared_function_infos().Get(0); HeapObject heap_object; const bool topLevelInfoExists = @@ -1751,10 +1751,10 @@ void Debug::CreateBreakInfo(Handle<SharedFunctionInfo> shared) { Handle<FixedArray> break_points( factory->NewFixedArray(DebugInfo::kEstimatedNofBreakPointsInFunction)); - int flags = debug_info->flags(); + int flags = debug_info->flags(kRelaxedLoad); flags |= DebugInfo::kHasBreakInfo; if (CanBreakAtEntry(shared)) flags |= DebugInfo::kCanBreakAtEntry; - debug_info->set_flags(flags); + debug_info->set_flags(flags, kRelaxedStore); debug_info->set_break_points(*break_points); SharedFunctionInfo::EnsureSourcePositionsAvailable(isolate_, shared); @@ -1781,7 +1781,9 @@ void Debug::InstallCoverageInfo(Handle<SharedFunctionInfo> shared, DCHECK(!debug_info->HasCoverageInfo()); - debug_info->set_flags(debug_info->flags() | DebugInfo::kHasCoverageInfo); + debug_info->set_flags( + debug_info->flags(kRelaxedLoad) | DebugInfo::kHasCoverageInfo, + kRelaxedStore); debug_info->set_coverage_info(*coverage_info); } @@ -1871,27 +1873,6 @@ bool Debug::IsBreakAtReturn(JavaScriptFrame* frame) { return location.IsReturn(); } -void Debug::ScheduleFrameRestart(StackFrame* frame) { - // Set a target FP for the FrameDropperTrampoline builtin to drop to once - // we return from the debugger. - DCHECK(frame->is_java_script()); - // Only reschedule to a frame further below a frame we already scheduled for. - if (frame->fp() <= thread_local_.restart_fp_) return; - // If the frame is optimized, trigger a deopt and jump into the - // FrameDropperTrampoline in the deoptimizer. - thread_local_.restart_fp_ = frame->fp(); - - // Reset break frame ID to the frame below the restarted frame. - StackTraceFrameIterator it(isolate_); - thread_local_.break_frame_id_ = StackFrameId::NO_ID; - for (StackTraceFrameIterator it(isolate_); !it.done(); it.Advance()) { - if (it.frame()->fp() > thread_local_.restart_fp_) { - thread_local_.break_frame_id_ = it.frame()->id(); - return; - } - } -} - Handle<FixedArray> Debug::GetLoadedScripts() { isolate_->heap()->CollectAllGarbage(Heap::kNoGCFlags, GarbageCollectionReason::kDebugger); @@ -2243,8 +2224,6 @@ void Debug::UpdateHookOnFunctionCall() { } void Debug::HandleDebugBreak(IgnoreBreakMode ignore_break_mode) { - // Initialize LiveEdit. - LiveEdit::InitializeThreadLocal(this); // Ignore debug break during bootstrapping. if (isolate_->bootstrapper()->IsActive()) return; // Just continue if breaks are disabled. @@ -2291,12 +2270,14 @@ void Debug::PrintBreakLocation() { StackTraceFrameIterator iterator(isolate_); if (iterator.done()) return; CommonFrame* frame = iterator.frame(); - FrameSummary summary = FrameSummary::GetTop(frame); - summary.EnsureSourcePositionsAvailable(); - int source_position = summary.SourcePosition(); - Handle<Object> script_obj = summary.script(); + std::vector<FrameSummary> frames; + frame->Summarize(&frames); + int inlined_frame_index = static_cast<int>(frames.size() - 1); + FrameInspector inspector(frame, inlined_frame_index, isolate_); + int source_position = inspector.GetSourcePosition(); + Handle<Object> script_obj = inspector.GetScript(); PrintF("[debug] break in function '"); - summary.FunctionName()->PrintOn(stdout); + inspector.GetFunctionName()->PrintOn(stdout); PrintF("'.\n"); if (script_obj->IsScript()) { Handle<Script> script = Handle<Script>::cast(script_obj); diff --git a/deps/v8/src/debug/debug.h b/deps/v8/src/debug/debug.h index 86c067c035..28c6942c42 100644 --- a/deps/v8/src/debug/debug.h +++ b/deps/v8/src/debug/debug.h @@ -311,9 +311,6 @@ class V8_EXPORT_PRIVATE Debug { // Check whether this frame is just about to return. bool IsBreakAtReturn(JavaScriptFrame* frame); - // Support for LiveEdit - void ScheduleFrameRestart(StackFrame* frame); - bool AllFramesOnStackAreBlackboxed(); // Set new script source, throw an exception if error occurred. When preview @@ -380,13 +377,6 @@ class V8_EXPORT_PRIVATE Debug { return reinterpret_cast<Address>(&thread_local_.suspended_generator_); } - Address restart_fp_address() { - return reinterpret_cast<Address>(&thread_local_.restart_fp_); - } - bool will_restart() const { - return thread_local_.restart_fp_ != kNullAddress; - } - StepAction last_step_action() { return thread_local_.last_step_action_; } bool break_on_next_function_call() const { return thread_local_.break_on_next_function_call_; @@ -548,9 +538,6 @@ class V8_EXPORT_PRIVATE Debug { // The suspended generator object to track when stepping. Object suspended_generator_; - // The new frame pointer to drop to when restarting a frame. - Address restart_fp_; - // Last used inspector breakpoint id. int last_breakpoint_id_; @@ -669,25 +656,6 @@ class SuppressDebug { bool old_state_; }; -// Code generator routines. -class DebugCodegen : public AllStatic { - public: - enum DebugBreakCallHelperMode { - SAVE_RESULT_REGISTER, - IGNORE_RESULT_REGISTER - }; - - // Builtin to drop frames to restart function. - static void GenerateFrameDropperTrampoline(MacroAssembler* masm); - - // Builtin to atomically (wrt deopts) handle debugger statement and - // drop frames to restart function if necessary. - static void GenerateHandleDebuggerStatement(MacroAssembler* masm); - - // Builtin to trigger a debug break before entering the function. - static void GenerateDebugBreakTrampoline(MacroAssembler* masm); -}; - } // namespace internal } // namespace v8 diff --git a/deps/v8/src/debug/ia32/debug-ia32.cc b/deps/v8/src/debug/ia32/debug-ia32.cc deleted file mode 100644 index 72d4ac37df..0000000000 --- a/deps/v8/src/debug/ia32/debug-ia32.cc +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2012 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#if V8_TARGET_ARCH_IA32 - -#include "src/debug/debug.h" - -#include "src/codegen/macro-assembler.h" -#include "src/debug/liveedit.h" -#include "src/execution/frames-inl.h" - -namespace v8 { -namespace internal { - -#define __ ACCESS_MASM(masm) - -void DebugCodegen::GenerateHandleDebuggerStatement(MacroAssembler* masm) { - { - FrameScope scope(masm, StackFrame::INTERNAL); - __ CallRuntime(Runtime::kHandleDebuggerStatement, 0); - } - __ MaybeDropFrames(); - - // Return to caller. - __ ret(0); -} - -void DebugCodegen::GenerateFrameDropperTrampoline(MacroAssembler* masm) { - // Frame is being dropped: - // - Drop to the target frame specified by eax. - // - Look up current function on the frame. - // - Leave the frame. - // - Restart the frame by calling the function. - __ mov(ebp, eax); - __ mov(edi, Operand(ebp, StandardFrameConstants::kFunctionOffset)); - __ mov(eax, Operand(ebp, StandardFrameConstants::kArgCOffset)); - __ leave(); - - // The arguments are already in the stack (including any necessary padding), - // we should not try to massage the arguments again. - __ mov(ecx, Immediate(kDontAdaptArgumentsSentinel)); - __ mov(esi, FieldOperand(edi, JSFunction::kContextOffset)); - __ InvokeFunctionCode(edi, no_reg, ecx, eax, JUMP_FUNCTION); -} - -const bool LiveEdit::kFrameDropperSupported = true; - -#undef __ - -} // namespace internal -} // namespace v8 - -#endif // V8_TARGET_ARCH_IA32 diff --git a/deps/v8/src/debug/liveedit.cc b/deps/v8/src/debug/liveedit.cc index 294f0e1f7b..a3065bb49f 100644 --- a/deps/v8/src/debug/liveedit.cc +++ b/deps/v8/src/debug/liveedit.cc @@ -66,31 +66,35 @@ class Differencer { public: explicit Differencer(Comparator::Input* input) : input_(input), len1_(input->GetLength1()), len2_(input->GetLength2()) { - buffer_ = NewArray<int>(len1_ * len2_); - } - ~Differencer() { - DeleteArray(buffer_); } void Initialize() { - int array_size = len1_ * len2_; - for (int i = 0; i < array_size; i++) { - buffer_[i] = kEmptyCellValue; - } } // Makes sure that result for the full problem is calculated and stored // in the table together with flags showing a path through subproblems. void FillTable() { - CompareUpToTail(0, 0); + // Determine common prefix to skip. + int minLen = std::min(len1_, len2_); + while (prefixLen_ < minLen && input_->Equals(prefixLen_, prefixLen_)) { + ++prefixLen_; + } + + // Pre-fill common suffix in the table. + for (int pos1 = len1_, pos2 = len2_; pos1 > prefixLen_ && + pos2 > prefixLen_ && + input_->Equals(--pos1, --pos2);) { + set_value4_and_dir(pos1, pos2, 0, EQ); + } + + CompareUpToTail(prefixLen_, prefixLen_); } void SaveResult(Comparator::Output* chunk_writer) { ResultWriter writer(chunk_writer); - int pos1 = 0; - int pos2 = 0; - while (true) { + if (prefixLen_) writer.eq(prefixLen_); + for (int pos1 = prefixLen_, pos2 = prefixLen_; true;) { if (pos1 < len1_) { if (pos2 < len2_) { Direction dir = get_direction(pos1, pos2); @@ -128,9 +132,10 @@ class Differencer { private: Comparator::Input* input_; - int* buffer_; + std::map<std::pair<int, int>, int> buffer_; int len1_; int len2_; + int prefixLen_ = 0; enum Direction { EQ = 0, @@ -144,51 +149,51 @@ class Differencer { // Computes result for a subtask and optionally caches it in the buffer table. // All results values are shifted to make space for flags in the lower bits. int CompareUpToTail(int pos1, int pos2) { - if (pos1 < len1_) { - if (pos2 < len2_) { - int cached_res = get_value4(pos1, pos2); - if (cached_res == kEmptyCellValue) { - Direction dir; - int res; - if (input_->Equals(pos1, pos2)) { - res = CompareUpToTail(pos1 + 1, pos2 + 1); - dir = EQ; - } else { - int res1 = CompareUpToTail(pos1 + 1, pos2) + - (1 << kDirectionSizeBits); - int res2 = CompareUpToTail(pos1, pos2 + 1) + - (1 << kDirectionSizeBits); - if (res1 == res2) { - res = res1; - dir = SKIP_ANY; - } else if (res1 < res2) { - res = res1; - dir = SKIP1; - } else { - res = res2; - dir = SKIP2; - } - } - set_value4_and_dir(pos1, pos2, res, dir); - cached_res = res; - } - return cached_res; + if (pos1 == len1_) { + return (len2_ - pos2) << kDirectionSizeBits; + } + if (pos2 == len2_) { + return (len1_ - pos1) << kDirectionSizeBits; + } + int res = get_value4(pos1, pos2); + if (res != kEmptyCellValue) { + return res; + } + Direction dir; + if (input_->Equals(pos1, pos2)) { + res = CompareUpToTail(pos1 + 1, pos2 + 1); + dir = EQ; + } else { + int res1 = CompareUpToTail(pos1 + 1, pos2) + (1 << kDirectionSizeBits); + int res2 = CompareUpToTail(pos1, pos2 + 1) + (1 << kDirectionSizeBits); + if (res1 == res2) { + res = res1; + dir = SKIP_ANY; + } else if (res1 < res2) { + res = res1; + dir = SKIP1; } else { - return (len1_ - pos1) << kDirectionSizeBits; + res = res2; + dir = SKIP2; } - } else { - return (len2_ - pos2) << kDirectionSizeBits; } + set_value4_and_dir(pos1, pos2, res, dir); + return res; } - inline int& get_cell(int i1, int i2) { - return buffer_[i1 + i2 * len1_]; + inline int get_cell(int i1, int i2) { + auto it = buffer_.find(std::make_pair(i1, i2)); + return it == buffer_.end() ? kEmptyCellValue : it->second; + } + + inline void set_cell(int i1, int i2, int value) { + buffer_.insert(std::make_pair(std::make_pair(i1, i2), value)); } // Each cell keeps a value plus direction. Value is multiplied by 4. void set_value4_and_dir(int i1, int i2, int value4, Direction dir) { DCHECK_EQ(0, value4 & kDirectionMask); - get_cell(i1, i2) = value4 | dir; + set_cell(i1, i2, value4 | dir); } int get_value4(int i1, int i2) { @@ -214,10 +219,10 @@ class Differencer { : chunk_writer_(chunk_writer), pos1_(0), pos2_(0), pos1_begin_(-1), pos2_begin_(-1), has_open_chunk_(false) { } - void eq() { + void eq(int len = 1) { FlushChunk(); - pos1_++; - pos2_++; + pos1_ += len; + pos2_ += len; } void skip1(int len1) { StartChunk(); @@ -782,10 +787,8 @@ bool ParseScript(Isolate* isolate, Handle<Script> script, ParseInfo* parse_info, } struct FunctionData { - FunctionData(FunctionLiteral* literal, bool should_restart) - : literal(literal), - stack_position(NOT_ON_STACK), - should_restart(should_restart) {} + explicit FunctionData(FunctionLiteral* literal) + : literal(literal), stack_position(NOT_ON_STACK) {} FunctionLiteral* literal; MaybeHandle<SharedFunctionInfo> shared; @@ -794,23 +797,14 @@ struct FunctionData { // In case of multiple functions with different stack position, the latest // one (in the order below) is used, since it is the most restrictive. // This is important only for functions to be restarted. - enum StackPosition { - NOT_ON_STACK, - ABOVE_BREAK_FRAME, - PATCHABLE, - BELOW_NON_DROPPABLE_FRAME, - ARCHIVED_THREAD, - }; + enum StackPosition { NOT_ON_STACK, ON_STACK }; StackPosition stack_position; - bool should_restart; }; class FunctionDataMap : public ThreadVisitor { public: - void AddInterestingLiteral(int script_id, FunctionLiteral* literal, - bool should_restart) { - map_.emplace(GetFuncId(script_id, literal), - FunctionData{literal, should_restart}); + void AddInterestingLiteral(int script_id, FunctionLiteral* literal) { + map_.emplace(GetFuncId(script_id, literal), FunctionData{literal}); } bool Lookup(SharedFunctionInfo sfi, FunctionData** data) { @@ -827,7 +821,7 @@ class FunctionDataMap : public ThreadVisitor { return Lookup(GetFuncId(script->id(), literal), data); } - void Fill(Isolate* isolate, Address* restart_frame_fp) { + void Fill(Isolate* isolate) { { HeapObjectIterator iterator(isolate->heap(), HeapObjectIterator::kFilterUnreachable); @@ -854,38 +848,11 @@ class FunctionDataMap : public ThreadVisitor { } } } - FunctionData::StackPosition stack_position = - isolate->debug()->break_frame_id() == StackFrameId::NO_ID - ? FunctionData::PATCHABLE - : FunctionData::ABOVE_BREAK_FRAME; - for (StackFrameIterator it(isolate); !it.done(); it.Advance()) { - StackFrame* frame = it.frame(); - if (stack_position == FunctionData::ABOVE_BREAK_FRAME) { - if (frame->id() == isolate->debug()->break_frame_id()) { - stack_position = FunctionData::PATCHABLE; - } - } - if (stack_position == FunctionData::PATCHABLE && - (frame->is_exit() || frame->is_builtin_exit())) { - stack_position = FunctionData::BELOW_NON_DROPPABLE_FRAME; - continue; - } - if (!frame->is_java_script()) continue; - std::vector<Handle<SharedFunctionInfo>> sfis; - JavaScriptFrame::cast(frame)->GetFunctions(&sfis); - for (auto& sfi : sfis) { - if (stack_position == FunctionData::PATCHABLE && - IsResumableFunction(sfi->kind())) { - stack_position = FunctionData::BELOW_NON_DROPPABLE_FRAME; - } - FunctionData* data = nullptr; - if (!Lookup(*sfi, &data)) continue; - if (!data->should_restart) continue; - data->stack_position = stack_position; - *restart_frame_fp = frame->fp(); - } - } + // Visit the current thread stack. + VisitThread(isolate, isolate->thread_local_top()); + + // Visit the stacks of all archived threads. isolate->thread_manager()->IterateArchivedThreads(this); } @@ -932,7 +899,7 @@ class FunctionDataMap : public ThreadVisitor { for (auto& sfi : sfis) { FunctionData* data = nullptr; if (!Lookup(*sfi, &data)) continue; - data->stack_position = FunctionData::ARCHIVED_THREAD; + data->stack_position = FunctionData::ON_STACK; } } } @@ -940,11 +907,10 @@ class FunctionDataMap : public ThreadVisitor { std::map<FuncId, FunctionData> map_; }; -bool CanPatchScript( - const LiteralMap& changed, Handle<Script> script, Handle<Script> new_script, - FunctionDataMap& function_data_map, // NOLINT(runtime/references) - debug::LiveEditResult* result) { - debug::LiveEditResult::Status status = debug::LiveEditResult::OK; +bool CanPatchScript(const LiteralMap& changed, Handle<Script> script, + Handle<Script> new_script, + FunctionDataMap& function_data_map, + debug::LiveEditResult* result) { for (const auto& mapping : changed) { FunctionData* data = nullptr; function_data_map.Lookup(script, mapping.first, &data); @@ -953,55 +919,11 @@ bool CanPatchScript( Handle<SharedFunctionInfo> sfi; if (!data->shared.ToHandle(&sfi)) { continue; - } else if (!data->should_restart) { - UNREACHABLE(); - } else if (data->stack_position == FunctionData::ABOVE_BREAK_FRAME) { - status = debug::LiveEditResult::BLOCKED_BY_FUNCTION_ABOVE_BREAK_FRAME; - } else if (data->stack_position == - FunctionData::BELOW_NON_DROPPABLE_FRAME) { - status = - debug::LiveEditResult::BLOCKED_BY_FUNCTION_BELOW_NON_DROPPABLE_FRAME; - } else if (!data->running_generators.empty()) { - status = debug::LiveEditResult::BLOCKED_BY_RUNNING_GENERATOR; - } else if (data->stack_position == FunctionData::ARCHIVED_THREAD) { - status = debug::LiveEditResult::BLOCKED_BY_ACTIVE_FUNCTION; - } - if (status != debug::LiveEditResult::OK) { - result->status = status; + } else if (data->stack_position == FunctionData::ON_STACK) { + result->status = debug::LiveEditResult::BLOCKED_BY_ACTIVE_FUNCTION; return false; - } - } - return true; -} - -bool CanRestartFrame( - Isolate* isolate, Address fp, - FunctionDataMap& function_data_map, // NOLINT(runtime/references) - const LiteralMap& changed, debug::LiveEditResult* result) { - DCHECK_GT(fp, 0); - StackFrame* restart_frame = nullptr; - StackFrameIterator it(isolate); - for (; !it.done(); it.Advance()) { - if (it.frame()->fp() == fp) { - restart_frame = it.frame(); - break; - } - } - DCHECK(restart_frame && restart_frame->is_java_script()); - if (!LiveEdit::kFrameDropperSupported) { - result->status = debug::LiveEditResult::FRAME_RESTART_IS_NOT_SUPPORTED; - return false; - } - std::vector<Handle<SharedFunctionInfo>> sfis; - JavaScriptFrame::cast(restart_frame)->GetFunctions(&sfis); - for (auto& sfi : sfis) { - FunctionData* data = nullptr; - if (!function_data_map.Lookup(*sfi, &data)) continue; - auto new_literal_it = changed.find(data->literal); - if (new_literal_it == changed.end()) continue; - if (new_literal_it->second->scope()->new_target_var()) { - result->status = - debug::LiveEditResult::BLOCKED_BY_NEW_TARGET_IN_RESTART_FRAME; + } else if (!data->running_generators.empty()) { + result->status = debug::LiveEditResult::BLOCKED_BY_RUNNING_GENERATOR; return false; } } @@ -1092,24 +1014,17 @@ void LiveEdit::PatchScript(Isolate* isolate, Handle<Script> script, FunctionDataMap function_data_map; for (const auto& mapping : changed) { - function_data_map.AddInterestingLiteral(script->id(), mapping.first, true); - function_data_map.AddInterestingLiteral(new_script->id(), mapping.second, - false); + function_data_map.AddInterestingLiteral(script->id(), mapping.first); + function_data_map.AddInterestingLiteral(new_script->id(), mapping.second); } for (const auto& mapping : unchanged) { - function_data_map.AddInterestingLiteral(script->id(), mapping.first, false); + function_data_map.AddInterestingLiteral(script->id(), mapping.first); } - Address restart_frame_fp = 0; - function_data_map.Fill(isolate, &restart_frame_fp); + function_data_map.Fill(isolate); if (!CanPatchScript(changed, script, new_script, function_data_map, result)) { return; } - if (restart_frame_fp && - !CanRestartFrame(isolate, restart_frame_fp, function_data_map, changed, - result)) { - return; - } if (preview) { result->status = debug::LiveEditResult::OK; @@ -1273,16 +1188,6 @@ void LiveEdit::PatchScript(Isolate* isolate, Handle<Script> script, } #endif - if (restart_frame_fp) { - for (StackFrameIterator it(isolate); !it.done(); it.Advance()) { - if (it.frame()->fp() == restart_frame_fp) { - isolate->debug()->ScheduleFrameRestart(it.frame()); - result->stack_changed = true; - break; - } - } - } - int script_id = script->id(); script->set_id(new_script->id()); new_script->set_id(script_id); @@ -1290,42 +1195,6 @@ void LiveEdit::PatchScript(Isolate* isolate, Handle<Script> script, result->script = ToApiHandle<v8::debug::Script>(new_script); } -void LiveEdit::InitializeThreadLocal(Debug* debug) { - debug->thread_local_.restart_fp_ = 0; -} - -bool LiveEdit::RestartFrame(JavaScriptFrame* frame) { - if (!LiveEdit::kFrameDropperSupported) return false; - Isolate* isolate = frame->isolate(); - StackFrameId break_frame_id = isolate->debug()->break_frame_id(); - bool break_frame_found = break_frame_id == StackFrameId::NO_ID; - for (StackFrameIterator it(isolate); !it.done(); it.Advance()) { - StackFrame* current = it.frame(); - break_frame_found = break_frame_found || break_frame_id == current->id(); - if (current->fp() == frame->fp()) { - if (break_frame_found) { - isolate->debug()->ScheduleFrameRestart(current); - return true; - } else { - return false; - } - } - if (!break_frame_found) continue; - if (current->is_exit() || current->is_builtin_exit()) { - return false; - } - if (!current->is_java_script()) continue; - std::vector<Handle<SharedFunctionInfo>> shareds; - JavaScriptFrame::cast(current)->GetFunctions(&shareds); - for (auto& shared : shareds) { - if (IsResumableFunction(shared->kind())) { - return false; - } - } - } - return false; -} - void LiveEdit::CompareStrings(Isolate* isolate, Handle<String> s1, Handle<String> s2, std::vector<SourceChangeRange>* diffs) { diff --git a/deps/v8/src/debug/liveedit.h b/deps/v8/src/debug/liveedit.h index 4291efb2d0..5e06d3f2a3 100644 --- a/deps/v8/src/debug/liveedit.h +++ b/deps/v8/src/debug/liveedit.h @@ -56,11 +56,6 @@ struct SourceChangeRange { class V8_EXPORT_PRIVATE LiveEdit : AllStatic { public: - static void InitializeThreadLocal(Debug* debug); - - // Restarts the call frame and completely drops all frames above it. - static bool RestartFrame(JavaScriptFrame* frame); - static void CompareStrings(Isolate* isolate, Handle<String> a, Handle<String> b, std::vector<SourceChangeRange>* diffs); @@ -69,8 +64,6 @@ class V8_EXPORT_PRIVATE LiveEdit : AllStatic { static void PatchScript(Isolate* isolate, Handle<Script> script, Handle<String> source, bool preview, debug::LiveEditResult* result); - // Architecture-specific constant. - static const bool kFrameDropperSupported; }; } // namespace internal } // namespace v8 diff --git a/deps/v8/src/debug/mips/debug-mips.cc b/deps/v8/src/debug/mips/debug-mips.cc deleted file mode 100644 index d1ab6ec545..0000000000 --- a/deps/v8/src/debug/mips/debug-mips.cc +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2012 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#if V8_TARGET_ARCH_MIPS - -#include "src/debug/debug.h" - -#include "src/codegen/macro-assembler.h" -#include "src/debug/liveedit.h" -#include "src/execution/frames-inl.h" - -namespace v8 { -namespace internal { - -#define __ ACCESS_MASM(masm) - -void DebugCodegen::GenerateHandleDebuggerStatement(MacroAssembler* masm) { - { - FrameScope scope(masm, StackFrame::INTERNAL); - __ CallRuntime(Runtime::kHandleDebuggerStatement, 0); - } - __ MaybeDropFrames(); - - // Return to caller. - __ Ret(); -} - -void DebugCodegen::GenerateFrameDropperTrampoline(MacroAssembler* masm) { - // Frame is being dropped: - // - Drop to the target frame specified by a1. - // - Look up current function on the frame. - // - Leave the frame. - // - Restart the frame by calling the function. - __ mov(fp, a1); - __ lw(a1, MemOperand(fp, StandardFrameConstants::kFunctionOffset)); - __ lw(a0, MemOperand(fp, StandardFrameConstants::kArgCOffset)); - - // Pop return address and frame. - __ LeaveFrame(StackFrame::INTERNAL); - - __ li(a2, Operand(kDontAdaptArgumentsSentinel)); - - __ InvokeFunction(a1, a2, a0, JUMP_FUNCTION); -} - - -const bool LiveEdit::kFrameDropperSupported = true; - -#undef __ - -} // namespace internal -} // namespace v8 - -#endif // V8_TARGET_ARCH_MIPS diff --git a/deps/v8/src/debug/mips64/debug-mips64.cc b/deps/v8/src/debug/mips64/debug-mips64.cc deleted file mode 100644 index 7b8e9e9744..0000000000 --- a/deps/v8/src/debug/mips64/debug-mips64.cc +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2012 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#if V8_TARGET_ARCH_MIPS64 - -#include "src/debug/debug.h" - -#include "src/codegen/macro-assembler.h" -#include "src/debug/liveedit.h" -#include "src/execution/frames-inl.h" - -namespace v8 { -namespace internal { - -#define __ ACCESS_MASM(masm) - -void DebugCodegen::GenerateHandleDebuggerStatement(MacroAssembler* masm) { - { - FrameScope scope(masm, StackFrame::INTERNAL); - __ CallRuntime(Runtime::kHandleDebuggerStatement, 0); - } - __ MaybeDropFrames(); - - // Return to caller. - __ Ret(); -} - -void DebugCodegen::GenerateFrameDropperTrampoline(MacroAssembler* masm) { - // Frame is being dropped: - // - Drop to the target frame specified by a1. - // - Look up current function on the frame. - // - Leave the frame. - // - Restart the frame by calling the function. - __ mov(fp, a1); - __ Ld(a1, MemOperand(fp, StandardFrameConstants::kFunctionOffset)); - __ Ld(a0, MemOperand(fp, StandardFrameConstants::kArgCOffset)); - - // Pop return address and frame. - __ LeaveFrame(StackFrame::INTERNAL); - - __ li(a2, Operand(kDontAdaptArgumentsSentinel)); - - __ InvokeFunction(a1, a2, a0, JUMP_FUNCTION); -} - - -const bool LiveEdit::kFrameDropperSupported = true; - -#undef __ - -} // namespace internal -} // namespace v8 - -#endif // V8_TARGET_ARCH_MIPS64 diff --git a/deps/v8/src/debug/ppc/OWNERS b/deps/v8/src/debug/ppc/OWNERS deleted file mode 100644 index 02c2cd757c..0000000000 --- a/deps/v8/src/debug/ppc/OWNERS +++ /dev/null @@ -1,5 +0,0 @@ -junyan@redhat.com -joransiu@ca.ibm.com -midawson@redhat.com -mfarazma@redhat.com -vasili.skurydzin@ibm.com diff --git a/deps/v8/src/debug/ppc/debug-ppc.cc b/deps/v8/src/debug/ppc/debug-ppc.cc deleted file mode 100644 index c083708d3a..0000000000 --- a/deps/v8/src/debug/ppc/debug-ppc.cc +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2014 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#if V8_TARGET_ARCH_PPC || V8_TARGET_ARCH_PPC64 - -#include "src/debug/debug.h" - -#include "src/codegen/macro-assembler.h" -#include "src/debug/liveedit.h" -#include "src/execution/frames-inl.h" - -namespace v8 { -namespace internal { - -#define __ ACCESS_MASM(masm) - -void DebugCodegen::GenerateHandleDebuggerStatement(MacroAssembler* masm) { - { - FrameScope scope(masm, StackFrame::INTERNAL); - __ CallRuntime(Runtime::kHandleDebuggerStatement, 0); - } - __ MaybeDropFrames(); - - // Return to caller. - __ Ret(); -} - -void DebugCodegen::GenerateFrameDropperTrampoline(MacroAssembler* masm) { - // Frame is being dropped: - // - Drop to the target frame specified by r4. - // - Look up current function on the frame. - // - Leave the frame. - // - Restart the frame by calling the function. - - __ mr(fp, r4); - __ LoadP(r4, MemOperand(fp, StandardFrameConstants::kFunctionOffset)); - __ LoadP(r3, MemOperand(fp, StandardFrameConstants::kArgCOffset)); - __ LeaveFrame(StackFrame::INTERNAL); - - // The arguments are already in the stack (including any necessary padding), - // we should not try to massage the arguments again. - __ mov(r5, Operand(kDontAdaptArgumentsSentinel)); - __ InvokeFunction(r4, r5, r3, JUMP_FUNCTION); -} - -const bool LiveEdit::kFrameDropperSupported = true; - -#undef __ -} // namespace internal -} // namespace v8 - -#endif // V8_TARGET_ARCH_PPC || V8_TARGET_ARCH_PPC64 diff --git a/deps/v8/src/debug/riscv64/debug-riscv64.cc b/deps/v8/src/debug/riscv64/debug-riscv64.cc deleted file mode 100644 index b292300150..0000000000 --- a/deps/v8/src/debug/riscv64/debug-riscv64.cc +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2021 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#if V8_TARGET_ARCH_RISCV64 - -#include "src/codegen/macro-assembler.h" -#include "src/debug/debug.h" -#include "src/debug/liveedit.h" -#include "src/execution/frames-inl.h" - -namespace v8 { -namespace internal { - -#define __ ACCESS_MASM(masm) - -void DebugCodegen::GenerateHandleDebuggerStatement(MacroAssembler* masm) { - { - FrameScope scope(masm, StackFrame::INTERNAL); - __ CallRuntime(Runtime::kHandleDebuggerStatement, 0); - } - __ MaybeDropFrames(); - - // Return to caller. - __ Ret(); -} - -void DebugCodegen::GenerateFrameDropperTrampoline(MacroAssembler* masm) { - // Frame is being dropped: - // - Drop to the target frame specified by a1. - // - Look up current function on the frame. - // - Leave the frame. - // - Restart the frame by calling the function. - __ mv(fp, a1); - __ Ld(a1, MemOperand(fp, StandardFrameConstants::kFunctionOffset)); - - // Pop return address and frame. - __ LeaveFrame(StackFrame::INTERNAL); - - __ Ld(a0, FieldMemOperand(a1, JSFunction::kSharedFunctionInfoOffset)); - __ Lhu(a0, - FieldMemOperand(a0, SharedFunctionInfo::kFormalParameterCountOffset)); - __ mv(a2, a0); - - __ InvokeFunction(a1, a2, a0, JUMP_FUNCTION); -} - -const bool LiveEdit::kFrameDropperSupported = true; - -#undef __ - -} // namespace internal -} // namespace v8 - -#endif // V8_TARGET_ARCH_RISCV64 diff --git a/deps/v8/src/debug/s390/debug-s390.cc b/deps/v8/src/debug/s390/debug-s390.cc deleted file mode 100644 index b58e70b851..0000000000 --- a/deps/v8/src/debug/s390/debug-s390.cc +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2015 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "src/init/v8.h" - -#if V8_TARGET_ARCH_S390 - -#include "src/debug/debug.h" - -#include "src/codegen/macro-assembler.h" -#include "src/debug/liveedit.h" -#include "src/execution/frames-inl.h" - -namespace v8 { -namespace internal { - -#define __ ACCESS_MASM(masm) - -void DebugCodegen::GenerateHandleDebuggerStatement(MacroAssembler* masm) { - { - FrameScope scope(masm, StackFrame::INTERNAL); - __ CallRuntime(Runtime::kHandleDebuggerStatement, 0); - } - __ MaybeDropFrames(); - - // Return to caller. - __ Ret(); -} - -void DebugCodegen::GenerateFrameDropperTrampoline(MacroAssembler* masm) { - // Frame is being dropped: - // - Drop to the target frame specified by r3. - // - Look up current function on the frame. - // - Leave the frame. - // - Restart the frame by calling the function. - - __ mov(fp, r3); - __ LoadU64(r3, MemOperand(fp, StandardFrameConstants::kFunctionOffset)); - __ LoadU64(r2, MemOperand(fp, StandardFrameConstants::kArgCOffset)); - __ LeaveFrame(StackFrame::INTERNAL); - - // The arguments are already in the stack (including any necessary padding), - // we should not try to massage the arguments again. - __ mov(r4, Operand(kDontAdaptArgumentsSentinel)); - __ InvokeFunction(r3, r4, r2, JUMP_FUNCTION); -} - -const bool LiveEdit::kFrameDropperSupported = true; - -#undef __ -} // namespace internal -} // namespace v8 - -#endif // V8_TARGET_ARCH_S390 diff --git a/deps/v8/src/debug/x64/debug-x64.cc b/deps/v8/src/debug/x64/debug-x64.cc deleted file mode 100644 index 2209213831..0000000000 --- a/deps/v8/src/debug/x64/debug-x64.cc +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2012 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#if V8_TARGET_ARCH_X64 - -#include "src/debug/debug.h" - -#include "src/codegen/assembler.h" -#include "src/codegen/macro-assembler.h" -#include "src/debug/liveedit.h" -#include "src/execution/frames-inl.h" -#include "src/objects/objects-inl.h" - -namespace v8 { -namespace internal { - -#define __ ACCESS_MASM(masm) - -void DebugCodegen::GenerateHandleDebuggerStatement(MacroAssembler* masm) { - { - FrameScope scope(masm, StackFrame::INTERNAL); - __ CallRuntime(Runtime::kHandleDebuggerStatement, 0); - } - __ MaybeDropFrames(); - - // Return to caller. - __ ret(0); -} - -void DebugCodegen::GenerateFrameDropperTrampoline(MacroAssembler* masm) { - // Frame is being dropped: - // - Drop to the target frame specified by rbx. - // - Look up current function on the frame. - // - Leave the frame. - // - Restart the frame by calling the function. - __ movq(rbp, rbx); - __ movq(rdi, Operand(rbp, StandardFrameConstants::kFunctionOffset)); - __ movq(rax, Operand(rbp, StandardFrameConstants::kArgCOffset)); - __ leave(); - - // The arguments are already in the stack (including any necessary padding), - // we should not try to massage the arguments again. - __ movq(rbx, Immediate(kDontAdaptArgumentsSentinel)); - __ InvokeFunction(rdi, no_reg, rbx, rax, JUMP_FUNCTION); -} - -const bool LiveEdit::kFrameDropperSupported = true; - -#undef __ - -} // namespace internal -} // namespace v8 - -#endif // V8_TARGET_ARCH_X64 diff --git a/deps/v8/src/deoptimizer/deoptimizer-cfi-builtins.cc b/deps/v8/src/deoptimizer/deoptimizer-cfi-builtins.cc index 0b7472dbea..bbeacc561d 100644 --- a/deps/v8/src/deoptimizer/deoptimizer-cfi-builtins.cc +++ b/deps/v8/src/deoptimizer/deoptimizer-cfi-builtins.cc @@ -6,8 +6,8 @@ #include "src/deoptimizer/deoptimizer.h" extern "C" { -void Builtins_InterpreterEnterBytecodeAdvance(); -void Builtins_InterpreterEnterBytecodeDispatch(); +void Builtins_InterpreterEnterAtBytecode(); +void Builtins_InterpreterEnterAtNextBytecode(); void Builtins_ContinueToCodeStubBuiltinWithResult(); void Builtins_ContinueToCodeStubBuiltin(); void Builtins_ContinueToJavaScriptBuiltinWithResult(); @@ -24,8 +24,8 @@ namespace internal { // List of allowed builtin addresses that we can return to in the deoptimizer. constexpr function_ptr builtins[] = { - &Builtins_InterpreterEnterBytecodeAdvance, - &Builtins_InterpreterEnterBytecodeDispatch, + &Builtins_InterpreterEnterAtBytecode, + &Builtins_InterpreterEnterAtNextBytecode, &Builtins_ContinueToCodeStubBuiltinWithResult, &Builtins_ContinueToCodeStubBuiltin, &Builtins_ContinueToJavaScriptBuiltinWithResult, diff --git a/deps/v8/src/deoptimizer/deoptimizer.cc b/deps/v8/src/deoptimizer/deoptimizer.cc index 7c4562dbd5..eabd9ebb41 100644 --- a/deps/v8/src/deoptimizer/deoptimizer.cc +++ b/deps/v8/src/deoptimizer/deoptimizer.cc @@ -380,8 +380,7 @@ void Deoptimizer::DeoptimizeMarkedCodeForContext(NativeContext native_context) { } void Deoptimizer::DeoptimizeAll(Isolate* isolate) { - RuntimeCallTimerScope runtimeTimer(isolate, - RuntimeCallCounterId::kDeoptimizeCode); + RCS_SCOPE(isolate, RuntimeCallCounterId::kDeoptimizeCode); TimerEventScope<TimerEventDeoptimizeCode> timer(isolate); TRACE_EVENT0("v8", "V8.DeoptimizeCode"); TraceDeoptAll(isolate); @@ -399,8 +398,7 @@ void Deoptimizer::DeoptimizeAll(Isolate* isolate) { } void Deoptimizer::DeoptimizeMarkedCode(Isolate* isolate) { - RuntimeCallTimerScope runtimeTimer(isolate, - RuntimeCallCounterId::kDeoptimizeCode); + RCS_SCOPE(isolate, RuntimeCallCounterId::kDeoptimizeCode); TimerEventScope<TimerEventDeoptimizeCode> timer(isolate); TRACE_EVENT0("v8", "V8.DeoptimizeCode"); TraceDeoptMarked(isolate); @@ -427,8 +425,7 @@ void Deoptimizer::MarkAllCodeForContext(NativeContext native_context) { void Deoptimizer::DeoptimizeFunction(JSFunction function, Code code) { Isolate* isolate = function.GetIsolate(); - RuntimeCallTimerScope runtimeTimer(isolate, - RuntimeCallCounterId::kDeoptimizeCode); + RCS_SCOPE(isolate, RuntimeCallCounterId::kDeoptimizeCode); TimerEventScope<TimerEventDeoptimizeCode> timer(isolate); TRACE_EVENT0("v8", "V8.DeoptimizeCode"); function.ResetIfBytecodeFlushed(); @@ -969,8 +966,8 @@ void Deoptimizer::DoComputeOutputFrames() { topmost->GetRegisterValues()->SetRegister(kRootRegister.code(), isolate()->isolate_root()); #ifdef V8_COMPRESS_POINTERS_IN_SHARED_CAGE - topmost->GetRegisterValues()->SetRegister(kPointerCageBaseRegister.code(), - isolate()->isolate_root()); + topmost->GetRegisterValues()->SetRegister(kPtrComprCageBaseRegister.code(), + isolate()->cage_base()); #endif // Print some helpful diagnostic information. @@ -999,8 +996,8 @@ Builtins::Name DispatchBuiltinFor(bool is_baseline, bool advance_bc) { return advance_bc ? Builtins::kBaselineEnterAtNextBytecode : Builtins::kBaselineEnterAtBytecode; } else { - return advance_bc ? Builtins::kInterpreterEnterBytecodeAdvance - : Builtins::kInterpreterEnterBytecodeDispatch; + return advance_bc ? Builtins::kInterpreterEnterAtNextBytecode + : Builtins::kInterpreterEnterAtBytecode; } } diff --git a/deps/v8/src/deoptimizer/riscv64/deoptimizer-riscv64.cc b/deps/v8/src/deoptimizer/riscv64/deoptimizer-riscv64.cc index 1cbe85ba5d..b7dceed503 100644 --- a/deps/v8/src/deoptimizer/riscv64/deoptimizer-riscv64.cc +++ b/deps/v8/src/deoptimizer/riscv64/deoptimizer-riscv64.cc @@ -8,9 +8,9 @@ namespace v8 { namespace internal { const bool Deoptimizer::kSupportsFixedDeoptExitSizes = true; -const int Deoptimizer::kNonLazyDeoptExitSize = 5 * kInstrSize; -const int Deoptimizer::kLazyDeoptExitSize = 5 * kInstrSize; -const int Deoptimizer::kEagerWithResumeBeforeArgsSize = 6 * kInstrSize; +const int Deoptimizer::kNonLazyDeoptExitSize = 4 * kInstrSize; +const int Deoptimizer::kLazyDeoptExitSize = 4 * kInstrSize; +const int Deoptimizer::kEagerWithResumeBeforeArgsSize = 5 * kInstrSize; const int Deoptimizer::kEagerWithResumeDeoptExitSize = kEagerWithResumeBeforeArgsSize + 4 * kInstrSize; const int Deoptimizer::kEagerWithResumeImmedArgs1PcOffset = kInstrSize; diff --git a/deps/v8/src/deoptimizer/translated-state.cc b/deps/v8/src/deoptimizer/translated-state.cc index 02c473d22b..2ad4bf0d25 100644 --- a/deps/v8/src/deoptimizer/translated-state.cc +++ b/deps/v8/src/deoptimizer/translated-state.cc @@ -1883,7 +1883,7 @@ void TranslatedState::InitializeJSObjectAt( WRITE_BARRIER(*object_storage, offset, *field_value); } } - object_storage->synchronized_set_map(*map); + object_storage->set_map(*map, kReleaseStore); } void TranslatedState::InitializeObjectWithTaggedFieldsAt( @@ -1920,7 +1920,7 @@ void TranslatedState::InitializeObjectWithTaggedFieldsAt( WRITE_BARRIER(*object_storage, offset, *field_value); } - object_storage->synchronized_set_map(*map); + object_storage->set_map(*map, kReleaseStore); } TranslatedValue* TranslatedState::ResolveCapturedObject(TranslatedValue* slot) { diff --git a/deps/v8/src/diagnostics/compilation-statistics.cc b/deps/v8/src/diagnostics/compilation-statistics.cc index d7a67617e7..40bb239b12 100644 --- a/deps/v8/src/diagnostics/compilation-statistics.cc +++ b/deps/v8/src/diagnostics/compilation-statistics.cc @@ -2,11 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include <ostream> // NOLINT(readability/streams) +#include "src/diagnostics/compilation-statistics.h" + +#include <ostream> #include <vector> #include "src/base/platform/platform.h" -#include "src/diagnostics/compilation-statistics.h" namespace v8 { namespace internal { diff --git a/deps/v8/src/diagnostics/disassembler.cc b/deps/v8/src/diagnostics/disassembler.cc index 6e6ecb3f03..91a7a72bbf 100644 --- a/deps/v8/src/diagnostics/disassembler.cc +++ b/deps/v8/src/diagnostics/disassembler.cc @@ -237,10 +237,11 @@ static void PrintRelocInfo(StringBuilder* out, Isolate* isolate, out->AddFormatted(" ;; %sobject: %s", is_compressed ? "(compressed) " : "", obj_name.get()); } else if (rmode == RelocInfo::EXTERNAL_REFERENCE) { + Address address = relocinfo->target_external_reference(); const char* reference_name = - ref_encoder ? ref_encoder->NameOfAddress( - isolate, relocinfo->target_external_reference()) - : "unknown"; + ref_encoder + ? ref_encoder->NameOfAddress(isolate, address) + : ExternalReferenceTable::NameOfIsolateIndependentAddress(address); out->AddFormatted(" ;; external reference (%s)", reference_name); } else if (RelocInfo::IsCodeTargetMode(rmode)) { out->AddFormatted(" ;; code:"); @@ -441,14 +442,16 @@ int Disassembler::Decode(Isolate* isolate, std::ostream* os, byte* begin, "Builtins disassembly requires a readable .text section"); V8NameConverter v8NameConverter(isolate, code); if (isolate) { - // We have an isolate, so support external reference names. + // We have an isolate, so support external reference names from V8 and + // embedder. SealHandleScope shs(isolate); DisallowGarbageCollection no_alloc; ExternalReferenceEncoder ref_encoder(isolate); return DecodeIt(isolate, &ref_encoder, os, code, v8NameConverter, begin, end, current_pc); } else { - // No isolate => isolate-independent code. No external reference names. + // No isolate => isolate-independent code. Only V8 External references + // available. return DecodeIt(nullptr, nullptr, os, code, v8NameConverter, begin, end, current_pc); } diff --git a/deps/v8/src/diagnostics/eh-frame.cc b/deps/v8/src/diagnostics/eh-frame.cc index ccafd23cb7..0c85ae3ca4 100644 --- a/deps/v8/src/diagnostics/eh-frame.cc +++ b/deps/v8/src/diagnostics/eh-frame.cc @@ -55,7 +55,7 @@ STATIC_CONST_MEMBER_DEFINITION const int EhFrameConstants::kEhFrameHdrSize; STATIC_CONST_MEMBER_DEFINITION const uint32_t EhFrameWriter::kInt32Placeholder; // static -void EhFrameWriter::WriteEmptyEhFrame(std::ostream& stream) { // NOLINT +void EhFrameWriter::WriteEmptyEhFrame(std::ostream& stream) { stream.put(EhFrameConstants::kEhFrameHdrVersion); // .eh_frame pointer encoding specifier. @@ -480,7 +480,7 @@ class V8_NODISCARD StreamModifiersScope final { } // namespace // static -void EhFrameDisassembler::DumpDwarfDirectives(std::ostream& stream, // NOLINT +void EhFrameDisassembler::DumpDwarfDirectives(std::ostream& stream, const byte* start, const byte* end) { StreamModifiersScope modifiers_scope(&stream); @@ -592,7 +592,7 @@ void EhFrameDisassembler::DumpDwarfDirectives(std::ostream& stream, // NOLINT } } -void EhFrameDisassembler::DisassembleToStream(std::ostream& stream) { // NOLINT +void EhFrameDisassembler::DisassembleToStream(std::ostream& stream) { // The encoded CIE size does not include the size field itself. const int cie_size = base::ReadUnalignedValue<uint32_t>(reinterpret_cast<Address>(start_)) + diff --git a/deps/v8/src/diagnostics/eh-frame.h b/deps/v8/src/diagnostics/eh-frame.h index 9a22a97d58..0d32085b0b 100644 --- a/deps/v8/src/diagnostics/eh-frame.h +++ b/deps/v8/src/diagnostics/eh-frame.h @@ -80,7 +80,7 @@ class V8_EXPORT_PRIVATE EhFrameWriter { // // It is effectively a valid eh_frame_hdr with an empty look up table. // - static void WriteEmptyEhFrame(std::ostream& stream); // NOLINT + static void WriteEmptyEhFrame(std::ostream& stream); // Write the CIE and FDE header. Call it before any other method. void Initialize(); @@ -293,11 +293,11 @@ class EhFrameDisassembler final { EhFrameDisassembler(const EhFrameDisassembler&) = delete; EhFrameDisassembler& operator=(const EhFrameDisassembler&) = delete; - void DisassembleToStream(std::ostream& stream); // NOLINT + void DisassembleToStream(std::ostream& stream); private: - static void DumpDwarfDirectives(std::ostream& stream, // NOLINT - const byte* start, const byte* end); + static void DumpDwarfDirectives(std::ostream& stream, const byte* start, + const byte* end); static const char* DwarfRegisterCodeToString(int code); diff --git a/deps/v8/src/diagnostics/ia32/disasm-ia32.cc b/deps/v8/src/diagnostics/ia32/disasm-ia32.cc index ae4cc02459..687a214cab 100644 --- a/deps/v8/src/diagnostics/ia32/disasm-ia32.cc +++ b/deps/v8/src/diagnostics/ia32/disasm-ia32.cc @@ -368,7 +368,7 @@ class DisassemblerIA32 { Disassembler::kAbortOnUnimplementedOpcode) { FATAL("Unimplemented instruction in disassembler"); } else { - AppendToBuffer("'Unimplemented Instruction'"); + AppendToBuffer("'Unimplemented instruction'"); } } }; @@ -2076,6 +2076,7 @@ int DisassemblerIA32::InstructionDecode(v8::internal::Vector<char> out_buffer, data += 3; } else { UnimplementedInstruction(); + data += 1; } } break; @@ -2889,7 +2890,7 @@ int DisassemblerIA32::InstructionDecode(v8::internal::Vector<char> out_buffer, outp += v8::internal::SNPrintF(out_buffer + outp, " %s", tmp_buffer_.begin()); return instr_len; -} // NOLINT (function is too long) +} //------------------------------------------------------------------------------ diff --git a/deps/v8/src/diagnostics/objects-debug.cc b/deps/v8/src/diagnostics/objects-debug.cc index b48df9385a..6cfd8b3ad0 100644 --- a/deps/v8/src/diagnostics/objects-debug.cc +++ b/deps/v8/src/diagnostics/objects-debug.cc @@ -61,6 +61,7 @@ #include "src/objects/js-weak-refs-inl.h" #include "src/objects/literal-objects-inl.h" #include "src/objects/maybe-object.h" +#include "src/objects/megadom-handler-inl.h" #include "src/objects/microtask-inl.h" #include "src/objects/module-inl.h" #include "src/objects/oddball-inl.h" @@ -115,7 +116,7 @@ namespace internal { } void Object::ObjectVerify(Isolate* isolate) { - RuntimeCallTimerScope timer(isolate, RuntimeCallCounterId::kObjectVerify); + RCS_SCOPE(isolate, RuntimeCallCounterId::kObjectVerify); if (IsSmi()) { Smi::cast(*this).SmiVerify(isolate); } else { @@ -137,7 +138,7 @@ void MaybeObject::VerifyMaybeObjectPointer(Isolate* isolate, MaybeObject p) { if (p->GetHeapObject(&heap_object)) { HeapObject::VerifyHeapPointer(isolate, heap_object); } else { - CHECK(p->IsSmi() || p->IsCleared()); + CHECK(p->IsSmi() || p->IsCleared() || MapWord::IsPacked(p->ptr())); } } @@ -457,7 +458,11 @@ void Map::MapVerify(Isolate* isolate) { (kTaggedSize <= instance_size() && static_cast<size_t>(instance_size()) < heap->Capacity())); if (IsContextMap()) { - CHECK(native_context().IsNativeContext()); + // The map for the NativeContext is allocated before the NativeContext + // itself, so it may happen that during a GC the native_context() is still + // null. + CHECK(native_context_or_null().IsNull() || + native_context().IsNativeContext()); } else { if (GetBackPointer().IsUndefined(isolate)) { // Root maps must not have descriptors in the descriptor array that do not @@ -675,7 +680,7 @@ void SloppyArgumentsElementsVerify(Isolate* isolate, for (int i = 0; i < nofMappedParameters; i++) { // Verify that each context-mapped argument is either the hole or a valid // Smi within context length range. - Object mapped = elements.mapped_entries(i); + Object mapped = elements.mapped_entries(i, kRelaxedLoad); if (mapped.IsTheHole(isolate)) { // Slow sloppy arguments can be holey. if (!is_fast) continue; @@ -828,7 +833,6 @@ void JSFunction::JSFunctionVerify(Isolate* isolate) { void SharedFunctionInfo::SharedFunctionInfoVerify(Isolate* isolate) { // TODO(leszeks): Add a TorqueGeneratedClassVerifier for LocalIsolate. - TorqueGeneratedClassVerifiers::SharedFunctionInfoVerify(*this, isolate); this->SharedFunctionInfoVerify(ReadOnlyRoots(isolate)); } @@ -1433,7 +1437,7 @@ void JSArrayBufferView::JSArrayBufferViewVerify(Isolate* isolate) { void JSTypedArray::JSTypedArrayVerify(Isolate* isolate) { TorqueGeneratedClassVerifiers::JSTypedArrayVerify(*this, isolate); - CHECK_LE(length(), JSTypedArray::kMaxLength); + CHECK_LE(GetLength(), JSTypedArray::kMaxLength); } void JSDataView::JSDataViewVerify(Isolate* isolate) { @@ -1685,7 +1689,13 @@ void AllocationSite::AllocationSiteVerify(Isolate* isolate) { void Script::ScriptVerify(Isolate* isolate) { TorqueGeneratedClassVerifiers::ScriptVerify(*this, isolate); - for (int i = 0; i < shared_function_infos().length(); ++i) { + if V8_UNLIKELY (type() == Script::TYPE_WEB_SNAPSHOT) { + CHECK_LE(shared_function_info_count(), shared_function_infos().length()); + } else { + // No overallocating shared_function_infos. + CHECK_EQ(shared_function_info_count(), shared_function_infos().length()); + } + for (int i = 0; i < shared_function_info_count(); ++i) { MaybeObject maybe_object = shared_function_infos().Get(i); HeapObject heap_object; CHECK(maybe_object->IsWeak() || maybe_object->IsCleared() || @@ -1736,6 +1746,12 @@ void StackFrameInfo::StackFrameInfoVerify(Isolate* isolate) { #endif // V8_ENABLE_WEBASSEMBLY } +void FunctionTemplateRareData::FunctionTemplateRareDataVerify( + Isolate* isolate) { + CHECK(c_function_overloads().IsFixedArray() || + c_function_overloads().IsUndefined(isolate)); +} + #endif // VERIFY_HEAP #ifdef DEBUG @@ -1795,6 +1811,7 @@ void JSObject::IncrementSpillStatistics(Isolate* isolate, #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype) case TYPE##_ELEMENTS: TYPED_ARRAYS(TYPED_ARRAY_CASE) + RAB_GSAB_TYPED_ARRAYS(TYPED_ARRAY_CASE) #undef TYPED_ARRAY_CASE { info->number_of_objects_with_fast_elements_++; diff --git a/deps/v8/src/diagnostics/objects-printer.cc b/deps/v8/src/diagnostics/objects-printer.cc index aa1713e3b3..2c416513a9 100644 --- a/deps/v8/src/diagnostics/objects-printer.cc +++ b/deps/v8/src/diagnostics/objects-printer.cc @@ -42,7 +42,7 @@ void Object::Print() const { os << std::flush; } -void Object::Print(std::ostream& os) const { // NOLINT +void Object::Print(std::ostream& os) const { if (IsSmi()) { os << "Smi: " << std::hex << "0x" << Smi::ToInt(*this); os << std::dec << " (" << Smi::ToInt(*this) << ")\n"; @@ -54,7 +54,7 @@ void Object::Print(std::ostream& os) const { // NOLINT namespace { void PrintHeapObjectHeaderWithoutMap(HeapObject object, std::ostream& os, - const char* id) { // NOLINT + const char* id) { os << reinterpret_cast<void*>(object.ptr()) << ": ["; if (id != nullptr) { os << id; @@ -96,12 +96,12 @@ void PrintDictionaryContents(std::ostream& os, T dict) { } } // namespace -void HeapObject::PrintHeader(std::ostream& os, const char* id) { // NOLINT +void HeapObject::PrintHeader(std::ostream& os, const char* id) { PrintHeapObjectHeaderWithoutMap(*this, os, id); if (!IsMap()) os << "\n - map: " << Brief(map()); } -void HeapObject::HeapObjectPrint(std::ostream& os) { // NOLINT +void HeapObject::HeapObjectPrint(std::ostream& os) { InstanceType instance_type = map().instance_type(); if (instance_type < FIRST_NONSTRING_TYPE) { @@ -261,24 +261,24 @@ void HeapObject::HeapObjectPrint(std::ostream& os) { // NOLINT } } -void ByteArray::ByteArrayPrint(std::ostream& os) { // NOLINT +void ByteArray::ByteArrayPrint(std::ostream& os) { PrintHeader(os, "ByteArray"); os << "\n - length: " << length() << "\n - data-start: " << static_cast<void*>(GetDataStartAddress()) << "\n"; } -void BytecodeArray::BytecodeArrayPrint(std::ostream& os) { // NOLINT +void BytecodeArray::BytecodeArrayPrint(std::ostream& os) { PrintHeader(os, "BytecodeArray"); os << "\n"; Disassemble(os); } -void FreeSpace::FreeSpacePrint(std::ostream& os) { // NOLINT +void FreeSpace::FreeSpacePrint(std::ostream& os) { os << "free space, size " << Size() << "\n"; } -bool JSObject::PrintProperties(std::ostream& os) { // NOLINT +bool JSObject::PrintProperties(std::ostream& os) { if (HasFastProperties()) { DescriptorArray descs = map().instance_descriptors(GetIsolate()); int nof_inobject_properties = map().GetInObjectProperties(); @@ -344,7 +344,7 @@ double GetScalarElement(T array, int index) { } template <class T> -void DoPrintElements(std::ostream& os, Object object, int length) { // NOLINT +void DoPrintElements(std::ostream& os, Object object, int length) { const bool print_the_hole = std::is_same<T, FixedDoubleArray>::value; T array = T::cast(object); if (length == 0) return; @@ -448,7 +448,7 @@ void PrintSloppyArgumentElements(std::ostream& os, ElementsKind kind, << "\n 1: arguments_store: " << Brief(arguments_store) << "\n parameter to context slot map:"; for (int i = 0; i < elements.length(); i++) { - Object mapped_entry = elements.mapped_entries(i); + Object mapped_entry = elements.mapped_entries(i, kRelaxedLoad); os << "\n " << i << ": param(" << i << "): " << Brief(mapped_entry); if (mapped_entry.IsTheHole()) { os << " in the arguments_store[" << i << "]"; @@ -468,20 +468,20 @@ void PrintSloppyArgumentElements(std::ostream& os, ElementsKind kind, } } -void PrintEmbedderData(PtrComprCageBase cage_base, std::ostream& os, +void PrintEmbedderData(Isolate* isolate, std::ostream& os, EmbedderDataSlot slot) { DisallowGarbageCollection no_gc; Object value = slot.load_tagged(); os << Brief(value); void* raw_pointer; - if (slot.ToAlignedPointer(cage_base, &raw_pointer)) { + if (slot.ToAlignedPointer(isolate, &raw_pointer)) { os << ", aligned pointer: " << raw_pointer; } } } // namespace -void JSObject::PrintElements(std::ostream& os) { // NOLINT +void JSObject::PrintElements(std::ostream& os) { // Don't call GetElementsKind, its validation code can cause the printer to // fail when debugging. os << " - elements: " << Brief(elements()) << " {"; @@ -508,7 +508,7 @@ void JSObject::PrintElements(std::ostream& os) { // NOLINT #define PRINT_ELEMENTS(Type, type, TYPE, elementType) \ case TYPE##_ELEMENTS: { \ - size_t length = JSTypedArray::cast(*this).length(); \ + size_t length = JSTypedArray::cast(*this).GetLength(); \ bool is_on_heap = JSTypedArray::cast(*this).is_on_heap(); \ const elementType* data_ptr = \ static_cast<const elementType*>(JSTypedArray::cast(*this).DataPtr()); \ @@ -516,6 +516,7 @@ void JSObject::PrintElements(std::ostream& os) { // NOLINT break; \ } TYPED_ARRAYS(PRINT_ELEMENTS) + RAB_GSAB_TYPED_ARRAYS(PRINT_ELEMENTS) #undef PRINT_ELEMENTS case DICTIONARY_ELEMENTS: @@ -534,7 +535,7 @@ void JSObject::PrintElements(std::ostream& os) { // NOLINT } static void JSObjectPrintHeader(std::ostream& os, JSObject obj, - const char* id) { // NOLINT + const char* id) { Isolate* isolate = obj.GetIsolate(); obj.PrintHeader(os, id); // Don't call GetElementsKind, its validation code can cause the printer to @@ -560,8 +561,7 @@ static void JSObjectPrintHeader(std::ostream& os, JSObject obj, } } -static void JSObjectPrintBody(std::ostream& os, - JSObject obj, // NOLINT +static void JSObjectPrintBody(std::ostream& os, JSObject obj, bool print_elements = true) { os << "\n - properties: "; Object properties_or_hash = obj.raw_properties_or_hash(); @@ -573,28 +573,28 @@ static void JSObjectPrintBody(std::ostream& os, os << "}\n"; if (print_elements) { - size_t length = obj.IsJSTypedArray() ? JSTypedArray::cast(obj).length() + size_t length = obj.IsJSTypedArray() ? JSTypedArray::cast(obj).GetLength() : obj.elements().length(); if (length > 0) obj.PrintElements(os); } int embedder_fields = obj.GetEmbedderFieldCount(); if (embedder_fields > 0) { - PtrComprCageBase cage_base = GetPtrComprCageBase(obj); + Isolate* isolate = GetIsolateForHeapSandbox(obj); os << " - embedder fields = {"; for (int i = 0; i < embedder_fields; i++) { os << "\n "; - PrintEmbedderData(cage_base, os, EmbedderDataSlot(obj, i)); + PrintEmbedderData(isolate, os, EmbedderDataSlot(obj, i)); } os << "\n }\n"; } } -void JSObject::JSObjectPrint(std::ostream& os) { // NOLINT +void JSObject::JSObjectPrint(std::ostream& os) { JSObjectPrintHeader(os, *this, nullptr); JSObjectPrintBody(os, *this); } -void JSGeneratorObject::JSGeneratorObjectPrint(std::ostream& os) { // NOLINT +void JSGeneratorObject::JSGeneratorObjectPrint(std::ostream& os) { JSObjectPrintHeader(os, *this, "JSGeneratorObject"); os << "\n - function: " << Brief(function()); os << "\n - context: " << Brief(context()); @@ -654,13 +654,13 @@ void JSGeneratorObject::JSGeneratorObjectPrint(std::ostream& os) { // NOLINT JSObjectPrintBody(os, *this); } -void JSArray::JSArrayPrint(std::ostream& os) { // NOLINT +void JSArray::JSArrayPrint(std::ostream& os) { JSObjectPrintHeader(os, *this, "JSArray"); os << "\n - length: " << Brief(this->length()); JSObjectPrintBody(os, *this); } -void JSPromise::JSPromisePrint(std::ostream& os) { // NOLINT +void JSPromise::JSPromisePrint(std::ostream& os) { JSObjectPrintHeader(os, *this, "JSPromise"); os << "\n - status: " << JSPromise::Status(status()); if (status() == Promise::kPending) { @@ -673,15 +673,14 @@ void JSPromise::JSPromisePrint(std::ostream& os) { // NOLINT JSObjectPrintBody(os, *this); } -void JSRegExp::JSRegExpPrint(std::ostream& os) { // NOLINT +void JSRegExp::JSRegExpPrint(std::ostream& os) { JSObjectPrintHeader(os, *this, "JSRegExp"); os << "\n - data: " << Brief(data()); os << "\n - source: " << Brief(source()); JSObjectPrintBody(os, *this); } -void JSRegExpStringIterator::JSRegExpStringIteratorPrint( - std::ostream& os) { // NOLINT +void JSRegExpStringIterator::JSRegExpStringIteratorPrint(std::ostream& os) { JSObjectPrintHeader(os, *this, "JSRegExpStringIterator"); os << "\n - regex: " << Brief(iterating_reg_exp()); os << "\n - string: " << Brief(iterated_string()); @@ -691,7 +690,7 @@ void JSRegExpStringIterator::JSRegExpStringIteratorPrint( JSObjectPrintBody(os, *this); } -void Symbol::SymbolPrint(std::ostream& os) { // NOLINT +void Symbol::SymbolPrint(std::ostream& os) { PrintHeader(os, "Symbol"); os << "\n - hash: " << hash(); os << "\n - description: " << Brief(description()); @@ -762,14 +761,14 @@ void ObjectBoilerplateDescription::ObjectBoilerplateDescriptionPrint( } void EmbedderDataArray::EmbedderDataArrayPrint(std::ostream& os) { - PtrComprCageBase cage_base = GetPtrComprCageBase(*this); + Isolate* isolate = GetIsolateForHeapSandbox(*this); PrintHeader(os, "EmbedderDataArray"); os << "\n - length: " << length(); EmbedderDataSlot start(*this, 0); EmbedderDataSlot end(*this, length()); for (EmbedderDataSlot slot = start; slot < end; ++slot) { os << "\n "; - PrintEmbedderData(cage_base, os, slot); + PrintEmbedderData(isolate, os, slot); } os << "\n"; } @@ -779,6 +778,34 @@ void FixedArray::FixedArrayPrint(std::ostream& os) { } namespace { +const char* SideEffectType2String(SideEffectType type) { + switch (type) { + case SideEffectType::kHasSideEffect: + return "kHasSideEffect"; + case SideEffectType::kHasNoSideEffect: + return "kHasNoSideEffect"; + case SideEffectType::kHasSideEffectToReceiver: + return "kHasSideEffectToReceiver"; + } +} +} // namespace + +void AccessorInfo::AccessorInfoPrint(std::ostream& os) { + TorqueGeneratedAccessorInfo<AccessorInfo, Struct>::AccessorInfoPrint(os); + os << " - all_can_read: " << all_can_read(); + os << "\n - all_can_write: " << all_can_write(); + os << "\n - is_special_data_property: " << is_special_data_property(); + os << "\n - is_sloppy: " << is_sloppy(); + os << "\n - replace_on_access: " << replace_on_access(); + os << "\n - getter_side_effect_type: " + << SideEffectType2String(getter_side_effect_type()); + os << "\n - setter_side_effect_type: " + << SideEffectType2String(setter_side_effect_type()); + os << "\n - initial_attributes: " << initial_property_attributes(); + os << '\n'; +} + +namespace { void PrintContextWithHeader(std::ostream& os, Context context, const char* type) { context.PrintHeader(os, type); @@ -1021,7 +1048,7 @@ void SwissNameDictionary::SwissNameDictionaryPrint(std::ostream& os) { os.flags(sav_flags); } -void PropertyArray::PropertyArrayPrint(std::ostream& os) { // NOLINT +void PropertyArray::PropertyArrayPrint(std::ostream& os) { PrintHeader(os, "PropertyArray"); os << "\n - length: " << length(); os << "\n - hash: " << Hash(); @@ -1029,7 +1056,7 @@ void PropertyArray::PropertyArrayPrint(std::ostream& os) { // NOLINT os << "\n"; } -void FixedDoubleArray::FixedDoubleArrayPrint(std::ostream& os) { // NOLINT +void FixedDoubleArray::FixedDoubleArrayPrint(std::ostream& os) { PrintHeader(os, "FixedDoubleArray"); os << "\n - length: " << length(); DoPrintElements<FixedDoubleArray>(os, *this, length()); @@ -1051,12 +1078,12 @@ void WeakArrayList::WeakArrayListPrint(std::ostream& os) { os << "\n"; } -void TransitionArray::TransitionArrayPrint(std::ostream& os) { // NOLINT +void TransitionArray::TransitionArrayPrint(std::ostream& os) { PrintHeader(os, "TransitionArray"); PrintInternal(os); } -void FeedbackCell::FeedbackCellPrint(std::ostream& os) { // NOLINT +void FeedbackCell::FeedbackCellPrint(std::ostream& os) { PrintHeader(os, "FeedbackCell"); ReadOnlyRoots roots = GetReadOnlyRoots(); if (map() == roots.no_closures_cell_map()) { @@ -1081,7 +1108,7 @@ void FeedbackVectorSpec::Print() { os << std::flush; } -void FeedbackVectorSpec::FeedbackVectorSpecPrint(std::ostream& os) { // NOLINT +void FeedbackVectorSpec::FeedbackVectorSpecPrint(std::ostream& os) { os << " - slot_count: " << slot_count(); if (slot_count() == 0) { os << " (empty)\n"; @@ -1116,7 +1143,7 @@ void ClosureFeedbackCellArray::ClosureFeedbackCellArrayPrint(std::ostream& os) { PrintFixedArrayWithHeader(os, *this, "ClosureFeedbackCellArray"); } -void FeedbackVector::FeedbackVectorPrint(std::ostream& os) { // NOLINT +void FeedbackVector::FeedbackVectorPrint(std::ostream& os) { PrintHeader(os, "FeedbackVector"); os << "\n - length: " << length(); if (length() == 0) { @@ -1157,13 +1184,12 @@ void FeedbackVector::FeedbackVectorPrint(std::ostream& os) { // NOLINT os << "\n"; } -void FeedbackVector::FeedbackSlotPrint(std::ostream& os, - FeedbackSlot slot) { // NOLINT +void FeedbackVector::FeedbackSlotPrint(std::ostream& os, FeedbackSlot slot) { FeedbackNexus nexus(*this, slot); nexus.Print(os); } -void FeedbackNexus::Print(std::ostream& os) { // NOLINT +void FeedbackNexus::Print(std::ostream& os) { switch (kind()) { case FeedbackSlotKind::kCall: case FeedbackSlotKind::kCloneObject: @@ -1206,7 +1232,7 @@ void FeedbackNexus::Print(std::ostream& os) { // NOLINT } } -void Oddball::OddballPrint(std::ostream& os) { // NOLINT +void Oddball::OddballPrint(std::ostream& os) { PrintHeapObjectHeaderWithoutMap(*this, os, "Oddball"); os << ": "; String s = to_string(); @@ -1216,42 +1242,39 @@ void Oddball::OddballPrint(std::ostream& os) { // NOLINT os << std::endl; } -void JSAsyncFunctionObject::JSAsyncFunctionObjectPrint( - std::ostream& os) { // NOLINT +void JSAsyncFunctionObject::JSAsyncFunctionObjectPrint(std::ostream& os) { JSGeneratorObjectPrint(os); } -void JSAsyncGeneratorObject::JSAsyncGeneratorObjectPrint( - std::ostream& os) { // NOLINT +void JSAsyncGeneratorObject::JSAsyncGeneratorObjectPrint(std::ostream& os) { JSGeneratorObjectPrint(os); } -void JSArgumentsObject::JSArgumentsObjectPrint(std::ostream& os) { // NOLINT +void JSArgumentsObject::JSArgumentsObjectPrint(std::ostream& os) { JSObjectPrint(os); } -void JSStringIterator::JSStringIteratorPrint(std::ostream& os) { // NOLINT +void JSStringIterator::JSStringIteratorPrint(std::ostream& os) { JSObjectPrintHeader(os, *this, "JSStringIterator"); os << "\n - string: " << Brief(string()); os << "\n - index: " << index(); JSObjectPrintBody(os, *this); } -void JSAsyncFromSyncIterator::JSAsyncFromSyncIteratorPrint( - std::ostream& os) { // NOLINT +void JSAsyncFromSyncIterator::JSAsyncFromSyncIteratorPrint(std::ostream& os) { JSObjectPrintHeader(os, *this, "JSAsyncFromSyncIterator"); os << "\n - sync_iterator: " << Brief(sync_iterator()); os << "\n - next: " << Brief(next()); JSObjectPrintBody(os, *this); } -void JSPrimitiveWrapper::JSPrimitiveWrapperPrint(std::ostream& os) { // NOLINT +void JSPrimitiveWrapper::JSPrimitiveWrapperPrint(std::ostream& os) { JSObjectPrintHeader(os, *this, "JSPrimitiveWrapper"); os << "\n - value: " << Brief(value()); JSObjectPrintBody(os, *this); } -void JSMessageObject::JSMessageObjectPrint(std::ostream& os) { // NOLINT +void JSMessageObject::JSMessageObjectPrint(std::ostream& os) { JSObjectPrintHeader(os, *this, "JSMessageObject"); os << "\n - type: " << static_cast<int>(type()); os << "\n - arguments: " << Brief(argument()); @@ -1262,7 +1285,7 @@ void JSMessageObject::JSMessageObjectPrint(std::ostream& os) { // NOLINT JSObjectPrintBody(os, *this); } -void String::StringPrint(std::ostream& os) { // NOLINT +void String::StringPrint(std::ostream& os) { PrintHeapObjectHeaderWithoutMap(*this, os, "String"); os << ": "; os << PrefixForDebugPrint(); @@ -1270,7 +1293,7 @@ void String::StringPrint(std::ostream& os) { // NOLINT os << SuffixForDebugPrint(); } -void Name::NamePrint(std::ostream& os) { // NOLINT +void Name::NamePrint(std::ostream& os) { if (IsString()) { String::cast(*this).StringPrint(os); } else { @@ -1281,7 +1304,7 @@ void Name::NamePrint(std::ostream& os) { // NOLINT static const char* const weekdays[] = {"???", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; -void JSDate::JSDatePrint(std::ostream& os) { // NOLINT +void JSDate::JSDatePrint(std::ostream& os) { JSObjectPrintHeader(os, *this, "JSDate"); os << "\n - value: " << Brief(value()); if (!year().IsSmi()) { @@ -1302,7 +1325,7 @@ void JSDate::JSDatePrint(std::ostream& os) { // NOLINT JSObjectPrintBody(os, *this); } -void JSProxy::JSProxyPrint(std::ostream& os) { // NOLINT +void JSProxy::JSProxyPrint(std::ostream& os) { PrintHeader(os, "JSProxy"); os << "\n - target: "; target().ShortPrint(os); @@ -1311,31 +1334,31 @@ void JSProxy::JSProxyPrint(std::ostream& os) { // NOLINT os << "\n"; } -void JSSet::JSSetPrint(std::ostream& os) { // NOLINT +void JSSet::JSSetPrint(std::ostream& os) { JSObjectPrintHeader(os, *this, "JSSet"); os << " - table: " << Brief(table()); JSObjectPrintBody(os, *this); } -void JSMap::JSMapPrint(std::ostream& os) { // NOLINT +void JSMap::JSMapPrint(std::ostream& os) { JSObjectPrintHeader(os, *this, "JSMap"); os << " - table: " << Brief(table()); JSObjectPrintBody(os, *this); } -void JSCollectionIterator::JSCollectionIteratorPrint( - std::ostream& os, const char* name) { // NOLINT +void JSCollectionIterator::JSCollectionIteratorPrint(std::ostream& os, + const char* name) { JSObjectPrintHeader(os, *this, name); os << "\n - table: " << Brief(table()); os << "\n - index: " << Brief(index()); JSObjectPrintBody(os, *this); } -void JSSetIterator::JSSetIteratorPrint(std::ostream& os) { // NOLINT +void JSSetIterator::JSSetIteratorPrint(std::ostream& os) { JSCollectionIteratorPrint(os, "JSSetIterator"); } -void JSMapIterator::JSMapIteratorPrint(std::ostream& os) { // NOLINT +void JSMapIterator::JSMapIteratorPrint(std::ostream& os) { JSCollectionIteratorPrint(os, "JSMapIterator"); } @@ -1377,19 +1400,19 @@ void JSFinalizationRegistry::JSFinalizationRegistryPrint(std::ostream& os) { JSObjectPrintBody(os, *this); } -void JSWeakMap::JSWeakMapPrint(std::ostream& os) { // NOLINT +void JSWeakMap::JSWeakMapPrint(std::ostream& os) { JSObjectPrintHeader(os, *this, "JSWeakMap"); os << "\n - table: " << Brief(table()); JSObjectPrintBody(os, *this); } -void JSWeakSet::JSWeakSetPrint(std::ostream& os) { // NOLINT +void JSWeakSet::JSWeakSetPrint(std::ostream& os) { JSObjectPrintHeader(os, *this, "JSWeakSet"); os << "\n - table: " << Brief(table()); JSObjectPrintBody(os, *this); } -void JSArrayBuffer::JSArrayBufferPrint(std::ostream& os) { // NOLINT +void JSArrayBuffer::JSArrayBufferPrint(std::ostream& os) { JSObjectPrintHeader(os, *this, "JSArrayBuffer"); os << "\n - backing_store: " << backing_store(); os << "\n - byte_length: " << byte_length(); @@ -1397,15 +1420,16 @@ void JSArrayBuffer::JSArrayBufferPrint(std::ostream& os) { // NOLINT if (is_detachable()) os << "\n - detachable"; if (was_detached()) os << "\n - detached"; if (is_shared()) os << "\n - shared"; + if (is_resizable()) os << "\n - resizable"; JSObjectPrintBody(os, *this, !was_detached()); } -void JSTypedArray::JSTypedArrayPrint(std::ostream& os) { // NOLINT +void JSTypedArray::JSTypedArrayPrint(std::ostream& os) { JSObjectPrintHeader(os, *this, "JSTypedArray"); os << "\n - buffer: " << Brief(buffer()); os << "\n - byte_offset: " << byte_offset(); os << "\n - byte_length: " << byte_length(); - os << "\n - length: " << length(); + os << "\n - length: " << GetLength(); os << "\n - data_ptr: " << DataPtr(); Tagged_t base_ptr = static_cast<Tagged_t>(base_pointer().ptr()); os << "\n - base_pointer: " @@ -1417,6 +1441,8 @@ void JSTypedArray::JSTypedArrayPrint(std::ostream& os) { // NOLINT return; } if (WasDetached()) os << "\n - detached"; + if (is_length_tracking()) os << "\n - length-tracking"; + if (is_backed_by_rab()) os << "\n - backed-by-rab"; JSObjectPrintBody(os, *this, !WasDetached()); } @@ -1428,7 +1454,7 @@ void JSArrayIterator::JSArrayIteratorPrint(std::ostream& os) { // NOLING JSObjectPrintBody(os, *this); } -void JSDataView::JSDataViewPrint(std::ostream& os) { // NOLINT +void JSDataView::JSDataViewPrint(std::ostream& os) { JSObjectPrintHeader(os, *this, "JSDataView"); os << "\n - buffer =" << Brief(buffer()); os << "\n - byte_offset: " << byte_offset(); @@ -1441,7 +1467,7 @@ void JSDataView::JSDataViewPrint(std::ostream& os) { // NOLINT JSObjectPrintBody(os, *this, !WasDetached()); } -void JSBoundFunction::JSBoundFunctionPrint(std::ostream& os) { // NOLINT +void JSBoundFunction::JSBoundFunctionPrint(std::ostream& os) { JSObjectPrintHeader(os, *this, "JSBoundFunction"); os << "\n - bound_target_function: " << Brief(bound_target_function()); os << "\n - bound_this: " << Brief(bound_this()); @@ -1449,7 +1475,7 @@ void JSBoundFunction::JSBoundFunctionPrint(std::ostream& os) { // NOLINT JSObjectPrintBody(os, *this); } -void JSFunction::JSFunctionPrint(std::ostream& os) { // NOLINT +void JSFunction::JSFunctionPrint(std::ostream& os) { Isolate* isolate = GetIsolate(); JSObjectPrintHeader(os, *this, "Function"); os << "\n - function prototype: "; @@ -1525,7 +1551,7 @@ void SharedFunctionInfo::PrintSourceCode(std::ostream& os) { } } -void SharedFunctionInfo::SharedFunctionInfoPrint(std::ostream& os) { // NOLINT +void SharedFunctionInfo::SharedFunctionInfoPrint(std::ostream& os) { PrintHeader(os, "SharedFunctionInfo"); os << "\n - name: "; if (HasSharedName()) { @@ -1576,7 +1602,7 @@ void SharedFunctionInfo::SharedFunctionInfoPrint(std::ostream& os) { // NOLINT os << "\n"; } -void JSGlobalProxy::JSGlobalProxyPrint(std::ostream& os) { // NOLINT +void JSGlobalProxy::JSGlobalProxyPrint(std::ostream& os) { JSObjectPrintHeader(os, *this, "JSGlobalProxy"); if (!GetIsolate()->bootstrapper()->IsActive()) { os << "\n - native context: " << Brief(native_context()); @@ -1584,7 +1610,7 @@ void JSGlobalProxy::JSGlobalProxyPrint(std::ostream& os) { // NOLINT JSObjectPrintBody(os, *this); } -void JSGlobalObject::JSGlobalObjectPrint(std::ostream& os) { // NOLINT +void JSGlobalObject::JSGlobalObjectPrint(std::ostream& os) { JSObjectPrintHeader(os, *this, "JSGlobalObject"); if (!GetIsolate()->bootstrapper()->IsActive()) { os << "\n - native context: " << Brief(native_context()); @@ -1593,7 +1619,7 @@ void JSGlobalObject::JSGlobalObjectPrint(std::ostream& os) { // NOLINT JSObjectPrintBody(os, *this); } -void PropertyCell::PropertyCellPrint(std::ostream& os) { // NOLINT +void PropertyCell::PropertyCellPrint(std::ostream& os) { PrintHeader(os, "PropertyCell"); os << "\n - name: "; name().NamePrint(os); @@ -1605,7 +1631,7 @@ void PropertyCell::PropertyCellPrint(std::ostream& os) { // NOLINT os << "\n"; } -void Code::CodePrint(std::ostream& os) { // NOLINT +void Code::CodePrint(std::ostream& os) { PrintHeader(os, "Code"); os << "\n"; #ifdef ENABLE_DISASSEMBLER @@ -1613,26 +1639,26 @@ void Code::CodePrint(std::ostream& os) { // NOLINT #endif } -void CodeDataContainer::CodeDataContainerPrint(std::ostream& os) { // NOLINT +void CodeDataContainer::CodeDataContainerPrint(std::ostream& os) { PrintHeader(os, "CodeDataContainer"); os << "\n - kind_specific_flags: " << kind_specific_flags(); os << "\n"; } -void Foreign::ForeignPrint(std::ostream& os) { // NOLINT +void Foreign::ForeignPrint(std::ostream& os) { PrintHeader(os, "Foreign"); os << "\n - foreign address : " << reinterpret_cast<void*>(foreign_address()); os << "\n"; } -void CallbackTask::CallbackTaskPrint(std::ostream& os) { // NOLINT +void CallbackTask::CallbackTaskPrint(std::ostream& os) { PrintHeader(os, "CallbackTask"); os << "\n - callback: " << Brief(callback()); os << "\n - data: " << Brief(data()); os << "\n"; } -void CallableTask::CallableTaskPrint(std::ostream& os) { // NOLINT +void CallableTask::CallableTaskPrint(std::ostream& os) { PrintHeader(os, "CallableTask"); os << "\n - context: " << Brief(context()); os << "\n - callable: " << Brief(callable()); @@ -1640,7 +1666,7 @@ void CallableTask::CallableTaskPrint(std::ostream& os) { // NOLINT } void PromiseFulfillReactionJobTask::PromiseFulfillReactionJobTaskPrint( - std::ostream& os) { // NOLINT + std::ostream& os) { PrintHeader(os, "PromiseFulfillReactionJobTask"); os << "\n - argument: " << Brief(argument()); os << "\n - context: " << Brief(context()); @@ -1650,7 +1676,7 @@ void PromiseFulfillReactionJobTask::PromiseFulfillReactionJobTaskPrint( } void PromiseRejectReactionJobTask::PromiseRejectReactionJobTaskPrint( - std::ostream& os) { // NOLINT + std::ostream& os) { PrintHeader(os, "PromiseRejectReactionJobTask"); os << "\n - argument: " << Brief(argument()); os << "\n - context: " << Brief(context()); @@ -1660,7 +1686,7 @@ void PromiseRejectReactionJobTask::PromiseRejectReactionJobTaskPrint( } void PromiseResolveThenableJobTask::PromiseResolveThenableJobTaskPrint( - std::ostream& os) { // NOLINT + std::ostream& os) { PrintHeader(os, "PromiseResolveThenableJobTask"); os << "\n - context: " << Brief(context()); os << "\n - promise_to_resolve: " << Brief(promise_to_resolve()); @@ -1669,7 +1695,7 @@ void PromiseResolveThenableJobTask::PromiseResolveThenableJobTaskPrint( os << "\n"; } -void PromiseCapability::PromiseCapabilityPrint(std::ostream& os) { // NOLINT +void PromiseCapability::PromiseCapabilityPrint(std::ostream& os) { PrintHeader(os, "PromiseCapability"); os << "\n - promise: " << Brief(promise()); os << "\n - resolve: " << Brief(resolve()); @@ -1677,7 +1703,7 @@ void PromiseCapability::PromiseCapabilityPrint(std::ostream& os) { // NOLINT os << "\n"; } -void PromiseReaction::PromiseReactionPrint(std::ostream& os) { // NOLINT +void PromiseReaction::PromiseReactionPrint(std::ostream& os) { PrintHeader(os, "PromiseReaction"); os << "\n - next: " << Brief(next()); os << "\n - reject_handler: " << Brief(reject_handler()); @@ -1686,8 +1712,7 @@ void PromiseReaction::PromiseReactionPrint(std::ostream& os) { // NOLINT os << "\n"; } -void AsyncGeneratorRequest::AsyncGeneratorRequestPrint( - std::ostream& os) { // NOLINT +void AsyncGeneratorRequest::AsyncGeneratorRequestPrint(std::ostream& os) { PrintHeader(os, "AsyncGeneratorRequest"); const char* mode = "Invalid!"; switch (resume_mode()) { @@ -1708,7 +1733,7 @@ void AsyncGeneratorRequest::AsyncGeneratorRequestPrint( } void SourceTextModuleInfoEntry::SourceTextModuleInfoEntryPrint( - std::ostream& os) { // NOLINT + std::ostream& os) { PrintHeader(os, "SourceTextModuleInfoEntry"); os << "\n - export_name: " << Brief(export_name()); os << "\n - local_name: " << Brief(local_name()); @@ -1726,7 +1751,7 @@ static void PrintModuleFields(Module module, std::ostream& os) { os << "\n - exception: " << Brief(module.exception()); } -void Module::ModulePrint(std::ostream& os) { // NOLINT +void Module::ModulePrint(std::ostream& os) { if (this->IsSourceTextModule()) { SourceTextModule::cast(*this).SourceTextModulePrint(os); } else if (this->IsSyntheticModule()) { @@ -1736,7 +1761,7 @@ void Module::ModulePrint(std::ostream& os) { // NOLINT } } -void SourceTextModule::SourceTextModulePrint(std::ostream& os) { // NOLINT +void SourceTextModule::SourceTextModulePrint(std::ostream& os) { PrintHeader(os, "SourceTextModule"); PrintModuleFields(*this, os); os << "\n - sfi/code/info: " << Brief(code()); @@ -1744,13 +1769,13 @@ void SourceTextModule::SourceTextModulePrint(std::ostream& os) { // NOLINT os << "\n - script: " << Brief(script); os << "\n - origin: " << Brief(script.GetNameOrSourceURL()); os << "\n - requested_modules: " << Brief(requested_modules()); - os << "\n - import_meta: " << Brief(import_meta()); + os << "\n - import_meta: " << Brief(import_meta(kAcquireLoad)); os << "\n - cycle_root: " << Brief(cycle_root()); os << "\n - async_evaluating_ordinal: " << async_evaluating_ordinal(); os << "\n"; } -void SyntheticModule::SyntheticModulePrint(std::ostream& os) { // NOLINT +void SyntheticModule::SyntheticModulePrint(std::ostream& os) { PrintHeader(os, "SyntheticModule"); PrintModuleFields(*this, os); os << "\n - export_names: " << Brief(export_names()); @@ -1758,13 +1783,13 @@ void SyntheticModule::SyntheticModulePrint(std::ostream& os) { // NOLINT os << "\n"; } -void JSModuleNamespace::JSModuleNamespacePrint(std::ostream& os) { // NOLINT +void JSModuleNamespace::JSModuleNamespacePrint(std::ostream& os) { JSObjectPrintHeader(os, *this, "JSModuleNamespace"); os << "\n - module: " << Brief(module()); JSObjectPrintBody(os, *this); } -void PrototypeInfo::PrototypeInfoPrint(std::ostream& os) { // NOLINT +void PrototypeInfo::PrototypeInfoPrint(std::ostream& os) { PrintHeader(os, "PrototypeInfo"); os << "\n - module namespace: " << Brief(module_namespace()); os << "\n - prototype users: " << Brief(prototype_users()); @@ -1774,7 +1799,7 @@ void PrototypeInfo::PrototypeInfoPrint(std::ostream& os) { // NOLINT os << "\n"; } -void ClassPositions::ClassPositionsPrint(std::ostream& os) { // NOLINT +void ClassPositions::ClassPositionsPrint(std::ostream& os) { PrintHeader(os, "ClassPositions"); os << "\n - start position: " << start(); os << "\n - end position: " << end(); @@ -1782,15 +1807,15 @@ void ClassPositions::ClassPositionsPrint(std::ostream& os) { // NOLINT } void ArrayBoilerplateDescription::ArrayBoilerplateDescriptionPrint( - std::ostream& os) { // NOLINT + std::ostream& os) { PrintHeader(os, "ArrayBoilerplateDescription"); - os << "\n - elements kind: " << elements_kind(); + os << "\n - elements kind: " << ElementsKindToString(elements_kind()); os << "\n - constant elements: " << Brief(constant_elements()); os << "\n"; } void RegExpBoilerplateDescription::RegExpBoilerplateDescriptionPrint( - std::ostream& os) { // NOLINT + std::ostream& os) { PrintHeader(os, "RegExpBoilerplateDescription"); os << "\n - data: " << Brief(data()); os << "\n - source: " << Brief(source()); @@ -1799,7 +1824,7 @@ void RegExpBoilerplateDescription::RegExpBoilerplateDescriptionPrint( } #if V8_ENABLE_WEBASSEMBLY -void AsmWasmData::AsmWasmDataPrint(std::ostream& os) { // NOLINT +void AsmWasmData::AsmWasmDataPrint(std::ostream& os) { PrintHeader(os, "AsmWasmData"); os << "\n - native module: " << Brief(managed_native_module()); os << "\n - export_wrappers: " << Brief(export_wrappers()); @@ -1807,13 +1832,13 @@ void AsmWasmData::AsmWasmDataPrint(std::ostream& os) { // NOLINT os << "\n"; } -void WasmTypeInfo::WasmTypeInfoPrint(std::ostream& os) { // NOLINT +void WasmTypeInfo::WasmTypeInfoPrint(std::ostream& os) { PrintHeader(os, "WasmTypeInfo"); os << "\n - type address: " << reinterpret_cast<void*>(foreign_address()); os << "\n"; } -void WasmStruct::WasmStructPrint(std::ostream& os) { // NOLINT +void WasmStruct::WasmStructPrint(std::ostream& os) { PrintHeader(os, "WasmStruct"); wasm::StructType* struct_type = type(); os << "\n - fields (" << struct_type->field_count() << "):"; @@ -1851,7 +1876,7 @@ void WasmStruct::WasmStructPrint(std::ostream& os) { // NOLINT os << "\n"; } -void WasmArray::WasmArrayPrint(std::ostream& os) { // NOLINT +void WasmArray::WasmArrayPrint(std::ostream& os) { PrintHeader(os, "WasmArray"); wasm::ArrayType* array_type = type(); uint32_t len = length(); @@ -1891,13 +1916,13 @@ void WasmArray::WasmArrayPrint(std::ostream& os) { // NOLINT os << "\n"; } -void WasmExceptionTag::WasmExceptionTagPrint(std::ostream& os) { // NOLINT +void WasmExceptionTag::WasmExceptionTagPrint(std::ostream& os) { PrintHeader(os, "WasmExceptionTag"); os << "\n - index: " << index(); os << "\n"; } -void WasmInstanceObject::WasmInstanceObjectPrint(std::ostream& os) { // NOLINT +void WasmInstanceObject::WasmInstanceObjectPrint(std::ostream& os) { JSObjectPrintHeader(os, *this, "WasmInstanceObject"); os << "\n - module_object: " << Brief(module_object()); os << "\n - exports_object: " << Brief(exports_object()); @@ -1944,24 +1969,35 @@ void WasmInstanceObject::WasmInstanceObjectPrint(std::ostream& os) { // NOLINT os << "\n"; } -void WasmExportedFunctionData::WasmExportedFunctionDataPrint( - std::ostream& os) { // NOLINT +// Never called directly, as WasmFunctionData is an "abstract" class. +void WasmFunctionData::WasmFunctionDataPrint(std::ostream& os) { + os << "\n - target: " << reinterpret_cast<void*>(foreign_address()); + os << "\n - ref: " << Brief(ref()); +} + +void WasmExportedFunctionData::WasmExportedFunctionDataPrint(std::ostream& os) { PrintHeader(os, "WasmExportedFunctionData"); + WasmFunctionDataPrint(os); os << "\n - wrapper_code: " << Brief(wrapper_code()); os << "\n - instance: " << Brief(instance()); - os << "\n - jump_table_offset: " << jump_table_offset(); os << "\n - function_index: " << function_index(); + os << "\n - signature: " << Brief(signature()); + os << "\n - wrapper_budget: " << wrapper_budget(); os << "\n"; } -void WasmJSFunctionData::WasmJSFunctionDataPrint(std::ostream& os) { // NOLINT +void WasmJSFunctionData::WasmJSFunctionDataPrint(std::ostream& os) { PrintHeader(os, "WasmJSFunctionData"); - os << "\n - callable: " << Brief(callable()); + WasmFunctionDataPrint(os); os << "\n - wrapper_code: " << Brief(wrapper_code()); + os << "\n - wasm_to_js_wrapper_code: " << Brief(wasm_to_js_wrapper_code()); + os << "\n - serialized_return_count: " << serialized_return_count(); + os << "\n - serialized_parameter_count: " << serialized_parameter_count(); + os << "\n - serialized signature: " << Brief(serialized_signature()); os << "\n"; } -void WasmModuleObject::WasmModuleObjectPrint(std::ostream& os) { // NOLINT +void WasmModuleObject::WasmModuleObjectPrint(std::ostream& os) { PrintHeader(os, "WasmModuleObject"); os << "\n - module: " << module(); os << "\n - native module: " << native_module(); @@ -1970,7 +2006,7 @@ void WasmModuleObject::WasmModuleObjectPrint(std::ostream& os) { // NOLINT os << "\n"; } -void WasmTableObject::WasmTableObjectPrint(std::ostream& os) { // NOLINT +void WasmTableObject::WasmTableObjectPrint(std::ostream& os) { PrintHeader(os, "WasmTableObject"); os << "\n - elements: " << Brief(elements()); os << "\n - maximum_length: " << Brief(maximum_length()); @@ -1979,7 +2015,7 @@ void WasmTableObject::WasmTableObjectPrint(std::ostream& os) { // NOLINT os << "\n"; } -void WasmGlobalObject::WasmGlobalObjectPrint(std::ostream& os) { // NOLINT +void WasmGlobalObject::WasmGlobalObjectPrint(std::ostream& os) { PrintHeader(os, "WasmGlobalObject"); if (type().is_reference()) { os << "\n - tagged_buffer: " << Brief(tagged_buffer()); @@ -1994,7 +2030,7 @@ void WasmGlobalObject::WasmGlobalObjectPrint(std::ostream& os) { // NOLINT os << "\n"; } -void WasmMemoryObject::WasmMemoryObjectPrint(std::ostream& os) { // NOLINT +void WasmMemoryObject::WasmMemoryObjectPrint(std::ostream& os) { PrintHeader(os, "WasmMemoryObject"); os << "\n - array_buffer: " << Brief(array_buffer()); os << "\n - maximum_pages: " << maximum_pages(); @@ -2002,8 +2038,7 @@ void WasmMemoryObject::WasmMemoryObjectPrint(std::ostream& os) { // NOLINT os << "\n"; } -void WasmExceptionObject::WasmExceptionObjectPrint( - std::ostream& os) { // NOLINT +void WasmExceptionObject::WasmExceptionObjectPrint(std::ostream& os) { PrintHeader(os, "WasmExceptionObject"); os << "\n - serialized_signature: " << Brief(serialized_signature()); os << "\n - exception_tag: " << Brief(exception_tag()); @@ -2024,14 +2059,14 @@ void WasmIndirectFunctionTable::WasmIndirectFunctionTablePrint( os << "\n"; } -void WasmValueObject::WasmValueObjectPrint(std::ostream& os) { // NOLINT +void WasmValueObject::WasmValueObjectPrint(std::ostream& os) { PrintHeader(os, "WasmValueObject"); os << "\n - value: " << Brief(value()); os << "\n"; } #endif // V8_ENABLE_WEBASSEMBLY -void LoadHandler::LoadHandlerPrint(std::ostream& os) { // NOLINT +void LoadHandler::LoadHandlerPrint(std::ostream& os) { PrintHeader(os, "LoadHandler"); // TODO(ishell): implement printing based on handler kind os << "\n - handler: " << Brief(smi_handler()); @@ -2049,7 +2084,7 @@ void LoadHandler::LoadHandlerPrint(std::ostream& os) { // NOLINT os << "\n"; } -void StoreHandler::StoreHandlerPrint(std::ostream& os) { // NOLINT +void StoreHandler::StoreHandlerPrint(std::ostream& os) { PrintHeader(os, "StoreHandler"); // TODO(ishell): implement printing based on handler kind os << "\n - handler: " << Brief(smi_handler()); @@ -2067,14 +2102,14 @@ void StoreHandler::StoreHandlerPrint(std::ostream& os) { // NOLINT os << "\n"; } -void AccessorPair::AccessorPairPrint(std::ostream& os) { // NOLINT +void AccessorPair::AccessorPairPrint(std::ostream& os) { PrintHeader(os, "AccessorPair"); os << "\n - getter: " << Brief(getter()); os << "\n - setter: " << Brief(setter()); os << "\n"; } -void CallHandlerInfo::CallHandlerInfoPrint(std::ostream& os) { // NOLINT +void CallHandlerInfo::CallHandlerInfoPrint(std::ostream& os) { PrintHeader(os, "CallHandlerInfo"); os << "\n - callback: " << Brief(callback()); os << "\n - js_callback: " << Brief(js_callback()); @@ -2084,8 +2119,7 @@ void CallHandlerInfo::CallHandlerInfoPrint(std::ostream& os) { // NOLINT os << "\n"; } -void FunctionTemplateInfo::FunctionTemplateInfoPrint( - std::ostream& os) { // NOLINT +void FunctionTemplateInfo::FunctionTemplateInfoPrint(std::ostream& os) { PrintHeader(os, "FunctionTemplateInfo"); os << "\n - class name: " << Brief(class_name()); os << "\n - tag: " << tag(); @@ -2102,7 +2136,7 @@ void FunctionTemplateInfo::FunctionTemplateInfoPrint( os << "\n"; } -void ObjectTemplateInfo::ObjectTemplateInfoPrint(std::ostream& os) { // NOLINT +void ObjectTemplateInfo::ObjectTemplateInfoPrint(std::ostream& os) { PrintHeader(os, "ObjectTemplateInfo"); os << "\n - tag: " << tag(); os << "\n - serial_number: " << serial_number(); @@ -2114,7 +2148,7 @@ void ObjectTemplateInfo::ObjectTemplateInfoPrint(std::ostream& os) { // NOLINT os << "\n"; } -void AllocationSite::AllocationSitePrint(std::ostream& os) { // NOLINT +void AllocationSite::AllocationSitePrint(std::ostream& os) { PrintHeader(os, "AllocationSite"); if (this->HasWeakNext()) os << "\n - weak_next: " << Brief(weak_next()); os << "\n - dependent code: " << Brief(dependent_code()); @@ -2137,7 +2171,7 @@ void AllocationSite::AllocationSitePrint(std::ostream& os) { // NOLINT os << "\n"; } -void AllocationMemento::AllocationMementoPrint(std::ostream& os) { // NOLINT +void AllocationMemento::AllocationMementoPrint(std::ostream& os) { PrintHeader(os, "AllocationMemento"); os << "\n - allocation site: "; if (IsValid()) { @@ -2147,7 +2181,7 @@ void AllocationMemento::AllocationMementoPrint(std::ostream& os) { // NOLINT } } -void Script::ScriptPrint(std::ostream& os) { // NOLINT +void Script::ScriptPrint(std::ostream& os) { PrintHeader(os, "Script"); os << "\n - source: " << Brief(source()); os << "\n - name: " << Brief(name()); @@ -2170,9 +2204,11 @@ void Script::ScriptPrint(std::ostream& os) { // NOLINT if (!is_wasm) { if (has_eval_from_shared()) { os << "\n - eval from shared: " << Brief(eval_from_shared()); - } - if (is_wrapped()) { + } else if (is_wrapped()) { os << "\n - wrapped arguments: " << Brief(wrapped_arguments()); + } else if (type() == TYPE_WEB_SNAPSHOT) { + os << "\n - shared function info table: " + << Brief(shared_function_info_table()); } os << "\n - eval from position: " << eval_from_position(); } @@ -2181,7 +2217,7 @@ void Script::ScriptPrint(std::ostream& os) { // NOLINT } #ifdef V8_INTL_SUPPORT -void JSV8BreakIterator::JSV8BreakIteratorPrint(std::ostream& os) { // NOLINT +void JSV8BreakIterator::JSV8BreakIteratorPrint(std::ostream& os) { JSObjectPrintHeader(os, *this, "JSV8BreakIterator"); os << "\n - locale: " << Brief(locale()); os << "\n - break iterator: " << Brief(break_iterator()); @@ -2194,14 +2230,14 @@ void JSV8BreakIterator::JSV8BreakIteratorPrint(std::ostream& os) { // NOLINT os << "\n"; } -void JSCollator::JSCollatorPrint(std::ostream& os) { // NOLINT +void JSCollator::JSCollatorPrint(std::ostream& os) { JSObjectPrintHeader(os, *this, "JSCollator"); os << "\n - icu collator: " << Brief(icu_collator()); os << "\n - bound compare: " << Brief(bound_compare()); JSObjectPrintBody(os, *this); } -void JSDateTimeFormat::JSDateTimeFormatPrint(std::ostream& os) { // NOLINT +void JSDateTimeFormat::JSDateTimeFormatPrint(std::ostream& os) { JSObjectPrintHeader(os, *this, "JSDateTimeFormat"); os << "\n - locale: " << Brief(locale()); os << "\n - icu locale: " << Brief(icu_locale()); @@ -2212,7 +2248,7 @@ void JSDateTimeFormat::JSDateTimeFormatPrint(std::ostream& os) { // NOLINT JSObjectPrintBody(os, *this); } -void JSDisplayNames::JSDisplayNamesPrint(std::ostream& os) { // NOLINT +void JSDisplayNames::JSDisplayNamesPrint(std::ostream& os) { JSObjectPrintHeader(os, *this, "JSDisplayNames"); os << "\n - internal: " << Brief(internal()); os << "\n - style: " << StyleAsString(); @@ -2220,7 +2256,7 @@ void JSDisplayNames::JSDisplayNamesPrint(std::ostream& os) { // NOLINT JSObjectPrintBody(os, *this); } -void JSListFormat::JSListFormatPrint(std::ostream& os) { // NOLINT +void JSListFormat::JSListFormatPrint(std::ostream& os) { JSObjectPrintHeader(os, *this, "JSListFormat"); os << "\n - locale: " << Brief(locale()); os << "\n - style: " << StyleAsString(); @@ -2229,13 +2265,13 @@ void JSListFormat::JSListFormatPrint(std::ostream& os) { // NOLINT JSObjectPrintBody(os, *this); } -void JSLocale::JSLocalePrint(std::ostream& os) { // NOLINT +void JSLocale::JSLocalePrint(std::ostream& os) { JSObjectPrintHeader(os, *this, "JSLocale"); os << "\n - icu locale: " << Brief(icu_locale()); JSObjectPrintBody(os, *this); } -void JSNumberFormat::JSNumberFormatPrint(std::ostream& os) { // NOLINT +void JSNumberFormat::JSNumberFormatPrint(std::ostream& os) { JSObjectPrintHeader(os, *this, "JSNumberFormat"); os << "\n - locale: " << Brief(locale()); os << "\n - icu_number_formatter: " << Brief(icu_number_formatter()); @@ -2243,7 +2279,7 @@ void JSNumberFormat::JSNumberFormatPrint(std::ostream& os) { // NOLINT JSObjectPrintBody(os, *this); } -void JSPluralRules::JSPluralRulesPrint(std::ostream& os) { // NOLINT +void JSPluralRules::JSPluralRulesPrint(std::ostream& os) { JSObjectPrintHeader(os, *this, "JSPluralRules"); os << "\n - locale: " << Brief(locale()); os << "\n - type: " << TypeAsString(); @@ -2252,8 +2288,7 @@ void JSPluralRules::JSPluralRulesPrint(std::ostream& os) { // NOLINT JSObjectPrintBody(os, *this); } -void JSRelativeTimeFormat::JSRelativeTimeFormatPrint( - std::ostream& os) { // NOLINT +void JSRelativeTimeFormat::JSRelativeTimeFormatPrint(std::ostream& os) { JSObjectPrintHeader(os, *this, "JSRelativeTimeFormat"); os << "\n - locale: " << Brief(locale()); os << "\n - numberingSystem: " << Brief(numberingSystem()); @@ -2262,14 +2297,14 @@ void JSRelativeTimeFormat::JSRelativeTimeFormatPrint( os << "\n"; } -void JSSegmentIterator::JSSegmentIteratorPrint(std::ostream& os) { // NOLINT +void JSSegmentIterator::JSSegmentIteratorPrint(std::ostream& os) { JSObjectPrintHeader(os, *this, "JSSegmentIterator"); os << "\n - icu break iterator: " << Brief(icu_break_iterator()); os << "\n - granularity: " << GranularityAsString(GetIsolate()); os << "\n"; } -void JSSegmenter::JSSegmenterPrint(std::ostream& os) { // NOLINT +void JSSegmenter::JSSegmenterPrint(std::ostream& os) { JSObjectPrintHeader(os, *this, "JSSegmenter"); os << "\n - locale: " << Brief(locale()); os << "\n - granularity: " << GranularityAsString(GetIsolate()); @@ -2277,7 +2312,7 @@ void JSSegmenter::JSSegmenterPrint(std::ostream& os) { // NOLINT JSObjectPrintBody(os, *this); } -void JSSegments::JSSegmentsPrint(std::ostream& os) { // NOLINT +void JSSegments::JSSegmentsPrint(std::ostream& os) { JSObjectPrintHeader(os, *this, "JSSegments"); os << "\n - icu break iterator: " << Brief(icu_break_iterator()); os << "\n - unicode string: " << Brief(unicode_string()); @@ -2301,7 +2336,7 @@ void PrintScopeInfoList(ScopeInfo scope_info, std::ostream& os, } } // namespace -void ScopeInfo::ScopeInfoPrint(std::ostream& os) { // NOLINT +void ScopeInfo::ScopeInfoPrint(std::ostream& os) { PrintHeader(os, "ScopeInfo"); if (IsEmpty()) { os << "\n - empty\n"; @@ -2357,7 +2392,7 @@ void ScopeInfo::ScopeInfoPrint(std::ostream& os) { // NOLINT os << "\n"; } -void StackFrameInfo::StackFrameInfoPrint(std::ostream& os) { // NOLINT +void StackFrameInfo::StackFrameInfoPrint(std::ostream& os) { PrintHeader(os, "StackFrameInfo"); os << "\n - receiver_or_instance: " << Brief(receiver_or_instance()); os << "\n - function: " << Brief(function()); @@ -2369,7 +2404,7 @@ void StackFrameInfo::StackFrameInfoPrint(std::ostream& os) { // NOLINT os << "\n"; } -void PreparseData::PreparseDataPrint(std::ostream& os) { // NOLINT +void PreparseData::PreparseDataPrint(std::ostream& os) { PrintHeader(os, "PreparseData"); os << "\n - data_length: " << data_length(); os << "\n - children_length: " << children_length(); @@ -2385,7 +2420,7 @@ void PreparseData::PreparseDataPrint(std::ostream& os) { // NOLINT os << "\n"; } -void InterpreterData::InterpreterDataPrint(std::ostream& os) { // NOLINT +void InterpreterData::InterpreterDataPrint(std::ostream& os) { PrintHeader(os, "InterpreterData"); os << "\n - bytecode_array: " << Brief(bytecode_array()); os << "\n - interpreter_trampoline: " << Brief(interpreter_trampoline()); @@ -2480,7 +2515,7 @@ void Map::PrintMapDetails(std::ostream& os) { instance_descriptors().PrintDescriptors(os); } -void Map::MapPrint(std::ostream& os) { // NOLINT +void Map::MapPrint(std::ostream& os) { #ifdef OBJECT_PRINT PrintHeader(os, "Map"); #else @@ -2662,7 +2697,7 @@ void TransitionArray::PrintInternal(std::ostream& os) { os << "\n" << std::flush; } -void TransitionsAccessor::PrintTransitions(std::ostream& os) { // NOLINT +void TransitionsAccessor::PrintTransitions(std::ostream& os) { switch (encoding()) { case kPrototypeInfo: case kUninitialized: @@ -2730,7 +2765,7 @@ void TransitionsAccessor::PrintTransitionTree( } } -void JSObject::PrintTransitions(std::ostream& os) { // NOLINT +void JSObject::PrintTransitions(std::ostream& os) { DisallowGarbageCollection no_gc; TransitionsAccessor ta(GetIsolate(), map(), &no_gc); if (ta.NumberOfTransitions() == 0) return; @@ -2770,6 +2805,22 @@ V8_EXPORT_PRIVATE extern void _v8_internal_Print_Object(void* object) { GetObjectFromRaw(object).Print(); } +V8_EXPORT_PRIVATE extern void _v8_internal_Print_LoadHandler(void* object) { +#ifdef OBJECT_PRINT + i::StdoutStream os; + i::LoadHandler::PrintHandler(GetObjectFromRaw(object), os); + os << std::flush; +#endif +} + +V8_EXPORT_PRIVATE extern void _v8_internal_Print_StoreHandler(void* object) { +#ifdef OBJECT_PRINT + i::StdoutStream os; + i::StoreHandler::PrintHandler(GetObjectFromRaw(object), os); + os << std::flush; +#endif +} + V8_EXPORT_PRIVATE extern void _v8_internal_Print_Code(void* object) { i::Address address = reinterpret_cast<i::Address>(object); i::Isolate* isolate = i::Isolate::Current(); diff --git a/deps/v8/src/diagnostics/perf-jit.cc b/deps/v8/src/diagnostics/perf-jit.cc index dea3340048..e5cc93c1f6 100644 --- a/deps/v8/src/diagnostics/perf-jit.cc +++ b/deps/v8/src/diagnostics/perf-jit.cc @@ -215,7 +215,6 @@ void PerfJitLogger::LogRecordedBuffer( if (FLAG_perf_basic_prof_only_functions && (abstract_code->kind() != CodeKind::INTERPRETED_FUNCTION && abstract_code->kind() != CodeKind::TURBOFAN && - abstract_code->kind() != CodeKind::NATIVE_CONTEXT_INDEPENDENT && abstract_code->kind() != CodeKind::TURBOPROP && abstract_code->kind() != CodeKind::BASELINE)) { return; diff --git a/deps/v8/src/diagnostics/ppc/disasm-ppc.cc b/deps/v8/src/diagnostics/ppc/disasm-ppc.cc index 9757c8901b..724e08cc45 100644 --- a/deps/v8/src/diagnostics/ppc/disasm-ppc.cc +++ b/deps/v8/src/diagnostics/ppc/disasm-ppc.cc @@ -408,6 +408,16 @@ void Decoder::UnknownFormat(Instruction* instr, const char* name) { } void Decoder::DecodeExt0(Instruction* instr) { + // Some encodings have integers hard coded in the middle, handle those first. + switch (EXT0 | (instr->BitField(20, 16)) | (instr->BitField(10, 0))) { +#define DECODE_VX_D_FORM__INSTRUCTIONS(name, opcode_name, opcode_value) \ + case opcode_name: { \ + Format(instr, #name " 'Vt, 'Vb"); \ + return; \ + } + PPC_VX_OPCODE_D_FORM_LIST(DECODE_VX_D_FORM__INSTRUCTIONS) +#undef DECODE_VX_D_FORM__INSTRUCTIONS + } // Some encodings are 5-0 bits, handle those first switch (EXT0 | (instr->BitField(5, 0))) { #define DECODE_VA_A_FORM__INSTRUCTIONS(name, opcode_name, opcode_value) \ @@ -638,6 +648,10 @@ void Decoder::DecodeExt2(Instruction* instr) { Format(instr, "lxvd 'Xt, 'ra, 'rb"); return; } + case LXVX: { + Format(instr, "lxvx 'Xt, 'ra, 'rb"); + return; + } case LXSDX: { Format(instr, "lxsdx 'Xt, 'ra, 'rb"); return; @@ -658,6 +672,10 @@ void Decoder::DecodeExt2(Instruction* instr) { Format(instr, "stxvd 'Xs, 'ra, 'rb"); return; } + case STXVX: { + Format(instr, "stxvx 'Xs, 'ra, 'rb"); + return; + } case STXSDX: { Format(instr, "stxsdx 'Xs, 'ra, 'rb"); return; @@ -1277,12 +1295,6 @@ void Decoder::DecodeExt5(Instruction* instr) { } void Decoder::DecodeExt6(Instruction* instr) { - switch (EXT6 | (instr->BitField(10, 2))) { - case XXBRQ: { - Format(instr, "xxbrq 'Xt, 'Xb"); - return; - } - } switch (EXT6 | (instr->BitField(10, 1))) { case XXSPLTIB: { Format(instr, "xxspltib 'Xt, 'IMM8"); @@ -1298,6 +1310,16 @@ void Decoder::DecodeExt6(Instruction* instr) { PPC_XX3_OPCODE_LIST(DECODE_XX3_INSTRUCTIONS) #undef DECODE_XX3_INSTRUCTIONS } + // Some encodings have integers hard coded in the middle, handle those first. + switch (EXT6 | (instr->BitField(20, 16)) | (instr->BitField(10, 2))) { +#define DECODE_XX2_B_INSTRUCTIONS(name, opcode_name, opcode_value) \ + case opcode_name: { \ + Format(instr, #name " 'Xt, 'Xb"); \ + return; \ + } + PPC_XX2_OPCODE_B_FORM_LIST(DECODE_XX2_B_INSTRUCTIONS) +#undef DECODE_XX2_B_INSTRUCTIONS + } switch (EXT6 | (instr->BitField(10, 2))) { #define DECODE_XX2_A_INSTRUCTIONS(name, opcode_name, opcode_value) \ case opcode_name: { \ @@ -1305,8 +1327,8 @@ void Decoder::DecodeExt6(Instruction* instr) { return; \ } PPC_XX2_OPCODE_A_FORM_LIST(DECODE_XX2_A_INSTRUCTIONS) - } #undef DECODE_XX2_A_INSTRUCTIONS + } Unknown(instr); // not used by V8 } diff --git a/deps/v8/src/diagnostics/riscv64/disasm-riscv64.cc b/deps/v8/src/diagnostics/riscv64/disasm-riscv64.cc index a39261555d..5cbd4b4857 100644 --- a/deps/v8/src/diagnostics/riscv64/disasm-riscv64.cc +++ b/deps/v8/src/diagnostics/riscv64/disasm-riscv64.cc @@ -122,6 +122,8 @@ class Decoder { // Printing of instruction name. void PrintInstructionName(Instruction* instr); + void PrintTarget(Instruction* instr); + // Handle formatting of instructions and their options. int FormatRegister(Instruction* instr, const char* option); int FormatFPURegisterOrRoundMode(Instruction* instr, const char* option); @@ -213,6 +215,21 @@ void Decoder::PrintImm12(Instruction* instr) { out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "%d", imm); } +void Decoder::PrintTarget(Instruction* instr) { + if (Assembler::IsJalr(instr->InstructionBits())) { + if (Assembler::IsAuipc((instr - 4)->InstructionBits()) && + (instr - 4)->RdValue() == instr->Rs1Value()) { + int32_t imm = Assembler::BrachlongOffset((instr - 4)->InstructionBits(), + instr->InstructionBits()); + const char* target = + converter_.NameOfAddress(reinterpret_cast<byte*>(instr - 4) + imm); + out_buffer_pos_ += + SNPrintF(out_buffer_ + out_buffer_pos_, " -> %s", target); + return; + } + } +} + void Decoder::PrintBranchOffset(Instruction* instr) { int32_t imm = instr->BranchOffset(); const char* target = @@ -699,6 +716,11 @@ int Decoder::FormatOption(Instruction* instr, const char* format) { PrintVs1(instr); return 3; } + case 't': { // 'target: target of branch instructions' + DCHECK(STRING_STARTS_WITH(format, "target")); + PrintTarget(instr); + return 6; + } } UNREACHABLE(); } @@ -1280,7 +1302,7 @@ void Decoder::DecodeIType(Instruction* instr) { else if (instr->RdValue() == ra.code() && instr->Imm12Value() == 0) Format(instr, "jalr 'rs1"); else - Format(instr, "jalr 'rd, 'imm12('rs1)"); + Format(instr, "jalr 'rd, 'imm12('rs1)'target"); break; case RO_LB: Format(instr, "lb 'rd, 'imm12('rs1)"); @@ -1835,7 +1857,6 @@ int Disassembler::InstructionDecode(v8::internal::Vector<char> buffer, return d.InstructionDecode(instruction); } -// The RISC-V assembler does not currently use constant pools. int Disassembler::ConstantPoolSizeAt(byte* instruction) { return v8::internal::Assembler::ConstantPoolSizeAt( reinterpret_cast<v8::internal::Instruction*>(instruction)); diff --git a/deps/v8/src/diagnostics/system-jit-metadata-win.h b/deps/v8/src/diagnostics/system-jit-metadata-win.h index 37678c2518..84cf184eda 100644 --- a/deps/v8/src/diagnostics/system-jit-metadata-win.h +++ b/deps/v8/src/diagnostics/system-jit-metadata-win.h @@ -6,6 +6,9 @@ #define V8_DIAGNOSTICS_SYSTEM_JIT_METADATA_WIN_H_ #include <Windows.h> +#ifndef VOID +#define VOID void +#endif #include <TraceLoggingProvider.h> #include <evntprov.h> #include <evntrace.h> // defines TRACE_LEVEL_* and EVENT_TRACE_TYPE_* diff --git a/deps/v8/src/diagnostics/system-jit-win.cc b/deps/v8/src/diagnostics/system-jit-win.cc index 49200219c2..a4c4237c16 100644 --- a/deps/v8/src/diagnostics/system-jit-win.cc +++ b/deps/v8/src/diagnostics/system-jit-win.cc @@ -9,6 +9,10 @@ #include "src/diagnostics/system-jit-metadata-win.h" #include "src/libplatform/tracing/recorder.h" +#if !defined(V8_ENABLE_SYSTEM_INSTRUMENTATION) +#error "This file is only compiled if v8_enable_system_instrumentation" +#endif + #if defined(__clang__) #pragma clang diagnostic ignored "-Wc++98-compat-extra-semi" #endif diff --git a/deps/v8/src/diagnostics/unwinding-info-win64.cc b/deps/v8/src/diagnostics/unwinding-info-win64.cc index 54978eeb74..6127c0a786 100644 --- a/deps/v8/src/diagnostics/unwinding-info-win64.cc +++ b/deps/v8/src/diagnostics/unwinding-info-win64.cc @@ -17,37 +17,6 @@ #error "Unsupported OS" #endif // V8_OS_WIN_X64 -// Forward declaration to keep this independent of Win8 -NTSYSAPI -DWORD -NTAPI -RtlAddGrowableFunctionTable( - _Out_ PVOID* DynamicTable, - _In_reads_(MaximumEntryCount) PRUNTIME_FUNCTION FunctionTable, - _In_ DWORD EntryCount, - _In_ DWORD MaximumEntryCount, - _In_ ULONG_PTR RangeBase, - _In_ ULONG_PTR RangeEnd - ); - - -NTSYSAPI -void -NTAPI -RtlGrowFunctionTable( - _Inout_ PVOID DynamicTable, - _In_ DWORD NewEntryCount - ); - - -NTSYSAPI -void -NTAPI -RtlDeleteGrowableFunctionTable( - _In_ PVOID DynamicTable - ); - - namespace v8 { namespace internal { namespace win64_unwindinfo { @@ -495,24 +464,27 @@ static decltype( &::RtlDeleteGrowableFunctionTable) delete_growable_function_table_func = nullptr; +void LoadNtdllUnwindingFunctionsOnce() { + // Load functions from the ntdll.dll module. + HMODULE ntdll_module = + LoadLibraryEx(L"ntdll.dll", nullptr, LOAD_LIBRARY_SEARCH_SYSTEM32); + DCHECK_NOT_NULL(ntdll_module); + + // This fails on Windows 7. + add_growable_function_table_func = + reinterpret_cast<decltype(&::RtlAddGrowableFunctionTable)>( + ::GetProcAddress(ntdll_module, "RtlAddGrowableFunctionTable")); + DCHECK_IMPLIES(IsWindows8OrGreater(), add_growable_function_table_func); + + delete_growable_function_table_func = + reinterpret_cast<decltype(&::RtlDeleteGrowableFunctionTable)>( + ::GetProcAddress(ntdll_module, "RtlDeleteGrowableFunctionTable")); + DCHECK_IMPLIES(IsWindows8OrGreater(), delete_growable_function_table_func); +} + void LoadNtdllUnwindingFunctions() { - base::CallOnce(&load_ntdll_unwinding_functions_once, []() { - // Load functions from the ntdll.dll module. - HMODULE ntdll_module = - LoadLibraryEx(L"ntdll.dll", nullptr, LOAD_LIBRARY_SEARCH_SYSTEM32); - DCHECK_NOT_NULL(ntdll_module); - - // This fails on Windows 7. - add_growable_function_table_func = - reinterpret_cast<decltype(&::RtlAddGrowableFunctionTable)>( - ::GetProcAddress(ntdll_module, "RtlAddGrowableFunctionTable")); - DCHECK_IMPLIES(IsWindows8OrGreater(), add_growable_function_table_func); - - delete_growable_function_table_func = - reinterpret_cast<decltype(&::RtlDeleteGrowableFunctionTable)>( - ::GetProcAddress(ntdll_module, "RtlDeleteGrowableFunctionTable")); - DCHECK_IMPLIES(IsWindows8OrGreater(), delete_growable_function_table_func); - }); + base::CallOnce(&load_ntdll_unwinding_functions_once, + &LoadNtdllUnwindingFunctionsOnce); } bool AddGrowableFunctionTable(PVOID* DynamicTable, @@ -605,6 +577,11 @@ void UnregisterNonABICompliantCodeRange(void* start) { ExceptionHandlerRecord* record = reinterpret_cast<ExceptionHandlerRecord*>(start); CHECK(::RtlDeleteFunctionTable(record->runtime_function)); + + // Unprotect reserved page. + DWORD old_protect; + CHECK(VirtualProtect(start, sizeof(ExceptionHandlerRecord), + PAGE_READWRITE, &old_protect)); } #endif // V8_OS_WIN_X64 } else { @@ -613,6 +590,11 @@ void UnregisterNonABICompliantCodeRange(void* start) { if (record->dynamic_table) { DeleteGrowableFunctionTable(record->dynamic_table); } + + // Unprotect reserved page. + DWORD old_protect; + CHECK(VirtualProtect(start, sizeof(CodeRangeUnwindingRecord), + PAGE_READWRITE, &old_protect)); } } diff --git a/deps/v8/src/execution/arguments.h b/deps/v8/src/execution/arguments.h index 39877cf4d2..22ce80bb1e 100644 --- a/deps/v8/src/execution/arguments.h +++ b/deps/v8/src/execution/arguments.h @@ -107,29 +107,40 @@ double ClobberDoubleRegisters(double x1, double x2, double x3, double x4); // TODO(cbruni): add global flag to check whether any tracing events have been // enabled. -#define RUNTIME_FUNCTION_RETURNS_TYPE(Type, InternalType, Convert, Name) \ - static V8_INLINE InternalType __RT_impl_##Name(RuntimeArguments args, \ - Isolate* isolate); \ - \ +#ifdef V8_RUNTIME_CALL_STATS +#define RUNTIME_ENTRY_WITH_RCS(Type, InternalType, Convert, Name) \ V8_NOINLINE static Type Stats_##Name(int args_length, Address* args_object, \ Isolate* isolate) { \ - RuntimeCallTimerScope timer(isolate, RuntimeCallCounterId::k##Name); \ + RCS_SCOPE(isolate, RuntimeCallCounterId::k##Name); \ TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.runtime"), \ "V8.Runtime_" #Name); \ RuntimeArguments args(args_length, args_object); \ return Convert(__RT_impl_##Name(args, isolate)); \ - } \ - \ - Type Name(int args_length, Address* args_object, Isolate* isolate) { \ - DCHECK(isolate->context().is_null() || isolate->context().IsContext()); \ - CLOBBER_DOUBLE_REGISTERS(); \ - if (V8_UNLIKELY(TracingFlags::is_runtime_stats_enabled())) { \ - return Stats_##Name(args_length, args_object, isolate); \ - } \ - RuntimeArguments args(args_length, args_object); \ - return Convert(__RT_impl_##Name(args, isolate)); \ - } \ - \ + } + +#define TEST_AND_CALL_RCS(Name) \ + if (V8_UNLIKELY(TracingFlags::is_runtime_stats_enabled())) { \ + return Stats_##Name(args_length, args_object, isolate); \ + } + +#else // V8_RUNTIME_CALL_STATS +#define RUNTIME_ENTRY_WITH_RCS(Type, InternalType, Convert, Name) +#define TEST_AND_CALL_RCS(Name) + +#endif // V8_RUNTIME_CALL_STATS + +#define RUNTIME_FUNCTION_RETURNS_TYPE(Type, InternalType, Convert, Name) \ + static V8_INLINE InternalType __RT_impl_##Name(RuntimeArguments args, \ + Isolate* isolate); \ + RUNTIME_ENTRY_WITH_RCS(Type, InternalType, Convert, Name) \ + Type Name(int args_length, Address* args_object, Isolate* isolate) { \ + DCHECK(isolate->context().is_null() || isolate->context().IsContext()); \ + CLOBBER_DOUBLE_REGISTERS(); \ + TEST_AND_CALL_RCS(Name) \ + RuntimeArguments args(args_length, args_object); \ + return Convert(__RT_impl_##Name(args, isolate)); \ + } \ + \ static InternalType __RT_impl_##Name(RuntimeArguments args, Isolate* isolate) #define CONVERT_OBJECT(x) (x).ptr() diff --git a/deps/v8/src/execution/arm/simulator-arm.cc b/deps/v8/src/execution/arm/simulator-arm.cc index ee4e9af462..ca7d709fbb 100644 --- a/deps/v8/src/execution/arm/simulator-arm.cc +++ b/deps/v8/src/execution/arm/simulator-arm.cc @@ -42,7 +42,7 @@ DEFINE_LAZY_LEAKY_OBJECT_GETTER(Simulator::GlobalMonitor, // SScanF not being implemented in a platform independent way through // ::v8::internal::OS in the same way as SNPrintF is that the // Windows C Run-Time Library does not provide vsscanf. -#define SScanF sscanf // NOLINT +#define SScanF sscanf // The ArmDebugger class is used by the simulator while debugging simulated ARM // code. @@ -50,6 +50,7 @@ class ArmDebugger { public: explicit ArmDebugger(Simulator* sim) : sim_(sim) {} void Debug(); + bool ExecDebugCommand(ArrayUniquePtr<char> line_ptr); private: static const Instr kBreakpointInstr = @@ -191,6 +192,31 @@ void ArmDebugger::Debug() { intptr_t last_pc = -1; bool done = false; + // Unset breakpoint while running in the debugger shell, making it invisible + // to all commands. + UndoBreakpoint(); + + while (!done && !sim_->has_bad_pc()) { + if (last_pc != sim_->get_pc()) { + disasm::NameConverter converter; + disasm::Disassembler dasm(converter); + // use a reasonably large buffer + v8::internal::EmbeddedVector<char, 256> buffer; + dasm.InstructionDecode(buffer, reinterpret_cast<byte*>(sim_->get_pc())); + PrintF(" 0x%08x %s\n", sim_->get_pc(), buffer.begin()); + last_pc = sim_->get_pc(); + } + ArrayUniquePtr<char> line(ReadLine("sim> ")); + + done = ExecDebugCommand(std::move(line)); + } + + // Reinstall breakpoint to stop execution and enter the debugger shell when + // hit. + RedoBreakpoint(); +} + +bool ArmDebugger::ExecDebugCommand(ArrayUniquePtr<char> line_ptr) { #define COMMAND_SIZE 63 #define ARG_SIZE 255 @@ -207,352 +233,357 @@ void ArmDebugger::Debug() { arg1[ARG_SIZE] = 0; arg2[ARG_SIZE] = 0; - // Unset breakpoint while running in the debugger shell, making it invisible - // to all commands. - UndoBreakpoint(); + if (line_ptr == nullptr) return true; - while (!done && !sim_->has_bad_pc()) { - if (last_pc != sim_->get_pc()) { - disasm::NameConverter converter; - disasm::Disassembler dasm(converter); - // use a reasonably large buffer - v8::internal::EmbeddedVector<char, 256> buffer; - dasm.InstructionDecode(buffer, reinterpret_cast<byte*>(sim_->get_pc())); - PrintF(" 0x%08x %s\n", sim_->get_pc(), buffer.begin()); - last_pc = sim_->get_pc(); - } - char* line = ReadLine("sim> "); - if (line == nullptr) { - break; - } else { - char* last_input = sim_->last_debugger_input(); - if (strcmp(line, "\n") == 0 && last_input != nullptr) { - line = last_input; - } else { - // Ownership is transferred to sim_; - sim_->set_last_debugger_input(line); - } - // Use sscanf to parse the individual parts of the command line. At the - // moment no command expects more than two parameters. - int argc = SScanF(line, - "%" XSTR(COMMAND_SIZE) "s " - "%" XSTR(ARG_SIZE) "s " - "%" XSTR(ARG_SIZE) "s", - cmd, arg1, arg2); - if ((strcmp(cmd, "si") == 0) || (strcmp(cmd, "stepi") == 0)) { - sim_->InstructionDecode(reinterpret_cast<Instruction*>(sim_->get_pc())); - } else if ((strcmp(cmd, "c") == 0) || (strcmp(cmd, "cont") == 0)) { - // Execute the one instruction we broke at with breakpoints disabled. - sim_->InstructionDecode(reinterpret_cast<Instruction*>(sim_->get_pc())); - // Leave the debugger shell. - done = true; - } else if ((strcmp(cmd, "p") == 0) || (strcmp(cmd, "print") == 0)) { - if (argc == 2 || (argc == 3 && strcmp(arg2, "fp") == 0)) { - int32_t value; - float svalue; - double dvalue; - if (strcmp(arg1, "all") == 0) { - for (int i = 0; i < kNumRegisters; i++) { - value = GetRegisterValue(i); - PrintF("%3s: 0x%08x %10d", RegisterName(Register::from_code(i)), - value, value); - if ((argc == 3 && strcmp(arg2, "fp") == 0) && i < 8 && - (i % 2) == 0) { - dvalue = GetRegisterPairDoubleValue(i); - PrintF(" (%f)\n", dvalue); - } else { - PrintF("\n"); - } - } - for (int i = 0; i < DwVfpRegister::SupportedRegisterCount(); i++) { - dvalue = GetVFPDoubleRegisterValue(i); - uint64_t as_words = bit_cast<uint64_t>(dvalue); - PrintF("%3s: %f 0x%08x %08x\n", VFPRegisters::Name(i, true), - dvalue, static_cast<uint32_t>(as_words >> 32), - static_cast<uint32_t>(as_words & 0xFFFFFFFF)); - } + // Repeat last command by default. + const char* line = line_ptr.get(); + const char* last_input = sim_->last_debugger_input(); + if (strcmp(line, "\n") == 0 && (last_input != nullptr)) { + line_ptr.reset(); + line = last_input; + } else { + // Update the latest command ran + sim_->set_last_debugger_input(std::move(line_ptr)); + } + + // Use sscanf to parse the individual parts of the command line. At the + // moment no command expects more than two parameters. + int argc = SScanF(line, + "%" XSTR(COMMAND_SIZE) "s " + "%" XSTR(ARG_SIZE) "s " + "%" XSTR(ARG_SIZE) "s", + cmd, arg1, arg2); + if ((strcmp(cmd, "si") == 0) || (strcmp(cmd, "stepi") == 0)) { + sim_->InstructionDecode(reinterpret_cast<Instruction*>(sim_->get_pc())); + } else if ((strcmp(cmd, "c") == 0) || (strcmp(cmd, "cont") == 0)) { + // Execute the one instruction we broke at with breakpoints disabled. + sim_->InstructionDecode(reinterpret_cast<Instruction*>(sim_->get_pc())); + // Leave the debugger shell. + return true; + } else if ((strcmp(cmd, "p") == 0) || (strcmp(cmd, "print") == 0)) { + if (argc == 2 || (argc == 3 && strcmp(arg2, "fp") == 0)) { + int32_t value; + float svalue; + double dvalue; + if (strcmp(arg1, "all") == 0) { + for (int i = 0; i < kNumRegisters; i++) { + value = GetRegisterValue(i); + PrintF("%3s: 0x%08x %10d", RegisterName(Register::from_code(i)), + value, value); + if ((argc == 3 && strcmp(arg2, "fp") == 0) && i < 8 && (i % 2) == 0) { + dvalue = GetRegisterPairDoubleValue(i); + PrintF(" (%f)\n", dvalue); } else { - if (GetValue(arg1, &value)) { - PrintF("%s: 0x%08x %d \n", arg1, value, value); - } else if (GetVFPSingleValue(arg1, &svalue)) { - uint32_t as_word = bit_cast<uint32_t>(svalue); - PrintF("%s: %f 0x%08x\n", arg1, svalue, as_word); - } else if (GetVFPDoubleValue(arg1, &dvalue)) { - uint64_t as_words = bit_cast<uint64_t>(dvalue); - PrintF("%s: %f 0x%08x %08x\n", arg1, dvalue, - static_cast<uint32_t>(as_words >> 32), - static_cast<uint32_t>(as_words & 0xFFFFFFFF)); - } else { - PrintF("%s unrecognized\n", arg1); - } + PrintF("\n"); } + } + for (int i = 0; i < DwVfpRegister::SupportedRegisterCount(); i++) { + dvalue = GetVFPDoubleRegisterValue(i); + uint64_t as_words = bit_cast<uint64_t>(dvalue); + PrintF("%3s: %f 0x%08x %08x\n", VFPRegisters::Name(i, true), dvalue, + static_cast<uint32_t>(as_words >> 32), + static_cast<uint32_t>(as_words & 0xFFFFFFFF)); + } + } else { + if (GetValue(arg1, &value)) { + PrintF("%s: 0x%08x %d \n", arg1, value, value); + } else if (GetVFPSingleValue(arg1, &svalue)) { + uint32_t as_word = bit_cast<uint32_t>(svalue); + PrintF("%s: %f 0x%08x\n", arg1, svalue, as_word); + } else if (GetVFPDoubleValue(arg1, &dvalue)) { + uint64_t as_words = bit_cast<uint64_t>(dvalue); + PrintF("%s: %f 0x%08x %08x\n", arg1, dvalue, + static_cast<uint32_t>(as_words >> 32), + static_cast<uint32_t>(as_words & 0xFFFFFFFF)); } else { - PrintF("print <register>\n"); + PrintF("%s unrecognized\n", arg1); } - } else if ((strcmp(cmd, "po") == 0) || - (strcmp(cmd, "printobject") == 0)) { - if (argc == 2) { - int32_t value; - StdoutStream os; - if (GetValue(arg1, &value)) { - Object obj(value); - os << arg1 << ": \n"; + } + } else { + PrintF("print <register>\n"); + } + } else if ((strcmp(cmd, "po") == 0) || (strcmp(cmd, "printobject") == 0)) { + if (argc == 2) { + int32_t value; + StdoutStream os; + if (GetValue(arg1, &value)) { + Object obj(value); + os << arg1 << ": \n"; #ifdef DEBUG - obj.Print(os); - os << "\n"; + obj.Print(os); + os << "\n"; #else - os << Brief(obj) << "\n"; + os << Brief(obj) << "\n"; #endif + } else { + os << arg1 << " unrecognized\n"; + } + } else { + PrintF("printobject <value>\n"); + } + } else if (strcmp(cmd, "stack") == 0 || strcmp(cmd, "mem") == 0 || + strcmp(cmd, "dump") == 0) { + int32_t* cur = nullptr; + int32_t* end = nullptr; + int next_arg = 1; + + if (strcmp(cmd, "stack") == 0) { + cur = reinterpret_cast<int32_t*>(sim_->get_register(Simulator::sp)); + } else { // "mem" + int32_t value; + if (!GetValue(arg1, &value)) { + PrintF("%s unrecognized\n", arg1); + return false; + } + cur = reinterpret_cast<int32_t*>(value); + next_arg++; + } + + int32_t words; + if (argc == next_arg) { + words = 10; + } else { + if (!GetValue(argv[next_arg], &words)) { + words = 10; + } + } + end = cur + words; + + bool skip_obj_print = (strcmp(cmd, "dump") == 0); + while (cur < end) { + PrintF(" 0x%08" V8PRIxPTR ": 0x%08x %10d", + reinterpret_cast<intptr_t>(cur), *cur, *cur); + Object obj(*cur); + Heap* current_heap = sim_->isolate_->heap(); + if (!skip_obj_print) { + if (obj.IsSmi() || + IsValidHeapObject(current_heap, HeapObject::cast(obj))) { + PrintF(" ("); + if (obj.IsSmi()) { + PrintF("smi %d", Smi::ToInt(obj)); } else { - os << arg1 << " unrecognized\n"; - } - } else { - PrintF("printobject <value>\n"); - } - } else if (strcmp(cmd, "stack") == 0 || strcmp(cmd, "mem") == 0 || - strcmp(cmd, "dump") == 0) { - int32_t* cur = nullptr; - int32_t* end = nullptr; - int next_arg = 1; - - if (strcmp(cmd, "stack") == 0) { - cur = reinterpret_cast<int32_t*>(sim_->get_register(Simulator::sp)); - } else { // "mem" - int32_t value; - if (!GetValue(arg1, &value)) { - PrintF("%s unrecognized\n", arg1); - continue; + obj.ShortPrint(); } - cur = reinterpret_cast<int32_t*>(value); - next_arg++; + PrintF(")"); } + } + PrintF("\n"); + cur++; + } + } else if (strcmp(cmd, "disasm") == 0 || strcmp(cmd, "di") == 0) { + disasm::NameConverter converter; + disasm::Disassembler dasm(converter); + // use a reasonably large buffer + v8::internal::EmbeddedVector<char, 256> buffer; - int32_t words; - if (argc == next_arg) { - words = 10; - } else { - if (!GetValue(argv[next_arg], &words)) { - words = 10; - } + byte* prev = nullptr; + byte* cur = nullptr; + byte* end = nullptr; + + if (argc == 1) { + cur = reinterpret_cast<byte*>(sim_->get_pc()); + end = cur + (10 * kInstrSize); + } else if (argc == 2) { + int regnum = Registers::Number(arg1); + if (regnum != kNoRegister || strncmp(arg1, "0x", 2) == 0) { + // The argument is an address or a register name. + int32_t value; + if (GetValue(arg1, &value)) { + cur = reinterpret_cast<byte*>(value); + // Disassemble 10 instructions at <arg1>. + end = cur + (10 * kInstrSize); } - end = cur + words; - - bool skip_obj_print = (strcmp(cmd, "dump") == 0); - while (cur < end) { - PrintF(" 0x%08" V8PRIxPTR ": 0x%08x %10d", - reinterpret_cast<intptr_t>(cur), *cur, *cur); - Object obj(*cur); - Heap* current_heap = sim_->isolate_->heap(); - if (!skip_obj_print) { - if (obj.IsSmi() || - IsValidHeapObject(current_heap, HeapObject::cast(obj))) { - PrintF(" ("); - if (obj.IsSmi()) { - PrintF("smi %d", Smi::ToInt(obj)); - } else { - obj.ShortPrint(); - } - PrintF(")"); - } - } - PrintF("\n"); - cur++; + } else { + // The argument is the number of instructions. + int32_t value; + if (GetValue(arg1, &value)) { + cur = reinterpret_cast<byte*>(sim_->get_pc()); + // Disassemble <arg1> instructions. + end = cur + (value * kInstrSize); } - } else if (strcmp(cmd, "disasm") == 0 || strcmp(cmd, "di") == 0) { - disasm::NameConverter converter; - disasm::Disassembler dasm(converter); - // use a reasonably large buffer - v8::internal::EmbeddedVector<char, 256> buffer; + } + } else { + int32_t value1; + int32_t value2; + if (GetValue(arg1, &value1) && GetValue(arg2, &value2)) { + cur = reinterpret_cast<byte*>(value1); + end = cur + (value2 * kInstrSize); + } + } - byte* prev = nullptr; - byte* cur = nullptr; - byte* end = nullptr; + while (cur < end) { + prev = cur; + cur += dasm.InstructionDecode(buffer, cur); + PrintF(" 0x%08" V8PRIxPTR " %s\n", reinterpret_cast<intptr_t>(prev), + buffer.begin()); + } + } else if (strcmp(cmd, "gdb") == 0) { + PrintF("relinquishing control to gdb\n"); + v8::base::OS::DebugBreak(); + PrintF("regaining control from gdb\n"); + } else if (strcmp(cmd, "break") == 0) { + if (argc == 2) { + int32_t value; + if (GetValue(arg1, &value)) { + if (!SetBreakpoint(reinterpret_cast<Instruction*>(value))) { + PrintF("setting breakpoint failed\n"); + } + } else { + PrintF("%s unrecognized\n", arg1); + } + } else { + PrintF("break <address>\n"); + } + } else if (strcmp(cmd, "backtrace") == 0 || strcmp(cmd, "bt") == 0) { + int32_t pc = sim_->get_pc(); + int32_t lr = sim_->get_register(Simulator::lr); + int32_t sp = sim_->get_register(Simulator::sp); + int32_t fp = sim_->get_register(Simulator::fp); - if (argc == 1) { - cur = reinterpret_cast<byte*>(sim_->get_pc()); - end = cur + (10 * kInstrSize); - } else if (argc == 2) { - int regnum = Registers::Number(arg1); - if (regnum != kNoRegister || strncmp(arg1, "0x", 2) == 0) { - // The argument is an address or a register name. - int32_t value; - if (GetValue(arg1, &value)) { - cur = reinterpret_cast<byte*>(value); - // Disassemble 10 instructions at <arg1>. - end = cur + (10 * kInstrSize); - } - } else { - // The argument is the number of instructions. - int32_t value; - if (GetValue(arg1, &value)) { - cur = reinterpret_cast<byte*>(sim_->get_pc()); - // Disassemble <arg1> instructions. - end = cur + (value * kInstrSize); - } + int i = 0; + while (true) { + PrintF("#%d: 0x%08x (sp=0x%08x, fp=0x%08x)\n", i, pc, sp, fp); + pc = lr; + sp = fp; + if (pc == Simulator::end_sim_pc) { + break; + } + lr = *(reinterpret_cast<int32_t*>(fp) + 1); + fp = *reinterpret_cast<int32_t*>(fp); + i++; + if (i > 100) { + PrintF("Too many frames\n"); + break; + } + } + } else if (strcmp(cmd, "del") == 0) { + DeleteBreakpoint(); + } else if (strcmp(cmd, "flags") == 0) { + PrintF("N flag: %d; ", sim_->n_flag_); + PrintF("Z flag: %d; ", sim_->z_flag_); + PrintF("C flag: %d; ", sim_->c_flag_); + PrintF("V flag: %d\n", sim_->v_flag_); + PrintF("INVALID OP flag: %d; ", sim_->inv_op_vfp_flag_); + PrintF("DIV BY ZERO flag: %d; ", sim_->div_zero_vfp_flag_); + PrintF("OVERFLOW flag: %d; ", sim_->overflow_vfp_flag_); + PrintF("UNDERFLOW flag: %d; ", sim_->underflow_vfp_flag_); + PrintF("INEXACT flag: %d;\n", sim_->inexact_vfp_flag_); + } else if (strcmp(cmd, "stop") == 0) { + int32_t value; + intptr_t stop_pc = sim_->get_pc() - kInstrSize; + Instruction* stop_instr = reinterpret_cast<Instruction*>(stop_pc); + if ((argc == 2) && (strcmp(arg1, "unstop") == 0)) { + // Remove the current stop. + if (stop_instr->IsStop()) { + SetInstructionBitsInCodeSpace(stop_instr, kNopInstr, + sim_->isolate_->heap()); + } else { + PrintF("Not at debugger stop.\n"); + } + } else if (argc == 3) { + // Print information about all/the specified breakpoint(s). + if (strcmp(arg1, "info") == 0) { + if (strcmp(arg2, "all") == 0) { + PrintF("Stop information:\n"); + for (uint32_t i = 0; i < sim_->kNumOfWatchedStops; i++) { + sim_->PrintStopInfo(i); } + } else if (GetValue(arg2, &value)) { + sim_->PrintStopInfo(value); } else { - int32_t value1; - int32_t value2; - if (GetValue(arg1, &value1) && GetValue(arg2, &value2)) { - cur = reinterpret_cast<byte*>(value1); - end = cur + (value2 * kInstrSize); - } + PrintF("Unrecognized argument.\n"); } - - while (cur < end) { - prev = cur; - cur += dasm.InstructionDecode(buffer, cur); - PrintF(" 0x%08" V8PRIxPTR " %s\n", reinterpret_cast<intptr_t>(prev), - buffer.begin()); - } - } else if (strcmp(cmd, "gdb") == 0) { - PrintF("relinquishing control to gdb\n"); - v8::base::OS::DebugBreak(); - PrintF("regaining control from gdb\n"); - } else if (strcmp(cmd, "break") == 0) { - if (argc == 2) { - int32_t value; - if (GetValue(arg1, &value)) { - if (!SetBreakpoint(reinterpret_cast<Instruction*>(value))) { - PrintF("setting breakpoint failed\n"); - } - } else { - PrintF("%s unrecognized\n", arg1); + } else if (strcmp(arg1, "enable") == 0) { + // Enable all/the specified breakpoint(s). + if (strcmp(arg2, "all") == 0) { + for (uint32_t i = 0; i < sim_->kNumOfWatchedStops; i++) { + sim_->EnableStop(i); } + } else if (GetValue(arg2, &value)) { + sim_->EnableStop(value); } else { - PrintF("break <address>\n"); + PrintF("Unrecognized argument.\n"); } - } else if (strcmp(cmd, "del") == 0) { - DeleteBreakpoint(); - } else if (strcmp(cmd, "flags") == 0) { - PrintF("N flag: %d; ", sim_->n_flag_); - PrintF("Z flag: %d; ", sim_->z_flag_); - PrintF("C flag: %d; ", sim_->c_flag_); - PrintF("V flag: %d\n", sim_->v_flag_); - PrintF("INVALID OP flag: %d; ", sim_->inv_op_vfp_flag_); - PrintF("DIV BY ZERO flag: %d; ", sim_->div_zero_vfp_flag_); - PrintF("OVERFLOW flag: %d; ", sim_->overflow_vfp_flag_); - PrintF("UNDERFLOW flag: %d; ", sim_->underflow_vfp_flag_); - PrintF("INEXACT flag: %d;\n", sim_->inexact_vfp_flag_); - } else if (strcmp(cmd, "stop") == 0) { - int32_t value; - intptr_t stop_pc = sim_->get_pc() - kInstrSize; - Instruction* stop_instr = reinterpret_cast<Instruction*>(stop_pc); - if ((argc == 2) && (strcmp(arg1, "unstop") == 0)) { - // Remove the current stop. - if (stop_instr->IsStop()) { - SetInstructionBitsInCodeSpace(stop_instr, kNopInstr, - sim_->isolate_->heap()); - } else { - PrintF("Not at debugger stop.\n"); - } - } else if (argc == 3) { - // Print information about all/the specified breakpoint(s). - if (strcmp(arg1, "info") == 0) { - if (strcmp(arg2, "all") == 0) { - PrintF("Stop information:\n"); - for (uint32_t i = 0; i < sim_->kNumOfWatchedStops; i++) { - sim_->PrintStopInfo(i); - } - } else if (GetValue(arg2, &value)) { - sim_->PrintStopInfo(value); - } else { - PrintF("Unrecognized argument.\n"); - } - } else if (strcmp(arg1, "enable") == 0) { - // Enable all/the specified breakpoint(s). - if (strcmp(arg2, "all") == 0) { - for (uint32_t i = 0; i < sim_->kNumOfWatchedStops; i++) { - sim_->EnableStop(i); - } - } else if (GetValue(arg2, &value)) { - sim_->EnableStop(value); - } else { - PrintF("Unrecognized argument.\n"); - } - } else if (strcmp(arg1, "disable") == 0) { - // Disable all/the specified breakpoint(s). - if (strcmp(arg2, "all") == 0) { - for (uint32_t i = 0; i < sim_->kNumOfWatchedStops; i++) { - sim_->DisableStop(i); - } - } else if (GetValue(arg2, &value)) { - sim_->DisableStop(value); - } else { - PrintF("Unrecognized argument.\n"); - } + } else if (strcmp(arg1, "disable") == 0) { + // Disable all/the specified breakpoint(s). + if (strcmp(arg2, "all") == 0) { + for (uint32_t i = 0; i < sim_->kNumOfWatchedStops; i++) { + sim_->DisableStop(i); } + } else if (GetValue(arg2, &value)) { + sim_->DisableStop(value); } else { - PrintF("Wrong usage. Use help command for more information.\n"); + PrintF("Unrecognized argument.\n"); } - } else if ((strcmp(cmd, "t") == 0) || strcmp(cmd, "trace") == 0) { - ::v8::internal::FLAG_trace_sim = !::v8::internal::FLAG_trace_sim; - PrintF("Trace of executed instructions is %s\n", - ::v8::internal::FLAG_trace_sim ? "on" : "off"); - } else if ((strcmp(cmd, "h") == 0) || (strcmp(cmd, "help") == 0)) { - PrintF("cont\n"); - PrintF(" continue execution (alias 'c')\n"); - PrintF("stepi\n"); - PrintF(" step one instruction (alias 'si')\n"); - PrintF("print <register>\n"); - PrintF(" print register content (alias 'p')\n"); - PrintF(" use register name 'all' to print all registers\n"); - PrintF(" add argument 'fp' to print register pair double values\n"); - PrintF("printobject <register>\n"); - PrintF(" print an object from a register (alias 'po')\n"); - PrintF("flags\n"); - PrintF(" print flags\n"); - PrintF("stack [<words>]\n"); - PrintF(" dump stack content, default dump 10 words)\n"); - PrintF("mem <address> [<words>]\n"); - PrintF(" dump memory content, default dump 10 words)\n"); - PrintF("dump [<words>]\n"); - PrintF( - " dump memory content without pretty printing JS objects, default " - "dump 10 words)\n"); - PrintF("disasm [<instructions>]\n"); - PrintF("disasm [<address/register>]\n"); - PrintF("disasm [[<address/register>] <instructions>]\n"); - PrintF(" disassemble code, default is 10 instructions\n"); - PrintF(" from pc (alias 'di')\n"); - PrintF("gdb\n"); - PrintF(" enter gdb\n"); - PrintF("break <address>\n"); - PrintF(" set a break point on the address\n"); - PrintF("del\n"); - PrintF(" delete the breakpoint\n"); - PrintF("trace (alias 't')\n"); - PrintF(" toogle the tracing of all executed statements\n"); - PrintF("stop feature:\n"); - PrintF(" Description:\n"); - PrintF(" Stops are debug instructions inserted by\n"); - PrintF(" the Assembler::stop() function.\n"); - PrintF(" When hitting a stop, the Simulator will\n"); - PrintF(" stop and give control to the ArmDebugger.\n"); - PrintF(" The first %d stop codes are watched:\n", - Simulator::kNumOfWatchedStops); - PrintF(" - They can be enabled / disabled: the Simulator\n"); - PrintF(" will / won't stop when hitting them.\n"); - PrintF(" - The Simulator keeps track of how many times they \n"); - PrintF(" are met. (See the info command.) Going over a\n"); - PrintF(" disabled stop still increases its counter. \n"); - PrintF(" Commands:\n"); - PrintF(" stop info all/<code> : print infos about number <code>\n"); - PrintF(" or all stop(s).\n"); - PrintF(" stop enable/disable all/<code> : enables / disables\n"); - PrintF(" all or number <code> stop(s)\n"); - PrintF(" stop unstop\n"); - PrintF(" ignore the stop instruction at the current location\n"); - PrintF(" from now on\n"); - } else { - PrintF("Unknown command: %s\n", cmd); } + } else { + PrintF("Wrong usage. Use help command for more information.\n"); } + } else if ((strcmp(cmd, "t") == 0) || strcmp(cmd, "trace") == 0) { + ::v8::internal::FLAG_trace_sim = !::v8::internal::FLAG_trace_sim; + PrintF("Trace of executed instructions is %s\n", + ::v8::internal::FLAG_trace_sim ? "on" : "off"); + } else if ((strcmp(cmd, "h") == 0) || (strcmp(cmd, "help") == 0)) { + PrintF("cont\n"); + PrintF(" continue execution (alias 'c')\n"); + PrintF("stepi\n"); + PrintF(" step one instruction (alias 'si')\n"); + PrintF("print <register>\n"); + PrintF(" print register content (alias 'p')\n"); + PrintF(" use register name 'all' to print all registers\n"); + PrintF(" add argument 'fp' to print register pair double values\n"); + PrintF("printobject <register>\n"); + PrintF(" print an object from a register (alias 'po')\n"); + PrintF("flags\n"); + PrintF(" print flags\n"); + PrintF("stack [<words>]\n"); + PrintF(" dump stack content, default dump 10 words)\n"); + PrintF("mem <address> [<words>]\n"); + PrintF(" dump memory content, default dump 10 words)\n"); + PrintF("dump [<words>]\n"); + PrintF( + " dump memory content without pretty printing JS objects, default " + "dump 10 words)\n"); + PrintF("disasm [<instructions>]\n"); + PrintF("disasm [<address/register>]\n"); + PrintF("disasm [[<address/register>] <instructions>]\n"); + PrintF(" disassemble code, default is 10 instructions\n"); + PrintF(" from pc (alias 'di')\n"); + PrintF("gdb\n"); + PrintF(" enter gdb\n"); + PrintF("break <address>\n"); + PrintF(" set a break point on the address\n"); + PrintF("backtrace / bt\n"); + PrintF(" Walk the frame pointers, dumping the pc/sp/fp for each frame.\n"); + PrintF("del\n"); + PrintF(" delete the breakpoint\n"); + PrintF("trace (alias 't')\n"); + PrintF(" toogle the tracing of all executed statements\n"); + PrintF("stop feature:\n"); + PrintF(" Description:\n"); + PrintF(" Stops are debug instructions inserted by\n"); + PrintF(" the Assembler::stop() function.\n"); + PrintF(" When hitting a stop, the Simulator will\n"); + PrintF(" stop and give control to the ArmDebugger.\n"); + PrintF(" The first %d stop codes are watched:\n", + Simulator::kNumOfWatchedStops); + PrintF(" - They can be enabled / disabled: the Simulator\n"); + PrintF(" will / won't stop when hitting them.\n"); + PrintF(" - The Simulator keeps track of how many times they \n"); + PrintF(" are met. (See the info command.) Going over a\n"); + PrintF(" disabled stop still increases its counter. \n"); + PrintF(" Commands:\n"); + PrintF(" stop info all/<code> : print infos about number <code>\n"); + PrintF(" or all stop(s).\n"); + PrintF(" stop enable/disable all/<code> : enables / disables\n"); + PrintF(" all or number <code> stop(s)\n"); + PrintF(" stop unstop\n"); + PrintF(" ignore the stop instruction at the current location\n"); + PrintF(" from now on\n"); + } else { + PrintF("Unknown command: %s\n", cmd); } - - // Reinstall breakpoint to stop execution and enter the debugger shell when - // hit. - RedoBreakpoint(); + return false; #undef COMMAND_SIZE #undef ARG_SIZE @@ -577,11 +608,6 @@ static bool AllOnOnePage(uintptr_t start, int size) { return start_page == end_page; } -void Simulator::set_last_debugger_input(char* input) { - DeleteArray(last_debugger_input_); - last_debugger_input_ = input; -} - void Simulator::SetRedirectInstruction(Instruction* instruction) { instruction->SetInstructionBits(al | (0xF * B24) | kCallRtRedirected); } @@ -6499,4 +6525,26 @@ void Simulator::GlobalMonitor::RemoveProcessor(Processor* processor) { } // namespace internal } // namespace v8 +// +// The following functions are used by our gdb macros. +// +V8_EXPORT_PRIVATE extern bool _v8_internal_Simulator_ExecDebugCommand( + const char* command) { + i::Isolate* isolate = i::Isolate::Current(); + if (!isolate) { + fprintf(stderr, "No V8 Isolate found\n"); + return false; + } + i::Simulator* simulator = i::Simulator::current(isolate); + if (!simulator) { + fprintf(stderr, "No Arm simulator found\n"); + return false; + } + // Copy the command so that the simulator can take ownership of it. + size_t len = strlen(command); + i::ArrayUniquePtr<char> command_copy(i::NewArray<char>(len + 1)); + i::MemCopy(command_copy.get(), command, len + 1); + return i::ArmDebugger(simulator).ExecDebugCommand(std::move(command_copy)); +} + #endif // USE_SIMULATOR diff --git a/deps/v8/src/execution/arm/simulator-arm.h b/deps/v8/src/execution/arm/simulator-arm.h index a4570ff47d..28cf72591c 100644 --- a/deps/v8/src/execution/arm/simulator-arm.h +++ b/deps/v8/src/execution/arm/simulator-arm.h @@ -77,6 +77,7 @@ class Simulator : public SimulatorBase { r14, r15, num_registers, + fp = 11, sp = 13, lr = 14, pc = 15, @@ -255,8 +256,10 @@ class Simulator : public SimulatorBase { uintptr_t PopAddress(); // Debugger input. - void set_last_debugger_input(char* input); - char* last_debugger_input() { return last_debugger_input_; } + void set_last_debugger_input(ArrayUniquePtr<char> input) { + last_debugger_input_ = std::move(input); + } + const char* last_debugger_input() { return last_debugger_input_.get(); } // Redirection support. static void SetRedirectInstruction(Instruction* instruction); @@ -468,7 +471,7 @@ class Simulator : public SimulatorBase { int icount_; // Debugger input. - char* last_debugger_input_; + ArrayUniquePtr<char> last_debugger_input_; // Registered breakpoints. Instruction* break_pc_; diff --git a/deps/v8/src/execution/arm64/simulator-arm64.cc b/deps/v8/src/execution/arm64/simulator-arm64.cc index 23a03848ad..3853316a80 100644 --- a/deps/v8/src/execution/arm64/simulator-arm64.cc +++ b/deps/v8/src/execution/arm64/simulator-arm64.cc @@ -34,7 +34,7 @@ namespace internal { // SScanF not being implemented in a platform independent way through // ::v8::internal::OS in the same way as SNPrintF is that the // Windows C Run-Time Library does not provide vsscanf. -#define SScanF sscanf // NOLINT +#define SScanF sscanf // Helpers for colors. #define COLOUR(colour_code) "\033[0;" colour_code "m" diff --git a/deps/v8/src/execution/execution.cc b/deps/v8/src/execution/execution.cc index 7866b406d9..b16e791aaa 100644 --- a/deps/v8/src/execution/execution.cc +++ b/deps/v8/src/execution/execution.cc @@ -190,8 +190,12 @@ MaybeHandle<Context> NewScriptContext(Isolate* isolate, if (IsLexicalVariableMode(mode) || IsLexicalVariableMode(lookup.mode)) { Handle<Context> context = ScriptContextTable::GetContext( isolate, script_context, lookup.context_index); - // If we are trying to re-declare a REPL-mode let as a let, allow it. - if (!(mode == VariableMode::kLet && lookup.mode == VariableMode::kLet && + // If we are trying to re-declare a REPL-mode let as a let or REPL-mode + // const as a const, allow it. + if (!(((mode == VariableMode::kLet && + lookup.mode == VariableMode::kLet) || + (mode == VariableMode::kConst && + lookup.mode == VariableMode::kConst)) && scope_info->IsReplModeScope() && context->scope_info().IsReplModeScope())) { // ES#sec-globaldeclarationinstantiation 5.b: @@ -244,7 +248,7 @@ MaybeHandle<Context> NewScriptContext(Isolate* isolate, V8_WARN_UNUSED_RESULT MaybeHandle<Object> Invoke(Isolate* isolate, const InvokeParams& params) { - RuntimeCallTimerScope timer(isolate, RuntimeCallCounterId::kInvoke); + RCS_SCOPE(isolate, RuntimeCallCounterId::kInvoke); DCHECK(!params.receiver->IsJSGlobalObject()); DCHECK_LE(params.argc, FixedArray::kMaxLength); @@ -368,7 +372,7 @@ V8_WARN_UNUSED_RESULT MaybeHandle<Object> Invoke(Isolate* isolate, Address func = params.target->ptr(); Address recv = params.receiver->ptr(); Address** argv = reinterpret_cast<Address**>(params.argv); - RuntimeCallTimerScope timer(isolate, RuntimeCallCounterId::kJS_Execution); + RCS_SCOPE(isolate, RuntimeCallCounterId::kJS_Execution); value = Object(stub_entry.Call(isolate->isolate_data()->isolate_root(), orig_func, func, recv, params.argc, argv)); } else { @@ -383,7 +387,7 @@ V8_WARN_UNUSED_RESULT MaybeHandle<Object> Invoke(Isolate* isolate, JSEntryFunction stub_entry = JSEntryFunction::FromAddress(isolate, code->InstructionStart()); - RuntimeCallTimerScope timer(isolate, RuntimeCallCounterId::kJS_Execution); + RCS_SCOPE(isolate, RuntimeCallCounterId::kJS_Execution); value = Object(stub_entry.Call(isolate->isolate_data()->isolate_root(), params.microtask_queue)); } @@ -552,7 +556,7 @@ void Execution::CallWasm(Isolate* isolate, Handle<Code> wrapper_code, trap_handler::SetThreadInWasm(); { - RuntimeCallTimerScope timer(isolate, RuntimeCallCounterId::kJS_Execution); + RCS_SCOPE(isolate, RuntimeCallCounterId::kJS_Execution); STATIC_ASSERT(compiler::CWasmEntryParameters::kCodeEntry == 0); STATIC_ASSERT(compiler::CWasmEntryParameters::kObjectRef == 1); STATIC_ASSERT(compiler::CWasmEntryParameters::kArgumentsBuffer == 2); diff --git a/deps/v8/src/execution/external-pointer-table.h b/deps/v8/src/execution/external-pointer-table.h index 243682b36c..4a80fe7d4d 100644 --- a/deps/v8/src/execution/external-pointer-table.h +++ b/deps/v8/src/execution/external-pointer-table.h @@ -27,7 +27,7 @@ class V8_EXPORT_PRIVATE ExternalPointerTable { buffer_[kNullExternalPointer] = kNullAddress; } - ~ExternalPointerTable() { ::free(buffer_); } + ~ExternalPointerTable() { base::Free(buffer_); } Address get(uint32_t index) const { CHECK_LT(index, length_); @@ -49,13 +49,6 @@ class V8_EXPORT_PRIVATE ExternalPointerTable { return index; } - void free(uint32_t index) { - // TODO(v8:10391, saelo): implement simple free list here, i.e. set - // buffer_[index] to freelist_head_ and set freelist_head - // to index - DCHECK_NE(kNullExternalPointer, index); - } - // Returns true if the entry exists in the table and therefore it can be read. bool is_valid_index(uint32_t index) const { // TODO(v8:10391, saelo): also check here if entry is free diff --git a/deps/v8/src/execution/frame-constants.h b/deps/v8/src/execution/frame-constants.h index 10cdff5c0f..1148a94212 100644 --- a/deps/v8/src/execution/frame-constants.h +++ b/deps/v8/src/execution/frame-constants.h @@ -390,23 +390,23 @@ inline static int FrameSlotToFPOffset(int slot) { } // namespace v8 #if V8_TARGET_ARCH_IA32 -#include "src/execution/ia32/frame-constants-ia32.h" // NOLINT +#include "src/execution/ia32/frame-constants-ia32.h" #elif V8_TARGET_ARCH_X64 -#include "src/execution/x64/frame-constants-x64.h" // NOLINT +#include "src/execution/x64/frame-constants-x64.h" #elif V8_TARGET_ARCH_ARM64 -#include "src/execution/arm64/frame-constants-arm64.h" // NOLINT +#include "src/execution/arm64/frame-constants-arm64.h" #elif V8_TARGET_ARCH_ARM -#include "src/execution/arm/frame-constants-arm.h" // NOLINT +#include "src/execution/arm/frame-constants-arm.h" #elif V8_TARGET_ARCH_PPC || V8_TARGET_ARCH_PPC64 -#include "src/execution/ppc/frame-constants-ppc.h" // NOLINT +#include "src/execution/ppc/frame-constants-ppc.h" #elif V8_TARGET_ARCH_MIPS -#include "src/execution/mips/frame-constants-mips.h" // NOLINT +#include "src/execution/mips/frame-constants-mips.h" #elif V8_TARGET_ARCH_MIPS64 -#include "src/execution/mips64/frame-constants-mips64.h" // NOLINT +#include "src/execution/mips64/frame-constants-mips64.h" #elif V8_TARGET_ARCH_S390 -#include "src/execution/s390/frame-constants-s390.h" // NOLINT +#include "src/execution/s390/frame-constants-s390.h" #elif V8_TARGET_ARCH_RISCV64 -#include "src/execution/riscv64/frame-constants-riscv64.h" // NOLINT +#include "src/execution/riscv64/frame-constants-riscv64.h" #else #error Unsupported target architecture. #endif diff --git a/deps/v8/src/execution/frames.cc b/deps/v8/src/execution/frames.cc index 65d34a5651..bef92948eb 100644 --- a/deps/v8/src/execution/frames.cc +++ b/deps/v8/src/execution/frames.cc @@ -228,8 +228,8 @@ bool IsInterpreterFramePc(Isolate* isolate, Address pc, Builtins::Name builtin_index = InstructionStream::TryLookupCode(isolate, pc); if (builtin_index != Builtins::kNoBuiltinId && (builtin_index == Builtins::kInterpreterEntryTrampoline || - builtin_index == Builtins::kInterpreterEnterBytecodeAdvance || - builtin_index == Builtins::kInterpreterEnterBytecodeDispatch || + builtin_index == Builtins::kInterpreterEnterAtBytecode || + builtin_index == Builtins::kInterpreterEnterAtNextBytecode || builtin_index == Builtins::kBaselineEnterAtBytecode || builtin_index == Builtins::kBaselineEnterAtNextBytecode)) { return true; @@ -610,7 +610,6 @@ StackFrame::Type StackFrame::ComputeType(const StackFrameIteratorBase* iterator, } return BUILTIN; case CodeKind::TURBOFAN: - case CodeKind::NATIVE_CONTEXT_INDEPENDENT: case CodeKind::TURBOPROP: return OPTIMIZED; case CodeKind::BASELINE: @@ -1060,12 +1059,14 @@ void CommonFrame::IterateCompiledFrame(RootVisitor* v) const { } // Visit pointer spill slots and locals. - uint8_t* safepoint_bits = safepoint_entry.bits(); - for (unsigned index = 0; index < stack_slots; index++) { - int byte_index = index >> kBitsPerByteLog2; - int bit_index = index & (kBitsPerByte - 1); - if ((safepoint_bits[byte_index] & (1U << bit_index)) != 0) { - FullObjectSlot spill_slot = parameters_limit + index; + DCHECK_GE((stack_slots + kBitsPerByte) / kBitsPerByte, + safepoint_entry.entry_size()); + int slot_offset = 0; + for (uint8_t bits : safepoint_entry.iterate_bits()) { + while (bits) { + int bit = base::bits::CountTrailingZeros(bits); + bits &= ~(1 << bit); + FullObjectSlot spill_slot = parameters_limit + slot_offset + bit; #ifdef V8_COMPRESS_POINTERS // Spill slots may contain compressed values in which case the upper // 32-bits will contain zeros. In order to simplify handling of such @@ -1083,6 +1084,7 @@ void CommonFrame::IterateCompiledFrame(RootVisitor* v) const { #endif v->VisitRootPointer(Root::kStackRoots, nullptr, spill_slot); } + slot_offset += kBitsPerByte; } // Visit tagged parameters that have been passed to the function of this @@ -1444,10 +1446,6 @@ Handle<Object> FrameSummary::JavaScriptFrameSummary::script() const { return handle(function_->shared().script(), isolate()); } -Handle<String> FrameSummary::JavaScriptFrameSummary::FunctionName() const { - return JSFunction::GetDebugName(function_); -} - Handle<Context> FrameSummary::JavaScriptFrameSummary::native_context() const { return handle(function_->context().native_context(), isolate()); } @@ -1485,13 +1483,6 @@ Handle<Script> FrameSummary::WasmFrameSummary::script() const { wasm_instance()->GetIsolate()); } -Handle<String> FrameSummary::WasmFrameSummary::FunctionName() const { - Handle<WasmModuleObject> module_object(wasm_instance()->module_object(), - isolate()); - return WasmModuleObject::GetFunctionName(isolate(), module_object, - function_index()); -} - Handle<Context> FrameSummary::WasmFrameSummary::native_context() const { return handle(wasm_instance()->native_context(), isolate()); } @@ -1563,7 +1554,6 @@ FRAME_SUMMARY_DISPATCH(bool, is_subject_to_debugging) FRAME_SUMMARY_DISPATCH(Handle<Object>, script) FRAME_SUMMARY_DISPATCH(int, SourcePosition) FRAME_SUMMARY_DISPATCH(int, SourceStatementPosition) -FRAME_SUMMARY_DISPATCH(Handle<String>, FunctionName) FRAME_SUMMARY_DISPATCH(Handle<Context>, native_context) #undef FRAME_SUMMARY_DISPATCH @@ -1860,8 +1850,13 @@ int BuiltinFrame::ComputeParametersCount() const { #if V8_ENABLE_WEBASSEMBLY void WasmFrame::Print(StringStream* accumulator, PrintMode mode, int index) const { - wasm::WasmCodeRefScope code_ref_scope; PrintIndex(accumulator, mode, index); + if (function_index() == wasm::kAnonymousFuncIndex) { + accumulator->Add("Anonymous wasm wrapper [pc: %p]\n", + reinterpret_cast<void*>(pc())); + return; + } + wasm::WasmCodeRefScope code_ref_scope; accumulator->Add("WASM ["); accumulator->PrintName(script().name()); Address instruction_start = isolate() @@ -1905,7 +1900,7 @@ WasmModuleObject WasmFrame::module_object() const { return wasm_instance().module_object(); } -uint32_t WasmFrame::function_index() const { +int WasmFrame::function_index() const { wasm::WasmCodeRefScope code_ref_scope; return wasm_code()->index(); } diff --git a/deps/v8/src/execution/frames.h b/deps/v8/src/execution/frames.h index 32157b4cc1..8d9dadd76d 100644 --- a/deps/v8/src/execution/frames.h +++ b/deps/v8/src/execution/frames.h @@ -138,9 +138,7 @@ class StackFrame { INNER_JSENTRY_FRAME = (0 << kSmiTagSize) | kSmiTag, OUTERMOST_JSENTRY_FRAME = (1 << kSmiTagSize) | kSmiTag }; - // NOLINTNEXTLINE(runtime/references) (false positive) STATIC_ASSERT((INNER_JSENTRY_FRAME & kHeapObjectTagMask) != kHeapObjectTag); - // NOLINTNEXTLINE(runtime/references) (false positive) STATIC_ASSERT((OUTERMOST_JSENTRY_FRAME & kHeapObjectTagMask) != kHeapObjectTag); @@ -389,7 +387,6 @@ class V8_EXPORT_PRIVATE FrameSummary { int SourcePosition() const; int SourceStatementPosition() const; Handle<Object> script() const; - Handle<String> FunctionName() const; Handle<Context> native_context() const; private: @@ -418,7 +415,6 @@ class V8_EXPORT_PRIVATE FrameSummary { int SourceStatementPosition() const { return SourcePosition(); } Handle<Script> script() const; Handle<WasmInstanceObject> wasm_instance() const { return wasm_instance_; } - Handle<String> FunctionName() const; Handle<Context> native_context() const; bool at_to_number_conversion() const { return at_to_number_conversion_; } @@ -453,7 +449,6 @@ class V8_EXPORT_PRIVATE FrameSummary { Handle<Object> script() const; int SourcePosition() const; int SourceStatementPosition() const; - Handle<String> FunctionName() const; Handle<Context> native_context() const; #define FRAME_SUMMARY_CAST(kind_, type, field, desc) \ @@ -964,7 +959,7 @@ class WasmFrame : public TypedFrame { V8_EXPORT_PRIVATE WasmInstanceObject wasm_instance() const; V8_EXPORT_PRIVATE wasm::NativeModule* native_module() const; wasm::WasmCode* wasm_code() const; - uint32_t function_index() const; + int function_index() const; Script script() const; // Byte position in the module, or asm.js source position. int position() const override; diff --git a/deps/v8/src/execution/isolate-data.h b/deps/v8/src/execution/isolate-data.h index a6610c12f0..bc3e2b8d1a 100644 --- a/deps/v8/src/execution/isolate-data.h +++ b/deps/v8/src/execution/isolate-data.h @@ -29,13 +29,19 @@ class Isolate; // register. class IsolateData final { public: - explicit IsolateData(Isolate* isolate) : stack_guard_(isolate) {} + IsolateData(Isolate* isolate, Address cage_base) + : cage_base_(cage_base), stack_guard_(isolate) {} IsolateData(const IsolateData&) = delete; IsolateData& operator=(const IsolateData&) = delete; static constexpr intptr_t kIsolateRootBias = kRootRegisterBias; + // The value of kPointerCageBaseRegister + Address cage_base() const { + return COMPRESS_POINTERS_BOOL ? cage_base_ : kNullAddress; + } + // The value of the kRootRegister. Address isolate_root() const { return reinterpret_cast<Address>(this) + kIsolateRootBias; @@ -61,7 +67,7 @@ class IsolateData final { return kBuiltinEntryTableOffset - kIsolateRootBias; } static constexpr int builtin_entry_slot_offset(Builtins::Name builtin_index) { - CONSTEXPR_DCHECK(Builtins::IsBuiltinId(builtin_index)); + DCHECK(Builtins::IsBuiltinId(builtin_index)); return builtin_entry_table_offset() + builtin_index * kSystemPointerSize; } @@ -70,6 +76,13 @@ class IsolateData final { return kBuiltinsTableOffset - kIsolateRootBias; } + // Root-register-relative offset of the external pointer table. +#ifdef V8_HEAP_SANDBOX + static constexpr int external_pointer_table_offset() { + return kExternalPointerTableOffset - kIsolateRootBias; + } +#endif + static constexpr int fast_c_call_caller_fp_offset() { return kFastCCallCallerFPOffset - kIsolateRootBias; } @@ -82,6 +95,10 @@ class IsolateData final { return kFastApiCallTargetOffset - kIsolateRootBias; } + static constexpr int cage_base_offset() { + return kCageBaseOffset - kIsolateRootBias; + } + // Root-register-relative offset of the given builtin table entry. // TODO(ishell): remove in favour of typified id version. static int builtin_slot_offset(int builtin_index) { @@ -142,6 +159,8 @@ class IsolateData final { V(kFastCCallCallerFPOffset, kSystemPointerSize) \ V(kFastCCallCallerPCOffset, kSystemPointerSize) \ V(kFastApiCallTargetOffset, kSystemPointerSize) \ + V(kCageBaseOffset, kSystemPointerSize) \ + V(kLongTaskStatsCounterOffset, kSizetSize) \ V(kStackGuardOffset, StackGuard::kSizeInBytes) \ V(kRootsTableOffset, RootsTable::kEntriesCount* kSystemPointerSize) \ V(kExternalReferenceTableOffset, ExternalReferenceTable::kSizeInBytes) \ @@ -180,6 +199,12 @@ class IsolateData final { Address fast_c_call_caller_pc_ = kNullAddress; Address fast_api_call_target_ = kNullAddress; + Address cage_base_ = kNullAddress; + + // Used for implementation of LongTaskStats. Counts the number of potential + // long tasks. + size_t long_task_stats_counter_ = 0; + // Fields related to the system and JS stack. In particular, this contains // the stack limit used by stack checks in generated code. StackGuard stack_guard_; @@ -245,6 +270,9 @@ void IsolateData::AssertPredictableLayout() { kFastCCallCallerPCOffset); STATIC_ASSERT(offsetof(IsolateData, fast_api_call_target_) == kFastApiCallTargetOffset); + STATIC_ASSERT(offsetof(IsolateData, cage_base_) == kCageBaseOffset); + STATIC_ASSERT(offsetof(IsolateData, long_task_stats_counter_) == + kLongTaskStatsCounterOffset); STATIC_ASSERT(offsetof(IsolateData, stack_guard_) == kStackGuardOffset); #ifdef V8_HEAP_SANDBOX STATIC_ASSERT(offsetof(IsolateData, external_pointer_table_) == diff --git a/deps/v8/src/execution/isolate-utils-inl.h b/deps/v8/src/execution/isolate-utils-inl.h index f199b525aa..1e91d494aa 100644 --- a/deps/v8/src/execution/isolate-utils-inl.h +++ b/deps/v8/src/execution/isolate-utils-inl.h @@ -51,7 +51,7 @@ V8_INLINE Heap* GetHeapFromWritableObject(HeapObject object) { heap_internals::MemoryChunk* chunk = heap_internals::MemoryChunk::FromHeapObject(object); return chunk->GetHeap(); -#endif // V8_COMPRESS_POINTERS || V8_ENABLE_THIRD_PARTY_HEAP +#endif // V8_COMPRESS_POINTERS_IN_ISOLATE_CAGE, V8_ENABLE_THIRD_PARTY_HEAP } V8_INLINE Isolate* GetIsolateFromWritableObject(HeapObject object) { @@ -64,14 +64,14 @@ V8_INLINE Isolate* GetIsolateFromWritableObject(HeapObject object) { return isolate; #else return Isolate::FromHeap(GetHeapFromWritableObject(object)); -#endif // V8_COMPRESS_POINTERS, V8_ENABLE_THIRD_PARTY_HEAP +#endif // V8_COMPRESS_POINTERS_IN_ISOLATE_CAGE, V8_ENABLE_THIRD_PARTY_HEAP } V8_INLINE bool GetIsolateFromHeapObject(HeapObject object, Isolate** isolate) { #ifdef V8_ENABLE_THIRD_PARTY_HEAP *isolate = Heap::GetIsolateFromWritableObject(object); return true; -#elif defined V8_COMPRESS_POINTERS +#elif defined V8_COMPRESS_POINTERS_IN_ISOLATE_CAGE *isolate = GetIsolateFromWritableObject(object); return true; #else @@ -83,7 +83,18 @@ V8_INLINE bool GetIsolateFromHeapObject(HeapObject object, Isolate** isolate) { } *isolate = Isolate::FromHeap(chunk->GetHeap()); return true; -#endif // V8_COMPRESS_POINTERS, V8_ENABLE_THIRD_PARTY_HEAP +#endif // V8_COMPRESS_POINTERS_IN_ISOLATE_CAGE, V8_ENABLE_THIRD_PARTY_HEAP +} + +// Use this function instead of Internals::GetIsolateForHeapSandbox for internal +// code, as this function is fully inlinable. +V8_INLINE static Isolate* GetIsolateForHeapSandbox(HeapObject object) { +#ifdef V8_HEAP_SANDBOX + return GetIsolateFromWritableObject(object); +#else + // Not used in non-sandbox mode. + return nullptr; +#endif } } // namespace internal diff --git a/deps/v8/src/execution/isolate.cc b/deps/v8/src/execution/isolate.cc index 55f3fac9b3..b4070372ee 100644 --- a/deps/v8/src/execution/isolate.cc +++ b/deps/v8/src/execution/isolate.cc @@ -7,7 +7,7 @@ #include <stdlib.h> #include <atomic> -#include <fstream> // NOLINT(readability/streams) +#include <fstream> #include <memory> #include <sstream> #include <string> @@ -19,9 +19,11 @@ #include "src/ast/scopes.h" #include "src/base/hashmap.h" #include "src/base/logging.h" +#include "src/base/platform/mutex.h" #include "src/base/platform/platform.h" #include "src/base/sys-info.h" #include "src/base/utils/random-number-generator.h" +#include "src/bigint/bigint.h" #include "src/builtins/builtins-promise.h" #include "src/builtins/constants-table-builder.h" #include "src/codegen/assembler-inl.h" @@ -318,10 +320,6 @@ void Isolate::SetEmbeddedBlob(const uint8_t* code, uint32_t code_size, } } #endif // DEBUG - - if (FLAG_experimental_flush_embedded_blob_icache) { - FlushInstructionCache(const_cast<uint8_t*>(code), code_size); - } } void Isolate::ClearEmbeddedBlob() { @@ -1404,12 +1402,15 @@ Object Isolate::StackOverflow() { Handle<JSFunction> fun = range_error_function(); Handle<Object> msg = factory()->NewStringFromAsciiChecked( MessageFormatter::TemplateString(MessageTemplate::kStackOverflow)); + Handle<Object> options = factory()->undefined_value(); Handle<Object> no_caller; - Handle<Object> exception; + Handle<JSObject> exception; ASSIGN_RETURN_FAILURE_ON_EXCEPTION( this, exception, - ErrorUtils::Construct(this, fun, fun, msg, SKIP_NONE, no_caller, + ErrorUtils::Construct(this, fun, fun, msg, options, SKIP_NONE, no_caller, ErrorUtils::StackTraceCollection::kSimple)); + JSObject::AddProperty(this, exception, factory()->wasm_uncatchable_symbol(), + factory()->true_value(), NONE); Throw(*exception); @@ -1474,8 +1475,7 @@ void Isolate::RequestInterrupt(InterruptCallback callback, void* data) { } void Isolate::InvokeApiInterruptCallbacks() { - RuntimeCallTimerScope runtimeTimer( - this, RuntimeCallCounterId::kInvokeApiInterruptCallbacks); + RCS_SCOPE(this, RuntimeCallCounterId::kInvokeApiInterruptCallbacks); // Note: callback below should be called outside of execution access lock. while (true) { InterruptEntry entry; @@ -1675,10 +1675,36 @@ Object Isolate::ReThrow(Object exception) { return ReadOnlyRoots(heap()).exception(); } +namespace { +// This scope will set the thread-in-wasm flag after the execution of all +// destructors. The thread-in-wasm flag is only set when the scope gets enabled. +class SetThreadInWasmFlagScope { + public: + SetThreadInWasmFlagScope() { + DCHECK_IMPLIES(trap_handler::IsTrapHandlerEnabled(), + !trap_handler::IsThreadInWasm()); + } + + ~SetThreadInWasmFlagScope() { + if (enabled_) trap_handler::SetThreadInWasm(); + } + + void Enable() { enabled_ = true; } + + private: + bool enabled_ = false; +}; +} // namespace + Object Isolate::UnwindAndFindHandler() { + // Create the {SetThreadInWasmFlagScope} first in this function so that its + // destructor gets called after all the other destructors. It is important + // that the destructor sets the thread-in-wasm flag after all other + // destructors. The other destructors may cause exceptions, e.g. ASan on + // Windows, which would invalidate the thread-in-wasm flag when the wasm trap + // handler handles such non-wasm exceptions. + SetThreadInWasmFlagScope set_thread_in_wasm_flag_scope; Object exception = pending_exception(); - DCHECK_IMPLIES(trap_handler::IsTrapHandlerEnabled(), - !trap_handler::IsThreadInWasm()); auto FoundHandler = [&](Context context, Address instruction_start, intptr_t handler_offset, @@ -1771,9 +1797,10 @@ Object Isolate::UnwindAndFindHandler() { StandardFrameConstants::kFixedFrameSizeAboveFp - wasm_code->stack_slots() * kSystemPointerSize; - // This is going to be handled by Wasm, so we need to set the TLS flag. - trap_handler::SetThreadInWasm(); - + // This is going to be handled by WebAssembly, so we need to set the TLS + // flag. The {SetThreadInWasmFlagScope} will set the flag after all + // destructors have been executed. + set_thread_in_wasm_flag_scope.Enable(); return FoundHandler(Context(), wasm_code->instruction_start(), offset, wasm_code->constant_pool(), return_sp, frame->fp()); } @@ -1886,7 +1913,7 @@ Object Isolate::UnwindAndFindHandler() { static_cast<int>(offset)); Code code = - builtins()->builtin(Builtins::kInterpreterEnterBytecodeDispatch); + builtins()->builtin(Builtins::kInterpreterEnterAtBytecode); return FoundHandler(context, code.InstructionStart(), 0, code.constant_pool(), return_sp, frame->fp()); } @@ -2550,6 +2577,29 @@ void Isolate::SetAbortOnUncaughtExceptionCallback( abort_on_uncaught_exception_callback_ = callback; } +void Isolate::InstallConditionalFeatures(Handle<Context> context) { + Handle<JSGlobalObject> global = handle(context->global_object(), this); + Handle<String> sab_name = factory()->SharedArrayBuffer_string(); + if (IsSharedArrayBufferConstructorEnabled(context)) { + if (!JSObject::HasRealNamedProperty(global, sab_name).FromMaybe(true)) { + JSObject::AddProperty(this, global, factory()->SharedArrayBuffer_string(), + shared_array_buffer_fun(), DONT_ENUM); + } + } +} + +bool Isolate::IsSharedArrayBufferConstructorEnabled(Handle<Context> context) { + if (!FLAG_harmony_sharedarraybuffer) return false; + + if (!FLAG_enable_sharedarraybuffer_per_context) return true; + + if (sharedarraybuffer_constructor_enabled_callback()) { + v8::Local<v8::Context> api_context = v8::Utils::ToLocal(context); + return sharedarraybuffer_constructor_enabled_callback()(api_context); + } + return false; +} + bool Isolate::IsWasmSimdEnabled(Handle<Context> context) { #if V8_ENABLE_WEBASSEMBLY if (wasm_simd_enabled_callback()) { @@ -2667,9 +2717,10 @@ void Isolate::UnregisterManagedPtrDestructor(ManagedPtrDestructor* destructor) { } #if V8_ENABLE_WEBASSEMBLY -void Isolate::SetWasmEngine(std::shared_ptr<wasm::WasmEngine> engine) { +void Isolate::SetWasmEngine(wasm::WasmEngine* engine) { DCHECK_NULL(wasm_engine_); // Only call once before {Init}. - wasm_engine_ = std::move(engine); + DCHECK_NOT_NULL(engine); + wasm_engine_ = engine; wasm_engine_->AddIsolate(this); } @@ -2683,7 +2734,6 @@ void Isolate::AddSharedWasmMemory(Handle<WasmMemoryObject> memory_object) { } #endif // V8_ENABLE_WEBASSEMBLY -// NOLINTNEXTLINE Isolate::PerIsolateThreadData::~PerIsolateThreadData() { #if defined(USE_SIMULATOR) delete simulator_; @@ -2854,16 +2904,28 @@ std::atomic<size_t> Isolate::non_disposed_isolates_; #endif // DEBUG // static -Isolate* Isolate::New() { +Isolate* Isolate::New() { return Isolate::Allocate(false); } + +// static +Isolate* Isolate::NewShared(const v8::Isolate::CreateParams& params) { + Isolate* isolate = Isolate::Allocate(true); + v8::Isolate::Initialize(reinterpret_cast<v8::Isolate*>(isolate), params); + return isolate; +} + +// static +Isolate* Isolate::Allocate(bool is_shared) { // IsolateAllocator allocates the memory for the Isolate object according to // the given allocation mode. std::unique_ptr<IsolateAllocator> isolate_allocator = std::make_unique<IsolateAllocator>(); // Construct Isolate object in the allocated memory. void* isolate_ptr = isolate_allocator->isolate_memory(); - Isolate* isolate = new (isolate_ptr) Isolate(std::move(isolate_allocator)); + Isolate* isolate = + new (isolate_ptr) Isolate(std::move(isolate_allocator), is_shared); #ifdef V8_COMPRESS_POINTERS_IN_ISOLATE_CAGE DCHECK(IsAligned(isolate->isolate_root(), kPtrComprCageBaseAlignment)); + DCHECK_EQ(isolate->isolate_root(), isolate->cage_base()); #endif #ifdef DEBUG @@ -2919,12 +2981,13 @@ void Isolate::SetUpFromReadOnlyArtifacts( heap_.SetUpFromReadOnlyHeap(read_only_heap_); } -v8::PageAllocator* Isolate::page_allocator() { +v8::PageAllocator* Isolate::page_allocator() const { return isolate_allocator_->page_allocator(); } -Isolate::Isolate(std::unique_ptr<i::IsolateAllocator> isolate_allocator) - : isolate_data_(this), +Isolate::Isolate(std::unique_ptr<i::IsolateAllocator> isolate_allocator, + bool is_shared) + : isolate_data_(this, isolate_allocator->GetPtrComprCageBase()), isolate_allocator_(std::move(isolate_allocator)), id_(isolate_counter.fetch_add(1, std::memory_order_relaxed)), allocator_(new TracingAccountingAllocator(this)), @@ -2941,7 +3004,8 @@ Isolate::Isolate(std::unique_ptr<i::IsolateAllocator> isolate_allocator) #endif next_module_async_evaluating_ordinal_( SourceTextModule::kFirstAsyncEvaluatingOrdinal), - cancelable_task_manager_(new CancelableTaskManager()) { + cancelable_task_manager_(new CancelableTaskManager()), + is_shared_(is_shared) { TRACE_ISOLATE(constructor); CheckIsolateLayout(); @@ -2951,6 +3015,18 @@ Isolate::Isolate(std::unique_ptr<i::IsolateAllocator> isolate_allocator) handle_scope_data_.Initialize(); + // When pointer compression is on with a per-Isolate cage, allocation in the + // shared Isolate can point into the per-Isolate RO heap as the offsets are + // constant across Isolates. + // + // When pointer compression is on with a shared cage or when pointer + // compression is off, a shared RO heap is required. Otherwise a shared + // allocation requested by a client Isolate could point into the client + // Isolate's RO space (e.g. an RO map) whose pages gets unmapped when it is + // disposed. + CHECK_IMPLIES(is_shared_, COMPRESS_POINTERS_IN_ISOLATE_CAGE_BOOL || + V8_SHARED_RO_HEAP_BOOL); + #define ISOLATE_INIT_EXECUTE(type, name, initial_value) \ name##_ = (initial_value); ISOLATE_INIT_LIST(ISOLATE_INIT_EXECUTE) @@ -2979,6 +3055,11 @@ void Isolate::CheckIsolateLayout() { CHECK_EQ(static_cast<int>( OFFSET_OF(Isolate, isolate_data_.fast_c_call_caller_pc_)), Internals::kIsolateFastCCallCallerPcOffset); + CHECK_EQ(static_cast<int>(OFFSET_OF(Isolate, isolate_data_.cage_base_)), + Internals::kIsolateCageBaseOffset); + CHECK_EQ(static_cast<int>( + OFFSET_OF(Isolate, isolate_data_.long_task_stats_counter_)), + Internals::kIsolateLongTaskStatsCounterOffset); CHECK_EQ(static_cast<int>(OFFSET_OF(Isolate, isolate_data_.stack_guard_)), Internals::kIsolateStackGuardOffset); CHECK_EQ(static_cast<int>(OFFSET_OF(Isolate, isolate_data_.roots_)), @@ -3020,10 +3101,10 @@ void Isolate::Deinit() { #if defined(V8_OS_WIN64) if (win64_unwindinfo::CanRegisterUnwindInfoForNonABICompliantCodeRange() && - heap()->memory_allocator() && RequiresCodeRange()) { - const base::AddressRegion& code_range = - heap()->memory_allocator()->code_range(); - void* start = reinterpret_cast<void*>(code_range.begin()); + heap()->memory_allocator() && RequiresCodeRange() && + heap()->code_range()->AtomicDecrementUnwindInfoUseCount() == 1) { + const base::AddressRegion& code_region = heap()->code_region(); + void* start = reinterpret_cast<void*>(code_region.begin()); win64_unwindinfo::UnregisterNonABICompliantCodeRange(start); } #endif // V8_OS_WIN64 @@ -3044,6 +3125,9 @@ void Isolate::Deinit() { optimizing_compile_dispatcher_ = nullptr; } + // All client isolates should already be detached. + DCHECK_NULL(client_isolate_head_); + // Help sweeper threads complete sweeping to stop faster. heap_.mark_compact_collector()->DrainSweepingWorklists(); heap_.mark_compact_collector()->sweeper()->EnsureIterabilityCompleted(); @@ -3090,6 +3174,10 @@ void Isolate::Deinit() { main_thread_local_isolate_->heap()->FreeLinearAllocationArea(); + if (shared_isolate_) { + DetachFromSharedIsolate(); + } + heap_.TearDown(); main_thread_local_isolate_.reset(); @@ -3098,10 +3186,7 @@ void Isolate::Deinit() { if (logfile != nullptr) base::Fclose(logfile); #if V8_ENABLE_WEBASSEMBLY - if (wasm_engine_) { - wasm_engine_->RemoveIsolate(this); - wasm_engine_.reset(); - } + wasm_engine_->RemoveIsolate(this); #endif // V8_ENABLE_WEBASSEMBLY TearDownEmbeddedBlob(); @@ -3182,6 +3267,8 @@ Isolate::~Isolate() { delete thread_manager_; thread_manager_ = nullptr; + bigint_processor_->Destroy(); + delete global_handles_; global_handles_ = nullptr; delete eternal_handles_; @@ -3389,8 +3476,9 @@ void Isolate::MaybeRemapEmbeddedBuiltinsIntoCodeRange() { CHECK_NOT_NULL(embedded_blob_code_); CHECK_NE(embedded_blob_code_size_, 0); - embedded_blob_code_ = heap_.RemapEmbeddedBuiltinsIntoCodeRange( - embedded_blob_code_, embedded_blob_code_size_); + DCHECK_NOT_NULL(heap_.code_range_); + embedded_blob_code_ = heap_.code_range_->RemapEmbeddedBuiltins( + this, embedded_blob_code_, embedded_blob_code_size_); CHECK_NOT_NULL(embedded_blob_code_); // The un-embedded code blob is already a part of the registered code range // so it's not necessary to register it again. @@ -3474,6 +3562,21 @@ using MapOfLoadsAndStoresPerFunction = std::map<std::string /* function_name */, std::pair<uint64_t /* loads */, uint64_t /* stores */>>; MapOfLoadsAndStoresPerFunction* stack_access_count_map = nullptr; + +class BigIntPlatform : public bigint::Platform { + public: + explicit BigIntPlatform(Isolate* isolate) : isolate_(isolate) {} + ~BigIntPlatform() override = default; + + bool InterruptRequested() override { + StackLimitCheck interrupt_check(isolate_); + return (interrupt_check.InterruptRequested() && + isolate_->stack_guard()->HasTerminationRequest()); + } + + private: + Isolate* isolate_; +}; } // namespace bool Isolate::Init(SnapshotData* startup_snapshot_data, @@ -3522,6 +3625,7 @@ bool Isolate::Init(SnapshotData* startup_snapshot_data, heap_profiler_ = new HeapProfiler(heap()); interpreter_ = new interpreter::Interpreter(this); string_table_.reset(new StringTable(this)); + bigint_processor_ = bigint::Processor::New(new BigIntPlatform(this)); compiler_dispatcher_ = new CompilerDispatcher(this, V8::GetCurrentPlatform(), FLAG_stack_size); @@ -3531,7 +3635,7 @@ bool Isolate::Init(SnapshotData* startup_snapshot_data, metrics_recorder_ = std::make_shared<metrics::Recorder>(); - { // NOLINT + { // Ensure that the thread has a valid stack guard. The v8::Locker object // will ensure this too, but we don't have to use lockers if we are only // using one thread. @@ -3546,24 +3650,32 @@ bool Isolate::Init(SnapshotData* startup_snapshot_data, heap_.SetUpSpaces(); if (V8_SHORT_BUILTIN_CALLS_BOOL && FLAG_short_builtin_calls) { - // Check if the system has more than 4GB of physical memory by comaring - // the old space size with respective threshod value. - is_short_builtin_calls_enabled_ = - heap_.MaxOldGenerationSize() >= kShortBuiltinCallsOldSpaceSizeThreshold; + // Check if the system has more than 4GB of physical memory by comparing the + // old space size with respective threshold value. + // + // Additionally, enable if there is already a process-wide CodeRange that + // has re-embedded builtins. + is_short_builtin_calls_enabled_ = (heap_.MaxOldGenerationSize() >= + kShortBuiltinCallsOldSpaceSizeThreshold); + if (COMPRESS_POINTERS_IN_SHARED_CAGE_BOOL) { + std::shared_ptr<CodeRange> code_range = + CodeRange::GetProcessWideCodeRange(); + if (code_range && code_range->embedded_blob_code_copy() != nullptr) { + is_short_builtin_calls_enabled_ = true; + } + } } // Create LocalIsolate/LocalHeap for the main thread and set state to Running. main_thread_local_isolate_.reset(new LocalIsolate(this, ThreadKind::kMain)); main_thread_local_heap()->Unpark(); + heap_.InitializeMainThreadLocalHeap(main_thread_local_heap()); + isolate_data_.external_reference_table()->Init(this); #if V8_ENABLE_WEBASSEMBLY - // Setup the wasm engine. - if (wasm_engine_ == nullptr) { - SetWasmEngine(wasm::WasmEngine::GetWasmEngine()); - } - DCHECK_NOT_NULL(wasm_engine_); + SetWasmEngine(wasm::WasmEngine::GetWasmEngine()); #endif // V8_ENABLE_WEBASSEMBLY if (setup_delegate_ == nullptr) { @@ -3721,11 +3833,11 @@ bool Isolate::Init(SnapshotData* startup_snapshot_data, } #if defined(V8_OS_WIN64) - if (win64_unwindinfo::CanRegisterUnwindInfoForNonABICompliantCodeRange()) { - const base::AddressRegion& code_range = - heap()->memory_allocator()->code_range(); - void* start = reinterpret_cast<void*>(code_range.begin()); - size_t size_in_bytes = code_range.size(); + if (win64_unwindinfo::CanRegisterUnwindInfoForNonABICompliantCodeRange() && + heap()->code_range()->AtomicIncrementUnwindInfoUseCount() == 0) { + const base::AddressRegion& code_region = heap()->code_region(); + void* start = reinterpret_cast<void*>(code_region.begin()); + size_t size_in_bytes = code_region.size(); win64_unwindinfo::RegisterNonABICompliantCodeRange(start, size_in_bytes); } #endif // V8_OS_WIN64 @@ -3845,6 +3957,7 @@ void Isolate::DumpAndResetStats() { wasm_engine()->DumpAndResetTurboStatistics(); } #endif // V8_ENABLE_WEBASSEMBLY +#if V8_RUNTIME_CALL_STATS if (V8_UNLIKELY(TracingFlags::runtime_stats.load(std::memory_order_relaxed) == v8::tracing::TracingCategoryObserver::ENABLED_BY_NATIVE)) { counters()->worker_thread_runtime_call_stats()->AddToMainTable( @@ -3852,6 +3965,7 @@ void Isolate::DumpAndResetStats() { counters()->runtime_call_stats()->Print(); counters()->runtime_call_stats()->Reset(); } +#endif // V8_RUNTIME_CALL_STATS if (BasicBlockProfiler::Get()->HasData(this)) { StdoutStream out; BasicBlockProfiler::Get()->Print(out, this); @@ -4264,11 +4378,15 @@ MaybeHandle<FixedArray> Isolate::GetImportAssertionsFromArgument( Handle<JSReceiver> import_assertions_object_receiver = Handle<JSReceiver>::cast(import_assertions_object); - Handle<FixedArray> assertion_keys = - KeyAccumulator::GetKeys(import_assertions_object_receiver, - KeyCollectionMode::kOwnOnly, ENUMERABLE_STRINGS, - GetKeysConversion::kConvertToString) - .ToHandleChecked(); + Handle<FixedArray> assertion_keys; + if (!KeyAccumulator::GetKeys(import_assertions_object_receiver, + KeyCollectionMode::kOwnOnly, ENUMERABLE_STRINGS, + GetKeysConversion::kConvertToString) + .ToHandle(&assertion_keys)) { + // This happens if the assertions object is a Proxy whose ownKeys() or + // getOwnPropertyDescriptor() trap throws. + return MaybeHandle<FixedArray>(); + } // The assertions will be passed to the host in the form: [key1, // value1, key2, value2, ...]. @@ -4315,7 +4433,7 @@ void Isolate::SetHostImportModuleDynamicallyCallback( MaybeHandle<JSObject> Isolate::RunHostInitializeImportMetaObjectCallback( Handle<SourceTextModule> module) { - CHECK(module->import_meta().IsTheHole(this)); + CHECK(module->import_meta(kAcquireLoad).IsTheHole(this)); Handle<JSObject> import_meta = factory()->NewJSObjectWithNullProto(); if (host_initialize_import_meta_object_callback_ != nullptr) { v8::Local<v8::Context> api_context = @@ -4894,6 +5012,18 @@ MaybeLocal<v8::Context> Isolate::GetContextFromRecorderContextId( return result->second.Get(reinterpret_cast<v8::Isolate*>(this)); } +void Isolate::UpdateLongTaskStats() { + if (last_long_task_stats_counter_ != isolate_data_.long_task_stats_counter_) { + last_long_task_stats_counter_ = isolate_data_.long_task_stats_counter_; + long_task_stats_ = v8::metrics::LongTaskStats{}; + } +} + +v8::metrics::LongTaskStats* Isolate::GetCurrentLongTaskStats() { + UpdateLongTaskStats(); + return &long_task_stats_; +} + void Isolate::RemoveContextIdCallback(const v8::WeakCallbackInfo<void>& data) { Isolate* isolate = reinterpret_cast<Isolate*>(data.GetIsolate()); uintptr_t context_id = reinterpret_cast<uintptr_t>(data.GetParameter()); @@ -4970,5 +5100,54 @@ Address Isolate::store_to_stack_count_address(const char* function_name) { return reinterpret_cast<Address>(&map[name].second); } +void Isolate::AttachToSharedIsolate(Isolate* shared) { + DCHECK(shared->is_shared()); + DCHECK_NULL(shared_isolate_); + shared->AppendAsClientIsolate(this); + shared_isolate_ = shared; + heap()->InitSharedSpaces(); +} + +void Isolate::DetachFromSharedIsolate() { + DCHECK_NOT_NULL(shared_isolate_); + shared_isolate_->RemoveAsClientIsolate(this); + shared_isolate_ = nullptr; + heap()->DeinitSharedSpaces(); +} + +void Isolate::AppendAsClientIsolate(Isolate* client) { + base::MutexGuard guard(&client_isolate_mutex_); + + DCHECK_NULL(client->prev_client_isolate_); + DCHECK_NULL(client->next_client_isolate_); + DCHECK_NE(client_isolate_head_, client); + + if (client_isolate_head_) { + client_isolate_head_->prev_client_isolate_ = client; + } + + client->prev_client_isolate_ = nullptr; + client->next_client_isolate_ = client_isolate_head_; + + client_isolate_head_ = client; +} + +void Isolate::RemoveAsClientIsolate(Isolate* client) { + base::MutexGuard guard(&client_isolate_mutex_); + + if (client->next_client_isolate_) { + client->next_client_isolate_->prev_client_isolate_ = + client->prev_client_isolate_; + } + + if (client->prev_client_isolate_) { + client->prev_client_isolate_->next_client_isolate_ = + client->next_client_isolate_; + } else { + DCHECK_EQ(client_isolate_head_, client); + client_isolate_head_ = client->next_client_isolate_; + } +} + } // namespace internal } // namespace v8 diff --git a/deps/v8/src/execution/isolate.h b/deps/v8/src/execution/isolate.h index 031ec87812..f55af20acd 100644 --- a/deps/v8/src/execution/isolate.h +++ b/deps/v8/src/execution/isolate.h @@ -13,7 +13,6 @@ #include <unordered_map> #include <vector> -#include "include/v8-inspector.h" #include "include/v8-internal.h" #include "include/v8-metrics.h" #include "include/v8.h" @@ -48,12 +47,20 @@ class UMemory; } // namespace U_ICU_NAMESPACE #endif // V8_INTL_SUPPORT +namespace v8_inspector { +class V8Inspector; +} // namespace v8_inspector + namespace v8 { namespace base { class RandomNumberGenerator; } // namespace base +namespace bigint { +class Processor; +} + namespace debug { class ConsoleDelegate; class AsyncEventDelegate; @@ -430,6 +437,8 @@ using DebugObjectCache = std::vector<Handle<HeapObject>>; V(AllowWasmCodeGenerationCallback, allow_wasm_code_gen_callback, nullptr) \ V(ExtensionCallback, wasm_module_callback, &NoExtension) \ V(ExtensionCallback, wasm_instance_callback, &NoExtension) \ + V(SharedArrayBufferConstructorEnabledCallback, \ + sharedarraybuffer_constructor_enabled_callback, nullptr) \ V(WasmStreamingCallback, wasm_streaming_callback, nullptr) \ V(WasmLoadSourceMapCallback, wasm_load_source_map_callback, nullptr) \ V(WasmSimdEnabledCallback, wasm_simd_enabled_callback, nullptr) \ @@ -548,6 +557,9 @@ class V8_EXPORT_PRIVATE Isolate final : private HiddenFactory { // new operator. static Isolate* New(); + // Creates a new shared Isolate object. + static Isolate* NewShared(const v8::Isolate::CreateParams& params); + // Deletes Isolate object. Must be used instead of delete operator. // Destroys the non-default isolates. // Sets default isolate into "has_been_disposed" state rather then destroying, @@ -559,7 +571,7 @@ class V8_EXPORT_PRIVATE Isolate final : private HiddenFactory { void set_read_only_heap(ReadOnlyHeap* ro_heap) { read_only_heap_ = ro_heap; } // Page allocator that must be used for allocating V8 heap pages. - v8::PageAllocator* page_allocator(); + v8::PageAllocator* page_allocator() const; // Returns the PerIsolateThreadData for the current thread (or nullptr if one // is not currently set). @@ -659,12 +671,12 @@ class V8_EXPORT_PRIVATE Isolate final : private HiddenFactory { base::SharedMutex* map_updater_access() { return &map_updater_access_; } // The isolate's string table. - StringTable* string_table() { return string_table_.get(); } + StringTable* string_table() const { return string_table_.get(); } Address get_address_from_id(IsolateAddressId id); // Access to top context (where the current function object was created). - Context context() { return thread_local_top()->context_; } + Context context() const { return thread_local_top()->context_; } inline void set_context(Context context); Context* context_address() { return &thread_local_top()->context_; } @@ -681,6 +693,10 @@ class V8_EXPORT_PRIVATE Isolate final : private HiddenFactory { inline void set_pending_exception(Object exception_obj); inline void clear_pending_exception(); + void InstallConditionalFeatures(Handle<Context> context); + + bool IsSharedArrayBufferConstructorEnabled(Handle<Context> context); + bool IsWasmSimdEnabled(Handle<Context> context); bool AreWasmExceptionsEnabled(Handle<Context> context); @@ -1021,6 +1037,25 @@ class V8_EXPORT_PRIVATE Isolate final : private HiddenFactory { const IsolateData* isolate_data() const { return &isolate_data_; } IsolateData* isolate_data() { return &isolate_data_; } + // When pointer compression is on, this is the base address of the pointer + // compression cage, and the kPtrComprCageBaseRegister is set to this + // value. When pointer compression is off, this is always kNullAddress. + Address cage_base() const { + DCHECK_IMPLIES(!COMPRESS_POINTERS_IN_ISOLATE_CAGE_BOOL && + !COMPRESS_POINTERS_IN_SHARED_CAGE_BOOL, + isolate_data()->cage_base() == kNullAddress); + return isolate_data()->cage_base(); + } + + // When pointer compression is on, the PtrComprCage used by this + // Isolate. Otherwise nullptr. + VirtualMemoryCage* GetPtrComprCage() { + return isolate_allocator_->GetPtrComprCage(); + } + const VirtualMemoryCage* GetPtrComprCage() const { + return isolate_allocator_->GetPtrComprCage(); + } + // Generated code can embed this address to get access to the isolate-specific // data (for example, roots, external references, builtins, etc.). // The kRootRegister is set to this value. @@ -1047,7 +1082,7 @@ class V8_EXPORT_PRIVATE Isolate final : private HiddenFactory { sizeof(IsolateData)); } - Object root(RootIndex index) { return Object(roots_table()[index]); } + Object root(RootIndex index) const { return Object(roots_table()[index]); } Handle<Object> root_handle(RootIndex index) { return Handle<Object>(&roots_table()[index]); @@ -1063,8 +1098,8 @@ class V8_EXPORT_PRIVATE Isolate final : private HiddenFactory { bool IsBuiltinsTableHandleLocation(Address* handle_location); - StubCache* load_stub_cache() { return load_stub_cache_; } - StubCache* store_stub_cache() { return store_stub_cache_; } + StubCache* load_stub_cache() const { return load_stub_cache_; } + StubCache* store_stub_cache() const { return store_stub_cache_; } Deoptimizer* GetAndClearCurrentDeoptimizer() { Deoptimizer* result = current_deoptimizer_; CHECK_NOT_NULL(result); @@ -1101,32 +1136,34 @@ class V8_EXPORT_PRIVATE Isolate final : private HiddenFactory { THREAD_LOCAL_TOP_ADDRESS(Address, thread_in_wasm_flag_address) - MaterializedObjectStore* materialized_object_store() { + MaterializedObjectStore* materialized_object_store() const { return materialized_object_store_; } - DescriptorLookupCache* descriptor_lookup_cache() { + DescriptorLookupCache* descriptor_lookup_cache() const { return descriptor_lookup_cache_; } HandleScopeData* handle_scope_data() { return &handle_scope_data_; } - HandleScopeImplementer* handle_scope_implementer() { + HandleScopeImplementer* handle_scope_implementer() const { DCHECK(handle_scope_implementer_); return handle_scope_implementer_; } - UnicodeCache* unicode_cache() { return unicode_cache_; } + UnicodeCache* unicode_cache() const { return unicode_cache_; } InnerPointerToCodeCache* inner_pointer_to_code_cache() { return inner_pointer_to_code_cache_; } - GlobalHandles* global_handles() { return global_handles_; } + GlobalHandles* global_handles() const { return global_handles_; } + + EternalHandles* eternal_handles() const { return eternal_handles_; } - EternalHandles* eternal_handles() { return eternal_handles_; } + ThreadManager* thread_manager() const { return thread_manager_; } - ThreadManager* thread_manager() { return thread_manager_; } + bigint::Processor* bigint_processor() { return bigint_processor_; } #ifndef V8_INTL_SUPPORT unibrow::Mapping<unibrow::Ecma262UnCanonicalize>* jsregexp_uncanonicalize() { @@ -1147,14 +1184,16 @@ class V8_EXPORT_PRIVATE Isolate final : private HiddenFactory { Builtins* builtins() { return &builtins_; } - RegExpStack* regexp_stack() { return regexp_stack_; } + RegExpStack* regexp_stack() const { return regexp_stack_; } - size_t total_regexp_code_generated() { return total_regexp_code_generated_; } + size_t total_regexp_code_generated() const { + return total_regexp_code_generated_; + } void IncreaseTotalRegexpCodeGenerated(Handle<HeapObject> code); std::vector<int>* regexp_indices() { return ®exp_indices_; } - Debug* debug() { return debug_; } + Debug* debug() const { return debug_; } void* is_profiling_address() { return &is_profiling_; } @@ -1178,8 +1217,7 @@ class V8_EXPORT_PRIVATE Isolate final : private HiddenFactory { v8::internal::Factory* factory() { // Upcast to the privately inherited base-class using c-style casts to avoid // undefined behavior (as static_cast cannot cast across private bases). - // NOLINTNEXTLINE (google-readability-casting) - return (v8::internal::Factory*)this; // NOLINT(readability/casting) + return (v8::internal::Factory*)this; } static const int kJSRegexpStaticOffsetsVectorSize = 128; @@ -1192,7 +1230,7 @@ class V8_EXPORT_PRIVATE Isolate final : private HiddenFactory { DCHECK_LT(slot, Internals::kNumIsolateDataSlots); isolate_data_.embedder_data_[slot] = data; } - void* GetData(uint32_t slot) { + void* GetData(uint32_t slot) const { DCHECK_LT(slot, Internals::kNumIsolateDataSlots); return isolate_data_.embedder_data_[slot]; } @@ -1205,7 +1243,7 @@ class V8_EXPORT_PRIVATE Isolate final : private HiddenFactory { return snapshot_blob_ != nullptr && snapshot_blob_->raw_size != 0; } - bool IsDead() { return has_fatal_error_; } + bool IsDead() const { return has_fatal_error_; } void SignalFatalError() { has_fatal_error_ = true; } bool use_optimizer(); @@ -1261,11 +1299,11 @@ class V8_EXPORT_PRIVATE Isolate final : private HiddenFactory { void MaybeInitializeVectorListFromHeap(); - double time_millis_since_init() { + double time_millis_since_init() const { return heap_.MonotonicallyIncreasingTimeInMs() - time_millis_at_init_; } - DateCache* date_cache() { return date_cache_; } + DateCache* date_cache() const { return date_cache_; } void set_date_cache(DateCache* date_cache); @@ -1319,7 +1357,7 @@ class V8_EXPORT_PRIVATE Isolate final : private HiddenFactory { std::unique_ptr<PersistentHandles> NewPersistentHandles(); - PersistentHandlesList* persistent_handles_list() { + PersistentHandlesList* persistent_handles_list() const { return persistent_handles_list_.get(); } @@ -1666,8 +1704,9 @@ class V8_EXPORT_PRIVATE Isolate final : private HiddenFactory { } #if V8_ENABLE_WEBASSEMBLY - wasm::WasmEngine* wasm_engine() const { return wasm_engine_.get(); } - void SetWasmEngine(std::shared_ptr<wasm::WasmEngine> engine); + // TODO(wasm): Replace all uses by {WasmEngine::GetWasmEngine}? + wasm::WasmEngine* wasm_engine() const { return wasm_engine_; } + void SetWasmEngine(wasm::WasmEngine* engine); void AddSharedWasmMemory(Handle<WasmMemoryObject> memory_object); #endif // V8_ENABLE_WEBASSEMBLY @@ -1701,6 +1740,9 @@ class V8_EXPORT_PRIVATE Isolate final : private HiddenFactory { MaybeLocal<v8::Context> GetContextFromRecorderContextId( v8::metrics::Recorder::ContextId id); + void UpdateLongTaskStats(); + v8::metrics::LongTaskStats* GetCurrentLongTaskStats(); + LocalIsolate* main_thread_local_isolate() { return main_thread_local_isolate_.get(); } @@ -1731,8 +1773,17 @@ class V8_EXPORT_PRIVATE Isolate final : private HiddenFactory { using IsDebugActive = HasAsyncEventDelegate::Next<bool, 1>; }; + bool is_shared() { return is_shared_; } + Isolate* shared_isolate() { return shared_isolate_; } + + void AttachToSharedIsolate(Isolate* shared); + void DetachFromSharedIsolate(); + + bool HasClientIsolates() const { return client_isolate_head_; } + private: - explicit Isolate(std::unique_ptr<IsolateAllocator> isolate_allocator); + explicit Isolate(std::unique_ptr<IsolateAllocator> isolate_allocator, + bool is_shared); ~Isolate(); bool Init(SnapshotData* startup_snapshot_data, @@ -1743,6 +1794,10 @@ class V8_EXPORT_PRIVATE Isolate final : private HiddenFactory { void InitializeCodeRanges(); void AddCodeMemoryRange(MemoryRange range); + // Common method to create an Isolate used by Isolate::New() and + // Isolate::NewShared(). + static Isolate* Allocate(bool is_shared); + static void RemoveContextIdCallback(const v8::WeakCallbackInfo<void>& data); class ThreadDataTable { @@ -1843,6 +1898,10 @@ class V8_EXPORT_PRIVATE Isolate final : private HiddenFactory { // Returns the Exception sentinel. Object ThrowInternal(Object exception, MessageLocation* location); + // Methods for appending and removing to/from client isolates list. + void AppendAsClientIsolate(Isolate* client); + void RemoveAsClientIsolate(Isolate* client); + // This class contains a collection of data accessible from both C++ runtime // and compiled code (including assembly stubs, builtins, interpreter bytecode // handlers and optimized code). @@ -1888,6 +1947,7 @@ class V8_EXPORT_PRIVATE Isolate final : private HiddenFactory { GlobalHandles* global_handles_ = nullptr; EternalHandles* eternal_handles_ = nullptr; ThreadManager* thread_manager_ = nullptr; + bigint::Processor* bigint_processor_ = nullptr; RuntimeState runtime_state_; Builtins builtins_; SetupIsolateDelegate* setup_delegate_ = nullptr; @@ -2047,6 +2107,9 @@ class V8_EXPORT_PRIVATE Isolate final : private HiddenFactory { Persistent<v8::Context, v8::CopyablePersistentTraits<v8::Context>>> recorder_context_id_map_; + size_t last_long_task_stats_counter_ = 0; + v8::metrics::LongTaskStats long_task_stats_; + std::vector<Object> startup_object_cache_; // Used during builtins compilation to build the builtins constants table, @@ -2094,7 +2157,7 @@ class V8_EXPORT_PRIVATE Isolate final : private HiddenFactory { size_t elements_deletion_counter_ = 0; #if V8_ENABLE_WEBASSEMBLY - std::shared_ptr<wasm::WasmEngine> wasm_engine_; + wasm::WasmEngine* wasm_engine_ = nullptr; #endif // V8_ENABLE_WEBASSEMBLY std::unique_ptr<TracingCpuProfilerImpl> tracing_cpu_profiler_; @@ -2113,6 +2176,23 @@ class V8_EXPORT_PRIVATE Isolate final : private HiddenFactory { base::Mutex thread_data_table_mutex_; ThreadDataTable thread_data_table_; + // Set to true if this isolate is used as shared heap. + const bool is_shared_; + + // Stores the shared isolate for this client isolate. nullptr for shared + // isolates or when no shared isolate is used. + Isolate* shared_isolate_ = nullptr; + + // A shared isolate will use these two fields to track all its client + // isolates. + base::Mutex client_isolate_mutex_; + Isolate* client_isolate_head_ = nullptr; + + // Used to form a linked list of all client isolates. Protected by + // client_isolate_mutex_. + Isolate* prev_client_isolate_ = nullptr; + Isolate* next_client_isolate_ = nullptr; + // A signal-safe vector of heap pages containing code. Used with the // v8::Unwinder API. std::atomic<std::vector<MemoryRange>*> code_pages_{nullptr}; diff --git a/deps/v8/src/execution/local-isolate-inl.h b/deps/v8/src/execution/local-isolate-inl.h index 318cc10fa4..59a7b1f5e4 100644 --- a/deps/v8/src/execution/local-isolate-inl.h +++ b/deps/v8/src/execution/local-isolate-inl.h @@ -12,7 +12,7 @@ namespace v8 { namespace internal { -Address LocalIsolate::isolate_root() const { return isolate_->isolate_root(); } +Address LocalIsolate::cage_base() const { return isolate_->cage_base(); } ReadOnlyHeap* LocalIsolate::read_only_heap() const { return isolate_->read_only_heap(); } diff --git a/deps/v8/src/execution/local-isolate.h b/deps/v8/src/execution/local-isolate.h index 91192d5f0f..5392534d66 100644 --- a/deps/v8/src/execution/local-isolate.h +++ b/deps/v8/src/execution/local-isolate.h @@ -50,7 +50,7 @@ class V8_EXPORT_PRIVATE LocalIsolate final : private HiddenLocalFactory { LocalHeap* heap() { return &heap_; } - inline Address isolate_root() const; + inline Address cage_base() const; inline ReadOnlyHeap* read_only_heap() const; inline Object root(RootIndex index) const; @@ -62,8 +62,7 @@ class V8_EXPORT_PRIVATE LocalIsolate final : private HiddenLocalFactory { v8::internal::LocalFactory* factory() { // Upcast to the privately inherited base-class using c-style casts to avoid // undefined behavior (as static_cast cannot cast across private bases). - // NOLINTNEXTLINE (google-readability-casting) - return (v8::internal::LocalFactory*)this; // NOLINT(readability/casting) + return (v8::internal::LocalFactory*)this; } bool has_pending_exception() const { return false; } diff --git a/deps/v8/src/execution/messages.cc b/deps/v8/src/execution/messages.cc index a8b7ad23ca..f72ff6b02c 100644 --- a/deps/v8/src/execution/messages.cc +++ b/deps/v8/src/execution/messages.cc @@ -186,8 +186,7 @@ void MessageHandler::ReportMessageNoExceptions( FUNCTION_CAST<v8::MessageCallback>(callback_obj.foreign_address()); Handle<Object> callback_data(listener.get(1), isolate); { - RuntimeCallTimerScope timer( - isolate, RuntimeCallCounterId::kMessageListenerCallback); + RCS_SCOPE(isolate, RuntimeCallCounterId::kMessageListenerCallback); // Do not allow exceptions to propagate. v8::TryCatch try_catch(reinterpret_cast<v8::Isolate*>(isolate)); callback(api_message_obj, callback_data->IsUndefined(isolate) @@ -483,7 +482,8 @@ MaybeHandle<String> MessageFormatter::Format(Isolate* isolate, MaybeHandle<JSObject> ErrorUtils::Construct(Isolate* isolate, Handle<JSFunction> target, Handle<Object> new_target, - Handle<Object> message) { + Handle<Object> message, + Handle<Object> options) { FrameSkipMode mode = SKIP_FIRST; Handle<Object> caller; @@ -495,15 +495,15 @@ MaybeHandle<JSObject> ErrorUtils::Construct(Isolate* isolate, caller = new_target; } - return ErrorUtils::Construct(isolate, target, new_target, message, mode, - caller, + return ErrorUtils::Construct(isolate, target, new_target, message, options, + mode, caller, ErrorUtils::StackTraceCollection::kDetailed); } MaybeHandle<JSObject> ErrorUtils::Construct( Isolate* isolate, Handle<JSFunction> target, Handle<Object> new_target, - Handle<Object> message, FrameSkipMode mode, Handle<Object> caller, - StackTraceCollection stack_trace_collection) { + Handle<Object> message, Handle<Object> options, FrameSkipMode mode, + Handle<Object> caller, StackTraceCollection stack_trace_collection) { if (FLAG_correctness_fuzzer_suppressions) { // Abort range errors in correctness fuzzing, as their causes differ // accross correctness-fuzzing scenarios. @@ -536,7 +536,6 @@ MaybeHandle<JSObject> ErrorUtils::Construct( // true, [[Enumerable]]: false, [[Configurable]]: true}. // c. Perform ! DefinePropertyOrThrow(O, "message", msgDesc). // 4. Return O. - if (!message->IsUndefined(isolate)) { Handle<String> msg_string; ASSIGN_RETURN_ON_EXCEPTION(isolate, msg_string, @@ -548,6 +547,31 @@ MaybeHandle<JSObject> ErrorUtils::Construct( JSObject); } + if (FLAG_harmony_error_cause && !options->IsUndefined(isolate)) { + // If Type(options) is Object and ? HasProperty(options, "cause") then + // a. Let cause be ? Get(options, "cause"). + // b. Perform ! CreateNonEnumerableDataPropertyOrThrow(O, "cause", cause). + Handle<Name> cause_string = isolate->factory()->cause_string(); + if (options->IsJSReceiver()) { + Handle<JSReceiver> js_options = Handle<JSReceiver>::cast(options); + Maybe<bool> has_cause = JSObject::HasProperty(js_options, cause_string); + if (has_cause.IsNothing()) { + DCHECK((isolate)->has_pending_exception()); + return MaybeHandle<JSObject>(); + } + if (has_cause.ToChecked()) { + Handle<Object> cause; + ASSIGN_RETURN_ON_EXCEPTION( + isolate, cause, + JSObject::GetProperty(isolate, js_options, cause_string), JSObject); + RETURN_ON_EXCEPTION(isolate, + JSObject::SetOwnPropertyIgnoreAttributes( + err, cause_string, cause, DONT_ENUM), + JSObject); + } + } + } + switch (stack_trace_collection) { case StackTraceCollection::kDetailed: RETURN_ON_EXCEPTION( @@ -676,14 +700,15 @@ Handle<JSObject> ErrorUtils::MakeGenericError( isolate->clear_pending_exception(); } Handle<String> msg = DoFormatMessage(isolate, index, arg0, arg1, arg2); + Handle<Object> options = isolate->factory()->undefined_value(); DCHECK(mode != SKIP_UNTIL_SEEN); Handle<Object> no_caller; // The call below can't fail because constructor is a builtin. DCHECK(constructor->shared().HasBuiltinId()); - return ErrorUtils::Construct(isolate, constructor, constructor, msg, mode, - no_caller, StackTraceCollection::kDetailed) + return ErrorUtils::Construct(isolate, constructor, constructor, msg, options, + mode, no_caller, StackTraceCollection::kDetailed) .ToHandleChecked(); } diff --git a/deps/v8/src/execution/messages.h b/deps/v8/src/execution/messages.h index 43f99d1797..ad2d76f59e 100644 --- a/deps/v8/src/execution/messages.h +++ b/deps/v8/src/execution/messages.h @@ -77,11 +77,12 @@ class ErrorUtils : public AllStatic { static MaybeHandle<JSObject> Construct(Isolate* isolate, Handle<JSFunction> target, Handle<Object> new_target, - Handle<Object> message); + Handle<Object> message, + Handle<Object> options); static MaybeHandle<JSObject> Construct( Isolate* isolate, Handle<JSFunction> target, Handle<Object> new_target, - Handle<Object> message, FrameSkipMode mode, Handle<Object> caller, - StackTraceCollection stack_trace_collection); + Handle<Object> message, Handle<Object> options, FrameSkipMode mode, + Handle<Object> caller, StackTraceCollection stack_trace_collection); static MaybeHandle<String> ToString(Isolate* isolate, Handle<Object> recv); diff --git a/deps/v8/src/execution/microtask-queue.cc b/deps/v8/src/execution/microtask-queue.cc index 496737b03a..cae642e2c9 100644 --- a/deps/v8/src/execution/microtask-queue.cc +++ b/deps/v8/src/execution/microtask-queue.cc @@ -113,6 +113,16 @@ void MicrotaskQueue::EnqueueMicrotask(Microtask microtask) { void MicrotaskQueue::PerformCheckpoint(v8::Isolate* v8_isolate) { if (!IsRunningMicrotasks() && !GetMicrotasksScopeDepth() && !HasMicrotasksSuppressions()) { + std::unique_ptr<MicrotasksScope> microtasks_scope; + if (microtasks_policy_ == v8::MicrotasksPolicy::kScoped) { + // If we're using microtask scopes to schedule microtask execution, V8 + // API calls will check that there's always a microtask scope on the + // stack. As the microtasks we're about to execute could invoke embedder + // callbacks which then calls back into V8, we create an artificial + // microtask scope here to avoid running into the CallDepthScope check. + microtasks_scope.reset(new v8::MicrotasksScope( + v8_isolate, this, v8::MicrotasksScope::kDoNotRunMicrotasks)); + } Isolate* isolate = reinterpret_cast<Isolate*>(v8_isolate); RunMicrotasks(isolate); isolate->ClearKeptObjects(); diff --git a/deps/v8/src/execution/mips/simulator-mips.cc b/deps/v8/src/execution/mips/simulator-mips.cc index ca402dca04..3c9c252310 100644 --- a/deps/v8/src/execution/mips/simulator-mips.cc +++ b/deps/v8/src/execution/mips/simulator-mips.cc @@ -47,7 +47,7 @@ uint32_t get_fcsr_condition_bit(uint32_t cc) { // SScanF not being implemented in a platform independent was through // ::v8::internal::OS in the same way as SNPrintF is that the Windows C Run-Time // Library does not provide vsscanf. -#define SScanF sscanf // NOLINT +#define SScanF sscanf // The MipsDebugger class is used by the simulator while debugging simulated // code. diff --git a/deps/v8/src/execution/mips64/simulator-mips64.cc b/deps/v8/src/execution/mips64/simulator-mips64.cc index 198022b3a4..2ab945f88d 100644 --- a/deps/v8/src/execution/mips64/simulator-mips64.cc +++ b/deps/v8/src/execution/mips64/simulator-mips64.cc @@ -64,7 +64,7 @@ static int64_t MultiplyHighSigned(int64_t u, int64_t v) { // SScanF not being implemented in a platform independent was through // ::v8::internal::OS in the same way as SNPrintF is that the Windows C Run-Time // Library does not provide vsscanf. -#define SScanF sscanf // NOLINT +#define SScanF sscanf // The MipsDebugger class is used by the simulator while debugging simulated // code. diff --git a/deps/v8/src/execution/ppc/simulator-ppc.cc b/deps/v8/src/execution/ppc/simulator-ppc.cc index c812af360e..f9b9552433 100644 --- a/deps/v8/src/execution/ppc/simulator-ppc.cc +++ b/deps/v8/src/execution/ppc/simulator-ppc.cc @@ -39,7 +39,7 @@ DEFINE_LAZY_LEAKY_OBJECT_GETTER(Simulator::GlobalMonitor, // SScanF not being implemented in a platform independent way through // ::v8::internal::OS in the same way as SNPrintF is that the // Windows C Run-Time Library does not provide vsscanf. -#define SScanF sscanf // NOLINT +#define SScanF sscanf // The PPCDebugger class is used by the simulator while debugging simulated // PowerPC code. @@ -1138,7 +1138,7 @@ void Simulator::SoftwareInterrupt(Instruction* instr) { SimulatorRuntimeDirectGetterCall target = reinterpret_cast<SimulatorRuntimeDirectGetterCall>(external); if (!ABI_PASSES_HANDLES_IN_REGS) { - arg[0] = *(reinterpret_cast<intptr_t*>(arg[0])); + arg[0] = bit_cast<intptr_t>(arg[0]); } target(arg[0], arg[1]); } else if (redirection->type() == @@ -1157,7 +1157,7 @@ void Simulator::SoftwareInterrupt(Instruction* instr) { SimulatorRuntimeProfilingGetterCall target = reinterpret_cast<SimulatorRuntimeProfilingGetterCall>(external); if (!ABI_PASSES_HANDLES_IN_REGS) { - arg[0] = *(reinterpret_cast<intptr_t*>(arg[0])); + arg[0] = bit_cast<intptr_t>(arg[0]); } target(arg[0], arg[1], Redirection::ReverseRedirection(arg[2])); } else { @@ -2464,6 +2464,10 @@ void Simulator::ExecuteGeneric(Instruction* instr) { DCHECK_EQ(instr->Bit(0), 1); set_simd_register_by_lane<int64_t>(frt, 0, static_cast<int64_t>(ra_val)); + // Low 64 bits of the result is undefined, + // Which is simulated here by adding random bits. + set_simd_register_by_lane<int64_t>( + frt, 1, static_cast<int64_t>(0x123456789ABCD)); } break; } @@ -3913,8 +3917,7 @@ void Simulator::ExecuteGeneric(Instruction* instr) { case STVX: { DECODE_VX_INSTRUCTION(vrs, ra, rb, S) GET_ADDRESS(ra, rb, ra_val, rb_val) - __int128 vrs_val = - *(reinterpret_cast<__int128*>(get_simd_register(vrs).int8)); + __int128 vrs_val = bit_cast<__int128>(get_simd_register(vrs).int8); WriteQW((ra_val + rb_val) & 0xFFFFFFFFFFFFFFF0, vrs_val); break; } @@ -3926,6 +3929,14 @@ void Simulator::ExecuteGeneric(Instruction* instr) { xt, 1, ReadDW(ra_val + rb_val + kSystemPointerSize)); break; } + case LXVX: { + DECODE_VX_INSTRUCTION(vrt, ra, rb, T) + GET_ADDRESS(ra, rb, ra_val, rb_val) + intptr_t addr = ra_val + rb_val; + simdr_t* ptr = reinterpret_cast<simdr_t*>(addr); + set_simd_register(vrt, *ptr); + break; + } case STXVD: { DECODE_VX_INSTRUCTION(xs, ra, rb, S) GET_ADDRESS(ra, rb, ra_val, rb_val) @@ -3934,6 +3945,14 @@ void Simulator::ExecuteGeneric(Instruction* instr) { get_simd_register_by_lane<int64_t>(xs, 1)); break; } + case STXVX: { + DECODE_VX_INSTRUCTION(vrs, ra, rb, S) + GET_ADDRESS(ra, rb, ra_val, rb_val) + intptr_t addr = ra_val + rb_val; + __int128 vrs_val = bit_cast<__int128>(get_simd_register(vrs).int8); + WriteQW(addr, vrs_val); + break; + } case LXSIBZX: { DECODE_VX_INSTRUCTION(xt, ra, rb, T) GET_ADDRESS(ra, rb, ra_val, rb_val) @@ -3982,6 +4001,15 @@ void Simulator::ExecuteGeneric(Instruction* instr) { WriteDW(ra_val + rb_val, get_simd_register_by_lane<int64_t>(xs, 0)); break; } + case XXBRQ: { + int t = instr->RTValue(); + int b = instr->RBValue(); + __int128 xb_val = bit_cast<__int128>(get_simd_register(b).int8); + __int128 xb_val_reversed = __builtin_bswap128(xb_val); + simdr_t simdr_xb = bit_cast<simdr_t>(xb_val_reversed); + set_simd_register(t, simdr_xb); + break; + } #define VSPLT(type) \ uint32_t uim = instr->Bits(20, 16); \ int vrt = instr->RTValue(); \ @@ -4749,7 +4777,7 @@ void Simulator::ExecuteGeneric(Instruction* instr) { DECODE_VX_INSTRUCTION(t, a, b, T) uint16_t result_bits = 0; unsigned __int128 src_bits = - *(reinterpret_cast<__int128*>(get_simd_register(a).int8)); + bit_cast<__int128>(get_simd_register(a).int8); for (int i = 0; i < kSimd128Size; i++) { result_bits <<= 1; uint8_t selected_bit_index = get_simd_register_by_lane<uint8_t>(b, i); @@ -4871,6 +4899,14 @@ void Simulator::ExecuteGeneric(Instruction* instr) { VECTOR_UNARY_OP(float, base::RecipSqrt) break; } + case VNEGW: { + VECTOR_UNARY_OP(int32_t, -) + break; + } + case VNEGD: { + VECTOR_UNARY_OP(int64_t, -) + break; + } #undef VECTOR_UNARY_OP #define VECTOR_ROUNDING_AVERAGE(intermediate_type, result_type) \ DECODE_VX_INSTRUCTION(t, a, b, T) \ @@ -4911,7 +4947,7 @@ void Simulator::ExecuteGeneric(Instruction* instr) { break; } } -} // NOLINT +} void Simulator::Trace(Instruction* instr) { disasm::NameConverter converter; @@ -4981,7 +5017,7 @@ void Simulator::CallInternal(Address entry) { // Prepare to execute the code at entry if (ABI_USES_FUNCTION_DESCRIPTORS) { // entry is the function descriptor - set_pc(*(reinterpret_cast<intptr_t*>(entry))); + set_pc(*(bit_cast<intptr_t*>(entry))); } else { // entry is the instruction address set_pc(static_cast<intptr_t>(entry)); diff --git a/deps/v8/src/execution/ppc/simulator-ppc.h b/deps/v8/src/execution/ppc/simulator-ppc.h index bacd844be0..2dea5c00ca 100644 --- a/deps/v8/src/execution/ppc/simulator-ppc.h +++ b/deps/v8/src/execution/ppc/simulator-ppc.h @@ -321,6 +321,18 @@ class Simulator : public SimulatorBase { } } + // Byte Reverse. + static inline __uint128_t __builtin_bswap128(__uint128_t v) { + union { + uint64_t u64[2]; + __uint128_t u128; + } res, val; + val.u128 = v; + res.u64[0] = __builtin_bswap64(val.u64[1]); + res.u64[1] = __builtin_bswap64(val.u64[0]); + return res.u128; + } + #define RW_VAR_LIST(V) \ V(QWU, unsigned __int128) \ V(QW, __int128) \ diff --git a/deps/v8/src/execution/protectors.h b/deps/v8/src/execution/protectors.h index c4ca49d948..aa89275c11 100644 --- a/deps/v8/src/execution/protectors.h +++ b/deps/v8/src/execution/protectors.h @@ -26,6 +26,8 @@ class Protectors : public AllStatic { is_concat_spreadable_protector) \ V(NoElements, NoElementsProtector, no_elements_protector) \ \ + V(MegaDOM, MegaDOMProtector, mega_dom_protector) \ + \ /* The MapIterator protector protects the original iteration behaviors */ \ /* of Map.prototype.keys(), Map.prototype.values(), and */ \ /* Set.prototype.entries(). It does not protect the original iteration */ \ diff --git a/deps/v8/src/execution/riscv64/simulator-riscv64.cc b/deps/v8/src/execution/riscv64/simulator-riscv64.cc index 1d38d8c0ca..e8f16155be 100644 --- a/deps/v8/src/execution/riscv64/simulator-riscv64.cc +++ b/deps/v8/src/execution/riscv64/simulator-riscv64.cc @@ -93,7 +93,7 @@ static inline int32_t get_ebreak_code(Instruction* instr) { // SScanF not being implemented in a platform independent was through // ::v8::internal::OS in the same way as SNPrintF is that the Windows C Run-Time // Library does not provide vsscanf. -#define SScanF sscanf // NOLINT +#define SScanF sscanf // The RiscvDebugger class is used by the simulator while debugging simulated // code. @@ -261,6 +261,10 @@ void RiscvDebugger::Debug() { disasm::Disassembler dasm(converter); // Use a reasonably large buffer. v8::internal::EmbeddedVector<char, 256> buffer; + const char* name = sim_->builtins_.Lookup((Address)sim_->get_pc()); + if (name != nullptr) { + PrintF("Call builtin: %s\n", name); + } dasm.InstructionDecode(buffer, reinterpret_cast<byte*>(sim_->get_pc())); PrintF(" 0x%016" PRIx64 " %s\n", sim_->get_pc(), buffer.begin()); last_pc = sim_->get_pc(); @@ -785,7 +789,7 @@ void Simulator::CheckICache(base::CustomMatcherHashMap* i_cache, } } -Simulator::Simulator(Isolate* isolate) : isolate_(isolate) { +Simulator::Simulator(Isolate* isolate) : isolate_(isolate), builtins_(isolate) { // Set up simulator support first. Some of this information is needed to // setup the architecture state. stack_size_ = FLAG_sim_stack_size * KB; @@ -1062,7 +1066,7 @@ T Simulator::FMaxMinHelper(T a, T b, MaxMinKind kind) { T result = 0; if (std::isnan(a) && std::isnan(b)) { - result = a; + result = std::numeric_limits<float>::quiet_NaN(); } else if (std::isnan(a)) { result = b; } else if (std::isnan(b)) { @@ -1101,7 +1105,7 @@ int64_t Simulator::get_pc() const { return registers_[pc]; } // TODO(plind): refactor this messy debug code when we do unaligned access. void Simulator::DieOrDebug() { - if ((1)) { // Flag for this was removed. + if (FLAG_riscv_trap_to_simulator_debugger) { RiscvDebugger dbg(this); dbg.Debug(); } else { @@ -2819,6 +2823,33 @@ void Simulator::DecodeRVIType() { // Note: No need to shift 2 for JALR's imm12, but set lowest bit to 0. int64_t next_pc = (rs1() + imm12()) & ~reg_t(1); set_pc(next_pc); + if (::v8::internal::FLAG_trace_sim) { + if ((rs1_reg() != ra || imm12() != 0)) { + const char* name = builtins_.Lookup((Address)next_pc); + if (name != nullptr) { + int64_t arg0 = get_register(a0); + int64_t arg1 = get_register(a1); + int64_t arg2 = get_register(a2); + int64_t arg3 = get_register(a3); + int64_t arg4 = get_register(a4); + int64_t arg5 = get_register(a5); + int64_t arg6 = get_register(a6); + int64_t arg7 = get_register(a7); + int64_t* stack_pointer = + reinterpret_cast<int64_t*>(get_register(sp)); + int64_t arg8 = stack_pointer[0]; + int64_t arg9 = stack_pointer[1]; + PrintF( + "Call to Builtin at %s " + "a0 %08" PRIx64 " ,a1 %08" PRIx64 " ,a2 %08" PRIx64 + " ,a3 %08" PRIx64 " ,a4 %08" PRIx64 " ,a5 %08" PRIx64 + " ,a6 %08" PRIx64 " ,a7 %08" PRIx64 " ,0(sp) %08" PRIx64 + " ,8(sp) %08" PRIx64 " ,sp %08" PRIx64 ",fp %08" PRIx64 " \n", + name, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, + arg9, get_register(sp), get_register(fp)); + } + } + } break; } case RO_LB: { diff --git a/deps/v8/src/execution/riscv64/simulator-riscv64.h b/deps/v8/src/execution/riscv64/simulator-riscv64.h index e51ec6472c..e5647b2c43 100644 --- a/deps/v8/src/execution/riscv64/simulator-riscv64.h +++ b/deps/v8/src/execution/riscv64/simulator-riscv64.h @@ -706,6 +706,7 @@ class Simulator : public SimulatorBase { char* last_debugger_input_; v8::internal::Isolate* isolate_; + v8::internal::Builtins builtins_; // Stop is disabled if bit 31 is set. static const uint32_t kStopDisabledBit = 1 << 31; diff --git a/deps/v8/src/execution/runtime-profiler.cc b/deps/v8/src/execution/runtime-profiler.cc index 013d7c0e9f..05e828da50 100644 --- a/deps/v8/src/execution/runtime-profiler.cc +++ b/deps/v8/src/execution/runtime-profiler.cc @@ -107,20 +107,8 @@ void TraceHeuristicOptimizationDisallowed(JSFunction function) { } } -// TODO(jgruber): Remove this once we include this tracing with --trace-opt. -void TraceNCIRecompile(JSFunction function, OptimizationReason reason) { - if (FLAG_trace_turbo_nci) { - StdoutStream os; - os << "NCI tierup mark: " << Brief(function) << ", " - << OptimizationReasonToString(reason) << std::endl; - } -} - void TraceRecompile(JSFunction function, OptimizationReason reason, CodeKind code_kind, Isolate* isolate) { - if (code_kind == CodeKind::NATIVE_CONTEXT_INDEPENDENT) { - TraceNCIRecompile(function, reason); - } if (FLAG_trace_opt) { CodeTracer::Scope scope(isolate->GetCodeTracer()); PrintF(scope.file(), "[marking "); @@ -187,8 +175,7 @@ void RuntimeProfiler::MaybeOptimizeFrame(JSFunction function, if (function.shared().optimization_disabled()) return; - // Note: We currently do not trigger OSR compilation from NCI or TP code. - // TODO(jgruber,v8:8888): But we should. + // Note: We currently do not trigger OSR compilation from TP code. if (frame->is_unoptimized()) { if (FLAG_always_osr) { AttemptOnStackReplacement(UnoptimizedFrame::cast(frame), diff --git a/deps/v8/src/execution/s390/simulator-s390.cc b/deps/v8/src/execution/s390/simulator-s390.cc index 435082a3b9..93250b45f4 100644 --- a/deps/v8/src/execution/s390/simulator-s390.cc +++ b/deps/v8/src/execution/s390/simulator-s390.cc @@ -34,7 +34,7 @@ namespace internal { // SScanF not being implemented in a platform independent way through // ::v8::internal::OS in the same way as SNPrintF is that the // Windows C Run-Time Library does not provide vsscanf. -#define SScanF sscanf // NOLINT +#define SScanF sscanf const Simulator::fpr_t Simulator::fp_zero; @@ -772,6 +772,8 @@ void Simulator::EvalTableInit() { V(vsum, VSUM, 0xE764) /* type = VRR_C VECTOR SUM ACROSS WORD */ \ V(vsumg, VSUMG, 0xE765) /* type = VRR_C VECTOR SUM ACROSS DOUBLEWORD */ \ V(vpk, VPK, 0xE794) /* type = VRR_C VECTOR PACK */ \ + V(vmrl, VMRL, 0xE760) /* type = VRR_C VECTOR MERGE LOW */ \ + V(vmrh, VMRH, 0xE761) /* type = VRR_C VECTOR MERGE HIGH */ \ V(vpks, VPKS, 0xE797) /* type = VRR_B VECTOR PACK SATURATE */ \ V(vpkls, VPKLS, 0xE795) /* type = VRR_B VECTOR PACK LOGICAL SATURATE */ \ V(vupll, VUPLL, 0xE7D4) /* type = VRR_A VECTOR UNPACK LOGICAL LOW */ \ @@ -1558,7 +1560,7 @@ void Simulator::EvalTableInit() { EvalTable[CZXT] = &Simulator::Evaluate_CZXT; EvalTable[CDZT] = &Simulator::Evaluate_CDZT; EvalTable[CXZT] = &Simulator::Evaluate_CXZT; -} // NOLINT +} Simulator::Simulator(Isolate* isolate) : isolate_(isolate) { static base::OnceType once = V8_ONCE_INIT; @@ -2000,8 +2002,8 @@ void Simulator::SoftwareInterrupt(Instruction* instr) { (redirection->type() == ExternalReference::BUILTIN_FP_INT_CALL); // Place the return address on the stack, making the call GC safe. - *reinterpret_cast<intptr_t*>(get_register(sp) + - kStackFrameRASlot * kSystemPointerSize) = + *bit_cast<intptr_t*>(get_register(sp) + + kStackFrameRASlot * kSystemPointerSize) = get_register(r14); intptr_t external = @@ -2141,7 +2143,7 @@ void Simulator::SoftwareInterrupt(Instruction* instr) { SimulatorRuntimeDirectGetterCall target = reinterpret_cast<SimulatorRuntimeDirectGetterCall>(external); if (!ABI_PASSES_HANDLES_IN_REGS) { - arg[0] = *(reinterpret_cast<intptr_t*>(arg[0])); + arg[0] = bit_cast<intptr_t>(arg[0]); } target(arg[0], arg[1]); } else if (redirection->type() == @@ -2160,7 +2162,7 @@ void Simulator::SoftwareInterrupt(Instruction* instr) { SimulatorRuntimeProfilingGetterCall target = reinterpret_cast<SimulatorRuntimeProfilingGetterCall>(external); if (!ABI_PASSES_HANDLES_IN_REGS) { - arg[0] = *(reinterpret_cast<intptr_t*>(arg[0])); + arg[0] = bit_cast<intptr_t>(arg[0]); } target(arg[0], arg[1], Redirection::ReverseRedirection(arg[2])); } else { @@ -2268,7 +2270,7 @@ void Simulator::SoftwareInterrupt(Instruction* instr) { // } // #endif } - int64_t saved_lr = *reinterpret_cast<intptr_t*>( + int64_t saved_lr = *bit_cast<intptr_t*>( get_register(sp) + kStackFrameRASlot * kSystemPointerSize); #if (!V8_TARGET_ARCH_S390X && V8_HOST_ARCH_S390) // On zLinux-31, the saved_lr might be tagged with a high bit of 1. @@ -2485,7 +2487,7 @@ void Simulator::CallInternal(Address entry, int reg_arg_count) { // Prepare to execute the code at entry if (ABI_USES_FUNCTION_DESCRIPTORS) { // entry is the function descriptor - set_pc(*(reinterpret_cast<intptr_t*>(entry))); + set_pc(*(bit_cast<intptr_t*>(entry))); } else { // entry is the instruction address set_pc(static_cast<intptr_t>(entry)); @@ -2607,7 +2609,7 @@ intptr_t Simulator::CallImpl(Address entry, int argument_count, // Prepare to execute the code at entry #if ABI_USES_FUNCTION_DESCRIPTORS // entry is the function descriptor - set_pc(*(reinterpret_cast<intptr_t*>(entry))); + set_pc(*(bit_cast<intptr_t*>(entry))); #else // entry is the instruction address set_pc(static_cast<intptr_t>(entry)); @@ -3134,12 +3136,12 @@ EVALUATE(VLREP) { DCHECK_OPCODE(VLREP); DECODE_VRX_INSTRUCTION(r1, x2, b2, d2, m3); intptr_t addr = GET_ADDRESS(x2, b2, d2); -#define CASE(i, type) \ - case i: { \ - FOR_EACH_LANE(j, type) { \ - set_simd_register_by_lane<type>(r1, j, *reinterpret_cast<type*>(addr)); \ - } \ - break; \ +#define CASE(i, type) \ + case i: { \ + FOR_EACH_LANE(j, type) { \ + set_simd_register_by_lane<type>(r1, j, *bit_cast<type*>(addr)); \ + } \ + break; \ } switch (m3) { CASE(0, uint8_t); @@ -3273,8 +3275,10 @@ EVALUATE(VML) { j = lane_size; \ } \ for (; j < kSimd128Size; i += 2, j += lane_size * 2, k++) { \ - input_type src0 = get_simd_register_by_lane<input_type>(r2, i); \ - input_type src1 = get_simd_register_by_lane<input_type>(r3, i); \ + result_type src0 = static_cast<result_type>( \ + get_simd_register_by_lane<input_type>(r2, i)); \ + result_type src1 = static_cast<result_type>( \ + get_simd_register_by_lane<input_type>(r3, i)); \ set_simd_register_by_lane<result_type>(r1, k, src0 * src1); \ } #define VECTOR_MULTIPLY_EVEN_ODD(r1, r2, r3, is_odd, sign) \ @@ -3395,6 +3399,53 @@ EVALUATE(VSUMG) { } #undef CASE +#define VECTOR_MERGE(type, is_low_side) \ + constexpr size_t index_limit = (kSimd128Size / sizeof(type)) / 2; \ + for (size_t i = 0, source_index = is_low_side ? i + index_limit : i; \ + i < index_limit; i++, source_index++) { \ + set_simd_register_by_lane<type>( \ + r1, 2 * i, get_simd_register_by_lane<type>(r2, source_index)); \ + set_simd_register_by_lane<type>( \ + r1, (2 * i) + 1, get_simd_register_by_lane<type>(r3, source_index)); \ + } +#define CASE(i, type, is_low_side) \ + case i: { \ + VECTOR_MERGE(type, is_low_side) \ + } break; +EVALUATE(VMRL) { + DCHECK_OPCODE(VMRL); + DECODE_VRR_C_INSTRUCTION(r1, r2, r3, m6, m5, m4); + USE(m6); + USE(m5); + switch (m4) { + CASE(0, int8_t, true); + CASE(1, int16_t, true); + CASE(2, int32_t, true); + CASE(3, int64_t, true); + default: + UNREACHABLE(); + } + return length; +} + +EVALUATE(VMRH) { + DCHECK_OPCODE(VMRH); + DECODE_VRR_C_INSTRUCTION(r1, r2, r3, m6, m5, m4); + USE(m6); + USE(m5); + switch (m4) { + CASE(0, int8_t, false); + CASE(1, int16_t, false); + CASE(2, int32_t, false); + CASE(3, int64_t, false); + default: + UNREACHABLE(); + } + return length; +} +#undef CASE +#undef VECTOR_MERGE + template <class S, class D> void VectorPack(Simulator* sim, int dst, int src1, int src2, bool saturate, const D& max = 0, const D& min = 0) { @@ -3901,8 +3952,7 @@ EVALUATE(VBPERM) { USE(m5); USE(m6); uint16_t result_bits = 0; - unsigned __int128 src_bits = - *(reinterpret_cast<__int128*>(get_simd_register(r2).int8)); + unsigned __int128 src_bits = bit_cast<__int128>(get_simd_register(r2).int8); for (int i = 0; i < kSimd128Size; i++) { result_bits <<= 1; uint8_t selected_bit_index = get_simd_register_by_lane<uint8_t>(r3, i); @@ -5443,7 +5493,7 @@ EVALUATE(LD) { int64_t b2_val = (b2 == 0) ? 0 : get_register(b2); int64_t x2_val = (x2 == 0) ? 0 : get_register(x2); intptr_t addr = b2_val + x2_val + d2_val; - int64_t dbl_val = *reinterpret_cast<int64_t*>(addr); + int64_t dbl_val = *bit_cast<int64_t*>(addr); set_fpr(r1, dbl_val); return length; } @@ -5482,7 +5532,7 @@ EVALUATE(LE) { int64_t b2_val = (b2 == 0) ? 0 : get_register(b2); int64_t x2_val = (x2 == 0) ? 0 : get_register(x2); intptr_t addr = b2_val + x2_val + d2_val; - float float_val = *reinterpret_cast<float*>(addr); + float float_val = *bit_cast<float*>(addr); set_fpr(r1, float_val); return length; } @@ -11157,7 +11207,7 @@ EVALUATE(LEY) { int64_t x2_val = (x2 == 0) ? 0 : get_register(x2); int64_t b2_val = (b2 == 0) ? 0 : get_register(b2); intptr_t addr = x2_val + b2_val + d2; - float float_val = *reinterpret_cast<float*>(addr); + float float_val = *bit_cast<float*>(addr); set_fpr(r1, float_val); return length; } @@ -11169,7 +11219,7 @@ EVALUATE(LDY) { int64_t x2_val = (x2 == 0) ? 0 : get_register(x2); int64_t b2_val = (b2 == 0) ? 0 : get_register(b2); intptr_t addr = x2_val + b2_val + d2; - uint64_t dbl_val = *reinterpret_cast<uint64_t*>(addr); + uint64_t dbl_val = *bit_cast<uint64_t*>(addr); set_fpr(r1, dbl_val); return length; } diff --git a/deps/v8/src/execution/shared-mutex-guard-if-off-thread.h b/deps/v8/src/execution/shared-mutex-guard-if-off-thread.h index 972f6c0c89..8dfcd09f39 100644 --- a/deps/v8/src/execution/shared-mutex-guard-if-off-thread.h +++ b/deps/v8/src/execution/shared-mutex-guard-if-off-thread.h @@ -10,7 +10,7 @@ namespace v8 { namespace internal { -template <typename LocalIsolate, base::MutexSharedType kIsShared> +template <typename IsolateT, base::MutexSharedType kIsShared> class SharedMutexGuardIfOffThread; } // namespace internal diff --git a/deps/v8/src/execution/stack-guard.cc b/deps/v8/src/execution/stack-guard.cc index dd32f58b98..0bbdf1444a 100644 --- a/deps/v8/src/execution/stack-guard.cc +++ b/deps/v8/src/execution/stack-guard.cc @@ -12,6 +12,7 @@ #include "src/logging/counters.h" #include "src/objects/backing-store.h" #include "src/roots/roots-inl.h" +#include "src/tracing/trace-event.h" #include "src/utils/memcopy.h" #if V8_ENABLE_WEBASSEMBLY diff --git a/deps/v8/src/extensions/cputracemark-extension.cc b/deps/v8/src/extensions/cputracemark-extension.cc index 5fde3608de..029ad0f3cb 100644 --- a/deps/v8/src/extensions/cputracemark-extension.cc +++ b/deps/v8/src/extensions/cputracemark-extension.cc @@ -16,9 +16,8 @@ CpuTraceMarkExtension::GetNativeFunctionTemplate(v8::Isolate* isolate, void CpuTraceMarkExtension::Mark( const v8::FunctionCallbackInfo<v8::Value>& args) { if (args.Length() < 1 || !args[0]->IsUint32()) { - args.GetIsolate()->ThrowException(v8::String::NewFromUtf8Literal( - args.GetIsolate(), - "First parameter to cputracemark() must be a unsigned int32.")); + args.GetIsolate()->ThrowError( + "First parameter to cputracemark() must be a unsigned int32."); return; } diff --git a/deps/v8/src/extensions/externalize-string-extension.cc b/deps/v8/src/extensions/externalize-string-extension.cc index b153ebd075..3e42b214de 100644 --- a/deps/v8/src/extensions/externalize-string-extension.cc +++ b/deps/v8/src/extensions/externalize-string-extension.cc @@ -59,9 +59,8 @@ ExternalizeStringExtension::GetNativeFunctionTemplate( void ExternalizeStringExtension::Externalize( const v8::FunctionCallbackInfo<v8::Value>& args) { if (args.Length() < 1 || !args[0]->IsString()) { - args.GetIsolate()->ThrowException(v8::String::NewFromUtf8Literal( - args.GetIsolate(), - "First parameter to externalizeString() must be a string.")); + args.GetIsolate()->ThrowError( + "First parameter to externalizeString() must be a string."); return; } bool force_two_byte = false; @@ -69,17 +68,15 @@ void ExternalizeStringExtension::Externalize( if (args[1]->IsBoolean()) { force_two_byte = args[1]->BooleanValue(args.GetIsolate()); } else { - args.GetIsolate()->ThrowException(v8::String::NewFromUtf8Literal( - args.GetIsolate(), - "Second parameter to externalizeString() must be a boolean.")); + args.GetIsolate()->ThrowError( + "Second parameter to externalizeString() must be a boolean."); return; } } bool result = false; Handle<String> string = Utils::OpenHandle(*args[0].As<v8::String>()); if (!string->SupportsExternalization()) { - args.GetIsolate()->ThrowException(v8::String::NewFromUtf8Literal( - args.GetIsolate(), "string does not support externalization.")); + args.GetIsolate()->ThrowError("string does not support externalization."); return; } if (string->IsOneByteRepresentation() && !force_two_byte) { @@ -98,8 +95,7 @@ void ExternalizeStringExtension::Externalize( if (!result) delete resource; } if (!result) { - args.GetIsolate()->ThrowException(v8::String::NewFromUtf8Literal( - args.GetIsolate(), "externalizeString() failed.")); + args.GetIsolate()->ThrowError("externalizeString() failed."); return; } } @@ -108,9 +104,8 @@ void ExternalizeStringExtension::Externalize( void ExternalizeStringExtension::IsOneByte( const v8::FunctionCallbackInfo<v8::Value>& args) { if (args.Length() != 1 || !args[0]->IsString()) { - args.GetIsolate()->ThrowException(v8::String::NewFromUtf8Literal( - args.GetIsolate(), - "isOneByteString() requires a single string argument.")); + args.GetIsolate()->ThrowError( + "isOneByteString() requires a single string argument."); return; } bool is_one_byte = diff --git a/deps/v8/src/extensions/vtunedomain-support-extension.cc b/deps/v8/src/extensions/vtunedomain-support-extension.cc index 793ffec716..9a7715bb23 100644 --- a/deps/v8/src/extensions/vtunedomain-support-extension.cc +++ b/deps/v8/src/extensions/vtunedomain-support-extension.cc @@ -109,10 +109,9 @@ void VTuneDomainSupportExtension::Mark( const v8::FunctionCallbackInfo<v8::Value>& args) { if (args.Length() != 3 || !args[0]->IsString() || !args[1]->IsString() || !args[2]->IsString()) { - args.GetIsolate()->ThrowException(v8::String::NewFromUtf8Literal( - args.GetIsolate(), + args.GetIsolate()->ThrowError( "Parameter number should be exactly three, first domain name" - "second task name, third start/end")); + "second task name, third start/end"); return; } @@ -130,7 +129,7 @@ void VTuneDomainSupportExtension::Mark( int r = 0; if ((r = libvtune::invoke(params.str().c_str())) != 0) { - args.GetIsolate()->ThrowException( + args.GetIsolate()->ThrowError( v8::String::NewFromUtf8(args.GetIsolate(), std::to_string(r).c_str()) .ToLocalChecked()); } diff --git a/deps/v8/src/flags/flag-definitions.h b/deps/v8/src/flags/flag-definitions.h index 1a40497555..e1f493ae7b 100644 --- a/deps/v8/src/flags/flag-definitions.h +++ b/deps/v8/src/flags/flag-definitions.h @@ -151,6 +151,12 @@ struct MaybeBoolFlag { #define COMPRESS_POINTERS_BOOL false #endif +#ifdef V8_MAP_PACKING +#define V8_MAP_PACKING_BOOL true +#else +#define V8_MAP_PACKING_BOOL false +#endif + #ifdef V8_COMPRESS_POINTERS_IN_ISOLATE_CAGE #define COMPRESS_POINTERS_IN_ISOLATE_CAGE_BOOL true #else @@ -176,7 +182,7 @@ struct MaybeBoolFlag { #endif #if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_ARM64 || \ - V8_TARGET_ARCH_ARM + V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_RISCV64 #define ENABLE_SPARKPLUG true #else // TODO(v8:11421): Enable Sparkplug for other architectures @@ -267,12 +273,13 @@ DEFINE_BOOL(harmony_shipping, true, "enable all shipped harmony features") V(harmony_regexp_sequence, "RegExp Unicode sequence properties") \ V(harmony_weak_refs_with_cleanup_some, \ "harmony weak references with FinalizationRegistry.prototype.cleanupSome") \ - V(harmony_import_assertions, "harmony import assertions") + V(harmony_import_assertions, "harmony import assertions") \ + V(harmony_rab_gsab, \ + "harmony ResizableArrayBuffer / GrowableSharedArrayBuffer") #ifdef V8_INTL_SUPPORT -#define HARMONY_INPROGRESS(V) \ - HARMONY_INPROGRESS_BASE(V) \ - V(harmony_intl_best_fit_matcher, "Intl BestFitMatcher") \ +#define HARMONY_INPROGRESS(V) \ + HARMONY_INPROGRESS_BASE(V) \ V(harmony_intl_displaynames_date_types, "Intl.DisplayNames date types") #else #define HARMONY_INPROGRESS(V) HARMONY_INPROGRESS_BASE(V) @@ -280,14 +287,14 @@ DEFINE_BOOL(harmony_shipping, true, "enable all shipped harmony features") // Features that are complete (but still behind --harmony/es-staging flag). #define HARMONY_STAGED_BASE(V) \ - V(harmony_relative_indexing_methods, "harmony relative indexing methods") \ - V(harmony_class_static_blocks, "harmony static initializer blocks") + V(harmony_class_static_blocks, "harmony static initializer blocks") \ + V(harmony_error_cause, "harmony error cause property") #ifdef V8_INTL_SUPPORT -#define HARMONY_STAGED(V) \ - HARMONY_STAGED_BASE(V) \ - V(harmony_intl_dateformat_day_period, \ - "Add dayPeriod option to DateTimeFormat") +#define HARMONY_STAGED(V) \ + HARMONY_STAGED_BASE(V) \ + V(harmony_intl_best_fit_matcher, "Intl BestFitMatcher") \ + V(harmony_intl_locale_info, "Intl locale info") #else #define HARMONY_STAGED(V) HARMONY_STAGED_BASE(V) #endif @@ -298,10 +305,14 @@ DEFINE_BOOL(harmony_shipping, true, "enable all shipped harmony features") V(harmony_atomics, "harmony atomics") \ V(harmony_regexp_match_indices, "harmony regexp match indices") \ V(harmony_private_brand_checks, "harmony private brand checks") \ - V(harmony_top_level_await, "harmony top level await") + V(harmony_top_level_await, "harmony top level await") \ + V(harmony_relative_indexing_methods, "harmony relative indexing methods") #ifdef V8_INTL_SUPPORT -#define HARMONY_SHIPPING(V) HARMONY_SHIPPING_BASE(V) +#define HARMONY_SHIPPING(V) \ + HARMONY_SHIPPING_BASE(V) \ + V(harmony_intl_dateformat_day_period, \ + "Add dayPeriod option to DateTimeFormat") #else #define HARMONY_SHIPPING(V) HARMONY_SHIPPING_BASE(V) #endif @@ -331,6 +342,13 @@ HARMONY_SHIPPING(FLAG_SHIPPING_FEATURES) DEFINE_BOOL(builtin_subclassing, true, "subclassing support in built-in methods") +// If the following flag is set to `true`, the SharedArrayBuffer constructor is +// enabled per context depending on the callback set via +// `SetSharedArrayBufferConstructorEnabledCallback`. If no callback is set, the +// SharedArrayBuffer constructor is disabled. +DEFINE_BOOL(enable_sharedarraybuffer_per_context, false, + "enable the SharedArrayBuffer constructor per context") + #ifdef V8_INTL_SUPPORT DEFINE_BOOL(icu_timezone_data, true, "get information about timezones from ICU") #endif @@ -359,6 +377,17 @@ DEFINE_BOOL(icu_timezone_data, true, "get information about timezones from ICU") #define V8_SHARED_RO_HEAP_BOOL false #endif +DEFINE_BOOL(stress_snapshot, false, + "disables sharing of the read-only heap for testing") +// Incremental marking is incompatible with the stress_snapshot mode; +// specifically, serialization may clear bytecode arrays from shared function +// infos which the MarkCompactCollector (running concurrently) may still need. +// See also https://crbug.com/v8/10882. +// +// Note: This is not an issue in production because we don't clear SFI's +// there (that only happens in mksnapshot and in --stress-snapshot mode). +DEFINE_NEG_IMPLICATION(stress_snapshot, incremental_marking) + DEFINE_BOOL(lite_mode, V8_LITE_BOOL, "enables trade-off of performance for memory savings") @@ -376,6 +405,13 @@ DEFINE_IMPLICATION(lite_mode, optimize_for_size) DEFINE_NEG_IMPLICATION(enable_third_party_heap, inline_new) DEFINE_NEG_IMPLICATION(enable_third_party_heap, allocation_site_pretenuring) DEFINE_NEG_IMPLICATION(enable_third_party_heap, turbo_allocation_folding) +DEFINE_NEG_IMPLICATION(enable_third_party_heap, concurrent_recompilation) +DEFINE_NEG_IMPLICATION(enable_third_party_heap, concurrent_inlining) +DEFINE_NEG_IMPLICATION(enable_third_party_heap, + finalize_streaming_on_background) +DEFINE_NEG_IMPLICATION(enable_third_party_heap, use_marking_progress_bar) +DEFINE_NEG_IMPLICATION(enable_third_party_heap, move_object_start) +DEFINE_NEG_IMPLICATION(enable_third_party_heap, concurrent_marking) DEFINE_BOOL_READONLY(enable_third_party_heap, V8_ENABLE_THIRD_PARTY_HEAP_BOOL, "Use third-party heap") @@ -404,19 +440,15 @@ DEFINE_BOOL_READONLY(enable_unconditional_write_barriers, "always use full write barriers") #ifdef V8_ENABLE_SINGLE_GENERATION -#define V8_GENERATION_BOOL true +#define V8_SINGLE_GENERATION_BOOL true #else -#define V8_GENERATION_BOOL false +#define V8_SINGLE_GENERATION_BOOL false #endif DEFINE_BOOL_READONLY( - single_generation, V8_GENERATION_BOOL, + single_generation, V8_SINGLE_GENERATION_BOOL, "allocate all objects from young generation to old generation") -// Prevent inline allocation into new space -DEFINE_NEG_IMPLICATION(single_generation, inline_new) -DEFINE_NEG_IMPLICATION(single_generation, turbo_allocation_folding) - #ifdef V8_ENABLE_CONSERVATIVE_STACK_SCANNING #define V8_ENABLE_CONSERVATIVE_STACK_SCANNING_BOOL true #else @@ -586,7 +618,6 @@ DEFINE_BOOL(trace_generalization, false, "trace map generalization") // Flags for TurboProp. DEFINE_BOOL(turboprop, false, "enable experimental turboprop mid-tier compiler") -DEFINE_IMPLICATION(turboprop, turbo_direct_heap_access) DEFINE_BOOL(turboprop_mid_tier_reg_alloc, true, "enable mid-tier register allocator for turboprop") DEFINE_BOOL( @@ -616,11 +647,10 @@ DEFINE_BOOL(always_sparkplug, false, "directly tier up to Sparkplug code") DEFINE_IMPLICATION(always_sparkplug, sparkplug) #endif DEFINE_STRING(sparkplug_filter, "*", "filter for Sparkplug baseline compiler") +DEFINE_BOOL(sparkplug_needs_short_builtins, false, + "only enable Sparkplug baseline compiler when " + "--short-builtin-calls are also enabled") DEFINE_BOOL(trace_baseline, false, "trace baseline compilation") -#if !defined(V8_OS_MACOSX) || !defined(V8_HOST_ARCH_ARM64) -// Don't disable --write-protect-code-memory on Apple Silicon. -DEFINE_WEAK_VALUE_IMPLICATION(sparkplug, write_protect_code_memory, false) -#endif #undef FLAG #define FLAG FLAG_FULL @@ -649,13 +679,16 @@ DEFINE_BOOL(concurrent_inlining, false, "run optimizing compiler's inlining phase on a separate thread") DEFINE_BOOL(stress_concurrent_inlining, false, "makes concurrent inlining more likely to trigger in tests") -DEFINE_BOOL(turbo_direct_heap_access, false, - "access kNeverSerialized objects directly from the heap") DEFINE_IMPLICATION(stress_concurrent_inlining, concurrent_inlining) DEFINE_NEG_IMPLICATION(stress_concurrent_inlining, lazy_feedback_allocation) DEFINE_WEAK_VALUE_IMPLICATION(stress_concurrent_inlining, interrupt_budget, 15 * KB) -DEFINE_IMPLICATION(concurrent_inlining, turbo_direct_heap_access) +DEFINE_BOOL( + turbo_concurrent_get_property_access_info, false, + "concurrently call GetPropertyAccessInfo (only with --concurrent-inlining)") +DEFINE_BOOL(turbo_concurrent_inlining_check_ispendingallocation, false, + "when --concurrent-inlining is enabled, check IsPendingAllocation " + "in Ref construction") DEFINE_INT(max_serializer_nesting, 25, "maximum levels for nesting child serializers") DEFINE_WEAK_IMPLICATION(future, concurrent_inlining) @@ -808,28 +841,20 @@ DEFINE_INT(reuse_opt_code_count, 0, "don't discard optimized code for the specified number of deopts.") DEFINE_BOOL(turbo_dynamic_map_checks, true, "use dynamic map checks when generating code for property accesses " - "if all handlers in an IC are the same for turboprop and NCI") + "if all handlers in an IC are the same for turboprop") DEFINE_BOOL(turbo_compress_translation_arrays, false, "compress translation arrays (experimental)") DEFINE_BOOL(turbo_inline_js_wasm_calls, false, "inline JS->Wasm calls") - -// Native context independent (NCI) code. -DEFINE_BOOL(turbo_nci, false, - "enable experimental native context independent code.") -// TODO(v8:8888): Temporary until NCI caching is implemented or -// feedback collection is made unconditional. -DEFINE_IMPLICATION(turbo_nci, turbo_collect_feedback_in_generic_lowering) -DEFINE_BOOL(print_nci_code, false, "print native context independent code.") -DEFINE_BOOL(trace_turbo_nci, false, "trace native context independent code.") DEFINE_BOOL(turbo_collect_feedback_in_generic_lowering, true, "enable experimental feedback collection in generic lowering.") -// TODO(jgruber,v8:8888): Remove this flag once we've settled on an ageing -// strategy. DEFINE_BOOL(isolate_script_cache_ageing, true, "enable ageing of the isolate script cache.") -DEFINE_INT(script_run_delay, 0, "sleep [ms] on every Script::Run") -DEFINE_INT(script_run_delay_once, 0, "sleep [ms] on the first Script::Run") +DEFINE_FLOAT(script_delay, 0, "busy wait [ms] on every Script::Run") +DEFINE_FLOAT(script_delay_once, 0, "busy wait [ms] on the first Script::Run") +DEFINE_FLOAT(script_delay_fraction, 0.0, + "busy wait after each Script::Run by the given fraction of the " + "run's duration") // Favor memory over execution speed. DEFINE_BOOL(optimize_for_size, false, @@ -859,7 +884,11 @@ DEFINE_VALUE_IMPLICATION(single_threaded, wasm_num_compilation_tasks, 0) DEFINE_DEBUG_BOOL(trace_wasm_native_heap, false, "trace wasm native heap events") DEFINE_BOOL(wasm_write_protect_code_memory, false, - "write protect code memory on the wasm native heap") + "write protect code memory on the wasm native heap with mprotect") +DEFINE_BOOL(wasm_memory_protection_keys, false, + "protect wasm code memory with PKU if available, no protection " + "without support; fallback to mprotect by adding " + "--wasm-write-protect-code-memory") DEFINE_DEBUG_BOOL(trace_wasm_serialization, false, "trace serialization/deserialization") DEFINE_BOOL(wasm_async_compilation, true, @@ -1169,7 +1198,6 @@ DEFINE_GENERIC_IMPLICATION( TracingFlags::gc_stats.store( v8::tracing::TracingCategoryObserver::ENABLED_BY_NATIVE)) DEFINE_NEG_IMPLICATION(trace_gc_object_stats, incremental_marking) -DEFINE_NEG_IMPLICATION(track_retaining_path, incremental_marking) DEFINE_NEG_IMPLICATION(track_retaining_path, parallel_marking) DEFINE_NEG_IMPLICATION(track_retaining_path, concurrent_marking) DEFINE_BOOL(track_detached_contexts, true, @@ -1258,11 +1286,19 @@ DEFINE_BOOL_READONLY( "object space") // assembler-ia32.cc / assembler-arm.cc / assembler-arm64.cc / assembler-x64.cc +#ifdef V8_ENABLE_DEBUG_CODE DEFINE_BOOL(debug_code, DEBUG_BOOL, "generate extra code (assertions) for debugging") +#else +DEFINE_BOOL_READONLY(debug_code, false, "") +#endif +#ifdef V8_CODE_COMMENTS DEFINE_BOOL(code_comments, false, "emit comments in code disassembly; for more readable source " "positions you should add --no-concurrent_recompilation") +#else +DEFINE_BOOL_READONLY(code_comments, false, "") +#endif DEFINE_BOOL(enable_sse3, true, "enable use of SSE3 instructions if available") DEFINE_BOOL(enable_ssse3, true, "enable use of SSSE3 instructions if available") DEFINE_BOOL(enable_sse4_1, true, @@ -1290,10 +1326,18 @@ DEFINE_BOOL(partial_constant_pool, true, DEFINE_STRING(sim_arm64_optional_features, "none", "enable optional features on the simulator for testing: none or " "all") -DEFINE_BOOL(debug_riscv, false, "enable debug prints") -// TODO(RISCV): https://github.com/v8-riscv/v8/issues/330 -DEFINE_BOOL(disable_riscv_constant_pool, true, - "disable constant pool (RISCV only)") + +#if defined(V8_TARGET_ARCH_RISCV64) +DEFINE_BOOL(riscv_trap_to_simulator_debugger, false, + "enable simulator trap to debugger") +DEFINE_BOOL(riscv_debug, false, "enable debug prints") + +DEFINE_BOOL(riscv_constant_pool, true, + "enable constant pool (RISCV only)") + +DEFINE_BOOL(riscv_c_extension, false, + "enable compressed extension isa variant (RISCV only)") +#endif // Controlling source positions for Torque/CSA code. DEFINE_BOOL(enable_source_at_csa_bind, false, @@ -1469,6 +1513,8 @@ DEFINE_BOOL(native_code_counters, DEBUG_BOOL, DEFINE_BOOL(super_ic, true, "use an IC for super property loads") +DEFINE_BOOL(enable_mega_dom_ic, false, "use MegaDOM IC state for API objects") + // objects.cc DEFINE_BOOL(thin_strings, true, "Enable ThinString support") DEFINE_BOOL(trace_prototype_users, false, @@ -1551,7 +1597,7 @@ DEFINE_BOOL( "includes arguments for each function call in the error stack frames array") DEFINE_BOOL(adjust_os_scheduling_parameters, true, "adjust OS specific scheduling params for the isolate") -DEFINE_BOOL(experimental_flush_embedded_blob_icache, false, +DEFINE_BOOL(experimental_flush_embedded_blob_icache, true, "Used in an experiment to evaluate icache flushing on certain CPUs") // Flags for short builtin calls feature diff --git a/deps/v8/src/flags/flags.cc b/deps/v8/src/flags/flags.cc index 9825b5b1ea..2cd9174148 100644 --- a/deps/v8/src/flags/flags.cc +++ b/deps/v8/src/flags/flags.cc @@ -16,6 +16,8 @@ #include "src/base/platform/platform.h" #include "src/codegen/cpu-features.h" #include "src/logging/counters.h" +#include "src/logging/tracing-flags.h" +#include "src/tracing/tracing-category-observer.h" #include "src/utils/allocation.h" #include "src/utils/memcopy.h" #include "src/utils/ostreams.h" diff --git a/deps/v8/src/handles/global-handles.cc b/deps/v8/src/handles/global-handles.cc index 6bc290eac7..9e4aad27fb 100644 --- a/deps/v8/src/handles/global-handles.cc +++ b/deps/v8/src/handles/global-handles.cc @@ -8,8 +8,10 @@ #include <cstdint> #include <map> +#include "include/v8.h" #include "src/api/api-inl.h" #include "src/base/compiler-specific.h" +#include "src/base/sanitizer/asan.h" #include "src/execution/vm-state-inl.h" #include "src/heap/embedder-tracing.h" #include "src/heap/heap-write-barrier-inl.h" @@ -18,7 +20,6 @@ #include "src/objects/objects-inl.h" #include "src/objects/slots.h" #include "src/objects/visitors.h" -#include "src/sanitizer/asan.h" #include "src/tasks/cancelable-task.h" #include "src/tasks/task-utils.h" #include "src/utils/utils.h" @@ -382,11 +383,11 @@ namespace { void ExtractInternalFields(JSObject jsobject, void** embedder_fields, int len) { int field_count = jsobject.GetEmbedderFieldCount(); - PtrComprCageBase cage_base = GetPtrComprCageBase(jsobject); + Isolate* isolate = GetIsolateForHeapSandbox(jsobject); for (int i = 0; i < len; ++i) { if (field_count == i) break; void* pointer; - if (EmbedderDataSlot(jsobject, i).ToAlignedPointer(cage_base, &pointer)) { + if (EmbedderDataSlot(jsobject, i).ToAlignedPointer(isolate, &pointer)) { embedder_fields[i] = pointer; } } @@ -1252,18 +1253,21 @@ void GlobalHandles::IdentifyWeakUnmodifiedObjects( WeakSlotCallback is_unmodified) { if (!FLAG_reclaim_unmodified_wrappers) return; - LocalEmbedderHeapTracer* const tracer = - isolate()->heap()->local_embedder_heap_tracer(); + // Treat all objects as roots during incremental marking to avoid corrupting + // marking worklists. + if (isolate()->heap()->incremental_marking()->IsMarking()) return; + + auto* const handler = isolate()->heap()->GetEmbedderRootsHandler(); for (TracedNode* node : traced_young_nodes_) { if (node->IsInUse()) { DCHECK(node->is_root()); if (is_unmodified(node->location())) { v8::Value* value = ToApi<v8::Value>(node->handle()); if (node->has_destructor()) { - node->set_root(tracer->IsRootForNonTracingGC( + node->set_root(handler->IsRoot( *reinterpret_cast<v8::TracedGlobal<v8::Value>*>(&value))); } else { - node->set_root(tracer->IsRootForNonTracingGC( + node->set_root(handler->IsRoot( *reinterpret_cast<v8::TracedReference<v8::Value>*>(&value))); } } @@ -1337,8 +1341,7 @@ void GlobalHandles::IterateYoungWeakObjectsForPhantomHandles( if (!FLAG_reclaim_unmodified_wrappers) return; - LocalEmbedderHeapTracer* const tracer = - isolate()->heap()->local_embedder_heap_tracer(); + auto* const handler = isolate()->heap()->GetEmbedderRootsHandler(); for (TracedNode* node : traced_young_nodes_) { if (!node->IsInUse()) continue; @@ -1353,7 +1356,7 @@ void GlobalHandles::IterateYoungWeakObjectsForPhantomHandles( node->ResetPhantomHandle(HandleHolder::kLive); } else { v8::Value* value = ToApi<v8::Value>(node->handle()); - tracer->ResetHandleInNonTracingGC( + handler->ResetRoot( *reinterpret_cast<v8::TracedReference<v8::Value>*>(&value)); DCHECK(!node->IsInUse()); } diff --git a/deps/v8/src/handles/handles-inl.h b/deps/v8/src/handles/handles-inl.h index 360da25cf6..4c1817e80d 100644 --- a/deps/v8/src/handles/handles-inl.h +++ b/deps/v8/src/handles/handles-inl.h @@ -5,12 +5,12 @@ #ifndef V8_HANDLES_HANDLES_INL_H_ #define V8_HANDLES_HANDLES_INL_H_ +#include "src/base/sanitizer/msan.h" #include "src/execution/isolate.h" #include "src/execution/local-isolate.h" #include "src/handles/handles.h" #include "src/handles/local-handles-inl.h" #include "src/objects/objects.h" -#include "src/sanitizer/msan.h" namespace v8 { namespace internal { diff --git a/deps/v8/src/handles/local-handles-inl.h b/deps/v8/src/handles/local-handles-inl.h index c9f1588410..b862155949 100644 --- a/deps/v8/src/handles/local-handles-inl.h +++ b/deps/v8/src/handles/local-handles-inl.h @@ -5,10 +5,10 @@ #ifndef V8_HANDLES_LOCAL_HANDLES_INL_H_ #define V8_HANDLES_LOCAL_HANDLES_INL_H_ +#include "src/base/sanitizer/msan.h" #include "src/execution/isolate.h" #include "src/execution/local-isolate.h" #include "src/handles/local-handles.h" -#include "src/sanitizer/msan.h" namespace v8 { namespace internal { diff --git a/deps/v8/src/heap/array-buffer-sweeper.cc b/deps/v8/src/heap/array-buffer-sweeper.cc index 8af2a60e9c..108a349777 100644 --- a/deps/v8/src/heap/array-buffer-sweeper.cc +++ b/deps/v8/src/heap/array-buffer-sweeper.cc @@ -101,30 +101,25 @@ void ArrayBufferSweeper::EnsureFinished() { UNREACHABLE(); } - DecrementExternalMemoryCounters(); + UpdateCountersForConcurrentlySweptExtensions(); sweeping_in_progress_ = false; } -void ArrayBufferSweeper::AdjustCountersAndMergeIfPossible() { +void ArrayBufferSweeper::MergeBackExtensionsWhenSwept() { if (sweeping_in_progress_) { DCHECK(job_.has_value()); if (job_->state_ == SweepingState::kDone) { Merge(); sweeping_in_progress_ = false; } else { - DecrementExternalMemoryCounters(); + UpdateCountersForConcurrentlySweptExtensions(); } } } -void ArrayBufferSweeper::DecrementExternalMemoryCounters() { +void ArrayBufferSweeper::UpdateCountersForConcurrentlySweptExtensions() { size_t freed_bytes = freed_bytes_.exchange(0, std::memory_order_relaxed); - - if (freed_bytes > 0) { - heap_->DecrementExternalBackingStoreBytes( - ExternalBackingStoreType::kArrayBuffer, freed_bytes); - heap_->update_external_memory(-static_cast<int64_t>(freed_bytes)); - } + DecrementExternalMemoryCounters(freed_bytes); } void ArrayBufferSweeper::RequestSweepYoung() { @@ -166,7 +161,7 @@ void ArrayBufferSweeper::RequestSweep(SweepingScope scope) { Prepare(scope); job_->Sweep(); Merge(); - DecrementExternalMemoryCounters(); + UpdateCountersForConcurrentlySweptExtensions(); } } @@ -228,18 +223,52 @@ void ArrayBufferSweeper::Append(JSArrayBuffer object, old_bytes_ += bytes; } - AdjustCountersAndMergeIfPossible(); - DecrementExternalMemoryCounters(); + MergeBackExtensionsWhenSwept(); IncrementExternalMemoryCounters(bytes); } +void ArrayBufferSweeper::Detach(JSArrayBuffer object, + ArrayBufferExtension* extension) { + size_t bytes = extension->ClearAccountingLength(); + + // We cannot free the extension eagerly here, since extensions are tracked in + // a singly linked list. The next GC will remove it automatically. + + if (!sweeping_in_progress_) { + // If concurrent sweeping isn't running at the moment, we can also adjust + // young_bytes_ or old_bytes_ right away. + if (Heap::InYoungGeneration(object)) { + DCHECK_GE(young_bytes_, bytes); + young_bytes_ -= bytes; + young_.bytes_ -= bytes; + } else { + DCHECK_GE(old_bytes_, bytes); + old_bytes_ -= bytes; + old_.bytes_ -= bytes; + } + } + + MergeBackExtensionsWhenSwept(); + DecrementExternalMemoryCounters(bytes); +} + void ArrayBufferSweeper::IncrementExternalMemoryCounters(size_t bytes) { + if (bytes == 0) return; heap_->IncrementExternalBackingStoreBytes( ExternalBackingStoreType::kArrayBuffer, bytes); reinterpret_cast<v8::Isolate*>(heap_->isolate()) ->AdjustAmountOfExternalAllocatedMemory(static_cast<int64_t>(bytes)); } +void ArrayBufferSweeper::DecrementExternalMemoryCounters(size_t bytes) { + if (bytes == 0) return; + heap_->DecrementExternalBackingStoreBytes( + ExternalBackingStoreType::kArrayBuffer, bytes); + // Unlike IncrementExternalMemoryCounters we don't use + // AdjustAmountOfExternalAllocatedMemory such that we never start a GC here. + heap_->update_external_memory(-static_cast<int64_t>(bytes)); +} + void ArrayBufferSweeper::IncrementFreedBytes(size_t bytes) { if (bytes == 0) return; freed_bytes_.fetch_add(bytes, std::memory_order_relaxed); diff --git a/deps/v8/src/heap/array-buffer-sweeper.h b/deps/v8/src/heap/array-buffer-sweeper.h index 0c15428b75..6dd7ed97f6 100644 --- a/deps/v8/src/heap/array-buffer-sweeper.h +++ b/deps/v8/src/heap/array-buffer-sweeper.h @@ -59,8 +59,12 @@ class ArrayBufferSweeper { void RequestSweepYoung(); void RequestSweepFull(); + // Track the given ArrayBufferExtension for the given JSArrayBuffer. void Append(JSArrayBuffer object, ArrayBufferExtension* extension); + // Detaches an ArrayBufferExtension from a JSArrayBuffer. + void Detach(JSArrayBuffer object, ArrayBufferExtension* extension); + ArrayBufferList young() { return young_; } ArrayBufferList old() { return old_; } @@ -98,10 +102,11 @@ class ArrayBufferSweeper { base::Optional<SweepingJob> job_; void Merge(); - void AdjustCountersAndMergeIfPossible(); + void MergeBackExtensionsWhenSwept(); - void DecrementExternalMemoryCounters(); + void UpdateCountersForConcurrentlySweptExtensions(); void IncrementExternalMemoryCounters(size_t bytes); + void DecrementExternalMemoryCounters(size_t bytes); void IncrementFreedBytes(size_t bytes); void RequestSweep(SweepingScope sweeping_task); diff --git a/deps/v8/src/heap/base/asm/riscv64/push_registers_asm.cc b/deps/v8/src/heap/base/asm/riscv64/push_registers_asm.cc index 1de4055a28..2d90aab182 100644 --- a/deps/v8/src/heap/base/asm/riscv64/push_registers_asm.cc +++ b/deps/v8/src/heap/base/asm/riscv64/push_registers_asm.cc @@ -5,21 +5,26 @@ // Push all callee-saved registers to get them on the stack for conservative // stack scanning. // -// See asm/x64/push_registers_clang.cc for why the function is not generated +// See asm/x64/push_registers_asm.cc for why the function is not generated // using clang. // -// Do not depend on V8_TARGET_OS_* defines as some embedders may override the -// GN toolchain (e.g. ChromeOS) and not provide them. +// Calling convention source: +// https://riscv.org/wp-content/uploads/2015/01/riscv-calling.pdf Table 18.2 asm(".global PushAllRegistersAndIterateStack \n" ".type PushAllRegistersAndIterateStack, %function \n" ".hidden PushAllRegistersAndIterateStack \n" "PushAllRegistersAndIterateStack: \n" // Push all callee-saved registers and save return address. - " addi sp, sp, -96 \n" - " sd ra, 88(sp) \n" - " sd s8, 80(sp) \n" - " sd sp, 72(sp) \n" - " sd gp, 64(sp) \n" + " addi sp, sp, -112 \n" + // Save return address. + " sd ra, 104(sp) \n" + // sp is callee-saved. + " sd sp, 96(sp) \n" + // s0-s11 are callee-saved. + " sd s11, 88(sp) \n" + " sd s10, 80(sp) \n" + " sd s9, 72(sp) \n" + " sd s8, 64(sp) \n" " sd s7, 56(sp) \n" " sd s6, 48(sp) \n" " sd s5, 40(sp) \n" @@ -28,18 +33,19 @@ asm(".global PushAllRegistersAndIterateStack \n" " sd s2, 16(sp) \n" " sd s1, 8(sp) \n" " sd s0, 0(sp) \n" - // Maintain frame pointer. - " mv s8, sp \n" + // Maintain frame pointer(fp is s0). + " mv s0, sp \n" // Pass 1st parameter (a0) unchanged (Stack*). // Pass 2nd parameter (a1) unchanged (StackVisitor*). - // Save 3rd parameter (a2; IterateStackCallback). + // Save 3rd parameter (a2; IterateStackCallback) to a3. " mv a3, a2 \n" + // Pass 3rd parameter as sp (stack pointer). " mv a2, sp \n" // Call the callback. " jalr a3 \n" // Load return address. - " ld ra, 88(sp) \n" + " ld ra, 104(sp) \n" // Restore frame pointer. - " ld s8, 80(sp) \n" - " addi sp, sp, 96 \n" + " ld s0, 0(sp) \n" + " addi sp, sp, 112 \n" " jr ra \n"); diff --git a/deps/v8/src/heap/base/asm/x64/push_registers_asm.cc b/deps/v8/src/heap/base/asm/x64/push_registers_asm.cc index 68f7918c93..9780b877b8 100644 --- a/deps/v8/src/heap/base/asm/x64/push_registers_asm.cc +++ b/deps/v8/src/heap/base/asm/x64/push_registers_asm.cc @@ -19,7 +19,7 @@ #ifdef _WIN64 // We maintain 16-byte alignment at calls. There is an 8-byte return address -// on the stack and we push 72 bytes which maintains 16-byte stack alignment +// on the stack and we push 232 bytes which maintains 16-byte stack alignment // at the call. // Source: https://docs.microsoft.com/en-us/cpp/build/x64-calling-convention asm(".globl PushAllRegistersAndIterateStack \n" @@ -36,6 +36,18 @@ asm(".globl PushAllRegistersAndIterateStack \n" " push %r13 \n" " push %r14 \n" " push %r15 \n" + " sub $160, %rsp \n" + // Use aligned instrs as we are certain that the stack is properly aligned. + " movdqa %xmm6, 144(%rsp) \n" + " movdqa %xmm7, 128(%rsp) \n" + " movdqa %xmm8, 112(%rsp) \n" + " movdqa %xmm9, 96(%rsp) \n" + " movdqa %xmm10, 80(%rsp) \n" + " movdqa %xmm11, 64(%rsp) \n" + " movdqa %xmm12, 48(%rsp) \n" + " movdqa %xmm13, 32(%rsp) \n" + " movdqa %xmm14, 16(%rsp) \n" + " movdqa %xmm15, (%rsp) \n" // Pass 1st parameter (rcx) unchanged (Stack*). // Pass 2nd parameter (rdx) unchanged (StackVisitor*). // Save 3rd parameter (r8; IterateStackCallback) @@ -45,7 +57,7 @@ asm(".globl PushAllRegistersAndIterateStack \n" // Call the callback. " call *%r9 \n" // Pop the callee-saved registers. - " add $64, %rsp \n" + " add $224, %rsp \n" // Restore rbp as it was used as frame pointer. " pop %rbp \n" " ret \n"); diff --git a/deps/v8/src/heap/base/asm/x64/push_registers_masm.S b/deps/v8/src/heap/base/asm/x64/push_registers_masm.S index 627843830f..a32e193c2f 100644 --- a/deps/v8/src/heap/base/asm/x64/push_registers_masm.S +++ b/deps/v8/src/heap/base/asm/x64/push_registers_masm.S @@ -13,8 +13,8 @@ PushAllRegistersAndIterateStack: ;; stack scanning. ;; ;; We maintain 16-byte alignment at calls. There is an 8-byte return address - ;; on the stack and we push 72 bytes which maintains 16-byte stack alignment - ;; at the call. + ;; on the stack and we push 232 bytes which maintains 16-byte stack + ;; alignment at the call. ;; Source: https://docs.microsoft.com/en-us/cpp/build/x64-calling-convention ;; ;; rbp is callee-saved. Maintain proper frame pointer for debugging. @@ -28,6 +28,18 @@ PushAllRegistersAndIterateStack: push r13 push r14 push r15 + sub rsp, 160 + ;; Use aligned instrs as we are certain that the stack is properly aligned. + movdqa xmmword ptr [rsp + 144], xmm6 + movdqa xmmword ptr [rsp + 128], xmm7 + movdqa xmmword ptr [rsp + 112], xmm8 + movdqa xmmword ptr [rsp + 96], xmm9 + movdqa xmmword ptr [rsp + 80], xmm10 + movdqa xmmword ptr [rsp + 64], xmm11 + movdqa xmmword ptr [rsp + 48], xmm12 + movdqa xmmword ptr [rsp + 32], xmm13 + movdqa xmmword ptr [rsp + 16], xmm14 + movdqa xmmword ptr [rsp], xmm15 ;; Pass 1st parameter (rcx) unchanged (Stack*). ;; Pass 2nd parameter (rdx) unchanged (StackVisitor*). ;; Save 3rd parameter (r8; IterateStackCallback) @@ -37,7 +49,7 @@ PushAllRegistersAndIterateStack: ;; Call the callback. call r9 ;; Pop the callee-saved registers. - add rsp, 64 + add rsp, 224 ;; Restore rbp as it was used as frame pointer. pop rbp ret diff --git a/deps/v8/src/heap/base/stack.cc b/deps/v8/src/heap/base/stack.cc index 939487ca77..f6d522f193 100644 --- a/deps/v8/src/heap/base/stack.cc +++ b/deps/v8/src/heap/base/stack.cc @@ -6,9 +6,11 @@ #include <limits> +#include "src/base/macros.h" #include "src/base/platform/platform.h" +#include "src/base/sanitizer/asan.h" +#include "src/base/sanitizer/msan.h" #include "src/heap/cppgc/globals.h" -#include "src/heap/cppgc/sanitizers.h" namespace heap { namespace base { @@ -41,7 +43,7 @@ namespace { // No ASAN support as accessing fake frames otherwise results in // "stack-use-after-scope" warnings. -NO_SANITIZE_ADDRESS +DISABLE_ASAN void IterateAsanFakeFrameIfNecessary(StackVisitor* visitor, void* asan_fake_stack, const void* stack_start, @@ -77,7 +79,7 @@ void IterateSafeStackIfNecessary(StackVisitor* visitor) { #if defined(__has_feature) #if __has_feature(safe_stack) // Source: - // https://github.com/llvm/llvm-project/blob/master/compiler-rt/lib/safestack/safestack.cpp + // https://github.com/llvm/llvm-project/blob/main/compiler-rt/lib/safestack/safestack.cpp constexpr size_t kSafeStackAlignmentBytes = 16; void* stack_end = __builtin___get_unsafe_stack_ptr(); void* stack_start = __builtin___get_unsafe_stack_top(); @@ -101,7 +103,7 @@ void IterateSafeStackIfNecessary(StackVisitor* visitor) { // any data that needs to be scanned. V8_NOINLINE // No ASAN support as method accesses redzones while walking the stack. -NO_SANITIZE_ADDRESS +DISABLE_ASAN void IteratePointersImpl(const Stack* stack, StackVisitor* visitor, intptr_t* stack_end) { #ifdef V8_USE_ADDRESS_SANITIZER @@ -116,7 +118,7 @@ void IteratePointersImpl(const Stack* stack, StackVisitor* visitor, // MSAN: Instead of unpoisoning the whole stack, the slot's value is copied // into a local which is unpoisoned. void* address = *current; - MSAN_UNPOISON(&address, sizeof(address)); + MSAN_MEMORY_IS_INITIALIZED(&address, sizeof(address)); if (address == nullptr) continue; visitor->VisitPointer(address); #ifdef V8_USE_ADDRESS_SANITIZER @@ -135,5 +137,10 @@ void Stack::IteratePointers(StackVisitor* visitor) const { IterateSafeStackIfNecessary(visitor); } +void Stack::IteratePointersUnsafe(StackVisitor* visitor, + uintptr_t stack_end) const { + IteratePointersImpl(this, visitor, reinterpret_cast<intptr_t*>(stack_end)); +} + } // namespace base } // namespace heap diff --git a/deps/v8/src/heap/base/stack.h b/deps/v8/src/heap/base/stack.h index a46e6e660e..d7267deee7 100644 --- a/deps/v8/src/heap/base/stack.h +++ b/deps/v8/src/heap/base/stack.h @@ -26,10 +26,20 @@ class V8_EXPORT_PRIVATE Stack final { // Returns true if |slot| is part of the stack and false otherwise. bool IsOnStack(void* slot) const; - // Word-aligned iteration of the stack. Slot values are passed on to - // |visitor|. + // Word-aligned iteration of the stack. Callee-saved registers are pushed to + // the stack before iterating pointers. Slot values are passed on to + // `visitor`. void IteratePointers(StackVisitor* visitor) const; + // Word-aligned iteration of the stack, starting at `stack_end`. Slot values + // are passed on to `visitor`. This is intended to be used with verifiers that + // only visit a subset of the stack of IteratePointers(). + // + // **Ignores:** + // - Callee-saved registers. + // - SafeStack. + void IteratePointersUnsafe(StackVisitor* visitor, uintptr_t stack_end) const; + // Returns the start of the stack. const void* stack_start() const { return stack_start_; } diff --git a/deps/v8/src/heap/basic-memory-chunk.h b/deps/v8/src/heap/basic-memory-chunk.h index 1b2d7cb5da..993291dc0e 100644 --- a/deps/v8/src/heap/basic-memory-chunk.h +++ b/deps/v8/src/heap/basic-memory-chunk.h @@ -106,6 +106,9 @@ class BasicMemoryChunk { // because there exists a potential pointer to somewhere in the chunk which // can't be updated. PINNED = 1u << 22, + + // This page belongs to a shared heap. + IN_SHARED_HEAP = 1u << 23, }; static const intptr_t kAlignment = @@ -255,6 +258,8 @@ class BasicMemoryChunk { bool InOldSpace() const; V8_EXPORT_PRIVATE bool InLargeObjectSpace() const; + bool InSharedHeap() const { return IsFlagSet(IN_SHARED_HEAP); } + bool IsWritable() const { // If this is a read-only space chunk but heap_ is non-null, it has not yet // been sealed and can be written to. @@ -294,11 +299,13 @@ class BasicMemoryChunk { // Only works if the pointer is in the first kPageSize of the MemoryChunk. static BasicMemoryChunk* FromAddress(Address a) { + DCHECK(!V8_ENABLE_THIRD_PARTY_HEAP_BOOL); return reinterpret_cast<BasicMemoryChunk*>(BaseAddress(a)); } // Only works if the object is in the first kPageSize of the MemoryChunk. static BasicMemoryChunk* FromHeapObject(HeapObject o) { + DCHECK(!V8_ENABLE_THIRD_PARTY_HEAP_BOOL); return reinterpret_cast<BasicMemoryChunk*>(BaseAddress(o.ptr())); } diff --git a/deps/v8/src/heap/code-range.cc b/deps/v8/src/heap/code-range.cc new file mode 100644 index 0000000000..738c12710c --- /dev/null +++ b/deps/v8/src/heap/code-range.cc @@ -0,0 +1,172 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "src/heap/code-range.h" + +#include "src/base/lazy-instance.h" +#include "src/common/globals.h" +#include "src/flags/flags.h" +#include "src/heap/heap-inl.h" + +namespace v8 { +namespace internal { + +namespace { + +DEFINE_LAZY_LEAKY_OBJECT_GETTER(std::shared_ptr<CodeRange>, + GetProcessWideCodeRangeCage) + +DEFINE_LAZY_LEAKY_OBJECT_GETTER(CodeRangeAddressHint, GetCodeRangeAddressHint) + +void FunctionInStaticBinaryForAddressHint() {} +} // anonymous namespace + +Address CodeRangeAddressHint::GetAddressHint(size_t code_range_size) { + base::MutexGuard guard(&mutex_); + auto it = recently_freed_.find(code_range_size); + if (it == recently_freed_.end() || it->second.empty()) { + return FUNCTION_ADDR(&FunctionInStaticBinaryForAddressHint); + } + Address result = it->second.back(); + it->second.pop_back(); + return result; +} + +void CodeRangeAddressHint::NotifyFreedCodeRange(Address code_range_start, + size_t code_range_size) { + base::MutexGuard guard(&mutex_); + recently_freed_[code_range_size].push_back(code_range_start); +} + +CodeRange::~CodeRange() { Free(); } + +bool CodeRange::InitReservation(v8::PageAllocator* page_allocator, + size_t requested) { + DCHECK_NE(requested, 0); + + if (requested <= kMinimumCodeRangeSize) { + requested = kMinimumCodeRangeSize; + } + const size_t reserved_area = + kReservedCodeRangePages * MemoryAllocator::GetCommitPageSize(); + if (requested < (kMaximalCodeRangeSize - reserved_area)) { + requested += RoundUp(reserved_area, MemoryChunk::kPageSize); + // Fullfilling both reserved pages requirement and huge code area + // alignments is not supported (requires re-implementation). + DCHECK_LE(kMinExpectedOSPageSize, page_allocator->AllocatePageSize()); + } + DCHECK_IMPLIES(kPlatformRequiresCodeRange, + requested <= kMaximalCodeRangeSize); + + VirtualMemoryCage::ReservationParams params; + params.page_allocator = page_allocator; + params.reservation_size = requested; + params.base_alignment = + VirtualMemoryCage::ReservationParams::kAnyBaseAlignment; + params.base_bias_size = reserved_area; + params.page_size = MemoryChunk::kPageSize; + params.requested_start_hint = + GetCodeRangeAddressHint()->GetAddressHint(requested); + + if (!VirtualMemoryCage::InitReservation(params)) return false; + + // On some platforms, specifically Win64, we need to reserve some pages at + // the beginning of an executable space. See + // https://cs.chromium.org/chromium/src/components/crash/content/ + // app/crashpad_win.cc?rcl=fd680447881449fba2edcf0589320e7253719212&l=204 + // for details. + if (reserved_area > 0) { + if (!reservation()->SetPermissions(reservation()->address(), reserved_area, + PageAllocator::kReadWrite)) { + return false; + } + } + + return true; +} + +void CodeRange::Free() { + if (IsReserved()) { + GetCodeRangeAddressHint()->NotifyFreedCodeRange( + reservation()->region().begin(), reservation()->region().size()); + VirtualMemoryCage::Free(); + } +} + +uint8_t* CodeRange::RemapEmbeddedBuiltins(Isolate* isolate, + const uint8_t* embedded_blob_code, + size_t embedded_blob_code_size) { + base::MutexGuard guard(&remap_embedded_builtins_mutex_); + + const base::AddressRegion& code_region = reservation()->region(); + CHECK_NE(code_region.begin(), kNullAddress); + CHECK(!code_region.is_empty()); + + uint8_t* embedded_blob_code_copy = + embedded_blob_code_copy_.load(std::memory_order_acquire); + if (embedded_blob_code_copy) { + DCHECK( + code_region.contains(reinterpret_cast<Address>(embedded_blob_code_copy), + embedded_blob_code_size)); + SLOW_DCHECK(memcmp(embedded_blob_code, embedded_blob_code_copy, + embedded_blob_code_size) == 0); + return embedded_blob_code_copy; + } + + const size_t kAllocatePageSize = page_allocator()->AllocatePageSize(); + size_t allocate_code_size = + RoundUp(embedded_blob_code_size, kAllocatePageSize); + + // Allocate the re-embedded code blob in the end. + void* hint = reinterpret_cast<void*>(code_region.end() - allocate_code_size); + + embedded_blob_code_copy = + reinterpret_cast<uint8_t*>(page_allocator()->AllocatePages( + hint, allocate_code_size, kAllocatePageSize, + PageAllocator::kNoAccess)); + + if (!embedded_blob_code_copy) { + V8::FatalProcessOutOfMemory( + isolate, "Can't allocate space for re-embedded builtins"); + } + + size_t code_size = + RoundUp(embedded_blob_code_size, page_allocator()->CommitPageSize()); + + if (!page_allocator()->SetPermissions(embedded_blob_code_copy, code_size, + PageAllocator::kReadWrite)) { + V8::FatalProcessOutOfMemory(isolate, + "Re-embedded builtins: set permissions"); + } + memcpy(embedded_blob_code_copy, embedded_blob_code, embedded_blob_code_size); + + if (!page_allocator()->SetPermissions(embedded_blob_code_copy, code_size, + PageAllocator::kReadExecute)) { + V8::FatalProcessOutOfMemory(isolate, + "Re-embedded builtins: set permissions"); + } + + embedded_blob_code_copy_.store(embedded_blob_code_copy, + std::memory_order_release); + return embedded_blob_code_copy; +} + +// static +void CodeRange::InitializeProcessWideCodeRangeOnce( + v8::PageAllocator* page_allocator, size_t requested_size) { + *GetProcessWideCodeRangeCage() = std::make_shared<CodeRange>(); + if (!GetProcessWideCodeRange()->InitReservation(page_allocator, + requested_size)) { + V8::FatalProcessOutOfMemory( + nullptr, "Failed to reserve virtual memory for CodeRange"); + } +} + +// static +std::shared_ptr<CodeRange> CodeRange::GetProcessWideCodeRange() { + return *GetProcessWideCodeRangeCage(); +} + +} // namespace internal +} // namespace v8 diff --git a/deps/v8/src/heap/code-range.h b/deps/v8/src/heap/code-range.h new file mode 100644 index 0000000000..b1bc6020b5 --- /dev/null +++ b/deps/v8/src/heap/code-range.h @@ -0,0 +1,147 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef V8_HEAP_CODE_RANGE_H_ +#define V8_HEAP_CODE_RANGE_H_ + +#include <unordered_map> +#include <vector> + +#include "src/base/platform/mutex.h" +#include "src/common/globals.h" +#include "src/utils/allocation.h" + +namespace v8 { +namespace internal { + +// The process-wide singleton that keeps track of code range regions with the +// intention to reuse free code range regions as a workaround for CFG memory +// leaks (see crbug.com/870054). +class CodeRangeAddressHint { + public: + // Returns the most recently freed code range start address for the given + // size. If there is no such entry, then a random address is returned. + V8_EXPORT_PRIVATE Address GetAddressHint(size_t code_range_size); + + V8_EXPORT_PRIVATE void NotifyFreedCodeRange(Address code_range_start, + size_t code_range_size); + + private: + base::Mutex mutex_; + // A map from code range size to an array of recently freed code range + // addresses. There should be O(1) different code range sizes. + // The length of each array is limited by the peak number of code ranges, + // which should be also O(1). + std::unordered_map<size_t, std::vector<Address>> recently_freed_; +}; + +// A code range is a virtual memory cage that may contain executable code. It +// has the following layout. +// +// +------------+-----+---------------- ~~~ -+ +// | RW | ... | ... | +// +------------+-----+----------------- ~~~ -+ +// ^ ^ ^ +// start base allocatable base +// +// <------------> <------------------------> +// reserved allocatable region +// <-------------------------------------------> +// code region +// +// The start of the reservation may include reserved page with read-write access +// as required by some platforms (Win64). The cage's page allocator does not +// control the optional reserved page in the beginning of the code region. +// +// The following conditions hold: +// 1) |reservation()->region()| >= |optional RW pages| + +// |reservation()->page_allocator()| +// 2) |reservation()| is AllocatePageSize()-aligned +// 3) |reservation()->page_allocator()| (i.e. allocatable base) is +// MemoryChunk::kAlignment-aligned +// 4) |base()| is CommitPageSize()-aligned +class CodeRange final : public VirtualMemoryCage { + public: + V8_EXPORT_PRIVATE ~CodeRange(); + + uint8_t* embedded_blob_code_copy() const { + // remap_embedded_builtins_mutex_ is designed to protect write contention to + // embedded_blob_code_copy_. It is safe to be read without taking the + // mutex. It is read to check if short builtins ought to be enabled because + // a shared CodeRange has already remapped builtins and to find where the + // instruction stream for a builtin is. + // + // For the first, this racing with an Isolate calling RemapEmbeddedBuiltins + // may result in disabling short builtins, which is not a correctness issue. + // + // For the second, this racing with an Isolate calling RemapEmbeddedBuiltins + // may result in an already running Isolate that did not have short builtins + // enabled (due to max old generation size) to switch over to using remapped + // builtins, which is also not a correctness issue as the remapped builtins + // are byte-equivalent. + // + // Both these scenarios should be rare. The initial Isolate is usually + // created by itself, i.e. without contention. Additionally, the first + // Isolate usually remaps builtins on machines with enough memory, not + // subsequent Isolates in the same process. + return embedded_blob_code_copy_.load(std::memory_order_acquire); + } + +#ifdef V8_OS_WIN64 + // 64-bit Windows needs to track how many Isolates are using the CodeRange for + // registering and unregistering of unwind info. Note that even though + // CodeRanges are used with std::shared_ptr, std::shared_ptr::use_count should + // not be used for synchronization as it's usually implemented with a relaxed + // read. + uint32_t AtomicIncrementUnwindInfoUseCount() { + return unwindinfo_use_count_.fetch_add(1, std::memory_order_acq_rel); + } + + uint32_t AtomicDecrementUnwindInfoUseCount() { + return unwindinfo_use_count_.fetch_sub(1, std::memory_order_acq_rel); + } +#endif // V8_OS_WIN64 + + bool InitReservation(v8::PageAllocator* page_allocator, size_t requested); + + void Free(); + + // Remap and copy the embedded builtins into this CodeRange. This method is + // idempotent and only performs the copy once. This property is so that this + // method can be used uniformly regardless of having a per-Isolate or a shared + // pointer cage. Returns the address of the copy. + // + // The builtins code region will be freed with the code range at tear down. + // + // When ENABLE_SLOW_DCHECKS is on, the contents of the embedded_blob_code are + // compared against the already copied version. + uint8_t* RemapEmbeddedBuiltins(Isolate* isolate, + const uint8_t* embedded_blob_code, + size_t embedded_blob_code_size); + + static void InitializeProcessWideCodeRangeOnce( + v8::PageAllocator* page_allocator, size_t requested_size); + + // If InitializeProcessWideCodeRangeOnce has been called, returns the + // initialized CodeRange. Otherwise returns an empty std::shared_ptr. + V8_EXPORT_PRIVATE static std::shared_ptr<CodeRange> GetProcessWideCodeRange(); + + private: + // Used when short builtin calls are enabled, where embedded builtins are + // copied into the CodeRange so calls can be nearer. + std::atomic<uint8_t*> embedded_blob_code_copy_{nullptr}; + + // When sharing a CodeRange among Isolates, calls to RemapEmbeddedBuiltins may + // race during Isolate::Init. + base::Mutex remap_embedded_builtins_mutex_; + +#ifdef V8_OS_WIN64 + std::atomic<uint32_t> unwindinfo_use_count_{0}; +#endif +}; + +} // namespace internal +} // namespace v8 + +#endif // V8_HEAP_CODE_RANGE_H_ diff --git a/deps/v8/src/heap/collection-barrier.cc b/deps/v8/src/heap/collection-barrier.cc index 92007690aa..feeb23d000 100644 --- a/deps/v8/src/heap/collection-barrier.cc +++ b/deps/v8/src/heap/collection-barrier.cc @@ -22,8 +22,7 @@ bool CollectionBarrier::CollectionRequested() { } LocalHeap::ThreadState CollectionBarrier::main_thread_state_relaxed() { - LocalHeap* main_thread_local_heap = - heap_->isolate()->main_thread_local_heap(); + LocalHeap* main_thread_local_heap = heap_->main_thread_local_heap(); return main_thread_local_heap->state_relaxed(); } diff --git a/deps/v8/src/heap/combined-heap.h b/deps/v8/src/heap/combined-heap.h index 55664114d3..9c9ed9039f 100644 --- a/deps/v8/src/heap/combined-heap.h +++ b/deps/v8/src/heap/combined-heap.h @@ -36,7 +36,8 @@ V8_WARN_UNUSED_RESULT inline bool IsValidHeapObject(Heap* heap, if (V8_ENABLE_THIRD_PARTY_HEAP_BOOL) return third_party_heap::Heap::IsValidHeapObject(object); else - return ReadOnlyHeap::Contains(object) || heap->Contains(object); + return ReadOnlyHeap::Contains(object) || heap->Contains(object) || + heap->SharedHeapContains(object); } } // namespace internal diff --git a/deps/v8/src/heap/concurrent-allocator-inl.h b/deps/v8/src/heap/concurrent-allocator-inl.h index c92b91ca47..07d669b17c 100644 --- a/deps/v8/src/heap/concurrent-allocator-inl.h +++ b/deps/v8/src/heap/concurrent-allocator-inl.h @@ -20,6 +20,7 @@ namespace internal { AllocationResult ConcurrentAllocator::AllocateRaw(int object_size, AllocationAlignment alignment, AllocationOrigin origin) { + DCHECK(!FLAG_enable_third_party_heap); // TODO(dinfuehr): Add support for allocation observers #ifdef DEBUG local_heap_->VerifyCurrent(); diff --git a/deps/v8/src/heap/concurrent-marking.cc b/deps/v8/src/heap/concurrent-marking.cc index eb1511f71d..6f0aa89ebd 100644 --- a/deps/v8/src/heap/concurrent-marking.cc +++ b/deps/v8/src/heap/concurrent-marking.cc @@ -8,6 +8,7 @@ #include <unordered_map> #include "include/v8config.h" +#include "src/common/globals.h" #include "src/execution/isolate.h" #include "src/heap/gc-tracer.h" #include "src/heap/heap-inl.h" @@ -136,13 +137,13 @@ class ConcurrentMarkingVisitor final int VisitSeqOneByteString(Map map, SeqOneByteString object) { if (!ShouldVisit(object)) return 0; VisitMapPointer(object); - return SeqOneByteString::SizeFor(object.synchronized_length()); + return SeqOneByteString::SizeFor(object.length(kAcquireLoad)); } int VisitSeqTwoByteString(Map map, SeqTwoByteString object) { if (!ShouldVisit(object)) return 0; VisitMapPointer(object); - return SeqTwoByteString::SizeFor(object.synchronized_length()); + return SeqTwoByteString::SizeFor(object.length(kAcquireLoad)); } // Implements ephemeron semantics: Marks value if key is already reachable. @@ -232,9 +233,9 @@ class ConcurrentMarkingVisitor final template <typename T> int VisitLeftTrimmableArray(Map map, T object) { - // The synchronized_length() function checks that the length is a Smi. + // The length() function checks that the length is a Smi. // This is not necessarily the case if the array is being left-trimmed. - Object length = object.unchecked_synchronized_length(); + Object length = object.unchecked_length(kAcquireLoad); if (!ShouldVisit(object)) return 0; // The cached length must be the actual length as the array is not black. // Left trimming marks the array black before over-writing the length. @@ -460,16 +461,28 @@ void ConcurrentMarking::Run(JobDelegate* delegate, break; } objects_processed++; - // The order of the two loads is important. - Address new_space_top = heap_->new_space()->original_top_acquire(); - Address new_space_limit = heap_->new_space()->original_limit_relaxed(); - Address new_large_object = heap_->new_lo_space()->pending_object(); + + Address new_space_top = kNullAddress; + Address new_space_limit = kNullAddress; + Address new_large_object = kNullAddress; + + if (heap_->new_space()) { + // The order of the two loads is important. + new_space_top = heap_->new_space()->original_top_acquire(); + new_space_limit = heap_->new_space()->original_limit_relaxed(); + } + + if (heap_->new_lo_space()) { + new_large_object = heap_->new_lo_space()->pending_object(); + } + Address addr = object.address(); + if ((new_space_top <= addr && addr < new_space_limit) || addr == new_large_object) { local_marking_worklists.PushOnHold(object); } else { - Map map = object.synchronized_map(isolate); + Map map = object.map(isolate, kAcquireLoad); if (is_per_context_mode) { Address context; if (native_context_inferrer.Infer(isolate, map, object, &context)) { diff --git a/deps/v8/src/heap/cppgc-js/cpp-heap.cc b/deps/v8/src/heap/cppgc-js/cpp-heap.cc index 636f666521..006c35808f 100644 --- a/deps/v8/src/heap/cppgc-js/cpp-heap.cc +++ b/deps/v8/src/heap/cppgc-js/cpp-heap.cc @@ -5,6 +5,8 @@ #include "src/heap/cppgc-js/cpp-heap.h" #include <cstdint> +#include <memory> +#include <numeric> #include "include/cppgc/heap-consistency.h" #include "include/cppgc/platform.h" @@ -29,6 +31,7 @@ #include "src/heap/cppgc/marking-visitor.h" #include "src/heap/cppgc/object-allocator.h" #include "src/heap/cppgc/prefinalizer-handler.h" +#include "src/heap/cppgc/raw-heap.h" #include "src/heap/cppgc/stats-collector.h" #include "src/heap/cppgc/sweeper.h" #include "src/heap/embedder-tracing.h" @@ -65,6 +68,13 @@ cppgc::HeapStatistics CppHeap::CollectStatistics( detail_level); } +void CppHeap::CollectCustomSpaceStatisticsAtLastGC( + std::vector<cppgc::CustomSpaceIndex> custom_spaces, + std::unique_ptr<CustomSpaceStatisticsReceiver> receiver) { + return internal::CppHeap::From(this)->CollectCustomSpaceStatisticsAtLastGC( + std::move(custom_spaces), std::move(receiver)); +} + void CppHeap::EnableDetachedGarbageCollectionsForTesting() { return internal::CppHeap::From(this) ->EnableDetachedGarbageCollectionsForTesting(); @@ -200,7 +210,7 @@ UnifiedHeapMarker::UnifiedHeapMarker(Key key, Heap* v8_heap, void UnifiedHeapMarker::AddObject(void* object) { mutator_marking_state_.MarkAndPush( - cppgc::internal::HeapObjectHeader::FromPayload(object)); + cppgc::internal::HeapObjectHeader::FromObject(object)); } } // namespace @@ -318,10 +328,6 @@ void CppHeap::TracePrologue(TraceFlags flags) { } bool CppHeap::AdvanceTracing(double deadline_in_ms) { - // TODO(chromium:1154636): The kAtomicMark/kIncrementalMark scope below is - // needed for recording all cpp marking time. Note that it can lead to double - // accounting since this scope is also accounted under an outer v8 scope. - // Make sure to only account this scope once. cppgc::internal::StatsCollector::EnabledScope stats_scope( stats_collector(), in_atomic_pause_ ? cppgc::internal::StatsCollector::kAtomicMark @@ -342,8 +348,6 @@ bool CppHeap::IsTracingDone() { return marking_done_; } void CppHeap::EnterFinalPause(EmbedderStackState stack_state) { CHECK(!in_disallow_gc_scope()); - cppgc::internal::StatsCollector::EnabledScope stats_scope( - stats_collector(), cppgc::internal::StatsCollector::kAtomicMark); in_atomic_pause_ = true; if (override_stack_state_) { stack_state = *override_stack_state_; @@ -359,8 +363,6 @@ void CppHeap::TraceEpilogue(TraceSummary* trace_summary) { CHECK(in_atomic_pause_); CHECK(marking_done_); { - cppgc::internal::StatsCollector::EnabledScope stats_scope( - stats_collector(), cppgc::internal::StatsCollector::kAtomicMark); cppgc::subtle::DisallowGarbageCollectionScope disallow_gc_scope(*this); marker_->LeaveAtomicPause(); } @@ -376,7 +378,8 @@ void CppHeap::TraceEpilogue(TraceSummary* trace_summary) { // TODO(chromium:1056170): replace build flag with dedicated flag. #if DEBUG UnifiedHeapMarkingVerifier verifier(*this); - verifier.Run(stack_state_of_prev_gc_); + verifier.Run(stack_state_of_prev_gc(), stack_end_of_current_gc(), + stats_collector()->marked_bytes()); #endif { @@ -422,12 +425,17 @@ void CppHeap::ReportBufferedAllocationSizeIfPossible() { return; } - if (buffered_allocated_bytes_ < 0) { - DecreaseAllocatedSize(static_cast<size_t>(-buffered_allocated_bytes_)); + // The calls below may trigger full GCs that are synchronous and also execute + // epilogue callbacks. Since such callbacks may allocate, the counter must + // already be zeroed by that time. + const int64_t bytes_to_report = buffered_allocated_bytes_; + buffered_allocated_bytes_ = 0; + + if (bytes_to_report < 0) { + DecreaseAllocatedSize(static_cast<size_t>(-bytes_to_report)); } else { - IncreaseAllocatedSize(static_cast<size_t>(buffered_allocated_bytes_)); + IncreaseAllocatedSize(static_cast<size_t>(bytes_to_report)); } - buffered_allocated_bytes_ = 0; } void CppHeap::CollectGarbageForTesting( @@ -437,6 +445,8 @@ void CppHeap::CollectGarbageForTesting( // Finish sweeping in case it is still running. sweeper().FinishIfRunning(); + SetStackEndOfCurrentGC(v8::base::Stack::GetCurrentStackPosition()); + if (isolate_) { // Go through EmbedderHeapTracer API and perform a unified heap collection. GarbageCollectionForTesting(stack_state); @@ -481,5 +491,82 @@ void CppHeap::FinalizeIncrementalGarbageCollectionForTesting( sweeper_.FinishIfRunning(); } +namespace { + +void ReportCustomSpaceStatistics( + cppgc::internal::RawHeap& raw_heap, + std::vector<cppgc::CustomSpaceIndex> custom_spaces, + std::unique_ptr<CustomSpaceStatisticsReceiver> receiver) { + for (auto custom_space_index : custom_spaces) { + const cppgc::internal::BaseSpace* space = + raw_heap.CustomSpace(custom_space_index); + size_t allocated_bytes = std::accumulate( + space->begin(), space->end(), 0, [](size_t sum, auto* page) { + return sum + page->AllocatedBytesAtLastGC(); + }); + receiver->AllocatedBytes(custom_space_index, allocated_bytes); + } +} + +class CollectCustomSpaceStatisticsAtLastGCTask final : public v8::Task { + public: + static constexpr v8::base::TimeDelta kTaskDelayMs = + v8::base::TimeDelta::FromMilliseconds(10); + + CollectCustomSpaceStatisticsAtLastGCTask( + cppgc::internal::HeapBase& heap, + std::vector<cppgc::CustomSpaceIndex> custom_spaces, + std::unique_ptr<CustomSpaceStatisticsReceiver> receiver) + : heap_(heap), + custom_spaces_(std::move(custom_spaces)), + receiver_(std::move(receiver)) {} + + void Run() final { + cppgc::internal::Sweeper& sweeper = heap_.sweeper(); + if (sweeper.PerformSweepOnMutatorThread( + heap_.platform()->MonotonicallyIncreasingTime() + + kStepSizeMs.InSecondsF())) { + // Sweeping is done. + DCHECK(!sweeper.IsSweepingInProgress()); + ReportCustomSpaceStatistics(heap_.raw_heap(), std::move(custom_spaces_), + std::move(receiver_)); + } else { + heap_.platform()->GetForegroundTaskRunner()->PostDelayedTask( + std::make_unique<CollectCustomSpaceStatisticsAtLastGCTask>( + heap_, std::move(custom_spaces_), std::move(receiver_)), + kTaskDelayMs.InSecondsF()); + } + } + + private: + static constexpr v8::base::TimeDelta kStepSizeMs = + v8::base::TimeDelta::FromMilliseconds(5); + + cppgc::internal::HeapBase& heap_; + std::vector<cppgc::CustomSpaceIndex> custom_spaces_; + std::unique_ptr<CustomSpaceStatisticsReceiver> receiver_; +}; + +constexpr v8::base::TimeDelta + CollectCustomSpaceStatisticsAtLastGCTask::kTaskDelayMs; +constexpr v8::base::TimeDelta + CollectCustomSpaceStatisticsAtLastGCTask::kStepSizeMs; + +} // namespace + +void CppHeap::CollectCustomSpaceStatisticsAtLastGC( + std::vector<cppgc::CustomSpaceIndex> custom_spaces, + std::unique_ptr<CustomSpaceStatisticsReceiver> receiver) { + if (sweeper().IsSweepingInProgress()) { + platform()->GetForegroundTaskRunner()->PostDelayedTask( + std::make_unique<CollectCustomSpaceStatisticsAtLastGCTask>( + AsBase(), std::move(custom_spaces), std::move(receiver)), + CollectCustomSpaceStatisticsAtLastGCTask::kTaskDelayMs.InSecondsF()); + return; + } + ReportCustomSpaceStatistics(raw_heap(), std::move(custom_spaces), + std::move(receiver)); +} + } // namespace internal } // namespace v8 diff --git a/deps/v8/src/heap/cppgc-js/cpp-heap.h b/deps/v8/src/heap/cppgc-js/cpp-heap.h index b13fd25a32..cf99b8fe60 100644 --- a/deps/v8/src/heap/cppgc-js/cpp-heap.h +++ b/deps/v8/src/heap/cppgc-js/cpp-heap.h @@ -5,6 +5,11 @@ #ifndef V8_HEAP_CPPGC_JS_CPP_HEAP_H_ #define V8_HEAP_CPPGC_JS_CPP_HEAP_H_ +#if CPPGC_IS_STANDALONE +static_assert( + false, "V8 targets can not be built with cppgc_is_standalone set to true."); +#endif + #include "include/v8-cppgc.h" #include "include/v8.h" #include "src/base/macros.h" @@ -55,6 +60,10 @@ class V8_EXPORT_PRIVATE CppHeap final void CollectGarbageForTesting( cppgc::internal::GarbageCollector::Config::StackState); + void CollectCustomSpaceStatisticsAtLastGC( + std::vector<cppgc::CustomSpaceIndex>, + std::unique_ptr<CustomSpaceStatisticsReceiver>); + // v8::EmbedderHeapTracer interface. void RegisterV8References( const std::vector<std::pair<void*, void*> >& embedder_fields) final; diff --git a/deps/v8/src/heap/cppgc-js/cpp-snapshot.cc b/deps/v8/src/heap/cppgc-js/cpp-snapshot.cc index 79a863e302..17929247ee 100644 --- a/deps/v8/src/heap/cppgc-js/cpp-snapshot.cc +++ b/deps/v8/src/heap/cppgc-js/cpp-snapshot.cc @@ -382,7 +382,7 @@ class CppGraphBuilderImpl final { EmbedderNode* AddNode(const HeapObjectHeader& header) { return static_cast<EmbedderNode*>( graph_.AddNode(std::unique_ptr<v8::EmbedderGraph::Node>{ - new EmbedderNode(header.GetName().value, header.GetSize())})); + new EmbedderNode(header.GetName().value, header.AllocatedSize())})); } void AddEdge(State& parent, const HeapObjectHeader& header) { @@ -418,7 +418,7 @@ class CppGraphBuilderImpl final { if (HasEmbedderDataBackref( reinterpret_cast<v8::internal::Isolate*>(cpp_heap_.isolate()), - v8_value, parent.header()->Payload())) { + v8_value, parent.header()->ObjectStart())) { parent.get_node()->SetWrapperNode(v8_node); auto* profiler = @@ -512,7 +512,7 @@ class VisiblityVisitor final : public JSVisitor { void Visit(const void*, cppgc::TraceDescriptor desc) final { graph_builder_.VisitForVisibility( &parent_scope_.ParentAsRegularState(), - HeapObjectHeader::FromPayload(desc.base_object_payload)); + HeapObjectHeader::FromObject(desc.base_object_payload)); } void VisitRoot(const void*, cppgc::TraceDescriptor, const cppgc::SourceLocation&) final {} @@ -556,13 +556,13 @@ class GraphBuildingVisitor final : public JSVisitor { void Visit(const void*, cppgc::TraceDescriptor desc) final { graph_builder_.AddEdge( parent_scope_.ParentAsRegularState(), - HeapObjectHeader::FromPayload(desc.base_object_payload)); + HeapObjectHeader::FromObject(desc.base_object_payload)); } void VisitRoot(const void*, cppgc::TraceDescriptor desc, const cppgc::SourceLocation& loc) final { graph_builder_.VisitRootForGraphBuilding( parent_scope_.ParentAsRootState(), - HeapObjectHeader::FromPayload(desc.base_object_payload), loc); + HeapObjectHeader::FromObject(desc.base_object_payload), loc); } void VisitWeakRoot(const void*, cppgc::TraceDescriptor, cppgc::WeakCallback, const void*, const cppgc::SourceLocation&) final {} diff --git a/deps/v8/src/heap/cppgc-js/unified-heap-marking-verifier.cc b/deps/v8/src/heap/cppgc-js/unified-heap-marking-verifier.cc index ea14b52048..b0f8595ec7 100644 --- a/deps/v8/src/heap/cppgc-js/unified-heap-marking-verifier.cc +++ b/deps/v8/src/heap/cppgc-js/unified-heap-marking-verifier.cc @@ -35,7 +35,7 @@ class UnifiedHeapVerificationVisitor final : public JSVisitor { void VisitWeakContainer(const void* object, cppgc::TraceDescriptor, cppgc::TraceDescriptor weak_desc, cppgc::WeakCallback, - const void*) { + const void*) final { if (!object) return; // Contents of weak containers are found themselves through page iteration @@ -58,13 +58,8 @@ class UnifiedHeapVerificationVisitor final : public JSVisitor { UnifiedHeapMarkingVerifier::UnifiedHeapMarkingVerifier( cppgc::internal::HeapBase& heap_base) : MarkingVerifierBase( - heap_base, std::make_unique<UnifiedHeapVerificationVisitor>(state_)) { -} - -void UnifiedHeapMarkingVerifier::SetCurrentParent( - const cppgc::internal::HeapObjectHeader* parent) { - state_.SetCurrentParent(parent); -} + heap_base, state_, + std::make_unique<UnifiedHeapVerificationVisitor>(state_)) {} } // namespace internal } // namespace v8 diff --git a/deps/v8/src/heap/cppgc-js/unified-heap-marking-verifier.h b/deps/v8/src/heap/cppgc-js/unified-heap-marking-verifier.h index 3a54b4dd32..bb2ac09e38 100644 --- a/deps/v8/src/heap/cppgc-js/unified-heap-marking-verifier.h +++ b/deps/v8/src/heap/cppgc-js/unified-heap-marking-verifier.h @@ -16,8 +16,6 @@ class V8_EXPORT_PRIVATE UnifiedHeapMarkingVerifier final explicit UnifiedHeapMarkingVerifier(cppgc::internal::HeapBase&); ~UnifiedHeapMarkingVerifier() final = default; - void SetCurrentParent(const cppgc::internal::HeapObjectHeader*) final; - private: // TODO(chromium:1056170): Use a verification state that can handle JS // references. diff --git a/deps/v8/src/heap/cppgc/caged-heap.cc b/deps/v8/src/heap/cppgc/caged-heap.cc index 951fb0e853..3a8304f448 100644 --- a/deps/v8/src/heap/cppgc/caged-heap.cc +++ b/deps/v8/src/heap/cppgc/caged-heap.cc @@ -45,6 +45,27 @@ VirtualMemory ReserveCagedHeap(PageAllocator* platform_allocator) { UNREACHABLE(); } +class CppgcBoundedPageAllocator final : public v8::base::BoundedPageAllocator { + public: + CppgcBoundedPageAllocator(v8::PageAllocator* page_allocator, Address start, + size_t size, size_t allocate_page_size) + : BoundedPageAllocator(page_allocator, start, size, allocate_page_size) {} + + bool FreePages(void* address, size_t size) final { + // BoundedPageAllocator is not guaranteed to allocate zeroed page. + // Specifically it is possible that BPA frees a page and then tries to + // reallocate the same page before the OS has had a chance to asyncroniously + // reclaim that page. In such cases, the contents of the page would not have + // been cleared by the OS and the reallocated page will keep its previous + // contents. To mitigate this problem, CppgcBoundedPageAllocator clears all + // pages before they are freed. This also includes protected guard pages, so + // CppgcBoundedPageAllocator needs to update permissions before clearing. + SetPermissions(address, size, Permission::kReadWrite); + memset(address, 0, size); + return v8::base::BoundedPageAllocator::FreePages(address, size); + } +}; + } // namespace CagedHeap::CagedHeap(HeapBase* heap_base, PageAllocator* platform_allocator) @@ -73,7 +94,7 @@ CagedHeap::CagedHeap(HeapBase* heap_base, PageAllocator* platform_allocator) caged_heap_start - reinterpret_cast<CagedAddress>(reserved_area_.address()); - bounded_allocator_ = std::make_unique<CagedHeap::AllocatorType>( + bounded_allocator_ = std::make_unique<CppgcBoundedPageAllocator>( platform_allocator, caged_heap_start, reserved_area_.size() - local_data_size_with_padding, kPageSize); } diff --git a/deps/v8/src/heap/cppgc/compactor.cc b/deps/v8/src/heap/cppgc/compactor.cc index f4498e7fbc..5f68705014 100644 --- a/deps/v8/src/heap/cppgc/compactor.cc +++ b/deps/v8/src/heap/cppgc/compactor.cc @@ -15,6 +15,7 @@ #include "src/heap/cppgc/heap-base.h" #include "src/heap/cppgc/heap-page.h" #include "src/heap/cppgc/heap-space.h" +#include "src/heap/cppgc/memory.h" #include "src/heap/cppgc/object-poisoner.h" #include "src/heap/cppgc/raw-heap.h" #include "src/heap/cppgc/stats-collector.h" @@ -129,7 +130,7 @@ void MovableReferences::AddOrFilter(MovableReference* slot) { interior_movable_references_.find(slot)); interior_movable_references_.emplace(slot, nullptr); #if DEBUG - interior_slot_to_object_.emplace(slot, slot_header.Payload()); + interior_slot_to_object_.emplace(slot, slot_header.ObjectStart()); #endif // DEBUG } @@ -144,8 +145,8 @@ void MovableReferences::Relocate(Address from, Address to) { // find the corresponding slot A.x. Object A may be moved already and the // memory may have been freed, which would result in a crash. if (!interior_movable_references_.empty()) { - const HeapObjectHeader& header = HeapObjectHeader::FromPayload(to); - const size_t size = header.GetSize() - sizeof(HeapObjectHeader); + const HeapObjectHeader& header = HeapObjectHeader::FromObject(to); + const size_t size = header.ObjectSize(); RelocateInteriorReferences(from, to, size); } @@ -275,14 +276,14 @@ class CompactionState final { // Return remaining available pages to the free page pool, decommitting // them from the pagefile. for (NormalPage* page : available_pages_) { - SET_MEMORY_INACCESSIBLE(page->PayloadStart(), page->PayloadSize()); + SetMemoryInaccessible(page->PayloadStart(), page->PayloadSize()); NormalPage::Destroy(page); } } void FinishCompactingPage(NormalPage* page) { -#if DEBUG || defined(LEAK_SANITIZER) || defined(ADDRESS_SANITIZER) || \ - defined(MEMORY_SANITIZER) +#if DEBUG || defined(V8_USE_MEMORY_SANITIZER) || \ + defined(V8_USE_ADDRESS_SANITIZER) // Zap the unused portion, until it is either compacted into or freed. if (current_page_ != page) { ZapMemory(page->PayloadStart(), page->PayloadSize()); @@ -303,7 +304,7 @@ class CompactionState final { current_page_->PayloadSize() - used_bytes_in_current_page_; Address payload = current_page_->PayloadStart(); Address free_start = payload + used_bytes_in_current_page_; - SET_MEMORY_INACCESSIBLE(free_start, freed_size); + SetMemoryInaccessible(free_start, freed_size); space_->free_list().Add({free_start, freed_size}); current_page_->object_start_bitmap().SetBit(free_start); } @@ -329,7 +330,7 @@ void CompactPage(NormalPage* page, CompactionState& compaction_state) { header_address < page->PayloadEnd();) { HeapObjectHeader* header = reinterpret_cast<HeapObjectHeader*>(header_address); - size_t size = header->GetSize(); + size_t size = header->AllocatedSize(); DCHECK_GT(size, 0u); DCHECK_LT(size, kPageSize); @@ -349,8 +350,8 @@ void CompactPage(NormalPage* page, CompactionState& compaction_state) { // As compaction is under way, leave the freed memory accessible // while compacting the rest of the page. We just zap the payload // to catch out other finalizers trying to access it. -#if DEBUG || defined(LEAK_SANITIZER) || defined(ADDRESS_SANITIZER) || \ - defined(MEMORY_SANITIZER) +#if DEBUG || defined(V8_USE_MEMORY_SANITIZER) || \ + defined(V8_USE_ADDRESS_SANITIZER) ZapMemory(header, size); #endif header_address += size; diff --git a/deps/v8/src/heap/cppgc/concurrent-marker.cc b/deps/v8/src/heap/cppgc/concurrent-marker.cc index 34953b9ec3..6763515f28 100644 --- a/deps/v8/src/heap/cppgc/concurrent-marker.cc +++ b/deps/v8/src/heap/cppgc/concurrent-marker.cc @@ -125,7 +125,7 @@ void ConcurrentMarkingTask::ProcessWorklists( BasePage::FromPayload(item.base_object_payload) ->SynchronizedLoad(); const HeapObjectHeader& header = - HeapObjectHeader::FromPayload(item.base_object_payload); + HeapObjectHeader::FromObject(item.base_object_payload); DCHECK(!header.IsInConstruction<AccessMode::kAtomic>()); DCHECK(header.IsMarked<AccessMode::kAtomic>()); concurrent_marking_state.AccountMarkedBytes(header); diff --git a/deps/v8/src/heap/cppgc/explicit-management.cc b/deps/v8/src/heap/cppgc/explicit-management.cc index b3ab5f5b51..6e327339aa 100644 --- a/deps/v8/src/heap/cppgc/explicit-management.cc +++ b/deps/v8/src/heap/cppgc/explicit-management.cc @@ -9,50 +9,46 @@ #include "src/heap/cppgc/heap-base.h" #include "src/heap/cppgc/heap-object-header.h" #include "src/heap/cppgc/heap-page.h" -#include "src/heap/cppgc/sanitizers.h" +#include "src/heap/cppgc/memory.h" namespace cppgc { namespace internal { namespace { -std::pair<bool, BasePage*> CanModifyObject(void* object) { - // object is guaranteed to be of type GarbageCollected, so getting the - // BasePage is okay for regular and large objects. - auto* base_page = BasePage::FromPayload(object); - auto* heap = base_page->heap(); +bool InGC(HeapHandle& heap_handle) { + const auto& heap = HeapBase::From(heap_handle); // Whenever the GC is active, avoid modifying the object as it may mess with // state that the GC needs. - const bool in_gc = heap->in_atomic_pause() || heap->marker() || - heap->sweeper().IsSweepingInProgress(); - return {!in_gc, base_page}; + return heap.in_atomic_pause() || heap.marker() || + heap.sweeper().IsSweepingInProgress(); } } // namespace -void FreeUnreferencedObject(void* object) { - bool can_free; - BasePage* base_page; - std::tie(can_free, base_page) = CanModifyObject(object); - if (!can_free) { +void FreeUnreferencedObject(HeapHandle& heap_handle, void* object) { + if (InGC(heap_handle)) { return; } - auto& header = HeapObjectHeader::FromPayload(object); + auto& header = HeapObjectHeader::FromObject(object); header.Finalize(); + // `object` is guaranteed to be of type GarbageCollected, so getting the + // BasePage is okay for regular and large objects. + BasePage* base_page = BasePage::FromPayload(object); if (base_page->is_large()) { // Large object. base_page->space()->RemovePage(base_page); base_page->heap()->stats_collector()->NotifyExplicitFree( LargePage::From(base_page)->PayloadSize()); LargePage::Destroy(LargePage::From(base_page)); } else { // Regular object. - const size_t header_size = header.GetSize(); + const size_t header_size = header.AllocatedSize(); auto* normal_page = NormalPage::From(base_page); auto& normal_space = *static_cast<NormalPageSpace*>(base_page->space()); auto& lab = normal_space.linear_allocation_buffer(); - ConstAddress payload_end = header.PayloadEnd(); - SET_MEMORY_INACCESSIBLE(&header, header_size); + ConstAddress payload_end = header.ObjectEnd(); + SetMemoryInaccessible(&header, header_size); if (payload_end == lab.start()) { // Returning to LAB. lab.Set(reinterpret_cast<Address>(&header), lab.size() + header_size); normal_page->object_start_bitmap().ClearBit(lab.start()); @@ -69,18 +65,18 @@ namespace { bool Grow(HeapObjectHeader& header, BasePage& base_page, size_t new_size, size_t size_delta) { - DCHECK_GE(new_size, header.GetSize() + kAllocationGranularity); + DCHECK_GE(new_size, header.AllocatedSize() + kAllocationGranularity); DCHECK_GE(size_delta, kAllocationGranularity); DCHECK(!base_page.is_large()); auto& normal_space = *static_cast<NormalPageSpace*>(base_page.space()); auto& lab = normal_space.linear_allocation_buffer(); - if (lab.start() == header.PayloadEnd() && lab.size() >= size_delta) { + if (lab.start() == header.ObjectEnd() && lab.size() >= size_delta) { // LABs are considered used memory which means that no allocated size // adjustments are needed. Address delta_start = lab.Allocate(size_delta); - SET_MEMORY_ACCESSIBLE(delta_start, size_delta); - header.SetSize(new_size); + SetMemoryAccessible(delta_start, size_delta); + header.SetAllocatedSize(new_size); return true; } return false; @@ -88,30 +84,30 @@ bool Grow(HeapObjectHeader& header, BasePage& base_page, size_t new_size, bool Shrink(HeapObjectHeader& header, BasePage& base_page, size_t new_size, size_t size_delta) { - DCHECK_GE(header.GetSize(), new_size + kAllocationGranularity); + DCHECK_GE(header.AllocatedSize(), new_size + kAllocationGranularity); DCHECK_GE(size_delta, kAllocationGranularity); DCHECK(!base_page.is_large()); auto& normal_space = *static_cast<NormalPageSpace*>(base_page.space()); auto& lab = normal_space.linear_allocation_buffer(); - Address free_start = header.PayloadEnd() - size_delta; - if (lab.start() == header.PayloadEnd()) { + Address free_start = header.ObjectEnd() - size_delta; + if (lab.start() == header.ObjectEnd()) { DCHECK_EQ(free_start, lab.start() - size_delta); // LABs are considered used memory which means that no allocated size // adjustments are needed. lab.Set(free_start, lab.size() + size_delta); - SET_MEMORY_INACCESSIBLE(lab.start(), size_delta); - header.SetSize(new_size); + SetMemoryInaccessible(lab.start(), size_delta); + header.SetAllocatedSize(new_size); return true; } // Heuristic: Only return memory to the free list if the block is larger than // the smallest size class. if (size_delta >= ObjectAllocator::kSmallestSpaceSize) { - SET_MEMORY_INACCESSIBLE(free_start, size_delta); + SetMemoryInaccessible(free_start, size_delta); base_page.heap()->stats_collector()->NotifyExplicitFree(size_delta); normal_space.free_list().Add({free_start, size_delta}); NormalPage::From(&base_page)->object_start_bitmap().SetBit(free_start); - header.SetSize(new_size); + header.SetAllocatedSize(new_size); } // Return success in any case, as we want to avoid that embedders start // copying memory because of small deltas. @@ -121,10 +117,11 @@ bool Shrink(HeapObjectHeader& header, BasePage& base_page, size_t new_size, } // namespace bool Resize(void* object, size_t new_object_size) { - bool can_resize; - BasePage* base_page; - std::tie(can_resize, base_page) = CanModifyObject(object); - if (!can_resize) { + // `object` is guaranteed to be of type GarbageCollected, so getting the + // BasePage is okay for regular and large objects. + BasePage* base_page = BasePage::FromPayload(object); + + if (InGC(*base_page->heap())) { return false; } @@ -136,8 +133,8 @@ bool Resize(void* object, size_t new_object_size) { const size_t new_size = RoundUp<kAllocationGranularity>( sizeof(HeapObjectHeader) + new_object_size); - auto& header = HeapObjectHeader::FromPayload(object); - const size_t old_size = header.GetSize(); + auto& header = HeapObjectHeader::FromObject(object); + const size_t old_size = header.AllocatedSize(); if (new_size > old_size) { return Grow(header, *base_page, new_size, new_size - old_size); diff --git a/deps/v8/src/heap/cppgc/free-list.cc b/deps/v8/src/heap/cppgc/free-list.cc index 705d31725a..600e15312c 100644 --- a/deps/v8/src/heap/cppgc/free-list.cc +++ b/deps/v8/src/heap/cppgc/free-list.cc @@ -8,9 +8,9 @@ #include "include/cppgc/internal/logging.h" #include "src/base/bits.h" +#include "src/base/sanitizer/asan.h" #include "src/heap/cppgc/globals.h" #include "src/heap/cppgc/heap-object-header.h" -#include "src/heap/cppgc/sanitizers.h" namespace cppgc { namespace internal { @@ -132,7 +132,7 @@ FreeList::Block FreeList::Allocate(size_t allocation_size) { // Final bucket candidate; check initial entry if it is able // to service this allocation. Do not perform a linear scan, // as it is considered too costly. - if (!entry || entry->GetSize() < allocation_size) break; + if (!entry || entry->AllocatedSize() < allocation_size) break; } if (entry) { if (!entry->Next()) { @@ -141,7 +141,7 @@ FreeList::Block FreeList::Allocate(size_t allocation_size) { } entry->Unlink(&free_list_heads_[index]); biggest_free_list_index_ = index; - return {entry, entry->GetSize()}; + return {entry, entry->AllocatedSize()}; } } biggest_free_list_index_ = index; @@ -158,7 +158,7 @@ size_t FreeList::Size() const { size_t size = 0; for (auto* entry : free_list_heads_) { while (entry) { - size += entry->GetSize(); + size += entry->AllocatedSize(); entry = entry->Next(); } } @@ -175,7 +175,7 @@ bool FreeList::ContainsForTesting(Block block) const { for (Entry* entry = list; entry; entry = entry->Next()) { if (entry <= block.address && (reinterpret_cast<Address>(block.address) + block.size <= - reinterpret_cast<Address>(entry) + entry->GetSize())) + reinterpret_cast<Address>(entry) + entry->AllocatedSize())) return true; } } @@ -204,7 +204,7 @@ void FreeList::CollectStatistics( size_t entry_size = 0; for (Entry* entry = free_list_heads_[i]; entry; entry = entry->Next()) { ++entry_count; - entry_size += entry->GetSize(); + entry_size += entry->AllocatedSize(); } bucket_size.push_back(static_cast<size_t>(1) << i); free_count.push_back(entry_count); diff --git a/deps/v8/src/heap/cppgc/gc-info-table.cc b/deps/v8/src/heap/cppgc/gc-info-table.cc index 6b177848cb..7462ba8a21 100644 --- a/deps/v8/src/heap/cppgc/gc-info-table.cc +++ b/deps/v8/src/heap/cppgc/gc-info-table.cc @@ -35,8 +35,9 @@ PageAllocator* GetAllocator(PageAllocator* page_allocator) { default_page_allocator; page_allocator = default_page_allocator.get(); } - // TODO(chromium:1056170): Wrap page_allocator into LsanPageAllocator when - // running with LEAK_SANITIZER. + // No need to introduce LSAN support for PageAllocator, as `GCInfoTable` is + // already a leaky object and the table payload (`GCInfoTable::table_`) should + // not refer to dynamically allocated objects. return page_allocator; } diff --git a/deps/v8/src/heap/cppgc/heap-base.cc b/deps/v8/src/heap/cppgc/heap-base.cc index f89c4c9f11..c7664f09c6 100644 --- a/deps/v8/src/heap/cppgc/heap-base.cc +++ b/deps/v8/src/heap/cppgc/heap-base.cc @@ -5,8 +5,8 @@ #include "src/heap/cppgc/heap-base.h" #include "include/cppgc/heap-consistency.h" -#include "src/base/bounded-page-allocator.h" #include "src/base/platform/platform.h" +#include "src/base/sanitizer/lsan-page-allocator.h" #include "src/heap/base/stack.h" #include "src/heap/cppgc/globals.h" #include "src/heap/cppgc/heap-object-header.h" @@ -15,6 +15,7 @@ #include "src/heap/cppgc/heap-visitor.h" #include "src/heap/cppgc/marker.h" #include "src/heap/cppgc/marking-verifier.h" +#include "src/heap/cppgc/object-view.h" #include "src/heap/cppgc/page-memory.h" #include "src/heap/cppgc/prefinalizer-handler.h" #include "src/heap/cppgc/stats-collector.h" @@ -35,13 +36,7 @@ class ObjectSizeCounter : private HeapVisitor<ObjectSizeCounter> { private: static size_t ObjectSize(const HeapObjectHeader* header) { - const size_t size = - header->IsLargeObject() - ? static_cast<const LargePage*>(BasePage::FromPayload(header)) - ->PayloadSize() - : header->GetSize(); - DCHECK_GE(size, sizeof(HeapObjectHeader)); - return size - sizeof(HeapObjectHeader); + return ObjectView(*header).Size(); } bool VisitHeapObjectHeader(HeapObjectHeader* header) { @@ -62,13 +57,16 @@ HeapBase::HeapBase( std::unique_ptr<MetricRecorder> histogram_recorder) : raw_heap_(this, custom_spaces), platform_(std::move(platform)), +#if defined(LEAK_SANITIZER) + lsan_page_allocator_(std::make_unique<v8::base::LsanPageAllocator>( + platform_->GetPageAllocator())), +#endif // LEAK_SANITIZER #if defined(CPPGC_CAGED_HEAP) - caged_heap_(this, platform_->GetPageAllocator()), + caged_heap_(this, page_allocator()), page_backend_(std::make_unique<PageBackend>(&caged_heap_.allocator())), -#else - page_backend_( - std::make_unique<PageBackend>(platform_->GetPageAllocator())), -#endif +#else // !CPPGC_CAGED_HEAP + page_backend_(std::make_unique<PageBackend>(page_allocator())), +#endif // !CPPGC_CAGED_HEAP stats_collector_(std::make_unique<StatsCollector>( std::move(histogram_recorder), platform_.get())), stack_(std::make_unique<heap::base::Stack>( @@ -85,6 +83,14 @@ HeapBase::HeapBase( HeapBase::~HeapBase() = default; +PageAllocator* HeapBase::page_allocator() const { +#if defined(LEAK_SANITIZER) + return lsan_page_allocator_.get(); +#else // !LEAK_SANITIZER + return platform_->GetPageAllocator(); +#endif // !LEAK_SANITIZER +} + size_t HeapBase::ObjectPayloadSize() const { return ObjectSizeCounter().GetSize(const_cast<RawHeap*>(&raw_heap())); } diff --git a/deps/v8/src/heap/cppgc/heap-base.h b/deps/v8/src/heap/cppgc/heap-base.h index f9bdb95c04..8136541718 100644 --- a/deps/v8/src/heap/cppgc/heap-base.h +++ b/deps/v8/src/heap/cppgc/heap-base.h @@ -19,6 +19,7 @@ #include "src/heap/cppgc/metric-recorder.h" #include "src/heap/cppgc/object-allocator.h" #include "src/heap/cppgc/process-heap-statistics.h" +#include "src/heap/cppgc/process-heap.h" #include "src/heap/cppgc/raw-heap.h" #include "src/heap/cppgc/sweeper.h" #include "v8config.h" // NOLINT(build/include_directory) @@ -27,6 +28,12 @@ #include "src/heap/cppgc/caged-heap.h" #endif +namespace v8 { +namespace base { +class LsanPageAllocator; +} // namespace base +} // namespace v8 + namespace heap { namespace base { class Stack; @@ -152,6 +159,9 @@ class V8_EXPORT_PRIVATE HeapBase : public cppgc::HeapHandle { size_t ObjectPayloadSize() const; StackSupport stack_support() const { return stack_support_; } + const EmbedderStackState* override_stack_state() const { + return override_stack_state_.get(); + } void AdvanceIncrementalGarbageCollectionOnAllocationIfNeeded(); @@ -172,6 +182,11 @@ class V8_EXPORT_PRIVATE HeapBase : public cppgc::HeapHandle { stack_state_of_prev_gc_ = stack_state; } + uintptr_t stack_end_of_current_gc() const { return stack_end_of_current_gc_; } + void SetStackEndOfCurrentGC(uintptr_t stack_end) { + stack_end_of_current_gc_ = stack_end; + } + void SetInAtomicPauseForTesting(bool value) { in_atomic_pause_ = value; } virtual void StartIncrementalGarbageCollectionForTesting() = 0; @@ -189,11 +204,20 @@ class V8_EXPORT_PRIVATE HeapBase : public cppgc::HeapHandle { void ExecutePreFinalizers(); + PageAllocator* page_allocator() const; + RawHeap raw_heap_; std::shared_ptr<cppgc::Platform> platform_; + +#if defined(LEAK_SANITIZER) + std::unique_ptr<v8::base::LsanPageAllocator> lsan_page_allocator_; +#endif // LEAK_SANITIZER + + HeapRegistry::Subscription heap_registry_subscription_{*this}; + #if defined(CPPGC_CAGED_HEAP) CagedHeap caged_heap_; -#endif +#endif // CPPGC_CAGED_HEAP std::unique_ptr<PageBackend> page_backend_; std::unique_ptr<StatsCollector> stats_collector_; @@ -224,6 +248,10 @@ class V8_EXPORT_PRIVATE HeapBase : public cppgc::HeapHandle { EmbedderStackState::kNoHeapPointers; std::unique_ptr<EmbedderStackState> override_stack_state_; + // Marker that signals end of the interesting stack region in which on-heap + // pointers can be found. + uintptr_t stack_end_of_current_gc_ = 0; + bool in_atomic_pause_ = false; friend class MarkerBase::IncrementalMarkingTask; diff --git a/deps/v8/src/heap/cppgc/heap-object-header.cc b/deps/v8/src/heap/cppgc/heap-object-header.cc index 0f5530114c..5ff0e230e7 100644 --- a/deps/v8/src/heap/cppgc/heap-object-header.cc +++ b/deps/v8/src/heap/cppgc/heap-object-header.cc @@ -6,9 +6,9 @@ #include "include/cppgc/internal/api-constants.h" #include "src/base/macros.h" +#include "src/base/sanitizer/asan.h" #include "src/heap/cppgc/gc-info-table.h" #include "src/heap/cppgc/heap-page.h" -#include "src/heap/cppgc/sanitizers.h" namespace cppgc { namespace internal { @@ -28,17 +28,17 @@ void HeapObjectHeader::Finalize() { IsLargeObject() ? LargePage::From(BasePage::FromPayload(this))->ObjectSize() : ObjectSize(); - ASAN_UNPOISON_MEMORY_REGION(Payload(), size); + ASAN_UNPOISON_MEMORY_REGION(ObjectStart(), size); #endif // V8_USE_ADDRESS_SANITIZER const GCInfo& gc_info = GlobalGCInfoTable::GCInfoFromIndex(GetGCInfoIndex()); if (gc_info.finalize) { - gc_info.finalize(Payload()); + gc_info.finalize(ObjectStart()); } } HeapObjectName HeapObjectHeader::GetName() const { const GCInfo& gc_info = GlobalGCInfoTable::GCInfoFromIndex(GetGCInfoIndex()); - return gc_info.name(Payload()); + return gc_info.name(ObjectStart()); } } // namespace internal diff --git a/deps/v8/src/heap/cppgc/heap-object-header.h b/deps/v8/src/heap/cppgc/heap-object-header.h index 7e940ca347..a50d115e52 100644 --- a/deps/v8/src/heap/cppgc/heap-object-header.h +++ b/deps/v8/src/heap/cppgc/heap-object-header.h @@ -57,22 +57,22 @@ class HeapObjectHeader { static constexpr size_t kMaxSize = (size_t{1} << kSizeLog2) - 1; static constexpr uint16_t kLargeObjectSizeInHeader = 0; - inline static HeapObjectHeader& FromPayload(void* address); - inline static const HeapObjectHeader& FromPayload(const void* address); + inline static HeapObjectHeader& FromObject(void* address); + inline static const HeapObjectHeader& FromObject(const void* address); inline HeapObjectHeader(size_t size, GCInfoIndex gc_info_index); - // The payload starts directly after the HeapObjectHeader. - inline Address Payload() const; + // The object starts directly after the HeapObjectHeader. + inline Address ObjectStart() const; template <AccessMode mode = AccessMode::kNonAtomic> - inline Address PayloadEnd() const; + inline Address ObjectEnd() const; template <AccessMode mode = AccessMode::kNonAtomic> inline GCInfoIndex GetGCInfoIndex() const; template <AccessMode mode = AccessMode::kNonAtomic> - inline size_t GetSize() const; - inline void SetSize(size_t size); + inline size_t AllocatedSize() const; + inline void SetAllocatedSize(size_t size); template <AccessMode mode = AccessMode::kNonAtomic> inline size_t ObjectSize() const; @@ -149,15 +149,15 @@ static_assert(kAllocationGranularity == sizeof(HeapObjectHeader), "guarantee alignment"); // static -HeapObjectHeader& HeapObjectHeader::FromPayload(void* payload) { - return *reinterpret_cast<HeapObjectHeader*>(static_cast<Address>(payload) - +HeapObjectHeader& HeapObjectHeader::FromObject(void* object) { + return *reinterpret_cast<HeapObjectHeader*>(static_cast<Address>(object) - sizeof(HeapObjectHeader)); } // static -const HeapObjectHeader& HeapObjectHeader::FromPayload(const void* payload) { +const HeapObjectHeader& HeapObjectHeader::FromObject(const void* object) { return *reinterpret_cast<const HeapObjectHeader*>( - static_cast<ConstAddress>(payload) - sizeof(HeapObjectHeader)); + static_cast<ConstAddress>(object) - sizeof(HeapObjectHeader)); } HeapObjectHeader::HeapObjectHeader(size_t size, GCInfoIndex gc_info_index) { @@ -183,16 +183,16 @@ HeapObjectHeader::HeapObjectHeader(size_t size, GCInfoIndex gc_info_index) { #endif // DEBUG } -Address HeapObjectHeader::Payload() const { +Address HeapObjectHeader::ObjectStart() const { return reinterpret_cast<Address>(const_cast<HeapObjectHeader*>(this)) + sizeof(HeapObjectHeader); } template <AccessMode mode> -Address HeapObjectHeader::PayloadEnd() const { +Address HeapObjectHeader::ObjectEnd() const { DCHECK(!IsLargeObject()); return reinterpret_cast<Address>(const_cast<HeapObjectHeader*>(this)) + - GetSize<mode>(); + AllocatedSize<mode>(); } template <AccessMode mode> @@ -203,7 +203,7 @@ GCInfoIndex HeapObjectHeader::GetGCInfoIndex() const { } template <AccessMode mode> -size_t HeapObjectHeader::GetSize() const { +size_t HeapObjectHeader::AllocatedSize() const { // Size is immutable after construction while either marking or sweeping // is running so relaxed load (if mode == kAtomic) is enough. uint16_t encoded_low_value = @@ -212,19 +212,21 @@ size_t HeapObjectHeader::GetSize() const { return size; } -void HeapObjectHeader::SetSize(size_t size) { +void HeapObjectHeader::SetAllocatedSize(size_t size) { DCHECK(!IsMarked()); encoded_low_ = EncodeSize(size); } template <AccessMode mode> size_t HeapObjectHeader::ObjectSize() const { - return GetSize<mode>() - sizeof(HeapObjectHeader); + // The following DCHECK also fails for large objects. + DCHECK_GT(AllocatedSize<mode>(), sizeof(HeapObjectHeader)); + return AllocatedSize<mode>() - sizeof(HeapObjectHeader); } template <AccessMode mode> bool HeapObjectHeader::IsLargeObject() const { - return GetSize<mode>() == kLargeObjectSizeInHeader; + return AllocatedSize<mode>() == kLargeObjectSizeInHeader; } template <AccessMode mode> @@ -235,7 +237,8 @@ bool HeapObjectHeader::IsInConstruction() const { } void HeapObjectHeader::MarkAsFullyConstructed() { - MakeGarbageCollectedTraitInternal::MarkObjectAsFullyConstructed(Payload()); + MakeGarbageCollectedTraitInternal::MarkObjectAsFullyConstructed( + ObjectStart()); } template <AccessMode mode> @@ -282,7 +285,7 @@ template <AccessMode mode> void HeapObjectHeader::Trace(Visitor* visitor) const { const GCInfo& gc_info = GlobalGCInfoTable::GCInfoFromIndex(GetGCInfoIndex<mode>()); - return gc_info.trace(visitor, Payload()); + return gc_info.trace(visitor, ObjectStart()); } template <AccessMode mode, HeapObjectHeader::EncodedHalf part, diff --git a/deps/v8/src/heap/cppgc/heap-page.cc b/deps/v8/src/heap/cppgc/heap-page.cc index d573d675ee..f65b3fed9b 100644 --- a/deps/v8/src/heap/cppgc/heap-page.cc +++ b/deps/v8/src/heap/cppgc/heap-page.cc @@ -69,6 +69,11 @@ ConstAddress BasePage::PayloadEnd() const { return const_cast<BasePage*>(this)->PayloadEnd(); } +size_t BasePage::AllocatedBytesAtLastGC() const { + return is_large() ? LargePage::From(this)->AllocatedBytesAtLastGC() + : NormalPage::From(this)->AllocatedBytesAtLastGC(); +} + HeapObjectHeader* BasePage::TryObjectHeaderFromInnerAddress( void* address) const { return const_cast<HeapObjectHeader*>( diff --git a/deps/v8/src/heap/cppgc/heap-page.h b/deps/v8/src/heap/cppgc/heap-page.h index 1a66b8593e..39d5e644ee 100644 --- a/deps/v8/src/heap/cppgc/heap-page.h +++ b/deps/v8/src/heap/cppgc/heap-page.h @@ -46,6 +46,10 @@ class V8_EXPORT_PRIVATE BasePage { Address PayloadEnd(); ConstAddress PayloadEnd() const; + // Returns the size of live objects on the page at the last GC. + // The counter is update after sweeping. + size_t AllocatedBytesAtLastGC() const; + // |address| must refer to real object. template <AccessMode = AccessMode::kNonAtomic> HeapObjectHeader& ObjectHeaderFromInnerAddress(void* address) const; @@ -107,7 +111,7 @@ class V8_EXPORT_PRIVATE NormalPage final : public BasePage { bool operator!=(IteratorImpl other) const { return !(*this == other); } IteratorImpl& operator++() { - const size_t size = p_->GetSize(); + const size_t size = p_->AllocatedSize(); DCHECK_EQ(0, (size & (sizeof(T) - 1))); p_ += (size / sizeof(T)); if (reinterpret_cast<ConstAddress>(p_) == lab_start_) { @@ -169,6 +173,12 @@ class V8_EXPORT_PRIVATE NormalPage final : public BasePage { return (PayloadStart() <= address) && (address < PayloadEnd()); } + size_t AllocatedBytesAtLastGC() const { return allocated_bytes_at_last_gc_; } + + void SetAllocatedBytesAtLastGC(size_t bytes) { + allocated_bytes_at_last_gc_ = bytes; + } + PlatformAwareObjectStartBitmap& object_start_bitmap() { return object_start_bitmap_; } @@ -180,6 +190,7 @@ class V8_EXPORT_PRIVATE NormalPage final : public BasePage { NormalPage(HeapBase* heap, BaseSpace* space); ~NormalPage(); + size_t allocated_bytes_at_last_gc_ = 0; PlatformAwareObjectStartBitmap object_start_bitmap_; }; @@ -210,7 +221,12 @@ class V8_EXPORT_PRIVATE LargePage final : public BasePage { ConstAddress PayloadEnd() const; size_t PayloadSize() const { return payload_size_; } - size_t ObjectSize() const { return payload_size_ - sizeof(HeapObjectHeader); } + size_t ObjectSize() const { + DCHECK_GT(payload_size_, sizeof(HeapObjectHeader)); + return payload_size_ - sizeof(HeapObjectHeader); + } + + size_t AllocatedBytesAtLastGC() const { return ObjectSize(); } bool PayloadContains(ConstAddress address) const { return (PayloadStart() <= address) && (address < PayloadEnd()); @@ -248,7 +264,7 @@ const HeapObjectHeader* ObjectHeaderFromInnerAddressImpl(const BasePage* page, const HeapObjectHeader* header = bitmap.FindHeader<mode>(static_cast<ConstAddress>(address)); DCHECK_LT(address, reinterpret_cast<ConstAddress>(header) + - header->GetSize<AccessMode::kAtomic>()); + header->AllocatedSize<AccessMode::kAtomic>()); return header; } diff --git a/deps/v8/src/heap/cppgc/heap-statistics-collector.cc b/deps/v8/src/heap/cppgc/heap-statistics-collector.cc index 961148babd..ef283e856a 100644 --- a/deps/v8/src/heap/cppgc/heap-statistics-collector.cc +++ b/deps/v8/src/heap/cppgc/heap-statistics-collector.cc @@ -148,7 +148,7 @@ bool HeapStatisticsCollector::VisitHeapObjectHeader(HeapObjectHeader* header) { DCHECK_NOT_NULL(current_space_stats_); DCHECK_NOT_NULL(current_page_stats_); if (header->IsFree()) return true; - size_t object_size = header->GetSize(); + size_t object_size = header->AllocatedSize(); RecordObjectType(current_space_stats_, header, object_size); current_page_stats_->used_size_bytes += object_size; return true; diff --git a/deps/v8/src/heap/cppgc/heap.cc b/deps/v8/src/heap/cppgc/heap.cc index c0c9cec929..dc127f8e51 100644 --- a/deps/v8/src/heap/cppgc/heap.cc +++ b/deps/v8/src/heap/cppgc/heap.cc @@ -176,6 +176,7 @@ void Heap::FinalizeGarbageCollection(Config::StackState stack_state) { if (override_stack_state_) { config_.stack_state = *override_stack_state_; } + SetStackEndOfCurrentGC(v8::base::Stack::GetCurrentStackPosition()); in_atomic_pause_ = true; { // This guards atomic pause marking, meaning that no internal method or @@ -188,7 +189,8 @@ void Heap::FinalizeGarbageCollection(Config::StackState stack_state) { // TODO(chromium:1056170): replace build flag with dedicated flag. #if DEBUG MarkingVerifier verifier(*this); - verifier.Run(config_.stack_state); + verifier.Run(config_.stack_state, stack_end_of_current_gc(), + stats_collector()->marked_bytes()); #endif subtle::NoGarbageCollectionScope no_gc(*this); diff --git a/deps/v8/src/heap/cppgc/liveness-broker.cc b/deps/v8/src/heap/cppgc/liveness-broker.cc index 8c61268ba8..d3dd457e05 100644 --- a/deps/v8/src/heap/cppgc/liveness-broker.cc +++ b/deps/v8/src/heap/cppgc/liveness-broker.cc @@ -9,7 +9,7 @@ namespace cppgc { bool LivenessBroker::IsHeapObjectAliveImpl(const void* payload) const { - return internal::HeapObjectHeader::FromPayload(payload).IsMarked(); + return internal::HeapObjectHeader::FromObject(payload).IsMarked(); } namespace internal { diff --git a/deps/v8/src/heap/cppgc/marker.cc b/deps/v8/src/heap/cppgc/marker.cc index d30bb0a8ec..d26fd580df 100644 --- a/deps/v8/src/heap/cppgc/marker.cc +++ b/deps/v8/src/heap/cppgc/marker.cc @@ -191,7 +191,7 @@ MarkerBase::~MarkerBase() { MarkingWorklists::EphemeronPairItem item; while (mutator_marking_state_.discovered_ephemeron_pairs_worklist().Pop( &item)) { - DCHECK(!HeapObjectHeader::FromPayload(item.key).IsMarked()); + DCHECK(!HeapObjectHeader::FromObject(item.key).IsMarked()); } #else marking_worklists_.discovered_ephemeron_pairs_worklist()->Clear(); @@ -231,6 +231,8 @@ void MarkerBase::StartMarking() { } void MarkerBase::EnterAtomicPause(MarkingConfig::StackState stack_state) { + StatsCollector::EnabledScope top_stats_scope(heap().stats_collector(), + StatsCollector::kAtomicMark); StatsCollector::EnabledScope stats_scope(heap().stats_collector(), StatsCollector::kMarkAtomicPrologue); @@ -261,30 +263,38 @@ void MarkerBase::EnterAtomicPause(MarkingConfig::StackState stack_state) { } void MarkerBase::LeaveAtomicPause() { - StatsCollector::EnabledScope stats_scope(heap().stats_collector(), - StatsCollector::kMarkAtomicEpilogue); - DCHECK(!incremental_marking_handle_); - ResetRememberedSet(heap()); - heap().stats_collector()->NotifyMarkingCompleted( - // GetOverallMarkedBytes also includes concurrently marked bytes. - schedule_.GetOverallMarkedBytes()); - is_marking_ = false; + { + StatsCollector::EnabledScope top_stats_scope(heap().stats_collector(), + StatsCollector::kAtomicMark); + StatsCollector::EnabledScope stats_scope( + heap().stats_collector(), StatsCollector::kMarkAtomicEpilogue); + DCHECK(!incremental_marking_handle_); + ResetRememberedSet(heap()); + heap().stats_collector()->NotifyMarkingCompleted( + // GetOverallMarkedBytes also includes concurrently marked bytes. + schedule_.GetOverallMarkedBytes()); + is_marking_ = false; + } { // Weakness callbacks are forbidden from allocating objects. cppgc::subtle::DisallowGarbageCollectionScope disallow_gc_scope(heap_); ProcessWeakness(); } + // TODO(chromium:1056170): It would be better if the call to Unlock was + // covered by some cppgc scope. g_process_mutex.Pointer()->Unlock(); heap().SetStackStateOfPrevGC(config_.stack_state); } void MarkerBase::FinishMarking(MarkingConfig::StackState stack_state) { DCHECK(is_marking_); - StatsCollector::EnabledScope stats_scope(heap().stats_collector(), - StatsCollector::kAtomicMark); EnterAtomicPause(stack_state); - CHECK(AdvanceMarkingWithLimits(v8::base::TimeDelta::Max(), SIZE_MAX)); - mutator_marking_state_.Publish(); + { + StatsCollector::EnabledScope stats_scope(heap().stats_collector(), + StatsCollector::kAtomicMark); + CHECK(AdvanceMarkingWithLimits(v8::base::TimeDelta::Max(), SIZE_MAX)); + mutator_marking_state_.Publish(); + } LeaveAtomicPause(); } @@ -367,6 +377,10 @@ bool MarkerBase::IncrementalMarkingStep(MarkingConfig::StackState stack_state) { } void MarkerBase::AdvanceMarkingOnAllocation() { + StatsCollector::EnabledScope stats_scope(heap().stats_collector(), + StatsCollector::kIncrementalMark); + StatsCollector::EnabledScope nested_scope(heap().stats_collector(), + StatsCollector::kMarkOnAllocation); if (AdvanceMarkingWithLimits()) { // Schedule another incremental task for finalizing without a stack. ScheduleIncrementalMarkingTask(); @@ -458,7 +472,7 @@ bool MarkerBase::ProcessWorklistsWithDeadline( mutator_marking_state_.marking_worklist(), [this](const MarkingWorklists::MarkingItem& item) { const HeapObjectHeader& header = - HeapObjectHeader::FromPayload(item.base_object_payload); + HeapObjectHeader::FromObject(item.base_object_payload); DCHECK(!header.IsInConstruction<AccessMode::kNonAtomic>()); DCHECK(header.IsMarked<AccessMode::kNonAtomic>()); mutator_marking_state_.AccountMarkedBytes(header); diff --git a/deps/v8/src/heap/cppgc/marking-state.h b/deps/v8/src/heap/cppgc/marking-state.h index 6e08fc3e10..c462746333 100644 --- a/deps/v8/src/heap/cppgc/marking-state.h +++ b/deps/v8/src/heap/cppgc/marking-state.h @@ -174,9 +174,9 @@ MarkingStateBase::MarkingStateBase(HeapBase& heap, void MarkingStateBase::MarkAndPush(const void* object, TraceDescriptor desc) { DCHECK_NOT_NULL(object); - MarkAndPush(HeapObjectHeader::FromPayload( - const_cast<void*>(desc.base_object_payload)), - desc); + MarkAndPush( + HeapObjectHeader::FromObject(const_cast<void*>(desc.base_object_payload)), + desc); } void MarkingStateBase::MarkAndPush(HeapObjectHeader& header, @@ -202,7 +202,7 @@ bool MarkingStateBase::MarkNoPush(HeapObjectHeader& header) { void MarkingStateBase::MarkAndPush(HeapObjectHeader& header) { MarkAndPush( header, - {header.Payload(), + {header.ObjectStart(), GlobalGCInfoTable::GCInfoFromIndex(header.GetGCInfoIndex()).trace}); } @@ -222,7 +222,7 @@ void MarkingStateBase::RegisterWeakReferenceIfNeeded(const void* object, // Filter out already marked values. The write barrier for WeakMember // ensures that any newly set value after this point is kept alive and does // not require the callback. - if (HeapObjectHeader::FromPayload(desc.base_object_payload) + if (HeapObjectHeader::FromObject(desc.base_object_payload) .IsMarked<AccessMode::kAtomic>()) return; RegisterWeakCallback(weak_callback, parameter); @@ -245,7 +245,7 @@ void MarkingStateBase::ProcessWeakContainer(const void* object, DCHECK_NOT_NULL(object); HeapObjectHeader& header = - HeapObjectHeader::FromPayload(const_cast<void*>(object)); + HeapObjectHeader::FromObject(const_cast<void*>(object)); if (header.IsInConstruction<AccessMode::kAtomic>()) { not_fully_constructed_worklist_.Push<AccessMode::kAtomic>(&header); @@ -255,6 +255,7 @@ void MarkingStateBase::ProcessWeakContainer(const void* object, // Only mark the container initially. Its buckets will be processed after // marking. if (!MarkNoPush(header)) return; + RegisterWeakContainer(header); // Register final weak processing of the backing store. @@ -264,7 +265,13 @@ void MarkingStateBase::ProcessWeakContainer(const void* object, // the TraceDescriptor will be nullptr. For ephemerons the callback will be // non-nullptr so that the container is traced and the ephemeron pairs are // processed. - if (desc.callback) PushMarked(header, desc); + if (desc.callback) { + PushMarked(header, desc); + } else { + // For weak containers, there's no trace callback and no processing loop to + // update the marked bytes, hence inline that here. + AccountMarkedBytes(header); + } } void MarkingStateBase::ProcessEphemeron(const void* key, const void* value, @@ -273,7 +280,7 @@ void MarkingStateBase::ProcessEphemeron(const void* key, const void* value, // Filter out already marked keys. The write barrier for WeakMember // ensures that any newly set value after this point is kept alive and does // not require the callback. - if (HeapObjectHeader::FromPayload(key).IsMarked<AccessMode::kAtomic>()) { + if (HeapObjectHeader::FromObject(key).IsMarked<AccessMode::kAtomic>()) { if (value_desc.base_object_payload) { MarkAndPush(value_desc.base_object_payload, value_desc); } else { @@ -291,7 +298,7 @@ void MarkingStateBase::AccountMarkedBytes(const HeapObjectHeader& header) { header.IsLargeObject<AccessMode::kAtomic>() ? reinterpret_cast<const LargePage*>(BasePage::FromPayload(&header)) ->PayloadSize() - : header.GetSize<AccessMode::kAtomic>()); + : header.AllocatedSize<AccessMode::kAtomic>()); } void MarkingStateBase::AccountMarkedBytes(size_t marked_bytes) { @@ -308,7 +315,7 @@ class MutatorMarkingState : public MarkingStateBase { return MutatorMarkingState::MarkingStateBase::MarkNoPush(header); } - inline void PushMarkedWeakContainer(HeapObjectHeader&); + inline void ReTraceMarkedWeakContainer(cppgc::Visitor&, HeapObjectHeader&); inline void DynamicallyMarkAddress(ConstAddress); @@ -343,13 +350,13 @@ class MutatorMarkingState : public MarkingStateBase { } recently_retraced_weak_containers_; }; -void MutatorMarkingState::PushMarkedWeakContainer(HeapObjectHeader& header) { +void MutatorMarkingState::ReTraceMarkedWeakContainer(cppgc::Visitor& visitor, + HeapObjectHeader& header) { DCHECK(weak_containers_worklist_.Contains(&header)); recently_retraced_weak_containers_.Insert(&header); - PushMarked( - header, - {header.Payload(), - GlobalGCInfoTable::GCInfoFromIndex(header.GetGCInfoIndex()).trace}); + // Don't push to the marking worklist to avoid double accounting of marked + // bytes as the container is already accounted for. + header.Trace(&visitor); } void MutatorMarkingState::DynamicallyMarkAddress(ConstAddress address) { @@ -359,7 +366,7 @@ void MutatorMarkingState::DynamicallyMarkAddress(ConstAddress address) { DCHECK(!header.IsInConstruction()); if (MarkNoPush(header)) { marking_worklist_.Push( - {reinterpret_cast<void*>(header.Payload()), + {reinterpret_cast<void*>(header.ObjectStart()), GlobalGCInfoTable::GCInfoFromIndex(header.GetGCInfoIndex()).trace}); } } @@ -371,7 +378,7 @@ void MutatorMarkingState::InvokeWeakRootsCallbackIfNeeded( // the callback instead of registering it. #if DEBUG const HeapObjectHeader& header = - HeapObjectHeader::FromPayload(desc.base_object_payload); + HeapObjectHeader::FromObject(desc.base_object_payload); DCHECK_IMPLIES(header.IsInConstruction(), header.IsMarked()); #endif // DEBUG weak_callback(LivenessBrokerFactory::Create(), parameter); diff --git a/deps/v8/src/heap/cppgc/marking-verifier.cc b/deps/v8/src/heap/cppgc/marking-verifier.cc index 42e3c4eb3e..2bbf8878e4 100644 --- a/deps/v8/src/heap/cppgc/marking-verifier.cc +++ b/deps/v8/src/heap/cppgc/marking-verifier.cc @@ -9,50 +9,81 @@ #include "src/heap/cppgc/heap-object-header.h" #include "src/heap/cppgc/heap.h" #include "src/heap/cppgc/marking-visitor.h" +#include "src/heap/cppgc/object-view.h" namespace cppgc { namespace internal { MarkingVerifierBase::MarkingVerifierBase( - HeapBase& heap, std::unique_ptr<cppgc::Visitor> visitor) + HeapBase& heap, VerificationState& verification_state, + std::unique_ptr<cppgc::Visitor> visitor) : ConservativeTracingVisitor(heap, *heap.page_backend(), *visitor.get()), + verification_state_(verification_state), visitor_(std::move(visitor)) {} -void MarkingVerifierBase::Run(Heap::Config::StackState stack_state) { +void MarkingVerifierBase::Run(Heap::Config::StackState stack_state, + uintptr_t stack_end, + size_t expected_marked_bytes) { Traverse(&heap_.raw_heap()); if (stack_state == Heap::Config::StackState::kMayContainHeapPointers) { in_construction_objects_ = &in_construction_objects_stack_; - heap_.stack()->IteratePointers(this); - CHECK_EQ(in_construction_objects_stack_, in_construction_objects_heap_); + heap_.stack()->IteratePointersUnsafe(this, stack_end); + // The objects found through the unsafe iteration are only a subset of the + // regular iteration as they miss objects held alive only from callee-saved + // registers that are never pushed on the stack and SafeStack. + CHECK_LE(in_construction_objects_stack_.size(), + in_construction_objects_heap_.size()); + for (auto* header : in_construction_objects_stack_) { + CHECK_NE(in_construction_objects_heap_.end(), + in_construction_objects_heap_.find(header)); + } } +#ifdef CPPGC_VERIFY_LIVE_BYTES + CHECK_EQ(expected_marked_bytes, found_marked_bytes_); +#endif // CPPGC_VERIFY_LIVE_BYTES } void VerificationState::VerifyMarked(const void* base_object_payload) const { const HeapObjectHeader& child_header = - HeapObjectHeader::FromPayload(base_object_payload); + HeapObjectHeader::FromObject(base_object_payload); if (!child_header.IsMarked()) { FATAL( "MarkingVerifier: Encountered unmarked object.\n" "#\n" "# Hint:\n" - "# %s\n" - "# \\-> %s", - parent_->GetName().value, child_header.GetName().value); + "# %s (%p)\n" + "# \\-> %s (%p)", + parent_ ? parent_->GetName().value : "Stack", + parent_ ? parent_->ObjectStart() : nullptr, + child_header.GetName().value, child_header.ObjectStart()); } } void MarkingVerifierBase::VisitInConstructionConservatively( HeapObjectHeader& header, TraceConservativelyCallback callback) { - CHECK(header.IsMarked()); if (in_construction_objects_->find(&header) != in_construction_objects_->end()) return; in_construction_objects_->insert(&header); + + // Stack case: Parent is stack and this is merely ensuring that the object + // itself is marked. If the object is marked, then it is being processed by + // the on-heap phase. + if (verification_state_.IsParentOnStack()) { + verification_state_.VerifyMarked(header.ObjectStart()); + return; + } + + // Heap case: Dispatching parent object that must be marked (pre-condition). + CHECK(header.IsMarked()); callback(this, header); } void MarkingVerifierBase::VisitPointer(const void* address) { + // Entry point for stack walk. The conservative visitor dispatches as follows: + // - Fully constructed objects: Visit() + // - Objects in construction: VisitInConstructionConservatively() TraceConservativelyIfNeeded(address); } @@ -62,7 +93,7 @@ bool MarkingVerifierBase::VisitHeapObjectHeader(HeapObjectHeader* header) { DCHECK(!header->IsFree()); - SetCurrentParent(header); + verification_state_.SetCurrentParent(header); if (!header->IsInConstruction()) { header->Trace(visitor_.get()); @@ -71,6 +102,10 @@ bool MarkingVerifierBase::VisitHeapObjectHeader(HeapObjectHeader* header) { TraceConservativelyIfNeeded(*header); } + found_marked_bytes_ += ObjectView(*header).Size() + sizeof(HeapObjectHeader); + + verification_state_.SetCurrentParent(nullptr); + return true; } @@ -112,12 +147,8 @@ class VerificationVisitor final : public cppgc::Visitor { } // namespace MarkingVerifier::MarkingVerifier(HeapBase& heap_base) - : MarkingVerifierBase(heap_base, + : MarkingVerifierBase(heap_base, state_, std::make_unique<VerificationVisitor>(state_)) {} -void MarkingVerifier::SetCurrentParent(const HeapObjectHeader* parent) { - state_.SetCurrentParent(parent); -} - } // namespace internal } // namespace cppgc diff --git a/deps/v8/src/heap/cppgc/marking-verifier.h b/deps/v8/src/heap/cppgc/marking-verifier.h index eeced68449..95475f5191 100644 --- a/deps/v8/src/heap/cppgc/marking-verifier.h +++ b/deps/v8/src/heap/cppgc/marking-verifier.h @@ -21,6 +21,9 @@ class VerificationState { void VerifyMarked(const void*) const; void SetCurrentParent(const HeapObjectHeader* header) { parent_ = header; } + // No parent means parent was on stack. + bool IsParentOnStack() const { return !parent_; } + private: const HeapObjectHeader* parent_ = nullptr; }; @@ -37,12 +40,11 @@ class V8_EXPORT_PRIVATE MarkingVerifierBase MarkingVerifierBase(const MarkingVerifierBase&) = delete; MarkingVerifierBase& operator=(const MarkingVerifierBase&) = delete; - void Run(Heap::Config::StackState); + void Run(Heap::Config::StackState, uintptr_t, size_t); protected: - MarkingVerifierBase(HeapBase&, std::unique_ptr<cppgc::Visitor>); - - virtual void SetCurrentParent(const HeapObjectHeader*) = 0; + MarkingVerifierBase(HeapBase&, VerificationState&, + std::unique_ptr<cppgc::Visitor>); private: void VisitInConstructionConservatively(HeapObjectHeader&, @@ -51,12 +53,14 @@ class V8_EXPORT_PRIVATE MarkingVerifierBase bool VisitHeapObjectHeader(HeapObjectHeader*); + VerificationState& verification_state_; std::unique_ptr<cppgc::Visitor> visitor_; std::unordered_set<const HeapObjectHeader*> in_construction_objects_heap_; std::unordered_set<const HeapObjectHeader*> in_construction_objects_stack_; std::unordered_set<const HeapObjectHeader*>* in_construction_objects_ = &in_construction_objects_heap_; + size_t found_marked_bytes_ = 0; }; class V8_EXPORT_PRIVATE MarkingVerifier final : public MarkingVerifierBase { @@ -64,8 +68,6 @@ class V8_EXPORT_PRIVATE MarkingVerifier final : public MarkingVerifierBase { explicit MarkingVerifier(HeapBase&); ~MarkingVerifier() final = default; - void SetCurrentParent(const HeapObjectHeader*) final; - private: VerificationState state_; }; diff --git a/deps/v8/src/heap/cppgc/marking-visitor.cc b/deps/v8/src/heap/cppgc/marking-visitor.cc index fb51ccc303..a740d33a84 100644 --- a/deps/v8/src/heap/cppgc/marking-visitor.cc +++ b/deps/v8/src/heap/cppgc/marking-visitor.cc @@ -56,7 +56,7 @@ void ConservativeMarkingVisitor::VisitFullyConstructedConservatively( HeapObjectHeader& header) { if (header.IsMarked()) { if (marking_state_.IsMarkedWeakContainer(header)) - marking_state_.PushMarkedWeakContainer(header); + marking_state_.ReTraceMarkedWeakContainer(visitor_, header); return; } ConservativeTracingVisitor::VisitFullyConstructedConservatively(header); diff --git a/deps/v8/src/heap/cppgc/memory.cc b/deps/v8/src/heap/cppgc/memory.cc new file mode 100644 index 0000000000..aa3baeaa8a --- /dev/null +++ b/deps/v8/src/heap/cppgc/memory.cc @@ -0,0 +1,22 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "src/heap/cppgc/memory.h" + +#include <cstddef> + +#include "src/heap/cppgc/globals.h" + +namespace cppgc { +namespace internal { + +void NoSanitizeMemset(void* address, char c, size_t bytes) { + volatile Address base = reinterpret_cast<Address>(address); + for (size_t i = 0; i < bytes; ++i) { + base[i] = c; + } +} + +} // namespace internal +} // namespace cppgc diff --git a/deps/v8/src/heap/cppgc/memory.h b/deps/v8/src/heap/cppgc/memory.h new file mode 100644 index 0000000000..d31af33ee3 --- /dev/null +++ b/deps/v8/src/heap/cppgc/memory.h @@ -0,0 +1,76 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef V8_HEAP_CPPGC_MEMORY_H_ +#define V8_HEAP_CPPGC_MEMORY_H_ + +#include <cstddef> +#include <cstdint> +#include <cstring> + +#include "src/base/macros.h" +#include "src/base/sanitizer/asan.h" +#include "src/base/sanitizer/msan.h" + +namespace cppgc { +namespace internal { + +V8_NOINLINE DISABLE_ASAN void NoSanitizeMemset(void* address, char c, + size_t bytes); + +inline void ZapMemory(void* address, size_t size) { + // The lowest bit of the zapped value should be 0 so that zapped object are + // never viewed as fully constructed objects. + static constexpr uint8_t kZappedValue = 0xdc; + memset(address, kZappedValue, size); +} + +// Together `SetMemoryAccessible()` and `SetMemoryInaccessible()` form the +// memory access model for allocation and free. +V8_INLINE void SetMemoryAccessible(void* address, size_t size) { +#if defined(V8_USE_MEMORY_SANITIZER) + + MSAN_MEMORY_IS_INITIALIZED(address, size); + +#elif defined(V8_USE_ADDRESS_SANITIZER) + + ASAN_UNPOISON_MEMORY_REGION(address, size); + +#elif DEBUG + + memset(address, 0, size); + +#else // Release builds. + + // Nothing to be done for release builds. + +#endif // Release builds. +} + +V8_INLINE void SetMemoryInaccessible(void* address, size_t size) { +#if defined(V8_USE_MEMORY_SANITIZER) + + memset(address, 0, size); + MSAN_ALLOCATED_UNINITIALIZED_MEMORY(address, size); + +#elif defined(V8_USE_ADDRESS_SANITIZER) + + NoSanitizeMemset(address, 0, size); + ASAN_POISON_MEMORY_REGION(address, size); + +#elif DEBUG + + ::cppgc::internal::ZapMemory(address, size); + +#else // Release builds. + + memset(address, 0, size); + +#endif // Release builds. +} + +} // namespace internal +} // namespace cppgc + +#endif // V8_HEAP_CPPGC_MEMORY_H_ diff --git a/deps/v8/src/heap/cppgc/metric-recorder.h b/deps/v8/src/heap/cppgc/metric-recorder.h index 6e9d4d0787..6118627d01 100644 --- a/deps/v8/src/heap/cppgc/metric-recorder.h +++ b/deps/v8/src/heap/cppgc/metric-recorder.h @@ -14,7 +14,7 @@ class StatsCollector; /** * Base class used for reporting GC statistics histograms. Embedders interested - * in collecting histgorams should implement the virtual AddMainThreadEvent + * in collecting histograms should implement the virtual AddMainThreadEvent * methods below and pass an instance of the implementation during Heap * creation. */ diff --git a/deps/v8/src/heap/cppgc/object-allocator.cc b/deps/v8/src/heap/cppgc/object-allocator.cc index 366900b0f9..1197356c29 100644 --- a/deps/v8/src/heap/cppgc/object-allocator.cc +++ b/deps/v8/src/heap/cppgc/object-allocator.cc @@ -95,7 +95,7 @@ void* AllocateLargeObject(PageBackend* page_backend, LargePageSpace* space, stats_collector->NotifyAllocation(size); MarkRangeAsYoung(page, page->PayloadStart(), page->PayloadEnd()); - return header->Payload(); + return header->ObjectStart(); } } // namespace diff --git a/deps/v8/src/heap/cppgc/object-allocator.h b/deps/v8/src/heap/cppgc/object-allocator.h index 56faef1c83..dd99d83ba5 100644 --- a/deps/v8/src/heap/cppgc/object-allocator.h +++ b/deps/v8/src/heap/cppgc/object-allocator.h @@ -12,9 +12,9 @@ #include "src/heap/cppgc/heap-object-header.h" #include "src/heap/cppgc/heap-page.h" #include "src/heap/cppgc/heap-space.h" +#include "src/heap/cppgc/memory.h" #include "src/heap/cppgc/object-start-bitmap.h" #include "src/heap/cppgc/raw-heap.h" -#include "src/heap/cppgc/sanitizers.h" namespace cppgc { @@ -111,10 +111,10 @@ void* ObjectAllocator::AllocateObjectOnSpace(NormalPageSpace* space, #if !defined(V8_USE_MEMORY_SANITIZER) && !defined(V8_USE_ADDRESS_SANITIZER) && \ DEBUG // For debug builds, unzap only the payload. - SET_MEMORY_ACCESSIBLE(static_cast<char*>(raw) + sizeof(HeapObjectHeader), - size - sizeof(HeapObjectHeader)); + SetMemoryAccessible(static_cast<char*>(raw) + sizeof(HeapObjectHeader), + size - sizeof(HeapObjectHeader)); #else - SET_MEMORY_ACCESSIBLE(raw, size); + SetMemoryAccessible(raw, size); #endif auto* header = new (raw) HeapObjectHeader(size, gcinfo); @@ -123,7 +123,7 @@ void* ObjectAllocator::AllocateObjectOnSpace(NormalPageSpace* space, ->object_start_bitmap() .SetBit<AccessMode::kAtomic>(reinterpret_cast<ConstAddress>(header)); - return header->Payload(); + return header->ObjectStart(); } } // namespace internal diff --git a/deps/v8/src/heap/cppgc/object-poisoner.h b/deps/v8/src/heap/cppgc/object-poisoner.h index fd2462d669..632dea9b9d 100644 --- a/deps/v8/src/heap/cppgc/object-poisoner.h +++ b/deps/v8/src/heap/cppgc/object-poisoner.h @@ -5,10 +5,10 @@ #ifndef V8_HEAP_CPPGC_OBJECT_POISONER_H_ #define V8_HEAP_CPPGC_OBJECT_POISONER_H_ +#include "src/base/sanitizer/asan.h" #include "src/heap/cppgc/heap-object-header.h" #include "src/heap/cppgc/heap-page.h" #include "src/heap/cppgc/heap-visitor.h" -#include "src/heap/cppgc/sanitizers.h" namespace cppgc { namespace internal { @@ -27,7 +27,7 @@ class UnmarkedObjectsPoisoner : public HeapVisitor<UnmarkedObjectsPoisoner> { header->IsLargeObject() ? LargePage::From(BasePage::FromPayload(header))->ObjectSize() : header->ObjectSize(); - ASAN_POISON_MEMORY_REGION(header->Payload(), size); + ASAN_POISON_MEMORY_REGION(header->ObjectStart(), size); return true; } }; diff --git a/deps/v8/src/heap/cppgc/object-size-trait.cc b/deps/v8/src/heap/cppgc/object-size-trait.cc index 11c50b3c4d..7b82239a61 100644 --- a/deps/v8/src/heap/cppgc/object-size-trait.cc +++ b/deps/v8/src/heap/cppgc/object-size-trait.cc @@ -6,6 +6,7 @@ #include "src/heap/cppgc/heap-object-header.h" #include "src/heap/cppgc/heap-page.h" +#include "src/heap/cppgc/object-view.h" namespace cppgc { namespace internal { @@ -13,11 +14,7 @@ namespace internal { // static size_t BaseObjectSizeTrait::GetObjectSizeForGarbageCollected( const void* object) { - const auto& header = HeapObjectHeader::FromPayload(object); - return header.IsLargeObject() - ? static_cast<const LargePage*>(BasePage::FromPayload(&header)) - ->ObjectSize() - : header.ObjectSize(); + return ObjectView(HeapObjectHeader::FromObject(object)).Size(); } // static diff --git a/deps/v8/src/heap/cppgc/object-view.h b/deps/v8/src/heap/cppgc/object-view.h new file mode 100644 index 0000000000..e83145cc31 --- /dev/null +++ b/deps/v8/src/heap/cppgc/object-view.h @@ -0,0 +1,54 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef V8_HEAP_CPPGC_OBJECT_VIEW_H_ +#define V8_HEAP_CPPGC_OBJECT_VIEW_H_ + +#include "include/v8config.h" +#include "src/heap/cppgc/heap-object-header.h" +#include "src/heap/cppgc/heap-page.h" + +namespace cppgc { +namespace internal { + +// ObjectView allows accessing a header within the bounds of the actual object. +// It is not exposed externally and does not keep the underlying object alive. +class ObjectView final { + public: + V8_INLINE explicit ObjectView(const HeapObjectHeader& header); + + V8_INLINE Address Start() const; + V8_INLINE ConstAddress End() const; + V8_INLINE size_t Size() const; + + private: + const HeapObjectHeader& header_; + const BasePage* base_page_; + const bool is_large_object_; +}; + +ObjectView::ObjectView(const HeapObjectHeader& header) + : header_(header), + base_page_( + BasePage::FromPayload(const_cast<HeapObjectHeader*>(&header_))), + is_large_object_(header_.IsLargeObject()) { + DCHECK_EQ(Start() + Size(), End()); +} + +Address ObjectView::Start() const { return header_.ObjectStart(); } + +ConstAddress ObjectView::End() const { + return is_large_object_ ? LargePage::From(base_page_)->PayloadEnd() + : header_.ObjectEnd(); +} + +size_t ObjectView::Size() const { + return is_large_object_ ? LargePage::From(base_page_)->ObjectSize() + : header_.ObjectSize(); +} + +} // namespace internal +} // namespace cppgc + +#endif // V8_HEAP_CPPGC_OBJECT_VIEW_H_ diff --git a/deps/v8/src/heap/cppgc/page-memory.cc b/deps/v8/src/heap/cppgc/page-memory.cc index 76b9458517..49b44aff91 100644 --- a/deps/v8/src/heap/cppgc/page-memory.cc +++ b/deps/v8/src/heap/cppgc/page-memory.cc @@ -5,7 +5,7 @@ #include "src/heap/cppgc/page-memory.h" #include "src/base/macros.h" -#include "src/heap/cppgc/sanitizers.h" +#include "src/base/sanitizer/asan.h" namespace cppgc { namespace internal { diff --git a/deps/v8/src/heap/cppgc/pointer-policies.cc b/deps/v8/src/heap/cppgc/pointer-policies.cc index fdc435af17..23ad552c7a 100644 --- a/deps/v8/src/heap/cppgc/pointer-policies.cc +++ b/deps/v8/src/heap/cppgc/pointer-policies.cc @@ -4,21 +4,70 @@ #include "include/cppgc/internal/pointer-policies.h" +#include "include/cppgc/internal/caged-heap-local-data.h" #include "include/cppgc/internal/persistent-node.h" +#include "src/base/logging.h" #include "src/base/macros.h" +#include "src/base/platform/platform.h" +#include "src/heap/cppgc/heap-object-header.h" #include "src/heap/cppgc/heap-page.h" #include "src/heap/cppgc/heap.h" +#include "src/heap/cppgc/page-memory.h" +#include "src/heap/cppgc/process-heap.h" namespace cppgc { namespace internal { -EnabledCheckingPolicy::EnabledCheckingPolicy() { - USE(impl_); - // TODO(chromium:1056170): Save creating heap state. +namespace { + +#if defined(DEBUG) +bool IsOnStack(const void* address) { + return v8::base::Stack::GetCurrentStackPosition() <= address && + address < v8::base::Stack::GetStackStart(); } +#endif // defined(DEBUG) + +} // namespace + +void EnabledCheckingPolicy::CheckPointerImpl(const void* ptr, + bool points_to_payload) { + // `ptr` must not reside on stack. + DCHECK(!IsOnStack(ptr)); + auto* base_page = BasePage::FromPayload(ptr); + // Large objects do not support mixins. This also means that `base_page` is + // valid for large objects. + DCHECK_IMPLIES(base_page->is_large(), points_to_payload); + + // References cannot change their heap association which means that state is + // immutable once it is set. + if (!heap_) { + heap_ = base_page->heap(); + if (!heap_->page_backend()->Lookup(reinterpret_cast<Address>(this))) { + // If `this` is not contained within the heap of `ptr`, we must deal with + // an on-stack or off-heap reference. For both cases there should be no + // heap registered. + CHECK(!HeapRegistry::TryFromManagedPointer(this)); + } + } + + // Member references should never mix heaps. + DCHECK_EQ(heap_, base_page->heap()); + + // Header checks. + const HeapObjectHeader* header = nullptr; + if (points_to_payload) { + header = &HeapObjectHeader::FromObject(ptr); + } else if (!heap_->sweeper().IsSweepingInProgress()) { + // Mixin case. + header = &base_page->ObjectHeaderFromInnerAddress(ptr); + DCHECK_LE(header->ObjectStart(), ptr); + DCHECK_GT(header->ObjectEnd(), ptr); + } + if (header) { + DCHECK(!header->IsFree()); + } -void EnabledCheckingPolicy::CheckPointer(const void* ptr) { - // TODO(chromium:1056170): Provide implementation. + // TODO(v8:11749): Check mark bits when during pre-finalizer phase. } PersistentRegion& StrongPersistentPolicy::GetPersistentRegion( diff --git a/deps/v8/src/heap/cppgc/process-heap-statistics.h b/deps/v8/src/heap/cppgc/process-heap-statistics.h index 2d7bfa117f..da7683b616 100644 --- a/deps/v8/src/heap/cppgc/process-heap-statistics.h +++ b/deps/v8/src/heap/cppgc/process-heap-statistics.h @@ -15,7 +15,7 @@ class ProcessHeapStatisticsUpdater { public: // Allocation observer implementation for heaps should register to contribute // to ProcessHeapStatistics. The heap is responsible for allocating and - // registering the obsrever impl with its stats collector. + // registering the observer impl with its stats collector. class AllocationObserverImpl final : public StatsCollector::AllocationObserver { public: diff --git a/deps/v8/src/heap/cppgc/process-heap.cc b/deps/v8/src/heap/cppgc/process-heap.cc index e084ea1264..6f8bb05c6c 100644 --- a/deps/v8/src/heap/cppgc/process-heap.cc +++ b/deps/v8/src/heap/cppgc/process-heap.cc @@ -4,10 +4,66 @@ #include "src/heap/cppgc/process-heap.h" +#include <algorithm> +#include <vector> + +#include "src/base/lazy-instance.h" +#include "src/base/platform/mutex.h" +#include "src/heap/cppgc/heap-base.h" +#include "src/heap/cppgc/page-memory.h" + namespace cppgc { namespace internal { v8::base::LazyMutex g_process_mutex = LAZY_MUTEX_INITIALIZER; +namespace { + +v8::base::LazyMutex g_heap_registry_mutex = LAZY_MUTEX_INITIALIZER; + +HeapRegistry::Storage& GetHeapRegistryStorage() { + static v8::base::LazyInstance<HeapRegistry::Storage>::type heap_registry = + LAZY_INSTANCE_INITIALIZER; + return *heap_registry.Pointer(); +} + +} // namespace + +// static +void HeapRegistry::RegisterHeap(HeapBase& heap) { + v8::base::MutexGuard guard(g_heap_registry_mutex.Pointer()); + + auto& storage = GetHeapRegistryStorage(); + DCHECK_EQ(storage.end(), std::find(storage.begin(), storage.end(), &heap)); + storage.push_back(&heap); +} + +// static +void HeapRegistry::UnregisterHeap(HeapBase& heap) { + v8::base::MutexGuard guard(g_heap_registry_mutex.Pointer()); + + auto& storage = GetHeapRegistryStorage(); + const auto pos = std::find(storage.begin(), storage.end(), &heap); + DCHECK_NE(storage.end(), pos); + storage.erase(pos); +} + +// static +HeapBase* HeapRegistry::TryFromManagedPointer(const void* needle) { + v8::base::MutexGuard guard(g_heap_registry_mutex.Pointer()); + + for (auto* heap : GetHeapRegistryStorage()) { + const auto address = + heap->page_backend()->Lookup(reinterpret_cast<ConstAddress>(needle)); + if (address) return heap; + } + return nullptr; +} + +// static +const HeapRegistry::Storage& HeapRegistry::GetRegisteredHeapsForTesting() { + return GetHeapRegistryStorage(); +} + } // namespace internal } // namespace cppgc diff --git a/deps/v8/src/heap/cppgc/process-heap.h b/deps/v8/src/heap/cppgc/process-heap.h index 8afc7c88eb..c581bad29c 100644 --- a/deps/v8/src/heap/cppgc/process-heap.h +++ b/deps/v8/src/heap/cppgc/process-heap.h @@ -5,13 +5,48 @@ #ifndef V8_HEAP_CPPGC_PROCESS_HEAP_H_ #define V8_HEAP_CPPGC_PROCESS_HEAP_H_ +#include <vector> + +#include "src/base/macros.h" #include "src/base/platform/mutex.h" namespace cppgc { namespace internal { +class HeapBase; + extern v8::base::LazyMutex g_process_mutex; +class V8_EXPORT_PRIVATE HeapRegistry final { + public: + using Storage = std::vector<HeapBase*>; + + class Subscription final { + public: + inline explicit Subscription(HeapBase&); + inline ~Subscription(); + + private: + HeapBase& heap_; + }; + + static HeapBase* TryFromManagedPointer(const void* needle); + + static const Storage& GetRegisteredHeapsForTesting(); + + private: + static void RegisterHeap(HeapBase&); + static void UnregisterHeap(HeapBase&); +}; + +HeapRegistry::Subscription::Subscription(HeapBase& heap) : heap_(heap) { + HeapRegistry::RegisterHeap(heap_); +} + +HeapRegistry::Subscription::~Subscription() { + HeapRegistry::UnregisterHeap(heap_); +} + } // namespace internal } // namespace cppgc diff --git a/deps/v8/src/heap/cppgc/sanitizers.h b/deps/v8/src/heap/cppgc/sanitizers.h deleted file mode 100644 index c3a8ff684d..0000000000 --- a/deps/v8/src/heap/cppgc/sanitizers.h +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright 2020 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef V8_HEAP_CPPGC_SANITIZERS_H_ -#define V8_HEAP_CPPGC_SANITIZERS_H_ - -#include <stdint.h> -#include <string.h> - -#include "src/base/macros.h" - -// -// TODO(chromium:1056170): Find a place in base for sanitizer support. -// - -#ifdef V8_USE_ADDRESS_SANITIZER - -#include <sanitizer/asan_interface.h> - -#define NO_SANITIZE_ADDRESS __attribute__((no_sanitize_address)) -#if !defined(ASAN_POISON_MEMORY_REGION) || !defined(ASAN_UNPOISON_MEMORY_REGION) -#error "ASAN_POISON_MEMORY_REGION must be defined" -#endif - -#else // !V8_USE_ADDRESS_SANITIZER - -#define NO_SANITIZE_ADDRESS -#define ASAN_POISON_MEMORY_REGION(addr, size) ((void)(addr), (void)(size)) -#define ASAN_UNPOISON_MEMORY_REGION(addr, size) ((void)(addr), (void)(size)) - -#endif // V8_USE_ADDRESS_SANITIZER - -#ifdef V8_USE_MEMORY_SANITIZER - -#include <sanitizer/msan_interface.h> - -#define MSAN_POISON(addr, size) __msan_allocated_memory(addr, size) -#define MSAN_UNPOISON(addr, size) __msan_unpoison(addr, size) - -#else // !V8_USE_MEMORY_SANITIZER - -#define MSAN_POISON(addr, size) ((void)(addr), (void)(size)) -#define MSAN_UNPOISON(addr, size) ((void)(addr), (void)(size)) - -#endif // V8_USE_MEMORY_SANITIZER - -// API for newly allocated or reclaimed memory. -#if defined(V8_USE_MEMORY_SANITIZER) -#define SET_MEMORY_ACCESSIBLE(address, size) MSAN_UNPOISON(address, size); -#define SET_MEMORY_INACCESSIBLE(address, size) \ - memset((address), 0, (size)); \ - MSAN_POISON((address), (size)) -#elif defined(V8_USE_ADDRESS_SANITIZER) -#define SET_MEMORY_ACCESSIBLE(address, size) \ - ASAN_UNPOISON_MEMORY_REGION(address, size); -#define SET_MEMORY_INACCESSIBLE(address, size) \ - memset((address), 0, (size)); \ - ASAN_POISON_MEMORY_REGION(address, size) -#elif DEBUG -#define SET_MEMORY_ACCESSIBLE(address, size) memset((address), 0, (size)) -#define SET_MEMORY_INACCESSIBLE(address, size) \ - ::cppgc::internal::ZapMemory((address), (size)); -#else -#define SET_MEMORY_ACCESSIBLE(address, size) ((void)(address), (void)(size)) -#define SET_MEMORY_INACCESSIBLE(address, size) memset((address), 0, (size)) -#endif - -namespace cppgc { -namespace internal { - -inline void ZapMemory(void* address, size_t size) { - // The lowest bit of the zapped value should be 0 so that zapped object - // are never viewed as fully constructed objects. - static constexpr uint8_t kZappedValue = 0xdc; - memset(address, kZappedValue, size); -} - -} // namespace internal -} // namespace cppgc - -#endif // V8_HEAP_CPPGC_SANITIZERS_H_ diff --git a/deps/v8/src/heap/cppgc/stats-collector.h b/deps/v8/src/heap/cppgc/stats-collector.h index 2a8583c730..4709f22703 100644 --- a/deps/v8/src/heap/cppgc/stats-collector.h +++ b/deps/v8/src/heap/cppgc/stats-collector.h @@ -39,6 +39,7 @@ namespace internal { V(MarkTransitiveClosure) \ V(MarkTransitiveClosureWithDeadline) \ V(MarkFlushEphemerons) \ + V(MarkOnAllocation) \ V(MarkProcessBailOutObjects) \ V(MarkProcessMarkingWorklist) \ V(MarkProcessWriteBarrierWorklist) \ @@ -52,6 +53,7 @@ namespace internal { V(MarkVisitRememberedSets) \ V(SweepInvokePreFinalizers) \ V(SweepIdleStep) \ + V(SweepInTask) \ V(SweepOnAllocation) \ V(SweepFinalize) @@ -256,7 +258,7 @@ class V8_EXPORT_PRIVATE StatsCollector final { void NotifyAllocation(size_t); void NotifyExplicitFree(size_t); - // Safepoints should only be invoked when garabge collections are possible. + // Safepoints should only be invoked when garbage collections are possible. // This is necessary as increments and decrements are reported as close to // their actual allocation/reclamation as possible. void NotifySafePointForConservativeCollection(); diff --git a/deps/v8/src/heap/cppgc/sweeper.cc b/deps/v8/src/heap/cppgc/sweeper.cc index 937a52afc5..3e740f7924 100644 --- a/deps/v8/src/heap/cppgc/sweeper.cc +++ b/deps/v8/src/heap/cppgc/sweeper.cc @@ -18,10 +18,10 @@ #include "src/heap/cppgc/heap-page.h" #include "src/heap/cppgc/heap-space.h" #include "src/heap/cppgc/heap-visitor.h" +#include "src/heap/cppgc/memory.h" #include "src/heap/cppgc/object-poisoner.h" #include "src/heap/cppgc/object-start-bitmap.h" #include "src/heap/cppgc/raw-heap.h" -#include "src/heap/cppgc/sanitizers.h" #include "src/heap/cppgc/stats-collector.h" #include "src/heap/cppgc/task-handle.h" @@ -133,7 +133,7 @@ class InlinedFinalizationBuilder final { void AddFinalizer(HeapObjectHeader* header, size_t size) { header->Finalize(); - SET_MEMORY_INACCESSIBLE(header, size); + SetMemoryInaccessible(header, size); } void AddFreeListEntry(Address start, size_t size) { @@ -161,10 +161,7 @@ class DeferredFinalizationBuilder final { result_.unfinalized_objects.push_back({header}); found_finalizer_ = true; } else { - // Unmarked memory may have been poisoned. In the non-concurrent case this - // is taken care of by finalizing a header. - ASAN_UNPOISON_MEMORY_REGION(header, size); - SET_MEMORY_INACCESSIBLE(header, size); + SetMemoryInaccessible(header, size); } } @@ -197,15 +194,16 @@ typename FinalizationBuilder::ResultType SweepNormalPage(NormalPage* page) { bitmap.Clear(); size_t largest_new_free_list_entry = 0; + size_t live_bytes = 0; Address start_of_gap = page->PayloadStart(); for (Address begin = page->PayloadStart(), end = page->PayloadEnd(); begin != end;) { HeapObjectHeader* header = reinterpret_cast<HeapObjectHeader*>(begin); - const size_t size = header->GetSize(); + const size_t size = header->AllocatedSize(); // Check if this is a free list entry. if (header->IsFree<kAtomicAccess>()) { - SET_MEMORY_INACCESSIBLE(header, std::min(kFreeListEntrySize, size)); + SetMemoryInaccessible(header, std::min(kFreeListEntrySize, size)); begin += size; continue; } @@ -229,6 +227,7 @@ typename FinalizationBuilder::ResultType SweepNormalPage(NormalPage* page) { bitmap.SetBit(begin); begin += size; start_of_gap = begin; + live_bytes += size; } if (start_of_gap != page->PayloadStart() && @@ -237,6 +236,7 @@ typename FinalizationBuilder::ResultType SweepNormalPage(NormalPage* page) { start_of_gap, static_cast<size_t>(page->PayloadEnd() - start_of_gap)); bitmap.SetBit(start_of_gap); } + page->SetAllocatedBytesAtLastGC(live_bytes); const bool is_empty = (start_of_gap == page->PayloadStart()); return builder.GetResult(is_empty, largest_new_free_list_entry); @@ -290,9 +290,9 @@ class SweepFinalizer final { // Call finalizers. for (HeapObjectHeader* object : page_state->unfinalized_objects) { - const size_t size = object->GetSize(); + const size_t size = object->AllocatedSize(); object->Finalize(); - SET_MEMORY_INACCESSIBLE(object, size); + SetMemoryInaccessible(object, size); } // Unmap page if empty. @@ -665,6 +665,33 @@ class Sweeper::SweeperImpl final { bool IsSweepingInProgress() const { return is_in_progress_; } + bool PerformSweepOnMutatorThread(double deadline_in_seconds, + StatsCollector::ScopeId internal_scope_id) { + if (!is_in_progress_) return true; + + MutatorThreadSweepingScope sweeping_in_progresss(*this); + + bool sweep_complete; + { + StatsCollector::EnabledScope stats_scope( + stats_collector_, StatsCollector::kIncrementalSweep); + + MutatorThreadSweeper sweeper(&space_states_, platform_); + { + StatsCollector::EnabledScope stats_scope( + stats_collector_, internal_scope_id, "deltaInSeconds", + deadline_in_seconds - platform_->MonotonicallyIncreasingTime()); + + sweep_complete = sweeper.SweepWithDeadline(deadline_in_seconds); + } + if (sweep_complete) { + FinalizeSweep(); + } + } + if (sweep_complete) NotifyDone(); + return sweep_complete; + } + private: class MutatorThreadSweepingScope final { public: @@ -701,33 +728,12 @@ class Sweeper::SweeperImpl final { private: void Run(double deadline_in_seconds) override { - if (handle_.IsCanceled() || !sweeper_->is_in_progress_) return; + if (handle_.IsCanceled()) return; - MutatorThreadSweepingScope sweeping_in_progresss(*sweeper_); - - bool sweep_complete; - { - StatsCollector::EnabledScope stats_scope( - sweeper_->stats_collector_, StatsCollector::kIncrementalSweep); - - MutatorThreadSweeper sweeper(&sweeper_->space_states_, - sweeper_->platform_); - { - StatsCollector::EnabledScope stats_scope( - sweeper_->stats_collector_, StatsCollector::kSweepIdleStep, - "idleDeltaInSeconds", - (deadline_in_seconds - - sweeper_->platform_->MonotonicallyIncreasingTime())); - - sweep_complete = sweeper.SweepWithDeadline(deadline_in_seconds); - } - if (sweep_complete) { - sweeper_->FinalizeSweep(); - } else { - sweeper_->ScheduleIncrementalSweeping(); - } + if (!sweeper_->PerformSweepOnMutatorThread( + deadline_in_seconds, StatsCollector::kSweepIdleStep)) { + sweeper_->ScheduleIncrementalSweeping(); } - if (sweep_complete) sweeper_->NotifyDone(); } Handle GetHandle() const { return handle_; } @@ -807,5 +813,10 @@ bool Sweeper::IsSweepingInProgress() const { return impl_->IsSweepingInProgress(); } +bool Sweeper::PerformSweepOnMutatorThread(double deadline_in_seconds) { + return impl_->PerformSweepOnMutatorThread(deadline_in_seconds, + StatsCollector::kSweepInTask); +} + } // namespace internal } // namespace cppgc diff --git a/deps/v8/src/heap/cppgc/sweeper.h b/deps/v8/src/heap/cppgc/sweeper.h index 4c77ec6917..a13962aa91 100644 --- a/deps/v8/src/heap/cppgc/sweeper.h +++ b/deps/v8/src/heap/cppgc/sweeper.h @@ -9,6 +9,7 @@ #include "include/cppgc/heap.h" #include "src/base/macros.h" +#include "src/base/platform/time.h" namespace cppgc { @@ -49,6 +50,9 @@ class V8_EXPORT_PRIVATE Sweeper final { bool IsSweepingOnMutatorThread() const; bool IsSweepingInProgress() const; + // Assist with sweeping. Returns true if sweeping is done. + bool PerformSweepOnMutatorThread(double deadline_in_seconds); + private: void WaitForConcurrentSweepingForTesting(); diff --git a/deps/v8/src/heap/cppgc/trace-trait.cc b/deps/v8/src/heap/cppgc/trace-trait.cc index bf3759881b..df14e3698b 100644 --- a/deps/v8/src/heap/cppgc/trace-trait.cc +++ b/deps/v8/src/heap/cppgc/trace-trait.cc @@ -18,9 +18,10 @@ TraceDescriptor TraceTraitFromInnerAddressImpl::GetTraceDescriptor( page->SynchronizedLoad(); const HeapObjectHeader& header = page->ObjectHeaderFromInnerAddress<AccessMode::kAtomic>(address); - return {header.Payload(), GlobalGCInfoTable::GCInfoFromIndex( - header.GetGCInfoIndex<AccessMode::kAtomic>()) - .trace}; + return {header.ObjectStart(), + GlobalGCInfoTable::GCInfoFromIndex( + header.GetGCInfoIndex<AccessMode::kAtomic>()) + .trace}; } } // namespace internal diff --git a/deps/v8/src/heap/cppgc/visitor.cc b/deps/v8/src/heap/cppgc/visitor.cc index 33786f6fce..9d90e4ab3e 100644 --- a/deps/v8/src/heap/cppgc/visitor.cc +++ b/deps/v8/src/heap/cppgc/visitor.cc @@ -4,11 +4,12 @@ #include "src/heap/cppgc/visitor.h" +#include "src/base/sanitizer/msan.h" #include "src/heap/cppgc/gc-info-table.h" #include "src/heap/cppgc/heap-object-header.h" #include "src/heap/cppgc/heap-page.h" +#include "src/heap/cppgc/object-view.h" #include "src/heap/cppgc/page-memory.h" -#include "src/heap/cppgc/sanitizers.h" namespace cppgc { @@ -29,15 +30,15 @@ namespace { void TraceConservatively(ConservativeTracingVisitor* conservative_visitor, const HeapObjectHeader& header) { - Address* payload = reinterpret_cast<Address*>(header.Payload()); - const size_t payload_size = header.GetSize(); - for (size_t i = 0; i < (payload_size / sizeof(Address)); ++i) { - Address maybe_ptr = payload[i]; + const auto object_view = ObjectView(header); + Address* object = reinterpret_cast<Address*>(object_view.Start()); + for (size_t i = 0; i < (object_view.Size() / sizeof(Address)); ++i) { + Address maybe_ptr = object[i]; #if defined(MEMORY_SANITIZER) - // |payload| may be uninitialized by design or just contain padding bytes. + // |object| may be uninitialized by design or just contain padding bytes. // Copy into a local variable that is not poisoned for conservative marking. // Copy into a temporary variable to maintain the original MSAN state. - MSAN_UNPOISON(&maybe_ptr, sizeof(maybe_ptr)); + MSAN_MEMORY_IS_INITIALIZED(&maybe_ptr, sizeof(maybe_ptr)); #endif if (maybe_ptr) { conservative_visitor->TraceConservativelyIfNeeded(maybe_ptr); @@ -49,8 +50,6 @@ void TraceConservatively(ConservativeTracingVisitor* conservative_visitor, void ConservativeTracingVisitor::TraceConservativelyIfNeeded( const void* address) { - // TODO(chromium:1056170): Add page bloom filter - const BasePage* page = reinterpret_cast<const BasePage*>( page_backend_.Lookup(static_cast<ConstAddress>(address))); @@ -78,8 +77,8 @@ void ConservativeTracingVisitor::TraceConservativelyIfNeeded( void ConservativeTracingVisitor::VisitFullyConstructedConservatively( HeapObjectHeader& header) { visitor_.Visit( - header.Payload(), - {header.Payload(), + header.ObjectStart(), + {header.ObjectStart(), GlobalGCInfoTable::GCInfoFromIndex(header.GetGCInfoIndex()).trace}); } diff --git a/deps/v8/src/heap/embedder-tracing.cc b/deps/v8/src/heap/embedder-tracing.cc index 4fd747a964..72bdde571a 100644 --- a/deps/v8/src/heap/embedder-tracing.cc +++ b/deps/v8/src/heap/embedder-tracing.cc @@ -17,6 +17,7 @@ void LocalEmbedderHeapTracer::SetRemoteTracer(EmbedderHeapTracer* tracer) { if (remote_tracer_) remote_tracer_->isolate_ = nullptr; remote_tracer_ = tracer; + default_embedder_roots_handler_.SetTracer(tracer); if (remote_tracer_) remote_tracer_->isolate_ = reinterpret_cast<v8::Isolate*>(isolate_); } @@ -75,9 +76,8 @@ void LocalEmbedderHeapTracer::SetEmbedderStackStateForNextFinalization( if (!InUse()) return; embedder_stack_state_ = stack_state; - if (EmbedderHeapTracer::EmbedderStackState::kNoHeapPointers == stack_state) { - remote_tracer()->NotifyEmptyEmbedderStack(); - } + if (EmbedderHeapTracer::EmbedderStackState::kNoHeapPointers == stack_state) + NotifyEmptyEmbedderStack(); } namespace { @@ -164,5 +164,33 @@ void LocalEmbedderHeapTracer::StartIncrementalMarkingIfNeeded() { } } +void LocalEmbedderHeapTracer::NotifyEmptyEmbedderStack() { + auto* overriden_stack_state = isolate_->heap()->overriden_stack_state(); + if (overriden_stack_state && + (*overriden_stack_state == + cppgc::EmbedderStackState::kMayContainHeapPointers)) + return; + + isolate_->global_handles()->NotifyEmptyEmbedderStack(); +} + +bool DefaultEmbedderRootsHandler::IsRoot( + const v8::TracedReference<v8::Value>& handle) { + return !tracer_ || tracer_->IsRootForNonTracingGC(handle); +} + +bool DefaultEmbedderRootsHandler::IsRoot( + const v8::TracedGlobal<v8::Value>& handle) { + return !tracer_ || tracer_->IsRootForNonTracingGC(handle); +} + +void DefaultEmbedderRootsHandler::ResetRoot( + const v8::TracedReference<v8::Value>& handle) { + // Resetting is only called when IsRoot() returns false which + // can only happen the EmbedderHeapTracer is set on API level. + DCHECK(tracer_); + tracer_->ResetHandleInNonTracingGC(handle); +} + } // namespace internal } // namespace v8 diff --git a/deps/v8/src/heap/embedder-tracing.h b/deps/v8/src/heap/embedder-tracing.h index 8a1b14a32b..befb1a7e7a 100644 --- a/deps/v8/src/heap/embedder-tracing.h +++ b/deps/v8/src/heap/embedder-tracing.h @@ -16,6 +16,19 @@ namespace internal { class Heap; class JSObject; +class V8_EXPORT_PRIVATE DefaultEmbedderRootsHandler final + : public EmbedderRootsHandler { + public: + bool IsRoot(const v8::TracedReference<v8::Value>& handle) final; + bool IsRoot(const v8::TracedGlobal<v8::Value>& handle) final; + void ResetRoot(const v8::TracedReference<v8::Value>& handle) final; + + void SetTracer(EmbedderHeapTracer* tracer) { tracer_ = tracer; } + + private: + EmbedderHeapTracer* tracer_ = nullptr; +}; + class V8_EXPORT_PRIVATE LocalEmbedderHeapTracer final { public: using WrapperInfo = std::pair<void*, void*>; @@ -74,21 +87,6 @@ class V8_EXPORT_PRIVATE LocalEmbedderHeapTracer final { bool Trace(double deadline); bool IsRemoteTracingDone(); - bool IsRootForNonTracingGC(const v8::TracedGlobal<v8::Value>& handle) { - return !InUse() || remote_tracer_->IsRootForNonTracingGC(handle); - } - - bool IsRootForNonTracingGC(const v8::TracedReference<v8::Value>& handle) { - return !InUse() || remote_tracer_->IsRootForNonTracingGC(handle); - } - - void ResetHandleInNonTracingGC(const v8::TracedReference<v8::Value>& handle) { - // Resetting is only called when IsRootForNonTracingGC returns false which - // can only happen the EmbedderHeapTracer is set on API level. - DCHECK(InUse()); - remote_tracer_->ResetHandleInNonTracingGC(handle); - } - bool ShouldFinalizeIncrementalMarking() { return !FLAG_incremental_marking_wrappers || !InUse() || (IsRemoteTracingDone() && embedder_worklist_empty_); @@ -130,6 +128,12 @@ class V8_EXPORT_PRIVATE LocalEmbedderHeapTracer final { void UpdateRemoteStats(size_t, double); + DefaultEmbedderRootsHandler& default_embedder_roots_handler() { + return default_embedder_roots_handler_; + } + + void NotifyEmptyEmbedderStack(); + private: static constexpr size_t kEmbedderAllocatedThreshold = 128 * KB; @@ -147,6 +151,7 @@ class V8_EXPORT_PRIVATE LocalEmbedderHeapTracer final { Isolate* const isolate_; EmbedderHeapTracer* remote_tracer_ = nullptr; + DefaultEmbedderRootsHandler default_embedder_roots_handler_; EmbedderHeapTracer::EmbedderStackState embedder_stack_state_ = EmbedderHeapTracer::EmbedderStackState::kMayContainHeapPointers; @@ -183,11 +188,8 @@ class V8_EXPORT_PRIVATE V8_NODISCARD EmbedderStackStateScope final { : local_tracer_(local_tracer), old_stack_state_(local_tracer_->embedder_stack_state_) { local_tracer_->embedder_stack_state_ = stack_state; - if (EmbedderHeapTracer::EmbedderStackState::kNoHeapPointers == - stack_state) { - if (local_tracer->remote_tracer()) - local_tracer->remote_tracer()->NotifyEmptyEmbedderStack(); - } + if (EmbedderHeapTracer::EmbedderStackState::kNoHeapPointers == stack_state) + local_tracer_->NotifyEmptyEmbedderStack(); } ~EmbedderStackStateScope() { diff --git a/deps/v8/src/heap/factory-base-inl.h b/deps/v8/src/heap/factory-base-inl.h index 6f218b8248..6c1cede212 100644 --- a/deps/v8/src/heap/factory-base-inl.h +++ b/deps/v8/src/heap/factory-base-inl.h @@ -6,9 +6,10 @@ #define V8_HEAP_FACTORY_BASE_INL_H_ #include "src/heap/factory-base.h" - #include "src/numbers/conversions.h" #include "src/objects/heap-number.h" +#include "src/objects/map.h" +#include "src/objects/slots-inl.h" #include "src/objects/smi.h" #include "src/roots/roots.h" @@ -93,6 +94,29 @@ Handle<HeapNumber> FactoryBase<Impl>::NewHeapNumberWithHoleNaN() { return NewHeapNumberFromBits<allocation>(kHoleNanInt64); } +template <typename Impl> +template <typename StructType> +StructType FactoryBase<Impl>::NewStructInternal(InstanceType type, + AllocationType allocation) { + ReadOnlyRoots roots = read_only_roots(); + Map map = Map::GetInstanceTypeMap(roots, type); + int size = StructType::kSize; + return StructType::cast(NewStructInternal(roots, map, size, allocation)); +} + +template <typename Impl> +Struct FactoryBase<Impl>::NewStructInternal(ReadOnlyRoots roots, Map map, + int size, + AllocationType allocation) { + DCHECK_EQ(size, map.instance_size()); + HeapObject result = AllocateRawWithImmortalMap(size, allocation, map); + Struct str = Struct::cast(result); + Object value = roots.undefined_value(); + int length = (size >> kTaggedSizeLog2) - 1; + MemsetTagged(str.RawField(Struct::kHeaderSize), value, length); + return str; +} + } // namespace internal } // namespace v8 diff --git a/deps/v8/src/heap/factory-base.cc b/deps/v8/src/heap/factory-base.cc index 45577f7bf9..df78716a8d 100644 --- a/deps/v8/src/heap/factory-base.cc +++ b/deps/v8/src/heap/factory-base.cc @@ -53,36 +53,30 @@ FactoryBase<LocalFactory>::NewHeapNumber<AllocationType::kOld>(); template <typename Impl> Handle<Struct> FactoryBase<Impl>::NewStruct(InstanceType type, AllocationType allocation) { - return handle(NewStructInternal(type, allocation), isolate()); -} - -template <typename Impl> -Struct FactoryBase<Impl>::NewStructInternal(InstanceType type, - AllocationType allocation) { - Map map = Map::GetInstanceTypeMap(read_only_roots(), type); + ReadOnlyRoots roots = read_only_roots(); + Map map = Map::GetInstanceTypeMap(roots, type); int size = map.instance_size(); - HeapObject result = AllocateRawWithImmortalMap(size, allocation, map); - Struct str = Struct::cast(result); - str.InitializeBody(size); - return str; + return handle(NewStructInternal(roots, map, size, allocation), isolate()); } template <typename Impl> Handle<AccessorPair> FactoryBase<Impl>::NewAccessorPair() { - Handle<AccessorPair> accessors = Handle<AccessorPair>::cast( - NewStruct(ACCESSOR_PAIR_TYPE, AllocationType::kOld)); - AccessorPair raw = *accessors; + auto accessors = + NewStructInternal<AccessorPair>(ACCESSOR_PAIR_TYPE, AllocationType::kOld); DisallowGarbageCollection no_gc; - raw.set_getter(read_only_roots().null_value(), SKIP_WRITE_BARRIER); - raw.set_setter(read_only_roots().null_value(), SKIP_WRITE_BARRIER); - return accessors; + accessors.set_getter(read_only_roots().null_value(), SKIP_WRITE_BARRIER); + accessors.set_setter(read_only_roots().null_value(), SKIP_WRITE_BARRIER); + return handle(accessors, isolate()); } template <typename Impl> Handle<FixedArray> FactoryBase<Impl>::NewFixedArray(int length, AllocationType allocation) { - DCHECK_LE(0, length); if (length == 0) return impl()->empty_fixed_array(); + if (length < 0 || length > FixedArray::kMaxLength) { + FATAL("Fatal JavaScript invalid size error %d", length); + UNREACHABLE(); + } return NewFixedArrayWithFiller( read_only_roots().fixed_array_map_handle(), length, read_only_roots().undefined_value_handle(), allocation); @@ -128,7 +122,8 @@ Handle<FixedArrayBase> FactoryBase<Impl>::NewFixedDoubleArray( int length, AllocationType allocation) { if (length == 0) return impl()->empty_fixed_array(); if (length < 0 || length > FixedDoubleArray::kMaxLength) { - isolate()->FatalProcessOutOfHeapMemory("invalid array length"); + FATAL("Fatal JavaScript invalid size error %d", length); + UNREACHABLE(); } int size = FixedDoubleArray::SizeFor(length); Map map = read_only_roots().fixed_double_array_map(); @@ -172,7 +167,8 @@ template <typename Impl> Handle<ByteArray> FactoryBase<Impl>::NewByteArray(int length, AllocationType allocation) { if (length < 0 || length > ByteArray::kMaxLength) { - isolate()->FatalProcessOutOfHeapMemory("invalid array length"); + FATAL("Fatal JavaScript invalid size error %d", length); + UNREACHABLE(); } int size = ByteArray::SizeFor(length); HeapObject result = AllocateRawWithImmortalMap( @@ -189,7 +185,8 @@ Handle<BytecodeArray> FactoryBase<Impl>::NewBytecodeArray( int length, const byte* raw_bytecodes, int frame_size, int parameter_count, Handle<FixedArray> constant_pool) { if (length < 0 || length > BytecodeArray::kMaxLength) { - isolate()->FatalProcessOutOfHeapMemory("invalid array length"); + FATAL("Fatal JavaScript invalid size error %d", length); + UNREACHABLE(); } // Bytecode array is AllocationType::kOld, so constant pool array should be // too. @@ -230,8 +227,8 @@ Handle<Script> FactoryBase<Impl>::NewScriptWithId( DCHECK(source->IsString() || source->IsUndefined()); // Create and initialize script object. ReadOnlyRoots roots = read_only_roots(); - Handle<Script> script = - Handle<Script>::cast(NewStruct(SCRIPT_TYPE, AllocationType::kOld)); + Handle<Script> script = handle( + NewStructInternal<Script>(SCRIPT_TYPE, AllocationType::kOld), isolate()); { DisallowGarbageCollection no_gc; Script raw = *script; @@ -243,8 +240,8 @@ Handle<Script> FactoryBase<Impl>::NewScriptWithId( raw.set_context_data(roots.undefined_value(), SKIP_WRITE_BARRIER); raw.set_type(Script::TYPE_NORMAL); raw.set_line_ends(roots.undefined_value(), SKIP_WRITE_BARRIER); - raw.set_eval_from_shared_or_wrapped_arguments(roots.undefined_value(), - SKIP_WRITE_BARRIER); + raw.set_eval_from_shared_or_wrapped_arguments_or_sfi_table( + roots.undefined_value(), SKIP_WRITE_BARRIER); raw.set_eval_from_position(0); raw.set_shared_function_infos(roots.empty_weak_fixed_array(), SKIP_WRITE_BARRIER); @@ -394,14 +391,12 @@ template <typename Impl> Handle<ArrayBoilerplateDescription> FactoryBase<Impl>::NewArrayBoilerplateDescription( ElementsKind elements_kind, Handle<FixedArrayBase> constant_values) { - Handle<ArrayBoilerplateDescription> result = - Handle<ArrayBoilerplateDescription>::cast( - NewStruct(ARRAY_BOILERPLATE_DESCRIPTION_TYPE, AllocationType::kOld)); + auto result = NewStructInternal<ArrayBoilerplateDescription>( + ARRAY_BOILERPLATE_DESCRIPTION_TYPE, AllocationType::kOld); DisallowGarbageCollection no_gc; - ArrayBoilerplateDescription raw = *result; - raw.set_elements_kind(elements_kind); - raw.set_constant_elements(*constant_values); - return result; + result.set_elements_kind(elements_kind); + result.set_constant_elements(*constant_values); + return handle(result, isolate()); } template <typename Impl> @@ -409,15 +404,13 @@ Handle<RegExpBoilerplateDescription> FactoryBase<Impl>::NewRegExpBoilerplateDescription(Handle<FixedArray> data, Handle<String> source, Smi flags) { - Handle<RegExpBoilerplateDescription> result = - Handle<RegExpBoilerplateDescription>::cast(NewStruct( - REG_EXP_BOILERPLATE_DESCRIPTION_TYPE, AllocationType::kOld)); + auto result = NewStructInternal<RegExpBoilerplateDescription>( + REG_EXP_BOILERPLATE_DESCRIPTION_TYPE, AllocationType::kOld); DisallowGarbageCollection no_gc; - RegExpBoilerplateDescription raw = *result; - raw.set_data(*data); - raw.set_source(*source); - raw.set_flags(flags.value()); - return result; + result.set_data(*data); + result.set_source(*source); + result.set_flags(flags.value()); + return handle(result, isolate()); } template <typename Impl> @@ -426,14 +419,12 @@ FactoryBase<Impl>::NewTemplateObjectDescription( Handle<FixedArray> raw_strings, Handle<FixedArray> cooked_strings) { DCHECK_EQ(raw_strings->length(), cooked_strings->length()); DCHECK_LT(0, raw_strings->length()); - Handle<TemplateObjectDescription> result = - Handle<TemplateObjectDescription>::cast( - NewStruct(TEMPLATE_OBJECT_DESCRIPTION_TYPE, AllocationType::kOld)); + auto result = NewStructInternal<TemplateObjectDescription>( + TEMPLATE_OBJECT_DESCRIPTION_TYPE, AllocationType::kOld); DisallowGarbageCollection no_gc; - TemplateObjectDescription raw = *result; - raw.set_raw_strings(*raw_strings); - raw.set_cooked_strings(*cooked_strings); - return result; + result.set_raw_strings(*raw_strings); + result.set_cooked_strings(*cooked_strings); + return handle(result, isolate()); } template <typename Impl> @@ -691,7 +682,8 @@ template <typename Impl> Handle<FreshlyAllocatedBigInt> FactoryBase<Impl>::NewBigInt( int length, AllocationType allocation) { if (length < 0 || length > BigInt::kMaxLength) { - isolate()->FatalProcessOutOfHeapMemory("invalid BigInt length"); + FATAL("Fatal JavaScript invalid size error %d", length); + UNREACHABLE(); } HeapObject result = AllocateRawWithImmortalMap( BigInt::SizeFor(length), allocation, read_only_roots().bigint_map()); @@ -760,11 +752,11 @@ Handle<DescriptorArray> FactoryBase<Impl>::NewDescriptorArray( template <typename Impl> Handle<ClassPositions> FactoryBase<Impl>::NewClassPositions(int start, int end) { - Handle<ClassPositions> class_positions = Handle<ClassPositions>::cast( - NewStruct(CLASS_POSITIONS_TYPE, AllocationType::kOld)); - class_positions->set_start(start); - class_positions->set_end(end); - return class_positions; + auto result = NewStructInternal<ClassPositions>(CLASS_POSITIONS_TYPE, + AllocationType::kOld); + result.set_start(start); + result.set_end(end); + return handle(result, isolate()); } template <typename Impl> @@ -825,7 +817,8 @@ template <typename Impl> HeapObject FactoryBase<Impl>::AllocateRawFixedArray(int length, AllocationType allocation) { if (length < 0 || length > FixedArray::kMaxLength) { - isolate()->FatalProcessOutOfHeapMemory("invalid array length"); + FATAL("Fatal JavaScript invalid size error %d", length); + UNREACHABLE(); } return AllocateRawArray(FixedArray::SizeFor(length), allocation); } @@ -834,7 +827,8 @@ template <typename Impl> HeapObject FactoryBase<Impl>::AllocateRawWeakArrayList( int capacity, AllocationType allocation) { if (capacity < 0 || capacity > WeakArrayList::kMaxCapacity) { - isolate()->FatalProcessOutOfHeapMemory("invalid array length"); + FATAL("Fatal JavaScript invalid size error %d", capacity); + UNREACHABLE(); } return AllocateRawArray(WeakArrayList::SizeForCapacity(capacity), allocation); } @@ -878,8 +872,9 @@ FactoryBase<Impl>::NewSwissNameDictionaryWithCapacity( return read_only_roots().empty_swiss_property_dictionary_handle(); } - if (capacity > SwissNameDictionary::MaxCapacity()) { - isolate()->FatalProcessOutOfHeapMemory("invalid table size"); + if (capacity < 0 || capacity > SwissNameDictionary::MaxCapacity()) { + FATAL("Fatal JavaScript invalid size error %d", capacity); + UNREACHABLE(); } int meta_table_length = SwissNameDictionary::MetaTableSizeFor(capacity); @@ -902,6 +897,18 @@ Handle<SwissNameDictionary> FactoryBase<Impl>::NewSwissNameDictionary( SwissNameDictionary::CapacityFor(at_least_space_for), allocation); } +template <typename Impl> +Handle<FunctionTemplateRareData> +FactoryBase<Impl>::NewFunctionTemplateRareData() { + auto function_template_rare_data = + NewStructInternal<FunctionTemplateRareData>( + FUNCTION_TEMPLATE_RARE_DATA_TYPE, AllocationType::kOld); + DisallowGarbageCollection no_gc; + function_template_rare_data.set_c_function_overloads( + *impl()->empty_fixed_array(), SKIP_WRITE_BARRIER); + return handle(function_template_rare_data, isolate()); +} + // Instantiate FactoryBase for the two variants we want. template class EXPORT_TEMPLATE_DEFINE(V8_EXPORT_PRIVATE) FactoryBase<Factory>; template class EXPORT_TEMPLATE_DEFINE(V8_EXPORT_PRIVATE) diff --git a/deps/v8/src/heap/factory-base.h b/deps/v8/src/heap/factory-base.h index b964f6b234..4e3d5efbe4 100644 --- a/deps/v8/src/heap/factory-base.h +++ b/deps/v8/src/heap/factory-base.h @@ -228,14 +228,19 @@ class EXPORT_TEMPLATE_DECLARE(V8_EXPORT_PRIVATE) FactoryBase Handle<SwissNameDictionary> NewSwissNameDictionaryWithCapacity( int capacity, AllocationType allocation); + Handle<FunctionTemplateRareData> NewFunctionTemplateRareData(); + protected: // Allocate memory for an uninitialized array (e.g., a FixedArray or similar). HeapObject AllocateRawArray(int size, AllocationType allocation); HeapObject AllocateRawFixedArray(int length, AllocationType allocation); HeapObject AllocateRawWeakArrayList(int length, AllocationType allocation); - Struct NewStructInternal(InstanceType type, - AllocationType allocation = AllocationType::kYoung); + template <typename StructType> + inline StructType NewStructInternal(InstanceType type, + AllocationType allocation); + Struct NewStructInternal(ReadOnlyRoots roots, Map map, int size, + AllocationType allocation); HeapObject AllocateRawWithImmortalMap( int size, AllocationType allocation, Map map, diff --git a/deps/v8/src/heap/factory.cc b/deps/v8/src/heap/factory.cc index c26d797dc1..6f753d23b4 100644 --- a/deps/v8/src/heap/factory.cc +++ b/deps/v8/src/heap/factory.cc @@ -53,6 +53,7 @@ #include "src/objects/js-regexp-inl.h" #include "src/objects/js-weak-refs-inl.h" #include "src/objects/literal-objects-inl.h" +#include "src/objects/megadom-handler-inl.h" #include "src/objects/microtask-inl.h" #include "src/objects/module-inl.h" #include "src/objects/promise-inl.h" @@ -153,9 +154,8 @@ MaybeHandle<Code> Factory::CodeBuilder::BuildInternal( if (is_executable_) { DCHECK(IsAligned(code->address(), kCodeAlignment)); DCHECK_IMPLIES( - !V8_ENABLE_THIRD_PARTY_HEAP_BOOL && - !heap->memory_allocator()->code_range().is_empty(), - heap->memory_allocator()->code_range().contains(code->address())); + !V8_ENABLE_THIRD_PARTY_HEAP_BOOL && !heap->code_region().is_empty(), + heap->code_region().contains(code->address())); } constexpr bool kIsNotOffHeapTrampoline = false; @@ -314,8 +314,8 @@ Handle<HeapObject> Factory::NewFillerObject(int size, bool double_align, } Handle<PrototypeInfo> Factory::NewPrototypeInfo() { - PrototypeInfo result = PrototypeInfo::cast( - NewStructInternal(PROTOTYPE_INFO_TYPE, AllocationType::kOld)); + auto result = NewStructInternal<PrototypeInfo>(PROTOTYPE_INFO_TYPE, + AllocationType::kOld); DisallowGarbageCollection no_gc; result.set_prototype_users(Smi::zero()); result.set_registry_slot(PrototypeInfo::UNREGISTERED); @@ -326,8 +326,8 @@ Handle<PrototypeInfo> Factory::NewPrototypeInfo() { Handle<EnumCache> Factory::NewEnumCache(Handle<FixedArray> keys, Handle<FixedArray> indices) { - EnumCache result = - EnumCache::cast(NewStructInternal(ENUM_CACHE_TYPE, AllocationType::kOld)); + auto result = + NewStructInternal<EnumCache>(ENUM_CACHE_TYPE, AllocationType::kOld); DisallowGarbageCollection no_gc; result.set_keys(*keys); result.set_indices(*indices); @@ -336,7 +336,7 @@ Handle<EnumCache> Factory::NewEnumCache(Handle<FixedArray> keys, Handle<Tuple2> Factory::NewTuple2(Handle<Object> value1, Handle<Object> value2, AllocationType allocation) { - Tuple2 result = Tuple2::cast(NewStructInternal(TUPLE2_TYPE, allocation)); + auto result = NewStructInternal<Tuple2>(TUPLE2_TYPE, allocation); DisallowGarbageCollection no_gc; result.set_value1(*value1); result.set_value2(*value2); @@ -345,8 +345,8 @@ Handle<Tuple2> Factory::NewTuple2(Handle<Object> value1, Handle<Object> value2, Handle<BaselineData> Factory::NewBaselineData( Handle<Code> code, Handle<HeapObject> function_data) { - BaselineData baseline_data = BaselineData::cast( - NewStructInternal(BASELINE_DATA_TYPE, AllocationType::kOld)); + auto baseline_data = + NewStructInternal<BaselineData>(BASELINE_DATA_TYPE, AllocationType::kOld); DisallowGarbageCollection no_gc; baseline_data.set_baseline_code(*code); baseline_data.set_data(*function_data); @@ -410,20 +410,6 @@ MaybeHandle<FixedArray> Factory::TryNewFixedArray( return handle(array, isolate()); } -Handle<FixedArray> Factory::NewUninitializedFixedArray(int length) { - if (length == 0) return empty_fixed_array(); - if (length < 0 || length > FixedArray::kMaxLength) { - isolate()->heap()->FatalProcessOutOfMemory("invalid array length"); - } - - // TODO(ulan): As an experiment this temporarily returns an initialized fixed - // array. After getting canary/performance coverage, either remove the - // function or revert to returning uninitilized array. - return NewFixedArrayWithFiller(read_only_roots().fixed_array_map_handle(), - length, undefined_value(), - AllocationType::kYoung); -} - Handle<ClosureFeedbackCellArray> Factory::NewClosureFeedbackCellArray( int length) { if (length == 0) return empty_closure_feedback_cell_array(); @@ -557,9 +543,8 @@ Handle<NameDictionary> Factory::NewNameDictionary(int at_least_space_for) { } Handle<PropertyDescriptorObject> Factory::NewPropertyDescriptorObject() { - PropertyDescriptorObject object = - PropertyDescriptorObject::cast(NewStructInternal( - PROPERTY_DESCRIPTOR_OBJECT_TYPE, AllocationType::kYoung)); + auto object = NewStructInternal<PropertyDescriptorObject>( + PROPERTY_DESCRIPTOR_OBJECT_TYPE, AllocationType::kYoung); DisallowGarbageCollection no_gc; object.set_flags(0); Oddball the_hole = read_only_roots().the_hole_value(); @@ -1095,7 +1080,7 @@ Handle<NativeContext> Factory::NewNativeContext() { // The ExternalPointerTable is a C++ object. context.AllocateExternalPointerEntries(isolate()); context.set_scope_info(*native_scope_info()); - context.set_previous(Context::unchecked_cast(Smi::zero())); + context.set_previous(Context()); context.set_extension(*undefined_value()); context.set_errors_thrown(Smi::zero()); context.set_math_random_index(Smi::zero()); @@ -1179,7 +1164,7 @@ Handle<Context> Factory::NewCatchContext(Handle<Context> previous, isolate()->catch_context_map(), Context::SizeFor(variadic_part_length), variadic_part_length, AllocationType::kYoung); DisallowGarbageCollection no_gc; - DCHECK(Heap::InYoungGeneration(context)); + DCHECK_IMPLIES(!FLAG_single_generation, Heap::InYoungGeneration(context)); context.set_scope_info(*scope_info, SKIP_WRITE_BARRIER); context.set_previous(*previous, SKIP_WRITE_BARRIER); context.set(Context::THROWN_OBJECT_INDEX, *thrown_object, SKIP_WRITE_BARRIER); @@ -1204,7 +1189,7 @@ Handle<Context> Factory::NewDebugEvaluateContext(Handle<Context> previous, Context::SizeFor(variadic_part_length), variadic_part_length, AllocationType::kYoung); DisallowGarbageCollection no_gc; - DCHECK(Heap::InYoungGeneration(context)); + DCHECK_IMPLIES(!FLAG_single_generation, Heap::InYoungGeneration(context)); context.set_scope_info(*scope_info, SKIP_WRITE_BARRIER); context.set_previous(*previous, SKIP_WRITE_BARRIER); context.set_extension(*ext, SKIP_WRITE_BARRIER); @@ -1227,7 +1212,7 @@ Handle<Context> Factory::NewWithContext(Handle<Context> previous, isolate()->with_context_map(), Context::SizeFor(variadic_part_length), variadic_part_length, AllocationType::kYoung); DisallowGarbageCollection no_gc; - DCHECK(Heap::InYoungGeneration(context)); + DCHECK_IMPLIES(!FLAG_single_generation, Heap::InYoungGeneration(context)); context.set_scope_info(*scope_info, SKIP_WRITE_BARRIER); context.set_previous(*previous, SKIP_WRITE_BARRIER); context.set_extension(*extension, SKIP_WRITE_BARRIER); @@ -1243,7 +1228,7 @@ Handle<Context> Factory::NewBlockContext(Handle<Context> previous, isolate()->block_context_map(), Context::SizeFor(variadic_part_length), variadic_part_length, AllocationType::kYoung); DisallowGarbageCollection no_gc; - DCHECK(Heap::InYoungGeneration(context)); + DCHECK_IMPLIES(!FLAG_single_generation, Heap::InYoungGeneration(context)); context.set_scope_info(*scope_info, SKIP_WRITE_BARRIER); context.set_previous(*previous, SKIP_WRITE_BARRIER); return handle(context, isolate()); @@ -1256,7 +1241,7 @@ Handle<Context> Factory::NewBuiltinContext(Handle<NativeContext> native_context, isolate()->function_context_map(), Context::SizeFor(variadic_part_length), variadic_part_length, AllocationType::kYoung); DisallowGarbageCollection no_gc; - DCHECK(Heap::InYoungGeneration(context)); + DCHECK_IMPLIES(!FLAG_single_generation, Heap::InYoungGeneration(context)); context.set_scope_info(read_only_roots().empty_scope_info(), SKIP_WRITE_BARRIER); context.set_previous(*native_context, SKIP_WRITE_BARRIER); @@ -1265,15 +1250,15 @@ Handle<Context> Factory::NewBuiltinContext(Handle<NativeContext> native_context, Handle<AliasedArgumentsEntry> Factory::NewAliasedArgumentsEntry( int aliased_context_slot) { - AliasedArgumentsEntry entry = AliasedArgumentsEntry::cast( - NewStructInternal(ALIASED_ARGUMENTS_ENTRY_TYPE, AllocationType::kYoung)); + auto entry = NewStructInternal<AliasedArgumentsEntry>( + ALIASED_ARGUMENTS_ENTRY_TYPE, AllocationType::kYoung); entry.set_aliased_context_slot(aliased_context_slot); return handle(entry, isolate()); } Handle<AccessorInfo> Factory::NewAccessorInfo() { - AccessorInfo info = AccessorInfo::cast( - NewStructInternal(ACCESSOR_INFO_TYPE, AllocationType::kOld)); + auto info = + NewStructInternal<AccessorInfo>(ACCESSOR_INFO_TYPE, AllocationType::kOld); DisallowGarbageCollection no_gc; info.set_name(*empty_string(), SKIP_WRITE_BARRIER); info.set_flags(0); // Must clear the flags, it was initialized as undefined. @@ -1311,8 +1296,8 @@ Handle<Script> Factory::CloneScript(Handle<Script> script) { new_script.set_context_data(old_script.context_data()); new_script.set_type(old_script.type()); new_script.set_line_ends(*undefined_value(), SKIP_WRITE_BARRIER); - new_script.set_eval_from_shared_or_wrapped_arguments( - script->eval_from_shared_or_wrapped_arguments()); + new_script.set_eval_from_shared_or_wrapped_arguments_or_sfi_table( + script->eval_from_shared_or_wrapped_arguments_or_sfi_table()); new_script.set_shared_function_infos(*empty_weak_fixed_array(), SKIP_WRITE_BARRIER); new_script.set_eval_from_position(old_script.eval_from_position()); @@ -1330,8 +1315,8 @@ Handle<Script> Factory::CloneScript(Handle<Script> script) { Handle<CallableTask> Factory::NewCallableTask(Handle<JSReceiver> callable, Handle<Context> context) { DCHECK(callable->IsCallable()); - CallableTask microtask = CallableTask::cast( - NewStructInternal(CALLABLE_TASK_TYPE, AllocationType::kYoung)); + auto microtask = NewStructInternal<CallableTask>(CALLABLE_TASK_TYPE, + AllocationType::kYoung); DisallowGarbageCollection no_gc; microtask.set_callable(*callable, SKIP_WRITE_BARRIER); microtask.set_context(*context, SKIP_WRITE_BARRIER); @@ -1340,8 +1325,8 @@ Handle<CallableTask> Factory::NewCallableTask(Handle<JSReceiver> callable, Handle<CallbackTask> Factory::NewCallbackTask(Handle<Foreign> callback, Handle<Foreign> data) { - CallbackTask microtask = CallbackTask::cast( - NewStructInternal(CALLBACK_TASK_TYPE, AllocationType::kYoung)); + auto microtask = NewStructInternal<CallbackTask>(CALLBACK_TASK_TYPE, + AllocationType::kYoung); DisallowGarbageCollection no_gc; microtask.set_callback(*callback, SKIP_WRITE_BARRIER); microtask.set_data(*data, SKIP_WRITE_BARRIER); @@ -1352,9 +1337,8 @@ Handle<PromiseResolveThenableJobTask> Factory::NewPromiseResolveThenableJobTask( Handle<JSPromise> promise_to_resolve, Handle<JSReceiver> thenable, Handle<JSReceiver> then, Handle<Context> context) { DCHECK(then->IsCallable()); - PromiseResolveThenableJobTask microtask = - PromiseResolveThenableJobTask::cast(NewStructInternal( - PROMISE_RESOLVE_THENABLE_JOB_TASK_TYPE, AllocationType::kYoung)); + auto microtask = NewStructInternal<PromiseResolveThenableJobTask>( + PROMISE_RESOLVE_THENABLE_JOB_TASK_TYPE, AllocationType::kYoung); DisallowGarbageCollection no_gc; microtask.set_promise_to_resolve(*promise_to_resolve, SKIP_WRITE_BARRIER); microtask.set_thenable(*thenable, SKIP_WRITE_BARRIER); @@ -1377,24 +1361,78 @@ Handle<Foreign> Factory::NewForeign(Address addr) { #if V8_ENABLE_WEBASSEMBLY Handle<WasmTypeInfo> Factory::NewWasmTypeInfo(Address type_address, - Handle<Map> opt_parent) { + Handle<Map> opt_parent, + int instance_size_bytes) { + // We pretenure WasmTypeInfo objects because they are refererenced by Maps, + // which are assumed to be long-lived. The supertypes list is constant + // after initialization, so we pretenure that too. + // The subtypes list, however, is expected to grow (and hence be replaced), + // so we don't pretenure it. Handle<ArrayList> subtypes = ArrayList::New(isolate(), 0); Handle<FixedArray> supertypes; if (opt_parent.is_null()) { - supertypes = NewUninitializedFixedArray(0); + supertypes = NewFixedArray(0); } else { - supertypes = CopyFixedArrayAndGrow( - handle(opt_parent->wasm_type_info().supertypes(), isolate()), 1); + supertypes = CopyArrayAndGrow( + handle(opt_parent->wasm_type_info().supertypes(), isolate()), 1, + AllocationType::kOld); supertypes->set(supertypes->length() - 1, *opt_parent); } Map map = *wasm_type_info_map(); WasmTypeInfo result = WasmTypeInfo::cast(AllocateRawWithImmortalMap( - map.instance_size(), AllocationType::kYoung, map)); + map.instance_size(), AllocationType::kOld, map)); DisallowGarbageCollection no_gc; result.AllocateExternalPointerEntries(isolate()); result.set_foreign_address(isolate(), type_address); result.set_supertypes(*supertypes, SKIP_WRITE_BARRIER); - result.set_subtypes(*subtypes, SKIP_WRITE_BARRIER); + result.set_subtypes(*subtypes); + result.set_instance_size(instance_size_bytes); + return handle(result, isolate()); +} + +Handle<WasmJSFunctionData> Factory::NewWasmJSFunctionData( + Address opt_call_target, Handle<JSReceiver> callable, int return_count, + int parameter_count, Handle<PodArray<wasm::ValueType>> serialized_sig, + Handle<Code> wrapper_code) { + Handle<Tuple2> pair = NewTuple2(null_value(), callable, AllocationType::kOld); + Map map = *wasm_js_function_data_map(); + WasmJSFunctionData result = + WasmJSFunctionData::cast(AllocateRawWithImmortalMap( + map.instance_size(), AllocationType::kOld, map)); + DisallowGarbageCollection no_gc; + result.AllocateExternalPointerEntries(isolate()); + result.set_foreign_address(isolate(), opt_call_target); + result.set_ref(*pair); + result.set_serialized_return_count(return_count); + result.set_serialized_parameter_count(parameter_count); + result.set_serialized_signature(*serialized_sig); + result.set_wrapper_code(*wrapper_code); + // Default value, will be overwritten by the caller. + result.set_wasm_to_js_wrapper_code( + isolate()->heap()->builtin(Builtins::kAbort)); + return handle(result, isolate()); +} + +Handle<WasmExportedFunctionData> Factory::NewWasmExportedFunctionData( + Handle<Code> export_wrapper, Handle<WasmInstanceObject> instance, + Address call_target, Handle<Object> ref, int func_index, + Address sig_address, int wrapper_budget) { + Handle<Foreign> sig_foreign = NewForeign(sig_address); + Map map = *wasm_exported_function_data_map(); + WasmExportedFunctionData result = + WasmExportedFunctionData::cast(AllocateRawWithImmortalMap( + map.instance_size(), AllocationType::kOld, map)); + DisallowGarbageCollection no_gc; + result.AllocateExternalPointerEntries(isolate()); + result.set_foreign_address(isolate(), call_target); + result.set_ref(*ref); + result.set_wrapper_code(*export_wrapper); + result.set_instance(*instance); + result.set_function_index(func_index); + result.set_signature(*sig_foreign); + result.set_wrapper_budget(wrapper_budget); + result.set_c_wrapper_code(Smi::zero(), SKIP_WRITE_BARRIER); + result.set_packed_args_size(0); return handle(result, isolate()); } @@ -1566,9 +1604,7 @@ Map Factory::InitializeMap(Map map, InstanceType type, int instance_size, map.SetInstanceDescriptors(isolate(), *empty_descriptor_array(), 0); // Must be called only after |instance_type| and |instance_size| are set. map.set_visitor_id(Map::GetVisitorId(map)); - // TODO(solanes, v8:7790, v8:11353): set_relaxed_bit_field could be an atomic - // set if TSAN could see the transitions happening in StoreIC. - map.set_relaxed_bit_field(0); + map.set_bit_field(0); map.set_bit_field2(Map::Bits2::NewTargetIsBaseBit::encode(true)); int bit_field3 = Map::Bits3::EnumLengthBits::encode(kInvalidEnumCacheSentinel) | @@ -1892,7 +1928,7 @@ Handle<JSObject> Factory::NewError(Handle<JSFunction> constructor, Handle<Object> no_caller; return ErrorUtils::Construct(isolate(), constructor, constructor, message, - SKIP_NONE, no_caller, + undefined_value(), SKIP_NONE, no_caller, ErrorUtils::StackTraceCollection::kDetailed) .ToHandleChecked(); } @@ -2075,9 +2111,8 @@ Handle<Code> Factory::CopyCode(Handle<Code> code) { #endif DCHECK(IsAligned(new_code->address(), kCodeAlignment)); DCHECK_IMPLIES( - !V8_ENABLE_THIRD_PARTY_HEAP_BOOL && - !heap->memory_allocator()->code_range().is_empty(), - heap->memory_allocator()->code_range().contains(new_code->address())); + !V8_ENABLE_THIRD_PARTY_HEAP_BOOL && !heap->code_region().is_empty(), + heap->code_region().contains(new_code->address())); return new_code; } @@ -2175,7 +2210,7 @@ Handle<JSGlobalObject> Factory::NewJSGlobalObject( // Set up the global object as a normalized object. global->set_global_dictionary(*dictionary, kReleaseStore); - global->synchronized_set_map(raw_map); + global->set_map(raw_map, kReleaseStore); // Make sure result is a global object with properties in dictionary. DCHECK(global->IsJSGlobalObject() && !global->HasFastProperties()); @@ -2212,13 +2247,9 @@ void Factory::InitializeJSObjectBody(JSObject obj, Map map, int start_offset) { // In case of Array subclassing the |map| could already be transitioned // to different elements kind from the initial map on which we track slack. bool in_progress = map.IsInobjectSlackTrackingInProgress(); - Object filler; - if (in_progress) { - filler = *one_pointer_filler_map(); - } else { - filler = *undefined_value(); - } - obj.InitializeBody(map, start_offset, *undefined_value(), filler); + obj.InitializeBody(map, start_offset, in_progress, + ReadOnlyRoots(isolate()).one_pointer_filler_map_word(), + *undefined_value()); if (in_progress) { map.FindRootMap(isolate()).InobjectSlackTrackingStep(isolate()); } @@ -2369,7 +2400,7 @@ Handle<FixedArrayBase> Factory::NewJSArrayStorage( } else { DCHECK(IsSmiOrObjectElementsKind(elements_kind)); if (mode == DONT_INITIALIZE_ARRAY_ELEMENTS) { - elms = NewUninitializedFixedArray(capacity); + elms = NewFixedArray(capacity); } else { DCHECK(mode == INITIALIZE_ARRAY_ELEMENTS_WITH_HOLE); elms = NewFixedArrayWithHoles(capacity); @@ -2444,7 +2475,8 @@ Handle<SourceTextModule> Factory::NewSourceTextModule( module.set_status(Module::kUninstantiated); module.set_exception(roots.the_hole_value(), SKIP_WRITE_BARRIER); module.set_top_level_capability(roots.undefined_value(), SKIP_WRITE_BARRIER); - module.set_import_meta(roots.the_hole_value(), SKIP_WRITE_BARRIER); + module.set_import_meta(roots.the_hole_value(), kReleaseStore, + SKIP_WRITE_BARRIER); module.set_dfs_index(-1); module.set_dfs_ancestor_index(-1); module.set_flags(0); @@ -2487,7 +2519,8 @@ Handle<JSArrayBuffer> Factory::NewJSArrayBuffer( isolate()); auto result = Handle<JSArrayBuffer>::cast(NewJSObjectFromMap(map, allocation)); - result->Setup(SharedFlag::kNotShared, std::move(backing_store)); + result->Setup(SharedFlag::kNotShared, ResizableFlag::kNotResizable, + std::move(backing_store)); return result; } @@ -2505,18 +2538,32 @@ MaybeHandle<JSArrayBuffer> Factory::NewJSArrayBufferAndBackingStore( isolate()); auto array_buffer = Handle<JSArrayBuffer>::cast(NewJSObjectFromMap(map, allocation)); - array_buffer->Setup(SharedFlag::kNotShared, std::move(backing_store)); + array_buffer->Setup(SharedFlag::kNotShared, ResizableFlag::kNotResizable, + std::move(backing_store)); return array_buffer; } Handle<JSArrayBuffer> Factory::NewJSSharedArrayBuffer( std::shared_ptr<BackingStore> backing_store) { - Handle<Map> map( - isolate()->native_context()->shared_array_buffer_fun().initial_map(), - isolate()); + Handle<Map> map; + if (backing_store->is_resizable()) { + DCHECK(FLAG_harmony_rab_gsab); + map = Handle<Map>(isolate() + ->native_context() + ->growable_shared_array_buffer_fun() + .initial_map(), + isolate()); + } else { + map = Handle<Map>( + isolate()->native_context()->shared_array_buffer_fun().initial_map(), + isolate()); + } auto result = Handle<JSArrayBuffer>::cast( NewJSObjectFromMap(map, AllocationType::kYoung)); - result->Setup(SharedFlag::kShared, std::move(backing_store)); + ResizableFlag resizable = backing_store->is_resizable() + ? ResizableFlag::kResizable + : ResizableFlag::kNotResizable; + result->Setup(SharedFlag::kShared, resizable, std::move(backing_store)); return result; } @@ -2571,6 +2618,7 @@ void Factory::TypeAndSizeForElementsKind(ElementsKind kind, *element_size = sizeof(ctype); \ break; TYPED_ARRAYS(TYPED_ARRAY_CASE) + RAB_GSAB_TYPED_ARRAYS_WITH_TYPED_ARRAY_TYPE(TYPED_ARRAY_CASE) #undef TYPED_ARRAY_CASE default: @@ -2653,6 +2701,8 @@ Handle<JSTypedArray> Factory::NewJSTypedArray(ExternalArrayType type, raw.AllocateExternalPointerEntries(isolate()); raw.set_length(length); raw.SetOffHeapDataPtr(isolate(), buffer->backing_store(), byte_offset); + raw.set_is_length_tracking(false); + raw.set_is_backed_by_rab(!buffer->is_shared() && buffer->is_resizable()); return typed_array; } @@ -2791,7 +2841,7 @@ void Factory::ReinitializeJSGlobalProxy(Handle<JSGlobalProxy> object, // Reset the map for the object. JSGlobalProxy raw = *object; - raw.synchronized_set_map(*map); + raw.set_map(*map, kReleaseStore); // Reinitialize the object from the constructor map. InitializeJSObjectFromMap(raw, *raw_properties_or_hash, *map); @@ -3016,11 +3066,11 @@ Handle<String> Factory::SizeToString(size_t value, bool check_cache) { Handle<DebugInfo> Factory::NewDebugInfo(Handle<SharedFunctionInfo> shared) { DCHECK(!shared->HasDebugInfo()); - DebugInfo debug_info = - DebugInfo::cast(NewStructInternal(DEBUG_INFO_TYPE, AllocationType::kOld)); + auto debug_info = + NewStructInternal<DebugInfo>(DEBUG_INFO_TYPE, AllocationType::kOld); DisallowGarbageCollection no_gc; SharedFunctionInfo raw_shared = *shared; - debug_info.set_flags(DebugInfo::kNone); + debug_info.set_flags(DebugInfo::kNone, kRelaxedStore); debug_info.set_shared(raw_shared); debug_info.set_debugger_hints(0); DCHECK_EQ(DebugInfo::kNoDebuggingId, debug_info.debugging_id()); @@ -3039,8 +3089,8 @@ Handle<DebugInfo> Factory::NewDebugInfo(Handle<SharedFunctionInfo> shared) { } Handle<BreakPointInfo> Factory::NewBreakPointInfo(int source_position) { - BreakPointInfo new_break_point_info = BreakPointInfo::cast( - NewStructInternal(BREAK_POINT_INFO_TYPE, AllocationType::kOld)); + auto new_break_point_info = NewStructInternal<BreakPointInfo>( + BREAK_POINT_INFO_TYPE, AllocationType::kOld); DisallowGarbageCollection no_gc; new_break_point_info.set_source_position(source_position); new_break_point_info.set_break_points(*undefined_value(), SKIP_WRITE_BARRIER); @@ -3048,8 +3098,8 @@ Handle<BreakPointInfo> Factory::NewBreakPointInfo(int source_position) { } Handle<BreakPoint> Factory::NewBreakPoint(int id, Handle<String> condition) { - BreakPoint new_break_point = BreakPoint::cast( - NewStructInternal(BREAK_POINT_TYPE, AllocationType::kOld)); + auto new_break_point = + NewStructInternal<BreakPoint>(BREAK_POINT_TYPE, AllocationType::kOld); DisallowGarbageCollection no_gc; new_break_point.set_id(id); new_break_point.set_condition(*condition); @@ -3060,8 +3110,8 @@ Handle<StackFrameInfo> Factory::NewStackFrameInfo( Handle<Object> receiver_or_instance, Handle<Object> function, Handle<HeapObject> code_object, int code_offset_or_source_position, int flags, Handle<FixedArray> parameters) { - StackFrameInfo info = StackFrameInfo::cast( - NewStructInternal(STACK_FRAME_INFO_TYPE, AllocationType::kYoung)); + auto info = NewStructInternal<StackFrameInfo>(STACK_FRAME_INFO_TYPE, + AllocationType::kYoung); DisallowGarbageCollection no_gc; info.set_receiver_or_instance(*receiver_or_instance, SKIP_WRITE_BARRIER); info.set_function(*function, SKIP_WRITE_BARRIER); @@ -3136,6 +3186,16 @@ Handle<Map> Factory::ObjectLiteralMapFromCache(Handle<NativeContext> context, return map; } +Handle<MegaDomHandler> Factory::NewMegaDomHandler(MaybeObjectHandle accessor, + MaybeObjectHandle context) { + Handle<Map> map = read_only_roots().mega_dom_handler_map_handle(); + MegaDomHandler handler = MegaDomHandler::cast(New(map, AllocationType::kOld)); + DisallowGarbageCollection no_gc; + handler.set_accessor(*accessor); + handler.set_context(*context); + return handle(handler, isolate()); +} + Handle<LoadHandler> Factory::NewLoadHandler(int data_count, AllocationType allocation) { Handle<Map> map; @@ -3539,20 +3599,12 @@ Handle<JSFunction> Factory::JSFunctionBuilder::Build() { PrepareMap(); PrepareFeedbackCell(); - // Determine the associated Code object. - Handle<Code> code; - const bool have_cached_code = - sfi_->TryGetCachedCode(isolate_).ToHandle(&code); - if (!have_cached_code) code = handle(sfi_->GetCode(), isolate_); - + Handle<Code> code = handle(sfi_->GetCode(), isolate_); Handle<JSFunction> result = BuildRaw(code); - if (have_cached_code || code->kind() == CodeKind::BASELINE) { + if (code->kind() == CodeKind::BASELINE) { IsCompiledScope is_compiled_scope(sfi_->is_compiled_scope(isolate_)); JSFunction::EnsureFeedbackVector(result, &is_compiled_scope); - if (FLAG_trace_turbo_nci && have_cached_code) { - CompilationCacheCode::TraceHit(sfi_, code); - } } Compiler::PostInstantiation(result); @@ -3584,7 +3636,8 @@ Handle<JSFunction> Factory::JSFunctionBuilder::BuildRaw(Handle<Code> code) { function.set_code(*code, kReleaseStore, mode); if (function.has_prototype_slot()) { function.set_prototype_or_initial_map( - ReadOnlyRoots(isolate).the_hole_value(), SKIP_WRITE_BARRIER); + ReadOnlyRoots(isolate).the_hole_value(), kReleaseStore, + SKIP_WRITE_BARRIER); } // Potentially body initialization. diff --git a/deps/v8/src/heap/factory.h b/deps/v8/src/heap/factory.h index ebec483de4..7f99c55709 100644 --- a/deps/v8/src/heap/factory.h +++ b/deps/v8/src/heap/factory.h @@ -131,9 +131,6 @@ class V8_EXPORT_PRIVATE Factory : public FactoryBase<Factory> { MaybeHandle<FixedArray> TryNewFixedArray( int length, AllocationType allocation = AllocationType::kYoung); - // Allocates an uninitialized fixed array. It must be filled by the caller. - Handle<FixedArray> NewUninitializedFixedArray(int length); - // Allocates a closure feedback cell array whose feedback cells are // initialized with undefined values. Handle<ClosureFeedbackCellArray> NewClosureFeedbackCellArray(int num_slots); @@ -557,7 +554,18 @@ class V8_EXPORT_PRIVATE Factory : public FactoryBase<Factory> { #if V8_ENABLE_WEBASSEMBLY Handle<WasmTypeInfo> NewWasmTypeInfo(Address type_address, - Handle<Map> opt_parent); + Handle<Map> opt_parent, + int instance_size_bytes); + Handle<WasmExportedFunctionData> NewWasmExportedFunctionData( + Handle<Code> export_wrapper, Handle<WasmInstanceObject> instance, + Address call_target, Handle<Object> ref, int func_index, + Address sig_address, int wrapper_budget); + // {opt_call_target} is kNullAddress for JavaScript functions, and + // non-null for exported Wasm functions. + Handle<WasmJSFunctionData> NewWasmJSFunctionData( + Address opt_call_target, Handle<JSReceiver> callable, int return_count, + int parameter_count, Handle<PodArray<wasm::ValueType>> serialized_sig, + Handle<Code> wrapper_code); Handle<SharedFunctionInfo> NewSharedFunctionInfoForWasmExportedFunction( Handle<String> name, Handle<WasmExportedFunctionData> data); @@ -732,7 +740,8 @@ class V8_EXPORT_PRIVATE Factory : public FactoryBase<Factory> { Handle<LoadHandler> NewLoadHandler( int data_count, AllocationType allocation = AllocationType::kOld); Handle<StoreHandler> NewStoreHandler(int data_count); - + Handle<MegaDomHandler> NewMegaDomHandler(MaybeObjectHandle accessor, + MaybeObjectHandle context); Handle<RegExpMatchInfo> NewRegExpMatchInfo(); // Creates a new FixedArray that holds the data associated with the diff --git a/deps/v8/src/heap/finalization-registry-cleanup-task.cc b/deps/v8/src/heap/finalization-registry-cleanup-task.cc index 2acfa31ffb..18222e783d 100644 --- a/deps/v8/src/heap/finalization-registry-cleanup-task.cc +++ b/deps/v8/src/heap/finalization-registry-cleanup-task.cc @@ -59,8 +59,21 @@ void FinalizationRegistryCleanupTask::RunInternal() { Context::cast(finalization_registry->native_context()), isolate); Handle<Object> callback(finalization_registry->cleanup(), isolate); v8::Context::Scope context_scope(v8::Utils::ToLocal(context)); - v8::TryCatch catcher(reinterpret_cast<v8::Isolate*>(isolate)); + v8::Isolate* v8_isolate = reinterpret_cast<v8::Isolate*>(isolate); + v8::TryCatch catcher(v8_isolate); catcher.SetVerbose(true); + std::unique_ptr<MicrotasksScope> microtasks_scope; + MicrotaskQueue* microtask_queue = + finalization_registry->native_context().microtask_queue(); + if (!microtask_queue) microtask_queue = isolate->default_microtask_queue(); + if (microtask_queue && + microtask_queue->microtasks_policy() == v8::MicrotasksPolicy::kScoped) { + // InvokeFinalizationRegistryCleanupFromTask will call into V8 API methods, + // so we need a valid microtasks scope on the stack to avoid running into + // the CallDepthScope check. + microtasks_scope.reset(new v8::MicrotasksScope( + v8_isolate, microtask_queue, v8::MicrotasksScope::kDoNotRunMicrotasks)); + } // Exceptions are reported via the message handler. This is ensured by the // verbose TryCatch. diff --git a/deps/v8/src/heap/free-list.cc b/deps/v8/src/heap/free-list.cc index 80b4a4f01f..9f13247a2e 100644 --- a/deps/v8/src/heap/free-list.cc +++ b/deps/v8/src/heap/free-list.cc @@ -48,7 +48,7 @@ FreeSpace FreeListCategory::SearchForNodeInList(size_t minimum_size, for (FreeSpace cur_node = top(); !cur_node.is_null(); cur_node = cur_node.next()) { DCHECK(Page::FromHeapObject(cur_node)->CanAllocate()); - size_t size = cur_node.size(); + size_t size = cur_node.size(kRelaxedLoad); if (size >= minimum_size) { DCHECK_GE(available_, size); UpdateCountersAfterAllocation(size); @@ -91,10 +91,10 @@ void FreeListCategory::RepairFreeList(Heap* heap) { FreeSpace n = top(); while (!n.is_null()) { ObjectSlot map_slot = n.map_slot(); - if (map_slot.contains_value(kNullAddress)) { - map_slot.store(free_space_map); + if (map_slot.contains_map_value(kNullAddress)) { + map_slot.store_map(free_space_map); } else { - DCHECK(map_slot.contains_value(free_space_map.ptr())); + DCHECK(map_slot.contains_map_value(free_space_map.ptr())); } n = n.next(); } @@ -504,12 +504,13 @@ size_t FreeListCategory::SumFreeList() { while (!cur.is_null()) { // We can't use "cur->map()" here because both cur's map and the // root can be null during bootstrapping. - DCHECK(cur.map_slot().contains_value(Page::FromHeapObject(cur) - ->heap() - ->isolate() - ->root(RootIndex::kFreeSpaceMap) - .ptr())); - sum += cur.relaxed_read_size(); + DCHECK( + cur.map_slot().contains_map_value(Page::FromHeapObject(cur) + ->heap() + ->isolate() + ->root(RootIndex::kFreeSpaceMap) + .ptr())); + sum += cur.size(kRelaxedLoad); cur = cur.next(); } return sum; diff --git a/deps/v8/src/heap/gc-tracer.cc b/deps/v8/src/heap/gc-tracer.cc index b4f86cc2a1..70f8c27627 100644 --- a/deps/v8/src/heap/gc-tracer.cc +++ b/deps/v8/src/heap/gc-tracer.cc @@ -13,7 +13,9 @@ #include "src/heap/heap-inl.h" #include "src/heap/incremental-marking.h" #include "src/heap/spaces.h" -#include "src/logging/counters-inl.h" +#include "src/logging/counters.h" +#include "src/logging/tracing-flags.h" +#include "src/tracing/tracing-category-observer.h" namespace v8 { namespace internal { @@ -28,6 +30,8 @@ static size_t CountTotalHolesSize(Heap* heap) { } return holes_size; } + +#ifdef V8_RUNTIME_CALL_STATS WorkerThreadRuntimeCallStats* GCTracer::worker_thread_runtime_call_stats() { return heap_->isolate()->counters()->worker_thread_runtime_call_stats(); } @@ -38,6 +42,7 @@ RuntimeCallCounterId GCTracer::RCSCounterFromScope(Scope::ScopeId id) { static_cast<int>(RuntimeCallCounterId::kGC_MC_INCREMENTAL) + static_cast<int>(id)); } +#endif // defined(V8_RUNTIME_CALL_STATS) double GCTracer::MonotonicallyIncreasingTimeInMs() { if (V8_UNLIKELY(FLAG_predictable)) { @@ -61,6 +66,7 @@ GCTracer::Scope::Scope(GCTracer* tracer, ScopeId scope, ThreadKind thread_kind) start_time_ = tracer_->MonotonicallyIncreasingTimeInMs(); if (V8_LIKELY(!TracingFlags::is_runtime_stats_enabled())) return; +#ifdef V8_RUNTIME_CALL_STATS if (thread_kind_ == ThreadKind::kMain) { DCHECK_EQ(tracer_->heap_->isolate()->thread_id(), ThreadId::Current()); runtime_stats_ = @@ -72,6 +78,7 @@ GCTracer::Scope::Scope(GCTracer* tracer, ScopeId scope, ThreadKind thread_kind) runtime_stats_ = runtime_call_stats_scope_->Get(); runtime_stats_->Enter(&timer_, GCTracer::RCSCounterFromScope(scope)); } +#endif // defined(V8_RUNTIME_CALL_STATS) } GCTracer::Scope::~Scope() { @@ -80,12 +87,23 @@ GCTracer::Scope::~Scope() { if (thread_kind_ == ThreadKind::kMain) { DCHECK_EQ(tracer_->heap_->isolate()->thread_id(), ThreadId::Current()); tracer_->AddScopeSample(scope_, duration_ms); + if (scope_ == ScopeId::MC_INCREMENTAL || + scope_ == ScopeId::MC_INCREMENTAL_START || + scope_ == MC_INCREMENTAL_FINALIZE) { + auto* long_task_stats = + tracer_->heap_->isolate()->GetCurrentLongTaskStats(); + long_task_stats->gc_full_incremental_wall_clock_duration_us += + static_cast<int64_t>(duration_ms * + base::Time::kMicrosecondsPerMillisecond); + } } else { tracer_->AddScopeSampleBackground(scope_, duration_ms); } +#ifdef V8_RUNTIME_CALL_STATS if (V8_LIKELY(runtime_stats_ == nullptr)) return; runtime_stats_->Leave(&timer_); +#endif // defined(V8_RUNTIME_CALL_STATS) } const char* GCTracer::Scope::Name(ScopeId id) { @@ -290,8 +308,10 @@ void GCTracer::StartInSafepoint() { current_.start_object_size = heap_->SizeOfObjects(); current_.start_memory_size = heap_->memory_allocator()->Size(); current_.start_holes_size = CountTotalHolesSize(heap_); - current_.young_object_size = - heap_->new_space()->Size() + heap_->new_lo_space()->SizeOfObjects(); + size_t new_space_size = (heap_->new_space() ? heap_->new_space()->Size() : 0); + size_t new_lo_space_size = + (heap_->new_lo_space() ? heap_->new_lo_space()->SizeOfObjects() : 0); + current_.young_object_size = new_space_size + new_lo_space_size; } void GCTracer::ResetIncrementalMarkingCounters() { @@ -333,6 +353,9 @@ void GCTracer::Stop(GarbageCollector collector) { AddAllocation(current_.end_time); double duration = current_.end_time - current_.start_time; + int64_t duration_us = + static_cast<int64_t>(duration * base::Time::kMicrosecondsPerMillisecond); + auto* long_task_stats = heap_->isolate()->GetCurrentLongTaskStats(); switch (current_.type) { case Event::SCAVENGER: @@ -342,6 +365,7 @@ void GCTracer::Stop(GarbageCollector collector) { recorded_minor_gcs_survived_.Push( MakeBytesAndDuration(current_.survived_young_object_size, duration)); FetchBackgroundMinorGCCounters(); + long_task_stats->gc_young_wall_clock_duration_us += duration_us; break; case Event::INCREMENTAL_MARK_COMPACTOR: current_.incremental_marking_bytes = incremental_marking_bytes_; @@ -361,6 +385,7 @@ void GCTracer::Stop(GarbageCollector collector) { ResetIncrementalMarkingCounters(); combined_mark_compact_speed_cache_ = 0.0; FetchBackgroundMarkCompactCounters(); + long_task_stats->gc_full_atomic_wall_clock_duration_us += duration_us; break; case Event::MARK_COMPACTOR: DCHECK_EQ(0u, current_.incremental_marking_bytes); @@ -373,6 +398,7 @@ void GCTracer::Stop(GarbageCollector collector) { ResetIncrementalMarkingCounters(); combined_mark_compact_speed_cache_ = 0.0; FetchBackgroundMarkCompactCounters(); + long_task_stats->gc_full_atomic_wall_clock_duration_us += duration_us; break; case Event::START: UNREACHABLE(); diff --git a/deps/v8/src/heap/gc-tracer.h b/deps/v8/src/heap/gc-tracer.h index 011889ba66..3a665726ca 100644 --- a/deps/v8/src/heap/gc-tracer.h +++ b/deps/v8/src/heap/gc-tracer.h @@ -113,9 +113,11 @@ class V8_EXPORT_PRIVATE GCTracer { ScopeId scope_; ThreadKind thread_kind_; double start_time_; +#ifdef V8_RUNTIME_CALL_STATS RuntimeCallTimer timer_; RuntimeCallStats* runtime_stats_ = nullptr; base::Optional<WorkerThreadRuntimeCallStatsScope> runtime_call_stats_scope_; +#endif // defined(V8_RUNTIME_CALL_STATS) }; class Event { @@ -195,7 +197,9 @@ class V8_EXPORT_PRIVATE GCTracer { static double CombineSpeedsInBytesPerMillisecond(double default_speed, double optional_speed); +#ifdef V8_RUNTIME_CALL_STATS static RuntimeCallCounterId RCSCounterFromScope(Scope::ScopeId id); +#endif // defined(V8_RUNTIME_CALL_STATS) explicit GCTracer(Heap* heap); @@ -335,7 +339,9 @@ class V8_EXPORT_PRIVATE GCTracer { double AverageTimeToIncrementalMarkingTask() const; void RecordTimeToIncrementalMarkingTask(double time_to_task); +#ifdef V8_RUNTIME_CALL_STATS WorkerThreadRuntimeCallStats* worker_thread_runtime_call_stats(); +#endif // defined(V8_RUNTIME_CALL_STATS) CollectionEpoch CurrentEpoch(Scope::ScopeId id); diff --git a/deps/v8/src/heap/heap-inl.h b/deps/v8/src/heap/heap-inl.h index 8372dd518d..8c2649e0ef 100644 --- a/deps/v8/src/heap/heap-inl.h +++ b/deps/v8/src/heap/heap-inl.h @@ -8,22 +8,17 @@ #include <cmath> // Clients of this interface shouldn't depend on lots of heap internals. -// Do not include anything from src/heap other than src/heap/heap.h and its -// write barrier here! +// Avoid including anything but `heap.h` from `src/heap` where possible. #include "src/base/atomic-utils.h" #include "src/base/atomicops.h" #include "src/base/platform/platform.h" +#include "src/base/sanitizer/msan.h" #include "src/common/assert-scope.h" -#include "src/heap/heap-write-barrier.h" -#include "src/heap/heap.h" -#include "src/heap/third-party/heap-api.h" -#include "src/objects/feedback-vector.h" - -// TODO(gc): There is one more include to remove in order to no longer -// leak heap internals to users of this interface! #include "src/execution/isolate-data.h" #include "src/execution/isolate.h" #include "src/heap/code-object-registry.h" +#include "src/heap/heap-write-barrier.h" +#include "src/heap/heap.h" #include "src/heap/large-spaces.h" #include "src/heap/memory-allocator.h" #include "src/heap/memory-chunk.h" @@ -31,11 +26,13 @@ #include "src/heap/paged-spaces-inl.h" #include "src/heap/read-only-spaces.h" #include "src/heap/spaces-inl.h" +#include "src/heap/third-party/heap-api.h" #include "src/objects/allocation-site-inl.h" #include "src/objects/api-callbacks-inl.h" #include "src/objects/cell-inl.h" #include "src/objects/descriptor-array.h" #include "src/objects/feedback-cell-inl.h" +#include "src/objects/feedback-vector.h" #include "src/objects/literal-objects-inl.h" #include "src/objects/objects-inl.h" #include "src/objects/oddball.h" @@ -45,7 +42,6 @@ #include "src/objects/slots-inl.h" #include "src/objects/struct-inl.h" #include "src/profiler/heap-profiler.h" -#include "src/sanitizer/msan.h" #include "src/strings/string-hasher.h" #include "src/zone/zone-list-inl.h" @@ -162,19 +158,12 @@ Address* Heap::OldSpaceAllocationLimitAddress() { return old_space_->allocation_limit_address(); } -void Heap::UpdateNewSpaceAllocationCounter() { - new_space_allocation_counter_ = NewSpaceAllocationCounter(); -} - -size_t Heap::NewSpaceAllocationCounter() { - return new_space_allocation_counter_ + new_space()->AllocatedSinceLastGC(); -} - -inline const base::AddressRegion& Heap::code_range() { +inline const base::AddressRegion& Heap::code_region() { #ifdef V8_ENABLE_THIRD_PARTY_HEAP return tp_heap_->GetCodeRange(); #else - return memory_allocator_->code_range(); + static constexpr base::AddressRegion kEmptyRegion; + return code_range_ ? code_range_->reservation()->region() : kEmptyRegion; #endif } @@ -189,7 +178,8 @@ AllocationResult Heap::AllocateRaw(int size_in_bytes, AllocationType type, #ifdef V8_ENABLE_ALLOCATION_TIMEOUT if (FLAG_random_gc_interval > 0 || FLAG_gc_interval >= 0) { if (!always_allocate() && Heap::allocation_timeout_-- <= 0) { - return AllocationResult::Retry(); + AllocationSpace space = FLAG_single_generation ? OLD_SPACE : NEW_SPACE; + return AllocationResult::Retry(space); } } #endif @@ -197,6 +187,10 @@ AllocationResult Heap::AllocateRaw(int size_in_bytes, AllocationType type, IncrementObjectCounters(); #endif + if (CanSafepoint()) { + main_thread_local_heap()->Safepoint(); + } + size_t large_object_threshold = MaxRegularHeapObjectSize(type); bool large_object = static_cast<size_t>(size_in_bytes) > large_object_threshold; @@ -245,6 +239,12 @@ AllocationResult Heap::AllocateRaw(int size_in_bytes, AllocationType type, DCHECK(CanAllocateInReadOnlySpace()); DCHECK_EQ(AllocationOrigin::kRuntime, origin); allocation = read_only_space_->AllocateRaw(size_in_bytes, alignment); + } else if (AllocationType::kSharedOld == type) { + allocation = + shared_old_allocator_->AllocateRaw(size_in_bytes, alignment, origin); + } else if (AllocationType::kSharedMap == type) { + allocation = + shared_map_allocator_->AllocateRaw(size_in_bytes, alignment, origin); } else { UNREACHABLE(); } @@ -285,10 +285,9 @@ HeapObject Heap::AllocateRawWith(int size, AllocationType allocation, DCHECK(AllowHeapAllocation::IsAllowed()); DCHECK_EQ(gc_state(), NOT_IN_GC); Heap* heap = isolate()->heap(); - if (!V8_ENABLE_THIRD_PARTY_HEAP_BOOL && - allocation == AllocationType::kYoung && + if (allocation == AllocationType::kYoung && alignment == AllocationAlignment::kWordAligned && - size <= MaxRegularHeapObjectSize(allocation)) { + size <= MaxRegularHeapObjectSize(allocation) && !FLAG_single_generation) { Address* top = heap->NewSpaceAllocationTopAddress(); Address* limit = heap->NewSpaceAllocationLimitAddress(); if ((*limit - *top >= static_cast<unsigned>(size)) && @@ -383,17 +382,21 @@ void Heap::RegisterExternalString(String string) { void Heap::FinalizeExternalString(String string) { DCHECK(string.IsExternalString()); - Page* page = Page::FromHeapObject(string); ExternalString ext_string = ExternalString::cast(string); - page->DecrementExternalBackingStoreBytes( - ExternalBackingStoreType::kExternalString, - ext_string.ExternalPayloadSize()); + if (!FLAG_enable_third_party_heap) { + Page* page = Page::FromHeapObject(string); + page->DecrementExternalBackingStoreBytes( + ExternalBackingStoreType::kExternalString, + ext_string.ExternalPayloadSize()); + } ext_string.DisposeResource(isolate()); } -Address Heap::NewSpaceTop() { return new_space_->top(); } +Address Heap::NewSpaceTop() { + return new_space_ ? new_space_->top() : kNullAddress; +} bool Heap::InYoungGeneration(Object object) { DCHECK(!HasWeakHeapObjectTag(object)); @@ -458,7 +461,12 @@ bool Heap::InToPage(HeapObject heap_object) { return BasicMemoryChunk::FromHeapObject(heap_object)->IsToPage(); } -bool Heap::InOldSpace(Object object) { return old_space_->Contains(object); } +bool Heap::InOldSpace(Object object) { + if (V8_ENABLE_THIRD_PARTY_HEAP_BOOL) + return object.IsHeapObject() && + third_party_heap::Heap::InOldSpace(object.ptr()); + return old_space_->Contains(object); +} // static Heap* Heap::FromWritableHeapObject(HeapObject obj) { @@ -502,7 +510,7 @@ AllocationMemento Heap::FindAllocationMemento(Map map, HeapObject object) { // below (memento_address == top) ensures that this is safe. Mark the word as // initialized to silence MemorySanitizer warnings. MSAN_MEMORY_IS_INITIALIZED(candidate_map_slot.address(), kTaggedSize); - if (!candidate_map_slot.contains_value( + if (!candidate_map_slot.contains_map_value( ReadOnlyRoots(this).allocation_memento_map().ptr())) { return AllocationMemento(); } @@ -577,18 +585,23 @@ void Heap::UpdateAllocationSite(Map map, HeapObject object, bool Heap::IsPendingAllocation(HeapObject object) { // TODO(ulan): Optimize this function to perform 3 loads at most. Address addr = object.address(); - Address top = new_space_->original_top_acquire(); - Address limit = new_space_->original_limit_relaxed(); - if (top <= addr && addr < limit) return true; + Address top, limit; + + if (new_space_) { + top = new_space_->original_top_acquire(); + limit = new_space_->original_limit_relaxed(); + if (top && top <= addr && addr < limit) return true; + } + PagedSpaceIterator spaces(this); for (PagedSpace* space = spaces.Next(); space != nullptr; space = spaces.Next()) { top = space->original_top_acquire(); limit = space->original_limit_relaxed(); - if (top <= addr && addr < limit) return true; + if (top && top <= addr && addr < limit) return true; } if (addr == lo_space_->pending_object()) return true; - if (addr == new_lo_space_->pending_object()) return true; + if (new_lo_space_ && addr == new_lo_space_->pending_object()) return true; if (addr == code_lo_space_->pending_object()) return true; return false; } @@ -644,8 +657,8 @@ int Heap::NextDebuggingId() { } int Heap::GetNextTemplateSerialNumber() { - int next_serial_number = next_template_serial_number().value() + 1; - set_next_template_serial_number(Smi::FromInt(next_serial_number)); + int next_serial_number = next_template_serial_number().value(); + set_next_template_serial_number(Smi::FromInt(next_serial_number + 1)); return next_serial_number; } diff --git a/deps/v8/src/heap/heap-write-barrier.cc b/deps/v8/src/heap/heap-write-barrier.cc index 63949de243..0030615bab 100644 --- a/deps/v8/src/heap/heap-write-barrier.cc +++ b/deps/v8/src/heap/heap-write-barrier.cc @@ -68,7 +68,16 @@ void WriteBarrier::MarkingSlow(Heap* heap, DescriptorArray descriptor_array, int WriteBarrier::MarkingFromCode(Address raw_host, Address raw_slot) { HeapObject host = HeapObject::cast(Object(raw_host)); MaybeObjectSlot slot(raw_slot); - WriteBarrier::Marking(host, slot, *slot); + Address value = (*slot).ptr(); +#ifdef V8_MAP_PACKING + if (slot.address() == host.address()) { + // Clear metadata bits and fix object tag. + value = (value & ~Internals::kMapWordMetadataMask & + ~Internals::kMapWordXorMask) | + (uint64_t)kHeapObjectTag; + } +#endif + WriteBarrier::Marking(host, slot, MaybeObject(value)); // Called by RecordWriteCodeStubAssembler, which doesnt accept void type return 0; } diff --git a/deps/v8/src/heap/heap.cc b/deps/v8/src/heap/heap.cc index d117d6c50e..9da67b7534 100644 --- a/deps/v8/src/heap/heap.cc +++ b/deps/v8/src/heap/heap.cc @@ -14,6 +14,7 @@ #include "src/api/api-inl.h" #include "src/base/bits.h" #include "src/base/flags.h" +#include "src/base/logging.h" #include "src/base/once.h" #include "src/base/platform/mutex.h" #include "src/base/utils/random-number-generator.h" @@ -35,6 +36,7 @@ #include "src/heap/barrier.h" #include "src/heap/base/stack.h" #include "src/heap/code-object-registry.h" +#include "src/heap/code-range.h" #include "src/heap/code-stats.h" #include "src/heap/collection-barrier.h" #include "src/heap/combined-heap.h" @@ -323,7 +325,9 @@ size_t Heap::SemiSpaceSizeFromYoungGenerationSize( size_t Heap::Capacity() { if (!HasBeenSetUp()) return 0; - return new_space_->Capacity() + OldGenerationCapacity(); + if (FLAG_enable_third_party_heap) return tp_heap_->Capacity(); + + return NewSpaceCapacity() + OldGenerationCapacity(); } size_t Heap::OldGenerationCapacity() { @@ -358,7 +362,10 @@ size_t Heap::CommittedMemoryOfUnmapper() { size_t Heap::CommittedMemory() { if (!HasBeenSetUp()) return 0; - return new_space_->CommittedMemory() + new_lo_space_->Size() + + size_t new_space_committed = new_space_ ? new_space_->CommittedMemory() : 0; + size_t new_lo_space_committed = new_lo_space_ ? new_lo_space_->Size() : 0; + + return new_space_committed + new_lo_space_committed + CommittedOldGenerationMemory(); } @@ -421,14 +428,17 @@ bool Heap::CanExpandOldGenerationBackground(LocalHeap* local_heap, } bool Heap::CanPromoteYoungAndExpandOldGeneration(size_t size) { + size_t new_space_capacity = NewSpaceCapacity(); + size_t new_lo_space_capacity = new_lo_space_ ? new_lo_space_->Size() : 0; + // Over-estimate the new space size using capacity to allow some slack. - return CanExpandOldGeneration(size + new_space_->Capacity() + - new_lo_space_->Size()); + return CanExpandOldGeneration(size + new_space_capacity + + new_lo_space_capacity); } bool Heap::HasBeenSetUp() const { - // We will always have a new space when the heap is set up. - return new_space_ != nullptr; + // We will always have an old space when the heap is set up. + return old_space_ != nullptr; } GarbageCollector Heap::SelectGarbageCollector(AllocationSpace space, @@ -440,7 +450,7 @@ GarbageCollector Heap::SelectGarbageCollector(AllocationSpace space, return MARK_COMPACTOR; } - if (FLAG_gc_global || ShouldStressCompaction()) { + if (FLAG_gc_global || ShouldStressCompaction() || FLAG_single_generation) { *reason = "GC in old space forced by flags"; return MARK_COMPACTOR; } @@ -485,7 +495,7 @@ void Heap::PrintShortHeapStatistics() { "New space, used: %6zu KB" ", available: %6zu KB" ", committed: %6zu KB\n", - new_space_->Size() / KB, new_space_->Available() / KB, + NewSpaceSize() / KB, new_space_->Available() / KB, new_space_->CommittedMemory() / KB); PrintIsolate(isolate_, "New large object space, used: %6zu KB" @@ -788,6 +798,58 @@ void Heap::PrintRetainingPath(HeapObject target, RetainingPathOption option) { PrintF("-------------------------------------------------\n"); } +void UpdateRetainersMapAfterScavenge( + std::unordered_map<HeapObject, HeapObject, Object::Hasher>* map) { + std::unordered_map<HeapObject, HeapObject, Object::Hasher> updated_map; + + for (auto pair : *map) { + HeapObject object = pair.first; + HeapObject retainer = pair.second; + + if (Heap::InFromPage(object)) { + MapWord map_word = object.map_word(kRelaxedLoad); + if (!map_word.IsForwardingAddress()) continue; + object = map_word.ToForwardingAddress(); + } + + if (Heap::InFromPage(retainer)) { + MapWord map_word = retainer.map_word(kRelaxedLoad); + if (!map_word.IsForwardingAddress()) continue; + retainer = map_word.ToForwardingAddress(); + } + + updated_map[object] = retainer; + } + + *map = std::move(updated_map); +} + +void Heap::UpdateRetainersAfterScavenge() { + if (!incremental_marking()->IsMarking()) return; + + // This isn't supported for Minor MC. + DCHECK(!FLAG_minor_mc); + + UpdateRetainersMapAfterScavenge(&retainer_); + UpdateRetainersMapAfterScavenge(&ephemeron_retainer_); + + std::unordered_map<HeapObject, Root, Object::Hasher> updated_retaining_root; + + for (auto pair : retaining_root_) { + HeapObject object = pair.first; + + if (Heap::InFromPage(object)) { + MapWord map_word = object.map_word(kRelaxedLoad); + if (!map_word.IsForwardingAddress()) continue; + object = map_word.ToForwardingAddress(); + } + + updated_retaining_root[object] = pair.second; + } + + retaining_root_ = std::move(updated_retaining_root); +} + void Heap::AddRetainer(HeapObject retainer, HeapObject object) { if (retainer_.count(object)) return; retainer_[object] = retainer; @@ -850,7 +912,7 @@ void Heap::GarbageCollectionPrologue() { if (FLAG_gc_verbose) Print(); #endif // DEBUG - if (new_space_->IsAtMaximumCapacity()) { + if (new_space_ && new_space_->IsAtMaximumCapacity()) { maximum_size_scavenges_++; } else { maximum_size_scavenges_ = 0; @@ -867,9 +929,20 @@ void Heap::GarbageCollectionPrologueInSafepoint() { TRACE_GC(tracer(), GCTracer::Scope::HEAP_PROLOGUE_SAFEPOINT); gc_count_++; - UpdateNewSpaceAllocationCounter(); - CheckNewSpaceExpansionCriteria(); - new_space_->ResetParkedAllocationBuffers(); + if (new_space_) { + UpdateNewSpaceAllocationCounter(); + CheckNewSpaceExpansionCriteria(); + new_space_->ResetParkedAllocationBuffers(); + } +} + +void Heap::UpdateNewSpaceAllocationCounter() { + new_space_allocation_counter_ = NewSpaceAllocationCounter(); +} + +size_t Heap::NewSpaceAllocationCounter() { + return new_space_allocation_counter_ + + (new_space_ ? new_space()->AllocatedSinceLastGC() : 0); } size_t Heap::SizeOfObjects() { @@ -894,7 +967,7 @@ void Heap::MergeAllocationSitePretenuringFeedback( AllocationSite site; for (auto& site_and_count : local_pretenuring_feedback) { site = site_and_count.first; - MapWord map_word = site_and_count.first.map_word(); + MapWord map_word = site_and_count.first.map_word(kRelaxedLoad); if (map_word.IsForwardingAddress()) { site = AllocationSite::cast(map_word.ToForwardingAddress()); } @@ -944,14 +1017,15 @@ void Heap::RemoveAllocationObserversFromAllSpaces( } void Heap::PublishPendingAllocations() { - new_space_->MarkLabStartInitialized(); + if (FLAG_enable_third_party_heap) return; + if (new_space_) new_space_->MarkLabStartInitialized(); PagedSpaceIterator spaces(this); for (PagedSpace* space = spaces.Next(); space != nullptr; space = spaces.Next()) { space->MoveOriginalTopForward(); } lo_space_->ResetPendingObject(); - new_lo_space_->ResetPendingObject(); + if (new_lo_space_) new_lo_space_->ResetPendingObject(); code_lo_space_->ResetPendingObject(); } @@ -981,6 +1055,12 @@ inline bool MakePretenureDecision( return false; } +// Clear feedback calculation fields until the next gc. +inline void ResetPretenuringFeedback(AllocationSite site) { + site.set_memento_found_count(0); + site.set_memento_create_count(0); +} + inline bool DigestPretenuringFeedback(Isolate* isolate, AllocationSite site, bool maximum_size_scavenge) { bool deopt = false; @@ -1008,11 +1088,34 @@ inline bool DigestPretenuringFeedback(Isolate* isolate, AllocationSite site, site.PretenureDecisionName(site.pretenure_decision())); } - // Clear feedback calculation fields until the next gc. - site.set_memento_found_count(0); - site.set_memento_create_count(0); + ResetPretenuringFeedback(site); return deopt; } + +bool PretenureAllocationSiteManually(Isolate* isolate, AllocationSite site) { + AllocationSite::PretenureDecision current_decision = + site.pretenure_decision(); + bool deopt = true; + if (current_decision == AllocationSite::kUndecided || + current_decision == AllocationSite::kMaybeTenure) { + site.set_deopt_dependent_code(true); + site.set_pretenure_decision(AllocationSite::kTenure); + } else { + deopt = false; + } + if (FLAG_trace_pretenuring_statistics) { + PrintIsolate(isolate, + "pretenuring manually requested: AllocationSite(%p): " + "%s => %s\n", + reinterpret_cast<void*>(site.ptr()), + site.PretenureDecisionName(current_decision), + site.PretenureDecisionName(site.pretenure_decision())); + } + + ResetPretenuringFeedback(site); + return deopt; +} + } // namespace void Heap::RemoveAllocationSitePretenuringFeedback(AllocationSite site) { @@ -1020,7 +1123,8 @@ void Heap::RemoveAllocationSitePretenuringFeedback(AllocationSite site) { } bool Heap::DeoptMaybeTenuredAllocationSites() { - return new_space_->IsAtMaximumCapacity() && maximum_size_scavenges_ == 0; + return new_space_ && new_space_->IsAtMaximumCapacity() && + maximum_size_scavenges_ == 0; } void Heap::ProcessPretenuringFeedback() { @@ -1060,7 +1164,18 @@ void Heap::ProcessPretenuringFeedback() { } } - // Step 2: Deopt maybe tenured allocation sites if necessary. + // Step 2: Pretenure allocation sites for manual requests. + if (allocation_sites_to_pretenure_) { + while (!allocation_sites_to_pretenure_->empty()) { + auto site = allocation_sites_to_pretenure_->Pop(); + if (PretenureAllocationSiteManually(isolate_, site)) { + trigger_deoptimization = true; + } + } + allocation_sites_to_pretenure_.reset(); + } + + // Step 3: Deopt maybe tenured allocation sites if necessary. bool deopt_maybe_tenured = DeoptMaybeTenuredAllocationSites(); if (deopt_maybe_tenured) { ForeachAllocationSite( @@ -1096,6 +1211,14 @@ void Heap::ProcessPretenuringFeedback() { } } +void Heap::PretenureAllocationSiteOnNextCollection(AllocationSite site) { + if (!allocation_sites_to_pretenure_) { + allocation_sites_to_pretenure_.reset( + new GlobalHandleVector<AllocationSite>(this)); + } + allocation_sites_to_pretenure_->Push(site); +} + void Heap::InvalidateCodeDeoptimizationData(Code code) { CodePageMemoryModificationScope modification_scope(code); code.set_deoptimization_data(ReadOnlyRoots(this).empty_fixed_array()); @@ -1145,7 +1268,10 @@ void Heap::GarbageCollectionEpilogueInSafepoint(GarbageCollector collector) { UPDATE_COUNTERS_FOR_SPACE(space) \ UPDATE_FRAGMENTATION_FOR_SPACE(space) - UPDATE_COUNTERS_FOR_SPACE(new_space) + if (new_space()) { + UPDATE_COUNTERS_FOR_SPACE(new_space) + } + UPDATE_COUNTERS_AND_FRAGMENTATION_FOR_SPACE(old_space) UPDATE_COUNTERS_AND_FRAGMENTATION_FOR_SPACE(code_space) UPDATE_COUNTERS_AND_FRAGMENTATION_FOR_SPACE(map_space) @@ -1175,16 +1301,14 @@ void Heap::GarbageCollectionEpilogueInSafepoint(GarbageCollector collector) { ZapFromSpace(); } - { + if (new_space()) { TRACE_GC(tracer(), GCTracer::Scope::HEAP_EPILOGUE_REDUCE_NEW_SPACE); ReduceNewSpaceSize(); } // Set main thread state back to Running from CollectionRequested. - LocalHeap* main_thread_local_heap = isolate()->main_thread_local_heap(); - LocalHeap::ThreadState old_state = - main_thread_local_heap->state_.exchange(LocalHeap::kRunning); + main_thread_local_heap()->state_.exchange(LocalHeap::kRunning); CHECK(old_state == LocalHeap::kRunning || old_state == LocalHeap::kCollectionRequested); @@ -1404,8 +1528,7 @@ void Heap::CollectAllAvailableGarbage(GarbageCollectionReason gc_reason) { if (gc_reason == GarbageCollectionReason::kLastResort) { InvokeNearHeapLimitCallback(); } - RuntimeCallTimerScope runtime_timer( - isolate(), RuntimeCallCounterId::kGC_Custom_AllAvailableGarbage); + RCS_SCOPE(isolate(), RuntimeCallCounterId::kGC_Custom_AllAvailableGarbage); // The optimizing compiler may be unnecessarily holding on to memory. isolate()->AbortConcurrentOptimization(BlockingBehavior::kDontBlock); @@ -1512,6 +1635,7 @@ void Heap::EnsureFillerObjectAtTop() { // evacuation of a non-full new space (or if we are on the last page) there // may be uninitialized memory behind top. We fill the remainder of the page // with a filler. + if (!new_space_) return; Address to_top = new_space_->top(); Page* page = Page::FromAddress(to_top - kTaggedSize); if (page->Contains(to_top)) { @@ -1593,6 +1717,16 @@ bool Heap::CollectGarbage(AllocationSpace space, if (collector == MARK_COMPACTOR) { committed_memory_before = CommittedOldGenerationMemory(); + if (cpp_heap()) { + // CppHeap needs a stack marker at the top of all entry points to allow + // deterministic passes over the stack. E.g., a verifier that should only + // find a subset of references of the marker. + // + // TODO(chromium:1056170): Consider adding a component that keeps track + // of relevant GC stack regions where interesting pointers can be found. + static_cast<v8::internal::CppHeap*>(cpp_heap()) + ->SetStackEndOfCurrentGC(v8::base::Stack::GetCurrentStackPosition()); + } } { @@ -1800,7 +1934,7 @@ void Heap::StartIncrementalMarkingIfAllocationLimitIsReached( } else if (reached_limit == IncrementalMarkingLimit::kHardLimit) { StartIncrementalMarking( gc_flags, - OldGenerationSpaceAvailable() <= new_space_->Capacity() + OldGenerationSpaceAvailable() <= NewSpaceCapacity() ? GarbageCollectionReason::kAllocationLimit : GarbageCollectionReason::kGlobalAllocationLimit, gc_callback_flags); @@ -1816,7 +1950,7 @@ void Heap::StartIncrementalMarkingIfAllocationLimitIsReachedBackground() { const size_t old_generation_space_available = OldGenerationSpaceAvailable(); - if (old_generation_space_available < new_space_->Capacity()) { + if (old_generation_space_available < NewSpaceCapacity()) { incremental_marking()->incremental_marking_job()->ScheduleTask(this); } } @@ -1943,6 +2077,7 @@ static void VerifyStringTable(Isolate* isolate) { #endif // VERIFY_HEAP void Heap::EnsureFromSpaceIsCommitted() { + if (!new_space_) return; if (new_space_->CommitFromSpaceIfNeeded()) return; // Committing memory to from space failed. @@ -2024,6 +2159,9 @@ size_t Heap::PerformGarbageCollection( SafepointScope safepoint_scope(this); + // Shared isolates cannot have any clients when running GC at the moment. + DCHECK_IMPLIES(IsShared(), !isolate()->HasClientIsolates()); + collection_barrier_->StopTimeToCollectionTimer(); #ifdef VERIFY_HEAP @@ -2039,7 +2177,7 @@ size_t Heap::PerformGarbageCollection( EnsureFromSpaceIsCommitted(); size_t start_young_generation_size = - Heap::new_space()->Size() + new_lo_space()->SizeOfObjects(); + NewSpaceSize() + (new_lo_space() ? new_lo_space()->SizeOfObjects() : 0); switch (collector) { case MARK_COMPACTOR: @@ -2173,7 +2311,7 @@ void Heap::RecomputeLimits(GarbageCollector collector) { } size_t old_gen_size = OldGenerationSizeOfObjects(); - size_t new_space_capacity = new_space()->Capacity(); + size_t new_space_capacity = NewSpaceCapacity(); HeapGrowingMode mode = CurrentHeapGrowingMode(); if (collector == MARK_COMPACTOR) { @@ -2219,8 +2357,7 @@ void Heap::RecomputeLimits(GarbageCollector collector) { } void Heap::CallGCPrologueCallbacks(GCType gc_type, GCCallbackFlags flags) { - RuntimeCallTimerScope runtime_timer( - isolate(), RuntimeCallCounterId::kGCPrologueCallback); + RCS_SCOPE(isolate(), RuntimeCallCounterId::kGCPrologueCallback); for (const GCCallbackTuple& info : gc_prologue_callbacks_) { if (gc_type & info.gc_type) { v8::Isolate* isolate = reinterpret_cast<v8::Isolate*>(this->isolate()); @@ -2230,8 +2367,7 @@ void Heap::CallGCPrologueCallbacks(GCType gc_type, GCCallbackFlags flags) { } void Heap::CallGCEpilogueCallbacks(GCType gc_type, GCCallbackFlags flags) { - RuntimeCallTimerScope runtime_timer( - isolate(), RuntimeCallCounterId::kGCEpilogueCallback); + RCS_SCOPE(isolate(), RuntimeCallCounterId::kGCEpilogueCallback); for (const GCCallbackTuple& info : gc_epilogue_callbacks_) { if (gc_type & info.gc_type) { v8::Isolate* isolate = reinterpret_cast<v8::Isolate*>(this->isolate()); @@ -2280,7 +2416,7 @@ void Heap::MarkCompact() { void Heap::MinorMarkCompact() { #ifdef ENABLE_MINOR_MC - DCHECK(FLAG_minor_mc); + DCHECK(FLAG_minor_mc && !FLAG_single_generation); PauseAllocationObserversScope pause_observers(this); SetGCState(MINOR_MARK_COMPACT); @@ -2387,6 +2523,8 @@ void Heap::EvacuateYoungGeneration() { } void Heap::Scavenge() { + DCHECK(!FLAG_single_generation); + if (fast_promotion_mode_ && CanPromoteYoungAndExpandOldGeneration(0)) { tracer()->NotifyYoungGenerationHandling( YoungGenerationHandling::kFastPromotionDuringScavenge); @@ -2435,12 +2573,15 @@ void Heap::Scavenge() { } void Heap::ComputeFastPromotionMode() { + if (!new_space_) return; + const size_t survived_in_new_space = - survived_last_scavenge_ * 100 / new_space_->Capacity(); + survived_last_scavenge_ * 100 / NewSpaceCapacity(); fast_promotion_mode_ = !FLAG_optimize_for_size && FLAG_fast_promotion_new_space && !ShouldReduceMemory() && new_space_->IsAtMaximumCapacity() && survived_in_new_space >= kMinPromotedPercentForFastPromotionMode; + if (FLAG_trace_gc_verbose && !FLAG_trace_gc_ignore_scavenger) { PrintIsolate(isolate(), "Fast promotion mode: %s survival rate: %zu%%\n", fast_promotion_mode_ ? "true" : "false", @@ -2488,6 +2629,8 @@ bool Heap::ExternalStringTable::Contains(String string) { void Heap::UpdateExternalString(String string, size_t old_payload, size_t new_payload) { DCHECK(string.IsExternalString()); + if (FLAG_enable_third_party_heap) return; + Page* page = Page::FromHeapObject(string); if (old_payload > new_payload) { @@ -2502,7 +2645,7 @@ void Heap::UpdateExternalString(String string, size_t old_payload, String Heap::UpdateYoungReferenceInExternalStringTableEntry(Heap* heap, FullObjectSlot p) { HeapObject obj = HeapObject::cast(*p); - MapWord first_word = obj.map_word(); + MapWord first_word = obj.map_word(kRelaxedLoad); String new_string; @@ -2863,7 +3006,7 @@ HeapObject Heap::AlignWithFiller(ReadOnlyRoots roots, HeapObject object, void* Heap::AllocateExternalBackingStore( const std::function<void*(size_t)>& allocate, size_t byte_length) { - if (!always_allocate()) { + if (!always_allocate() && new_space()) { size_t new_space_backing_store_bytes = new_space()->ExternalBackingStoreBytes(); if (new_space_backing_store_bytes >= 2 * kMaxSemiSpaceSize && @@ -2874,8 +3017,6 @@ void* Heap::AllocateExternalBackingStore( GarbageCollectionReason::kExternalMemoryPressure); } } - // TODO(ulan): Perform GCs proactively based on the byte_length and - // the current external backing store counters. void* result = allocate(byte_length); if (result) return result; if (!always_allocate()) { @@ -2948,7 +3089,7 @@ HeapObject CreateFillerObjectAtImpl(ReadOnlyRoots roots, Address addr, int size, DCHECK_GT(size, 2 * kTaggedSize); filler.set_map_after_allocation(roots.unchecked_free_space_map(), SKIP_WRITE_BARRIER); - FreeSpace::cast(filler).relaxed_write_size(size); + FreeSpace::cast(filler).set_size(size, kRelaxedStore); if (clear_memory_mode == ClearFreedMemoryMode::kClearFreedMemory) { MemsetTagged(ObjectSlot(addr) + 2, Object(kClearedFreeMemoryValue), (size / kTaggedSize) - 2); @@ -2957,7 +3098,7 @@ HeapObject CreateFillerObjectAtImpl(ReadOnlyRoots roots, Address addr, int size, // At this point, we may be deserializing the heap from a snapshot, and // none of the maps have been created yet and are nullptr. - DCHECK((filler.map_slot().contains_value(kNullAddress) && + DCHECK((filler.map_slot().contains_map_value(kNullAddress) && !Heap::FromWritableHeapObject(filler)->deserialization_complete()) || filler.map().IsMap()); @@ -2969,8 +3110,7 @@ void VerifyNoNeedToClearSlots(Address start, Address end) { BasicMemoryChunk* basic_chunk = BasicMemoryChunk::FromAddress(start); if (basic_chunk->InReadOnlySpace()) return; MemoryChunk* chunk = static_cast<MemoryChunk*>(basic_chunk); - // TODO(ulan): Support verification of large pages. - if (chunk->InYoungGeneration() || chunk->IsLargePage()) return; + if (chunk->InYoungGeneration()) return; BaseSpace* space = chunk->owner(); space->heap()->VerifySlotRangeHasNoRecordedSlots(start, end); } @@ -3046,6 +3186,9 @@ bool Heap::IsImmovable(HeapObject object) { } bool Heap::IsLargeObject(HeapObject object) { + if (V8_ENABLE_THIRD_PARTY_HEAP_BOOL) + return third_party_heap::Heap::InLargeObjectSpace(object.address()) || + third_party_heap::Heap::InSpace(object.address(), CODE_LO_SPACE); return BasicMemoryChunk::FromHeapObject(object)->IsLargePage(); } @@ -3109,6 +3252,9 @@ void Heap::OnMoveEvent(HeapObject target, HeapObject source, if (target.IsSharedFunctionInfo()) { LOG_CODE_EVENT(isolate_, SharedFunctionInfoMoveEvent(source.address(), target.address())); + } else if (target.IsNativeContext()) { + PROFILE(isolate_, + NativeContextMoveEvent(source.address(), target.address())); } if (FLAG_verify_predictable) { @@ -3184,7 +3330,8 @@ FixedArrayBase Heap::LeftTrimFixedArray(FixedArrayBase object, // Initialize header of the trimmed array. Since left trimming is only // performed on pages which are not concurrently swept creating a filler // object does not require synchronization. - RELAXED_WRITE_FIELD(object, bytes_to_trim, map); + RELAXED_WRITE_FIELD(object, bytes_to_trim, + Object(MapWord::FromMap(map).ptr())); RELAXED_WRITE_FIELD(object, bytes_to_trim + kTaggedSize, Smi::FromInt(len - elements_to_trim)); @@ -3298,7 +3445,7 @@ void Heap::CreateFillerForArray(T object, int elements_to_trim, // Initialize header of the trimmed array. We are storing the new length // using release store after creating a filler for the left-over space to // avoid races with the sweeper thread. - object.synchronized_set_length(object.length() - elements_to_trim); + object.set_length(object.length() - elements_to_trim, kReleaseStore); // Notify the heap object allocation tracker of change in object layout. The // array may not be moved during GC, and size has to be adjusted nevertheless. @@ -3451,8 +3598,6 @@ void Heap::ActivateMemoryReducerIfNeeded() { } void Heap::ReduceNewSpaceSize() { - // TODO(ulan): Unify this constant with the similar constant in - // GCIdleTimeHandler once the change is merged to 4.5. static const size_t kLowAllocationThroughput = 1000; const double allocation_throughput = tracer()->CurrentAllocationThroughputInBytesPerMillisecond(); @@ -3468,6 +3613,12 @@ void Heap::ReduceNewSpaceSize() { } } +size_t Heap::NewSpaceSize() { return new_space() ? new_space()->Size() : 0; } + +size_t Heap::NewSpaceCapacity() { + return new_space() ? new_space()->Capacity() : 0; +} + void Heap::FinalizeIncrementalMarkingIfComplete( GarbageCollectionReason gc_reason) { if (incremental_marking()->IsMarking() && @@ -3582,6 +3733,8 @@ class SlotCollectingVisitor final : public ObjectVisitor { UNREACHABLE(); } + void VisitMapPointer(HeapObject object) override {} // do nothing by default + int number_of_slots() { return static_cast<int>(slots_.size()); } MaybeObjectSlot slot(int i) { return slots_[i]; } @@ -3613,13 +3766,13 @@ void Heap::VerifyObjectLayoutChange(HeapObject object, Map new_map) { // Check that the set of slots before and after the transition match. SlotCollectingVisitor old_visitor; object.IterateFast(&old_visitor); - MapWord old_map_word = object.map_word(); + MapWord old_map_word = object.map_word(kRelaxedLoad); // Temporarily set the new map to iterate new slots. - object.set_map_word(MapWord::FromMap(new_map)); + object.set_map_word(MapWord::FromMap(new_map), kRelaxedStore); SlotCollectingVisitor new_visitor; object.IterateFast(&new_visitor); // Restore the old map. - object.set_map_word(old_map_word); + object.set_map_word(old_map_word, kRelaxedStore); DCHECK_EQ(new_visitor.number_of_slots(), old_visitor.number_of_slots()); for (int i = 0; i < new_visitor.number_of_slots(); i++) { DCHECK_EQ(new_visitor.slot(i), old_visitor.slot(i)); @@ -3692,12 +3845,15 @@ void Heap::IdleNotificationEpilogue(GCIdleTimeAction action, } } -double Heap::MonotonicallyIncreasingTimeInMs() { +double Heap::MonotonicallyIncreasingTimeInMs() const { return V8::GetCurrentPlatform()->MonotonicallyIncreasingTime() * static_cast<double>(base::Time::kMillisecondsPerSecond); } -void Heap::VerifyNewSpaceTop() { new_space()->VerifyTop(); } +void Heap::VerifyNewSpaceTop() { + if (!new_space()) return; + new_space()->VerifyTop(); +} bool Heap::IdleNotification(int idle_time_in_ms) { return IdleNotification( @@ -3866,6 +4022,11 @@ void Heap::AppendArrayBufferExtension(JSArrayBuffer object, array_buffer_sweeper_->Append(object, extension); } +void Heap::DetachArrayBufferExtension(JSArrayBuffer object, + ArrayBufferExtension* extension) { + return array_buffer_sweeper_->Detach(object, extension); +} + void Heap::AutomaticallyRestoreInitialHeapLimit(double threshold_percent) { initial_max_old_generation_size_threshold_ = initial_max_old_generation_size_ * threshold_percent; @@ -4009,13 +4170,23 @@ bool Heap::Contains(HeapObject value) const { return false; } return HasBeenSetUp() && - (new_space_->ToSpaceContains(value) || old_space_->Contains(value) || - code_space_->Contains(value) || map_space_->Contains(value) || - lo_space_->Contains(value) || code_lo_space_->Contains(value) || - new_lo_space_->Contains(value)); + ((new_space_ && new_space_->ToSpaceContains(value)) || + old_space_->Contains(value) || code_space_->Contains(value) || + map_space_->Contains(value) || lo_space_->Contains(value) || + code_lo_space_->Contains(value) || + (new_lo_space_ && new_lo_space_->Contains(value))); +} + +bool Heap::SharedHeapContains(HeapObject value) const { + if (shared_old_space_) + return shared_old_space_->Contains(value) || + shared_map_space_->Contains(value); + return false; } bool Heap::InSpace(HeapObject value, AllocationSpace space) const { + if (V8_ENABLE_THIRD_PARTY_HEAP_BOOL) + return third_party_heap::Heap::InSpace(value.address(), space); if (memory_allocator()->IsOutsideAllocatedSpace(value.address())) { return false; } @@ -4042,6 +4213,8 @@ bool Heap::InSpace(HeapObject value, AllocationSpace space) const { UNREACHABLE(); } +bool Heap::IsShared() { return isolate()->is_shared(); } + bool Heap::InSpaceSlow(Address addr, AllocationSpace space) const { if (memory_allocator()->IsOutsideAllocatedSpace(addr)) { return false; @@ -4116,7 +4289,7 @@ void Heap::Verify() { VerifySmisVisitor smis_visitor; IterateSmiRoots(&smis_visitor); - new_space_->Verify(isolate()); + if (new_space_) new_space_->Verify(isolate()); old_space_->Verify(isolate(), &visitor); map_space_->Verify(isolate(), &visitor); @@ -4126,7 +4299,7 @@ void Heap::Verify() { lo_space_->Verify(isolate()); code_lo_space_->Verify(isolate()); - new_lo_space_->Verify(isolate()); + if (new_lo_space_) new_lo_space_->Verify(isolate()); VerifyStringTable(isolate()); } @@ -4147,7 +4320,7 @@ class SlotVerifyingVisitor : public ObjectVisitor { ObjectSlot end) override { #ifdef DEBUG for (ObjectSlot slot = start; slot < end; ++slot) { - DCHECK(!HasWeakHeapObjectTag(*slot)); + DCHECK(!MapWord::IsPacked((*slot).ptr()) || !HasWeakHeapObjectTag(*slot)); } #endif // DEBUG VisitPointers(host, MaybeObjectSlot(start), MaybeObjectSlot(end)); @@ -4315,7 +4488,7 @@ void Heap::VerifyCountersBeforeConcurrentSweeping() { #endif void Heap::ZapFromSpace() { - if (!new_space_->IsFromSpaceCommitted()) return; + if (!new_space_ || !new_space_->IsFromSpaceCommitted()) return; for (Page* page : PageRange(new_space_->from_space().first_page(), nullptr)) { memory_allocator()->ZapBlock(page->area_start(), page->HighWaterMark() - page->area_start(), @@ -4397,18 +4570,20 @@ class FixStaleLeftTrimmedHandlesVisitor : public RootVisitor { void VisitRootPointers(Root root, const char* description, FullObjectSlot start, FullObjectSlot end) override { - for (FullObjectSlot p = start; p < end; ++p) FixHandle(p); + for (FullObjectSlot p = start; p < end; ++p) { + FixHandle(p); + } } private: inline void FixHandle(FullObjectSlot p) { if (!(*p).IsHeapObject()) return; HeapObject current = HeapObject::cast(*p); - if (!current.map_word().IsForwardingAddress() && + if (!current.map_word(kRelaxedLoad).IsForwardingAddress() && current.IsFreeSpaceOrFiller()) { #ifdef DEBUG // We need to find a FixedArrayBase map after walking the fillers. - while (!current.map_word().IsForwardingAddress() && + while (!current.map_word(kRelaxedLoad).IsForwardingAddress() && current.IsFreeSpaceOrFiller()) { Address next = current.ptr(); if (current.map() == ReadOnlyRoots(heap_).one_pointer_filler_map()) { @@ -4421,7 +4596,7 @@ class FixStaleLeftTrimmedHandlesVisitor : public RootVisitor { } current = HeapObject::cast(Object(next)); } - DCHECK(current.map_word().IsForwardingAddress() || + DCHECK(current.map_word(kRelaxedLoad).IsForwardingAddress() || current.IsFixedArrayBase()); #endif // DEBUG p.store(Smi::zero()); @@ -4502,8 +4677,10 @@ void Heap::IterateRoots(RootVisitor* v, base::EnumSet<SkipRoot> options) { // Iterate over local handles in handle scopes. FixStaleLeftTrimmedHandlesVisitor left_trim_visitor(this); #ifndef V8_ENABLE_CONSERVATIVE_STACK_SCANNING - isolate_->handle_scope_implementer()->Iterate(&left_trim_visitor); - isolate_->handle_scope_implementer()->Iterate(v); + if (!options.contains(SkipRoot::kMainThreadHandles)) { + isolate_->handle_scope_implementer()->Iterate(&left_trim_visitor); + isolate_->handle_scope_implementer()->Iterate(v); + } #endif safepoint_->Iterate(&left_trim_visitor); @@ -4772,8 +4949,8 @@ void Heap::RecordStats(HeapStats* stats, bool take_snapshot) { *stats->end_marker = HeapStats::kEndMarker; *stats->ro_space_size = read_only_space_->Size(); *stats->ro_space_capacity = read_only_space_->Capacity(); - *stats->new_space_size = new_space_->Size(); - *stats->new_space_capacity = new_space_->Capacity(); + *stats->new_space_size = NewSpaceSize(); + *stats->new_space_capacity = NewSpaceCapacity(); *stats->old_space_size = old_space_->SizeOfObjects(); *stats->old_space_capacity = old_space_->Capacity(); *stats->code_space_size = code_space_->SizeOfObjects(); @@ -5036,9 +5213,9 @@ Heap::IncrementalMarkingLimit Heap::IncrementalMarkingLimitReached() { const base::Optional<size_t> global_memory_available = GlobalMemoryAvailable(); - if (old_generation_space_available > new_space_->Capacity() && + if (old_generation_space_available > NewSpaceCapacity() && (!global_memory_available || - global_memory_available > new_space_->Capacity())) { + global_memory_available > NewSpaceCapacity())) { return IncrementalMarkingLimit::kNoLimit; } if (ShouldOptimizeForMemoryUsage()) { @@ -5065,8 +5242,10 @@ void Heap::EnableInlineAllocation() { inline_allocation_disabled_ = false; // Update inline allocation limit for new space. - new_space()->AdvanceAllocationObservers(); - new_space()->UpdateInlineAllocationLimit(0); + if (new_space()) { + new_space()->AdvanceAllocationObservers(); + new_space()->UpdateInlineAllocationLimit(0); + } } void Heap::DisableInlineAllocation() { @@ -5074,7 +5253,9 @@ void Heap::DisableInlineAllocation() { inline_allocation_disabled_ = true; // Update inline allocation limit for new space. - new_space()->UpdateInlineAllocationLimit(0); + if (new_space()) { + new_space()->UpdateInlineAllocationLimit(0); + } // Update inline allocation limit for old spaces. PagedSpaceIterator spaces(this); @@ -5138,6 +5319,10 @@ HeapObject Heap::AllocateRawWithRetryOrFailSlowPath( return HeapObject(); } +namespace { +V8_DECLARE_ONCE(initialize_shared_code_range_once); +} // namespace + void Heap::SetUp() { #ifdef V8_ENABLE_ALLOCATION_TIMEOUT allocation_timeout_ = NextAllocationTimeout(); @@ -5159,9 +5344,45 @@ void Heap::SetUp() { reinterpret_cast<uintptr_t>(v8::internal::GetRandomMmapAddr()) & ~kMmapRegionMask; + v8::PageAllocator* code_page_allocator; + if (isolate_->RequiresCodeRange() || code_range_size_ != 0) { + const size_t requested_size = + code_range_size_ == 0 ? kMaximalCodeRangeSize : code_range_size_; + // When a target requires the code range feature, we put all code objects in + // a contiguous range of virtual address space, so that they can call each + // other with near calls. + if (COMPRESS_POINTERS_IN_SHARED_CAGE_BOOL) { + // When sharing a pointer cage among Isolates, also share the + // CodeRange. isolate_->page_allocator() is the process-wide pointer + // compression cage's PageAllocator. + base::CallOnce(&initialize_shared_code_range_once, + &CodeRange::InitializeProcessWideCodeRangeOnce, + isolate_->page_allocator(), requested_size); + code_range_ = CodeRange::GetProcessWideCodeRange(); + } else { + code_range_ = std::make_shared<CodeRange>(); + if (!code_range_->InitReservation(isolate_->page_allocator(), + requested_size)) { + V8::FatalProcessOutOfMemory( + isolate_, "Failed to reserve virtual memory for CodeRange"); + } + } + + LOG(isolate_, + NewEvent("CodeRange", + reinterpret_cast<void*>(code_range_->reservation()->address()), + code_range_size_)); + + isolate_->AddCodeRange(code_range_->reservation()->region().begin(), + code_range_->reservation()->region().size()); + code_page_allocator = code_range_->page_allocator(); + } else { + code_page_allocator = isolate_->page_allocator(); + } + // Set up memory allocator. memory_allocator_.reset( - new MemoryAllocator(isolate_, MaxReserved(), code_range_size_)); + new MemoryAllocator(isolate_, code_page_allocator, MaxReserved())); mark_compact_collector_.reset(new MarkCompactCollector(this)); @@ -5203,49 +5424,6 @@ void Heap::ReplaceReadOnlySpace(SharedReadOnlySpace* space) { read_only_space_ = space; } -uint8_t* Heap::RemapEmbeddedBuiltinsIntoCodeRange( - const uint8_t* embedded_blob_code, size_t embedded_blob_code_size) { - const base::AddressRegion& code_range = memory_allocator()->code_range(); - - CHECK_NE(code_range.begin(), kNullAddress); - CHECK(!code_range.is_empty()); - - v8::PageAllocator* code_page_allocator = - memory_allocator()->code_page_allocator(); - - const size_t kAllocatePageSize = code_page_allocator->AllocatePageSize(); - size_t allocate_code_size = - RoundUp(embedded_blob_code_size, kAllocatePageSize); - - // Allocate the re-embedded code blob in the end. - void* hint = reinterpret_cast<void*>(code_range.end() - allocate_code_size); - - void* embedded_blob_copy = code_page_allocator->AllocatePages( - hint, allocate_code_size, kAllocatePageSize, PageAllocator::kNoAccess); - - if (!embedded_blob_copy) { - V8::FatalProcessOutOfMemory( - isolate(), "Can't allocate space for re-embedded builtins"); - } - - size_t code_size = - RoundUp(embedded_blob_code_size, code_page_allocator->CommitPageSize()); - - if (!code_page_allocator->SetPermissions(embedded_blob_copy, code_size, - PageAllocator::kReadWrite)) { - V8::FatalProcessOutOfMemory(isolate(), - "Re-embedded builtins: set permissions"); - } - memcpy(embedded_blob_copy, embedded_blob_code, embedded_blob_code_size); - - if (!code_page_allocator->SetPermissions(embedded_blob_copy, code_size, - PageAllocator::kReadExecute)) { - V8::FatalProcessOutOfMemory(isolate(), - "Re-embedded builtins: set permissions"); - } - return reinterpret_cast<uint8_t*>(embedded_blob_copy); -} - class StressConcurrentAllocationObserver : public AllocationObserver { public: explicit StressConcurrentAllocationObserver(Heap* heap) @@ -5269,15 +5447,19 @@ class StressConcurrentAllocationObserver : public AllocationObserver { void Heap::SetUpSpaces() { // Ensure SetUpFromReadOnlySpace has been ran. DCHECK_NOT_NULL(read_only_space_); - space_[NEW_SPACE] = new_space_ = - new NewSpace(this, memory_allocator_->data_page_allocator(), - initial_semispace_size_, max_semi_space_size_); + if (!FLAG_single_generation) { + space_[NEW_SPACE] = new_space_ = + new NewSpace(this, memory_allocator_->data_page_allocator(), + initial_semispace_size_, max_semi_space_size_); + } space_[OLD_SPACE] = old_space_ = new OldSpace(this); space_[CODE_SPACE] = code_space_ = new CodeSpace(this); space_[MAP_SPACE] = map_space_ = new MapSpace(this); space_[LO_SPACE] = lo_space_ = new OldLargeObjectSpace(this); - space_[NEW_LO_SPACE] = new_lo_space_ = - new NewLargeObjectSpace(this, new_space_->Capacity()); + if (!FLAG_single_generation) { + space_[NEW_LO_SPACE] = new_lo_space_ = + new NewLargeObjectSpace(this, NewSpaceCapacity()); + } space_[CODE_LO_SPACE] = code_lo_space_ = new CodeLargeObjectSpace(this); for (int i = 0; i < static_cast<int>(v8::Isolate::kUseCounterFeatureCount); @@ -5300,6 +5482,8 @@ void Heap::SetUpSpaces() { dead_object_stats_.reset(new ObjectStats(this)); } local_embedder_heap_tracer_.reset(new LocalEmbedderHeapTracer(isolate())); + embedder_roots_handler_ = + &local_embedder_heap_tracer()->default_embedder_roots_handler(); LOG(isolate_, IntPtrTEvent("heap-capacity", Capacity())); LOG(isolate_, IntPtrTEvent("heap-available", Available())); @@ -5311,10 +5495,12 @@ void Heap::SetUpSpaces() { } #endif // ENABLE_MINOR_MC - scavenge_job_.reset(new ScavengeJob()); - scavenge_task_observer_.reset(new ScavengeTaskObserver( - this, ScavengeJob::YoungGenerationTaskTriggerSize(this))); - new_space()->AddAllocationObserver(scavenge_task_observer_.get()); + if (!FLAG_single_generation) { + scavenge_job_.reset(new ScavengeJob()); + scavenge_task_observer_.reset(new ScavengeTaskObserver( + this, ScavengeJob::YoungGenerationTaskTriggerSize(this))); + new_space()->AddAllocationObserver(scavenge_task_observer_.get()); + } SetGetExternallyAllocatedMemoryInBytesCallback( DefaultGetExternallyAllocatedMemoryInBytesCallback); @@ -5325,7 +5511,7 @@ void Heap::SetUpSpaces() { AddAllocationObserversToAllSpaces(stress_marking_observer_, stress_marking_observer_); } - if (FLAG_stress_scavenge > 0) { + if (FLAG_stress_scavenge > 0 && new_space()) { stress_scavenge_observer_ = new StressScavengeObserver(this); new_space()->AddAllocationObserver(stress_scavenge_observer_); } @@ -5333,6 +5519,11 @@ void Heap::SetUpSpaces() { write_protect_code_memory_ = FLAG_write_protect_code_memory; } +void Heap::InitializeMainThreadLocalHeap(LocalHeap* main_thread_local_heap) { + DCHECK_NULL(main_thread_local_heap_); + main_thread_local_heap_ = main_thread_local_heap; +} + void Heap::InitializeHashSeed() { DCHECK(!deserialization_complete_); uint64_t new_hash_seed; @@ -5438,6 +5629,14 @@ void Heap::SetEmbedderHeapTracer(EmbedderHeapTracer* tracer) { local_embedder_heap_tracer()->SetRemoteTracer(tracer); } +void Heap::SetEmbedderRootsHandler(EmbedderRootsHandler* handler) { + embedder_roots_handler_ = handler; +} + +EmbedderRootsHandler* Heap::GetEmbedderRootsHandler() const { + return embedder_roots_handler_; +} + EmbedderHeapTracer* Heap::GetEmbedderHeapTracer() const { return local_embedder_heap_tracer()->remote_tracer(); } @@ -5461,6 +5660,11 @@ EmbedderHeapTracer::TraceFlags Heap::flags_for_embedder_tracer() const { return EmbedderHeapTracer::TraceFlags::kNoFlags; } +const cppgc::EmbedderStackState* Heap::overriden_stack_state() const { + const auto* cpp_heap = CppHeap::From(cpp_heap_); + return cpp_heap ? cpp_heap->override_stack_state() : nullptr; +} + void Heap::RegisterExternallyReferencedObject(Address* location) { GlobalHandles::MarkTraced(location); Object object(*location); @@ -5524,7 +5728,10 @@ void Heap::TearDown() { } } - new_space()->RemoveAllocationObserver(scavenge_task_observer_.get()); + if (new_space()) { + new_space()->RemoveAllocationObserver(scavenge_task_observer_.get()); + } + scavenge_task_observer_.reset(); scavenge_job_.reset(); @@ -5541,7 +5748,7 @@ void Heap::TearDown() { delete stress_marking_observer_; stress_marking_observer_ = nullptr; } - if (FLAG_stress_scavenge > 0) { + if (FLAG_stress_scavenge > 0 && new_space()) { new_space()->RemoveAllocationObserver(stress_scavenge_observer_); delete stress_scavenge_observer_; stress_scavenge_observer_ = nullptr; @@ -5578,6 +5785,8 @@ void Heap::TearDown() { dead_object_stats_.reset(); local_embedder_heap_tracer_.reset(); + embedder_roots_handler_ = nullptr; + if (cpp_heap_) { CppHeap::From(cpp_heap_)->DetachIsolate(); cpp_heap_ = nullptr; @@ -5587,6 +5796,8 @@ void Heap::TearDown() { tracer_.reset(); + allocation_sites_to_pretenure_.reset(); + for (int i = FIRST_MUTABLE_SPACE; i <= LAST_MUTABLE_SPACE; i++) { delete space_[i]; space_[i] = nullptr; @@ -5608,6 +5819,24 @@ void Heap::TearDown() { memory_allocator_.reset(); } +void Heap::InitSharedSpaces() { + shared_old_space_ = isolate()->shared_isolate()->heap()->old_space(); + shared_old_allocator_.reset( + new ConcurrentAllocator(main_thread_local_heap(), shared_old_space_)); + + shared_map_space_ = isolate()->shared_isolate()->heap()->map_space(); + shared_map_allocator_.reset( + new ConcurrentAllocator(main_thread_local_heap(), shared_map_space_)); +} + +void Heap::DeinitSharedSpaces() { + shared_old_space_ = nullptr; + shared_old_allocator_.reset(); + + shared_map_space_ = nullptr; + shared_map_allocator_.reset(); +} + void Heap::AddGCPrologueCallback(v8::Isolate::GCCallbackWithData callback, GCType gc_type, void* data) { DCHECK_NOT_NULL(callback); @@ -5685,7 +5914,7 @@ Handle<WeakArrayList> CompactWeakArrayList(Heap* heap, } // anonymous namespace -void Heap::CompactWeakArrayLists(AllocationType allocation) { +void Heap::CompactWeakArrayLists() { // Find known PrototypeUsers and compact them. std::vector<Handle<PrototypeInfo>> prototype_infos; { @@ -5702,20 +5931,18 @@ void Heap::CompactWeakArrayLists(AllocationType allocation) { for (auto& prototype_info : prototype_infos) { Handle<WeakArrayList> array( WeakArrayList::cast(prototype_info->prototype_users()), isolate()); - DCHECK_IMPLIES(allocation == AllocationType::kOld, - InOldSpace(*array) || - *array == ReadOnlyRoots(this).empty_weak_array_list()); + DCHECK(InOldSpace(*array) || + *array == ReadOnlyRoots(this).empty_weak_array_list()); WeakArrayList new_array = PrototypeUsers::Compact( - array, this, JSObject::PrototypeRegistryCompactionCallback, allocation); + array, this, JSObject::PrototypeRegistryCompactionCallback, + AllocationType::kOld); prototype_info->set_prototype_users(new_array); } // Find known WeakArrayLists and compact them. Handle<WeakArrayList> scripts(script_list(), isolate()); - DCHECK_IMPLIES( - !V8_ENABLE_THIRD_PARTY_HEAP_BOOL && allocation == AllocationType::kOld, - InOldSpace(*scripts)); - scripts = CompactWeakArrayList(this, scripts, allocation); + DCHECK(InOldSpace(*scripts)); + scripts = CompactWeakArrayList(this, scripts, AllocationType::kOld); set_script_list(*scripts); } @@ -5847,7 +6074,6 @@ void Heap::VerifyClearedSlot(HeapObject object, ObjectSlot slot) { void Heap::VerifySlotRangeHasNoRecordedSlots(Address start, Address end) { #ifndef V8_DISABLE_WRITE_BARRIERS Page* page = Page::FromAddress(start); - DCHECK(!page->IsLargePage()); DCHECK(!page->InYoungGeneration()); RememberedSet<OLD_TO_NEW>::CheckNoneInRange(page, start, end); #endif @@ -5887,18 +6113,26 @@ PagedSpace* PagedSpaceIterator::Next() { } SpaceIterator::SpaceIterator(Heap* heap) - : heap_(heap), current_space_(FIRST_MUTABLE_SPACE - 1) {} + : heap_(heap), current_space_(FIRST_MUTABLE_SPACE) {} SpaceIterator::~SpaceIterator() = default; bool SpaceIterator::HasNext() { - // Iterate until no more spaces. - return current_space_ != LAST_SPACE; + while (current_space_ <= LAST_MUTABLE_SPACE) { + Space* space = heap_->space(current_space_); + if (space) return true; + ++current_space_; + } + + // No more spaces left. + return false; } Space* SpaceIterator::Next() { DCHECK(HasNext()); - return heap_->space(++current_space_); + Space* space = heap_->space(current_space_++); + DCHECK_NOT_NULL(space); + return space; } class HeapObjectsFilter { @@ -5922,14 +6156,14 @@ class UnreachableObjectsFilter : public HeapObjectsFilter { bool SkipObject(HeapObject object) override { if (object.IsFreeSpaceOrFiller()) return true; - BasicMemoryChunk* chunk = BasicMemoryChunk::FromHeapObject(object); + Address chunk = object.ptr() & ~kLogicalChunkAlignmentMask; if (reachable_.count(chunk) == 0) return true; return reachable_[chunk]->count(object) == 0; } private: bool MarkAsReachable(HeapObject object) { - BasicMemoryChunk* chunk = BasicMemoryChunk::FromHeapObject(object); + Address chunk = object.ptr() & ~kLogicalChunkAlignmentMask; if (reachable_.count(chunk) == 0) { reachable_[chunk] = new std::unordered_set<HeapObject, Object::Hasher>(); } @@ -5938,11 +6172,20 @@ class UnreachableObjectsFilter : public HeapObjectsFilter { return true; } + static constexpr intptr_t kLogicalChunkAlignment = + (static_cast<uintptr_t>(1) << kPageSizeBits); + + static constexpr intptr_t kLogicalChunkAlignmentMask = + kLogicalChunkAlignment - 1; + class MarkingVisitor : public ObjectVisitor, public RootVisitor { public: explicit MarkingVisitor(UnreachableObjectsFilter* filter) : filter_(filter) {} + void VisitMapPointer(HeapObject object) override { + MarkHeapObject(Map::unchecked_cast(object.map())); + } void VisitPointers(HeapObject host, ObjectSlot start, ObjectSlot end) override { MarkPointers(MaybeObjectSlot(start), MaybeObjectSlot(end)); @@ -6017,8 +6260,7 @@ class UnreachableObjectsFilter : public HeapObjectsFilter { Heap* heap_; DISALLOW_GARBAGE_COLLECTION(no_gc_) - std::unordered_map<BasicMemoryChunk*, - std::unordered_set<HeapObject, Object::Hasher>*> + std::unordered_map<Address, std::unordered_set<HeapObject, Object::Hasher>*> reachable_; }; @@ -6041,13 +6283,14 @@ HeapObjectIterator::HeapObjectIterator( break; } object_iterator_ = space_iterator_->Next()->GetObjectIterator(heap_); + if (V8_ENABLE_THIRD_PARTY_HEAP_BOOL) heap_->tp_heap_->ResetIterator(); } HeapObjectIterator::~HeapObjectIterator() { #ifdef DEBUG // Assert that in filtering mode we have iterated through all // objects. Otherwise, heap will be left in an inconsistent state. - if (filtering_ != kNoFiltering) { + if (!V8_ENABLE_THIRD_PARTY_HEAP_BOOL && filtering_ != kNoFiltering) { DCHECK_NULL(object_iterator_); } #endif @@ -6064,6 +6307,7 @@ HeapObject HeapObjectIterator::Next() { } HeapObject HeapObjectIterator::NextObject() { + if (V8_ENABLE_THIRD_PARTY_HEAP_BOOL) return heap_->tp_heap_->NextObject(); // No iterator means we are done. if (object_iterator_.get() == nullptr) return HeapObject(); @@ -6451,7 +6695,8 @@ void VerifyPointersVisitor::VerifyPointersImpl(TSlot start, TSlot end) { if (object.GetHeapObject(&heap_object)) { VerifyHeapObjectImpl(heap_object); } else { - CHECK(object.IsSmi() || object.IsCleared()); + CHECK(object.IsSmi() || object.IsCleared() || + MapWord::IsPacked(object.ptr())); } } } @@ -6535,7 +6780,7 @@ void Heap::CreateObjectStats() { } Map Heap::GcSafeMapOfCodeSpaceObject(HeapObject object) { - MapWord map_word = object.map_word(); + MapWord map_word = object.map_word(kRelaxedLoad); return map_word.IsForwardingAddress() ? map_word.ToForwardingAddress().map() : map_word.ToMap(); } @@ -6698,6 +6943,7 @@ template void Heap::WriteBarrierForRange<MaybeObjectSlot>( template <typename TSlot> void Heap::WriteBarrierForRange(HeapObject object, TSlot start_slot, TSlot end_slot) { + if (FLAG_disable_write_barriers) return; MemoryChunk* source_page = MemoryChunk::FromHeapObject(object); base::Flags<RangeWriteBarrierMode> mode; diff --git a/deps/v8/src/heap/heap.h b/deps/v8/src/heap/heap.h index 429f8864be..4be4d8f732 100644 --- a/deps/v8/src/heap/heap.h +++ b/deps/v8/src/heap/heap.h @@ -66,12 +66,16 @@ class ArrayBufferCollector; class ArrayBufferSweeper; class BasicMemoryChunk; class CodeLargeObjectSpace; +class CodeRange; class CollectionBarrier; +class ConcurrentAllocator; class ConcurrentMarking; class CppHeap; class GCIdleTimeHandler; class GCIdleTimeHeapState; class GCTracer; +template <typename T> +class GlobalHandleVector; class GlobalSafepoint; class HeapObjectAllocationTracker; class HeapObjectsFilter; @@ -176,6 +180,7 @@ enum class SkipRoot { kGlobalHandles, kOldGeneration, kStack, + kMainThreadHandles, kUnserializable, kWeak }; @@ -194,7 +199,7 @@ class StrongRootsEntry { class AllocationResult { public: - static inline AllocationResult Retry(AllocationSpace space = NEW_SPACE) { + static inline AllocationResult Retry(AllocationSpace space) { return AllocationResult(space); } @@ -513,6 +518,9 @@ class Heap { inline Address* OldSpaceAllocationTopAddress(); inline Address* OldSpaceAllocationLimitAddress(); + size_t NewSpaceSize(); + size_t NewSpaceCapacity(); + // Move len non-weak tagged elements from src_slot to dst_slot of dst_object. // The source and destination memory ranges can overlap. V8_EXPORT_PRIVATE void MoveRange(HeapObject dst_object, ObjectSlot dst_slot, @@ -566,9 +574,12 @@ class Heap { V8_EXPORT_PRIVATE int NotifyContextDisposed(bool dependant_context); void set_native_contexts_list(Object object) { - native_contexts_list_ = object; + native_contexts_list_.store(object.ptr(), std::memory_order_release); + } + + Object native_contexts_list() const { + return Object(native_contexts_list_.load(std::memory_order_acquire)); } - Object native_contexts_list() const { return native_contexts_list_; } void set_allocation_sites_list(Object object) { allocation_sites_list_ = object; @@ -693,10 +704,12 @@ class Heap { void AppendArrayBufferExtension(JSArrayBuffer object, ArrayBufferExtension* extension); + void DetachArrayBufferExtension(JSArrayBuffer object, + ArrayBufferExtension* extension); GlobalSafepoint* safepoint() { return safepoint_.get(); } - V8_EXPORT_PRIVATE double MonotonicallyIncreasingTimeInMs(); + V8_EXPORT_PRIVATE double MonotonicallyIncreasingTimeInMs() const; void VerifyNewSpaceTop(); @@ -743,7 +756,7 @@ class Heap { size_t backing_store_bytes() const { return backing_store_bytes_; } - void CompactWeakArrayLists(AllocationType allocation); + void CompactWeakArrayLists(); V8_EXPORT_PRIVATE void AddRetainedMap(Handle<NativeContext> context, Handle<Map> map); @@ -760,6 +773,11 @@ class Heap { inline bool CanAllocateInReadOnlySpace(); bool deserialization_complete() const { return deserialization_complete_; } + // We can only invoke Safepoint() on the main thread local heap after + // deserialization is complete. Before that, main_thread_local_heap_ might be + // null. + V8_INLINE bool CanSafepoint() const { return deserialization_complete(); } + bool HasLowAllocationRate(); bool HasHighFragmentation(); bool HasHighFragmentation(size_t used, size_t committed); @@ -802,6 +820,9 @@ class Heap { // Sets up the heap memory without creating any objects. void SetUpSpaces(); + // Prepares the heap, setting up for deserialization. + void InitializeMainThreadLocalHeap(LocalHeap* main_thread_local_heap); + // (Re-)Initialize hash seed from flag or RNG. void InitializeHashSeed(); @@ -812,12 +833,6 @@ class Heap { // Create ObjectStats if live_object_stats_ or dead_object_stats_ are nullptr. void CreateObjectStats(); - // If the code range exists, allocates executable pages in the code range and - // copies the embedded builtins code blob there. Returns address of the copy. - // The builtins code region will be freed with the code range at tear down. - uint8_t* RemapEmbeddedBuiltinsIntoCodeRange(const uint8_t* embedded_blob_code, - size_t embedded_blob_code_size); - // Sets the TearDown state, so no new GC tasks get posted. void StartTearDown(); @@ -827,6 +842,12 @@ class Heap { // Returns whether SetUp has been called. bool HasBeenSetUp() const; + // Initialializes shared spaces. + void InitSharedSpaces(); + + // Removes shared spaces again. + void DeinitSharedSpaces(); + // =========================================================================== // Getters for spaces. ======================================================= // =========================================================================== @@ -857,6 +878,7 @@ class Heap { } inline Isolate* isolate(); + inline const Isolate* isolate() const; MarkCompactCollector* mark_compact_collector() { return mark_compact_collector_.get(); @@ -870,7 +892,11 @@ class Heap { return array_buffer_sweeper_.get(); } - const base::AddressRegion& code_range(); + const base::AddressRegion& code_region(); + + CodeRange* code_range() { return code_range_.get(); } + + LocalHeap* main_thread_local_heap() { return main_thread_local_heap_; } // =========================================================================== // Root set access. ========================================================== @@ -1076,17 +1102,19 @@ class Heap { void EnsureSweepingCompleted(); - IncrementalMarking* incremental_marking() { + IncrementalMarking* incremental_marking() const { return incremental_marking_.get(); } - MarkingBarrier* marking_barrier() { return marking_barrier_.get(); } + MarkingBarrier* marking_barrier() const { return marking_barrier_.get(); } // =========================================================================== // Concurrent marking API. =================================================== // =========================================================================== - ConcurrentMarking* concurrent_marking() { return concurrent_marking_.get(); } + ConcurrentMarking* concurrent_marking() const { + return concurrent_marking_.get(); + } // The runtime uses this function to notify potentially unsafe object layout // changes that require special synchronization with the concurrent marker. @@ -1150,6 +1178,16 @@ class Heap { v8::CppHeap* cpp_heap() const { return cpp_heap_; } + const cppgc::EmbedderStackState* overriden_stack_state() const; + + // =========================================================================== + // Embedder roots optimizations. ============================================= + // =========================================================================== + + V8_EXPORT_PRIVATE void SetEmbedderRootsHandler(EmbedderRootsHandler* handler); + + EmbedderRootsHandler* GetEmbedderRootsHandler() const; + // =========================================================================== // External string table API. ================================================ // =========================================================================== @@ -1192,10 +1230,18 @@ class Heap { // heaps is required. V8_EXPORT_PRIVATE bool Contains(HeapObject value) const; + // Checks whether an address/object is in the non-read-only heap (including + // auxiliary area and unused area). Use IsValidHeapObject if checking both + // heaps is required. + V8_EXPORT_PRIVATE bool SharedHeapContains(HeapObject value) const; + // Checks whether an address/object in a space. // Currently used by tests, serialization and heap verification only. V8_EXPORT_PRIVATE bool InSpace(HeapObject value, AllocationSpace space) const; + // Returns true when this heap is shared. + V8_EXPORT_PRIVATE bool IsShared(); + // Slow methods that can be used for verification as they can also be used // with off-heap Addresses. V8_EXPORT_PRIVATE bool InSpaceSlow(Address addr, AllocationSpace space) const; @@ -1335,9 +1381,9 @@ class Heap { survived_since_last_expansion_ += survived; } - inline void UpdateNewSpaceAllocationCounter(); + void UpdateNewSpaceAllocationCounter(); - inline size_t NewSpaceAllocationCounter(); + V8_EXPORT_PRIVATE size_t NewSpaceAllocationCounter(); // This should be used only for testing. void set_new_space_allocation_counter(size_t new_value) { @@ -1451,6 +1497,12 @@ class Heap { void MergeAllocationSitePretenuringFeedback( const PretenuringFeedbackMap& local_pretenuring_feedback); + // Adds an allocation site to the list of sites to be pretenured during the + // next collection. Added allocation sites are pretenured independent of + // their feedback. + V8_EXPORT_PRIVATE void PretenureAllocationSiteOnNextCollection( + AllocationSite site); + // =========================================================================== // Allocation tracking. ====================================================== // =========================================================================== @@ -2020,7 +2072,7 @@ class Heap { AllocationAlignment alignment = kWordAligned); // Allocates a heap object based on the map. - V8_WARN_UNUSED_RESULT AllocationResult Allocate(Map map, + V8_WARN_UNUSED_RESULT AllocationResult Allocate(Handle<Map> map, AllocationType allocation); // Allocates a partial map for bootstrapping. @@ -2045,6 +2097,7 @@ class Heap { // Stores the option corresponding to the object in the provided *option. bool IsRetainingPathTarget(HeapObject object, RetainingPathOption* option); void PrintRetainingPath(HeapObject object, RetainingPathOption option); + void UpdateRetainersAfterScavenge(); #ifdef DEBUG V8_EXPORT_PRIVATE void IncrementObjectCounters(); @@ -2117,9 +2170,18 @@ class Heap { CodeLargeObjectSpace* code_lo_space_ = nullptr; NewLargeObjectSpace* new_lo_space_ = nullptr; ReadOnlySpace* read_only_space_ = nullptr; + + OldSpace* shared_old_space_ = nullptr; + MapSpace* shared_map_space_ = nullptr; + + std::unique_ptr<ConcurrentAllocator> shared_old_allocator_; + std::unique_ptr<ConcurrentAllocator> shared_map_allocator_; + // Map from the space id to the space. Space* space_[LAST_SPACE + 1]; + LocalHeap* main_thread_local_heap_ = nullptr; + // List for tracking ArrayBufferExtensions ArrayBufferExtension* old_array_buffer_extensions_ = nullptr; ArrayBufferExtension* young_array_buffer_extensions_ = nullptr; @@ -2189,7 +2251,9 @@ class Heap { // Weak list heads, threaded through the objects. // List heads are initialized lazily and contain the undefined_value at start. - Object native_contexts_list_; + // {native_contexts_list_} is an Address instead of an Object to allow the use + // of atomic accessors. + std::atomic<Address> native_contexts_list_; Object allocation_sites_list_; Object dirty_js_finalization_registries_list_; // Weak list tails. @@ -2247,9 +2311,18 @@ class Heap { std::unique_ptr<LocalEmbedderHeapTracer> local_embedder_heap_tracer_; std::unique_ptr<MarkingBarrier> marking_barrier_; + // This object controls virtual space reserved for code on the V8 heap. This + // is only valid for 64-bit architectures where kRequiresCodeRange. + // + // Owned by the heap when !V8_COMPRESS_POINTERS_IN_SHARED_CAGE, otherwise is + // process-wide. + std::shared_ptr<CodeRange> code_range_; + // The embedder owns the C++ heap. v8::CppHeap* cpp_heap_ = nullptr; + EmbedderRootsHandler* embedder_roots_handler_ = nullptr; + StrongRootsEntry* strong_roots_head_ = nullptr; base::Mutex strong_roots_mutex_; @@ -2278,6 +2351,9 @@ class Heap { // forwarding pointers. PretenuringFeedbackMap global_pretenuring_feedback_; + std::unique_ptr<GlobalHandleVector<AllocationSite>> + allocation_sites_to_pretenure_; + char trace_ring_buffer_[kTraceRingBufferSize]; // Used as boolean. @@ -2335,14 +2411,15 @@ class Heap { int allocation_timeout_ = 0; #endif // V8_ENABLE_ALLOCATION_TIMEOUT - std::map<HeapObject, HeapObject, Object::Comparer> retainer_; - std::map<HeapObject, Root, Object::Comparer> retaining_root_; + std::unordered_map<HeapObject, HeapObject, Object::Hasher> retainer_; + std::unordered_map<HeapObject, Root, Object::Hasher> retaining_root_; // If an object is retained by an ephemeron, then the retaining key of the // ephemeron is stored in this map. - std::map<HeapObject, HeapObject, Object::Comparer> ephemeron_retainer_; + std::unordered_map<HeapObject, HeapObject, Object::Hasher> + ephemeron_retainer_; // For each index inthe retaining_path_targets_ array this map // stores the option of the corresponding target. - std::map<int, RetainingPathOption> retaining_path_target_option_; + std::unordered_map<int, RetainingPathOption> retaining_path_target_option_; std::vector<HeapObjectAllocationTracker*> allocation_trackers_; @@ -2367,6 +2444,7 @@ class Heap { friend class IncrementalMarking; friend class IncrementalMarkingJob; friend class LocalHeap; + friend class MarkingBarrier; friend class OldLargeObjectSpace; template <typename ConcreteVisitor, typename MarkingState> friend class MarkingVisitorBase; @@ -2630,14 +2708,13 @@ class HeapObjectAllocationTracker { template <typename T> T ForwardingAddress(T heap_obj) { - MapWord map_word = heap_obj.map_word(); + MapWord map_word = heap_obj.map_word(kRelaxedLoad); if (map_word.IsForwardingAddress()) { return T::cast(map_word.ToForwardingAddress()); } else if (Heap::InFromPage(heap_obj)) { return T(); } else { - // TODO(ulan): Support minor mark-compactor here. return heap_obj; } } diff --git a/deps/v8/src/heap/incremental-marking.cc b/deps/v8/src/heap/incremental-marking.cc index a093835981..0c405c40bf 100644 --- a/deps/v8/src/heap/incremental-marking.cc +++ b/deps/v8/src/heap/incremental-marking.cc @@ -39,9 +39,8 @@ void IncrementalMarking::Observer::Step(int bytes_allocated, Address addr, size_t size) { Heap* heap = incremental_marking_->heap(); VMState<GC> state(heap->isolate()); - RuntimeCallTimerScope runtime_timer( - heap->isolate(), - RuntimeCallCounterId::kGC_Custom_IncrementalMarkingObserver); + RCS_SCOPE(heap->isolate(), + RuntimeCallCounterId::kGC_Custom_IncrementalMarkingObserver); incremental_marking_->AdvanceOnAllocation(); // AdvanceIncrementalMarkingOnAllocation can start incremental marking. incremental_marking_->EnsureBlackAllocated(addr, size); @@ -108,20 +107,28 @@ class IncrementalMarkingRootMarkingVisitor : public RootVisitor { void VisitRootPointer(Root root, const char* description, FullObjectSlot p) override { + DCHECK(!MapWord::IsPacked((*p).ptr())); MarkObjectByPointer(p); } void VisitRootPointers(Root root, const char* description, FullObjectSlot start, FullObjectSlot end) override { - for (FullObjectSlot p = start; p < end; ++p) MarkObjectByPointer(p); + for (FullObjectSlot p = start; p < end; ++p) { + DCHECK(!MapWord::IsPacked((*p).ptr())); + MarkObjectByPointer(p); + } } private: void MarkObjectByPointer(FullObjectSlot p) { - Object obj = *p; - if (!obj.IsHeapObject()) return; - - heap_->incremental_marking()->WhiteToGreyAndPush(HeapObject::cast(obj)); + Object object = *p; + if (!object.IsHeapObject()) return; + DCHECK(!MapWord::IsPacked(object.ptr())); + HeapObject heap_object = HeapObject::cast(object); + BasicMemoryChunk* target_page = + BasicMemoryChunk::FromHeapObject(heap_object); + if (target_page->InSharedHeap()) return; + heap_->incremental_marking()->WhiteToGreyAndPush(heap_object); } Heap* heap_; @@ -132,12 +139,14 @@ bool IncrementalMarking::WasActivated() { return was_activated_; } bool IncrementalMarking::CanBeActivated() { - // Only start incremental marking in a safe state: 1) when incremental - // marking is turned on, 2) when we are currently not in a GC, and - // 3) when we are currently not serializing or deserializing the heap. + // Only start incremental marking in a safe state: + // 1) when incremental marking is turned on + // 2) when we are currently not in a GC, and + // 3) when we are currently not serializing or deserializing the heap, and + // 4) not a shared heap. return FLAG_incremental_marking && heap_->gc_state() == Heap::NOT_IN_GC && heap_->deserialization_complete() && - !heap_->isolate()->serializer_enabled(); + !heap_->isolate()->serializer_enabled() && !heap_->IsShared(); } bool IncrementalMarking::IsBelowActivationThresholds() const { @@ -147,6 +156,7 @@ bool IncrementalMarking::IsBelowActivationThresholds() const { void IncrementalMarking::Start(GarbageCollectionReason gc_reason) { DCHECK(!collector_->sweeping_in_progress()); + DCHECK(!heap_->IsShared()); if (FLAG_trace_incremental_marking) { const size_t old_generation_size_mb = @@ -314,7 +324,9 @@ void IncrementalMarking::MarkRoots() { IncrementalMarkingRootMarkingVisitor visitor(this); heap_->IterateRoots( - &visitor, base::EnumSet<SkipRoot>{SkipRoot::kStack, SkipRoot::kWeak}); + &visitor, + base::EnumSet<SkipRoot>{SkipRoot::kStack, SkipRoot::kMainThreadHandles, + SkipRoot::kWeak}); } bool IncrementalMarking::ShouldRetainMap(Map map, int age) { @@ -356,6 +368,9 @@ void IncrementalMarking::RetainMaps() { if (!map_retaining_is_disabled && marking_state()->IsWhite(map)) { if (ShouldRetainMap(map, age)) { WhiteToGreyAndPush(map); + if (V8_UNLIKELY(FLAG_track_retaining_path)) { + heap_->AddRetainingRoot(Root::kRetainMaps, map); + } } Object prototype = map.prototype(); if (age > 0 && prototype.IsHeapObject() && @@ -432,7 +447,7 @@ void IncrementalMarking::UpdateMarkingWorklistAfterScavenge() { DCHECK(obj.IsHeapObject()); // Only pointers to from space have to be updated. if (Heap::InFromPage(obj)) { - MapWord map_word = obj.map_word(); + MapWord map_word = obj.map_word(kRelaxedLoad); if (!map_word.IsForwardingAddress()) { // There may be objects on the marking deque that do not exist // anymore, e.g. left trimmed objects or objects from the root set diff --git a/deps/v8/src/heap/large-spaces.cc b/deps/v8/src/heap/large-spaces.cc index 5cbcc8620f..4bb989fe9a 100644 --- a/deps/v8/src/heap/large-spaces.cc +++ b/deps/v8/src/heap/large-spaces.cc @@ -5,6 +5,7 @@ #include "src/heap/large-spaces.h" #include "src/base/platform/mutex.h" +#include "src/base/sanitizer/msan.h" #include "src/common/globals.h" #include "src/execution/isolate.h" #include "src/heap/combined-heap.h" @@ -18,7 +19,6 @@ #include "src/heap/spaces-inl.h" #include "src/logging/log.h" #include "src/objects/objects-inl.h" -#include "src/sanitizer/msan.h" #include "src/utils/ostreams.h" namespace v8 { @@ -130,6 +130,7 @@ AllocationResult OldLargeObjectSpace::AllocateRaw(int object_size) { AllocationResult OldLargeObjectSpace::AllocateRaw(int object_size, Executability executable) { + DCHECK(!FLAG_enable_third_party_heap); // Check if we want to force a GC before growing the old space further. // If so, fail the allocation. if (!heap()->CanExpandOldGeneration(object_size) || @@ -160,6 +161,7 @@ AllocationResult OldLargeObjectSpace::AllocateRaw(int object_size, AllocationResult OldLargeObjectSpace::AllocateRawBackground( LocalHeap* local_heap, int object_size) { + DCHECK(!FLAG_enable_third_party_heap); // Check if we want to force a GC before growing the old space further. // If so, fail the allocation. if (!heap()->CanExpandOldGenerationBackground(local_heap, object_size) || @@ -446,6 +448,7 @@ NewLargeObjectSpace::NewLargeObjectSpace(Heap* heap, size_t capacity) capacity_(capacity) {} AllocationResult NewLargeObjectSpace::AllocateRaw(int object_size) { + DCHECK(!FLAG_enable_third_party_heap); // Do not allocate more objects if promoting the existing object would exceed // the old generation capacity. if (!heap()->CanExpandOldGeneration(SizeOfObjects())) { @@ -532,6 +535,7 @@ CodeLargeObjectSpace::CodeLargeObjectSpace(Heap* heap) chunk_map_(kInitialChunkMapCapacity) {} AllocationResult CodeLargeObjectSpace::AllocateRaw(int object_size) { + DCHECK(!FLAG_enable_third_party_heap); return OldLargeObjectSpace::AllocateRaw(object_size, EXECUTABLE); } diff --git a/deps/v8/src/heap/large-spaces.h b/deps/v8/src/heap/large-spaces.h index 8761b9949c..1e53671a9b 100644 --- a/deps/v8/src/heap/large-spaces.h +++ b/deps/v8/src/heap/large-spaces.h @@ -32,6 +32,7 @@ class LargePage : public MemoryChunk { static const int kMaxCodePageSize = 512 * MB; static LargePage* FromHeapObject(HeapObject o) { + DCHECK(!V8_ENABLE_THIRD_PARTY_HEAP_BOOL); return static_cast<LargePage*>(MemoryChunk::FromHeapObject(o)); } diff --git a/deps/v8/src/heap/local-allocator.h b/deps/v8/src/heap/local-allocator.h index 9efbf3cf56..e64932b9fe 100644 --- a/deps/v8/src/heap/local-allocator.h +++ b/deps/v8/src/heap/local-allocator.h @@ -36,7 +36,7 @@ class EvacuationAllocator { // Give back remaining LAB space if this EvacuationAllocator's new space LAB // sits right next to new space allocation top. const LinearAllocationArea info = new_space_lab_.CloseAndMakeIterable(); - new_space_->MaybeFreeUnusedLab(info); + if (new_space_) new_space_->MaybeFreeUnusedLab(info); } inline AllocationResult Allocate(AllocationSpace space, int object_size, diff --git a/deps/v8/src/heap/local-heap-inl.h b/deps/v8/src/heap/local-heap-inl.h index fd0ec5a449..e1333773dd 100644 --- a/deps/v8/src/heap/local-heap-inl.h +++ b/deps/v8/src/heap/local-heap-inl.h @@ -18,6 +18,7 @@ namespace internal { AllocationResult LocalHeap::AllocateRaw(int size_in_bytes, AllocationType type, AllocationOrigin origin, AllocationAlignment alignment) { + DCHECK(!FLAG_enable_third_party_heap); #if DEBUG VerifyCurrent(); DCHECK(AllowHandleAllocation::IsAllowed()); @@ -45,6 +46,7 @@ AllocationResult LocalHeap::AllocateRaw(int size_in_bytes, AllocationType type, Address LocalHeap::AllocateRawOrFail(int object_size, AllocationType type, AllocationOrigin origin, AllocationAlignment alignment) { + DCHECK(!FLAG_enable_third_party_heap); AllocationResult result = AllocateRaw(object_size, type, origin, alignment); if (!result.IsRetry()) return result.ToObject().address(); return PerformCollectionAndAllocateAgain(object_size, type, origin, diff --git a/deps/v8/src/heap/local-heap.cc b/deps/v8/src/heap/local-heap.cc index 70cdbcc0d7..2c6724ba3a 100644 --- a/deps/v8/src/heap/local-heap.cc +++ b/deps/v8/src/heap/local-heap.cc @@ -221,7 +221,7 @@ bool LocalHeap::TryPerformCollection() { heap_->CollectGarbageForBackground(this); return true; } else { - LocalHeap* main_thread = heap_->isolate()->main_thread_local_heap(); + LocalHeap* main_thread = heap_->main_thread_local_heap(); ThreadState current = main_thread->state_relaxed(); while (true) { diff --git a/deps/v8/src/heap/mark-compact-inl.h b/deps/v8/src/heap/mark-compact-inl.h index a9db17f2aa..f28b9b5e84 100644 --- a/deps/v8/src/heap/mark-compact-inl.h +++ b/deps/v8/src/heap/mark-compact-inl.h @@ -205,9 +205,10 @@ void LiveObjectRange<mode>::iterator::AdvanceToNextValidObject() { // make sure that we skip all set bits in the black area until the // object ends. HeapObject black_object = HeapObject::FromAddress(addr); - Object map_object = ObjectSlot(addr).Acquire_Load(); + Object map_object = black_object.map(kAcquireLoad); CHECK(map_object.IsMap()); map = Map::cast(map_object); + DCHECK(map.IsMap()); size = black_object.SizeFromMap(map); CHECK_LE(addr + size, chunk_->area_end()); Address end = addr + size - kTaggedSize; @@ -235,10 +236,11 @@ void LiveObjectRange<mode>::iterator::AdvanceToNextValidObject() { object = black_object; } } else if ((mode == kGreyObjects || mode == kAllLiveObjects)) { - Object map_object = ObjectSlot(addr).Acquire_Load(); + object = HeapObject::FromAddress(addr); + Object map_object = object.map(kAcquireLoad); CHECK(map_object.IsMap()); map = Map::cast(map_object); - object = HeapObject::FromAddress(addr); + DCHECK(map.IsMap()); size = object.SizeFromMap(map); CHECK_LE(addr + size, chunk_->area_end()); } diff --git a/deps/v8/src/heap/mark-compact.cc b/deps/v8/src/heap/mark-compact.cc index 11c789d01b..73eab9e203 100644 --- a/deps/v8/src/heap/mark-compact.cc +++ b/deps/v8/src/heap/mark-compact.cc @@ -42,6 +42,7 @@ #include "src/heap/worklist.h" #include "src/ic/stub-cache.h" #include "src/init/v8.h" +#include "src/logging/tracing-flags.h" #include "src/objects/embedder-data-array-inl.h" #include "src/objects/foreign.h" #include "src/objects/hash-table-inl.h" @@ -51,6 +52,7 @@ #include "src/objects/slots-inl.h" #include "src/objects/transitions-inl.h" #include "src/tasks/cancelable-task.h" +#include "src/tracing/tracing-category-observer.h" #include "src/utils/utils-inl.h" namespace v8 { @@ -82,6 +84,7 @@ class MarkingVerifier : public ObjectVisitor, public RootVisitor { virtual ConcurrentBitmap<AccessMode::NON_ATOMIC>* bitmap( const MemoryChunk* chunk) = 0; + virtual void VerifyMap(Map map) = 0; virtual void VerifyPointers(ObjectSlot start, ObjectSlot end) = 0; virtual void VerifyPointers(MaybeObjectSlot start, MaybeObjectSlot end) = 0; virtual void VerifyRootPointers(FullObjectSlot start, FullObjectSlot end) = 0; @@ -105,6 +108,8 @@ class MarkingVerifier : public ObjectVisitor, public RootVisitor { VerifyRootPointers(start, end); } + void VisitMapPointer(HeapObject object) override { VerifyMap(object.map()); } + void VerifyRoots(); void VerifyMarkingOnPage(const Page* page, Address start, Address end); void VerifyMarking(NewSpace* new_space); @@ -146,6 +151,7 @@ void MarkingVerifier::VerifyMarkingOnPage(const Page* page, Address start, } void MarkingVerifier::VerifyMarking(NewSpace* space) { + if (!space) return; Address end = space->top(); // The bottom position is at the start of its page. Allows us to use // page->area_start() as start of range on all pages. @@ -168,6 +174,7 @@ void MarkingVerifier::VerifyMarking(PagedSpace* space) { } void MarkingVerifier::VerifyMarking(LargeObjectSpace* lo_space) { + if (!lo_space) return; LargeObjectSpaceObjectIterator it(lo_space); for (HeapObject obj = it.Next(); !obj.is_null(); obj = it.Next()) { if (IsBlackOrGrey(obj)) { @@ -208,6 +215,8 @@ class FullMarkingVerifier : public MarkingVerifier { return marking_state_->IsBlackOrGrey(object); } + void VerifyMap(Map map) override { VerifyHeapObjectImpl(map); } + void VerifyPointers(ObjectSlot start, ObjectSlot end) override { VerifyPointersImpl(start, end); } @@ -235,6 +244,9 @@ class FullMarkingVerifier : public MarkingVerifier { private: V8_INLINE void VerifyHeapObjectImpl(HeapObject heap_object) { + if (!heap_->IsShared() && + BasicMemoryChunk::FromHeapObject(heap_object)->InSharedHeap()) + return; CHECK(marking_state_->IsBlackOrGrey(heap_object)); } @@ -271,11 +283,14 @@ class EvacuationVerifier : public ObjectVisitor, public RootVisitor { VerifyRootPointers(start, end); } + void VisitMapPointer(HeapObject object) override { VerifyMap(object.map()); } + protected: explicit EvacuationVerifier(Heap* heap) : heap_(heap) {} inline Heap* heap() { return heap_; } + virtual void VerifyMap(Map map) = 0; virtual void VerifyPointers(ObjectSlot start, ObjectSlot end) = 0; virtual void VerifyPointers(MaybeObjectSlot start, MaybeObjectSlot end) = 0; virtual void VerifyRootPointers(FullObjectSlot start, FullObjectSlot end) = 0; @@ -302,6 +317,7 @@ void EvacuationVerifier::VerifyEvacuationOnPage(Address start, Address end) { } void EvacuationVerifier::VerifyEvacuation(NewSpace* space) { + if (!space) return; PageRange range(space->first_allocatable_address(), space->top()); for (auto it = range.begin(); it != range.end();) { Page* page = *(it++); @@ -354,7 +370,7 @@ class FullEvacuationVerifier : public EvacuationVerifier { } } } - + void VerifyMap(Map map) override { VerifyHeapObjectImpl(map); } void VerifyPointers(ObjectSlot start, ObjectSlot end) override { VerifyPointersImpl(start, end); } @@ -408,6 +424,7 @@ MarkCompactCollector::MarkCompactCollector(Heap* heap) #ifdef DEBUG state_(IDLE), #endif + is_shared_heap_(heap->IsShared()), was_marked_incrementally_(false), evacuation_(false), compacting_(false), @@ -548,6 +565,7 @@ void MarkCompactCollector::VerifyMarkbitsAreClean(PagedSpace* space) { } void MarkCompactCollector::VerifyMarkbitsAreClean(NewSpace* space) { + if (!space) return; for (Page* p : PageRange(space->first_allocatable_address(), space->top())) { CHECK(non_atomic_marking_state()->bitmap(p)->IsClean()); CHECK_EQ(0, non_atomic_marking_state()->live_bytes(p)); @@ -555,6 +573,7 @@ void MarkCompactCollector::VerifyMarkbitsAreClean(NewSpace* space) { } void MarkCompactCollector::VerifyMarkbitsAreClean(LargeObjectSpace* space) { + if (!space) return; LargeObjectSpaceObjectIterator it(space); for (HeapObject obj = it.Next(); !obj.is_null(); obj = it.Next()) { CHECK(non_atomic_marking_state()->IsWhite(obj)); @@ -863,9 +882,14 @@ void MarkCompactCollector::Prepare() { [](LocalHeap* local_heap) { local_heap->FreeLinearAllocationArea(); }); // All objects are guaranteed to be initialized in atomic pause - heap()->new_lo_space()->ResetPendingObject(); - DCHECK_EQ(heap()->new_space()->top(), - heap()->new_space()->original_top_acquire()); + if (heap()->new_lo_space()) { + heap()->new_lo_space()->ResetPendingObject(); + } + + if (heap()->new_space()) { + DCHECK_EQ(heap()->new_space()->top(), + heap()->new_space()->original_top_acquire()); + } } void MarkCompactCollector::FinishConcurrentMarking() { @@ -950,26 +974,34 @@ void MarkCompactCollector::SweepArrayBufferExtensions() { class MarkCompactCollector::RootMarkingVisitor final : public RootVisitor { public: explicit RootMarkingVisitor(MarkCompactCollector* collector) - : collector_(collector) {} + : collector_(collector), is_shared_heap_(collector->is_shared_heap()) {} void VisitRootPointer(Root root, const char* description, FullObjectSlot p) final { + DCHECK(!MapWord::IsPacked(p.Relaxed_Load().ptr())); MarkObjectByPointer(root, p); } void VisitRootPointers(Root root, const char* description, FullObjectSlot start, FullObjectSlot end) final { - for (FullObjectSlot p = start; p < end; ++p) MarkObjectByPointer(root, p); + for (FullObjectSlot p = start; p < end; ++p) { + MarkObjectByPointer(root, p); + } } private: V8_INLINE void MarkObjectByPointer(Root root, FullObjectSlot p) { - if (!(*p).IsHeapObject()) return; - - collector_->MarkRootObject(root, HeapObject::cast(*p)); + Object object = *p; + if (!object.IsHeapObject()) return; + HeapObject heap_object = HeapObject::cast(object); + BasicMemoryChunk* target_page = + BasicMemoryChunk::FromHeapObject(heap_object); + if (!is_shared_heap_ && target_page->InSharedHeap()) return; + collector_->MarkRootObject(root, heap_object); } MarkCompactCollector* const collector_; + const bool is_shared_heap_; }; // This visitor is used to visit the body of special objects held alive by @@ -991,8 +1023,12 @@ class MarkCompactCollector::CustomRootBodyMarkingVisitor final MarkObject(host, *p); } + void VisitMapPointer(HeapObject host) final { MarkObject(host, host.map()); } + void VisitPointers(HeapObject host, ObjectSlot start, ObjectSlot end) final { for (ObjectSlot p = start; p < end; ++p) { + // The map slot should be handled in VisitMapPointer. + DCHECK_NE(host.map_slot(), p); DCHECK(!HasWeakHeapObjectTag(*p)); MarkObject(host, *p); } @@ -1145,6 +1181,7 @@ class RecordMigratedSlotVisitor : public ObjectVisitor { } inline void VisitPointer(HeapObject host, MaybeObjectSlot p) final { + DCHECK(!MapWord::IsPacked(p.Relaxed_Load().ptr())); RecordMigratedSlot(host, *p, p.address()); } @@ -1310,7 +1347,7 @@ class EvacuateVisitorBase : public HeapObjectVisitor { if (mode != MigrationMode::kFast) base->ExecuteMigrationObservers(dest, src, dst, size); } - src.set_map_word(MapWord::FromForwardingAddress(dst)); + src.set_map_word(MapWord::FromForwardingAddress(dst), kRelaxedStore); } EvacuateVisitorBase(Heap* heap, EvacuationAllocator* local_allocator, @@ -1439,7 +1476,8 @@ class EvacuateNewSpaceVisitor final : public EvacuateVisitorBase { if (map.visitor_id() == kVisitThinString) { HeapObject actual = ThinString::cast(object).unchecked_actual(); if (MarkCompactCollector::IsOnEvacuationCandidate(actual)) return false; - object.set_map_word(MapWord::FromForwardingAddress(actual)); + object.set_map_word(MapWord::FromForwardingAddress(actual), + kRelaxedStore); return true; } // TODO(mlippautz): Handle ConsString. @@ -1543,7 +1581,7 @@ class EvacuateOldSpaceVisitor final : public EvacuateVisitorBase { HeapObject target_object; if (TryEvacuateObject(Page::FromHeapObject(object)->owner_identity(), object, size, &target_object)) { - DCHECK(object.map_word().IsForwardingAddress()); + DCHECK(object.map_word(kRelaxedLoad).IsForwardingAddress()); return true; } return false; @@ -2677,7 +2715,7 @@ static inline SlotCallbackResult UpdateSlot(TSlot slot, std::is_same<TSlot, OffHeapObjectSlot>::value, "Only [Full|OffHeap]ObjectSlot and [Full]MaybeObjectSlot are " "expected here"); - MapWord map_word = heap_obj.map_word(); + MapWord map_word = heap_obj.map_word(kRelaxedLoad); if (map_word.IsForwardingAddress()) { DCHECK_IMPLIES(!Heap::InFromPage(heap_obj), MarkCompactCollector::IsOnEvacuationCandidate(heap_obj) || @@ -2759,6 +2797,7 @@ class PointersUpdatingVisitor : public ObjectVisitor, public RootVisitor { void VisitRootPointer(Root root, const char* description, FullObjectSlot p) override { + DCHECK(!MapWord::IsPacked(p.Relaxed_Load().ptr())); UpdateRootSlotInternal(cage_base_, p); } @@ -2818,7 +2857,7 @@ class PointersUpdatingVisitor : public ObjectVisitor, public RootVisitor { static String UpdateReferenceInExternalStringTableEntry(Heap* heap, FullObjectSlot p) { - MapWord map_word = HeapObject::cast(*p).map_word(); + MapWord map_word = HeapObject::cast(*p).map_word(kRelaxedLoad); if (map_word.IsForwardingAddress()) { String new_string = String::cast(map_word.ToForwardingAddress()); @@ -2838,18 +2877,23 @@ static String UpdateReferenceInExternalStringTableEntry(Heap* heap, void MarkCompactCollector::EvacuatePrologue() { // New space. NewSpace* new_space = heap()->new_space(); - // Append the list of new space pages to be processed. - for (Page* p : - PageRange(new_space->first_allocatable_address(), new_space->top())) { - new_space_evacuation_pages_.push_back(p); - } - new_space->Flip(); - new_space->ResetLinearAllocationArea(); - DCHECK_EQ(new_space->Size(), 0); + if (new_space) { + // Append the list of new space pages to be processed. + for (Page* p : + PageRange(new_space->first_allocatable_address(), new_space->top())) { + new_space_evacuation_pages_.push_back(p); + } + new_space->Flip(); + new_space->ResetLinearAllocationArea(); - heap()->new_lo_space()->Flip(); - heap()->new_lo_space()->ResetPendingObject(); + DCHECK_EQ(new_space->Size(), 0); + } + + if (heap()->new_lo_space()) { + heap()->new_lo_space()->Flip(); + heap()->new_lo_space()->ResetPendingObject(); + } // Old space. DCHECK(old_space_evacuation_pages_.empty()); @@ -2860,18 +2904,27 @@ void MarkCompactCollector::EvacuatePrologue() { void MarkCompactCollector::EvacuateEpilogue() { aborted_evacuation_candidates_.clear(); + // New space. - heap()->new_space()->set_age_mark(heap()->new_space()->top()); - DCHECK_IMPLIES(FLAG_always_promote_young_mc, - heap()->new_space()->Size() == 0); + if (heap()->new_space()) { + heap()->new_space()->set_age_mark(heap()->new_space()->top()); + DCHECK_IMPLIES(FLAG_always_promote_young_mc, + heap()->new_space()->Size() == 0); + } + // Deallocate unmarked large objects. heap()->lo_space()->FreeUnmarkedObjects(); heap()->code_lo_space()->FreeUnmarkedObjects(); - heap()->new_lo_space()->FreeUnmarkedObjects(); + if (heap()->new_lo_space()) { + heap()->new_lo_space()->FreeUnmarkedObjects(); + } + // Old space. Deallocate evacuated candidate pages. ReleaseEvacuationCandidates(); + // Give pages that are queued to be freed back to the OS. heap()->memory_allocator()->unmapper()->FreeQueuedChunks(); + #ifdef DEBUG // Old-to-old slot sets must be empty after evacuation. for (Page* p : *heap()->old_space()) { @@ -3271,19 +3324,21 @@ void MarkCompactCollector::EvacuatePagesInParallel() { } // Promote young generation large objects. - IncrementalMarking::NonAtomicMarkingState* marking_state = - heap()->incremental_marking()->non_atomic_marking_state(); - - for (auto it = heap()->new_lo_space()->begin(); - it != heap()->new_lo_space()->end();) { - LargePage* current = *it; - it++; - HeapObject object = current->GetObject(); - DCHECK(!marking_state->IsGrey(object)); - if (marking_state->IsBlack(object)) { - heap_->lo_space()->PromoteNewLargeObject(current); - current->SetFlag(Page::PAGE_NEW_OLD_PROMOTION); - evacuation_items.emplace_back(ParallelWorkItem{}, current); + if (heap()->new_lo_space()) { + IncrementalMarking::NonAtomicMarkingState* marking_state = + heap()->incremental_marking()->non_atomic_marking_state(); + + for (auto it = heap()->new_lo_space()->begin(); + it != heap()->new_lo_space()->end();) { + LargePage* current = *it; + it++; + HeapObject object = current->GetObject(); + DCHECK(!marking_state->IsGrey(object)); + if (marking_state->IsBlack(object)) { + heap_->lo_space()->PromoteNewLargeObject(current); + current->SetFlag(Page::PAGE_NEW_OLD_PROMOTION); + evacuation_items.emplace_back(ParallelWorkItem{}, current); + } } } @@ -3311,7 +3366,7 @@ class EvacuationWeakObjectRetainer : public WeakObjectRetainer { Object RetainAs(Object object) override { if (object.IsHeapObject()) { HeapObject heap_object = HeapObject::cast(object); - MapWord map_word = heap_object.map_word(); + MapWord map_word = heap_object.map_word(kRelaxedLoad); if (map_word.IsForwardingAddress()) { return map_word.ToForwardingAddress(); } @@ -3440,7 +3495,7 @@ void MarkCompactCollector::Evacuate() { UpdatePointersAfterEvacuation(); - { + if (heap()->new_space()) { TRACE_GC(heap()->tracer(), GCTracer::Scope::MC_EVACUATE_REBALANCE); if (!heap()->new_space()->Rebalance()) { heap()->FatalProcessOutOfMemory("NewSpace::Rebalance"); @@ -3642,7 +3697,7 @@ class RememberedSetUpdatingItem : public UpdatingItem { return REMOVE_SLOT; } if (Heap::InFromPage(heap_object)) { - MapWord map_word = heap_object.map_word(); + MapWord map_word = heap_object.map_word(kRelaxedLoad); if (map_word.IsForwardingAddress()) { HeapObjectReference::Update(THeapObjectSlot(slot), map_word.ToForwardingAddress()); @@ -3812,6 +3867,8 @@ MarkCompactCollector::CreateRememberedSetUpdatingItem( int MarkCompactCollectorBase::CollectToSpaceUpdatingItems( std::vector<std::unique_ptr<UpdatingItem>>* items) { + if (!heap()->new_space()) return 0; + // Seed to space pages. const Address space_start = heap()->new_space()->first_allocatable_address(); const Address space_end = heap()->new_space()->top(); @@ -3874,7 +3931,7 @@ class EphemeronTableUpdatingItem : public UpdatingItem { it != heap_->ephemeron_remembered_set_.end();) { EphemeronHashTable table = it->first; auto& indices = it->second; - if (table.map_word().IsForwardingAddress()) { + if (table.map_word(kRelaxedLoad).IsForwardingAddress()) { // The table has moved, and RecordMigratedSlotVisitor::VisitEphemeron // inserts entries for the moved table into ephemeron_remembered_set_. it = heap_->ephemeron_remembered_set_.erase(it); @@ -3887,7 +3944,7 @@ class EphemeronTableUpdatingItem : public UpdatingItem { HeapObjectSlot key_slot(table.RawFieldOfElementAt( EphemeronHashTable::EntryToIndex(InternalIndex(*iti)))); HeapObject key = key_slot.ToHeapObject(); - MapWord map_word = key.map_word(); + MapWord map_word = key.map_word(kRelaxedLoad); if (map_word.IsForwardingAddress()) { key = map_word.ToForwardingAddress(); key_slot.StoreHeapObject(key); @@ -4142,6 +4199,8 @@ class YoungGenerationMarkingVerifier : public MarkingVerifier { } protected: + void VerifyMap(Map map) override { VerifyHeapObjectImpl(map); } + void VerifyPointers(ObjectSlot start, ObjectSlot end) override { VerifyPointersImpl(start, end); } @@ -4210,7 +4269,7 @@ class YoungGenerationEvacuationVerifier : public EvacuationVerifier { } } } - + void VerifyMap(Map map) override { VerifyHeapObjectImpl(map); } void VerifyPointers(ObjectSlot start, ObjectSlot end) override { VerifyPointersImpl(start, end); } @@ -4479,6 +4538,7 @@ class MinorMarkCompactCollector::RootMarkingVisitor : public RootVisitor { void VisitRootPointers(Root root, const char* description, FullObjectSlot start, FullObjectSlot end) final { for (FullObjectSlot p = start; p < end; ++p) { + DCHECK(!MapWord::IsPacked((*p).ptr())); MarkObjectByPointer(p); } } @@ -4536,7 +4596,8 @@ void MinorMarkCompactCollector::CollectGarbage() { } // Since we promote all surviving large objects immediatelly, all remaining // large objects must be dead. - // TODO(ulan): Don't free all as soon as we have an intermediate generation. + // TODO(v8:11685): Don't free all as soon as we have an intermediate + // generation. heap()->new_lo_space()->FreeDeadObjects([](HeapObject) { return true; }); } @@ -4569,7 +4630,7 @@ void MinorMarkCompactCollector::MakeIterable( p->heap()->CreateFillerObjectAt(free_start, static_cast<int>(size), ClearRecordedSlots::kNo); } - Map map = object.synchronized_map(); + Map map = object.map(kAcquireLoad); int size = object.SizeFromMap(map); free_start = free_end + size; } @@ -5024,7 +5085,7 @@ void MinorMarkCompactCollector::TraceFragmentation() { free_bytes_index++; } } - Map map = object.synchronized_map(); + Map map = object.map(kAcquireLoad); int size = object.SizeFromMap(map); live_bytes += size; free_start = free_end + size; diff --git a/deps/v8/src/heap/mark-compact.h b/deps/v8/src/heap/mark-compact.h index 733588ae80..035fb37064 100644 --- a/deps/v8/src/heap/mark-compact.h +++ b/deps/v8/src/heap/mark-compact.h @@ -506,6 +506,7 @@ class MarkCompactCollector final : public MarkCompactCollectorBase { void RecordLiveSlotsOnPage(Page* page); bool is_compacting() const { return compacting_; } + bool is_shared_heap() const { return is_shared_heap_; } // Ensures that sweeping is finished. // @@ -605,11 +606,11 @@ class MarkCompactCollector final : public MarkCompactCollectorBase { void MarkLiveObjects() override; - // Marks the object black and adds it to the marking work list. + // Marks the object grey and adds it to the marking work list. // This is for non-incremental marking only. V8_INLINE void MarkObject(HeapObject host, HeapObject obj); - // Marks the object black and adds it to the marking work list. + // Marks the object grey and adds it to the marking work list. // This is for non-incremental marking only. V8_INLINE void MarkRootObject(Root root, HeapObject obj); @@ -743,6 +744,8 @@ class MarkCompactCollector final : public MarkCompactCollectorBase { CollectorState state_; #endif + const bool is_shared_heap_; + bool was_marked_incrementally_; bool evacuation_; diff --git a/deps/v8/src/heap/marking-barrier-inl.h b/deps/v8/src/heap/marking-barrier-inl.h index 56bd7efda2..d03bdcb0f7 100644 --- a/deps/v8/src/heap/marking-barrier-inl.h +++ b/deps/v8/src/heap/marking-barrier-inl.h @@ -28,8 +28,14 @@ bool MarkingBarrier::MarkValue(HeapObject host, HeapObject value) { // visits the host object. return false; } - if (WhiteToGreyAndPush(value) && is_main_thread_barrier_) { - incremental_marking_->RestartIfNotMarking(); + if (WhiteToGreyAndPush(value)) { + if (is_main_thread_barrier_) { + incremental_marking_->RestartIfNotMarking(); + } + + if (V8_UNLIKELY(FLAG_track_retaining_path)) { + heap_->AddRetainingRoot(Root::kWriteBarrier, value); + } } return true; } diff --git a/deps/v8/src/heap/marking-visitor-inl.h b/deps/v8/src/heap/marking-visitor-inl.h index 55c37e535b..14e8a4d355 100644 --- a/deps/v8/src/heap/marking-visitor-inl.h +++ b/deps/v8/src/heap/marking-visitor-inl.h @@ -22,6 +22,7 @@ namespace internal { template <typename ConcreteVisitor, typename MarkingState> void MarkingVisitorBase<ConcreteVisitor, MarkingState>::MarkObject( HeapObject host, HeapObject object) { + DCHECK(ReadOnlyHeap::Contains(object) || heap_->Contains(object)); concrete_visitor()->SynchronizePageAccess(object); if (concrete_visitor()->marking_state()->WhiteToGrey(object)) { local_marking_worklists_->Push(object); @@ -38,6 +39,9 @@ template <typename ConcreteVisitor, typename MarkingState> template <typename THeapObjectSlot> void MarkingVisitorBase<ConcreteVisitor, MarkingState>::ProcessStrongHeapObject( HeapObject host, THeapObjectSlot slot, HeapObject heap_object) { + concrete_visitor()->SynchronizePageAccess(heap_object); + BasicMemoryChunk* target_page = BasicMemoryChunk::FromHeapObject(heap_object); + if (!is_shared_heap_ && target_page->InSharedHeap()) return; MarkObject(host, heap_object); concrete_visitor()->RecordSlot(host, slot, heap_object); } @@ -355,7 +359,7 @@ int MarkingVisitorBase<ConcreteVisitor, MarkingState>::MarkDescriptorArrayBlack( DescriptorArray descriptors) { concrete_visitor()->marking_state()->WhiteToGrey(descriptors); if (concrete_visitor()->marking_state()->GreyToBlack(descriptors)) { - VisitPointer(descriptors, descriptors.map_slot()); + VisitMapPointer(descriptors); VisitPointers(descriptors, descriptors.GetFirstPointerSlot(), descriptors.GetDescriptorSlot(0)); return DescriptorArray::BodyDescriptor::SizeOf(descriptors.map(), diff --git a/deps/v8/src/heap/marking-visitor.h b/deps/v8/src/heap/marking-visitor.h index 45dda338d0..f8795aadfd 100644 --- a/deps/v8/src/heap/marking-visitor.h +++ b/deps/v8/src/heap/marking-visitor.h @@ -114,7 +114,8 @@ class MarkingVisitorBase : public HeapVisitor<int, ConcreteVisitor> { mark_compact_epoch_(mark_compact_epoch), bytecode_flush_mode_(bytecode_flush_mode), is_embedder_tracing_enabled_(is_embedder_tracing_enabled), - is_forced_gc_(is_forced_gc) {} + is_forced_gc_(is_forced_gc), + is_shared_heap_(heap->IsShared()) {} V8_INLINE int VisitBytecodeArray(Map map, BytecodeArray object); V8_INLINE int VisitDescriptorArray(Map map, DescriptorArray object); @@ -133,6 +134,11 @@ class MarkingVisitorBase : public HeapVisitor<int, ConcreteVisitor> { V8_INLINE int VisitWeakCell(Map map, WeakCell object); // ObjectVisitor overrides. + void VisitMapPointer(HeapObject host) final { + // Note that we are skipping the recording the slot because map objects + // can't move, so this is safe (see ProcessStrongHeapObject for comparison) + MarkObject(host, HeapObject::cast(host.map())); + } V8_INLINE void VisitPointer(HeapObject host, ObjectSlot p) final { VisitPointersImpl(host, p, p + 1); } @@ -196,6 +202,7 @@ class MarkingVisitorBase : public HeapVisitor<int, ConcreteVisitor> { const BytecodeFlushMode bytecode_flush_mode_; const bool is_embedder_tracing_enabled_; const bool is_forced_gc_; + const bool is_shared_heap_; }; } // namespace internal diff --git a/deps/v8/src/heap/memory-allocator.cc b/deps/v8/src/heap/memory-allocator.cc index b5bccb879d..5783f2d04b 100644 --- a/deps/v8/src/heap/memory-allocator.cc +++ b/deps/v8/src/heap/memory-allocator.cc @@ -20,118 +20,23 @@ namespace v8 { namespace internal { -static base::LazyInstance<CodeRangeAddressHint>::type code_range_address_hint = - LAZY_INSTANCE_INITIALIZER; - -namespace { -void FunctionInStaticBinaryForAddressHint() {} -} // namespace - -Address CodeRangeAddressHint::GetAddressHint(size_t code_range_size) { - base::MutexGuard guard(&mutex_); - auto it = recently_freed_.find(code_range_size); - if (it == recently_freed_.end() || it->second.empty()) { - return FUNCTION_ADDR(&FunctionInStaticBinaryForAddressHint); - } - Address result = it->second.back(); - it->second.pop_back(); - return result; -} - -void CodeRangeAddressHint::NotifyFreedCodeRange(Address code_range_start, - size_t code_range_size) { - base::MutexGuard guard(&mutex_); - recently_freed_[code_range_size].push_back(code_range_start); -} - // ----------------------------------------------------------------------------- // MemoryAllocator // -MemoryAllocator::MemoryAllocator(Isolate* isolate, size_t capacity, - size_t code_range_size) +MemoryAllocator::MemoryAllocator(Isolate* isolate, + v8::PageAllocator* code_page_allocator, + size_t capacity) : isolate_(isolate), data_page_allocator_(isolate->page_allocator()), - code_page_allocator_(nullptr), + code_page_allocator_(code_page_allocator), capacity_(RoundUp(capacity, Page::kPageSize)), size_(0), size_executable_(0), lowest_ever_allocated_(static_cast<Address>(-1ll)), highest_ever_allocated_(kNullAddress), unmapper_(isolate->heap(), this) { - InitializeCodePageAllocator(data_page_allocator_, code_range_size); -} - -void MemoryAllocator::InitializeCodePageAllocator( - v8::PageAllocator* page_allocator, size_t requested) { - DCHECK_NULL(code_page_allocator_instance_.get()); - - code_page_allocator_ = page_allocator; - - if (requested == 0) { - if (!isolate_->RequiresCodeRange()) return; - // When a target requires the code range feature, we put all code objects - // in a kMaximalCodeRangeSize range of virtual address space, so that - // they can call each other with near calls. - requested = kMaximalCodeRangeSize; - } else if (requested <= kMinimumCodeRangeSize) { - requested = kMinimumCodeRangeSize; - } - - const size_t reserved_area = - kReservedCodeRangePages * MemoryAllocator::GetCommitPageSize(); - if (requested < (kMaximalCodeRangeSize - reserved_area)) { - requested += RoundUp(reserved_area, MemoryChunk::kPageSize); - // Fullfilling both reserved pages requirement and huge code area - // alignments is not supported (requires re-implementation). - DCHECK_LE(kMinExpectedOSPageSize, page_allocator->AllocatePageSize()); - } - DCHECK(!isolate_->RequiresCodeRange() || requested <= kMaximalCodeRangeSize); - - Address hint = - RoundDown(code_range_address_hint.Pointer()->GetAddressHint(requested), - page_allocator->AllocatePageSize()); - VirtualMemory reservation( - page_allocator, requested, reinterpret_cast<void*>(hint), - std::max(kMinExpectedOSPageSize, page_allocator->AllocatePageSize())); - if (!reservation.IsReserved()) { - V8::FatalProcessOutOfMemory(isolate_, - "CodeRange setup: allocate virtual memory"); - } - code_range_ = reservation.region(); - isolate_->AddCodeRange(code_range_.begin(), code_range_.size()); - - // We are sure that we have mapped a block of requested addresses. - DCHECK_GE(reservation.size(), requested); - Address base = reservation.address(); - - // On some platforms, specifically Win64, we need to reserve some pages at - // the beginning of an executable space. See - // https://cs.chromium.org/chromium/src/components/crash/content/ - // app/crashpad_win.cc?rcl=fd680447881449fba2edcf0589320e7253719212&l=204 - // for details. - if (reserved_area > 0) { - if (!reservation.SetPermissions(base, reserved_area, - PageAllocator::kReadWrite)) - V8::FatalProcessOutOfMemory(isolate_, "CodeRange setup: set permissions"); - - base += reserved_area; - } - Address aligned_base = RoundUp(base, MemoryChunk::kAlignment); - size_t size = - RoundDown(reservation.size() - (aligned_base - base) - reserved_area, - MemoryChunk::kPageSize); - DCHECK(IsAligned(aligned_base, kMinExpectedOSPageSize)); - - LOG(isolate_, - NewEvent("CodeRange", reinterpret_cast<void*>(reservation.address()), - requested)); - - code_reservation_ = std::move(reservation); - code_page_allocator_instance_ = std::make_unique<base::BoundedPageAllocator>( - page_allocator, aligned_base, size, - static_cast<size_t>(MemoryChunk::kAlignment)); - code_page_allocator_ = code_page_allocator_instance_.get(); + DCHECK_NOT_NULL(code_page_allocator); } void MemoryAllocator::TearDown() { @@ -147,13 +52,6 @@ void MemoryAllocator::TearDown() { last_chunk_.Free(); } - if (code_page_allocator_instance_.get()) { - DCHECK(!code_range_.is_empty()); - code_range_address_hint.Pointer()->NotifyFreedCodeRange(code_range_.begin(), - code_range_.size()); - code_range_ = base::AddressRegion(); - code_page_allocator_instance_.reset(); - } code_page_allocator_ = nullptr; data_page_allocator_ = nullptr; } diff --git a/deps/v8/src/heap/memory-allocator.h b/deps/v8/src/heap/memory-allocator.h index 179877e753..d405aefa53 100644 --- a/deps/v8/src/heap/memory-allocator.h +++ b/deps/v8/src/heap/memory-allocator.h @@ -17,6 +17,7 @@ #include "src/base/macros.h" #include "src/base/platform/mutex.h" #include "src/base/platform/semaphore.h" +#include "src/heap/code-range.h" #include "src/heap/heap.h" #include "src/heap/memory-chunk.h" #include "src/heap/spaces.h" @@ -30,27 +31,6 @@ class Heap; class Isolate; class ReadOnlyPage; -// The process-wide singleton that keeps track of code range regions with the -// intention to reuse free code range regions as a workaround for CFG memory -// leaks (see crbug.com/870054). -class CodeRangeAddressHint { - public: - // Returns the most recently freed code range start address for the given - // size. If there is no such entry, then a random address is returned. - V8_EXPORT_PRIVATE Address GetAddressHint(size_t code_range_size); - - V8_EXPORT_PRIVATE void NotifyFreedCodeRange(Address code_range_start, - size_t code_range_size); - - private: - base::Mutex mutex_; - // A map from code range size to an array of recently freed code range - // addresses. There should be O(1) different code range sizes. - // The length of each array is limited by the peak number of code ranges, - // which should be also O(1). - std::unordered_map<size_t, std::vector<Address>> recently_freed_; -}; - // ---------------------------------------------------------------------------- // A space acquires chunks of memory from the operating system. The memory // allocator allocates and deallocates pages for the paged heap spaces and large @@ -172,8 +152,9 @@ class MemoryAllocator { V8_EXPORT_PRIVATE static base::AddressRegion ComputeDiscardMemoryArea( Address addr, size_t size); - V8_EXPORT_PRIVATE MemoryAllocator(Isolate* isolate, size_t max_capacity, - size_t code_range_size); + V8_EXPORT_PRIVATE MemoryAllocator(Isolate* isolate, + v8::PageAllocator* code_page_allocator, + size_t max_capacity); V8_EXPORT_PRIVATE void TearDown(); @@ -283,17 +264,6 @@ class MemoryAllocator { : data_page_allocator_; } - // A region of memory that may contain executable code including reserved - // OS page with read-write access in the beginning. - const base::AddressRegion& code_range() const { - // |code_range_| >= |optional RW pages| + |code_page_allocator_instance_| - DCHECK_IMPLIES(!code_range_.is_empty(), code_page_allocator_instance_); - DCHECK_IMPLIES(!code_range_.is_empty(), - code_range_.contains(code_page_allocator_instance_->begin(), - code_page_allocator_instance_->size())); - return code_range_; - } - Unmapper* unmapper() { return &unmapper_; } // Performs all necessary bookkeeping to free the memory, but does not free @@ -306,9 +276,6 @@ class MemoryAllocator { void RegisterReadOnlyMemory(ReadOnlyPage* page); private: - void InitializeCodePageAllocator(v8::PageAllocator* page_allocator, - size_t requested); - // PreFreeMemory logically frees the object, i.e., it unregisters the // memory, logs a delete event and adds the chunk to remembered unmapped // pages. @@ -360,10 +327,6 @@ class MemoryAllocator { Isolate* isolate_; - // This object controls virtual space reserved for code on the V8 heap. This - // is only valid for 64-bit architectures where kRequiresCodeRange. - VirtualMemory code_reservation_; - // Page allocator used for allocating data pages. Depending on the // configuration it may be a page allocator instance provided by // v8::Platform or a BoundedPageAllocator (when pointer compression is @@ -371,29 +334,12 @@ class MemoryAllocator { v8::PageAllocator* data_page_allocator_; // Page allocator used for allocating code pages. Depending on the - // configuration it may be a page allocator instance provided by - // v8::Platform or a BoundedPageAllocator (when pointer compression is - // enabled or on those 64-bit architectures where pc-relative 32-bit + // configuration it may be a page allocator instance provided by v8::Platform + // or a BoundedPageAllocator from Heap::code_range_ (when pointer compression + // is enabled or on those 64-bit architectures where pc-relative 32-bit // displacement can be used for call and jump instructions). v8::PageAllocator* code_page_allocator_; - // A part of the |code_reservation_| that may contain executable code - // including reserved page with read-write access in the beginning. - // See details below. - base::AddressRegion code_range_; - - // This unique pointer owns the instance of bounded code allocator - // that controls executable pages allocation. It does not control the - // optionally existing page in the beginning of the |code_range_|. - // So, summarizing all above, the following conditions hold: - // 1) |code_reservation_| >= |code_range_| - // 2) |code_range_| >= |optional RW pages| + - // |code_page_allocator_instance_|. 3) |code_reservation_| is - // AllocatePageSize()-aligned 4) |code_page_allocator_instance_| is - // MemoryChunk::kAlignment-aligned 5) |code_range_| is - // CommitPageSize()-aligned - std::unique_ptr<base::BoundedPageAllocator> code_page_allocator_instance_; - // Maximum space size in bytes. size_t capacity_; diff --git a/deps/v8/src/heap/memory-chunk.cc b/deps/v8/src/heap/memory-chunk.cc index c2355c6b84..4d16da707f 100644 --- a/deps/v8/src/heap/memory-chunk.cc +++ b/deps/v8/src/heap/memory-chunk.cc @@ -161,6 +161,9 @@ MemoryChunk* MemoryChunk::Initialize(BasicMemoryChunk* basic_chunk, Heap* heap, chunk->possibly_empty_buckets_.Initialize(); + // All pages of a shared heap need to be marked with this flag. + if (heap->IsShared()) chunk->SetFlag(IN_SHARED_HEAP); + #ifdef V8_ENABLE_CONSERVATIVE_STACK_SCANNING chunk->object_start_bitmap_ = ObjectStartBitmap(chunk->area_start()); #endif diff --git a/deps/v8/src/heap/memory-measurement.cc b/deps/v8/src/heap/memory-measurement.cc index ab491e19a6..491fe3102a 100644 --- a/deps/v8/src/heap/memory-measurement.cc +++ b/deps/v8/src/heap/memory-measurement.cc @@ -336,7 +336,7 @@ std::unique_ptr<v8::MeasureMemoryDelegate> MemoryMeasurement::DefaultDelegate( bool NativeContextInferrer::InferForContext(Isolate* isolate, Context context, Address* native_context) { - Map context_map = context.synchronized_map(); + Map context_map = context.map(kAcquireLoad); Object maybe_native_context = TaggedField<Object, Map::kConstructorOrBackPointerOrNativeContextOffset>:: Acquire_Load(isolate, context_map); diff --git a/deps/v8/src/heap/new-spaces-inl.h b/deps/v8/src/heap/new-spaces-inl.h index ffd5d8cfd7..98626260e1 100644 --- a/deps/v8/src/heap/new-spaces-inl.h +++ b/deps/v8/src/heap/new-spaces-inl.h @@ -5,12 +5,12 @@ #ifndef V8_HEAP_NEW_SPACES_INL_H_ #define V8_HEAP_NEW_SPACES_INL_H_ +#include "src/base/sanitizer/msan.h" #include "src/common/globals.h" #include "src/heap/heap.h" #include "src/heap/new-spaces.h" #include "src/heap/spaces-inl.h" #include "src/objects/tagged-impl.h" -#include "src/sanitizer/msan.h" namespace v8 { namespace internal { @@ -87,6 +87,8 @@ HeapObject SemiSpaceObjectIterator::Next() { AllocationResult NewSpace::AllocateRaw(int size_in_bytes, AllocationAlignment alignment, AllocationOrigin origin) { + DCHECK(!FLAG_single_generation); + DCHECK(!FLAG_enable_third_party_heap); #if DEBUG VerifyTop(); #endif @@ -110,7 +112,7 @@ AllocationResult NewSpace::AllocateFastUnaligned(int size_in_bytes, AllocationOrigin origin) { Address top = allocation_info_.top(); if (allocation_info_.limit() < top + size_in_bytes) { - return AllocationResult::Retry(); + return AllocationResult::Retry(NEW_SPACE); } HeapObject obj = HeapObject::FromAddress(top); @@ -135,7 +137,7 @@ AllocationResult NewSpace::AllocateFastAligned( if (allocation_info_.limit() - top < static_cast<uintptr_t>(aligned_size_in_bytes)) { - return AllocationResult::Retry(); + return AllocationResult::Retry(NEW_SPACE); } HeapObject obj = HeapObject::FromAddress(top); diff --git a/deps/v8/src/heap/new-spaces.cc b/deps/v8/src/heap/new-spaces.cc index 029b77beb4..8486c7bcc4 100644 --- a/deps/v8/src/heap/new-spaces.cc +++ b/deps/v8/src/heap/new-spaces.cc @@ -4,6 +4,7 @@ #include "src/heap/new-spaces.h" +#include "src/common/globals.h" #include "src/heap/array-buffer-sweeper.h" #include "src/heap/heap-inl.h" #include "src/heap/incremental-marking.h" @@ -628,8 +629,9 @@ AllocationResult NewSpace::AllocateRawSlow(int size_in_bytes, AllocationResult NewSpace::AllocateRawUnaligned(int size_in_bytes, AllocationOrigin origin) { + DCHECK(!FLAG_enable_third_party_heap); if (!EnsureAllocation(size_in_bytes, kWordAligned)) { - return AllocationResult::Retry(); + return AllocationResult::Retry(NEW_SPACE); } DCHECK_EQ(allocation_info_.start(), allocation_info_.top()); @@ -646,8 +648,9 @@ AllocationResult NewSpace::AllocateRawUnaligned(int size_in_bytes, AllocationResult NewSpace::AllocateRawAligned(int size_in_bytes, AllocationAlignment alignment, AllocationOrigin origin) { + DCHECK(!FLAG_enable_third_party_heap); if (!EnsureAllocation(size_in_bytes, alignment)) { - return AllocationResult::Retry(); + return AllocationResult::Retry(NEW_SPACE); } DCHECK_EQ(allocation_info_.start(), allocation_info_.top()); @@ -741,9 +744,11 @@ void NewSpace::Verify(Isolate* isolate) { CHECK_EQ(external_space_bytes[t], ExternalBackingStoreBytes(t)); } + if (!FLAG_concurrent_array_buffer_sweeping) { size_t bytes = heap()->array_buffer_sweeper()->young().BytesSlow(); CHECK_EQ(bytes, ExternalBackingStoreBytes(ExternalBackingStoreType::kArrayBuffer)); + } // Check semi-spaces. CHECK_EQ(from_space_.id(), kFromSpace); diff --git a/deps/v8/src/heap/object-stats.cc b/deps/v8/src/heap/object-stats.cc index 86b2e6a2c4..5e0074e47f 100644 --- a/deps/v8/src/heap/object-stats.cc +++ b/deps/v8/src/heap/object-stats.cc @@ -74,7 +74,7 @@ class FieldStatsCollector : public ObjectVisitor { raw_fields_count_in_object -= kDoubleSize / kTaggedSize; *boxed_double_fields_count_ += 1; } else if (host.IsSeqString()) { - int string_data = SeqString::cast(host).synchronized_length() * + int string_data = SeqString::cast(host).length(kAcquireLoad) * (String::cast(host).IsOneByteRepresentation() ? 1 : 2) / kTaggedSize; DCHECK_LE(string_data, raw_fields_count_in_object); diff --git a/deps/v8/src/heap/objects-visiting-inl.h b/deps/v8/src/heap/objects-visiting-inl.h index 37ecd50c8d..8aac430ddb 100644 --- a/deps/v8/src/heap/objects-visiting-inl.h +++ b/deps/v8/src/heap/objects-visiting-inl.h @@ -76,8 +76,9 @@ ResultType HeapVisitor<ResultType, ConcreteVisitor>::Visit(Map map, template <typename ResultType, typename ConcreteVisitor> void HeapVisitor<ResultType, ConcreteVisitor>::VisitMapPointer( HeapObject host) { - DCHECK(!host.map_word().IsForwardingAddress()); - static_cast<ConcreteVisitor*>(this)->VisitPointer(host, host.map_slot()); + DCHECK(!host.map_word(kRelaxedLoad).IsForwardingAddress()); + if (!static_cast<ConcreteVisitor*>(this)->ShouldVisitMapPointer()) return; + static_cast<ConcreteVisitor*>(this)->VisitMapPointer(host); } #define VISIT(TypeName) \ @@ -167,7 +168,7 @@ ResultType HeapVisitor<ResultType, ConcreteVisitor>::VisitFreeSpace( if (visitor->ShouldVisitMapPointer()) { visitor->VisitMapPointer(object); } - return static_cast<ResultType>(object.size()); + return static_cast<ResultType>(object.size(kRelaxedLoad)); } template <typename ConcreteVisitor> diff --git a/deps/v8/src/heap/objects-visiting.h b/deps/v8/src/heap/objects-visiting.h index 9f133d6cfa..7ea322dfb9 100644 --- a/deps/v8/src/heap/objects-visiting.h +++ b/deps/v8/src/heap/objects-visiting.h @@ -52,8 +52,11 @@ namespace internal { V(SyntheticModule) \ V(TransitionArray) \ IF_WASM(V, WasmArray) \ + IF_WASM(V, WasmExportedFunctionData) \ + IF_WASM(V, WasmFunctionData) \ IF_WASM(V, WasmIndirectFunctionTable) \ IF_WASM(V, WasmInstanceObject) \ + IF_WASM(V, WasmJSFunctionData) \ IF_WASM(V, WasmStruct) \ IF_WASM(V, WasmTypeInfo) @@ -78,6 +81,8 @@ class HeapVisitor : public ObjectVisitor { public: V8_INLINE ResultType Visit(HeapObject object); V8_INLINE ResultType Visit(Map map, HeapObject object); + // A callback for visiting the map pointer in the object header. + V8_INLINE void VisitMapPointer(HeapObject host); protected: // A guard predicate for visiting the object. @@ -86,8 +91,6 @@ class HeapVisitor : public ObjectVisitor { V8_INLINE bool ShouldVisit(HeapObject object) { return true; } // Guard predicate for visiting the objects map pointer separately. V8_INLINE bool ShouldVisitMapPointer() { return true; } - // A callback for visiting the map pointer in the object header. - V8_INLINE void VisitMapPointer(HeapObject host); // If this predicate returns false, then the heap visitor will fail // in default Visit implemention for subclasses of JSObject. V8_INLINE bool AllowDefaultJSObjectVisit() { return true; } diff --git a/deps/v8/src/heap/paged-spaces-inl.h b/deps/v8/src/heap/paged-spaces-inl.h index e135e30efc..8c77186583 100644 --- a/deps/v8/src/heap/paged-spaces-inl.h +++ b/deps/v8/src/heap/paged-spaces-inl.h @@ -131,6 +131,7 @@ AllocationResult PagedSpace::AllocateFastAligned( AllocationResult PagedSpace::AllocateRawUnaligned(int size_in_bytes, AllocationOrigin origin) { + DCHECK(!FLAG_enable_third_party_heap); if (!EnsureLabMain(size_in_bytes, origin)) { return AllocationResult::Retry(identity()); } @@ -153,6 +154,7 @@ AllocationResult PagedSpace::AllocateRawUnaligned(int size_in_bytes, AllocationResult PagedSpace::AllocateRawAligned(int size_in_bytes, AllocationAlignment alignment, AllocationOrigin origin) { + DCHECK(!FLAG_enable_third_party_heap); DCHECK_EQ(identity(), OLD_SPACE); int allocation_size = size_in_bytes; // We don't know exactly how much filler we need to align until space is @@ -182,6 +184,7 @@ AllocationResult PagedSpace::AllocateRawAligned(int size_in_bytes, AllocationResult PagedSpace::AllocateRaw(int size_in_bytes, AllocationAlignment alignment, AllocationOrigin origin) { + DCHECK(!FLAG_enable_third_party_heap); AllocationResult result; if (alignment != kWordAligned) { diff --git a/deps/v8/src/heap/paged-spaces.cc b/deps/v8/src/heap/paged-spaces.cc index f541974a50..8543f109ed 100644 --- a/deps/v8/src/heap/paged-spaces.cc +++ b/deps/v8/src/heap/paged-spaces.cc @@ -731,7 +731,7 @@ void PagedSpace::Verify(Isolate* isolate, ObjectVisitor* visitor) { } CHECK(allocation_pointer_found_in_space); - if (identity() == OLD_SPACE) { + if (identity() == OLD_SPACE && !FLAG_concurrent_array_buffer_sweeping) { size_t bytes = heap()->array_buffer_sweeper()->old().BytesSlow(); CHECK_EQ(bytes, ExternalBackingStoreBytes(ExternalBackingStoreType::kArrayBuffer)); @@ -832,8 +832,8 @@ void PagedSpace::PrepareForMarkCompact() { bool PagedSpace::RefillLabMain(int size_in_bytes, AllocationOrigin origin) { VMState<GC> state(heap()->isolate()); - RuntimeCallTimerScope runtime_timer( - heap()->isolate(), RuntimeCallCounterId::kGC_Custom_SlowAllocateRaw); + RCS_SCOPE(heap()->isolate(), + RuntimeCallCounterId::kGC_Custom_SlowAllocateRaw); return RawRefillLabMain(size_in_bytes, origin); } diff --git a/deps/v8/src/heap/read-only-heap.cc b/deps/v8/src/heap/read-only-heap.cc index d5f7e843ef..05ca965e08 100644 --- a/deps/v8/src/heap/read-only-heap.cc +++ b/deps/v8/src/heap/read-only-heap.cc @@ -249,6 +249,10 @@ bool ReadOnlyHeap::read_only_object_cache_is_initialized() const { return read_only_object_cache_.size() > 0; } +size_t ReadOnlyHeap::read_only_object_cache_size() const { + return read_only_object_cache_.size(); +} + ReadOnlyHeapObjectIterator::ReadOnlyHeapObjectIterator(ReadOnlyHeap* ro_heap) : ReadOnlyHeapObjectIterator(ro_heap->read_only_space()) {} diff --git a/deps/v8/src/heap/read-only-heap.h b/deps/v8/src/heap/read-only-heap.h index f947832c5f..558a694c94 100644 --- a/deps/v8/src/heap/read-only-heap.h +++ b/deps/v8/src/heap/read-only-heap.h @@ -81,14 +81,15 @@ class ReadOnlyHeap { // Returns a read-only cache entry at a particular index. Object cached_read_only_object(size_t i) const; bool read_only_object_cache_is_initialized() const; + size_t read_only_object_cache_size() const; ReadOnlySpace* read_only_space() const { return read_only_space_; } // Returns whether the ReadOnlySpace will actually be shared taking into // account whether shared memory is available with pointer compression. static bool IsReadOnlySpaceShared() { - return V8_SHARED_RO_HEAP_BOOL && (!COMPRESS_POINTERS_IN_ISOLATE_CAGE_BOOL || - IsSharedMemoryAvailable()); + return V8_SHARED_RO_HEAP_BOOL && + (!COMPRESS_POINTERS_BOOL || COMPRESS_POINTERS_IN_SHARED_CAGE_BOOL); } virtual void InitializeIsolateRoots(Isolate* isolate) {} diff --git a/deps/v8/src/heap/read-only-spaces.cc b/deps/v8/src/heap/read-only-spaces.cc index 5adac66afe..248b5c22e6 100644 --- a/deps/v8/src/heap/read-only-spaces.cc +++ b/deps/v8/src/heap/read-only-spaces.cc @@ -56,7 +56,18 @@ void ReadOnlyArtifacts::VerifyChecksum(SnapshotData* read_only_snapshot_data, CHECK_WITH_MSG(snapshot_checksum, "Attempt to create the read-only heap after already " "creating from a snapshot."); - CHECK_EQ(read_only_blob_checksum_, snapshot_checksum); + if (!FLAG_stress_snapshot) { + // --stress-snapshot is only intended to check how well the + // serializer/deserializer copes with unexpected objects, and is not + // intended to test whether the newly deserialized Isolate would actually + // work since it serializes a currently running Isolate, which is not + // supported. As a result, it's possible that it will create a new + // read-only snapshot that is not compatible with the original one (for + // instance due to the string table being re-ordered). Since we won't + // acutally use that new Isoalte, we're ok with any potential corruption. + // See crbug.com/1043058. + CHECK_EQ(read_only_blob_checksum_, snapshot_checksum); + } } else { // If there's no checksum, then that means the read-only heap objects are // being created. @@ -70,11 +81,10 @@ SingleCopyReadOnlyArtifacts::~SingleCopyReadOnlyArtifacts() { // TearDown requires MemoryAllocator which itself is tied to an Isolate. shared_read_only_space_->pages_.resize(0); - v8::PageAllocator* page_allocator = GetPlatformPageAllocator(); for (ReadOnlyPage* chunk : pages_) { void* chunk_address = reinterpret_cast<void*>(chunk->address()); - size_t size = RoundUp(chunk->size(), page_allocator->AllocatePageSize()); - CHECK(page_allocator->FreePages(chunk_address, size)); + size_t size = RoundUp(chunk->size(), page_allocator_->AllocatePageSize()); + CHECK(page_allocator_->FreePages(chunk_address, size)); } } @@ -86,6 +96,12 @@ ReadOnlyHeap* SingleCopyReadOnlyArtifacts::GetReadOnlyHeapForIsolate( void SingleCopyReadOnlyArtifacts::Initialize(Isolate* isolate, std::vector<ReadOnlyPage*>&& pages, const AllocationStats& stats) { + // Do not use the platform page allocator when sharing a pointer compression + // cage, as the Isolate's page allocator is a BoundedPageAllocator tied to the + // shared cage. + page_allocator_ = COMPRESS_POINTERS_IN_SHARED_CAGE_BOOL + ? isolate->page_allocator() + : GetPlatformPageAllocator(); pages_ = std::move(pages); set_accounting_stats(stats); set_shared_read_only_space( @@ -304,11 +320,12 @@ void ReadOnlySpace::DetachPagesAndAddToArtifacts( DCHECK(ReadOnlyHeap::IsReadOnlySpaceShared()); Heap* heap = ReadOnlySpace::heap(); - // Without pointer compression, ReadOnlySpace pages are directly shared - // between all heaps and so must be unregistered from their originating - // allocator. - Seal(COMPRESS_POINTERS_BOOL ? SealMode::kDetachFromHeap - : SealMode::kDetachFromHeapAndUnregisterMemory); + // Without pointer compression in a per-Isolate cage, ReadOnlySpace pages are + // directly shared between all heaps and so must be unregistered from their + // originating allocator. + Seal(COMPRESS_POINTERS_IN_ISOLATE_CAGE_BOOL + ? SealMode::kDetachFromHeap + : SealMode::kDetachFromHeapAndUnregisterMemory); artifacts->Initialize(heap->isolate(), std::move(pages_), accounting_stats_); } @@ -635,6 +652,7 @@ HeapObject ReadOnlySpace::TryAllocateLinearlyAligned( AllocationResult ReadOnlySpace::AllocateRawAligned( int size_in_bytes, AllocationAlignment alignment) { + DCHECK(!FLAG_enable_third_party_heap); DCHECK(!IsDetached()); int allocation_size = size_in_bytes; @@ -789,9 +807,9 @@ SharedReadOnlySpace::SharedReadOnlySpace(Heap* heap, SingleCopyReadOnlyArtifacts* artifacts) : SharedReadOnlySpace(heap) { // This constructor should only be used when RO_SPACE is shared without - // pointer compression. + // pointer compression in a per-Isolate cage. DCHECK(V8_SHARED_RO_HEAP_BOOL); - DCHECK(!COMPRESS_POINTERS_BOOL); + DCHECK(!COMPRESS_POINTERS_IN_ISOLATE_CAGE_BOOL); accounting_stats_ = artifacts->accounting_stats(); pages_ = artifacts->pages(); } diff --git a/deps/v8/src/heap/read-only-spaces.h b/deps/v8/src/heap/read-only-spaces.h index ee4b2a8223..0ca05d8d4c 100644 --- a/deps/v8/src/heap/read-only-spaces.h +++ b/deps/v8/src/heap/read-only-spaces.h @@ -132,6 +132,9 @@ class SingleCopyReadOnlyArtifacts : public ReadOnlyArtifacts { const AllocationStats& stats) override; void ReinstallReadOnlySpace(Isolate* isolate) override; void VerifyHeapAndSpaceRelationships(Isolate* isolate) override; + + private: + v8::PageAllocator* page_allocator_ = nullptr; }; // ----------------------------------------------------------------------------- diff --git a/deps/v8/src/heap/scavenger-inl.h b/deps/v8/src/heap/scavenger-inl.h index 8560b5b62b..193565d34d 100644 --- a/deps/v8/src/heap/scavenger-inl.h +++ b/deps/v8/src/heap/scavenger-inl.h @@ -119,7 +119,7 @@ void Scavenger::PageMemoryFence(MaybeObject object) { bool Scavenger::MigrateObject(Map map, HeapObject source, HeapObject target, int size) { // Copy the content of source to target. - target.set_map_word(MapWord::FromMap(map)); + target.set_map_word(MapWord::FromMap(map), kRelaxedStore); heap()->CopyBlock(target.address() + kTaggedSize, source.address() + kTaggedSize, size - kTaggedSize); @@ -159,7 +159,7 @@ CopyAndForwardResult Scavenger::SemiSpaceCopyObject( const bool self_success = MigrateObject(map, object, target, object_size); if (!self_success) { allocator_.FreeLast(NEW_SPACE, target, object_size); - MapWord map_word = object.synchronized_map_word(); + MapWord map_word = object.map_word(kAcquireLoad); HeapObjectReference::Update(slot, map_word.ToForwardingAddress()); DCHECK(!Heap::InFromPage(*slot)); return Heap::InToPage(*slot) @@ -184,6 +184,7 @@ CopyAndForwardResult Scavenger::PromoteObject(Map map, THeapObjectSlot slot, static_assert(std::is_same<THeapObjectSlot, FullHeapObjectSlot>::value || std::is_same<THeapObjectSlot, HeapObjectSlot>::value, "Only FullHeapObjectSlot and HeapObjectSlot are expected here"); + DCHECK_GE(object_size, Heap::kMinObjectSizeInTaggedWords * kTaggedSize); AllocationAlignment alignment = HeapObject::RequiredAlignment(map); AllocationResult allocation = allocator_.Allocate( OLD_SPACE, object_size, AllocationOrigin::kGC, alignment); @@ -195,7 +196,7 @@ CopyAndForwardResult Scavenger::PromoteObject(Map map, THeapObjectSlot slot, const bool self_success = MigrateObject(map, object, target, object_size); if (!self_success) { allocator_.FreeLast(OLD_SPACE, target, object_size); - MapWord map_word = object.synchronized_map_word(); + MapWord map_word = object.map_word(kAcquireLoad); HeapObjectReference::Update(slot, map_word.ToForwardingAddress()); DCHECK(!Heap::InFromPage(*slot)); return Heap::InToPage(*slot) @@ -326,24 +327,25 @@ SlotCallbackResult Scavenger::EvacuateShortcutCandidate(Map map, HeapObjectReference::Update(slot, first); if (!Heap::InYoungGeneration(first)) { - object.synchronized_set_map_word(MapWord::FromForwardingAddress(first)); + object.set_map_word(MapWord::FromForwardingAddress(first), kReleaseStore); return REMOVE_SLOT; } - MapWord first_word = first.synchronized_map_word(); + MapWord first_word = first.map_word(kAcquireLoad); if (first_word.IsForwardingAddress()) { HeapObject target = first_word.ToForwardingAddress(); HeapObjectReference::Update(slot, target); - object.synchronized_set_map_word(MapWord::FromForwardingAddress(target)); + object.set_map_word(MapWord::FromForwardingAddress(target), + kReleaseStore); return Heap::InYoungGeneration(target) ? KEEP_SLOT : REMOVE_SLOT; } Map map = first_word.ToMap(); SlotCallbackResult result = EvacuateObjectDefault(map, slot, first, first.SizeFromMap(map), Map::ObjectFieldsFrom(map.visitor_id())); - object.synchronized_set_map_word( - MapWord::FromForwardingAddress(slot.ToHeapObject())); + object.set_map_word(MapWord::FromForwardingAddress(slot.ToHeapObject()), + kReleaseStore); return result; } DCHECK_EQ(ObjectFields::kMaybePointers, @@ -390,7 +392,7 @@ SlotCallbackResult Scavenger::ScavengeObject(THeapObjectSlot p, DCHECK(Heap::InFromPage(object)); // Synchronized load that consumes the publishing CAS of MigrateObject. - MapWord first_word = object.synchronized_map_word(); + MapWord first_word = object.map_word(kAcquireLoad); // If the first word is a forwarding address, the object has already been // copied. diff --git a/deps/v8/src/heap/scavenger.cc b/deps/v8/src/heap/scavenger.cc index be9971e7c6..efa3ed2f61 100644 --- a/deps/v8/src/heap/scavenger.cc +++ b/deps/v8/src/heap/scavenger.cc @@ -130,13 +130,13 @@ namespace { V8_INLINE bool IsUnscavengedHeapObject(Heap* heap, Object object) { return Heap::InFromPage(object) && - !HeapObject::cast(object).map_word().IsForwardingAddress(); + !HeapObject::cast(object).map_word(kRelaxedLoad).IsForwardingAddress(); } // Same as IsUnscavengedHeapObject() above but specialized for HeapObjects. V8_INLINE bool IsUnscavengedHeapObject(Heap* heap, HeapObject heap_object) { return Heap::InFromPage(heap_object) && - !heap_object.map_word().IsForwardingAddress(); + !heap_object.map_word(kRelaxedLoad).IsForwardingAddress(); } bool IsUnscavengedHeapObjectSlot(Heap* heap, FullObjectSlot p) { @@ -152,7 +152,7 @@ class ScavengeWeakObjectRetainer : public WeakObjectRetainer { return object; } - MapWord map_word = HeapObject::cast(object).map_word(); + MapWord map_word = HeapObject::cast(object).map_word(kRelaxedLoad); if (map_word.IsForwardingAddress()) { return map_word.ToForwardingAddress(); } @@ -384,6 +384,10 @@ void ScavengerCollector::CollectGarbage() { &Heap::UpdateYoungReferenceInExternalStringTableEntry); heap_->incremental_marking()->UpdateMarkingWorklistAfterScavenge(); + + if (V8_UNLIKELY(FLAG_track_retaining_path)) { + heap_->UpdateRetainersAfterScavenge(); + } } if (FLAG_concurrent_marking) { @@ -481,7 +485,7 @@ void ScavengerCollector::HandleSurvivingNewLargeObjects() { Map map = update_info.second; // Order is important here. We have to re-install the map to have access // to meta-data like size during page promotion. - object.set_map_word(MapWord::FromMap(map)); + object.set_map_word(MapWord::FromMap(map), kRelaxedStore); LargePage* page = LargePage::FromHeapObject(object); heap_->lo_space()->PromoteNewLargeObject(page); } @@ -734,6 +738,7 @@ void Scavenger::AddEphemeronHashTable(EphemeronHashTable table) { void RootScavengeVisitor::VisitRootPointer(Root root, const char* description, FullObjectSlot p) { DCHECK(!HasWeakHeapObjectTag(*p)); + DCHECK(!MapWord::IsPacked((*p).ptr())); ScavengePointer(p); } @@ -741,12 +746,15 @@ void RootScavengeVisitor::VisitRootPointers(Root root, const char* description, FullObjectSlot start, FullObjectSlot end) { // Copy all HeapObject pointers in [start, end) - for (FullObjectSlot p = start; p < end; ++p) ScavengePointer(p); + for (FullObjectSlot p = start; p < end; ++p) { + ScavengePointer(p); + } } void RootScavengeVisitor::ScavengePointer(FullObjectSlot p) { Object object = *p; DCHECK(!HasWeakHeapObjectTag(object)); + DCHECK(!MapWord::IsPacked(object.ptr())); if (Heap::InYoungGeneration(object)) { scavenger_->ScavengeObject(FullHeapObjectSlot(p), HeapObject::cast(object)); } diff --git a/deps/v8/src/heap/setup-heap-internal.cc b/deps/v8/src/heap/setup-heap-internal.cc index 8a3e1fda12..886c89aeae 100644 --- a/deps/v8/src/heap/setup-heap-internal.cc +++ b/deps/v8/src/heap/setup-heap-internal.cc @@ -195,9 +195,10 @@ void Heap::FinalizePartialMap(Map map) { map.set_constructor_or_back_pointer(roots.null_value()); } -AllocationResult Heap::Allocate(Map map, AllocationType allocation_type) { - DCHECK(map.instance_type() != MAP_TYPE); - int size = map.instance_size(); +AllocationResult Heap::Allocate(Handle<Map> map, + AllocationType allocation_type) { + DCHECK(map->instance_type() != MAP_TYPE); + int size = map->instance_size(); HeapObject result; AllocationResult allocation = AllocateRaw(size, allocation_type); if (!allocation.To(&result)) return allocation; @@ -205,7 +206,7 @@ AllocationResult Heap::Allocate(Map map, AllocationType allocation_type) { WriteBarrierMode write_barrier_mode = allocation_type == AllocationType::kYoung ? SKIP_WRITE_BARRIER : UPDATE_WRITE_BARRIER; - result.set_map_after_allocation(map, write_barrier_mode); + result.set_map_after_allocation(*map, write_barrier_mode); return result; } @@ -281,7 +282,7 @@ bool Heap::CreateInitialMaps() { { AllocationResult allocation = - Allocate(roots.null_map(), AllocationType::kReadOnly); + Allocate(roots.null_map_handle(), AllocationType::kReadOnly); if (!allocation.To(&obj)) return false; } set_null_value(Oddball::cast(obj)); @@ -289,7 +290,7 @@ bool Heap::CreateInitialMaps() { { AllocationResult allocation = - Allocate(roots.undefined_map(), AllocationType::kReadOnly); + Allocate(roots.undefined_map_handle(), AllocationType::kReadOnly); if (!allocation.To(&obj)) return false; } set_undefined_value(Oddball::cast(obj)); @@ -297,7 +298,7 @@ bool Heap::CreateInitialMaps() { DCHECK(!InYoungGeneration(roots.undefined_value())); { AllocationResult allocation = - Allocate(roots.the_hole_map(), AllocationType::kReadOnly); + Allocate(roots.the_hole_map_handle(), AllocationType::kReadOnly); if (!allocation.To(&obj)) return false; } set_the_hole_value(Oddball::cast(obj)); @@ -317,7 +318,7 @@ bool Heap::CreateInitialMaps() { // Allocate the empty enum cache. { AllocationResult allocation = - Allocate(roots.enum_cache_map(), AllocationType::kReadOnly); + Allocate(roots.enum_cache_map_handle(), AllocationType::kReadOnly); if (!allocation.To(&obj)) return false; } set_empty_enum_cache(EnumCache::cast(obj)); @@ -381,6 +382,7 @@ bool Heap::CreateInitialMaps() { ALLOCATE_PRIMITIVE_MAP(SYMBOL_TYPE, Symbol::kSize, symbol, Context::SYMBOL_FUNCTION_INDEX) ALLOCATE_MAP(FOREIGN_TYPE, Foreign::kSize, foreign) + ALLOCATE_MAP(MEGA_DOM_HANDLER_TYPE, MegaDomHandler::kSize, mega_dom_handler) ALLOCATE_PRIMITIVE_MAP(ODDBALL_TYPE, Oddball::kSize, boolean, Context::BOOLEAN_FUNCTION_INDEX); @@ -500,6 +502,10 @@ bool Heap::CreateInitialMaps() { ALLOCATE_MAP(CODE_DATA_CONTAINER_TYPE, CodeDataContainer::kSize, code_data_container) + IF_WASM(ALLOCATE_MAP, WASM_EXPORTED_FUNCTION_DATA_TYPE, + WasmExportedFunctionData::kSize, wasm_exported_function_data) + IF_WASM(ALLOCATE_MAP, WASM_JS_FUNCTION_DATA_TYPE, WasmJSFunctionData::kSize, + wasm_js_function_data) IF_WASM(ALLOCATE_MAP, WASM_TYPE_INFO_TYPE, WasmTypeInfo::kSize, wasm_type_info) @@ -550,8 +556,9 @@ bool Heap::CreateInitialMaps() { { // Empty array boilerplate description - AllocationResult alloc = Allocate(roots.array_boilerplate_description_map(), - AllocationType::kReadOnly); + AllocationResult alloc = + Allocate(roots.array_boilerplate_description_map_handle(), + AllocationType::kReadOnly); if (!alloc.To(&obj)) return false; ArrayBoilerplateDescription::cast(obj).set_constant_elements( @@ -564,7 +571,7 @@ bool Heap::CreateInitialMaps() { { AllocationResult allocation = - Allocate(roots.boolean_map(), AllocationType::kReadOnly); + Allocate(roots.boolean_map_handle(), AllocationType::kReadOnly); if (!allocation.To(&obj)) return false; } set_true_value(Oddball::cast(obj)); @@ -572,7 +579,7 @@ bool Heap::CreateInitialMaps() { { AllocationResult allocation = - Allocate(roots.boolean_map(), AllocationType::kReadOnly); + Allocate(roots.boolean_map_handle(), AllocationType::kReadOnly); if (!allocation.To(&obj)) return false; } set_false_value(Oddball::cast(obj)); @@ -864,6 +871,7 @@ void Heap::CreateInitialObjects() { set_is_concat_spreadable_protector(*factory->NewProtector()); set_map_iterator_protector(*factory->NewProtector()); set_no_elements_protector(*factory->NewProtector()); + set_mega_dom_protector(*factory->NewProtector()); set_promise_hook_protector(*factory->NewProtector()); set_promise_resolve_protector(*factory->NewProtector()); set_promise_species_protector(*factory->NewProtector()); diff --git a/deps/v8/src/heap/spaces-inl.h b/deps/v8/src/heap/spaces-inl.h index ccdf050e68..9b9a02af43 100644 --- a/deps/v8/src/heap/spaces-inl.h +++ b/deps/v8/src/heap/spaces-inl.h @@ -141,7 +141,8 @@ AllocationResult LocalAllocationBuffer::AllocateRawAligned( int filler_size = Heap::GetFillToAlign(current_top, alignment); Address new_top = current_top + filler_size + size_in_bytes; - if (new_top > allocation_info_.limit()) return AllocationResult::Retry(); + if (new_top > allocation_info_.limit()) + return AllocationResult::Retry(NEW_SPACE); allocation_info_.set_top(new_top); if (filler_size > 0) { diff --git a/deps/v8/src/heap/spaces.cc b/deps/v8/src/heap/spaces.cc index b6c1e0bcc2..63346786d5 100644 --- a/deps/v8/src/heap/spaces.cc +++ b/deps/v8/src/heap/spaces.cc @@ -11,6 +11,7 @@ #include "src/base/bits.h" #include "src/base/bounded-page-allocator.h" #include "src/base/macros.h" +#include "src/base/sanitizer/msan.h" #include "src/common/globals.h" #include "src/heap/combined-heap.h" #include "src/heap/concurrent-marking.h" @@ -31,7 +32,6 @@ #include "src/objects/heap-object.h" #include "src/objects/js-array-buffer-inl.h" #include "src/objects/objects-inl.h" -#include "src/sanitizer/msan.h" #include "src/snapshot/snapshot.h" #include "src/utils/ostreams.h" diff --git a/deps/v8/src/heap/spaces.h b/deps/v8/src/heap/spaces.h index 0a0a884dc0..4afada00ce 100644 --- a/deps/v8/src/heap/spaces.h +++ b/deps/v8/src/heap/spaces.h @@ -221,9 +221,11 @@ class Page : public MemoryChunk { // from [page_addr .. page_addr + kPageSize[. This only works if the object // is in fact in a page. static Page* FromAddress(Address addr) { + DCHECK(!V8_ENABLE_THIRD_PARTY_HEAP_BOOL); return reinterpret_cast<Page*>(addr & ~kPageAlignmentMask); } static Page* FromHeapObject(HeapObject o) { + DCHECK(!V8_ENABLE_THIRD_PARTY_HEAP_BOOL); return reinterpret_cast<Page*>(o.ptr() & ~kAlignmentMask); } @@ -232,6 +234,7 @@ class Page : public MemoryChunk { // we subtract a hole word. The valid address ranges from // [page_addr + area_start_ .. page_addr + kPageSize + kTaggedSize]. static Page* FromAllocationAreaAddress(Address address) { + DCHECK(!V8_ENABLE_THIRD_PARTY_HEAP_BOOL); return Page::FromAddress(address - kTaggedSize); } diff --git a/deps/v8/src/heap/sweeper.cc b/deps/v8/src/heap/sweeper.cc index c4e60be707..0e35a3cea2 100644 --- a/deps/v8/src/heap/sweeper.cc +++ b/deps/v8/src/heap/sweeper.cc @@ -351,9 +351,6 @@ int Sweeper::RawSweep( size_t live_bytes = 0; size_t max_freed_bytes = 0; - // TODO(ulan): we don't have to clear type old-to-old slots in code space - // because the concurrent marker doesn't mark code objects. This requires - // the write barrier for code objects to check the color of the code object. bool non_empty_typed_slots = p->typed_slot_set<OLD_TO_NEW>() != nullptr || p->typed_slot_set<OLD_TO_OLD>() != nullptr; @@ -393,7 +390,8 @@ int Sweeper::RawSweep( free_start, free_end, p, non_empty_typed_slots, &free_ranges_map, &old_to_new_cleanup); } - Map map = object.synchronized_map(); + Map map = object.map(kAcquireLoad); + DCHECK(map.IsMap()); int size = object.SizeFromMap(map); live_bytes += size; free_start = free_end + size; diff --git a/deps/v8/src/heap/third-party/heap-api-stub.cc b/deps/v8/src/heap/third-party/heap-api-stub.cc index 6d31479bec..f7ccb50810 100644 --- a/deps/v8/src/heap/third-party/heap-api-stub.cc +++ b/deps/v8/src/heap/third-party/heap-api-stub.cc @@ -38,6 +38,12 @@ const base::AddressRegion& Heap::GetCodeRange() { } // static +bool Heap::InSpace(Address, AllocationSpace) { return false; } + +// static +bool Heap::InOldSpace(Address) { return false; } + +// static bool Heap::InCodeSpace(Address) { return false; } // static diff --git a/deps/v8/src/heap/third-party/heap-api.h b/deps/v8/src/heap/third-party/heap-api.h index c4712b988e..16f2fde884 100644 --- a/deps/v8/src/heap/third-party/heap-api.h +++ b/deps/v8/src/heap/third-party/heap-api.h @@ -26,6 +26,10 @@ class Heap { const base::AddressRegion& GetCodeRange(); + static bool InSpace(Address address, AllocationSpace space); + + static bool InOldSpace(Address address); + static bool InCodeSpace(Address address); static bool InReadOnlySpace(Address address); @@ -38,6 +42,8 @@ class Heap { HeapObject NextObject(); bool CollectGarbage(); + + size_t Capacity(); }; } // namespace third_party_heap diff --git a/deps/v8/src/ic/accessor-assembler.cc b/deps/v8/src/ic/accessor-assembler.cc index 35d1da5cd9..0ff67d030a 100644 --- a/deps/v8/src/ic/accessor-assembler.cc +++ b/deps/v8/src/ic/accessor-assembler.cc @@ -8,6 +8,7 @@ #include "src/base/optional.h" #include "src/builtins/builtins-constructor-gen.h" #include "src/codegen/code-factory.h" +#include "src/codegen/interface-descriptors-inl.h" #include "src/ic/handler-configuration.h" #include "src/ic/ic.h" #include "src/ic/keyed-store-generic.h" @@ -16,6 +17,7 @@ #include "src/objects/cell.h" #include "src/objects/foreign.h" #include "src/objects/heap-number.h" +#include "src/objects/megadom-handler.h" #include "src/objects/module.h" #include "src/objects/objects-inl.h" #include "src/objects/property-details.h" @@ -134,6 +136,55 @@ void AccessorAssembler::HandlePolymorphicCase( } } +void AccessorAssembler::TryMegaDOMCase(TNode<Object> lookup_start_object, + TNode<Map> lookup_start_object_map, + TVariable<MaybeObject>* var_handler, + TNode<Object> vector, + TNode<TaggedIndex> slot, Label* miss, + ExitPoint* exit_point) { + // Check if the receiver is a JS_API_OBJECT + GotoIfNot(IsJSApiObjectMap(lookup_start_object_map), miss); + + // Check if receiver requires access check + GotoIf(IsSetWord32<Map::Bits1::IsAccessCheckNeededBit>( + LoadMapBitField(lookup_start_object_map)), + miss); + + CSA_ASSERT(this, TaggedEqual(LoadFeedbackVectorSlot(CAST(vector), slot), + MegaDOMSymbolConstant())); + + // In some cases, we load the + TNode<MegaDomHandler> handler; + if (var_handler->IsBound()) { + handler = CAST(var_handler->value()); + } else { + TNode<MaybeObject> maybe_handler = + LoadFeedbackVectorSlot(CAST(vector), slot, kTaggedSize); + CSA_ASSERT(this, IsStrong(maybe_handler)); + handler = CAST(maybe_handler); + } + + // Check if dom protector cell is still valid + GotoIf(IsMegaDOMProtectorCellInvalid(), miss); + + // Load the getter + TNode<MaybeObject> maybe_getter = LoadMegaDomHandlerAccessor(handler); + CSA_ASSERT(this, IsWeakOrCleared(maybe_getter)); + TNode<FunctionTemplateInfo> getter = + CAST(GetHeapObjectAssumeWeak(maybe_getter, miss)); + + // Load the accessor context + TNode<MaybeObject> maybe_context = LoadMegaDomHandlerContext(handler); + CSA_ASSERT(this, IsWeakOrCleared(maybe_context)); + TNode<Context> context = CAST(GetHeapObjectAssumeWeak(maybe_context, miss)); + + // TODO(gsathya): This builtin throws an exception on interface check fail but + // we should miss to the runtime. + exit_point->Return( + CallBuiltin(Builtins::kCallFunctionTemplate_CheckCompatibleReceiver, + context, getter, IntPtrConstant(0), lookup_start_object)); +} + void AccessorAssembler::HandleLoadICHandlerCase( const LazyLoadICParameters* p, TNode<Object> handler, Label* miss, ExitPoint* exit_point, ICMode ic_mode, OnNonExistent on_nonexistent, @@ -543,7 +594,7 @@ void AccessorAssembler::HandleLoadICSmiHandlerLoadNamedCase( properties, var_name_index.value(), &var_details, &var_value); TNode<Object> value = CallGetterIfAccessor( var_value.value(), CAST(holder), var_details.value(), p->context(), - p->receiver(), miss); + p->receiver(), p->name(), miss); exit_point->Return(value); } } @@ -563,11 +614,17 @@ void AccessorAssembler::HandleLoadICSmiHandlerLoadNamedCase( } BIND(&native_data_property); - HandleLoadCallbackProperty(p, CAST(holder), handler_word, exit_point); + { + GotoIf(IsSideEffectFreeDebuggingActive(), &slow); + HandleLoadCallbackProperty(p, CAST(holder), handler_word, exit_point); + } BIND(&api_getter); - HandleLoadAccessor(p, CAST(holder), handler_word, CAST(handler), handler_kind, - exit_point); + { + GotoIf(IsSideEffectFreeDebuggingActive(), &slow); + HandleLoadAccessor(p, CAST(holder), handler_word, CAST(handler), + handler_kind, exit_point); + } BIND(&proxy); { @@ -627,7 +684,8 @@ void AccessorAssembler::HandleLoadICSmiHandlerLoadNamedCase( GotoIf(IsTheHole(value), miss); exit_point->Return(CallGetterIfAccessor(value, CAST(holder), details, - p->context(), p->receiver(), miss)); + p->context(), p->receiver(), + p->name(), miss)); } BIND(&interceptor); @@ -645,8 +703,9 @@ void AccessorAssembler::HandleLoadICSmiHandlerLoadNamedCase( p->name(), p->slot(), p->vector()); } else { - exit_point->ReturnCallRuntime(Runtime::kGetProperty, p->context(), holder, - p->name(), p->receiver()); + exit_point->ReturnCallRuntime(Runtime::kGetProperty, p->context(), + p->lookup_start_object(), p->name(), + p->receiver()); } } @@ -912,7 +971,7 @@ void AccessorAssembler::HandleLoadICProtoHandler( properties, name_index, &var_details, &var_value); TNode<Object> value = CallGetterIfAccessor( var_value.value(), CAST(var_holder->value()), var_details.value(), - p->context(), p->receiver(), miss); + p->context(), p->receiver(), p->name(), miss); exit_point->Return(value); } }, @@ -1507,7 +1566,6 @@ void AccessorAssembler::HandleStoreAccessor(const StoreICParameters* p, LoadObjectField(accessor_pair, AccessorPair::kSetterOffset); CSA_ASSERT(this, Word32BinaryNot(IsTheHole(setter))); - Callable callable = CodeFactory::Call(isolate()); Return(Call(p->context(), setter, p->receiver(), p->value())); } @@ -1686,9 +1744,12 @@ void AccessorAssembler::HandleStoreICProtoHandler( Goto(&store); BIND(&store); - TNode<IntPtrT> argc = IntPtrConstant(1); - Return(CallApiCallback(context, callback, argc, data, api_holder.value(), - p->receiver(), p->value())); + { + GotoIf(IsSideEffectFreeDebuggingActive(), &if_slow); + TNode<IntPtrT> argc = IntPtrConstant(1); + Return(CallApiCallback(context, callback, argc, data, + api_holder.value(), p->receiver(), p->value())); + } } BIND(&if_store_global_proxy); @@ -2036,9 +2097,9 @@ void AccessorAssembler::EmitElementLoad( Label* if_hole, Label* rebox_double, TVariable<Float64T>* var_double_value, Label* unimplemented_elements_kind, Label* out_of_bounds, Label* miss, ExitPoint* exit_point, LoadAccessMode access_mode) { - Label if_typed_array(this), if_fast(this), if_fast_packed(this), - if_fast_holey(this), if_fast_double(this), if_fast_holey_double(this), - if_nonfast(this), if_dictionary(this); + Label if_rab_gsab_typed_array(this), if_typed_array(this), if_fast(this), + if_fast_packed(this), if_fast_holey(this), if_fast_double(this), + if_fast_holey_double(this), if_nonfast(this), if_dictionary(this); Branch(Int32GreaterThan(elements_kind, Int32Constant(LAST_ANY_NONEXTENSIBLE_ELEMENTS_KIND)), &if_nonfast, &if_fast); @@ -2119,7 +2180,16 @@ void AccessorAssembler::EmitElementLoad( BIND(&if_nonfast); { - STATIC_ASSERT(LAST_ELEMENTS_KIND == LAST_FIXED_TYPED_ARRAY_ELEMENTS_KIND); + Label uint8_elements(this), int8_elements(this), uint16_elements(this), + int16_elements(this), uint32_elements(this), int32_elements(this), + float32_elements(this), float64_elements(this), bigint64_elements(this), + biguint64_elements(this); + STATIC_ASSERT(LAST_ELEMENTS_KIND == + LAST_RAB_GSAB_FIXED_TYPED_ARRAY_ELEMENTS_KIND); + GotoIf(Int32GreaterThanOrEqual( + elements_kind, + Int32Constant(FIRST_RAB_GSAB_FIXED_TYPED_ARRAY_ELEMENTS_KIND)), + &if_rab_gsab_typed_array); GotoIf(Int32GreaterThanOrEqual( elements_kind, Int32Constant(FIRST_FIXED_TYPED_ARRAY_ELEMENTS_KIND)), @@ -2145,88 +2215,129 @@ void AccessorAssembler::EmitElementLoad( exit_point->Return(access_mode == LoadAccessMode::kHas ? TrueConstant() : value); } - - BIND(&if_typed_array); { - Comment("typed elements"); - // Check if buffer has been detached. - TNode<JSArrayBuffer> buffer = LoadJSArrayBufferViewBuffer(CAST(object)); - GotoIf(IsDetachedBuffer(buffer), miss); - - // Bounds check. - TNode<UintPtrT> length = LoadJSTypedArrayLength(CAST(object)); - GotoIfNot(UintPtrLessThan(intptr_index, length), out_of_bounds); - if (access_mode == LoadAccessMode::kHas) { - exit_point->Return(TrueConstant()); - } else { - TNode<RawPtrT> data_ptr = LoadJSTypedArrayDataPtr(CAST(object)); - - Label uint8_elements(this), int8_elements(this), uint16_elements(this), - int16_elements(this), uint32_elements(this), int32_elements(this), - float32_elements(this), float64_elements(this), - bigint64_elements(this), biguint64_elements(this); - Label* elements_kind_labels[] = { - &uint8_elements, &uint8_elements, &int8_elements, - &uint16_elements, &int16_elements, &uint32_elements, - &int32_elements, &float32_elements, &float64_elements, - &bigint64_elements, &biguint64_elements}; - int32_t elements_kinds[] = { - UINT8_ELEMENTS, UINT8_CLAMPED_ELEMENTS, INT8_ELEMENTS, - UINT16_ELEMENTS, INT16_ELEMENTS, UINT32_ELEMENTS, - INT32_ELEMENTS, FLOAT32_ELEMENTS, FLOAT64_ELEMENTS, - BIGINT64_ELEMENTS, BIGUINT64_ELEMENTS}; - const size_t kTypedElementsKindCount = - LAST_FIXED_TYPED_ARRAY_ELEMENTS_KIND - - FIRST_FIXED_TYPED_ARRAY_ELEMENTS_KIND + 1; - DCHECK_EQ(kTypedElementsKindCount, arraysize(elements_kinds)); - DCHECK_EQ(kTypedElementsKindCount, arraysize(elements_kind_labels)); - Switch(elements_kind, miss, elements_kinds, elements_kind_labels, - kTypedElementsKindCount); + TVARIABLE(RawPtrT, data_ptr); + BIND(&if_rab_gsab_typed_array); + { + Comment("rab gsab typed elements"); + Label variable_length(this), normal(this), length_check_ok(this); + + TNode<JSTypedArray> array = CAST(object); + TNode<JSArrayBuffer> buffer = LoadJSArrayBufferViewBuffer(array); + + // Bounds check (incl. detachedness check). + TNode<UintPtrT> length = + LoadVariableLengthJSTypedArrayLength(array, buffer, miss); + Branch(UintPtrLessThan(intptr_index, length), &length_check_ok, + out_of_bounds); + BIND(&length_check_ok); + { + if (access_mode == LoadAccessMode::kHas) { + exit_point->Return(TrueConstant()); + } else { + data_ptr = LoadJSTypedArrayDataPtr(array); + Label* elements_kind_labels[] = { + &uint8_elements, &uint8_elements, &int8_elements, + &uint16_elements, &int16_elements, &uint32_elements, + &int32_elements, &float32_elements, &float64_elements, + &bigint64_elements, &biguint64_elements}; + int32_t elements_kinds[] = { + RAB_GSAB_UINT8_ELEMENTS, RAB_GSAB_UINT8_CLAMPED_ELEMENTS, + RAB_GSAB_INT8_ELEMENTS, RAB_GSAB_UINT16_ELEMENTS, + RAB_GSAB_INT16_ELEMENTS, RAB_GSAB_UINT32_ELEMENTS, + RAB_GSAB_INT32_ELEMENTS, RAB_GSAB_FLOAT32_ELEMENTS, + RAB_GSAB_FLOAT64_ELEMENTS, RAB_GSAB_BIGINT64_ELEMENTS, + RAB_GSAB_BIGUINT64_ELEMENTS}; + const size_t kTypedElementsKindCount = + LAST_RAB_GSAB_FIXED_TYPED_ARRAY_ELEMENTS_KIND - + FIRST_RAB_GSAB_FIXED_TYPED_ARRAY_ELEMENTS_KIND + 1; + DCHECK_EQ(kTypedElementsKindCount, arraysize(elements_kinds)); + DCHECK_EQ(kTypedElementsKindCount, arraysize(elements_kind_labels)); + Switch(elements_kind, miss, elements_kinds, elements_kind_labels, + kTypedElementsKindCount); + } + } + } + BIND(&if_typed_array); + { + Comment("typed elements"); + // Check if buffer has been detached. + TNode<JSArrayBuffer> buffer = LoadJSArrayBufferViewBuffer(CAST(object)); + GotoIf(IsDetachedBuffer(buffer), miss); + + // Bounds check. + TNode<UintPtrT> length = LoadJSTypedArrayLength(CAST(object)); + GotoIfNot(UintPtrLessThan(intptr_index, length), out_of_bounds); + if (access_mode == LoadAccessMode::kHas) { + exit_point->Return(TrueConstant()); + } else { + data_ptr = LoadJSTypedArrayDataPtr(CAST(object)); + + Label* elements_kind_labels[] = { + &uint8_elements, &uint8_elements, &int8_elements, + &uint16_elements, &int16_elements, &uint32_elements, + &int32_elements, &float32_elements, &float64_elements, + &bigint64_elements, &biguint64_elements}; + int32_t elements_kinds[] = { + UINT8_ELEMENTS, UINT8_CLAMPED_ELEMENTS, INT8_ELEMENTS, + UINT16_ELEMENTS, INT16_ELEMENTS, UINT32_ELEMENTS, + INT32_ELEMENTS, FLOAT32_ELEMENTS, FLOAT64_ELEMENTS, + BIGINT64_ELEMENTS, BIGUINT64_ELEMENTS}; + const size_t kTypedElementsKindCount = + LAST_FIXED_TYPED_ARRAY_ELEMENTS_KIND - + FIRST_FIXED_TYPED_ARRAY_ELEMENTS_KIND + 1; + DCHECK_EQ(kTypedElementsKindCount, arraysize(elements_kinds)); + DCHECK_EQ(kTypedElementsKindCount, arraysize(elements_kind_labels)); + Switch(elements_kind, miss, elements_kinds, elements_kind_labels, + kTypedElementsKindCount); + } + } + if (access_mode != LoadAccessMode::kHas) { BIND(&uint8_elements); { Comment("UINT8_ELEMENTS"); // Handles UINT8_CLAMPED_ELEMENTS too. - TNode<Int32T> element = Load<Uint8T>(data_ptr, intptr_index); + TNode<Int32T> element = Load<Uint8T>(data_ptr.value(), intptr_index); exit_point->Return(SmiFromInt32(element)); } BIND(&int8_elements); { Comment("INT8_ELEMENTS"); - TNode<Int32T> element = Load<Int8T>(data_ptr, intptr_index); + TNode<Int32T> element = Load<Int8T>(data_ptr.value(), intptr_index); exit_point->Return(SmiFromInt32(element)); } BIND(&uint16_elements); { Comment("UINT16_ELEMENTS"); TNode<IntPtrT> index = WordShl(intptr_index, IntPtrConstant(1)); - TNode<Int32T> element = Load<Uint16T>(data_ptr, index); + TNode<Int32T> element = Load<Uint16T>(data_ptr.value(), index); exit_point->Return(SmiFromInt32(element)); } BIND(&int16_elements); { Comment("INT16_ELEMENTS"); TNode<IntPtrT> index = WordShl(intptr_index, IntPtrConstant(1)); - TNode<Int32T> element = Load<Int16T>(data_ptr, index); + TNode<Int32T> element = Load<Int16T>(data_ptr.value(), index); exit_point->Return(SmiFromInt32(element)); } BIND(&uint32_elements); { Comment("UINT32_ELEMENTS"); TNode<IntPtrT> index = WordShl(intptr_index, IntPtrConstant(2)); - TNode<Uint32T> element = Load<Uint32T>(data_ptr, index); + TNode<Uint32T> element = Load<Uint32T>(data_ptr.value(), index); exit_point->Return(ChangeUint32ToTagged(element)); } BIND(&int32_elements); { Comment("INT32_ELEMENTS"); TNode<IntPtrT> index = WordShl(intptr_index, IntPtrConstant(2)); - TNode<Int32T> element = Load<Int32T>(data_ptr, index); + TNode<Int32T> element = Load<Int32T>(data_ptr.value(), index); exit_point->Return(ChangeInt32ToTagged(element)); } BIND(&float32_elements); { Comment("FLOAT32_ELEMENTS"); TNode<IntPtrT> index = WordShl(intptr_index, IntPtrConstant(2)); - TNode<Float32T> element = Load<Float32T>(data_ptr, index); + TNode<Float32T> element = Load<Float32T>(data_ptr.value(), index); *var_double_value = ChangeFloat32ToFloat64(element); Goto(rebox_double); } @@ -2234,7 +2345,7 @@ void AccessorAssembler::EmitElementLoad( { Comment("FLOAT64_ELEMENTS"); TNode<IntPtrT> index = WordShl(intptr_index, IntPtrConstant(3)); - TNode<Float64T> element = Load<Float64T>(data_ptr, index); + TNode<Float64T> element = Load<Float64T>(data_ptr.value(), index); *var_double_value = element; Goto(rebox_double); } @@ -2242,13 +2353,13 @@ void AccessorAssembler::EmitElementLoad( { Comment("BIGINT64_ELEMENTS"); exit_point->Return(LoadFixedTypedArrayElementAsTagged( - data_ptr, Unsigned(intptr_index), BIGINT64_ELEMENTS)); + data_ptr.value(), Unsigned(intptr_index), BIGINT64_ELEMENTS)); } BIND(&biguint64_elements); { Comment("BIGUINT64_ELEMENTS"); exit_point->Return(LoadFixedTypedArrayElementAsTagged( - data_ptr, Unsigned(intptr_index), BIGUINT64_ELEMENTS)); + data_ptr.value(), Unsigned(intptr_index), BIGUINT64_ELEMENTS)); } } } @@ -2460,7 +2571,7 @@ void AccessorAssembler::GenericPropertyLoad( { TNode<Object> value = CallGetterIfAccessor( var_value.value(), lookup_start_object, var_details.value(), - p->context(), p->receiver(), slow); + p->context(), p->receiver(), p->name(), slow); IncrementCounter(isolate()->counters()->ic_keyed_load_generic_symbol(), 1); Return(value); } @@ -2864,11 +2975,23 @@ void AccessorAssembler::LoadIC_Noninlined(const LoadICParameters* p, DCHECK_EQ(MachineRepresentation::kTagged, var_handler->rep()); { - // Check megamorphic case. - GotoIfNot(TaggedEqual(feedback, MegamorphicSymbolConstant()), miss); + Label try_megamorphic(this), try_megadom(this); + GotoIf(TaggedEqual(feedback, MegamorphicSymbolConstant()), + &try_megamorphic); + GotoIf(TaggedEqual(feedback, MegaDOMSymbolConstant()), &try_megadom); + Goto(miss); - TryProbeStubCache(isolate()->load_stub_cache(), p->lookup_start_object(), - CAST(p->name()), if_handler, var_handler, miss); + BIND(&try_megamorphic); + { + TryProbeStubCache(isolate()->load_stub_cache(), p->lookup_start_object(), + CAST(p->name()), if_handler, var_handler, miss); + } + + BIND(&try_megadom); + { + TryMegaDOMCase(p->lookup_start_object(), lookup_start_object_map, + var_handler, p->vector(), p->slot(), miss, exit_point); + } } } @@ -2964,7 +3087,7 @@ void AccessorAssembler::LoadGlobalIC(TNode<HeapObject> maybe_feedback_vector, BIND(&no_feedback); { int ic_kind = - static_cast<int>((typeof_mode == INSIDE_TYPEOF) + static_cast<int>((typeof_mode == TypeofMode::kInside) ? FeedbackSlotKind::kLoadGlobalInsideTypeof : FeedbackSlotKind::kLoadGlobalNotInsideTypeof); exit_point->ReturnCallStub( @@ -3023,7 +3146,7 @@ void AccessorAssembler::LoadGlobalIC_TryHandlerCase( TNode<Object> handler = CAST(feedback_element); GotoIf(TaggedEqual(handler, UninitializedSymbolConstant()), miss); - OnNonExistent on_nonexistent = typeof_mode == NOT_INSIDE_TYPEOF + OnNonExistent on_nonexistent = typeof_mode == TypeofMode::kNotInside ? OnNonExistent::kThrowReferenceError : OnNonExistent::kReturnUndefined; @@ -3958,7 +4081,7 @@ void AccessorAssembler::GenerateLookupContextBaseline(TypeofMode typeof_mode) { BIND(&slowpath); { auto name = Parameter<Object>(Descriptor::kName); - Runtime::FunctionId function_id = typeof_mode == INSIDE_TYPEOF + Runtime::FunctionId function_id = typeof_mode == TypeofMode::kInside ? Runtime::kLoadLookupSlotInsideTypeof : Runtime::kLoadLookupSlot; TailCallRuntime(function_id, context, name); @@ -3990,7 +4113,7 @@ void AccessorAssembler::GenerateLookupGlobalICBaseline(TypeofMode typeof_mode) { // Slow path when we have to call out to the runtime BIND(&slowpath); - Runtime::FunctionId function_id = typeof_mode == INSIDE_TYPEOF + Runtime::FunctionId function_id = typeof_mode == TypeofMode::kInside ? Runtime::kLoadLookupSlotInsideTypeof : Runtime::kLoadLookupSlot; TailCallRuntime(function_id, context, name); diff --git a/deps/v8/src/ic/accessor-assembler.h b/deps/v8/src/ic/accessor-assembler.h index 79f8181af4..9aa15ae1b8 100644 --- a/deps/v8/src/ic/accessor-assembler.h +++ b/deps/v8/src/ic/accessor-assembler.h @@ -311,6 +311,12 @@ class V8_EXPORT_PRIVATE AccessorAssembler : public CodeStubAssembler { TVariable<MaybeObject>* var_handler, Label* if_miss); + void TryMegaDOMCase(TNode<Object> lookup_start_object, + TNode<Map> lookup_start_object_map, + TVariable<MaybeObject>* var_handler, TNode<Object> vector, + TNode<TaggedIndex> slot, Label* miss, + ExitPoint* exit_point); + // LoadIC implementation. void HandleLoadICHandlerCase( const LazyLoadICParameters* p, TNode<Object> handler, Label* miss, diff --git a/deps/v8/src/ic/call-optimization.cc b/deps/v8/src/ic/call-optimization.cc index 6521e83193..4cfd1464be 100644 --- a/deps/v8/src/ic/call-optimization.cc +++ b/deps/v8/src/ic/call-optimization.cc @@ -8,11 +8,8 @@ namespace v8 { namespace internal { -CallOptimization::CallOptimization(Isolate* isolate, Handle<Object> function) { - constant_function_ = Handle<JSFunction>::null(); - is_simple_api_call_ = false; - expected_receiver_type_ = Handle<FunctionTemplateInfo>::null(); - api_call_info_ = Handle<CallHandlerInfo>::null(); +template <class IsolateT> +CallOptimization::CallOptimization(IsolateT* isolate, Handle<Object> function) { if (function->IsJSFunction()) { Initialize(isolate, Handle<JSFunction>::cast(function)); } else if (function->IsFunctionTemplateInfo()) { @@ -20,6 +17,12 @@ CallOptimization::CallOptimization(Isolate* isolate, Handle<Object> function) { } } +// Instantiations. +template CallOptimization::CallOptimization(Isolate* isolate, + Handle<Object> function); +template CallOptimization::CallOptimization(LocalIsolate* isolate, + Handle<Object> function); + Context CallOptimization::GetAccessorContext(Map holder_map) const { if (is_constant_call()) { return constant_function_->context().native_context(); @@ -35,8 +38,10 @@ bool CallOptimization::IsCrossContextLazyAccessorPair(Context native_context, return native_context != GetAccessorContext(holder_map); } +template <class IsolateT> Handle<JSObject> CallOptimization::LookupHolderOfExpectedType( - Handle<Map> object_map, HolderLookup* holder_lookup) const { + IsolateT* isolate, Handle<Map> object_map, + HolderLookup* holder_lookup) const { DCHECK(is_simple_api_call()); if (!object_map->IsJSObjectMap()) { *holder_lookup = kHolderNotFound; @@ -49,8 +54,8 @@ Handle<JSObject> CallOptimization::LookupHolderOfExpectedType( } if (object_map->IsJSGlobalProxyMap() && !object_map->prototype().IsNull()) { JSObject raw_prototype = JSObject::cast(object_map->prototype()); - Handle<JSObject> prototype(raw_prototype, raw_prototype.GetIsolate()); - object_map = handle(prototype->map(), prototype->GetIsolate()); + Handle<JSObject> prototype(raw_prototype, isolate); + object_map = handle(prototype->map(), isolate); if (expected_receiver_type_->IsTemplateFor(*object_map)) { *holder_lookup = kHolderFound; return prototype; @@ -60,6 +65,14 @@ Handle<JSObject> CallOptimization::LookupHolderOfExpectedType( return Handle<JSObject>::null(); } +// Instantiations. +template Handle<JSObject> CallOptimization::LookupHolderOfExpectedType( + Isolate* isolate, Handle<Map> object_map, + HolderLookup* holder_lookup) const; +template Handle<JSObject> CallOptimization::LookupHolderOfExpectedType( + LocalIsolate* isolate, Handle<Map> object_map, + HolderLookup* holder_lookup) const; + bool CallOptimization::IsCompatibleReceiverMap( Handle<JSObject> api_holder, Handle<JSObject> holder, HolderLookup holder_lookup) const { @@ -86,8 +99,9 @@ bool CallOptimization::IsCompatibleReceiverMap( UNREACHABLE(); } +template <class IsolateT> void CallOptimization::Initialize( - Isolate* isolate, Handle<FunctionTemplateInfo> function_template_info) { + IsolateT* isolate, Handle<FunctionTemplateInfo> function_template_info) { HeapObject call_code = function_template_info->call_code(kAcquireLoad); if (call_code.IsUndefined(isolate)) return; api_call_info_ = handle(CallHandlerInfo::cast(call_code), isolate); @@ -98,9 +112,11 @@ void CallOptimization::Initialize( handle(FunctionTemplateInfo::cast(signature), isolate); } is_simple_api_call_ = true; + accept_any_receiver_ = function_template_info->accept_any_receiver(); } -void CallOptimization::Initialize(Isolate* isolate, +template <class IsolateT> +void CallOptimization::Initialize(IsolateT* isolate, Handle<JSFunction> function) { if (function.is_null() || !function->is_compiled()) return; @@ -108,7 +124,8 @@ void CallOptimization::Initialize(Isolate* isolate, AnalyzePossibleApiFunction(isolate, function); } -void CallOptimization::AnalyzePossibleApiFunction(Isolate* isolate, +template <class IsolateT> +void CallOptimization::AnalyzePossibleApiFunction(IsolateT* isolate, Handle<JSFunction> function) { if (!function->shared().IsApiFunction()) return; Handle<FunctionTemplateInfo> info(function->shared().get_api_func_data(), @@ -125,6 +142,7 @@ void CallOptimization::AnalyzePossibleApiFunction(Isolate* isolate, } is_simple_api_call_ = true; + accept_any_receiver_ = info->accept_any_receiver(); } } // namespace internal } // namespace v8 diff --git a/deps/v8/src/ic/call-optimization.h b/deps/v8/src/ic/call-optimization.h index b6d49a1bf9..ca5c8aa7ef 100644 --- a/deps/v8/src/ic/call-optimization.h +++ b/deps/v8/src/ic/call-optimization.h @@ -10,16 +10,22 @@ namespace v8 { namespace internal { + // Holds information about possible function call optimizations. class CallOptimization { public: - CallOptimization(Isolate* isolate, Handle<Object> function); + template <class IsolateT> + CallOptimization(IsolateT* isolate, Handle<Object> function); Context GetAccessorContext(Map holder_map) const; bool IsCrossContextLazyAccessorPair(Context native_context, Map holder_map) const; bool is_constant_call() const { return !constant_function_.is_null(); } + bool accept_any_receiver() const { return accept_any_receiver_; } + bool requires_signature_check() const { + return !expected_receiver_type_.is_null(); + } Handle<JSFunction> constant_function() const { DCHECK(is_constant_call()); @@ -39,27 +45,38 @@ class CallOptimization { } enum HolderLookup { kHolderNotFound, kHolderIsReceiver, kHolderFound }; + + template <class IsolateT> Handle<JSObject> LookupHolderOfExpectedType( - Handle<Map> receiver_map, HolderLookup* holder_lookup) const; + IsolateT* isolate, Handle<Map> receiver_map, + HolderLookup* holder_lookup) const; bool IsCompatibleReceiverMap(Handle<JSObject> api_holder, Handle<JSObject> holder, HolderLookup) const; private: - void Initialize(Isolate* isolate, Handle<JSFunction> function); - void Initialize(Isolate* isolate, + template <class IsolateT> + void Initialize(IsolateT* isolate, Handle<JSFunction> function); + template <class IsolateT> + void Initialize(IsolateT* isolate, Handle<FunctionTemplateInfo> function_template_info); // Determines whether the given function can be called using the // fast api call builtin. - void AnalyzePossibleApiFunction(Isolate* isolate, + template <class IsolateT> + void AnalyzePossibleApiFunction(IsolateT* isolate, Handle<JSFunction> function); Handle<JSFunction> constant_function_; - bool is_simple_api_call_; Handle<FunctionTemplateInfo> expected_receiver_type_; Handle<CallHandlerInfo> api_call_info_; + + // TODO(gsathya): Change these to be a bitfield and do a single fast check + // rather than two checks. + bool is_simple_api_call_ = false; + bool accept_any_receiver_ = false; }; + } // namespace internal } // namespace v8 diff --git a/deps/v8/src/ic/ic.cc b/deps/v8/src/ic/ic.cc index 81e31d1c2d..09f1815c1c 100644 --- a/deps/v8/src/ic/ic.cc +++ b/deps/v8/src/ic/ic.cc @@ -33,6 +33,7 @@ #include "src/objects/heap-number-inl.h" #include "src/objects/js-array-buffer-inl.h" #include "src/objects/js-array-inl.h" +#include "src/objects/megadom-handler.h" #include "src/objects/module-inl.h" #include "src/objects/prototype.h" #include "src/objects/struct-inl.h" @@ -59,6 +60,8 @@ char IC::TransitionMarkFromState(IC::State state) { return 'P'; case MEGAMORPHIC: return 'N'; + case MEGADOM: + return 'D'; case GENERIC: return 'G'; } @@ -519,9 +522,12 @@ MaybeHandle<Object> LoadGlobalIC::Load(Handle<Name> name, bool use_ic = (state() != NO_FEEDBACK) && FLAG_use_ic && update_feedback; if (use_ic) { + // 'const' Variables are mutable if REPL mode is enabled. This disables + // compiler inlining for all 'const' variables declared in REPL mode. if (nexus()->ConfigureLexicalVarMode( lookup_result.context_index, lookup_result.slot_index, - lookup_result.mode == VariableMode::kConst)) { + (lookup_result.mode == VariableMode::kConst && + !lookup_result.is_repl_mode))) { TRACE_HANDLER_STATS(isolate(), LoadGlobalIC_LoadScriptContextField); } else { // Given combination of indices can't be encoded, so use slow stub. @@ -566,6 +572,55 @@ static bool AddOneReceiverMapIfMissing( return true; } +bool IC::UpdateMegaDOMIC(const MaybeObjectHandle& handler, Handle<Name> name) { + if (!FLAG_enable_mega_dom_ic) return false; + + // TODO(gsathya): Enable fuzzing once this feature is more stable. + if (FLAG_fuzzing) return false; + + // TODO(gsathya): Support KeyedLoadIC, StoreIC and KeyedStoreIC. + if (!IsLoadIC()) return false; + + // Check if DOM protector cell is valid. + if (!Protectors::IsMegaDOMIntact(isolate())) return false; + + // Check if current lookup object is an API object + Handle<Map> map = lookup_start_object_map(); + if (!InstanceTypeChecker::IsJSApiObject(map->instance_type())) return false; + + Handle<Object> accessor_obj; + // TODO(gsathya): Check if there are overloads possible for this accessor and + // transition only if it isn't possible. + if (!accessor().ToHandle(&accessor_obj)) return false; + + // TODO(gsathya): This is also created in IC::ComputeHandler, find a way to + // reuse it here. + CallOptimization call_optimization(isolate(), accessor_obj); + + // Check if accessor is an API function + if (!call_optimization.is_simple_api_call()) return false; + + // Check if accessor requires access checks + if (call_optimization.accept_any_receiver()) return false; + + // Check if accessor requires signature checks + if (!call_optimization.requires_signature_check()) return false; + + // Check if the receiver is the holder + CallOptimization::HolderLookup holder_lookup; + call_optimization.LookupHolderOfExpectedType(isolate(), map, &holder_lookup); + if (holder_lookup != CallOptimization::kHolderIsReceiver) return false; + + Handle<Context> accessor_context(call_optimization.GetAccessorContext(*map), + isolate()); + + Handle<MegaDomHandler> new_handler = isolate()->factory()->NewMegaDomHandler( + MaybeObjectHandle::Weak(accessor_obj), + MaybeObjectHandle::Weak(accessor_context)); + nexus()->ConfigureMegaDOM(MaybeObjectHandle(new_handler)); + return true; +} + bool IC::UpdatePolymorphicIC(Handle<Name> name, const MaybeObjectHandle& handler) { DCHECK(IsHandler(*handler)); @@ -703,9 +758,12 @@ void IC::SetCache(Handle<Name> name, const MaybeObjectHandle& handler) { V8_FALLTHROUGH; case POLYMORPHIC: if (UpdatePolymorphicIC(name, handler)) break; + if (UpdateMegaDOMIC(handler, name)) break; if (!is_keyed() || state() == RECOMPUTE_HANDLER) { CopyICToMegamorphicCache(name); } + V8_FALLTHROUGH; + case MEGADOM: ConfigureVectorState(MEGAMORPHIC, name); V8_FALLTHROUGH; case MEGAMORPHIC: @@ -719,23 +777,20 @@ void IC::SetCache(Handle<Name> name, const MaybeObjectHandle& handler) { } void LoadIC::UpdateCaches(LookupIterator* lookup) { - Handle<Object> code; + Handle<Object> handler; if (lookup->state() == LookupIterator::ACCESS_CHECK) { - code = LoadHandler::LoadSlow(isolate()); + handler = LoadHandler::LoadSlow(isolate()); } else if (!lookup->IsFound()) { TRACE_HANDLER_STATS(isolate(), LoadIC_LoadNonexistentDH); Handle<Smi> smi_handler = LoadHandler::LoadNonExistent(isolate()); - code = LoadHandler::LoadFullChain( + handler = LoadHandler::LoadFullChain( isolate(), lookup_start_object_map(), MaybeObjectHandle(isolate()->factory()->null_value()), smi_handler); } else if (IsLoadGlobalIC() && lookup->state() == LookupIterator::JSPROXY) { // If there is proxy just install the slow stub since we need to call the // HasProperty trap for global loads. The ProxyGetProperty builtin doesn't // handle this case. - Handle<Smi> slow_handler = LoadHandler::LoadSlow(isolate()); - Handle<JSProxy> holder = lookup->GetHolder<JSProxy>(); - code = LoadHandler::LoadFromPrototype(isolate(), lookup_start_object_map(), - holder, slow_handler); + handler = LoadHandler::LoadSlow(isolate()); } else { if (IsLoadGlobalIC()) { if (lookup->TryLookupCachedProperty()) { @@ -750,12 +805,12 @@ void LoadIC::UpdateCaches(LookupIterator* lookup) { return; } } - code = ComputeHandler(lookup); + handler = ComputeHandler(lookup); } // Can't use {lookup->name()} because the LookupIterator might be in // "elements" mode for keys that are strings representing integers above // JSArray::kMaxIndex. - SetCache(lookup->GetName(), code); + SetCache(lookup->GetName(), handler); TraceIC("LoadIC", lookup->GetName()); } @@ -877,6 +932,7 @@ Handle<Object> LoadIC::ComputeHandler(LookupIterator* lookup) { TRACE_HANDLER_STATS(isolate(), LoadIC_SlowStub); return LoadHandler::LoadSlow(isolate()); } + set_accessor(getter); if ((getter->IsFunctionTemplateInfo() && FunctionTemplateInfo::cast(*getter).BreakAtEntry()) || @@ -893,7 +949,8 @@ Handle<Object> LoadIC::ComputeHandler(LookupIterator* lookup) { if (call_optimization.is_simple_api_call()) { CallOptimization::HolderLookup holder_lookup; Handle<JSObject> api_holder = - call_optimization.LookupHolderOfExpectedType(map, &holder_lookup); + call_optimization.LookupHolderOfExpectedType(isolate(), map, + &holder_lookup); if (!call_optimization.IsCompatibleReceiverMap(api_holder, holder, holder_lookup) || @@ -1209,7 +1266,7 @@ Handle<Object> KeyedLoadIC::LoadElementHandler(Handle<Map> receiver_map, } DCHECK(IsFastElementsKind(elements_kind) || IsAnyNonextensibleElementsKind(elements_kind) || - IsTypedArrayElementsKind(elements_kind)); + IsTypedArrayOrRabGsabTypedArrayElementsKind(elements_kind)); bool convert_hole_to_undefined = (elements_kind == HOLEY_SMI_ELEMENTS || elements_kind == HOLEY_ELEMENTS) && @@ -1325,7 +1382,7 @@ bool IsOutOfBoundsAccess(Handle<Object> receiver, size_t index) { if (receiver->IsJSArray()) { length = JSArray::cast(*receiver).length().Number(); } else if (receiver->IsJSTypedArray()) { - length = JSTypedArray::cast(*receiver).length(); + length = JSTypedArray::cast(*receiver).GetLength(); } else if (receiver->IsJSObject()) { length = JSObject::cast(*receiver).elements().length(); } else if (receiver->IsString()) { @@ -1756,7 +1813,7 @@ MaybeObjectHandle StoreIC::ComputeHandler(LookupIterator* lookup) { CallOptimization::HolderLookup holder_lookup; Handle<JSObject> api_holder = call_optimization.LookupHolderOfExpectedType( - lookup_start_object_map(), &holder_lookup); + isolate(), lookup_start_object_map(), &holder_lookup); if (call_optimization.IsCompatibleReceiverMap(api_holder, holder, holder_lookup)) { Handle<Smi> smi_handler = StoreHandler::StoreApiSetter( @@ -1975,7 +2032,7 @@ void KeyedStoreIC::UpdateStoreElement(Handle<Map> receiver_map, "unsupported combination of arrays (potentially read-only length)"); return; - } else if (map->has_typed_array_elements()) { + } else if (map->has_typed_array_or_rab_gsab_typed_array_elements()) { DCHECK(!IsStoreInArrayLiteralICKind(kind())); external_arrays++; } @@ -2029,7 +2086,9 @@ Handle<Object> KeyedStoreIC::StoreElementHandler( receiver_map->has_typed_array_elements()) { TRACE_HANDLER_STATS(isolate(), KeyedStoreIC_StoreFastElementStub); code = CodeFactory::StoreFastElementIC(isolate(), store_mode).code(); - if (receiver_map->has_typed_array_elements()) return code; + if (receiver_map->has_typed_array_elements()) { + return code; + } } else if (IsStoreInArrayLiteralICKind(kind())) { // TODO(jgruber): Update counter name. TRACE_HANDLER_STATS(isolate(), StoreInArrayLiteralIC_SlowStub); @@ -2038,7 +2097,9 @@ Handle<Object> KeyedStoreIC::StoreElementHandler( // TODO(jgruber): Update counter name. TRACE_HANDLER_STATS(isolate(), KeyedStoreIC_StoreElementStub); DCHECK(DICTIONARY_ELEMENTS == receiver_map->elements_kind() || - receiver_map->has_frozen_elements()); + receiver_map->has_frozen_elements() || + receiver_map->has_rab_gsab_typed_array_elements()); + // TODO(v8:11111): Add fast paths for RAB / GSAB. code = StoreHandler::StoreSlow(isolate(), store_mode); } @@ -2416,7 +2477,7 @@ RUNTIME_FUNCTION(Runtime_LoadGlobalIC_Miss) { vector = Handle<FeedbackVector>::cast(maybe_vector); } - FeedbackSlotKind kind = (typeof_mode == TypeofMode::INSIDE_TYPEOF) + FeedbackSlotKind kind = (typeof_mode == TypeofMode::kInside) ? FeedbackSlotKind::kLoadGlobalInsideTypeof : FeedbackSlotKind::kLoadGlobalNotInsideTypeof; LoadGlobalIC ic(isolate, vector, vector_slot, kind); diff --git a/deps/v8/src/ic/ic.h b/deps/v8/src/ic/ic.h index 170ee609cb..ddac48e38e 100644 --- a/deps/v8/src/ic/ic.h +++ b/deps/v8/src/ic/ic.h @@ -67,6 +67,8 @@ class IC { protected: void set_slow_stub_reason(const char* reason) { slow_stub_reason_ = reason; } + void set_accessor(Handle<Object> accessor) { accessor_ = accessor; } + MaybeHandle<Object> accessor() const { return accessor_; } Isolate* isolate() const { return isolate_; } @@ -96,6 +98,7 @@ class IC { MaybeHandle<Object> ReferenceError(Handle<Name> name); void UpdateMonomorphicIC(const MaybeObjectHandle& handler, Handle<Name> name); + bool UpdateMegaDOMIC(const MaybeObjectHandle& handler, Handle<Name> name); bool UpdatePolymorphicIC(Handle<Name> name, const MaybeObjectHandle& handler); void UpdateMegamorphicCache(Handle<Map> map, Handle<Name> name, const MaybeObjectHandle& handler); @@ -154,7 +157,7 @@ class IC { State state_; FeedbackSlotKind kind_; Handle<Map> lookup_start_object_map_; - + MaybeHandle<Object> accessor_; MapHandles target_maps_; bool target_maps_set_; diff --git a/deps/v8/src/ic/keyed-store-generic.cc b/deps/v8/src/ic/keyed-store-generic.cc index b07ea64483..8218d3d521 100644 --- a/deps/v8/src/ic/keyed-store-generic.cc +++ b/deps/v8/src/ic/keyed-store-generic.cc @@ -568,7 +568,8 @@ void KeyedStoreGenericAssembler::EmitGenericElementStore( // dispatch. BIND(&if_nonfast); { - STATIC_ASSERT(LAST_ELEMENTS_KIND == LAST_FIXED_TYPED_ARRAY_ELEMENTS_KIND); + STATIC_ASSERT(LAST_ELEMENTS_KIND == + LAST_RAB_GSAB_FIXED_TYPED_ARRAY_ELEMENTS_KIND); GotoIf(Int32GreaterThanOrEqual( elements_kind, Int32Constant(FIRST_FIXED_TYPED_ARRAY_ELEMENTS_KIND)), @@ -588,7 +589,8 @@ void KeyedStoreGenericAssembler::EmitGenericElementStore( BIND(&if_typed_array); { Comment("Typed array"); - // TODO(jkummerow): Support typed arrays. + // TODO(jkummerow): Support typed arrays. Note: RAB / GSAB backed typed + // arrays end up here too. Goto(slow); } } diff --git a/deps/v8/src/init/bootstrapper.cc b/deps/v8/src/init/bootstrapper.cc index 9cd514f8d9..1f00716b63 100644 --- a/deps/v8/src/init/bootstrapper.cc +++ b/deps/v8/src/init/bootstrapper.cc @@ -235,6 +235,8 @@ class Genesis { enum ArrayBufferKind { ARRAY_BUFFER, SHARED_ARRAY_BUFFER, + RESIZABLE_ARRAY_BUFFER, + GROWABLE_SHARED_ARRAY_BUFFER }; Handle<JSFunction> CreateArrayBuffer(Handle<String> name, ArrayBufferKind array_buffer_kind); @@ -244,7 +246,8 @@ class Genesis { Handle<JSFunction> InstallTypedArray(const char* name, ElementsKind elements_kind, - InstanceType type); + InstanceType type, + int rab_gsab_initial_map_index); void InitializeNormalizedMapCaches(); enum ExtensionTraversalState { UNVISITED, VISITED, INSTALLED }; @@ -364,7 +367,8 @@ void Bootstrapper::DetachGlobal(Handle<Context> env) { ReadOnlyRoots roots(isolate_); Handle<JSGlobalProxy> global_proxy(env->global_proxy(), isolate_); global_proxy->set_native_context(roots.null_value()); - JSObject::ForceSetPrototype(global_proxy, isolate_->factory()->null_value()); + JSObject::ForceSetPrototype(isolate_, global_proxy, + isolate_->factory()->null_value()); global_proxy->map().SetConstructor(roots.null_value()); if (FLAG_track_detached_contexts) { isolate_->AddDetachedContext(env); @@ -921,10 +925,11 @@ void Genesis::CreateIteratorMaps(Handle<JSFunction> empty) { isolate()->object_function(), AllocationType::kOld); native_context()->set_initial_generator_prototype( *generator_object_prototype); - JSObject::ForceSetPrototype(generator_object_prototype, iterator_prototype); + JSObject::ForceSetPrototype(isolate(), generator_object_prototype, + iterator_prototype); Handle<JSObject> generator_function_prototype = factory()->NewJSObject( isolate()->object_function(), AllocationType::kOld); - JSObject::ForceSetPrototype(generator_function_prototype, empty); + JSObject::ForceSetPrototype(isolate(), generator_function_prototype, empty); InstallToStringTag(isolate(), generator_function_prototype, "GeneratorFunction"); @@ -1032,7 +1037,7 @@ void Genesis::CreateAsyncIteratorMaps(Handle<JSFunction> empty) { InstallToStringTag(isolate(), async_from_sync_iterator_prototype, "Async-from-Sync Iterator"); - JSObject::ForceSetPrototype(async_from_sync_iterator_prototype, + JSObject::ForceSetPrototype(isolate(), async_from_sync_iterator_prototype, async_iterator_prototype); Handle<Map> async_from_sync_iterator_map = factory()->NewMap( @@ -1049,7 +1054,8 @@ void Genesis::CreateAsyncIteratorMaps(Handle<JSFunction> empty) { isolate()->object_function(), AllocationType::kOld); // %AsyncGenerator% / %AsyncGeneratorFunction%.prototype - JSObject::ForceSetPrototype(async_generator_function_prototype, empty); + JSObject::ForceSetPrototype(isolate(), async_generator_function_prototype, + empty); // The value of AsyncGeneratorFunction.prototype.prototype is the // %AsyncGeneratorPrototype% intrinsic object. @@ -1067,7 +1073,7 @@ void Genesis::CreateAsyncIteratorMaps(Handle<JSFunction> empty) { "AsyncGeneratorFunction"); // %AsyncGeneratorPrototype% - JSObject::ForceSetPrototype(async_generator_object_prototype, + JSObject::ForceSetPrototype(isolate(), async_generator_object_prototype, async_iterator_prototype); native_context()->set_initial_async_generator_prototype( *async_generator_object_prototype); @@ -1110,7 +1116,7 @@ void Genesis::CreateAsyncFunctionMaps(Handle<JSFunction> empty) { // %AsyncFunctionPrototype% intrinsic Handle<JSObject> async_function_prototype = factory()->NewJSObject( isolate()->object_function(), AllocationType::kOld); - JSObject::ForceSetPrototype(async_function_prototype, empty); + JSObject::ForceSetPrototype(isolate(), async_function_prototype, empty); InstallToStringTag(isolate(), async_function_prototype, "AsyncFunction"); @@ -1367,7 +1373,7 @@ void Genesis::HookUpGlobalProxy(Handle<JSGlobalProxy> global_proxy) { factory()->ReinitializeJSGlobalProxy(global_proxy, global_proxy_function); Handle<JSObject> global_object( JSObject::cast(native_context()->global_object()), isolate()); - JSObject::ForceSetPrototype(global_proxy, global_object); + JSObject::ForceSetPrototype(isolate(), global_proxy, global_object); global_proxy->set_native_context(*native_context()); DCHECK(native_context()->global_proxy() == *global_proxy); } @@ -1394,7 +1400,8 @@ static void InstallWithIntrinsicDefaultProto(Isolate* isolate, JSObject::AddProperty(isolate, function, isolate->factory()->native_context_index_symbol(), index, NONE); - isolate->native_context()->set(context_index, *function); + isolate->native_context()->set(context_index, *function, UPDATE_WRITE_BARRIER, + kReleaseStore); } static void InstallError( @@ -1404,6 +1411,11 @@ static void InstallError( int error_function_length = 1, int in_object_properties = 2) { Factory* factory = isolate->factory(); + if (FLAG_harmony_error_cause) { + error_function_length += 1; + in_object_properties += 1; + } + // Most Error objects consist of a message and a stack trace. // Reserve two in-object properties for these. const int kErrorObjectSize = @@ -1411,7 +1423,6 @@ static void InstallError( Handle<JSFunction> error_fun = InstallFunction( isolate, global, name, JS_ERROR_TYPE, kErrorObjectSize, in_object_properties, factory->the_hole_value(), error_constructor); - error_fun->shared().DontAdaptArguments(); error_fun->shared().set_length(error_function_length); if (context_index == Context::ERROR_FUNCTION_INDEX) { @@ -1431,6 +1442,11 @@ static void InstallError( JSObject::AddProperty(isolate, prototype, factory->message_string(), factory->empty_string(), DONT_ENUM); + if (FLAG_harmony_error_cause) { + JSObject::AddProperty(isolate, prototype, factory->cause_string(), + factory->undefined_value(), DONT_ENUM); + } + if (context_index == Context::ERROR_FUNCTION_INDEX) { Handle<JSFunction> to_string_fun = SimpleInstallFunction(isolate, prototype, "toString", @@ -1465,7 +1481,6 @@ static void InstallError( void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object, Handle<JSFunction> empty_function) { // --- N a t i v e C o n t e x t --- - native_context()->set_previous(Context()); // Set extension and global object. native_context()->set_extension(*global_object); // Security setup: Set the security token of the native context to the global @@ -1626,8 +1641,8 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object, JSFunction::kSizeWithPrototype, 0, prototype, Builtins::kFunctionConstructor); // Function instances are sloppy by default. - function_fun->set_prototype_or_initial_map( - *isolate_->sloppy_function_map()); + function_fun->set_prototype_or_initial_map(*isolate_->sloppy_function_map(), + kReleaseStore); function_fun->shared().DontAdaptArguments(); function_fun->shared().set_length(1); InstallWithIntrinsicDefaultProto(isolate_, function_fun, @@ -1636,8 +1651,10 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object, // Setup the methods on the %FunctionPrototype%. JSObject::AddProperty(isolate_, prototype, factory->constructor_string(), function_fun, DONT_ENUM); - SimpleInstallFunction(isolate_, prototype, "apply", - Builtins::kFunctionPrototypeApply, 2, false); + Handle<JSFunction> function_prototype_apply = + SimpleInstallFunction(isolate_, prototype, "apply", + Builtins::kFunctionPrototypeApply, 2, false); + native_context()->set_function_prototype_apply(*function_prototype_apply); SimpleInstallFunction(isolate_, prototype, "bind", Builtins::kFastFunctionPrototypeBind, 1, false); SimpleInstallFunction(isolate_, prototype, "call", @@ -1829,7 +1846,8 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object, Handle<JSObject> array_iterator_prototype = factory->NewJSObject(isolate_->object_function(), AllocationType::kOld); - JSObject::ForceSetPrototype(array_iterator_prototype, iterator_prototype); + JSObject::ForceSetPrototype(isolate(), array_iterator_prototype, + iterator_prototype); CHECK_NE(array_iterator_prototype->map().ptr(), isolate_->initial_object_prototype()->map().ptr()); array_iterator_prototype->map().set_instance_type( @@ -2145,7 +2163,8 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object, Handle<JSObject> string_iterator_prototype = factory->NewJSObject(isolate_->object_function(), AllocationType::kOld); - JSObject::ForceSetPrototype(string_iterator_prototype, iterator_prototype); + JSObject::ForceSetPrototype(isolate(), string_iterator_prototype, + iterator_prototype); CHECK_NE(string_iterator_prototype->map().ptr(), isolate_->initial_object_prototype()->map().ptr()); string_iterator_prototype->map().set_instance_type( @@ -2623,7 +2642,7 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object, Handle<JSObject> regexp_string_iterator_prototype = factory->NewJSObject( isolate()->object_function(), AllocationType::kOld); - JSObject::ForceSetPrototype(regexp_string_iterator_prototype, + JSObject::ForceSetPrototype(isolate(), regexp_string_iterator_prototype, iterator_prototype); InstallToStringTag(isolate(), regexp_string_iterator_prototype, @@ -3222,7 +3241,7 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object, native_context()->initial_iterator_prototype(), isolate()); Handle<JSObject> prototype = factory->NewJSObject( isolate()->object_function(), AllocationType::kOld); - JSObject::ForceSetPrototype(prototype, iterator_prototype); + JSObject::ForceSetPrototype(isolate(), prototype, iterator_prototype); // #sec-%segmentiteratorprototype%.@@tostringtag // // %SegmentIteratorPrototype% [ @@toStringTag ] @@ -3274,6 +3293,25 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object, InstallSpeciesGetter(isolate_, shared_array_buffer_fun); } + { // R e s i z a b l e A r r a y B u f f e r + Handle<String> name = factory->ResizableArrayBuffer_string(); + Handle<JSFunction> resizable_array_buffer_fun = + CreateArrayBuffer(name, RESIZABLE_ARRAY_BUFFER); + InstallWithIntrinsicDefaultProto(isolate_, resizable_array_buffer_fun, + Context::RESIZABLE_ARRAY_BUFFER_FUN_INDEX); + InstallSpeciesGetter(isolate_, resizable_array_buffer_fun); + } + + { // G r o w a b l e S h a r e d A r r a y B u f f e r + Handle<String> name = factory->GrowableSharedArrayBuffer_string(); + Handle<JSFunction> growable_shared_array_buffer_fun = + CreateArrayBuffer(name, GROWABLE_SHARED_ARRAY_BUFFER); + InstallWithIntrinsicDefaultProto( + isolate_, growable_shared_array_buffer_fun, + Context::GROWABLE_SHARED_ARRAY_BUFFER_FUN_INDEX); + InstallSpeciesGetter(isolate_, growable_shared_array_buffer_fun); + } + { // -- A t o m i c s Handle<JSObject> atomics_object = factory->NewJSObject(isolate_->object_function(), AllocationType::kOld); @@ -3403,12 +3441,13 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object, } {// -- T y p e d A r r a y s -#define INSTALL_TYPED_ARRAY(Type, type, TYPE, ctype) \ - { \ - Handle<JSFunction> fun = InstallTypedArray( \ - #Type "Array", TYPE##_ELEMENTS, TYPE##_TYPED_ARRAY_CONSTRUCTOR_TYPE); \ - InstallWithIntrinsicDefaultProto(isolate_, fun, \ - Context::TYPE##_ARRAY_FUN_INDEX); \ +#define INSTALL_TYPED_ARRAY(Type, type, TYPE, ctype) \ + { \ + Handle<JSFunction> fun = InstallTypedArray( \ + #Type "Array", TYPE##_ELEMENTS, TYPE##_TYPED_ARRAY_CONSTRUCTOR_TYPE, \ + Context::RAB_GSAB_##TYPE##_ARRAY_MAP_INDEX); \ + InstallWithIntrinsicDefaultProto(isolate_, fun, \ + Context::TYPE##_ARRAY_FUN_INDEX); \ } TYPED_ARRAYS(INSTALL_TYPED_ARRAY) #undef INSTALL_TYPED_ARRAY @@ -4039,7 +4078,8 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object, Handle<JSFunction> Genesis::InstallTypedArray(const char* name, ElementsKind elements_kind, - InstanceType type) { + InstanceType type, + int rab_gsab_initial_map_index) { Handle<JSObject> global = Handle<JSObject>(native_context()->global_object(), isolate()); @@ -4076,6 +4116,16 @@ Handle<JSFunction> Genesis::InstallTypedArray(const char* name, prototype->map().set_instance_type(JS_TYPED_ARRAY_PROTOTYPE_TYPE); InstallConstant(isolate(), prototype, "BYTES_PER_ELEMENT", bytes_per_element); + + // RAB / GSAB backed TypedArrays don't have separate constructors, but they + // have their own maps. Create the corresponding map here. + Handle<Map> rab_gsab_initial_map = factory()->NewMap( + JS_TYPED_ARRAY_TYPE, JSTypedArray::kSizeWithEmbedderFields, + GetCorrespondingRabGsabElementsKind(elements_kind), 0); + native_context()->set(rab_gsab_initial_map_index, *rab_gsab_initial_map, + UPDATE_WRITE_BARRIER, kReleaseStore); + Map::SetPrototype(isolate(), rab_gsab_initial_map, prototype); + return result; } @@ -4154,14 +4204,14 @@ void Genesis::InitializeIteratorFunctions() { JSFunction::kSizeWithPrototype, 0, generator_function_prototype, Builtins::kGeneratorFunctionConstructor); generator_function_function->set_prototype_or_initial_map( - native_context->generator_function_map()); + native_context->generator_function_map(), kReleaseStore); generator_function_function->shared().DontAdaptArguments(); generator_function_function->shared().set_length(1); InstallWithIntrinsicDefaultProto( isolate, generator_function_function, Context::GENERATOR_FUNCTION_FUNCTION_INDEX); - JSObject::ForceSetPrototype(generator_function_function, + JSObject::ForceSetPrototype(isolate, generator_function_function, isolate->function_function()); JSObject::AddProperty( isolate, generator_function_prototype, factory->constructor_string(), @@ -4183,14 +4233,14 @@ void Genesis::InitializeIteratorFunctions() { JSFunction::kSizeWithPrototype, 0, async_generator_function_prototype, Builtins::kAsyncGeneratorFunctionConstructor); async_generator_function_function->set_prototype_or_initial_map( - native_context->async_generator_function_map()); + native_context->async_generator_function_map(), kReleaseStore); async_generator_function_function->shared().DontAdaptArguments(); async_generator_function_function->shared().set_length(1); InstallWithIntrinsicDefaultProto( isolate, async_generator_function_function, Context::ASYNC_GENERATOR_FUNCTION_FUNCTION_INDEX); - JSObject::ForceSetPrototype(async_generator_function_function, + JSObject::ForceSetPrototype(isolate, async_generator_function_function, isolate->function_function()); JSObject::AddProperty( @@ -4206,7 +4256,7 @@ void Genesis::InitializeIteratorFunctions() { // Setup %SetIteratorPrototype%. Handle<JSObject> prototype = factory->NewJSObject(isolate->object_function(), AllocationType::kOld); - JSObject::ForceSetPrototype(prototype, iterator_prototype); + JSObject::ForceSetPrototype(isolate, prototype, iterator_prototype); InstallToStringTag(isolate, prototype, factory->SetIterator_string()); @@ -4239,7 +4289,7 @@ void Genesis::InitializeIteratorFunctions() { // Setup %MapIteratorPrototype%. Handle<JSObject> prototype = factory->NewJSObject(isolate->object_function(), AllocationType::kOld); - JSObject::ForceSetPrototype(prototype, iterator_prototype); + JSObject::ForceSetPrototype(isolate, prototype, iterator_prototype); InstallToStringTag(isolate, prototype, factory->MapIterator_string()); @@ -4284,11 +4334,11 @@ void Genesis::InitializeIteratorFunctions() { JSFunction::kSizeWithPrototype, 0, async_function_prototype, Builtins::kAsyncFunctionConstructor); async_function_constructor->set_prototype_or_initial_map( - native_context->async_function_map()); + native_context->async_function_map(), kReleaseStore); async_function_constructor->shared().DontAdaptArguments(); async_function_constructor->shared().set_length(1); native_context->set_async_function_constructor(*async_function_constructor); - JSObject::ForceSetPrototype(async_function_constructor, + JSObject::ForceSetPrototype(isolate, async_function_constructor, isolate->function_function()); JSObject::AddProperty( @@ -4380,6 +4430,7 @@ EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_top_level_await) EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_import_assertions) EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_private_brand_checks) EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_class_static_blocks) +EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_error_cause) #ifdef V8_INTL_SUPPORT EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_intl_best_fit_matcher) @@ -4390,7 +4441,10 @@ EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_intl_dateformat_day_period) #undef EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE void Genesis::InitializeGlobal_harmony_sharedarraybuffer() { - if (!FLAG_harmony_sharedarraybuffer) return; + if (!FLAG_harmony_sharedarraybuffer || + FLAG_enable_sharedarraybuffer_per_context) { + return; + } Handle<JSGlobalObject> global(native_context()->global_object(), isolate()); @@ -4507,6 +4561,45 @@ void Genesis::InitializeGlobal_harmony_relative_indexing_methods() { } } +#ifdef V8_INTL_SUPPORT + +void Genesis::InitializeGlobal_harmony_intl_locale_info() { + if (!FLAG_harmony_intl_locale_info) return; + Handle<JSObject> prototype( + JSObject::cast(native_context()->intl_locale_function().prototype()), + isolate_); + SimpleInstallGetter(isolate(), prototype, factory()->calendars_string(), + Builtins::kLocalePrototypeCalendars, true); + SimpleInstallGetter(isolate(), prototype, factory()->collations_string(), + Builtins::kLocalePrototypeCollations, true); + SimpleInstallGetter(isolate(), prototype, factory()->hourCycles_string(), + Builtins::kLocalePrototypeHourCycles, true); + SimpleInstallGetter(isolate(), prototype, + factory()->numberingSystems_string(), + Builtins::kLocalePrototypeNumberingSystems, true); + SimpleInstallGetter(isolate(), prototype, factory()->textInfo_string(), + Builtins::kLocalePrototypeTextInfo, true); + SimpleInstallGetter(isolate(), prototype, factory()->timeZones_string(), + Builtins::kLocalePrototypeTimeZones, true); + SimpleInstallGetter(isolate(), prototype, factory()->weekInfo_string(), + Builtins::kLocalePrototypeWeekInfo, true); +} + +#endif // V8_INTL_SUPPORT + +void Genesis::InitializeGlobal_harmony_rab_gsab() { + if (!FLAG_harmony_rab_gsab) return; + + Handle<JSGlobalObject> global(native_context()->global_object(), isolate()); + + JSObject::AddProperty(isolate_, global, "ResizableArrayBuffer", + isolate()->resizable_array_buffer_fun(), DONT_ENUM); + + JSObject::AddProperty(isolate_, global, "GrowableSharedArrayBuffer", + isolate()->growable_shared_array_buffer_fun(), + DONT_ENUM); +} + Handle<JSFunction> Genesis::CreateArrayBuffer( Handle<String> name, ArrayBufferKind array_buffer_kind) { // Create the %ArrayBufferPrototype% @@ -4550,6 +4643,28 @@ Handle<JSFunction> Genesis::CreateArrayBuffer( Builtins::kSharedArrayBufferPrototypeSlice, 2, true); break; + case RESIZABLE_ARRAY_BUFFER: + SimpleInstallGetter(isolate(), prototype, factory()->byte_length_string(), + Builtins::kResizableArrayBufferPrototypeGetByteLength, + false); + SimpleInstallGetter( + isolate(), prototype, factory()->max_byte_length_string(), + Builtins::kResizableArrayBufferPrototypeGetMaxByteLength, false); + SimpleInstallFunction(isolate(), prototype, "resize", + Builtins::kResizableArrayBufferPrototypeResize, 1, + true); + break; + case GROWABLE_SHARED_ARRAY_BUFFER: + SimpleInstallGetter( + isolate(), prototype, factory()->byte_length_string(), + Builtins::kGrowableSharedArrayBufferPrototypeGetByteLength, true); + SimpleInstallGetter( + isolate(), prototype, factory()->max_byte_length_string(), + Builtins::kGrowableSharedArrayBufferPrototypeGetMaxByteLength, false); + SimpleInstallFunction(isolate(), prototype, "grow", + Builtins::kGrowableSharedArrayBufferPrototypeGrow, + 1, true); + break; } return array_buffer_fun; @@ -5085,7 +5200,7 @@ bool Genesis::ConfigureGlobalObjects( } } - JSObject::ForceSetPrototype(global_proxy, global_object); + JSObject::ForceSetPrototype(isolate(), global_proxy, global_object); native_context()->set_array_buffer_map( native_context()->array_buffer_fun().initial_map()); @@ -5250,7 +5365,7 @@ void Genesis::TransferObject(Handle<JSObject> from, Handle<JSObject> to) { // Transfer the prototype (new map is needed). Handle<HeapObject> proto(from->map().prototype(), isolate()); - JSObject::ForceSetPrototype(to, proto); + JSObject::ForceSetPrototype(isolate(), to, proto); } Handle<Map> Genesis::CreateInitialMapForArraySubclass(int size, @@ -5300,7 +5415,7 @@ Genesis::Genesis( v8::DeserializeEmbedderFieldsCallback embedder_fields_deserializer, v8::MicrotaskQueue* microtask_queue) : isolate_(isolate), active_(isolate->bootstrapper()) { - RuntimeCallTimerScope rcs_timer(isolate, RuntimeCallCounterId::kGenesis); + RCS_SCOPE(isolate, RuntimeCallCounterId::kGenesis); result_ = Handle<Context>::null(); global_proxy_ = Handle<JSGlobalProxy>::null(); @@ -5483,7 +5598,7 @@ Genesis::Genesis(Isolate* isolate, global_proxy->set_native_context(ReadOnlyRoots(heap()).null_value()); // Configure the hidden prototype chain of the global proxy. - JSObject::ForceSetPrototype(global_proxy, global_object); + JSObject::ForceSetPrototype(isolate, global_proxy, global_object); global_proxy->map().SetConstructor(*global_constructor); global_proxy_ = global_proxy; diff --git a/deps/v8/src/init/heap-symbols.h b/deps/v8/src/init/heap-symbols.h index 71eb054596..4d0213e8d1 100644 --- a/deps/v8/src/init/heap-symbols.h +++ b/deps/v8/src/init/heap-symbols.h @@ -12,10 +12,12 @@ V(_, accounting_string, "accounting") \ V(_, breakType_string, "breakType") \ V(_, calendar_string, "calendar") \ + V(_, calendars_string, "calendars") \ V(_, cardinal_string, "cardinal") \ V(_, caseFirst_string, "caseFirst") \ V(_, compare_string, "compare") \ V(_, collation_string, "collation") \ + V(_, collations_string, "collations") \ V(_, compact_string, "compact") \ V(_, compactDisplay_string, "compactDisplay") \ V(_, currency_string, "currency") \ @@ -26,6 +28,7 @@ V(_, day_string, "day") \ V(_, dayPeriod_string, "dayPeriod") \ V(_, decimal_string, "decimal") \ + V(_, direction_string, "direction") \ V(_, endRange_string, "endRange") \ V(_, engineering_string, "engineering") \ V(_, era_string, "era") \ @@ -35,6 +38,7 @@ V(_, exponentSeparator_string, "exponentSeparator") \ V(_, fallback_string, "fallback") \ V(_, first_string, "first") \ + V(_, firstDay_string, "firstDay") \ V(_, format_string, "format") \ V(_, fraction_string, "fraction") \ V(_, fractionalSecond_string, "fractionalSecond") \ @@ -50,6 +54,7 @@ V(_, hour_string, "hour") \ V(_, hour12_string, "hour12") \ V(_, hourCycle_string, "hourCycle") \ + V(_, hourCycles_string, "hourCycles") \ V(_, ideo_string, "ideo") \ V(_, ignorePunctuation_string, "ignorePunctuation") \ V(_, Invalid_Date_string, "Invalid Date") \ @@ -63,8 +68,10 @@ V(_, locale_string, "locale") \ V(_, loose_string, "loose") \ V(_, lower_string, "lower") \ + V(_, ltr_string, "ltr") \ V(_, maximumFractionDigits_string, "maximumFractionDigits") \ V(_, maximumSignificantDigits_string, "maximumSignificantDigits") \ + V(_, minimalDays_string, "minimalDays") \ V(_, minimumFractionDigits_string, "minimumFractionDigits") \ V(_, minimumIntegerDigits_string, "minimumIntegerDigits") \ V(_, minimumSignificantDigits_string, "minimumSignificantDigits") \ @@ -78,6 +85,7 @@ V(_, notation_string, "notation") \ V(_, normal_string, "normal") \ V(_, numberingSystem_string, "numberingSystem") \ + V(_, numberingSystems_string, "numberingSystems") \ V(_, numeric_string, "numeric") \ V(_, ordinal_string, "ordinal") \ V(_, percentSign_string, "percentSign") \ @@ -85,6 +93,7 @@ V(_, quarter_string, "quarter") \ V(_, region_string, "region") \ V(_, relatedYear_string, "relatedYear") \ + V(_, rtl_string, "rtl") \ V(_, scientific_string, "scientific") \ V(_, second_string, "second") \ V(_, segment_string, "segment") \ @@ -99,8 +108,10 @@ V(_, strict_string, "strict") \ V(_, style_string, "style") \ V(_, term_string, "term") \ + V(_, textInfo_string, "textInfo") \ V(_, timeStyle_string, "timeStyle") \ V(_, timeZone_string, "timeZone") \ + V(_, timeZones_string, "timeZones") \ V(_, timeZoneName_string, "timeZoneName") \ V(_, type_string, "type") \ V(_, unknown_string, "unknown") \ @@ -111,228 +122,235 @@ V(_, unit_string, "unit") \ V(_, unitDisplay_string, "unitDisplay") \ V(_, weekday_string, "weekday") \ + V(_, weekendEnd_string, "weekendEnd") \ + V(_, weekendStart_string, "weekendStart") \ + V(_, weekInfo_string, "weekInfo") \ V(_, year_string, "year") \ V(_, yearName_string, "yearName") #else // V8_INTL_SUPPORT #define INTERNALIZED_STRING_LIST_GENERATOR_INTL(V, _) #endif // V8_INTL_SUPPORT -#define INTERNALIZED_STRING_LIST_GENERATOR(V, _) \ - INTERNALIZED_STRING_LIST_GENERATOR_INTL(V, _) \ - V(_, add_string, "add") \ - V(_, AggregateError_string, "AggregateError") \ - V(_, always_string, "always") \ - V(_, anonymous_function_string, "(anonymous function)") \ - V(_, anonymous_string, "anonymous") \ - V(_, apply_string, "apply") \ - V(_, Arguments_string, "Arguments") \ - V(_, arguments_string, "arguments") \ - V(_, arguments_to_string, "[object Arguments]") \ - V(_, Array_string, "Array") \ - V(_, array_to_string, "[object Array]") \ - V(_, ArrayBuffer_string, "ArrayBuffer") \ - V(_, ArrayIterator_string, "Array Iterator") \ - V(_, as_string, "as") \ - V(_, assert_string, "assert") \ - V(_, async_string, "async") \ - V(_, auto_string, "auto") \ - V(_, await_string, "await") \ - V(_, BigInt_string, "BigInt") \ - V(_, bigint_string, "bigint") \ - V(_, BigInt64Array_string, "BigInt64Array") \ - V(_, BigUint64Array_string, "BigUint64Array") \ - V(_, bind_string, "bind") \ - V(_, Boolean_string, "Boolean") \ - V(_, boolean_string, "boolean") \ - V(_, boolean_to_string, "[object Boolean]") \ - V(_, bound__string, "bound ") \ - V(_, buffer_string, "buffer") \ - V(_, byte_length_string, "byteLength") \ - V(_, byte_offset_string, "byteOffset") \ - V(_, CompileError_string, "CompileError") \ - V(_, callee_string, "callee") \ - V(_, caller_string, "caller") \ - V(_, character_string, "character") \ - V(_, closure_string, "(closure)") \ - V(_, code_string, "code") \ - V(_, column_string, "column") \ - V(_, computed_string, "<computed>") \ - V(_, configurable_string, "configurable") \ - V(_, conjunction_string, "conjunction") \ - V(_, construct_string, "construct") \ - V(_, constructor_string, "constructor") \ - V(_, current_string, "current") \ - V(_, Date_string, "Date") \ - V(_, date_to_string, "[object Date]") \ - V(_, default_string, "default") \ - V(_, defineProperty_string, "defineProperty") \ - V(_, deleteProperty_string, "deleteProperty") \ - V(_, disjunction_string, "disjunction") \ - V(_, done_string, "done") \ - V(_, dot_brand_string, ".brand") \ - V(_, dot_catch_string, ".catch") \ - V(_, dot_default_string, ".default") \ - V(_, dot_for_string, ".for") \ - V(_, dot_generator_object_string, ".generator_object") \ - V(_, dot_home_object_string, ".home_object") \ - V(_, dot_result_string, ".result") \ - V(_, dot_repl_result_string, ".repl_result") \ - V(_, dot_static_home_object_string, "._static_home_object") \ - V(_, dot_string, ".") \ - V(_, dot_switch_tag_string, ".switch_tag") \ - V(_, dotAll_string, "dotAll") \ - V(_, enumerable_string, "enumerable") \ - V(_, element_string, "element") \ - V(_, Error_string, "Error") \ - V(_, errors_string, "errors") \ - V(_, error_to_string, "[object Error]") \ - V(_, eval_string, "eval") \ - V(_, EvalError_string, "EvalError") \ - V(_, exec_string, "exec") \ - V(_, false_string, "false") \ - V(_, FinalizationRegistry_string, "FinalizationRegistry") \ - V(_, flags_string, "flags") \ - V(_, Float32Array_string, "Float32Array") \ - V(_, Float64Array_string, "Float64Array") \ - V(_, from_string, "from") \ - V(_, Function_string, "Function") \ - V(_, function_native_code_string, "function () { [native code] }") \ - V(_, function_string, "function") \ - V(_, function_to_string, "[object Function]") \ - V(_, Generator_string, "Generator") \ - V(_, get_space_string, "get ") \ - V(_, get_string, "get") \ - V(_, getOwnPropertyDescriptor_string, "getOwnPropertyDescriptor") \ - V(_, getPrototypeOf_string, "getPrototypeOf") \ - V(_, global_string, "global") \ - V(_, globalThis_string, "globalThis") \ - V(_, groups_string, "groups") \ - V(_, has_string, "has") \ - V(_, has_indices_string, "hasIndices") \ - V(_, ignoreCase_string, "ignoreCase") \ - V(_, illegal_access_string, "illegal access") \ - V(_, illegal_argument_string, "illegal argument") \ - V(_, index_string, "index") \ - V(_, indices_string, "indices") \ - V(_, Infinity_string, "Infinity") \ - V(_, infinity_string, "infinity") \ - V(_, input_string, "input") \ - V(_, Int16Array_string, "Int16Array") \ - V(_, Int32Array_string, "Int32Array") \ - V(_, Int8Array_string, "Int8Array") \ - V(_, isExtensible_string, "isExtensible") \ - V(_, jsMemoryEstimate_string, "jsMemoryEstimate") \ - V(_, jsMemoryRange_string, "jsMemoryRange") \ - V(_, keys_string, "keys") \ - V(_, lastIndex_string, "lastIndex") \ - V(_, length_string, "length") \ - V(_, let_string, "let") \ - V(_, line_string, "line") \ - V(_, linear_string, "linear") \ - V(_, LinkError_string, "LinkError") \ - V(_, long_string, "long") \ - V(_, Map_string, "Map") \ - V(_, MapIterator_string, "Map Iterator") \ - V(_, medium_string, "medium") \ - V(_, message_string, "message") \ - V(_, meta_string, "meta") \ - V(_, minus_Infinity_string, "-Infinity") \ - V(_, Module_string, "Module") \ - V(_, multiline_string, "multiline") \ - V(_, name_string, "name") \ - V(_, NaN_string, "NaN") \ - V(_, narrow_string, "narrow") \ - V(_, native_string, "native") \ - V(_, new_target_string, ".new.target") \ - V(_, next_string, "next") \ - V(_, NFC_string, "NFC") \ - V(_, NFD_string, "NFD") \ - V(_, NFKC_string, "NFKC") \ - V(_, NFKD_string, "NFKD") \ - V(_, not_equal_string, "not-equal") \ - V(_, null_string, "null") \ - V(_, null_to_string, "[object Null]") \ - V(_, Number_string, "Number") \ - V(_, number_string, "number") \ - V(_, number_to_string, "[object Number]") \ - V(_, Object_string, "Object") \ - V(_, object_string, "object") \ - V(_, object_to_string, "[object Object]") \ - V(_, of_string, "of") \ - V(_, ok_string, "ok") \ - V(_, one_string, "1") \ - V(_, other_string, "other") \ - V(_, ownKeys_string, "ownKeys") \ - V(_, percent_string, "percent") \ - V(_, position_string, "position") \ - V(_, preventExtensions_string, "preventExtensions") \ - V(_, private_constructor_string, "#constructor") \ - V(_, Promise_string, "Promise") \ - V(_, proto_string, "__proto__") \ - V(_, prototype_string, "prototype") \ - V(_, proxy_string, "proxy") \ - V(_, Proxy_string, "Proxy") \ - V(_, query_colon_string, "(?:)") \ - V(_, RangeError_string, "RangeError") \ - V(_, raw_string, "raw") \ - V(_, ReferenceError_string, "ReferenceError") \ - V(_, ReflectGet_string, "Reflect.get") \ - V(_, ReflectHas_string, "Reflect.has") \ - V(_, RegExp_string, "RegExp") \ - V(_, regexp_to_string, "[object RegExp]") \ - V(_, resolve_string, "resolve") \ - V(_, return_string, "return") \ - V(_, revoke_string, "revoke") \ - V(_, RuntimeError_string, "RuntimeError") \ - V(_, Script_string, "Script") \ - V(_, script_string, "script") \ - V(_, short_string, "short") \ - V(_, Set_string, "Set") \ - V(_, sentence_string, "sentence") \ - V(_, set_space_string, "set ") \ - V(_, set_string, "set") \ - V(_, SetIterator_string, "Set Iterator") \ - V(_, setPrototypeOf_string, "setPrototypeOf") \ - V(_, SharedArrayBuffer_string, "SharedArrayBuffer") \ - V(_, source_string, "source") \ - V(_, sourceText_string, "sourceText") \ - V(_, stack_string, "stack") \ - V(_, stackTraceLimit_string, "stackTraceLimit") \ - V(_, sticky_string, "sticky") \ - V(_, String_string, "String") \ - V(_, string_string, "string") \ - V(_, string_to_string, "[object String]") \ - V(_, symbol_species_string, "[Symbol.species]") \ - V(_, Symbol_string, "Symbol") \ - V(_, symbol_string, "symbol") \ - V(_, SyntaxError_string, "SyntaxError") \ - V(_, target_string, "target") \ - V(_, then_string, "then") \ - V(_, this_function_string, ".this_function") \ - V(_, this_string, "this") \ - V(_, throw_string, "throw") \ - V(_, timed_out_string, "timed-out") \ - V(_, toJSON_string, "toJSON") \ - V(_, toString_string, "toString") \ - V(_, true_string, "true") \ - V(_, total_string, "total") \ - V(_, TypeError_string, "TypeError") \ - V(_, Uint16Array_string, "Uint16Array") \ - V(_, Uint32Array_string, "Uint32Array") \ - V(_, Uint8Array_string, "Uint8Array") \ - V(_, Uint8ClampedArray_string, "Uint8ClampedArray") \ - V(_, undefined_string, "undefined") \ - V(_, undefined_to_string, "[object Undefined]") \ - V(_, unicode_string, "unicode") \ - V(_, URIError_string, "URIError") \ - V(_, value_string, "value") \ - V(_, valueOf_string, "valueOf") \ - V(_, WeakMap_string, "WeakMap") \ - V(_, WeakRef_string, "WeakRef") \ - V(_, WeakSet_string, "WeakSet") \ - V(_, week_string, "week") \ - V(_, word_string, "word") \ - V(_, writable_string, "writable") \ +#define INTERNALIZED_STRING_LIST_GENERATOR(V, _) \ + INTERNALIZED_STRING_LIST_GENERATOR_INTL(V, _) \ + V(_, add_string, "add") \ + V(_, AggregateError_string, "AggregateError") \ + V(_, always_string, "always") \ + V(_, anonymous_function_string, "(anonymous function)") \ + V(_, anonymous_string, "anonymous") \ + V(_, apply_string, "apply") \ + V(_, Arguments_string, "Arguments") \ + V(_, arguments_string, "arguments") \ + V(_, arguments_to_string, "[object Arguments]") \ + V(_, Array_string, "Array") \ + V(_, array_to_string, "[object Array]") \ + V(_, ArrayBuffer_string, "ArrayBuffer") \ + V(_, ArrayIterator_string, "Array Iterator") \ + V(_, as_string, "as") \ + V(_, assert_string, "assert") \ + V(_, async_string, "async") \ + V(_, auto_string, "auto") \ + V(_, await_string, "await") \ + V(_, BigInt_string, "BigInt") \ + V(_, bigint_string, "bigint") \ + V(_, BigInt64Array_string, "BigInt64Array") \ + V(_, BigUint64Array_string, "BigUint64Array") \ + V(_, bind_string, "bind") \ + V(_, Boolean_string, "Boolean") \ + V(_, boolean_string, "boolean") \ + V(_, boolean_to_string, "[object Boolean]") \ + V(_, bound__string, "bound ") \ + V(_, buffer_string, "buffer") \ + V(_, byte_length_string, "byteLength") \ + V(_, byte_offset_string, "byteOffset") \ + V(_, CompileError_string, "CompileError") \ + V(_, callee_string, "callee") \ + V(_, caller_string, "caller") \ + V(_, cause_string, "cause") \ + V(_, character_string, "character") \ + V(_, closure_string, "(closure)") \ + V(_, code_string, "code") \ + V(_, column_string, "column") \ + V(_, computed_string, "<computed>") \ + V(_, configurable_string, "configurable") \ + V(_, conjunction_string, "conjunction") \ + V(_, construct_string, "construct") \ + V(_, constructor_string, "constructor") \ + V(_, current_string, "current") \ + V(_, Date_string, "Date") \ + V(_, date_to_string, "[object Date]") \ + V(_, default_string, "default") \ + V(_, defineProperty_string, "defineProperty") \ + V(_, deleteProperty_string, "deleteProperty") \ + V(_, disjunction_string, "disjunction") \ + V(_, done_string, "done") \ + V(_, dot_brand_string, ".brand") \ + V(_, dot_catch_string, ".catch") \ + V(_, dot_default_string, ".default") \ + V(_, dot_for_string, ".for") \ + V(_, dot_generator_object_string, ".generator_object") \ + V(_, dot_home_object_string, ".home_object") \ + V(_, dot_result_string, ".result") \ + V(_, dot_repl_result_string, ".repl_result") \ + V(_, dot_static_home_object_string, "._static_home_object") \ + V(_, dot_string, ".") \ + V(_, dot_switch_tag_string, ".switch_tag") \ + V(_, dotAll_string, "dotAll") \ + V(_, enumerable_string, "enumerable") \ + V(_, element_string, "element") \ + V(_, Error_string, "Error") \ + V(_, errors_string, "errors") \ + V(_, error_to_string, "[object Error]") \ + V(_, eval_string, "eval") \ + V(_, EvalError_string, "EvalError") \ + V(_, exec_string, "exec") \ + V(_, false_string, "false") \ + V(_, FinalizationRegistry_string, "FinalizationRegistry") \ + V(_, flags_string, "flags") \ + V(_, Float32Array_string, "Float32Array") \ + V(_, Float64Array_string, "Float64Array") \ + V(_, from_string, "from") \ + V(_, Function_string, "Function") \ + V(_, function_native_code_string, "function () { [native code] }") \ + V(_, function_string, "function") \ + V(_, function_to_string, "[object Function]") \ + V(_, Generator_string, "Generator") \ + V(_, get_space_string, "get ") \ + V(_, get_string, "get") \ + V(_, getOwnPropertyDescriptor_string, "getOwnPropertyDescriptor") \ + V(_, getPrototypeOf_string, "getPrototypeOf") \ + V(_, global_string, "global") \ + V(_, globalThis_string, "globalThis") \ + V(_, groups_string, "groups") \ + V(_, GrowableSharedArrayBuffer_string, "GrowableSharedArrayBuffer") \ + V(_, has_string, "has") \ + V(_, has_indices_string, "hasIndices") \ + V(_, ignoreCase_string, "ignoreCase") \ + V(_, illegal_access_string, "illegal access") \ + V(_, illegal_argument_string, "illegal argument") \ + V(_, index_string, "index") \ + V(_, indices_string, "indices") \ + V(_, Infinity_string, "Infinity") \ + V(_, infinity_string, "infinity") \ + V(_, input_string, "input") \ + V(_, Int16Array_string, "Int16Array") \ + V(_, Int32Array_string, "Int32Array") \ + V(_, Int8Array_string, "Int8Array") \ + V(_, isExtensible_string, "isExtensible") \ + V(_, jsMemoryEstimate_string, "jsMemoryEstimate") \ + V(_, jsMemoryRange_string, "jsMemoryRange") \ + V(_, keys_string, "keys") \ + V(_, lastIndex_string, "lastIndex") \ + V(_, length_string, "length") \ + V(_, let_string, "let") \ + V(_, line_string, "line") \ + V(_, linear_string, "linear") \ + V(_, LinkError_string, "LinkError") \ + V(_, long_string, "long") \ + V(_, Map_string, "Map") \ + V(_, MapIterator_string, "Map Iterator") \ + V(_, max_byte_length_string, "maxByteLength") \ + V(_, medium_string, "medium") \ + V(_, message_string, "message") \ + V(_, meta_string, "meta") \ + V(_, minus_Infinity_string, "-Infinity") \ + V(_, Module_string, "Module") \ + V(_, multiline_string, "multiline") \ + V(_, name_string, "name") \ + V(_, NaN_string, "NaN") \ + V(_, narrow_string, "narrow") \ + V(_, native_string, "native") \ + V(_, new_target_string, ".new.target") \ + V(_, next_string, "next") \ + V(_, NFC_string, "NFC") \ + V(_, NFD_string, "NFD") \ + V(_, NFKC_string, "NFKC") \ + V(_, NFKD_string, "NFKD") \ + V(_, not_equal_string, "not-equal") \ + V(_, null_string, "null") \ + V(_, null_to_string, "[object Null]") \ + V(_, Number_string, "Number") \ + V(_, number_string, "number") \ + V(_, number_to_string, "[object Number]") \ + V(_, Object_string, "Object") \ + V(_, object_string, "object") \ + V(_, object_to_string, "[object Object]") \ + V(_, of_string, "of") \ + V(_, ok_string, "ok") \ + V(_, one_string, "1") \ + V(_, other_string, "other") \ + V(_, ownKeys_string, "ownKeys") \ + V(_, percent_string, "percent") \ + V(_, position_string, "position") \ + V(_, preventExtensions_string, "preventExtensions") \ + V(_, private_constructor_string, "#constructor") \ + V(_, Promise_string, "Promise") \ + V(_, proto_string, "__proto__") \ + V(_, prototype_string, "prototype") \ + V(_, proxy_string, "proxy") \ + V(_, Proxy_string, "Proxy") \ + V(_, query_colon_string, "(?:)") \ + V(_, RangeError_string, "RangeError") \ + V(_, raw_string, "raw") \ + V(_, ReferenceError_string, "ReferenceError") \ + V(_, ReflectGet_string, "Reflect.get") \ + V(_, ReflectHas_string, "Reflect.has") \ + V(_, RegExp_string, "RegExp") \ + V(_, regexp_to_string, "[object RegExp]") \ + V(_, ResizableArrayBuffer_string, "ResizableArrayBuffer") \ + V(_, resolve_string, "resolve") \ + V(_, return_string, "return") \ + V(_, revoke_string, "revoke") \ + V(_, RuntimeError_string, "RuntimeError") \ + V(_, Script_string, "Script") \ + V(_, script_string, "script") \ + V(_, short_string, "short") \ + V(_, Set_string, "Set") \ + V(_, sentence_string, "sentence") \ + V(_, set_space_string, "set ") \ + V(_, set_string, "set") \ + V(_, SetIterator_string, "Set Iterator") \ + V(_, setPrototypeOf_string, "setPrototypeOf") \ + V(_, SharedArrayBuffer_string, "SharedArrayBuffer") \ + V(_, source_string, "source") \ + V(_, sourceText_string, "sourceText") \ + V(_, stack_string, "stack") \ + V(_, stackTraceLimit_string, "stackTraceLimit") \ + V(_, sticky_string, "sticky") \ + V(_, String_string, "String") \ + V(_, string_string, "string") \ + V(_, string_to_string, "[object String]") \ + V(_, symbol_species_string, "[Symbol.species]") \ + V(_, Symbol_string, "Symbol") \ + V(_, symbol_string, "symbol") \ + V(_, SyntaxError_string, "SyntaxError") \ + V(_, target_string, "target") \ + V(_, then_string, "then") \ + V(_, this_function_string, ".this_function") \ + V(_, this_string, "this") \ + V(_, throw_string, "throw") \ + V(_, timed_out_string, "timed-out") \ + V(_, toJSON_string, "toJSON") \ + V(_, toString_string, "toString") \ + V(_, true_string, "true") \ + V(_, total_string, "total") \ + V(_, TypeError_string, "TypeError") \ + V(_, Uint16Array_string, "Uint16Array") \ + V(_, Uint32Array_string, "Uint32Array") \ + V(_, Uint8Array_string, "Uint8Array") \ + V(_, Uint8ClampedArray_string, "Uint8ClampedArray") \ + V(_, undefined_string, "undefined") \ + V(_, undefined_to_string, "[object Undefined]") \ + V(_, unicode_string, "unicode") \ + V(_, URIError_string, "URIError") \ + V(_, value_string, "value") \ + V(_, valueOf_string, "valueOf") \ + V(_, WeakMap_string, "WeakMap") \ + V(_, WeakRef_string, "WeakRef") \ + V(_, WeakSet_string, "WeakSet") \ + V(_, week_string, "week") \ + V(_, word_string, "word") \ + V(_, writable_string, "writable") \ V(_, zero_string, "0") #define PRIVATE_SYMBOL_LIST_GENERATOR(V, _) \ @@ -349,6 +367,7 @@ V(_, error_start_pos_symbol) \ V(_, frozen_symbol) \ V(_, interpreter_trampoline_symbol) \ + V(_, mega_dom_symbol) \ V(_, megamorphic_symbol) \ V(_, native_context_index_symbol) \ V(_, nonextensible_symbol) \ diff --git a/deps/v8/src/init/isolate-allocator.cc b/deps/v8/src/init/isolate-allocator.cc index 5db27d288b..a479f1ab94 100644 --- a/deps/v8/src/init/isolate-allocator.cc +++ b/deps/v8/src/init/isolate-allocator.cc @@ -3,39 +3,18 @@ // found in the LICENSE file. #include "src/init/isolate-allocator.h" + #include "src/base/bounded-page-allocator.h" #include "src/common/ptr-compr.h" #include "src/execution/isolate.h" +#include "src/heap/code-range.h" #include "src/utils/memcopy.h" #include "src/utils/utils.h" namespace v8 { namespace internal { -IsolateAllocator::IsolateAllocator() { #ifdef V8_COMPRESS_POINTERS - Address heap_reservation_address = InitReservation(); - CommitPagesForIsolate(heap_reservation_address); -#else - // Allocate Isolate in C++ heap. - page_allocator_ = GetPlatformPageAllocator(); - isolate_memory_ = ::operator new(sizeof(Isolate)); - DCHECK(!reservation_.IsReserved()); -#endif // V8_COMPRESS_POINTERS -} - -IsolateAllocator::~IsolateAllocator() { - if (reservation_.IsReserved()) { - // The actual memory will be freed when the |reservation_| will die. - return; - } - - // The memory was allocated in C++ heap. - ::operator delete(isolate_memory_); -} - -#ifdef V8_COMPRESS_POINTERS - namespace { // "IsolateRootBiasPage" is an optional region before the 4Gb aligned @@ -50,109 +29,125 @@ inline size_t GetIsolateRootBiasPageSize( } // namespace -Address IsolateAllocator::InitReservation() { - v8::PageAllocator* platform_page_allocator = GetPlatformPageAllocator(); +struct PtrComprCageReservationParams + : public VirtualMemoryCage::ReservationParams { + PtrComprCageReservationParams() { + page_allocator = GetPlatformPageAllocator(); + + // This is only used when there is a per-Isolate cage, in which case the + // Isolate is allocated within the cage, and the Isolate root is also the + // cage base. + const size_t kIsolateRootBiasPageSize = + COMPRESS_POINTERS_IN_ISOLATE_CAGE_BOOL + ? GetIsolateRootBiasPageSize(page_allocator) + : 0; + reservation_size = kPtrComprCageReservationSize + kIsolateRootBiasPageSize; + base_alignment = kPtrComprCageBaseAlignment; + base_bias_size = kIsolateRootBiasPageSize; + + // Simplify BoundedPageAllocator's life by configuring it to use same page + // size as the Heap will use (MemoryChunk::kPageSize). + page_size = + RoundUp(size_t{1} << kPageSizeBits, page_allocator->AllocatePageSize()); + requested_start_hint = + reinterpret_cast<Address>(page_allocator->GetRandomMmapAddr()); + } +}; +#endif // V8_COMPRESS_POINTERS - const size_t kIsolateRootBiasPageSize = - GetIsolateRootBiasPageSize(platform_page_allocator); - - // Reserve a |4Gb + kIsolateRootBiasPageSize| region such as that the - // resevation address plus |kIsolateRootBiasPageSize| is 4Gb aligned. - const size_t reservation_size = - kPtrComprCageReservationSize + kIsolateRootBiasPageSize; - const size_t base_alignment = kPtrComprCageBaseAlignment; - - const int kMaxAttempts = 4; - for (int attempt = 0; attempt < kMaxAttempts; ++attempt) { - Address hint = RoundDown(reinterpret_cast<Address>( - platform_page_allocator->GetRandomMmapAddr()), - base_alignment) - - kIsolateRootBiasPageSize; - - // Within this reservation there will be a sub-region with proper alignment. - VirtualMemory padded_reservation(platform_page_allocator, - reservation_size * 2, - reinterpret_cast<void*>(hint)); - if (!padded_reservation.IsReserved()) break; - - // Find properly aligned sub-region inside the reservation. - Address address = - RoundUp(padded_reservation.address() + kIsolateRootBiasPageSize, - base_alignment) - - kIsolateRootBiasPageSize; - CHECK(padded_reservation.InVM(address, reservation_size)); - -#if defined(V8_OS_FUCHSIA) - // Fuchsia does not respect given hints so as a workaround we will use - // overreserved address space region instead of trying to re-reserve - // a subregion. - bool overreserve = true; -#else - // For the last attempt use the overreserved region to avoid an OOM crash. - // This case can happen if there are many isolates being created in - // parallel that race for reserving the regions. - bool overreserve = (attempt == kMaxAttempts - 1); +#ifdef V8_COMPRESS_POINTERS_IN_SHARED_CAGE +namespace { +DEFINE_LAZY_LEAKY_OBJECT_GETTER(VirtualMemoryCage, GetProcessWidePtrComprCage) +} // anonymous namespace + +// static +void IsolateAllocator::FreeProcessWidePtrComprCageForTesting() { + if (std::shared_ptr<CodeRange> code_range = + CodeRange::GetProcessWideCodeRange()) { + code_range->Free(); + } + GetProcessWidePtrComprCage()->Free(); +} +#endif // V8_COMPRESS_POINTERS_IN_SHARED_CAGE + +// static +void IsolateAllocator::InitializeOncePerProcess() { +#ifdef V8_COMPRESS_POINTERS_IN_SHARED_CAGE + PtrComprCageReservationParams params; + if (!GetProcessWidePtrComprCage()->InitReservation(params)) { + V8::FatalProcessOutOfMemory( + nullptr, + "Failed to reserve virtual memory for process-wide V8 " + "pointer compression cage"); + } #endif +} - if (overreserve) { - if (padded_reservation.InVM(address, reservation_size)) { - reservation_ = std::move(padded_reservation); - return address; - } - } else { - // Now free the padded reservation and immediately try to reserve an exact - // region at aligned address. We have to do this dancing because the - // reservation address requirement is more complex than just a certain - // alignment and not all operating systems support freeing parts of - // reserved address space regions. - padded_reservation.Free(); - - VirtualMemory reservation(platform_page_allocator, reservation_size, - reinterpret_cast<void*>(address)); - if (!reservation.IsReserved()) break; - - // The reservation could still be somewhere else but we can accept it - // if it has the required alignment. - Address address = - RoundUp(reservation.address() + kIsolateRootBiasPageSize, - base_alignment) - - kIsolateRootBiasPageSize; - - if (reservation.address() == address) { - reservation_ = std::move(reservation); - CHECK_EQ(reservation_.size(), reservation_size); - return address; - } - } +IsolateAllocator::IsolateAllocator() { +#if defined(V8_COMPRESS_POINTERS_IN_ISOLATE_CAGE) + PtrComprCageReservationParams params; + if (!isolate_ptr_compr_cage_.InitReservation(params)) { + V8::FatalProcessOutOfMemory( + nullptr, + "Failed to reserve memory for Isolate V8 pointer compression cage"); } - V8::FatalProcessOutOfMemory(nullptr, - "Failed to reserve memory for new V8 Isolate"); - return kNullAddress; + page_allocator_ = isolate_ptr_compr_cage_.page_allocator(); + CommitPagesForIsolate(); +#elif defined(V8_COMPRESS_POINTERS_IN_SHARED_CAGE) + // Allocate Isolate in C++ heap when sharing a cage. + CHECK(GetProcessWidePtrComprCage()->IsReserved()); + page_allocator_ = GetProcessWidePtrComprCage()->page_allocator(); + isolate_memory_ = ::operator new(sizeof(Isolate)); +#else + // Allocate Isolate in C++ heap. + page_allocator_ = GetPlatformPageAllocator(); + isolate_memory_ = ::operator new(sizeof(Isolate)); +#endif // V8_COMPRESS_POINTERS + + CHECK_NOT_NULL(page_allocator_); } -void IsolateAllocator::CommitPagesForIsolate(Address heap_reservation_address) { - v8::PageAllocator* platform_page_allocator = GetPlatformPageAllocator(); +IsolateAllocator::~IsolateAllocator() { +#ifdef V8_COMPRESS_POINTERS_IN_ISOLATE_CAGE + if (isolate_ptr_compr_cage_.reservation()->IsReserved()) { + // The actual memory will be freed when the |isolate_ptr_compr_cage_| will + // die. + return; + } +#endif - const size_t kIsolateRootBiasPageSize = - GetIsolateRootBiasPageSize(platform_page_allocator); + // The memory was allocated in C++ heap. + ::operator delete(isolate_memory_); +} - Address isolate_root = heap_reservation_address + kIsolateRootBiasPageSize; - CHECK(IsAligned(isolate_root, kPtrComprCageBaseAlignment)); +VirtualMemoryCage* IsolateAllocator::GetPtrComprCage() { +#if defined V8_COMPRESS_POINTERS_IN_ISOLATE_CAGE + return &isolate_ptr_compr_cage_; +#elif defined V8_COMPRESS_POINTERS_IN_SHARED_CAGE + return GetProcessWidePtrComprCage(); +#else + return nullptr; +#endif +} - CHECK(reservation_.InVM( - heap_reservation_address, - kPtrComprCageReservationSize + kIsolateRootBiasPageSize)); +const VirtualMemoryCage* IsolateAllocator::GetPtrComprCage() const { + return const_cast<IsolateAllocator*>(this)->GetPtrComprCage(); +} - // Simplify BoundedPageAllocator's life by configuring it to use same page - // size as the Heap will use (MemoryChunk::kPageSize). - size_t page_size = RoundUp(size_t{1} << kPageSizeBits, - platform_page_allocator->AllocatePageSize()); +#ifdef V8_COMPRESS_POINTERS_IN_ISOLATE_CAGE +void IsolateAllocator::CommitPagesForIsolate() { + v8::PageAllocator* platform_page_allocator = GetPlatformPageAllocator(); - page_allocator_instance_ = std::make_unique<base::BoundedPageAllocator>( - platform_page_allocator, isolate_root, kPtrComprCageReservationSize, - page_size); - page_allocator_ = page_allocator_instance_.get(); + CHECK(isolate_ptr_compr_cage_.IsReserved()); + Address isolate_root = isolate_ptr_compr_cage_.base(); + CHECK(IsAligned(isolate_root, kPtrComprCageBaseAlignment)); + CHECK_GE(isolate_ptr_compr_cage_.reservation()->size(), + kPtrComprCageReservationSize + + GetIsolateRootBiasPageSize(platform_page_allocator)); + CHECK(isolate_ptr_compr_cage_.reservation()->InVM( + isolate_root, kPtrComprCageReservationSize)); + size_t page_size = page_allocator_->AllocatePageSize(); Address isolate_address = isolate_root - Isolate::isolate_root_bias(); Address isolate_end = isolate_address + sizeof(Isolate); @@ -162,7 +157,7 @@ void IsolateAllocator::CommitPagesForIsolate(Address heap_reservation_address) { size_t reserved_region_size = RoundUp(isolate_end, page_size) - reserved_region_address; - CHECK(page_allocator_instance_->AllocatePagesAt( + CHECK(isolate_ptr_compr_cage_.page_allocator()->AllocatePagesAt( reserved_region_address, reserved_region_size, PageAllocator::Permission::kNoAccess)); } @@ -175,11 +170,12 @@ void IsolateAllocator::CommitPagesForIsolate(Address heap_reservation_address) { size_t committed_region_size = RoundUp(isolate_end, commit_page_size) - committed_region_address; - // We are using |reservation_| directly here because |page_allocator_| has - // bigger commit page size than we actually need. - CHECK(reservation_.SetPermissions(committed_region_address, - committed_region_size, - PageAllocator::kReadWrite)); + // We are using |isolate_ptr_compr_cage_.reservation()| directly here + // because |page_allocator_| has bigger commit page size than we actually + // need. + CHECK(isolate_ptr_compr_cage_.reservation()->SetPermissions( + committed_region_address, committed_region_size, + PageAllocator::kReadWrite)); if (Heap::ShouldZapGarbage()) { MemsetPointer(reinterpret_cast<Address*>(committed_region_address), @@ -188,7 +184,7 @@ void IsolateAllocator::CommitPagesForIsolate(Address heap_reservation_address) { } isolate_memory_ = reinterpret_cast<void*>(isolate_address); } -#endif // V8_COMPRESS_POINTERS +#endif // V8_COMPRESS_POINTERS_IN_ISOLATE_CAGE } // namespace internal } // namespace v8 diff --git a/deps/v8/src/init/isolate-allocator.h b/deps/v8/src/init/isolate-allocator.h index 9f894da159..2bf739ec49 100644 --- a/deps/v8/src/init/isolate-allocator.h +++ b/deps/v8/src/init/isolate-allocator.h @@ -7,26 +7,24 @@ #include <memory> -#include "src/base/bounded-page-allocator.h" #include "src/base/page-allocator.h" #include "src/common/globals.h" +#include "src/flags/flags.h" #include "src/utils/allocation.h" namespace v8 { - -// Forward declarations. -namespace base { -class BoundedPageAllocator; -} // namespace base - namespace internal { // IsolateAllocator object is responsible for allocating memory for one (!) // Isolate object. Depending on the whether pointer compression is enabled, // the memory can be allocated -// 1) in the C++ heap (when pointer compression is disabled) +// +// 1) in the C++ heap (when pointer compression is disabled or when multiple +// Isolates share a pointer compression cage) +// // 2) in a proper part of a properly aligned region of a reserved address space -// (when pointer compression is enabled). +// (when pointer compression is enabled and each Isolate has its own pointer +// compression cage). // // Isolate::New() first creates IsolateAllocator object which allocates the // memory and then it constructs Isolate object in this memory. Once it's done @@ -44,15 +42,30 @@ class V8_EXPORT_PRIVATE IsolateAllocator final { v8::PageAllocator* page_allocator() const { return page_allocator_; } + Address GetPtrComprCageBase() const { + return COMPRESS_POINTERS_BOOL ? GetPtrComprCage()->base() : kNullAddress; + } + + // When pointer compression is on, return the pointer compression + // cage. Otherwise return nullptr. + VirtualMemoryCage* GetPtrComprCage(); + const VirtualMemoryCage* GetPtrComprCage() const; + + static void InitializeOncePerProcess(); + private: - Address InitReservation(); - void CommitPagesForIsolate(Address heap_reservation_address); + void CommitPagesForIsolate(); + + friend class SequentialUnmapperTest; + // Only used for testing. + static void FreeProcessWidePtrComprCageForTesting(); // The allocated memory for Isolate instance. void* isolate_memory_ = nullptr; v8::PageAllocator* page_allocator_ = nullptr; - std::unique_ptr<base::BoundedPageAllocator> page_allocator_instance_; - VirtualMemory reservation_; +#ifdef V8_COMPRESS_POINTERS_IN_ISOLATE_CAGE + VirtualMemoryCage isolate_ptr_compr_cage_; +#endif }; } // namespace internal diff --git a/deps/v8/src/init/v8.cc b/deps/v8/src/init/v8.cc index fbf120b1b6..e14d02efbd 100644 --- a/deps/v8/src/init/v8.cc +++ b/deps/v8/src/init/v8.cc @@ -133,6 +133,26 @@ void V8::InitializeOncePerProcessImpl() { } #endif + // When fuzzing and concurrent compilation is enabled, disable Turbofan + // tracing flags since reading/printing heap state is not thread-safe and + // leads to false positives on TSAN bots. + // TODO(chromium:1205289): Teach relevant fuzzers to not pass TF tracing + // flags instead, and remove this section. + if (FLAG_fuzzing && FLAG_concurrent_recompilation) { + FLAG_trace_turbo = false; + FLAG_trace_turbo_graph = false; + FLAG_trace_turbo_scheduled = false; + FLAG_trace_turbo_reduction = false; + FLAG_trace_turbo_trimming = false; + FLAG_trace_turbo_jt = false; + FLAG_trace_turbo_ceq = false; + FLAG_trace_turbo_loop = false; + FLAG_trace_turbo_alloc = false; + FLAG_trace_all_uses = false; + FLAG_trace_representation = false; + FLAG_trace_turbo_stack_accesses = false; + } + if (FLAG_regexp_interpret_all && FLAG_regexp_tier_up) { // Turning off the tier-up strategy, because the --regexp-interpret-all and // --regexp-tier-up flags are incompatible. @@ -151,6 +171,7 @@ void V8::InitializeOncePerProcessImpl() { #if defined(V8_USE_PERFETTO) if (perfetto::Tracing::IsInitialized()) TrackEvent::Register(); #endif + IsolateAllocator::InitializeOncePerProcess(); Isolate::InitializeOncePerProcess(); #if defined(USE_SIMULATOR) @@ -163,6 +184,8 @@ void V8::InitializeOncePerProcessImpl() { #if V8_ENABLE_WEBASSEMBLY wasm::WasmEngine::InitializeOncePerProcess(); #endif // V8_ENABLE_WEBASSEMBLY + + ExternalReferenceTable::InitializeOncePerProcess(); } void V8::InitializeOncePerProcess() { diff --git a/deps/v8/src/inspector/injected-script.cc b/deps/v8/src/inspector/injected-script.cc index 992ff50fe7..fc029e937a 100644 --- a/deps/v8/src/inspector/injected-script.cc +++ b/deps/v8/src/inspector/injected-script.cc @@ -302,7 +302,8 @@ class InjectedScript::ProtocolPromiseHandler { exceptionDetails->setStackTrace( stack->buildInspectorObjectImpl(m_inspector->debugger())); if (stack && !stack->isEmpty()) - exceptionDetails->setScriptId(toString16(stack->topScriptId())); + exceptionDetails->setScriptId( + String16::fromInteger(stack->topScriptId())); callback->sendSuccess(std::move(wrappedValue), std::move(exceptionDetails)); } diff --git a/deps/v8/src/inspector/injected-script.h b/deps/v8/src/inspector/injected-script.h index 01d0ff0665..9971d7da3a 100644 --- a/deps/v8/src/inspector/injected-script.h +++ b/deps/v8/src/inspector/injected-script.h @@ -173,7 +173,8 @@ class InjectedScript final { int m_sessionId; }; - class ContextScope : public Scope { + class ContextScope : public Scope, + public V8InspectorSession::CommandLineAPIScope { public: ContextScope(V8InspectorSessionImpl*, int executionContextId); ~ContextScope() override; diff --git a/deps/v8/src/inspector/string-16.h b/deps/v8/src/inspector/string-16.h index 88a7584255..b38917185e 100644 --- a/deps/v8/src/inspector/string-16.h +++ b/deps/v8/src/inspector/string-16.h @@ -27,8 +27,8 @@ class String16 { String16(const String16&) V8_NOEXCEPT = default; String16(String16&&) V8_NOEXCEPT = default; String16(const UChar* characters, size_t size); - V8_EXPORT String16(const UChar* characters); // NOLINT(runtime/explicit) - V8_EXPORT String16(const char* characters); // NOLINT(runtime/explicit) + V8_EXPORT String16(const UChar* characters); + V8_EXPORT String16(const char* characters); String16(const char* characters, size_t size); explicit String16(const std::basic_string<UChar>& impl); explicit String16(std::basic_string<UChar>&& impl); diff --git a/deps/v8/src/inspector/v8-console-message.cc b/deps/v8/src/inspector/v8-console-message.cc index 58a37073a8..1b03a02c7b 100644 --- a/deps/v8/src/inspector/v8-console-message.cc +++ b/deps/v8/src/inspector/v8-console-message.cc @@ -152,7 +152,7 @@ class V8ValueStringBuilder { bool append(v8::Local<v8::Symbol> symbol) { m_builder.append("Symbol("); - bool result = append(symbol->Description(), IgnoreUndefined); + bool result = append(symbol->Description(m_isolate), IgnoreUndefined); m_builder.append(')'); return result; } diff --git a/deps/v8/src/inspector/v8-console.cc b/deps/v8/src/inspector/v8-console.cc index cc464ebe04..afe790fb62 100644 --- a/deps/v8/src/inspector/v8-console.cc +++ b/deps/v8/src/inspector/v8-console.cc @@ -162,14 +162,9 @@ class ConsoleHelper { int m_groupId; }; -void returnDataCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - info.GetReturnValue().Set(info.Data()); -} - void createBoundFunctionProperty( v8::Local<v8::Context> context, v8::Local<v8::Object> console, v8::Local<v8::Value> data, const char* name, v8::FunctionCallback callback, - const char* description = nullptr, v8::SideEffectType side_effect_type = v8::SideEffectType::kHasSideEffect) { v8::Local<v8::String> funcName = toV8StringInternalized(context->GetIsolate(), name); @@ -179,18 +174,6 @@ void createBoundFunctionProperty( .ToLocal(&func)) return; func->SetName(funcName); - if (description) { - v8::Local<v8::String> returnValue = - toV8String(context->GetIsolate(), description); - v8::Local<v8::Function> toStringFunction; - if (v8::Function::New(context, returnDataCallback, returnValue, 0, - v8::ConstructorBehavior::kThrow, - v8::SideEffectType::kHasNoSideEffect) - .ToLocal(&toStringFunction)) - createDataProperty(context, func, toV8StringInternalized( - context->GetIsolate(), "toString"), - toStringFunction); - } createDataProperty(context, console, funcName, func); } @@ -498,11 +481,11 @@ void V8Console::valuesCallback(const v8::FunctionCallbackInfo<v8::Value>& info, info.GetReturnValue().Set(values); } -static void setFunctionBreakpoint( - ConsoleHelper& helper, // NOLINT(runtime/references) - int sessionId, v8::Local<v8::Function> function, - V8DebuggerAgentImpl::BreakpointSource source, - v8::Local<v8::String> condition, bool enable) { +static void setFunctionBreakpoint(ConsoleHelper& helper, int sessionId, + v8::Local<v8::Function> function, + V8DebuggerAgentImpl::BreakpointSource source, + v8::Local<v8::String> condition, + bool enable) { V8InspectorSessionImpl* session = helper.session(sessionId); if (session == nullptr) return; if (!session->debuggerAgent()->enabled()) return; @@ -557,8 +540,9 @@ void V8Console::monitorFunctionCallback( else builder.append(functionName); builder.append( - " called\" + (arguments.length > 0 ? \" with arguments: \" + " - "Array.prototype.join.call(arguments, \", \") : \"\")) && false"); + " called\" + (typeof arguments !== \"undefined\" && arguments.length > 0 " + "? \" with arguments: \" + Array.prototype.join.call(arguments, \", \") " + ": \"\")) && false"); setFunctionBreakpoint(helper, sessionId, function, V8DebuggerAgentImpl::MonitorCommandBreakpointSource, toV8String(info.GetIsolate(), builder.toString()), @@ -696,80 +680,62 @@ v8::Local<v8::Object> V8Console::createCommandLineAPI( *static_cast<CommandLineAPIData*>(data->GetBackingStore()->Data()) = CommandLineAPIData(this, sessionId); createBoundFunctionProperty(context, commandLineAPI, data, "dir", - &V8Console::call<&V8Console::Dir>, - "function dir(value) { [Command Line API] }"); + &V8Console::call<&V8Console::Dir>); createBoundFunctionProperty(context, commandLineAPI, data, "dirxml", - &V8Console::call<&V8Console::DirXml>, - "function dirxml(value) { [Command Line API] }"); + &V8Console::call<&V8Console::DirXml>); createBoundFunctionProperty(context, commandLineAPI, data, "profile", - &V8Console::call<&V8Console::Profile>, - "function profile(title) { [Command Line API] }"); - createBoundFunctionProperty( - context, commandLineAPI, data, "profileEnd", - &V8Console::call<&V8Console::ProfileEnd>, - "function profileEnd(title) { [Command Line API] }"); + &V8Console::call<&V8Console::Profile>); + createBoundFunctionProperty(context, commandLineAPI, data, "profileEnd", + &V8Console::call<&V8Console::ProfileEnd>); createBoundFunctionProperty(context, commandLineAPI, data, "clear", - &V8Console::call<&V8Console::Clear>, - "function clear() { [Command Line API] }"); - createBoundFunctionProperty( - context, commandLineAPI, data, "table", - &V8Console::call<&V8Console::Table>, - "function table(data, [columns]) { [Command Line API] }"); + &V8Console::call<&V8Console::Clear>); + createBoundFunctionProperty(context, commandLineAPI, data, "table", + &V8Console::call<&V8Console::Table>); createBoundFunctionProperty(context, commandLineAPI, data, "keys", &V8Console::call<&V8Console::keysCallback>, - "function keys(object) { [Command Line API] }", v8::SideEffectType::kHasNoSideEffect); createBoundFunctionProperty(context, commandLineAPI, data, "values", &V8Console::call<&V8Console::valuesCallback>, - "function values(object) { [Command Line API] }", v8::SideEffectType::kHasNoSideEffect); createBoundFunctionProperty( context, commandLineAPI, data, "debug", - &V8Console::call<&V8Console::debugFunctionCallback>, - "function debug(function, condition) { [Command Line API] }"); + &V8Console::call<&V8Console::debugFunctionCallback>); createBoundFunctionProperty( context, commandLineAPI, data, "undebug", - &V8Console::call<&V8Console::undebugFunctionCallback>, - "function undebug(function) { [Command Line API] }"); + &V8Console::call<&V8Console::undebugFunctionCallback>); createBoundFunctionProperty( context, commandLineAPI, data, "monitor", - &V8Console::call<&V8Console::monitorFunctionCallback>, - "function monitor(function) { [Command Line API] }"); + &V8Console::call<&V8Console::monitorFunctionCallback>); createBoundFunctionProperty( context, commandLineAPI, data, "unmonitor", - &V8Console::call<&V8Console::unmonitorFunctionCallback>, - "function unmonitor(function) { [Command Line API] }"); - createBoundFunctionProperty( - context, commandLineAPI, data, "inspect", - &V8Console::call<&V8Console::inspectCallback>, - "function inspect(object) { [Command Line API] }"); + &V8Console::call<&V8Console::unmonitorFunctionCallback>); + createBoundFunctionProperty(context, commandLineAPI, data, "inspect", + &V8Console::call<&V8Console::inspectCallback>); createBoundFunctionProperty(context, commandLineAPI, data, "copy", - &V8Console::call<&V8Console::copyCallback>, - "function copy(value) { [Command Line API] }"); + &V8Console::call<&V8Console::copyCallback>); createBoundFunctionProperty( context, commandLineAPI, data, "queryObjects", - &V8Console::call<&V8Console::queryObjectsCallback>, - "function queryObjects(constructor) { [Command Line API] }"); + &V8Console::call<&V8Console::queryObjectsCallback>); createBoundFunctionProperty( context, commandLineAPI, data, "$_", - &V8Console::call<&V8Console::lastEvaluationResultCallback>, nullptr, + &V8Console::call<&V8Console::lastEvaluationResultCallback>, v8::SideEffectType::kHasNoSideEffect); createBoundFunctionProperty(context, commandLineAPI, data, "$0", &V8Console::call<&V8Console::inspectedObject0>, - nullptr, v8::SideEffectType::kHasNoSideEffect); + v8::SideEffectType::kHasNoSideEffect); createBoundFunctionProperty(context, commandLineAPI, data, "$1", &V8Console::call<&V8Console::inspectedObject1>, - nullptr, v8::SideEffectType::kHasNoSideEffect); + v8::SideEffectType::kHasNoSideEffect); createBoundFunctionProperty(context, commandLineAPI, data, "$2", &V8Console::call<&V8Console::inspectedObject2>, - nullptr, v8::SideEffectType::kHasNoSideEffect); + v8::SideEffectType::kHasNoSideEffect); createBoundFunctionProperty(context, commandLineAPI, data, "$3", &V8Console::call<&V8Console::inspectedObject3>, - nullptr, v8::SideEffectType::kHasNoSideEffect); + v8::SideEffectType::kHasNoSideEffect); createBoundFunctionProperty(context, commandLineAPI, data, "$4", &V8Console::call<&V8Console::inspectedObject4>, - nullptr, v8::SideEffectType::kHasNoSideEffect); + v8::SideEffectType::kHasNoSideEffect); m_inspector->client()->installAdditionalCommandLineAPI(context, commandLineAPI); diff --git a/deps/v8/src/inspector/v8-debugger-agent-impl.cc b/deps/v8/src/inspector/v8-debugger-agent-impl.cc index f99d57d33e..6b54e192a5 100644 --- a/deps/v8/src/inspector/v8-debugger-agent-impl.cc +++ b/deps/v8/src/inspector/v8-debugger-agent-impl.cc @@ -1042,23 +1042,7 @@ Response V8DebuggerAgentImpl::restartFrame( std::unique_ptr<Array<CallFrame>>* newCallFrames, Maybe<protocol::Runtime::StackTrace>* asyncStackTrace, Maybe<protocol::Runtime::StackTraceId>* asyncStackTraceId) { - if (!isPaused()) return Response::ServerError(kDebuggerNotPaused); - InjectedScript::CallFrameScope scope(m_session, callFrameId); - Response response = scope.initialize(); - if (!response.IsSuccess()) return response; - int frameOrdinal = static_cast<int>(scope.frameOrdinal()); - auto it = v8::debug::StackTraceIterator::Create(m_isolate, frameOrdinal); - if (it->Done()) { - return Response::ServerError("Could not find call frame with given id"); - } - if (!it->Restart()) { - return Response::InternalError(); - } - response = currentCallFrames(newCallFrames); - if (!response.IsSuccess()) return response; - *asyncStackTrace = currentAsyncStackTrace(); - *asyncStackTraceId = currentExternalStackTrace(); - return Response::Success(); + return Response::ServerError("Frame restarting not supported"); } Response V8DebuggerAgentImpl::getScriptSource( diff --git a/deps/v8/src/inspector/v8-debugger.cc b/deps/v8/src/inspector/v8-debugger.cc index 9f035b578e..6887657239 100644 --- a/deps/v8/src/inspector/v8-debugger.cc +++ b/deps/v8/src/inspector/v8-debugger.cc @@ -24,7 +24,7 @@ static const int kMaxAsyncTaskStacks = 128 * 1024; static const int kNoBreakpointId = 0; template <typename Map> -void cleanupExpiredWeakPointers(Map& map) { // NOLINT(runtime/references) +void cleanupExpiredWeakPointers(Map& map) { for (auto it = map.begin(); it != map.end();) { if (it->second.expired()) { it = map.erase(it); diff --git a/deps/v8/src/inspector/v8-heap-profiler-agent-impl.cc b/deps/v8/src/inspector/v8-heap-profiler-agent-impl.cc index 6472c5ca94..b441be565c 100644 --- a/deps/v8/src/inspector/v8-heap-profiler-agent-impl.cc +++ b/deps/v8/src/inspector/v8-heap-profiler-agent-impl.cc @@ -232,10 +232,12 @@ Response V8HeapProfilerAgentImpl::startTrackingHeapObjects( } Response V8HeapProfilerAgentImpl::stopTrackingHeapObjects( - Maybe<bool> reportProgress, Maybe<bool> treatGlobalObjectsAsRoots) { + Maybe<bool> reportProgress, Maybe<bool> treatGlobalObjectsAsRoots, + Maybe<bool> captureNumericValue) { requestHeapStatsUpdate(); takeHeapSnapshot(std::move(reportProgress), - std::move(treatGlobalObjectsAsRoots)); + std::move(treatGlobalObjectsAsRoots), + std::move(captureNumericValue)); stopTrackingHeapObjectsInternal(); return Response::Success(); } @@ -258,7 +260,8 @@ Response V8HeapProfilerAgentImpl::disable() { } Response V8HeapProfilerAgentImpl::takeHeapSnapshot( - Maybe<bool> reportProgress, Maybe<bool> treatGlobalObjectsAsRoots) { + Maybe<bool> reportProgress, Maybe<bool> treatGlobalObjectsAsRoots, + Maybe<bool> captureNumericValue) { v8::HeapProfiler* profiler = m_isolate->GetHeapProfiler(); if (!profiler) return Response::ServerError("Cannot access v8 heap profiler"); std::unique_ptr<HeapSnapshotProgress> progress; @@ -267,7 +270,8 @@ Response V8HeapProfilerAgentImpl::takeHeapSnapshot( GlobalObjectNameResolver resolver(m_session); const v8::HeapSnapshot* snapshot = profiler->TakeHeapSnapshot( - progress.get(), &resolver, treatGlobalObjectsAsRoots.fromMaybe(true)); + progress.get(), &resolver, treatGlobalObjectsAsRoots.fromMaybe(true), + captureNumericValue.fromMaybe(false)); if (!snapshot) return Response::ServerError("Failed to take heap snapshot"); HeapSnapshotOutputStream stream(&m_frontend); snapshot->Serialize(&stream); @@ -375,6 +379,9 @@ Response V8HeapProfilerAgentImpl::startSampling( const unsigned defaultSamplingInterval = 1 << 15; double samplingIntervalValue = samplingInterval.fromMaybe(defaultSamplingInterval); + if (samplingIntervalValue <= 0.0) { + return Response::ServerError("Invalid sampling interval"); + } m_state->setDouble(HeapProfilerAgentState::samplingHeapProfilerInterval, samplingIntervalValue); m_state->setBoolean(HeapProfilerAgentState::samplingHeapProfilerEnabled, diff --git a/deps/v8/src/inspector/v8-heap-profiler-agent-impl.h b/deps/v8/src/inspector/v8-heap-profiler-agent-impl.h index b9babdb989..feda75ffb7 100644 --- a/deps/v8/src/inspector/v8-heap-profiler-agent-impl.h +++ b/deps/v8/src/inspector/v8-heap-profiler-agent-impl.h @@ -34,14 +34,15 @@ class V8HeapProfilerAgentImpl : public protocol::HeapProfiler::Backend { Response enable() override; Response startTrackingHeapObjects(Maybe<bool> trackAllocations) override; - Response stopTrackingHeapObjects( - Maybe<bool> reportProgress, - Maybe<bool> treatGlobalObjectsAsRoots) override; + Response stopTrackingHeapObjects(Maybe<bool> reportProgress, + Maybe<bool> treatGlobalObjectsAsRoots, + Maybe<bool> captureNumericValue) override; Response disable() override; Response takeHeapSnapshot(Maybe<bool> reportProgress, - Maybe<bool> treatGlobalObjectsAsRoots) override; + Maybe<bool> treatGlobalObjectsAsRoots, + Maybe<bool> captureNumericValue) override; Response getObjectByHeapObjectId( const String16& heapSnapshotObjectId, Maybe<String16> objectGroup, diff --git a/deps/v8/src/inspector/v8-inspector-session-impl.cc b/deps/v8/src/inspector/v8-inspector-session-impl.cc index 02b694a1a9..b926ddfbba 100644 --- a/deps/v8/src/inspector/v8-inspector-session-impl.cc +++ b/deps/v8/src/inspector/v8-inspector-session-impl.cc @@ -155,6 +155,20 @@ V8InspectorSessionImpl::~V8InspectorSessionImpl() { m_inspector->disconnect(this); } +std::unique_ptr<V8InspectorSession::CommandLineAPIScope> +V8InspectorSessionImpl::initializeCommandLineAPIScope(int executionContextId) { + auto scope = + std::make_unique<InjectedScript::ContextScope>(this, executionContextId); + auto result = scope->initialize(); + if (!result.IsSuccess()) { + return nullptr; + } + + scope->installCommandLineAPI(); + + return scope; +} + protocol::DictionaryValue* V8InspectorSessionImpl::agentState( const String16& name) { protocol::DictionaryValue* state = m_state->getObject(name); diff --git a/deps/v8/src/inspector/v8-inspector-session-impl.h b/deps/v8/src/inspector/v8-inspector-session-impl.h index db530385aa..115c15c5fa 100644 --- a/deps/v8/src/inspector/v8-inspector-session-impl.h +++ b/deps/v8/src/inspector/v8-inspector-session-impl.h @@ -50,6 +50,9 @@ class V8InspectorSessionImpl : public V8InspectorSession, int contextGroupId() const { return m_contextGroupId; } int sessionId() const { return m_sessionId; } + std::unique_ptr<V8InspectorSession::CommandLineAPIScope> + initializeCommandLineAPIScope(int executionContextId) override; + Response findInjectedScript(int contextId, InjectedScript*&); Response findInjectedScript(RemoteObjectIdBase*, InjectedScript*&); void reset(); diff --git a/deps/v8/src/inspector/v8-profiler-agent-impl.cc b/deps/v8/src/inspector/v8-profiler-agent-impl.cc index 47be944879..8ebee1fd21 100644 --- a/deps/v8/src/inspector/v8-profiler-agent-impl.cc +++ b/deps/v8/src/inspector/v8-profiler-agent-impl.cc @@ -150,10 +150,11 @@ std::unique_ptr<protocol::Debugger::Location> currentDebugLocation( V8InspectorImpl* inspector) { std::unique_ptr<V8StackTraceImpl> callStack = inspector->debugger()->captureStackTrace(false /* fullStack */); - auto location = protocol::Debugger::Location::create() - .setScriptId(toString16(callStack->topScriptId())) - .setLineNumber(callStack->topLineNumber()) - .build(); + auto location = + protocol::Debugger::Location::create() + .setScriptId(String16::fromInteger(callStack->topScriptId())) + .setLineNumber(callStack->topLineNumber()) + .build(); location->setColumnNumber(callStack->topColumnNumber()); return location; } diff --git a/deps/v8/src/inspector/v8-runtime-agent-impl.cc b/deps/v8/src/inspector/v8-runtime-agent-impl.cc index 6fee3b3b05..97fc07a6bf 100644 --- a/deps/v8/src/inspector/v8-runtime-agent-impl.cc +++ b/deps/v8/src/inspector/v8-runtime-agent-impl.cc @@ -109,8 +109,7 @@ bool wrapEvaluateResultAsync(InjectedScript* injectedScript, } void innerCallFunctionOn( - V8InspectorSessionImpl* session, - InjectedScript::Scope& scope, // NOLINT(runtime/references) + V8InspectorSessionImpl* session, InjectedScript::Scope& scope, v8::Local<v8::Value> recv, const String16& expression, Maybe<protocol::Array<protocol::Runtime::CallArgument>> optionalArguments, bool silent, WrapMode wrapMode, bool userGesture, bool awaitPromise, @@ -694,7 +693,6 @@ protocol::DictionaryValue* getOrCreateDictionary( Response V8RuntimeAgentImpl::addBinding(const String16& name, Maybe<int> executionContextId, Maybe<String16> executionContextName) { - if (m_activeBindings.count(name)) return Response::Success(); if (executionContextId.isJust()) { if (executionContextName.isJust()) { return Response::InvalidParams( @@ -743,8 +741,8 @@ void V8RuntimeAgentImpl::bindingCallback( const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Isolate* isolate = info.GetIsolate(); if (info.Length() != 1 || !info[0]->IsString()) { - info.GetIsolate()->ThrowException(toV8String( - isolate, "Invalid arguments: should be exactly one string.")); + info.GetIsolate()->ThrowError( + "Invalid arguments: should be exactly one string."); return; } V8InspectorImpl* inspector = @@ -764,6 +762,10 @@ void V8RuntimeAgentImpl::bindingCallback( void V8RuntimeAgentImpl::addBinding(InspectedContext* context, const String16& name) { + auto it = m_activeBindings.find(name); + if (it != m_activeBindings.end() && it->second.count(context->contextId())) { + return; + } v8::HandleScope handles(m_inspector->isolate()); v8::Local<v8::Context> localContext = context->context(); v8::Local<v8::Object> global = localContext->Global(); @@ -775,7 +777,12 @@ void V8RuntimeAgentImpl::addBinding(InspectedContext* context, .ToLocal(&functionValue)) { v8::Maybe<bool> success = global->Set(localContext, v8Name, functionValue); USE(success); - m_activeBindings.insert(name); + if (it == m_activeBindings.end()) { + m_activeBindings.emplace(name, + std::unordered_set<int>(context->contextId())); + } else { + m_activeBindings.at(name).insert(context->contextId()); + } } } diff --git a/deps/v8/src/inspector/v8-runtime-agent-impl.h b/deps/v8/src/inspector/v8-runtime-agent-impl.h index 5ac1e462f8..4694adae27 100644 --- a/deps/v8/src/inspector/v8-runtime-agent-impl.h +++ b/deps/v8/src/inspector/v8-runtime-agent-impl.h @@ -148,7 +148,8 @@ class V8RuntimeAgentImpl : public protocol::Runtime::Backend { bool m_enabled; std::unordered_map<String16, std::unique_ptr<v8::Global<v8::Script>>> m_compiledScripts; - std::set<String16> m_activeBindings; + // Binding name -> executionContextIds mapping. + std::unordered_map<String16, std::unordered_set<int>> m_activeBindings; }; } // namespace v8_inspector diff --git a/deps/v8/src/inspector/v8-stack-trace-impl.cc b/deps/v8/src/inspector/v8-stack-trace-impl.cc index 86bedc07ec..3506c92996 100644 --- a/deps/v8/src/inspector/v8-stack-trace-impl.cc +++ b/deps/v8/src/inspector/v8-stack-trace-impl.cc @@ -7,6 +7,7 @@ #include <algorithm> #include "../../third_party/inspector_protocol/crdtp/json.h" +#include "src/debug/debug-interface.h" #include "src/inspector/v8-debugger.h" #include "src/inspector/v8-inspector-impl.h" #include "src/tracing/trace-event.h" @@ -175,9 +176,9 @@ std::unique_ptr<StringBuffer> V8StackTraceId::ToString() { } StackFrame::StackFrame(v8::Isolate* isolate, v8::Local<v8::StackFrame> v8Frame) - : m_functionName(toProtocolString(isolate, v8Frame->GetFunctionName())), + : m_functionName( + toProtocolString(isolate, v8::debug::GetFunctionDebugName(v8Frame))), m_scriptId(v8Frame->GetScriptId()), - m_scriptIdAsString(String16::fromInteger(v8Frame->GetScriptId())), m_sourceURL( toProtocolString(isolate, v8Frame->GetScriptNameOrSourceURL())), m_lineNumber(v8Frame->GetLineNumber() - 1), @@ -192,10 +193,6 @@ const String16& StackFrame::functionName() const { return m_functionName; } int StackFrame::scriptId() const { return m_scriptId; } -const String16& StackFrame::scriptIdAsString() const { - return m_scriptIdAsString; -} - const String16& StackFrame::sourceURL() const { return m_sourceURL; } int StackFrame::lineNumber() const { return m_lineNumber; } @@ -324,13 +321,7 @@ int V8StackTraceImpl::topColumnNumber() const { return m_frames[0]->columnNumber() + 1; } -StringView V8StackTraceImpl::topScriptId() const { - return toStringView(m_frames[0]->scriptIdAsString()); -} - -int V8StackTraceImpl::topScriptIdAsInteger() const { - return m_frames[0]->scriptId(); -} +int V8StackTraceImpl::topScriptId() const { return m_frames[0]->scriptId(); } StringView V8StackTraceImpl::topFunctionName() const { return toStringView(m_frames[0]->functionName()); diff --git a/deps/v8/src/inspector/v8-stack-trace-impl.h b/deps/v8/src/inspector/v8-stack-trace-impl.h index 3896c7371c..065d5ce47c 100644 --- a/deps/v8/src/inspector/v8-stack-trace-impl.h +++ b/deps/v8/src/inspector/v8-stack-trace-impl.h @@ -27,7 +27,6 @@ class StackFrame { const String16& functionName() const; int scriptId() const; - const String16& scriptIdAsString() const; const String16& sourceURL() const; int lineNumber() const; // 0-based. int columnNumber() const; // 0-based. @@ -38,7 +37,6 @@ class StackFrame { private: String16 m_functionName; int m_scriptId; - String16 m_scriptIdAsString; String16 m_sourceURL; int m_lineNumber; // 0-based. int m_columnNumber; // 0-based. @@ -75,8 +73,7 @@ class V8StackTraceImpl : public V8StackTrace { StringView topSourceURL() const override; int topLineNumber() const override; // 1-based. int topColumnNumber() const override; // 1-based. - StringView topScriptId() const override; - int topScriptIdAsInteger() const override; + int topScriptId() const override; StringView topFunctionName() const override; std::unique_ptr<protocol::Runtime::API::StackTrace> buildInspectorObject() const override; diff --git a/deps/v8/src/inspector/v8-string-conversions.cc b/deps/v8/src/inspector/v8-string-conversions.cc index 4ccf6351fb..0c75e66b97 100644 --- a/deps/v8/src/inspector/v8-string-conversions.cc +++ b/deps/v8/src/inspector/v8-string-conversions.cc @@ -228,9 +228,7 @@ static const UChar32 offsetsFromUTF8[6] = {0x00000000UL, static_cast<UChar32>(0xFA082080UL), static_cast<UChar32>(0x82082080UL)}; -static inline UChar32 readUTF8Sequence( - const char*& sequence, // NOLINT(runtime/references) - size_t length) { +static inline UChar32 readUTF8Sequence(const char*& sequence, size_t length) { UChar32 character = 0; // The cases all fall through. @@ -336,8 +334,7 @@ ConversionResult convertUTF8ToUTF16(const char** sourceStart, // Helper to write a three-byte UTF-8 code point to the buffer, caller must // check room is available. -static inline void putUTF8Triple(char*& buffer, // NOLINT(runtime/references) - UChar ch) { +static inline void putUTF8Triple(char*& buffer, UChar ch) { *buffer++ = static_cast<char>(((ch >> 12) & 0x0F) | 0xE0); *buffer++ = static_cast<char>(((ch >> 6) & 0x3F) | 0x80); *buffer++ = static_cast<char>((ch & 0x3F) | 0x80); diff --git a/deps/v8/src/inspector/value-mirror.cc b/deps/v8/src/inspector/value-mirror.cc index 18d870a94a..5348b76a12 100644 --- a/deps/v8/src/inspector/value-mirror.cc +++ b/deps/v8/src/inspector/value-mirror.cc @@ -165,10 +165,11 @@ String16 abbreviateString(const String16& value, AbbreviateMode mode) { String16 descriptionForSymbol(v8::Local<v8::Context> context, v8::Local<v8::Symbol> symbol) { - return String16::concat("Symbol(", - toProtocolStringWithTypeCheck(context->GetIsolate(), - symbol->Description()), - ")"); + v8::Isolate* isolate = context->GetIsolate(); + return String16::concat( + "Symbol(", + toProtocolStringWithTypeCheck(isolate, symbol->Description(isolate)), + ")"); } String16 descriptionForBigInt(v8::Local<v8::Context> context, @@ -194,21 +195,19 @@ String16 descriptionForPrimitiveType(v8::Local<v8::Context> context, return String16(); } -String16 descriptionForRegExp(v8::Isolate* isolate, +String16 descriptionForObject(v8::Isolate* isolate, + v8::Local<v8::Object> object) { + return toProtocolString(isolate, object->GetConstructorName()); +} + +String16 descriptionForRegExp(v8::Local<v8::Context> context, v8::Local<v8::RegExp> value) { - String16Builder description; - description.append('/'); - description.append(toProtocolString(isolate, value->GetSource())); - description.append('/'); - v8::RegExp::Flags flags = value->GetFlags(); - if (flags & v8::RegExp::Flags::kGlobal) description.append('g'); - if (flags & v8::RegExp::Flags::kIgnoreCase) description.append('i'); - if (flags & v8::RegExp::Flags::kLinear) description.append('l'); - if (flags & v8::RegExp::Flags::kMultiline) description.append('m'); - if (flags & v8::RegExp::Flags::kDotAll) description.append('s'); - if (flags & v8::RegExp::Flags::kUnicode) description.append('u'); - if (flags & v8::RegExp::Flags::kSticky) description.append('y'); - return description.toString(); + v8::Isolate* isolate = context->GetIsolate(); + v8::Local<v8::String> description; + if (!value->ToString(context).ToLocal(&description)) { + return descriptionForObject(isolate, value); + } + return toProtocolString(isolate, description); } enum class ErrorType { kNative, kClient }; @@ -266,11 +265,6 @@ String16 descriptionForError(v8::Local<v8::Context> context, return description + stackWithoutMessage; } -String16 descriptionForObject(v8::Isolate* isolate, - v8::Local<v8::Object> object) { - return toProtocolString(isolate, object->GetConstructorName()); -} - String16 descriptionForDate(v8::Local<v8::Context> context, v8::Local<v8::Date> date) { v8::Isolate* isolate = context->GetIsolate(); @@ -355,14 +349,9 @@ String16 descriptionForEntry(v8::Local<v8::Context> context, return key.length() ? ("{" + key + " => " + value + "}") : value; } -String16 descriptionForFunction(v8::Local<v8::Context> context, - v8::Local<v8::Function> value) { - v8::Isolate* isolate = context->GetIsolate(); - v8::TryCatch tryCatch(isolate); - v8::Local<v8::String> description; - if (!value->ToString(context).ToLocal(&description)) { - return descriptionForObject(isolate, value); - } +String16 descriptionForFunction(v8::Local<v8::Function> value) { + v8::Isolate* isolate = value->GetIsolate(); + v8::Local<v8::String> description = v8::debug::GetFunctionDescription(value); return toProtocolString(isolate, description); } @@ -652,7 +641,7 @@ class FunctionMirror final : public ValueMirror { .setType(RemoteObject::TypeEnum::Function) .setClassName(toProtocolStringWithTypeCheck( context->GetIsolate(), m_value->GetConstructorName())) - .setDescription(descriptionForFunction(context, m_value)) + .setDescription(descriptionForFunction(m_value)) .build(); } return Response::Success(); @@ -673,7 +662,7 @@ class FunctionMirror final : public ValueMirror { *preview = ObjectPreview::create() .setType(RemoteObject::TypeEnum::Function) - .setDescription(descriptionForFunction(context, m_value)) + .setDescription(descriptionForFunction(m_value)) .setOverflow(false) .setProperties(std::make_unique<protocol::Array<PropertyPreview>>()) .build(); @@ -1216,7 +1205,6 @@ bool ValueMirror::getProperties(v8::Local<v8::Context> context, return false; } } - bool shouldSkipProto = internalType == V8InternalValueType::kScopeList; bool formatAccessorsAsProperties = clientFor(context)->formatAccessorsAsProperties(object); @@ -1321,7 +1309,6 @@ bool ValueMirror::getProperties(v8::Local<v8::Context> context, } } if (accessorPropertiesOnly && !isAccessorProperty) continue; - if (name == "__proto__") shouldSkipProto = true; auto mirror = PropertyMirror{name, writable, configurable, @@ -1340,16 +1327,6 @@ bool ValueMirror::getProperties(v8::Local<v8::Context> context, return false; } } - if (!shouldSkipProto && ownProperties && !object->IsProxy() && - !accessorPropertiesOnly) { - v8::Local<v8::Value> prototype = object->GetPrototype(); - if (prototype->IsObject()) { - accumulator->Add(PropertyMirror{String16("__proto__"), true, true, false, - true, false, - ValueMirror::create(context, prototype), - nullptr, nullptr, nullptr, nullptr}); - } - } return true; } @@ -1615,7 +1592,7 @@ std::unique_ptr<ValueMirror> ValueMirror::create(v8::Local<v8::Context> context, if (value->IsRegExp()) { return std::make_unique<ObjectMirror>( value, RemoteObject::SubtypeEnum::Regexp, - descriptionForRegExp(isolate, value.As<v8::RegExp>())); + descriptionForRegExp(context, value.As<v8::RegExp>())); } if (value->IsProxy()) { return std::make_unique<ObjectMirror>( diff --git a/deps/v8/src/interpreter/bytecode-array-builder.cc b/deps/v8/src/interpreter/bytecode-array-builder.cc index 63c07683e6..23c622b033 100644 --- a/deps/v8/src/interpreter/bytecode-array-builder.cc +++ b/deps/v8/src/interpreter/bytecode-array-builder.cc @@ -81,9 +81,8 @@ Register BytecodeArrayBuilder::Local(int index) const { return Register(index); } -template <typename LocalIsolate> -Handle<BytecodeArray> BytecodeArrayBuilder::ToBytecodeArray( - LocalIsolate* isolate) { +template <typename IsolateT> +Handle<BytecodeArray> BytecodeArrayBuilder::ToBytecodeArray(IsolateT* isolate) { DCHECK(RemainderOfBlockIsDead()); DCHECK(!bytecode_generated_); bytecode_generated_ = true; @@ -115,9 +114,9 @@ int BytecodeArrayBuilder::CheckBytecodeMatches(BytecodeArray bytecode) { } #endif -template <typename LocalIsolate> +template <typename IsolateT> Handle<ByteArray> BytecodeArrayBuilder::ToSourcePositionTable( - LocalIsolate* isolate) { + IsolateT* isolate) { DCHECK(RemainderOfBlockIsDead()); return bytecode_array_writer_.ToSourcePositionTable(isolate); @@ -726,11 +725,13 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::LoadGlobal(const AstRawString* name, DCHECK_EQ(GetTypeofModeFromSlotKind(feedback_vector_spec()->GetKind( FeedbackVector::ToSlot(feedback_slot))), typeof_mode); - if (typeof_mode == INSIDE_TYPEOF) { - OutputLdaGlobalInsideTypeof(name_index, feedback_slot); - } else { - DCHECK_EQ(typeof_mode, NOT_INSIDE_TYPEOF); - OutputLdaGlobal(name_index, feedback_slot); + switch (typeof_mode) { + case TypeofMode::kInside: + OutputLdaGlobalInsideTypeof(name_index, feedback_slot); + break; + case TypeofMode::kNotInside: + OutputLdaGlobal(name_index, feedback_slot); + break; } return *this; } @@ -775,11 +776,13 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::StoreContextSlot(Register context, BytecodeArrayBuilder& BytecodeArrayBuilder::LoadLookupSlot( const AstRawString* name, TypeofMode typeof_mode) { size_t name_index = GetConstantPoolEntry(name); - if (typeof_mode == INSIDE_TYPEOF) { - OutputLdaLookupSlotInsideTypeof(name_index); - } else { - DCHECK_EQ(typeof_mode, NOT_INSIDE_TYPEOF); - OutputLdaLookupSlot(name_index); + switch (typeof_mode) { + case TypeofMode::kInside: + OutputLdaLookupSlotInsideTypeof(name_index); + break; + case TypeofMode::kNotInside: + OutputLdaLookupSlot(name_index); + break; } return *this; } @@ -788,11 +791,13 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::LoadLookupContextSlot( const AstRawString* name, TypeofMode typeof_mode, int slot_index, int depth) { size_t name_index = GetConstantPoolEntry(name); - if (typeof_mode == INSIDE_TYPEOF) { - OutputLdaLookupContextSlotInsideTypeof(name_index, slot_index, depth); - } else { - DCHECK(typeof_mode == NOT_INSIDE_TYPEOF); - OutputLdaLookupContextSlot(name_index, slot_index, depth); + switch (typeof_mode) { + case TypeofMode::kInside: + OutputLdaLookupContextSlotInsideTypeof(name_index, slot_index, depth); + break; + case TypeofMode::kNotInside: + OutputLdaLookupContextSlot(name_index, slot_index, depth); + break; } return *this; } @@ -801,11 +806,13 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::LoadLookupGlobalSlot( const AstRawString* name, TypeofMode typeof_mode, int feedback_slot, int depth) { size_t name_index = GetConstantPoolEntry(name); - if (typeof_mode == INSIDE_TYPEOF) { - OutputLdaLookupGlobalSlotInsideTypeof(name_index, feedback_slot, depth); - } else { - DCHECK(typeof_mode == NOT_INSIDE_TYPEOF); - OutputLdaLookupGlobalSlot(name_index, feedback_slot, depth); + switch (typeof_mode) { + case TypeofMode::kInside: + OutputLdaLookupGlobalSlotInsideTypeof(name_index, feedback_slot, depth); + break; + case TypeofMode::kNotInside: + OutputLdaLookupGlobalSlot(name_index, feedback_slot, depth); + break; } return *this; } diff --git a/deps/v8/src/interpreter/bytecode-array-builder.h b/deps/v8/src/interpreter/bytecode-array-builder.h index 28716b401b..3d72777c5a 100644 --- a/deps/v8/src/interpreter/bytecode-array-builder.h +++ b/deps/v8/src/interpreter/bytecode-array-builder.h @@ -46,12 +46,12 @@ class V8_EXPORT_PRIVATE BytecodeArrayBuilder final { BytecodeArrayBuilder(const BytecodeArrayBuilder&) = delete; BytecodeArrayBuilder& operator=(const BytecodeArrayBuilder&) = delete; - template <typename LocalIsolate> + template <typename IsolateT> EXPORT_TEMPLATE_DECLARE(V8_EXPORT_PRIVATE) - Handle<BytecodeArray> ToBytecodeArray(LocalIsolate* isolate); - template <typename LocalIsolate> + Handle<BytecodeArray> ToBytecodeArray(IsolateT* isolate); + template <typename IsolateT> EXPORT_TEMPLATE_DECLARE(V8_EXPORT_PRIVATE) - Handle<ByteArray> ToSourcePositionTable(LocalIsolate* isolate); + Handle<ByteArray> ToSourcePositionTable(IsolateT* isolate); #ifdef DEBUG int CheckBytecodeMatches(BytecodeArray bytecode); diff --git a/deps/v8/src/interpreter/bytecode-array-iterator.cc b/deps/v8/src/interpreter/bytecode-array-iterator.cc index 2579f5d378..bb1fdcb95f 100644 --- a/deps/v8/src/interpreter/bytecode-array-iterator.cc +++ b/deps/v8/src/interpreter/bytecode-array-iterator.cc @@ -207,9 +207,9 @@ Runtime::FunctionId BytecodeArrayIterator::GetIntrinsicIdOperand( static_cast<IntrinsicsHelper::IntrinsicId>(raw_id)); } -template <typename LocalIsolate> +template <typename IsolateT> Handle<Object> BytecodeArrayIterator::GetConstantAtIndex( - int index, LocalIsolate* isolate) const { + int index, IsolateT* isolate) const { return handle(bytecode_array()->constant_pool().get(index), isolate); } @@ -221,9 +221,9 @@ Smi BytecodeArrayIterator::GetConstantAtIndexAsSmi(int index) const { return Smi::cast(bytecode_array()->constant_pool().get(index)); } -template <typename LocalIsolate> +template <typename IsolateT> Handle<Object> BytecodeArrayIterator::GetConstantForIndexOperand( - int operand_index, LocalIsolate* isolate) const { + int operand_index, IsolateT* isolate) const { return GetConstantAtIndex(GetIndexOperand(operand_index), isolate); } diff --git a/deps/v8/src/interpreter/bytecode-array-iterator.h b/deps/v8/src/interpreter/bytecode-array-iterator.h index d0c676d2a3..5e93cbccb8 100644 --- a/deps/v8/src/interpreter/bytecode-array-iterator.h +++ b/deps/v8/src/interpreter/bytecode-array-iterator.h @@ -115,13 +115,13 @@ class V8_EXPORT_PRIVATE BytecodeArrayIterator { Runtime::FunctionId GetRuntimeIdOperand(int operand_index) const; Runtime::FunctionId GetIntrinsicIdOperand(int operand_index) const; uint32_t GetNativeContextIndexOperand(int operand_index) const; - template <typename LocalIsolate> - Handle<Object> GetConstantAtIndex(int offset, LocalIsolate* isolate) const; + template <typename IsolateT> + Handle<Object> GetConstantAtIndex(int offset, IsolateT* isolate) const; bool IsConstantAtIndexSmi(int offset) const; Smi GetConstantAtIndexAsSmi(int offset) const; - template <typename LocalIsolate> + template <typename IsolateT> Handle<Object> GetConstantForIndexOperand(int operand_index, - LocalIsolate* isolate) const; + IsolateT* isolate) const; // Returns the relative offset of the branch target at the current bytecode. // It is an error to call this method if the bytecode is not for a jump or diff --git a/deps/v8/src/interpreter/bytecode-array-writer.cc b/deps/v8/src/interpreter/bytecode-array-writer.cc index 0172d3626b..2ed8e614bb 100644 --- a/deps/v8/src/interpreter/bytecode-array-writer.cc +++ b/deps/v8/src/interpreter/bytecode-array-writer.cc @@ -37,9 +37,9 @@ BytecodeArrayWriter::BytecodeArrayWriter( bytecodes_.reserve(512); // Derived via experimentation. } -template <typename LocalIsolate> +template <typename IsolateT> Handle<BytecodeArray> BytecodeArrayWriter::ToBytecodeArray( - LocalIsolate* isolate, int register_count, int parameter_count, + IsolateT* isolate, int register_count, int parameter_count, Handle<ByteArray> handler_table) { DCHECK_EQ(0, unbound_jumps_); @@ -63,9 +63,9 @@ template EXPORT_TEMPLATE_DEFINE(V8_EXPORT_PRIVATE) LocalIsolate* isolate, int register_count, int parameter_count, Handle<ByteArray> handler_table); -template <typename LocalIsolate> +template <typename IsolateT> Handle<ByteArray> BytecodeArrayWriter::ToSourcePositionTable( - LocalIsolate* isolate) { + IsolateT* isolate) { DCHECK(!source_position_table_builder_.Lazy()); Handle<ByteArray> source_position_table = source_position_table_builder_.Omit() diff --git a/deps/v8/src/interpreter/bytecode-array-writer.h b/deps/v8/src/interpreter/bytecode-array-writer.h index 6517ad9f5e..9976f59c23 100644 --- a/deps/v8/src/interpreter/bytecode-array-writer.h +++ b/deps/v8/src/interpreter/bytecode-array-writer.h @@ -55,15 +55,15 @@ class V8_EXPORT_PRIVATE BytecodeArrayWriter final { void SetFunctionEntrySourcePosition(int position); - template <typename LocalIsolate> + template <typename IsolateT> EXPORT_TEMPLATE_DECLARE(V8_EXPORT_PRIVATE) - Handle<BytecodeArray> ToBytecodeArray(LocalIsolate* isolate, - int register_count, int parameter_count, + Handle<BytecodeArray> ToBytecodeArray(IsolateT* isolate, int register_count, + int parameter_count, Handle<ByteArray> handler_table); - template <typename LocalIsolate> + template <typename IsolateT> EXPORT_TEMPLATE_DECLARE(V8_EXPORT_PRIVATE) - Handle<ByteArray> ToSourcePositionTable(LocalIsolate* isolate); + Handle<ByteArray> ToSourcePositionTable(IsolateT* isolate); #ifdef DEBUG // Returns -1 if they match or the offset of the first mismatching byte. diff --git a/deps/v8/src/interpreter/bytecode-generator.cc b/deps/v8/src/interpreter/bytecode-generator.cc index 76686a9d62..a08c42126b 100644 --- a/deps/v8/src/interpreter/bytecode-generator.cc +++ b/deps/v8/src/interpreter/bytecode-generator.cc @@ -740,11 +740,11 @@ class V8_NODISCARD BytecodeGenerator::TestResultScope final // Used to build a list of toplevel declaration data. class BytecodeGenerator::TopLevelDeclarationsBuilder final : public ZoneObject { public: - template <typename LocalIsolate> + template <typename IsolateT> Handle<FixedArray> AllocateDeclarations(UnoptimizedCompilationInfo* info, BytecodeGenerator* generator, Handle<Script> script, - LocalIsolate* isolate) { + IsolateT* isolate) { DCHECK(has_constant_pool_entry_); Handle<FixedArray> data = @@ -1187,14 +1187,14 @@ using NullContextScopeFor = typename NullContextScopeHelper<Isolate>::Type; } // namespace -template <typename LocalIsolate> +template <typename IsolateT> Handle<BytecodeArray> BytecodeGenerator::FinalizeBytecode( - LocalIsolate* isolate, Handle<Script> script) { + IsolateT* isolate, Handle<Script> script) { DCHECK_EQ(ThreadId::Current(), isolate->thread_id()); #ifdef DEBUG // Unoptimized compilation should be context-independent. Verify that we don't // access the native context by nulling it out during finalization. - NullContextScopeFor<LocalIsolate> null_context_scope(isolate); + NullContextScopeFor<IsolateT> null_context_scope(isolate); #endif AllocateDeferredConstants(isolate, script); @@ -1225,14 +1225,14 @@ template Handle<BytecodeArray> BytecodeGenerator::FinalizeBytecode( template Handle<BytecodeArray> BytecodeGenerator::FinalizeBytecode( LocalIsolate* isolate, Handle<Script> script); -template <typename LocalIsolate> +template <typename IsolateT> Handle<ByteArray> BytecodeGenerator::FinalizeSourcePositionTable( - LocalIsolate* isolate) { + IsolateT* isolate) { DCHECK_EQ(ThreadId::Current(), isolate->thread_id()); #ifdef DEBUG // Unoptimized compilation should be context-independent. Verify that we don't // access the native context by nulling it out during finalization. - NullContextScopeFor<LocalIsolate> null_context_scope(isolate); + NullContextScopeFor<IsolateT> null_context_scope(isolate); #endif Handle<ByteArray> source_position_table = @@ -1257,8 +1257,8 @@ int BytecodeGenerator::CheckBytecodeMatches(BytecodeArray bytecode) { } #endif -template <typename LocalIsolate> -void BytecodeGenerator::AllocateDeferredConstants(LocalIsolate* isolate, +template <typename IsolateT> +void BytecodeGenerator::AllocateDeferredConstants(IsolateT* isolate, Handle<Script> script) { if (top_level_builder()->has_top_level_declaration()) { // Build global declaration pair array. @@ -3289,7 +3289,7 @@ void BytecodeGenerator::BuildVariableLoad(Variable* variable, break; } case VariableLocation::REPL_GLOBAL: { - DCHECK(variable->IsReplGlobalLet()); + DCHECK(variable->IsReplGlobal()); FeedbackSlot slot = GetCachedLoadGlobalICSlot(typeof_mode, variable); builder()->LoadGlobal(variable->raw_name(), feedback_index(slot), typeof_mode); @@ -3478,7 +3478,8 @@ void BytecodeGenerator::BuildVariableAssignment( break; } case VariableLocation::REPL_GLOBAL: { - // A let declaration like 'let x = 7' is effectively translated to: + // A let or const declaration like 'let x = 7' is effectively translated + // to: // <top of the script>: // ScriptContext.x = TheHole; // ... @@ -3488,19 +3489,23 @@ void BytecodeGenerator::BuildVariableAssignment( // The ScriptContext slot for 'x' that we store to here is not // necessarily the ScriptContext of this script, but rather the // first ScriptContext that has a slot for name 'x'. - DCHECK(variable->IsReplGlobalLet()); + DCHECK(variable->IsReplGlobal()); if (op == Token::INIT) { RegisterList store_args = register_allocator()->NewRegisterList(2); builder() ->StoreAccumulatorInRegister(store_args[1]) .LoadLiteral(variable->raw_name()) .StoreAccumulatorInRegister(store_args[0]); - builder()->CallRuntime(Runtime::kStoreGlobalNoHoleCheckForReplLet, - store_args); + builder()->CallRuntime( + Runtime::kStoreGlobalNoHoleCheckForReplLetOrConst, store_args); } else { - FeedbackSlot slot = - GetCachedStoreGlobalICSlot(language_mode(), variable); - builder()->StoreGlobal(variable->raw_name(), feedback_index(slot)); + if (mode == VariableMode::kConst) { + builder()->CallRuntime(Runtime::kThrowConstAssignError); + } else { + FeedbackSlot slot = + GetCachedStoreGlobalICSlot(language_mode(), variable); + builder()->StoreGlobal(variable->raw_name(), feedback_index(slot)); + } } break; } @@ -5420,7 +5425,7 @@ void BytecodeGenerator::VisitForTypeOfValue(Expression* expr) { // perform a non-contextual load in case the operand is a variable proxy. VariableProxy* proxy = expr->AsVariableProxy(); BuildVariableLoadForAccumulatorValue(proxy->var(), proxy->hole_check_mode(), - INSIDE_TYPEOF); + TypeofMode::kInside); } else { VisitForAccumulatorValue(expr); } @@ -6850,7 +6855,7 @@ int BytecodeGenerator::feedback_index(FeedbackSlot slot) const { FeedbackSlot BytecodeGenerator::GetCachedLoadGlobalICSlot( TypeofMode typeof_mode, Variable* variable) { FeedbackSlotCache::SlotKind slot_kind = - typeof_mode == INSIDE_TYPEOF + typeof_mode == TypeofMode::kInside ? FeedbackSlotCache::SlotKind::kLoadGlobalInsideTypeof : FeedbackSlotCache::SlotKind::kLoadGlobalNotInsideTypeof; FeedbackSlot slot(feedback_slot_cache()->Get(slot_kind, variable)); diff --git a/deps/v8/src/interpreter/bytecode-generator.h b/deps/v8/src/interpreter/bytecode-generator.h index 69d5bf8957..f3b048d52d 100644 --- a/deps/v8/src/interpreter/bytecode-generator.h +++ b/deps/v8/src/interpreter/bytecode-generator.h @@ -37,11 +37,11 @@ class BytecodeGenerator final : public AstVisitor<BytecodeGenerator> { std::vector<FunctionLiteral*>* eager_inner_literals); void GenerateBytecode(uintptr_t stack_limit); - template <typename LocalIsolate> - Handle<BytecodeArray> FinalizeBytecode(LocalIsolate* isolate, + template <typename IsolateT> + Handle<BytecodeArray> FinalizeBytecode(IsolateT* isolate, Handle<Script> script); - template <typename LocalIsolate> - Handle<ByteArray> FinalizeSourcePositionTable(LocalIsolate* isolate); + template <typename IsolateT> + Handle<ByteArray> FinalizeSourcePositionTable(IsolateT* isolate); #ifdef DEBUG int CheckBytecodeMatches(BytecodeArray bytecode); @@ -165,8 +165,8 @@ class BytecodeGenerator final : public AstVisitor<BytecodeGenerator> { }; void GenerateBytecodeBody(); - template <typename LocalIsolate> - void AllocateDeferredConstants(LocalIsolate* isolate, Handle<Script> script); + template <typename IsolateT> + void AllocateDeferredConstants(IsolateT* isolate, Handle<Script> script); DEFINE_AST_VISITOR_SUBCLASS_MEMBERS(); @@ -243,10 +243,10 @@ class BytecodeGenerator final : public AstVisitor<BytecodeGenerator> { const AstRawString* name); void BuildVariableLoad(Variable* variable, HoleCheckMode hole_check_mode, - TypeofMode typeof_mode = NOT_INSIDE_TYPEOF); + TypeofMode typeof_mode = TypeofMode::kNotInside); void BuildVariableLoadForAccumulatorValue( Variable* variable, HoleCheckMode hole_check_mode, - TypeofMode typeof_mode = NOT_INSIDE_TYPEOF); + TypeofMode typeof_mode = TypeofMode::kNotInside); void BuildVariableAssignment( Variable* variable, Token::Value op, HoleCheckMode hole_check_mode, LookupHoistingMode lookup_hoisting_mode = LookupHoistingMode::kNormal); diff --git a/deps/v8/src/interpreter/bytecode-operands.h b/deps/v8/src/interpreter/bytecode-operands.h index c9cca226ab..4032980fe8 100644 --- a/deps/v8/src/interpreter/bytecode-operands.h +++ b/deps/v8/src/interpreter/bytecode-operands.h @@ -151,7 +151,6 @@ class BytecodeOperands : public AllStatic { #undef OPERAND_SCALE_COUNT static constexpr int OperandScaleAsIndex(OperandScale operand_scale) { -#if V8_HAS_CXX14_CONSTEXPR #ifdef DEBUG int result = static_cast<int>(operand_scale) >> 1; switch (operand_scale) { @@ -168,7 +167,6 @@ class BytecodeOperands : public AllStatic { UNREACHABLE(); } #endif -#endif return static_cast<int>(operand_scale) >> 1; } diff --git a/deps/v8/src/interpreter/bytecodes.h b/deps/v8/src/interpreter/bytecodes.h index 56d9d5af0d..e4589918b6 100644 --- a/deps/v8/src/interpreter/bytecodes.h +++ b/deps/v8/src/interpreter/bytecodes.h @@ -68,7 +68,9 @@ namespace interpreter { OperandType::kRuntimeId, OperandType::kReg, OperandType::kReg, \ OperandType::kReg) \ \ - /* Loading the accumulator */ \ + /* Side-effect-free bytecodes -- carefully ordered for efficient checks */ \ + /* - [Loading the accumulator] */ \ + V(Ldar, ImplicitRegisterUse::kWriteAccumulator, OperandType::kReg) \ V(LdaZero, ImplicitRegisterUse::kWriteAccumulator) \ V(LdaSmi, ImplicitRegisterUse::kWriteAccumulator, OperandType::kImm) \ V(LdaUndefined, ImplicitRegisterUse::kWriteAccumulator) \ @@ -77,6 +79,27 @@ namespace interpreter { V(LdaTrue, ImplicitRegisterUse::kWriteAccumulator) \ V(LdaFalse, ImplicitRegisterUse::kWriteAccumulator) \ V(LdaConstant, ImplicitRegisterUse::kWriteAccumulator, OperandType::kIdx) \ + V(LdaContextSlot, ImplicitRegisterUse::kWriteAccumulator, OperandType::kReg, \ + OperandType::kIdx, OperandType::kUImm) \ + V(LdaImmutableContextSlot, ImplicitRegisterUse::kWriteAccumulator, \ + OperandType::kReg, OperandType::kIdx, OperandType::kUImm) \ + V(LdaCurrentContextSlot, ImplicitRegisterUse::kWriteAccumulator, \ + OperandType::kIdx) \ + V(LdaImmutableCurrentContextSlot, ImplicitRegisterUse::kWriteAccumulator, \ + OperandType::kIdx) \ + /* - [Register Loads ] */ \ + V(Star, ImplicitRegisterUse::kReadAccumulator, OperandType::kRegOut) \ + V(Mov, ImplicitRegisterUse::kNone, OperandType::kReg, OperandType::kRegOut) \ + V(PushContext, ImplicitRegisterUse::kReadAccumulator, OperandType::kRegOut) \ + V(PopContext, ImplicitRegisterUse::kNone, OperandType::kReg) \ + /* - [Test Operations ] */ \ + V(TestReferenceEqual, ImplicitRegisterUse::kReadWriteAccumulator, \ + OperandType::kReg) \ + V(TestUndetectable, ImplicitRegisterUse::kReadWriteAccumulator) \ + V(TestNull, ImplicitRegisterUse::kReadWriteAccumulator) \ + V(TestUndefined, ImplicitRegisterUse::kReadWriteAccumulator) \ + V(TestTypeOf, ImplicitRegisterUse::kReadWriteAccumulator, \ + OperandType::kFlag8) \ \ /* Globals */ \ V(LdaGlobal, ImplicitRegisterUse::kWriteAccumulator, OperandType::kIdx, \ @@ -87,16 +110,6 @@ namespace interpreter { OperandType::kIdx) \ \ /* Context operations */ \ - V(PushContext, ImplicitRegisterUse::kReadAccumulator, OperandType::kRegOut) \ - V(PopContext, ImplicitRegisterUse::kNone, OperandType::kReg) \ - V(LdaContextSlot, ImplicitRegisterUse::kWriteAccumulator, OperandType::kReg, \ - OperandType::kIdx, OperandType::kUImm) \ - V(LdaImmutableContextSlot, ImplicitRegisterUse::kWriteAccumulator, \ - OperandType::kReg, OperandType::kIdx, OperandType::kUImm) \ - V(LdaCurrentContextSlot, ImplicitRegisterUse::kWriteAccumulator, \ - OperandType::kIdx) \ - V(LdaImmutableCurrentContextSlot, ImplicitRegisterUse::kWriteAccumulator, \ - OperandType::kIdx) \ V(StaContextSlot, ImplicitRegisterUse::kReadAccumulator, OperandType::kReg, \ OperandType::kIdx, OperandType::kUImm) \ V(StaCurrentContextSlot, ImplicitRegisterUse::kReadAccumulator, \ @@ -117,13 +130,6 @@ namespace interpreter { V(StaLookupSlot, ImplicitRegisterUse::kReadWriteAccumulator, \ OperandType::kIdx, OperandType::kFlag8) \ \ - /* Register-accumulator transfers */ \ - V(Ldar, ImplicitRegisterUse::kWriteAccumulator, OperandType::kReg) \ - V(Star, ImplicitRegisterUse::kReadAccumulator, OperandType::kRegOut) \ - \ - /* Register-register transfers */ \ - V(Mov, ImplicitRegisterUse::kNone, OperandType::kReg, OperandType::kRegOut) \ - \ /* Property loads (LoadIC) operations */ \ V(LdaNamedProperty, ImplicitRegisterUse::kWriteAccumulator, \ OperandType::kReg, OperandType::kIdx, OperandType::kIdx) \ @@ -272,7 +278,7 @@ namespace interpreter { OperandType::kReg, OperandType::kRegList, OperandType::kRegCount, \ OperandType::kIdx) \ \ - /* Test Operators */ \ + /* Effectful Test Operators */ \ V(TestEqual, ImplicitRegisterUse::kReadWriteAccumulator, OperandType::kReg, \ OperandType::kIdx) \ V(TestEqualStrict, ImplicitRegisterUse::kReadWriteAccumulator, \ @@ -285,17 +291,10 @@ namespace interpreter { OperandType::kReg, OperandType::kIdx) \ V(TestGreaterThanOrEqual, ImplicitRegisterUse::kReadWriteAccumulator, \ OperandType::kReg, OperandType::kIdx) \ - V(TestReferenceEqual, ImplicitRegisterUse::kReadWriteAccumulator, \ - OperandType::kReg) \ V(TestInstanceOf, ImplicitRegisterUse::kReadWriteAccumulator, \ OperandType::kReg, OperandType::kIdx) \ V(TestIn, ImplicitRegisterUse::kReadWriteAccumulator, OperandType::kReg, \ OperandType::kIdx) \ - V(TestUndetectable, ImplicitRegisterUse::kReadWriteAccumulator) \ - V(TestNull, ImplicitRegisterUse::kReadWriteAccumulator) \ - V(TestUndefined, ImplicitRegisterUse::kReadWriteAccumulator) \ - V(TestTypeOf, ImplicitRegisterUse::kReadWriteAccumulator, \ - OperandType::kFlag8) \ \ /* Cast operators */ \ V(ToName, ImplicitRegisterUse::kReadAccumulator, OperandType::kRegOut) \ @@ -650,25 +649,17 @@ class V8_EXPORT_PRIVATE Bytecodes final : public AllStatic { // Return true if |bytecode| is an accumulator load without effects, // e.g. LdaConstant, LdaTrue, Ldar. static constexpr bool IsAccumulatorLoadWithoutEffects(Bytecode bytecode) { - return bytecode == Bytecode::kLdar || bytecode == Bytecode::kLdaZero || - bytecode == Bytecode::kLdaSmi || bytecode == Bytecode::kLdaNull || - bytecode == Bytecode::kLdaTrue || bytecode == Bytecode::kLdaFalse || - bytecode == Bytecode::kLdaUndefined || - bytecode == Bytecode::kLdaTheHole || - bytecode == Bytecode::kLdaConstant || - bytecode == Bytecode::kLdaContextSlot || - bytecode == Bytecode::kLdaCurrentContextSlot || - bytecode == Bytecode::kLdaImmutableContextSlot || - bytecode == Bytecode::kLdaImmutableCurrentContextSlot; + STATIC_ASSERT(Bytecode::kLdar < Bytecode::kLdaImmutableCurrentContextSlot); + return bytecode >= Bytecode::kLdar && + bytecode <= Bytecode::kLdaImmutableCurrentContextSlot; } // Returns true if |bytecode| is a compare operation without external effects // (e.g., Type cooersion). static constexpr bool IsCompareWithoutEffects(Bytecode bytecode) { - return bytecode == Bytecode::kTestUndetectable || - bytecode == Bytecode::kTestNull || - bytecode == Bytecode::kTestUndefined || - bytecode == Bytecode::kTestTypeOf; + STATIC_ASSERT(Bytecode::kTestReferenceEqual < Bytecode::kTestTypeOf); + return bytecode >= Bytecode::kTestReferenceEqual && + bytecode <= Bytecode::kTestTypeOf; } static constexpr bool IsShortStar(Bytecode bytecode) { @@ -683,8 +674,8 @@ class V8_EXPORT_PRIVATE Bytecodes final : public AllStatic { // Return true if |bytecode| is a register load without effects, // e.g. Mov, Star. static constexpr bool IsRegisterLoadWithoutEffects(Bytecode bytecode) { - return bytecode == Bytecode::kMov || bytecode == Bytecode::kPopContext || - bytecode == Bytecode::kPushContext || IsAnyStar(bytecode); + return IsShortStar(bytecode) || + (bytecode >= Bytecode::kStar && bytecode <= Bytecode::kPopContext); } // Returns true if the bytecode is a conditional jump taking diff --git a/deps/v8/src/interpreter/constant-array-builder.cc b/deps/v8/src/interpreter/constant-array-builder.cc index 4142d3a7ca..260a75448d 100644 --- a/deps/v8/src/interpreter/constant-array-builder.cc +++ b/deps/v8/src/interpreter/constant-array-builder.cc @@ -65,9 +65,9 @@ const ConstantArrayBuilder::Entry& ConstantArrayBuilder::ConstantArraySlice::At( } #if DEBUG -template <typename LocalIsolate> +template <typename IsolateT> void ConstantArrayBuilder::ConstantArraySlice::CheckAllElementsAreUnique( - LocalIsolate* isolate) const { + IsolateT* isolate) const { std::set<Smi> smis; std::set<double> heap_numbers; std::set<const AstRawString*> strings; @@ -164,9 +164,9 @@ ConstantArrayBuilder::ConstantArraySlice* ConstantArrayBuilder::IndexToSlice( UNREACHABLE(); } -template <typename LocalIsolate> +template <typename IsolateT> MaybeHandle<Object> ConstantArrayBuilder::At(size_t index, - LocalIsolate* isolate) const { + IsolateT* isolate) const { const ConstantArraySlice* slice = IndexToSlice(index); DCHECK_LT(index, slice->capacity()); if (index < slice->start_index() + slice->size()) { @@ -183,8 +183,8 @@ template EXPORT_TEMPLATE_DEFINE(V8_EXPORT_PRIVATE) MaybeHandle<Object> ConstantArrayBuilder::At(size_t index, LocalIsolate* isolate) const; -template <typename LocalIsolate> -Handle<FixedArray> ConstantArrayBuilder::ToFixedArray(LocalIsolate* isolate) { +template <typename IsolateT> +Handle<FixedArray> ConstantArrayBuilder::ToFixedArray(IsolateT* isolate) { Handle<FixedArray> fixed_array = isolate->factory()->NewFixedArrayWithHoles( static_cast<int>(size()), AllocationType::kOld); int array_index = 0; @@ -372,9 +372,8 @@ void ConstantArrayBuilder::DiscardReservedEntry(OperandSize operand_size) { OperandSizeToSlice(operand_size)->Unreserve(); } -template <typename LocalIsolate> -Handle<Object> ConstantArrayBuilder::Entry::ToHandle( - LocalIsolate* isolate) const { +template <typename IsolateT> +Handle<Object> ConstantArrayBuilder::Entry::ToHandle(IsolateT* isolate) const { switch (tag_) { case Tag::kDeferred: // We shouldn't have any deferred entries by now. diff --git a/deps/v8/src/interpreter/constant-array-builder.h b/deps/v8/src/interpreter/constant-array-builder.h index b17995f0a1..2120142a12 100644 --- a/deps/v8/src/interpreter/constant-array-builder.h +++ b/deps/v8/src/interpreter/constant-array-builder.h @@ -52,16 +52,16 @@ class V8_EXPORT_PRIVATE ConstantArrayBuilder final { explicit ConstantArrayBuilder(Zone* zone); // Generate a fixed array of constant handles based on inserted objects. - template <typename LocalIsolate> + template <typename IsolateT> EXPORT_TEMPLATE_DECLARE(V8_EXPORT_PRIVATE) - Handle<FixedArray> ToFixedArray(LocalIsolate* isolate); + Handle<FixedArray> ToFixedArray(IsolateT* isolate); // Returns the object, as a handle in |isolate|, that is in the constant pool // array at index |index|. Returns null if there is no handle at this index. // Only expected to be used in tests. - template <typename LocalIsolate> + template <typename IsolateT> EXPORT_TEMPLATE_DECLARE(V8_EXPORT_PRIVATE) - MaybeHandle<Object> At(size_t index, LocalIsolate* isolate) const; + MaybeHandle<Object> At(size_t index, IsolateT* isolate) const; // Returns the number of elements in the array. size_t size() const; @@ -154,8 +154,8 @@ class V8_EXPORT_PRIVATE ConstantArrayBuilder final { smi_ = smi; } - template <typename LocalIsolate> - Handle<Object> ToHandle(LocalIsolate* isolate) const; + template <typename IsolateT> + Handle<Object> ToHandle(IsolateT* isolate) const; private: explicit Entry(Tag tag) : tag_(tag) {} @@ -207,8 +207,8 @@ class V8_EXPORT_PRIVATE ConstantArrayBuilder final { const Entry& At(size_t index) const; #if DEBUG - template <typename LocalIsolate> - void CheckAllElementsAreUnique(LocalIsolate* isolate) const; + template <typename IsolateT> + void CheckAllElementsAreUnique(IsolateT* isolate) const; #endif inline size_t available() const { return capacity() - reserved() - size(); } diff --git a/deps/v8/src/interpreter/handler-table-builder.cc b/deps/v8/src/interpreter/handler-table-builder.cc index 56f5b849dc..1a88b2ab07 100644 --- a/deps/v8/src/interpreter/handler-table-builder.cc +++ b/deps/v8/src/interpreter/handler-table-builder.cc @@ -15,8 +15,8 @@ namespace interpreter { HandlerTableBuilder::HandlerTableBuilder(Zone* zone) : entries_(zone) {} -template <typename LocalIsolate> -Handle<ByteArray> HandlerTableBuilder::ToHandlerTable(LocalIsolate* isolate) { +template <typename IsolateT> +Handle<ByteArray> HandlerTableBuilder::ToHandlerTable(IsolateT* isolate) { int handler_table_size = static_cast<int>(entries_.size()); Handle<ByteArray> table_byte_array = isolate->factory()->NewByteArray( HandlerTable::LengthForRange(handler_table_size), AllocationType::kOld); diff --git a/deps/v8/src/interpreter/handler-table-builder.h b/deps/v8/src/interpreter/handler-table-builder.h index f5f264d7c7..8670fc0492 100644 --- a/deps/v8/src/interpreter/handler-table-builder.h +++ b/deps/v8/src/interpreter/handler-table-builder.h @@ -30,8 +30,8 @@ class V8_EXPORT_PRIVATE HandlerTableBuilder final { // Builds the actual handler table by copying the current values into a heap // object. Any further mutations to the builder won't be reflected. - template <typename LocalIsolate> - Handle<ByteArray> ToHandlerTable(LocalIsolate* isolate); + template <typename IsolateT> + Handle<ByteArray> ToHandlerTable(IsolateT* isolate); // Creates a new handler table entry and returns a {hander_id} identifying the // entry, so that it can be referenced by below setter functions. diff --git a/deps/v8/src/interpreter/interpreter-assembler.cc b/deps/v8/src/interpreter/interpreter-assembler.cc index df5b525877..f6733def8e 100644 --- a/deps/v8/src/interpreter/interpreter-assembler.cc +++ b/deps/v8/src/interpreter/interpreter-assembler.cc @@ -8,7 +8,7 @@ #include <ostream> #include "src/codegen/code-factory.h" -#include "src/codegen/interface-descriptors.h" +#include "src/codegen/interface-descriptors-inl.h" #include "src/codegen/machine-type.h" #include "src/execution/frames.h" #include "src/interpreter/bytecodes.h" @@ -803,7 +803,9 @@ void InterpreterAssembler::CallJSWithSpreadAndDispatch( TNode<UintPtrT> slot_id, TNode<HeapObject> maybe_feedback_vector) { DCHECK(Bytecodes::MakesCallAlongCriticalPath(bytecode_)); DCHECK_EQ(Bytecodes::GetReceiverMode(bytecode_), ConvertReceiverMode::kAny); - CollectCallFeedback(function, context, maybe_feedback_vector, slot_id); + LazyNode<Object> receiver = [=] { return LoadRegisterAtOperandIndex(1); }; + CollectCallFeedback(function, receiver, context, maybe_feedback_vector, + slot_id); Comment("call using CallWithSpread builtin"); Callable callable = CodeFactory::InterpreterPushArgsThenCall( isolate(), ConvertReceiverMode::kAny, @@ -1310,26 +1312,6 @@ void InterpreterAssembler::AbortIfWordNotEqual(TNode<WordT> lhs, BIND(&ok); } -void InterpreterAssembler::MaybeDropFrames(TNode<Context> context) { - TNode<ExternalReference> restart_fp_address = - ExternalConstant(ExternalReference::debug_restart_fp_address(isolate())); - - TNode<IntPtrT> restart_fp = Load<IntPtrT>(restart_fp_address); - TNode<IntPtrT> null = IntPtrConstant(0); - - Label ok(this), drop_frames(this); - Branch(IntPtrEqual(restart_fp, null), &ok, &drop_frames); - - BIND(&drop_frames); - // We don't expect this call to return since the frame dropper tears down - // the stack and jumps into the function on the target frame to restart it. - CallStub(CodeFactory::FrameDropperTrampoline(isolate()), context, restart_fp); - Abort(AbortReason::kUnexpectedReturnFromFrameDropper); - Goto(&ok); - - BIND(&ok); -} - void InterpreterAssembler::OnStackReplacement(TNode<Context> context, TNode<IntPtrT> relative_jump) { TNode<JSFunction> function = CAST(LoadRegister(Register::function_closure())); diff --git a/deps/v8/src/interpreter/interpreter-assembler.h b/deps/v8/src/interpreter/interpreter-assembler.h index 019fd40f3b..bf4641200b 100644 --- a/deps/v8/src/interpreter/interpreter-assembler.h +++ b/deps/v8/src/interpreter/interpreter-assembler.h @@ -241,9 +241,6 @@ class V8_EXPORT_PRIVATE InterpreterAssembler : public CodeStubAssembler { TNode<FixedArrayBase> parameters_and_registers, TNode<IntPtrT> formal_parameter_count, TNode<UintPtrT> register_count); - // Dispatch to frame dropper trampoline if necessary. - void MaybeDropFrames(TNode<Context> context); - // Perform OnStackReplacement. void OnStackReplacement(TNode<Context> context, TNode<IntPtrT> relative_jump); diff --git a/deps/v8/src/interpreter/interpreter-generator.cc b/deps/v8/src/interpreter/interpreter-generator.cc index cb01348a35..75027b96b7 100644 --- a/deps/v8/src/interpreter/interpreter-generator.cc +++ b/deps/v8/src/interpreter/interpreter-generator.cc @@ -209,7 +209,7 @@ IGNITION_HANDLER(LdaGlobal, InterpreterLoadGlobalAssembler) { static const int kNameOperandIndex = 0; static const int kSlotOperandIndex = 1; - LdaGlobal(kSlotOperandIndex, kNameOperandIndex, NOT_INSIDE_TYPEOF); + LdaGlobal(kSlotOperandIndex, kNameOperandIndex, TypeofMode::kNotInside); } // LdaGlobalInsideTypeof <name_index> <slot> @@ -220,7 +220,7 @@ IGNITION_HANDLER(LdaGlobalInsideTypeof, InterpreterLoadGlobalAssembler) { static const int kNameOperandIndex = 0; static const int kSlotOperandIndex = 1; - LdaGlobal(kSlotOperandIndex, kNameOperandIndex, INSIDE_TYPEOF); + LdaGlobal(kSlotOperandIndex, kNameOperandIndex, TypeofMode::kInside); } // StaGlobal <name_index> <slot> @@ -418,8 +418,8 @@ class InterpreterLookupGlobalAssembler : public InterpreterLoadGlobalAssembler { TypeofMode typeof_mode = function_id == Runtime::kLoadLookupSlotInsideTypeof - ? INSIDE_TYPEOF - : NOT_INSIDE_TYPEOF; + ? TypeofMode::kInside + : TypeofMode::kNotInside; LdaGlobal(kSlotOperandIndex, kNameOperandIndex, typeof_mode); } @@ -1365,13 +1365,19 @@ class InterpreterJSCallAssembler : public InterpreterAssembler { // Generates code to perform a JS call that collects type feedback. void JSCall(ConvertReceiverMode receiver_mode) { TNode<Object> function = LoadRegisterAtOperandIndex(0); + LazyNode<Object> receiver = [=] { + return receiver_mode == ConvertReceiverMode::kNullOrUndefined + ? UndefinedConstant() + : LoadRegisterAtOperandIndex(1); + }; RegListNodePair args = GetRegisterListAtOperandIndex(1); TNode<UintPtrT> slot_id = BytecodeOperandIdx(3); TNode<HeapObject> maybe_feedback_vector = LoadFeedbackVector(); TNode<Context> context = GetContext(); // Collect the {function} feedback. - CollectCallFeedback(function, context, maybe_feedback_vector, slot_id); + CollectCallFeedback(function, receiver, context, maybe_feedback_vector, + slot_id); // Call the function and dispatch to the next handler. CallJSAndDispatch(function, context, args, receiver_mode); @@ -1399,12 +1405,18 @@ class InterpreterJSCallAssembler : public InterpreterAssembler { kFirstArgumentOperandIndex + kReceiverAndArgOperandCount; TNode<Object> function = LoadRegisterAtOperandIndex(0); + LazyNode<Object> receiver = [=] { + return receiver_mode == ConvertReceiverMode::kNullOrUndefined + ? UndefinedConstant() + : LoadRegisterAtOperandIndex(1); + }; TNode<UintPtrT> slot_id = BytecodeOperandIdx(kSlotOperandIndex); TNode<HeapObject> maybe_feedback_vector = LoadFeedbackVector(); TNode<Context> context = GetContext(); // Collect the {function} feedback. - CollectCallFeedback(function, context, maybe_feedback_vector, slot_id); + CollectCallFeedback(function, receiver, context, maybe_feedback_vector, + slot_id); switch (kReceiverAndArgOperandCount) { case 0: @@ -2776,7 +2788,7 @@ IGNITION_HANDLER(ThrowIfNotSuperConstructor, InterpreterAssembler) { // Call runtime to handle debugger statement. IGNITION_HANDLER(Debugger, InterpreterAssembler) { TNode<Context> context = GetContext(); - CallStub(CodeFactory::HandleDebuggerStatement(isolate()), context); + CallRuntime(Runtime::kHandleDebuggerStatement, context); Dispatch(); } @@ -2791,7 +2803,6 @@ IGNITION_HANDLER(Debugger, InterpreterAssembler) { Runtime::kDebugBreakOnBytecode, context, accumulator); \ TNode<Object> return_value = Projection<0>(result_pair); \ TNode<IntPtrT> original_bytecode = SmiUntag(Projection<1>(result_pair)); \ - MaybeDropFrames(context); \ SetAccumulator(return_value); \ DispatchToBytecodeWithOptionalStarLookahead(original_bytecode); \ } diff --git a/deps/v8/src/interpreter/interpreter-intrinsics-generator.cc b/deps/v8/src/interpreter/interpreter-intrinsics-generator.cc index b6ea44f6e7..c98f78f878 100644 --- a/deps/v8/src/interpreter/interpreter-intrinsics-generator.cc +++ b/deps/v8/src/interpreter/interpreter-intrinsics-generator.cc @@ -213,12 +213,6 @@ TNode<Object> IntrinsicsGenerator::HasProperty( arg_count); } -TNode<Object> IntrinsicsGenerator::ToString( - const InterpreterAssembler::RegListNodePair& args, TNode<Context> context, - int arg_count) { - return IntrinsicAsBuiltinCall(args, context, Builtins::kToString, arg_count); -} - TNode<Object> IntrinsicsGenerator::ToLength( const InterpreterAssembler::RegListNodePair& args, TNode<Context> context, int arg_count) { diff --git a/deps/v8/src/interpreter/interpreter-intrinsics.h b/deps/v8/src/interpreter/interpreter-intrinsics.h index 07c60270c2..85c54f67f1 100644 --- a/deps/v8/src/interpreter/interpreter-intrinsics.h +++ b/deps/v8/src/interpreter/interpreter-intrinsics.h @@ -36,7 +36,6 @@ namespace interpreter { V(IsArray, is_array, 1) \ V(IsJSReceiver, is_js_receiver, 1) \ V(IsSmi, is_smi, 1) \ - V(ToString, to_string, 1) \ V(ToLength, to_length, 1) \ V(ToObject, to_object, 1) diff --git a/deps/v8/src/interpreter/interpreter.cc b/deps/v8/src/interpreter/interpreter.cc index ddce0f0e4e..36f2c54614 100644 --- a/deps/v8/src/interpreter/interpreter.cc +++ b/deps/v8/src/interpreter/interpreter.cc @@ -18,7 +18,6 @@ #include "src/init/setup-isolate.h" #include "src/interpreter/bytecode-generator.h" #include "src/interpreter/bytecodes.h" -#include "src/logging/counters-inl.h" #include "src/objects/objects-inl.h" #include "src/objects/shared-function-info.h" #include "src/objects/slots.h" @@ -50,14 +49,13 @@ class InterpreterCompilationJob final : public UnoptimizedCompilationJob { private: BytecodeGenerator* generator() { return &generator_; } - template <typename LocalIsolate> - void CheckAndPrintBytecodeMismatch(LocalIsolate* isolate, - Handle<Script> script, + template <typename IsolateT> + void CheckAndPrintBytecodeMismatch(IsolateT* isolate, Handle<Script> script, Handle<BytecodeArray> bytecode); - template <typename LocalIsolate> + template <typename IsolateT> Status DoFinalizeJobImpl(Handle<SharedFunctionInfo> shared_info, - LocalIsolate* isolate); + IsolateT* isolate); Zone zone_; UnoptimizedCompilationInfo compilation_info_; @@ -177,10 +175,9 @@ InterpreterCompilationJob::InterpreterCompilationJob( eager_inner_literals) {} InterpreterCompilationJob::Status InterpreterCompilationJob::ExecuteJobImpl() { - RuntimeCallTimerScope runtimeTimerScope( - parse_info()->runtime_call_stats(), - RuntimeCallCounterId::kCompileIgnition, - RuntimeCallStats::kThreadSpecific); + RCS_SCOPE(parse_info()->runtime_call_stats(), + RuntimeCallCounterId::kCompileIgnition, + RuntimeCallStats::kThreadSpecific); // TODO(lpy): add support for background compilation RCS trace. TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.CompileIgnition"); @@ -203,10 +200,9 @@ InterpreterCompilationJob::Status InterpreterCompilationJob::ExecuteJobImpl() { } #ifdef DEBUG -template <typename LocalIsolate> +template <typename IsolateT> void InterpreterCompilationJob::CheckAndPrintBytecodeMismatch( - LocalIsolate* isolate, Handle<Script> script, - Handle<BytecodeArray> bytecode) { + IsolateT* isolate, Handle<Script> script, Handle<BytecodeArray> bytecode) { int first_mismatch = generator()->CheckBytecodeMatches(*bytecode); if (first_mismatch >= 0) { parse_info()->ast_value_factory()->Internalize(isolate); @@ -243,9 +239,8 @@ void InterpreterCompilationJob::CheckAndPrintBytecodeMismatch( InterpreterCompilationJob::Status InterpreterCompilationJob::FinalizeJobImpl( Handle<SharedFunctionInfo> shared_info, Isolate* isolate) { - RuntimeCallTimerScope runtimeTimerScope( - parse_info()->runtime_call_stats(), - RuntimeCallCounterId::kCompileIgnitionFinalization); + RCS_SCOPE(parse_info()->runtime_call_stats(), + RuntimeCallCounterId::kCompileIgnitionFinalization); TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.CompileIgnitionFinalization"); return DoFinalizeJobImpl(shared_info, isolate); @@ -253,17 +248,16 @@ InterpreterCompilationJob::Status InterpreterCompilationJob::FinalizeJobImpl( InterpreterCompilationJob::Status InterpreterCompilationJob::FinalizeJobImpl( Handle<SharedFunctionInfo> shared_info, LocalIsolate* isolate) { - RuntimeCallTimerScope runtimeTimerScope( - parse_info()->runtime_call_stats(), - RuntimeCallCounterId::kCompileBackgroundIgnitionFinalization); + RCS_SCOPE(parse_info()->runtime_call_stats(), + RuntimeCallCounterId::kCompileBackgroundIgnitionFinalization); TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.CompileIgnitionFinalization"); return DoFinalizeJobImpl(shared_info, isolate); } -template <typename LocalIsolate> +template <typename IsolateT> InterpreterCompilationJob::Status InterpreterCompilationJob::DoFinalizeJobImpl( - Handle<SharedFunctionInfo> shared_info, LocalIsolate* isolate) { + Handle<SharedFunctionInfo> shared_info, IsolateT* isolate) { Handle<BytecodeArray> bytecodes = compilation_info_.bytecode_array(); if (bytecodes.is_null()) { bytecodes = generator()->FinalizeBytecode( diff --git a/deps/v8/src/json/json-parser.cc b/deps/v8/src/json/json-parser.cc index ccea49e89f..7d350d02e5 100644 --- a/deps/v8/src/json/json-parser.cc +++ b/deps/v8/src/json/json-parser.cc @@ -10,6 +10,7 @@ #include "src/numbers/hash-seed-inl.h" #include "src/objects/field-type.h" #include "src/objects/hash-table-inl.h" +#include "src/objects/map-updater.h" #include "src/objects/objects-inl.h" #include "src/objects/property-descriptor.h" #include "src/strings/char-predicates-inl.h" @@ -509,17 +510,18 @@ Handle<Object> JsonParser<Char>::BuildJsonObject( } Handle<FieldType> value_type = value->OptimalType(isolate(), representation); - Map::GeneralizeField(isolate(), target, descriptor_index, - details.constness(), representation, value_type); + MapUpdater::GeneralizeField(isolate(), target, descriptor_index, + details.constness(), representation, + value_type); } else if (expected_representation.IsHeapObject() && !target->instance_descriptors(isolate()) .GetFieldType(descriptor_index) .NowContains(value)) { Handle<FieldType> value_type = value->OptimalType(isolate(), expected_representation); - Map::GeneralizeField(isolate(), target, descriptor_index, - details.constness(), expected_representation, - value_type); + MapUpdater::GeneralizeField(isolate(), target, descriptor_index, + details.constness(), expected_representation, + value_type); } else if (expected_representation.IsDouble() && value->IsSmi()) { new_mutable_double++; } @@ -601,8 +603,8 @@ Handle<Object> JsonParser<Char>::BuildJsonObject( mutable_double_address += kMutableDoubleSize; } else { DCHECK(value.IsHeapNumber()); - HeapObject::cast(value).synchronized_set_map( - *factory()->heap_number_map()); + HeapObject::cast(value).set_map(*factory()->heap_number_map(), + kReleaseStore); } } object->RawFastInobjectPropertyAtPut(index, value, mode); diff --git a/deps/v8/src/libplatform/tracing/recorder-default.cc b/deps/v8/src/libplatform/tracing/recorder-default.cc deleted file mode 100644 index 46e0cbb8e2..0000000000 --- a/deps/v8/src/libplatform/tracing/recorder-default.cc +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2020 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -#ifndef V8_LIBPLATFORM_TRACING_RECORDER_DEFAULT_H_ -#define V8_LIBPLATFORM_TRACING_RECORDER_DEFAULT_H_ - -#include "src/libplatform/tracing/recorder.h" - -namespace v8 { -namespace platform { -namespace tracing { - -Recorder::Recorder() {} -Recorder::~Recorder() {} - -bool Recorder::IsEnabled() { return false; } -bool Recorder::IsEnabled(const uint8_t level) { return false; } - -void Recorder::AddEvent(TraceObject* trace_event) {} - -} // namespace tracing -} // namespace platform -} // namespace v8 - -#endif // V8_LIBPLATFORM_TRACING_RECORDER_DEFAULT_H_ diff --git a/deps/v8/src/libplatform/tracing/recorder-mac.cc b/deps/v8/src/libplatform/tracing/recorder-mac.cc new file mode 100644 index 0000000000..6a6689f8cf --- /dev/null +++ b/deps/v8/src/libplatform/tracing/recorder-mac.cc @@ -0,0 +1,43 @@ +// Copyright 2020 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +#ifndef V8_LIBPLATFORM_TRACING_RECORDER_MAC_H_ +#define V8_LIBPLATFORM_TRACING_RECORDER_MAC_H_ + +#include "src/libplatform/tracing/recorder.h" + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunguarded-availability" + +namespace v8 { +namespace platform { +namespace tracing { + +Recorder::Recorder() { v8Provider = os_log_create("v8", ""); } +Recorder::~Recorder() {} + +bool Recorder::IsEnabled() { + return os_log_type_enabled(v8Provider, OS_LOG_TYPE_DEFAULT); +} +bool Recorder::IsEnabled(const uint8_t level) { + if (level == OS_LOG_TYPE_DEFAULT || level == OS_LOG_TYPE_INFO || + level == OS_LOG_TYPE_DEBUG || level == OS_LOG_TYPE_ERROR || + level == OS_LOG_TYPE_FAULT) { + return os_log_type_enabled(v8Provider, static_cast<os_log_type_t>(level)); + } + return false; +} + +void Recorder::AddEvent(TraceObject* trace_event) { + os_signpost_event_emit(v8Provider, OS_SIGNPOST_ID_EXCLUSIVE, "", + "%s, cpu_duration: %d", trace_event->name(), + static_cast<int>(trace_event->cpu_duration())); +} + +} // namespace tracing +} // namespace platform +} // namespace v8 + +#pragma clang diagnostic pop + +#endif // V8_LIBPLATFORM_TRACING_RECORDER_MAC_H_ diff --git a/deps/v8/src/libplatform/tracing/recorder.h b/deps/v8/src/libplatform/tracing/recorder.h index 31cc75f9bd..8b8eb0e0e9 100644 --- a/deps/v8/src/libplatform/tracing/recorder.h +++ b/deps/v8/src/libplatform/tracing/recorder.h @@ -9,6 +9,16 @@ #include "include/libplatform/v8-tracing.h" +#if !defined(V8_ENABLE_SYSTEM_INSTRUMENTATION) +#error "only include this file if V8_ENABLE_SYSTEM_INSTRUMENTATION" +#endif + +#if V8_OS_MACOSX +#include <os/signpost.h> +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunguarded-availability" +#endif + #if V8_OS_WIN #ifndef V8_ETW_GUID #define V8_ETW_GUID \ @@ -31,14 +41,23 @@ class V8_PLATFORM_EXPORT Recorder { Recorder(); ~Recorder(); - static bool IsEnabled(); - static bool IsEnabled(const uint8_t level); + bool IsEnabled(); + bool IsEnabled(const uint8_t level); void AddEvent(TraceObject* trace_event); + + private: +#if V8_OS_MACOSX + os_log_t v8Provider; +#endif }; } // namespace tracing } // namespace platform } // namespace v8 +#if V8_OS_MACOSX +#pragma clang diagnostic pop +#endif + #endif // V8_LIBPLATFORM_TRACING_RECORDER_H_ diff --git a/deps/v8/src/libplatform/tracing/trace-writer.cc b/deps/v8/src/libplatform/tracing/trace-writer.cc index 5740dabd8f..1131522eec 100644 --- a/deps/v8/src/libplatform/tracing/trace-writer.cc +++ b/deps/v8/src/libplatform/tracing/trace-writer.cc @@ -9,7 +9,10 @@ #include "base/trace_event/common/trace_event_common.h" #include "include/v8-platform.h" #include "src/base/platform/platform.h" + +#if defined(V8_ENABLE_SYSTEM_INSTRUMENTATION) #include "src/libplatform/tracing/recorder.h" +#endif namespace v8 { namespace platform { @@ -191,6 +194,7 @@ TraceWriter* TraceWriter::CreateJSONTraceWriter(std::ostream& stream, return new JSONTraceWriter(stream, tag); } +#if defined(V8_ENABLE_SYSTEM_INSTRUMENTATION) SystemInstrumentationTraceWriter::SystemInstrumentationTraceWriter() { recorder_ = std::make_unique<Recorder>(); } @@ -211,6 +215,7 @@ void SystemInstrumentationTraceWriter::Flush() {} TraceWriter* TraceWriter::CreateSystemInstrumentationTraceWriter() { return new SystemInstrumentationTraceWriter(); } +#endif } // namespace tracing } // namespace platform diff --git a/deps/v8/src/libplatform/tracing/trace-writer.h b/deps/v8/src/libplatform/tracing/trace-writer.h index 1f727b815a..2fada45108 100644 --- a/deps/v8/src/libplatform/tracing/trace-writer.h +++ b/deps/v8/src/libplatform/tracing/trace-writer.h @@ -29,6 +29,7 @@ class JSONTraceWriter : public TraceWriter { bool append_comma_ = false; }; +#if defined(V8_ENABLE_SYSTEM_INSTRUMENTATION) class SystemInstrumentationTraceWriter : public TraceWriter { public: SystemInstrumentationTraceWriter(); @@ -39,6 +40,7 @@ class SystemInstrumentationTraceWriter : public TraceWriter { private: std::unique_ptr<Recorder> recorder_; }; +#endif } // namespace tracing } // namespace platform diff --git a/deps/v8/src/logging/code-events.h b/deps/v8/src/logging/code-events.h index c009ba0b15..cda7c39fc7 100644 --- a/deps/v8/src/logging/code-events.h +++ b/deps/v8/src/logging/code-events.h @@ -98,6 +98,7 @@ class CodeEventListener { // Not handlified as this happens during GC. No allocation allowed. virtual void CodeMoveEvent(AbstractCode from, AbstractCode to) = 0; virtual void SharedFunctionInfoMoveEvent(Address from, Address to) = 0; + virtual void NativeContextMoveEvent(Address from, Address to) = 0; virtual void CodeMovingGCEvent() = 0; virtual void CodeDisableOptEvent(Handle<AbstractCode> code, Handle<SharedFunctionInfo> shared) = 0; @@ -217,6 +218,11 @@ class CodeEventDispatcher : public CodeEventListener { listener->SharedFunctionInfoMoveEvent(from, to); }); } + void NativeContextMoveEvent(Address from, Address to) override { + DispatchEventToListeners([=](CodeEventListener* listener) { + listener->NativeContextMoveEvent(from, to); + }); + } void CodeMovingGCEvent() override { DispatchEventToListeners( [](CodeEventListener* listener) { listener->CodeMovingGCEvent(); }); diff --git a/deps/v8/src/logging/counters-definitions.h b/deps/v8/src/logging/counters-definitions.h index ffa9647719..ebf6e3f430 100644 --- a/deps/v8/src/logging/counters-definitions.h +++ b/deps/v8/src/logging/counters-definitions.h @@ -85,6 +85,11 @@ namespace internal { HR(wasm_modules_per_engine, V8.WasmModulesPerEngine, 1, 1024, 30) \ /* bailout reason if Liftoff failed, or {kSuccess} (per function) */ \ HR(liftoff_bailout_reasons, V8.LiftoffBailoutReasons, 0, 20, 21) \ + /* support for PKEYs/PKU by testing result of pkey_alloc() */ \ + /* TODO(chromium:1207318): Only values 0 and 1 are actually used, but 3 */ \ + /* buckets needed until {BooleanHistogram} is supported in Chromium UMA. */ \ + HR(wasm_memory_protection_keys_support, V8.WasmMemoryProtectionKeysSupport, \ + 0, 2, 3) \ /* number of thrown exceptions per isolate */ \ HR(wasm_throw_count, V8.WasmThrowCount, 0, 100000, 30) \ /* number of rethrown exceptions per isolate */ \ diff --git a/deps/v8/src/logging/counters-inl.h b/deps/v8/src/logging/counters-inl.h deleted file mode 100644 index 3e067c7c06..0000000000 --- a/deps/v8/src/logging/counters-inl.h +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2016 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef V8_LOGGING_COUNTERS_INL_H_ -#define V8_LOGGING_COUNTERS_INL_H_ - -#include "src/logging/counters.h" -#include "src/logging/tracing-flags.h" - -namespace v8 { -namespace internal { - -void RuntimeCallTimer::Start(RuntimeCallCounter* counter, - RuntimeCallTimer* parent) { - DCHECK(!IsStarted()); - counter_ = counter; - parent_.SetValue(parent); - if (TracingFlags::runtime_stats.load(std::memory_order_relaxed) == - v8::tracing::TracingCategoryObserver::ENABLED_BY_SAMPLING) { - return; - } - base::TimeTicks now = RuntimeCallTimer::Now(); - if (parent) parent->Pause(now); - Resume(now); - DCHECK(IsStarted()); -} - -void RuntimeCallTimer::Pause(base::TimeTicks now) { - DCHECK(IsStarted()); - elapsed_ += (now - start_ticks_); - start_ticks_ = base::TimeTicks(); -} - -void RuntimeCallTimer::Resume(base::TimeTicks now) { - DCHECK(!IsStarted()); - start_ticks_ = now; -} - -RuntimeCallTimer* RuntimeCallTimer::Stop() { - if (!IsStarted()) return parent(); - base::TimeTicks now = RuntimeCallTimer::Now(); - Pause(now); - counter_->Increment(); - CommitTimeToCounter(); - - RuntimeCallTimer* parent_timer = parent(); - if (parent_timer) { - parent_timer->Resume(now); - } - return parent_timer; -} - -void RuntimeCallTimer::CommitTimeToCounter() { - counter_->Add(elapsed_); - elapsed_ = base::TimeDelta(); -} - -bool RuntimeCallTimer::IsStarted() { return start_ticks_ != base::TimeTicks(); } - -} // namespace internal -} // namespace v8 - -#endif // V8_LOGGING_COUNTERS_INL_H_ diff --git a/deps/v8/src/logging/counters.cc b/deps/v8/src/logging/counters.cc index c9c9aa0ebe..3ffced0832 100644 --- a/deps/v8/src/logging/counters.cc +++ b/deps/v8/src/logging/counters.cc @@ -4,16 +4,13 @@ #include "src/logging/counters.h" -#include <iomanip> - -#include "src/base/platform/platform.h" +#include "src/base/atomic-utils.h" +#include "src/base/platform/elapsed-timer.h" #include "src/base/platform/time.h" #include "src/builtins/builtins-definitions.h" #include "src/execution/isolate.h" -#include "src/logging/counters-inl.h" #include "src/logging/log-inl.h" #include "src/logging/log.h" -#include "src/utils/ostreams.h" namespace v8 { namespace internal { @@ -121,15 +118,16 @@ void TimedHistogram::RecordAbandon(base::ElapsedTimer* timer, } Counters::Counters(Isolate* isolate) - : isolate_(isolate), - stats_table_(this), -// clang format off + : #define SC(name, caption) name##_(this, "c:" #caption), STATS_COUNTER_TS_LIST(SC) #undef SC - // clang format on - runtime_call_stats_(RuntimeCallStats::kMainIsolateThread), - worker_thread_runtime_call_stats_() { +#ifdef V8_RUNTIME_CALL_STATS + runtime_call_stats_(RuntimeCallStats::kMainIsolateThread), + worker_thread_runtime_call_stats_(), +#endif + isolate_(isolate), + stats_table_(this) { static const struct { Histogram Counters::*member; const char* caption; @@ -319,355 +317,5 @@ void Counters::ResetCreateHistogramFunction(CreateHistogramCallback f) { #undef HM } -base::TimeTicks (*RuntimeCallTimer::Now)() = - &base::TimeTicks::HighResolutionNow; - -base::TimeTicks RuntimeCallTimer::NowCPUTime() { - base::ThreadTicks ticks = base::ThreadTicks::Now(); - return base::TimeTicks::FromInternalValue(ticks.ToInternalValue()); -} - -class RuntimeCallStatEntries { - public: - void Print(std::ostream& os) { - if (total_call_count == 0) return; - std::sort(entries.rbegin(), entries.rend()); - os << std::setw(50) << "Runtime Function/C++ Builtin" << std::setw(12) - << "Time" << std::setw(18) << "Count" << std::endl - << std::string(88, '=') << std::endl; - for (Entry& entry : entries) { - entry.SetTotal(total_time, total_call_count); - entry.Print(os); - } - os << std::string(88, '-') << std::endl; - Entry("Total", total_time, total_call_count).Print(os); - } - - // By default, the compiler will usually inline this, which results in a large - // binary size increase: std::vector::push_back expands to a large amount of - // instructions, and this function is invoked repeatedly by macros. - V8_NOINLINE void Add(RuntimeCallCounter* counter) { - if (counter->count() == 0) return; - entries.push_back( - Entry(counter->name(), counter->time(), counter->count())); - total_time += counter->time(); - total_call_count += counter->count(); - } - - private: - class Entry { - public: - Entry(const char* name, base::TimeDelta time, uint64_t count) - : name_(name), - time_(time.InMicroseconds()), - count_(count), - time_percent_(100), - count_percent_(100) {} - - bool operator<(const Entry& other) const { - if (time_ < other.time_) return true; - if (time_ > other.time_) return false; - return count_ < other.count_; - } - - V8_NOINLINE void Print(std::ostream& os) { - os.precision(2); - os << std::fixed << std::setprecision(2); - os << std::setw(50) << name_; - os << std::setw(10) << static_cast<double>(time_) / 1000 << "ms "; - os << std::setw(6) << time_percent_ << "%"; - os << std::setw(10) << count_ << " "; - os << std::setw(6) << count_percent_ << "%"; - os << std::endl; - } - - V8_NOINLINE void SetTotal(base::TimeDelta total_time, - uint64_t total_count) { - if (total_time.InMicroseconds() == 0) { - time_percent_ = 0; - } else { - time_percent_ = 100.0 * time_ / total_time.InMicroseconds(); - } - count_percent_ = 100.0 * count_ / total_count; - } - - private: - const char* name_; - int64_t time_; - uint64_t count_; - double time_percent_; - double count_percent_; - }; - - uint64_t total_call_count = 0; - base::TimeDelta total_time; - std::vector<Entry> entries; -}; - -void RuntimeCallCounter::Reset() { - count_ = 0; - time_ = 0; -} - -void RuntimeCallCounter::Dump(v8::tracing::TracedValue* value) { - value->BeginArray(name_); - value->AppendDouble(count_); - value->AppendDouble(time_); - value->EndArray(); -} - -void RuntimeCallCounter::Add(RuntimeCallCounter* other) { - count_ += other->count(); - time_ += other->time().InMicroseconds(); -} - -void RuntimeCallTimer::Snapshot() { - base::TimeTicks now = Now(); - // Pause only / topmost timer in the timer stack. - Pause(now); - // Commit all the timer's elapsed time to the counters. - RuntimeCallTimer* timer = this; - while (timer != nullptr) { - timer->CommitTimeToCounter(); - timer = timer->parent(); - } - Resume(now); -} - -RuntimeCallStats::RuntimeCallStats(ThreadType thread_type) - : in_use_(false), thread_type_(thread_type) { - static const char* const kNames[] = { -#define CALL_BUILTIN_COUNTER(name) "GC_" #name, - FOR_EACH_GC_COUNTER(CALL_BUILTIN_COUNTER) // -#undef CALL_BUILTIN_COUNTER -#define CALL_RUNTIME_COUNTER(name) #name, - FOR_EACH_MANUAL_COUNTER(CALL_RUNTIME_COUNTER) // -#undef CALL_RUNTIME_COUNTER -#define CALL_RUNTIME_COUNTER(name, nargs, ressize) #name, - FOR_EACH_INTRINSIC(CALL_RUNTIME_COUNTER) // -#undef CALL_RUNTIME_COUNTER -#define CALL_BUILTIN_COUNTER(name) #name, - BUILTIN_LIST_C(CALL_BUILTIN_COUNTER) // -#undef CALL_BUILTIN_COUNTER -#define CALL_BUILTIN_COUNTER(name) "API_" #name, - FOR_EACH_API_COUNTER(CALL_BUILTIN_COUNTER) // -#undef CALL_BUILTIN_COUNTER -#define CALL_BUILTIN_COUNTER(name) #name, - FOR_EACH_HANDLER_COUNTER(CALL_BUILTIN_COUNTER) // -#undef CALL_BUILTIN_COUNTER -#define THREAD_SPECIFIC_COUNTER(name) #name, - FOR_EACH_THREAD_SPECIFIC_COUNTER(THREAD_SPECIFIC_COUNTER) // -#undef THREAD_SPECIFIC_COUNTER - }; - for (int i = 0; i < kNumberOfCounters; i++) { - this->counters_[i] = RuntimeCallCounter(kNames[i]); - } - if (FLAG_rcs_cpu_time) { - CHECK(base::ThreadTicks::IsSupported()); - base::ThreadTicks::WaitUntilInitialized(); - RuntimeCallTimer::Now = &RuntimeCallTimer::NowCPUTime; - } -} - -namespace { -constexpr RuntimeCallCounterId FirstCounter(RuntimeCallCounterId first, ...) { - return first; -} - -#define THREAD_SPECIFIC_COUNTER(name) k##name, -constexpr RuntimeCallCounterId kFirstThreadVariantCounter = - FirstCounter(FOR_EACH_THREAD_SPECIFIC_COUNTER(THREAD_SPECIFIC_COUNTER) 0); -#undef THREAD_SPECIFIC_COUNTER - -#define THREAD_SPECIFIC_COUNTER(name) +1 -constexpr int kThreadVariantCounterCount = - 0 FOR_EACH_THREAD_SPECIFIC_COUNTER(THREAD_SPECIFIC_COUNTER); -#undef THREAD_SPECIFIC_COUNTER - -constexpr auto kLastThreadVariantCounter = static_cast<RuntimeCallCounterId>( - kFirstThreadVariantCounter + kThreadVariantCounterCount - 1); -} // namespace - -bool RuntimeCallStats::HasThreadSpecificCounterVariants( - RuntimeCallCounterId id) { - // Check that it's in the range of the thread-specific variant counters and - // also that it's one of the background counters. - return id >= kFirstThreadVariantCounter && id <= kLastThreadVariantCounter; -} - -bool RuntimeCallStats::IsBackgroundThreadSpecificVariant( - RuntimeCallCounterId id) { - return HasThreadSpecificCounterVariants(id) && - (id - kFirstThreadVariantCounter) % 2 == 1; -} - -void RuntimeCallStats::Enter(RuntimeCallTimer* timer, - RuntimeCallCounterId counter_id) { - DCHECK(IsCalledOnTheSameThread()); - RuntimeCallCounter* counter = GetCounter(counter_id); - DCHECK_NOT_NULL(counter->name()); - timer->Start(counter, current_timer()); - current_timer_.SetValue(timer); - current_counter_.SetValue(counter); -} - -void RuntimeCallStats::Leave(RuntimeCallTimer* timer) { - DCHECK(IsCalledOnTheSameThread()); - RuntimeCallTimer* stack_top = current_timer(); - if (stack_top == nullptr) return; // Missing timer is a result of Reset(). - CHECK(stack_top == timer); - current_timer_.SetValue(timer->Stop()); - RuntimeCallTimer* cur_timer = current_timer(); - current_counter_.SetValue(cur_timer ? cur_timer->counter() : nullptr); -} - -void RuntimeCallStats::Add(RuntimeCallStats* other) { - for (int i = 0; i < kNumberOfCounters; i++) { - GetCounter(i)->Add(other->GetCounter(i)); - } -} - -// static -void RuntimeCallStats::CorrectCurrentCounterId(RuntimeCallCounterId counter_id, - CounterMode mode) { - DCHECK(IsCalledOnTheSameThread()); - if (mode == RuntimeCallStats::CounterMode::kThreadSpecific) { - counter_id = CounterIdForThread(counter_id); - } - DCHECK(IsCounterAppropriateForThread(counter_id)); - - RuntimeCallTimer* timer = current_timer(); - if (timer == nullptr) return; - RuntimeCallCounter* counter = GetCounter(counter_id); - timer->set_counter(counter); - current_counter_.SetValue(counter); -} - -bool RuntimeCallStats::IsCalledOnTheSameThread() { - if (thread_id_.IsValid()) return thread_id_ == ThreadId::Current(); - thread_id_ = ThreadId::Current(); - return true; -} - -void RuntimeCallStats::Print() { - StdoutStream os; - Print(os); -} - -void RuntimeCallStats::Print(std::ostream& os) { - RuntimeCallStatEntries entries; - if (current_timer_.Value() != nullptr) { - current_timer_.Value()->Snapshot(); - } - for (int i = 0; i < kNumberOfCounters; i++) { - entries.Add(GetCounter(i)); - } - entries.Print(os); -} - -void RuntimeCallStats::EnumerateCounters( - debug::RuntimeCallCounterCallback callback) { - if (current_timer_.Value() != nullptr) { - current_timer_.Value()->Snapshot(); - } - for (int i = 0; i < kNumberOfCounters; i++) { - RuntimeCallCounter* counter = GetCounter(i); - callback(counter->name(), counter->count(), counter->time()); - } -} - -void RuntimeCallStats::Reset() { - if (V8_LIKELY(!TracingFlags::is_runtime_stats_enabled())) return; - - // In tracing, we only what to trace the time spent on top level trace events, - // if runtime counter stack is not empty, we should clear the whole runtime - // counter stack, and then reset counters so that we can dump counters into - // top level trace events accurately. - while (current_timer_.Value()) { - current_timer_.SetValue(current_timer_.Value()->Stop()); - } - - for (int i = 0; i < kNumberOfCounters; i++) { - GetCounter(i)->Reset(); - } - - in_use_ = true; -} - -void RuntimeCallStats::Dump(v8::tracing::TracedValue* value) { - for (int i = 0; i < kNumberOfCounters; i++) { - if (GetCounter(i)->count() > 0) GetCounter(i)->Dump(value); - } - in_use_ = false; -} - -WorkerThreadRuntimeCallStats::WorkerThreadRuntimeCallStats() - : isolate_thread_id_(ThreadId::Current()) {} - -WorkerThreadRuntimeCallStats::~WorkerThreadRuntimeCallStats() { - if (tls_key_) base::Thread::DeleteThreadLocalKey(*tls_key_); -} - -base::Thread::LocalStorageKey WorkerThreadRuntimeCallStats::GetKey() { - base::MutexGuard lock(&mutex_); - DCHECK(TracingFlags::is_runtime_stats_enabled()); - if (!tls_key_) tls_key_ = base::Thread::CreateThreadLocalKey(); - return *tls_key_; -} - -RuntimeCallStats* WorkerThreadRuntimeCallStats::NewTable() { - DCHECK(TracingFlags::is_runtime_stats_enabled()); - // Never create a new worker table on the isolate's main thread. - DCHECK_NE(ThreadId::Current(), isolate_thread_id_); - std::unique_ptr<RuntimeCallStats> new_table = - std::make_unique<RuntimeCallStats>(RuntimeCallStats::kWorkerThread); - RuntimeCallStats* result = new_table.get(); - - base::MutexGuard lock(&mutex_); - tables_.push_back(std::move(new_table)); - return result; -} - -void WorkerThreadRuntimeCallStats::AddToMainTable( - RuntimeCallStats* main_call_stats) { - base::MutexGuard lock(&mutex_); - for (auto& worker_stats : tables_) { - DCHECK_NE(main_call_stats, worker_stats.get()); - main_call_stats->Add(worker_stats.get()); - worker_stats->Reset(); - } -} - -WorkerThreadRuntimeCallStatsScope::WorkerThreadRuntimeCallStatsScope( - WorkerThreadRuntimeCallStats* worker_stats) - : table_(nullptr) { - if (V8_LIKELY(!TracingFlags::is_runtime_stats_enabled())) return; - - table_ = reinterpret_cast<RuntimeCallStats*>( - base::Thread::GetThreadLocal(worker_stats->GetKey())); - if (table_ == nullptr) { - table_ = worker_stats->NewTable(); - base::Thread::SetThreadLocal(worker_stats->GetKey(), table_); - } - - if ((TracingFlags::runtime_stats.load(std::memory_order_relaxed) & - v8::tracing::TracingCategoryObserver::ENABLED_BY_TRACING)) { - table_->Reset(); - } -} - -WorkerThreadRuntimeCallStatsScope::~WorkerThreadRuntimeCallStatsScope() { - if (V8_LIKELY(table_ == nullptr)) return; - - if ((TracingFlags::runtime_stats.load(std::memory_order_relaxed) & - v8::tracing::TracingCategoryObserver::ENABLED_BY_TRACING)) { - auto value = v8::tracing::TracedValue::Create(); - table_->Dump(value.get()); - TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("v8.runtime_stats"), - "V8.RuntimeStats", TRACE_EVENT_SCOPE_THREAD, - "runtime-call-stats", std::move(value)); - } -} - } // namespace internal } // namespace v8 diff --git a/deps/v8/src/logging/counters.h b/deps/v8/src/logging/counters.h index 89cda72754..0de6a8d0e6 100644 --- a/deps/v8/src/logging/counters.h +++ b/deps/v8/src/logging/counters.h @@ -13,16 +13,10 @@ #include "src/base/platform/elapsed-timer.h" #include "src/base/platform/time.h" #include "src/common/globals.h" -#include "src/debug/debug-interface.h" #include "src/execution/isolate.h" -#include "src/init/heap-symbols.h" #include "src/logging/counters-definitions.h" -#include "src/logging/tracing-flags.h" +#include "src/logging/runtime-call-stats.h" #include "src/objects/objects.h" -#include "src/runtime/runtime.h" -#include "src/tracing/trace-event.h" -#include "src/tracing/traced-value.h" -#include "src/tracing/tracing-category-observer.h" #include "src/utils/allocation.h" namespace v8 { @@ -648,668 +642,6 @@ double AggregatedMemoryHistogram<Histogram>::Aggregate(double current_ms, value * ((current_ms - last_ms_) / interval_ms); } -class RuntimeCallCounter final { - public: - RuntimeCallCounter() : RuntimeCallCounter(nullptr) {} - explicit RuntimeCallCounter(const char* name) - : name_(name), count_(0), time_(0) {} - V8_NOINLINE void Reset(); - V8_NOINLINE void Dump(v8::tracing::TracedValue* value); - void Add(RuntimeCallCounter* other); - - const char* name() const { return name_; } - int64_t count() const { return count_; } - base::TimeDelta time() const { - return base::TimeDelta::FromMicroseconds(time_); - } - void Increment() { count_++; } - void Add(base::TimeDelta delta) { time_ += delta.InMicroseconds(); } - - private: - friend class RuntimeCallStats; - - const char* name_; - int64_t count_; - // Stored as int64_t so that its initialization can be deferred. - int64_t time_; -}; - -// RuntimeCallTimer is used to keep track of the stack of currently active -// timers used for properly measuring the own time of a RuntimeCallCounter. -class RuntimeCallTimer final { - public: - RuntimeCallCounter* counter() { return counter_; } - void set_counter(RuntimeCallCounter* counter) { counter_ = counter; } - RuntimeCallTimer* parent() const { return parent_.Value(); } - void set_parent(RuntimeCallTimer* timer) { parent_.SetValue(timer); } - const char* name() const { return counter_->name(); } - - inline bool IsStarted(); - - inline void Start(RuntimeCallCounter* counter, RuntimeCallTimer* parent); - void Snapshot(); - inline RuntimeCallTimer* Stop(); - - // Make the time source configurable for testing purposes. - V8_EXPORT_PRIVATE static base::TimeTicks (*Now)(); - - // Helper to switch over to CPU time. - static base::TimeTicks NowCPUTime(); - - private: - inline void Pause(base::TimeTicks now); - inline void Resume(base::TimeTicks now); - inline void CommitTimeToCounter(); - - RuntimeCallCounter* counter_ = nullptr; - base::AtomicValue<RuntimeCallTimer*> parent_; - base::TimeTicks start_ticks_; - base::TimeDelta elapsed_; -}; - -#define FOR_EACH_GC_COUNTER(V) \ - TRACER_SCOPES(V) \ - TRACER_BACKGROUND_SCOPES(V) - -#define FOR_EACH_API_COUNTER(V) \ - V(AccessorPair_New) \ - V(ArrayBuffer_Cast) \ - V(ArrayBuffer_Detach) \ - V(ArrayBuffer_New) \ - V(ArrayBuffer_NewBackingStore) \ - V(ArrayBuffer_BackingStore_Reallocate) \ - V(Array_CloneElementAt) \ - V(Array_New) \ - V(BigInt64Array_New) \ - V(BigInt_NewFromWords) \ - V(BigIntObject_BigIntValue) \ - V(BigIntObject_New) \ - V(BigUint64Array_New) \ - V(BooleanObject_BooleanValue) \ - V(BooleanObject_New) \ - V(Context_New) \ - V(Context_NewRemoteContext) \ - V(DataView_New) \ - V(Date_New) \ - V(Date_NumberValue) \ - V(Debug_Call) \ - V(debug_GetPrivateMembers) \ - V(Error_New) \ - V(External_New) \ - V(Float32Array_New) \ - V(Float64Array_New) \ - V(Function_Call) \ - V(Function_New) \ - V(Function_FunctionProtoToString) \ - V(Function_NewInstance) \ - V(FunctionTemplate_GetFunction) \ - V(FunctionTemplate_New) \ - V(FunctionTemplate_NewRemoteInstance) \ - V(FunctionTemplate_NewWithCache) \ - V(FunctionTemplate_NewWithFastHandler) \ - V(Int16Array_New) \ - V(Int32Array_New) \ - V(Int8Array_New) \ - V(Isolate_DateTimeConfigurationChangeNotification) \ - V(Isolate_LocaleConfigurationChangeNotification) \ - V(JSON_Parse) \ - V(JSON_Stringify) \ - V(Map_AsArray) \ - V(Map_Clear) \ - V(Map_Delete) \ - V(Map_Get) \ - V(Map_Has) \ - V(Map_New) \ - V(Map_Set) \ - V(Message_GetEndColumn) \ - V(Message_GetLineNumber) \ - V(Message_GetSourceLine) \ - V(Message_GetStartColumn) \ - V(Module_Evaluate) \ - V(Module_InstantiateModule) \ - V(Module_SetSyntheticModuleExport) \ - V(NumberObject_New) \ - V(NumberObject_NumberValue) \ - V(Object_CallAsConstructor) \ - V(Object_CallAsFunction) \ - V(Object_CreateDataProperty) \ - V(Object_DefineOwnProperty) \ - V(Object_DefineProperty) \ - V(Object_Delete) \ - V(Object_DeleteProperty) \ - V(Object_ForceSet) \ - V(Object_Get) \ - V(Object_GetOwnPropertyDescriptor) \ - V(Object_GetOwnPropertyNames) \ - V(Object_GetPropertyAttributes) \ - V(Object_GetPropertyNames) \ - V(Object_GetRealNamedProperty) \ - V(Object_GetRealNamedPropertyAttributes) \ - V(Object_GetRealNamedPropertyAttributesInPrototypeChain) \ - V(Object_GetRealNamedPropertyInPrototypeChain) \ - V(Object_Has) \ - V(Object_HasOwnProperty) \ - V(Object_HasRealIndexedProperty) \ - V(Object_HasRealNamedCallbackProperty) \ - V(Object_HasRealNamedProperty) \ - V(Object_IsCodeLike) \ - V(Object_New) \ - V(Object_ObjectProtoToString) \ - V(Object_Set) \ - V(Object_SetAccessor) \ - V(Object_SetIntegrityLevel) \ - V(Object_SetPrivate) \ - V(Object_SetPrototype) \ - V(ObjectTemplate_New) \ - V(ObjectTemplate_NewInstance) \ - V(Object_ToArrayIndex) \ - V(Object_ToBigInt) \ - V(Object_ToDetailString) \ - V(Object_ToInt32) \ - V(Object_ToInteger) \ - V(Object_ToNumber) \ - V(Object_ToObject) \ - V(Object_ToString) \ - V(Object_ToUint32) \ - V(Persistent_New) \ - V(Private_New) \ - V(Promise_Catch) \ - V(Promise_Chain) \ - V(Promise_HasRejectHandler) \ - V(Promise_Resolver_New) \ - V(Promise_Resolver_Reject) \ - V(Promise_Resolver_Resolve) \ - V(Promise_Result) \ - V(Promise_Status) \ - V(Promise_Then) \ - V(Proxy_New) \ - V(RangeError_New) \ - V(ReferenceError_New) \ - V(RegExp_Exec) \ - V(RegExp_New) \ - V(ScriptCompiler_Compile) \ - V(ScriptCompiler_CompileFunctionInContext) \ - V(ScriptCompiler_CompileUnbound) \ - V(Script_Run) \ - V(Set_Add) \ - V(Set_AsArray) \ - V(Set_Clear) \ - V(Set_Delete) \ - V(Set_Has) \ - V(Set_New) \ - V(SharedArrayBuffer_New) \ - V(SharedArrayBuffer_NewBackingStore) \ - V(String_Concat) \ - V(String_NewExternalOneByte) \ - V(String_NewExternalTwoByte) \ - V(String_NewFromOneByte) \ - V(String_NewFromTwoByte) \ - V(String_NewFromUtf8) \ - V(String_NewFromUtf8Literal) \ - V(StringObject_New) \ - V(StringObject_StringValue) \ - V(String_Write) \ - V(String_WriteUtf8) \ - V(Symbol_New) \ - V(SymbolObject_New) \ - V(SymbolObject_SymbolValue) \ - V(SyntaxError_New) \ - V(TracedGlobal_New) \ - V(TryCatch_StackTrace) \ - V(TypeError_New) \ - V(Uint16Array_New) \ - V(Uint32Array_New) \ - V(Uint8Array_New) \ - V(Uint8ClampedArray_New) \ - V(UnboundScript_GetId) \ - V(UnboundScript_GetLineNumber) \ - V(UnboundScript_GetName) \ - V(UnboundScript_GetSourceMappingURL) \ - V(UnboundScript_GetSourceURL) \ - V(ValueDeserializer_ReadHeader) \ - V(ValueDeserializer_ReadValue) \ - V(ValueSerializer_WriteValue) \ - V(Value_Equals) \ - V(Value_InstanceOf) \ - V(Value_Int32Value) \ - V(Value_IntegerValue) \ - V(Value_NumberValue) \ - V(Value_TypeOf) \ - V(Value_Uint32Value) \ - V(WasmCompileError_New) \ - V(WasmLinkError_New) \ - V(WasmRuntimeError_New) \ - V(WeakMap_Get) \ - V(WeakMap_New) \ - V(WeakMap_Set) - -#define ADD_THREAD_SPECIFIC_COUNTER(V, Prefix, Suffix) \ - V(Prefix##Suffix) \ - V(Prefix##Background##Suffix) - -#define FOR_EACH_THREAD_SPECIFIC_COUNTER(V) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Compile, Analyse) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Compile, Eval) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Compile, Function) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Compile, Ignition) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Compile, IgnitionFinalization) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Compile, RewriteReturnResult) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Compile, ScopeAnalysis) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Compile, Script) \ - \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, AllocateFPRegisters) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, AllocateGeneralRegisters) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, AssembleCode) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, AssignSpillSlots) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, BuildLiveRangeBundles) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, BuildLiveRanges) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, BytecodeGraphBuilder) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, CommitAssignment) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, ConnectRanges) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, ControlFlowOptimization) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, CSAEarlyOptimization) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, CSAOptimization) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, DecideSpillingMode) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, DecompressionOptimization) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, EarlyOptimization) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, EarlyTrimming) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, EffectLinearization) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, EscapeAnalysis) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, FinalizeCode) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, FrameElision) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, GenericLowering) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, Inlining) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, JumpThreading) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, MidTierPopulateReferenceMaps) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, MidTierRegisterAllocator) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, MidTierRegisterOutputDefinition) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, MidTierSpillSlotAllocator) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, LateGraphTrimming) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, LateOptimization) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, LoadElimination) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, LocateSpillSlots) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, LoopExitElimination) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, LoopPeeling) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, MachineOperatorOptimization) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, MeetRegisterConstraints) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, MemoryOptimization) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, OptimizeMoves) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, PopulatePointerMaps) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, PrintGraph) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, ResolveControlFlow) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, ResolvePhis) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, \ - ScheduledEffectControlLinearization) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, ScheduledMachineLowering) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, Scheduling) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, SelectInstructions) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, SimplifiedLowering) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, StoreStoreElimination) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, TypeAssertions) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, TypedLowering) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, Typer) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, Untyper) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, VerifyGraph) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, WasmBaseOptimization) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, WasmInlining) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, WasmLoopUnrolling) \ - \ - ADD_THREAD_SPECIFIC_COUNTER(V, Parse, ArrowFunctionLiteral) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Parse, FunctionLiteral) \ - ADD_THREAD_SPECIFIC_COUNTER(V, Parse, Program) \ - ADD_THREAD_SPECIFIC_COUNTER(V, PreParse, ArrowFunctionLiteral) \ - ADD_THREAD_SPECIFIC_COUNTER(V, PreParse, WithVariableResolution) - -#define FOR_EACH_MANUAL_COUNTER(V) \ - V(AccessorGetterCallback) \ - V(AccessorSetterCallback) \ - V(ArrayLengthGetter) \ - V(ArrayLengthSetter) \ - V(BoundFunctionLengthGetter) \ - V(BoundFunctionNameGetter) \ - V(CodeGenerationFromStringsCallbacks) \ - V(CompileBackgroundCompileTask) \ - V(CompileBaseline) \ - V(CompileBaselineVisit) \ - V(CompileBaselinePreVisit) \ - V(CompileCollectSourcePositions) \ - V(CompileDeserialize) \ - V(CompileEnqueueOnDispatcher) \ - V(CompileFinalizeBackgroundCompileTask) \ - V(CompileFinishNowOnDispatcher) \ - V(CompileGetFromOptimizedCodeMap) \ - V(CompilePublishBackgroundFinalization) \ - V(CompileSerialize) \ - V(CompileWaitForDispatcher) \ - V(ConfigureInstance) \ - V(CreateApiFunction) \ - V(DeoptimizeCode) \ - V(DeserializeContext) \ - V(DeserializeIsolate) \ - V(FinalizationRegistryCleanupFromTask) \ - V(FunctionCallback) \ - V(FunctionLengthGetter) \ - V(FunctionPrototypeGetter) \ - V(FunctionPrototypeSetter) \ - V(GC_Custom_AllAvailableGarbage) \ - V(GC_Custom_IncrementalMarkingObserver) \ - V(GC_Custom_SlowAllocateRaw) \ - V(GCEpilogueCallback) \ - V(GCPrologueCallback) \ - V(Genesis) \ - V(GetCompatibleReceiver) \ - V(GetMoreDataCallback) \ - V(IndexedDefinerCallback) \ - V(IndexedDeleterCallback) \ - V(IndexedDescriptorCallback) \ - V(IndexedEnumeratorCallback) \ - V(IndexedGetterCallback) \ - V(IndexedQueryCallback) \ - V(IndexedSetterCallback) \ - V(InstantiateFunction) \ - V(InstantiateObject) \ - V(Invoke) \ - V(InvokeApiFunction) \ - V(InvokeApiInterruptCallbacks) \ - V(IsCompatibleReceiver) \ - V(IsCompatibleReceiverMap) \ - V(IsTemplateFor) \ - V(JS_Execution) \ - V(Map_SetPrototype) \ - V(Map_TransitionToAccessorProperty) \ - V(Map_TransitionToDataProperty) \ - V(MessageListenerCallback) \ - V(NamedDefinerCallback) \ - V(NamedDeleterCallback) \ - V(NamedDescriptorCallback) \ - V(NamedEnumeratorCallback) \ - V(NamedGetterCallback) \ - V(NamedQueryCallback) \ - V(NamedSetterCallback) \ - V(Object_DeleteProperty) \ - V(ObjectVerify) \ - V(OptimizeBackgroundDispatcherJob) \ - V(OptimizeCode) \ - V(OptimizeConcurrentFinalize) \ - V(OptimizeConcurrentPrepare) \ - V(OptimizeFinalizePipelineJob) \ - V(OptimizeHeapBrokerInitialization) \ - V(OptimizeNonConcurrent) \ - V(OptimizeSerialization) \ - V(OptimizeSerializeMetadata) \ - V(ParseEval) \ - V(ParseFunction) \ - V(PropertyCallback) \ - V(PrototypeMap_TransitionToAccessorProperty) \ - V(PrototypeMap_TransitionToDataProperty) \ - V(PrototypeObject_DeleteProperty) \ - V(ReconfigureToDataProperty) \ - V(UpdateProtector) \ - V(StringLengthGetter) \ - V(TestCounter1) \ - V(TestCounter2) \ - V(TestCounter3) - -#define FOR_EACH_HANDLER_COUNTER(V) \ - V(KeyedLoadIC_KeyedLoadSloppyArgumentsStub) \ - V(KeyedLoadIC_LoadElementDH) \ - V(KeyedLoadIC_LoadIndexedInterceptorStub) \ - V(KeyedLoadIC_LoadIndexedStringDH) \ - V(KeyedLoadIC_SlowStub) \ - V(KeyedStoreIC_ElementsTransitionAndStoreStub) \ - V(KeyedStoreIC_KeyedStoreSloppyArgumentsStub) \ - V(KeyedStoreIC_SlowStub) \ - V(KeyedStoreIC_StoreElementStub) \ - V(KeyedStoreIC_StoreFastElementStub) \ - V(LoadGlobalIC_LoadScriptContextField) \ - V(LoadGlobalIC_SlowStub) \ - V(LoadIC_FunctionPrototypeStub) \ - V(LoadIC_HandlerCacheHit_Accessor) \ - V(LoadIC_LoadAccessorDH) \ - V(LoadIC_LoadAccessorFromPrototypeDH) \ - V(LoadIC_LoadApiGetterFromPrototypeDH) \ - V(LoadIC_LoadCallback) \ - V(LoadIC_LoadConstantDH) \ - V(LoadIC_LoadConstantFromPrototypeDH) \ - V(LoadIC_LoadFieldDH) \ - V(LoadIC_LoadFieldFromPrototypeDH) \ - V(LoadIC_LoadGlobalDH) \ - V(LoadIC_LoadGlobalFromPrototypeDH) \ - V(LoadIC_LoadIntegerIndexedExoticDH) \ - V(LoadIC_LoadInterceptorDH) \ - V(LoadIC_LoadInterceptorFromPrototypeDH) \ - V(LoadIC_LoadNativeDataPropertyDH) \ - V(LoadIC_LoadNativeDataPropertyFromPrototypeDH) \ - V(LoadIC_LoadNonexistentDH) \ - V(LoadIC_LoadNonMaskingInterceptorDH) \ - V(LoadIC_LoadNormalDH) \ - V(LoadIC_LoadNormalFromPrototypeDH) \ - V(LoadIC_NonReceiver) \ - V(LoadIC_SlowStub) \ - V(LoadIC_StringLength) \ - V(LoadIC_StringWrapperLength) \ - V(StoreGlobalIC_SlowStub) \ - V(StoreGlobalIC_StoreScriptContextField) \ - V(StoreIC_HandlerCacheHit_Accessor) \ - V(StoreIC_NonReceiver) \ - V(StoreIC_SlowStub) \ - V(StoreIC_StoreAccessorDH) \ - V(StoreIC_StoreAccessorOnPrototypeDH) \ - V(StoreIC_StoreApiSetterOnPrototypeDH) \ - V(StoreIC_StoreFieldDH) \ - V(StoreIC_StoreGlobalDH) \ - V(StoreIC_StoreGlobalTransitionDH) \ - V(StoreIC_StoreInterceptorStub) \ - V(StoreIC_StoreNativeDataPropertyDH) \ - V(StoreIC_StoreNativeDataPropertyOnPrototypeDH) \ - V(StoreIC_StoreNormalDH) \ - V(StoreIC_StoreTransitionDH) \ - V(StoreInArrayLiteralIC_SlowStub) - -enum RuntimeCallCounterId { -#define CALL_RUNTIME_COUNTER(name) kGC_##name, - FOR_EACH_GC_COUNTER(CALL_RUNTIME_COUNTER) // -#undef CALL_RUNTIME_COUNTER -#define CALL_RUNTIME_COUNTER(name) k##name, - FOR_EACH_MANUAL_COUNTER(CALL_RUNTIME_COUNTER) // -#undef CALL_RUNTIME_COUNTER -#define CALL_RUNTIME_COUNTER(name, nargs, ressize) kRuntime_##name, - FOR_EACH_INTRINSIC(CALL_RUNTIME_COUNTER) // -#undef CALL_RUNTIME_COUNTER -#define CALL_BUILTIN_COUNTER(name) kBuiltin_##name, - BUILTIN_LIST_C(CALL_BUILTIN_COUNTER) // -#undef CALL_BUILTIN_COUNTER -#define CALL_BUILTIN_COUNTER(name) kAPI_##name, - FOR_EACH_API_COUNTER(CALL_BUILTIN_COUNTER) // -#undef CALL_BUILTIN_COUNTER -#define CALL_BUILTIN_COUNTER(name) kHandler_##name, - FOR_EACH_HANDLER_COUNTER(CALL_BUILTIN_COUNTER) // -#undef CALL_BUILTIN_COUNTER -#define THREAD_SPECIFIC_COUNTER(name) k##name, - FOR_EACH_THREAD_SPECIFIC_COUNTER(THREAD_SPECIFIC_COUNTER) // -#undef THREAD_SPECIFIC_COUNTER - kNumberOfCounters, -}; - -class RuntimeCallStats final { - public: - enum ThreadType { kMainIsolateThread, kWorkerThread }; - - // If kExact is chosen the counter will be use as given. With kThreadSpecific, - // if the RuntimeCallStats was created for a worker thread, then the - // background specific version of the counter will be used instead. - enum CounterMode { kExact, kThreadSpecific }; - - explicit V8_EXPORT_PRIVATE RuntimeCallStats(ThreadType thread_type); - - // Starting measuring the time for a function. This will establish the - // connection to the parent counter for properly calculating the own times. - V8_EXPORT_PRIVATE void Enter(RuntimeCallTimer* timer, - RuntimeCallCounterId counter_id); - - // Leave a scope for a measured runtime function. This will properly add - // the time delta to the current_counter and subtract the delta from its - // parent. - V8_EXPORT_PRIVATE void Leave(RuntimeCallTimer* timer); - - // Set counter id for the innermost measurement. It can be used to refine - // event kind when a runtime entry counter is too generic. - V8_EXPORT_PRIVATE void CorrectCurrentCounterId( - RuntimeCallCounterId counter_id, CounterMode mode = kExact); - - V8_EXPORT_PRIVATE void Reset(); - // Add all entries from another stats object. - void Add(RuntimeCallStats* other); - V8_EXPORT_PRIVATE void Print(std::ostream& os); - V8_EXPORT_PRIVATE void Print(); - V8_NOINLINE void Dump(v8::tracing::TracedValue* value); - - V8_EXPORT_PRIVATE void EnumerateCounters( - debug::RuntimeCallCounterCallback callback); - - ThreadId thread_id() const { return thread_id_; } - RuntimeCallTimer* current_timer() { return current_timer_.Value(); } - RuntimeCallCounter* current_counter() { return current_counter_.Value(); } - bool InUse() { return in_use_; } - bool IsCalledOnTheSameThread(); - - V8_EXPORT_PRIVATE bool IsBackgroundThreadSpecificVariant( - RuntimeCallCounterId id); - V8_EXPORT_PRIVATE bool HasThreadSpecificCounterVariants( - RuntimeCallCounterId id); - - // This should only be called for counters with a dual Background variant. If - // on the main thread, this just returns the counter. If on a worker thread, - // it returns Background variant of the counter. - RuntimeCallCounterId CounterIdForThread(RuntimeCallCounterId id) { - DCHECK(HasThreadSpecificCounterVariants(id)); - // All thread specific counters are laid out with the main thread variant - // first followed by the background variant. - return thread_type_ == kWorkerThread - ? static_cast<RuntimeCallCounterId>(id + 1) - : id; - } - - bool IsCounterAppropriateForThread(RuntimeCallCounterId id) { - // TODO(delphick): We should add background-only counters and ensure that - // all counters (not just the thread-specific variants) are only invoked on - // the correct thread. - if (!HasThreadSpecificCounterVariants(id)) return true; - return IsBackgroundThreadSpecificVariant(id) == - (thread_type_ == kWorkerThread); - } - - static const int kNumberOfCounters = - static_cast<int>(RuntimeCallCounterId::kNumberOfCounters); - RuntimeCallCounter* GetCounter(RuntimeCallCounterId counter_id) { - return &counters_[static_cast<int>(counter_id)]; - } - RuntimeCallCounter* GetCounter(int counter_id) { - return &counters_[counter_id]; - } - - private: - // Top of a stack of active timers. - base::AtomicValue<RuntimeCallTimer*> current_timer_; - // Active counter object associated with current timer. - base::AtomicValue<RuntimeCallCounter*> current_counter_; - // Used to track nested tracing scopes. - bool in_use_; - ThreadType thread_type_; - ThreadId thread_id_; - RuntimeCallCounter counters_[kNumberOfCounters]; -}; - -class WorkerThreadRuntimeCallStats final { - public: - WorkerThreadRuntimeCallStats(); - ~WorkerThreadRuntimeCallStats(); - - // Returns the TLS key associated with this WorkerThreadRuntimeCallStats. - base::Thread::LocalStorageKey GetKey(); - - // Returns a new worker thread runtime call stats table managed by this - // WorkerThreadRuntimeCallStats. - RuntimeCallStats* NewTable(); - - // Adds the counters from the worker thread tables to |main_call_stats|. - void AddToMainTable(RuntimeCallStats* main_call_stats); - - private: - base::Mutex mutex_; - std::vector<std::unique_ptr<RuntimeCallStats>> tables_; - base::Optional<base::Thread::LocalStorageKey> tls_key_; - // Since this is for creating worker thread runtime-call stats, record the - // main thread ID to ensure we never create a worker RCS table for the main - // thread. - ThreadId isolate_thread_id_; -}; - -// Creating a WorkerThreadRuntimeCallStatsScope will provide a thread-local -// runtime call stats table, and will dump the table to an immediate trace event -// when it is destroyed. -class V8_NODISCARD WorkerThreadRuntimeCallStatsScope final { - public: - explicit WorkerThreadRuntimeCallStatsScope( - WorkerThreadRuntimeCallStats* off_thread_stats); - ~WorkerThreadRuntimeCallStatsScope(); - - RuntimeCallStats* Get() const { return table_; } - - private: - RuntimeCallStats* table_; -}; - -#define CHANGE_CURRENT_RUNTIME_COUNTER(runtime_call_stats, counter_id) \ - do { \ - if (V8_UNLIKELY(TracingFlags::is_runtime_stats_enabled()) && \ - runtime_call_stats) { \ - runtime_call_stats->CorrectCurrentCounterId(counter_id); \ - } \ - } while (false) - -#define TRACE_HANDLER_STATS(isolate, counter_name) \ - CHANGE_CURRENT_RUNTIME_COUNTER( \ - isolate->counters()->runtime_call_stats(), \ - RuntimeCallCounterId::kHandler_##counter_name) - -// A RuntimeCallTimerScopes wraps around a RuntimeCallTimer to measure the -// the time of C++ scope. -class V8_NODISCARD RuntimeCallTimerScope { - public: - inline RuntimeCallTimerScope(Isolate* isolate, - RuntimeCallCounterId counter_id); - inline RuntimeCallTimerScope(RuntimeCallStats* stats, - RuntimeCallCounterId counter_id, - RuntimeCallStats::CounterMode mode = - RuntimeCallStats::CounterMode::kExact) { - if (V8_LIKELY(!TracingFlags::is_runtime_stats_enabled() || - stats == nullptr)) { - return; - } - stats_ = stats; - if (mode == RuntimeCallStats::CounterMode::kThreadSpecific) { - counter_id = stats->CounterIdForThread(counter_id); - } - - DCHECK(stats->IsCounterAppropriateForThread(counter_id)); - stats_->Enter(&timer_, counter_id); - } - - inline ~RuntimeCallTimerScope() { - if (V8_UNLIKELY(stats_ != nullptr)) { - stats_->Leave(&timer_); - } - } - - RuntimeCallTimerScope(const RuntimeCallTimerScope&) = delete; - RuntimeCallTimerScope& operator=(const RuntimeCallTimerScope&) = delete; - - private: - RuntimeCallStats* stats_ = nullptr; - RuntimeCallTimer timer_; -}; - // This file contains all the v8 counters that are in use. class Counters : public std::enable_shared_from_this<Counters> { public: @@ -1410,11 +742,19 @@ class Counters : public std::enable_shared_from_this<Counters> { }; // clang-format on +#ifdef V8_RUNTIME_CALL_STATS RuntimeCallStats* runtime_call_stats() { return &runtime_call_stats_; } WorkerThreadRuntimeCallStats* worker_thread_runtime_call_stats() { return &worker_thread_runtime_call_stats_; } +#else // V8_RUNTIME_CALL_STATS + RuntimeCallStats* runtime_call_stats() { return nullptr; } + + WorkerThreadRuntimeCallStats* worker_thread_runtime_call_stats() { + return nullptr; + } +#endif // V8_RUNTIME_CALL_STATS private: friend class StatsTable; @@ -1422,9 +762,6 @@ class Counters : public std::enable_shared_from_this<Counters> { friend class Histogram; friend class HistogramTimer; - Isolate* isolate_; - StatsTable stats_table_; - int* FindLocation(const char* name) { return stats_table_.FindLocation(name); } @@ -1491,8 +828,12 @@ class Counters : public std::enable_shared_from_this<Counters> { FIXED_ARRAY_SUB_INSTANCE_TYPE_LIST(SC) #undef SC +#ifdef V8_RUNTIME_CALL_STATS RuntimeCallStats runtime_call_stats_; WorkerThreadRuntimeCallStats worker_thread_runtime_call_stats_; +#endif + Isolate* isolate_; + StatsTable stats_table_; DISALLOW_IMPLICIT_CONSTRUCTORS(Counters); }; @@ -1505,12 +846,14 @@ void HistogramTimer::Stop() { TimedHistogram::Stop(&timer_, counters()->isolate()); } +#ifdef V8_RUNTIME_CALL_STATS RuntimeCallTimerScope::RuntimeCallTimerScope(Isolate* isolate, RuntimeCallCounterId counter_id) { if (V8_LIKELY(!TracingFlags::is_runtime_stats_enabled())) return; stats_ = isolate->counters()->runtime_call_stats(); stats_->Enter(&timer_, counter_id); } +#endif // defined(V8_RUNTIME_CALL_STATS) } // namespace internal } // namespace v8 diff --git a/deps/v8/src/logging/log.cc b/deps/v8/src/logging/log.cc index 110152c56b..1e76a66a66 100644 --- a/deps/v8/src/logging/log.cc +++ b/deps/v8/src/logging/log.cc @@ -1728,12 +1728,14 @@ bool Logger::EnsureLogScriptSource(Script script) { } void Logger::RuntimeCallTimerEvent() { +#ifdef V8_RUNTIME_CALL_STATS RuntimeCallStats* stats = isolate_->counters()->runtime_call_stats(); RuntimeCallCounter* counter = stats->current_counter(); if (counter == nullptr) return; MSG_BUILDER(); msg << "active-runtime-timer" << kNext << counter->name(); msg.WriteToLogFile(); +#endif // V8_RUNTIME_CALL_STATS } void Logger::TickEvent(TickSample* sample, bool overflow) { @@ -2127,7 +2129,6 @@ void ExistingCodeLogger::LogCodeObject(Object object) { case CodeKind::INTERPRETED_FUNCTION: case CodeKind::TURBOFAN: case CodeKind::BASELINE: - case CodeKind::NATIVE_CONTEXT_INDEPENDENT: case CodeKind::TURBOPROP: return; // We log this later using LogCompiledFunctions. case CodeKind::BYTECODE_HANDLER: @@ -2273,9 +2274,10 @@ void ExistingCodeLogger::LogExistingFunction( CALL_CODE_EVENT_HANDLER(CallbackEvent(fun_name, entry_point)) // Fast API function. - Address c_function = v8::ToCData<Address>(fun_data->GetCFunction()); - if (c_function != kNullAddress) { - CALL_CODE_EVENT_HANDLER(CallbackEvent(fun_name, c_function)) + int c_functions_count = fun_data->GetCFunctionsCount(); + for (int i = 0; i < c_functions_count; i++) { + CALL_CODE_EVENT_HANDLER( + CallbackEvent(fun_name, fun_data->GetCFunction(i))) } } } diff --git a/deps/v8/src/logging/log.h b/deps/v8/src/logging/log.h index e52f9f2833..ec19032060 100644 --- a/deps/v8/src/logging/log.h +++ b/deps/v8/src/logging/log.h @@ -208,6 +208,7 @@ class Logger : public CodeEventListener { Handle<String> source) override; void CodeMoveEvent(AbstractCode from, AbstractCode to) override; void SharedFunctionInfoMoveEvent(Address from, Address to) override; + void NativeContextMoveEvent(Address from, Address to) override {} void CodeMovingGCEvent() override; void CodeDisableOptEvent(Handle<AbstractCode> code, Handle<SharedFunctionInfo> shared) override; @@ -410,6 +411,7 @@ class V8_EXPORT_PRIVATE CodeEventLogger : public CodeEventListener { void GetterCallbackEvent(Handle<Name> name, Address entry_point) override {} void SetterCallbackEvent(Handle<Name> name, Address entry_point) override {} void SharedFunctionInfoMoveEvent(Address from, Address to) override {} + void NativeContextMoveEvent(Address from, Address to) override {} void CodeMovingGCEvent() override {} void CodeDeoptEvent(Handle<Code> code, DeoptimizeKind kind, Address pc, int fp_to_sp_delta, bool reuse_code) override {} @@ -475,6 +477,7 @@ class ExternalCodeEventListener : public CodeEventListener { void GetterCallbackEvent(Handle<Name> name, Address entry_point) override {} void SetterCallbackEvent(Handle<Name> name, Address entry_point) override {} void SharedFunctionInfoMoveEvent(Address from, Address to) override {} + void NativeContextMoveEvent(Address from, Address to) override {} void CodeMoveEvent(AbstractCode from, AbstractCode to) override; void CodeDisableOptEvent(Handle<AbstractCode> code, Handle<SharedFunctionInfo> shared) override {} diff --git a/deps/v8/src/logging/runtime-call-stats.cc b/deps/v8/src/logging/runtime-call-stats.cc new file mode 100644 index 0000000000..86e3215f74 --- /dev/null +++ b/deps/v8/src/logging/runtime-call-stats.cc @@ -0,0 +1,370 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifdef V8_RUNTIME_CALL_STATS + +#include "src/logging/runtime-call-stats.h" + +#include <iomanip> + +#include "src/tracing/tracing-category-observer.h" +#include "src/utils/ostreams.h" + +namespace v8 { +namespace internal { + +base::TimeTicks (*RuntimeCallTimer::Now)() = + &base::TimeTicks::HighResolutionNow; + +base::TimeTicks RuntimeCallTimer::NowCPUTime() { + base::ThreadTicks ticks = base::ThreadTicks::Now(); + return base::TimeTicks::FromInternalValue(ticks.ToInternalValue()); +} + +class RuntimeCallStatEntries { + public: + void Print(std::ostream& os) { + if (total_call_count == 0) return; + std::sort(entries.rbegin(), entries.rend()); + os << std::setw(50) << "Runtime Function/C++ Builtin" << std::setw(12) + << "Time" << std::setw(18) << "Count" << std::endl + << std::string(88, '=') << std::endl; + for (Entry& entry : entries) { + entry.SetTotal(total_time, total_call_count); + entry.Print(os); + } + os << std::string(88, '-') << std::endl; + Entry("Total", total_time, total_call_count).Print(os); + } + + // By default, the compiler will usually inline this, which results in a large + // binary size increase: std::vector::push_back expands to a large amount of + // instructions, and this function is invoked repeatedly by macros. + V8_NOINLINE void Add(RuntimeCallCounter* counter) { + if (counter->count() == 0) return; + entries.push_back( + Entry(counter->name(), counter->time(), counter->count())); + total_time += counter->time(); + total_call_count += counter->count(); + } + + private: + class Entry { + public: + Entry(const char* name, base::TimeDelta time, uint64_t count) + : name_(name), + time_(time.InMicroseconds()), + count_(count), + time_percent_(100), + count_percent_(100) {} + + bool operator<(const Entry& other) const { + if (time_ < other.time_) return true; + if (time_ > other.time_) return false; + return count_ < other.count_; + } + + V8_NOINLINE void Print(std::ostream& os) { + os.precision(2); + os << std::fixed << std::setprecision(2); + os << std::setw(50) << name_; + os << std::setw(10) << static_cast<double>(time_) / 1000 << "ms "; + os << std::setw(6) << time_percent_ << "%"; + os << std::setw(10) << count_ << " "; + os << std::setw(6) << count_percent_ << "%"; + os << std::endl; + } + + V8_NOINLINE void SetTotal(base::TimeDelta total_time, + uint64_t total_count) { + if (total_time.InMicroseconds() == 0) { + time_percent_ = 0; + } else { + time_percent_ = 100.0 * time_ / total_time.InMicroseconds(); + } + count_percent_ = 100.0 * count_ / total_count; + } + + private: + const char* name_; + int64_t time_; + uint64_t count_; + double time_percent_; + double count_percent_; + }; + + uint64_t total_call_count = 0; + base::TimeDelta total_time; + std::vector<Entry> entries; +}; + +void RuntimeCallCounter::Reset() { + count_ = 0; + time_ = 0; +} + +void RuntimeCallCounter::Dump(v8::tracing::TracedValue* value) { + value->BeginArray(name_); + value->AppendDouble(count_); + value->AppendDouble(time_); + value->EndArray(); +} + +void RuntimeCallCounter::Add(RuntimeCallCounter* other) { + count_ += other->count(); + time_ += other->time().InMicroseconds(); +} + +void RuntimeCallTimer::Snapshot() { + base::TimeTicks now = Now(); + // Pause only / topmost timer in the timer stack. + Pause(now); + // Commit all the timer's elapsed time to the counters. + RuntimeCallTimer* timer = this; + while (timer != nullptr) { + timer->CommitTimeToCounter(); + timer = timer->parent(); + } + Resume(now); +} + +RuntimeCallStats::RuntimeCallStats(ThreadType thread_type) + : in_use_(false), thread_type_(thread_type) { + static const char* const kNames[] = { +#define CALL_BUILTIN_COUNTER(name) "GC_" #name, + FOR_EACH_GC_COUNTER(CALL_BUILTIN_COUNTER) // +#undef CALL_BUILTIN_COUNTER +#define CALL_RUNTIME_COUNTER(name) #name, + FOR_EACH_MANUAL_COUNTER(CALL_RUNTIME_COUNTER) // +#undef CALL_RUNTIME_COUNTER +#define CALL_RUNTIME_COUNTER(name, nargs, ressize) #name, + FOR_EACH_INTRINSIC(CALL_RUNTIME_COUNTER) // +#undef CALL_RUNTIME_COUNTER +#define CALL_BUILTIN_COUNTER(name) #name, + BUILTIN_LIST_C(CALL_BUILTIN_COUNTER) // +#undef CALL_BUILTIN_COUNTER +#define CALL_BUILTIN_COUNTER(name) "API_" #name, + FOR_EACH_API_COUNTER(CALL_BUILTIN_COUNTER) // +#undef CALL_BUILTIN_COUNTER +#define CALL_BUILTIN_COUNTER(name) #name, + FOR_EACH_HANDLER_COUNTER(CALL_BUILTIN_COUNTER) // +#undef CALL_BUILTIN_COUNTER +#define THREAD_SPECIFIC_COUNTER(name) #name, + FOR_EACH_THREAD_SPECIFIC_COUNTER(THREAD_SPECIFIC_COUNTER) // +#undef THREAD_SPECIFIC_COUNTER + }; + for (int i = 0; i < kNumberOfCounters; i++) { + this->counters_[i] = RuntimeCallCounter(kNames[i]); + } + if (FLAG_rcs_cpu_time) { + CHECK(base::ThreadTicks::IsSupported()); + base::ThreadTicks::WaitUntilInitialized(); + RuntimeCallTimer::Now = &RuntimeCallTimer::NowCPUTime; + } +} + +namespace { +constexpr RuntimeCallCounterId FirstCounter(RuntimeCallCounterId first, ...) { + return first; +} + +#define THREAD_SPECIFIC_COUNTER(name) k##name, +constexpr RuntimeCallCounterId kFirstThreadVariantCounter = + FirstCounter(FOR_EACH_THREAD_SPECIFIC_COUNTER(THREAD_SPECIFIC_COUNTER) 0); +#undef THREAD_SPECIFIC_COUNTER + +#define THREAD_SPECIFIC_COUNTER(name) +1 +constexpr int kThreadVariantCounterCount = + 0 FOR_EACH_THREAD_SPECIFIC_COUNTER(THREAD_SPECIFIC_COUNTER); +#undef THREAD_SPECIFIC_COUNTER + +constexpr auto kLastThreadVariantCounter = static_cast<RuntimeCallCounterId>( + kFirstThreadVariantCounter + kThreadVariantCounterCount - 1); +} // namespace + +bool RuntimeCallStats::HasThreadSpecificCounterVariants( + RuntimeCallCounterId id) { + // Check that it's in the range of the thread-specific variant counters and + // also that it's one of the background counters. + return id >= kFirstThreadVariantCounter && id <= kLastThreadVariantCounter; +} + +bool RuntimeCallStats::IsBackgroundThreadSpecificVariant( + RuntimeCallCounterId id) { + return HasThreadSpecificCounterVariants(id) && + (id - kFirstThreadVariantCounter) % 2 == 1; +} + +void RuntimeCallStats::Enter(RuntimeCallTimer* timer, + RuntimeCallCounterId counter_id) { + DCHECK(IsCalledOnTheSameThread()); + RuntimeCallCounter* counter = GetCounter(counter_id); + DCHECK_NOT_NULL(counter->name()); + timer->Start(counter, current_timer()); + current_timer_.SetValue(timer); + current_counter_.SetValue(counter); +} + +void RuntimeCallStats::Leave(RuntimeCallTimer* timer) { + DCHECK(IsCalledOnTheSameThread()); + RuntimeCallTimer* stack_top = current_timer(); + if (stack_top == nullptr) return; // Missing timer is a result of Reset(). + CHECK(stack_top == timer); + current_timer_.SetValue(timer->Stop()); + RuntimeCallTimer* cur_timer = current_timer(); + current_counter_.SetValue(cur_timer ? cur_timer->counter() : nullptr); +} + +void RuntimeCallStats::Add(RuntimeCallStats* other) { + for (int i = 0; i < kNumberOfCounters; i++) { + GetCounter(i)->Add(other->GetCounter(i)); + } +} + +// static +void RuntimeCallStats::CorrectCurrentCounterId(RuntimeCallCounterId counter_id, + CounterMode mode) { + DCHECK(IsCalledOnTheSameThread()); + if (mode == RuntimeCallStats::CounterMode::kThreadSpecific) { + counter_id = CounterIdForThread(counter_id); + } + DCHECK(IsCounterAppropriateForThread(counter_id)); + + RuntimeCallTimer* timer = current_timer(); + if (timer == nullptr) return; + RuntimeCallCounter* counter = GetCounter(counter_id); + timer->set_counter(counter); + current_counter_.SetValue(counter); +} + +bool RuntimeCallStats::IsCalledOnTheSameThread() { + if (thread_id_.IsValid()) return thread_id_ == ThreadId::Current(); + thread_id_ = ThreadId::Current(); + return true; +} + +void RuntimeCallStats::Print() { + StdoutStream os; + Print(os); +} + +void RuntimeCallStats::Print(std::ostream& os) { + RuntimeCallStatEntries entries; + if (current_timer_.Value() != nullptr) { + current_timer_.Value()->Snapshot(); + } + for (int i = 0; i < kNumberOfCounters; i++) { + entries.Add(GetCounter(i)); + } + entries.Print(os); +} + +void RuntimeCallStats::EnumerateCounters( + debug::RuntimeCallCounterCallback callback) { + if (current_timer_.Value() != nullptr) { + current_timer_.Value()->Snapshot(); + } + for (int i = 0; i < kNumberOfCounters; i++) { + RuntimeCallCounter* counter = GetCounter(i); + callback(counter->name(), counter->count(), counter->time()); + } +} + +void RuntimeCallStats::Reset() { + if (V8_LIKELY(!TracingFlags::is_runtime_stats_enabled())) return; + + // In tracing, we only what to trace the time spent on top level trace events, + // if runtime counter stack is not empty, we should clear the whole runtime + // counter stack, and then reset counters so that we can dump counters into + // top level trace events accurately. + while (current_timer_.Value()) { + current_timer_.SetValue(current_timer_.Value()->Stop()); + } + + for (int i = 0; i < kNumberOfCounters; i++) { + GetCounter(i)->Reset(); + } + + in_use_ = true; +} + +void RuntimeCallStats::Dump(v8::tracing::TracedValue* value) { + for (int i = 0; i < kNumberOfCounters; i++) { + if (GetCounter(i)->count() > 0) GetCounter(i)->Dump(value); + } + in_use_ = false; +} + +WorkerThreadRuntimeCallStats::WorkerThreadRuntimeCallStats() + : isolate_thread_id_(ThreadId::Current()) {} + +WorkerThreadRuntimeCallStats::~WorkerThreadRuntimeCallStats() { + if (tls_key_) base::Thread::DeleteThreadLocalKey(*tls_key_); +} + +base::Thread::LocalStorageKey WorkerThreadRuntimeCallStats::GetKey() { + base::MutexGuard lock(&mutex_); + DCHECK(TracingFlags::is_runtime_stats_enabled()); + if (!tls_key_) tls_key_ = base::Thread::CreateThreadLocalKey(); + return *tls_key_; +} + +RuntimeCallStats* WorkerThreadRuntimeCallStats::NewTable() { + DCHECK(TracingFlags::is_runtime_stats_enabled()); + // Never create a new worker table on the isolate's main thread. + DCHECK_NE(ThreadId::Current(), isolate_thread_id_); + std::unique_ptr<RuntimeCallStats> new_table = + std::make_unique<RuntimeCallStats>(RuntimeCallStats::kWorkerThread); + RuntimeCallStats* result = new_table.get(); + + base::MutexGuard lock(&mutex_); + tables_.push_back(std::move(new_table)); + return result; +} + +void WorkerThreadRuntimeCallStats::AddToMainTable( + RuntimeCallStats* main_call_stats) { + base::MutexGuard lock(&mutex_); + for (auto& worker_stats : tables_) { + DCHECK_NE(main_call_stats, worker_stats.get()); + main_call_stats->Add(worker_stats.get()); + worker_stats->Reset(); + } +} + +WorkerThreadRuntimeCallStatsScope::WorkerThreadRuntimeCallStatsScope( + WorkerThreadRuntimeCallStats* worker_stats) + : table_(nullptr) { + if (V8_LIKELY(!TracingFlags::is_runtime_stats_enabled())) return; + + table_ = reinterpret_cast<RuntimeCallStats*>( + base::Thread::GetThreadLocal(worker_stats->GetKey())); + if (table_ == nullptr) { + table_ = worker_stats->NewTable(); + base::Thread::SetThreadLocal(worker_stats->GetKey(), table_); + } + + if ((TracingFlags::runtime_stats.load(std::memory_order_relaxed) & + v8::tracing::TracingCategoryObserver::ENABLED_BY_TRACING)) { + table_->Reset(); + } +} + +WorkerThreadRuntimeCallStatsScope::~WorkerThreadRuntimeCallStatsScope() { + if (V8_LIKELY(table_ == nullptr)) return; + + if ((TracingFlags::runtime_stats.load(std::memory_order_relaxed) & + v8::tracing::TracingCategoryObserver::ENABLED_BY_TRACING)) { + auto value = v8::tracing::TracedValue::Create(); + table_->Dump(value.get()); + TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("v8.runtime_stats"), + "V8.RuntimeStats", TRACE_EVENT_SCOPE_THREAD, + "runtime-call-stats", std::move(value)); + } +} + +} // namespace internal +} // namespace v8 + +#endif // V8_RUNTIME_CALL_STATS diff --git a/deps/v8/src/logging/runtime-call-stats.h b/deps/v8/src/logging/runtime-call-stats.h new file mode 100644 index 0000000000..7593170d86 --- /dev/null +++ b/deps/v8/src/logging/runtime-call-stats.h @@ -0,0 +1,763 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef V8_LOGGING_RUNTIME_CALL_STATS_H_ +#define V8_LOGGING_RUNTIME_CALL_STATS_H_ + +#include "include/v8.h" + +#ifdef V8_RUNTIME_CALL_STATS + +#include "src/base/atomic-utils.h" +#include "src/base/optional.h" +#include "src/base/platform/elapsed-timer.h" +#include "src/base/platform/time.h" +#include "src/builtins/builtins-definitions.h" +#include "src/debug/debug-interface.h" +#include "src/execution/thread-id.h" +#include "src/init/heap-symbols.h" +#include "src/logging/tracing-flags.h" +#include "src/runtime/runtime.h" +#include "src/tracing/traced-value.h" +#include "src/tracing/tracing-category-observer.h" + +#endif // V8_RUNTIME_CALL_STATS + +namespace v8 { +namespace internal { + +#ifdef V8_RUNTIME_CALL_STATS + +#define RCS_SCOPE(...) \ + v8::internal::RuntimeCallTimerScope rcs_timer_scope(__VA_ARGS__) + +class RuntimeCallCounter final { + public: + RuntimeCallCounter() : RuntimeCallCounter(nullptr) {} + explicit RuntimeCallCounter(const char* name) + : name_(name), count_(0), time_(0) {} + V8_NOINLINE void Reset(); + V8_NOINLINE void Dump(v8::tracing::TracedValue* value); + void Add(RuntimeCallCounter* other); + + const char* name() const { return name_; } + int64_t count() const { return count_; } + base::TimeDelta time() const { + return base::TimeDelta::FromMicroseconds(time_); + } + void Increment() { count_++; } + void Add(base::TimeDelta delta) { time_ += delta.InMicroseconds(); } + + private: + friend class RuntimeCallStats; + + const char* name_; + int64_t count_; + // Stored as int64_t so that its initialization can be deferred. + int64_t time_; +}; + +// RuntimeCallTimer is used to keep track of the stack of currently active +// timers used for properly measuring the own time of a RuntimeCallCounter. +class RuntimeCallTimer final { + public: + RuntimeCallCounter* counter() { return counter_; } + void set_counter(RuntimeCallCounter* counter) { counter_ = counter; } + RuntimeCallTimer* parent() const { return parent_.Value(); } + void set_parent(RuntimeCallTimer* timer) { parent_.SetValue(timer); } + const char* name() const { return counter_->name(); } + + inline bool IsStarted() const { return start_ticks_ != base::TimeTicks(); } + + inline void Start(RuntimeCallCounter* counter, RuntimeCallTimer* parent) { + DCHECK(!IsStarted()); + counter_ = counter; + parent_.SetValue(parent); + if (TracingFlags::runtime_stats.load(std::memory_order_relaxed) == + v8::tracing::TracingCategoryObserver::ENABLED_BY_SAMPLING) { + return; + } + base::TimeTicks now = RuntimeCallTimer::Now(); + if (parent) parent->Pause(now); + Resume(now); + DCHECK(IsStarted()); + } + + void Snapshot(); + + inline RuntimeCallTimer* Stop() { + if (!IsStarted()) return parent(); + base::TimeTicks now = RuntimeCallTimer::Now(); + Pause(now); + counter_->Increment(); + CommitTimeToCounter(); + + RuntimeCallTimer* parent_timer = parent(); + if (parent_timer) { + parent_timer->Resume(now); + } + return parent_timer; + } + + // Make the time source configurable for testing purposes. + V8_EXPORT_PRIVATE static base::TimeTicks (*Now)(); + + // Helper to switch over to CPU time. + static base::TimeTicks NowCPUTime(); + + private: + inline void Pause(base::TimeTicks now) { + DCHECK(IsStarted()); + elapsed_ += (now - start_ticks_); + start_ticks_ = base::TimeTicks(); + } + + inline void Resume(base::TimeTicks now) { + DCHECK(!IsStarted()); + start_ticks_ = now; + } + + inline void CommitTimeToCounter() { + counter_->Add(elapsed_); + elapsed_ = base::TimeDelta(); + } + + RuntimeCallCounter* counter_ = nullptr; + base::AtomicValue<RuntimeCallTimer*> parent_; + base::TimeTicks start_ticks_; + base::TimeDelta elapsed_; +}; + +#define FOR_EACH_GC_COUNTER(V) \ + TRACER_SCOPES(V) \ + TRACER_BACKGROUND_SCOPES(V) + +#define FOR_EACH_API_COUNTER(V) \ + V(AccessorPair_New) \ + V(ArrayBuffer_Cast) \ + V(ArrayBuffer_Detach) \ + V(ArrayBuffer_New) \ + V(ArrayBuffer_NewBackingStore) \ + V(ArrayBuffer_BackingStore_Reallocate) \ + V(Array_CloneElementAt) \ + V(Array_New) \ + V(BigInt64Array_New) \ + V(BigInt_NewFromWords) \ + V(BigIntObject_BigIntValue) \ + V(BigIntObject_New) \ + V(BigUint64Array_New) \ + V(BooleanObject_BooleanValue) \ + V(BooleanObject_New) \ + V(Context_New) \ + V(Context_NewRemoteContext) \ + V(DataView_New) \ + V(Date_New) \ + V(Date_NumberValue) \ + V(Debug_Call) \ + V(debug_GetPrivateMembers) \ + V(Error_New) \ + V(External_New) \ + V(Float32Array_New) \ + V(Float64Array_New) \ + V(Function_Call) \ + V(Function_New) \ + V(Function_FunctionProtoToString) \ + V(Function_NewInstance) \ + V(FunctionTemplate_GetFunction) \ + V(FunctionTemplate_New) \ + V(FunctionTemplate_NewRemoteInstance) \ + V(FunctionTemplate_NewWithCache) \ + V(FunctionTemplate_NewWithFastHandler) \ + V(Int16Array_New) \ + V(Int32Array_New) \ + V(Int8Array_New) \ + V(Isolate_DateTimeConfigurationChangeNotification) \ + V(Isolate_LocaleConfigurationChangeNotification) \ + V(JSON_Parse) \ + V(JSON_Stringify) \ + V(Map_AsArray) \ + V(Map_Clear) \ + V(Map_Delete) \ + V(Map_Get) \ + V(Map_Has) \ + V(Map_New) \ + V(Map_Set) \ + V(Message_GetEndColumn) \ + V(Message_GetLineNumber) \ + V(Message_GetSourceLine) \ + V(Message_GetStartColumn) \ + V(Module_Evaluate) \ + V(Module_InstantiateModule) \ + V(Module_SetSyntheticModuleExport) \ + V(NumberObject_New) \ + V(NumberObject_NumberValue) \ + V(Object_CallAsConstructor) \ + V(Object_CallAsFunction) \ + V(Object_CreateDataProperty) \ + V(Object_DefineOwnProperty) \ + V(Object_DefineProperty) \ + V(Object_Delete) \ + V(Object_DeleteProperty) \ + V(Object_ForceSet) \ + V(Object_Get) \ + V(Object_GetOwnPropertyDescriptor) \ + V(Object_GetOwnPropertyNames) \ + V(Object_GetPropertyAttributes) \ + V(Object_GetPropertyNames) \ + V(Object_GetRealNamedProperty) \ + V(Object_GetRealNamedPropertyAttributes) \ + V(Object_GetRealNamedPropertyAttributesInPrototypeChain) \ + V(Object_GetRealNamedPropertyInPrototypeChain) \ + V(Object_Has) \ + V(Object_HasOwnProperty) \ + V(Object_HasRealIndexedProperty) \ + V(Object_HasRealNamedCallbackProperty) \ + V(Object_HasRealNamedProperty) \ + V(Object_IsCodeLike) \ + V(Object_New) \ + V(Object_ObjectProtoToString) \ + V(Object_Set) \ + V(Object_SetAccessor) \ + V(Object_SetIntegrityLevel) \ + V(Object_SetPrivate) \ + V(Object_SetPrototype) \ + V(ObjectTemplate_New) \ + V(ObjectTemplate_NewInstance) \ + V(Object_ToArrayIndex) \ + V(Object_ToBigInt) \ + V(Object_ToDetailString) \ + V(Object_ToInt32) \ + V(Object_ToInteger) \ + V(Object_ToNumber) \ + V(Object_ToObject) \ + V(Object_ToString) \ + V(Object_ToUint32) \ + V(Persistent_New) \ + V(Private_New) \ + V(Promise_Catch) \ + V(Promise_Chain) \ + V(Promise_HasRejectHandler) \ + V(Promise_Resolver_New) \ + V(Promise_Resolver_Reject) \ + V(Promise_Resolver_Resolve) \ + V(Promise_Result) \ + V(Promise_Status) \ + V(Promise_Then) \ + V(Proxy_New) \ + V(RangeError_New) \ + V(ReferenceError_New) \ + V(RegExp_Exec) \ + V(RegExp_New) \ + V(ScriptCompiler_Compile) \ + V(ScriptCompiler_CompileFunctionInContext) \ + V(ScriptCompiler_CompileUnbound) \ + V(Script_Run) \ + V(Set_Add) \ + V(Set_AsArray) \ + V(Set_Clear) \ + V(Set_Delete) \ + V(Set_Has) \ + V(Set_New) \ + V(SharedArrayBuffer_New) \ + V(SharedArrayBuffer_NewBackingStore) \ + V(String_Concat) \ + V(String_NewExternalOneByte) \ + V(String_NewExternalTwoByte) \ + V(String_NewFromOneByte) \ + V(String_NewFromTwoByte) \ + V(String_NewFromUtf8) \ + V(String_NewFromUtf8Literal) \ + V(StringObject_New) \ + V(StringObject_StringValue) \ + V(String_Write) \ + V(String_WriteUtf8) \ + V(Symbol_New) \ + V(SymbolObject_New) \ + V(SymbolObject_SymbolValue) \ + V(SyntaxError_New) \ + V(TracedGlobal_New) \ + V(TryCatch_StackTrace) \ + V(TypeError_New) \ + V(Uint16Array_New) \ + V(Uint32Array_New) \ + V(Uint8Array_New) \ + V(Uint8ClampedArray_New) \ + V(UnboundScript_GetId) \ + V(UnboundScript_GetLineNumber) \ + V(UnboundScript_GetName) \ + V(UnboundScript_GetSourceMappingURL) \ + V(UnboundScript_GetSourceURL) \ + V(ValueDeserializer_ReadHeader) \ + V(ValueDeserializer_ReadValue) \ + V(ValueSerializer_WriteValue) \ + V(Value_Equals) \ + V(Value_InstanceOf) \ + V(Value_Int32Value) \ + V(Value_IntegerValue) \ + V(Value_NumberValue) \ + V(Value_TypeOf) \ + V(Value_Uint32Value) \ + V(WasmCompileError_New) \ + V(WasmLinkError_New) \ + V(WasmRuntimeError_New) \ + V(WeakMap_Get) \ + V(WeakMap_New) \ + V(WeakMap_Set) + +#define ADD_THREAD_SPECIFIC_COUNTER(V, Prefix, Suffix) \ + V(Prefix##Suffix) \ + V(Prefix##Background##Suffix) + +#define FOR_EACH_THREAD_SPECIFIC_COUNTER(V) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Compile, Analyse) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Compile, Eval) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Compile, Function) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Compile, Ignition) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Compile, IgnitionFinalization) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Compile, RewriteReturnResult) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Compile, ScopeAnalysis) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Compile, Script) \ + \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, AllocateFPRegisters) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, AllocateGeneralRegisters) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, AssembleCode) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, AssignSpillSlots) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, BuildLiveRangeBundles) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, BuildLiveRanges) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, BytecodeGraphBuilder) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, CommitAssignment) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, ConnectRanges) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, ControlFlowOptimization) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, CSAEarlyOptimization) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, CSAOptimization) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, DecideSpillingMode) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, DecompressionOptimization) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, EarlyOptimization) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, EarlyTrimming) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, EffectLinearization) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, EscapeAnalysis) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, FinalizeCode) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, FrameElision) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, GenericLowering) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, Inlining) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, JumpThreading) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, MidTierPopulateReferenceMaps) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, MidTierRegisterAllocator) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, MidTierRegisterOutputDefinition) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, MidTierSpillSlotAllocator) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, LateGraphTrimming) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, LateOptimization) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, LoadElimination) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, LocateSpillSlots) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, LoopExitElimination) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, LoopPeeling) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, MachineOperatorOptimization) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, MeetRegisterConstraints) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, MemoryOptimization) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, OptimizeMoves) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, PopulatePointerMaps) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, PrintGraph) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, ResolveControlFlow) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, ResolvePhis) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, \ + ScheduledEffectControlLinearization) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, ScheduledMachineLowering) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, Scheduling) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, SelectInstructions) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, SimplifiedLowering) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, StoreStoreElimination) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, TypeAssertions) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, TypedLowering) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, Typer) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, Untyper) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, VerifyGraph) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, WasmBaseOptimization) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, WasmInlining) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Optimize, WasmLoopUnrolling) \ + \ + ADD_THREAD_SPECIFIC_COUNTER(V, Parse, ArrowFunctionLiteral) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Parse, FunctionLiteral) \ + ADD_THREAD_SPECIFIC_COUNTER(V, Parse, Program) \ + ADD_THREAD_SPECIFIC_COUNTER(V, PreParse, ArrowFunctionLiteral) \ + ADD_THREAD_SPECIFIC_COUNTER(V, PreParse, WithVariableResolution) + +#define FOR_EACH_MANUAL_COUNTER(V) \ + V(AccessorGetterCallback) \ + V(AccessorSetterCallback) \ + V(ArrayLengthGetter) \ + V(ArrayLengthSetter) \ + V(BoundFunctionLengthGetter) \ + V(BoundFunctionNameGetter) \ + V(CodeGenerationFromStringsCallbacks) \ + V(CompileBackgroundCompileTask) \ + V(CompileBaseline) \ + V(CompileBaselineVisit) \ + V(CompileBaselinePreVisit) \ + V(CompileCollectSourcePositions) \ + V(CompileDeserialize) \ + V(CompileEnqueueOnDispatcher) \ + V(CompileFinalizeBackgroundCompileTask) \ + V(CompileFinishNowOnDispatcher) \ + V(CompileGetFromOptimizedCodeMap) \ + V(CompilePublishBackgroundFinalization) \ + V(CompileSerialize) \ + V(CompileWaitForDispatcher) \ + V(ConfigureInstance) \ + V(CreateApiFunction) \ + V(DeoptimizeCode) \ + V(DeserializeContext) \ + V(DeserializeIsolate) \ + V(FinalizationRegistryCleanupFromTask) \ + V(FunctionCallback) \ + V(FunctionLengthGetter) \ + V(FunctionPrototypeGetter) \ + V(FunctionPrototypeSetter) \ + V(GC_Custom_AllAvailableGarbage) \ + V(GC_Custom_IncrementalMarkingObserver) \ + V(GC_Custom_SlowAllocateRaw) \ + V(GCEpilogueCallback) \ + V(GCPrologueCallback) \ + V(Genesis) \ + V(GetCompatibleReceiver) \ + V(GetMoreDataCallback) \ + V(IndexedDefinerCallback) \ + V(IndexedDeleterCallback) \ + V(IndexedDescriptorCallback) \ + V(IndexedEnumeratorCallback) \ + V(IndexedGetterCallback) \ + V(IndexedQueryCallback) \ + V(IndexedSetterCallback) \ + V(InstantiateFunction) \ + V(InstantiateObject) \ + V(Invoke) \ + V(InvokeApiFunction) \ + V(InvokeApiInterruptCallbacks) \ + V(IsCompatibleReceiver) \ + V(IsCompatibleReceiverMap) \ + V(IsTemplateFor) \ + V(JS_Execution) \ + V(Map_SetPrototype) \ + V(Map_TransitionToAccessorProperty) \ + V(Map_TransitionToDataProperty) \ + V(MessageListenerCallback) \ + V(NamedDefinerCallback) \ + V(NamedDeleterCallback) \ + V(NamedDescriptorCallback) \ + V(NamedEnumeratorCallback) \ + V(NamedGetterCallback) \ + V(NamedQueryCallback) \ + V(NamedSetterCallback) \ + V(Object_DeleteProperty) \ + V(ObjectVerify) \ + V(OptimizeBackgroundDispatcherJob) \ + V(OptimizeCode) \ + V(OptimizeConcurrentFinalize) \ + V(OptimizeConcurrentPrepare) \ + V(OptimizeFinalizePipelineJob) \ + V(OptimizeHeapBrokerInitialization) \ + V(OptimizeNonConcurrent) \ + V(OptimizeSerialization) \ + V(OptimizeSerializeMetadata) \ + V(ParseEval) \ + V(ParseFunction) \ + V(PropertyCallback) \ + V(PrototypeMap_TransitionToAccessorProperty) \ + V(PrototypeMap_TransitionToDataProperty) \ + V(PrototypeObject_DeleteProperty) \ + V(ReconfigureToDataProperty) \ + V(UpdateProtector) \ + V(StringLengthGetter) \ + V(TestCounter1) \ + V(TestCounter2) \ + V(TestCounter3) + +#define FOR_EACH_HANDLER_COUNTER(V) \ + V(KeyedLoadIC_KeyedLoadSloppyArgumentsStub) \ + V(KeyedLoadIC_LoadElementDH) \ + V(KeyedLoadIC_LoadIndexedInterceptorStub) \ + V(KeyedLoadIC_LoadIndexedStringDH) \ + V(KeyedLoadIC_SlowStub) \ + V(KeyedStoreIC_ElementsTransitionAndStoreStub) \ + V(KeyedStoreIC_KeyedStoreSloppyArgumentsStub) \ + V(KeyedStoreIC_SlowStub) \ + V(KeyedStoreIC_StoreElementStub) \ + V(KeyedStoreIC_StoreFastElementStub) \ + V(LoadGlobalIC_LoadScriptContextField) \ + V(LoadGlobalIC_SlowStub) \ + V(LoadIC_FunctionPrototypeStub) \ + V(LoadIC_HandlerCacheHit_Accessor) \ + V(LoadIC_LoadAccessorDH) \ + V(LoadIC_LoadAccessorFromPrototypeDH) \ + V(LoadIC_LoadApiGetterFromPrototypeDH) \ + V(LoadIC_LoadCallback) \ + V(LoadIC_LoadConstantDH) \ + V(LoadIC_LoadConstantFromPrototypeDH) \ + V(LoadIC_LoadFieldDH) \ + V(LoadIC_LoadFieldFromPrototypeDH) \ + V(LoadIC_LoadGlobalDH) \ + V(LoadIC_LoadGlobalFromPrototypeDH) \ + V(LoadIC_LoadIntegerIndexedExoticDH) \ + V(LoadIC_LoadInterceptorDH) \ + V(LoadIC_LoadInterceptorFromPrototypeDH) \ + V(LoadIC_LoadNativeDataPropertyDH) \ + V(LoadIC_LoadNativeDataPropertyFromPrototypeDH) \ + V(LoadIC_LoadNonexistentDH) \ + V(LoadIC_LoadNonMaskingInterceptorDH) \ + V(LoadIC_LoadNormalDH) \ + V(LoadIC_LoadNormalFromPrototypeDH) \ + V(LoadIC_NonReceiver) \ + V(LoadIC_SlowStub) \ + V(LoadIC_StringLength) \ + V(LoadIC_StringWrapperLength) \ + V(StoreGlobalIC_SlowStub) \ + V(StoreGlobalIC_StoreScriptContextField) \ + V(StoreIC_HandlerCacheHit_Accessor) \ + V(StoreIC_NonReceiver) \ + V(StoreIC_SlowStub) \ + V(StoreIC_StoreAccessorDH) \ + V(StoreIC_StoreAccessorOnPrototypeDH) \ + V(StoreIC_StoreApiSetterOnPrototypeDH) \ + V(StoreIC_StoreFieldDH) \ + V(StoreIC_StoreGlobalDH) \ + V(StoreIC_StoreGlobalTransitionDH) \ + V(StoreIC_StoreInterceptorStub) \ + V(StoreIC_StoreNativeDataPropertyDH) \ + V(StoreIC_StoreNativeDataPropertyOnPrototypeDH) \ + V(StoreIC_StoreNormalDH) \ + V(StoreIC_StoreTransitionDH) \ + V(StoreInArrayLiteralIC_SlowStub) + +enum RuntimeCallCounterId { +#define CALL_RUNTIME_COUNTER(name) kGC_##name, + FOR_EACH_GC_COUNTER(CALL_RUNTIME_COUNTER) +#undef CALL_RUNTIME_COUNTER +#define CALL_RUNTIME_COUNTER(name) k##name, + FOR_EACH_MANUAL_COUNTER(CALL_RUNTIME_COUNTER) +#undef CALL_RUNTIME_COUNTER +#define CALL_RUNTIME_COUNTER(name, nargs, ressize) kRuntime_##name, + FOR_EACH_INTRINSIC(CALL_RUNTIME_COUNTER) +#undef CALL_RUNTIME_COUNTER +#define CALL_BUILTIN_COUNTER(name) kBuiltin_##name, + BUILTIN_LIST_C(CALL_BUILTIN_COUNTER) +#undef CALL_BUILTIN_COUNTER +#define CALL_BUILTIN_COUNTER(name) kAPI_##name, + FOR_EACH_API_COUNTER(CALL_BUILTIN_COUNTER) +#undef CALL_BUILTIN_COUNTER +#define CALL_BUILTIN_COUNTER(name) kHandler_##name, + FOR_EACH_HANDLER_COUNTER(CALL_BUILTIN_COUNTER) +#undef CALL_BUILTIN_COUNTER +#define THREAD_SPECIFIC_COUNTER(name) k##name, + FOR_EACH_THREAD_SPECIFIC_COUNTER( + THREAD_SPECIFIC_COUNTER) +#undef THREAD_SPECIFIC_COUNTER + kNumberOfCounters, +}; + +class RuntimeCallStats final { + public: + enum ThreadType { kMainIsolateThread, kWorkerThread }; + + // If kExact is chosen the counter will be use as given. With kThreadSpecific, + // if the RuntimeCallStats was created for a worker thread, then the + // background specific version of the counter will be used instead. + enum CounterMode { kExact, kThreadSpecific }; + + explicit V8_EXPORT_PRIVATE RuntimeCallStats(ThreadType thread_type); + + // Starting measuring the time for a function. This will establish the + // connection to the parent counter for properly calculating the own times. + V8_EXPORT_PRIVATE void Enter(RuntimeCallTimer* timer, + RuntimeCallCounterId counter_id); + + // Leave a scope for a measured runtime function. This will properly add + // the time delta to the current_counter and subtract the delta from its + // parent. + V8_EXPORT_PRIVATE void Leave(RuntimeCallTimer* timer); + + // Set counter id for the innermost measurement. It can be used to refine + // event kind when a runtime entry counter is too generic. + V8_EXPORT_PRIVATE void CorrectCurrentCounterId( + RuntimeCallCounterId counter_id, CounterMode mode = kExact); + + V8_EXPORT_PRIVATE void Reset(); + // Add all entries from another stats object. + void Add(RuntimeCallStats* other); + V8_EXPORT_PRIVATE void Print(std::ostream& os); + V8_EXPORT_PRIVATE void Print(); + V8_NOINLINE void Dump(v8::tracing::TracedValue* value); + + V8_EXPORT_PRIVATE void EnumerateCounters( + debug::RuntimeCallCounterCallback callback); + + ThreadId thread_id() const { return thread_id_; } + RuntimeCallTimer* current_timer() { return current_timer_.Value(); } + RuntimeCallCounter* current_counter() { return current_counter_.Value(); } + bool InUse() { return in_use_; } + bool IsCalledOnTheSameThread(); + + V8_EXPORT_PRIVATE bool IsBackgroundThreadSpecificVariant( + RuntimeCallCounterId id); + V8_EXPORT_PRIVATE bool HasThreadSpecificCounterVariants( + RuntimeCallCounterId id); + + // This should only be called for counters with a dual Background variant. If + // on the main thread, this just returns the counter. If on a worker thread, + // it returns Background variant of the counter. + RuntimeCallCounterId CounterIdForThread(RuntimeCallCounterId id) { + DCHECK(HasThreadSpecificCounterVariants(id)); + // All thread specific counters are laid out with the main thread variant + // first followed by the background variant. + return thread_type_ == kWorkerThread + ? static_cast<RuntimeCallCounterId>(id + 1) + : id; + } + + bool IsCounterAppropriateForThread(RuntimeCallCounterId id) { + // TODO(delphick): We should add background-only counters and ensure that + // all counters (not just the thread-specific variants) are only invoked on + // the correct thread. + if (!HasThreadSpecificCounterVariants(id)) return true; + return IsBackgroundThreadSpecificVariant(id) == + (thread_type_ == kWorkerThread); + } + + static const int kNumberOfCounters = + static_cast<int>(RuntimeCallCounterId::kNumberOfCounters); + RuntimeCallCounter* GetCounter(RuntimeCallCounterId counter_id) { + return &counters_[static_cast<int>(counter_id)]; + } + RuntimeCallCounter* GetCounter(int counter_id) { + return &counters_[counter_id]; + } + + private: + // Top of a stack of active timers. + base::AtomicValue<RuntimeCallTimer*> current_timer_; + // Active counter object associated with current timer. + base::AtomicValue<RuntimeCallCounter*> current_counter_; + // Used to track nested tracing scopes. + bool in_use_; + ThreadType thread_type_; + ThreadId thread_id_; + RuntimeCallCounter counters_[kNumberOfCounters]; +}; + +class WorkerThreadRuntimeCallStats final { + public: + WorkerThreadRuntimeCallStats(); + ~WorkerThreadRuntimeCallStats(); + + // Returns the TLS key associated with this WorkerThreadRuntimeCallStats. + base::Thread::LocalStorageKey GetKey(); + + // Returns a new worker thread runtime call stats table managed by this + // WorkerThreadRuntimeCallStats. + RuntimeCallStats* NewTable(); + + // Adds the counters from the worker thread tables to |main_call_stats|. + void AddToMainTable(RuntimeCallStats* main_call_stats); + + private: + base::Mutex mutex_; + std::vector<std::unique_ptr<RuntimeCallStats>> tables_; + base::Optional<base::Thread::LocalStorageKey> tls_key_; + // Since this is for creating worker thread runtime-call stats, record the + // main thread ID to ensure we never create a worker RCS table for the main + // thread. + ThreadId isolate_thread_id_; +}; + +// Creating a WorkerThreadRuntimeCallStatsScope will provide a thread-local +// runtime call stats table, and will dump the table to an immediate trace event +// when it is destroyed. +class V8_NODISCARD WorkerThreadRuntimeCallStatsScope final { + public: + explicit WorkerThreadRuntimeCallStatsScope( + WorkerThreadRuntimeCallStats* off_thread_stats); + ~WorkerThreadRuntimeCallStatsScope(); + + RuntimeCallStats* Get() const { return table_; } + + private: + RuntimeCallStats* table_; +}; + +#define CHANGE_CURRENT_RUNTIME_COUNTER(runtime_call_stats, counter_id) \ + do { \ + if (V8_UNLIKELY(TracingFlags::is_runtime_stats_enabled()) && \ + runtime_call_stats) { \ + runtime_call_stats->CorrectCurrentCounterId(counter_id); \ + } \ + } while (false) + +#define TRACE_HANDLER_STATS(isolate, counter_name) \ + CHANGE_CURRENT_RUNTIME_COUNTER( \ + isolate->counters()->runtime_call_stats(), \ + RuntimeCallCounterId::kHandler_##counter_name) + +// A RuntimeCallTimerScopes wraps around a RuntimeCallTimer to measure the +// the time of C++ scope. +class V8_NODISCARD RuntimeCallTimerScope { + public: + inline RuntimeCallTimerScope(Isolate* isolate, + RuntimeCallCounterId counter_id); + inline RuntimeCallTimerScope(RuntimeCallStats* stats, + RuntimeCallCounterId counter_id, + RuntimeCallStats::CounterMode mode = + RuntimeCallStats::CounterMode::kExact) { + if (V8_LIKELY(!TracingFlags::is_runtime_stats_enabled() || + stats == nullptr)) { + return; + } + stats_ = stats; + if (mode == RuntimeCallStats::CounterMode::kThreadSpecific) { + counter_id = stats->CounterIdForThread(counter_id); + } + + DCHECK(stats->IsCounterAppropriateForThread(counter_id)); + stats_->Enter(&timer_, counter_id); + } + + inline ~RuntimeCallTimerScope() { + if (V8_UNLIKELY(stats_ != nullptr)) { + stats_->Leave(&timer_); + } + } + + RuntimeCallTimerScope(const RuntimeCallTimerScope&) = delete; + RuntimeCallTimerScope& operator=(const RuntimeCallTimerScope&) = delete; + + private: + RuntimeCallStats* stats_ = nullptr; + RuntimeCallTimer timer_; +}; + +#else // RUNTIME_CALL_STATS + +#define RCS_SCOPE(...) +#define TRACE_HANDLER_STATS(...) +#define CHANGE_CURRENT_RUNTIME_COUNTER(...) + +// Create dummy types to limit code changes +class WorkerThreadRuntimeCallStats {}; + +class RuntimeCallStats { + public: + enum ThreadType { kMainIsolateThread, kWorkerThread }; + explicit V8_EXPORT_PRIVATE RuntimeCallStats(ThreadType thread_type) {} +}; + +class WorkerThreadRuntimeCallStatsScope { + public: + explicit WorkerThreadRuntimeCallStatsScope( + WorkerThreadRuntimeCallStats* off_thread_stats) {} + RuntimeCallStats* Get() const { return nullptr; } +}; + +#endif // RUNTIME_CALL_STATS + +} // namespace internal +} // namespace v8 + +#endif // V8_LOGGING_RUNTIME_CALL_STATS_H_ diff --git a/deps/v8/src/numbers/conversions.cc b/deps/v8/src/numbers/conversions.cc index d7c31c2e71..4a018854dd 100644 --- a/deps/v8/src/numbers/conversions.cc +++ b/deps/v8/src/numbers/conversions.cc @@ -182,23 +182,23 @@ enum class Sign { kNegative, kPositive, kNone }; // ES6 18.2.5 parseInt(string, radix) (with NumberParseIntHelper subclass); // and BigInt parsing cases from https://tc39.github.io/proposal-bigint/ // (with StringToBigIntHelper subclass). -template <typename LocalIsolate> +template <typename IsolateT> class StringToIntHelper { public: - StringToIntHelper(LocalIsolate* isolate, Handle<String> subject, int radix) + StringToIntHelper(IsolateT* isolate, Handle<String> subject, int radix) : isolate_(isolate), subject_(subject), radix_(radix) { DCHECK(subject->IsFlat()); } // Used for the StringToBigInt operation. - StringToIntHelper(LocalIsolate* isolate, Handle<String> subject) + StringToIntHelper(IsolateT* isolate, Handle<String> subject) : isolate_(isolate), subject_(subject) { DCHECK(subject->IsFlat()); } // Used for parsing BigInt literals, where the input is a Zone-allocated // buffer of one-byte digits, along with an optional radix prefix. - StringToIntHelper(LocalIsolate* isolate, const uint8_t* subject, int length) + StringToIntHelper(IsolateT* isolate, const uint8_t* subject, int length) : isolate_(isolate), raw_one_byte_subject_(subject), length_(length) {} virtual ~StringToIntHelper() = default; @@ -239,7 +239,7 @@ class StringToIntHelper { return subject_->GetFlatContent(no_gc).ToUC16Vector(); } - LocalIsolate* isolate() { return isolate_; } + IsolateT* isolate() { return isolate_; } int radix() { return radix_; } int cursor() { return cursor_; } int length() { return length_; } @@ -254,7 +254,7 @@ class StringToIntHelper { template <class Char> bool ParseChunkInternal(Char start); - LocalIsolate* isolate_; + IsolateT* isolate_; Handle<String> subject_; const uint8_t* raw_one_byte_subject_ = nullptr; int radix_ = 0; @@ -267,8 +267,8 @@ class StringToIntHelper { State state_ = State::kRunning; }; -template <typename LocalIsolate> -void StringToIntHelper<LocalIsolate>::ParseInt() { +template <typename IsolateT> +void StringToIntHelper<IsolateT>::ParseInt() { { DisallowGarbageCollection no_gc; if (IsOneByte()) { @@ -311,10 +311,10 @@ void StringToIntHelper<LocalIsolate>::ParseInt() { DCHECK_NE(state_, State::kRunning); } -template <typename LocalIsolate> +template <typename IsolateT> template <class Char> -void StringToIntHelper<LocalIsolate>::DetectRadixInternal(Char current, - int length) { +void StringToIntHelper<IsolateT>::DetectRadixInternal(Char current, + int length) { Char start = current; length_ = length; Char end = start + length; @@ -391,9 +391,9 @@ void StringToIntHelper<LocalIsolate>::DetectRadixInternal(Char current, cursor_ = static_cast<int>(current - start); } -template <typename LocalIsolate> +template <typename IsolateT> template <class Char> -bool StringToIntHelper<LocalIsolate>::ParseChunkInternal(Char start) { +bool StringToIntHelper<IsolateT>::ParseChunkInternal(Char start) { const int kChunkSize = 10240; Char current = start + cursor_; Char end = start + length_; @@ -860,14 +860,14 @@ double StringToInt(Isolate* isolate, Handle<String> string, int radix) { return helper.GetResult(); } -template <typename LocalIsolate> -class StringToBigIntHelper : public StringToIntHelper<LocalIsolate> { +template <typename IsolateT> +class StringToBigIntHelper : public StringToIntHelper<IsolateT> { public: enum class Behavior { kStringToBigInt, kLiteral }; // Used for StringToBigInt operation (BigInt constructor and == operator). - StringToBigIntHelper(LocalIsolate* isolate, Handle<String> string) - : StringToIntHelper<LocalIsolate>(isolate, string), + StringToBigIntHelper(IsolateT* isolate, Handle<String> string) + : StringToIntHelper<IsolateT>(isolate, string), behavior_(Behavior::kStringToBigInt) { this->set_allow_binary_and_octal_prefixes(); this->set_disallow_trailing_junk(); @@ -875,8 +875,8 @@ class StringToBigIntHelper : public StringToIntHelper<LocalIsolate> { // Used for parsing BigInt literals, where the input is a buffer of // one-byte ASCII digits, along with an optional radix prefix. - StringToBigIntHelper(LocalIsolate* isolate, const uint8_t* string, int length) - : StringToIntHelper<LocalIsolate>(isolate, string, length), + StringToBigIntHelper(IsolateT* isolate, const uint8_t* string, int length) + : StringToIntHelper<IsolateT>(isolate, string, length), behavior_(Behavior::kLiteral) { this->set_allow_binary_and_octal_prefixes(); } @@ -943,8 +943,8 @@ class StringToBigIntHelper : public StringToIntHelper<LocalIsolate> { Behavior behavior_; }; -template <typename LocalIsolate> -bool StringToBigIntHelper<LocalIsolate>::CheckTermination() { +template <typename IsolateT> +bool StringToBigIntHelper<IsolateT>::CheckTermination() { return false; } @@ -961,9 +961,9 @@ MaybeHandle<BigInt> StringToBigInt(Isolate* isolate, Handle<String> string) { return helper.GetResult(); } -template <typename LocalIsolate> -MaybeHandle<BigInt> BigIntLiteral(LocalIsolate* isolate, const char* string) { - StringToBigIntHelper<LocalIsolate> helper( +template <typename IsolateT> +MaybeHandle<BigInt> BigIntLiteral(IsolateT* isolate, const char* string) { + StringToBigIntHelper<IsolateT> helper( isolate, reinterpret_cast<const uint8_t*>(string), static_cast<int>(strlen(string))); return helper.GetResult(); diff --git a/deps/v8/src/numbers/conversions.h b/deps/v8/src/numbers/conversions.h index d4a09e1b20..935d6f57e2 100644 --- a/deps/v8/src/numbers/conversions.h +++ b/deps/v8/src/numbers/conversions.h @@ -101,9 +101,9 @@ MaybeHandle<BigInt> StringToBigInt(Isolate* isolate, Handle<String> string); // 0x -> hex // 0o -> octal // 0b -> binary -template <typename LocalIsolate> +template <typename IsolateT> EXPORT_TEMPLATE_DECLARE(V8_EXPORT_PRIVATE) -MaybeHandle<BigInt> BigIntLiteral(LocalIsolate* isolate, const char* string); +MaybeHandle<BigInt> BigIntLiteral(IsolateT* isolate, const char* string); const int kDoubleToCStringMinBufferSize = 100; diff --git a/deps/v8/src/numbers/dtoa.h b/deps/v8/src/numbers/dtoa.h index da67c180e8..cf540f1213 100644 --- a/deps/v8/src/numbers/dtoa.h +++ b/deps/v8/src/numbers/dtoa.h @@ -23,9 +23,14 @@ enum DtoaMode { DTOA_PRECISION }; -// The maximal length of digits a double can have in base 10. -// Note that DoubleToAscii null-terminates its input. So the given buffer should -// be at least kBase10MaximalLength + 1 characters long. +// The maximal length of digits a double can have in base 10 as returned by +// 'DoubleToAscii'. This does neither include sign, decimal point nor exponent. +// For example DoubleToAscii(-3.5844466002796428e+298, ..., buffer, ...) will +// fill buffer with the string "35844466002796428", while sign and decimal point +// position will be provided through additional output arguments. +// kBase10MaximalLength refers to the maximal length of this string. Note that +// DoubleToAscii null-terminates its input. So the given buffer should be at +// least kBase10MaximalLength + 1 characters long. const int kBase10MaximalLength = 17; // Converts the given double 'v' to ASCII. diff --git a/deps/v8/src/objects/all-objects-inl.h b/deps/v8/src/objects/all-objects-inl.h index 78c239fd77..5a78cefc8d 100644 --- a/deps/v8/src/objects/all-objects-inl.h +++ b/deps/v8/src/objects/all-objects-inl.h @@ -52,6 +52,7 @@ #include "src/objects/lookup-inl.h" #include "src/objects/map-inl.h" #include "src/objects/maybe-object-inl.h" +#include "src/objects/megadom-handler-inl.h" #include "src/objects/microtask-inl.h" #include "src/objects/module-inl.h" #include "src/objects/name-inl.h" diff --git a/deps/v8/src/objects/allocation-site-inl.h b/deps/v8/src/objects/allocation-site-inl.h index d9911bc826..68e91e68a5 100644 --- a/deps/v8/src/objects/allocation-site-inl.h +++ b/deps/v8/src/objects/allocation-site-inl.h @@ -27,6 +27,8 @@ CAST_ACCESSOR(AllocationSite) ACCESSORS(AllocationSite, transition_info_or_boilerplate, Object, kTransitionInfoOrBoilerplateOffset) +RELEASE_ACQUIRE_ACCESSORS(AllocationSite, transition_info_or_boilerplate, + Object, kTransitionInfoOrBoilerplateOffset) ACCESSORS(AllocationSite, nested_site, Object, kNestedSiteOffset) INT32_ACCESSORS(AllocationSite, pretenure_data, kPretenureDataOffset) INT32_ACCESSORS(AllocationSite, pretenure_create_count, @@ -41,8 +43,14 @@ JSObject AllocationSite::boilerplate() const { return JSObject::cast(transition_info_or_boilerplate()); } -void AllocationSite::set_boilerplate(JSObject object, WriteBarrierMode mode) { - set_transition_info_or_boilerplate(object, mode); +JSObject AllocationSite::boilerplate(AcquireLoadTag tag) const { + DCHECK(PointsToLiteral()); + return JSObject::cast(transition_info_or_boilerplate(tag)); +} + +void AllocationSite::set_boilerplate(JSObject value, ReleaseStoreTag tag, + WriteBarrierMode mode) { + set_transition_info_or_boilerplate(value, tag, mode); } int AllocationSite::transition_info() const { diff --git a/deps/v8/src/objects/allocation-site.h b/deps/v8/src/objects/allocation-site.h index 437876d94c..549e82a4da 100644 --- a/deps/v8/src/objects/allocation-site.h +++ b/deps/v8/src/objects/allocation-site.h @@ -40,7 +40,9 @@ class AllocationSite : public Struct { // Contains either a Smi-encoded bitfield or a boilerplate. If it's a Smi the // AllocationSite is for a constructed Array. DECL_ACCESSORS(transition_info_or_boilerplate, Object) - DECL_ACCESSORS(boilerplate, JSObject) + DECL_RELEASE_ACQUIRE_ACCESSORS(transition_info_or_boilerplate, Object) + DECL_GETTER(boilerplate, JSObject) + DECL_RELEASE_ACQUIRE_ACCESSORS(boilerplate, JSObject) DECL_INT_ACCESSORS(transition_info) // nested_site threads a list of sites that represent nested literals @@ -68,9 +70,9 @@ class AllocationSite : public Struct { bool IsNested(); // transition_info bitfields, for constructed array transition info. - using ElementsKindBits = base::BitField<ElementsKind, 0, 5>; - using DoNotInlineBit = base::BitField<bool, 5, 1>; - // Unused bits 6-30. + using ElementsKindBits = base::BitField<ElementsKind, 0, 6>; + using DoNotInlineBit = base::BitField<bool, 6, 1>; + // Unused bits 7-30. // Bitfields for pretenure_data using MementoFoundCountBits = base::BitField<int, 0, 26>; diff --git a/deps/v8/src/objects/api-callbacks.h b/deps/v8/src/objects/api-callbacks.h index f5d81dd986..a55ca5eb62 100644 --- a/deps/v8/src/objects/api-callbacks.h +++ b/deps/v8/src/objects/api-callbacks.h @@ -64,6 +64,8 @@ class AccessorInfo : public TorqueGeneratedAccessorInfo<AccessorInfo, Struct> { static int AppendUnique(Isolate* isolate, Handle<Object> descriptors, Handle<FixedArray> array, int valid_descriptors); + DECL_PRINTER(AccessorInfo) + private: inline bool HasExpectedReceiverType(); diff --git a/deps/v8/src/objects/arguments.tq b/deps/v8/src/objects/arguments.tq index b65464688a..6f8e02fdbc 100644 --- a/deps/v8/src/objects/arguments.tq +++ b/deps/v8/src/objects/arguments.tq @@ -80,7 +80,7 @@ extern shape JSStrictArgumentsObject extends JSArgumentsObject { class SloppyArgumentsElements extends FixedArrayBase { context: Context; arguments: FixedArray|NumberDictionary; - @relaxedRead mapped_entries[length]: Smi|TheHole; + @cppRelaxedLoad mapped_entries[length]: Smi|TheHole; } macro NewSloppyArgumentsElements<Iterator: type>( diff --git a/deps/v8/src/objects/backing-store.cc b/deps/v8/src/objects/backing-store.cc index 08288ef62c..77eaf3a722 100644 --- a/deps/v8/src/objects/backing-store.cc +++ b/deps/v8/src/objects/backing-store.cc @@ -37,6 +37,14 @@ namespace { constexpr size_t kPlatformMaxPages = std::numeric_limits<size_t>::max() / wasm::kWasmPageSize; +constexpr uint64_t kNegativeGuardSize = uint64_t{2} * GB; + +#if V8_TARGET_ARCH_64_BIT +constexpr uint64_t kFullGuardSize = uint64_t{10} * GB; +#endif + +#endif // V8_ENABLE_WEBASSEMBLY + #if V8_TARGET_ARCH_MIPS64 // MIPS64 has a user space of 2^40 bytes on most processors, // address space limits needs to be smaller. @@ -50,12 +58,6 @@ constexpr size_t kAddressSpaceLimit = 0x10100000000L; // 1 TiB + 4 GiB constexpr size_t kAddressSpaceLimit = 0xC0000000; // 3 GiB #endif -constexpr uint64_t kNegativeGuardSize = uint64_t{2} * GB; - -#if V8_TARGET_ARCH_64_BIT -constexpr uint64_t kFullGuardSize = uint64_t{10} * GB; -#endif - std::atomic<uint64_t> reserved_address_space_{0}; // Allocation results are reported to UMA @@ -75,7 +77,7 @@ enum class AllocationStatus { base::AddressRegion GetReservedRegion(bool has_guard_regions, void* buffer_start, size_t byte_capacity) { -#if V8_TARGET_ARCH_64_BIT +#if V8_TARGET_ARCH_64_BIT && V8_ENABLE_WEBASSEMBLY if (has_guard_regions) { // Guard regions always look like this: // |xxx(2GiB)xxx|.......(4GiB)..xxxxx|xxxxxx(4GiB)xxxxxx| @@ -97,7 +99,7 @@ base::AddressRegion GetReservedRegion(bool has_guard_regions, } size_t GetReservationSize(bool has_guard_regions, size_t byte_capacity) { -#if V8_TARGET_ARCH_64_BIT +#if V8_TARGET_ARCH_64_BIT && V8_ENABLE_WEBASSEMBLY if (has_guard_regions) return kFullGuardSize; #else DCHECK(!has_guard_regions); @@ -110,7 +112,6 @@ void RecordStatus(Isolate* isolate, AllocationStatus status) { isolate->counters()->wasm_memory_allocation_result()->AddSample( static_cast<int>(status)); } -#endif // V8_ENABLE_WEBASSEMBLY inline void DebugCheckZero(void* start, size_t byte_length) { #if DEBUG @@ -160,6 +161,8 @@ BackingStore::~BackingStore() { #if V8_ENABLE_WEBASSEMBLY if (is_wasm_memory_) { + // TODO(v8:11111): RAB / GSAB - Wasm integration. + DCHECK(!is_resizable_); DCHECK(free_on_destruct_); DCHECK(!custom_deleter_); size_t reservation_size = @@ -189,6 +192,23 @@ BackingStore::~BackingStore() { } #endif // V8_ENABLE_WEBASSEMBLY + if (is_resizable_) { + DCHECK(free_on_destruct_); + DCHECK(!custom_deleter_); + size_t reservation_size = + GetReservationSize(has_guard_regions_, byte_capacity_); + auto region = + GetReservedRegion(has_guard_regions_, buffer_start_, byte_capacity_); + + bool pages_were_freed = + region.size() == 0 /* no need to free any pages */ || + FreePages(GetPlatformPageAllocator(), + reinterpret_cast<void*>(region.begin()), region.size()); + CHECK(pages_were_freed); + BackingStore::ReleaseReservation(reservation_size); + Clear(); + return; + } if (custom_deleter_) { DCHECK(free_on_destruct_); TRACE_BS("BS:custom deleter bs=%p mem=%p (length=%zu, capacity=%zu)\n", @@ -252,15 +272,16 @@ std::unique_ptr<BackingStore> BackingStore::Allocate( } } - auto result = new BackingStore(buffer_start, // start - byte_length, // length - byte_length, // capacity - shared, // shared - false, // is_wasm_memory - true, // free_on_destruct - false, // has_guard_regions - false, // custom_deleter - false); // empty_deleter + auto result = new BackingStore(buffer_start, // start + byte_length, // length + byte_length, // capacity + shared, // shared + ResizableFlag::kNotResizable, // resizable + false, // is_wasm_memory + true, // free_on_destruct + false, // has_guard_regions + false, // custom_deleter + false); // empty_deleter TRACE_BS("BS:alloc bs=%p mem=%p (length=%zu)\n", result, result->buffer_start(), byte_length); @@ -281,6 +302,27 @@ void BackingStore::SetAllocatorFromIsolate(Isolate* isolate) { } #if V8_ENABLE_WEBASSEMBLY +// Allocate a backing store for a Wasm memory. Always use the page allocator +// and add guard regions. +std::unique_ptr<BackingStore> BackingStore::TryAllocateWasmMemory( + Isolate* isolate, size_t initial_pages, size_t maximum_pages, + SharedFlag shared) { + // Compute size of reserved memory. + size_t engine_max_pages = wasm::max_mem_pages(); + maximum_pages = std::min(engine_max_pages, maximum_pages); + + auto result = TryAllocateAndPartiallyCommitMemory( + isolate, initial_pages * wasm::kWasmPageSize, wasm::kWasmPageSize, + initial_pages, maximum_pages, true, shared); + // Shared Wasm memories need an anchor for the memory object list. + if (result && shared == SharedFlag::kShared) { + result->type_specific_data_.shared_wasm_memory_data = + new SharedWasmMemoryData(); + } + return result; +} +#endif // V8_ENABLE_WEBASSEMBLY + bool BackingStore::ReserveAddressSpace(uint64_t num_bytes) { uint64_t reservation_limit = kAddressSpaceLimit; uint64_t old_count = reserved_address_space_.load(std::memory_order_relaxed); @@ -300,17 +342,21 @@ void BackingStore::ReleaseReservation(uint64_t num_bytes) { DCHECK_LE(num_bytes, old_reserved); } -// Allocate a backing store for a Wasm memory. Always use the page allocator -// and add guard regions. -std::unique_ptr<BackingStore> BackingStore::TryAllocateWasmMemory( - Isolate* isolate, size_t initial_pages, size_t maximum_pages, +std::unique_ptr<BackingStore> BackingStore::TryAllocateAndPartiallyCommitMemory( + Isolate* isolate, size_t byte_length, size_t page_size, + size_t initial_pages, size_t maximum_pages, bool is_wasm_memory, SharedFlag shared) { + // Enforce engine limitation on the maximum number of pages. + if (maximum_pages > std::numeric_limits<size_t>::max() / page_size) { + return nullptr; + } + // Cannot reserve 0 pages on some OSes. if (maximum_pages == 0) maximum_pages = 1; TRACE_BS("BSw:try %zu pages, %zu max\n", initial_pages, maximum_pages); - bool guards = trap_handler::IsTrapHandlerEnabled(); + bool guards = is_wasm_memory && trap_handler::IsTrapHandlerEnabled(); // For accounting purposes, whether a GC was necessary. bool did_retry = false; @@ -329,16 +375,7 @@ std::unique_ptr<BackingStore> BackingStore::TryAllocateWasmMemory( return false; }; - // Compute size of reserved memory. - - size_t engine_max_pages = wasm::max_mem_pages(); - maximum_pages = std::min(engine_max_pages, maximum_pages); - // If the platform doesn't support so many pages, attempting to allocate - // is guaranteed to fail, so we don't even try. - if (maximum_pages > kPlatformMaxPages) return {}; - CHECK_LE(maximum_pages, - std::numeric_limits<size_t>::max() / wasm::kWasmPageSize); - size_t byte_capacity = maximum_pages * wasm::kWasmPageSize; + size_t byte_capacity = maximum_pages * page_size; size_t reservation_size = GetReservationSize(guards, byte_capacity); //-------------------------------------------------------------------------- @@ -366,7 +403,7 @@ std::unique_ptr<BackingStore> BackingStore::TryAllocateWasmMemory( auto allocate_pages = [&] { allocation_base = AllocatePages(GetPlatformPageAllocator(), nullptr, reservation_size, - wasm::kWasmPageSize, PageAllocator::kNoAccess); + page_size, PageAllocator::kNoAccess); return allocation_base != nullptr; }; if (!gc_retry(allocate_pages)) { @@ -379,23 +416,27 @@ std::unique_ptr<BackingStore> BackingStore::TryAllocateWasmMemory( // Get a pointer to the start of the buffer, skipping negative guard region // if necessary. +#if V8_ENABLE_WEBASSEMBLY byte* buffer_start = reinterpret_cast<byte*>(allocation_base) + (guards ? kNegativeGuardSize : 0); - +#else + DCHECK(!guards); + byte* buffer_start = reinterpret_cast<byte*>(allocation_base); +#endif //-------------------------------------------------------------------------- // 3. Commit the initial pages (allow read/write). //-------------------------------------------------------------------------- - size_t byte_length = initial_pages * wasm::kWasmPageSize; + size_t committed_byte_length = initial_pages * page_size; auto commit_memory = [&] { - return byte_length == 0 || - SetPermissions(GetPlatformPageAllocator(), buffer_start, byte_length, - PageAllocator::kReadWrite); + return committed_byte_length == 0 || + SetPermissions(GetPlatformPageAllocator(), buffer_start, + committed_byte_length, PageAllocator::kReadWrite); }; if (!gc_retry(commit_memory)) { TRACE_BS("BSw:try failed to set permissions (%p, %zu)\n", buffer_start, - byte_length); + committed_byte_length); // SetPermissions put us over the process memory limit. - V8::FatalProcessOutOfMemory(nullptr, "BackingStore::AllocateWasmMemory()"); + V8::FatalProcessOutOfMemory(nullptr, "BackingStore::AllocateMemory()"); } DebugCheckZero(buffer_start, byte_length); // touch the bytes. @@ -403,30 +444,29 @@ std::unique_ptr<BackingStore> BackingStore::TryAllocateWasmMemory( RecordStatus(isolate, did_retry ? AllocationStatus::kSuccessAfterRetry : AllocationStatus::kSuccess); - auto result = new BackingStore(buffer_start, // start - byte_length, // length - byte_capacity, // capacity - shared, // shared - true, // is_wasm_memory - true, // free_on_destruct - guards, // has_guard_regions - false, // custom_deleter - false); // empty_deleter + ResizableFlag resizable = + is_wasm_memory ? ResizableFlag::kNotResizable : ResizableFlag::kResizable; + + auto result = new BackingStore(buffer_start, // start + byte_length, // length + byte_capacity, // capacity + shared, // shared + resizable, // resizable + is_wasm_memory, // is_wasm_memory + true, // free_on_destruct + guards, // has_guard_regions + false, // custom_deleter + false); // empty_deleter TRACE_BS( "BSw:alloc bs=%p mem=%p (length=%zu, capacity=%zu, reservation=%zu)\n", result, result->buffer_start(), byte_length, byte_capacity, reservation_size); - // Shared Wasm memories need an anchor for the memory object list. - if (shared == SharedFlag::kShared) { - result->type_specific_data_.shared_wasm_memory_data = - new SharedWasmMemoryData(); - } - return std::unique_ptr<BackingStore>(result); } +#if V8_ENABLE_WEBASSEMBLY // Allocate a backing store for a Wasm memory. Always use the page allocator // and add guard regions. std::unique_ptr<BackingStore> BackingStore::AllocateWasmMemory( @@ -583,18 +623,102 @@ void BackingStore::UpdateSharedWasmMemoryObjects(Isolate* isolate) { } #endif // V8_ENABLE_WEBASSEMBLY +// Commit already reserved memory (for RAB backing stores (not shared)). +BackingStore::ResizeOrGrowResult BackingStore::ResizeInPlace( + Isolate* isolate, size_t new_byte_length, size_t new_committed_length) { + DCHECK_LE(new_byte_length, new_committed_length); + DCHECK(!is_shared()); + + if (new_byte_length < byte_length_) { + // TOOO(v8:11111): Figure out a strategy for shrinking - when do we + // un-commit the memory? + + // Zero the memory so that in case the buffer is grown later, we have + // zeroed the contents already. + memset(reinterpret_cast<byte*>(buffer_start_) + new_byte_length, 0, + byte_length_ - new_byte_length); + + // Changing the byte length wouldn't strictly speaking be needed, since + // the JSArrayBuffer already stores the updated length. This is to keep + // the BackingStore and JSArrayBuffer in sync. + byte_length_ = new_byte_length; + return kSuccess; + } + if (new_byte_length == byte_length_) { + // i::SetPermissions with size 0 fails on some platforms, so special + // handling for the case byte_length_ == new_byte_length == 0 is required. + return kSuccess; + } + + // Try to adjust the permissions on the memory. + if (!i::SetPermissions(GetPlatformPageAllocator(), buffer_start_, + new_committed_length, PageAllocator::kReadWrite)) { + return kFailure; + } + + // Do per-isolate accounting for non-shared backing stores. + DCHECK(free_on_destruct_); + reinterpret_cast<v8::Isolate*>(isolate) + ->AdjustAmountOfExternalAllocatedMemory(new_byte_length - byte_length_); + byte_length_ = new_byte_length; + return kSuccess; +} + +// Commit already reserved memory (for GSAB backing stores (shared)). +BackingStore::ResizeOrGrowResult BackingStore::GrowInPlace( + Isolate* isolate, size_t new_byte_length, size_t new_committed_length) { + DCHECK_LE(new_byte_length, new_committed_length); + DCHECK(is_shared()); + // See comment in GrowWasmMemoryInPlace. + // GrowableSharedArrayBuffer.prototype.grow can be called from several + // threads. If two threads try to grow() in a racy way, the spec allows the + // larger grow to throw also if the smaller grow succeeds first. The + // implementation below doesn't throw in that case - instead, it retries and + // succeeds. If the larger grow finishes first though, the smaller grow must + // throw. + size_t old_byte_length = byte_length_.load(std::memory_order_seq_cst); + while (true) { + if (new_byte_length < old_byte_length) { + // The caller checks for the new_byte_length < old_byte_length_ case. This + // can only happen if another thread grew the memory after that. + return kRace; + } + if (new_byte_length == old_byte_length) { + // i::SetPermissions with size 0 fails on some platforms, so special + // handling for the case old_byte_length == new_byte_length == 0 is + // required. + return kSuccess; + } + + // Try to adjust the permissions on the memory. + if (!i::SetPermissions(GetPlatformPageAllocator(), buffer_start_, + new_committed_length, PageAllocator::kReadWrite)) { + return kFailure; + } + + // compare_exchange_weak updates old_byte_length. + if (byte_length_.compare_exchange_weak(old_byte_length, new_byte_length, + std::memory_order_seq_cst)) { + // Successfully updated both the length and permissions. + break; + } + } + return kSuccess; +} + std::unique_ptr<BackingStore> BackingStore::WrapAllocation( Isolate* isolate, void* allocation_base, size_t allocation_length, SharedFlag shared, bool free_on_destruct) { - auto result = new BackingStore(allocation_base, // start - allocation_length, // length - allocation_length, // capacity - shared, // shared - false, // is_wasm_memory - free_on_destruct, // free_on_destruct - false, // has_guard_regions - false, // custom_deleter - false); // empty_deleter + auto result = new BackingStore(allocation_base, // start + allocation_length, // length + allocation_length, // capacity + shared, // shared + ResizableFlag::kNotResizable, // resizable + false, // is_wasm_memory + free_on_destruct, // free_on_destruct + false, // has_guard_regions + false, // custom_deleter + false); // empty_deleter result->SetAllocatorFromIsolate(isolate); TRACE_BS("BS:wrap bs=%p mem=%p (length=%zu)\n", result, result->buffer_start(), result->byte_length()); @@ -606,10 +730,11 @@ std::unique_ptr<BackingStore> BackingStore::WrapAllocation( v8::BackingStore::DeleterCallback deleter, void* deleter_data, SharedFlag shared) { bool is_empty_deleter = (deleter == v8::BackingStore::EmptyDeleter); - auto result = new BackingStore(allocation_base, // start - allocation_length, // length - allocation_length, // capacity - shared, // shared + auto result = new BackingStore(allocation_base, // start + allocation_length, // length + allocation_length, // capacity + shared, // shared + ResizableFlag::kNotResizable, // resizable false, // is_wasm_memory true, // free_on_destruct false, // has_guard_regions @@ -623,15 +748,16 @@ std::unique_ptr<BackingStore> BackingStore::WrapAllocation( std::unique_ptr<BackingStore> BackingStore::EmptyBackingStore( SharedFlag shared) { - auto result = new BackingStore(nullptr, // start - 0, // length - 0, // capacity - shared, // shared - false, // is_wasm_memory - true, // free_on_destruct - false, // has_guard_regions - false, // custom_deleter - false); // empty_deleter + auto result = new BackingStore(nullptr, // start + 0, // length + 0, // capacity + shared, // shared + ResizableFlag::kNotResizable, // resizable + false, // is_wasm_memory + true, // free_on_destruct + false, // has_guard_regions + false, // custom_deleter + false); // empty_deleter return std::unique_ptr<BackingStore>(result); } diff --git a/deps/v8/src/objects/backing-store.h b/deps/v8/src/objects/backing-store.h index eb879d5e8a..5598388d3b 100644 --- a/deps/v8/src/objects/backing-store.h +++ b/deps/v8/src/objects/backing-store.h @@ -21,6 +21,9 @@ class WasmMemoryObject; // Whether the backing store is shared or not. enum class SharedFlag : uint8_t { kNotShared, kShared }; +// Whether the backing store is resizable or not. +enum class ResizableFlag : uint8_t { kNotResizable, kResizable }; + // Whether the backing store memory is initialied to zero or not. enum class InitializedFlag : uint8_t { kUninitialized, kZeroInitialized }; @@ -56,6 +59,12 @@ class V8_EXPORT_PRIVATE BackingStore : public BackingStoreBase { SharedFlag shared); #endif // V8_ENABLE_WEBASSEMBLY + // Tries to allocate `maximum_pages` of memory and commit `initial_pages`. + static std::unique_ptr<BackingStore> TryAllocateAndPartiallyCommitMemory( + Isolate* isolate, size_t byte_length, size_t page_size, + size_t initial_pages, size_t maximum_pages, bool is_wasm_memory, + SharedFlag shared); + // Create a backing store that wraps existing allocated memory. // If {free_on_destruct} is {true}, the memory will be freed using the // ArrayBufferAllocator::Free() callback when this backing store is @@ -77,15 +86,24 @@ class V8_EXPORT_PRIVATE BackingStore : public BackingStoreBase { // Accessors. void* buffer_start() const { return buffer_start_; } - size_t byte_length() const { - return byte_length_.load(std::memory_order_relaxed); + size_t byte_length( + std::memory_order memory_order = std::memory_order_relaxed) const { + return byte_length_.load(memory_order); } size_t byte_capacity() const { return byte_capacity_; } bool is_shared() const { return is_shared_; } + bool is_resizable() const { return is_resizable_; } bool is_wasm_memory() const { return is_wasm_memory_; } bool has_guard_regions() const { return has_guard_regions_; } bool free_on_destruct() const { return free_on_destruct_; } + enum ResizeOrGrowResult { kSuccess, kFailure, kRace }; + + ResizeOrGrowResult ResizeInPlace(Isolate* isolate, size_t new_byte_length, + size_t new_committed_length); + ResizeOrGrowResult GrowInPlace(Isolate* isolate, size_t new_byte_length, + size_t new_committed_length); + // Wrapper around ArrayBuffer::Allocator::Reallocate. bool Reallocate(Isolate* isolate, size_t new_byte_length); @@ -111,12 +129,6 @@ class V8_EXPORT_PRIVATE BackingStore : public BackingStoreBase { static void BroadcastSharedWasmMemoryGrow(Isolate* isolate, std::shared_ptr<BackingStore>); - // TODO(wasm): address space limitations should be enforced in page alloc. - // These methods enforce a limit on the total amount of address space, - // which is used for both backing stores and wasm memory. - static bool ReserveAddressSpace(uint64_t num_bytes); - static void ReleaseReservation(uint64_t num_bytes); - // Remove all memory objects in the given isolate that refer to this // backing store. static void RemoveSharedWasmMemoryObjects(Isolate* isolate); @@ -125,6 +137,12 @@ class V8_EXPORT_PRIVATE BackingStore : public BackingStoreBase { static void UpdateSharedWasmMemoryObjects(Isolate* isolate); #endif // V8_ENABLE_WEBASSEMBLY + // TODO(wasm): address space limitations should be enforced in page alloc. + // These methods enforce a limit on the total amount of address space, + // which is used for both backing stores and wasm memory. + static bool ReserveAddressSpace(uint64_t num_bytes); + static void ReleaseReservation(uint64_t num_bytes); + // Returns the size of the external memory owned by this backing store. // It is used for triggering GCs based on the external memory pressure. size_t PerIsolateAccountingLength() { @@ -148,19 +166,26 @@ class V8_EXPORT_PRIVATE BackingStore : public BackingStoreBase { friend class GlobalBackingStoreRegistry; BackingStore(void* buffer_start, size_t byte_length, size_t byte_capacity, - SharedFlag shared, bool is_wasm_memory, bool free_on_destruct, - bool has_guard_regions, bool custom_deleter, bool empty_deleter) + SharedFlag shared, ResizableFlag resizable, bool is_wasm_memory, + bool free_on_destruct, bool has_guard_regions, + bool custom_deleter, bool empty_deleter) : buffer_start_(buffer_start), byte_length_(byte_length), byte_capacity_(byte_capacity), is_shared_(shared == SharedFlag::kShared), + is_resizable_(resizable == ResizableFlag::kResizable), is_wasm_memory_(is_wasm_memory), holds_shared_ptr_to_allocator_(false), free_on_destruct_(free_on_destruct), has_guard_regions_(has_guard_regions), globally_registered_(false), custom_deleter_(custom_deleter), - empty_deleter_(empty_deleter) {} + empty_deleter_(empty_deleter) { + // TODO(v8:11111): RAB / GSAB - Wasm integration. + DCHECK_IMPLIES(is_wasm_memory_, !is_resizable_); + DCHECK_IMPLIES(is_resizable_, !custom_deleter_); + DCHECK_IMPLIES(is_resizable_, free_on_destruct_); + } BackingStore(const BackingStore&) = delete; BackingStore& operator=(const BackingStore&) = delete; void SetAllocatorFromIsolate(Isolate* isolate); @@ -199,6 +224,8 @@ class V8_EXPORT_PRIVATE BackingStore : public BackingStoreBase { } type_specific_data_; bool is_shared_ : 1; + // Backing stores for (Resizable|GrowableShared)ArrayBuffer + bool is_resizable_ : 1; bool is_wasm_memory_ : 1; bool holds_shared_ptr_to_allocator_ : 1; bool free_on_destruct_ : 1; diff --git a/deps/v8/src/objects/bigint.cc b/deps/v8/src/objects/bigint.cc index cffac5af8e..9614d4d146 100644 --- a/deps/v8/src/objects/bigint.cc +++ b/deps/v8/src/objects/bigint.cc @@ -51,21 +51,20 @@ class MutableBigInt : public FreshlyAllocatedBigInt { static void Canonicalize(MutableBigInt result); // Allocation helpers. - template <typename LocalIsolate> + template <typename IsolateT> static MaybeHandle<MutableBigInt> New( - LocalIsolate* isolate, int length, + IsolateT* isolate, int length, AllocationType allocation = AllocationType::kYoung); static Handle<BigInt> NewFromInt(Isolate* isolate, int value); static Handle<BigInt> NewFromDouble(Isolate* isolate, double value); void InitializeDigits(int length, byte value = 0); static Handle<MutableBigInt> Copy(Isolate* isolate, Handle<BigIntBase> source); - template <typename LocalIsolate> + template <typename IsolateT> static Handle<BigInt> Zero( - LocalIsolate* isolate, - AllocationType allocation = AllocationType::kYoung) { + IsolateT* isolate, AllocationType allocation = AllocationType::kYoung) { // TODO(jkummerow): Consider caching a canonical zero-BigInt. - return MakeImmutable<LocalIsolate>( + return MakeImmutable<IsolateT>( New(isolate, 0, allocation).ToHandleChecked()); } @@ -136,10 +135,6 @@ class MutableBigInt : public FreshlyAllocatedBigInt { Isolate* isolate, Handle<BigIntBase> x, Handle<BigIntBase> y, MutableBigInt result_storage = MutableBigInt()); - static void MultiplyAccumulate(Handle<BigIntBase> multiplicand, - digit_t multiplier, - Handle<MutableBigInt> accumulator, - int accumulator_index); static void InternalMultiplyAdd(BigIntBase source, digit_t factor, digit_t summand, int n, MutableBigInt result); void InplaceMultiplyAdd(uintptr_t factor, uintptr_t summand); @@ -211,7 +206,7 @@ class MutableBigInt : public FreshlyAllocatedBigInt { bitfield = SignBits::update(bitfield, new_sign); RELAXED_WRITE_INT32_FIELD(*this, kBitfieldOffset, bitfield); } - inline void synchronized_set_length(int new_length) { + inline void set_length(int new_length, ReleaseStoreTag) { int32_t bitfield = RELAXED_READ_INT32_FIELD(*this, kBitfieldOffset); bitfield = LengthBits::update(bitfield, new_length); RELEASE_WRITE_INT32_FIELD(*this, kBitfieldOffset, bitfield); @@ -243,14 +238,25 @@ NEVER_READ_ONLY_SPACE_IMPL(MutableBigInt) #include "src/base/platform/wrappers.h" #include "src/objects/object-macros-undef.h" -struct GetDigits : bigint::Digits { - explicit GetDigits(Handle<BigIntBase> bigint) : GetDigits(*bigint) {} - explicit GetDigits(BigIntBase bigint) - : bigint::Digits( - reinterpret_cast<bigint::digit_t*>( - bigint.ptr() + BigIntBase::kDigitsOffset - kHeapObjectTag), - bigint.length()) {} -}; +bigint::Digits GetDigits(BigIntBase bigint) { + return bigint::Digits( + reinterpret_cast<bigint::digit_t*>( + bigint.ptr() + BigIntBase::kDigitsOffset - kHeapObjectTag), + bigint.length()); +} +bigint::Digits GetDigits(Handle<BigIntBase> bigint) { + return GetDigits(*bigint); +} + +bigint::RWDigits GetRWDigits(MutableBigInt bigint) { + return bigint::RWDigits( + reinterpret_cast<bigint::digit_t*>( + bigint.ptr() + BigIntBase::kDigitsOffset - kHeapObjectTag), + bigint.length()); +} +bigint::RWDigits GetRWDigits(Handle<MutableBigInt> bigint) { + return GetRWDigits(*bigint); +} template <typename T, typename Isolate> MaybeHandle<T> ThrowBigIntTooBig(Isolate* isolate) { @@ -266,8 +272,8 @@ MaybeHandle<T> ThrowBigIntTooBig(Isolate* isolate) { THROW_NEW_ERROR(isolate, NewRangeError(MessageTemplate::kBigIntTooBig), T); } -template <typename LocalIsolate> -MaybeHandle<MutableBigInt> MutableBigInt::New(LocalIsolate* isolate, int length, +template <typename IsolateT> +MaybeHandle<MutableBigInt> MutableBigInt::New(IsolateT* isolate, int length, AllocationType allocation) { if (length > BigInt::kMaxLength) { return ThrowBigIntTooBig<MutableBigInt>(isolate); @@ -390,7 +396,7 @@ MaybeHandle<BigInt> MutableBigInt::MakeImmutable( return MakeImmutable(result); } -template <typename LocalIsolate> +template <typename IsolateT> Handle<BigInt> MutableBigInt::MakeImmutable(Handle<MutableBigInt> result) { MutableBigInt::Canonicalize(*result); return Handle<BigInt>::cast(result); @@ -412,7 +418,7 @@ void MutableBigInt::Canonicalize(MutableBigInt result) { // of the object changed significantly. heap->CreateFillerObjectAt(new_end, size_delta, ClearRecordedSlots::kNo); } - result.synchronized_set_length(new_length); + result.set_length(new_length, kReleaseStore); // Canonicalize -0n. if (new_length == 0) { @@ -424,8 +430,8 @@ void MutableBigInt::Canonicalize(MutableBigInt result) { result.digit(result.length() - 1) != 0); // MSD is non-zero. } -template <typename LocalIsolate> -Handle<BigInt> BigInt::Zero(LocalIsolate* isolate, AllocationType allocation) { +template <typename IsolateT> +Handle<BigInt> BigInt::Zero(IsolateT* isolate, AllocationType allocation) { return MutableBigInt::Zero(isolate, allocation); } template Handle<BigInt> BigInt::Zero(Isolate* isolate, @@ -531,29 +537,18 @@ MaybeHandle<BigInt> BigInt::Multiply(Isolate* isolate, Handle<BigInt> x, Handle<BigInt> y) { if (x->is_zero()) return x; if (y->is_zero()) return y; - int result_length = x->length() + y->length(); + int result_length = bigint::MultiplyResultLength(GetDigits(x), GetDigits(y)); Handle<MutableBigInt> result; if (!MutableBigInt::New(isolate, result_length).ToHandle(&result)) { return MaybeHandle<BigInt>(); } - result->InitializeDigits(result_length); - uintptr_t work_estimate = 0; - for (int i = 0; i < x->length(); i++) { - MutableBigInt::MultiplyAccumulate(y, x->digit(i), result, i); - - // Multiplication can take a long time. Check for interrupt requests - // every now and then (roughly every 10-20 of milliseconds -- rarely - // enough not to create noticeable overhead, frequently enough not to - // appear frozen). - work_estimate += y->length(); - if (work_estimate > 5000000) { - work_estimate = 0; - StackLimitCheck interrupt_check(isolate); - if (interrupt_check.InterruptRequested() && - isolate->stack_guard()->HandleInterrupts().IsException(isolate)) { - return MaybeHandle<BigInt>(); - } - } + DisallowGarbageCollection no_gc; + bigint::Status status = isolate->bigint_processor()->Multiply( + GetRWDigits(result), GetDigits(x), GetDigits(y)); + if (status == bigint::Status::kInterrupted) { + AllowGarbageCollection terminating_anyway; + isolate->TerminateExecution(); + return {}; } result->set_sign(x->sign() != y->sign()); return MutableBigInt::MakeImmutable(result); @@ -1449,46 +1444,6 @@ Handle<MutableBigInt> MutableBigInt::AbsoluteXor(Isolate* isolate, [](digit_t a, digit_t b) { return a ^ b; }); } -// Multiplies {multiplicand} with {multiplier} and adds the result to -// {accumulator}, starting at {accumulator_index} for the least-significant -// digit. -// Callers must ensure that {accumulator} is big enough to hold the result. -void MutableBigInt::MultiplyAccumulate(Handle<BigIntBase> multiplicand, - digit_t multiplier, - Handle<MutableBigInt> accumulator, - int accumulator_index) { - // This is a minimum requirement; the DCHECK in the second loop below - // will enforce more as needed. - DCHECK(accumulator->length() > multiplicand->length() + accumulator_index); - if (multiplier == 0L) return; - digit_t carry = 0; - digit_t high = 0; - for (int i = 0; i < multiplicand->length(); i++, accumulator_index++) { - digit_t acc = accumulator->digit(accumulator_index); - digit_t new_carry = 0; - // Add last round's carryovers. - acc = digit_add(acc, high, &new_carry); - acc = digit_add(acc, carry, &new_carry); - // Compute this round's multiplication. - digit_t m_digit = multiplicand->digit(i); - digit_t low = digit_mul(multiplier, m_digit, &high); - acc = digit_add(acc, low, &new_carry); - // Store result and prepare for next round. - accumulator->set_digit(accumulator_index, acc); - carry = new_carry; - } - for (; carry != 0 || high != 0; accumulator_index++) { - DCHECK(accumulator_index < accumulator->length()); - digit_t acc = accumulator->digit(accumulator_index); - digit_t new_carry = 0; - acc = digit_add(acc, high, &new_carry); - high = 0; - acc = digit_add(acc, carry, &new_carry); - accumulator->set_digit(accumulator_index, acc); - carry = new_carry; - } -} - // Multiplies {source} with {factor} and adds {summand} to the result. // {result} and {source} may be the same BigInt for inplace modification. void MutableBigInt::InternalMultiplyAdd(BigIntBase source, digit_t factor, @@ -1928,9 +1883,9 @@ constexpr uint8_t kMaxBitsPerChar[] = { static const int kBitsPerCharTableShift = 5; static const size_t kBitsPerCharTableMultiplier = 1u << kBitsPerCharTableShift; -template <typename LocalIsolate> +template <typename IsolateT> MaybeHandle<FreshlyAllocatedBigInt> BigInt::AllocateFor( - LocalIsolate* isolate, int radix, int charcount, ShouldThrow should_throw, + IsolateT* isolate, int radix, int charcount, ShouldThrow should_throw, AllocationType allocation) { DCHECK(2 <= radix && radix <= 36); DCHECK_GE(charcount, 0); @@ -1966,7 +1921,7 @@ template MaybeHandle<FreshlyAllocatedBigInt> BigInt::AllocateFor( LocalIsolate* isolate, int radix, int charcount, ShouldThrow should_throw, AllocationType allocation); -template <typename LocalIsolate> +template <typename IsolateT> Handle<BigInt> BigInt::Finalize(Handle<FreshlyAllocatedBigInt> x, bool sign) { Handle<MutableBigInt> bigint = Handle<MutableBigInt>::cast(x); bigint->set_sign(sign); @@ -2249,7 +2204,7 @@ MaybeHandle<String> MutableBigInt::ToStringGeneric(Isolate* isolate, if (sign) chars[pos++] = '-'; // Trim any over-allocation (which can happen due to conservative estimates). if (pos < static_cast<int>(chars_required)) { - result->synchronized_set_length(pos); + result->set_length(pos, kReleaseStore); int string_size = SeqOneByteString::SizeFor(static_cast<int>(chars_required)); int needed_size = SeqOneByteString::SizeFor(pos); diff --git a/deps/v8/src/objects/bigint.h b/deps/v8/src/objects/bigint.h index a7494a54c5..19dfca348a 100644 --- a/deps/v8/src/objects/bigint.h +++ b/deps/v8/src/objects/bigint.h @@ -38,7 +38,7 @@ class BigIntBase : public PrimitiveHeapObject { } // For use by the GC. - inline int synchronized_length() const { + inline int length(AcquireLoadTag) const { int32_t bitfield = ACQUIRE_READ_INT32_FIELD(*this, kBitfieldOffset); return LengthBits::decode(static_cast<uint32_t>(bitfield)); } @@ -242,22 +242,22 @@ class BigInt : public BigIntBase { class BodyDescriptor; private: - template <typename LocalIsolate> + template <typename IsolateT> friend class StringToBigIntHelper; friend class ValueDeserializer; friend class ValueSerializer; // Special functions for StringToBigIntHelper: - template <typename LocalIsolate> - static Handle<BigInt> Zero(LocalIsolate* isolate, AllocationType allocation = - AllocationType::kYoung); - template <typename LocalIsolate> + template <typename IsolateT> + static Handle<BigInt> Zero( + IsolateT* isolate, AllocationType allocation = AllocationType::kYoung); + template <typename IsolateT> static MaybeHandle<FreshlyAllocatedBigInt> AllocateFor( - LocalIsolate* isolate, int radix, int charcount, ShouldThrow should_throw, + IsolateT* isolate, int radix, int charcount, ShouldThrow should_throw, AllocationType allocation); static void InplaceMultiplyAdd(FreshlyAllocatedBigInt x, uintptr_t factor, uintptr_t summand); - template <typename LocalIsolate> + template <typename IsolateT> static Handle<BigInt> Finalize(Handle<FreshlyAllocatedBigInt> x, bool sign); // Special functions for ValueSerializer/ValueDeserializer: diff --git a/deps/v8/src/objects/code-inl.h b/deps/v8/src/objects/code-inl.h index 6fd3355a42..f53c585538 100644 --- a/deps/v8/src/objects/code-inl.h +++ b/deps/v8/src/objects/code-inl.h @@ -450,8 +450,8 @@ inline bool Code::is_interpreter_trampoline_builtin() const { const int index = builtin_index(); return index != Builtins::kNoBuiltinId && (index == Builtins::kInterpreterEntryTrampoline || - index == Builtins::kInterpreterEnterBytecodeAdvance || - index == Builtins::kInterpreterEnterBytecodeDispatch); + index == Builtins::kInterpreterEnterAtBytecode || + index == Builtins::kInterpreterEnterAtNextBytecode); } inline bool Code::is_baseline_trampoline_builtin() const { @@ -715,7 +715,7 @@ bool Code::IsWeakObject(HeapObject object) { } bool Code::IsWeakObjectInOptimizedCode(HeapObject object) { - Map map = object.synchronized_map(); + Map map = object.map(kAcquireLoad); InstanceType instance_type = map.instance_type(); if (InstanceTypeChecker::IsMap(instance_type)) { return Map::cast(object).CanTransition(); diff --git a/deps/v8/src/objects/code-kind.cc b/deps/v8/src/objects/code-kind.cc index 8d480c86db..5c4ab5d299 100644 --- a/deps/v8/src/objects/code-kind.cc +++ b/deps/v8/src/objects/code-kind.cc @@ -24,8 +24,6 @@ const char* CodeKindToMarker(CodeKind kind) { return "~"; case CodeKind::BASELINE: return "^"; - case CodeKind::NATIVE_CONTEXT_INDEPENDENT: - return "-"; case CodeKind::TURBOPROP: return "+"; case CodeKind::TURBOFAN: diff --git a/deps/v8/src/objects/code-kind.h b/deps/v8/src/objects/code-kind.h index 12f65ba18a..888e04c42b 100644 --- a/deps/v8/src/objects/code-kind.h +++ b/deps/v8/src/objects/code-kind.h @@ -28,7 +28,6 @@ namespace internal { V(C_WASM_ENTRY) \ V(INTERPRETED_FUNCTION) \ V(BASELINE) \ - V(NATIVE_CONTEXT_INDEPENDENT) \ V(TURBOPROP) \ V(TURBOFAN) @@ -38,14 +37,10 @@ enum class CodeKind { #undef DEFINE_CODE_KIND_ENUM }; STATIC_ASSERT(CodeKind::INTERPRETED_FUNCTION < CodeKind::TURBOPROP && - CodeKind::INTERPRETED_FUNCTION < - CodeKind::NATIVE_CONTEXT_INDEPENDENT && CodeKind::INTERPRETED_FUNCTION < CodeKind::BASELINE); -STATIC_ASSERT(CodeKind::BASELINE < CodeKind::TURBOPROP && - CodeKind::BASELINE < CodeKind::NATIVE_CONTEXT_INDEPENDENT); +STATIC_ASSERT(CodeKind::BASELINE < CodeKind::TURBOPROP); STATIC_ASSERT(CodeKind::BASELINE < CodeKind::TURBOFAN && - CodeKind::TURBOPROP < CodeKind::TURBOFAN && - CodeKind::NATIVE_CONTEXT_INDEPENDENT < CodeKind::TURBOFAN); + CodeKind::TURBOPROP < CodeKind::TURBOFAN); #define V(...) +1 static constexpr int kCodeKindCount = CODE_KIND_LIST(V); @@ -70,18 +65,10 @@ inline constexpr bool CodeKindIsUnoptimizedJSFunction(CodeKind kind) { CodeKind::BASELINE); } -inline constexpr bool CodeKindIsNativeContextIndependentJSFunction( - CodeKind kind) { - return kind == CodeKind::NATIVE_CONTEXT_INDEPENDENT; -} - inline constexpr bool CodeKindIsOptimizedJSFunction(CodeKind kind) { - STATIC_ASSERT(static_cast<int>(CodeKind::NATIVE_CONTEXT_INDEPENDENT) + 1 == - static_cast<int>(CodeKind::TURBOPROP)); STATIC_ASSERT(static_cast<int>(CodeKind::TURBOPROP) + 1 == static_cast<int>(CodeKind::TURBOFAN)); - return base::IsInRange(kind, CodeKind::NATIVE_CONTEXT_INDEPENDENT, - CodeKind::TURBOFAN); + return base::IsInRange(kind, CodeKind::TURBOPROP, CodeKind::TURBOFAN); } inline constexpr bool CodeKindIsJSFunction(CodeKind kind) { @@ -94,9 +81,6 @@ inline constexpr bool CodeKindIsBuiltinOrJSFunction(CodeKind kind) { } inline constexpr bool CodeKindCanDeoptimize(CodeKind kind) { - // Even though NCI code does not deopt by itself at the time of writing, - // tests may trigger deopts manually and thus we cannot make a narrower - // distinction here. return CodeKindIsOptimizedJSFunction(kind); } @@ -104,9 +88,8 @@ inline constexpr bool CodeKindCanOSR(CodeKind kind) { return kind == CodeKind::TURBOFAN || kind == CodeKind::TURBOPROP; } -inline constexpr bool CodeKindIsOptimizedAndCanTierUp(CodeKind kind) { - return kind == CodeKind::NATIVE_CONTEXT_INDEPENDENT || - (!FLAG_turboprop_as_toptier && kind == CodeKind::TURBOPROP); +inline bool CodeKindIsOptimizedAndCanTierUp(CodeKind kind) { + return !FLAG_turboprop_as_toptier && kind == CodeKind::TURBOPROP; } inline constexpr bool CodeKindCanTierUp(CodeKind kind) { @@ -116,8 +99,7 @@ inline constexpr bool CodeKindCanTierUp(CodeKind kind) { // The optimization marker field on the feedback vector has a dual purpose of // controlling the tier-up workflow, and caching the produced code object for -// access from multiple closures. The marker is not used for all code kinds -// though, in particular it is not used when generating NCI code. +// access from multiple closures. inline constexpr bool CodeKindIsStoredInOptimizedCodeCache(CodeKind kind) { return kind == CodeKind::TURBOFAN || kind == CodeKind::TURBOPROP; } @@ -128,9 +110,6 @@ inline OptimizationTier GetTierForCodeKind(CodeKind kind) { return FLAG_turboprop_as_toptier ? OptimizationTier::kTopTier : OptimizationTier::kMidTier; } - if (kind == CodeKind::NATIVE_CONTEXT_INDEPENDENT) { - return OptimizationTier::kTopTier; - } return OptimizationTier::kNone; } @@ -169,11 +148,9 @@ DEFINE_OPERATORS_FOR_FLAGS(CodeKinds) static constexpr CodeKinds kJSFunctionCodeKindsMask{ CodeKindFlag::INTERPRETED_FUNCTION | CodeKindFlag::TURBOFAN | - CodeKindFlag::NATIVE_CONTEXT_INDEPENDENT | CodeKindFlag::TURBOPROP | - CodeKindFlag::BASELINE}; + CodeKindFlag::TURBOPROP | CodeKindFlag::BASELINE}; static constexpr CodeKinds kOptimizedJSFunctionCodeKindsMask{ - CodeKindFlag::TURBOFAN | CodeKindFlag::NATIVE_CONTEXT_INDEPENDENT | - CodeKindFlag::TURBOPROP}; + CodeKindFlag::TURBOFAN | CodeKindFlag::TURBOPROP}; } // namespace internal } // namespace v8 diff --git a/deps/v8/src/objects/code.cc b/deps/v8/src/objects/code.cc index 7268f001ce..5b4ad4406d 100644 --- a/deps/v8/src/objects/code.cc +++ b/deps/v8/src/objects/code.cc @@ -145,22 +145,42 @@ int Code::OffHeapInstructionSize() const { return d.InstructionSizeOfBuiltin(builtin_index()); } +namespace { + +// Helper function for getting an EmbeddedData that can handle un-embedded +// builtins when short builtin calls are enabled. +inline EmbeddedData EmbeddedDataWithMaybeRemappedEmbeddedBuiltins(Code code) { +#if defined(V8_COMPRESS_POINTERS_IN_ISOLATE_CAGE) + // GetIsolateFromWritableObject(*this) works for both read-only and writable + // objects when pointer compression is enabled with a per-Isolate cage. + return EmbeddedData::FromBlob(GetIsolateFromWritableObject(code)); +#elif defined(V8_COMPRESS_POINTERS_IN_SHARED_CAGE) + // When pointer compression is enabled with a shared cage, there is also a + // shared CodeRange. When short builtin calls are enabled, there is a single + // copy of the re-embedded builtins in the shared CodeRange, so use that if + // it's present. + if (FLAG_jitless) return EmbeddedData::FromBlob(); + CodeRange* code_range = CodeRange::GetProcessWideCodeRange().get(); + return (code_range && code_range->embedded_blob_code_copy() != nullptr) + ? EmbeddedData::FromBlob(code_range) + : EmbeddedData::FromBlob(); +#else + // Otherwise there is a single copy of the blob across all Isolates, use the + // global atomic variables. + return EmbeddedData::FromBlob(); +#endif +} + +} // namespace + Address Code::OffHeapInstructionStart() const { DCHECK(is_off_heap_trampoline()); if (Isolate::CurrentEmbeddedBlobCode() == nullptr) { return raw_instruction_size(); } - // TODO(11527): pass Isolate as an argument. - // GetIsolateFromWritableObject(*this) works for both read-only and writable - // objects here because short builtin calls feature requires pointer - // compression. - // We don't have to check the Isolate::is_short_builtin_calls_enabled() value - // because if the short builtin calls wasn't actually enabled because of not - // enough memory, the FromBlob(isolate) would still be the correct one to use. - EmbeddedData d = - FLAG_short_builtin_calls - ? EmbeddedData::FromBlob(GetIsolateFromWritableObject(*this)) - : EmbeddedData::FromBlob(); + + // TODO(11527): pass Isolate as an argument for getting the EmbeddedData. + EmbeddedData d = EmbeddedDataWithMaybeRemappedEmbeddedBuiltins(*this); return d.InstructionStartOfBuiltin(builtin_index()); } @@ -169,17 +189,9 @@ Address Code::OffHeapInstructionEnd() const { if (Isolate::CurrentEmbeddedBlobCode() == nullptr) { return raw_instruction_size(); } - // TODO(11527): pass Isolate as an argument. - // GetIsolateFromWritableObject(*this) works for both read-only and writable - // objects here because short builtin calls feature requires pointer - // compression. - // We don't have to check the Isolate::is_short_builtin_calls_enabled() value - // because if the short builtin calls wasn't actually enabled because of not - // enough memory, the FromBlob(isolate) would still be the correct one to use. - EmbeddedData d = - FLAG_short_builtin_calls - ? EmbeddedData::FromBlob(GetIsolateFromWritableObject(*this)) - : EmbeddedData::FromBlob(); + + // TODO(11527): pass Isolate as an argument for getting the EmbeddedData. + EmbeddedData d = EmbeddedDataWithMaybeRemappedEmbeddedBuiltins(*this); return d.InstructionStartOfBuiltin(builtin_index()) + d.InstructionSizeOfBuiltin(builtin_index()); } @@ -299,11 +311,12 @@ bool Code::IsIsolateIndependent(Isolate* isolate) { RelocInfo::ModeMask(RelocInfo::WASM_STUB_CALL))); #if defined(V8_TARGET_ARCH_PPC) || defined(V8_TARGET_ARCH_PPC64) || \ - defined(V8_TARGET_ARCH_MIPS64) || defined(V8_TARGET_ARCH_RISCV64) + defined(V8_TARGET_ARCH_MIPS64) return RelocIterator(*this, kModeMask).done(); #elif defined(V8_TARGET_ARCH_X64) || defined(V8_TARGET_ARCH_ARM64) || \ defined(V8_TARGET_ARCH_ARM) || defined(V8_TARGET_ARCH_MIPS) || \ - defined(V8_TARGET_ARCH_S390) || defined(V8_TARGET_ARCH_IA32) + defined(V8_TARGET_ARCH_S390) || defined(V8_TARGET_ARCH_IA32) || \ + defined(V8_TARGET_ARCH_RISCV64) for (RelocIterator it(*this, kModeMask); !it.done(); it.next()) { // On these platforms we emit relative builtin-to-builtin // jumps for isolate independent builtins in the snapshot. They are later @@ -325,67 +338,6 @@ bool Code::IsIsolateIndependent(Isolate* isolate) { return true; } -// Multiple native contexts live on the same heap, and V8 currently -// draws no clear distinction between native-context-dependent and -// independent objects. A good guideline is "objects embedded into -// bytecode are nc-independent", since bytecode is shared between -// native contexts. Among others, this is the case for ScopeInfo, -// SharedFunctionInfo, String, etc. -bool Code::IsNativeContextIndependent(Isolate* isolate) { - static constexpr int kModeMask = - RelocInfo::AllRealModesMask() & - ~RelocInfo::ModeMask(RelocInfo::CONST_POOL) & - ~RelocInfo::ModeMask(RelocInfo::EXTERNAL_REFERENCE) & - ~RelocInfo::ModeMask(RelocInfo::INTERNAL_REFERENCE) & - ~RelocInfo::ModeMask(RelocInfo::INTERNAL_REFERENCE_ENCODED) & - ~RelocInfo::ModeMask(RelocInfo::OFF_HEAP_TARGET) & - ~RelocInfo::ModeMask(RelocInfo::RUNTIME_ENTRY) & - ~RelocInfo::ModeMask(RelocInfo::VENEER_POOL); - STATIC_ASSERT(kModeMask == - (RelocInfo::ModeMask(RelocInfo::CODE_TARGET) | - RelocInfo::ModeMask(RelocInfo::RELATIVE_CODE_TARGET) | - RelocInfo::ModeMask(RelocInfo::COMPRESSED_EMBEDDED_OBJECT) | - RelocInfo::ModeMask(RelocInfo::FULL_EMBEDDED_OBJECT) | - RelocInfo::ModeMask(RelocInfo::DATA_EMBEDDED_OBJECT) | - RelocInfo::ModeMask(RelocInfo::WASM_CALL) | - RelocInfo::ModeMask(RelocInfo::WASM_STUB_CALL))); - - bool is_independent = true; - for (RelocIterator it(*this, kModeMask); !it.done(); it.next()) { - if (RelocInfo::IsEmbeddedObjectMode(it.rinfo()->rmode())) { - HeapObject o = it.rinfo()->target_object(); - // TODO(jgruber,v8:8888): Extend this with further NCI objects, - // and define a more systematic - // IsNativeContextIndependent<T>() predicate. - if (o.IsString()) continue; - if (o.IsScopeInfo()) continue; - if (o.IsHeapNumber()) continue; - if (o.IsBigInt()) continue; - if (o.IsSharedFunctionInfo()) continue; - if (o.IsArrayBoilerplateDescription()) continue; - if (o.IsObjectBoilerplateDescription()) continue; - if (o.IsTemplateObjectDescription()) continue; - if (o.IsFixedArray()) { - // Some uses of FixedArray are valid. - // 1. Passed as arg to %DeclareGlobals, contains only strings - // and SFIs. - // 2. Passed as arg to %DefineClass. No well defined contents. - // .. ? - // TODO(jgruber): Consider assigning dedicated instance - // types instead of assuming fixed arrays are okay. - continue; - } - // Other objects are expected to be context-dependent. - PrintF("Found native-context-dependent object:\n"); - o.Print(); - o.map().Print(); - } - is_independent = false; - } - - return is_independent; -} - bool Code::Inlines(SharedFunctionInfo sfi) { // We can only check for inlining for optimized code. DCHECK(is_optimized_code()); @@ -474,7 +426,7 @@ void print_pc(std::ostream& os, int pc) { } } // anonymous namespace -void DeoptimizationData::DeoptimizationDataPrint(std::ostream& os) { // NOLINT +void DeoptimizationData::DeoptimizationDataPrint(std::ostream& os) { if (length() == 0) { os << "Deoptimization Input Data invalidated by lazy deoptimization\n"; return; diff --git a/deps/v8/src/objects/code.h b/deps/v8/src/objects/code.h index d431701936..fbd52505ee 100644 --- a/deps/v8/src/objects/code.h +++ b/deps/v8/src/objects/code.h @@ -447,7 +447,6 @@ class Code : public HeapObject { inline HandlerTable::CatchPrediction GetBuiltinCatchPrediction(); bool IsIsolateIndependent(Isolate* isolate); - bool IsNativeContextIndependent(Isolate* isolate); inline bool CanContainWeakObjects(); @@ -982,7 +981,7 @@ class DeoptimizationData : public FixedArray { DECL_CAST(DeoptimizationData) #ifdef ENABLE_DISASSEMBLER - void DeoptimizationDataPrint(std::ostream& os); // NOLINT + void DeoptimizationDataPrint(std::ostream& os); #endif private: diff --git a/deps/v8/src/objects/compilation-cache-table.cc b/deps/v8/src/objects/compilation-cache-table.cc index 9ef1468975..b934554116 100644 --- a/deps/v8/src/objects/compilation-cache-table.cc +++ b/deps/v8/src/objects/compilation-cache-table.cc @@ -295,16 +295,6 @@ Handle<Object> CompilationCacheTable::LookupRegExp(Handle<String> src, return Handle<Object>(get(EntryToIndex(entry) + 1), isolate); } -MaybeHandle<Code> CompilationCacheTable::LookupCode( - Handle<SharedFunctionInfo> key) { - Isolate* isolate = GetIsolate(); - DisallowGarbageCollection no_gc; - CodeKey k(key); - InternalIndex entry = FindEntry(isolate, &k); - if (entry.is_not_found()) return {}; - return Handle<Code>(Code::cast(get(EntryToIndex(entry) + 1)), isolate); -} - Handle<CompilationCacheTable> CompilationCacheTable::PutScript( Handle<CompilationCacheTable> cache, Handle<String> src, LanguageMode language_mode, Handle<SharedFunctionInfo> value, @@ -373,30 +363,6 @@ Handle<CompilationCacheTable> CompilationCacheTable::PutRegExp( return cache; } -Handle<CompilationCacheTable> CompilationCacheTable::PutCode( - Isolate* isolate, Handle<CompilationCacheTable> cache, - Handle<SharedFunctionInfo> key, Handle<Code> value) { - CodeKey k(key); - - { - InternalIndex entry = cache->FindEntry(isolate, &k); - if (entry.is_found()) { - // Update. - cache->set(EntryToIndex(entry), *key); - cache->set(EntryToIndex(entry) + 1, *value); - return cache; - } - } - - // Insert. - cache = EnsureCapacity(isolate, cache); - InternalIndex entry = cache->FindInsertionEntry(isolate, k.Hash()); - cache->set(EntryToIndex(entry), *key); - cache->set(EntryToIndex(entry) + 1, *value); - cache->ElementAdded(); - return cache; -} - void CompilationCacheTable::Age(Isolate* isolate) { DisallowGarbageCollection no_gc; for (InternalIndex entry : IterateEntries()) { diff --git a/deps/v8/src/objects/compilation-cache-table.h b/deps/v8/src/objects/compilation-cache-table.h index 2fd548bfe5..e39e013c61 100644 --- a/deps/v8/src/objects/compilation-cache-table.h +++ b/deps/v8/src/objects/compilation-cache-table.h @@ -123,13 +123,6 @@ class CompilationCacheTable Isolate* isolate, Handle<CompilationCacheTable> cache, Handle<String> src, JSRegExp::Flags flags, Handle<FixedArray> value); - // The Code cache shares native-context-independent (NCI) code between - // contexts. - MaybeHandle<Code> LookupCode(Handle<SharedFunctionInfo> key); - static Handle<CompilationCacheTable> PutCode( - Isolate* isolate, Handle<CompilationCacheTable> cache, - Handle<SharedFunctionInfo> key, Handle<Code> value); - void Remove(Object value); void Age(Isolate* isolate); diff --git a/deps/v8/src/objects/compressed-slots-inl.h b/deps/v8/src/objects/compressed-slots-inl.h index 54c828d919..b550c9f851 100644 --- a/deps/v8/src/objects/compressed-slots-inl.h +++ b/deps/v8/src/objects/compressed-slots-inl.h @@ -28,6 +28,13 @@ bool CompressedObjectSlot::contains_value(Address raw_value) const { static_cast<uint32_t>(static_cast<Tagged_t>(raw_value)); } +bool CompressedObjectSlot::contains_map_value(Address raw_value) const { + // Simply forward to contains_value because map packing is not supported with + // pointer compression. + DCHECK(!V8_MAP_PACKING_BOOL); + return contains_value(raw_value); +} + Object CompressedObjectSlot::operator*() const { Tagged_t value = *location(); return Object(DecompressTaggedAny(address(), value)); @@ -42,6 +49,20 @@ void CompressedObjectSlot::store(Object value) const { *location() = CompressTagged(value.ptr()); } +void CompressedObjectSlot::store_map(Map map) const { + // Simply forward to store because map packing is not supported with pointer + // compression. + DCHECK(!V8_MAP_PACKING_BOOL); + store(map); +} + +Map CompressedObjectSlot::load_map() const { + // Simply forward to Relaxed_Load because map packing is not supported with + // pointer compression. + DCHECK(!V8_MAP_PACKING_BOOL); + return Map::unchecked_cast(Relaxed_Load()); +} + Object CompressedObjectSlot::Acquire_Load() const { AtomicTagged_t value = AsAtomicTagged::Acquire_Load(location()); return Object(DecompressTaggedAny(address(), value)); diff --git a/deps/v8/src/objects/compressed-slots.h b/deps/v8/src/objects/compressed-slots.h index 7737e685fe..f13fc15adc 100644 --- a/deps/v8/src/objects/compressed-slots.h +++ b/deps/v8/src/objects/compressed-slots.h @@ -37,12 +37,16 @@ class CompressedObjectSlot : public SlotBase<CompressedObjectSlot, Tagged_t> { // Compares memory representation of a value stored in the slot with given // raw value without decompression. inline bool contains_value(Address raw_value) const; + inline bool contains_map_value(Address raw_value) const; // TODO(leszeks): Consider deprecating the operator* load, and always pass the // Isolate. inline Object operator*() const; inline Object load(PtrComprCageBase cage_base) const; inline void store(Object value) const; + inline void store_map(Map map) const; + + inline Map load_map() const; inline Object Acquire_Load() const; inline Object Relaxed_Load() const; diff --git a/deps/v8/src/objects/contexts-inl.h b/deps/v8/src/objects/contexts-inl.h index 356df687de..d744ffc681 100644 --- a/deps/v8/src/objects/contexts-inl.h +++ b/deps/v8/src/objects/contexts-inl.h @@ -55,38 +55,54 @@ NEVER_READ_ONLY_SPACE_IMPL(Context) CAST_ACCESSOR(NativeContext) -V8_INLINE Object Context::get(int index) const { return elements(index); } -V8_INLINE Object Context::get(PtrComprCageBase cage_base, int index) const { - return elements(cage_base, index); -} -V8_INLINE void Context::set(int index, Object value) { - set_elements(index, value); +Object Context::get(int index) const { + PtrComprCageBase cage_base = GetPtrComprCageBase(*this); + return get(cage_base, index); } -V8_INLINE void Context::set(int index, Object value, WriteBarrierMode mode) { - set_elements(index, value, mode); + +Object Context::get(PtrComprCageBase cage_base, int index) const { + DCHECK_LT(static_cast<unsigned int>(index), + static_cast<unsigned int>(length())); + return TaggedField<Object>::Relaxed_Load(cage_base, *this, + OffsetOfElementAt(index)); } -void Context::set_scope_info(ScopeInfo scope_info, WriteBarrierMode mode) { - set(SCOPE_INFO_INDEX, scope_info, mode); +void Context::set(int index, Object value, WriteBarrierMode mode) { + DCHECK_LT(static_cast<unsigned int>(index), + static_cast<unsigned int>(length())); + const int offset = OffsetOfElementAt(index); + RELAXED_WRITE_FIELD(*this, offset, value); + CONDITIONAL_WRITE_BARRIER(*this, offset, value, mode); } -Object Context::synchronized_get(int index) const { +Object Context::get(int index, AcquireLoadTag tag) const { PtrComprCageBase cage_base = GetPtrComprCageBase(*this); - return synchronized_get(cage_base, index); + return get(cage_base, index, tag); } -Object Context::synchronized_get(PtrComprCageBase cage_base, int index) const { +Object Context::get(PtrComprCageBase cage_base, int index, + AcquireLoadTag) const { DCHECK_LT(static_cast<unsigned int>(index), - static_cast<unsigned int>(this->length())); + static_cast<unsigned int>(length())); return ACQUIRE_READ_FIELD(*this, OffsetOfElementAt(index)); } -void Context::synchronized_set(int index, Object value) { +void Context::set(int index, Object value, WriteBarrierMode mode, + ReleaseStoreTag) { DCHECK_LT(static_cast<unsigned int>(index), - static_cast<unsigned int>(this->length())); + static_cast<unsigned int>(length())); const int offset = OffsetOfElementAt(index); RELEASE_WRITE_FIELD(*this, offset, value); - WRITE_BARRIER(*this, offset, value); + CONDITIONAL_WRITE_BARRIER(*this, offset, value, mode); +} + +void NativeContext::set(int index, Object value, WriteBarrierMode mode, + ReleaseStoreTag tag) { + Context::set(index, value, mode, tag); +} + +void Context::set_scope_info(ScopeInfo scope_info, WriteBarrierMode mode) { + set(SCOPE_INFO_INDEX, scope_info, mode); } Object Context::unchecked_previous() { return get(PREVIOUS_INDEX); } @@ -161,18 +177,22 @@ bool Context::HasSameSecurityTokenAs(Context that) const { that.native_context().security_token(); } -#define NATIVE_CONTEXT_FIELD_ACCESSORS(index, type, name) \ - void Context::set_##name(type value) { \ - DCHECK(IsNativeContext()); \ - set(index, value); \ - } \ - bool Context::is_##name(type value) const { \ - DCHECK(IsNativeContext()); \ - return type::cast(get(index)) == value; \ - } \ - type Context::name() const { \ - DCHECK(IsNativeContext()); \ - return type::cast(get(index)); \ +#define NATIVE_CONTEXT_FIELD_ACCESSORS(index, type, name) \ + void Context::set_##name(type value) { \ + DCHECK(IsNativeContext()); \ + set(index, value, UPDATE_WRITE_BARRIER, kReleaseStore); \ + } \ + bool Context::is_##name(type value) const { \ + DCHECK(IsNativeContext()); \ + return type::cast(get(index)) == value; \ + } \ + type Context::name() const { \ + DCHECK(IsNativeContext()); \ + return type::cast(get(index)); \ + } \ + type Context::name(AcquireLoadTag tag) const { \ + DCHECK(IsNativeContext()); \ + return type::cast(get(index, tag)); \ } NATIVE_CONTEXT_FIELDS(NATIVE_CONTEXT_FIELD_ACCESSORS) #undef NATIVE_CONTEXT_FIELD_ACCESSORS @@ -242,8 +262,9 @@ Map Context::GetInitialJSArrayMap(ElementsKind kind) const { } DEF_GETTER(NativeContext, microtask_queue, MicrotaskQueue*) { + Isolate* isolate = GetIsolateForHeapSandbox(*this); return reinterpret_cast<MicrotaskQueue*>(ReadExternalPointerField( - kMicrotaskQueueOffset, cage_base, kNativeContextMicrotaskQueueTag)); + kMicrotaskQueueOffset, isolate, kNativeContextMicrotaskQueueTag)); } void NativeContext::AllocateExternalPointerEntries(Isolate* isolate) { @@ -259,11 +280,13 @@ void NativeContext::set_microtask_queue(Isolate* isolate, void NativeContext::synchronized_set_script_context_table( ScriptContextTable script_context_table) { - synchronized_set(SCRIPT_CONTEXT_TABLE_INDEX, script_context_table); + set(SCRIPT_CONTEXT_TABLE_INDEX, script_context_table, UPDATE_WRITE_BARRIER, + kReleaseStore); } ScriptContextTable NativeContext::synchronized_script_context_table() const { - return ScriptContextTable::cast(synchronized_get(SCRIPT_CONTEXT_TABLE_INDEX)); + return ScriptContextTable::cast( + get(SCRIPT_CONTEXT_TABLE_INDEX, kAcquireLoad)); } OSROptimizedCodeCache NativeContext::GetOSROptimizedCodeCache() { diff --git a/deps/v8/src/objects/contexts.cc b/deps/v8/src/objects/contexts.cc index 771fbea40b..eade27d934 100644 --- a/deps/v8/src/objects/contexts.cc +++ b/deps/v8/src/objects/contexts.cc @@ -55,6 +55,7 @@ bool ScriptContextTable::Lookup(Isolate* isolate, ScriptContextTable table, for (int i = 0; i < table.synchronized_used(); i++) { Context context = table.get_context(i); DCHECK(context.IsScriptContext()); + result->is_repl_mode = context.scope_info().IsReplModeScope(); int slot_index = ScopeInfo::ContextSlotIndex( context.scope_info(), name, &result->mode, &result->init_flag, &result->maybe_assigned_flag, &is_static_flag); @@ -415,11 +416,11 @@ void NativeContext::AddOptimizedCode(Code code) { DCHECK(CodeKindCanDeoptimize(code.kind())); DCHECK(code.next_code_link().IsUndefined()); code.set_next_code_link(get(OPTIMIZED_CODE_LIST)); - set(OPTIMIZED_CODE_LIST, code, UPDATE_WEAK_WRITE_BARRIER); + set(OPTIMIZED_CODE_LIST, code, UPDATE_WEAK_WRITE_BARRIER, kReleaseStore); } void NativeContext::SetOptimizedCodeListHead(Object head) { - set(OPTIMIZED_CODE_LIST, head, UPDATE_WEAK_WRITE_BARRIER); + set(OPTIMIZED_CODE_LIST, head, UPDATE_WEAK_WRITE_BARRIER, kReleaseStore); } Object NativeContext::OptimizedCodeListHead() { @@ -427,7 +428,7 @@ Object NativeContext::OptimizedCodeListHead() { } void NativeContext::SetDeoptimizedCodeListHead(Object head) { - set(DEOPTIMIZED_CODE_LIST, head, UPDATE_WEAK_WRITE_BARRIER); + set(DEOPTIMIZED_CODE_LIST, head, UPDATE_WEAK_WRITE_BARRIER, kReleaseStore); } Object NativeContext::DeoptimizedCodeListHead() { diff --git a/deps/v8/src/objects/contexts.h b/deps/v8/src/objects/contexts.h index 62adcc4369..2c8988f13e 100644 --- a/deps/v8/src/objects/contexts.h +++ b/deps/v8/src/objects/contexts.h @@ -50,7 +50,8 @@ enum ContextLookupFlags { V(MATH_POW_INDEX, JSFunction, math_pow) \ V(PROMISE_INTERNAL_CONSTRUCTOR_INDEX, JSFunction, \ promise_internal_constructor) \ - V(PROMISE_THEN_INDEX, JSFunction, promise_then) + V(PROMISE_THEN_INDEX, JSFunction, promise_then) \ + V(FUNCTION_PROTOTYPE_APPLY_INDEX, JSFunction, function_prototype_apply) #define NATIVE_CONTEXT_FIELDS(V) \ V(GLOBAL_PROXY_INDEX, JSGlobalProxy, global_proxy_object) \ @@ -111,6 +112,8 @@ enum ContextLookupFlags { V(GENERATOR_OBJECT_PROTOTYPE_MAP_INDEX, Map, generator_object_prototype_map) \ V(ASYNC_GENERATOR_OBJECT_PROTOTYPE_MAP_INDEX, Map, \ async_generator_object_prototype_map) \ + V(GROWABLE_SHARED_ARRAY_BUFFER_FUN_INDEX, JSFunction, \ + growable_shared_array_buffer_fun) \ V(INITIAL_ARRAY_ITERATOR_MAP_INDEX, Map, initial_array_iterator_map) \ V(INITIAL_ARRAY_ITERATOR_PROTOTYPE_INDEX, JSObject, \ initial_array_iterator_prototype) \ @@ -209,6 +212,18 @@ enum ContextLookupFlags { V(PROXY_MAP_INDEX, Map, proxy_map) \ V(PROXY_REVOCABLE_RESULT_MAP_INDEX, Map, proxy_revocable_result_map) \ V(PROMISE_PROTOTYPE_INDEX, JSObject, promise_prototype) \ + V(RAB_GSAB_UINT8_ARRAY_MAP_INDEX, Map, rab_gsab_uint8_array_map) \ + V(RAB_GSAB_INT8_ARRAY_MAP_INDEX, Map, rab_gsab_int8_array_map) \ + V(RAB_GSAB_UINT16_ARRAY_MAP_INDEX, Map, rab_gsab_uint16_array_map) \ + V(RAB_GSAB_INT16_ARRAY_MAP_INDEX, Map, rab_gsab_int16_array_map) \ + V(RAB_GSAB_UINT32_ARRAY_MAP_INDEX, Map, rab_gsab_uint32_array_map) \ + V(RAB_GSAB_INT32_ARRAY_MAP_INDEX, Map, rab_gsab_int32_array_map) \ + V(RAB_GSAB_FLOAT32_ARRAY_MAP_INDEX, Map, rab_gsab_float32_array_map) \ + V(RAB_GSAB_FLOAT64_ARRAY_MAP_INDEX, Map, rab_gsab_float64_array_map) \ + V(RAB_GSAB_UINT8_CLAMPED_ARRAY_MAP_INDEX, Map, \ + rab_gsab_uint8_clamped_array_map) \ + V(RAB_GSAB_BIGUINT64_ARRAY_MAP_INDEX, Map, rab_gsab_biguint64_array_map) \ + V(RAB_GSAB_BIGINT64_ARRAY_MAP_INDEX, Map, rab_gsab_bigint64_array_map) \ V(RECORDER_CONTEXT_ID, Object, recorder_context_id) \ V(REGEXP_EXEC_FUNCTION_INDEX, JSFunction, regexp_exec_function) \ V(REGEXP_FUNCTION_INDEX, JSFunction, regexp_function) \ @@ -225,6 +240,7 @@ enum ContextLookupFlags { V(REGEXP_SPLIT_FUNCTION_INDEX, JSFunction, regexp_split_function) \ V(INITIAL_REGEXP_STRING_ITERATOR_PROTOTYPE_MAP_INDEX, Map, \ initial_regexp_string_iterator_prototype_map) \ + V(RESIZABLE_ARRAY_BUFFER_FUN_INDEX, JSFunction, resizable_array_buffer_fun) \ V(SCRIPT_CONTEXT_TABLE_INDEX, ScriptContextTable, script_context_table) \ V(SCRIPT_EXECUTION_CALLBACK_INDEX, Object, script_execution_callback) \ V(SECURITY_TOKEN_INDEX, Object, security_token) \ @@ -342,6 +358,9 @@ class ScriptContextTable : public FixedArray { struct LookupResult { int context_index; int slot_index; + // repl_mode flag is needed to disable inlining of 'const' variables in REPL + // mode. + bool is_repl_mode; VariableMode mode; InitializationFlag init_flag; MaybeAssignedFlag maybe_assigned_flag; @@ -426,16 +445,18 @@ class Context : public TorqueGeneratedContext<Context, HeapObject> { NEVER_READ_ONLY_SPACE // Setter and getter for elements. + // Note the plain accessors use relaxed semantics. + // TODO(jgruber): Make that explicit through tags. V8_INLINE Object get(int index) const; V8_INLINE Object get(PtrComprCageBase cage_base, int index) const; - V8_INLINE void set(int index, Object value); - // Setter with explicit barrier mode. - V8_INLINE void set(int index, Object value, WriteBarrierMode mode); - // Setter and getter with synchronization semantics. - V8_INLINE Object synchronized_get(int index) const; - V8_INLINE Object synchronized_get(PtrComprCageBase cage_base, - int index) const; - V8_INLINE void synchronized_set(int index, Object value); + V8_INLINE void set(int index, Object value, + WriteBarrierMode mode = UPDATE_WRITE_BARRIER); + // Accessors with acquire-release semantics. + V8_INLINE Object get(int index, AcquireLoadTag) const; + V8_INLINE Object get(PtrComprCageBase cage_base, int index, + AcquireLoadTag) const; + V8_INLINE void set(int index, Object value, WriteBarrierMode mode, + ReleaseStoreTag); static const int kScopeInfoOffset = kElementsOffset; static const int kPreviousOffset = kScopeInfoOffset + kTaggedSize; @@ -452,7 +473,7 @@ class Context : public TorqueGeneratedContext<Context, HeapObject> { V8_INLINE static constexpr int SizeFor(int length) { // TODO(v8:9287): This is a workaround for GCMole build failures. int result = kElementsOffset + length * kTaggedSize; - CONSTEXPR_DCHECK(TorqueGeneratedContext::SizeFor(length) == result); + DCHECK_EQ(TorqueGeneratedContext::SizeFor(length), result); return result; } @@ -528,8 +549,6 @@ class Context : public TorqueGeneratedContext<Context, HeapObject> { inline Object unchecked_previous(); inline Context previous(); - inline void set_previous(Context context, - WriteBarrierMode mode = UPDATE_WRITE_BARRIER); inline Object next_context_link(); @@ -587,7 +606,8 @@ class Context : public TorqueGeneratedContext<Context, HeapObject> { #define NATIVE_CONTEXT_FIELD_ACCESSORS(index, type, name) \ inline void set_##name(type value); \ inline bool is_##name(type value) const; \ - inline type name() const; + inline type name() const; \ + inline type name(AcquireLoadTag) const; NATIVE_CONTEXT_FIELDS(NATIVE_CONTEXT_FIELD_ACCESSORS) #undef NATIVE_CONTEXT_FIELD_ACCESSORS @@ -643,6 +663,10 @@ class Context : public TorqueGeneratedContext<Context, HeapObject> { static bool IsBootstrappingOrValidParentContext(Object object, Context kid); #endif + friend class Factory; + inline void set_previous(Context context, + WriteBarrierMode mode = UPDATE_WRITE_BARRIER); + TQ_OBJECT_CONSTRUCTORS(Context) }; @@ -653,6 +677,15 @@ class NativeContext : public Context { inline void AllocateExternalPointerEntries(Isolate* isolate); + // NativeContext fields are read concurrently from background threads; any + // concurrent writes of affected fields must have acquire-release semantics, + // thus we hide the non-atomic setter. Note this doesn't protect fully since + // one could still use Context::set and/or write directly using offsets (e.g. + // from CSA/Torque). + void set(int index, Object value, WriteBarrierMode mode) = delete; + V8_INLINE void set(int index, Object value, WriteBarrierMode mode, + ReleaseStoreTag); + // [microtask_queue]: pointer to the MicrotaskQueue object. DECL_GETTER(microtask_queue, MicrotaskQueue*) inline void set_microtask_queue(Isolate* isolate, MicrotaskQueue* queue); diff --git a/deps/v8/src/objects/contexts.tq b/deps/v8/src/objects/contexts.tq index 28ea1300ee..83c43cc7f5 100644 --- a/deps/v8/src/objects/contexts.tq +++ b/deps/v8/src/objects/contexts.tq @@ -13,7 +13,7 @@ class Context extends HeapObject { return *ContextSlot(this, ContextSlot::SCOPE_INFO_INDEX); } const length: Smi; - @relaxedRead @relaxedWrite elements[length]: Object; + elements[length]: Object; } extern class AwaitContext extends Context generates 'TNode<Context>'; @@ -118,6 +118,31 @@ extern enum ContextSlot extends intptr constexpr 'Context::Field' { SLOPPY_ARGUMENTS_MAP_INDEX: Slot<NativeContext, Map>, FAST_ALIASED_ARGUMENTS_MAP_INDEX: Slot<NativeContext, Map>, FUNCTION_CONTEXT_MAP_INDEX: Slot<NativeContext, Map>, + FUNCTION_PROTOTYPE_APPLY_INDEX: Slot<NativeContext, JSFunction>, + + UINT8_ARRAY_FUN_INDEX: Slot<NativeContext, JSFunction>, + INT8_ARRAY_FUN_INDEX: Slot<NativeContext, JSFunction>, + UINT16_ARRAY_FUN_INDEX: Slot<NativeContext, JSFunction>, + INT16_ARRAY_FUN_INDEX: Slot<NativeContext, JSFunction>, + UINT32_ARRAY_FUN_INDEX: Slot<NativeContext, JSFunction>, + INT32_ARRAY_FUN_INDEX: Slot<NativeContext, JSFunction>, + FLOAT32_ARRAY_FUN_INDEX: Slot<NativeContext, JSFunction>, + FLOAT64_ARRAY_FUN_INDEX: Slot<NativeContext, JSFunction>, + UINT8_CLAMPED_ARRAY_FUN_INDEX: Slot<NativeContext, JSFunction>, + BIGUINT64_ARRAY_FUN_INDEX: Slot<NativeContext, JSFunction>, + BIGINT64_ARRAY_FUN_INDEX: Slot<NativeContext, JSFunction>, + + RAB_GSAB_UINT8_ARRAY_MAP_INDEX: Slot<NativeContext, Map>, + RAB_GSAB_INT8_ARRAY_MAP_INDEX: Slot<NativeContext, Map>, + RAB_GSAB_UINT16_ARRAY_MAP_INDEX: Slot<NativeContext, Map>, + RAB_GSAB_INT16_ARRAY_MAP_INDEX: Slot<NativeContext, Map>, + RAB_GSAB_UINT32_ARRAY_MAP_INDEX: Slot<NativeContext, Map>, + RAB_GSAB_INT32_ARRAY_MAP_INDEX: Slot<NativeContext, Map>, + RAB_GSAB_FLOAT32_ARRAY_MAP_INDEX: Slot<NativeContext, Map>, + RAB_GSAB_FLOAT64_ARRAY_MAP_INDEX: Slot<NativeContext, Map>, + RAB_GSAB_UINT8_CLAMPED_ARRAY_MAP_INDEX: Slot<NativeContext, Map>, + RAB_GSAB_BIGUINT64_ARRAY_MAP_INDEX: Slot<NativeContext, Map>, + RAB_GSAB_BIGINT64_ARRAY_MAP_INDEX: Slot<NativeContext, Map>, PROMISE_FUNCTION_INDEX: Slot<NativeContext, JSFunction>, PROMISE_THEN_INDEX: Slot<NativeContext, JSFunction>, diff --git a/deps/v8/src/objects/debug-objects-inl.h b/deps/v8/src/objects/debug-objects-inl.h index 8c8b013e23..e9e7c08f4c 100644 --- a/deps/v8/src/objects/debug-objects-inl.h +++ b/deps/v8/src/objects/debug-objects-inl.h @@ -36,12 +36,6 @@ BIT_FIELD_ACCESSORS(DebugInfo, debugger_hints, computed_debug_is_blackboxed, BIT_FIELD_ACCESSORS(DebugInfo, debugger_hints, debugging_id, DebugInfo::DebuggingIdBits) -// TODO(nicohartmann@, v8:11122): Remove once Torque can generate them. -RELEASE_ACQUIRE_ACCESSORS(DebugInfo, debug_bytecode_array, HeapObject, - kDebugBytecodeArrayOffset) -RELEASE_ACQUIRE_ACCESSORS(DebugInfo, original_bytecode_array, HeapObject, - kOriginalBytecodeArrayOffset) - bool DebugInfo::HasInstrumentedBytecodeArray() { return debug_bytecode_array(kAcquireLoad).IsBytecodeArray(); } diff --git a/deps/v8/src/objects/debug-objects.cc b/deps/v8/src/objects/debug-objects.cc index ecb24632ef..d3caa12233 100644 --- a/deps/v8/src/objects/debug-objects.cc +++ b/deps/v8/src/objects/debug-objects.cc @@ -14,18 +14,23 @@ namespace v8 { namespace internal { bool DebugInfo::IsEmpty() const { - return flags() == kNone && debugger_hints() == 0; + return flags(kRelaxedLoad) == kNone && debugger_hints() == 0; } -bool DebugInfo::HasBreakInfo() const { return (flags() & kHasBreakInfo) != 0; } +bool DebugInfo::HasBreakInfo() const { + return (flags(kRelaxedLoad) & kHasBreakInfo) != 0; +} DebugInfo::ExecutionMode DebugInfo::DebugExecutionMode() const { - return (flags() & kDebugExecutionMode) != 0 ? kSideEffects : kBreakpoints; + return (flags(kRelaxedLoad) & kDebugExecutionMode) != 0 ? kSideEffects + : kBreakpoints; } void DebugInfo::SetDebugExecutionMode(ExecutionMode value) { - set_flags(value == kSideEffects ? (flags() | kDebugExecutionMode) - : (flags() & ~kDebugExecutionMode)); + set_flags(value == kSideEffects + ? (flags(kRelaxedLoad) | kDebugExecutionMode) + : (flags(kRelaxedLoad) & ~kDebugExecutionMode), + kRelaxedStore); } void DebugInfo::ClearBreakInfo(Isolate* isolate) { @@ -45,27 +50,29 @@ void DebugInfo::ClearBreakInfo(Isolate* isolate) { } set_break_points(ReadOnlyRoots(isolate).empty_fixed_array()); - int new_flags = flags(); + int new_flags = flags(kRelaxedLoad); new_flags &= ~kHasBreakInfo & ~kPreparedForDebugExecution; new_flags &= ~kBreakAtEntry & ~kCanBreakAtEntry; new_flags &= ~kDebugExecutionMode; - set_flags(new_flags); + set_flags(new_flags, kRelaxedStore); } void DebugInfo::SetBreakAtEntry() { DCHECK(CanBreakAtEntry()); - set_flags(flags() | kBreakAtEntry); + set_flags(flags(kRelaxedLoad) | kBreakAtEntry, kRelaxedStore); } void DebugInfo::ClearBreakAtEntry() { DCHECK(CanBreakAtEntry()); - set_flags(flags() & ~kBreakAtEntry); + set_flags(flags(kRelaxedLoad) & ~kBreakAtEntry, kRelaxedStore); } -bool DebugInfo::BreakAtEntry() const { return (flags() & kBreakAtEntry) != 0; } +bool DebugInfo::BreakAtEntry() const { + return (flags(kRelaxedLoad) & kBreakAtEntry) != 0; +} bool DebugInfo::CanBreakAtEntry() const { - return (flags() & kCanBreakAtEntry) != 0; + return (flags(kRelaxedLoad) & kCanBreakAtEntry) != 0; } // Check if there is a break point at this source position. @@ -199,15 +206,15 @@ Handle<Object> DebugInfo::FindBreakPointInfo(Isolate* isolate, } bool DebugInfo::HasCoverageInfo() const { - return (flags() & kHasCoverageInfo) != 0; + return (flags(kRelaxedLoad) & kHasCoverageInfo) != 0; } void DebugInfo::ClearCoverageInfo(Isolate* isolate) { if (HasCoverageInfo()) { set_coverage_info(ReadOnlyRoots(isolate).undefined_value()); - int new_flags = flags() & ~kHasCoverageInfo; - set_flags(new_flags); + int new_flags = flags(kRelaxedLoad) & ~kHasCoverageInfo; + set_flags(new_flags, kRelaxedStore); } } diff --git a/deps/v8/src/objects/debug-objects.h b/deps/v8/src/objects/debug-objects.h index e92a3026f8..77c9b80e65 100644 --- a/deps/v8/src/objects/debug-objects.h +++ b/deps/v8/src/objects/debug-objects.h @@ -37,7 +37,10 @@ class DebugInfo : public TorqueGeneratedDebugInfo<DebugInfo, Struct> { // --- Debug execution --- // ----------------------- - enum ExecutionMode { kBreakpoints = 0, kSideEffects = kDebugExecutionMode }; + enum ExecutionMode : uint8_t { + kBreakpoints = 0, + kSideEffects = kDebugExecutionMode + }; // Returns current debug execution mode. Debug execution mode defines by // applied to bytecode patching. False for breakpoints, true for side effect @@ -45,9 +48,6 @@ class DebugInfo : public TorqueGeneratedDebugInfo<DebugInfo, Struct> { ExecutionMode DebugExecutionMode() const; void SetDebugExecutionMode(ExecutionMode value); - DECL_RELEASE_ACQUIRE_ACCESSORS(debug_bytecode_array, HeapObject) - DECL_RELEASE_ACQUIRE_ACCESSORS(original_bytecode_array, HeapObject) - // Specifies whether the associated function has an instrumented bytecode // array. If so, OriginalBytecodeArray returns the non-instrumented bytecode, // and DebugBytecodeArray returns the instrumented bytecode. diff --git a/deps/v8/src/objects/debug-objects.tq b/deps/v8/src/objects/debug-objects.tq index b8ca86781f..1df2e7a484 100644 --- a/deps/v8/src/objects/debug-objects.tq +++ b/deps/v8/src/objects/debug-objects.tq @@ -44,14 +44,18 @@ extern class DebugInfo extends Struct { script: Undefined|Script; // The original uninstrumented bytecode array for functions with break // points - the instrumented bytecode is held in the shared function info. + @cppAcquireLoad + @cppReleaseStore original_bytecode_array: Undefined|BytecodeArray; // The debug instrumented bytecode array for functions with break points // - also pointed to by the shared function info. + @cppAcquireLoad + @cppReleaseStore debug_bytecode_array: Undefined|BytecodeArray; // Fixed array holding status information for each active break point. break_points: FixedArray; // A bitfield that lists uses of the current instance. - flags: SmiTagged<DebugInfoFlags>; + @cppRelaxedLoad @cppRelaxedStore flags: SmiTagged<DebugInfoFlags>; coverage_info: CoverageInfo|Undefined; } diff --git a/deps/v8/src/objects/descriptor-array.h b/deps/v8/src/objects/descriptor-array.h index 327931a421..1a9eb7fae1 100644 --- a/deps/v8/src/objects/descriptor-array.h +++ b/deps/v8/src/objects/descriptor-array.h @@ -133,9 +133,9 @@ class DescriptorArray // Allocates a DescriptorArray, but returns the singleton // empty descriptor array object if number_of_descriptors is 0. - template <typename LocalIsolate> + template <typename IsolateT> V8_EXPORT_PRIVATE static Handle<DescriptorArray> Allocate( - LocalIsolate* isolate, int nof_descriptors, int slack, + IsolateT* isolate, int nof_descriptors, int slack, AllocationType allocation = AllocationType::kYoung); void Initialize(EnumCache enum_cache, HeapObject undefined_value, diff --git a/deps/v8/src/objects/dictionary.h b/deps/v8/src/objects/dictionary.h index be255f8162..a2db1b6289 100644 --- a/deps/v8/src/objects/dictionary.h +++ b/deps/v8/src/objects/dictionary.h @@ -76,9 +76,9 @@ class EXPORT_TEMPLATE_DECLARE(V8_EXPORT_PRIVATE) Dictionary // Garbage collection support. inline ObjectSlot RawFieldOfValueAt(InternalIndex entry); - template <typename LocalIsolate> + template <typename IsolateT> V8_WARN_UNUSED_RESULT static Handle<Derived> Add( - LocalIsolate* isolate, Handle<Derived> dictionary, Key key, + IsolateT* isolate, Handle<Derived> dictionary, Key key, Handle<Object> value, PropertyDetails details, InternalIndex* entry_out = nullptr); @@ -142,9 +142,9 @@ class EXPORT_TEMPLATE_DECLARE(V8_EXPORT_PRIVATE) BaseNameDictionary inline int Hash() const; // Creates a new dictionary. - template <typename LocalIsolate> + template <typename IsolateT> V8_WARN_UNUSED_RESULT static Handle<Derived> New( - LocalIsolate* isolate, int at_least_space_for, + IsolateT* isolate, int at_least_space_for, AllocationType allocation = AllocationType::kYoung, MinimumCapacity capacity_option = USE_DEFAULT_MINIMUM_CAPACITY); @@ -159,9 +159,9 @@ class EXPORT_TEMPLATE_DECLARE(V8_EXPORT_PRIVATE) BaseNameDictionary static Handle<FixedArray> IterationIndices(Isolate* isolate, Handle<Derived> dictionary); - template <typename LocalIsolate> + template <typename IsolateT> V8_WARN_UNUSED_RESULT static Handle<Derived> AddNoUpdateNextEnumerationIndex( - LocalIsolate* isolate, Handle<Derived> dictionary, Key key, + IsolateT* isolate, Handle<Derived> dictionary, Key key, Handle<Object> value, PropertyDetails details, InternalIndex* entry_out = nullptr); diff --git a/deps/v8/src/objects/elements-kind.cc b/deps/v8/src/objects/elements-kind.cc index 78670f25bd..6ffa34b868 100644 --- a/deps/v8/src/objects/elements-kind.cc +++ b/deps/v8/src/objects/elements-kind.cc @@ -17,19 +17,30 @@ int ElementsKindToShiftSize(ElementsKind elements_kind) { case UINT8_ELEMENTS: case INT8_ELEMENTS: case UINT8_CLAMPED_ELEMENTS: + case RAB_GSAB_UINT8_ELEMENTS: + case RAB_GSAB_INT8_ELEMENTS: + case RAB_GSAB_UINT8_CLAMPED_ELEMENTS: return 0; case UINT16_ELEMENTS: case INT16_ELEMENTS: + case RAB_GSAB_UINT16_ELEMENTS: + case RAB_GSAB_INT16_ELEMENTS: return 1; case UINT32_ELEMENTS: case INT32_ELEMENTS: case FLOAT32_ELEMENTS: + case RAB_GSAB_UINT32_ELEMENTS: + case RAB_GSAB_INT32_ELEMENTS: + case RAB_GSAB_FLOAT32_ELEMENTS: return 2; case PACKED_DOUBLE_ELEMENTS: case HOLEY_DOUBLE_ELEMENTS: case FLOAT64_ELEMENTS: case BIGINT64_ELEMENTS: case BIGUINT64_ELEMENTS: + case RAB_GSAB_FLOAT64_ELEMENTS: + case RAB_GSAB_BIGINT64_ELEMENTS: + case RAB_GSAB_BIGUINT64_ELEMENTS: return 3; case PACKED_SMI_ELEMENTS: case PACKED_ELEMENTS: @@ -109,6 +120,7 @@ const char* ElementsKindToString(ElementsKind kind) { return #TYPE "ELEMENTS"; TYPED_ARRAYS(PRINT_NAME); + RAB_GSAB_TYPED_ARRAYS(PRINT_NAME); #undef PRINT_NAME case NO_ELEMENTS: return "NO_ELEMENTS"; diff --git a/deps/v8/src/objects/elements-kind.h b/deps/v8/src/objects/elements-kind.h index ec3ca3402d..b19e21136f 100644 --- a/deps/v8/src/objects/elements-kind.h +++ b/deps/v8/src/objects/elements-kind.h @@ -28,6 +28,36 @@ namespace internal { V(BigUint64, biguint64, BIGUINT64, uint64_t) \ V(BigInt64, bigint64, BIGINT64, int64_t) +#define RAB_GSAB_TYPED_ARRAYS(V) \ + V(RabGsabUint8, rab_gsab_uint8, RAB_GSAB_UINT8, uint8_t) \ + V(RabGsabInt8, rab_gsab_int8, RAB_GSAB_INT8, int8_t) \ + V(RabGsabUint16, rab_gsab_uint16, RAB_GSAB_UINT16, uint16_t) \ + V(RabGsabInt16, rab_gsab_int16, RAB_GSAB_INT16, int16_t) \ + V(RabGsabUint32, rab_gsab_uint32, RAB_GSAB_UINT32, uint32_t) \ + V(RabGsabInt32, rab_gsab_int32, RAB_GSAB_INT32, int32_t) \ + V(RabGsabFloat32, rab_gsab_float32, RAB_GSAB_FLOAT32, float) \ + V(RabGsabFloat64, rab_gsab_float64, RAB_GSAB_FLOAT64, double) \ + V(RabGsabUint8Clamped, rab_gsab_uint8_clamped, RAB_GSAB_UINT8_CLAMPED, \ + uint8_t) \ + V(RabGsabBigUint64, rab_gsab_biguint64, RAB_GSAB_BIGUINT64, uint64_t) \ + V(RabGsabBigInt64, rab_gsab_bigint64, RAB_GSAB_BIGINT64, int64_t) + +// The TypedArrays backed by RAB / GSAB are called Uint8Array, Uint16Array etc, +// and not RabGsabUint8Array, RabGsabUint16Array etc. This macro is used for +// generating code which refers to the TypedArray type. +#define RAB_GSAB_TYPED_ARRAYS_WITH_TYPED_ARRAY_TYPE(V) \ + V(Uint8, rab_gsab_uint8, RAB_GSAB_UINT8, uint8_t) \ + V(Int8, rab_gsab_int8, RAB_GSAB_INT8, int8_t) \ + V(Uint16, rab_gsab_uint16, RAB_GSAB_UINT16, uint16_t) \ + V(Int16, rab_gsab_int16, RAB_GSAB_INT16, int16_t) \ + V(Uint32, rab_gsab_uint32, RAB_GSAB_UINT32, uint32_t) \ + V(Int32, rab_gsab_int32, RAB_GSAB_INT32, int32_t) \ + V(Float32, rab_gsab_float32, RAB_GSAB_FLOAT32, float) \ + V(Float64, rab_gsab_float64, RAB_GSAB_FLOAT64, double) \ + V(Uint8Clamped, rab_gsab_uint8_clamped, RAB_GSAB_UINT8_CLAMPED, uint8_t) \ + V(BigUint64, rab_gsab_biguint64, RAB_GSAB_BIGUINT64, uint64_t) \ + V(BigInt64, rab_gsab_bigint64, RAB_GSAB_BIGINT64, int64_t) + enum ElementsKind : uint8_t { // The "fast" kind for elements that only contain SMI values. Must be first // to make it possible to efficiently check maps for this kind. @@ -71,6 +101,7 @@ enum ElementsKind : uint8_t { // Fixed typed arrays. #define TYPED_ARRAY_ELEMENTS_KIND(Type, type, TYPE, ctype) TYPE##_ELEMENTS, TYPED_ARRAYS(TYPED_ARRAY_ELEMENTS_KIND) + RAB_GSAB_TYPED_ARRAYS(TYPED_ARRAY_ELEMENTS_KIND) #undef TYPED_ARRAY_ELEMENTS_KIND // Sentinel ElementsKind for objects with no elements. @@ -78,11 +109,13 @@ enum ElementsKind : uint8_t { // Derived constants from ElementsKind. FIRST_ELEMENTS_KIND = PACKED_SMI_ELEMENTS, - LAST_ELEMENTS_KIND = BIGINT64_ELEMENTS, + LAST_ELEMENTS_KIND = RAB_GSAB_BIGINT64_ELEMENTS, FIRST_FAST_ELEMENTS_KIND = PACKED_SMI_ELEMENTS, LAST_FAST_ELEMENTS_KIND = HOLEY_DOUBLE_ELEMENTS, FIRST_FIXED_TYPED_ARRAY_ELEMENTS_KIND = UINT8_ELEMENTS, LAST_FIXED_TYPED_ARRAY_ELEMENTS_KIND = BIGINT64_ELEMENTS, + FIRST_RAB_GSAB_FIXED_TYPED_ARRAY_ELEMENTS_KIND = RAB_GSAB_UINT8_ELEMENTS, + LAST_RAB_GSAB_FIXED_TYPED_ARRAY_ELEMENTS_KIND = RAB_GSAB_BIGINT64_ELEMENTS, TERMINAL_FAST_ELEMENTS_KIND = HOLEY_ELEMENTS, FIRST_ANY_NONEXTENSIBLE_ELEMENTS_KIND = PACKED_NONEXTENSIBLE_ELEMENTS, LAST_ANY_NONEXTENSIBLE_ELEMENTS_KIND = HOLEY_FROZEN_ELEMENTS, @@ -103,7 +136,7 @@ constexpr int kFastElementsKindCount = constexpr int kFastElementsKindPackedToHoley = HOLEY_SMI_ELEMENTS - PACKED_SMI_ELEMENTS; -constexpr int kElementsKindBits = 5; +constexpr int kElementsKindBits = 6; STATIC_ASSERT((1 << kElementsKindBits) > LAST_ELEMENTS_KIND); STATIC_ASSERT((1 << (kElementsKindBits - 1)) <= LAST_ELEMENTS_KIND); @@ -150,8 +183,20 @@ inline bool IsTypedArrayElementsKind(ElementsKind kind) { LAST_FIXED_TYPED_ARRAY_ELEMENTS_KIND); } +inline bool IsRabGsabTypedArrayElementsKind(ElementsKind kind) { + return base::IsInRange(kind, FIRST_RAB_GSAB_FIXED_TYPED_ARRAY_ELEMENTS_KIND, + LAST_RAB_GSAB_FIXED_TYPED_ARRAY_ELEMENTS_KIND); +} + +inline bool IsTypedArrayOrRabGsabTypedArrayElementsKind(ElementsKind kind) { + return base::IsInRange(kind, FIRST_FIXED_TYPED_ARRAY_ELEMENTS_KIND, + LAST_RAB_GSAB_FIXED_TYPED_ARRAY_ELEMENTS_KIND); +} + inline bool IsTerminalElementsKind(ElementsKind kind) { - return kind == TERMINAL_FAST_ELEMENTS_KIND || IsTypedArrayElementsKind(kind); + return kind == TERMINAL_FAST_ELEMENTS_KIND || + IsTypedArrayElementsKind(kind) || + IsRabGsabTypedArrayElementsKind(kind); } inline bool IsFastElementsKind(ElementsKind kind) { @@ -281,6 +326,13 @@ inline ElementsKind GetHoleyElementsKind(ElementsKind packed_kind) { return packed_kind; } +inline ElementsKind GetCorrespondingRabGsabElementsKind( + ElementsKind typed_array_kind) { + DCHECK(IsTypedArrayElementsKind(typed_array_kind)); + return ElementsKind(typed_array_kind - FIRST_FIXED_TYPED_ARRAY_ELEMENTS_KIND + + FIRST_RAB_GSAB_FIXED_TYPED_ARRAY_ELEMENTS_KIND); +} + inline bool UnionElementsKindUptoPackedness(ElementsKind* a_out, ElementsKind b) { // Assert that the union of two ElementKinds can be computed via std::max. diff --git a/deps/v8/src/objects/elements.cc b/deps/v8/src/objects/elements.cc index 9b1c7936bb..e70ae48900 100644 --- a/deps/v8/src/objects/elements.cc +++ b/deps/v8/src/objects/elements.cc @@ -4,6 +4,7 @@ #include "src/objects/elements.h" +#include "src/base/atomicops.h" #include "src/common/message-template.h" #include "src/execution/arguments.h" #include "src/execution/frames.h" @@ -59,6 +60,17 @@ // - Uint8ClampedElementsAccessor // - BigUint64ElementsAccessor // - BigInt64ElementsAccessor +// - RabGsabUint8ElementsAccessor +// - RabGsabInt8ElementsAccessor +// - RabGsabUint16ElementsAccessor +// - RabGsabInt16ElementsAccessor +// - RabGsabUint32ElementsAccessor +// - RabGsabInt32ElementsAccessor +// - RabGsabFloat32ElementsAccessor +// - RabGsabFloat64ElementsAccessor +// - RabGsabUint8ClampedElementsAccessor +// - RabGsabBigUint64ElementsAccessor +// - RabGsabBigInt64ElementsAccessor // - DictionaryElementsAccessor // - SloppyArgumentsElementsAccessor // - FastSloppyArgumentsElementsAccessor @@ -129,7 +141,19 @@ enum Where { AT_START, AT_END }; V(Float64ElementsAccessor, FLOAT64_ELEMENTS, ByteArray) \ V(Uint8ClampedElementsAccessor, UINT8_CLAMPED_ELEMENTS, ByteArray) \ V(BigUint64ElementsAccessor, BIGUINT64_ELEMENTS, ByteArray) \ - V(BigInt64ElementsAccessor, BIGINT64_ELEMENTS, ByteArray) + V(BigInt64ElementsAccessor, BIGINT64_ELEMENTS, ByteArray) \ + V(RabGsabUint8ElementsAccessor, RAB_GSAB_UINT8_ELEMENTS, ByteArray) \ + V(RabGsabInt8ElementsAccessor, RAB_GSAB_INT8_ELEMENTS, ByteArray) \ + V(RabGsabUint16ElementsAccessor, RAB_GSAB_UINT16_ELEMENTS, ByteArray) \ + V(RabGsabInt16ElementsAccessor, RAB_GSAB_INT16_ELEMENTS, ByteArray) \ + V(RabGsabUint32ElementsAccessor, RAB_GSAB_UINT32_ELEMENTS, ByteArray) \ + V(RabGsabInt32ElementsAccessor, RAB_GSAB_INT32_ELEMENTS, ByteArray) \ + V(RabGsabFloat32ElementsAccessor, RAB_GSAB_FLOAT32_ELEMENTS, ByteArray) \ + V(RabGsabFloat64ElementsAccessor, RAB_GSAB_FLOAT64_ELEMENTS, ByteArray) \ + V(RabGsabUint8ClampedElementsAccessor, RAB_GSAB_UINT8_CLAMPED_ELEMENTS, \ + ByteArray) \ + V(RabGsabBigUint64ElementsAccessor, RAB_GSAB_BIGUINT64_ELEMENTS, ByteArray) \ + V(RabGsabBigInt64ElementsAccessor, RAB_GSAB_BIGINT64_ELEMENTS, ByteArray) template <ElementsKind Kind> class ElementsKindTraits { @@ -639,57 +663,64 @@ class ElementsAccessorBase : public InternalElementsAccessor { UNREACHABLE(); } - void Add(Handle<JSObject> object, uint32_t index, Handle<Object> value, - PropertyAttributes attributes, uint32_t new_capacity) final { - Subclass::AddImpl(object, index, value, attributes, new_capacity); + Maybe<bool> Add(Handle<JSObject> object, uint32_t index, Handle<Object> value, + PropertyAttributes attributes, uint32_t new_capacity) final { + return Subclass::AddImpl(object, index, value, attributes, new_capacity); } - static void AddImpl(Handle<JSObject> object, uint32_t index, - Handle<Object> value, PropertyAttributes attributes, - uint32_t new_capacity) { + static Maybe<bool> AddImpl(Handle<JSObject> object, uint32_t index, + Handle<Object> value, + PropertyAttributes attributes, + uint32_t new_capacity) { UNREACHABLE(); } - uint32_t Push(Handle<JSArray> receiver, BuiltinArguments* args, - uint32_t push_size) final { + Maybe<uint32_t> Push(Handle<JSArray> receiver, BuiltinArguments* args, + uint32_t push_size) final { return Subclass::PushImpl(receiver, args, push_size); } - static uint32_t PushImpl(Handle<JSArray> receiver, BuiltinArguments* args, - uint32_t push_sized) { + static Maybe<uint32_t> PushImpl(Handle<JSArray> receiver, + BuiltinArguments* args, uint32_t push_sized) { UNREACHABLE(); } - uint32_t Unshift(Handle<JSArray> receiver, BuiltinArguments* args, - uint32_t unshift_size) final { + Maybe<uint32_t> Unshift(Handle<JSArray> receiver, BuiltinArguments* args, + uint32_t unshift_size) final { return Subclass::UnshiftImpl(receiver, args, unshift_size); } - static uint32_t UnshiftImpl(Handle<JSArray> receiver, BuiltinArguments* args, - uint32_t unshift_size) { + static Maybe<uint32_t> UnshiftImpl(Handle<JSArray> receiver, + BuiltinArguments* args, + uint32_t unshift_size) { UNREACHABLE(); } - Handle<Object> Pop(Handle<JSArray> receiver) final { + MaybeHandle<Object> Pop(Handle<JSArray> receiver) final { return Subclass::PopImpl(receiver); } - static Handle<Object> PopImpl(Handle<JSArray> receiver) { UNREACHABLE(); } + static MaybeHandle<Object> PopImpl(Handle<JSArray> receiver) { + UNREACHABLE(); + } - Handle<Object> Shift(Handle<JSArray> receiver) final { + MaybeHandle<Object> Shift(Handle<JSArray> receiver) final { return Subclass::ShiftImpl(receiver); } - static Handle<Object> ShiftImpl(Handle<JSArray> receiver) { UNREACHABLE(); } + static MaybeHandle<Object> ShiftImpl(Handle<JSArray> receiver) { + UNREACHABLE(); + } - void SetLength(Handle<JSArray> array, uint32_t length) final { - Subclass::SetLengthImpl(array->GetIsolate(), array, length, - handle(array->elements(), array->GetIsolate())); + Maybe<bool> SetLength(Handle<JSArray> array, uint32_t length) final { + return Subclass::SetLengthImpl( + array->GetIsolate(), array, length, + handle(array->elements(), array->GetIsolate())); } - static void SetLengthImpl(Isolate* isolate, Handle<JSArray> array, - uint32_t length, - Handle<FixedArrayBase> backing_store) { + static Maybe<bool> SetLengthImpl(Isolate* isolate, Handle<JSArray> array, + uint32_t length, + Handle<FixedArrayBase> backing_store) { DCHECK(!array->SetLengthWouldNormalize(length)); DCHECK(IsFastElementsKind(array->GetElementsKind())); uint32_t old_length = 0; @@ -735,11 +766,13 @@ class ElementsAccessorBase : public InternalElementsAccessor { } else { // Check whether the backing store should be expanded. capacity = std::max(length, JSObject::NewElementsCapacity(capacity)); - Subclass::GrowCapacityAndConvertImpl(array, capacity); + MAYBE_RETURN(Subclass::GrowCapacityAndConvertImpl(array, capacity), + Nothing<bool>()); } array->set_length(Smi::FromInt(length)); JSObject::ValidateElements(*array); + return Just(true); } size_t NumberOfElements(JSObject receiver) final { @@ -765,23 +798,35 @@ class ElementsAccessorBase : public InternalElementsAccessor { return Subclass::GetMaxIndex(receiver, elements); } - static Handle<FixedArrayBase> ConvertElementsWithCapacity( + static MaybeHandle<FixedArrayBase> ConvertElementsWithCapacity( Handle<JSObject> object, Handle<FixedArrayBase> old_elements, ElementsKind from_kind, uint32_t capacity) { return ConvertElementsWithCapacity(object, old_elements, from_kind, capacity, 0, 0); } - static Handle<FixedArrayBase> ConvertElementsWithCapacity( + static MaybeHandle<FixedArrayBase> ConvertElementsWithCapacity( Handle<JSObject> object, Handle<FixedArrayBase> old_elements, ElementsKind from_kind, uint32_t capacity, uint32_t src_index, uint32_t dst_index) { Isolate* isolate = object->GetIsolate(); Handle<FixedArrayBase> new_elements; + // TODO(victorgomes): Retrieve native context in optimized code + // and remove the check isolate->context().is_null(). if (IsDoubleElementsKind(kind())) { + if (!isolate->context().is_null() && + !base::IsInRange(capacity, 0, FixedDoubleArray::kMaxLength)) { + return isolate->Throw<FixedArrayBase>(isolate->factory()->NewRangeError( + MessageTemplate::kInvalidArrayLength)); + } new_elements = isolate->factory()->NewFixedDoubleArray(capacity); } else { - new_elements = isolate->factory()->NewUninitializedFixedArray(capacity); + if (!isolate->context().is_null() && + !base::IsInRange(capacity, 0, FixedArray::kMaxLength)) { + return isolate->Throw<FixedArrayBase>(isolate->factory()->NewRangeError( + MessageTemplate::kInvalidArrayLength)); + } + new_elements = isolate->factory()->NewFixedArray(capacity); } int packed_size = kPackedSizeNotKnown; @@ -793,11 +838,11 @@ class ElementsAccessorBase : public InternalElementsAccessor { from_kind, dst_index, packed_size, kCopyToEndAndInitializeToHole); - return new_elements; + return MaybeHandle<FixedArrayBase>(new_elements); } - static void TransitionElementsKindImpl(Handle<JSObject> object, - Handle<Map> to_map) { + static Maybe<bool> TransitionElementsKindImpl(Handle<JSObject> object, + Handle<Map> to_map) { Isolate* isolate = object->GetIsolate(); Handle<Map> from_map = handle(object->map(), isolate); ElementsKind from_kind = from_map->elements_kind(); @@ -822,8 +867,12 @@ class ElementsAccessorBase : public InternalElementsAccessor { (IsSmiElementsKind(from_kind) && IsDoubleElementsKind(to_kind)) || (IsDoubleElementsKind(from_kind) && IsObjectElementsKind(to_kind))); uint32_t capacity = static_cast<uint32_t>(object->elements().length()); - Handle<FixedArrayBase> elements = ConvertElementsWithCapacity( - object, from_elements, from_kind, capacity); + Handle<FixedArrayBase> elements; + ASSIGN_RETURN_ON_EXCEPTION_VALUE( + object->GetIsolate(), elements, + ConvertElementsWithCapacity(object, from_elements, from_kind, + capacity), + Nothing<bool>()); JSObject::SetMapAndElements(object, to_map, elements); } if (FLAG_trace_elements_transitions) { @@ -832,10 +881,11 @@ class ElementsAccessorBase : public InternalElementsAccessor { handle(object->elements(), isolate)); } } + return Just(true); } - static void GrowCapacityAndConvertImpl(Handle<JSObject> object, - uint32_t capacity) { + static Maybe<bool> GrowCapacityAndConvertImpl(Handle<JSObject> object, + uint32_t capacity) { ElementsKind from_kind = object->GetElementsKind(); if (IsSmiOrObjectElementsKind(from_kind)) { // Array optimizations rely on the prototype lookups of Array objects @@ -850,15 +900,18 @@ class ElementsAccessorBase : public InternalElementsAccessor { DCHECK(IsDoubleElementsKind(from_kind) != IsDoubleElementsKind(kind()) || IsDictionaryElementsKind(from_kind) || static_cast<uint32_t>(old_elements->length()) < capacity); - Subclass::BasicGrowCapacityAndConvertImpl(object, old_elements, from_kind, - kind(), capacity); + return Subclass::BasicGrowCapacityAndConvertImpl( + object, old_elements, from_kind, kind(), capacity); } - static void BasicGrowCapacityAndConvertImpl( + static Maybe<bool> BasicGrowCapacityAndConvertImpl( Handle<JSObject> object, Handle<FixedArrayBase> old_elements, ElementsKind from_kind, ElementsKind to_kind, uint32_t capacity) { - Handle<FixedArrayBase> elements = - ConvertElementsWithCapacity(object, old_elements, from_kind, capacity); + Handle<FixedArrayBase> elements; + ASSIGN_RETURN_ON_EXCEPTION_VALUE( + object->GetIsolate(), elements, + ConvertElementsWithCapacity(object, old_elements, from_kind, capacity), + Nothing<bool>()); if (IsHoleyElementsKind(from_kind)) { to_kind = GetHoleyElementsKind(to_kind); @@ -873,40 +926,45 @@ class ElementsAccessorBase : public InternalElementsAccessor { JSObject::PrintElementsTransition(stdout, object, from_kind, old_elements, to_kind, elements); } + return Just(true); } - void TransitionElementsKind(Handle<JSObject> object, Handle<Map> map) final { - Subclass::TransitionElementsKindImpl(object, map); + Maybe<bool> TransitionElementsKind(Handle<JSObject> object, + Handle<Map> map) final { + return Subclass::TransitionElementsKindImpl(object, map); } - void GrowCapacityAndConvert(Handle<JSObject> object, - uint32_t capacity) final { - Subclass::GrowCapacityAndConvertImpl(object, capacity); + Maybe<bool> GrowCapacityAndConvert(Handle<JSObject> object, + uint32_t capacity) final { + return Subclass::GrowCapacityAndConvertImpl(object, capacity); } - bool GrowCapacity(Handle<JSObject> object, uint32_t index) final { + Maybe<bool> GrowCapacity(Handle<JSObject> object, uint32_t index) final { // This function is intended to be called from optimized code. We don't // want to trigger lazy deopts there, so refuse to handle cases that would. if (object->map().is_prototype_map() || object->WouldConvertToSlowElements(index)) { - return false; + return Just(false); } Handle<FixedArrayBase> old_elements(object->elements(), object->GetIsolate()); uint32_t new_capacity = JSObject::NewElementsCapacity(index + 1); DCHECK(static_cast<uint32_t>(old_elements->length()) < new_capacity); - Handle<FixedArrayBase> elements = - ConvertElementsWithCapacity(object, old_elements, kind(), new_capacity); + Handle<FixedArrayBase> elements; + ASSIGN_RETURN_ON_EXCEPTION_VALUE( + object->GetIsolate(), elements, + ConvertElementsWithCapacity(object, old_elements, kind(), new_capacity), + Nothing<bool>()); DCHECK_EQ(object->GetElementsKind(), kind()); // Transition through the allocation site as well if present. if (JSObject::UpdateAllocationSite<AllocationSiteUpdateMode::kCheckOnly>( object, kind())) { - return false; + return Just(false); } object->set_elements(*elements); - return true; + return Just(true); } void Delete(Handle<JSObject> obj, InternalIndex entry) final { @@ -1220,13 +1278,14 @@ class ElementsAccessorBase : public InternalElementsAccessor { return Subclass::GetCapacityImpl(holder, backing_store); } - static Object FillImpl(Handle<JSObject> receiver, Handle<Object> obj_value, - size_t start, size_t end) { + static MaybeHandle<Object> FillImpl(Handle<JSObject> receiver, + Handle<Object> obj_value, size_t start, + size_t end) { UNREACHABLE(); } - Object Fill(Handle<JSObject> receiver, Handle<Object> obj_value, size_t start, - size_t end) override { + MaybeHandle<Object> Fill(Handle<JSObject> receiver, Handle<Object> obj_value, + size_t start, size_t end) override { return Subclass::FillImpl(receiver, obj_value, start, end); } @@ -1348,9 +1407,9 @@ class DictionaryElementsAccessor return dict.NumberOfElements(); } - static void SetLengthImpl(Isolate* isolate, Handle<JSArray> array, - uint32_t length, - Handle<FixedArrayBase> backing_store) { + static Maybe<bool> SetLengthImpl(Isolate* isolate, Handle<JSArray> array, + uint32_t length, + Handle<FixedArrayBase> backing_store) { Handle<NumberDictionary> dict = Handle<NumberDictionary>::cast(backing_store); uint32_t old_length = 0; @@ -1401,6 +1460,7 @@ class DictionaryElementsAccessor Handle<Object> length_obj = isolate->factory()->NewNumberFromUint(length); array->set_length(*length_obj); + return Just(true); } static void CopyElementsImpl(Isolate* isolate, FixedArrayBase from, @@ -1466,9 +1526,10 @@ class DictionaryElementsAccessor dictionary.DetailsAtPut(entry, details); } - static void AddImpl(Handle<JSObject> object, uint32_t index, - Handle<Object> value, PropertyAttributes attributes, - uint32_t new_capacity) { + static Maybe<bool> AddImpl(Handle<JSObject> object, uint32_t index, + Handle<Object> value, + PropertyAttributes attributes, + uint32_t new_capacity) { PropertyDetails details(kData, attributes, PropertyCellType::kNoCell); Handle<NumberDictionary> dictionary = object->HasFastElements() || object->HasFastStringWrapperElements() @@ -1479,8 +1540,9 @@ class DictionaryElementsAccessor object->GetIsolate(), dictionary, index, value, details); new_dictionary->UpdateMaxNumberKey(index, object); if (attributes != NONE) object->RequireSlowElements(*new_dictionary); - if (dictionary.is_identical_to(new_dictionary)) return; + if (dictionary.is_identical_to(new_dictionary)) return Just(true); object->set_elements(*new_dictionary); + return Just(true); } static bool HasEntryImpl(Isolate* isolate, FixedArrayBase store, @@ -1904,12 +1966,10 @@ class FastElementsAccessor : public ElementsAccessorBase<Subclass, KindTraits> { backing_store->set_the_hole(isolate, entry); // TODO(verwaest): Move this out of elements.cc. - // If an old space backing store is larger than a certain size and + // If the backing store is larger than a certain size and // has too few used values, normalize it. const int kMinLengthForSparsenessCheck = 64; if (backing_store->length() < kMinLengthForSparsenessCheck) return; - // TODO(ulan): Check if it works with young large objects. - if (ObjectInYoungGeneration(*backing_store)) return; uint32_t length = 0; if (obj->IsJSArray()) { JSArray::cast(*obj).length().ToArrayLength(&length); @@ -1971,9 +2031,10 @@ class FastElementsAccessor : public ElementsAccessorBase<Subclass, KindTraits> { value, attributes); } - static void AddImpl(Handle<JSObject> object, uint32_t index, - Handle<Object> value, PropertyAttributes attributes, - uint32_t new_capacity) { + static Maybe<bool> AddImpl(Handle<JSObject> object, uint32_t index, + Handle<Object> value, + PropertyAttributes attributes, + uint32_t new_capacity) { DCHECK_EQ(NONE, attributes); ElementsKind from_kind = object->GetElementsKind(); ElementsKind to_kind = Subclass::kind(); @@ -1981,7 +2042,8 @@ class FastElementsAccessor : public ElementsAccessorBase<Subclass, KindTraits> { IsDoubleElementsKind(from_kind) != IsDoubleElementsKind(to_kind) || Subclass::GetCapacityImpl(*object, object->elements()) != new_capacity) { - Subclass::GrowCapacityAndConvertImpl(object, new_capacity); + MAYBE_RETURN(Subclass::GrowCapacityAndConvertImpl(object, new_capacity), + Nothing<bool>()); } else { if (IsFastElementsKind(from_kind) && from_kind != to_kind) { JSObject::TransitionElementsKind(object, to_kind); @@ -1992,6 +2054,7 @@ class FastElementsAccessor : public ElementsAccessorBase<Subclass, KindTraits> { } } Subclass::SetImpl(object, InternalIndex(index), *value); + return Just(true); } static void DeleteImpl(Handle<JSObject> obj, InternalIndex entry) { @@ -2086,24 +2149,25 @@ class FastElementsAccessor : public ElementsAccessorBase<Subclass, KindTraits> { #endif } - static Handle<Object> PopImpl(Handle<JSArray> receiver) { + static MaybeHandle<Object> PopImpl(Handle<JSArray> receiver) { return Subclass::RemoveElement(receiver, AT_END); } - static Handle<Object> ShiftImpl(Handle<JSArray> receiver) { + static MaybeHandle<Object> ShiftImpl(Handle<JSArray> receiver) { return Subclass::RemoveElement(receiver, AT_START); } - static uint32_t PushImpl(Handle<JSArray> receiver, BuiltinArguments* args, - uint32_t push_size) { + static Maybe<uint32_t> PushImpl(Handle<JSArray> receiver, + BuiltinArguments* args, uint32_t push_size) { Handle<FixedArrayBase> backing_store(receiver->elements(), receiver->GetIsolate()); return Subclass::AddArguments(receiver, backing_store, args, push_size, AT_END); } - static uint32_t UnshiftImpl(Handle<JSArray> receiver, BuiltinArguments* args, - uint32_t unshift_size) { + static Maybe<uint32_t> UnshiftImpl(Handle<JSArray> receiver, + BuiltinArguments* args, + uint32_t unshift_size) { Handle<FixedArrayBase> backing_store(receiver->elements(), receiver->GetIsolate()); return Subclass::AddArguments(receiver, backing_store, args, unshift_size, @@ -2137,8 +2201,9 @@ class FastElementsAccessor : public ElementsAccessorBase<Subclass, KindTraits> { } } - static Object FillImpl(Handle<JSObject> receiver, Handle<Object> obj_value, - size_t start, size_t end) { + static MaybeHandle<Object> FillImpl(Handle<JSObject> receiver, + Handle<Object> obj_value, size_t start, + size_t end) { // Ensure indexes are within array bounds DCHECK_LE(0, start); DCHECK_LE(start, end); @@ -2151,8 +2216,8 @@ class FastElementsAccessor : public ElementsAccessorBase<Subclass, KindTraits> { // Make sure we have enough space. DCHECK_LE(end, std::numeric_limits<uint32_t>::max()); if (end > Subclass::GetCapacityImpl(*receiver, receiver->elements())) { - Subclass::GrowCapacityAndConvertImpl(receiver, - static_cast<uint32_t>(end)); + MAYBE_RETURN_NULL(Subclass::GrowCapacityAndConvertImpl( + receiver, static_cast<uint32_t>(end))); CHECK_EQ(Subclass::kind(), receiver->GetElementsKind()); } DCHECK_LE(end, Subclass::GetCapacityImpl(*receiver, receiver->elements())); @@ -2160,7 +2225,7 @@ class FastElementsAccessor : public ElementsAccessorBase<Subclass, KindTraits> { for (size_t index = start; index < end; ++index) { Subclass::SetImpl(receiver, InternalIndex(index), *obj_value); } - return *receiver; + return MaybeHandle<Object>(receiver); } static Maybe<bool> IncludesValueImpl(Isolate* isolate, @@ -2322,8 +2387,8 @@ class FastElementsAccessor : public ElementsAccessorBase<Subclass, KindTraits> { return result; } - static Handle<Object> RemoveElement(Handle<JSArray> receiver, - Where remove_position) { + static MaybeHandle<Object> RemoveElement(Handle<JSArray> receiver, + Where remove_position) { Isolate* isolate = receiver->GetIsolate(); ElementsKind kind = KindTraits::Kind; if (IsSmiOrObjectElementsKind(kind)) { @@ -2341,24 +2406,26 @@ class FastElementsAccessor : public ElementsAccessorBase<Subclass, KindTraits> { Subclass::MoveElements(isolate, receiver, backing_store, 0, 1, new_length, 0, 0); } - Subclass::SetLengthImpl(isolate, receiver, new_length, backing_store); + MAYBE_RETURN_NULL( + Subclass::SetLengthImpl(isolate, receiver, new_length, backing_store)); if (IsHoleyElementsKind(kind) && result->IsTheHole(isolate)) { return isolate->factory()->undefined_value(); } - return result; + return MaybeHandle<Object>(result); } - static uint32_t AddArguments(Handle<JSArray> receiver, - Handle<FixedArrayBase> backing_store, - BuiltinArguments* args, uint32_t add_size, - Where add_position) { + static Maybe<uint32_t> AddArguments(Handle<JSArray> receiver, + Handle<FixedArrayBase> backing_store, + BuiltinArguments* args, uint32_t add_size, + Where add_position) { uint32_t length = Smi::ToInt(receiver->length()); DCHECK_LT(0, add_size); uint32_t elms_len = backing_store->length(); // Check we do not overflow the new_length. DCHECK(add_size <= static_cast<uint32_t>(Smi::kMaxValue - length)); uint32_t new_length = length + add_size; + Isolate* isolate = receiver->GetIsolate(); if (new_length > elms_len) { // New backing storage is needed. @@ -2366,14 +2433,16 @@ class FastElementsAccessor : public ElementsAccessorBase<Subclass, KindTraits> { // If we add arguments to the start we have to shift the existing objects. int copy_dst_index = add_position == AT_START ? add_size : 0; // Copy over all objects to a new backing_store. - backing_store = Subclass::ConvertElementsWithCapacity( - receiver, backing_store, KindTraits::Kind, capacity, 0, - copy_dst_index); + ASSIGN_RETURN_ON_EXCEPTION_VALUE( + isolate, backing_store, + Subclass::ConvertElementsWithCapacity(receiver, backing_store, + KindTraits::Kind, capacity, 0, + copy_dst_index), + Nothing<uint32_t>()); receiver->set_elements(*backing_store); } else if (add_position == AT_START) { // If the backing store has enough capacity and we add elements to the // start we have to shift the existing objects. - Isolate* isolate = receiver->GetIsolate(); Subclass::MoveElements(isolate, receiver, backing_store, add_size, 0, length, 0, 0); } @@ -2383,7 +2452,7 @@ class FastElementsAccessor : public ElementsAccessorBase<Subclass, KindTraits> { Subclass::CopyArguments(args, backing_store, add_size, 1, insertion_index); // Set the length. receiver->set_length(Smi::FromInt(new_length)); - return new_length; + return Just(new_length); } static void CopyArguments(BuiltinArguments* args, @@ -2469,6 +2538,7 @@ class FastSmiOrObjectElementsAccessor case SLOW_STRING_WRAPPER_ELEMENTS: #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype) case TYPE##_ELEMENTS: TYPED_ARRAYS(TYPED_ARRAY_CASE) + RAB_GSAB_TYPED_ARRAYS(TYPED_ARRAY_CASE) #undef TYPED_ARRAY_CASE // This function is currently only used for JSArrays with non-zero // length. @@ -2569,28 +2639,29 @@ class FastNonextensibleObjectElementsAccessor public: using BackingStore = typename KindTraits::BackingStore; - static uint32_t PushImpl(Handle<JSArray> receiver, BuiltinArguments* args, - uint32_t push_size) { + static Maybe<uint32_t> PushImpl(Handle<JSArray> receiver, + BuiltinArguments* args, uint32_t push_size) { UNREACHABLE(); } - static void AddImpl(Handle<JSObject> object, uint32_t index, - Handle<Object> value, PropertyAttributes attributes, - uint32_t new_capacity) { + static Maybe<bool> AddImpl(Handle<JSObject> object, uint32_t index, + Handle<Object> value, + PropertyAttributes attributes, + uint32_t new_capacity) { UNREACHABLE(); } // TODO(duongn): refactor this due to code duplication of sealed version. // Consider using JSObject::NormalizeElements(). Also consider follow the fast // element logic instead of changing to dictionary mode. - static void SetLengthImpl(Isolate* isolate, Handle<JSArray> array, - uint32_t length, - Handle<FixedArrayBase> backing_store) { + static Maybe<bool> SetLengthImpl(Isolate* isolate, Handle<JSArray> array, + uint32_t length, + Handle<FixedArrayBase> backing_store) { uint32_t old_length = 0; CHECK(array->length().ToArrayIndex(&old_length)); if (length == old_length) { // Do nothing. - return; + return Just(true); } // Transition to DICTIONARY_ELEMENTS. @@ -2622,8 +2693,8 @@ class FastNonextensibleObjectElementsAccessor // Set length. Handle<FixedArrayBase> new_backing_store(array->elements(), isolate); - DictionaryElementsAccessor::SetLengthImpl(isolate, array, length, - new_backing_store); + return DictionaryElementsAccessor::SetLengthImpl(isolate, array, length, + new_backing_store); } }; @@ -2662,30 +2733,33 @@ class FastSealedObjectElementsAccessor UNREACHABLE(); } - static Handle<Object> PopImpl(Handle<JSArray> receiver) { UNREACHABLE(); } + static MaybeHandle<Object> PopImpl(Handle<JSArray> receiver) { + UNREACHABLE(); + } - static uint32_t PushImpl(Handle<JSArray> receiver, BuiltinArguments* args, - uint32_t push_size) { + static Maybe<uint32_t> PushImpl(Handle<JSArray> receiver, + BuiltinArguments* args, uint32_t push_size) { UNREACHABLE(); } - static void AddImpl(Handle<JSObject> object, uint32_t index, - Handle<Object> value, PropertyAttributes attributes, - uint32_t new_capacity) { + static Maybe<bool> AddImpl(Handle<JSObject> object, uint32_t index, + Handle<Object> value, + PropertyAttributes attributes, + uint32_t new_capacity) { UNREACHABLE(); } // TODO(duongn): refactor this due to code duplication of nonextensible // version. Consider using JSObject::NormalizeElements(). Also consider follow // the fast element logic instead of changing to dictionary mode. - static void SetLengthImpl(Isolate* isolate, Handle<JSArray> array, - uint32_t length, - Handle<FixedArrayBase> backing_store) { + static Maybe<bool> SetLengthImpl(Isolate* isolate, Handle<JSArray> array, + uint32_t length, + Handle<FixedArrayBase> backing_store) { uint32_t old_length = 0; CHECK(array->length().ToArrayIndex(&old_length)); if (length == old_length) { // Do nothing. - return; + return Just(true); } // Transition to DICTIONARY_ELEMENTS. @@ -2717,8 +2791,8 @@ class FastSealedObjectElementsAccessor // Set length Handle<FixedArrayBase> new_backing_store(array->elements(), isolate); - DictionaryElementsAccessor::SetLengthImpl(isolate, array, length, - new_backing_store); + return DictionaryElementsAccessor::SetLengthImpl(isolate, array, length, + new_backing_store); } }; @@ -2772,22 +2846,25 @@ class FastFrozenObjectElementsAccessor UNREACHABLE(); } - static Handle<Object> PopImpl(Handle<JSArray> receiver) { UNREACHABLE(); } + static MaybeHandle<Object> PopImpl(Handle<JSArray> receiver) { + UNREACHABLE(); + } - static uint32_t PushImpl(Handle<JSArray> receiver, BuiltinArguments* args, - uint32_t push_size) { + static Maybe<uint32_t> PushImpl(Handle<JSArray> receiver, + BuiltinArguments* args, uint32_t push_size) { UNREACHABLE(); } - static void AddImpl(Handle<JSObject> object, uint32_t index, - Handle<Object> value, PropertyAttributes attributes, - uint32_t new_capacity) { + static Maybe<bool> AddImpl(Handle<JSObject> object, uint32_t index, + Handle<Object> value, + PropertyAttributes attributes, + uint32_t new_capacity) { UNREACHABLE(); } - static void SetLengthImpl(Isolate* isolate, Handle<JSArray> array, - uint32_t length, - Handle<FixedArrayBase> backing_store) { + static Maybe<bool> SetLengthImpl(Isolate* isolate, Handle<JSArray> array, + uint32_t length, + Handle<FixedArrayBase> backing_store) { UNREACHABLE(); } @@ -2877,6 +2954,7 @@ class FastDoubleElementsAccessor case NO_ELEMENTS: #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype) case TYPE##_ELEMENTS: TYPED_ARRAYS(TYPED_ARRAY_CASE) + RAB_GSAB_TYPED_ARRAYS(TYPED_ARRAY_CASE) #undef TYPED_ARRAY_CASE // This function is currently only used for JSArrays with non-zero // length. @@ -2952,6 +3030,8 @@ class FastHoleyDoubleElementsAccessor FastHoleyDoubleElementsAccessor, ElementsKindTraits<HOLEY_DOUBLE_ELEMENTS>> {}; +enum IsSharedBuffer : bool { kShared = true, kUnshared = false }; + // Super class for all external element arrays. template <ElementsKind Kind, typename ElementType> class TypedElementsAccessor @@ -2998,42 +3078,70 @@ class TypedElementsAccessor static void SetImpl(Handle<JSObject> holder, InternalIndex entry, Object value) { Handle<JSTypedArray> typed_array = Handle<JSTypedArray>::cast(holder); - DCHECK_LE(entry.raw_value(), typed_array->length()); - SetImpl(static_cast<ElementType*>(typed_array->DataPtr()), - entry.raw_value(), FromObject(value)); - } + DCHECK_LE(entry.raw_value(), typed_array->GetLength()); + auto* entry_ptr = + static_cast<ElementType*>(typed_array->DataPtr()) + entry.raw_value(); + auto is_shared = typed_array->buffer().is_shared() ? kShared : kUnshared; + SetImpl(entry_ptr, FromObject(value), is_shared); + } + + static void SetImpl(ElementType* data_ptr, ElementType value, + IsSharedBuffer is_shared) { + // TODO(ishell, v8:8875): Independent of pointer compression, 8-byte size + // fields (external pointers, doubles and BigInt data) are not always 8-byte + // aligned. This is relying on undefined behaviour in C++, since {data_ptr} + // is not aligned to {alignof(ElementType)}. + if (!is_shared) { + base::WriteUnalignedValue(reinterpret_cast<Address>(data_ptr), value); + return; + } - static void SetImpl(ElementType* data_ptr, size_t entry, ElementType value) { // The JavaScript memory model allows for racy reads and writes to a - // SharedArrayBuffer's backing store. ThreadSanitizer will catch these - // racy accesses and warn about them, so we disable TSAN for these reads - // and writes using annotations. - // - // We don't use relaxed atomics here, as it is not a requirement of the - // JavaScript memory model to have tear-free reads of overlapping accesses, - // and using relaxed atomics may introduce overhead. - TSAN_ANNOTATE_IGNORE_WRITES_BEGIN; - if (COMPRESS_POINTERS_BOOL && alignof(ElementType) > kTaggedSize) { - // TODO(ishell, v8:8875): When pointer compression is enabled 8-byte size - // fields (external pointers, doubles and BigInt data) are only - // kTaggedSize aligned so we have to use unaligned pointer friendly way of - // accessing them in order to avoid undefined behavior in C++ code. - base::WriteUnalignedValue<ElementType>( - reinterpret_cast<Address>(data_ptr + entry), value); - } else { - data_ptr[entry] = value; + // SharedArrayBuffer's backing store. Using relaxed atomics is not strictly + // required for JavaScript, but will avoid undefined behaviour in C++ and is + // unlikely to introduce noticable overhead. + if (IsAligned(reinterpret_cast<uintptr_t>(data_ptr), + alignof(std::atomic<ElementType>))) { + // Use a single relaxed atomic store. + STATIC_ASSERT(sizeof(std::atomic<ElementType>) == sizeof(ElementType)); + reinterpret_cast<std::atomic<ElementType>*>(data_ptr)->store( + value, std::memory_order_relaxed); + return; + } + + // Some static CHECKs (are optimized out if succeeding) to ensure that + // {data_ptr} is at least four byte aligned, and {std::atomic<uint32_t>} + // has size and alignment of four bytes, such that we can cast the + // {data_ptr} to it. + CHECK_LE(kInt32Size, alignof(ElementType)); + CHECK_EQ(kInt32Size, alignof(std::atomic<uint32_t>)); + CHECK_EQ(kInt32Size, sizeof(std::atomic<uint32_t>)); + // And dynamically check that we indeed have at least four byte alignment. + DCHECK(IsAligned(reinterpret_cast<uintptr_t>(data_ptr), kInt32Size)); + // Store as multiple 32-bit words. Make {kNumWords} >= 1 to avoid compiler + // warnings for the empty array or memcpy to an empty object. + constexpr size_t kNumWords = + std::max(size_t{1}, sizeof(ElementType) / kInt32Size); + uint32_t words[kNumWords]; + CHECK_EQ(sizeof(words), sizeof(value)); + memcpy(words, &value, sizeof(value)); + for (size_t word = 0; word < kNumWords; ++word) { + STATIC_ASSERT(sizeof(std::atomic<uint32_t>) == sizeof(uint32_t)); + reinterpret_cast<std::atomic<uint32_t>*>(data_ptr)[word].store( + words[word], std::memory_order_relaxed); } - TSAN_ANNOTATE_IGNORE_WRITES_END; } static Handle<Object> GetInternalImpl(Handle<JSObject> holder, InternalIndex entry) { Handle<JSTypedArray> typed_array = Handle<JSTypedArray>::cast(holder); Isolate* isolate = typed_array->GetIsolate(); - DCHECK_LE(entry.raw_value(), typed_array->length()); + DCHECK_LT(entry.raw_value(), typed_array->GetLength()); DCHECK(!typed_array->WasDetached()); - ElementType elem = GetImpl( - static_cast<ElementType*>(typed_array->DataPtr()), entry.raw_value()); + auto* element_ptr = + static_cast<ElementType*>(typed_array->DataPtr()) + entry.raw_value(); + auto is_shared = typed_array->buffer().is_shared() ? kShared : kUnshared; + ElementType elem = GetImpl(element_ptr, is_shared); return ToHandle(isolate, elem); } @@ -3042,28 +3150,53 @@ class TypedElementsAccessor UNREACHABLE(); } - static ElementType GetImpl(ElementType* data_ptr, size_t entry) { + static ElementType GetImpl(ElementType* data_ptr, IsSharedBuffer is_shared) { + // TODO(ishell, v8:8875): Independent of pointer compression, 8-byte size + // fields (external pointers, doubles and BigInt data) are not always + // 8-byte aligned. + if (!is_shared) { + return base::ReadUnalignedValue<ElementType>( + reinterpret_cast<Address>(data_ptr)); + } + // The JavaScript memory model allows for racy reads and writes to a - // SharedArrayBuffer's backing store. ThreadSanitizer will catch these - // racy accesses and warn about them, so we disable TSAN for these reads - // and writes using annotations. - // - // We don't use relaxed atomics here, as it is not a requirement of the - // JavaScript memory model to have tear-free reads of overlapping accesses, - // and using relaxed atomics may introduce overhead. - TSAN_ANNOTATE_IGNORE_READS_BEGIN; - ElementType result; - if (COMPRESS_POINTERS_BOOL && alignof(ElementType) > kTaggedSize) { - // TODO(ishell, v8:8875): When pointer compression is enabled 8-byte size - // fields (external pointers, doubles and BigInt data) are only - // kTaggedSize aligned so we have to use unaligned pointer friendly way of - // accessing them in order to avoid undefined behavior in C++ code. - result = base::ReadUnalignedValue<ElementType>( - reinterpret_cast<Address>(data_ptr + entry)); - } else { - result = data_ptr[entry]; + // SharedArrayBuffer's backing store. Using relaxed atomics is not strictly + // required for JavaScript, but will avoid undefined behaviour in C++ and is + // unlikely to introduce noticable overhead. + if (IsAligned(reinterpret_cast<uintptr_t>(data_ptr), + alignof(std::atomic<ElementType>))) { + // Use a single relaxed atomic load. + STATIC_ASSERT(sizeof(std::atomic<ElementType>) == sizeof(ElementType)); + // Note: acquire semantics are not needed here, but clang seems to merge + // this atomic load with the non-atomic load above if we use relaxed + // semantics. This will result in TSan failures. + return reinterpret_cast<std::atomic<ElementType>*>(data_ptr)->load( + std::memory_order_acquire); + } + + // Some static CHECKs (are optimized out if succeeding) to ensure that + // {data_ptr} is at least four byte aligned, and {std::atomic<uint32_t>} + // has size and alignment of four bytes, such that we can cast the + // {data_ptr} to it. + CHECK_LE(kInt32Size, alignof(ElementType)); + CHECK_EQ(kInt32Size, alignof(std::atomic<uint32_t>)); + CHECK_EQ(kInt32Size, sizeof(std::atomic<uint32_t>)); + // And dynamically check that we indeed have at least four byte alignment. + DCHECK(IsAligned(reinterpret_cast<uintptr_t>(data_ptr), kInt32Size)); + // Load in multiple 32-bit words. Make {kNumWords} >= 1 to avoid compiler + // warnings for the empty array or memcpy to an empty object. + constexpr size_t kNumWords = + std::max(size_t{1}, sizeof(ElementType) / kInt32Size); + uint32_t words[kNumWords]; + for (size_t word = 0; word < kNumWords; ++word) { + STATIC_ASSERT(sizeof(std::atomic<uint32_t>) == sizeof(uint32_t)); + words[word] = + reinterpret_cast<std::atomic<uint32_t>*>(data_ptr)[word].load( + std::memory_order_relaxed); } - TSAN_ANNOTATE_IGNORE_READS_END; + ElementType result; + CHECK_EQ(sizeof(words), sizeof(result)); + memcpy(&result, words, sizeof(result)); return result; } @@ -3086,9 +3219,9 @@ class TypedElementsAccessor return false; } - static void SetLengthImpl(Isolate* isolate, Handle<JSArray> array, - uint32_t length, - Handle<FixedArrayBase> backing_store) { + static Maybe<bool> SetLengthImpl(Isolate* isolate, Handle<JSArray> array, + uint32_t length, + Handle<FixedArrayBase> backing_store) { // External arrays do not support changing their length. UNREACHABLE(); } @@ -3111,8 +3244,7 @@ class TypedElementsAccessor static size_t GetCapacityImpl(JSObject holder, FixedArrayBase backing_store) { JSTypedArray typed_array = JSTypedArray::cast(holder); - if (typed_array.WasDetached()) return 0; - return typed_array.length(); + return typed_array.GetLength(); } static size_t NumberOfElementsImpl(JSObject receiver, @@ -3155,8 +3287,9 @@ class TypedElementsAccessor return Just(true); } - static Object FillImpl(Handle<JSObject> receiver, Handle<Object> value, - size_t start, size_t end) { + static MaybeHandle<Object> FillImpl(Handle<JSObject> receiver, + Handle<Object> value, size_t start, + size_t end) { Handle<JSTypedArray> typed_array = Handle<JSTypedArray>::cast(receiver); DCHECK(!typed_array->WasDetached()); DCHECK_LE(start, end); @@ -3171,7 +3304,7 @@ class TypedElementsAccessor } else { std::fill(data + start, data + end, scalar); } - return *typed_array; + return MaybeHandle<Object>(typed_array); } static Maybe<bool> IncludesValueImpl(Isolate* isolate, @@ -3200,6 +3333,7 @@ class TypedElementsAccessor ElementType typed_search_value; ElementType* data_ptr = reinterpret_cast<ElementType*>(typed_array.DataPtr()); + auto is_shared = typed_array.buffer().is_shared() ? kShared : kUnshared; if (Kind == BIGINT64_ELEMENTS || Kind == BIGUINT64_ELEMENTS) { if (!value->IsBigInt()) return Just(false); bool lossless; @@ -3215,8 +3349,8 @@ class TypedElementsAccessor } if (std::isnan(search_value)) { for (size_t k = start_from; k < length; ++k) { - double elem_k = - static_cast<double>(AccessorClass::GetImpl(data_ptr, k)); + double elem_k = static_cast<double>( + AccessorClass::GetImpl(data_ptr + k, is_shared)); if (std::isnan(elem_k)) return Just(true); } return Just(false); @@ -3233,7 +3367,7 @@ class TypedElementsAccessor } for (size_t k = start_from; k < length; ++k) { - ElementType elem_k = AccessorClass::GetImpl(data_ptr, k); + ElementType elem_k = AccessorClass::GetImpl(data_ptr + k, is_shared); if (elem_k == typed_search_value) return Just(true); } return Just(false); @@ -3285,8 +3419,9 @@ class TypedElementsAccessor length = typed_array.length(); } + auto is_shared = typed_array.buffer().is_shared() ? kShared : kUnshared; for (size_t k = start_from; k < length; ++k) { - ElementType elem_k = AccessorClass::GetImpl(data_ptr, k); + ElementType elem_k = AccessorClass::GetImpl(data_ptr + k, is_shared); if (elem_k == typed_search_value) return Just<int64_t>(k); } return Just<int64_t>(-1); @@ -3333,8 +3468,9 @@ class TypedElementsAccessor DCHECK_LT(start_from, typed_array.length()); size_t k = start_from; + auto is_shared = typed_array.buffer().is_shared() ? kShared : kUnshared; do { - ElementType elem_k = AccessorClass::GetImpl(data_ptr, k); + ElementType elem_k = AccessorClass::GetImpl(data_ptr + k, is_shared); if (elem_k == typed_search_value) return Just<int64_t>(k); } while (k-- != 0); return Just<int64_t>(-1); @@ -3384,12 +3520,16 @@ class TypedElementsAccessor size_t count = end - start; DCHECK_LE(count, destination.length()); ElementType* dest_data = static_cast<ElementType*>(destination.DataPtr()); + auto is_shared = + source.buffer().is_shared() || destination.buffer().is_shared() + ? kShared + : kUnshared; switch (source.GetElementsKind()) { #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype) \ case TYPE##_ELEMENTS: { \ ctype* source_data = reinterpret_cast<ctype*>(source.DataPtr()) + start; \ CopyBetweenBackingStores<TYPE##_ELEMENTS, ctype>(source_data, dest_data, \ - count); \ + count, is_shared); \ break; \ } TYPED_ARRAYS(TYPED_ARRAY_CASE) @@ -3408,16 +3548,16 @@ class TypedElementsAccessor template <ElementsKind SourceKind, typename SourceElementType> static void CopyBetweenBackingStores(SourceElementType* source_data_ptr, ElementType* dest_data_ptr, - size_t length) { - DisallowGarbageCollection no_gc; - for (size_t i = 0; i < length; i++) { + size_t length, + IsSharedBuffer is_shared) { + for (; length > 0; --length, ++source_data_ptr, ++dest_data_ptr) { // We use scalar accessors to avoid boxing/unboxing, so there are no // allocations. SourceElementType source_elem = TypedElementsAccessor<SourceKind, SourceElementType>::GetImpl( - source_data_ptr, i); + source_data_ptr, is_shared); ElementType dest_elem = FromScalar(source_elem); - SetImpl(dest_data_ptr, i, dest_elem); + SetImpl(dest_data_ptr, dest_elem, is_shared); } } @@ -3448,14 +3588,24 @@ class TypedElementsAccessor size_t source_byte_length = source.byte_length(); size_t dest_byte_length = destination.byte_length(); + bool source_shared = source.buffer().is_shared(); + bool destination_shared = destination.buffer().is_shared(); + // We can simply copy the backing store if the types are the same, or if // we are converting e.g. Uint8 <-> Int8, as the binary representation // will be the same. This is not the case for floats or clamped Uint8, // which have special conversion operations. if (same_type || (same_size && both_are_simple)) { size_t element_size = source.element_size(); - std::memmove(dest_data + offset * element_size, source_data, - length * element_size); + if (source_shared || destination_shared) { + base::Relaxed_Memcpy( + reinterpret_cast<base::Atomic8*>(dest_data + offset * element_size), + reinterpret_cast<base::Atomic8*>(source_data), + length * element_size); + } else { + std::memmove(dest_data + offset * element_size, source_data, + length * element_size); + } } else { std::unique_ptr<uint8_t[]> cloned_source_elements; @@ -3463,17 +3613,25 @@ class TypedElementsAccessor if (dest_data + dest_byte_length > source_data && source_data + source_byte_length > dest_data) { cloned_source_elements.reset(new uint8_t[source_byte_length]); - std::memcpy(cloned_source_elements.get(), source_data, - source_byte_length); + if (source_shared) { + base::Relaxed_Memcpy( + reinterpret_cast<base::Atomic8*>(cloned_source_elements.get()), + reinterpret_cast<base::Atomic8*>(source_data), + source_byte_length); + } else { + std::memcpy(cloned_source_elements.get(), source_data, + source_byte_length); + } source_data = cloned_source_elements.get(); } switch (source.GetElementsKind()) { -#define TYPED_ARRAY_CASE(Type, type, TYPE, ctype) \ - case TYPE##_ELEMENTS: \ - CopyBetweenBackingStores<TYPE##_ELEMENTS, ctype>( \ - reinterpret_cast<ctype*>(source_data), \ - reinterpret_cast<ElementType*>(dest_data) + offset, length); \ +#define TYPED_ARRAY_CASE(Type, type, TYPE, ctype) \ + case TYPE##_ELEMENTS: \ + CopyBetweenBackingStores<TYPE##_ELEMENTS, ctype>( \ + reinterpret_cast<ctype*>(source_data), \ + reinterpret_cast<ElementType*>(dest_data) + offset, length, \ + source_shared || destination_shared ? kShared : kUnshared); \ break; TYPED_ARRAYS(TYPED_ARRAY_CASE) default: @@ -3529,6 +3687,9 @@ class TypedElementsAccessor ElementsKind kind = source.GetElementsKind(); + auto destination_shared = + destination.buffer().is_shared() ? kShared : kUnshared; + // When we find the hole, we normally have to look up the element on the // prototype chain, which is not handled here and we return false instead. // When the array has the original array prototype, and that prototype has @@ -3546,17 +3707,19 @@ class TypedElementsAccessor for (size_t i = 0; i < length; i++) { Object elem = source_store.get(static_cast<int>(i)); - SetImpl(dest_data, i, FromScalar(Smi::ToInt(elem))); + SetImpl(dest_data + i, FromScalar(Smi::ToInt(elem)), + destination_shared); } return true; } else if (kind == HOLEY_SMI_ELEMENTS) { FixedArray source_store = FixedArray::cast(source.elements()); for (size_t i = 0; i < length; i++) { if (source_store.is_the_hole(isolate, static_cast<int>(i))) { - SetImpl(dest_data, i, FromObject(undefined)); + SetImpl(dest_data + i, FromObject(undefined), destination_shared); } else { Object elem = source_store.get(static_cast<int>(i)); - SetImpl(dest_data, i, FromScalar(Smi::ToInt(elem))); + SetImpl(dest_data + i, FromScalar(Smi::ToInt(elem)), + destination_shared); } } return true; @@ -3569,17 +3732,17 @@ class TypedElementsAccessor // Use the from_double conversion for this specific TypedArray type, // rather than relying on C++ to convert elem. double elem = source_store.get_scalar(static_cast<int>(i)); - SetImpl(dest_data, i, FromScalar(elem)); + SetImpl(dest_data + i, FromScalar(elem), destination_shared); } return true; } else if (kind == HOLEY_DOUBLE_ELEMENTS) { FixedDoubleArray source_store = FixedDoubleArray::cast(source.elements()); for (size_t i = 0; i < length; i++) { if (source_store.is_the_hole(static_cast<int>(i))) { - SetImpl(dest_data, i, FromObject(undefined)); + SetImpl(dest_data + i, FromObject(undefined), destination_shared); } else { double elem = source_store.get_scalar(static_cast<int>(i)); - SetImpl(dest_data, i, FromScalar(elem)); + SetImpl(dest_data + i, FromScalar(elem), destination_shared); } } return true; @@ -3872,9 +4035,225 @@ Handle<Object> TypedElementsAccessor<BIGUINT64_ELEMENTS, uint64_t>::ToHandle( return BigInt::FromUint64(isolate, value); } +// static +template <> +Handle<Object> TypedElementsAccessor<RAB_GSAB_INT8_ELEMENTS, int8_t>::ToHandle( + Isolate* isolate, int8_t value) { + return handle(Smi::FromInt(value), isolate); +} + +// static +template <> +Handle<Object> TypedElementsAccessor<RAB_GSAB_UINT8_ELEMENTS, + uint8_t>::ToHandle(Isolate* isolate, + uint8_t value) { + return handle(Smi::FromInt(value), isolate); +} + +// static +template <> +Handle<Object> TypedElementsAccessor<RAB_GSAB_INT16_ELEMENTS, + int16_t>::ToHandle(Isolate* isolate, + int16_t value) { + return handle(Smi::FromInt(value), isolate); +} + +// static +template <> +Handle<Object> TypedElementsAccessor<RAB_GSAB_UINT16_ELEMENTS, + uint16_t>::ToHandle(Isolate* isolate, + uint16_t value) { + return handle(Smi::FromInt(value), isolate); +} + +// static +template <> +Handle<Object> TypedElementsAccessor<RAB_GSAB_INT32_ELEMENTS, + int32_t>::ToHandle(Isolate* isolate, + int32_t value) { + return isolate->factory()->NewNumberFromInt(value); +} + +// static +template <> +Handle<Object> TypedElementsAccessor<RAB_GSAB_UINT32_ELEMENTS, + uint32_t>::ToHandle(Isolate* isolate, + uint32_t value) { + return isolate->factory()->NewNumberFromUint(value); +} + +// static +template <> +float TypedElementsAccessor<RAB_GSAB_FLOAT32_ELEMENTS, float>::FromScalar( + double value) { + return DoubleToFloat32(value); +} + +// static +template <> +Handle<Object> TypedElementsAccessor<RAB_GSAB_FLOAT32_ELEMENTS, + float>::ToHandle(Isolate* isolate, + float value) { + return isolate->factory()->NewNumber(value); +} + +// static +template <> +double TypedElementsAccessor<RAB_GSAB_FLOAT64_ELEMENTS, double>::FromScalar( + double value) { + return value; +} + +// static +template <> +Handle<Object> TypedElementsAccessor<RAB_GSAB_FLOAT64_ELEMENTS, + double>::ToHandle(Isolate* isolate, + double value) { + return isolate->factory()->NewNumber(value); +} + +// static +template <> +uint8_t TypedElementsAccessor<RAB_GSAB_UINT8_CLAMPED_ELEMENTS, + uint8_t>::FromScalar(int value) { + if (value < 0x00) return 0x00; + if (value > 0xFF) return 0xFF; + return static_cast<uint8_t>(value); +} + +// static +template <> +uint8_t TypedElementsAccessor<RAB_GSAB_UINT8_CLAMPED_ELEMENTS, + uint8_t>::FromScalar(uint32_t value) { + // We need this special case for Uint32 -> Uint8Clamped, because the highest + // Uint32 values will be negative as an int, clamping to 0, rather than 255. + if (value > 0xFF) return 0xFF; + return static_cast<uint8_t>(value); +} + +// static +template <> +uint8_t TypedElementsAccessor<RAB_GSAB_UINT8_CLAMPED_ELEMENTS, + uint8_t>::FromScalar(double value) { + // Handle NaNs and less than zero values which clamp to zero. + if (!(value > 0)) return 0; + if (value > 0xFF) return 0xFF; + return static_cast<uint8_t>(lrint(value)); +} + +// static +template <> +Handle<Object> TypedElementsAccessor<RAB_GSAB_UINT8_CLAMPED_ELEMENTS, + uint8_t>::ToHandle(Isolate* isolate, + uint8_t value) { + return handle(Smi::FromInt(value), isolate); +} + +// static +template <> +int64_t TypedElementsAccessor<RAB_GSAB_BIGINT64_ELEMENTS, int64_t>::FromScalar( + int value) { + UNREACHABLE(); +} + +// static +template <> +int64_t TypedElementsAccessor<RAB_GSAB_BIGINT64_ELEMENTS, int64_t>::FromScalar( + uint32_t value) { + UNREACHABLE(); +} + +// static +template <> +int64_t TypedElementsAccessor<RAB_GSAB_BIGINT64_ELEMENTS, int64_t>::FromScalar( + double value) { + UNREACHABLE(); +} + +// static +template <> +int64_t TypedElementsAccessor<RAB_GSAB_BIGINT64_ELEMENTS, int64_t>::FromScalar( + int64_t value) { + return value; +} + +// static +template <> +int64_t TypedElementsAccessor<RAB_GSAB_BIGINT64_ELEMENTS, int64_t>::FromScalar( + uint64_t value) { + return static_cast<int64_t>(value); +} + +// static +template <> +int64_t TypedElementsAccessor<RAB_GSAB_BIGINT64_ELEMENTS, int64_t>::FromObject( + Object value, bool* lossless) { + return BigInt::cast(value).AsInt64(lossless); +} + +// static +template <> +Handle<Object> TypedElementsAccessor<RAB_GSAB_BIGINT64_ELEMENTS, + int64_t>::ToHandle(Isolate* isolate, + int64_t value) { + return BigInt::FromInt64(isolate, value); +} + +// static +template <> +uint64_t TypedElementsAccessor<RAB_GSAB_BIGUINT64_ELEMENTS, + uint64_t>::FromScalar(int value) { + UNREACHABLE(); +} + +// static +template <> +uint64_t TypedElementsAccessor<RAB_GSAB_BIGUINT64_ELEMENTS, + uint64_t>::FromScalar(uint32_t value) { + UNREACHABLE(); +} + +// static +template <> +uint64_t TypedElementsAccessor<RAB_GSAB_BIGUINT64_ELEMENTS, + uint64_t>::FromScalar(double value) { + UNREACHABLE(); +} + +// static +template <> +uint64_t TypedElementsAccessor<RAB_GSAB_BIGUINT64_ELEMENTS, + uint64_t>::FromScalar(int64_t value) { + return static_cast<uint64_t>(value); +} + +// static +template <> +uint64_t TypedElementsAccessor<RAB_GSAB_BIGUINT64_ELEMENTS, + uint64_t>::FromScalar(uint64_t value) { + return value; +} + +// static +template <> +uint64_t TypedElementsAccessor<RAB_GSAB_BIGUINT64_ELEMENTS, + uint64_t>::FromObject(Object value, + bool* lossless) { + return BigInt::cast(value).AsUint64(lossless); +} + +// static +template <> +Handle<Object> TypedElementsAccessor<RAB_GSAB_BIGUINT64_ELEMENTS, + uint64_t>::ToHandle(Isolate* isolate, + uint64_t value) { + return BigInt::FromUint64(isolate, value); +} + #define FIXED_ELEMENTS_ACCESSOR(Type, type, TYPE, ctype) \ using Type##ElementsAccessor = TypedElementsAccessor<TYPE##_ELEMENTS, ctype>; TYPED_ARRAYS(FIXED_ELEMENTS_ACCESSOR) +RAB_GSAB_TYPED_ARRAYS(FIXED_ELEMENTS_ACCESSOR) #undef FIXED_ELEMENTS_ACCESSOR template <typename Subclass, typename ArgumentsAccessor, typename KindTraits> @@ -3894,7 +4273,7 @@ class SloppyArgumentsElementsAccessor if (entry.as_uint32() < length) { // Read context mapped entry. DisallowGarbageCollection no_gc; - Object probe = elements->mapped_entries(entry.as_uint32()); + Object probe = elements->mapped_entries(entry.as_uint32(), kRelaxedLoad); DCHECK(!probe.IsTheHole(isolate)); Context context = elements->context(); int context_entry = Smi::ToInt(probe); @@ -3908,13 +4287,13 @@ class SloppyArgumentsElementsAccessor } } - static void TransitionElementsKindImpl(Handle<JSObject> object, - Handle<Map> map) { + static Maybe<bool> TransitionElementsKindImpl(Handle<JSObject> object, + Handle<Map> map) { UNREACHABLE(); } - static void GrowCapacityAndConvertImpl(Handle<JSObject> object, - uint32_t capacity) { + static Maybe<bool> GrowCapacityAndConvertImpl(Handle<JSObject> object, + uint32_t capacity) { UNREACHABLE(); } @@ -3930,7 +4309,7 @@ class SloppyArgumentsElementsAccessor if (entry.as_uint32() < length) { // Store context mapped entry. DisallowGarbageCollection no_gc; - Object probe = elements.mapped_entries(entry.as_uint32()); + Object probe = elements.mapped_entries(entry.as_uint32(), kRelaxedLoad); DCHECK(!probe.IsTheHole()); Context context = Context::cast(elements.context()); int context_entry = Smi::ToInt(probe); @@ -3953,9 +4332,9 @@ class SloppyArgumentsElementsAccessor } } - static void SetLengthImpl(Isolate* isolate, Handle<JSArray> array, - uint32_t length, - Handle<FixedArrayBase> parameter_map) { + static Maybe<bool> SetLengthImpl(Isolate* isolate, Handle<JSArray> array, + uint32_t length, + Handle<FixedArrayBase> parameter_map) { // Sloppy arguments objects are not arrays. UNREACHABLE(); } @@ -4063,7 +4442,7 @@ class SloppyArgumentsElementsAccessor size_t index) { uint32_t length = elements.length(); if (index >= length) return false; - return !elements.mapped_entries(static_cast<uint32_t>(index)) + return !elements.mapped_entries(static_cast<uint32_t>(index), kRelaxedLoad) .IsTheHole(isolate); } @@ -4118,7 +4497,8 @@ class SloppyArgumentsElementsAccessor uint32_t length = elements->length(); for (uint32_t i = 0; i < length; ++i) { - if (elements->mapped_entries(i).IsTheHole(isolate)) continue; + if (elements->mapped_entries(i, kRelaxedLoad).IsTheHole(isolate)) + continue; if (convert == GetKeysConversion::kConvertToString) { Handle<String> index_string = isolate->factory()->Uint32ToString(i); list->set(insertion_index, *index_string); @@ -4251,9 +4631,10 @@ class SlowSloppyArgumentsElementsAccessor NumberDictionary::DeleteEntry(isolate, dict, entry.adjust_down(length)); elements->set_arguments(*dict); } - static void AddImpl(Handle<JSObject> object, uint32_t index, - Handle<Object> value, PropertyAttributes attributes, - uint32_t new_capacity) { + static Maybe<bool> AddImpl(Handle<JSObject> object, uint32_t index, + Handle<Object> value, + PropertyAttributes attributes, + uint32_t new_capacity) { Isolate* isolate = object->GetIsolate(); Handle<SloppyArgumentsElements> elements( SloppyArgumentsElements::cast(object->elements()), isolate); @@ -4270,6 +4651,7 @@ class SlowSloppyArgumentsElementsAccessor if (*dictionary != *new_dictionary) { elements->set_arguments(*new_dictionary); } + return Just(true); } static void ReconfigureImpl(Handle<JSObject> object, @@ -4281,7 +4663,7 @@ class SlowSloppyArgumentsElementsAccessor Handle<SloppyArgumentsElements>::cast(store); uint32_t length = elements->length(); if (entry.as_uint32() < length) { - Object probe = elements->mapped_entries(entry.as_uint32()); + Object probe = elements->mapped_entries(entry.as_uint32(), kRelaxedLoad); DCHECK(!probe.IsTheHole(isolate)); Context context = elements->context(); int context_entry = Smi::ToInt(probe); @@ -4365,9 +4747,10 @@ class FastSloppyArgumentsElementsAccessor SlowSloppyArgumentsElementsAccessor::SloppyDeleteImpl(obj, elements, entry); } - static void AddImpl(Handle<JSObject> object, uint32_t index, - Handle<Object> value, PropertyAttributes attributes, - uint32_t new_capacity) { + static Maybe<bool> AddImpl(Handle<JSObject> object, uint32_t index, + Handle<Object> value, + PropertyAttributes attributes, + uint32_t new_capacity) { DCHECK_EQ(NONE, attributes); Isolate* isolate = object->GetIsolate(); Handle<SloppyArgumentsElements> elements( @@ -4375,7 +4758,8 @@ class FastSloppyArgumentsElementsAccessor Handle<FixedArray> old_arguments(elements->arguments(), isolate); if (old_arguments->IsNumberDictionary() || static_cast<uint32_t>(old_arguments->length()) < new_capacity) { - GrowCapacityAndConvertImpl(object, new_capacity); + MAYBE_RETURN(GrowCapacityAndConvertImpl(object, new_capacity), + Nothing<bool>()); } FixedArray arguments = elements->arguments(); // For fast holey objects, the entry equals the index. The code above made @@ -4385,6 +4769,7 @@ class FastSloppyArgumentsElementsAccessor // kMaxUInt32. FastHoleyObjectElementsAccessor::SetImpl(arguments, InternalIndex(index), *value); + return Just(true); } static void ReconfigureImpl(Handle<JSObject> object, @@ -4414,8 +4799,8 @@ class FastSloppyArgumentsElementsAccessor } } - static void GrowCapacityAndConvertImpl(Handle<JSObject> object, - uint32_t capacity) { + static Maybe<bool> GrowCapacityAndConvertImpl(Handle<JSObject> object, + uint32_t capacity) { Isolate* isolate = object->GetIsolate(); Handle<SloppyArgumentsElements> elements( SloppyArgumentsElements::cast(object->elements()), isolate); @@ -4426,13 +4811,17 @@ class FastSloppyArgumentsElementsAccessor // elements. DCHECK(from_kind == SLOW_SLOPPY_ARGUMENTS_ELEMENTS || static_cast<uint32_t>(old_arguments->length()) < capacity); - Handle<FixedArrayBase> arguments = - ConvertElementsWithCapacity(object, old_arguments, from_kind, capacity); + Handle<FixedArrayBase> arguments; + ASSIGN_RETURN_ON_EXCEPTION_VALUE( + isolate, arguments, + ConvertElementsWithCapacity(object, old_arguments, from_kind, capacity), + Nothing<bool>()); Handle<Map> new_map = JSObject::GetElementsTransitionMap( object, FAST_SLOPPY_ARGUMENTS_ELEMENTS); JSObject::MigrateToMap(isolate, object, new_map); elements->set_arguments(FixedArray::cast(*arguments)); JSObject::ValidateElements(*object); + return Just(true); } }; @@ -4504,9 +4893,10 @@ class StringWrapperElementsAccessor value); } - static void AddImpl(Handle<JSObject> object, uint32_t index, - Handle<Object> value, PropertyAttributes attributes, - uint32_t new_capacity) { + static Maybe<bool> AddImpl(Handle<JSObject> object, uint32_t index, + Handle<Object> value, + PropertyAttributes attributes, + uint32_t new_capacity) { DCHECK(index >= static_cast<uint32_t>(GetString(*object).length())); // Explicitly grow fast backing stores if needed. Dictionaries know how to // extend their capacity themselves. @@ -4514,10 +4904,12 @@ class StringWrapperElementsAccessor (object->GetElementsKind() == SLOW_STRING_WRAPPER_ELEMENTS || BackingStoreAccessor::GetCapacityImpl(*object, object->elements()) != new_capacity)) { - GrowCapacityAndConvertImpl(object, new_capacity); + MAYBE_RETURN(GrowCapacityAndConvertImpl(object, new_capacity), + Nothing<bool>()); } BackingStoreAccessor::AddImpl(object, index, value, attributes, new_capacity); + return Just(true); } static void ReconfigureImpl(Handle<JSObject> object, @@ -4562,8 +4954,8 @@ class StringWrapperElementsAccessor backing_store, keys); } - static void GrowCapacityAndConvertImpl(Handle<JSObject> object, - uint32_t capacity) { + static Maybe<bool> GrowCapacityAndConvertImpl(Handle<JSObject> object, + uint32_t capacity) { Handle<FixedArrayBase> old_elements(object->elements(), object->GetIsolate()); ElementsKind from_kind = object->GetElementsKind(); @@ -4578,9 +4970,9 @@ class StringWrapperElementsAccessor // elements. DCHECK(from_kind == SLOW_STRING_WRAPPER_ELEMENTS || static_cast<uint32_t>(old_elements->length()) < capacity); - Subclass::BasicGrowCapacityAndConvertImpl(object, old_elements, from_kind, - FAST_STRING_WRAPPER_ELEMENTS, - capacity); + return Subclass::BasicGrowCapacityAndConvertImpl( + object, old_elements, from_kind, FAST_STRING_WRAPPER_ELEMENTS, + capacity); } static void CopyElementsImpl(Isolate* isolate, FixedArrayBase from, @@ -4665,7 +5057,7 @@ MaybeHandle<Object> ArrayConstructInitializeElements( } else { // Take the argument as the length. JSArray::Initialize(array, 0); - JSArray::SetLength(array, length); + MAYBE_RETURN_NULL(JSArray::SetLength(array, length)); } return array; } diff --git a/deps/v8/src/objects/elements.h b/deps/v8/src/objects/elements.h index 4a34e866f2..23dbe1d34f 100644 --- a/deps/v8/src/objects/elements.h +++ b/deps/v8/src/objects/elements.h @@ -66,7 +66,8 @@ class ElementsAccessor { // changing array sizes as defined in EcmaScript 5.1 15.4.5.2, i.e. array that // have non-deletable elements can only be shrunk to the size of highest // element that is non-deletable. - virtual void SetLength(Handle<JSArray> holder, uint32_t new_length) = 0; + V8_WARN_UNUSED_RESULT virtual Maybe<bool> SetLength(Handle<JSArray> holder, + uint32_t new_length) = 0; // Copy all indices that have elements from |object| into the given // KeyAccumulator. For Dictionary-based element-kinds we filter out elements @@ -96,13 +97,14 @@ class ElementsAccessor { Handle<JSObject> receiver, KeyAccumulator* accumulator, AddKeyConversion convert) = 0; - virtual void TransitionElementsKind(Handle<JSObject> object, - Handle<Map> map) = 0; - virtual void GrowCapacityAndConvert(Handle<JSObject> object, - uint32_t capacity) = 0; + V8_WARN_UNUSED_RESULT virtual Maybe<bool> TransitionElementsKind( + Handle<JSObject> object, Handle<Map> map) = 0; + V8_WARN_UNUSED_RESULT virtual Maybe<bool> GrowCapacityAndConvert( + Handle<JSObject> object, uint32_t capacity) = 0; // Unlike GrowCapacityAndConvert do not attempt to convert the backing store // and simply return false in this case. - virtual bool GrowCapacity(Handle<JSObject> object, uint32_t index) = 0; + V8_WARN_UNUSED_RESULT virtual Maybe<bool> GrowCapacity( + Handle<JSObject> object, uint32_t index) = 0; static void InitializeOncePerProcess(); static void TearDown(); @@ -110,29 +112,36 @@ class ElementsAccessor { virtual void Set(Handle<JSObject> holder, InternalIndex entry, Object value) = 0; - virtual void Add(Handle<JSObject> object, uint32_t index, - Handle<Object> value, PropertyAttributes attributes, - uint32_t new_capacity) = 0; + V8_WARN_UNUSED_RESULT virtual Maybe<bool> Add(Handle<JSObject> object, + uint32_t index, + Handle<Object> value, + PropertyAttributes attributes, + uint32_t new_capacity) = 0; static Handle<JSArray> Concat(Isolate* isolate, BuiltinArguments* args, uint32_t concat_size, uint32_t result_length); - virtual uint32_t Push(Handle<JSArray> receiver, BuiltinArguments* args, - uint32_t push_size) = 0; + V8_WARN_UNUSED_RESULT virtual Maybe<uint32_t> Push(Handle<JSArray> receiver, + BuiltinArguments* args, + uint32_t push_size) = 0; - virtual uint32_t Unshift(Handle<JSArray> receiver, BuiltinArguments* args, - uint32_t unshift_size) = 0; + V8_WARN_UNUSED_RESULT virtual Maybe<uint32_t> Unshift( + Handle<JSArray> receiver, BuiltinArguments* args, + uint32_t unshift_size) = 0; - virtual Handle<Object> Pop(Handle<JSArray> receiver) = 0; + V8_WARN_UNUSED_RESULT virtual MaybeHandle<Object> Pop( + Handle<JSArray> receiver) = 0; - virtual Handle<Object> Shift(Handle<JSArray> receiver) = 0; + V8_WARN_UNUSED_RESULT virtual MaybeHandle<Object> Shift( + Handle<JSArray> receiver) = 0; virtual Handle<NumberDictionary> Normalize(Handle<JSObject> object) = 0; virtual size_t GetCapacity(JSObject holder, FixedArrayBase backing_store) = 0; - virtual Object Fill(Handle<JSObject> receiver, Handle<Object> obj_value, - size_t start, size_t end) = 0; + V8_WARN_UNUSED_RESULT virtual MaybeHandle<Object> Fill( + Handle<JSObject> receiver, Handle<Object> obj_value, size_t start, + size_t end) = 0; // Check an Object's own elements for an element (using SameValueZero // semantics) diff --git a/deps/v8/src/objects/embedder-data-slot-inl.h b/deps/v8/src/objects/embedder-data-slot-inl.h index 3f8deb39f0..983a0b0ad4 100644 --- a/deps/v8/src/objects/embedder-data-slot-inl.h +++ b/deps/v8/src/objects/embedder-data-slot-inl.h @@ -81,7 +81,7 @@ void EmbedderDataSlot::store_tagged(JSObject object, int embedder_field_index, #endif } -bool EmbedderDataSlot::ToAlignedPointer(PtrComprCageBase isolate_root, +bool EmbedderDataSlot::ToAlignedPointer(Isolate* isolate, void** out_pointer) const { // We don't care about atomicity of access here because embedder slots // are accessed this way only from the main thread via API during "mutator" @@ -89,16 +89,9 @@ bool EmbedderDataSlot::ToAlignedPointer(PtrComprCageBase isolate_root, // at the tagged part of the embedder slot but read-only access is ok). Address raw_value; #ifdef V8_HEAP_SANDBOX - - // TODO(syg): V8_HEAP_SANDBOX doesn't work with pointer cage -#ifdef V8_COMPRESS_POINTERS_IN_SHARED_CAGE -#error "V8_HEAP_SANDBOX requires per-Isolate pointer compression cage" -#endif - uint32_t index = base::Memory<uint32_t>(address() + kRawPayloadOffset); - const Isolate* isolate = Isolate::FromRootAddress(isolate_root.address()); - raw_value = isolate->external_pointer_table().get(index) ^ - kEmbedderDataSlotPayloadTag; + raw_value = isolate->external_pointer_table().get(index) & + ~kEmbedderDataSlotPayloadTag; #else if (COMPRESS_POINTERS_BOOL) { // TODO(ishell, v8:8875): When pointer compression is enabled 8-byte size @@ -114,27 +107,20 @@ bool EmbedderDataSlot::ToAlignedPointer(PtrComprCageBase isolate_root, return HAS_SMI_TAG(raw_value); } -bool EmbedderDataSlot::ToAlignedPointerSafe(PtrComprCageBase isolate_root, +bool EmbedderDataSlot::ToAlignedPointerSafe(Isolate* isolate, void** out_pointer) const { #ifdef V8_HEAP_SANDBOX - - // TODO(syg): V8_HEAP_SANDBOX doesn't work with pointer cage -#ifdef V8_COMPRESS_POINTERS_IN_SHARED_CAGE -#error "V8_HEAP_SANDBOX requires per-Isolate pointer compression cage" -#endif - uint32_t index = base::Memory<uint32_t>(address() + kRawPayloadOffset); Address raw_value; - const Isolate* isolate = Isolate::FromRootAddress(isolate_root.address()); if (isolate->external_pointer_table().is_valid_index(index)) { - raw_value = isolate->external_pointer_table().get(index) ^ - kEmbedderDataSlotPayloadTag; + raw_value = isolate->external_pointer_table().get(index) & + ~kEmbedderDataSlotPayloadTag; *out_pointer = reinterpret_cast<void*>(raw_value); return true; } return false; #else - return ToAlignedPointer(isolate_root, out_pointer); + return ToAlignedPointer(isolate, out_pointer); #endif // V8_HEAP_SANDBOX } @@ -150,7 +136,7 @@ bool EmbedderDataSlot::store_aligned_pointer(Isolate* isolate, void* ptr) { ObjectSlot(address() + kRawPayloadOffset).Relaxed_Load(); uint32_t index = static_cast<uint32_t>(index_as_object.ptr()); isolate->external_pointer_table().set(index, - value ^ kEmbedderDataSlotPayloadTag); + value | kEmbedderDataSlotPayloadTag); return true; } #endif diff --git a/deps/v8/src/objects/embedder-data-slot.h b/deps/v8/src/objects/embedder-data-slot.h index 65fe78403a..6213b7b333 100644 --- a/deps/v8/src/objects/embedder-data-slot.h +++ b/deps/v8/src/objects/embedder-data-slot.h @@ -75,8 +75,7 @@ class EmbedderDataSlot // When V8 heap sandbox is enabled, calling this method when the raw part of // the slot does not contain valid external pointer table index is undefined // behaviour and most likely result in crashes. - V8_INLINE bool ToAlignedPointer(PtrComprCageBase isolate_root, - void** out_result) const; + V8_INLINE bool ToAlignedPointer(Isolate* isolate, void** out_result) const; // Same as ToAlignedPointer() but with a workaround for V8 heap sandbox. // When V8 heap sandbox is enabled, this method doesn't crash when the raw @@ -87,7 +86,7 @@ class EmbedderDataSlot // // Call this function if you are not sure whether the slot contains valid // external pointer or not. - V8_INLINE bool ToAlignedPointerSafe(PtrComprCageBase isolate_root, + V8_INLINE bool ToAlignedPointerSafe(Isolate* isolate, void** out_result) const; // Returns true if the pointer was successfully stored or false it the pointer diff --git a/deps/v8/src/objects/feedback-vector-inl.h b/deps/v8/src/objects/feedback-vector-inl.h index 8853dabdbd..aea13c5fd6 100644 --- a/deps/v8/src/objects/feedback-vector-inl.h +++ b/deps/v8/src/objects/feedback-vector-inl.h @@ -182,14 +182,15 @@ bool FeedbackVector::IsOfLegacyType(MaybeObject value) { #endif // DEBUG MaybeObject FeedbackVector::Get(FeedbackSlot slot) const { - MaybeObject value = raw_feedback_slots(GetIndex(slot)); + MaybeObject value = raw_feedback_slots(GetIndex(slot), kRelaxedLoad); DCHECK(!IsOfLegacyType(value)); return value; } MaybeObject FeedbackVector::Get(PtrComprCageBase cage_base, FeedbackSlot slot) const { - MaybeObject value = raw_feedback_slots(cage_base, GetIndex(slot)); + MaybeObject value = + raw_feedback_slots(cage_base, GetIndex(slot), kRelaxedLoad); DCHECK(!IsOfLegacyType(value)); return value; } @@ -335,6 +336,10 @@ Handle<Symbol> FeedbackVector::MegamorphicSentinel(Isolate* isolate) { return isolate->factory()->megamorphic_symbol(); } +Handle<Symbol> FeedbackVector::MegaDOMSentinel(Isolate* isolate) { + return isolate->factory()->mega_dom_symbol(); +} + Symbol FeedbackVector::RawUninitializedSentinel(Isolate* isolate) { return ReadOnlyRoots(isolate).uninitialized_symbol(); } @@ -377,6 +382,11 @@ MaybeObject FeedbackNexus::MegamorphicSentinel() const { *FeedbackVector::MegamorphicSentinel(GetIsolate())); } +MaybeObject FeedbackNexus::MegaDOMSentinel() const { + return MaybeObject::FromObject( + *FeedbackVector::MegaDOMSentinel(GetIsolate())); +} + MaybeObject FeedbackNexus::FromHandle(MaybeObjectHandle slot) const { return slot.is_null() ? HeapObjectReference::ClearedValue(config()->isolate()) : *slot; diff --git a/deps/v8/src/objects/feedback-vector.cc b/deps/v8/src/objects/feedback-vector.cc index a77ea5d265..5f4cf592b0 100644 --- a/deps/v8/src/objects/feedback-vector.cc +++ b/deps/v8/src/objects/feedback-vector.cc @@ -54,6 +54,7 @@ static bool IsPropertyNameFeedback(MaybeObject feedback) { Symbol symbol = Symbol::cast(heap_object); ReadOnlyRoots roots = symbol.GetReadOnlyRoots(); return symbol != roots.uninitialized_symbol() && + symbol != roots.mega_dom_symbol() && symbol != roots.megamorphic_symbol(); } @@ -75,8 +76,8 @@ void FeedbackMetadata::SetKind(FeedbackSlot slot, FeedbackSlotKind kind) { } // static -template <typename LocalIsolate> -Handle<FeedbackMetadata> FeedbackMetadata::New(LocalIsolate* isolate, +template <typename IsolateT> +Handle<FeedbackMetadata> FeedbackMetadata::New(IsolateT* isolate, const FeedbackVectorSpec* spec) { auto* factory = isolate->factory(); @@ -253,8 +254,6 @@ Handle<FeedbackVector> FeedbackVector::New( DCHECK_EQ(vector->optimization_marker(), FLAG_log_function_events ? OptimizationMarker::kLogFirstExecution : OptimizationMarker::kNone); - // TODO(mythria): This might change if NCI code is installed on feedback - // vector. Update this accordingly. DCHECK_EQ(vector->optimization_tier(), OptimizationTier::kNone); DCHECK_EQ(vector->invocation_count(), 0); DCHECK_EQ(vector->profiler_ticks(), 0); @@ -676,6 +675,13 @@ bool FeedbackNexus::ConfigureMegamorphic() { return false; } +void FeedbackNexus::ConfigureMegaDOM(const MaybeObjectHandle& handler) { + DisallowGarbageCollection no_gc; + MaybeObject sentinel = MegaDOMSentinel(); + + SetFeedback(sentinel, SKIP_WRITE_BARRIER, *handler, UPDATE_WRITE_BARRIER); +} + bool FeedbackNexus::ConfigureMegamorphic(IcCheckType property_type) { DisallowGarbageCollection no_gc; MaybeObject sentinel = MegamorphicSentinel(); @@ -737,6 +743,10 @@ InlineCacheState FeedbackNexus::ic_state() const { if (feedback == MegamorphicSentinel()) { return MEGAMORPHIC; } + if (feedback == MegaDOMSentinel()) { + DCHECK(IsLoadICKind(kind())); + return MEGADOM; + } if (feedback->IsWeakOrCleared()) { // Don't check if the map is cleared. return MONOMORPHIC; @@ -999,6 +1009,15 @@ SpeculationMode FeedbackNexus::GetSpeculationMode() { return SpeculationModeField::decode(value); } +CallFeedbackContent FeedbackNexus::GetCallFeedbackContent() { + DCHECK(IsCallICKind(kind())); + + Object call_count = GetFeedbackExtra()->cast<Object>(); + CHECK(call_count.IsSmi()); + uint32_t value = static_cast<uint32_t>(Smi::ToInt(call_count)); + return CallFeedbackContentField::decode(value); +} + float FeedbackNexus::ComputeCallFrequency() { DCHECK(IsCallICKind(kind())); @@ -1407,52 +1426,6 @@ std::vector<Handle<String>> FeedbackNexus::GetTypesForSourcePositions( return types_for_position; } -namespace { - -Handle<JSObject> ConvertToJSObject(Isolate* isolate, - Handle<SimpleNumberDictionary> feedback) { - Handle<JSObject> type_profile = - isolate->factory()->NewJSObject(isolate->object_function()); - - for (int index = SimpleNumberDictionary::kElementsStartIndex; - index < feedback->length(); - index += SimpleNumberDictionary::kEntrySize) { - int key_index = index + SimpleNumberDictionary::kEntryKeyIndex; - Object key = feedback->get(key_index); - if (key.IsSmi()) { - int value_index = index + SimpleNumberDictionary::kEntryValueIndex; - - Handle<ArrayList> position_specific_types( - ArrayList::cast(feedback->get(value_index)), isolate); - - int position = Smi::ToInt(key); - JSObject::AddDataElement( - type_profile, position, - isolate->factory()->NewJSArrayWithElements( - ArrayList::Elements(isolate, position_specific_types)), - PropertyAttributes::NONE); - } - } - return type_profile; -} -} // namespace - -JSObject FeedbackNexus::GetTypeProfile() const { - DCHECK(IsTypeProfileKind(kind())); - Isolate* isolate = GetIsolate(); - - MaybeObject const feedback = GetFeedback(); - - if (feedback == UninitializedSentinel()) { - return *isolate->factory()->NewJSObject(isolate->object_function()); - } - - return *ConvertToJSObject(isolate, - handle(SimpleNumberDictionary::cast( - feedback->GetHeapObjectAssumeStrong()), - isolate)); -} - void FeedbackNexus::ResetTypeProfile() { DCHECK(IsTypeProfileKind(kind())); SetFeedback(UninitializedSentinel()); diff --git a/deps/v8/src/objects/feedback-vector.h b/deps/v8/src/objects/feedback-vector.h index cc5e867f72..07aad24430 100644 --- a/deps/v8/src/objects/feedback-vector.h +++ b/deps/v8/src/objects/feedback-vector.h @@ -130,8 +130,8 @@ inline bool IsCloneObjectKind(FeedbackSlotKind kind) { inline TypeofMode GetTypeofModeFromSlotKind(FeedbackSlotKind kind) { DCHECK(IsLoadGlobalICKind(kind)); return (kind == FeedbackSlotKind::kLoadGlobalInsideTypeof) - ? INSIDE_TYPEOF - : NOT_INSIDE_TYPEOF; + ? TypeofMode::kInside + : TypeofMode::kNotInside; } inline LanguageMode GetLanguageModeFromSlotKind(FeedbackSlotKind kind) { @@ -311,7 +311,7 @@ class FeedbackVector DECL_PRINTER(FeedbackVector) - void FeedbackSlotPrint(std::ostream& os, FeedbackSlot slot); // NOLINT + void FeedbackSlotPrint(std::ostream& os, FeedbackSlot slot); // Clears the vector slots. Return true if feedback has changed. bool ClearSlots(Isolate* isolate); @@ -322,6 +322,9 @@ class FeedbackVector // The object that indicates a megamorphic state. static inline Handle<Symbol> MegamorphicSentinel(Isolate* isolate); + // The object that indicates a MegaDOM state. + static inline Handle<Symbol> MegaDOMSentinel(Isolate* isolate); + // A raw version of the uninitialized sentinel that's safe to read during // garbage collection (e.g., for patching the cache). static inline Symbol RawUninitializedSentinel(Isolate* isolate); @@ -389,7 +392,7 @@ class V8_EXPORT_PRIVATE FeedbackVectorSpec { } FeedbackSlot AddLoadGlobalICSlot(TypeofMode typeof_mode) { - return AddSlot(typeof_mode == INSIDE_TYPEOF + return AddSlot(typeof_mode == TypeofMode::kInside ? FeedbackSlotKind::kLoadGlobalInsideTypeof : FeedbackSlotKind::kLoadGlobalNotInsideTypeof); } @@ -532,9 +535,9 @@ class FeedbackMetadata : public HeapObject { V8_EXPORT_PRIVATE FeedbackSlotKind GetKind(FeedbackSlot slot) const; // If {spec} is null, then it is considered empty. - template <typename LocalIsolate> + template <typename IsolateT> V8_EXPORT_PRIVATE static Handle<FeedbackMetadata> New( - LocalIsolate* isolate, const FeedbackVectorSpec* spec = nullptr); + IsolateT* isolate, const FeedbackVectorSpec* spec = nullptr); DECL_PRINTER(FeedbackMetadata) DECL_VERIFIER(FeedbackMetadata) @@ -588,7 +591,6 @@ class FeedbackMetadata : public HeapObject { // Verify that an empty hash field looks like a tagged object, but can't // possibly be confused with a pointer. -// NOLINTNEXTLINE(runtime/references) (false positive) STATIC_ASSERT((Name::kEmptyHashField & kHeapObjectTag) == kHeapObjectTag); STATIC_ASSERT(Name::kEmptyHashField == 0x3); // Verify that a set hash field will not look like a tagged object. @@ -728,7 +730,7 @@ class V8_EXPORT_PRIVATE FeedbackNexus final { bool IsMegamorphic() const { return ic_state() == MEGAMORPHIC; } bool IsGeneric() const { return ic_state() == GENERIC; } - void Print(std::ostream& os); // NOLINT + void Print(std::ostream& os); // For map-based ICs (load, keyed-load, store, keyed-store). Map GetFirstMap() const; @@ -773,6 +775,8 @@ class V8_EXPORT_PRIVATE FeedbackNexus final { void ConfigurePolymorphic( Handle<Name> name, std::vector<MapAndHandler> const& maps_and_handlers); + void ConfigureMegaDOM(const MaybeObjectHandle& handler); + BinaryOperationHint GetBinaryOperationFeedback() const; CompareOperationHint GetCompareOperationFeedback() const; ForInHint GetForInFeedback() const; @@ -791,13 +795,15 @@ class V8_EXPORT_PRIVATE FeedbackNexus final { int GetCallCount(); void SetSpeculationMode(SpeculationMode mode); SpeculationMode GetSpeculationMode(); + CallFeedbackContent GetCallFeedbackContent(); // Compute the call frequency based on the call count and the invocation // count (taken from the type feedback vector). float ComputeCallFrequency(); using SpeculationModeField = base::BitField<SpeculationMode, 0, 1>; - using CallCountField = base::BitField<uint32_t, 1, 31>; + using CallFeedbackContentField = base::BitField<CallFeedbackContent, 1, 1>; + using CallCountField = base::BitField<uint32_t, 2, 30>; // For InstanceOf ICs. MaybeHandle<JSObject> GetConstructorFeedback() const; @@ -831,7 +837,6 @@ class V8_EXPORT_PRIVATE FeedbackNexus final { // Add a type to the list of types for source position <position>. void Collect(Handle<String> type, int position); - JSObject GetTypeProfile() const; std::vector<int> GetSourcePositions() const; std::vector<Handle<String>> GetTypesForSourcePositions(uint32_t pos) const; @@ -847,6 +852,7 @@ class V8_EXPORT_PRIVATE FeedbackNexus final { inline MaybeObject UninitializedSentinel() const; inline MaybeObject MegamorphicSentinel() const; + inline MaybeObject MegaDOMSentinel() const; // Create an array. The caller must install it in a feedback vector slot. Handle<WeakFixedArray> CreateArrayOfSize(int length); diff --git a/deps/v8/src/objects/feedback-vector.tq b/deps/v8/src/objects/feedback-vector.tq index a84533db67..768254f187 100644 --- a/deps/v8/src/objects/feedback-vector.tq +++ b/deps/v8/src/objects/feedback-vector.tq @@ -24,7 +24,7 @@ extern class FeedbackVector extends HeapObject { shared_function_info: SharedFunctionInfo; maybe_optimized_code: Weak<Code>; closure_feedback_cell_array: ClosureFeedbackCellArray; - @relaxedRead raw_feedback_slots[length]: MaybeObject; + @cppRelaxedLoad raw_feedback_slots[length]: MaybeObject; } extern class FeedbackMetadata extends HeapObject; diff --git a/deps/v8/src/objects/fixed-array-inl.h b/deps/v8/src/objects/fixed-array-inl.h index 520b6e7da6..43b77539e1 100644 --- a/deps/v8/src/objects/fixed-array-inl.h +++ b/deps/v8/src/objects/fixed-array-inl.h @@ -19,7 +19,6 @@ #include "src/objects/oddball.h" #include "src/objects/slots.h" #include "src/roots/roots-inl.h" -#include "src/sanitizer/tsan.h" // Has to be the last include (doesn't have include guards): #include "src/objects/object-macros.h" @@ -45,13 +44,11 @@ TQ_OBJECT_CONSTRUCTORS_IMPL(WeakArrayList) NEVER_READ_ONLY_SPACE_IMPL(WeakArrayList) -SYNCHRONIZED_SMI_ACCESSORS(FixedArrayBase, length, kLengthOffset) +RELEASE_ACQUIRE_SMI_ACCESSORS(FixedArrayBase, length, kLengthOffset) -SYNCHRONIZED_SMI_ACCESSORS(WeakFixedArray, length, kLengthOffset) +RELEASE_ACQUIRE_SMI_ACCESSORS(WeakFixedArray, length, kLengthOffset) -SYNCHRONIZED_SMI_ACCESSORS(WeakArrayList, capacity, kCapacityOffset) - -Object FixedArrayBase::unchecked_synchronized_length() const { +Object FixedArrayBase::unchecked_length(AcquireLoadTag) const { return ACQUIRE_READ_FIELD(*this, kLengthOffset); } @@ -88,7 +85,6 @@ bool FixedArray::is_the_hole(Isolate* isolate, int index) { return get(isolate, index).IsTheHole(isolate); } -#if !defined(_WIN32) || defined(_WIN64) void FixedArray::set(int index, Smi value) { DCHECK_NE(map(), GetReadOnlyRoots().fixed_cow_array_map()); DCHECK_LT(static_cast<unsigned>(index), static_cast<unsigned>(length())); @@ -96,7 +92,6 @@ void FixedArray::set(int index, Smi value) { int offset = OffsetOfElementAt(index); RELAXED_WRITE_FIELD(*this, offset, value); } -#endif void FixedArray::set(int index, Object value) { DCHECK_NE(GetReadOnlyRoots().fixed_cow_array_map(), map()); @@ -245,15 +240,11 @@ void FixedArray::CopyElements(Isolate* isolate, int dst_index, FixedArray src, // Due to left- and right-trimming, concurrent visitors need to read the length // with acquire semantics. // TODO(ulan): Acquire should not be needed anymore. -inline int FixedArray::AllocatedSize() { - return SizeFor(synchronized_length()); -} +inline int FixedArray::AllocatedSize() { return SizeFor(length(kAcquireLoad)); } inline int WeakFixedArray::AllocatedSize() { - return SizeFor(synchronized_length()); -} -inline int WeakArrayList::AllocatedSize() { - return SizeFor(synchronized_capacity()); + return SizeFor(length(kAcquireLoad)); } +inline int WeakArrayList::AllocatedSize() { return SizeFor(capacity()); } // Perform a binary search in a fixed array. template <SearchMode search_mode, typename T> @@ -447,7 +438,7 @@ MaybeObject WeakFixedArray::Get(int index) const { MaybeObject WeakFixedArray::Get(PtrComprCageBase cage_base, int index) const { DCHECK_LT(static_cast<unsigned>(index), static_cast<unsigned>(length())); - return objects(cage_base, index); + return objects(cage_base, index, kRelaxedLoad); } void WeakFixedArray::Set(int index, MaybeObject value, WriteBarrierMode mode) { @@ -482,7 +473,7 @@ MaybeObject WeakArrayList::Get(int index) const { MaybeObject WeakArrayList::Get(PtrComprCageBase cage_base, int index) const { DCHECK_LT(static_cast<unsigned>(index), static_cast<unsigned>(capacity())); - return objects(cage_base, index); + return objects(cage_base, index, kRelaxedLoad); } void WeakArrayList::Set(int index, MaybeObject value, WriteBarrierMode mode) { diff --git a/deps/v8/src/objects/fixed-array.h b/deps/v8/src/objects/fixed-array.h index cc9761421e..d6c5077aa0 100644 --- a/deps/v8/src/objects/fixed-array.h +++ b/deps/v8/src/objects/fixed-array.h @@ -71,10 +71,12 @@ enum FixedArraySubInstanceType { class FixedArrayBase : public TorqueGeneratedFixedArrayBase<FixedArrayBase, HeapObject> { public: - // Get and set the length using acquire loads and release stores. - DECL_SYNCHRONIZED_INT_ACCESSORS(length) + // Forward declare the non-atomic (set_)length defined in torque. + using TorqueGeneratedFixedArrayBase::length; + using TorqueGeneratedFixedArrayBase::set_length; + DECL_RELEASE_ACQUIRE_INT_ACCESSORS(length) - inline Object unchecked_synchronized_length() const; + inline Object unchecked_length(AcquireLoadTag) const; static int GetMaxLengthForNewSpaceAllocation(ElementsKind kind); @@ -132,18 +134,7 @@ class FixedArray inline bool is_the_hole(Isolate* isolate, int index); // Setter that doesn't need write barrier. -#if defined(_WIN32) && !defined(_WIN64) - inline void set(int index, Smi value) { - DCHECK_NE(map(), GetReadOnlyRoots().fixed_cow_array_map()); - DCHECK_LT(static_cast<unsigned>(index), static_cast<unsigned>(length())); - DCHECK(Object(value).IsSmi()); - int offset = OffsetOfElementAt(index); - RELAXED_WRITE_FIELD(*this, offset, value); - } -#else inline void set(int index, Smi value); -#endif - // Setter with explicit barrier mode. inline void set(int index, Object value, WriteBarrierMode mode); @@ -294,8 +285,10 @@ class WeakFixedArray int index, MaybeObject value, WriteBarrierMode mode = WriteBarrierMode::UPDATE_WRITE_BARRIER); - // Get and set the length using acquire loads and release stores. - DECL_SYNCHRONIZED_INT_ACCESSORS(length) + // Forward declare the non-atomic (set_)length defined in torque. + using TorqueGeneratedWeakFixedArray::length; + using TorqueGeneratedWeakFixedArray::set_length; + DECL_RELEASE_ACQUIRE_INT_ACCESSORS(length) // Gives access to raw memory which stores the array's data. inline MaybeObjectSlot data_start(); @@ -387,9 +380,6 @@ class WeakArrayList V8_EXPORT_PRIVATE bool IsFull(); - // Get and set the capacity using acquire loads and release stores. - DECL_SYNCHRONIZED_INT_ACCESSORS(capacity) - int AllocatedSize(); class BodyDescriptor; diff --git a/deps/v8/src/objects/fixed-array.tq b/deps/v8/src/objects/fixed-array.tq index 6aed0c26b2..31198d70d4 100644 --- a/deps/v8/src/objects/fixed-array.tq +++ b/deps/v8/src/objects/fixed-array.tq @@ -26,7 +26,7 @@ extern class FixedDoubleArray extends FixedArrayBase { @generateCppClass extern class WeakFixedArray extends HeapObject { const length: Smi; - @relaxedRead objects[length]: MaybeObject; + @cppRelaxedLoad objects[length]: MaybeObject; } @generateCppClass @@ -51,7 +51,7 @@ extern class TemplateList extends FixedArray { extern class WeakArrayList extends HeapObject { const capacity: Smi; length: Smi; - @relaxedRead objects[capacity]: MaybeObject; + @cppRelaxedLoad objects[capacity]: MaybeObject; } extern operator '.length_intptr' macro LoadAndUntagFixedArrayBaseLength( diff --git a/deps/v8/src/objects/foreign-inl.h b/deps/v8/src/objects/foreign-inl.h index 150857f49a..a278c844b9 100644 --- a/deps/v8/src/objects/foreign-inl.h +++ b/deps/v8/src/objects/foreign-inl.h @@ -29,7 +29,8 @@ bool Foreign::IsNormalized(Object value) { } DEF_GETTER(Foreign, foreign_address, Address) { - return ReadExternalPointerField(kForeignAddressOffset, cage_base, + Isolate* isolate = GetIsolateForHeapSandbox(*this); + return ReadExternalPointerField(kForeignAddressOffset, isolate, kForeignForeignAddressTag); } diff --git a/deps/v8/src/objects/free-space-inl.h b/deps/v8/src/objects/free-space-inl.h index e8ce1d6350..443ff25caa 100644 --- a/deps/v8/src/objects/free-space-inl.h +++ b/deps/v8/src/objects/free-space-inl.h @@ -23,7 +23,7 @@ TQ_OBJECT_CONSTRUCTORS_IMPL(FreeSpace) RELAXED_SMI_ACCESSORS(FreeSpace, size, kSizeOffset) -int FreeSpace::Size() { return size(); } +int FreeSpace::Size() { return size(kRelaxedLoad); } FreeSpace FreeSpace::next() { DCHECK(IsValid()); @@ -50,10 +50,10 @@ bool FreeSpace::IsValid() { Heap* heap = GetHeapFromWritableObject(*this); Object free_space_map = Isolate::FromHeap(heap)->root(RootIndex::kFreeSpaceMap); - CHECK_IMPLIES(!map_slot().contains_value(free_space_map.ptr()), + CHECK_IMPLIES(!map_slot().contains_map_value(free_space_map.ptr()), !heap->deserialization_complete() && - map_slot().contains_value(kNullAddress)); - CHECK_LE(kNextOffset + kTaggedSize, relaxed_read_size()); + map_slot().contains_map_value(kNullAddress)); + CHECK_LE(kNextOffset + kTaggedSize, size(kRelaxedLoad)); return true; } diff --git a/deps/v8/src/objects/free-space.h b/deps/v8/src/objects/free-space.h index 76d618cbfd..d2f569bb33 100644 --- a/deps/v8/src/objects/free-space.h +++ b/deps/v8/src/objects/free-space.h @@ -23,8 +23,7 @@ namespace internal { class FreeSpace : public TorqueGeneratedFreeSpace<FreeSpace, HeapObject> { public: // [size]: size of the free space including the header. - inline int relaxed_read_size() const; - inline void relaxed_write_size(int value); + DECL_RELAXED_SMI_ACCESSORS(size) inline int Size(); diff --git a/deps/v8/src/objects/function-kind.h b/deps/v8/src/objects/function-kind.h index b863f9c72f..02b5b7636a 100644 --- a/deps/v8/src/objects/function-kind.h +++ b/deps/v8/src/objects/function-kind.h @@ -181,6 +181,14 @@ inline bool BindsSuper(FunctionKind kind) { IsClassConstructor(kind); } +inline bool IsAwaitAsIdentifierDisallowed(FunctionKind kind) { + // 'await' is always disallowed as an identifier in module contexts. Callers + // should short-circuit the module case instead of calling this. + DCHECK(!IsModule(kind)); + return IsAsyncFunction(kind) || + kind == FunctionKind::kClassStaticInitializerFunction; +} + inline const char* FunctionKind2String(FunctionKind kind) { switch (kind) { case FunctionKind::kNormalFunction: diff --git a/deps/v8/src/objects/hash-table-inl.h b/deps/v8/src/objects/hash-table-inl.h index 27645058b3..19382cc7ec 100644 --- a/deps/v8/src/objects/hash-table-inl.h +++ b/deps/v8/src/objects/hash-table-inl.h @@ -130,9 +130,8 @@ Handle<Map> EphemeronHashTable::GetMap(ReadOnlyRoots roots) { } template <typename Derived, typename Shape> -template <typename LocalIsolate> -InternalIndex HashTable<Derived, Shape>::FindEntry(LocalIsolate* isolate, - Key key) { +template <typename IsolateT> +InternalIndex HashTable<Derived, Shape>::FindEntry(IsolateT* isolate, Key key) { ReadOnlyRoots roots(isolate); return FindEntry(isolate, roots, key, Shape::Hash(roots, key)); } diff --git a/deps/v8/src/objects/hash-table.h b/deps/v8/src/objects/hash-table.h index 12ac020fb7..c17a15c95f 100644 --- a/deps/v8/src/objects/hash-table.h +++ b/deps/v8/src/objects/hash-table.h @@ -125,9 +125,9 @@ class EXPORT_TEMPLATE_DECLARE(V8_EXPORT_PRIVATE) HashTable using Key = typename Shape::Key; // Returns a new HashTable object. - template <typename LocalIsolate> + template <typename IsolateT> V8_WARN_UNUSED_RESULT static Handle<Derived> New( - LocalIsolate* isolate, int at_least_space_for, + IsolateT* isolate, int at_least_space_for, AllocationType allocation = AllocationType::kYoung, MinimumCapacity capacity_option = USE_DEFAULT_MINIMUM_CAPACITY); @@ -140,8 +140,8 @@ class EXPORT_TEMPLATE_DECLARE(V8_EXPORT_PRIVATE) HashTable // Find entry for key otherwise return kNotFound. inline InternalIndex FindEntry(PtrComprCageBase cage_base, ReadOnlyRoots roots, Key key, int32_t hash); - template <typename LocalIsolate> - inline InternalIndex FindEntry(LocalIsolate* isolate, Key key); + template <typename IsolateT> + inline InternalIndex FindEntry(IsolateT* isolate, Key key); // Rehashes the table in-place. void Rehash(PtrComprCageBase cage_base); @@ -194,9 +194,9 @@ class EXPORT_TEMPLATE_DECLARE(V8_EXPORT_PRIVATE) HashTable } // Ensure enough space for n additional elements. - template <typename LocalIsolate> + template <typename IsolateT> V8_WARN_UNUSED_RESULT static Handle<Derived> EnsureCapacity( - LocalIsolate* isolate, Handle<Derived> table, int n = 1, + IsolateT* isolate, Handle<Derived> table, int n = 1, AllocationType allocation = AllocationType::kYoung); // Returns true if this table has sufficient capacity for adding n elements. @@ -212,9 +212,9 @@ class EXPORT_TEMPLATE_DECLARE(V8_EXPORT_PRIVATE) HashTable protected: friend class ObjectHashTable; - template <typename LocalIsolate> + template <typename IsolateT> V8_WARN_UNUSED_RESULT static Handle<Derived> NewInternal( - LocalIsolate* isolate, int capacity, AllocationType allocation); + IsolateT* isolate, int capacity, AllocationType allocation); // Find the entry at which to insert element with the given key that // has the given hash value. diff --git a/deps/v8/src/objects/heap-object.h b/deps/v8/src/objects/heap-object.h index e0aea97537..128e17fab1 100644 --- a/deps/v8/src/objects/heap-object.h +++ b/deps/v8/src/objects/heap-object.h @@ -43,8 +43,8 @@ class HeapObject : public Object { inline void set_map_no_write_barrier(Map value); // Access the map using acquire load and release store. - DECL_GETTER(synchronized_map, Map) - inline void synchronized_set_map(Map value); + DECL_ACQUIRE_GETTER(map, Map) + inline void set_map(Map value, ReleaseStoreTag); // Compare-and-swaps map word using release store, returns true if the map // word was actually swapped. @@ -58,12 +58,12 @@ class HeapObject : public Object { // During garbage collection, the map word of a heap object does not // necessarily contain a map pointer. - DECL_GETTER(map_word, MapWord) - inline void set_map_word(MapWord map_word); + DECL_RELAXED_GETTER(map_word, MapWord) + inline void set_map_word(MapWord map_word, RelaxedStoreTag); // Access the map word using acquire load and release store. - DECL_GETTER(synchronized_map_word, MapWord) - inline void synchronized_set_map_word(MapWord map_word); + DECL_ACQUIRE_GETTER(map_word, MapWord) + inline void set_map_word(MapWord map_word, ReleaseStoreTag); // This method exists to help remove GetIsolate/GetHeap from HeapObject, in a // way that doesn't require passing Isolate/Heap down huge call chains or to @@ -163,9 +163,9 @@ class HeapObject : public Object { const DisallowGarbageCollection& promise); // Dispatched behavior. - void HeapObjectShortPrint(std::ostream& os); // NOLINT + void HeapObjectShortPrint(std::ostream& os); #ifdef OBJECT_PRINT - void PrintHeader(std::ostream& os, const char* id); // NOLINT + void PrintHeader(std::ostream& os, const char* id); #endif DECL_PRINTER(HeapObject) EXPORT_DECL_VERIFIER(HeapObject) diff --git a/deps/v8/src/objects/instance-type-inl.h b/deps/v8/src/objects/instance-type-inl.h index 8edb73d666..32ee7a24f5 100644 --- a/deps/v8/src/objects/instance-type-inl.h +++ b/deps/v8/src/objects/instance-type-inl.h @@ -31,14 +31,14 @@ struct InstanceRangeChecker { template <InstanceType upper_limit> struct InstanceRangeChecker<FIRST_TYPE, upper_limit> { static constexpr bool Check(InstanceType value) { - CONSTEXPR_DCHECK(FIRST_TYPE <= value); + DCHECK_LE(FIRST_TYPE, value); return value <= upper_limit; } }; template <InstanceType lower_limit> struct InstanceRangeChecker<lower_limit, LAST_TYPE> { static constexpr bool Check(InstanceType value) { - CONSTEXPR_DCHECK(LAST_TYPE >= value); + DCHECK_GE(LAST_TYPE, value); return value >= lower_limit; } }; diff --git a/deps/v8/src/objects/instance-type.h b/deps/v8/src/objects/instance-type.h index 9c8c8d5d63..7a11f9cf68 100644 --- a/deps/v8/src/objects/instance-type.h +++ b/deps/v8/src/objects/instance-type.h @@ -33,16 +33,11 @@ enum StringRepresentationTag { }; const uint32_t kIsIndirectStringMask = 1 << 0; const uint32_t kIsIndirectStringTag = 1 << 0; -// NOLINTNEXTLINE(runtime/references) (false positive) STATIC_ASSERT((kSeqStringTag & kIsIndirectStringMask) == 0); -// NOLINTNEXTLINE(runtime/references) (false positive) STATIC_ASSERT((kExternalStringTag & kIsIndirectStringMask) == 0); -// NOLINTNEXTLINE(runtime/references) (false positive) STATIC_ASSERT((kConsStringTag & kIsIndirectStringMask) == kIsIndirectStringTag); -// NOLINTNEXTLINE(runtime/references) (false positive) STATIC_ASSERT((kSlicedStringTag & kIsIndirectStringMask) == kIsIndirectStringTag); -// NOLINTNEXTLINE(runtime/references) (false positive) STATIC_ASSERT((kThinStringTag & kIsIndirectStringMask) == kIsIndirectStringTag); // For strings, bit 3 indicates whether the string consists of two-byte @@ -152,7 +147,6 @@ enum InstanceType : uint16_t { constexpr InstanceType LAST_STRING_TYPE = static_cast<InstanceType>(FIRST_NONSTRING_TYPE - 1); -// NOLINTNEXTLINE(runtime/references) (false positive) STATIC_ASSERT((FIRST_NONSTRING_TYPE & kIsNotStringMask) != kStringTag); STATIC_ASSERT(JS_OBJECT_TYPE == Internals::kJSObjectType); STATIC_ASSERT(JS_API_OBJECT_TYPE == Internals::kJSApiObjectType); @@ -258,6 +252,7 @@ TYPED_ARRAYS(TYPED_ARRAY_IS_TYPE_FUNCTION_DECL) V(_, FunctionTemplateInfoMap, function_template_info_map, \ FunctionTemplateInfo) \ V(_, HeapNumberMap, heap_number_map, HeapNumber) \ + V(_, MegaDomHandlerMap, mega_dom_handler_map, MegaDomHandler) \ V(_, MetaMap, meta_map, Map) \ V(_, PreparseDataMap, preparse_data_map, PreparseData) \ V(_, PrototypeInfoMap, prototype_info_map, PrototypeInfo) \ diff --git a/deps/v8/src/objects/internal-index.h b/deps/v8/src/objects/internal-index.h index a241f3c686..dec83cefe2 100644 --- a/deps/v8/src/objects/internal-index.h +++ b/deps/v8/src/objects/internal-index.h @@ -40,8 +40,7 @@ class InternalIndex { return static_cast<uint32_t>(entry_); } constexpr int as_int() const { - CONSTEXPR_DCHECK(entry_ <= - static_cast<size_t>(std::numeric_limits<int>::max())); + DCHECK_GE(std::numeric_limits<int>::max(), entry_); return static_cast<int>(entry_); } diff --git a/deps/v8/src/objects/intl-objects.cc b/deps/v8/src/objects/intl-objects.cc index d9fca11e73..80a33db3b2 100644 --- a/deps/v8/src/objects/intl-objects.cc +++ b/deps/v8/src/objects/intl-objects.cc @@ -90,7 +90,7 @@ inline constexpr uint16_t ToLatin1Lower(uint16_t ch) { // Does not work for U+00DF (sharp-s), U+00B5 (micron), U+00FF. inline constexpr uint16_t ToLatin1Upper(uint16_t ch) { - CONSTEXPR_DCHECK(ch != 0xDF && ch != 0xB5 && ch != 0xFF); + DCHECK(ch != 0xDF && ch != 0xB5 && ch != 0xFF); return ch & ~((IsAsciiLower(ch) || (((ch & 0xE0) == 0xE0) && ch != 0xF7)) << 5); } @@ -479,7 +479,12 @@ Handle<JSObject> InnerAddElement(Isolate* isolate, Handle<JSArray> array, field_type_string, NONE); JSObject::AddProperty(isolate, element, factory->value_string(), value, NONE); - JSObject::AddDataElement(array, index, element, NONE); + // TODO(victorgomes): Temporarily forcing a fatal error here in case of + // overflow, until Intl::AddElement can handle exceptions. + if (JSObject::AddDataElement(array, index, element, NONE).IsNothing()) { + FATAL("Fatal JavaScript invalid array size when adding element"); + UNREACHABLE(); + } return element; } @@ -1486,7 +1491,6 @@ icu::LocaleMatcher BuildLocaleMatcher( builder.addSupportedLocale(l); } } - return builder.build(*status); } @@ -1533,23 +1537,12 @@ std::string BestFitMatcher(Isolate* isolate, const std::set<std::string>& available_locales, const std::vector<std::string>& requested_locales) { UErrorCode status = U_ZERO_ERROR; - icu::LocaleMatcher matcher = - BuildLocaleMatcher(isolate, available_locales, &status); - DCHECK(U_SUCCESS(status)); - Iterator iter(requested_locales.cbegin(), requested_locales.cend()); - std::string bestfit = - matcher.getBestMatch(iter, status)->toLanguageTag<std::string>(status); - if (U_FAILURE(status)) { - return DefaultLocale(isolate); - } - // We need to return the extensions with it. - for (auto it = requested_locales.begin(); it != requested_locales.end(); - ++it) { - if (it->find(bestfit) == 0) { - return *it; - } - } + std::string bestfit = BuildLocaleMatcher(isolate, available_locales, &status) + .getBestMatchResult(iter, status) + .makeResolvedLocale(status) + .toLanguageTag<std::string>(status); + DCHECK(U_SUCCESS(status)); return bestfit; } @@ -1561,32 +1554,29 @@ std::vector<std::string> BestFitSupportedLocales( UErrorCode status = U_ZERO_ERROR; icu::LocaleMatcher matcher = BuildLocaleMatcher(isolate, available_locales, &status); - DCHECK(U_SUCCESS(status)); - - std::string default_locale = DefaultLocale(isolate); std::vector<std::string> result; - for (auto it = requested_locales.cbegin(); it != requested_locales.cend(); - it++) { - if (*it == default_locale) { - result.push_back(*it); - } else { + if (U_SUCCESS(status)) { + for (auto it = requested_locales.cbegin(); it != requested_locales.cend(); + it++) { status = U_ZERO_ERROR; icu::Locale desired = icu::Locale::forLanguageTag(it->c_str(), status); - std::string bestfit = matcher.getBestMatch(desired, status) - ->toLanguageTag<std::string>(status); - // We need to return the extensions with it. - if (U_SUCCESS(status) && it->find(bestfit) == 0) { - result.push_back(*it); - } + icu::LocaleMatcher::Result matched = + matcher.getBestMatchResult(desired, status); + if (U_FAILURE(status)) continue; + if (matched.getSupportedIndex() < 0) continue; + std::string bestfit = + matched.makeResolvedLocale(status).toLanguageTag<std::string>(status); + if (U_FAILURE(status)) continue; + result.push_back(bestfit); } } return result; } // ecma262 #sec-createarrayfromlist -Handle<JSArray> CreateArrayFromList(Isolate* isolate, - std::vector<std::string> elements, - PropertyAttributes attr) { +MaybeHandle<JSArray> CreateArrayFromList(Isolate* isolate, + std::vector<std::string> elements, + PropertyAttributes attr) { Factory* factory = isolate->factory(); // Let array be ! ArrayCreate(0). Handle<JSArray> array = factory->NewJSArray(0); @@ -1599,10 +1589,11 @@ Handle<JSArray> CreateArrayFromList(Isolate* isolate, const std::string& part = elements[i]; Handle<String> value = factory->NewStringFromUtf8(CStrVector(part.c_str())).ToHandleChecked(); - JSObject::AddDataElement(array, i, value, attr); + MAYBE_RETURN(JSObject::AddDataElement(array, i, value, attr), + MaybeHandle<JSArray>()); } // 5. Return array. - return array; + return MaybeHandle<JSArray>(array); } // ECMA 402 9.2.9 SupportedLocales(availableLocales, requestedLocales, options) @@ -2042,23 +2033,15 @@ icu::TimeZone* ICUTimezoneCache::GetTimeZone() { bool ICUTimezoneCache::GetOffsets(double time_ms, bool is_utc, int32_t* raw_offset, int32_t* dst_offset) { UErrorCode status = U_ZERO_ERROR; - // TODO(jshin): ICU TimeZone class handles skipped time differently from - // Ecma 262 (https://github.com/tc39/ecma262/pull/778) and icu::TimeZone - // class does not expose the necessary API. Fixing - // http://bugs.icu-project.org/trac/ticket/13268 would make it easy to - // implement the proposed spec change. A proposed fix for ICU is - // https://chromium-review.googlesource.com/851265 . - // In the meantime, use an internal (still public) API of icu::BasicTimeZone. - // Once it's accepted by the upstream, get rid of cast. Note that casting - // TimeZone to BasicTimeZone is safe because we know that icu::TimeZone used - // here is a BasicTimeZone. if (is_utc) { GetTimeZone()->getOffset(time_ms, false, *raw_offset, *dst_offset, status); } else { + // Note that casting TimeZone to BasicTimeZone is safe because we know that + // icu::TimeZone used here is a BasicTimeZone. static_cast<const icu::BasicTimeZone*>(GetTimeZone()) - ->getOffsetFromLocal(time_ms, icu::BasicTimeZone::kFormer, - icu::BasicTimeZone::kFormer, *raw_offset, - *dst_offset, status); + ->getOffsetFromLocal(time_ms, UCAL_TZ_LOCAL_FORMER, + UCAL_TZ_LOCAL_FORMER, *raw_offset, *dst_offset, + status); } return U_SUCCESS(status); diff --git a/deps/v8/src/objects/intl-objects.h b/deps/v8/src/objects/intl-objects.h index d4b4feed68..ec0eb93873 100644 --- a/deps/v8/src/objects/intl-objects.h +++ b/deps/v8/src/objects/intl-objects.h @@ -21,7 +21,7 @@ #include "unicode/locid.h" #include "unicode/uversion.h" -#define V8_MINIMUM_ICU_VERSION 68 +#define V8_MINIMUM_ICU_VERSION 69 namespace U_ICU_NAMESPACE { class BreakIterator; diff --git a/deps/v8/src/objects/js-array-buffer-inl.h b/deps/v8/src/objects/js-array-buffer-inl.h index b4aa5e33b9..0fa5737ec7 100644 --- a/deps/v8/src/objects/js-array-buffer-inl.h +++ b/deps/v8/src/objects/js-array-buffer-inl.h @@ -43,7 +43,8 @@ void JSArrayBuffer::set_byte_length(size_t value) { } DEF_GETTER(JSArrayBuffer, backing_store, void*) { - Address value = ReadExternalPointerField(kBackingStoreOffset, cage_base, + Isolate* isolate = GetIsolateForHeapSandbox(*this); + Address value = ReadExternalPointerField(kBackingStoreOffset, isolate, kArrayBufferBackingStoreTag); return reinterpret_cast<void*>(value); } @@ -167,6 +168,8 @@ BIT_FIELD_ACCESSORS(JSArrayBuffer, bit_field, is_asmjs_memory, JSArrayBuffer::IsAsmJsMemoryBit) BIT_FIELD_ACCESSORS(JSArrayBuffer, bit_field, is_shared, JSArrayBuffer::IsSharedBit) +BIT_FIELD_ACCESSORS(JSArrayBuffer, bit_field, is_resizable, + JSArrayBuffer::IsResizableBit) size_t JSArrayBufferView::byte_offset() const { return ReadField<size_t>(kByteOffsetOffset); @@ -188,18 +191,57 @@ bool JSArrayBufferView::WasDetached() const { return JSArrayBuffer::cast(buffer()).was_detached(); } +BIT_FIELD_ACCESSORS(JSTypedArray, bit_field, is_length_tracking, + JSTypedArray::IsLengthTrackingBit) +BIT_FIELD_ACCESSORS(JSTypedArray, bit_field, is_backed_by_rab, + JSTypedArray::IsBackedByRabBit) + +bool JSTypedArray::IsVariableLength() const { + return is_length_tracking() || is_backed_by_rab(); +} + +size_t JSTypedArray::GetLength() const { + if (WasDetached()) return 0; + if (is_length_tracking()) { + if (is_backed_by_rab()) { + return buffer().byte_length() / element_size(); + } + return buffer().GetBackingStore()->byte_length(std::memory_order_seq_cst) / + element_size(); + } + size_t array_length = LengthUnchecked(); + if (is_backed_by_rab()) { + // The sum can't overflow, since we have managed to allocate the + // JSTypedArray. + if (byte_offset() + array_length * element_size() > + buffer().byte_length()) { + return 0; + } + } + return array_length; +} + void JSTypedArray::AllocateExternalPointerEntries(Isolate* isolate) { InitExternalPointerField(kExternalPointerOffset, isolate); } -size_t JSTypedArray::length() const { return ReadField<size_t>(kLengthOffset); } +size_t JSTypedArray::length() const { + DCHECK(!is_length_tracking()); + DCHECK(!is_backed_by_rab()); + return ReadField<size_t>(kLengthOffset); +} + +size_t JSTypedArray::LengthUnchecked() const { + return ReadField<size_t>(kLengthOffset); +} void JSTypedArray::set_length(size_t value) { WriteField<size_t>(kLengthOffset, value); } DEF_GETTER(JSTypedArray, external_pointer, Address) { - return ReadExternalPointerField(kExternalPointerOffset, cage_base, + Isolate* isolate = GetIsolateForHeapSandbox(*this); + return ReadExternalPointerField(kExternalPointerOffset, isolate, kTypedArrayExternalPointerTag); } @@ -320,8 +362,9 @@ MaybeHandle<JSTypedArray> JSTypedArray::Validate(Isolate* isolate, } DEF_GETTER(JSDataView, data_pointer, void*) { + Isolate* isolate = GetIsolateForHeapSandbox(*this); return reinterpret_cast<void*>(ReadExternalPointerField( - kDataPointerOffset, cage_base, kDataViewDataPointerTag)); + kDataPointerOffset, isolate, kDataViewDataPointerTag)); } void JSDataView::AllocateExternalPointerEntries(Isolate* isolate) { diff --git a/deps/v8/src/objects/js-array-buffer.cc b/deps/v8/src/objects/js-array-buffer.cc index 074a8dc1bf..91175309f9 100644 --- a/deps/v8/src/objects/js-array-buffer.cc +++ b/deps/v8/src/objects/js-array-buffer.cc @@ -35,11 +35,12 @@ bool CanonicalNumericIndexString(Isolate* isolate, Handle<Object> s, } } // anonymous namespace -void JSArrayBuffer::Setup(SharedFlag shared, +void JSArrayBuffer::Setup(SharedFlag shared, ResizableFlag resizable, std::shared_ptr<BackingStore> backing_store) { clear_padding(); set_bit_field(0); set_is_shared(shared == SharedFlag::kShared); + set_is_resizable(resizable == ResizableFlag::kResizable); set_is_detachable(shared != SharedFlag::kShared); for (int i = 0; i < v8::ArrayBuffer::kEmbedderFieldCount; i++) { SetEmbedderField(i, Smi::zero()); @@ -61,10 +62,17 @@ void JSArrayBuffer::Setup(SharedFlag shared, void JSArrayBuffer::Attach(std::shared_ptr<BackingStore> backing_store) { DCHECK_NOT_NULL(backing_store); DCHECK_EQ(is_shared(), backing_store->is_shared()); + DCHECK_EQ(is_resizable(), backing_store->is_resizable()); DCHECK(!was_detached()); Isolate* isolate = GetIsolate(); set_backing_store(isolate, backing_store->buffer_start()); - set_byte_length(backing_store->byte_length()); + if (is_shared() && is_resizable()) { + // GSABs need to read their byte_length from the BackingStore. Maintain the + // invariant that their byte_length field is always 0. + set_byte_length(0); + } else { + set_byte_length(backing_store->byte_length()); + } if (backing_store->is_wasm_memory()) set_is_detachable(false); if (!backing_store->free_on_destruct()) set_is_external(true); Heap* heap = isolate->heap(); @@ -86,9 +94,12 @@ void JSArrayBuffer::Detach(bool force_for_wasm_memory) { } Isolate* const isolate = GetIsolate(); - if (backing_store()) { - std::shared_ptr<BackingStore> backing_store; - backing_store = RemoveExtension(); + ArrayBufferExtension* extension = this->extension(); + + if (extension) { + DisallowGarbageCollection disallow_gc; + isolate->heap()->DetachArrayBufferExtension(*this, extension); + std::shared_ptr<BackingStore> backing_store = RemoveExtension(); CHECK_IMPLIES(force_for_wasm_memory, backing_store->is_wasm_memory()); } @@ -151,14 +162,14 @@ void JSArrayBuffer::YoungMarkExtensionPromoted() { Handle<JSArrayBuffer> JSTypedArray::GetBuffer() { Isolate* isolate = GetIsolate(); Handle<JSTypedArray> self(*this, isolate); - DCHECK(IsTypedArrayElementsKind(self->GetElementsKind())); - + DCHECK(IsTypedArrayOrRabGsabTypedArrayElementsKind(self->GetElementsKind())); Handle<JSArrayBuffer> array_buffer(JSArrayBuffer::cast(self->buffer()), isolate); if (!is_on_heap()) { // Already is off heap, so return the existing buffer. return array_buffer; } + DCHECK(!array_buffer->is_resizable()); // The existing array buffer should be empty. DCHECK_NULL(array_buffer->backing_store()); @@ -179,7 +190,8 @@ Handle<JSArrayBuffer> JSTypedArray::GetBuffer() { } // Attach the backing store to the array buffer. - array_buffer->Setup(SharedFlag::kNotShared, std::move(backing_store)); + array_buffer->Setup(SharedFlag::kNotShared, ResizableFlag::kNotResizable, + std::move(backing_store)); // Clear the elements of the typed array. self->set_elements(ReadOnlyRoots(isolate).empty_byte_array()); @@ -267,6 +279,7 @@ ExternalArrayType JSTypedArray::type() { return kExternal##Type##Array; TYPED_ARRAYS(ELEMENTS_KIND_TO_ARRAY_TYPE) + RAB_GSAB_TYPED_ARRAYS_WITH_TYPED_ARRAY_TYPE(ELEMENTS_KIND_TO_ARRAY_TYPE) #undef ELEMENTS_KIND_TO_ARRAY_TYPE default: @@ -274,13 +287,14 @@ ExternalArrayType JSTypedArray::type() { } } -size_t JSTypedArray::element_size() { +size_t JSTypedArray::element_size() const { switch (map().elements_kind()) { #define ELEMENTS_KIND_TO_ELEMENT_SIZE(Type, type, TYPE, ctype) \ case TYPE##_ELEMENTS: \ return sizeof(ctype); TYPED_ARRAYS(ELEMENTS_KIND_TO_ELEMENT_SIZE) + RAB_GSAB_TYPED_ARRAYS(ELEMENTS_KIND_TO_ELEMENT_SIZE) #undef ELEMENTS_KIND_TO_ELEMENT_SIZE default: @@ -288,5 +302,24 @@ size_t JSTypedArray::element_size() { } } +size_t JSTypedArray::LengthTrackingGsabBackedTypedArrayLength( + Isolate* isolate, Address raw_array) { + // TODO(v8:11111): Cache the last seen length in JSArrayBuffer and use it + // in bounds checks to minimize the need for calling this function. + DCHECK(FLAG_harmony_rab_gsab); + DisallowGarbageCollection no_gc; + DisallowJavascriptExecution no_js(isolate); + JSTypedArray array = JSTypedArray::cast(Object(raw_array)); + CHECK(array.is_length_tracking()); + JSArrayBuffer buffer = array.buffer(); + CHECK(buffer.is_resizable()); + CHECK(buffer.is_shared()); + size_t backing_byte_length = + buffer.GetBackingStore()->byte_length(std::memory_order_seq_cst); + CHECK_GE(backing_byte_length, array.byte_offset()); + auto element_byte_size = ElementsKindToByteSize(array.GetElementsKind()); + return (backing_byte_length - array.byte_offset()) / element_byte_size; +} + } // namespace internal } // namespace v8 diff --git a/deps/v8/src/objects/js-array-buffer.h b/deps/v8/src/objects/js-array-buffer.h index 3ec5e0d517..f723380772 100644 --- a/deps/v8/src/objects/js-array-buffer.h +++ b/deps/v8/src/objects/js-array-buffer.h @@ -77,13 +77,18 @@ class JSArrayBuffer // [is_asmjs_memory]: true => this buffer was once used as asm.js memory. DECL_BOOLEAN_ACCESSORS(is_asmjs_memory) - // [is_shared]: tells whether this is an ArrayBuffer or a SharedArrayBuffer. + // [is_shared]: true if this is a SharedArrayBuffer or a + // GrowableSharedArrayBuffer. DECL_BOOLEAN_ACCESSORS(is_shared) + // [is_resizable]: true if this is a ResizableArrayBuffer or a + // GrowableSharedArrayBuffer. + DECL_BOOLEAN_ACCESSORS(is_resizable) + // Initializes the fields of the ArrayBuffer. The provided backing_store can // be nullptr. If it is not nullptr, then the function registers it with // src/heap/array-buffer-tracker.h. - V8_EXPORT_PRIVATE void Setup(SharedFlag shared, + V8_EXPORT_PRIVATE void Setup(SharedFlag shared, ResizableFlag resizable, std::shared_ptr<BackingStore> backing_store); // Attaches the backing store to an already constructed empty ArrayBuffer. @@ -167,7 +172,7 @@ class ArrayBufferExtension : public Malloced { std::atomic<GcState> young_gc_state_; std::shared_ptr<BackingStore> backing_store_; ArrayBufferExtension* next_; - std::size_t accounting_length_; + std::atomic<size_t> accounting_length_; GcState young_gc_state() { return young_gc_state_.load(std::memory_order_relaxed); @@ -205,10 +210,16 @@ class ArrayBufferExtension : public Malloced { std::shared_ptr<BackingStore> backing_store() { return backing_store_; } BackingStore* backing_store_raw() { return backing_store_.get(); } - size_t accounting_length() { return accounting_length_; } + size_t accounting_length() { + return accounting_length_.load(std::memory_order_relaxed); + } void set_accounting_length(size_t accounting_length) { - accounting_length_ = accounting_length; + accounting_length_.store(accounting_length, std::memory_order_relaxed); + } + + size_t ClearAccountingLength() { + return accounting_length_.exchange(0, std::memory_order_relaxed); } std::shared_ptr<BackingStore> RemoveBackingStore() { @@ -253,6 +264,9 @@ class JSTypedArray // eventually. static constexpr size_t kMaxLength = v8::TypedArray::kMaxLength; + // Bit positions for [bit_field]. + DEFINE_TORQUE_GENERATED_JS_TYPED_ARRAY_FLAGS() + // [length]: length of typed array in elements. DECL_PRIMITIVE_GETTER(length, size_t) @@ -265,7 +279,7 @@ class JSTypedArray PropertyDescriptor* desc, Maybe<ShouldThrow> should_throw); ExternalArrayType type(); - V8_EXPORT_PRIVATE size_t element_size(); + V8_EXPORT_PRIVATE size_t element_size() const; V8_EXPORT_PRIVATE Handle<JSArrayBuffer> GetBuffer(); @@ -290,6 +304,14 @@ class JSTypedArray inline bool is_on_heap() const; inline bool is_on_heap(AcquireLoadTag tag) const; + DECL_BOOLEAN_ACCESSORS(is_length_tracking) + DECL_BOOLEAN_ACCESSORS(is_backed_by_rab) + inline bool IsVariableLength() const; + inline size_t GetLength() const; + + static size_t LengthTrackingGsabBackedTypedArrayLength(Isolate* isolate, + Address raw_array); + // Note: this is a pointer compression specific optimization. // Normally, on-heap typed arrays contain HeapObject value in |base_pointer| // field and an offset in |external_pointer|. @@ -346,6 +368,9 @@ class JSTypedArray friend class Factory; DECL_PRIMITIVE_SETTER(length, size_t) + // Reads the "length" field, doesn't assert the TypedArray is not RAB / GSAB + // backed. + inline size_t LengthUnchecked() const; DECL_GETTER(external_pointer, Address) DECL_GETTER(external_pointer_raw, ExternalPointer_t) diff --git a/deps/v8/src/objects/js-array-buffer.tq b/deps/v8/src/objects/js-array-buffer.tq index 72e74cc99b..ddd90d4c81 100644 --- a/deps/v8/src/objects/js-array-buffer.tq +++ b/deps/v8/src/objects/js-array-buffer.tq @@ -8,11 +8,13 @@ bitfield struct JSArrayBufferFlags extends uint32 { was_detached: bool: 1 bit; is_asm_js_memory: bool: 1 bit; is_shared: bool: 1 bit; + is_resizable: bool: 1 bit; } @generateCppClass extern class JSArrayBuffer extends JSObject { byte_length: uintptr; + max_byte_length: uintptr; backing_store: ExternalPointer; extension: RawPtr; bit_field: JSArrayBufferFlags; @@ -29,10 +31,16 @@ macro IsDetachedBuffer(buffer: JSArrayBuffer): bool { return buffer.bit_field.was_detached; } +@export macro IsSharedArrayBuffer(buffer: JSArrayBuffer): bool { return buffer.bit_field.is_shared; } +@export +macro IsResizableArrayBuffer(buffer: JSArrayBuffer): bool { + return buffer.bit_field.is_resizable; +} + @abstract @generateCppClass extern class JSArrayBufferView extends JSObject { @@ -41,11 +49,35 @@ extern class JSArrayBufferView extends JSObject { byte_length: uintptr; } +// We have 4 different TypedArrays: +// 1) Normal (backed by AB / SAB) or non-length tracking backed by GSAB (can't +// go oob once constructed) 2) Non-length tracking backed by RAB (can go oob +// once constructed) 3) Length-tracking backed by RAB (JSArrayBuffer stores the +// length) 4) Length-tracking backed by GSAB (BackingStore stores the length) +bitfield struct JSTypedArrayFlags extends uint32 { + is_length_tracking: bool: 1 bit; + is_backed_by_rab: bool: 1 bit; +} + @generateCppClass extern class JSTypedArray extends JSArrayBufferView { length: uintptr; external_pointer: ExternalPointer; base_pointer: ByteArray|Smi; + bit_field: JSTypedArrayFlags; + // Pads header size to be a multiple of kTaggedSize. + @if(TAGGED_SIZE_8_BYTES) optional_padding: uint32; + @ifnot(TAGGED_SIZE_8_BYTES) optional_padding: void; +} + +@export +macro IsVariableLengthTypedArray(array: JSTypedArray): bool { + return array.bit_field.is_length_tracking || array.bit_field.is_backed_by_rab; +} + +@export +macro IsLengthTrackingTypedArray(array: JSTypedArray): bool { + return array.bit_field.is_length_tracking; } @generateCppClass diff --git a/deps/v8/src/objects/js-array.h b/deps/v8/src/objects/js-array.h index a8b336d2be..776cb4446b 100644 --- a/deps/v8/src/objects/js-array.h +++ b/deps/v8/src/objects/js-array.h @@ -58,8 +58,8 @@ class JSArray : public JSObject { // Initializes the array to a certain length. inline bool AllowsSetLength(); - V8_EXPORT_PRIVATE static void SetLength(Handle<JSArray> array, - uint32_t length); + V8_EXPORT_PRIVATE static Maybe<bool> SetLength(Handle<JSArray> array, + uint32_t length); // Set the content of the array to the content of storage. static inline void SetContent(Handle<JSArray> array, diff --git a/deps/v8/src/objects/js-function-inl.h b/deps/v8/src/objects/js-function-inl.h index 5c8cb5b644..b0a53f5875 100644 --- a/deps/v8/src/objects/js-function-inl.h +++ b/deps/v8/src/objects/js-function-inl.h @@ -91,7 +91,7 @@ void JSFunction::MarkForOptimization(ConcurrencyMode mode) { mode = ConcurrencyMode::kNotConcurrent; } - DCHECK(!is_compiled() || ActiveTierIsIgnition() || ActiveTierIsNCI() || + DCHECK(!is_compiled() || ActiveTierIsIgnition() || ActiveTierIsMidtierTurboprop() || ActiveTierIsBaseline()); DCHECK(!ActiveTierIsTurbofan()); DCHECK(shared().IsInterpreted()); @@ -131,8 +131,8 @@ void JSFunction::CompleteInobjectSlackTrackingIfActive() { } } -template <typename LocalIsolate> -AbstractCode JSFunction::abstract_code(LocalIsolate* isolate) { +template <typename IsolateT> +AbstractCode JSFunction::abstract_code(IsolateT* isolate) { if (ActiveTierIsIgnition()) { return AbstractCode::cast(shared().GetBytecodeArray(isolate)); } else { @@ -206,27 +206,28 @@ void JSFunction::set_context(HeapObject value, WriteBarrierMode mode) { CONDITIONAL_WRITE_BARRIER(*this, kContextOffset, value, mode); } -ACCESSORS_CHECKED(JSFunction, prototype_or_initial_map, HeapObject, - kPrototypeOrInitialMapOffset, map().has_prototype_slot()) +RELEASE_ACQUIRE_ACCESSORS_CHECKED(JSFunction, prototype_or_initial_map, + HeapObject, kPrototypeOrInitialMapOffset, + map().has_prototype_slot()) DEF_GETTER(JSFunction, has_prototype_slot, bool) { return map(cage_base).has_prototype_slot(); } DEF_GETTER(JSFunction, initial_map, Map) { - return Map::cast(prototype_or_initial_map(cage_base)); + return Map::cast(prototype_or_initial_map(cage_base, kAcquireLoad)); } DEF_GETTER(JSFunction, has_initial_map, bool) { DCHECK(has_prototype_slot(cage_base)); - return prototype_or_initial_map(cage_base).IsMap(cage_base); + return prototype_or_initial_map(cage_base, kAcquireLoad).IsMap(cage_base); } DEF_GETTER(JSFunction, has_instance_prototype, bool) { DCHECK(has_prototype_slot(cage_base)); return has_initial_map(cage_base) || - !prototype_or_initial_map(cage_base).IsTheHole( - GetReadOnlyRoots(cage_base)); + !prototype_or_initial_map(cage_base, kAcquireLoad) + .IsTheHole(GetReadOnlyRoots(cage_base)); } DEF_GETTER(JSFunction, has_prototype, bool) { @@ -251,7 +252,7 @@ DEF_GETTER(JSFunction, instance_prototype, HeapObject) { return initial_map(cage_base).prototype(cage_base); // When there is no initial map and the prototype is a JSReceiver, the // initial map field is used for the prototype field. - return HeapObject::cast(prototype_or_initial_map(cage_base)); + return HeapObject::cast(prototype_or_initial_map(cage_base, kAcquireLoad)); } DEF_GETTER(JSFunction, prototype, Object) { diff --git a/deps/v8/src/objects/js-function.cc b/deps/v8/src/objects/js-function.cc index 35010be838..b191746fae 100644 --- a/deps/v8/src/objects/js-function.cc +++ b/deps/v8/src/objects/js-function.cc @@ -101,9 +101,6 @@ bool HighestTierOf(CodeKinds kinds, CodeKind* highest_tier) { } else if ((kinds & CodeKindFlag::BASELINE) != 0) { *highest_tier = CodeKind::BASELINE; return true; - } else if ((kinds & CodeKindFlag::NATIVE_CONTEXT_INDEPENDENT) != 0) { - *highest_tier = CodeKind::NATIVE_CONTEXT_INDEPENDENT; - return true; } else if ((kinds & CodeKindFlag::INTERPRETED_FUNCTION) != 0) { *highest_tier = CodeKind::INTERPRETED_FUNCTION; return true; @@ -135,7 +132,6 @@ CodeKind JSFunction::GetActiveTier() const { DCHECK(highest_tier == CodeKind::TURBOFAN || highest_tier == CodeKind::BASELINE || highest_tier == CodeKind::TURBOPROP || - highest_tier == CodeKind::NATIVE_CONTEXT_INDEPENDENT || highest_tier == CodeKind::INTERPRETED_FUNCTION); return highest_tier; } @@ -145,11 +141,6 @@ bool JSFunction::ActiveTierIsTurbofan() const { return GetActiveTier() == CodeKind::TURBOFAN; } -bool JSFunction::ActiveTierIsNCI() const { - if (!shared().HasBytecodeArray()) return false; - return GetActiveTier() == CodeKind::NATIVE_CONTEXT_INDEPENDENT; -} - bool JSFunction::ActiveTierIsBaseline() const { return GetActiveTier() == CodeKind::BASELINE; } @@ -376,7 +367,6 @@ void JSFunction::InitializeFeedbackCell( const bool needs_feedback_vector = !FLAG_lazy_feedback_allocation || FLAG_always_opt || - function->shared().may_have_cached_code() || // We also need a feedback vector for certain log events, collecting type // profile and more precise code coverage. FLAG_log_function_events || !isolate->is_best_effort_code_coverage() || @@ -410,7 +400,7 @@ void SetInstancePrototype(Isolate* isolate, Handle<JSFunction> function, // Put the value in the initial map field until an initial map is needed. // At that point, a new initial map is created and the prototype is put // into the initial map where it belongs. - function->set_prototype_or_initial_map(*value); + function->set_prototype_or_initial_map(*value, kReleaseStore); } else { Handle<Map> new_map = Map::Copy(isolate, initial_map, "SetInstancePrototype"); @@ -435,7 +425,7 @@ void SetInstancePrototype(Isolate* isolate, Handle<JSFunction> function, // Put the value in the initial map field until an initial map is // needed. At that point, a new initial map is created and the // prototype is put into the initial map where it belongs. - function->set_prototype_or_initial_map(*value); + function->set_prototype_or_initial_map(*value, kReleaseStore); if (value->IsJSObject()) { // Optimize as prototype to detach it from its transition tree. JSObject::OptimizeAsPrototype(Handle<JSObject>::cast(value)); @@ -498,7 +488,7 @@ void JSFunction::SetInitialMap(Isolate* isolate, Handle<JSFunction> function, Map::SetPrototype(isolate, map, prototype); } map->SetConstructor(*constructor); - function->set_prototype_or_initial_map(*map); + function->set_prototype_or_initial_map(*map, kReleaseStore); if (FLAG_log_maps) { LOG(isolate, MapEvent("InitialMap", Handle<Map>(), map, "", SharedFunctionInfo::DebugName( @@ -806,6 +796,55 @@ MaybeHandle<Map> JSFunction::GetDerivedMap(Isolate* isolate, return map; } +Handle<Map> JSFunction::GetDerivedRabGsabMap(Isolate* isolate, + Handle<JSFunction> constructor, + Handle<JSReceiver> new_target) { + { + DisallowHeapAllocation no_alloc; + NativeContext context = isolate->context().native_context(); + if (*new_target == context.uint8_array_fun()) { + return handle(context.rab_gsab_uint8_array_map(), isolate); + } + if (*new_target == context.int8_array_fun()) { + return handle(context.rab_gsab_int8_array_map(), isolate); + } + if (*new_target == context.uint16_array_fun()) { + return handle(context.rab_gsab_uint16_array_map(), isolate); + } + if (*new_target == context.int16_array_fun()) { + return handle(context.rab_gsab_int16_array_map(), isolate); + } + if (*new_target == context.uint32_array_fun()) { + return handle(context.rab_gsab_uint32_array_map(), isolate); + } + if (*new_target == context.int32_array_fun()) { + return handle(context.rab_gsab_int32_array_map(), isolate); + } + if (*new_target == context.float32_array_fun()) { + return handle(context.rab_gsab_float32_array_map(), isolate); + } + if (*new_target == context.float64_array_fun()) { + return handle(context.rab_gsab_float64_array_map(), isolate); + } + if (*new_target == context.biguint64_array_fun()) { + return handle(context.rab_gsab_biguint64_array_map(), isolate); + } + if (*new_target == context.bigint64_array_fun()) { + return handle(context.rab_gsab_bigint64_array_map(), isolate); + } + } + + // This only happens when subclassing TypedArrays. Create a new map with the + // corresponding RAB / GSAB ElementsKind. Note: the map is not cached and + // reused -> every array gets a unique map, making ICs slow. + Handle<Map> map = + GetDerivedMap(isolate, constructor, new_target).ToHandleChecked(); + Handle<Map> rab_gsab_map = Map::Copy(isolate, map, "RAB / GSAB"); + rab_gsab_map->set_elements_kind( + GetCorrespondingRabGsabElementsKind(map->elements_kind())); + return rab_gsab_map; +} + int JSFunction::ComputeInstanceSizeWithMinSlack(Isolate* isolate) { CHECK(has_initial_map()); if (initial_map().IsInobjectSlackTrackingInProgress()) { diff --git a/deps/v8/src/objects/js-function.h b/deps/v8/src/objects/js-function.h index 76af98efe7..9d0fc533f4 100644 --- a/deps/v8/src/objects/js-function.h +++ b/deps/v8/src/objects/js-function.h @@ -55,7 +55,7 @@ class JSBoundFunction class JSFunction : public JSFunctionOrBoundFunction { public: // [prototype_or_initial_map]: - DECL_ACCESSORS(prototype_or_initial_map, HeapObject) + DECL_RELEASE_ACQUIRE_ACCESSORS(prototype_or_initial_map, HeapObject) // [shared]: The information about the function that // can be shared by instances. @@ -93,8 +93,8 @@ class JSFunction : public JSFunctionOrBoundFunction { // Get the abstract code associated with the function, which will either be // a Code object or a BytecodeArray. - template <typename LocalIsolate> - inline AbstractCode abstract_code(LocalIsolate* isolate); + template <typename IsolateT> + inline AbstractCode abstract_code(IsolateT* isolate); // The predicates for querying code kinds related to this function have // specific terminology: @@ -122,7 +122,6 @@ class JSFunction : public JSFunctionOrBoundFunction { CodeKind GetActiveTier() const; V8_EXPORT_PRIVATE bool ActiveTierIsIgnition() const; bool ActiveTierIsTurbofan() const; - bool ActiveTierIsNCI() const; bool ActiveTierIsBaseline() const; bool ActiveTierIsIgnitionOrBaseline() const; bool ActiveTierIsMidtierTurboprop() const; @@ -238,6 +237,11 @@ class JSFunction : public JSFunctionOrBoundFunction { Isolate* isolate, Handle<JSFunction> constructor, Handle<JSReceiver> new_target); + // Like GetDerivedMap, but returns a map with a RAB / GSAB ElementsKind. + static V8_WARN_UNUSED_RESULT Handle<Map> GetDerivedRabGsabMap( + Isolate* isolate, Handle<JSFunction> constructor, + Handle<JSReceiver> new_target); + // Get and set the prototype property on a JSFunction. If the // function has an initial map the prototype is set on the initial // map. Otherwise, the prototype is put in the initial map field diff --git a/deps/v8/src/objects/js-locale.cc b/deps/v8/src/objects/js-locale.cc index a8da4a9612..236c673ca3 100644 --- a/deps/v8/src/objects/js-locale.cc +++ b/deps/v8/src/objects/js-locale.cc @@ -20,10 +20,15 @@ #include "src/objects/intl-objects.h" #include "src/objects/js-locale-inl.h" #include "src/objects/objects-inl.h" +#include "unicode/calendar.h" #include "unicode/char16ptr.h" +#include "unicode/coll.h" +#include "unicode/dtptngen.h" #include "unicode/localebuilder.h" #include "unicode/locid.h" +#include "unicode/ucal.h" #include "unicode/uloc.h" +#include "unicode/ulocdata.h" #include "unicode/unistr.h" namespace v8 { @@ -165,6 +170,11 @@ bool IsUnicodeVariantSubtag(const std::string& value) { bool IsExtensionSingleton(const std::string& value) { return IsAlphanum(value, 1, 1); } + +int32_t weekdayFromEDaysOfWeek(icu::Calendar::EDaysOfWeek eDaysOfWeek) { + return (eDaysOfWeek == icu::Calendar::SUNDAY) ? 7 : eDaysOfWeek - 1; +} + } // namespace bool JSLocale::Is38AlphaNumList(const std::string& value) { @@ -450,6 +460,340 @@ MaybeHandle<JSLocale> JSLocale::Minimize(Isolate* isolate, return Construct(isolate, result); } +template <typename T> +MaybeHandle<JSArray> GetKeywordValuesFromLocale( + Isolate* isolate, const char* key, const char* unicode_key, + const icu::Locale& locale, + const std::map<std::string, std::string>& substitutions) { + Factory* factory = isolate->factory(); + UErrorCode status = U_ZERO_ERROR; + std::string ext = + locale.getUnicodeKeywordValue<std::string>(unicode_key, status); + if (!ext.empty()) { + Handle<FixedArray> fixed_array = factory->NewFixedArray(1); + Handle<String> str = factory->NewStringFromAsciiChecked(ext.c_str()); + fixed_array->set(0, *str); + return factory->NewJSArrayWithElements(fixed_array); + } + status = U_ZERO_ERROR; + std::unique_ptr<icu::StringEnumeration> enumeration( + T::getKeywordValuesForLocale(key, locale, true, status)); + if (U_FAILURE(status)) { + THROW_NEW_ERROR(isolate, NewRangeError(MessageTemplate::kIcuError), + JSArray); + } + int32_t count = enumeration->count(status); + if (U_FAILURE(status)) { + THROW_NEW_ERROR(isolate, NewRangeError(MessageTemplate::kIcuError), + JSArray); + } + Handle<FixedArray> fixed_array = factory->NewFixedArray(count); + + int32_t index = 0; + for (const char* item = enumeration->next(nullptr, status); + U_SUCCESS(status) && item != nullptr; + item = enumeration->next(nullptr, status)) { + auto mapped = substitutions.find(item); + if (mapped != substitutions.end()) { + item = mapped->second.c_str(); + if (*item == '\0') { + continue; + } + } + Handle<String> str = factory->NewStringFromAsciiChecked(item); + fixed_array->set(index++, *str); + } + if (U_FAILURE(status)) { + THROW_NEW_ERROR(isolate, NewRangeError(MessageTemplate::kIcuError), + JSArray); + } + return factory->NewJSArrayWithElements(fixed_array); +} + +MaybeHandle<JSArray> JSLocale::Calendars(Isolate* isolate, + Handle<JSLocale> locale) { + icu::Locale icu_locale(*(locale->icu_locale().raw())); + const std::map<std::string, std::string> substitutions( + {{"gregorian", "gregory"}, {"ethiopic-amete-alem", "ethioaa"}}); + return GetKeywordValuesFromLocale<icu::Calendar>(isolate, "calendar", "ca", + icu_locale, substitutions); +} + +MaybeHandle<JSArray> JSLocale::Collations(Isolate* isolate, + Handle<JSLocale> locale) { + icu::Locale icu_locale(*(locale->icu_locale().raw())); + const std::map<std::string, std::string> substitutions( + {{"standard", ""}, {"search", ""}}); + return GetKeywordValuesFromLocale<icu::Collator>(isolate, "collations", "co", + icu_locale, substitutions); +} + +MaybeHandle<JSArray> JSLocale::HourCycles(Isolate* isolate, + Handle<JSLocale> locale) { + // Let preferred be loc.[[HourCycle]]. + // Let locale be loc.[[Locale]]. + icu::Locale icu_locale(*(locale->icu_locale().raw())); + Factory* factory = isolate->factory(); + + // Assert: locale matches the unicode_locale_id production. + + // Let list be a List of 1 or more hour cycle identifiers, which must be + // String values indicating either the 12-hour format ("h11", "h12") or the + // 24-hour format ("h23", "h24"), sorted in descending preference of those in + // common use in the locale for date and time formatting. + + // Return CreateArrayFromListAndPreferred( list, preferred ). + Handle<FixedArray> fixed_array = factory->NewFixedArray(1); + UErrorCode status = U_ZERO_ERROR; + std::string ext = + icu_locale.getUnicodeKeywordValue<std::string>("hc", status); + if (!ext.empty()) { + Handle<String> str = factory->NewStringFromAsciiChecked(ext.c_str()); + fixed_array->set(0, *str); + return factory->NewJSArrayWithElements(fixed_array); + } + status = U_ZERO_ERROR; + std::unique_ptr<icu::DateTimePatternGenerator> generator( + icu::DateTimePatternGenerator::createInstance(icu_locale, status)); + if (U_FAILURE(status)) { + THROW_NEW_ERROR(isolate, NewRangeError(MessageTemplate::kIcuError), + JSArray); + } + + UDateFormatHourCycle hc = generator->getDefaultHourCycle(status); + if (U_FAILURE(status)) { + THROW_NEW_ERROR(isolate, NewRangeError(MessageTemplate::kIcuError), + JSArray); + } + Handle<String> hour_cycle; + + switch (hc) { + case UDAT_HOUR_CYCLE_11: + hour_cycle = factory->h11_string(); + break; + case UDAT_HOUR_CYCLE_12: + hour_cycle = factory->h12_string(); + break; + case UDAT_HOUR_CYCLE_23: + hour_cycle = factory->h23_string(); + break; + case UDAT_HOUR_CYCLE_24: + hour_cycle = factory->h24_string(); + break; + default: + break; + } + fixed_array->set(0, *hour_cycle); + return factory->NewJSArrayWithElements(fixed_array); +} + +MaybeHandle<JSArray> JSLocale::NumberingSystems(Isolate* isolate, + Handle<JSLocale> locale) { + // Let preferred be loc.[[NumberingSystem]]. + + // Let locale be loc.[[Locale]]. + icu::Locale icu_locale(*(locale->icu_locale().raw())); + Factory* factory = isolate->factory(); + + // Assert: locale matches the unicode_locale_id production. + + // Let list be a List of 1 or more numbering system identifiers, which must be + // String values conforming to the type sequence from UTS 35 Unicode Locale + // Identifier, section 3.2, sorted in descending preference of those in common + // use in the locale for formatting numeric values. + + // Return CreateArrayFromListAndPreferred( list, preferred ). + UErrorCode status = U_ZERO_ERROR; + Handle<FixedArray> fixed_array = factory->NewFixedArray(1); + std::string numbering_system = + icu_locale.getUnicodeKeywordValue<std::string>("nu", status); + if (numbering_system.empty()) { + numbering_system = Intl::GetNumberingSystem(icu_locale); + } + Handle<String> str = + factory->NewStringFromAsciiChecked(numbering_system.c_str()); + + fixed_array->set(0, *str); + return factory->NewJSArrayWithElements(fixed_array); +} + +MaybeHandle<Object> JSLocale::TimeZones(Isolate* isolate, + Handle<JSLocale> locale) { + // Let loc be the this value. + + // Perform ? RequireInternalSlot(loc, [[InitializedLocale]]) + + // Let locale be loc.[[Locale]]. + icu::Locale icu_locale(*(locale->icu_locale().raw())); + Factory* factory = isolate->factory(); + + // If the unicode_language_id production of locale does not contain the + // ["-" unicode_region_subtag] sequence, return undefined. + const char* region = icu_locale.getCountry(); + if (region == nullptr || strlen(region) == 0) { + return factory->undefined_value(); + } + + // Return TimeZonesOfLocale(loc). + + // Let locale be loc.[[Locale]]. + + // Assert: locale matches the unicode_locale_id production. + + // Let region be the substring of locale corresponding to the + // unicode_region_subtag production of the unicode_language_id. + + // Let list be a List of 1 or more time zone identifiers, which must be String + // values indicating a Zone or Link name of the IANA Time Zone Database, + // sorted in descending preference of those in common use in region. + int32_t index = 0; + UErrorCode status = U_ZERO_ERROR; + std::unique_ptr<icu::StringEnumeration> enumeration( + icu::TimeZone::createTimeZoneIDEnumeration(UCAL_ZONE_TYPE_CANONICAL, + region, nullptr, status)); + if (U_FAILURE(status)) { + THROW_NEW_ERROR(isolate, NewRangeError(MessageTemplate::kIcuError), + JSArray); + } + int32_t count = enumeration->count(status); + if (U_FAILURE(status)) { + THROW_NEW_ERROR(isolate, NewRangeError(MessageTemplate::kIcuError), + JSArray); + } + + // Return CreateArrayFromList( list ). + Handle<FixedArray> fixed_array = factory->NewFixedArray(count); + for (const char* item = enumeration->next(nullptr, status); + U_SUCCESS(status) && item != nullptr; + item = enumeration->next(nullptr, status)) { + Handle<String> str = isolate->factory()->NewStringFromAsciiChecked(item); + fixed_array->set(index++, *str); + } + if (U_FAILURE(status)) { + THROW_NEW_ERROR(isolate, NewRangeError(MessageTemplate::kIcuError), + JSArray); + } + + return factory->NewJSArrayWithElements(fixed_array); +} + +MaybeHandle<JSObject> JSLocale::TextInfo(Isolate* isolate, + Handle<JSLocale> locale) { + // Let loc be the this value. + + // Perform ? RequireInternalSlot(loc, [[InitializedLocale]]). + + // Let locale be loc.[[Locale]]. + + // Assert: locale matches the unicode_locale_id production. + + Factory* factory = isolate->factory(); + // Let info be ! ObjectCreate(%Object.prototype%). + Handle<JSObject> info = factory->NewJSObject(isolate->object_function()); + + // Let dir be "ltr". + Handle<String> dir = factory->ltr_string(); + + // If the default general ordering of characters (characterOrder) within a + // line in the locale is right-to-left, then + UErrorCode status = U_ZERO_ERROR; + ULayoutType orientation = uloc_getCharacterOrientation( + (locale->icu_locale().raw())->getName(), &status); + if (U_FAILURE(status)) { + THROW_NEW_ERROR(isolate, NewRangeError(MessageTemplate::kIcuError), + JSObject); + } + if (orientation == ULOC_LAYOUT_LTR) { + // Let dir be "rtl". + dir = factory->rtl_string(); + } + + // Perform ! CreateDataPropertyOrThrow(info, "direction", dir). + CHECK(JSReceiver::CreateDataProperty( + isolate, info, factory->direction_string(), dir, Just(kDontThrow)) + .FromJust()); + + // Return info. + return info; +} + +MaybeHandle<JSObject> JSLocale::WeekInfo(Isolate* isolate, + Handle<JSLocale> locale) { + // Let loc be the this value. + + // Perform ? RequireInternalSlot(loc, [[InitializedLocale]]). + + // Let locale be loc.[[Locale]]. + + // Assert: locale matches the unicode_locale_id production. + Factory* factory = isolate->factory(); + + // Let info be ! ObjectCreate(%Object.prototype%). + Handle<JSObject> info = factory->NewJSObject(isolate->object_function()); + UErrorCode status = U_ZERO_ERROR; + std::unique_ptr<icu::Calendar> calendar( + icu::Calendar::createInstance(*(locale->icu_locale().raw()), status)); + if (U_FAILURE(status)) { + THROW_NEW_ERROR(isolate, NewRangeError(MessageTemplate::kIcuError), + JSObject); + } + + // Let fd be the weekday value indicating which day of the week is considered + // the 'first' day, for calendar purposes, in the locale. + int32_t fd = weekdayFromEDaysOfWeek(calendar->getFirstDayOfWeek()); + bool thursday_is_weekend = + (UCAL_WEEKDAY != calendar->getDayOfWeekType(UCAL_THURSDAY, status)); + bool friday_is_weekend = + (UCAL_WEEKDAY != calendar->getDayOfWeekType(UCAL_FRIDAY, status)); + bool saturday_is_weekend = + (UCAL_WEEKDAY != calendar->getDayOfWeekType(UCAL_SATURDAY, status)); + bool sunday_is_weekend = + (UCAL_WEEKDAY != calendar->getDayOfWeekType(UCAL_SUNDAY, status)); + if (U_FAILURE(status)) { + THROW_NEW_ERROR(isolate, NewRangeError(MessageTemplate::kIcuError), + JSObject); + } + + // Let ws be the weekday value indicating which day of the week is considered + // the starting day of the 'weekend', for calendar purposes, in the locale. + int32_t ws = thursday_is_weekend ? 4 : (friday_is_weekend ? 5 : 6); + + // Let we be the weekday value indicating which day of the week is considered + // the ending day of the 'weekend', for calendar purposes, in the locale. + int32_t we = sunday_is_weekend ? 7 : (saturday_is_weekend ? 6 : 5); + + // Let md be the minimal days required in the first week of a month or year, + // for calendar purposes, in the locale. + int32_t md = calendar->getMinimalDaysInFirstWeek(); + + // Perform ! CreateDataPropertyOrThrow(info, "firstDay", fd). + CHECK(JSReceiver::CreateDataProperty( + isolate, info, factory->firstDay_string(), + factory->NewNumberFromInt(fd), Just(kDontThrow)) + .FromJust()); + + // Perform ! CreateDataPropertyOrThrow(info, "weekendStart", ws). + CHECK(JSReceiver::CreateDataProperty( + isolate, info, factory->weekendStart_string(), + factory->NewNumberFromInt(ws), Just(kDontThrow)) + .FromJust()); + + // Perform ! CreateDataPropertyOrThrow(info, "weekendEnd", we). + CHECK(JSReceiver::CreateDataProperty( + isolate, info, factory->weekendEnd_string(), + factory->NewNumberFromInt(we), Just(kDontThrow)) + .FromJust()); + + // Perform ! CreateDataPropertyOrThrow(info, "minimalDays", md). + CHECK(JSReceiver::CreateDataProperty( + isolate, info, factory->minimalDays_string(), + factory->NewNumberFromInt(md), Just(kDontThrow)) + .FromJust()); + + // Return info. + return info; +} + Handle<Object> JSLocale::Language(Isolate* isolate, Handle<JSLocale> locale) { Factory* factory = isolate->factory(); const char* language = locale->icu_locale().raw()->getLanguage(); diff --git a/deps/v8/src/objects/js-locale.h b/deps/v8/src/objects/js-locale.h index d864c8272f..5f57dca516 100644 --- a/deps/v8/src/objects/js-locale.h +++ b/deps/v8/src/objects/js-locale.h @@ -40,6 +40,21 @@ class JSLocale : public TorqueGeneratedJSLocale<JSLocale, JSObject> { static MaybeHandle<JSLocale> Minimize(Isolate* isolate, Handle<JSLocale> locale); + V8_WARN_UNUSED_RESULT static MaybeHandle<JSArray> Calendars( + Isolate* isolate, Handle<JSLocale> locale); + V8_WARN_UNUSED_RESULT static MaybeHandle<JSArray> Collations( + Isolate* isolate, Handle<JSLocale> locale); + V8_WARN_UNUSED_RESULT static MaybeHandle<JSArray> HourCycles( + Isolate* isolate, Handle<JSLocale> locale); + V8_WARN_UNUSED_RESULT static MaybeHandle<JSArray> NumberingSystems( + Isolate* isolate, Handle<JSLocale> locale); + V8_WARN_UNUSED_RESULT static MaybeHandle<JSObject> TextInfo( + Isolate* isolate, Handle<JSLocale> locale); + V8_WARN_UNUSED_RESULT static MaybeHandle<Object> TimeZones( + Isolate* isolate, Handle<JSLocale> locale); + V8_WARN_UNUSED_RESULT static MaybeHandle<JSObject> WeekInfo( + Isolate* isolate, Handle<JSLocale> locale); + static Handle<Object> Language(Isolate* isolate, Handle<JSLocale> locale); static Handle<Object> Script(Isolate* isolate, Handle<JSLocale> locale); static Handle<Object> Region(Isolate* isolate, Handle<JSLocale> locale); diff --git a/deps/v8/src/objects/js-objects-inl.h b/deps/v8/src/objects/js-objects-inl.h index cbbbc9fc9e..6d3dc9cdde 100644 --- a/deps/v8/src/objects/js-objects-inl.h +++ b/deps/v8/src/objects/js-objects-inl.h @@ -401,25 +401,31 @@ Object JSObject::InObjectPropertyAtPut(int index, Object value, } void JSObject::InitializeBody(Map map, int start_offset, - Object pre_allocated_value, Object filler_value) { - DCHECK_IMPLIES(filler_value.IsHeapObject(), - !ObjectInYoungGeneration(filler_value)); - DCHECK_IMPLIES(pre_allocated_value.IsHeapObject(), - !ObjectInYoungGeneration(pre_allocated_value)); + bool is_slack_tracking_in_progress, + MapWord filler_map, Object undefined_filler) { int size = map.instance_size(); int offset = start_offset; - if (filler_value != pre_allocated_value) { + if (is_slack_tracking_in_progress) { int end_of_pre_allocated_offset = size - (map.UnusedPropertyFields() * kTaggedSize); DCHECK_LE(kHeaderSize, end_of_pre_allocated_offset); + // fill start with references to the undefined value object while (offset < end_of_pre_allocated_offset) { - WRITE_FIELD(*this, offset, pre_allocated_value); + WRITE_FIELD(*this, offset, undefined_filler); + offset += kTaggedSize; + } + // fill the remainder with one word filler objects (ie just a map word) + while (offset < size) { + Object fm = Object(filler_map.ptr()); + WRITE_FIELD(*this, offset, fm); + offset += kTaggedSize; + } + } else { + while (offset < size) { + // fill with references to the undefined value object + WRITE_FIELD(*this, offset, undefined_filler); offset += kTaggedSize; } - } - while (offset < size) { - WRITE_FIELD(*this, offset, filler_value); - offset += kTaggedSize; } } @@ -769,7 +775,6 @@ static inline bool ShouldConvertToSlowElements(JSObject object, if (index - capacity >= JSObject::kMaxGap) return true; *new_capacity = JSObject::NewElementsCapacity(index + 1); DCHECK_LT(index, *new_capacity); - // TODO(ulan): Check if it works with young large objects. if (*new_capacity <= JSObject::kMaxUncheckedOldFastElementsLength || (*new_capacity <= JSObject::kMaxUncheckedFastElementsLength && ObjectInYoungGeneration(object))) { diff --git a/deps/v8/src/objects/js-objects.cc b/deps/v8/src/objects/js-objects.cc index 01df8e1524..032296aaa4 100644 --- a/deps/v8/src/objects/js-objects.cc +++ b/deps/v8/src/objects/js-objects.cc @@ -2054,8 +2054,7 @@ MaybeHandle<FixedArray> GetOwnValuesOrEntries(Isolate* isolate, MaybeHandle<FixedArray>()); if (get_entries) { - Handle<FixedArray> entry_storage = - isolate->factory()->NewUninitializedFixedArray(2); + Handle<FixedArray> entry_storage = isolate->factory()->NewFixedArray(2); entry_storage->set(0, *key); entry_storage->set(1, *value); value = isolate->factory()->NewJSArrayWithElements(entry_storage, @@ -2767,14 +2766,14 @@ void MigrateFastToFast(Isolate* isolate, Handle<JSObject> object, // If the map does not add named properties, simply set the map. if (old_map->NumberOfOwnDescriptors() == new_map->NumberOfOwnDescriptors()) { - object->synchronized_set_map(*new_map); + object->set_map(*new_map, kReleaseStore); return; } // If the map adds a new kDescriptor property, simply set the map. PropertyDetails details = new_map->GetLastDescriptorDetails(isolate); if (details.location() == kDescriptor) { - object->synchronized_set_map(*new_map); + object->set_map(*new_map, kReleaseStore); return; } @@ -2790,7 +2789,7 @@ void MigrateFastToFast(Isolate* isolate, Handle<JSObject> object, auto value = isolate->factory()->NewHeapNumberWithHoleNaN(); object->FastPropertyAtPut(index, *value); } - object->synchronized_set_map(*new_map); + object->set_map(*new_map, kReleaseStore); return; } @@ -2818,7 +2817,7 @@ void MigrateFastToFast(Isolate* isolate, Handle<JSObject> object, // Set the new property value and do the map transition. object->SetProperties(*new_storage); - object->synchronized_set_map(*new_map); + object->set_map(*new_map, kReleaseStore); return; } @@ -2831,7 +2830,7 @@ void MigrateFastToFast(Isolate* isolate, Handle<JSObject> object, // converted to doubles. if (!old_map->InstancesNeedRewriting(*new_map, number_of_fields, inobject, unused, &old_number_of_fields)) { - object->synchronized_set_map(*new_map); + object->set_map(*new_map, kReleaseStore); return; } @@ -2946,7 +2945,7 @@ void MigrateFastToFast(Isolate* isolate, Handle<JSObject> object, // We are storing the new map using release store after creating a filler for // the left-over space to avoid races with the sweeper thread. - object->synchronized_set_map(*new_map); + object->set_map(*new_map, kReleaseStore); } void MigrateFastToSlow(Isolate* isolate, Handle<JSObject> object, @@ -3044,7 +3043,7 @@ void MigrateFastToSlow(Isolate* isolate, Handle<JSObject> object, // We are storing the new map using release store after creating a filler for // the left-over space to avoid races with the sweeper thread. - object->synchronized_set_map(*new_map); + object->set_map(*new_map, kReleaseStore); if (V8_ENABLE_SWISS_NAME_DICTIONARY_BOOL) { object->SetProperties(*ord_dictionary); @@ -3088,7 +3087,7 @@ void JSObject::MigrateToMap(Isolate* isolate, Handle<JSObject> object, CHECK(new_map->is_dictionary_map()); // Slow-to-slow migration is trivial. - object->synchronized_set_map(*new_map); + object->set_map(*new_map, kReleaseStore); } else if (!new_map->is_dictionary_map()) { MigrateFastToFast(isolate, object, new_map); if (old_map->is_prototype_map()) { @@ -3118,10 +3117,9 @@ void JSObject::MigrateToMap(Isolate* isolate, Handle<JSObject> object, // When adding code here, add a DisallowGarbageCollection too. } -void JSObject::ForceSetPrototype(Handle<JSObject> object, +void JSObject::ForceSetPrototype(Isolate* isolate, Handle<JSObject> object, Handle<HeapObject> proto) { // object.__proto__ = proto; - Isolate* isolate = object->GetIsolate(); Handle<Map> old_map = Handle<Map>(object->map(), isolate); Handle<Map> new_map = Map::Copy(isolate, old_map, "ForceSetPrototype"); Map::SetPrototype(isolate, new_map, proto); @@ -3199,7 +3197,7 @@ void JSObject::AllocateStorageForMap(Handle<JSObject> object, Handle<Map> map) { Object value = storage->get(i); object->FastPropertyAtPut(index, value); } - object->synchronized_set_map(*map); + object->set_map(*map, kReleaseStore); } void JSObject::MigrateInstance(Isolate* isolate, Handle<JSObject> object) { @@ -3489,7 +3487,7 @@ void JSObject::MigrateSlowToFast(Handle<JSObject> object, DCHECK_LE(unused_property_fields, inobject_props); // Transform the object. new_map->SetInObjectUnusedPropertyFields(inobject_props); - object->synchronized_set_map(*new_map); + object->set_map(*new_map, kReleaseStore); object->SetProperties(ReadOnlyRoots(isolate).empty_fixed_array()); // Check that it really works. DCHECK(object->HasFastProperties()); @@ -3608,7 +3606,7 @@ void JSObject::MigrateSlowToFast(Handle<JSObject> object, LOG(isolate, MapEvent("SlowToFast", old_map, new_map, reason)); } // Transform the object. - object->synchronized_set_map(*new_map); + object->set_map(*new_map, kReleaseStore); object->SetProperties(*fields); DCHECK(object->IsJSObject()); @@ -4222,10 +4220,15 @@ bool JSObject::HasEnumerableElements() { } #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype) case TYPE##_ELEMENTS: - TYPED_ARRAYS(TYPED_ARRAY_CASE) + TYPED_ARRAYS(TYPED_ARRAY_CASE) { + size_t length = JSTypedArray::cast(object).length(); + return length > 0; + } + + RAB_GSAB_TYPED_ARRAYS(TYPED_ARRAY_CASE) #undef TYPED_ARRAY_CASE { - size_t length = JSTypedArray::cast(object).length(); + size_t length = JSTypedArray::cast(object).GetLength(); return length > 0; } case DICTIONARY_ELEMENTS: { @@ -4769,7 +4772,7 @@ void JSObject::SetImmutableProto(Handle<JSObject> object) { Handle<Map> new_map = Map::TransitionToImmutableProto(object->GetIsolate(), map); - object->synchronized_set_map(*new_map); + object->set_map(*new_map, kReleaseStore); } void JSObject::EnsureCanContainElements(Handle<JSObject> object, @@ -4851,9 +4854,9 @@ static ElementsKind BestFittingFastElementsKind(JSObject object) { } // static -void JSObject::AddDataElement(Handle<JSObject> object, uint32_t index, - Handle<Object> value, - PropertyAttributes attributes) { +Maybe<bool> JSObject::AddDataElement(Handle<JSObject> object, uint32_t index, + Handle<Object> value, + PropertyAttributes attributes) { Isolate* isolate = object->GetIsolate(); DCHECK(object->map(isolate).is_extensible()); @@ -4896,13 +4899,15 @@ void JSObject::AddDataElement(Handle<JSObject> object, uint32_t index, } to = GetMoreGeneralElementsKind(kind, to); ElementsAccessor* accessor = ElementsAccessor::ForKind(to); - accessor->Add(object, index, value, attributes, new_capacity); + MAYBE_RETURN(accessor->Add(object, index, value, attributes, new_capacity), + Nothing<bool>()); if (object->IsJSArray(isolate) && index >= old_length) { Handle<Object> new_length = isolate->factory()->NewNumberFromUint(index + 1); JSArray::cast(*object).set_length(*new_length); } + return Just(true); } template <AllocationSiteUpdateMode update_or_check> @@ -4969,7 +4974,15 @@ void JSObject::TransitionElementsKind(Handle<JSObject> object, DCHECK((IsSmiElementsKind(from_kind) && IsDoubleElementsKind(to_kind)) || (IsDoubleElementsKind(from_kind) && IsObjectElementsKind(to_kind))); uint32_t c = static_cast<uint32_t>(object->elements().length()); - ElementsAccessor::ForKind(to_kind)->GrowCapacityAndConvert(object, c); + if (ElementsAccessor::ForKind(to_kind) + ->GrowCapacityAndConvert(object, c) + .IsNothing()) { + // TODO(victorgomes): Temporarily forcing a fatal error here in case of + // overflow, until all users of TransitionElementsKind can handle + // exceptions. + FATAL("Fatal JavaScript invalid array size transitioning elements kind."); + UNREACHABLE(); + } } } @@ -5017,6 +5030,7 @@ int JSObject::GetFastElementsUsage() { #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype) case TYPE##_ELEMENTS: TYPED_ARRAYS(TYPED_ARRAY_CASE) + RAB_GSAB_TYPED_ARRAYS(TYPED_ARRAY_CASE) #undef TYPED_ARRAY_CASE UNREACHABLE(); } diff --git a/deps/v8/src/objects/js-objects.h b/deps/v8/src/objects/js-objects.h index b1f22ed8f6..2e94bf17a9 100644 --- a/deps/v8/src/objects/js-objects.h +++ b/deps/v8/src/objects/js-objects.h @@ -440,10 +440,9 @@ class JSObject : public TorqueGeneratedJSObject<JSObject, JSReceiver> { const char* name, Handle<Object> value, PropertyAttributes attributes); - V8_EXPORT_PRIVATE static void AddDataElement(Handle<JSObject> receiver, - uint32_t index, - Handle<Object> value, - PropertyAttributes attributes); + V8_EXPORT_PRIVATE static Maybe<bool> AddDataElement( + Handle<JSObject> receiver, uint32_t index, Handle<Object> value, + PropertyAttributes attributes); // Extend the receiver with a single fast property appeared first in the // passed map. This also extends the property backing store if necessary. @@ -620,7 +619,7 @@ class JSObject : public TorqueGeneratedJSObject<JSObject, JSReceiver> { // Forces a prototype without any of the checks that the regular SetPrototype // would do. - static void ForceSetPrototype(Handle<JSObject> object, + static void ForceSetPrototype(Isolate* isolate, Handle<JSObject> object, Handle<HeapObject> proto); // Convert the object to use the canonical dictionary @@ -680,11 +679,12 @@ class JSObject : public TorqueGeneratedJSObject<JSObject, JSReceiver> { // Initializes the body starting at |start_offset|. It is responsibility of // the caller to initialize object header. Fill the pre-allocated fields with - // pre_allocated_value and the rest with filler_value. + // undefined_value and the rest with filler_map. // Note: this call does not update write barrier, the caller is responsible - // to ensure that |filler_value| can be collected without WB here. + // to ensure that |filler_map| can be collected without WB here. inline void InitializeBody(Map map, int start_offset, - Object pre_allocated_value, Object filler_value); + bool is_slack_tracking_in_progress, + MapWord filler_map, Object undefined_value); // Check whether this object references another object bool ReferencesObject(Object obj); @@ -702,11 +702,11 @@ class JSObject : public TorqueGeneratedJSObject<JSObject, JSReceiver> { DECL_PRINTER(JSObject) DECL_VERIFIER(JSObject) #ifdef OBJECT_PRINT - bool PrintProperties(std::ostream& os); // NOLINT - void PrintElements(std::ostream& os); // NOLINT + bool PrintProperties(std::ostream& os); + void PrintElements(std::ostream& os); #endif #if defined(DEBUG) || defined(OBJECT_PRINT) - void PrintTransitions(std::ostream& os); // NOLINT + void PrintTransitions(std::ostream& os); #endif static void PrintElementsTransition(FILE* file, Handle<JSObject> object, diff --git a/deps/v8/src/objects/js-objects.tq b/deps/v8/src/objects/js-objects.tq index 9f5bf8554e..e21f874bbb 100644 --- a/deps/v8/src/objects/js-objects.tq +++ b/deps/v8/src/objects/js-objects.tq @@ -67,10 +67,15 @@ macro GetDerivedMap(implicit context: Context)( return map; } label SlowPath { - return runtime::GetDerivedMap(context, target, newTarget); + return runtime::GetDerivedMap(context, target, newTarget, FalseConstant()); } } +macro GetDerivedRabGsabMap(implicit context: Context)( + target: JSFunction, newTarget: JSReceiver): Map { + return runtime::GetDerivedMap(context, target, newTarget, TrueConstant()); +} + macro AllocateFastOrSlowJSObjectFromMap(implicit context: Context)(map: Map): JSObject { let properties: EmptyFixedArray|NameDictionary|SwissNameDictionary = diff --git a/deps/v8/src/objects/js-regexp.cc b/deps/v8/src/objects/js-regexp.cc index b8a01418da..0ae91a5ef9 100644 --- a/deps/v8/src/objects/js-regexp.cc +++ b/deps/v8/src/objects/js-regexp.cc @@ -151,6 +151,27 @@ JSRegExp::Flags JSRegExp::FlagsFromString(Isolate* isolate, } // static +Handle<String> JSRegExp::StringFromFlags(Isolate* isolate, + JSRegExp::Flags flags) { + // Ensure that this function is up-to-date with the supported flag options. + constexpr size_t kFlagCount = JSRegExp::kFlagCount; + STATIC_ASSERT(kFlagCount == 8); + + // Translate to the lexicographically smaller string. + int cursor = 0; + char buffer[kFlagCount] = {'\0'}; + if (flags & JSRegExp::kHasIndices) buffer[cursor++] = 'd'; + if (flags & JSRegExp::kGlobal) buffer[cursor++] = 'g'; + if (flags & JSRegExp::kIgnoreCase) buffer[cursor++] = 'i'; + if (flags & JSRegExp::kLinear) buffer[cursor++] = 'l'; + if (flags & JSRegExp::kMultiline) buffer[cursor++] = 'm'; + if (flags & JSRegExp::kDotAll) buffer[cursor++] = 's'; + if (flags & JSRegExp::kUnicode) buffer[cursor++] = 'u'; + if (flags & JSRegExp::kSticky) buffer[cursor++] = 'y'; + return isolate->factory()->NewStringFromAsciiChecked(buffer); +} + +// static MaybeHandle<JSRegExp> JSRegExp::New(Isolate* isolate, Handle<String> pattern, Flags flags, uint32_t backtrack_limit) { Handle<JSFunction> constructor = isolate->regexp_function(); diff --git a/deps/v8/src/objects/js-regexp.h b/deps/v8/src/objects/js-regexp.h index c23662251a..d66912c9e8 100644 --- a/deps/v8/src/objects/js-regexp.h +++ b/deps/v8/src/objects/js-regexp.h @@ -90,6 +90,9 @@ class JSRegExp : public TorqueGeneratedJSRegExp<JSRegExp, JSObject> { static Flags FlagsFromString(Isolate* isolate, Handle<String> flags, bool* success); + V8_EXPORT_PRIVATE static Handle<String> StringFromFlags(Isolate* isolate, + Flags flags); + bool CanTierUp(); bool MarkedForTierUp(); void ResetLastTierUpTick(); diff --git a/deps/v8/src/objects/literal-objects.cc b/deps/v8/src/objects/literal-objects.cc index 8dfea9f77c..e6d57de82e 100644 --- a/deps/v8/src/objects/literal-objects.cc +++ b/deps/v8/src/objects/literal-objects.cc @@ -37,9 +37,9 @@ inline int EncodeComputedEntry(ClassBoilerplate::ValueKind value_kind, return flags; } -template <typename LocalIsolate> +template <typename IsolateT> void AddToDescriptorArrayTemplate( - LocalIsolate* isolate, Handle<DescriptorArray> descriptor_array_template, + IsolateT* isolate, Handle<DescriptorArray> descriptor_array_template, Handle<Name> name, ClassBoilerplate::ValueKind value_kind, Handle<Object> value) { InternalIndex entry = descriptor_array_template->Search( @@ -90,18 +90,18 @@ void AddToDescriptorArrayTemplate( } } -template <typename LocalIsolate> +template <typename IsolateT> Handle<NameDictionary> DictionaryAddNoUpdateNextEnumerationIndex( - LocalIsolate* isolate, Handle<NameDictionary> dictionary, Handle<Name> name, + IsolateT* isolate, Handle<NameDictionary> dictionary, Handle<Name> name, Handle<Object> value, PropertyDetails details, InternalIndex* entry_out = nullptr) { return NameDictionary::AddNoUpdateNextEnumerationIndex( isolate, dictionary, name, value, details, entry_out); } -template <typename LocalIsolate> +template <typename IsolateT> Handle<SwissNameDictionary> DictionaryAddNoUpdateNextEnumerationIndex( - LocalIsolate* isolate, Handle<SwissNameDictionary> dictionary, + IsolateT* isolate, Handle<SwissNameDictionary> dictionary, Handle<Name> name, Handle<Object> value, PropertyDetails details, InternalIndex* entry_out = nullptr) { // SwissNameDictionary does not maintain the enumeration order in property @@ -109,10 +109,10 @@ Handle<SwissNameDictionary> DictionaryAddNoUpdateNextEnumerationIndex( return SwissNameDictionary::Add(isolate, dictionary, name, value, details); } -template <typename LocalIsolate> +template <typename IsolateT> Handle<NumberDictionary> DictionaryAddNoUpdateNextEnumerationIndex( - LocalIsolate* isolate, Handle<NumberDictionary> dictionary, - uint32_t element, Handle<Object> value, PropertyDetails details, + IsolateT* isolate, Handle<NumberDictionary> dictionary, uint32_t element, + Handle<Object> value, PropertyDetails details, InternalIndex* entry_out = nullptr) { // NumberDictionary does not maintain the enumeration order, so it's // a normal Add(). @@ -149,10 +149,9 @@ inline int GetExistingValueIndex(Object value) { return value.IsSmi() ? Smi::ToInt(value) : kAccessorNotDefined; } -template <typename LocalIsolate, typename Dictionary, typename Key> -void AddToDictionaryTemplate(LocalIsolate* isolate, - Handle<Dictionary> dictionary, Key key, - int key_index, +template <typename IsolateT, typename Dictionary, typename Key> +void AddToDictionaryTemplate(IsolateT* isolate, Handle<Dictionary> dictionary, + Key key, int key_index, ClassBoilerplate::ValueKind value_kind, Smi value) { InternalIndex entry = dictionary->FindEntry(isolate, key); @@ -372,7 +371,7 @@ void AddToDictionaryTemplate(LocalIsolate* isolate, // Helper class that eases building of a properties, elements and computed // properties templates. -template <typename LocalIsolate> +template <typename IsolateT> class ObjectDescriptor { public: void IncComputedCount() { ++computed_count_; } @@ -401,7 +400,7 @@ class ObjectDescriptor { return computed_properties_; } - void CreateTemplates(LocalIsolate* isolate) { + void CreateTemplates(IsolateT* isolate) { auto* factory = isolate->factory(); descriptor_array_template_ = factory->empty_descriptor_array(); if (V8_ENABLE_SWISS_NAME_DICTIONARY_BOOL) { @@ -443,8 +442,8 @@ class ObjectDescriptor { temp_handle_ = handle(Smi::zero(), isolate); } - void AddConstant(LocalIsolate* isolate, Handle<Name> name, - Handle<Object> value, PropertyAttributes attribs) { + void AddConstant(IsolateT* isolate, Handle<Name> name, Handle<Object> value, + PropertyAttributes attribs) { bool is_accessor = value->IsAccessorInfo(); DCHECK(!value->IsAccessorPair()); if (HasDictionaryProperties()) { @@ -473,7 +472,7 @@ class ObjectDescriptor { } } - void AddNamedProperty(LocalIsolate* isolate, Handle<Name> name, + void AddNamedProperty(IsolateT* isolate, Handle<Name> name, ClassBoilerplate::ValueKind value_kind, int value_index) { Smi value = Smi::FromInt(value_index); @@ -494,7 +493,7 @@ class ObjectDescriptor { } } - void AddIndexedProperty(LocalIsolate* isolate, uint32_t element, + void AddIndexedProperty(IsolateT* isolate, uint32_t element, ClassBoilerplate::ValueKind value_kind, int value_index) { Smi value = Smi::FromInt(value_index); @@ -516,7 +515,7 @@ class ObjectDescriptor { next_enumeration_index_ = current_index + 1; } - void Finalize(LocalIsolate* isolate) { + void Finalize(IsolateT* isolate) { if (HasDictionaryProperties()) { DCHECK_EQ(current_computed_index_, computed_properties_->length()); if (!V8_ENABLE_SWISS_NAME_DICTIONARY_BOOL) { @@ -555,9 +554,9 @@ class ObjectDescriptor { Handle<Object> temp_handle_; }; -template <typename LocalIsolate, typename PropertyDict> +template <typename IsolateT, typename PropertyDict> void ClassBoilerplate::AddToPropertiesTemplate( - LocalIsolate* isolate, Handle<PropertyDict> dictionary, Handle<Name> name, + IsolateT* isolate, Handle<PropertyDict> dictionary, Handle<Name> name, int key_index, ClassBoilerplate::ValueKind value_kind, Smi value) { AddToDictionaryTemplate(isolate, dictionary, name, key_index, value_kind, value); @@ -572,9 +571,9 @@ template void ClassBoilerplate::AddToPropertiesTemplate( Isolate* isolate, Handle<SwissNameDictionary> dictionary, Handle<Name> name, int key_index, ClassBoilerplate::ValueKind value_kind, Smi value); -template <typename LocalIsolate> +template <typename IsolateT> void ClassBoilerplate::AddToElementsTemplate( - LocalIsolate* isolate, Handle<NumberDictionary> dictionary, uint32_t key, + IsolateT* isolate, Handle<NumberDictionary> dictionary, uint32_t key, int key_index, ClassBoilerplate::ValueKind value_kind, Smi value) { AddToDictionaryTemplate(isolate, dictionary, key, key_index, value_kind, value); @@ -586,21 +585,20 @@ template void ClassBoilerplate::AddToElementsTemplate( LocalIsolate* isolate, Handle<NumberDictionary> dictionary, uint32_t key, int key_index, ClassBoilerplate::ValueKind value_kind, Smi value); -template <typename LocalIsolate> +template <typename IsolateT> Handle<ClassBoilerplate> ClassBoilerplate::BuildClassBoilerplate( - LocalIsolate* isolate, ClassLiteral* expr) { + IsolateT* isolate, ClassLiteral* expr) { // Create a non-caching handle scope to ensure that the temporary handle used // by ObjectDescriptor for passing Smis around does not corrupt handle cache // in CanonicalHandleScope. - typename LocalIsolate::HandleScopeType scope(isolate); + typename IsolateT::HandleScopeType scope(isolate); auto* factory = isolate->factory(); - ObjectDescriptor<LocalIsolate> static_desc(kMinimumClassPropertiesCount); - ObjectDescriptor<LocalIsolate> instance_desc( - kMinimumPrototypePropertiesCount); + ObjectDescriptor<IsolateT> static_desc(kMinimumClassPropertiesCount); + ObjectDescriptor<IsolateT> instance_desc(kMinimumPrototypePropertiesCount); for (int i = 0; i < expr->public_members()->length(); i++) { ClassLiteral::Property* property = expr->public_members()->at(i); - ObjectDescriptor<LocalIsolate>& desc = + ObjectDescriptor<IsolateT>& desc = property->is_static() ? static_desc : instance_desc; if (property->is_computed_name()) { if (property->kind() != ClassLiteral::Property::FIELD) { @@ -678,7 +676,7 @@ Handle<ClassBoilerplate> ClassBoilerplate::BuildClassBoilerplate( continue; } - ObjectDescriptor<LocalIsolate>& desc = + ObjectDescriptor<IsolateT>& desc = property->is_static() ? static_desc : instance_desc; if (property->is_computed_name()) { int computed_name_index = dynamic_argument_index; diff --git a/deps/v8/src/objects/literal-objects.h b/deps/v8/src/objects/literal-objects.h index 3377bcd4c2..a20347c4a7 100644 --- a/deps/v8/src/objects/literal-objects.h +++ b/deps/v8/src/objects/literal-objects.h @@ -122,20 +122,20 @@ class ClassBoilerplate : public FixedArray { DECL_ACCESSORS(instance_elements_template, Object) DECL_ACCESSORS(instance_computed_properties, FixedArray) - template <typename LocalIsolate, typename Dictionary> - static void AddToPropertiesTemplate(LocalIsolate* isolate, + template <typename IsolateT, typename Dictionary> + static void AddToPropertiesTemplate(IsolateT* isolate, Handle<Dictionary> dictionary, Handle<Name> name, int key_index, ValueKind value_kind, Smi value); - template <typename LocalIsolate> - static void AddToElementsTemplate(LocalIsolate* isolate, + template <typename IsolateT> + static void AddToElementsTemplate(IsolateT* isolate, Handle<NumberDictionary> dictionary, uint32_t key, int key_index, ValueKind value_kind, Smi value); - template <typename LocalIsolate> - static Handle<ClassBoilerplate> BuildClassBoilerplate(LocalIsolate* isolate, + template <typename IsolateT> + static Handle<ClassBoilerplate> BuildClassBoilerplate(IsolateT* isolate, ClassLiteral* expr); enum { diff --git a/deps/v8/src/objects/lookup-inl.h b/deps/v8/src/objects/lookup-inl.h index 5f2fbd4cc2..84a1627985 100644 --- a/deps/v8/src/objects/lookup-inl.h +++ b/deps/v8/src/objects/lookup-inl.h @@ -169,7 +169,8 @@ Handle<Name> LookupIterator::GetName() { bool LookupIterator::IsElement(JSReceiver object) const { return index_ <= JSObject::kMaxElementIndex || - (index_ != kInvalidIndex && object.map().has_typed_array_elements()); + (index_ != kInvalidIndex && + object.map().has_typed_array_or_rab_gsab_typed_array_elements()); } bool LookupIterator::is_dictionary_holder() const { @@ -209,7 +210,7 @@ bool LookupIterator::IsCacheableTransition() { // static void LookupIterator::UpdateProtector(Isolate* isolate, Handle<Object> receiver, Handle<Name> name) { - RuntimeCallTimerScope scope(isolate, RuntimeCallCounterId::kUpdateProtector); + RCS_SCOPE(isolate, RuntimeCallCounterId::kUpdateProtector); // This list must be kept in sync with // CodeStubAssembler::CheckForAssociatedProtector! diff --git a/deps/v8/src/objects/lookup.cc b/deps/v8/src/objects/lookup.cc index d81d005933..8f8c6081df 100644 --- a/deps/v8/src/objects/lookup.cc +++ b/deps/v8/src/objects/lookup.cc @@ -15,6 +15,7 @@ #include "src/objects/field-type.h" #include "src/objects/hash-table-inl.h" #include "src/objects/heap-number-inl.h" +#include "src/objects/map-updater.h" #include "src/objects/ordered-hash-table.h" #include "src/objects/struct-inl.h" @@ -471,7 +472,7 @@ void LookupIterator::ReconfigureDataProperty(Handle<Object> value, Handle<Map> old_map(holder_obj->map(isolate_), isolate_); // Force mutable to avoid changing constant value by reconfiguring // kData -> kAccessor -> kData. - Handle<Map> new_map = Map::ReconfigureExistingProperty( + Handle<Map> new_map = MapUpdater::ReconfigureExistingProperty( isolate_, old_map, descriptor_number(), i::kData, attributes, PropertyConstness::kMutable); if (!new_map->is_dictionary_map()) { @@ -487,11 +488,15 @@ void LookupIterator::ReconfigureDataProperty(Handle<Object> value, if (!IsElement(*holder) && !holder_obj->HasFastProperties(isolate_)) { if (holder_obj->map(isolate_).is_prototype_map() && - (property_details_.attributes() & READ_ONLY) == 0 && - (attributes & READ_ONLY) != 0) { + (((property_details_.attributes() & READ_ONLY) == 0 && + (attributes & READ_ONLY) != 0) || + (property_details_.attributes() & DONT_ENUM) != + (attributes & DONT_ENUM))) { // Invalidate prototype validity cell when a property is reconfigured // from writable to read-only as this may invalidate transitioning store // IC handlers. + // Invalidate prototype validity cell when a property changes + // enumerability to clear the prototype chain enum cache. JSObject::InvalidatePrototypeChains(holder->map(isolate_)); } if (holder_obj->IsJSGlobalObject(isolate_)) { @@ -688,10 +693,10 @@ void LookupIterator::Delete() { } else { DCHECK(!name()->IsPrivateName(isolate_)); bool is_prototype_map = holder->map(isolate_).is_prototype_map(); - RuntimeCallTimerScope stats_scope( - isolate_, is_prototype_map - ? RuntimeCallCounterId::kPrototypeObject_DeleteProperty - : RuntimeCallCounterId::kObject_DeleteProperty); + RCS_SCOPE(isolate_, + is_prototype_map + ? RuntimeCallCounterId::kPrototypeObject_DeleteProperty + : RuntimeCallCounterId::kObject_DeleteProperty); PropertyNormalizationMode mode = is_prototype_map ? KEEP_INOBJECT_PROPERTIES : CLEAR_INOBJECT_PROPERTIES; @@ -1026,7 +1031,9 @@ void LookupIterator::WriteDataValue(Handle<Object> value, GlobalDictionary dictionary = JSGlobalObject::cast(*holder).global_dictionary(isolate_, kAcquireLoad); PropertyCell cell = dictionary.CellAt(isolate_, dictionary_entry()); - DCHECK_EQ(cell.value(), *value); + DCHECK(cell.value() == *value || + (cell.value().IsString() && value->IsString() && + String::cast(cell.value()).Equals(String::cast(*value)))); #endif // DEBUG } else { DCHECK_IMPLIES(holder->IsJSProxy(isolate_), name()->IsPrivate(isolate_)); @@ -1247,13 +1254,13 @@ bool LookupIterator::LookupCachedProperty(Handle<AccessorPair> accessor_pair) { DCHECK_EQ(state(), LookupIterator::ACCESSOR); DCHECK(GetAccessors()->IsAccessorPair(isolate_)); - Handle<Object> getter(accessor_pair->getter(isolate_), isolate()); - MaybeHandle<Name> maybe_name = - FunctionTemplateInfo::TryGetCachedPropertyName(isolate(), getter); - if (maybe_name.is_null()) return false; + base::Optional<Name> maybe_name = + FunctionTemplateInfo::TryGetCachedPropertyName( + isolate(), accessor_pair->getter(isolate_)); + if (!maybe_name.has_value()) return false; // We have found a cached property! Modify the iterator accordingly. - name_ = maybe_name.ToHandleChecked(); + name_ = handle(maybe_name.value(), isolate_); Restart(); CHECK_EQ(state(), LookupIterator::DATA); return true; @@ -1357,7 +1364,7 @@ ConcurrentLookupIterator::TryGetOwnConstantElement( // The access guard below protects only internalized string accesses. // TODO(jgruber): Support other string kinds. - Map wrapped_string_map = wrapped_string.synchronized_map(isolate); + Map wrapped_string_map = wrapped_string.map(isolate, kAcquireLoad); if (!InstanceTypeChecker::IsInternalizedString( wrapped_string_map.instance_type())) { return kGaveUp; diff --git a/deps/v8/src/objects/map-inl.h b/deps/v8/src/objects/map-inl.h index eb28f0b111..96626f28eb 100644 --- a/deps/v8/src/objects/map-inl.h +++ b/deps/v8/src/objects/map-inl.h @@ -90,19 +90,21 @@ BIT_FIELD_ACCESSORS(Map, bit_field2, is_immutable_proto, Map::Bits2::IsImmutablePrototypeBit) // |bit_field3| fields. -BIT_FIELD_ACCESSORS(Map, bit_field3, owns_descriptors, +BIT_FIELD_ACCESSORS(Map, relaxed_bit_field3, owns_descriptors, Map::Bits3::OwnsDescriptorsBit) -BIT_FIELD_ACCESSORS(Map, bit_field3, is_deprecated, Map::Bits3::IsDeprecatedBit) -BIT_FIELD_ACCESSORS(Map, bit_field3, is_in_retained_map_list, +BIT_FIELD_ACCESSORS(Map, release_acquire_bit_field3, is_deprecated, + Map::Bits3::IsDeprecatedBit) +BIT_FIELD_ACCESSORS(Map, relaxed_bit_field3, is_in_retained_map_list, Map::Bits3::IsInRetainedMapListBit) -BIT_FIELD_ACCESSORS(Map, bit_field3, is_prototype_map, +BIT_FIELD_ACCESSORS(Map, release_acquire_bit_field3, is_prototype_map, Map::Bits3::IsPrototypeMapBit) -BIT_FIELD_ACCESSORS(Map, bit_field3, is_migration_target, +BIT_FIELD_ACCESSORS(Map, relaxed_bit_field3, is_migration_target, Map::Bits3::IsMigrationTargetBit) -BIT_FIELD_ACCESSORS(Map, bit_field3, is_extensible, Map::Bits3::IsExtensibleBit) +BIT_FIELD_ACCESSORS2(Map, relaxed_bit_field3, bit_field3, is_extensible, + Map::Bits3::IsExtensibleBit) BIT_FIELD_ACCESSORS(Map, bit_field3, may_have_interesting_symbols, Map::Bits3::MayHaveInterestingSymbolsBit) -BIT_FIELD_ACCESSORS(Map, bit_field3, construction_counter, +BIT_FIELD_ACCESSORS(Map, relaxed_bit_field3, construction_counter, Map::Bits3::ConstructionCounterBits) DEF_GETTER(Map, GetNamedInterceptor, InterceptorInfo) { @@ -117,11 +119,18 @@ DEF_GETTER(Map, GetIndexedInterceptor, InterceptorInfo) { return InterceptorInfo::cast(info.GetIndexedPropertyHandler(cage_base)); } +// static bool Map::IsMostGeneralFieldType(Representation representation, FieldType field_type) { return !representation.IsHeapObject() || field_type.IsAny(); } +// static +bool Map::FieldTypeIsCleared(Representation rep, FieldType type) { + return type.IsNone() && rep.IsHeapObject(); +} + +// static bool Map::CanHaveFastTransitionableElementsKind(InstanceType instance_type) { return instance_type == JS_ARRAY_TYPE || instance_type == JS_PRIMITIVE_WRAPPER_TYPE || @@ -196,14 +205,15 @@ InternalIndex Map::LastAdded() const { } int Map::NumberOfOwnDescriptors() const { - return Bits3::NumberOfOwnDescriptorsBits::decode(bit_field3()); + return Bits3::NumberOfOwnDescriptorsBits::decode( + release_acquire_bit_field3()); } void Map::SetNumberOfOwnDescriptors(int number) { DCHECK_LE(number, instance_descriptors().number_of_descriptors()); CHECK_LE(static_cast<unsigned>(number), static_cast<unsigned>(kMaxNumberOfDescriptors)); - set_bit_field3( + set_release_acquire_bit_field3( Bits3::NumberOfOwnDescriptorsBits::update(bit_field3(), number)); } @@ -221,7 +231,7 @@ void Map::SetEnumLength(int length) { CHECK_LE(static_cast<unsigned>(length), static_cast<unsigned>(kMaxNumberOfDescriptors)); } - set_bit_field3(Bits3::EnumLengthBits::update(bit_field3(), length)); + set_relaxed_bit_field3(Bits3::EnumLengthBits::update(bit_field3(), length)); } FixedArrayBase Map::GetInitialElements() const { @@ -229,7 +239,7 @@ FixedArrayBase Map::GetInitialElements() const { if (has_fast_elements() || has_fast_string_wrapper_elements() || has_any_nonextensible_elements()) { result = GetReadOnlyRoots().empty_fixed_array(); - } else if (has_typed_array_elements()) { + } else if (has_typed_array_or_rab_gsab_typed_array_elements()) { result = GetReadOnlyRoots().empty_byte_array(); } else if (has_dictionary_elements()) { result = GetReadOnlyRoots().empty_slow_element_dictionary(); @@ -271,16 +281,28 @@ void Map::set_instance_size(int value) { } int Map::inobject_properties_start_or_constructor_function_index() const { - return RELAXED_READ_BYTE_FIELD( - *this, kInObjectPropertiesStartOrConstructorFunctionIndexOffset); + if (V8_CONCURRENT_MARKING_BOOL) { + // TODO(solanes, v8:7790, v8:11353): Make this and the setter non-atomic + // when TSAN sees the map's store synchronization. + return RELAXED_READ_BYTE_FIELD( + *this, kInObjectPropertiesStartOrConstructorFunctionIndexOffset); + } else { + return ReadField<byte>( + kInObjectPropertiesStartOrConstructorFunctionIndexOffset); + } } void Map::set_inobject_properties_start_or_constructor_function_index( int value) { CHECK_LT(static_cast<unsigned>(value), 256); - RELAXED_WRITE_BYTE_FIELD( - *this, kInObjectPropertiesStartOrConstructorFunctionIndexOffset, - static_cast<byte>(value)); + if (V8_CONCURRENT_MARKING_BOOL) { + RELAXED_WRITE_BYTE_FIELD( + *this, kInObjectPropertiesStartOrConstructorFunctionIndexOffset, + static_cast<byte>(value)); + } else { + WriteField<byte>(kInObjectPropertiesStartOrConstructorFunctionIndexOffset, + static_cast<byte>(value)); + } } int Map::GetInObjectPropertiesStartInWords() const { @@ -318,15 +340,23 @@ Handle<Map> Map::AddMissingTransitionsForTesting( return AddMissingTransitions(isolate, split_map, descriptors); } -// TODO(solanes, v8:7790, v8:11353): Make the instance_type accessors non-atomic -// when TSAN sees the map's store synchronization. InstanceType Map::instance_type() const { - return static_cast<InstanceType>( - RELAXED_READ_UINT16_FIELD(*this, kInstanceTypeOffset)); + if (V8_CONCURRENT_MARKING_BOOL) { + // TODO(solanes, v8:7790, v8:11353): Make this and the setter non-atomic + // when TSAN sees the map's store synchronization. + return static_cast<InstanceType>( + RELAXED_READ_UINT16_FIELD(*this, kInstanceTypeOffset)); + } else { + return static_cast<InstanceType>(ReadField<uint16_t>(kInstanceTypeOffset)); + } } void Map::set_instance_type(InstanceType value) { - RELAXED_WRITE_UINT16_FIELD(*this, kInstanceTypeOffset, value); + if (V8_CONCURRENT_MARKING_BOOL) { + RELAXED_WRITE_UINT16_FIELD(*this, kInstanceTypeOffset, value); + } else { + WriteField<uint16_t>(kInstanceTypeOffset, value); + } } int Map::UnusedPropertyFields() const { @@ -451,7 +481,13 @@ void Map::AccountAddedOutOfObjectPropertyField(int unused_in_property_array) { byte Map::bit_field() const { return ReadField<byte>(kBitFieldOffset); } void Map::set_bit_field(byte value) { - WriteField<byte>(kBitFieldOffset, value); + if (V8_CONCURRENT_MARKING_BOOL) { + // TODO(solanes, v8:7790, v8:11353): Make this non-atomic when TSAN sees the + // map's store synchronization. + set_relaxed_bit_field(value); + } else { + WriteField<byte>(kBitFieldOffset, value); + } } byte Map::relaxed_bit_field() const { @@ -468,6 +504,40 @@ void Map::set_bit_field2(byte value) { WriteField<byte>(kBitField2Offset, value); } +uint32_t Map::bit_field3() const { + if (V8_CONCURRENT_MARKING_BOOL) { + // TODO(solanes, v8:7790, v8:11353): Make this and the setter non-atomic + // when TSAN sees the map's store synchronization. + return relaxed_bit_field3(); + } else { + return ReadField<uint32_t>(kBitField3Offset); + } +} + +void Map::set_bit_field3(uint32_t value) { + if (V8_CONCURRENT_MARKING_BOOL) { + set_relaxed_bit_field3(value); + } else { + WriteField<uint32_t>(kBitField3Offset, value); + } +} + +uint32_t Map::relaxed_bit_field3() const { + return RELAXED_READ_UINT32_FIELD(*this, kBitField3Offset); +} + +void Map::set_relaxed_bit_field3(uint32_t value) { + RELAXED_WRITE_UINT32_FIELD(*this, kBitField3Offset, value); +} + +uint32_t Map::release_acquire_bit_field3() const { + return ACQUIRE_READ_UINT32_FIELD(*this, kBitField3Offset); +} + +void Map::set_release_acquire_bit_field3(uint32_t value) { + RELEASE_WRITE_UINT32_FIELD(*this, kBitField3Offset, value); +} + bool Map::is_abandoned_prototype_map() const { return is_prototype_map() && !owns_descriptors(); } @@ -523,6 +593,14 @@ bool Map::has_typed_array_elements() const { return IsTypedArrayElementsKind(elements_kind()); } +bool Map::has_rab_gsab_typed_array_elements() const { + return IsRabGsabTypedArrayElementsKind(elements_kind()); +} + +bool Map::has_typed_array_or_rab_gsab_typed_array_elements() const { + return IsTypedArrayOrRabGsabTypedArrayElementsKind(elements_kind()); +} + bool Map::has_dictionary_elements() const { return IsDictionaryElementsKind(elements_kind()); } @@ -551,15 +629,16 @@ void Map::set_is_dictionary_map(bool value) { } bool Map::is_dictionary_map() const { - return Bits3::IsDictionaryMapBit::decode(bit_field3()); + return Bits3::IsDictionaryMapBit::decode(relaxed_bit_field3()); } void Map::mark_unstable() { - set_bit_field3(Bits3::IsUnstableBit::update(bit_field3(), true)); + set_release_acquire_bit_field3( + Bits3::IsUnstableBit::update(bit_field3(), true)); } bool Map::is_stable() const { - return !Bits3::IsUnstableBit::decode(bit_field3()); + return !Bits3::IsUnstableBit::decode(release_acquire_bit_field3()); } bool Map::CanBeDeprecated() const { @@ -616,14 +695,6 @@ void Map::InitializeDescriptors(Isolate* isolate, DescriptorArray descriptors) { descriptors.number_of_descriptors()); } -void Map::set_bit_field3(uint32_t bits) { - RELEASE_WRITE_UINT32_FIELD(*this, kBitField3Offset, bits); -} - -uint32_t Map::bit_field3() const { - return ACQUIRE_READ_UINT32_FIELD(*this, kBitField3Offset); -} - void Map::clear_padding() { if (FIELD_SIZE(kOptionalPaddingOffset) == 0) return; DCHECK_EQ(4, FIELD_SIZE(kOptionalPaddingOffset)); @@ -698,6 +769,9 @@ ACCESSORS_CHECKED2(Map, constructor_or_back_pointer, Object, ACCESSORS_CHECKED(Map, native_context, NativeContext, kConstructorOrBackPointerOrNativeContextOffset, IsContextMap()) +ACCESSORS_CHECKED(Map, native_context_or_null, Object, + kConstructorOrBackPointerOrNativeContextOffset, + (value.IsNull() || value.IsNativeContext()) && IsContextMap()) #if V8_ENABLE_WEBASSEMBLY ACCESSORS_CHECKED(Map, wasm_type_info, WasmTypeInfo, kConstructorOrBackPointerOrNativeContextOffset, diff --git a/deps/v8/src/objects/map-updater.cc b/deps/v8/src/objects/map-updater.cc index 8ab15451a7..feb060fa51 100644 --- a/deps/v8/src/objects/map-updater.cc +++ b/deps/v8/src/objects/map-updater.cc @@ -4,6 +4,10 @@ #include "src/objects/map-updater.h" +#include <queue> + +#include "src/base/platform/mutex.h" +#include "src/execution/frames.h" #include "src/execution/isolate.h" #include "src/handles/handles.h" #include "src/objects/field-type.h" @@ -23,6 +27,66 @@ inline bool EqualImmutableValues(Object obj1, Object obj2) { return false; } +V8_WARN_UNUSED_RESULT Handle<FieldType> GeneralizeFieldType( + Representation rep1, Handle<FieldType> type1, Representation rep2, + Handle<FieldType> type2, Isolate* isolate) { + // Cleared field types need special treatment. They represent lost knowledge, + // so we must be conservative, so their generalization with any other type + // is "Any". + if (Map::FieldTypeIsCleared(rep1, *type1) || + Map::FieldTypeIsCleared(rep2, *type2)) { + return FieldType::Any(isolate); + } + if (type1->NowIs(type2)) return type2; + if (type2->NowIs(type1)) return type1; + return FieldType::Any(isolate); +} + +void PrintGeneralization( + Isolate* isolate, Handle<Map> map, FILE* file, const char* reason, + InternalIndex modify_index, int split, int descriptors, + bool descriptor_to_field, Representation old_representation, + Representation new_representation, PropertyConstness old_constness, + PropertyConstness new_constness, MaybeHandle<FieldType> old_field_type, + MaybeHandle<Object> old_value, MaybeHandle<FieldType> new_field_type, + MaybeHandle<Object> new_value) { + OFStream os(file); + os << "[generalizing]"; + Name name = map->instance_descriptors(isolate).GetKey(modify_index); + if (name.IsString()) { + String::cast(name).PrintOn(file); + } else { + os << "{symbol " << reinterpret_cast<void*>(name.ptr()) << "}"; + } + os << ":"; + if (descriptor_to_field) { + os << "c"; + } else { + os << old_representation.Mnemonic() << "{"; + if (old_field_type.is_null()) { + os << Brief(*(old_value.ToHandleChecked())); + } else { + old_field_type.ToHandleChecked()->PrintTo(os); + } + os << ";" << old_constness << "}"; + } + os << "->" << new_representation.Mnemonic() << "{"; + if (new_field_type.is_null()) { + os << Brief(*(new_value.ToHandleChecked())); + } else { + new_field_type.ToHandleChecked()->PrintTo(os); + } + os << ";" << new_constness << "} ("; + if (strlen(reason) > 0) { + os << reason; + } else { + os << "+" << (descriptors - split) << " maps"; + } + os << ") ["; + JavaScriptFrame::PrintTop(isolate, file, false, true); + os << "]\n"; +} + } // namespace MapUpdater::MapUpdater(Isolate* isolate, Handle<Map> old_map) @@ -142,8 +206,8 @@ Handle<Map> MapUpdater::ReconfigureToDataField(InternalIndex descriptor, old_details.location(), new_representation_); new_field_type_ = - Map::GeneralizeFieldType(old_representation, old_field_type, - new_representation_, field_type, isolate_); + GeneralizeFieldType(old_representation, old_field_type, + new_representation_, field_type, isolate_); } else { // We don't know if this is a first property kind reconfiguration // and we don't know which value was in this property previously @@ -222,8 +286,8 @@ void MapUpdater::GeneralizeField(Handle<Map> map, InternalIndex modify_index, PropertyConstness new_constness, Representation new_representation, Handle<FieldType> new_field_type) { - Map::GeneralizeField(isolate_, map, modify_index, new_constness, - new_representation, new_field_type); + GeneralizeField(isolate_, map, modify_index, new_constness, + new_representation, new_field_type); DCHECK(*old_descriptors_ == old_map_->instance_descriptors(isolate_) || *old_descriptors_ == @@ -237,6 +301,23 @@ MapUpdater::State MapUpdater::Normalize(const char* reason) { return state_; // Done. } +void MapUpdater::ShrinkInstanceSize(base::SharedMutex* map_updater_access, + Map map, int slack) { + DCHECK_GE(slack, 0); +#ifdef DEBUG + int old_visitor_id = Map::GetVisitorId(map); + int new_unused = map.UnusedPropertyFields() - slack; +#endif + + { + base::SharedMutexGuard<base::kExclusive> mutex_guard(map_updater_access); + map.set_instance_size(map.InstanceSizeFromSlack(slack)); + } + map.set_construction_counter(Map::kNoSlackTracking); + DCHECK_EQ(old_visitor_id, Map::GetVisitorId(map)); + DCHECK_EQ(new_unused, map.UnusedPropertyFields()); +} + MapUpdater::State MapUpdater::TryReconfigureToDataFieldInplace() { // Updating deprecated maps in-place doesn't make sense. if (old_map_->is_deprecated()) return state_; @@ -262,9 +343,9 @@ MapUpdater::State MapUpdater::TryReconfigureToDataFieldInplace() { DCHECK_EQ(new_attributes_, old_details.attributes()); DCHECK_EQ(kField, old_details.location()); if (FLAG_trace_generalization) { - old_map_->PrintGeneralization( - isolate_, stdout, "uninitialized field", modified_descriptor_, old_nof_, - old_nof_, false, old_representation, new_representation_, + PrintGeneralization( + isolate_, old_map_, stdout, "uninitialized field", modified_descriptor_, + old_nof_, old_nof_, false, old_representation, new_representation_, old_details.constness(), new_constness_, handle(old_descriptors_->GetFieldType(modified_descriptor_), isolate_), MaybeHandle<Object>(), new_field_type_, MaybeHandle<Object>()); @@ -615,9 +696,9 @@ Handle<DescriptorArray> MapUpdater::BuildDescriptorArray() { GetOrComputeFieldType(target_descriptors, i, target_details.location(), next_representation); - Handle<FieldType> next_field_type = Map::GeneralizeFieldType( - old_details.representation(), old_field_type, next_representation, - target_field_type, isolate_); + Handle<FieldType> next_field_type = + GeneralizeFieldType(old_details.representation(), old_field_type, + next_representation, target_field_type, isolate_); Map::GeneralizeIfCanHaveTransitionableFastElementsKind( isolate_, instance_type, &next_representation, &next_field_type); @@ -795,8 +876,9 @@ MapUpdater::State MapUpdater::ConstructNewMap() { isolate_); } - old_map_->PrintGeneralization( - isolate_, stdout, "", modified_descriptor_, split_nof, old_nof_, + PrintGeneralization( + isolate_, old_map_, stdout, "", modified_descriptor_, split_nof, + old_nof_, old_details.location() == kDescriptor && new_location_ == kField, old_details.representation(), new_details.representation(), old_details.constness(), new_details.constness(), old_field_type, @@ -840,5 +922,179 @@ MapUpdater::State MapUpdater::ConstructNewMapWithIntegrityLevelTransition() { return state_; } +namespace { + +void PrintReconfiguration(Isolate* isolate, Handle<Map> map, FILE* file, + InternalIndex modify_index, PropertyKind kind, + PropertyAttributes attributes) { + OFStream os(file); + os << "[reconfiguring]"; + Name name = map->instance_descriptors(isolate).GetKey(modify_index); + if (name.IsString()) { + String::cast(name).PrintOn(file); + } else { + os << "{symbol " << reinterpret_cast<void*>(name.ptr()) << "}"; + } + os << ": " << (kind == kData ? "kData" : "ACCESSORS") << ", attrs: "; + os << attributes << " ["; + JavaScriptFrame::PrintTop(isolate, file, false, true); + os << "]\n"; +} + +} // namespace + +// static +Handle<Map> MapUpdater::ReconfigureExistingProperty( + Isolate* isolate, Handle<Map> map, InternalIndex descriptor, + PropertyKind kind, PropertyAttributes attributes, + PropertyConstness constness) { + // Dictionaries have to be reconfigured in-place. + DCHECK(!map->is_dictionary_map()); + DCHECK_EQ(kData, kind); // Only kData case is supported so far. + + if (!map->GetBackPointer().IsMap()) { + // There is no benefit from reconstructing transition tree for maps without + // back pointers, normalize and try to hit the map cache instead. + return Map::Normalize(isolate, map, CLEAR_INOBJECT_PROPERTIES, + "Normalize_AttributesMismatchProtoMap"); + } + + if (FLAG_trace_generalization) { + PrintReconfiguration(isolate, map, stdout, descriptor, kind, attributes); + } + + return MapUpdater{isolate, map}.ReconfigureToDataField( + descriptor, attributes, constness, Representation::None(), + FieldType::None(isolate)); +} + +// static +void MapUpdater::UpdateFieldType(Isolate* isolate, Handle<Map> map, + InternalIndex descriptor, Handle<Name> name, + PropertyConstness new_constness, + Representation new_representation, + const MaybeObjectHandle& new_wrapped_type) { + DCHECK(new_wrapped_type->IsSmi() || new_wrapped_type->IsWeak()); + // We store raw pointers in the queue, so no allocations are allowed. + DisallowGarbageCollection no_gc; + PropertyDetails details = + map->instance_descriptors(isolate).GetDetails(descriptor); + if (details.location() != kField) return; + DCHECK_EQ(kData, details.kind()); + + if (new_constness != details.constness() && map->is_prototype_map()) { + JSObject::InvalidatePrototypeChains(*map); + } + + std::queue<Map> backlog; + backlog.push(*map); + + while (!backlog.empty()) { + Map current = backlog.front(); + backlog.pop(); + + TransitionsAccessor transitions(isolate, current, &no_gc); + int num_transitions = transitions.NumberOfTransitions(); + for (int i = 0; i < num_transitions; ++i) { + Map target = transitions.GetTarget(i); + backlog.push(target); + } + DescriptorArray descriptors = current.instance_descriptors(isolate); + PropertyDetails details = descriptors.GetDetails(descriptor); + + // It is allowed to change representation here only from None + // to something or from Smi or HeapObject to Tagged. + DCHECK(details.representation().Equals(new_representation) || + details.representation().CanBeInPlaceChangedTo(new_representation)); + + // Skip if already updated the shared descriptor. + if (new_constness != details.constness() || + !new_representation.Equals(details.representation()) || + descriptors.GetFieldType(descriptor) != *new_wrapped_type.object()) { + Descriptor d = Descriptor::DataField( + name, descriptors.GetFieldIndex(descriptor), details.attributes(), + new_constness, new_representation, new_wrapped_type); + descriptors.Replace(descriptor, &d); + } + } +} + +// TODO(jgruber): Lock the map-updater mutex. +// static +void MapUpdater::GeneralizeField(Isolate* isolate, Handle<Map> map, + InternalIndex modify_index, + PropertyConstness new_constness, + Representation new_representation, + Handle<FieldType> new_field_type) { + DCHECK(!map->is_deprecated()); + + // Check if we actually need to generalize the field type at all. + Handle<DescriptorArray> old_descriptors(map->instance_descriptors(isolate), + isolate); + PropertyDetails old_details = old_descriptors->GetDetails(modify_index); + PropertyConstness old_constness = old_details.constness(); + Representation old_representation = old_details.representation(); + Handle<FieldType> old_field_type(old_descriptors->GetFieldType(modify_index), + isolate); + + // Return if the current map is general enough to hold requested constness and + // representation/field type. + if (IsGeneralizableTo(new_constness, old_constness) && + old_representation.Equals(new_representation) && + !Map::FieldTypeIsCleared(new_representation, *new_field_type) && + // Checking old_field_type for being cleared is not necessary because + // the NowIs check below would fail anyway in that case. + new_field_type->NowIs(old_field_type)) { + DCHECK(GeneralizeFieldType(old_representation, old_field_type, + new_representation, new_field_type, isolate) + ->NowIs(old_field_type)); + return; + } + + // Determine the field owner. + Handle<Map> field_owner(map->FindFieldOwner(isolate, modify_index), isolate); + Handle<DescriptorArray> descriptors( + field_owner->instance_descriptors(isolate), isolate); + DCHECK_EQ(*old_field_type, descriptors->GetFieldType(modify_index)); + + new_field_type = + GeneralizeFieldType(old_representation, old_field_type, + new_representation, new_field_type, isolate); + + new_constness = GeneralizeConstness(old_constness, new_constness); + + PropertyDetails details = descriptors->GetDetails(modify_index); + Handle<Name> name(descriptors->GetKey(modify_index), isolate); + + MaybeObjectHandle wrapped_type(Map::WrapFieldType(isolate, new_field_type)); + UpdateFieldType(isolate, field_owner, modify_index, name, new_constness, + new_representation, wrapped_type); + + if (new_constness != old_constness) { + field_owner->dependent_code().DeoptimizeDependentCodeGroup( + DependentCode::kFieldConstGroup); + } + + if (!new_field_type->Equals(*old_field_type)) { + field_owner->dependent_code().DeoptimizeDependentCodeGroup( + DependentCode::kFieldTypeGroup); + } + + if (!new_representation.Equals(old_representation)) { + field_owner->dependent_code().DeoptimizeDependentCodeGroup( + DependentCode::kFieldRepresentationGroup); + } + + if (FLAG_trace_generalization) { + PrintGeneralization( + isolate, map, stdout, "field type generalization", modify_index, + map->NumberOfOwnDescriptors(), map->NumberOfOwnDescriptors(), false, + details.representation(), + descriptors->GetDetails(modify_index).representation(), old_constness, + new_constness, old_field_type, MaybeHandle<Object>(), new_field_type, + MaybeHandle<Object>()); + } +} + } // namespace internal } // namespace v8 diff --git a/deps/v8/src/objects/map-updater.h b/deps/v8/src/objects/map-updater.h index 427ddc90e8..c901782bf1 100644 --- a/deps/v8/src/objects/map-updater.h +++ b/deps/v8/src/objects/map-updater.h @@ -67,6 +67,22 @@ class V8_EXPORT_PRIVATE MapUpdater { // version and performs the steps 1-6. Handle<Map> Update(); + static Handle<Map> ReconfigureExistingProperty(Isolate* isolate, + Handle<Map> map, + InternalIndex descriptor, + PropertyKind kind, + PropertyAttributes attributes, + PropertyConstness constness); + + static void GeneralizeField(Isolate* isolate, Handle<Map> map, + InternalIndex modify_index, + PropertyConstness new_constness, + Representation new_representation, + Handle<FieldType> new_field_type); + + static void ShrinkInstanceSize(base::SharedMutex* map_updater_access, Map map, + int slack); + private: enum State { kInitialized, @@ -167,6 +183,16 @@ class V8_EXPORT_PRIVATE MapUpdater { Handle<DescriptorArray> descriptors, InternalIndex descriptor, PropertyLocation location, Representation representation); + // Update field type of the given descriptor to new representation and new + // type. The type must be prepared for storing in descriptor array: + // it must be either a simple type or a map wrapped in a weak cell. + static void UpdateFieldType(Isolate* isolate, Handle<Map> map, + InternalIndex descriptor_number, + Handle<Name> name, + PropertyConstness new_constness, + Representation new_representation, + const MaybeObjectHandle& new_wrapped_type); + void GeneralizeField(Handle<Map> map, InternalIndex modify_index, PropertyConstness new_constness, Representation new_representation, diff --git a/deps/v8/src/objects/map.cc b/deps/v8/src/objects/map.cc index 0f281519b7..0857d7beea 100644 --- a/deps/v8/src/objects/map.cc +++ b/deps/v8/src/objects/map.cc @@ -10,7 +10,6 @@ #include "src/handles/maybe-handles.h" #include "src/heap/heap-write-barrier-inl.h" #include "src/init/bootstrapper.h" -#include "src/logging/counters-inl.h" #include "src/logging/log.h" #include "src/objects/arguments-inl.h" #include "src/objects/descriptor-array.h" @@ -46,34 +45,16 @@ Map Map::GetPrototypeChainRootMap(Isolate* isolate) const { } // static -MaybeHandle<JSFunction> Map::GetConstructorFunction( - Handle<Map> map, Handle<Context> native_context) { - if (map->IsPrimitiveMap()) { - int const constructor_function_index = map->GetConstructorFunctionIndex(); +base::Optional<JSFunction> Map::GetConstructorFunction(Map map, + Context native_context) { + DisallowGarbageCollection no_gc; + if (map.IsPrimitiveMap()) { + int const constructor_function_index = map.GetConstructorFunctionIndex(); if (constructor_function_index != kNoConstructorFunctionIndex) { - return handle( - JSFunction::cast(native_context->get(constructor_function_index)), - native_context->GetIsolate()); + return JSFunction::cast(native_context.get(constructor_function_index)); } } - return MaybeHandle<JSFunction>(); -} - -void Map::PrintReconfiguration(Isolate* isolate, FILE* file, - InternalIndex modify_index, PropertyKind kind, - PropertyAttributes attributes) { - OFStream os(file); - os << "[reconfiguring]"; - Name name = instance_descriptors(isolate).GetKey(modify_index); - if (name.IsString()) { - String::cast(name).PrintOn(file); - } else { - os << "{symbol " << reinterpret_cast<void*>(name.ptr()) << "}"; - } - os << ": " << (kind == kData ? "kData" : "ACCESSORS") << ", attrs: "; - os << attributes << " ["; - JavaScriptFrame::PrintTop(isolate, file, false, true); - os << "]\n"; + return {}; } Map Map::GetInstanceTypeMap(ReadOnlyRoots roots, InstanceType type) { @@ -373,6 +354,10 @@ VisitorId Map::GetVisitorId(Map map) { return kVisitWasmStruct; case WASM_TYPE_INFO_TYPE: return kVisitWasmTypeInfo; + case WASM_JS_FUNCTION_DATA_TYPE: + return kVisitWasmJSFunctionData; + case WASM_EXPORTED_FUNCTION_DATA_TYPE: + return kVisitWasmExportedFunctionData; #endif // V8_ENABLE_WEBASSEMBLY #define MAKE_TQ_CASE(TYPE, Name) \ @@ -386,51 +371,6 @@ VisitorId Map::GetVisitorId(Map map) { } } -void Map::PrintGeneralization( - Isolate* isolate, FILE* file, const char* reason, - InternalIndex modify_index, int split, int descriptors, - bool descriptor_to_field, Representation old_representation, - Representation new_representation, PropertyConstness old_constness, - PropertyConstness new_constness, MaybeHandle<FieldType> old_field_type, - MaybeHandle<Object> old_value, MaybeHandle<FieldType> new_field_type, - MaybeHandle<Object> new_value) { - OFStream os(file); - os << "[generalizing]"; - Name name = instance_descriptors(isolate).GetKey(modify_index); - if (name.IsString()) { - String::cast(name).PrintOn(file); - } else { - os << "{symbol " << reinterpret_cast<void*>(name.ptr()) << "}"; - } - os << ":"; - if (descriptor_to_field) { - os << "c"; - } else { - os << old_representation.Mnemonic() << "{"; - if (old_field_type.is_null()) { - os << Brief(*(old_value.ToHandleChecked())); - } else { - old_field_type.ToHandleChecked()->PrintTo(os); - } - os << ";" << old_constness << "}"; - } - os << "->" << new_representation.Mnemonic() << "{"; - if (new_field_type.is_null()) { - os << Brief(*(new_value.ToHandleChecked())); - } else { - new_field_type.ToHandleChecked()->PrintTo(os); - } - os << ";" << new_constness << "} ("; - if (strlen(reason) > 0) { - os << reason; - } else { - os << "+" << (descriptors - split) << " maps"; - } - os << ") ["; - JavaScriptFrame::PrintTop(isolate, file, false, true); - os << "]\n"; -} - // static MaybeObjectHandle Map::WrapFieldType(Isolate* isolate, Handle<FieldType> type) { if (type->IsClass()) { @@ -661,151 +601,6 @@ Map Map::FindFieldOwner(Isolate* isolate, InternalIndex descriptor) const { return result; } -void Map::UpdateFieldType(Isolate* isolate, InternalIndex descriptor, - Handle<Name> name, PropertyConstness new_constness, - Representation new_representation, - const MaybeObjectHandle& new_wrapped_type) { - DCHECK(new_wrapped_type->IsSmi() || new_wrapped_type->IsWeak()); - // We store raw pointers in the queue, so no allocations are allowed. - DisallowGarbageCollection no_gc; - PropertyDetails details = - instance_descriptors(isolate).GetDetails(descriptor); - if (details.location() != kField) return; - DCHECK_EQ(kData, details.kind()); - - if (new_constness != details.constness() && is_prototype_map()) { - JSObject::InvalidatePrototypeChains(*this); - } - - Zone zone(isolate->allocator(), ZONE_NAME); - ZoneQueue<Map> backlog(&zone); - backlog.push(*this); - - while (!backlog.empty()) { - Map current = backlog.front(); - backlog.pop(); - - TransitionsAccessor transitions(isolate, current, &no_gc); - int num_transitions = transitions.NumberOfTransitions(); - for (int i = 0; i < num_transitions; ++i) { - Map target = transitions.GetTarget(i); - backlog.push(target); - } - DescriptorArray descriptors = current.instance_descriptors(isolate); - PropertyDetails details = descriptors.GetDetails(descriptor); - - // It is allowed to change representation here only from None - // to something or from Smi or HeapObject to Tagged. - DCHECK(details.representation().Equals(new_representation) || - details.representation().CanBeInPlaceChangedTo(new_representation)); - - // Skip if already updated the shared descriptor. - if (new_constness != details.constness() || - !new_representation.Equals(details.representation()) || - descriptors.GetFieldType(descriptor) != *new_wrapped_type.object()) { - Descriptor d = Descriptor::DataField( - name, descriptors.GetFieldIndex(descriptor), details.attributes(), - new_constness, new_representation, new_wrapped_type); - descriptors.Replace(descriptor, &d); - } - } -} - -bool FieldTypeIsCleared(Representation rep, FieldType type) { - return type.IsNone() && rep.IsHeapObject(); -} - -// static -Handle<FieldType> Map::GeneralizeFieldType(Representation rep1, - Handle<FieldType> type1, - Representation rep2, - Handle<FieldType> type2, - Isolate* isolate) { - // Cleared field types need special treatment. They represent lost knowledge, - // so we must be conservative, so their generalization with any other type - // is "Any". - if (FieldTypeIsCleared(rep1, *type1) || FieldTypeIsCleared(rep2, *type2)) { - return FieldType::Any(isolate); - } - if (type1->NowIs(type2)) return type2; - if (type2->NowIs(type1)) return type1; - return FieldType::Any(isolate); -} - -// static -void Map::GeneralizeField(Isolate* isolate, Handle<Map> map, - InternalIndex modify_index, - PropertyConstness new_constness, - Representation new_representation, - Handle<FieldType> new_field_type) { - // Check if we actually need to generalize the field type at all. - Handle<DescriptorArray> old_descriptors(map->instance_descriptors(isolate), - isolate); - PropertyDetails old_details = old_descriptors->GetDetails(modify_index); - PropertyConstness old_constness = old_details.constness(); - Representation old_representation = old_details.representation(); - Handle<FieldType> old_field_type(old_descriptors->GetFieldType(modify_index), - isolate); - - // Return if the current map is general enough to hold requested constness and - // representation/field type. - if (IsGeneralizableTo(new_constness, old_constness) && - old_representation.Equals(new_representation) && - !FieldTypeIsCleared(new_representation, *new_field_type) && - // Checking old_field_type for being cleared is not necessary because - // the NowIs check below would fail anyway in that case. - new_field_type->NowIs(old_field_type)) { - DCHECK(GeneralizeFieldType(old_representation, old_field_type, - new_representation, new_field_type, isolate) - ->NowIs(old_field_type)); - return; - } - - // Determine the field owner. - Handle<Map> field_owner(map->FindFieldOwner(isolate, modify_index), isolate); - Handle<DescriptorArray> descriptors( - field_owner->instance_descriptors(isolate), isolate); - DCHECK_EQ(*old_field_type, descriptors->GetFieldType(modify_index)); - - new_field_type = - Map::GeneralizeFieldType(old_representation, old_field_type, - new_representation, new_field_type, isolate); - - new_constness = GeneralizeConstness(old_constness, new_constness); - - PropertyDetails details = descriptors->GetDetails(modify_index); - Handle<Name> name(descriptors->GetKey(modify_index), isolate); - - MaybeObjectHandle wrapped_type(WrapFieldType(isolate, new_field_type)); - field_owner->UpdateFieldType(isolate, modify_index, name, new_constness, - new_representation, wrapped_type); - - if (new_constness != old_constness) { - field_owner->dependent_code().DeoptimizeDependentCodeGroup( - DependentCode::kFieldConstGroup); - } - - if (!new_field_type->Equals(*old_field_type)) { - field_owner->dependent_code().DeoptimizeDependentCodeGroup( - DependentCode::kFieldTypeGroup); - } - - if (!new_representation.Equals(old_representation)) { - field_owner->dependent_code().DeoptimizeDependentCodeGroup( - DependentCode::kFieldRepresentationGroup); - } - - if (FLAG_trace_generalization) { - map->PrintGeneralization( - isolate, stdout, "field type generalization", modify_index, - map->NumberOfOwnDescriptors(), map->NumberOfOwnDescriptors(), false, - details.representation(), - descriptors->GetDetails(modify_index).representation(), old_constness, - new_constness, old_field_type, MaybeHandle<Object>(), new_field_type, - MaybeHandle<Object>()); - } -} - namespace { Map SearchMigrationTarget(Isolate* isolate, Map old_map) { @@ -831,7 +626,7 @@ Map SearchMigrationTarget(Isolate* isolate, Map old_map) { PropertyDetails old_details = old_descriptors.GetDetails(i); if (old_details.location() == kField && old_details.kind() == kData) { FieldType old_type = old_descriptors.GetFieldType(i); - if (FieldTypeIsCleared(old_details.representation(), old_type)) { + if (Map::FieldTypeIsCleared(old_details.representation(), old_type)) { return Map(); } } @@ -1362,7 +1157,7 @@ int Map::NumberOfEnumerableProperties() const { int Map::NextFreePropertyIndex() const { int number_of_own_descriptors = NumberOfOwnDescriptors(); - DescriptorArray descs = instance_descriptors(); + DescriptorArray descs = instance_descriptors(kRelaxedLoad); // Search properties backwards to find the last field. for (int i = number_of_own_descriptors - 1; i >= 0; --i) { PropertyDetails details = descs.GetDetails(InternalIndex(i)); @@ -1418,9 +1213,7 @@ Handle<Map> Map::RawCopy(Isolate* isolate, Handle<Map> map, int instance_size, Handle<HeapObject> prototype(map->prototype(), isolate); Map::SetPrototype(isolate, result, prototype); result->set_constructor_or_back_pointer(map->GetConstructor()); - // TODO(solanes, v8:7790, v8:11353): set_relaxed_bit_field could be an atomic - // set if TSAN could see the transitions happening in StoreIC. - result->set_relaxed_bit_field(map->bit_field()); + result->set_bit_field(map->bit_field()); result->set_bit_field2(map->bit_field2()); int new_bit_field3 = map->bit_field3(); new_bit_field3 = Bits3::OwnsDescriptorsBit::update(new_bit_field3, true); @@ -1432,6 +1225,7 @@ Handle<Map> Map::RawCopy(Isolate* isolate, Handle<Map> map, int instance_size, if (!map->is_dictionary_map()) { new_bit_field3 = Bits3::IsUnstableBit::update(new_bit_field3, false); } + // Same as bit_field comment above. result->set_bit_field3(new_bit_field3); result->clear_padding(); return result; @@ -2075,11 +1869,10 @@ Handle<Map> Map::TransitionToDataProperty(Isolate* isolate, Handle<Map> map, PropertyAttributes attributes, PropertyConstness constness, StoreOrigin store_origin) { - RuntimeCallTimerScope stats_scope( - isolate, - map->IsDetached(isolate) - ? RuntimeCallCounterId::kPrototypeMap_TransitionToDataProperty - : RuntimeCallCounterId::kMap_TransitionToDataProperty); + RCS_SCOPE(isolate, + map->IsDetached(isolate) + ? RuntimeCallCounterId::kPrototypeMap_TransitionToDataProperty + : RuntimeCallCounterId::kMap_TransitionToDataProperty); DCHECK(name->IsUniqueName()); DCHECK(!map->is_dictionary_map()); @@ -2156,40 +1949,13 @@ Handle<Map> Map::TransitionToDataProperty(Isolate* isolate, Handle<Map> map, return result; } -Handle<Map> Map::ReconfigureExistingProperty(Isolate* isolate, Handle<Map> map, - InternalIndex descriptor, - PropertyKind kind, - PropertyAttributes attributes, - PropertyConstness constness) { - // Dictionaries have to be reconfigured in-place. - DCHECK(!map->is_dictionary_map()); - - if (!map->GetBackPointer().IsMap()) { - // There is no benefit from reconstructing transition tree for maps without - // back pointers, normalize and try to hit the map cache instead. - return Map::Normalize(isolate, map, CLEAR_INOBJECT_PROPERTIES, - "Normalize_AttributesMismatchProtoMap"); - } - - if (FLAG_trace_generalization) { - map->PrintReconfiguration(isolate, stdout, descriptor, kind, attributes); - } - - MapUpdater mu(isolate, map); - DCHECK_EQ(kData, kind); // Only kData case is supported so far. - Handle<Map> new_map = mu.ReconfigureToDataField( - descriptor, attributes, constness, Representation::None(), - FieldType::None(isolate)); - return new_map; -} - Handle<Map> Map::TransitionToAccessorProperty(Isolate* isolate, Handle<Map> map, Handle<Name> name, InternalIndex descriptor, Handle<Object> getter, Handle<Object> setter, PropertyAttributes attributes) { - RuntimeCallTimerScope stats_scope( + RCS_SCOPE( isolate, map->IsDetached(isolate) ? RuntimeCallCounterId::kPrototypeMap_TransitionToAccessorProperty @@ -2438,13 +2204,6 @@ bool Map::EquivalentToForNormalization(const Map other, JSObject::GetEmbedderFieldCount(other); } -static void GetMinInobjectSlack(Map map, void* data) { - int slack = map.UnusedPropertyFields(); - if (*reinterpret_cast<int*>(data) > slack) { - *reinterpret_cast<int*>(data) = slack; - } -} - int Map::ComputeMinObjectSlack(Isolate* isolate) { DisallowGarbageCollection no_gc; // Has to be an initial map. @@ -2452,27 +2211,13 @@ int Map::ComputeMinObjectSlack(Isolate* isolate) { int slack = UnusedPropertyFields(); TransitionsAccessor transitions(isolate, *this, &no_gc); - transitions.TraverseTransitionTree(&GetMinInobjectSlack, &slack); + TransitionsAccessor::TraverseCallback callback = [&](Map map) { + slack = std::min(slack, map.UnusedPropertyFields()); + }; + transitions.TraverseTransitionTree(callback); return slack; } -static void ShrinkInstanceSize(Map map, void* data) { - int slack = *reinterpret_cast<int*>(data); - DCHECK_GE(slack, 0); -#ifdef DEBUG - int old_visitor_id = Map::GetVisitorId(map); - int new_unused = map.UnusedPropertyFields() - slack; -#endif - map.set_instance_size(map.InstanceSizeFromSlack(slack)); - map.set_construction_counter(Map::kNoSlackTracking); - DCHECK_EQ(old_visitor_id, Map::GetVisitorId(map)); - DCHECK_EQ(new_unused, map.UnusedPropertyFields()); -} - -static void StopSlackTracking(Map map, void* data) { - map.set_construction_counter(Map::kNoSlackTracking); -} - void Map::CompleteInobjectSlackTracking(Isolate* isolate) { DisallowGarbageCollection no_gc; // Has to be an initial map. @@ -2480,12 +2225,19 @@ void Map::CompleteInobjectSlackTracking(Isolate* isolate) { int slack = ComputeMinObjectSlack(isolate); TransitionsAccessor transitions(isolate, *this, &no_gc); + TransitionsAccessor::TraverseCallback callback; if (slack != 0) { // Resize the initial map and all maps in its transition tree. - transitions.TraverseTransitionTree(&ShrinkInstanceSize, &slack); + callback = [&](Map map) { + MapUpdater::ShrinkInstanceSize(isolate->map_updater_access(), map, slack); + }; } else { - transitions.TraverseTransitionTree(&StopSlackTracking, nullptr); + callback = [](Map map) { + // Stop slack tracking for this map. + map.set_construction_counter(Map::kNoSlackTracking); + }; } + transitions.TraverseTransitionTree(callback); } void Map::SetInstanceDescriptors(Isolate* isolate, DescriptorArray descriptors, @@ -2583,8 +2335,7 @@ bool Map::IsPrototypeChainInvalidated(Map map) { void Map::SetPrototype(Isolate* isolate, Handle<Map> map, Handle<HeapObject> prototype, bool enable_prototype_setup_mode) { - RuntimeCallTimerScope stats_scope(isolate, - RuntimeCallCounterId::kMap_SetPrototype); + RCS_SCOPE(isolate, RuntimeCallCounterId::kMap_SetPrototype); if (prototype->IsJSObject()) { Handle<JSObject> prototype_jsobj = Handle<JSObject>::cast(prototype); diff --git a/deps/v8/src/objects/map.h b/deps/v8/src/objects/map.h index e31bb9a51f..83e5dfa365 100644 --- a/deps/v8/src/objects/map.h +++ b/deps/v8/src/objects/map.h @@ -68,9 +68,12 @@ enum InstanceType : uint16_t; V(Symbol) \ V(SyntheticModule) \ V(TransitionArray) \ + IF_WASM(V, WasmArray) \ + IF_WASM(V, WasmExportedFunctionData) \ + IF_WASM(V, WasmFunctionData) \ IF_WASM(V, WasmIndirectFunctionTable) \ IF_WASM(V, WasmInstanceObject) \ - IF_WASM(V, WasmArray) \ + IF_WASM(V, WasmJSFunctionData) \ IF_WASM(V, WasmStruct) \ IF_WASM(V, WasmTypeInfo) \ V(WeakCell) @@ -148,8 +151,7 @@ using MapHandles = std::vector<Handle<Map>>; // | Byte | [bit_field2] | // | | - new_target_is_base (bit 0) | // | | - is_immutable_proto (bit 1) | -// | | - unused bit (bit 2) | -// | | - elements_kind (bits 3..7) | +// | | - elements_kind (bits 2..7) | // +----+----------+-------------------------------------------------+ // | Int | [bit_field3] | // | | - enum_length (bit 0..9) | @@ -211,8 +213,8 @@ class Map : public HeapObject { static const int kNoConstructorFunctionIndex = 0; inline int GetConstructorFunctionIndex() const; inline void SetConstructorFunctionIndex(int value); - static MaybeHandle<JSFunction> GetConstructorFunction( - Handle<Map> map, Handle<Context> native_context); + static base::Optional<JSFunction> GetConstructorFunction( + Map map, Context native_context); // Retrieve interceptors. DECL_GETTER(GetNamedInterceptor, InterceptorInfo) @@ -244,7 +246,12 @@ class Map : public HeapObject { // // Bit field. // + // The setter in this pair calls the relaxed setter if concurrent marking is + // on, or performs the write non-atomically if it's off. The read is always + // non-atomically. This is done to have wider TSAN coverage on the cases where + // it's possible. DECL_PRIMITIVE_ACCESSORS(bit_field, byte) + // Atomic accessors, used for allowlisting legitimate concurrent accesses. DECL_PRIMITIVE_ACCESSORS(relaxed_bit_field, byte) @@ -266,8 +273,14 @@ class Map : public HeapObject { // // Bit field 3. // + // {bit_field3} calls the relaxed accessors if concurrent marking is on, or + // performs the read/write non-atomically if it's off. This is done to have + // wider TSAN coverage on the cases where it's possible. DECL_PRIMITIVE_ACCESSORS(bit_field3, uint32_t) + DECL_PRIMITIVE_ACCESSORS(relaxed_bit_field3, uint32_t) + DECL_PRIMITIVE_ACCESSORS(release_acquire_bit_field3, uint32_t) + // Clear uninitialized padding space. This ensures that the snapshot content // is deterministic. Depending on the V8 build mode there could be no padding. V8_INLINE void clear_padding(); @@ -402,6 +415,8 @@ class Map : public HeapObject { inline bool has_fast_sloppy_arguments_elements() const; inline bool has_fast_string_wrapper_elements() const; inline bool has_typed_array_elements() const; + inline bool has_rab_gsab_typed_array_elements() const; + inline bool has_typed_array_or_rab_gsab_typed_array_elements() const; inline bool has_dictionary_elements() const; inline bool has_any_nonextensible_elements() const; inline bool has_nonextensible_elements() const; @@ -488,18 +503,11 @@ class Map : public HeapObject { bool InstancesNeedRewriting(Map target, int target_number_of_fields, int target_inobject, int target_unused, int* old_number_of_fields) const; - V8_WARN_UNUSED_RESULT static Handle<FieldType> GeneralizeFieldType( - Representation rep1, Handle<FieldType> type1, Representation rep2, - Handle<FieldType> type2, Isolate* isolate); - static void GeneralizeField(Isolate* isolate, Handle<Map> map, - InternalIndex modify_index, - PropertyConstness new_constness, - Representation new_representation, - Handle<FieldType> new_field_type); // Returns true if the |field_type| is the most general one for // given |representation|. static inline bool IsMostGeneralFieldType(Representation representation, FieldType field_type); + static inline bool FieldTypeIsCleared(Representation rep, FieldType type); // Generalizes representation and field_type if objects with given // instance type can have fast elements that can be transitioned by @@ -554,6 +562,7 @@ class Map : public HeapObject { // and with the Wasm type info for WebAssembly object maps. DECL_ACCESSORS(constructor_or_back_pointer, Object) DECL_ACCESSORS(native_context, NativeContext) + DECL_ACCESSORS(native_context_or_null, Object) DECL_ACCESSORS(wasm_type_info, WasmTypeInfo) DECL_GETTER(GetConstructor, Object) DECL_GETTER(GetFunctionTemplateInfo, FunctionTemplateInfo) @@ -716,10 +725,6 @@ class Map : public HeapObject { Isolate* isolate, Handle<Map> map, Handle<Name> name, InternalIndex descriptor, Handle<Object> getter, Handle<Object> setter, PropertyAttributes attributes); - V8_EXPORT_PRIVATE static Handle<Map> ReconfigureExistingProperty( - Isolate* isolate, Handle<Map> map, InternalIndex descriptor, - PropertyKind kind, PropertyAttributes attributes, - PropertyConstness constness); inline void AppendDescriptor(Isolate* isolate, Descriptor* desc); @@ -912,28 +917,6 @@ class Map : public HeapObject { void ReplaceDescriptors(Isolate* isolate, DescriptorArray new_descriptors); - // Update field type of the given descriptor to new representation and new - // type. The type must be prepared for storing in descriptor array: - // it must be either a simple type or a map wrapped in a weak cell. - void UpdateFieldType(Isolate* isolate, InternalIndex descriptor_number, - Handle<Name> name, PropertyConstness new_constness, - Representation new_representation, - const MaybeObjectHandle& new_wrapped_type); - - // TODO(ishell): Move to MapUpdater. - void PrintReconfiguration(Isolate* isolate, FILE* file, - InternalIndex modify_index, PropertyKind kind, - PropertyAttributes attributes); - // TODO(ishell): Move to MapUpdater. - void PrintGeneralization( - Isolate* isolate, FILE* file, const char* reason, - InternalIndex modify_index, int split, int descriptors, - bool constant_to_field, Representation old_representation, - Representation new_representation, PropertyConstness old_constness, - PropertyConstness new_constness, MaybeHandle<FieldType> old_field_type, - MaybeHandle<Object> old_value, MaybeHandle<FieldType> new_field_type, - MaybeHandle<Object> new_value); - // This is the equivalent of IsMap() but avoids reading the instance type so // it can be used concurrently without acquire load. V8_INLINE bool ConcurrentIsMap(PtrComprCageBase cage_base, diff --git a/deps/v8/src/objects/map.tq b/deps/v8/src/objects/map.tq index 4cd3f2d67f..49b2e5be36 100644 --- a/deps/v8/src/objects/map.tq +++ b/deps/v8/src/objects/map.tq @@ -16,8 +16,7 @@ bitfield struct MapBitFields1 extends uint8 { bitfield struct MapBitFields2 extends uint8 { new_target_is_base: bool: 1 bit; is_immutable_prototype: bool: 1 bit; - unused: bool: 1 bit; - elements_kind: ElementsKind: 5 bit; + elements_kind: ElementsKind: 6 bit; } bitfield struct MapBitFields3 extends uint32 { diff --git a/deps/v8/src/objects/megadom-handler-inl.h b/deps/v8/src/objects/megadom-handler-inl.h new file mode 100644 index 0000000000..87efc66f0e --- /dev/null +++ b/deps/v8/src/objects/megadom-handler-inl.h @@ -0,0 +1,26 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef V8_OBJECTS_MEGADOM_HANDLER_INL_H_ +#define V8_OBJECTS_MEGADOM_HANDLER_INL_H_ + +#include "src/objects/megadom-handler.h" +#include "src/objects/objects-inl.h" // Needed for write barriers + +// Has to be the last include (doesn't have include guards): +#include "src/objects/object-macros.h" + +namespace v8 { +namespace internal { + +#include "torque-generated/src/objects/megadom-handler-tq-inl.inc" + +TQ_OBJECT_CONSTRUCTORS_IMPL(MegaDomHandler) + +} // namespace internal +} // namespace v8 + +#include "src/objects/object-macros-undef.h" + +#endif // V8_OBJECTS_MEGADOM_HANDLER_INL_H_ diff --git a/deps/v8/src/objects/megadom-handler.h b/deps/v8/src/objects/megadom-handler.h new file mode 100644 index 0000000000..00de29d0d5 --- /dev/null +++ b/deps/v8/src/objects/megadom-handler.h @@ -0,0 +1,32 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef V8_OBJECTS_MEGADOM_HANDLER_H_ +#define V8_OBJECTS_MEGADOM_HANDLER_H_ + +#include "src/objects/heap-object.h" + +// Has to be the last include (doesn't have include guards): +#include "src/objects/object-macros.h" + +namespace v8 { +namespace internal { + +#include "torque-generated/src/objects/megadom-handler-tq.inc" + +class MegaDomHandler + : public TorqueGeneratedMegaDomHandler<MegaDomHandler, HeapObject> { + public: + void BriefPrintDetails(std::ostream& os); + class BodyDescriptor; + + TQ_OBJECT_CONSTRUCTORS(MegaDomHandler) +}; + +} // namespace internal +} // namespace v8 + +#include "src/objects/object-macros-undef.h" + +#endif // V8_OBJECTS_MEGADOM_HANDLER_H_ diff --git a/deps/v8/src/objects/megadom-handler.tq b/deps/v8/src/objects/megadom-handler.tq new file mode 100644 index 0000000000..7daaa5a8d8 --- /dev/null +++ b/deps/v8/src/objects/megadom-handler.tq @@ -0,0 +1,11 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +@generateCppClass +@generatePrint +@generateBodyDescriptor +extern class MegaDomHandler extends HeapObject { + accessor: MaybeObject; + context: MaybeObject; +} diff --git a/deps/v8/src/objects/object-list-macros.h b/deps/v8/src/objects/object-list-macros.h index fc3f956d2d..837f895f5f 100644 --- a/deps/v8/src/objects/object-list-macros.h +++ b/deps/v8/src/objects/object-list-macros.h @@ -166,6 +166,7 @@ class ZoneForwardList; V(LoadHandler) \ V(Map) \ V(MapCache) \ + V(MegaDomHandler) \ V(Module) \ V(Microtask) \ V(Name) \ @@ -217,8 +218,11 @@ class ZoneForwardList; IF_WASM(V, WasmArray) \ IF_WASM(V, WasmExceptionObject) \ IF_WASM(V, WasmExceptionPackage) \ + IF_WASM(V, WasmExportedFunctionData) \ + IF_WASM(V, WasmFunctionData) \ IF_WASM(V, WasmGlobalObject) \ IF_WASM(V, WasmInstanceObject) \ + IF_WASM(V, WasmJSFunctionData) \ IF_WASM(V, WasmMemoryObject) \ IF_WASM(V, WasmModuleObject) \ IF_WASM(V, WasmStruct) \ diff --git a/deps/v8/src/objects/object-macros-undef.h b/deps/v8/src/objects/object-macros-undef.h index e2c5961ab2..1d240729ff 100644 --- a/deps/v8/src/objects/object-macros-undef.h +++ b/deps/v8/src/objects/object-macros-undef.h @@ -14,10 +14,8 @@ #undef DECL_PRIMITIVE_GETTER #undef DECL_PRIMITIVE_SETTER #undef DECL_PRIMITIVE_ACCESSORS -#undef DECL_SYNCHRONIZED_PRIMITIVE_ACCESSORS #undef DECL_BOOLEAN_ACCESSORS #undef DECL_INT_ACCESSORS -#undef DECL_SYNCHRONIZED_INT_ACCESSORS #undef DECL_INT32_ACCESSORS #undef DECL_UINT16_ACCESSORS #undef DECL_INT16_ACCESSORS @@ -61,7 +59,9 @@ #undef RELEASE_ACQUIRE_WEAK_ACCESSORS #undef SMI_ACCESSORS_CHECKED #undef SMI_ACCESSORS -#undef SYNCHRONIZED_SMI_ACCESSORS +#undef DECL_RELEASE_ACQUIRE_INT_ACCESSORS +#undef RELEASE_ACQUIRE_SMI_ACCESSORS +#undef DECL_RELAXED_SMI_ACCESSORS #undef RELAXED_SMI_ACCESSORS #undef BOOL_GETTER #undef BOOL_ACCESSORS diff --git a/deps/v8/src/objects/object-macros.h b/deps/v8/src/objects/object-macros.h index 2a742d5d77..ed4637a406 100644 --- a/deps/v8/src/objects/object-macros.h +++ b/deps/v8/src/objects/object-macros.h @@ -56,17 +56,10 @@ DECL_PRIMITIVE_GETTER(name, type) \ DECL_PRIMITIVE_SETTER(name, type) -#define DECL_SYNCHRONIZED_PRIMITIVE_ACCESSORS(name, type) \ - inline type synchronized_##name() const; \ - inline void synchronized_set_##name(type value); - #define DECL_BOOLEAN_ACCESSORS(name) DECL_PRIMITIVE_ACCESSORS(name, bool) #define DECL_INT_ACCESSORS(name) DECL_PRIMITIVE_ACCESSORS(name, int) -#define DECL_SYNCHRONIZED_INT_ACCESSORS(name) \ - DECL_SYNCHRONIZED_PRIMITIVE_ACCESSORS(name, int) - #define DECL_INT32_ACCESSORS(name) DECL_PRIMITIVE_ACCESSORS(name, int32_t) #define DECL_UINT16_ACCESSORS(name) \ @@ -324,21 +317,29 @@ #define SMI_ACCESSORS(holder, name, offset) \ SMI_ACCESSORS_CHECKED(holder, name, offset, true) -#define SYNCHRONIZED_SMI_ACCESSORS(holder, name, offset) \ - int holder::synchronized_##name() const { \ +#define DECL_RELEASE_ACQUIRE_INT_ACCESSORS(name) \ + inline int name(AcquireLoadTag) const; \ + inline void set_##name(int value, ReleaseStoreTag); + +#define RELEASE_ACQUIRE_SMI_ACCESSORS(holder, name, offset) \ + int holder::name(AcquireLoadTag) const { \ Smi value = TaggedField<Smi, offset>::Acquire_Load(*this); \ return value.value(); \ } \ - void holder::synchronized_set_##name(int value) { \ + void holder::set_##name(int value, ReleaseStoreTag) { \ TaggedField<Smi, offset>::Release_Store(*this, Smi::FromInt(value)); \ } +#define DECL_RELAXED_SMI_ACCESSORS(name) \ + inline int name(RelaxedLoadTag) const; \ + inline void set_##name(int value, RelaxedStoreTag); + #define RELAXED_SMI_ACCESSORS(holder, name, offset) \ - int holder::relaxed_read_##name() const { \ + int holder::name(RelaxedLoadTag) const { \ Smi value = TaggedField<Smi, offset>::Relaxed_Load(*this); \ return value.value(); \ } \ - void holder::relaxed_write_##name(int value) { \ + void holder::set_##name(int value, RelaxedStoreTag) { \ TaggedField<Smi, offset>::Relaxed_Store(*this, Smi::FromInt(value)); \ } @@ -604,7 +605,7 @@ static_assert(sizeof(unsigned) == sizeof(uint32_t), static_cast<base::Atomic8>(value)); #ifdef OBJECT_PRINT -#define DECL_PRINTER(Name) void Name##Print(std::ostream& os); // NOLINT +#define DECL_PRINTER(Name) void Name##Print(std::ostream& os); #else #define DECL_PRINTER(Name) #endif diff --git a/deps/v8/src/objects/objects-body-descriptors-inl.h b/deps/v8/src/objects/objects-body-descriptors-inl.h index 2ffe2a4414..18dceb527d 100644 --- a/deps/v8/src/objects/objects-body-descriptors-inl.h +++ b/deps/v8/src/objects/objects-body-descriptors-inl.h @@ -15,6 +15,7 @@ #include "src/objects/hash-table.h" #include "src/objects/js-collection.h" #include "src/objects/js-weak-refs.h" +#include "src/objects/megadom-handler-inl.h" #include "src/objects/objects-body-descriptors.h" #include "src/objects/oddball.h" #include "src/objects/ordered-hash-table-inl.h" @@ -103,12 +104,17 @@ DISABLE_CFI_PERF void BodyDescriptorBase::IteratePointers(HeapObject obj, int start_offset, int end_offset, ObjectVisitor* v) { + if (start_offset == HeapObject::kMapOffset) { + v->VisitMapPointer(obj); + start_offset += kTaggedSize; + } v->VisitPointers(obj, obj.RawField(start_offset), obj.RawField(end_offset)); } template <typename ObjectVisitor> void BodyDescriptorBase::IteratePointer(HeapObject obj, int offset, ObjectVisitor* v) { + DCHECK_NE(offset, HeapObject::kMapOffset); v->VisitPointer(obj, obj.RawField(offset)); } @@ -122,6 +128,7 @@ DISABLE_CFI_PERF void BodyDescriptorBase::IterateMaybeWeakPointers( template <typename ObjectVisitor> void BodyDescriptorBase::IterateMaybeWeakPointer(HeapObject obj, int offset, ObjectVisitor* v) { + DCHECK_NE(offset, HeapObject::kMapOffset); v->VisitPointer(obj, obj.RawMaybeWeakField(offset)); } @@ -423,7 +430,7 @@ class ByteArray::BodyDescriptor final : public BodyDescriptorBase { ObjectVisitor* v) {} static inline int SizeOf(Map map, HeapObject obj) { - return ByteArray::SizeFor(ByteArray::cast(obj).synchronized_length()); + return ByteArray::SizeFor(ByteArray::cast(obj).length(kAcquireLoad)); } }; @@ -444,7 +451,7 @@ class BytecodeArray::BodyDescriptor final : public BodyDescriptorBase { static inline int SizeOf(Map map, HeapObject obj) { return BytecodeArray::SizeFor( - BytecodeArray::cast(obj).synchronized_length()); + BytecodeArray::cast(obj).length(kAcquireLoad)); } }; @@ -457,7 +464,7 @@ class BigInt::BodyDescriptor final : public BodyDescriptorBase { ObjectVisitor* v) {} static inline int SizeOf(Map map, HeapObject obj) { - return BigInt::SizeFor(BigInt::cast(obj).synchronized_length()); + return BigInt::SizeFor(BigInt::cast(obj).length(kAcquireLoad)); } }; @@ -471,7 +478,7 @@ class FixedDoubleArray::BodyDescriptor final : public BodyDescriptorBase { static inline int SizeOf(Map map, HeapObject obj) { return FixedDoubleArray::SizeFor( - FixedDoubleArray::cast(obj).synchronized_length()); + FixedDoubleArray::cast(obj).length(kAcquireLoad)); } }; @@ -582,6 +589,43 @@ class WasmTypeInfo::BodyDescriptor final : public BodyDescriptorBase { static inline int SizeOf(Map map, HeapObject object) { return kSize; } }; +class WasmJSFunctionData::BodyDescriptor final : public BodyDescriptorBase { + public: + static bool IsValidSlot(Map map, HeapObject obj, int offset) { + UNREACHABLE(); + } + + template <typename ObjectVisitor> + static inline void IterateBody(Map map, HeapObject obj, int object_size, + ObjectVisitor* v) { + Foreign::BodyDescriptor::IterateBody<ObjectVisitor>(map, obj, object_size, + v); + IteratePointers(obj, WasmFunctionData::kStartOfStrongFieldsOffset, + kEndOfStrongFieldsOffset, v); + } + + static inline int SizeOf(Map map, HeapObject object) { return kSize; } +}; + +class WasmExportedFunctionData::BodyDescriptor final + : public BodyDescriptorBase { + public: + static bool IsValidSlot(Map map, HeapObject obj, int offset) { + UNREACHABLE(); + } + + template <typename ObjectVisitor> + static inline void IterateBody(Map map, HeapObject obj, int object_size, + ObjectVisitor* v) { + Foreign::BodyDescriptor::IterateBody<ObjectVisitor>(map, obj, object_size, + v); + IteratePointers(obj, WasmFunctionData::kStartOfStrongFieldsOffset, + kEndOfStrongFieldsOffset, v); + } + + static inline int SizeOf(Map map, HeapObject object) { return kSize; } +}; + class WasmInstanceObject::BodyDescriptor final : public BodyDescriptorBase { public: static bool IsValidSlot(Map map, HeapObject obj, int offset) { @@ -655,7 +699,7 @@ class WasmStruct::BodyDescriptor final : public BodyDescriptorBase { } static inline int SizeOf(Map map, HeapObject object) { - return map.instance_size(); + return WasmStruct::GcSafeSize(map); } }; @@ -944,6 +988,12 @@ ReturnType BodyDescriptorApply(InstanceType type, T1 p1, T2 p2, T3 p3, T4 p4) { #if V8_ENABLE_WEBASSEMBLY case WASM_ARRAY_TYPE: return Op::template apply<WasmArray::BodyDescriptor>(p1, p2, p3, p4); + case WASM_EXPORTED_FUNCTION_DATA_TYPE: + return Op::template apply<WasmExportedFunctionData::BodyDescriptor>( + p1, p2, p3, p4); + case WASM_JS_FUNCTION_DATA_TYPE: + return Op::template apply<WasmJSFunctionData::BodyDescriptor>(p1, p2, p3, + p4); case WASM_STRUCT_TYPE: return Op::template apply<WasmStruct::BodyDescriptor>(p1, p2, p3, p4); case WASM_TYPE_INFO_TYPE: @@ -1134,7 +1184,7 @@ ReturnType BodyDescriptorApply(InstanceType type, T1 p1, T2 p2, T3 p3, T4 p4) { template <typename ObjectVisitor> void HeapObject::IterateFast(ObjectVisitor* v) { - BodyDescriptorBase::IteratePointer(*this, kMapOffset, v); + v->VisitMapPointer(*this); IterateBodyFast(v); } diff --git a/deps/v8/src/objects/objects-definitions.h b/deps/v8/src/objects/objects-definitions.h index 43560caab8..20ce96aae5 100644 --- a/deps/v8/src/objects/objects-definitions.h +++ b/deps/v8/src/objects/objects-definitions.h @@ -152,12 +152,8 @@ namespace internal { template_object_description) \ V(_, TUPLE2_TYPE, Tuple2, tuple2) \ IF_WASM(V, _, WASM_EXCEPTION_TAG_TYPE, WasmExceptionTag, wasm_exception_tag) \ - IF_WASM(V, _, WASM_EXPORTED_FUNCTION_DATA_TYPE, WasmExportedFunctionData, \ - wasm_exported_function_data) \ IF_WASM(V, _, WASM_INDIRECT_FUNCTION_TABLE_TYPE, WasmIndirectFunctionTable, \ - wasm_indirect_function_table) \ - IF_WASM(V, _, WASM_JS_FUNCTION_DATA_TYPE, WasmJSFunctionData, \ - wasm_js_function_data) + wasm_indirect_function_table) // Adapts one STRUCT_LIST_GENERATOR entry to the STRUCT_LIST entry #define STRUCT_LIST_ADAPTER(V, NAME, Name, name) V(NAME, Name, name) diff --git a/deps/v8/src/objects/objects-inl.h b/deps/v8/src/objects/objects-inl.h index c94feca250..1a0ff834b2 100644 --- a/deps/v8/src/objects/objects-inl.h +++ b/deps/v8/src/objects/objects-inl.h @@ -16,6 +16,7 @@ #include "src/base/memory.h" #include "src/builtins/builtins.h" #include "src/common/external-pointer-inl.h" +#include "src/common/globals.h" #include "src/handles/handles-inl.h" #include "src/heap/factory.h" #include "src/heap/heap-write-barrier-inl.h" @@ -42,7 +43,6 @@ #include "src/objects/tagged-impl-inl.h" #include "src/objects/tagged-index.h" #include "src/objects/templates.h" -#include "src/sanitizer/tsan.h" // Has to be the last include (doesn't have include guards): #include "src/objects/object-macros.h" @@ -631,10 +631,9 @@ void Object::InitExternalPointerField(size_t offset, Isolate* isolate, i::InitExternalPointerField(field_address(offset), isolate, value, tag); } -Address Object::ReadExternalPointerField(size_t offset, - PtrComprCageBase isolate_root, +Address Object::ReadExternalPointerField(size_t offset, Isolate* isolate, ExternalPointerTag tag) const { - return i::ReadExternalPointerField(field_address(offset), isolate_root, tag); + return i::ReadExternalPointerField(field_address(offset), isolate, tag); } void Object::WriteExternalPointerField(size_t offset, Isolate* isolate, @@ -650,11 +649,26 @@ MaybeObjectSlot HeapObject::RawMaybeWeakField(int byte_offset) const { return MaybeObjectSlot(field_address(byte_offset)); } -MapWord MapWord::FromMap(const Map map) { return MapWord(map.ptr()); } +MapWord MapWord::FromMap(const Map map) { + DCHECK(map.is_null() || !MapWord::IsPacked(map.ptr())); +#ifdef V8_MAP_PACKING + return MapWord(Pack(map.ptr())); +#else + return MapWord(map.ptr()); +#endif +} -Map MapWord::ToMap() const { return Map::unchecked_cast(Object(value_)); } +Map MapWord::ToMap() const { +#ifdef V8_MAP_PACKING + return Map::unchecked_cast(Object(Unpack(value_))); +#else + return Map::unchecked_cast(Object(value_)); +#endif +} -bool MapWord::IsForwardingAddress() const { return HAS_SMI_TAG(value_); } +bool MapWord::IsForwardingAddress() const { + return (value_ & kForwardingTagMask) == kForwardingTag; +} MapWord MapWord::FromForwardingAddress(HeapObject object) { return MapWord(object.ptr() - kHeapObjectTag); @@ -697,7 +711,9 @@ ReadOnlyRoots HeapObject::GetReadOnlyRoots(PtrComprCageBase cage_base) const { #endif } -DEF_GETTER(HeapObject, map, Map) { return map_word(cage_base).ToMap(); } +DEF_GETTER(HeapObject, map, Map) { + return map_word(cage_base, kRelaxedLoad).ToMap(); +} void HeapObject::set_map(Map value) { #ifdef VERIFY_HEAP @@ -705,7 +721,7 @@ void HeapObject::set_map(Map value) { GetHeapFromWritableObject(*this)->VerifyObjectLayoutChange(*this, value); } #endif - set_map_word(MapWord::FromMap(value)); + set_map_word(MapWord::FromMap(value), kRelaxedStore); #ifndef V8_DISABLE_WRITE_BARRIERS if (!value.is_null()) { // TODO(1600) We are passing kNullAddress as a slot because maps can never @@ -715,17 +731,21 @@ void HeapObject::set_map(Map value) { #endif } -DEF_GETTER(HeapObject, synchronized_map, Map) { - return synchronized_map_word(cage_base).ToMap(); +Map HeapObject::map(AcquireLoadTag tag) const { + PtrComprCageBase cage_base = GetPtrComprCageBase(*this); + return HeapObject::map(cage_base, tag); +} +Map HeapObject::map(PtrComprCageBase cage_base, AcquireLoadTag tag) const { + return map_word(cage_base, tag).ToMap(); } -void HeapObject::synchronized_set_map(Map value) { +void HeapObject::set_map(Map value, ReleaseStoreTag tag) { #ifdef VERIFY_HEAP if (FLAG_verify_heap && !value.is_null()) { GetHeapFromWritableObject(*this)->VerifyObjectLayoutChange(*this, value); } #endif - synchronized_set_map_word(MapWord::FromMap(value)); + set_map_word(MapWord::FromMap(value), tag); #ifndef V8_DISABLE_WRITE_BARRIERS if (!value.is_null()) { // TODO(1600) We are passing kNullAddress as a slot because maps can never @@ -742,11 +762,12 @@ void HeapObject::set_map_no_write_barrier(Map value) { GetHeapFromWritableObject(*this)->VerifyObjectLayoutChange(*this, value); } #endif - set_map_word(MapWord::FromMap(value)); + set_map_word(MapWord::FromMap(value), kRelaxedStore); } void HeapObject::set_map_after_allocation(Map value, WriteBarrierMode mode) { - set_map_word(MapWord::FromMap(value)); + MapWord mapword = MapWord::FromMap(value); + set_map_word(mapword, kRelaxedStore); #ifndef V8_DISABLE_WRITE_BARRIERS if (mode != SKIP_WRITE_BARRIER) { DCHECK(!value.is_null()); @@ -761,20 +782,28 @@ ObjectSlot HeapObject::map_slot() const { return ObjectSlot(MapField::address(*this)); } -DEF_GETTER(HeapObject, map_word, MapWord) { - return MapField::Relaxed_Load(cage_base, *this); +MapWord HeapObject::map_word(RelaxedLoadTag tag) const { + PtrComprCageBase cage_base = GetPtrComprCageBase(*this); + return HeapObject::map_word(cage_base, tag); +} +MapWord HeapObject::map_word(PtrComprCageBase cage_base, RelaxedLoadTag) const { + return MapField::Relaxed_Load_Map_Word(cage_base, *this); } -void HeapObject::set_map_word(MapWord map_word) { - MapField::Relaxed_Store(*this, map_word); +void HeapObject::set_map_word(MapWord map_word, RelaxedStoreTag) { + MapField::Relaxed_Store_Map_Word(*this, map_word); } -DEF_GETTER(HeapObject, synchronized_map_word, MapWord) { - return MapField::Acquire_Load(cage_base, *this); +MapWord HeapObject::map_word(AcquireLoadTag tag) const { + PtrComprCageBase cage_base = GetPtrComprCageBase(*this); + return HeapObject::map_word(cage_base, tag); +} +MapWord HeapObject::map_word(PtrComprCageBase cage_base, AcquireLoadTag) const { + return MapField::Acquire_Load_No_Unpack(cage_base, *this); } -void HeapObject::synchronized_set_map_word(MapWord map_word) { - MapField::Release_Store(*this, map_word); +void HeapObject::set_map_word(MapWord map_word, ReleaseStoreTag) { + MapField::Release_Store_Map_Word(*this, map_word); } bool HeapObject::release_compare_and_swap_map_word(MapWord old_map_word, @@ -1081,8 +1110,7 @@ static inline uint32_t ObjectAddressForHashing(Address object) { static inline Handle<Object> MakeEntryPair(Isolate* isolate, size_t index, Handle<Object> value) { Handle<Object> key = isolate->factory()->SizeToString(index); - Handle<FixedArray> entry_storage = - isolate->factory()->NewUninitializedFixedArray(2); + Handle<FixedArray> entry_storage = isolate->factory()->NewFixedArray(2); { entry_storage->set(0, *key, SKIP_WRITE_BARRIER); entry_storage->set(1, *value, SKIP_WRITE_BARRIER); @@ -1093,8 +1121,7 @@ static inline Handle<Object> MakeEntryPair(Isolate* isolate, size_t index, static inline Handle<Object> MakeEntryPair(Isolate* isolate, Handle<Object> key, Handle<Object> value) { - Handle<FixedArray> entry_storage = - isolate->factory()->NewUninitializedFixedArray(2); + Handle<FixedArray> entry_storage = isolate->factory()->NewFixedArray(2); { entry_storage->set(0, *key, SKIP_WRITE_BARRIER); entry_storage->set(1, *value, SKIP_WRITE_BARRIER); diff --git a/deps/v8/src/objects/objects.cc b/deps/v8/src/objects/objects.cc index a57d762fd4..74b970b545 100644 --- a/deps/v8/src/objects/objects.cc +++ b/deps/v8/src/objects/objects.cc @@ -41,7 +41,6 @@ #include "src/heap/read-only-heap.h" #include "src/ic/ic.h" #include "src/init/bootstrapper.h" -#include "src/logging/counters-inl.h" #include "src/logging/counters.h" #include "src/logging/log.h" #include "src/objects/allocation-site-inl.h" @@ -102,6 +101,7 @@ #include "src/objects/literal-objects-inl.h" #include "src/objects/map-inl.h" #include "src/objects/map.h" +#include "src/objects/megadom-handler-inl.h" #include "src/objects/microtask-inl.h" #include "src/objects/module-inl.h" #include "src/objects/promise-inl.h" @@ -1320,8 +1320,8 @@ Handle<SharedFunctionInfo> FunctionTemplateInfo::GetOrCreateSharedFunctionInfo( return result; } -bool FunctionTemplateInfo::IsTemplateFor(Map map) { - RuntimeCallTimerScope timer( +bool FunctionTemplateInfo::IsTemplateFor(Map map) const { + RCS_SCOPE( LocalHeap::Current() == nullptr ? GetIsolate()->counters()->runtime_call_stats() : LocalIsolate::FromHeap(LocalHeap::Current())->runtime_call_stats(), @@ -1350,16 +1350,32 @@ bool FunctionTemplateInfo::IsTemplateFor(Map map) { return false; } +bool FunctionTemplateInfo::IsLeafTemplateForApiObject(Object object) const { + i::DisallowGarbageCollection no_gc; + + if (!object.IsJSApiObject()) { + return false; + } + + bool result = false; + Map map = HeapObject::cast(object).map(); + Object constructor_obj = map.GetConstructor(); + if (constructor_obj.IsJSFunction()) { + JSFunction fun = JSFunction::cast(constructor_obj); + result = (*this == fun.shared().function_data(kAcquireLoad)); + } else if (constructor_obj.IsFunctionTemplateInfo()) { + result = (*this == constructor_obj); + } + DCHECK_IMPLIES(result, IsTemplateFor(map)); + return result; +} + // static FunctionTemplateRareData FunctionTemplateInfo::AllocateFunctionTemplateRareData( Isolate* isolate, Handle<FunctionTemplateInfo> function_template_info) { DCHECK(function_template_info->rare_data(kAcquireLoad).IsUndefined(isolate)); - Handle<Struct> struct_obj = isolate->factory()->NewStruct( - FUNCTION_TEMPLATE_RARE_DATA_TYPE, AllocationType::kOld); Handle<FunctionTemplateRareData> rare_data = - i::Handle<FunctionTemplateRareData>::cast(struct_obj); - rare_data->set_c_function(Smi(0)); - rare_data->set_c_signature(Smi(0)); + isolate->factory()->NewFunctionTemplateRareData(); function_template_info->set_rare_data(*rare_data, kReleaseStore); return *rare_data; } @@ -1887,11 +1903,9 @@ std::ostream& operator<<(std::ostream& os, const Brief& v) { return os; } -void Smi::SmiPrint(std::ostream& os) const { // NOLINT - os << value(); -} +void Smi::SmiPrint(std::ostream& os) const { os << value(); } -void HeapObject::HeapObjectShortPrint(std::ostream& os) { // NOLINT +void HeapObject::HeapObjectShortPrint(std::ostream& os) { os << AsHex::Address(this->ptr()) << " "; if (IsString()) { @@ -2043,7 +2057,7 @@ void HeapObject::HeapObjectShortPrint(std::ostream& os) { // NOLINT os << "<FeedbackVector[" << FeedbackVector::cast(*this).length() << "]>"; break; case FREE_SPACE_TYPE: - os << "<FreeSpace[" << FreeSpace::cast(*this).size() << "]>"; + os << "<FreeSpace[" << FreeSpace::cast(*this).size(kRelaxedLoad) << "]>"; break; case PREPARSE_DATA_TYPE: { @@ -2200,6 +2214,10 @@ void Tuple2::BriefPrintDetails(std::ostream& os) { os << " " << Brief(value1()) << ", " << Brief(value2()); } +void MegaDomHandler::BriefPrintDetails(std::ostream& os) { + os << " " << Brief(accessor()) << ", " << Brief(context()); +} + void ClassPositions::BriefPrintDetails(std::ostream& os) { os << " " << start() << ", " << end(); } @@ -2240,7 +2258,7 @@ int HeapObject::SizeFromMap(Map map) const { if (base::IsInRange(instance_type, FIRST_FIXED_ARRAY_TYPE, LAST_FIXED_ARRAY_TYPE)) { return FixedArray::SizeFor( - FixedArray::unchecked_cast(*this).synchronized_length()); + FixedArray::unchecked_cast(*this).length(kAcquireLoad)); } if (base::IsInRange(instance_type, FIRST_CONTEXT_TYPE, LAST_CONTEXT_TYPE)) { if (instance_type == NATIVE_CONTEXT_TYPE) return NativeContext::kSize; @@ -2251,29 +2269,29 @@ int HeapObject::SizeFromMap(Map map) const { // Strings may get concurrently truncated, hence we have to access its // length synchronized. return SeqOneByteString::SizeFor( - SeqOneByteString::unchecked_cast(*this).synchronized_length()); + SeqOneByteString::unchecked_cast(*this).length(kAcquireLoad)); } if (instance_type == BYTE_ARRAY_TYPE) { return ByteArray::SizeFor( - ByteArray::unchecked_cast(*this).synchronized_length()); + ByteArray::unchecked_cast(*this).length(kAcquireLoad)); } if (instance_type == BYTECODE_ARRAY_TYPE) { return BytecodeArray::SizeFor( - BytecodeArray::unchecked_cast(*this).synchronized_length()); + BytecodeArray::unchecked_cast(*this).length(kAcquireLoad)); } if (instance_type == FREE_SPACE_TYPE) { - return FreeSpace::unchecked_cast(*this).relaxed_read_size(); + return FreeSpace::unchecked_cast(*this).size(kRelaxedLoad); } if (instance_type == STRING_TYPE || instance_type == INTERNALIZED_STRING_TYPE) { // Strings may get concurrently truncated, hence we have to access its // length synchronized. return SeqTwoByteString::SizeFor( - SeqTwoByteString::unchecked_cast(*this).synchronized_length()); + SeqTwoByteString::unchecked_cast(*this).length(kAcquireLoad)); } if (instance_type == FIXED_DOUBLE_ARRAY_TYPE) { return FixedDoubleArray::SizeFor( - FixedDoubleArray::unchecked_cast(*this).synchronized_length()); + FixedDoubleArray::unchecked_cast(*this).length(kAcquireLoad)); } if (instance_type == FEEDBACK_METADATA_TYPE) { return FeedbackMetadata::SizeFor( @@ -2287,11 +2305,11 @@ int HeapObject::SizeFromMap(Map map) const { if (base::IsInRange(instance_type, FIRST_WEAK_FIXED_ARRAY_TYPE, LAST_WEAK_FIXED_ARRAY_TYPE)) { return WeakFixedArray::SizeFor( - WeakFixedArray::unchecked_cast(*this).synchronized_length()); + WeakFixedArray::unchecked_cast(*this).length(kAcquireLoad)); } if (instance_type == WEAK_ARRAY_LIST_TYPE) { return WeakArrayList::SizeForCapacity( - WeakArrayList::unchecked_cast(*this).synchronized_capacity()); + WeakArrayList::unchecked_cast(*this).capacity()); } if (instance_type == SMALL_ORDERED_HASH_SET_TYPE) { return SmallOrderedHashSet::SizeFor( @@ -2311,7 +2329,7 @@ int HeapObject::SizeFromMap(Map map) const { } if (instance_type == PROPERTY_ARRAY_TYPE) { return PropertyArray::SizeFor( - PropertyArray::cast(*this).synchronized_length()); + PropertyArray::cast(*this).length(kAcquireLoad)); } if (instance_type == FEEDBACK_VECTOR_TYPE) { return FeedbackVector::SizeFor( @@ -2339,6 +2357,9 @@ int HeapObject::SizeFromMap(Map map) const { CoverageInfo::unchecked_cast(*this).slot_count()); } #if V8_ENABLE_WEBASSEMBLY + if (instance_type == WASM_STRUCT_TYPE) { + return WasmStruct::GcSafeSize(map); + } if (instance_type == WASM_ARRAY_TYPE) { return WasmArray::GcSafeSizeFor(map, WasmArray::cast(*this).length()); } @@ -2822,6 +2843,7 @@ Maybe<bool> Object::SetDataProperty(LookupIterator* it, Handle<Object> value) { Handle<Object> to_assign = value; // Convert the incoming value to a number for storing into typed arrays. + // TODO(v8:11111): Support RAB / GSAB. if (it->IsElement() && receiver->IsJSObject() && JSObject::cast(*receiver).HasTypedArrayElements()) { ElementsKind elements_kind = JSObject::cast(*receiver).GetElementsKind(); @@ -2912,8 +2934,9 @@ Maybe<bool> Object::AddDataProperty(LookupIterator* it, Handle<Object> value, } Handle<JSObject> receiver_obj = Handle<JSObject>::cast(receiver); - JSObject::AddDataElement(receiver_obj, it->array_index(), value, - attributes); + MAYBE_RETURN(JSObject::AddDataElement(receiver_obj, it->array_index(), + value, attributes), + Nothing<bool>()); JSObject::ValidateElements(*receiver_obj); return Just(true); } else { @@ -3406,10 +3429,13 @@ Maybe<bool> JSArray::ArraySetLength(Isolate* isolate, Handle<JSArray> a, } // 13. If oldLenDesc.[[Writable]] is false, return false. if (!old_len_desc.writable() || - // Also handle the {configurable: true} case since we later use - // JSArray::SetLength instead of OrdinaryDefineOwnProperty to change - // the length, and it doesn't have access to the descriptor anymore. - new_len_desc->configurable()) { + // Also handle the {configurable: true} and enumerable changes + // since we later use JSArray::SetLength instead of + // OrdinaryDefineOwnProperty to change the length, + // and it doesn't have access to the descriptor anymore. + new_len_desc->configurable() || + (new_len_desc->has_enumerable() && + (old_len_desc.enumerable() != new_len_desc->enumerable()))) { RETURN_FAILURE(isolate, GetShouldThrow(isolate, should_throw), NewTypeError(MessageTemplate::kRedefineDisallowed, isolate->factory()->length_string())); @@ -3428,7 +3454,7 @@ Maybe<bool> JSArray::ArraySetLength(Isolate* isolate, Handle<JSArray> a, // (Not needed.) } // Most of steps 16 through 19 is implemented by JSArray::SetLength. - JSArray::SetLength(a, new_len); + MAYBE_RETURN(JSArray::SetLength(a, new_len), Nothing<bool>()); // Steps 19d-ii, 20. if (!new_writable) { PropertyDescriptor readonly; @@ -3966,8 +3992,7 @@ Handle<FixedArray> FixedArray::SetAndGrow(Isolate* isolate, do { capacity = JSObject::NewElementsCapacity(capacity); } while (capacity <= index); - Handle<FixedArray> new_array = - isolate->factory()->NewUninitializedFixedArray(capacity); + Handle<FixedArray> new_array = isolate->factory()->NewFixedArray(capacity); array->CopyTo(0, *new_array, 0, array->length()); new_array->FillWithHoles(array->length(), new_array->length()); new_array->set(index, *value); @@ -4336,8 +4361,8 @@ Handle<RegExpMatchInfo> RegExpMatchInfo::ReserveCaptures( return result; } -template <typename LocalIsolate> -Handle<DescriptorArray> DescriptorArray::Allocate(LocalIsolate* isolate, +template <typename IsolateT> +Handle<DescriptorArray> DescriptorArray::Allocate(IsolateT* isolate, int nof_descriptors, int slack, AllocationType allocation) { @@ -4551,9 +4576,7 @@ void Relocatable::PostGarbageCollectionProcessing(Isolate* isolate) { } // Reserve space for statics needing saving and restoring. -int Relocatable::ArchiveSpacePerThread() { - return sizeof(Relocatable*); // NOLINT -} +int Relocatable::ArchiveSpacePerThread() { return sizeof(Relocatable*); } // Archive statics that are thread-local. char* Relocatable::ArchiveState(Isolate* isolate, char* to) { @@ -4720,7 +4743,8 @@ Handle<Object> CacheInitialJSArrayMaps(Isolate* isolate, Handle<Map> current_map = initial_map; ElementsKind kind = current_map->elements_kind(); DCHECK_EQ(GetInitialFastElementsKind(), kind); - native_context->set(Context::ArrayMapIndex(kind), *current_map); + native_context->set(Context::ArrayMapIndex(kind), *current_map, + UPDATE_WRITE_BARRIER, kReleaseStore); for (int i = GetSequenceIndexFromFastElementsKind(kind) + 1; i < kFastElementsKindCount; ++i) { Handle<Map> new_map; @@ -4733,7 +4757,8 @@ Handle<Object> CacheInitialJSArrayMaps(Isolate* isolate, INSERT_TRANSITION); } DCHECK_EQ(next_kind, new_map->elements_kind()); - native_context->set(Context::ArrayMapIndex(next_kind), *new_map); + native_context->set(Context::ArrayMapIndex(next_kind), *new_map, + UPDATE_WRITE_BARRIER, kReleaseStore); current_map = new_map; } return initial_map; @@ -4783,9 +4808,9 @@ int Script::GetEvalPosition(Isolate* isolate, Handle<Script> script) { return position; } -template <typename LocalIsolate> +template <typename IsolateT> // static -void Script::InitLineEnds(LocalIsolate* isolate, Handle<Script> script) { +void Script::InitLineEnds(IsolateT* isolate, Handle<Script> script) { if (!script->line_ends().IsUndefined(isolate)) return; #if V8_ENABLE_WEBASSEMBLY DCHECK(script->type() != Script::TYPE_WASM || @@ -4996,16 +5021,23 @@ Object Script::GetNameOrSourceURL() { return name(); } -template <typename LocalIsolate> +template <typename IsolateT> MaybeHandle<SharedFunctionInfo> Script::FindSharedFunctionInfo( - LocalIsolate* isolate, int function_literal_id) { + Handle<Script> script, IsolateT* isolate, + FunctionLiteral* function_literal) { + int function_literal_id = function_literal->function_literal_id(); + if V8_UNLIKELY (script->type() == Script::TYPE_WEB_SNAPSHOT && + function_literal_id >= script->shared_function_info_count()) { + return FindWebSnapshotSharedFunctionInfo(script, isolate, function_literal); + } + CHECK_NE(function_literal_id, kFunctionLiteralIdInvalid); // If this check fails, the problem is most probably the function id // renumbering done by AstFunctionLiteralIdReindexer; in particular, that // AstTraversalVisitor doesn't recurse properly in the construct which // triggers the mismatch. - CHECK_LT(function_literal_id, shared_function_infos().length()); - MaybeObject shared = shared_function_infos().Get(function_literal_id); + CHECK_LT(function_literal_id, script->shared_function_info_count()); + MaybeObject shared = script->shared_function_infos().Get(function_literal_id); HeapObject heap_object; if (!shared->GetHeapObject(&heap_object) || heap_object.IsUndefined(isolate)) { @@ -5014,9 +5046,81 @@ MaybeHandle<SharedFunctionInfo> Script::FindSharedFunctionInfo( return handle(SharedFunctionInfo::cast(heap_object), isolate); } template MaybeHandle<SharedFunctionInfo> Script::FindSharedFunctionInfo( - Isolate* isolate, int function_literal_id); + Handle<Script> script, Isolate* isolate, FunctionLiteral* function_literal); template MaybeHandle<SharedFunctionInfo> Script::FindSharedFunctionInfo( - LocalIsolate* isolate, int function_literal_id); + Handle<Script> script, LocalIsolate* isolate, + FunctionLiteral* function_literal); + +MaybeHandle<SharedFunctionInfo> Script::FindWebSnapshotSharedFunctionInfo( + Handle<Script> script, Isolate* isolate, + FunctionLiteral* function_literal) { + // We might be able to de-dupe the SFI against a SFI that was + // created when deserializing the snapshot (or when calling a function which + // was included in the snapshot). In that case, we can find it based on the + // start position in shared_function_info_table. + Handle<ObjectHashTable> shared_function_info_table = handle( + ObjectHashTable::cast(script->shared_function_info_table()), isolate); + { + DisallowHeapAllocation no_gc; + Object index_object = shared_function_info_table->Lookup( + handle(Smi::FromInt(function_literal->start_position()), isolate)); + if (!index_object.IsTheHole()) { + int index = Smi::cast(index_object).value(); + DCHECK_LT(index, script->shared_function_info_count()); + MaybeObject maybe_shared = script->shared_function_infos().Get(index); + HeapObject heap_object; + if (!maybe_shared->GetHeapObject(&heap_object)) { + // We found the correct location but it's not filled in (e.g., the weak + // pointer to the SharedFunctionInfo has been cleared). Record the + // location in the FunctionLiteral, so that it will be refilled later. + // SharedFunctionInfo::SetScript will write the SharedFunctionInfo in + // the shared_function_infos. + function_literal->set_function_literal_id(index); + return MaybeHandle<SharedFunctionInfo>(); + } + SharedFunctionInfo shared = SharedFunctionInfo::cast(heap_object); + DCHECK_EQ(shared.StartPosition(), function_literal->start_position()); + DCHECK_EQ(shared.EndPosition(), function_literal->end_position()); + return handle(shared, isolate); + } + } + + // It's possible that FunctionLiterals which were processed before this one + // were deduplicated against existing ones. Decrease function_literal_id to + // avoid holes in shared_function_infos. + int old_length = script->shared_function_info_count(); + int function_literal_id = old_length; + function_literal->set_function_literal_id(function_literal_id); + + // Also add to shared_function_info_table. + shared_function_info_table = ObjectHashTable::Put( + shared_function_info_table, + handle(Smi::FromInt(function_literal->start_position()), isolate), + handle(Smi::FromInt(function_literal_id), isolate)); + script->set_shared_function_info_table(*shared_function_info_table); + + // Grow shared_function_infos if needed (we don't know the correct amount of + // space needed upfront). + int new_length = old_length + 1; + Handle<WeakFixedArray> old_infos = + handle(script->shared_function_infos(), isolate); + if (new_length > old_infos->length()) { + int capacity = WeakArrayList::CapacityForLength(new_length); + Handle<WeakFixedArray> new_infos( + isolate->factory()->NewWeakFixedArray(capacity, AllocationType::kOld)); + new_infos->CopyElements(isolate, 0, *old_infos, 0, old_length, + WriteBarrierMode::UPDATE_WRITE_BARRIER); + script->set_shared_function_infos(*new_infos); + } + return MaybeHandle<SharedFunctionInfo>(); +} + +MaybeHandle<SharedFunctionInfo> Script::FindWebSnapshotSharedFunctionInfo( + Handle<Script> script, LocalIsolate* isolate, + FunctionLiteral* function_literal) { + // Off-thread serialization of web snapshots is not implemented. + UNREACHABLE(); +} Script::Iterator::Iterator(Isolate* isolate) : iterator_(isolate->heap()->script_list()) {} @@ -5036,13 +5140,13 @@ void JSArray::Initialize(Handle<JSArray> array, int capacity, int length) { array, length, capacity, INITIALIZE_ARRAY_ELEMENTS_WITH_HOLE); } -void JSArray::SetLength(Handle<JSArray> array, uint32_t new_length) { +Maybe<bool> JSArray::SetLength(Handle<JSArray> array, uint32_t new_length) { // We should never end in here with a pixel or external array. DCHECK(array->AllowsSetLength()); if (array->SetLengthWouldNormalize(new_length)) { JSObject::NormalizeElements(array); } - array->GetElementsAccessor()->SetLength(array, new_length); + return array->GetElementsAccessor()->SetLength(array, new_length); } // ES6: 9.5.2 [[SetPrototypeOf]] (V) @@ -5508,8 +5612,9 @@ Handle<Object> JSPromise::TriggerPromiseReactions(Isolate* isolate, static_cast<int>( PromiseReactionJobTask::kSizeOfAllPromiseReactionJobTasks)); if (type == PromiseReaction::kFulfill) { - task->synchronized_set_map( - ReadOnlyRoots(isolate).promise_fulfill_reaction_job_task_map()); + task->set_map( + ReadOnlyRoots(isolate).promise_fulfill_reaction_job_task_map(), + kReleaseStore); Handle<PromiseFulfillReactionJobTask>::cast(task)->set_argument( *argument); Handle<PromiseFulfillReactionJobTask>::cast(task)->set_context( @@ -5528,8 +5633,9 @@ Handle<Object> JSPromise::TriggerPromiseReactions(Isolate* isolate, kContinuationPreservedEmbedderDataOffset)); } else { DisallowGarbageCollection no_gc; - task->synchronized_set_map( - ReadOnlyRoots(isolate).promise_reject_reaction_job_task_map()); + task->set_map( + ReadOnlyRoots(isolate).promise_reject_reaction_job_task_map(), + kReleaseStore); Handle<PromiseRejectReactionJobTask>::cast(task)->set_argument(*argument); Handle<PromiseRejectReactionJobTask>::cast(task)->set_context( *handler_context); @@ -5568,9 +5674,9 @@ void HashTable<Derived, Shape>::IterateElements(ObjectVisitor* v) { } template <typename Derived, typename Shape> -template <typename LocalIsolate> +template <typename IsolateT> Handle<Derived> HashTable<Derived, Shape>::New( - LocalIsolate* isolate, int at_least_space_for, AllocationType allocation, + IsolateT* isolate, int at_least_space_for, AllocationType allocation, MinimumCapacity capacity_option) { DCHECK_LE(0, at_least_space_for); DCHECK_IMPLIES(capacity_option == USE_CUSTOM_MINIMUM_CAPACITY, @@ -5586,9 +5692,9 @@ Handle<Derived> HashTable<Derived, Shape>::New( } template <typename Derived, typename Shape> -template <typename LocalIsolate> +template <typename IsolateT> Handle<Derived> HashTable<Derived, Shape>::NewInternal( - LocalIsolate* isolate, int capacity, AllocationType allocation) { + IsolateT* isolate, int capacity, AllocationType allocation) { auto* factory = isolate->factory(); int length = EntryToIndex(InternalIndex(capacity)); Handle<FixedArray> array = factory->NewFixedArrayWithMap( @@ -5718,9 +5824,9 @@ void HashTable<Derived, Shape>::Rehash(PtrComprCageBase cage_base) { } template <typename Derived, typename Shape> -template <typename LocalIsolate> +template <typename IsolateT> Handle<Derived> HashTable<Derived, Shape>::EnsureCapacity( - LocalIsolate* isolate, Handle<Derived> table, int n, + IsolateT* isolate, Handle<Derived> table, int n, AllocationType allocation) { if (table->HasSufficientCapacityToAdd(n)) return table; @@ -5851,9 +5957,9 @@ Handle<ObjectHashSet> ObjectHashSet::Add(Isolate* isolate, } template <typename Derived, typename Shape> -template <typename LocalIsolate> +template <typename IsolateT> Handle<Derived> BaseNameDictionary<Derived, Shape>::New( - LocalIsolate* isolate, int at_least_space_for, AllocationType allocation, + IsolateT* isolate, int at_least_space_for, AllocationType allocation, MinimumCapacity capacity_option) { DCHECK_LE(0, at_least_space_for); Handle<Derived> dict = Dictionary<Derived, Shape>::New( @@ -5925,10 +6031,10 @@ Handle<Derived> Dictionary<Derived, Shape>::AtPut(Isolate* isolate, } template <typename Derived, typename Shape> -template <typename LocalIsolate> +template <typename IsolateT> Handle<Derived> BaseNameDictionary<Derived, Shape>::AddNoUpdateNextEnumerationIndex( - LocalIsolate* isolate, Handle<Derived> dictionary, Key key, + IsolateT* isolate, Handle<Derived> dictionary, Key key, Handle<Object> value, PropertyDetails details, InternalIndex* entry_out) { // Insert element at empty or deleted entry. return Dictionary<Derived, Shape>::Add(isolate, dictionary, key, value, @@ -5954,8 +6060,8 @@ Handle<Derived> BaseNameDictionary<Derived, Shape>::Add( } template <typename Derived, typename Shape> -template <typename LocalIsolate> -Handle<Derived> Dictionary<Derived, Shape>::Add(LocalIsolate* isolate, +template <typename IsolateT> +Handle<Derived> Dictionary<Derived, Shape>::Add(IsolateT* isolate, Handle<Derived> dictionary, Key key, Handle<Object> value, PropertyDetails details, @@ -6576,17 +6682,33 @@ AccessCheckInfo AccessCheckInfo::Get(Isolate* isolate, return AccessCheckInfo::cast(data_obj); } -MaybeHandle<Name> FunctionTemplateInfo::TryGetCachedPropertyName( - Isolate* isolate, Handle<Object> getter) { - if (getter->IsFunctionTemplateInfo()) { - Handle<FunctionTemplateInfo> fti = - Handle<FunctionTemplateInfo>::cast(getter); - // Check if the accessor uses a cached property. - if (!fti->cached_property_name().IsTheHole(isolate)) { - return handle(Name::cast(fti->cached_property_name()), isolate); - } - } - return MaybeHandle<Name>(); +base::Optional<Name> FunctionTemplateInfo::TryGetCachedPropertyName( + Isolate* isolate, Object getter) { + DisallowGarbageCollection no_gc; + if (!getter.IsFunctionTemplateInfo()) return {}; + // Check if the accessor uses a cached property. + Object maybe_name = FunctionTemplateInfo::cast(getter).cached_property_name(); + if (maybe_name.IsTheHole(isolate)) return {}; + return Name::cast(maybe_name); +} + +int FunctionTemplateInfo::GetCFunctionsCount() const { + i::DisallowHeapAllocation no_gc; + return FixedArray::cast(GetCFunctionOverloads()).length() / + kFunctionOverloadEntrySize; +} + +Address FunctionTemplateInfo::GetCFunction(int index) const { + i::DisallowHeapAllocation no_gc; + return v8::ToCData<Address>(FixedArray::cast(GetCFunctionOverloads()) + .get(index * kFunctionOverloadEntrySize)); +} + +const CFunctionInfo* FunctionTemplateInfo::GetCSignature(int index) const { + i::DisallowHeapAllocation no_gc; + return v8::ToCData<CFunctionInfo*>( + FixedArray::cast(GetCFunctionOverloads()) + .get(index * kFunctionOverloadEntrySize + 1)); } Address Smi::LexicographicCompare(Isolate* isolate, Smi x, Smi y) { diff --git a/deps/v8/src/objects/objects.h b/deps/v8/src/objects/objects.h index e4532bb0e5..e80098dfe8 100644 --- a/deps/v8/src/objects/objects.h +++ b/deps/v8/src/objects/objects.h @@ -602,7 +602,7 @@ class Object : public TaggedImpl<HeapObjectReferenceType::STRONG, Address> { // Prints this object without details to a message accumulator. V8_EXPORT_PRIVATE void ShortPrint(StringStream* accumulator) const; - V8_EXPORT_PRIVATE void ShortPrint(std::ostream& os) const; // NOLINT + V8_EXPORT_PRIVATE void ShortPrint(std::ostream& os) const; inline static Object cast(Object object) { return object; } inline static Object unchecked_cast(Object object) { return object; } @@ -615,10 +615,10 @@ class Object : public TaggedImpl<HeapObjectReferenceType::STRONG, Address> { V8_EXPORT_PRIVATE void Print() const; // Prints this object with details. - V8_EXPORT_PRIVATE void Print(std::ostream& os) const; // NOLINT + V8_EXPORT_PRIVATE void Print(std::ostream& os) const; #else void Print() const { ShortPrint(); } - void Print(std::ostream& os) const { ShortPrint(os); } // NOLINT + void Print(std::ostream& os) const { ShortPrint(os); } #endif // For use with std::unordered_set. @@ -673,8 +673,7 @@ class Object : public TaggedImpl<HeapObjectReferenceType::STRONG, Address> { inline void InitExternalPointerField(size_t offset, Isolate* isolate); inline void InitExternalPointerField(size_t offset, Isolate* isolate, Address value, ExternalPointerTag tag); - inline Address ReadExternalPointerField(size_t offset, - PtrComprCageBase isolate_root, + inline Address ReadExternalPointerField(size_t offset, Isolate* isolate, ExternalPointerTag tag) const; inline void WriteExternalPointerField(size_t offset, Isolate* isolate, Address value, ExternalPointerTag tag); @@ -778,6 +777,23 @@ class MapWord { inline Address ptr() { return value_; } +#ifdef V8_MAP_PACKING + static constexpr Address Pack(Address map) { + return map ^ Internals::kMapWordXorMask; + } + static constexpr Address Unpack(Address mapword) { + // TODO(wenyuzhao): Clear header metadata. + return mapword ^ Internals::kMapWordXorMask; + } + static constexpr bool IsPacked(Address mapword) { + return (static_cast<intptr_t>(mapword) & Internals::kMapWordXorMask) == + Internals::kMapWordSignature && + (0xffffffff00000000 & static_cast<intptr_t>(mapword)) != 0; + } +#else + static constexpr bool IsPacked(Address) { return false; } +#endif + private: // HeapObject calls the private constructor and directly reads the value. friend class HeapObject; diff --git a/deps/v8/src/objects/ordered-hash-table.cc b/deps/v8/src/objects/ordered-hash-table.cc index a19217878d..c6754db937 100644 --- a/deps/v8/src/objects/ordered-hash-table.cc +++ b/deps/v8/src/objects/ordered-hash-table.cc @@ -16,9 +16,9 @@ namespace v8 { namespace internal { template <class Derived, int entrysize> -template <typename LocalIsolate> +template <typename IsolateT> MaybeHandle<Derived> OrderedHashTable<Derived, entrysize>::Allocate( - LocalIsolate* isolate, int capacity, AllocationType allocation) { + IsolateT* isolate, int capacity, AllocationType allocation) { // Capacity must be a power of two, since we depend on being able // to divide and multiple by 2 (kLoadFactor) to derive capacity // from number of buckets. If we decide to change kLoadFactor @@ -63,9 +63,9 @@ MaybeHandle<Derived> OrderedHashTable<Derived, entrysize>::AllocateEmpty( } template <class Derived, int entrysize> -template <typename LocalIsolate> +template <typename IsolateT> MaybeHandle<Derived> OrderedHashTable<Derived, entrysize>::EnsureGrowable( - LocalIsolate* isolate, Handle<Derived> table) { + IsolateT* isolate, Handle<Derived> table) { DCHECK(!table->IsObsolete()); int nof = table->NumberOfElements(); @@ -238,17 +238,17 @@ HeapObject OrderedHashMap::GetEmpty(ReadOnlyRoots ro_roots) { } template <class Derived, int entrysize> -template <typename LocalIsolate> +template <typename IsolateT> MaybeHandle<Derived> OrderedHashTable<Derived, entrysize>::Rehash( - LocalIsolate* isolate, Handle<Derived> table) { + IsolateT* isolate, Handle<Derived> table) { return OrderedHashTable<Derived, entrysize>::Rehash(isolate, table, table->Capacity()); } template <class Derived, int entrysize> -template <typename LocalIsolate> +template <typename IsolateT> MaybeHandle<Derived> OrderedHashTable<Derived, entrysize>::Rehash( - LocalIsolate* isolate, Handle<Derived> table, int new_capacity) { + IsolateT* isolate, Handle<Derived> table, int new_capacity) { DCHECK(!table->IsObsolete()); MaybeHandle<Derived> new_table_candidate = @@ -320,10 +320,9 @@ MaybeHandle<OrderedHashMap> OrderedHashMap::Rehash(Isolate* isolate, return Base::Rehash(isolate, table, new_capacity); } -template <typename LocalIsolate> +template <typename IsolateT> MaybeHandle<OrderedNameDictionary> OrderedNameDictionary::Rehash( - LocalIsolate* isolate, Handle<OrderedNameDictionary> table, - int new_capacity) { + IsolateT* isolate, Handle<OrderedNameDictionary> table, int new_capacity) { MaybeHandle<OrderedNameDictionary> new_table_candidate = Base::Rehash(isolate, table, new_capacity); Handle<OrderedNameDictionary> new_table; @@ -407,9 +406,8 @@ MaybeHandle<OrderedHashMap> OrderedHashMap::Add(Isolate* isolate, return table; } -template <typename LocalIsolate> -InternalIndex OrderedNameDictionary::FindEntry(LocalIsolate* isolate, - Object key) { +template <typename IsolateT> +InternalIndex OrderedNameDictionary::FindEntry(IsolateT* isolate, Object key) { DisallowGarbageCollection no_gc; DCHECK(key.IsUniqueName()); @@ -438,10 +436,10 @@ InternalIndex OrderedNameDictionary::FindEntry(LocalIsolate* isolate, return InternalIndex::NotFound(); } -template <typename LocalIsolate> +template <typename IsolateT> MaybeHandle<OrderedNameDictionary> OrderedNameDictionary::Add( - LocalIsolate* isolate, Handle<OrderedNameDictionary> table, - Handle<Name> key, Handle<Object> value, PropertyDetails details) { + IsolateT* isolate, Handle<OrderedNameDictionary> table, Handle<Name> key, + Handle<Object> value, PropertyDetails details) { DCHECK(key->IsUniqueName()); DCHECK(table->FindEntry(isolate, *key).is_not_found()); @@ -505,21 +503,21 @@ Handle<OrderedNameDictionary> OrderedNameDictionary::DeleteEntry( return Shrink(isolate, table); } -template <typename LocalIsolate> +template <typename IsolateT> MaybeHandle<OrderedHashSet> OrderedHashSet::Allocate( - LocalIsolate* isolate, int capacity, AllocationType allocation) { + IsolateT* isolate, int capacity, AllocationType allocation) { return Base::Allocate(isolate, capacity, allocation); } -template <typename LocalIsolate> +template <typename IsolateT> MaybeHandle<OrderedHashMap> OrderedHashMap::Allocate( - LocalIsolate* isolate, int capacity, AllocationType allocation) { + IsolateT* isolate, int capacity, AllocationType allocation) { return Base::Allocate(isolate, capacity, allocation); } -template <typename LocalIsolate> +template <typename IsolateT> MaybeHandle<OrderedNameDictionary> OrderedNameDictionary::Allocate( - LocalIsolate* isolate, int capacity, AllocationType allocation) { + IsolateT* isolate, int capacity, AllocationType allocation) { MaybeHandle<OrderedNameDictionary> table_candidate = Base::Allocate(isolate, capacity, allocation); Handle<OrderedNameDictionary> table; diff --git a/deps/v8/src/objects/ordered-hash-table.h b/deps/v8/src/objects/ordered-hash-table.h index 1746e2dc89..1110352e46 100644 --- a/deps/v8/src/objects/ordered-hash-table.h +++ b/deps/v8/src/objects/ordered-hash-table.h @@ -67,8 +67,8 @@ class OrderedHashTable : public FixedArray { public: // Returns an OrderedHashTable (possibly |table|) with enough space // to add at least one new element. - template <typename LocalIsolate> - static MaybeHandle<Derived> EnsureGrowable(LocalIsolate* isolate, + template <typename IsolateT> + static MaybeHandle<Derived> EnsureGrowable(IsolateT* isolate, Handle<Derived> table); // Returns an OrderedHashTable (possibly |table|) that's shrunken @@ -200,21 +200,20 @@ class OrderedHashTable : public FixedArray { protected: // Returns an OrderedHashTable with a capacity of at least |capacity|. - template <typename LocalIsolate> + template <typename IsolateT> static MaybeHandle<Derived> Allocate( - LocalIsolate* isolate, int capacity, + IsolateT* isolate, int capacity, AllocationType allocation = AllocationType::kYoung); static MaybeHandle<Derived> AllocateEmpty(Isolate* isolate, AllocationType allocation, RootIndex root_ndex); - template <typename LocalIsolate> - static MaybeHandle<Derived> Rehash(LocalIsolate* isolate, - Handle<Derived> table); - template <typename LocalIsolate> - static MaybeHandle<Derived> Rehash(LocalIsolate* isolate, - Handle<Derived> table, int new_capacity); + template <typename IsolateT> + static MaybeHandle<Derived> Rehash(IsolateT* isolate, Handle<Derived> table); + template <typename IsolateT> + static MaybeHandle<Derived> Rehash(IsolateT* isolate, Handle<Derived> table, + int new_capacity); int HashToEntryRaw(int hash) { int bucket = HashToBucket(hash); @@ -287,9 +286,9 @@ class V8_EXPORT_PRIVATE OrderedHashSet int new_capacity); static MaybeHandle<OrderedHashSet> Rehash(Isolate* isolate, Handle<OrderedHashSet> table); - template <typename LocalIsolate> + template <typename IsolateT> static MaybeHandle<OrderedHashSet> Allocate( - LocalIsolate* isolate, int capacity, + IsolateT* isolate, int capacity, AllocationType allocation = AllocationType::kYoung); static MaybeHandle<OrderedHashSet> AllocateEmpty( @@ -318,9 +317,9 @@ class V8_EXPORT_PRIVATE OrderedHashMap Handle<Object> key, Handle<Object> value); - template <typename LocalIsolate> + template <typename IsolateT> static MaybeHandle<OrderedHashMap> Allocate( - LocalIsolate* isolate, int capacity, + IsolateT* isolate, int capacity, AllocationType allocation = AllocationType::kYoung); static MaybeHandle<OrderedHashMap> AllocateEmpty( @@ -761,24 +760,24 @@ class V8_EXPORT_PRIVATE OrderedNameDictionary DECL_CAST(OrderedNameDictionary) DECL_PRINTER(OrderedNameDictionary) - template <typename LocalIsolate> + template <typename IsolateT> static MaybeHandle<OrderedNameDictionary> Add( - LocalIsolate* isolate, Handle<OrderedNameDictionary> table, - Handle<Name> key, Handle<Object> value, PropertyDetails details); + IsolateT* isolate, Handle<OrderedNameDictionary> table, Handle<Name> key, + Handle<Object> value, PropertyDetails details); void SetEntry(InternalIndex entry, Object key, Object value, PropertyDetails details); - template <typename LocalIsolate> - InternalIndex FindEntry(LocalIsolate* isolate, Object key); + template <typename IsolateT> + InternalIndex FindEntry(IsolateT* isolate, Object key); // This is to make the interfaces of NameDictionary::FindEntry and // OrderedNameDictionary::FindEntry compatible. // TODO(emrich) clean this up: NameDictionary uses Handle<Object> // for FindEntry keys due to its Key typedef, but that's also used // for adding, where we do need handles. - template <typename LocalIsolate> - InternalIndex FindEntry(LocalIsolate* isolate, Handle<Object> key) { + template <typename IsolateT> + InternalIndex FindEntry(IsolateT* isolate, Handle<Object> key) { return FindEntry(isolate, *key); } @@ -786,18 +785,17 @@ class V8_EXPORT_PRIVATE OrderedNameDictionary Isolate* isolate, Handle<OrderedNameDictionary> table, InternalIndex entry); - template <typename LocalIsolate> + template <typename IsolateT> static MaybeHandle<OrderedNameDictionary> Allocate( - LocalIsolate* isolate, int capacity, + IsolateT* isolate, int capacity, AllocationType allocation = AllocationType::kYoung); static MaybeHandle<OrderedNameDictionary> AllocateEmpty( Isolate* isolate, AllocationType allocation = AllocationType::kReadOnly); - template <typename LocalIsolate> + template <typename IsolateT> static MaybeHandle<OrderedNameDictionary> Rehash( - LocalIsolate* isolate, Handle<OrderedNameDictionary> table, - int new_capacity); + IsolateT* isolate, Handle<OrderedNameDictionary> table, int new_capacity); // Returns the value for entry. inline Object ValueAt(InternalIndex entry); diff --git a/deps/v8/src/objects/property-array-inl.h b/deps/v8/src/objects/property-array-inl.h index fe884b043f..b51b0d5f2d 100644 --- a/deps/v8/src/objects/property-array-inl.h +++ b/deps/v8/src/objects/property-array-inl.h @@ -22,7 +22,8 @@ OBJECT_CONSTRUCTORS_IMPL(PropertyArray, HeapObject) CAST_ACCESSOR(PropertyArray) SMI_ACCESSORS(PropertyArray, length_and_hash, kLengthAndHashOffset) -SYNCHRONIZED_SMI_ACCESSORS(PropertyArray, length_and_hash, kLengthAndHashOffset) +RELEASE_ACQUIRE_SMI_ACCESSORS(PropertyArray, length_and_hash, + kLengthAndHashOffset) Object PropertyArray::get(int index) const { PtrComprCageBase cage_base = GetPtrComprCageBase(*this); @@ -64,8 +65,8 @@ void PropertyArray::initialize_length(int len) { set_length_and_hash(len); } -int PropertyArray::synchronized_length() const { - return LengthField::decode(synchronized_length_and_hash()); +int PropertyArray::length(AcquireLoadTag) const { + return LengthField::decode(length_and_hash(kAcquireLoad)); } int PropertyArray::Hash() const { return HashField::decode(length_and_hash()); } diff --git a/deps/v8/src/objects/property-array.h b/deps/v8/src/objects/property-array.h index f4cc5c9fb1..8ee51982c0 100644 --- a/deps/v8/src/objects/property-array.h +++ b/deps/v8/src/objects/property-array.h @@ -18,9 +18,7 @@ class PropertyArray : public HeapObject { public: // [length]: length of the array. inline int length() const; - - // Get the length using acquire loads. - inline int synchronized_length() const; + inline int length(AcquireLoadTag) const; // This is only used on a newly allocated PropertyArray which // doesn't have an existing hash. @@ -70,7 +68,7 @@ class PropertyArray : public HeapObject { private: DECL_INT_ACCESSORS(length_and_hash) - DECL_SYNCHRONIZED_INT_ACCESSORS(length_and_hash) + DECL_RELEASE_ACQUIRE_INT_ACCESSORS(length_and_hash) OBJECT_CONSTRUCTORS(PropertyArray, HeapObject); }; diff --git a/deps/v8/src/objects/scope-info.cc b/deps/v8/src/objects/scope-info.cc index 308b57a309..67a64e873a 100644 --- a/deps/v8/src/objects/scope-info.cc +++ b/deps/v8/src/objects/scope-info.cc @@ -57,9 +57,8 @@ bool ScopeInfo::Equals(ScopeInfo other) const { #endif // static -template <typename LocalIsolate> -Handle<ScopeInfo> ScopeInfo::Create(LocalIsolate* isolate, Zone* zone, - Scope* scope, +template <typename IsolateT> +Handle<ScopeInfo> ScopeInfo::Create(IsolateT* isolate, Zone* zone, Scope* scope, MaybeHandle<ScopeInfo> outer_scope) { // Collect variables. int context_local_count = 0; @@ -1078,8 +1077,8 @@ std::ostream& operator<<(std::ostream& os, VariableAllocationInfo var_info) { return os; } -template <typename LocalIsolate> -Handle<ModuleRequest> ModuleRequest::New(LocalIsolate* isolate, +template <typename IsolateT> +Handle<ModuleRequest> ModuleRequest::New(IsolateT* isolate, Handle<String> specifier, Handle<FixedArray> import_assertions, int position) { @@ -1098,9 +1097,9 @@ template Handle<ModuleRequest> ModuleRequest::New( LocalIsolate* isolate, Handle<String> specifier, Handle<FixedArray> import_assertions, int position); -template <typename LocalIsolate> +template <typename IsolateT> Handle<SourceTextModuleInfoEntry> SourceTextModuleInfoEntry::New( - LocalIsolate* isolate, Handle<PrimitiveHeapObject> export_name, + IsolateT* isolate, Handle<PrimitiveHeapObject> export_name, Handle<PrimitiveHeapObject> local_name, Handle<PrimitiveHeapObject> import_name, int module_request, int cell_index, int beg_pos, int end_pos) { @@ -1128,9 +1127,9 @@ template Handle<SourceTextModuleInfoEntry> SourceTextModuleInfoEntry::New( Handle<PrimitiveHeapObject> import_name, int module_request, int cell_index, int beg_pos, int end_pos); -template <typename LocalIsolate> +template <typename IsolateT> Handle<SourceTextModuleInfo> SourceTextModuleInfo::New( - LocalIsolate* isolate, Zone* zone, SourceTextModuleDescriptor* descr) { + IsolateT* isolate, Zone* zone, SourceTextModuleDescriptor* descr) { // Serialize module requests. int size = static_cast<int>(descr->module_requests().size()); Handle<FixedArray> module_requests = isolate->factory()->NewFixedArray(size); diff --git a/deps/v8/src/objects/scope-info.h b/deps/v8/src/objects/scope-info.h index 57e5d2e308..c90f6bfed9 100644 --- a/deps/v8/src/objects/scope-info.h +++ b/deps/v8/src/objects/scope-info.h @@ -213,19 +213,18 @@ class ScopeInfo : public TorqueGeneratedScopeInfo<ScopeInfo, HeapObject> { // closest outer class when resolving private names. bool PrivateNameLookupSkipsOuterClass() const; - // REPL mode scopes allow re-declaraction of let variables. They come from - // debug evaluate but are different to IsDebugEvaluateScope(). + // REPL mode scopes allow re-declaraction of let and const variables. They + // come from debug evaluate but are different to IsDebugEvaluateScope(). bool IsReplModeScope() const; #ifdef DEBUG bool Equals(ScopeInfo other) const; #endif - template <typename LocalIsolate> - static Handle<ScopeInfo> Create(LocalIsolate* isolate, Zone* zone, - Scope* scope, + template <typename IsolateT> + static Handle<ScopeInfo> Create(IsolateT* isolate, Zone* zone, Scope* scope, MaybeHandle<ScopeInfo> outer_scope); - static Handle<ScopeInfo> CreateForWithScope( + V8_EXPORT_PRIVATE static Handle<ScopeInfo> CreateForWithScope( Isolate* isolate, MaybeHandle<ScopeInfo> outer_scope); V8_EXPORT_PRIVATE static Handle<ScopeInfo> CreateForEmptyFunction( Isolate* isolate); @@ -314,7 +313,7 @@ class ScopeInfo : public TorqueGeneratedScopeInfo<ScopeInfo, HeapObject> { } static constexpr int ConvertOffsetToIndex(int offset) { int index = (offset - HeapObject::kHeaderSize) / kTaggedSize; - CONSTEXPR_DCHECK(OffsetOfElementAt(index) == offset); + DCHECK_EQ(OffsetOfElementAt(index), offset); return index; } diff --git a/deps/v8/src/objects/script-inl.h b/deps/v8/src/objects/script-inl.h index b1e226a046..4dd8bed382 100644 --- a/deps/v8/src/objects/script-inl.h +++ b/deps/v8/src/objects/script-inl.h @@ -25,7 +25,7 @@ NEVER_READ_ONLY_SPACE_IMPL(Script) #if V8_ENABLE_WEBASSEMBLY ACCESSORS_CHECKED(Script, wasm_breakpoint_infos, FixedArray, - kEvalFromSharedOrWrappedArgumentsOffset, + kEvalFromSharedOrWrappedArgumentsOrSfiTableOffset, this->type() == TYPE_WASM) ACCESSORS_CHECKED(Script, wasm_managed_native_module, Object, kEvalFromPositionOffset, this->type() == TYPE_WASM) @@ -37,40 +37,59 @@ ACCESSORS_CHECKED(Script, wasm_weak_instance_list, WeakArrayList, #endif // V8_ENABLE_WEBASSEMBLY SMI_ACCESSORS(Script, type, kScriptTypeOffset) -ACCESSORS_CHECKED(Script, eval_from_shared_or_wrapped_arguments, Object, - kEvalFromSharedOrWrappedArgumentsOffset, +ACCESSORS_CHECKED(Script, eval_from_shared_or_wrapped_arguments_or_sfi_table, + Object, kEvalFromSharedOrWrappedArgumentsOrSfiTableOffset, CHECK_SCRIPT_NOT_WASM) SMI_ACCESSORS_CHECKED(Script, eval_from_position, kEvalFromPositionOffset, CHECK_SCRIPT_NOT_WASM) #undef CHECK_SCRIPT_NOT_WASM bool Script::is_wrapped() const { - return eval_from_shared_or_wrapped_arguments().IsFixedArray(); + return eval_from_shared_or_wrapped_arguments_or_sfi_table().IsFixedArray() && + type() != TYPE_WEB_SNAPSHOT; } bool Script::has_eval_from_shared() const { - return eval_from_shared_or_wrapped_arguments().IsSharedFunctionInfo(); + return eval_from_shared_or_wrapped_arguments_or_sfi_table() + .IsSharedFunctionInfo(); } void Script::set_eval_from_shared(SharedFunctionInfo shared, WriteBarrierMode mode) { DCHECK(!is_wrapped()); - set_eval_from_shared_or_wrapped_arguments(shared, mode); + DCHECK_NE(type(), TYPE_WEB_SNAPSHOT); + set_eval_from_shared_or_wrapped_arguments_or_sfi_table(shared, mode); } SharedFunctionInfo Script::eval_from_shared() const { DCHECK(has_eval_from_shared()); - return SharedFunctionInfo::cast(eval_from_shared_or_wrapped_arguments()); + return SharedFunctionInfo::cast( + eval_from_shared_or_wrapped_arguments_or_sfi_table()); } void Script::set_wrapped_arguments(FixedArray value, WriteBarrierMode mode) { DCHECK(!has_eval_from_shared()); - set_eval_from_shared_or_wrapped_arguments(value, mode); + DCHECK_NE(type(), TYPE_WEB_SNAPSHOT); + set_eval_from_shared_or_wrapped_arguments_or_sfi_table(value, mode); } FixedArray Script::wrapped_arguments() const { DCHECK(is_wrapped()); - return FixedArray::cast(eval_from_shared_or_wrapped_arguments()); + return FixedArray::cast(eval_from_shared_or_wrapped_arguments_or_sfi_table()); +} + +void Script::set_shared_function_info_table(ObjectHashTable value, + WriteBarrierMode mode) { + DCHECK(!has_eval_from_shared()); + DCHECK(!is_wrapped()); + DCHECK_EQ(type(), TYPE_WEB_SNAPSHOT); + set_eval_from_shared_or_wrapped_arguments_or_sfi_table(value, mode); +} + +ObjectHashTable Script::shared_function_info_table() const { + DCHECK_EQ(type(), TYPE_WEB_SNAPSHOT); + return ObjectHashTable::cast( + eval_from_shared_or_wrapped_arguments_or_sfi_table()); } DEF_GETTER(Script, shared_function_infos, WeakFixedArray) { @@ -91,6 +110,15 @@ void Script::set_shared_function_infos(WeakFixedArray value, CONDITIONAL_WRITE_BARRIER(*this, kSharedFunctionInfosOffset, value, mode); } +int Script::shared_function_info_count() const { + if V8_UNLIKELY (type() == TYPE_WEB_SNAPSHOT) { + // +1 because the 0th element in shared_function_infos is reserved for the + // top-level SharedFunctionInfo which doesn't exist. + return shared_function_info_table().NumberOfElements() + 1; + } + return shared_function_infos().length(); +} + #if V8_ENABLE_WEBASSEMBLY bool Script::has_wasm_breakpoint_infos() const { return type() == TYPE_WASM && wasm_breakpoint_infos().length() > 0; diff --git a/deps/v8/src/objects/script.h b/deps/v8/src/objects/script.h index e487da7649..3d2ff73b99 100644 --- a/deps/v8/src/objects/script.h +++ b/deps/v8/src/objects/script.h @@ -20,6 +20,8 @@ namespace v8 { namespace internal { +class FunctionLiteral; + #include "torque-generated/src/objects/script-tq.inc" // Script describes a script which has been added to the VM. @@ -38,7 +40,8 @@ class Script : public TorqueGeneratedScript<Script, Struct> { #if V8_ENABLE_WEBASSEMBLY TYPE_WASM = 3, #endif // V8_ENABLE_WEBASSEMBLY - TYPE_INSPECTOR = 4 + TYPE_INSPECTOR = 4, + TYPE_WEB_SNAPSHOT = 5 }; // Script compilation types. @@ -53,7 +56,7 @@ class Script : public TorqueGeneratedScript<Script, Struct> { // [type]: the script type. DECL_INT_ACCESSORS(type) - DECL_ACCESSORS(eval_from_shared_or_wrapped_arguments, Object) + DECL_ACCESSORS(eval_from_shared_or_wrapped_arguments_or_sfi_table, Object) // [eval_from_shared]: for eval scripts the shared function info for the // function from which eval was called. @@ -62,6 +65,12 @@ class Script : public TorqueGeneratedScript<Script, Struct> { // [wrapped_arguments]: for the list of arguments in a wrapped script. DECL_ACCESSORS(wrapped_arguments, FixedArray) + // For web snapshots: a hash table mapping function positions to indices in + // shared_function_infos. + // TODO(v8:11525): Replace with a more efficient data structure mapping + // function positions to weak pointers to SharedFunctionInfos directly. + DECL_ACCESSORS(shared_function_info_table, ObjectHashTable) + // Whether the script is implicitly wrapped in a function. inline bool is_wrapped() const; @@ -78,6 +87,8 @@ class Script : public TorqueGeneratedScript<Script, Struct> { // function infos created from this script. DECL_ACCESSORS(shared_function_infos, WeakFixedArray) + inline int shared_function_info_count() const; + #if V8_ENABLE_WEBASSEMBLY // [wasm_breakpoint_infos]: the list of {BreakPointInfo} objects describing // all WebAssembly breakpoints for modules/instances managed via this script. @@ -137,9 +148,9 @@ class Script : public TorqueGeneratedScript<Script, Struct> { static int GetEvalPosition(Isolate* isolate, Handle<Script> script); // Init line_ends array with source code positions of line ends. - template <typename LocalIsolate> + template <typename IsolateT> EXPORT_TEMPLATE_DECLARE(V8_EXPORT_PRIVATE) - static void InitLineEnds(LocalIsolate* isolate, Handle<Script> script); + static void InitLineEnds(IsolateT* isolate, Handle<Script> script); // Carries information about a source position. struct PositionInfo { @@ -176,10 +187,19 @@ class Script : public TorqueGeneratedScript<Script, Struct> { int GetLineNumber(int code_pos) const; // Look through the list of existing shared function infos to find one - // that matches the function literal. Return empty handle if not found. - template <typename LocalIsolate> - MaybeHandle<SharedFunctionInfo> FindSharedFunctionInfo( - LocalIsolate* isolate, int function_literal_id); + // that matches the function literal. Return empty handle if not found. + template <typename IsolateT> + static MaybeHandle<SharedFunctionInfo> FindSharedFunctionInfo( + Handle<Script> script, IsolateT* isolate, + FunctionLiteral* function_literal); + + static MaybeHandle<SharedFunctionInfo> FindWebSnapshotSharedFunctionInfo( + Handle<Script> script, Isolate* isolate, + FunctionLiteral* function_literal); + + static MaybeHandle<SharedFunctionInfo> FindWebSnapshotSharedFunctionInfo( + Handle<Script> script, LocalIsolate* isolate, + FunctionLiteral* function_literal); // Iterate over all script objects on the heap. class V8_EXPORT_PRIVATE Iterator { diff --git a/deps/v8/src/objects/script.tq b/deps/v8/src/objects/script.tq index dac25360cb..36a70dede5 100644 --- a/deps/v8/src/objects/script.tq +++ b/deps/v8/src/objects/script.tq @@ -40,8 +40,12 @@ extern class Script extends Struct { // [id]: the script id. id: Smi; - eval_from_shared_or_wrapped_arguments: SharedFunctionInfo|FixedArray| - Undefined; + // For scripts originating from eval: the SharedFunctionInfo contains the SFI + // for the script. For scripts wrapped as functions: the FixedArray contains + // the arguments. For web snapshots: the ObjectHashTable maps function start + // position to SFI index in shared_function_infos. + eval_from_shared_or_wrapped_arguments_or_sfi_table: SharedFunctionInfo| + FixedArray|ObjectHashTable|Undefined; eval_from_position: Smi|Foreign; // Smi or Managed<wasm::NativeModule> shared_function_infos: WeakFixedArray|WeakArrayList; diff --git a/deps/v8/src/objects/shared-function-info-inl.h b/deps/v8/src/objects/shared-function-info-inl.h index c125b01a3d..3bc0f70572 100644 --- a/deps/v8/src/objects/shared-function-info-inl.h +++ b/deps/v8/src/objects/shared-function-info-inl.h @@ -166,8 +166,8 @@ bool SharedFunctionInfo::needs_script_context() const { return is_script() && scope_info().ContextLocalCount() > 0; } -template <typename LocalIsolate> -AbstractCode SharedFunctionInfo::abstract_code(LocalIsolate* isolate) { +template <typename IsolateT> +AbstractCode SharedFunctionInfo::abstract_code(IsolateT* isolate) { // TODO(v8:11429): Decide if this return bytecode or baseline code, when the // latter is present. if (HasBytecodeArray()) { @@ -186,9 +186,8 @@ int SharedFunctionInfo::function_token_position() const { } } -template <typename LocalIsolate> -bool SharedFunctionInfo::AreSourcePositionsAvailable( - LocalIsolate* isolate) const { +template <typename IsolateT> +bool SharedFunctionInfo::AreSourcePositionsAvailable(IsolateT* isolate) const { if (FLAG_enable_lazy_source_positions) { return !HasBytecodeArray() || GetBytecodeArray(isolate).HasSourcePositionTable(); @@ -196,9 +195,9 @@ bool SharedFunctionInfo::AreSourcePositionsAvailable( return true; } -template <typename LocalIsolate> +template <typename IsolateT> SharedFunctionInfo::Inlineability SharedFunctionInfo::GetInlineability( - LocalIsolate* isolate) const { + IsolateT* isolate) const { if (!script().IsScript()) return kHasNoScript; if (GetIsolate()->is_precise_binary_code_coverage() && @@ -235,9 +234,6 @@ BIT_FIELD_ACCESSORS(SharedFunctionInfo, flags2, has_static_private_methods_or_accessors, SharedFunctionInfo::HasStaticPrivateMethodsOrAccessorsBit) -BIT_FIELD_ACCESSORS(SharedFunctionInfo, flags2, may_have_cached_code, - SharedFunctionInfo::MayHaveCachedCodeBit) - BIT_FIELD_ACCESSORS(SharedFunctionInfo, flags, syntax_kind, SharedFunctionInfo::FunctionSyntaxKindBits) @@ -453,9 +449,8 @@ bool SharedFunctionInfo::is_compiled() const { !data.IsUncompiledData(); } -template <typename LocalIsolate> -IsCompiledScope SharedFunctionInfo::is_compiled_scope( - LocalIsolate* isolate) const { +template <typename IsolateT> +IsCompiledScope SharedFunctionInfo::is_compiled_scope(IsolateT* isolate) const { return IsCompiledScope(*this, isolate); } @@ -497,10 +492,9 @@ bool SharedFunctionInfo::HasBytecodeArray() const { data.IsBaselineData(); } -template <typename LocalIsolate> -BytecodeArray SharedFunctionInfo::GetBytecodeArray( - LocalIsolate* isolate) const { - SharedMutexGuardIfOffThread<LocalIsolate, base::kShared> mutex_guard( +template <typename IsolateT> +BytecodeArray SharedFunctionInfo::GetBytecodeArray(IsolateT* isolate) const { + SharedMutexGuardIfOffThread<IsolateT, base::kShared> mutex_guard( GetIsolate()->shared_function_info_access(), isolate); DCHECK(HasBytecodeArray()); @@ -739,8 +733,8 @@ void SharedFunctionInfo::ClearPreparseData() { UncompiledDataWithPreparseData::kSize); STATIC_ASSERT(UncompiledDataWithoutPreparseData::kSize == UncompiledData::kHeaderSize); - data.synchronized_set_map( - GetReadOnlyRoots().uncompiled_data_without_preparse_data_map()); + data.set_map(GetReadOnlyRoots().uncompiled_data_without_preparse_data_map(), + kReleaseStore); // Fill the remaining space with filler. heap->CreateFillerObjectAt( diff --git a/deps/v8/src/objects/shared-function-info.cc b/deps/v8/src/objects/shared-function-info.cc index 5f5917d64a..054a314f45 100644 --- a/deps/v8/src/objects/shared-function-info.cc +++ b/deps/v8/src/objects/shared-function-info.cc @@ -431,12 +431,6 @@ std::ostream& operator<<(std::ostream& os, const SourceCodeOf& v) { } } -MaybeHandle<Code> SharedFunctionInfo::TryGetCachedCode(Isolate* isolate) { - if (!may_have_cached_code()) return {}; - Handle<SharedFunctionInfo> zis(*this, isolate); - return isolate->compilation_cache()->LookupCode(zis); -} - void SharedFunctionInfo::DisableOptimization(BailoutReason reason) { DCHECK_NE(reason, BailoutReason::kNoReason); @@ -456,9 +450,9 @@ void SharedFunctionInfo::DisableOptimization(BailoutReason reason) { } // static -template <typename LocalIsolate> +template <typename IsolateT> void SharedFunctionInfo::InitFromFunctionLiteral( - LocalIsolate* isolate, Handle<SharedFunctionInfo> shared_info, + IsolateT* isolate, Handle<SharedFunctionInfo> shared_info, FunctionLiteral* lit, bool is_toplevel) { DCHECK(!shared_info->name_or_scope_info(kAcquireLoad).IsScopeInfo()); diff --git a/deps/v8/src/objects/shared-function-info.h b/deps/v8/src/objects/shared-function-info.h index f9db1acbcf..3ca8a5758d 100644 --- a/deps/v8/src/objects/shared-function-info.h +++ b/deps/v8/src/objects/shared-function-info.h @@ -191,8 +191,8 @@ class SharedFunctionInfo // Get the abstract code associated with the function, which will either be // a Code object or a BytecodeArray. - template <typename LocalIsolate> - inline AbstractCode abstract_code(LocalIsolate* isolate); + template <typename IsolateT> + inline AbstractCode abstract_code(IsolateT* isolate); // Tells whether or not this shared function info has an attached // BytecodeArray. @@ -264,9 +264,8 @@ class SharedFunctionInfo // Returns an IsCompiledScope which reports whether the function is compiled, // and if compiled, will avoid the function becoming uncompiled while it is // held. - template <typename LocalIsolate> - inline IsCompiledScope is_compiled_scope(LocalIsolate* isolate) const; - + template <typename IsolateT> + inline IsCompiledScope is_compiled_scope(IsolateT* isolate) const; // [internal formal parameter count]: The declared number of parameters. // For subclass constructors, also includes new.target. @@ -301,8 +300,8 @@ class SharedFunctionInfo inline FunctionTemplateInfo get_api_func_data() const; inline void set_api_func_data(FunctionTemplateInfo data); inline bool HasBytecodeArray() const; - template <typename LocalIsolate> - inline BytecodeArray GetBytecodeArray(LocalIsolate* isolate) const; + template <typename IsolateT> + inline BytecodeArray GetBytecodeArray(IsolateT* isolate) const; inline void set_bytecode_array(BytecodeArray bytecode); inline Code InterpreterTrampoline() const; @@ -417,15 +416,6 @@ class SharedFunctionInfo DECL_BOOLEAN_ACCESSORS(class_scope_has_private_brand) DECL_BOOLEAN_ACCESSORS(has_static_private_methods_or_accessors) - // True if a Code object associated with this SFI has been inserted into the - // compilation cache. Note that the cache entry may be removed by aging, - // hence the 'may'. - DECL_BOOLEAN_ACCESSORS(may_have_cached_code) - - // Returns the cached Code object for this SFI if it exists, an empty handle - // otherwise. - MaybeHandle<Code> TryGetCachedCode(Isolate* isolate); - // Is this function a top-level function (scripts, evals). DECL_BOOLEAN_ACCESSORS(is_toplevel) @@ -557,8 +547,8 @@ class SharedFunctionInfo kExceedsBytecodeLimit, kMayContainBreakPoints, }; - template <typename LocalIsolate> - Inlineability GetInlineability(LocalIsolate* isolate) const; + template <typename IsolateT> + Inlineability GetInlineability(IsolateT* isolate) const; // Source size of this function. int SourceSize(); @@ -569,8 +559,8 @@ class SharedFunctionInfo inline bool has_simple_parameters(); // Initialize a SharedFunctionInfo from a parsed function literal. - template <typename LocalIsolate> - static void InitFromFunctionLiteral(LocalIsolate* isolate, + template <typename IsolateT> + static void InitFromFunctionLiteral(IsolateT* isolate, Handle<SharedFunctionInfo> shared_info, FunctionLiteral* lit, bool is_toplevel); @@ -587,8 +577,8 @@ class SharedFunctionInfo static void EnsureSourcePositionsAvailable( Isolate* isolate, Handle<SharedFunctionInfo> shared_info); - template <typename LocalIsolate> - bool AreSourcePositionsAvailable(LocalIsolate* isolate) const; + template <typename IsolateT> + bool AreSourcePositionsAvailable(IsolateT* isolate) const; // Hash based on function literal id and script id. V8_EXPORT_PRIVATE uint32_t Hash(); diff --git a/deps/v8/src/objects/shared-function-info.tq b/deps/v8/src/objects/shared-function-info.tq index b38598efbb..3c793efe9b 100644 --- a/deps/v8/src/objects/shared-function-info.tq +++ b/deps/v8/src/objects/shared-function-info.tq @@ -49,7 +49,6 @@ bitfield struct SharedFunctionInfoFlags extends uint32 { bitfield struct SharedFunctionInfoFlags2 extends uint8 { class_scope_has_private_brand: bool: 1 bit; has_static_private_methods_or_accessors: bool: 1 bit; - may_have_cached_code: bool: 1 bit; } @export diff --git a/deps/v8/src/objects/slots-inl.h b/deps/v8/src/objects/slots-inl.h index c0d35c525f..3672df0635 100644 --- a/deps/v8/src/objects/slots-inl.h +++ b/deps/v8/src/objects/slots-inl.h @@ -10,6 +10,7 @@ #include "src/common/ptr-compr-inl.h" #include "src/objects/compressed-slots.h" #include "src/objects/heap-object.h" +#include "src/objects/map.h" #include "src/objects/maybe-object.h" #include "src/objects/objects.h" #include "src/objects/slots.h" @@ -29,12 +30,32 @@ bool FullObjectSlot::contains_value(Address raw_value) const { return base::AsAtomicPointer::Relaxed_Load(location()) == raw_value; } +bool FullObjectSlot::contains_map_value(Address raw_value) const { + return load_map().ptr() == raw_value; +} + Object FullObjectSlot::operator*() const { return Object(*location()); } Object FullObjectSlot::load(PtrComprCageBase cage_base) const { return **this; } void FullObjectSlot::store(Object value) const { *location() = value.ptr(); } +void FullObjectSlot::store_map(Map map) const { +#ifdef V8_MAP_PACKING + *location() = MapWord::Pack(map.ptr()); +#else + store(map); +#endif +} + +Map FullObjectSlot::load_map() const { +#ifdef V8_MAP_PACKING + return Map::unchecked_cast(Object(MapWord::Unpack(*location()))); +#else + return Map::unchecked_cast(Object(*location())); +#endif +} + Object FullObjectSlot::Acquire_Load() const { return Object(base::AsAtomicPointer::Acquire_Load(location())); } diff --git a/deps/v8/src/objects/slots.h b/deps/v8/src/objects/slots.h index 69c6a8a80b..59b44d49b0 100644 --- a/deps/v8/src/objects/slots.h +++ b/deps/v8/src/objects/slots.h @@ -108,10 +108,14 @@ class FullObjectSlot : public SlotBase<FullObjectSlot, Address> { // Compares memory representation of a value stored in the slot with given // raw value. inline bool contains_value(Address raw_value) const; + inline bool contains_map_value(Address raw_value) const; inline Object operator*() const; inline Object load(PtrComprCageBase cage_base) const; inline void store(Object value) const; + inline void store_map(Map map) const; + + inline Map load_map() const; inline Object Acquire_Load() const; inline Object Acquire_Load(PtrComprCageBase cage_base) const; diff --git a/deps/v8/src/objects/smi.h b/deps/v8/src/objects/smi.h index 44cd5f7446..cc99d8f7d0 100644 --- a/deps/v8/src/objects/smi.h +++ b/deps/v8/src/objects/smi.h @@ -26,7 +26,7 @@ class Smi : public Object { // in that we want them to be constexprs. constexpr Smi() : Object() {} explicit constexpr Smi(Address ptr) : Object(ptr) { - CONSTEXPR_DCHECK(HAS_SMI_TAG(ptr)); + DCHECK(HAS_SMI_TAG(ptr)); } // Returns the integer value. @@ -43,7 +43,7 @@ class Smi : public Object { // Convert a value to a Smi object. static inline constexpr Smi FromInt(int value) { - CONSTEXPR_DCHECK(Smi::IsValid(value)); + DCHECK(Smi::IsValid(value)); return Smi(Internals::IntToSmi(value)); } @@ -69,8 +69,8 @@ class Smi : public Object { // Returns whether value can be represented in a Smi. static inline bool constexpr IsValid(intptr_t value) { - CONSTEXPR_DCHECK(Internals::IsValidSmi(value) == - (value >= kMinValue && value <= kMaxValue)); + DCHECK_EQ(Internals::IsValidSmi(value), + value >= kMinValue && value <= kMaxValue); return Internals::IsValidSmi(value); } @@ -87,7 +87,7 @@ class Smi : public Object { DECL_CAST(Smi) // Dispatched behavior. - V8_EXPORT_PRIVATE void SmiPrint(std::ostream& os) const; // NOLINT + V8_EXPORT_PRIVATE void SmiPrint(std::ostream& os) const; DECL_VERIFIER(Smi) // Since this is a constexpr, "calling" it is just as efficient diff --git a/deps/v8/src/objects/source-text-module.cc b/deps/v8/src/objects/source-text-module.cc index a905444da5..755f826a87 100644 --- a/deps/v8/src/objects/source-text-module.cc +++ b/deps/v8/src/objects/source-text-module.cc @@ -672,13 +672,13 @@ Handle<JSModuleNamespace> SourceTextModule::GetModuleNamespace( MaybeHandle<JSObject> SourceTextModule::GetImportMeta( Isolate* isolate, Handle<SourceTextModule> module) { - Handle<HeapObject> import_meta(module->import_meta(), isolate); + Handle<HeapObject> import_meta(module->import_meta(kAcquireLoad), isolate); if (import_meta->IsTheHole(isolate)) { if (!isolate->RunHostInitializeImportMetaObjectCallback(module).ToHandle( &import_meta)) { return {}; } - module->set_import_meta(*import_meta); + module->set_import_meta(*import_meta, kReleaseStore); } return Handle<JSObject>::cast(import_meta); } @@ -1181,7 +1181,7 @@ void SourceTextModule::Reset(Isolate* isolate, Handle<SourceTextModule> module) { Factory* factory = isolate->factory(); - DCHECK(module->import_meta().IsTheHole(isolate)); + DCHECK(module->import_meta(kAcquireLoad).IsTheHole(isolate)); Handle<FixedArray> regular_exports = factory->NewFixedArray(module->regular_exports().length()); diff --git a/deps/v8/src/objects/source-text-module.h b/deps/v8/src/objects/source-text-module.h index 873a0cd729..6f2a3cd0f7 100644 --- a/deps/v8/src/objects/source-text-module.h +++ b/deps/v8/src/objects/source-text-module.h @@ -219,8 +219,8 @@ class SourceTextModuleInfo : public FixedArray { public: DECL_CAST(SourceTextModuleInfo) - template <typename LocalIsolate> - static Handle<SourceTextModuleInfo> New(LocalIsolate* isolate, Zone* zone, + template <typename IsolateT> + static Handle<SourceTextModuleInfo> New(IsolateT* isolate, Zone* zone, SourceTextModuleDescriptor* descr); inline FixedArray module_requests() const; @@ -267,9 +267,8 @@ class ModuleRequest NEVER_READ_ONLY_SPACE DECL_VERIFIER(ModuleRequest) - template <typename LocalIsolate> - static Handle<ModuleRequest> New(LocalIsolate* isolate, - Handle<String> specifier, + template <typename IsolateT> + static Handle<ModuleRequest> New(IsolateT* isolate, Handle<String> specifier, Handle<FixedArray> import_assertions, int position); @@ -287,9 +286,9 @@ class SourceTextModuleInfoEntry DECL_PRINTER(SourceTextModuleInfoEntry) DECL_VERIFIER(SourceTextModuleInfoEntry) - template <typename LocalIsolate> + template <typename IsolateT> static Handle<SourceTextModuleInfoEntry> New( - LocalIsolate* isolate, Handle<PrimitiveHeapObject> export_name, + IsolateT* isolate, Handle<PrimitiveHeapObject> export_name, Handle<PrimitiveHeapObject> local_name, Handle<PrimitiveHeapObject> import_name, int module_request, int cell_index, int beg_pos, int end_pos); diff --git a/deps/v8/src/objects/source-text-module.tq b/deps/v8/src/objects/source-text-module.tq index 5a21807cc5..a3d565c908 100644 --- a/deps/v8/src/objects/source-text-module.tq +++ b/deps/v8/src/objects/source-text-module.tq @@ -29,7 +29,7 @@ extern class SourceTextModule extends Module { // The value of import.meta inside of this module. // Lazily initialized on first access. It's the hole before first access and // a JSObject afterwards. - import_meta: TheHole|JSObject; + @cppAcquireLoad @cppReleaseStore import_meta: TheHole|JSObject; // The first visited module of a cycle. For modules not in a cycle, this is // the module itself. It's the hole before the module state transitions to diff --git a/deps/v8/src/objects/string-inl.h b/deps/v8/src/objects/string-inl.h index 912109b2e0..8b71536d8f 100644 --- a/deps/v8/src/objects/string-inl.h +++ b/deps/v8/src/objects/string-inl.h @@ -92,12 +92,12 @@ class V8_NODISCARD SharedStringAccessGuardIfNeeded { base::Optional<base::SharedMutexGuard<base::kShared>> mutex_guard; }; -int String::synchronized_length() const { +int String::length(AcquireLoadTag) const { return base::AsAtomic32::Acquire_Load( reinterpret_cast<const int32_t*>(field_address(kLengthOffset))); } -void String::synchronized_set_length(int value) { +void String::set_length(int value, ReleaseStoreTag) { base::AsAtomic32::Release_Store( reinterpret_cast<int32_t*>(field_address(kLengthOffset)), value); } @@ -119,7 +119,7 @@ CAST_ACCESSOR(ExternalString) CAST_ACCESSOR(ExternalTwoByteString) StringShape::StringShape(const String str) - : type_(str.synchronized_map().instance_type()) { + : type_(str.map(kAcquireLoad).instance_type()) { set_valid(); DCHECK_EQ(type_ & kIsNotStringMask, kStringTag); } @@ -335,8 +335,8 @@ class SequentialStringKey final : public StringTableKey { chars_(chars), convert_(convert) {} - template <typename LocalIsolate> - bool IsMatch(LocalIsolate* isolate, String s) { + template <typename IsolateT> + bool IsMatch(IsolateT* isolate, String s) { return s.IsEqualTo<String::EqualityType::kNoLengthCheck>(chars_, isolate); } @@ -827,10 +827,10 @@ void SeqTwoByteString::SeqTwoByteStringSet(int index, uint16_t value) { // Due to ThinString rewriting, concurrent visitors need to read the length with // acquire semantics. inline int SeqOneByteString::AllocatedSize() { - return SizeFor(synchronized_length()); + return SizeFor(length(kAcquireLoad)); } inline int SeqTwoByteString::AllocatedSize() { - return SizeFor(synchronized_length()); + return SizeFor(length(kAcquireLoad)); } void SlicedString::set_parent(String parent, WriteBarrierMode mode) { @@ -862,7 +862,8 @@ void ExternalString::AllocateExternalPointerEntries(Isolate* isolate) { } DEF_GETTER(ExternalString, resource_as_address, Address) { - return ReadExternalPointerField(kResourceOffset, cage_base, + Isolate* isolate = GetIsolateForHeapSandbox(*this); + return ReadExternalPointerField(kResourceOffset, isolate, kExternalStringResourceTag); } diff --git a/deps/v8/src/objects/string-table.cc b/deps/v8/src/objects/string-table.cc index a549376116..cd554e0220 100644 --- a/deps/v8/src/objects/string-table.cc +++ b/deps/v8/src/objects/string-table.cc @@ -69,8 +69,8 @@ int ComputeStringTableCapacityWithShrink(int current_capacity, return new_capacity; } -template <typename LocalIsolate, typename StringTableKey> -bool KeyIsMatch(LocalIsolate* isolate, StringTableKey* key, String string) { +template <typename IsolateT, typename StringTableKey> +bool KeyIsMatch(IsolateT* isolate, StringTableKey* key, String string) { if (string.hash() != key->hash()) return false; if (string.length() != key->length()) return false; return key->IsMatch(isolate, string); @@ -135,15 +135,15 @@ class StringTable::Data { int number_of_elements() const { return number_of_elements_; } int number_of_deleted_elements() const { return number_of_deleted_elements_; } - template <typename LocalIsolate, typename StringTableKey> - InternalIndex FindEntry(LocalIsolate* isolate, StringTableKey* key, + template <typename IsolateT, typename StringTableKey> + InternalIndex FindEntry(IsolateT* isolate, StringTableKey* key, uint32_t hash) const; InternalIndex FindInsertionEntry(PtrComprCageBase cage_base, uint32_t hash) const; - template <typename LocalIsolate, typename StringTableKey> - InternalIndex FindEntryOrInsertionEntry(LocalIsolate* isolate, + template <typename IsolateT, typename StringTableKey> + InternalIndex FindEntryOrInsertionEntry(IsolateT* isolate, StringTableKey* key, uint32_t hash) const; @@ -249,8 +249,8 @@ std::unique_ptr<StringTable::Data> StringTable::Data::Resize( return new_data; } -template <typename LocalIsolate, typename StringTableKey> -InternalIndex StringTable::Data::FindEntry(LocalIsolate* isolate, +template <typename IsolateT, typename StringTableKey> +InternalIndex StringTable::Data::FindEntry(IsolateT* isolate, StringTableKey* key, uint32_t hash) const { uint32_t count = 1; @@ -281,9 +281,9 @@ InternalIndex StringTable::Data::FindInsertionEntry(PtrComprCageBase cage_base, } } -template <typename LocalIsolate, typename StringTableKey> +template <typename IsolateT, typename StringTableKey> InternalIndex StringTable::Data::FindEntryOrInsertionEntry( - LocalIsolate* isolate, StringTableKey* key, uint32_t hash) const { + IsolateT* isolate, StringTableKey* key, uint32_t hash) const { InternalIndex insertion_entry = InternalIndex::NotFound(); uint32_t count = 1; // EnsureCapacity will guarantee the hash table is never full. @@ -428,9 +428,8 @@ Handle<String> StringTable::LookupString(Isolate* isolate, return result; } -template <typename StringTableKey, typename LocalIsolate> -Handle<String> StringTable::LookupKey(LocalIsolate* isolate, - StringTableKey* key) { +template <typename StringTableKey, typename IsolateT> +Handle<String> StringTable::LookupKey(IsolateT* isolate, StringTableKey* key) { // String table lookups are allowed to be concurrent, assuming that: // // - The Heap access is allowed to be concurrent (using LocalHeap or diff --git a/deps/v8/src/objects/string-table.h b/deps/v8/src/objects/string-table.h index fe87ce15f2..fc630f156c 100644 --- a/deps/v8/src/objects/string-table.h +++ b/deps/v8/src/objects/string-table.h @@ -63,8 +63,8 @@ class V8_EXPORT_PRIVATE StringTable { // Find string in the string table, using the given key. If the string is not // there yet, it is created (by the key) and added. The return value is the // string found. - template <typename StringTableKey, typename LocalIsolate> - Handle<String> LookupKey(LocalIsolate* isolate, StringTableKey* key); + template <typename StringTableKey, typename IsolateT> + Handle<String> LookupKey(IsolateT* isolate, StringTableKey* key); // {raw_string} must be a tagged String pointer. // Returns a tagged pointer: either a Smi if the string is an array index, an diff --git a/deps/v8/src/objects/string.cc b/deps/v8/src/objects/string.cc index ffa1be3aa3..52bb9679a5 100644 --- a/deps/v8/src/objects/string.cc +++ b/deps/v8/src/objects/string.cc @@ -127,7 +127,7 @@ void String::MakeThin(Isolate* isolate, String internalized) { ThinString thin = ThinString::unchecked_cast(*this); thin.set_actual(internalized); DCHECK_GE(old_size, ThinString::kSize); - this->synchronized_set_map(*map); + this->set_map(*map, kReleaseStore); Address thin_end = thin.address() + ThinString::kSize; int size_delta = old_size - ThinString::kSize; if (size_delta != 0) { @@ -200,7 +200,7 @@ bool String::MakeExternal(v8::String::ExternalStringResource* resource) { // We are storing the new map using release store after creating a filler for // the left-over space to avoid races with the sweeper thread. - this->synchronized_set_map(new_map); + this->set_map(new_map, kReleaseStore); ExternalTwoByteString self = ExternalTwoByteString::cast(*this); self.AllocateExternalPointerEntries(isolate); @@ -277,7 +277,7 @@ bool String::MakeExternal(v8::String::ExternalOneByteStringResource* resource) { // We are storing the new map using release store after creating a filler for // the left-over space to avoid races with the sweeper thread. - this->synchronized_set_map(new_map); + this->set_map(new_map, kReleaseStore); ExternalOneByteString self = ExternalOneByteString::cast(*this); self.AllocateExternalPointerEntries(isolate); @@ -374,7 +374,7 @@ void String::StringShortPrint(StringStream* accumulator) { accumulator->Put('>'); } -void String::PrintUC16(std::ostream& os, int start, int end) { // NOLINT +void String::PrintUC16(std::ostream& os, int start, int end) { if (end < 0) end = length(); StringCharacterStream stream(*this, start); for (int i = start; i < end && stream.HasMore(); i++) { @@ -735,8 +735,8 @@ static void CalculateLineEndsImpl(std::vector<int>* line_ends, } } -template <typename LocalIsolate> -Handle<FixedArray> String::CalculateLineEnds(LocalIsolate* isolate, +template <typename IsolateT> +Handle<FixedArray> String::CalculateLineEnds(IsolateT* isolate, Handle<String> src, bool include_ending_line) { src = Flatten(isolate, src); @@ -1425,7 +1425,7 @@ Handle<String> SeqString::Truncate(Handle<SeqString> string, int new_length) { ClearRecordedSlots::kNo); // We are storing the new length using release store after creating a filler // for the left-over space to avoid races with the sweeper thread. - string->synchronized_set_length(new_length); + string->set_length(new_length, kReleaseStore); return string; } diff --git a/deps/v8/src/objects/string.h b/deps/v8/src/objects/string.h index b8d47b5551..b873a069ad 100644 --- a/deps/v8/src/objects/string.h +++ b/deps/v8/src/objects/string.h @@ -194,9 +194,10 @@ class String : public TorqueGeneratedString<String, Name> { const byte* AddressOfCharacterAt(int start_index, const DisallowGarbageCollection& no_gc); - // Get and set the length of the string using acquire loads and release - // stores. - DECL_SYNCHRONIZED_INT_ACCESSORS(length) + // Forward declare the non-atomic (set_)length defined in torque. + using TorqueGeneratedString::length; + using TorqueGeneratedString::set_length; + DECL_RELEASE_ACQUIRE_INT_ACCESSORS(length) // Returns whether this string has only one-byte chars, i.e. all of them can // be one-byte encoded. This might be the case even if the string is @@ -409,7 +410,7 @@ class String : public TorqueGeneratedString<String, Name> { const char* PrefixForDebugPrint() const; const char* SuffixForDebugPrint() const; void StringShortPrint(StringStream* accumulator); - void PrintUC16(std::ostream& os, int start = 0, int end = -1); // NOLINT + void PrintUC16(std::ostream& os, int start = 0, int end = -1); void PrintUC16(StringStream* accumulator, int start, int end); // Dispatched behavior. @@ -530,8 +531,8 @@ class String : public TorqueGeneratedString<String, Name> { Visitor* visitor, String string, int offset, const SharedStringAccessGuardIfNeeded& access_guard); - template <typename LocalIsolate> - static Handle<FixedArray> CalculateLineEnds(LocalIsolate* isolate, + template <typename IsolateT> + static Handle<FixedArray> CalculateLineEnds(IsolateT* isolate, Handle<String> string, bool include_ending_line); diff --git a/deps/v8/src/objects/struct-inl.h b/deps/v8/src/objects/struct-inl.h index b313bc43f8..b062660fd1 100644 --- a/deps/v8/src/objects/struct-inl.h +++ b/deps/v8/src/objects/struct-inl.h @@ -28,13 +28,6 @@ NEVER_READ_ONLY_SPACE_IMPL(AccessorPair) TQ_OBJECT_CONSTRUCTORS_IMPL(ClassPositions) -void Struct::InitializeBody(int object_size) { - Object value = GetReadOnlyRoots().undefined_value(); - for (int offset = kHeaderSize; offset < object_size; offset += kTaggedSize) { - WRITE_FIELD(*this, offset, value); - } -} - Object AccessorPair::get(AccessorComponent component) { return component == ACCESSOR_GETTER ? getter() : setter(); } diff --git a/deps/v8/src/objects/struct.h b/deps/v8/src/objects/struct.h index fa4fe42b62..ca0dcf4ac1 100644 --- a/deps/v8/src/objects/struct.h +++ b/deps/v8/src/objects/struct.h @@ -21,7 +21,6 @@ namespace internal { // identified in the type system. class Struct : public TorqueGeneratedStruct<Struct, HeapObject> { public: - inline void InitializeBody(int object_size); void BriefPrintDetails(std::ostream& os); STATIC_ASSERT(kHeaderSize == HeapObject::kHeaderSize); diff --git a/deps/v8/src/objects/swiss-name-dictionary-inl.h b/deps/v8/src/objects/swiss-name-dictionary-inl.h index 343abfc8cc..770c32b59f 100644 --- a/deps/v8/src/objects/swiss-name-dictionary-inl.h +++ b/deps/v8/src/objects/swiss-name-dictionary-inl.h @@ -89,7 +89,7 @@ constexpr int SwissNameDictionary::CtrlTableSize(int capacity) { // static constexpr int SwissNameDictionary::SizeFor(int capacity) { - CONSTEXPR_DCHECK(IsValidCapacity(capacity)); + DCHECK(IsValidCapacity(capacity)); return PropertyDetailsTableStartOffset(capacity) + capacity; } @@ -98,7 +98,7 @@ constexpr int SwissNameDictionary::SizeFor(int capacity) { // Similar to Abseil's CapacityToGrowth. // static constexpr int SwissNameDictionary::MaxUsableCapacity(int capacity) { - CONSTEXPR_DCHECK(IsValidCapacity(capacity)); + DCHECK(IsValidCapacity(capacity)); if (Group::kWidth == 8 && capacity == 4) { // If the group size is 16 we can fully utilize capacity 4: There will be @@ -146,9 +146,8 @@ void SwissNameDictionary::SetEntryForEnumerationIndex(int enumeration_index, entry); } -template <typename LocalIsolate> -InternalIndex SwissNameDictionary::FindEntry(LocalIsolate* isolate, - Object key) { +template <typename IsolateT> +InternalIndex SwissNameDictionary::FindEntry(IsolateT* isolate, Object key) { Name name = Name::cast(key); DCHECK(name.IsUniqueName()); uint32_t hash = name.hash(); @@ -212,8 +211,8 @@ InternalIndex SwissNameDictionary::FindEntry(LocalIsolate* isolate, } } -template <typename LocalIsolate> -InternalIndex SwissNameDictionary::FindEntry(LocalIsolate* isolate, +template <typename IsolateT> +InternalIndex SwissNameDictionary::FindEntry(IsolateT* isolate, Handle<Object> key) { return FindEntry(isolate, *key); } @@ -318,9 +317,9 @@ PropertyDetails SwissNameDictionary::DetailsAt(InternalIndex entry) { } // static -template <typename LocalIsolate> +template <typename IsolateT> Handle<SwissNameDictionary> SwissNameDictionary::EnsureGrowable( - LocalIsolate* isolate, Handle<SwissNameDictionary> table) { + IsolateT* isolate, Handle<SwissNameDictionary> table) { int capacity = table->Capacity(); if (table->UsedCapacity() < MaxUsableCapacity(capacity)) { @@ -444,7 +443,7 @@ int SwissNameDictionary::GetMetaTableField(ByteArray meta_table, } constexpr int SwissNameDictionary::MetaTableSizePerEntryFor(int capacity) { - CONSTEXPR_DCHECK(IsValidCapacity(capacity)); + DCHECK(IsValidCapacity(capacity)); // See the STATIC_ASSERTs on |kMax1ByteMetaTableCapacity| and // |kMax2ByteMetaTableCapacity| in the .cc file for an explanation of these @@ -459,7 +458,7 @@ constexpr int SwissNameDictionary::MetaTableSizePerEntryFor(int capacity) { } constexpr int SwissNameDictionary::MetaTableSizeFor(int capacity) { - CONSTEXPR_DCHECK(IsValidCapacity(capacity)); + DCHECK(IsValidCapacity(capacity)); int per_entry_size = MetaTableSizePerEntryFor(capacity); @@ -488,9 +487,9 @@ bool SwissNameDictionary::ToKey(ReadOnlyRoots roots, InternalIndex entry, } // static -template <typename LocalIsolate> +template <typename IsolateT> Handle<SwissNameDictionary> SwissNameDictionary::Add( - LocalIsolate* isolate, Handle<SwissNameDictionary> original_table, + IsolateT* isolate, Handle<SwissNameDictionary> original_table, Handle<Name> key, Handle<Object> value, PropertyDetails details, InternalIndex* entry_out) { DCHECK(original_table->FindEntry(isolate, *key).is_not_found()); @@ -538,9 +537,9 @@ int SwissNameDictionary::AddInternal(Name key, Object value, return target; } -template <typename LocalIsolate> -void SwissNameDictionary::Initialize(LocalIsolate* isolate, - ByteArray meta_table, int capacity) { +template <typename IsolateT> +void SwissNameDictionary::Initialize(IsolateT* isolate, ByteArray meta_table, + int capacity) { DCHECK(IsValidCapacity(capacity)); DisallowHeapAllocation no_gc; ReadOnlyRoots roots(isolate); @@ -564,7 +563,7 @@ void SwissNameDictionary::Initialize(LocalIsolate* isolate, SwissNameDictionary::IndexIterator::IndexIterator( Handle<SwissNameDictionary> dict, int start) : enum_index_{start}, dict_{dict} { - if (!COMPRESS_POINTERS_BOOL && dict.is_null()) { + if (!COMPRESS_POINTERS_IN_ISOLATE_CAGE_BOOL && dict.is_null()) { used_capacity_ = 0; } else { used_capacity_ = dict->UsedCapacity(); @@ -609,7 +608,7 @@ SwissNameDictionary::IndexIterator SwissNameDictionary::IndexIterable::begin() { } SwissNameDictionary::IndexIterator SwissNameDictionary::IndexIterable::end() { - if (!COMPRESS_POINTERS_BOOL && dict_.is_null()) { + if (!COMPRESS_POINTERS_IN_ISOLATE_CAGE_BOOL && dict_.is_null()) { return IndexIterator(dict_, 0); } else { DCHECK(!dict_.is_null()); @@ -620,12 +619,12 @@ SwissNameDictionary::IndexIterator SwissNameDictionary::IndexIterable::end() { SwissNameDictionary::IndexIterable SwissNameDictionary::IterateEntriesOrdered() { // If we are supposed to iterate the empty dictionary (which is non-writable) - // and pointer compression is disabled, we have no simple way to get the - // isolate, which we would need to create a handle. + // and pointer compression with a per-Isolate cage is disabled, we have no + // simple way to get the isolate, which we would need to create a handle. // TODO(emrich): Consider always using roots.empty_swiss_dictionary_handle() // in the condition once this function gets Isolate as a parameter in order to // avoid empty dict checks. - if (!COMPRESS_POINTERS_BOOL && Capacity() == 0) + if (!COMPRESS_POINTERS_IN_ISOLATE_CAGE_BOOL && Capacity() == 0) return IndexIterable(Handle<SwissNameDictionary>::null()); Isolate* isolate; @@ -661,7 +660,7 @@ constexpr int SwissNameDictionary::MaxCapacity() { sizeof(uint32_t); int result = (FixedArray::kMaxSize - const_size) / per_entry_size; - CONSTEXPR_DCHECK(result <= Smi::kMaxValue); + DCHECK_GE(Smi::kMaxValue, result); return result; } diff --git a/deps/v8/src/objects/swiss-name-dictionary.cc b/deps/v8/src/objects/swiss-name-dictionary.cc index 5b567aeaee..57038ca41d 100644 --- a/deps/v8/src/objects/swiss-name-dictionary.cc +++ b/deps/v8/src/objects/swiss-name-dictionary.cc @@ -37,10 +37,9 @@ Handle<SwissNameDictionary> SwissNameDictionary::DeleteEntry( } // static -template <typename LocalIsolate> +template <typename IsolateT> Handle<SwissNameDictionary> SwissNameDictionary::Rehash( - LocalIsolate* isolate, Handle<SwissNameDictionary> table, - int new_capacity) { + IsolateT* isolate, Handle<SwissNameDictionary> table, int new_capacity) { DCHECK(IsValidCapacity(new_capacity)); DCHECK_LE(table->NumberOfElements(), MaxUsableCapacity(new_capacity)); ReadOnlyRoots roots(isolate); diff --git a/deps/v8/src/objects/swiss-name-dictionary.h b/deps/v8/src/objects/swiss-name-dictionary.h index 9ab225dd34..afafb83dd2 100644 --- a/deps/v8/src/objects/swiss-name-dictionary.h +++ b/deps/v8/src/objects/swiss-name-dictionary.h @@ -72,10 +72,10 @@ class V8_EXPORT_PRIVATE SwissNameDictionary : public HeapObject { public: using Group = swiss_table::Group; - template <typename LocalIsolate> + template <typename IsolateT> inline static Handle<SwissNameDictionary> Add( - LocalIsolate* isolate, Handle<SwissNameDictionary> table, - Handle<Name> key, Handle<Object> value, PropertyDetails details, + IsolateT* isolate, Handle<SwissNameDictionary> table, Handle<Name> key, + Handle<Object> value, PropertyDetails details, InternalIndex* entry_out = nullptr); static Handle<SwissNameDictionary> Shrink(Isolate* isolate, @@ -84,16 +84,16 @@ class V8_EXPORT_PRIVATE SwissNameDictionary : public HeapObject { static Handle<SwissNameDictionary> DeleteEntry( Isolate* isolate, Handle<SwissNameDictionary> table, InternalIndex entry); - template <typename LocalIsolate> - inline InternalIndex FindEntry(LocalIsolate* isolate, Object key); + template <typename IsolateT> + inline InternalIndex FindEntry(IsolateT* isolate, Object key); // This is to make the interfaces of NameDictionary::FindEntry and // OrderedNameDictionary::FindEntry compatible. // TODO(emrich) clean this up: NameDictionary uses Handle<Object> // for FindEntry keys due to its Key typedef, but that's also used // for adding, where we do need handles. - template <typename LocalIsolate> - inline InternalIndex FindEntry(LocalIsolate* isolate, Handle<Object> key); + template <typename IsolateT> + inline InternalIndex FindEntry(IsolateT* isolate, Handle<Object> key); static inline bool IsKey(ReadOnlyRoots roots, Object key_candidate); inline bool ToKey(ReadOnlyRoots roots, InternalIndex entry, Object* out_key); @@ -123,11 +123,11 @@ class V8_EXPORT_PRIVATE SwissNameDictionary : public HeapObject { // deleted entries (which reside in initialized memory, but are not compared). bool EqualsForTesting(SwissNameDictionary other); - template <typename LocalIsolate> - void Initialize(LocalIsolate* isolate, ByteArray meta_table, int capacity); + template <typename IsolateT> + void Initialize(IsolateT* isolate, ByteArray meta_table, int capacity); - template <typename LocalIsolate> - static Handle<SwissNameDictionary> Rehash(LocalIsolate* isolate, + template <typename IsolateT> + static Handle<SwissNameDictionary> Rehash(IsolateT* isolate, Handle<SwissNameDictionary> table, int new_capacity); void Rehash(Isolate* isolate); @@ -262,9 +262,9 @@ class V8_EXPORT_PRIVATE SwissNameDictionary : public HeapObject { using ctrl_t = swiss_table::ctrl_t; using Ctrl = swiss_table::Ctrl; - template <typename LocalIsolate> + template <typename IsolateT> inline static Handle<SwissNameDictionary> EnsureGrowable( - LocalIsolate* isolate, Handle<SwissNameDictionary> table); + IsolateT* isolate, Handle<SwissNameDictionary> table); // Returns table of byte-encoded PropertyDetails (without enumeration index // stored in PropertyDetails). diff --git a/deps/v8/src/objects/tagged-field-inl.h b/deps/v8/src/objects/tagged-field-inl.h index 513f6a02d9..5c3a18982e 100644 --- a/deps/v8/src/objects/tagged-field-inl.h +++ b/deps/v8/src/objects/tagged-field-inl.h @@ -56,6 +56,7 @@ Tagged_t TaggedField<T, kFieldOffset>::full_to_tagged(Address value) { template <typename T, int kFieldOffset> T TaggedField<T, kFieldOffset>::load(HeapObject host, int offset) { Tagged_t value = *location(host, offset); + DCHECK_NE(kFieldOffset + offset, HeapObject::kMapOffset); return T(tagged_to_full(host.ptr(), value)); } @@ -64,6 +65,7 @@ template <typename T, int kFieldOffset> T TaggedField<T, kFieldOffset>::load(PtrComprCageBase cage_base, HeapObject host, int offset) { Tagged_t value = *location(host, offset); + DCHECK_NE(kFieldOffset + offset, HeapObject::kMapOffset); return T(tagged_to_full(cage_base, value)); } @@ -73,7 +75,9 @@ void TaggedField<T, kFieldOffset>::store(HeapObject host, T value) { #ifdef V8_ATOMIC_OBJECT_FIELD_WRITES Relaxed_Store(host, value); #else - *location(host) = full_to_tagged(value.ptr()); + Address ptr = value.ptr(); + DCHECK_NE(kFieldOffset, HeapObject::kMapOffset); + *location(host) = full_to_tagged(ptr); #endif } @@ -83,7 +87,9 @@ void TaggedField<T, kFieldOffset>::store(HeapObject host, int offset, T value) { #ifdef V8_ATOMIC_OBJECT_FIELD_WRITES Relaxed_Store(host, offset, value); #else - *location(host, offset) = full_to_tagged(value.ptr()); + Address ptr = value.ptr(); + DCHECK_NE(kFieldOffset + offset, HeapObject::kMapOffset); + *location(host, offset) = full_to_tagged(ptr); #endif } @@ -91,6 +97,7 @@ void TaggedField<T, kFieldOffset>::store(HeapObject host, int offset, T value) { template <typename T, int kFieldOffset> T TaggedField<T, kFieldOffset>::Relaxed_Load(HeapObject host, int offset) { AtomicTagged_t value = AsAtomicTagged::Relaxed_Load(location(host, offset)); + DCHECK_NE(kFieldOffset + offset, HeapObject::kMapOffset); return T(tagged_to_full(host.ptr(), value)); } @@ -99,50 +106,89 @@ template <typename T, int kFieldOffset> T TaggedField<T, kFieldOffset>::Relaxed_Load(PtrComprCageBase cage_base, HeapObject host, int offset) { AtomicTagged_t value = AsAtomicTagged::Relaxed_Load(location(host, offset)); + DCHECK_NE(kFieldOffset + offset, HeapObject::kMapOffset); return T(tagged_to_full(cage_base, value)); } // static template <typename T, int kFieldOffset> -void TaggedField<T, kFieldOffset>::Relaxed_Store(HeapObject host, T value) { +T TaggedField<T, kFieldOffset>::Relaxed_Load_Map_Word( + PtrComprCageBase cage_base, HeapObject host) { + AtomicTagged_t value = AsAtomicTagged::Relaxed_Load(location(host, 0)); + return T(tagged_to_full(cage_base, value)); +} + +// static +template <typename T, int kFieldOffset> +void TaggedField<T, kFieldOffset>::Relaxed_Store_Map_Word(HeapObject host, + T value) { AsAtomicTagged::Relaxed_Store(location(host), full_to_tagged(value.ptr())); } // static template <typename T, int kFieldOffset> +void TaggedField<T, kFieldOffset>::Relaxed_Store(HeapObject host, T value) { + Address ptr = value.ptr(); + DCHECK_NE(kFieldOffset, HeapObject::kMapOffset); + AsAtomicTagged::Relaxed_Store(location(host), full_to_tagged(ptr)); +} + +// static +template <typename T, int kFieldOffset> void TaggedField<T, kFieldOffset>::Relaxed_Store(HeapObject host, int offset, T value) { - AsAtomicTagged::Relaxed_Store(location(host, offset), - full_to_tagged(value.ptr())); + Address ptr = value.ptr(); + DCHECK_NE(kFieldOffset + offset, HeapObject::kMapOffset); + AsAtomicTagged::Relaxed_Store(location(host, offset), full_to_tagged(ptr)); } // static template <typename T, int kFieldOffset> T TaggedField<T, kFieldOffset>::Acquire_Load(HeapObject host, int offset) { AtomicTagged_t value = AsAtomicTagged::Acquire_Load(location(host, offset)); + DCHECK_NE(kFieldOffset + offset, HeapObject::kMapOffset); return T(tagged_to_full(host.ptr(), value)); } // static template <typename T, int kFieldOffset> +T TaggedField<T, kFieldOffset>::Acquire_Load_No_Unpack( + PtrComprCageBase cage_base, HeapObject host, int offset) { + AtomicTagged_t value = AsAtomicTagged::Acquire_Load(location(host, offset)); + return T(tagged_to_full(cage_base, value)); +} + +template <typename T, int kFieldOffset> T TaggedField<T, kFieldOffset>::Acquire_Load(PtrComprCageBase cage_base, HeapObject host, int offset) { AtomicTagged_t value = AsAtomicTagged::Acquire_Load(location(host, offset)); + DCHECK_NE(kFieldOffset + offset, HeapObject::kMapOffset); return T(tagged_to_full(cage_base, value)); } // static template <typename T, int kFieldOffset> void TaggedField<T, kFieldOffset>::Release_Store(HeapObject host, T value) { - AsAtomicTagged::Release_Store(location(host), full_to_tagged(value.ptr())); + Address ptr = value.ptr(); + DCHECK_NE(kFieldOffset, HeapObject::kMapOffset); + AsAtomicTagged::Release_Store(location(host), full_to_tagged(ptr)); +} + +// static +template <typename T, int kFieldOffset> +void TaggedField<T, kFieldOffset>::Release_Store_Map_Word(HeapObject host, + T value) { + Address ptr = value.ptr(); + AsAtomicTagged::Release_Store(location(host), full_to_tagged(ptr)); } // static template <typename T, int kFieldOffset> void TaggedField<T, kFieldOffset>::Release_Store(HeapObject host, int offset, T value) { - AsAtomicTagged::Release_Store(location(host, offset), - full_to_tagged(value.ptr())); + Address ptr = value.ptr(); + DCHECK_NE(kFieldOffset + offset, HeapObject::kMapOffset); + AsAtomicTagged::Release_Store(location(host, offset), full_to_tagged(ptr)); } // static diff --git a/deps/v8/src/objects/tagged-field.h b/deps/v8/src/objects/tagged-field.h index 68ee5bcc6a..d9fc0bb102 100644 --- a/deps/v8/src/objects/tagged-field.h +++ b/deps/v8/src/objects/tagged-field.h @@ -49,9 +49,11 @@ class TaggedField : public AllStatic { int offset = 0); static inline void Relaxed_Store(HeapObject host, T value); - static void Relaxed_Store(HeapObject host, int offset, T value); + static inline void Relaxed_Store(HeapObject host, int offset, T value); static inline T Acquire_Load(HeapObject host, int offset = 0); + static inline T Acquire_Load_No_Unpack(PtrComprCageBase cage_base, + HeapObject host, int offset = 0); static inline T Acquire_Load(PtrComprCageBase cage_base, HeapObject host, int offset = 0); @@ -61,6 +63,13 @@ class TaggedField : public AllStatic { static inline Tagged_t Release_CompareAndSwap(HeapObject host, T old, T value); + // Note: Use these *_Map_Word methods only when loading a MapWord from a + // MapField. + static inline T Relaxed_Load_Map_Word(PtrComprCageBase cage_base, + HeapObject host); + static inline void Relaxed_Store_Map_Word(HeapObject host, T value); + static inline void Release_Store_Map_Word(HeapObject host, T value); + private: static inline Tagged_t* location(HeapObject host, int offset = 0); diff --git a/deps/v8/src/objects/tagged-impl.h b/deps/v8/src/objects/tagged-impl.h index 9ef8b58d99..e7278a1245 100644 --- a/deps/v8/src/objects/tagged-impl.h +++ b/deps/v8/src/objects/tagged-impl.h @@ -88,8 +88,7 @@ class TaggedImpl { // Returns true if this tagged value is a strong pointer to a HeapObject. constexpr inline bool IsStrong() const { - CONSTEXPR_DCHECK(kCanBeWeak || - (!IsSmi() == HAS_STRONG_HEAP_OBJECT_TAG(ptr_))); + DCHECK(kCanBeWeak || (!IsSmi() == HAS_STRONG_HEAP_OBJECT_TAG(ptr_))); return kCanBeWeak ? HAS_STRONG_HEAP_OBJECT_TAG(ptr_) : !IsSmi(); } diff --git a/deps/v8/src/objects/tagged-index.h b/deps/v8/src/objects/tagged-index.h index e8cfbc7608..19812877cb 100644 --- a/deps/v8/src/objects/tagged-index.h +++ b/deps/v8/src/objects/tagged-index.h @@ -38,7 +38,7 @@ class TaggedIndex : public Object { // special in that we want them to be constexprs. constexpr TaggedIndex() : Object() {} explicit constexpr TaggedIndex(Address ptr) : Object(ptr) { - CONSTEXPR_DCHECK(HAS_SMI_TAG(ptr)); + DCHECK(HAS_SMI_TAG(ptr)); } // Returns the integer value. @@ -49,7 +49,7 @@ class TaggedIndex : public Object { // Convert a value to a TaggedIndex object. static inline TaggedIndex FromIntptr(intptr_t value) { - CONSTEXPR_DCHECK(TaggedIndex::IsValid(value)); + DCHECK(TaggedIndex::IsValid(value)); return TaggedIndex((static_cast<Address>(value) << kSmiTagSize) | kSmiTag); } diff --git a/deps/v8/src/objects/templates-inl.h b/deps/v8/src/objects/templates-inl.h index d5a08fd88e..d2d5076246 100644 --- a/deps/v8/src/objects/templates-inl.h +++ b/deps/v8/src/objects/templates-inl.h @@ -34,34 +34,10 @@ BOOL_ACCESSORS(FunctionTemplateInfo, flag, read_only_prototype, ReadOnlyPrototypeBit::kShift) BOOL_ACCESSORS(FunctionTemplateInfo, flag, remove_prototype, RemovePrototypeBit::kShift) -BOOL_ACCESSORS(FunctionTemplateInfo, flag, do_not_cache, DoNotCacheBit::kShift) BOOL_ACCESSORS(FunctionTemplateInfo, flag, accept_any_receiver, AcceptAnyReceiverBit::kShift) BOOL_ACCESSORS(FunctionTemplateInfo, flag, published, PublishedBit::kShift) -// TODO(nicohartmann@, v8:11122): Let Torque generate this accessor. -RELEASE_ACQUIRE_ACCESSORS(FunctionTemplateInfo, call_code, HeapObject, - kCallCodeOffset) - -// TODO(nicohartmann@, v8:11122): Let Torque generate this accessor. -HeapObject FunctionTemplateInfo::rare_data(AcquireLoadTag) const { - PtrComprCageBase cage_base = GetPtrComprCageBase(*this); - return rare_data(cage_base, kAcquireLoad); -} -HeapObject FunctionTemplateInfo::rare_data(PtrComprCageBase cage_base, - AcquireLoadTag) const { - HeapObject value = - TaggedField<HeapObject>::Acquire_Load(cage_base, *this, kRareDataOffset); - DCHECK(value.IsUndefined() || value.IsFunctionTemplateRareData()); - return value; -} -void FunctionTemplateInfo::set_rare_data(HeapObject value, ReleaseStoreTag, - WriteBarrierMode mode) { - DCHECK(value.IsUndefined() || value.IsFunctionTemplateRareData()); - RELEASE_WRITE_FIELD(*this, kRareDataOffset, value); - CONDITIONAL_WRITE_BARRIER(*this, kRareDataOffset, value, mode); -} - // static FunctionTemplateRareData FunctionTemplateInfo::EnsureFunctionTemplateRareData( Isolate* isolate, Handle<FunctionTemplateInfo> function_template_info) { @@ -100,10 +76,15 @@ RARE_ACCESSORS(instance_template, InstanceTemplate, HeapObject, undefined) RARE_ACCESSORS(instance_call_handler, InstanceCallHandler, HeapObject, undefined) RARE_ACCESSORS(access_check_info, AccessCheckInfo, HeapObject, undefined) -RARE_ACCESSORS(c_function, CFunction, Object, Smi(0)) -RARE_ACCESSORS(c_signature, CSignature, Object, Smi(0)) +RARE_ACCESSORS(c_function_overloads, CFunctionOverloads, FixedArray, + GetReadOnlyRoots(cage_base).empty_fixed_array()) #undef RARE_ACCESSORS +bool TemplateInfo::should_cache() const { + return serial_number() != kDoNotCache; +} +bool TemplateInfo::is_cached() const { return serial_number() > kUncached; } + bool FunctionTemplateInfo::instantiated() { return shared_function_info().IsSharedFunctionInfo(); } diff --git a/deps/v8/src/objects/templates.h b/deps/v8/src/objects/templates.h index 966b81167c..b240173432 100644 --- a/deps/v8/src/objects/templates.h +++ b/deps/v8/src/objects/templates.h @@ -12,6 +12,9 @@ #include "src/objects/object-macros.h" namespace v8 { + +class CFunctionInfo; + namespace internal { #include "torque-generated/src/objects/templates-tq.inc" @@ -27,6 +30,16 @@ class TemplateInfo : public TorqueGeneratedTemplateInfo<TemplateInfo, Struct> { // instead of caching them. static const int kSlowTemplateInstantiationsCacheSize = 1 * MB; + // If the serial number is set to kDoNotCache, then we should never cache this + // TemplateInfo. + static const int kDoNotCache = -1; + // If the serial number is set to kUncached, it means that this TemplateInfo + // has not been cached yet but it can be. + static const int kUncached = -2; + + inline bool should_cache() const; + inline bool is_cached() const; + TQ_OBJECT_CONSTRUCTORS(TemplateInfo) }; @@ -35,6 +48,7 @@ class FunctionTemplateRareData : public TorqueGeneratedFunctionTemplateRareData<FunctionTemplateRareData, Struct> { public: + DECL_VERIFIER(FunctionTemplateRareData) TQ_OBJECT_CONSTRUCTORS(FunctionTemplateRareData) }; @@ -83,20 +97,9 @@ class FunctionTemplateInfo DECL_RARE_ACCESSORS(access_check_info, AccessCheckInfo, HeapObject) - DECL_RARE_ACCESSORS(c_function, CFunction, Object) - DECL_RARE_ACCESSORS(c_signature, CSignature, Object) + DECL_RARE_ACCESSORS(c_function_overloads, CFunctionOverloads, FixedArray) #undef DECL_RARE_ACCESSORS - // TODO(nicohartmann@, v8:11122): Let Torque generate the following accessor. - DECL_RELEASE_ACQUIRE_ACCESSORS(call_code, HeapObject) - - // TODO(nicohartmann@, v8:11122): Let Torque generate the following accessor. - inline HeapObject rare_data(AcquireLoadTag) const; - inline HeapObject rare_data(PtrComprCageBase cage_base, AcquireLoadTag) const; - inline void set_rare_data( - HeapObject value, ReleaseStoreTag, - WriteBarrierMode mode = WriteBarrierMode::UPDATE_WRITE_BARRIER); - // Begin flag bits --------------------- DECL_BOOLEAN_ACCESSORS(undetectable) @@ -111,10 +114,6 @@ class FunctionTemplateInfo // prototype_provoider_template are instantiated. DECL_BOOLEAN_ACCESSORS(remove_prototype) - // If set, do not attach a serial number to this FunctionTemplate and thus do - // not keep an instance boilerplate around. - DECL_BOOLEAN_ACCESSORS(do_not_cache) - // If not set an access may be performed on calling the associated JSFunction. DECL_BOOLEAN_ACCESSORS(accept_any_receiver) @@ -128,8 +127,6 @@ class FunctionTemplateInfo // Dispatched behavior. DECL_PRINTER(FunctionTemplateInfo) - static const int kInvalidSerialNumber = 0; - static Handle<SharedFunctionInfo> GetOrCreateSharedFunctionInfo( Isolate* isolate, Handle<FunctionTemplateInfo> info, MaybeHandle<Name> maybe_name); @@ -146,14 +143,26 @@ class FunctionTemplateInfo inline FunctionTemplateInfo GetParent(Isolate* isolate); // Returns true if |object| is an instance of this function template. inline bool IsTemplateFor(JSObject object); - bool IsTemplateFor(Map map); + bool IsTemplateFor(Map map) const; + // Returns true if |object| is an API object and is constructed by this + // particular function template (skips walking up the chain of inheriting + // functions that is done by IsTemplateFor). + bool IsLeafTemplateForApiObject(Object object) const; inline bool instantiated(); inline bool BreakAtEntry(); // Helper function for cached accessors. - static MaybeHandle<Name> TryGetCachedPropertyName(Isolate* isolate, - Handle<Object> getter); + static base::Optional<Name> TryGetCachedPropertyName(Isolate* isolate, + Object getter); + // Fast API overloads. + int GetCFunctionsCount() const; + Address GetCFunction(int index) const; + const CFunctionInfo* GetCSignature(int index) const; + + // CFunction data for a set of overloads is stored into a FixedArray, as + // [address_0, signature_0, ... address_n-1, signature_n-1]. + static const int kFunctionOverloadEntrySize = 2; // Bit position in the flag, from least significant bit position. DEFINE_TORQUE_GENERATED_FUNCTION_TEMPLATE_INFO_FLAGS() diff --git a/deps/v8/src/objects/templates.tq b/deps/v8/src/objects/templates.tq index e952747ecf..1dec706d49 100644 --- a/deps/v8/src/objects/templates.tq +++ b/deps/v8/src/objects/templates.tq @@ -24,8 +24,7 @@ extern class FunctionTemplateRareData extends Struct { instance_template: ObjectTemplateInfo|Undefined; instance_call_handler: CallHandlerInfo|Undefined; access_check_info: AccessCheckInfo|Undefined; - c_function: Foreign|Zero; - c_signature: Foreign|Zero; + c_function_overloads: FixedArray; } bitfield struct FunctionTemplateInfoFlags extends uint31 { @@ -33,7 +32,6 @@ bitfield struct FunctionTemplateInfoFlags extends uint31 { needs_access_check: bool: 1 bit; read_only_prototype: bool: 1 bit; remove_prototype: bool: 1 bit; - do_not_cache: bool: 1 bit; accept_any_receiver: bool: 1 bit; published: bool: 1 bit; } @@ -42,7 +40,7 @@ bitfield struct FunctionTemplateInfoFlags extends uint31 { extern class FunctionTemplateInfo extends TemplateInfo { // Handler invoked when calling an instance of this FunctionTemplateInfo. // Either CallHandlerInfo or Undefined. - call_code: CallHandlerInfo|Undefined; + @cppAcquireLoad @cppReleaseStore call_code: CallHandlerInfo|Undefined; class_name: String|Undefined; // If the signature is a FunctionTemplateInfo it is used to check whether the // receiver calling the associated JSFunction is a compatible receiver, i.e. @@ -52,6 +50,8 @@ extern class FunctionTemplateInfo extends TemplateInfo { // If any of the setters declared by DECL_RARE_ACCESSORS are used then a // FunctionTemplateRareData will be stored here. Until then this contains // undefined. + @cppAcquireLoad + @cppReleaseStore rare_data: FunctionTemplateRareData|Undefined; shared_function_info: SharedFunctionInfo|Undefined; // Internal field to store a flag bitfield. diff --git a/deps/v8/src/objects/torque-defined-classes.h b/deps/v8/src/objects/torque-defined-classes.h index aeea4e1c53..4273d34711 100644 --- a/deps/v8/src/objects/torque-defined-classes.h +++ b/deps/v8/src/objects/torque-defined-classes.h @@ -7,6 +7,7 @@ #include "src/objects/descriptor-array.h" #include "src/objects/fixed-array.h" #include "src/objects/heap-object.h" +#include "src/objects/megadom-handler.h" #include "src/objects/objects.h" // Has to be the last include (doesn't have include guards): diff --git a/deps/v8/src/objects/transitions.cc b/deps/v8/src/objects/transitions.cc index ac908030a2..a8bf5bbde0 100644 --- a/deps/v8/src/objects/transitions.cc +++ b/deps/v8/src/objects/transitions.cc @@ -510,7 +510,7 @@ void TransitionsAccessor::EnsureHasFullTransitionArray() { } void TransitionsAccessor::TraverseTransitionTreeInternal( - TraverseCallback callback, void* data, DisallowGarbageCollection* no_gc) { + TraverseCallback callback, DisallowGarbageCollection* no_gc) { switch (encoding()) { case kPrototypeInfo: case kUninitialized: @@ -520,7 +520,7 @@ void TransitionsAccessor::TraverseTransitionTreeInternal( Map simple_target = Map::cast(raw_transitions_->GetHeapObjectAssumeWeak()); TransitionsAccessor(isolate_, simple_target, no_gc) - .TraverseTransitionTreeInternal(callback, data, no_gc); + .TraverseTransitionTreeInternal(callback, no_gc); break; } case kFullTransitionArray: { @@ -533,7 +533,7 @@ void TransitionsAccessor::TraverseTransitionTreeInternal( HeapObject heap_object; if (target->GetHeapObjectIfWeak(&heap_object)) { TransitionsAccessor(isolate_, Map::cast(heap_object), no_gc) - .TraverseTransitionTreeInternal(callback, data, no_gc); + .TraverseTransitionTreeInternal(callback, no_gc); } else { DCHECK(target->IsCleared()); } @@ -541,12 +541,12 @@ void TransitionsAccessor::TraverseTransitionTreeInternal( } for (int i = 0; i < transitions().number_of_transitions(); ++i) { TransitionsAccessor(isolate_, transitions().GetTarget(i), no_gc) - .TraverseTransitionTreeInternal(callback, data, no_gc); + .TraverseTransitionTreeInternal(callback, no_gc); } break; } } - callback(map_, data); + callback(map_); } #ifdef DEBUG diff --git a/deps/v8/src/objects/transitions.h b/deps/v8/src/objects/transitions.h index 237cfcd0ef..473827fd40 100644 --- a/deps/v8/src/objects/transitions.h +++ b/deps/v8/src/objects/transitions.h @@ -100,13 +100,13 @@ class V8_EXPORT_PRIVATE TransitionsAccessor { PropertyAttributes* out_integrity_level = nullptr); // ===== ITERATION ===== - using TraverseCallback = void (*)(Map map, void* data); + using TraverseCallback = std::function<void(Map)>; // Traverse the transition tree in postorder. - void TraverseTransitionTree(TraverseCallback callback, void* data) { + void TraverseTransitionTree(TraverseCallback callback) { // Make sure that we do not allocate in the callback. DisallowGarbageCollection no_gc; - TraverseTransitionTreeInternal(callback, data, &no_gc); + TraverseTransitionTreeInternal(callback, &no_gc); } // ===== PROTOTYPE TRANSITIONS ===== @@ -192,7 +192,7 @@ class V8_EXPORT_PRIVATE TransitionsAccessor { void SetPrototypeTransitions(Handle<WeakFixedArray> proto_transitions); WeakFixedArray GetPrototypeTransitions(); - void TraverseTransitionTreeInternal(TraverseCallback callback, void* data, + void TraverseTransitionTreeInternal(TraverseCallback callback, DisallowGarbageCollection* no_gc); Isolate* isolate_; diff --git a/deps/v8/src/objects/value-serializer.cc b/deps/v8/src/objects/value-serializer.cc index 43d946943b..9984f097a4 100644 --- a/deps/v8/src/objects/value-serializer.cc +++ b/deps/v8/src/objects/value-serializer.cc @@ -22,6 +22,7 @@ #include "src/objects/js-array-inl.h" #include "src/objects/js-collection-inl.h" #include "src/objects/js-regexp-inl.h" +#include "src/objects/map-updater.h" #include "src/objects/objects-inl.h" #include "src/objects/objects.h" #include "src/objects/oddball-inl.h" @@ -226,6 +227,8 @@ enum class ErrorTag : uint8_t { kUriErrorPrototype = 'U', // Followed by message: string. kMessage = 'm', + // Followed by a JS object: cause. + kCause = 'c', // Followed by stack: string. kStack = 's', // The end of this error information. @@ -299,6 +302,9 @@ void ValueSerializer::WriteZigZag(T value) { (value >> (8 * sizeof(T) - 1))); } +template EXPORT_TEMPLATE_DEFINE( + V8_EXPORT_PRIVATE) void ValueSerializer::WriteZigZag(int32_t value); + void ValueSerializer::WriteDouble(double value) { // Warning: this uses host endianness. WriteRawBytes(&value, sizeof(value)); @@ -934,6 +940,9 @@ Maybe<bool> ValueSerializer::WriteJSError(Handle<JSObject> error) { Maybe<bool> message_found = JSReceiver::GetOwnPropertyDescriptor( isolate_, error, isolate_->factory()->message_string(), &message_desc); MAYBE_RETURN(message_found, Nothing<bool>()); + PropertyDescriptor cause_desc; + Maybe<bool> cause_found = JSReceiver::GetOwnPropertyDescriptor( + isolate_, error, isolate_->factory()->cause_string(), &cause_desc); WriteTag(SerializationTag::kError); @@ -973,6 +982,15 @@ Maybe<bool> ValueSerializer::WriteJSError(Handle<JSObject> error) { WriteString(message); } + if (cause_found.FromJust() && + PropertyDescriptor::IsDataDescriptor(&cause_desc)) { + Handle<Object> cause = cause_desc.value(); + WriteVarint(static_cast<uint8_t>(ErrorTag::kCause)); + if (!WriteObject(cause).FromMaybe(false)) { + return Nothing<bool>(); + } + } + if (!Object::GetProperty(isolate_, error, isolate_->factory()->stack_string()) .ToHandle(&stack)) { return Nothing<bool>(); @@ -1200,6 +1218,9 @@ Maybe<T> ValueDeserializer::ReadZigZag() { -static_cast<T>(unsigned_value & 1))); } +template EXPORT_TEMPLATE_DEFINE( + V8_EXPORT_PRIVATE) Maybe<int32_t> ValueDeserializer::ReadZigZag(); + Maybe<double> ValueDeserializer::ReadDouble() { // Warning: this uses host endianness. if (sizeof(double) > static_cast<unsigned>(end_ - position_)) @@ -1527,7 +1548,7 @@ MaybeHandle<JSArray> ValueDeserializer::ReadSparseJSArray() { HandleScope scope(isolate_); Handle<JSArray> array = isolate_->factory()->NewJSArray(0, TERMINAL_FAST_ELEMENTS_KIND); - JSArray::SetLength(array, length); + MAYBE_RETURN(JSArray::SetLength(array, length), MaybeHandle<JSArray>()); AddObjectWithID(id, array); uint32_t num_properties; @@ -1874,6 +1895,7 @@ MaybeHandle<JSArrayBufferView> ValueDeserializer::ReadJSArrayBufferView( MaybeHandle<Object> ValueDeserializer::ReadJSError() { Handle<Object> message = isolate_->factory()->undefined_value(); + Handle<Object> options = isolate_->factory()->undefined_value(); Handle<Object> stack = isolate_->factory()->undefined_value(); Handle<Object> no_caller; auto constructor = isolate_->error_function(); @@ -1911,6 +1933,20 @@ MaybeHandle<Object> ValueDeserializer::ReadJSError() { message = message_string; break; } + case ErrorTag::kCause: { + Handle<Object> cause; + if (!ReadObject().ToHandle(&cause)) { + return MaybeHandle<JSObject>(); + } + options = isolate_->factory()->NewJSObject(isolate_->object_function()); + if (JSObject::DefinePropertyOrElementIgnoreAttributes( + Handle<JSObject>::cast(options), + isolate_->factory()->cause_string(), cause, DONT_ENUM) + .is_null()) { + return MaybeHandle<JSObject>(); + } + break; + } case ErrorTag::kStack: { Handle<String> stack_string; if (!ReadString().ToHandle(&stack_string)) { @@ -1929,7 +1965,7 @@ MaybeHandle<Object> ValueDeserializer::ReadJSError() { Handle<Object> error; if (!ErrorUtils::Construct(isolate_, constructor, constructor, message, - SKIP_NONE, no_caller, + options, SKIP_NONE, no_caller, ErrorUtils::StackTraceCollection::kNone) .ToHandle(&error)) { return MaybeHandle<Object>(); @@ -2101,9 +2137,9 @@ Maybe<uint32_t> ValueDeserializer::ReadJSObjectProperties( .NowContains(value)) { Handle<FieldType> value_type = value->OptimalType(isolate_, expected_representation); - Map::GeneralizeField(isolate_, target, descriptor, - details.constness(), expected_representation, - value_type); + MapUpdater::GeneralizeField(isolate_, target, descriptor, + details.constness(), + expected_representation, value_type); } DCHECK(target->instance_descriptors(isolate_) .GetFieldType(descriptor) @@ -2285,7 +2321,7 @@ ValueDeserializer::ReadObjectUsingEntireBufferForLegacyFormat() { Handle<JSArray> js_array = isolate_->factory()->NewJSArray(0, TERMINAL_FAST_ELEMENTS_KIND); - JSArray::SetLength(js_array, length); + MAYBE_RETURN_NULL(JSArray::SetLength(js_array, length)); size_t begin_properties = stack.size() - 2 * static_cast<size_t>(num_properties); if (num_properties && diff --git a/deps/v8/src/objects/visitors.h b/deps/v8/src/objects/visitors.h index 1111bf2512..947db3fa51 100644 --- a/deps/v8/src/objects/visitors.h +++ b/deps/v8/src/objects/visitors.h @@ -39,6 +39,8 @@ class CodeDataContainer; V(kReadOnlyObjectCache, "(Read-only object cache)") \ V(kWeakCollections, "(Weak collections)") \ V(kWrapperTracing, "(Wrapper tracing)") \ + V(kWriteBarrier, "(Write barrier)") \ + V(kRetainMaps, "(Retain maps)") \ V(kUnknown, "(Unknown)") class VisitorSynchronization : public AllStatic { @@ -162,6 +164,9 @@ class ObjectVisitor { // Visits the relocation info using the given iterator. virtual void VisitRelocInfo(RelocIterator* it); + + // Visits the object's map pointer, decoding as necessary + virtual void VisitMapPointer(HeapObject host) { UNREACHABLE(); } }; } // namespace internal diff --git a/deps/v8/src/parsing/literal-buffer.cc b/deps/v8/src/parsing/literal-buffer.cc index 42a41cb15d..a3e665a5c3 100644 --- a/deps/v8/src/parsing/literal-buffer.cc +++ b/deps/v8/src/parsing/literal-buffer.cc @@ -12,8 +12,8 @@ namespace v8 { namespace internal { -template <typename LocalIsolate> -Handle<String> LiteralBuffer::Internalize(LocalIsolate* isolate) const { +template <typename IsolateT> +Handle<String> LiteralBuffer::Internalize(IsolateT* isolate) const { if (is_one_byte()) { return isolate->factory()->InternalizeString(one_byte_literal()); } diff --git a/deps/v8/src/parsing/literal-buffer.h b/deps/v8/src/parsing/literal-buffer.h index 60c70a5b46..3a3457082c 100644 --- a/deps/v8/src/parsing/literal-buffer.h +++ b/deps/v8/src/parsing/literal-buffer.h @@ -66,8 +66,8 @@ class LiteralBuffer final { is_one_byte_ = true; } - template <typename LocalIsolate> - Handle<String> Internalize(LocalIsolate* isolate) const; + template <typename IsolateT> + Handle<String> Internalize(IsolateT* isolate) const; private: static const int kInitialCapacity = 16; diff --git a/deps/v8/src/parsing/parse-info.cc b/deps/v8/src/parsing/parse-info.cc index 69d18ef2b2..6f469383a3 100644 --- a/deps/v8/src/parsing/parse-info.cc +++ b/deps/v8/src/parsing/parse-info.cc @@ -234,9 +234,9 @@ ParseInfo::~ParseInfo() = default; DeclarationScope* ParseInfo::scope() const { return literal()->scope(); } -template <typename LocalIsolate> +template <typename IsolateT> Handle<Script> ParseInfo::CreateScript( - LocalIsolate* isolate, Handle<String> source, + IsolateT* isolate, Handle<String> source, MaybeHandle<FixedArray> maybe_wrapped_arguments, ScriptOriginOptions origin_options, NativesFlag natives) { // Create a script object describing the script to be compiled. diff --git a/deps/v8/src/parsing/parse-info.h b/deps/v8/src/parsing/parse-info.h index 2068847efb..d203ebed85 100644 --- a/deps/v8/src/parsing/parse-info.h +++ b/deps/v8/src/parsing/parse-info.h @@ -212,9 +212,9 @@ class V8_EXPORT_PRIVATE ParseInfo { ~ParseInfo(); - template <typename LocalIsolate> + template <typename IsolateT> EXPORT_TEMPLATE_DECLARE(V8_EXPORT_PRIVATE) - Handle<Script> CreateScript(LocalIsolate* isolate, Handle<String> source, + Handle<Script> CreateScript(IsolateT* isolate, Handle<String> source, MaybeHandle<FixedArray> maybe_wrapped_arguments, ScriptOriginOptions origin_options, NativesFlag natives = NOT_NATIVES_CODE); diff --git a/deps/v8/src/parsing/parser-base.h b/deps/v8/src/parsing/parser-base.h index db0966803b..d30c3f1b1f 100644 --- a/deps/v8/src/parsing/parser-base.h +++ b/deps/v8/src/parsing/parser-base.h @@ -1060,14 +1060,14 @@ class ParserBase { bool is_resumable() const { return IsResumableFunction(function_state_->kind()); } - bool is_class_static_block() const { - return function_state_->kind() == - FunctionKind::kClassStaticInitializerFunction; - } bool is_await_allowed() const { return is_async_function() || (flags().allow_harmony_top_level_await() && IsModule(function_state_->kind())); } + bool is_await_as_identifier_disallowed() { + return flags().is_module() || + IsAwaitAsIdentifierDisallowed(function_state_->kind()); + } const PendingCompilationErrorHandler* pending_error_handler() const { return pending_error_handler_; } @@ -1652,8 +1652,7 @@ ParserBase<Impl>::ParseAndClassifyIdentifier(Token::Value next) { } if (!Token::IsValidIdentifier(next, language_mode(), is_generator(), - flags().is_module() || is_async_function() || - is_class_static_block())) { + is_await_as_identifier_disallowed())) { ReportUnexpectedToken(next); return impl()->EmptyIdentifierString(); } @@ -1677,7 +1676,8 @@ typename ParserBase<Impl>::IdentifierT ParserBase<Impl>::ParseIdentifier( if (!Token::IsValidIdentifier( next, language_mode(), IsGeneratorFunction(function_kind), - flags().is_module() || IsAsyncFunction(function_kind))) { + flags().is_module() || + IsAwaitAsIdentifierDisallowed(function_kind))) { ReportUnexpectedToken(next); return impl()->EmptyIdentifierString(); } @@ -2570,9 +2570,8 @@ ParserBase<Impl>::ParseObjectPropertyDefinition(ParsePropertyInfo* prop_info, // IdentifierReference Initializer? DCHECK_EQ(function_flags, ParseFunctionFlag::kIsNormal); - if (!Token::IsValidIdentifier( - name_token, language_mode(), is_generator(), - flags().is_module() || is_async_function())) { + if (!Token::IsValidIdentifier(name_token, language_mode(), is_generator(), + is_await_as_identifier_disallowed())) { ReportUnexpectedToken(Next()); return impl()->NullLiteralProperty(); } @@ -4427,6 +4426,12 @@ bool ParserBase<Impl>::IsNextLetKeyword() { case Token::ASYNC: return true; case Token::FUTURE_STRICT_RESERVED_WORD: + case Token::ESCAPED_STRICT_RESERVED_WORD: + // The early error rule for future reserved keywords + // (ES#sec-identifiers-static-semantics-early-errors) uses the static + // semantics StringValue of IdentifierName, which normalizes escape + // sequences. So, both escaped and unescaped future reserved keywords are + // allowed as identifiers in sloppy mode. return is_sloppy(language_mode()); default: return false; @@ -4437,12 +4442,11 @@ template <typename Impl> typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseArrowFunctionLiteral( const FormalParametersT& formal_parameters) { - const RuntimeCallCounterId counters[2] = { - RuntimeCallCounterId::kParseArrowFunctionLiteral, - RuntimeCallCounterId::kPreParseArrowFunctionLiteral}; - RuntimeCallTimerScope runtime_timer(runtime_call_stats_, - counters[Impl::IsPreParser()], - RuntimeCallStats::kThreadSpecific); + RCS_SCOPE(runtime_call_stats_, + Impl::IsPreParser() + ? RuntimeCallCounterId::kPreParseArrowFunctionLiteral + : RuntimeCallCounterId::kParseArrowFunctionLiteral, + RuntimeCallStats::kThreadSpecific); base::ElapsedTimer timer; if (V8_UNLIKELY(FLAG_log_function_events)) timer.Start(); @@ -4631,7 +4635,7 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseClassLiteral( ClassInfo class_info(this); class_info.is_anonymous = is_anonymous; - scope()->set_start_position(end_position()); + scope()->set_start_position(class_token_pos); if (Check(Token::EXTENDS)) { ClassScope::HeritageParsingScope heritage(class_scope); FuncNameInferrerState fni_state(&fni_); @@ -5553,6 +5557,14 @@ typename ParserBase<Impl>::StatementT ParserBase<Impl>::ParseReturnStatement() { case MODULE_SCOPE: impl()->ReportMessageAt(loc, MessageTemplate::kIllegalReturn); return impl()->NullStatement(); + case BLOCK_SCOPE: + // Class static blocks disallow return. They are their own var scopes and + // have a varblock scope. + if (function_state_->kind() == kClassStaticInitializerFunction) { + impl()->ReportMessageAt(loc, MessageTemplate::kIllegalReturn); + return impl()->NullStatement(); + } + break; default: break; } @@ -5987,7 +5999,8 @@ typename ParserBase<Impl>::StatementT ParserBase<Impl>::ParseForStatement( expression = ParseExpressionCoverGrammar(); // `for (async of` is disallowed but `for (async.x of` is allowed, so // check if the token is ASYNC after parsing the expression. - bool expression_is_async = scanner()->current_token() == Token::ASYNC; + bool expression_is_async = scanner()->current_token() == Token::ASYNC && + !scanner()->literal_contains_escapes(); // Initializer is reference followed by in/of. lhs_end_pos = end_position(); is_for_each = CheckInOrOf(&for_info.mode); diff --git a/deps/v8/src/parsing/parser.cc b/deps/v8/src/parsing/parser.cc index 92e11f6b9c..0671fc5f6b 100644 --- a/deps/v8/src/parsing/parser.cc +++ b/deps/v8/src/parsing/parser.cc @@ -522,10 +522,9 @@ void Parser::ParseProgram(Isolate* isolate, Handle<Script> script, // It's OK to use the Isolate & counters here, since this function is only // called in the main thread. DCHECK(parsing_on_main_thread_); - RuntimeCallTimerScope runtime_timer( - runtime_call_stats_, flags().is_eval() - ? RuntimeCallCounterId::kParseEval - : RuntimeCallCounterId::kParseProgram); + RCS_SCOPE(runtime_call_stats_, flags().is_eval() + ? RuntimeCallCounterId::kParseEval + : RuntimeCallCounterId::kParseProgram); TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.ParseProgram"); base::ElapsedTimer timer; if (V8_UNLIKELY(FLAG_log_function_events)) timer.Start(); @@ -704,9 +703,8 @@ void Parser::PostProcessParseResult(Isolate* isolate, ParseInfo* info, if (isolate) info->ast_value_factory()->Internalize(isolate); { - RuntimeCallTimerScope runtimeTimer(info->runtime_call_stats(), - RuntimeCallCounterId::kCompileAnalyse, - RuntimeCallStats::kThreadSpecific); + RCS_SCOPE(info->runtime_call_stats(), RuntimeCallCounterId::kCompileAnalyse, + RuntimeCallStats::kThreadSpecific); if (!Rewriter::Rewrite(info) || !DeclarationScope::Analyze(info)) { // Null out the literal to indicate that something failed. info->set_literal(nullptr); @@ -819,8 +817,7 @@ void Parser::ParseFunction(Isolate* isolate, ParseInfo* info, // It's OK to use the Isolate & counters here, since this function is only // called in the main thread. DCHECK(parsing_on_main_thread_); - RuntimeCallTimerScope runtime_timer(runtime_call_stats_, - RuntimeCallCounterId::kParseFunction); + RCS_SCOPE(runtime_call_stats_, RuntimeCallCounterId::kParseFunction); TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.ParseFunction"); base::ElapsedTimer timer; if (V8_UNLIKELY(FLAG_log_function_events)) timer.Start(); @@ -833,14 +830,23 @@ void Parser::ParseFunction(Isolate* isolate, ParseInfo* info, Scope::DeserializationMode::kIncludingVariables); DCHECK_EQ(factory()->zone(), info->zone()); + Handle<Script> script = handle(Script::cast(shared_info->script()), isolate); if (shared_info->is_wrapped()) { - maybe_wrapped_arguments_ = handle( - Script::cast(shared_info->script()).wrapped_arguments(), isolate); + maybe_wrapped_arguments_ = handle(script->wrapped_arguments(), isolate); } int start_position = shared_info->StartPosition(); int end_position = shared_info->EndPosition(); int function_literal_id = shared_info->function_literal_id(); + if V8_UNLIKELY (script->type() == Script::TYPE_WEB_SNAPSHOT) { + // Function literal IDs for inner functions haven't been allocated when + // deserializing. Put the inner function SFIs to the end of the list; + // they'll be deduplicated later (if the corresponding SFIs exist already) + // in Script::FindSharedFunctionInfo. (-1 here because function_literal_id + // is the parent's id. The inner function will get ids starting from + // function_literal_id + 1.) + function_literal_id = script->shared_function_info_count() - 1; + } // Initialize parser state. Handle<String> name(shared_info->Name(), isolate); @@ -865,9 +871,10 @@ void Parser::ParseFunction(Isolate* isolate, ParseInfo* info, if (result != nullptr) { Handle<String> inferred_name(shared_info->inferred_name(), isolate); result->set_inferred_name(inferred_name); + // Fix the function_literal_id in case we changed it earlier. + result->set_function_literal_id(shared_info->function_literal_id()); } PostProcessParseResult(isolate, info, result); - if (V8_UNLIKELY(FLAG_log_function_events) && result != nullptr) { double ms = timer.Elapsed().InMillisecondsF(); // We should already be internalized by now, so the debug name will be @@ -971,6 +978,10 @@ FunctionLiteral* Parser::DoParseFunction(Isolate* isolate, ParseInfo* info, if (p->initializer() != nullptr) { reindexer.Reindex(p->initializer()); } + if (reindexer.HasStackOverflow()) { + set_stack_overflow(); + return nullptr; + } } ResetFunctionLiteralId(); SkipFunctionLiterals(function_literal_id - 1); @@ -2559,9 +2570,8 @@ FunctionLiteral* Parser::ParseFunctionLiteral( const bool is_lazy_top_level_function = is_lazy && is_top_level; const bool is_lazy_inner_function = is_lazy && !is_top_level; - RuntimeCallTimerScope runtime_timer( - runtime_call_stats_, RuntimeCallCounterId::kParseFunctionLiteral, - RuntimeCallStats::kThreadSpecific); + RCS_SCOPE(runtime_call_stats_, RuntimeCallCounterId::kParseFunctionLiteral, + RuntimeCallStats::kThreadSpecific); base::ElapsedTimer timer; if (V8_UNLIKELY(FLAG_log_function_events)) timer.Start(); @@ -2652,14 +2662,14 @@ FunctionLiteral* Parser::ParseFunctionLiteral( reinterpret_cast<const char*>(function_name->raw_data()), function_name->byte_length(), function_name->is_one_byte()); } - if (V8_UNLIKELY(TracingFlags::is_runtime_stats_enabled()) && - did_preparse_successfully) { - if (runtime_call_stats_) { - runtime_call_stats_->CorrectCurrentCounterId( - RuntimeCallCounterId::kPreParseWithVariableResolution, - RuntimeCallStats::kThreadSpecific); - } +#ifdef V8_RUNTIME_CALL_STATS + if (did_preparse_successfully && runtime_call_stats_ && + V8_UNLIKELY(TracingFlags::is_runtime_stats_enabled())) { + runtime_call_stats_->CorrectCurrentCounterId( + RuntimeCallCounterId::kPreParseWithVariableResolution, + RuntimeCallStats::kThreadSpecific); } +#endif // V8_RUNTIME_CALL_STATS // Validate function name. We can do this only after parsing the function, // since the function can declare itself strict. @@ -3224,9 +3234,8 @@ void Parser::InsertSloppyBlockFunctionVarBindings(DeclarationScope* scope) { // ---------------------------------------------------------------------------- // Parser support -template <typename LocalIsolate> -void Parser::HandleSourceURLComments(LocalIsolate* isolate, - Handle<Script> script) { +template <typename IsolateT> +void Parser::HandleSourceURLComments(IsolateT* isolate, Handle<Script> script) { Handle<String> source_url = scanner_.SourceUrl(isolate); if (!source_url.is_null()) { script->set_source_url(*source_url); @@ -3264,8 +3273,7 @@ void Parser::UpdateStatistics(Isolate* isolate, Handle<Script> script) { void Parser::ParseOnBackground(ParseInfo* info, int start_position, int end_position, int function_literal_id) { - RuntimeCallTimerScope runtimeTimer( - runtime_call_stats_, RuntimeCallCounterId::kParseBackgroundProgram); + RCS_SCOPE(runtime_call_stats_, RuntimeCallCounterId::kParseBackgroundProgram); parsing_on_main_thread_ = false; DCHECK_NULL(info->literal()); diff --git a/deps/v8/src/parsing/parser.h b/deps/v8/src/parsing/parser.h index 4ede303503..07efef277e 100644 --- a/deps/v8/src/parsing/parser.h +++ b/deps/v8/src/parsing/parser.h @@ -161,8 +161,8 @@ class V8_EXPORT_PRIVATE Parser : public NON_EXPORTED_BASE(ParserBase<Parser>) { // Move statistics to Isolate void UpdateStatistics(Isolate* isolate, Handle<Script> script); - template <typename LocalIsolate> - void HandleSourceURLComments(LocalIsolate* isolate, Handle<Script> script); + template <typename IsolateT> + void HandleSourceURLComments(IsolateT* isolate, Handle<Script> script); private: friend class ParserBase<Parser>; @@ -654,15 +654,6 @@ class V8_EXPORT_PRIVATE Parser : public NON_EXPORTED_BASE(ParserBase<Parser>) { } } - // A shortcut for performing a ToString operation - V8_INLINE Expression* ToString(Expression* expr) { - if (expr->IsStringLiteral()) return expr; - ScopedPtrList<Expression> args(pointer_buffer()); - args.Add(expr); - return factory()->NewCallRuntime(Runtime::kInlineToString, args, - expr->position()); - } - // Returns true if we have a binary expression between two numeric // literals. In that case, *x will be changed to an expression which is the // computed value. diff --git a/deps/v8/src/parsing/pending-compilation-error-handler.cc b/deps/v8/src/parsing/pending-compilation-error-handler.cc index dccd6dba77..2ab5b3eb1a 100644 --- a/deps/v8/src/parsing/pending-compilation-error-handler.cc +++ b/deps/v8/src/parsing/pending-compilation-error-handler.cc @@ -31,9 +31,9 @@ void PendingCompilationErrorHandler::MessageDetails::SetString( arg_handle_ = isolate->heap()->NewPersistentHandle(string); } -template <typename LocalIsolate> +template <typename IsolateT> void PendingCompilationErrorHandler::MessageDetails::Prepare( - LocalIsolate* isolate) { + IsolateT* isolate) { switch (type_) { case kAstRawString: return SetString(arg_->string(), isolate); @@ -101,8 +101,8 @@ void PendingCompilationErrorHandler::ReportWarningAt(int start_position, MessageDetails(start_position, end_position, message, arg)); } -template <typename LocalIsolate> -void PendingCompilationErrorHandler::PrepareWarnings(LocalIsolate* isolate) { +template <typename IsolateT> +void PendingCompilationErrorHandler::PrepareWarnings(IsolateT* isolate) { DCHECK(!has_pending_error()); for (MessageDetails& warning : warning_messages_) { @@ -128,9 +128,9 @@ void PendingCompilationErrorHandler::ReportWarnings( } } -template <typename LocalIsolate> +template <typename IsolateT> void PendingCompilationErrorHandler::PrepareErrors( - LocalIsolate* isolate, AstValueFactory* ast_value_factory) { + IsolateT* isolate, AstValueFactory* ast_value_factory) { if (stack_overflow()) return; DCHECK(has_pending_error()); diff --git a/deps/v8/src/parsing/pending-compilation-error-handler.h b/deps/v8/src/parsing/pending-compilation-error-handler.h index 5efb5a43a4..31e765d514 100644 --- a/deps/v8/src/parsing/pending-compilation-error-handler.h +++ b/deps/v8/src/parsing/pending-compilation-error-handler.h @@ -53,15 +53,15 @@ class PendingCompilationErrorHandler { bool has_pending_warnings() const { return !warning_messages_.empty(); } // Handle errors detected during parsing. - template <typename LocalIsolate> + template <typename IsolateT> EXPORT_TEMPLATE_DECLARE(V8_EXPORT_PRIVATE) - void PrepareErrors(LocalIsolate* isolate, AstValueFactory* ast_value_factory); + void PrepareErrors(IsolateT* isolate, AstValueFactory* ast_value_factory); V8_EXPORT_PRIVATE void ReportErrors(Isolate* isolate, Handle<Script> script) const; // Handle warnings detected during compilation. - template <typename LocalIsolate> - void PrepareWarnings(LocalIsolate* isolate); + template <typename IsolateT> + void PrepareWarnings(IsolateT* isolate); void ReportWarnings(Isolate* isolate, Handle<Script> script) const; V8_EXPORT_PRIVATE Handle<String> FormatErrorMessageForTest(Isolate* isolate); @@ -106,8 +106,8 @@ class PendingCompilationErrorHandler { MessageLocation GetLocation(Handle<Script> script) const; MessageTemplate message() const { return message_; } - template <typename LocalIsolate> - void Prepare(LocalIsolate* isolate); + template <typename IsolateT> + void Prepare(IsolateT* isolate); private: enum Type { kNone, kAstRawString, kConstCharString, kMainThreadHandle }; diff --git a/deps/v8/src/parsing/preparser.cc b/deps/v8/src/parsing/preparser.cc index 2764e00a8b..4547e602ee 100644 --- a/deps/v8/src/parsing/preparser.cc +++ b/deps/v8/src/parsing/preparser.cc @@ -272,10 +272,9 @@ PreParser::Expression PreParser::ParseFunctionLiteral( DCHECK_NE(FunctionSyntaxKind::kWrapped, function_syntax_kind); // Function :: // '(' FormalParameterList? ')' '{' FunctionBody '}' - RuntimeCallTimerScope runtime_timer( - runtime_call_stats_, - RuntimeCallCounterId::kPreParseWithVariableResolution, - RuntimeCallStats::kThreadSpecific); + RCS_SCOPE(runtime_call_stats_, + RuntimeCallCounterId::kPreParseWithVariableResolution, + RuntimeCallStats::kThreadSpecific); base::ElapsedTimer timer; if (V8_UNLIKELY(FLAG_log_function_events)) timer.Start(); diff --git a/deps/v8/src/parsing/rewriter.cc b/deps/v8/src/parsing/rewriter.cc index dee0763280..35f82e25ab 100644 --- a/deps/v8/src/parsing/rewriter.cc +++ b/deps/v8/src/parsing/rewriter.cc @@ -382,10 +382,9 @@ DECLARATION_NODE_LIST(DEF_VISIT) // Assumes code has been parsed. Mutates the AST, so the AST should not // continue to be used in the case of failure. bool Rewriter::Rewrite(ParseInfo* info) { - RuntimeCallTimerScope runtimeTimer( - info->runtime_call_stats(), - RuntimeCallCounterId::kCompileRewriteReturnResult, - RuntimeCallStats::kThreadSpecific); + RCS_SCOPE(info->runtime_call_stats(), + RuntimeCallCounterId::kCompileRewriteReturnResult, + RuntimeCallStats::kThreadSpecific); FunctionLiteral* function = info->literal(); DCHECK_NOT_NULL(function); diff --git a/deps/v8/src/parsing/scanner-character-streams.cc b/deps/v8/src/parsing/scanner-character-streams.cc index 434b83676c..a5fec69e84 100644 --- a/deps/v8/src/parsing/scanner-character-streams.cc +++ b/deps/v8/src/parsing/scanner-character-streams.cc @@ -215,8 +215,7 @@ class ChunkedStream { const uint8_t* data = nullptr; size_t length; { - RuntimeCallTimerScope scope(stats, - RuntimeCallCounterId::kGetMoreDataCallback); + RCS_SCOPE(stats, RuntimeCallCounterId::kGetMoreDataCallback); length = source_->GetMoreData(&data); } ProcessChunk(data, position, length); @@ -721,8 +720,7 @@ void Utf8ExternalStreamingStream::FillBufferFromCurrentChunk() { } bool Utf8ExternalStreamingStream::FetchChunk() { - RuntimeCallTimerScope scope(runtime_call_stats(), - RuntimeCallCounterId::kGetMoreDataCallback); + RCS_SCOPE(runtime_call_stats(), RuntimeCallCounterId::kGetMoreDataCallback); DCHECK_EQ(current_.chunk_no, chunks_.size()); DCHECK(chunks_.empty() || chunks_.back().length != 0); diff --git a/deps/v8/src/parsing/scanner.cc b/deps/v8/src/parsing/scanner.cc index c596078762..8ee64a1696 100644 --- a/deps/v8/src/parsing/scanner.cc +++ b/deps/v8/src/parsing/scanner.cc @@ -586,8 +586,8 @@ Token::Value Scanner::ScanTemplateSpan() { return result; } -template <typename LocalIsolate> -Handle<String> Scanner::SourceUrl(LocalIsolate* isolate) const { +template <typename IsolateT> +Handle<String> Scanner::SourceUrl(IsolateT* isolate) const { Handle<String> tmp; if (source_url_.length() > 0) { tmp = source_url_.Internalize(isolate); @@ -598,8 +598,8 @@ Handle<String> Scanner::SourceUrl(LocalIsolate* isolate) const { template Handle<String> Scanner::SourceUrl(Isolate* isolate) const; template Handle<String> Scanner::SourceUrl(LocalIsolate* isolate) const; -template <typename LocalIsolate> -Handle<String> Scanner::SourceMappingUrl(LocalIsolate* isolate) const { +template <typename IsolateT> +Handle<String> Scanner::SourceMappingUrl(IsolateT* isolate) const { Handle<String> tmp; if (source_mapping_url_.length() > 0) { tmp = source_mapping_url_.Internalize(isolate); diff --git a/deps/v8/src/parsing/scanner.h b/deps/v8/src/parsing/scanner.h index 3df234ce54..d93f581366 100644 --- a/deps/v8/src/parsing/scanner.h +++ b/deps/v8/src/parsing/scanner.h @@ -407,10 +407,10 @@ class V8_EXPORT_PRIVATE Scanner { return ScanTemplateSpan(); } - template <typename LocalIsolate> - Handle<String> SourceUrl(LocalIsolate* isolate) const; - template <typename LocalIsolate> - Handle<String> SourceMappingUrl(LocalIsolate* isolate) const; + template <typename IsolateT> + Handle<String> SourceUrl(IsolateT* isolate) const; + template <typename IsolateT> + Handle<String> SourceMappingUrl(IsolateT* isolate) const; bool FoundHtmlComment() const { return found_html_comment_; } diff --git a/deps/v8/src/profiler/cpu-profiler.cc b/deps/v8/src/profiler/cpu-profiler.cc index eba513b39d..ba9022be1b 100644 --- a/deps/v8/src/profiler/cpu-profiler.cc +++ b/deps/v8/src/profiler/cpu-profiler.cc @@ -104,10 +104,11 @@ ProfilingScope::~ProfilingScope() { ProfilerEventsProcessor::ProfilerEventsProcessor( Isolate* isolate, Symbolizer* symbolizer, - ProfilerCodeObserver* code_observer) + ProfilerCodeObserver* code_observer, CpuProfilesCollection* profiles) : Thread(Thread::Options("v8:ProfEvntProc", kProfilerStackSize)), symbolizer_(symbolizer), code_observer_(code_observer), + profiles_(profiles), last_code_event_id_(0), last_processed_code_event_id_(0), isolate_(isolate) { @@ -119,9 +120,8 @@ SamplingEventsProcessor::SamplingEventsProcessor( Isolate* isolate, Symbolizer* symbolizer, ProfilerCodeObserver* code_observer, CpuProfilesCollection* profiles, base::TimeDelta period, bool use_precise_sampling) - : ProfilerEventsProcessor(isolate, symbolizer, code_observer), + : ProfilerEventsProcessor(isolate, symbolizer, code_observer, profiles), sampler_(new CpuSampler(isolate, this)), - profiles_(profiles), period_(period), use_precise_sampling_(use_precise_sampling) { sampler_->Start(); @@ -188,7 +188,14 @@ void ProfilerEventsProcessor::StopSynchronously() { bool ProfilerEventsProcessor::ProcessCodeEvent() { CodeEventsContainer record; if (events_buffer_.Dequeue(&record)) { - code_observer_->CodeEventHandlerInternal(record); + if (record.generic.type == CodeEventRecord::NATIVE_CONTEXT_MOVE) { + NativeContextMoveEventRecord& nc_record = + record.NativeContextMoveEventRecord_; + profiles_->UpdateNativeContextAddressForCurrentProfiles( + nc_record.from_address, nc_record.to_address); + } else { + code_observer_->CodeEventHandlerInternal(record); + } last_processed_code_event_id_ = record.generic.order; return true; } @@ -202,6 +209,7 @@ void ProfilerEventsProcessor::CodeEventHandler( case CodeEventRecord::CODE_MOVE: case CodeEventRecord::CODE_DISABLE_OPT: case CodeEventRecord::CODE_DELETE: + case CodeEventRecord::NATIVE_CONTEXT_MOVE: Enqueue(evt_rec); break; case CodeEventRecord::CODE_DEOPT: { @@ -224,7 +232,8 @@ void SamplingEventsProcessor::SymbolizeAndAddToProfiles( symbolizer_->SymbolizeTickSample(record->sample); profiles_->AddPathToCurrentProfiles( record->sample.timestamp, symbolized.stack_trace, symbolized.src_line, - record->sample.update_stats, record->sample.sampling_interval); + record->sample.update_stats, record->sample.sampling_interval, + reinterpret_cast<Address>(record->sample.context)); } ProfilerEventsProcessor::SampleProcessingResult @@ -371,6 +380,7 @@ void ProfilerCodeObserver::CodeEventHandlerInternal( } void ProfilerCodeObserver::CreateEntriesForRuntimeCallStats() { +#ifdef V8_RUNTIME_CALL_STATS RuntimeCallStats* rcs = isolate_->counters()->runtime_call_stats(); for (int i = 0; i < RuntimeCallStats::kNumberOfCounters; ++i) { RuntimeCallCounter* counter = rcs->GetCounter(i); @@ -379,6 +389,7 @@ void ProfilerCodeObserver::CreateEntriesForRuntimeCallStats() { "native V8Runtime"); code_map_.AddCode(reinterpret_cast<Address>(counter), entry, 1); } +#endif // V8_RUNTIME_CALL_STATS } void ProfilerCodeObserver::LogBuiltins() { diff --git a/deps/v8/src/profiler/cpu-profiler.h b/deps/v8/src/profiler/cpu-profiler.h index d605a8c3d3..ced37e4ade 100644 --- a/deps/v8/src/profiler/cpu-profiler.h +++ b/deps/v8/src/profiler/cpu-profiler.h @@ -37,10 +37,14 @@ class Symbolizer; V(REPORT_BUILTIN, ReportBuiltinEventRecord) \ V(CODE_DELETE, CodeDeleteEventRecord) +#define VM_EVENTS_TYPE_LIST(V) \ + CODE_EVENTS_TYPE_LIST(V) \ + V(NATIVE_CONTEXT_MOVE, NativeContextMoveEventRecord) + class CodeEventRecord { public: #define DECLARE_TYPE(type, ignore) type, - enum Type { NONE = 0, CODE_EVENTS_TYPE_LIST(DECLARE_TYPE) }; + enum Type { NONE = 0, VM_EVENTS_TYPE_LIST(DECLARE_TYPE) }; #undef DECLARE_TYPE Type type; @@ -99,6 +103,13 @@ class ReportBuiltinEventRecord : public CodeEventRecord { V8_INLINE void UpdateCodeMap(CodeMap* code_map); }; +// Signals that a native context's address has changed. +class NativeContextMoveEventRecord : public CodeEventRecord { + public: + Address from_address; + Address to_address; +}; + // A record type for sending samples from the main thread/signal handler to the // profiling thread. class TickSampleEventRecord { @@ -130,7 +141,7 @@ class CodeEventsContainer { union { CodeEventRecord generic; #define DECLARE_CLASS(ignore, type) type type##_; - CODE_EVENTS_TYPE_LIST(DECLARE_CLASS) + VM_EVENTS_TYPE_LIST(DECLARE_CLASS) #undef DECLARE_CLASS }; }; @@ -174,7 +185,8 @@ class V8_EXPORT_PRIVATE ProfilerEventsProcessor : public base::Thread, protected: ProfilerEventsProcessor(Isolate* isolate, Symbolizer* symbolizer, - ProfilerCodeObserver* code_observer); + ProfilerCodeObserver* code_observer, + CpuProfilesCollection* profiles); // Called from events processing thread (Run() method.) bool ProcessCodeEvent(); @@ -188,6 +200,7 @@ class V8_EXPORT_PRIVATE ProfilerEventsProcessor : public base::Thread, Symbolizer* symbolizer_; ProfilerCodeObserver* code_observer_; + CpuProfilesCollection* profiles_; std::atomic_bool running_{true}; base::ConditionVariable running_cond_; base::Mutex running_mutex_; @@ -238,7 +251,6 @@ class V8_EXPORT_PRIVATE SamplingEventsProcessor SamplingCircularQueue<TickSampleEventRecord, kTickSampleQueueLength> ticks_buffer_; std::unique_ptr<sampler::Sampler> sampler_; - CpuProfilesCollection* profiles_; base::TimeDelta period_; // Samples & code events processing period. const bool use_precise_sampling_; // Whether or not busy-waiting is used for // low sampling intervals on Windows. diff --git a/deps/v8/src/profiler/heap-profiler.cc b/deps/v8/src/profiler/heap-profiler.cc index 8a7ed34d46..dbe48876d2 100644 --- a/deps/v8/src/profiler/heap-profiler.cc +++ b/deps/v8/src/profiler/heap-profiler.cc @@ -81,9 +81,10 @@ v8::EmbedderGraph::Node::Detachedness HeapProfiler::GetDetachedness( HeapSnapshot* HeapProfiler::TakeSnapshot( v8::ActivityControl* control, v8::HeapProfiler::ObjectNameResolver* resolver, - bool treat_global_objects_as_roots) { + bool treat_global_objects_as_roots, bool capture_numeric_value) { is_taking_snapshot_ = true; - HeapSnapshot* result = new HeapSnapshot(this, treat_global_objects_as_roots); + HeapSnapshot* result = new HeapSnapshot(this, treat_global_objects_as_roots, + capture_numeric_value); { HeapSnapshotGenerator generator(result, control, resolver, heap()); if (!generator.GenerateSnapshot()) { diff --git a/deps/v8/src/profiler/heap-profiler.h b/deps/v8/src/profiler/heap-profiler.h index ebf737523c..fc867e6632 100644 --- a/deps/v8/src/profiler/heap-profiler.h +++ b/deps/v8/src/profiler/heap-profiler.h @@ -33,7 +33,8 @@ class HeapProfiler : public HeapObjectAllocationTracker { HeapSnapshot* TakeSnapshot(v8::ActivityControl* control, v8::HeapProfiler::ObjectNameResolver* resolver, - bool treat_global_objects_as_roots); + bool treat_global_objects_as_roots, + bool capture_numeric_value); bool StartSamplingHeapProfiler(uint64_t sample_interval, int stack_depth, v8::HeapProfiler::SamplingFlags); diff --git a/deps/v8/src/profiler/heap-snapshot-generator.cc b/deps/v8/src/profiler/heap-snapshot-generator.cc index 9cc26fa3e2..da4e57fad9 100644 --- a/deps/v8/src/profiler/heap-snapshot-generator.cc +++ b/deps/v8/src/profiler/heap-snapshot-generator.cc @@ -183,9 +183,11 @@ const char* HeapEntry::TypeAsString() const { } } -HeapSnapshot::HeapSnapshot(HeapProfiler* profiler, bool global_objects_as_roots) +HeapSnapshot::HeapSnapshot(HeapProfiler* profiler, bool global_objects_as_roots, + bool capture_numeric_value) : profiler_(profiler), - treat_global_objects_as_roots_(global_objects_as_roots) { + treat_global_objects_as_roots_(global_objects_as_roots), + capture_numeric_value_(capture_numeric_value) { // It is very important to keep objects that form a heap snapshot // as small as possible. Check assumptions about data structure sizes. STATIC_ASSERT(kSystemPointerSize != 4 || sizeof(HeapGraphEdge) == 12); @@ -387,8 +389,7 @@ SnapshotObjectId HeapObjectsMap::FindOrAddEntry(Address addr, return entry_info.id; } entry->value = reinterpret_cast<void*>(entries_.size()); - SnapshotObjectId id = next_id_; - next_id_ += kObjectIdStep; + SnapshotObjectId id = get_next_id(); entries_.push_back(EntryInfo(id, addr, size, accessed)); DCHECK(static_cast<uint32_t>(entries_.size()) > entries_map_.occupancy()); return id; @@ -553,6 +554,16 @@ HeapEntry* V8HeapExplorer::AllocateEntry(HeapThing ptr) { return AddEntry(HeapObject::cast(Object(reinterpret_cast<Address>(ptr)))); } +HeapEntry* V8HeapExplorer::AllocateEntry(Smi smi) { + SnapshotObjectId id = heap_object_map_->get_next_id(); + HeapEntry* entry = + snapshot_->AddEntry(HeapEntry::kHeapNumber, "smi number", id, 0, 0); + // XXX: Smis do not appear in CombinedHeapObjectIterator, so we need to + // extract the references here + ExtractNumberReference(entry, smi); + return entry; +} + void V8HeapExplorer::ExtractLocation(HeapEntry* entry, HeapObject object) { if (object.IsJSFunction()) { JSFunction func = JSFunction::cast(object); @@ -638,7 +649,7 @@ HeapEntry* V8HeapExplorer::AddEntry(HeapObject object) { object.IsByteArray()) { return AddEntry(object, HeapEntry::kArray, ""); } else if (object.IsHeapNumber()) { - return AddEntry(object, HeapEntry::kHeapNumber, "number"); + return AddEntry(object, HeapEntry::kHeapNumber, "heap number"); } return AddEntry(object, HeapEntry::kHidden, GetSystemEntryName(object)); } @@ -721,6 +732,13 @@ class IndexedReferencesExtractor : public ObjectVisitor { ObjectSlot end) override { VisitPointers(host, MaybeObjectSlot(start), MaybeObjectSlot(end)); } + void VisitMapPointer(HeapObject object) override { + if (generator_->visited_fields_[0]) { + generator_->visited_fields_[0] = false; + } else { + VisitHeapObjectImpl(object.map(), 0); + } + } void VisitPointers(HeapObject host, MaybeObjectSlot start, MaybeObjectSlot end) override { // [start,end) must be a sub-region of [parent_start_, parent_end), i.e. @@ -830,6 +848,10 @@ void V8HeapExplorer::ExtractReferences(HeapEntry* entry, HeapObject obj) { ExtractEphemeronHashTableReferences(entry, EphemeronHashTable::cast(obj)); } else if (obj.IsFixedArray()) { ExtractFixedArrayReferences(entry, FixedArray::cast(obj)); + } else if (obj.IsHeapNumber()) { + if (snapshot_->capture_numeric_value()) { + ExtractNumberReference(entry, obj); + } } } @@ -867,7 +889,7 @@ void V8HeapExplorer::ExtractJSObjectReferences(HeapEntry* entry, } else if (obj.IsJSFunction()) { JSFunction js_fun = JSFunction::cast(js_obj); if (js_fun.has_prototype_slot()) { - Object proto_or_map = js_fun.prototype_or_initial_map(); + Object proto_or_map = js_fun.prototype_or_initial_map(kAcquireLoad); if (!proto_or_map.IsTheHole(isolate)) { if (!proto_or_map.IsMap()) { SetPropertyReference(entry, roots.prototype_string(), proto_or_map, @@ -1246,6 +1268,11 @@ class JSArrayBufferDataEntryAllocator : public HeapEntriesAllocator { HeapEntry::kNative, "system / JSArrayBufferData", size_); } + HeapEntry* AllocateEntry(Smi smi) override { + DCHECK(false); + return nullptr; + } + private: size_t size_; V8HeapExplorer* explorer_; @@ -1291,6 +1318,30 @@ void V8HeapExplorer::ExtractFixedArrayReferences(HeapEntry* entry, } } +void V8HeapExplorer::ExtractNumberReference(HeapEntry* entry, Object number) { + DCHECK(number.IsNumber()); + + // Must be large enough to fit any double, int, or size_t. + char arr[32]; + Vector<char> buffer(arr, arraysize(arr)); + + const char* string; + if (number.IsSmi()) { + int int_value = Smi::ToInt(number); + string = IntToCString(int_value, buffer); + } else { + double double_value = HeapNumber::cast(number).value(); + string = DoubleToCString(double_value, buffer); + } + + const char* name = names_->GetCopy(string); + + SnapshotObjectId id = heap_object_map_->get_next_id(); + HeapEntry* child_entry = + snapshot_->AddEntry(HeapEntry::kString, name, id, 0, 0); + entry->SetNamedReference(HeapGraphEdge::kInternal, "value", child_entry); +} + void V8HeapExplorer::ExtractFeedbackVectorReferences( HeapEntry* entry, FeedbackVector feedback_vector) { MaybeObject code = feedback_vector.maybe_optimized_code(); @@ -1345,8 +1396,10 @@ void V8HeapExplorer::ExtractPropertyReferences(JSObject js_obj, PropertyDetails details = descs.GetDetails(i); switch (details.location()) { case kField: { - Representation r = details.representation(); - if (r.IsSmi() || r.IsDouble()) break; + if (!snapshot_->capture_numeric_value()) { + Representation r = details.representation(); + if (r.IsSmi() || r.IsDouble()) break; + } Name k = descs.GetKey(i); FieldIndex field_index = FieldIndex::ForDescriptor(js_obj.map(), i); @@ -1476,9 +1529,15 @@ String V8HeapExplorer::GetConstructorName(JSObject object) { } HeapEntry* V8HeapExplorer::GetEntry(Object obj) { - return obj.IsHeapObject() ? generator_->FindOrAddEntry( - reinterpret_cast<void*>(obj.ptr()), this) - : nullptr; + if (obj.IsHeapObject()) { + return generator_->FindOrAddEntry(reinterpret_cast<void*>(obj.ptr()), this); + } + + DCHECK(obj.IsSmi()); + if (!snapshot_->capture_numeric_value()) { + return nullptr; + } + return generator_->FindOrAddEntry(Smi::cast(obj), this); } class RootsReferencesExtractor : public RootVisitor { @@ -1500,6 +1559,7 @@ class RootsReferencesExtractor : public RootVisitor { void VisitRootPointers(Root root, const char* description, FullObjectSlot start, FullObjectSlot end) override { for (FullObjectSlot p = start; p < end; ++p) { + DCHECK(!MapWord::IsPacked(p.Relaxed_Load().ptr())); VisitRootPointer(root, description, p); } } @@ -1649,23 +1709,25 @@ void V8HeapExplorer::SetElementReference(HeapEntry* parent_entry, int index, void V8HeapExplorer::SetInternalReference(HeapEntry* parent_entry, const char* reference_name, Object child_obj, int field_offset) { - HeapEntry* child_entry = GetEntry(child_obj); - if (child_entry == nullptr) return; - if (IsEssentialObject(child_obj)) { - parent_entry->SetNamedReference(HeapGraphEdge::kInternal, reference_name, - child_entry); + if (!IsEssentialObject(child_obj)) { + return; } + HeapEntry* child_entry = GetEntry(child_obj); + DCHECK_NOT_NULL(child_entry); + parent_entry->SetNamedReference(HeapGraphEdge::kInternal, reference_name, + child_entry); MarkVisitedField(field_offset); } void V8HeapExplorer::SetInternalReference(HeapEntry* parent_entry, int index, Object child_obj, int field_offset) { - HeapEntry* child_entry = GetEntry(child_obj); - if (child_entry == nullptr) return; - if (IsEssentialObject(child_obj)) { - parent_entry->SetNamedReference(HeapGraphEdge::kInternal, - names_->GetName(index), child_entry); + if (!IsEssentialObject(child_obj)) { + return; } + HeapEntry* child_entry = GetEntry(child_obj); + DCHECK_NOT_NULL(child_entry); + parent_entry->SetNamedReference(HeapGraphEdge::kInternal, + names_->GetName(index), child_entry); MarkVisitedField(field_offset); } @@ -1673,9 +1735,13 @@ void V8HeapExplorer::SetHiddenReference(HeapObject parent_obj, HeapEntry* parent_entry, int index, Object child_obj, int field_offset) { DCHECK_EQ(parent_entry, GetEntry(parent_obj)); + DCHECK(!MapWord::IsPacked(child_obj.ptr())); + if (!IsEssentialObject(child_obj)) { + return; + } HeapEntry* child_entry = GetEntry(child_obj); - if (child_entry != nullptr && IsEssentialObject(child_obj) && - IsEssentialHiddenReference(parent_obj, field_offset)) { + DCHECK_NOT_NULL(child_entry); + if (IsEssentialHiddenReference(parent_obj, field_offset)) { parent_entry->SetIndexedReference(HeapGraphEdge::kHidden, index, child_entry); } @@ -1684,23 +1750,25 @@ void V8HeapExplorer::SetHiddenReference(HeapObject parent_obj, void V8HeapExplorer::SetWeakReference(HeapEntry* parent_entry, const char* reference_name, Object child_obj, int field_offset) { - HeapEntry* child_entry = GetEntry(child_obj); - if (child_entry == nullptr) return; - if (IsEssentialObject(child_obj)) { - parent_entry->SetNamedReference(HeapGraphEdge::kWeak, reference_name, - child_entry); + if (!IsEssentialObject(child_obj)) { + return; } + HeapEntry* child_entry = GetEntry(child_obj); + DCHECK_NOT_NULL(child_entry); + parent_entry->SetNamedReference(HeapGraphEdge::kWeak, reference_name, + child_entry); MarkVisitedField(field_offset); } void V8HeapExplorer::SetWeakReference(HeapEntry* parent_entry, int index, Object child_obj, int field_offset) { - HeapEntry* child_entry = GetEntry(child_obj); - if (child_entry == nullptr) return; - if (IsEssentialObject(child_obj)) { - parent_entry->SetNamedReference( - HeapGraphEdge::kWeak, names_->GetFormatted("%d", index), child_entry); + if (!IsEssentialObject(child_obj)) { + return; } + HeapEntry* child_entry = GetEntry(child_obj); + DCHECK_NOT_NULL(child_entry); + parent_entry->SetNamedReference( + HeapGraphEdge::kWeak, names_->GetFormatted("%d", index), child_entry); MarkVisitedField(field_offset); } @@ -1758,6 +1826,13 @@ void V8HeapExplorer::SetGcRootsReference(Root root) { void V8HeapExplorer::SetGcSubrootReference(Root root, const char* description, bool is_weak, Object child_obj) { + if (child_obj.IsSmi()) { + // TODO(arenevier): if we handle smis here, the snapshot gets 2 to 3 times + // slower on large heaps. According to perf, The bulk of the extra works + // happens in TemplateHashMapImpl::Probe method, when tyring to get + // names->GetFormatted("%d / %s", index, description) + return; + } HeapEntry* child_entry = GetEntry(child_obj); if (child_entry == nullptr) return; const char* name = GetStrongGcSubrootName(child_obj); @@ -1834,6 +1909,7 @@ class GlobalObjectsEnumerator : public RootVisitor { void VisitRootPointersImpl(Root root, const char* description, TSlot start, TSlot end) { for (TSlot p = start; p < end; ++p) { + DCHECK(!MapWord::IsPacked(p.Relaxed_Load(isolate_).ptr())); Object o = p.load(isolate_); if (!o.IsNativeContext(isolate_)) continue; JSObject proxy = Context::cast(o).global_proxy(); @@ -1934,6 +2010,7 @@ class EmbedderGraphEntriesAllocator : public HeapEntriesAllocator { names_(snapshot_->profiler()->names()), heap_object_map_(snapshot_->profiler()->heap_object_map()) {} HeapEntry* AllocateEntry(HeapThing ptr) override; + HeapEntry* AllocateEntry(Smi smi) override; private: HeapSnapshot* snapshot_; @@ -1984,6 +2061,11 @@ HeapEntry* EmbedderGraphEntriesAllocator::AllocateEntry(HeapThing ptr) { return heap_entry; } +HeapEntry* EmbedderGraphEntriesAllocator::AllocateEntry(Smi smi) { + DCHECK(false); + return nullptr; +} + NativeObjectsExplorer::NativeObjectsExplorer( HeapSnapshot* snapshot, SnapshottingProgressReportingInterface* progress) : isolate_( diff --git a/deps/v8/src/profiler/heap-snapshot-generator.h b/deps/v8/src/profiler/heap-snapshot-generator.h index 12fd9450a9..2ab13a99bf 100644 --- a/deps/v8/src/profiler/heap-snapshot-generator.h +++ b/deps/v8/src/profiler/heap-snapshot-generator.h @@ -188,7 +188,8 @@ class HeapEntry { // HeapSnapshotGenerator fills in a HeapSnapshot. class HeapSnapshot { public: - explicit HeapSnapshot(HeapProfiler* profiler, bool global_objects_as_roots); + explicit HeapSnapshot(HeapProfiler* profiler, bool global_objects_as_roots, + bool capture_numeric_value); HeapSnapshot(const HeapSnapshot&) = delete; HeapSnapshot& operator=(const HeapSnapshot&) = delete; void Delete(); @@ -213,6 +214,7 @@ class HeapSnapshot { bool treat_global_objects_as_roots() const { return treat_global_objects_as_roots_; } + bool capture_numeric_value() const { return capture_numeric_value_; } void AddLocation(HeapEntry* entry, int scriptId, int line, int col); HeapEntry* AddEntry(HeapEntry::Type type, @@ -245,6 +247,7 @@ class HeapSnapshot { std::vector<SourceLocation> locations_; SnapshotObjectId max_snapshot_js_object_id_ = -1; bool treat_global_objects_as_roots_; + bool capture_numeric_value_; }; @@ -277,6 +280,10 @@ class HeapObjectsMap { SnapshotObjectId last_assigned_id() const { return next_id_ - kObjectIdStep; } + SnapshotObjectId get_next_id() { + next_id_ += kObjectIdStep; + return next_id_ - kObjectIdStep; + } void StopHeapObjectsTracking(); SnapshotObjectId PushHeapObjectsStats(OutputStream* stream, @@ -322,6 +329,7 @@ class HeapEntriesAllocator { public: virtual ~HeapEntriesAllocator() = default; virtual HeapEntry* AllocateEntry(HeapThing ptr) = 0; + virtual HeapEntry* AllocateEntry(Smi smi) = 0; }; class SnapshottingProgressReportingInterface { @@ -342,6 +350,7 @@ class V8_EXPORT_PRIVATE V8HeapExplorer : public HeapEntriesAllocator { V8HeapExplorer& operator=(const V8HeapExplorer&) = delete; HeapEntry* AllocateEntry(HeapThing ptr) override; + HeapEntry* AllocateEntry(Smi smi) override; int EstimateObjectsCount(); bool IterateAndExtractReferences(HeapSnapshotGenerator* generator); void CollectGlobalObjectsTags(); @@ -397,6 +406,7 @@ class V8_EXPORT_PRIVATE V8HeapExplorer : public HeapEntriesAllocator { void ExtractJSGeneratorObjectReferences(HeapEntry* entry, JSGeneratorObject generator); void ExtractFixedArrayReferences(HeapEntry* entry, FixedArray array); + void ExtractNumberReference(HeapEntry* entry, Object number); void ExtractFeedbackVectorReferences(HeapEntry* entry, FeedbackVector feedback_vector); void ExtractDescriptorArrayReferences(HeapEntry* entry, @@ -501,6 +511,9 @@ class HeapSnapshotGenerator : public SnapshottingProgressReportingInterface { // The HeapEntriesMap instance is used to track a mapping between // real heap objects and their representations in heap snapshots. using HeapEntriesMap = std::unordered_map<HeapThing, HeapEntry*>; + // The SmiEntriesMap instance is used to track a mapping between smi and + // their representations in heap snapshots. + using SmiEntriesMap = std::unordered_map<int, HeapEntry*>; HeapSnapshotGenerator(HeapSnapshot* snapshot, v8::ActivityControl* control, @@ -515,16 +528,31 @@ class HeapSnapshotGenerator : public SnapshottingProgressReportingInterface { return it != entries_map_.end() ? it->second : nullptr; } + HeapEntry* FindEntry(Smi smi) { + auto it = smis_map_.find(smi.value()); + return it != smis_map_.end() ? it->second : nullptr; + } + HeapEntry* AddEntry(HeapThing ptr, HeapEntriesAllocator* allocator) { return entries_map_.emplace(ptr, allocator->AllocateEntry(ptr)) .first->second; } + HeapEntry* AddEntry(Smi smi, HeapEntriesAllocator* allocator) { + return smis_map_.emplace(smi.value(), allocator->AllocateEntry(smi)) + .first->second; + } + HeapEntry* FindOrAddEntry(HeapThing ptr, HeapEntriesAllocator* allocator) { HeapEntry* entry = FindEntry(ptr); return entry != nullptr ? entry : AddEntry(ptr, allocator); } + HeapEntry* FindOrAddEntry(Smi smi, HeapEntriesAllocator* allocator) { + HeapEntry* entry = FindEntry(smi); + return entry != nullptr ? entry : AddEntry(smi, allocator); + } + private: bool FillReferences(); void ProgressStep() override; @@ -537,6 +565,7 @@ class HeapSnapshotGenerator : public SnapshottingProgressReportingInterface { NativeObjectsExplorer dom_explorer_; // Mapping from HeapThing pointers to HeapEntry indices. HeapEntriesMap entries_map_; + SmiEntriesMap smis_map_; // Used during snapshot generation. int progress_counter_; int progress_total_; diff --git a/deps/v8/src/profiler/profile-generator.cc b/deps/v8/src/profiler/profile-generator.cc index 375079de3e..93075d4f7c 100644 --- a/deps/v8/src/profiler/profile-generator.cc +++ b/deps/v8/src/profiler/profile-generator.cc @@ -533,6 +533,12 @@ void ProfileTree::TraverseDepthFirst(Callback* callback) { } } +void ContextFilter::OnMoveEvent(Address from_address, Address to_address) { + if (native_context_address() != from_address) return; + + set_native_context_address(to_address); +} + using v8::tracing::TracedValue; std::atomic<uint32_t> CpuProfile::last_id_; @@ -557,6 +563,13 @@ CpuProfile::CpuProfile(CpuProfiler* profiler, const char* title, value->SetDouble("startTime", start_time_.since_origin().InMicroseconds()); TRACE_EVENT_SAMPLE_WITH_ID1(TRACE_DISABLED_BY_DEFAULT("v8.cpu_profiler"), "Profile", id_, "data", std::move(value)); + + DisallowHeapAllocation no_gc; + if (options_.has_filter_context()) { + i::Address raw_filter_context = + reinterpret_cast<i::Address>(options_.raw_filter_context()); + context_filter_.set_native_context_address(raw_filter_context); + } } bool CpuProfile::CheckSubsample(base::TimeDelta source_sampling_interval) { @@ -706,6 +719,8 @@ void CpuProfile::StreamPendingTraceEvents() { void CpuProfile::FinishProfile() { end_time_ = base::TimeTicks::HighResolutionNow(); + // Stop tracking context movements after profiling stops. + context_filter_.set_native_context_address(kNullAddress); StreamPendingTraceEvents(); auto value = TracedValue::Create(); // The endTime timestamp is not converted to Perfetto's clock domain and will @@ -942,14 +957,26 @@ base::TimeDelta CpuProfilesCollection::GetCommonSamplingInterval() const { void CpuProfilesCollection::AddPathToCurrentProfiles( base::TimeTicks timestamp, const ProfileStackTrace& path, int src_line, - bool update_stats, base::TimeDelta sampling_interval) { + bool update_stats, base::TimeDelta sampling_interval, + Address native_context_address) { // As starting / stopping profiles is rare relatively to this // method, we don't bother minimizing the duration of lock holding, // e.g. copying contents of the list to a local vector. current_profiles_semaphore_.Wait(); for (const std::unique_ptr<CpuProfile>& profile : current_profiles_) { - profile->AddPath(timestamp, path, src_line, update_stats, - sampling_interval); + if (profile->context_filter().Accept(native_context_address)) { + profile->AddPath(timestamp, path, src_line, update_stats, + sampling_interval); + } + } + current_profiles_semaphore_.Signal(); +} + +void CpuProfilesCollection::UpdateNativeContextAddressForCurrentProfiles( + Address from, Address to) { + current_profiles_semaphore_.Wait(); + for (const std::unique_ptr<CpuProfile>& profile : current_profiles_) { + profile->context_filter().OnMoveEvent(from, to); } current_profiles_semaphore_.Signal(); } diff --git a/deps/v8/src/profiler/profile-generator.h b/deps/v8/src/profiler/profile-generator.h index 551dfdf591..c4bffa945a 100644 --- a/deps/v8/src/profiler/profile-generator.h +++ b/deps/v8/src/profiler/profile-generator.h @@ -237,6 +237,31 @@ struct CodeEntryAndLineNumber { using ProfileStackTrace = std::vector<CodeEntryAndLineNumber>; +// Filters stack frames from sources other than a target native context. +class ContextFilter { + public: + explicit ContextFilter(Address native_context_address = kNullAddress) + : native_context_address_(native_context_address) {} + + // Invoked when a native context has changed address. + void OnMoveEvent(Address from_address, Address to_address); + + bool Accept(Address native_context_address) const { + if (native_context_address_ == kNullAddress) return true; + return (native_context_address & ~kHeapObjectTag) == + native_context_address_; + } + + // Update the context's tracked address based on VM-thread events. + void set_native_context_address(Address address) { + native_context_address_ = address; + } + Address native_context_address() const { return native_context_address_; } + + private: + Address native_context_address_; +}; + class ProfileTree; class V8_EXPORT_PRIVATE ProfileNode { @@ -386,6 +411,7 @@ class CpuProfile { base::TimeTicks start_time() const { return start_time_; } base::TimeTicks end_time() const { return end_time_; } CpuProfiler* cpu_profiler() const { return profiler_; } + ContextFilter& context_filter() { return context_filter_; } void UpdateTicksScale(); @@ -397,6 +423,7 @@ class CpuProfile { const char* title_; const CpuProfilingOptions options_; std::unique_ptr<DiscardedSamplesDelegate> delegate_; + ContextFilter context_filter_; base::TimeTicks start_time_; base::TimeTicks end_time_; std::deque<SampleInfo> samples_; @@ -486,7 +513,11 @@ class V8_EXPORT_PRIVATE CpuProfilesCollection { void AddPathToCurrentProfiles(base::TimeTicks timestamp, const ProfileStackTrace& path, int src_line, bool update_stats, - base::TimeDelta sampling_interval); + base::TimeDelta sampling_interval, + Address native_context_address = kNullAddress); + + // Called from profile generator thread. + void UpdateNativeContextAddressForCurrentProfiles(Address from, Address to); // Limits the number of profiles that can be simultaneously collected. static const int kMaxSimultaneousProfiles = 100; diff --git a/deps/v8/src/profiler/profiler-listener.cc b/deps/v8/src/profiler/profiler-listener.cc index 8b253fb472..a2cfb8b07b 100644 --- a/deps/v8/src/profiler/profiler-listener.cc +++ b/deps/v8/src/profiler/profiler-listener.cc @@ -302,6 +302,13 @@ void ProfilerListener::CodeMoveEvent(AbstractCode from, AbstractCode to) { DispatchCodeEvent(evt_rec); } +void ProfilerListener::NativeContextMoveEvent(Address from, Address to) { + CodeEventsContainer evt_rec(CodeEventRecord::NATIVE_CONTEXT_MOVE); + evt_rec.NativeContextMoveEventRecord_.from_address = from; + evt_rec.NativeContextMoveEventRecord_.to_address = to; + DispatchCodeEvent(evt_rec); +} + void ProfilerListener::CodeDisableOptEvent(Handle<AbstractCode> code, Handle<SharedFunctionInfo> shared) { CodeEventsContainer evt_rec(CodeEventRecord::CODE_DISABLE_OPT); diff --git a/deps/v8/src/profiler/profiler-listener.h b/deps/v8/src/profiler/profiler-listener.h index 49e7db32ba..50a9b81893 100644 --- a/deps/v8/src/profiler/profiler-listener.h +++ b/deps/v8/src/profiler/profiler-listener.h @@ -59,6 +59,7 @@ class V8_EXPORT_PRIVATE ProfilerListener : public CodeEventListener, Handle<String> source) override; void CodeMoveEvent(AbstractCode from, AbstractCode to) override; void SharedFunctionInfoMoveEvent(Address from, Address to) override {} + void NativeContextMoveEvent(Address from, Address to) override; void CodeMovingGCEvent() override {} void CodeDisableOptEvent(Handle<AbstractCode> code, Handle<SharedFunctionInfo> shared) override; diff --git a/deps/v8/src/profiler/sampling-heap-profiler.cc b/deps/v8/src/profiler/sampling-heap-profiler.cc index aef0170bb4..4bef9793ab 100644 --- a/deps/v8/src/profiler/sampling-heap-profiler.cc +++ b/deps/v8/src/profiler/sampling-heap-profiler.cc @@ -75,7 +75,7 @@ void SamplingHeapProfiler::SampleObject(Address soon_object, size_t size) { DisallowGarbageCollection no_gc; // Check if the area is iterable by confirming that it starts with a map. - DCHECK((*ObjectSlot(soon_object)).IsMap()); + DCHECK(HeapObject::FromAddress(soon_object).map().IsMap()); HandleScope scope(isolate_); HeapObject heap_object = HeapObject::FromAddress(soon_object); diff --git a/deps/v8/src/profiler/tick-sample.cc b/deps/v8/src/profiler/tick-sample.cc index 638aa5545a..253b80d19e 100644 --- a/deps/v8/src/profiler/tick-sample.cc +++ b/deps/v8/src/profiler/tick-sample.cc @@ -7,14 +7,14 @@ #include <cinttypes> #include "include/v8-profiler.h" +#include "src/base/sanitizer/asan.h" +#include "src/base/sanitizer/msan.h" #include "src/execution/frames-inl.h" #include "src/execution/simulator.h" #include "src/execution/vm-state-inl.h" #include "src/heap/heap-inl.h" // For Heap::code_range. #include "src/logging/counters.h" #include "src/profiler/profiler-stats.h" -#include "src/sanitizer/asan.h" -#include "src/sanitizer/msan.h" namespace v8 { namespace internal { @@ -177,6 +177,7 @@ DISABLE_ASAN void TickSample::Init(Isolate* v8_isolate, pc = regs.pc; frames_count = static_cast<unsigned>(info.frames_count); has_external_callback = info.external_callback_entry != nullptr; + context = info.context; if (has_external_callback) { external_callback_entry = info.external_callback_entry; } else if (frames_count) { @@ -209,6 +210,7 @@ bool TickSample::GetStackSample(Isolate* v8_isolate, RegisterState* regs, sample_info->frames_count = 0; sample_info->vm_state = isolate->current_vm_state(); sample_info->external_callback_entry = nullptr; + sample_info->context = nullptr; if (sample_info->vm_state == GC) return true; i::Address js_entry_sp = isolate->js_entry_sp(); @@ -232,7 +234,7 @@ bool TickSample::GetStackSample(Isolate* v8_isolate, RegisterState* regs, // TODO(petermarshall): Code range is always null on ia32 so this check for // IsNoFrameRegion will never actually run there. if (regs->pc && - isolate->heap()->memory_allocator()->code_range().contains( + isolate->heap()->code_region().contains( reinterpret_cast<i::Address>(regs->pc)) && IsNoFrameRegion(reinterpret_cast<i::Address>(regs->pc))) { // The frame is not setup, so it'd be hard to iterate the stack. Bailout. @@ -278,6 +280,13 @@ bool TickSample::GetStackSample(Isolate* v8_isolate, RegisterState* regs, reinterpret_cast<i::Address>(regs->lr), js_entry_sp); + Context top_context = isolate->context(); + if (top_context.ptr() != i::Context::kNoContext && + top_context.ptr() != i::Context::kInvalidContext) { + NativeContext top_native_context = top_context.native_context(); + sample_info->context = reinterpret_cast<void*>(top_native_context.ptr()); + } + if (it.done()) return true; size_t i = 0; @@ -287,15 +296,18 @@ bool TickSample::GetStackSample(Isolate* v8_isolate, RegisterState* regs, frames[i] = reinterpret_cast<void*>(isolate->c_function()); i++; } - +#ifdef V8_RUNTIME_CALL_STATS i::RuntimeCallTimer* timer = isolate->counters()->runtime_call_stats()->current_timer(); +#endif // V8_RUNTIME_CALL_STATS for (; !it.done() && i < frames_limit; it.Advance()) { +#ifdef V8_RUNTIME_CALL_STATS while (timer && reinterpret_cast<i::Address>(timer) < it.frame()->fp() && i < frames_limit) { frames[i++] = reinterpret_cast<void*>(timer->counter()); timer = timer->parent(); } +#endif // V8_RUNTIME_CALL_STATS if (i == frames_limit) break; if (it.frame()->is_interpreted()) { diff --git a/deps/v8/src/profiler/tick-sample.h b/deps/v8/src/profiler/tick-sample.h index 777c3d192d..1bfcb7d097 100644 --- a/deps/v8/src/profiler/tick-sample.h +++ b/deps/v8/src/profiler/tick-sample.h @@ -90,6 +90,7 @@ struct V8_EXPORT TickSample { static const unsigned kMaxFramesCountLog2 = 8; static const unsigned kMaxFramesCount = (1 << kMaxFramesCountLog2) - 1; void* stack[kMaxFramesCount]; // Call stack. + void* context = nullptr; // Address of the incumbent native context. unsigned frames_count : kMaxFramesCountLog2; // Number of captured frames. bool has_external_callback : 1; bool update_stats : 1; // Whether the sample should update aggregated stats. diff --git a/deps/v8/src/regexp/arm64/regexp-macro-assembler-arm64.cc b/deps/v8/src/regexp/arm64/regexp-macro-assembler-arm64.cc index 0441fe2976..5e24500a26 100644 --- a/deps/v8/src/regexp/arm64/regexp-macro-assembler-arm64.cc +++ b/deps/v8/src/regexp/arm64/regexp-macro-assembler-arm64.cc @@ -395,7 +395,7 @@ void RegExpMacroAssemblerARM64::CheckNotBackReferenceIgnoreCase( __ Sub(current_input_offset().X(), current_input_offset().X(), Operand(capture_length, SXTW)); } - if (masm_->emit_debug_code()) { + if (FLAG_debug_code) { __ Cmp(current_input_offset().X(), Operand(current_input_offset(), SXTW)); __ Ccmp(current_input_offset(), 0, NoFlag, eq); // The current input offset should be <= 0, and fit in a W register. @@ -528,7 +528,7 @@ void RegExpMacroAssemblerARM64::CheckNotBackReference(int start_reg, Operand(capture_length, SXTW)); } - if (masm_->emit_debug_code()) { + if (FLAG_debug_code) { __ Cmp(current_input_offset().X(), Operand(current_input_offset(), SXTW)); __ Ccmp(current_input_offset(), 0, NoFlag, eq); // The current input offset should be <= 0, and fit in a W register. @@ -817,7 +817,7 @@ Handle<HeapObject> RegExpMacroAssemblerARM64::GetCode(Handle<String> source) { // Find negative length (offset of start relative to end). __ Sub(x10, input_start(), input_end()); - if (masm_->emit_debug_code()) { + if (FLAG_debug_code) { // Check that the size of the input string chars is in range. __ Neg(x11, x10); __ Cmp(x11, SeqTwoByteString::kMaxCharsSize); @@ -882,7 +882,7 @@ Handle<HeapObject> RegExpMacroAssemblerARM64::GetCode(Handle<String> source) { // Get string length. __ Sub(x10, input_end(), input_start()); - if (masm_->emit_debug_code()) { + if (FLAG_debug_code) { // Check that the size of the input string chars is in range. __ Cmp(x10, SeqTwoByteString::kMaxCharsSize); __ Check(ls, AbortReason::kInputStringTooLong); @@ -1167,7 +1167,7 @@ void RegExpMacroAssemblerARM64::PushBacktrack(Label* label) { } else { __ Adr(x10, label, MacroAssembler::kAdrFar); __ Sub(x10, x10, code_pointer()); - if (masm_->emit_debug_code()) { + if (FLAG_debug_code) { __ Cmp(x10, kWRegMask); // The code offset has to fit in a W register. __ Check(ls, AbortReason::kOffsetOutOfRange); @@ -1322,7 +1322,7 @@ void RegExpMacroAssemblerARM64::ClearRegisters(int reg_from, int reg_to) { void RegExpMacroAssemblerARM64::WriteStackPointerToRegister(int reg) { __ Ldr(x10, MemOperand(frame_pointer(), kStackBase)); __ Sub(x10, backtrack_stackpointer(), x10); - if (masm_->emit_debug_code()) { + if (FLAG_debug_code) { __ Cmp(x10, Operand(w10, SXTW)); // The stack offset needs to fit in a W register. __ Check(eq, AbortReason::kOffsetOutOfRange); @@ -1629,7 +1629,7 @@ void RegExpMacroAssemblerARM64::LoadCurrentCharacterUnchecked(int cp_offset, } if (cp_offset != 0) { - if (masm_->emit_debug_code()) { + if (FLAG_debug_code) { __ Mov(x10, cp_offset * char_size()); __ Add(x10, x10, Operand(current_input_offset(), SXTW)); __ Cmp(x10, Operand(w10, SXTW)); diff --git a/deps/v8/src/regexp/ppc/OWNERS b/deps/v8/src/regexp/ppc/OWNERS deleted file mode 100644 index 02c2cd757c..0000000000 --- a/deps/v8/src/regexp/ppc/OWNERS +++ /dev/null @@ -1,5 +0,0 @@ -junyan@redhat.com -joransiu@ca.ibm.com -midawson@redhat.com -mfarazma@redhat.com -vasili.skurydzin@ibm.com diff --git a/deps/v8/src/regexp/ppc/regexp-macro-assembler-ppc.cc b/deps/v8/src/regexp/ppc/regexp-macro-assembler-ppc.cc index c0d69297f9..77a0952637 100644 --- a/deps/v8/src/regexp/ppc/regexp-macro-assembler-ppc.cc +++ b/deps/v8/src/regexp/ppc/regexp-macro-assembler-ppc.cc @@ -162,7 +162,7 @@ void RegExpMacroAssemblerPPC::AdvanceRegister(int reg, int by) { DCHECK_LE(0, reg); DCHECK_GT(num_registers_, reg); if (by != 0) { - __ LoadP(r3, register_location(reg), r0); + __ LoadU64(r3, register_location(reg), r0); __ mov(r0, Operand(by)); __ add(r3, r3, r0); __ StoreP(r3, register_location(reg), r0); @@ -174,7 +174,7 @@ void RegExpMacroAssemblerPPC::Backtrack() { CheckPreemption(); if (has_backtrack_limit()) { Label next; - __ LoadP(r3, MemOperand(frame_pointer(), kBacktrackCount), r0); + __ LoadU64(r3, MemOperand(frame_pointer(), kBacktrackCount), r0); __ addi(r3, r3, Operand(1)); __ StoreP(r3, MemOperand(frame_pointer(), kBacktrackCount), r0); __ mov(r0, Operand(backtrack_limit())); @@ -213,7 +213,7 @@ void RegExpMacroAssemblerPPC::CheckCharacterGT(uc16 limit, Label* on_greater) { } void RegExpMacroAssemblerPPC::CheckAtStart(int cp_offset, Label* on_at_start) { - __ LoadP(r4, MemOperand(frame_pointer(), kStringStartMinusOne)); + __ LoadU64(r4, MemOperand(frame_pointer(), kStringStartMinusOne)); __ addi(r3, current_input_offset(), Operand(-char_size() + cp_offset * char_size())); __ cmp(r3, r4); @@ -222,7 +222,7 @@ void RegExpMacroAssemblerPPC::CheckAtStart(int cp_offset, Label* on_at_start) { void RegExpMacroAssemblerPPC::CheckNotAtStart(int cp_offset, Label* on_not_at_start) { - __ LoadP(r4, MemOperand(frame_pointer(), kStringStartMinusOne)); + __ LoadU64(r4, MemOperand(frame_pointer(), kStringStartMinusOne)); __ addi(r3, current_input_offset(), Operand(-char_size() + cp_offset * char_size())); __ cmp(r3, r4); @@ -238,7 +238,7 @@ void RegExpMacroAssemblerPPC::CheckCharacterLT(uc16 limit, Label* on_less) { void RegExpMacroAssemblerPPC::CheckGreedyLoop(Label* on_equal) { Label backtrack_non_equal; - __ LoadP(r3, MemOperand(backtrack_stackpointer(), 0)); + __ LoadU64(r3, MemOperand(backtrack_stackpointer(), 0)); __ cmp(current_input_offset(), r3); __ bne(&backtrack_non_equal); __ addi(backtrack_stackpointer(), backtrack_stackpointer(), @@ -251,8 +251,9 @@ void RegExpMacroAssemblerPPC::CheckGreedyLoop(Label* on_equal) { void RegExpMacroAssemblerPPC::CheckNotBackReferenceIgnoreCase( int start_reg, bool read_backward, bool unicode, Label* on_no_match) { Label fallthrough; - __ LoadP(r3, register_location(start_reg), r0); // Index of start of capture - __ LoadP(r4, register_location(start_reg + 1), r0); // Index of end + __ LoadU64(r3, register_location(start_reg), + r0); // Index of start of capture + __ LoadU64(r4, register_location(start_reg + 1), r0); // Index of end __ sub(r4, r4, r3, LeaveOE, SetRC); // Length of capture. // At this point, the capture registers are either both set or both cleared. @@ -262,7 +263,7 @@ void RegExpMacroAssemblerPPC::CheckNotBackReferenceIgnoreCase( // Check that there are enough characters left in the input. if (read_backward) { - __ LoadP(r6, MemOperand(frame_pointer(), kStringStartMinusOne)); + __ LoadU64(r6, MemOperand(frame_pointer(), kStringStartMinusOne)); __ add(r6, r6, r4); __ cmp(current_input_offset(), r6); BranchOrBacktrack(le, on_no_match); @@ -325,9 +326,10 @@ void RegExpMacroAssemblerPPC::CheckNotBackReferenceIgnoreCase( // Compute new value of character position after the matched part. __ sub(current_input_offset(), r5, end_of_input_address()); if (read_backward) { - __ LoadP(r3, register_location(start_reg)); // Index of start of capture - __ LoadP(r4, - register_location(start_reg + 1)); // Index of end of capture + __ LoadU64(r3, + register_location(start_reg)); // Index of start of capture + __ LoadU64(r4, + register_location(start_reg + 1)); // Index of end of capture __ add(current_input_offset(), current_input_offset(), r3); __ sub(current_input_offset(), current_input_offset(), r4); } @@ -391,8 +393,8 @@ void RegExpMacroAssemblerPPC::CheckNotBackReference(int start_reg, Label fallthrough; // Find length of back-referenced capture. - __ LoadP(r3, register_location(start_reg), r0); - __ LoadP(r4, register_location(start_reg + 1), r0); + __ LoadU64(r3, register_location(start_reg), r0); + __ LoadU64(r4, register_location(start_reg + 1), r0); __ sub(r4, r4, r3, LeaveOE, SetRC); // Length to check. // At this point, the capture registers are either both set or both cleared. @@ -402,7 +404,7 @@ void RegExpMacroAssemblerPPC::CheckNotBackReference(int start_reg, // Check that there are enough characters left in the input. if (read_backward) { - __ LoadP(r6, MemOperand(frame_pointer(), kStringStartMinusOne)); + __ LoadU64(r6, MemOperand(frame_pointer(), kStringStartMinusOne)); __ add(r6, r6, r4); __ cmp(current_input_offset(), r6); BranchOrBacktrack(le, on_no_match); @@ -442,8 +444,9 @@ void RegExpMacroAssemblerPPC::CheckNotBackReference(int start_reg, // Move current character position to position after match. __ sub(current_input_offset(), r5, end_of_input_address()); if (read_backward) { - __ LoadP(r3, register_location(start_reg)); // Index of start of capture - __ LoadP(r4, register_location(start_reg + 1)); // Index of end of capture + __ LoadU64(r3, register_location(start_reg)); // Index of start of capture + __ LoadU64(r4, + register_location(start_reg + 1)); // Index of end of capture __ add(current_input_offset(), current_input_offset(), r3); __ sub(current_input_offset(), current_input_offset(), r4); } @@ -715,7 +718,7 @@ Handle<HeapObject> RegExpMacroAssemblerPPC::GetCode(Handle<String> source) { ExternalReference stack_limit = ExternalReference::address_of_jslimit(isolate()); __ mov(r3, Operand(stack_limit)); - __ LoadP(r3, MemOperand(r3)); + __ LoadU64(r3, MemOperand(r3)); __ sub(r3, sp, r3, LeaveOE, SetRC); // Handle it if the stack pointer is already below the stack limit. __ ble(&stack_limit_hit, cr0); @@ -739,14 +742,14 @@ Handle<HeapObject> RegExpMacroAssemblerPPC::GetCode(Handle<String> source) { // Allocate space on stack for registers. __ Add(sp, sp, -num_registers_ * kSystemPointerSize, r0); // Load string end. - __ LoadP(end_of_input_address(), MemOperand(frame_pointer(), kInputEnd)); + __ LoadU64(end_of_input_address(), MemOperand(frame_pointer(), kInputEnd)); // Load input start. - __ LoadP(r3, MemOperand(frame_pointer(), kInputStart)); + __ LoadU64(r3, MemOperand(frame_pointer(), kInputStart)); // Find negative length (offset of start relative to end). __ sub(current_input_offset(), r3, end_of_input_address()); // Set r3 to address of char before start of the input string // (effectively string position -1). - __ LoadP(r4, MemOperand(frame_pointer(), kStartIndex)); + __ LoadU64(r4, MemOperand(frame_pointer(), kStartIndex)); __ subi(r3, current_input_offset(), Operand(char_size())); if (mode_ == UC16) { __ ShiftLeftImm(r0, r4, Operand(1)); @@ -795,8 +798,8 @@ Handle<HeapObject> RegExpMacroAssemblerPPC::GetCode(Handle<String> source) { } // Initialize backtrack stack pointer. - __ LoadP(backtrack_stackpointer(), - MemOperand(frame_pointer(), kStackHighEnd)); + __ LoadU64(backtrack_stackpointer(), + MemOperand(frame_pointer(), kStackHighEnd)); __ b(&start_label_); @@ -806,9 +809,9 @@ Handle<HeapObject> RegExpMacroAssemblerPPC::GetCode(Handle<String> source) { __ bind(&success_label_); if (num_saved_registers_ > 0) { // copy captures to output - __ LoadP(r4, MemOperand(frame_pointer(), kInputStart)); - __ LoadP(r3, MemOperand(frame_pointer(), kRegisterOutput)); - __ LoadP(r5, MemOperand(frame_pointer(), kStartIndex)); + __ LoadU64(r4, MemOperand(frame_pointer(), kInputStart)); + __ LoadU64(r3, MemOperand(frame_pointer(), kRegisterOutput)); + __ LoadU64(r5, MemOperand(frame_pointer(), kStartIndex)); __ sub(r4, end_of_input_address(), r4); // r4 is length of input in bytes. if (mode_ == UC16) { @@ -823,8 +826,8 @@ Handle<HeapObject> RegExpMacroAssemblerPPC::GetCode(Handle<String> source) { // unroll the loop once to add an operation between a load of a register // and the following use of that register. for (int i = 0; i < num_saved_registers_; i += 2) { - __ LoadP(r5, register_location(i), r0); - __ LoadP(r6, register_location(i + 1), r0); + __ LoadU64(r5, register_location(i), r0); + __ LoadU64(r6, register_location(i + 1), r0); if (i == 0 && global_with_zero_length_check()) { // Keep capture start in r25 for the zero-length check later. __ mr(r25, r5); @@ -847,9 +850,9 @@ Handle<HeapObject> RegExpMacroAssemblerPPC::GetCode(Handle<String> source) { if (global()) { // Restart matching if the regular expression is flagged as global. - __ LoadP(r3, MemOperand(frame_pointer(), kSuccessfulCaptures)); - __ LoadP(r4, MemOperand(frame_pointer(), kNumOutputRegisters)); - __ LoadP(r5, MemOperand(frame_pointer(), kRegisterOutput)); + __ LoadU64(r3, MemOperand(frame_pointer(), kSuccessfulCaptures)); + __ LoadU64(r4, MemOperand(frame_pointer(), kNumOutputRegisters)); + __ LoadU64(r5, MemOperand(frame_pointer(), kRegisterOutput)); // Increment success counter. __ addi(r3, r3, Operand(1)); __ StoreP(r3, MemOperand(frame_pointer(), kSuccessfulCaptures)); @@ -866,7 +869,7 @@ Handle<HeapObject> RegExpMacroAssemblerPPC::GetCode(Handle<String> source) { __ StoreP(r5, MemOperand(frame_pointer(), kRegisterOutput)); // Prepare r3 to initialize registers with its value in the next run. - __ LoadP(r3, MemOperand(frame_pointer(), kStringStartMinusOne)); + __ LoadU64(r3, MemOperand(frame_pointer(), kStringStartMinusOne)); if (global_with_zero_length_check()) { // Special case for zero-length matches. @@ -894,7 +897,7 @@ Handle<HeapObject> RegExpMacroAssemblerPPC::GetCode(Handle<String> source) { // Exit and return r3 __ bind(&exit_label_); if (global()) { - __ LoadP(r3, MemOperand(frame_pointer(), kSuccessfulCaptures)); + __ LoadU64(r3, MemOperand(frame_pointer(), kSuccessfulCaptures)); } __ bind(&return_r3); @@ -925,7 +928,8 @@ Handle<HeapObject> RegExpMacroAssemblerPPC::GetCode(Handle<String> source) { __ bne(&return_r3); // String might have moved: Reload end of string from frame. - __ LoadP(end_of_input_address(), MemOperand(frame_pointer(), kInputEnd)); + __ LoadU64(end_of_input_address(), + MemOperand(frame_pointer(), kInputEnd)); SafeReturn(); } @@ -984,7 +988,7 @@ void RegExpMacroAssemblerPPC::GoTo(Label* to) { BranchOrBacktrack(al, to); } void RegExpMacroAssemblerPPC::IfRegisterGE(int reg, int comparand, Label* if_ge) { - __ LoadP(r3, register_location(reg), r0); + __ LoadU64(r3, register_location(reg), r0); __ Cmpi(r3, Operand(comparand), r0); BranchOrBacktrack(ge, if_ge); } @@ -992,14 +996,14 @@ void RegExpMacroAssemblerPPC::IfRegisterGE(int reg, int comparand, void RegExpMacroAssemblerPPC::IfRegisterLT(int reg, int comparand, Label* if_lt) { - __ LoadP(r3, register_location(reg), r0); + __ LoadU64(r3, register_location(reg), r0); __ Cmpi(r3, Operand(comparand), r0); BranchOrBacktrack(lt, if_lt); } void RegExpMacroAssemblerPPC::IfRegisterEqPos(int reg, Label* if_eq) { - __ LoadP(r3, register_location(reg), r0); + __ LoadU64(r3, register_location(reg), r0); __ cmp(r3, current_input_offset()); BranchOrBacktrack(eq, if_eq); } @@ -1036,20 +1040,20 @@ void RegExpMacroAssemblerPPC::PushCurrentPosition() { void RegExpMacroAssemblerPPC::PushRegister(int register_index, StackCheckFlag check_stack_limit) { - __ LoadP(r3, register_location(register_index), r0); + __ LoadU64(r3, register_location(register_index), r0); Push(r3); if (check_stack_limit) CheckStackLimit(); } void RegExpMacroAssemblerPPC::ReadCurrentPositionFromRegister(int reg) { - __ LoadP(current_input_offset(), register_location(reg), r0); + __ LoadU64(current_input_offset(), register_location(reg), r0); } void RegExpMacroAssemblerPPC::ReadStackPointerFromRegister(int reg) { - __ LoadP(backtrack_stackpointer(), register_location(reg), r0); - __ LoadP(r3, MemOperand(frame_pointer(), kStackHighEnd)); + __ LoadU64(backtrack_stackpointer(), register_location(reg), r0); + __ LoadU64(r3, MemOperand(frame_pointer(), kStackHighEnd)); __ add(backtrack_stackpointer(), backtrack_stackpointer(), r3); } @@ -1094,7 +1098,7 @@ void RegExpMacroAssemblerPPC::WriteCurrentPositionToRegister(int reg, void RegExpMacroAssemblerPPC::ClearRegisters(int reg_from, int reg_to) { DCHECK(reg_from <= reg_to); - __ LoadP(r3, MemOperand(frame_pointer(), kStringStartMinusOne)); + __ LoadU64(r3, MemOperand(frame_pointer(), kStringStartMinusOne)); for (int reg = reg_from; reg <= reg_to; reg++) { __ StoreP(r3, register_location(reg), r0); } @@ -1102,7 +1106,7 @@ void RegExpMacroAssemblerPPC::ClearRegisters(int reg_from, int reg_to) { void RegExpMacroAssemblerPPC::WriteStackPointerToRegister(int reg) { - __ LoadP(r4, MemOperand(frame_pointer(), kStackHighEnd)); + __ LoadU64(r4, MemOperand(frame_pointer(), kStackHighEnd)); __ sub(r3, backtrack_stackpointer(), r4); __ StoreP(r3, register_location(reg), r0); } @@ -1160,7 +1164,7 @@ void RegExpMacroAssemblerPPC::CallCheckStackGuardState(Register scratch) { // Restore the stack pointer stack_space = kNumRequiredStackFrameSlots + stack_passed_arguments; if (frame_alignment > kSystemPointerSize) { - __ LoadP(sp, MemOperand(sp, stack_space * kSystemPointerSize)); + __ LoadU64(sp, MemOperand(sp, stack_space * kSystemPointerSize)); } else { __ addi(sp, sp, Operand(stack_space * kSystemPointerSize)); } @@ -1213,7 +1217,7 @@ void RegExpMacroAssemblerPPC::CheckPosition(int cp_offset, __ Cmpi(current_input_offset(), Operand(-cp_offset * char_size()), r0); BranchOrBacktrack(ge, on_outside_input); } else { - __ LoadP(r4, MemOperand(frame_pointer(), kStringStartMinusOne)); + __ LoadU64(r4, MemOperand(frame_pointer(), kStringStartMinusOne)); __ addi(r3, current_input_offset(), Operand(cp_offset * char_size())); __ cmp(r3, r4); BranchOrBacktrack(le, on_outside_input); @@ -1271,7 +1275,7 @@ void RegExpMacroAssemblerPPC::Push(Register source) { void RegExpMacroAssemblerPPC::Pop(Register target) { DCHECK(target != backtrack_stackpointer()); - __ LoadP(target, MemOperand(backtrack_stackpointer())); + __ LoadU64(target, MemOperand(backtrack_stackpointer())); __ addi(backtrack_stackpointer(), backtrack_stackpointer(), Operand(kSystemPointerSize)); } @@ -1282,7 +1286,7 @@ void RegExpMacroAssemblerPPC::CheckPreemption() { ExternalReference stack_limit = ExternalReference::address_of_jslimit(isolate()); __ mov(r3, Operand(stack_limit)); - __ LoadP(r3, MemOperand(r3)); + __ LoadU64(r3, MemOperand(r3)); __ cmpl(sp, r3); SafeCall(&check_preempt_label_, le); } @@ -1292,7 +1296,7 @@ void RegExpMacroAssemblerPPC::CheckStackLimit() { ExternalReference stack_limit = ExternalReference::address_of_regexp_stack_limit_address(isolate()); __ mov(r3, Operand(stack_limit)); - __ LoadP(r3, MemOperand(r3)); + __ LoadU64(r3, MemOperand(r3)); __ cmpl(backtrack_stackpointer(), r3); SafeCall(&stack_overflow_label_, le); } diff --git a/deps/v8/src/regexp/regexp-ast.cc b/deps/v8/src/regexp/regexp-ast.cc index dd9e719c94..aaca95b64c 100644 --- a/deps/v8/src/regexp/regexp-ast.cc +++ b/deps/v8/src/regexp/regexp-ast.cc @@ -293,14 +293,12 @@ void* RegExpUnparser::VisitEmpty(RegExpEmpty* that, void* data) { return nullptr; } - -std::ostream& RegExpTree::Print(std::ostream& os, Zone* zone) { // NOLINT +std::ostream& RegExpTree::Print(std::ostream& os, Zone* zone) { RegExpUnparser unparser(os, zone); Accept(&unparser, nullptr); return os; } - RegExpDisjunction::RegExpDisjunction(ZoneList<RegExpTree*>* alternatives) : alternatives_(alternatives) { DCHECK_LT(1, alternatives->length()); diff --git a/deps/v8/src/regexp/regexp-ast.h b/deps/v8/src/regexp/regexp-ast.h index c038c640f4..89f523bf2e 100644 --- a/deps/v8/src/regexp/regexp-ast.h +++ b/deps/v8/src/regexp/regexp-ast.h @@ -214,8 +214,7 @@ class RegExpTree : public ZoneObject { // expression. virtual Interval CaptureRegisters() { return Interval::Empty(); } virtual void AppendToText(RegExpText* text, Zone* zone); - V8_EXPORT_PRIVATE std::ostream& Print(std::ostream& os, - Zone* zone); // NOLINT + V8_EXPORT_PRIVATE std::ostream& Print(std::ostream& os, Zone* zone); #define MAKE_ASTYPE(Name) \ virtual RegExp##Name* As##Name(); \ virtual bool Is##Name(); diff --git a/deps/v8/src/regexp/regexp-bytecodes.h b/deps/v8/src/regexp/regexp-bytecodes.h index e3248d7b83..088fd93b23 100644 --- a/deps/v8/src/regexp/regexp-bytecodes.h +++ b/deps/v8/src/regexp/regexp-bytecodes.h @@ -231,7 +231,7 @@ static constexpr int kRegExpBytecodeLengths[] = { }; inline constexpr int RegExpBytecodeLength(int bytecode) { - CONSTEXPR_DCHECK(base::IsInRange(bytecode, 0, kRegExpBytecodeCount - 1)); + DCHECK(base::IsInRange(bytecode, 0, kRegExpBytecodeCount - 1)); return kRegExpBytecodeLengths[bytecode]; } @@ -242,7 +242,7 @@ static constexpr const char* const kRegExpBytecodeNames[] = { }; inline constexpr const char* RegExpBytecodeName(int bytecode) { - CONSTEXPR_DCHECK(base::IsInRange(bytecode, 0, kRegExpBytecodeCount - 1)); + DCHECK(base::IsInRange(bytecode, 0, kRegExpBytecodeCount - 1)); return kRegExpBytecodeNames[bytecode]; } diff --git a/deps/v8/src/regexp/regexp-compiler.cc b/deps/v8/src/regexp/regexp-compiler.cc index c743ee2563..36661f45f2 100644 --- a/deps/v8/src/regexp/regexp-compiler.cc +++ b/deps/v8/src/regexp/regexp-compiler.cc @@ -1435,9 +1435,11 @@ EatsAtLeastInfo LoopChoiceNode::EatsAtLeastFromLoopEntry() { DCHECK_EQ(alternatives_->length(), 2); // There's just loop and continue. if (read_backward()) { - // Can't do anything special for a backward loop, so return the basic values - // that we got during analysis. - return *eats_at_least_info(); + // The eats_at_least value is not used if reading backward. The + // EatsAtLeastPropagator should've zeroed it as well. + DCHECK_EQ(eats_at_least_info()->eats_at_least_from_possibly_start, 0); + DCHECK_EQ(eats_at_least_info()->eats_at_least_from_not_start, 0); + return {}; } // Figure out how much the loop body itself eats, not including anything in @@ -3531,14 +3533,23 @@ class EatsAtLeastPropagator : public AllStatic { } static void VisitAction(ActionNode* that) { - // POSITIVE_SUBMATCH_SUCCESS rewinds input, so we must not consider - // successor nodes for eats_at_least. SET_REGISTER_FOR_LOOP indicates a loop - // entry point, which means the loop body will run at least the minimum - // number of times before the continuation case can run. Otherwise the - // current node eats at least as much as its successor. + // - BEGIN_SUBMATCH and POSITIVE_SUBMATCH_SUCCESS wrap lookarounds. + // Lookarounds rewind input, so their eats_at_least value must not + // propagate to surroundings. + // TODO(jgruber): Instead of resetting EAL to 0 at lookaround boundaries, + // analysis should instead skip over the lookaround and look at whatever + // follows the lookaround. A simple solution would be to store a pointer to + // the associated POSITIVE_SUBMATCH_SUCCESS node in the BEGIN_SUBMATCH + // node, and use that during analysis. + // - SET_REGISTER_FOR_LOOP indicates a loop entry point, which means the + // loop body will run at least the minimum number of times before the + // continuation case can run. Otherwise the current node eats at least as + // much as its successor. switch (that->action_type()) { + case ActionNode::BEGIN_SUBMATCH: case ActionNode::POSITIVE_SUBMATCH_SUCCESS: - break; // Was already initialized to zero. + DCHECK(that->eats_at_least_info()->IsZero()); + break; case ActionNode::SET_REGISTER_FOR_LOOP: that->set_eats_at_least_info( that->on_success()->EatsAtLeastFromLoopEntry()); @@ -3560,7 +3571,10 @@ class EatsAtLeastPropagator : public AllStatic { } static void VisitLoopChoiceContinueNode(LoopChoiceNode* that) { - that->set_eats_at_least_info(*that->continue_node()->eats_at_least_info()); + if (!that->read_backward()) { + that->set_eats_at_least_info( + *that->continue_node()->eats_at_least_info()); + } } static void VisitLoopChoiceLoopNode(LoopChoiceNode* that) {} diff --git a/deps/v8/src/regexp/regexp-dotprinter.cc b/deps/v8/src/regexp/regexp-dotprinter.cc index 4412960b3d..b708e8d735 100644 --- a/deps/v8/src/regexp/regexp-dotprinter.cc +++ b/deps/v8/src/regexp/regexp-dotprinter.cc @@ -60,8 +60,7 @@ void DotPrinterImpl::PrintOnFailure(RegExpNode* from, RegExpNode* on_failure) { class AttributePrinter { public: - explicit AttributePrinter(std::ostream& os) // NOLINT - : os_(os), first_(true) {} + explicit AttributePrinter(std::ostream& os) : os_(os), first_(true) {} void PrintSeparator() { if (first_) { first_ = false; diff --git a/deps/v8/src/regexp/regexp-macro-assembler.cc b/deps/v8/src/regexp/regexp-macro-assembler.cc index db45e21ca0..36ef75bc42 100644 --- a/deps/v8/src/regexp/regexp-macro-assembler.cc +++ b/deps/v8/src/regexp/regexp-macro-assembler.cc @@ -309,10 +309,9 @@ int NativeRegExpMacroAssembler::Execute( RegExp::CallOrigin call_origin = RegExp::CallOrigin::kFromRuntime; using RegexpMatcherSig = int( - Address input_string, int start_offset, // NOLINT(readability/casting) - const byte* input_start, const byte* input_end, int* output, - int output_size, Address stack_base, int call_origin, Isolate* isolate, - Address regexp); + Address input_string, int start_offset, const byte* input_start, + const byte* input_end, int* output, int output_size, Address stack_base, + int call_origin, Isolate* isolate, Address regexp); auto fn = GeneratedCode<RegexpMatcherSig>::FromCode(code); int result = diff --git a/deps/v8/src/regexp/regexp-nodes.h b/deps/v8/src/regexp/regexp-nodes.h index 9b863ef239..5a7df3df6b 100644 --- a/deps/v8/src/regexp/regexp-nodes.h +++ b/deps/v8/src/regexp/regexp-nodes.h @@ -109,6 +109,11 @@ struct EatsAtLeastInfo final { } } + bool IsZero() const { + return eats_at_least_from_possibly_start == 0 && + eats_at_least_from_not_start == 0; + } + // Any successful match starting from the current node will consume at least // this many characters. This does not necessarily mean that there is a // possible match with exactly this many characters, but we generally try to diff --git a/deps/v8/src/regexp/x64/regexp-macro-assembler-x64.cc b/deps/v8/src/regexp/x64/regexp-macro-assembler-x64.cc index 79574ca993..a02cccb96a 100644 --- a/deps/v8/src/regexp/x64/regexp-macro-assembler-x64.cc +++ b/deps/v8/src/regexp/x64/regexp-macro-assembler-x64.cc @@ -356,8 +356,7 @@ void RegExpMacroAssemblerX64::CheckNotBackReferenceIgnoreCase( // Isolate. __ LoadAddress(arg_reg_4, ExternalReference::isolate_address(isolate())); - { // NOLINT: Can't find a way to open this scope without confusing the - // linter. + { AllowExternalCallThatCantCauseGC scope(&masm_); ExternalReference compare = unicode ? ExternalReference::re_case_insensitive_compare_unicode( @@ -672,7 +671,7 @@ bool RegExpMacroAssemblerX64::CheckSpecialCharacterClass(uc16 type, void RegExpMacroAssemblerX64::Fail() { STATIC_ASSERT(FAILURE == 0); // Return value for failure is zero. if (!global()) { - __ Set(rax, FAILURE); + __ Move(rax, FAILURE); } __ jmp(&exit_label_); } @@ -750,7 +749,7 @@ Handle<HeapObject> RegExpMacroAssemblerX64::GetCode(Handle<String> source) { __ j(above_equal, &stack_ok); // Exit with OutOfMemory exception. There is not enough space on the stack // for our working registers. - __ Set(rax, EXCEPTION); + __ Move(rax, EXCEPTION); __ jmp(&return_rax); __ bind(&stack_limit_hit); @@ -790,7 +789,7 @@ Handle<HeapObject> RegExpMacroAssemblerX64::GetCode(Handle<String> source) { // Load newline if index is at start, previous character otherwise. __ cmpl(Operand(rbp, kStartIndex), Immediate(0)); __ j(not_equal, &load_char_start_regexp, Label::kNear); - __ Set(current_character(), '\n'); + __ Move(current_character(), '\n'); __ jmp(&start_regexp, Label::kNear); // Global regexp restarts matching here. @@ -805,7 +804,7 @@ Handle<HeapObject> RegExpMacroAssemblerX64::GetCode(Handle<String> source) { // Fill in stack push order, to avoid accessing across an unwritten // page (a problem on Windows). if (num_saved_registers_ > 8) { - __ Set(rcx, kRegisterZero); + __ Move(rcx, kRegisterZero); Label init_loop; __ bind(&init_loop); __ movq(Operand(rbp, rcx, times_1, 0), rax); @@ -1002,13 +1001,13 @@ Handle<HeapObject> RegExpMacroAssemblerX64::GetCode(Handle<String> source) { // If any of the code above needed to exit with an exception. __ bind(&exit_with_exception); // Exit with Result EXCEPTION(-1) to signal thrown exception. - __ Set(rax, EXCEPTION); + __ Move(rax, EXCEPTION); __ jmp(&return_rax); } if (fallback_label_.is_linked()) { __ bind(&fallback_label_); - __ Set(rax, FALLBACK_TO_EXPERIMENTAL); + __ Move(rax, FALLBACK_TO_EXPERIMENTAL); __ jmp(&return_rax); } diff --git a/deps/v8/src/roots/roots.cc b/deps/v8/src/roots/roots.cc index 3fdecfe0bf..e79fdb3109 100644 --- a/deps/v8/src/roots/roots.cc +++ b/deps/v8/src/roots/roots.cc @@ -17,6 +17,10 @@ const char* RootsTable::root_names_[RootsTable::kEntriesCount] = { #undef ROOT_NAME }; +MapWord ReadOnlyRoots::one_pointer_filler_map_word() { + return MapWord::FromMap(one_pointer_filler_map()); +} + void ReadOnlyRoots::Iterate(RootVisitor* visitor) { visitor->VisitRootPointers(Root::kReadOnlyRootList, nullptr, FullObjectSlot(read_only_roots_), diff --git a/deps/v8/src/roots/roots.h b/deps/v8/src/roots/roots.h index 64758f5efa..cfa0f89757 100644 --- a/deps/v8/src/roots/roots.h +++ b/deps/v8/src/roots/roots.h @@ -88,6 +88,7 @@ class Symbol; V(Map, fixed_double_array_map, FixedDoubleArrayMap) \ V(Map, global_dictionary_map, GlobalDictionaryMap) \ V(Map, many_closures_cell_map, ManyClosuresCellMap) \ + V(Map, mega_dom_handler_map, MegaDomHandlerMap) \ V(Map, module_info_map, ModuleInfoMap) \ V(Map, name_dictionary_map, NameDictionaryMap) \ V(Map, no_closures_cell_map, NoClosuresCellMap) \ @@ -110,6 +111,9 @@ class Symbol; V(Map, source_text_module_map, SourceTextModuleMap) \ V(Map, swiss_name_dictionary_map, SwissNameDictionaryMap) \ V(Map, synthetic_module_map, SyntheticModuleMap) \ + IF_WASM(V, Map, wasm_exported_function_data_map, \ + WasmExportedFunctionDataMap) \ + IF_WASM(V, Map, wasm_js_function_data_map, WasmJSFunctionDataMap) \ IF_WASM(V, Map, wasm_type_info_map, WasmTypeInfoMap) \ V(Map, weak_fixed_array_map, WeakFixedArrayMap) \ V(Map, weak_array_list_map, WeakArrayListMap) \ @@ -210,6 +214,7 @@ class Symbol; /* Protectors */ \ V(PropertyCell, array_constructor_protector, ArrayConstructorProtector) \ V(PropertyCell, no_elements_protector, NoElementsProtector) \ + V(PropertyCell, mega_dom_protector, MegaDOMProtector) \ V(PropertyCell, is_concat_spreadable_protector, IsConcatSpreadableProtector) \ V(PropertyCell, array_species_protector, ArraySpeciesProtector) \ V(PropertyCell, typed_array_species_protector, TypedArraySpeciesProtector) \ @@ -536,6 +541,10 @@ class ReadOnlyRoots { V8_INLINE explicit ReadOnlyRoots(Isolate* isolate); V8_INLINE explicit ReadOnlyRoots(LocalIsolate* isolate); + // For `v8_enable_map_packing=true`, this will return a packed (also untagged) + // map-word instead of a tagged heap pointer. + MapWord one_pointer_filler_map_word(); + #define ROOT_ACCESSOR(Type, name, CamelName) \ V8_INLINE class Type name() const; \ V8_INLINE class Type unchecked_##name() const; \ diff --git a/deps/v8/src/runtime/runtime-array.cc b/deps/v8/src/runtime/runtime-array.cc index 623064fd8a..bdfb666ab7 100644 --- a/deps/v8/src/runtime/runtime-array.cc +++ b/deps/v8/src/runtime/runtime-array.cc @@ -28,7 +28,14 @@ RUNTIME_FUNCTION(Runtime_TransitionElementsKind) { CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0); CONVERT_ARG_HANDLE_CHECKED(Map, to_map, 1); ElementsKind to_kind = to_map->elements_kind(); - ElementsAccessor::ForKind(to_kind)->TransitionElementsKind(object, to_map); + if (ElementsAccessor::ForKind(to_kind) + ->TransitionElementsKind(object, to_map) + .IsNothing()) { + // TODO(victorgomes): EffectControlLinearizer::LowerTransitionElementsKind + // does not handle exceptions. + FATAL("Fatal JavaScript invalid array size"); + UNREACHABLE(); + } return *object; } @@ -180,7 +187,11 @@ RUNTIME_FUNCTION(Runtime_GrowArrayElements) { uint32_t capacity = static_cast<uint32_t>(object->elements().length()); if (index >= capacity) { - if (!object->GetElementsAccessor()->GrowCapacity(object, index)) { + bool has_grown; + MAYBE_ASSIGN_RETURN_FAILURE_ON_EXCEPTION( + isolate, has_grown, + object->GetElementsAccessor()->GrowCapacity(object, index)); + if (!has_grown) { return Smi::zero(); } } diff --git a/deps/v8/src/runtime/runtime-classes.cc b/deps/v8/src/runtime/runtime-classes.cc index 120f2441a7..8fb37cec32 100644 --- a/deps/v8/src/runtime/runtime-classes.cc +++ b/deps/v8/src/runtime/runtime-classes.cc @@ -188,7 +188,6 @@ Object GetMethodWithSharedName( template <typename Dictionary> Handle<Dictionary> ShallowCopyDictionaryTemplate( Isolate* isolate, Handle<Dictionary> dictionary_template) { - Handle<Map> dictionary_map(dictionary_template->map(), isolate); Handle<Dictionary> dictionary = Dictionary::ShallowCopy(isolate, dictionary_template); // Clone all AccessorPairs in the dictionary. @@ -375,7 +374,7 @@ bool AddDescriptorsByTemplate( } // Atomically commit the changes. - receiver->synchronized_set_map(*map); + receiver->set_map(*map, kReleaseStore); if (elements_dictionary->NumberOfElements() > 0) { receiver->set_elements(*elements_dictionary); } @@ -469,7 +468,7 @@ bool AddDescriptorsByTemplate( } // Atomically commit the changes. - receiver->synchronized_set_map(*map); + receiver->set_map(*map, kReleaseStore); receiver->set_raw_properties_or_hash(*properties_dictionary); if (elements_dictionary->NumberOfElements() > 0) { receiver->set_elements(*elements_dictionary); @@ -498,7 +497,7 @@ bool InitClassPrototype(Isolate* isolate, map = Map::CopyDropDescriptors(isolate, map); map->set_is_prototype_map(true); Map::SetPrototype(isolate, map, prototype_parent); - constructor->set_prototype_or_initial_map(*prototype); + constructor->set_prototype_or_initial_map(*prototype, kReleaseStore); map->SetConstructor(*constructor); Handle<FixedArray> computed_properties( class_boilerplate->instance_computed_properties(), isolate); diff --git a/deps/v8/src/runtime/runtime-compiler.cc b/deps/v8/src/runtime/runtime-compiler.cc index 090a9261c4..1586e35e25 100644 --- a/deps/v8/src/runtime/runtime-compiler.cc +++ b/deps/v8/src/runtime/runtime-compiler.cc @@ -29,14 +29,6 @@ namespace internal { namespace { -// Returns false iff an exception was thrown. -bool MaybeSpawnNativeContextIndependentCompilationJob( - Isolate* isolate, Handle<JSFunction> function, ConcurrencyMode mode) { - if (!FLAG_turbo_nci) return true; // Nothing to do. - return Compiler::CompileOptimized(isolate, function, mode, - CodeKind::NATIVE_CONTEXT_INDEPENDENT); -} - Object CompileOptimized(Isolate* isolate, Handle<JSFunction> function, ConcurrencyMode mode) { StackLimitCheck check(isolate); @@ -50,34 +42,12 @@ Object CompileOptimized(Isolate* isolate, Handle<JSFunction> function, return ReadOnlyRoots(isolate).exception(); } - // Possibly compile for NCI caching. - if (!MaybeSpawnNativeContextIndependentCompilationJob(isolate, function, - mode)) { - return ReadOnlyRoots(isolate).exception(); - } - // As a post-condition of CompileOptimized, the function *must* be compiled, // i.e. the installed Code object must not be the CompileLazy builtin. DCHECK(function->is_compiled()); return function->code(); } -void TryInstallNCICode(Isolate* isolate, Handle<JSFunction> function, - Handle<SharedFunctionInfo> sfi, - IsCompiledScope* is_compiled_scope) { - // This function should only be called if there's a possibility that cached - // code exists. - DCHECK(sfi->may_have_cached_code()); - DCHECK_EQ(function->shared(), *sfi); - - Handle<Code> code; - if (sfi->TryGetCachedCode(isolate).ToHandle(&code)) { - function->set_code(*code, kReleaseStore); - JSFunction::EnsureFeedbackVector(function, is_compiled_scope); - if (FLAG_trace_turbo_nci) CompilationCacheCode::TraceHit(sfi, code); - } -} - } // namespace RUNTIME_FUNCTION(Runtime_CompileLazy) { @@ -104,9 +74,6 @@ RUNTIME_FUNCTION(Runtime_CompileLazy) { &is_compiled_scope)) { return ReadOnlyRoots(isolate).exception(); } - if (sfi->may_have_cached_code()) { - TryInstallNCICode(isolate, function, sfi, &is_compiled_scope); - } DCHECK(function->is_compiled()); return function->code(); } @@ -127,18 +94,6 @@ RUNTIME_FUNCTION(Runtime_InstallBaselineCode) { return baseline_code; } -RUNTIME_FUNCTION(Runtime_TryInstallNCICode) { - HandleScope scope(isolate); - DCHECK_EQ(1, args.length()); - CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0); - DCHECK(function->is_compiled()); - Handle<SharedFunctionInfo> sfi(function->shared(), isolate); - IsCompiledScope is_compiled_scope(*sfi, isolate); - TryInstallNCICode(isolate, function, sfi, &is_compiled_scope); - DCHECK(function->is_compiled()); - return function->code(); -} - RUNTIME_FUNCTION(Runtime_CompileOptimized_Concurrent) { HandleScope scope(isolate); DCHECK_EQ(1, args.length()); @@ -276,6 +231,14 @@ RUNTIME_FUNCTION(Runtime_ObserveNode) { return *obj; } +RUNTIME_FUNCTION(Runtime_VerifyType) { + // %VerifyType has no effect in the interpreter. + HandleScope scope(isolate); + DCHECK_EQ(1, args.length()); + CONVERT_ARG_HANDLE_CHECKED(Object, obj, 0); + return *obj; +} + static bool IsSuitableForOnStackReplacement(Isolate* isolate, Handle<JSFunction> function) { // Keep track of whether we've succeeded in optimizing. @@ -356,16 +319,7 @@ RUNTIME_FUNCTION(Runtime_CompileForOnStackReplacement) { PrintF(scope.file(), " at OSR bytecode offset %d]\n", osr_offset.ToInt()); } maybe_result = - Compiler::GetOptimizedCodeForOSR(function, osr_offset, frame); - - // Possibly compile for NCI caching. - if (!MaybeSpawnNativeContextIndependentCompilationJob( - isolate, function, - isolate->concurrent_recompilation_enabled() - ? ConcurrencyMode::kConcurrent - : ConcurrencyMode::kNotConcurrent)) { - return Object(); - } + Compiler::GetOptimizedCodeForOSR(isolate, function, osr_offset, frame); } // Check whether we ended up with usable optimized code. diff --git a/deps/v8/src/runtime/runtime-debug.cc b/deps/v8/src/runtime/runtime-debug.cc index 4ffcaf2397..4b43cad389 100644 --- a/deps/v8/src/runtime/runtime-debug.cc +++ b/deps/v8/src/runtime/runtime-debug.cc @@ -61,13 +61,6 @@ RUNTIME_FUNCTION_RETURN_PAIR(Runtime_DebugBreakOnBytecode) { handle(it.frame()->function(), isolate)); } - // If we are dropping frames, there is no need to get a return value or - // bytecode, since we will be restarting execution at a different frame. - if (isolate->debug()->will_restart()) { - return MakePair(ReadOnlyRoots(isolate).undefined_value(), - Smi::FromInt(static_cast<uint8_t>(Bytecode::kIllegal))); - } - // Return the handler from the original bytecode array. DCHECK(it.frame()->is_interpreted()); InterpretedFrame* interpreted_frame = @@ -157,11 +150,11 @@ RUNTIME_FUNCTION(Runtime_ScheduleBreak) { return ReadOnlyRoots(isolate).undefined_value(); } +namespace { + template <class IteratorType> -static MaybeHandle<JSArray> GetIteratorInternalProperties( - Isolate* isolate, Handle<IteratorType> object) { - Factory* factory = isolate->factory(); - Handle<IteratorType> iterator = Handle<IteratorType>::cast(object); +static Handle<ArrayList> AddIteratorInternalProperties( + Isolate* isolate, Handle<ArrayList> result, Handle<IteratorType> iterator) { const char* kind = nullptr; switch (iterator->map().instance_type()) { case JS_MAP_KEY_ITERATOR_TYPE: @@ -179,62 +172,60 @@ static MaybeHandle<JSArray> GetIteratorInternalProperties( UNREACHABLE(); } - Handle<FixedArray> result = factory->NewFixedArray(2 * 3); - Handle<String> has_more = - factory->NewStringFromAsciiChecked("[[IteratorHasMore]]"); - result->set(0, *has_more); - result->set(1, isolate->heap()->ToBoolean(iterator->HasMore())); - - Handle<String> index = - factory->NewStringFromAsciiChecked("[[IteratorIndex]]"); - result->set(2, *index); - result->set(3, iterator->index()); - - Handle<String> iterator_kind = - factory->NewStringFromAsciiChecked("[[IteratorKind]]"); - result->set(4, *iterator_kind); - Handle<String> kind_str = factory->NewStringFromAsciiChecked(kind); - result->set(5, *kind_str); - return factory->NewJSArrayWithElements(result); + result = ArrayList::Add( + isolate, result, + isolate->factory()->NewStringFromAsciiChecked("[[IteratorHasMore]]"), + isolate->factory()->ToBoolean(iterator->HasMore())); + result = ArrayList::Add( + isolate, result, + isolate->factory()->NewStringFromAsciiChecked("[[IteratorIndex]]"), + handle(iterator->index(), isolate)); + result = ArrayList::Add( + isolate, result, + isolate->factory()->NewStringFromAsciiChecked("[[IteratorKind]]"), + isolate->factory()->NewStringFromAsciiChecked(kind)); + return result; } +} // namespace MaybeHandle<JSArray> Runtime::GetInternalProperties(Isolate* isolate, Handle<Object> object) { - Factory* factory = isolate->factory(); + auto result = ArrayList::New(isolate, 8 * 2); + if (object->IsJSObject()) { + PrototypeIterator iter(isolate, Handle<JSObject>::cast(object)); + Handle<Object> prototype = PrototypeIterator::GetCurrent(iter); + if (!prototype->IsNull(isolate)) { + result = ArrayList::Add( + isolate, result, + isolate->factory()->NewStringFromStaticChars("[[Prototype]]"), + prototype); + } + } if (object->IsJSBoundFunction()) { Handle<JSBoundFunction> function = Handle<JSBoundFunction>::cast(object); - Handle<FixedArray> result = factory->NewFixedArray(2 * 3); - Handle<String> target = - factory->NewStringFromAsciiChecked("[[TargetFunction]]"); - result->set(0, *target); - result->set(1, function->bound_target_function()); - - Handle<String> bound_this = - factory->NewStringFromAsciiChecked("[[BoundThis]]"); - result->set(2, *bound_this); - result->set(3, function->bound_this()); - - Handle<String> bound_args = - factory->NewStringFromAsciiChecked("[[BoundArgs]]"); - result->set(4, *bound_args); - Handle<FixedArray> bound_arguments = - factory->CopyFixedArray(handle(function->bound_arguments(), isolate)); - Handle<JSArray> arguments_array = - factory->NewJSArrayWithElements(bound_arguments); - result->set(5, *arguments_array); - return factory->NewJSArrayWithElements(result); - } - if (object->IsJSMapIterator()) { + result = ArrayList::Add( + isolate, result, + isolate->factory()->NewStringFromAsciiChecked("[[TargetFunction]]"), + handle(function->bound_target_function(), isolate)); + result = ArrayList::Add( + isolate, result, + isolate->factory()->NewStringFromAsciiChecked("[[BoundThis]]"), + handle(function->bound_this(), isolate)); + result = ArrayList::Add( + isolate, result, + isolate->factory()->NewStringFromAsciiChecked("[[BoundArgs]]"), + isolate->factory()->NewJSArrayWithElements( + isolate->factory()->CopyFixedArray( + handle(function->bound_arguments(), isolate)))); + } else if (object->IsJSMapIterator()) { Handle<JSMapIterator> iterator = Handle<JSMapIterator>::cast(object); - return GetIteratorInternalProperties(isolate, iterator); - } - if (object->IsJSSetIterator()) { + result = AddIteratorInternalProperties(isolate, result, iterator); + } else if (object->IsJSSetIterator()) { Handle<JSSetIterator> iterator = Handle<JSSetIterator>::cast(object); - return GetIteratorInternalProperties(isolate, iterator); - } - if (object->IsJSGeneratorObject()) { + result = AddIteratorInternalProperties(isolate, result, iterator); + } else if (object->IsJSGeneratorObject()) { Handle<JSGeneratorObject> generator = Handle<JSGeneratorObject>::cast(object); @@ -247,163 +238,131 @@ MaybeHandle<JSArray> Runtime::GetInternalProperties(Isolate* isolate, DCHECK(generator->is_suspended()); } - Handle<FixedArray> result = factory->NewFixedArray(2 * 3); - Handle<String> generator_status = - factory->NewStringFromAsciiChecked("[[GeneratorState]]"); - result->set(0, *generator_status); - Handle<String> status_str = factory->NewStringFromAsciiChecked(status); - result->set(1, *status_str); - - Handle<String> function = - factory->NewStringFromAsciiChecked("[[GeneratorFunction]]"); - result->set(2, *function); - result->set(3, generator->function()); - - Handle<String> receiver = - factory->NewStringFromAsciiChecked("[[GeneratorReceiver]]"); - result->set(4, *receiver); - result->set(5, generator->receiver()); - return factory->NewJSArrayWithElements(result); - } - if (object->IsJSPromise()) { + result = ArrayList::Add( + isolate, result, + isolate->factory()->NewStringFromAsciiChecked("[[GeneratorState]]"), + isolate->factory()->NewStringFromAsciiChecked(status)); + result = ArrayList::Add( + isolate, result, + isolate->factory()->NewStringFromAsciiChecked("[[GeneratorFunction]]"), + handle(generator->function(), isolate)); + result = ArrayList::Add( + isolate, result, + isolate->factory()->NewStringFromAsciiChecked("[[GeneratorReceiver]]"), + handle(generator->receiver(), isolate)); + } else if (object->IsJSPromise()) { Handle<JSPromise> promise = Handle<JSPromise>::cast(object); - const char* status = JSPromise::Status(promise->status()); - Handle<FixedArray> result = factory->NewFixedArray(2 * 2); - Handle<String> promise_status = - factory->NewStringFromAsciiChecked("[[PromiseState]]"); - result->set(0, *promise_status); - Handle<String> status_str = factory->NewStringFromAsciiChecked(status); - result->set(1, *status_str); - - Handle<Object> value_obj(promise->status() == Promise::kPending - ? ReadOnlyRoots(isolate).undefined_value() - : promise->result(), - isolate); - Handle<String> promise_value = - factory->NewStringFromAsciiChecked("[[PromiseResult]]"); - result->set(2, *promise_value); - result->set(3, *value_obj); - return factory->NewJSArrayWithElements(result); - } - if (object->IsJSProxy()) { - Handle<JSProxy> js_proxy = Handle<JSProxy>::cast(object); - Handle<FixedArray> result = factory->NewFixedArray(3 * 2); - Handle<String> handler_str = - factory->NewStringFromAsciiChecked("[[Handler]]"); - result->set(0, *handler_str); - result->set(1, js_proxy->handler()); - - Handle<String> target_str = - factory->NewStringFromAsciiChecked("[[Target]]"); - result->set(2, *target_str); - result->set(3, js_proxy->target()); + result = ArrayList::Add( + isolate, result, + isolate->factory()->NewStringFromAsciiChecked("[[PromiseState]]"), + isolate->factory()->NewStringFromAsciiChecked( + JSPromise::Status(promise->status()))); + result = ArrayList::Add( + isolate, result, + isolate->factory()->NewStringFromAsciiChecked("[[PromiseResult]]"), + promise->status() == Promise::kPending + ? isolate->factory()->undefined_value() + : handle(promise->result(), isolate)); + } else if (object->IsJSProxy()) { + Handle<JSProxy> js_proxy = Handle<JSProxy>::cast(object); - Handle<String> is_revoked_str = - factory->NewStringFromAsciiChecked("[[IsRevoked]]"); - result->set(4, *is_revoked_str); - result->set(5, isolate->heap()->ToBoolean(js_proxy->IsRevoked())); - return factory->NewJSArrayWithElements(result); - } - if (object->IsJSPrimitiveWrapper()) { + result = ArrayList::Add( + isolate, result, + isolate->factory()->NewStringFromAsciiChecked("[[Handler]]"), + handle(js_proxy->handler(), isolate)); + result = ArrayList::Add( + isolate, result, + isolate->factory()->NewStringFromAsciiChecked("[[Target]]"), + handle(js_proxy->target(), isolate)); + result = ArrayList::Add( + isolate, result, + isolate->factory()->NewStringFromAsciiChecked("[[IsRevoked]]"), + isolate->factory()->ToBoolean(js_proxy->IsRevoked())); + } else if (object->IsJSPrimitiveWrapper()) { Handle<JSPrimitiveWrapper> js_value = Handle<JSPrimitiveWrapper>::cast(object); - Handle<FixedArray> result = factory->NewFixedArray(2); - Handle<String> primitive_value = - factory->NewStringFromAsciiChecked("[[PrimitiveValue]]"); - result->set(0, *primitive_value); - result->set(1, js_value->value()); - return factory->NewJSArrayWithElements(result); - } - if (object->IsJSArrayBuffer()) { + result = ArrayList::Add( + isolate, result, + isolate->factory()->NewStringFromAsciiChecked("[[PrimitiveValue]]"), + handle(js_value->value(), isolate)); + } else if (object->IsJSArrayBuffer()) { Handle<JSArrayBuffer> js_array_buffer = Handle<JSArrayBuffer>::cast(object); if (js_array_buffer->was_detached()) { // Mark a detached JSArrayBuffer and such and don't even try to // create views for it, since the TypedArray constructors will // throw a TypeError when the underlying buffer is detached. - Handle<FixedArray> result = factory->NewFixedArray(1 * 2); - Handle<String> is_detached_str = - factory->NewStringFromAsciiChecked("[[IsDetached]]"); - result->set(0, *is_detached_str); - result->set(1, isolate->heap()->ToBoolean(true)); - return factory->NewJSArrayWithElements(result, PACKED_ELEMENTS); - } - const size_t byte_length = js_array_buffer->byte_length(); - static const ExternalArrayType kTypes[] = { - kExternalInt8Array, - kExternalUint8Array, - kExternalInt16Array, - kExternalInt32Array, - }; - Handle<FixedArray> result = - factory->NewFixedArray((3 + arraysize(kTypes)) * 2); - int index = 0; - for (auto type : kTypes) { - switch (type) { -#define TYPED_ARRAY_CASE(Type, type, TYPE, ctype) \ - case kExternal##Type##Array: { \ - if ((byte_length % sizeof(ctype)) != 0) continue; \ - Handle<String> typed_array_str = \ - factory->NewStringFromStaticChars("[[" #Type "Array]]"); \ - Handle<JSTypedArray> js_typed_array = \ - factory->NewJSTypedArray(kExternal##Type##Array, js_array_buffer, 0, \ - byte_length / sizeof(ctype)); \ - result->set(index++, *typed_array_str); \ - result->set(index++, *js_typed_array); \ - break; \ - } - TYPED_ARRAYS(TYPED_ARRAY_CASE) + result = ArrayList::Add( + isolate, result, + isolate->factory()->NewStringFromAsciiChecked("[[IsDetached]]"), + isolate->factory()->true_value()); + } else { + const size_t byte_length = js_array_buffer->byte_length(); + static const ExternalArrayType kTypes[] = { + kExternalInt8Array, + kExternalUint8Array, + kExternalInt16Array, + kExternalInt32Array, + }; + for (auto type : kTypes) { + switch (type) { +#define TYPED_ARRAY_CASE(Type, type, TYPE, ctype) \ + case kExternal##Type##Array: { \ + if ((byte_length % sizeof(ctype)) != 0) continue; \ + result = ArrayList::Add( \ + isolate, result, \ + isolate->factory()->NewStringFromStaticChars("[[" #Type "Array]]"), \ + isolate->factory()->NewJSTypedArray(kExternal##Type##Array, \ + js_array_buffer, 0, \ + byte_length / sizeof(ctype))); \ + break; \ + } + TYPED_ARRAYS(TYPED_ARRAY_CASE) #undef TYPED_ARRAY_CASE default: UNREACHABLE(); + } + } + result = + ArrayList::Add(isolate, result, + isolate->factory()->NewStringFromAsciiChecked( + "[[ArrayBufferByteLength]]"), + isolate->factory()->NewNumberFromSize(byte_length)); + + // Use the backing store pointer as a unique ID + EmbeddedVector<char, 32> buffer_data_vec; + int len = + SNPrintF(buffer_data_vec, V8PRIxPTR_FMT, + reinterpret_cast<Address>(js_array_buffer->backing_store())); + result = ArrayList::Add( + isolate, result, + isolate->factory()->NewStringFromAsciiChecked("[[ArrayBufferData]]"), + isolate->factory()->InternalizeUtf8String( + buffer_data_vec.SubVector(0, len))); + + Handle<Symbol> memory_symbol = + isolate->factory()->array_buffer_wasm_memory_symbol(); + Handle<Object> memory_object = + JSObject::GetDataProperty(js_array_buffer, memory_symbol); + if (!memory_object->IsUndefined(isolate)) { + result = ArrayList::Add(isolate, result, + isolate->factory()->NewStringFromAsciiChecked( + "[[WebAssemblyMemory]]"), + memory_object); } } - Handle<String> byte_length_str = - factory->NewStringFromAsciiChecked("[[ArrayBufferByteLength]]"); - Handle<Object> byte_length_obj = factory->NewNumberFromSize(byte_length); - result->set(index++, *byte_length_str); - result->set(index++, *byte_length_obj); - - Handle<String> buffer_data_str = - factory->NewStringFromAsciiChecked("[[ArrayBufferData]]"); - // Use the backing store pointer as a unique ID - EmbeddedVector<char, 32> buffer_data_vec; - int len = - SNPrintF(buffer_data_vec, V8PRIxPTR_FMT, - reinterpret_cast<Address>(js_array_buffer->backing_store())); - Handle<String> buffer_data_obj = - factory->InternalizeUtf8String(buffer_data_vec.SubVector(0, len)); - result->set(index++, *buffer_data_str); - result->set(index++, *buffer_data_obj); - #if V8_ENABLE_WEBASSEMBLY - Handle<Symbol> memory_symbol = factory->array_buffer_wasm_memory_symbol(); - Handle<Object> memory_object = - JSObject::GetDataProperty(js_array_buffer, memory_symbol); - if (!memory_object->IsUndefined(isolate)) { - Handle<String> buffer_memory_str = - factory->NewStringFromAsciiChecked("[[WebAssemblyMemory]]"); - Handle<WasmMemoryObject> buffer_memory_obj = - Handle<WasmMemoryObject>::cast(memory_object); - result->set(index++, *buffer_memory_str); - result->set(index++, *buffer_memory_obj); - } + } else if (object->IsWasmInstanceObject()) { + result = AddWasmInstanceObjectInternalProperties( + isolate, result, Handle<WasmInstanceObject>::cast(object)); + } else if (object->IsWasmModuleObject()) { + result = AddWasmModuleObjectInternalProperties( + isolate, result, Handle<WasmModuleObject>::cast(object)); #endif // V8_ENABLE_WEBASSEMBLY - - return factory->NewJSArrayWithElements(result, PACKED_ELEMENTS, index); } -#if V8_ENABLE_WEBASSEMBLY - if (object->IsWasmInstanceObject()) { - return GetWasmInstanceObjectInternalProperties( - Handle<WasmInstanceObject>::cast(object)); - } - if (object->IsWasmModuleObject()) { - return GetWasmModuleObjectInternalProperties( - Handle<WasmModuleObject>::cast(object)); - } -#endif // V8_ENABLE_WEBASSEMBLY - return factory->NewJSArray(0); + return isolate->factory()->NewJSArrayWithElements( + ArrayList::Elements(isolate, result), PACKED_ELEMENTS); } RUNTIME_FUNCTION(Runtime_GetGeneratorScopeCount) { @@ -902,22 +861,9 @@ RUNTIME_FUNCTION(Runtime_LiveEditPatchScript) { case v8::debug::LiveEditResult::BLOCKED_BY_RUNNING_GENERATOR: return isolate->Throw(*isolate->factory()->NewStringFromAsciiChecked( "LiveEdit failed: BLOCKED_BY_RUNNING_GENERATOR")); - case v8::debug::LiveEditResult::BLOCKED_BY_FUNCTION_ABOVE_BREAK_FRAME: - return isolate->Throw(*isolate->factory()->NewStringFromAsciiChecked( - "LiveEdit failed: BLOCKED_BY_FUNCTION_ABOVE_BREAK_FRAME")); - case v8::debug::LiveEditResult:: - BLOCKED_BY_FUNCTION_BELOW_NON_DROPPABLE_FRAME: - return isolate->Throw(*isolate->factory()->NewStringFromAsciiChecked( - "LiveEdit failed: BLOCKED_BY_FUNCTION_BELOW_NON_DROPPABLE_FRAME")); case v8::debug::LiveEditResult::BLOCKED_BY_ACTIVE_FUNCTION: return isolate->Throw(*isolate->factory()->NewStringFromAsciiChecked( "LiveEdit failed: BLOCKED_BY_ACTIVE_FUNCTION")); - case v8::debug::LiveEditResult::BLOCKED_BY_NEW_TARGET_IN_RESTART_FRAME: - return isolate->Throw(*isolate->factory()->NewStringFromAsciiChecked( - "LiveEdit failed: BLOCKED_BY_NEW_TARGET_IN_RESTART_FRAME")); - case v8::debug::LiveEditResult::FRAME_RESTART_IS_NOT_SUPPORTED: - return isolate->Throw(*isolate->factory()->NewStringFromAsciiChecked( - "LiveEdit failed: FRAME_RESTART_IS_NOT_SUPPORTED")); case v8::debug::LiveEditResult::OK: return ReadOnlyRoots(isolate).undefined_value(); } @@ -931,7 +877,7 @@ RUNTIME_FUNCTION(Runtime_ProfileCreateSnapshotDataBlob) { // Used only by the test/memory/Memory.json benchmark. This creates a snapshot // blob and outputs various statistics around it. - DCHECK(FLAG_profile_deserialization); + DCHECK(FLAG_profile_deserialization && FLAG_serialization_statistics); DisableEmbeddedBlobRefcounting(); diff --git a/deps/v8/src/runtime/runtime-internal.cc b/deps/v8/src/runtime/runtime-internal.cc index 245d1fd77e..6d569c2be2 100644 --- a/deps/v8/src/runtime/runtime-internal.cc +++ b/deps/v8/src/runtime/runtime-internal.cc @@ -7,6 +7,7 @@ #include "src/api/api.h" #include "src/ast/ast-traversal-visitor.h" #include "src/ast/prettyprinter.h" +#include "src/baseline/baseline-osr-inl.h" #include "src/baseline/baseline.h" #include "src/builtins/builtins.h" #include "src/common/message-template.h" @@ -139,6 +140,7 @@ const char* ElementsKindToType(ElementsKind fixed_elements_kind) { return #Type "Array"; TYPED_ARRAYS(ELEMENTS_KIND_CASE) + RAB_GSAB_TYPED_ARRAYS_WITH_TYPED_ARRAY_TYPE(ELEMENTS_KIND_CASE) #undef ELEMENTS_KIND_CASE default: @@ -342,23 +344,13 @@ RUNTIME_FUNCTION(Runtime_BytecodeBudgetInterruptFromBytecode) { // a non zero invocation count so we can inline functions. function->feedback_vector().set_invocation_count(1); if (FLAG_sparkplug) { - if (Compiler::CompileBaseline(isolate, function, - Compiler::CLEAR_EXCEPTION, - &is_compiled_scope)) { - if (FLAG_use_osr) { - JavaScriptFrameIterator it(isolate); - DCHECK(it.frame()->is_unoptimized()); - UnoptimizedFrame* frame = UnoptimizedFrame::cast(it.frame()); - if (FLAG_trace_osr) { - CodeTracer::Scope scope(isolate->GetCodeTracer()); - PrintF( - scope.file(), - "[OSR - Entry at OSR bytecode offset %d into baseline code]\n", - frame->GetBytecodeOffset()); - } - frame->GetBytecodeArray().set_osr_loop_nesting_level( - AbstractCode::kMaxLoopNestingMarker); - } + if (V8_LIKELY(FLAG_use_osr)) { + JavaScriptFrameIterator it(isolate); + DCHECK(it.frame()->is_unoptimized()); + UnoptimizedFrame* frame = UnoptimizedFrame::cast(it.frame()); + OSRInterpreterFrameToBaseline(isolate, function, frame); + } else { + OSRInterpreterFrameToBaseline(isolate, function, nullptr); } } return ReadOnlyRoots(isolate).undefined_value(); @@ -528,6 +520,7 @@ RUNTIME_FUNCTION(Runtime_IncrementUseCounter) { RUNTIME_FUNCTION(Runtime_GetAndResetRuntimeCallStats) { HandleScope scope(isolate); DCHECK_LE(args.length(), 2); +#ifdef V8_RUNTIME_CALL_STATS // Append any worker thread runtime call stats to the main table before // printing. isolate->counters()->worker_thread_runtime_call_stats()->AddToMainTable( @@ -570,6 +563,7 @@ RUNTIME_FUNCTION(Runtime_GetAndResetRuntimeCallStats) { } else { std::fflush(f); } +#endif // V8_RUNTIME_CALL_STATS return ReadOnlyRoots(isolate).undefined_value(); } diff --git a/deps/v8/src/runtime/runtime-literals.cc b/deps/v8/src/runtime/runtime-literals.cc index 5ee7bcd4c5..c4285f2403 100644 --- a/deps/v8/src/runtime/runtime-literals.cc +++ b/deps/v8/src/runtime/runtime-literals.cc @@ -218,6 +218,7 @@ MaybeHandle<JSObject> JSObjectWalkVisitor<ContextObject>::StructureWalk( #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype) case TYPE##_ELEMENTS: TYPED_ARRAYS(TYPED_ARRAY_CASE) + RAB_GSAB_TYPED_ARRAYS(TYPED_ARRAY_CASE) #undef TYPED_ARRAY_CASE // Typed elements cannot be created using an object literal. UNREACHABLE(); @@ -291,7 +292,7 @@ class AllocationSiteCreationContext : public AllocationSiteContext { } void ExitScope(Handle<AllocationSite> scope_site, Handle<JSObject> object) { if (object.is_null()) return; - scope_site->set_boilerplate(*object); + scope_site->set_boilerplate(*object, kReleaseStore); if (FLAG_trace_creation_allocation_sites) { bool top_level = !scope_site.is_null() && top().is_identical_to(scope_site); diff --git a/deps/v8/src/runtime/runtime-object.cc b/deps/v8/src/runtime/runtime-object.cc index a98ad2e6dc..13493125da 100644 --- a/deps/v8/src/runtime/runtime-object.cc +++ b/deps/v8/src/runtime/runtime-object.cc @@ -16,8 +16,10 @@ #include "src/logging/counters.h" #include "src/objects/hash-table-inl.h" #include "src/objects/js-array-inl.h" +#include "src/objects/map-updater.h" #include "src/objects/property-descriptor-object.h" #include "src/objects/property-descriptor.h" +#include "src/objects/property-details.h" #include "src/objects/swiss-name-dictionary-inl.h" #include "src/runtime/runtime-utils.h" #include "src/runtime/runtime.h" @@ -25,23 +27,22 @@ namespace v8 { namespace internal { -MaybeHandle<Object> Runtime::GetObjectProperty(Isolate* isolate, - Handle<Object> holder, - Handle<Object> key, - Handle<Object> receiver, - bool* is_found) { +MaybeHandle<Object> Runtime::GetObjectProperty( + Isolate* isolate, Handle<Object> lookup_start_object, Handle<Object> key, + Handle<Object> receiver, bool* is_found) { if (receiver.is_null()) { - receiver = holder; + receiver = lookup_start_object; } - if (holder->IsNullOrUndefined(isolate)) { - ErrorUtils::ThrowLoadFromNullOrUndefined(isolate, holder, key); + if (lookup_start_object->IsNullOrUndefined(isolate)) { + ErrorUtils::ThrowLoadFromNullOrUndefined(isolate, lookup_start_object, key); return MaybeHandle<Object>(); } bool success = false; LookupIterator::Key lookup_key(isolate, key, &success); if (!success) return MaybeHandle<Object>(); - LookupIterator it = LookupIterator(isolate, receiver, lookup_key, holder); + LookupIterator it = + LookupIterator(isolate, receiver, lookup_key, lookup_start_object); MaybeHandle<Object> result = Object::GetProperty(&it); if (is_found) *is_found = it.IsFound(); @@ -58,12 +59,12 @@ MaybeHandle<Object> Runtime::GetObjectProperty(Isolate* isolate, : name_string; THROW_NEW_ERROR(isolate, NewTypeError(MessageTemplate::kInvalidPrivateBrand, - class_name, holder), + class_name, lookup_start_object), Object); } THROW_NEW_ERROR(isolate, NewTypeError(MessageTemplate::kInvalidPrivateMemberRead, - name_string, holder), + name_string, lookup_start_object), Object); } return result; @@ -95,6 +96,28 @@ MaybeHandle<Object> Runtime::HasProperty(Isolate* isolate, namespace { +// This function sets the sentinel value in a deleted field. Thes sentinel has +// to look like a proper standalone object because the slack tracking may +// complete at any time. For this reason we use the filler map word. +// If V8_MAP_PACKING is enabled, then the filler map word is a packed filler +// map. Otherwise, the filler map word is the same as the filler map. +inline void ClearField(Isolate* isolate, JSObject object, FieldIndex index) { + if (index.is_inobject()) { + MapWord filler_map_word = + ReadOnlyRoots(isolate).one_pointer_filler_map_word(); +#ifndef V8_MAP_PACKING + DCHECK_EQ(filler_map_word.ToMap(), + ReadOnlyRoots(isolate).one_pointer_filler_map()); +#endif + int offset = index.offset(); + TaggedField<MapWord>::Release_Store(object, offset, filler_map_word); + } else { + object.property_array().set( + index.outobject_array_index(), + ReadOnlyRoots(isolate).one_pointer_filler_map()); + } +} + void GeneralizeAllTransitionsToFieldAsMutable(Isolate* isolate, Handle<Map> map, Handle<Name> name) { InternalIndex descriptor(map->NumberOfOwnDescriptors()); @@ -131,9 +154,9 @@ void GeneralizeAllTransitionsToFieldAsMutable(Isolate* isolate, Handle<Map> map, Handle<FieldType> field_type( target->instance_descriptors(isolate).GetFieldType(descriptor), isolate); - Map::GeneralizeField(isolate, target, descriptor, - PropertyConstness::kMutable, details.representation(), - field_type); + MapUpdater::GeneralizeField(isolate, target, descriptor, + PropertyConstness::kMutable, + details.representation(), field_type); DCHECK_EQ(PropertyConstness::kMutable, target->instance_descriptors(isolate) .GetDetails(descriptor) .constness()); @@ -191,8 +214,7 @@ bool DeleteObjectPropertyFast(Isolate* isolate, Handle<JSReceiver> receiver, // Clear out the properties backing store. receiver->SetProperties(ReadOnlyRoots(isolate).empty_fixed_array()); } else { - Object filler = ReadOnlyRoots(isolate).one_pointer_filler_map(); - JSObject::cast(*receiver).FastPropertyAtPut(index, filler); + ClearField(isolate, JSObject::cast(*receiver), index); // We must clear any recorded slot for the deleted property, because // subsequent object modifications might put a raw double there. // Slot clearing is the reason why this entire function cannot currently @@ -203,8 +225,10 @@ bool DeleteObjectPropertyFast(Isolate* isolate, Handle<JSReceiver> receiver, // have recorded slots in free space. isolate->heap()->ClearRecordedSlot(*receiver, receiver->RawField(index.offset())); - MemoryChunk* chunk = MemoryChunk::FromHeapObject(*receiver); - chunk->InvalidateRecordedSlots(*receiver); + if (!FLAG_enable_third_party_heap) { + MemoryChunk* chunk = MemoryChunk::FromHeapObject(*receiver); + chunk->InvalidateRecordedSlots(*receiver); + } } } } @@ -214,7 +238,7 @@ bool DeleteObjectPropertyFast(Isolate* isolate, Handle<JSReceiver> receiver, // the "deoptimize dependent code" mechanism. receiver_map->NotifyLeafMapLayoutChange(isolate); // Finally, perform the map rollback. - receiver->synchronized_set_map(*parent_map); + receiver->set_map(*parent_map, kReleaseStore); #if VERIFY_HEAP receiver->HeapObjectVerify(isolate); receiver->property_array().PropertyArrayVerify(isolate); @@ -682,15 +706,15 @@ RUNTIME_FUNCTION(Runtime_JSReceiverSetPrototypeOfDontThrow) { RUNTIME_FUNCTION(Runtime_GetProperty) { HandleScope scope(isolate); DCHECK(args.length() == 3 || args.length() == 2); - CONVERT_ARG_HANDLE_CHECKED(Object, holder_obj, 0); + CONVERT_ARG_HANDLE_CHECKED(Object, lookup_start_obj, 0); CONVERT_ARG_HANDLE_CHECKED(Object, key_obj, 1); - Handle<Object> receiver_obj = holder_obj; + Handle<Object> receiver_obj = lookup_start_obj; if (args.length() == 3) { CHECK(args[2].IsObject()); receiver_obj = args.at<Object>(2); } - // Fast cases for getting named properties of the holder JSObject + // Fast cases for getting named properties of the lookup_start_obj JSObject // itself. // // The global proxy objects has to be excluded since LookupOwn on @@ -708,18 +732,19 @@ RUNTIME_FUNCTION(Runtime_GetProperty) { if (key_obj->IsString() && String::cast(*key_obj).AsArrayIndex(&index)) { key_obj = isolate->factory()->NewNumberFromUint(index); } - if (holder_obj->IsJSObject()) { - if (!holder_obj->IsJSGlobalProxy() && !holder_obj->IsAccessCheckNeeded() && - key_obj->IsName()) { - Handle<JSObject> holder = Handle<JSObject>::cast(holder_obj); + if (lookup_start_obj->IsJSObject()) { + Handle<JSObject> lookup_start_object = + Handle<JSObject>::cast(lookup_start_obj); + if (!lookup_start_object->IsJSGlobalProxy() && + !lookup_start_object->IsAccessCheckNeeded() && key_obj->IsName()) { Handle<Name> key = Handle<Name>::cast(key_obj); key_obj = key = isolate->factory()->InternalizeName(key); DisallowGarbageCollection no_gc; - if (holder->IsJSGlobalObject()) { + if (lookup_start_object->IsJSGlobalObject()) { // Attempt dictionary lookup. - GlobalDictionary dictionary = - JSGlobalObject::cast(*holder).global_dictionary(kAcquireLoad); + GlobalDictionary dictionary = JSGlobalObject::cast(*lookup_start_object) + .global_dictionary(kAcquireLoad); InternalIndex entry = dictionary.FindEntry(isolate, key); if (entry.is_found()) { PropertyCell cell = dictionary.CellAt(entry); @@ -729,17 +754,19 @@ RUNTIME_FUNCTION(Runtime_GetProperty) { // If value is the hole (meaning, absent) do the general lookup. } } - } else if (!holder->HasFastProperties()) { + } else if (!lookup_start_object->HasFastProperties()) { // Attempt dictionary lookup. if (V8_ENABLE_SWISS_NAME_DICTIONARY_BOOL) { - SwissNameDictionary dictionary = holder->property_dictionary_swiss(); + SwissNameDictionary dictionary = + lookup_start_object->property_dictionary_swiss(); InternalIndex entry = dictionary.FindEntry(isolate, *key); if (entry.is_found() && (dictionary.DetailsAt(entry).kind() == kData)) { return dictionary.ValueAt(entry); } } else { - NameDictionary dictionary = holder->property_dictionary(); + NameDictionary dictionary = + lookup_start_object->property_dictionary(); InternalIndex entry = dictionary.FindEntry(isolate, key); if ((entry.is_found()) && (dictionary.DetailsAt(entry).kind() == kData)) { @@ -754,22 +781,21 @@ RUNTIME_FUNCTION(Runtime_GetProperty) { // transition elements to FAST_*_ELEMENTS to avoid excessive boxing of // doubles for those future calls in the case that the elements would // become PACKED_DOUBLE_ELEMENTS. - Handle<JSObject> js_object = Handle<JSObject>::cast(holder_obj); - ElementsKind elements_kind = js_object->GetElementsKind(); + ElementsKind elements_kind = lookup_start_object->GetElementsKind(); if (IsDoubleElementsKind(elements_kind)) { - if (Smi::ToInt(*key_obj) >= js_object->elements().length()) { + if (Smi::ToInt(*key_obj) >= lookup_start_object->elements().length()) { elements_kind = IsHoleyElementsKind(elements_kind) ? HOLEY_ELEMENTS : PACKED_ELEMENTS; - JSObject::TransitionElementsKind(js_object, elements_kind); + JSObject::TransitionElementsKind(lookup_start_object, elements_kind); } } else { DCHECK(IsSmiOrObjectElementsKind(elements_kind) || !IsFastElementsKind(elements_kind)); } } - } else if (holder_obj->IsString() && key_obj->IsSmi()) { + } else if (lookup_start_obj->IsString() && key_obj->IsSmi()) { // Fast case for string indexing using [] with a smi index. - Handle<String> str = Handle<String>::cast(holder_obj); + Handle<String> str = Handle<String>::cast(lookup_start_obj); int index = Handle<Smi>::cast(key_obj)->value(); if (index >= 0 && index < str->length()) { Factory* factory = isolate->factory(); @@ -780,8 +806,8 @@ RUNTIME_FUNCTION(Runtime_GetProperty) { // Fall back to GetObjectProperty. RETURN_RESULT_OR_FAILURE( - isolate, - Runtime::GetObjectProperty(isolate, holder_obj, key_obj, receiver_obj)); + isolate, Runtime::GetObjectProperty(isolate, lookup_start_obj, key_obj, + receiver_obj)); } RUNTIME_FUNCTION(Runtime_SetKeyedProperty) { @@ -947,11 +973,16 @@ RUNTIME_FUNCTION(Runtime_NewObject) { RUNTIME_FUNCTION(Runtime_GetDerivedMap) { HandleScope scope(isolate); - DCHECK_EQ(2, args.length()); + DCHECK_EQ(3, args.length()); CONVERT_ARG_HANDLE_CHECKED(JSFunction, target, 0); CONVERT_ARG_HANDLE_CHECKED(JSReceiver, new_target, 1); - RETURN_RESULT_OR_FAILURE( - isolate, JSFunction::GetDerivedMap(isolate, target, new_target)); + CONVERT_ARG_HANDLE_CHECKED(Object, rab_gsab, 2); + if (rab_gsab->IsTrue()) { + return *JSFunction::GetDerivedRabGsabMap(isolate, target, new_target); + } else { + RETURN_RESULT_OR_FAILURE( + isolate, JSFunction::GetDerivedMap(isolate, target, new_target)); + } } RUNTIME_FUNCTION(Runtime_CompleteInobjectSlackTrackingForMap) { diff --git a/deps/v8/src/runtime/runtime-promise.cc b/deps/v8/src/runtime/runtime-promise.cc index 54adc4c920..0ade310cfb 100644 --- a/deps/v8/src/runtime/runtime-promise.cc +++ b/deps/v8/src/runtime/runtime-promise.cc @@ -260,17 +260,18 @@ RUNTIME_FUNCTION(Runtime_ResolvePromise) { // takes care of the Error-related construction, e.g., stack traces. RUNTIME_FUNCTION(Runtime_ConstructAggregateErrorHelper) { HandleScope scope(isolate); - DCHECK_EQ(3, args.length()); + DCHECK_EQ(4, args.length()); CONVERT_ARG_HANDLE_CHECKED(JSFunction, target, 0); CONVERT_ARG_HANDLE_CHECKED(Object, new_target, 1); CONVERT_ARG_HANDLE_CHECKED(Object, message, 2); + CONVERT_ARG_HANDLE_CHECKED(Object, options, 3); DCHECK_EQ(*target, *isolate->aggregate_error_function()); Handle<Object> result; ASSIGN_RETURN_FAILURE_ON_EXCEPTION( isolate, result, - ErrorUtils::Construct(isolate, target, new_target, message)); + ErrorUtils::Construct(isolate, target, new_target, message, options)); return *result; } @@ -299,6 +300,14 @@ RUNTIME_FUNCTION(Runtime_ConstructInternalAggregateErrorHelper) { arg2 = args.at<Object>(3); } + Handle<Object> options; + if (args.length() >= 5) { + CHECK(args[4].IsObject()); + options = args.at<Object>(4); + } else { + options = isolate->factory()->undefined_value(); + } + Handle<Object> message_string = MessageFormatter::Format( isolate, MessageTemplate(message->value()), arg0, arg1, arg2); @@ -306,8 +315,8 @@ RUNTIME_FUNCTION(Runtime_ConstructInternalAggregateErrorHelper) { ASSIGN_RETURN_FAILURE_ON_EXCEPTION( isolate, result, ErrorUtils::Construct(isolate, isolate->aggregate_error_function(), - isolate->aggregate_error_function(), - message_string)); + isolate->aggregate_error_function(), message_string, + options)); return *result; } diff --git a/deps/v8/src/runtime/runtime-regexp.cc b/deps/v8/src/runtime/runtime-regexp.cc index d18602f58f..f80316e34d 100644 --- a/deps/v8/src/runtime/runtime-regexp.cc +++ b/deps/v8/src/runtime/runtime-regexp.cc @@ -1696,7 +1696,7 @@ RUNTIME_FUNCTION(Runtime_RegExpSplit) { if (!result->IsNull(isolate)) return *factory->NewJSArray(0); - Handle<FixedArray> elems = factory->NewUninitializedFixedArray(1); + Handle<FixedArray> elems = factory->NewFixedArray(1); elems->set(0, *string); return *factory->NewJSArrayWithElements(elems); } @@ -2004,5 +2004,13 @@ RUNTIME_FUNCTION(Runtime_IsRegExp) { return isolate->heap()->ToBoolean(obj.IsJSRegExp()); } +RUNTIME_FUNCTION(Runtime_RegExpStringFromFlags) { + HandleScope scope(isolate); + DCHECK_EQ(1, args.length()); + CONVERT_ARG_CHECKED(JSRegExp, regexp, 0); + Handle<String> flags = JSRegExp::StringFromFlags(isolate, regexp.GetFlags()); + return *flags; +} + } // namespace internal } // namespace v8 diff --git a/deps/v8/src/runtime/runtime-scopes.cc b/deps/v8/src/runtime/runtime-scopes.cc index 457f372955..e925e1f7f9 100644 --- a/deps/v8/src/runtime/runtime-scopes.cc +++ b/deps/v8/src/runtime/runtime-scopes.cc @@ -510,7 +510,7 @@ RUNTIME_FUNCTION(Runtime_NewStrictArguments) { isolate->factory()->NewArgumentsObject(callee, argument_count); if (argument_count) { Handle<FixedArray> array = - isolate->factory()->NewUninitializedFixedArray(argument_count); + isolate->factory()->NewFixedArray(argument_count); DisallowGarbageCollection no_gc; WriteBarrierMode mode = array->GetWriteBarrierMode(no_gc); for (int i = 0; i < argument_count; i++) { @@ -859,7 +859,7 @@ RUNTIME_FUNCTION(Runtime_StoreLookupSlot_SloppyHoisting) { LanguageMode::kSloppy, lookup_flags)); } -RUNTIME_FUNCTION(Runtime_StoreGlobalNoHoleCheckForReplLet) { +RUNTIME_FUNCTION(Runtime_StoreGlobalNoHoleCheckForReplLetOrConst) { HandleScope scope(isolate); DCHECK_EQ(2, args.length()); CONVERT_ARG_HANDLE_CHECKED(String, name, 0); diff --git a/deps/v8/src/runtime/runtime-strings.cc b/deps/v8/src/runtime/runtime-strings.cc index 0acf6334d4..bd651c646c 100644 --- a/deps/v8/src/runtime/runtime-strings.cc +++ b/deps/v8/src/runtime/runtime-strings.cc @@ -315,7 +315,7 @@ RUNTIME_FUNCTION(Runtime_StringToArray) { int position = 0; if (s->IsFlat() && s->IsOneByteRepresentation()) { // Try using cached chars where possible. - elements = isolate->factory()->NewUninitializedFixedArray(length); + elements = isolate->factory()->NewFixedArray(length); DisallowGarbageCollection no_gc; String::FlatContent content = s->GetFlatContent(no_gc); diff --git a/deps/v8/src/runtime/runtime-test-wasm.cc b/deps/v8/src/runtime/runtime-test-wasm.cc index 9c07441de5..54976dcc05 100644 --- a/deps/v8/src/runtime/runtime-test-wasm.cc +++ b/deps/v8/src/runtime/runtime-test-wasm.cc @@ -158,8 +158,7 @@ RUNTIME_FUNCTION(Runtime_WasmTraceEnter) { wasm::ModuleWireBytes wire_bytes = wasm::ModuleWireBytes(frame->native_module()->wire_bytes()); wasm::WireBytesRef name_ref = - module->lazily_generated_names.LookupFunctionName( - wire_bytes, func_index, VectorOf(module->export_table)); + module->lazily_generated_names.LookupFunctionName(wire_bytes, func_index); wasm::WasmName name = wire_bytes.GetNameOrNull(name_ref); wasm::WasmCode* code = frame->wasm_code(); @@ -423,14 +422,10 @@ RUNTIME_FUNCTION(Runtime_WasmTraceMemory) { frame->wasm_instance().memory_object().array_buffer().backing_store()); int func_index = frame->function_index(); int pos = frame->position(); - // TODO(titzer): eliminate dependency on WasmModule definition here. - int func_start = - frame->wasm_instance().module()->functions[func_index].code.offset(); wasm::ExecutionTier tier = frame->wasm_code()->is_liftoff() ? wasm::ExecutionTier::kLiftoff : wasm::ExecutionTier::kTurbofan; - wasm::TraceMemoryOperation(tier, info, func_index, pos - func_start, - mem_start); + wasm::TraceMemoryOperation(tier, info, func_index, pos, mem_start); return ReadOnlyRoots(isolate).undefined_value(); } diff --git a/deps/v8/src/runtime/runtime-test.cc b/deps/v8/src/runtime/runtime-test.cc index 0dd7368e39..00a4124dce 100644 --- a/deps/v8/src/runtime/runtime-test.cc +++ b/deps/v8/src/runtime/runtime-test.cc @@ -4,6 +4,7 @@ #include "src/api/api-inl.h" #include "src/base/platform/mutex.h" +#include "src/baseline/baseline-osr-inl.h" #include "src/codegen/assembler-inl.h" #include "src/codegen/compiler.h" #include "src/codegen/pending-optimization-table.h" @@ -41,6 +42,11 @@ V8_WARN_UNUSED_RESULT Object CrashUnlessFuzzing(Isolate* isolate) { return ReadOnlyRoots(isolate).undefined_value(); } +// Returns |value| unless fuzzing is enabled, otherwise returns undefined_value. +V8_WARN_UNUSED_RESULT Object ReturnFuzzSafe(Object value, Isolate* isolate) { + return FLAG_fuzzing ? ReadOnlyRoots(isolate).undefined_value() : value; +} + // Assert that the given argument is a number within the Int32 range // and convert it to int32_t. If the argument is not an Int32 we crash if not // in fuzzing mode. @@ -470,6 +476,37 @@ RUNTIME_FUNCTION(Runtime_OptimizeOsr) { return ReadOnlyRoots(isolate).undefined_value(); } +RUNTIME_FUNCTION(Runtime_BaselineOsr) { + HandleScope scope(isolate); + DCHECK(args.length() == 0 || args.length() == 1); + + Handle<JSFunction> function; + + // The optional parameter determines the frame being targeted. + int stack_depth = 0; + if (args.length() == 1) { + if (!args[0].IsSmi()) return CrashUnlessFuzzing(isolate); + stack_depth = args.smi_at(0); + } + + // Find the JavaScript function on the top of the stack. + JavaScriptFrameIterator it(isolate); + while (!it.done() && stack_depth--) it.Advance(); + if (!it.done()) function = handle(it.frame()->function(), isolate); + if (function.is_null()) return CrashUnlessFuzzing(isolate); + if (!FLAG_sparkplug || !FLAG_use_osr) { + return ReadOnlyRoots(isolate).undefined_value(); + } + if (!it.frame()->is_unoptimized()) { + return ReadOnlyRoots(isolate).undefined_value(); + } + + UnoptimizedFrame* frame = UnoptimizedFrame::cast(it.frame()); + OSRInterpreterFrameToBaseline(isolate, function, frame); + + return ReadOnlyRoots(isolate).undefined_value(); +} + RUNTIME_FUNCTION(Runtime_NeverOptimizeFunction) { HandleScope scope(isolate); DCHECK_EQ(1, args.length()); @@ -576,6 +613,11 @@ RUNTIME_FUNCTION(Runtime_GetOptimizationStatus) { if (frame->is_optimized()) { status |= static_cast<int>(OptimizationStatus::kTopmostFrameIsTurboFanned); + } else if (frame->is_interpreted()) { + status |= + static_cast<int>(OptimizationStatus::kTopmostFrameIsInterpreted); + } else if (frame->is_baseline()) { + status |= static_cast<int>(OptimizationStatus::kTopmostFrameIsBaseline); } } @@ -678,6 +720,7 @@ int FixedArrayLenFromSize(int size) { } void FillUpOneNewSpacePage(Isolate* isolate, Heap* heap) { + DCHECK(!FLAG_single_generation); PauseAllocationObserversScope pause_observers(heap); NewSpace* space = heap->new_space(); // We cannot rely on `space->limit()` to point to the end of the current page @@ -990,6 +1033,25 @@ RUNTIME_FUNCTION(Runtime_InYoungGeneration) { return isolate->heap()->ToBoolean(ObjectInYoungGeneration(obj)); } +// Force pretenuring for the allocation site the passed object belongs to. +RUNTIME_FUNCTION(Runtime_PretenureAllocationSite) { + DisallowGarbageCollection no_gc; + + if (args.length() != 1) return CrashUnlessFuzzing(isolate); + CONVERT_ARG_CHECKED(Object, arg, 0); + if (!arg.IsJSObject()) return CrashUnlessFuzzing(isolate); + JSObject object = JSObject::cast(arg); + + Heap* heap = object.GetHeap(); + AllocationMemento memento = + heap->FindAllocationMemento<Heap::kForRuntime>(object.map(), object); + if (memento.is_null()) + return ReturnFuzzSafe(ReadOnlyRoots(isolate).false_value(), isolate); + AllocationSite site = memento.GetAllocationSite(); + heap->PretenureAllocationSiteOnNextCollection(site); + return ReturnFuzzSafe(ReadOnlyRoots(isolate).true_value(), isolate); +} + namespace { v8::ModifyCodeGenerationFromStringsResult DisallowCodegenFromStringsCallback( @@ -1257,6 +1319,7 @@ RUNTIME_FUNCTION(Runtime_EnableCodeLoggingForTesting) { Handle<String> source) final {} void CodeMoveEvent(AbstractCode from, AbstractCode to) final {} void SharedFunctionInfoMoveEvent(Address from, Address to) final {} + void NativeContextMoveEvent(Address from, Address to) final {} void CodeMovingGCEvent() final {} void CodeDisableOptEvent(Handle<AbstractCode> code, Handle<SharedFunctionInfo> shared) final {} @@ -1294,5 +1357,11 @@ RUNTIME_FUNCTION(Runtime_NewRegExpWithBacktrackLimit) { isolate, JSRegExp::New(isolate, pattern, flags, backtrack_limit)); } +RUNTIME_FUNCTION(Runtime_Is64Bit) { + SealHandleScope shs(isolate); + DCHECK_EQ(0, args.length()); + return isolate->heap()->ToBoolean(kSystemPointerSize == 8); +} + } // namespace internal } // namespace v8 diff --git a/deps/v8/src/runtime/runtime-typedarray.cc b/deps/v8/src/runtime/runtime-typedarray.cc index b73cfc9769..5d0fc35944 100644 --- a/deps/v8/src/runtime/runtime-typedarray.cc +++ b/deps/v8/src/runtime/runtime-typedarray.cc @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "src/base/atomicops.h" #include "src/common/message-template.h" #include "src/execution/arguments-inl.h" #include "src/heap/factory.h" @@ -52,6 +53,15 @@ RUNTIME_FUNCTION(Runtime_TypedArrayGetBuffer) { return *holder->GetBuffer(); } +RUNTIME_FUNCTION(Runtime_GrowableSharedArrayBufferByteLength) { + HandleScope scope(isolate); + DCHECK_EQ(1, args.length()); + CONVERT_ARG_HANDLE_CHECKED(JSArrayBuffer, array_buffer, 0); + + CHECK_EQ(0, array_buffer->byte_length()); + size_t byte_length = array_buffer->GetBackingStore()->byte_length(); + return *isolate->factory()->NewNumberFromSize(byte_length); +} namespace { @@ -84,6 +94,14 @@ RUNTIME_FUNCTION(Runtime_TypedArraySortFast) { CONVERT_ARG_HANDLE_CHECKED(JSTypedArray, array, 0); DCHECK(!array->WasDetached()); +#if V8_OS_LINUX + if (FLAG_multi_mapped_mock_allocator) { + // Sorting is meaningless with the mock allocator, and std::sort + // might crash (because aliasing elements violate its assumptions). + return *array; + } +#endif + size_t length = array->length(); DCHECK_LT(1, length); @@ -108,7 +126,8 @@ RUNTIME_FUNCTION(Runtime_TypedArraySortFast) { offheap_copy.resize(bytes); data_copy_ptr = &offheap_copy[0]; } - std::memcpy(data_copy_ptr, static_cast<void*>(array->DataPtr()), bytes); + base::Relaxed_Memcpy(static_cast<base::Atomic8*>(data_copy_ptr), + static_cast<base::Atomic8*>(array->DataPtr()), bytes); } DisallowGarbageCollection no_gc; @@ -147,7 +166,8 @@ RUNTIME_FUNCTION(Runtime_TypedArraySortFast) { DCHECK_NOT_NULL(data_copy_ptr); DCHECK_NE(array_copy.is_null(), offheap_copy.empty()); const size_t bytes = array->byte_length(); - std::memcpy(static_cast<void*>(array->DataPtr()), data_copy_ptr, bytes); + base::Relaxed_Memcpy(static_cast<base::Atomic8*>(array->DataPtr()), + static_cast<base::Atomic8*>(data_copy_ptr), bytes); } return *array; diff --git a/deps/v8/src/runtime/runtime.cc b/deps/v8/src/runtime/runtime.cc index c1b287cae3..9e553b12af 100644 --- a/deps/v8/src/runtime/runtime.cc +++ b/deps/v8/src/runtime/runtime.cc @@ -209,6 +209,7 @@ bool Runtime::IsAllowListedForFuzzing(FunctionId id) { case Runtime::kOptimizeFunctionOnNextCall: case Runtime::kOptimizeOsr: case Runtime::kPrepareFunctionForOptimization: + case Runtime::kPretenureAllocationSite: case Runtime::kSetAllocationTimeout: case Runtime::kSimulateNewspaceFull: return true; @@ -218,8 +219,10 @@ bool Runtime::IsAllowListedForFuzzing(FunctionId id) { case Runtime::kGetOptimizationStatus: case Runtime::kHeapObjectVerify: case Runtime::kIsBeingInterpreted: + case Runtime::kVerifyType: return !FLAG_allow_natives_for_differential_fuzzing; case Runtime::kCompileBaseline: + case Runtime::kBaselineOsr: return FLAG_sparkplug; default: return false; diff --git a/deps/v8/src/runtime/runtime.h b/deps/v8/src/runtime/runtime.h index 578156f094..eea742f2c9 100644 --- a/deps/v8/src/runtime/runtime.h +++ b/deps/v8/src/runtime/runtime.h @@ -115,7 +115,7 @@ namespace internal { F(NotifyDeoptimized, 0, 1) \ F(ObserveNode, 1, 1) \ F(ResolvePossiblyDirectEval, 6, 1) \ - F(TryInstallNCICode, 1, 1) + F(VerifyType, 1, 1) #define FOR_EACH_INTRINSIC_DATE(F, I) F(DateCurrentTime, 0, 1) @@ -343,7 +343,7 @@ namespace internal { I(ToNumber, 1, 1) \ F(ToNumeric, 1, 1) \ I(ToObject, 1, 1) \ - I(ToString, 1, 1) \ + F(ToString, 1, 1) \ F(TryMigrateInstance, 1, 1) \ F(SwissTableAdd, 4, 1) \ F(SwissTableAllocate, 1, 1) \ @@ -383,8 +383,8 @@ namespace internal { F(ResolvePromise, 2, 1) \ F(PromiseRejectAfterResolved, 2, 1) \ F(PromiseResolveAfterResolved, 2, 1) \ - F(ConstructAggregateErrorHelper, 3, 1) \ - F(ConstructInternalAggregateErrorHelper, -1 /* <= 4*/, 1) + F(ConstructAggregateErrorHelper, 4, 1) \ + F(ConstructInternalAggregateErrorHelper, -1 /* <= 5*/, 1) #define FOR_EACH_INTRINSIC_PROXY(F, I) \ F(CheckProxyGetSetTrapResult, 2, 1) \ @@ -407,31 +407,32 @@ namespace internal { F(RegExpInitializeAndCompile, 3, 1) \ F(RegExpReplaceRT, 3, 1) \ F(RegExpSplit, 3, 1) \ + F(RegExpStringFromFlags, 1, 1) \ F(StringReplaceNonGlobalRegExpWithFunction, 3, 1) \ F(StringSplit, 3, 1) -#define FOR_EACH_INTRINSIC_SCOPES(F, I) \ - F(DeclareEvalFunction, 2, 1) \ - F(DeclareEvalVar, 1, 1) \ - F(DeclareGlobals, 2, 1) \ - F(DeclareModuleExports, 2, 1) \ - F(DeleteLookupSlot, 1, 1) \ - F(LoadLookupSlot, 1, 1) \ - F(LoadLookupSlotInsideTypeof, 1, 1) \ - \ - F(NewClosure, 2, 1) \ - F(NewClosure_Tenured, 2, 1) \ - F(NewFunctionContext, 1, 1) \ - F(NewRestParameter, 1, 1) \ - F(NewSloppyArguments, 1, 1) \ - F(NewStrictArguments, 1, 1) \ - F(PushBlockContext, 1, 1) \ - F(PushCatchContext, 2, 1) \ - F(PushWithContext, 2, 1) \ - F(StoreGlobalNoHoleCheckForReplLet, 2, 1) \ - F(StoreLookupSlot_Sloppy, 2, 1) \ - F(StoreLookupSlot_SloppyHoisting, 2, 1) \ - F(StoreLookupSlot_Strict, 2, 1) \ +#define FOR_EACH_INTRINSIC_SCOPES(F, I) \ + F(DeclareEvalFunction, 2, 1) \ + F(DeclareEvalVar, 1, 1) \ + F(DeclareGlobals, 2, 1) \ + F(DeclareModuleExports, 2, 1) \ + F(DeleteLookupSlot, 1, 1) \ + F(LoadLookupSlot, 1, 1) \ + F(LoadLookupSlotInsideTypeof, 1, 1) \ + \ + F(NewClosure, 2, 1) \ + F(NewClosure_Tenured, 2, 1) \ + F(NewFunctionContext, 1, 1) \ + F(NewRestParameter, 1, 1) \ + F(NewSloppyArguments, 1, 1) \ + F(NewStrictArguments, 1, 1) \ + F(PushBlockContext, 1, 1) \ + F(PushCatchContext, 2, 1) \ + F(PushWithContext, 2, 1) \ + F(StoreGlobalNoHoleCheckForReplLetOrConst, 2, 1) \ + F(StoreLookupSlot_Sloppy, 2, 1) \ + F(StoreLookupSlot_SloppyHoisting, 2, 1) \ + F(StoreLookupSlot_Strict, 2, 1) \ F(ThrowConstAssignError, 0, 1) #define FOR_EACH_INTRINSIC_STRINGS(F, I) \ @@ -460,104 +461,108 @@ namespace internal { F(SymbolDescriptiveString, 1, 1) \ F(SymbolIsPrivate, 1, 1) -#define FOR_EACH_INTRINSIC_TEST(F, I) \ - F(Abort, 1, 1) \ - F(AbortJS, 1, 1) \ - F(AbortCSAAssert, 1, 1) \ - F(ArraySpeciesProtector, 0, 1) \ - F(ClearFunctionFeedback, 1, 1) \ - F(ClearMegamorphicStubCache, 0, 1) \ - F(CompleteInobjectSlackTracking, 1, 1) \ - F(ConstructConsString, 2, 1) \ - F(ConstructDouble, 2, 1) \ - F(ConstructSlicedString, 2, 1) \ - F(DebugPrint, 1, 1) \ - F(DebugPrintPtr, 1, 1) \ - F(DebugTrace, 0, 1) \ - F(DebugTrackRetainingPath, -1, 1) \ - F(DeoptimizeFunction, 1, 1) \ - F(DisallowCodegenFromStrings, 1, 1) \ - F(DisassembleFunction, 1, 1) \ - F(DynamicCheckMapsEnabled, 0, 1) \ - F(IsTopTierTurboprop, 0, 1) \ - F(IsMidTierTurboprop, 0, 1) \ - F(EnableCodeLoggingForTesting, 0, 1) \ - F(EnsureFeedbackVectorForFunction, 1, 1) \ - F(GetCallable, 0, 1) \ - F(GetInitializerFunction, 1, 1) \ - F(GetOptimizationStatus, -1, 1) \ - F(GetUndetectable, 0, 1) \ - F(GlobalPrint, 1, 1) \ - F(HasDictionaryElements, 1, 1) \ - F(HasDoubleElements, 1, 1) \ - F(HasElementsInALargeObjectSpace, 1, 1) \ - F(HasFastElements, 1, 1) \ - F(HasFastProperties, 1, 1) \ - F(HasOwnConstDataProperty, 2, 1) \ - F(HasFixedBigInt64Elements, 1, 1) \ - F(HasFixedBigUint64Elements, 1, 1) \ - F(HasFixedFloat32Elements, 1, 1) \ - F(HasFixedFloat64Elements, 1, 1) \ - F(HasFixedInt16Elements, 1, 1) \ - F(HasFixedInt32Elements, 1, 1) \ - F(HasFixedInt8Elements, 1, 1) \ - F(HasFixedUint16Elements, 1, 1) \ - F(HasFixedUint32Elements, 1, 1) \ - F(HasFixedUint8ClampedElements, 1, 1) \ - F(HasFixedUint8Elements, 1, 1) \ - F(HasHoleyElements, 1, 1) \ - F(HasObjectElements, 1, 1) \ - F(HasPackedElements, 1, 1) \ - F(HasSloppyArgumentsElements, 1, 1) \ - F(HasSmiElements, 1, 1) \ - F(HasSmiOrObjectElements, 1, 1) \ - F(HaveSameMap, 2, 1) \ - F(HeapObjectVerify, 1, 1) \ - F(ICsAreEnabled, 0, 1) \ - F(InLargeObjectSpace, 1, 1) \ - F(InYoungGeneration, 1, 1) \ - F(IsBeingInterpreted, 0, 1) \ - F(IsConcurrentRecompilationSupported, 0, 1) \ - F(IsDictPropertyConstTrackingEnabled, 0, 1) \ - F(RegexpHasBytecode, 2, 1) \ - F(RegexpHasNativeCode, 2, 1) \ - F(RegexpTypeTag, 1, 1) \ - F(RegexpIsUnmodified, 1, 1) \ - F(MapIteratorProtector, 0, 1) \ - F(ArrayIteratorProtector, 0, 1) \ - F(NeverOptimizeFunction, 1, 1) \ - F(NotifyContextDisposed, 0, 1) \ - F(OptimizeFunctionOnNextCall, -1, 1) \ - F(TierupFunctionOnNextCall, -1, 1) \ - F(OptimizeOsr, -1, 1) \ - F(NewRegExpWithBacktrackLimit, 3, 1) \ - F(PrepareFunctionForOptimization, -1, 1) \ - F(PrintWithNameForAssert, 2, 1) \ - F(RunningInSimulator, 0, 1) \ - F(RuntimeEvaluateREPL, 1, 1) \ - F(SerializeDeserializeNow, 0, 1) \ - F(SetAllocationTimeout, -1 /* 2 || 3 */, 1) \ - F(SetForceSlowPath, 1, 1) \ - F(SetIteratorProtector, 0, 1) \ - F(SimulateNewspaceFull, 0, 1) \ - F(ScheduleGCInStackCheck, 0, 1) \ - F(StringIteratorProtector, 0, 1) \ - F(SystemBreak, 0, 1) \ - F(TraceEnter, 0, 1) \ - F(TraceExit, 1, 1) \ - F(TurbofanStaticAssert, 1, 1) \ - F(TypedArraySpeciesProtector, 0, 1) \ - F(UnblockConcurrentRecompilation, 0, 1) \ - I(DeoptimizeNow, 0, 1) \ - F(PromiseSpeciesProtector, 0, 1) \ - F(IsConcatSpreadableProtector, 0, 1) \ - F(RegExpSpeciesProtector, 0, 1) - -#define FOR_EACH_INTRINSIC_TYPEDARRAY(F, I) \ - F(ArrayBufferDetach, 1, 1) \ - F(TypedArrayCopyElements, 3, 1) \ - F(TypedArrayGetBuffer, 1, 1) \ - F(TypedArraySet, 2, 1) \ +#define FOR_EACH_INTRINSIC_TEST(F, I) \ + F(Abort, 1, 1) \ + F(AbortJS, 1, 1) \ + F(AbortCSAAssert, 1, 1) \ + F(ArraySpeciesProtector, 0, 1) \ + F(BaselineOsr, -1, 1) \ + F(ClearFunctionFeedback, 1, 1) \ + F(ClearMegamorphicStubCache, 0, 1) \ + F(CompleteInobjectSlackTracking, 1, 1) \ + F(ConstructConsString, 2, 1) \ + F(ConstructDouble, 2, 1) \ + F(ConstructSlicedString, 2, 1) \ + F(DebugPrint, 1, 1) \ + F(DebugPrintPtr, 1, 1) \ + F(DebugTrace, 0, 1) \ + F(DebugTrackRetainingPath, -1, 1) \ + F(DeoptimizeFunction, 1, 1) \ + F(DisallowCodegenFromStrings, 1, 1) \ + F(DisassembleFunction, 1, 1) \ + F(DynamicCheckMapsEnabled, 0, 1) \ + F(IsTopTierTurboprop, 0, 1) \ + F(IsMidTierTurboprop, 0, 1) \ + F(EnableCodeLoggingForTesting, 0, 1) \ + F(EnsureFeedbackVectorForFunction, 1, 1) \ + F(GetCallable, 0, 1) \ + F(GetInitializerFunction, 1, 1) \ + F(GetOptimizationStatus, -1, 1) \ + F(GetUndetectable, 0, 1) \ + F(GlobalPrint, 1, 1) \ + F(HasDictionaryElements, 1, 1) \ + F(HasDoubleElements, 1, 1) \ + F(HasElementsInALargeObjectSpace, 1, 1) \ + F(HasFastElements, 1, 1) \ + F(HasFastProperties, 1, 1) \ + F(HasOwnConstDataProperty, 2, 1) \ + F(HasFixedBigInt64Elements, 1, 1) \ + F(HasFixedBigUint64Elements, 1, 1) \ + F(HasFixedFloat32Elements, 1, 1) \ + F(HasFixedFloat64Elements, 1, 1) \ + F(HasFixedInt16Elements, 1, 1) \ + F(HasFixedInt32Elements, 1, 1) \ + F(HasFixedInt8Elements, 1, 1) \ + F(HasFixedUint16Elements, 1, 1) \ + F(HasFixedUint32Elements, 1, 1) \ + F(HasFixedUint8ClampedElements, 1, 1) \ + F(HasFixedUint8Elements, 1, 1) \ + F(HasHoleyElements, 1, 1) \ + F(HasObjectElements, 1, 1) \ + F(HasPackedElements, 1, 1) \ + F(HasSloppyArgumentsElements, 1, 1) \ + F(HasSmiElements, 1, 1) \ + F(HasSmiOrObjectElements, 1, 1) \ + F(HaveSameMap, 2, 1) \ + F(HeapObjectVerify, 1, 1) \ + F(ICsAreEnabled, 0, 1) \ + F(InLargeObjectSpace, 1, 1) \ + F(InYoungGeneration, 1, 1) \ + F(IsBeingInterpreted, 0, 1) \ + F(IsConcurrentRecompilationSupported, 0, 1) \ + F(IsDictPropertyConstTrackingEnabled, 0, 1) \ + F(RegexpHasBytecode, 2, 1) \ + F(RegexpHasNativeCode, 2, 1) \ + F(RegexpTypeTag, 1, 1) \ + F(RegexpIsUnmodified, 1, 1) \ + F(MapIteratorProtector, 0, 1) \ + F(ArrayIteratorProtector, 0, 1) \ + F(NeverOptimizeFunction, 1, 1) \ + F(NotifyContextDisposed, 0, 1) \ + F(OptimizeFunctionOnNextCall, -1, 1) \ + F(TierupFunctionOnNextCall, -1, 1) \ + F(OptimizeOsr, -1, 1) \ + F(NewRegExpWithBacktrackLimit, 3, 1) \ + F(PrepareFunctionForOptimization, -1, 1) \ + F(PretenureAllocationSite, 1, 1) \ + F(PrintWithNameForAssert, 2, 1) \ + F(RunningInSimulator, 0, 1) \ + F(RuntimeEvaluateREPL, 1, 1) \ + F(SerializeDeserializeNow, 0, 1) \ + F(SetAllocationTimeout, -1 /* 2 || 3 */, 1) \ + F(SetForceSlowPath, 1, 1) \ + F(SetIteratorProtector, 0, 1) \ + F(SimulateNewspaceFull, 0, 1) \ + F(ScheduleGCInStackCheck, 0, 1) \ + F(StringIteratorProtector, 0, 1) \ + F(SystemBreak, 0, 1) \ + F(TraceEnter, 0, 1) \ + F(TraceExit, 1, 1) \ + F(TurbofanStaticAssert, 1, 1) \ + F(TypedArraySpeciesProtector, 0, 1) \ + F(UnblockConcurrentRecompilation, 0, 1) \ + I(DeoptimizeNow, 0, 1) \ + F(PromiseSpeciesProtector, 0, 1) \ + F(IsConcatSpreadableProtector, 0, 1) \ + F(RegExpSpeciesProtector, 0, 1) \ + F(Is64Bit, 0, 1) + +#define FOR_EACH_INTRINSIC_TYPEDARRAY(F, I) \ + F(ArrayBufferDetach, 1, 1) \ + F(GrowableSharedArrayBufferByteLength, 1, 1) \ + F(TypedArrayCopyElements, 3, 1) \ + F(TypedArrayGetBuffer, 1, 1) \ + F(TypedArraySet, 2, 1) \ F(TypedArraySortFast, 1, 1) #define FOR_EACH_INTRINSIC_WASM(F, I) \ @@ -784,9 +789,10 @@ class Runtime : public AllStatic { Handle<Object> value, StoreOrigin store_origin, Maybe<ShouldThrow> should_throw = Nothing<ShouldThrow>()); - // When "receiver" is not passed, it defaults to "holder". + // When "receiver" is not passed, it defaults to "lookup_start_object". V8_EXPORT_PRIVATE V8_WARN_UNUSED_RESULT static MaybeHandle<Object> - GetObjectProperty(Isolate* isolate, Handle<Object> holder, Handle<Object> key, + GetObjectProperty(Isolate* isolate, Handle<Object> lookup_start_object, + Handle<Object> key, Handle<Object> receiver = Handle<Object>(), bool* is_found = nullptr); @@ -862,6 +868,8 @@ enum class OptimizationStatus { kLiteMode = 1 << 12, kMarkedForDeoptimization = 1 << 13, kBaseline = 1 << 14, + kTopmostFrameIsInterpreted = 1 << 15, + kTopmostFrameIsBaseline = 1 << 16, }; } // namespace internal diff --git a/deps/v8/src/sanitizer/asan.h b/deps/v8/src/sanitizer/asan.h deleted file mode 100644 index 0381e5a4c4..0000000000 --- a/deps/v8/src/sanitizer/asan.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2018 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// AddressSanitizer support. - -#ifndef V8_SANITIZER_ASAN_H_ -#define V8_SANITIZER_ASAN_H_ - -#include "src/base/macros.h" -#include "src/common/globals.h" - -#ifdef V8_USE_ADDRESS_SANITIZER - -#include <sanitizer/asan_interface.h> - -#else // !V8_USE_ADDRESS_SANITIZER - -#define ASAN_POISON_MEMORY_REGION(start, size) \ - static_assert(std::is_pointer<decltype(start)>::value && \ - std::is_convertible<decltype(size), size_t>::value, \ - "static type violation") -#define ASAN_UNPOISON_MEMORY_REGION(start, size) \ - ASAN_POISON_MEMORY_REGION(start, size) - -#endif // V8_USE_ADDRESS_SANITIZER - -#endif // V8_SANITIZER_ASAN_H_ diff --git a/deps/v8/src/sanitizer/msan.h b/deps/v8/src/sanitizer/msan.h deleted file mode 100644 index 01e774e7e4..0000000000 --- a/deps/v8/src/sanitizer/msan.h +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2013 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// MemorySanitizer support. - -#ifndef V8_SANITIZER_MSAN_H_ -#define V8_SANITIZER_MSAN_H_ - -#include "src/base/macros.h" -#include "src/common/globals.h" - -#ifdef V8_USE_MEMORY_SANITIZER - -#include <sanitizer/msan_interface.h> - -// Marks a memory range as uninitialized, as if it was allocated here. -#define MSAN_ALLOCATED_UNINITIALIZED_MEMORY(p, s) \ - __msan_allocated_memory(reinterpret_cast<const void*>(p), (s)) -// Marks a memory range as initialized. -#define MSAN_MEMORY_IS_INITIALIZED(p, s) \ - __msan_unpoison(reinterpret_cast<const void*>(p), (s)) - -#else // !V8_USE_MEMORY_SANITIZER - -#define MSAN_ALLOCATED_UNINITIALIZED_MEMORY(p, s) \ - static_assert((std::is_pointer<decltype(p)>::value || \ - std::is_same<v8::internal::Address, decltype(p)>::value) && \ - std::is_convertible<decltype(s), size_t>::value, \ - "static type violation") -#define MSAN_MEMORY_IS_INITIALIZED(p, s) \ - MSAN_ALLOCATED_UNINITIALIZED_MEMORY(p, s) - -#endif // V8_USE_MEMORY_SANITIZER - -#endif // V8_SANITIZER_MSAN_H_ diff --git a/deps/v8/src/sanitizer/tsan.h b/deps/v8/src/sanitizer/tsan.h deleted file mode 100644 index 0013b91bfc..0000000000 --- a/deps/v8/src/sanitizer/tsan.h +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2017 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef V8_SANITIZER_TSAN_H_ -#define V8_SANITIZER_TSAN_H_ - -namespace v8 { -namespace base { - -// This file contains annotations for ThreadSanitizer (TSan), a race detector. -// See -// https://llvm.org/svn/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_interface_ann.cc - -#if THREAD_SANITIZER - -#define TSAN_ANNOTATE_IGNORE_READS_BEGIN \ - v8::base::AnnotateIgnoreReadsBegin(__FILE__, __LINE__) -#define TSAN_ANNOTATE_IGNORE_READS_END \ - v8::base::AnnotateIgnoreReadsEnd(__FILE__, __LINE__) -#define TSAN_ANNOTATE_IGNORE_WRITES_BEGIN \ - v8::base::AnnotateIgnoreWritesBegin(__FILE__, __LINE__) -#define TSAN_ANNOTATE_IGNORE_WRITES_END \ - v8::base::AnnotateIgnoreWritesEnd(__FILE__, __LINE__) - -extern "C" { - -void AnnotateIgnoreReadsBegin(const char* file, int line); -void AnnotateIgnoreReadsEnd(const char* file, int line); -void AnnotateIgnoreWritesBegin(const char* file, int line); -void AnnotateIgnoreWritesEnd(const char* file, int line); - -} // extern "C" - -#else - -#define TSAN_ANNOTATE_IGNORE_READS_BEGIN ((void)0) -#define TSAN_ANNOTATE_IGNORE_READS_END ((void)0) -#define TSAN_ANNOTATE_IGNORE_WRITES_BEGIN ((void)0) -#define TSAN_ANNOTATE_IGNORE_WRITES_END ((void)0) - -#endif - -} // namespace base -} // namespace v8 - -#endif // V8_SANITIZER_TSAN_H_ diff --git a/deps/v8/src/snapshot/code-serializer.cc b/deps/v8/src/snapshot/code-serializer.cc index a4641baabf..3725b267f5 100644 --- a/deps/v8/src/snapshot/code-serializer.cc +++ b/deps/v8/src/snapshot/code-serializer.cc @@ -44,8 +44,7 @@ ScriptCompiler::CachedData* CodeSerializer::Serialize( Isolate* isolate = info->GetIsolate(); TRACE_EVENT_CALL_STATS_SCOPED(isolate, "v8", "V8.Execute"); HistogramTimerScope histogram_timer(isolate->counters()->compile_serialize()); - RuntimeCallTimerScope runtimeTimer(isolate, - RuntimeCallCounterId::kCompileSerialize); + RCS_SCOPE(isolate, RuntimeCallCounterId::kCompileSerialize); TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.CompileSerialize"); base::ElapsedTimer timer; diff --git a/deps/v8/src/snapshot/context-deserializer.cc b/deps/v8/src/snapshot/context-deserializer.cc index 04756b5ffe..ad109bacca 100644 --- a/deps/v8/src/snapshot/context-deserializer.cc +++ b/deps/v8/src/snapshot/context-deserializer.cc @@ -62,9 +62,11 @@ void ContextDeserializer::SetupOffHeapArrayBufferBackingStores() { uint32_t store_index = buffer->GetBackingStoreRefForDeserialization(); auto bs = backing_store(store_index); buffer->AllocateExternalPointerEntries(isolate()); + // TODO(v8:11111): Support RAB / GSAB. + CHECK(!buffer->is_resizable()); SharedFlag shared = bs && bs->is_shared() ? SharedFlag::kShared : SharedFlag::kNotShared; - buffer->Setup(shared, bs); + buffer->Setup(shared, ResizableFlag::kNotResizable, bs); } } diff --git a/deps/v8/src/snapshot/deserializer.cc b/deps/v8/src/snapshot/deserializer.cc index ecfa889f1e..7756580c83 100644 --- a/deps/v8/src/snapshot/deserializer.cc +++ b/deps/v8/src/snapshot/deserializer.cc @@ -464,6 +464,9 @@ void Deserializer::PostProcessNewObject(Handle<Map> map, Handle<HeapObject> obj, DCHECK(InstanceTypeChecker::IsStrongDescriptorArray(instance_type)); Handle<DescriptorArray> descriptors = Handle<DescriptorArray>::cast(obj); new_descriptor_arrays_.push_back(descriptors); + } else if (InstanceTypeChecker::IsNativeContext(instance_type)) { + Handle<NativeContext> context = Handle<NativeContext>::cast(obj); + context->AllocateExternalPointerEntries(isolate()); } // Check alignment. diff --git a/deps/v8/src/snapshot/embedded/embedded-data.cc b/deps/v8/src/snapshot/embedded/embedded-data.cc index 2a0549cfbb..fb3883a410 100644 --- a/deps/v8/src/snapshot/embedded/embedded-data.cc +++ b/deps/v8/src/snapshot/embedded/embedded-data.cc @@ -6,6 +6,7 @@ #include "src/codegen/assembler-inl.h" #include "src/codegen/callable.h" +#include "src/codegen/interface-descriptors-inl.h" #include "src/objects/objects-inl.h" #include "src/snapshot/snapshot-utils.h" #include "src/snapshot/snapshot.h" @@ -137,6 +138,9 @@ void InstructionStream::CreateOffHeapInstructionStream(Isolate* isolate, // in the binary) and what we are currently setting up here (where the blob is // on the native heap). std::memcpy(allocated_code_bytes, d.code(), d.code_size()); + if (FLAG_experimental_flush_embedded_blob_icache) { + FlushInstructionCache(allocated_code_bytes, d.code_size()); + } CHECK(SetPermissions(page_allocator, allocated_code_bytes, allocation_code_size, PageAllocator::kReadExecute)); @@ -184,14 +188,15 @@ bool BuiltinAliasesOffHeapTrampolineRegister(Isolate* isolate, Code code) { return false; } + if (CallInterfaceDescriptor::ContextRegister() == + kOffHeapTrampolineRegister) { + return true; + } + Callable callable = Builtins::CallableFor( isolate, static_cast<Builtins::Name>(code.builtin_index())); CallInterfaceDescriptor descriptor = callable.descriptor(); - if (descriptor.ContextRegister() == kOffHeapTrampolineRegister) { - return true; - } - for (int i = 0; i < descriptor.GetRegisterParameterCount(); i++) { Register reg = descriptor.GetRegisterParameter(i); if (reg == kOffHeapTrampolineRegister) return true; @@ -213,7 +218,8 @@ void FinalizeEmbeddedCodeTargets(Isolate* isolate, EmbeddedData* blob) { #if defined(V8_TARGET_ARCH_X64) || defined(V8_TARGET_ARCH_ARM64) || \ defined(V8_TARGET_ARCH_ARM) || defined(V8_TARGET_ARCH_MIPS) || \ - defined(V8_TARGET_ARCH_IA32) || defined(V8_TARGET_ARCH_S390) + defined(V8_TARGET_ARCH_IA32) || defined(V8_TARGET_ARCH_S390) || \ + defined(V8_TARGET_ARCH_RISCV64) // On these platforms we emit relative builtin-to-builtin // jumps for isolate independent builtins in the snapshot. This fixes up the // relative jumps to the right offsets in the snapshot. @@ -453,10 +459,9 @@ void EmbeddedData::PrintStatistics() const { const int k99th = kCount * 0.99; PrintF("EmbeddedData:\n"); - PrintF(" Total size: %d\n", + PrintF(" Total size: %d\n", static_cast<int>(code_size() + data_size())); - PrintF(" Data size: %d\n", - static_cast<int>(data_size())); + PrintF(" Data size: %d\n", static_cast<int>(data_size())); PrintF(" Code size: %d\n", static_cast<int>(code_size())); PrintF(" Instruction size (50th percentile): %d\n", sizes[k50th]); PrintF(" Instruction size (75th percentile): %d\n", sizes[k75th]); diff --git a/deps/v8/src/snapshot/embedded/embedded-data.h b/deps/v8/src/snapshot/embedded/embedded-data.h index 6518c38d02..12f524d154 100644 --- a/deps/v8/src/snapshot/embedded/embedded-data.h +++ b/deps/v8/src/snapshot/embedded/embedded-data.h @@ -9,6 +9,7 @@ #include "src/builtins/builtins.h" #include "src/common/globals.h" #include "src/execution/isolate.h" +#include "src/heap/code-range.h" namespace v8 { namespace internal { @@ -62,6 +63,13 @@ class EmbeddedData final { isolate->embedded_blob_data(), isolate->embedded_blob_data_size()); } + static EmbeddedData FromBlob(CodeRange* code_range) { + return EmbeddedData(code_range->embedded_blob_code_copy(), + Isolate::CurrentEmbeddedBlobCodeSize(), + Isolate::CurrentEmbeddedBlobData(), + Isolate::CurrentEmbeddedBlobDataSize()); + } + const uint8_t* code() const { return code_; } uint32_t code_size() const { return code_size_; } const uint8_t* data() const { return data_; } diff --git a/deps/v8/src/snapshot/mksnapshot.cc b/deps/v8/src/snapshot/mksnapshot.cc index 4cccc8d173..9a1e988bf8 100644 --- a/deps/v8/src/snapshot/mksnapshot.cc +++ b/deps/v8/src/snapshot/mksnapshot.cc @@ -11,10 +11,10 @@ #include "include/libplatform/libplatform.h" #include "src/base/platform/platform.h" #include "src/base/platform/wrappers.h" +#include "src/base/sanitizer/msan.h" #include "src/codegen/assembler-arch.h" #include "src/codegen/source-position-table.h" #include "src/flags/flags.h" -#include "src/sanitizer/msan.h" #include "src/snapshot/context-serializer.h" #include "src/snapshot/embedded/embedded-file-writer.h" #include "src/snapshot/snapshot.h" @@ -155,7 +155,7 @@ v8::StartupData CreateSnapshotDataBlob(v8::Isolate* isolate, isolate); if (i::FLAG_profile_deserialization) { - i::PrintF("Creating snapshot took %0.3f ms\n", + i::PrintF("[Creating snapshot took %0.3f ms]\n", timer.Elapsed().InMillisecondsF()); } diff --git a/deps/v8/src/snapshot/object-deserializer.cc b/deps/v8/src/snapshot/object-deserializer.cc index 929996ee10..d5ce8cc6e9 100644 --- a/deps/v8/src/snapshot/object-deserializer.cc +++ b/deps/v8/src/snapshot/object-deserializer.cc @@ -66,7 +66,9 @@ void ObjectDeserializer::CommitPostProcessedObjects() { auto bs = backing_store(store_index); SharedFlag shared = bs && bs->is_shared() ? SharedFlag::kShared : SharedFlag::kNotShared; - buffer->Setup(shared, bs); + // TODO(v8:11111): Support RAB / GSAB. + CHECK(!bs || !bs->is_resizable()); + buffer->Setup(shared, ResizableFlag::kNotResizable, bs); } for (Handle<Script> script : new_scripts()) { diff --git a/deps/v8/src/snapshot/read-only-serializer.cc b/deps/v8/src/snapshot/read-only-serializer.cc index 06c5094782..3dc5af0b0d 100644 --- a/deps/v8/src/snapshot/read-only-serializer.cc +++ b/deps/v8/src/snapshot/read-only-serializer.cc @@ -74,6 +74,10 @@ void ReadOnlySerializer::SerializeReadOnlyRoots() { isolate()->handle_scope_implementer()->blocks()->empty()); ReadOnlyRoots(isolate()).Iterate(this); + + if (reconstruct_read_only_object_cache_for_testing()) { + ReconstructReadOnlyObjectCacheForTesting(); + } } void ReadOnlySerializer::FinalizeSerialization() { @@ -129,5 +133,18 @@ bool ReadOnlySerializer::SerializeUsingReadOnlyObjectCache( return true; } +void ReadOnlySerializer::ReconstructReadOnlyObjectCacheForTesting() { + ReadOnlyHeap* ro_heap = isolate()->read_only_heap(); + DCHECK(ro_heap->read_only_object_cache_is_initialized()); + for (size_t i = 0, size = ro_heap->read_only_object_cache_size(); i < size; + i++) { + Handle<HeapObject> obj( + HeapObject::cast(ro_heap->cached_read_only_object(i)), isolate()); + int cache_index = SerializeInObjectCache(obj); + USE(cache_index); + DCHECK_EQ(cache_index, i); + } +} + } // namespace internal } // namespace v8 diff --git a/deps/v8/src/snapshot/read-only-serializer.h b/deps/v8/src/snapshot/read-only-serializer.h index fd88b9f7b6..7f9482f3b9 100644 --- a/deps/v8/src/snapshot/read-only-serializer.h +++ b/deps/v8/src/snapshot/read-only-serializer.h @@ -37,6 +37,8 @@ class V8_EXPORT_PRIVATE ReadOnlySerializer : public RootsSerializer { Handle<HeapObject> obj); private: + void ReconstructReadOnlyObjectCacheForTesting(); + void SerializeObjectImpl(Handle<HeapObject> o) override; bool MustBeDeferred(HeapObject object) override; diff --git a/deps/v8/src/snapshot/serializer-deserializer.h b/deps/v8/src/snapshot/serializer-deserializer.h index 0e156f75a0..82f3400106 100644 --- a/deps/v8/src/snapshot/serializer-deserializer.h +++ b/deps/v8/src/snapshot/serializer-deserializer.h @@ -187,14 +187,13 @@ class SerializerDeserializer : public RootVisitor { } static constexpr byte Encode(TValue value) { - CONSTEXPR_DCHECK(IsEncodable(value)); + DCHECK(IsEncodable(value)); return static_cast<byte>(kBytecode + static_cast<int>(value) - kMinValue); } static constexpr TValue Decode(byte bytecode) { - CONSTEXPR_DCHECK(base::IsInRange(bytecode, - Encode(static_cast<TValue>(kMinValue)), - Encode(static_cast<TValue>(kMaxValue)))); + DCHECK(base::IsInRange(bytecode, Encode(static_cast<TValue>(kMinValue)), + Encode(static_cast<TValue>(kMaxValue)))); return static_cast<TValue>(bytecode - kBytecode + kMinValue); } }; @@ -241,7 +240,7 @@ class SerializerDeserializer : public RootVisitor { } static constexpr int Encode(int repeat_count) { - CONSTEXPR_DCHECK(IsEncodable(repeat_count)); + DCHECK(IsEncodable(repeat_count)); return repeat_count - kFirstEncodableVariableRepeatCount; } diff --git a/deps/v8/src/snapshot/serializer.cc b/deps/v8/src/snapshot/serializer.cc index 89c5485d62..7f7551316c 100644 --- a/deps/v8/src/snapshot/serializer.cc +++ b/deps/v8/src/snapshot/serializer.cc @@ -98,9 +98,9 @@ void Serializer::OutputStatistics(const char* name) { } INSTANCE_TYPE_LIST(PRINT_INSTANCE_TYPE) #undef PRINT_INSTANCE_TYPE +#endif // OBJECT_PRINT PrintF("\n"); -#endif // OBJECT_PRINT } void Serializer::SerializeDeferredObjects() { diff --git a/deps/v8/src/snapshot/serializer.h b/deps/v8/src/snapshot/serializer.h index 3743fa02c9..a1b17e4fd5 100644 --- a/deps/v8/src/snapshot/serializer.h +++ b/deps/v8/src/snapshot/serializer.h @@ -298,6 +298,10 @@ class Serializer : public SerializerDeserializer { return (flags_ & Snapshot::kAllowActiveIsolateForTesting) != 0; } + bool reconstruct_read_only_object_cache_for_testing() const { + return (flags_ & Snapshot::kReconstructReadOnlyObjectCacheForTesting) != 0; + } + private: // A circular queue of hot objects. This is added to in the same order as in // Deserializer::HotObjectsList, but this stores the objects as an array of diff --git a/deps/v8/src/snapshot/snapshot-utils.cc b/deps/v8/src/snapshot/snapshot-utils.cc index eb2372372c..df53dfe751 100644 --- a/deps/v8/src/snapshot/snapshot-utils.cc +++ b/deps/v8/src/snapshot/snapshot-utils.cc @@ -4,7 +4,7 @@ #include "src/snapshot/snapshot-utils.h" -#include "src/sanitizer/msan.h" +#include "src/base/sanitizer/msan.h" #include "third_party/zlib/zlib.h" namespace v8 { diff --git a/deps/v8/src/snapshot/snapshot.cc b/deps/v8/src/snapshot/snapshot.cc index b78e6a70d6..3b4db28447 100644 --- a/deps/v8/src/snapshot/snapshot.cc +++ b/deps/v8/src/snapshot/snapshot.cc @@ -144,8 +144,7 @@ bool Snapshot::VersionIsValid(const v8::StartupData* data) { bool Snapshot::Initialize(Isolate* isolate) { if (!isolate->snapshot_available()) return false; - RuntimeCallTimerScope rcs_timer(isolate, - RuntimeCallCounterId::kDeserializeIsolate); + RCS_SCOPE(isolate, RuntimeCallCounterId::kDeserializeIsolate); base::ElapsedTimer timer; if (FLAG_profile_deserialization) timer.Start(); @@ -173,8 +172,7 @@ MaybeHandle<Context> Snapshot::NewContextFromSnapshot( Isolate* isolate, Handle<JSGlobalProxy> global_proxy, size_t context_index, v8::DeserializeEmbedderFieldsCallback embedder_fields_deserializer) { if (!isolate->snapshot_available()) return Handle<Context>(); - RuntimeCallTimerScope rcs_timer(isolate, - RuntimeCallCounterId::kDeserializeContext); + RCS_SCOPE(isolate, RuntimeCallCounterId::kDeserializeContext); base::ElapsedTimer timer; if (FLAG_profile_deserialization) timer.Start(); @@ -288,7 +286,10 @@ void Snapshot::SerializeDeserializeAndVerifyForTesting( Snapshot::SerializerFlags flags( Snapshot::kAllowUnknownExternalReferencesForTesting | - Snapshot::kAllowActiveIsolateForTesting); + Snapshot::kAllowActiveIsolateForTesting | + (ReadOnlyHeap::IsReadOnlySpaceShared() + ? Snapshot::kReconstructReadOnlyObjectCacheForTesting + : 0)); serialized_data = Snapshot::Create(isolate, *default_context, no_gc, flags); auto_delete_serialized_data.reset(serialized_data.data); } @@ -360,7 +361,7 @@ v8::StartupData Snapshot::Create( context_serializer.Serialize(&contexts->at(i), no_gc); can_be_rehashed = can_be_rehashed && context_serializer.can_be_rehashed(); context_snapshots.push_back(new SnapshotData(&context_serializer)); - if (FLAG_profile_deserialization) { + if (FLAG_serialization_statistics) { context_allocation_sizes.push_back( context_serializer.TotalAllocationSize()); } @@ -374,15 +375,19 @@ v8::StartupData Snapshot::Create( read_only_serializer.FinalizeSerialization(); can_be_rehashed = can_be_rehashed && read_only_serializer.can_be_rehashed(); - if (FLAG_profile_deserialization) { + if (FLAG_serialization_statistics) { // These prints should match the regexp in test/memory/Memory.json + DCHECK_NE(read_only_serializer.TotalAllocationSize(), 0); + DCHECK_NE(startup_serializer.TotalAllocationSize(), 0); PrintF("Deserialization will allocate:\n"); PrintF("%10d bytes per isolate\n", read_only_serializer.TotalAllocationSize() + startup_serializer.TotalAllocationSize()); for (int i = 0; i < num_contexts; i++) { + DCHECK_NE(context_allocation_sizes[i], 0); PrintF("%10d bytes per context #%d\n", context_allocation_sizes[i], i); } + PrintF("\n"); } SnapshotData read_only_snapshot(&read_only_serializer); @@ -471,7 +476,7 @@ v8::StartupData SnapshotImpl::CreateSnapshotBlob( CopyBytes(data + payload_offset, reinterpret_cast<const char*>(startup_snapshot->RawData().begin()), payload_length); - if (FLAG_profile_deserialization) { + if (FLAG_serialization_statistics) { PrintF("Snapshot blob consists of:\n%10d bytes for startup\n", payload_length); } @@ -485,7 +490,7 @@ v8::StartupData SnapshotImpl::CreateSnapshotBlob( data + payload_offset, reinterpret_cast<const char*>(read_only_snapshot->RawData().begin()), payload_length); - if (FLAG_profile_deserialization) { + if (FLAG_serialization_statistics) { PrintF("%10d bytes for read-only\n", payload_length); } payload_offset += payload_length; @@ -500,11 +505,12 @@ v8::StartupData SnapshotImpl::CreateSnapshotBlob( data + payload_offset, reinterpret_cast<const char*>(context_snapshot->RawData().begin()), payload_length); - if (FLAG_profile_deserialization) { + if (FLAG_serialization_statistics) { PrintF("%10d bytes for context #%d\n", payload_length, i); } payload_offset += payload_length; } + if (FLAG_serialization_statistics) PrintF("\n"); DCHECK_EQ(total_length, payload_offset); v8::StartupData result = {data, static_cast<int>(total_length)}; diff --git a/deps/v8/src/snapshot/snapshot.h b/deps/v8/src/snapshot/snapshot.h index 0e510f0096..2f16eee6d5 100644 --- a/deps/v8/src/snapshot/snapshot.h +++ b/deps/v8/src/snapshot/snapshot.h @@ -36,6 +36,15 @@ class Snapshot : public AllStatic { // after deserialization. // If unset, we assert that these previously mentioned areas are empty. kAllowActiveIsolateForTesting = 1 << 1, + // If set, the ReadOnlySerializer reconstructs the read-only object cache + // from the existing ReadOnlyHeap's read-only object cache so the same + // mapping is used. This mode is used for testing deserialization of a + // snapshot from a live isolate that's using a shared + // ReadOnlyHeap. Otherwise during deserialization the indices will mismatch, + // causing deserialization crashes when e.g. types mismatch. + // If unset, the read-only object cache is populated as read-only objects + // are serialized. + kReconstructReadOnlyObjectCacheForTesting = 1 << 2, }; using SerializerFlags = base::Flags<SerializerFlag>; V8_EXPORT_PRIVATE static constexpr SerializerFlags kDefaultSerializerFlags = diff --git a/deps/v8/src/strings/unicode.cc b/deps/v8/src/strings/unicode.cc index 21faccd0b4..a74e700ebd 100644 --- a/deps/v8/src/strings/unicode.cc +++ b/deps/v8/src/strings/unicode.cc @@ -238,160 +238,112 @@ bool Uppercase::Is(uchar c) { return static_cast<bool>(u_isupper(c)); } #else static const uint16_t kUppercaseTable0Size = 455; static const int32_t kUppercaseTable0[455] = { - 1073741889, 90, 1073742016, 214, - 1073742040, 222, 256, 258, // NOLINT - 260, 262, 264, 266, - 268, 270, 272, 274, // NOLINT - 276, 278, 280, 282, - 284, 286, 288, 290, // NOLINT - 292, 294, 296, 298, - 300, 302, 304, 306, // NOLINT - 308, 310, 313, 315, - 317, 319, 321, 323, // NOLINT - 325, 327, 330, 332, - 334, 336, 338, 340, // NOLINT - 342, 344, 346, 348, - 350, 352, 354, 356, // NOLINT - 358, 360, 362, 364, - 366, 368, 370, 372, // NOLINT - 374, 1073742200, 377, 379, - 381, 1073742209, 386, 388, // NOLINT - 1073742214, 391, 1073742217, 395, - 1073742222, 401, 1073742227, 404, // NOLINT - 1073742230, 408, 1073742236, 413, - 1073742239, 416, 418, 420, // NOLINT - 1073742246, 423, 425, 428, - 1073742254, 431, 1073742257, 435, // NOLINT - 437, 1073742263, 440, 444, - 452, 455, 458, 461, // NOLINT - 463, 465, 467, 469, - 471, 473, 475, 478, // NOLINT - 480, 482, 484, 486, - 488, 490, 492, 494, // NOLINT - 497, 500, 1073742326, 504, - 506, 508, 510, 512, // NOLINT - 514, 516, 518, 520, - 522, 524, 526, 528, // NOLINT - 530, 532, 534, 536, - 538, 540, 542, 544, // NOLINT - 546, 548, 550, 552, - 554, 556, 558, 560, // NOLINT - 562, 1073742394, 571, 1073742397, - 574, 577, 1073742403, 582, // NOLINT - 584, 586, 588, 590, - 880, 882, 886, 895, // NOLINT - 902, 1073742728, 906, 908, - 1073742734, 911, 1073742737, 929, // NOLINT - 1073742755, 939, 975, 1073742802, - 980, 984, 986, 988, // NOLINT - 990, 992, 994, 996, - 998, 1000, 1002, 1004, // NOLINT - 1006, 1012, 1015, 1073742841, - 1018, 1073742845, 1071, 1120, // NOLINT - 1122, 1124, 1126, 1128, - 1130, 1132, 1134, 1136, // NOLINT - 1138, 1140, 1142, 1144, - 1146, 1148, 1150, 1152, // NOLINT - 1162, 1164, 1166, 1168, - 1170, 1172, 1174, 1176, // NOLINT - 1178, 1180, 1182, 1184, - 1186, 1188, 1190, 1192, // NOLINT - 1194, 1196, 1198, 1200, - 1202, 1204, 1206, 1208, // NOLINT - 1210, 1212, 1214, 1073743040, - 1217, 1219, 1221, 1223, // NOLINT - 1225, 1227, 1229, 1232, - 1234, 1236, 1238, 1240, // NOLINT - 1242, 1244, 1246, 1248, - 1250, 1252, 1254, 1256, // NOLINT - 1258, 1260, 1262, 1264, - 1266, 1268, 1270, 1272, // NOLINT - 1274, 1276, 1278, 1280, - 1282, 1284, 1286, 1288, // NOLINT - 1290, 1292, 1294, 1296, - 1298, 1300, 1302, 1304, // NOLINT - 1306, 1308, 1310, 1312, - 1314, 1316, 1318, 1320, // NOLINT - 1322, 1324, 1326, 1073743153, - 1366, 1073746080, 4293, 4295, // NOLINT - 4301, 7680, 7682, 7684, - 7686, 7688, 7690, 7692, // NOLINT - 7694, 7696, 7698, 7700, - 7702, 7704, 7706, 7708, // NOLINT - 7710, 7712, 7714, 7716, - 7718, 7720, 7722, 7724, // NOLINT - 7726, 7728, 7730, 7732, - 7734, 7736, 7738, 7740, // NOLINT - 7742, 7744, 7746, 7748, - 7750, 7752, 7754, 7756, // NOLINT - 7758, 7760, 7762, 7764, - 7766, 7768, 7770, 7772, // NOLINT - 7774, 7776, 7778, 7780, - 7782, 7784, 7786, 7788, // NOLINT - 7790, 7792, 7794, 7796, - 7798, 7800, 7802, 7804, // NOLINT - 7806, 7808, 7810, 7812, - 7814, 7816, 7818, 7820, // NOLINT - 7822, 7824, 7826, 7828, - 7838, 7840, 7842, 7844, // NOLINT - 7846, 7848, 7850, 7852, - 7854, 7856, 7858, 7860, // NOLINT - 7862, 7864, 7866, 7868, - 7870, 7872, 7874, 7876, // NOLINT - 7878, 7880, 7882, 7884, - 7886, 7888, 7890, 7892, // NOLINT - 7894, 7896, 7898, 7900, - 7902, 7904, 7906, 7908, // NOLINT - 7910, 7912, 7914, 7916, - 7918, 7920, 7922, 7924, // NOLINT - 7926, 7928, 7930, 7932, - 7934, 1073749768, 7951, 1073749784, // NOLINT - 7965, 1073749800, 7983, 1073749816, - 7999, 1073749832, 8013, 8025, // NOLINT - 8027, 8029, 8031, 1073749864, - 8047, 1073749944, 8123, 1073749960, // NOLINT - 8139, 1073749976, 8155, 1073749992, - 8172, 1073750008, 8187}; // NOLINT + 1073741889, 90, 1073742016, 214, 1073742040, 222, + 256, 258, 260, 262, 264, 266, + 268, 270, 272, 274, 276, 278, + 280, 282, 284, 286, 288, 290, + 292, 294, 296, 298, 300, 302, + 304, 306, 308, 310, 313, 315, + 317, 319, 321, 323, 325, 327, + 330, 332, 334, 336, 338, 340, + 342, 344, 346, 348, 350, 352, + 354, 356, 358, 360, 362, 364, + 366, 368, 370, 372, 374, 1073742200, + 377, 379, 381, 1073742209, 386, 388, + 1073742214, 391, 1073742217, 395, 1073742222, 401, + 1073742227, 404, 1073742230, 408, 1073742236, 413, + 1073742239, 416, 418, 420, 1073742246, 423, + 425, 428, 1073742254, 431, 1073742257, 435, + 437, 1073742263, 440, 444, 452, 455, + 458, 461, 463, 465, 467, 469, + 471, 473, 475, 478, 480, 482, + 484, 486, 488, 490, 492, 494, + 497, 500, 1073742326, 504, 506, 508, + 510, 512, 514, 516, 518, 520, + 522, 524, 526, 528, 530, 532, + 534, 536, 538, 540, 542, 544, + 546, 548, 550, 552, 554, 556, + 558, 560, 562, 1073742394, 571, 1073742397, + 574, 577, 1073742403, 582, 584, 586, + 588, 590, 880, 882, 886, 895, + 902, 1073742728, 906, 908, 1073742734, 911, + 1073742737, 929, 1073742755, 939, 975, 1073742802, + 980, 984, 986, 988, 990, 992, + 994, 996, 998, 1000, 1002, 1004, + 1006, 1012, 1015, 1073742841, 1018, 1073742845, + 1071, 1120, 1122, 1124, 1126, 1128, + 1130, 1132, 1134, 1136, 1138, 1140, + 1142, 1144, 1146, 1148, 1150, 1152, + 1162, 1164, 1166, 1168, 1170, 1172, + 1174, 1176, 1178, 1180, 1182, 1184, + 1186, 1188, 1190, 1192, 1194, 1196, + 1198, 1200, 1202, 1204, 1206, 1208, + 1210, 1212, 1214, 1073743040, 1217, 1219, + 1221, 1223, 1225, 1227, 1229, 1232, + 1234, 1236, 1238, 1240, 1242, 1244, + 1246, 1248, 1250, 1252, 1254, 1256, + 1258, 1260, 1262, 1264, 1266, 1268, + 1270, 1272, 1274, 1276, 1278, 1280, + 1282, 1284, 1286, 1288, 1290, 1292, + 1294, 1296, 1298, 1300, 1302, 1304, + 1306, 1308, 1310, 1312, 1314, 1316, + 1318, 1320, 1322, 1324, 1326, 1073743153, + 1366, 1073746080, 4293, 4295, 4301, 7680, + 7682, 7684, 7686, 7688, 7690, 7692, + 7694, 7696, 7698, 7700, 7702, 7704, + 7706, 7708, 7710, 7712, 7714, 7716, + 7718, 7720, 7722, 7724, 7726, 7728, + 7730, 7732, 7734, 7736, 7738, 7740, + 7742, 7744, 7746, 7748, 7750, 7752, + 7754, 7756, 7758, 7760, 7762, 7764, + 7766, 7768, 7770, 7772, 7774, 7776, + 7778, 7780, 7782, 7784, 7786, 7788, + 7790, 7792, 7794, 7796, 7798, 7800, + 7802, 7804, 7806, 7808, 7810, 7812, + 7814, 7816, 7818, 7820, 7822, 7824, + 7826, 7828, 7838, 7840, 7842, 7844, + 7846, 7848, 7850, 7852, 7854, 7856, + 7858, 7860, 7862, 7864, 7866, 7868, + 7870, 7872, 7874, 7876, 7878, 7880, + 7882, 7884, 7886, 7888, 7890, 7892, + 7894, 7896, 7898, 7900, 7902, 7904, + 7906, 7908, 7910, 7912, 7914, 7916, + 7918, 7920, 7922, 7924, 7926, 7928, + 7930, 7932, 7934, 1073749768, 7951, 1073749784, + 7965, 1073749800, 7983, 1073749816, 7999, 1073749832, + 8013, 8025, 8027, 8029, 8031, 1073749864, + 8047, 1073749944, 8123, 1073749960, 8139, 1073749976, + 8155, 1073749992, 8172, 1073750008, 8187}; static const uint16_t kUppercaseTable1Size = 86; static const int32_t kUppercaseTable1[86] = { - 258, 263, 1073742091, 269, 1073742096, 274, - 277, 1073742105, // NOLINT - 285, 292, 294, 296, 1073742122, 301, - 1073742128, 307, // NOLINT - 1073742142, 319, 325, 387, 1073744896, 3118, - 3168, 1073744994, // NOLINT - 3172, 3175, 3177, 3179, 1073745005, 3184, - 3186, 3189, // NOLINT - 1073745022, 3200, 3202, 3204, 3206, 3208, - 3210, 3212, // NOLINT - 3214, 3216, 3218, 3220, 3222, 3224, - 3226, 3228, // NOLINT - 3230, 3232, 3234, 3236, 3238, 3240, - 3242, 3244, // NOLINT - 3246, 3248, 3250, 3252, 3254, 3256, - 3258, 3260, // NOLINT - 3262, 3264, 3266, 3268, 3270, 3272, - 3274, 3276, // NOLINT - 3278, 3280, 3282, 3284, 3286, 3288, - 3290, 3292, // NOLINT - 3294, 3296, 3298, 3307, 3309, 3314}; // NOLINT + 258, 263, 1073742091, 269, 1073742096, 274, 277, + 1073742105, 285, 292, 294, 296, 1073742122, 301, + 1073742128, 307, 1073742142, 319, 325, 387, 1073744896, + 3118, 3168, 1073744994, 3172, 3175, 3177, 3179, + 1073745005, 3184, 3186, 3189, 1073745022, 3200, 3202, + 3204, 3206, 3208, 3210, 3212, 3214, 3216, + 3218, 3220, 3222, 3224, 3226, 3228, 3230, + 3232, 3234, 3236, 3238, 3240, 3242, 3244, + 3246, 3248, 3250, 3252, 3254, 3256, 3258, + 3260, 3262, 3264, 3266, 3268, 3270, 3272, + 3274, 3276, 3278, 3280, 3282, 3284, 3286, + 3288, 3290, 3292, 3294, 3296, 3298, 3307, + 3309, 3314}; static const uint16_t kUppercaseTable5Size = 101; static const int32_t kUppercaseTable5[101] = { - 1600, 1602, 1604, 1606, 1608, 1610, 1612, 1614, // NOLINT - 1616, 1618, 1620, 1622, 1624, 1626, 1628, 1630, // NOLINT - 1632, 1634, 1636, 1638, 1640, 1642, 1644, 1664, // NOLINT - 1666, 1668, 1670, 1672, 1674, 1676, 1678, 1680, // NOLINT - 1682, 1684, 1686, 1688, 1690, 1826, 1828, 1830, // NOLINT - 1832, 1834, 1836, 1838, 1842, 1844, 1846, 1848, // NOLINT - 1850, 1852, 1854, 1856, 1858, 1860, 1862, 1864, // NOLINT - 1866, 1868, 1870, 1872, 1874, 1876, 1878, 1880, // NOLINT - 1882, 1884, 1886, 1888, 1890, 1892, 1894, 1896, // NOLINT - 1898, 1900, 1902, 1913, 1915, 1073743741, 1918, 1920, // NOLINT - 1922, 1924, 1926, 1931, 1933, 1936, 1938, 1942, // NOLINT - 1944, 1946, 1948, 1950, 1952, 1954, 1956, 1958, // NOLINT - 1960, 1073743786, 1965, 1073743792, 1969}; // NOLINT + 1600, 1602, 1604, 1606, 1608, 1610, 1612, 1614, 1616, 1618, + 1620, 1622, 1624, 1626, 1628, 1630, 1632, 1634, 1636, 1638, + 1640, 1642, 1644, 1664, 1666, 1668, 1670, 1672, 1674, 1676, + 1678, 1680, 1682, 1684, 1686, 1688, 1690, 1826, 1828, 1830, + 1832, 1834, 1836, 1838, 1842, 1844, 1846, 1848, 1850, 1852, + 1854, 1856, 1858, 1860, 1862, 1864, 1866, 1868, 1870, 1872, + 1874, 1876, 1878, 1880, 1882, 1884, 1886, 1888, 1890, 1892, + 1894, 1896, 1898, 1900, 1902, 1913, 1915, 1073743741, 1918, 1920, + 1922, 1924, 1926, 1931, 1933, 1936, 1938, 1942, 1944, 1946, + 1948, 1950, 1952, 1954, 1956, 1958, 1960, 1073743786, 1965, 1073743792, + 1969}; static const uint16_t kUppercaseTable7Size = 2; -static const int32_t kUppercaseTable7[2] = {1073749793, 7994}; // NOLINT +static const int32_t kUppercaseTable7[2] = {1073749793, 7994}; bool Uppercase::Is(uchar c) { int chunk_index = c >> 13; switch (chunk_index) { @@ -415,189 +367,133 @@ bool Letter::Is(uchar c) { return static_cast<bool>(u_isalpha(c)); } #else static const uint16_t kLetterTable0Size = 431; static const int32_t kLetterTable0[431] = { - 1073741889, 90, 1073741921, 122, - 170, 181, 186, 1073742016, // NOLINT - 214, 1073742040, 246, 1073742072, - 705, 1073742534, 721, 1073742560, // NOLINT - 740, 748, 750, 1073742704, - 884, 1073742710, 887, 1073742714, // NOLINT - 893, 895, 902, 1073742728, - 906, 908, 1073742734, 929, // NOLINT - 1073742755, 1013, 1073742839, 1153, - 1073742986, 1327, 1073743153, 1366, // NOLINT - 1369, 1073743201, 1415, 1073743312, - 1514, 1073743344, 1522, 1073743392, // NOLINT - 1610, 1073743470, 1647, 1073743473, - 1747, 1749, 1073743589, 1766, // NOLINT - 1073743598, 1775, 1073743610, 1788, - 1791, 1808, 1073743634, 1839, // NOLINT - 1073743693, 1957, 1969, 1073743818, - 2026, 1073743860, 2037, 2042, // NOLINT - 1073743872, 2069, 2074, 2084, - 2088, 1073743936, 2136, 1073744032, // NOLINT - 2226, 1073744132, 2361, 2365, - 2384, 1073744216, 2401, 1073744241, // NOLINT - 2432, 1073744261, 2444, 1073744271, - 2448, 1073744275, 2472, 1073744298, // NOLINT - 2480, 2482, 1073744310, 2489, - 2493, 2510, 1073744348, 2525, // NOLINT - 1073744351, 2529, 1073744368, 2545, - 1073744389, 2570, 1073744399, 2576, // NOLINT - 1073744403, 2600, 1073744426, 2608, - 1073744434, 2611, 1073744437, 2614, // NOLINT - 1073744440, 2617, 1073744473, 2652, - 2654, 1073744498, 2676, 1073744517, // NOLINT - 2701, 1073744527, 2705, 1073744531, - 2728, 1073744554, 2736, 1073744562, // NOLINT - 2739, 1073744565, 2745, 2749, - 2768, 1073744608, 2785, 1073744645, // NOLINT - 2828, 1073744655, 2832, 1073744659, - 2856, 1073744682, 2864, 1073744690, // NOLINT - 2867, 1073744693, 2873, 2877, - 1073744732, 2909, 1073744735, 2913, // NOLINT - 2929, 2947, 1073744773, 2954, - 1073744782, 2960, 1073744786, 2965, // NOLINT - 1073744793, 2970, 2972, 1073744798, - 2975, 1073744803, 2980, 1073744808, // NOLINT - 2986, 1073744814, 3001, 3024, - 1073744901, 3084, 1073744910, 3088, // NOLINT - 1073744914, 3112, 1073744938, 3129, - 3133, 1073744984, 3161, 1073744992, // NOLINT - 3169, 1073745029, 3212, 1073745038, - 3216, 1073745042, 3240, 1073745066, // NOLINT - 3251, 1073745077, 3257, 3261, - 3294, 1073745120, 3297, 1073745137, // NOLINT - 3314, 1073745157, 3340, 1073745166, - 3344, 1073745170, 3386, 3389, // NOLINT - 3406, 1073745248, 3425, 1073745274, - 3455, 1073745285, 3478, 1073745306, // NOLINT - 3505, 1073745331, 3515, 3517, - 1073745344, 3526, 1073745409, 3632, // NOLINT - 1073745458, 3635, 1073745472, 3654, - 1073745537, 3714, 3716, 1073745543, // NOLINT - 3720, 3722, 3725, 1073745556, - 3735, 1073745561, 3743, 1073745569, // NOLINT - 3747, 3749, 3751, 1073745578, - 3755, 1073745581, 3760, 1073745586, // NOLINT - 3763, 3773, 1073745600, 3780, - 3782, 1073745628, 3807, 3840, // NOLINT - 1073745728, 3911, 1073745737, 3948, - 1073745800, 3980, 1073745920, 4138, // NOLINT - 4159, 1073746000, 4181, 1073746010, - 4189, 4193, 1073746021, 4198, // NOLINT - 1073746030, 4208, 1073746037, 4225, - 4238, 1073746080, 4293, 4295, // NOLINT - 4301, 1073746128, 4346, 1073746172, - 4680, 1073746506, 4685, 1073746512, // NOLINT - 4694, 4696, 1073746522, 4701, - 1073746528, 4744, 1073746570, 4749, // NOLINT - 1073746576, 4784, 1073746610, 4789, - 1073746616, 4798, 4800, 1073746626, // NOLINT - 4805, 1073746632, 4822, 1073746648, - 4880, 1073746706, 4885, 1073746712, // NOLINT - 4954, 1073746816, 5007, 1073746848, - 5108, 1073746945, 5740, 1073747567, // NOLINT - 5759, 1073747585, 5786, 1073747616, - 5866, 1073747694, 5880, 1073747712, // NOLINT - 5900, 1073747726, 5905, 1073747744, - 5937, 1073747776, 5969, 1073747808, // NOLINT - 5996, 1073747822, 6000, 1073747840, - 6067, 6103, 6108, 1073748000, // NOLINT - 6263, 1073748096, 6312, 6314, - 1073748144, 6389, 1073748224, 6430, // NOLINT - 1073748304, 6509, 1073748336, 6516, - 1073748352, 6571, 1073748417, 6599, // NOLINT - 1073748480, 6678, 1073748512, 6740, - 6823, 1073748741, 6963, 1073748805, // NOLINT - 6987, 1073748867, 7072, 1073748910, - 7087, 1073748922, 7141, 1073748992, // NOLINT - 7203, 1073749069, 7247, 1073749082, - 7293, 1073749225, 7404, 1073749230, // NOLINT - 7409, 1073749237, 7414, 1073749248, - 7615, 1073749504, 7957, 1073749784, // NOLINT - 7965, 1073749792, 8005, 1073749832, - 8013, 1073749840, 8023, 8025, // NOLINT - 8027, 8029, 1073749855, 8061, - 1073749888, 8116, 1073749942, 8124, // NOLINT - 8126, 1073749954, 8132, 1073749958, - 8140, 1073749968, 8147, 1073749974, // NOLINT - 8155, 1073749984, 8172, 1073750002, - 8180, 1073750006, 8188}; // NOLINT + 1073741889, 90, 1073741921, 122, 170, 181, + 186, 1073742016, 214, 1073742040, 246, 1073742072, + 705, 1073742534, 721, 1073742560, 740, 748, + 750, 1073742704, 884, 1073742710, 887, 1073742714, + 893, 895, 902, 1073742728, 906, 908, + 1073742734, 929, 1073742755, 1013, 1073742839, 1153, + 1073742986, 1327, 1073743153, 1366, 1369, 1073743201, + 1415, 1073743312, 1514, 1073743344, 1522, 1073743392, + 1610, 1073743470, 1647, 1073743473, 1747, 1749, + 1073743589, 1766, 1073743598, 1775, 1073743610, 1788, + 1791, 1808, 1073743634, 1839, 1073743693, 1957, + 1969, 1073743818, 2026, 1073743860, 2037, 2042, + 1073743872, 2069, 2074, 2084, 2088, 1073743936, + 2136, 1073744032, 2226, 1073744132, 2361, 2365, + 2384, 1073744216, 2401, 1073744241, 2432, 1073744261, + 2444, 1073744271, 2448, 1073744275, 2472, 1073744298, + 2480, 2482, 1073744310, 2489, 2493, 2510, + 1073744348, 2525, 1073744351, 2529, 1073744368, 2545, + 1073744389, 2570, 1073744399, 2576, 1073744403, 2600, + 1073744426, 2608, 1073744434, 2611, 1073744437, 2614, + 1073744440, 2617, 1073744473, 2652, 2654, 1073744498, + 2676, 1073744517, 2701, 1073744527, 2705, 1073744531, + 2728, 1073744554, 2736, 1073744562, 2739, 1073744565, + 2745, 2749, 2768, 1073744608, 2785, 1073744645, + 2828, 1073744655, 2832, 1073744659, 2856, 1073744682, + 2864, 1073744690, 2867, 1073744693, 2873, 2877, + 1073744732, 2909, 1073744735, 2913, 2929, 2947, + 1073744773, 2954, 1073744782, 2960, 1073744786, 2965, + 1073744793, 2970, 2972, 1073744798, 2975, 1073744803, + 2980, 1073744808, 2986, 1073744814, 3001, 3024, + 1073744901, 3084, 1073744910, 3088, 1073744914, 3112, + 1073744938, 3129, 3133, 1073744984, 3161, 1073744992, + 3169, 1073745029, 3212, 1073745038, 3216, 1073745042, + 3240, 1073745066, 3251, 1073745077, 3257, 3261, + 3294, 1073745120, 3297, 1073745137, 3314, 1073745157, + 3340, 1073745166, 3344, 1073745170, 3386, 3389, + 3406, 1073745248, 3425, 1073745274, 3455, 1073745285, + 3478, 1073745306, 3505, 1073745331, 3515, 3517, + 1073745344, 3526, 1073745409, 3632, 1073745458, 3635, + 1073745472, 3654, 1073745537, 3714, 3716, 1073745543, + 3720, 3722, 3725, 1073745556, 3735, 1073745561, + 3743, 1073745569, 3747, 3749, 3751, 1073745578, + 3755, 1073745581, 3760, 1073745586, 3763, 3773, + 1073745600, 3780, 3782, 1073745628, 3807, 3840, + 1073745728, 3911, 1073745737, 3948, 1073745800, 3980, + 1073745920, 4138, 4159, 1073746000, 4181, 1073746010, + 4189, 4193, 1073746021, 4198, 1073746030, 4208, + 1073746037, 4225, 4238, 1073746080, 4293, 4295, + 4301, 1073746128, 4346, 1073746172, 4680, 1073746506, + 4685, 1073746512, 4694, 4696, 1073746522, 4701, + 1073746528, 4744, 1073746570, 4749, 1073746576, 4784, + 1073746610, 4789, 1073746616, 4798, 4800, 1073746626, + 4805, 1073746632, 4822, 1073746648, 4880, 1073746706, + 4885, 1073746712, 4954, 1073746816, 5007, 1073746848, + 5108, 1073746945, 5740, 1073747567, 5759, 1073747585, + 5786, 1073747616, 5866, 1073747694, 5880, 1073747712, + 5900, 1073747726, 5905, 1073747744, 5937, 1073747776, + 5969, 1073747808, 5996, 1073747822, 6000, 1073747840, + 6067, 6103, 6108, 1073748000, 6263, 1073748096, + 6312, 6314, 1073748144, 6389, 1073748224, 6430, + 1073748304, 6509, 1073748336, 6516, 1073748352, 6571, + 1073748417, 6599, 1073748480, 6678, 1073748512, 6740, + 6823, 1073748741, 6963, 1073748805, 6987, 1073748867, + 7072, 1073748910, 7087, 1073748922, 7141, 1073748992, + 7203, 1073749069, 7247, 1073749082, 7293, 1073749225, + 7404, 1073749230, 7409, 1073749237, 7414, 1073749248, + 7615, 1073749504, 7957, 1073749784, 7965, 1073749792, + 8005, 1073749832, 8013, 1073749840, 8023, 8025, + 8027, 8029, 1073749855, 8061, 1073749888, 8116, + 1073749942, 8124, 8126, 1073749954, 8132, 1073749958, + 8140, 1073749968, 8147, 1073749974, 8155, 1073749984, + 8172, 1073750002, 8180, 1073750006, 8188}; static const uint16_t kLetterTable1Size = 87; static const int32_t kLetterTable1[87] = { - 113, 127, 1073741968, 156, - 258, 263, 1073742090, 275, // NOLINT - 277, 1073742105, 285, 292, - 294, 296, 1073742122, 301, // NOLINT - 1073742127, 313, 1073742140, 319, - 1073742149, 329, 334, 1073742176, // NOLINT - 392, 1073744896, 3118, 1073744944, - 3166, 1073744992, 3300, 1073745131, // NOLINT - 3310, 1073745138, 3315, 1073745152, - 3365, 3367, 3373, 1073745200, // NOLINT - 3431, 3439, 1073745280, 3478, - 1073745312, 3494, 1073745320, 3502, // NOLINT - 1073745328, 3510, 1073745336, 3518, - 1073745344, 3526, 1073745352, 3534, // NOLINT - 1073745360, 3542, 1073745368, 3550, - 3631, 1073745925, 4103, 1073745953, // NOLINT - 4137, 1073745969, 4149, 1073745976, - 4156, 1073745985, 4246, 1073746077, // NOLINT - 4255, 1073746081, 4346, 1073746172, - 4351, 1073746181, 4397, 1073746225, // NOLINT - 4494, 1073746336, 4538, 1073746416, - 4607, 1073746944, 8191}; // NOLINT + 113, 127, 1073741968, 156, 258, 263, + 1073742090, 275, 277, 1073742105, 285, 292, + 294, 296, 1073742122, 301, 1073742127, 313, + 1073742140, 319, 1073742149, 329, 334, 1073742176, + 392, 1073744896, 3118, 1073744944, 3166, 1073744992, + 3300, 1073745131, 3310, 1073745138, 3315, 1073745152, + 3365, 3367, 3373, 1073745200, 3431, 3439, + 1073745280, 3478, 1073745312, 3494, 1073745320, 3502, + 1073745328, 3510, 1073745336, 3518, 1073745344, 3526, + 1073745352, 3534, 1073745360, 3542, 1073745368, 3550, + 3631, 1073745925, 4103, 1073745953, 4137, 1073745969, + 4149, 1073745976, 4156, 1073745985, 4246, 1073746077, + 4255, 1073746081, 4346, 1073746172, 4351, 1073746181, + 4397, 1073746225, 4494, 1073746336, 4538, 1073746416, + 4607, 1073746944, 8191}; static const uint16_t kLetterTable2Size = 4; -static const int32_t kLetterTable2[4] = {1073741824, 3509, 1073745408, - 8191}; // NOLINT +static const int32_t kLetterTable2[4] = {1073741824, 3509, 1073745408, 8191}; static const uint16_t kLetterTable3Size = 2; -static const int32_t kLetterTable3[2] = {1073741824, 8191}; // NOLINT +static const int32_t kLetterTable3[2] = {1073741824, 8191}; static const uint16_t kLetterTable4Size = 2; -static const int32_t kLetterTable4[2] = {1073741824, 8140}; // NOLINT +static const int32_t kLetterTable4[2] = {1073741824, 8140}; static const uint16_t kLetterTable5Size = 100; static const int32_t kLetterTable5[100] = { - 1073741824, 1164, 1073743056, 1277, - 1073743104, 1548, 1073743376, 1567, // NOLINT - 1073743402, 1579, 1073743424, 1646, - 1073743487, 1693, 1073743520, 1775, // NOLINT - 1073743639, 1823, 1073743650, 1928, - 1073743755, 1934, 1073743760, 1965, // NOLINT - 1073743792, 1969, 1073743863, 2049, - 1073743875, 2053, 1073743879, 2058, // NOLINT - 1073743884, 2082, 1073743936, 2163, - 1073744002, 2227, 1073744114, 2295, // NOLINT - 2299, 1073744138, 2341, 1073744176, - 2374, 1073744224, 2428, 1073744260, // NOLINT - 2482, 2511, 1073744352, 2532, - 1073744358, 2543, 1073744378, 2558, // NOLINT - 1073744384, 2600, 1073744448, 2626, - 1073744452, 2635, 1073744480, 2678, // NOLINT - 2682, 1073744510, 2735, 2737, - 1073744565, 2742, 1073744569, 2749, // NOLINT - 2752, 2754, 1073744603, 2781, - 1073744608, 2794, 1073744626, 2804, // NOLINT - 1073744641, 2822, 1073744649, 2830, - 1073744657, 2838, 1073744672, 2854, // NOLINT - 1073744680, 2862, 1073744688, 2906, - 1073744732, 2911, 1073744740, 2917, // NOLINT - 1073744832, 3042, 1073744896, 8191}; // NOLINT + 1073741824, 1164, 1073743056, 1277, 1073743104, 1548, + 1073743376, 1567, 1073743402, 1579, 1073743424, 1646, + 1073743487, 1693, 1073743520, 1775, 1073743639, 1823, + 1073743650, 1928, 1073743755, 1934, 1073743760, 1965, + 1073743792, 1969, 1073743863, 2049, 1073743875, 2053, + 1073743879, 2058, 1073743884, 2082, 1073743936, 2163, + 1073744002, 2227, 1073744114, 2295, 2299, 1073744138, + 2341, 1073744176, 2374, 1073744224, 2428, 1073744260, + 2482, 2511, 1073744352, 2532, 1073744358, 2543, + 1073744378, 2558, 1073744384, 2600, 1073744448, 2626, + 1073744452, 2635, 1073744480, 2678, 2682, 1073744510, + 2735, 2737, 1073744565, 2742, 1073744569, 2749, + 2752, 2754, 1073744603, 2781, 1073744608, 2794, + 1073744626, 2804, 1073744641, 2822, 1073744649, 2830, + 1073744657, 2838, 1073744672, 2854, 1073744680, 2862, + 1073744688, 2906, 1073744732, 2911, 1073744740, 2917, + 1073744832, 3042, 1073744896, 8191}; static const uint16_t kLetterTable6Size = 6; -static const int32_t kLetterTable6[6] = {1073741824, 6051, 1073747888, 6086, - 1073747915, 6139}; // NOLINT +static const int32_t kLetterTable6[6] = {1073741824, 6051, 1073747888, + 6086, 1073747915, 6139}; static const uint16_t kLetterTable7Size = 48; static const int32_t kLetterTable7[48] = { - 1073748224, 6765, 1073748592, 6873, - 1073748736, 6918, 1073748755, 6935, // NOLINT - 6941, 1073748767, 6952, 1073748778, - 6966, 1073748792, 6972, 6974, // NOLINT - 1073748800, 6977, 1073748803, 6980, - 1073748806, 7089, 1073748947, 7485, // NOLINT - 1073749328, 7567, 1073749394, 7623, - 1073749488, 7675, 1073749616, 7796, // NOLINT - 1073749622, 7932, 1073749793, 7994, - 1073749825, 8026, 1073749862, 8126, // NOLINT - 1073749954, 8135, 1073749962, 8143, - 1073749970, 8151, 1073749978, 8156}; // NOLINT + 1073748224, 6765, 1073748592, 6873, 1073748736, 6918, + 1073748755, 6935, 6941, 1073748767, 6952, 1073748778, + 6966, 1073748792, 6972, 6974, 1073748800, 6977, + 1073748803, 6980, 1073748806, 7089, 1073748947, 7485, + 1073749328, 7567, 1073749394, 7623, 1073749488, 7675, + 1073749616, 7796, 1073749622, 7932, 1073749793, 7994, + 1073749825, 8026, 1073749862, 8126, 1073749954, 8135, + 1073749962, 8143, 1073749970, 8151, 1073749978, 8156}; bool Letter::Is(uchar c) { int chunk_index = c >> 13; switch (chunk_index) { @@ -631,189 +527,133 @@ bool Letter::Is(uchar c) { static const uint16_t kID_StartTable0Size = 434; static const int32_t kID_StartTable0[434] = { - 36, 1073741889, 90, 92, - 95, 1073741921, 122, 170, // NOLINT - 181, 186, 1073742016, 214, - 1073742040, 246, 1073742072, 705, // NOLINT - 1073742534, 721, 1073742560, 740, - 748, 750, 1073742704, 884, // NOLINT - 1073742710, 887, 1073742714, 893, - 895, 902, 1073742728, 906, // NOLINT - 908, 1073742734, 929, 1073742755, - 1013, 1073742839, 1153, 1073742986, // NOLINT - 1327, 1073743153, 1366, 1369, - 1073743201, 1415, 1073743312, 1514, // NOLINT - 1073743344, 1522, 1073743392, 1610, - 1073743470, 1647, 1073743473, 1747, // NOLINT - 1749, 1073743589, 1766, 1073743598, - 1775, 1073743610, 1788, 1791, // NOLINT - 1808, 1073743634, 1839, 1073743693, - 1957, 1969, 1073743818, 2026, // NOLINT - 1073743860, 2037, 2042, 1073743872, - 2069, 2074, 2084, 2088, // NOLINT - 1073743936, 2136, 1073744032, 2226, - 1073744132, 2361, 2365, 2384, // NOLINT - 1073744216, 2401, 1073744241, 2432, - 1073744261, 2444, 1073744271, 2448, // NOLINT - 1073744275, 2472, 1073744298, 2480, - 2482, 1073744310, 2489, 2493, // NOLINT - 2510, 1073744348, 2525, 1073744351, - 2529, 1073744368, 2545, 1073744389, // NOLINT - 2570, 1073744399, 2576, 1073744403, - 2600, 1073744426, 2608, 1073744434, // NOLINT - 2611, 1073744437, 2614, 1073744440, - 2617, 1073744473, 2652, 2654, // NOLINT - 1073744498, 2676, 1073744517, 2701, - 1073744527, 2705, 1073744531, 2728, // NOLINT - 1073744554, 2736, 1073744562, 2739, - 1073744565, 2745, 2749, 2768, // NOLINT - 1073744608, 2785, 1073744645, 2828, - 1073744655, 2832, 1073744659, 2856, // NOLINT - 1073744682, 2864, 1073744690, 2867, - 1073744693, 2873, 2877, 1073744732, // NOLINT - 2909, 1073744735, 2913, 2929, - 2947, 1073744773, 2954, 1073744782, // NOLINT - 2960, 1073744786, 2965, 1073744793, - 2970, 2972, 1073744798, 2975, // NOLINT - 1073744803, 2980, 1073744808, 2986, - 1073744814, 3001, 3024, 1073744901, // NOLINT - 3084, 1073744910, 3088, 1073744914, - 3112, 1073744938, 3129, 3133, // NOLINT - 1073744984, 3161, 1073744992, 3169, - 1073745029, 3212, 1073745038, 3216, // NOLINT - 1073745042, 3240, 1073745066, 3251, - 1073745077, 3257, 3261, 3294, // NOLINT - 1073745120, 3297, 1073745137, 3314, - 1073745157, 3340, 1073745166, 3344, // NOLINT - 1073745170, 3386, 3389, 3406, - 1073745248, 3425, 1073745274, 3455, // NOLINT - 1073745285, 3478, 1073745306, 3505, - 1073745331, 3515, 3517, 1073745344, // NOLINT - 3526, 1073745409, 3632, 1073745458, - 3635, 1073745472, 3654, 1073745537, // NOLINT - 3714, 3716, 1073745543, 3720, - 3722, 3725, 1073745556, 3735, // NOLINT - 1073745561, 3743, 1073745569, 3747, - 3749, 3751, 1073745578, 3755, // NOLINT - 1073745581, 3760, 1073745586, 3763, - 3773, 1073745600, 3780, 3782, // NOLINT - 1073745628, 3807, 3840, 1073745728, - 3911, 1073745737, 3948, 1073745800, // NOLINT - 3980, 1073745920, 4138, 4159, - 1073746000, 4181, 1073746010, 4189, // NOLINT - 4193, 1073746021, 4198, 1073746030, - 4208, 1073746037, 4225, 4238, // NOLINT - 1073746080, 4293, 4295, 4301, - 1073746128, 4346, 1073746172, 4680, // NOLINT - 1073746506, 4685, 1073746512, 4694, - 4696, 1073746522, 4701, 1073746528, // NOLINT - 4744, 1073746570, 4749, 1073746576, - 4784, 1073746610, 4789, 1073746616, // NOLINT - 4798, 4800, 1073746626, 4805, - 1073746632, 4822, 1073746648, 4880, // NOLINT - 1073746706, 4885, 1073746712, 4954, - 1073746816, 5007, 1073746848, 5108, // NOLINT - 1073746945, 5740, 1073747567, 5759, - 1073747585, 5786, 1073747616, 5866, // NOLINT - 1073747694, 5880, 1073747712, 5900, - 1073747726, 5905, 1073747744, 5937, // NOLINT - 1073747776, 5969, 1073747808, 5996, - 1073747822, 6000, 1073747840, 6067, // NOLINT - 6103, 6108, 1073748000, 6263, - 1073748096, 6312, 6314, 1073748144, // NOLINT - 6389, 1073748224, 6430, 1073748304, - 6509, 1073748336, 6516, 1073748352, // NOLINT - 6571, 1073748417, 6599, 1073748480, - 6678, 1073748512, 6740, 6823, // NOLINT - 1073748741, 6963, 1073748805, 6987, - 1073748867, 7072, 1073748910, 7087, // NOLINT - 1073748922, 7141, 1073748992, 7203, - 1073749069, 7247, 1073749082, 7293, // NOLINT - 1073749225, 7404, 1073749230, 7409, - 1073749237, 7414, 1073749248, 7615, // NOLINT - 1073749504, 7957, 1073749784, 7965, - 1073749792, 8005, 1073749832, 8013, // NOLINT - 1073749840, 8023, 8025, 8027, - 8029, 1073749855, 8061, 1073749888, // NOLINT - 8116, 1073749942, 8124, 8126, - 1073749954, 8132, 1073749958, 8140, // NOLINT - 1073749968, 8147, 1073749974, 8155, - 1073749984, 8172, 1073750002, 8180, // NOLINT - 1073750006, 8188}; // NOLINT + 36, 1073741889, 90, 92, 95, 1073741921, + 122, 170, 181, 186, 1073742016, 214, + 1073742040, 246, 1073742072, 705, 1073742534, 721, + 1073742560, 740, 748, 750, 1073742704, 884, + 1073742710, 887, 1073742714, 893, 895, 902, + 1073742728, 906, 908, 1073742734, 929, 1073742755, + 1013, 1073742839, 1153, 1073742986, 1327, 1073743153, + 1366, 1369, 1073743201, 1415, 1073743312, 1514, + 1073743344, 1522, 1073743392, 1610, 1073743470, 1647, + 1073743473, 1747, 1749, 1073743589, 1766, 1073743598, + 1775, 1073743610, 1788, 1791, 1808, 1073743634, + 1839, 1073743693, 1957, 1969, 1073743818, 2026, + 1073743860, 2037, 2042, 1073743872, 2069, 2074, + 2084, 2088, 1073743936, 2136, 1073744032, 2226, + 1073744132, 2361, 2365, 2384, 1073744216, 2401, + 1073744241, 2432, 1073744261, 2444, 1073744271, 2448, + 1073744275, 2472, 1073744298, 2480, 2482, 1073744310, + 2489, 2493, 2510, 1073744348, 2525, 1073744351, + 2529, 1073744368, 2545, 1073744389, 2570, 1073744399, + 2576, 1073744403, 2600, 1073744426, 2608, 1073744434, + 2611, 1073744437, 2614, 1073744440, 2617, 1073744473, + 2652, 2654, 1073744498, 2676, 1073744517, 2701, + 1073744527, 2705, 1073744531, 2728, 1073744554, 2736, + 1073744562, 2739, 1073744565, 2745, 2749, 2768, + 1073744608, 2785, 1073744645, 2828, 1073744655, 2832, + 1073744659, 2856, 1073744682, 2864, 1073744690, 2867, + 1073744693, 2873, 2877, 1073744732, 2909, 1073744735, + 2913, 2929, 2947, 1073744773, 2954, 1073744782, + 2960, 1073744786, 2965, 1073744793, 2970, 2972, + 1073744798, 2975, 1073744803, 2980, 1073744808, 2986, + 1073744814, 3001, 3024, 1073744901, 3084, 1073744910, + 3088, 1073744914, 3112, 1073744938, 3129, 3133, + 1073744984, 3161, 1073744992, 3169, 1073745029, 3212, + 1073745038, 3216, 1073745042, 3240, 1073745066, 3251, + 1073745077, 3257, 3261, 3294, 1073745120, 3297, + 1073745137, 3314, 1073745157, 3340, 1073745166, 3344, + 1073745170, 3386, 3389, 3406, 1073745248, 3425, + 1073745274, 3455, 1073745285, 3478, 1073745306, 3505, + 1073745331, 3515, 3517, 1073745344, 3526, 1073745409, + 3632, 1073745458, 3635, 1073745472, 3654, 1073745537, + 3714, 3716, 1073745543, 3720, 3722, 3725, + 1073745556, 3735, 1073745561, 3743, 1073745569, 3747, + 3749, 3751, 1073745578, 3755, 1073745581, 3760, + 1073745586, 3763, 3773, 1073745600, 3780, 3782, + 1073745628, 3807, 3840, 1073745728, 3911, 1073745737, + 3948, 1073745800, 3980, 1073745920, 4138, 4159, + 1073746000, 4181, 1073746010, 4189, 4193, 1073746021, + 4198, 1073746030, 4208, 1073746037, 4225, 4238, + 1073746080, 4293, 4295, 4301, 1073746128, 4346, + 1073746172, 4680, 1073746506, 4685, 1073746512, 4694, + 4696, 1073746522, 4701, 1073746528, 4744, 1073746570, + 4749, 1073746576, 4784, 1073746610, 4789, 1073746616, + 4798, 4800, 1073746626, 4805, 1073746632, 4822, + 1073746648, 4880, 1073746706, 4885, 1073746712, 4954, + 1073746816, 5007, 1073746848, 5108, 1073746945, 5740, + 1073747567, 5759, 1073747585, 5786, 1073747616, 5866, + 1073747694, 5880, 1073747712, 5900, 1073747726, 5905, + 1073747744, 5937, 1073747776, 5969, 1073747808, 5996, + 1073747822, 6000, 1073747840, 6067, 6103, 6108, + 1073748000, 6263, 1073748096, 6312, 6314, 1073748144, + 6389, 1073748224, 6430, 1073748304, 6509, 1073748336, + 6516, 1073748352, 6571, 1073748417, 6599, 1073748480, + 6678, 1073748512, 6740, 6823, 1073748741, 6963, + 1073748805, 6987, 1073748867, 7072, 1073748910, 7087, + 1073748922, 7141, 1073748992, 7203, 1073749069, 7247, + 1073749082, 7293, 1073749225, 7404, 1073749230, 7409, + 1073749237, 7414, 1073749248, 7615, 1073749504, 7957, + 1073749784, 7965, 1073749792, 8005, 1073749832, 8013, + 1073749840, 8023, 8025, 8027, 8029, 1073749855, + 8061, 1073749888, 8116, 1073749942, 8124, 8126, + 1073749954, 8132, 1073749958, 8140, 1073749968, 8147, + 1073749974, 8155, 1073749984, 8172, 1073750002, 8180, + 1073750006, 8188}; static const uint16_t kID_StartTable1Size = 84; static const int32_t kID_StartTable1[84] = { - 113, 127, 1073741968, 156, - 258, 263, 1073742090, 275, // NOLINT - 277, 1073742104, 285, 292, - 294, 296, 1073742122, 313, // NOLINT - 1073742140, 319, 1073742149, 329, - 334, 1073742176, 392, 1073744896, // NOLINT - 3118, 1073744944, 3166, 1073744992, - 3300, 1073745131, 3310, 1073745138, // NOLINT - 3315, 1073745152, 3365, 3367, - 3373, 1073745200, 3431, 3439, // NOLINT - 1073745280, 3478, 1073745312, 3494, - 1073745320, 3502, 1073745328, 3510, // NOLINT - 1073745336, 3518, 1073745344, 3526, - 1073745352, 3534, 1073745360, 3542, // NOLINT - 1073745368, 3550, 1073745925, 4103, - 1073745953, 4137, 1073745969, 4149, // NOLINT - 1073745976, 4156, 1073745985, 4246, - 1073746075, 4255, 1073746081, 4346, // NOLINT - 1073746172, 4351, 1073746181, 4397, - 1073746225, 4494, 1073746336, 4538, // NOLINT - 1073746416, 4607, 1073746944, 8191}; // NOLINT + 113, 127, 1073741968, 156, 258, 263, + 1073742090, 275, 277, 1073742104, 285, 292, + 294, 296, 1073742122, 313, 1073742140, 319, + 1073742149, 329, 334, 1073742176, 392, 1073744896, + 3118, 1073744944, 3166, 1073744992, 3300, 1073745131, + 3310, 1073745138, 3315, 1073745152, 3365, 3367, + 3373, 1073745200, 3431, 3439, 1073745280, 3478, + 1073745312, 3494, 1073745320, 3502, 1073745328, 3510, + 1073745336, 3518, 1073745344, 3526, 1073745352, 3534, + 1073745360, 3542, 1073745368, 3550, 1073745925, 4103, + 1073745953, 4137, 1073745969, 4149, 1073745976, 4156, + 1073745985, 4246, 1073746075, 4255, 1073746081, 4346, + 1073746172, 4351, 1073746181, 4397, 1073746225, 4494, + 1073746336, 4538, 1073746416, 4607, 1073746944, 8191}; static const uint16_t kID_StartTable2Size = 4; -static const int32_t kID_StartTable2[4] = {1073741824, 3509, 1073745408, - 8191}; // NOLINT +static const int32_t kID_StartTable2[4] = {1073741824, 3509, 1073745408, 8191}; static const uint16_t kID_StartTable3Size = 2; -static const int32_t kID_StartTable3[2] = {1073741824, 8191}; // NOLINT +static const int32_t kID_StartTable3[2] = {1073741824, 8191}; static const uint16_t kID_StartTable4Size = 2; -static const int32_t kID_StartTable4[2] = {1073741824, 8140}; // NOLINT +static const int32_t kID_StartTable4[2] = {1073741824, 8140}; static const uint16_t kID_StartTable5Size = 100; static const int32_t kID_StartTable5[100] = { - 1073741824, 1164, 1073743056, 1277, - 1073743104, 1548, 1073743376, 1567, // NOLINT - 1073743402, 1579, 1073743424, 1646, - 1073743487, 1693, 1073743520, 1775, // NOLINT - 1073743639, 1823, 1073743650, 1928, - 1073743755, 1934, 1073743760, 1965, // NOLINT - 1073743792, 1969, 1073743863, 2049, - 1073743875, 2053, 1073743879, 2058, // NOLINT - 1073743884, 2082, 1073743936, 2163, - 1073744002, 2227, 1073744114, 2295, // NOLINT - 2299, 1073744138, 2341, 1073744176, - 2374, 1073744224, 2428, 1073744260, // NOLINT - 2482, 2511, 1073744352, 2532, - 1073744358, 2543, 1073744378, 2558, // NOLINT - 1073744384, 2600, 1073744448, 2626, - 1073744452, 2635, 1073744480, 2678, // NOLINT - 2682, 1073744510, 2735, 2737, - 1073744565, 2742, 1073744569, 2749, // NOLINT - 2752, 2754, 1073744603, 2781, - 1073744608, 2794, 1073744626, 2804, // NOLINT - 1073744641, 2822, 1073744649, 2830, - 1073744657, 2838, 1073744672, 2854, // NOLINT - 1073744680, 2862, 1073744688, 2906, - 1073744732, 2911, 1073744740, 2917, // NOLINT - 1073744832, 3042, 1073744896, 8191}; // NOLINT + 1073741824, 1164, 1073743056, 1277, 1073743104, 1548, + 1073743376, 1567, 1073743402, 1579, 1073743424, 1646, + 1073743487, 1693, 1073743520, 1775, 1073743639, 1823, + 1073743650, 1928, 1073743755, 1934, 1073743760, 1965, + 1073743792, 1969, 1073743863, 2049, 1073743875, 2053, + 1073743879, 2058, 1073743884, 2082, 1073743936, 2163, + 1073744002, 2227, 1073744114, 2295, 2299, 1073744138, + 2341, 1073744176, 2374, 1073744224, 2428, 1073744260, + 2482, 2511, 1073744352, 2532, 1073744358, 2543, + 1073744378, 2558, 1073744384, 2600, 1073744448, 2626, + 1073744452, 2635, 1073744480, 2678, 2682, 1073744510, + 2735, 2737, 1073744565, 2742, 1073744569, 2749, + 2752, 2754, 1073744603, 2781, 1073744608, 2794, + 1073744626, 2804, 1073744641, 2822, 1073744649, 2830, + 1073744657, 2838, 1073744672, 2854, 1073744680, 2862, + 1073744688, 2906, 1073744732, 2911, 1073744740, 2917, + 1073744832, 3042, 1073744896, 8191}; static const uint16_t kID_StartTable6Size = 6; -static const int32_t kID_StartTable6[6] = {1073741824, 6051, 1073747888, 6086, - 1073747915, 6139}; // NOLINT +static const int32_t kID_StartTable6[6] = {1073741824, 6051, 1073747888, + 6086, 1073747915, 6139}; static const uint16_t kID_StartTable7Size = 48; static const int32_t kID_StartTable7[48] = { - 1073748224, 6765, 1073748592, 6873, - 1073748736, 6918, 1073748755, 6935, // NOLINT - 6941, 1073748767, 6952, 1073748778, - 6966, 1073748792, 6972, 6974, // NOLINT - 1073748800, 6977, 1073748803, 6980, - 1073748806, 7089, 1073748947, 7485, // NOLINT - 1073749328, 7567, 1073749394, 7623, - 1073749488, 7675, 1073749616, 7796, // NOLINT - 1073749622, 7932, 1073749793, 7994, - 1073749825, 8026, 1073749862, 8126, // NOLINT - 1073749954, 8135, 1073749962, 8143, - 1073749970, 8151, 1073749978, 8156}; // NOLINT + 1073748224, 6765, 1073748592, 6873, 1073748736, 6918, + 1073748755, 6935, 6941, 1073748767, 6952, 1073748778, + 6966, 1073748792, 6972, 6974, 1073748800, 6977, + 1073748803, 6980, 1073748806, 7089, 1073748947, 7485, + 1073749328, 7567, 1073749394, 7623, 1073749488, 7675, + 1073749616, 7796, 1073749622, 7932, 1073749793, 7994, + 1073749825, 8026, 1073749862, 8126, 1073749954, 8135, + 1073749962, 8143, 1073749970, 8151, 1073749978, 8156}; bool ID_Start::Is(uchar c) { int chunk_index = c >> 13; switch (chunk_index) { @@ -844,115 +684,82 @@ bool ID_Start::Is(uchar c) { static const uint16_t kID_ContinueTable0Size = 315; static const int32_t kID_ContinueTable0[315] = { - 1073741872, 57, 95, 183, - 1073742592, 879, 903, 1073742979, // NOLINT - 1159, 1073743249, 1469, 1471, - 1073743297, 1474, 1073743300, 1477, // NOLINT - 1479, 1073743376, 1562, 1073743435, - 1641, 1648, 1073743574, 1756, // NOLINT - 1073743583, 1764, 1073743591, 1768, - 1073743594, 1773, 1073743600, 1785, // NOLINT - 1809, 1073743664, 1866, 1073743782, - 1968, 1073743808, 1993, 1073743851, // NOLINT - 2035, 1073743894, 2073, 1073743899, - 2083, 1073743909, 2087, 1073743913, // NOLINT - 2093, 1073743961, 2139, 1073744100, - 2307, 1073744186, 2364, 1073744190, // NOLINT - 2383, 1073744209, 2391, 1073744226, - 2403, 1073744230, 2415, 1073744257, // NOLINT - 2435, 2492, 1073744318, 2500, - 1073744327, 2504, 1073744331, 2509, // NOLINT - 2519, 1073744354, 2531, 1073744358, - 2543, 1073744385, 2563, 2620, // NOLINT - 1073744446, 2626, 1073744455, 2632, - 1073744459, 2637, 2641, 1073744486, // NOLINT - 2673, 2677, 1073744513, 2691, - 2748, 1073744574, 2757, 1073744583, // NOLINT - 2761, 1073744587, 2765, 1073744610, - 2787, 1073744614, 2799, 1073744641, // NOLINT - 2819, 2876, 1073744702, 2884, - 1073744711, 2888, 1073744715, 2893, // NOLINT - 1073744726, 2903, 1073744738, 2915, - 1073744742, 2927, 2946, 1073744830, // NOLINT - 3010, 1073744838, 3016, 1073744842, - 3021, 3031, 1073744870, 3055, // NOLINT - 1073744896, 3075, 1073744958, 3140, - 1073744966, 3144, 1073744970, 3149, // NOLINT - 1073744981, 3158, 1073744994, 3171, - 1073744998, 3183, 1073745025, 3203, // NOLINT - 3260, 1073745086, 3268, 1073745094, - 3272, 1073745098, 3277, 1073745109, // NOLINT - 3286, 1073745122, 3299, 1073745126, - 3311, 1073745153, 3331, 1073745214, // NOLINT - 3396, 1073745222, 3400, 1073745226, - 3405, 3415, 1073745250, 3427, // NOLINT - 1073745254, 3439, 1073745282, 3459, - 3530, 1073745359, 3540, 3542, // NOLINT - 1073745368, 3551, 1073745382, 3567, - 1073745394, 3571, 3633, 1073745460, // NOLINT - 3642, 1073745479, 3662, 1073745488, - 3673, 3761, 1073745588, 3769, // NOLINT - 1073745595, 3772, 1073745608, 3789, - 1073745616, 3801, 1073745688, 3865, // NOLINT - 1073745696, 3881, 3893, 3895, - 3897, 1073745726, 3903, 1073745777, // NOLINT - 3972, 1073745798, 3975, 1073745805, - 3991, 1073745817, 4028, 4038, // NOLINT - 1073745963, 4158, 1073745984, 4169, - 1073746006, 4185, 1073746014, 4192, // NOLINT - 1073746018, 4196, 1073746023, 4205, - 1073746033, 4212, 1073746050, 4237, // NOLINT - 1073746063, 4253, 1073746781, 4959, - 1073746793, 4977, 1073747730, 5908, // NOLINT - 1073747762, 5940, 1073747794, 5971, - 1073747826, 6003, 1073747892, 6099, // NOLINT - 6109, 1073747936, 6121, 1073747979, - 6157, 1073747984, 6169, 6313, // NOLINT - 1073748256, 6443, 1073748272, 6459, - 1073748294, 6479, 1073748400, 6592, // NOLINT - 1073748424, 6601, 1073748432, 6618, - 1073748503, 6683, 1073748565, 6750, // NOLINT - 1073748576, 6780, 1073748607, 6793, - 1073748624, 6809, 1073748656, 6845, // NOLINT - 1073748736, 6916, 1073748788, 6980, - 1073748816, 7001, 1073748843, 7027, // NOLINT - 1073748864, 7042, 1073748897, 7085, - 1073748912, 7097, 1073748966, 7155, // NOLINT - 1073749028, 7223, 1073749056, 7241, - 1073749072, 7257, 1073749200, 7378, // NOLINT - 1073749204, 7400, 7405, 1073749234, - 7412, 1073749240, 7417, 1073749440, // NOLINT - 7669, 1073749500, 7679}; // NOLINT + 1073741872, 57, 95, 183, 1073742592, 879, + 903, 1073742979, 1159, 1073743249, 1469, 1471, + 1073743297, 1474, 1073743300, 1477, 1479, 1073743376, + 1562, 1073743435, 1641, 1648, 1073743574, 1756, + 1073743583, 1764, 1073743591, 1768, 1073743594, 1773, + 1073743600, 1785, 1809, 1073743664, 1866, 1073743782, + 1968, 1073743808, 1993, 1073743851, 2035, 1073743894, + 2073, 1073743899, 2083, 1073743909, 2087, 1073743913, + 2093, 1073743961, 2139, 1073744100, 2307, 1073744186, + 2364, 1073744190, 2383, 1073744209, 2391, 1073744226, + 2403, 1073744230, 2415, 1073744257, 2435, 2492, + 1073744318, 2500, 1073744327, 2504, 1073744331, 2509, + 2519, 1073744354, 2531, 1073744358, 2543, 1073744385, + 2563, 2620, 1073744446, 2626, 1073744455, 2632, + 1073744459, 2637, 2641, 1073744486, 2673, 2677, + 1073744513, 2691, 2748, 1073744574, 2757, 1073744583, + 2761, 1073744587, 2765, 1073744610, 2787, 1073744614, + 2799, 1073744641, 2819, 2876, 1073744702, 2884, + 1073744711, 2888, 1073744715, 2893, 1073744726, 2903, + 1073744738, 2915, 1073744742, 2927, 2946, 1073744830, + 3010, 1073744838, 3016, 1073744842, 3021, 3031, + 1073744870, 3055, 1073744896, 3075, 1073744958, 3140, + 1073744966, 3144, 1073744970, 3149, 1073744981, 3158, + 1073744994, 3171, 1073744998, 3183, 1073745025, 3203, + 3260, 1073745086, 3268, 1073745094, 3272, 1073745098, + 3277, 1073745109, 3286, 1073745122, 3299, 1073745126, + 3311, 1073745153, 3331, 1073745214, 3396, 1073745222, + 3400, 1073745226, 3405, 3415, 1073745250, 3427, + 1073745254, 3439, 1073745282, 3459, 3530, 1073745359, + 3540, 3542, 1073745368, 3551, 1073745382, 3567, + 1073745394, 3571, 3633, 1073745460, 3642, 1073745479, + 3662, 1073745488, 3673, 3761, 1073745588, 3769, + 1073745595, 3772, 1073745608, 3789, 1073745616, 3801, + 1073745688, 3865, 1073745696, 3881, 3893, 3895, + 3897, 1073745726, 3903, 1073745777, 3972, 1073745798, + 3975, 1073745805, 3991, 1073745817, 4028, 4038, + 1073745963, 4158, 1073745984, 4169, 1073746006, 4185, + 1073746014, 4192, 1073746018, 4196, 1073746023, 4205, + 1073746033, 4212, 1073746050, 4237, 1073746063, 4253, + 1073746781, 4959, 1073746793, 4977, 1073747730, 5908, + 1073747762, 5940, 1073747794, 5971, 1073747826, 6003, + 1073747892, 6099, 6109, 1073747936, 6121, 1073747979, + 6157, 1073747984, 6169, 6313, 1073748256, 6443, + 1073748272, 6459, 1073748294, 6479, 1073748400, 6592, + 1073748424, 6601, 1073748432, 6618, 1073748503, 6683, + 1073748565, 6750, 1073748576, 6780, 1073748607, 6793, + 1073748624, 6809, 1073748656, 6845, 1073748736, 6916, + 1073748788, 6980, 1073748816, 7001, 1073748843, 7027, + 1073748864, 7042, 1073748897, 7085, 1073748912, 7097, + 1073748966, 7155, 1073749028, 7223, 1073749056, 7241, + 1073749072, 7257, 1073749200, 7378, 1073749204, 7400, + 7405, 1073749234, 7412, 1073749240, 7417, 1073749440, + 7669, 1073749500, 7679}; static const uint16_t kID_ContinueTable1Size = 19; static const int32_t kID_ContinueTable1[19] = { - 1073741836, 13, 1073741887, 64, - 84, 1073742032, 220, 225, // NOLINT - 1073742053, 240, 1073745135, 3313, - 3455, 1073745376, 3583, 1073745962, // NOLINT - 4143, 1073746073, 4250}; // NOLINT + 1073741836, 13, 1073741887, 64, 84, + 1073742032, 220, 225, 1073742053, 240, + 1073745135, 3313, 3455, 1073745376, 3583, + 1073745962, 4143, 1073746073, 4250}; static const uint16_t kID_ContinueTable5Size = 63; static const int32_t kID_ContinueTable5[63] = { - 1073743392, 1577, 1647, 1073743476, - 1661, 1695, 1073743600, 1777, // NOLINT - 2050, 2054, 2059, 1073743907, - 2087, 1073744000, 2177, 1073744052, // NOLINT - 2244, 1073744080, 2265, 1073744096, - 2289, 1073744128, 2313, 1073744166, // NOLINT - 2349, 1073744199, 2387, 1073744256, - 2435, 1073744307, 2496, 1073744336, // NOLINT - 2521, 2533, 1073744368, 2553, - 1073744425, 2614, 2627, 1073744460, // NOLINT - 2637, 1073744464, 2649, 1073744507, - 2685, 2736, 1073744562, 2740, // NOLINT - 1073744567, 2744, 1073744574, 2751, - 2753, 1073744619, 2799, 1073744629, // NOLINT - 2806, 1073744867, 3050, 1073744876, - 3053, 1073744880, 3065}; // NOLINT + 1073743392, 1577, 1647, 1073743476, 1661, 1695, + 1073743600, 1777, 2050, 2054, 2059, 1073743907, + 2087, 1073744000, 2177, 1073744052, 2244, 1073744080, + 2265, 1073744096, 2289, 1073744128, 2313, 1073744166, + 2349, 1073744199, 2387, 1073744256, 2435, 1073744307, + 2496, 1073744336, 2521, 2533, 1073744368, 2553, + 1073744425, 2614, 2627, 1073744460, 2637, 1073744464, + 2649, 1073744507, 2685, 2736, 1073744562, 2740, + 1073744567, 2744, 1073744574, 2751, 2753, 1073744619, + 2799, 1073744629, 2806, 1073744867, 3050, 1073744876, + 3053, 1073744880, 3065}; static const uint16_t kID_ContinueTable7Size = 12; static const int32_t kID_ContinueTable7[12] = { - 6942, 1073749504, 7695, 1073749536, - 7725, 1073749555, 7732, 1073749581, // NOLINT - 7759, 1073749776, 7961, 7999}; // NOLINT + 6942, 1073749504, 7695, 1073749536, 7725, 1073749555, + 7732, 1073749581, 7759, 1073749776, 7961, 7999}; bool ID_Continue::Is(uchar c) { int chunk_index = c >> 13; switch (chunk_index) { @@ -973,13 +780,11 @@ bool ID_Continue::Is(uchar c) { // point.properties) static const uint16_t kWhiteSpaceTable0Size = 6; -static const int32_t kWhiteSpaceTable0[6] = {9, 1073741835, 12, - 32, 160, 5760}; // NOLINT +static const int32_t kWhiteSpaceTable0[6] = {9, 1073741835, 12, 32, 160, 5760}; static const uint16_t kWhiteSpaceTable1Size = 5; -static const int32_t kWhiteSpaceTable1[5] = {1073741824, 10, 47, 95, - 4096}; // NOLINT +static const int32_t kWhiteSpaceTable1[5] = {1073741824, 10, 47, 95, 4096}; static const uint16_t kWhiteSpaceTable7Size = 1; -static const int32_t kWhiteSpaceTable7[1] = {7935}; // NOLINT +static const int32_t kWhiteSpaceTable7[1] = {7935}; bool WhiteSpace::Is(uchar c) { int chunk_index = c >> 13; switch (chunk_index) { @@ -996,270 +801,189 @@ bool WhiteSpace::Is(uchar c) { #endif // !V8_INTL_SUPPORT #ifndef V8_INTL_SUPPORT -static const MultiCharacterSpecialCase<2> kToLowercaseMultiStrings0[2] = - { // NOLINT - {{105, 775}}, - {{kSentinel}}}; // NOLINT -static const uint16_t kToLowercaseTable0Size = 488; // NOLINT +static const MultiCharacterSpecialCase<2> kToLowercaseMultiStrings0[2] = { + {{105, 775}}, {{kSentinel}}}; +static const uint16_t kToLowercaseTable0Size = 488; static const int32_t kToLowercaseTable0[976] = { - 1073741889, 128, 90, 128, 1073742016, 128, - 214, 128, 1073742040, 128, 222, 128, - 256, 4, 258, 4, // NOLINT - 260, 4, 262, 4, 264, 4, - 266, 4, 268, 4, 270, 4, - 272, 4, 274, 4, // NOLINT - 276, 4, 278, 4, 280, 4, - 282, 4, 284, 4, 286, 4, - 288, 4, 290, 4, // NOLINT - 292, 4, 294, 4, 296, 4, - 298, 4, 300, 4, 302, 4, - 304, 1, 306, 4, // NOLINT - 308, 4, 310, 4, 313, 4, - 315, 4, 317, 4, 319, 4, - 321, 4, 323, 4, // NOLINT - 325, 4, 327, 4, 330, 4, - 332, 4, 334, 4, 336, 4, - 338, 4, 340, 4, // NOLINT - 342, 4, 344, 4, 346, 4, - 348, 4, 350, 4, 352, 4, - 354, 4, 356, 4, // NOLINT - 358, 4, 360, 4, 362, 4, - 364, 4, 366, 4, 368, 4, - 370, 4, 372, 4, // NOLINT - 374, 4, 376, -484, 377, 4, - 379, 4, 381, 4, 385, 840, - 386, 4, 388, 4, // NOLINT - 390, 824, 391, 4, 1073742217, 820, - 394, 820, 395, 4, 398, 316, - 399, 808, 400, 812, // NOLINT - 401, 4, 403, 820, 404, 828, - 406, 844, 407, 836, 408, 4, - 412, 844, 413, 852, // NOLINT - 415, 856, 416, 4, 418, 4, - 420, 4, 422, 872, 423, 4, - 425, 872, 428, 4, // NOLINT - 430, 872, 431, 4, 1073742257, 868, - 434, 868, 435, 4, 437, 4, - 439, 876, 440, 4, // NOLINT - 444, 4, 452, 8, 453, 4, - 455, 8, 456, 4, 458, 8, - 459, 4, 461, 4, // NOLINT - 463, 4, 465, 4, 467, 4, - 469, 4, 471, 4, 473, 4, - 475, 4, 478, 4, // NOLINT - 480, 4, 482, 4, 484, 4, - 486, 4, 488, 4, 490, 4, - 492, 4, 494, 4, // NOLINT - 497, 8, 498, 4, 500, 4, - 502, -388, 503, -224, 504, 4, - 506, 4, 508, 4, // NOLINT - 510, 4, 512, 4, 514, 4, - 516, 4, 518, 4, 520, 4, - 522, 4, 524, 4, // NOLINT - 526, 4, 528, 4, 530, 4, - 532, 4, 534, 4, 536, 4, - 538, 4, 540, 4, // NOLINT - 542, 4, 544, -520, 546, 4, - 548, 4, 550, 4, 552, 4, - 554, 4, 556, 4, // NOLINT - 558, 4, 560, 4, 562, 4, - 570, 43180, 571, 4, 573, -652, - 574, 43168, 577, 4, // NOLINT - 579, -780, 580, 276, 581, 284, - 582, 4, 584, 4, 586, 4, - 588, 4, 590, 4, // NOLINT - 880, 4, 882, 4, 886, 4, - 895, 464, 902, 152, 1073742728, 148, - 906, 148, 908, 256, // NOLINT - 1073742734, 252, 911, 252, 1073742737, 128, - 929, 128, 931, 6, 1073742756, 128, - 939, 128, 975, 32, // NOLINT - 984, 4, 986, 4, 988, 4, - 990, 4, 992, 4, 994, 4, - 996, 4, 998, 4, // NOLINT - 1000, 4, 1002, 4, 1004, 4, - 1006, 4, 1012, -240, 1015, 4, - 1017, -28, 1018, 4, // NOLINT - 1073742845, -520, 1023, -520, 1073742848, 320, - 1039, 320, 1073742864, 128, 1071, 128, - 1120, 4, 1122, 4, // NOLINT - 1124, 4, 1126, 4, 1128, 4, - 1130, 4, 1132, 4, 1134, 4, - 1136, 4, 1138, 4, // NOLINT - 1140, 4, 1142, 4, 1144, 4, - 1146, 4, 1148, 4, 1150, 4, - 1152, 4, 1162, 4, // NOLINT - 1164, 4, 1166, 4, 1168, 4, - 1170, 4, 1172, 4, 1174, 4, - 1176, 4, 1178, 4, // NOLINT - 1180, 4, 1182, 4, 1184, 4, - 1186, 4, 1188, 4, 1190, 4, - 1192, 4, 1194, 4, // NOLINT - 1196, 4, 1198, 4, 1200, 4, - 1202, 4, 1204, 4, 1206, 4, - 1208, 4, 1210, 4, // NOLINT - 1212, 4, 1214, 4, 1216, 60, - 1217, 4, 1219, 4, 1221, 4, - 1223, 4, 1225, 4, // NOLINT - 1227, 4, 1229, 4, 1232, 4, - 1234, 4, 1236, 4, 1238, 4, - 1240, 4, 1242, 4, // NOLINT - 1244, 4, 1246, 4, 1248, 4, - 1250, 4, 1252, 4, 1254, 4, - 1256, 4, 1258, 4, // NOLINT - 1260, 4, 1262, 4, 1264, 4, - 1266, 4, 1268, 4, 1270, 4, - 1272, 4, 1274, 4, // NOLINT - 1276, 4, 1278, 4, 1280, 4, - 1282, 4, 1284, 4, 1286, 4, - 1288, 4, 1290, 4, // NOLINT - 1292, 4, 1294, 4, 1296, 4, - 1298, 4, 1300, 4, 1302, 4, - 1304, 4, 1306, 4, // NOLINT - 1308, 4, 1310, 4, 1312, 4, - 1314, 4, 1316, 4, 1318, 4, - 1320, 4, 1322, 4, // NOLINT - 1324, 4, 1326, 4, 1073743153, 192, - 1366, 192, 1073746080, 29056, 4293, 29056, - 4295, 29056, 4301, 29056, // NOLINT - 7680, 4, 7682, 4, 7684, 4, - 7686, 4, 7688, 4, 7690, 4, - 7692, 4, 7694, 4, // NOLINT - 7696, 4, 7698, 4, 7700, 4, - 7702, 4, 7704, 4, 7706, 4, - 7708, 4, 7710, 4, // NOLINT - 7712, 4, 7714, 4, 7716, 4, - 7718, 4, 7720, 4, 7722, 4, - 7724, 4, 7726, 4, // NOLINT - 7728, 4, 7730, 4, 7732, 4, - 7734, 4, 7736, 4, 7738, 4, - 7740, 4, 7742, 4, // NOLINT - 7744, 4, 7746, 4, 7748, 4, - 7750, 4, 7752, 4, 7754, 4, - 7756, 4, 7758, 4, // NOLINT - 7760, 4, 7762, 4, 7764, 4, - 7766, 4, 7768, 4, 7770, 4, - 7772, 4, 7774, 4, // NOLINT - 7776, 4, 7778, 4, 7780, 4, - 7782, 4, 7784, 4, 7786, 4, - 7788, 4, 7790, 4, // NOLINT - 7792, 4, 7794, 4, 7796, 4, - 7798, 4, 7800, 4, 7802, 4, - 7804, 4, 7806, 4, // NOLINT - 7808, 4, 7810, 4, 7812, 4, - 7814, 4, 7816, 4, 7818, 4, - 7820, 4, 7822, 4, // NOLINT - 7824, 4, 7826, 4, 7828, 4, - 7838, -30460, 7840, 4, 7842, 4, - 7844, 4, 7846, 4, // NOLINT - 7848, 4, 7850, 4, 7852, 4, - 7854, 4, 7856, 4, 7858, 4, - 7860, 4, 7862, 4, // NOLINT - 7864, 4, 7866, 4, 7868, 4, - 7870, 4, 7872, 4, 7874, 4, - 7876, 4, 7878, 4, // NOLINT - 7880, 4, 7882, 4, 7884, 4, - 7886, 4, 7888, 4, 7890, 4, - 7892, 4, 7894, 4, // NOLINT - 7896, 4, 7898, 4, 7900, 4, - 7902, 4, 7904, 4, 7906, 4, - 7908, 4, 7910, 4, // NOLINT - 7912, 4, 7914, 4, 7916, 4, - 7918, 4, 7920, 4, 7922, 4, - 7924, 4, 7926, 4, // NOLINT - 7928, 4, 7930, 4, 7932, 4, - 7934, 4, 1073749768, -32, 7951, -32, - 1073749784, -32, 7965, -32, // NOLINT - 1073749800, -32, 7983, -32, 1073749816, -32, - 7999, -32, 1073749832, -32, 8013, -32, - 8025, -32, 8027, -32, // NOLINT - 8029, -32, 8031, -32, 1073749864, -32, - 8047, -32, 1073749896, -32, 8079, -32, - 1073749912, -32, 8095, -32, // NOLINT - 1073749928, -32, 8111, -32, 1073749944, -32, - 8121, -32, 1073749946, -296, 8123, -296, - 8124, -36, 1073749960, -344, // NOLINT - 8139, -344, 8140, -36, 1073749976, -32, - 8153, -32, 1073749978, -400, 8155, -400, - 1073749992, -32, 8169, -32, // NOLINT - 1073749994, -448, 8171, -448, 8172, -28, - 1073750008, -512, 8185, -512, 1073750010, -504, - 8187, -504, 8188, -36}; // NOLINT -static const uint16_t kToLowercaseMultiStrings0Size = 2; // NOLINT -static const MultiCharacterSpecialCase<1> kToLowercaseMultiStrings1[1] = - { // NOLINT - {{kSentinel}}}; // NOLINT -static const uint16_t kToLowercaseTable1Size = 79; // NOLINT + 1073741889, 128, 90, 128, 1073742016, 128, 214, 128, + 1073742040, 128, 222, 128, 256, 4, 258, 4, + 260, 4, 262, 4, 264, 4, 266, 4, + 268, 4, 270, 4, 272, 4, 274, 4, + 276, 4, 278, 4, 280, 4, 282, 4, + 284, 4, 286, 4, 288, 4, 290, 4, + 292, 4, 294, 4, 296, 4, 298, 4, + 300, 4, 302, 4, 304, 1, 306, 4, + 308, 4, 310, 4, 313, 4, 315, 4, + 317, 4, 319, 4, 321, 4, 323, 4, + 325, 4, 327, 4, 330, 4, 332, 4, + 334, 4, 336, 4, 338, 4, 340, 4, + 342, 4, 344, 4, 346, 4, 348, 4, + 350, 4, 352, 4, 354, 4, 356, 4, + 358, 4, 360, 4, 362, 4, 364, 4, + 366, 4, 368, 4, 370, 4, 372, 4, + 374, 4, 376, -484, 377, 4, 379, 4, + 381, 4, 385, 840, 386, 4, 388, 4, + 390, 824, 391, 4, 1073742217, 820, 394, 820, + 395, 4, 398, 316, 399, 808, 400, 812, + 401, 4, 403, 820, 404, 828, 406, 844, + 407, 836, 408, 4, 412, 844, 413, 852, + 415, 856, 416, 4, 418, 4, 420, 4, + 422, 872, 423, 4, 425, 872, 428, 4, + 430, 872, 431, 4, 1073742257, 868, 434, 868, + 435, 4, 437, 4, 439, 876, 440, 4, + 444, 4, 452, 8, 453, 4, 455, 8, + 456, 4, 458, 8, 459, 4, 461, 4, + 463, 4, 465, 4, 467, 4, 469, 4, + 471, 4, 473, 4, 475, 4, 478, 4, + 480, 4, 482, 4, 484, 4, 486, 4, + 488, 4, 490, 4, 492, 4, 494, 4, + 497, 8, 498, 4, 500, 4, 502, -388, + 503, -224, 504, 4, 506, 4, 508, 4, + 510, 4, 512, 4, 514, 4, 516, 4, + 518, 4, 520, 4, 522, 4, 524, 4, + 526, 4, 528, 4, 530, 4, 532, 4, + 534, 4, 536, 4, 538, 4, 540, 4, + 542, 4, 544, -520, 546, 4, 548, 4, + 550, 4, 552, 4, 554, 4, 556, 4, + 558, 4, 560, 4, 562, 4, 570, 43180, + 571, 4, 573, -652, 574, 43168, 577, 4, + 579, -780, 580, 276, 581, 284, 582, 4, + 584, 4, 586, 4, 588, 4, 590, 4, + 880, 4, 882, 4, 886, 4, 895, 464, + 902, 152, 1073742728, 148, 906, 148, 908, 256, + 1073742734, 252, 911, 252, 1073742737, 128, 929, 128, + 931, 6, 1073742756, 128, 939, 128, 975, 32, + 984, 4, 986, 4, 988, 4, 990, 4, + 992, 4, 994, 4, 996, 4, 998, 4, + 1000, 4, 1002, 4, 1004, 4, 1006, 4, + 1012, -240, 1015, 4, 1017, -28, 1018, 4, + 1073742845, -520, 1023, -520, 1073742848, 320, 1039, 320, + 1073742864, 128, 1071, 128, 1120, 4, 1122, 4, + 1124, 4, 1126, 4, 1128, 4, 1130, 4, + 1132, 4, 1134, 4, 1136, 4, 1138, 4, + 1140, 4, 1142, 4, 1144, 4, 1146, 4, + 1148, 4, 1150, 4, 1152, 4, 1162, 4, + 1164, 4, 1166, 4, 1168, 4, 1170, 4, + 1172, 4, 1174, 4, 1176, 4, 1178, 4, + 1180, 4, 1182, 4, 1184, 4, 1186, 4, + 1188, 4, 1190, 4, 1192, 4, 1194, 4, + 1196, 4, 1198, 4, 1200, 4, 1202, 4, + 1204, 4, 1206, 4, 1208, 4, 1210, 4, + 1212, 4, 1214, 4, 1216, 60, 1217, 4, + 1219, 4, 1221, 4, 1223, 4, 1225, 4, + 1227, 4, 1229, 4, 1232, 4, 1234, 4, + 1236, 4, 1238, 4, 1240, 4, 1242, 4, + 1244, 4, 1246, 4, 1248, 4, 1250, 4, + 1252, 4, 1254, 4, 1256, 4, 1258, 4, + 1260, 4, 1262, 4, 1264, 4, 1266, 4, + 1268, 4, 1270, 4, 1272, 4, 1274, 4, + 1276, 4, 1278, 4, 1280, 4, 1282, 4, + 1284, 4, 1286, 4, 1288, 4, 1290, 4, + 1292, 4, 1294, 4, 1296, 4, 1298, 4, + 1300, 4, 1302, 4, 1304, 4, 1306, 4, + 1308, 4, 1310, 4, 1312, 4, 1314, 4, + 1316, 4, 1318, 4, 1320, 4, 1322, 4, + 1324, 4, 1326, 4, 1073743153, 192, 1366, 192, + 1073746080, 29056, 4293, 29056, 4295, 29056, 4301, 29056, + 7680, 4, 7682, 4, 7684, 4, 7686, 4, + 7688, 4, 7690, 4, 7692, 4, 7694, 4, + 7696, 4, 7698, 4, 7700, 4, 7702, 4, + 7704, 4, 7706, 4, 7708, 4, 7710, 4, + 7712, 4, 7714, 4, 7716, 4, 7718, 4, + 7720, 4, 7722, 4, 7724, 4, 7726, 4, + 7728, 4, 7730, 4, 7732, 4, 7734, 4, + 7736, 4, 7738, 4, 7740, 4, 7742, 4, + 7744, 4, 7746, 4, 7748, 4, 7750, 4, + 7752, 4, 7754, 4, 7756, 4, 7758, 4, + 7760, 4, 7762, 4, 7764, 4, 7766, 4, + 7768, 4, 7770, 4, 7772, 4, 7774, 4, + 7776, 4, 7778, 4, 7780, 4, 7782, 4, + 7784, 4, 7786, 4, 7788, 4, 7790, 4, + 7792, 4, 7794, 4, 7796, 4, 7798, 4, + 7800, 4, 7802, 4, 7804, 4, 7806, 4, + 7808, 4, 7810, 4, 7812, 4, 7814, 4, + 7816, 4, 7818, 4, 7820, 4, 7822, 4, + 7824, 4, 7826, 4, 7828, 4, 7838, -30460, + 7840, 4, 7842, 4, 7844, 4, 7846, 4, + 7848, 4, 7850, 4, 7852, 4, 7854, 4, + 7856, 4, 7858, 4, 7860, 4, 7862, 4, + 7864, 4, 7866, 4, 7868, 4, 7870, 4, + 7872, 4, 7874, 4, 7876, 4, 7878, 4, + 7880, 4, 7882, 4, 7884, 4, 7886, 4, + 7888, 4, 7890, 4, 7892, 4, 7894, 4, + 7896, 4, 7898, 4, 7900, 4, 7902, 4, + 7904, 4, 7906, 4, 7908, 4, 7910, 4, + 7912, 4, 7914, 4, 7916, 4, 7918, 4, + 7920, 4, 7922, 4, 7924, 4, 7926, 4, + 7928, 4, 7930, 4, 7932, 4, 7934, 4, + 1073749768, -32, 7951, -32, 1073749784, -32, 7965, -32, + 1073749800, -32, 7983, -32, 1073749816, -32, 7999, -32, + 1073749832, -32, 8013, -32, 8025, -32, 8027, -32, + 8029, -32, 8031, -32, 1073749864, -32, 8047, -32, + 1073749896, -32, 8079, -32, 1073749912, -32, 8095, -32, + 1073749928, -32, 8111, -32, 1073749944, -32, 8121, -32, + 1073749946, -296, 8123, -296, 8124, -36, 1073749960, -344, + 8139, -344, 8140, -36, 1073749976, -32, 8153, -32, + 1073749978, -400, 8155, -400, 1073749992, -32, 8169, -32, + 1073749994, -448, 8171, -448, 8172, -28, 1073750008, -512, + 8185, -512, 1073750010, -504, 8187, -504, 8188, -36}; +static const uint16_t kToLowercaseMultiStrings0Size = 2; +static const MultiCharacterSpecialCase<1> kToLowercaseMultiStrings1[1] = { + {{kSentinel}}}; +static const uint16_t kToLowercaseTable1Size = 79; static const int32_t kToLowercaseTable1[158] = { - 294, -30068, 298, -33532, 299, -33048, 306, - 112, 1073742176, 64, 367, 64, 387, 4, - 1073743030, 104, // NOLINT - 1231, 104, 1073744896, 192, 3118, 192, 3168, - 4, 3170, -42972, 3171, -15256, 3172, -42908, - 3175, 4, // NOLINT - 3177, 4, 3179, 4, 3181, -43120, 3182, - -42996, 3183, -43132, 3184, -43128, 3186, 4, - 3189, 4, // NOLINT - 1073745022, -43260, 3199, -43260, 3200, 4, 3202, - 4, 3204, 4, 3206, 4, 3208, 4, - 3210, 4, // NOLINT - 3212, 4, 3214, 4, 3216, 4, 3218, - 4, 3220, 4, 3222, 4, 3224, 4, - 3226, 4, // NOLINT - 3228, 4, 3230, 4, 3232, 4, 3234, - 4, 3236, 4, 3238, 4, 3240, 4, - 3242, 4, // NOLINT - 3244, 4, 3246, 4, 3248, 4, 3250, - 4, 3252, 4, 3254, 4, 3256, 4, - 3258, 4, // NOLINT - 3260, 4, 3262, 4, 3264, 4, 3266, - 4, 3268, 4, 3270, 4, 3272, 4, - 3274, 4, // NOLINT - 3276, 4, 3278, 4, 3280, 4, 3282, - 4, 3284, 4, 3286, 4, 3288, 4, - 3290, 4, // NOLINT - 3292, 4, 3294, 4, 3296, 4, 3298, - 4, 3307, 4, 3309, 4, 3314, 4}; // NOLINT -static const uint16_t kToLowercaseMultiStrings1Size = 1; // NOLINT -static const MultiCharacterSpecialCase<1> kToLowercaseMultiStrings5[1] = - { // NOLINT - {{kSentinel}}}; // NOLINT -static const uint16_t kToLowercaseTable5Size = 103; // NOLINT + 294, -30068, 298, -33532, 299, -33048, 306, 112, + 1073742176, 64, 367, 64, 387, 4, 1073743030, 104, + 1231, 104, 1073744896, 192, 3118, 192, 3168, 4, + 3170, -42972, 3171, -15256, 3172, -42908, 3175, 4, + 3177, 4, 3179, 4, 3181, -43120, 3182, -42996, + 3183, -43132, 3184, -43128, 3186, 4, 3189, 4, + 1073745022, -43260, 3199, -43260, 3200, 4, 3202, 4, + 3204, 4, 3206, 4, 3208, 4, 3210, 4, + 3212, 4, 3214, 4, 3216, 4, 3218, 4, + 3220, 4, 3222, 4, 3224, 4, 3226, 4, + 3228, 4, 3230, 4, 3232, 4, 3234, 4, + 3236, 4, 3238, 4, 3240, 4, 3242, 4, + 3244, 4, 3246, 4, 3248, 4, 3250, 4, + 3252, 4, 3254, 4, 3256, 4, 3258, 4, + 3260, 4, 3262, 4, 3264, 4, 3266, 4, + 3268, 4, 3270, 4, 3272, 4, 3274, 4, + 3276, 4, 3278, 4, 3280, 4, 3282, 4, + 3284, 4, 3286, 4, 3288, 4, 3290, 4, + 3292, 4, 3294, 4, 3296, 4, 3298, 4, + 3307, 4, 3309, 4, 3314, 4}; +static const uint16_t kToLowercaseMultiStrings1Size = 1; +static const MultiCharacterSpecialCase<1> kToLowercaseMultiStrings5[1] = { + {{kSentinel}}}; +static const uint16_t kToLowercaseTable5Size = 103; static const int32_t kToLowercaseTable5[206] = { - 1600, 4, 1602, 4, 1604, 4, 1606, 4, - 1608, 4, 1610, 4, 1612, 4, 1614, 4, // NOLINT - 1616, 4, 1618, 4, 1620, 4, 1622, 4, - 1624, 4, 1626, 4, 1628, 4, 1630, 4, // NOLINT - 1632, 4, 1634, 4, 1636, 4, 1638, 4, - 1640, 4, 1642, 4, 1644, 4, 1664, 4, // NOLINT - 1666, 4, 1668, 4, 1670, 4, 1672, 4, - 1674, 4, 1676, 4, 1678, 4, 1680, 4, // NOLINT - 1682, 4, 1684, 4, 1686, 4, 1688, 4, - 1690, 4, 1826, 4, 1828, 4, 1830, 4, // NOLINT - 1832, 4, 1834, 4, 1836, 4, 1838, 4, - 1842, 4, 1844, 4, 1846, 4, 1848, 4, // NOLINT - 1850, 4, 1852, 4, 1854, 4, 1856, 4, - 1858, 4, 1860, 4, 1862, 4, 1864, 4, // NOLINT - 1866, 4, 1868, 4, 1870, 4, 1872, 4, - 1874, 4, 1876, 4, 1878, 4, 1880, 4, // NOLINT - 1882, 4, 1884, 4, 1886, 4, 1888, 4, - 1890, 4, 1892, 4, 1894, 4, 1896, 4, // NOLINT - 1898, 4, 1900, 4, 1902, 4, 1913, 4, - 1915, 4, 1917, -141328, 1918, 4, 1920, 4, // NOLINT - 1922, 4, 1924, 4, 1926, 4, 1931, 4, - 1933, -169120, 1936, 4, 1938, 4, 1942, 4, // NOLINT - 1944, 4, 1946, 4, 1948, 4, 1950, 4, - 1952, 4, 1954, 4, 1956, 4, 1958, 4, // NOLINT - 1960, 4, 1962, -169232, 1963, -169276, 1964, -169260, - 1965, -169220, 1968, -169032, 1969, -169128}; // NOLINT -static const uint16_t kToLowercaseMultiStrings5Size = 1; // NOLINT -static const MultiCharacterSpecialCase<1> kToLowercaseMultiStrings7[1] = - { // NOLINT - {{kSentinel}}}; // NOLINT -static const uint16_t kToLowercaseTable7Size = 2; // NOLINT -static const int32_t kToLowercaseTable7[4] = {1073749793, 128, 7994, - 128}; // NOLINT -static const uint16_t kToLowercaseMultiStrings7Size = 1; // NOLINT + 1600, 4, 1602, 4, 1604, 4, 1606, 4, 1608, 4, + 1610, 4, 1612, 4, 1614, 4, 1616, 4, 1618, 4, + 1620, 4, 1622, 4, 1624, 4, 1626, 4, 1628, 4, + 1630, 4, 1632, 4, 1634, 4, 1636, 4, 1638, 4, + 1640, 4, 1642, 4, 1644, 4, 1664, 4, 1666, 4, + 1668, 4, 1670, 4, 1672, 4, 1674, 4, 1676, 4, + 1678, 4, 1680, 4, 1682, 4, 1684, 4, 1686, 4, + 1688, 4, 1690, 4, 1826, 4, 1828, 4, 1830, 4, + 1832, 4, 1834, 4, 1836, 4, 1838, 4, 1842, 4, + 1844, 4, 1846, 4, 1848, 4, 1850, 4, 1852, 4, + 1854, 4, 1856, 4, 1858, 4, 1860, 4, 1862, 4, + 1864, 4, 1866, 4, 1868, 4, 1870, 4, 1872, 4, + 1874, 4, 1876, 4, 1878, 4, 1880, 4, 1882, 4, + 1884, 4, 1886, 4, 1888, 4, 1890, 4, 1892, 4, + 1894, 4, 1896, 4, 1898, 4, 1900, 4, 1902, 4, + 1913, 4, 1915, 4, 1917, -141328, 1918, 4, 1920, 4, + 1922, 4, 1924, 4, 1926, 4, 1931, 4, 1933, -169120, + 1936, 4, 1938, 4, 1942, 4, 1944, 4, 1946, 4, + 1948, 4, 1950, 4, 1952, 4, 1954, 4, 1956, 4, + 1958, 4, 1960, 4, 1962, -169232, 1963, -169276, 1964, -169260, + 1965, -169220, 1968, -169032, 1969, -169128}; +static const uint16_t kToLowercaseMultiStrings5Size = 1; +static const MultiCharacterSpecialCase<1> kToLowercaseMultiStrings7[1] = { + {{kSentinel}}}; +static const uint16_t kToLowercaseTable7Size = 2; +static const int32_t kToLowercaseTable7[4] = {1073749793, 128, 7994, 128}; +static const uint16_t kToLowercaseMultiStrings7Size = 1; int ToLowercase::Convert(uchar c, uchar n, uchar* result, bool* allow_caching_ptr) { int chunk_index = c >> 13; @@ -1285,348 +1009,296 @@ int ToLowercase::Convert(uchar c, uchar n, uchar* result, } } -static const MultiCharacterSpecialCase<3> kToUppercaseMultiStrings0[62] = - { // NOLINT - {{83, 83, kSentinel}}, {{700, 78, kSentinel}}, - {{74, 780, kSentinel}}, {{921, 776, 769}}, // NOLINT - {{933, 776, 769}}, {{1333, 1362, kSentinel}}, - {{72, 817, kSentinel}}, {{84, 776, kSentinel}}, // NOLINT - {{87, 778, kSentinel}}, {{89, 778, kSentinel}}, - {{65, 702, kSentinel}}, {{933, 787, kSentinel}}, // NOLINT - {{933, 787, 768}}, {{933, 787, 769}}, - {{933, 787, 834}}, {{7944, 921, kSentinel}}, // NOLINT - {{7945, 921, kSentinel}}, {{7946, 921, kSentinel}}, - {{7947, 921, kSentinel}}, {{7948, 921, kSentinel}}, // NOLINT - {{7949, 921, kSentinel}}, {{7950, 921, kSentinel}}, - {{7951, 921, kSentinel}}, {{7976, 921, kSentinel}}, // NOLINT - {{7977, 921, kSentinel}}, {{7978, 921, kSentinel}}, - {{7979, 921, kSentinel}}, {{7980, 921, kSentinel}}, // NOLINT - {{7981, 921, kSentinel}}, {{7982, 921, kSentinel}}, - {{7983, 921, kSentinel}}, {{8040, 921, kSentinel}}, // NOLINT - {{8041, 921, kSentinel}}, {{8042, 921, kSentinel}}, - {{8043, 921, kSentinel}}, {{8044, 921, kSentinel}}, // NOLINT - {{8045, 921, kSentinel}}, {{8046, 921, kSentinel}}, - {{8047, 921, kSentinel}}, {{8122, 921, kSentinel}}, // NOLINT - {{913, 921, kSentinel}}, {{902, 921, kSentinel}}, - {{913, 834, kSentinel}}, {{913, 834, 921}}, // NOLINT - {{8138, 921, kSentinel}}, {{919, 921, kSentinel}}, - {{905, 921, kSentinel}}, {{919, 834, kSentinel}}, // NOLINT - {{919, 834, 921}}, {{921, 776, 768}}, - {{921, 834, kSentinel}}, {{921, 776, 834}}, // NOLINT - {{933, 776, 768}}, {{929, 787, kSentinel}}, - {{933, 834, kSentinel}}, {{933, 776, 834}}, // NOLINT - {{8186, 921, kSentinel}}, {{937, 921, kSentinel}}, - {{911, 921, kSentinel}}, {{937, 834, kSentinel}}, // NOLINT - {{937, 834, 921}}, {{kSentinel}}}; // NOLINT -static const uint16_t kToUppercaseTable0Size = 590; // NOLINT +static const MultiCharacterSpecialCase<3> kToUppercaseMultiStrings0[62] = { + {{83, 83, kSentinel}}, {{700, 78, kSentinel}}, + {{74, 780, kSentinel}}, {{921, 776, 769}}, + {{933, 776, 769}}, {{1333, 1362, kSentinel}}, + {{72, 817, kSentinel}}, {{84, 776, kSentinel}}, + {{87, 778, kSentinel}}, {{89, 778, kSentinel}}, + {{65, 702, kSentinel}}, {{933, 787, kSentinel}}, + {{933, 787, 768}}, {{933, 787, 769}}, + {{933, 787, 834}}, {{7944, 921, kSentinel}}, + {{7945, 921, kSentinel}}, {{7946, 921, kSentinel}}, + {{7947, 921, kSentinel}}, {{7948, 921, kSentinel}}, + {{7949, 921, kSentinel}}, {{7950, 921, kSentinel}}, + {{7951, 921, kSentinel}}, {{7976, 921, kSentinel}}, + {{7977, 921, kSentinel}}, {{7978, 921, kSentinel}}, + {{7979, 921, kSentinel}}, {{7980, 921, kSentinel}}, + {{7981, 921, kSentinel}}, {{7982, 921, kSentinel}}, + {{7983, 921, kSentinel}}, {{8040, 921, kSentinel}}, + {{8041, 921, kSentinel}}, {{8042, 921, kSentinel}}, + {{8043, 921, kSentinel}}, {{8044, 921, kSentinel}}, + {{8045, 921, kSentinel}}, {{8046, 921, kSentinel}}, + {{8047, 921, kSentinel}}, {{8122, 921, kSentinel}}, + {{913, 921, kSentinel}}, {{902, 921, kSentinel}}, + {{913, 834, kSentinel}}, {{913, 834, 921}}, + {{8138, 921, kSentinel}}, {{919, 921, kSentinel}}, + {{905, 921, kSentinel}}, {{919, 834, kSentinel}}, + {{919, 834, 921}}, {{921, 776, 768}}, + {{921, 834, kSentinel}}, {{921, 776, 834}}, + {{933, 776, 768}}, {{929, 787, kSentinel}}, + {{933, 834, kSentinel}}, {{933, 776, 834}}, + {{8186, 921, kSentinel}}, {{937, 921, kSentinel}}, + {{911, 921, kSentinel}}, {{937, 834, kSentinel}}, + {{937, 834, 921}}, {{kSentinel}}}; +static const uint16_t kToUppercaseTable0Size = 590; static const int32_t kToUppercaseTable0[1180] = { 1073741921, -128, 122, -128, 181, 2972, 223, 1, 1073742048, -128, 246, -128, - 1073742072, -128, 254, -128, // NOLINT - 255, 484, 257, -4, 259, -4, - 261, -4, 263, -4, 265, -4, - 267, -4, 269, -4, // NOLINT - 271, -4, 273, -4, 275, -4, - 277, -4, 279, -4, 281, -4, - 283, -4, 285, -4, // NOLINT + 1073742072, -128, 254, -128, 255, 484, + 257, -4, 259, -4, 261, -4, + 263, -4, 265, -4, 267, -4, + 269, -4, 271, -4, 273, -4, + 275, -4, 277, -4, 279, -4, + 281, -4, 283, -4, 285, -4, 287, -4, 289, -4, 291, -4, 293, -4, 295, -4, 297, -4, - 299, -4, 301, -4, // NOLINT - 303, -4, 305, -928, 307, -4, - 309, -4, 311, -4, 314, -4, - 316, -4, 318, -4, // NOLINT - 320, -4, 322, -4, 324, -4, - 326, -4, 328, -4, 329, 5, - 331, -4, 333, -4, // NOLINT + 299, -4, 301, -4, 303, -4, + 305, -928, 307, -4, 309, -4, + 311, -4, 314, -4, 316, -4, + 318, -4, 320, -4, 322, -4, + 324, -4, 326, -4, 328, -4, + 329, 5, 331, -4, 333, -4, 335, -4, 337, -4, 339, -4, 341, -4, 343, -4, 345, -4, - 347, -4, 349, -4, // NOLINT - 351, -4, 353, -4, 355, -4, - 357, -4, 359, -4, 361, -4, - 363, -4, 365, -4, // NOLINT - 367, -4, 369, -4, 371, -4, - 373, -4, 375, -4, 378, -4, - 380, -4, 382, -4, // NOLINT + 347, -4, 349, -4, 351, -4, + 353, -4, 355, -4, 357, -4, + 359, -4, 361, -4, 363, -4, + 365, -4, 367, -4, 369, -4, + 371, -4, 373, -4, 375, -4, + 378, -4, 380, -4, 382, -4, 383, -1200, 384, 780, 387, -4, 389, -4, 392, -4, 396, -4, - 402, -4, 405, 388, // NOLINT - 409, -4, 410, 652, 414, 520, - 417, -4, 419, -4, 421, -4, - 424, -4, 429, -4, // NOLINT - 432, -4, 436, -4, 438, -4, - 441, -4, 445, -4, 447, 224, - 453, -4, 454, -8, // NOLINT + 402, -4, 405, 388, 409, -4, + 410, 652, 414, 520, 417, -4, + 419, -4, 421, -4, 424, -4, + 429, -4, 432, -4, 436, -4, + 438, -4, 441, -4, 445, -4, + 447, 224, 453, -4, 454, -8, 456, -4, 457, -8, 459, -4, 460, -8, 462, -4, 464, -4, - 466, -4, 468, -4, // NOLINT - 470, -4, 472, -4, 474, -4, - 476, -4, 477, -316, 479, -4, - 481, -4, 483, -4, // NOLINT - 485, -4, 487, -4, 489, -4, - 491, -4, 493, -4, 495, -4, - 496, 9, 498, -4, // NOLINT + 466, -4, 468, -4, 470, -4, + 472, -4, 474, -4, 476, -4, + 477, -316, 479, -4, 481, -4, + 483, -4, 485, -4, 487, -4, + 489, -4, 491, -4, 493, -4, + 495, -4, 496, 9, 498, -4, 499, -8, 501, -4, 505, -4, 507, -4, 509, -4, 511, -4, - 513, -4, 515, -4, // NOLINT - 517, -4, 519, -4, 521, -4, - 523, -4, 525, -4, 527, -4, - 529, -4, 531, -4, // NOLINT - 533, -4, 535, -4, 537, -4, - 539, -4, 541, -4, 543, -4, - 547, -4, 549, -4, // NOLINT + 513, -4, 515, -4, 517, -4, + 519, -4, 521, -4, 523, -4, + 525, -4, 527, -4, 529, -4, + 531, -4, 533, -4, 535, -4, + 537, -4, 539, -4, 541, -4, + 543, -4, 547, -4, 549, -4, 551, -4, 553, -4, 555, -4, 557, -4, 559, -4, 561, -4, - 563, -4, 572, -4, // NOLINT - 1073742399, 43260, 576, 43260, 578, -4, - 583, -4, 585, -4, 587, -4, - 589, -4, 591, -4, // NOLINT - 592, 43132, 593, 43120, 594, 43128, - 595, -840, 596, -824, 1073742422, -820, - 599, -820, 601, -808, // NOLINT + 563, -4, 572, -4, 1073742399, 43260, + 576, 43260, 578, -4, 583, -4, + 585, -4, 587, -4, 589, -4, + 591, -4, 592, 43132, 593, 43120, + 594, 43128, 595, -840, 596, -824, + 1073742422, -820, 599, -820, 601, -808, 603, -812, 604, 169276, 608, -820, 609, 169260, 611, -828, 613, 169120, - 614, 169232, 616, -836, // NOLINT - 617, -844, 619, 42972, 620, 169220, - 623, -844, 625, 42996, 626, -852, - 629, -856, 637, 42908, // NOLINT - 640, -872, 643, -872, 647, 169128, - 648, -872, 649, -276, 1073742474, -868, - 651, -868, 652, -284, // NOLINT + 614, 169232, 616, -836, 617, -844, + 619, 42972, 620, 169220, 623, -844, + 625, 42996, 626, -852, 629, -856, + 637, 42908, 640, -872, 643, -872, + 647, 169128, 648, -872, 649, -276, + 1073742474, -868, 651, -868, 652, -284, 658, -876, 670, 169032, 837, 336, 881, -4, 883, -4, 887, -4, - 1073742715, 520, 893, 520, // NOLINT - 912, 13, 940, -152, 1073742765, -148, - 943, -148, 944, 17, 1073742769, -128, - 961, -128, 962, -124, // NOLINT - 1073742787, -128, 971, -128, 972, -256, - 1073742797, -252, 974, -252, 976, -248, - 977, -228, 981, -188, // NOLINT + 1073742715, 520, 893, 520, 912, 13, + 940, -152, 1073742765, -148, 943, -148, + 944, 17, 1073742769, -128, 961, -128, + 962, -124, 1073742787, -128, 971, -128, + 972, -256, 1073742797, -252, 974, -252, + 976, -248, 977, -228, 981, -188, 982, -216, 983, -32, 985, -4, 987, -4, 989, -4, 991, -4, - 993, -4, 995, -4, // NOLINT - 997, -4, 999, -4, 1001, -4, - 1003, -4, 1005, -4, 1007, -4, - 1008, -344, 1009, -320, // NOLINT - 1010, 28, 1011, -464, 1013, -384, - 1016, -4, 1019, -4, 1073742896, -128, - 1103, -128, 1073742928, -320, // NOLINT + 993, -4, 995, -4, 997, -4, + 999, -4, 1001, -4, 1003, -4, + 1005, -4, 1007, -4, 1008, -344, + 1009, -320, 1010, 28, 1011, -464, + 1013, -384, 1016, -4, 1019, -4, + 1073742896, -128, 1103, -128, 1073742928, -320, 1119, -320, 1121, -4, 1123, -4, 1125, -4, 1127, -4, 1129, -4, - 1131, -4, 1133, -4, // NOLINT - 1135, -4, 1137, -4, 1139, -4, - 1141, -4, 1143, -4, 1145, -4, - 1147, -4, 1149, -4, // NOLINT - 1151, -4, 1153, -4, 1163, -4, - 1165, -4, 1167, -4, 1169, -4, - 1171, -4, 1173, -4, // NOLINT + 1131, -4, 1133, -4, 1135, -4, + 1137, -4, 1139, -4, 1141, -4, + 1143, -4, 1145, -4, 1147, -4, + 1149, -4, 1151, -4, 1153, -4, + 1163, -4, 1165, -4, 1167, -4, + 1169, -4, 1171, -4, 1173, -4, 1175, -4, 1177, -4, 1179, -4, 1181, -4, 1183, -4, 1185, -4, - 1187, -4, 1189, -4, // NOLINT - 1191, -4, 1193, -4, 1195, -4, - 1197, -4, 1199, -4, 1201, -4, - 1203, -4, 1205, -4, // NOLINT - 1207, -4, 1209, -4, 1211, -4, - 1213, -4, 1215, -4, 1218, -4, - 1220, -4, 1222, -4, // NOLINT + 1187, -4, 1189, -4, 1191, -4, + 1193, -4, 1195, -4, 1197, -4, + 1199, -4, 1201, -4, 1203, -4, + 1205, -4, 1207, -4, 1209, -4, + 1211, -4, 1213, -4, 1215, -4, + 1218, -4, 1220, -4, 1222, -4, 1224, -4, 1226, -4, 1228, -4, 1230, -4, 1231, -60, 1233, -4, - 1235, -4, 1237, -4, // NOLINT - 1239, -4, 1241, -4, 1243, -4, - 1245, -4, 1247, -4, 1249, -4, - 1251, -4, 1253, -4, // NOLINT - 1255, -4, 1257, -4, 1259, -4, - 1261, -4, 1263, -4, 1265, -4, - 1267, -4, 1269, -4, // NOLINT + 1235, -4, 1237, -4, 1239, -4, + 1241, -4, 1243, -4, 1245, -4, + 1247, -4, 1249, -4, 1251, -4, + 1253, -4, 1255, -4, 1257, -4, + 1259, -4, 1261, -4, 1263, -4, + 1265, -4, 1267, -4, 1269, -4, 1271, -4, 1273, -4, 1275, -4, 1277, -4, 1279, -4, 1281, -4, - 1283, -4, 1285, -4, // NOLINT - 1287, -4, 1289, -4, 1291, -4, - 1293, -4, 1295, -4, 1297, -4, - 1299, -4, 1301, -4, // NOLINT - 1303, -4, 1305, -4, 1307, -4, - 1309, -4, 1311, -4, 1313, -4, - 1315, -4, 1317, -4, // NOLINT + 1283, -4, 1285, -4, 1287, -4, + 1289, -4, 1291, -4, 1293, -4, + 1295, -4, 1297, -4, 1299, -4, + 1301, -4, 1303, -4, 1305, -4, + 1307, -4, 1309, -4, 1311, -4, + 1313, -4, 1315, -4, 1317, -4, 1319, -4, 1321, -4, 1323, -4, 1325, -4, 1327, -4, 1073743201, -192, - 1414, -192, 1415, 21, // NOLINT - 7545, 141328, 7549, 15256, 7681, -4, - 7683, -4, 7685, -4, 7687, -4, - 7689, -4, 7691, -4, // NOLINT - 7693, -4, 7695, -4, 7697, -4, - 7699, -4, 7701, -4, 7703, -4, - 7705, -4, 7707, -4, // NOLINT + 1414, -192, 1415, 21, 7545, 141328, + 7549, 15256, 7681, -4, 7683, -4, + 7685, -4, 7687, -4, 7689, -4, + 7691, -4, 7693, -4, 7695, -4, + 7697, -4, 7699, -4, 7701, -4, + 7703, -4, 7705, -4, 7707, -4, 7709, -4, 7711, -4, 7713, -4, 7715, -4, 7717, -4, 7719, -4, - 7721, -4, 7723, -4, // NOLINT - 7725, -4, 7727, -4, 7729, -4, - 7731, -4, 7733, -4, 7735, -4, - 7737, -4, 7739, -4, // NOLINT - 7741, -4, 7743, -4, 7745, -4, - 7747, -4, 7749, -4, 7751, -4, - 7753, -4, 7755, -4, // NOLINT + 7721, -4, 7723, -4, 7725, -4, + 7727, -4, 7729, -4, 7731, -4, + 7733, -4, 7735, -4, 7737, -4, + 7739, -4, 7741, -4, 7743, -4, + 7745, -4, 7747, -4, 7749, -4, + 7751, -4, 7753, -4, 7755, -4, 7757, -4, 7759, -4, 7761, -4, 7763, -4, 7765, -4, 7767, -4, - 7769, -4, 7771, -4, // NOLINT - 7773, -4, 7775, -4, 7777, -4, - 7779, -4, 7781, -4, 7783, -4, - 7785, -4, 7787, -4, // NOLINT - 7789, -4, 7791, -4, 7793, -4, - 7795, -4, 7797, -4, 7799, -4, - 7801, -4, 7803, -4, // NOLINT + 7769, -4, 7771, -4, 7773, -4, + 7775, -4, 7777, -4, 7779, -4, + 7781, -4, 7783, -4, 7785, -4, + 7787, -4, 7789, -4, 7791, -4, + 7793, -4, 7795, -4, 7797, -4, + 7799, -4, 7801, -4, 7803, -4, 7805, -4, 7807, -4, 7809, -4, 7811, -4, 7813, -4, 7815, -4, - 7817, -4, 7819, -4, // NOLINT - 7821, -4, 7823, -4, 7825, -4, - 7827, -4, 7829, -4, 7830, 25, - 7831, 29, 7832, 33, // NOLINT - 7833, 37, 7834, 41, 7835, -236, - 7841, -4, 7843, -4, 7845, -4, - 7847, -4, 7849, -4, // NOLINT + 7817, -4, 7819, -4, 7821, -4, + 7823, -4, 7825, -4, 7827, -4, + 7829, -4, 7830, 25, 7831, 29, + 7832, 33, 7833, 37, 7834, 41, + 7835, -236, 7841, -4, 7843, -4, + 7845, -4, 7847, -4, 7849, -4, 7851, -4, 7853, -4, 7855, -4, 7857, -4, 7859, -4, 7861, -4, - 7863, -4, 7865, -4, // NOLINT - 7867, -4, 7869, -4, 7871, -4, - 7873, -4, 7875, -4, 7877, -4, - 7879, -4, 7881, -4, // NOLINT - 7883, -4, 7885, -4, 7887, -4, - 7889, -4, 7891, -4, 7893, -4, - 7895, -4, 7897, -4, // NOLINT + 7863, -4, 7865, -4, 7867, -4, + 7869, -4, 7871, -4, 7873, -4, + 7875, -4, 7877, -4, 7879, -4, + 7881, -4, 7883, -4, 7885, -4, + 7887, -4, 7889, -4, 7891, -4, + 7893, -4, 7895, -4, 7897, -4, 7899, -4, 7901, -4, 7903, -4, 7905, -4, 7907, -4, 7909, -4, - 7911, -4, 7913, -4, // NOLINT - 7915, -4, 7917, -4, 7919, -4, - 7921, -4, 7923, -4, 7925, -4, - 7927, -4, 7929, -4, // NOLINT - 7931, -4, 7933, -4, 7935, -4, - 1073749760, 32, 7943, 32, 1073749776, 32, - 7957, 32, 1073749792, 32, // NOLINT + 7911, -4, 7913, -4, 7915, -4, + 7917, -4, 7919, -4, 7921, -4, + 7923, -4, 7925, -4, 7927, -4, + 7929, -4, 7931, -4, 7933, -4, + 7935, -4, 1073749760, 32, 7943, 32, + 1073749776, 32, 7957, 32, 1073749792, 32, 7975, 32, 1073749808, 32, 7991, 32, 1073749824, 32, 8005, 32, 8016, 45, - 8017, 32, 8018, 49, // NOLINT - 8019, 32, 8020, 53, 8021, 32, - 8022, 57, 8023, 32, 1073749856, 32, - 8039, 32, 1073749872, 296, // NOLINT - 8049, 296, 1073749874, 344, 8053, 344, - 1073749878, 400, 8055, 400, 1073749880, 512, - 8057, 512, 1073749882, 448, // NOLINT + 8017, 32, 8018, 49, 8019, 32, + 8020, 53, 8021, 32, 8022, 57, + 8023, 32, 1073749856, 32, 8039, 32, + 1073749872, 296, 8049, 296, 1073749874, 344, + 8053, 344, 1073749878, 400, 8055, 400, + 1073749880, 512, 8057, 512, 1073749882, 448, 8059, 448, 1073749884, 504, 8061, 504, 8064, 61, 8065, 65, 8066, 69, - 8067, 73, 8068, 77, // NOLINT - 8069, 81, 8070, 85, 8071, 89, - 8072, 61, 8073, 65, 8074, 69, - 8075, 73, 8076, 77, // NOLINT - 8077, 81, 8078, 85, 8079, 89, - 8080, 93, 8081, 97, 8082, 101, - 8083, 105, 8084, 109, // NOLINT + 8067, 73, 8068, 77, 8069, 81, + 8070, 85, 8071, 89, 8072, 61, + 8073, 65, 8074, 69, 8075, 73, + 8076, 77, 8077, 81, 8078, 85, + 8079, 89, 8080, 93, 8081, 97, + 8082, 101, 8083, 105, 8084, 109, 8085, 113, 8086, 117, 8087, 121, 8088, 93, 8089, 97, 8090, 101, - 8091, 105, 8092, 109, // NOLINT - 8093, 113, 8094, 117, 8095, 121, - 8096, 125, 8097, 129, 8098, 133, - 8099, 137, 8100, 141, // NOLINT - 8101, 145, 8102, 149, 8103, 153, - 8104, 125, 8105, 129, 8106, 133, - 8107, 137, 8108, 141, // NOLINT + 8091, 105, 8092, 109, 8093, 113, + 8094, 117, 8095, 121, 8096, 125, + 8097, 129, 8098, 133, 8099, 137, + 8100, 141, 8101, 145, 8102, 149, + 8103, 153, 8104, 125, 8105, 129, + 8106, 133, 8107, 137, 8108, 141, 8109, 145, 8110, 149, 8111, 153, 1073749936, 32, 8113, 32, 8114, 157, - 8115, 161, 8116, 165, // NOLINT - 8118, 169, 8119, 173, 8124, 161, - 8126, -28820, 8130, 177, 8131, 181, - 8132, 185, 8134, 189, // NOLINT - 8135, 193, 8140, 181, 1073749968, 32, - 8145, 32, 8146, 197, 8147, 13, - 8150, 201, 8151, 205, // NOLINT + 8115, 161, 8116, 165, 8118, 169, + 8119, 173, 8124, 161, 8126, -28820, + 8130, 177, 8131, 181, 8132, 185, + 8134, 189, 8135, 193, 8140, 181, + 1073749968, 32, 8145, 32, 8146, 197, + 8147, 13, 8150, 201, 8151, 205, 1073749984, 32, 8161, 32, 8162, 209, 8163, 17, 8164, 213, 8165, 28, - 8166, 217, 8167, 221, // NOLINT - 8178, 225, 8179, 229, 8180, 233, - 8182, 237, 8183, 241, 8188, 229}; // NOLINT -static const uint16_t kToUppercaseMultiStrings0Size = 62; // NOLINT -static const MultiCharacterSpecialCase<1> kToUppercaseMultiStrings1[1] = - { // NOLINT - {{kSentinel}}}; // NOLINT -static const uint16_t kToUppercaseTable1Size = 73; // NOLINT + 8166, 217, 8167, 221, 8178, 225, + 8179, 229, 8180, 233, 8182, 237, + 8183, 241, 8188, 229}; +static const uint16_t kToUppercaseMultiStrings0Size = 62; +static const MultiCharacterSpecialCase<1> kToUppercaseMultiStrings1[1] = { + {{kSentinel}}}; +static const uint16_t kToUppercaseTable1Size = 73; static const int32_t kToUppercaseTable1[146] = { - 334, -112, 1073742192, -64, 383, -64, - 388, -4, 1073743056, -104, 1257, -104, - 1073744944, -192, 3166, -192, // NOLINT - 3169, -4, 3173, -43180, 3174, -43168, - 3176, -4, 3178, -4, 3180, -4, - 3187, -4, 3190, -4, // NOLINT - 3201, -4, 3203, -4, 3205, -4, - 3207, -4, 3209, -4, 3211, -4, - 3213, -4, 3215, -4, // NOLINT - 3217, -4, 3219, -4, 3221, -4, - 3223, -4, 3225, -4, 3227, -4, - 3229, -4, 3231, -4, // NOLINT - 3233, -4, 3235, -4, 3237, -4, - 3239, -4, 3241, -4, 3243, -4, - 3245, -4, 3247, -4, // NOLINT - 3249, -4, 3251, -4, 3253, -4, - 3255, -4, 3257, -4, 3259, -4, - 3261, -4, 3263, -4, // NOLINT - 3265, -4, 3267, -4, 3269, -4, - 3271, -4, 3273, -4, 3275, -4, - 3277, -4, 3279, -4, // NOLINT - 3281, -4, 3283, -4, 3285, -4, - 3287, -4, 3289, -4, 3291, -4, - 3293, -4, 3295, -4, // NOLINT - 3297, -4, 3299, -4, 3308, -4, - 3310, -4, 3315, -4, 1073745152, -29056, - 3365, -29056, 3367, -29056, // NOLINT - 3373, -29056}; // NOLINT -static const uint16_t kToUppercaseMultiStrings1Size = 1; // NOLINT -static const MultiCharacterSpecialCase<1> kToUppercaseMultiStrings5[1] = - { // NOLINT - {{kSentinel}}}; // NOLINT -static const uint16_t kToUppercaseTable5Size = 95; // NOLINT -static const int32_t - kToUppercaseTable5[190] = {1601, -4, 1603, -4, 1605, -4, 1607, -4, 1609, -4, - 1611, -4, 1613, -4, 1615, -4, // NOLINT - 1617, -4, 1619, -4, 1621, -4, 1623, -4, 1625, -4, - 1627, -4, 1629, -4, 1631, -4, // NOLINT - 1633, -4, 1635, -4, 1637, -4, 1639, -4, 1641, -4, - 1643, -4, 1645, -4, 1665, -4, // NOLINT - 1667, -4, 1669, -4, 1671, -4, 1673, -4, 1675, -4, - 1677, -4, 1679, -4, 1681, -4, // NOLINT - 1683, -4, 1685, -4, 1687, -4, 1689, -4, 1691, -4, - 1827, -4, 1829, -4, 1831, -4, // NOLINT - 1833, -4, 1835, -4, 1837, -4, 1839, -4, 1843, -4, - 1845, -4, 1847, -4, 1849, -4, // NOLINT - 1851, -4, 1853, -4, 1855, -4, 1857, -4, 1859, -4, - 1861, -4, 1863, -4, 1865, -4, // NOLINT - 1867, -4, 1869, -4, 1871, -4, 1873, -4, 1875, -4, - 1877, -4, 1879, -4, 1881, -4, // NOLINT - 1883, -4, 1885, -4, 1887, -4, 1889, -4, 1891, -4, - 1893, -4, 1895, -4, 1897, -4, // NOLINT - 1899, -4, 1901, -4, 1903, -4, 1914, -4, 1916, -4, - 1919, -4, 1921, -4, 1923, -4, // NOLINT - 1925, -4, 1927, -4, 1932, -4, 1937, -4, 1939, -4, - 1943, -4, 1945, -4, 1947, -4, // NOLINT - 1949, -4, 1951, -4, 1953, -4, 1955, -4, 1957, -4, - 1959, -4, 1961, -4}; // NOLINT -static const uint16_t kToUppercaseMultiStrings5Size = 1; // NOLINT -static const MultiCharacterSpecialCase<3> kToUppercaseMultiStrings7[12] = - { // NOLINT - {{70, 70, kSentinel}}, - {{70, 73, kSentinel}}, - {{70, 76, kSentinel}}, - {{70, 70, 73}}, // NOLINT - {{70, 70, 76}}, - {{83, 84, kSentinel}}, - {{1348, 1350, kSentinel}}, - {{1348, 1333, kSentinel}}, // NOLINT - {{1348, 1339, kSentinel}}, - {{1358, 1350, kSentinel}}, - {{1348, 1341, kSentinel}}, - {{kSentinel}}}; // NOLINT -static const uint16_t kToUppercaseTable7Size = 14; // NOLINT -static const int32_t kToUppercaseTable7[28] = - {6912, 1, 6913, 5, 6914, 9, 6915, 13, - 6916, 17, 6917, 21, 6918, 21, 6931, 25, // NOLINT - 6932, 29, 6933, 33, 6934, 37, 6935, 41, - 1073749825, -128, 8026, -128}; // NOLINT -static const uint16_t kToUppercaseMultiStrings7Size = 12; // NOLINT + 334, -112, 1073742192, -64, 383, -64, 388, -4, 1073743056, -104, + 1257, -104, 1073744944, -192, 3166, -192, 3169, -4, 3173, -43180, + 3174, -43168, 3176, -4, 3178, -4, 3180, -4, 3187, -4, + 3190, -4, 3201, -4, 3203, -4, 3205, -4, 3207, -4, + 3209, -4, 3211, -4, 3213, -4, 3215, -4, 3217, -4, + 3219, -4, 3221, -4, 3223, -4, 3225, -4, 3227, -4, + 3229, -4, 3231, -4, 3233, -4, 3235, -4, 3237, -4, + 3239, -4, 3241, -4, 3243, -4, 3245, -4, 3247, -4, + 3249, -4, 3251, -4, 3253, -4, 3255, -4, 3257, -4, + 3259, -4, 3261, -4, 3263, -4, 3265, -4, 3267, -4, + 3269, -4, 3271, -4, 3273, -4, 3275, -4, 3277, -4, + 3279, -4, 3281, -4, 3283, -4, 3285, -4, 3287, -4, + 3289, -4, 3291, -4, 3293, -4, 3295, -4, 3297, -4, + 3299, -4, 3308, -4, 3310, -4, 3315, -4, 1073745152, -29056, + 3365, -29056, 3367, -29056, 3373, -29056}; +static const uint16_t kToUppercaseMultiStrings1Size = 1; +static const MultiCharacterSpecialCase<1> kToUppercaseMultiStrings5[1] = { + {{kSentinel}}}; +static const uint16_t kToUppercaseTable5Size = 95; +static const int32_t kToUppercaseTable5[190] = { + 1601, -4, 1603, -4, 1605, -4, 1607, -4, 1609, -4, 1611, -4, 1613, -4, + 1615, -4, 1617, -4, 1619, -4, 1621, -4, 1623, -4, 1625, -4, 1627, -4, + 1629, -4, 1631, -4, 1633, -4, 1635, -4, 1637, -4, 1639, -4, 1641, -4, + 1643, -4, 1645, -4, 1665, -4, 1667, -4, 1669, -4, 1671, -4, 1673, -4, + 1675, -4, 1677, -4, 1679, -4, 1681, -4, 1683, -4, 1685, -4, 1687, -4, + 1689, -4, 1691, -4, 1827, -4, 1829, -4, 1831, -4, 1833, -4, 1835, -4, + 1837, -4, 1839, -4, 1843, -4, 1845, -4, 1847, -4, 1849, -4, 1851, -4, + 1853, -4, 1855, -4, 1857, -4, 1859, -4, 1861, -4, 1863, -4, 1865, -4, + 1867, -4, 1869, -4, 1871, -4, 1873, -4, 1875, -4, 1877, -4, 1879, -4, + 1881, -4, 1883, -4, 1885, -4, 1887, -4, 1889, -4, 1891, -4, 1893, -4, + 1895, -4, 1897, -4, 1899, -4, 1901, -4, 1903, -4, 1914, -4, 1916, -4, + 1919, -4, 1921, -4, 1923, -4, 1925, -4, 1927, -4, 1932, -4, 1937, -4, + 1939, -4, 1943, -4, 1945, -4, 1947, -4, 1949, -4, 1951, -4, 1953, -4, + 1955, -4, 1957, -4, 1959, -4, 1961, -4}; +static const uint16_t kToUppercaseMultiStrings5Size = 1; +static const MultiCharacterSpecialCase<3> kToUppercaseMultiStrings7[12] = { + {{70, 70, kSentinel}}, + {{70, 73, kSentinel}}, + {{70, 76, kSentinel}}, + {{70, 70, 73}}, + {{70, 70, 76}}, + {{83, 84, kSentinel}}, + {{1348, 1350, kSentinel}}, + {{1348, 1333, kSentinel}}, + {{1348, 1339, kSentinel}}, + {{1358, 1350, kSentinel}}, + {{1348, 1341, kSentinel}}, + {{kSentinel}}}; +static const uint16_t kToUppercaseTable7Size = 14; +static const int32_t kToUppercaseTable7[28] = { + 6912, 1, 6913, 5, 6914, 9, 6915, 13, 6916, 17, + 6917, 21, 6918, 21, 6931, 25, 6932, 29, 6933, 33, + 6934, 37, 6935, 41, 1073749825, -128, 8026, -128}; +static const uint16_t kToUppercaseMultiStrings7Size = 12; int ToUppercase::Convert(uchar c, uchar n, uchar* result, bool* allow_caching_ptr) { int chunk_index = c >> 13; @@ -1653,269 +1325,221 @@ int ToUppercase::Convert(uchar c, uchar n, uchar* result, } static const MultiCharacterSpecialCase<1> kEcma262CanonicalizeMultiStrings0[1] = - { // NOLINT - {{kSentinel}}}; // NOLINT -static const uint16_t kEcma262CanonicalizeTable0Size = 498; // NOLINT + {{{kSentinel}}}; +static const uint16_t kEcma262CanonicalizeTable0Size = 498; static const int32_t kEcma262CanonicalizeTable0[996] = { 1073741921, -128, 122, -128, 181, 2972, 1073742048, -128, 246, -128, 1073742072, -128, - 254, -128, 255, 484, // NOLINT - 257, -4, 259, -4, 261, -4, - 263, -4, 265, -4, 267, -4, - 269, -4, 271, -4, // NOLINT - 273, -4, 275, -4, 277, -4, - 279, -4, 281, -4, 283, -4, - 285, -4, 287, -4, // NOLINT + 254, -128, 255, 484, 257, -4, + 259, -4, 261, -4, 263, -4, + 265, -4, 267, -4, 269, -4, + 271, -4, 273, -4, 275, -4, + 277, -4, 279, -4, 281, -4, + 283, -4, 285, -4, 287, -4, 289, -4, 291, -4, 293, -4, 295, -4, 297, -4, 299, -4, - 301, -4, 303, -4, // NOLINT - 307, -4, 309, -4, 311, -4, - 314, -4, 316, -4, 318, -4, - 320, -4, 322, -4, // NOLINT - 324, -4, 326, -4, 328, -4, - 331, -4, 333, -4, 335, -4, - 337, -4, 339, -4, // NOLINT + 301, -4, 303, -4, 307, -4, + 309, -4, 311, -4, 314, -4, + 316, -4, 318, -4, 320, -4, + 322, -4, 324, -4, 326, -4, + 328, -4, 331, -4, 333, -4, + 335, -4, 337, -4, 339, -4, 341, -4, 343, -4, 345, -4, 347, -4, 349, -4, 351, -4, - 353, -4, 355, -4, // NOLINT - 357, -4, 359, -4, 361, -4, - 363, -4, 365, -4, 367, -4, - 369, -4, 371, -4, // NOLINT - 373, -4, 375, -4, 378, -4, - 380, -4, 382, -4, 384, 780, - 387, -4, 389, -4, // NOLINT + 353, -4, 355, -4, 357, -4, + 359, -4, 361, -4, 363, -4, + 365, -4, 367, -4, 369, -4, + 371, -4, 373, -4, 375, -4, + 378, -4, 380, -4, 382, -4, + 384, 780, 387, -4, 389, -4, 392, -4, 396, -4, 402, -4, 405, 388, 409, -4, 410, 652, - 414, 520, 417, -4, // NOLINT - 419, -4, 421, -4, 424, -4, - 429, -4, 432, -4, 436, -4, - 438, -4, 441, -4, // NOLINT - 445, -4, 447, 224, 453, -4, - 454, -8, 456, -4, 457, -8, - 459, -4, 460, -8, // NOLINT + 414, 520, 417, -4, 419, -4, + 421, -4, 424, -4, 429, -4, + 432, -4, 436, -4, 438, -4, + 441, -4, 445, -4, 447, 224, + 453, -4, 454, -8, 456, -4, + 457, -8, 459, -4, 460, -8, 462, -4, 464, -4, 466, -4, 468, -4, 470, -4, 472, -4, - 474, -4, 476, -4, // NOLINT - 477, -316, 479, -4, 481, -4, - 483, -4, 485, -4, 487, -4, - 489, -4, 491, -4, // NOLINT - 493, -4, 495, -4, 498, -4, - 499, -8, 501, -4, 505, -4, - 507, -4, 509, -4, // NOLINT + 474, -4, 476, -4, 477, -316, + 479, -4, 481, -4, 483, -4, + 485, -4, 487, -4, 489, -4, + 491, -4, 493, -4, 495, -4, + 498, -4, 499, -8, 501, -4, + 505, -4, 507, -4, 509, -4, 511, -4, 513, -4, 515, -4, 517, -4, 519, -4, 521, -4, - 523, -4, 525, -4, // NOLINT - 527, -4, 529, -4, 531, -4, - 533, -4, 535, -4, 537, -4, - 539, -4, 541, -4, // NOLINT - 543, -4, 547, -4, 549, -4, - 551, -4, 553, -4, 555, -4, - 557, -4, 559, -4, // NOLINT + 523, -4, 525, -4, 527, -4, + 529, -4, 531, -4, 533, -4, + 535, -4, 537, -4, 539, -4, + 541, -4, 543, -4, 547, -4, + 549, -4, 551, -4, 553, -4, + 555, -4, 557, -4, 559, -4, 561, -4, 563, -4, 572, -4, 1073742399, 43260, 576, 43260, 578, -4, - 583, -4, 585, -4, // NOLINT - 587, -4, 589, -4, 591, -4, - 592, 43132, 593, 43120, 594, 43128, - 595, -840, 596, -824, // NOLINT - 1073742422, -820, 599, -820, 601, -808, - 603, -812, 604, 169276, 608, -820, - 609, 169260, 611, -828, // NOLINT + 583, -4, 585, -4, 587, -4, + 589, -4, 591, -4, 592, 43132, + 593, 43120, 594, 43128, 595, -840, + 596, -824, 1073742422, -820, 599, -820, + 601, -808, 603, -812, 604, 169276, + 608, -820, 609, 169260, 611, -828, 613, 169120, 614, 169232, 616, -836, 617, -844, 619, 42972, 620, 169220, - 623, -844, 625, 42996, // NOLINT - 626, -852, 629, -856, 637, 42908, - 640, -872, 643, -872, 647, 169128, - 648, -872, 649, -276, // NOLINT - 1073742474, -868, 651, -868, 652, -284, - 658, -876, 670, 169032, 837, 336, - 881, -4, 883, -4, // NOLINT + 623, -844, 625, 42996, 626, -852, + 629, -856, 637, 42908, 640, -872, + 643, -872, 647, 169128, 648, -872, + 649, -276, 1073742474, -868, 651, -868, + 652, -284, 658, -876, 670, 169032, + 837, 336, 881, -4, 883, -4, 887, -4, 1073742715, 520, 893, 520, 940, -152, 1073742765, -148, 943, -148, - 1073742769, -128, 961, -128, // NOLINT - 962, -124, 1073742787, -128, 971, -128, - 972, -256, 1073742797, -252, 974, -252, - 976, -248, 977, -228, // NOLINT - 981, -188, 982, -216, 983, -32, - 985, -4, 987, -4, 989, -4, - 991, -4, 993, -4, // NOLINT + 1073742769, -128, 961, -128, 962, -124, + 1073742787, -128, 971, -128, 972, -256, + 1073742797, -252, 974, -252, 976, -248, + 977, -228, 981, -188, 982, -216, + 983, -32, 985, -4, 987, -4, + 989, -4, 991, -4, 993, -4, 995, -4, 997, -4, 999, -4, 1001, -4, 1003, -4, 1005, -4, - 1007, -4, 1008, -344, // NOLINT - 1009, -320, 1010, 28, 1011, -464, - 1013, -384, 1016, -4, 1019, -4, - 1073742896, -128, 1103, -128, // NOLINT - 1073742928, -320, 1119, -320, 1121, -4, - 1123, -4, 1125, -4, 1127, -4, - 1129, -4, 1131, -4, // NOLINT + 1007, -4, 1008, -344, 1009, -320, + 1010, 28, 1011, -464, 1013, -384, + 1016, -4, 1019, -4, 1073742896, -128, + 1103, -128, 1073742928, -320, 1119, -320, + 1121, -4, 1123, -4, 1125, -4, + 1127, -4, 1129, -4, 1131, -4, 1133, -4, 1135, -4, 1137, -4, 1139, -4, 1141, -4, 1143, -4, - 1145, -4, 1147, -4, // NOLINT - 1149, -4, 1151, -4, 1153, -4, - 1163, -4, 1165, -4, 1167, -4, - 1169, -4, 1171, -4, // NOLINT - 1173, -4, 1175, -4, 1177, -4, - 1179, -4, 1181, -4, 1183, -4, - 1185, -4, 1187, -4, // NOLINT + 1145, -4, 1147, -4, 1149, -4, + 1151, -4, 1153, -4, 1163, -4, + 1165, -4, 1167, -4, 1169, -4, + 1171, -4, 1173, -4, 1175, -4, + 1177, -4, 1179, -4, 1181, -4, + 1183, -4, 1185, -4, 1187, -4, 1189, -4, 1191, -4, 1193, -4, 1195, -4, 1197, -4, 1199, -4, - 1201, -4, 1203, -4, // NOLINT - 1205, -4, 1207, -4, 1209, -4, - 1211, -4, 1213, -4, 1215, -4, - 1218, -4, 1220, -4, // NOLINT - 1222, -4, 1224, -4, 1226, -4, - 1228, -4, 1230, -4, 1231, -60, - 1233, -4, 1235, -4, // NOLINT + 1201, -4, 1203, -4, 1205, -4, + 1207, -4, 1209, -4, 1211, -4, + 1213, -4, 1215, -4, 1218, -4, + 1220, -4, 1222, -4, 1224, -4, + 1226, -4, 1228, -4, 1230, -4, + 1231, -60, 1233, -4, 1235, -4, 1237, -4, 1239, -4, 1241, -4, 1243, -4, 1245, -4, 1247, -4, - 1249, -4, 1251, -4, // NOLINT - 1253, -4, 1255, -4, 1257, -4, - 1259, -4, 1261, -4, 1263, -4, - 1265, -4, 1267, -4, // NOLINT - 1269, -4, 1271, -4, 1273, -4, - 1275, -4, 1277, -4, 1279, -4, - 1281, -4, 1283, -4, // NOLINT + 1249, -4, 1251, -4, 1253, -4, + 1255, -4, 1257, -4, 1259, -4, + 1261, -4, 1263, -4, 1265, -4, + 1267, -4, 1269, -4, 1271, -4, + 1273, -4, 1275, -4, 1277, -4, + 1279, -4, 1281, -4, 1283, -4, 1285, -4, 1287, -4, 1289, -4, 1291, -4, 1293, -4, 1295, -4, - 1297, -4, 1299, -4, // NOLINT - 1301, -4, 1303, -4, 1305, -4, - 1307, -4, 1309, -4, 1311, -4, - 1313, -4, 1315, -4, // NOLINT - 1317, -4, 1319, -4, 1321, -4, - 1323, -4, 1325, -4, 1327, -4, - 1073743201, -192, 1414, -192, // NOLINT + 1297, -4, 1299, -4, 1301, -4, + 1303, -4, 1305, -4, 1307, -4, + 1309, -4, 1311, -4, 1313, -4, + 1315, -4, 1317, -4, 1319, -4, + 1321, -4, 1323, -4, 1325, -4, + 1327, -4, 1073743201, -192, 1414, -192, 7545, 141328, 7549, 15256, 7681, -4, 7683, -4, 7685, -4, 7687, -4, - 7689, -4, 7691, -4, // NOLINT - 7693, -4, 7695, -4, 7697, -4, - 7699, -4, 7701, -4, 7703, -4, - 7705, -4, 7707, -4, // NOLINT - 7709, -4, 7711, -4, 7713, -4, - 7715, -4, 7717, -4, 7719, -4, - 7721, -4, 7723, -4, // NOLINT + 7689, -4, 7691, -4, 7693, -4, + 7695, -4, 7697, -4, 7699, -4, + 7701, -4, 7703, -4, 7705, -4, + 7707, -4, 7709, -4, 7711, -4, + 7713, -4, 7715, -4, 7717, -4, + 7719, -4, 7721, -4, 7723, -4, 7725, -4, 7727, -4, 7729, -4, 7731, -4, 7733, -4, 7735, -4, - 7737, -4, 7739, -4, // NOLINT - 7741, -4, 7743, -4, 7745, -4, - 7747, -4, 7749, -4, 7751, -4, - 7753, -4, 7755, -4, // NOLINT - 7757, -4, 7759, -4, 7761, -4, - 7763, -4, 7765, -4, 7767, -4, - 7769, -4, 7771, -4, // NOLINT + 7737, -4, 7739, -4, 7741, -4, + 7743, -4, 7745, -4, 7747, -4, + 7749, -4, 7751, -4, 7753, -4, + 7755, -4, 7757, -4, 7759, -4, + 7761, -4, 7763, -4, 7765, -4, + 7767, -4, 7769, -4, 7771, -4, 7773, -4, 7775, -4, 7777, -4, 7779, -4, 7781, -4, 7783, -4, - 7785, -4, 7787, -4, // NOLINT - 7789, -4, 7791, -4, 7793, -4, - 7795, -4, 7797, -4, 7799, -4, - 7801, -4, 7803, -4, // NOLINT - 7805, -4, 7807, -4, 7809, -4, - 7811, -4, 7813, -4, 7815, -4, - 7817, -4, 7819, -4, // NOLINT + 7785, -4, 7787, -4, 7789, -4, + 7791, -4, 7793, -4, 7795, -4, + 7797, -4, 7799, -4, 7801, -4, + 7803, -4, 7805, -4, 7807, -4, + 7809, -4, 7811, -4, 7813, -4, + 7815, -4, 7817, -4, 7819, -4, 7821, -4, 7823, -4, 7825, -4, 7827, -4, 7829, -4, 7835, -236, - 7841, -4, 7843, -4, // NOLINT - 7845, -4, 7847, -4, 7849, -4, - 7851, -4, 7853, -4, 7855, -4, - 7857, -4, 7859, -4, // NOLINT - 7861, -4, 7863, -4, 7865, -4, - 7867, -4, 7869, -4, 7871, -4, - 7873, -4, 7875, -4, // NOLINT + 7841, -4, 7843, -4, 7845, -4, + 7847, -4, 7849, -4, 7851, -4, + 7853, -4, 7855, -4, 7857, -4, + 7859, -4, 7861, -4, 7863, -4, + 7865, -4, 7867, -4, 7869, -4, + 7871, -4, 7873, -4, 7875, -4, 7877, -4, 7879, -4, 7881, -4, 7883, -4, 7885, -4, 7887, -4, - 7889, -4, 7891, -4, // NOLINT - 7893, -4, 7895, -4, 7897, -4, - 7899, -4, 7901, -4, 7903, -4, - 7905, -4, 7907, -4, // NOLINT - 7909, -4, 7911, -4, 7913, -4, - 7915, -4, 7917, -4, 7919, -4, - 7921, -4, 7923, -4, // NOLINT + 7889, -4, 7891, -4, 7893, -4, + 7895, -4, 7897, -4, 7899, -4, + 7901, -4, 7903, -4, 7905, -4, + 7907, -4, 7909, -4, 7911, -4, + 7913, -4, 7915, -4, 7917, -4, + 7919, -4, 7921, -4, 7923, -4, 7925, -4, 7927, -4, 7929, -4, 7931, -4, 7933, -4, 7935, -4, - 1073749760, 32, 7943, 32, // NOLINT - 1073749776, 32, 7957, 32, 1073749792, 32, - 7975, 32, 1073749808, 32, 7991, 32, - 1073749824, 32, 8005, 32, // NOLINT - 8017, 32, 8019, 32, 8021, 32, - 8023, 32, 1073749856, 32, 8039, 32, - 1073749872, 296, 8049, 296, // NOLINT + 1073749760, 32, 7943, 32, 1073749776, 32, + 7957, 32, 1073749792, 32, 7975, 32, + 1073749808, 32, 7991, 32, 1073749824, 32, + 8005, 32, 8017, 32, 8019, 32, + 8021, 32, 8023, 32, 1073749856, 32, + 8039, 32, 1073749872, 296, 8049, 296, 1073749874, 344, 8053, 344, 1073749878, 400, 8055, 400, 1073749880, 512, 8057, 512, - 1073749882, 448, 8059, 448, // NOLINT - 1073749884, 504, 8061, 504, 1073749936, 32, - 8113, 32, 8126, -28820, 1073749968, 32, - 8145, 32, 1073749984, 32, // NOLINT - 8161, 32, 8165, 28}; // NOLINT -static const uint16_t kEcma262CanonicalizeMultiStrings0Size = 1; // NOLINT + 1073749882, 448, 8059, 448, 1073749884, 504, + 8061, 504, 1073749936, 32, 8113, 32, + 8126, -28820, 1073749968, 32, 8145, 32, + 1073749984, 32, 8161, 32, 8165, 28}; +static const uint16_t kEcma262CanonicalizeMultiStrings0Size = 1; static const MultiCharacterSpecialCase<1> kEcma262CanonicalizeMultiStrings1[1] = - { // NOLINT - {{kSentinel}}}; // NOLINT -static const uint16_t kEcma262CanonicalizeTable1Size = 73; // NOLINT + {{{kSentinel}}}; +static const uint16_t kEcma262CanonicalizeTable1Size = 73; static const int32_t kEcma262CanonicalizeTable1[146] = { - 334, -112, 1073742192, -64, 383, -64, - 388, -4, 1073743056, -104, 1257, -104, - 1073744944, -192, 3166, -192, // NOLINT - 3169, -4, 3173, -43180, 3174, -43168, - 3176, -4, 3178, -4, 3180, -4, - 3187, -4, 3190, -4, // NOLINT - 3201, -4, 3203, -4, 3205, -4, - 3207, -4, 3209, -4, 3211, -4, - 3213, -4, 3215, -4, // NOLINT - 3217, -4, 3219, -4, 3221, -4, - 3223, -4, 3225, -4, 3227, -4, - 3229, -4, 3231, -4, // NOLINT - 3233, -4, 3235, -4, 3237, -4, - 3239, -4, 3241, -4, 3243, -4, - 3245, -4, 3247, -4, // NOLINT - 3249, -4, 3251, -4, 3253, -4, - 3255, -4, 3257, -4, 3259, -4, - 3261, -4, 3263, -4, // NOLINT - 3265, -4, 3267, -4, 3269, -4, - 3271, -4, 3273, -4, 3275, -4, - 3277, -4, 3279, -4, // NOLINT - 3281, -4, 3283, -4, 3285, -4, - 3287, -4, 3289, -4, 3291, -4, - 3293, -4, 3295, -4, // NOLINT - 3297, -4, 3299, -4, 3308, -4, - 3310, -4, 3315, -4, 1073745152, -29056, - 3365, -29056, 3367, -29056, // NOLINT - 3373, -29056}; // NOLINT -static const uint16_t kEcma262CanonicalizeMultiStrings1Size = 1; // NOLINT + 334, -112, 1073742192, -64, 383, -64, 388, -4, 1073743056, -104, + 1257, -104, 1073744944, -192, 3166, -192, 3169, -4, 3173, -43180, + 3174, -43168, 3176, -4, 3178, -4, 3180, -4, 3187, -4, + 3190, -4, 3201, -4, 3203, -4, 3205, -4, 3207, -4, + 3209, -4, 3211, -4, 3213, -4, 3215, -4, 3217, -4, + 3219, -4, 3221, -4, 3223, -4, 3225, -4, 3227, -4, + 3229, -4, 3231, -4, 3233, -4, 3235, -4, 3237, -4, + 3239, -4, 3241, -4, 3243, -4, 3245, -4, 3247, -4, + 3249, -4, 3251, -4, 3253, -4, 3255, -4, 3257, -4, + 3259, -4, 3261, -4, 3263, -4, 3265, -4, 3267, -4, + 3269, -4, 3271, -4, 3273, -4, 3275, -4, 3277, -4, + 3279, -4, 3281, -4, 3283, -4, 3285, -4, 3287, -4, + 3289, -4, 3291, -4, 3293, -4, 3295, -4, 3297, -4, + 3299, -4, 3308, -4, 3310, -4, 3315, -4, 1073745152, -29056, + 3365, -29056, 3367, -29056, 3373, -29056}; +static const uint16_t kEcma262CanonicalizeMultiStrings1Size = 1; static const MultiCharacterSpecialCase<1> kEcma262CanonicalizeMultiStrings5[1] = - { // NOLINT - {{kSentinel}}}; // NOLINT -static const uint16_t kEcma262CanonicalizeTable5Size = 95; // NOLINT + {{{kSentinel}}}; +static const uint16_t kEcma262CanonicalizeTable5Size = 95; static const int32_t kEcma262CanonicalizeTable5[190] = { - 1601, -4, 1603, -4, 1605, -4, 1607, -4, - 1609, -4, 1611, -4, 1613, -4, 1615, -4, // NOLINT - 1617, -4, 1619, -4, 1621, -4, 1623, -4, - 1625, -4, 1627, -4, 1629, -4, 1631, -4, // NOLINT - 1633, -4, 1635, -4, 1637, -4, 1639, -4, - 1641, -4, 1643, -4, 1645, -4, 1665, -4, // NOLINT - 1667, -4, 1669, -4, 1671, -4, 1673, -4, - 1675, -4, 1677, -4, 1679, -4, 1681, -4, // NOLINT - 1683, -4, 1685, -4, 1687, -4, 1689, -4, - 1691, -4, 1827, -4, 1829, -4, 1831, -4, // NOLINT - 1833, -4, 1835, -4, 1837, -4, 1839, -4, - 1843, -4, 1845, -4, 1847, -4, 1849, -4, // NOLINT - 1851, -4, 1853, -4, 1855, -4, 1857, -4, - 1859, -4, 1861, -4, 1863, -4, 1865, -4, // NOLINT - 1867, -4, 1869, -4, 1871, -4, 1873, -4, - 1875, -4, 1877, -4, 1879, -4, 1881, -4, // NOLINT - 1883, -4, 1885, -4, 1887, -4, 1889, -4, - 1891, -4, 1893, -4, 1895, -4, 1897, -4, // NOLINT - 1899, -4, 1901, -4, 1903, -4, 1914, -4, - 1916, -4, 1919, -4, 1921, -4, 1923, -4, // NOLINT - 1925, -4, 1927, -4, 1932, -4, 1937, -4, - 1939, -4, 1943, -4, 1945, -4, 1947, -4, // NOLINT - 1949, -4, 1951, -4, 1953, -4, 1955, -4, - 1957, -4, 1959, -4, 1961, -4}; // NOLINT -static const uint16_t kEcma262CanonicalizeMultiStrings5Size = 1; // NOLINT + 1601, -4, 1603, -4, 1605, -4, 1607, -4, 1609, -4, 1611, -4, 1613, -4, + 1615, -4, 1617, -4, 1619, -4, 1621, -4, 1623, -4, 1625, -4, 1627, -4, + 1629, -4, 1631, -4, 1633, -4, 1635, -4, 1637, -4, 1639, -4, 1641, -4, + 1643, -4, 1645, -4, 1665, -4, 1667, -4, 1669, -4, 1671, -4, 1673, -4, + 1675, -4, 1677, -4, 1679, -4, 1681, -4, 1683, -4, 1685, -4, 1687, -4, + 1689, -4, 1691, -4, 1827, -4, 1829, -4, 1831, -4, 1833, -4, 1835, -4, + 1837, -4, 1839, -4, 1843, -4, 1845, -4, 1847, -4, 1849, -4, 1851, -4, + 1853, -4, 1855, -4, 1857, -4, 1859, -4, 1861, -4, 1863, -4, 1865, -4, + 1867, -4, 1869, -4, 1871, -4, 1873, -4, 1875, -4, 1877, -4, 1879, -4, + 1881, -4, 1883, -4, 1885, -4, 1887, -4, 1889, -4, 1891, -4, 1893, -4, + 1895, -4, 1897, -4, 1899, -4, 1901, -4, 1903, -4, 1914, -4, 1916, -4, + 1919, -4, 1921, -4, 1923, -4, 1925, -4, 1927, -4, 1932, -4, 1937, -4, + 1939, -4, 1943, -4, 1945, -4, 1947, -4, 1949, -4, 1951, -4, 1953, -4, + 1955, -4, 1957, -4, 1959, -4, 1961, -4}; +static const uint16_t kEcma262CanonicalizeMultiStrings5Size = 1; static const MultiCharacterSpecialCase<1> kEcma262CanonicalizeMultiStrings7[1] = - { // NOLINT - {{kSentinel}}}; // NOLINT -static const uint16_t kEcma262CanonicalizeTable7Size = 2; // NOLINT + {{{kSentinel}}}; +static const uint16_t kEcma262CanonicalizeTable7Size = 2; static const int32_t kEcma262CanonicalizeTable7[4] = {1073749825, -128, 8026, - -128}; // NOLINT -static const uint16_t kEcma262CanonicalizeMultiStrings7Size = 1; // NOLINT + -128}; +static const uint16_t kEcma262CanonicalizeMultiStrings7Size = 1; int Ecma262Canonicalize::Convert(uchar c, uchar n, uchar* result, bool* allow_caching_ptr) { int chunk_index = c >> 13; @@ -1942,1095 +1566,899 @@ int Ecma262Canonicalize::Convert(uchar c, uchar n, uchar* result, } static const MultiCharacterSpecialCase<4> - kEcma262UnCanonicalizeMultiStrings0[507] = { // NOLINT - {{65, 97, kSentinel}}, - {{90, 122, kSentinel}}, - {{181, 924, 956, kSentinel}}, - {{192, 224, kSentinel}}, // NOLINT - {{214, 246, kSentinel}}, - {{216, 248, kSentinel}}, - {{222, 254, kSentinel}}, - {{255, 376, kSentinel}}, // NOLINT - {{256, 257, kSentinel}}, - {{258, 259, kSentinel}}, - {{260, 261, kSentinel}}, - {{262, 263, kSentinel}}, // NOLINT - {{264, 265, kSentinel}}, - {{266, 267, kSentinel}}, - {{268, 269, kSentinel}}, - {{270, 271, kSentinel}}, // NOLINT - {{272, 273, kSentinel}}, - {{274, 275, kSentinel}}, - {{276, 277, kSentinel}}, - {{278, 279, kSentinel}}, // NOLINT - {{280, 281, kSentinel}}, - {{282, 283, kSentinel}}, - {{284, 285, kSentinel}}, - {{286, 287, kSentinel}}, // NOLINT - {{288, 289, kSentinel}}, - {{290, 291, kSentinel}}, - {{292, 293, kSentinel}}, - {{294, 295, kSentinel}}, // NOLINT - {{296, 297, kSentinel}}, - {{298, 299, kSentinel}}, - {{300, 301, kSentinel}}, - {{302, 303, kSentinel}}, // NOLINT - {{306, 307, kSentinel}}, - {{308, 309, kSentinel}}, - {{310, 311, kSentinel}}, - {{313, 314, kSentinel}}, // NOLINT - {{315, 316, kSentinel}}, - {{317, 318, kSentinel}}, - {{319, 320, kSentinel}}, - {{321, 322, kSentinel}}, // NOLINT - {{323, 324, kSentinel}}, - {{325, 326, kSentinel}}, - {{327, 328, kSentinel}}, - {{330, 331, kSentinel}}, // NOLINT - {{332, 333, kSentinel}}, - {{334, 335, kSentinel}}, - {{336, 337, kSentinel}}, - {{338, 339, kSentinel}}, // NOLINT - {{340, 341, kSentinel}}, - {{342, 343, kSentinel}}, - {{344, 345, kSentinel}}, - {{346, 347, kSentinel}}, // NOLINT - {{348, 349, kSentinel}}, - {{350, 351, kSentinel}}, - {{352, 353, kSentinel}}, - {{354, 355, kSentinel}}, // NOLINT - {{356, 357, kSentinel}}, - {{358, 359, kSentinel}}, - {{360, 361, kSentinel}}, - {{362, 363, kSentinel}}, // NOLINT - {{364, 365, kSentinel}}, - {{366, 367, kSentinel}}, - {{368, 369, kSentinel}}, - {{370, 371, kSentinel}}, // NOLINT - {{372, 373, kSentinel}}, - {{374, 375, kSentinel}}, - {{377, 378, kSentinel}}, - {{379, 380, kSentinel}}, // NOLINT - {{381, 382, kSentinel}}, - {{384, 579, kSentinel}}, - {{385, 595, kSentinel}}, - {{386, 387, kSentinel}}, // NOLINT - {{388, 389, kSentinel}}, - {{390, 596, kSentinel}}, - {{391, 392, kSentinel}}, - {{393, 598, kSentinel}}, // NOLINT - {{394, 599, kSentinel}}, - {{395, 396, kSentinel}}, - {{398, 477, kSentinel}}, - {{399, 601, kSentinel}}, // NOLINT - {{400, 603, kSentinel}}, - {{401, 402, kSentinel}}, - {{403, 608, kSentinel}}, - {{404, 611, kSentinel}}, // NOLINT - {{405, 502, kSentinel}}, - {{406, 617, kSentinel}}, - {{407, 616, kSentinel}}, - {{408, 409, kSentinel}}, // NOLINT - {{410, 573, kSentinel}}, - {{412, 623, kSentinel}}, - {{413, 626, kSentinel}}, - {{414, 544, kSentinel}}, // NOLINT - {{415, 629, kSentinel}}, - {{416, 417, kSentinel}}, - {{418, 419, kSentinel}}, - {{420, 421, kSentinel}}, // NOLINT - {{422, 640, kSentinel}}, - {{423, 424, kSentinel}}, - {{425, 643, kSentinel}}, - {{428, 429, kSentinel}}, // NOLINT - {{430, 648, kSentinel}}, - {{431, 432, kSentinel}}, - {{433, 650, kSentinel}}, - {{434, 651, kSentinel}}, // NOLINT - {{435, 436, kSentinel}}, - {{437, 438, kSentinel}}, - {{439, 658, kSentinel}}, - {{440, 441, kSentinel}}, // NOLINT - {{444, 445, kSentinel}}, - {{447, 503, kSentinel}}, - {{452, 453, 454, kSentinel}}, - {{455, 456, 457, kSentinel}}, // NOLINT - {{458, 459, 460, kSentinel}}, - {{461, 462, kSentinel}}, - {{463, 464, kSentinel}}, - {{465, 466, kSentinel}}, // NOLINT - {{467, 468, kSentinel}}, - {{469, 470, kSentinel}}, - {{471, 472, kSentinel}}, - {{473, 474, kSentinel}}, // NOLINT - {{475, 476, kSentinel}}, - {{478, 479, kSentinel}}, - {{480, 481, kSentinel}}, - {{482, 483, kSentinel}}, // NOLINT - {{484, 485, kSentinel}}, - {{486, 487, kSentinel}}, - {{488, 489, kSentinel}}, - {{490, 491, kSentinel}}, // NOLINT - {{492, 493, kSentinel}}, - {{494, 495, kSentinel}}, - {{497, 498, 499, kSentinel}}, - {{500, 501, kSentinel}}, // NOLINT - {{504, 505, kSentinel}}, - {{506, 507, kSentinel}}, - {{508, 509, kSentinel}}, - {{510, 511, kSentinel}}, // NOLINT - {{512, 513, kSentinel}}, - {{514, 515, kSentinel}}, - {{516, 517, kSentinel}}, - {{518, 519, kSentinel}}, // NOLINT - {{520, 521, kSentinel}}, - {{522, 523, kSentinel}}, - {{524, 525, kSentinel}}, - {{526, 527, kSentinel}}, // NOLINT - {{528, 529, kSentinel}}, - {{530, 531, kSentinel}}, - {{532, 533, kSentinel}}, - {{534, 535, kSentinel}}, // NOLINT - {{536, 537, kSentinel}}, - {{538, 539, kSentinel}}, - {{540, 541, kSentinel}}, - {{542, 543, kSentinel}}, // NOLINT - {{546, 547, kSentinel}}, - {{548, 549, kSentinel}}, - {{550, 551, kSentinel}}, - {{552, 553, kSentinel}}, // NOLINT - {{554, 555, kSentinel}}, - {{556, 557, kSentinel}}, - {{558, 559, kSentinel}}, - {{560, 561, kSentinel}}, // NOLINT - {{562, 563, kSentinel}}, - {{570, 11365, kSentinel}}, - {{571, 572, kSentinel}}, - {{574, 11366, kSentinel}}, // NOLINT - {{575, 11390, kSentinel}}, - {{576, 11391, kSentinel}}, - {{577, 578, kSentinel}}, - {{580, 649, kSentinel}}, // NOLINT - {{581, 652, kSentinel}}, - {{582, 583, kSentinel}}, - {{584, 585, kSentinel}}, - {{586, 587, kSentinel}}, // NOLINT - {{588, 589, kSentinel}}, - {{590, 591, kSentinel}}, - {{592, 11375, kSentinel}}, - {{593, 11373, kSentinel}}, // NOLINT - {{594, 11376, kSentinel}}, - {{604, 42923, kSentinel}}, - {{609, 42924, kSentinel}}, - {{613, 42893, kSentinel}}, // NOLINT - {{614, 42922, kSentinel}}, - {{619, 11362, kSentinel}}, - {{620, 42925, kSentinel}}, - {{625, 11374, kSentinel}}, // NOLINT - {{637, 11364, kSentinel}}, - {{647, 42929, kSentinel}}, - {{670, 42928, kSentinel}}, - {{837, 921, 953, 8126}}, // NOLINT - {{880, 881, kSentinel}}, - {{882, 883, kSentinel}}, - {{886, 887, kSentinel}}, - {{891, 1021, kSentinel}}, // NOLINT - {{893, 1023, kSentinel}}, - {{895, 1011, kSentinel}}, - {{902, 940, kSentinel}}, - {{904, 941, kSentinel}}, // NOLINT - {{906, 943, kSentinel}}, - {{908, 972, kSentinel}}, - {{910, 973, kSentinel}}, - {{911, 974, kSentinel}}, // NOLINT - {{913, 945, kSentinel}}, - {{914, 946, 976, kSentinel}}, - {{915, 947, kSentinel}}, - {{916, 948, kSentinel}}, // NOLINT - {{917, 949, 1013, kSentinel}}, - {{918, 950, kSentinel}}, - {{919, 951, kSentinel}}, - {{920, 952, 977, kSentinel}}, // NOLINT - {{922, 954, 1008, kSentinel}}, - {{923, 955, kSentinel}}, - {{925, 957, kSentinel}}, - {{927, 959, kSentinel}}, // NOLINT - {{928, 960, 982, kSentinel}}, - {{929, 961, 1009, kSentinel}}, - {{931, 962, 963, kSentinel}}, - {{932, 964, kSentinel}}, // NOLINT - {{933, 965, kSentinel}}, - {{934, 966, 981, kSentinel}}, - {{935, 967, kSentinel}}, - {{939, 971, kSentinel}}, // NOLINT - {{975, 983, kSentinel}}, - {{984, 985, kSentinel}}, - {{986, 987, kSentinel}}, - {{988, 989, kSentinel}}, // NOLINT - {{990, 991, kSentinel}}, - {{992, 993, kSentinel}}, - {{994, 995, kSentinel}}, - {{996, 997, kSentinel}}, // NOLINT - {{998, 999, kSentinel}}, - {{1000, 1001, kSentinel}}, - {{1002, 1003, kSentinel}}, - {{1004, 1005, kSentinel}}, // NOLINT - {{1006, 1007, kSentinel}}, - {{1010, 1017, kSentinel}}, - {{1015, 1016, kSentinel}}, - {{1018, 1019, kSentinel}}, // NOLINT - {{1024, 1104, kSentinel}}, - {{1039, 1119, kSentinel}}, - {{1040, 1072, kSentinel}}, - {{1071, 1103, kSentinel}}, // NOLINT - {{1120, 1121, kSentinel}}, - {{1122, 1123, kSentinel}}, - {{1124, 1125, kSentinel}}, - {{1126, 1127, kSentinel}}, // NOLINT - {{1128, 1129, kSentinel}}, - {{1130, 1131, kSentinel}}, - {{1132, 1133, kSentinel}}, - {{1134, 1135, kSentinel}}, // NOLINT - {{1136, 1137, kSentinel}}, - {{1138, 1139, kSentinel}}, - {{1140, 1141, kSentinel}}, - {{1142, 1143, kSentinel}}, // NOLINT - {{1144, 1145, kSentinel}}, - {{1146, 1147, kSentinel}}, - {{1148, 1149, kSentinel}}, - {{1150, 1151, kSentinel}}, // NOLINT - {{1152, 1153, kSentinel}}, - {{1162, 1163, kSentinel}}, - {{1164, 1165, kSentinel}}, - {{1166, 1167, kSentinel}}, // NOLINT - {{1168, 1169, kSentinel}}, - {{1170, 1171, kSentinel}}, - {{1172, 1173, kSentinel}}, - {{1174, 1175, kSentinel}}, // NOLINT - {{1176, 1177, kSentinel}}, - {{1178, 1179, kSentinel}}, - {{1180, 1181, kSentinel}}, - {{1182, 1183, kSentinel}}, // NOLINT - {{1184, 1185, kSentinel}}, - {{1186, 1187, kSentinel}}, - {{1188, 1189, kSentinel}}, - {{1190, 1191, kSentinel}}, // NOLINT - {{1192, 1193, kSentinel}}, - {{1194, 1195, kSentinel}}, - {{1196, 1197, kSentinel}}, - {{1198, 1199, kSentinel}}, // NOLINT - {{1200, 1201, kSentinel}}, - {{1202, 1203, kSentinel}}, - {{1204, 1205, kSentinel}}, - {{1206, 1207, kSentinel}}, // NOLINT - {{1208, 1209, kSentinel}}, - {{1210, 1211, kSentinel}}, - {{1212, 1213, kSentinel}}, - {{1214, 1215, kSentinel}}, // NOLINT - {{1216, 1231, kSentinel}}, - {{1217, 1218, kSentinel}}, - {{1219, 1220, kSentinel}}, - {{1221, 1222, kSentinel}}, // NOLINT - {{1223, 1224, kSentinel}}, - {{1225, 1226, kSentinel}}, - {{1227, 1228, kSentinel}}, - {{1229, 1230, kSentinel}}, // NOLINT - {{1232, 1233, kSentinel}}, - {{1234, 1235, kSentinel}}, - {{1236, 1237, kSentinel}}, - {{1238, 1239, kSentinel}}, // NOLINT - {{1240, 1241, kSentinel}}, - {{1242, 1243, kSentinel}}, - {{1244, 1245, kSentinel}}, - {{1246, 1247, kSentinel}}, // NOLINT - {{1248, 1249, kSentinel}}, - {{1250, 1251, kSentinel}}, - {{1252, 1253, kSentinel}}, - {{1254, 1255, kSentinel}}, // NOLINT - {{1256, 1257, kSentinel}}, - {{1258, 1259, kSentinel}}, - {{1260, 1261, kSentinel}}, - {{1262, 1263, kSentinel}}, // NOLINT - {{1264, 1265, kSentinel}}, - {{1266, 1267, kSentinel}}, - {{1268, 1269, kSentinel}}, - {{1270, 1271, kSentinel}}, // NOLINT - {{1272, 1273, kSentinel}}, - {{1274, 1275, kSentinel}}, - {{1276, 1277, kSentinel}}, - {{1278, 1279, kSentinel}}, // NOLINT - {{1280, 1281, kSentinel}}, - {{1282, 1283, kSentinel}}, - {{1284, 1285, kSentinel}}, - {{1286, 1287, kSentinel}}, // NOLINT - {{1288, 1289, kSentinel}}, - {{1290, 1291, kSentinel}}, - {{1292, 1293, kSentinel}}, - {{1294, 1295, kSentinel}}, // NOLINT - {{1296, 1297, kSentinel}}, - {{1298, 1299, kSentinel}}, - {{1300, 1301, kSentinel}}, - {{1302, 1303, kSentinel}}, // NOLINT - {{1304, 1305, kSentinel}}, - {{1306, 1307, kSentinel}}, - {{1308, 1309, kSentinel}}, - {{1310, 1311, kSentinel}}, // NOLINT - {{1312, 1313, kSentinel}}, - {{1314, 1315, kSentinel}}, - {{1316, 1317, kSentinel}}, - {{1318, 1319, kSentinel}}, // NOLINT - {{1320, 1321, kSentinel}}, - {{1322, 1323, kSentinel}}, - {{1324, 1325, kSentinel}}, - {{1326, 1327, kSentinel}}, // NOLINT - {{1329, 1377, kSentinel}}, - {{1366, 1414, kSentinel}}, - {{4256, 11520, kSentinel}}, - {{4293, 11557, kSentinel}}, // NOLINT - {{4295, 11559, kSentinel}}, - {{4301, 11565, kSentinel}}, - {{7545, 42877, kSentinel}}, - {{7549, 11363, kSentinel}}, // NOLINT - {{7680, 7681, kSentinel}}, - {{7682, 7683, kSentinel}}, - {{7684, 7685, kSentinel}}, - {{7686, 7687, kSentinel}}, // NOLINT - {{7688, 7689, kSentinel}}, - {{7690, 7691, kSentinel}}, - {{7692, 7693, kSentinel}}, - {{7694, 7695, kSentinel}}, // NOLINT - {{7696, 7697, kSentinel}}, - {{7698, 7699, kSentinel}}, - {{7700, 7701, kSentinel}}, - {{7702, 7703, kSentinel}}, // NOLINT - {{7704, 7705, kSentinel}}, - {{7706, 7707, kSentinel}}, - {{7708, 7709, kSentinel}}, - {{7710, 7711, kSentinel}}, // NOLINT - {{7712, 7713, kSentinel}}, - {{7714, 7715, kSentinel}}, - {{7716, 7717, kSentinel}}, - {{7718, 7719, kSentinel}}, // NOLINT - {{7720, 7721, kSentinel}}, - {{7722, 7723, kSentinel}}, - {{7724, 7725, kSentinel}}, - {{7726, 7727, kSentinel}}, // NOLINT - {{7728, 7729, kSentinel}}, - {{7730, 7731, kSentinel}}, - {{7732, 7733, kSentinel}}, - {{7734, 7735, kSentinel}}, // NOLINT - {{7736, 7737, kSentinel}}, - {{7738, 7739, kSentinel}}, - {{7740, 7741, kSentinel}}, - {{7742, 7743, kSentinel}}, // NOLINT - {{7744, 7745, kSentinel}}, - {{7746, 7747, kSentinel}}, - {{7748, 7749, kSentinel}}, - {{7750, 7751, kSentinel}}, // NOLINT - {{7752, 7753, kSentinel}}, - {{7754, 7755, kSentinel}}, - {{7756, 7757, kSentinel}}, - {{7758, 7759, kSentinel}}, // NOLINT - {{7760, 7761, kSentinel}}, - {{7762, 7763, kSentinel}}, - {{7764, 7765, kSentinel}}, - {{7766, 7767, kSentinel}}, // NOLINT - {{7768, 7769, kSentinel}}, - {{7770, 7771, kSentinel}}, - {{7772, 7773, kSentinel}}, - {{7774, 7775, kSentinel}}, // NOLINT - {{7776, 7777, 7835, kSentinel}}, - {{7778, 7779, kSentinel}}, - {{7780, 7781, kSentinel}}, - {{7782, 7783, kSentinel}}, // NOLINT - {{7784, 7785, kSentinel}}, - {{7786, 7787, kSentinel}}, - {{7788, 7789, kSentinel}}, - {{7790, 7791, kSentinel}}, // NOLINT - {{7792, 7793, kSentinel}}, - {{7794, 7795, kSentinel}}, - {{7796, 7797, kSentinel}}, - {{7798, 7799, kSentinel}}, // NOLINT - {{7800, 7801, kSentinel}}, - {{7802, 7803, kSentinel}}, - {{7804, 7805, kSentinel}}, - {{7806, 7807, kSentinel}}, // NOLINT - {{7808, 7809, kSentinel}}, - {{7810, 7811, kSentinel}}, - {{7812, 7813, kSentinel}}, - {{7814, 7815, kSentinel}}, // NOLINT - {{7816, 7817, kSentinel}}, - {{7818, 7819, kSentinel}}, - {{7820, 7821, kSentinel}}, - {{7822, 7823, kSentinel}}, // NOLINT - {{7824, 7825, kSentinel}}, - {{7826, 7827, kSentinel}}, - {{7828, 7829, kSentinel}}, - {{7840, 7841, kSentinel}}, // NOLINT - {{7842, 7843, kSentinel}}, - {{7844, 7845, kSentinel}}, - {{7846, 7847, kSentinel}}, - {{7848, 7849, kSentinel}}, // NOLINT - {{7850, 7851, kSentinel}}, - {{7852, 7853, kSentinel}}, - {{7854, 7855, kSentinel}}, - {{7856, 7857, kSentinel}}, // NOLINT - {{7858, 7859, kSentinel}}, - {{7860, 7861, kSentinel}}, - {{7862, 7863, kSentinel}}, - {{7864, 7865, kSentinel}}, // NOLINT - {{7866, 7867, kSentinel}}, - {{7868, 7869, kSentinel}}, - {{7870, 7871, kSentinel}}, - {{7872, 7873, kSentinel}}, // NOLINT - {{7874, 7875, kSentinel}}, - {{7876, 7877, kSentinel}}, - {{7878, 7879, kSentinel}}, - {{7880, 7881, kSentinel}}, // NOLINT - {{7882, 7883, kSentinel}}, - {{7884, 7885, kSentinel}}, - {{7886, 7887, kSentinel}}, - {{7888, 7889, kSentinel}}, // NOLINT - {{7890, 7891, kSentinel}}, - {{7892, 7893, kSentinel}}, - {{7894, 7895, kSentinel}}, - {{7896, 7897, kSentinel}}, // NOLINT - {{7898, 7899, kSentinel}}, - {{7900, 7901, kSentinel}}, - {{7902, 7903, kSentinel}}, - {{7904, 7905, kSentinel}}, // NOLINT - {{7906, 7907, kSentinel}}, - {{7908, 7909, kSentinel}}, - {{7910, 7911, kSentinel}}, - {{7912, 7913, kSentinel}}, // NOLINT - {{7914, 7915, kSentinel}}, - {{7916, 7917, kSentinel}}, - {{7918, 7919, kSentinel}}, - {{7920, 7921, kSentinel}}, // NOLINT - {{7922, 7923, kSentinel}}, - {{7924, 7925, kSentinel}}, - {{7926, 7927, kSentinel}}, - {{7928, 7929, kSentinel}}, // NOLINT - {{7930, 7931, kSentinel}}, - {{7932, 7933, kSentinel}}, - {{7934, 7935, kSentinel}}, - {{7936, 7944, kSentinel}}, // NOLINT - {{7943, 7951, kSentinel}}, - {{7952, 7960, kSentinel}}, - {{7957, 7965, kSentinel}}, - {{7968, 7976, kSentinel}}, // NOLINT - {{7975, 7983, kSentinel}}, - {{7984, 7992, kSentinel}}, - {{7991, 7999, kSentinel}}, - {{8000, 8008, kSentinel}}, // NOLINT - {{8005, 8013, kSentinel}}, - {{8017, 8025, kSentinel}}, - {{8019, 8027, kSentinel}}, - {{8021, 8029, kSentinel}}, // NOLINT - {{8023, 8031, kSentinel}}, - {{8032, 8040, kSentinel}}, - {{8039, 8047, kSentinel}}, - {{8048, 8122, kSentinel}}, // NOLINT - {{8049, 8123, kSentinel}}, - {{8050, 8136, kSentinel}}, - {{8053, 8139, kSentinel}}, - {{8054, 8154, kSentinel}}, // NOLINT - {{8055, 8155, kSentinel}}, - {{8056, 8184, kSentinel}}, - {{8057, 8185, kSentinel}}, - {{8058, 8170, kSentinel}}, // NOLINT - {{8059, 8171, kSentinel}}, - {{8060, 8186, kSentinel}}, - {{8061, 8187, kSentinel}}, - {{8112, 8120, kSentinel}}, // NOLINT - {{8113, 8121, kSentinel}}, - {{8144, 8152, kSentinel}}, - {{8145, 8153, kSentinel}}, - {{8160, 8168, kSentinel}}, // NOLINT - {{8161, 8169, kSentinel}}, - {{8165, 8172, kSentinel}}, - {{kSentinel}}}; // NOLINT -static const uint16_t kEcma262UnCanonicalizeTable0Size = 1005; // NOLINT + kEcma262UnCanonicalizeMultiStrings0[507] = {{{65, 97, kSentinel}}, + {{90, 122, kSentinel}}, + {{181, 924, 956, kSentinel}}, + {{192, 224, kSentinel}}, + {{214, 246, kSentinel}}, + {{216, 248, kSentinel}}, + {{222, 254, kSentinel}}, + {{255, 376, kSentinel}}, + {{256, 257, kSentinel}}, + {{258, 259, kSentinel}}, + {{260, 261, kSentinel}}, + {{262, 263, kSentinel}}, + {{264, 265, kSentinel}}, + {{266, 267, kSentinel}}, + {{268, 269, kSentinel}}, + {{270, 271, kSentinel}}, + {{272, 273, kSentinel}}, + {{274, 275, kSentinel}}, + {{276, 277, kSentinel}}, + {{278, 279, kSentinel}}, + {{280, 281, kSentinel}}, + {{282, 283, kSentinel}}, + {{284, 285, kSentinel}}, + {{286, 287, kSentinel}}, + {{288, 289, kSentinel}}, + {{290, 291, kSentinel}}, + {{292, 293, kSentinel}}, + {{294, 295, kSentinel}}, + {{296, 297, kSentinel}}, + {{298, 299, kSentinel}}, + {{300, 301, kSentinel}}, + {{302, 303, kSentinel}}, + {{306, 307, kSentinel}}, + {{308, 309, kSentinel}}, + {{310, 311, kSentinel}}, + {{313, 314, kSentinel}}, + {{315, 316, kSentinel}}, + {{317, 318, kSentinel}}, + {{319, 320, kSentinel}}, + {{321, 322, kSentinel}}, + {{323, 324, kSentinel}}, + {{325, 326, kSentinel}}, + {{327, 328, kSentinel}}, + {{330, 331, kSentinel}}, + {{332, 333, kSentinel}}, + {{334, 335, kSentinel}}, + {{336, 337, kSentinel}}, + {{338, 339, kSentinel}}, + {{340, 341, kSentinel}}, + {{342, 343, kSentinel}}, + {{344, 345, kSentinel}}, + {{346, 347, kSentinel}}, + {{348, 349, kSentinel}}, + {{350, 351, kSentinel}}, + {{352, 353, kSentinel}}, + {{354, 355, kSentinel}}, + {{356, 357, kSentinel}}, + {{358, 359, kSentinel}}, + {{360, 361, kSentinel}}, + {{362, 363, kSentinel}}, + {{364, 365, kSentinel}}, + {{366, 367, kSentinel}}, + {{368, 369, kSentinel}}, + {{370, 371, kSentinel}}, + {{372, 373, kSentinel}}, + {{374, 375, kSentinel}}, + {{377, 378, kSentinel}}, + {{379, 380, kSentinel}}, + {{381, 382, kSentinel}}, + {{384, 579, kSentinel}}, + {{385, 595, kSentinel}}, + {{386, 387, kSentinel}}, + {{388, 389, kSentinel}}, + {{390, 596, kSentinel}}, + {{391, 392, kSentinel}}, + {{393, 598, kSentinel}}, + {{394, 599, kSentinel}}, + {{395, 396, kSentinel}}, + {{398, 477, kSentinel}}, + {{399, 601, kSentinel}}, + {{400, 603, kSentinel}}, + {{401, 402, kSentinel}}, + {{403, 608, kSentinel}}, + {{404, 611, kSentinel}}, + {{405, 502, kSentinel}}, + {{406, 617, kSentinel}}, + {{407, 616, kSentinel}}, + {{408, 409, kSentinel}}, + {{410, 573, kSentinel}}, + {{412, 623, kSentinel}}, + {{413, 626, kSentinel}}, + {{414, 544, kSentinel}}, + {{415, 629, kSentinel}}, + {{416, 417, kSentinel}}, + {{418, 419, kSentinel}}, + {{420, 421, kSentinel}}, + {{422, 640, kSentinel}}, + {{423, 424, kSentinel}}, + {{425, 643, kSentinel}}, + {{428, 429, kSentinel}}, + {{430, 648, kSentinel}}, + {{431, 432, kSentinel}}, + {{433, 650, kSentinel}}, + {{434, 651, kSentinel}}, + {{435, 436, kSentinel}}, + {{437, 438, kSentinel}}, + {{439, 658, kSentinel}}, + {{440, 441, kSentinel}}, + {{444, 445, kSentinel}}, + {{447, 503, kSentinel}}, + {{452, 453, 454, kSentinel}}, + {{455, 456, 457, kSentinel}}, + {{458, 459, 460, kSentinel}}, + {{461, 462, kSentinel}}, + {{463, 464, kSentinel}}, + {{465, 466, kSentinel}}, + {{467, 468, kSentinel}}, + {{469, 470, kSentinel}}, + {{471, 472, kSentinel}}, + {{473, 474, kSentinel}}, + {{475, 476, kSentinel}}, + {{478, 479, kSentinel}}, + {{480, 481, kSentinel}}, + {{482, 483, kSentinel}}, + {{484, 485, kSentinel}}, + {{486, 487, kSentinel}}, + {{488, 489, kSentinel}}, + {{490, 491, kSentinel}}, + {{492, 493, kSentinel}}, + {{494, 495, kSentinel}}, + {{497, 498, 499, kSentinel}}, + {{500, 501, kSentinel}}, + {{504, 505, kSentinel}}, + {{506, 507, kSentinel}}, + {{508, 509, kSentinel}}, + {{510, 511, kSentinel}}, + {{512, 513, kSentinel}}, + {{514, 515, kSentinel}}, + {{516, 517, kSentinel}}, + {{518, 519, kSentinel}}, + {{520, 521, kSentinel}}, + {{522, 523, kSentinel}}, + {{524, 525, kSentinel}}, + {{526, 527, kSentinel}}, + {{528, 529, kSentinel}}, + {{530, 531, kSentinel}}, + {{532, 533, kSentinel}}, + {{534, 535, kSentinel}}, + {{536, 537, kSentinel}}, + {{538, 539, kSentinel}}, + {{540, 541, kSentinel}}, + {{542, 543, kSentinel}}, + {{546, 547, kSentinel}}, + {{548, 549, kSentinel}}, + {{550, 551, kSentinel}}, + {{552, 553, kSentinel}}, + {{554, 555, kSentinel}}, + {{556, 557, kSentinel}}, + {{558, 559, kSentinel}}, + {{560, 561, kSentinel}}, + {{562, 563, kSentinel}}, + {{570, 11365, kSentinel}}, + {{571, 572, kSentinel}}, + {{574, 11366, kSentinel}}, + {{575, 11390, kSentinel}}, + {{576, 11391, kSentinel}}, + {{577, 578, kSentinel}}, + {{580, 649, kSentinel}}, + {{581, 652, kSentinel}}, + {{582, 583, kSentinel}}, + {{584, 585, kSentinel}}, + {{586, 587, kSentinel}}, + {{588, 589, kSentinel}}, + {{590, 591, kSentinel}}, + {{592, 11375, kSentinel}}, + {{593, 11373, kSentinel}}, + {{594, 11376, kSentinel}}, + {{604, 42923, kSentinel}}, + {{609, 42924, kSentinel}}, + {{613, 42893, kSentinel}}, + {{614, 42922, kSentinel}}, + {{619, 11362, kSentinel}}, + {{620, 42925, kSentinel}}, + {{625, 11374, kSentinel}}, + {{637, 11364, kSentinel}}, + {{647, 42929, kSentinel}}, + {{670, 42928, kSentinel}}, + {{837, 921, 953, 8126}}, + {{880, 881, kSentinel}}, + {{882, 883, kSentinel}}, + {{886, 887, kSentinel}}, + {{891, 1021, kSentinel}}, + {{893, 1023, kSentinel}}, + {{895, 1011, kSentinel}}, + {{902, 940, kSentinel}}, + {{904, 941, kSentinel}}, + {{906, 943, kSentinel}}, + {{908, 972, kSentinel}}, + {{910, 973, kSentinel}}, + {{911, 974, kSentinel}}, + {{913, 945, kSentinel}}, + {{914, 946, 976, kSentinel}}, + {{915, 947, kSentinel}}, + {{916, 948, kSentinel}}, + {{917, 949, 1013, kSentinel}}, + {{918, 950, kSentinel}}, + {{919, 951, kSentinel}}, + {{920, 952, 977, kSentinel}}, + {{922, 954, 1008, kSentinel}}, + {{923, 955, kSentinel}}, + {{925, 957, kSentinel}}, + {{927, 959, kSentinel}}, + {{928, 960, 982, kSentinel}}, + {{929, 961, 1009, kSentinel}}, + {{931, 962, 963, kSentinel}}, + {{932, 964, kSentinel}}, + {{933, 965, kSentinel}}, + {{934, 966, 981, kSentinel}}, + {{935, 967, kSentinel}}, + {{939, 971, kSentinel}}, + {{975, 983, kSentinel}}, + {{984, 985, kSentinel}}, + {{986, 987, kSentinel}}, + {{988, 989, kSentinel}}, + {{990, 991, kSentinel}}, + {{992, 993, kSentinel}}, + {{994, 995, kSentinel}}, + {{996, 997, kSentinel}}, + {{998, 999, kSentinel}}, + {{1000, 1001, kSentinel}}, + {{1002, 1003, kSentinel}}, + {{1004, 1005, kSentinel}}, + {{1006, 1007, kSentinel}}, + {{1010, 1017, kSentinel}}, + {{1015, 1016, kSentinel}}, + {{1018, 1019, kSentinel}}, + {{1024, 1104, kSentinel}}, + {{1039, 1119, kSentinel}}, + {{1040, 1072, kSentinel}}, + {{1071, 1103, kSentinel}}, + {{1120, 1121, kSentinel}}, + {{1122, 1123, kSentinel}}, + {{1124, 1125, kSentinel}}, + {{1126, 1127, kSentinel}}, + {{1128, 1129, kSentinel}}, + {{1130, 1131, kSentinel}}, + {{1132, 1133, kSentinel}}, + {{1134, 1135, kSentinel}}, + {{1136, 1137, kSentinel}}, + {{1138, 1139, kSentinel}}, + {{1140, 1141, kSentinel}}, + {{1142, 1143, kSentinel}}, + {{1144, 1145, kSentinel}}, + {{1146, 1147, kSentinel}}, + {{1148, 1149, kSentinel}}, + {{1150, 1151, kSentinel}}, + {{1152, 1153, kSentinel}}, + {{1162, 1163, kSentinel}}, + {{1164, 1165, kSentinel}}, + {{1166, 1167, kSentinel}}, + {{1168, 1169, kSentinel}}, + {{1170, 1171, kSentinel}}, + {{1172, 1173, kSentinel}}, + {{1174, 1175, kSentinel}}, + {{1176, 1177, kSentinel}}, + {{1178, 1179, kSentinel}}, + {{1180, 1181, kSentinel}}, + {{1182, 1183, kSentinel}}, + {{1184, 1185, kSentinel}}, + {{1186, 1187, kSentinel}}, + {{1188, 1189, kSentinel}}, + {{1190, 1191, kSentinel}}, + {{1192, 1193, kSentinel}}, + {{1194, 1195, kSentinel}}, + {{1196, 1197, kSentinel}}, + {{1198, 1199, kSentinel}}, + {{1200, 1201, kSentinel}}, + {{1202, 1203, kSentinel}}, + {{1204, 1205, kSentinel}}, + {{1206, 1207, kSentinel}}, + {{1208, 1209, kSentinel}}, + {{1210, 1211, kSentinel}}, + {{1212, 1213, kSentinel}}, + {{1214, 1215, kSentinel}}, + {{1216, 1231, kSentinel}}, + {{1217, 1218, kSentinel}}, + {{1219, 1220, kSentinel}}, + {{1221, 1222, kSentinel}}, + {{1223, 1224, kSentinel}}, + {{1225, 1226, kSentinel}}, + {{1227, 1228, kSentinel}}, + {{1229, 1230, kSentinel}}, + {{1232, 1233, kSentinel}}, + {{1234, 1235, kSentinel}}, + {{1236, 1237, kSentinel}}, + {{1238, 1239, kSentinel}}, + {{1240, 1241, kSentinel}}, + {{1242, 1243, kSentinel}}, + {{1244, 1245, kSentinel}}, + {{1246, 1247, kSentinel}}, + {{1248, 1249, kSentinel}}, + {{1250, 1251, kSentinel}}, + {{1252, 1253, kSentinel}}, + {{1254, 1255, kSentinel}}, + {{1256, 1257, kSentinel}}, + {{1258, 1259, kSentinel}}, + {{1260, 1261, kSentinel}}, + {{1262, 1263, kSentinel}}, + {{1264, 1265, kSentinel}}, + {{1266, 1267, kSentinel}}, + {{1268, 1269, kSentinel}}, + {{1270, 1271, kSentinel}}, + {{1272, 1273, kSentinel}}, + {{1274, 1275, kSentinel}}, + {{1276, 1277, kSentinel}}, + {{1278, 1279, kSentinel}}, + {{1280, 1281, kSentinel}}, + {{1282, 1283, kSentinel}}, + {{1284, 1285, kSentinel}}, + {{1286, 1287, kSentinel}}, + {{1288, 1289, kSentinel}}, + {{1290, 1291, kSentinel}}, + {{1292, 1293, kSentinel}}, + {{1294, 1295, kSentinel}}, + {{1296, 1297, kSentinel}}, + {{1298, 1299, kSentinel}}, + {{1300, 1301, kSentinel}}, + {{1302, 1303, kSentinel}}, + {{1304, 1305, kSentinel}}, + {{1306, 1307, kSentinel}}, + {{1308, 1309, kSentinel}}, + {{1310, 1311, kSentinel}}, + {{1312, 1313, kSentinel}}, + {{1314, 1315, kSentinel}}, + {{1316, 1317, kSentinel}}, + {{1318, 1319, kSentinel}}, + {{1320, 1321, kSentinel}}, + {{1322, 1323, kSentinel}}, + {{1324, 1325, kSentinel}}, + {{1326, 1327, kSentinel}}, + {{1329, 1377, kSentinel}}, + {{1366, 1414, kSentinel}}, + {{4256, 11520, kSentinel}}, + {{4293, 11557, kSentinel}}, + {{4295, 11559, kSentinel}}, + {{4301, 11565, kSentinel}}, + {{7545, 42877, kSentinel}}, + {{7549, 11363, kSentinel}}, + {{7680, 7681, kSentinel}}, + {{7682, 7683, kSentinel}}, + {{7684, 7685, kSentinel}}, + {{7686, 7687, kSentinel}}, + {{7688, 7689, kSentinel}}, + {{7690, 7691, kSentinel}}, + {{7692, 7693, kSentinel}}, + {{7694, 7695, kSentinel}}, + {{7696, 7697, kSentinel}}, + {{7698, 7699, kSentinel}}, + {{7700, 7701, kSentinel}}, + {{7702, 7703, kSentinel}}, + {{7704, 7705, kSentinel}}, + {{7706, 7707, kSentinel}}, + {{7708, 7709, kSentinel}}, + {{7710, 7711, kSentinel}}, + {{7712, 7713, kSentinel}}, + {{7714, 7715, kSentinel}}, + {{7716, 7717, kSentinel}}, + {{7718, 7719, kSentinel}}, + {{7720, 7721, kSentinel}}, + {{7722, 7723, kSentinel}}, + {{7724, 7725, kSentinel}}, + {{7726, 7727, kSentinel}}, + {{7728, 7729, kSentinel}}, + {{7730, 7731, kSentinel}}, + {{7732, 7733, kSentinel}}, + {{7734, 7735, kSentinel}}, + {{7736, 7737, kSentinel}}, + {{7738, 7739, kSentinel}}, + {{7740, 7741, kSentinel}}, + {{7742, 7743, kSentinel}}, + {{7744, 7745, kSentinel}}, + {{7746, 7747, kSentinel}}, + {{7748, 7749, kSentinel}}, + {{7750, 7751, kSentinel}}, + {{7752, 7753, kSentinel}}, + {{7754, 7755, kSentinel}}, + {{7756, 7757, kSentinel}}, + {{7758, 7759, kSentinel}}, + {{7760, 7761, kSentinel}}, + {{7762, 7763, kSentinel}}, + {{7764, 7765, kSentinel}}, + {{7766, 7767, kSentinel}}, + {{7768, 7769, kSentinel}}, + {{7770, 7771, kSentinel}}, + {{7772, 7773, kSentinel}}, + {{7774, 7775, kSentinel}}, + {{7776, 7777, 7835, kSentinel}}, + {{7778, 7779, kSentinel}}, + {{7780, 7781, kSentinel}}, + {{7782, 7783, kSentinel}}, + {{7784, 7785, kSentinel}}, + {{7786, 7787, kSentinel}}, + {{7788, 7789, kSentinel}}, + {{7790, 7791, kSentinel}}, + {{7792, 7793, kSentinel}}, + {{7794, 7795, kSentinel}}, + {{7796, 7797, kSentinel}}, + {{7798, 7799, kSentinel}}, + {{7800, 7801, kSentinel}}, + {{7802, 7803, kSentinel}}, + {{7804, 7805, kSentinel}}, + {{7806, 7807, kSentinel}}, + {{7808, 7809, kSentinel}}, + {{7810, 7811, kSentinel}}, + {{7812, 7813, kSentinel}}, + {{7814, 7815, kSentinel}}, + {{7816, 7817, kSentinel}}, + {{7818, 7819, kSentinel}}, + {{7820, 7821, kSentinel}}, + {{7822, 7823, kSentinel}}, + {{7824, 7825, kSentinel}}, + {{7826, 7827, kSentinel}}, + {{7828, 7829, kSentinel}}, + {{7840, 7841, kSentinel}}, + {{7842, 7843, kSentinel}}, + {{7844, 7845, kSentinel}}, + {{7846, 7847, kSentinel}}, + {{7848, 7849, kSentinel}}, + {{7850, 7851, kSentinel}}, + {{7852, 7853, kSentinel}}, + {{7854, 7855, kSentinel}}, + {{7856, 7857, kSentinel}}, + {{7858, 7859, kSentinel}}, + {{7860, 7861, kSentinel}}, + {{7862, 7863, kSentinel}}, + {{7864, 7865, kSentinel}}, + {{7866, 7867, kSentinel}}, + {{7868, 7869, kSentinel}}, + {{7870, 7871, kSentinel}}, + {{7872, 7873, kSentinel}}, + {{7874, 7875, kSentinel}}, + {{7876, 7877, kSentinel}}, + {{7878, 7879, kSentinel}}, + {{7880, 7881, kSentinel}}, + {{7882, 7883, kSentinel}}, + {{7884, 7885, kSentinel}}, + {{7886, 7887, kSentinel}}, + {{7888, 7889, kSentinel}}, + {{7890, 7891, kSentinel}}, + {{7892, 7893, kSentinel}}, + {{7894, 7895, kSentinel}}, + {{7896, 7897, kSentinel}}, + {{7898, 7899, kSentinel}}, + {{7900, 7901, kSentinel}}, + {{7902, 7903, kSentinel}}, + {{7904, 7905, kSentinel}}, + {{7906, 7907, kSentinel}}, + {{7908, 7909, kSentinel}}, + {{7910, 7911, kSentinel}}, + {{7912, 7913, kSentinel}}, + {{7914, 7915, kSentinel}}, + {{7916, 7917, kSentinel}}, + {{7918, 7919, kSentinel}}, + {{7920, 7921, kSentinel}}, + {{7922, 7923, kSentinel}}, + {{7924, 7925, kSentinel}}, + {{7926, 7927, kSentinel}}, + {{7928, 7929, kSentinel}}, + {{7930, 7931, kSentinel}}, + {{7932, 7933, kSentinel}}, + {{7934, 7935, kSentinel}}, + {{7936, 7944, kSentinel}}, + {{7943, 7951, kSentinel}}, + {{7952, 7960, kSentinel}}, + {{7957, 7965, kSentinel}}, + {{7968, 7976, kSentinel}}, + {{7975, 7983, kSentinel}}, + {{7984, 7992, kSentinel}}, + {{7991, 7999, kSentinel}}, + {{8000, 8008, kSentinel}}, + {{8005, 8013, kSentinel}}, + {{8017, 8025, kSentinel}}, + {{8019, 8027, kSentinel}}, + {{8021, 8029, kSentinel}}, + {{8023, 8031, kSentinel}}, + {{8032, 8040, kSentinel}}, + {{8039, 8047, kSentinel}}, + {{8048, 8122, kSentinel}}, + {{8049, 8123, kSentinel}}, + {{8050, 8136, kSentinel}}, + {{8053, 8139, kSentinel}}, + {{8054, 8154, kSentinel}}, + {{8055, 8155, kSentinel}}, + {{8056, 8184, kSentinel}}, + {{8057, 8185, kSentinel}}, + {{8058, 8170, kSentinel}}, + {{8059, 8171, kSentinel}}, + {{8060, 8186, kSentinel}}, + {{8061, 8187, kSentinel}}, + {{8112, 8120, kSentinel}}, + {{8113, 8121, kSentinel}}, + {{8144, 8152, kSentinel}}, + {{8145, 8153, kSentinel}}, + {{8160, 8168, kSentinel}}, + {{8161, 8169, kSentinel}}, + {{8165, 8172, kSentinel}}, + {{kSentinel}}}; +static const uint16_t kEcma262UnCanonicalizeTable0Size = 1005; static const int32_t kEcma262UnCanonicalizeTable0[2010] = { - 1073741889, 1, 90, 5, 1073741921, 1, - 122, 5, 181, 9, 1073742016, 13, - 214, 17, 1073742040, 21, // NOLINT - 222, 25, 1073742048, 13, 246, 17, - 1073742072, 21, 254, 25, 255, 29, - 256, 33, 257, 33, // NOLINT - 258, 37, 259, 37, 260, 41, - 261, 41, 262, 45, 263, 45, - 264, 49, 265, 49, // NOLINT - 266, 53, 267, 53, 268, 57, - 269, 57, 270, 61, 271, 61, - 272, 65, 273, 65, // NOLINT - 274, 69, 275, 69, 276, 73, - 277, 73, 278, 77, 279, 77, - 280, 81, 281, 81, // NOLINT - 282, 85, 283, 85, 284, 89, - 285, 89, 286, 93, 287, 93, - 288, 97, 289, 97, // NOLINT - 290, 101, 291, 101, 292, 105, - 293, 105, 294, 109, 295, 109, - 296, 113, 297, 113, // NOLINT - 298, 117, 299, 117, 300, 121, - 301, 121, 302, 125, 303, 125, - 306, 129, 307, 129, // NOLINT - 308, 133, 309, 133, 310, 137, - 311, 137, 313, 141, 314, 141, - 315, 145, 316, 145, // NOLINT - 317, 149, 318, 149, 319, 153, - 320, 153, 321, 157, 322, 157, - 323, 161, 324, 161, // NOLINT - 325, 165, 326, 165, 327, 169, - 328, 169, 330, 173, 331, 173, - 332, 177, 333, 177, // NOLINT - 334, 181, 335, 181, 336, 185, - 337, 185, 338, 189, 339, 189, - 340, 193, 341, 193, // NOLINT - 342, 197, 343, 197, 344, 201, - 345, 201, 346, 205, 347, 205, - 348, 209, 349, 209, // NOLINT - 350, 213, 351, 213, 352, 217, - 353, 217, 354, 221, 355, 221, - 356, 225, 357, 225, // NOLINT - 358, 229, 359, 229, 360, 233, - 361, 233, 362, 237, 363, 237, - 364, 241, 365, 241, // NOLINT - 366, 245, 367, 245, 368, 249, - 369, 249, 370, 253, 371, 253, - 372, 257, 373, 257, // NOLINT - 374, 261, 375, 261, 376, 29, - 377, 265, 378, 265, 379, 269, - 380, 269, 381, 273, // NOLINT - 382, 273, 384, 277, 385, 281, - 386, 285, 387, 285, 388, 289, - 389, 289, 390, 293, // NOLINT - 391, 297, 392, 297, 1073742217, 301, - 394, 305, 395, 309, 396, 309, - 398, 313, 399, 317, // NOLINT - 400, 321, 401, 325, 402, 325, - 403, 329, 404, 333, 405, 337, - 406, 341, 407, 345, // NOLINT - 408, 349, 409, 349, 410, 353, - 412, 357, 413, 361, 414, 365, - 415, 369, 416, 373, // NOLINT - 417, 373, 418, 377, 419, 377, - 420, 381, 421, 381, 422, 385, - 423, 389, 424, 389, // NOLINT - 425, 393, 428, 397, 429, 397, - 430, 401, 431, 405, 432, 405, - 1073742257, 409, 434, 413, // NOLINT - 435, 417, 436, 417, 437, 421, - 438, 421, 439, 425, 440, 429, - 441, 429, 444, 433, // NOLINT - 445, 433, 447, 437, 452, 441, - 453, 441, 454, 441, 455, 445, - 456, 445, 457, 445, // NOLINT - 458, 449, 459, 449, 460, 449, - 461, 453, 462, 453, 463, 457, - 464, 457, 465, 461, // NOLINT - 466, 461, 467, 465, 468, 465, - 469, 469, 470, 469, 471, 473, - 472, 473, 473, 477, // NOLINT - 474, 477, 475, 481, 476, 481, - 477, 313, 478, 485, 479, 485, - 480, 489, 481, 489, // NOLINT - 482, 493, 483, 493, 484, 497, - 485, 497, 486, 501, 487, 501, - 488, 505, 489, 505, // NOLINT - 490, 509, 491, 509, 492, 513, - 493, 513, 494, 517, 495, 517, - 497, 521, 498, 521, // NOLINT - 499, 521, 500, 525, 501, 525, - 502, 337, 503, 437, 504, 529, - 505, 529, 506, 533, // NOLINT - 507, 533, 508, 537, 509, 537, - 510, 541, 511, 541, 512, 545, - 513, 545, 514, 549, // NOLINT - 515, 549, 516, 553, 517, 553, - 518, 557, 519, 557, 520, 561, - 521, 561, 522, 565, // NOLINT - 523, 565, 524, 569, 525, 569, - 526, 573, 527, 573, 528, 577, - 529, 577, 530, 581, // NOLINT - 531, 581, 532, 585, 533, 585, - 534, 589, 535, 589, 536, 593, - 537, 593, 538, 597, // NOLINT - 539, 597, 540, 601, 541, 601, - 542, 605, 543, 605, 544, 365, - 546, 609, 547, 609, // NOLINT - 548, 613, 549, 613, 550, 617, - 551, 617, 552, 621, 553, 621, - 554, 625, 555, 625, // NOLINT - 556, 629, 557, 629, 558, 633, - 559, 633, 560, 637, 561, 637, - 562, 641, 563, 641, // NOLINT - 570, 645, 571, 649, 572, 649, - 573, 353, 574, 653, 1073742399, 657, - 576, 661, 577, 665, // NOLINT - 578, 665, 579, 277, 580, 669, - 581, 673, 582, 677, 583, 677, - 584, 681, 585, 681, // NOLINT - 586, 685, 587, 685, 588, 689, - 589, 689, 590, 693, 591, 693, - 592, 697, 593, 701, // NOLINT - 594, 705, 595, 281, 596, 293, - 1073742422, 301, 599, 305, 601, 317, - 603, 321, 604, 709, // NOLINT - 608, 329, 609, 713, 611, 333, - 613, 717, 614, 721, 616, 345, - 617, 341, 619, 725, // NOLINT - 620, 729, 623, 357, 625, 733, - 626, 361, 629, 369, 637, 737, - 640, 385, 643, 393, // NOLINT - 647, 741, 648, 401, 649, 669, - 1073742474, 409, 651, 413, 652, 673, - 658, 425, 670, 745, // NOLINT - 837, 749, 880, 753, 881, 753, - 882, 757, 883, 757, 886, 761, - 887, 761, 1073742715, 765, // NOLINT - 893, 769, 895, 773, 902, 777, - 1073742728, 781, 906, 785, 908, 789, - 1073742734, 793, 911, 797, // NOLINT - 913, 801, 914, 805, 1073742739, 809, - 916, 813, 917, 817, 1073742742, 821, - 919, 825, 920, 829, // NOLINT - 921, 749, 922, 833, 923, 837, - 924, 9, 1073742749, 841, 927, 845, - 928, 849, 929, 853, // NOLINT - 931, 857, 1073742756, 861, 933, 865, - 934, 869, 1073742759, 873, 939, 877, - 940, 777, 1073742765, 781, // NOLINT - 943, 785, 945, 801, 946, 805, - 1073742771, 809, 948, 813, 949, 817, - 1073742774, 821, 951, 825, // NOLINT - 952, 829, 953, 749, 954, 833, - 955, 837, 956, 9, 1073742781, 841, - 959, 845, 960, 849, // NOLINT - 961, 853, 962, 857, 963, 857, - 1073742788, 861, 965, 865, 966, 869, - 1073742791, 873, 971, 877, // NOLINT - 972, 789, 1073742797, 793, 974, 797, - 975, 881, 976, 805, 977, 829, - 981, 869, 982, 849, // NOLINT - 983, 881, 984, 885, 985, 885, - 986, 889, 987, 889, 988, 893, - 989, 893, 990, 897, // NOLINT - 991, 897, 992, 901, 993, 901, - 994, 905, 995, 905, 996, 909, - 997, 909, 998, 913, // NOLINT - 999, 913, 1000, 917, 1001, 917, - 1002, 921, 1003, 921, 1004, 925, - 1005, 925, 1006, 929, // NOLINT - 1007, 929, 1008, 833, 1009, 853, - 1010, 933, 1011, 773, 1013, 817, - 1015, 937, 1016, 937, // NOLINT - 1017, 933, 1018, 941, 1019, 941, - 1073742845, 765, 1023, 769, 1073742848, 945, - 1039, 949, 1073742864, 953, // NOLINT - 1071, 957, 1073742896, 953, 1103, 957, - 1073742928, 945, 1119, 949, 1120, 961, - 1121, 961, 1122, 965, // NOLINT - 1123, 965, 1124, 969, 1125, 969, - 1126, 973, 1127, 973, 1128, 977, - 1129, 977, 1130, 981, // NOLINT - 1131, 981, 1132, 985, 1133, 985, - 1134, 989, 1135, 989, 1136, 993, - 1137, 993, 1138, 997, // NOLINT - 1139, 997, 1140, 1001, 1141, 1001, - 1142, 1005, 1143, 1005, 1144, 1009, - 1145, 1009, 1146, 1013, // NOLINT - 1147, 1013, 1148, 1017, 1149, 1017, - 1150, 1021, 1151, 1021, 1152, 1025, - 1153, 1025, 1162, 1029, // NOLINT - 1163, 1029, 1164, 1033, 1165, 1033, - 1166, 1037, 1167, 1037, 1168, 1041, - 1169, 1041, 1170, 1045, // NOLINT - 1171, 1045, 1172, 1049, 1173, 1049, - 1174, 1053, 1175, 1053, 1176, 1057, - 1177, 1057, 1178, 1061, // NOLINT - 1179, 1061, 1180, 1065, 1181, 1065, - 1182, 1069, 1183, 1069, 1184, 1073, - 1185, 1073, 1186, 1077, // NOLINT - 1187, 1077, 1188, 1081, 1189, 1081, - 1190, 1085, 1191, 1085, 1192, 1089, - 1193, 1089, 1194, 1093, // NOLINT - 1195, 1093, 1196, 1097, 1197, 1097, - 1198, 1101, 1199, 1101, 1200, 1105, - 1201, 1105, 1202, 1109, // NOLINT - 1203, 1109, 1204, 1113, 1205, 1113, - 1206, 1117, 1207, 1117, 1208, 1121, - 1209, 1121, 1210, 1125, // NOLINT - 1211, 1125, 1212, 1129, 1213, 1129, - 1214, 1133, 1215, 1133, 1216, 1137, - 1217, 1141, 1218, 1141, // NOLINT - 1219, 1145, 1220, 1145, 1221, 1149, - 1222, 1149, 1223, 1153, 1224, 1153, - 1225, 1157, 1226, 1157, // NOLINT - 1227, 1161, 1228, 1161, 1229, 1165, - 1230, 1165, 1231, 1137, 1232, 1169, - 1233, 1169, 1234, 1173, // NOLINT - 1235, 1173, 1236, 1177, 1237, 1177, - 1238, 1181, 1239, 1181, 1240, 1185, - 1241, 1185, 1242, 1189, // NOLINT - 1243, 1189, 1244, 1193, 1245, 1193, - 1246, 1197, 1247, 1197, 1248, 1201, - 1249, 1201, 1250, 1205, // NOLINT - 1251, 1205, 1252, 1209, 1253, 1209, - 1254, 1213, 1255, 1213, 1256, 1217, - 1257, 1217, 1258, 1221, // NOLINT - 1259, 1221, 1260, 1225, 1261, 1225, - 1262, 1229, 1263, 1229, 1264, 1233, - 1265, 1233, 1266, 1237, // NOLINT - 1267, 1237, 1268, 1241, 1269, 1241, - 1270, 1245, 1271, 1245, 1272, 1249, - 1273, 1249, 1274, 1253, // NOLINT - 1275, 1253, 1276, 1257, 1277, 1257, - 1278, 1261, 1279, 1261, 1280, 1265, - 1281, 1265, 1282, 1269, // NOLINT - 1283, 1269, 1284, 1273, 1285, 1273, - 1286, 1277, 1287, 1277, 1288, 1281, - 1289, 1281, 1290, 1285, // NOLINT - 1291, 1285, 1292, 1289, 1293, 1289, - 1294, 1293, 1295, 1293, 1296, 1297, - 1297, 1297, 1298, 1301, // NOLINT - 1299, 1301, 1300, 1305, 1301, 1305, - 1302, 1309, 1303, 1309, 1304, 1313, - 1305, 1313, 1306, 1317, // NOLINT - 1307, 1317, 1308, 1321, 1309, 1321, - 1310, 1325, 1311, 1325, 1312, 1329, - 1313, 1329, 1314, 1333, // NOLINT - 1315, 1333, 1316, 1337, 1317, 1337, - 1318, 1341, 1319, 1341, 1320, 1345, - 1321, 1345, 1322, 1349, // NOLINT - 1323, 1349, 1324, 1353, 1325, 1353, - 1326, 1357, 1327, 1357, 1073743153, 1361, - 1366, 1365, 1073743201, 1361, // NOLINT - 1414, 1365, 1073746080, 1369, 4293, 1373, - 4295, 1377, 4301, 1381, 7545, 1385, - 7549, 1389, 7680, 1393, // NOLINT - 7681, 1393, 7682, 1397, 7683, 1397, - 7684, 1401, 7685, 1401, 7686, 1405, - 7687, 1405, 7688, 1409, // NOLINT - 7689, 1409, 7690, 1413, 7691, 1413, - 7692, 1417, 7693, 1417, 7694, 1421, - 7695, 1421, 7696, 1425, // NOLINT - 7697, 1425, 7698, 1429, 7699, 1429, - 7700, 1433, 7701, 1433, 7702, 1437, - 7703, 1437, 7704, 1441, // NOLINT - 7705, 1441, 7706, 1445, 7707, 1445, - 7708, 1449, 7709, 1449, 7710, 1453, - 7711, 1453, 7712, 1457, // NOLINT - 7713, 1457, 7714, 1461, 7715, 1461, - 7716, 1465, 7717, 1465, 7718, 1469, - 7719, 1469, 7720, 1473, // NOLINT - 7721, 1473, 7722, 1477, 7723, 1477, - 7724, 1481, 7725, 1481, 7726, 1485, - 7727, 1485, 7728, 1489, // NOLINT - 7729, 1489, 7730, 1493, 7731, 1493, - 7732, 1497, 7733, 1497, 7734, 1501, - 7735, 1501, 7736, 1505, // NOLINT - 7737, 1505, 7738, 1509, 7739, 1509, - 7740, 1513, 7741, 1513, 7742, 1517, - 7743, 1517, 7744, 1521, // NOLINT - 7745, 1521, 7746, 1525, 7747, 1525, - 7748, 1529, 7749, 1529, 7750, 1533, - 7751, 1533, 7752, 1537, // NOLINT - 7753, 1537, 7754, 1541, 7755, 1541, - 7756, 1545, 7757, 1545, 7758, 1549, - 7759, 1549, 7760, 1553, // NOLINT - 7761, 1553, 7762, 1557, 7763, 1557, - 7764, 1561, 7765, 1561, 7766, 1565, - 7767, 1565, 7768, 1569, // NOLINT - 7769, 1569, 7770, 1573, 7771, 1573, - 7772, 1577, 7773, 1577, 7774, 1581, - 7775, 1581, 7776, 1585, // NOLINT - 7777, 1585, 7778, 1589, 7779, 1589, - 7780, 1593, 7781, 1593, 7782, 1597, - 7783, 1597, 7784, 1601, // NOLINT - 7785, 1601, 7786, 1605, 7787, 1605, - 7788, 1609, 7789, 1609, 7790, 1613, - 7791, 1613, 7792, 1617, // NOLINT - 7793, 1617, 7794, 1621, 7795, 1621, - 7796, 1625, 7797, 1625, 7798, 1629, - 7799, 1629, 7800, 1633, // NOLINT - 7801, 1633, 7802, 1637, 7803, 1637, - 7804, 1641, 7805, 1641, 7806, 1645, - 7807, 1645, 7808, 1649, // NOLINT - 7809, 1649, 7810, 1653, 7811, 1653, - 7812, 1657, 7813, 1657, 7814, 1661, - 7815, 1661, 7816, 1665, // NOLINT - 7817, 1665, 7818, 1669, 7819, 1669, - 7820, 1673, 7821, 1673, 7822, 1677, - 7823, 1677, 7824, 1681, // NOLINT - 7825, 1681, 7826, 1685, 7827, 1685, - 7828, 1689, 7829, 1689, 7835, 1585, - 7840, 1693, 7841, 1693, // NOLINT - 7842, 1697, 7843, 1697, 7844, 1701, - 7845, 1701, 7846, 1705, 7847, 1705, - 7848, 1709, 7849, 1709, // NOLINT - 7850, 1713, 7851, 1713, 7852, 1717, - 7853, 1717, 7854, 1721, 7855, 1721, - 7856, 1725, 7857, 1725, // NOLINT - 7858, 1729, 7859, 1729, 7860, 1733, - 7861, 1733, 7862, 1737, 7863, 1737, - 7864, 1741, 7865, 1741, // NOLINT - 7866, 1745, 7867, 1745, 7868, 1749, - 7869, 1749, 7870, 1753, 7871, 1753, - 7872, 1757, 7873, 1757, // NOLINT - 7874, 1761, 7875, 1761, 7876, 1765, - 7877, 1765, 7878, 1769, 7879, 1769, - 7880, 1773, 7881, 1773, // NOLINT - 7882, 1777, 7883, 1777, 7884, 1781, - 7885, 1781, 7886, 1785, 7887, 1785, - 7888, 1789, 7889, 1789, // NOLINT - 7890, 1793, 7891, 1793, 7892, 1797, - 7893, 1797, 7894, 1801, 7895, 1801, - 7896, 1805, 7897, 1805, // NOLINT - 7898, 1809, 7899, 1809, 7900, 1813, - 7901, 1813, 7902, 1817, 7903, 1817, - 7904, 1821, 7905, 1821, // NOLINT - 7906, 1825, 7907, 1825, 7908, 1829, - 7909, 1829, 7910, 1833, 7911, 1833, - 7912, 1837, 7913, 1837, // NOLINT - 7914, 1841, 7915, 1841, 7916, 1845, - 7917, 1845, 7918, 1849, 7919, 1849, - 7920, 1853, 7921, 1853, // NOLINT - 7922, 1857, 7923, 1857, 7924, 1861, - 7925, 1861, 7926, 1865, 7927, 1865, - 7928, 1869, 7929, 1869, // NOLINT - 7930, 1873, 7931, 1873, 7932, 1877, - 7933, 1877, 7934, 1881, 7935, 1881, - 1073749760, 1885, 7943, 1889, // NOLINT - 1073749768, 1885, 7951, 1889, 1073749776, 1893, - 7957, 1897, 1073749784, 1893, 7965, 1897, - 1073749792, 1901, 7975, 1905, // NOLINT - 1073749800, 1901, 7983, 1905, 1073749808, 1909, - 7991, 1913, 1073749816, 1909, 7999, 1913, - 1073749824, 1917, 8005, 1921, // NOLINT - 1073749832, 1917, 8013, 1921, 8017, 1925, - 8019, 1929, 8021, 1933, 8023, 1937, - 8025, 1925, 8027, 1929, // NOLINT - 8029, 1933, 8031, 1937, 1073749856, 1941, - 8039, 1945, 1073749864, 1941, 8047, 1945, - 1073749872, 1949, 8049, 1953, // NOLINT - 1073749874, 1957, 8053, 1961, 1073749878, 1965, - 8055, 1969, 1073749880, 1973, 8057, 1977, - 1073749882, 1981, 8059, 1985, // NOLINT - 1073749884, 1989, 8061, 1993, 1073749936, 1997, - 8113, 2001, 1073749944, 1997, 8121, 2001, - 1073749946, 1949, 8123, 1953, // NOLINT - 8126, 749, 1073749960, 1957, 8139, 1961, - 1073749968, 2005, 8145, 2009, 1073749976, 2005, - 8153, 2009, 1073749978, 1965, // NOLINT - 8155, 1969, 1073749984, 2013, 8161, 2017, - 8165, 2021, 1073749992, 2013, 8169, 2017, - 1073749994, 1981, 8171, 1985, // NOLINT - 8172, 2021, 1073750008, 1973, 8185, 1977, - 1073750010, 1989, 8187, 1993}; // NOLINT -static const uint16_t kEcma262UnCanonicalizeMultiStrings0Size = 507; // NOLINT + 1073741889, 1, 90, 5, 1073741921, 1, 122, 5, + 181, 9, 1073742016, 13, 214, 17, 1073742040, 21, + 222, 25, 1073742048, 13, 246, 17, 1073742072, 21, + 254, 25, 255, 29, 256, 33, 257, 33, + 258, 37, 259, 37, 260, 41, 261, 41, + 262, 45, 263, 45, 264, 49, 265, 49, + 266, 53, 267, 53, 268, 57, 269, 57, + 270, 61, 271, 61, 272, 65, 273, 65, + 274, 69, 275, 69, 276, 73, 277, 73, + 278, 77, 279, 77, 280, 81, 281, 81, + 282, 85, 283, 85, 284, 89, 285, 89, + 286, 93, 287, 93, 288, 97, 289, 97, + 290, 101, 291, 101, 292, 105, 293, 105, + 294, 109, 295, 109, 296, 113, 297, 113, + 298, 117, 299, 117, 300, 121, 301, 121, + 302, 125, 303, 125, 306, 129, 307, 129, + 308, 133, 309, 133, 310, 137, 311, 137, + 313, 141, 314, 141, 315, 145, 316, 145, + 317, 149, 318, 149, 319, 153, 320, 153, + 321, 157, 322, 157, 323, 161, 324, 161, + 325, 165, 326, 165, 327, 169, 328, 169, + 330, 173, 331, 173, 332, 177, 333, 177, + 334, 181, 335, 181, 336, 185, 337, 185, + 338, 189, 339, 189, 340, 193, 341, 193, + 342, 197, 343, 197, 344, 201, 345, 201, + 346, 205, 347, 205, 348, 209, 349, 209, + 350, 213, 351, 213, 352, 217, 353, 217, + 354, 221, 355, 221, 356, 225, 357, 225, + 358, 229, 359, 229, 360, 233, 361, 233, + 362, 237, 363, 237, 364, 241, 365, 241, + 366, 245, 367, 245, 368, 249, 369, 249, + 370, 253, 371, 253, 372, 257, 373, 257, + 374, 261, 375, 261, 376, 29, 377, 265, + 378, 265, 379, 269, 380, 269, 381, 273, + 382, 273, 384, 277, 385, 281, 386, 285, + 387, 285, 388, 289, 389, 289, 390, 293, + 391, 297, 392, 297, 1073742217, 301, 394, 305, + 395, 309, 396, 309, 398, 313, 399, 317, + 400, 321, 401, 325, 402, 325, 403, 329, + 404, 333, 405, 337, 406, 341, 407, 345, + 408, 349, 409, 349, 410, 353, 412, 357, + 413, 361, 414, 365, 415, 369, 416, 373, + 417, 373, 418, 377, 419, 377, 420, 381, + 421, 381, 422, 385, 423, 389, 424, 389, + 425, 393, 428, 397, 429, 397, 430, 401, + 431, 405, 432, 405, 1073742257, 409, 434, 413, + 435, 417, 436, 417, 437, 421, 438, 421, + 439, 425, 440, 429, 441, 429, 444, 433, + 445, 433, 447, 437, 452, 441, 453, 441, + 454, 441, 455, 445, 456, 445, 457, 445, + 458, 449, 459, 449, 460, 449, 461, 453, + 462, 453, 463, 457, 464, 457, 465, 461, + 466, 461, 467, 465, 468, 465, 469, 469, + 470, 469, 471, 473, 472, 473, 473, 477, + 474, 477, 475, 481, 476, 481, 477, 313, + 478, 485, 479, 485, 480, 489, 481, 489, + 482, 493, 483, 493, 484, 497, 485, 497, + 486, 501, 487, 501, 488, 505, 489, 505, + 490, 509, 491, 509, 492, 513, 493, 513, + 494, 517, 495, 517, 497, 521, 498, 521, + 499, 521, 500, 525, 501, 525, 502, 337, + 503, 437, 504, 529, 505, 529, 506, 533, + 507, 533, 508, 537, 509, 537, 510, 541, + 511, 541, 512, 545, 513, 545, 514, 549, + 515, 549, 516, 553, 517, 553, 518, 557, + 519, 557, 520, 561, 521, 561, 522, 565, + 523, 565, 524, 569, 525, 569, 526, 573, + 527, 573, 528, 577, 529, 577, 530, 581, + 531, 581, 532, 585, 533, 585, 534, 589, + 535, 589, 536, 593, 537, 593, 538, 597, + 539, 597, 540, 601, 541, 601, 542, 605, + 543, 605, 544, 365, 546, 609, 547, 609, + 548, 613, 549, 613, 550, 617, 551, 617, + 552, 621, 553, 621, 554, 625, 555, 625, + 556, 629, 557, 629, 558, 633, 559, 633, + 560, 637, 561, 637, 562, 641, 563, 641, + 570, 645, 571, 649, 572, 649, 573, 353, + 574, 653, 1073742399, 657, 576, 661, 577, 665, + 578, 665, 579, 277, 580, 669, 581, 673, + 582, 677, 583, 677, 584, 681, 585, 681, + 586, 685, 587, 685, 588, 689, 589, 689, + 590, 693, 591, 693, 592, 697, 593, 701, + 594, 705, 595, 281, 596, 293, 1073742422, 301, + 599, 305, 601, 317, 603, 321, 604, 709, + 608, 329, 609, 713, 611, 333, 613, 717, + 614, 721, 616, 345, 617, 341, 619, 725, + 620, 729, 623, 357, 625, 733, 626, 361, + 629, 369, 637, 737, 640, 385, 643, 393, + 647, 741, 648, 401, 649, 669, 1073742474, 409, + 651, 413, 652, 673, 658, 425, 670, 745, + 837, 749, 880, 753, 881, 753, 882, 757, + 883, 757, 886, 761, 887, 761, 1073742715, 765, + 893, 769, 895, 773, 902, 777, 1073742728, 781, + 906, 785, 908, 789, 1073742734, 793, 911, 797, + 913, 801, 914, 805, 1073742739, 809, 916, 813, + 917, 817, 1073742742, 821, 919, 825, 920, 829, + 921, 749, 922, 833, 923, 837, 924, 9, + 1073742749, 841, 927, 845, 928, 849, 929, 853, + 931, 857, 1073742756, 861, 933, 865, 934, 869, + 1073742759, 873, 939, 877, 940, 777, 1073742765, 781, + 943, 785, 945, 801, 946, 805, 1073742771, 809, + 948, 813, 949, 817, 1073742774, 821, 951, 825, + 952, 829, 953, 749, 954, 833, 955, 837, + 956, 9, 1073742781, 841, 959, 845, 960, 849, + 961, 853, 962, 857, 963, 857, 1073742788, 861, + 965, 865, 966, 869, 1073742791, 873, 971, 877, + 972, 789, 1073742797, 793, 974, 797, 975, 881, + 976, 805, 977, 829, 981, 869, 982, 849, + 983, 881, 984, 885, 985, 885, 986, 889, + 987, 889, 988, 893, 989, 893, 990, 897, + 991, 897, 992, 901, 993, 901, 994, 905, + 995, 905, 996, 909, 997, 909, 998, 913, + 999, 913, 1000, 917, 1001, 917, 1002, 921, + 1003, 921, 1004, 925, 1005, 925, 1006, 929, + 1007, 929, 1008, 833, 1009, 853, 1010, 933, + 1011, 773, 1013, 817, 1015, 937, 1016, 937, + 1017, 933, 1018, 941, 1019, 941, 1073742845, 765, + 1023, 769, 1073742848, 945, 1039, 949, 1073742864, 953, + 1071, 957, 1073742896, 953, 1103, 957, 1073742928, 945, + 1119, 949, 1120, 961, 1121, 961, 1122, 965, + 1123, 965, 1124, 969, 1125, 969, 1126, 973, + 1127, 973, 1128, 977, 1129, 977, 1130, 981, + 1131, 981, 1132, 985, 1133, 985, 1134, 989, + 1135, 989, 1136, 993, 1137, 993, 1138, 997, + 1139, 997, 1140, 1001, 1141, 1001, 1142, 1005, + 1143, 1005, 1144, 1009, 1145, 1009, 1146, 1013, + 1147, 1013, 1148, 1017, 1149, 1017, 1150, 1021, + 1151, 1021, 1152, 1025, 1153, 1025, 1162, 1029, + 1163, 1029, 1164, 1033, 1165, 1033, 1166, 1037, + 1167, 1037, 1168, 1041, 1169, 1041, 1170, 1045, + 1171, 1045, 1172, 1049, 1173, 1049, 1174, 1053, + 1175, 1053, 1176, 1057, 1177, 1057, 1178, 1061, + 1179, 1061, 1180, 1065, 1181, 1065, 1182, 1069, + 1183, 1069, 1184, 1073, 1185, 1073, 1186, 1077, + 1187, 1077, 1188, 1081, 1189, 1081, 1190, 1085, + 1191, 1085, 1192, 1089, 1193, 1089, 1194, 1093, + 1195, 1093, 1196, 1097, 1197, 1097, 1198, 1101, + 1199, 1101, 1200, 1105, 1201, 1105, 1202, 1109, + 1203, 1109, 1204, 1113, 1205, 1113, 1206, 1117, + 1207, 1117, 1208, 1121, 1209, 1121, 1210, 1125, + 1211, 1125, 1212, 1129, 1213, 1129, 1214, 1133, + 1215, 1133, 1216, 1137, 1217, 1141, 1218, 1141, + 1219, 1145, 1220, 1145, 1221, 1149, 1222, 1149, + 1223, 1153, 1224, 1153, 1225, 1157, 1226, 1157, + 1227, 1161, 1228, 1161, 1229, 1165, 1230, 1165, + 1231, 1137, 1232, 1169, 1233, 1169, 1234, 1173, + 1235, 1173, 1236, 1177, 1237, 1177, 1238, 1181, + 1239, 1181, 1240, 1185, 1241, 1185, 1242, 1189, + 1243, 1189, 1244, 1193, 1245, 1193, 1246, 1197, + 1247, 1197, 1248, 1201, 1249, 1201, 1250, 1205, + 1251, 1205, 1252, 1209, 1253, 1209, 1254, 1213, + 1255, 1213, 1256, 1217, 1257, 1217, 1258, 1221, + 1259, 1221, 1260, 1225, 1261, 1225, 1262, 1229, + 1263, 1229, 1264, 1233, 1265, 1233, 1266, 1237, + 1267, 1237, 1268, 1241, 1269, 1241, 1270, 1245, + 1271, 1245, 1272, 1249, 1273, 1249, 1274, 1253, + 1275, 1253, 1276, 1257, 1277, 1257, 1278, 1261, + 1279, 1261, 1280, 1265, 1281, 1265, 1282, 1269, + 1283, 1269, 1284, 1273, 1285, 1273, 1286, 1277, + 1287, 1277, 1288, 1281, 1289, 1281, 1290, 1285, + 1291, 1285, 1292, 1289, 1293, 1289, 1294, 1293, + 1295, 1293, 1296, 1297, 1297, 1297, 1298, 1301, + 1299, 1301, 1300, 1305, 1301, 1305, 1302, 1309, + 1303, 1309, 1304, 1313, 1305, 1313, 1306, 1317, + 1307, 1317, 1308, 1321, 1309, 1321, 1310, 1325, + 1311, 1325, 1312, 1329, 1313, 1329, 1314, 1333, + 1315, 1333, 1316, 1337, 1317, 1337, 1318, 1341, + 1319, 1341, 1320, 1345, 1321, 1345, 1322, 1349, + 1323, 1349, 1324, 1353, 1325, 1353, 1326, 1357, + 1327, 1357, 1073743153, 1361, 1366, 1365, 1073743201, 1361, + 1414, 1365, 1073746080, 1369, 4293, 1373, 4295, 1377, + 4301, 1381, 7545, 1385, 7549, 1389, 7680, 1393, + 7681, 1393, 7682, 1397, 7683, 1397, 7684, 1401, + 7685, 1401, 7686, 1405, 7687, 1405, 7688, 1409, + 7689, 1409, 7690, 1413, 7691, 1413, 7692, 1417, + 7693, 1417, 7694, 1421, 7695, 1421, 7696, 1425, + 7697, 1425, 7698, 1429, 7699, 1429, 7700, 1433, + 7701, 1433, 7702, 1437, 7703, 1437, 7704, 1441, + 7705, 1441, 7706, 1445, 7707, 1445, 7708, 1449, + 7709, 1449, 7710, 1453, 7711, 1453, 7712, 1457, + 7713, 1457, 7714, 1461, 7715, 1461, 7716, 1465, + 7717, 1465, 7718, 1469, 7719, 1469, 7720, 1473, + 7721, 1473, 7722, 1477, 7723, 1477, 7724, 1481, + 7725, 1481, 7726, 1485, 7727, 1485, 7728, 1489, + 7729, 1489, 7730, 1493, 7731, 1493, 7732, 1497, + 7733, 1497, 7734, 1501, 7735, 1501, 7736, 1505, + 7737, 1505, 7738, 1509, 7739, 1509, 7740, 1513, + 7741, 1513, 7742, 1517, 7743, 1517, 7744, 1521, + 7745, 1521, 7746, 1525, 7747, 1525, 7748, 1529, + 7749, 1529, 7750, 1533, 7751, 1533, 7752, 1537, + 7753, 1537, 7754, 1541, 7755, 1541, 7756, 1545, + 7757, 1545, 7758, 1549, 7759, 1549, 7760, 1553, + 7761, 1553, 7762, 1557, 7763, 1557, 7764, 1561, + 7765, 1561, 7766, 1565, 7767, 1565, 7768, 1569, + 7769, 1569, 7770, 1573, 7771, 1573, 7772, 1577, + 7773, 1577, 7774, 1581, 7775, 1581, 7776, 1585, + 7777, 1585, 7778, 1589, 7779, 1589, 7780, 1593, + 7781, 1593, 7782, 1597, 7783, 1597, 7784, 1601, + 7785, 1601, 7786, 1605, 7787, 1605, 7788, 1609, + 7789, 1609, 7790, 1613, 7791, 1613, 7792, 1617, + 7793, 1617, 7794, 1621, 7795, 1621, 7796, 1625, + 7797, 1625, 7798, 1629, 7799, 1629, 7800, 1633, + 7801, 1633, 7802, 1637, 7803, 1637, 7804, 1641, + 7805, 1641, 7806, 1645, 7807, 1645, 7808, 1649, + 7809, 1649, 7810, 1653, 7811, 1653, 7812, 1657, + 7813, 1657, 7814, 1661, 7815, 1661, 7816, 1665, + 7817, 1665, 7818, 1669, 7819, 1669, 7820, 1673, + 7821, 1673, 7822, 1677, 7823, 1677, 7824, 1681, + 7825, 1681, 7826, 1685, 7827, 1685, 7828, 1689, + 7829, 1689, 7835, 1585, 7840, 1693, 7841, 1693, + 7842, 1697, 7843, 1697, 7844, 1701, 7845, 1701, + 7846, 1705, 7847, 1705, 7848, 1709, 7849, 1709, + 7850, 1713, 7851, 1713, 7852, 1717, 7853, 1717, + 7854, 1721, 7855, 1721, 7856, 1725, 7857, 1725, + 7858, 1729, 7859, 1729, 7860, 1733, 7861, 1733, + 7862, 1737, 7863, 1737, 7864, 1741, 7865, 1741, + 7866, 1745, 7867, 1745, 7868, 1749, 7869, 1749, + 7870, 1753, 7871, 1753, 7872, 1757, 7873, 1757, + 7874, 1761, 7875, 1761, 7876, 1765, 7877, 1765, + 7878, 1769, 7879, 1769, 7880, 1773, 7881, 1773, + 7882, 1777, 7883, 1777, 7884, 1781, 7885, 1781, + 7886, 1785, 7887, 1785, 7888, 1789, 7889, 1789, + 7890, 1793, 7891, 1793, 7892, 1797, 7893, 1797, + 7894, 1801, 7895, 1801, 7896, 1805, 7897, 1805, + 7898, 1809, 7899, 1809, 7900, 1813, 7901, 1813, + 7902, 1817, 7903, 1817, 7904, 1821, 7905, 1821, + 7906, 1825, 7907, 1825, 7908, 1829, 7909, 1829, + 7910, 1833, 7911, 1833, 7912, 1837, 7913, 1837, + 7914, 1841, 7915, 1841, 7916, 1845, 7917, 1845, + 7918, 1849, 7919, 1849, 7920, 1853, 7921, 1853, + 7922, 1857, 7923, 1857, 7924, 1861, 7925, 1861, + 7926, 1865, 7927, 1865, 7928, 1869, 7929, 1869, + 7930, 1873, 7931, 1873, 7932, 1877, 7933, 1877, + 7934, 1881, 7935, 1881, 1073749760, 1885, 7943, 1889, + 1073749768, 1885, 7951, 1889, 1073749776, 1893, 7957, 1897, + 1073749784, 1893, 7965, 1897, 1073749792, 1901, 7975, 1905, + 1073749800, 1901, 7983, 1905, 1073749808, 1909, 7991, 1913, + 1073749816, 1909, 7999, 1913, 1073749824, 1917, 8005, 1921, + 1073749832, 1917, 8013, 1921, 8017, 1925, 8019, 1929, + 8021, 1933, 8023, 1937, 8025, 1925, 8027, 1929, + 8029, 1933, 8031, 1937, 1073749856, 1941, 8039, 1945, + 1073749864, 1941, 8047, 1945, 1073749872, 1949, 8049, 1953, + 1073749874, 1957, 8053, 1961, 1073749878, 1965, 8055, 1969, + 1073749880, 1973, 8057, 1977, 1073749882, 1981, 8059, 1985, + 1073749884, 1989, 8061, 1993, 1073749936, 1997, 8113, 2001, + 1073749944, 1997, 8121, 2001, 1073749946, 1949, 8123, 1953, + 8126, 749, 1073749960, 1957, 8139, 1961, 1073749968, 2005, + 8145, 2009, 1073749976, 2005, 8153, 2009, 1073749978, 1965, + 8155, 1969, 1073749984, 2013, 8161, 2017, 8165, 2021, + 1073749992, 2013, 8169, 2017, 1073749994, 1981, 8171, 1985, + 8172, 2021, 1073750008, 1973, 8185, 1977, 1073750010, 1989, + 8187, 1993}; +static const uint16_t kEcma262UnCanonicalizeMultiStrings0Size = 507; static const MultiCharacterSpecialCase<2> - kEcma262UnCanonicalizeMultiStrings1[83] = { // NOLINT - {{8498, 8526}}, {{8544, 8560}}, {{8559, 8575}}, - {{8579, 8580}}, // NOLINT - {{9398, 9424}}, {{9423, 9449}}, {{11264, 11312}}, - {{11310, 11358}}, // NOLINT - {{11360, 11361}}, {{619, 11362}}, {{7549, 11363}}, - {{637, 11364}}, // NOLINT - {{570, 11365}}, {{574, 11366}}, {{11367, 11368}}, - {{11369, 11370}}, // NOLINT - {{11371, 11372}}, {{593, 11373}}, {{625, 11374}}, - {{592, 11375}}, // NOLINT - {{594, 11376}}, {{11378, 11379}}, {{11381, 11382}}, - {{575, 11390}}, // NOLINT - {{576, 11391}}, {{11392, 11393}}, {{11394, 11395}}, - {{11396, 11397}}, // NOLINT - {{11398, 11399}}, {{11400, 11401}}, {{11402, 11403}}, - {{11404, 11405}}, // NOLINT - {{11406, 11407}}, {{11408, 11409}}, {{11410, 11411}}, - {{11412, 11413}}, // NOLINT - {{11414, 11415}}, {{11416, 11417}}, {{11418, 11419}}, - {{11420, 11421}}, // NOLINT - {{11422, 11423}}, {{11424, 11425}}, {{11426, 11427}}, - {{11428, 11429}}, // NOLINT - {{11430, 11431}}, {{11432, 11433}}, {{11434, 11435}}, - {{11436, 11437}}, // NOLINT - {{11438, 11439}}, {{11440, 11441}}, {{11442, 11443}}, - {{11444, 11445}}, // NOLINT - {{11446, 11447}}, {{11448, 11449}}, {{11450, 11451}}, - {{11452, 11453}}, // NOLINT - {{11454, 11455}}, {{11456, 11457}}, {{11458, 11459}}, - {{11460, 11461}}, // NOLINT - {{11462, 11463}}, {{11464, 11465}}, {{11466, 11467}}, - {{11468, 11469}}, // NOLINT - {{11470, 11471}}, {{11472, 11473}}, {{11474, 11475}}, - {{11476, 11477}}, // NOLINT - {{11478, 11479}}, {{11480, 11481}}, {{11482, 11483}}, - {{11484, 11485}}, // NOLINT - {{11486, 11487}}, {{11488, 11489}}, {{11490, 11491}}, - {{11499, 11500}}, // NOLINT - {{11501, 11502}}, {{11506, 11507}}, {{4256, 11520}}, - {{4293, 11557}}, // NOLINT - {{4295, 11559}}, {{4301, 11565}}, {{kSentinel}}}; // NOLINT -static const uint16_t kEcma262UnCanonicalizeTable1Size = 149; // NOLINT + kEcma262UnCanonicalizeMultiStrings1[83] = { + {{8498, 8526}}, {{8544, 8560}}, {{8559, 8575}}, {{8579, 8580}}, + {{9398, 9424}}, {{9423, 9449}}, {{11264, 11312}}, {{11310, 11358}}, + {{11360, 11361}}, {{619, 11362}}, {{7549, 11363}}, {{637, 11364}}, + {{570, 11365}}, {{574, 11366}}, {{11367, 11368}}, {{11369, 11370}}, + {{11371, 11372}}, {{593, 11373}}, {{625, 11374}}, {{592, 11375}}, + {{594, 11376}}, {{11378, 11379}}, {{11381, 11382}}, {{575, 11390}}, + {{576, 11391}}, {{11392, 11393}}, {{11394, 11395}}, {{11396, 11397}}, + {{11398, 11399}}, {{11400, 11401}}, {{11402, 11403}}, {{11404, 11405}}, + {{11406, 11407}}, {{11408, 11409}}, {{11410, 11411}}, {{11412, 11413}}, + {{11414, 11415}}, {{11416, 11417}}, {{11418, 11419}}, {{11420, 11421}}, + {{11422, 11423}}, {{11424, 11425}}, {{11426, 11427}}, {{11428, 11429}}, + {{11430, 11431}}, {{11432, 11433}}, {{11434, 11435}}, {{11436, 11437}}, + {{11438, 11439}}, {{11440, 11441}}, {{11442, 11443}}, {{11444, 11445}}, + {{11446, 11447}}, {{11448, 11449}}, {{11450, 11451}}, {{11452, 11453}}, + {{11454, 11455}}, {{11456, 11457}}, {{11458, 11459}}, {{11460, 11461}}, + {{11462, 11463}}, {{11464, 11465}}, {{11466, 11467}}, {{11468, 11469}}, + {{11470, 11471}}, {{11472, 11473}}, {{11474, 11475}}, {{11476, 11477}}, + {{11478, 11479}}, {{11480, 11481}}, {{11482, 11483}}, {{11484, 11485}}, + {{11486, 11487}}, {{11488, 11489}}, {{11490, 11491}}, {{11499, 11500}}, + {{11501, 11502}}, {{11506, 11507}}, {{4256, 11520}}, {{4293, 11557}}, + {{4295, 11559}}, {{4301, 11565}}, {{kSentinel}}}; +static const uint16_t kEcma262UnCanonicalizeTable1Size = 149; static const int32_t kEcma262UnCanonicalizeTable1[298] = { 306, 1, 334, 1, 1073742176, 5, 367, 9, - 1073742192, 5, 383, 9, 387, 13, 388, 13, // NOLINT + 1073742192, 5, 383, 9, 387, 13, 388, 13, 1073743030, 17, 1231, 21, 1073743056, 17, 1257, 21, - 1073744896, 25, 3118, 29, 1073744944, 25, 3166, 29, // NOLINT + 1073744896, 25, 3118, 29, 1073744944, 25, 3166, 29, 3168, 33, 3169, 33, 3170, 37, 3171, 41, - 3172, 45, 3173, 49, 3174, 53, 3175, 57, // NOLINT + 3172, 45, 3173, 49, 3174, 53, 3175, 57, 3176, 57, 3177, 61, 3178, 61, 3179, 65, - 3180, 65, 3181, 69, 3182, 73, 3183, 77, // NOLINT + 3180, 65, 3181, 69, 3182, 73, 3183, 77, 3184, 81, 3186, 85, 3187, 85, 3189, 89, - 3190, 89, 1073745022, 93, 3199, 97, 3200, 101, // NOLINT + 3190, 89, 1073745022, 93, 3199, 97, 3200, 101, 3201, 101, 3202, 105, 3203, 105, 3204, 109, - 3205, 109, 3206, 113, 3207, 113, 3208, 117, // NOLINT + 3205, 109, 3206, 113, 3207, 113, 3208, 117, 3209, 117, 3210, 121, 3211, 121, 3212, 125, - 3213, 125, 3214, 129, 3215, 129, 3216, 133, // NOLINT + 3213, 125, 3214, 129, 3215, 129, 3216, 133, 3217, 133, 3218, 137, 3219, 137, 3220, 141, - 3221, 141, 3222, 145, 3223, 145, 3224, 149, // NOLINT + 3221, 141, 3222, 145, 3223, 145, 3224, 149, 3225, 149, 3226, 153, 3227, 153, 3228, 157, - 3229, 157, 3230, 161, 3231, 161, 3232, 165, // NOLINT + 3229, 157, 3230, 161, 3231, 161, 3232, 165, 3233, 165, 3234, 169, 3235, 169, 3236, 173, - 3237, 173, 3238, 177, 3239, 177, 3240, 181, // NOLINT + 3237, 173, 3238, 177, 3239, 177, 3240, 181, 3241, 181, 3242, 185, 3243, 185, 3244, 189, - 3245, 189, 3246, 193, 3247, 193, 3248, 197, // NOLINT + 3245, 189, 3246, 193, 3247, 193, 3248, 197, 3249, 197, 3250, 201, 3251, 201, 3252, 205, - 3253, 205, 3254, 209, 3255, 209, 3256, 213, // NOLINT + 3253, 205, 3254, 209, 3255, 209, 3256, 213, 3257, 213, 3258, 217, 3259, 217, 3260, 221, - 3261, 221, 3262, 225, 3263, 225, 3264, 229, // NOLINT + 3261, 221, 3262, 225, 3263, 225, 3264, 229, 3265, 229, 3266, 233, 3267, 233, 3268, 237, - 3269, 237, 3270, 241, 3271, 241, 3272, 245, // NOLINT + 3269, 237, 3270, 241, 3271, 241, 3272, 245, 3273, 245, 3274, 249, 3275, 249, 3276, 253, - 3277, 253, 3278, 257, 3279, 257, 3280, 261, // NOLINT + 3277, 253, 3278, 257, 3279, 257, 3280, 261, 3281, 261, 3282, 265, 3283, 265, 3284, 269, - 3285, 269, 3286, 273, 3287, 273, 3288, 277, // NOLINT + 3285, 269, 3286, 273, 3287, 273, 3288, 277, 3289, 277, 3290, 281, 3291, 281, 3292, 285, - 3293, 285, 3294, 289, 3295, 289, 3296, 293, // NOLINT + 3293, 285, 3294, 289, 3295, 289, 3296, 293, 3297, 293, 3298, 297, 3299, 297, 3307, 301, - 3308, 301, 3309, 305, 3310, 305, 3314, 309, // NOLINT + 3308, 301, 3309, 305, 3310, 305, 3314, 309, 3315, 309, 1073745152, 313, 3365, 317, 3367, 321, - 3373, 325}; // NOLINT -static const uint16_t kEcma262UnCanonicalizeMultiStrings1Size = 83; // NOLINT + 3373, 325}; +static const uint16_t kEcma262UnCanonicalizeMultiStrings1Size = 83; static const MultiCharacterSpecialCase<2> - kEcma262UnCanonicalizeMultiStrings5[104] = { // NOLINT - {{42560, 42561}}, {{42562, 42563}}, - {{42564, 42565}}, {{42566, 42567}}, // NOLINT - {{42568, 42569}}, {{42570, 42571}}, - {{42572, 42573}}, {{42574, 42575}}, // NOLINT - {{42576, 42577}}, {{42578, 42579}}, - {{42580, 42581}}, {{42582, 42583}}, // NOLINT - {{42584, 42585}}, {{42586, 42587}}, - {{42588, 42589}}, {{42590, 42591}}, // NOLINT - {{42592, 42593}}, {{42594, 42595}}, - {{42596, 42597}}, {{42598, 42599}}, // NOLINT - {{42600, 42601}}, {{42602, 42603}}, - {{42604, 42605}}, {{42624, 42625}}, // NOLINT - {{42626, 42627}}, {{42628, 42629}}, - {{42630, 42631}}, {{42632, 42633}}, // NOLINT - {{42634, 42635}}, {{42636, 42637}}, - {{42638, 42639}}, {{42640, 42641}}, // NOLINT - {{42642, 42643}}, {{42644, 42645}}, - {{42646, 42647}}, {{42648, 42649}}, // NOLINT - {{42650, 42651}}, {{42786, 42787}}, - {{42788, 42789}}, {{42790, 42791}}, // NOLINT - {{42792, 42793}}, {{42794, 42795}}, - {{42796, 42797}}, {{42798, 42799}}, // NOLINT - {{42802, 42803}}, {{42804, 42805}}, - {{42806, 42807}}, {{42808, 42809}}, // NOLINT - {{42810, 42811}}, {{42812, 42813}}, - {{42814, 42815}}, {{42816, 42817}}, // NOLINT - {{42818, 42819}}, {{42820, 42821}}, - {{42822, 42823}}, {{42824, 42825}}, // NOLINT - {{42826, 42827}}, {{42828, 42829}}, - {{42830, 42831}}, {{42832, 42833}}, // NOLINT - {{42834, 42835}}, {{42836, 42837}}, - {{42838, 42839}}, {{42840, 42841}}, // NOLINT - {{42842, 42843}}, {{42844, 42845}}, - {{42846, 42847}}, {{42848, 42849}}, // NOLINT - {{42850, 42851}}, {{42852, 42853}}, - {{42854, 42855}}, {{42856, 42857}}, // NOLINT - {{42858, 42859}}, {{42860, 42861}}, - {{42862, 42863}}, {{42873, 42874}}, // NOLINT - {{42875, 42876}}, {{7545, 42877}}, - {{42878, 42879}}, {{42880, 42881}}, // NOLINT - {{42882, 42883}}, {{42884, 42885}}, - {{42886, 42887}}, {{42891, 42892}}, // NOLINT - {{613, 42893}}, {{42896, 42897}}, - {{42898, 42899}}, {{42902, 42903}}, // NOLINT - {{42904, 42905}}, {{42906, 42907}}, - {{42908, 42909}}, {{42910, 42911}}, // NOLINT - {{42912, 42913}}, {{42914, 42915}}, - {{42916, 42917}}, {{42918, 42919}}, // NOLINT - {{42920, 42921}}, {{614, 42922}}, - {{604, 42923}}, {{609, 42924}}, // NOLINT - {{620, 42925}}, {{670, 42928}}, - {{647, 42929}}, {{kSentinel}}}; // NOLINT -static const uint16_t kEcma262UnCanonicalizeTable5Size = 198; // NOLINT -static const int32_t - kEcma262UnCanonicalizeTable5[396] = - {1600, 1, 1601, 1, 1602, 5, 1603, 5, - 1604, 9, 1605, 9, 1606, 13, 1607, 13, // NOLINT - 1608, 17, 1609, 17, 1610, 21, 1611, 21, - 1612, 25, 1613, 25, 1614, 29, 1615, 29, // NOLINT - 1616, 33, 1617, 33, 1618, 37, 1619, 37, - 1620, 41, 1621, 41, 1622, 45, 1623, 45, // NOLINT - 1624, 49, 1625, 49, 1626, 53, 1627, 53, - 1628, 57, 1629, 57, 1630, 61, 1631, 61, // NOLINT - 1632, 65, 1633, 65, 1634, 69, 1635, 69, - 1636, 73, 1637, 73, 1638, 77, 1639, 77, // NOLINT - 1640, 81, 1641, 81, 1642, 85, 1643, 85, - 1644, 89, 1645, 89, 1664, 93, 1665, 93, // NOLINT - 1666, 97, 1667, 97, 1668, 101, 1669, 101, - 1670, 105, 1671, 105, 1672, 109, 1673, 109, // NOLINT - 1674, 113, 1675, 113, 1676, 117, 1677, 117, - 1678, 121, 1679, 121, 1680, 125, 1681, 125, // NOLINT - 1682, 129, 1683, 129, 1684, 133, 1685, 133, - 1686, 137, 1687, 137, 1688, 141, 1689, 141, // NOLINT - 1690, 145, 1691, 145, 1826, 149, 1827, 149, - 1828, 153, 1829, 153, 1830, 157, 1831, 157, // NOLINT - 1832, 161, 1833, 161, 1834, 165, 1835, 165, - 1836, 169, 1837, 169, 1838, 173, 1839, 173, // NOLINT - 1842, 177, 1843, 177, 1844, 181, 1845, 181, - 1846, 185, 1847, 185, 1848, 189, 1849, 189, // NOLINT - 1850, 193, 1851, 193, 1852, 197, 1853, 197, - 1854, 201, 1855, 201, 1856, 205, 1857, 205, // NOLINT - 1858, 209, 1859, 209, 1860, 213, 1861, 213, - 1862, 217, 1863, 217, 1864, 221, 1865, 221, // NOLINT - 1866, 225, 1867, 225, 1868, 229, 1869, 229, - 1870, 233, 1871, 233, 1872, 237, 1873, 237, // NOLINT - 1874, 241, 1875, 241, 1876, 245, 1877, 245, - 1878, 249, 1879, 249, 1880, 253, 1881, 253, // NOLINT - 1882, 257, 1883, 257, 1884, 261, 1885, 261, - 1886, 265, 1887, 265, 1888, 269, 1889, 269, // NOLINT - 1890, 273, 1891, 273, 1892, 277, 1893, 277, - 1894, 281, 1895, 281, 1896, 285, 1897, 285, // NOLINT - 1898, 289, 1899, 289, 1900, 293, 1901, 293, - 1902, 297, 1903, 297, 1913, 301, 1914, 301, // NOLINT - 1915, 305, 1916, 305, 1917, 309, 1918, 313, - 1919, 313, 1920, 317, 1921, 317, 1922, 321, // NOLINT - 1923, 321, 1924, 325, 1925, 325, 1926, 329, - 1927, 329, 1931, 333, 1932, 333, 1933, 337, // NOLINT - 1936, 341, 1937, 341, 1938, 345, 1939, 345, - 1942, 349, 1943, 349, 1944, 353, 1945, 353, // NOLINT - 1946, 357, 1947, 357, 1948, 361, 1949, 361, - 1950, 365, 1951, 365, 1952, 369, 1953, 369, // NOLINT - 1954, 373, 1955, 373, 1956, 377, 1957, 377, - 1958, 381, 1959, 381, 1960, 385, 1961, 385, // NOLINT - 1962, 389, 1963, 393, 1964, 397, 1965, 401, - 1968, 405, 1969, 409}; // NOLINT -static const uint16_t kEcma262UnCanonicalizeMultiStrings5Size = 104; // NOLINT + kEcma262UnCanonicalizeMultiStrings5[104] = { + {{42560, 42561}}, {{42562, 42563}}, {{42564, 42565}}, {{42566, 42567}}, + {{42568, 42569}}, {{42570, 42571}}, {{42572, 42573}}, {{42574, 42575}}, + {{42576, 42577}}, {{42578, 42579}}, {{42580, 42581}}, {{42582, 42583}}, + {{42584, 42585}}, {{42586, 42587}}, {{42588, 42589}}, {{42590, 42591}}, + {{42592, 42593}}, {{42594, 42595}}, {{42596, 42597}}, {{42598, 42599}}, + {{42600, 42601}}, {{42602, 42603}}, {{42604, 42605}}, {{42624, 42625}}, + {{42626, 42627}}, {{42628, 42629}}, {{42630, 42631}}, {{42632, 42633}}, + {{42634, 42635}}, {{42636, 42637}}, {{42638, 42639}}, {{42640, 42641}}, + {{42642, 42643}}, {{42644, 42645}}, {{42646, 42647}}, {{42648, 42649}}, + {{42650, 42651}}, {{42786, 42787}}, {{42788, 42789}}, {{42790, 42791}}, + {{42792, 42793}}, {{42794, 42795}}, {{42796, 42797}}, {{42798, 42799}}, + {{42802, 42803}}, {{42804, 42805}}, {{42806, 42807}}, {{42808, 42809}}, + {{42810, 42811}}, {{42812, 42813}}, {{42814, 42815}}, {{42816, 42817}}, + {{42818, 42819}}, {{42820, 42821}}, {{42822, 42823}}, {{42824, 42825}}, + {{42826, 42827}}, {{42828, 42829}}, {{42830, 42831}}, {{42832, 42833}}, + {{42834, 42835}}, {{42836, 42837}}, {{42838, 42839}}, {{42840, 42841}}, + {{42842, 42843}}, {{42844, 42845}}, {{42846, 42847}}, {{42848, 42849}}, + {{42850, 42851}}, {{42852, 42853}}, {{42854, 42855}}, {{42856, 42857}}, + {{42858, 42859}}, {{42860, 42861}}, {{42862, 42863}}, {{42873, 42874}}, + {{42875, 42876}}, {{7545, 42877}}, {{42878, 42879}}, {{42880, 42881}}, + {{42882, 42883}}, {{42884, 42885}}, {{42886, 42887}}, {{42891, 42892}}, + {{613, 42893}}, {{42896, 42897}}, {{42898, 42899}}, {{42902, 42903}}, + {{42904, 42905}}, {{42906, 42907}}, {{42908, 42909}}, {{42910, 42911}}, + {{42912, 42913}}, {{42914, 42915}}, {{42916, 42917}}, {{42918, 42919}}, + {{42920, 42921}}, {{614, 42922}}, {{604, 42923}}, {{609, 42924}}, + {{620, 42925}}, {{670, 42928}}, {{647, 42929}}, {{kSentinel}}}; +static const uint16_t kEcma262UnCanonicalizeTable5Size = 198; +static const int32_t kEcma262UnCanonicalizeTable5[396] = { + 1600, 1, 1601, 1, 1602, 5, 1603, 5, 1604, 9, 1605, 9, 1606, 13, + 1607, 13, 1608, 17, 1609, 17, 1610, 21, 1611, 21, 1612, 25, 1613, 25, + 1614, 29, 1615, 29, 1616, 33, 1617, 33, 1618, 37, 1619, 37, 1620, 41, + 1621, 41, 1622, 45, 1623, 45, 1624, 49, 1625, 49, 1626, 53, 1627, 53, + 1628, 57, 1629, 57, 1630, 61, 1631, 61, 1632, 65, 1633, 65, 1634, 69, + 1635, 69, 1636, 73, 1637, 73, 1638, 77, 1639, 77, 1640, 81, 1641, 81, + 1642, 85, 1643, 85, 1644, 89, 1645, 89, 1664, 93, 1665, 93, 1666, 97, + 1667, 97, 1668, 101, 1669, 101, 1670, 105, 1671, 105, 1672, 109, 1673, 109, + 1674, 113, 1675, 113, 1676, 117, 1677, 117, 1678, 121, 1679, 121, 1680, 125, + 1681, 125, 1682, 129, 1683, 129, 1684, 133, 1685, 133, 1686, 137, 1687, 137, + 1688, 141, 1689, 141, 1690, 145, 1691, 145, 1826, 149, 1827, 149, 1828, 153, + 1829, 153, 1830, 157, 1831, 157, 1832, 161, 1833, 161, 1834, 165, 1835, 165, + 1836, 169, 1837, 169, 1838, 173, 1839, 173, 1842, 177, 1843, 177, 1844, 181, + 1845, 181, 1846, 185, 1847, 185, 1848, 189, 1849, 189, 1850, 193, 1851, 193, + 1852, 197, 1853, 197, 1854, 201, 1855, 201, 1856, 205, 1857, 205, 1858, 209, + 1859, 209, 1860, 213, 1861, 213, 1862, 217, 1863, 217, 1864, 221, 1865, 221, + 1866, 225, 1867, 225, 1868, 229, 1869, 229, 1870, 233, 1871, 233, 1872, 237, + 1873, 237, 1874, 241, 1875, 241, 1876, 245, 1877, 245, 1878, 249, 1879, 249, + 1880, 253, 1881, 253, 1882, 257, 1883, 257, 1884, 261, 1885, 261, 1886, 265, + 1887, 265, 1888, 269, 1889, 269, 1890, 273, 1891, 273, 1892, 277, 1893, 277, + 1894, 281, 1895, 281, 1896, 285, 1897, 285, 1898, 289, 1899, 289, 1900, 293, + 1901, 293, 1902, 297, 1903, 297, 1913, 301, 1914, 301, 1915, 305, 1916, 305, + 1917, 309, 1918, 313, 1919, 313, 1920, 317, 1921, 317, 1922, 321, 1923, 321, + 1924, 325, 1925, 325, 1926, 329, 1927, 329, 1931, 333, 1932, 333, 1933, 337, + 1936, 341, 1937, 341, 1938, 345, 1939, 345, 1942, 349, 1943, 349, 1944, 353, + 1945, 353, 1946, 357, 1947, 357, 1948, 361, 1949, 361, 1950, 365, 1951, 365, + 1952, 369, 1953, 369, 1954, 373, 1955, 373, 1956, 377, 1957, 377, 1958, 381, + 1959, 381, 1960, 385, 1961, 385, 1962, 389, 1963, 393, 1964, 397, 1965, 401, + 1968, 405, 1969, 409}; +static const uint16_t kEcma262UnCanonicalizeMultiStrings5Size = 104; static const MultiCharacterSpecialCase<2> - kEcma262UnCanonicalizeMultiStrings7[3] = { // NOLINT - {{65313, 65345}}, - {{65338, 65370}}, - {{kSentinel}}}; // NOLINT -static const uint16_t kEcma262UnCanonicalizeTable7Size = 4; // NOLINT -static const int32_t kEcma262UnCanonicalizeTable7[8] = { - 1073749793, 1, 7994, 5, 1073749825, 1, 8026, 5}; // NOLINT -static const uint16_t kEcma262UnCanonicalizeMultiStrings7Size = 3; // NOLINT + kEcma262UnCanonicalizeMultiStrings7[3] = { + {{65313, 65345}}, {{65338, 65370}}, {{kSentinel}}}; +static const uint16_t kEcma262UnCanonicalizeTable7Size = 4; +static const int32_t kEcma262UnCanonicalizeTable7[8] = {1073749793, 1, 7994, 5, + 1073749825, 1, 8026, 5}; +static const uint16_t kEcma262UnCanonicalizeMultiStrings7Size = 3; int Ecma262UnCanonicalize::Convert(uchar c, uchar n, uchar* result, bool* allow_caching_ptr) { int chunk_index = c >> 13; @@ -3057,46 +2485,43 @@ int Ecma262UnCanonicalize::Convert(uchar c, uchar n, uchar* result, } static const MultiCharacterSpecialCase<1> - kCanonicalizationRangeMultiStrings0[1] = { // NOLINT - {{kSentinel}}}; // NOLINT -static const uint16_t kCanonicalizationRangeTable0Size = 70; // NOLINT + kCanonicalizationRangeMultiStrings0[1] = {{{kSentinel}}}; +static const uint16_t kCanonicalizationRangeTable0Size = 70; static const int32_t kCanonicalizationRangeTable0[140] = { 1073741889, 100, 90, 0, 1073741921, 100, 122, 0, - 1073742016, 88, 214, 0, 1073742040, 24, 222, 0, // NOLINT + 1073742016, 88, 214, 0, 1073742040, 24, 222, 0, 1073742048, 88, 246, 0, 1073742072, 24, 254, 0, - 1073742715, 8, 893, 0, 1073742728, 8, 906, 0, // NOLINT + 1073742715, 8, 893, 0, 1073742728, 8, 906, 0, 1073742749, 8, 927, 0, 1073742759, 16, 939, 0, - 1073742765, 8, 943, 0, 1073742781, 8, 959, 0, // NOLINT + 1073742765, 8, 943, 0, 1073742781, 8, 959, 0, 1073742791, 16, 971, 0, 1073742845, 8, 1023, 0, - 1073742848, 60, 1039, 0, 1073742864, 124, 1071, 0, // NOLINT + 1073742848, 60, 1039, 0, 1073742864, 124, 1071, 0, 1073742896, 124, 1103, 0, 1073742928, 60, 1119, 0, - 1073743153, 148, 1366, 0, 1073743201, 148, 1414, 0, // NOLINT + 1073743153, 148, 1366, 0, 1073743201, 148, 1414, 0, 1073746080, 148, 4293, 0, 1073749760, 28, 7943, 0, - 1073749768, 28, 7951, 0, 1073749776, 20, 7957, 0, // NOLINT + 1073749768, 28, 7951, 0, 1073749776, 20, 7957, 0, 1073749784, 20, 7965, 0, 1073749792, 28, 7975, 0, - 1073749800, 28, 7983, 0, 1073749808, 28, 7991, 0, // NOLINT + 1073749800, 28, 7983, 0, 1073749808, 28, 7991, 0, 1073749816, 28, 7999, 0, 1073749824, 20, 8005, 0, - 1073749832, 20, 8013, 0, 1073749856, 28, 8039, 0, // NOLINT + 1073749832, 20, 8013, 0, 1073749856, 28, 8039, 0, 1073749864, 28, 8047, 0, 1073749874, 12, 8053, 0, - 1073749960, 12, 8139, 0}; // NOLINT -static const uint16_t kCanonicalizationRangeMultiStrings0Size = 1; // NOLINT + 1073749960, 12, 8139, 0}; +static const uint16_t kCanonicalizationRangeMultiStrings0Size = 1; static const MultiCharacterSpecialCase<1> - kCanonicalizationRangeMultiStrings1[1] = { // NOLINT - {{kSentinel}}}; // NOLINT -static const uint16_t kCanonicalizationRangeTable1Size = 14; // NOLINT + kCanonicalizationRangeMultiStrings1[1] = {{{kSentinel}}}; +static const uint16_t kCanonicalizationRangeTable1Size = 14; static const int32_t kCanonicalizationRangeTable1[28] = { 1073742176, 60, 367, 0, 1073742192, 60, 383, 0, - 1073743030, 100, 1231, 0, 1073743056, 100, 1257, 0, // NOLINT + 1073743030, 100, 1231, 0, 1073743056, 100, 1257, 0, 1073744896, 184, 3118, 0, 1073744944, 184, 3166, 0, - 1073745152, 148, 3365, 0}; // NOLINT -static const uint16_t kCanonicalizationRangeMultiStrings1Size = 1; // NOLINT + 1073745152, 148, 3365, 0}; +static const uint16_t kCanonicalizationRangeMultiStrings1Size = 1; static const MultiCharacterSpecialCase<1> - kCanonicalizationRangeMultiStrings7[1] = { // NOLINT - {{kSentinel}}}; // NOLINT -static const uint16_t kCanonicalizationRangeTable7Size = 4; // NOLINT + kCanonicalizationRangeMultiStrings7[1] = {{{kSentinel}}}; +static const uint16_t kCanonicalizationRangeTable7Size = 4; static const int32_t kCanonicalizationRangeTable7[8] = { - 1073749793, 100, 7994, 0, 1073749825, 100, 8026, 0}; // NOLINT -static const uint16_t kCanonicalizationRangeMultiStrings7Size = 1; // NOLINT + 1073749793, 100, 7994, 0, 1073749825, 100, 8026, 0}; +static const uint16_t kCanonicalizationRangeMultiStrings7Size = 1; int CanonicalizationRange::Convert(uchar c, uchar n, uchar* result, bool* allow_caching_ptr) { int chunk_index = c >> 13; @@ -3121,71 +2546,63 @@ int CanonicalizationRange::Convert(uchar c, uchar n, uchar* result, const uchar UnicodeData::kMaxCodePoint = 0xFFFD; int UnicodeData::GetByteCount() { - return kUppercaseTable0Size * sizeof(int32_t) // NOLINT - + kUppercaseTable1Size * sizeof(int32_t) // NOLINT - + kUppercaseTable5Size * sizeof(int32_t) // NOLINT - + kUppercaseTable7Size * sizeof(int32_t) // NOLINT - + kLetterTable0Size * sizeof(int32_t) // NOLINT - + kLetterTable1Size * sizeof(int32_t) // NOLINT - + kLetterTable2Size * sizeof(int32_t) // NOLINT - + kLetterTable3Size * sizeof(int32_t) // NOLINT - + kLetterTable4Size * sizeof(int32_t) // NOLINT - + kLetterTable5Size * sizeof(int32_t) // NOLINT - + kLetterTable6Size * sizeof(int32_t) // NOLINT - + kLetterTable7Size * sizeof(int32_t) // NOLINT - + kID_StartTable0Size * sizeof(int32_t) // NOLINT - + kID_StartTable1Size * sizeof(int32_t) // NOLINT - + kID_StartTable2Size * sizeof(int32_t) // NOLINT - + kID_StartTable3Size * sizeof(int32_t) // NOLINT - + kID_StartTable4Size * sizeof(int32_t) // NOLINT - + kID_StartTable5Size * sizeof(int32_t) // NOLINT - + kID_StartTable6Size * sizeof(int32_t) // NOLINT - + kID_StartTable7Size * sizeof(int32_t) // NOLINT - + kID_ContinueTable0Size * sizeof(int32_t) // NOLINT - + kID_ContinueTable1Size * sizeof(int32_t) // NOLINT - + kID_ContinueTable5Size * sizeof(int32_t) // NOLINT - + kID_ContinueTable7Size * sizeof(int32_t) // NOLINT - + kWhiteSpaceTable0Size * sizeof(int32_t) // NOLINT - + kWhiteSpaceTable1Size * sizeof(int32_t) // NOLINT - + kWhiteSpaceTable7Size * sizeof(int32_t) // NOLINT - + kToLowercaseMultiStrings0Size * - sizeof(MultiCharacterSpecialCase<2>) // NOLINT - + kToLowercaseMultiStrings1Size * - sizeof(MultiCharacterSpecialCase<1>) // NOLINT - + kToLowercaseMultiStrings5Size * - sizeof(MultiCharacterSpecialCase<1>) // NOLINT - + kToLowercaseMultiStrings7Size * - sizeof(MultiCharacterSpecialCase<1>) // NOLINT - + kToUppercaseMultiStrings0Size * - sizeof(MultiCharacterSpecialCase<3>) // NOLINT - + kToUppercaseMultiStrings1Size * - sizeof(MultiCharacterSpecialCase<1>) // NOLINT - + kToUppercaseMultiStrings5Size * - sizeof(MultiCharacterSpecialCase<1>) // NOLINT - + kToUppercaseMultiStrings7Size * - sizeof(MultiCharacterSpecialCase<3>) // NOLINT - + kEcma262CanonicalizeMultiStrings0Size * - sizeof(MultiCharacterSpecialCase<1>) // NOLINT - + kEcma262CanonicalizeMultiStrings1Size * - sizeof(MultiCharacterSpecialCase<1>) // NOLINT - + kEcma262CanonicalizeMultiStrings5Size * - sizeof(MultiCharacterSpecialCase<1>) // NOLINT - + kEcma262CanonicalizeMultiStrings7Size * - sizeof(MultiCharacterSpecialCase<1>) // NOLINT - + kEcma262UnCanonicalizeMultiStrings0Size * - sizeof(MultiCharacterSpecialCase<4>) // NOLINT - + kEcma262UnCanonicalizeMultiStrings1Size * - sizeof(MultiCharacterSpecialCase<2>) // NOLINT - + kEcma262UnCanonicalizeMultiStrings5Size * - sizeof(MultiCharacterSpecialCase<2>) // NOLINT - + kEcma262UnCanonicalizeMultiStrings7Size * - sizeof(MultiCharacterSpecialCase<2>) // NOLINT - + kCanonicalizationRangeMultiStrings0Size * - sizeof(MultiCharacterSpecialCase<1>) // NOLINT - + kCanonicalizationRangeMultiStrings1Size * - sizeof(MultiCharacterSpecialCase<1>) // NOLINT - + kCanonicalizationRangeMultiStrings7Size * - sizeof(MultiCharacterSpecialCase<1>); // NOLINT + return kUppercaseTable0Size * sizeof(int32_t) + + kUppercaseTable1Size * sizeof(int32_t) + + kUppercaseTable5Size * sizeof(int32_t) + + kUppercaseTable7Size * sizeof(int32_t) + + kLetterTable0Size * sizeof(int32_t) + + kLetterTable1Size * sizeof(int32_t) + + kLetterTable2Size * sizeof(int32_t) + + kLetterTable3Size * sizeof(int32_t) + + kLetterTable4Size * sizeof(int32_t) + + kLetterTable5Size * sizeof(int32_t) + + kLetterTable6Size * sizeof(int32_t) + + kLetterTable7Size * sizeof(int32_t) + + kID_StartTable0Size * sizeof(int32_t) + + kID_StartTable1Size * sizeof(int32_t) + + kID_StartTable2Size * sizeof(int32_t) + + kID_StartTable3Size * sizeof(int32_t) + + kID_StartTable4Size * sizeof(int32_t) + + kID_StartTable5Size * sizeof(int32_t) + + kID_StartTable6Size * sizeof(int32_t) + + kID_StartTable7Size * sizeof(int32_t) + + kID_ContinueTable0Size * sizeof(int32_t) + + kID_ContinueTable1Size * sizeof(int32_t) + + kID_ContinueTable5Size * sizeof(int32_t) + + kID_ContinueTable7Size * sizeof(int32_t) + + kWhiteSpaceTable0Size * sizeof(int32_t) + + kWhiteSpaceTable1Size * sizeof(int32_t) + + kWhiteSpaceTable7Size * sizeof(int32_t) + + kToLowercaseMultiStrings0Size * sizeof(MultiCharacterSpecialCase<2>) + + kToLowercaseMultiStrings1Size * sizeof(MultiCharacterSpecialCase<1>) + + kToLowercaseMultiStrings5Size * sizeof(MultiCharacterSpecialCase<1>) + + kToLowercaseMultiStrings7Size * sizeof(MultiCharacterSpecialCase<1>) + + kToUppercaseMultiStrings0Size * sizeof(MultiCharacterSpecialCase<3>) + + kToUppercaseMultiStrings1Size * sizeof(MultiCharacterSpecialCase<1>) + + kToUppercaseMultiStrings5Size * sizeof(MultiCharacterSpecialCase<1>) + + kToUppercaseMultiStrings7Size * sizeof(MultiCharacterSpecialCase<3>) + + kEcma262CanonicalizeMultiStrings0Size * + sizeof(MultiCharacterSpecialCase<1>) + + kEcma262CanonicalizeMultiStrings1Size * + sizeof(MultiCharacterSpecialCase<1>) + + kEcma262CanonicalizeMultiStrings5Size * + sizeof(MultiCharacterSpecialCase<1>) + + kEcma262CanonicalizeMultiStrings7Size * + sizeof(MultiCharacterSpecialCase<1>) + + kEcma262UnCanonicalizeMultiStrings0Size * + sizeof(MultiCharacterSpecialCase<4>) + + kEcma262UnCanonicalizeMultiStrings1Size * + sizeof(MultiCharacterSpecialCase<2>) + + kEcma262UnCanonicalizeMultiStrings5Size * + sizeof(MultiCharacterSpecialCase<2>) + + kEcma262UnCanonicalizeMultiStrings7Size * + sizeof(MultiCharacterSpecialCase<2>) + + kCanonicalizationRangeMultiStrings0Size * + sizeof(MultiCharacterSpecialCase<1>) + + kCanonicalizationRangeMultiStrings1Size * + sizeof(MultiCharacterSpecialCase<1>) + + kCanonicalizationRangeMultiStrings7Size * + sizeof(MultiCharacterSpecialCase<1>); } #endif // !V8_INTL_SUPPORT diff --git a/deps/v8/src/third_party/vtune/BUILD.gn b/deps/v8/src/third_party/vtune/BUILD.gn index f699ab147e..e8582dbb79 100644 --- a/deps/v8/src/third_party/vtune/BUILD.gn +++ b/deps/v8/src/third_party/vtune/BUILD.gn @@ -22,9 +22,7 @@ static_library("v8_vtune") { "vtune-jit.h", ] configs += [ ":vtune_ittapi" ] - deps = [ - "../../..:v8", - ] + deps = [ "../../..:v8" ] } static_library("v8_vtune_trace_mark") { @@ -33,16 +31,13 @@ static_library("v8_vtune_trace_mark") { "vtuneapi.cc", "vtuneapi.h", ] - deps = [ - ":ittnotify", - ] + deps = [ ":ittnotify" ] } static_library("ittnotify") { sources = [ "//third_party/ittapi/include/ittnotify.h", "//third_party/ittapi/include/legacy/ittnotify.h", - "//third_party/ittapi/src/ittnotify/disable-warnings.h", "//third_party/ittapi/src/ittnotify/ittnotify_config.h", "//third_party/ittapi/src/ittnotify/ittnotify_static.c", "//third_party/ittapi/src/ittnotify/ittnotify_static.h", diff --git a/deps/v8/src/torque/class-debug-reader-generator.cc b/deps/v8/src/torque/class-debug-reader-generator.cc index 19ac671bd7..5f45ea3ade 100644 --- a/deps/v8/src/torque/class-debug-reader-generator.cc +++ b/deps/v8/src/torque/class-debug-reader-generator.cc @@ -285,6 +285,11 @@ void GenerateFieldValueAccessor(const Field& field, cc_contents << " d::MemoryAccessResult validity = accessor(" << address_getter << "()" << index_offset << ", reinterpret_cast<uint8_t*>(&value), sizeof(value));\n"; +#ifdef V8_MAP_PACKING + if (field_getter == "GetMapValue") { + cc_contents << " value = i::MapWord::Unpack(value);\n"; + } +#endif cc_contents << " return {validity, " << (debug_field_type.IsTagged() ? "EnsureDecompressed(value, address_)" diff --git a/deps/v8/src/torque/constants.h b/deps/v8/src/torque/constants.h index 2a4e6fcb5b..bb0ae2b69e 100644 --- a/deps/v8/src/torque/constants.h +++ b/deps/v8/src/torque/constants.h @@ -107,15 +107,15 @@ static const char* const ANNOTATION_EXPORT = "@export"; static const char* const ANNOTATION_DO_NOT_GENERATE_CAST = "@doNotGenerateCast"; static const char* const ANNOTATION_USE_PARENT_TYPE_CHECKER = "@useParentTypeChecker"; -// Generate C++ accessors with relaxed write semantics. -// Weak<T> and MaybeObject fields always use relaxed write. -static const char* const ANNOTATION_RELAXED_WRITE = "@relaxedWrite"; -// Generate C++ accessors with relaxed read semantics. -static const char* const ANNOTATION_RELAXED_READ = "@relaxedRead"; -// Generate C++ accessors with release write semantics. -static const char* const ANNOTATION_RELEASE_WRITE = "@releaseWrite"; -// Generate C++ accessors with acquire read semantics. -static const char* const ANNOTATION_ACQUIRE_READ = "@acquireRead"; +// Generate C++ accessors with relaxed store semantics. +// Weak<T> and MaybeObject fields always use relaxed store. +static const char* const ANNOTATION_CPP_RELAXED_STORE = "@cppRelaxedStore"; +// Generate C++ accessors with relaxed load semantics. +static const char* const ANNOTATION_CPP_RELAXED_LOAD = "@cppRelaxedLoad"; +// Generate C++ accessors with release store semantics. +static const char* const ANNOTATION_CPP_RELEASE_STORE = "@cppReleaseStore"; +// Generate C++ accessors with acquire load semantics. +static const char* const ANNOTATION_CPP_ACQUIRE_LOAD = "@cppAcquireLoad"; inline bool IsConstexprName(const std::string& name) { return name.substr(0, std::strlen(CONSTEXPR_TYPE_PREFIX)) == diff --git a/deps/v8/src/torque/global-context.h b/deps/v8/src/torque/global-context.h index 403502b67b..754d16e4a0 100644 --- a/deps/v8/src/torque/global-context.h +++ b/deps/v8/src/torque/global-context.h @@ -79,6 +79,8 @@ class GlobalContext : public ContextualClass<GlobalContext> { std::stringstream class_definition_inline_headerfile; std::stringstream class_definition_ccfile; + + std::set<SourceId> required_builtin_includes; }; static PerFileStreams& GeneratedPerFile(SourceId file) { PerFileStreams& result = Get().generated_per_file_[file]; diff --git a/deps/v8/src/torque/implementation-visitor.cc b/deps/v8/src/torque/implementation-visitor.cc index a2cf0fee86..b35a45d7b6 100644 --- a/deps/v8/src/torque/implementation-visitor.cc +++ b/deps/v8/src/torque/implementation-visitor.cc @@ -11,12 +11,14 @@ #include "src/base/optional.h" #include "src/common/globals.h" #include "src/torque/cc-generator.h" +#include "src/torque/cfg.h" #include "src/torque/constants.h" #include "src/torque/csa-generator.h" #include "src/torque/declaration-visitor.h" #include "src/torque/global-context.h" #include "src/torque/parameter-difference.h" #include "src/torque/server-data.h" +#include "src/torque/source-positions.h" #include "src/torque/type-inference.h" #include "src/torque/type-visitor.h" #include "src/torque/types.h" @@ -26,6 +28,10 @@ namespace v8 { namespace internal { namespace torque { +namespace { +const char* BuiltinIncludesMarker = "// __BUILTIN_INCLUDES_MARKER__\n"; +} // namespace + VisitResult ImplementationVisitor::Visit(Expression* expr) { CurrentSourcePosition::Scope scope(expr->pos); switch (expr->kind) { @@ -76,11 +82,17 @@ void ImplementationVisitor::BeginGeneratedFiles() { out << "#include " << StringLiteralQuote(include_path) << "\n"; } - for (SourceId file : SourceFileMap::AllSources()) { - out << "#include \"torque-generated/" + - SourceFileMap::PathFromV8RootWithoutExtension(file) + - "-tq-csa.h\"\n"; - } + out << "// Required Builtins:\n"; + out << "#include \"torque-generated/" + + SourceFileMap::PathFromV8RootWithoutExtension(file) + + "-tq-csa.h\"\n"; + // Now that required include files are collected while generting the file, + // we only know the full set at the end. Insert a marker here that is + // replaced with the list of includes at the very end. + // TODO(nicohartmann@): This is not the most beautiful way to do this, + // replace once the cpp file builder is available, where this can be + // handled easily. + out << BuiltinIncludesMarker; out << "\n"; out << "namespace v8 {\n" @@ -658,8 +670,8 @@ void ImplementationVisitor::Visit(Builtin* builtin) { } else { DCHECK(builtin->IsStub()); - bool has_context_parameter = signature.HasContextParameter(); for (size_t i = 0; i < signature.parameter_names.size(); ++i) { + const std::string& parameter_name = signature.parameter_names[i]->value; const Type* type = signature.types()[i]; const bool mark_as_used = signature.implicit_count > i; std::string var = AddParameter(i, builtin, ¶meters, ¶meter_types, @@ -667,14 +679,8 @@ void ImplementationVisitor::Visit(Builtin* builtin) { csa_ccfile() << " " << type->GetGeneratedTypeName() << " " << var << " = " << "UncheckedParameter<" << type->GetGeneratedTNodeTypeName() - << ">("; - if (i == 0 && has_context_parameter) { - csa_ccfile() << "Descriptor::kContext"; - } else { - csa_ccfile() << "Descriptor::ParameterIndex<" - << (has_context_parameter ? i - 1 : i) << ">()"; - } - csa_ccfile() << ");\n"; + << ">(Descriptor::k" << CamelifyString(parameter_name) + << ");\n"; csa_ccfile() << " USE(" << var << ");\n"; } } @@ -1743,7 +1749,23 @@ void ImplementationVisitor::GenerateImplementation(const std::string& dir) { GlobalContext::PerFileStreams& streams = GlobalContext::GeneratedPerFile(file); - WriteFile(base_filename + "-tq-csa.cc", streams.csa_ccfile.str()); + std::string csa_cc = streams.csa_ccfile.str(); + // Insert missing builtin includes where the marker is. + { + auto pos = csa_cc.find(BuiltinIncludesMarker); + CHECK_NE(pos, std::string::npos); + std::string includes; + for (const SourceId& include : streams.required_builtin_includes) { + std::string include_file = + SourceFileMap::PathFromV8RootWithoutExtension(include); + includes += "#include \"torque-generated/"; + includes += include_file; + includes += "-tq-csa.h\"\n"; + } + csa_cc.replace(pos, strlen(BuiltinIncludesMarker), std::move(includes)); + } + + WriteFile(base_filename + "-tq-csa.cc", std::move(csa_cc)); WriteFile(base_filename + "-tq-csa.h", streams.csa_headerfile.str()); WriteFile(base_filename + "-tq.inc", streams.class_definition_headerfile.str()); @@ -2368,6 +2390,10 @@ LocationReference ImplementationVisitor::GetLocationReference( } } Value* value = Declarations::LookupValue(name); + CHECK(value->Position().source.IsValid()); + if (auto stream = CurrentFileStreams::Get()) { + stream->required_builtin_includes.insert(value->Position().source); + } if (GlobalContext::collect_language_server_data()) { LanguageServerData::AddDefinition(expr->name->pos, value->name()->pos); } @@ -2623,6 +2649,11 @@ VisitResult ImplementationVisitor::GenerateCall( Callable* callable, base::Optional<LocationReference> this_reference, Arguments arguments, const TypeVector& specialization_types, bool is_tailcall) { + CHECK(callable->Position().source.IsValid()); + if (auto stream = CurrentFileStreams::Get()) { + stream->required_builtin_includes.insert(callable->Position().source); + } + const Type* return_type = callable->signature().return_type; if (is_tailcall) { @@ -3128,8 +3159,7 @@ VisitResult ImplementationVisitor::Visit(CallMethodExpression* expr) { TypeVector argument_types = arguments.parameters.ComputeTypeVector(); DCHECK_EQ(expr->method->namespace_qualification.size(), 0); QualifiedName qualified_name = QualifiedName(method_name); - Callable* callable = nullptr; - callable = LookupMethod(method_name, target_type, arguments, {}); + Callable* callable = LookupMethod(method_name, target_type, arguments, {}); if (GlobalContext::collect_language_server_data()) { LanguageServerData::AddDefinition(expr->method->name->pos, callable->IdentifierPosition()); @@ -3437,40 +3467,40 @@ void ImplementationVisitor::GenerateBuiltinDefinitionsAndInterfaceDescriptors( std::string descriptor_name = builtin->ExternalName() + "Descriptor"; bool has_context_parameter = builtin->signature().HasContextParameter(); size_t kFirstNonContextParameter = has_context_parameter ? 1 : 0; - size_t parameter_count = - builtin->parameter_names().size() - kFirstNonContextParameter; TypeVector return_types = LowerType(builtin->signature().return_type); - interface_descriptors - << "class " << descriptor_name - << " : public TorqueInterfaceDescriptor<" << return_types.size() - << ", " << parameter_count << ", " - << (has_context_parameter ? "true" : "false") << "> {\n"; - interface_descriptors << " DECLARE_DESCRIPTOR_WITH_BASE(" - << descriptor_name - << ", TorqueInterfaceDescriptor)\n"; - - interface_descriptors - << " std::vector<MachineType> ReturnType() override {\n"; - interface_descriptors << " return {{"; + interface_descriptors << "class " << descriptor_name + << " : public StaticCallInterfaceDescriptor<" + << descriptor_name << "> {\n"; + + interface_descriptors << " public:\n"; + + if (has_context_parameter) { + interface_descriptors << " DEFINE_RESULT_AND_PARAMETERS("; + } else { + interface_descriptors << " DEFINE_RESULT_AND_PARAMETERS_NO_CONTEXT("; + } + interface_descriptors << return_types.size(); + for (size_t i = kFirstNonContextParameter; + i < builtin->parameter_names().size(); ++i) { + Identifier* parameter = builtin->parameter_names()[i]; + interface_descriptors << ", k" << CamelifyString(parameter->value); + } + interface_descriptors << ")\n"; + + interface_descriptors << " DEFINE_RESULT_AND_PARAMETER_TYPES("; PrintCommaSeparatedList(interface_descriptors, return_types, MachineTypeString); - interface_descriptors << "}};\n"; - interface_descriptors << " }\n"; - - interface_descriptors << " std::array<MachineType, " << parameter_count - << "> ParameterTypes() override {\n"; - interface_descriptors << " return {"; for (size_t i = kFirstNonContextParameter; i < builtin->parameter_names().size(); ++i) { - bool last = i + 1 == builtin->parameter_names().size(); const Type* type = builtin->signature().parameter_types.types[i]; - interface_descriptors << MachineTypeString(type) - << (last ? "" : ", "); + interface_descriptors << ", " << MachineTypeString(type); } - interface_descriptors << "};\n"; + interface_descriptors << ")\n"; + + interface_descriptors << " DECLARE_DEFAULT_DESCRIPTOR(" + << descriptor_name << ")\n"; - interface_descriptors << " }\n"; interface_descriptors << "};\n\n"; } else { builtin_definitions << "TFJ(" << builtin->ExternalName(); @@ -4221,15 +4251,47 @@ void CppClassGenerator::GenerateFieldAccessors( } hdr_ << " inline " << type_name << " " << name << "(" - << (indexed ? "int i" : "") << ") const;\n"; + << (indexed ? "int i" : ""); + switch (class_field.read_synchronization) { + case FieldSynchronization::kNone: + break; + case FieldSynchronization::kRelaxed: + hdr_ << (indexed ? ", RelaxedLoadTag" : "RelaxedLoadTag"); + break; + case FieldSynchronization::kAcquireRelease: + hdr_ << (indexed ? ", AcquireLoadTag" : "AcquireLoadTag"); + break; + } + hdr_ << ") const;\n"; if (can_contain_heap_objects) { hdr_ << " inline " << type_name << " " << name - << "(PtrComprCageBase cage_base" << (indexed ? ", int i" : "") - << ") const;\n"; + << "(PtrComprCageBase cage_base" << (indexed ? ", int i" : ""); + switch (class_field.read_synchronization) { + case FieldSynchronization::kNone: + break; + case FieldSynchronization::kRelaxed: + hdr_ << ", RelaxedLoadTag"; + break; + case FieldSynchronization::kAcquireRelease: + hdr_ << ", AcquireLoadTag"; + break; + } + + hdr_ << ") const;\n"; } hdr_ << " inline void set_" << name << "(" << (indexed ? "int i, " : "") - << type_name << " value" - << (can_contain_heap_objects + << type_name << " value"; + switch (class_field.write_synchronization) { + case FieldSynchronization::kNone: + break; + case FieldSynchronization::kRelaxed: + hdr_ << ", RelaxedStoreTag"; + break; + case FieldSynchronization::kAcquireRelease: + hdr_ << ", ReleaseStoreTag"; + break; + } + hdr_ << (can_contain_heap_objects ? ", WriteBarrierMode mode = UPDATE_WRITE_BARRIER" : "") << ");\n\n"; @@ -4239,10 +4301,32 @@ void CppClassGenerator::GenerateFieldAccessors( if (can_contain_heap_objects) { inl_ << "template <class D, class P>\n"; inl_ << type_name << " " << gen_name_ << "<D, P>::" << name << "(" - << (indexed ? "int i" : "") << ") const {\n"; + << (indexed ? "int i" : ""); + switch (class_field.read_synchronization) { + case FieldSynchronization::kNone: + break; + case FieldSynchronization::kRelaxed: + inl_ << (indexed ? ", RelaxedLoadTag" : "RelaxedLoadTag"); + break; + case FieldSynchronization::kAcquireRelease: + inl_ << (indexed ? ", AcquireLoadTag" : "AcquireLoadTag"); + break; + } + inl_ << ") const {\n"; inl_ << " PtrComprCageBase cage_base = GetPtrComprCageBase(*this);\n"; inl_ << " return " << gen_name_ << "::" << name << "(cage_base" - << (indexed ? ", i" : "") << ");\n"; + << (indexed ? ", i" : ""); + switch (class_field.read_synchronization) { + case FieldSynchronization::kNone: + break; + case FieldSynchronization::kRelaxed: + inl_ << ", kRelaxedLoad"; + break; + case FieldSynchronization::kAcquireRelease: + inl_ << ", kAcquireLoad"; + break; + } + inl_ << ");\n"; inl_ << "}\n"; } @@ -4252,6 +4336,18 @@ void CppClassGenerator::GenerateFieldAccessors( if (can_contain_heap_objects) inl_ << "PtrComprCageBase cage_base"; if (can_contain_heap_objects && indexed) inl_ << ", "; if (indexed) inl_ << "int i"; + switch (class_field.read_synchronization) { + case FieldSynchronization::kNone: + break; + case FieldSynchronization::kRelaxed: + inl_ << ((can_contain_heap_objects || indexed) ? ", RelaxedLoadTag" + : "RelaxedLoadTag"); + break; + case FieldSynchronization::kAcquireRelease: + inl_ << ((can_contain_heap_objects || indexed) ? ", AcquireLoadTag" + : "AcquireLoadTag"); + break; + } inl_ << ") const {\n"; inl_ << " " << type_name << " value;\n"; @@ -4266,6 +4362,16 @@ void CppClassGenerator::GenerateFieldAccessors( inl_ << "int i, "; } inl_ << type_name << " value"; + switch (class_field.write_synchronization) { + case FieldSynchronization::kNone: + break; + case FieldSynchronization::kRelaxed: + inl_ << ", RelaxedStoreTag"; + break; + case FieldSynchronization::kAcquireRelease: + inl_ << ", ReleaseStoreTag"; + break; + } if (can_contain_heap_objects) { inl_ << ", WriteBarrierMode mode"; } @@ -4339,10 +4445,10 @@ void CppClassGenerator::EmitLoadFieldStatement( if (!field_type->IsSubtypeOf(TypeOracle::GetTaggedType())) { if (class_field.read_synchronization == FieldSynchronization::kAcquireRelease) { - ReportError("Torque doesn't support @acquireRead on untagged data"); + ReportError("Torque doesn't support @cppAcquireRead on untagged data"); } else if (class_field.read_synchronization == FieldSynchronization::kRelaxed) { - ReportError("Torque doesn't support @relaxedRead on untagged data"); + ReportError("Torque doesn't support @cppRelaxedRead on untagged data"); } inl_ << "this->template ReadField<" << type_name << ">(" << offset << ");\n"; @@ -4636,11 +4742,33 @@ void GeneratePrintDefinitionsForClass(std::ostream& impl, const ClassType* type, // TODO(turbofan): Print struct fields too. impl << "\" <struct field printing still unimplemented>\";\n"; } else { - impl << "this->" << f.name_and_type.name << "();\n"; + impl << "this->" << f.name_and_type.name; + switch (f.read_synchronization) { + case FieldSynchronization::kNone: + impl << "();\n"; + break; + case FieldSynchronization::kRelaxed: + impl << "(kRelaxedLoad);\n"; + break; + case FieldSynchronization::kAcquireRelease: + impl << "(kAcquireLoad);\n"; + break; + } } } else { impl << " os << \"\\n - " << f.name_and_type.name << ": \" << " - << "Brief(this->" << f.name_and_type.name << "());\n"; + << "Brief(this->" << f.name_and_type.name; + switch (f.read_synchronization) { + case FieldSynchronization::kNone: + impl << "());\n"; + break; + case FieldSynchronization::kRelaxed: + impl << "(kRelaxedLoad));\n"; + break; + case FieldSynchronization::kAcquireRelease: + impl << "(kAcquireLoad));\n"; + break; + } } } } @@ -4864,7 +4992,7 @@ namespace { void GenerateFieldValueVerifier(const std::string& class_name, bool indexed, std::string offset, const Field& leaf_field, std::string indexed_field_size, - std::ostream& cc_contents) { + std::ostream& cc_contents, bool is_map) { const Type* field_type = leaf_field.name_and_type.type; bool maybe_object = @@ -4879,8 +5007,12 @@ void GenerateFieldValueVerifier(const std::string& class_name, bool indexed, const std::string value = leaf_field.name_and_type.name + "__value"; // Read the field. - cc_contents << " " << object_type << " " << value << " = TaggedField<" - << object_type << ">::load(o, " << offset << ");\n"; + if (is_map) { + cc_contents << " " << object_type << " " << value << " = o.map();\n"; + } else { + cc_contents << " " << object_type << " " << value << " = TaggedField<" + << object_type << ">::load(o, " << offset << ");\n"; + } // Call VerifyPointer or VerifyMaybeObjectPointer on it. cc_contents << " " << object_type << "::" << verify_fn << "(isolate, " @@ -4947,13 +5079,13 @@ void GenerateClassFieldVerifier(const std::string& class_name, class_name, f.index.has_value(), field_start_offset + " + " + std::to_string(*struct_field.offset), struct_field, std::to_string((*struct_type)->PackedSize()), - cc_contents); + cc_contents, f.name_and_type.name == "map"); } } } else { GenerateFieldValueVerifier(class_name, f.index.has_value(), field_start_offset, f, "kTaggedSize", - cc_contents); + cc_contents, f.name_and_type.name == "map"); } cc_contents << " }\n"; diff --git a/deps/v8/src/torque/torque-parser.cc b/deps/v8/src/torque/torque-parser.cc index cab0182677..c74ef02497 100644 --- a/deps/v8/src/torque/torque-parser.cc +++ b/deps/v8/src/torque/torque-parser.cc @@ -1954,22 +1954,23 @@ base::Optional<ParseResult> MakeAnnotation(ParseResultIterator* child_results) { } base::Optional<ParseResult> MakeClassField(ParseResultIterator* child_results) { - AnnotationSet annotations(child_results, - {ANNOTATION_NO_VERIFIER, ANNOTATION_RELAXED_WRITE, - ANNOTATION_RELAXED_READ, ANNOTATION_RELEASE_WRITE, - ANNOTATION_ACQUIRE_READ}, - {ANNOTATION_IF, ANNOTATION_IFNOT}); + AnnotationSet annotations( + child_results, + {ANNOTATION_NO_VERIFIER, ANNOTATION_CPP_RELAXED_STORE, + ANNOTATION_CPP_RELAXED_LOAD, ANNOTATION_CPP_RELEASE_STORE, + ANNOTATION_CPP_ACQUIRE_LOAD}, + {ANNOTATION_IF, ANNOTATION_IFNOT}); bool generate_verify = !annotations.Contains(ANNOTATION_NO_VERIFIER); FieldSynchronization write_synchronization = FieldSynchronization::kNone; - if (annotations.Contains(ANNOTATION_RELEASE_WRITE)) { + if (annotations.Contains(ANNOTATION_CPP_RELEASE_STORE)) { write_synchronization = FieldSynchronization::kAcquireRelease; - } else if (annotations.Contains(ANNOTATION_RELAXED_WRITE)) { + } else if (annotations.Contains(ANNOTATION_CPP_RELAXED_STORE)) { write_synchronization = FieldSynchronization::kRelaxed; } FieldSynchronization read_synchronization = FieldSynchronization::kNone; - if (annotations.Contains(ANNOTATION_ACQUIRE_READ)) { + if (annotations.Contains(ANNOTATION_CPP_ACQUIRE_LOAD)) { read_synchronization = FieldSynchronization::kAcquireRelease; - } else if (annotations.Contains(ANNOTATION_RELAXED_READ)) { + } else if (annotations.Contains(ANNOTATION_CPP_RELAXED_LOAD)) { read_synchronization = FieldSynchronization::kRelaxed; } std::vector<ConditionalAnnotation> conditions; diff --git a/deps/v8/src/torque/torque.cc b/deps/v8/src/torque/torque.cc index 4e71c43014..ca16ce4ca6 100644 --- a/deps/v8/src/torque/torque.cc +++ b/deps/v8/src/torque/torque.cc @@ -33,7 +33,12 @@ int WrappedMain(int argc, const char** argv) { } else if (argument == "-v8-root") { options.v8_root = std::string(argv[++i]); } else if (argument == "-m32") { +#ifdef V8_COMPRESS_POINTERS + std::cerr << "Pointer compression is incompatible with -m32.\n"; + base::OS::Abort(); +#else options.force_32bit_output = true; +#endif } else if (argument == "-annotate-ir") { options.annotate_ir = true; } else { diff --git a/deps/v8/src/tracing/trace-event.cc b/deps/v8/src/tracing/trace-event.cc index 8e69fe5520..7f1f96adc7 100644 --- a/deps/v8/src/tracing/trace-event.cc +++ b/deps/v8/src/tracing/trace-event.cc @@ -20,6 +20,8 @@ v8::TracingController* TraceEventHelper::GetTracingController() { return v8::internal::V8::GetCurrentPlatform()->GetTracingController(); } +#ifdef V8_RUNTIME_CALL_STATS + void CallStatsScopedTracer::AddEndTraceEvent() { if (!has_parent_scope_ && p_data_->isolate) { auto value = v8::tracing::TracedValue::Create(); @@ -52,6 +54,8 @@ void CallStatsScopedTracer::Initialize(v8::internal::Isolate* isolate, v8::internal::tracing::kGlobalScope, v8::internal::tracing::kNoId, TRACE_EVENT_FLAG_NONE, v8::internal::tracing::kNoId); } + +#endif // defined(V8_RUNTIME_CALL_STATS) #endif // !defined(V8_USE_PERFETTO) } // namespace tracing diff --git a/deps/v8/src/tracing/trace-event.h b/deps/v8/src/tracing/trace-event.h index b5a16c8590..36c9cdcadf 100644 --- a/deps/v8/src/tracing/trace-event.h +++ b/deps/v8/src/tracing/trace-event.h @@ -279,6 +279,7 @@ enum CategoryGroupEnabledFlags { #define TRACE_EVENT_CALL_STATS_SCOPED(isolate, category_group, name) \ INTERNAL_TRACE_EVENT_CALL_STATS_SCOPED(isolate, category_group, name) +#ifdef V8_RUNTIME_CALL_STATS #define INTERNAL_TRACE_EVENT_CALL_STATS_SCOPED(isolate, category_group, name) \ INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category_group); \ v8::internal::tracing::CallStatsScopedTracer INTERNAL_TRACE_EVENT_UID( \ @@ -288,6 +289,9 @@ enum CategoryGroupEnabledFlags { .Initialize(isolate, INTERNAL_TRACE_EVENT_UID(category_group_enabled), \ name); \ } +#else // V8_RUNTIME_CALL_STATS +#define INTERNAL_TRACE_EVENT_CALL_STATS_SCOPED(isolate, category_group, name) +#endif // V8_RUNTIME_CALL_STATS namespace v8 { namespace internal { @@ -588,6 +592,7 @@ class ScopedTracer { Data data_; }; +#ifdef V8_RUNTIME_CALL_STATS // Do not use directly. class CallStatsScopedTracer { public: @@ -612,6 +617,7 @@ class CallStatsScopedTracer { Data* p_data_; Data data_; }; +#endif // defined(V8_RUNTIME_CALL_STATS) } // namespace tracing } // namespace internal @@ -619,6 +625,8 @@ class CallStatsScopedTracer { #else // defined(V8_USE_PERFETTO) +#ifdef V8_RUNTIME_CALL_STATS + #define TRACE_EVENT_CALL_STATS_SCOPED(isolate, category, name) \ struct PERFETTO_UID(ScopedEvent) { \ struct ScopedStats { \ @@ -650,6 +658,7 @@ class CallStatsScopedTracer { { isolate, 0 } \ } +#endif // defined(V8_RUNTIME_CALL_STATS) #endif // defined(V8_USE_PERFETTO) #endif // V8_TRACING_TRACE_EVENT_H_ diff --git a/deps/v8/src/trap-handler/DEPS b/deps/v8/src/trap-handler/DEPS index 061634d51b..dc6d27e155 100644 --- a/deps/v8/src/trap-handler/DEPS +++ b/deps/v8/src/trap-handler/DEPS @@ -6,19 +6,8 @@ include_rules = [ "-src", "-include", "+src/trap-handler", + # Use the IMMEDIATE_CRASH() macro for crashing non-recoverably on check failure. + "+src/base/immediate-crash.h", + # Allow include/v8config.h for V8_OS_* macros. + "+include/v8config.h", ] - -specific_include_rules = { - "trap-handler.h": [ - "+src/base/build_config.h", - "+src/common/globals.h", - "+src/flags/flags.h", - ], - "handler-inside-posix.h": [ - # To access V8_OS_LINUX. This file is already included in build_config.h. - "+include/v8config.h", - ], - "handler-inside-win.h": [ - "+src/base/macros.h", - ] -} diff --git a/deps/v8/src/trap-handler/handler-inside-posix.h b/deps/v8/src/trap-handler/handler-inside-posix.h index 49fe23a712..27e46773bb 100644 --- a/deps/v8/src/trap-handler/handler-inside-posix.h +++ b/deps/v8/src/trap-handler/handler-inside-posix.h @@ -6,6 +6,7 @@ #define V8_TRAP_HANDLER_HANDLER_INSIDE_POSIX_H_ #include <signal.h> + #include "include/v8config.h" namespace v8 { diff --git a/deps/v8/src/trap-handler/handler-inside-win.h b/deps/v8/src/trap-handler/handler-inside-win.h index 6db28149e7..9b9b060517 100644 --- a/deps/v8/src/trap-handler/handler-inside-win.h +++ b/deps/v8/src/trap-handler/handler-inside-win.h @@ -7,7 +7,7 @@ #include <windows.h> -#include "src/base/macros.h" +#include "src/trap-handler/trap-handler.h" // For TH_DISABLE_ASAN. namespace v8 { namespace internal { @@ -18,7 +18,7 @@ LONG WINAPI HandleWasmTrap(EXCEPTION_POINTERS* exception); // On Windows, asan installs its own exception handler which maps shadow // memory. Since our exception handler may be executed before the asan exception // handler, we have to make sure that asan shadow memory is not accessed here. -DISABLE_ASAN bool TryHandleWasmTrap(EXCEPTION_POINTERS* exception); +TH_DISABLE_ASAN bool TryHandleWasmTrap(EXCEPTION_POINTERS* exception); } // namespace trap_handler } // namespace internal diff --git a/deps/v8/src/trap-handler/handler-inside.cc b/deps/v8/src/trap-handler/handler-inside.cc index 81e37c205a..31d7f24491 100644 --- a/deps/v8/src/trap-handler/handler-inside.cc +++ b/deps/v8/src/trap-handler/handler-inside.cc @@ -50,11 +50,14 @@ bool TryFindLandingPad(uintptr_t fault_addr, uintptr_t* landing_pad) { if (data == nullptr) { continue; } - const Address base = data->base; + const uintptr_t base = data->base; if (fault_addr >= base && fault_addr < base + data->size) { // Hurray, we found the code object. Check for protected addresses. - const ptrdiff_t offset = fault_addr - base; + const uint32_t offset = static_cast<uint32_t>(fault_addr - base); + // The offset must fit in 32 bit, see comment on + // ProtectedInstructionData::instr_offset. + TH_DCHECK(base + offset == fault_addr); for (unsigned i = 0; i < data->num_protected_instructions; ++i) { if (data->instructions[i].instr_offset == offset) { diff --git a/deps/v8/src/trap-handler/handler-outside-posix.cc b/deps/v8/src/trap-handler/handler-outside-posix.cc index 55bcc0075b..004783b64f 100644 --- a/deps/v8/src/trap-handler/handler-outside-posix.cc +++ b/deps/v8/src/trap-handler/handler-outside-posix.cc @@ -21,6 +21,8 @@ #include <signal.h> +#include <cstdio> + #include "src/trap-handler/handler-inside-posix.h" #include "src/trap-handler/trap-handler-internal.h" @@ -39,7 +41,7 @@ bool g_is_default_signal_handler_registered; } // namespace bool RegisterDefaultTrapHandler() { - CHECK(!g_is_default_signal_handler_registered); + TH_CHECK(!g_is_default_signal_handler_registered); struct sigaction action; action.sa_sigaction = HandleSignal; @@ -61,7 +63,7 @@ bool RegisterDefaultTrapHandler() { defined(THREAD_SANITIZER) || defined(LEAK_SANITIZER) || \ defined(UNDEFINED_SANITIZER) struct sigaction installed_handler; - CHECK_EQ(sigaction(kOobSignal, NULL, &installed_handler), 0); + TH_CHECK(sigaction(kOobSignal, NULL, &installed_handler) == 0); // If the installed handler does not point to HandleSignal, then // allow_user_segv_handler is 0. if (installed_handler.sa_sigaction != HandleSignal) { diff --git a/deps/v8/src/trap-handler/handler-outside-win.cc b/deps/v8/src/trap-handler/handler-outside-win.cc index 09673c8ccc..307f919d78 100644 --- a/deps/v8/src/trap-handler/handler-outside-win.cc +++ b/deps/v8/src/trap-handler/handler-outside-win.cc @@ -40,7 +40,7 @@ void* g_registered_handler = nullptr; bool RegisterDefaultTrapHandler() { constexpr ULONG first = TRUE; - CHECK_NULL(g_registered_handler); + TH_CHECK(g_registered_handler == nullptr); g_registered_handler = AddVectoredExceptionHandler(first, HandleWasmTrap); return nullptr != g_registered_handler; diff --git a/deps/v8/src/trap-handler/handler-outside.cc b/deps/v8/src/trap-handler/handler-outside.cc index 62355a5b60..2eabcca0f7 100644 --- a/deps/v8/src/trap-handler/handler-outside.cc +++ b/deps/v8/src/trap-handler/handler-outside.cc @@ -66,7 +66,7 @@ bool IsDisjoint(const CodeProtectionInfo* a, const CodeProtectionInfo* b) { // registered. void VerifyCodeRangeIsDisjoint(const CodeProtectionInfo* code_info) { for (size_t i = 0; i < gNumCodeObjects; ++i) { - DCHECK(IsDisjoint(code_info, gCodeObjects[i].code_info)); + TH_DCHECK(IsDisjoint(code_info, gCodeObjects[i].code_info)); } } @@ -79,11 +79,11 @@ void ValidateCodeObjects() { // Do some sanity checks on the protected instruction data for (unsigned i = 0; i < data->num_protected_instructions; ++i) { - DCHECK_GE(data->instructions[i].instr_offset, 0); - DCHECK_LT(data->instructions[i].instr_offset, data->size); - DCHECK_GE(data->instructions[i].landing_offset, 0); - DCHECK_LT(data->instructions[i].landing_offset, data->size); - DCHECK_GT(data->instructions[i].landing_offset, + TH_DCHECK(data->instructions[i].instr_offset >= 0); + TH_DCHECK(data->instructions[i].instr_offset < data->size); + TH_DCHECK(data->instructions[i].landing_offset >= 0); + TH_DCHECK(data->instructions[i].landing_offset < data->size); + TH_DCHECK(data->instructions[i].landing_offset > data->instructions[i].instr_offset); } } @@ -92,10 +92,10 @@ void ValidateCodeObjects() { size_t free_count = 0; for (size_t i = gNextCodeObject; i != gNumCodeObjects; i = gCodeObjects[i].next_free) { - DCHECK_LT(i, gNumCodeObjects); + TH_DCHECK(i < gNumCodeObjects); ++free_count; // This check will fail if we encounter a cycle. - DCHECK_LE(free_count, gNumCodeObjects); + TH_DCHECK(free_count <= gNumCodeObjects); } // Check that all free entries are reachable via the free list. @@ -105,12 +105,12 @@ void ValidateCodeObjects() { ++free_count2; } } - DCHECK_EQ(free_count, free_count2); + TH_DCHECK(free_count == free_count2); } } // namespace CodeProtectionInfo* CreateHandlerData( - Address base, size_t size, size_t num_protected_instructions, + uintptr_t base, size_t size, size_t num_protected_instructions, const ProtectedInstructionData* protected_instructions) { const size_t alloc_size = HandlerDataSize(num_protected_instructions); CodeProtectionInfo* data = @@ -131,9 +131,8 @@ CodeProtectionInfo* CreateHandlerData( } int RegisterHandlerData( - Address base, size_t size, size_t num_protected_instructions, + uintptr_t base, size_t size, size_t num_protected_instructions, const ProtectedInstructionData* protected_instructions) { - CodeProtectionInfo* data = CreateHandlerData( base, size, num_protected_instructions, protected_instructions); @@ -188,7 +187,7 @@ int RegisterHandlerData( gNumCodeObjects = new_size; } - DCHECK(gCodeObjects[i].code_info == nullptr); + TH_DCHECK(gCodeObjects[i].code_info == nullptr); // Find out where the next entry should go. gNextCodeObject = gCodeObjects[i].next_free; @@ -211,7 +210,7 @@ void ReleaseHandlerData(int index) { if (index == kInvalidIndex) { return; } - DCHECK_GE(index, 0); + TH_DCHECK(index >= 0); // Remove the data from the global list if it's there. CodeProtectionInfo* data = nullptr; @@ -230,7 +229,7 @@ void ReleaseHandlerData(int index) { } // TODO(eholk): on debug builds, ensure there are no more copies in // the list. - DCHECK_NOT_NULL(data); // make sure we're releasing legitimate handler data. + TH_DCHECK(data); // make sure we're releasing legitimate handler data. free(data); } @@ -259,9 +258,9 @@ bool EnableTrapHandler(bool use_v8_handler) { // trap handlers are disabled. bool can_enable = g_can_enable_trap_handler.exchange(false, std::memory_order_relaxed); - if (!can_enable) { - FATAL("EnableTrapHandler called twice, or after IsTrapHandlerEnabled"); - } + // EnableTrapHandler called twice, or after IsTrapHandlerEnabled. + TH_CHECK(can_enable); + if (!V8_TRAP_HANDLER_SUPPORTED) { return false; } diff --git a/deps/v8/src/trap-handler/handler-shared.cc b/deps/v8/src/trap-handler/handler-shared.cc index 0607d2ed54..977d28daee 100644 --- a/deps/v8/src/trap-handler/handler-shared.cc +++ b/deps/v8/src/trap-handler/handler-shared.cc @@ -26,7 +26,7 @@ namespace trap_handler { // We declare this as int rather than bool as a workaround for a glibc bug, in // which the dynamic loader cannot handle executables whose TLS area is only // 1 byte in size; see https://sourceware.org/bugzilla/show_bug.cgi?id=14898. -THREAD_LOCAL int g_thread_in_wasm_code; +thread_local int g_thread_in_wasm_code; static_assert(sizeof(g_thread_in_wasm_code) > 1, "sizeof(thread_local_var) must be > 1, see " diff --git a/deps/v8/src/trap-handler/trap-handler-internal.h b/deps/v8/src/trap-handler/trap-handler-internal.h index 843cd34b70..71588ab895 100644 --- a/deps/v8/src/trap-handler/trap-handler-internal.h +++ b/deps/v8/src/trap-handler/trap-handler-internal.h @@ -22,7 +22,7 @@ namespace trap_handler { // protected memory access instructions and an offset to a landing pad to handle // faults on that instruction. struct CodeProtectionInfo { - Address base; + uintptr_t base; size_t size; size_t num_protected_instructions; ProtectedInstructionData instructions[1]; diff --git a/deps/v8/src/trap-handler/trap-handler.h b/deps/v8/src/trap-handler/trap-handler.h index fcdc256a38..a27ea236e7 100644 --- a/deps/v8/src/trap-handler/trap-handler.h +++ b/deps/v8/src/trap-handler/trap-handler.h @@ -10,15 +10,13 @@ #include <atomic> -#include "src/base/build_config.h" -#include "src/common/globals.h" -#include "src/flags/flags.h" +#include "include/v8config.h" +#include "src/base/immediate-crash.h" namespace v8 { namespace internal { namespace trap_handler { -// TODO(eholk): Support trap handlers on other platforms. #if V8_TARGET_ARCH_X64 && V8_OS_LINUX && !V8_OS_ANDROID #define V8_TRAP_HANDLER_SUPPORTED true #elif V8_TARGET_ARCH_X64 && V8_OS_WIN @@ -33,6 +31,35 @@ namespace trap_handler { #define V8_TRAP_HANDLER_SUPPORTED false #endif +// Setup for shared library export. +#if defined(BUILDING_V8_SHARED) && defined(V8_OS_WIN) +#define TH_EXPORT_PRIVATE __declspec(dllexport) +#elif defined(BUILDING_V8_SHARED) +#define TH_EXPORT_PRIVATE __attribute__((visibility("default"))) +#elif defined(USING_V8_SHARED) && defined(V8_OS_WIN) +#define TH_EXPORT_PRIVATE __declspec(dllimport) +#else +#define TH_EXPORT_PRIVATE +#endif + +#define TH_CHECK(condition) \ + if (!(condition)) IMMEDIATE_CRASH(); +#ifdef DEBUG +#define TH_DCHECK(condition) TH_CHECK(condition) +#else +#define TH_DCHECK(condition) void(0) +#endif + +#if defined(__has_feature) +#if __has_feature(address_sanitizer) +#define TH_DISABLE_ASAN __attribute__((no_sanitize_address)) +#else +#define TH_DISABLE_ASAN +#endif +#else +#define TH_DISABLE_ASAN +#endif + struct ProtectedInstructionData { // The offset of this instruction from the start of its code object. // Wasm code never grows larger than 2GB, so uint32_t is sufficient. @@ -50,23 +77,14 @@ const int kInvalidIndex = -1; /// /// This returns a number that can be used to identify the handler data to /// ReleaseHandlerData, or -1 on failure. -int V8_EXPORT_PRIVATE RegisterHandlerData( - Address base, size_t size, size_t num_protected_instructions, +int TH_EXPORT_PRIVATE RegisterHandlerData( + uintptr_t base, size_t size, size_t num_protected_instructions, const ProtectedInstructionData* protected_instructions); /// Removes the data from the master list and frees any memory, if necessary. /// TODO(mtrofin): We can switch to using size_t for index and not need /// kInvalidIndex. -void V8_EXPORT_PRIVATE ReleaseHandlerData(int index); - -#if V8_OS_WIN -#define THREAD_LOCAL __declspec(thread) -#elif V8_OS_ANDROID -// TODO(eholk): fix this before enabling for trap handlers for Android. -#define THREAD_LOCAL -#else -#define THREAD_LOCAL __thread -#endif +void TH_EXPORT_PRIVATE ReleaseHandlerData(int index); // Initially false, set to true if when trap handlers are enabled. Never goes // back to false then. @@ -83,10 +101,10 @@ extern std::atomic<bool> g_can_enable_trap_handler; // // use_v8_handler indicates that V8 should install its own handler // rather than relying on the embedder to do it. -V8_EXPORT_PRIVATE bool EnableTrapHandler(bool use_v8_handler); +TH_EXPORT_PRIVATE bool EnableTrapHandler(bool use_v8_handler); inline bool IsTrapHandlerEnabled() { - DCHECK_IMPLIES(g_is_trap_handler_enabled, V8_TRAP_HANDLER_SUPPORTED); + TH_DCHECK(!g_is_trap_handler_enabled || V8_TRAP_HANDLER_SUPPORTED); // Disallow enabling the trap handler after retrieving the current value. // Re-enabling them late can produce issues because code or objects might have // been generated under the assumption that trap handlers are disabled. @@ -97,34 +115,40 @@ inline bool IsTrapHandlerEnabled() { return g_is_trap_handler_enabled; } -extern THREAD_LOCAL int g_thread_in_wasm_code; +#if defined(V8_OS_AIX) +// `thread_local` does not link on AIX: +// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100641 +extern __thread int g_thread_in_wasm_code; +#else +extern thread_local int g_thread_in_wasm_code; +#endif // Return the address of the thread-local {g_thread_in_wasm_code} variable. This // pointer can be accessed and modified as long as the thread calling this // function exists. Only use if from the same thread do avoid race conditions. -V8_NOINLINE V8_EXPORT_PRIVATE int* GetThreadInWasmThreadLocalAddress(); +V8_NOINLINE TH_EXPORT_PRIVATE int* GetThreadInWasmThreadLocalAddress(); // On Windows, asan installs its own exception handler which maps shadow // memory. Since our exception handler may be executed before the asan exception // handler, we have to make sure that asan shadow memory is not accessed here. -DISABLE_ASAN inline bool IsThreadInWasm() { return g_thread_in_wasm_code; } +TH_DISABLE_ASAN inline bool IsThreadInWasm() { return g_thread_in_wasm_code; } inline void SetThreadInWasm() { if (IsTrapHandlerEnabled()) { - DCHECK(!IsThreadInWasm()); + TH_DCHECK(!IsThreadInWasm()); g_thread_in_wasm_code = true; } } inline void ClearThreadInWasm() { if (IsTrapHandlerEnabled()) { - DCHECK(IsThreadInWasm()); + TH_DCHECK(IsThreadInWasm()); g_thread_in_wasm_code = false; } } bool RegisterDefaultTrapHandler(); -V8_EXPORT_PRIVATE void RemoveTrapHandler(); +TH_EXPORT_PRIVATE void RemoveTrapHandler(); size_t GetRecoveredTrapCount(); diff --git a/deps/v8/src/utils/allocation.cc b/deps/v8/src/utils/allocation.cc index db4d3ac13b..0c7c468d82 100644 --- a/deps/v8/src/utils/allocation.cc +++ b/deps/v8/src/utils/allocation.cc @@ -5,19 +5,21 @@ #include "src/utils/allocation.h" #include <stdlib.h> // For free, malloc. + #include "src/base/bits.h" +#include "src/base/bounded-page-allocator.h" #include "src/base/lazy-instance.h" #include "src/base/logging.h" #include "src/base/page-allocator.h" #include "src/base/platform/platform.h" +#include "src/base/sanitizer/lsan-page-allocator.h" #include "src/flags/flags.h" #include "src/init/v8.h" -#include "src/sanitizer/lsan-page-allocator.h" #include "src/utils/memcopy.h" #include "src/utils/vector.h" #if V8_LIBC_BIONIC -#include <malloc.h> // NOLINT +#include <malloc.h> #include "src/base/platform/wrappers.h" #endif @@ -293,5 +295,137 @@ void VirtualMemory::FreeReadOnly() { RoundUp(region.size(), page_allocator->AllocatePageSize()))); } +VirtualMemoryCage::VirtualMemoryCage() = default; + +VirtualMemoryCage::~VirtualMemoryCage() { Free(); } + +VirtualMemoryCage::VirtualMemoryCage(VirtualMemoryCage&& other) V8_NOEXCEPT { + *this = std::move(other); +} + +VirtualMemoryCage& VirtualMemoryCage::operator=(VirtualMemoryCage&& other) + V8_NOEXCEPT { + page_allocator_ = std::move(other.page_allocator_); + reservation_ = std::move(other.reservation_); + return *this; +} + +namespace { +inline Address VirtualMemoryCageStart( + Address reservation_start, + const VirtualMemoryCage::ReservationParams& params) { + return RoundUp(reservation_start + params.base_bias_size, + params.base_alignment) - + params.base_bias_size; +} +} // namespace + +bool VirtualMemoryCage::InitReservation(const ReservationParams& params) { + DCHECK(!reservation_.IsReserved()); + + const size_t allocate_page_size = params.page_allocator->AllocatePageSize(); + CHECK(IsAligned(params.reservation_size, allocate_page_size)); + CHECK(params.base_alignment == ReservationParams::kAnyBaseAlignment || + (IsAligned(params.base_alignment, allocate_page_size) && + IsAligned(params.base_bias_size, allocate_page_size))); + CHECK_LE(params.base_bias_size, params.reservation_size); + + Address hint = RoundDown(params.requested_start_hint, + RoundUp(params.base_alignment, allocate_page_size)) - + RoundUp(params.base_bias_size, allocate_page_size); + + if (params.base_alignment == ReservationParams::kAnyBaseAlignment) { + // When the base doesn't need to be aligned, the virtual memory reservation + // fails only due to OOM. + VirtualMemory reservation(params.page_allocator, params.reservation_size, + reinterpret_cast<void*>(hint)); + if (!reservation.IsReserved()) return false; + + reservation_ = std::move(reservation); + base_ = reservation_.address() + params.base_bias_size; + CHECK_EQ(reservation_.size(), params.reservation_size); + } else { + // Otherwise, we need to try harder by first overreserving + // in hopes of finding a correctly aligned address within the larger + // reservation. + const int kMaxAttempts = 4; + for (int attempt = 0; attempt < kMaxAttempts; ++attempt) { + // Reserve a region of twice the size so that there is an aligned address + // within it that's usable as the cage base. + VirtualMemory padded_reservation(params.page_allocator, + params.reservation_size * 2, + reinterpret_cast<void*>(hint)); + if (!padded_reservation.IsReserved()) return false; + + // Find properly aligned sub-region inside the reservation. + Address address = + VirtualMemoryCageStart(padded_reservation.address(), params); + CHECK(padded_reservation.InVM(address, params.reservation_size)); + +#if defined(V8_OS_FUCHSIA) + // Fuchsia does not respect given hints so as a workaround we will use + // overreserved address space region instead of trying to re-reserve + // a subregion. + bool overreserve = true; +#else + // For the last attempt use the overreserved region to avoid an OOM crash. + // This case can happen if there are many isolates being created in + // parallel that race for reserving the regions. + bool overreserve = (attempt == kMaxAttempts - 1); +#endif + + if (overreserve) { + if (padded_reservation.InVM(address, params.reservation_size)) { + reservation_ = std::move(padded_reservation); + base_ = address + params.base_bias_size; + break; + } + } else { + // Now free the padded reservation and immediately try to reserve an + // exact region at aligned address. We have to do this dancing because + // the reservation address requirement is more complex than just a + // certain alignment and not all operating systems support freeing parts + // of reserved address space regions. + padded_reservation.Free(); + + VirtualMemory reservation(params.page_allocator, + params.reservation_size, + reinterpret_cast<void*>(address)); + if (!reservation.IsReserved()) return false; + + // The reservation could still be somewhere else but we can accept it + // if it has the required alignment. + Address address = VirtualMemoryCageStart(reservation.address(), params); + if (reservation.address() == address) { + reservation_ = std::move(reservation); + base_ = address + params.base_bias_size; + CHECK_EQ(reservation_.size(), params.reservation_size); + break; + } + } + } + } + CHECK_NE(base_, kNullAddress); + CHECK(IsAligned(base_, params.base_alignment)); + + const Address allocatable_base = RoundUp(base_, params.page_size); + const size_t allocatable_size = + RoundDown(params.reservation_size - (allocatable_base - base_) - + params.base_bias_size, + params.page_size); + page_allocator_ = std::make_unique<base::BoundedPageAllocator>( + params.page_allocator, allocatable_base, allocatable_size, + params.page_size); + return true; +} + +void VirtualMemoryCage::Free() { + if (IsReserved()) { + base_ = kNullAddress; + page_allocator_.reset(); + reservation_.Free(); + } +} + } // namespace internal } // namespace v8 diff --git a/deps/v8/src/utils/allocation.h b/deps/v8/src/utils/allocation.h index 6adefccf8d..1d161b7e24 100644 --- a/deps/v8/src/utils/allocation.h +++ b/deps/v8/src/utils/allocation.h @@ -13,6 +13,11 @@ #include "src/init/v8.h" namespace v8 { + +namespace base { +class BoundedPageAllocator; +} // namespace base + namespace internal { class Isolate; @@ -213,7 +218,7 @@ class VirtualMemory final { v8::PageAllocator* page_allocator() { return page_allocator_; } - base::AddressRegion region() const { return region_; } + const base::AddressRegion& region() const { return region_; } // Returns the start address of the reserved memory. // If the memory was reserved with an alignment, this address is not @@ -250,7 +255,7 @@ class VirtualMemory final { // can be called on a VirtualMemory that is itself not writable. V8_EXPORT_PRIVATE void FreeReadOnly(); - bool InVM(Address address, size_t size) { + bool InVM(Address address, size_t size) const { return region_.contains(address, size); } @@ -260,6 +265,102 @@ class VirtualMemory final { base::AddressRegion region_; }; +// Represents a VirtualMemory reservation along with a BoundedPageAllocator that +// can be used to allocate within the reservation. +// +// Virtual memory cages are used for both the pointer compression cage and code +// ranges (on platforms that require code ranges) and are configurable via +// ReservationParams. +// +// +------------+-----------+----------- ~~~ -+ +// | ... | ... | ... | +// +------------+-----------+------------ ~~~ -+ +// ^ ^ ^ +// start cage base allocatable base +// +// <------------> <-------------------> +// base bias size allocatable size +// <--------------------------------------------> +// reservation size +// +// - The reservation is made using ReservationParams::page_allocator. +// - start is the start of the virtual memory reservation. +// - cage base is the base address of the cage. +// - allocatable base is the cage base rounded up to the nearest +// ReservationParams::page_size, and is the start of the allocatable area for +// the BoundedPageAllocator. +// +// - The base bias is configured by ReservationParams::base_bias_size. +// - The reservation size is configured by ReservationParams::reservation_size. +// +// Additionally, +// - The alignment of the cage base is configured by +// ReservationParams::base_alignment. +// - The page size of the BoundedPageAllocator is configured by +// ReservationParams::page_size. +// - A hint for the value of start can be passed by +// ReservationParams::requested_start_hint. +// +// The configuration is subject to the following alignment requirements. +// Below, AllocatePageSize is short for +// ReservationParams::page_allocator->AllocatePageSize(). +// +// - The reservation size must be AllocatePageSize-aligned. +// - If the base alignment is not kAnyBaseAlignment, both the base alignment +// and the base bias size must be AllocatePageSize-aligned. +// - The base alignment may be kAnyBaseAlignment to denote any alignment is +// acceptable. In this case the base bias size does not need to be aligned. +class VirtualMemoryCage { + public: + VirtualMemoryCage(); + virtual ~VirtualMemoryCage(); + + VirtualMemoryCage(const VirtualMemoryCage&) = delete; + VirtualMemoryCage& operator=(VirtualMemoryCage&) = delete; + + VirtualMemoryCage(VirtualMemoryCage&& other) V8_NOEXCEPT; + VirtualMemoryCage& operator=(VirtualMemoryCage&& other) V8_NOEXCEPT; + + Address base() const { return base_; } + + base::BoundedPageAllocator* page_allocator() const { + return page_allocator_.get(); + } + + VirtualMemory* reservation() { return &reservation_; } + const VirtualMemory* reservation() const { return &reservation_; } + + bool IsReserved() const { + DCHECK_EQ(base_ != kNullAddress, reservation_.IsReserved()); + return reservation_.IsReserved(); + } + + struct ReservationParams { + // The allocator to use to reserve the virtual memory. + v8::PageAllocator* page_allocator; + // See diagram above. + size_t reservation_size; + size_t base_alignment; + size_t base_bias_size; + size_t page_size; + Address requested_start_hint; + + static constexpr size_t kAnyBaseAlignment = 1; + }; + + // A number of attempts is made to try to reserve a region that satisfies the + // constraints in params, but this may fail. The base address may be different + // than the one requested. + bool InitReservation(const ReservationParams& params); + + void Free(); + + protected: + Address base_ = kNullAddress; + std::unique_ptr<base::BoundedPageAllocator> page_allocator_; + VirtualMemory reservation_; +}; + } // namespace internal } // namespace v8 diff --git a/deps/v8/src/utils/ostreams.cc b/deps/v8/src/utils/ostreams.cc index b58f51159b..a2a6f8574f 100644 --- a/deps/v8/src/utils/ostreams.cc +++ b/deps/v8/src/utils/ostreams.cc @@ -19,7 +19,7 @@ #if defined(ANDROID) && !defined(V8_ANDROID_LOG_STDOUT) #define LOG_TAG "v8" -#include <android/log.h> // NOLINT +#include <android/log.h> #endif namespace v8 { diff --git a/deps/v8/src/utils/ostreams.h b/deps/v8/src/utils/ostreams.h index 899c85fd94..2dfedb5fd9 100644 --- a/deps/v8/src/utils/ostreams.h +++ b/deps/v8/src/utils/ostreams.h @@ -8,7 +8,7 @@ #include <cstddef> #include <cstdio> #include <cstring> -#include <ostream> // NOLINT +#include <ostream> #include <streambuf> #include "include/v8config.h" @@ -158,10 +158,10 @@ struct PrintIteratorRange { // Print any collection which can be iterated via std::begin and std::end. // {Iterator} is the common type of {std::begin} and {std::end} called on a // {const T&}. This function is only instantiable if that type exists. -template <typename T, typename Iterator = typename std::common_type< - decltype(std::begin(std::declval<const T&>())), - decltype(std::end(std::declval<const T&>()))>::type> -PrintIteratorRange<Iterator> PrintCollection(const T& collection) { +template <typename T> +auto PrintCollection(const T& collection) -> PrintIteratorRange< + typename std::common_type<decltype(std::begin(collection)), + decltype(std::end(collection))>::type> { return {std::begin(collection), std::end(collection)}; } diff --git a/deps/v8/src/utils/v8dll-main.cc b/deps/v8/src/utils/v8dll-main.cc index 255f0d8dbf..6d7f390c8f 100644 --- a/deps/v8/src/utils/v8dll-main.cc +++ b/deps/v8/src/utils/v8dll-main.cc @@ -4,7 +4,7 @@ // The GYP based build ends up defining USING_V8_SHARED when compiling this // file. -#undef USING_V8_SHARED // NOLINT +#undef USING_V8_SHARED #include "include/v8.h" #if V8_OS_WIN diff --git a/deps/v8/src/utils/vector.h b/deps/v8/src/utils/vector.h index dad7abf027..d085f14ab0 100644 --- a/deps/v8/src/utils/vector.h +++ b/deps/v8/src/utils/vector.h @@ -28,7 +28,7 @@ class Vector { constexpr Vector() : start_(nullptr), length_(0) {} constexpr Vector(T* data, size_t length) : start_(data), length_(length) { - CONSTEXPR_DCHECK(length == 0 || data != nullptr); + DCHECK(length == 0 || data != nullptr); } static Vector<T> New(size_t length) { diff --git a/deps/v8/src/wasm/OWNERS b/deps/v8/src/wasm/OWNERS index d0de7de935..516dd84d6e 100644 --- a/deps/v8/src/wasm/OWNERS +++ b/deps/v8/src/wasm/OWNERS @@ -3,5 +3,6 @@ bbudge@chromium.org clemensb@chromium.org gdeepti@chromium.org jkummerow@chromium.org +manoskouk@chromium.org thibaudm@chromium.org zhin@chromium.org diff --git a/deps/v8/src/wasm/baseline/arm/liftoff-assembler-arm.h b/deps/v8/src/wasm/baseline/arm/liftoff-assembler-arm.h index 7acdf635c9..acc7f08fa0 100644 --- a/deps/v8/src/wasm/baseline/arm/liftoff-assembler-arm.h +++ b/deps/v8/src/wasm/baseline/arm/liftoff-assembler-arm.h @@ -605,6 +605,8 @@ void LiftoffAssembler::SpillInstance(Register instance) { str(instance, liftoff::GetInstanceOperand()); } +void LiftoffAssembler::ResetOSRTarget() {} + void LiftoffAssembler::FillInstanceInto(Register dst) { ldr(dst, liftoff::GetInstanceOperand()); } @@ -743,7 +745,7 @@ void LiftoffAssembler::StoreTaggedPointer(Register dst_addr, : MemOperand(dst_addr, actual_offset_reg); str(src.gp(), dst_op); - if (skip_write_barrier) return; + if (skip_write_barrier || FLAG_disable_write_barriers) return; // The write barrier. Label write_barrier; @@ -758,7 +760,7 @@ void LiftoffAssembler::StoreTaggedPointer(Register dst_addr, CallRecordWriteStub(dst_addr, actual_offset_reg == no_reg ? Operand(offset_imm) : Operand(actual_offset_reg), - EMIT_REMEMBERED_SET, kSaveFPRegs, + RememberedSetAction::kEmit, SaveFPRegsMode::kSave, wasm::WasmCode::kRecordWrite); bind(&exit); } @@ -766,8 +768,7 @@ void LiftoffAssembler::StoreTaggedPointer(Register dst_addr, void LiftoffAssembler::Load(LiftoffRegister dst, Register src_addr, Register offset_reg, uint32_t offset_imm, LoadType type, LiftoffRegList pinned, - uint32_t* protected_load_pc, bool is_load_mem, - bool i64_offset) { + uint32_t* protected_load_pc, bool is_load_mem) { // Offsets >=2GB are statically OOB on 32-bit systems. DCHECK_LE(offset_imm, std::numeric_limits<int32_t>::max()); liftoff::LoadInternal(this, dst, src_addr, offset_reg, @@ -4228,6 +4229,8 @@ void LiftoffAssembler::DeallocateStackSlot(uint32_t size) { add(sp, sp, Operand(size)); } +void LiftoffAssembler::MaybeOSR() {} + void LiftoffStackSlots::Construct(int param_slots) { DCHECK_LT(0, slots_.size()); SortInPushOrder(); diff --git a/deps/v8/src/wasm/baseline/arm64/liftoff-assembler-arm64.h b/deps/v8/src/wasm/baseline/arm64/liftoff-assembler-arm64.h index bea5100ef3..38d424d8e0 100644 --- a/deps/v8/src/wasm/baseline/arm64/liftoff-assembler-arm64.h +++ b/deps/v8/src/wasm/baseline/arm64/liftoff-assembler-arm64.h @@ -126,23 +126,13 @@ inline CPURegister AcquireByType(UseScratchRegisterScope* temps, template <typename T> inline MemOperand GetMemOp(LiftoffAssembler* assm, UseScratchRegisterScope* temps, Register addr, - Register offset, T offset_imm, - bool i64_offset = false) { + Register offset, T offset_imm) { if (offset.is_valid()) { - if (offset_imm == 0) { - return i64_offset ? MemOperand(addr.X(), offset.X()) - : MemOperand(addr.X(), offset.W(), UXTW); - } + if (offset_imm == 0) return MemOperand(addr.X(), offset.X()); + Register tmp = temps->AcquireX(); DCHECK_GE(kMaxUInt32, offset_imm); - if (i64_offset) { - Register tmp = temps->AcquireX(); - assm->Add(tmp, offset.X(), offset_imm); - return MemOperand(addr.X(), tmp); - } else { - Register tmp = temps->AcquireW(); - assm->Add(tmp, offset.W(), offset_imm); - return MemOperand(addr.X(), tmp, UXTW); - } + assm->Add(tmp, offset.X(), offset_imm); + return MemOperand(addr.X(), tmp); } return MemOperand(addr.X(), offset_imm); } @@ -440,6 +430,8 @@ void LiftoffAssembler::SpillInstance(Register instance) { Str(instance, liftoff::GetInstanceOperand()); } +void LiftoffAssembler::ResetOSRTarget() {} + void LiftoffAssembler::FillInstanceInto(Register dst) { Ldr(dst, liftoff::GetInstanceOperand()); } @@ -474,7 +466,7 @@ void LiftoffAssembler::StoreTaggedPointer(Register dst_addr, liftoff::GetMemOp(this, &temps, dst_addr, offset_reg, offset_imm); StoreTaggedField(src.gp(), dst_op); - if (skip_write_barrier) return; + if (skip_write_barrier || FLAG_disable_write_barriers) return; // The write barrier. Label write_barrier; @@ -489,22 +481,22 @@ void LiftoffAssembler::StoreTaggedPointer(Register dst_addr, } CheckPageFlag(src.gp(), MemoryChunk::kPointersToHereAreInterestingMask, ne, &exit); - CallRecordWriteStub( - dst_addr, - dst_op.IsRegisterOffset() ? Operand(dst_op.regoffset().X()) - : Operand(dst_op.offset()), - EMIT_REMEMBERED_SET, kSaveFPRegs, wasm::WasmCode::kRecordWrite); + CallRecordWriteStub(dst_addr, + dst_op.IsRegisterOffset() + ? Operand(dst_op.regoffset().X()) + : Operand(dst_op.offset()), + RememberedSetAction::kEmit, SaveFPRegsMode::kSave, + wasm::WasmCode::kRecordWrite); bind(&exit); } void LiftoffAssembler::Load(LiftoffRegister dst, Register src_addr, Register offset_reg, uintptr_t offset_imm, LoadType type, LiftoffRegList pinned, - uint32_t* protected_load_pc, bool is_load_mem, - bool i64_offset) { + uint32_t* protected_load_pc, bool is_load_mem) { UseScratchRegisterScope temps(this); - MemOperand src_op = liftoff::GetMemOp(this, &temps, src_addr, offset_reg, - offset_imm, i64_offset); + MemOperand src_op = + liftoff::GetMemOp(this, &temps, src_addr, offset_reg, offset_imm); if (protected_load_pc) *protected_load_pc = pc_offset(); switch (type.value()) { case LoadType::kI32Load8U: @@ -3232,6 +3224,8 @@ void LiftoffAssembler::DeallocateStackSlot(uint32_t size) { Drop(size, 1); } +void LiftoffAssembler::MaybeOSR() {} + void LiftoffStackSlots::Construct(int param_slots) { DCHECK_LT(0, slots_.size()); // The stack pointer is required to be quadword aligned. diff --git a/deps/v8/src/wasm/baseline/ia32/liftoff-assembler-ia32.h b/deps/v8/src/wasm/baseline/ia32/liftoff-assembler-ia32.h index e597467c73..9f35b5efc3 100644 --- a/deps/v8/src/wasm/baseline/ia32/liftoff-assembler-ia32.h +++ b/deps/v8/src/wasm/baseline/ia32/liftoff-assembler-ia32.h @@ -332,6 +332,8 @@ void LiftoffAssembler::SpillInstance(Register instance) { mov(liftoff::GetInstanceOperand(), instance); } +void LiftoffAssembler::ResetOSRTarget() {} + void LiftoffAssembler::FillInstanceInto(Register dst) { mov(dst, liftoff::GetInstanceOperand()); } @@ -365,7 +367,7 @@ void LiftoffAssembler::StoreTaggedPointer(Register dst_addr, : Operand(dst_addr, offset_reg, times_1, offset_imm); mov(dst_op, src.gp()); - if (skip_write_barrier) return; + if (skip_write_barrier || FLAG_disable_write_barriers) return; Register scratch = pinned.set(GetUnusedRegister(kGpReg, pinned)).gp(); Label write_barrier; @@ -380,16 +382,15 @@ void LiftoffAssembler::StoreTaggedPointer(Register dst_addr, MemoryChunk::kPointersToHereAreInterestingMask, zero, &exit, Label::kNear); lea(scratch, dst_op); - CallRecordWriteStub(dst_addr, scratch, EMIT_REMEMBERED_SET, kSaveFPRegs, - wasm::WasmCode::kRecordWrite); + CallRecordWriteStub(dst_addr, scratch, RememberedSetAction::kEmit, + SaveFPRegsMode::kSave, wasm::WasmCode::kRecordWrite); bind(&exit); } void LiftoffAssembler::Load(LiftoffRegister dst, Register src_addr, Register offset_reg, uint32_t offset_imm, LoadType type, LiftoffRegList pinned, - uint32_t* protected_load_pc, bool is_load_mem, - bool i64_offset) { + uint32_t* protected_load_pc, bool is_load_mem) { // Offsets >=2GB are statically OOB on 32-bit systems. DCHECK_LE(offset_imm, std::numeric_limits<int32_t>::max()); DCHECK_EQ(type.value_type() == kWasmI64, dst.is_gp_pair()); @@ -2933,15 +2934,7 @@ void LiftoffAssembler::emit_i64x2_splat(LiftoffRegister dst, void LiftoffAssembler::emit_f32x4_splat(LiftoffRegister dst, LiftoffRegister src) { - if (CpuFeatures::IsSupported(AVX)) { - CpuFeatureScope scope(this, AVX); - vshufps(dst.fp(), src.fp(), src.fp(), 0); - } else { - if (dst.fp() != src.fp()) { - movss(dst.fp(), src.fp()); - } - shufps(dst.fp(), src.fp(), 0); - } + F32x4Splat(dst.fp(), src.fp()); } void LiftoffAssembler::emit_f64x2_splat(LiftoffRegister dst, @@ -3263,13 +3256,7 @@ void LiftoffAssembler::emit_s128_const(LiftoffRegister dst, } void LiftoffAssembler::emit_s128_not(LiftoffRegister dst, LiftoffRegister src) { - if (dst.fp() != src.fp()) { - Pcmpeqd(dst.fp(), dst.fp()); - Pxor(dst.fp(), src.fp()); - } else { - Pcmpeqd(liftoff::kScratchDoubleReg, liftoff::kScratchDoubleReg); - Pxor(dst.fp(), liftoff::kScratchDoubleReg); - } + S128Not(dst.fp(), src.fp(), liftoff::kScratchDoubleReg); } void LiftoffAssembler::emit_s128_and(LiftoffRegister dst, LiftoffRegister lhs, @@ -3850,16 +3837,7 @@ void LiftoffAssembler::emit_i32x4_extmul_high_i16x8_u(LiftoffRegister dst, void LiftoffAssembler::emit_i64x2_neg(LiftoffRegister dst, LiftoffRegister src) { - DoubleRegister reg = - dst.fp() == src.fp() ? liftoff::kScratchDoubleReg : dst.fp(); - Pxor(reg, reg); - if (CpuFeatures::IsSupported(AVX)) { - CpuFeatureScope scope(this, AVX); - vpsubq(dst.fp(), reg, src.fp()); - } else { - psubq(reg, src.fp()); - if (dst.fp() != reg) movaps(dst.fp(), reg); - } + I64x2Neg(dst.fp(), src.fp(), liftoff::kScratchDoubleReg); } void LiftoffAssembler::emit_i64x2_alltrue(LiftoffRegister dst, @@ -3893,7 +3871,7 @@ void LiftoffAssembler::emit_i64x2_shr_s(LiftoffRegister dst, // Set up a mask [0x80000000,0,0x80000000,0]. Pcmpeqb(tmp, tmp); - Psllq(tmp, tmp, 63); + Psllq(tmp, tmp, byte{63}); Psrlq(tmp, tmp, shift); if (CpuFeatures::IsSupported(AVX)) { @@ -3912,11 +3890,11 @@ void LiftoffAssembler::emit_i64x2_shr_s(LiftoffRegister dst, void LiftoffAssembler::emit_i64x2_shri_s(LiftoffRegister dst, LiftoffRegister lhs, int32_t rhs) { XMMRegister tmp = liftoff::kScratchDoubleReg; - int32_t shift = rhs & 63; + byte shift = rhs & 63; // Set up a mask [0x80000000,0,0x80000000,0]. Pcmpeqb(tmp, tmp); - Psllq(tmp, tmp, 63); + Psllq(tmp, tmp, byte{63}); Psrlq(tmp, tmp, shift); liftoff::EmitSimdShiftOpImm<&Assembler::vpsrlq, &Assembler::psrlq, 6>( @@ -3960,13 +3938,13 @@ void LiftoffAssembler::emit_i64x2_mul(LiftoffRegister dst, LiftoffRegister lhs, Movaps(tmp1.fp(), lhs.fp()); Movaps(tmp2.fp(), rhs.fp()); // Multiply high dword of each qword of left with right. - Psrlq(tmp1.fp(), 32); + Psrlq(tmp1.fp(), byte{32}); Pmuludq(tmp1.fp(), tmp1.fp(), rhs.fp()); // Multiply high dword of each qword of right with left. - Psrlq(tmp2.fp(), 32); + Psrlq(tmp2.fp(), byte{32}); Pmuludq(tmp2.fp(), tmp2.fp(), lhs.fp()); Paddq(tmp2.fp(), tmp2.fp(), tmp1.fp()); - Psllq(tmp2.fp(), tmp2.fp(), 32); + Psllq(tmp2.fp(), tmp2.fp(), byte{32}); liftoff::EmitSimdCommutativeBinOp<&Assembler::vpmuludq, &Assembler::pmuludq>( this, dst, lhs, rhs); Paddq(dst.fp(), dst.fp(), tmp2.fp()); @@ -4029,11 +4007,11 @@ void LiftoffAssembler::emit_f32x4_abs(LiftoffRegister dst, LiftoffRegister src) { if (dst.fp() == src.fp()) { Pcmpeqd(liftoff::kScratchDoubleReg, liftoff::kScratchDoubleReg); - Psrld(liftoff::kScratchDoubleReg, liftoff::kScratchDoubleReg, 1); + Psrld(liftoff::kScratchDoubleReg, liftoff::kScratchDoubleReg, byte{1}); Andps(dst.fp(), liftoff::kScratchDoubleReg); } else { Pcmpeqd(dst.fp(), dst.fp()); - Psrld(dst.fp(), dst.fp(), 1); + Psrld(dst.fp(), dst.fp(), byte{1}); Andps(dst.fp(), src.fp()); } } @@ -4042,11 +4020,11 @@ void LiftoffAssembler::emit_f32x4_neg(LiftoffRegister dst, LiftoffRegister src) { if (dst.fp() == src.fp()) { Pcmpeqd(liftoff::kScratchDoubleReg, liftoff::kScratchDoubleReg); - Pslld(liftoff::kScratchDoubleReg, liftoff::kScratchDoubleReg, 31); + Pslld(liftoff::kScratchDoubleReg, liftoff::kScratchDoubleReg, byte{31}); Xorps(dst.fp(), liftoff::kScratchDoubleReg); } else { Pcmpeqd(dst.fp(), dst.fp()); - Pslld(dst.fp(), dst.fp(), 31); + Pslld(dst.fp(), dst.fp(), byte{31}); Xorps(dst.fp(), src.fp()); } } @@ -4185,11 +4163,11 @@ void LiftoffAssembler::emit_f64x2_abs(LiftoffRegister dst, LiftoffRegister src) { if (dst.fp() == src.fp()) { Pcmpeqd(liftoff::kScratchDoubleReg, liftoff::kScratchDoubleReg); - Psrlq(liftoff::kScratchDoubleReg, liftoff::kScratchDoubleReg, 1); + Psrlq(liftoff::kScratchDoubleReg, liftoff::kScratchDoubleReg, byte{1}); Andpd(dst.fp(), liftoff::kScratchDoubleReg); } else { Pcmpeqd(dst.fp(), dst.fp()); - Psrlq(dst.fp(), dst.fp(), 1); + Psrlq(dst.fp(), dst.fp(), byte{1}); Andpd(dst.fp(), src.fp()); } } @@ -4198,11 +4176,11 @@ void LiftoffAssembler::emit_f64x2_neg(LiftoffRegister dst, LiftoffRegister src) { if (dst.fp() == src.fp()) { Pcmpeqd(liftoff::kScratchDoubleReg, liftoff::kScratchDoubleReg); - Psllq(liftoff::kScratchDoubleReg, liftoff::kScratchDoubleReg, 63); + Psllq(liftoff::kScratchDoubleReg, liftoff::kScratchDoubleReg, byte{63}); Xorpd(dst.fp(), liftoff::kScratchDoubleReg); } else { Pcmpeqd(dst.fp(), dst.fp()); - Psllq(dst.fp(), dst.fp(), 63); + Psllq(dst.fp(), dst.fp(), byte{63}); Xorpd(dst.fp(), src.fp()); } } @@ -4266,61 +4244,12 @@ void LiftoffAssembler::emit_f64x2_div(LiftoffRegister dst, LiftoffRegister lhs, void LiftoffAssembler::emit_f64x2_min(LiftoffRegister dst, LiftoffRegister lhs, LiftoffRegister rhs) { - // The minpd instruction doesn't propagate NaNs and +0's in its first - // operand. Perform minpd in both orders, merge the results, and adjust. - if (CpuFeatures::IsSupported(AVX)) { - CpuFeatureScope scope(this, AVX); - vminpd(liftoff::kScratchDoubleReg, lhs.fp(), rhs.fp()); - vminpd(dst.fp(), rhs.fp(), lhs.fp()); - } else if (dst.fp() == lhs.fp() || dst.fp() == rhs.fp()) { - XMMRegister src = dst.fp() == lhs.fp() ? rhs.fp() : lhs.fp(); - movaps(liftoff::kScratchDoubleReg, src); - minpd(liftoff::kScratchDoubleReg, dst.fp()); - minpd(dst.fp(), src); - } else { - movaps(liftoff::kScratchDoubleReg, lhs.fp()); - minpd(liftoff::kScratchDoubleReg, rhs.fp()); - movaps(dst.fp(), rhs.fp()); - minpd(dst.fp(), lhs.fp()); - } - // propagate -0's and NaNs, which may be non-canonical. - Orpd(liftoff::kScratchDoubleReg, dst.fp()); - // Canonicalize NaNs by quieting and clearing the payload. - Cmpunordpd(dst.fp(), dst.fp(), liftoff::kScratchDoubleReg); - Orpd(liftoff::kScratchDoubleReg, dst.fp()); - Psrlq(dst.fp(), 13); - Andnpd(dst.fp(), liftoff::kScratchDoubleReg); + F64x2Min(dst.fp(), lhs.fp(), rhs.fp(), liftoff::kScratchDoubleReg); } void LiftoffAssembler::emit_f64x2_max(LiftoffRegister dst, LiftoffRegister lhs, LiftoffRegister rhs) { - // The maxpd instruction doesn't propagate NaNs and +0's in its first - // operand. Perform maxpd in both orders, merge the results, and adjust. - if (CpuFeatures::IsSupported(AVX)) { - CpuFeatureScope scope(this, AVX); - vmaxpd(liftoff::kScratchDoubleReg, lhs.fp(), rhs.fp()); - vmaxpd(dst.fp(), rhs.fp(), lhs.fp()); - } else if (dst.fp() == lhs.fp() || dst.fp() == rhs.fp()) { - XMMRegister src = dst.fp() == lhs.fp() ? rhs.fp() : lhs.fp(); - movaps(liftoff::kScratchDoubleReg, src); - maxpd(liftoff::kScratchDoubleReg, dst.fp()); - maxpd(dst.fp(), src); - } else { - movaps(liftoff::kScratchDoubleReg, lhs.fp()); - maxpd(liftoff::kScratchDoubleReg, rhs.fp()); - movaps(dst.fp(), rhs.fp()); - maxpd(dst.fp(), lhs.fp()); - } - // Find discrepancies. - Xorpd(dst.fp(), liftoff::kScratchDoubleReg); - // Propagate NaNs, which may be non-canonical. - Orpd(liftoff::kScratchDoubleReg, dst.fp()); - // Propagate sign discrepancy and (subtle) quiet NaNs. - Subpd(liftoff::kScratchDoubleReg, liftoff::kScratchDoubleReg, dst.fp()); - // Canonicalize NaNs by clearing the payload. Sign is non-deterministic. - Cmpunordpd(dst.fp(), dst.fp(), liftoff::kScratchDoubleReg); - Psrlq(dst.fp(), 13); - Andnpd(dst.fp(), liftoff::kScratchDoubleReg); + F64x2Max(dst.fp(), lhs.fp(), rhs.fp(), liftoff::kScratchDoubleReg); } void LiftoffAssembler::emit_f64x2_pmin(LiftoffRegister dst, LiftoffRegister lhs, @@ -4617,25 +4546,13 @@ void LiftoffAssembler::emit_i64x2_extract_lane(LiftoffRegister dst, void LiftoffAssembler::emit_f32x4_extract_lane(LiftoffRegister dst, LiftoffRegister lhs, uint8_t imm_lane_idx) { - if (CpuFeatures::IsSupported(AVX)) { - CpuFeatureScope scope(this, AVX); - vshufps(dst.fp(), lhs.fp(), lhs.fp(), imm_lane_idx); - } else { - if (dst.fp() != lhs.fp()) movaps(dst.fp(), lhs.fp()); - if (imm_lane_idx != 0) shufps(dst.fp(), dst.fp(), imm_lane_idx); - } + F32x4ExtractLane(dst.fp(), lhs.fp(), imm_lane_idx); } void LiftoffAssembler::emit_f64x2_extract_lane(LiftoffRegister dst, LiftoffRegister lhs, uint8_t imm_lane_idx) { - if (CpuFeatures::IsSupported(AVX)) { - CpuFeatureScope scope(this, AVX); - vshufpd(dst.fp(), lhs.fp(), lhs.fp(), imm_lane_idx); - } else { - if (dst.fp() != lhs.fp()) movaps(dst.fp(), lhs.fp()); - if (imm_lane_idx != 0) shufpd(dst.fp(), dst.fp(), imm_lane_idx); - } + F64x2ExtractLane(dst.fp(), lhs.fp(), imm_lane_idx); } void LiftoffAssembler::emit_i8x16_replace_lane(LiftoffRegister dst, @@ -4713,27 +4630,7 @@ void LiftoffAssembler::emit_f64x2_replace_lane(LiftoffRegister dst, LiftoffRegister src1, LiftoffRegister src2, uint8_t imm_lane_idx) { - // TODO(fanchenk): Use movlhps and blendpd - if (CpuFeatures::IsSupported(AVX)) { - CpuFeatureScope scope(this, AVX); - if (imm_lane_idx == 0) { - vinsertps(dst.fp(), src1.fp(), src2.fp(), 0b00000000); - vinsertps(dst.fp(), dst.fp(), src2.fp(), 0b01010000); - } else { - vinsertps(dst.fp(), src1.fp(), src2.fp(), 0b00100000); - vinsertps(dst.fp(), dst.fp(), src2.fp(), 0b01110000); - } - } else { - CpuFeatureScope scope(this, SSE4_1); - if (dst.fp() != src1.fp()) movaps(dst.fp(), src1.fp()); - if (imm_lane_idx == 0) { - insertps(dst.fp(), src2.fp(), 0b00000000); - insertps(dst.fp(), src2.fp(), 0b01010000); - } else { - insertps(dst.fp(), src2.fp(), 0b00100000); - insertps(dst.fp(), src2.fp(), 0b01110000); - } - } + F64x2ReplaceLane(dst.fp(), src1.fp(), src2.fp(), imm_lane_idx); } void LiftoffAssembler::StackCheck(Label* ool_code, Register limit_address) { @@ -4907,6 +4804,8 @@ void LiftoffAssembler::DeallocateStackSlot(uint32_t size) { add(esp, Immediate(size)); } +void LiftoffAssembler::MaybeOSR() {} + void LiftoffStackSlots::Construct(int param_slots) { DCHECK_LT(0, slots_.size()); SortInPushOrder(); diff --git a/deps/v8/src/wasm/baseline/liftoff-assembler.cc b/deps/v8/src/wasm/baseline/liftoff-assembler.cc index a544460ab9..f8b01ac960 100644 --- a/deps/v8/src/wasm/baseline/liftoff-assembler.cc +++ b/deps/v8/src/wasm/baseline/liftoff-assembler.cc @@ -738,22 +738,36 @@ void LiftoffAssembler::MergeStackWith(CacheState& target, uint32_t arity, cache_state_.stack_state[stack_base + i]); } + // Check whether the cached instance needs to be moved to another register. + // Register moves are executed as part of the {StackTransferRecipe}. Remember + // whether the register content has to be reloaded after executing the stack + // transfers. + bool reload_instance = false; + // If the registers match, or the destination has no cache register, nothing + // needs to be done. if (cache_state_.cached_instance != target.cached_instance && target.cached_instance != no_reg) { + // On forward jumps, just reset the cached register in the target state. if (jump_direction == kForwardJump) { - // On forward jumps, just reset the cached instance in the target state. target.ClearCachedInstanceRegister(); + } else if (cache_state_.cached_instance != no_reg) { + // If the source has the content but in the wrong register, execute a + // register move as part of the stack transfer. + transfers.MoveRegister(LiftoffRegister{target.cached_instance}, + LiftoffRegister{cache_state_.cached_instance}, + kPointerKind); } else { - // On backward jumps, we already generated code assuming that the instance - // is available in that register. Thus move it there. - if (cache_state_.cached_instance == no_reg) { - LoadInstanceFromFrame(target.cached_instance); - } else { - Move(target.cached_instance, cache_state_.cached_instance, - kPointerKind); - } + // Otherwise (the source state has no cached content), we reload later. + reload_instance = true; } } + + // Now execute stack transfers and register moves/loads. + transfers.Execute(); + + if (reload_instance) { + LoadInstanceFromFrame(target.cached_instance); + } } void LiftoffAssembler::Spill(VarState* slot) { diff --git a/deps/v8/src/wasm/baseline/liftoff-assembler.h b/deps/v8/src/wasm/baseline/liftoff-assembler.h index dbff396f82..b0439dc4e1 100644 --- a/deps/v8/src/wasm/baseline/liftoff-assembler.h +++ b/deps/v8/src/wasm/baseline/liftoff-assembler.h @@ -341,6 +341,11 @@ class LiftoffAssembler : public TurboAssembler { } void clear_used(LiftoffRegister reg) { + if (reg.is_pair()) { + clear_used(reg.low()); + clear_used(reg.high()); + return; + } register_use_count[reg.liftoff_code()] = 0; used_registers.clear(reg); } @@ -633,6 +638,7 @@ class LiftoffAssembler : public TurboAssembler { inline void LoadTaggedPointerFromInstance(Register dst, Register instance, int offset); inline void SpillInstance(Register instance); + inline void ResetOSRTarget(); inline void FillInstanceInto(Register dst); inline void LoadTaggedPointer(Register dst, Register src_addr, Register offset_reg, int32_t offset_imm, @@ -669,7 +675,7 @@ class LiftoffAssembler : public TurboAssembler { inline void Load(LiftoffRegister dst, Register src_addr, Register offset_reg, uintptr_t offset_imm, LoadType type, LiftoffRegList pinned, uint32_t* protected_load_pc = nullptr, - bool is_load_mem = false, bool i64_offset = false); + bool is_load_mem = false); inline void Store(Register dst_addr, Register offset_reg, uintptr_t offset_imm, LiftoffRegister src, StoreType type, LiftoffRegList pinned, @@ -1416,6 +1422,9 @@ class LiftoffAssembler : public TurboAssembler { inline void AllocateStackSlot(Register addr, uint32_t size); inline void DeallocateStackSlot(uint32_t size); + // Instrumentation for shadow-stack-compatible OSR on x64. + inline void MaybeOSR(); + //////////////////////////////////// // End of platform-specific part. // //////////////////////////////////// diff --git a/deps/v8/src/wasm/baseline/liftoff-compiler.cc b/deps/v8/src/wasm/baseline/liftoff-compiler.cc index 84d217b2e4..926a4ae11e 100644 --- a/deps/v8/src/wasm/baseline/liftoff-compiler.cc +++ b/deps/v8/src/wasm/baseline/liftoff-compiler.cc @@ -10,7 +10,7 @@ #include "src/codegen/assembler-inl.h" // TODO(clemensb): Remove dependences on compiler stuff. #include "src/codegen/external-reference.h" -#include "src/codegen/interface-descriptors.h" +#include "src/codegen/interface-descriptors-inl.h" #include "src/codegen/machine-type.h" #include "src/codegen/macro-assembler-inl.h" #include "src/compiler/linkage.h" @@ -75,7 +75,7 @@ struct assert_field_size { __ LoadTaggedPointerFromInstance(dst, LoadInstanceIntoRegister(pinned, dst), \ WASM_INSTANCE_OBJECT_FIELD_OFFSET(name)); -#ifdef DEBUG +#ifdef V8_CODE_COMMENTS #define DEBUG_CODE_COMMENT(str) \ do { \ __ RecordComment(str); \ @@ -151,12 +151,7 @@ constexpr LiftoffCondition GetCompareCondition(WasmOpcode opcode) { case kExprI32GeU: return kUnsignedGreaterEqual; default: -#if V8_HAS_CXX14_CONSTEXPR UNREACHABLE(); -#else - // We need to return something for old compilers here. - return kEqual; -#endif } } @@ -362,7 +357,6 @@ class LiftoffCompiler { Label catch_label; bool catch_reached = false; bool in_handler = false; - int32_t previous_catch = -1; }; struct Control : public ControlBase<Value, validate> { @@ -594,8 +588,7 @@ class LiftoffCompiler { } } - // TODO(ahaas): Make this function constexpr once GCC allows it. - LiftoffRegList RegsUnusedByParams() { + constexpr static LiftoffRegList RegsUnusedByParams() { LiftoffRegList regs = kGpCacheRegList; for (auto reg : kGpParamRegisters) { regs.clear(reg); @@ -620,8 +613,9 @@ class LiftoffCompiler { // For reference type parameters we have to use registers that were not // used for parameters because some reference type stack parameters may // get processed before some value type register parameters. + static constexpr auto kRegsUnusedByParams = RegsUnusedByParams(); LiftoffRegister reg = is_reference(reg_kind) - ? __ GetUnusedRegister(RegsUnusedByParams()) + ? __ GetUnusedRegister(kRegsUnusedByParams) : __ GetUnusedRegister(rc, pinned); __ LoadCallerFrameSlot(reg, -location.AsCallerFrameSlot(), reg_kind); return reg; @@ -742,6 +736,7 @@ class LiftoffCompiler { // Store the instance parameter to a special stack slot. __ SpillInstance(kWasmInstanceRegister); __ cache_state()->SetInstanceCacheRegister(kWasmInstanceRegister); + if (for_debugging_) __ ResetOSRTarget(); // Process parameters. if (num_params) DEBUG_CODE_COMMENT("process parameters"); @@ -909,6 +904,9 @@ class LiftoffCompiler { ool->debug_sidetable_entry_builder->set_pc_offset(__ pc_offset()); } DCHECK_EQ(ool->continuation.get()->is_bound(), is_stack_check); + if (is_stack_check) { + MaybeOSR(); + } if (!ool->regs_to_save.is_empty()) __ PopRegisters(ool->regs_to_save); if (is_stack_check) { if (V8_UNLIKELY(ool->spilled_registers != nullptr)) { @@ -1046,6 +1044,7 @@ class LiftoffCompiler { DefineSafepointWithCalleeSavedRegisters(); RegisterDebugSideTableEntry(decoder, DebugSideTableBuilder::kAllowRegisters); + MaybeOSR(); } void PushControl(Control* block) { @@ -1072,16 +1071,14 @@ class LiftoffCompiler { // Save the current cache state for the merge when jumping to this loop. loop->label_state.Split(*__ cache_state()); + PushControl(loop); + // Execute a stack check in the loop header. StackCheck(decoder, decoder->position()); - - PushControl(loop); } void Try(FullDecoder* decoder, Control* block) { block->try_info = std::make_unique<TryInfo>(); - block->try_info->previous_catch = current_catch_; - current_catch_ = static_cast<int32_t>(decoder->control_depth() - 1); PushControl(block); } @@ -1114,7 +1111,6 @@ class LiftoffCompiler { const ExceptionIndexImmediate<validate>& imm, Control* block, Vector<Value> values) { DCHECK(block->is_try_catch()); - current_catch_ = block->try_info->previous_catch; // Pop try scope. __ emit_jump(block->label.get()); // The catch block is unreachable if no possible throws in the try block @@ -1181,6 +1177,7 @@ class LiftoffCompiler { if (depth == decoder->control_depth() - 1) { // Delegate to the caller, do not emit a landing pad. Rethrow(decoder, __ cache_state()->stack_state.back()); + MaybeOSR(); } else { DCHECK(target->is_incomplete_try()); if (!target->try_info->catch_reached) { @@ -1194,14 +1191,15 @@ class LiftoffCompiler { __ emit_jump(&target->try_info->catch_label); } } - current_catch_ = block->try_info->previous_catch; } void Rethrow(FullDecoder* decoder, Control* try_block) { int index = try_block->try_info->catch_state.stack_height() - 1; auto& exception = __ cache_state()->stack_state[index]; Rethrow(decoder, exception); - EmitLandingPad(decoder); + int pc_offset = __ pc_offset(); + MaybeOSR(); + EmitLandingPad(decoder, pc_offset); } void CatchAll(FullDecoder* decoder, Control* block) { @@ -1209,8 +1207,6 @@ class LiftoffCompiler { block->is_try_unwind()); DCHECK_EQ(decoder->control_at(0), block); - current_catch_ = block->try_info->previous_catch; // Pop try scope. - // The catch block is unreachable if no possible throws in the try block // exist. We only build a landing pad if some node in the try block can // (possibly) throw. Otherwise the catch environments remain empty. @@ -1340,8 +1336,6 @@ class LiftoffCompiler { if (!c->label.get()->is_bound()) __ bind(c->label.get()); } - void EndControl(FullDecoder* decoder, Control* c) {} - void GenerateCCall(const LiftoffRegister* result_regs, const ValueKindSig* sig, ValueKind out_argument_kind, const LiftoffRegister* arg_regs, @@ -2767,75 +2761,33 @@ class LiftoffCompiler { return index; } - bool IndexStaticallyInBounds(const LiftoffAssembler::VarState& index_slot, - int access_size, uintptr_t* offset) { - if (!index_slot.is_const()) return false; - - // Potentially zero extend index (which is a 32-bit constant). - const uintptr_t index = static_cast<uint32_t>(index_slot.i32_const()); - const uintptr_t effective_offset = index + *offset; - - if (effective_offset < index // overflow - || !base::IsInBounds<uintptr_t>(effective_offset, access_size, - env_->min_memory_size)) { - return false; - } - - *offset = effective_offset; - return true; - } - void LoadMem(FullDecoder* decoder, LoadType type, const MemoryAccessImmediate<validate>& imm, const Value& index_val, Value* result) { ValueKind kind = type.value_type().kind(); - RegClass rc = reg_class_for(kind); if (!CheckSupportedType(decoder, kind, "load")) return; + LiftoffRegister full_index = __ PopToRegister(); + Register index = BoundsCheckMem(decoder, type.size(), imm.offset, + full_index, {}, kDontForceCheck); + if (index == no_reg) return; uintptr_t offset = imm.offset; - Register index = no_reg; - - // Only look at the slot, do not pop it yet (will happen in PopToRegister - // below, if this is not a statically-in-bounds index). - auto& index_slot = __ cache_state()->stack_state.back(); - bool i64_offset = index_val.type == kWasmI64; - if (IndexStaticallyInBounds(index_slot, type.size(), &offset)) { - __ cache_state()->stack_state.pop_back(); - DEBUG_CODE_COMMENT("load from memory (constant offset)"); - LiftoffRegList pinned; - Register mem = pinned.set(__ GetUnusedRegister(kGpReg, pinned)).gp(); - LOAD_INSTANCE_FIELD(mem, MemoryStart, kSystemPointerSize, pinned); - LiftoffRegister value = pinned.set(__ GetUnusedRegister(rc, pinned)); - __ Load(value, mem, no_reg, offset, type, pinned, nullptr, true, - i64_offset); - __ PushRegister(kind, value); - } else { - LiftoffRegister full_index = __ PopToRegister(); - index = BoundsCheckMem(decoder, type.size(), offset, full_index, {}, - kDontForceCheck); - if (index == no_reg) return; - - DEBUG_CODE_COMMENT("load from memory"); - LiftoffRegList pinned = LiftoffRegList::ForRegs(index); - index = AddMemoryMasking(index, &offset, &pinned); - - // Load the memory start address only now to reduce register pressure - // (important on ia32). - Register mem = pinned.set(__ GetUnusedRegister(kGpReg, pinned)).gp(); - LOAD_INSTANCE_FIELD(mem, MemoryStart, kSystemPointerSize, pinned); - LiftoffRegister value = pinned.set(__ GetUnusedRegister(rc, pinned)); - - uint32_t protected_load_pc = 0; - __ Load(value, mem, index, offset, type, pinned, &protected_load_pc, true, - i64_offset); - if (env_->use_trap_handler) { - AddOutOfLineTrap(decoder, WasmCode::kThrowWasmTrapMemOutOfBounds, - protected_load_pc); - } - __ PushRegister(kind, value); + LiftoffRegList pinned = LiftoffRegList::ForRegs(index); + index = AddMemoryMasking(index, &offset, &pinned); + DEBUG_CODE_COMMENT("load from memory"); + Register addr = pinned.set(__ GetUnusedRegister(kGpReg, pinned)).gp(); + LOAD_INSTANCE_FIELD(addr, MemoryStart, kSystemPointerSize, pinned); + RegClass rc = reg_class_for(kind); + LiftoffRegister value = pinned.set(__ GetUnusedRegister(rc, pinned)); + uint32_t protected_load_pc = 0; + __ Load(value, addr, index, offset, type, pinned, &protected_load_pc, true); + if (env_->use_trap_handler) { + AddOutOfLineTrap(decoder, WasmCode::kThrowWasmTrapMemOutOfBounds, + protected_load_pc); } + __ PushRegister(kind, value); - if (V8_UNLIKELY(FLAG_trace_wasm_memory)) { + if (FLAG_trace_wasm_memory) { TraceMemoryOperation(false, type.mem_type().representation(), index, offset, decoder->position()); } @@ -2878,7 +2830,7 @@ class LiftoffCompiler { } __ PushRegister(kS128, value); - if (V8_UNLIKELY(FLAG_trace_wasm_memory)) { + if (FLAG_trace_wasm_memory) { // Again load extend is different. MachineRepresentation mem_rep = transform == LoadTransformationKind::kExtend @@ -2920,7 +2872,7 @@ class LiftoffCompiler { __ PushRegister(kS128, result); - if (V8_UNLIKELY(FLAG_trace_wasm_memory)) { + if (FLAG_trace_wasm_memory) { TraceMemoryOperation(false, type.mem_type().representation(), index, offset, decoder->position()); } @@ -2931,45 +2883,29 @@ class LiftoffCompiler { const Value& index_val, const Value& value_val) { ValueKind kind = type.value_type().kind(); if (!CheckSupportedType(decoder, kind, "store")) return; - LiftoffRegList pinned; LiftoffRegister value = pinned.set(__ PopToRegister()); + LiftoffRegister full_index = __ PopToRegister(pinned); + Register index = BoundsCheckMem(decoder, type.size(), imm.offset, + full_index, pinned, kDontForceCheck); + if (index == no_reg) return; uintptr_t offset = imm.offset; - Register index = no_reg; - - auto& index_slot = __ cache_state()->stack_state.back(); - if (IndexStaticallyInBounds(index_slot, type.size(), &offset)) { - __ cache_state()->stack_state.pop_back(); - DEBUG_CODE_COMMENT("store to memory (constant offset)"); - Register mem = pinned.set(__ GetUnusedRegister(kGpReg, pinned)).gp(); - LOAD_INSTANCE_FIELD(mem, MemoryStart, kSystemPointerSize, pinned); - __ Store(mem, no_reg, offset, value, type, pinned, nullptr, true); - } else { - LiftoffRegister full_index = __ PopToRegister(pinned); - index = BoundsCheckMem(decoder, type.size(), imm.offset, full_index, - pinned, kDontForceCheck); - if (index == no_reg) return; - - pinned.set(index); - index = AddMemoryMasking(index, &offset, &pinned); - DEBUG_CODE_COMMENT("store to memory"); - uint32_t protected_store_pc = 0; - // Load the memory start address only now to reduce register pressure - // (important on ia32). - Register mem = pinned.set(__ GetUnusedRegister(kGpReg, pinned)).gp(); - LOAD_INSTANCE_FIELD(mem, MemoryStart, kSystemPointerSize, pinned); - LiftoffRegList outer_pinned; - if (V8_UNLIKELY(FLAG_trace_wasm_memory)) outer_pinned.set(index); - __ Store(mem, index, offset, value, type, outer_pinned, - &protected_store_pc, true); - if (env_->use_trap_handler) { - AddOutOfLineTrap(decoder, WasmCode::kThrowWasmTrapMemOutOfBounds, - protected_store_pc); - } + pinned.set(index); + index = AddMemoryMasking(index, &offset, &pinned); + DEBUG_CODE_COMMENT("store to memory"); + Register addr = pinned.set(__ GetUnusedRegister(kGpReg, pinned)).gp(); + LOAD_INSTANCE_FIELD(addr, MemoryStart, kSystemPointerSize, pinned); + uint32_t protected_store_pc = 0; + LiftoffRegList outer_pinned; + if (FLAG_trace_wasm_memory) outer_pinned.set(index); + __ Store(addr, index, offset, value, type, outer_pinned, + &protected_store_pc, true); + if (env_->use_trap_handler) { + AddOutOfLineTrap(decoder, WasmCode::kThrowWasmTrapMemOutOfBounds, + protected_store_pc); } - - if (V8_UNLIKELY(FLAG_trace_wasm_memory)) { + if (FLAG_trace_wasm_memory) { TraceMemoryOperation(true, type.mem_rep(), index, offset, decoder->position()); } @@ -2998,7 +2934,7 @@ class LiftoffCompiler { AddOutOfLineTrap(decoder, WasmCode::kThrowWasmTrapMemOutOfBounds, protected_store_pc); } - if (V8_UNLIKELY(FLAG_trace_wasm_memory)) { + if (FLAG_trace_wasm_memory) { TraceMemoryOperation(true, type.mem_rep(), index, offset, decoder->position()); } @@ -3210,6 +3146,32 @@ class LiftoffCompiler { __ PushRegister(kRef, ref); } + void BrOnNonNull(FullDecoder* decoder, const Value& ref_object, + uint32_t depth) { + // Before branching, materialize all constants. This avoids repeatedly + // materializing them for each conditional branch. + if (depth != decoder->control_depth() - 1) { + __ MaterializeMergedConstants( + decoder->control_at(depth)->br_merge()->arity); + } + + Label cont_false; + LiftoffRegList pinned; + LiftoffRegister ref = pinned.set(__ PopToRegister(pinned)); + // Put the reference back onto the stack for the branch. + __ PushRegister(kRef, ref); + + Register null = __ GetUnusedRegister(kGpReg, pinned).gp(); + LoadNullValue(null, pinned); + __ emit_cond_jump(kEqual, &cont_false, ref_object.type.kind(), ref.gp(), + null); + + BrOrRet(decoder, depth, 0); + // Drop the reference if we are not branching. + __ DropValues(1); + __ bind(&cont_false); + } + template <ValueKind src_kind, ValueKind result_kind, typename EmitFn> void EmitTerOp(EmitFn fn) { static constexpr RegClass src_rc = reg_class_for(src_kind); @@ -4112,22 +4074,22 @@ class LiftoffCompiler { DCHECK_EQ(index, WasmExceptionPackage::GetEncodedSize(exception)); } - void EmitLandingPad(FullDecoder* decoder) { - if (current_catch_ == -1) return; + void EmitLandingPad(FullDecoder* decoder, int handler_offset) { + if (decoder->current_catch() == -1) return; MovableLabel handler; - int handler_offset = __ pc_offset(); // If we return from the throwing code normally, just skip over the handler. Label skip_handler; __ emit_jump(&skip_handler); // Handler: merge into the catch state, and jump to the catch body. + DEBUG_CODE_COMMENT("-- landing pad --"); __ bind(handler.get()); __ ExceptionHandler(); __ PushException(); handlers_.push_back({std::move(handler), handler_offset}); Control* current_try = - decoder->control_at(decoder->control_depth() - 1 - current_catch_); + decoder->control_at(decoder->control_depth_of_current_catch()); DCHECK_NOT_NULL(current_try->try_info); if (!current_try->try_info->catch_reached) { current_try->try_info->catch_state.InitMerge( @@ -4160,6 +4122,7 @@ class LiftoffCompiler { {LiftoffAssembler::VarState{ kSmiKind, LiftoffRegister{encoded_size_reg}, 0}}, decoder->position()); + MaybeOSR(); // The FixedArray for the exception values is now in the first gp return // register. @@ -4194,7 +4157,9 @@ class LiftoffCompiler { LiftoffAssembler::VarState{kPointerKind, values_array, 0}}, decoder->position()); - EmitLandingPad(decoder); + int pc_offset = __ pc_offset(); + MaybeOSR(); + EmitLandingPad(decoder, pc_offset); } void AtomicStoreMem(FullDecoder* decoder, StoreType type, @@ -4214,9 +4179,9 @@ class LiftoffCompiler { Register addr = pinned.set(__ GetUnusedRegister(kGpReg, pinned)).gp(); LOAD_INSTANCE_FIELD(addr, MemoryStart, kSystemPointerSize, pinned); LiftoffRegList outer_pinned; - if (V8_UNLIKELY(FLAG_trace_wasm_memory)) outer_pinned.set(index); + if (FLAG_trace_wasm_memory) outer_pinned.set(index); __ AtomicStore(addr, index, offset, value, type, outer_pinned); - if (V8_UNLIKELY(FLAG_trace_wasm_memory)) { + if (FLAG_trace_wasm_memory) { TraceMemoryOperation(true, type.mem_rep(), index, offset, decoder->position()); } @@ -4242,7 +4207,7 @@ class LiftoffCompiler { __ AtomicLoad(value, addr, index, offset, type, pinned); __ PushRegister(kind, value); - if (V8_UNLIKELY(FLAG_trace_wasm_memory)) { + if (FLAG_trace_wasm_memory) { TraceMemoryOperation(false, type.mem_type().representation(), index, offset, decoder->position()); } @@ -4318,6 +4283,7 @@ class LiftoffCompiler { __ DropValues(1); LiftoffRegister result = expected; + if (__ cache_state()->is_used(result)) __ SpillRegister(result); // We already added the index to addr, so we can just pass no_reg to the // assembler now. @@ -4354,7 +4320,6 @@ class LiftoffCompiler { std::initializer_list<LiftoffAssembler::VarState> params, int position) { DEBUG_CODE_COMMENT( - // NOLINTNEXTLINE(whitespace/braces) (std::string{"call builtin: "} + GetRuntimeStubName(stub_id)).c_str()); auto interface_descriptor = Builtins::CallInterfaceDescriptorFor( RuntimeStubIdToBuiltinName(stub_id)); @@ -4868,6 +4833,18 @@ class LiftoffCompiler { StoreObjectField(obj.gp(), no_reg, offset, value, pinned, field_kind); pinned.clear(value); } + if (imm.struct_type->field_count() == 0) { + static_assert(Heap::kMinObjectSizeInTaggedWords == 2 && + WasmStruct::kHeaderSize == kTaggedSize, + "empty structs need exactly one padding field"); + ValueKind field_kind = ValueKind::kRef; + LiftoffRegister value = pinned.set(__ GetUnusedRegister(kGpReg, pinned)); + LoadNullValue(value.gp(), pinned); + StoreObjectField(obj.gp(), no_reg, + wasm::ObjectAccess::ToTagged(WasmStruct::kHeaderSize), + value, pinned, field_kind); + pinned.clear(value); + } __ PushRegister(kRef, obj); } @@ -5232,7 +5209,7 @@ class LiftoffCompiler { } void BrOnCast(FullDecoder* decoder, const Value& obj, const Value& rtt, - Value* result_on_branch, uint32_t depth) { + Value* /* result_on_branch */, uint32_t depth) { // Before branching, materialize all constants. This avoids repeatedly // materializing them for each conditional branch. if (depth != decoder->control_depth() - 1) { @@ -5253,6 +5230,27 @@ class LiftoffCompiler { __ PushRegister(obj.type.kind(), obj_reg); } + void BrOnCastFail(FullDecoder* decoder, const Value& obj, const Value& rtt, + Value* /* result_on_fallthrough */, uint32_t depth) { + // Before branching, materialize all constants. This avoids repeatedly + // materializing them for each conditional branch. + if (depth != decoder->control_depth() - 1) { + __ MaterializeMergedConstants( + decoder->control_at(depth)->br_merge()->arity); + } + + Label cont_branch, fallthrough; + LiftoffRegister obj_reg = + SubtypeCheck(decoder, obj, rtt, &cont_branch, kNullFails); + __ PushRegister(obj.type.kind(), obj_reg); + __ emit_jump(&fallthrough); + + __ bind(&cont_branch); + BrOrRet(decoder, depth, 0); + + __ bind(&fallthrough); + } + // Abstract type checkers. They all return the object register and fall // through to match. LiftoffRegister DataCheck(const Value& obj, Label* no_match, @@ -5484,6 +5482,7 @@ class LiftoffCompiler { source_position_table_builder_.AddPosition( __ pc_offset(), SourcePosition(decoder->position()), true); __ CallIndirect(sig, call_descriptor, target); + FinishCall(decoder, sig, call_descriptor); } } else { // A direct call within this module just gets the current instance. @@ -5501,15 +5500,9 @@ class LiftoffCompiler { source_position_table_builder_.AddPosition( __ pc_offset(), SourcePosition(decoder->position()), true); __ CallNativeWasmCode(addr); + FinishCall(decoder, sig, call_descriptor); } } - - if (!tail_call) { - DefineSafepoint(); - RegisterDebugSideTableEntry(decoder, DebugSideTableBuilder::kDidSpill); - EmitLandingPad(decoder); - __ FinishCall(sig, call_descriptor); - } } void CallIndirect(FullDecoder* decoder, const Value& index_val, @@ -5604,7 +5597,6 @@ class LiftoffCompiler { __ Load(LiftoffRegister(scratch), table, index, 0, LoadType::kI32Load, pinned); - // TODO(9495): Do not always compare signatures, same as wasm-compiler.cc. // Compare against expected signature. __ LoadConstant(LiftoffRegister(tmp_const), WasmValue(canonical_sig_num)); @@ -5675,10 +5667,7 @@ class LiftoffCompiler { __ pc_offset(), SourcePosition(decoder->position()), true); __ CallIndirect(sig, call_descriptor, target); - DefineSafepoint(); - RegisterDebugSideTableEntry(decoder, DebugSideTableBuilder::kDidSpill); - EmitLandingPad(decoder); - __ FinishCall(sig, call_descriptor); + FinishCall(decoder, sig, call_descriptor); } } @@ -5693,9 +5682,9 @@ class LiftoffCompiler { call_descriptor = GetLoweredCallDescriptor(compilation_zone_, call_descriptor); - // Since this is a call instruction, we'll have to spill everything later - // anyway; do it right away so that the register state tracking doesn't - // get confused by the conditional builtin call below. + // Executing a write barrier needs temp registers; doing this on a + // conditional branch confuses the LiftoffAssembler's register management. + // Spill everything up front to work around that. __ SpillAllRegisters(); // We limit ourselves to four registers: @@ -5710,6 +5699,7 @@ class LiftoffCompiler { LiftoffRegister target = pinned.set(__ GetUnusedRegister(kGpReg, pinned)); LiftoffRegister temp = pinned.set(__ GetUnusedRegister(kGpReg, pinned)); + // Load the WasmFunctionData. LiftoffRegister func_data = func_ref; __ LoadTaggedPointer( func_data.gp(), func_ref.gp(), no_reg, @@ -5720,144 +5710,65 @@ class LiftoffCompiler { wasm::ObjectAccess::ToTagged(SharedFunctionInfo::kFunctionDataOffset), pinned); - LiftoffRegister data_type = instance; - __ LoadMap(data_type.gp(), func_data.gp()); - __ Load(data_type, data_type.gp(), no_reg, - wasm::ObjectAccess::ToTagged(Map::kInstanceTypeOffset), - LoadType::kI32Load16U, pinned); + // Load "ref" (instance or <instance, callable> pair) and target. + __ LoadTaggedPointer( + instance.gp(), func_data.gp(), no_reg, + wasm::ObjectAccess::ToTagged(WasmFunctionData::kRefOffset), pinned); - Label is_js_function, perform_call; - __ emit_i32_cond_jumpi(kEqual, &is_js_function, data_type.gp(), - WASM_JS_FUNCTION_DATA_TYPE); - // End of {data_type}'s live range. + Label load_target, perform_call; + // Check if "ref" is a Tuple2. { - // Call to a WasmExportedFunction. - - LiftoffRegister callee_instance = instance; - __ LoadTaggedPointer(callee_instance.gp(), func_data.gp(), no_reg, - wasm::ObjectAccess::ToTagged( - WasmExportedFunctionData::kInstanceOffset), - pinned); - LiftoffRegister func_index = target; - __ LoadSmiAsInt32(func_index, func_data.gp(), - wasm::ObjectAccess::ToTagged( - WasmExportedFunctionData::kFunctionIndexOffset), - pinned); - LiftoffRegister imported_function_refs = temp; - __ LoadTaggedPointer(imported_function_refs.gp(), callee_instance.gp(), - no_reg, - wasm::ObjectAccess::ToTagged( - WasmInstanceObject::kImportedFunctionRefsOffset), - pinned); - // We overwrite {imported_function_refs} here, at the cost of having - // to reload it later, because we don't have more registers on ia32. - LiftoffRegister imported_functions_num = imported_function_refs; - __ LoadFixedArrayLengthAsInt32(imported_functions_num, - imported_function_refs.gp(), pinned); - - Label imported; - __ emit_cond_jump(kSignedLessThan, &imported, kI32, func_index.gp(), - imported_functions_num.gp()); - - { - // Function locally defined in module. - - // {func_index} is invalid from here on. - LiftoffRegister jump_table_start = target; - __ Load(jump_table_start, callee_instance.gp(), no_reg, - wasm::ObjectAccess::ToTagged( - WasmInstanceObject::kJumpTableStartOffset), - kPointerLoadType, pinned); - LiftoffRegister jump_table_offset = temp; - __ LoadSmiAsInt32(jump_table_offset, func_data.gp(), - wasm::ObjectAccess::ToTagged( - WasmExportedFunctionData::kJumpTableOffsetOffset), + LiftoffRegister pair_map = temp; + LiftoffRegister ref_map = target; + __ LoadMap(ref_map.gp(), instance.gp()); + LOAD_INSTANCE_FIELD(pair_map.gp(), IsolateRoot, kSystemPointerSize, pinned); - __ emit_ptrsize_add(target.gp(), jump_table_start.gp(), - jump_table_offset.gp()); - __ emit_jump(&perform_call); - } - - { - // Function imported to module. - __ bind(&imported); - - LiftoffRegister imported_function_targets = temp; - __ Load(imported_function_targets, callee_instance.gp(), no_reg, - wasm::ObjectAccess::ToTagged( - WasmInstanceObject::kImportedFunctionTargetsOffset), - kPointerLoadType, pinned); - // {callee_instance} is invalid from here on. - LiftoffRegister imported_instance = instance; - // Scale {func_index} to kTaggedSize. - __ emit_i32_shli(func_index.gp(), func_index.gp(), kTaggedSizeLog2); - // {func_data} is invalid from here on. - imported_function_refs = func_data; - __ LoadTaggedPointer( - imported_function_refs.gp(), callee_instance.gp(), no_reg, - wasm::ObjectAccess::ToTagged( - WasmInstanceObject::kImportedFunctionRefsOffset), - pinned); - __ LoadTaggedPointer( - imported_instance.gp(), imported_function_refs.gp(), - func_index.gp(), - wasm::ObjectAccess::ElementOffsetInTaggedFixedArray(0), pinned); - // Scale {func_index} to kSystemPointerSize. - if (kSystemPointerSize == kTaggedSize * 2) { - __ emit_i32_add(func_index.gp(), func_index.gp(), func_index.gp()); - } else { - DCHECK_EQ(kSystemPointerSize, kTaggedSize); - } - // This overwrites the contents of {func_index}, which we don't need - // any more. - __ Load(target, imported_function_targets.gp(), func_index.gp(), 0, - kPointerLoadType, pinned); - __ emit_jump(&perform_call); - } - } - - { - // Call to a WasmJSFunction. The call target is - // function_data->wasm_to_js_wrapper_code()->instruction_start(). - // The instance_node is the pair - // (current WasmInstanceObject, function_data->callable()). - __ bind(&is_js_function); - - LiftoffRegister callable = temp; - __ LoadTaggedPointer( - callable.gp(), func_data.gp(), no_reg, - wasm::ObjectAccess::ToTagged(WasmJSFunctionData::kCallableOffset), - pinned); - - // Preserve {func_data} across the call. - LiftoffRegList saved_regs = LiftoffRegList::ForRegs(func_data); - __ PushRegisters(saved_regs); + __ LoadTaggedPointer(pair_map.gp(), pair_map.gp(), no_reg, + IsolateData::root_slot_offset(RootIndex::kTuple2Map), + pinned); + __ emit_cond_jump(kUnequal, &load_target, kRef, ref_map.gp(), + pair_map.gp()); - LiftoffRegister current_instance = instance; + // Overwrite the tuple's "instance" entry with the current instance. + // TODO(jkummerow): Can we figure out a way to guarantee that the + // instance field is always precomputed? + LiftoffRegister current_instance = temp; __ FillInstanceInto(current_instance.gp()); - LiftoffAssembler::VarState instance_var(kOptRef, current_instance, 0); - LiftoffAssembler::VarState callable_var(kOptRef, callable, 0); - - CallRuntimeStub(WasmCode::kWasmAllocatePair, - MakeSig::Returns(kOptRef).Params(kOptRef, kOptRef), - {instance_var, callable_var}, decoder->position()); - if (instance.gp() != kReturnRegister0) { - __ Move(instance.gp(), kReturnRegister0, kPointerKind); - } - - // Restore {func_data}, which we saved across the call. - __ PopRegisters(saved_regs); + __ StoreTaggedPointer(instance.gp(), no_reg, + wasm::ObjectAccess::ToTagged(Tuple2::kValue1Offset), + current_instance, pinned); + // Fall through to {load_target}. + } + // Load the call target. + __ bind(&load_target); + +#ifdef V8_HEAP_SANDBOX + LOAD_INSTANCE_FIELD(temp.gp(), IsolateRoot, kSystemPointerSize, pinned); + __ LoadExternalPointerField( + target.gp(), + FieldOperand(func_data.gp(), WasmFunctionData::kForeignAddressOffset), + kForeignForeignAddressTag, temp.gp(), + TurboAssembler::IsolateRootLocation::kInScratchRegister); +#else + __ Load( + target, func_data.gp(), no_reg, + wasm::ObjectAccess::ToTagged(WasmFunctionData::kForeignAddressOffset), + kPointerLoadType, pinned); +#endif - LiftoffRegister wrapper_code = target; - __ LoadTaggedPointer(wrapper_code.gp(), func_data.gp(), no_reg, - wasm::ObjectAccess::ToTagged( - WasmJSFunctionData::kWasmToJsWrapperCodeOffset), - pinned); - __ emit_ptrsize_addi(target.gp(), wrapper_code.gp(), - wasm::ObjectAccess::ToTagged(Code::kHeaderSize)); - // Fall through to {perform_call}. - } + LiftoffRegister null_address = temp; + __ LoadConstant(null_address, WasmValue::ForUintPtr(0)); + __ emit_cond_jump(kUnequal, &perform_call, kRef, target.gp(), + null_address.gp()); + // The cached target can only be null for WasmJSFunctions. + __ LoadTaggedPointer(target.gp(), func_data.gp(), no_reg, + wasm::ObjectAccess::ToTagged( + WasmJSFunctionData::kWasmToJsWrapperCodeOffset), + pinned); + __ emit_ptrsize_addi(target.gp(), target.gp(), + wasm::ObjectAccess::ToTagged(Code::kHeaderSize)); + // Fall through to {perform_call}. __ bind(&perform_call); // Now the call target is in {target}, and the right instance object @@ -5876,18 +5787,14 @@ class LiftoffCompiler { __ pc_offset(), SourcePosition(decoder->position()), true); __ CallIndirect(sig, call_descriptor, target_reg); - DefineSafepoint(); - RegisterDebugSideTableEntry(decoder, DebugSideTableBuilder::kDidSpill); - EmitLandingPad(decoder); - __ FinishCall(sig, call_descriptor); + FinishCall(decoder, sig, call_descriptor); } } void LoadNullValue(Register null, LiftoffRegList pinned) { LOAD_INSTANCE_FIELD(null, IsolateRoot, kSystemPointerSize, pinned); - __ LoadTaggedPointer(null, null, no_reg, - IsolateData::root_slot_offset(RootIndex::kNullValue), - pinned); + __ LoadFullPointer(null, null, + IsolateData::root_slot_offset(RootIndex::kNullValue)); } void LoadExceptionSymbol(Register dst, LiftoffRegList pinned, @@ -6004,6 +5911,22 @@ class LiftoffCompiler { WASM_STRUCT_TYPE - WASM_ARRAY_TYPE); } + void MaybeOSR() { + if (V8_UNLIKELY(for_debugging_)) { + __ MaybeOSR(); + } + } + + void FinishCall(FullDecoder* decoder, ValueKindSig* sig, + compiler::CallDescriptor* call_descriptor) { + DefineSafepoint(); + RegisterDebugSideTableEntry(decoder, DebugSideTableBuilder::kDidSpill); + int pc_offset = __ pc_offset(); + MaybeOSR(); + EmitLandingPad(decoder, pc_offset); + __ FinishCall(sig, call_descriptor); + } + static constexpr WasmOpcode kNoOutstandingOp = kExprUnreachable; static constexpr base::EnumSet<ValueKind> kUnconditionallySupported{ kI32, kI64, kF32, kF64}; @@ -6051,9 +5974,6 @@ class LiftoffCompiler { // at the first breakable opcode in the function (if compiling for debugging). bool did_function_entry_break_checks_ = false; - // Depth of the current try block. - int32_t current_catch_ = -1; - struct HandlerInfo { MovableLabel handler; int pc_offset; diff --git a/deps/v8/src/wasm/baseline/liftoff-register.h b/deps/v8/src/wasm/baseline/liftoff-register.h index bb27b99dc2..63ac2acf8b 100644 --- a/deps/v8/src/wasm/baseline/liftoff-register.h +++ b/deps/v8/src/wasm/baseline/liftoff-register.h @@ -152,11 +152,12 @@ class LiftoffRegister { "chosen type is small enough"); public: - explicit LiftoffRegister(Register reg) : LiftoffRegister(reg.code()) { + constexpr explicit LiftoffRegister(Register reg) + : LiftoffRegister(reg.code()) { DCHECK_NE(0, kLiftoffAssemblerGpCacheRegs & reg.bit()); DCHECK_EQ(reg, gp()); } - explicit LiftoffRegister(DoubleRegister reg) + constexpr explicit LiftoffRegister(DoubleRegister reg) : LiftoffRegister(kAfterMaxLiftoffGpRegCode + reg.code()) { DCHECK_NE(0, kLiftoffAssemblerFpCacheRegs & reg.bit()); DCHECK_EQ(reg, fp()); @@ -275,22 +276,22 @@ class LiftoffRegister { return DoubleRegister::from_code((code_ & kCodeMask) + 1); } - Register gp() const { + constexpr Register gp() const { DCHECK(is_gp()); return Register::from_code(code_); } - DoubleRegister fp() const { + constexpr DoubleRegister fp() const { DCHECK(is_fp()); return DoubleRegister::from_code(code_ - kAfterMaxLiftoffGpRegCode); } - int liftoff_code() const { + constexpr int liftoff_code() const { STATIC_ASSERT(sizeof(int) >= sizeof(storage_t)); return static_cast<int>(code_); } - RegClass reg_class() const { + constexpr RegClass reg_class() const { return is_fp_pair() ? kFpRegPair : is_gp_pair() ? kGpRegPair : is_gp() ? kGpReg : kFpReg; } @@ -364,7 +365,7 @@ class LiftoffRegList { return reg; } - LiftoffRegister clear(LiftoffRegister reg) { + constexpr LiftoffRegister clear(LiftoffRegister reg) { if (reg.is_pair()) { regs_ &= ~(storage_t{1} << reg.low().liftoff_code()); regs_ &= ~(storage_t{1} << reg.high().liftoff_code()); @@ -373,8 +374,10 @@ class LiftoffRegList { } return reg; } - Register clear(Register reg) { return clear(LiftoffRegister{reg}).gp(); } - DoubleRegister clear(DoubleRegister reg) { + constexpr Register clear(Register reg) { + return clear(LiftoffRegister{reg}).gp(); + } + constexpr DoubleRegister clear(DoubleRegister reg) { return clear(LiftoffRegister{reg}).fp(); } diff --git a/deps/v8/src/wasm/baseline/mips/liftoff-assembler-mips.h b/deps/v8/src/wasm/baseline/mips/liftoff-assembler-mips.h index d078fd5e42..58d2d8545c 100644 --- a/deps/v8/src/wasm/baseline/mips/liftoff-assembler-mips.h +++ b/deps/v8/src/wasm/baseline/mips/liftoff-assembler-mips.h @@ -433,6 +433,8 @@ void LiftoffAssembler::SpillInstance(Register instance) { sw(instance, liftoff::GetInstanceOperand()); } +void LiftoffAssembler::ResetOSRTarget() {} + void LiftoffAssembler::FillInstanceInto(Register dst) { lw(dst, liftoff::GetInstanceOperand()); } @@ -468,7 +470,7 @@ void LiftoffAssembler::StoreTaggedPointer(Register dst_addr, : MemOperand(dst_addr, offset_imm); Sw(src.gp(), dst_op); - if (skip_write_barrier) return; + if (skip_write_barrier || FLAG_disable_write_barriers) return; // The write barrier. Label write_barrier; @@ -483,16 +485,15 @@ void LiftoffAssembler::StoreTaggedPointer(Register dst_addr, CheckPageFlag(src.gp(), scratch, MemoryChunk::kPointersToHereAreInterestingMask, eq, &exit); Addu(scratch, dst_op.rm(), dst_op.offset()); - CallRecordWriteStub(dst_addr, scratch, EMIT_REMEMBERED_SET, kSaveFPRegs, - wasm::WasmCode::kRecordWrite); + CallRecordWriteStub(dst_addr, scratch, RememberedSetAction::kEmit, + SaveFPRegsMode::kSave, wasm::WasmCode::kRecordWrite); bind(&exit); } void LiftoffAssembler::Load(LiftoffRegister dst, Register src_addr, Register offset_reg, uint32_t offset_imm, LoadType type, LiftoffRegList pinned, - uint32_t* protected_load_pc, bool is_load_mem, - bool i64_offset) { + uint32_t* protected_load_pc, bool is_load_mem) { Register src = no_reg; if (offset_reg != no_reg) { src = GetUnusedRegister(kGpReg, pinned).gp(); @@ -2836,7 +2837,7 @@ void LiftoffAssembler::CallTrapCallbackForTesting() { } void LiftoffAssembler::AssertUnreachable(AbortReason reason) { - if (emit_debug_code()) Abort(reason); + if (FLAG_debug_code) Abort(reason); } void LiftoffAssembler::PushRegisters(LiftoffRegList regs) { @@ -2999,6 +3000,8 @@ void LiftoffAssembler::DeallocateStackSlot(uint32_t size) { addiu(sp, sp, size); } +void LiftoffAssembler::MaybeOSR() {} + void LiftoffStackSlots::Construct(int param_slots) { DCHECK_LT(0, slots_.size()); SortInPushOrder(); diff --git a/deps/v8/src/wasm/baseline/mips64/liftoff-assembler-mips64.h b/deps/v8/src/wasm/baseline/mips64/liftoff-assembler-mips64.h index dfbd8d6a75..15b3b4f7c4 100644 --- a/deps/v8/src/wasm/baseline/mips64/liftoff-assembler-mips64.h +++ b/deps/v8/src/wasm/baseline/mips64/liftoff-assembler-mips64.h @@ -418,6 +418,8 @@ void LiftoffAssembler::SpillInstance(Register instance) { Sd(instance, liftoff::GetInstanceOperand()); } +void LiftoffAssembler::ResetOSRTarget() {} + void LiftoffAssembler::FillInstanceInto(Register dst) { Ld(dst, liftoff::GetInstanceOperand()); } @@ -448,7 +450,7 @@ void LiftoffAssembler::StoreTaggedPointer(Register dst_addr, MemOperand dst_op = liftoff::GetMemOp(this, dst_addr, offset_reg, offset_imm); Sd(src.gp(), dst_op); - if (skip_write_barrier) return; + if (skip_write_barrier || FLAG_disable_write_barriers) return; Label write_barrier; Label exit; @@ -462,16 +464,15 @@ void LiftoffAssembler::StoreTaggedPointer(Register dst_addr, MemoryChunk::kPointersToHereAreInterestingMask, eq, &exit); Daddu(scratch, dst_op.rm(), dst_op.offset()); - CallRecordWriteStub(dst_addr, scratch, EMIT_REMEMBERED_SET, kSaveFPRegs, - wasm::WasmCode::kRecordWrite); + CallRecordWriteStub(dst_addr, scratch, RememberedSetAction::kEmit, + SaveFPRegsMode::kSave, wasm::WasmCode::kRecordWrite); bind(&exit); } void LiftoffAssembler::Load(LiftoffRegister dst, Register src_addr, Register offset_reg, uintptr_t offset_imm, LoadType type, LiftoffRegList pinned, - uint32_t* protected_load_pc, bool is_load_mem, - bool i64_offset) { + uint32_t* protected_load_pc, bool is_load_mem) { MemOperand src_op = liftoff::GetMemOp(this, src_addr, offset_reg, offset_imm); if (protected_load_pc) *protected_load_pc = pc_offset(); @@ -2995,7 +2996,7 @@ void LiftoffAssembler::CallTrapCallbackForTesting() { } void LiftoffAssembler::AssertUnreachable(AbortReason reason) { - if (emit_debug_code()) Abort(reason); + if (FLAG_debug_code) Abort(reason); } void LiftoffAssembler::PushRegisters(LiftoffRegList regs) { @@ -3167,6 +3168,8 @@ void LiftoffAssembler::DeallocateStackSlot(uint32_t size) { Daddu(sp, sp, size); } +void LiftoffAssembler::MaybeOSR() {} + void LiftoffStackSlots::Construct(int param_slots) { DCHECK_LT(0, slots_.size()); SortInPushOrder(); diff --git a/deps/v8/src/wasm/baseline/ppc/OWNERS b/deps/v8/src/wasm/baseline/ppc/OWNERS deleted file mode 100644 index 02c2cd757c..0000000000 --- a/deps/v8/src/wasm/baseline/ppc/OWNERS +++ /dev/null @@ -1,5 +0,0 @@ -junyan@redhat.com -joransiu@ca.ibm.com -midawson@redhat.com -mfarazma@redhat.com -vasili.skurydzin@ibm.com diff --git a/deps/v8/src/wasm/baseline/ppc/liftoff-assembler-ppc.h b/deps/v8/src/wasm/baseline/ppc/liftoff-assembler-ppc.h index bedee1a939..10d574301e 100644 --- a/deps/v8/src/wasm/baseline/ppc/liftoff-assembler-ppc.h +++ b/deps/v8/src/wasm/baseline/ppc/liftoff-assembler-ppc.h @@ -45,6 +45,47 @@ inline MemOperand GetHalfStackSlot(int offset, RegPairHalf half) { return MemOperand(fp, -kInstanceOffset - offset + half_offset); } +inline constexpr Condition ToCondition(LiftoffCondition liftoff_cond) { + switch (liftoff_cond) { + case kEqual: + return eq; + case kUnequal: + return ne; + case kSignedLessThan: + case kUnsignedLessThan: + return lt; + case kSignedLessEqual: + case kUnsignedLessEqual: + return le; + case kSignedGreaterEqual: + case kUnsignedGreaterEqual: + return ge; + case kSignedGreaterThan: + case kUnsignedGreaterThan: + return gt; + } +} + +inline constexpr bool UseSignedOp(LiftoffCondition liftoff_cond) { + switch (liftoff_cond) { + case kEqual: + case kUnequal: + case kSignedLessThan: + case kSignedLessEqual: + case kSignedGreaterThan: + case kSignedGreaterEqual: + return true; + case kUnsignedLessThan: + case kUnsignedLessEqual: + case kUnsignedGreaterThan: + case kUnsignedGreaterEqual: + return false; + default: + UNREACHABLE(); + } + return false; +} + } // namespace liftoff int LiftoffAssembler::PrepareStackFrame() { @@ -87,7 +128,30 @@ bool LiftoffAssembler::NeedsAlignment(ValueKind kind) { void LiftoffAssembler::LoadConstant(LiftoffRegister reg, WasmValue value, RelocInfo::Mode rmode) { - bailout(kUnsupportedArchitecture, "LoadConstant"); + switch (value.type().kind()) { + case kI32: + mov(reg.gp(), Operand(value.to_i32(), rmode)); + break; + case kI64: + mov(reg.gp(), Operand(value.to_i64(), rmode)); + break; + case kF32: { + UseScratchRegisterScope temps(this); + Register scratch = temps.Acquire(); + mov(scratch, Operand(value.to_f32_boxed().get_scalar())); + MovIntToFloat(reg.fp(), scratch); + break; + } + case kF64: { + UseScratchRegisterScope temps(this); + Register scratch = temps.Acquire(); + mov(scratch, Operand(value.to_f32_boxed().get_scalar())); + MovInt64ToDouble(reg.fp(), scratch); + break; + } + default: + UNREACHABLE(); + } } void LiftoffAssembler::LoadInstanceFromFrame(Register dst) { @@ -109,6 +173,8 @@ void LiftoffAssembler::SpillInstance(Register instance) { bailout(kUnsupportedArchitecture, "SpillInstance"); } +void LiftoffAssembler::ResetOSRTarget() {} + void LiftoffAssembler::FillInstanceInto(Register dst) { bailout(kUnsupportedArchitecture, "FillInstanceInto"); } @@ -137,8 +203,7 @@ void LiftoffAssembler::StoreTaggedPointer(Register dst_addr, void LiftoffAssembler::Load(LiftoffRegister dst, Register src_addr, Register offset_reg, uintptr_t offset_imm, LoadType type, LiftoffRegList pinned, - uint32_t* protected_load_pc, bool is_load_mem, - bool i64_offset) { + uint32_t* protected_load_pc, bool is_load_mem) { bailout(kUnsupportedArchitecture, "Load"); } @@ -525,56 +590,123 @@ void LiftoffAssembler::emit_i64_signextend_i32(LiftoffRegister dst, bailout(kUnsupportedArchitecture, "emit_i64_signextend_i32"); } -void LiftoffAssembler::emit_jump(Label* label) { - bailout(kUnsupportedArchitecture, "emit_jump"); -} +void LiftoffAssembler::emit_jump(Label* label) { b(al, label); } -void LiftoffAssembler::emit_jump(Register target) { - bailout(kUnsupportedArchitecture, "emit_jump"); -} +void LiftoffAssembler::emit_jump(Register target) { Jump(target); } void LiftoffAssembler::emit_cond_jump(LiftoffCondition liftoff_cond, Label* label, ValueKind kind, Register lhs, Register rhs) { - bailout(kUnsupportedArchitecture, "emit_cond_jump"); + Condition cond = liftoff::ToCondition(liftoff_cond); + bool use_signed = liftoff::UseSignedOp(liftoff_cond); + + if (rhs != no_reg) { + switch (kind) { + case kI32: + if (use_signed) { + cmpw(lhs, rhs); + } else { + cmplw(lhs, rhs); + } + break; + case kRef: + case kOptRef: + case kRtt: + case kRttWithDepth: + DCHECK(liftoff_cond == kEqual || liftoff_cond == kUnequal); + V8_FALLTHROUGH; + case kI64: + if (use_signed) { + cmp(lhs, rhs); + } else { + cmpl(lhs, rhs); + } + break; + default: + UNREACHABLE(); + } + } else { + DCHECK_EQ(kind, kI32); + CHECK(use_signed); + cmpwi(lhs, Operand::Zero()); + } + + b(cond, label); } void LiftoffAssembler::emit_i32_cond_jumpi(LiftoffCondition liftoff_cond, Label* label, Register lhs, int32_t imm) { - bailout(kUnsupportedArchitecture, "emit_i32_cond_jumpi"); + Condition cond = liftoff::ToCondition(liftoff_cond); + Cmpwi(lhs, Operand(imm), r0); + b(cond, label); } void LiftoffAssembler::emit_i32_eqz(Register dst, Register src) { - bailout(kUnsupportedArchitecture, "emit_i32_eqz"); + Label done; + cmpwi(src, Operand(0)); + mov(dst, Operand(1)); + beq(&done); + mov(dst, Operand::Zero()); + bind(&done); } void LiftoffAssembler::emit_i32_set_cond(LiftoffCondition liftoff_cond, Register dst, Register lhs, Register rhs) { - bailout(kUnsupportedArchitecture, "emit_i32_set_cond"); + bool use_signed = liftoff::UseSignedOp(liftoff_cond); + if (use_signed) { + cmpw(lhs, rhs); + } else { + cmplw(lhs, rhs); + } + Label done; + mov(dst, Operand(1)); + b(liftoff::ToCondition(liftoff_cond), &done); + mov(dst, Operand::Zero()); + bind(&done); } void LiftoffAssembler::emit_i64_eqz(Register dst, LiftoffRegister src) { - bailout(kUnsupportedArchitecture, "emit_i64_eqz"); + Label done; + cmpi(src.gp(), Operand(0)); + mov(dst, Operand(1)); + beq(&done); + mov(dst, Operand::Zero()); + bind(&done); } void LiftoffAssembler::emit_i64_set_cond(LiftoffCondition liftoff_cond, Register dst, LiftoffRegister lhs, LiftoffRegister rhs) { - bailout(kUnsupportedArchitecture, "emit_i64_set_cond"); + bool use_signed = liftoff::UseSignedOp(liftoff_cond); + if (use_signed) { + cmp(lhs.gp(), rhs.gp()); + } else { + cmpl(lhs.gp(), rhs.gp()); + } + Label done; + mov(dst, Operand(1)); + b(liftoff::ToCondition(liftoff_cond), &done); + mov(dst, Operand::Zero()); + bind(&done); } void LiftoffAssembler::emit_f32_set_cond(LiftoffCondition liftoff_cond, Register dst, DoubleRegister lhs, DoubleRegister rhs) { - bailout(kUnsupportedArchitecture, "emit_f32_set_cond"); + fcmpu(lhs, rhs); + Label done; + mov(dst, Operand(1)); + b(liftoff::ToCondition(liftoff_cond), &done); + mov(dst, Operand::Zero()); + bind(&done); } void LiftoffAssembler::emit_f64_set_cond(LiftoffCondition liftoff_cond, Register dst, DoubleRegister lhs, DoubleRegister rhs) { - bailout(kUnsupportedArchitecture, "emit_f64_set_cond"); + emit_f32_set_cond(liftoff_cond, dst, lhs, rhs); } bool LiftoffAssembler::emit_select(LiftoffRegister dst, Register condition, @@ -1802,6 +1934,8 @@ void LiftoffAssembler::DeallocateStackSlot(uint32_t size) { bailout(kUnsupportedArchitecture, "DeallocateStackSlot"); } +void LiftoffAssembler::MaybeOSR() {} + void LiftoffStackSlots::Construct(int param_slots) { asm_->bailout(kUnsupportedArchitecture, "LiftoffStackSlots::Construct"); } diff --git a/deps/v8/src/wasm/baseline/riscv64/liftoff-assembler-riscv64.h b/deps/v8/src/wasm/baseline/riscv64/liftoff-assembler-riscv64.h index bb6c3bcad8..3f549a3df6 100644 --- a/deps/v8/src/wasm/baseline/riscv64/liftoff-assembler-riscv64.h +++ b/deps/v8/src/wasm/baseline/riscv64/liftoff-assembler-riscv64.h @@ -325,9 +325,9 @@ void LiftoffAssembler::PatchPrepareStackFrame(int offset) { patching_assembler.Add64(sp, sp, Operand(-frame_size)); } -void LiftoffAssembler::FinishCode() {} +void LiftoffAssembler::FinishCode() { ForceConstantPoolEmissionWithoutJump(); } -void LiftoffAssembler::AbortCompilation() {} +void LiftoffAssembler::AbortCompilation() { AbortedCodeGeneration(); } // static constexpr int LiftoffAssembler::StaticStackFrameSize() { @@ -382,12 +382,19 @@ void LiftoffAssembler::LoadInstanceFromFrame(Register dst) { void LiftoffAssembler::LoadFromInstance(Register dst, Register instance, int offset, int size) { DCHECK_LE(0, offset); - DCHECK(size == 4 || size == 8); MemOperand src{instance, offset}; - if (size == 4) { - Lw(dst, src); - } else { - Ld(dst, src); + switch (size) { + case 1: + Lb(dst, MemOperand(src)); + break; + case 4: + Lw(dst, MemOperand(src)); + break; + case 8: + Ld(dst, MemOperand(src)); + break; + default: + UNIMPLEMENTED(); } } @@ -401,6 +408,8 @@ void LiftoffAssembler::SpillInstance(Register instance) { Sd(instance, liftoff::GetInstanceOperand()); } +void LiftoffAssembler::ResetOSRTarget() {} + void LiftoffAssembler::FillInstanceInto(Register dst) { Ld(dst, liftoff::GetInstanceOperand()); } @@ -414,6 +423,12 @@ void LiftoffAssembler::LoadTaggedPointer(Register dst, Register src_addr, Ld(dst, src_op); } +void LiftoffAssembler::LoadFullPointer(Register dst, Register src_addr, + int32_t offset_imm) { + MemOperand src_op = liftoff::GetMemOp(this, src_addr, no_reg, offset_imm); + Ld(dst, src_op); +} + void LiftoffAssembler::StoreTaggedPointer(Register dst_addr, Register offset_reg, int32_t offset_imm, @@ -425,7 +440,7 @@ void LiftoffAssembler::StoreTaggedPointer(Register dst_addr, MemOperand dst_op = liftoff::GetMemOp(this, dst_addr, offset_reg, offset_imm); Sd(src.gp(), dst_op); - if (skip_write_barrier) return; + if (skip_write_barrier || FLAG_disable_write_barriers) return; Label write_barrier; Label exit; @@ -437,17 +452,16 @@ void LiftoffAssembler::StoreTaggedPointer(Register dst_addr, JumpIfSmi(src.gp(), &exit); CheckPageFlag(src.gp(), scratch, MemoryChunk::kPointersToHereAreInterestingMask, eq, &exit); - Add64(scratch, dst_addr, offset_imm); - CallRecordWriteStub(dst_addr, scratch, EMIT_REMEMBERED_SET, kSaveFPRegs, - wasm::WasmCode::kRecordWrite); + Add64(scratch, dst_op.rm(), dst_op.offset()); + CallRecordWriteStub(dst_addr, scratch, RememberedSetAction::kEmit, + SaveFPRegsMode::kSave, wasm::WasmCode::kRecordWrite); bind(&exit); } void LiftoffAssembler::Load(LiftoffRegister dst, Register src_addr, Register offset_reg, uintptr_t offset_imm, LoadType type, LiftoffRegList pinned, - uint32_t* protected_load_pc, bool is_load_mem, - bool i64_offset) { + uint32_t* protected_load_pc, bool is_load_mem) { MemOperand src_op = liftoff::GetMemOp(this, src_addr, offset_reg, offset_imm); if (protected_load_pc) *protected_load_pc = pc_offset(); @@ -544,60 +558,297 @@ void LiftoffAssembler::Store(Register dst_addr, Register offset_reg, } } +namespace liftoff { +#define __ lasm-> + +inline Register CalculateActualAddress(LiftoffAssembler* lasm, + Register addr_reg, Register offset_reg, + uintptr_t offset_imm, + Register result_reg) { + DCHECK_NE(offset_reg, no_reg); + DCHECK_NE(addr_reg, no_reg); + __ Add64(result_reg, addr_reg, Operand(offset_reg)); + if (offset_imm != 0) { + __ Add64(result_reg, result_reg, Operand(offset_imm)); + } + return result_reg; +} + +enum class Binop { kAdd, kSub, kAnd, kOr, kXor, kExchange }; + +inline void AtomicBinop(LiftoffAssembler* lasm, Register dst_addr, + Register offset_reg, uintptr_t offset_imm, + LiftoffRegister value, LiftoffRegister result, + StoreType type, Binop op) { + LiftoffRegList pinned = + LiftoffRegList::ForRegs(dst_addr, offset_reg, value, result); + Register store_result = pinned.set(__ GetUnusedRegister(kGpReg, pinned)).gp(); + + // Make sure that {result} is unique. + Register result_reg = result.gp(); + if (result_reg == value.gp() || result_reg == dst_addr || + result_reg == offset_reg) { + result_reg = __ GetUnusedRegister(kGpReg, pinned).gp(); + } + + UseScratchRegisterScope temps(lasm); + Register actual_addr = liftoff::CalculateActualAddress( + lasm, dst_addr, offset_reg, offset_imm, temps.Acquire()); + + // Allocate an additional {temp} register to hold the result that should be + // stored to memory. Note that {temp} and {store_result} are not allowed to be + // the same register. + Register temp = temps.Acquire(); + + Label retry; + __ bind(&retry); + switch (type.value()) { + case StoreType::kI64Store8: + case StoreType::kI32Store8: + __ lbu(result_reg, actual_addr, 0); + __ sync(); + break; + case StoreType::kI64Store16: + case StoreType::kI32Store16: + __ lhu(result_reg, actual_addr, 0); + __ sync(); + break; + case StoreType::kI64Store32: + case StoreType::kI32Store: + __ lr_w(true, false, result_reg, actual_addr); + break; + case StoreType::kI64Store: + __ lr_d(true, false, result_reg, actual_addr); + break; + default: + UNREACHABLE(); + } + + switch (op) { + case Binop::kAdd: + __ add(temp, result_reg, value.gp()); + break; + case Binop::kSub: + __ sub(temp, result_reg, value.gp()); + break; + case Binop::kAnd: + __ and_(temp, result_reg, value.gp()); + break; + case Binop::kOr: + __ or_(temp, result_reg, value.gp()); + break; + case Binop::kXor: + __ xor_(temp, result_reg, value.gp()); + break; + case Binop::kExchange: + __ mv(temp, value.gp()); + break; + } + switch (type.value()) { + case StoreType::kI64Store8: + case StoreType::kI32Store8: + __ sync(); + __ sb(temp, actual_addr, 0); + __ sync(); + __ mv(store_result, zero_reg); + break; + case StoreType::kI64Store16: + case StoreType::kI32Store16: + __ sync(); + __ sh(temp, actual_addr, 0); + __ sync(); + __ mv(store_result, zero_reg); + break; + case StoreType::kI64Store32: + case StoreType::kI32Store: + __ sc_w(false, true, store_result, actual_addr, temp); + break; + case StoreType::kI64Store: + __ sc_w(false, true, store_result, actual_addr, temp); + break; + default: + UNREACHABLE(); + } + + __ bnez(store_result, &retry); + if (result_reg != result.gp()) { + __ mv(result.gp(), result_reg); + } +} + +#undef __ +} // namespace liftoff + void LiftoffAssembler::AtomicLoad(LiftoffRegister dst, Register src_addr, Register offset_reg, uintptr_t offset_imm, LoadType type, LiftoffRegList pinned) { - bailout(kAtomics, "AtomicLoad"); + UseScratchRegisterScope temps(this); + Register src_reg = liftoff::CalculateActualAddress( + this, src_addr, offset_reg, offset_imm, temps.Acquire()); + switch (type.value()) { + case LoadType::kI32Load8U: + case LoadType::kI64Load8U: + lbu(dst.gp(), src_reg, 0); + sync(); + return; + case LoadType::kI32Load16U: + case LoadType::kI64Load16U: + lhu(dst.gp(), src_reg, 0); + sync(); + return; + case LoadType::kI32Load: + lr_w(true, true, dst.gp(), src_reg); + return; + case LoadType::kI64Load32U: + lr_w(true, true, dst.gp(), src_reg); + slli(dst.gp(), dst.gp(), 32); + srli(dst.gp(), dst.gp(), 32); + return; + case LoadType::kI64Load: + lr_d(true, true, dst.gp(), src_reg); + return; + default: + UNREACHABLE(); + } } void LiftoffAssembler::AtomicStore(Register dst_addr, Register offset_reg, uintptr_t offset_imm, LiftoffRegister src, StoreType type, LiftoffRegList pinned) { - bailout(kAtomics, "AtomicStore"); + UseScratchRegisterScope temps(this); + Register dst_reg = liftoff::CalculateActualAddress( + this, dst_addr, offset_reg, offset_imm, temps.Acquire()); + switch (type.value()) { + case StoreType::kI64Store8: + case StoreType::kI32Store8: + sync(); + sb(src.gp(), dst_reg, 0); + sync(); + return; + case StoreType::kI64Store16: + case StoreType::kI32Store16: + sync(); + sh(src.gp(), dst_reg, 0); + sync(); + return; + case StoreType::kI64Store32: + case StoreType::kI32Store: + sc_w(true, true, zero_reg, dst_reg, src.gp()); + return; + case StoreType::kI64Store: + sc_d(true, true, zero_reg, dst_reg, src.gp()); + return; + default: + UNREACHABLE(); + } } void LiftoffAssembler::AtomicAdd(Register dst_addr, Register offset_reg, uintptr_t offset_imm, LiftoffRegister value, LiftoffRegister result, StoreType type) { - bailout(kAtomics, "AtomicAdd"); + liftoff::AtomicBinop(this, dst_addr, offset_reg, offset_imm, value, result, + type, liftoff::Binop::kAdd); } void LiftoffAssembler::AtomicSub(Register dst_addr, Register offset_reg, uintptr_t offset_imm, LiftoffRegister value, LiftoffRegister result, StoreType type) { - bailout(kAtomics, "AtomicSub"); + liftoff::AtomicBinop(this, dst_addr, offset_reg, offset_imm, value, result, + type, liftoff::Binop::kSub); } void LiftoffAssembler::AtomicAnd(Register dst_addr, Register offset_reg, uintptr_t offset_imm, LiftoffRegister value, LiftoffRegister result, StoreType type) { - bailout(kAtomics, "AtomicAnd"); + liftoff::AtomicBinop(this, dst_addr, offset_reg, offset_imm, value, result, + type, liftoff::Binop::kAnd); } void LiftoffAssembler::AtomicOr(Register dst_addr, Register offset_reg, uintptr_t offset_imm, LiftoffRegister value, LiftoffRegister result, StoreType type) { - bailout(kAtomics, "AtomicOr"); + liftoff::AtomicBinop(this, dst_addr, offset_reg, offset_imm, value, result, + type, liftoff::Binop::kOr); } void LiftoffAssembler::AtomicXor(Register dst_addr, Register offset_reg, uintptr_t offset_imm, LiftoffRegister value, LiftoffRegister result, StoreType type) { - bailout(kAtomics, "AtomicXor"); + liftoff::AtomicBinop(this, dst_addr, offset_reg, offset_imm, value, result, + type, liftoff::Binop::kXor); } void LiftoffAssembler::AtomicExchange(Register dst_addr, Register offset_reg, uintptr_t offset_imm, LiftoffRegister value, LiftoffRegister result, StoreType type) { - bailout(kAtomics, "AtomicExchange"); + liftoff::AtomicBinop(this, dst_addr, offset_reg, offset_imm, value, result, + type, liftoff::Binop::kExchange); } void LiftoffAssembler::AtomicCompareExchange( Register dst_addr, Register offset_reg, uintptr_t offset_imm, LiftoffRegister expected, LiftoffRegister new_value, LiftoffRegister result, StoreType type) { - bailout(kAtomics, "AtomicCompareExchange"); + LiftoffRegList pinned = + LiftoffRegList::ForRegs(dst_addr, offset_reg, expected, new_value); + + Register result_reg = result.gp(); + if (pinned.has(result)) { + result_reg = GetUnusedRegister(kGpReg, pinned).gp(); + } + + UseScratchRegisterScope temps(this); + + Register actual_addr = liftoff::CalculateActualAddress( + this, dst_addr, offset_reg, offset_imm, temps.Acquire()); + + Register store_result = temps.Acquire(); + + Label retry; + Label done; + bind(&retry); + switch (type.value()) { + case StoreType::kI64Store8: + case StoreType::kI32Store8: + lbu(result_reg, actual_addr, 0); + sync(); + Branch(&done, ne, result.gp(), Operand(expected.gp())); + sync(); + sb(new_value.gp(), actual_addr, 0); + sync(); + mv(store_result, zero_reg); + break; + case StoreType::kI64Store16: + case StoreType::kI32Store16: + lhu(result_reg, actual_addr, 0); + sync(); + Branch(&done, ne, result.gp(), Operand(expected.gp())); + sync(); + sh(new_value.gp(), actual_addr, 0); + sync(); + mv(store_result, zero_reg); + break; + case StoreType::kI64Store32: + case StoreType::kI32Store: + lr_w(true, true, result_reg, actual_addr); + Branch(&done, ne, result.gp(), Operand(expected.gp())); + sc_w(true, true, store_result, new_value.gp(), actual_addr); + break; + case StoreType::kI64Store: + lr_d(true, true, result_reg, actual_addr); + Branch(&done, ne, result.gp(), Operand(expected.gp())); + sc_d(true, true, store_result, new_value.gp(), actual_addr); + break; + default: + UNREACHABLE(); + } + bnez(store_result, &retry); + bind(&done); + + if (result_reg != result.gp()) { + mv(result.gp(), result_reg); + } } void LiftoffAssembler::AtomicFence() { sync(); } @@ -2413,7 +2664,7 @@ void LiftoffAssembler::CallTrapCallbackForTesting() { } void LiftoffAssembler::AssertUnreachable(AbortReason reason) { - if (emit_debug_code()) Abort(reason); + if (FLAG_debug_code) Abort(reason); } void LiftoffAssembler::PushRegisters(LiftoffRegList regs) { @@ -2543,8 +2794,8 @@ void LiftoffAssembler::CallIndirect(const ValueKindSig* sig, compiler::CallDescriptor* call_descriptor, Register target) { if (target == no_reg) { - pop(kScratchReg); - Call(kScratchReg); + pop(t6); + Call(t6); } else { Call(target); } @@ -2552,8 +2803,8 @@ void LiftoffAssembler::CallIndirect(const ValueKindSig* sig, void LiftoffAssembler::TailCallIndirect(Register target) { if (target == no_reg) { - Pop(kScratchReg); - Jump(kScratchReg); + Pop(t6); + Jump(t6); } else { Jump(target); } @@ -2574,6 +2825,7 @@ void LiftoffAssembler::DeallocateStackSlot(uint32_t size) { Add64(sp, sp, Operand(size)); } +void LiftoffAssembler::MaybeOSR() {} void LiftoffStackSlots::Construct(int param_slots) { DCHECK_LT(0, slots_.size()); diff --git a/deps/v8/src/wasm/baseline/s390/liftoff-assembler-s390.h b/deps/v8/src/wasm/baseline/s390/liftoff-assembler-s390.h index 04f30939fd..4c230ed305 100644 --- a/deps/v8/src/wasm/baseline/s390/liftoff-assembler-s390.h +++ b/deps/v8/src/wasm/baseline/s390/liftoff-assembler-s390.h @@ -224,6 +224,8 @@ void LiftoffAssembler::SpillInstance(Register instance) { StoreU64(instance, liftoff::GetInstanceOperand()); } +void LiftoffAssembler::ResetOSRTarget() {} + void LiftoffAssembler::FillInstanceInto(Register dst) { LoadU64(dst, liftoff::GetInstanceOperand()); } @@ -254,7 +256,7 @@ void LiftoffAssembler::StoreTaggedPointer(Register dst_addr, MemOperand(dst_addr, offset_reg == no_reg ? r0 : offset_reg, offset_imm); StoreTaggedField(src.gp(), dst_op); - if (skip_write_barrier) return; + if (skip_write_barrier || FLAG_disable_write_barriers) return; Label write_barrier; Label exit; @@ -269,25 +271,19 @@ void LiftoffAssembler::StoreTaggedPointer(Register dst_addr, CheckPageFlag(src.gp(), r1, MemoryChunk::kPointersToHereAreInterestingMask, eq, &exit); lay(r1, dst_op); - CallRecordWriteStub(dst_addr, r1, EMIT_REMEMBERED_SET, kSaveFPRegs, - wasm::WasmCode::kRecordWrite); + CallRecordWriteStub(dst_addr, r1, RememberedSetAction::kEmit, + SaveFPRegsMode::kSave, wasm::WasmCode::kRecordWrite); bind(&exit); } void LiftoffAssembler::Load(LiftoffRegister dst, Register src_addr, Register offset_reg, uintptr_t offset_imm, LoadType type, LiftoffRegList pinned, - uint32_t* protected_load_pc, bool is_load_mem, - bool i64_offset) { + uint32_t* protected_load_pc, bool is_load_mem) { UseScratchRegisterScope temps(this); if (!is_int20(offset_imm)) { mov(ip, Operand(offset_imm)); if (offset_reg != no_reg) { - if (!i64_offset) { - // Clear the upper 32 bits of the 64 bit offset register. - llgfr(r0, offset_reg); - offset_reg = r0; - } AddS64(ip, offset_reg); } offset_reg = ip; @@ -671,19 +667,253 @@ void LiftoffAssembler::AtomicSub(Register dst_addr, Register offset_reg, void LiftoffAssembler::AtomicAnd(Register dst_addr, Register offset_reg, uintptr_t offset_imm, LiftoffRegister value, LiftoffRegister result, StoreType type) { - bailout(kAtomics, "AtomicAnd"); + Register tmp1 = + GetUnusedRegister( + kGpReg, LiftoffRegList::ForRegs(dst_addr, offset_reg, value, result)) + .gp(); + Register tmp2 = + GetUnusedRegister(kGpReg, LiftoffRegList::ForRegs(dst_addr, offset_reg, + value, result, tmp1)) + .gp(); + + lay(ip, + MemOperand(dst_addr, offset_reg == no_reg ? r0 : offset_reg, offset_imm)); + + switch (type.value()) { + case StoreType::kI32Store8: + case StoreType::kI64Store8: { + Label do_again; + bind(&do_again); + LoadU8(tmp1, MemOperand(ip)); + AndP(tmp2, tmp1, value.gp()); + AtomicCmpExchangeU8(ip, result.gp(), tmp1, tmp2, r0, r1); + b(Condition(4), &do_again); + LoadU8(result.gp(), result.gp()); + break; + } + case StoreType::kI32Store16: + case StoreType::kI64Store16: { + Label do_again; + bind(&do_again); + LoadU16(tmp1, MemOperand(ip)); +#ifdef V8_TARGET_BIG_ENDIAN + lrvr(tmp2, tmp1); + ShiftRightU32(tmp2, tmp2, Operand(16)); + AndP(tmp2, tmp2, value.gp()); + lrvr(tmp2, tmp2); + ShiftRightU32(tmp2, tmp2, Operand(16)); +#else + AndP(tmp2, tmp1, value.gp()); +#endif + AtomicCmpExchangeU16(ip, result.gp(), tmp1, tmp2, r0, r1); + b(Condition(4), &do_again); + LoadU16(result.gp(), result.gp()); + break; + } + case StoreType::kI32Store: + case StoreType::kI64Store32: { + Label do_again; + bind(&do_again); + LoadU32(tmp1, MemOperand(ip)); +#ifdef V8_TARGET_BIG_ENDIAN + lrvr(tmp2, tmp1); + AndP(tmp2, tmp2, value.gp()); + lrvr(tmp2, tmp2); +#else + AndP(tmp2, tmp1, value.gp()); +#endif + CmpAndSwap(tmp1, tmp2, MemOperand(ip)); + b(Condition(4), &do_again); + LoadU32(result.gp(), tmp1); + break; + } + case StoreType::kI64Store: { + Label do_again; + bind(&do_again); + LoadU64(tmp1, MemOperand(ip)); +#ifdef V8_TARGET_BIG_ENDIAN + lrvgr(tmp2, tmp1); + AndP(tmp2, tmp2, value.gp()); + lrvgr(tmp2, tmp2); +#else + AndP(tmp2, tmp1, value.gp()); +#endif + CmpAndSwap64(tmp1, tmp2, MemOperand(ip)); + b(Condition(4), &do_again); + mov(result.gp(), tmp1); + break; + } + default: + UNREACHABLE(); + } } void LiftoffAssembler::AtomicOr(Register dst_addr, Register offset_reg, uintptr_t offset_imm, LiftoffRegister value, LiftoffRegister result, StoreType type) { - bailout(kAtomics, "AtomicOr"); + Register tmp1 = + GetUnusedRegister( + kGpReg, LiftoffRegList::ForRegs(dst_addr, offset_reg, value, result)) + .gp(); + Register tmp2 = + GetUnusedRegister(kGpReg, LiftoffRegList::ForRegs(dst_addr, offset_reg, + value, result, tmp1)) + .gp(); + + lay(ip, + MemOperand(dst_addr, offset_reg == no_reg ? r0 : offset_reg, offset_imm)); + + switch (type.value()) { + case StoreType::kI32Store8: + case StoreType::kI64Store8: { + Label do_again; + bind(&do_again); + LoadU8(tmp1, MemOperand(ip)); + OrP(tmp2, tmp1, value.gp()); + AtomicCmpExchangeU8(ip, result.gp(), tmp1, tmp2, r0, r1); + b(Condition(4), &do_again); + LoadU8(result.gp(), result.gp()); + break; + } + case StoreType::kI32Store16: + case StoreType::kI64Store16: { + Label do_again; + bind(&do_again); + LoadU16(tmp1, MemOperand(ip)); +#ifdef V8_TARGET_BIG_ENDIAN + lrvr(tmp2, tmp1); + ShiftRightU32(tmp2, tmp2, Operand(16)); + OrP(tmp2, tmp2, value.gp()); + lrvr(tmp2, tmp2); + ShiftRightU32(tmp2, tmp2, Operand(16)); +#else + OrP(tmp2, tmp1, value.gp()); +#endif + AtomicCmpExchangeU16(ip, result.gp(), tmp1, tmp2, r0, r1); + b(Condition(4), &do_again); + LoadU16(result.gp(), result.gp()); + break; + } + case StoreType::kI32Store: + case StoreType::kI64Store32: { + Label do_again; + bind(&do_again); + LoadU32(tmp1, MemOperand(ip)); +#ifdef V8_TARGET_BIG_ENDIAN + lrvr(tmp2, tmp1); + OrP(tmp2, tmp2, value.gp()); + lrvr(tmp2, tmp2); +#else + OrP(tmp2, tmp1, value.gp()); +#endif + CmpAndSwap(tmp1, tmp2, MemOperand(ip)); + b(Condition(4), &do_again); + LoadU32(result.gp(), tmp1); + break; + } + case StoreType::kI64Store: { + Label do_again; + bind(&do_again); + LoadU64(tmp1, MemOperand(ip)); +#ifdef V8_TARGET_BIG_ENDIAN + lrvgr(tmp2, tmp1); + OrP(tmp2, tmp2, value.gp()); + lrvgr(tmp2, tmp2); +#else + OrP(tmp2, tmp1, value.gp()); +#endif + CmpAndSwap64(tmp1, tmp2, MemOperand(ip)); + b(Condition(4), &do_again); + mov(result.gp(), tmp1); + break; + } + default: + UNREACHABLE(); + } } void LiftoffAssembler::AtomicXor(Register dst_addr, Register offset_reg, uintptr_t offset_imm, LiftoffRegister value, LiftoffRegister result, StoreType type) { - bailout(kAtomics, "AtomicXor"); + Register tmp1 = + GetUnusedRegister( + kGpReg, LiftoffRegList::ForRegs(dst_addr, offset_reg, value, result)) + .gp(); + Register tmp2 = + GetUnusedRegister(kGpReg, LiftoffRegList::ForRegs(dst_addr, offset_reg, + value, result, tmp1)) + .gp(); + + lay(ip, + MemOperand(dst_addr, offset_reg == no_reg ? r0 : offset_reg, offset_imm)); + + switch (type.value()) { + case StoreType::kI32Store8: + case StoreType::kI64Store8: { + Label do_again; + bind(&do_again); + LoadU8(tmp1, MemOperand(ip)); + XorP(tmp2, tmp1, value.gp()); + AtomicCmpExchangeU8(ip, result.gp(), tmp1, tmp2, r0, r1); + b(Condition(4), &do_again); + LoadU8(result.gp(), result.gp()); + break; + } + case StoreType::kI32Store16: + case StoreType::kI64Store16: { + Label do_again; + bind(&do_again); + LoadU16(tmp1, MemOperand(ip)); +#ifdef V8_TARGET_BIG_ENDIAN + lrvr(tmp2, tmp1); + ShiftRightU32(tmp2, tmp2, Operand(16)); + XorP(tmp2, tmp2, value.gp()); + lrvr(tmp2, tmp2); + ShiftRightU32(tmp2, tmp2, Operand(16)); +#else + XorP(tmp2, tmp1, value.gp()); +#endif + AtomicCmpExchangeU16(ip, result.gp(), tmp1, tmp2, r0, r1); + b(Condition(4), &do_again); + LoadU16(result.gp(), result.gp()); + break; + } + case StoreType::kI32Store: + case StoreType::kI64Store32: { + Label do_again; + bind(&do_again); + LoadU32(tmp1, MemOperand(ip)); +#ifdef V8_TARGET_BIG_ENDIAN + lrvr(tmp2, tmp1); + XorP(tmp2, tmp2, value.gp()); + lrvr(tmp2, tmp2); +#else + XorP(tmp2, tmp1, value.gp()); +#endif + CmpAndSwap(tmp1, tmp2, MemOperand(ip)); + b(Condition(4), &do_again); + LoadU32(result.gp(), tmp1); + break; + } + case StoreType::kI64Store: { + Label do_again; + bind(&do_again); + LoadU64(tmp1, MemOperand(ip)); +#ifdef V8_TARGET_BIG_ENDIAN + lrvgr(tmp2, tmp1); + XorP(tmp2, tmp2, value.gp()); + lrvgr(tmp2, tmp2); +#else + XorP(tmp2, tmp1, value.gp()); +#endif + CmpAndSwap64(tmp1, tmp2, MemOperand(ip)); + b(Condition(4), &do_again); + mov(result.gp(), tmp1); + break; + } + default: + UNREACHABLE(); + } } void LiftoffAssembler::AtomicExchange(Register dst_addr, Register offset_reg, @@ -1168,9 +1398,19 @@ void LiftoffAssembler::FillStackSlotsWithZero(int start, int size) { LFR_TO_REG, LFR_TO_REG, USE, , void) \ V(i64_ctz, CountTrailingZerosU64, LiftoffRegister, LiftoffRegister, \ LFR_TO_REG, LFR_TO_REG, USE, , void) \ + V(f32_ceil, CeilF32, DoubleRegister, DoubleRegister, , , USE, true, bool) \ + V(f32_floor, FloorF32, DoubleRegister, DoubleRegister, , , USE, true, bool) \ + V(f32_trunc, TruncF32, DoubleRegister, DoubleRegister, , , USE, true, bool) \ + V(f32_nearest_int, NearestIntF32, DoubleRegister, DoubleRegister, , , USE, \ + true, bool) \ V(f32_abs, lpebr, DoubleRegister, DoubleRegister, , , USE, , void) \ V(f32_neg, lcebr, DoubleRegister, DoubleRegister, , , USE, , void) \ V(f32_sqrt, sqebr, DoubleRegister, DoubleRegister, , , USE, , void) \ + V(f64_ceil, CeilF64, DoubleRegister, DoubleRegister, , , USE, true, bool) \ + V(f64_floor, FloorF64, DoubleRegister, DoubleRegister, , , USE, true, bool) \ + V(f64_trunc, TruncF64, DoubleRegister, DoubleRegister, , , USE, true, bool) \ + V(f64_nearest_int, NearestIntF64, DoubleRegister, DoubleRegister, , , USE, \ + true, bool) \ V(f64_abs, lpdbr, DoubleRegister, DoubleRegister, , , USE, , void) \ V(f64_neg, lcdbr, DoubleRegister, DoubleRegister, , , USE, , void) \ V(f64_sqrt, sqdbr, DoubleRegister, DoubleRegister, , , USE, , void) @@ -1191,6 +1431,14 @@ UNOP_LIST(EMIT_UNOP_FUNCTION) // V(name, instr, dtype, stype1, stype2, dcast, scast1, scast2, rcast, // return_val, return_type) #define BINOP_LIST(V) \ + V(f32_min, FloatMin, DoubleRegister, DoubleRegister, DoubleRegister, , , , \ + USE, , void) \ + V(f32_max, FloatMax, DoubleRegister, DoubleRegister, DoubleRegister, , , , \ + USE, , void) \ + V(f64_min, DoubleMin, DoubleRegister, DoubleRegister, DoubleRegister, , , , \ + USE, , void) \ + V(f64_max, DoubleMax, DoubleRegister, DoubleRegister, DoubleRegister, , , , \ + USE, , void) \ V(f64_add, AddF64, DoubleRegister, DoubleRegister, DoubleRegister, , , , \ USE, , void) \ V(f64_sub, SubF64, DoubleRegister, DoubleRegister, DoubleRegister, , , , \ @@ -1285,84 +1533,6 @@ BINOP_LIST(EMIT_BINOP_FUNCTION) #undef REGISTER_AND_WITH_1F #undef LFR_TO_REG -bool LiftoffAssembler::emit_f32_ceil(DoubleRegister dst, DoubleRegister src) { - fiebra(ROUND_TOWARD_POS_INF, dst, src); - return true; -} - -bool LiftoffAssembler::emit_f32_floor(DoubleRegister dst, DoubleRegister src) { - fiebra(ROUND_TOWARD_NEG_INF, dst, src); - return true; -} - -bool LiftoffAssembler::emit_f32_trunc(DoubleRegister dst, DoubleRegister src) { - fiebra(ROUND_TOWARD_0, dst, src); - return true; -} - -bool LiftoffAssembler::emit_f32_nearest_int(DoubleRegister dst, - DoubleRegister src) { - fiebra(ROUND_TO_NEAREST_TO_EVEN, dst, src); - return true; -} - -void LiftoffAssembler::emit_f64_min(DoubleRegister dst, DoubleRegister lhs, - DoubleRegister rhs) { - if (CpuFeatures::IsSupported(VECTOR_ENHANCE_FACILITY_1)) { - vfmin(dst, lhs, rhs, Condition(1), Condition(8), Condition(3)); - return; - } - DoubleMin(dst, lhs, rhs); -} - -void LiftoffAssembler::emit_f32_min(DoubleRegister dst, DoubleRegister lhs, - DoubleRegister rhs) { - if (CpuFeatures::IsSupported(VECTOR_ENHANCE_FACILITY_1)) { - vfmin(dst, lhs, rhs, Condition(1), Condition(8), Condition(2)); - return; - } - FloatMin(dst, lhs, rhs); -} - -bool LiftoffAssembler::emit_f64_ceil(DoubleRegister dst, DoubleRegister src) { - fidbra(ROUND_TOWARD_POS_INF, dst, src); - return true; -} - -bool LiftoffAssembler::emit_f64_floor(DoubleRegister dst, DoubleRegister src) { - fidbra(ROUND_TOWARD_NEG_INF, dst, src); - return true; -} - -bool LiftoffAssembler::emit_f64_trunc(DoubleRegister dst, DoubleRegister src) { - fidbra(ROUND_TOWARD_0, dst, src); - return true; -} - -bool LiftoffAssembler::emit_f64_nearest_int(DoubleRegister dst, - DoubleRegister src) { - fidbra(ROUND_TO_NEAREST_TO_EVEN, dst, src); - return true; -} - -void LiftoffAssembler::emit_f64_max(DoubleRegister dst, DoubleRegister lhs, - DoubleRegister rhs) { - if (CpuFeatures::IsSupported(VECTOR_ENHANCE_FACILITY_1)) { - vfmax(dst, lhs, rhs, Condition(1), Condition(8), Condition(3)); - return; - } - DoubleMax(dst, lhs, rhs); -} - -void LiftoffAssembler::emit_f32_max(DoubleRegister dst, DoubleRegister lhs, - DoubleRegister rhs) { - if (CpuFeatures::IsSupported(VECTOR_ENHANCE_FACILITY_1)) { - vfmax(dst, lhs, rhs, Condition(1), Condition(8), Condition(2)); - return; - } - FloatMax(dst, lhs, rhs); -} - void LiftoffAssembler::emit_i32_divs(Register dst, Register lhs, Register rhs, Label* trap_div_by_zero, Label* trap_div_unrepresentable) { @@ -1896,7 +2066,9 @@ bool LiftoffAssembler::emit_select(LiftoffRegister dst, Register condition, void LiftoffAssembler::emit_smi_check(Register obj, Label* target, SmiCheckMode mode) { - bailout(kUnsupportedArchitecture, "emit_smi_check"); + TestIfSmi(obj); + Condition condition = mode == kJumpOnSmi ? eq : ne; + b(condition, target); // branch if SMI } void LiftoffAssembler::LoadTransform(LiftoffRegister dst, Register src_addr, @@ -3213,6 +3385,8 @@ void LiftoffAssembler::DeallocateStackSlot(uint32_t size) { lay(sp, MemOperand(sp, size)); } +void LiftoffAssembler::MaybeOSR() {} + void LiftoffStackSlots::Construct(int param_slots) { DCHECK_LT(0, slots_.size()); SortInPushOrder(); diff --git a/deps/v8/src/wasm/baseline/x64/liftoff-assembler-x64.h b/deps/v8/src/wasm/baseline/x64/liftoff-assembler-x64.h index 68619a9f1b..3da9656b42 100644 --- a/deps/v8/src/wasm/baseline/x64/liftoff-assembler-x64.h +++ b/deps/v8/src/wasm/baseline/x64/liftoff-assembler-x64.h @@ -70,6 +70,8 @@ inline Operand GetStackSlot(int offset) { return Operand(rbp, -offset); } // TODO(clemensb): Make this a constexpr variable once Operand is constexpr. inline Operand GetInstanceOperand() { return GetStackSlot(kInstanceOffset); } +inline Operand GetOSRTargetSlot() { return GetStackSlot(kOSRTargetOffset); } + inline Operand GetMemOp(LiftoffAssembler* assm, Register addr, Register offset, uintptr_t offset_imm) { if (is_uint31(offset_imm)) { @@ -79,7 +81,7 @@ inline Operand GetMemOp(LiftoffAssembler* assm, Register addr, Register offset, } // Offset immediate does not fit in 31 bits. Register scratch = kScratchRegister; - assm->Set(scratch, offset_imm); + assm->TurboAssembler::Move(scratch, offset_imm); if (offset != no_reg) assm->addq(scratch, offset); return Operand(addr, scratch, times_1, 0); } @@ -249,7 +251,7 @@ void LiftoffAssembler::AbortCompilation() {} // static constexpr int LiftoffAssembler::StaticStackFrameSize() { - return liftoff::kInstanceOffset; + return kOSRTargetOffset; } int LiftoffAssembler::SlotSizeForType(ValueKind kind) { @@ -272,7 +274,7 @@ void LiftoffAssembler::LoadConstant(LiftoffRegister reg, WasmValue value, break; case kI64: if (RelocInfo::IsNone(rmode)) { - TurboAssembler::Set(reg.gp(), value.to_i64()); + TurboAssembler::Move(reg.gp(), value.to_i64()); } else { movq(reg.gp(), Immediate64(value.to_i64(), rmode)); } @@ -322,6 +324,10 @@ void LiftoffAssembler::SpillInstance(Register instance) { movq(liftoff::GetInstanceOperand(), instance); } +void LiftoffAssembler::ResetOSRTarget() { + movq(liftoff::GetOSRTargetSlot(), Immediate(0)); +} + void LiftoffAssembler::FillInstanceInto(Register dst) { movq(dst, liftoff::GetInstanceOperand()); } @@ -331,7 +337,7 @@ void LiftoffAssembler::LoadTaggedPointer(Register dst, Register src_addr, int32_t offset_imm, LiftoffRegList pinned) { DCHECK_GE(offset_imm, 0); - if (emit_debug_code() && offset_reg != no_reg) { + if (FLAG_debug_code && offset_reg != no_reg) { AssertZeroExtended(offset_reg); } Operand src_op = liftoff::GetMemOp(this, src_addr, offset_reg, @@ -357,7 +363,7 @@ void LiftoffAssembler::StoreTaggedPointer(Register dst_addr, static_cast<uint32_t>(offset_imm)); StoreTaggedField(dst_op, src.gp()); - if (skip_write_barrier) return; + if (skip_write_barrier || FLAG_disable_write_barriers) return; Register scratch = pinned.set(GetUnusedRegister(kGpReg, pinned)).gp(); Label write_barrier; @@ -375,8 +381,8 @@ void LiftoffAssembler::StoreTaggedPointer(Register dst_addr, MemoryChunk::kPointersToHereAreInterestingMask, zero, &exit, Label::kNear); leaq(scratch, dst_op); - CallRecordWriteStub(dst_addr, scratch, EMIT_REMEMBERED_SET, kSaveFPRegs, - wasm::WasmCode::kRecordWrite); + CallRecordWriteStub(dst_addr, scratch, RememberedSetAction::kEmit, + SaveFPRegsMode::kSave, wasm::WasmCode::kRecordWrite); bind(&exit); } @@ -389,11 +395,7 @@ void LiftoffAssembler::AtomicLoad(LiftoffRegister dst, Register src_addr, void LiftoffAssembler::Load(LiftoffRegister dst, Register src_addr, Register offset_reg, uintptr_t offset_imm, LoadType type, LiftoffRegList pinned, - uint32_t* protected_load_pc, bool is_load_mem, - bool i64_offset) { - if (offset_reg != no_reg && !i64_offset) { - AssertZeroExtended(offset_reg); - } + uint32_t* protected_load_pc, bool is_load_mem) { Operand src_op = liftoff::GetMemOp(this, src_addr, offset_reg, offset_imm); if (protected_load_pc) *protected_load_pc = pc_offset(); switch (type.value()) { @@ -1257,7 +1259,7 @@ void LiftoffAssembler::emit_i64_add(LiftoffRegister dst, LiftoffRegister lhs, void LiftoffAssembler::emit_i64_addi(LiftoffRegister dst, LiftoffRegister lhs, int64_t imm) { if (!is_int32(imm)) { - TurboAssembler::Set(kScratchRegister, imm); + TurboAssembler::Move(kScratchRegister, imm); if (lhs.gp() == dst.gp()) { addq(dst.gp(), kScratchRegister); } else { @@ -2538,7 +2540,7 @@ void LiftoffAssembler::emit_i64x2_splat(LiftoffRegister dst, void LiftoffAssembler::emit_f32x4_splat(LiftoffRegister dst, LiftoffRegister src) { - Shufps(dst.fp(), src.fp(), src.fp(), 0); + F32x4Splat(dst.fp(), src.fp()); } void LiftoffAssembler::emit_f64x2_splat(LiftoffRegister dst, @@ -2850,13 +2852,7 @@ void LiftoffAssembler::emit_s128_const(LiftoffRegister dst, } void LiftoffAssembler::emit_s128_not(LiftoffRegister dst, LiftoffRegister src) { - if (dst.fp() != src.fp()) { - Pcmpeqd(dst.fp(), dst.fp()); - Pxor(dst.fp(), src.fp()); - } else { - Pcmpeqd(kScratchDoubleReg, kScratchDoubleReg); - Pxor(dst.fp(), kScratchDoubleReg); - } + S128Not(dst.fp(), src.fp(), kScratchDoubleReg); } void LiftoffAssembler::emit_s128_and(LiftoffRegister dst, LiftoffRegister lhs, @@ -3433,15 +3429,7 @@ void LiftoffAssembler::emit_i32x4_extmul_high_i16x8_u(LiftoffRegister dst, void LiftoffAssembler::emit_i64x2_neg(LiftoffRegister dst, LiftoffRegister src) { - DoubleRegister reg = dst.fp() == src.fp() ? kScratchDoubleReg : dst.fp(); - Pxor(reg, reg); - if (CpuFeatures::IsSupported(AVX)) { - CpuFeatureScope scope(this, AVX); - vpsubq(dst.fp(), reg, src.fp()); - } else { - psubq(reg, src.fp()); - if (dst.fp() != reg) movaps(dst.fp(), reg); - } + I64x2Neg(dst.fp(), src.fp(), kScratchDoubleReg); } void LiftoffAssembler::emit_i64x2_alltrue(LiftoffRegister dst, @@ -3508,13 +3496,13 @@ void LiftoffAssembler::emit_i64x2_mul(LiftoffRegister dst, LiftoffRegister lhs, Movaps(tmp1.fp(), lhs.fp()); Movaps(tmp2.fp(), rhs.fp()); // Multiply high dword of each qword of left with right. - Psrlq(tmp1.fp(), 32); + Psrlq(tmp1.fp(), byte{32}); Pmuludq(tmp1.fp(), rhs.fp()); // Multiply high dword of each qword of right with left. - Psrlq(tmp2.fp(), 32); + Psrlq(tmp2.fp(), byte{32}); Pmuludq(tmp2.fp(), lhs.fp()); Paddq(tmp2.fp(), tmp1.fp()); - Psllq(tmp2.fp(), 32); + Psllq(tmp2.fp(), byte{32}); liftoff::EmitSimdCommutativeBinOp<&Assembler::vpmuludq, &Assembler::pmuludq>( this, dst, lhs, rhs); Paddq(dst.fp(), tmp2.fp()); @@ -3590,11 +3578,11 @@ void LiftoffAssembler::emit_f32x4_neg(LiftoffRegister dst, LiftoffRegister src) { if (dst.fp() == src.fp()) { Pcmpeqd(kScratchDoubleReg, kScratchDoubleReg); - Pslld(kScratchDoubleReg, static_cast<byte>(31)); + Pslld(kScratchDoubleReg, byte{31}); Xorps(dst.fp(), kScratchDoubleReg); } else { Pcmpeqd(dst.fp(), dst.fp()); - Pslld(dst.fp(), static_cast<byte>(31)); + Pslld(dst.fp(), byte{31}); Xorps(dst.fp(), src.fp()); } } @@ -3678,7 +3666,7 @@ void LiftoffAssembler::emit_f32x4_min(LiftoffRegister dst, LiftoffRegister lhs, // propagate -0's and NaNs, which may be non-canonical. Orps(kScratchDoubleReg, dst.fp()); // Canonicalize NaNs by quieting and clearing the payload. - Cmpps(dst.fp(), kScratchDoubleReg, int8_t{3}); + Cmpunordps(dst.fp(), kScratchDoubleReg); Orps(kScratchDoubleReg, dst.fp()); Psrld(dst.fp(), byte{10}); Andnps(dst.fp(), kScratchDoubleReg); @@ -3710,7 +3698,7 @@ void LiftoffAssembler::emit_f32x4_max(LiftoffRegister dst, LiftoffRegister lhs, // Propagate sign discrepancy and (subtle) quiet NaNs. Subps(kScratchDoubleReg, dst.fp()); // Canonicalize NaNs by clearing the payload. Sign is non-deterministic. - Cmpps(dst.fp(), kScratchDoubleReg, int8_t{3}); + Cmpunordps(dst.fp(), kScratchDoubleReg); Psrld(dst.fp(), byte{10}); Andnps(dst.fp(), kScratchDoubleReg); } @@ -3733,11 +3721,11 @@ void LiftoffAssembler::emit_f64x2_abs(LiftoffRegister dst, LiftoffRegister src) { if (dst.fp() == src.fp()) { Pcmpeqd(kScratchDoubleReg, kScratchDoubleReg); - Psrlq(kScratchDoubleReg, static_cast<byte>(1)); + Psrlq(kScratchDoubleReg, byte{1}); Andpd(dst.fp(), kScratchDoubleReg); } else { Pcmpeqd(dst.fp(), dst.fp()); - Psrlq(dst.fp(), static_cast<byte>(1)); + Psrlq(dst.fp(), byte{1}); Andpd(dst.fp(), src.fp()); } } @@ -3814,61 +3802,12 @@ void LiftoffAssembler::emit_f64x2_div(LiftoffRegister dst, LiftoffRegister lhs, void LiftoffAssembler::emit_f64x2_min(LiftoffRegister dst, LiftoffRegister lhs, LiftoffRegister rhs) { - // The minpd instruction doesn't propagate NaNs and +0's in its first - // operand. Perform minpd in both orders, merge the results, and adjust. - if (CpuFeatures::IsSupported(AVX)) { - CpuFeatureScope scope(this, AVX); - vminpd(kScratchDoubleReg, lhs.fp(), rhs.fp()); - vminpd(dst.fp(), rhs.fp(), lhs.fp()); - } else if (dst.fp() == lhs.fp() || dst.fp() == rhs.fp()) { - XMMRegister src = dst.fp() == lhs.fp() ? rhs.fp() : lhs.fp(); - movaps(kScratchDoubleReg, src); - minpd(kScratchDoubleReg, dst.fp()); - minpd(dst.fp(), src); - } else { - movaps(kScratchDoubleReg, lhs.fp()); - minpd(kScratchDoubleReg, rhs.fp()); - movaps(dst.fp(), rhs.fp()); - minpd(dst.fp(), lhs.fp()); - } - // propagate -0's and NaNs, which may be non-canonical. - Orpd(kScratchDoubleReg, dst.fp()); - // Canonicalize NaNs by quieting and clearing the payload. - Cmppd(dst.fp(), kScratchDoubleReg, int8_t{3}); - Orpd(kScratchDoubleReg, dst.fp()); - Psrlq(dst.fp(), 13); - Andnpd(dst.fp(), kScratchDoubleReg); + F64x2Min(dst.fp(), lhs.fp(), rhs.fp(), kScratchDoubleReg); } void LiftoffAssembler::emit_f64x2_max(LiftoffRegister dst, LiftoffRegister lhs, LiftoffRegister rhs) { - // The maxpd instruction doesn't propagate NaNs and +0's in its first - // operand. Perform maxpd in both orders, merge the results, and adjust. - if (CpuFeatures::IsSupported(AVX)) { - CpuFeatureScope scope(this, AVX); - vmaxpd(kScratchDoubleReg, lhs.fp(), rhs.fp()); - vmaxpd(dst.fp(), rhs.fp(), lhs.fp()); - } else if (dst.fp() == lhs.fp() || dst.fp() == rhs.fp()) { - XMMRegister src = dst.fp() == lhs.fp() ? rhs.fp() : lhs.fp(); - movaps(kScratchDoubleReg, src); - maxpd(kScratchDoubleReg, dst.fp()); - maxpd(dst.fp(), src); - } else { - movaps(kScratchDoubleReg, lhs.fp()); - maxpd(kScratchDoubleReg, rhs.fp()); - movaps(dst.fp(), rhs.fp()); - maxpd(dst.fp(), lhs.fp()); - } - // Find discrepancies. - Xorpd(dst.fp(), kScratchDoubleReg); - // Propagate NaNs, which may be non-canonical. - Orpd(kScratchDoubleReg, dst.fp()); - // Propagate sign discrepancy and (subtle) quiet NaNs. - Subpd(kScratchDoubleReg, dst.fp()); - // Canonicalize NaNs by clearing the payload. Sign is non-deterministic. - Cmppd(dst.fp(), kScratchDoubleReg, int8_t{3}); - Psrlq(dst.fp(), 13); - Andnpd(dst.fp(), kScratchDoubleReg); + F64x2Max(dst.fp(), lhs.fp(), rhs.fp(), kScratchDoubleReg); } void LiftoffAssembler::emit_f64x2_pmin(LiftoffRegister dst, LiftoffRegister lhs, @@ -4152,20 +4091,13 @@ void LiftoffAssembler::emit_i64x2_extract_lane(LiftoffRegister dst, void LiftoffAssembler::emit_f32x4_extract_lane(LiftoffRegister dst, LiftoffRegister lhs, uint8_t imm_lane_idx) { - if (CpuFeatures::IsSupported(AVX)) { - CpuFeatureScope scope(this, AVX); - vshufps(dst.fp(), lhs.fp(), lhs.fp(), imm_lane_idx); - } else { - if (dst.fp() != lhs.fp()) movaps(dst.fp(), lhs.fp()); - if (imm_lane_idx != 0) shufps(dst.fp(), dst.fp(), imm_lane_idx); - } + F32x4ExtractLane(dst.fp(), lhs.fp(), imm_lane_idx); } void LiftoffAssembler::emit_f64x2_extract_lane(LiftoffRegister dst, LiftoffRegister lhs, uint8_t imm_lane_idx) { - Pextrq(kScratchRegister, lhs.fp(), static_cast<int8_t>(imm_lane_idx)); - Movq(dst.fp(), kScratchRegister); + F64x2ExtractLane(dst.fp(), lhs.fp(), imm_lane_idx); } void LiftoffAssembler::emit_i8x16_replace_lane(LiftoffRegister dst, @@ -4241,22 +4173,7 @@ void LiftoffAssembler::emit_f64x2_replace_lane(LiftoffRegister dst, LiftoffRegister src1, LiftoffRegister src2, uint8_t imm_lane_idx) { - if (CpuFeatures::IsSupported(AVX)) { - CpuFeatureScope scope(this, AVX); - if (imm_lane_idx == 0) { - vpblendw(dst.fp(), src1.fp(), src2.fp(), 0b00001111); - } else { - vmovlhps(dst.fp(), src1.fp(), src2.fp()); - } - } else { - CpuFeatureScope scope(this, SSE4_1); - if (dst.fp() != src1.fp()) movaps(dst.fp(), src1.fp()); - if (imm_lane_idx == 0) { - pblendw(dst.fp(), src2.fp(), 0b00001111); - } else { - movlhps(dst.fp(), src2.fp()); - } - } + F64x2ReplaceLane(dst.fp(), src1.fp(), src2.fp(), imm_lane_idx); } void LiftoffAssembler::StackCheck(Label* ool_code, Register limit_address) { @@ -4428,6 +4345,12 @@ void LiftoffAssembler::DeallocateStackSlot(uint32_t size) { addq(rsp, Immediate(size)); } +void LiftoffAssembler::MaybeOSR() { + cmpq(liftoff::GetOSRTargetSlot(), Immediate(0)); + j(not_equal, static_cast<Address>(WasmCode::kWasmOnStackReplace), + RelocInfo::WASM_STUB_CALL); +} + void LiftoffStackSlots::Construct(int param_slots) { DCHECK_LT(0, slots_.size()); SortInPushOrder(); diff --git a/deps/v8/src/wasm/branch-hint-map.h b/deps/v8/src/wasm/branch-hint-map.h new file mode 100644 index 0000000000..242bbecbce --- /dev/null +++ b/deps/v8/src/wasm/branch-hint-map.h @@ -0,0 +1,46 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef V8_WASM_BRANCH_HINT_MAP_H_ +#define V8_WASM_BRANCH_HINT_MAP_H_ + +#include <unordered_map> + +#include "src/base/macros.h" + +namespace v8 { +namespace internal { + +namespace wasm { + +enum class WasmBranchHint : uint8_t { + kNoHint = 0, + kUnlikely = 1, + kLikely = 2, +}; + +class V8_EXPORT_PRIVATE BranchHintMap { + public: + void insert(uint32_t offset, WasmBranchHint hint) { + map_.emplace(offset, hint); + } + WasmBranchHint GetHintFor(uint32_t offset) const { + auto it = map_.find(offset); + if (it == map_.end()) { + return WasmBranchHint::kNoHint; + } + return it->second; + } + + private: + std::unordered_map<uint32_t, WasmBranchHint> map_; +}; + +using BranchHintInfo = std::unordered_map<uint32_t, BranchHintMap>; + +} // namespace wasm +} // namespace internal +} // namespace v8 + +#endif // V8_WASM_BRANCH_HINT_MAP_H_ diff --git a/deps/v8/src/wasm/c-api.cc b/deps/v8/src/wasm/c-api.cc index 3af5afaee3..72d2e07305 100644 --- a/deps/v8/src/wasm/c-api.cc +++ b/deps/v8/src/wasm/c-api.cc @@ -257,7 +257,6 @@ void Engine::operator delete(void* p) { ::operator delete(p); } auto Engine::make(own<Config>&& config) -> own<Engine> { i::FLAG_expose_gc = true; i::FLAG_experimental_wasm_reftypes = true; - i::FLAG_experimental_wasm_mv = true; auto engine = new (std::nothrow) EngineImpl; if (!engine) return own<Engine>(); engine->platform = v8::platform::NewDefaultPlatform(); @@ -456,8 +455,7 @@ struct FuncTypeImpl : ExternTypeImpl { ownvec<ValType> params; ownvec<ValType> results; - FuncTypeImpl(ownvec<ValType>& params, // NOLINT(runtime/references) - ownvec<ValType>& results) // NOLINT(runtime/references) + FuncTypeImpl(ownvec<ValType>& params, ownvec<ValType>& results) : ExternTypeImpl(EXTERN_FUNC), params(std::move(params)), results(std::move(results)) {} @@ -508,8 +506,7 @@ struct GlobalTypeImpl : ExternTypeImpl { own<ValType> content; Mutability mutability; - GlobalTypeImpl(own<ValType>& content, // NOLINT(runtime/references) - Mutability mutability) + GlobalTypeImpl(own<ValType>& content, Mutability mutability) : ExternTypeImpl(EXTERN_GLOBAL), content(std::move(content)), mutability(mutability) {} @@ -561,8 +558,7 @@ struct TableTypeImpl : ExternTypeImpl { own<ValType> element; Limits limits; - TableTypeImpl(own<ValType>& element, // NOLINT(runtime/references) - Limits limits) + TableTypeImpl(own<ValType>& element, Limits limits) : ExternTypeImpl(EXTERN_TABLE), element(std::move(element)), limits(limits) {} @@ -653,9 +649,7 @@ struct ImportTypeImpl { Name name; own<ExternType> type; - ImportTypeImpl(Name& module, // NOLINT(runtime/references) - Name& name, // NOLINT(runtime/references) - own<ExternType>& type) // NOLINT(runtime/references) + ImportTypeImpl(Name& module, Name& name, own<ExternType>& type) : module(std::move(module)), name(std::move(name)), type(std::move(type)) {} @@ -696,8 +690,7 @@ struct ExportTypeImpl { Name name; own<ExternType> type; - ExportTypeImpl(Name& name, // NOLINT(runtime/references) - own<ExternType>& type) // NOLINT(runtime/references) + ExportTypeImpl(Name& name, own<ExternType>& type) : name(std::move(name)), type(std::move(type)) {} }; @@ -1357,26 +1350,6 @@ i::Handle<i::Object> WasmRefToV8(i::Isolate* isolate, const Ref* ref) { return impl(ref)->v8_object(); } -i::Handle<i::Object> CallTargetForCaching(i::Isolate* isolate, - i::Address real_call_target) { - if (i::kTaggedSize == i::kInt32Size) { - return isolate->factory()->NewForeign(real_call_target); - } else { - // 64-bit uncompressed platform. - return i::handle(i::Smi((real_call_target << i::kSmiTagSize) | i::kSmiTag), - isolate); - } -} - -i::Address CallTargetFromCache(i::Object cached_call_target) { - if (i::kTaggedSize == i::kInt32Size) { - return i::Foreign::cast(cached_call_target).foreign_address(); - } else { - // 64-bit uncompressed platform. - return cached_call_target.ptr() >> i::kSmiTagSize; - } -} - void PrepareFunctionData(i::Isolate* isolate, i::Handle<i::WasmExportedFunctionData> function_data, const i::wasm::FunctionSig* sig, @@ -1390,12 +1363,6 @@ void PrepareFunctionData(i::Isolate* isolate, // Compute packed args size. function_data->set_packed_args_size( i::wasm::CWasmArgumentsPacker::TotalSize(sig)); - // Get call target (function table offset), and wrap it as a cacheable object - // (pseudo-Smi or Foreign, depending on platform). - i::Handle<i::Object> call_target = CallTargetForCaching( - isolate, - function_data->instance().GetCallTarget(function_data->function_index())); - function_data->set_wasm_call_target(*call_target); } void PushArgs(const i::wasm::FunctionSig* sig, const Val args[], @@ -1532,8 +1499,7 @@ auto Func::call(const Val args[], Val results[]) const -> own<Trap> { PrepareFunctionData(isolate, function_data, sig, instance->module()); i::Handle<i::Code> wrapper_code = i::Handle<i::Code>( i::Code::cast(function_data->c_wrapper_code()), isolate); - i::Address call_target = - CallTargetFromCache(function_data->wasm_call_target()); + i::Address call_target = function_data->foreign_address(); i::wasm::CWasmArgumentsPacker packer(function_data->packed_args_size()); PushArgs(sig, args, &packer, store); diff --git a/deps/v8/src/wasm/compilation-environment.h b/deps/v8/src/wasm/compilation-environment.h index 987180c83f..a10190f70b 100644 --- a/deps/v8/src/wasm/compilation-environment.h +++ b/deps/v8/src/wasm/compilation-environment.h @@ -38,8 +38,6 @@ enum RuntimeExceptionSupport : bool { enum UseTrapHandler : bool { kUseTrapHandler = true, kNoTrapHandler = false }; -enum LowerSimd : bool { kLowerSimd = true, kNoLowerSimd = false }; - // The {CompilationEnv} encapsulates the module data that is used during // compilation. CompilationEnvs are shareable across multiple compilations. struct CompilationEnv { @@ -66,8 +64,6 @@ struct CompilationEnv { // Features enabled for this compilation. const WasmFeatures enabled_features; - const LowerSimd lower_simd; - // We assume that memories of size >= half of the virtual address space // cannot be allocated (see https://crbug.com/1201340). static constexpr uint32_t kMaxMemoryPagesAtRuntime = std::min( @@ -77,8 +73,7 @@ struct CompilationEnv { constexpr CompilationEnv(const WasmModule* module, UseTrapHandler use_trap_handler, RuntimeExceptionSupport runtime_exception_support, - const WasmFeatures& enabled_features, - LowerSimd lower_simd = kNoLowerSimd) + const WasmFeatures& enabled_features) : module(module), use_trap_handler(use_trap_handler), runtime_exception_support(runtime_exception_support), @@ -92,8 +87,7 @@ struct CompilationEnv { module && module->has_maximum_pages ? module->maximum_pages : max_mem_pages()) * uint64_t{kWasmPageSize})), - enabled_features(enabled_features), - lower_simd(lower_simd) {} + enabled_features(enabled_features) {} }; // The wire bytes are either owned by the StreamingDecoder, or (after streaming) @@ -127,6 +121,8 @@ class V8_EXPORT_PRIVATE CompilationState { void CancelCompilation(); + void CancelInitialCompilation(); + void SetError(); void SetWireBytesStorage(std::shared_ptr<WireBytesStorage>); diff --git a/deps/v8/src/wasm/function-body-decoder-impl.h b/deps/v8/src/wasm/function-body-decoder-impl.h index d37f718681..7927e58d84 100644 --- a/deps/v8/src/wasm/function-body-decoder-impl.h +++ b/deps/v8/src/wasm/function-body-decoder-impl.h @@ -539,13 +539,6 @@ struct BlockTypeImmediate { type = value_type_reader::read_value_type<validate>(decoder, pc, &length, module, enabled); } else { - if (!VALIDATE(enabled.has_mv())) { - DecodeError<validate>(decoder, pc, - "invalid block type %" PRId64 - ", enable with --experimental-wasm-mv", - block_type); - return; - } type = kWasmBottom; sig_index = static_cast<uint32_t>(block_type); } @@ -582,18 +575,6 @@ struct BranchDepthImmediate { }; template <Decoder::ValidateFlag validate> -struct BranchOnExceptionImmediate { - BranchDepthImmediate<validate> depth; - ExceptionIndexImmediate<validate> index; - uint32_t length = 0; - inline BranchOnExceptionImmediate(Decoder* decoder, const byte* pc) - : depth(BranchDepthImmediate<validate>(decoder, pc)), - index(ExceptionIndexImmediate<validate>(decoder, pc + depth.length)) { - length = depth.length + index.length; - } -}; - -template <Decoder::ValidateFlag validate> struct FunctionIndexImmediate { uint32_t index = 0; uint32_t length = 1; @@ -965,8 +946,10 @@ enum Reachability : uint8_t { template <typename Value, Decoder::ValidateFlag validate> struct ControlBase : public PcForErrors<validate> { ControlKind kind = kControlBlock; - uint32_t locals_count = 0; - uint32_t stack_depth = 0; // stack height at the beginning of the construct. + uint32_t locals_count = 0; // Additional locals introduced in this 'let'. + uint32_t stack_depth = 0; // Stack height at the beginning of the construct. + int32_t previous_catch = -1; // Depth of the innermost catch containing this + // 'try'. Reachability reachability = kReachable; // Values merged into the start or end of this control construct. @@ -1037,7 +1020,6 @@ struct ControlBase : public PcForErrors<validate> { F(If, const Value& cond, Control* if_block) \ F(FallThruTo, Control* c) \ F(PopControl, Control* block) \ - F(EndControl, Control* block) \ /* Instructions: */ \ F(UnOp, WasmOpcode opcode, const Value& value, Value* result) \ F(BinOp, WasmOpcode opcode, const Value& lhs, const Value& rhs, \ @@ -1099,6 +1081,7 @@ struct ControlBase : public PcForErrors<validate> { F(ReturnCallIndirect, const Value& index, \ const CallIndirectImmediate<validate>& imm, const Value args[]) \ F(BrOnNull, const Value& ref_object, uint32_t depth) \ + F(BrOnNonNull, const Value& ref_object, uint32_t depth) \ F(SimdOp, WasmOpcode opcode, Vector<Value> args, Value* result) \ F(SimdLaneOp, WasmOpcode opcode, const SimdLaneImmediate<validate>& imm, \ const Vector<Value> inputs, Value* result) \ @@ -1160,6 +1143,8 @@ struct ControlBase : public PcForErrors<validate> { F(AssertNull, const Value& obj, Value* result) \ F(BrOnCast, const Value& obj, const Value& rtt, Value* result_on_branch, \ uint32_t depth) \ + F(BrOnCastFail, const Value& obj, const Value& rtt, \ + Value* result_on_fallthrough, uint32_t depth) \ F(RefIsData, const Value& object, Value* result) \ F(RefAsData, const Value& object, Value* result) \ F(BrOnData, const Value& object, Value* value_on_branch, uint32_t br_depth) \ @@ -1184,9 +1169,7 @@ class WasmDecoder : public Decoder { module_(module), enabled_(enabled), detected_(detected), - sig_(sig) { - if (sig_ && sig_->return_count() > 1) detected_->Add(kFeature_mv); - } + sig_(sig) {} Zone* zone() const { return local_types_.get_allocator().zone(); } @@ -1433,9 +1416,6 @@ class WasmDecoder : public Decoder { inline bool Complete(CallFunctionImmediate<validate>& imm) { if (!VALIDATE(imm.index < module_->functions.size())) return false; imm.sig = module_->functions[imm.index].sig; - if (imm.sig->return_count() > 1) { - this->detected_->Add(kFeature_mv); - } return true; } @@ -1450,13 +1430,11 @@ class WasmDecoder : public Decoder { inline bool Complete(CallIndirectImmediate<validate>& imm) { if (!VALIDATE(module_->has_signature(imm.sig_index))) return false; imm.sig = module_->signature(imm.sig_index); - if (imm.sig->return_count() > 1) { - this->detected_->Add(kFeature_mv); - } return true; } inline bool Validate(const byte* pc, CallIndirectImmediate<validate>& imm) { + // Validate immediate table index. if (!VALIDATE(imm.table_index < module_->tables.size())) { DecodeError(pc, "call_indirect: table index immediate out of bounds"); return false; @@ -1468,10 +1446,13 @@ class WasmDecoder : public Decoder { imm.table_index); return false; } + + // Validate immediate signature index. if (!Complete(imm)) { DecodeError(pc, "invalid signature index: #%u", imm.sig_index); return false; } + // Check that the dynamic signature for this call is a subtype of the static // type of the table the function is defined in. ValueType immediate_type = ValueType::Ref(imm.sig_index, kNonNullable); @@ -1480,6 +1461,7 @@ class WasmDecoder : public Decoder { "call_indirect: Immediate signature #%u is not a subtype of " "immediate table #%u", imm.sig_index, imm.table_index); + return false; } return true; } @@ -1503,13 +1485,6 @@ class WasmDecoder : public Decoder { return checkAvailable(imm.table_count); } - inline bool Validate(const byte* pc, - BranchOnExceptionImmediate<validate>& imm, - size_t control_size) { - return Validate(pc, imm.depth, control_size) && - Validate(pc + imm.depth.length, imm.index); - } - inline bool Validate(const byte* pc, WasmOpcode opcode, SimdLaneImmediate<validate>& imm) { uint8_t num_lanes = 0; @@ -1573,9 +1548,6 @@ class WasmDecoder : public Decoder { if (imm.type != kWasmBottom) return true; if (!VALIDATE(module_->has_signature(imm.sig_index))) return false; imm.sig = module_->signature(imm.sig_index); - if (imm.sig->return_count() > 1) { - this->detected_->Add(kFeature_mv); - } return true; } @@ -1709,6 +1681,7 @@ class WasmDecoder : public Decoder { case kExprBr: case kExprBrIf: case kExprBrOnNull: + case kExprBrOnNonNull: case kExprDelegate: { BranchDepthImmediate<validate> imm(decoder, pc + 1); return 1 + imm.length; @@ -1957,6 +1930,7 @@ class WasmDecoder : public Decoder { return length + imm.length; } case kExprBrOnCast: + case kExprBrOnCastFail: case kExprBrOnData: case kExprBrOnFunc: case kExprBrOnI31: { @@ -2043,6 +2017,7 @@ class WasmDecoder : public Decoder { case kExprBrIf: case kExprBrTable: case kExprIf: + case kExprBrOnNonNull: return {1, 0}; case kExprLocalGet: case kExprGlobalGet: @@ -2137,6 +2112,7 @@ class WasmDecoder : public Decoder { case kExprRefTest: case kExprRefCast: case kExprBrOnCast: + case kExprBrOnCastFail: return {2, 1}; case kExprArraySet: return {3, 0}; @@ -2183,12 +2159,22 @@ MemoryAccessImmediate<validate>::MemoryAccessImmediate( : MemoryAccessImmediate(decoder, pc, max_alignment, decoder->module_->is_memory64) {} +// Only call this in contexts where {current_code_reachable_and_ok_} is known to +// hold. +#define CALL_INTERFACE(name, ...) \ + do { \ + DCHECK(!control_.empty()); \ + DCHECK(current_code_reachable_and_ok_); \ + DCHECK_EQ(current_code_reachable_and_ok_, \ + this->ok() && control_.back().reachable()); \ + interface_.name(this, ##__VA_ARGS__); \ + } while (false) #define CALL_INTERFACE_IF_OK_AND_REACHABLE(name, ...) \ do { \ DCHECK(!control_.empty()); \ DCHECK_EQ(current_code_reachable_and_ok_, \ this->ok() && control_.back().reachable()); \ - if (current_code_reachable_and_ok_) { \ + if (V8_LIKELY(current_code_reachable_and_ok_)) { \ interface_.name(this, ##__VA_ARGS__); \ } \ } while (false) @@ -2289,33 +2275,39 @@ class WasmFullDecoder : public WasmDecoder<validate> { return WasmOpcodes::OpcodeName(opcode); } - inline WasmCodePosition position() { + WasmCodePosition position() const { int offset = static_cast<int>(this->pc_ - this->start_); DCHECK_EQ(this->pc_ - this->start_, offset); // overflows cannot happen return offset; } - inline uint32_t control_depth() const { + uint32_t control_depth() const { return static_cast<uint32_t>(control_.size()); } - inline Control* control_at(uint32_t depth) { + Control* control_at(uint32_t depth) { DCHECK_GT(control_.size(), depth); return &control_.back() - depth; } - inline uint32_t stack_size() const { + uint32_t stack_size() const { DCHECK_GE(stack_end_, stack_); DCHECK_GE(kMaxUInt32, stack_end_ - stack_); return static_cast<uint32_t>(stack_end_ - stack_); } - inline Value* stack_value(uint32_t depth) { + Value* stack_value(uint32_t depth) const { DCHECK_LT(0, depth); DCHECK_GE(stack_size(), depth); return stack_end_ - depth; } + int32_t current_catch() const { return current_catch_; } + + uint32_t control_depth_of_current_catch() const { + return control_depth() - 1 - current_catch(); + } + void SetSucceedingCodeDynamicallyUnreachable() { Control* current = &control_.back(); if (current->reachable()) { @@ -2324,7 +2316,12 @@ class WasmFullDecoder : public WasmDecoder<validate> { } } + inline uint32_t pc_relative_offset() const { + return this->pc_offset() - first_instruction_offset; + } + private: + uint32_t first_instruction_offset = 0; Interface interface_; // The value stack, stored as individual pointers for maximum performance. @@ -2340,6 +2337,9 @@ class WasmFullDecoder : public WasmDecoder<validate> { // a cache for {ok() && control_.back().reachable()}). bool current_code_reachable_and_ok_ = true; + // Depth of the current try block. + int32_t current_catch_ = -1; + static Value UnreachableValue(const uint8_t* pc) { return Value{pc, kWasmBottom}; } @@ -2519,6 +2519,8 @@ class WasmFullDecoder : public WasmDecoder<validate> { ArgVector args = PeekArgs(imm.sig); Control* try_block = PushControl(kControlTry, 0, args.length()); SetBlockType(try_block, imm, args.begin()); + try_block->previous_catch = current_catch_; + current_catch_ = static_cast<int>(control_depth() - 1); CALL_INTERFACE_IF_OK_AND_REACHABLE(Try, try_block); DropArgs(imm.sig); PushMergeValues(try_block, &try_block->start_merge); @@ -2543,7 +2545,7 @@ class WasmFullDecoder : public WasmDecoder<validate> { this->DecodeError("catch after unwind for try"); return 0; } - FallThruTo(c); + FallThrough(); c->kind = kControlTryCatch; // TODO(jkummerow): Consider moving the stack manipulation after the // INTERFACE call for consistency. @@ -2556,6 +2558,7 @@ class WasmFullDecoder : public WasmDecoder<validate> { Push(CreateValue(sig->GetParam(i))); } Vector<Value> values(stack_ + c->stack_depth, sig->parameter_count()); + current_catch_ = c->previous_catch; // Pop try scope. CALL_INTERFACE_IF_OK_AND_PARENT_REACHABLE(CatchException, imm, c, values); current_code_reachable_and_ok_ = this->ok() && c->reachable(); return 1 + imm.length; @@ -2584,11 +2587,11 @@ class WasmFullDecoder : public WasmDecoder<validate> { "cannot delegate inside the catch handler of the target"); return 0; } - FallThruTo(c); + FallThrough(); CALL_INTERFACE_IF_OK_AND_PARENT_REACHABLE(Delegate, imm.depth + 1, c); - current_code_reachable_and_ok_ = this->ok() && control_.back().reachable(); + current_catch_ = c->previous_catch; EndControl(); - PopControl(c); + PopControl(); return 1 + imm.length; } @@ -2608,9 +2611,10 @@ class WasmFullDecoder : public WasmDecoder<validate> { this->error("cannot have catch-all after unwind"); return 0; } - FallThruTo(c); + FallThrough(); c->kind = kControlTryCatchAll; c->reachability = control_at(1)->innerReachability(); + current_catch_ = c->previous_catch; // Pop try scope. CALL_INTERFACE_IF_OK_AND_PARENT_REACHABLE(CatchAll, c); stack_end_ = stack_ + c->stack_depth; current_code_reachable_and_ok_ = this->ok() && c->reachable(); @@ -2630,9 +2634,10 @@ class WasmFullDecoder : public WasmDecoder<validate> { this->error("catch, catch-all or unwind already present for try"); return 0; } - FallThruTo(c); + FallThrough(); c->kind = kControlTryUnwind; c->reachability = control_at(1)->innerReachability(); + current_catch_ = c->previous_catch; // Pop try scope. CALL_INTERFACE_IF_OK_AND_PARENT_REACHABLE(CatchAll, c); stack_end_ = stack_ + c->stack_depth; current_code_reachable_and_ok_ = this->ok() && c->reachable(); @@ -2645,33 +2650,69 @@ class WasmFullDecoder : public WasmDecoder<validate> { if (!this->Validate(this->pc_ + 1, imm, control_.size())) return 0; Value ref_object = Peek(0, 0); Control* c = control_at(imm.depth); - TypeCheckBranchResult check_result = TypeCheckBranch(c, true, 1); + if (!VALIDATE(TypeCheckBranch<true>(c, 1))) return 0; switch (ref_object.type.kind()) { case kBottom: // We are in a polymorphic stack. Leave the stack as it is. - DCHECK(check_result != kReachableBranch); + DCHECK(!current_code_reachable_and_ok_); break; case kRef: // For a non-nullable value, we won't take the branch, and can leave // the stack as it is. break; case kOptRef: { - if (V8_LIKELY(check_result == kReachableBranch)) { - CALL_INTERFACE_IF_OK_AND_REACHABLE(BrOnNull, ref_object, imm.depth); Value result = CreateValue( ValueType::Ref(ref_object.type.heap_type(), kNonNullable)); // The result of br_on_null has the same value as the argument (but a // non-nullable type). - CALL_INTERFACE_IF_OK_AND_REACHABLE(Forward, ref_object, &result); - c->br_merge()->reached = true; + if (V8_LIKELY(current_code_reachable_and_ok_)) { + CALL_INTERFACE(BrOnNull, ref_object, imm.depth); + CALL_INTERFACE(Forward, ref_object, &result); + c->br_merge()->reached = true; + } + // In unreachable code, we still have to push a value of the correct + // type onto the stack. Drop(ref_object); Push(result); - } else { - // Even in non-reachable code, we need to push a value of the correct - // type to the stack. - Drop(ref_object); - Push(CreateValue( - ValueType::Ref(ref_object.type.heap_type(), kNonNullable))); + break; + } + default: + PopTypeError(0, ref_object, "object reference"); + return 0; + } + return 1 + imm.length; + } + + DECODE(BrOnNonNull) { + CHECK_PROTOTYPE_OPCODE(gc); + BranchDepthImmediate<validate> imm(this, this->pc_ + 1); + if (!this->Validate(this->pc_ + 1, imm, control_.size())) return 0; + Value ref_object = Peek(0, 0, kWasmAnyRef); + Drop(ref_object); + // Typechecking the branch and creating the branch merges requires the + // non-null value on the stack, so we push it temporarily. + Value result = CreateValue(ref_object.type.AsNonNull()); + Push(result); + Control* c = control_at(imm.depth); + if (!VALIDATE(TypeCheckBranch<true>(c, 0))) return 0; + switch (ref_object.type.kind()) { + case kBottom: + // We are in unreachable code. Do nothing. + DCHECK(!current_code_reachable_and_ok_); + break; + case kRef: + // For a non-nullable value, we always take the branch. + if (V8_LIKELY(current_code_reachable_and_ok_)) { + CALL_INTERFACE(Forward, ref_object, stack_value(1)); + CALL_INTERFACE(BrOrRet, imm.depth, 0); + c->br_merge()->reached = true; + } + break; + case kOptRef: { + if (V8_LIKELY(current_code_reachable_and_ok_)) { + CALL_INTERFACE(Forward, ref_object, stack_value(1)); + CALL_INTERFACE(BrOnNonNull, ref_object, imm.depth); + c->br_merge()->reached = true; } break; } @@ -2679,6 +2720,8 @@ class WasmFullDecoder : public WasmDecoder<validate> { PopTypeError(0, ref_object, "object reference"); return 0; } + // If we stay in the branch, {ref_object} is null. Drop it from the stack. + Drop(result); return 1 + imm.length; } @@ -2751,7 +2794,7 @@ class WasmFullDecoder : public WasmDecoder<validate> { this->DecodeError("else already present for if"); return 0; } - if (!TypeCheckFallThru()) return 0; + if (!VALIDATE(TypeCheckFallThru())) return 0; c->kind = kControlIfElse; CALL_INTERFACE_IF_OK_AND_PARENT_REACHABLE(Else, c); if (c->reachable()) c->end_merge.reached = true; @@ -2764,27 +2807,24 @@ class WasmFullDecoder : public WasmDecoder<validate> { DECODE(End) { DCHECK(!control_.empty()); Control* c = &control_.back(); - if (!VALIDATE(!c->is_incomplete_try())) { - this->DecodeError("missing catch or catch-all in try"); - return 0; - } - if (c->is_onearmed_if()) { - if (!VALIDATE(c->end_merge.arity == c->start_merge.arity)) { - this->DecodeError( - c->pc(), "start-arity and end-arity of one-armed if must match"); - return 0; - } - if (!TypeCheckOneArmedIf(c)) return 0; - } if (c->is_try_catch()) { // Emulate catch-all + re-throw. - FallThruTo(c); + FallThrough(); c->reachability = control_at(1)->innerReachability(); CALL_INTERFACE_IF_OK_AND_PARENT_REACHABLE(CatchAll, c); current_code_reachable_and_ok_ = this->ok() && control_.back().reachable(); CALL_INTERFACE_IF_OK_AND_REACHABLE(Rethrow, c); EndControl(); + PopControl(); + return 1; + } + if (!VALIDATE(!c->is_incomplete_try())) { + this->DecodeError("missing catch or catch-all in try"); + return 0; + } + if (c->is_onearmed_if()) { + if (!VALIDATE(TypeCheckOneArmedIf(c))) return 0; } if (c->is_try_unwind()) { // Unwind implicitly rethrows at the end. @@ -2798,7 +2838,6 @@ class WasmFullDecoder : public WasmDecoder<validate> { this->local_types_.begin() + c->locals_count); this->num_locals_ -= c->locals_count; } - if (!TypeCheckFallThru()) return 0; if (control_.size() == 1) { // If at the last (implicit) control, check we are at end. @@ -2809,11 +2848,13 @@ class WasmFullDecoder : public WasmDecoder<validate> { // The result of the block is the return value. trace_msg->Append("\n" TRACE_INST_FORMAT, startrel(this->pc_), "(implicit) return"); - DoReturn(); + DoReturn<kStrictCounting, kFallthroughMerge>(); control_.clear(); return 1; } - PopControl(c); + + if (!VALIDATE(TypeCheckFallThru())) return 0; + PopControl(); return 1; } @@ -2853,9 +2894,9 @@ class WasmFullDecoder : public WasmDecoder<validate> { BranchDepthImmediate<validate> imm(this, this->pc_ + 1); if (!this->Validate(this->pc_ + 1, imm, control_.size())) return 0; Control* c = control_at(imm.depth); - TypeCheckBranchResult check_result = TypeCheckBranch(c, false, 0); - if (V8_LIKELY(check_result == kReachableBranch)) { - CALL_INTERFACE_IF_OK_AND_REACHABLE(BrOrRet, imm.depth, 0); + if (!VALIDATE(TypeCheckBranch<false>(c, 0))) return 0; + if (V8_LIKELY(current_code_reachable_and_ok_)) { + CALL_INTERFACE(BrOrRet, imm.depth, 0); c->br_merge()->reached = true; } EndControl(); @@ -2867,9 +2908,9 @@ class WasmFullDecoder : public WasmDecoder<validate> { if (!this->Validate(this->pc_ + 1, imm, control_.size())) return 0; Value cond = Peek(0, 0, kWasmI32); Control* c = control_at(imm.depth); - TypeCheckBranchResult check_result = TypeCheckBranch(c, true, 1); - if (V8_LIKELY(check_result == kReachableBranch)) { - CALL_INTERFACE_IF_OK_AND_REACHABLE(BrIf, cond, imm.depth); + if (!VALIDATE(TypeCheckBranch<true>(c, 1))) return 0; + if (V8_LIKELY(current_code_reachable_and_ok_)) { + CALL_INTERFACE(BrIf, cond, imm.depth); c->br_merge()->reached = true; } Drop(cond); @@ -2887,40 +2928,38 @@ class WasmFullDecoder : public WasmDecoder<validate> { // all branch targets as reachable after the {CALL_INTERFACE} call. std::vector<bool> br_targets(control_.size()); - // The result types of the br_table instruction. We have to check the - // stack against these types. Only needed during validation. - std::vector<ValueType> result_types; + uint32_t arity = 0; while (iterator.has_next()) { const uint32_t index = iterator.cur_index(); const byte* pos = iterator.pc(); - uint32_t target = iterator.next(); - if (!VALIDATE(ValidateBrTableTarget(target, pos, index))) return 0; + const uint32_t target = iterator.next(); + if (!VALIDATE(target < control_depth())) { + this->DecodeError(pos, "invalid branch depth: %u", target); + return 0; + } // Avoid redundant branch target checks. if (br_targets[target]) continue; br_targets[target] = true; if (validate) { if (index == 0) { - // With the first branch target, initialize the result types. - result_types = InitializeBrTableResultTypes(target); - } else if (!UpdateBrTableResultTypes(&result_types, target, pos, - index)) { + arity = control_at(target)->br_merge()->arity; + } else if (!VALIDATE(control_at(target)->br_merge()->arity == arity)) { + this->DecodeError( + pos, "br_table: label arity inconsistent with previous arity %d", + arity); return 0; } + if (!VALIDATE(TypeCheckBranch<false>(control_at(target), 1))) return 0; } } - if (!VALIDATE(TypeCheckBrTable(result_types, 1))) return 0; - - DCHECK(this->ok()); - - if (current_code_reachable_and_ok_) { - CALL_INTERFACE_IF_OK_AND_REACHABLE(BrTable, imm, key); + if (V8_LIKELY(current_code_reachable_and_ok_)) { + CALL_INTERFACE(BrTable, imm, key); - for (int i = 0, e = control_depth(); i < e; ++i) { - if (!br_targets[i]) continue; - control_at(i)->br_merge()->reached = true; + for (uint32_t i = 0; i < control_depth(); ++i) { + control_at(i)->br_merge()->reached |= br_targets[i]; } } Drop(key); @@ -2929,22 +2968,7 @@ class WasmFullDecoder : public WasmDecoder<validate> { } DECODE(Return) { - if (V8_LIKELY(current_code_reachable_and_ok_)) { - if (!VALIDATE(TypeCheckReturn())) return 0; - DoReturn(); - } else { - // We inspect all return values from the stack to check their type. - // Since we deal with unreachable code, we do not have to keep the - // values. - int num_returns = static_cast<int>(this->sig_->return_count()); - for (int i = num_returns - 1, depth = 0; i >= 0; --i, ++depth) { - Peek(depth, i, this->sig_->GetReturn(i)); - } - Drop(num_returns); - } - - EndControl(); - return 1; + return DoReturn<kNonStrictCounting, kReturnMerge>() ? 1 : 0; } DECODE(Unreachable) { @@ -3409,6 +3433,7 @@ class WasmFullDecoder : public WasmDecoder<validate> { DECODE_IMPL(CatchAll); DECODE_IMPL(Unwind); DECODE_IMPL(BrOnNull); + DECODE_IMPL(BrOnNonNull); DECODE_IMPL(Let); DECODE_IMPL(Loop); DECODE_IMPL(If); @@ -3490,6 +3515,7 @@ class WasmFullDecoder : public WasmDecoder<validate> { CALL_INTERFACE_IF_OK_AND_REACHABLE(StartFunctionBody, c); } + first_instruction_offset = this->pc_offset(); // Decode the function body. while (this->pc_ < this->end_) { // Most operations only grow the stack by at least one element (unary and @@ -3526,7 +3552,6 @@ class WasmFullDecoder : public WasmDecoder<validate> { Control* current = &control_.back(); DCHECK_LE(stack_ + current->stack_depth, stack_end_); stack_end_ = stack_ + current->stack_depth; - CALL_INTERFACE_IF_OK_AND_REACHABLE(EndControl, current); current->reachability = kUnreachable; current_code_reachable_and_ok_ = false; } @@ -3642,11 +3667,12 @@ class WasmFullDecoder : public WasmDecoder<validate> { return &control_.back(); } - void PopControl(Control* c) { + void PopControl() { // This cannot be the outermost control block. DCHECK_LT(1, control_.size()); + Control* c = &control_.back(); + DCHECK_LE(stack_ + c->stack_depth, stack_end_); - DCHECK_EQ(c, &control_.back()); CALL_INTERFACE_IF_OK_AND_PARENT_REACHABLE(PopControl, c); // A loop just leaves the values on the stack. @@ -3658,7 +3684,7 @@ class WasmFullDecoder : public WasmDecoder<validate> { // If the parent block was reachable before, but the popped control does not // return to here, this block becomes "spec only reachable". if (!parent_reached) SetSucceedingCodeDynamicallyUnreachable(); - current_code_reachable_and_ok_ = control_.back().reachable(); + current_code_reachable_and_ok_ = this->ok() && control_.back().reachable(); } int DecodeLoadMem(LoadType type, int prefix_len = 1) { @@ -3739,92 +3765,6 @@ class WasmFullDecoder : public WasmDecoder<validate> { return prefix_len + imm.length; } - bool ValidateBrTableTarget(uint32_t target, const byte* pos, int index) { - if (!VALIDATE(target < this->control_.size())) { - this->DecodeError(pos, "improper branch in br_table target %u (depth %u)", - index, target); - return false; - } - return true; - } - - std::vector<ValueType> InitializeBrTableResultTypes(uint32_t target) { - Merge<Value>* merge = control_at(target)->br_merge(); - int br_arity = merge->arity; - std::vector<ValueType> result(br_arity); - for (int i = 0; i < br_arity; ++i) { - result[i] = (*merge)[i].type; - } - return result; - } - - bool UpdateBrTableResultTypes(std::vector<ValueType>* result_types, - uint32_t target, const byte* pos, int index) { - Merge<Value>* merge = control_at(target)->br_merge(); - int br_arity = merge->arity; - // First we check if the arities match. - if (!VALIDATE(br_arity == static_cast<int>(result_types->size()))) { - this->DecodeError(pos, - "inconsistent arity in br_table target %u (previous " - "was %zu, this one is %u)", - index, result_types->size(), br_arity); - return false; - } - - for (int i = 0; i < br_arity; ++i) { - if (this->enabled_.has_reftypes()) { - // The expected type is the biggest common sub type of all targets. - (*result_types)[i] = - CommonSubtype((*result_types)[i], (*merge)[i].type, this->module_); - } else { - // All target must have the same signature. - if (!VALIDATE((*result_types)[i] == (*merge)[i].type)) { - this->DecodeError(pos, - "inconsistent type in br_table target %u (previous " - "was %s, this one is %s)", - index, (*result_types)[i].name().c_str(), - (*merge)[i].type.name().c_str()); - return false; - } - } - } - return true; - } - - bool TypeCheckBrTable(const std::vector<ValueType>& result_types, - uint32_t drop_values) { - int br_arity = static_cast<int>(result_types.size()); - if (V8_LIKELY(!control_.back().unreachable())) { - int available = - static_cast<int>(stack_size()) - control_.back().stack_depth; - available -= std::min(available, static_cast<int>(drop_values)); - // There have to be enough values on the stack. - if (!VALIDATE(available >= br_arity)) { - this->DecodeError( - "expected %u elements on the stack for branch to @%d, found %u", - br_arity, startrel(control_.back().pc()), available); - return false; - } - Value* stack_values = stack_end_ - br_arity - drop_values; - // Type-check the topmost br_arity values on the stack. - for (int i = 0; i < br_arity; ++i) { - Value& val = stack_values[i]; - if (!VALIDATE(IsSubtypeOf(val.type, result_types[i], this->module_))) { - this->DecodeError("type error in merge[%u] (expected %s, got %s)", i, - result_types[i].name().c_str(), - val.type.name().c_str()); - return false; - } - } - } else { // !control_.back().reachable() - // Type-check the values on the stack. - for (int i = 0; i < br_arity; ++i) { - Peek(i + drop_values, i + 1, result_types[i]); - } - } - return this->ok(); - } - uint32_t SimdConstOp(uint32_t opcode_length) { Simd128Immediate<validate> imm(this, this->pc_ + opcode_length); Value result = CreateValue(kWasmS128); @@ -4377,7 +4317,6 @@ class WasmFullDecoder : public WasmDecoder<validate> { CALL_INTERFACE_IF_OK_AND_REACHABLE(Drop); CALL_INTERFACE_IF_OK_AND_REACHABLE(AssertNull, obj, &value); } else { - // TODO(manoskouk): Change the trap label. CALL_INTERFACE_IF_OK_AND_REACHABLE(Trap, TrapReason::kTrapIllegalCast); EndControl(); @@ -4420,33 +4359,92 @@ class WasmFullDecoder : public WasmDecoder<validate> { // significantly more convenient to pass around the values that // will be on the stack when the branch is taken. // TODO(jkummerow): Reconsider this choice. - Drop(2); // {obj} and {ret}. + Drop(2); // {obj} and {rtt}. Value result_on_branch = CreateValue( rtt.type.is_bottom() ? kWasmBottom : ValueType::Ref(rtt.type.ref_index(), kNonNullable)); Push(result_on_branch); - TypeCheckBranchResult check_result = TypeCheckBranch(c, true, 0); - if (V8_LIKELY(check_result == kReachableBranch)) { - // This logic ensures that code generation can assume that functions - // can only be cast to function types, and data objects to data types. - if (V8_LIKELY(ObjectRelatedWithRtt(obj, rtt))) { - // The {value_on_branch} parameter we pass to the interface must - // be pointer-identical to the object on the stack, so we can't - // reuse {result_on_branch} which was passed-by-value to {Push}. - Value* value_on_branch = stack_value(1); - CALL_INTERFACE_IF_OK_AND_REACHABLE( - BrOnCast, obj, rtt, value_on_branch, branch_depth.depth); + if (!VALIDATE(TypeCheckBranch<true>(c, 0))) return 0; + // This logic ensures that code generation can assume that functions + // can only be cast to function types, and data objects to data types. + if (V8_LIKELY(ObjectRelatedWithRtt(obj, rtt))) { + // The {value_on_branch} parameter we pass to the interface must + // be pointer-identical to the object on the stack, so we can't + // reuse {result_on_branch} which was passed-by-value to {Push}. + Value* value_on_branch = stack_value(1); + if (V8_LIKELY(current_code_reachable_and_ok_)) { + CALL_INTERFACE(BrOnCast, obj, rtt, value_on_branch, + branch_depth.depth); c->br_merge()->reached = true; } - // Otherwise the types are unrelated. Do not branch. - } else if (check_result == kInvalidStack) { - return 0; } + // Otherwise the types are unrelated. Do not branch. Drop(result_on_branch); Push(obj); // Restore stack state on fallthrough. return opcode_length + branch_depth.length; } + case kExprBrOnCastFail: { + BranchDepthImmediate<validate> branch_depth(this, + this->pc_ + opcode_length); + if (!this->Validate(this->pc_ + opcode_length, branch_depth, + control_.size())) { + return 0; + } + Value rtt = Peek(0, 1); + if (!VALIDATE(rtt.type.is_rtt() || rtt.type.is_bottom())) { + PopTypeError(1, rtt, "rtt"); + return 0; + } + Value obj = Peek(1, 0); + if (!VALIDATE(IsSubtypeOf(obj.type, kWasmFuncRef, this->module_) || + IsSubtypeOf(obj.type, + ValueType::Ref(HeapType::kData, kNullable), + this->module_) || + obj.type.is_bottom())) { + PopTypeError(0, obj, "subtype of (ref null func) or (ref null data)"); + return 0; + } + Control* c = control_at(branch_depth.depth); + if (c->br_merge()->arity == 0) { + this->DecodeError( + "br_on_cast_fail must target a branch of arity at least 1"); + return 0; + } + // Attention: contrary to most other instructions, we modify the stack + // before calling the interface function. This makes it significantly + // more convenient to pass around the values that will be on the stack + // when the branch is taken. In this case, we leave {obj} on the stack + // to type check the branch. + // TODO(jkummerow): Reconsider this choice. + Drop(rtt); + if (!VALIDATE(TypeCheckBranch<true>(c, 0))) return 0; + Value result_on_fallthrough = CreateValue( + rtt.type.is_bottom() + ? kWasmBottom + : ValueType::Ref(rtt.type.ref_index(), kNonNullable)); + // This logic ensures that code generation can assume that functions + // can only be cast to function types, and data objects to data types. + if (V8_LIKELY(current_code_reachable_and_ok_)) { + if (V8_LIKELY(ObjectRelatedWithRtt(obj, rtt))) { + CALL_INTERFACE(BrOnCastFail, obj, rtt, &result_on_fallthrough, + branch_depth.depth); + } else { + // Drop {rtt} in the interface. + CALL_INTERFACE(Drop); + // Otherwise the types are unrelated. Always branch. + CALL_INTERFACE(BrOrRet, branch_depth.depth, 0); + // We know that the following code is not reachable, but according + // to the spec it technically is. Set it to spec-only reachable. + SetSucceedingCodeDynamicallyUnreachable(); + } + c->br_merge()->reached = true; + } + // Make sure the correct value is on the stack state on fallthrough. + Drop(obj); + Push(result_on_fallthrough); + return opcode_length + branch_depth.length; + } #define ABSTRACT_TYPE_CHECK(heap_type) \ case kExprRefIs##heap_type: { \ Value arg = Peek(0, 0, kWasmAnyRef); \ @@ -4510,25 +4508,20 @@ class WasmFullDecoder : public WasmDecoder<validate> { Value result_on_branch = CreateValue(ValueType::Ref(heap_type, kNonNullable)); Push(result_on_branch); - TypeCheckBranchResult check_result = TypeCheckBranch(c, true, 0); - if (V8_LIKELY(check_result == kReachableBranch)) { - // The {value_on_branch} parameter we pass to the interface must be - // pointer-identical to the object on the stack, so we can't reuse - // {result_on_branch} which was passed-by-value to {Push}. - Value* value_on_branch = stack_value(1); + if (!VALIDATE(TypeCheckBranch<true>(c, 0))) return 0; + // The {value_on_branch} parameter we pass to the interface must be + // pointer-identical to the object on the stack, so we can't reuse + // {result_on_branch} which was passed-by-value to {Push}. + Value* value_on_branch = stack_value(1); + if (V8_LIKELY(current_code_reachable_and_ok_)) { if (opcode == kExprBrOnFunc) { - CALL_INTERFACE_IF_OK_AND_REACHABLE(BrOnFunc, obj, value_on_branch, - branch_depth.depth); + CALL_INTERFACE(BrOnFunc, obj, value_on_branch, branch_depth.depth); } else if (opcode == kExprBrOnData) { - CALL_INTERFACE_IF_OK_AND_REACHABLE(BrOnData, obj, value_on_branch, - branch_depth.depth); + CALL_INTERFACE(BrOnData, obj, value_on_branch, branch_depth.depth); } else { - CALL_INTERFACE_IF_OK_AND_REACHABLE(BrOnI31, obj, value_on_branch, - branch_depth.depth); + CALL_INTERFACE(BrOnI31, obj, value_on_branch, branch_depth.depth); } c->br_merge()->reached = true; - } else if (check_result == kInvalidStack) { - return 0; } Drop(result_on_branch); Push(obj); // Restore stack state on fallthrough. @@ -4714,11 +4707,6 @@ class WasmFullDecoder : public WasmDecoder<validate> { } } - void DoReturn() { - DCHECK_GE(stack_size(), this->sig_->return_count()); - CALL_INTERFACE_IF_OK_AND_REACHABLE(DoReturn, 0); - } - V8_INLINE void EnsureStackSpace(int slots_needed) { if (V8_LIKELY(stack_capacity_end_ - stack_end_ >= slots_needed)) return; GrowStackSpace(slots_needed); @@ -4842,7 +4830,7 @@ class WasmFullDecoder : public WasmDecoder<validate> { // TODO(wasm): This check is often redundant. if (V8_UNLIKELY(stack_size() < limit + count)) { // Popping past the current control start in reachable code. - if (!VALIDATE(!control_.back().reachable())) { + if (!VALIDATE(!current_code_reachable_and_ok_)) { NotEnoughArgumentsError(0); } // Pop what we can. @@ -4854,188 +4842,152 @@ class WasmFullDecoder : public WasmDecoder<validate> { // For more descriptive call sites: V8_INLINE void Drop(const Value& /* unused */) { Drop(1); } - // Pops values from the stack, as defined by {merge}. Thereby we type-check - // unreachable merges. Afterwards the values are pushed again on the stack - // according to the signature in {merge}. This is done so follow-up validation - // is possible. - bool TypeCheckUnreachableMerge(Merge<Value>& merge, bool conditional_branch, - uint32_t drop_values = 0) { - int arity = merge.arity; - // For conditional branches, stack value '0' is the condition of the branch, - // and the result values start at index '1'. - int index_offset = conditional_branch ? 1 : 0; + enum StackElementsCountMode : bool { + kNonStrictCounting = false, + kStrictCounting = true + }; + + enum MergeType { kBranchMerge, kReturnMerge, kFallthroughMerge }; + + // - If the current code is reachable, check if the current stack values are + // compatible with {merge} based on their number and types. Disregard the + // first {drop_values} on the stack. If {strict_count}, check that + // #(stack elements) == {merge->arity}, otherwise + // #(stack elements) >= {merge->arity}. + // - If the current code is unreachable, check if any values that may exist on + // top of the stack are compatible with {merge}. If {push_branch_values}, + // push back to the stack values based on the type of {merge} (this is + // needed for conditional branches due to their typing rules, and + // fallthroughs so that the outer control finds the expected values on the + // stack). TODO(manoskouk): We expect the unreachable-code behavior to + // change, either due to relaxation of dead code verification, or the + // introduction of subtyping. + template <StackElementsCountMode strict_count, bool push_branch_values, + MergeType merge_type> + bool TypeCheckStackAgainstMerge(uint32_t drop_values, Merge<Value>* merge) { + static_assert(validate, "Call this function only within VALIDATE"); + constexpr const char* merge_description = + merge_type == kBranchMerge + ? "branch" + : merge_type == kReturnMerge ? "return" : "fallthru"; + uint32_t arity = merge->arity; + uint32_t actual = stack_size() - control_.back().stack_depth; + if (V8_LIKELY(current_code_reachable_and_ok_)) { + if (V8_UNLIKELY(strict_count ? actual != drop_values + arity + : actual < drop_values + arity)) { + this->DecodeError("expected %u elements on the stack for %s, found %u", + arity, merge_description, + actual >= drop_values ? actual - drop_values : 0); + return false; + } + // Typecheck the topmost {merge->arity} values on the stack. + Value* stack_values = stack_end_ - (arity + drop_values); + for (uint32_t i = 0; i < arity; ++i) { + Value& val = stack_values[i]; + Value& old = (*merge)[i]; + if (!IsSubtypeOf(val.type, old.type, this->module_)) { + this->DecodeError("type error in %s[%u] (expected %s, got %s)", + merge_description, i, old.type.name().c_str(), + val.type.name().c_str()); + return false; + } + } + return true; + } + // Unreachable code validation starts here. + if (V8_UNLIKELY(strict_count && actual > drop_values + arity)) { + this->DecodeError("expected %u elements on the stack for %s, found %u", + arity, merge_description, + actual >= drop_values ? actual - drop_values : 0); + return false; + } + // TODO(manoskouk): Use similar code as above if we keep unreachable checks. for (int i = arity - 1, depth = drop_values; i >= 0; --i, ++depth) { - Peek(depth, index_offset + i, merge[i].type); - } - // Push values of the correct type onto the stack. - Drop(drop_values); - Drop(arity); - // {Drop} is adaptive for polymorphic stacks: it might drop fewer values - // than requested. So ensuring stack space here is not redundant. - EnsureStackSpace(arity + drop_values); - for (int i = 0; i < arity; i++) Push(CreateValue(merge[i].type)); - // {drop_values} are about to be dropped anyway, so we can forget their - // previous types, but we do have to maintain the correct stack height. - for (uint32_t i = 0; i < drop_values; i++) { - Push(UnreachableValue(this->pc_)); + Peek(depth, i, (*merge)[i].type); + } + if (push_branch_values) { + Drop(drop_values); + Drop(arity); + // {Drop} is adaptive for polymorphic stacks: it might drop fewer values + // than requested. So ensuring stack space here is not redundant. + EnsureStackSpace(drop_values + arity); + // Push values of the correct type onto the stack. + for (int i = 0; i < static_cast<int>(arity); i++) { + Push(CreateValue((*merge)[i].type)); + } + // {drop_values} are about to be dropped anyway, so we can forget their + // previous types, but we do have to maintain the correct stack height. + for (uint32_t i = 0; i < drop_values; i++) { + Push(UnreachableValue(this->pc_)); + } } return this->ok(); } + template <StackElementsCountMode strict_count, MergeType merge_type> + bool DoReturn() { + if (!VALIDATE((TypeCheckStackAgainstMerge<strict_count, false, merge_type>( + 0, &control_.front().end_merge)))) { + return false; + } + DCHECK_IMPLIES(current_code_reachable_and_ok_, + stack_size() >= this->sig_->return_count()); + CALL_INTERFACE_IF_OK_AND_REACHABLE(DoReturn, 0); + EndControl(); + return true; + } + int startrel(const byte* ptr) { return static_cast<int>(ptr - this->start_); } - void FallThruTo(Control* c) { - DCHECK_EQ(c, &control_.back()); + void FallThrough() { + Control* c = &control_.back(); DCHECK_NE(c->kind, kControlLoop); - if (!TypeCheckFallThru()) return; + if (!VALIDATE(TypeCheckFallThru())) return; CALL_INTERFACE_IF_OK_AND_REACHABLE(FallThruTo, c); if (c->reachable()) c->end_merge.reached = true; } - bool TypeCheckMergeValues(Control* c, uint32_t drop_values, - Merge<Value>* merge) { - static_assert(validate, "Call this function only within VALIDATE"); - DCHECK(merge == &c->start_merge || merge == &c->end_merge); - DCHECK_GE(stack_size() - drop_values, c->stack_depth + merge->arity); - Value* stack_values = stack_value(merge->arity + drop_values); - // Typecheck the topmost {merge->arity} values on the stack. - for (uint32_t i = 0; i < merge->arity; ++i) { - Value& val = stack_values[i]; - Value& old = (*merge)[i]; - if (!VALIDATE(IsSubtypeOf(val.type, old.type, this->module_))) { - this->DecodeError("type error in merge[%u] (expected %s, got %s)", i, - old.type.name().c_str(), val.type.name().c_str()); - return false; - } - } - - return true; - } - bool TypeCheckOneArmedIf(Control* c) { static_assert(validate, "Call this function only within VALIDATE"); DCHECK(c->is_onearmed_if()); - DCHECK_EQ(c->start_merge.arity, c->end_merge.arity); + if (c->end_merge.arity != c->start_merge.arity) { + this->DecodeError(c->pc(), + "start-arity and end-arity of one-armed if must match"); + return false; + } for (uint32_t i = 0; i < c->start_merge.arity; ++i) { Value& start = c->start_merge[i]; Value& end = c->end_merge[i]; - if (!VALIDATE(IsSubtypeOf(start.type, end.type, this->module_))) { + if (!IsSubtypeOf(start.type, end.type, this->module_)) { this->DecodeError("type error in merge[%u] (expected %s, got %s)", i, end.type.name().c_str(), start.type.name().c_str()); return false; } } - return true; } bool TypeCheckFallThru() { static_assert(validate, "Call this function only within VALIDATE"); - Control& c = control_.back(); - if (V8_LIKELY(c.reachable())) { - uint32_t expected = c.end_merge.arity; - DCHECK_GE(stack_size(), c.stack_depth); - uint32_t actual = stack_size() - c.stack_depth; - // Fallthrus must match the arity of the control exactly. - if (!VALIDATE(actual == expected)) { - this->DecodeError( - "expected %u elements on the stack for fallthru to @%d, found %u", - expected, startrel(c.pc()), actual); - return false; - } - if (expected == 0) return true; // Fast path. - - return TypeCheckMergeValues(&c, 0, &c.end_merge); - } - - // Type-check an unreachable fallthru. First we do an arity check, then a - // type check. Note that type-checking may require an adjustment of the - // stack, if some stack values are missing to match the block signature. - Merge<Value>& merge = c.end_merge; - int arity = static_cast<int>(merge.arity); - int available = static_cast<int>(stack_size()) - c.stack_depth; - // For fallthrus, not more than the needed values should be available. - if (!VALIDATE(available <= arity)) { - this->DecodeError( - "expected %u elements on the stack for fallthru to @%d, found %u", - arity, startrel(c.pc()), available); - return false; - } - // Pop all values from the stack for type checking of existing stack - // values. - return TypeCheckUnreachableMerge(merge, false); + return TypeCheckStackAgainstMerge<kStrictCounting, true, kFallthroughMerge>( + 0, &control_.back().end_merge); } - enum TypeCheckBranchResult { - kReachableBranch, - kUnreachableBranch, - kInvalidStack, - }; - - // If the type code is reachable, check if the current stack values are + // If the current code is reachable, check if the current stack values are // compatible with a jump to {c}, based on their number and types. // Otherwise, we have a polymorphic stack: check if any values that may exist - // on top of the stack are compatible with {c}, and push back to the stack - // values based on the type of {c}. - TypeCheckBranchResult TypeCheckBranch(Control* c, bool conditional_branch, - uint32_t drop_values) { - if (V8_LIKELY(control_.back().reachable())) { - // We only do type-checking here. This is only needed during validation. - if (!validate) return kReachableBranch; - - // Branches must have at least the number of values expected; can have - // more. - uint32_t expected = c->br_merge()->arity; - if (expected == 0) return kReachableBranch; // Fast path. - uint32_t limit = control_.back().stack_depth; - if (!VALIDATE(stack_size() >= limit + drop_values + expected)) { - uint32_t actual = stack_size() - limit; - actual -= std::min(actual, drop_values); - this->DecodeError( - "expected %u elements on the stack for br to @%d, found %u", - expected, startrel(c->pc()), actual); - return kInvalidStack; - } - return TypeCheckMergeValues(c, drop_values, c->br_merge()) - ? kReachableBranch - : kInvalidStack; - } - - return TypeCheckUnreachableMerge(*c->br_merge(), conditional_branch, - drop_values) - ? kUnreachableBranch - : kInvalidStack; - } - - bool TypeCheckReturn() { - int num_returns = static_cast<int>(this->sig_->return_count()); - // No type checking is needed if there are no returns. - if (num_returns == 0) return true; - - // Returns must have at least the number of values expected; can have more. - int num_available = - static_cast<int>(stack_size()) - control_.back().stack_depth; - if (!VALIDATE(num_available >= num_returns)) { - this->DecodeError( - "expected %u elements on the stack for return, found %u", num_returns, - num_available); - return false; - } - - // Typecheck the topmost {num_returns} values on the stack. - // This line requires num_returns > 0. - Value* stack_values = stack_end_ - num_returns; - for (int i = 0; i < num_returns; ++i) { - Value& val = stack_values[i]; - ValueType expected_type = this->sig_->GetReturn(i); - if (!VALIDATE(IsSubtypeOf(val.type, expected_type, this->module_))) { - this->DecodeError("type error in return[%u] (expected %s, got %s)", i, - expected_type.name().c_str(), - val.type.name().c_str()); - return false; - } - } - return true; + // on top of the stack are compatible with {c}. If {push_branch_values}, + // push back to the stack values based on the type of {c} (this is needed for + // conditional branches due to their typing rules, and fallthroughs so that + // the outer control finds enough values on the stack). + // {drop_values} is the number of stack values that will be dropped before the + // branch is taken. This is currently 1 for for br (condition), br_table + // (index) and br_on_null (reference), and 0 for all other branches. + template <bool push_branch_values> + bool TypeCheckBranch(Control* c, uint32_t drop_values) { + static_assert(validate, "Call this function only within VALIDATE"); + return TypeCheckStackAgainstMerge<kNonStrictCounting, push_branch_values, + kBranchMerge>(drop_values, c->br_merge()); } void onFirstError() override { diff --git a/deps/v8/src/wasm/function-compiler.cc b/deps/v8/src/wasm/function-compiler.cc index 4303344f13..4a2db3d496 100644 --- a/deps/v8/src/wasm/function-compiler.cc +++ b/deps/v8/src/wasm/function-compiler.cc @@ -306,7 +306,8 @@ JSToWasmWrapperCompilationUnit::JSToWasmWrapperCompilationUnit( Isolate* isolate, WasmEngine* wasm_engine, const FunctionSig* sig, const WasmModule* module, bool is_import, const WasmFeatures& enabled_features, AllowGeneric allow_generic) - : is_import_(is_import), + : isolate_(isolate), + is_import_(is_import), sig_(sig), use_generic_wrapper_(allow_generic && UseGenericWrapper(sig) && !is_import), @@ -326,19 +327,19 @@ void JSToWasmWrapperCompilationUnit::Execute() { } } -Handle<Code> JSToWasmWrapperCompilationUnit::Finalize(Isolate* isolate) { +Handle<Code> JSToWasmWrapperCompilationUnit::Finalize() { Handle<Code> code; if (use_generic_wrapper_) { code = - isolate->builtins()->builtin_handle(Builtins::kGenericJSToWasmWrapper); + isolate_->builtins()->builtin_handle(Builtins::kGenericJSToWasmWrapper); } else { - CompilationJob::Status status = job_->FinalizeJob(isolate); + CompilationJob::Status status = job_->FinalizeJob(isolate_); CHECK_EQ(status, CompilationJob::SUCCEEDED); code = job_->compilation_info()->code(); } - if (!use_generic_wrapper_ && must_record_function_compilation(isolate)) { + if (!use_generic_wrapper_ && must_record_function_compilation(isolate_)) { RecordWasmHeapStubCompilation( - isolate, code, "%s", job_->compilation_info()->GetDebugName().get()); + isolate_, code, "%s", job_->compilation_info()->GetDebugName().get()); } return code; } @@ -353,7 +354,7 @@ Handle<Code> JSToWasmWrapperCompilationUnit::CompileJSToWasmWrapper( module, is_import, enabled_features, kAllowGeneric); unit.Execute(); - return unit.Finalize(isolate); + return unit.Finalize(); } // static @@ -366,7 +367,7 @@ Handle<Code> JSToWasmWrapperCompilationUnit::CompileSpecificJSToWasmWrapper( module, is_import, enabled_features, kDontAllowGeneric); unit.Execute(); - return unit.Finalize(isolate); + return unit.Finalize(); } } // namespace wasm diff --git a/deps/v8/src/wasm/function-compiler.h b/deps/v8/src/wasm/function-compiler.h index f8d1f00a4e..80cd1a7b67 100644 --- a/deps/v8/src/wasm/function-compiler.h +++ b/deps/v8/src/wasm/function-compiler.h @@ -127,8 +127,10 @@ class V8_EXPORT_PRIVATE JSToWasmWrapperCompilationUnit final { AllowGeneric allow_generic); ~JSToWasmWrapperCompilationUnit(); + Isolate* isolate() const { return isolate_; } + void Execute(); - Handle<Code> Finalize(Isolate* isolate); + Handle<Code> Finalize(); bool is_import() const { return is_import_; } const FunctionSig* sig() const { return sig_; } @@ -146,6 +148,11 @@ class V8_EXPORT_PRIVATE JSToWasmWrapperCompilationUnit final { const WasmModule* module); private: + // Wrapper compilation is bound to an isolate. Concurrent accesses to the + // isolate (during the "Execute" phase) must be audited carefully, i.e. we + // should only access immutable information (like the root table). The isolate + // is guaranteed to be alive when this unit executes. + Isolate* isolate_; bool is_import_; const FunctionSig* sig_; bool use_generic_wrapper_; diff --git a/deps/v8/src/wasm/graph-builder-interface.cc b/deps/v8/src/wasm/graph-builder-interface.cc index c856f4d949..a81457faa7 100644 --- a/deps/v8/src/wasm/graph-builder-interface.cc +++ b/deps/v8/src/wasm/graph-builder-interface.cc @@ -9,6 +9,7 @@ #include "src/handles/handles.h" #include "src/objects/objects-inl.h" #include "src/utils/ostreams.h" +#include "src/wasm/branch-hint-map.h" #include "src/wasm/decoder.h" #include "src/wasm/function-body-decoder-impl.h" #include "src/wasm/function-body-decoder.h" @@ -29,7 +30,7 @@ namespace { // It maintains a control state that tracks whether the environment // is reachable, has reached a control end, or has been merged. struct SsaEnv : public ZoneObject { - enum State { kControlEnd, kUnreachable, kReached, kMerged }; + enum State { kUnreachable, kReached, kMerged }; State state; TFNode* control; @@ -50,11 +51,11 @@ struct SsaEnv : public ZoneObject { effect(other.effect), instance_cache(other.instance_cache), locals(std::move(other.locals)) { - other.Kill(kUnreachable); + other.Kill(); } - void Kill(State new_state = kControlEnd) { - state = new_state; + void Kill() { + state = kUnreachable; for (TFNode*& local : locals) { local = nullptr; } @@ -67,8 +68,6 @@ struct SsaEnv : public ZoneObject { } }; -constexpr uint32_t kNullCatch = static_cast<uint32_t>(-1); - class WasmGraphBuildingInterface { public: static constexpr Decoder::ValidateFlag validate = Decoder::kFullValidation; @@ -97,7 +96,7 @@ class WasmGraphBuildingInterface { }; struct Control : public ControlBase<Value, validate> { - SsaEnv* end_env = nullptr; // end environment for the construct. + SsaEnv* merge_env = nullptr; // merge environment for the construct. SsaEnv* false_env = nullptr; // false environment (only for if). TryInfo* try_info = nullptr; // information about try statements. int32_t previous_catch = -1; // previous Control with a catch. @@ -110,10 +109,18 @@ class WasmGraphBuildingInterface { : ControlBase(std::forward<Args>(args)...) {} }; - explicit WasmGraphBuildingInterface(compiler::WasmGraphBuilder* builder) - : builder_(builder) {} + explicit WasmGraphBuildingInterface(compiler::WasmGraphBuilder* builder, + int func_index) + : builder_(builder), func_index_(func_index) {} void StartFunction(FullDecoder* decoder) { + // Get the branch hints map for this function (if available) + if (decoder->module_) { + auto branch_hints_it = decoder->module_->branch_hints.find(func_index_); + if (branch_hints_it != decoder->module_->branch_hints.end()) { + branch_hints_ = &branch_hints_it->second; + } + } // The first '+ 1' is needed by TF Start node, the second '+ 1' is for the // instance parameter. builder_->Start(static_cast<int>(decoder->sig_->parameter_count() + 1 + 1)); @@ -156,15 +163,15 @@ class WasmGraphBuildingInterface { void Block(FullDecoder* decoder, Control* block) { // The branch environment is the outer environment. - block->end_env = ssa_env_; + block->merge_env = ssa_env_; SetEnv(Steal(decoder->zone(), ssa_env_)); } void Loop(FullDecoder* decoder, Control* block) { - SsaEnv* finish_try_env = Steal(decoder->zone(), ssa_env_); - block->end_env = finish_try_env; - SetEnv(finish_try_env); - // The continue environment is the inner environment. + // This is the merge environment at the beginning of the loop. + SsaEnv* merge_env = Steal(decoder->zone(), ssa_env_); + block->merge_env = merge_env; + SetEnv(merge_env); ssa_env_->state = SsaEnv::kMerged; @@ -216,15 +223,15 @@ class WasmGraphBuildingInterface { control()); } + // Now we setup a new environment for the inside of the loop. SetEnv(Split(decoder->zone(), ssa_env_)); builder_->StackCheck(decoder->position()); - ssa_env_->SetNotMerged(); - if (!decoder->ok()) return; + // Wrap input merge into phis. for (uint32_t i = 0; i < block->start_merge.arity; ++i) { Value& val = block->start_merge[i]; - TFNode* inputs[] = {val.node, block->end_env->control}; + TFNode* inputs[] = {val.node, block->merge_env->control}; val.node = builder_->Phi(val.type, 1, inputs); } } @@ -238,22 +245,34 @@ class WasmGraphBuildingInterface { SsaEnv* try_env = Steal(decoder->zone(), outer_env); SetEnv(try_env); TryInfo* try_info = decoder->zone()->New<TryInfo>(catch_env); - block->end_env = outer_env; + block->merge_env = outer_env; block->try_info = try_info; - block->previous_catch = current_catch_; - current_catch_ = static_cast<int32_t>(decoder->control_depth() - 1); } void If(FullDecoder* decoder, const Value& cond, Control* if_block) { TFNode* if_true = nullptr; TFNode* if_false = nullptr; - builder_->BranchNoHint(cond.node, &if_true, &if_false); - SsaEnv* end_env = ssa_env_; + WasmBranchHint hint = WasmBranchHint::kNoHint; + if (branch_hints_) { + hint = branch_hints_->GetHintFor(decoder->pc_relative_offset()); + } + switch (hint) { + case WasmBranchHint::kNoHint: + builder_->BranchNoHint(cond.node, &if_true, &if_false); + break; + case WasmBranchHint::kUnlikely: + builder_->BranchExpectFalse(cond.node, &if_true, &if_false); + break; + case WasmBranchHint::kLikely: + builder_->BranchExpectTrue(cond.node, &if_true, &if_false); + break; + } + SsaEnv* merge_env = ssa_env_; SsaEnv* false_env = Split(decoder->zone(), ssa_env_); false_env->control = if_false; SsaEnv* true_env = Steal(decoder->zone(), ssa_env_); true_env->control = if_true; - if_block->end_env = end_env; + if_block->merge_env = merge_env; if_block->false_env = false_env; SetEnv(true_env); } @@ -294,11 +313,9 @@ class WasmGraphBuildingInterface { MergeValuesInto(decoder, block, &block->end_merge, values); } // Now continue with the merged environment. - SetEnv(block->end_env); + SetEnv(block->merge_env); } - void EndControl(FullDecoder* decoder, Control* block) { ssa_env_->Kill(); } - void UnOp(FullDecoder* decoder, WasmOpcode opcode, const Value& value, Value* result) { result->node = builder_->Unop(opcode, value.node, decoder->position()); @@ -482,7 +499,21 @@ class WasmGraphBuildingInterface { SsaEnv* fenv = ssa_env_; SsaEnv* tenv = Split(decoder->zone(), fenv); fenv->SetNotMerged(); - builder_->BranchNoHint(cond.node, &tenv->control, &fenv->control); + WasmBranchHint hint = WasmBranchHint::kNoHint; + if (branch_hints_) { + hint = branch_hints_->GetHintFor(decoder->pc_relative_offset()); + } + switch (hint) { + case WasmBranchHint::kNoHint: + builder_->BranchNoHint(cond.node, &tenv->control, &fenv->control); + break; + case WasmBranchHint::kUnlikely: + builder_->BranchExpectFalse(cond.node, &tenv->control, &fenv->control); + break; + case WasmBranchHint::kLikely: + builder_->BranchExpectTrue(cond.node, &tenv->control, &fenv->control); + break; + } builder_->SetControl(fenv->control); SetEnv(tenv); BrOrRet(decoder, depth, 1); @@ -639,6 +670,19 @@ class WasmGraphBuildingInterface { SetEnv(false_env); } + void BrOnNonNull(FullDecoder* decoder, const Value& ref_object, + uint32_t depth) { + SsaEnv* false_env = ssa_env_; + SsaEnv* true_env = Split(decoder->zone(), false_env); + false_env->SetNotMerged(); + builder_->BrOnNull(ref_object.node, &false_env->control, + &true_env->control); + builder_->SetControl(false_env->control); + SetEnv(true_env); + BrOrRet(decoder, depth, 0); + SetEnv(false_env); + } + void SimdOp(FullDecoder* decoder, WasmOpcode opcode, Vector<Value> args, Value* result) { NodeVector inputs(args.size()); @@ -689,9 +733,6 @@ class WasmGraphBuildingInterface { const ExceptionIndexImmediate<validate>& imm, Control* block, Vector<Value> values) { DCHECK(block->is_try_catch()); - - current_catch_ = block->previous_catch; // Pop try scope. - // The catch block is unreachable if no possible throws in the try block // exist. We only build a landing pad if some node in the try block can // (possibly) throw. Otherwise the catch environments remain empty. @@ -743,7 +784,6 @@ class WasmGraphBuildingInterface { // and IfFailure nodes. builder_->Rethrow(block->try_info->exception); TerminateThrow(decoder); - current_catch_ = block->previous_catch; return; } DCHECK(decoder->control_at(depth)->is_try()); @@ -765,7 +805,6 @@ class WasmGraphBuildingInterface { target_try->exception, block->try_info->exception); } } - current_catch_ = block->previous_catch; } void CatchAll(FullDecoder* decoder, Control* block) { @@ -773,8 +812,6 @@ class WasmGraphBuildingInterface { block->is_try_unwind()); DCHECK_EQ(decoder->control_at(0), block); - current_catch_ = block->previous_catch; // Pop try scope. - // The catch block is unreachable if no possible throws in the try block // exist. We only build a landing pad if some node in the try block can // (possibly) throw. Otherwise the catch environments remain empty. @@ -1000,28 +1037,37 @@ class WasmGraphBuildingInterface { TFNode*, TFNode*, StaticKnowledge, TFNode**, TFNode**, TFNode**, TFNode**)> void BrOnCastAbs(FullDecoder* decoder, const Value& object, const Value& rtt, - Value* value_on_branch, uint32_t br_depth) { + Value* forwarding_value, uint32_t br_depth, + bool branch_on_match) { StaticKnowledge config = ComputeStaticKnowledge(object.type, rtt.type, decoder->module_); - SsaEnv* match_env = Split(decoder->zone(), ssa_env_); - SsaEnv* no_match_env = Steal(decoder->zone(), ssa_env_); - no_match_env->SetNotMerged(); + SsaEnv* branch_env = Split(decoder->zone(), ssa_env_); + SsaEnv* no_branch_env = Steal(decoder->zone(), ssa_env_); + no_branch_env->SetNotMerged(); + SsaEnv* match_env = branch_on_match ? branch_env : no_branch_env; + SsaEnv* no_match_env = branch_on_match ? no_branch_env : branch_env; (builder_->*branch_function)(object.node, rtt.node, config, &match_env->control, &match_env->effect, &no_match_env->control, &no_match_env->effect); - builder_->SetControl(no_match_env->control); - SetEnv(match_env); - value_on_branch->node = object.node; + builder_->SetControl(no_branch_env->control); + SetEnv(branch_env); + forwarding_value->node = object.node; // Currently, br_on_* instructions modify the value stack before calling // the interface function, so we don't need to drop any values here. BrOrRet(decoder, br_depth, 0); - SetEnv(no_match_env); + SetEnv(no_branch_env); } void BrOnCast(FullDecoder* decoder, const Value& object, const Value& rtt, Value* value_on_branch, uint32_t br_depth) { BrOnCastAbs<&compiler::WasmGraphBuilder::BrOnCast>( - decoder, object, rtt, value_on_branch, br_depth); + decoder, object, rtt, value_on_branch, br_depth, true); + } + + void BrOnCastFail(FullDecoder* decoder, const Value& object, const Value& rtt, + Value* value_on_fallthrough, uint32_t br_depth) { + BrOnCastAbs<&compiler::WasmGraphBuilder::BrOnCast>( + decoder, object, rtt, value_on_fallthrough, br_depth, false); } void RefIsData(FullDecoder* decoder, const Value& object, Value* result) { @@ -1036,8 +1082,8 @@ class WasmGraphBuildingInterface { void BrOnData(FullDecoder* decoder, const Value& object, Value* value_on_branch, uint32_t br_depth) { BrOnCastAbs<&compiler::WasmGraphBuilder::BrOnData>( - decoder, object, Value{nullptr, kWasmBottom}, value_on_branch, - br_depth); + decoder, object, Value{nullptr, kWasmBottom}, value_on_branch, br_depth, + true); } void RefIsFunc(FullDecoder* decoder, const Value& object, Value* result) { @@ -1052,8 +1098,8 @@ class WasmGraphBuildingInterface { void BrOnFunc(FullDecoder* decoder, const Value& object, Value* value_on_branch, uint32_t br_depth) { BrOnCastAbs<&compiler::WasmGraphBuilder::BrOnFunc>( - decoder, object, Value{nullptr, kWasmBottom}, value_on_branch, - br_depth); + decoder, object, Value{nullptr, kWasmBottom}, value_on_branch, br_depth, + true); } void RefIsI31(FullDecoder* decoder, const Value& object, Value* result) { @@ -1067,8 +1113,8 @@ class WasmGraphBuildingInterface { void BrOnI31(FullDecoder* decoder, const Value& object, Value* value_on_branch, uint32_t br_depth) { BrOnCastAbs<&compiler::WasmGraphBuilder::BrOnI31>( - decoder, object, Value{nullptr, kWasmBottom}, value_on_branch, - br_depth); + decoder, object, Value{nullptr, kWasmBottom}, value_on_branch, br_depth, + true); } void Forward(FullDecoder* decoder, const Value& from, Value* to) { @@ -1080,7 +1126,8 @@ class WasmGraphBuildingInterface { private: SsaEnv* ssa_env_ = nullptr; compiler::WasmGraphBuilder* builder_; - uint32_t current_catch_ = kNullCatch; + int func_index_; + const BranchHintMap* branch_hints_ = nullptr; // Tracks loop data for loop unrolling. std::vector<compiler::WasmLoopInfo> loop_infos_; @@ -1088,13 +1135,9 @@ class WasmGraphBuildingInterface { TFNode* control() { return builder_->control(); } - uint32_t control_depth_of_current_catch(FullDecoder* decoder) { - return decoder->control_depth() - 1 - current_catch_; - } - TryInfo* current_try_info(FullDecoder* decoder) { - DCHECK_LT(current_catch_, decoder->control_depth()); - return decoder->control_at(control_depth_of_current_catch(decoder)) + DCHECK_LT(decoder->current_catch(), decoder->control_depth()); + return decoder->control_at(decoder->control_depth_of_current_catch()) ->try_info; } @@ -1122,9 +1165,6 @@ class WasmGraphBuildingInterface { case SsaEnv::kMerged: state = 'M'; break; - case SsaEnv::kControlEnd: - state = 'E'; - break; } } PrintF("{set_env = %p, state = %c", env, state); @@ -1146,7 +1186,7 @@ class WasmGraphBuildingInterface { V8_INLINE TFNode* CheckForException(FullDecoder* decoder, TFNode* node) { if (node == nullptr) return nullptr; - const bool inside_try_scope = current_catch_ != kNullCatch; + const bool inside_try_scope = decoder->current_catch() != -1; if (!inside_try_scope) return node; return CheckForExceptionImpl(decoder, node); @@ -1170,7 +1210,7 @@ class WasmGraphBuildingInterface { TryInfo* try_info = current_try_info(decoder); if (FLAG_wasm_loop_unrolling) { ValueVector values; - BuildNestedLoopExits(decoder, control_depth_of_current_catch(decoder), + BuildNestedLoopExits(decoder, decoder->control_depth_of_current_catch(), true, values, &if_exception); } Goto(decoder, try_info->catch_env); @@ -1218,8 +1258,10 @@ class WasmGraphBuildingInterface { Value* values) { DCHECK(merge == &c->start_merge || merge == &c->end_merge); - SsaEnv* target = c->end_env; + SsaEnv* target = c->merge_env; + // This has to be computed before calling Goto(). const bool first = target->state == SsaEnv::kUnreachable; + Goto(decoder, target); if (merge->arity == 0) return; @@ -1327,7 +1369,6 @@ class WasmGraphBuildingInterface { default: UNREACHABLE(); } - return ssa_env_->Kill(); } // Create a complete copy of {from}. @@ -1357,11 +1398,6 @@ class WasmGraphBuildingInterface { return result; } - // Create an unreachable environment. - SsaEnv* UnreachableEnv(Zone* zone) { - return zone->New<SsaEnv>(zone, SsaEnv::kUnreachable, nullptr, nullptr, 0); - } - void DoCall(FullDecoder* decoder, CallMode call_mode, uint32_t table_index, CheckForNull null_check, TFNode* caller_node, const FunctionSig* sig, uint32_t sig_index, const Value args[], @@ -1523,10 +1559,11 @@ DecodeResult BuildTFGraph(AccountingAllocator* allocator, compiler::WasmGraphBuilder* builder, WasmFeatures* detected, const FunctionBody& body, std::vector<compiler::WasmLoopInfo>* loop_infos, - compiler::NodeOriginTable* node_origins) { + compiler::NodeOriginTable* node_origins, + int func_index) { Zone zone(allocator, ZONE_NAME); WasmFullDecoder<Decoder::kFullValidation, WasmGraphBuildingInterface> decoder( - &zone, module, enabled, detected, body, builder); + &zone, module, enabled, detected, body, builder, func_index); if (node_origins) { builder->AddBytecodePositionDecorator(node_origins, &decoder); } diff --git a/deps/v8/src/wasm/graph-builder-interface.h b/deps/v8/src/wasm/graph-builder-interface.h index ce125313e4..6c668e2b0a 100644 --- a/deps/v8/src/wasm/graph-builder-interface.h +++ b/deps/v8/src/wasm/graph-builder-interface.h @@ -10,7 +10,6 @@ #define V8_WASM_GRAPH_BUILDER_INTERFACE_H_ #include "src/wasm/decoder.h" -#include "src/wasm/wasm-opcodes.h" #include "src/wasm/wasm-result.h" namespace v8 { @@ -33,7 +32,7 @@ BuildTFGraph(AccountingAllocator* allocator, const WasmFeatures& enabled, const WasmModule* module, compiler::WasmGraphBuilder* builder, WasmFeatures* detected, const FunctionBody& body, std::vector<compiler::WasmLoopInfo>* loop_infos, - compiler::NodeOriginTable* node_origins); + compiler::NodeOriginTable* node_origins, int func_index); } // namespace wasm } // namespace internal diff --git a/deps/v8/src/wasm/memory-protection-key.cc b/deps/v8/src/wasm/memory-protection-key.cc new file mode 100644 index 0000000000..e8252cd9ce --- /dev/null +++ b/deps/v8/src/wasm/memory-protection-key.cc @@ -0,0 +1,189 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "src/wasm/memory-protection-key.h" + +#if defined(V8_OS_LINUX) && defined(V8_HOST_ARCH_X64) +#include <sys/mman.h> // For {mprotect()} protection macros. +#undef MAP_TYPE // Conflicts with MAP_TYPE in Torque-generated instance-types.h +#endif + +#include "src/base/build_config.h" +#include "src/base/logging.h" +#include "src/base/macros.h" +#include "src/base/platform/platform.h" + +// Runtime-detection of PKU support with {dlsym()}. +// +// For now, we support memory protection keys/PKEYs/PKU only for Linux on x64 +// based on glibc functions {pkey_alloc()}, {pkey_free()}, etc. +// Those functions are only available since glibc version 2.27: +// https://man7.org/linux/man-pages/man2/pkey_alloc.2.html +// However, if we check the glibc verison with V8_GLIBC_PREPREQ here at compile +// time, this causes two problems due to dynamic linking of glibc: +// 1) If the compiling system _has_ a new enough glibc, the binary will include +// calls to {pkey_alloc()} etc., and then the runtime system must supply a +// new enough glibc version as well. That is, this potentially breaks runtime +// compatability on older systems (e.g., Ubuntu 16.04 with glibc 2.23). +// 2) If the compiling system _does not_ have a new enough glibc, PKU support +// will not be compiled in, even though the runtime system potentially _does_ +// have support for it due to a new enough Linux kernel and glibc version. +// That is, this results in non-optimal security (PKU available, but not used). +// Hence, we do _not_ check the glibc version during compilation, and instead +// only at runtime try to load {pkey_alloc()} etc. with {dlsym()}. +// TODO(dlehmann): Move this import and freestanding functions below to +// base/platform/platform.h {OS} (lower-level functions) and +// {base::PageAllocator} (exported API). +#if defined(V8_OS_LINUX) && defined(V8_HOST_ARCH_X64) +#include <dlfcn.h> +#endif + +namespace v8 { +namespace internal { +namespace wasm { + +// TODO(dlehmann) Security: Are there alternatives to disabling CFI altogether +// for the functions below? Since they are essentially an arbitrary indirect +// call gadget, disabling CFI should be only a last resort. In Chromium, there +// was {base::ProtectedMemory} to protect the function pointer from being +// overwritten, but t seems it was removed to not begin used and AFAICT no such +// thing exists in V8 to begin with. See +// https://www.chromium.org/developers/testing/control-flow-integrity and +// https://crrev.com/c/1884819. +// What is the general solution for CFI + {dlsym()}? +// An alternative would be to not rely on glibc and instead implement PKEY +// directly on top of Linux syscalls + inline asm, but that is quite some low- +// level code (probably in the order of 100 lines). +DISABLE_CFI_ICALL +int AllocateMemoryProtectionKey() { +// See comment on the import on feature testing for PKEY support. +#if defined(V8_OS_LINUX) && defined(V8_HOST_ARCH_X64) + // Try to to find {pkey_alloc()} support in glibc. + typedef int (*pkey_alloc_t)(unsigned int, unsigned int); + // Cache the {dlsym()} lookup in a {static} variable. + static auto* pkey_alloc = + bit_cast<pkey_alloc_t>(dlsym(RTLD_DEFAULT, "pkey_alloc")); + if (pkey_alloc != nullptr) { + // If there is support in glibc, try to allocate a new key. + // This might still return -1, e.g., because the kernel does not support + // PKU or because there is no more key available. + // Different reasons for why {pkey_alloc()} failed could be checked with + // errno, e.g., EINVAL vs ENOSPC vs ENOSYS. See manpages and glibc manual + // (the latter is the authorative source): + // https://www.gnu.org/software/libc/manual/html_mono/libc.html#Memory-Protection-Keys + return pkey_alloc(/* flags, unused */ 0, kDisableAccess); + } +#endif + return kNoMemoryProtectionKey; +} + +DISABLE_CFI_ICALL +void FreeMemoryProtectionKey(int key) { + // Only free the key if one was allocated. + if (key == kNoMemoryProtectionKey) return; + +#if defined(V8_OS_LINUX) && defined(V8_HOST_ARCH_X64) + typedef int (*pkey_free_t)(int); + static auto* pkey_free = + bit_cast<pkey_free_t>(dlsym(RTLD_DEFAULT, "pkey_free")); + // If a valid key was allocated, {pkey_free()} must also be available. + DCHECK_NOT_NULL(pkey_free); + + int ret = pkey_free(key); + CHECK_EQ(/* success */ 0, ret); +#else + // On platforms without PKU support, we should have already returned because + // the key must be {kNoMemoryProtectionKey}. + UNREACHABLE(); +#endif +} + +#if defined(V8_OS_LINUX) && defined(V8_HOST_ARCH_X64) +// TODO(dlehmann): Copied from base/platform/platform-posix.cc. Should be +// removed once this code is integrated in base/platform/platform-linux.cc. +int GetProtectionFromMemoryPermission(base::OS::MemoryPermission access) { + switch (access) { + case base::OS::MemoryPermission::kNoAccess: + case base::OS::MemoryPermission::kNoAccessWillJitLater: + return PROT_NONE; + case base::OS::MemoryPermission::kRead: + return PROT_READ; + case base::OS::MemoryPermission::kReadWrite: + return PROT_READ | PROT_WRITE; + case base::OS::MemoryPermission::kReadWriteExecute: + return PROT_READ | PROT_WRITE | PROT_EXEC; + case base::OS::MemoryPermission::kReadExecute: + return PROT_READ | PROT_EXEC; + } + UNREACHABLE(); +} +#endif + +DISABLE_CFI_ICALL +bool SetPermissionsAndMemoryProtectionKey( + PageAllocator* page_allocator, base::AddressRegion region, + PageAllocator::Permission page_permissions, int key) { + DCHECK_NOT_NULL(page_allocator); + + void* address = reinterpret_cast<void*>(region.begin()); + size_t size = region.size(); + +#if defined(V8_OS_LINUX) && defined(V8_HOST_ARCH_X64) + typedef int (*pkey_mprotect_t)(void*, size_t, int, int); + static auto* pkey_mprotect = + bit_cast<pkey_mprotect_t>(dlsym(RTLD_DEFAULT, "pkey_mprotect")); + + if (pkey_mprotect == nullptr) { + // If there is no runtime support for {pkey_mprotect()}, no key should have + // been allocated in the first place. + DCHECK_EQ(kNoMemoryProtectionKey, key); + + // Without PKU support, fallback to regular {mprotect()}. + return page_allocator->SetPermissions(address, size, page_permissions); + } + + // Copied with slight modifications from base/platform/platform-posix.cc + // {OS::SetPermissions()}. + // TODO(dlehmann): Move this block into its own function at the right + // abstraction boundary (likely some static method in platform.h {OS}) + // once the whole PKU code is moved into base/platform/. + DCHECK_EQ(0, region.begin() % page_allocator->CommitPageSize()); + DCHECK_EQ(0, size % page_allocator->CommitPageSize()); + + int protection = GetProtectionFromMemoryPermission( + static_cast<base::OS::MemoryPermission>(page_permissions)); + + int ret = pkey_mprotect(address, size, protection, key); + + return ret == /* success */ 0; +#else + // Without PKU support, fallback to regular {mprotect()}. + return page_allocator->SetPermissions(address, size, page_permissions); +#endif +} + +DISABLE_CFI_ICALL +bool SetPermissionsForMemoryProtectionKey( + int key, MemoryProtectionKeyPermission permissions) { + if (key == kNoMemoryProtectionKey) return false; + +#if defined(V8_OS_LINUX) && defined(V8_HOST_ARCH_X64) + typedef int (*pkey_set_t)(int, unsigned int); + static auto* pkey_set = bit_cast<pkey_set_t>(dlsym(RTLD_DEFAULT, "pkey_set")); + // If a valid key was allocated, {pkey_set()} must also be available. + DCHECK_NOT_NULL(pkey_set); + + int ret = pkey_set(key, permissions); + + return ret == /* success */ 0; +#else + // On platforms without PKU support, we should have already returned because + // the key must be {kNoMemoryProtectionKey}. + UNREACHABLE(); +#endif +} + +} // namespace wasm +} // namespace internal +} // namespace v8 diff --git a/deps/v8/src/wasm/memory-protection-key.h b/deps/v8/src/wasm/memory-protection-key.h new file mode 100644 index 0000000000..9f9a200cdf --- /dev/null +++ b/deps/v8/src/wasm/memory-protection-key.h @@ -0,0 +1,90 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#if !V8_ENABLE_WEBASSEMBLY +#error This header should only be included if WebAssembly is enabled. +#endif // !V8_ENABLE_WEBASSEMBLY + +#ifndef V8_WASM_MEMORY_PROTECTION_KEY_H_ +#define V8_WASM_MEMORY_PROTECTION_KEY_H_ + +#if defined(V8_OS_LINUX) && defined(V8_HOST_ARCH_X64) +#include <sys/mman.h> // For STATIC_ASSERT of permission values. +#undef MAP_TYPE // Conflicts with MAP_TYPE in Torque-generated instance-types.h +#endif + +#include "include/v8-platform.h" +#include "src/base/address-region.h" + +namespace v8 { +namespace internal { +namespace wasm { + +// TODO(dlehmann): Move this to base/platform/platform.h {OS} (lower-level API) +// and {base::PageAllocator} (higher-level, exported API) once the API is more +// stable and we have converged on a better design (e.g., typed class wrapper +// around int memory protection key). + +// Sentinel value if there is no PKU support or allocation of a key failed. +// This is also the return value on an error of pkey_alloc() and has the +// benefit that calling pkey_mprotect() with -1 behaves the same as regular +// mprotect(). +constexpr int kNoMemoryProtectionKey = -1; + +// Permissions for memory protection keys on top of the page's permissions. +// NOTE: Since there is no executable bit, the executable permission cannot be +// withdrawn by memory protection keys. +enum MemoryProtectionKeyPermission { + kNoRestrictions = 0, + kDisableAccess = 1, + kDisableWrite = 2, +}; + +// If sys/mman.h has PKEY support (on newer Linux distributions), ensure that +// our definitions of the permissions is consistent with the ones in glibc. +#if defined(PKEY_DISABLE_ACCESS) +STATIC_ASSERT(kDisableAccess == PKEY_DISABLE_ACCESS); +STATIC_ASSERT(kDisableWrite == PKEY_DISABLE_WRITE); +#endif + +// Allocates a memory protection key on platforms with PKU support, returns +// {kNoMemoryProtectionKey} on platforms without support or when allocation +// failed at runtime. +int AllocateMemoryProtectionKey(); + +// Frees the given memory protection key, to make it available again for the +// next call to {AllocateMemoryProtectionKey()}. Note that this does NOT +// invalidate access rights to pages that are still tied to that key. That is, +// if the key is reused and pages with that key are still accessable, this might +// be a security issue. See +// https://www.gnu.org/software/libc/manual/html_mono/libc.html#Memory-Protection-Keys +void FreeMemoryProtectionKey(int key); + +// Associates a memory protection {key} with the given {region}. +// If {key} is {kNoMemoryProtectionKey} this behaves like "plain" +// {SetPermissions()} and associates the default key to the region. That is, +// explicitly calling with {kNoMemoryProtectionKey} can be used to disassociate +// any protection key from a region. This also means "plain" {SetPermissions()} +// disassociates the key from a region, making the key's access restrictions +// irrelevant/inactive for that region. +// Returns true if changing permissions and key was successful. (Returns a bool +// to be consistent with {SetPermissions()}). +// The {page_permissions} are the permissions of the page, not the key. For +// changing the permissions of the key, use +// {SetPermissionsForMemoryProtectionKey()} instead. +bool SetPermissionsAndMemoryProtectionKey( + PageAllocator* page_allocator, base::AddressRegion region, + PageAllocator::Permission page_permissions, int key); + +// Set the key's permissions and return whether this was successful. +// Returns false on platforms without PKU support or when the operation failed, +// e.g., because the key was invalid. +bool SetPermissionsForMemoryProtectionKey( + int key, MemoryProtectionKeyPermission permissions); + +} // namespace wasm +} // namespace internal +} // namespace v8 + +#endif // V8_WASM_MEMORY_PROTECTION_KEY_H_ diff --git a/deps/v8/src/wasm/memory-tracing.cc b/deps/v8/src/wasm/memory-tracing.cc index 0d88c4b461..68310a03f3 100644 --- a/deps/v8/src/wasm/memory-tracing.cc +++ b/deps/v8/src/wasm/memory-tracing.cc @@ -50,7 +50,7 @@ void TraceMemoryOperation(base::Optional<ExecutionTier> tier, } const char* eng = tier.has_value() ? ExecutionTierToString(tier.value()) : "?"; - printf("%-11s func:%6d+0x%-6x%s %016" PRIuPTR " val: %s\n", eng, func_index, + printf("%-11s func:%6d:0x%-6x%s %016" PRIuPTR " val: %s\n", eng, func_index, position, info->is_store ? " store to" : "load from", info->offset, value.begin()); } diff --git a/deps/v8/src/wasm/module-compiler.cc b/deps/v8/src/wasm/module-compiler.cc index 3b1d8750ba..4742a85070 100644 --- a/deps/v8/src/wasm/module-compiler.cc +++ b/deps/v8/src/wasm/module-compiler.cc @@ -32,7 +32,6 @@ #include "src/wasm/wasm-js.h" #include "src/wasm/wasm-limits.h" #include "src/wasm/wasm-objects-inl.h" -#include "src/wasm/wasm-opcodes.h" #include "src/wasm/wasm-result.h" #include "src/wasm/wasm-serialization.h" @@ -531,17 +530,19 @@ class CompilationStateImpl { CompilationStateImpl(const std::shared_ptr<NativeModule>& native_module, std::shared_ptr<Counters> async_counters); ~CompilationStateImpl() { - DCHECK(compile_job_->IsValid()); - compile_job_->CancelAndDetach(); + if (compile_job_->IsValid()) compile_job_->CancelAndDetach(); } // Call right after the constructor, after the {compilation_state_} field in // the {NativeModule} has been initialized. void InitCompileJob(WasmEngine*); - // Cancel all background compilation, without waiting for compile tasks to - // finish. - void CancelCompilation(); + // {kCancelUnconditionally}: Cancel all compilation. + // {kCancelInitialCompilation}: Cancel all compilation if initial (baseline) + // compilation is not finished yet. + enum CancellationPolicy { kCancelUnconditionally, kCancelInitialCompilation }; + void CancelCompilation(CancellationPolicy); + bool cancelled() const; // Initialize compilation progress. Set compilation tiers to expect for @@ -767,7 +768,6 @@ void UpdateFeatureUseCounts(Isolate* isolate, const WasmFeatures& detected) { using Feature = v8::Isolate::UseCounterFeature; constexpr static std::pair<WasmFeature, Feature> kUseCounters[] = { {kFeature_reftypes, Feature::kWasmRefTypes}, - {kFeature_mv, Feature::kWasmMultiValue}, {kFeature_simd, Feature::kWasmSimdOpcodes}, {kFeature_threads, Feature::kWasmThreadOpcodes}, {kFeature_eh, Feature::kWasmExceptionHandling}}; @@ -791,7 +791,14 @@ void CompilationState::InitCompileJob(WasmEngine* engine) { Impl(this)->InitCompileJob(engine); } -void CompilationState::CancelCompilation() { Impl(this)->CancelCompilation(); } +void CompilationState::CancelCompilation() { + Impl(this)->CancelCompilation(CompilationStateImpl::kCancelUnconditionally); +} + +void CompilationState::CancelInitialCompilation() { + Impl(this)->CancelCompilation( + CompilationStateImpl::kCancelInitialCompilation); +} void CompilationState::SetError() { Impl(this)->SetError(); } @@ -1202,16 +1209,25 @@ CompilationExecutionResult ExecuteJSToWasmWrapperCompilationUnits( std::shared_ptr<JSToWasmWrapperCompilationUnit> wrapper_unit = nullptr; int num_processed_wrappers = 0; + OperationsBarrier::Token wrapper_compilation_token; + Isolate* isolate; + { BackgroundCompileScope compile_scope(native_module); if (compile_scope.cancelled()) return kYield; wrapper_unit = compile_scope.compilation_state() ->GetNextJSToWasmWrapperCompilationUnit(); if (!wrapper_unit) return kNoMoreUnits; + isolate = wrapper_unit->isolate(); + wrapper_compilation_token = + compile_scope.native_module()->engine()->StartWrapperCompilation( + isolate); + if (!wrapper_compilation_token) return kNoMoreUnits; } TRACE_EVENT0("v8.wasm", "wasm.JSToWasmWrapperCompilation"); while (true) { + DCHECK_EQ(isolate, wrapper_unit->isolate()); wrapper_unit->Execute(); ++num_processed_wrappers; bool yield = delegate && delegate->ShouldYield(); @@ -1829,10 +1845,10 @@ std::shared_ptr<StreamingDecoder> AsyncCompileJob::CreateStreamingDecoder() { AsyncCompileJob::~AsyncCompileJob() { // Note: This destructor always runs on the foreground thread of the isolate. background_task_manager_.CancelAndWait(); - // If the runtime objects were not created yet, then initial compilation did - // not finish yet. In this case we can abort compilation. - if (native_module_ && module_object_.is_null()) { - Impl(native_module_->compilation_state())->CancelCompilation(); + // If initial compilation did not finish yet we can abort it. + if (native_module_) { + Impl(native_module_->compilation_state()) + ->CancelCompilation(CompilationStateImpl::kCancelInitialCompilation); } // Tell the streaming decoder that the AsyncCompileJob is not available // anymore. @@ -2459,7 +2475,8 @@ void AsyncStreamingProcessor::FinishAsyncCompileJobWithError( // Check if there is already a CompiledModule, in which case we have to clean // up the CompilationStateImpl as well. if (job_->native_module_) { - Impl(job_->native_module_->compilation_state())->CancelCompilation(); + Impl(job_->native_module_->compilation_state()) + ->CancelCompilation(CompilationStateImpl::kCancelUnconditionally); job_->DoSync<AsyncCompileJob::DecodeFail, AsyncCompileJob::kUseExistingForegroundTask>(error); @@ -2783,13 +2800,22 @@ void CompilationStateImpl::InitCompileJob(WasmEngine* engine) { async_counters_)); } -void CompilationStateImpl::CancelCompilation() { +void CompilationStateImpl::CancelCompilation( + CompilationStateImpl::CancellationPolicy cancellation_policy) { + base::MutexGuard callbacks_guard(&callbacks_mutex_); + + if (cancellation_policy == kCancelInitialCompilation && + finished_events_.contains( + CompilationEvent::kFinishedBaselineCompilation)) { + // Initial compilation already finished; cannot be cancelled. + return; + } + // std::memory_order_relaxed is sufficient because no other state is // synchronized with |compile_cancelled_|. compile_cancelled_.store(true, std::memory_order_relaxed); // No more callbacks after abort. - base::MutexGuard callbacks_guard(&callbacks_mutex_); callbacks_.clear(); } @@ -3040,7 +3066,8 @@ void CompilationStateImpl::FinalizeJSToWasmWrappers( js_to_wasm_wrapper_units_.size()); CodeSpaceMemoryModificationScope modification_scope(isolate->heap()); for (auto& unit : js_to_wasm_wrapper_units_) { - Handle<Code> code = unit->Finalize(isolate); + DCHECK_EQ(isolate, unit->isolate()); + Handle<Code> code = unit->Finalize(); int wrapper_index = GetExportWrapperIndex(module, unit->sig(), unit->is_import()); (*export_wrappers_out)->set(wrapper_index, *code); @@ -3090,7 +3117,8 @@ void CompilationStateImpl::OnFinishedUnits(Vector<WasmCode*> code_vector) { DCHECK_NOT_NULL(code); DCHECK_LT(code->index(), native_module_->num_functions()); - if (code->index() < native_module_->num_imported_functions()) { + if (code->index() < + static_cast<int>(native_module_->num_imported_functions())) { // Import wrapper. DCHECK_EQ(code->tier(), ExecutionTier::kTurbofan); outstanding_baseline_units_--; @@ -3449,7 +3477,8 @@ void CompileJsToWasmWrappers(Isolate* isolate, const WasmModule* module, for (auto& pair : compilation_units) { JSToWasmWrapperKey key = pair.first; JSToWasmWrapperCompilationUnit* unit = pair.second.get(); - Handle<Code> code = unit->Finalize(isolate); + DCHECK_EQ(isolate, unit->isolate()); + Handle<Code> code = unit->Finalize(); int wrapper_index = GetExportWrapperIndex(module, &key.second, key.first); (*export_wrappers_out)->set(wrapper_index, *code); RecordStats(*code, isolate->counters()); diff --git a/deps/v8/src/wasm/module-decoder.cc b/deps/v8/src/wasm/module-decoder.cc index f2c77efb23..be4d8ef833 100644 --- a/deps/v8/src/wasm/module-decoder.cc +++ b/deps/v8/src/wasm/module-decoder.cc @@ -34,6 +34,7 @@ namespace { constexpr char kNameString[] = "name"; constexpr char kSourceMappingURLString[] = "sourceMappingURL"; constexpr char kCompilationHintsString[] = "compilationHints"; +constexpr char kBranchHintsString[] = "branchHints"; constexpr char kDebugInfoString[] = ".debug_info"; constexpr char kExternalDebugInfoString[] = "external_debug_info"; @@ -95,6 +96,8 @@ const char* SectionName(SectionCode code) { return kExternalDebugInfoString; case kCompilationHintsSectionCode: return kCompilationHintsString; + case kBranchHintsSectionCode: + return kBranchHintsString; default: return "<unknown>"; } @@ -144,6 +147,7 @@ SectionCode IdentifyUnknownSectionInternal(Decoder* decoder) { {StaticCharVector(kNameString), kNameSectionCode}, {StaticCharVector(kSourceMappingURLString), kSourceMappingURLSectionCode}, {StaticCharVector(kCompilationHintsString), kCompilationHintsSectionCode}, + {StaticCharVector(kBranchHintsString), kBranchHintsSectionCode}, {StaticCharVector(kDebugInfoString), kDebugInfoSectionCode}, {StaticCharVector(kExternalDebugInfoString), kExternalDebugInfoSectionCode}}; @@ -432,6 +436,13 @@ class ModuleDecoderImpl : public Decoder { // first occurrence after function section and before code section are // ignored. break; + case kBranchHintsSectionCode: + // TODO(yuri): report out of place branch hints section as a + // warning. + // Be lenient with placement of compilation hints section. All except + // first occurrence after function section and before code section are + // ignored. + break; default: next_ordered_section_ = section_code + 1; break; @@ -498,6 +509,15 @@ class ModuleDecoderImpl : public Decoder { consume_bytes(static_cast<uint32_t>(end_ - start_), nullptr); } break; + case kBranchHintsSectionCode: + if (enabled_features_.has_branch_hinting()) { + DecodeBranchHintsSection(); + } else { + // Ignore this section when feature was disabled. It is an optional + // custom section anyways. + consume_bytes(static_cast<uint32_t>(end_ - start_), nullptr); + } + break; case kDataCountSectionCode: DecodeDataCountSection(); break; @@ -884,50 +904,25 @@ class ModuleDecoderImpl : public Decoder { uint32_t element_count = consume_count("element count", FLAG_wasm_max_table_size); - for (uint32_t i = 0; ok() && i < element_count; ++i) { - const byte* pos = pc(); - - WasmElemSegment::Status status; - bool functions_as_elements; - uint32_t table_index; - WasmInitExpr offset; - ValueType type = kWasmBottom; - consume_element_segment_header(&status, &functions_as_elements, &type, - &table_index, &offset); + for (uint32_t i = 0; i < element_count; ++i) { + bool expressions_as_elements; + WasmElemSegment segment = + consume_element_segment_header(&expressions_as_elements); if (failed()) return; - DCHECK_NE(type, kWasmBottom); - - if (status == WasmElemSegment::kStatusActive) { - if (table_index >= module_->tables.size()) { - errorf(pos, "out of bounds table index %u", table_index); - break; - } - if (!IsSubtypeOf(type, module_->tables[table_index].type, - this->module_.get())) { - errorf(pos, - "Invalid element segment. Table %u is not a super-type of %s", - table_index, type.name().c_str()); - break; - } - } + DCHECK_NE(segment.type, kWasmBottom); uint32_t num_elem = consume_count("number of elements", max_table_init_entries()); - if (status == WasmElemSegment::kStatusActive) { - module_->elem_segments.emplace_back(table_index, std::move(offset)); - } else { - module_->elem_segments.emplace_back( - status == WasmElemSegment::kStatusDeclarative); - } - WasmElemSegment* init = &module_->elem_segments.back(); - init->type = type; for (uint32_t j = 0; j < num_elem; j++) { - uint32_t index = functions_as_elements ? consume_element_expr() - : consume_element_func_index(); - if (failed()) break; - init->entries.push_back(index); + WasmInitExpr init = + expressions_as_elements + ? consume_element_expr() + : WasmInitExpr::RefFuncConst(consume_element_func_index()); + if (failed()) return; + segment.entries.push_back(std::move(init)); } + module_->elem_segments.push_back(std::move(segment)); } } @@ -1174,6 +1169,82 @@ class ModuleDecoderImpl : public Decoder { // consume_bytes(static_cast<uint32_t>(end_ - start_), nullptr); } + void DecodeBranchHintsSection() { + TRACE("DecodeBranchHints module+%d\n", static_cast<int>(pc_ - start_)); + if (!has_seen_unordered_section(kBranchHintsSectionCode)) { + set_seen_unordered_section(kBranchHintsSectionCode); + // Use an inner decoder so that errors don't fail the outer decoder. + Decoder inner(start_, pc_, end_, buffer_offset_); + BranchHintInfo branch_hints; + + uint32_t func_count = inner.consume_u32v("number of functions"); + // Keep track of the previous function index to validate the ordering + int64_t last_func_idx = -1; + for (uint32_t i = 0; i < func_count; i++) { + uint32_t func_idx = inner.consume_u32v("function index"); + if (int64_t(func_idx) <= last_func_idx) { + inner.errorf("Invalid function index: %d", func_idx); + break; + } + last_func_idx = func_idx; + uint8_t reserved = inner.consume_u8("reserved byte"); + if (reserved != 0x0) { + inner.errorf("Invalid reserved byte: %#x", reserved); + break; + } + uint32_t num_hints = inner.consume_u32v("number of hints"); + BranchHintMap func_branch_hints; + TRACE("DecodeBranchHints[%d] module+%d\n", func_idx, + static_cast<int>(inner.pc() - inner.start())); + // Keep track of the previous branch offset to validate the ordering + int64_t last_br_off = -1; + for (uint32_t j = 0; j < num_hints; ++j) { + uint32_t br_dir = inner.consume_u32v("branch direction"); + uint32_t br_off = inner.consume_u32v("branch instruction offset"); + if (int64_t(br_off) <= last_br_off) { + inner.errorf("Invalid branch offset: %d", br_off); + break; + } + last_br_off = br_off; + TRACE("DecodeBranchHints[%d][%d] module+%d\n", func_idx, br_off, + static_cast<int>(inner.pc() - inner.start())); + WasmBranchHint hint; + switch (br_dir) { + case 0: + hint = WasmBranchHint::kUnlikely; + break; + case 1: + hint = WasmBranchHint::kLikely; + break; + default: + hint = WasmBranchHint::kNoHint; + inner.errorf(inner.pc(), "Invalid branch hint %#x", br_dir); + break; + } + if (!inner.ok()) { + break; + } + func_branch_hints.insert(br_off, hint); + } + if (!inner.ok()) { + break; + } + branch_hints.emplace(func_idx, std::move(func_branch_hints)); + } + // Extra unexpected bytes are an error. + if (inner.more()) { + inner.errorf("Unexpected extra bytes: %d\n", + static_cast<int>(inner.pc() - inner.start())); + } + // If everything went well, accept the hints for the module. + if (inner.ok()) { + module_->branch_hints = std::move(branch_hints); + } + } + // Skip the whole branch hints section in the outer decoder. + consume_bytes(static_cast<uint32_t>(end_ - start_), nullptr); + } + void DecodeDataCountSection() { module_->num_declared_data_segments = consume_count("data segments count", kV8MaxWasmDataSegments); @@ -1911,10 +1982,8 @@ class ModuleDecoderImpl : public Decoder { std::vector<ValueType> returns; // Parse return types. - const size_t max_return_count = enabled_features_.has_mv() - ? kV8MaxWasmFunctionMultiReturns - : kV8MaxWasmFunctionReturns; - uint32_t return_count = consume_count("return count", max_return_count); + uint32_t return_count = + consume_count("return count", kV8MaxWasmFunctionReturns); if (failed()) return nullptr; for (uint32_t i = 0; ok() && i < return_count; ++i) { returns.push_back(consume_value_type()); @@ -1967,86 +2036,114 @@ class ModuleDecoderImpl : public Decoder { return attribute; } - void consume_element_segment_header(WasmElemSegment::Status* status, - bool* functions_as_elements, - ValueType* type, uint32_t* table_index, - WasmInitExpr* offset) { + WasmElemSegment consume_element_segment_header( + bool* expressions_as_elements) { const byte* pos = pc(); - uint32_t flag = consume_u32v("flag"); // The mask for the bit in the flag which indicates if the segment is - // active or not. - constexpr uint8_t kIsPassiveMask = 0x01; - // The mask for the bit in the flag which indicates if the segment has an - // explicit table index field. - constexpr uint8_t kHasTableIndexMask = 0x02; + // active or not (0 is active). + constexpr uint8_t kNonActiveMask = 1 << 0; + // The mask for the bit in the flag which indicates: + // - for active tables, if the segment has an explicit table index field. + // - for non-active tables, whether the table is declarative (vs. passive). + constexpr uint8_t kHasTableIndexOrIsDeclarativeMask = 1 << 1; // The mask for the bit in the flag which indicates if the functions of this - // segment are defined as function indices (=0) or elements(=1). - constexpr uint8_t kFunctionsAsElementsMask = 0x04; - constexpr uint8_t kFullMask = - kIsPassiveMask | kHasTableIndexMask | kFunctionsAsElementsMask; - - bool is_passive = flag & kIsPassiveMask; - if (!is_passive) { - *status = WasmElemSegment::kStatusActive; - if (module_->tables.size() == 0) { - error(pc_, "Active element sections require a table"); - } - } else if ((flag & kHasTableIndexMask)) { // Special bit combination for - // declarative segments. - *status = WasmElemSegment::kStatusDeclarative; - } else { - *status = WasmElemSegment::kStatusPassive; + // segment are defined as function indices (0) or init. expressions (1). + constexpr uint8_t kExpressionsAsElementsMask = 1 << 2; + constexpr uint8_t kFullMask = kNonActiveMask | + kHasTableIndexOrIsDeclarativeMask | + kExpressionsAsElementsMask; + + uint32_t flag = consume_u32v("flag"); + if ((flag & kFullMask) != flag) { + errorf(pos, "illegal flag value %u. Must be between 0 and 7", flag); + return {}; } - *functions_as_elements = flag & kFunctionsAsElementsMask; - bool has_table_index = (flag & kHasTableIndexMask) && - *status == WasmElemSegment::kStatusActive; - if (*status == WasmElemSegment::kStatusDeclarative && + const WasmElemSegment::Status status = + (flag & kNonActiveMask) ? (flag & kHasTableIndexOrIsDeclarativeMask) + ? WasmElemSegment::kStatusDeclarative + : WasmElemSegment::kStatusPassive + : WasmElemSegment::kStatusActive; + if (status == WasmElemSegment::kStatusDeclarative && !enabled_features_.has_reftypes()) { error( "Declarative element segments require --experimental-wasm-reftypes"); - return; - } - if ((flag & kFullMask) != flag) { - errorf(pos, "illegal flag value %u. Must be between 0 and 7", flag); + return {}; } + const bool is_active = status == WasmElemSegment::kStatusActive; - if (has_table_index) { - *table_index = consume_u32v("table index"); - } else { - *table_index = 0; - } + *expressions_as_elements = flag & kExpressionsAsElementsMask; - if (*status == WasmElemSegment::kStatusActive) { - *offset = consume_init_expr(module_.get(), kWasmI32, - module_.get()->globals.size()); - if (offset->kind() == WasmInitExpr::kNone) { - // Failed to parse offset initializer, return early. - return; - } + const bool has_table_index = + is_active && (flag & kHasTableIndexOrIsDeclarativeMask); + uint32_t table_index = has_table_index ? consume_u32v("table index") : 0; + if (is_active && table_index >= module_->tables.size()) { + errorf(pos, "out of bounds%s table index %u", + has_table_index ? " implicit" : "", table_index); + return {}; } - - if (*status == WasmElemSegment::kStatusActive && !has_table_index) { - // Active segments without table indices are a special case for backwards - // compatibility. These cases have an implicit element kind or element - // type, so we are done already with the segment header. - *type = kWasmFuncRef; - return; + ValueType table_type = + is_active ? module_->tables[table_index].type : kWasmBottom; + + WasmInitExpr offset; + if (is_active) { + offset = consume_init_expr(module_.get(), kWasmI32, + module_.get()->globals.size()); + // Failed to parse offset initializer, return early. + if (failed()) return {}; + } + + // Denotes an active segment without table index, type, or element kind. + const bool backwards_compatible_mode = + is_active && !(flag & kHasTableIndexOrIsDeclarativeMask); + ValueType type; + if (*expressions_as_elements) { + type = + backwards_compatible_mode ? kWasmFuncRef : consume_reference_type(); + if (is_active && !IsSubtypeOf(type, table_type, this->module_.get())) { + errorf(pos, + "Element segment of type %s is not a subtype of referenced " + "table %u (of type %s)", + type.name().c_str(), table_index, table_type.name().c_str()); + return {}; + } + } else { + if (!backwards_compatible_mode) { + // We have to check that there is an element kind of type Function. All + // other element kinds are not valid yet. + uint8_t val = consume_u8("element kind"); + if (static_cast<ImportExportKindCode>(val) != kExternalFunction) { + errorf(pos, "illegal element kind 0x%x. Must be 0x%x", val, + kExternalFunction); + return {}; + } + } + if (!is_active) { + // Declarative and passive segments without explicit type are funcref. + type = kWasmFuncRef; + } else { + type = table_type; + // Active segments with function indices must reference a function + // table. TODO(7748): Add support for anyref tables when we have them. + if (!IsSubtypeOf(table_type, kWasmFuncRef, this->module_.get())) { + errorf(pos, + "An active element segment with function indices as elements " + "must reference a table of %s. Instead, table %u of type %s " + "is referenced.", + enabled_features_.has_typed_funcref() + ? "a subtype of type funcref" + : "type funcref", + table_index, table_type.name().c_str()); + return {}; + } + } } - if (*functions_as_elements) { - *type = consume_reference_type(); + if (is_active) { + return {type, table_index, std::move(offset)}; } else { - // We have to check that there is an element kind of type Function. All - // other element kinds are not valid yet. - uint8_t val = consume_u8("element kind"); - ImportExportKindCode kind = static_cast<ImportExportKindCode>(val); - if (kind != kExternalFunction) { - errorf(pos, "illegal element kind %x. Must be 0x00", val); - return; - } - *type = kWasmFuncRef; + return {type, status == WasmElemSegment::kStatusDeclarative}; } } @@ -2091,32 +2188,49 @@ class ModuleDecoderImpl : public Decoder { func->declared = true; DCHECK_NE(func, nullptr); DCHECK_EQ(index, func->func_index); - DCHECK_NE(index, WasmElemSegment::kNullIndex); return index; } - uint32_t consume_element_expr() { - uint32_t index = WasmElemSegment::kNullIndex; + // TODO(manoskouk): When reftypes lands, remove this and use + // consume_init_expr() instead. + WasmInitExpr consume_element_expr() { uint8_t opcode = consume_u8("element opcode"); - if (failed()) return index; + if (failed()) return {}; switch (opcode) { case kExprRefNull: { HeapTypeImmediate<kFullValidation> imm(WasmFeatures::All(), this, this->pc(), module_.get()); consume_bytes(imm.length, "ref.null immediate"); - index = WasmElemSegment::kNullIndex; - break; + expect_u8("end opcode", kExprEnd); + return WasmInitExpr::RefNullConst(imm.type.representation()); + } + case kExprRefFunc: { + uint32_t index = consume_element_func_index(); + if (failed()) return {}; + expect_u8("end opcode", kExprEnd); + return WasmInitExpr::RefFuncConst(index); + } + case kExprGlobalGet: { + if (!enabled_features_.has_reftypes()) { + errorf( + "Unexpected opcode 0x%x in element. Enable with " + "--experimental-wasm-reftypes", + kExprGlobalGet); + return {}; + } + uint32_t index = this->consume_u32v("global index"); + if (failed()) return {}; + if (index >= module_->globals.size()) { + errorf("Out-of-bounds global index %d", index); + return {}; + } + expect_u8("end opcode", kExprEnd); + return WasmInitExpr::GlobalGet(index); } - case kExprRefFunc: - index = consume_element_func_index(); - if (failed()) return index; - break; default: error("invalid opcode in element"); - break; + return {}; } - expect_u8("end opcode", kExprEnd); - return index; } }; @@ -2374,8 +2488,7 @@ bool FindNameSection(Decoder* decoder) { } // namespace void DecodeFunctionNames(const byte* module_start, const byte* module_end, - std::unordered_map<uint32_t, WireBytesRef>* names, - const Vector<const WasmExport> export_table) { + std::unordered_map<uint32_t, WireBytesRef>* names) { DCHECK_NOT_NULL(names); DCHECK(names->empty()); @@ -2407,13 +2520,6 @@ void DecodeFunctionNames(const byte* module_start, const byte* module_end, } } } - - // Extract from export table. - for (const WasmExport& exp : export_table) { - if (exp.kind == kExternalFunction && names->count(exp.index) == 0) { - names->insert(std::make_pair(exp.index, exp.name)); - } - } } NameMap DecodeNameMap(Vector<const uint8_t> module_bytes, diff --git a/deps/v8/src/wasm/module-decoder.h b/deps/v8/src/wasm/module-decoder.h index 2d33f51f31..2af2760ab4 100644 --- a/deps/v8/src/wasm/module-decoder.h +++ b/deps/v8/src/wasm/module-decoder.h @@ -187,13 +187,11 @@ V8_EXPORT_PRIVATE std::vector<CustomSectionOffset> DecodeCustomSections( // function. AsmJsOffsetsResult DecodeAsmJsOffsets(Vector<const uint8_t> encoded_offsets); -// Decode the function names from the name section and also look at export -// table. Returns the result as an unordered map. Only names with valid utf8 -// encoding are stored and conflicts are resolved by choosing the last name -// read. +// Decode the function names from the name section. Returns the result as an +// unordered map. Only names with valid utf8 encoding are stored and conflicts +// are resolved by choosing the last name read. void DecodeFunctionNames(const byte* module_start, const byte* module_end, - std::unordered_map<uint32_t, WireBytesRef>* names, - const Vector<const WasmExport> export_table); + std::unordered_map<uint32_t, WireBytesRef>* names); // Decode the requested subsection of the name section. // The result will be empty if no name section is present. On encountering an diff --git a/deps/v8/src/wasm/module-instantiate.cc b/deps/v8/src/wasm/module-instantiate.cc index f64a657eb8..7945e79849 100644 --- a/deps/v8/src/wasm/module-instantiate.cc +++ b/deps/v8/src/wasm/module-instantiate.cc @@ -20,6 +20,7 @@ #include "src/wasm/wasm-module.h" #include "src/wasm/wasm-objects-inl.h" #include "src/wasm/wasm-subtyping.h" +#include "src/wasm/wasm-value.h" #define TRACE(...) \ do { \ @@ -122,16 +123,17 @@ Handle<Map> CreateStructMap(Isolate* isolate, const WasmModule* module, int struct_index, Handle<Map> opt_rtt_parent) { const wasm::StructType* type = module->struct_type(struct_index); const int inobject_properties = 0; - DCHECK_LE(type->total_fields_size(), kMaxInt - WasmStruct::kHeaderSize); - const int instance_size = - WasmStruct::kHeaderSize + static_cast<int>(type->total_fields_size()); + // We have to use the variable size sentinel because the instance size + // stored directly in a Map is capped at 255 pointer sizes. + const int map_instance_size = kVariableSizeSentinel; + const int real_instance_size = WasmStruct::Size(type); const InstanceType instance_type = WASM_STRUCT_TYPE; // TODO(jkummerow): If NO_ELEMENTS were supported, we could use that here. const ElementsKind elements_kind = TERMINAL_FAST_ELEMENTS_KIND; Handle<WasmTypeInfo> type_info = isolate->factory()->NewWasmTypeInfo( - reinterpret_cast<Address>(type), opt_rtt_parent); + reinterpret_cast<Address>(type), opt_rtt_parent, real_instance_size); Handle<Map> map = isolate->factory()->NewMap( - instance_type, instance_size, elements_kind, inobject_properties); + instance_type, map_instance_size, elements_kind, inobject_properties); map->set_wasm_type_info(*type_info); return map; } @@ -141,10 +143,12 @@ Handle<Map> CreateArrayMap(Isolate* isolate, const WasmModule* module, const wasm::ArrayType* type = module->array_type(array_index); const int inobject_properties = 0; const int instance_size = kVariableSizeSentinel; + // Wasm Arrays don't have a static instance size. + const int cached_instance_size = 0; const InstanceType instance_type = WASM_ARRAY_TYPE; const ElementsKind elements_kind = TERMINAL_FAST_ELEMENTS_KIND; Handle<WasmTypeInfo> type_info = isolate->factory()->NewWasmTypeInfo( - reinterpret_cast<Address>(type), opt_rtt_parent); + reinterpret_cast<Address>(type), opt_rtt_parent, cached_instance_size); Handle<Map> map = isolate->factory()->NewMap( instance_type, instance_size, elements_kind, inobject_properties); map->set_wasm_type_info(*type_info); @@ -615,7 +619,7 @@ MaybeHandle<WasmInstanceObject> InstanceBuilder::Build() { // list. //-------------------------------------------------------------------------- if (enabled_.has_gc()) { - Handle<FixedArray> maps = isolate_->factory()->NewUninitializedFixedArray( + Handle<FixedArray> maps = isolate_->factory()->NewFixedArray( static_cast<int>(module_->type_kinds.size())); for (int map_index = 0; map_index < static_cast<int>(module_->type_kinds.size()); @@ -1325,11 +1329,15 @@ bool InstanceBuilder::ProcessImportedGlobal(Handle<WasmInstanceObject> instance, // TODO(wasm): Still observable if Function.prototype.valueOf or friends // are patched, we might need to check for that as well. if (value->IsJSFunction()) value = isolate_->factory()->nan_value(); - if (value->IsPrimitive() && !value->IsSymbol()) { - if (global.type == kWasmI32) { - value = Object::ToInt32(isolate_, value).ToHandleChecked(); - } else { - value = Object::ToNumber(isolate_, value).ToHandleChecked(); + if (value->IsPrimitive()) { + MaybeHandle<Object> converted = global.type == kWasmI32 + ? Object::ToInt32(isolate_, value) + : Object::ToNumber(isolate_, value); + if (!converted.ToHandle(&value)) { + // Conversion is known to fail for Symbols and BigInts. + ReportLinkError("global import must be a number", import_index, + module_name, import_name); + return false; } } } @@ -1903,10 +1911,10 @@ bool LoadElemSegmentImpl(Isolate* isolate, Handle<WasmInstanceObject> instance, const WasmModule* module = instance->module(); for (size_t i = 0; i < count; ++i) { - uint32_t func_index = elem_segment.entries[src + i]; + const WasmInitExpr* init = &elem_segment.entries[src + i]; int entry_index = static_cast<int>(dst + i); - if (func_index == WasmElemSegment::kNullIndex) { + if (init->kind() == WasmInitExpr::kRefNullConst) { if (IsSubtypeOf(table_object->type(), kWasmFuncRef, module)) { IndirectFunctionTableEntry(instance, table_index, entry_index).clear(); } @@ -1915,6 +1923,18 @@ bool LoadElemSegmentImpl(Isolate* isolate, Handle<WasmInstanceObject> instance, continue; } + if (init->kind() == WasmInitExpr::kGlobalGet) { + WasmTableObject::Set( + isolate, table_object, entry_index, + WasmInstanceObject::GetGlobalValue( + instance, module->globals[init->immediate().index]) + .to_ref()); + continue; + } + + DCHECK_EQ(init->kind(), WasmInitExpr::kRefFuncConst); + + const uint32_t func_index = init->immediate().index; const WasmFunction* function = &module->functions[func_index]; // Update the local dispatch table first if necessary. diff --git a/deps/v8/src/wasm/value-type.h b/deps/v8/src/wasm/value-type.h index 983e2090b6..7895a731f6 100644 --- a/deps/v8/src/wasm/value-type.h +++ b/deps/v8/src/wasm/value-type.h @@ -94,7 +94,7 @@ class HeapType { } explicit constexpr HeapType(Representation repr) : representation_(repr) { - CONSTEXPR_DCHECK(is_bottom() || is_valid()); + DCHECK(is_bottom() || is_valid()); } explicit constexpr HeapType(uint32_t repr) : HeapType(static_cast<Representation>(repr)) {} @@ -116,7 +116,7 @@ class HeapType { constexpr Representation representation() const { return representation_; } constexpr uint32_t ref_index() const { - CONSTEXPR_DCHECK(is_index()); + DCHECK(is_index()); return representation_; } @@ -201,7 +201,7 @@ constexpr int element_size_log2(ValueKind kind) { }; int size_log_2 = kElementSizeLog2[kind]; - CONSTEXPR_DCHECK(size_log_2 >= 0); + DCHECK_LE(0, size_log_2); return size_log_2; } @@ -214,7 +214,7 @@ constexpr int element_size_bytes(ValueKind kind) { }; int size = kElementSize[kind]; - CONSTEXPR_DCHECK(size > 0); + DCHECK_LT(0, size); return size; } @@ -240,7 +240,7 @@ constexpr const char* name(ValueKind kind) { } constexpr MachineType machine_type(ValueKind kind) { - CONSTEXPR_DCHECK(kBottom != kind); + DCHECK_NE(kBottom, kind); constexpr MachineType kMachineType[] = { #define MACH_TYPE(kind, log2Size, code, machineType, ...) \ @@ -262,7 +262,7 @@ constexpr bool is_rtt(ValueKind kind) { } constexpr bool is_defaultable(ValueKind kind) { - CONSTEXPR_DCHECK(kind != kBottom && kind != kVoid); + DCHECK(kind != kBottom && kind != kVoid); return kind != kRef && !is_rtt(kind); } @@ -277,11 +277,11 @@ class ValueType { /******************************* Constructors *******************************/ constexpr ValueType() : bit_field_(KindField::encode(kVoid)) {} static constexpr ValueType Primitive(ValueKind kind) { - CONSTEXPR_DCHECK(kind == kBottom || kind <= kI16); + DCHECK(kind == kBottom || kind <= kI16); return ValueType(KindField::encode(kind)); } static constexpr ValueType Ref(uint32_t heap_type, Nullability nullability) { - CONSTEXPR_DCHECK(HeapType(heap_type).is_valid()); + DCHECK(HeapType(heap_type).is_valid()); return ValueType( KindField::encode(nullability == kNullable ? kOptRef : kRef) | HeapTypeField::encode(heap_type)); @@ -291,14 +291,14 @@ class ValueType { } static constexpr ValueType Rtt(uint32_t type_index) { - CONSTEXPR_DCHECK(HeapType(type_index).is_index()); + DCHECK(HeapType(type_index).is_index()); return ValueType(KindField::encode(kRtt) | HeapTypeField::encode(type_index)); } static constexpr ValueType Rtt(uint32_t type_index, uint8_t inheritance_depth) { - CONSTEXPR_DCHECK(HeapType(type_index).is_index()); + DCHECK(HeapType(type_index).is_index()); return ValueType(KindField::encode(kRttWithDepth) | HeapTypeField::encode(type_index) | DepthField::encode(inheritance_depth)); @@ -340,27 +340,34 @@ class ValueType { return is_packed() ? Primitive(kI32) : *this; } + // Returns the version of this type that does not allow null values. Handles + // bottom. + constexpr ValueType AsNonNull() const { + DCHECK(is_object_reference() || is_bottom()); + return is_nullable() ? Ref(heap_type(), kNonNullable) : *this; + } + /***************************** Field Accessors ******************************/ constexpr ValueKind kind() const { return KindField::decode(bit_field_); } constexpr HeapType::Representation heap_representation() const { - CONSTEXPR_DCHECK(is_object_reference()); + DCHECK(is_object_reference()); return static_cast<HeapType::Representation>( HeapTypeField::decode(bit_field_)); } constexpr HeapType heap_type() const { - CONSTEXPR_DCHECK(is_object_reference()); + DCHECK(is_object_reference()); return HeapType(heap_representation()); } constexpr uint8_t depth() const { - CONSTEXPR_DCHECK(has_depth()); + DCHECK(has_depth()); return DepthField::decode(bit_field_); } constexpr uint32_t ref_index() const { - CONSTEXPR_DCHECK(has_index()); + DCHECK(has_index()); return HeapTypeField::decode(bit_field_); } constexpr Nullability nullability() const { - CONSTEXPR_DCHECK(is_object_reference()); + DCHECK(is_object_reference()); return kind() == kOptRef ? kNullable : kNonNullable; } @@ -426,7 +433,7 @@ class ValueType { // (e.g., Ref(HeapType::kFunc, kNullable).value_type_code will return // kFuncrefCode and not kOptRefCode). constexpr ValueTypeCode value_type_code() const { - CONSTEXPR_DCHECK(kind() != kBottom); + DCHECK_NE(kBottom, kind()); switch (kind()) { case kOptRef: switch (heap_representation()) { diff --git a/deps/v8/src/wasm/wasm-code-manager.cc b/deps/v8/src/wasm/wasm-code-manager.cc index d9225103bb..8907cbab31 100644 --- a/deps/v8/src/wasm/wasm-code-manager.cc +++ b/deps/v8/src/wasm/wasm-code-manager.cc @@ -26,6 +26,7 @@ #include "src/wasm/compilation-environment.h" #include "src/wasm/function-compiler.h" #include "src/wasm/jump-table-assembler.h" +#include "src/wasm/memory-protection-key.h" #include "src/wasm/module-compiler.h" #include "src/wasm/wasm-debug.h" #include "src/wasm/wasm-engine.h" @@ -225,8 +226,8 @@ void WasmCode::LogCode(Isolate* isolate, const char* source_url, ModuleWireBytes wire_bytes(native_module_->wire_bytes()); const WasmModule* module = native_module_->module(); - WireBytesRef name_ref = module->lazily_generated_names.LookupFunctionName( - wire_bytes, index(), VectorOf(module->export_table)); + WireBytesRef name_ref = + module->lazily_generated_names.LookupFunctionName(wire_bytes, index()); WasmName name = wire_bytes.GetNameOrNull(name_ref); const WasmDebugSymbols& debug_symbols = module->debug_symbols; @@ -502,28 +503,14 @@ int WasmCode::GetSourcePositionBefore(int offset) { return position; } -WasmCodeAllocator::OptionalLock::~OptionalLock() { - if (allocator_) allocator_->mutex_.Unlock(); -} - -void WasmCodeAllocator::OptionalLock::Lock(WasmCodeAllocator* allocator) { - DCHECK(!is_locked()); - allocator_ = allocator; - allocator->mutex_.Lock(); -} - // static constexpr size_t WasmCodeAllocator::kMaxCodeSpaceSize; WasmCodeAllocator::WasmCodeAllocator(WasmCodeManager* code_manager, - VirtualMemory code_space, std::shared_ptr<Counters> async_counters) : code_manager_(code_manager), - free_code_space_(code_space.region()), async_counters_(std::move(async_counters)) { owned_code_space_.reserve(4); - owned_code_space_.emplace_back(std::move(code_space)); - async_counters_->wasm_module_num_code_spaces()->AddSample(1); } WasmCodeAllocator::~WasmCodeAllocator() { @@ -531,9 +518,12 @@ WasmCodeAllocator::~WasmCodeAllocator() { committed_code_space()); } -void WasmCodeAllocator::Init(NativeModule* native_module) { - DCHECK_EQ(1, owned_code_space_.size()); - native_module->AddCodeSpace(owned_code_space_[0].region(), {}); +void WasmCodeAllocator::Init(VirtualMemory code_space) { + DCHECK(owned_code_space_.empty()); + DCHECK(free_code_space_.IsEmpty()); + free_code_space_.Merge(code_space.region()); + owned_code_space_.emplace_back(std::move(code_space)); + async_counters_->wasm_module_num_code_spaces()->AddSample(1); } namespace { @@ -625,18 +615,11 @@ size_t ReservationSize(size_t code_size_estimate, int num_declared_functions, Vector<byte> WasmCodeAllocator::AllocateForCode(NativeModule* native_module, size_t size) { - return AllocateForCodeInRegion(native_module, size, kUnrestrictedRegion, - WasmCodeAllocator::OptionalLock{}); + return AllocateForCodeInRegion(native_module, size, kUnrestrictedRegion); } Vector<byte> WasmCodeAllocator::AllocateForCodeInRegion( - NativeModule* native_module, size_t size, base::AddressRegion region, - const WasmCodeAllocator::OptionalLock& optional_lock) { - OptionalLock new_lock; - if (!optional_lock.is_locked()) new_lock.Lock(this); - const auto& locked_lock = - optional_lock.is_locked() ? optional_lock : new_lock; - DCHECK(locked_lock.is_locked()); + NativeModule* native_module, size_t size, base::AddressRegion region) { DCHECK_EQ(code_manager_, native_module->engine()->code_manager()); DCHECK_LT(0, size); v8::PageAllocator* page_allocator = GetPlatformPageAllocator(); @@ -667,7 +650,7 @@ Vector<byte> WasmCodeAllocator::AllocateForCodeInRegion( code_manager_->AssignRange(new_region, native_module); free_code_space_.Merge(new_region); owned_code_space_.emplace_back(std::move(new_mem)); - native_module->AddCodeSpace(new_region, locked_lock); + native_module->AddCodeSpaceLocked(new_region); code_space = free_code_space_.Allocate(size); DCHECK(!code_space.is_empty()); @@ -703,16 +686,40 @@ Vector<byte> WasmCodeAllocator::AllocateForCodeInRegion( return {reinterpret_cast<byte*>(code_space.begin()), code_space.size()}; } -bool WasmCodeAllocator::SetExecutable(bool executable) { - base::MutexGuard lock(&mutex_); - if (is_executable_ == executable) return true; - TRACE_HEAP("Setting module %p as executable: %d.\n", this, executable); - - v8::PageAllocator* page_allocator = GetPlatformPageAllocator(); +// TODO(dlehmann): Do not return the success as a bool, but instead fail hard. +// That is, pull the CHECK from {NativeModuleModificationScope} in here and +// return void. +// TODO(dlehmann): Ensure {SetWritable(true)} is always paired up with a +// {SetWritable(false)}, such that eventually the code space is write protected. +// One solution is to make the API foolproof by hiding {SetWritable()} and +// allowing change of permissions only through {NativeModuleModificationScope}. +// TODO(dlehmann): Add tests that ensure the code space is eventually write- +// protected. +bool WasmCodeAllocator::SetWritable(bool writable) { + // Invariant: `this.writers_count_ > 0` iff `code space has W permission`. + // TODO(dlehmann): This is currently not fulfilled before the first call + // to SetWritable(false), because initial permissions are RWX. + // Fix by setting initial permissions to RX and adding writable permission + // where appropriate. See also {WasmCodeManager::Commit()}. + if (writable) { + if (++writers_count_ > 1) return true; + } else { + DCHECK_GT(writers_count_, 0); + if (--writers_count_ > 0) return true; + } + writable = writers_count_ > 0; + TRACE_HEAP("Setting module %p as writable: %d.\n", this, writable); if (FLAG_wasm_write_protect_code_memory) { + v8::PageAllocator* page_allocator = GetPlatformPageAllocator(); + + // Due to concurrent compilation and execution, we always need the execute + // permission, however during codegen we additionally need to write. + // Hence this does not actually achieve write-xor-execute, but merely + // "always-execute" with "no-write-eventually". PageAllocator::Permission permission = - executable ? PageAllocator::kReadExecute : PageAllocator::kReadWrite; + writable ? PageAllocator::kReadWriteExecute + : PageAllocator::kReadExecute; #if V8_OS_WIN // On windows, we need to switch permissions per separate virtual memory // reservation. @@ -725,8 +732,8 @@ bool WasmCodeAllocator::SetExecutable(bool executable) { permission)) { return false; } - TRACE_HEAP("Set %p:%p to executable:%d\n", vmem.address(), vmem.end(), - executable); + TRACE_HEAP("Set %p:%p to writable:%d\n", vmem.address(), vmem.end(), + writable); } #else // V8_OS_WIN size_t commit_page_size = page_allocator->CommitPageSize(); @@ -738,21 +745,46 @@ bool WasmCodeAllocator::SetExecutable(bool executable) { permission)) { return false; } - TRACE_HEAP("Set 0x%" PRIxPTR ":0x%" PRIxPTR " to executable:%d\n", - region.begin(), region.end(), executable); + TRACE_HEAP("Set 0x%" PRIxPTR ":0x%" PRIxPTR " to writable:%d\n", + region.begin(), region.end(), writable); } #endif // V8_OS_WIN } - is_executable_ = executable; return true; } +bool WasmCodeAllocator::SetThreadWritable(bool writable) { + static thread_local int writable_nesting_level = 0; + if (writable) { + if (++writable_nesting_level > 1) return true; + } else { + DCHECK_GT(writable_nesting_level, 0); + if (--writable_nesting_level > 0) return true; + } + writable = writable_nesting_level > 0; + + int key = code_manager_->memory_protection_key_; + + MemoryProtectionKeyPermission permissions = + writable ? kNoRestrictions : kDisableWrite; + + TRACE_HEAP("Setting memory protection key %d to writable: %d.\n", key, + writable); + return SetPermissionsForMemoryProtectionKey(key, permissions); +} + void WasmCodeAllocator::FreeCode(Vector<WasmCode* const> codes) { // Zap code area and collect freed code regions. DisjointAllocationPool freed_regions; size_t code_size = 0; CODE_SPACE_WRITE_SCOPE for (WasmCode* code : codes) { + // TODO(dlehmann): Pull the {NativeModuleModificationScope} out of the loop. + // However, its constructor requires a {NativeModule}. + // Can be fixed if {NativeModuleModificationScope()} is changed to take + // only a {WasmCodeAllocator} in its constructor. + NativeModuleModificationScope native_module_modification_scope( + code->native_module()); ZapCode(code->instruction_start(), code->instructions().size()); FlushInstructionCache(code->instruction_start(), code->instructions().size()); @@ -768,19 +800,16 @@ void WasmCodeAllocator::FreeCode(Vector<WasmCode* const> codes) { DisjointAllocationPool regions_to_decommit; PageAllocator* allocator = GetPlatformPageAllocator(); size_t commit_page_size = allocator->CommitPageSize(); - { - base::MutexGuard guard(&mutex_); - for (auto region : freed_regions.regions()) { - auto merged_region = freed_code_space_.Merge(region); - Address discard_start = - std::max(RoundUp(merged_region.begin(), commit_page_size), - RoundDown(region.begin(), commit_page_size)); - Address discard_end = - std::min(RoundDown(merged_region.end(), commit_page_size), - RoundUp(region.end(), commit_page_size)); - if (discard_start >= discard_end) continue; - regions_to_decommit.Merge({discard_start, discard_end - discard_start}); - } + for (auto region : freed_regions.regions()) { + auto merged_region = freed_code_space_.Merge(region); + Address discard_start = + std::max(RoundUp(merged_region.begin(), commit_page_size), + RoundDown(region.begin(), commit_page_size)); + Address discard_end = + std::min(RoundDown(merged_region.end(), commit_page_size), + RoundUp(region.end(), commit_page_size)); + if (discard_start >= discard_end) continue; + regions_to_decommit.Merge({discard_start, discard_end - discard_start}); } for (auto region : regions_to_decommit.regions()) { @@ -795,7 +824,6 @@ void WasmCodeAllocator::FreeCode(Vector<WasmCode* const> codes) { } size_t WasmCodeAllocator::GetNumCodeSpaces() const { - base::MutexGuard lock(&mutex_); return owned_code_space_.size(); } @@ -809,8 +837,7 @@ NativeModule::NativeModule(WasmEngine* engine, const WasmFeatures& enabled, std::shared_ptr<NativeModule>* shared_this) : engine_(engine), engine_scope_(engine->GetBarrierForBackgroundCompile()->TryLock()), - code_allocator_(engine->code_manager(), std::move(code_space), - async_counters), + code_allocator_(engine->code_manager(), async_counters), enabled_features_(enabled), module_(std::move(module)), import_wrapper_cache_(std::unique_ptr<WasmImportWrapperCache>( @@ -838,7 +865,14 @@ NativeModule::NativeModule(WasmEngine* engine, const WasmFeatures& enabled, std::fill_n(num_liftoff_function_calls_.get(), module_->num_declared_functions, kCounterStart); } - code_allocator_.Init(this); + // Even though there cannot be another thread using this object (since we are + // just constructing it), we need to hold the mutex to fulfill the + // precondition of {WasmCodeAllocator::Init}, which calls + // {NativeModule::AddCodeSpaceLocked}. + base::RecursiveMutexGuard guard{&allocation_mutex_}; + auto initial_region = code_space.region(); + code_allocator_.Init(std::move(code_space)); + AddCodeSpaceLocked(initial_region); } void NativeModule::ReserveCodeTableForTesting(uint32_t max_functions) { @@ -852,16 +886,13 @@ void NativeModule::ReserveCodeTableForTesting(uint32_t max_functions) { code_table_ = std::move(new_table); base::AddressRegion single_code_space_region; - { - base::MutexGuard guard(&allocation_mutex_); - CHECK_EQ(1, code_space_data_.size()); - single_code_space_region = code_space_data_[0].region; - } + base::RecursiveMutexGuard guard(&allocation_mutex_); + CHECK_EQ(1, code_space_data_.size()); + single_code_space_region = code_space_data_[0].region; // Re-allocate jump table. - main_jump_table_ = CreateEmptyJumpTableInRegion( + main_jump_table_ = CreateEmptyJumpTableInRegionLocked( JumpTableAssembler::SizeForNumberOfSlots(max_functions), - single_code_space_region, WasmCodeAllocator::OptionalLock{}); - base::MutexGuard guard(&allocation_mutex_); + single_code_space_region); code_space_data_[0].jump_table = main_jump_table_; } @@ -879,7 +910,7 @@ void NativeModule::LogWasmCodes(Isolate* isolate, Script script) { // Log all owned code, not just the current entries in the code table. This // will also include import wrappers. - base::MutexGuard lock(&allocation_mutex_); + base::RecursiveMutexGuard lock(&allocation_mutex_); for (auto& owned_entry : owned_code_) { owned_entry.second->LogCode(isolate, source_url.get(), script.id()); } @@ -890,11 +921,12 @@ void NativeModule::LogWasmCodes(Isolate* isolate, Script script) { CompilationEnv NativeModule::CreateCompilationEnv() const { return {module(), use_trap_handler_, kRuntimeExceptionSupport, - enabled_features_, kNoLowerSimd}; + enabled_features_}; } WasmCode* NativeModule::AddCodeForTesting(Handle<Code> code) { CODE_SPACE_WRITE_SCOPE + NativeModuleModificationScope native_module_modification_scope(this); const size_t relocation_size = code->relocation_size(); OwnedVector<byte> reloc_info; if (relocation_size > 0) { @@ -929,6 +961,7 @@ WasmCode* NativeModule::AddCodeForTesting(Handle<Code> code) { const int constant_pool_offset = base_offset + code->constant_pool_offset(); const int code_comments_offset = base_offset + code->code_comments_offset(); + base::RecursiveMutexGuard guard{&allocation_mutex_}; Vector<uint8_t> dst_code_bytes = code_allocator_.AllocateForCode(this, instructions.size()); base::Memcpy(dst_code_bytes.begin(), instructions.begin(), @@ -940,7 +973,7 @@ WasmCode* NativeModule::AddCodeForTesting(Handle<Code> code) { int mode_mask = RelocInfo::kApplyMask | RelocInfo::ModeMask(RelocInfo::WASM_STUB_CALL); auto jump_tables_ref = - FindJumpTablesForRegion(base::AddressRegionOf(dst_code_bytes)); + FindJumpTablesForRegionLocked(base::AddressRegionOf(dst_code_bytes)); Address dst_code_addr = reinterpret_cast<Address>(dst_code_bytes.begin()); Address constant_pool_start = dst_code_addr + constant_pool_offset; RelocIterator orig_it(*code, mode_mask); @@ -982,7 +1015,7 @@ WasmCode* NativeModule::AddCodeForTesting(Handle<Code> code) { new_code->MaybePrint(); new_code->Validate(); - return PublishCode(std::move(new_code)); + return PublishCodeLocked(std::move(new_code)); } void NativeModule::UseLazyStub(uint32_t func_index) { @@ -990,25 +1023,24 @@ void NativeModule::UseLazyStub(uint32_t func_index) { DCHECK_LT(func_index, module_->num_imported_functions + module_->num_declared_functions); + base::RecursiveMutexGuard guard(&allocation_mutex_); if (!lazy_compile_table_) { uint32_t num_slots = module_->num_declared_functions; WasmCodeRefScope code_ref_scope; CODE_SPACE_WRITE_SCOPE - base::AddressRegion single_code_space_region; - { - base::MutexGuard guard(&allocation_mutex_); - DCHECK_EQ(1, code_space_data_.size()); - single_code_space_region = code_space_data_[0].region; - } - lazy_compile_table_ = CreateEmptyJumpTableInRegion( + NativeModuleModificationScope native_module_modification_scope(this); + DCHECK_EQ(1, code_space_data_.size()); + base::AddressRegion single_code_space_region = code_space_data_[0].region; + lazy_compile_table_ = CreateEmptyJumpTableInRegionLocked( JumpTableAssembler::SizeForNumberOfLazyFunctions(num_slots), - single_code_space_region, WasmCodeAllocator::OptionalLock{}); + single_code_space_region); JumpTableAssembler::GenerateLazyCompileTable( lazy_compile_table_->instruction_start(), num_slots, module_->num_imported_functions, - GetNearRuntimeStubEntry(WasmCode::kWasmCompileLazy, - FindJumpTablesForRegion(base::AddressRegionOf( - lazy_compile_table_->instructions())))); + GetNearRuntimeStubEntry( + WasmCode::kWasmCompileLazy, + FindJumpTablesForRegionLocked( + base::AddressRegionOf(lazy_compile_table_->instructions())))); } // Add jump table entry for jump to the lazy compile stub. @@ -1017,7 +1049,6 @@ void NativeModule::UseLazyStub(uint32_t func_index) { Address lazy_compile_target = lazy_compile_table_->instruction_start() + JumpTableAssembler::LazyCompileSlotIndexToOffset(slot_index); - base::MutexGuard guard(&allocation_mutex_); PatchJumpTablesLocked(slot_index, lazy_compile_target); } @@ -1026,10 +1057,14 @@ std::unique_ptr<WasmCode> NativeModule::AddCode( int tagged_parameter_slots, Vector<const byte> protected_instructions_data, Vector<const byte> source_position_table, WasmCode::Kind kind, ExecutionTier tier, ForDebugging for_debugging) { - Vector<byte> code_space = - code_allocator_.AllocateForCode(this, desc.instr_size); - auto jump_table_ref = - FindJumpTablesForRegion(base::AddressRegionOf(code_space)); + Vector<byte> code_space; + NativeModule::JumpTablesRef jump_table_ref; + { + base::RecursiveMutexGuard guard{&allocation_mutex_}; + code_space = code_allocator_.AllocateForCode(this, desc.instr_size); + jump_table_ref = + FindJumpTablesForRegionLocked(base::AddressRegionOf(code_space)); + } return AddCodeWithCodeSpace(index, desc, stack_slots, tagged_parameter_slots, protected_instructions_data, source_position_table, kind, tier, for_debugging, @@ -1057,6 +1092,7 @@ std::unique_ptr<WasmCode> NativeModule::AddCodeWithCodeSpace( const int instr_size = desc.instr_size; CODE_SPACE_WRITE_SCOPE + NativeModuleModificationScope native_module_modification_scope(this); base::Memcpy(dst_code_bytes.begin(), desc.buffer, static_cast<size_t>(desc.instr_size)); @@ -1107,7 +1143,7 @@ std::unique_ptr<WasmCode> NativeModule::AddCodeWithCodeSpace( WasmCode* NativeModule::PublishCode(std::unique_ptr<WasmCode> code) { TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.wasm.detailed"), "wasm.PublishCode"); - base::MutexGuard lock(&allocation_mutex_); + base::RecursiveMutexGuard lock(&allocation_mutex_); return PublishCodeLocked(std::move(code)); } @@ -1117,7 +1153,7 @@ std::vector<WasmCode*> NativeModule::PublishCode( "wasm.PublishCode", "number", codes.size()); std::vector<WasmCode*> published_code; published_code.reserve(codes.size()); - base::MutexGuard lock(&allocation_mutex_); + base::RecursiveMutexGuard lock(&allocation_mutex_); // The published code is put into the top-most surrounding {WasmCodeRefScope}. for (auto& code : codes) { published_code.push_back(PublishCodeLocked(std::move(code))); @@ -1138,8 +1174,7 @@ WasmCode::Kind GetCodeKind(const WasmCompilationResult& result) { WasmCode* NativeModule::PublishCodeLocked( std::unique_ptr<WasmCode> owned_code) { - // The caller must hold the {allocation_mutex_}, thus we fail to lock it here. - DCHECK(!allocation_mutex_.TryLock()); + allocation_mutex_.AssertHeld(); WasmCode* code = owned_code.get(); new_owned_code_.emplace_back(std::move(owned_code)); @@ -1148,7 +1183,7 @@ WasmCode* NativeModule::PublishCodeLocked( // guaranteed to be valid. WasmCodeRefScope::AddRef(code); - if (code->IsAnonymous() || code->index() < module_->num_imported_functions) { + if (code->index() < static_cast<int>(module_->num_imported_functions)) { return code; } @@ -1208,7 +1243,7 @@ WasmCode* NativeModule::PublishCodeLocked( } void NativeModule::ReinstallDebugCode(WasmCode* code) { - base::MutexGuard lock(&allocation_mutex_); + base::RecursiveMutexGuard lock(&allocation_mutex_); DCHECK_EQ(this, code->native_module()); DCHECK_EQ(kWithBreakpoints, code->for_debugging()); @@ -1230,9 +1265,14 @@ void NativeModule::ReinstallDebugCode(WasmCode* code) { PatchJumpTablesLocked(slot_idx, code->instruction_start()); } -Vector<uint8_t> NativeModule::AllocateForDeserializedCode( - size_t total_code_size) { - return code_allocator_.AllocateForCode(this, total_code_size); +std::pair<Vector<uint8_t>, NativeModule::JumpTablesRef> +NativeModule::AllocateForDeserializedCode(size_t total_code_size) { + base::RecursiveMutexGuard guard{&allocation_mutex_}; + Vector<uint8_t> code_space = + code_allocator_.AllocateForCode(this, total_code_size); + auto jump_tables = + FindJumpTablesForRegionLocked(base::AddressRegionOf(code_space)); + return {code_space, jump_tables}; } std::unique_ptr<WasmCode> NativeModule::AddDeserializedCode( @@ -1253,7 +1293,7 @@ std::unique_ptr<WasmCode> NativeModule::AddDeserializedCode( } std::vector<WasmCode*> NativeModule::SnapshotCodeTable() const { - base::MutexGuard lock(&allocation_mutex_); + base::RecursiveMutexGuard lock(&allocation_mutex_); WasmCode** start = code_table_.get(); WasmCode** end = start + module_->num_declared_functions; for (WasmCode* code : VectorOf(start, end - start)) { @@ -1263,19 +1303,19 @@ std::vector<WasmCode*> NativeModule::SnapshotCodeTable() const { } WasmCode* NativeModule::GetCode(uint32_t index) const { - base::MutexGuard guard(&allocation_mutex_); + base::RecursiveMutexGuard guard(&allocation_mutex_); WasmCode* code = code_table_[declared_function_index(module(), index)]; if (code) WasmCodeRefScope::AddRef(code); return code; } bool NativeModule::HasCode(uint32_t index) const { - base::MutexGuard guard(&allocation_mutex_); + base::RecursiveMutexGuard guard(&allocation_mutex_); return code_table_[declared_function_index(module(), index)] != nullptr; } bool NativeModule::HasCodeWithTier(uint32_t index, ExecutionTier tier) const { - base::MutexGuard guard(&allocation_mutex_); + base::RecursiveMutexGuard guard(&allocation_mutex_); return code_table_[declared_function_index(module(), index)] != nullptr && code_table_[declared_function_index(module(), index)]->tier() == tier; } @@ -1289,16 +1329,17 @@ WasmModuleSourceMap* NativeModule::GetWasmSourceMap() const { return source_map_.get(); } -WasmCode* NativeModule::CreateEmptyJumpTableInRegion( - int jump_table_size, base::AddressRegion region, - const WasmCodeAllocator::OptionalLock& allocator_lock) { +WasmCode* NativeModule::CreateEmptyJumpTableInRegionLocked( + int jump_table_size, base::AddressRegion region) { + allocation_mutex_.AssertHeld(); // Only call this if we really need a jump table. DCHECK_LT(0, jump_table_size); - Vector<uint8_t> code_space = code_allocator_.AllocateForCodeInRegion( - this, jump_table_size, region, allocator_lock); + Vector<uint8_t> code_space = + code_allocator_.AllocateForCodeInRegion(this, jump_table_size, region); DCHECK(!code_space.empty()); UpdateCodeSize(jump_table_size, ExecutionTier::kNone, kNoDebugging); CODE_SPACE_WRITE_SCOPE + NativeModuleModificationScope native_module_modification_scope(this); ZapCode(reinterpret_cast<Address>(code_space.begin()), code_space.size()); std::unique_ptr<WasmCode> code{ new WasmCode{this, // native_module @@ -1317,7 +1358,7 @@ WasmCode* NativeModule::CreateEmptyJumpTableInRegion( WasmCode::kJumpTable, // kind ExecutionTier::kNone, // tier kNoDebugging}}; // for_debugging - return PublishCode(std::move(code)); + return PublishCodeLocked(std::move(code)); } void NativeModule::UpdateCodeSize(size_t size, ExecutionTier tier, @@ -1330,10 +1371,10 @@ void NativeModule::UpdateCodeSize(size_t size, ExecutionTier tier, } void NativeModule::PatchJumpTablesLocked(uint32_t slot_index, Address target) { - // The caller must hold the {allocation_mutex_}, thus we fail to lock it here. - DCHECK(!allocation_mutex_.TryLock()); + allocation_mutex_.AssertHeld(); CODE_SPACE_WRITE_SCOPE + NativeModuleModificationScope native_module_modification_scope(this); for (auto& code_space_data : code_space_data_) { DCHECK_IMPLIES(code_space_data.jump_table, code_space_data.far_jump_table); if (!code_space_data.jump_table) continue; @@ -1343,8 +1384,7 @@ void NativeModule::PatchJumpTablesLocked(uint32_t slot_index, Address target) { void NativeModule::PatchJumpTableLocked(const CodeSpaceData& code_space_data, uint32_t slot_index, Address target) { - // The caller must hold the {allocation_mutex_}, thus we fail to lock it here. - DCHECK(!allocation_mutex_.TryLock()); + allocation_mutex_.AssertHeld(); DCHECK_NOT_NULL(code_space_data.jump_table); DCHECK_NOT_NULL(code_space_data.far_jump_table); @@ -1369,9 +1409,9 @@ void NativeModule::PatchJumpTableLocked(const CodeSpaceData& code_space_data, target); } -void NativeModule::AddCodeSpace( - base::AddressRegion region, - const WasmCodeAllocator::OptionalLock& allocator_lock) { +void NativeModule::AddCodeSpaceLocked(base::AddressRegion region) { + allocation_mutex_.AssertHeld(); + // Each code space must be at least twice as large as the overhead per code // space. Otherwise, we are wasting too much memory. DCHECK_GE(region.size(), @@ -1387,8 +1427,8 @@ void NativeModule::AddCodeSpace( ->CanRegisterUnwindInfoForNonABICompliantCodeRange()) { size_t size = Heap::GetCodeRangeReservedAreaSize(); DCHECK_LT(0, size); - Vector<byte> padding = code_allocator_.AllocateForCodeInRegion( - this, size, region, allocator_lock); + Vector<byte> padding = + code_allocator_.AllocateForCodeInRegion(this, size, region); CHECK_EQ(reinterpret_cast<Address>(padding.begin()), region.begin()); win64_unwindinfo::RegisterNonABICompliantCodeRange( reinterpret_cast<void*>(region.begin()), region.size()); @@ -1397,28 +1437,29 @@ void NativeModule::AddCodeSpace( WasmCodeRefScope code_ref_scope; CODE_SPACE_WRITE_SCOPE + NativeModuleModificationScope native_module_modification_scope(this); WasmCode* jump_table = nullptr; WasmCode* far_jump_table = nullptr; const uint32_t num_wasm_functions = module_->num_declared_functions; const bool is_first_code_space = code_space_data_.empty(); // We always need a far jump table, because it contains the runtime stubs. - const bool needs_far_jump_table = !FindJumpTablesForRegion(region).is_valid(); + const bool needs_far_jump_table = + !FindJumpTablesForRegionLocked(region).is_valid(); const bool needs_jump_table = num_wasm_functions > 0 && needs_far_jump_table; if (needs_jump_table) { - jump_table = CreateEmptyJumpTableInRegion( - JumpTableAssembler::SizeForNumberOfSlots(num_wasm_functions), region, - allocator_lock); + jump_table = CreateEmptyJumpTableInRegionLocked( + JumpTableAssembler::SizeForNumberOfSlots(num_wasm_functions), region); CHECK(region.contains(jump_table->instruction_start())); } if (needs_far_jump_table) { int num_function_slots = NumWasmFunctionsInFarJumpTable(num_wasm_functions); - far_jump_table = CreateEmptyJumpTableInRegion( + far_jump_table = CreateEmptyJumpTableInRegionLocked( JumpTableAssembler::SizeForNumberOfFarJumpSlots( WasmCode::kRuntimeStubCount, NumWasmFunctionsInFarJumpTable(num_function_slots)), - region, allocator_lock); + region); CHECK(region.contains(far_jump_table->instruction_start())); EmbeddedData embedded_data = EmbeddedData::FromBlob(); #define RUNTIME_STUB(Name) Builtins::k##Name, @@ -1446,7 +1487,6 @@ void NativeModule::AddCodeSpace( main_far_jump_table_ = far_jump_table; } - base::MutexGuard guard(&allocation_mutex_); code_space_data_.push_back(CodeSpaceData{region, jump_table, far_jump_table}); if (jump_table && !is_first_code_space) { @@ -1499,8 +1539,7 @@ void NativeModule::SetWireBytes(OwnedVector<const uint8_t> wire_bytes) { } void NativeModule::TransferNewOwnedCodeLocked() const { - // The caller holds the allocation mutex. - DCHECK(!allocation_mutex_.TryLock()); + allocation_mutex_.AssertHeld(); DCHECK(!new_owned_code_.empty()); // Sort the {new_owned_code_} vector reversed, such that the position of the // previously inserted element can be used as a hint for the next element. If @@ -1524,8 +1563,7 @@ void NativeModule::TransferNewOwnedCodeLocked() const { } void NativeModule::InsertToCodeCache(WasmCode* code) { - // The caller holds {allocation_mutex_}. - DCHECK(!allocation_mutex_.TryLock()); + allocation_mutex_.AssertHeld(); DCHECK_NOT_NULL(cached_code_); if (code->IsAnonymous()) return; // Only cache Liftoff debugging code or TurboFan code (no breakpoints or @@ -1541,7 +1579,7 @@ void NativeModule::InsertToCodeCache(WasmCode* code) { } WasmCode* NativeModule::Lookup(Address pc) const { - base::MutexGuard lock(&allocation_mutex_); + base::RecursiveMutexGuard lock(&allocation_mutex_); if (!new_owned_code_.empty()) TransferNewOwnedCodeLocked(); auto iter = owned_code_.upper_bound(pc); if (iter == owned_code_.begin()) return nullptr; @@ -1566,8 +1604,9 @@ Address NativeModule::GetCallTargetForFunction(uint32_t func_index) const { return main_jump_table_->instruction_start() + slot_offset; } -NativeModule::JumpTablesRef NativeModule::FindJumpTablesForRegion( +NativeModule::JumpTablesRef NativeModule::FindJumpTablesForRegionLocked( base::AddressRegion code_region) const { + allocation_mutex_.AssertHeld(); auto jump_table_usable = [code_region](const WasmCode* jump_table) { Address table_start = jump_table->instruction_start(); Address table_end = table_start + jump_table->instructions().size(); @@ -1583,18 +1622,6 @@ NativeModule::JumpTablesRef NativeModule::FindJumpTablesForRegion( return max_distance <= WasmCodeAllocator::kMaxCodeSpaceSize; }; - // Fast path: Try to use {main_jump_table_} and {main_far_jump_table_}. - // Access to these fields is possible without locking, since these fields are - // initialized on construction of the {NativeModule}. - if (main_far_jump_table_ && jump_table_usable(main_far_jump_table_) && - (main_jump_table_ == nullptr || jump_table_usable(main_jump_table_))) { - return { - main_jump_table_ ? main_jump_table_->instruction_start() : kNullAddress, - main_far_jump_table_->instruction_start()}; - } - - // Otherwise, take the mutex and look for another suitable jump table. - base::MutexGuard guard(&allocation_mutex_); for (auto& code_space_data : code_space_data_) { DCHECK_IMPLIES(code_space_data.jump_table, code_space_data.far_jump_table); if (!code_space_data.far_jump_table) continue; @@ -1645,7 +1672,7 @@ uint32_t NativeModule::GetFunctionIndexFromJumpTableSlot( } WasmCode::RuntimeStubId NativeModule::GetRuntimeStubId(Address target) const { - base::MutexGuard guard(&allocation_mutex_); + base::RecursiveMutexGuard guard(&allocation_mutex_); for (auto& code_space_data : code_space_data_) { if (code_space_data.far_jump_table != nullptr && @@ -1679,10 +1706,22 @@ NativeModule::~NativeModule() { WasmCodeManager::WasmCodeManager(size_t max_committed) : max_committed_code_space_(max_committed), - critical_committed_code_space_(max_committed / 2) { + critical_committed_code_space_(max_committed / 2), + memory_protection_key_(FLAG_wasm_memory_protection_keys + ? AllocateMemoryProtectionKey() + : kNoMemoryProtectionKey) { DCHECK_LE(max_committed, FLAG_wasm_max_code_space * MB); } +WasmCodeManager::~WasmCodeManager() { + // No more committed code space. + DCHECK_EQ(0, total_committed_code_space_.load()); + + if (FLAG_wasm_memory_protection_keys) { + FreeMemoryProtectionKey(memory_protection_key_); + } +} + #if defined(V8_OS_WIN64) bool WasmCodeManager::CanRegisterUnwindInfoForNonABICompliantCodeRange() const { return win64_unwindinfo::CanRegisterUnwindInfoForNonABICompliantCodeRange() && @@ -1711,16 +1750,38 @@ void WasmCodeManager::Commit(base::AddressRegion region) { break; } } - PageAllocator::Permission permission = FLAG_wasm_write_protect_code_memory - ? PageAllocator::kReadWrite - : PageAllocator::kReadWriteExecute; - - TRACE_HEAP("Setting rw permissions for 0x%" PRIxPTR ":0x%" PRIxPTR "\n", - region.begin(), region.end()); + // Even when we employ W^X with FLAG_wasm_write_protect_code_memory == true, + // code pages need to be initially allocated with RWX permission because of + // concurrent compilation/execution. For this reason there is no distinction + // here based on FLAG_wasm_write_protect_code_memory. + // TODO(dlehmann): This allocates initially as writable and executable, and + // as such is not safe-by-default. In particular, if + // {WasmCodeAllocator::SetWritable(false)} is never called afterwards (e.g., + // because no {NativeModuleModificationScope} is created), the writable + // permission is never withdrawn. + // One potential fix is to allocate initially with kReadExecute only, which + // forces all compilation threads to add the missing + // {NativeModuleModificationScope}s before modification; and/or adding + // DCHECKs that {NativeModuleModificationScope} is open when calling this + // method. + PageAllocator::Permission permission = PageAllocator::kReadWriteExecute; + + bool success; + if (FLAG_wasm_memory_protection_keys) { + TRACE_HEAP( + "Setting rwx permissions and memory protection key %d for 0x%" PRIxPTR + ":0x%" PRIxPTR "\n", + memory_protection_key_, region.begin(), region.end()); + success = SetPermissionsAndMemoryProtectionKey( + GetPlatformPageAllocator(), region, permission, memory_protection_key_); + } else { + TRACE_HEAP("Setting rwx permissions for 0x%" PRIxPTR ":0x%" PRIxPTR "\n", + region.begin(), region.end()); + success = SetPermissions(GetPlatformPageAllocator(), region.begin(), + region.size(), permission); + } - if (!SetPermissions(GetPlatformPageAllocator(), region.begin(), region.size(), - permission)) { - // Highly unlikely. + if (V8_UNLIKELY(!success)) { V8::FatalProcessOutOfMemory( nullptr, "WasmCodeManager::Commit: Cannot make pre-reserved region writable"); @@ -1739,8 +1800,13 @@ void WasmCodeManager::Decommit(base::AddressRegion region) { USE(old_committed); TRACE_HEAP("Discarding system pages 0x%" PRIxPTR ":0x%" PRIxPTR "\n", region.begin(), region.end()); - CHECK(allocator->SetPermissions(reinterpret_cast<void*>(region.begin()), - region.size(), PageAllocator::kNoAccess)); + if (FLAG_wasm_memory_protection_keys) { + CHECK(SetPermissionsAndMemoryProtectionKey( + allocator, region, PageAllocator::kNoAccess, kNoMemoryProtectionKey)); + } else { + CHECK(SetPermissions(allocator, region.begin(), region.size(), + PageAllocator::kNoAccess)); + } } void WasmCodeManager::AssignRange(base::AddressRegion region, @@ -2002,10 +2068,15 @@ std::vector<std::unique_ptr<WasmCode>> NativeModule::AddCompiledCode( DCHECK(result.succeeded()); total_code_space += RoundUp<kCodeAlignment>(result.code_desc.instr_size); } - Vector<byte> code_space = - code_allocator_.AllocateForCode(this, total_code_space); - // Lookup the jump tables to use once, then use for all code objects. - auto jump_tables = FindJumpTablesForRegion(base::AddressRegionOf(code_space)); + Vector<byte> code_space; + NativeModule::JumpTablesRef jump_tables; + { + base::RecursiveMutexGuard guard{&allocation_mutex_}; + code_space = code_allocator_.AllocateForCode(this, total_code_space); + // Lookup the jump tables to use once, then use for all code objects. + jump_tables = + FindJumpTablesForRegionLocked(base::AddressRegionOf(code_space)); + } // If we happen to have a {total_code_space} which is bigger than // {kMaxCodeSpaceSize}, we would not find valid jump tables for the whole // region. If this ever happens, we need to handle this case (by splitting the @@ -2017,6 +2088,7 @@ std::vector<std::unique_ptr<WasmCode>> NativeModule::AddCompiledCode( // Now copy the generated code into the code space and relocate it. CODE_SPACE_WRITE_SCOPE + NativeModuleModificationScope native_module_modification_scope(this); for (auto& result : results) { DCHECK_EQ(result.code_desc.buffer, result.instr_buffer.get()); size_t code_size = RoundUp<kCodeAlignment>(result.code_desc.instr_size); @@ -2039,12 +2111,12 @@ void NativeModule::SetTieringState(TieringState new_tiering_state) { // Do not tier down asm.js (just never change the tiering state). if (module()->origin != kWasmOrigin) return; - base::MutexGuard lock(&allocation_mutex_); + base::RecursiveMutexGuard lock(&allocation_mutex_); tiering_state_ = new_tiering_state; } bool NativeModule::IsTieredDown() { - base::MutexGuard lock(&allocation_mutex_); + base::RecursiveMutexGuard lock(&allocation_mutex_); return tiering_state_ == kTieredDown; } @@ -2054,7 +2126,7 @@ void NativeModule::RecompileForTiering() { // compilation units finish, code installation will handle that correctly. TieringState current_state; { - base::MutexGuard lock(&allocation_mutex_); + base::RecursiveMutexGuard lock(&allocation_mutex_); current_state = tiering_state_; // Initialize {cached_code_} to signal that this cache should get filled @@ -2074,7 +2146,7 @@ void NativeModule::RecompileForTiering() { std::vector<int> NativeModule::FindFunctionsToRecompile( TieringState new_tiering_state) { WasmCodeRefScope code_ref_scope; - base::MutexGuard guard(&allocation_mutex_); + base::RecursiveMutexGuard guard(&allocation_mutex_); std::vector<int> function_indexes; int imported = module()->num_imported_functions; int declared = module()->num_declared_functions; @@ -2110,19 +2182,16 @@ std::vector<int> NativeModule::FindFunctionsToRecompile( } void NativeModule::FreeCode(Vector<WasmCode* const> codes) { + base::RecursiveMutexGuard guard(&allocation_mutex_); // Free the code space. code_allocator_.FreeCode(codes); - DebugInfo* debug_info = nullptr; - { - base::MutexGuard guard(&allocation_mutex_); - if (!new_owned_code_.empty()) TransferNewOwnedCodeLocked(); - debug_info = debug_info_.get(); - // Free the {WasmCode} objects. This will also unregister trap handler data. - for (WasmCode* code : codes) { - DCHECK_EQ(1, owned_code_.count(code->instruction_start())); - owned_code_.erase(code->instruction_start()); - } + if (!new_owned_code_.empty()) TransferNewOwnedCodeLocked(); + DebugInfo* debug_info = debug_info_.get(); + // Free the {WasmCode} objects. This will also unregister trap handler data. + for (WasmCode* code : codes) { + DCHECK_EQ(1, owned_code_.count(code->instruction_start())); + owned_code_.erase(code->instruction_start()); } // Remove debug side tables for all removed code objects, after releasing our // lock. This is to avoid lock order inversion. @@ -2130,16 +2199,17 @@ void NativeModule::FreeCode(Vector<WasmCode* const> codes) { } size_t NativeModule::GetNumberOfCodeSpacesForTesting() const { + base::RecursiveMutexGuard guard{&allocation_mutex_}; return code_allocator_.GetNumCodeSpaces(); } bool NativeModule::HasDebugInfo() const { - base::MutexGuard guard(&allocation_mutex_); + base::RecursiveMutexGuard guard(&allocation_mutex_); return debug_info_ != nullptr; } DebugInfo* NativeModule::GetDebugInfo() { - base::MutexGuard guard(&allocation_mutex_); + base::RecursiveMutexGuard guard(&allocation_mutex_); if (!debug_info_) debug_info_ = std::make_unique<DebugInfo>(this); return debug_info_.get(); } @@ -2200,17 +2270,30 @@ WasmCode* WasmCodeManager::LookupCode(Address pc) const { NativeModuleModificationScope::NativeModuleModificationScope( NativeModule* native_module) : native_module_(native_module) { - if (FLAG_wasm_write_protect_code_memory && native_module_ && - (native_module_->modification_scope_depth_++) == 0) { - bool success = native_module_->SetExecutable(false); + DCHECK_NOT_NULL(native_module_); + if (FLAG_wasm_memory_protection_keys) { + bool success = native_module_->SetThreadWritable(true); + if (!success && FLAG_wasm_write_protect_code_memory) { + // Fallback to mprotect-based write protection (much slower). + success = native_module_->SetWritable(true); + CHECK(success); + } + } else if (FLAG_wasm_write_protect_code_memory) { + bool success = native_module_->SetWritable(true); CHECK(success); } } NativeModuleModificationScope::~NativeModuleModificationScope() { - if (FLAG_wasm_write_protect_code_memory && native_module_ && - (native_module_->modification_scope_depth_--) == 1) { - bool success = native_module_->SetExecutable(true); + if (FLAG_wasm_memory_protection_keys) { + bool success = native_module_->SetThreadWritable(false); + if (!success && FLAG_wasm_write_protect_code_memory) { + // Fallback to mprotect-based write protection (much slower). + success = native_module_->SetWritable(false); + CHECK(success); + } + } else if (FLAG_wasm_write_protect_code_memory) { + bool success = native_module_->SetWritable(false); CHECK(success); } } diff --git a/deps/v8/src/wasm/wasm-code-manager.h b/deps/v8/src/wasm/wasm-code-manager.h index 2996a6e2c6..312f5346b4 100644 --- a/deps/v8/src/wasm/wasm-code-manager.h +++ b/deps/v8/src/wasm/wasm-code-manager.h @@ -26,6 +26,7 @@ #include "src/trap-handler/trap-handler.h" #include "src/utils/vector.h" #include "src/wasm/compilation-environment.h" +#include "src/wasm/memory-protection-key.h" #include "src/wasm/wasm-features.h" #include "src/wasm/wasm-limits.h" #include "src/wasm/wasm-module-sourcemap.h" @@ -94,7 +95,8 @@ struct WasmModule; V(WasmAllocateArrayWithRtt) \ V(WasmAllocateRtt) \ V(WasmAllocateStructWithRtt) \ - V(WasmSubtypeCheck) + V(WasmSubtypeCheck) \ + V(WasmOnStackReplace) // Sorted, disjoint and non-overlapping memory regions. A region is of the // form [start, end). So there's no [start, end), [end, other_end), @@ -160,11 +162,7 @@ class V8_EXPORT_PRIVATE WasmCode final { return {reloc_info().end(), static_cast<size_t>(source_positions_size_)}; } - // TODO(clemensb): Make this return int. - uint32_t index() const { - DCHECK_LE(0, index_); - return index_; - } + int index() const { return index_; } // Anonymous functions are functions that don't carry an index. bool IsAnonymous() const { return index_ == kAnonymousFuncIndex; } Kind kind() const { return KindField::decode(flags_); } @@ -397,31 +395,11 @@ class WasmCodeAllocator { static constexpr size_t kMaxCodeSpaceSize = 1024 * MB; #endif - // {OptionalLock} is passed between {WasmCodeAllocator} and {NativeModule} to - // indicate that the lock on the {WasmCodeAllocator} is already taken. It's - // optional to allow to also call methods without holding the lock. - class OptionalLock { - public: - // External users can only instantiate a non-locked {OptionalLock}. - OptionalLock() = default; - ~OptionalLock(); - bool is_locked() const { return allocator_ != nullptr; } - - private: - friend class WasmCodeAllocator; - // {Lock} is called from the {WasmCodeAllocator} if no locked {OptionalLock} - // is passed. - void Lock(WasmCodeAllocator*); - - WasmCodeAllocator* allocator_ = nullptr; - }; - - WasmCodeAllocator(WasmCodeManager*, VirtualMemory code_space, - std::shared_ptr<Counters> async_counters); + WasmCodeAllocator(WasmCodeManager*, std::shared_ptr<Counters> async_counters); ~WasmCodeAllocator(); // Call before use, after the {NativeModule} is set up completely. - void Init(NativeModule*); + void Init(VirtualMemory code_space); size_t committed_code_space() const { return committed_code_space_.load(std::memory_order_acquire); @@ -434,22 +412,32 @@ class WasmCodeAllocator { } // Allocate code space. Returns a valid buffer or fails with OOM (crash). + // Hold the {NativeModule}'s {allocation_mutex_} when calling this method. Vector<byte> AllocateForCode(NativeModule*, size_t size); // Allocate code space within a specific region. Returns a valid buffer or // fails with OOM (crash). + // Hold the {NativeModule}'s {allocation_mutex_} when calling this method. Vector<byte> AllocateForCodeInRegion(NativeModule*, size_t size, - base::AddressRegion, - const WasmCodeAllocator::OptionalLock&); + base::AddressRegion); + + // Sets permissions of all owned code space to read-write or read-only (if + // {writable} is false). Returns true on success. + // Hold the {NativeModule}'s {allocation_mutex_} when calling this method. + V8_EXPORT_PRIVATE bool SetWritable(bool writable); - // Sets permissions of all owned code space to executable, or read-write (if - // {executable} is false). Returns true on success. - V8_EXPORT_PRIVATE bool SetExecutable(bool executable); + // Set this thread's permission of all owned code space to read-write or + // read-only (if {writable} is false). Uses memory protection keys. + // Returns true on success. Since the permission is thread-local, there is no + // requirement to hold any lock when calling this method. + bool SetThreadWritable(bool writable); // Free memory pages of all given code objects. Used for wasm code GC. + // Hold the {NativeModule}'s {allocation_mutex_} when calling this method. void FreeCode(Vector<WasmCode* const>); // Retrieve the number of separately reserved code spaces. + // Hold the {NativeModule}'s {allocation_mutex_} when calling this method. size_t GetNumCodeSpaces() const; private: @@ -461,10 +449,8 @@ class WasmCodeAllocator { // The engine-wide wasm code manager. WasmCodeManager* const code_manager_; - mutable base::Mutex mutex_; - ////////////////////////////////////////////////////////////////////////////// - // Protected by {mutex_}: + // These fields are protected by the mutex in {NativeModule}. // Code space that was reserved and is available for allocations (subset of // {owned_code_space_}). @@ -476,6 +462,8 @@ class WasmCodeAllocator { DisjointAllocationPool freed_code_space_; std::vector<VirtualMemory> owned_code_space_; + int writers_count_{0}; + // End of fields protected by {mutex_}. ////////////////////////////////////////////////////////////////////////////// @@ -483,8 +471,6 @@ class WasmCodeAllocator { std::atomic<size_t> generated_code_size_{0}; std::atomic<size_t> freed_code_size_{0}; - bool is_executable_ = false; - std::shared_ptr<Counters> async_counters_; }; @@ -523,7 +509,15 @@ class V8_EXPORT_PRIVATE NativeModule final { // table and jump table via another {PublishCode}. void ReinstallDebugCode(WasmCode*); - Vector<uint8_t> AllocateForDeserializedCode(size_t total_code_size); + struct JumpTablesRef { + Address jump_table_start = kNullAddress; + Address far_jump_table_start = kNullAddress; + + bool is_valid() const { return far_jump_table_start != kNullAddress; } + }; + + std::pair<Vector<uint8_t>, JumpTablesRef> AllocateForDeserializedCode( + size_t total_code_size); std::unique_ptr<WasmCode> AddDeserializedCode( int index, Vector<byte> instructions, int stack_slots, @@ -564,26 +558,19 @@ class V8_EXPORT_PRIVATE NativeModule final { // the first jump table). Address GetCallTargetForFunction(uint32_t func_index) const; - struct JumpTablesRef { - Address jump_table_start = kNullAddress; - Address far_jump_table_start = kNullAddress; - - bool is_valid() const { return far_jump_table_start != kNullAddress; } - }; - // Finds the jump tables that should be used for given code region. This // information is then passed to {GetNearCallTargetForFunction} and // {GetNearRuntimeStubEntry} to avoid the overhead of looking this information // up there. Return an empty struct if no suitable jump tables exist. - JumpTablesRef FindJumpTablesForRegion(base::AddressRegion) const; + JumpTablesRef FindJumpTablesForRegionLocked(base::AddressRegion) const; // Similarly to {GetCallTargetForFunction}, but uses the jump table previously - // looked up via {FindJumpTablesForRegion}. + // looked up via {FindJumpTablesForRegionLocked}. Address GetNearCallTargetForFunction(uint32_t func_index, const JumpTablesRef&) const; // Get a runtime stub entry (which is a far jump table slot) in the jump table - // previously looked up via {FindJumpTablesForRegion}. + // previously looked up via {FindJumpTablesForRegionLocked}. Address GetNearRuntimeStubEntry(WasmCode::RuntimeStubId index, const JumpTablesRef&) const; @@ -591,8 +578,13 @@ class V8_EXPORT_PRIVATE NativeModule final { // to a function index. uint32_t GetFunctionIndexFromJumpTableSlot(Address slot_address) const; - bool SetExecutable(bool executable) { - return code_allocator_.SetExecutable(executable); + bool SetWritable(bool writable) { + base::RecursiveMutexGuard guard{&allocation_mutex_}; + return code_allocator_.SetWritable(writable); + } + + bool SetThreadWritable(bool writable) { + return code_allocator_.SetThreadWritable(writable); } // For cctests, where we build both WasmModule and the runtime objects @@ -726,9 +718,8 @@ class V8_EXPORT_PRIVATE NativeModule final { ExecutionTier tier, ForDebugging for_debugging, Vector<uint8_t> code_space, const JumpTablesRef& jump_tables_ref); - WasmCode* CreateEmptyJumpTableInRegion( - int jump_table_size, base::AddressRegion, - const WasmCodeAllocator::OptionalLock&); + WasmCode* CreateEmptyJumpTableInRegionLocked(int jump_table_size, + base::AddressRegion); void UpdateCodeSize(size_t, ExecutionTier, ForDebugging); @@ -740,8 +731,7 @@ class V8_EXPORT_PRIVATE NativeModule final { Address target); // Called by the {WasmCodeAllocator} to register a new code space. - void AddCodeSpace(base::AddressRegion, - const WasmCodeAllocator::OptionalLock&); + void AddCodeSpaceLocked(base::AddressRegion); // Hold the {allocation_mutex_} when calling {PublishCodeLocked}. WasmCode* PublishCodeLocked(std::unique_ptr<WasmCode>); @@ -806,7 +796,12 @@ class V8_EXPORT_PRIVATE NativeModule final { std::unique_ptr<uint32_t[]> num_liftoff_function_calls_; // This mutex protects concurrent calls to {AddCode} and friends. - mutable base::Mutex allocation_mutex_; + // TODO(dlehmann): Revert this to a regular {Mutex} again. + // This needs to be a {RecursiveMutex} only because of + // {NativeModuleModificationScope} usages, which are (1) either at places + // that already hold the {allocation_mutex_} or (2) because of multiple open + // {NativeModuleModificationScope}s in the call hierarchy. Both are fixable. + mutable base::RecursiveMutex allocation_mutex_; ////////////////////////////////////////////////////////////////////////////// // Protected by {allocation_mutex_}: @@ -847,7 +842,6 @@ class V8_EXPORT_PRIVATE NativeModule final { // End of fields protected by {allocation_mutex_}. ////////////////////////////////////////////////////////////////////////////// - int modification_scope_depth_ = 0; UseTrapHandler use_trap_handler_ = kNoTrapHandler; bool lazy_compile_frozen_ = false; std::atomic<size_t> liftoff_bailout_count_{0}; @@ -861,12 +855,7 @@ class V8_EXPORT_PRIVATE WasmCodeManager final { WasmCodeManager(const WasmCodeManager&) = delete; WasmCodeManager& operator=(const WasmCodeManager&) = delete; -#ifdef DEBUG - ~WasmCodeManager() { - // No more committed code space. - DCHECK_EQ(0, total_committed_code_space_.load()); - } -#endif + ~WasmCodeManager(); #if defined(V8_OS_WIN64) bool CanRegisterUnwindInfoForNonABICompliantCodeRange() const; @@ -922,6 +911,8 @@ class V8_EXPORT_PRIVATE WasmCodeManager final { // and updated after each GC. std::atomic<size_t> critical_committed_code_space_; + const int memory_protection_key_; + mutable base::Mutex native_modules_mutex_; ////////////////////////////////////////////////////////////////////////////// diff --git a/deps/v8/src/wasm/wasm-constants.h b/deps/v8/src/wasm/wasm-constants.h index a02ea78e85..f960e7c201 100644 --- a/deps/v8/src/wasm/wasm-constants.h +++ b/deps/v8/src/wasm/wasm-constants.h @@ -101,10 +101,11 @@ enum SectionCode : int8_t { kDebugInfoSectionCode, // DWARF section .debug_info kExternalDebugInfoSectionCode, // Section encoding the external symbol path kCompilationHintsSectionCode, // Compilation hints section + kBranchHintsSectionCode, // Branch hints section // Helper values kFirstSectionInModule = kTypeSectionCode, - kLastKnownModuleSection = kCompilationHintsSectionCode, + kLastKnownModuleSection = kBranchHintsSectionCode, kFirstUnorderedSection = kDataCountSectionCode, }; @@ -156,6 +157,10 @@ constexpr int kAnonymousFuncIndex = -1; // often enough. constexpr uint32_t kGenericWrapperBudget = 1000; +#if V8_TARGET_ARCH_X64 +constexpr int32_t kOSRTargetOffset = 3 * kSystemPointerSize; +#endif + } // namespace wasm } // namespace internal } // namespace v8 diff --git a/deps/v8/src/wasm/wasm-debug.cc b/deps/v8/src/wasm/wasm-debug.cc index 22872f5d88..ad4e7853aa 100644 --- a/deps/v8/src/wasm/wasm-debug.cc +++ b/deps/v8/src/wasm/wasm-debug.cc @@ -697,13 +697,19 @@ class DebugInfoImpl { DCHECK_EQ(frame->function_index(), new_code->index()); DCHECK_EQ(frame->native_module(), new_code->native_module()); DCHECK(frame->wasm_code()->is_liftoff()); + Address new_pc = + FindNewPC(frame, new_code, frame->byte_offset(), return_location); #ifdef DEBUG int old_position = frame->position(); #endif - Address new_pc = - FindNewPC(frame, new_code, frame->byte_offset(), return_location); +#if V8_TARGET_ARCH_X64 + if (frame->wasm_code()->for_debugging()) { + base::Memory<Address>(frame->fp() - kOSRTargetOffset) = new_pc; + } +#else PointerAuthentication::ReplacePC(frame->pc_address(), new_pc, kSystemPointerSize); +#endif // The frame position should still be the same after OSR. DCHECK_EQ(old_position, frame->position()); } diff --git a/deps/v8/src/wasm/wasm-engine.cc b/deps/v8/src/wasm/wasm-engine.cc index ed19f89a5e..c38236dc78 100644 --- a/deps/v8/src/wasm/wasm-engine.cc +++ b/deps/v8/src/wasm/wasm-engine.cc @@ -18,6 +18,7 @@ #include "src/strings/string-hasher-inl.h" #include "src/utils/ostreams.h" #include "src/wasm/function-compiler.h" +#include "src/wasm/memory-protection-key.h" #include "src/wasm/module-compiler.h" #include "src/wasm/module-decoder.h" #include "src/wasm/module-instantiate.h" @@ -347,7 +348,8 @@ struct WasmEngine::CurrentGCInfo { struct WasmEngine::IsolateInfo { explicit IsolateInfo(Isolate* isolate) : log_codes(WasmCode::ShouldBeLogged(isolate)), - async_counters(isolate->async_counters()) { + async_counters(isolate->async_counters()), + wrapper_compilation_barrier_(std::make_shared<OperationsBarrier>()) { v8::Isolate* v8_isolate = reinterpret_cast<v8::Isolate*>(isolate); v8::Platform* platform = V8::GetCurrentPlatform(); foreground_task_runner = platform->GetForegroundTaskRunner(v8_isolate); @@ -398,6 +400,12 @@ struct WasmEngine::IsolateInfo { int throw_count = 0; int rethrow_count = 0; int catch_count = 0; + + // Operations barrier to synchronize on wrapper compilation on isolate + // shutdown. + // TODO(wasm): Remove this once we can use the generic js-to-wasm wrapper + // everywhere. + std::shared_ptr<OperationsBarrier> wrapper_compilation_barrier_; }; struct WasmEngine::NativeModuleInfo { @@ -934,9 +942,10 @@ void WasmEngine::DeleteCompileJobsOnIsolate(Isolate* isolate) { // Under the mutex get all jobs to delete. Then delete them without holding // the mutex, such that deletion can reenter the WasmEngine. std::vector<std::unique_ptr<AsyncCompileJob>> jobs_to_delete; + std::vector<std::weak_ptr<NativeModule>> modules_in_isolate; + std::shared_ptr<OperationsBarrier> wrapper_compilation_barrier; { base::MutexGuard guard(&mutex_); - DCHECK_EQ(1, isolates_.count(isolate)); for (auto it = async_compile_jobs_.begin(); it != async_compile_jobs_.end();) { if (it->first->isolate() != isolate) { @@ -946,7 +955,34 @@ void WasmEngine::DeleteCompileJobsOnIsolate(Isolate* isolate) { jobs_to_delete.push_back(std::move(it->second)); it = async_compile_jobs_.erase(it); } + DCHECK_EQ(1, isolates_.count(isolate)); + auto* isolate_info = isolates_[isolate].get(); + wrapper_compilation_barrier = isolate_info->wrapper_compilation_barrier_; + for (auto* native_module : isolate_info->native_modules) { + DCHECK_EQ(1, native_modules_.count(native_module)); + modules_in_isolate.emplace_back(native_modules_[native_module]->weak_ptr); + } } + + // All modules that have not finished initial compilation yet cannot be + // shared with other isolates. Hence we cancel their compilation. In + // particular, this will cancel wrapper compilation which is bound to this + // isolate (this would be a UAF otherwise). + for (auto& weak_module : modules_in_isolate) { + if (auto shared_module = weak_module.lock()) { + shared_module->compilation_state()->CancelInitialCompilation(); + } + } + + // After cancelling, wait for all current wrapper compilation to actually + // finish. + wrapper_compilation_barrier->CancelAndWait(); +} + +OperationsBarrier::Token WasmEngine::StartWrapperCompilation(Isolate* isolate) { + base::MutexGuard guard(&mutex_); + DCHECK_EQ(1, isolates_.count(isolate)); + return isolates_[isolate]->wrapper_compilation_barrier_->TryLock(); } void WasmEngine::AddIsolate(Isolate* isolate) { @@ -954,6 +990,15 @@ void WasmEngine::AddIsolate(Isolate* isolate) { DCHECK_EQ(0, isolates_.count(isolate)); isolates_.emplace(isolate, std::make_unique<IsolateInfo>(isolate)); + // Record memory protection key support. + if (FLAG_wasm_memory_protection_keys) { + auto* histogram = + isolate->counters()->wasm_memory_protection_keys_support(); + bool has_mpk = + code_manager()->memory_protection_key_ != kNoMemoryProtectionKey; + histogram->AddSample(has_mpk ? 1 : 0); + } + // Install sampling GC callback. // TODO(v8:7424): For now we sample module sizes in a GC callback. This will // bias samples towards apps with high memory pressure. We should switch to @@ -1281,6 +1326,18 @@ void WasmEngine::ReportLiveCodeFromStackForGC(Isolate* isolate) { StackFrame* const frame = it.frame(); if (frame->type() != StackFrame::WASM) continue; live_wasm_code.insert(WasmFrame::cast(frame)->wasm_code()); +#if V8_TARGET_ARCH_X64 + if (WasmFrame::cast(frame)->wasm_code()->for_debugging()) { + Address osr_target = base::Memory<Address>(WasmFrame::cast(frame)->fp() - + kOSRTargetOffset); + if (osr_target) { + WasmCode* osr_code = + isolate->wasm_engine()->code_manager()->LookupCode(osr_target); + DCHECK_NOT_NULL(osr_code); + live_wasm_code.insert(osr_code); + } + } +#endif } CheckNoArchivedThreads(isolate); @@ -1514,24 +1571,29 @@ void WasmEngine::PotentiallyFinishCurrentGC() { namespace { -DEFINE_LAZY_LEAKY_OBJECT_GETTER(std::shared_ptr<WasmEngine>, - GetSharedWasmEngine) +WasmEngine* global_wasm_engine = nullptr; } // namespace // static void WasmEngine::InitializeOncePerProcess() { - *GetSharedWasmEngine() = std::make_shared<WasmEngine>(); + DCHECK_NULL(global_wasm_engine); + global_wasm_engine = new WasmEngine(); } // static void WasmEngine::GlobalTearDown() { - GetSharedWasmEngine()->reset(); + // Note: This can be called multiple times in a row (see + // test-api/InitializeAndDisposeMultiple). This is fine, as + // {global_wasm_engine} will be nullptr then. + delete global_wasm_engine; + global_wasm_engine = nullptr; } // static -std::shared_ptr<WasmEngine> WasmEngine::GetWasmEngine() { - return *GetSharedWasmEngine(); +WasmEngine* WasmEngine::GetWasmEngine() { + DCHECK_NOT_NULL(global_wasm_engine); + return global_wasm_engine; } // {max_mem_pages} is declared in wasm-limits.h. diff --git a/deps/v8/src/wasm/wasm-engine.h b/deps/v8/src/wasm/wasm-engine.h index 5a26bd4457..d4736036cb 100644 --- a/deps/v8/src/wasm/wasm-engine.h +++ b/deps/v8/src/wasm/wasm-engine.h @@ -246,6 +246,12 @@ class V8_EXPORT_PRIVATE WasmEngine { // for tearing down an isolate, or to clean it up to be reused. void DeleteCompileJobsOnIsolate(Isolate* isolate); + // Get a token for compiling wrappers for an Isolate. The token is used to + // synchronize background tasks on isolate shutdown. The caller should only + // hold the token while compiling export wrappers. If the isolate is already + // shutting down, this method will return an invalid token. + OperationsBarrier::Token StartWrapperCompilation(Isolate*); + // Manage the set of Isolates that use this WasmEngine. void AddIsolate(Isolate* isolate); void RemoveIsolate(Isolate* isolate); @@ -351,10 +357,8 @@ class V8_EXPORT_PRIVATE WasmEngine { static void InitializeOncePerProcess(); static void GlobalTearDown(); - // Returns a reference to the WasmEngine shared by the entire process. Try to - // use {Isolate::wasm_engine} instead if it is available, which encapsulates - // engine lifetime decisions during Isolate bootstrapping. - static std::shared_ptr<WasmEngine> GetWasmEngine(); + // Returns a reference to the WasmEngine shared by the entire process. + static WasmEngine* GetWasmEngine(); private: struct CurrentGCInfo; diff --git a/deps/v8/src/wasm/wasm-feature-flags.h b/deps/v8/src/wasm/wasm-feature-flags.h index 9c790d7c67..9adf3d662f 100644 --- a/deps/v8/src/wasm/wasm-feature-flags.h +++ b/deps/v8/src/wasm/wasm-feature-flags.h @@ -37,7 +37,12 @@ /* Relaxed SIMD proposal. */ \ /* https://github.com/WebAssembly/relaxed-simd */ \ /* V8 side owner: zhin */ \ - V(relaxed_simd, "relaxed simd", false) + V(relaxed_simd, "relaxed simd", false) \ + \ + /* Branch Hinting proposal. */ \ + /* https://github.com/WebAssembly/branch-hinting */ \ + /* V8 side owner: jkummerow */ \ + V(branch_hinting, "branch hinting", false) // ############################################################################# // Staged features (disabled by default, but enabled via --wasm-staging (also @@ -76,13 +81,6 @@ // Shipped features (enabled by default). Remove the feature flag once they hit // stable and are expected to stay enabled. #define FOREACH_WASM_SHIPPED_FEATURE_FLAG(V) /* (force 80 columns) */ \ - /* Multi-value proposal. */ \ - /* https://github.com/WebAssembly/multi-value */ \ - /* V8 side owner: thibaudm */ \ - /* Shipped in v8.6. */ \ - /* ITS: https://groups.google.com/g/v8-users/c/pv2E4yFWeF0 */ \ - V(mv, "multi-value support", true) \ - \ /* Fixed-width SIMD operations. */ \ /* https://github.com/webassembly/simd */ \ /* V8 side owner: gdeepti, zhin */ \ diff --git a/deps/v8/src/wasm/wasm-init-expr.cc b/deps/v8/src/wasm/wasm-init-expr.cc new file mode 100644 index 0000000000..6348c58193 --- /dev/null +++ b/deps/v8/src/wasm/wasm-init-expr.cc @@ -0,0 +1,57 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "src/wasm/wasm-init-expr.h" + +namespace v8 { +namespace internal { +namespace wasm { + +std::ostream& operator<<(std::ostream& os, const WasmInitExpr& expr) { + os << "("; + switch (expr.kind()) { + case WasmInitExpr::kNone: + UNREACHABLE(); + case WasmInitExpr::kGlobalGet: + os << "global.get " << expr.immediate().index; + break; + case WasmInitExpr::kI32Const: + os << "i32.const " << expr.immediate().i32_const; + break; + case WasmInitExpr::kI64Const: + os << "i64.const " << expr.immediate().i64_const; + break; + case WasmInitExpr::kF32Const: + os << "f32.const " << expr.immediate().f32_const; + break; + case WasmInitExpr::kF64Const: + os << "f64.const " << expr.immediate().f64_const; + break; + case WasmInitExpr::kS128Const: + os << "s128.const 0x" << std::hex; + for (uint8_t b : expr.immediate().s128_const) { + os << b; + } + os << std::dec; + break; + case WasmInitExpr::kRefNullConst: + os << "ref.null " << expr.immediate().heap_type; + break; + case WasmInitExpr::kRefFuncConst: + os << "ref.func " << expr.immediate().index; + break; + case WasmInitExpr::kRttCanon: + os << "rtt.canon " << expr.immediate().heap_type; + break; + case WasmInitExpr::kRttSub: + os << "rtt.sub " << *expr.operand(); + break; + } + os << ")"; + return os; +} + +} // namespace wasm +} // namespace internal +} // namespace v8 diff --git a/deps/v8/src/wasm/wasm-init-expr.h b/deps/v8/src/wasm/wasm-init-expr.h new file mode 100644 index 0000000000..39fc1a7ee6 --- /dev/null +++ b/deps/v8/src/wasm/wasm-init-expr.h @@ -0,0 +1,150 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#if !V8_ENABLE_WEBASSEMBLY +#error This header should only be included if WebAssembly is enabled. +#endif // !V8_ENABLE_WEBASSEMBLY + +#ifndef V8_WASM_WASM_INIT_EXPR_H_ +#define V8_WASM_WASM_INIT_EXPR_H_ + +#include <memory> + +#include "src/wasm/value-type.h" + +namespace v8 { +namespace internal { +namespace wasm { + +// Representation of an initializer expression. +class WasmInitExpr { + public: + enum Operator { + kNone, + kGlobalGet, + kI32Const, + kI64Const, + kF32Const, + kF64Const, + kS128Const, + kRefNullConst, + kRefFuncConst, + kRttCanon, + kRttSub + }; + + union Immediate { + int32_t i32_const; + int64_t i64_const; + float f32_const; + double f64_const; + std::array<uint8_t, kSimd128Size> s128_const; + uint32_t index; + HeapType::Representation heap_type; + }; + + WasmInitExpr() : kind_(kNone) { immediate_.i32_const = 0; } + explicit WasmInitExpr(int32_t v) : kind_(kI32Const) { + immediate_.i32_const = v; + } + explicit WasmInitExpr(int64_t v) : kind_(kI64Const) { + immediate_.i64_const = v; + } + explicit WasmInitExpr(float v) : kind_(kF32Const) { + immediate_.f32_const = v; + } + explicit WasmInitExpr(double v) : kind_(kF64Const) { + immediate_.f64_const = v; + } + explicit WasmInitExpr(uint8_t v[kSimd128Size]) : kind_(kS128Const) { + base::Memcpy(immediate_.s128_const.data(), v, kSimd128Size); + } + + MOVE_ONLY_NO_DEFAULT_CONSTRUCTOR(WasmInitExpr); + + static WasmInitExpr GlobalGet(uint32_t index) { + WasmInitExpr expr; + expr.kind_ = kGlobalGet; + expr.immediate_.index = index; + return expr; + } + + static WasmInitExpr RefFuncConst(uint32_t index) { + WasmInitExpr expr; + expr.kind_ = kRefFuncConst; + expr.immediate_.index = index; + return expr; + } + + static WasmInitExpr RefNullConst(HeapType::Representation heap_type) { + WasmInitExpr expr; + expr.kind_ = kRefNullConst; + expr.immediate_.heap_type = heap_type; + return expr; + } + + static WasmInitExpr RttCanon(uint32_t index) { + WasmInitExpr expr; + expr.kind_ = kRttCanon; + expr.immediate_.index = index; + return expr; + } + + static WasmInitExpr RttSub(uint32_t index, WasmInitExpr supertype) { + WasmInitExpr expr; + expr.kind_ = kRttSub; + expr.immediate_.index = index; + expr.operand_ = std::make_unique<WasmInitExpr>(std::move(supertype)); + return expr; + } + + Immediate immediate() const { return immediate_; } + Operator kind() const { return kind_; } + WasmInitExpr* operand() const { return operand_.get(); } + + bool operator==(const WasmInitExpr& other) const { + if (kind() != other.kind()) return false; + switch (kind()) { + case kNone: + return true; + case kGlobalGet: + case kRefFuncConst: + case kRttCanon: + return immediate().index == other.immediate().index; + case kI32Const: + return immediate().i32_const == other.immediate().i32_const; + case kI64Const: + return immediate().i64_const == other.immediate().i64_const; + case kF32Const: + return immediate().f32_const == other.immediate().f32_const; + case kF64Const: + return immediate().f64_const == other.immediate().f64_const; + case kS128Const: + return immediate().s128_const == other.immediate().s128_const; + case kRefNullConst: + return immediate().heap_type == other.immediate().heap_type; + case kRttSub: + return immediate().index == other.immediate().index && + *operand() == *other.operand(); + } + } + + V8_INLINE bool operator!=(const WasmInitExpr& other) { + return !(*this == other); + } + + private: + Immediate immediate_; + Operator kind_; + std::unique_ptr<WasmInitExpr> operand_ = nullptr; +}; + +V8_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os, + const WasmInitExpr& expr); + +} // namespace wasm +} // namespace internal +} // namespace v8 + +#endif // V8_WASM_WASM_INIT_EXPR_H_ diff --git a/deps/v8/src/wasm/wasm-js.cc b/deps/v8/src/wasm/wasm-js.cc index 7f1d8e261f..70492135de 100644 --- a/deps/v8/src/wasm/wasm-js.cc +++ b/deps/v8/src/wasm/wasm-js.cc @@ -1475,9 +1475,7 @@ void WebAssemblyFunction(const v8::FunctionCallbackInfo<v8::Value>& args) { thrower.TypeError("Argument 0 contains results without 'length'"); return; } - if (results_len > (enabled_features.has_mv() - ? i::wasm::kV8MaxWasmFunctionMultiReturns - : i::wasm::kV8MaxWasmFunctionReturns)) { + if (results_len > i::wasm::kV8MaxWasmFunctionReturns) { thrower.TypeError("Argument 0 contains too many results"); return; } @@ -2034,7 +2032,8 @@ Handle<JSFunction> InstallConstructorFunc(Isolate* isolate, Handle<JSObject> object, const char* str, FunctionCallback func) { - return InstallFunc(isolate, object, str, func, 1, true, DONT_ENUM); + return InstallFunc(isolate, object, str, func, 1, true, DONT_ENUM, + SideEffectType::kHasNoSideEffect); } Handle<String> GetterName(Isolate* isolate, Handle<String> name) { @@ -2064,7 +2063,8 @@ void InstallGetterSetter(Isolate* isolate, Handle<JSObject> object, FunctionCallback setter) { Handle<String> name = v8_str(isolate, str); Handle<JSFunction> getter_func = - CreateFunc(isolate, GetterName(isolate, name), getter, false); + CreateFunc(isolate, GetterName(isolate, name), getter, false, + SideEffectType::kHasNoSideEffect); Handle<JSFunction> setter_func = CreateFunc(isolate, SetterName(isolate, name), setter, false); setter_func->shared().set_length(1); @@ -2148,11 +2148,12 @@ void WasmJs::Install(Isolate* isolate, bool exposed_on_global_object) { JSFunction::SetInitialMap(isolate, module_constructor, module_map, module_proto); InstallFunc(isolate, module_constructor, "imports", WebAssemblyModuleImports, - 1); + 1, false, NONE, SideEffectType::kHasNoSideEffect); InstallFunc(isolate, module_constructor, "exports", WebAssemblyModuleExports, - 1); + 1, false, NONE, SideEffectType::kHasNoSideEffect); InstallFunc(isolate, module_constructor, "customSections", - WebAssemblyModuleCustomSections, 2); + WebAssemblyModuleCustomSections, 2, false, NONE, + SideEffectType::kHasNoSideEffect); JSObject::AddProperty(isolate, module_proto, factory->to_string_tag_symbol(), v8_str(isolate, "WebAssembly.Module"), ro_attributes); @@ -2192,7 +2193,8 @@ void WasmJs::Install(Isolate* isolate, bool exposed_on_global_object) { JSFunction::SetInitialMap(isolate, table_constructor, table_map, table_proto); InstallGetter(isolate, table_proto, "length", WebAssemblyTableGetLength); InstallFunc(isolate, table_proto, "grow", WebAssemblyTableGrow, 1); - InstallFunc(isolate, table_proto, "get", WebAssemblyTableGet, 1); + InstallFunc(isolate, table_proto, "get", WebAssemblyTableGet, 1, false, NONE, + SideEffectType::kHasNoSideEffect); InstallFunc(isolate, table_proto, "set", WebAssemblyTableSet, 2); if (enabled_features.has_type_reflection()) { InstallFunc(isolate, table_constructor, "type", WebAssemblyTableType, 1); @@ -2232,7 +2234,8 @@ void WasmJs::Install(Isolate* isolate, bool exposed_on_global_object) { i::WASM_GLOBAL_OBJECT_TYPE, WasmGlobalObject::kHeaderSize); JSFunction::SetInitialMap(isolate, global_constructor, global_map, global_proto); - InstallFunc(isolate, global_proto, "valueOf", WebAssemblyGlobalValueOf, 0); + InstallFunc(isolate, global_proto, "valueOf", WebAssemblyGlobalValueOf, 0, + false, NONE, SideEffectType::kHasNoSideEffect); InstallGetterSetter(isolate, global_proto, "value", WebAssemblyGlobalGetValue, WebAssemblyGlobalSetValue); if (enabled_features.has_type_reflection()) { @@ -2243,15 +2246,8 @@ void WasmJs::Install(Isolate* isolate, bool exposed_on_global_object) { // Setup Exception if (enabled_features.has_eh()) { - Handle<String> exception_name = v8_str(isolate, "Exception"); - Handle<JSFunction> exception_constructor = - CreateFunc(isolate, exception_name, WebAssemblyException, true, - SideEffectType::kHasSideEffect); - exception_constructor->shared().set_length(1); - JSObject::AddProperty(isolate, webassembly, exception_name, - exception_constructor, DONT_ENUM); - // Install the constructor on the context unconditionally so that it is also - // available when the feature is enabled via the origin trial. + Handle<JSFunction> exception_constructor = InstallConstructorFunc( + isolate, webassembly, "Exception", WebAssemblyException); context->set_wasm_exception_constructor(*exception_constructor); SetDummyInstanceTemplate(isolate, exception_constructor); JSFunction::EnsureHasInitialMap(exception_constructor); @@ -2332,7 +2328,6 @@ void WasmJs::InstallConditionalFeatures(Isolate* isolate, Handle<JSObject> webassembly = Handle<JSObject>::cast(webassembly_obj); // Setup Exception Handle<String> exception_name = v8_str(isolate, "Exception"); - if (JSObject::HasOwnProperty(webassembly, exception_name).FromMaybe(true)) { // The {Exception} constructor already exists, there is nothing more to // do. diff --git a/deps/v8/src/wasm/wasm-limits.h b/deps/v8/src/wasm/wasm-limits.h index 78a8f0afd4..9e565db0e8 100644 --- a/deps/v8/src/wasm/wasm-limits.h +++ b/deps/v8/src/wasm/wasm-limits.h @@ -43,8 +43,7 @@ constexpr size_t kV8MaxWasmModuleSize = 1024 * 1024 * 1024; // = 1 GiB constexpr size_t kV8MaxWasmFunctionSize = 7654321; constexpr size_t kV8MaxWasmFunctionLocals = 50000; constexpr size_t kV8MaxWasmFunctionParams = 1000; -constexpr size_t kV8MaxWasmFunctionMultiReturns = 1000; -constexpr size_t kV8MaxWasmFunctionReturns = 1; +constexpr size_t kV8MaxWasmFunctionReturns = 1000; constexpr size_t kV8MaxWasmFunctionBrTableSize = 65520; // Don't use this limit directly, but use the value of FLAG_wasm_max_table_size. constexpr size_t kV8MaxWasmTableSize = 10000000; @@ -57,7 +56,7 @@ constexpr size_t kV8MaxWasmStructFields = 999; constexpr uint32_t kV8MaxRttSubtypingDepth = 31; // Maximum supported by implementation: ((1<<27)-3). // Reason: total object size in bytes must fit into a Smi, for filler objects. -constexpr size_t kV8MaxWasmArrayLength = 1u << 24; +constexpr size_t kV8MaxWasmArrayLength = 1u << 26; static_assert(kV8MaxWasmTableSize <= 4294967295, // 2^32 - 1 "v8 should not exceed WebAssembly's non-web embedding limits"); diff --git a/deps/v8/src/wasm/wasm-module-builder.cc b/deps/v8/src/wasm/wasm-module-builder.cc index 67f826f2fd..41fa4f6b6b 100644 --- a/deps/v8/src/wasm/wasm-module-builder.cc +++ b/deps/v8/src/wasm/wasm-module-builder.cc @@ -13,7 +13,6 @@ #include "src/wasm/leb-helper.h" #include "src/wasm/wasm-constants.h" #include "src/wasm/wasm-module.h" -#include "src/wasm/wasm-opcodes.h" #include "src/zone/zone-containers.h" namespace v8 { @@ -301,6 +300,11 @@ uint32_t WasmModuleBuilder::AddArrayType(ArrayType* type) { return index; } +// static +const uint32_t WasmModuleBuilder::kNullIndex = + std::numeric_limits<uint32_t>::max(); + +// TODO(9495): Add support for typed function tables and more init. expressions. uint32_t WasmModuleBuilder::AllocateIndirectFunctions(uint32_t count) { DCHECK(allocating_indirect_functions_allowed_); uint32_t index = static_cast<uint32_t>(indirect_functions_.size()); @@ -310,7 +314,7 @@ uint32_t WasmModuleBuilder::AllocateIndirectFunctions(uint32_t count) { } uint32_t new_size = static_cast<uint32_t>(indirect_functions_.size()) + count; DCHECK(max_table_size_ == 0 || new_size <= max_table_size_); - indirect_functions_.resize(new_size, WasmElemSegment::kNullIndex); + indirect_functions_.resize(new_size, kNullIndex); uint32_t max = max_table_size_ > 0 ? max_table_size_ : new_size; if (tables_.empty()) { // This cannot use {AddTable} because that would flip the @@ -710,13 +714,13 @@ void WasmModuleBuilder::WriteTo(ZoneBuffer* buffer) const { buffer->write_u8(0); // table index uint32_t first_element = 0; while (first_element < indirect_functions_.size() && - indirect_functions_[first_element] == WasmElemSegment::kNullIndex) { + indirect_functions_[first_element] == kNullIndex) { first_element++; } uint32_t last_element = static_cast<uint32_t>(indirect_functions_.size() - 1); while (last_element >= first_element && - indirect_functions_[last_element] == WasmElemSegment::kNullIndex) { + indirect_functions_[last_element] == kNullIndex) { last_element--; } buffer->write_u8(kExprI32Const); // offset diff --git a/deps/v8/src/wasm/wasm-module-builder.h b/deps/v8/src/wasm/wasm-module-builder.h index f7b5ff1b76..c1d15a834e 100644 --- a/deps/v8/src/wasm/wasm-module-builder.h +++ b/deps/v8/src/wasm/wasm-module-builder.h @@ -297,6 +297,8 @@ class V8_EXPORT_PRIVATE WasmModuleBuilder : public ZoneObject { return types_[exceptions_[index]].sig; } + static const uint32_t kNullIndex; + private: struct Type { enum Kind { kFunctionSig, kStructType, kArrayType }; diff --git a/deps/v8/src/wasm/wasm-module.cc b/deps/v8/src/wasm/wasm-module.cc index c336dc5f7d..acebe8d0e5 100644 --- a/deps/v8/src/wasm/wasm-module.cc +++ b/deps/v8/src/wasm/wasm-module.cc @@ -21,25 +21,23 @@ #include "src/snapshot/snapshot.h" #include "src/wasm/module-decoder.h" #include "src/wasm/wasm-code-manager.h" +#include "src/wasm/wasm-init-expr.h" #include "src/wasm/wasm-js.h" #include "src/wasm/wasm-objects-inl.h" #include "src/wasm/wasm-result.h" +#include "src/wasm/wasm-subtyping.h" namespace v8 { namespace internal { namespace wasm { -// static -const uint32_t WasmElemSegment::kNullIndex; - WireBytesRef LazilyGeneratedNames::LookupFunctionName( - const ModuleWireBytes& wire_bytes, uint32_t function_index, - Vector<const WasmExport> export_table) const { + const ModuleWireBytes& wire_bytes, uint32_t function_index) const { base::MutexGuard lock(&mutex_); if (!function_names_) { function_names_.reset(new std::unordered_map<uint32_t, WireBytesRef>()); DecodeFunctionNames(wire_bytes.start(), wire_bytes.end(), - function_names_.get(), export_table); + function_names_.get()); } auto it = function_names_->find(function_index); if (it == function_names_->end()) return WireBytesRef(); @@ -180,7 +178,7 @@ WasmName ModuleWireBytes::GetNameOrNull(WireBytesRef ref) const { WasmName ModuleWireBytes::GetNameOrNull(const WasmFunction* function, const WasmModule* module) const { return GetNameOrNull(module->lazily_generated_names.LookupFunctionName( - *this, function->func_index, VectorOf(module->export_table))); + *this, function->func_index)); } std::ostream& operator<<(std::ostream& os, const WasmFunctionName& name) { @@ -199,6 +197,8 @@ std::ostream& operator<<(std::ostream& os, const WasmFunctionName& name) { WasmModule::WasmModule(std::unique_ptr<Zone> signature_zone) : signature_zone(std::move(signature_zone)) {} +WasmModule::~WasmModule() { DeleteCachedTypeJudgementsForModule(this); } + bool IsWasmCodegenAllowed(Isolate* isolate, Handle<Context> context) { // TODO(wasm): Once wasm has its own CSP policy, we should introduce a // separate callback that includes information about the module about to be diff --git a/deps/v8/src/wasm/wasm-module.h b/deps/v8/src/wasm/wasm-module.h index bbfcf9623b..d185e67341 100644 --- a/deps/v8/src/wasm/wasm-module.h +++ b/deps/v8/src/wasm/wasm-module.h @@ -16,10 +16,11 @@ #include "src/common/globals.h" #include "src/handles/handles.h" #include "src/utils/vector.h" +#include "src/wasm/branch-hint-map.h" #include "src/wasm/signature-map.h" #include "src/wasm/struct-types.h" #include "src/wasm/wasm-constants.h" -#include "src/wasm/wasm-opcodes.h" +#include "src/wasm/wasm-init-expr.h" namespace v8 { @@ -107,30 +108,34 @@ struct WasmDataSegment { // Static representation of wasm element segment (table initializer). struct WasmElemSegment { - MOVE_ONLY_NO_DEFAULT_CONSTRUCTOR(WasmElemSegment); - // Construct an active segment. - WasmElemSegment(uint32_t table_index, WasmInitExpr offset) - : type(kWasmFuncRef), + WasmElemSegment(ValueType type, uint32_t table_index, WasmInitExpr offset) + : type(type), table_index(table_index), offset(std::move(offset)), status(kStatusActive) {} // Construct a passive or declarative segment, which has no table index or // offset. - explicit WasmElemSegment(bool declarative) - : type(kWasmFuncRef), + WasmElemSegment(ValueType type, bool declarative) + : type(type), table_index(0), status(declarative ? kStatusDeclarative : kStatusPassive) {} - // Used in the {entries} vector to represent a `ref.null` entry in a passive - // segment. - V8_EXPORT_PRIVATE static const uint32_t kNullIndex = ~0u; + // Construct a passive or declarative segment, which has no table index or + // offset. + WasmElemSegment() + : type(kWasmBottom), table_index(0), status(kStatusActive) {} + + WasmElemSegment(const WasmElemSegment&) = delete; + WasmElemSegment(WasmElemSegment&&) V8_NOEXCEPT = default; + WasmElemSegment& operator=(const WasmElemSegment&) = delete; + WasmElemSegment& operator=(WasmElemSegment&&) V8_NOEXCEPT = default; ValueType type; uint32_t table_index; WasmInitExpr offset; - std::vector<uint32_t> entries; + std::vector<WasmInitExpr> entries; enum Status { kStatusActive, // copied automatically during instantiation. kStatusPassive, // copied explicitly after instantiation. @@ -188,8 +193,7 @@ struct ModuleWireBytes; class V8_EXPORT_PRIVATE LazilyGeneratedNames { public: WireBytesRef LookupFunctionName(const ModuleWireBytes& wire_bytes, - uint32_t function_index, - Vector<const WasmExport> export_table) const; + uint32_t function_index) const; void AddForTesting(int function_index, WireBytesRef name); @@ -335,6 +339,7 @@ struct V8_EXPORT_PRIVATE WasmModule { std::vector<WasmException> exceptions; std::vector<WasmElemSegment> elem_segments; std::vector<WasmCompilationHint> compilation_hints; + BranchHintInfo branch_hints; SignatureMap signature_map; // canonicalizing map for signature indexes. ModuleOrigin origin = kWasmOrigin; // origin of the module @@ -347,6 +352,7 @@ struct V8_EXPORT_PRIVATE WasmModule { explicit WasmModule(std::unique_ptr<Zone> signature_zone = nullptr); WasmModule(const WasmModule&) = delete; + ~WasmModule(); WasmModule& operator=(const WasmModule&) = delete; }; diff --git a/deps/v8/src/wasm/wasm-objects-inl.h b/deps/v8/src/wasm/wasm-objects-inl.h index 3da7e1650a..e102fbd97f 100644 --- a/deps/v8/src/wasm/wasm-objects-inl.h +++ b/deps/v8/src/wasm/wasm-objects-inl.h @@ -36,13 +36,14 @@ namespace internal { OBJECT_CONSTRUCTORS_IMPL(WasmExceptionObject, JSObject) TQ_OBJECT_CONSTRUCTORS_IMPL(WasmExceptionTag) -OBJECT_CONSTRUCTORS_IMPL(WasmExportedFunctionData, Struct) +OBJECT_CONSTRUCTORS_IMPL(WasmExportedFunctionData, WasmFunctionData) OBJECT_CONSTRUCTORS_IMPL(WasmGlobalObject, JSObject) OBJECT_CONSTRUCTORS_IMPL(WasmInstanceObject, JSObject) OBJECT_CONSTRUCTORS_IMPL(WasmMemoryObject, JSObject) OBJECT_CONSTRUCTORS_IMPL(WasmModuleObject, JSObject) OBJECT_CONSTRUCTORS_IMPL(WasmTableObject, JSObject) OBJECT_CONSTRUCTORS_IMPL(AsmWasmData, Struct) +TQ_OBJECT_CONSTRUCTORS_IMPL(WasmFunctionData) TQ_OBJECT_CONSTRUCTORS_IMPL(WasmTypeInfo) TQ_OBJECT_CONSTRUCTORS_IMPL(WasmStruct) TQ_OBJECT_CONSTRUCTORS_IMPL(WasmArray) @@ -55,6 +56,7 @@ CAST_ACCESSOR(WasmMemoryObject) CAST_ACCESSOR(WasmModuleObject) CAST_ACCESSOR(WasmTableObject) CAST_ACCESSOR(AsmWasmData) +CAST_ACCESSOR(WasmFunctionData) CAST_ACCESSOR(WasmTypeInfo) CAST_ACCESSOR(WasmStruct) CAST_ACCESSOR(WasmArray) @@ -329,18 +331,17 @@ WasmExportedFunction::WasmExportedFunction(Address ptr) : JSFunction(ptr) { } CAST_ACCESSOR(WasmExportedFunction) +// WasmFunctionData +ACCESSORS(WasmFunctionData, ref, Object, kRefOffset) + // WasmExportedFunctionData ACCESSORS(WasmExportedFunctionData, wrapper_code, Code, kWrapperCodeOffset) ACCESSORS(WasmExportedFunctionData, instance, WasmInstanceObject, kInstanceOffset) -SMI_ACCESSORS(WasmExportedFunctionData, jump_table_offset, - kJumpTableOffsetOffset) SMI_ACCESSORS(WasmExportedFunctionData, function_index, kFunctionIndexOffset) ACCESSORS(WasmExportedFunctionData, signature, Foreign, kSignatureOffset) SMI_ACCESSORS(WasmExportedFunctionData, wrapper_budget, kWrapperBudgetOffset) ACCESSORS(WasmExportedFunctionData, c_wrapper_code, Object, kCWrapperCodeOffset) -ACCESSORS(WasmExportedFunctionData, wasm_call_target, Object, - kWasmCallTargetOffset) SMI_ACCESSORS(WasmExportedFunctionData, packed_args_size, kPackedArgsSizeOffset) wasm::FunctionSig* WasmExportedFunctionData::sig() const { @@ -354,7 +355,7 @@ WasmJSFunction::WasmJSFunction(Address ptr) : JSFunction(ptr) { CAST_ACCESSOR(WasmJSFunction) // WasmJSFunctionData -OBJECT_CONSTRUCTORS_IMPL(WasmJSFunctionData, Struct) +OBJECT_CONSTRUCTORS_IMPL(WasmJSFunctionData, WasmFunctionData) CAST_ACCESSOR(WasmJSFunctionData) SMI_ACCESSORS(WasmJSFunctionData, serialized_return_count, kSerializedReturnCountOffset) @@ -362,7 +363,6 @@ SMI_ACCESSORS(WasmJSFunctionData, serialized_parameter_count, kSerializedParameterCountOffset) ACCESSORS(WasmJSFunctionData, serialized_signature, PodArray<wasm::ValueType>, kSerializedSignatureOffset) -ACCESSORS(WasmJSFunctionData, callable, JSReceiver, kCallableOffset) ACCESSORS(WasmJSFunctionData, wrapper_code, Code, kWrapperCodeOffset) ACCESSORS(WasmJSFunctionData, wasm_to_js_wrapper_code, Code, kWasmToJsWrapperCodeOffset) @@ -416,13 +416,27 @@ wasm::StructType* WasmStruct::type(Map map) { wasm::StructType* WasmStruct::GcSafeType(Map map) { DCHECK_EQ(WASM_STRUCT_TYPE, map.instance_type()); HeapObject raw = HeapObject::cast(map.constructor_or_back_pointer()); - MapWord map_word = raw.map_word(); + MapWord map_word = raw.map_word(kRelaxedLoad); HeapObject forwarded = map_word.IsForwardingAddress() ? map_word.ToForwardingAddress() : raw; Foreign foreign = Foreign::cast(forwarded); return reinterpret_cast<wasm::StructType*>(foreign.foreign_address()); } +int WasmStruct::Size(const wasm::StructType* type) { + // Object size must fit into a Smi (because of filler objects), and its + // computation must not overflow. + STATIC_ASSERT(Smi::kMaxValue <= kMaxInt); + DCHECK_LE(type->total_fields_size(), Smi::kMaxValue - kHeaderSize); + return std::max(kHeaderSize + static_cast<int>(type->total_fields_size()), + Heap::kMinObjectSizeInTaggedWords * kTaggedSize); +} + +int WasmStruct::GcSafeSize(Map map) { + wasm::StructType* type = GcSafeType(map); + return Size(type); +} + wasm::StructType* WasmStruct::type() const { return type(map()); } ObjectSlot WasmStruct::RawField(int raw_offset) { @@ -439,7 +453,7 @@ wasm::ArrayType* WasmArray::type(Map map) { wasm::ArrayType* WasmArray::GcSafeType(Map map) { DCHECK_EQ(WASM_ARRAY_TYPE, map.instance_type()); HeapObject raw = HeapObject::cast(map.constructor_or_back_pointer()); - MapWord map_word = raw.map_word(); + MapWord map_word = raw.map_word(kRelaxedLoad); HeapObject forwarded = map_word.IsForwardingAddress() ? map_word.ToForwardingAddress() : raw; Foreign foreign = Foreign::cast(forwarded); @@ -460,12 +474,6 @@ int WasmArray::GcSafeSizeFor(Map map, int length) { void WasmTypeInfo::clear_foreign_address(Isolate* isolate) { #ifdef V8_HEAP_SANDBOX - - // TODO(syg): V8_HEAP_SANDBOX doesn't work with pointer cage -#ifdef V8_COMPRESS_POINTERS_IN_SHARED_CAGE -#error "V8_HEAP_SANDBOX requires per-Isolate pointer compression cage" -#endif - // Due to the type-specific pointer tags for external pointers, we need to // allocate an entry in the table here even though it will just store nullptr. AllocateExternalPointerEntries(isolate); diff --git a/deps/v8/src/wasm/wasm-objects.cc b/deps/v8/src/wasm/wasm-objects.cc index d4e7cb65a1..718124debf 100644 --- a/deps/v8/src/wasm/wasm-objects.cc +++ b/deps/v8/src/wasm/wasm-objects.cc @@ -226,33 +226,21 @@ MaybeHandle<String> WasmModuleObject::GetFunctionNameOrNull( wasm::WireBytesRef name = module_object->module()->lazily_generated_names.LookupFunctionName( wasm::ModuleWireBytes(module_object->native_module()->wire_bytes()), - func_index, VectorOf(module_object->module()->export_table)); + func_index); if (!name.is_set()) return {}; return ExtractUtf8StringFromModuleBytes(isolate, module_object, name, kNoInternalize); } -Handle<String> WasmModuleObject::GetFunctionName( - Isolate* isolate, Handle<WasmModuleObject> module_object, - uint32_t func_index) { - MaybeHandle<String> name = - GetFunctionNameOrNull(isolate, module_object, func_index); - if (!name.is_null()) return name.ToHandleChecked(); - EmbeddedVector<char, 32> buffer; - DCHECK_GE(func_index, module_object->module()->num_imported_functions); - int length = SNPrintF(buffer, "func%u", func_index); - return isolate->factory() - ->NewStringFromOneByte(Vector<uint8_t>::cast(buffer.SubVector(0, length))) - .ToHandleChecked(); -} - -Vector<const uint8_t> WasmModuleObject::GetRawFunctionName( - uint32_t func_index) { +Vector<const uint8_t> WasmModuleObject::GetRawFunctionName(int func_index) { + if (func_index == wasm::kAnonymousFuncIndex) { + return Vector<const uint8_t>({nullptr, 0}); + } DCHECK_GT(module()->functions.size(), func_index); wasm::ModuleWireBytes wire_bytes(native_module()->wire_bytes()); wasm::WireBytesRef name_ref = - module()->lazily_generated_names.LookupFunctionName( - wire_bytes, func_index, VectorOf(module()->export_table)); + module()->lazily_generated_names.LookupFunctionName(wire_bytes, + func_index); wasm::WasmName name = wire_bytes.GetNameOrNull(name_ref); return Vector<const uint8_t>::cast(name); } @@ -454,21 +442,18 @@ void WasmTableObject::Set(Isolate* isolate, Handle<WasmTableObject> table, case wasm::HeapType::kEq: case wasm::HeapType::kData: case wasm::HeapType::kI31: - // TODO(7748): Implement once we have a story for struct/arrays/i31ref in - // JS. - UNIMPLEMENTED(); + // TODO(7748): Implement once we have struct/arrays/i31ref tables. + UNREACHABLE(); case wasm::HeapType::kBottom: UNREACHABLE(); default: DCHECK(!table->instance().IsUndefined()); - if (WasmInstanceObject::cast(table->instance()) - .module() - ->has_signature(entry_index)) { - SetFunctionTableEntry(isolate, table, entries, entry_index, entry); - return; - } - // TODO(7748): Implement once we have a story for struct/arrays in JS. - UNIMPLEMENTED(); + // TODO(7748): Relax this once we have struct/array/i31ref tables. + DCHECK(WasmInstanceObject::cast(table->instance()) + .module() + ->has_signature(table->type().ref_index())); + SetFunctionTableEntry(isolate, table, entries, entry_index, entry); + return; } } @@ -509,18 +494,16 @@ Handle<Object> WasmTableObject::Get(Isolate* isolate, UNREACHABLE(); default: DCHECK(!table->instance().IsUndefined()); - if (WasmInstanceObject::cast(table->instance()) - .module() - ->has_signature(entry_index)) { - if (WasmExportedFunction::IsWasmExportedFunction(*entry) || - WasmJSFunction::IsWasmJSFunction(*entry) || - WasmCapiFunction::IsWasmCapiFunction(*entry)) { - return entry; - } - break; + // TODO(7748): Relax this once we have struct/array/i31ref tables. + DCHECK(WasmInstanceObject::cast(table->instance()) + .module() + ->has_signature(table->type().ref_index())); + if (WasmExportedFunction::IsWasmExportedFunction(*entry) || + WasmJSFunction::IsWasmJSFunction(*entry) || + WasmCapiFunction::IsWasmCapiFunction(*entry)) { + return entry; } - // TODO(7748): Implement once we have a story for struct/arrays in JS. - UNIMPLEMENTED(); + break; } // {entry} is not a valid entry in the table. It has to be a placeholder @@ -1898,30 +1881,18 @@ Handle<WasmExportedFunction> WasmExportedFunction::New( (export_wrapper->is_builtin() && export_wrapper->builtin_index() == Builtins::kGenericJSToWasmWrapper)); int num_imported_functions = instance->module()->num_imported_functions; - int jump_table_offset = -1; - if (func_index >= num_imported_functions) { - uint32_t jump_table_diff = - instance->module_object().native_module()->GetJumpTableOffset( - func_index); - DCHECK_GE(kMaxInt, jump_table_diff); - jump_table_offset = static_cast<int>(jump_table_diff); - } + Handle<Object> ref = + func_index >= num_imported_functions + ? instance + : handle(instance->imported_function_refs().get(func_index), isolate); + Factory* factory = isolate->factory(); const wasm::FunctionSig* sig = instance->module()->functions[func_index].sig; - Handle<Foreign> sig_foreign = - factory->NewForeign(reinterpret_cast<Address>(sig)); + Address call_target = instance->GetCallTarget(func_index); Handle<WasmExportedFunctionData> function_data = - Handle<WasmExportedFunctionData>::cast(factory->NewStruct( - WASM_EXPORTED_FUNCTION_DATA_TYPE, AllocationType::kOld)); - function_data->set_wrapper_code(*export_wrapper); - function_data->set_instance(*instance); - function_data->set_jump_table_offset(jump_table_offset); - function_data->set_function_index(func_index); - function_data->set_signature(*sig_foreign); - function_data->set_wrapper_budget(wasm::kGenericWrapperBudget); - function_data->set_c_wrapper_code(Smi::zero(), SKIP_WRITE_BARRIER); - function_data->set_wasm_call_target(Smi::zero(), SKIP_WRITE_BARRIER); - function_data->set_packed_args_size(0); + factory->NewWasmExportedFunctionData( + export_wrapper, instance, call_target, ref, func_index, + reinterpret_cast<Address>(sig), wasm::kGenericWrapperBudget); MaybeHandle<String> maybe_name; bool is_asm_js_module = instance->module_object().is_asm_js(); @@ -2042,18 +2013,18 @@ Handle<WasmJSFunction> WasmJSFunction::New(Isolate* isolate, Handle<Code> wrapper_code = compiler::CompileJSToJSWrapper(isolate, sig, nullptr).ToHandleChecked(); + // WasmJSFunctions use on-heap Code objects as call targets, so we can't + // cache the target address, unless the WasmJSFunction wraps a + // WasmExportedFunction. + Address call_target = kNullAddress; + if (WasmExportedFunction::IsWasmExportedFunction(*callable)) { + call_target = WasmExportedFunction::cast(*callable).GetWasmCallTarget(); + } + Factory* factory = isolate->factory(); - Handle<WasmJSFunctionData> function_data = Handle<WasmJSFunctionData>::cast( - factory->NewStruct(WASM_JS_FUNCTION_DATA_TYPE, AllocationType::kOld)); - function_data->set_serialized_return_count(return_count); - function_data->set_serialized_parameter_count(parameter_count); - function_data->set_serialized_signature(*serialized_sig); - function_data->set_callable(*callable); - function_data->set_wrapper_code(*wrapper_code); - // Use Abort() as a default value (it will never be called if not overwritten - // below). - function_data->set_wasm_to_js_wrapper_code( - isolate->heap()->builtin(Builtins::kAbort)); + Handle<WasmJSFunctionData> function_data = factory->NewWasmJSFunctionData( + call_target, callable, return_count, parameter_count, serialized_sig, + wrapper_code); if (wasm::WasmFeatures::FromIsolate(isolate).has_typed_funcref()) { using CK = compiler::WasmImportCallKind; @@ -2094,7 +2065,8 @@ Handle<WasmJSFunction> WasmJSFunction::New(Isolate* isolate, } JSReceiver WasmJSFunction::GetCallable() const { - return shared().wasm_js_function_data().callable(); + return JSReceiver::cast( + Tuple2::cast(shared().wasm_js_function_data().ref()).value2()); } const wasm::FunctionSig* WasmJSFunction::GetSignature(Zone* zone) { @@ -2256,7 +2228,8 @@ bool TypecheckJSObject(Isolate* isolate, const WasmModule* module, if (WasmJSFunction::IsWasmJSFunction(*value)) { // Since a WasmJSFunction cannot refer to indexed types (definable - // only in a module), we do not need to use EquivalentTypes(). + // only in a module), we do not need full function subtyping. + // TODO(manoskouk): Change this if wasm types can be exported. if (!WasmJSFunction::cast(*value).MatchesSignature( module->signature(expected.ref_index()))) { *error_message = @@ -2268,11 +2241,12 @@ bool TypecheckJSObject(Isolate* isolate, const WasmModule* module, } if (WasmCapiFunction::IsWasmCapiFunction(*value)) { + // Since a WasmCapiFunction cannot refer to indexed types + // (definable only in a module), we do not need full function + // subtyping. + // TODO(manoskouk): Change this if wasm types can be exported. if (!WasmCapiFunction::cast(*value).MatchesSignature( module->signature(expected.ref_index()))) { - // Since a WasmCapiFunction cannot refer to indexed types - // (definable in a module), we don't need to invoke - // IsEquivalentType(); *error_message = "assigned WasmCapiFunction has to be a subtype of the " "expected type"; diff --git a/deps/v8/src/wasm/wasm-objects.h b/deps/v8/src/wasm/wasm-objects.h index 47bef60ac7..473c4725cc 100644 --- a/deps/v8/src/wasm/wasm-objects.h +++ b/deps/v8/src/wasm/wasm-objects.h @@ -166,17 +166,11 @@ class WasmModuleObject : public JSObject { Handle<WasmModuleObject>, uint32_t func_index); - // Get the function name of the function identified by the given index. - // Returns "func[func_index]" if the function is unnamed or the - // name is not a valid UTF-8 string. - static Handle<String> GetFunctionName(Isolate*, Handle<WasmModuleObject>, - uint32_t func_index); - // Get the raw bytes of the function name of the function identified by the // given index. // Meant to be used for debugging or frame printing. // Does not allocate, hence gc-safe. - Vector<const uint8_t> GetRawFunctionName(uint32_t func_index); + Vector<const uint8_t> GetRawFunctionName(int func_index); // Extract a portion of the wire bytes as UTF-8 string, optionally // internalized. (Prefer to internalize early if the string will be used for a @@ -747,19 +741,31 @@ class WasmIndirectFunctionTable : public Struct { OBJECT_CONSTRUCTORS(WasmIndirectFunctionTable, Struct); }; +class WasmFunctionData + : public TorqueGeneratedWasmFunctionData<WasmFunctionData, Foreign> { + public: + DECL_ACCESSORS(ref, Object) + + DECL_CAST(WasmFunctionData) + DECL_PRINTER(WasmFunctionData) + + TQ_OBJECT_CONSTRUCTORS(WasmFunctionData) +}; + // Information for a WasmExportedFunction which is referenced as the function // data of the SharedFunctionInfo underlying the function. For details please // see the {SharedFunctionInfo::HasWasmExportedFunctionData} predicate. -class WasmExportedFunctionData : public Struct { +class WasmExportedFunctionData : public WasmFunctionData { public: DECL_ACCESSORS(wrapper_code, Code) + // This is the instance that exported the function (which in case of + // imported and re-exported functions is different from the instance + // where the function is defined -- for the latter see WasmFunctionData::ref). DECL_ACCESSORS(instance, WasmInstanceObject) - DECL_INT_ACCESSORS(jump_table_offset) DECL_INT_ACCESSORS(function_index) DECL_ACCESSORS(signature, Foreign) DECL_INT_ACCESSORS(wrapper_budget) DECL_ACCESSORS(c_wrapper_code, Object) - DECL_ACCESSORS(wasm_call_target, Object) DECL_INT_ACCESSORS(packed_args_size) inline wasm::FunctionSig* sig() const; @@ -772,21 +778,22 @@ class WasmExportedFunctionData : public Struct { // Layout description. DEFINE_FIELD_OFFSET_CONSTANTS( - HeapObject::kHeaderSize, + WasmFunctionData::kSize, TORQUE_GENERATED_WASM_EXPORTED_FUNCTION_DATA_FIELDS) - OBJECT_CONSTRUCTORS(WasmExportedFunctionData, Struct); + class BodyDescriptor; + + OBJECT_CONSTRUCTORS(WasmExportedFunctionData, WasmFunctionData); }; // Information for a WasmJSFunction which is referenced as the function data of // the SharedFunctionInfo underlying the function. For details please see the // {SharedFunctionInfo::HasWasmJSFunctionData} predicate. -class WasmJSFunctionData : public Struct { +class WasmJSFunctionData : public WasmFunctionData { public: DECL_INT_ACCESSORS(serialized_return_count) DECL_INT_ACCESSORS(serialized_parameter_count) DECL_ACCESSORS(serialized_signature, PodArray<wasm::ValueType>) - DECL_ACCESSORS(callable, JSReceiver) DECL_ACCESSORS(wrapper_code, Code) DECL_ACCESSORS(wasm_to_js_wrapper_code, Code) @@ -797,10 +804,12 @@ class WasmJSFunctionData : public Struct { DECL_VERIFIER(WasmJSFunctionData) // Layout description. - DEFINE_FIELD_OFFSET_CONSTANTS(HeapObject::kHeaderSize, + DEFINE_FIELD_OFFSET_CONSTANTS(WasmFunctionData::kSize, TORQUE_GENERATED_WASM_JS_FUNCTION_DATA_FIELDS) - OBJECT_CONSTRUCTORS(WasmJSFunctionData, Struct); + class BodyDescriptor; + + OBJECT_CONSTRUCTORS(WasmJSFunctionData, WasmFunctionData); }; class WasmScript : public AllStatic { @@ -915,6 +924,8 @@ class WasmStruct : public TorqueGeneratedWasmStruct<WasmStruct, HeapObject> { static inline wasm::StructType* type(Map map); inline wasm::StructType* type() const; static inline wasm::StructType* GcSafeType(Map map); + static inline int Size(const wasm::StructType* type); + static inline int GcSafeSize(Map map); inline ObjectSlot RawField(int raw_offset); diff --git a/deps/v8/src/wasm/wasm-objects.tq b/deps/v8/src/wasm/wasm-objects.tq index adcf63ba87..13911e590d 100644 --- a/deps/v8/src/wasm/wasm-objects.tq +++ b/deps/v8/src/wasm/wasm-objects.tq @@ -11,22 +11,31 @@ type ManagedWasmNativeModule extends Foreign extern class WasmInstanceObject extends JSObject; -extern class WasmExportedFunctionData extends Struct { +@generateCppClass +extern class WasmFunctionData extends Foreign { + // This is the "reference" value that must be passed along in the "instance" + // register when calling the given function. It is either the target instance, + // or a pair holding the target instance and the callable; currently the + // latter is the case when the function being called is defined in JavaScript + // or via the C-API. + // For imported functions, this value equals the respective entry in + // the module's imported_function_refs array. + ref: WasmInstanceObject|Tuple2; +} + +extern class WasmExportedFunctionData extends WasmFunctionData { wrapper_code: Code; instance: WasmInstanceObject; - jump_table_offset: Smi; function_index: Smi; signature: Foreign; wrapper_budget: Smi; // The remaining fields are for fast calling from C++. The contract is // that they are lazily populated, and either all will be present or none. c_wrapper_code: Object; - wasm_call_target: Smi|Foreign; packed_args_size: Smi; } -extern class WasmJSFunctionData extends Struct { - callable: JSReceiver; +extern class WasmJSFunctionData extends WasmFunctionData { wrapper_code: Code; wasm_to_js_wrapper_code: Code; serialized_return_count: Smi; @@ -34,6 +43,7 @@ extern class WasmJSFunctionData extends Struct { serialized_signature: PodArrayOfWasmValueType; } +// TODO(jkummerow): Derive from WasmFunctionData. @export class WasmCapiFunctionData extends HeapObject { call_target: RawPtr; @@ -107,6 +117,8 @@ extern class AsmWasmData extends Struct { extern class WasmTypeInfo extends Foreign { supertypes: FixedArray; subtypes: ArrayList; + // In bytes, used for struct allocation. + instance_size: Smi; } @generateCppClass diff --git a/deps/v8/src/wasm/wasm-opcodes-inl.h b/deps/v8/src/wasm/wasm-opcodes-inl.h index 6b124b2dbc..bc14a4adef 100644 --- a/deps/v8/src/wasm/wasm-opcodes-inl.h +++ b/deps/v8/src/wasm/wasm-opcodes-inl.h @@ -162,6 +162,7 @@ constexpr const char* WasmOpcodes::OpcodeName(WasmOpcode opcode) { CASE_OP(CallRef, "call_ref") CASE_OP(ReturnCallRef, "return_call_ref") CASE_OP(BrOnNull, "br_on_null") + CASE_OP(BrOnNonNull, "br_on_non_null") CASE_OP(Drop, "drop") CASE_OP(Select, "select") CASE_OP(SelectWithType, "select") @@ -400,6 +401,7 @@ constexpr const char* WasmOpcodes::OpcodeName(WasmOpcode opcode) { CASE_OP(RefTest, "ref.test") CASE_OP(RefCast, "ref.cast") CASE_OP(BrOnCast, "br_on_cast") + CASE_OP(BrOnCastFail, "br_on_cast_fail") CASE_OP(RefIsFunc, "ref.is_func") CASE_OP(RefIsData, "ref.is_data") CASE_OP(RefIsI31, "ref.is_i31") @@ -629,16 +631,12 @@ constexpr const FunctionSig* WasmOpcodes::Signature(WasmOpcode opcode) { case kNumericPrefix: return impl::kCachedSigs[impl::kNumericExprSigTable[opcode & 0xFF]]; default: -#if V8_HAS_CXX14_CONSTEXPR UNREACHABLE(); // invalid prefix. -#else - return nullptr; -#endif } } constexpr const FunctionSig* WasmOpcodes::AsmjsSignature(WasmOpcode opcode) { - CONSTEXPR_DCHECK(opcode < impl::kSimpleAsmjsExprSigTable.size()); + DCHECK_GT(impl::kSimpleAsmjsExprSigTable.size(), opcode); return impl::kCachedSigs[impl::kSimpleAsmjsExprSigTable[opcode]]; } diff --git a/deps/v8/src/wasm/wasm-opcodes.cc b/deps/v8/src/wasm/wasm-opcodes.cc index 9461807751..e4c0d19a05 100644 --- a/deps/v8/src/wasm/wasm-opcodes.cc +++ b/deps/v8/src/wasm/wasm-opcodes.cc @@ -35,9 +35,6 @@ std::ostream& operator<<(std::ostream& os, const FunctionSig& sig) { // https://chromium-review.googlesource.com/c/v8/v8/+/2413251). bool IsJSCompatibleSignature(const FunctionSig* sig, const WasmModule* module, const WasmFeatures& enabled_features) { - if (!enabled_features.has_mv() && sig->return_count() > 1) { - return false; - } for (auto type : sig->all()) { // TODO(7748): Allow structs, arrays, and rtts when their JS-interaction is // decided on. diff --git a/deps/v8/src/wasm/wasm-opcodes.h b/deps/v8/src/wasm/wasm-opcodes.h index 909cacadd2..5de6892124 100644 --- a/deps/v8/src/wasm/wasm-opcodes.h +++ b/deps/v8/src/wasm/wasm-opcodes.h @@ -52,6 +52,7 @@ bool V8_EXPORT_PRIVATE IsJSCompatibleSignature(const FunctionSig* sig, V(Delegate, 0x18, _ /* eh_prototype */) \ V(CatchAll, 0x19, _ /* eh_prototype */) \ V(BrOnNull, 0xd4, _ /* gc prototype */) \ + V(BrOnNonNull, 0xd6, _ /* gc prototype */) \ V(NopForTestingUnsupportedInLiftoff, 0x16, _) // Constants, locals, globals, and calls. @@ -252,37 +253,37 @@ bool V8_EXPORT_PRIVATE IsJSCompatibleSignature(const FunctionSig* sig, // These opcodes are not spec'ed (or visible) externally; the idea is // to use unused ranges for internal purposes. #define FOREACH_ASMJS_COMPAT_OPCODE(V) \ - V(F64Acos, 0xc5, d_d) \ - V(F64Asin, 0xc6, d_d) \ - V(F64Atan, 0xc7, d_d) \ - V(F64Cos, 0xc8, d_d) \ - V(F64Sin, 0xc9, d_d) \ - V(F64Tan, 0xca, d_d) \ - V(F64Exp, 0xcb, d_d) \ - V(F64Log, 0xcc, d_d) \ - V(F64Atan2, 0xcd, d_dd) \ - V(F64Pow, 0xce, d_dd) \ - V(F64Mod, 0xcf, d_dd) \ + V(F64Acos, 0xdc, d_d) \ + V(F64Asin, 0xdd, d_d) \ + V(F64Atan, 0xde, d_d) \ + V(F64Cos, 0xdf, d_d) \ + V(F64Sin, 0xe0, d_d) \ + V(F64Tan, 0xe1, d_d) \ + V(F64Exp, 0xe2, d_d) \ + V(F64Log, 0xe3, d_d) \ + V(F64Atan2, 0xe4, d_dd) \ + V(F64Pow, 0xe5, d_dd) \ + V(F64Mod, 0xe6, d_dd) \ V(I32AsmjsDivS, 0xe7, i_ii) \ V(I32AsmjsDivU, 0xe8, i_ii) \ V(I32AsmjsRemS, 0xe9, i_ii) \ - V(I32AsmjsRemU, 0xd6, i_ii) \ - V(I32AsmjsLoadMem8S, 0xd7, i_i) \ - V(I32AsmjsLoadMem8U, 0xd8, i_i) \ - V(I32AsmjsLoadMem16S, 0xd9, i_i) \ - V(I32AsmjsLoadMem16U, 0xda, i_i) \ - V(I32AsmjsLoadMem, 0xdb, i_i) \ - V(F32AsmjsLoadMem, 0xdc, f_i) \ - V(F64AsmjsLoadMem, 0xdd, d_i) \ - V(I32AsmjsStoreMem8, 0xde, i_ii) \ - V(I32AsmjsStoreMem16, 0xdf, i_ii) \ - V(I32AsmjsStoreMem, 0xe0, i_ii) \ - V(F32AsmjsStoreMem, 0xe1, f_if) \ - V(F64AsmjsStoreMem, 0xe2, d_id) \ - V(I32AsmjsSConvertF32, 0xe3, i_f) \ - V(I32AsmjsUConvertF32, 0xe4, i_f) \ - V(I32AsmjsSConvertF64, 0xe5, i_d) \ - V(I32AsmjsUConvertF64, 0xe6, i_d) + V(I32AsmjsRemU, 0xea, i_ii) \ + V(I32AsmjsLoadMem8S, 0xeb, i_i) \ + V(I32AsmjsLoadMem8U, 0xec, i_i) \ + V(I32AsmjsLoadMem16S, 0xed, i_i) \ + V(I32AsmjsLoadMem16U, 0xee, i_i) \ + V(I32AsmjsLoadMem, 0xef, i_i) \ + V(F32AsmjsLoadMem, 0xf0, f_i) \ + V(F64AsmjsLoadMem, 0xf1, d_i) \ + V(I32AsmjsStoreMem8, 0xf2, i_ii) \ + V(I32AsmjsStoreMem16, 0xf3, i_ii) \ + V(I32AsmjsStoreMem, 0xf4, i_ii) \ + V(F32AsmjsStoreMem, 0xf5, f_if) \ + V(F64AsmjsStoreMem, 0xf6, d_id) \ + V(I32AsmjsSConvertF32, 0xf7, i_f) \ + V(I32AsmjsUConvertF32, 0xf8, i_f) \ + V(I32AsmjsSConvertF64, 0xf9, i_d) \ + V(I32AsmjsUConvertF64, 0xfa, i_d) #define FOREACH_SIMD_MEM_OPCODE(V) \ V(S128LoadMem, 0xfd00, s_i) \ @@ -670,6 +671,7 @@ bool V8_EXPORT_PRIVATE IsJSCompatibleSignature(const FunctionSig* sig, V(RefTest, 0xfb40, _) \ V(RefCast, 0xfb41, _) \ V(BrOnCast, 0xfb42, _) \ + V(BrOnCastFail, 0xfb43, _) \ V(RefIsFunc, 0xfb50, _) \ V(RefIsData, 0xfb51, _) \ V(RefIsI31, 0xfb52, _) \ @@ -759,10 +761,10 @@ bool V8_EXPORT_PRIVATE IsJSCompatibleSignature(const FunctionSig* sig, V(s_is, kWasmS128, kWasmI32, kWasmS128) #define FOREACH_PREFIX(V) \ + V(GC, 0xfb) \ V(Numeric, 0xfc) \ V(Simd, 0xfd) \ - V(Atomic, 0xfe) \ - V(GC, 0xfb) + V(Atomic, 0xfe) enum WasmOpcode { // Declare expression opcodes. @@ -801,129 +803,6 @@ class V8_EXPORT_PRIVATE WasmOpcodes { static inline const char* TrapReasonMessage(TrapReason); }; -// Representation of an initializer expression. -class WasmInitExpr { - public: - enum Operator { - kNone, - kGlobalGet, - kI32Const, - kI64Const, - kF32Const, - kF64Const, - kS128Const, - kRefNullConst, - kRefFuncConst, - kRttCanon, - kRttSub - }; - - union Immediate { - int32_t i32_const; - int64_t i64_const; - float f32_const; - double f64_const; - std::array<uint8_t, kSimd128Size> s128_const; - uint32_t index; - HeapType::Representation heap_type; - }; - - WasmInitExpr() : kind_(kNone) { immediate_.i32_const = 0; } - explicit WasmInitExpr(int32_t v) : kind_(kI32Const) { - immediate_.i32_const = v; - } - explicit WasmInitExpr(int64_t v) : kind_(kI64Const) { - immediate_.i64_const = v; - } - explicit WasmInitExpr(float v) : kind_(kF32Const) { - immediate_.f32_const = v; - } - explicit WasmInitExpr(double v) : kind_(kF64Const) { - immediate_.f64_const = v; - } - explicit WasmInitExpr(uint8_t v[kSimd128Size]) : kind_(kS128Const) { - base::Memcpy(immediate_.s128_const.data(), v, kSimd128Size); - } - - MOVE_ONLY_NO_DEFAULT_CONSTRUCTOR(WasmInitExpr); - - static WasmInitExpr GlobalGet(uint32_t index) { - WasmInitExpr expr; - expr.kind_ = kGlobalGet; - expr.immediate_.index = index; - return expr; - } - - static WasmInitExpr RefFuncConst(uint32_t index) { - WasmInitExpr expr; - expr.kind_ = kRefFuncConst; - expr.immediate_.index = index; - return expr; - } - - static WasmInitExpr RefNullConst(HeapType::Representation heap_type) { - WasmInitExpr expr; - expr.kind_ = kRefNullConst; - expr.immediate_.heap_type = heap_type; - return expr; - } - - static WasmInitExpr RttCanon(uint32_t index) { - WasmInitExpr expr; - expr.kind_ = kRttCanon; - expr.immediate_.index = index; - return expr; - } - - static WasmInitExpr RttSub(uint32_t index, WasmInitExpr supertype) { - WasmInitExpr expr; - expr.kind_ = kRttSub; - expr.immediate_.index = index; - expr.operand_ = std::make_unique<WasmInitExpr>(std::move(supertype)); - return expr; - } - - Immediate immediate() const { return immediate_; } - Operator kind() const { return kind_; } - WasmInitExpr* operand() const { return operand_.get(); } - - bool operator==(const WasmInitExpr& other) const { - if (kind() != other.kind()) return false; - switch (kind()) { - case kNone: - return true; - case kGlobalGet: - case kRefFuncConst: - case kRttCanon: - return immediate().index == other.immediate().index; - case kI32Const: - return immediate().i32_const == other.immediate().i32_const; - case kI64Const: - return immediate().i64_const == other.immediate().i64_const; - case kF32Const: - return immediate().f32_const == other.immediate().f32_const; - case kF64Const: - return immediate().f64_const == other.immediate().f64_const; - case kS128Const: - return immediate().s128_const == other.immediate().s128_const; - case kRefNullConst: - return immediate().heap_type == other.immediate().heap_type; - case kRttSub: - return immediate().index == other.immediate().index && - *operand() == *other.operand(); - } - } - - V8_INLINE bool operator!=(const WasmInitExpr& other) { - return !(*this == other); - } - - private: - Immediate immediate_; - Operator kind_; - std::unique_ptr<WasmInitExpr> operand_ = nullptr; -}; - } // namespace wasm } // namespace internal } // namespace v8 diff --git a/deps/v8/src/wasm/wasm-serialization.cc b/deps/v8/src/wasm/wasm-serialization.cc index b2e6f0c4d8..a47e420cb1 100644 --- a/deps/v8/src/wasm/wasm-serialization.cc +++ b/deps/v8/src/wasm/wasm-serialization.cc @@ -567,6 +567,8 @@ class CopyAndRelocTask : public JobTask { void Run(JobDelegate* delegate) override { CODE_SPACE_WRITE_SCOPE + NativeModuleModificationScope native_module_modification_scope( + deserializer_->native_module_); do { auto batch = from_queue_->Pop(); if (batch.empty()) break; @@ -712,11 +714,9 @@ DeserializationUnit NativeModuleDeserializer::ReadCode(int fn_index, constexpr size_t kMaxReservation = RoundUp<kCodeAlignment>(WasmCodeAllocator::kMaxCodeSpaceSize * 9 / 10); size_t code_space_size = std::min(kMaxReservation, remaining_code_size_); - current_code_space_ = + std::tie(current_code_space_, current_jump_tables_) = native_module_->AllocateForDeserializedCode(code_space_size); DCHECK_EQ(current_code_space_.size(), code_space_size); - current_jump_tables_ = native_module_->FindJumpTablesForRegion( - base::AddressRegionOf(current_code_space_)); DCHECK(current_jump_tables_.is_valid()); } diff --git a/deps/v8/src/wasm/wasm-subtyping.cc b/deps/v8/src/wasm/wasm-subtyping.cc index b0e8105a60..d2b7e9fe31 100644 --- a/deps/v8/src/wasm/wasm-subtyping.cc +++ b/deps/v8/src/wasm/wasm-subtyping.cc @@ -91,6 +91,26 @@ class TypeJudgementCache { type_equivalence_cache_.erase( std::make_tuple(type1, type2, module1, module2)); } + void delete_module(const WasmModule* module) { + for (auto iterator = type_equivalence_cache_.begin(); + iterator != type_equivalence_cache_.end();) { + if (std::get<2>(*iterator) == module || + std::get<3>(*iterator) == module) { + iterator = type_equivalence_cache_.erase(iterator); + } else { + iterator++; + } + } + for (auto iterator = subtyping_cache_.begin(); + iterator != subtyping_cache_.end();) { + if (std::get<2>(*iterator) == module || + std::get<3>(*iterator) == module) { + iterator = subtyping_cache_.erase(iterator); + } else { + iterator++; + } + } + } private: Zone zone_; @@ -258,14 +278,46 @@ bool ArrayIsSubtypeOf(uint32_t subtype_index, uint32_t supertype_index, } } -// TODO(7748): Expand this with function subtyping when it is introduced. bool FunctionIsSubtypeOf(uint32_t subtype_index, uint32_t supertype_index, const WasmModule* sub_module, const WasmModule* super_module) { - return FunctionEquivalentIndices(subtype_index, supertype_index, sub_module, - super_module); -} + if (!FLAG_experimental_wasm_gc) { + return FunctionEquivalentIndices(subtype_index, supertype_index, sub_module, + super_module); + } + const FunctionSig* sub_func = sub_module->types[subtype_index].function_sig; + const FunctionSig* super_func = + super_module->types[supertype_index].function_sig; + + if (sub_func->parameter_count() != super_func->parameter_count() || + sub_func->return_count() != super_func->return_count()) { + return false; + } + + TypeJudgementCache::instance()->cache_subtype(subtype_index, supertype_index, + sub_module, super_module); + + for (uint32_t i = 0; i < sub_func->parameter_count(); i++) { + // Contravariance for params. + if (!IsSubtypeOf(super_func->parameters()[i], sub_func->parameters()[i], + super_module, sub_module)) { + TypeJudgementCache::instance()->uncache_subtype( + subtype_index, supertype_index, sub_module, super_module); + return false; + } + } + for (uint32_t i = 0; i < sub_func->return_count(); i++) { + // Covariance for returns. + if (!IsSubtypeOf(sub_func->returns()[i], super_func->returns()[i], + sub_module, super_module)) { + TypeJudgementCache::instance()->uncache_subtype( + subtype_index, supertype_index, sub_module, super_module); + return false; + } + } + return true; +} } // namespace V8_NOINLINE V8_EXPORT_PRIVATE bool IsSubtypeOfImpl( @@ -403,11 +455,12 @@ V8_NOINLINE bool EquivalentTypes(ValueType type1, ValueType type2, module2); } -ValueType CommonSubtype(ValueType a, ValueType b, const WasmModule* module) { - if (a == b) return a; - if (IsSubtypeOf(a, b, module)) return a; - if (IsSubtypeOf(b, a, module)) return b; - return kWasmBottom; +void DeleteCachedTypeJudgementsForModule(const WasmModule* module) { + // Accessing the caches for subtyping and equivalence from multiple background + // threads is protected by a lock. + base::RecursiveMutexGuard type_cache_access( + TypeJudgementCache::instance()->type_cache_mutex()); + TypeJudgementCache::instance()->delete_module(module); } } // namespace wasm diff --git a/deps/v8/src/wasm/wasm-subtyping.h b/deps/v8/src/wasm/wasm-subtyping.h index 0c35f7c470..59e7935d1f 100644 --- a/deps/v8/src/wasm/wasm-subtyping.h +++ b/deps/v8/src/wasm/wasm-subtyping.h @@ -60,8 +60,10 @@ V8_NOINLINE bool EquivalentTypes(ValueType type1, ValueType type2, // - Struct subtyping: Subtype must have at least as many fields as supertype, // covariance for immutable fields, equivalence for mutable fields. // - Array subtyping (mutable only) is the equivalence relation. -// - Function subtyping is the equivalence relation (note: this rule might -// change in the future to include type variance). +// - Function subtyping depends on the enabled wasm features: if +// --experimental-wasm-gc is enabled, then subtyping is computed +// contravariantly for parameter types and covariantly for return types. +// Otherwise, the subtyping relation is the equivalence relation. V8_INLINE bool IsSubtypeOf(ValueType subtype, ValueType supertype, const WasmModule* sub_module, const WasmModule* super_module) { @@ -91,11 +93,9 @@ V8_INLINE bool IsHeapSubtypeOf(uint32_t subtype_index, uint32_t supertype_index, ValueType::Ref(supertype_index, kNonNullable), module); } -// Returns the weakest type that is a subtype of both a and b -// (which is currently always one of a, b, or kWasmBottom). -// TODO(manoskouk): Update this once we have settled on a type system for -// reference types. -ValueType CommonSubtype(ValueType a, ValueType b, const WasmModule* module); +// Call this function in {module}'s destructor to avoid spurious cache hits in +// case another WasmModule gets allocated in the same address later. +void DeleteCachedTypeJudgementsForModule(const WasmModule* module); } // namespace wasm } // namespace internal diff --git a/deps/v8/src/wasm/wasm-value.h b/deps/v8/src/wasm/wasm-value.h index 0a1d2b69e2..faaad18076 100644 --- a/deps/v8/src/wasm/wasm-value.h +++ b/deps/v8/src/wasm/wasm-value.h @@ -12,7 +12,7 @@ #include "src/base/memory.h" #include "src/handles/handles.h" #include "src/utils/boxed-float.h" -#include "src/wasm/wasm-opcodes.h" +#include "src/wasm/value-type.h" #include "src/zone/zone-containers.h" namespace v8 { diff --git a/deps/v8/src/web-snapshot/web-snapshot.cc b/deps/v8/src/web-snapshot/web-snapshot.cc index 16bbc9af3e..f36698a351 100644 --- a/deps/v8/src/web-snapshot/web-snapshot.cc +++ b/deps/v8/src/web-snapshot/web-snapshot.cc @@ -11,6 +11,7 @@ #include "src/base/platform/wrappers.h" #include "src/handles/handles.h" #include "src/objects/contexts.h" +#include "src/objects/js-regexp-inl.h" #include "src/objects/script.h" namespace v8 { @@ -34,8 +35,8 @@ void WebSnapshotSerializerDeserializer::Throw(const char* message) { error_message_ = message; if (!isolate_->has_pending_exception()) { v8::Isolate* v8_isolate = reinterpret_cast<v8::Isolate*>(isolate_); - v8_isolate->ThrowException(v8::Exception::Error( - v8::String::NewFromUtf8(v8_isolate, message).ToLocalChecked())); + v8_isolate->ThrowError( + v8::String::NewFromUtf8(v8_isolate, message).ToLocalChecked()); } } @@ -238,7 +239,10 @@ void WebSnapshotSerializer::SerializeMap(Handle<Map> map, uint32_t& id) { // Format (serialized function): // - 0 if there's no context, 1 + context id otherwise -// - String id (source string) +// - String id (source snippet) +// - Start position in the source snippet +// - Length in the source snippet +// TODO(v8:11525): Investigate whether the length is really needed. void WebSnapshotSerializer::SerializeFunction(Handle<JSFunction> function, uint32_t& id) { if (InsertIntoIndexMap(function_ids_, function, id)) { @@ -251,7 +255,7 @@ void WebSnapshotSerializer::SerializeFunction(Handle<JSFunction> function, } Handle<Context> context(function->context(), isolate_); - if (context->IsNativeContext()) { + if (context->IsNativeContext() || context->IsScriptContext()) { function_serializer_.WriteUint32(0); } else { DCHECK(context->IsFunctionContext()); @@ -260,20 +264,19 @@ void WebSnapshotSerializer::SerializeFunction(Handle<JSFunction> function, function_serializer_.WriteUint32(context_id + 1); } - // TODO(v8:11525): For inner functions which occur inside a serialized - // function, create a "substring" type, so that we don't need to serialize the - // same content twice. + // TODO(v8:11525): Don't write the full source but instead, a set of minimal + // snippets which cover the serialized functions. Handle<String> full_source( String::cast(Script::cast(function->shared().script()).source()), isolate_); - int start = function->shared().StartPosition(); - int end = function->shared().EndPosition(); - Handle<String> source = - isolate_->factory()->NewSubString(full_source, start, end); uint32_t source_id = 0; - SerializeString(source, source_id); + SerializeString(full_source, source_id); function_serializer_.WriteUint32(source_id); + int start = function->shared().StartPosition(); + function_serializer_.WriteUint32(start); + int end = function->shared().EndPosition(); + function_serializer_.WriteUint32(end - start); // TODO(v8:11525): Serialize .prototype. // TODO(v8:11525): Support properties in functions. } @@ -297,7 +300,8 @@ void WebSnapshotSerializer::SerializeContext(Handle<Context> context, } uint32_t parent_context_id = 0; - if (!context->previous().IsNativeContext()) { + if (!context->previous().IsNativeContext() && + !context->previous().IsScriptContext()) { SerializeContext(handle(context->previous(), isolate_), parent_context_id); ++parent_context_id; } @@ -387,18 +391,35 @@ void WebSnapshotSerializer::WriteValue(Handle<Object> object, ValueSerializer& serializer) { uint32_t id = 0; if (object->IsSmi()) { - // TODO(v8:11525): Implement. - UNREACHABLE(); + serializer.WriteUint32(ValueType::INTEGER); + serializer.WriteZigZag<int32_t>(Smi::cast(*object).value()); + return; } DCHECK(object->IsHeapObject()); switch (HeapObject::cast(*object).map().instance_type()) { case ODDBALL_TYPE: - // TODO(v8:11525): Implement. - UNREACHABLE(); + switch (Oddball::cast(*object).kind()) { + case Oddball::kFalse: + serializer.WriteUint32(ValueType::FALSE_CONSTANT); + return; + case Oddball::kTrue: + serializer.WriteUint32(ValueType::TRUE_CONSTANT); + return; + case Oddball::kNull: + serializer.WriteUint32(ValueType::NULL_CONSTANT); + return; + case Oddball::kUndefined: + serializer.WriteUint32(ValueType::UNDEFINED_CONSTANT); + return; + default: + UNREACHABLE(); + } case HEAP_NUMBER_TYPE: - // TODO(v8:11525): Implement. - UNREACHABLE(); + // TODO(v8:11525): Handle possible endianness mismatch. + serializer.WriteUint32(ValueType::DOUBLE); + serializer.WriteDouble(HeapNumber::cast(*object).value()); + break; case JS_FUNCTION_TYPE: SerializeFunction(Handle<JSFunction>::cast(object), id); serializer.WriteUint32(ValueType::FUNCTION_ID); @@ -409,6 +430,23 @@ void WebSnapshotSerializer::WriteValue(Handle<Object> object, serializer.WriteUint32(ValueType::OBJECT_ID); serializer.WriteUint32(id); break; + case JS_REG_EXP_TYPE: { + Handle<JSRegExp> regexp = Handle<JSRegExp>::cast(object); + if (regexp->map() != isolate_->regexp_function()->initial_map()) { + Throw("Web snapshot: Unsupported RegExp map"); + return; + } + uint32_t pattern_id, flags_id; + Handle<String> pattern = handle(regexp->Pattern(), isolate_); + Handle<String> flags_string = + JSRegExp::StringFromFlags(isolate_, regexp->GetFlags()); + SerializeString(pattern, pattern_id); + SerializeString(flags_string, flags_id); + serializer.WriteUint32(ValueType::REGEXP); + serializer.WriteUint32(pattern_id); + serializer.WriteUint32(flags_id); + break; + } default: if (object->IsString()) { SerializeString(Handle<String>::cast(object), id); @@ -669,8 +707,21 @@ void WebSnapshotDeserializer::DeserializeFunctions() { Throw("Web snapshot: Malformed function table"); return; } - STATIC_ASSERT(kMaxItemCount <= FixedArray::kMaxLength); + STATIC_ASSERT(kMaxItemCount + 1 <= FixedArray::kMaxLength); functions_ = isolate_->factory()->NewFixedArray(function_count_); + + Handle<Script> script = + isolate_->factory()->NewScript(isolate_->factory()->empty_string()); + script->set_type(Script::TYPE_WEB_SNAPSHOT); + // Overallocate the array for SharedFunctionInfos; functions which we + // deserialize soon will create more SharedFunctionInfos when called. + Handle<WeakFixedArray> infos(isolate_->factory()->NewWeakFixedArray( + WeakArrayList::CapacityForLength(function_count_ + 1), + AllocationType::kOld)); + script->set_shared_function_infos(*infos); + Handle<ObjectHashTable> shared_function_info_table = + ObjectHashTable::New(isolate_, function_count_); + for (uint32_t i = 0; i < function_count_; ++i) { uint32_t context_id; // Note: > (not >= on purpose, we will subtract 1). @@ -681,10 +732,24 @@ void WebSnapshotDeserializer::DeserializeFunctions() { } Handle<String> source = ReadString(false); + if (i == 0) { + script->set_source(*source); + } else { + // TODO(v8:11525): Support multiple source snippets. + DCHECK_EQ(script->source(), *source); + } + + uint32_t start_position; + uint32_t length; + if (!deserializer_->ReadUint32(&start_position) || + !deserializer_->ReadUint32(&length)) { + Throw("Web snapshot: Malformed function"); + return; + } // TODO(v8:11525): Support other function kinds. // TODO(v8:11525): Support (exported) top level functions. - Handle<Script> script = isolate_->factory()->NewScript(source); + // TODO(v8:11525): Deduplicate the SFIs for inner functions the user creates // post-deserialization (by calling the outer function, if it's also in the // snapshot) against the ones we create here. @@ -692,18 +757,24 @@ void WebSnapshotDeserializer::DeserializeFunctions() { isolate_->factory()->NewSharedFunctionInfo( isolate_->factory()->empty_string(), MaybeHandle<Code>(), Builtins::kCompileLazy, FunctionKind::kNormalFunction); - shared->set_function_literal_id(1); + shared->set_script(*script); + // Index 0 is reserved for top-level shared function info (which web + // snapshot scripts don't have). + const int shared_function_info_index = i + 1; + shared->set_function_literal_id(shared_function_info_index); // TODO(v8:11525): Decide how to handle language modes. shared->set_language_mode(LanguageMode::kStrict); shared->set_uncompiled_data( *isolate_->factory()->NewUncompiledDataWithoutPreparseData( - ReadOnlyRoots(isolate_).empty_string_handle(), 0, - source->length())); - shared->set_script(*script); - Handle<WeakFixedArray> infos( - isolate_->factory()->NewWeakFixedArray(3, AllocationType::kOld)); - infos->Set(1, HeapObjectReference::Weak(*shared)); - script->set_shared_function_infos(*infos); + ReadOnlyRoots(isolate_).empty_string_handle(), start_position, + start_position + length)); + shared->set_allows_lazy_compilation(true); + infos->Set(shared_function_info_index, HeapObjectReference::Weak(*shared)); + + shared_function_info_table = ObjectHashTable::Put( + shared_function_info_table, + handle(Smi::FromInt(start_position), isolate_), + handle(Smi::FromInt(shared_function_info_index), isolate_)); Handle<JSFunction> function = Factory::JSFunctionBuilder(isolate_, shared, isolate_->native_context()) @@ -718,6 +789,7 @@ void WebSnapshotDeserializer::DeserializeFunctions() { } functions_->set(i, *function); } + script->set_shared_function_info_table(*shared_function_info_table); } void WebSnapshotDeserializer::DeserializeObjects() { @@ -806,6 +878,46 @@ void WebSnapshotDeserializer::ReadValue(Handle<Object>& value, return; } switch (value_type) { + case ValueType::FALSE_CONSTANT: { + value = handle(ReadOnlyRoots(isolate_).false_value(), isolate_); + representation = Representation::Tagged(); + break; + } + case ValueType::TRUE_CONSTANT: { + value = handle(ReadOnlyRoots(isolate_).true_value(), isolate_); + representation = Representation::Tagged(); + break; + } + case ValueType::NULL_CONSTANT: { + value = handle(ReadOnlyRoots(isolate_).null_value(), isolate_); + representation = Representation::Tagged(); + break; + } + case ValueType::UNDEFINED_CONSTANT: { + value = handle(ReadOnlyRoots(isolate_).undefined_value(), isolate_); + representation = Representation::Tagged(); + break; + } + case ValueType::INTEGER: { + Maybe<int32_t> number = deserializer_->ReadZigZag<int32_t>(); + if (number.IsNothing()) { + Throw("Web snapshot: Malformed integer"); + return; + } + value = isolate_->factory()->NewNumberFromInt(number.FromJust()); + representation = Representation::Tagged(); + break; + } + case ValueType::DOUBLE: { + double number; + if (!deserializer_->ReadDouble(&number)) { + Throw("Web snapshot: Malformed double"); + return; + } + value = isolate_->factory()->NewNumber(number); + representation = Representation::Tagged(); + break; + } case ValueType::STRING_ID: { value = ReadString(false); representation = Representation::Tagged(); @@ -834,6 +946,25 @@ void WebSnapshotDeserializer::ReadValue(Handle<Object>& value, value = handle(functions_->get(function_id), isolate_); representation = Representation::Tagged(); break; + case ValueType::REGEXP: { + Handle<String> pattern = ReadString(false); + Handle<String> flags_string = ReadString(false); + bool success = false; + JSRegExp::Flags flags = + JSRegExp::FlagsFromString(isolate_, flags_string, &success); + if (!success) { + Throw("Web snapshot: Malformed flags in regular expression"); + return; + } + MaybeHandle<JSRegExp> maybe_regexp = + JSRegExp::New(isolate_, pattern, flags); + if (!maybe_regexp.ToHandle(&value)) { + Throw("Web snapshot: Malformed RegExp"); + return; + } + representation = Representation::Tagged(); + break; + } default: // TODO(v8:11525): Handle other value types. Throw("Web snapshot: Unsupported value type"); diff --git a/deps/v8/src/web-snapshot/web-snapshot.h b/deps/v8/src/web-snapshot/web-snapshot.h index 31461c8dbc..8127fa7aa8 100644 --- a/deps/v8/src/web-snapshot/web-snapshot.h +++ b/deps/v8/src/web-snapshot/web-snapshot.h @@ -38,11 +38,22 @@ class WebSnapshotSerializerDeserializer { inline bool has_error() const { return error_message_ != nullptr; } const char* error_message() const { return error_message_; } - enum ValueType : uint8_t { STRING_ID, OBJECT_ID, FUNCTION_ID }; + enum ValueType : uint8_t { + FALSE_CONSTANT, + TRUE_CONSTANT, + NULL_CONSTANT, + UNDEFINED_CONSTANT, + INTEGER, + DOUBLE, + STRING_ID, + OBJECT_ID, + FUNCTION_ID, + REGEXP + }; // The maximum count of items for each value type (strings, objects etc.) static constexpr uint32_t kMaxItemCount = - static_cast<uint32_t>(FixedArray::kMaxLength); + static_cast<uint32_t>(FixedArray::kMaxLength - 1); // This ensures indices and lengths can be converted between uint32_t and int // without problems: STATIC_ASSERT(kMaxItemCount < std::numeric_limits<int32_t>::max()); diff --git a/deps/v8/src/zone/zone-segment.cc b/deps/v8/src/zone/zone-segment.cc index 49cedb851b..6b682624dc 100644 --- a/deps/v8/src/zone/zone-segment.cc +++ b/deps/v8/src/zone/zone-segment.cc @@ -4,7 +4,7 @@ #include "src/zone/zone-segment.h" -#include "src/sanitizer/msan.h" +#include "src/base/sanitizer/msan.h" namespace v8 { namespace internal { diff --git a/deps/v8/src/zone/zone.cc b/deps/v8/src/zone/zone.cc index e40b92be68..40cf1ab2df 100644 --- a/deps/v8/src/zone/zone.cc +++ b/deps/v8/src/zone/zone.cc @@ -7,8 +7,8 @@ #include <cstring> #include <memory> +#include "src/base/sanitizer/asan.h" #include "src/init/v8.h" -#include "src/sanitizer/asan.h" #include "src/utils/utils.h" #include "src/zone/type-stats.h" diff --git a/deps/v8/test/benchmarks/cpp/BUILD.gn b/deps/v8/test/benchmarks/cpp/BUILD.gn index 6c57952841..07eeb94f15 100644 --- a/deps/v8/test/benchmarks/cpp/BUILD.gn +++ b/deps/v8/test/benchmarks/cpp/BUILD.gn @@ -25,6 +25,9 @@ if (v8_enable_google_benchmark) { sources = [ "empty.cc" ] - deps = [ "//third_party/google_benchmark:benchmark_main" ] + deps = [ + "//:v8_libbase", + "//third_party/google_benchmark:benchmark_main", + ] } } diff --git a/deps/v8/test/benchmarks/cpp/DEPS b/deps/v8/test/benchmarks/cpp/DEPS index fdb90962fa..05d243bc85 100644 --- a/deps/v8/test/benchmarks/cpp/DEPS +++ b/deps/v8/test/benchmarks/cpp/DEPS @@ -1,3 +1,4 @@ include_rules = [ + "+src/base", "+third_party/google_benchmark/src/include/benchmark/benchmark.h", ] diff --git a/deps/v8/test/benchmarks/cpp/cppgc/DEPS b/deps/v8/test/benchmarks/cpp/cppgc/DEPS index d31d529ebe..e3cbedf197 100644 --- a/deps/v8/test/benchmarks/cpp/cppgc/DEPS +++ b/deps/v8/test/benchmarks/cpp/cppgc/DEPS @@ -1,5 +1,6 @@ include_rules = [ "+include/cppgc", + "+src/base", "+src/heap/cppgc", "+test/unittests/heap/cppgc", "+third_party/google_benchmark/src/include/benchmark/benchmark.h", diff --git a/deps/v8/test/benchmarks/cpp/cppgc/allocation_perf.cc b/deps/v8/test/benchmarks/cpp/cppgc/allocation_perf.cc index 513aaa2e8e..804e11770a 100644 --- a/deps/v8/test/benchmarks/cpp/cppgc/allocation_perf.cc +++ b/deps/v8/test/benchmarks/cpp/cppgc/allocation_perf.cc @@ -5,6 +5,7 @@ #include "include/cppgc/allocation.h" #include "include/cppgc/garbage-collected.h" #include "include/cppgc/heap-consistency.h" +#include "src/base/macros.h" #include "src/heap/cppgc/globals.h" #include "src/heap/cppgc/heap.h" #include "test/benchmarks/cpp/cppgc/utils.h" @@ -24,6 +25,7 @@ class TinyObject final : public cppgc::GarbageCollected<TinyObject> { BENCHMARK_F(Allocate, Tiny)(benchmark::State& st) { subtle::NoGarbageCollectionScope no_gc(*Heap::From(&heap())); for (auto _ : st) { + USE(_); benchmark::DoNotOptimize( cppgc::MakeGarbageCollected<TinyObject>(heap().GetAllocationHandle())); } @@ -39,6 +41,7 @@ class LargeObject final : public GarbageCollected<LargeObject> { BENCHMARK_F(Allocate, Large)(benchmark::State& st) { subtle::NoGarbageCollectionScope no_gc(*Heap::From(&heap())); for (auto _ : st) { + USE(_); benchmark::DoNotOptimize( cppgc::MakeGarbageCollected<LargeObject>(heap().GetAllocationHandle())); } diff --git a/deps/v8/test/benchmarks/cpp/cppgc/trace_perf.cc b/deps/v8/test/benchmarks/cpp/cppgc/trace_perf.cc index 9ae26b8d0e..6038c0a371 100644 --- a/deps/v8/test/benchmarks/cpp/cppgc/trace_perf.cc +++ b/deps/v8/test/benchmarks/cpp/cppgc/trace_perf.cc @@ -5,6 +5,7 @@ #include "include/cppgc/allocation.h" #include "include/cppgc/garbage-collected.h" #include "include/cppgc/persistent.h" +#include "src/base/macros.h" #include "src/heap/cppgc/globals.h" #include "src/heap/cppgc/heap.h" #include "test/benchmarks/cpp/cppgc/utils.h" @@ -40,7 +41,7 @@ class GCedWithMixin final : public GCed, public OtherPayload, public Mixin { } }; -class Holder : public cppgc::GarbageCollected<GCed> { +class Holder : public cppgc::GarbageCollected<Holder> { public: explicit Holder(GCedWithMixin* object) : base_ref(object), mixin_ref(object) {} @@ -65,6 +66,7 @@ BENCHMARK_F(Trace, Static)(benchmark::State& st) { heap().GetAllocationHandle()))); VisitorBase visitor; for (auto _ : st) { + USE(_); DispatchTrace(&visitor, holder->base_ref); } } @@ -75,6 +77,7 @@ BENCHMARK_F(Trace, Dynamic)(benchmark::State& st) { heap().GetAllocationHandle()))); VisitorBase visitor; for (auto _ : st) { + USE(_); DispatchTrace(&visitor, holder->mixin_ref); } } diff --git a/deps/v8/test/benchmarks/cpp/empty.cc b/deps/v8/test/benchmarks/cpp/empty.cc index 26c73604a4..f15f04fcd7 100644 --- a/deps/v8/test/benchmarks/cpp/empty.cc +++ b/deps/v8/test/benchmarks/cpp/empty.cc @@ -2,11 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "src/base/macros.h" #include "third_party/google_benchmark/src/include/benchmark/benchmark.h" static void BM_Empty(benchmark::State& state) { for (auto _ : state) { + USE(_); } } -// Register the function as a benchmark + +// Register the function as a benchmark. The empty benchmark ensures that the +// framework compiles and links as expected. BENCHMARK(BM_Empty); diff --git a/deps/v8/test/cctest/BUILD.gn b/deps/v8/test/cctest/BUILD.gn index ffa4e3a136..8f6e5610b8 100644 --- a/deps/v8/test/cctest/BUILD.gn +++ b/deps/v8/test/cctest/BUILD.gn @@ -127,6 +127,7 @@ v8_source_set("cctest_sources") { "compiler/test-run-unwinding-info.cc", "compiler/test-run-variables.cc", "compiler/test-sloppy-equality.cc", + "compiler/test-verify-type.cc", "compiler/value-helper.cc", "compiler/value-helper.h", "disasm-regex-helper.cc", @@ -156,6 +157,7 @@ v8_source_set("cctest_sources") { "heap/test-mark-compact.cc", "heap/test-memory-measurement.cc", "heap/test-page-promotion.cc", + "heap/test-shared-heap.cc", "heap/test-spaces.cc", "heap/test-unmapper.cc", "heap/test-weak-references.cc", @@ -260,6 +262,7 @@ v8_source_set("cctest_sources") { "test-platform.cc", "test-profile-generator.cc", "test-property-details.cc", + "test-ptr-compr-cage.cc", "test-random-number-generator.cc", "test-regexp.cc", "test-representation.cc", @@ -438,7 +441,6 @@ v8_source_set("cctest_sources") { "wasm/test-run-wasm-relaxed-simd.cc", "wasm/test-run-wasm-sign-extension.cc", "wasm/test-run-wasm-simd-liftoff.cc", - "wasm/test-run-wasm-simd-scalar-lowering.cc", "wasm/test-run-wasm-simd.cc", "wasm/test-run-wasm-wrappers.cc", "wasm/test-run-wasm.cc", diff --git a/deps/v8/test/cctest/cctest.cc b/deps/v8/test/cctest/cctest.cc index 7d5115697a..3e5b87e863 100644 --- a/deps/v8/test/cctest/cctest.cc +++ b/deps/v8/test/cctest/cctest.cc @@ -46,7 +46,7 @@ #endif // V8_USE_PERFETTO #if V8_OS_WIN -#include <windows.h> // NOLINT +#include <windows.h> #if V8_CC_MSVC #include <crtdbg.h> #endif @@ -245,8 +245,8 @@ class V8_NODISCARD InitializedHandleScopeImpl { i::HandleScope handle_scope_; }; -InitializedHandleScope::InitializedHandleScope() - : main_isolate_(CcTest::InitIsolateOnce()), +InitializedHandleScope::InitializedHandleScope(i::Isolate* isolate) + : main_isolate_(isolate ? isolate : CcTest::InitIsolateOnce()), initialized_handle_scope_impl_( new InitializedHandleScopeImpl(main_isolate_)) {} diff --git a/deps/v8/test/cctest/cctest.h b/deps/v8/test/cctest/cctest.h index 862f347aa4..20cc74666c 100644 --- a/deps/v8/test/cctest/cctest.h +++ b/deps/v8/test/cctest/cctest.h @@ -619,7 +619,7 @@ class InitializedHandleScopeImpl; class V8_NODISCARD InitializedHandleScope { public: - InitializedHandleScope(); + explicit InitializedHandleScope(i::Isolate* isolate = nullptr); ~InitializedHandleScope(); // Prefixing the below with main_ reduces a lot of naming clashes. @@ -842,11 +842,11 @@ DEFINE_OPERATORS_FOR_FLAGS(ApiCheckerResultFlags) bool IsValidUnwrapObject(v8::Object* object); -template <typename T, int offset> +template <typename T> T* GetInternalField(v8::Object* wrapper) { - assert(offset < wrapper->InternalFieldCount()); + assert(kV8WrapperObjectIndex < wrapper->InternalFieldCount()); return reinterpret_cast<T*>( - wrapper->GetAlignedPointerFromInternalField(offset)); + wrapper->GetAlignedPointerFromInternalField(kV8WrapperObjectIndex)); } #endif // ifndef CCTEST_H_ diff --git a/deps/v8/test/cctest/cctest.status b/deps/v8/test/cctest/cctest.status index 7b1bf8caa5..54dc4fa3fc 100644 --- a/deps/v8/test/cctest/cctest.status +++ b/deps/v8/test/cctest/cctest.status @@ -198,6 +198,7 @@ # %ObserveNode tests relies on TurboFan. 'test-sloppy-equality/*' : [SKIP], 'test-js-to-wasm/*': [SKIP], + 'test-verify-type/*': [SKIP], }], # variant == nooptimization ############################################################################## @@ -352,6 +353,13 @@ 'test-run-wasm-simd-liftoff/*': [SKIP], }], # '(arch == mipsel or arch == mips64el or arch == mips or arch == mips64) and not simd_mips' +['(arch == mipsel or arch == mips64el or arch == mips or arch == mips64) and not simd_mips', { + 'test-gc/RunWasmLiftoff_RefTrivialCasts': [SKIP], + 'test-gc/RunWasmTurbofan_RefTrivialCasts': [SKIP], + 'test-run-wasm/RunWasmLiftoff_Select_s128_parameters': [SKIP], + 'test-run-wasm/RunWasmTurbofan_Select_s128_parameters': [SKIP], +}], # '(arch == mipsel or arch == mips64el or arch == mips or arch == mips64) and not simd_mips' + ############################################################################## ['arch == mips or arch == mips64', { # TODO(mips-team): Implement I64Atomic operations on MIPS @@ -384,15 +392,18 @@ # SIMD not fully implemented yet 'test-run-wasm-simd-liftoff/*': [SKIP], - 'test-run-wasm-simd-scalar-lowering/*':[SKIP], 'test-run-wasm-simd/*':[SKIP], + 'test-gc/RunWasmLiftoff_RefTrivialCasts': [SKIP], + 'test-gc/RunWasmTurbofan_RefTrivialCasts': [SKIP], # Some wasm functionality is not implemented yet 'test-run-wasm-atomics64/*': [SKIP], 'test-run-wasm-atomics/*': [SKIP], 'test-run-wasm-64/*': [SKIP], 'test-run-wasm/*': [SKIP], -}], + + +}], # 'arch == riscv64' ############################################################################## ['arch == riscv64 and simulator_run', { @@ -447,21 +458,22 @@ # TODO(ppc/s390): support concurrent patching of jump table 'test-jump-table-assembler/*': [SKIP], - # Liftoff is not currently supported on ppc and s390 - 'test-liftoff-*': [SKIP], 'test-wasm-breakpoints/*' : [SKIP], - 'test-run-wasm-module/Run_WasmModule_CompilationHintsNoTiering': [SKIP], - 'test-wasm-serialization/TierDownAfterDeserialization': [SKIP], - 'test-gc/RunWasmLiftoff*': [SKIP], # SIMD not fully implemented yet 'test-run-wasm-simd-liftoff/*': [SKIP], + 'test-gc/RunWasmLiftoff_RefTrivialCasts': [SKIP] }], # 'arch == ppc or arch == ppc64 or arch == s390 or arch == s390x' ['arch == ppc64', { # https://crbug.com/v8/8766 'test-bytecode-generator/WideRegisters': [SKIP], + # Liftoff is not currently supported on ppc + 'test-liftoff-*': [SKIP], + 'test-gc/RunWasmLiftoff*': [SKIP], + 'test-run-wasm-module/Run_WasmModule_CompilationHintsNoTiering': [SKIP], + 'test-wasm-serialization/TierDownAfterDeserialization': [SKIP], }], ############################################################################## @@ -600,6 +612,7 @@ 'test-swiss-name-dictionary-csa/*': [SKIP], 'test-torque/*': [SKIP], 'test-unwinder-code-pages/PCIsInV8_LargeCodeObject_CodePagesAPI': [SKIP], + 'test-verify-type/*': [SKIP], # Field representation tracking is disabled in jitless mode. 'test-field-type-tracking/*': [SKIP], @@ -654,6 +667,7 @@ 'test-run-wasm-exceptions/RunWasmTurbofan_TryCatchCallIndirect': [SKIP], 'test-run-wasm-exceptions/RunWasmTurbofan_TryCatchThrow': [SKIP], 'test-run-wasm-exceptions/RunWasmTurbofan_TryCatchTrapTypeError': [SKIP], + 'test-verify-type/*': [SKIP], # --interpreted-frames-native-stack tests 'test-log/ExternalCodeEventListenerWithInterpretedFramesNativeStack': [SKIP], @@ -696,16 +710,480 @@ }], ############################################################################## -['no_simd_sse == True', { +['no_simd_hardware == True', { 'test-run-wasm-simd/*': [SKIP], 'test-run-wasm-simd-liftoff/*': [SKIP], - 'test-run-wasm-simd-scalar-lowering/*': [SKIP], -}], # no_simd_sse == True +}], # no_simd_hardware == True ################################################################################ ['variant == stress_concurrent_inlining', { + # crbug.com/v8/11649: Improper access to BreakInfo and friends. + 'test-debug/BreakPointInlinedBuiltin': [PASS, FAIL], + 'test-debug/BreakPointInlining': [PASS, FAIL], # BUG(11524): Crashing flakily. 'test-cpu-profiler/TracingCpuProfiler': [PASS, FAIL], + # crbug.com/v8/11513: Flakily failing due to the additional compile task. + 'test-heap/CellsInOptimizedCodeAreWeak': [PASS, FAIL], + 'test-heap/EnsureAllocationSiteDependentCodesProcessed': [PASS, FAIL], + 'test-heap/LeakNativeContextVia*': [PASS, FAIL], + 'test-heap/NewSpaceObjectsInOptimizedCode': [PASS, FAIL], + 'test-heap/ObjectsInEagerlyDeoptimizedCodeAreWeak': [PASS, FAIL], + 'test-heap/ObjectsInOptimizedCodeAreWeak': [PASS, FAIL], }], # variant == stress_concurrent_inlining +################################################################################ +['third_party_heap', { + # v8::Unwinder::PCIsInV8 is not supported + 'test-unwinder-code-pages/PCIsInV8_LargeCodeObject_CodePagesAPI': [SKIP], + 'test-unwinder-code-pages/Unwind_CodeObjectPCInMiddle_Success_CodePagesAPI': [SKIP], + # Calls Space::FirstPageAddress + 'test-debug-helper/GetObjectProperties': [SKIP], + # Calls Heap::SizeOfObjects + 'test-heap/TestSizeOfObjectsVsHeapObjectIteratorPrecision': [SKIP], + # Test on heap profiler + 'test-heap-profiler/SamplingHeapProfilerApiSamples': [SKIP], + 'test-heap-profiler/SamplingHeapProfiler': [SKIP], + 'test-heap-profiler/SamplingHeapProfilerRateAgnosticEstimates': [SKIP], + 'test-heap-profiler/SamplingHeapProfilerApiAllocation': [SKIP], + 'test-heap-profiler/SamplingHeapProfilerLargeInterval': [SKIP], + # Test old/new space backing store allocation + 'test-external-string-tracker/ExternalString_ExternalBackingStoreSizeIncreases': [SKIP], + # Read data from read_only_space->pages() + 'test-serialize/CodeSerializerExternalScriptName': [SKIP], + 'test-serialize/CodeSerializerThreeBigStrings': [SKIP], + # Access chunk metadata + 'test-roots/TestHeapRootsNotReadOnly': [SKIP], + 'test-roots/TestReadOnlyRoots': [SKIP], + # Requires heap::SimulateFullSpace + 'test-invalidated-slots/InvalidatedSlotsAfterTrimming': [SKIP], + 'test-invalidated-slots/InvalidatedSlotsAllInvalidatedRanges': [SKIP], + 'test-invalidated-slots/InvalidatedSlotsCleanupEachObject': [SKIP], + 'test-invalidated-slots/InvalidatedSlotsCleanupFull': [SKIP], + 'test-invalidated-slots/InvalidatedSlotsCleanupRightTrim': [SKIP], + 'test-invalidated-slots/InvalidatedSlotsEvacuationCandidate': [SKIP], + 'test-invalidated-slots/InvalidatedSlotsNoInvalidatedRanges': [SKIP], + 'test-invalidated-slots/InvalidatedSlotsResetObjectRegression': [SKIP], + 'test-invalidated-slots/InvalidatedSlotsSomeInvalidatedRanges': [SKIP], + # Requires --concurrent_inlining / --finalize_streaming_on_background: + 'serializer-tester/ArrowFunctionInlined': [SKIP], + 'serializer-tester/BoundFunctionArguments': [SKIP], + 'serializer-tester/BoundFunctionResult': [SKIP], + 'serializer-tester/BoundFunctionTarget': [SKIP], + 'serializer-tester/MergeJumpTargetEnvironment': [SKIP], + 'serializer-tester/MultipleFunctionCalls': [SKIP], + 'serializer-tester/SerializeCallAnyReceiver': [SKIP], + 'serializer-tester/SerializeCallArguments': [SKIP], + 'serializer-tester/SerializeCallProperty': [SKIP], + 'serializer-tester/SerializeCallProperty2': [SKIP], + 'serializer-tester/SerializeCallUndefinedReceiver': [SKIP], + 'serializer-tester/SerializeCallUndefinedReceiver2': [SKIP], + 'serializer-tester/SerializeCallWithSpread': [SKIP], + 'serializer-tester/SerializeConditionalJump': [SKIP], + 'serializer-tester/SerializeConstruct': [SKIP], + 'serializer-tester/SerializeConstructSuper': [SKIP], + 'serializer-tester/SerializeConstructWithSpread': [SKIP], + 'serializer-tester/SerializeEmptyFunction': [SKIP], + 'serializer-tester/SerializeInlinedClosure': [SKIP], + 'serializer-tester/SerializeInlinedFunction': [SKIP], + 'serializer-tester/SerializeUnconditionalJump': [SKIP], + 'test-concurrent-allocation/ConcurrentAllocationWhileMainThreadIsParked': [SKIP], + 'test-concurrent-allocation/ConcurrentAllocationWhileMainThreadParksAndUnparks': [SKIP], + 'test-concurrent-allocation/ConcurrentAllocationWhileMainThreadRunsWithSafepoints': [SKIP], + # Tests on V8 stock GC + 'test-spaces/*': [SKIP], + 'test-compaction/*': [SKIP], + 'test-mark-compact/*': [SKIP], + 'test-lab/*': [SKIP], + 'test-heap/TestAlignedOverAllocation': [SKIP], + 'test-heap/RememberedSetRemoveRange': [SKIP], + 'test-heap/CodeObjectRegistry': [SKIP], + 'test-heap/DeepEagerCompilationPeakMemory': [SKIP], + 'test-api/GetHeapStatistics': [SKIP], + 'test-api/GetHeapSpaceStatistics': [SKIP], + # Requires --concurrent_recompilation + 'test-debug/BreakPointBuiltinConcurrentOpt': [SKIP], + # Requires a second isolate + 'test-api-array-buffer/BackingStore_HoldAllocatorAlive_AfterIsolateShutdown': [SKIP], + 'test-api-array-buffer/BackingStore_HoldAllocatorAlive_UntilIsolateShutdown': [SKIP], + 'test-api-array-buffer/BackingStore_ReleaseAllocator_NullptrBackingStore': [SKIP], + 'test-api/CodeCache': [SKIP], + 'test-api/CodeCacheModuleScriptMismatch': [SKIP], + 'test-api/CodeCacheScriptModuleMismatch': [SKIP], + 'test-api/ExternalInternalizedStringCollectedAtTearDown': [SKIP], + 'test-api/ExternalStringCollectedAtTearDown': [SKIP], + 'test-api/InitializeDefaultIsolateOnSecondaryThread_AddHistogramSampleFunction': [SKIP], + 'test-api/InitializeDefaultIsolateOnSecondaryThread_CounterFunction': [SKIP], + 'test-api/InitializeDefaultIsolateOnSecondaryThread_CreateHistogramFunction': [SKIP], + 'test-api/InitializeDefaultIsolateOnSecondaryThread_FatalHandler': [SKIP], + 'test-api/IsolateDifferentContexts': [SKIP], + 'test-api/IsolateNewDispose': [SKIP], + 'test-api/ModuleCodeCache': [SKIP], + 'test-api/MultipleIsolatesOnIndividualThreads': [SKIP], + 'test-api/NestedIsolates': [SKIP], + 'test-api/RunTwoIsolatesOnSingleThread': [SKIP], + 'test-api/VerifyArrayPrototypeGuarantees': [SKIP], + 'test-compiler/DecideToPretenureDuringCompilation': [SKIP], + 'test-cpu-profiler/MultipleIsolates': [SKIP], + 'test-heap/Regress538257': [SKIP], + 'test-heap/ReinitializeStringHashSeed': [SKIP], + 'test-lockers/*': [SKIP], + 'test-log/ExternalCodeEventListenerInnerFunctions': [SKIP], + 'test-log/LogInterpretedFramesNativeStackWithSerialization': [SKIP], + 'test-managed/*': [SKIP], + 'test-mark-compact/RegressJoinThreadsOnIsolateDeinit': [SKIP], + 'test-memory-measurement/RandomizedTimeout': [SKIP], + 'test-random-number-generator/*': [SKIP], + 'test-serialize/CodeSerializerAfterExecute': [SKIP], + 'test-serialize/CodeSerializerBitFlip': [SKIP], + 'test-serialize/CodeSerializerFlagChange': [SKIP], + 'test-serialize/CodeSerializerIsolates': [SKIP], + 'test-serialize/CodeSerializerIsolatesEager': [SKIP], + 'test-serialize/CodeSerializerWithHarmonyScoping': [SKIP], + 'test-serialize/ContextSerializerContext': [SKIP], + 'test-serialize/ContextSerializerCustomContext': [SKIP], + 'test-serialize/CustomSnapshotDataBlob1': [SKIP], + 'test-serialize/CustomSnapshotDataBlob2': [SKIP], + 'test-serialize/CustomSnapshotDataBlobArrayBufferWithOffset': [SKIP], + 'test-serialize/CustomSnapshotDataBlobDataView': [SKIP], + 'test-serialize/CustomSnapshotDataBlobDetachedArrayBuffer': [SKIP], + 'test-serialize/CustomSnapshotDataBlobOnOrOffHeapTypedArray': [SKIP], + 'test-serialize/CustomSnapshotDataBlobOutdatedContextWithOverflow': [SKIP], + 'test-serialize/CustomSnapshotDataBlobOverwriteGlobal': [SKIP], + 'test-serialize/CustomSnapshotDataBlobSharedArrayBuffer': [SKIP], + 'test-serialize/CustomSnapshotDataBlobStringNotInternalized': [SKIP], + 'test-serialize/CustomSnapshotDataBlobTypedArrayNoEmbedderFieldCallback': [SKIP], + 'test-serialize/CustomSnapshotDataBlobWithIrregexpCodeClearCode': [SKIP], + 'test-serialize/CustomSnapshotDataBlobWithIrregexpCodeKeepCode': [SKIP], + 'test-serialize/CustomSnapshotDataBlobWithKeep': [SKIP], + 'test-serialize/CustomSnapshotDataBlobWithLocker': [SKIP], + 'test-serialize/CustomSnapshotDataBlobWithOffHeapTypedArray': [SKIP], + 'test-serialize/CustomSnapshotDataBlobWithWarmup': [SKIP], + 'test-serialize/ReinitializeHashSeedJSCollectionRehashable': [SKIP], + 'test-serialize/ReinitializeHashSeedRehashable': [SKIP], + 'test-serialize/SnapshotCreatorAddData': [SKIP], + 'test-serialize/SnapshotCreatorArrayJoinWithKeep': [SKIP], + 'test-serialize/SnapshotCreatorDuplicateFunctions': [SKIP], + 'test-serialize/SnapshotCreatorExternalReferences': [SKIP], + 'test-serialize/SnapshotCreatorIncludeGlobalProxy': [SKIP], + 'test-serialize/SnapshotCreatorMultipleContexts': [SKIP], + 'test-serialize/SnapshotCreatorNoExternalReferencesDefault': [SKIP], + 'test-serialize/SnapshotCreatorPreparseDataAndNoOuterScope': [SKIP], + 'test-serialize/SnapshotCreatorShortExternalReferences': [SKIP], + 'test-serialize/SnapshotCreatorTemplates': [SKIP], + 'test-serialize/SnapshotDataBlobWithWarmup': [SKIP], + 'test-serialize/StartupSerializerOnce': [SKIP], + 'test-serialize/StartupSerializerOnceRunScript': [SKIP], + 'test-serialize/StartupSerializerTwice': [SKIP], + 'test-serialize/StartupSerializerTwiceRunScript': [SKIP], + 'test-serialize/WeakArraySerializationInSnapshot': [SKIP], + 'test-typedarrays/SpeciesConstructor': [SKIP], + 'test-typedarrays/SpeciesConstructorAccessor': [SKIP], + 'test-typedarrays/SpeciesModified': [SKIP], + 'test-typedarrays/SpeciesParentConstructor': [SKIP], + 'test-typedarrays/SpeciesProto': [SKIP], + 'test-wasm-serialization/*': [SKIP], + 'test-wasm-shared-engine/*': [SKIP], + 'test-shared-heap/*': [SKIP], + # Performs GC or expects OOM + 'test-alloc/StressHandles': [SKIP], + 'test-alloc/StressJS': [SKIP], + 'test-api-wasm/WasmStreamingCallback': [SKIP], + 'test-api/DontLeakGlobalObjects': [SKIP], + 'test-api/ExternalInternalizedStringCollectedAtGC': [SKIP], + 'test-api/ExternalStringWithDisposeHandling': [SKIP], + 'test-api/ExternalizeOldSpaceOneByteCons': [SKIP], + 'test-api/ExternalizeOldSpaceTwoByteCons': [SKIP], + 'test-api/GCFromWeakCallbacks': [SKIP], + 'test-api/GlobalValueMap': [SKIP], + 'test-api/IndependentWeakHandle': [SKIP], + 'test-api/InternalFieldCallback': [SKIP], + 'test-api/MemoryPressure': [SKIP], + 'test-api/NumberOfDetachedContexts': [SKIP], + 'test-api/NumberOfNativeContexts': [SKIP], + 'test-api/Recorder_GetContext': [SKIP], + 'test-api/Regress1516': [SKIP], + 'test-api/Regress528': [SKIP], + 'test-api/ResetWeakHandle': [SKIP], + 'test-api/ScavengeExternalOneByteString': [SKIP], + 'test-api/ScavengeExternalString': [SKIP], + 'test-api/ScriptMakingExternalOneByteString': [SKIP], + 'test-api/ScriptMakingExternalString': [SKIP], + 'test-api/ScriptUsingOneByteStringResource': [SKIP], + 'test-api/ScriptUsingStringResource': [SKIP], + 'test-api/SetJitCodeEventHandler': [SKIP], + 'test-api/Threading1': [SKIP], + 'test-api/Threading3': [SKIP], + 'test-api/Threading5': [SKIP], + 'test-api/TriggerDelayedMainThreadMetricsEvent': [SKIP], + 'test-api/TriggerMainThreadMetricsEvent': [SKIP], + 'test-api/TwoPassPhantomCallbacks': [SKIP], + 'test-api/TwoPassPhantomCallbacksNestedGc': [SKIP], + 'test-api/TwoPassPhantomCallbacksTriggeredByStringAlloc': [SKIP], + 'test-api/WeakCallbackApi': [SKIP], + 'test-array-buffer-tracker/ArrayBuffer_Compaction': [SKIP], + 'test-array-buffer-tracker/ArrayBuffer_ExternalBackingStoreSizeIncreasesMarkCompact': [SKIP], + 'test-array-buffer-tracker/ArrayBuffer_OnlyMC': [SKIP], + 'test-concurrent-allocation/ConcurrentAllocationInLargeSpace': [SKIP], + 'test-concurrent-allocation/ConcurrentAllocationInOldSpace': [SKIP], + 'test-concurrent-allocation/ConcurrentAllocationInOldSpaceFromMainThread': [SKIP], + 'test-cpu-profiler/BytecodeFlushEventsEagerLogging': [SKIP], + 'test-cpu-profiler/ClearUnusedWithEagerLogging': [SKIP], + 'test-debug/AfterCompileEventWhenEventListenerIsReset': [SKIP], + 'test-debug/BreakEventWhenEventListenerIsReset': [SKIP], + 'test-debug/BreakPointApiAccessor': [SKIP], + 'test-debug/BreakPointApiConstructor': [SKIP], + 'test-debug/BreakPointApiFunction': [SKIP], + 'test-debug/BreakPointApiGetter': [SKIP], + 'test-debug/BreakPointApiIntrinsics': [SKIP], + 'test-debug/BreakPointApiSetter': [SKIP], + 'test-debug/BreakPointBoundBuiltin': [SKIP], + 'test-debug/BreakPointBuiltin': [SKIP], + 'test-debug/BreakPointBuiltinNewContext': [SKIP], + 'test-debug/BreakPointBuiltinTFOperator': [SKIP], + 'test-debug/BreakPointCondition': [SKIP], + 'test-debug/BreakPointConditionBuiltin': [SKIP], + 'test-debug/BreakPointConstructCallWithGC': [SKIP], + 'test-debug/BreakPointConstructorBuiltin': [SKIP], + 'test-debug/BreakPointICCall': [SKIP], + 'test-debug/BreakPointICCallWithGC': [SKIP], + 'test-debug/BreakPointICLoad': [SKIP], + 'test-debug/BreakPointICStore': [SKIP], + 'test-debug/BreakPointInlineApiFunction': [SKIP], + 'test-debug/BreakPointInlineBoundBuiltin': [SKIP], + 'test-debug/BreakPointInlinedBuiltin': [SKIP], + 'test-debug/BreakPointInlinedConstructorBuiltin': [SKIP], + 'test-debug/BreakPointInlining': [SKIP], + 'test-debug/BreakPointJSBuiltin': [SKIP], + 'test-debug/BreakPointSurviveGC': [SKIP], + 'test-debug/ConditionalBreakpointWithCodeGenerationDisallowed': [SKIP], + 'test-debug/ContextData': [SKIP], + 'test-debug/DebugBreak': [SKIP], + 'test-debug/DebugBreakInDoWhileCondition1': [SKIP], + 'test-debug/DebugBreakInDoWhileCondition2': [SKIP], + 'test-debug/DebugBreakInDoWhileTrue1': [SKIP], + 'test-debug/DebugBreakInDoWhileTrue2': [SKIP], + 'test-debug/DebugBreakInFor1': [SKIP], + 'test-debug/DebugBreakInFor2': [SKIP], + 'test-debug/DebugBreakInForCondition1': [SKIP], + 'test-debug/DebugBreakInForCondition2': [SKIP], + 'test-debug/DebugBreakInWhileCondition1': [SKIP], + 'test-debug/DebugBreakInWhileCondition2': [SKIP], + 'test-debug/DebugBreakInWhileTrue1': [SKIP], + 'test-debug/DebugBreakInWhileTrue2': [SKIP], + 'test-debug/DebugBreakInWrappedScript': [SKIP], + 'test-debug/DebugBreakWithoutJS': [SKIP], + 'test-debug/DebugConditional': [SKIP], + 'test-debug/DebugSetOutOfMemoryListener': [SKIP], + 'test-debug/DebugStepDeclarations': [SKIP], + 'test-debug/DebugStepDoWhile': [SKIP], + 'test-debug/DebugStepFor': [SKIP], + 'test-debug/DebugStepForBreak': [SKIP], + 'test-debug/DebugStepForContinue': [SKIP], + 'test-debug/DebugStepForIn': [SKIP], + 'test-debug/DebugStepFunctionApply': [SKIP], + 'test-debug/DebugStepFunctionCall': [SKIP], + 'test-debug/DebugStepFunctionCallApply': [SKIP], + 'test-debug/DebugStepIf': [SKIP], + 'test-debug/DebugStepKeyedLoadLoop': [SKIP], + 'test-debug/DebugStepKeyedStoreLoop': [SKIP], + 'test-debug/DebugStepLinear': [SKIP], + 'test-debug/DebugStepLinearMixedICs': [SKIP], + 'test-debug/DebugStepLocals': [SKIP], + 'test-debug/DebugStepNamedLoadLoop': [SKIP], + 'test-debug/DebugStepNamedStoreLoop': [SKIP], + 'test-debug/DebugStepNatives': [SKIP], + 'test-debug/DebugStepSwitch': [SKIP], + 'test-debug/DebugStepWhile': [SKIP], + 'test-debug/DebugStepWith': [SKIP], + 'test-debug/DebuggerStatement': [SKIP], + 'test-debug/DebuggerStatementBreakpoint': [SKIP], + 'test-debug/DebuggerUnload': [SKIP], + 'test-debug/DisableBreak': [SKIP], + 'test-debug/EvalContextData': [SKIP], + 'test-debug/GCDuringBreakPointProcessing': [SKIP], + 'test-debug/NoBreakWhenBootstrapping': [SKIP], + 'test-debug/NoDebugBreakInAfterCompileEventListener': [SKIP], + 'test-debug/PauseInScript': [SKIP], + 'test-debug/Regress1163547': [SKIP], + 'test-debug/RepeatDebugBreak': [SKIP], + 'test-debug/TerminateOnResumeAtBreakOnEntry': [SKIP], + 'test-debug/TerminateOnResumeAtBreakOnEntryUserDefinedFunction': [SKIP], + 'test-debug/TerminateOnResumeAtBreakpoint': [SKIP], + 'test-debug/TerminateOnResumeAtException': [SKIP], + 'test-debug/TerminateOnResumeAtInterruptFromOtherThread': [SKIP], + 'test-debug/TerminateOnResumeAtUnhandledRejection': [SKIP], + 'test-debug/TerminateOnResumeAtUnhandledRejectionCppImpl': [SKIP], + 'test-debug/TerminateOnResumeFromMicrotask': [SKIP], + 'test-debug/TerminateOnResumeFromOtherThread': [SKIP], + 'test-debug/TerminateOnResumeRunJavaScriptAtBreakpoint': [SKIP], + 'test-debug/TerminateOnResumeRunMicrotaskAtBreakpoint': [SKIP], + 'test-embedder-tracing/GarbageCollectionForTesting': [SKIP], + 'test-embedder-tracing/NotifyEmptyStack': [SKIP], + 'test-embedder-tracing/TracedGlobalCopy': [SKIP], + 'test-embedder-tracing/TracedGlobalCopyNoDestructor': [SKIP], + 'test-embedder-tracing/TracedGlobalCopyWithDestructor': [SKIP], + 'test-embedder-tracing/TracedGlobalDestructor': [SKIP], + 'test-embedder-tracing/TracedGlobalInStdUnorderedMap': [SKIP], + 'test-embedder-tracing/TracedGlobalInStdVector': [SKIP], + 'test-embedder-tracing/TracedGlobalMove': [SKIP], + 'test-embedder-tracing/TracedGlobalNoDestructor': [SKIP], + 'test-embedder-tracing/TracedGlobalSetFinalizationCallbackMarkSweep': [SKIP], + 'test-embedder-tracing/TracedGlobalToUnmodifiedJSObjectDiesOnMarkSweep': [SKIP], + 'test-embedder-tracing/TracedReferenceCopy': [SKIP], + 'test-embedder-tracing/TracedReferenceHandlesDoNotLeak': [SKIP], + 'test-embedder-tracing/TracedReferenceHandlesMarking': [SKIP], + 'test-embedder-tracing/TracedReferenceMove': [SKIP], + 'test-embedder-tracing/TracingInEphemerons': [SKIP], + 'test-embedder-tracing/TracingInRevivedSubgraph': [SKIP], + 'test-embedder-tracing/V8RegisteringEmbedderReference': [SKIP], + 'test-external-string-tracker/ExternalString_ExternalBackingStoreSizeIncreasesAfterExternalization': [SKIP], + 'test-external-string-tracker/ExternalString_ExternalBackingStoreSizeIncreasesMarkCompact': [SKIP], + 'test-factory/Factory_CodeBuilder_BuildOOM': [SKIP], + 'test-factory/Factory_CodeBuilder_TryBuildOOM': [SKIP], + 'test-global-handles/FinalizerDiesAndKeepsPhantomAliveOnMarkCompact': [SKIP], + 'test-global-handles/FinalizerWeakness': [SKIP], + 'test-global-handles/GCFromWeakCallbacks': [SKIP], + 'test-global-handles/PhatomHandlesWithoutCallbacks': [SKIP], + 'test-global-handles/SecondPassPhantomCallbacks': [SKIP], + 'test-global-handles/WeakHandleToUnmodifiedJSApiObjectDiesOnMarkCompact': [SKIP], + 'test-global-handles/WeakHandleToUnmodifiedJSObjectDiesOnMarkCompact': [SKIP], + 'test-heap-profiler/HeapSnapshotDeleteDuringTakeSnapshot': [SKIP], + 'test-heap-profiler/HeapSnapshotObjectsStats': [SKIP], + 'test-heap-profiler/SamplingHeapProfilerPretenuredInlineAllocations': [SKIP], + 'test-heap-profiler/TrackBumpPointerAllocations': [SKIP], + 'test-heap/AllocateExternalBackingStore': [SKIP], + 'test-heap/BytecodeArray': [SKIP], + 'test-heap/CellsInOptimizedCodeAreWeak': [SKIP], + 'test-heap/CompilationCacheCachingBehavior': [SKIP], + 'test-heap/DeleteWeakGlobalHandle': [SKIP], + 'test-heap/EnsureAllocationSiteDependentCodesProcessed': [SKIP], + 'test-heap/LeakNativeContextViaFunction': [SKIP], + 'test-heap/LeakNativeContextViaMap': [SKIP], + 'test-heap/LeakNativeContextViaMapKeyed': [SKIP], + 'test-heap/LeakNativeContextViaMapProto': [SKIP], + 'test-heap/LiveBytes': [SKIP], + 'test-heap/MonomorphicStaysMonomorphicAfterGC': [SKIP], + 'test-heap/NextCodeLinkInCodeDataContainerIsCleared': [SKIP], + 'test-heap/NextCodeLinkIsWeak': [SKIP], + 'test-heap/NextCodeLinkIsWeak2': [SKIP], + 'test-heap/ObjectsInEagerlyDeoptimizedCodeAreWeak': [SKIP], + 'test-heap/ObjectsInOptimizedCodeAreWeak': [SKIP], + 'test-heap/OldSpaceAllocationCounter': [SKIP], + 'test-heap/OutOfMemoryIneffectiveGCRunningJS': [SKIP], + 'test-heap/Regress10843': [SKIP], + 'test-heap/Regress3877': [SKIP], + 'test-heap/Regress609761': [SKIP], + 'test-heap/ReleaseOverReservedPages': [SKIP], + 'test-heap/ReleaseStackTraceData': [SKIP], + 'test-heap/RememberedSet_OldToOld': [SKIP], + 'test-heap/TestBytecodeFlushing': [SKIP], + 'test-heap/TestInternalWeakLists': [SKIP], + 'test-heap/TestSizeOfObjects': [SKIP], + 'test-heap/TransitionArrayShrinksDuringAllocToOne': [SKIP], + 'test-heap/TransitionArrayShrinksDuringAllocToOnePropertyFound': [SKIP], + 'test-heap/TransitionArrayShrinksDuringAllocToZero': [SKIP], + 'test-heap/UncommitUnusedLargeObjectMemory': [SKIP], + 'test-heap/WeakFunctionInConstructor': [SKIP], + 'test-heap/WeakGlobalHandlesMark': [SKIP], + 'test-heap/WeakGlobalUnmodifiedApiHandlesScavenge': [SKIP], + 'test-heap/WeakMapInMonomorphicCompareNilIC': [SKIP], + 'test-heap/WeakMapInMonomorphicKeyedLoadIC': [SKIP], + 'test-heap/WeakMapInMonomorphicKeyedStoreIC': [SKIP], + 'test-heap/WeakMapInMonomorphicLoadIC': [SKIP], + 'test-heap/WeakMapInMonomorphicStoreIC': [SKIP], + 'test-heap/WeakMapInPolymorphicKeyedLoadIC': [SKIP], + 'test-heap/WeakMapInPolymorphicKeyedStoreIC': [SKIP], + 'test-heap/WeakMapInPolymorphicLoadIC': [SKIP], + 'test-heap/WeakMapInPolymorphicStoreIC': [SKIP], + 'test-js-weak-refs/TestJSWeakRef': [SKIP], + 'test-js-weak-refs/TestJSWeakRefKeepDuringJob': [SKIP], + 'test-managed/GCCausesDestruction': [SKIP], + 'test-run-wasm/RunWasmInterpreter_I32AddOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmInterpreter_I32DivSOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmInterpreter_I32DivUOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmInterpreter_I32MulOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmInterpreter_I32RemSOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmInterpreter_I32RemUOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmInterpreter_I32ShlOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmInterpreter_I32ShrSOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmInterpreter_I32ShrUOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmInterpreter_I32SubOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmInterpreter_I64AddOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmInterpreter_I64DivSOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmInterpreter_I64DivUOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmInterpreter_I64MulOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmInterpreter_I64RemSOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmInterpreter_I64RemUOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmInterpreter_I64ShlOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmInterpreter_I64ShrSOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmInterpreter_I64ShrUOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmInterpreter_I64SubOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmInterpreter_LoadMemI32_const_oob_misaligned': [SKIP], + 'test-run-wasm/RunWasmLiftoff_I32AddOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmLiftoff_I32DivSOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmLiftoff_I32DivUOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmLiftoff_I32MulOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmLiftoff_I32RemSOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmLiftoff_I32RemUOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmLiftoff_I32ShlOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmLiftoff_I32ShrSOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmLiftoff_I32ShrUOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmLiftoff_I32SubOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmLiftoff_I64AddOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmLiftoff_I64DivSOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmLiftoff_I64DivUOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmLiftoff_I64MulOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmLiftoff_I64RemSOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmLiftoff_I64RemUOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmLiftoff_I64ShlOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmLiftoff_I64ShrSOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmLiftoff_I64ShrUOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmLiftoff_I64SubOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmLiftoff_LoadMemI32_const_oob_misaligned': [SKIP], + 'test-run-wasm/RunWasmTurbofan_I32AddOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmTurbofan_I32DivSOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmTurbofan_I32DivUOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmTurbofan_I32MulOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmTurbofan_I32RemSOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmTurbofan_I32RemUOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmTurbofan_I32ShlOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmTurbofan_I32ShrSOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmTurbofan_I32ShrUOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmTurbofan_I32SubOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmTurbofan_I64AddOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmTurbofan_I64DivSOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmTurbofan_I64DivUOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmTurbofan_I64MulOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmTurbofan_I64RemSOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmTurbofan_I64RemUOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmTurbofan_I64ShlOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmTurbofan_I64ShrSOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmTurbofan_I64ShrUOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmTurbofan_I64SubOnDifferentRegisters': [SKIP], + 'test-run-wasm/RunWasmTurbofan_LoadMemI32_const_oob_misaligned': [SKIP], + 'test-serialize/CustomSnapshotDataBlobStackOverflow': [SKIP], + 'test-serialize/CustomSnapshotManyArrayBuffers': [SKIP], + 'test-weak-references/PrototypeUsersCompacted': [SKIP], + 'test-weak-references/WeakArrayListBasic': [SKIP], + 'test-weak-references/WeakArraysBasic': [SKIP], + 'test-weak-references/WeakReferencesBasic': [SKIP], + 'test-weakmaps/WeakMapsWithChainedEntries': [SKIP], + 'test-weakmaps/Weakness': [SKIP], + 'test-weaksets/WeakSet_Weakness': [SKIP], + 'test-web-snapshots/SFIDeduplicationAfterBytecodeFlushing': [SKIP], + # CodeRange tests + 'test-code-pages/LargeCodeObjectWithSignalHandler': [SKIP], + 'test-code-pages/LargeCodeObject': [SKIP], + 'test-code-pages/OptimizedCodeWithCodeRange': [SKIP], + 'test-code-pages/Sorted': [SKIP], + 'test-code-pages/CodeRangeCorrectContents': [SKIP], +}], # third_party_heap + +################################################################################ +['variant == always_sparkplug', { + # SFI deduplication tests check compilation state, which always_sparkplug + # can break. + 'test-web-snapshots/SFIDeduplication*': [SKIP], +}], + ] diff --git a/deps/v8/test/cctest/compiler/serializer-tester.cc b/deps/v8/test/cctest/compiler/serializer-tester.cc index 88e0becf23..9c41955fd7 100644 --- a/deps/v8/test/cctest/compiler/serializer-tester.cc +++ b/deps/v8/test/cctest/compiler/serializer-tester.cc @@ -49,7 +49,7 @@ SerializerTester::SerializerTester(const char* source) // Update handle to the corresponding serialized Handle in the broker. function = broker_->FindCanonicalPersistentHandleForTesting<JSFunction>(*function); - function_ = JSFunctionRef(broker(), function); + function_ = MakeRef(broker(), function); } TEST(SerializeEmptyFunction) { @@ -86,11 +86,11 @@ void CheckForSerializedInlinee(const char* source, int argc = 0, tester.broker() ->FindCanonicalPersistentHandleForTesting<SharedFunctionInfo>( g_func->shared())); - SharedFunctionInfoRef g_sfi(tester.broker(), sfi); + SharedFunctionInfoRef g_sfi = MakeRef(tester.broker(), sfi); Handle<FeedbackVector> fv( tester.broker()->FindCanonicalPersistentHandleForTesting<FeedbackVector>( g_func->feedback_vector())); - FeedbackVectorRef g_fv(tester.broker(), fv); + FeedbackVectorRef g_fv = MakeRef(tester.broker(), fv); CHECK(tester.broker()->IsSerializedForCompilation(g_sfi, g_fv)); } diff --git a/deps/v8/test/cctest/compiler/test-code-assembler.cc b/deps/v8/test/cctest/compiler/test-code-assembler.cc index 34fd24f865..445cc44ca7 100644 --- a/deps/v8/test/cctest/compiler/test-code-assembler.cc +++ b/deps/v8/test/cctest/compiler/test-code-assembler.cc @@ -467,6 +467,7 @@ TEST(ExceptionHandler) { } TEST(TestCodeAssemblerCodeComment) { +#ifdef V8_CODE_COMMENTS i::FLAG_code_comments = true; Isolate* isolate(CcTest::InitIsolateOnce()); const int kNumParams = 0; @@ -486,6 +487,7 @@ TEST(TestCodeAssemblerCodeComment) { it.Next(); } CHECK(found_comment); +#endif // V8_CODE_COMMENTS } TEST(StaticAssert) { diff --git a/deps/v8/test/cctest/compiler/test-concurrent-shared-function-info.cc b/deps/v8/test/cctest/compiler/test-concurrent-shared-function-info.cc index 163477d6fc..c286c1705c 100644 --- a/deps/v8/test/cctest/compiler/test-concurrent-shared-function-info.cc +++ b/deps/v8/test/cctest/compiler/test-concurrent-shared-function-info.cc @@ -88,8 +88,6 @@ class BackgroundCompilationThread final : public v8::base::Thread { TEST(TestConcurrentSharedFunctionInfo) { FlagScope<bool> allow_natives_syntax(&i::FLAG_allow_natives_syntax, true); FlagScope<bool> concurrent_inlining(&i::FLAG_concurrent_inlining, true); - FlagScope<bool> turbo_direct_heap_access(&i::FLAG_turbo_direct_heap_access, - true); HandleAndZoneScope scope; Isolate* isolate = scope.main_isolate(); diff --git a/deps/v8/test/cctest/compiler/test-js-context-specialization.cc b/deps/v8/test/cctest/compiler/test-js-context-specialization.cc index 8006ca43f2..aa26d48c2e 100644 --- a/deps/v8/test/cctest/compiler/test-js-context-specialization.cc +++ b/deps/v8/test/cctest/compiler/test-js-context-specialization.cc @@ -39,6 +39,7 @@ class ContextSpecializationTester : public HandleAndZoneScope { MaybeHandle<JSFunction>()) {} JSContextSpecialization* spec() { return &spec_; } + Isolate* isolate() { return main_isolate(); } Factory* factory() { return main_isolate()->factory(); } CommonOperatorBuilder* common() { return &common_; } JSOperatorBuilder* javascript() { return &javascript_; } @@ -111,7 +112,16 @@ void ContextSpecializationTester::CheckContextInputAndDepthChanges( CHECK_EQ(new_access.immutable(), access.immutable()); } -static const int slot_index = Context::PREVIOUS_INDEX; +namespace { +Handle<Context> NewContextForTesting(Isolate* isolate, + Handle<Context> previous) { + Handle<ScopeInfo> scope_info = ScopeInfo::CreateForWithScope(isolate, {}); + Handle<JSObject> extension = isolate->factory()->NewJSObjectWithNullProto(); + return isolate->factory()->NewWithContext(previous, scope_info, extension); +} +} // namespace + +static const int slot_index = 5; TEST(ReduceJSLoadContext0) { ContextSpecializationTester t(Nothing<OuterContext>()); @@ -121,12 +131,10 @@ TEST(ReduceJSLoadContext0) { // Make a context and initialize it a bit for this test. Handle<Context> native = t.factory()->NewNativeContext(); - Handle<Context> subcontext1 = t.factory()->NewNativeContext(); - Handle<Context> subcontext2 = t.factory()->NewNativeContext(); - subcontext2->set_previous(*subcontext1); - subcontext1->set_previous(*native); + Handle<Context> subcontext1 = NewContextForTesting(t.isolate(), native); + Handle<Context> subcontext2 = NewContextForTesting(t.isolate(), subcontext1); Handle<Object> expected = t.factory()->InternalizeUtf8String("gboy!"); - const int slot = Context::PREVIOUS_INDEX; + const int slot = 5; native->set(slot, *expected); Node* const_context = t.jsgraph()->Constant(ObjectRef(t.broker(), native)); @@ -271,8 +279,8 @@ TEST(ReduceJSLoadContext2) { Handle<HeapObject> slot_value1 = t.factory()->InternalizeUtf8String("1"); Handle<Context> context_object0 = t.factory()->NewNativeContext(); - Handle<Context> context_object1 = t.factory()->NewNativeContext(); - context_object1->set_previous(*context_object0); + Handle<Context> context_object1 = + NewContextForTesting(t.isolate(), context_object0); context_object0->set(Context::EXTENSION_INDEX, *slot_value0); context_object1->set(Context::EXTENSION_INDEX, *slot_value1); @@ -342,14 +350,15 @@ TEST(ReduceJSLoadContext3) { // expectations are the same as in ReduceJSLoadContext2. HandleAndZoneScope handle_zone_scope; - auto factory = handle_zone_scope.main_isolate()->factory(); + auto isolate = handle_zone_scope.main_isolate(); + auto factory = isolate->factory(); Handle<HeapObject> slot_value0 = factory->InternalizeUtf8String("0"); Handle<HeapObject> slot_value1 = factory->InternalizeUtf8String("1"); Handle<Context> context_object0 = factory->NewNativeContext(); - Handle<Context> context_object1 = factory->NewNativeContext(); - context_object1->set_previous(*context_object0); + Handle<Context> context_object1 = + NewContextForTesting(isolate, context_object0); context_object0->set(Context::EXTENSION_INDEX, *slot_value0); context_object1->set(Context::EXTENSION_INDEX, *slot_value1); @@ -427,12 +436,10 @@ TEST(ReduceJSStoreContext0) { // Make a context and initialize it a bit for this test. Handle<Context> native = t.factory()->NewNativeContext(); - Handle<Context> subcontext1 = t.factory()->NewNativeContext(); - Handle<Context> subcontext2 = t.factory()->NewNativeContext(); - subcontext2->set_previous(*subcontext1); - subcontext1->set_previous(*native); + Handle<Context> subcontext1 = NewContextForTesting(t.isolate(), native); + Handle<Context> subcontext2 = NewContextForTesting(t.isolate(), subcontext1); Handle<Object> expected = t.factory()->InternalizeUtf8String("gboy!"); - const int slot = Context::PREVIOUS_INDEX; + const int slot = 5; native->set(slot, *expected); Node* const_context = t.jsgraph()->Constant(ObjectRef(t.broker(), native)); @@ -542,8 +549,8 @@ TEST(ReduceJSStoreContext2) { Handle<HeapObject> slot_value1 = t.factory()->InternalizeUtf8String("1"); Handle<Context> context_object0 = t.factory()->NewNativeContext(); - Handle<Context> context_object1 = t.factory()->NewNativeContext(); - context_object1->set_previous(*context_object0); + Handle<Context> context_object1 = + NewContextForTesting(t.isolate(), context_object0); context_object0->set(Context::EXTENSION_INDEX, *slot_value0); context_object1->set(Context::EXTENSION_INDEX, *slot_value1); @@ -585,14 +592,15 @@ TEST(ReduceJSStoreContext2) { TEST(ReduceJSStoreContext3) { HandleAndZoneScope handle_zone_scope; - auto factory = handle_zone_scope.main_isolate()->factory(); + auto isolate = handle_zone_scope.main_isolate(); + auto factory = isolate->factory(); Handle<HeapObject> slot_value0 = factory->InternalizeUtf8String("0"); Handle<HeapObject> slot_value1 = factory->InternalizeUtf8String("1"); Handle<Context> context_object0 = factory->NewNativeContext(); - Handle<Context> context_object1 = factory->NewNativeContext(); - context_object1->set_previous(*context_object0); + Handle<Context> context_object1 = + NewContextForTesting(isolate, context_object0); context_object0->set(Context::EXTENSION_INDEX, *slot_value0); context_object1->set(Context::EXTENSION_INDEX, *slot_value1); diff --git a/deps/v8/test/cctest/compiler/test-representation-change.cc b/deps/v8/test/cctest/compiler/test-representation-change.cc index 4f1ebb7f7d..f4488bf09a 100644 --- a/deps/v8/test/cctest/compiler/test-representation-change.cc +++ b/deps/v8/test/cctest/compiler/test-representation-change.cc @@ -413,9 +413,11 @@ TEST(Word64) { CheckChange(IrOpcode::kChangeFloat64ToInt64, MachineRepresentation::kFloat64, TypeCache::Get()->kSafeInteger, MachineRepresentation::kWord64); CheckChange(IrOpcode::kChangeFloat64ToInt64, MachineRepresentation::kFloat64, - TypeCache::Get()->kInt64, MachineRepresentation::kWord64); + TypeCache::Get()->kDoubleRepresentableInt64, + MachineRepresentation::kWord64); CheckChange(IrOpcode::kChangeFloat64ToUint64, MachineRepresentation::kFloat64, - TypeCache::Get()->kUint64, MachineRepresentation::kWord64); + TypeCache::Get()->kDoubleRepresentableUint64, + MachineRepresentation::kWord64); CheckChange( IrOpcode::kCheckedFloat64ToInt64, MachineRepresentation::kFloat64, Type::Number(), MachineRepresentation::kWord64, @@ -438,11 +440,13 @@ TEST(Word64) { MachineRepresentation::kWord64); CheckTwoChanges(IrOpcode::kChangeFloat32ToFloat64, IrOpcode::kChangeFloat64ToInt64, - MachineRepresentation::kFloat32, TypeCache::Get()->kInt64, + MachineRepresentation::kFloat32, + TypeCache::Get()->kDoubleRepresentableInt64, MachineRepresentation::kWord64); CheckTwoChanges(IrOpcode::kChangeFloat32ToFloat64, IrOpcode::kChangeFloat64ToUint64, - MachineRepresentation::kFloat32, TypeCache::Get()->kUint64, + MachineRepresentation::kFloat32, + TypeCache::Get()->kDoubleRepresentableUint64, MachineRepresentation::kWord64); CheckTwoChanges( IrOpcode::kChangeFloat32ToFloat64, IrOpcode::kCheckedFloat64ToInt64, @@ -462,7 +466,8 @@ TEST(Word64) { CheckChange(IrOpcode::kChangeTaggedToInt64, MachineRepresentation::kTagged, TypeCache::Get()->kSafeInteger, MachineRepresentation::kWord64); CheckChange(IrOpcode::kChangeTaggedToInt64, MachineRepresentation::kTagged, - TypeCache::Get()->kInt64, MachineRepresentation::kWord64); + TypeCache::Get()->kDoubleRepresentableInt64, + MachineRepresentation::kWord64); CheckChange(IrOpcode::kChangeTaggedSignedToInt64, MachineRepresentation::kTaggedSigned, Type::SignedSmall(), MachineRepresentation::kWord64); diff --git a/deps/v8/test/cctest/compiler/test-run-machops.cc b/deps/v8/test/cctest/compiler/test-run-machops.cc index 3160848b68..308b00cb8a 100644 --- a/deps/v8/test/cctest/compiler/test-run-machops.cc +++ b/deps/v8/test/cctest/compiler/test-run-machops.cc @@ -400,6 +400,132 @@ TEST(RunWord64Popcnt) { #endif // V8_TARGET_ARCH_64_BIT +TEST(RunWord32Select) { + BufferedRawMachineAssemblerTester<int32_t> m( + MachineType::Int32(), MachineType::Int32(), MachineType::Int32()); + if (!m.machine()->Word32Select().IsSupported()) { + return; + } + + Node* cmp = m.Word32Equal(m.Parameter(2), m.Int32Constant(0)); + m.Return(m.Word32Select(cmp, m.Parameter(0), m.Parameter(1))); + constexpr int input1 = 16; + constexpr int input2 = 3443; + + for (int i = 0; i < 2; ++i) { + int expected = i == 0 ? input1 : input2; + CHECK_EQ(expected, m.Call(input1, input2, i)); + } +} + +TEST(RunWord64Select) { + BufferedRawMachineAssemblerTester<int64_t> m( + MachineType::Int64(), MachineType::Int64(), MachineType::Int32()); + if (!m.machine()->Word64Select().IsSupported()) { + return; + } + + Node* cmp = m.Word32Equal(m.Parameter(2), m.Int32Constant(0)); + m.Return(m.Word64Select(cmp, m.Parameter(0), m.Parameter(1))); + constexpr int64_t input1 = 16; + constexpr int64_t input2 = 0x123456789abc; + + for (int i = 0; i < 2; ++i) { + int64_t expected = i == 0 ? input1 : input2; + CHECK_EQ(expected, m.Call(input1, input2, i)); + } +} + +TEST(RunSelectUnorderedEqual) { + BufferedRawMachineAssemblerTester<int64_t> m( + MachineType::Int64(), MachineType::Int64(), MachineType::Float32()); + if (!m.machine()->Word64Select().IsSupported()) { + return; + } + + Node* cmp = m.Float32Equal(m.Parameter(2), m.Float32Constant(0)); + m.Return(m.Word64Select(cmp, m.Parameter(0), m.Parameter(1))); + constexpr int64_t input1 = 16; + constexpr int64_t input2 = 0x123456789abc; + + CHECK_EQ(input1, m.Call(input1, input2, float{0})); + CHECK_EQ(input2, m.Call(input1, input2, float{1})); + CHECK_EQ(input2, m.Call(input1, input2, std::nanf(""))); +} + +TEST(RunSelectUnorderedNotEqual) { + BufferedRawMachineAssemblerTester<int64_t> m( + MachineType::Int64(), MachineType::Int64(), MachineType::Float32()); + if (!m.machine()->Word64Select().IsSupported()) { + return; + } + + Node* cmp = m.Float32NotEqual(m.Parameter(2), m.Float32Constant(0)); + m.Return(m.Word64Select(cmp, m.Parameter(0), m.Parameter(1))); + constexpr int64_t input1 = 16; + constexpr int64_t input2 = 0x123456789abc; + + CHECK_EQ(input2, m.Call(input1, input2, float{0})); + CHECK_EQ(input1, m.Call(input1, input2, float{1})); + CHECK_EQ(input1, m.Call(input1, input2, std::nanf(""))); +} + +namespace { +void FooForSelect() {} +} // namespace + +TEST(RunWord32SelectWithMemoryInput) { + BufferedRawMachineAssemblerTester<int32_t> m(MachineType::Int32(), + MachineType::Int32()); + if (!m.machine()->Word32Select().IsSupported()) { + return; + } + + // Test that the generated code also works with values spilled on the stack. + + auto* foo_ptr = &FooForSelect; + constexpr int input1 = 16; + int input2 = 3443; + // Load {value2} before the function call so that it gets spilled. + Node* value2 = m.LoadFromPointer(&input2, MachineType::Int32()); + Node* function = m.LoadFromPointer(&foo_ptr, MachineType::Pointer()); + // Call a function so that {value2} gets spilled on the stack. + m.CallCFunction(function, MachineType::Int32()); + Node* cmp = m.Word32Equal(m.Parameter(1), m.Int32Constant(0)); + m.Return(m.Word32Select(cmp, m.Parameter(0), value2)); + + for (int i = 0; i < 2; ++i) { + int32_t expected = i == 0 ? input1 : input2; + CHECK_EQ(expected, m.Call(input1, i)); + } +} + +TEST(RunWord64SelectWithMemoryInput) { + BufferedRawMachineAssemblerTester<int64_t> m(MachineType::Int64(), + MachineType::Int32()); + if (!m.machine()->Word64Select().IsSupported()) { + return; + } + + // Test that the generated code also works with values spilled on the stack. + + auto* foo_ptr = &FooForSelect; + constexpr int64_t input1 = 16; + int64_t input2 = 0x12345678ABCD; + // Load {value2} before the function call so that it gets spilled. + Node* value2 = m.LoadFromPointer(&input2, MachineType::Int64()); + Node* function = m.LoadFromPointer(&foo_ptr, MachineType::Pointer()); + // Call a function so that {value2} gets spilled on the stack. + m.CallCFunction(function, MachineType::Int32()); + Node* cmp = m.Word32Equal(m.Parameter(1), m.Int32Constant(0)); + m.Return(m.Word64Select(cmp, m.Parameter(0), value2)); + + for (int i = 0; i < 2; ++i) { + int64_t expected = i == 0 ? input1 : input2; + CHECK_EQ(expected, m.Call(input1, i)); + } +} + TEST(RunFloat32SelectRegFloatCompare) { BufferedRawMachineAssemblerTester<float> m(MachineType::Float32(), MachineType::Float32()); diff --git a/deps/v8/test/cctest/compiler/test-verify-type.cc b/deps/v8/test/cctest/compiler/test-verify-type.cc new file mode 100644 index 0000000000..b9b584dddc --- /dev/null +++ b/deps/v8/test/cctest/compiler/test-verify-type.cc @@ -0,0 +1,70 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "src/compiler/js-operator.h" +#include "test/cctest/compiler/node-observer-tester.h" +#include "test/common/flag-utils.h" + +namespace v8 { +namespace internal { +namespace compiler { + +TEST(TestVerifyType) { + FlagScope<bool> allow_natives_syntax(&i::FLAG_allow_natives_syntax, true); + HandleAndZoneScope handle_scope; + Isolate* isolate = handle_scope.main_isolate(); + Zone* zone = handle_scope.main_zone(); + + const char* source = + "function test(b) {\n" + " let x = -8;\n" + " if(b) x = 42;\n" + " return %ObserveNode(%VerifyType(x));\n" + "}\n" + "\n" + "%PrepareFunctionForOptimization(test);\n" + "test(false); test(true);\n" + "%OptimizeFunctionOnNextCall(test);\n" + "test(false);\n"; + + bool js_intrinsic_lowering_happened = false; + bool simplified_lowering_happened = false; + + ModificationObserver observer( + [](const Node* node) { + CHECK_EQ(node->opcode(), IrOpcode::kJSCallRuntime); + CHECK_EQ(CallRuntimeParametersOf(node->op()).id(), + Runtime::kVerifyType); + }, + [&](const Node* node, const ObservableNodeState& old_state) { + if (old_state.opcode() == IrOpcode::kJSCallRuntime && + node->opcode() == IrOpcode::kVerifyType) { + // CallRuntime is lowered to VerifyType in JSIntrinsicLowering. + js_intrinsic_lowering_happened = true; + return NodeObserver::Observation::kContinue; + } else if (old_state.opcode() == IrOpcode::kVerifyType && + node->opcode() == IrOpcode::kAssertType) { + // VerifyType is lowered to AssertType in SimplifiedLowering. + // AssertType asserts for the type of its value input. + Type asserted_type = OpParameter<Type>(node->op()); + CHECK(asserted_type.Equals(Type::Range(-8, 42, zone))); + simplified_lowering_happened = true; + return NodeObserver::Observation::kStop; + } else { + // Every other lowering would be wrong, so fail the test. + UNREACHABLE(); + } + return NodeObserver::Observation::kContinue; + }); + + compiler::ObserveNodeScope scope(isolate, &observer); + CompileRun(source); + + CHECK(js_intrinsic_lowering_happened); + CHECK(simplified_lowering_happened); +} + +} // namespace compiler +} // namespace internal +} // namespace v8 diff --git a/deps/v8/test/cctest/heap/heap-utils.cc b/deps/v8/test/cctest/heap/heap-utils.cc index 24f04e9eed..f94bc1fa5e 100644 --- a/deps/v8/test/cctest/heap/heap-utils.cc +++ b/deps/v8/test/cctest/heap/heap-utils.cc @@ -122,7 +122,8 @@ std::vector<Handle<FixedArray>> CreatePadding(Heap* heap, int padding_size, CHECK((allocation == AllocationType::kYoung && heap->new_space()->Contains(*handles.back())) || (allocation == AllocationType::kOld && - heap->InOldSpace(*handles.back()))); + heap->InOldSpace(*handles.back())) || + FLAG_single_generation); free_memory -= handles.back()->Size(); } return handles; diff --git a/deps/v8/test/cctest/heap/test-array-buffer-tracker.cc b/deps/v8/test/cctest/heap/test-array-buffer-tracker.cc index d3eb8c84ec..6465c74870 100644 --- a/deps/v8/test/cctest/heap/test-array-buffer-tracker.cc +++ b/deps/v8/test/cctest/heap/test-array-buffer-tracker.cc @@ -269,6 +269,10 @@ TEST(ArrayBuffer_LivePromotion) { Handle<JSArrayBuffer> buf = v8::Utils::OpenHandle(*ab); root->set(0, *buf); // Buffer that should be promoted as live. } + // Store array in Global such that it is part of the root set when + // starting incremental marking. + v8::Global<Value> global_root(CcTest::isolate(), + Utils::ToLocal(Handle<Object>::cast(root))); heap::SimulateIncrementalMarking(heap, true); CHECK(IsTracked(heap, JSArrayBuffer::cast(root->get(0)))); heap::GcAndSweep(heap, NEW_SPACE); @@ -388,26 +392,29 @@ UNINITIALIZED_TEST(ArrayBuffer_SemiSpaceCopyMultipleTasks) { } TEST(ArrayBuffer_ExternalBackingStoreSizeIncreases) { + if (FLAG_single_generation) return; CcTest::InitializeVM(); LocalContext env; v8::Isolate* isolate = env->GetIsolate(); Heap* heap = reinterpret_cast<Isolate*>(isolate)->heap(); ExternalBackingStoreType type = ExternalBackingStoreType::kArrayBuffer; - const size_t backing_store_before = - heap->new_space()->ExternalBackingStoreBytes(type); + const Space* space = FLAG_incremental_marking + ? static_cast<Space*>(heap->new_space()) + : static_cast<Space*>(heap->old_space()); + const size_t backing_store_before = space->ExternalBackingStoreBytes(type); { const size_t kArraybufferSize = 117; v8::HandleScope handle_scope(isolate); Local<v8::ArrayBuffer> ab = v8::ArrayBuffer::New(isolate, kArraybufferSize); USE(ab); - const size_t backing_store_after = - heap->new_space()->ExternalBackingStoreBytes(type); + const size_t backing_store_after = space->ExternalBackingStoreBytes(type); CHECK_EQ(kArraybufferSize, backing_store_after - backing_store_before); } } TEST(ArrayBuffer_ExternalBackingStoreSizeDecreases) { + if (FLAG_single_generation) return; FLAG_concurrent_array_buffer_sweeping = false; CcTest::InitializeVM(); LocalContext env; diff --git a/deps/v8/test/cctest/heap/test-concurrent-allocation.cc b/deps/v8/test/cctest/heap/test-concurrent-allocation.cc index 1a664b9562..f819383815 100644 --- a/deps/v8/test/cctest/heap/test-concurrent-allocation.cc +++ b/deps/v8/test/cctest/heap/test-concurrent-allocation.cc @@ -340,6 +340,7 @@ class ConcurrentBlackAllocationThread final : public v8::base::Thread { }; UNINITIALIZED_TEST(ConcurrentBlackAllocation) { + if (!FLAG_incremental_marking) return; v8::Isolate::CreateParams create_params; create_params.array_buffer_allocator = CcTest::array_buffer_allocator(); v8::Isolate* isolate = v8::Isolate::New(create_params); @@ -399,6 +400,7 @@ class ConcurrentWriteBarrierThread final : public v8::base::Thread { }; UNINITIALIZED_TEST(ConcurrentWriteBarrier) { + if (!FLAG_incremental_marking) return; if (!FLAG_concurrent_marking) { // The test requires concurrent marking barrier. return; @@ -463,6 +465,7 @@ class ConcurrentRecordRelocSlotThread final : public v8::base::Thread { }; UNINITIALIZED_TEST(ConcurrentRecordRelocSlot) { + if (!FLAG_incremental_marking) return; if (!FLAG_concurrent_marking) { // The test requires concurrent marking barrier. return; diff --git a/deps/v8/test/cctest/heap/test-concurrent-marking.cc b/deps/v8/test/cctest/heap/test-concurrent-marking.cc index 71d46e0827..c5bb234c70 100644 --- a/deps/v8/test/cctest/heap/test-concurrent-marking.cc +++ b/deps/v8/test/cctest/heap/test-concurrent-marking.cc @@ -104,6 +104,7 @@ TEST(ConcurrentMarkingPreemptAndReschedule) { } TEST(ConcurrentMarkingMarkedBytes) { + if (!FLAG_incremental_marking) return; if (!i::FLAG_concurrent_marking) return; CcTest::InitializeVM(); Isolate* isolate = CcTest::i_isolate(); @@ -112,12 +113,19 @@ TEST(ConcurrentMarkingMarkedBytes) { Handle<FixedArray> root = isolate->factory()->NewFixedArray(1000000); CcTest::CollectAllGarbage(); if (!heap->incremental_marking()->IsStopped()) return; + + // Store array in Global such that it is part of the root set when + // starting incremental marking. + v8::Global<Value> global_root(CcTest::isolate(), + Utils::ToLocal(Handle<Object>::cast(root))); + heap::SimulateIncrementalMarking(heap, false); heap->concurrent_marking()->Join(); CHECK_GE(heap->concurrent_marking()->TotalMarkedBytes(), root->Size()); } UNINITIALIZED_TEST(ConcurrentMarkingStoppedOnTeardown) { + if (!FLAG_incremental_marking) return; if (!i::FLAG_concurrent_marking) return; v8::Isolate::CreateParams create_params; diff --git a/deps/v8/test/cctest/heap/test-embedder-tracing.cc b/deps/v8/test/cctest/heap/test-embedder-tracing.cc index 6b5ebb4bc8..77d1a2dd00 100644 --- a/deps/v8/test/cctest/heap/test-embedder-tracing.cc +++ b/deps/v8/test/cctest/heap/test-embedder-tracing.cc @@ -7,7 +7,9 @@ #include "include/v8.h" #include "src/api/api-inl.h" +#include "src/heap/embedder-tracing.h" #include "src/heap/heap-inl.h" +#include "src/heap/heap.h" #include "src/heap/safepoint.h" #include "src/objects/module.h" #include "src/objects/objects-inl.h" @@ -251,6 +253,7 @@ TEST(FinalizeTracingIsNoopWhenNotMarking) { } TEST(FinalizeTracingWhenMarking) { + if (!FLAG_incremental_marking) return; ManualGCScope manual_gc; CcTest::InitializeVM(); v8::Isolate* isolate = CcTest::isolate(); @@ -709,6 +712,7 @@ TEST(TracedGlobalSetFinalizationCallbackMarkSweep) { TEST(TracePrologueCallingIntoV8WriteBarrier) { // Regression test: https://crbug.com/940003 + if (!FLAG_incremental_marking) return; ManualGCScope manual_gc; CcTest::InitializeVM(); v8::Isolate* isolate = CcTest::isolate(); @@ -959,7 +963,10 @@ V8_NOINLINE void TracedReferenceNotifyEmptyStackTest( v8::Global<v8::Object> observer; CreateTracedReferenceInDeepStack(isolate, &observer); CHECK(!observer.IsEmpty()); - tracer->NotifyEmptyEmbedderStack(); + reinterpret_cast<i::Isolate*>(isolate) + ->heap() + ->local_embedder_heap_tracer() + ->NotifyEmptyEmbedderStack(); heap::InvokeMarkSweep(); CHECK(observer.IsEmpty()); } diff --git a/deps/v8/test/cctest/heap/test-external-string-tracker.cc b/deps/v8/test/cctest/heap/test-external-string-tracker.cc index 001ae25c20..14575756df 100644 --- a/deps/v8/test/cctest/heap/test-external-string-tracker.cc +++ b/deps/v8/test/cctest/heap/test-external-string-tracker.cc @@ -130,6 +130,7 @@ TEST(ExternalString_ExternalBackingStoreSizeIncreasesMarkCompact) { } TEST(ExternalString_ExternalBackingStoreSizeIncreasesAfterExternalization) { + if (FLAG_single_generation) return; ManualGCScope manual_gc_scope; CcTest::InitializeVM(); LocalContext env; diff --git a/deps/v8/test/cctest/heap/test-heap.cc b/deps/v8/test/cctest/heap/test-heap.cc index d8ad6e6554..b9d6a24a46 100644 --- a/deps/v8/test/cctest/heap/test-heap.cc +++ b/deps/v8/test/cctest/heap/test-heap.cc @@ -64,6 +64,7 @@ #include "src/objects/transitions.h" #include "src/regexp/regexp.h" #include "src/snapshot/snapshot.h" +#include "src/tracing/tracing-category-observer.h" #include "src/utils/ostreams.h" #include "test/cctest/cctest.h" #include "test/cctest/heap/heap-tester.h" @@ -364,6 +365,8 @@ TEST(Tagging) { TEST(GarbageCollection) { + if (FLAG_single_generation) return; + CcTest::InitializeVM(); Isolate* isolate = CcTest::i_isolate(); Factory* factory = isolate->factory(); @@ -1264,10 +1267,10 @@ UNINITIALIZED_TEST(Regress10843) { // Tests that spill slots from optimized code don't have weak pointers. TEST(Regress10774) { + if (FLAG_single_generation) return; i::FLAG_allow_natives_syntax = true; i::FLAG_turboprop = true; i::FLAG_turbo_dynamic_map_checks = true; - i::FLAG_turbo_direct_heap_access = true; #ifdef VERIFY_HEAP i::FLAG_verify_heap = true; #endif @@ -1324,6 +1327,7 @@ TEST(Regress10774) { #ifndef V8_LITE_MODE TEST(TestOptimizeAfterBytecodeFlushingCandidate) { + if (FLAG_single_generation) return; FLAG_opt = true; FLAG_always_opt = false; #if ENABLE_SPARKPLUG @@ -1555,7 +1559,7 @@ TEST(TestInternalWeakLists) { // Some flags turn Scavenge collections into Mark-sweep collections // and hence are incompatible with this test case. if (FLAG_gc_global || FLAG_stress_compaction || - FLAG_stress_incremental_marking) + FLAG_stress_incremental_marking || FLAG_single_generation) return; FLAG_retain_maps_for_n_gc = 0; @@ -1802,6 +1806,7 @@ static Address AlignNewSpace(AllocationAlignment alignment, int offset) { TEST(TestAlignedAllocation) { + if (FLAG_single_generation) return; // Double misalignment is 4 on 32-bit platforms or when pointer compression // is enabled, 0 on 64-bit ones when pointer compression is disabled. const intptr_t double_misalignment = kDoubleSize - kTaggedSize; @@ -1924,6 +1929,7 @@ TEST(TestAlignedOverAllocation) { } TEST(HeapNumberAlignment) { + if (!FLAG_allocation_site_pretenuring) return; CcTest::InitializeVM(); Isolate* isolate = CcTest::i_isolate(); Factory* factory = isolate->factory(); @@ -2303,6 +2309,11 @@ TEST(InstanceOfStubWriteBarrier) { v8::HandleScope outer_scope(CcTest::isolate()); v8::Local<v8::Context> ctx = CcTest::isolate()->GetCurrentContext(); + // Store native context in global as well to make it part of the root set when + // starting incremental marking. This will ensure that function will be part + // of the transitive closure during incremental marking. + v8::Global<v8::Context> global_ctx(CcTest::isolate(), ctx); + { v8::HandleScope scope(CcTest::isolate()); CompileRun( @@ -2492,7 +2503,7 @@ TEST(OptimizedPretenuringAllocationFolding) { CcTest::InitializeVM(); if (!CcTest::i_isolate()->use_optimizer() || FLAG_always_opt) return; if (FLAG_gc_global || FLAG_stress_compaction || - FLAG_stress_incremental_marking) + FLAG_stress_incremental_marking || FLAG_single_generation) return; v8::HandleScope scope(CcTest::isolate()); v8::Local<v8::Context> ctx = CcTest::isolate()->GetCurrentContext(); @@ -2542,7 +2553,7 @@ TEST(OptimizedPretenuringObjectArrayLiterals) { CcTest::InitializeVM(); if (!CcTest::i_isolate()->use_optimizer() || FLAG_always_opt) return; if (FLAG_gc_global || FLAG_stress_compaction || - FLAG_stress_incremental_marking) { + FLAG_stress_incremental_marking || FLAG_single_generation) { return; } v8::HandleScope scope(CcTest::isolate()); @@ -2623,7 +2634,7 @@ TEST(OptimizedPretenuringMixedInObjectProperties) { CcTest::InitializeVM(); if (!CcTest::i_isolate()->use_optimizer() || FLAG_always_opt) return; if (FLAG_gc_global || FLAG_stress_compaction || - FLAG_stress_incremental_marking) + FLAG_stress_incremental_marking || FLAG_single_generation) return; v8::HandleScope scope(CcTest::isolate()); @@ -2670,7 +2681,7 @@ TEST(OptimizedPretenuringDoubleArrayProperties) { CcTest::InitializeVM(); if (!CcTest::i_isolate()->use_optimizer() || FLAG_always_opt) return; if (FLAG_gc_global || FLAG_stress_compaction || - FLAG_stress_incremental_marking) + FLAG_stress_incremental_marking || FLAG_single_generation) return; v8::HandleScope scope(CcTest::isolate()); @@ -2709,7 +2720,7 @@ TEST(OptimizedPretenuringDoubleArrayLiterals) { CcTest::InitializeVM(); if (!CcTest::i_isolate()->use_optimizer() || FLAG_always_opt) return; if (FLAG_gc_global || FLAG_stress_compaction || - FLAG_stress_incremental_marking) + FLAG_stress_incremental_marking || FLAG_single_generation) return; v8::HandleScope scope(CcTest::isolate()); @@ -2747,7 +2758,7 @@ TEST(OptimizedPretenuringNestedMixedArrayLiterals) { CcTest::InitializeVM(); if (!CcTest::i_isolate()->use_optimizer() || FLAG_always_opt) return; if (FLAG_gc_global || FLAG_stress_compaction || - FLAG_stress_incremental_marking) + FLAG_stress_incremental_marking || FLAG_single_generation) return; v8::HandleScope scope(CcTest::isolate()); v8::Local<v8::Context> ctx = CcTest::isolate()->GetCurrentContext(); @@ -2797,7 +2808,7 @@ TEST(OptimizedPretenuringNestedObjectLiterals) { CcTest::InitializeVM(); if (!CcTest::i_isolate()->use_optimizer() || FLAG_always_opt) return; if (FLAG_gc_global || FLAG_stress_compaction || - FLAG_stress_incremental_marking) + FLAG_stress_incremental_marking || FLAG_single_generation) return; v8::HandleScope scope(CcTest::isolate()); v8::Local<v8::Context> ctx = CcTest::isolate()->GetCurrentContext(); @@ -2847,7 +2858,7 @@ TEST(OptimizedPretenuringNestedDoubleLiterals) { CcTest::InitializeVM(); if (!CcTest::i_isolate()->use_optimizer() || FLAG_always_opt) return; if (FLAG_gc_global || FLAG_stress_compaction || - FLAG_stress_incremental_marking) + FLAG_stress_incremental_marking || FLAG_single_generation) return; v8::HandleScope scope(CcTest::isolate()); v8::Local<v8::Context> ctx = CcTest::isolate()->GetCurrentContext(); @@ -3839,10 +3850,12 @@ static void TestFillersFromPersistentHandles(bool promote) { // GC should retain the trimmed array but drop all of the three fillers. CcTest::CollectGarbage(NEW_SPACE); - if (promote) { - CHECK(heap->InOldSpace(*tail)); - } else { - CHECK(Heap::InYoungGeneration(*tail)); + if (!FLAG_single_generation) { + if (promote) { + CHECK(heap->InOldSpace(*tail)); + } else { + CHECK(Heap::InYoungGeneration(*tail)); + } } CHECK_EQ(n - 6, (*tail).length()); CHECK(!filler_1->IsHeapObject()); @@ -3851,12 +3864,12 @@ static void TestFillersFromPersistentHandles(bool promote) { } TEST(DoNotEvacuateFillersFromPersistentHandles) { - if (FLAG_single_generation) return; + if (FLAG_single_generation || FLAG_move_object_start) return; TestFillersFromPersistentHandles(false /*promote*/); } TEST(DoNotPromoteFillersFromPersistentHandles) { - if (FLAG_single_generation) return; + if (FLAG_single_generation || FLAG_move_object_start) return; TestFillersFromPersistentHandles(true /*promote*/); } @@ -4427,7 +4440,6 @@ static int GetCodeChainLength(Code code) { TEST(NextCodeLinkIsWeak) { FLAG_always_opt = false; FLAG_allow_natives_syntax = true; - FLAG_turbo_nci = false; // Additional compile tasks muck with test logic. CcTest::InitializeVM(); Isolate* isolate = CcTest::i_isolate(); v8::internal::Heap* heap = CcTest::heap(); @@ -4458,7 +4470,6 @@ TEST(NextCodeLinkIsWeak) { TEST(NextCodeLinkInCodeDataContainerIsCleared) { FLAG_always_opt = false; FLAG_allow_natives_syntax = true; - FLAG_turbo_nci = false; // Additional compile tasks muck with test logic. CcTest::InitializeVM(); Isolate* isolate = CcTest::i_isolate(); v8::internal::Heap* heap = CcTest::heap(); @@ -5219,6 +5230,10 @@ void CheckMapRetainingFor(int n) { Handle<Context> context = Utils::OpenHandle(*ctx); CHECK(context->IsNativeContext()); Handle<NativeContext> native_context = Handle<NativeContext>::cast(context); + // This global is used to visit the object's constructor alive when starting + // incremental marking. The native context keeps the constructor alive. The + // constructor needs to be alive to retain the map. + v8::Global<v8::Context> global_ctxt(CcTest::isolate(), ctx); ctx->Enter(); Handle<WeakFixedArray> array_with_map = @@ -5703,11 +5718,17 @@ TEST(Regress598319) { get().set(i, *tmp); } } + global_root.Reset(CcTest::isolate(), + Utils::ToLocal(Handle<Object>::cast(root))); } FixedArray get() { return FixedArray::cast(root->get(0)); } Handle<FixedArray> root; + + // Store array in global as well to make it part of the root set when + // starting incremental marking. + v8::Global<Value> global_root; } arr(isolate, kNumberOfObjects); CHECK_EQ(arr.get().length(), kNumberOfObjects); @@ -5760,7 +5781,7 @@ TEST(Regress598319) { v8::HandleScope scope(CcTest::isolate()); Handle<JSArray> js_array = isolate->factory()->NewJSArrayWithElements( Handle<FixedArray>(arr.get(), isolate)); - js_array->GetElementsAccessor()->Shift(js_array); + js_array->GetElementsAccessor()->Shift(js_array).Check(); } break; } @@ -6231,7 +6252,8 @@ TEST(UncommitUnusedLargeObjectMemory) { Handle<FixedArray> array = isolate->factory()->NewFixedArray(200000, AllocationType::kOld); MemoryChunk* chunk = MemoryChunk::FromHeapObject(*array); - CHECK(chunk->owner_identity() == LO_SPACE); + CHECK_IMPLIES(!FLAG_enable_third_party_heap, + chunk->owner_identity() == LO_SPACE); intptr_t size_before = array->Size(); size_t committed_memory_before = chunk->CommittedPhysicalMemory(); @@ -6422,6 +6444,7 @@ TEST(RememberedSet_OldToOld) { } TEST(RememberedSetRemoveRange) { + if (FLAG_single_generation) return; CcTest::InitializeVM(); v8::HandleScope scope(CcTest::isolate()); Heap* heap = CcTest::heap(); @@ -6430,7 +6453,8 @@ TEST(RememberedSetRemoveRange) { Handle<FixedArray> array = isolate->factory()->NewFixedArray( Page::kPageSize / kTaggedSize, AllocationType::kOld); MemoryChunk* chunk = MemoryChunk::FromHeapObject(*array); - CHECK(chunk->owner_identity() == LO_SPACE); + CHECK_IMPLIES(!FLAG_enable_third_party_heap, + chunk->owner_identity() == LO_SPACE); Address start = array->address(); // Maps slot to boolean indicator of whether the slot should be in the set. std::map<Address, bool> slots; @@ -6569,6 +6593,7 @@ HEAP_TEST(RegressMissingWriteBarrierInAllocate) { } HEAP_TEST(MarkCompactEpochCounter) { + if (!FLAG_incremental_marking) return; ManualGCScope manual_gc_scope; CcTest::InitializeVM(); v8::HandleScope scope(CcTest::isolate()); @@ -6612,7 +6637,7 @@ Isolate* oom_isolate = nullptr; void OOMCallback(const char* location, bool is_heap_oom) { Heap* heap = oom_isolate->heap(); - size_t kSlack = heap->new_space()->Capacity(); + size_t kSlack = heap->new_space() ? heap->new_space()->Capacity() : 0; CHECK_LE(heap->OldGenerationCapacity(), kHeapLimit + kSlack); CHECK_LE(heap->memory_allocator()->Size(), heap->MaxReserved() + kSlack); base::OS::ExitProcess(0); @@ -6775,8 +6800,10 @@ size_t NearHeapLimitCallback(void* raw_state, size_t current_heap_limit, state->oom_triggered = true; state->old_generation_capacity_at_oom = heap->OldGenerationCapacity(); state->memory_allocator_size_at_oom = heap->memory_allocator()->Size(); - state->new_space_capacity_at_oom = heap->new_space()->Capacity(); - state->new_lo_space_size_at_oom = heap->new_lo_space()->Size(); + state->new_space_capacity_at_oom = + heap->new_space() ? heap->new_space()->Capacity() : 0; + state->new_lo_space_size_at_oom = + heap->new_lo_space() ? heap->new_lo_space()->Size() : 0; state->current_heap_limit = current_heap_limit; state->initial_heap_limit = initial_heap_limit; return initial_heap_limit + 100 * MB; @@ -6935,6 +6962,7 @@ TEST(Regress8014) { } TEST(Regress8617) { + if (!FLAG_incremental_marking) return; ManualGCScope manual_gc_scope; FLAG_manual_evacuation_candidates_selection = true; LocalContext env; @@ -6977,6 +7005,7 @@ TEST(Regress8617) { } HEAP_TEST(MemoryReducerActivationForSmallHeaps) { + if (FLAG_single_generation) return; ManualGCScope manual_gc_scope; LocalContext env; Isolate* isolate = CcTest::i_isolate(); @@ -7092,8 +7121,7 @@ UNINITIALIZED_TEST(HeapLimit) { TEST(NoCodeRangeInJitlessMode) { if (!FLAG_jitless) return; CcTest::InitializeVM(); - CHECK( - CcTest::i_isolate()->heap()->memory_allocator()->code_range().is_empty()); + CHECK(CcTest::i_isolate()->heap()->code_region().is_empty()); } TEST(Regress978156) { @@ -7146,6 +7174,7 @@ TEST(GarbageCollectionWithLocalHeap) { } TEST(Regress10698) { + if (!FLAG_incremental_marking) return; CcTest::InitializeVM(); Heap* heap = CcTest::i_isolate()->heap(); Factory* factory = CcTest::i_isolate()->factory(); @@ -7187,7 +7216,7 @@ class TestAllocationTracker : public HeapObjectAllocationTracker { HEAP_TEST(CodeLargeObjectSpace) { Heap* heap = CcTest::heap(); int size_in_bytes = - MemoryChunkLayout::MaxRegularCodeObjectSize() + kTaggedSize; + Heap::MaxRegularHeapObjectSize(AllocationType::kCode) + kTaggedSize; TestAllocationTracker allocation_tracker{size_in_bytes}; heap->AddHeapObjectAllocationTracker(&allocation_tracker); @@ -7221,7 +7250,7 @@ UNINITIALIZED_HEAP_TEST(CodeLargeObjectSpace64k) { // Allocate a regular code object. { int size_in_bytes = - MemoryChunkLayout::MaxRegularCodeObjectSize() - kTaggedSize; + Heap::MaxRegularHeapObjectSize(AllocationType::kCode) - kTaggedSize; TestAllocationTracker allocation_tracker{size_in_bytes}; heap->AddHeapObjectAllocationTracker(&allocation_tracker); @@ -7243,7 +7272,7 @@ UNINITIALIZED_HEAP_TEST(CodeLargeObjectSpace64k) { // Allocate a large code object. { int size_in_bytes = - MemoryChunkLayout::MaxRegularCodeObjectSize() + kTaggedSize; + Heap::MaxRegularHeapObjectSize(AllocationType::kCode) + kTaggedSize; TestAllocationTracker allocation_tracker{size_in_bytes}; heap->AddHeapObjectAllocationTracker(&allocation_tracker); @@ -7272,7 +7301,8 @@ TEST(IsPendingAllocationNewSpace) { Factory* factory = isolate->factory(); HandleScope handle_scope(isolate); Handle<FixedArray> object = factory->NewFixedArray(5, AllocationType::kYoung); - CHECK(heap->IsPendingAllocation(*object)); + CHECK_IMPLIES(!FLAG_enable_third_party_heap, + heap->IsPendingAllocation(*object)); heap->PublishPendingAllocations(); CHECK(!heap->IsPendingAllocation(*object)); } @@ -7285,7 +7315,8 @@ TEST(IsPendingAllocationNewLOSpace) { HandleScope handle_scope(isolate); Handle<FixedArray> object = factory->NewFixedArray( FixedArray::kMaxRegularLength + 1, AllocationType::kYoung); - CHECK(heap->IsPendingAllocation(*object)); + CHECK_IMPLIES(!FLAG_enable_third_party_heap, + heap->IsPendingAllocation(*object)); heap->PublishPendingAllocations(); CHECK(!heap->IsPendingAllocation(*object)); } @@ -7297,7 +7328,8 @@ TEST(IsPendingAllocationOldSpace) { Factory* factory = isolate->factory(); HandleScope handle_scope(isolate); Handle<FixedArray> object = factory->NewFixedArray(5, AllocationType::kOld); - CHECK(heap->IsPendingAllocation(*object)); + CHECK_IMPLIES(!FLAG_enable_third_party_heap, + heap->IsPendingAllocation(*object)); heap->PublishPendingAllocations(); CHECK(!heap->IsPendingAllocation(*object)); } @@ -7310,7 +7342,8 @@ TEST(IsPendingAllocationLOSpace) { HandleScope handle_scope(isolate); Handle<FixedArray> object = factory->NewFixedArray( FixedArray::kMaxRegularLength + 1, AllocationType::kOld); - CHECK(heap->IsPendingAllocation(*object)); + CHECK_IMPLIES(!FLAG_enable_third_party_heap, + heap->IsPendingAllocation(*object)); heap->PublishPendingAllocations(); CHECK(!heap->IsPendingAllocation(*object)); } @@ -7350,6 +7383,18 @@ TEST(Regress10900) { CcTest::CollectAllAvailableGarbage(); } +namespace { +void GenerateGarbage() { + const char* source = + "let roots = [];" + "for (let i = 0; i < 100; i++) roots.push(new Array(1000).fill(0));" + "roots.push(new Array(1000000).fill(0));" + "roots;"; + CompileRun(source); +} + +} // anonymous namespace + TEST(Regress11181) { FLAG_always_compact = true; CcTest::InitializeVM(); @@ -7357,16 +7402,71 @@ TEST(Regress11181) { v8::tracing::TracingCategoryObserver::ENABLED_BY_NATIVE, std::memory_order_relaxed); v8::HandleScope scope(CcTest::isolate()); - const char* source = - "let roots = [];" - "for (let i = 0; i < 100; i++) roots.push(new Array(1000).fill(0));" - "roots.push(new Array(1000000).fill(0));" - "roots;"; - CompileRun(source); + GenerateGarbage(); CcTest::CollectAllAvailableGarbage(); TracingFlags::runtime_stats.store(0, std::memory_order_relaxed); } +TEST(LongTaskStatsFullAtomic) { + CcTest::InitializeVM(); + v8::Isolate* isolate = CcTest::isolate(); + v8::HandleScope scope(CcTest::isolate()); + GenerateGarbage(); + v8::metrics::LongTaskStats::Reset(isolate); + CHECK_EQ(0u, v8::metrics::LongTaskStats::Get(isolate) + .gc_full_atomic_wall_clock_duration_us); + for (int i = 0; i < 10; ++i) { + CcTest::CollectAllAvailableGarbage(); + } + CHECK_LT(0u, v8::metrics::LongTaskStats::Get(isolate) + .gc_full_atomic_wall_clock_duration_us); + v8::metrics::LongTaskStats::Reset(isolate); + CHECK_EQ(0u, v8::metrics::LongTaskStats::Get(isolate) + .gc_full_atomic_wall_clock_duration_us); +} + +TEST(LongTaskStatsFullIncremental) { + if (!FLAG_incremental_marking) return; + CcTest::InitializeVM(); + v8::Isolate* isolate = CcTest::isolate(); + v8::HandleScope scope(CcTest::isolate()); + GenerateGarbage(); + v8::metrics::LongTaskStats::Reset(isolate); + CHECK_EQ(0u, v8::metrics::LongTaskStats::Get(isolate) + .gc_full_incremental_wall_clock_duration_us); + for (int i = 0; i < 10; ++i) { + heap::SimulateIncrementalMarking(CcTest::heap()); + CcTest::CollectAllAvailableGarbage(); + } + CHECK_LT(0u, v8::metrics::LongTaskStats::Get(isolate) + .gc_full_incremental_wall_clock_duration_us); + v8::metrics::LongTaskStats::Reset(isolate); + CHECK_EQ(0u, v8::metrics::LongTaskStats::Get(isolate) + .gc_full_incremental_wall_clock_duration_us); +} + +TEST(LongTaskStatsYoung) { + if (FLAG_single_generation) return; + CcTest::InitializeVM(); + v8::Isolate* isolate = CcTest::isolate(); + v8::HandleScope scope(CcTest::isolate()); + GenerateGarbage(); + v8::metrics::LongTaskStats::Reset(isolate); + CHECK_EQ( + 0u, + v8::metrics::LongTaskStats::Get(isolate).gc_young_wall_clock_duration_us); + for (int i = 0; i < 10; ++i) { + CcTest::CollectGarbage(NEW_SPACE); + } + CHECK_LT( + 0u, + v8::metrics::LongTaskStats::Get(isolate).gc_young_wall_clock_duration_us); + v8::metrics::LongTaskStats::Reset(isolate); + CHECK_EQ( + 0u, + v8::metrics::LongTaskStats::Get(isolate).gc_young_wall_clock_duration_us); +} + } // namespace heap } // namespace internal } // namespace v8 diff --git a/deps/v8/test/cctest/heap/test-invalidated-slots.cc b/deps/v8/test/cctest/heap/test-invalidated-slots.cc index af4ddfddfd..c212e37589 100644 --- a/deps/v8/test/cctest/heap/test-invalidated-slots.cc +++ b/deps/v8/test/cctest/heap/test-invalidated-slots.cc @@ -199,6 +199,7 @@ Handle<FixedArray> AllocateArrayOnEvacuationCandidate(Isolate* isolate, } HEAP_TEST(InvalidatedSlotsRightTrimFixedArray) { + if (!FLAG_incremental_marking) return; FLAG_manual_evacuation_candidates_selection = true; FLAG_parallel_compaction = false; ManualGCScope manual_gc_scope; @@ -230,6 +231,7 @@ HEAP_TEST(InvalidatedSlotsRightTrimFixedArray) { } HEAP_TEST(InvalidatedSlotsRightTrimLargeFixedArray) { + if (!FLAG_incremental_marking) return; FLAG_manual_evacuation_candidates_selection = true; FLAG_parallel_compaction = false; ManualGCScope manual_gc_scope; @@ -267,6 +269,7 @@ HEAP_TEST(InvalidatedSlotsRightTrimLargeFixedArray) { } HEAP_TEST(InvalidatedSlotsLeftTrimFixedArray) { + if (!FLAG_incremental_marking) return; FLAG_manual_evacuation_candidates_selection = true; FLAG_parallel_compaction = false; ManualGCScope manual_gc_scope; @@ -298,6 +301,7 @@ HEAP_TEST(InvalidatedSlotsLeftTrimFixedArray) { } HEAP_TEST(InvalidatedSlotsFastToSlow) { + if (!FLAG_incremental_marking) return; FLAG_manual_evacuation_candidates_selection = true; FLAG_parallel_compaction = false; ManualGCScope manual_gc_scope; diff --git a/deps/v8/test/cctest/heap/test-iterators.cc b/deps/v8/test/cctest/heap/test-iterators.cc index 2e3f9aebbf..853cf705bd 100644 --- a/deps/v8/test/cctest/heap/test-iterators.cc +++ b/deps/v8/test/cctest/heap/test-iterators.cc @@ -75,7 +75,7 @@ TEST(HeapObjectIterator) { for (HeapObject obj = iterator.Next(); !obj.is_null(); obj = iterator.Next()) { - CHECK(!ReadOnlyHeap::Contains(obj)); + CHECK_IMPLIES(!FLAG_enable_third_party_heap, !ReadOnlyHeap::Contains(obj)); CHECK(CcTest::heap()->Contains(obj)); if (sample_object == obj) seen_sample_object = true; } diff --git a/deps/v8/test/cctest/heap/test-mark-compact.cc b/deps/v8/test/cctest/heap/test-mark-compact.cc index dc1771ce75..6183ae3218 100644 --- a/deps/v8/test/cctest/heap/test-mark-compact.cc +++ b/deps/v8/test/cctest/heap/test-mark-compact.cc @@ -427,6 +427,7 @@ UNINITIALIZED_TEST(RegressJoinThreadsOnIsolateDeinit) { } TEST(Regress5829) { + if (!FLAG_incremental_marking) return; FLAG_stress_concurrent_allocation = false; // For SealCurrentObjects. CcTest::InitializeVM(); Isolate* isolate = CcTest::i_isolate(); diff --git a/deps/v8/test/cctest/heap/test-memory-measurement.cc b/deps/v8/test/cctest/heap/test-memory-measurement.cc index d5b03bbfa2..e4e8a60e5b 100644 --- a/deps/v8/test/cctest/heap/test-memory-measurement.cc +++ b/deps/v8/test/cctest/heap/test-memory-measurement.cc @@ -57,8 +57,6 @@ TEST(NativeContextInferrerJSObject) { Handle<HeapObject> function = Handle<HeapObject>::cast(object); NativeContextInferrer inferrer; Address inferred_context = 0; - // TODO(ulan): Enable this test once we have more precise native - // context inference. CHECK(inferrer.Infer(isolate, function->map(), *function, &inferred_context)); CHECK_EQ(native_context->ptr(), inferred_context); } diff --git a/deps/v8/test/cctest/heap/test-shared-heap.cc b/deps/v8/test/cctest/heap/test-shared-heap.cc new file mode 100644 index 0000000000..95d2e0b957 --- /dev/null +++ b/deps/v8/test/cctest/heap/test-shared-heap.cc @@ -0,0 +1,91 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "include/v8.h" +#include "src/common/globals.h" +#include "src/handles/handles-inl.h" +#include "src/heap/heap.h" +#include "src/objects/heap-object.h" +#include "test/cctest/cctest.h" + +namespace v8 { +namespace internal { + +namespace { +const int kNumIterations = 2000; + +class SharedSpaceAllocationThread final : public v8::base::Thread { + public: + explicit SharedSpaceAllocationThread(Isolate* shared) + : v8::base::Thread(base::Thread::Options("SharedSpaceAllocationThread")), + shared_(shared) {} + + void Run() override { + v8::Isolate::CreateParams create_params; + allocator_.reset(v8::ArrayBuffer::Allocator::NewDefaultAllocator()); + create_params.array_buffer_allocator = allocator_.get(); + v8::Isolate* client_isolate = v8::Isolate::New(create_params); + Isolate* i_client_isolate = reinterpret_cast<Isolate*>(client_isolate); + i_client_isolate->AttachToSharedIsolate(shared_); + + { + HandleScope scope(i_client_isolate); + + for (int i = 0; i < kNumIterations; i++) { + i_client_isolate->factory()->NewFixedArray(10, + AllocationType::kSharedOld); + } + + CcTest::CollectGarbage(OLD_SPACE, i_client_isolate); + + v8::platform::PumpMessageLoop(i::V8::GetCurrentPlatform(), + client_isolate); + } + + client_isolate->Dispose(); + } + + Isolate* shared_; + std::unique_ptr<v8::ArrayBuffer::Allocator> allocator_; +}; +} // namespace + +UNINITIALIZED_TEST(ConcurrentAllocationInSharedOldSpace) { + std::unique_ptr<v8::ArrayBuffer::Allocator> allocator( + v8::ArrayBuffer::Allocator::NewDefaultAllocator()); + + v8::Isolate::CreateParams create_params; + create_params.array_buffer_allocator = allocator.get(); + Isolate* shared_isolate = Isolate::NewShared(create_params); + + std::vector<std::unique_ptr<SharedSpaceAllocationThread>> threads; + const int kThreads = 4; + + for (int i = 0; i < kThreads; i++) { + auto thread = std::make_unique<SharedSpaceAllocationThread>(shared_isolate); + CHECK(thread->Start()); + threads.push_back(std::move(thread)); + } + + for (auto& thread : threads) { + thread->Join(); + } + + Isolate::Delete(shared_isolate); +} + +UNINITIALIZED_TEST(SharedCollection) { + std::unique_ptr<v8::ArrayBuffer::Allocator> allocator( + v8::ArrayBuffer::Allocator::NewDefaultAllocator()); + + v8::Isolate::CreateParams create_params; + create_params.array_buffer_allocator = allocator.get(); + Isolate* shared_isolate = Isolate::NewShared(create_params); + + CcTest::CollectGarbage(OLD_SPACE, shared_isolate); + Isolate::Delete(shared_isolate); +} + +} // namespace internal +} // namespace v8 diff --git a/deps/v8/test/cctest/heap/test-spaces.cc b/deps/v8/test/cctest/heap/test-spaces.cc index 5326c53644..613835d222 100644 --- a/deps/v8/test/cctest/heap/test-spaces.cc +++ b/deps/v8/test/cctest/heap/test-spaces.cc @@ -53,15 +53,16 @@ namespace heap { class V8_NODISCARD TestMemoryAllocatorScope { public: TestMemoryAllocatorScope(Isolate* isolate, size_t max_capacity, - size_t code_range_size, PageAllocator* page_allocator = nullptr) : isolate_(isolate), old_allocator_(std::move(isolate->heap()->memory_allocator_)) { // Save the code pages for restoring them later on because the constructor // of MemoryAllocator will change them. isolate->GetCodePages()->swap(code_pages_); - isolate->heap()->memory_allocator_.reset( - new MemoryAllocator(isolate, max_capacity, code_range_size)); + isolate->heap()->memory_allocator_.reset(new MemoryAllocator( + isolate, + page_allocator != nullptr ? page_allocator : isolate->page_allocator(), + max_capacity)); if (page_allocator != nullptr) { isolate->heap()->memory_allocator_->data_page_allocator_ = page_allocator; } @@ -113,8 +114,7 @@ static void VerifyMemoryChunk(Isolate* isolate, Heap* heap, v8::PageAllocator* code_page_allocator, size_t reserve_area_size, size_t commit_area_size, Executability executable, Space* space) { - TestMemoryAllocatorScope test_allocator_scope(isolate, heap->MaxReserved(), - 0); + TestMemoryAllocatorScope test_allocator_scope(isolate, heap->MaxReserved()); MemoryAllocator* memory_allocator = test_allocator_scope.allocator(); TestCodePageAllocatorScope test_code_page_allocator_scope( isolate, code_page_allocator); @@ -190,8 +190,7 @@ TEST(MemoryAllocator) { Isolate* isolate = CcTest::i_isolate(); Heap* heap = isolate->heap(); - TestMemoryAllocatorScope test_allocator_scope(isolate, heap->MaxReserved(), - 0); + TestMemoryAllocatorScope test_allocator_scope(isolate, heap->MaxReserved()); MemoryAllocator* memory_allocator = test_allocator_scope.allocator(); int total_pages = 0; @@ -269,10 +268,10 @@ TEST(ComputeDiscardMemoryAreas) { } TEST(NewSpace) { + if (FLAG_single_generation) return; Isolate* isolate = CcTest::i_isolate(); Heap* heap = isolate->heap(); - TestMemoryAllocatorScope test_allocator_scope(isolate, heap->MaxReserved(), - 0); + TestMemoryAllocatorScope test_allocator_scope(isolate, heap->MaxReserved()); MemoryAllocator* memory_allocator = test_allocator_scope.allocator(); NewSpace new_space(heap, memory_allocator->data_page_allocator(), @@ -295,8 +294,7 @@ TEST(NewSpace) { TEST(OldSpace) { Isolate* isolate = CcTest::i_isolate(); Heap* heap = isolate->heap(); - TestMemoryAllocatorScope test_allocator_scope(isolate, heap->MaxReserved(), - 0); + TestMemoryAllocatorScope test_allocator_scope(isolate, heap->MaxReserved()); OldSpace* s = new OldSpace(heap); CHECK_NOT_NULL(s); @@ -516,6 +514,7 @@ void testAllocationObserver(Isolate* i_isolate, T* space) { } UNINITIALIZED_TEST(AllocationObserver) { + if (FLAG_single_generation) return; v8::Isolate::CreateParams create_params; create_params.array_buffer_allocator = CcTest::array_buffer_allocator(); v8::Isolate* isolate = v8::Isolate::New(create_params); @@ -538,6 +537,7 @@ UNINITIALIZED_TEST(AllocationObserver) { } UNINITIALIZED_TEST(InlineAllocationObserverCadence) { + if (FLAG_single_generation) return; v8::Isolate::CreateParams create_params; create_params.array_buffer_allocator = CcTest::array_buffer_allocator(); v8::Isolate* isolate = v8::Isolate::New(create_params); @@ -617,6 +617,7 @@ HEAP_TEST(Regress777177) { } HEAP_TEST(Regress791582) { + if (FLAG_single_generation) return; CcTest::InitializeVM(); Isolate* isolate = CcTest::i_isolate(); Heap* heap = isolate->heap(); @@ -793,8 +794,7 @@ TEST(NoMemoryForNewPage) { // Memory allocator that will fail to allocate any pages. FailingPageAllocator failing_allocator; - TestMemoryAllocatorScope test_allocator_scope(isolate, 0, 0, - &failing_allocator); + TestMemoryAllocatorScope test_allocator_scope(isolate, 0, &failing_allocator); MemoryAllocator* memory_allocator = test_allocator_scope.allocator(); OldSpace faked_space(heap); Page* page = memory_allocator->AllocatePage( diff --git a/deps/v8/test/cctest/heap/test-weak-references.cc b/deps/v8/test/cctest/heap/test-weak-references.cc index b7f6d680dc..ab59c8fd40 100644 --- a/deps/v8/test/cctest/heap/test-weak-references.cc +++ b/deps/v8/test/cctest/heap/test-weak-references.cc @@ -70,6 +70,7 @@ TEST(WeakReferencesBasic) { } TEST(WeakReferencesOldToOld) { + if (FLAG_enable_third_party_heap) return; // Like WeakReferencesBasic, but the updated weak slot is in the old space, // and referring to an old space object. ManualGCScope manual_gc_scope; @@ -313,6 +314,8 @@ TEST(WeakReferenceWriteBarrier) { Handle<LoadHandler> lh = CreateLoadHandlerForTest(factory); CHECK(InCorrectGeneration(*lh)); + v8::Global<Value> global_lh(CcTest::isolate(), Utils::ToLocal(lh)); + { HandleScope inner_scope(isolate); @@ -348,6 +351,8 @@ TEST(EmptyWeakArray) { } TEST(WeakArraysBasic) { + if (FLAG_single_generation) return; + ManualGCScope manual_gc_scope; CcTest::InitializeVM(); Isolate* isolate = CcTest::i_isolate(); @@ -361,7 +366,7 @@ TEST(WeakArraysBasic) { CHECK(!array->IsFixedArray()); CHECK_EQ(array->length(), length); - if (!FLAG_single_generation) CHECK(Heap::InYoungGeneration(*array)); + CHECK(Heap::InYoungGeneration(*array)); for (int i = 0; i < length; ++i) { HeapObject heap_object; @@ -417,6 +422,8 @@ TEST(WeakArraysBasic) { } TEST(WeakArrayListBasic) { + if (FLAG_single_generation) return; + ManualGCScope manual_gc_scope; CcTest::InitializeVM(); Isolate* isolate = CcTest::i_isolate(); diff --git a/deps/v8/test/cctest/heap/test-write-barrier.cc b/deps/v8/test/cctest/heap/test-write-barrier.cc index 9ed3eb668e..3027fe860d 100644 --- a/deps/v8/test/cctest/heap/test-write-barrier.cc +++ b/deps/v8/test/cctest/heap/test-write-barrier.cc @@ -16,6 +16,7 @@ namespace internal { namespace heap { HEAP_TEST(WriteBarrier_Marking) { + if (!FLAG_incremental_marking) return; ManualGCScope manual_gc_scope; CcTest::InitializeVM(); Isolate* isolate = CcTest::i_isolate(); @@ -23,6 +24,7 @@ HEAP_TEST(WriteBarrier_Marking) { MarkCompactCollector* collector = isolate->heap()->mark_compact_collector(); HandleScope outer(isolate); Handle<FixedArray> objects = factory->NewFixedArray(3); + v8::Global<Value> global_objects(CcTest::isolate(), Utils::ToLocal(objects)); { // Make sure that these objects are not immediately reachable from // the roots to prevent them being marked grey at the start of marking. @@ -55,6 +57,7 @@ HEAP_TEST(WriteBarrier_Marking) { } HEAP_TEST(WriteBarrier_MarkingExtension) { + if (!FLAG_incremental_marking) return; ManualGCScope manual_gc_scope; CcTest::InitializeVM(); Isolate* isolate = CcTest::i_isolate(); @@ -75,7 +78,11 @@ HEAP_TEST(WriteBarrier_MarkingExtension) { CHECK(collector->marking_state()->IsWhite(host)); CHECK(!extension->IsMarked()); WriteBarrier::Marking(host, extension); + // Concurrent marking barrier should mark this object. CHECK_EQ(V8_CONCURRENT_MARKING_BOOL, extension->IsMarked()); + // Keep object alive using the global handle. + v8::Global<ArrayBuffer> global_host(CcTest::isolate(), + Utils::ToLocal(handle(host, isolate))); heap::SimulateIncrementalMarking(CcTest::heap(), true); CHECK(collector->marking_state()->IsBlack(host)); CHECK(extension->IsMarked()); diff --git a/deps/v8/test/cctest/interpreter/bytecode_expectations/PrivateAccessorAccess.golden b/deps/v8/test/cctest/interpreter/bytecode_expectations/PrivateAccessorAccess.golden index e3dacbb196..dac17a4252 100644 --- a/deps/v8/test/cctest/interpreter/bytecode_expectations/PrivateAccessorAccess.golden +++ b/deps/v8/test/cctest/interpreter/bytecode_expectations/PrivateAccessorAccess.golden @@ -83,7 +83,7 @@ bytecodes: [ B(Mov), R(this), R(0), B(Mov), R(context), R(2), /* 48 E> */ B(CallRuntime), U16(Runtime::kAddPrivateBrand), R(0), U8(3), - /* 53 S> */ B(Wide), B(LdaSmi), I16(276), + /* 53 S> */ B(Wide), B(LdaSmi), I16(279), B(Star3), B(LdaConstant), U8(0), B(Star4), @@ -114,7 +114,7 @@ bytecodes: [ B(Mov), R(this), R(0), B(Mov), R(context), R(2), /* 41 E> */ B(CallRuntime), U16(Runtime::kAddPrivateBrand), R(0), U8(3), - /* 46 S> */ B(Wide), B(LdaSmi), I16(275), + /* 46 S> */ B(Wide), B(LdaSmi), I16(278), B(Star3), B(LdaConstant), U8(0), B(Star4), @@ -145,7 +145,7 @@ bytecodes: [ B(Mov), R(this), R(0), B(Mov), R(context), R(2), /* 48 E> */ B(CallRuntime), U16(Runtime::kAddPrivateBrand), R(0), U8(3), - /* 53 S> */ B(Wide), B(LdaSmi), I16(276), + /* 53 S> */ B(Wide), B(LdaSmi), I16(279), B(Star3), B(LdaConstant), U8(0), B(Star4), @@ -176,7 +176,7 @@ bytecodes: [ B(Mov), R(this), R(0), B(Mov), R(context), R(2), /* 41 E> */ B(CallRuntime), U16(Runtime::kAddPrivateBrand), R(0), U8(3), - /* 46 S> */ B(Wide), B(LdaSmi), I16(275), + /* 46 S> */ B(Wide), B(LdaSmi), I16(278), B(Star4), B(LdaConstant), U8(0), B(Star5), diff --git a/deps/v8/test/cctest/interpreter/bytecode_expectations/PrivateMethodAccess.golden b/deps/v8/test/cctest/interpreter/bytecode_expectations/PrivateMethodAccess.golden index 2270e27b02..424bc6c8e4 100644 --- a/deps/v8/test/cctest/interpreter/bytecode_expectations/PrivateMethodAccess.golden +++ b/deps/v8/test/cctest/interpreter/bytecode_expectations/PrivateMethodAccess.golden @@ -56,7 +56,7 @@ bytecodes: [ B(Mov), R(this), R(0), B(Mov), R(context), R(2), /* 44 E> */ B(CallRuntime), U16(Runtime::kAddPrivateBrand), R(0), U8(3), - /* 49 S> */ B(Wide), B(LdaSmi), I16(274), + /* 49 S> */ B(Wide), B(LdaSmi), I16(277), B(Star3), B(LdaConstant), U8(0), B(Star4), @@ -88,7 +88,7 @@ bytecodes: [ B(Mov), R(this), R(0), B(Mov), R(context), R(2), /* 44 E> */ B(CallRuntime), U16(Runtime::kAddPrivateBrand), R(0), U8(3), - /* 49 S> */ B(Wide), B(LdaSmi), I16(274), + /* 49 S> */ B(Wide), B(LdaSmi), I16(277), B(Star3), B(LdaConstant), U8(0), B(Star4), diff --git a/deps/v8/test/cctest/interpreter/bytecode_expectations/StaticPrivateMethodAccess.golden b/deps/v8/test/cctest/interpreter/bytecode_expectations/StaticPrivateMethodAccess.golden index 45209d642c..72a5e3d9f6 100644 --- a/deps/v8/test/cctest/interpreter/bytecode_expectations/StaticPrivateMethodAccess.golden +++ b/deps/v8/test/cctest/interpreter/bytecode_expectations/StaticPrivateMethodAccess.golden @@ -24,7 +24,7 @@ bytecodes: [ B(TestReferenceEqual), R(this), B(Mov), R(this), R(1), B(JumpIfTrue), U8(16), - B(Wide), B(LdaSmi), I16(272), + B(Wide), B(LdaSmi), I16(275), B(Star2), B(LdaConstant), U8(0), B(Star3), @@ -55,7 +55,7 @@ frame size: 2 parameter count: 1 bytecode array length: 14 bytecodes: [ - /* 56 S> */ B(Wide), B(LdaSmi), I16(274), + /* 56 S> */ B(Wide), B(LdaSmi), I16(277), B(Star0), B(LdaConstant), U8(0), B(Star1), @@ -82,7 +82,7 @@ frame size: 2 parameter count: 1 bytecode array length: 14 bytecodes: [ - /* 56 S> */ B(Wide), B(LdaSmi), I16(274), + /* 56 S> */ B(Wide), B(LdaSmi), I16(277), B(Star0), B(LdaConstant), U8(0), B(Star1), @@ -118,14 +118,14 @@ bytecodes: [ /* 90 S> */ B(LdaImmutableCurrentContextSlot), U8(2), B(Star1), B(LdaCurrentContextSlot), U8(3), - /* 94 E> */ B(TestReferenceEqual), R(this), + B(TestReferenceEqual), R(this), B(Mov), R(this), R(0), B(JumpIfTrue), U8(16), - B(Wide), B(LdaSmi), I16(272), + B(Wide), B(LdaSmi), I16(275), B(Star2), B(LdaConstant), U8(0), B(Star3), - B(CallRuntime), U16(Runtime::kNewTypeError), R(2), U8(2), + /* 94 E> */ B(CallRuntime), U16(Runtime::kNewTypeError), R(2), U8(2), B(Throw), B(CallRuntime), U16(Runtime::kLoadPrivateGetter), R(1), U8(1), B(Star2), @@ -140,14 +140,14 @@ bytecodes: [ B(LdaImmutableCurrentContextSlot), U8(2), B(Star2), B(LdaCurrentContextSlot), U8(3), - /* 109 E> */ B(TestReferenceEqual), R(this), + B(TestReferenceEqual), R(this), B(Mov), R(this), R(1), B(JumpIfTrue), U8(16), - B(Wide), B(LdaSmi), I16(273), + B(Wide), B(LdaSmi), I16(276), B(Star3), B(LdaConstant), U8(0), B(Star4), - B(CallRuntime), U16(Runtime::kNewTypeError), R(3), U8(2), + /* 109 E> */ B(CallRuntime), U16(Runtime::kNewTypeError), R(3), U8(2), B(Throw), B(CallRuntime), U16(Runtime::kLoadPrivateSetter), R(2), U8(1), B(Star3), @@ -155,14 +155,14 @@ bytecodes: [ /* 122 S> */ B(LdaImmutableCurrentContextSlot), U8(2), B(Star1), B(LdaCurrentContextSlot), U8(3), - /* 133 E> */ B(TestReferenceEqual), R(this), + B(TestReferenceEqual), R(this), B(Mov), R(this), R(0), B(JumpIfTrue), U8(16), - B(Wide), B(LdaSmi), I16(272), + B(Wide), B(LdaSmi), I16(275), B(Star2), B(LdaConstant), U8(0), B(Star3), - B(CallRuntime), U16(Runtime::kNewTypeError), R(2), U8(2), + /* 133 E> */ B(CallRuntime), U16(Runtime::kNewTypeError), R(2), U8(2), B(Throw), B(CallRuntime), U16(Runtime::kLoadPrivateGetter), R(1), U8(1), B(Star2), @@ -188,7 +188,7 @@ frame size: 2 parameter count: 1 bytecode array length: 14 bytecodes: [ - /* 60 S> */ B(Wide), B(LdaSmi), I16(276), + /* 60 S> */ B(Wide), B(LdaSmi), I16(279), B(Star0), B(LdaConstant), U8(0), B(Star1), @@ -214,7 +214,7 @@ frame size: 2 parameter count: 1 bytecode array length: 14 bytecodes: [ - /* 53 S> */ B(Wide), B(LdaSmi), I16(275), + /* 53 S> */ B(Wide), B(LdaSmi), I16(278), B(Star0), B(LdaConstant), U8(0), B(Star1), @@ -240,7 +240,7 @@ frame size: 2 parameter count: 1 bytecode array length: 14 bytecodes: [ - /* 60 S> */ B(Wide), B(LdaSmi), I16(276), + /* 60 S> */ B(Wide), B(LdaSmi), I16(279), B(Star0), B(LdaConstant), U8(0), B(Star1), @@ -266,7 +266,7 @@ frame size: 3 parameter count: 1 bytecode array length: 14 bytecodes: [ - /* 46 S> */ B(Wide), B(LdaSmi), I16(275), + /* 46 S> */ B(Wide), B(LdaSmi), I16(278), B(Star1), B(LdaConstant), U8(0), B(Star2), diff --git a/deps/v8/test/cctest/test-allocation.cc b/deps/v8/test/cctest/test-allocation.cc index d8086b2c7a..2078aeb02a 100644 --- a/deps/v8/test/cctest/test-allocation.cc +++ b/deps/v8/test/cctest/test-allocation.cc @@ -7,7 +7,7 @@ #if V8_OS_POSIX #include <setjmp.h> #include <signal.h> -#include <unistd.h> // NOLINT +#include <unistd.h> #endif #include "src/init/v8.h" diff --git a/deps/v8/test/cctest/test-api-accessors.cc b/deps/v8/test/cctest/test-api-accessors.cc index 0c65902ced..353a9a5618 100644 --- a/deps/v8/test/cctest/test-api-accessors.cc +++ b/deps/v8/test/cctest/test-api-accessors.cc @@ -2,11 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "test/cctest/cctest.h" - #include "include/v8.h" -#include "src/api/api.h" +#include "src/api/api-inl.h" +#include "src/debug/debug.h" +#include "src/execution/isolate.h" #include "src/objects/objects-inl.h" +#include "test/cctest/cctest.h" namespace i = v8::internal; @@ -250,6 +251,8 @@ static void Setter(v8::Local<v8::Name> name, v8::Local<v8::Value> value, const v8::PropertyCallbackInfo<void>& info) { set_accessor_call_count++; } + +static void EmptyCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {} } // namespace // Re-declaration of non-configurable accessors should throw. @@ -276,6 +279,175 @@ TEST(RedeclareAccessor) { CHECK(try_catch.HasCaught()); } +class NoopDelegate : public v8::debug::DebugDelegate {}; + +static void CheckSideEffectFreeAccesses(v8::Isolate* isolate, + v8::Local<v8::String> call_getter, + v8::Local<v8::String> call_setter) { + const int kIterationsCountForICProgression = 20; + v8::Local<v8::Context> context = isolate->GetCurrentContext(); + + i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); + NoopDelegate delegate; + i_isolate->debug()->SetDebugDelegate(&delegate); + v8::Local<v8::Script> func = v8_compile(call_getter); + // Check getter. Run enough number of times to ensure IC creates data handler. + for (int i = 0; i < kIterationsCountForICProgression; i++) { + v8::TryCatch try_catch(isolate); + CHECK(EvaluateGlobalForTesting( + isolate, func, + v8::debug::EvaluateGlobalMode::kDisableBreaksAndThrowOnSideEffect, + true) + .IsEmpty()); + + CHECK(try_catch.HasCaught()); + + // Ensure that IC state progresses. + CHECK(!func->Run(context).IsEmpty()); + } + + func = v8_compile(call_setter); + // Check setter. Run enough number of times to ensure IC creates data handler. + for (int i = 0; i < kIterationsCountForICProgression; i++) { + v8::TryCatch try_catch(isolate); + CHECK(EvaluateGlobalForTesting( + isolate, func, + v8::debug::EvaluateGlobalMode::kDisableBreaksAndThrowOnSideEffect, + true) + .IsEmpty()); + + CHECK(try_catch.HasCaught()); + + // Ensure that IC state progresses. + CHECK(!func->Run(context).IsEmpty()); + } +} + +TEST(AccessorsWithSideEffects) { + LocalContext env; + v8::Isolate* isolate = env->GetIsolate(); + v8::HandleScope scope(isolate); + v8::Local<v8::Context> context = isolate->GetCurrentContext(); + + i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); + NoopDelegate delegate; + i_isolate->debug()->SetDebugDelegate(&delegate); + + v8::Local<v8::ObjectTemplate> templ = v8::ObjectTemplate::New(isolate); + v8::Local<v8::Object> obj = templ->NewInstance(env.local()).ToLocalChecked(); + CHECK(env->Global()->Set(env.local(), v8_str("obj"), obj).FromJust()); + + v8::Local<v8::FunctionTemplate> templ_with_sideffect = + v8::FunctionTemplate::New(isolate, EmptyCallback, v8::Local<v8::Value>(), + v8::Local<v8::Signature>(), 0, + v8::ConstructorBehavior::kAllow, + v8::SideEffectType::kHasSideEffect); + v8::Local<v8::FunctionTemplate> templ_no_sideffect = + v8::FunctionTemplate::New(isolate, EmptyCallback, v8::Local<v8::Value>(), + v8::Local<v8::Signature>(), 0, + v8::ConstructorBehavior::kAllow, + v8::SideEffectType::kHasNoSideEffect); + + // Install non-native properties with side effects + obj->SetAccessorProperty( + v8_str("get"), + templ_with_sideffect->GetFunction(context).ToLocalChecked(), {}, + v8::PropertyAttribute::None, v8::AccessControl::DEFAULT); + + obj->SetAccessorProperty( + v8_str("set"), templ_no_sideffect->GetFunction(context).ToLocalChecked(), + templ_with_sideffect->GetFunction(context).ToLocalChecked(), + v8::PropertyAttribute::None, v8::AccessControl::DEFAULT); + + CheckSideEffectFreeAccesses(isolate, v8_str("obj.get"), + v8_str("obj.set = 123;")); +} + +TEST(TemplateAccessorsWithSideEffects) { + LocalContext env; + v8::Isolate* isolate = env->GetIsolate(); + v8::HandleScope scope(isolate); + + i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); + NoopDelegate delegate; + i_isolate->debug()->SetDebugDelegate(&delegate); + + v8::Local<v8::FunctionTemplate> templ_with_sideffect = + v8::FunctionTemplate::New(isolate, EmptyCallback, v8::Local<v8::Value>(), + v8::Local<v8::Signature>(), 0, + v8::ConstructorBehavior::kAllow, + v8::SideEffectType::kHasSideEffect); + v8::Local<v8::FunctionTemplate> templ_no_sideffect = + v8::FunctionTemplate::New(isolate, EmptyCallback, v8::Local<v8::Value>(), + v8::Local<v8::Signature>(), 0, + v8::ConstructorBehavior::kAllow, + v8::SideEffectType::kHasNoSideEffect); + + v8::Local<v8::ObjectTemplate> templ = v8::ObjectTemplate::New(isolate); + templ->SetAccessorProperty(v8_str("get"), templ_with_sideffect); + templ->SetAccessorProperty(v8_str("set"), templ_no_sideffect, + templ_with_sideffect); + v8::Local<v8::Object> obj = templ->NewInstance(env.local()).ToLocalChecked(); + CHECK(env->Global()->Set(env.local(), v8_str("obj"), obj).FromJust()); + + CheckSideEffectFreeAccesses(isolate, v8_str("obj.get"), + v8_str("obj.set = 123;")); +} + +TEST(NativeTemplateAccessorWithSideEffects) { + LocalContext env; + v8::Isolate* isolate = env->GetIsolate(); + v8::HandleScope scope(isolate); + + i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); + NoopDelegate delegate; + i_isolate->debug()->SetDebugDelegate(&delegate); + + v8::Local<v8::ObjectTemplate> templ = v8::ObjectTemplate::New(isolate); + templ->SetAccessor(v8_str("get"), Getter, nullptr, v8::Local<v8::Value>(), + v8::AccessControl::DEFAULT, v8::PropertyAttribute::None, + v8::Local<v8::AccessorSignature>(), + v8::SideEffectType::kHasSideEffect); + templ->SetAccessor(v8_str("set"), Getter, Setter, v8::Local<v8::Value>(), + v8::AccessControl::DEFAULT, v8::PropertyAttribute::None, + v8::Local<v8::AccessorSignature>(), + v8::SideEffectType::kHasNoSideEffect, + v8::SideEffectType::kHasSideEffect); + + v8::Local<v8::Object> obj = templ->NewInstance(env.local()).ToLocalChecked(); + CHECK(env->Global()->Set(env.local(), v8_str("obj"), obj).FromJust()); + + CheckSideEffectFreeAccesses(isolate, v8_str("obj.get"), + v8_str("obj.set = 123;")); +} + +TEST(NativeAccessorsWithSideEffects) { + LocalContext env; + v8::Isolate* isolate = env->GetIsolate(); + v8::HandleScope scope(isolate); + v8::Local<v8::Context> context = isolate->GetCurrentContext(); + + v8::Local<v8::ObjectTemplate> templ = v8::ObjectTemplate::New(isolate); + v8::Local<v8::Object> obj = templ->NewInstance(env.local()).ToLocalChecked(); + CHECK(env->Global()->Set(env.local(), v8_str("obj"), obj).FromJust()); + + // Install native data property with side effects. + obj->SetAccessor(context, v8_str("get"), Getter, nullptr, + v8::MaybeLocal<v8::Value>(), v8::AccessControl::DEFAULT, + v8::PropertyAttribute::None, + v8::SideEffectType::kHasSideEffect) + .ToChecked(); + obj->SetAccessor(context, v8_str("set"), Getter, Setter, + v8::MaybeLocal<v8::Value>(), v8::AccessControl::DEFAULT, + v8::PropertyAttribute::None, + v8::SideEffectType::kHasNoSideEffect, + v8::SideEffectType::kHasSideEffect) + .ToChecked(); + + CheckSideEffectFreeAccesses(isolate, v8_str("obj.get"), + v8_str("obj.set = 123;")); +} + // Accessors can be allowlisted as side-effect-free via SetAccessor. TEST(AccessorSetHasNoSideEffect) { LocalContext env; @@ -283,6 +455,10 @@ TEST(AccessorSetHasNoSideEffect) { v8::HandleScope scope(isolate); v8::Local<v8::Context> context = isolate->GetCurrentContext(); + i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); + NoopDelegate delegate; + i_isolate->debug()->SetDebugDelegate(&delegate); + v8::Local<v8::ObjectTemplate> templ = v8::ObjectTemplate::New(isolate); v8::Local<v8::Object> obj = templ->NewInstance(env.local()).ToLocalChecked(); CHECK(env->Global()->Set(env.local(), v8_str("obj"), obj).FromJust()); @@ -323,6 +499,10 @@ TEST(SetAccessorSetSideEffectReceiverCheck1) { v8::Isolate* isolate = env->GetIsolate(); v8::HandleScope scope(isolate); + i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); + NoopDelegate delegate; + i_isolate->debug()->SetDebugDelegate(&delegate); + v8::Local<v8::ObjectTemplate> templ = v8::ObjectTemplate::New(isolate); v8::Local<v8::Object> obj = templ->NewInstance(env.local()).ToLocalChecked(); CHECK(env->Global()->Set(env.local(), v8_str("obj"), obj).FromJust()); @@ -356,6 +536,10 @@ TEST(SetAccessorSetSideEffectReceiverCheck2) { v8::HandleScope scope(isolate); i::FLAG_enable_one_shot_optimization = false; + i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); + NoopDelegate delegate; + i_isolate->debug()->SetDebugDelegate(&delegate); + v8::Local<v8::FunctionTemplate> templ = v8::FunctionTemplate::New( isolate, ConstructCallback, v8::Local<v8::Value>(), v8::Local<v8::Signature>(), 0, v8::ConstructorBehavior::kAllow, @@ -390,6 +574,10 @@ TEST(AccessorSetNativeDataPropertyHasNoSideEffect) { v8::HandleScope scope(isolate); v8::Local<v8::Context> context = isolate->GetCurrentContext(); + i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); + NoopDelegate delegate; + i_isolate->debug()->SetDebugDelegate(&delegate); + v8::Local<v8::ObjectTemplate> templ = v8::ObjectTemplate::New(isolate); v8::Local<v8::Object> obj = templ->NewInstance(env.local()).ToLocalChecked(); CHECK(env->Global()->Set(env.local(), v8_str("obj"), obj).FromJust()); @@ -429,6 +617,10 @@ TEST(AccessorSetLazyDataPropertyHasNoSideEffect) { v8::HandleScope scope(isolate); v8::Local<v8::Context> context = isolate->GetCurrentContext(); + i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); + NoopDelegate delegate; + i_isolate->debug()->SetDebugDelegate(&delegate); + v8::Local<v8::ObjectTemplate> templ = v8::ObjectTemplate::New(isolate); v8::Local<v8::Object> obj = templ->NewInstance(env.local()).ToLocalChecked(); CHECK(env->Global()->Set(env.local(), v8_str("obj"), obj).FromJust()); @@ -466,6 +658,10 @@ TEST(ObjectTemplateSetAccessorHasNoSideEffect) { v8::Isolate* isolate = env->GetIsolate(); v8::HandleScope scope(isolate); + i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); + NoopDelegate delegate; + i_isolate->debug()->SetDebugDelegate(&delegate); + v8::Local<v8::ObjectTemplate> templ = v8::ObjectTemplate::New(isolate); templ->SetAccessor(v8_str("foo"), StringGetter); templ->SetAccessor( @@ -503,6 +699,10 @@ TEST(ObjectTemplateSetNativePropertyHasNoSideEffect) { v8::Isolate* isolate = env->GetIsolate(); v8::HandleScope scope(isolate); + i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); + NoopDelegate delegate; + i_isolate->debug()->SetDebugDelegate(&delegate); + v8::Local<v8::ObjectTemplate> templ = v8::ObjectTemplate::New(isolate); templ->SetNativeDataProperty(v8_str("foo"), Getter); templ->SetNativeDataProperty( @@ -540,6 +740,10 @@ TEST(ObjectTemplateSetLazyPropertyHasNoSideEffect) { v8::Isolate* isolate = env->GetIsolate(); v8::HandleScope scope(isolate); + i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); + NoopDelegate delegate; + i_isolate->debug()->SetDebugDelegate(&delegate); + v8::Local<v8::ObjectTemplate> templ = v8::ObjectTemplate::New(isolate); templ->SetLazyDataProperty(v8_str("foo"), Getter); templ->SetLazyDataProperty(v8_str("foo2"), Getter, v8::Local<v8::Value>(), diff --git a/deps/v8/test/cctest/test-api-icu.cc b/deps/v8/test/cctest/test-api-icu.cc index 8527ee72d3..c5e617fdd2 100644 --- a/deps/v8/test/cctest/test-api-icu.cc +++ b/deps/v8/test/cctest/test-api-icu.cc @@ -47,7 +47,7 @@ TEST(LocaleConfigurationChangeNotification) { SetIcuLocale("zh_CN"); isolate->LocaleConfigurationChangeNotification(); - CheckLocaleSpecificValues("zh-CN", "2020/2/14下午1:45:00", "10,000.3"); + CheckLocaleSpecificValues("zh-CN", "2020/2/14 下午1:45:00", "10,000.3"); UErrorCode error_code = U_ZERO_ERROR; icu::Locale::setDefault(default_locale, error_code); diff --git a/deps/v8/test/cctest/test-api-interceptors.cc b/deps/v8/test/cctest/test-api-interceptors.cc index 305840f29b..768d7f34fc 100644 --- a/deps/v8/test/cctest/test-api-interceptors.cc +++ b/deps/v8/test/cctest/test-api-interceptors.cc @@ -81,17 +81,19 @@ void SimpleAccessorSetter(Local<String> name, Local<Value> value, void SymbolAccessorGetter(Local<Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) { CHECK(name->IsSymbol()); + v8::Isolate* isolate = info.GetIsolate(); Local<Symbol> sym = name.As<Symbol>(); - if (sym->Description()->IsUndefined()) return; - SimpleAccessorGetter(sym->Description().As<String>(), info); + if (sym->Description(isolate)->IsUndefined()) return; + SimpleAccessorGetter(sym->Description(isolate).As<String>(), info); } void SymbolAccessorSetter(Local<Name> name, Local<Value> value, const v8::PropertyCallbackInfo<void>& info) { CHECK(name->IsSymbol()); + v8::Isolate* isolate = info.GetIsolate(); Local<Symbol> sym = name.As<Symbol>(); - if (sym->Description()->IsUndefined()) return; - SimpleAccessorSetter(sym->Description().As<String>(), value, info); + if (sym->Description(isolate)->IsUndefined()) return; + SimpleAccessorSetter(sym->Description(isolate).As<String>(), value, info); } void InterceptorGetter(Local<Name> generic_name, @@ -139,9 +141,10 @@ void InterceptorSetter(Local<Name> generic_name, Local<Value> value, void GenericInterceptorGetter(Local<Name> generic_name, const v8::PropertyCallbackInfo<v8::Value>& info) { + v8::Isolate* isolate = info.GetIsolate(); Local<String> str; if (generic_name->IsSymbol()) { - Local<Value> name = generic_name.As<Symbol>()->Description(); + Local<Value> name = generic_name.As<Symbol>()->Description(isolate); if (name->IsUndefined()) return; str = String::Concat(info.GetIsolate(), v8_str("_sym_"), name.As<String>()); } else { @@ -159,9 +162,10 @@ void GenericInterceptorGetter(Local<Name> generic_name, void GenericInterceptorSetter(Local<Name> generic_name, Local<Value> value, const v8::PropertyCallbackInfo<v8::Value>& info) { + v8::Isolate* isolate = info.GetIsolate(); Local<String> str; if (generic_name->IsSymbol()) { - Local<Value> name = generic_name.As<Symbol>()->Description(); + Local<Value> name = generic_name.As<Symbol>()->Description(isolate); if (name->IsUndefined()) return; str = String::Concat(info.GetIsolate(), v8_str("_sym_"), name.As<String>()); } else { diff --git a/deps/v8/test/cctest/test-api-stack-traces.cc b/deps/v8/test/cctest/test-api-stack-traces.cc index 4a55b47e2b..6230081404 100644 --- a/deps/v8/test/cctest/test-api-stack-traces.cc +++ b/deps/v8/test/cctest/test-api-stack-traces.cc @@ -867,14 +867,22 @@ TEST(DynamicWithSourceURLInStackTraceString) { CHECK_NOT_NULL(strstr(*stack, "at foo (source_url:3:5)")); } -TEST(CaptureStackTraceForStackOverflow) { +UNINITIALIZED_TEST(CaptureStackTraceForStackOverflow) { + // We must set FLAG_stack_size before initializing the isolate. v8::internal::FLAG_stack_size = 150; - LocalContext current; - v8::Isolate* isolate = current->GetIsolate(); - v8::HandleScope scope(isolate); - isolate->SetCaptureStackTraceForUncaughtExceptions(true, 10, - v8::StackTrace::kDetailed); - v8::TryCatch try_catch(isolate); - CompileRun("(function f(x) { f(x+1); })(0)"); - CHECK(try_catch.HasCaught()); + v8::Isolate::CreateParams create_params; + create_params.array_buffer_allocator = CcTest::array_buffer_allocator(); + v8::Isolate* isolate = v8::Isolate::New(create_params); + isolate->Enter(); + { + LocalContext current(isolate); + v8::HandleScope scope(isolate); + isolate->SetCaptureStackTraceForUncaughtExceptions( + true, 10, v8::StackTrace::kDetailed); + v8::TryCatch try_catch(isolate); + CompileRun("(function f(x) { f(x+1); })(0)"); + CHECK(try_catch.HasCaught()); + } + isolate->Exit(); + isolate->Dispose(); } diff --git a/deps/v8/test/cctest/test-api.cc b/deps/v8/test/cctest/test-api.cc index 5eafa420bc..13a9704279 100644 --- a/deps/v8/test/cctest/test-api.cc +++ b/deps/v8/test/cctest/test-api.cc @@ -34,7 +34,7 @@ #include <string> #if V8_OS_POSIX -#include <unistd.h> // NOLINT +#include <unistd.h> #endif #include "include/v8-fast-api-calls.h" @@ -1453,6 +1453,9 @@ static void TestExternalPointerWrapping() { v8::Isolate* isolate = env->GetIsolate(); v8::HandleScope scope(isolate); + int* ptr = new int; + expected_ptr = ptr; + v8::Local<v8::Value> data = v8::External::New(isolate, expected_ptr); v8::Local<v8::Object> obj = v8::Object::New(isolate); @@ -1468,6 +1471,8 @@ static void TestExternalPointerWrapping() { "}\n" "foo(), true") ->BooleanValue(isolate)); + + delete ptr; } @@ -2672,24 +2677,28 @@ void SimpleAccessorSetter(Local<String> name, Local<Value> value, void SymbolAccessorGetter(Local<Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) { CHECK(name->IsSymbol()); + v8::Isolate* isolate = info.GetIsolate(); Local<Symbol> sym = name.As<Symbol>(); - if (sym->Description()->IsUndefined()) return; - SimpleAccessorGetter(Local<String>::Cast(sym->Description()), info); + if (sym->Description(isolate)->IsUndefined()) return; + SimpleAccessorGetter(Local<String>::Cast(sym->Description(isolate)), info); } void SymbolAccessorSetter(Local<Name> name, Local<Value> value, const v8::PropertyCallbackInfo<void>& info) { CHECK(name->IsSymbol()); + v8::Isolate* isolate = info.GetIsolate(); Local<Symbol> sym = name.As<Symbol>(); - if (sym->Description()->IsUndefined()) return; - SimpleAccessorSetter(Local<String>::Cast(sym->Description()), value, info); + if (sym->Description(isolate)->IsUndefined()) return; + SimpleAccessorSetter(Local<String>::Cast(sym->Description(isolate)), value, + info); } void SymbolAccessorGetterReturnsDefault( Local<Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) { CHECK(name->IsSymbol()); + v8::Isolate* isolate = info.GetIsolate(); Local<Symbol> sym = name.As<Symbol>(); - if (sym->Description()->IsUndefined()) return; + if (sym->Description(isolate)->IsUndefined()) return; info.GetReturnValue().Set(info.Data()); } @@ -3045,7 +3054,9 @@ THREADED_TEST(InternalFieldsAlignedPointers) { int stack_allocated[100]; CheckAlignedPointerInInternalField(obj, stack_allocated); - void* huge = reinterpret_cast<void*>(~static_cast<uintptr_t>(1)); + // The aligned pointer must have the top bits be zero on 64-bit machines (at + // least if the heap sandbox is enabled). + void* huge = reinterpret_cast<void*>(0x0000fffffffffffe); CheckAlignedPointerInInternalField(obj, huge); v8::Global<v8::Object> persistent(isolate, obj); @@ -3121,7 +3132,9 @@ THREADED_TEST(EmbedderDataAlignedPointers) { CheckAlignedPointerInEmbedderData(&env, 2, stack_allocated); CHECK_EQ(3, (*env)->GetNumberOfEmbedderDataFields()); - void* huge = reinterpret_cast<void*>(~static_cast<uintptr_t>(1)); + // The aligned pointer must have the top bits be zero on 64-bit machines (at + // least if the heap sandbox is enabled). + void* huge = reinterpret_cast<void*>(0x0000fffffffffffe); CheckAlignedPointerInEmbedderData(&env, 3, huge); CHECK_EQ(4, (*env)->GetNumberOfEmbedderDataFields()); @@ -3319,8 +3332,9 @@ THREADED_TEST(SymbolProperties) { CHECK(!sym1->StrictEquals(sym2)); CHECK(!sym2->StrictEquals(sym1)); - CHECK( - sym2->Description()->Equals(env.local(), v8_str("my-symbol")).FromJust()); + CHECK(sym2->Description(isolate) + ->Equals(env.local(), v8_str("my-symbol")) + .FromJust()); v8::Local<v8::Value> sym_val = sym2; CHECK(sym_val->IsSymbol()); @@ -8529,12 +8543,8 @@ THREADED_TEST(StringWrite) { CHECK_EQ(0, str->Write(isolate, nullptr, 0, 0, String::NO_NULL_TERMINATION)); } - -static void Utf16Helper( - LocalContext& context, // NOLINT - const char* name, - const char* lengths_name, - int len) { +static void Utf16Helper(LocalContext& context, const char* name, + const char* lengths_name, int len) { Local<v8::Array> a = Local<v8::Array>::Cast( context->Global()->Get(context.local(), v8_str(name)).ToLocalChecked()); Local<v8::Array> alens = @@ -14191,8 +14201,8 @@ void CheckIsSymbolAt(v8::Isolate* isolate, v8::Local<v8::Array> properties, properties->Get(context, v8::Integer::New(isolate, index)) .ToLocalChecked(); CHECK(value->IsSymbol()); - v8::String::Utf8Value symbol_name(isolate, - Local<Symbol>::Cast(value)->Description()); + v8::String::Utf8Value symbol_name( + isolate, Local<Symbol>::Cast(value)->Description(isolate)); if (strcmp(name, *symbol_name) != 0) { FATAL("properties[%u] was Symbol('%s') instead of Symbol('%s').", index, name, *symbol_name); @@ -16753,7 +16763,10 @@ THREADED_TEST(GetHeapStatistics) { CHECK_EQ(0u, heap_statistics.used_heap_size()); c1->GetIsolate()->GetHeapStatistics(&heap_statistics); CHECK_NE(static_cast<int>(heap_statistics.total_heap_size()), 0); - CHECK_NE(static_cast<int>(heap_statistics.used_heap_size()), 0); + if (!v8::internal::FLAG_enable_third_party_heap) { + // TODO(wenyuzhao): Get used size from third_party_heap interface + CHECK_NE(static_cast<int>(heap_statistics.used_heap_size()), 0); + } } TEST(GetHeapSpaceStatistics) { @@ -20784,6 +20797,50 @@ THREADED_TEST(InstanceCheckOnPrototypeAccessor) { CheckInstanceCheckedAccessors(true); } +THREADED_TEST(CheckIsLeafTemplateForApiObject) { + LocalContext context; + v8::HandleScope scope(context->GetIsolate()); + + Local<FunctionTemplate> templ = FunctionTemplate::New(context->GetIsolate()); + CHECK(context->Global() + ->Set(context.local(), v8_str("f"), + templ->GetFunction(context.local()).ToLocalChecked()) + .FromJust()); + + printf("Testing positive ...\n"); + CompileRun("var obj = new f();"); + CHECK(templ->IsLeafTemplateForApiObject( + context->Global()->Get(context.local(), v8_str("obj")).ToLocalChecked())); + + printf("Testing negative ...\n"); + CompileRun( + "var obj = {};" + "obj.__proto__ = new f();"); + CHECK(!templ->IsLeafTemplateForApiObject( + context->Global()->Get(context.local(), v8_str("obj")).ToLocalChecked())); + + printf("Testing positive with modified prototype chain ...\n"); + CompileRun( + "var obj = new f();" + "var pro = {};" + "pro.__proto__ = obj.__proto__;" + "obj.__proto__ = pro;"); + CHECK(templ->IsLeafTemplateForApiObject( + context->Global()->Get(context.local(), v8_str("obj")).ToLocalChecked())); + + Local<FunctionTemplate> child_templ = + FunctionTemplate::New(context->GetIsolate()); + child_templ->Inherit(templ); + Local<Object> instance = child_templ->GetFunction(context.local()) + .ToLocalChecked() + ->NewInstance(context.local()) + .ToLocalChecked(); + + printf("Testing positive for child ...\n"); + CHECK(child_templ->IsLeafTemplateForApiObject(instance)); + printf("Testing negative for parent ...\n"); + CHECK(!templ->IsLeafTemplateForApiObject(instance)); +} TEST(TryFinallyMessage) { LocalContext context; @@ -21974,7 +22031,7 @@ THREADED_TEST(FunctionNew) { ->shared() .get_api_func_data() .serial_number(); - CHECK_EQ(i::FunctionTemplateInfo::kInvalidSerialNumber, serial_number); + CHECK_EQ(i::TemplateInfo::kDoNotCache, serial_number); // Verify that each Function::New creates a new function instance Local<Object> data2 = v8::Object::New(isolate); @@ -26169,8 +26226,9 @@ TEST(DynamicImport) { i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); i::Handle<i::Script> referrer = i_isolate->factory()->NewScript(source); referrer->set_name(*url); - referrer->set_host_defined_options(*i_isolate->factory()->NewFixedArray( - kCustomHostDefinedOptionsLengthForTesting)); + i::Handle<i::FixedArray> options = i_isolate->factory()->NewFixedArray( + kCustomHostDefinedOptionsLengthForTesting); + referrer->set_host_defined_options(*options); i::MaybeHandle<i::JSPromise> maybe_promise = i_isolate->RunHostImportModuleDynamicallyCallback( referrer, specifier, i::MaybeHandle<i::Object>()); @@ -26255,8 +26313,9 @@ TEST(DynamicImportWithAssertions) { i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); i::Handle<i::Script> referrer = i_isolate->factory()->NewScript(source); referrer->set_name(*url); - referrer->set_host_defined_options(*i_isolate->factory()->NewFixedArray( - kCustomHostDefinedOptionsLengthForTesting)); + i::Handle<i::FixedArray> options = i_isolate->factory()->NewFixedArray( + kCustomHostDefinedOptionsLengthForTesting); + referrer->set_host_defined_options(*options); i::MaybeHandle<i::JSPromise> maybe_promise = i_isolate->RunHostImportModuleDynamicallyCallback(referrer, specifier, i_import_assertions); @@ -27621,14 +27680,16 @@ namespace { template <typename Value, typename Impl, typename Ret> struct BasicApiChecker { - static Ret FastCallback(v8::ApiObject receiver, Value argument, + static Ret FastCallback(v8::Local<v8::Object> receiver, Value argument, v8::FastApiCallbackOptions& options) { - const v8::Value* data = reinterpret_cast<const v8::Value*>(&options.data); + // TODO(mslekova): Refactor the data checking. + v8::Value* data = &(options.data); CHECK(data->IsNumber()); - CHECK_EQ(reinterpret_cast<const v8::Number*>(data)->Value(), 42.0); + CHECK_EQ(v8::Number::Cast(data)->Value(), 42.0); return Impl::FastCallback(receiver, argument, options); } - static Ret FastCallbackNoFallback(v8::ApiObject receiver, Value argument) { + static Ret FastCallbackNoFallback(v8::Local<v8::Object> receiver, + Value argument) { v8::FastApiCallbackOptions options = {false, {0}}; return Impl::FastCallback(receiver, argument, options); } @@ -27639,6 +27700,12 @@ struct BasicApiChecker { bool DidCallFast() const { return (result_ & ApiCheckerResult::kFastCalled); } bool DidCallSlow() const { return (result_ & ApiCheckerResult::kSlowCalled); } + void SetCallFast() { result_ |= ApiCheckerResult::kFastCalled; } + void SetCallSlow() { result_ |= ApiCheckerResult::kSlowCalled; } + + void Reset() { result_ = ApiCheckerResult::kNotCalled; } + + private: ApiCheckerResultFlags result_ = ApiCheckerResult::kNotCalled; }; @@ -27663,17 +27730,16 @@ struct ApiNumberChecker : BasicApiChecker<T, ApiNumberChecker<T>, void> { write_to_fallback_(write_to_fallback), args_count_(args_count) {} - static void FastCallback(v8::ApiObject receiver, T argument, + static void FastCallback(v8::Local<v8::Object> receiver, T argument, v8::FastApiCallbackOptions& options) { - v8::Object* receiver_obj = reinterpret_cast<v8::Object*>(&receiver); + v8::Object* receiver_obj = *receiver; if (!IsValidUnwrapObject(receiver_obj)) { options.fallback = 1; return; } ApiNumberChecker<T>* receiver_ptr = - GetInternalField<ApiNumberChecker<T>, kV8WrapperObjectIndex>( - receiver_obj); - receiver_ptr->result_ |= ApiCheckerResult::kFastCalled; + GetInternalField<ApiNumberChecker<T>>(receiver_obj); + receiver_ptr->SetCallFast(); receiver_ptr->fast_value_ = argument; if (receiver_ptr->write_to_fallback_ == FallbackPolicy::kRequestFallback) { // Anything != 0 has the same effect here, but we're writing 1 to match @@ -27692,10 +27758,10 @@ struct ApiNumberChecker : BasicApiChecker<T, ApiNumberChecker<T>, void> { return; } ApiNumberChecker<T>* checker = - GetInternalField<ApiNumberChecker<T>, kV8WrapperObjectIndex>(receiver); + GetInternalField<ApiNumberChecker<T>>(receiver); CHECK_EQ(info.Length(), checker->args_count_); - checker->result_ |= ApiCheckerResult::kSlowCalled; + checker->SetCallSlow(); LocalContext env; checker->slow_value_ = ConvertJSValue<T>::Get(info[0], env.local()); @@ -27714,17 +27780,15 @@ struct ApiNumberChecker : BasicApiChecker<T, ApiNumberChecker<T>, void> { }; struct UnexpectedObjectChecker - : BasicApiChecker<v8::ApiObject, UnexpectedObjectChecker, void> { - static void FastCallback(v8::ApiObject receiver, v8::ApiObject argument, + : BasicApiChecker<v8::Local<v8::Value>, UnexpectedObjectChecker, void> { + static void FastCallback(v8::Local<v8::Object> receiver, + v8::Local<v8::Value> argument, v8::FastApiCallbackOptions& options) { - v8::Object* receiver_obj = reinterpret_cast<v8::Object*>(&receiver); UnexpectedObjectChecker* receiver_ptr = - GetInternalField<UnexpectedObjectChecker, kV8WrapperObjectIndex>( - receiver_obj); - receiver_ptr->result_ |= ApiCheckerResult::kFastCalled; - v8::Value* argument_value = reinterpret_cast<v8::Value*>(&argument); - if (argument_value->IsObject()) { - v8::Object* argument_obj = reinterpret_cast<v8::Object*>(&argument); + GetInternalField<UnexpectedObjectChecker>(*receiver); + receiver_ptr->SetCallFast(); + if (argument->IsObject()) { + v8::Object* argument_obj = v8::Object::Cast(*argument); CHECK(!IsValidUnwrapObject(argument_obj)); } } @@ -27732,9 +27796,8 @@ struct UnexpectedObjectChecker static void SlowCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Object* receiver_obj = v8::Object::Cast(*info.Holder()); UnexpectedObjectChecker* receiver_ptr = - GetInternalField<UnexpectedObjectChecker, kV8WrapperObjectIndex>( - receiver_obj); - receiver_ptr->result_ |= ApiCheckerResult::kSlowCalled; + GetInternalField<UnexpectedObjectChecker>(receiver_obj); + receiver_ptr->SetCallSlow(); if (info[0]->IsObject()) { v8::Object* argument_obj = v8::Object::Cast(*info[0]); CHECK(!IsValidUnwrapObject(argument_obj)); @@ -27742,6 +27805,44 @@ struct UnexpectedObjectChecker } }; +struct EmbedderType { + int data; +}; + +struct ApiObjectChecker + : BasicApiChecker<v8::Local<v8::Value>, ApiObjectChecker, void> { + ApiObjectChecker(v8::FunctionTemplate* ctor, int data) + : ctor_(ctor), initial_data_(data) {} + + static void FastCallback(v8::Local<v8::Object> receiver, + v8::Local<v8::Value> argument, + v8::FastApiCallbackOptions& options) { + ApiObjectChecker* receiver_ptr = + GetInternalField<ApiObjectChecker>(*receiver); + receiver_ptr->SetCallFast(); + + v8::Object* argument_obj = v8::Object::Cast(*argument); + EmbedderType* argument_ptr = GetInternalField<EmbedderType>(argument_obj); + CHECK(receiver_ptr->ctor_->IsLeafTemplateForApiObject(argument)); + + argument_ptr->data = receiver_ptr->initial_data_; + } + static void SlowCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { + v8::Object* receiver_obj = v8::Object::Cast(*info.Holder()); + ApiObjectChecker* receiver_ptr = + GetInternalField<ApiObjectChecker>(receiver_obj); + receiver_ptr->SetCallSlow(); + + CHECK(info[0]->IsObject()); + v8::Local<v8::Object> argument_obj = info[0].As<v8::Object>(); + CHECK(receiver_ptr->ctor_->IsLeafTemplateForApiObject(argument_obj)); + } + + v8::FunctionTemplate* ctor_; + int fast_value_ = 0; + int initial_data_; +}; + template <typename Value, typename Impl, typename Ret> bool SetupTest(v8::Local<v8::Value> initial_value, LocalContext* env, BasicApiChecker<Value, Impl, Ret>* checker, @@ -27833,7 +27934,7 @@ void CallAndCheck( "function func(arg) { return receiver.api_func(arg); }" "%PrepareFunctionForOptimization(func);" "func(value);"); - checker.result_ = ApiCheckerResult::kNotCalled; + checker.Reset(); v8::Isolate* isolate = CcTest::isolate(); v8::TryCatch try_catch(isolate); @@ -27862,24 +27963,57 @@ void CallAndCheck( } } +void CheckApiObjectArg() { + LocalContext env; + v8::Isolate* isolate = CcTest::isolate(); + Local<v8::FunctionTemplate> api_obj_ctor = v8::FunctionTemplate::New(isolate); + v8::Local<v8::ObjectTemplate> api_obj_template = + api_obj_ctor->InstanceTemplate(); + api_obj_template->SetInternalFieldCount(kV8WrapperObjectIndex + 1); + + EmbedderType embedder_obj; + v8::Local<v8::Object> api_obj = + api_obj_template->NewInstance(env.local()).ToLocalChecked(); + api_obj->SetAlignedPointerInInternalField( + kV8WrapperObjectIndex, reinterpret_cast<void*>(&embedder_obj)); + CHECK(env->Global() + ->Set(env.local(), v8_str("api_object"), api_obj) + .FromJust()); + + const int data = 42; + ApiObjectChecker checker(*api_obj_ctor, data); + bool has_caught = + SetupTest(v8_num(data), &env, &checker, + "function func() { return receiver.api_func(api_object); }" + "%PrepareFunctionForOptimization(func);" + "func();"); + checker.Reset(); + CHECK(!has_caught); + + CompileRun( + "%OptimizeFunctionOnNextCall(func);" + "func();"); + + CHECK(checker.DidCallFast()); + CHECK_EQ(embedder_obj.data, data); + CHECK(!checker.DidCallSlow()); +} + template <typename T> struct ReturnValueChecker : BasicApiChecker<T, ReturnValueChecker<T>, T> { - static T FastCallback(v8::ApiObject receiver, T arg, + static T FastCallback(v8::Local<v8::Object> receiver, T arg, v8::FastApiCallbackOptions& options) { - v8::Object* receiver_obj = reinterpret_cast<v8::Object*>(&receiver); ReturnValueChecker<T>* receiver_ptr = - GetInternalField<ReturnValueChecker<T>, kV8WrapperObjectIndex>( - receiver_obj); - receiver_ptr->result_ |= ApiCheckerResult::kFastCalled; + GetInternalField<ReturnValueChecker<T>>(*receiver); + receiver_ptr->SetCallFast(); return arg; } static void SlowCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Object* receiver_obj = v8::Object::Cast(*info.Holder()); ReturnValueChecker<T>* receiver_ptr = - GetInternalField<ReturnValueChecker<T>, kV8WrapperObjectIndex>( - receiver_obj); - receiver_ptr->result_ |= ApiCheckerResult::kSlowCalled; + GetInternalField<ReturnValueChecker<T>>(receiver_obj); + receiver_ptr->SetCallSlow(); info.GetReturnValue().Set(info[0]); } }; @@ -27896,7 +28030,7 @@ void CheckFastReturnValue(v8::Local<v8::Value> expected_value, "%PrepareFunctionForOptimization(func);" "func(value);"); CHECK(!has_caught); - checker.result_ = ApiCheckerResult::kNotCalled; + checker.Reset(); v8::Isolate* isolate = CcTest::isolate(); v8::TryCatch try_catch(isolate); @@ -28064,12 +28198,12 @@ TEST(FastApiStackSlot) { #ifndef V8_LITE_MODE if (i::FLAG_jitless) return; - FLAG_SCOPE_EXTERNAL(opt); - FLAG_SCOPE_EXTERNAL(turbo_fast_api_calls); - FLAG_SCOPE_EXTERNAL(allow_natives_syntax); + v8::internal::FLAG_opt = true; + v8::internal::FLAG_turbo_fast_api_calls = true; + v8::internal::FLAG_allow_natives_syntax = true; // Disable --always_opt, otherwise we haven't generated the necessary // feedback to go down the "best optimization" path for the fast call. - UNFLAG_SCOPE_EXTERNAL(always_opt); + v8::internal::FLAG_always_opt = false; v8::Isolate* isolate = CcTest::isolate(); i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); @@ -28095,7 +28229,7 @@ TEST(FastApiStackSlot) { " };" " return foo;" "};"); - checker.result_ = ApiCheckerResult::kNotCalled; + checker.Reset(); v8::TryCatch try_catch(isolate); v8::Local<v8::Value> foo = @@ -28115,12 +28249,12 @@ TEST(FastApiCalls) { #ifndef V8_LITE_MODE if (i::FLAG_jitless) return; - FLAG_SCOPE_EXTERNAL(opt); - FLAG_SCOPE_EXTERNAL(turbo_fast_api_calls); - FLAG_SCOPE_EXTERNAL(allow_natives_syntax); + v8::internal::FLAG_opt = true; + v8::internal::FLAG_turbo_fast_api_calls = true; + v8::internal::FLAG_allow_natives_syntax = true; // Disable --always_opt, otherwise we haven't generated the necessary // feedback to go down the "best optimization" path for the fast call. - UNFLAG_SCOPE_EXTERNAL(always_opt); + v8::internal::FLAG_always_opt = false; v8::Isolate* isolate = CcTest::isolate(); i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); @@ -28571,8 +28705,8 @@ TEST(FastApiCalls) { CallWithUnexpectedObjectType(v8_str("str")); CallWithUnexpectedObjectType(CompileRun("new Proxy({}, {});")); - // TODO(mslekova): Add corner cases for 64-bit values. - // TODO(mslekova): Add main cases for float and double. + CheckApiObjectArg(); + // TODO(mslekova): Restructure the tests so that the fast optimized calls // are compared against the slow optimized calls. // TODO(mslekova): Add tests for FTI that requires access check. @@ -28943,3 +29077,52 @@ THREADED_TEST(MicrotaskQueueOfContext) { microtask_queue.get()); CHECK_EQ(context->GetMicrotaskQueue(), microtask_queue.get()); } + +namespace { + +bool sab_constructor_enabled_value = false; + +bool MockSabConstructorEnabledCallback(v8::Local<v8::Context>) { + return sab_constructor_enabled_value; +} + +} // namespace + +TEST(TestSetSabConstructorEnabledCallback) { + LocalContext env; + v8::Isolate* isolate = env->GetIsolate(); + i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); + v8::HandleScope scope(isolate); + v8::Local<v8::Context> context = v8::Context::New(CcTest::isolate()); + i::Handle<i::Context> i_context = v8::Utils::OpenHandle(*context); + + // {Isolate::IsSharedArrayBufferConstructorEnabled} calls the callback set by + // the embedder if such a callback exists. Otherwise it returns + // {FLAG_harmony_sharedarraybuffer}. First we test that the flag is returned + // correctly if no callback is set. Then we test that the flag is ignored if + // the callback is set. + + i::FLAG_harmony_sharedarraybuffer = false; + i::FLAG_enable_sharedarraybuffer_per_context = false; + CHECK(!i_isolate->IsSharedArrayBufferConstructorEnabled(i_context)); + + i::FLAG_harmony_sharedarraybuffer = false; + i::FLAG_enable_sharedarraybuffer_per_context = false; + CHECK(!i_isolate->IsSharedArrayBufferConstructorEnabled(i_context)); + + i::FLAG_harmony_sharedarraybuffer = true; + i::FLAG_enable_sharedarraybuffer_per_context = false; + CHECK(i_isolate->IsSharedArrayBufferConstructorEnabled(i_context)); + + i::FLAG_harmony_sharedarraybuffer = true; + i::FLAG_enable_sharedarraybuffer_per_context = true; + CHECK(!i_isolate->IsSharedArrayBufferConstructorEnabled(i_context)); + + isolate->SetSharedArrayBufferConstructorEnabledCallback( + MockSabConstructorEnabledCallback); + sab_constructor_enabled_value = false; + CHECK(!i_isolate->IsSharedArrayBufferConstructorEnabled(i_context)); + + sab_constructor_enabled_value = true; + CHECK(i_isolate->IsSharedArrayBufferConstructorEnabled(i_context)); +} diff --git a/deps/v8/test/cctest/test-assembler-arm.cc b/deps/v8/test/cctest/test-assembler-arm.cc index 1dd4ecfbcb..475fe71e92 100644 --- a/deps/v8/test/cctest/test-assembler-arm.cc +++ b/deps/v8/test/cctest/test-assembler-arm.cc @@ -25,7 +25,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -#include <iostream> // NOLINT(readability/streams) +#include <iostream> #include "src/base/utils/random-number-generator.h" #include "src/codegen/assembler-inl.h" diff --git a/deps/v8/test/cctest/test-assembler-ia32.cc b/deps/v8/test/cctest/test-assembler-ia32.cc index 3285be46cc..b95fe619d1 100644 --- a/deps/v8/test/cctest/test-assembler-ia32.cc +++ b/deps/v8/test/cctest/test-assembler-ia32.cc @@ -1550,6 +1550,35 @@ TEST(DeoptExitSizeIsFixed) { } } +TEST(CpuFeatures_ProbeImpl) { + // Support for a newer extension implies support for the older extensions. + CHECK_IMPLIES(CpuFeatures::IsSupported(FMA3), CpuFeatures::IsSupported(AVX)); + CHECK_IMPLIES(CpuFeatures::IsSupported(AVX2), CpuFeatures::IsSupported(AVX)); + CHECK_IMPLIES(CpuFeatures::IsSupported(AVX), + CpuFeatures::IsSupported(SSE4_2)); + CHECK_IMPLIES(CpuFeatures::IsSupported(SSE4_2), + CpuFeatures::IsSupported(SSE4_1)); + CHECK_IMPLIES(CpuFeatures::IsSupported(SSE4_1), + CpuFeatures::IsSupported(SSSE3)); + CHECK_IMPLIES(CpuFeatures::IsSupported(SSSE3), + CpuFeatures::IsSupported(SSE3)); + + // Check the reverse, if an older extension is not supported, a newer + // extension cannot be supported. + CHECK_IMPLIES(!CpuFeatures::IsSupported(SSE3), + !CpuFeatures::IsSupported(SSSE3)); + CHECK_IMPLIES(!CpuFeatures::IsSupported(SSSE3), + !CpuFeatures::IsSupported(SSE4_1)); + CHECK_IMPLIES(!CpuFeatures::IsSupported(SSE4_1), + !CpuFeatures::IsSupported(SSE4_2)); + CHECK_IMPLIES(!CpuFeatures::IsSupported(SSE4_2), + !CpuFeatures::IsSupported(AVX)); + CHECK_IMPLIES(!CpuFeatures::IsSupported(AVX), + !CpuFeatures::IsSupported(AVX2)); + CHECK_IMPLIES(!CpuFeatures::IsSupported(AVX), + !CpuFeatures::IsSupported(FMA3)); +} + #undef __ } // namespace internal diff --git a/deps/v8/test/cctest/test-assembler-mips.cc b/deps/v8/test/cctest/test-assembler-mips.cc index bb6590d0a5..50428d815f 100644 --- a/deps/v8/test/cctest/test-assembler-mips.cc +++ b/deps/v8/test/cctest/test-assembler-mips.cc @@ -25,9 +25,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -#include <iostream> // NOLINT(readability/streams) - -#include "src/init/v8.h" +#include <iostream> #include "src/base/utils/random-number-generator.h" #include "src/codegen/assembler-inl.h" @@ -35,7 +33,7 @@ #include "src/diagnostics/disassembler.h" #include "src/execution/simulator.h" #include "src/heap/factory.h" - +#include "src/init/v8.h" #include "test/cctest/cctest.h" namespace v8 { diff --git a/deps/v8/test/cctest/test-assembler-mips64.cc b/deps/v8/test/cctest/test-assembler-mips64.cc index 9cf7404e18..7ae265e687 100644 --- a/deps/v8/test/cctest/test-assembler-mips64.cc +++ b/deps/v8/test/cctest/test-assembler-mips64.cc @@ -25,9 +25,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -#include <iostream> // NOLINT(readability/streams) - -#include "src/init/v8.h" +#include <iostream> #include "src/base/utils/random-number-generator.h" #include "src/codegen/assembler-inl.h" @@ -35,7 +33,7 @@ #include "src/diagnostics/disassembler.h" #include "src/execution/simulator.h" #include "src/heap/factory.h" - +#include "src/init/v8.h" #include "test/cctest/cctest.h" namespace v8 { diff --git a/deps/v8/test/cctest/test-assembler-riscv64.cc b/deps/v8/test/cctest/test-assembler-riscv64.cc index c9429f2bc1..ef275f53c8 100644 --- a/deps/v8/test/cctest/test-assembler-riscv64.cc +++ b/deps/v8/test/cctest/test-assembler-riscv64.cc @@ -27,7 +27,7 @@ #include <math.h> -#include <iostream> // NOLINT(readability/streams) +#include <iostream> #include "src/base/utils/random-number-generator.h" #include "src/codegen/assembler-inl.h" @@ -76,6 +76,16 @@ using F5 = void*(void* p0, void* p1, int p2, int p3, int p4); CHECK_EQ(expected_res, res); \ } +#define UTEST_R1_FORM_WITH_RES_C(instr_name, in_type, out_type, rs1_val, \ + expected_res) \ + TEST(RISCV_UTEST_##instr_name) { \ + i::FLAG_riscv_c_extension = true; \ + CcTest::InitializeVM(); \ + auto fn = [](MacroAssembler& assm) { __ instr_name(a0, a0); }; \ + auto res = GenAndRunTest<out_type, in_type>(rs1_val, fn); \ + CHECK_EQ(expected_res, res); \ + } + #define UTEST_I_FORM_WITH_RES(instr_name, type, rs1_val, imm12, expected_res) \ TEST(RISCV_UTEST_##instr_name) { \ CcTest::InitializeVM(); \ @@ -554,8 +564,8 @@ UTEST_CONV_F_FROM_I(fcvt_d_lu, uint64_t, double, (double)(std::numeric_limits<uint64_t>::max())) // -- RV64C Standard Extension -- -UTEST_R1_FORM_WITH_RES(c_mv, int64_t, int64_t, 0x0f5600ab123400, - 0x0f5600ab123400) +UTEST_R1_FORM_WITH_RES_C(c_mv, int64_t, int64_t, 0x0f5600ab123400, + 0x0f5600ab123400) // -- Assembler Pseudo Instructions -- UTEST_R1_FORM_WITH_RES(mv, int64_t, int64_t, 0x0f5600ab123400, 0x0f5600ab123400) @@ -1201,6 +1211,7 @@ TEST(NAN_BOX) { TEST(RVC_CI) { // Test RV64C extension CI type instructions. + i::FLAG_riscv_c_extension = true; CcTest::InitializeVM(); // Test c.addi @@ -1253,6 +1264,7 @@ TEST(RVC_CI) { } TEST(RVC_CIW) { + i::FLAG_riscv_c_extension = true; CcTest::InitializeVM(); // Test c.addi4spn @@ -1270,6 +1282,7 @@ TEST(RVC_CIW) { TEST(RVC_CR) { // Test RV64C extension CR type instructions. + i::FLAG_riscv_c_extension = true; CcTest::InitializeVM(); // Test c.add @@ -1285,6 +1298,7 @@ TEST(RVC_CR) { TEST(RVC_CA) { // Test RV64C extension CA type instructions. + i::FLAG_riscv_c_extension = true; CcTest::InitializeVM(); // Test c.sub @@ -1350,6 +1364,7 @@ TEST(RVC_CA) { TEST(RVC_LOAD_STORE_SP) { // Test RV64C extension fldsp/fsdsp, lwsp/swsp, ldsp/sdsp. + i::FLAG_riscv_c_extension = true; CcTest::InitializeVM(); { @@ -1382,6 +1397,8 @@ TEST(RVC_LOAD_STORE_SP) { TEST(RVC_LOAD_STORE_COMPRESSED) { // Test RV64C extension fld, lw, ld. + i::FLAG_riscv_c_extension = true; + CcTest::InitializeVM(); Isolate* isolate = CcTest::i_isolate(); HandleScope scope(isolate); @@ -1462,6 +1479,7 @@ TEST(RVC_LOAD_STORE_COMPRESSED) { } TEST(RVC_JUMP) { + i::FLAG_riscv_c_extension = true; CcTest::InitializeVM(); Label L, C; diff --git a/deps/v8/test/cctest/test-assembler-x64.cc b/deps/v8/test/cctest/test-assembler-x64.cc index 572ef353c8..2ee56bc95e 100644 --- a/deps/v8/test/cctest/test-assembler-x64.cc +++ b/deps/v8/test/cctest/test-assembler-x64.cc @@ -2521,6 +2521,35 @@ TEST(AssemblerX64vmovups) { CHECK_EQ(-1.5, f.Call(1.5, -1.5)); } +TEST(CpuFeatures_ProbeImpl) { + // Support for a newer extension implies support for the older extensions. + CHECK_IMPLIES(CpuFeatures::IsSupported(FMA3), CpuFeatures::IsSupported(AVX)); + CHECK_IMPLIES(CpuFeatures::IsSupported(AVX2), CpuFeatures::IsSupported(AVX)); + CHECK_IMPLIES(CpuFeatures::IsSupported(AVX), + CpuFeatures::IsSupported(SSE4_2)); + CHECK_IMPLIES(CpuFeatures::IsSupported(SSE4_2), + CpuFeatures::IsSupported(SSE4_1)); + CHECK_IMPLIES(CpuFeatures::IsSupported(SSE4_1), + CpuFeatures::IsSupported(SSSE3)); + CHECK_IMPLIES(CpuFeatures::IsSupported(SSSE3), + CpuFeatures::IsSupported(SSE3)); + + // Check the reverse, if an older extension is not supported, a newer + // extension cannot be supported. + CHECK_IMPLIES(!CpuFeatures::IsSupported(SSE3), + !CpuFeatures::IsSupported(SSSE3)); + CHECK_IMPLIES(!CpuFeatures::IsSupported(SSSE3), + !CpuFeatures::IsSupported(SSE4_1)); + CHECK_IMPLIES(!CpuFeatures::IsSupported(SSE4_1), + !CpuFeatures::IsSupported(SSE4_2)); + CHECK_IMPLIES(!CpuFeatures::IsSupported(SSE4_2), + !CpuFeatures::IsSupported(AVX)); + CHECK_IMPLIES(!CpuFeatures::IsSupported(AVX), + !CpuFeatures::IsSupported(AVX2)); + CHECK_IMPLIES(!CpuFeatures::IsSupported(AVX), + !CpuFeatures::IsSupported(FMA3)); +} + #undef __ } // namespace internal diff --git a/deps/v8/test/cctest/test-code-pages.cc b/deps/v8/test/cctest/test-code-pages.cc index 7d335f2174..fec21c275e 100644 --- a/deps/v8/test/cctest/test-code-pages.cc +++ b/deps/v8/test/cctest/test-code-pages.cc @@ -97,17 +97,16 @@ TEST(CodeRangeCorrectContents) { std::vector<MemoryRange>* pages = i_isolate->GetCodePages(); - const base::AddressRegion& code_range = - i_isolate->heap()->memory_allocator()->code_range(); - CHECK(!code_range.is_empty()); + const base::AddressRegion& code_region = i_isolate->heap()->code_region(); + CHECK(!code_region.is_empty()); // We should only have the code range and the embedded code range. CHECK_EQ(2, pages->size()); - CHECK(PagesHasExactPage(pages, code_range.begin(), code_range.size())); + CHECK(PagesHasExactPage(pages, code_region.begin(), code_region.size())); CHECK(PagesHasExactPage( pages, reinterpret_cast<Address>(i_isolate->CurrentEmbeddedBlobCode()), i_isolate->CurrentEmbeddedBlobCodeSize())); if (i_isolate->is_short_builtin_calls_enabled()) { - // In this case embedded blob code must be included via code_range. + // In this case embedded blob code must be included via code_region. CHECK(PagesContainsRange( pages, reinterpret_cast<Address>(i_isolate->embedded_blob_code()), i_isolate->embedded_blob_code_size())); @@ -129,9 +128,8 @@ TEST(CodePagesCorrectContents) { // There might be other pages already. CHECK_GE(pages->size(), 1); - const base::AddressRegion& code_range = - i_isolate->heap()->memory_allocator()->code_range(); - CHECK(code_range.is_empty()); + const base::AddressRegion& code_region = i_isolate->heap()->code_region(); + CHECK(code_region.is_empty()); // We should have the embedded code range even when there is no regular code // range. @@ -202,6 +200,13 @@ TEST(OptimizedCodeWithCodePages) { Handle<JSFunction> foo = Handle<JSFunction>::cast(v8::Utils::OpenHandle(*local_foo)); + // If there is baseline code, check that it's only due to + // --always-sparkplug (if this check fails, we'll have to re-think this + // test). + if (foo->shared().HasBaselineData()) { + CHECK(FLAG_always_sparkplug); + return; + } AbstractCode abstract_code = foo->abstract_code(i_isolate); // We don't produce optimized code when run with --no-opt. if (!abstract_code.IsCode() && FLAG_opt == false) return; diff --git a/deps/v8/test/cctest/test-code-stub-assembler.cc b/deps/v8/test/cctest/test-code-stub-assembler.cc index 67961c9476..dcff92bcfc 100644 --- a/deps/v8/test/cctest/test-code-stub-assembler.cc +++ b/deps/v8/test/cctest/test-code-stub-assembler.cc @@ -11,6 +11,7 @@ #include "src/builtins/builtins-string-gen.h" #include "src/codegen/code-factory.h" #include "src/codegen/code-stub-assembler.h" +#include "src/codegen/interface-descriptors-inl.h" #include "src/compiler/node.h" #include "src/debug/debug.h" #include "src/execution/isolate.h" @@ -101,7 +102,7 @@ TEST(CallCFunctionWithCallerSavedRegisters) { TNode<IntPtrT> const result = m.UncheckedCast<IntPtrT>(m.CallCFunctionWithCallerSavedRegisters( - fun_constant, type_intptr, kSaveFPRegs, + fun_constant, type_intptr, SaveFPRegsMode::kSave, std::make_pair(type_intptr, m.IntPtrConstant(0)), std::make_pair(type_intptr, m.IntPtrConstant(1)), std::make_pair(type_intptr, m.IntPtrConstant(2)))); @@ -2024,7 +2025,7 @@ TEST(PopAndReturnFromTFCBuiltinWithStackParameters) { // least one argument passed on stack. using Descriptor = FlatMapIntoArrayDescriptor; Descriptor descriptor; - CHECK_LT(0, descriptor.GetStackParameterCount()); + CHECK_LT(0, Descriptor::GetStackParameterCount()); CodeAssemblerTester asm_tester(isolate, Descriptor()); { @@ -3069,7 +3070,8 @@ TEST(NewPromiseCapability) { CHECK(result->promise().IsJSObject()); Handle<JSObject> promise(JSObject::cast(result->promise()), isolate); - CHECK_EQ(constructor_fn->prototype_or_initial_map(), promise->map()); + CHECK_EQ(constructor_fn->prototype_or_initial_map(kAcquireLoad), + promise->map()); CHECK(result->resolve().IsJSFunction()); CHECK(result->reject().IsJSFunction()); @@ -3956,7 +3958,7 @@ TEST(InstructionSchedulingCallerSavedRegisters) { m.CallCFunctionWithCallerSavedRegisters( m.ExternalConstant( ExternalReference::smi_lexicographic_compare_function()), - MachineType::Int32(), kSaveFPRegs, + MachineType::Int32(), SaveFPRegsMode::kSave, std::make_pair(MachineType::Pointer(), isolate_ptr), std::make_pair(MachineType::TaggedSigned(), m.SmiConstant(0)), std::make_pair(MachineType::TaggedSigned(), m.SmiConstant(0))); diff --git a/deps/v8/test/cctest/test-compiler.cc b/deps/v8/test/cctest/test-compiler.cc index 3b895d7420..d044c7c405 100644 --- a/deps/v8/test/cctest/test-compiler.cc +++ b/deps/v8/test/cctest/test-compiler.cc @@ -693,7 +693,7 @@ void TestCompileFunctionInContextToStringImpl() { } \ } while (false) - { // NOLINT + { CcTest::InitializeVM(); v8::Isolate* isolate = CcTest::isolate(); v8::HandleScope scope(isolate); @@ -929,120 +929,6 @@ TEST(DeepEagerCompilationPeakMemory) { CHECK_LE(peak_mem_4 - peak_mem_3, peak_mem_3); } -// TODO(mslekova): Remove the duplication with test-heap.cc -static int AllocationSitesCount(Heap* heap) { - int count = 0; - for (Object site = heap->allocation_sites_list(); site.IsAllocationSite();) { - AllocationSite cur = AllocationSite::cast(site); - CHECK(cur.HasWeakNext()); - site = cur.weak_next(); - count++; - } - return count; -} - -// This test simulates a specific race-condition if GC is triggered just -// before CompilationDependencies::Commit is finished, and this changes -// the pretenuring decision, thus causing a deoptimization. -TEST(DecideToPretenureDuringCompilation) { - // The test makes use of optimization and relies on deterministic - // compilation. - if (!i::FLAG_opt || i::FLAG_always_opt || i::FLAG_always_sparkplug || - i::FLAG_minor_mc || i::FLAG_stress_incremental_marking || - i::FLAG_optimize_for_size || i::FLAG_turbo_nci || - i::FLAG_stress_concurrent_allocation) { - return; - } - - FLAG_stress_gc_during_compilation = true; - FLAG_allow_natives_syntax = true; - FLAG_allocation_site_pretenuring = true; - FLAG_flush_bytecode = false; - // Turn on lazy feedback allocation, so we create exactly one allocation site. - // Without lazy feedback allocation, we create two allocation sites. - FLAG_lazy_feedback_allocation = true; - - // We want to trigger exactly 1 optimization. - FLAG_use_osr = false; - - // We'll do manual initialization. - ManualGCScope manual_gc_scope; - v8::Isolate::CreateParams create_params; - - // This setting ensures Heap::MaximumSizeScavenge will return `true`. - // We need to initialize the heap with at least 1 page, while keeping the - // limit low, to ensure the new space fills even on 32-bit architectures. - create_params.constraints.set_max_young_generation_size_in_bytes( - 3 * Page::kPageSize); - create_params.array_buffer_allocator = CcTest::array_buffer_allocator(); - v8::Isolate* isolate = v8::Isolate::New(create_params); - - isolate->Enter(); - { - i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); - Heap* heap = i_isolate->heap(); - GlobalHandles* global_handles = i_isolate->global_handles(); - HandleScope handle_scope(i_isolate); - - // The allocation site at the head of the list is ours. - Handle<AllocationSite> site; - { - LocalContext context(isolate); - v8::HandleScope scope(context->GetIsolate()); - - int count = AllocationSitesCount(heap); - CompileRun( - "let arr = [];" - "function foo(shouldKeep) {" - " let local_array = new Array();" - " if (shouldKeep) arr.push(local_array);" - "}" - "function bar(shouldKeep) {" - " for (let i = 0; i < 10000; i++) {" - " foo(shouldKeep);" - " }" - "}" - "%PrepareFunctionForOptimization(bar);" - "bar();"); - - // This number should be >= kPretenureRatio * 10000, - // where 10000 is the number of iterations in `bar`, - // in order to make the ratio in DigestPretenuringFeedback close to 1. - const int memento_found_bump = 8500; - - // One allocation site should have been created. - int new_count = AllocationSitesCount(heap); - CHECK_EQ(new_count, (count + 1)); - site = Handle<AllocationSite>::cast(global_handles->Create( - AllocationSite::cast(heap->allocation_sites_list()))); - site->set_memento_found_count(memento_found_bump); - - CompileRun("%OptimizeFunctionOnNextCall(bar);"); - CompileRun("bar(true);"); - - // The last call should have caused `foo` to bail out of compilation - // due to dependency change (the pretenuring decision in this case). - // This will cause recompilation. - - // Check `bar` can get optimized again, meaning the compiler state is - // recoverable from this point. - CompileRun( - "%PrepareFunctionForOptimization(bar);" - "%OptimizeFunctionOnNextCall(bar);"); - CompileRun("bar();"); - - Handle<Object> foo_obj = - JSReceiver::GetProperty(i_isolate, i_isolate->global_object(), "bar") - .ToHandleChecked(); - Handle<JSFunction> bar = Handle<JSFunction>::cast(foo_obj); - - CHECK(bar->HasAttachedOptimizedCode()); - } - } - isolate->Exit(); - isolate->Dispose(); -} - namespace { // Dummy external source stream which returns the whole source in one go. diff --git a/deps/v8/test/cctest/test-concurrent-prototype.cc b/deps/v8/test/cctest/test-concurrent-prototype.cc index 88e902d13d..44f6e02c75 100644 --- a/deps/v8/test/cctest/test-concurrent-prototype.cc +++ b/deps/v8/test/cctest/test-concurrent-prototype.cc @@ -45,9 +45,9 @@ class ConcurrentSearchThread final : public v8::base::Thread { for (Handle<JSObject> js_obj : handles_) { // Walk up the prototype chain all the way to the top. - Handle<Map> map(js_obj->synchronized_map(), &local_heap); + Handle<Map> map(js_obj->map(kAcquireLoad), &local_heap); while (!map->prototype().IsNull()) { - Handle<Map> map_prototype_map(map->prototype().synchronized_map(), + Handle<Map> map_prototype_map(map->prototype().map(kAcquireLoad), &local_heap); if (!map_prototype_map->IsJSObjectMap()) { break; diff --git a/deps/v8/test/cctest/test-concurrent-string.cc b/deps/v8/test/cctest/test-concurrent-string.cc index e6d9be60f5..081495aa55 100644 --- a/deps/v8/test/cctest/test-concurrent-string.cc +++ b/deps/v8/test/cctest/test-concurrent-string.cc @@ -82,7 +82,7 @@ class ConcurrentStringThread final : public v8::base::Thread { sema_started_->Signal(); // Check the three operations we do from the StringRef concurrently: get the // string, the nth character, and convert into a double. - CHECK_EQ(str_->synchronized_length(), length_); + CHECK_EQ(str_->length(kAcquireLoad), length_); for (unsigned int i = 0; i < length_; ++i) { CHECK_EQ(str_->Get(i, &local_isolate), chars_[i]); } diff --git a/deps/v8/test/cctest/test-cpu-profiler.cc b/deps/v8/test/cctest/test-cpu-profiler.cc index cd1fa753ba..2373fd2f3a 100644 --- a/deps/v8/test/cctest/test-cpu-profiler.cc +++ b/deps/v8/test/cctest/test-cpu-profiler.cc @@ -546,7 +546,8 @@ class ProfilerHelper { v8::Local<v8::Function> function, v8::Local<v8::Value> argv[], int argc, unsigned min_js_samples = 0, unsigned min_external_samples = 0, ProfilingMode mode = ProfilingMode::kLeafNodeLineNumbers, - unsigned max_samples = v8::CpuProfilingOptions::kNoSampleLimit); + unsigned max_samples = v8::CpuProfilingOptions::kNoSampleLimit, + v8::Local<v8::Context> context = v8::Local<v8::Context>()); v8::CpuProfiler* profiler() { return profiler_; } @@ -559,11 +560,12 @@ v8::CpuProfile* ProfilerHelper::Run(v8::Local<v8::Function> function, v8::Local<v8::Value> argv[], int argc, unsigned min_js_samples, unsigned min_external_samples, - ProfilingMode mode, unsigned max_samples) { + ProfilingMode mode, unsigned max_samples, + v8::Local<v8::Context> context) { v8::Local<v8::String> profile_name = v8_str("my_profile"); profiler_->SetSamplingInterval(50); - profiler_->StartProfiling(profile_name, {mode, max_samples, 0}); + profiler_->StartProfiling(profile_name, {mode, max_samples, 0, context}); v8::internal::CpuProfiler* iprofiler = reinterpret_cast<v8::internal::CpuProfiler*>(profiler_); @@ -3803,6 +3805,141 @@ TEST(Bug9151StaleCodeEntries) { CHECK(callback); } +// Tests that functions from other contexts aren't recorded when filtering for +// another context. +TEST(ContextIsolation) { + i::FLAG_allow_natives_syntax = true; + LocalContext execution_env; + i::HandleScope scope(CcTest::i_isolate()); + + // Install CollectSample callback for more deterministic sampling. + v8::Local<v8::FunctionTemplate> func_template = v8::FunctionTemplate::New( + execution_env.local()->GetIsolate(), CallCollectSample); + v8::Local<v8::Function> func = + func_template->GetFunction(execution_env.local()).ToLocalChecked(); + func->SetName(v8_str("CallCollectSample")); + execution_env->Global() + ->Set(execution_env.local(), v8_str("CallCollectSample"), func) + .FromJust(); + + ProfilerHelper helper(execution_env.local()); + CompileRun(R"( + function optimized() { + CallCollectSample(); + } + + function unoptimized() { + CallCollectSample(); + } + + function start() { + // Test optimized functions + %PrepareFunctionForOptimization(optimized); + optimized(); + optimized(); + %OptimizeFunctionOnNextCall(optimized); + optimized(); + + // Test unoptimized functions + %NeverOptimizeFunction(unoptimized); + unoptimized(); + + // Test callback + CallCollectSample(); + } + )"); + v8::Local<v8::Function> function = + GetFunction(execution_env.local(), "start"); + + v8::CpuProfile* same_context_profile = helper.Run( + function, nullptr, 0, 0, 0, v8::CpuProfilingMode::kLeafNodeLineNumbers, + v8::CpuProfilingOptions::kNoSampleLimit, execution_env.local()); + const v8::CpuProfileNode* root = same_context_profile->GetTopDownRoot(); + const v8::CpuProfileNode* start_node = FindChild(root, "start"); + CHECK(start_node); + const v8::CpuProfileNode* optimized_node = FindChild(start_node, "optimized"); + CHECK(optimized_node); + const v8::CpuProfileNode* unoptimized_node = + FindChild(start_node, "unoptimized"); + CHECK(unoptimized_node); + const v8::CpuProfileNode* callback_node = + FindChild(start_node, "CallCollectSample"); + CHECK(callback_node); + + { + LocalContext filter_env; + v8::CpuProfile* diff_context_profile = helper.Run( + function, nullptr, 0, 0, 0, v8::CpuProfilingMode::kLeafNodeLineNumbers, + v8::CpuProfilingOptions::kNoSampleLimit, filter_env.local()); + const v8::CpuProfileNode* diff_root = + diff_context_profile->GetTopDownRoot(); + // Ensure that no children were recorded (including callbacks, builtins). + CHECK(!FindChild(diff_root, "start")); + } +} + +// Tests that when a native context that's being filtered is moved, we continue +// to track its execution. +TEST(ContextFilterMovedNativeContext) { + if (i::FLAG_enable_third_party_heap) return; + i::FLAG_allow_natives_syntax = true; + i::FLAG_manual_evacuation_candidates_selection = true; + LocalContext env; + i::HandleScope scope(CcTest::i_isolate()); + + { + // Install CollectSample callback for more deterministic sampling. + v8::Local<v8::FunctionTemplate> sample_func_template = + v8::FunctionTemplate::New(env.local()->GetIsolate(), CallCollectSample); + v8::Local<v8::Function> sample_func = + sample_func_template->GetFunction(env.local()).ToLocalChecked(); + sample_func->SetName(v8_str("CallCollectSample")); + env->Global() + ->Set(env.local(), v8_str("CallCollectSample"), sample_func) + .FromJust(); + + // Install a function that triggers the native context to be moved. + v8::Local<v8::FunctionTemplate> move_func_template = + v8::FunctionTemplate::New( + env.local()->GetIsolate(), + [](const v8::FunctionCallbackInfo<v8::Value>& info) { + i::Isolate* isolate = + reinterpret_cast<i::Isolate*>(info.GetIsolate()); + i::heap::ForceEvacuationCandidate( + i::Page::FromHeapObject(isolate->raw_native_context())); + CcTest::CollectAllGarbage(); + }); + v8::Local<v8::Function> move_func = + move_func_template->GetFunction(env.local()).ToLocalChecked(); + move_func->SetName(v8_str("ForceNativeContextMove")); + env->Global() + ->Set(env.local(), v8_str("ForceNativeContextMove"), move_func) + .FromJust(); + + ProfilerHelper helper(env.local()); + CompileRun(R"( + function start() { + ForceNativeContextMove(); + CallCollectSample(); + } + )"); + v8::Local<v8::Function> function = GetFunction(env.local(), "start"); + + v8::CpuProfile* profile = helper.Run( + function, nullptr, 0, 0, 0, v8::CpuProfilingMode::kLeafNodeLineNumbers, + v8::CpuProfilingOptions::kNoSampleLimit, env.local()); + const v8::CpuProfileNode* root = profile->GetTopDownRoot(); + const v8::CpuProfileNode* start_node = FindChild(root, "start"); + CHECK(start_node); + + // Verify that after moving the native context, CallCollectSample is still + // recorded. + const v8::CpuProfileNode* callback_node = + FindChild(start_node, "CallCollectSample"); + CHECK(callback_node); + } +} + enum class EntryCountMode { kAll, kOnlyInlined }; // Count the number of unique source positions. @@ -3934,17 +4071,16 @@ UNINITIALIZED_TEST(DetailedSourcePositionAPI_Inlining) { namespace { struct FastApiReceiver { - static void FastCallback(v8::ApiObject receiver, int argument, + static void FastCallback(v8::Local<v8::Object> receiver, int argument, v8::FastApiCallbackOptions& options) { // TODO(mslekova): The fallback is not used by the test. Replace this // with a CHECK. - v8::Object* receiver_obj = reinterpret_cast<v8::Object*>(&receiver); - if (!IsValidUnwrapObject(receiver_obj)) { + if (!IsValidUnwrapObject(*receiver)) { options.fallback = 1; return; } FastApiReceiver* receiver_ptr = - GetInternalField<FastApiReceiver, kV8WrapperObjectIndex>(receiver_obj); + GetInternalField<FastApiReceiver>(*receiver); receiver_ptr->result_ |= ApiCheckerResult::kFastCalled; @@ -3957,11 +4093,10 @@ struct FastApiReceiver { static void SlowCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Object* receiver_obj = v8::Object::Cast(*info.Holder()); if (!IsValidUnwrapObject(receiver_obj)) { - info.GetIsolate()->ThrowException(v8_str("Called with a non-object.")); + info.GetIsolate()->ThrowError("Called with a non-object."); return; } - FastApiReceiver* receiver = - GetInternalField<FastApiReceiver, kV8WrapperObjectIndex>(receiver_obj); + FastApiReceiver* receiver = GetInternalField<FastApiReceiver>(receiver_obj); receiver->result_ |= ApiCheckerResult::kSlowCalled; } diff --git a/deps/v8/test/cctest/test-debug-helper.cc b/deps/v8/test/cctest/test-debug-helper.cc index 6e3033d993..5601bce42f 100644 --- a/deps/v8/test/cctest/test-debug-helper.cc +++ b/deps/v8/test/cctest/test-debug-helper.cc @@ -229,10 +229,13 @@ TEST(GetObjectProperties) { d::ObjectPropertiesResultPtr props2; { heap_addresses.read_only_space_first_page = 0; + uintptr_t map_ptr = props->properties[0]->address; + uintptr_t map_map_ptr = *reinterpret_cast<i::Tagged_t*>(map_ptr); +#if V8_MAP_PACKING + map_map_ptr = reinterpret_cast<i::MapWord*>(&map_map_ptr)->ToMap().ptr(); +#endif uintptr_t map_address = - d::GetObjectProperties( - *reinterpret_cast<i::Tagged_t*>(props->properties[0]->address), - &ReadMemory, heap_addresses) + d::GetObjectProperties(map_map_ptr, &ReadMemory, heap_addresses) ->properties[0] ->address; MemoryFailureRegion failure(map_address, map_address + i::Map::kSize); @@ -338,8 +341,11 @@ TEST(GetObjectProperties) { // Verify the result for a heap object field which is itself a struct: the // "descriptors" field on a DescriptorArray. // Start by getting the object's map and the map's descriptor array. - props = d::GetObjectProperties(ReadProp<i::Tagged_t>(*props, "map"), - &ReadMemory, heap_addresses); + uintptr_t map_ptr = ReadProp<i::Tagged_t>(*props, "map"); +#if V8_MAP_PACKING + map_ptr = reinterpret_cast<i::MapWord*>(&map_ptr)->ToMap().ptr(); +#endif + props = d::GetObjectProperties(map_ptr, &ReadMemory, heap_addresses); props = d::GetObjectProperties( ReadProp<i::Tagged_t>(*props, "instance_descriptors"), &ReadMemory, heap_addresses); diff --git a/deps/v8/test/cctest/test-debug.cc b/deps/v8/test/cctest/test-debug.cc index 2723f5fa14..2566c2f17c 100644 --- a/deps/v8/test/cctest/test-debug.cc +++ b/deps/v8/test/cctest/test-debug.cc @@ -108,13 +108,14 @@ static void ClearBreakPoint(i::Handle<i::BreakPoint> break_point) { // Change break on exception. -static void ChangeBreakOnException(bool caught, bool uncaught) { - v8::internal::Debug* debug = CcTest::i_isolate()->debug(); +static void ChangeBreakOnException(v8::Isolate* isolate, bool caught, + bool uncaught) { + v8::internal::Debug* debug = + reinterpret_cast<v8::internal::Isolate*>(isolate)->debug(); debug->ChangeBreakOnException(v8::internal::BreakException, caught); debug->ChangeBreakOnException(v8::internal::BreakUncaughtException, uncaught); } - // Prepare to step to next break location. static void PrepareStep(i::StepAction step_action) { v8::internal::Debug* debug = CcTest::i_isolate()->debug(); @@ -3028,7 +3029,7 @@ TEST(DebugBreakInWrappedScript) { static const char* expect = "TypeError: o[0] is not a function"; // For this test, we want to break on uncaught exceptions: - ChangeBreakOnException(true, true); + ChangeBreakOnException(isolate, true, true); { v8::ScriptCompiler::Source script_source(v8_str(source)); @@ -3492,7 +3493,7 @@ TEST(SyntaxErrorEventOnSyntaxException) { v8::HandleScope scope(env->GetIsolate()); // For this test, we want to break on uncaught exceptions: - ChangeBreakOnException(false, true); + ChangeBreakOnException(env->GetIsolate(), false, true); ScriptCompiledDelegate delegate; v8::debug::SetDebugDelegate(env->GetIsolate(), &delegate); @@ -3539,22 +3540,31 @@ class ExceptionEventCounter : public v8::debug::DebugDelegate { int exception_event_count = 0; }; -TEST(NoBreakOnStackOverflow) { +UNINITIALIZED_TEST(NoBreakOnStackOverflow) { + // We must set FLAG_stack_size before initializing the isolate. i::FLAG_stack_size = 100; - LocalContext env; - v8::HandleScope scope(env->GetIsolate()); + v8::Isolate::CreateParams create_params; + create_params.array_buffer_allocator = CcTest::array_buffer_allocator(); + v8::Isolate* isolate = v8::Isolate::New(create_params); + isolate->Enter(); + { + LocalContext env(isolate); + v8::HandleScope scope(isolate); - ChangeBreakOnException(true, true); + ChangeBreakOnException(isolate, true, true); - ExceptionEventCounter delegate; - v8::debug::SetDebugDelegate(env->GetIsolate(), &delegate); - CHECK_EQ(0, delegate.exception_event_count); + ExceptionEventCounter delegate; + v8::debug::SetDebugDelegate(isolate, &delegate); + CHECK_EQ(0, delegate.exception_event_count); - CompileRun( - "function f() { return f(); }" - "try { f() } catch {}"); + CompileRun( + "function f() { return f(); }" + "try { f() } catch {}"); - CHECK_EQ(0, delegate.exception_event_count); + CHECK_EQ(0, delegate.exception_event_count); + } + isolate->Exit(); + isolate->Dispose(); } // Tests that break event is sent when event listener is reset. @@ -4165,7 +4175,7 @@ TEST(DebugPromiseInterceptedByTryCatch) { DebugEventExpectNoException delegate; v8::debug::SetDebugDelegate(isolate, &delegate); v8::Local<v8::Context> context = env.local(); - ChangeBreakOnException(false, true); + ChangeBreakOnException(isolate, false, true); v8::Local<v8::FunctionTemplate> fun = v8::FunctionTemplate::New(isolate, TryCatchWrappedThrowCallback); @@ -5347,7 +5357,7 @@ TEST(TerminateOnResumeRunJavaScriptAtBreakpoint) { TEST(TerminateOnResumeAtException) { LocalContext env; v8::HandleScope scope(env->GetIsolate()); - ChangeBreakOnException(true, true); + ChangeBreakOnException(env->GetIsolate(), true, true); SetTerminateOnResumeDelegate delegate; v8::debug::SetDebugDelegate(env->GetIsolate(), &delegate); v8::Local<v8::Context> context = env.local(); @@ -5429,7 +5439,7 @@ TEST(TerminateOnResumeAtBreakOnEntryUserDefinedFunction) { TEST(TerminateOnResumeAtUnhandledRejection) { LocalContext env; v8::HandleScope scope(env->GetIsolate()); - ChangeBreakOnException(true, true); + ChangeBreakOnException(env->GetIsolate(), true, true); SetTerminateOnResumeDelegate delegate; v8::debug::SetDebugDelegate(env->GetIsolate(), &delegate); v8::Local<v8::Context> context = env.local(); @@ -5477,7 +5487,7 @@ TEST(TerminateOnResumeAtUnhandledRejectionCppImpl) { LocalContext env; v8::Isolate* isolate = env->GetIsolate(); v8::HandleScope scope(env->GetIsolate()); - ChangeBreakOnException(true, true); + ChangeBreakOnException(isolate, true, true); SetTerminateOnResumeDelegate delegate; auto data = std::make_pair(isolate, &env); v8::debug::SetDebugDelegate(env->GetIsolate(), &delegate); @@ -5513,7 +5523,7 @@ TEST(TerminateOnResumeFromMicrotask) { v8::HandleScope scope(env->GetIsolate()); SetTerminateOnResumeDelegate delegate( SetTerminateOnResumeDelegate::kPerformMicrotaskCheckpointAtBreakpoint); - ChangeBreakOnException(true, true); + ChangeBreakOnException(env->GetIsolate(), true, true); v8::debug::SetDebugDelegate(env->GetIsolate(), &delegate); { v8::TryCatch try_catch(env->GetIsolate()); @@ -5588,7 +5598,7 @@ class SemaphoreTriggerOnBreak : public v8::debug::DebugDelegate { TEST(TerminateOnResumeFromOtherThread) { LocalContext env; v8::HandleScope scope(env->GetIsolate()); - ChangeBreakOnException(true, true); + ChangeBreakOnException(env->GetIsolate(), true, true); SemaphoreTriggerOnBreak delegate; v8::debug::SetDebugDelegate(env->GetIsolate(), &delegate); @@ -5645,7 +5655,7 @@ class InterruptionBreakRightNow : public v8::base::Thread { TEST(TerminateOnResumeAtInterruptFromOtherThread) { LocalContext env; v8::HandleScope scope(env->GetIsolate()); - ChangeBreakOnException(true, true); + ChangeBreakOnException(env->GetIsolate(), true, true); SetTerminateOnResumeDelegate delegate; v8::debug::SetDebugDelegate(env->GetIsolate(), &delegate); diff --git a/deps/v8/test/cctest/test-disasm-riscv64.cc b/deps/v8/test/cctest/test-disasm-riscv64.cc index c5c7a2eb41..7c665a5cbb 100644 --- a/deps/v8/test/cctest/test-disasm-riscv64.cc +++ b/deps/v8/test/cctest/test-disasm-riscv64.cc @@ -465,6 +465,7 @@ TEST(PSEUDO) { } TEST(RV64C) { + i::FLAG_riscv_c_extension = true; SET_UP(); COMPARE(c_nop(), "00000001 nop"); diff --git a/deps/v8/test/cctest/test-disasm-x64.cc b/deps/v8/test/cctest/test-disasm-x64.cc index e86eb33c9c..3e0d8b14f1 100644 --- a/deps/v8/test/cctest/test-disasm-x64.cc +++ b/deps/v8/test/cctest/test-disasm-x64.cc @@ -559,6 +559,8 @@ TEST(DisasmX64) { __ cmpltps(xmm5, Operand(rbx, rcx, times_4, 10000)); __ cmpleps(xmm5, xmm1); __ cmpleps(xmm5, Operand(rbx, rcx, times_4, 10000)); + __ cmpunordps(xmm5, xmm1); + __ cmpunordps(xmm5, Operand(rbx, rcx, times_4, 10000)); __ cmpneqps(xmm5, xmm1); __ cmpneqps(xmm5, Operand(rbx, rcx, times_4, 10000)); __ cmpnltps(xmm5, xmm1); @@ -573,6 +575,8 @@ TEST(DisasmX64) { __ cmpltpd(xmm5, Operand(rbx, rcx, times_4, 10000)); __ cmplepd(xmm5, xmm1); __ cmplepd(xmm5, Operand(rbx, rcx, times_4, 10000)); + __ cmpunordpd(xmm5, xmm1); + __ cmpunordpd(xmm5, Operand(rbx, rcx, times_4, 10000)); __ cmpneqpd(xmm5, xmm1); __ cmpneqpd(xmm5, Operand(rbx, rcx, times_4, 10000)); __ cmpnltpd(xmm5, xmm1); @@ -727,6 +731,8 @@ TEST(DisasmX64) { __ vcmpltps(xmm5, xmm4, Operand(rbx, rcx, times_4, 10000)); __ vcmpleps(xmm5, xmm4, xmm1); __ vcmpleps(xmm5, xmm4, Operand(rbx, rcx, times_4, 10000)); + __ vcmpunordps(xmm5, xmm4, xmm1); + __ vcmpunordps(xmm5, xmm4, Operand(rbx, rcx, times_4, 10000)); __ vcmpneqps(xmm5, xmm4, xmm1); __ vcmpneqps(xmm5, xmm4, Operand(rbx, rcx, times_4, 10000)); __ vcmpnltps(xmm5, xmm4, xmm1); @@ -741,6 +747,8 @@ TEST(DisasmX64) { __ vcmpltpd(xmm5, xmm4, Operand(rbx, rcx, times_4, 10000)); __ vcmplepd(xmm5, xmm4, xmm1); __ vcmplepd(xmm5, xmm4, Operand(rbx, rcx, times_4, 10000)); + __ vcmpunordpd(xmm5, xmm4, xmm1); + __ vcmpunordpd(xmm5, xmm4, Operand(rbx, rcx, times_4, 10000)); __ vcmpneqpd(xmm5, xmm4, xmm1); __ vcmpneqpd(xmm5, xmm4, Operand(rbx, rcx, times_4, 10000)); __ vcmpnltpd(xmm5, xmm4, xmm1); diff --git a/deps/v8/test/cctest/test-double.cc b/deps/v8/test/cctest/test-double.cc index e2f2ddcbfb..8e78b63af5 100644 --- a/deps/v8/test/cctest/test-double.cc +++ b/deps/v8/test/cctest/test-double.cc @@ -156,7 +156,7 @@ TEST(NormalizedBoundaries) { // 1.5 does not have a significand of the form 2^p (for some p). // Therefore its boundaries are at the same distance. CHECK(diy_fp.f() - boundary_minus.f() == boundary_plus.f() - diy_fp.f()); - CHECK((1 << 10) == diy_fp.f() - boundary_minus.f()); // NOLINT + CHECK((1 << 10) == diy_fp.f() - boundary_minus.f()); diy_fp = Double(1.0).AsNormalizedDiyFp(); Double(1.0).NormalizedBoundaries(&boundary_minus, &boundary_plus); @@ -165,8 +165,8 @@ TEST(NormalizedBoundaries) { // 1.0 does have a significand of the form 2^p (for some p). // Therefore its lower boundary is twice as close as the upper boundary. CHECK_GT(boundary_plus.f() - diy_fp.f(), diy_fp.f() - boundary_minus.f()); - CHECK((1 << 9) == diy_fp.f() - boundary_minus.f()); // NOLINT - CHECK((1 << 10) == boundary_plus.f() - diy_fp.f()); // NOLINT + CHECK((1 << 9) == diy_fp.f() - boundary_minus.f()); + CHECK((1 << 10) == boundary_plus.f() - diy_fp.f()); uint64_t min_double64 = 0x0000'0000'0000'0001; diy_fp = Double(min_double64).AsNormalizedDiyFp(); @@ -177,8 +177,7 @@ TEST(NormalizedBoundaries) { // Therefore its boundaries are at the same distance. CHECK(diy_fp.f() - boundary_minus.f() == boundary_plus.f() - diy_fp.f()); // Denormals have their boundaries much closer. - CHECK((static_cast<uint64_t>(1) << 62) == - diy_fp.f() - boundary_minus.f()); // NOLINT + CHECK((static_cast<uint64_t>(1) << 62) == diy_fp.f() - boundary_minus.f()); uint64_t smallest_normal64 = 0x0010'0000'0000'0000; diy_fp = Double(smallest_normal64).AsNormalizedDiyFp(); @@ -189,7 +188,7 @@ TEST(NormalizedBoundaries) { // Even though the significand is of the form 2^p (for some p), its boundaries // are at the same distance. (This is the only exception). CHECK(diy_fp.f() - boundary_minus.f() == boundary_plus.f() - diy_fp.f()); - CHECK((1 << 10) == diy_fp.f() - boundary_minus.f()); // NOLINT + CHECK((1 << 10) == diy_fp.f() - boundary_minus.f()); uint64_t largest_denormal64 = 0x000F'FFFF'FFFF'FFFF; diy_fp = Double(largest_denormal64).AsNormalizedDiyFp(); @@ -198,7 +197,7 @@ TEST(NormalizedBoundaries) { CHECK_EQ(diy_fp.e(), boundary_minus.e()); CHECK_EQ(diy_fp.e(), boundary_plus.e()); CHECK(diy_fp.f() - boundary_minus.f() == boundary_plus.f() - diy_fp.f()); - CHECK((1 << 11) == diy_fp.f() - boundary_minus.f()); // NOLINT + CHECK((1 << 11) == diy_fp.f() - boundary_minus.f()); uint64_t max_double64 = 0x7FEF'FFFF'FFFF'FFFF; diy_fp = Double(max_double64).AsNormalizedDiyFp(); @@ -208,7 +207,7 @@ TEST(NormalizedBoundaries) { // max-value does not have a significand of the form 2^p (for some p). // Therefore its boundaries are at the same distance. CHECK(diy_fp.f() - boundary_minus.f() == boundary_plus.f() - diy_fp.f()); - CHECK((1 << 10) == diy_fp.f() - boundary_minus.f()); // NOLINT + CHECK((1 << 10) == diy_fp.f() - boundary_minus.f()); } diff --git a/deps/v8/test/cctest/test-factory.cc b/deps/v8/test/cctest/test-factory.cc index 8f261ced4b..a15853ecf0 100644 --- a/deps/v8/test/cctest/test-factory.cc +++ b/deps/v8/test/cctest/test-factory.cc @@ -61,7 +61,7 @@ TEST(Factory_CodeBuilder) { // Create a big function that ends up in CODE_LO_SPACE. const int instruction_size = - MemoryChunkLayout::MaxRegularCodeObjectSize() + 1; + Heap::MaxRegularHeapObjectSize(AllocationType::kCode) + 1; std::unique_ptr<byte[]> instructions(new byte[instruction_size]); CodeDesc desc; diff --git a/deps/v8/test/cctest/test-feedback-vector.cc b/deps/v8/test/cctest/test-feedback-vector.cc index a454d96dd1..868191ddc1 100644 --- a/deps/v8/test/cctest/test-feedback-vector.cc +++ b/deps/v8/test/cctest/test-feedback-vector.cc @@ -184,6 +184,49 @@ TEST(VectorCallICStates) { CHECK_EQ(GENERIC, nexus.ic_state()); } +// Test the Call IC states transfer with Function.prototype.apply +TEST(VectorCallICStateApply) { + if (!i::FLAG_use_ic) return; + if (i::FLAG_always_opt) return; + FLAG_allow_natives_syntax = true; + + CcTest::InitializeVM(); + LocalContext context; + v8::HandleScope scope(context->GetIsolate()); + Isolate* isolate = CcTest::i_isolate(); + // Make sure function f has a call that uses a type feedback slot. + CompileRun( + "var F;" + "%EnsureFeedbackVectorForFunction(foo);" + "function foo() { return F.apply(null, arguments); }" + "F = Math.min;" + "foo();"); + Handle<JSFunction> foo = GetFunction("foo"); + Handle<JSFunction> F = GetFunction("F"); + Handle<FeedbackVector> feedback_vector = + Handle<FeedbackVector>(foo->feedback_vector(), isolate); + FeedbackSlot slot(4); + FeedbackNexus nexus(feedback_vector, slot); + CHECK_EQ(MONOMORPHIC, nexus.ic_state()); + CHECK_EQ(CallFeedbackContent::kReceiver, nexus.GetCallFeedbackContent()); + HeapObject heap_object; + CHECK(nexus.GetFeedback()->GetHeapObjectIfWeak(&heap_object)); + CHECK_EQ(*F, heap_object); + + CompileRun( + "F = Math.max;" + "foo();"); + CHECK_EQ(MONOMORPHIC, nexus.ic_state()); + CHECK_EQ(CallFeedbackContent::kTarget, nexus.GetCallFeedbackContent()); + CHECK(nexus.GetFeedback()->GetHeapObjectIfWeak(&heap_object)); + CHECK_EQ(*isolate->function_prototype_apply(), heap_object); + + CompileRun( + "F.apply = (function () { return; });" + "foo();"); + CHECK_EQ(GENERIC, nexus.ic_state()); +} + TEST(VectorCallFeedback) { if (!i::FLAG_use_ic) return; if (i::FLAG_always_opt) return; diff --git a/deps/v8/test/cctest/test-field-type-tracking.cc b/deps/v8/test/cctest/test-field-type-tracking.cc index f387fd2953..8ae7be6233 100644 --- a/deps/v8/test/cctest/test-field-type-tracking.cc +++ b/deps/v8/test/cctest/test-field-type-tracking.cc @@ -1115,9 +1115,9 @@ void TestReconfigureDataFieldAttribute_GeneralizeField( // Reconfigure attributes of property |kSplitProp| of |map2| to NONE, which // should generalize representations in |map1|. - Handle<Map> new_map = - Map::ReconfigureExistingProperty(isolate, map2, InternalIndex(kSplitProp), - kData, NONE, PropertyConstness::kConst); + Handle<Map> new_map = MapUpdater::ReconfigureExistingProperty( + isolate, map2, InternalIndex(kSplitProp), kData, NONE, + PropertyConstness::kConst); // |map2| should be mosly left unchanged but marked unstable and if the // source property was constant it should also be transitioned to kMutable. @@ -1503,9 +1503,9 @@ static void TestReconfigureProperty_CustomPropertyAfterTargetMap( // Reconfigure attributes of property |kSplitProp| of |map2| to NONE, which // should generalize representations in |map1|. - Handle<Map> new_map = - Map::ReconfigureExistingProperty(isolate, map2, InternalIndex(kSplitProp), - kData, NONE, PropertyConstness::kConst); + Handle<Map> new_map = MapUpdater::ReconfigureExistingProperty( + isolate, map2, InternalIndex(kSplitProp), kData, NONE, + PropertyConstness::kConst); // |map2| should be left unchanged but marked unstable. CHECK(!map2->is_stable()); @@ -2551,9 +2551,9 @@ struct ReconfigureAsDataPropertyOperator { expectations->SetDataField(descriptor_.as_int(), PropertyConstness::kMutable, representation_, heap_type_); - return Map::ReconfigureExistingProperty(isolate, map, descriptor_, kData, - attributes_, - PropertyConstness::kConst); + return MapUpdater::ReconfigureExistingProperty(isolate, map, descriptor_, + kData, attributes_, + PropertyConstness::kConst); } }; @@ -2569,9 +2569,9 @@ struct ReconfigureAsAccessorPropertyOperator { Handle<Map> DoTransition(Isolate* isolate, Expectations* expectations, Handle<Map> map) { expectations->SetAccessorField(descriptor_.as_int()); - return Map::ReconfigureExistingProperty(isolate, map, descriptor_, - kAccessor, attributes_, - PropertyConstness::kConst); + return MapUpdater::ReconfigureExistingProperty(isolate, map, descriptor_, + kAccessor, attributes_, + PropertyConstness::kConst); } }; diff --git a/deps/v8/test/cctest/test-global-handles.cc b/deps/v8/test/cctest/test-global-handles.cc index acb5de444f..0ff266621b 100644 --- a/deps/v8/test/cctest/test-global-handles.cc +++ b/deps/v8/test/cctest/test-global-handles.cc @@ -388,6 +388,8 @@ TEST(TracedGlobalToUnmodifiedJSApiObjectDiesOnScavenge) { } TEST(TracedGlobalToJSApiObjectWithIdentityHashSurvivesScavenge) { + if (FLAG_single_generation) return; + ManualGCScope manual_gc; CcTest::InitializeVM(); Isolate* i_isolate = CcTest::i_isolate(); @@ -441,6 +443,7 @@ TEST(WeakHandleToUnmodifiedJSApiObjectSurvivesMarkCompactWhenInHandle) { } TEST(TracedGlobalToJSApiObjectWithModifiedMapSurvivesScavenge) { + if (FLAG_single_generation) return; CcTest::InitializeVM(); v8::Isolate* isolate = CcTest::isolate(); LocalContext context; @@ -462,6 +465,7 @@ TEST(TracedGlobalToJSApiObjectWithModifiedMapSurvivesScavenge) { } TEST(TracedGlobalTOJsApiObjectWithElementsSurvivesScavenge) { + if (FLAG_single_generation) return; CcTest::InitializeVM(); v8::Isolate* isolate = CcTest::isolate(); LocalContext context; diff --git a/deps/v8/test/cctest/test-heap-profiler.cc b/deps/v8/test/cctest/test-heap-profiler.cc index d84e817051..9f80891a58 100644 --- a/deps/v8/test/cctest/test-heap-profiler.cc +++ b/deps/v8/test/cctest/test-heap-profiler.cc @@ -508,6 +508,34 @@ TEST(HeapSnapshotHeapNumbers) { CHECK_EQ(v8::HeapGraphNode::kHeapNumber, b->GetType()); } +TEST(HeapSnapshotHeapNumbersCaptureNumericValue) { + LocalContext env; + v8::HandleScope scope(env->GetIsolate()); + v8::HeapProfiler* heap_profiler = env->GetIsolate()->GetHeapProfiler(); + CompileRun( + "a = 1; // a is Smi\n" + "b = 2.5; // b is HeapNumber"); + const v8::HeapSnapshot* snapshot = + heap_profiler->TakeHeapSnapshot(nullptr, nullptr, true, true); + CHECK(ValidateSnapshot(snapshot)); + const v8::HeapGraphNode* global = GetGlobalObject(snapshot); + const v8::HeapGraphNode* a = + GetProperty(env->GetIsolate(), global, v8::HeapGraphEdge::kProperty, "a"); + CHECK(a); + CHECK_EQ(1, a->GetChildrenCount()); + v8::String::Utf8Value value_a(CcTest::isolate(), + a->GetChild(0)->GetToNode()->GetName()); + CHECK_EQ(0, strcmp("1", *value_a)); + + const v8::HeapGraphNode* b = + GetProperty(env->GetIsolate(), global, v8::HeapGraphEdge::kProperty, "b"); + CHECK(b); + CHECK_EQ(2, b->GetChildrenCount()); + v8::String::Utf8Value value_b(CcTest::isolate(), + b->GetChild(0)->GetToNode()->GetName()); + CHECK_EQ(0, strcmp("2.5", *value_b)); +} + TEST(HeapSnapshotHeapBigInts) { LocalContext env; v8::HandleScope scope(env->GetIsolate()); @@ -1809,6 +1837,7 @@ TEST(NativeSnapshotObjectId) { } TEST(NativeSnapshotObjectIdMoving) { + if (i::FLAG_enable_third_party_heap) return; // Required to allow moving specific objects. i::FLAG_manual_evacuation_candidates_selection = true; @@ -3891,7 +3920,7 @@ TEST(SamplingHeapProfilerPretenuredInlineAllocations) { if (!CcTest::i_isolate()->use_optimizer() || i::FLAG_always_opt) return; if (i::FLAG_gc_global || i::FLAG_stress_compaction || i::FLAG_stress_incremental_marking || - i::FLAG_stress_concurrent_allocation) { + i::FLAG_stress_concurrent_allocation || i::FLAG_single_generation) { return; } diff --git a/deps/v8/test/cctest/test-inobject-slack-tracking.cc b/deps/v8/test/cctest/test-inobject-slack-tracking.cc index 0a88302cd9..9f7f91130f 100644 --- a/deps/v8/test/cctest/test-inobject-slack-tracking.cc +++ b/deps/v8/test/cctest/test-inobject-slack-tracking.cc @@ -101,8 +101,9 @@ bool IsObjectShrinkable(JSObject obj) { int unused = obj.map().UnusedPropertyFields(); if (unused == 0) return false; + Address packed_filler = MapWord::FromMap(*filler_map).ptr(); for (int i = inobject_properties - unused; i < inobject_properties; i++) { - if (*filler_map != GetFieldValue(obj, i)) { + if (packed_filler != GetFieldValue(obj, i).ptr()) { return false; } } @@ -838,6 +839,8 @@ TEST(ObjectLiteralPropertyBackingStoreSize) { } TEST(SlowModeSubclass) { + if (FLAG_stress_concurrent_allocation) return; + // Avoid eventual completion of in-object slack tracking. FLAG_always_opt = false; CcTest::InitializeVM(); diff --git a/deps/v8/test/cctest/test-js-to-wasm.cc b/deps/v8/test/cctest/test-js-to-wasm.cc index d0f5122a32..21cfa77b21 100644 --- a/deps/v8/test/cctest/test-js-to-wasm.cc +++ b/deps/v8/test/cctest/test-js-to-wasm.cc @@ -262,12 +262,13 @@ enum TestMode { kJSToWasmInliningDisabled, kJSToWasmInliningEnabled }; class FastJSWasmCallTester { public: FastJSWasmCallTester() - : allow_natives_syntax_(&i::FLAG_allow_natives_syntax, true), - inline_js_wasm_calls_(&i::FLAG_turbo_inline_js_wasm_calls, true), - stress_background_compile_(&i::FLAG_stress_background_compile, false), - allocator_(), + : allocator_(), zone_(&allocator_, ZONE_NAME), - builder_(zone_.New<WasmModuleBuilder>(&zone_)) {} + builder_(zone_.New<WasmModuleBuilder>(&zone_)) { + i::FLAG_allow_natives_syntax = true; + i::FLAG_turbo_inline_js_wasm_calls = true; + i::FLAG_stress_background_compile = false; + } void DeclareCallback(const char* name, FunctionSig* signature, const char* module) { @@ -591,23 +592,25 @@ class FastJSWasmCallTester { v8::Local<v8::Value> CompileRunWithJSWasmCallNodeObserver( const std::string& js_code) { + // Note: Make sure to not capture stack locations (e.g. `this`) here since + // these lambdas are executed on another thread. + const auto test_mode = test_mode_; compiler::ModificationObserver js_wasm_call_observer( [](const compiler::Node* node) { CHECK_EQ(compiler::IrOpcode::kJSCall, node->opcode()); }, - [this](const compiler::Node* node, - const compiler::ObservableNodeState& old_state) + [test_mode](const compiler::Node* node, + const compiler::ObservableNodeState& old_state) -> compiler::NodeObserver::Observation { if (old_state.opcode() != node->opcode()) { CHECK_EQ(compiler::IrOpcode::kJSCall, old_state.opcode()); // JS-to-Wasm inlining is disabled when targeting 32 bits if the // Wasm function signature contains an I64. - if (test_mode_ == kJSToWasmInliningEnabled) { - CHECK_EQ(compiler::IrOpcode::kJSWasmCall, node->opcode()); - } else { - CHECK_EQ(compiler::IrOpcode::kCall, node->opcode()); - } + CHECK_EQ(test_mode == kJSToWasmInliningEnabled + ? compiler::IrOpcode::kJSWasmCall + : compiler::IrOpcode::kCall, + node->opcode()); return compiler::NodeObserver::Observation::kStop; } @@ -740,9 +743,6 @@ class FastJSWasmCallTester { return string_stream.str(); } - i::FlagScope<bool> allow_natives_syntax_; - i::FlagScope<bool> inline_js_wasm_calls_; - i::FlagScope<bool> stress_background_compile_; AccountingAllocator allocator_; Zone zone_; WasmModuleBuilder* builder_; diff --git a/deps/v8/test/cctest/test-js-weak-refs.cc b/deps/v8/test/cctest/test-js-weak-refs.cc index 7838e8ae25..411bfa0858 100644 --- a/deps/v8/test/cctest/test-js-weak-refs.cc +++ b/deps/v8/test/cctest/test-js-weak-refs.cc @@ -892,6 +892,11 @@ TEST(JSWeakRefScavengedInWorklist) { weak_ref = inner_scope.CloseAndEscape(inner_weak_ref); } + // Store weak_ref in Global such that it is part of the root set when + // starting incremental marking. + v8::Global<Value> global_weak_ref( + CcTest::isolate(), Utils::ToLocal(Handle<Object>::cast(weak_ref))); + // Do marking. This puts the WeakRef above into the js_weak_refs worklist // since its target isn't marked. CHECK( @@ -934,6 +939,10 @@ TEST(JSWeakRefTenuredInWorklist) { weak_ref = inner_scope.CloseAndEscape(inner_weak_ref); } + // Store weak_ref such that it is part of the root set when starting + // incremental marking. + v8::Global<Value> global_weak_ref( + CcTest::isolate(), Utils::ToLocal(Handle<Object>::cast(weak_ref))); JSWeakRef old_weak_ref_location = *weak_ref; // Do marking. This puts the WeakRef above into the js_weak_refs worklist diff --git a/deps/v8/test/cctest/test-log-stack-tracer.cc b/deps/v8/test/cctest/test-log-stack-tracer.cc index 0f7b9a0fcc..61e9a2b965 100644 --- a/deps/v8/test/cctest/test-log-stack-tracer.cc +++ b/deps/v8/test/cctest/test-log-stack-tracer.cc @@ -245,7 +245,7 @@ static void CFuncDoTrace(byte dummy_param) { #elif V8_CC_MSVC // Approximate a frame pointer address. We compile without base pointers, // so we can't trust ebp/rbp. - fp = reinterpret_cast<Address>(&dummy_param) - 2 * sizeof(void*); // NOLINT + fp = reinterpret_cast<Address>(&dummy_param) - 2 * sizeof(void*); #else #error Unexpected platform. #endif diff --git a/deps/v8/test/cctest/test-macro-assembler-mips.cc b/deps/v8/test/cctest/test-macro-assembler-mips.cc index a149c0cca9..03d778ef24 100644 --- a/deps/v8/test/cctest/test-macro-assembler-mips.cc +++ b/deps/v8/test/cctest/test-macro-assembler-mips.cc @@ -26,7 +26,8 @@ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <stdlib.h> -#include <iostream> // NOLINT(readability/streams) + +#include <iostream> #include "src/api/api-inl.h" #include "src/base/utils/random-number-generator.h" diff --git a/deps/v8/test/cctest/test-macro-assembler-mips64.cc b/deps/v8/test/cctest/test-macro-assembler-mips64.cc index 4b91b5b0e9..69cfa0cfda 100644 --- a/deps/v8/test/cctest/test-macro-assembler-mips64.cc +++ b/deps/v8/test/cctest/test-macro-assembler-mips64.cc @@ -26,7 +26,8 @@ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <stdlib.h> -#include <iostream> // NOLINT(readability/streams) + +#include <iostream> #include "src/codegen/assembler-inl.h" #include "src/codegen/macro-assembler.h" diff --git a/deps/v8/test/cctest/test-macro-assembler-riscv64.cc b/deps/v8/test/cctest/test-macro-assembler-riscv64.cc index a5bb94166c..3817026a24 100644 --- a/deps/v8/test/cctest/test-macro-assembler-riscv64.cc +++ b/deps/v8/test/cctest/test-macro-assembler-riscv64.cc @@ -27,7 +27,7 @@ #include <stdlib.h> -#include <iostream> // NOLINT(readability/streams) +#include <iostream> #include "src/base/utils/random-number-generator.h" #include "src/codegen/assembler-inl.h" @@ -1550,6 +1550,21 @@ TEST(DeoptExitSizeIsFixed) { } } +TEST(AddWithImm) { + CcTest::InitializeVM(); +#define Test(Op, Input, Expected) \ + { \ + auto fn = [](MacroAssembler& masm) { __ Op(a0, zero_reg, Input); }; \ + CHECK_EQ(static_cast<int64_t>(Expected), GenAndRunTest(fn)); \ + } + + Test(Add64, 4095, 4095); + Test(Add32, 4095, 4095); + Test(Sub64, 4095, -4095); + Test(Sub32, 4095, -4095); +#undef Test +} + #undef __ } // namespace internal diff --git a/deps/v8/test/cctest/test-macro-assembler-x64.cc b/deps/v8/test/cctest/test-macro-assembler-x64.cc index b0df384376..00ef735fc2 100644 --- a/deps/v8/test/cctest/test-macro-assembler-x64.cc +++ b/deps/v8/test/cctest/test-macro-assembler-x64.cc @@ -61,14 +61,14 @@ static void EntryCode(MacroAssembler* masm) { // Smi constant register is callee save. __ pushq(kRootRegister); #ifdef V8_COMPRESS_POINTERS_IN_SHARED_CAGE - __ pushq(kPointerCageBaseRegister); + __ pushq(kPtrComprCageBaseRegister); #endif __ InitializeRootRegister(); } static void ExitCode(MacroAssembler* masm) { #ifdef V8_COMPRESS_POINTERS_IN_SHARED_CAGE - __ popq(kPointerCageBaseRegister); + __ popq(kPtrComprCageBaseRegister); #endif __ popq(kRootRegister); } @@ -101,7 +101,7 @@ TEST(Smi) { static void TestMoveSmi(MacroAssembler* masm, Label* exit, int id, Smi value) { __ movl(rax, Immediate(id)); __ Move(rcx, value); - __ Set(rdx, static_cast<intptr_t>(value.ptr())); + __ Move(rdx, static_cast<intptr_t>(value.ptr())); __ cmpq(rcx, rdx); __ j(not_equal, exit); } @@ -258,35 +258,35 @@ TEST(SmiTag) { __ movq(rax, Immediate(1)); // Test number. __ movq(rcx, Immediate(0)); __ SmiTag(rcx); - __ Set(rdx, Smi::zero().ptr()); + __ Move(rdx, Smi::zero().ptr()); __ cmp_tagged(rcx, rdx); __ j(not_equal, &exit); __ movq(rax, Immediate(2)); // Test number. __ movq(rcx, Immediate(1024)); __ SmiTag(rcx); - __ Set(rdx, Smi::FromInt(1024).ptr()); + __ Move(rdx, Smi::FromInt(1024).ptr()); __ cmp_tagged(rcx, rdx); __ j(not_equal, &exit); __ movq(rax, Immediate(3)); // Test number. __ movq(rcx, Immediate(-1)); __ SmiTag(rcx); - __ Set(rdx, Smi::FromInt(-1).ptr()); + __ Move(rdx, Smi::FromInt(-1).ptr()); __ cmp_tagged(rcx, rdx); __ j(not_equal, &exit); __ movq(rax, Immediate(4)); // Test number. __ movq(rcx, Immediate(Smi::kMaxValue)); __ SmiTag(rcx); - __ Set(rdx, Smi::FromInt(Smi::kMaxValue).ptr()); + __ Move(rdx, Smi::FromInt(Smi::kMaxValue).ptr()); __ cmp_tagged(rcx, rdx); __ j(not_equal, &exit); __ movq(rax, Immediate(5)); // Test number. __ movq(rcx, Immediate(Smi::kMinValue)); __ SmiTag(rcx); - __ Set(rdx, Smi::FromInt(Smi::kMinValue).ptr()); + __ Move(rdx, Smi::FromInt(Smi::kMinValue).ptr()); __ cmp_tagged(rcx, rdx); __ j(not_equal, &exit); @@ -295,35 +295,35 @@ TEST(SmiTag) { __ movq(rax, Immediate(6)); // Test number. __ movq(rcx, Immediate(0)); __ SmiTag(r8, rcx); - __ Set(rdx, Smi::zero().ptr()); + __ Move(rdx, Smi::zero().ptr()); __ cmp_tagged(r8, rdx); __ j(not_equal, &exit); __ movq(rax, Immediate(7)); // Test number. __ movq(rcx, Immediate(1024)); __ SmiTag(r8, rcx); - __ Set(rdx, Smi::FromInt(1024).ptr()); + __ Move(rdx, Smi::FromInt(1024).ptr()); __ cmp_tagged(r8, rdx); __ j(not_equal, &exit); __ movq(rax, Immediate(8)); // Test number. __ movq(rcx, Immediate(-1)); __ SmiTag(r8, rcx); - __ Set(rdx, Smi::FromInt(-1).ptr()); + __ Move(rdx, Smi::FromInt(-1).ptr()); __ cmp_tagged(r8, rdx); __ j(not_equal, &exit); __ movq(rax, Immediate(9)); // Test number. __ movq(rcx, Immediate(Smi::kMaxValue)); __ SmiTag(r8, rcx); - __ Set(rdx, Smi::FromInt(Smi::kMaxValue).ptr()); + __ Move(rdx, Smi::FromInt(Smi::kMaxValue).ptr()); __ cmp_tagged(r8, rdx); __ j(not_equal, &exit); __ movq(rax, Immediate(10)); // Test number. __ movq(rcx, Immediate(Smi::kMinValue)); __ SmiTag(r8, rcx); - __ Set(rdx, Smi::FromInt(Smi::kMinValue).ptr()); + __ Move(rdx, Smi::FromInt(Smi::kMinValue).ptr()); __ cmp_tagged(r8, rdx); __ j(not_equal, &exit); @@ -425,7 +425,7 @@ void TestSmiIndex(MacroAssembler* masm, Label* exit, int id, int x) { SmiIndex index = masm->SmiToIndex(rdx, rcx, i); CHECK(index.reg == rcx || index.reg == rdx); __ shlq(index.reg, Immediate(index.scale)); - __ Set(r8, static_cast<intptr_t>(x) << i); + __ Move(r8, static_cast<intptr_t>(x) << i); __ cmpq(index.reg, r8); __ j(not_equal, exit); __ incq(rax); @@ -433,7 +433,7 @@ void TestSmiIndex(MacroAssembler* masm, Label* exit, int id, int x) { index = masm->SmiToIndex(rcx, rcx, i); CHECK(index.reg == rcx); __ shlq(rcx, Immediate(index.scale)); - __ Set(r8, static_cast<intptr_t>(x) << i); + __ Move(r8, static_cast<intptr_t>(x) << i); __ cmpq(rcx, r8); __ j(not_equal, exit); __ incq(rax); diff --git a/deps/v8/test/cctest/test-mementos.cc b/deps/v8/test/cctest/test-mementos.cc index 2e21b7f6b5..678065eca2 100644 --- a/deps/v8/test/cctest/test-mementos.cc +++ b/deps/v8/test/cctest/test-mementos.cc @@ -61,7 +61,7 @@ static void SetUpNewSpaceWithPoisonedMementoAtTop() { TEST(Regress340063) { CcTest::InitializeVM(); - if (!i::FLAG_allocation_site_pretenuring) return; + if (!i::FLAG_allocation_site_pretenuring || FLAG_single_generation) return; v8::HandleScope scope(CcTest::isolate()); SetUpNewSpaceWithPoisonedMementoAtTop(); @@ -74,7 +74,7 @@ TEST(Regress340063) { TEST(Regress470390) { CcTest::InitializeVM(); - if (!i::FLAG_allocation_site_pretenuring) return; + if (!i::FLAG_allocation_site_pretenuring || FLAG_single_generation) return; v8::HandleScope scope(CcTest::isolate()); SetUpNewSpaceWithPoisonedMementoAtTop(); @@ -91,7 +91,7 @@ TEST(Regress470390) { TEST(BadMementoAfterTopForceScavenge) { CcTest::InitializeVM(); - if (!i::FLAG_allocation_site_pretenuring) return; + if (!i::FLAG_allocation_site_pretenuring || FLAG_single_generation) return; v8::HandleScope scope(CcTest::isolate()); SetUpNewSpaceWithPoisonedMementoAtTop(); diff --git a/deps/v8/test/cctest/test-parsing.cc b/deps/v8/test/cctest/test-parsing.cc index 1c55995efa..2d56b72a8f 100644 --- a/deps/v8/test/cctest/test-parsing.cc +++ b/deps/v8/test/cctest/test-parsing.cc @@ -7157,6 +7157,16 @@ TEST(ForOfExpressionError) { RunParserSyncTest(context_data, data, kError); } +TEST(ForOfAsync) { + const char* context_data[][2] = {{"", ""}, + {"'use strict';", ""}, + {"function foo(){ 'use strict';", "}"}, + {nullptr, nullptr}}; + + const char* data[] = {"for(\\u0061sync of []) {}", nullptr}; + + RunParserSyncTest(context_data, data, kSuccess); +} TEST(InvalidUnicodeEscapes) { const char* context_data[][2] = { diff --git a/deps/v8/test/cctest/test-poison-disasm-arm64.cc b/deps/v8/test/cctest/test-poison-disasm-arm64.cc index 48b72a004f..cec69b6e9d 100644 --- a/deps/v8/test/cctest/test-poison-disasm-arm64.cc +++ b/deps/v8/test/cctest/test-poison-disasm-arm64.cc @@ -29,7 +29,11 @@ TEST(DisasmPoisonMonomorphicLoad) { i::FLAG_allow_natives_syntax = true; i::FLAG_untrusted_code_mitigations = true; +#ifdef V8_ENABLE_DEBUG_CODE i::FLAG_debug_code = false; +#else + STATIC_ASSERT(i::FLAG_debug_code == false); +#endif CcTest::InitializeVM(); v8::HandleScope scope(CcTest::isolate()); @@ -79,7 +83,11 @@ TEST(DisasmPoisonPolymorphicLoad) { i::FLAG_allow_natives_syntax = true; i::FLAG_untrusted_code_mitigations = true; +#ifdef V8_ENABLE_DEBUG_CODE i::FLAG_debug_code = false; +#else + STATIC_ASSERT(i::FLAG_debug_code == false); +#endif CcTest::InitializeVM(); v8::HandleScope scope(CcTest::isolate()); diff --git a/deps/v8/test/cctest/test-ptr-compr-cage.cc b/deps/v8/test/cctest/test-ptr-compr-cage.cc new file mode 100644 index 0000000000..e5be7fb29c --- /dev/null +++ b/deps/v8/test/cctest/test-ptr-compr-cage.cc @@ -0,0 +1,175 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "src/common/globals.h" +#include "src/execution/isolate-inl.h" +#include "src/heap/heap-inl.h" +#include "test/cctest/cctest.h" + +#ifdef V8_COMPRESS_POINTERS + +namespace v8 { +namespace internal { + +UNINITIALIZED_TEST(PtrComprCageAndIsolateRoot) { + v8::Isolate::CreateParams create_params; + create_params.array_buffer_allocator = CcTest::array_buffer_allocator(); + + v8::Isolate* isolate1 = v8::Isolate::New(create_params); + Isolate* i_isolate1 = reinterpret_cast<Isolate*>(isolate1); + v8::Isolate* isolate2 = v8::Isolate::New(create_params); + Isolate* i_isolate2 = reinterpret_cast<Isolate*>(isolate2); + +#ifdef V8_COMPRESS_POINTERS_IN_ISOLATE_CAGE + CHECK_EQ(i_isolate1->isolate_root(), i_isolate1->cage_base()); + CHECK_EQ(i_isolate2->isolate_root(), i_isolate2->cage_base()); + CHECK_NE(i_isolate1->cage_base(), i_isolate2->cage_base()); +#endif + +#ifdef V8_COMPRESS_POINTERS_IN_SHARED_CAGE + CHECK_NE(i_isolate1->isolate_root(), i_isolate1->cage_base()); + CHECK_NE(i_isolate2->isolate_root(), i_isolate2->cage_base()); + CHECK_NE(i_isolate1->isolate_root(), i_isolate2->isolate_root()); + CHECK_EQ(i_isolate1->cage_base(), i_isolate2->cage_base()); +#endif + + isolate1->Dispose(); + isolate2->Dispose(); +} + +UNINITIALIZED_TEST(PtrComprCageCodeRange) { + v8::Isolate::CreateParams create_params; + create_params.array_buffer_allocator = CcTest::array_buffer_allocator(); + + v8::Isolate* isolate = v8::Isolate::New(create_params); + Isolate* i_isolate = reinterpret_cast<Isolate*>(isolate); + + VirtualMemoryCage* cage = i_isolate->GetPtrComprCage(); + if (i_isolate->RequiresCodeRange()) { + CHECK(!i_isolate->heap()->code_region().is_empty()); + CHECK(cage->reservation()->InVM(i_isolate->heap()->code_region().begin(), + i_isolate->heap()->code_region().size())); + } + + isolate->Dispose(); +} + +#ifdef V8_COMPRESS_POINTERS_IN_SHARED_CAGE +UNINITIALIZED_TEST(SharedPtrComprCage) { + v8::Isolate::CreateParams create_params; + create_params.array_buffer_allocator = CcTest::array_buffer_allocator(); + + v8::Isolate* isolate1 = v8::Isolate::New(create_params); + Isolate* i_isolate1 = reinterpret_cast<Isolate*>(isolate1); + v8::Isolate* isolate2 = v8::Isolate::New(create_params); + Isolate* i_isolate2 = reinterpret_cast<Isolate*>(isolate2); + + Factory* factory1 = i_isolate1->factory(); + Factory* factory2 = i_isolate2->factory(); + + { + HandleScope scope1(i_isolate1); + HandleScope scope2(i_isolate2); + + Handle<FixedArray> isolate1_object = factory1->NewFixedArray(100); + Handle<FixedArray> isolate2_object = factory2->NewFixedArray(100); + + CHECK_EQ(GetPtrComprCageBase(*isolate1_object), + GetPtrComprCageBase(*isolate2_object)); + } + + isolate1->Dispose(); + isolate2->Dispose(); +} + +UNINITIALIZED_TEST(SharedPtrComprCageCodeRange) { + v8::Isolate::CreateParams create_params; + create_params.array_buffer_allocator = CcTest::array_buffer_allocator(); + + v8::Isolate* isolate1 = v8::Isolate::New(create_params); + Isolate* i_isolate1 = reinterpret_cast<Isolate*>(isolate1); + v8::Isolate* isolate2 = v8::Isolate::New(create_params); + Isolate* i_isolate2 = reinterpret_cast<Isolate*>(isolate2); + + if (i_isolate1->RequiresCodeRange() || i_isolate2->RequiresCodeRange()) { + CHECK_EQ(i_isolate1->heap()->code_region(), + i_isolate2->heap()->code_region()); + } + + isolate1->Dispose(); + isolate2->Dispose(); +} + +namespace { +constexpr int kIsolatesToAllocate = 25; + +class IsolateAllocatingThread final : public v8::base::Thread { + public: + IsolateAllocatingThread() + : v8::base::Thread(base::Thread::Options("IsolateAllocatingThread")) {} + + void Run() override { + std::vector<v8::Isolate*> isolates; + v8::Isolate::CreateParams create_params; + create_params.array_buffer_allocator = CcTest::array_buffer_allocator(); + + for (int i = 0; i < kIsolatesToAllocate; i++) { + isolates.push_back(v8::Isolate::New(create_params)); + } + + for (auto* isolate : isolates) { + isolate->Dispose(); + } + } +}; +} // namespace + +UNINITIALIZED_TEST(SharedPtrComprCageRace) { + // Make a bunch of Isolates concurrently as a smoke test against races during + // initialization and de-initialization. + + std::vector<std::unique_ptr<IsolateAllocatingThread>> threads; + constexpr int kThreads = 10; + + for (int i = 0; i < kThreads; i++) { + auto thread = std::make_unique<IsolateAllocatingThread>(); + CHECK(thread->Start()); + threads.push_back(std::move(thread)); + } + + for (auto& thread : threads) { + thread->Join(); + } +} + +#ifdef V8_SHARED_RO_HEAP +UNINITIALIZED_TEST(SharedPtrComprCageImpliesSharedReadOnlyHeap) { + v8::Isolate::CreateParams create_params; + create_params.array_buffer_allocator = CcTest::array_buffer_allocator(); + + v8::Isolate* isolate1 = v8::Isolate::New(create_params); + Isolate* i_isolate1 = reinterpret_cast<Isolate*>(isolate1); + v8::Isolate* isolate2 = v8::Isolate::New(create_params); + Isolate* i_isolate2 = reinterpret_cast<Isolate*>(isolate2); + + CHECK_EQ(i_isolate1->read_only_heap(), i_isolate2->read_only_heap()); + + // Spot check that some read-only roots are the same. + CHECK_EQ(ReadOnlyRoots(i_isolate1).the_hole_value(), + ReadOnlyRoots(i_isolate2).the_hole_value()); + CHECK_EQ(ReadOnlyRoots(i_isolate1).code_map(), + ReadOnlyRoots(i_isolate2).code_map()); + CHECK_EQ(ReadOnlyRoots(i_isolate1).exception(), + ReadOnlyRoots(i_isolate2).exception()); + + isolate1->Dispose(); + isolate2->Dispose(); +} +#endif // V8_SHARED_RO_HEAP +#endif // V8_COMPRESS_POINTERS_IN_SHARED_CAGE + +} // namespace internal +} // namespace v8 + +#endif // V8_COMPRESS_POINTERS diff --git a/deps/v8/test/cctest/test-serialize.cc b/deps/v8/test/cctest/test-serialize.cc index 2884dfd136..5fbc9600e1 100644 --- a/deps/v8/test/cctest/test-serialize.cc +++ b/deps/v8/test/cctest/test-serialize.cc @@ -1849,6 +1849,7 @@ TEST(CodeSerializerLargeCodeObject) { } TEST(CodeSerializerLargeCodeObjectWithIncrementalMarking) { + if (!FLAG_incremental_marking) return; if (FLAG_never_compact) return; ManualGCScope manual_gc_scope; FLAG_always_opt = false; diff --git a/deps/v8/test/cctest/test-simple-riscv64.cc b/deps/v8/test/cctest/test-simple-riscv64.cc index 991c6c09da..c5feda47df 100644 --- a/deps/v8/test/cctest/test-simple-riscv64.cc +++ b/deps/v8/test/cctest/test-simple-riscv64.cc @@ -25,7 +25,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -#include <iostream> // NOLINT(readability/streams) +#include <iostream> #include "src/base/utils/random-number-generator.h" #include "src/codegen/assembler-inl.h" diff --git a/deps/v8/test/cctest/test-strings.cc b/deps/v8/test/cctest/test-strings.cc index 735040a4c5..7c3016eeb8 100644 --- a/deps/v8/test/cctest/test-strings.cc +++ b/deps/v8/test/cctest/test-strings.cc @@ -1087,7 +1087,7 @@ TEST(ExternalShortStringAdd) { " var non_one_byte_chars = " "'\\u1234\\u1234\\u1234\\u1234\\u1234\\u1234\\u1234\\u1234\\u1234\\u1" "234\\u1234\\u1234\\u1234\\u1234\\u1234\\u1234\\u1234\\u1234\\u1234\\" - "u1234';" // NOLINT + "u1234';" " if (one_byte_chars.length != max_length) return 1;" " if (non_one_byte_chars.length != max_length) return 2;" " var one_byte = Array(max_length + 1);" diff --git a/deps/v8/test/cctest/test-weakmaps.cc b/deps/v8/test/cctest/test-weakmaps.cc index fe7a2d0c0f..cba563242f 100644 --- a/deps/v8/test/cctest/test-weakmaps.cc +++ b/deps/v8/test/cctest/test-weakmaps.cc @@ -230,6 +230,7 @@ TEST(WeakMapScavenge) { // by other paths are correctly recorded in the slots buffer. TEST(Regress2060a) { if (i::FLAG_never_compact) return; + if (i::FLAG_enable_third_party_heap) return; FLAG_always_compact = true; FLAG_stress_concurrent_allocation = false; // For SimulateFullSpace. LocalContext context; @@ -253,7 +254,8 @@ TEST(Regress2060a) { Handle<JSObject> object = factory->NewJSObject(function, AllocationType::kOld); CHECK(!Heap::InYoungGeneration(*object)); - CHECK(!first_page->Contains(object->address())); + CHECK_IMPLIES(!FLAG_enable_third_party_heap, + !first_page->Contains(object->address())); int32_t hash = key->GetOrCreateHash(isolate).value(); JSWeakCollection::Set(weakmap, key, object, hash); } @@ -292,7 +294,8 @@ TEST(Regress2060b) { for (int i = 0; i < 32; i++) { keys[i] = factory->NewJSObject(function, AllocationType::kOld); CHECK(!Heap::InYoungGeneration(*keys[i])); - CHECK(!first_page->Contains(keys[i]->address())); + CHECK_IMPLIES(!FLAG_enable_third_party_heap, + !first_page->Contains(keys[i]->address())); } Handle<JSWeakMap> weakmap = isolate->factory()->NewJSWeakMap(); for (int i = 0; i < 32; i++) { diff --git a/deps/v8/test/cctest/test-weaksets.cc b/deps/v8/test/cctest/test-weaksets.cc index f9a3a0614d..fedcd65ad7 100644 --- a/deps/v8/test/cctest/test-weaksets.cc +++ b/deps/v8/test/cctest/test-weaksets.cc @@ -164,6 +164,7 @@ TEST(WeakSet_Shrinking) { // by other paths are correctly recorded in the slots buffer. TEST(WeakSet_Regress2060a) { if (i::FLAG_never_compact) return; + if (i::FLAG_enable_third_party_heap) return; FLAG_always_compact = true; FLAG_stress_concurrent_allocation = false; // For SimulateFullSpace. LocalContext context; @@ -187,7 +188,8 @@ TEST(WeakSet_Regress2060a) { Handle<JSObject> object = factory->NewJSObject(function, AllocationType::kOld); CHECK(!Heap::InYoungGeneration(*object)); - CHECK(!first_page->Contains(object->address())); + CHECK_IMPLIES(!FLAG_enable_third_party_heap, + !first_page->Contains(object->address())); int32_t hash = key->GetOrCreateHash(isolate).value(); JSWeakCollection::Set(weakset, key, object, hash); } @@ -203,6 +205,7 @@ TEST(WeakSet_Regress2060a) { // other strong paths are correctly recorded in the slots buffer. TEST(WeakSet_Regress2060b) { if (i::FLAG_never_compact) return; + if (i::FLAG_enable_third_party_heap) return; FLAG_always_compact = true; #ifdef VERIFY_HEAP FLAG_verify_heap = true; @@ -226,7 +229,8 @@ TEST(WeakSet_Regress2060b) { for (int i = 0; i < 32; i++) { keys[i] = factory->NewJSObject(function, AllocationType::kOld); CHECK(!Heap::InYoungGeneration(*keys[i])); - CHECK(!first_page->Contains(keys[i]->address())); + CHECK_IMPLIES(!FLAG_enable_third_party_heap, + !first_page->Contains(keys[i]->address())); } Handle<JSWeakSet> weakset = AllocateJSWeakSet(isolate); for (int i = 0; i < 32; i++) { diff --git a/deps/v8/test/cctest/test-web-snapshots.cc b/deps/v8/test/cctest/test-web-snapshots.cc index b7f314318a..5b61da52ee 100644 --- a/deps/v8/test/cctest/test-web-snapshots.cc +++ b/deps/v8/test/cctest/test-web-snapshots.cc @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "src/api/api-inl.h" #include "src/web-snapshot/web-snapshot.h" #include "test/cctest/cctest-utils.h" #include "test/cctest/cctest.h" @@ -11,22 +12,25 @@ namespace internal { namespace { -void TestWebSnapshot(const char* snapshot_source, const char* test_source, - const char* expected_result, uint32_t string_count, - uint32_t map_count, uint32_t context_count, - uint32_t function_count, uint32_t object_count) { +void TestWebSnapshotExtensive( + const char* snapshot_source, const char* test_source, + std::function<void(v8::Isolate*, v8::Local<v8::Context>)> tester, + uint32_t string_count, uint32_t map_count, uint32_t context_count, + uint32_t function_count, uint32_t object_count) { CcTest::InitializeVM(); v8::Isolate* isolate = CcTest::isolate(); - v8::HandleScope scope(isolate); - v8::Local<v8::Context> context = isolate->GetCurrentContext(); - CompileRun(snapshot_source); WebSnapshotData snapshot_data; { + v8::HandleScope scope(isolate); + v8::Local<v8::Context> new_context = CcTest::NewContext(); + v8::Context::Scope context_scope(new_context); + + CompileRun(snapshot_source); std::vector<std::string> exports; exports.push_back("foo"); WebSnapshotSerializer serializer(isolate); - CHECK(serializer.TakeSnapshot(context, exports, snapshot_data)); + CHECK(serializer.TakeSnapshot(new_context, exports, snapshot_data)); CHECK(!serializer.has_error()); CHECK_NOT_NULL(snapshot_data.buffer); CHECK_EQ(string_count, serializer.string_count()); @@ -37,14 +41,14 @@ void TestWebSnapshot(const char* snapshot_source, const char* test_source, } { + v8::HandleScope scope(isolate); v8::Local<v8::Context> new_context = CcTest::NewContext(); v8::Context::Scope context_scope(new_context); WebSnapshotDeserializer deserializer(isolate); CHECK(deserializer.UseWebSnapshot(snapshot_data.buffer, snapshot_data.buffer_size)); CHECK(!deserializer.has_error()); - v8::Local<v8::String> result = CompileRun(test_source).As<v8::String>(); - CHECK(result->Equals(new_context, v8_str(expected_result)).FromJust()); + tester(isolate, new_context); CHECK_EQ(string_count, deserializer.string_count()); CHECK_EQ(map_count, deserializer.map_count()); CHECK_EQ(context_count, deserializer.context_count()); @@ -53,6 +57,20 @@ void TestWebSnapshot(const char* snapshot_source, const char* test_source, } } +void TestWebSnapshot(const char* snapshot_source, const char* test_source, + const char* expected_result, uint32_t string_count, + uint32_t map_count, uint32_t context_count, + uint32_t function_count, uint32_t object_count) { + TestWebSnapshotExtensive( + snapshot_source, test_source, + [test_source, expected_result](v8::Isolate* isolate, + v8::Local<v8::Context> new_context) { + v8::Local<v8::String> result = CompileRun(test_source).As<v8::String>(); + CHECK(result->Equals(new_context, v8_str(expected_result)).FromJust()); + }, + string_count, map_count, context_count, function_count, object_count); +} + } // namespace TEST(Minimal) { @@ -68,6 +86,90 @@ TEST(Minimal) { kMapCount, kContextCount, kFunctionCount, kObjectCount); } +TEST(Numbers) { + const char* snapshot_source = + "var foo = {'a': 6,\n" + " 'b': -11,\n" + " 'c': 11.6,\n" + " 'd': NaN,\n" + " 'e': Number.POSITIVE_INFINITY,\n" + " 'f': Number.NEGATIVE_INFINITY,\n" + "}"; + const char* test_source = "foo"; + uint32_t kStringCount = 7; // 'foo', 'a', ..., 'f' + uint32_t kMapCount = 1; + uint32_t kContextCount = 0; + uint32_t kFunctionCount = 0; + uint32_t kObjectCount = 1; + std::function<void(v8::Isolate*, v8::Local<v8::Context>)> tester = + [test_source](v8::Isolate* isolate, v8::Local<v8::Context> new_context) { + v8::Local<v8::Object> result = CompileRun(test_source).As<v8::Object>(); + int32_t a = result->Get(new_context, v8_str("a")) + .ToLocalChecked() + .As<v8::Number>() + ->Value(); + CHECK_EQ(a, 6); + int32_t b = result->Get(new_context, v8_str("b")) + .ToLocalChecked() + .As<v8::Number>() + ->Value(); + CHECK_EQ(b, -11); + double c = result->Get(new_context, v8_str("c")) + .ToLocalChecked() + .As<v8::Number>() + ->Value(); + CHECK_EQ(c, 11.6); + double d = result->Get(new_context, v8_str("d")) + .ToLocalChecked() + .As<v8::Number>() + ->Value(); + CHECK(std::isnan(d)); + double e = result->Get(new_context, v8_str("e")) + .ToLocalChecked() + .As<v8::Number>() + ->Value(); + CHECK_EQ(e, std::numeric_limits<double>::infinity()); + double f = result->Get(new_context, v8_str("f")) + .ToLocalChecked() + .As<v8::Number>() + ->Value(); + CHECK_EQ(f, -std::numeric_limits<double>::infinity()); + }; + TestWebSnapshotExtensive(snapshot_source, test_source, tester, kStringCount, + kMapCount, kContextCount, kFunctionCount, + kObjectCount); +} + +TEST(Oddballs) { + const char* snapshot_source = + "var foo = {'a': false,\n" + " 'b': true,\n" + " 'c': null,\n" + " 'd': undefined,\n" + "}"; + const char* test_source = "foo"; + uint32_t kStringCount = 5; // 'foo', 'a', ..., 'd' + uint32_t kMapCount = 1; + uint32_t kContextCount = 0; + uint32_t kFunctionCount = 0; + uint32_t kObjectCount = 1; + std::function<void(v8::Isolate*, v8::Local<v8::Context>)> tester = + [test_source](v8::Isolate* isolate, v8::Local<v8::Context> new_context) { + v8::Local<v8::Object> result = CompileRun(test_source).As<v8::Object>(); + Local<Value> a = result->Get(new_context, v8_str("a")).ToLocalChecked(); + CHECK(a->IsFalse()); + Local<Value> b = result->Get(new_context, v8_str("b")).ToLocalChecked(); + CHECK(b->IsTrue()); + Local<Value> c = result->Get(new_context, v8_str("c")).ToLocalChecked(); + CHECK(c->IsNull()); + Local<Value> d = result->Get(new_context, v8_str("d")).ToLocalChecked(); + CHECK(d->IsUndefined()); + }; + TestWebSnapshotExtensive(snapshot_source, test_source, tester, kStringCount, + kMapCount, kContextCount, kFunctionCount, + kObjectCount); +} + TEST(Function) { const char* snapshot_source = "var foo = {'key': function() { return '11525'; }};"; @@ -127,5 +229,252 @@ TEST(InnerFunctionWithContextAndParentContext) { kMapCount, kContextCount, kFunctionCount, kObjectCount); } +TEST(RegExp) { + const char* snapshot_source = "var foo = {'re': /ab+c/gi}"; + const char* test_source = "foo"; + uint32_t kStringCount = 4; // 'foo', 're', RegExp pattern, RegExp flags + uint32_t kMapCount = 1; + uint32_t kContextCount = 0; + uint32_t kFunctionCount = 0; + uint32_t kObjectCount = 1; + std::function<void(v8::Isolate*, v8::Local<v8::Context>)> tester = + [test_source](v8::Isolate* isolate, v8::Local<v8::Context> new_context) { + v8::Local<v8::Object> result = CompileRun(test_source).As<v8::Object>(); + Local<v8::RegExp> re = result->Get(new_context, v8_str("re")) + .ToLocalChecked() + .As<v8::RegExp>(); + CHECK(re->IsRegExp()); + CHECK(re->GetSource()->Equals(new_context, v8_str("ab+c")).FromJust()); + CHECK_EQ(v8::RegExp::kGlobal | v8::RegExp::kIgnoreCase, re->GetFlags()); + v8::Local<v8::Object> match = + re->Exec(new_context, v8_str("aBc")).ToLocalChecked(); + CHECK(match->IsArray()); + v8::Local<v8::Object> no_match = + re->Exec(new_context, v8_str("ac")).ToLocalChecked(); + CHECK(no_match->IsNull()); + }; + TestWebSnapshotExtensive(snapshot_source, test_source, tester, kStringCount, + kMapCount, kContextCount, kFunctionCount, + kObjectCount); +} + +TEST(RegExpNoFlags) { + const char* snapshot_source = "var foo = {'re': /ab+c/}"; + const char* test_source = "foo"; + uint32_t kStringCount = 4; // 'foo', 're', RegExp pattern, RegExp flags + uint32_t kMapCount = 1; + uint32_t kContextCount = 0; + uint32_t kFunctionCount = 0; + uint32_t kObjectCount = 1; + std::function<void(v8::Isolate*, v8::Local<v8::Context>)> tester = + [test_source](v8::Isolate* isolate, v8::Local<v8::Context> new_context) { + v8::Local<v8::Object> result = CompileRun(test_source).As<v8::Object>(); + Local<v8::RegExp> re = result->Get(new_context, v8_str("re")) + .ToLocalChecked() + .As<v8::RegExp>(); + CHECK(re->IsRegExp()); + CHECK(re->GetSource()->Equals(new_context, v8_str("ab+c")).FromJust()); + CHECK_EQ(v8::RegExp::kNone, re->GetFlags()); + v8::Local<v8::Object> match = + re->Exec(new_context, v8_str("abc")).ToLocalChecked(); + CHECK(match->IsArray()); + v8::Local<v8::Object> no_match = + re->Exec(new_context, v8_str("ac")).ToLocalChecked(); + CHECK(no_match->IsNull()); + }; + TestWebSnapshotExtensive(snapshot_source, test_source, tester, kStringCount, + kMapCount, kContextCount, kFunctionCount, + kObjectCount); +} + +TEST(SFIDeduplication) { + CcTest::InitializeVM(); + v8::Isolate* isolate = CcTest::isolate(); + v8::HandleScope scope(isolate); + + WebSnapshotData snapshot_data; + { + v8::Local<v8::Context> new_context = CcTest::NewContext(); + v8::Context::Scope context_scope(new_context); + const char* snapshot_source = + "let foo = {};\n" + "foo.outer = function(a) {\n" + " return function() {\n" + " return a;\n" + " }\n" + "}\n" + "foo.inner = foo.outer('hi');"; + + CompileRun(snapshot_source); + std::vector<std::string> exports; + exports.push_back("foo"); + WebSnapshotSerializer serializer(isolate); + CHECK(serializer.TakeSnapshot(new_context, exports, snapshot_data)); + CHECK(!serializer.has_error()); + CHECK_NOT_NULL(snapshot_data.buffer); + } + + { + v8::Local<v8::Context> new_context = CcTest::NewContext(); + v8::Context::Scope context_scope(new_context); + WebSnapshotDeserializer deserializer(isolate); + CHECK(deserializer.UseWebSnapshot(snapshot_data.buffer, + snapshot_data.buffer_size)); + CHECK(!deserializer.has_error()); + + const char* get_inner = "foo.inner"; + const char* create_new_inner = "foo.outer()"; + + // Verify that foo.inner and the JSFunction which is the result of calling + // foo.outer() after deserialization share the SFI. + v8::Local<v8::Function> v8_inner1 = + CompileRun(get_inner).As<v8::Function>(); + v8::Local<v8::Function> v8_inner2 = + CompileRun(create_new_inner).As<v8::Function>(); + + Handle<JSFunction> inner1 = + Handle<JSFunction>::cast(Utils::OpenHandle(*v8_inner1)); + Handle<JSFunction> inner2 = + Handle<JSFunction>::cast(Utils::OpenHandle(*v8_inner2)); + + CHECK_EQ(inner1->shared(), inner2->shared()); + } +} + +TEST(SFIDeduplicationAfterBytecodeFlushing) { + FLAG_stress_flush_bytecode = true; + CcTest::InitializeVM(); + v8::Isolate* isolate = CcTest::isolate(); + + WebSnapshotData snapshot_data; + { + v8::HandleScope scope(isolate); + v8::Local<v8::Context> new_context = CcTest::NewContext(); + v8::Context::Scope context_scope(new_context); + + const char* snapshot_source = + "let foo = {};\n" + "foo.outer = function() {\n" + " let a = 'hello';\n" + " return function() {\n" + " return a;\n" + " }\n" + "}\n" + "foo.inner = foo.outer();"; + + CompileRun(snapshot_source); + + std::vector<std::string> exports; + exports.push_back("foo"); + WebSnapshotSerializer serializer(isolate); + CHECK(serializer.TakeSnapshot(new_context, exports, snapshot_data)); + CHECK(!serializer.has_error()); + CHECK_NOT_NULL(snapshot_data.buffer); + } + + CcTest::CollectAllGarbage(); + CcTest::CollectAllGarbage(); + + { + v8::HandleScope scope(isolate); + v8::Local<v8::Context> new_context = CcTest::NewContext(); + v8::Context::Scope context_scope(new_context); + WebSnapshotDeserializer deserializer(isolate); + CHECK(deserializer.UseWebSnapshot(snapshot_data.buffer, + snapshot_data.buffer_size)); + CHECK(!deserializer.has_error()); + + const char* get_outer = "foo.outer"; + const char* get_inner = "foo.inner"; + const char* create_new_inner = "foo.outer()"; + + v8::Local<v8::Function> v8_outer = CompileRun(get_outer).As<v8::Function>(); + Handle<JSFunction> outer = + Handle<JSFunction>::cast(Utils::OpenHandle(*v8_outer)); + CHECK(!outer->shared().is_compiled()); + + v8::Local<v8::Function> v8_inner1 = + CompileRun(get_inner).As<v8::Function>(); + v8::Local<v8::Function> v8_inner2 = + CompileRun(create_new_inner).As<v8::Function>(); + + Handle<JSFunction> inner1 = + Handle<JSFunction>::cast(Utils::OpenHandle(*v8_inner1)); + Handle<JSFunction> inner2 = + Handle<JSFunction>::cast(Utils::OpenHandle(*v8_inner2)); + + CHECK(outer->shared().is_compiled()); + CHECK_EQ(inner1->shared(), inner2->shared()); + + // Force bytecode flushing of "foo.outer". + CcTest::CollectAllGarbage(); + CcTest::CollectAllGarbage(); + + CHECK(!outer->shared().is_compiled()); + + // Create another inner function. + v8::Local<v8::Function> v8_inner3 = + CompileRun(create_new_inner).As<v8::Function>(); + Handle<JSFunction> inner3 = + Handle<JSFunction>::cast(Utils::OpenHandle(*v8_inner3)); + + // Check that it shares the SFI with the original inner function which is in + // the snapshot. + CHECK_EQ(inner1->shared(), inner3->shared()); + } +} + +TEST(SFIDeduplicationOfFunctionsNotInSnapshot) { + CcTest::InitializeVM(); + v8::Isolate* isolate = CcTest::isolate(); + v8::HandleScope scope(isolate); + + WebSnapshotData snapshot_data; + { + v8::Local<v8::Context> new_context = CcTest::NewContext(); + v8::Context::Scope context_scope(new_context); + const char* snapshot_source = + "let foo = {};\n" + "foo.outer = function(a) {\n" + " return function() {\n" + " return a;\n" + " }\n" + "}\n"; + + CompileRun(snapshot_source); + std::vector<std::string> exports; + exports.push_back("foo"); + WebSnapshotSerializer serializer(isolate); + CHECK(serializer.TakeSnapshot(new_context, exports, snapshot_data)); + CHECK(!serializer.has_error()); + CHECK_NOT_NULL(snapshot_data.buffer); + } + + { + v8::Local<v8::Context> new_context = CcTest::NewContext(); + v8::Context::Scope context_scope(new_context); + WebSnapshotDeserializer deserializer(isolate); + CHECK(deserializer.UseWebSnapshot(snapshot_data.buffer, + snapshot_data.buffer_size)); + CHECK(!deserializer.has_error()); + + const char* create_new_inner = "foo.outer()"; + + // Verify that repeated invocations of foo.outer() return functions which + // share the SFI. + v8::Local<v8::Function> v8_inner1 = + CompileRun(create_new_inner).As<v8::Function>(); + v8::Local<v8::Function> v8_inner2 = + CompileRun(create_new_inner).As<v8::Function>(); + + Handle<JSFunction> inner1 = + Handle<JSFunction>::cast(Utils::OpenHandle(*v8_inner1)); + Handle<JSFunction> inner2 = + Handle<JSFunction>::cast(Utils::OpenHandle(*v8_inner2)); + + CHECK_EQ(inner1->shared(), inner2->shared()); + } +} + } // namespace internal } // namespace v8 diff --git a/deps/v8/test/cctest/wasm/test-c-wasm-entry.cc b/deps/v8/test/cctest/wasm/test-c-wasm-entry.cc index 0c59f9e779..472eb80a68 100644 --- a/deps/v8/test/cctest/wasm/test-c-wasm-entry.cc +++ b/deps/v8/test/cctest/wasm/test-c-wasm-entry.cc @@ -60,7 +60,6 @@ class CWasmEntryArgTester { WriteToBuffer(&packer, args...); Address wasm_call_target = wasm_code_->instruction_start(); Handle<Object> object_ref = runner_.builder().instance_object(); - wasm_code_->native_module()->SetExecutable(true); Execution::CallWasm(isolate_, c_wasm_entry_, wasm_call_target, object_ref, packer.argv()); CHECK(!isolate_->has_pending_exception()); diff --git a/deps/v8/test/cctest/wasm/test-gc.cc b/deps/v8/test/cctest/wasm/test-gc.cc index 07084b2265..13dd461fed 100644 --- a/deps/v8/test/cctest/wasm/test-gc.cc +++ b/deps/v8/test/cctest/wasm/test-gc.cc @@ -43,8 +43,8 @@ class WasmGCTester { &v8::internal::FLAG_liftoff_only, execution_tier == TestExecutionTier::kLiftoff ? true : false), flag_tierup(&v8::internal::FLAG_wasm_tier_up, false), - zone(&allocator, ZONE_NAME), - builder_(&zone), + zone_(&allocator, ZONE_NAME), + builder_(&zone_), isolate_(CcTest::InitIsolateOnce()), scope(isolate_), thrower(isolate_, "Test wasm GC") { @@ -82,7 +82,7 @@ class WasmGCTester { } byte DefineStruct(std::initializer_list<F> fields) { - StructType::Builder type_builder(&zone, + StructType::Builder type_builder(&zone_, static_cast<uint32_t>(fields.size())); for (F field : fields) { type_builder.AddField(field.first, field.second); @@ -91,7 +91,8 @@ class WasmGCTester { } byte DefineArray(ValueType element_type, bool mutability) { - return builder_.AddArrayType(zone.New<ArrayType>(element_type, mutability)); + return builder_.AddArrayType( + zone_.New<ArrayType>(element_type, mutability)); } byte DefineSignature(FunctionSig* sig) { return builder_.AddSignature(sig); } @@ -101,7 +102,7 @@ class WasmGCTester { } void CompileModule() { - ZoneBuffer buffer(&zone); + ZoneBuffer buffer(&zone_); builder_.WriteTo(&buffer); MaybeHandle<WasmInstanceObject> maybe_instance = testing::CompileAndInstantiateForTesting( @@ -174,6 +175,7 @@ class WasmGCTester { Handle<WasmInstanceObject> instance() { return instance_; } Isolate* isolate() { return isolate_; } WasmModuleBuilder* builder() { return &builder_; } + Zone* zone() { return &zone_; } TestSignatures sigs; @@ -186,7 +188,7 @@ class WasmGCTester { const FlagScope<bool> flag_tierup; v8::internal::AccountingAllocator allocator; - Zone zone; + Zone zone_; WasmModuleBuilder builder_; Isolate* const isolate_; @@ -311,23 +313,23 @@ WASM_COMPILED_EXEC_TEST(WasmBrOnNull) { ValueType kRefTypes[] = {ref(type_index)}; ValueType kOptRefType = optref(type_index); FunctionSig sig_q_v(1, 0, kRefTypes); - const byte l_local_index = 0; + const byte local_index = 0; const byte kTaken = tester.DefineFunction( tester.sigs.i_v(), {kOptRefType}, {WASM_BLOCK_I(WASM_I32V(42), // Branch will be taken. // 42 left on stack outside the block (not 52). - WASM_BR_ON_NULL(0, WASM_LOCAL_GET(l_local_index)), + WASM_BR_ON_NULL(0, WASM_LOCAL_GET(local_index)), WASM_I32V(52), WASM_BR(0)), kExprEnd}); - const byte m_field_index = 0; + const byte field_index = 0; const byte kNotTaken = tester.DefineFunction( tester.sigs.i_v(), {}, {WASM_BLOCK_I( WASM_I32V(42), WASM_STRUCT_GET( - type_index, m_field_index, + type_index, field_index, // Branch will not be taken. // 52 left on stack outside the block (not 42). WASM_BR_ON_NULL(0, WASM_STRUCT_NEW_WITH_RTT( @@ -341,6 +343,49 @@ WASM_COMPILED_EXEC_TEST(WasmBrOnNull) { tester.CheckResult(kNotTaken, 52); } +WASM_COMPILED_EXEC_TEST(WasmBrOnNonNull) { + WasmGCTester tester(execution_tier); + const byte type_index = + tester.DefineStruct({F(kWasmI32, true), F(kWasmI32, true)}); + ValueType kRefType = ref(type_index); + ValueType kOptRefType = optref(type_index); + FunctionSig sig_q_v(1, 0, &kRefType); + const byte field_index = 0; + + const byte kTaken = tester.DefineFunction( + tester.sigs.i_v(), {kOptRefType, kOptRefType}, + {WASM_LOCAL_SET( + 0, WASM_STRUCT_NEW_WITH_RTT(type_index, WASM_I32V(52), WASM_I32V(62), + WASM_RTT_CANON(type_index))), + WASM_LOCAL_SET( + 1, WASM_STRUCT_NEW_WITH_RTT(type_index, WASM_I32V(11), WASM_I32V(22), + WASM_RTT_CANON(type_index))), + WASM_STRUCT_GET(type_index, field_index, + WASM_BLOCK_R(ref(type_index), + // Branch will be taken, and the block will + // return struct(52, 62). + WASM_BR_ON_NON_NULL(0, WASM_LOCAL_GET(0)), + WASM_REF_AS_NON_NULL(WASM_LOCAL_GET(1)))), + kExprEnd}); + + const byte kNotTaken = tester.DefineFunction( + tester.sigs.i_v(), {kOptRefType, kOptRefType}, + {WASM_LOCAL_SET(0, WASM_REF_NULL(type_index)), + WASM_LOCAL_SET( + 1, WASM_STRUCT_NEW_WITH_RTT(type_index, WASM_I32V(11), WASM_I32V(22), + WASM_RTT_CANON(type_index))), + WASM_STRUCT_GET(type_index, field_index, + WASM_BLOCK_R(ref(type_index), + // Branch will not be taken, and the block + // will return struct(11, 22). + WASM_BR_ON_NON_NULL(0, WASM_LOCAL_GET(0)), + WASM_REF_AS_NON_NULL(WASM_LOCAL_GET(1)))), + kExprEnd}); + tester.CompileModule(); + tester.CheckResult(kTaken, 52); + tester.CheckResult(kNotTaken, 11); +} + WASM_COMPILED_EXEC_TEST(BrOnCast) { WasmGCTester tester(execution_tier); ValueType kDataRefNull = ValueType::Ref(HeapType::kData, kNullable); @@ -412,6 +457,61 @@ WASM_COMPILED_EXEC_TEST(BrOnCast) { tester.CheckResult(kTypedAfterBranch, 42); } +WASM_COMPILED_EXEC_TEST(BrOnCastFail) { + WasmGCTester tester(execution_tier); + ValueType kDataRefNull = ValueType::Ref(HeapType::kData, kNullable); + const byte type0 = tester.DefineStruct({F(kWasmI32, true)}); + const byte type1 = + tester.DefineStruct({F(kWasmI64, true), F(kWasmI32, true)}); + + const byte field0 = 5; + const byte field1 = 25; + const byte null_value = 45; + + // local_0 = value; + // if (!(local_0 instanceof type0)) goto block1; + // return static_cast<type0>(local_0).field_0; + // block1: + // if (local_0 == nullptr) goto block2; + // return static_cast<type1>(local_0).field_1; + // block2: + // return null_value; +#define FUNCTION_BODY(value) \ + WASM_LOCAL_SET(0, WASM_SEQ(value)), \ + WASM_BLOCK( \ + WASM_BLOCK_R(kDataRefNull, WASM_LOCAL_GET(0), \ + WASM_BR_ON_CAST_FAIL(0, WASM_RTT_CANON(type0)), \ + WASM_GC_OP(kExprStructGet), type0, 0, kExprReturn), \ + kExprBrOnNull, 0, WASM_RTT_CANON(type1), WASM_GC_OP(kExprRefCast), \ + WASM_GC_OP(kExprStructGet), type1, 1, kExprReturn), \ + WASM_I32V(null_value), kExprEnd + + const byte kBranchTaken = tester.DefineFunction( + tester.sigs.i_v(), {kDataRefNull}, + {FUNCTION_BODY(WASM_STRUCT_NEW_WITH_RTT( + type1, WASM_I64V(10), WASM_I32V(field1), WASM_RTT_CANON(type1)))}); + + const byte kBranchNotTaken = tester.DefineFunction( + tester.sigs.i_v(), {kDataRefNull}, + {FUNCTION_BODY(WASM_STRUCT_NEW_WITH_RTT(type0, WASM_I32V(field0), + WASM_RTT_CANON(type0)))}); + + const byte kNull = tester.DefineFunction( + tester.sigs.i_v(), {kDataRefNull}, {FUNCTION_BODY(WASM_REF_NULL(type0))}); + + const byte kUnrelatedTypes = tester.DefineFunction( + tester.sigs.i_v(), {ValueType::Ref(type1, kNullable)}, + {FUNCTION_BODY(WASM_STRUCT_NEW_WITH_RTT( + type1, WASM_I64V(10), WASM_I32V(field1), WASM_RTT_CANON(type1)))}); +#undef FUNCTION_BODY + + tester.CompileModule(); + tester.CheckResult(kBranchTaken, field1); + tester.CheckResult(kBranchNotTaken, field0); + tester.CheckResult(kNull, null_value); + tester.CheckResult(kUnrelatedTypes, field1); +} + WASM_COMPILED_EXEC_TEST(WasmRefEq) { WasmGCTester tester(execution_tier); byte type_index = tester.DefineStruct({F(kWasmI32, true), F(kWasmI32, true)}); @@ -1484,19 +1584,101 @@ WASM_COMPILED_EXEC_TEST(GlobalInitReferencingGlobal) { tester.CheckResult(func, 42); } -WASM_COMPILED_EXEC_TEST(IndirectNullSetManually) { +WASM_COMPILED_EXEC_TEST(GCTables) { WasmGCTester tester(execution_tier); - byte sig_index = tester.DefineSignature(tester.sigs.i_i()); - tester.DefineTable(ValueType::Ref(sig_index, kNullable), 1, 1); - byte func_index = tester.DefineFunction( - tester.sigs.i_i(), {}, - {WASM_TABLE_SET(0, WASM_I32V(0), WASM_REF_NULL(sig_index)), - WASM_CALL_INDIRECT(sig_index, WASM_I32V(0), WASM_LOCAL_GET(0)), - kExprEnd}); + + byte super_struct = tester.DefineStruct({F(kWasmI32, false)}); + byte sub_struct = + tester.DefineStruct({F(kWasmI32, false), F(kWasmI32, true)}); + FunctionSig* super_sig = + FunctionSig::Build(tester.zone(), {kWasmI32}, {optref(sub_struct)}); + byte super_sig_index = tester.DefineSignature(super_sig); + FunctionSig* sub_sig = + FunctionSig::Build(tester.zone(), {kWasmI32}, {optref(super_struct)}); + byte sub_sig_index = tester.DefineSignature(sub_sig); + + tester.DefineTable(optref(super_sig_index), 10, 10); + + byte super_func = tester.DefineFunction( + super_sig, {}, + {WASM_I32_ADD(WASM_STRUCT_GET(sub_struct, 0, WASM_LOCAL_GET(0)), + WASM_STRUCT_GET(sub_struct, 1, WASM_LOCAL_GET(0))), + WASM_END}); + + byte sub_func = tester.DefineFunction( + sub_sig, {}, + {WASM_STRUCT_GET(super_struct, 0, WASM_LOCAL_GET(0)), WASM_END}); + + byte setup_func = tester.DefineFunction( + tester.sigs.i_v(), {}, + {WASM_TABLE_SET(0, WASM_I32V(0), WASM_REF_NULL(super_sig_index)), + WASM_TABLE_SET(0, WASM_I32V(1), WASM_REF_FUNC(super_func)), + WASM_TABLE_SET(0, WASM_I32V(2), WASM_REF_FUNC(sub_func)), WASM_I32V(0), + WASM_END}); + + byte super_struct_producer = tester.DefineFunction( + FunctionSig::Build(tester.zone(), {ref(super_struct)}, {}), {}, + {WASM_STRUCT_NEW_WITH_RTT(super_struct, WASM_I32V(-5), + WASM_RTT_CANON(super_struct)), + WASM_END}); + byte sub_struct_producer = tester.DefineFunction( + FunctionSig::Build(tester.zone(), {ref(sub_struct)}, {}), {}, + {WASM_STRUCT_NEW_WITH_RTT(sub_struct, WASM_I32V(7), WASM_I32V(11), + WASM_RTT_CANON(sub_struct)), + WASM_END}); + + // Calling a null entry should trap. + byte call_null = tester.DefineFunction( + tester.sigs.i_v(), {}, + {WASM_CALL_INDIRECT(super_sig_index, + WASM_CALL_FUNCTION0(sub_struct_producer), + WASM_I32V(0)), + WASM_END}); + // Calling with a signature identical to the type of the table should work, + // provided the entry has the same signature. + byte call_same_type = tester.DefineFunction( + tester.sigs.i_v(), {}, + {WASM_CALL_INDIRECT(super_sig_index, + WASM_CALL_FUNCTION0(sub_struct_producer), + WASM_I32V(1)), + WASM_END}); + // Calling with a signature that is a subtype of the type of the table should + // work, provided the entry has the same signature. + byte call_subtype = tester.DefineFunction( + tester.sigs.i_v(), {}, + {WASM_CALL_INDIRECT(sub_sig_index, + WASM_CALL_FUNCTION0(super_struct_producer), + WASM_I32V(2)), + WASM_END}); + // Calling with a signature that is mismatched to that of the entry should + // trap. + byte call_type_mismatch = tester.DefineFunction( + tester.sigs.i_v(), {}, + {WASM_CALL_INDIRECT(super_sig_index, + WASM_CALL_FUNCTION0(sub_struct_producer), + WASM_I32V(2)), + WASM_END}); + // Getting a table element and then calling it with call_ref should work. + byte table_get_and_call_ref = tester.DefineFunction( + tester.sigs.i_v(), {}, + {WASM_CALL_REF(WASM_TABLE_GET(0, WASM_I32V(2)), + WASM_CALL_FUNCTION0(sub_struct_producer)), + WASM_END}); + + // Only here so these functions count as "declared". + tester.AddGlobal(optref(super_sig_index), false, + WasmInitExpr::RefFuncConst(super_func)); + tester.AddGlobal(optref(sub_sig_index), false, + WasmInitExpr::RefFuncConst(sub_func)); tester.CompileModule(); - tester.CheckHasThrown(func_index, 42); + tester.CheckResult(setup_func, 0); + tester.CheckHasThrown(call_null); + tester.CheckResult(call_same_type, 18); + tester.CheckResult(call_subtype, -5); + tester.CheckHasThrown(call_type_mismatch); + tester.CheckResult(table_get_and_call_ref, 7); } WASM_COMPILED_EXEC_TEST(JsAccess) { diff --git a/deps/v8/test/cctest/wasm/test-jump-table-assembler.cc b/deps/v8/test/cctest/wasm/test-jump-table-assembler.cc index bfe88180d1..59fea9b262 100644 --- a/deps/v8/test/cctest/wasm/test-jump-table-assembler.cc +++ b/deps/v8/test/cctest/wasm/test-jump-table-assembler.cc @@ -122,14 +122,14 @@ void CompileJumpTableThunk(Address thunk, Address jump_target) { __ Br(scratch); #elif V8_TARGET_ARCH_PPC64 __ mov(scratch, Operand(stop_bit_address, RelocInfo::NONE)); - __ LoadP(scratch, MemOperand(scratch)); + __ LoadU64(scratch, MemOperand(scratch)); __ cmpi(scratch, Operand::Zero()); __ bne(&exit); __ mov(scratch, Operand(jump_target, RelocInfo::NONE)); __ Jump(scratch); #elif V8_TARGET_ARCH_S390X __ mov(scratch, Operand(stop_bit_address, RelocInfo::NONE)); - __ LoadP(scratch, MemOperand(scratch)); + __ LoadU64(scratch, MemOperand(scratch)); __ CmpP(scratch, Operand(0)); __ bne(&exit); __ mov(scratch, Operand(jump_target, RelocInfo::NONE)); @@ -156,8 +156,14 @@ void CompileJumpTableThunk(Address thunk, Address jump_target) { __ Ret(); FlushInstructionCache(thunk, kThunkBufferSize); +#if defined(V8_OS_MACOSX) && defined(V8_HOST_ARCH_ARM64) + // MacOS on arm64 refuses {mprotect} calls to toggle permissions of RWX + // memory. Simply do nothing here, and rely on + // {SwitchMemoryPermissionsToExecutable} in the JumpTableRunner. +#else CHECK(SetPermissions(GetPlatformPageAllocator(), thunk, kThunkBufferSize, v8::PageAllocator::kReadExecute)); +#endif } class JumpTableRunner : public v8::base::Thread { diff --git a/deps/v8/test/cctest/wasm/test-liftoff-inspection.cc b/deps/v8/test/cctest/wasm/test-liftoff-inspection.cc index 551d8f214b..96df9d5252 100644 --- a/deps/v8/test/cctest/wasm/test-liftoff-inspection.cc +++ b/deps/v8/test/cctest/wasm/test-liftoff-inspection.cc @@ -22,7 +22,7 @@ class LiftoffCompileEnvironment { handle_scope_(isolate_), zone_(isolate_->allocator(), ZONE_NAME), wasm_runner_(nullptr, TestExecutionTier::kLiftoff, 0, - kRuntimeExceptionSupport, kNoLowerSimd) { + kRuntimeExceptionSupport) { // Add a table of length 1, for indirect calls. wasm_runner_.builder().AddIndirectFunctionTable(nullptr, 1); // Set tiered down such that we generate debugging code. @@ -453,6 +453,29 @@ TEST(Liftoff_debug_side_table_catch_all) { debug_side_table.get()); } +TEST(Regress1199526) { + EXPERIMENTAL_FLAG_SCOPE(eh); + LiftoffCompileEnvironment env; + ValueType exception_type = ValueType::Ref(HeapType::kExtern, kNonNullable); + auto debug_side_table = env.GenerateDebugSideTable( + {}, {}, + {kExprTry, kVoidCode, kExprCallFunction, 0, kExprCatchAll, kExprLoop, + kVoidCode, kExprEnd, kExprEnd}, + {}); + CheckDebugSideTable( + { + // function entry. + {0, {}}, + // break on entry. + {0, {}}, + // function call. + {0, {}}, + // loop stack check. + {1, {Stack(0, exception_type)}}, + }, + debug_side_table.get()); +} + } // namespace wasm } // namespace internal } // namespace v8 diff --git a/deps/v8/test/cctest/wasm/test-run-wasm-bulk-memory.cc b/deps/v8/test/cctest/wasm/test-run-wasm-bulk-memory.cc index b00f0714c2..1f5a32e5a1 100644 --- a/deps/v8/test/cctest/wasm/test-run-wasm-bulk-memory.cc +++ b/deps/v8/test/cctest/wasm/test-run-wasm-bulk-memory.cc @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "src/wasm/wasm-module-builder.h" #include "test/cctest/cctest.h" #include "test/cctest/wasm/wasm-run-utils.h" #include "test/common/wasm/test-signatures.h" @@ -413,7 +414,7 @@ void TestTableInitElems(TestExecutionTier execution_tier, int table_index) { } // Passive element segment has [f0, f1, f2, f3, f4, null]. - function_indexes.push_back(WasmElemSegment::kNullIndex); + function_indexes.push_back(WasmModuleBuilder::kNullIndex); // Add 10 function tables, even though we only test one table. for (int i = 0; i < 10; ++i) { diff --git a/deps/v8/test/cctest/wasm/test-run-wasm-exceptions.cc b/deps/v8/test/cctest/wasm/test-run-wasm-exceptions.cc index bb61f93ac3..284f27ec44 100644 --- a/deps/v8/test/cctest/wasm/test-run-wasm-exceptions.cc +++ b/deps/v8/test/cctest/wasm/test-run-wasm-exceptions.cc @@ -574,6 +574,64 @@ WASM_EXEC_TEST(TryCatchTrapRemByZero) { TestTrapNotCaught(code, arraysize(code), execution_tier); } +namespace { +// TODO(cleanup): Define in cctest.h and re-use where appropriate. +class IsolateScope { + public: + IsolateScope() { + v8::Isolate::CreateParams create_params; + create_params.array_buffer_allocator = CcTest::array_buffer_allocator(); + isolate_ = v8::Isolate::New(create_params); + isolate_->Enter(); + } + + ~IsolateScope() { + isolate_->Exit(); + isolate_->Dispose(); + } + + v8::Isolate* isolate() { return isolate_; } + Isolate* i_isolate() { return reinterpret_cast<Isolate*>(isolate_); } + + private: + v8::Isolate* isolate_; +}; +} // namespace + +UNINITIALIZED_WASM_EXEC_TEST(TestStackOverflowNotCaught) { + TestSignatures sigs; + EXPERIMENTAL_FLAG_SCOPE(eh); + // FLAG_stack_size must be set before isolate initialization. + FlagScope<int32_t> stack_size(&v8::internal::FLAG_stack_size, 8); + + IsolateScope isolate_scope; + LocalContext context(isolate_scope.isolate()); + + WasmRunner<uint32_t> r(execution_tier, nullptr, "main", + kRuntimeExceptionSupport, isolate_scope.i_isolate()); + + // Build a function that calls itself until stack overflow. + WasmFunctionCompiler& stack_overflow = r.NewFunction(sigs.v_v()); + byte stack_overflow_code[] = {kExprCallFunction, + stack_overflow.function_index()}; + stack_overflow.Build(stack_overflow_code, + stack_overflow_code + arraysize(stack_overflow_code)); + + // Build the main test function. + BUILD(r, WASM_TRY_CATCH_ALL_T(kWasmI32, + WASM_STMTS(WASM_I32V(1), kExprCallFunction, + stack_overflow.function_index()), + WASM_STMTS(WASM_I32V(1)))); + + if (execution_tier != TestExecutionTier::kInterpreter) { + // Need to call through JS to allow for creation of stack traces. + r.CheckCallViaJSTraps(); + } else { + constexpr int stopped = 0; + CHECK_EQ(stopped, r.CallInterpreter()); + } +} + TEST(Regress1180457) { TestSignatures sigs; EXPERIMENTAL_FLAG_SCOPE(eh); @@ -629,6 +687,18 @@ TEST(Regress1186795) { CHECK_EQ(0, r.CallInterpreter()); } +TEST(Regress1197408) { + TestSignatures sigs; + EXPERIMENTAL_FLAG_SCOPE(eh); + WasmRunner<int32_t, int32_t, int32_t, int32_t> r( + TestExecutionTier::kInterpreter); + int sig_id = r.builder().AddSignature(sigs.i_iii()); + BUILD(r, WASM_STMTS(WASM_I32V(0), WASM_I32V(0), WASM_I32V(0), kExprTry, + sig_id, kExprTry, sig_id, kExprCallFunction, 0, + kExprDelegate, 0, kExprDelegate, 0)); + CHECK_EQ(0, r.CallInterpreter(0, 0, 0)); +} + } // namespace test_run_wasm_exceptions } // namespace wasm } // namespace internal diff --git a/deps/v8/test/cctest/wasm/test-run-wasm-relaxed-simd.cc b/deps/v8/test/cctest/wasm/test-run-wasm-relaxed-simd.cc index 50f5bb44b7..45a84be6fe 100644 --- a/deps/v8/test/cctest/wasm/test-run-wasm-relaxed-simd.cc +++ b/deps/v8/test/cctest/wasm/test-run-wasm-relaxed-simd.cc @@ -16,20 +16,18 @@ namespace wasm { namespace test_run_wasm_relaxed_simd { // Use this for experimental relaxed-simd opcodes. -#define WASM_RELAXED_SIMD_TEST(name) \ - void RunWasm_##name##_Impl(LowerSimd lower_simd, \ - TestExecutionTier execution_tier); \ - TEST(RunWasm_##name##_turbofan) { \ - if (!CpuFeatures::SupportsWasmSimd128()) return; \ - EXPERIMENTAL_FLAG_SCOPE(relaxed_simd); \ - RunWasm_##name##_Impl(kNoLowerSimd, TestExecutionTier::kTurbofan); \ - } \ - TEST(RunWasm_##name##_interpreter) { \ - EXPERIMENTAL_FLAG_SCOPE(relaxed_simd); \ - RunWasm_##name##_Impl(kNoLowerSimd, TestExecutionTier::kInterpreter); \ - } \ - void RunWasm_##name##_Impl(LowerSimd lower_simd, \ - TestExecutionTier execution_tier) +#define WASM_RELAXED_SIMD_TEST(name) \ + void RunWasm_##name##_Impl(TestExecutionTier execution_tier); \ + TEST(RunWasm_##name##_turbofan) { \ + if (!CpuFeatures::SupportsWasmSimd128()) return; \ + EXPERIMENTAL_FLAG_SCOPE(relaxed_simd); \ + RunWasm_##name##_Impl(TestExecutionTier::kTurbofan); \ + } \ + TEST(RunWasm_##name##_interpreter) { \ + EXPERIMENTAL_FLAG_SCOPE(relaxed_simd); \ + RunWasm_##name##_Impl(TestExecutionTier::kInterpreter); \ + } \ + void RunWasm_##name##_Impl(TestExecutionTier execution_tier) #if V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_S390X || \ V8_TARGET_ARCH_PPC64 @@ -125,7 +123,7 @@ bool ExpectFused(TestExecutionTier tier) { #if V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_S390X || \ V8_TARGET_ARCH_PPC64 WASM_RELAXED_SIMD_TEST(F32x4Qfma) { - WasmRunner<int32_t, float, float, float> r(execution_tier, lower_simd); + WasmRunner<int32_t, float, float, float> r(execution_tier); // Set up global to hold mask output. float* g = r.builder().AddGlobal<float>(kWasmS128); // Build fn to splat test values, perform compare op, and write the result. @@ -149,7 +147,7 @@ WASM_RELAXED_SIMD_TEST(F32x4Qfma) { } WASM_RELAXED_SIMD_TEST(F32x4Qfms) { - WasmRunner<int32_t, float, float, float> r(execution_tier, lower_simd); + WasmRunner<int32_t, float, float, float> r(execution_tier); // Set up global to hold mask output. float* g = r.builder().AddGlobal<float>(kWasmS128); // Build fn to splat test values, perform compare op, and write the result. @@ -173,7 +171,7 @@ WASM_RELAXED_SIMD_TEST(F32x4Qfms) { } WASM_RELAXED_SIMD_TEST(F64x2Qfma) { - WasmRunner<int32_t, double, double, double> r(execution_tier, lower_simd); + WasmRunner<int32_t, double, double, double> r(execution_tier); // Set up global to hold mask output. double* g = r.builder().AddGlobal<double>(kWasmS128); // Build fn to splat test values, perform compare op, and write the result. @@ -197,7 +195,7 @@ WASM_RELAXED_SIMD_TEST(F64x2Qfma) { } WASM_RELAXED_SIMD_TEST(F64x2Qfms) { - WasmRunner<int32_t, double, double, double> r(execution_tier, lower_simd); + WasmRunner<int32_t, double, double, double> r(execution_tier); // Set up global to hold mask output. double* g = r.builder().AddGlobal<double>(kWasmS128); // Build fn to splat test values, perform compare op, and write the result. @@ -223,13 +221,13 @@ WASM_RELAXED_SIMD_TEST(F64x2Qfms) { // V8_TARGET_ARCH_PPC64 WASM_RELAXED_SIMD_TEST(F32x4RecipApprox) { - RunF32x4UnOpTest(execution_tier, lower_simd, kExprF32x4RecipApprox, - base::Recip, false /* !exact */); + RunF32x4UnOpTest(execution_tier, kExprF32x4RecipApprox, base::Recip, + false /* !exact */); } WASM_RELAXED_SIMD_TEST(F32x4RecipSqrtApprox) { - RunF32x4UnOpTest(execution_tier, lower_simd, kExprF32x4RecipSqrtApprox, - base::RecipSqrt, false /* !exact */); + RunF32x4UnOpTest(execution_tier, kExprF32x4RecipSqrtApprox, base::RecipSqrt, + false /* !exact */); } #undef WASM_RELAXED_SIMD_TEST diff --git a/deps/v8/test/cctest/wasm/test-run-wasm-simd-liftoff.cc b/deps/v8/test/cctest/wasm/test-run-wasm-simd-liftoff.cc index 90fd3ac1bc..677ec5648c 100644 --- a/deps/v8/test/cctest/wasm/test-run-wasm-simd-liftoff.cc +++ b/deps/v8/test/cctest/wasm/test-run-wasm-simd-liftoff.cc @@ -30,14 +30,14 @@ namespace test_run_wasm_simd_liftoff { void RunWasm_##name##_Impl() WASM_SIMD_LIFTOFF_TEST(S128Local) { - WasmRunner<int32_t> r(TestExecutionTier::kLiftoff, kNoLowerSimd); + WasmRunner<int32_t> r(TestExecutionTier::kLiftoff); byte temp1 = r.AllocateLocal(kWasmS128); BUILD(r, WASM_LOCAL_SET(temp1, WASM_LOCAL_GET(temp1)), WASM_ONE); CHECK_EQ(1, r.Call()); } WASM_SIMD_LIFTOFF_TEST(S128Global) { - WasmRunner<int32_t> r(TestExecutionTier::kLiftoff, kNoLowerSimd); + WasmRunner<int32_t> r(TestExecutionTier::kLiftoff); int32_t* g0 = r.builder().AddGlobal<int32_t>(kWasmS128); int32_t* g1 = r.builder().AddGlobal<int32_t>(kWasmS128); @@ -58,7 +58,7 @@ WASM_SIMD_LIFTOFF_TEST(S128Param) { // Test how SIMD parameters in functions are processed. There is no easy way // to specify a SIMD value when initializing a WasmRunner, so we manually // add a new function with the right signature, and call it from main. - WasmRunner<int32_t> r(TestExecutionTier::kLiftoff, kNoLowerSimd); + WasmRunner<int32_t> r(TestExecutionTier::kLiftoff); TestSignatures sigs; // We use a temp local to materialize a SIMD value, since at this point // Liftoff does not support any SIMD operations. @@ -74,7 +74,7 @@ WASM_SIMD_LIFTOFF_TEST(S128Param) { WASM_SIMD_LIFTOFF_TEST(S128Return) { // Test how functions returning SIMD values are processed. - WasmRunner<int32_t> r(TestExecutionTier::kLiftoff, kNoLowerSimd); + WasmRunner<int32_t> r(TestExecutionTier::kLiftoff); TestSignatures sigs; WasmFunctionCompiler& simd_func = r.NewFunction(sigs.s_i()); byte temp1 = simd_func.AllocateLocal(kWasmS128); @@ -93,7 +93,7 @@ WASM_SIMD_LIFTOFF_TEST(REGRESS_1088273) { // explicitly skip them. if (!CpuFeatures::SupportsWasmSimd128()) return; - WasmRunner<int32_t> r(TestExecutionTier::kLiftoff, kNoLowerSimd); + WasmRunner<int32_t> r(TestExecutionTier::kLiftoff); TestSignatures sigs; WasmFunctionCompiler& simd_func = r.NewFunction(sigs.s_i()); byte temp1 = simd_func.AllocateLocal(kWasmS128); @@ -109,7 +109,7 @@ WASM_SIMD_LIFTOFF_TEST(REGRESS_1088273) { // implementation in Liftoff is a bit more tricky due to shuffle requiring // adjacent registers in ARM/ARM64. WASM_SIMD_LIFTOFF_TEST(I8x16Shuffle) { - WasmRunner<int32_t> r(TestExecutionTier::kLiftoff, kNoLowerSimd); + WasmRunner<int32_t> r(TestExecutionTier::kLiftoff); // Temps to use up registers and force non-adjacent registers for shuffle. byte local0 = r.AllocateLocal(kWasmS128); byte local1 = r.AllocateLocal(kWasmS128); @@ -154,7 +154,7 @@ WASM_SIMD_LIFTOFF_TEST(I8x16Shuffle) { // Exercise logic in Liftoff's implementation of shuffle when inputs to the // shuffle are the same register. WASM_SIMD_LIFTOFF_TEST(I8x16Shuffle_SingleOperand) { - WasmRunner<int32_t> r(TestExecutionTier::kLiftoff, kNoLowerSimd); + WasmRunner<int32_t> r(TestExecutionTier::kLiftoff); byte local0 = r.AllocateLocal(kWasmS128); byte* g0 = r.builder().AddGlobal<byte>(kWasmS128); @@ -190,7 +190,7 @@ WASM_SIMD_LIFTOFF_TEST(I8x16Shuffle_SingleOperand) { // incorrect instruction for storing zeroes into the slot when the slot offset // was too large to fit in the instruction as an immediate. WASM_SIMD_LIFTOFF_TEST(FillStackSlotsWithZero_CheckStartOffset) { - WasmRunner<int64_t> r(TestExecutionTier::kLiftoff, kNoLowerSimd); + WasmRunner<int64_t> r(TestExecutionTier::kLiftoff); // Function that takes in 32 i64 arguments, returns i64. This gets us a large // enough starting offset from which we spill locals. // start = 32 * 8 + 16 (instance) = 272 (cannot fit in signed int9). diff --git a/deps/v8/test/cctest/wasm/test-run-wasm-simd-scalar-lowering.cc b/deps/v8/test/cctest/wasm/test-run-wasm-simd-scalar-lowering.cc deleted file mode 100644 index c0cc3c7dac..0000000000 --- a/deps/v8/test/cctest/wasm/test-run-wasm-simd-scalar-lowering.cc +++ /dev/null @@ -1,332 +0,0 @@ -// Copyright 2020 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "src/wasm/compilation-environment.h" -#include "src/wasm/wasm-tier.h" -#include "test/cctest/cctest.h" -#include "test/cctest/wasm/wasm-run-utils.h" -#include "test/common/wasm/flag-utils.h" -#include "test/common/wasm/test-signatures.h" -#include "test/common/wasm/wasm-macro-gen.h" - -namespace v8 { -namespace internal { -namespace wasm { -namespace test_run_wasm_simd { - -#define WASM_SIMD_TEST(name) \ - void RunWasm_##name##_Impl(LowerSimd lower_simd, \ - TestExecutionTier execution_tier); \ - TEST(RunWasm_##name##_simd_lowered) { \ - EXPERIMENTAL_FLAG_SCOPE(simd); \ - RunWasm_##name##_Impl(kLowerSimd, TestExecutionTier::kTurbofan); \ - } \ - void RunWasm_##name##_Impl(LowerSimd lower_simd, \ - TestExecutionTier execution_tier) - -WASM_SIMD_TEST(I8x16ToF32x4) { - WasmRunner<int32_t, int32_t> r(execution_tier, lower_simd); - float* g = r.builder().AddGlobal<float>(kWasmS128); - byte param1 = 0; - BUILD(r, - WASM_GLOBAL_SET( - 0, WASM_SIMD_UNOP(kExprF32x4Sqrt, - WASM_SIMD_I8x16_SPLAT(WASM_LOCAL_GET(param1)))), - WASM_ONE); - - // Arbitrary pattern that doesn't end up creating a NaN. - r.Call(0x5b); - float f = bit_cast<float>(0x5b5b5b5b); - float actual = ReadLittleEndianValue<float>(&g[0]); - float expected = std::sqrt(f); - CHECK_EQ(expected, actual); -} - -WASM_SIMD_TEST(F64x2_Call_Return) { - // Check that calling a function with i16x8 arguments, and returns i16x8, is - // correctly lowered. The signature of the functions are always lowered to 4 - // Word32, so each i16x8 needs to be correctly converted. - TestSignatures sigs; - WasmRunner<double, double, double> r(execution_tier, lower_simd); - - WasmFunctionCompiler& fn = r.NewFunction(sigs.s_ss()); - BUILD(fn, - WASM_SIMD_BINOP(kExprF64x2Min, WASM_LOCAL_GET(0), WASM_LOCAL_GET(1))); - - byte c1[16] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - byte c2[16] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0x7f, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0x7f}; - - BUILD(r, - WASM_SIMD_F64x2_EXTRACT_LANE( - 0, WASM_CALL_FUNCTION(fn.function_index(), WASM_SIMD_CONSTANT(c1), - WASM_SIMD_CONSTANT(c2)))); - CHECK_EQ(0, r.Call(double{0}, bit_cast<double>(0x7fefffffffffffff))); -} - -WASM_SIMD_TEST(F32x4_Call_Return) { - // Check that functions that return F32x4 are correctly lowered into 4 int32 - // nodes. The signature of such functions are always lowered to 4 Word32, and - // if the last operation before the return was a f32x4, it will need to be - // bitcasted from float to int. - TestSignatures sigs; - WasmRunner<float, float> r(execution_tier, lower_simd); - - // A simple function that just calls f32x4.neg on the param. - WasmFunctionCompiler& fn = r.NewFunction(sigs.s_s()); - BUILD(fn, WASM_SIMD_UNOP(kExprF32x4Neg, WASM_LOCAL_GET(0))); - - // TODO(v8:10507) - // Use i32x4 splat since scalar lowering has a problem with f32x4 as a param - // to a function call, the lowering is not correct yet. - BUILD(r, - WASM_SIMD_F32x4_EXTRACT_LANE( - 0, WASM_CALL_FUNCTION(fn.function_index(), - WASM_SIMD_F32x4_SPLAT(WASM_LOCAL_GET(0))))); - CHECK_EQ(-1.0, r.Call(1)); -} - -WASM_SIMD_TEST(I8x16_Call_Return) { - // Check that calling a function with i8x16 arguments, and returns i8x16, is - // correctly lowered. The signature of the functions are always lowered to 4 - // Word32, so each i8x16 needs to be correctly converted. - TestSignatures sigs; - WasmRunner<uint32_t, uint32_t> r(execution_tier, lower_simd); - - WasmFunctionCompiler& fn = r.NewFunction(sigs.s_ss()); - BUILD(fn, - WASM_SIMD_BINOP(kExprI8x16Add, WASM_LOCAL_GET(0), WASM_LOCAL_GET(1))); - - BUILD(r, - WASM_SIMD_I8x16_EXTRACT_LANE( - 0, WASM_CALL_FUNCTION(fn.function_index(), - WASM_SIMD_I8x16_SPLAT(WASM_LOCAL_GET(0)), - WASM_SIMD_I8x16_SPLAT(WASM_LOCAL_GET(0))))); - CHECK_EQ(2, r.Call(1)); -} - -WASM_SIMD_TEST(I16x8_Call_Return) { - // Check that calling a function with i16x8 arguments, and returns i16x8, is - // correctly lowered. The signature of the functions are always lowered to 4 - // Word32, so each i16x8 needs to be correctly converted. - TestSignatures sigs; - WasmRunner<uint32_t, uint32_t> r(execution_tier, lower_simd); - - WasmFunctionCompiler& fn = r.NewFunction(sigs.s_ss()); - BUILD(fn, - WASM_SIMD_BINOP(kExprI16x8Add, WASM_LOCAL_GET(0), WASM_LOCAL_GET(1))); - - BUILD(r, - WASM_SIMD_I16x8_EXTRACT_LANE( - 0, WASM_CALL_FUNCTION(fn.function_index(), - WASM_SIMD_I16x8_SPLAT(WASM_LOCAL_GET(0)), - WASM_SIMD_I16x8_SPLAT(WASM_LOCAL_GET(0))))); - CHECK_EQ(2, r.Call(1)); -} - -WASM_SIMD_TEST(I64x2_Call_Return) { - // Check that calling a function with i64x2 arguments, and returns i64x2, is - // correctly lowered. The signature of the functions are always lowered to 4 - // Word32, so each i64x2 needs to be correctly converted. - TestSignatures sigs; - WasmRunner<uint64_t, uint64_t> r(execution_tier, lower_simd); - - WasmFunctionCompiler& fn = r.NewFunction(sigs.s_ss()); - BUILD(fn, - WASM_SIMD_BINOP(kExprI64x2Add, WASM_LOCAL_GET(0), WASM_LOCAL_GET(1))); - - BUILD(r, - WASM_SIMD_I64x2_EXTRACT_LANE( - 0, WASM_CALL_FUNCTION(fn.function_index(), - WASM_SIMD_I64x2_SPLAT(WASM_LOCAL_GET(0)), - WASM_SIMD_I64x2_SPLAT(WASM_LOCAL_GET(0))))); - CHECK_EQ(2, r.Call(1)); -} - -WASM_SIMD_TEST(I8x16Eq_ToTest_S128Const) { - // Test implementation of S128Const in scalar lowering, this test case was - // causing a crash. - TestSignatures sigs; - WasmRunner<uint32_t> r(execution_tier, lower_simd); - - byte c1[16] = {0x00, 0x00, 0x80, 0xbf, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x40}; - byte c2[16] = {0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02}; - byte c3[16] = {0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - - BUILD(r, - WASM_SIMD_BINOP(kExprI8x16Eq, WASM_SIMD_CONSTANT(c1), - WASM_SIMD_CONSTANT(c2)), - WASM_SIMD_CONSTANT(c3), WASM_SIMD_OP(kExprI8x16Eq), - WASM_SIMD_OP(kExprI8x16ExtractLaneS), TO_BYTE(4)); - CHECK_EQ(0xffffffff, r.Call()); -} - -WASM_SIMD_TEST(F32x4_S128Const) { - // Test that S128Const lowering is done correctly when it is used as an input - // into a f32x4 operation. This was triggering a CHECK failure in the - // register-allocator-verifier. - TestSignatures sigs; - WasmRunner<float> r(execution_tier, lower_simd); - - // f32x4(1.0, 2.0, 3.0, 4.0) - byte c1[16] = {0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x40, - 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x80, 0x40}; - // f32x4(5.0, 6.0, 7.0, 8.0) - byte c2[16] = {0x00, 0x00, 0xa0, 0x40, 0x00, 0x00, 0xc0, 0x40, - 0x00, 0x00, 0xe0, 0x40, 0x00, 0x00, 0x00, 0x41}; - - BUILD(r, - WASM_SIMD_BINOP(kExprF32x4Min, WASM_SIMD_CONSTANT(c1), - WASM_SIMD_CONSTANT(c2)), - WASM_SIMD_OP(kExprF32x4ExtractLane), TO_BYTE(0)); - CHECK_EQ(1.0, r.Call()); -} - -WASM_SIMD_TEST(AllTrue_DifferentShapes) { - // Test all_true lowring with splats of different shapes. - { - WasmRunner<int32_t, int32_t> r(execution_tier, lower_simd); - - BUILD(r, WASM_SIMD_I32x4_SPLAT(WASM_LOCAL_GET(0)), - WASM_SIMD_OP(kExprI8x16AllTrue)); - - CHECK_EQ(0, r.Call(0x00FF00FF)); - } - - { - WasmRunner<int32_t, int32_t> r(execution_tier, lower_simd); - - BUILD(r, WASM_SIMD_I32x4_SPLAT(WASM_LOCAL_GET(0)), - WASM_SIMD_OP(kExprI16x8AllTrue)); - - CHECK_EQ(0, r.Call(0x000000FF)); - } - - // Check float input to all_true. - { - WasmRunner<int32_t, float> r(execution_tier, lower_simd); - - BUILD(r, WASM_SIMD_F32x4_SPLAT(WASM_LOCAL_GET(0)), - WASM_SIMD_OP(kExprI16x8AllTrue)); - - CHECK_EQ(1, r.Call(0x000F000F)); - } -} - -WASM_SIMD_TEST(AnyTrue_DifferentShapes) { - // Test any_true lowring with splats of different shapes. - { - WasmRunner<int32_t, int32_t> r(execution_tier, lower_simd); - - BUILD(r, WASM_SIMD_I32x4_SPLAT(WASM_LOCAL_GET(0)), - WASM_SIMD_OP(kExprV128AnyTrue)); - - CHECK_EQ(0, r.Call(0x00000000)); - } - - { - WasmRunner<int32_t, int32_t> r(execution_tier, lower_simd); - - BUILD(r, WASM_SIMD_I32x4_SPLAT(WASM_LOCAL_GET(0)), - WASM_SIMD_OP(kExprV128AnyTrue)); - - CHECK_EQ(1, r.Call(0x000000FF)); - } - - // Check float input to any_true. - { - WasmRunner<int32_t, float> r(execution_tier, lower_simd); - - BUILD(r, WASM_SIMD_F32x4_SPLAT(WASM_LOCAL_GET(0)), - WASM_SIMD_OP(kExprV128AnyTrue)); - - CHECK_EQ(0, r.Call(0x00000000)); - } -} - -WASM_SIMD_TEST(V128_I64_PARAMS) { - // This test exercises interaction between simd and int64 lowering. The - // parameter indices were not correctly lowered because simd lowered a v128 in - // the function signature into 4 word32, and int64 was still treating it as 1 - // parameter. - WasmRunner<uint64_t, uint64_t> r(execution_tier, lower_simd); - - FunctionSig::Builder builder(r.zone(), 1, 2); - builder.AddParam(kWasmS128); - builder.AddParam(kWasmI64); - builder.AddReturn(kWasmS128); - FunctionSig* sig = builder.Build(); - WasmFunctionCompiler& fn = r.NewFunction(sig); - - // Build a function that has both V128 and I64 arguments. - BUILD(fn, - WASM_SIMD_I64x2_REPLACE_LANE(0, WASM_LOCAL_GET(0), WASM_LOCAL_GET(1))); - - BUILD(r, WASM_SIMD_I64x2_EXTRACT_LANE( - 0, WASM_SIMD_I64x2_SPLAT(WASM_LOCAL_GET(0)))); - - CHECK_EQ(0, r.Call(0)); -} - -WASM_SIMD_TEST(I8x16WidenS_I16x8NarrowU) { - // Test any_true lowring with splats of different shapes. - { - WasmRunner<int32_t, int16_t> r(execution_tier, lower_simd); - - BUILD(r, WASM_SIMD_I16x8_SPLAT(WASM_LOCAL_GET(0)), - WASM_SIMD_I16x8_SPLAT(WASM_LOCAL_GET(0)), - WASM_SIMD_OP(kExprI8x16UConvertI16x8), - WASM_SIMD_OP(kExprI16x8SConvertI8x16Low), - WASM_SIMD_OP(kExprI32x4ExtractLane), TO_BYTE(0)); - - CHECK_EQ(bit_cast<int32_t>(0xffffffff), r.Call(0x7fff)); - } -} - -WASM_SIMD_TEST(S128SelectWithF32x4) { - WasmRunner<float, int32_t, float, int32_t> r(execution_tier, lower_simd); - BUILD(r, WASM_LOCAL_GET(0), WASM_SIMD_OP(kExprI32x4Splat), WASM_LOCAL_GET(1), - WASM_SIMD_OP(kExprF32x4Splat), WASM_LOCAL_GET(2), - WASM_SIMD_OP(kExprI32x4Splat), WASM_SIMD_OP(kExprS128Select), - WASM_SIMD_OP(kExprF32x4ExtractLane), 0); - // Selection mask is all 0, so always select 2.0. - CHECK_EQ(2.0, r.Call(1, 2.0, 0)); -} - -WASM_SIMD_TEST(S128AndNotWithF32x4) { - WasmRunner<float, int32_t, float> r(execution_tier, lower_simd); - BUILD(r, WASM_LOCAL_GET(0), WASM_SIMD_OP(kExprI32x4Splat), WASM_LOCAL_GET(1), - WASM_SIMD_OP(kExprF32x4Splat), WASM_SIMD_OP(kExprS128AndNot), - WASM_SIMD_OP(kExprF32x4ExtractLane), 0); - // 0x00700000 & !0x40800000 = 0x00700000 - CHECK_EQ(bit_cast<float>(0x700000), - r.Call(0x00700000, bit_cast<float>(0x40800000))); -} - -WASM_SIMD_TEST(FunctionCallWithExtractLaneOutputAsArgument) { - // This uses the result of an extract lane as an argument to a function call - // to exercise lowering for kCall and make sure the the extract lane is - // correctly replaced with a scalar. - TestSignatures sigs; - WasmRunner<int32_t, int32_t> r(execution_tier, lower_simd); - WasmFunctionCompiler& fn = r.NewFunction(sigs.f_f()); - - BUILD(fn, WASM_LOCAL_GET(0), WASM_LOCAL_GET(0), kExprF32Add); - - BUILD(r, WASM_LOCAL_GET(0), WASM_SIMD_OP(kExprI32x4Splat), - WASM_SIMD_OP(kExprF32x4ExtractLane), 0, kExprCallFunction, - fn.function_index(), WASM_SIMD_OP(kExprF32x4Splat), WASM_LOCAL_GET(0), - WASM_SIMD_OP(kExprI32x4Splat), WASM_SIMD_OP(kExprI32x4Add), - WASM_SIMD_OP(kExprI32x4ExtractLane), 0); - CHECK_EQ(15, r.Call(5)); -} - -} // namespace test_run_wasm_simd -} // namespace wasm -} // namespace internal -} // namespace v8 diff --git a/deps/v8/test/cctest/wasm/test-run-wasm-simd.cc b/deps/v8/test/cctest/wasm/test-run-wasm-simd.cc index 4dd925a20a..4697a6a798 100644 --- a/deps/v8/test/cctest/wasm/test-run-wasm-simd.cc +++ b/deps/v8/test/cctest/wasm/test-run-wasm-simd.cc @@ -48,23 +48,21 @@ namespace { using Shuffle = std::array<int8_t, kSimd128Size>; -#define WASM_SIMD_TEST(name) \ - void RunWasm_##name##_Impl(LowerSimd lower_simd, \ - TestExecutionTier execution_tier); \ - TEST(RunWasm_##name##_turbofan) { \ - EXPERIMENTAL_FLAG_SCOPE(simd); \ - RunWasm_##name##_Impl(kNoLowerSimd, TestExecutionTier::kTurbofan); \ - } \ - TEST(RunWasm_##name##_liftoff) { \ - EXPERIMENTAL_FLAG_SCOPE(simd); \ - RunWasm_##name##_Impl(kNoLowerSimd, TestExecutionTier::kLiftoff); \ - } \ - TEST(RunWasm_##name##_interpreter) { \ - EXPERIMENTAL_FLAG_SCOPE(simd); \ - RunWasm_##name##_Impl(kNoLowerSimd, TestExecutionTier::kInterpreter); \ - } \ - void RunWasm_##name##_Impl(LowerSimd lower_simd, \ - TestExecutionTier execution_tier) +#define WASM_SIMD_TEST(name) \ + void RunWasm_##name##_Impl(TestExecutionTier execution_tier); \ + TEST(RunWasm_##name##_turbofan) { \ + EXPERIMENTAL_FLAG_SCOPE(simd); \ + RunWasm_##name##_Impl(TestExecutionTier::kTurbofan); \ + } \ + TEST(RunWasm_##name##_liftoff) { \ + EXPERIMENTAL_FLAG_SCOPE(simd); \ + RunWasm_##name##_Impl(TestExecutionTier::kLiftoff); \ + } \ + TEST(RunWasm_##name##_interpreter) { \ + EXPERIMENTAL_FLAG_SCOPE(simd); \ + RunWasm_##name##_Impl(TestExecutionTier::kInterpreter); \ + } \ + void RunWasm_##name##_Impl(TestExecutionTier execution_tier) // For signed integral types, use base::AddWithWraparound. template <typename T, typename = typename std::enable_if< @@ -262,7 +260,7 @@ T Abs(T a) { WASM_RETURN1(WASM_ZERO)) WASM_SIMD_TEST(S128Globals) { - WasmRunner<int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t> r(execution_tier); // Set up a global to hold input and output vectors. int32_t* g0 = r.builder().AddGlobal<int32_t>(kWasmS128); int32_t* g1 = r.builder().AddGlobal<int32_t>(kWasmS128); @@ -282,7 +280,7 @@ WASM_SIMD_TEST(S128Globals) { } WASM_SIMD_TEST(F32x4Splat) { - WasmRunner<int32_t, float> r(execution_tier, lower_simd); + WasmRunner<int32_t, float> r(execution_tier); // Set up a global to hold output vector. float* g = r.builder().AddGlobal<float>(kWasmS128); byte param1 = 0; @@ -304,7 +302,7 @@ WASM_SIMD_TEST(F32x4Splat) { } WASM_SIMD_TEST(F32x4ReplaceLane) { - WasmRunner<int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t> r(execution_tier); // Set up a global to hold input/output vector. float* g = r.builder().AddGlobal<float>(kWasmS128); // Build function to replace each lane with its (FP) index. @@ -328,7 +326,7 @@ WASM_SIMD_TEST(F32x4ReplaceLane) { // Tests both signed and unsigned conversion. WASM_SIMD_TEST(F32x4ConvertI32x4) { - WasmRunner<int32_t, int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, int32_t> r(execution_tier); // Create two output vectors to hold signed and unsigned results. float* g0 = r.builder().AddGlobal<float>(kWasmS128); float* g1 = r.builder().AddGlobal<float>(kWasmS128); @@ -354,87 +352,86 @@ WASM_SIMD_TEST(F32x4ConvertI32x4) { } WASM_SIMD_TEST(F32x4Abs) { - RunF32x4UnOpTest(execution_tier, lower_simd, kExprF32x4Abs, std::abs); + RunF32x4UnOpTest(execution_tier, kExprF32x4Abs, std::abs); } WASM_SIMD_TEST(F32x4Neg) { - RunF32x4UnOpTest(execution_tier, lower_simd, kExprF32x4Neg, Negate); + RunF32x4UnOpTest(execution_tier, kExprF32x4Neg, Negate); } WASM_SIMD_TEST(F32x4Sqrt) { - RunF32x4UnOpTest(execution_tier, lower_simd, kExprF32x4Sqrt, std::sqrt); + RunF32x4UnOpTest(execution_tier, kExprF32x4Sqrt, std::sqrt); } WASM_SIMD_TEST(F32x4Ceil) { - RunF32x4UnOpTest(execution_tier, lower_simd, kExprF32x4Ceil, ceilf, true); + RunF32x4UnOpTest(execution_tier, kExprF32x4Ceil, ceilf, true); } WASM_SIMD_TEST(F32x4Floor) { - RunF32x4UnOpTest(execution_tier, lower_simd, kExprF32x4Floor, floorf, true); + RunF32x4UnOpTest(execution_tier, kExprF32x4Floor, floorf, true); } WASM_SIMD_TEST(F32x4Trunc) { - RunF32x4UnOpTest(execution_tier, lower_simd, kExprF32x4Trunc, truncf, true); + RunF32x4UnOpTest(execution_tier, kExprF32x4Trunc, truncf, true); } WASM_SIMD_TEST(F32x4NearestInt) { - RunF32x4UnOpTest(execution_tier, lower_simd, kExprF32x4NearestInt, nearbyintf, - true); + RunF32x4UnOpTest(execution_tier, kExprF32x4NearestInt, nearbyintf, true); } WASM_SIMD_TEST(F32x4Add) { - RunF32x4BinOpTest(execution_tier, lower_simd, kExprF32x4Add, Add); + RunF32x4BinOpTest(execution_tier, kExprF32x4Add, Add); } WASM_SIMD_TEST(F32x4Sub) { - RunF32x4BinOpTest(execution_tier, lower_simd, kExprF32x4Sub, Sub); + RunF32x4BinOpTest(execution_tier, kExprF32x4Sub, Sub); } WASM_SIMD_TEST(F32x4Mul) { - RunF32x4BinOpTest(execution_tier, lower_simd, kExprF32x4Mul, Mul); + RunF32x4BinOpTest(execution_tier, kExprF32x4Mul, Mul); } WASM_SIMD_TEST(F32x4Div) { - RunF32x4BinOpTest(execution_tier, lower_simd, kExprF32x4Div, base::Divide); + RunF32x4BinOpTest(execution_tier, kExprF32x4Div, base::Divide); } WASM_SIMD_TEST(F32x4Min) { - RunF32x4BinOpTest(execution_tier, lower_simd, kExprF32x4Min, JSMin); + RunF32x4BinOpTest(execution_tier, kExprF32x4Min, JSMin); } WASM_SIMD_TEST(F32x4Max) { - RunF32x4BinOpTest(execution_tier, lower_simd, kExprF32x4Max, JSMax); + RunF32x4BinOpTest(execution_tier, kExprF32x4Max, JSMax); } WASM_SIMD_TEST(F32x4Pmin) { - RunF32x4BinOpTest(execution_tier, lower_simd, kExprF32x4Pmin, Minimum); + RunF32x4BinOpTest(execution_tier, kExprF32x4Pmin, Minimum); } WASM_SIMD_TEST(F32x4Pmax) { - RunF32x4BinOpTest(execution_tier, lower_simd, kExprF32x4Pmax, Maximum); + RunF32x4BinOpTest(execution_tier, kExprF32x4Pmax, Maximum); } WASM_SIMD_TEST(F32x4Eq) { - RunF32x4CompareOpTest(execution_tier, lower_simd, kExprF32x4Eq, Equal); + RunF32x4CompareOpTest(execution_tier, kExprF32x4Eq, Equal); } WASM_SIMD_TEST(F32x4Ne) { - RunF32x4CompareOpTest(execution_tier, lower_simd, kExprF32x4Ne, NotEqual); + RunF32x4CompareOpTest(execution_tier, kExprF32x4Ne, NotEqual); } WASM_SIMD_TEST(F32x4Gt) { - RunF32x4CompareOpTest(execution_tier, lower_simd, kExprF32x4Gt, Greater); + RunF32x4CompareOpTest(execution_tier, kExprF32x4Gt, Greater); } WASM_SIMD_TEST(F32x4Ge) { - RunF32x4CompareOpTest(execution_tier, lower_simd, kExprF32x4Ge, GreaterEqual); + RunF32x4CompareOpTest(execution_tier, kExprF32x4Ge, GreaterEqual); } WASM_SIMD_TEST(F32x4Lt) { - RunF32x4CompareOpTest(execution_tier, lower_simd, kExprF32x4Lt, Less); + RunF32x4CompareOpTest(execution_tier, kExprF32x4Lt, Less); } WASM_SIMD_TEST(F32x4Le) { - RunF32x4CompareOpTest(execution_tier, lower_simd, kExprF32x4Le, LessEqual); + RunF32x4CompareOpTest(execution_tier, kExprF32x4Le, LessEqual); } WASM_SIMD_TEST(I64x2Splat) { - WasmRunner<int32_t, int64_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, int64_t> r(execution_tier); // Set up a global to hold output vector. int64_t* g = r.builder().AddGlobal<int64_t>(kWasmS128); byte param1 = 0; @@ -452,7 +449,7 @@ WASM_SIMD_TEST(I64x2Splat) { } WASM_SIMD_TEST(I64x2ExtractLane) { - WasmRunner<int64_t> r(execution_tier, lower_simd); + WasmRunner<int64_t> r(execution_tier); r.AllocateLocal(kWasmI64); r.AllocateLocal(kWasmS128); BUILD( @@ -465,7 +462,7 @@ WASM_SIMD_TEST(I64x2ExtractLane) { } WASM_SIMD_TEST(I64x2ReplaceLane) { - WasmRunner<int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t> r(execution_tier); // Set up a global to hold input/output vector. int64_t* g = r.builder().AddGlobal<int64_t>(kWasmS128); // Build function to replace each lane with its index. @@ -484,65 +481,59 @@ WASM_SIMD_TEST(I64x2ReplaceLane) { } WASM_SIMD_TEST(I64x2Neg) { - RunI64x2UnOpTest(execution_tier, lower_simd, kExprI64x2Neg, - base::NegateWithWraparound); + RunI64x2UnOpTest(execution_tier, kExprI64x2Neg, base::NegateWithWraparound); } WASM_SIMD_TEST(I64x2Abs) { - RunI64x2UnOpTest(execution_tier, lower_simd, kExprI64x2Abs, std::abs); + RunI64x2UnOpTest(execution_tier, kExprI64x2Abs, std::abs); } WASM_SIMD_TEST(I64x2Shl) { - RunI64x2ShiftOpTest(execution_tier, lower_simd, kExprI64x2Shl, - LogicalShiftLeft); + RunI64x2ShiftOpTest(execution_tier, kExprI64x2Shl, LogicalShiftLeft); } WASM_SIMD_TEST(I64x2ShrS) { - RunI64x2ShiftOpTest(execution_tier, lower_simd, kExprI64x2ShrS, - ArithmeticShiftRight); + RunI64x2ShiftOpTest(execution_tier, kExprI64x2ShrS, ArithmeticShiftRight); } WASM_SIMD_TEST(I64x2ShrU) { - RunI64x2ShiftOpTest(execution_tier, lower_simd, kExprI64x2ShrU, - LogicalShiftRight); + RunI64x2ShiftOpTest(execution_tier, kExprI64x2ShrU, LogicalShiftRight); } WASM_SIMD_TEST(I64x2Add) { - RunI64x2BinOpTest(execution_tier, lower_simd, kExprI64x2Add, - base::AddWithWraparound); + RunI64x2BinOpTest(execution_tier, kExprI64x2Add, base::AddWithWraparound); } WASM_SIMD_TEST(I64x2Sub) { - RunI64x2BinOpTest(execution_tier, lower_simd, kExprI64x2Sub, - base::SubWithWraparound); + RunI64x2BinOpTest(execution_tier, kExprI64x2Sub, base::SubWithWraparound); } WASM_SIMD_TEST(I64x2Eq) { - RunI64x2BinOpTest(execution_tier, lower_simd, kExprI64x2Eq, Equal); + RunI64x2BinOpTest(execution_tier, kExprI64x2Eq, Equal); } WASM_SIMD_TEST(I64x2Ne) { - RunI64x2BinOpTest(execution_tier, lower_simd, kExprI64x2Ne, NotEqual); + RunI64x2BinOpTest(execution_tier, kExprI64x2Ne, NotEqual); } WASM_SIMD_TEST(I64x2LtS) { - RunI64x2BinOpTest(execution_tier, lower_simd, kExprI64x2LtS, Less); + RunI64x2BinOpTest(execution_tier, kExprI64x2LtS, Less); } WASM_SIMD_TEST(I64x2LeS) { - RunI64x2BinOpTest(execution_tier, lower_simd, kExprI64x2LeS, LessEqual); + RunI64x2BinOpTest(execution_tier, kExprI64x2LeS, LessEqual); } WASM_SIMD_TEST(I64x2GtS) { - RunI64x2BinOpTest(execution_tier, lower_simd, kExprI64x2GtS, Greater); + RunI64x2BinOpTest(execution_tier, kExprI64x2GtS, Greater); } WASM_SIMD_TEST(I64x2GeS) { - RunI64x2BinOpTest(execution_tier, lower_simd, kExprI64x2GeS, GreaterEqual); + RunI64x2BinOpTest(execution_tier, kExprI64x2GeS, GreaterEqual); } WASM_SIMD_TEST(F64x2Splat) { - WasmRunner<int32_t, double> r(execution_tier, lower_simd); + WasmRunner<int32_t, double> r(execution_tier); // Set up a global to hold output vector. double* g = r.builder().AddGlobal<double>(kWasmS128); byte param1 = 0; @@ -564,7 +555,7 @@ WASM_SIMD_TEST(F64x2Splat) { } WASM_SIMD_TEST(F64x2ExtractLane) { - WasmRunner<double, double> r(execution_tier, lower_simd); + WasmRunner<double, double> r(execution_tier); byte param1 = 0; byte temp1 = r.AllocateLocal(kWasmF64); byte temp2 = r.AllocateLocal(kWasmS128); @@ -586,7 +577,7 @@ WASM_SIMD_TEST(F64x2ExtractLane) { } WASM_SIMD_TEST(F64x2ReplaceLane) { - WasmRunner<int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t> r(execution_tier); // Set up globals to hold input/output vector. double* g0 = r.builder().AddGlobal<double>(kWasmS128); double* g1 = r.builder().AddGlobal<double>(kWasmS128); @@ -609,7 +600,7 @@ WASM_SIMD_TEST(F64x2ReplaceLane) { } WASM_SIMD_TEST(F64x2ExtractLaneWithI64x2) { - WasmRunner<int64_t> r(execution_tier, lower_simd); + WasmRunner<int64_t> r(execution_tier); BUILD(r, WASM_IF_ELSE_L( WASM_F64_EQ(WASM_SIMD_F64x2_EXTRACT_LANE( 0, WASM_SIMD_I64x2_SPLAT(WASM_I64V(1e15))), @@ -619,7 +610,7 @@ WASM_SIMD_TEST(F64x2ExtractLaneWithI64x2) { } WASM_SIMD_TEST(I64x2ExtractWithF64x2) { - WasmRunner<int64_t> r(execution_tier, lower_simd); + WasmRunner<int64_t> r(execution_tier); BUILD(r, WASM_IF_ELSE_L( WASM_I64_EQ(WASM_SIMD_I64x2_EXTRACT_LANE( 0, WASM_SIMD_F64x2_SPLAT(WASM_F64(1e15))), @@ -629,38 +620,37 @@ WASM_SIMD_TEST(I64x2ExtractWithF64x2) { } WASM_SIMD_TEST(F64x2Abs) { - RunF64x2UnOpTest(execution_tier, lower_simd, kExprF64x2Abs, std::abs); + RunF64x2UnOpTest(execution_tier, kExprF64x2Abs, std::abs); } WASM_SIMD_TEST(F64x2Neg) { - RunF64x2UnOpTest(execution_tier, lower_simd, kExprF64x2Neg, Negate); + RunF64x2UnOpTest(execution_tier, kExprF64x2Neg, Negate); } WASM_SIMD_TEST(F64x2Sqrt) { - RunF64x2UnOpTest(execution_tier, lower_simd, kExprF64x2Sqrt, std::sqrt); + RunF64x2UnOpTest(execution_tier, kExprF64x2Sqrt, std::sqrt); } WASM_SIMD_TEST(F64x2Ceil) { - RunF64x2UnOpTest(execution_tier, lower_simd, kExprF64x2Ceil, ceil, true); + RunF64x2UnOpTest(execution_tier, kExprF64x2Ceil, ceil, true); } WASM_SIMD_TEST(F64x2Floor) { - RunF64x2UnOpTest(execution_tier, lower_simd, kExprF64x2Floor, floor, true); + RunF64x2UnOpTest(execution_tier, kExprF64x2Floor, floor, true); } WASM_SIMD_TEST(F64x2Trunc) { - RunF64x2UnOpTest(execution_tier, lower_simd, kExprF64x2Trunc, trunc, true); + RunF64x2UnOpTest(execution_tier, kExprF64x2Trunc, trunc, true); } WASM_SIMD_TEST(F64x2NearestInt) { - RunF64x2UnOpTest(execution_tier, lower_simd, kExprF64x2NearestInt, nearbyint, - true); + RunF64x2UnOpTest(execution_tier, kExprF64x2NearestInt, nearbyint, true); } template <typename SrcType> void RunF64x2ConvertLowI32x4Test(TestExecutionTier execution_tier, - LowerSimd lower_simd, WasmOpcode opcode) { - WasmRunner<int32_t, SrcType> r(execution_tier, lower_simd); + WasmOpcode opcode) { + WasmRunner<int32_t, SrcType> r(execution_tier); double* g = r.builder().template AddGlobal<double>(kWasmS128); BUILD(r, WASM_GLOBAL_SET( @@ -683,19 +673,19 @@ void RunF64x2ConvertLowI32x4Test(TestExecutionTier execution_tier, } WASM_SIMD_TEST(F64x2ConvertLowI32x4S) { - RunF64x2ConvertLowI32x4Test<int32_t>(execution_tier, lower_simd, + RunF64x2ConvertLowI32x4Test<int32_t>(execution_tier, kExprF64x2ConvertLowI32x4S); } WASM_SIMD_TEST(F64x2ConvertLowI32x4U) { - RunF64x2ConvertLowI32x4Test<uint32_t>(execution_tier, lower_simd, + RunF64x2ConvertLowI32x4Test<uint32_t>(execution_tier, kExprF64x2ConvertLowI32x4U); } template <typename SrcType> void RunI32x4TruncSatF64x2Test(TestExecutionTier execution_tier, - LowerSimd lower_simd, WasmOpcode opcode) { - WasmRunner<int32_t, double> r(execution_tier, lower_simd); + WasmOpcode opcode) { + WasmRunner<int32_t, double> r(execution_tier); SrcType* g = r.builder().AddGlobal<SrcType>(kWasmS128); BUILD( r, @@ -718,17 +708,17 @@ void RunI32x4TruncSatF64x2Test(TestExecutionTier execution_tier, } WASM_SIMD_TEST(I32x4TruncSatF64x2SZero) { - RunI32x4TruncSatF64x2Test<int32_t>(execution_tier, lower_simd, + RunI32x4TruncSatF64x2Test<int32_t>(execution_tier, kExprI32x4TruncSatF64x2SZero); } WASM_SIMD_TEST(I32x4TruncSatF64x2UZero) { - RunI32x4TruncSatF64x2Test<uint32_t>(execution_tier, lower_simd, + RunI32x4TruncSatF64x2Test<uint32_t>(execution_tier, kExprI32x4TruncSatF64x2UZero); } WASM_SIMD_TEST(F32x4DemoteF64x2Zero) { - WasmRunner<int32_t, double> r(execution_tier, lower_simd); + WasmRunner<int32_t, double> r(execution_tier); float* g = r.builder().AddGlobal<float>(kWasmS128); BUILD(r, WASM_GLOBAL_SET( @@ -751,7 +741,7 @@ WASM_SIMD_TEST(F32x4DemoteF64x2Zero) { } WASM_SIMD_TEST(F64x2PromoteLowF32x4) { - WasmRunner<int32_t, float> r(execution_tier, lower_simd); + WasmRunner<int32_t, float> r(execution_tier); double* g = r.builder().AddGlobal<double>(kWasmS128); BUILD(r, WASM_GLOBAL_SET( @@ -770,68 +760,67 @@ WASM_SIMD_TEST(F64x2PromoteLowF32x4) { } WASM_SIMD_TEST(F64x2Add) { - RunF64x2BinOpTest(execution_tier, lower_simd, kExprF64x2Add, Add); + RunF64x2BinOpTest(execution_tier, kExprF64x2Add, Add); } WASM_SIMD_TEST(F64x2Sub) { - RunF64x2BinOpTest(execution_tier, lower_simd, kExprF64x2Sub, Sub); + RunF64x2BinOpTest(execution_tier, kExprF64x2Sub, Sub); } WASM_SIMD_TEST(F64x2Mul) { - RunF64x2BinOpTest(execution_tier, lower_simd, kExprF64x2Mul, Mul); + RunF64x2BinOpTest(execution_tier, kExprF64x2Mul, Mul); } WASM_SIMD_TEST(F64x2Div) { - RunF64x2BinOpTest(execution_tier, lower_simd, kExprF64x2Div, base::Divide); + RunF64x2BinOpTest(execution_tier, kExprF64x2Div, base::Divide); } WASM_SIMD_TEST(F64x2Pmin) { - RunF64x2BinOpTest(execution_tier, lower_simd, kExprF64x2Pmin, Minimum); + RunF64x2BinOpTest(execution_tier, kExprF64x2Pmin, Minimum); } WASM_SIMD_TEST(F64x2Pmax) { - RunF64x2BinOpTest(execution_tier, lower_simd, kExprF64x2Pmax, Maximum); + RunF64x2BinOpTest(execution_tier, kExprF64x2Pmax, Maximum); } WASM_SIMD_TEST(F64x2Eq) { - RunF64x2CompareOpTest(execution_tier, lower_simd, kExprF64x2Eq, Equal); + RunF64x2CompareOpTest(execution_tier, kExprF64x2Eq, Equal); } WASM_SIMD_TEST(F64x2Ne) { - RunF64x2CompareOpTest(execution_tier, lower_simd, kExprF64x2Ne, NotEqual); + RunF64x2CompareOpTest(execution_tier, kExprF64x2Ne, NotEqual); } WASM_SIMD_TEST(F64x2Gt) { - RunF64x2CompareOpTest(execution_tier, lower_simd, kExprF64x2Gt, Greater); + RunF64x2CompareOpTest(execution_tier, kExprF64x2Gt, Greater); } WASM_SIMD_TEST(F64x2Ge) { - RunF64x2CompareOpTest(execution_tier, lower_simd, kExprF64x2Ge, GreaterEqual); + RunF64x2CompareOpTest(execution_tier, kExprF64x2Ge, GreaterEqual); } WASM_SIMD_TEST(F64x2Lt) { - RunF64x2CompareOpTest(execution_tier, lower_simd, kExprF64x2Lt, Less); + RunF64x2CompareOpTest(execution_tier, kExprF64x2Lt, Less); } WASM_SIMD_TEST(F64x2Le) { - RunF64x2CompareOpTest(execution_tier, lower_simd, kExprF64x2Le, LessEqual); + RunF64x2CompareOpTest(execution_tier, kExprF64x2Le, LessEqual); } WASM_SIMD_TEST(F64x2Min) { - RunF64x2BinOpTest(execution_tier, lower_simd, kExprF64x2Min, JSMin); + RunF64x2BinOpTest(execution_tier, kExprF64x2Min, JSMin); } WASM_SIMD_TEST(F64x2Max) { - RunF64x2BinOpTest(execution_tier, lower_simd, kExprF64x2Max, JSMax); + RunF64x2BinOpTest(execution_tier, kExprF64x2Max, JSMax); } WASM_SIMD_TEST(I64x2Mul) { - RunI64x2BinOpTest(execution_tier, lower_simd, kExprI64x2Mul, - base::MulWithWraparound); + RunI64x2BinOpTest(execution_tier, kExprI64x2Mul, base::MulWithWraparound); } WASM_SIMD_TEST(I32x4Splat) { - WasmRunner<int32_t, int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, int32_t> r(execution_tier); // Set up a global to hold output vector. int32_t* g = r.builder().AddGlobal<int32_t>(kWasmS128); byte param1 = 0; @@ -849,7 +838,7 @@ WASM_SIMD_TEST(I32x4Splat) { } WASM_SIMD_TEST(I32x4ReplaceLane) { - WasmRunner<int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t> r(execution_tier); // Set up a global to hold input/output vector. int32_t* g = r.builder().AddGlobal<int32_t>(kWasmS128); // Build function to replace each lane with its index. @@ -872,7 +861,7 @@ WASM_SIMD_TEST(I32x4ReplaceLane) { } WASM_SIMD_TEST(I16x8Splat) { - WasmRunner<int32_t, int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, int32_t> r(execution_tier); // Set up a global to hold output vector. int16_t* g = r.builder().AddGlobal<int16_t>(kWasmS128); byte param1 = 0; @@ -900,7 +889,7 @@ WASM_SIMD_TEST(I16x8Splat) { } WASM_SIMD_TEST(I16x8ReplaceLane) { - WasmRunner<int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t> r(execution_tier); // Set up a global to hold input/output vector. int16_t* g = r.builder().AddGlobal<int16_t>(kWasmS128); // Build function to replace each lane with its index. @@ -931,7 +920,7 @@ WASM_SIMD_TEST(I16x8ReplaceLane) { } WASM_SIMD_TEST(I8x16BitMask) { - WasmRunner<int32_t, int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, int32_t> r(execution_tier); byte value1 = r.AllocateLocal(kWasmS128); BUILD(r, WASM_LOCAL_SET(value1, WASM_SIMD_I8x16_SPLAT(WASM_LOCAL_GET(0))), @@ -950,7 +939,7 @@ WASM_SIMD_TEST(I8x16BitMask) { } WASM_SIMD_TEST(I16x8BitMask) { - WasmRunner<int32_t, int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, int32_t> r(execution_tier); byte value1 = r.AllocateLocal(kWasmS128); BUILD(r, WASM_LOCAL_SET(value1, WASM_SIMD_I16x8_SPLAT(WASM_LOCAL_GET(0))), @@ -969,7 +958,7 @@ WASM_SIMD_TEST(I16x8BitMask) { } WASM_SIMD_TEST(I32x4BitMask) { - WasmRunner<int32_t, int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, int32_t> r(execution_tier); byte value1 = r.AllocateLocal(kWasmS128); BUILD(r, WASM_LOCAL_SET(value1, WASM_SIMD_I32x4_SPLAT(WASM_LOCAL_GET(0))), @@ -988,7 +977,7 @@ WASM_SIMD_TEST(I32x4BitMask) { } WASM_SIMD_TEST(I64x2BitMask) { - WasmRunner<int32_t, int64_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, int64_t> r(execution_tier); byte value1 = r.AllocateLocal(kWasmS128); BUILD(r, WASM_LOCAL_SET(value1, WASM_SIMD_I64x2_SPLAT(WASM_LOCAL_GET(0))), @@ -1005,7 +994,7 @@ WASM_SIMD_TEST(I64x2BitMask) { } WASM_SIMD_TEST(I8x16Splat) { - WasmRunner<int32_t, int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, int32_t> r(execution_tier); // Set up a global to hold output vector. int8_t* g = r.builder().AddGlobal<int8_t>(kWasmS128); byte param1 = 0; @@ -1033,7 +1022,7 @@ WASM_SIMD_TEST(I8x16Splat) { } WASM_SIMD_TEST(I8x16ReplaceLane) { - WasmRunner<int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t> r(execution_tier); // Set up a global to hold input/output vector. int8_t* g = r.builder().AddGlobal<int8_t>(kWasmS128); // Build function to replace each lane with its index. @@ -1095,7 +1084,7 @@ int32_t ConvertToInt(double val, bool unsigned_integer) { // Tests both signed and unsigned conversion. WASM_SIMD_TEST(I32x4ConvertF32x4) { - WasmRunner<int32_t, float> r(execution_tier, lower_simd); + WasmRunner<int32_t, float> r(execution_tier); // Create two output vectors to hold signed and unsigned results. int32_t* g0 = r.builder().AddGlobal<int32_t>(kWasmS128); int32_t* g1 = r.builder().AddGlobal<int32_t>(kWasmS128); @@ -1123,7 +1112,7 @@ WASM_SIMD_TEST(I32x4ConvertF32x4) { // Tests both signed and unsigned conversion from I16x8 (unpacking). WASM_SIMD_TEST(I32x4ConvertI16x8) { - WasmRunner<int32_t, int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, int32_t> r(execution_tier); // Create four output vectors to hold signed and unsigned results. int32_t* g0 = r.builder().AddGlobal<int32_t>(kWasmS128); int32_t* g1 = r.builder().AddGlobal<int32_t>(kWasmS128); @@ -1158,7 +1147,7 @@ WASM_SIMD_TEST(I32x4ConvertI16x8) { // Tests both signed and unsigned conversion from I32x4 (unpacking). WASM_SIMD_TEST(I64x2ConvertI32x4) { - WasmRunner<int32_t, int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, int32_t> r(execution_tier); // Create four output vectors to hold signed and unsigned results. int64_t* g0 = r.builder().AddGlobal<int64_t>(kWasmS128); int64_t* g1 = r.builder().AddGlobal<int64_t>(kWasmS128); @@ -1193,25 +1182,23 @@ WASM_SIMD_TEST(I64x2ConvertI32x4) { } WASM_SIMD_TEST(I32x4Neg) { - RunI32x4UnOpTest(execution_tier, lower_simd, kExprI32x4Neg, - base::NegateWithWraparound); + RunI32x4UnOpTest(execution_tier, kExprI32x4Neg, base::NegateWithWraparound); } WASM_SIMD_TEST(I32x4Abs) { - RunI32x4UnOpTest(execution_tier, lower_simd, kExprI32x4Abs, std::abs); + RunI32x4UnOpTest(execution_tier, kExprI32x4Abs, std::abs); } WASM_SIMD_TEST(S128Not) { - RunI32x4UnOpTest(execution_tier, lower_simd, kExprS128Not, - [](int32_t x) { return ~x; }); + RunI32x4UnOpTest(execution_tier, kExprS128Not, [](int32_t x) { return ~x; }); } template <typename Narrow, typename Wide> void RunExtAddPairwiseTest(TestExecutionTier execution_tier, - LowerSimd lower_simd, WasmOpcode ext_add_pairwise, - WasmOpcode splat, Shuffle interleaving_shuffle) { + WasmOpcode ext_add_pairwise, WasmOpcode splat, + Shuffle interleaving_shuffle) { constexpr int num_lanes = kSimd128Size / sizeof(Wide); - WasmRunner<int32_t, Narrow, Narrow> r(execution_tier, lower_simd); + WasmRunner<int32_t, Narrow, Narrow> r(execution_tier); Wide* g = r.builder().template AddGlobal<Wide>(kWasmS128); BUILD(r, @@ -1239,142 +1226,133 @@ constexpr Shuffle interleave_8x16_shuffle = {0, 17, 2, 19, 4, 21, 6, 23, WASM_SIMD_TEST(I32x4ExtAddPairwiseI16x8S) { RunExtAddPairwiseTest<int16_t, int32_t>( - execution_tier, lower_simd, kExprI32x4ExtAddPairwiseI16x8S, - kExprI16x8Splat, interleave_16x8_shuffle); + execution_tier, kExprI32x4ExtAddPairwiseI16x8S, kExprI16x8Splat, + interleave_16x8_shuffle); } WASM_SIMD_TEST(I32x4ExtAddPairwiseI16x8U) { RunExtAddPairwiseTest<uint16_t, uint32_t>( - execution_tier, lower_simd, kExprI32x4ExtAddPairwiseI16x8U, - kExprI16x8Splat, interleave_16x8_shuffle); + execution_tier, kExprI32x4ExtAddPairwiseI16x8U, kExprI16x8Splat, + interleave_16x8_shuffle); } WASM_SIMD_TEST(I16x8ExtAddPairwiseI8x16S) { RunExtAddPairwiseTest<int8_t, int16_t>( - execution_tier, lower_simd, kExprI16x8ExtAddPairwiseI8x16S, - kExprI8x16Splat, interleave_8x16_shuffle); + execution_tier, kExprI16x8ExtAddPairwiseI8x16S, kExprI8x16Splat, + interleave_8x16_shuffle); } WASM_SIMD_TEST(I16x8ExtAddPairwiseI8x16U) { RunExtAddPairwiseTest<uint8_t, uint16_t>( - execution_tier, lower_simd, kExprI16x8ExtAddPairwiseI8x16U, - kExprI8x16Splat, interleave_8x16_shuffle); + execution_tier, kExprI16x8ExtAddPairwiseI8x16U, kExprI8x16Splat, + interleave_8x16_shuffle); } WASM_SIMD_TEST(I32x4Add) { - RunI32x4BinOpTest(execution_tier, lower_simd, kExprI32x4Add, - base::AddWithWraparound); + RunI32x4BinOpTest(execution_tier, kExprI32x4Add, base::AddWithWraparound); } WASM_SIMD_TEST(I32x4Sub) { - RunI32x4BinOpTest(execution_tier, lower_simd, kExprI32x4Sub, - base::SubWithWraparound); + RunI32x4BinOpTest(execution_tier, kExprI32x4Sub, base::SubWithWraparound); } WASM_SIMD_TEST(I32x4Mul) { - RunI32x4BinOpTest(execution_tier, lower_simd, kExprI32x4Mul, - base::MulWithWraparound); + RunI32x4BinOpTest(execution_tier, kExprI32x4Mul, base::MulWithWraparound); } WASM_SIMD_TEST(I32x4MinS) { - RunI32x4BinOpTest(execution_tier, lower_simd, kExprI32x4MinS, Minimum); + RunI32x4BinOpTest(execution_tier, kExprI32x4MinS, Minimum); } WASM_SIMD_TEST(I32x4MaxS) { - RunI32x4BinOpTest(execution_tier, lower_simd, kExprI32x4MaxS, Maximum); + RunI32x4BinOpTest(execution_tier, kExprI32x4MaxS, Maximum); } WASM_SIMD_TEST(I32x4MinU) { - RunI32x4BinOpTest(execution_tier, lower_simd, kExprI32x4MinU, - UnsignedMinimum); + RunI32x4BinOpTest(execution_tier, kExprI32x4MinU, UnsignedMinimum); } WASM_SIMD_TEST(I32x4MaxU) { - RunI32x4BinOpTest(execution_tier, lower_simd, kExprI32x4MaxU, + RunI32x4BinOpTest(execution_tier, kExprI32x4MaxU, UnsignedMaximum); } WASM_SIMD_TEST(S128And) { - RunI32x4BinOpTest(execution_tier, lower_simd, kExprS128And, + RunI32x4BinOpTest(execution_tier, kExprS128And, [](int32_t x, int32_t y) { return x & y; }); } WASM_SIMD_TEST(S128Or) { - RunI32x4BinOpTest(execution_tier, lower_simd, kExprS128Or, + RunI32x4BinOpTest(execution_tier, kExprS128Or, [](int32_t x, int32_t y) { return x | y; }); } WASM_SIMD_TEST(S128Xor) { - RunI32x4BinOpTest(execution_tier, lower_simd, kExprS128Xor, + RunI32x4BinOpTest(execution_tier, kExprS128Xor, [](int32_t x, int32_t y) { return x ^ y; }); } // Bitwise operation, doesn't really matter what simd type we test it with. WASM_SIMD_TEST(S128AndNot) { - RunI32x4BinOpTest(execution_tier, lower_simd, kExprS128AndNot, + RunI32x4BinOpTest(execution_tier, kExprS128AndNot, [](int32_t x, int32_t y) { return x & ~y; }); } WASM_SIMD_TEST(I32x4Eq) { - RunI32x4BinOpTest(execution_tier, lower_simd, kExprI32x4Eq, Equal); + RunI32x4BinOpTest(execution_tier, kExprI32x4Eq, Equal); } WASM_SIMD_TEST(I32x4Ne) { - RunI32x4BinOpTest(execution_tier, lower_simd, kExprI32x4Ne, NotEqual); + RunI32x4BinOpTest(execution_tier, kExprI32x4Ne, NotEqual); } WASM_SIMD_TEST(I32x4LtS) { - RunI32x4BinOpTest(execution_tier, lower_simd, kExprI32x4LtS, Less); + RunI32x4BinOpTest(execution_tier, kExprI32x4LtS, Less); } WASM_SIMD_TEST(I32x4LeS) { - RunI32x4BinOpTest(execution_tier, lower_simd, kExprI32x4LeS, LessEqual); + RunI32x4BinOpTest(execution_tier, kExprI32x4LeS, LessEqual); } WASM_SIMD_TEST(I32x4GtS) { - RunI32x4BinOpTest(execution_tier, lower_simd, kExprI32x4GtS, Greater); + RunI32x4BinOpTest(execution_tier, kExprI32x4GtS, Greater); } WASM_SIMD_TEST(I32x4GeS) { - RunI32x4BinOpTest(execution_tier, lower_simd, kExprI32x4GeS, GreaterEqual); + RunI32x4BinOpTest(execution_tier, kExprI32x4GeS, GreaterEqual); } WASM_SIMD_TEST(I32x4LtU) { - RunI32x4BinOpTest(execution_tier, lower_simd, kExprI32x4LtU, UnsignedLess); + RunI32x4BinOpTest(execution_tier, kExprI32x4LtU, UnsignedLess); } WASM_SIMD_TEST(I32x4LeU) { - RunI32x4BinOpTest(execution_tier, lower_simd, kExprI32x4LeU, - UnsignedLessEqual); + RunI32x4BinOpTest(execution_tier, kExprI32x4LeU, UnsignedLessEqual); } WASM_SIMD_TEST(I32x4GtU) { - RunI32x4BinOpTest(execution_tier, lower_simd, kExprI32x4GtU, UnsignedGreater); + RunI32x4BinOpTest(execution_tier, kExprI32x4GtU, UnsignedGreater); } WASM_SIMD_TEST(I32x4GeU) { - RunI32x4BinOpTest(execution_tier, lower_simd, kExprI32x4GeU, - UnsignedGreaterEqual); + RunI32x4BinOpTest(execution_tier, kExprI32x4GeU, UnsignedGreaterEqual); } WASM_SIMD_TEST(I32x4Shl) { - RunI32x4ShiftOpTest(execution_tier, lower_simd, kExprI32x4Shl, - LogicalShiftLeft); + RunI32x4ShiftOpTest(execution_tier, kExprI32x4Shl, LogicalShiftLeft); } WASM_SIMD_TEST(I32x4ShrS) { - RunI32x4ShiftOpTest(execution_tier, lower_simd, kExprI32x4ShrS, - ArithmeticShiftRight); + RunI32x4ShiftOpTest(execution_tier, kExprI32x4ShrS, ArithmeticShiftRight); } WASM_SIMD_TEST(I32x4ShrU) { - RunI32x4ShiftOpTest(execution_tier, lower_simd, kExprI32x4ShrU, - LogicalShiftRight); + RunI32x4ShiftOpTest(execution_tier, kExprI32x4ShrU, LogicalShiftRight); } // Tests both signed and unsigned conversion from I8x16 (unpacking). WASM_SIMD_TEST(I16x8ConvertI8x16) { - WasmRunner<int32_t, int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, int32_t> r(execution_tier); // Create four output vectors to hold signed and unsigned results. int16_t* g0 = r.builder().AddGlobal<int16_t>(kWasmS128); int16_t* g1 = r.builder().AddGlobal<int16_t>(kWasmS128); @@ -1409,7 +1387,7 @@ WASM_SIMD_TEST(I16x8ConvertI8x16) { // Tests both signed and unsigned conversion from I32x4 (packing). WASM_SIMD_TEST(I16x8ConvertI32x4) { - WasmRunner<int32_t, int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, int32_t> r(execution_tier); // Create output vectors to hold signed and unsigned results. int16_t* g0 = r.builder().AddGlobal<int16_t>(kWasmS128); int16_t* g1 = r.builder().AddGlobal<int16_t>(kWasmS128); @@ -1437,117 +1415,106 @@ WASM_SIMD_TEST(I16x8ConvertI32x4) { } WASM_SIMD_TEST(I16x8Neg) { - RunI16x8UnOpTest(execution_tier, lower_simd, kExprI16x8Neg, - base::NegateWithWraparound); + RunI16x8UnOpTest(execution_tier, kExprI16x8Neg, base::NegateWithWraparound); } WASM_SIMD_TEST(I16x8Abs) { - RunI16x8UnOpTest(execution_tier, lower_simd, kExprI16x8Abs, Abs); + RunI16x8UnOpTest(execution_tier, kExprI16x8Abs, Abs); } WASM_SIMD_TEST(I16x8Add) { - RunI16x8BinOpTest(execution_tier, lower_simd, kExprI16x8Add, - base::AddWithWraparound); + RunI16x8BinOpTest(execution_tier, kExprI16x8Add, base::AddWithWraparound); } WASM_SIMD_TEST(I16x8AddSatS) { - RunI16x8BinOpTest(execution_tier, lower_simd, kExprI16x8AddSatS, - SaturateAdd<int16_t>); + RunI16x8BinOpTest(execution_tier, kExprI16x8AddSatS, SaturateAdd<int16_t>); } WASM_SIMD_TEST(I16x8Sub) { - RunI16x8BinOpTest(execution_tier, lower_simd, kExprI16x8Sub, - base::SubWithWraparound); + RunI16x8BinOpTest(execution_tier, kExprI16x8Sub, base::SubWithWraparound); } WASM_SIMD_TEST(I16x8SubSatS) { - RunI16x8BinOpTest(execution_tier, lower_simd, kExprI16x8SubSatS, - SaturateSub<int16_t>); + RunI16x8BinOpTest(execution_tier, kExprI16x8SubSatS, SaturateSub<int16_t>); } WASM_SIMD_TEST(I16x8Mul) { - RunI16x8BinOpTest(execution_tier, lower_simd, kExprI16x8Mul, - base::MulWithWraparound); + RunI16x8BinOpTest(execution_tier, kExprI16x8Mul, base::MulWithWraparound); } WASM_SIMD_TEST(I16x8MinS) { - RunI16x8BinOpTest(execution_tier, lower_simd, kExprI16x8MinS, Minimum); + RunI16x8BinOpTest(execution_tier, kExprI16x8MinS, Minimum); } WASM_SIMD_TEST(I16x8MaxS) { - RunI16x8BinOpTest(execution_tier, lower_simd, kExprI16x8MaxS, Maximum); + RunI16x8BinOpTest(execution_tier, kExprI16x8MaxS, Maximum); } WASM_SIMD_TEST(I16x8AddSatU) { - RunI16x8BinOpTest<uint16_t>(execution_tier, lower_simd, kExprI16x8AddSatU, + RunI16x8BinOpTest<uint16_t>(execution_tier, kExprI16x8AddSatU, SaturateAdd<uint16_t>); } WASM_SIMD_TEST(I16x8SubSatU) { - RunI16x8BinOpTest<uint16_t>(execution_tier, lower_simd, kExprI16x8SubSatU, + RunI16x8BinOpTest<uint16_t>(execution_tier, kExprI16x8SubSatU, SaturateSub<uint16_t>); } WASM_SIMD_TEST(I16x8MinU) { - RunI16x8BinOpTest(execution_tier, lower_simd, kExprI16x8MinU, - UnsignedMinimum); + RunI16x8BinOpTest(execution_tier, kExprI16x8MinU, UnsignedMinimum); } WASM_SIMD_TEST(I16x8MaxU) { - RunI16x8BinOpTest(execution_tier, lower_simd, kExprI16x8MaxU, - UnsignedMaximum); + RunI16x8BinOpTest(execution_tier, kExprI16x8MaxU, UnsignedMaximum); } WASM_SIMD_TEST(I16x8Eq) { - RunI16x8BinOpTest(execution_tier, lower_simd, kExprI16x8Eq, Equal); + RunI16x8BinOpTest(execution_tier, kExprI16x8Eq, Equal); } WASM_SIMD_TEST(I16x8Ne) { - RunI16x8BinOpTest(execution_tier, lower_simd, kExprI16x8Ne, NotEqual); + RunI16x8BinOpTest(execution_tier, kExprI16x8Ne, NotEqual); } WASM_SIMD_TEST(I16x8LtS) { - RunI16x8BinOpTest(execution_tier, lower_simd, kExprI16x8LtS, Less); + RunI16x8BinOpTest(execution_tier, kExprI16x8LtS, Less); } WASM_SIMD_TEST(I16x8LeS) { - RunI16x8BinOpTest(execution_tier, lower_simd, kExprI16x8LeS, LessEqual); + RunI16x8BinOpTest(execution_tier, kExprI16x8LeS, LessEqual); } WASM_SIMD_TEST(I16x8GtS) { - RunI16x8BinOpTest(execution_tier, lower_simd, kExprI16x8GtS, Greater); + RunI16x8BinOpTest(execution_tier, kExprI16x8GtS, Greater); } WASM_SIMD_TEST(I16x8GeS) { - RunI16x8BinOpTest(execution_tier, lower_simd, kExprI16x8GeS, GreaterEqual); + RunI16x8BinOpTest(execution_tier, kExprI16x8GeS, GreaterEqual); } WASM_SIMD_TEST(I16x8GtU) { - RunI16x8BinOpTest(execution_tier, lower_simd, kExprI16x8GtU, UnsignedGreater); + RunI16x8BinOpTest(execution_tier, kExprI16x8GtU, UnsignedGreater); } WASM_SIMD_TEST(I16x8GeU) { - RunI16x8BinOpTest(execution_tier, lower_simd, kExprI16x8GeU, - UnsignedGreaterEqual); + RunI16x8BinOpTest(execution_tier, kExprI16x8GeU, UnsignedGreaterEqual); } WASM_SIMD_TEST(I16x8LtU) { - RunI16x8BinOpTest(execution_tier, lower_simd, kExprI16x8LtU, UnsignedLess); + RunI16x8BinOpTest(execution_tier, kExprI16x8LtU, UnsignedLess); } WASM_SIMD_TEST(I16x8LeU) { - RunI16x8BinOpTest(execution_tier, lower_simd, kExprI16x8LeU, - UnsignedLessEqual); + RunI16x8BinOpTest(execution_tier, kExprI16x8LeU, UnsignedLessEqual); } WASM_SIMD_TEST(I16x8RoundingAverageU) { - RunI16x8BinOpTest<uint16_t>(execution_tier, lower_simd, - kExprI16x8RoundingAverageU, + RunI16x8BinOpTest<uint16_t>(execution_tier, kExprI16x8RoundingAverageU, RoundingAverageUnsigned); } WASM_SIMD_TEST(I16x8Q15MulRSatS) { - RunI16x8BinOpTest<int16_t>(execution_tier, lower_simd, kExprI16x8Q15MulRSatS, + RunI16x8BinOpTest<int16_t>(execution_tier, kExprI16x8Q15MulRSatS, SaturateRoundingQMul<int16_t>); } @@ -1559,10 +1526,9 @@ enum class MulHalf { kLow, kHigh }; // It will zero the top or bottom half of one of the operands, this will catch // mistakes if we are multiply the incorrect halves. template <typename S, typename T, typename OpType = T (*)(S, S)> -void RunExtMulTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode opcode, OpType expected_op, WasmOpcode splat, - MulHalf half) { - WasmRunner<int32_t, S, S> r(execution_tier, lower_simd); +void RunExtMulTest(TestExecutionTier execution_tier, WasmOpcode opcode, + OpType expected_op, WasmOpcode splat, MulHalf half) { + WasmRunner<int32_t, S, S> r(execution_tier); int lane_to_zero = half == MulHalf::kLow ? 1 : 0; T* g = r.builder().template AddGlobal<T>(kWasmS128); @@ -1590,79 +1556,75 @@ void RunExtMulTest(TestExecutionTier execution_tier, LowerSimd lower_simd, } // namespace WASM_SIMD_TEST(I16x8ExtMulLowI8x16S) { - RunExtMulTest<int8_t, int16_t>(execution_tier, lower_simd, - kExprI16x8ExtMulLowI8x16S, MultiplyLong, - kExprI8x16Splat, MulHalf::kLow); + RunExtMulTest<int8_t, int16_t>(execution_tier, kExprI16x8ExtMulLowI8x16S, + MultiplyLong, kExprI8x16Splat, MulHalf::kLow); } WASM_SIMD_TEST(I16x8ExtMulHighI8x16S) { - RunExtMulTest<int8_t, int16_t>(execution_tier, lower_simd, - kExprI16x8ExtMulHighI8x16S, MultiplyLong, - kExprI8x16Splat, MulHalf::kHigh); + RunExtMulTest<int8_t, int16_t>(execution_tier, kExprI16x8ExtMulHighI8x16S, + MultiplyLong, kExprI8x16Splat, MulHalf::kHigh); } WASM_SIMD_TEST(I16x8ExtMulLowI8x16U) { - RunExtMulTest<uint8_t, uint16_t>(execution_tier, lower_simd, - kExprI16x8ExtMulLowI8x16U, MultiplyLong, - kExprI8x16Splat, MulHalf::kLow); + RunExtMulTest<uint8_t, uint16_t>(execution_tier, kExprI16x8ExtMulLowI8x16U, + MultiplyLong, kExprI8x16Splat, + MulHalf::kLow); } WASM_SIMD_TEST(I16x8ExtMulHighI8x16U) { - RunExtMulTest<uint8_t, uint16_t>(execution_tier, lower_simd, - kExprI16x8ExtMulHighI8x16U, MultiplyLong, - kExprI8x16Splat, MulHalf::kHigh); + RunExtMulTest<uint8_t, uint16_t>(execution_tier, kExprI16x8ExtMulHighI8x16U, + MultiplyLong, kExprI8x16Splat, + MulHalf::kHigh); } WASM_SIMD_TEST(I32x4ExtMulLowI16x8S) { - RunExtMulTest<int16_t, int32_t>(execution_tier, lower_simd, - kExprI32x4ExtMulLowI16x8S, MultiplyLong, - kExprI16x8Splat, MulHalf::kLow); + RunExtMulTest<int16_t, int32_t>(execution_tier, kExprI32x4ExtMulLowI16x8S, + MultiplyLong, kExprI16x8Splat, MulHalf::kLow); } WASM_SIMD_TEST(I32x4ExtMulHighI16x8S) { - RunExtMulTest<int16_t, int32_t>(execution_tier, lower_simd, - kExprI32x4ExtMulHighI16x8S, MultiplyLong, - kExprI16x8Splat, MulHalf::kHigh); + RunExtMulTest<int16_t, int32_t>(execution_tier, kExprI32x4ExtMulHighI16x8S, + MultiplyLong, kExprI16x8Splat, + MulHalf::kHigh); } WASM_SIMD_TEST(I32x4ExtMulLowI16x8U) { - RunExtMulTest<uint16_t, uint32_t>(execution_tier, lower_simd, - kExprI32x4ExtMulLowI16x8U, MultiplyLong, - kExprI16x8Splat, MulHalf::kLow); + RunExtMulTest<uint16_t, uint32_t>(execution_tier, kExprI32x4ExtMulLowI16x8U, + MultiplyLong, kExprI16x8Splat, + MulHalf::kLow); } WASM_SIMD_TEST(I32x4ExtMulHighI16x8U) { - RunExtMulTest<uint16_t, uint32_t>(execution_tier, lower_simd, - kExprI32x4ExtMulHighI16x8U, MultiplyLong, - kExprI16x8Splat, MulHalf::kHigh); + RunExtMulTest<uint16_t, uint32_t>(execution_tier, kExprI32x4ExtMulHighI16x8U, + MultiplyLong, kExprI16x8Splat, + MulHalf::kHigh); } WASM_SIMD_TEST(I64x2ExtMulLowI32x4S) { - RunExtMulTest<int32_t, int64_t>(execution_tier, lower_simd, - kExprI64x2ExtMulLowI32x4S, MultiplyLong, - kExprI32x4Splat, MulHalf::kLow); + RunExtMulTest<int32_t, int64_t>(execution_tier, kExprI64x2ExtMulLowI32x4S, + MultiplyLong, kExprI32x4Splat, MulHalf::kLow); } WASM_SIMD_TEST(I64x2ExtMulHighI32x4S) { - RunExtMulTest<int32_t, int64_t>(execution_tier, lower_simd, - kExprI64x2ExtMulHighI32x4S, MultiplyLong, - kExprI32x4Splat, MulHalf::kHigh); + RunExtMulTest<int32_t, int64_t>(execution_tier, kExprI64x2ExtMulHighI32x4S, + MultiplyLong, kExprI32x4Splat, + MulHalf::kHigh); } WASM_SIMD_TEST(I64x2ExtMulLowI32x4U) { - RunExtMulTest<uint32_t, uint64_t>(execution_tier, lower_simd, - kExprI64x2ExtMulLowI32x4U, MultiplyLong, - kExprI32x4Splat, MulHalf::kLow); + RunExtMulTest<uint32_t, uint64_t>(execution_tier, kExprI64x2ExtMulLowI32x4U, + MultiplyLong, kExprI32x4Splat, + MulHalf::kLow); } WASM_SIMD_TEST(I64x2ExtMulHighI32x4U) { - RunExtMulTest<uint32_t, uint64_t>(execution_tier, lower_simd, - kExprI64x2ExtMulHighI32x4U, MultiplyLong, - kExprI32x4Splat, MulHalf::kHigh); + RunExtMulTest<uint32_t, uint64_t>(execution_tier, kExprI64x2ExtMulHighI32x4U, + MultiplyLong, kExprI32x4Splat, + MulHalf::kHigh); } WASM_SIMD_TEST(I32x4DotI16x8S) { - WasmRunner<int32_t, int16_t, int16_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, int16_t, int16_t> r(execution_tier); int32_t* g = r.builder().template AddGlobal<int32_t>(kWasmS128); byte value1 = 0, value2 = 1; byte temp1 = r.AllocateLocal(kWasmS128); @@ -1687,31 +1649,27 @@ WASM_SIMD_TEST(I32x4DotI16x8S) { } WASM_SIMD_TEST(I16x8Shl) { - RunI16x8ShiftOpTest(execution_tier, lower_simd, kExprI16x8Shl, - LogicalShiftLeft); + RunI16x8ShiftOpTest(execution_tier, kExprI16x8Shl, LogicalShiftLeft); } WASM_SIMD_TEST(I16x8ShrS) { - RunI16x8ShiftOpTest(execution_tier, lower_simd, kExprI16x8ShrS, - ArithmeticShiftRight); + RunI16x8ShiftOpTest(execution_tier, kExprI16x8ShrS, ArithmeticShiftRight); } WASM_SIMD_TEST(I16x8ShrU) { - RunI16x8ShiftOpTest(execution_tier, lower_simd, kExprI16x8ShrU, - LogicalShiftRight); + RunI16x8ShiftOpTest(execution_tier, kExprI16x8ShrU, LogicalShiftRight); } WASM_SIMD_TEST(I8x16Neg) { - RunI8x16UnOpTest(execution_tier, lower_simd, kExprI8x16Neg, - base::NegateWithWraparound); + RunI8x16UnOpTest(execution_tier, kExprI8x16Neg, base::NegateWithWraparound); } WASM_SIMD_TEST(I8x16Abs) { - RunI8x16UnOpTest(execution_tier, lower_simd, kExprI8x16Abs, Abs); + RunI8x16UnOpTest(execution_tier, kExprI8x16Abs, Abs); } WASM_SIMD_TEST(I8x16Popcnt) { - WasmRunner<int32_t, int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, int32_t> r(execution_tier); // Global to hold output. int8_t* g = r.builder().AddGlobal<int8_t>(kWasmS128); // Build fn to splat test value, perform unop, and write the result. @@ -1733,7 +1691,7 @@ WASM_SIMD_TEST(I8x16Popcnt) { // Tests both signed and unsigned conversion from I16x8 (packing). WASM_SIMD_TEST(I8x16ConvertI16x8) { - WasmRunner<int32_t, int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, int32_t> r(execution_tier); // Create output vectors to hold signed and unsigned results. int8_t* g_s = r.builder().AddGlobal<int8_t>(kWasmS128); uint8_t* g_u = r.builder().AddGlobal<uint8_t>(kWasmS128); @@ -1761,114 +1719,102 @@ WASM_SIMD_TEST(I8x16ConvertI16x8) { } WASM_SIMD_TEST(I8x16Add) { - RunI8x16BinOpTest(execution_tier, lower_simd, kExprI8x16Add, - base::AddWithWraparound); + RunI8x16BinOpTest(execution_tier, kExprI8x16Add, base::AddWithWraparound); } WASM_SIMD_TEST(I8x16AddSatS) { - RunI8x16BinOpTest(execution_tier, lower_simd, kExprI8x16AddSatS, - SaturateAdd<int8_t>); + RunI8x16BinOpTest(execution_tier, kExprI8x16AddSatS, SaturateAdd<int8_t>); } WASM_SIMD_TEST(I8x16Sub) { - RunI8x16BinOpTest(execution_tier, lower_simd, kExprI8x16Sub, - base::SubWithWraparound); + RunI8x16BinOpTest(execution_tier, kExprI8x16Sub, base::SubWithWraparound); } WASM_SIMD_TEST(I8x16SubSatS) { - RunI8x16BinOpTest(execution_tier, lower_simd, kExprI8x16SubSatS, - SaturateSub<int8_t>); + RunI8x16BinOpTest(execution_tier, kExprI8x16SubSatS, SaturateSub<int8_t>); } WASM_SIMD_TEST(I8x16MinS) { - RunI8x16BinOpTest(execution_tier, lower_simd, kExprI8x16MinS, Minimum); + RunI8x16BinOpTest(execution_tier, kExprI8x16MinS, Minimum); } WASM_SIMD_TEST(I8x16MaxS) { - RunI8x16BinOpTest(execution_tier, lower_simd, kExprI8x16MaxS, Maximum); + RunI8x16BinOpTest(execution_tier, kExprI8x16MaxS, Maximum); } WASM_SIMD_TEST(I8x16AddSatU) { - RunI8x16BinOpTest<uint8_t>(execution_tier, lower_simd, kExprI8x16AddSatU, + RunI8x16BinOpTest<uint8_t>(execution_tier, kExprI8x16AddSatU, SaturateAdd<uint8_t>); } WASM_SIMD_TEST(I8x16SubSatU) { - RunI8x16BinOpTest<uint8_t>(execution_tier, lower_simd, kExprI8x16SubSatU, + RunI8x16BinOpTest<uint8_t>(execution_tier, kExprI8x16SubSatU, SaturateSub<uint8_t>); } WASM_SIMD_TEST(I8x16MinU) { - RunI8x16BinOpTest(execution_tier, lower_simd, kExprI8x16MinU, - UnsignedMinimum); + RunI8x16BinOpTest(execution_tier, kExprI8x16MinU, UnsignedMinimum); } WASM_SIMD_TEST(I8x16MaxU) { - RunI8x16BinOpTest(execution_tier, lower_simd, kExprI8x16MaxU, - UnsignedMaximum); + RunI8x16BinOpTest(execution_tier, kExprI8x16MaxU, UnsignedMaximum); } WASM_SIMD_TEST(I8x16Eq) { - RunI8x16BinOpTest(execution_tier, lower_simd, kExprI8x16Eq, Equal); + RunI8x16BinOpTest(execution_tier, kExprI8x16Eq, Equal); } WASM_SIMD_TEST(I8x16Ne) { - RunI8x16BinOpTest(execution_tier, lower_simd, kExprI8x16Ne, NotEqual); + RunI8x16BinOpTest(execution_tier, kExprI8x16Ne, NotEqual); } WASM_SIMD_TEST(I8x16GtS) { - RunI8x16BinOpTest(execution_tier, lower_simd, kExprI8x16GtS, Greater); + RunI8x16BinOpTest(execution_tier, kExprI8x16GtS, Greater); } WASM_SIMD_TEST(I8x16GeS) { - RunI8x16BinOpTest(execution_tier, lower_simd, kExprI8x16GeS, GreaterEqual); + RunI8x16BinOpTest(execution_tier, kExprI8x16GeS, GreaterEqual); } WASM_SIMD_TEST(I8x16LtS) { - RunI8x16BinOpTest(execution_tier, lower_simd, kExprI8x16LtS, Less); + RunI8x16BinOpTest(execution_tier, kExprI8x16LtS, Less); } WASM_SIMD_TEST(I8x16LeS) { - RunI8x16BinOpTest(execution_tier, lower_simd, kExprI8x16LeS, LessEqual); + RunI8x16BinOpTest(execution_tier, kExprI8x16LeS, LessEqual); } WASM_SIMD_TEST(I8x16GtU) { - RunI8x16BinOpTest(execution_tier, lower_simd, kExprI8x16GtU, UnsignedGreater); + RunI8x16BinOpTest(execution_tier, kExprI8x16GtU, UnsignedGreater); } WASM_SIMD_TEST(I8x16GeU) { - RunI8x16BinOpTest(execution_tier, lower_simd, kExprI8x16GeU, - UnsignedGreaterEqual); + RunI8x16BinOpTest(execution_tier, kExprI8x16GeU, UnsignedGreaterEqual); } WASM_SIMD_TEST(I8x16LtU) { - RunI8x16BinOpTest(execution_tier, lower_simd, kExprI8x16LtU, UnsignedLess); + RunI8x16BinOpTest(execution_tier, kExprI8x16LtU, UnsignedLess); } WASM_SIMD_TEST(I8x16LeU) { - RunI8x16BinOpTest(execution_tier, lower_simd, kExprI8x16LeU, - UnsignedLessEqual); + RunI8x16BinOpTest(execution_tier, kExprI8x16LeU, UnsignedLessEqual); } WASM_SIMD_TEST(I8x16RoundingAverageU) { - RunI8x16BinOpTest<uint8_t>(execution_tier, lower_simd, - kExprI8x16RoundingAverageU, + RunI8x16BinOpTest<uint8_t>(execution_tier, kExprI8x16RoundingAverageU, RoundingAverageUnsigned); } WASM_SIMD_TEST(I8x16Shl) { - RunI8x16ShiftOpTest(execution_tier, lower_simd, kExprI8x16Shl, - LogicalShiftLeft); + RunI8x16ShiftOpTest(execution_tier, kExprI8x16Shl, LogicalShiftLeft); } WASM_SIMD_TEST(I8x16ShrS) { - RunI8x16ShiftOpTest(execution_tier, lower_simd, kExprI8x16ShrS, - ArithmeticShiftRight); + RunI8x16ShiftOpTest(execution_tier, kExprI8x16ShrS, ArithmeticShiftRight); } WASM_SIMD_TEST(I8x16ShrU) { - RunI8x16ShiftOpTest(execution_tier, lower_simd, kExprI8x16ShrU, - LogicalShiftRight); + RunI8x16ShiftOpTest(execution_tier, kExprI8x16ShrU, LogicalShiftRight); } // Test Select by making a mask where the 0th and 3rd lanes are true and the @@ -1876,7 +1822,7 @@ WASM_SIMD_TEST(I8x16ShrU) { // vector. #define WASM_SIMD_SELECT_TEST(format) \ WASM_SIMD_TEST(S##format##Select) { \ - WasmRunner<int32_t, int32_t, int32_t> r(execution_tier, lower_simd); \ + WasmRunner<int32_t, int32_t, int32_t> r(execution_tier); \ byte val1 = 0; \ byte val2 = 1; \ byte src1 = r.AllocateLocal(kWasmS128); \ @@ -1915,8 +1861,7 @@ WASM_SIMD_SELECT_TEST(8x16) // rest 0. The mask is not the result of a comparison op. #define WASM_SIMD_NON_CANONICAL_SELECT_TEST(format) \ WASM_SIMD_TEST(S##format##NonCanonicalSelect) { \ - WasmRunner<int32_t, int32_t, int32_t, int32_t> r(execution_tier, \ - lower_simd); \ + WasmRunner<int32_t, int32_t, int32_t, int32_t> r(execution_tier); \ byte val1 = 0; \ byte val2 = 1; \ byte combined = 2; \ @@ -1952,9 +1897,9 @@ WASM_SIMD_NON_CANONICAL_SELECT_TEST(8x16) // Test binary ops with two lane test patterns, all lanes distinct. template <typename T> void RunBinaryLaneOpTest( - TestExecutionTier execution_tier, LowerSimd lower_simd, WasmOpcode simd_op, + TestExecutionTier execution_tier, WasmOpcode simd_op, const std::array<T, kSimd128Size / sizeof(T)>& expected) { - WasmRunner<int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t> r(execution_tier); // Set up two test patterns as globals, e.g. [0, 1, 2, 3] and [4, 5, 6, 7]. T* src0 = r.builder().AddGlobal<T>(kWasmS128); T* src1 = r.builder().AddGlobal<T>(kWasmS128); @@ -1983,28 +1928,25 @@ void RunBinaryLaneOpTest( } // Test shuffle ops. -void RunShuffleOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode simd_op, +void RunShuffleOpTest(TestExecutionTier execution_tier, WasmOpcode simd_op, const std::array<int8_t, kSimd128Size>& shuffle) { // Test the original shuffle. - RunBinaryLaneOpTest<int8_t>(execution_tier, lower_simd, simd_op, shuffle); + RunBinaryLaneOpTest<int8_t>(execution_tier, simd_op, shuffle); // Test a non-canonical (inputs reversed) version of the shuffle. std::array<int8_t, kSimd128Size> other_shuffle(shuffle); for (size_t i = 0; i < shuffle.size(); ++i) other_shuffle[i] ^= kSimd128Size; - RunBinaryLaneOpTest<int8_t>(execution_tier, lower_simd, simd_op, - other_shuffle); + RunBinaryLaneOpTest<int8_t>(execution_tier, simd_op, other_shuffle); // Test the swizzle (one-operand) version of the shuffle. std::array<int8_t, kSimd128Size> swizzle(shuffle); for (size_t i = 0; i < shuffle.size(); ++i) swizzle[i] &= (kSimd128Size - 1); - RunBinaryLaneOpTest<int8_t>(execution_tier, lower_simd, simd_op, swizzle); + RunBinaryLaneOpTest<int8_t>(execution_tier, simd_op, swizzle); // Test the non-canonical swizzle (one-operand) version of the shuffle. std::array<int8_t, kSimd128Size> other_swizzle(shuffle); for (size_t i = 0; i < shuffle.size(); ++i) other_swizzle[i] |= kSimd128Size; - RunBinaryLaneOpTest<int8_t>(execution_tier, lower_simd, simd_op, - other_swizzle); + RunBinaryLaneOpTest<int8_t>(execution_tier, simd_op, other_swizzle); } #define SHUFFLE_LIST(V) \ @@ -2113,12 +2055,11 @@ ShuffleMap test_shuffles = { {{0, 16, 0, 16, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23}}}, }; -#define SHUFFLE_TEST(Name) \ - WASM_SIMD_TEST(Name) { \ - ShuffleMap::const_iterator it = test_shuffles.find(k##Name); \ - DCHECK_NE(it, test_shuffles.end()); \ - RunShuffleOpTest(execution_tier, lower_simd, kExprI8x16Shuffle, \ - it->second); \ +#define SHUFFLE_TEST(Name) \ + WASM_SIMD_TEST(Name) { \ + ShuffleMap::const_iterator it = test_shuffles.find(k##Name); \ + DCHECK_NE(it, test_shuffles.end()); \ + RunShuffleOpTest(execution_tier, kExprI8x16Shuffle, it->second); \ } SHUFFLE_LIST(SHUFFLE_TEST) #undef SHUFFLE_TEST @@ -2130,7 +2071,7 @@ WASM_SIMD_TEST(S8x16Blend) { for (int bias = 1; bias < kSimd128Size; bias++) { for (int i = 0; i < bias; i++) expected[i] = i; for (int i = bias; i < kSimd128Size; i++) expected[i] = i + kSimd128Size; - RunShuffleOpTest(execution_tier, lower_simd, kExprI8x16Shuffle, expected); + RunShuffleOpTest(execution_tier, kExprI8x16Shuffle, expected); } } @@ -2148,7 +2089,7 @@ WASM_SIMD_TEST(S8x16Concat) { for (int j = 0; j < n; ++j) { expected[i++] = j + kSimd128Size; } - RunShuffleOpTest(execution_tier, lower_simd, kExprI8x16Shuffle, expected); + RunShuffleOpTest(execution_tier, kExprI8x16Shuffle, expected); } } @@ -2170,7 +2111,7 @@ WASM_SIMD_TEST(ShuffleShufps) { expected[8 + i] = index2 + i; expected[12 + i] = index3 + i; } - RunShuffleOpTest(execution_tier, lower_simd, kExprI8x16Shuffle, expected); + RunShuffleOpTest(execution_tier, kExprI8x16Shuffle, expected); } } @@ -2203,7 +2144,7 @@ WASM_SIMD_TEST(I8x16Swizzle) { // [0-15] and [16-31]. Using [0-15] as the indices will not sufficiently test // swizzle since the expected result is a no-op, using [16-31] will result in // all 0s. - WasmRunner<int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t> r(execution_tier); static const int kElems = kSimd128Size / sizeof(uint8_t); uint8_t* dst = r.builder().AddGlobal<uint8_t>(kWasmS128); uint8_t* src0 = r.builder().AddGlobal<uint8_t>(kWasmS128); @@ -2230,7 +2171,7 @@ WASM_SIMD_TEST(I8x16Swizzle) { { // We have an optimization for constant indices, test this case. for (SwizzleTestArgs si : swizzle_test_vector) { - WasmRunner<int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t> r(execution_tier); uint8_t* dst = r.builder().AddGlobal<uint8_t>(kWasmS128); uint8_t* src0 = r.builder().AddGlobal<uint8_t>(kWasmS128); BUILD(r, @@ -2275,7 +2216,7 @@ WASM_SIMD_TEST(I8x16ShuffleFuzz) { for (int i = 0; i < kTests; ++i) { auto shuffle = Combine(GetRandomTestShuffle(rng), GetRandomTestShuffle(rng), GetRandomTestShuffle(rng)); - RunShuffleOpTest(execution_tier, lower_simd, kExprI8x16Shuffle, shuffle); + RunShuffleOpTest(execution_tier, kExprI8x16Shuffle, shuffle); } } @@ -2306,10 +2247,10 @@ void BuildShuffle(const std::vector<Shuffle>& shuffles, for (size_t j = 0; j < arraysize(epilog); ++j) buffer->push_back(epilog[j]); } -void RunWasmCode(TestExecutionTier execution_tier, LowerSimd lower_simd, +void RunWasmCode(TestExecutionTier execution_tier, const std::vector<byte>& code, std::array<int8_t, kSimd128Size>* result) { - WasmRunner<int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t> r(execution_tier); // Set up two test patterns as globals, e.g. [0, 1, 2, 3] and [4, 5, 6, 7]. int8_t* src0 = r.builder().AddGlobal<int8_t>(kWasmS128); int8_t* src1 = r.builder().AddGlobal<int8_t>(kWasmS128); @@ -2348,11 +2289,10 @@ WASM_SIMD_TEST(S8x16MultiShuffleFuzz) { // Run the code using the interpreter to get the expected result. std::array<int8_t, kSimd128Size> expected; - RunWasmCode(TestExecutionTier::kInterpreter, kNoLowerSimd, buffer, - &expected); + RunWasmCode(TestExecutionTier::kInterpreter, buffer, &expected); // Run the SIMD or scalar lowered compiled code and compare results. std::array<int8_t, kSimd128Size> result; - RunWasmCode(execution_tier, lower_simd, buffer, &result); + RunWasmCode(execution_tier, buffer, &result); for (size_t i = 0; i < kSimd128Size; ++i) { CHECK_EQ(result[i], expected[i]); } @@ -2364,8 +2304,8 @@ WASM_SIMD_TEST(S8x16MultiShuffleFuzz) { // test inputs. Test inputs with all true, all false, one true, and one false. #define WASM_SIMD_BOOL_REDUCTION_TEST(format, lanes, int_type) \ WASM_SIMD_TEST(ReductionTest##lanes) { \ - WasmRunner<int32_t> r(execution_tier, lower_simd); \ - if (lanes == 2 && lower_simd == kLowerSimd) return; \ + WasmRunner<int32_t> r(execution_tier); \ + if (lanes == 2) return; \ byte zero = r.AllocateLocal(kWasmS128); \ byte one_one = r.AllocateLocal(kWasmS128); \ byte reduced = r.AllocateLocal(kWasmI32); \ @@ -2439,7 +2379,7 @@ WASM_SIMD_BOOL_REDUCTION_TEST(16x8, 8, WASM_I32V) WASM_SIMD_BOOL_REDUCTION_TEST(8x16, 16, WASM_I32V) WASM_SIMD_TEST(SimdI32x4ExtractWithF32x4) { - WasmRunner<int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t> r(execution_tier); BUILD(r, WASM_IF_ELSE_I( WASM_I32_EQ(WASM_SIMD_I32x4_EXTRACT_LANE( 0, WASM_SIMD_F32x4_SPLAT(WASM_F32(30.5))), @@ -2449,7 +2389,7 @@ WASM_SIMD_TEST(SimdI32x4ExtractWithF32x4) { } WASM_SIMD_TEST(SimdF32x4ExtractWithI32x4) { - WasmRunner<int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t> r(execution_tier); BUILD(r, WASM_IF_ELSE_I(WASM_F32_EQ(WASM_SIMD_F32x4_EXTRACT_LANE( 0, WASM_SIMD_I32x4_SPLAT(WASM_I32V(15))), @@ -2459,7 +2399,7 @@ WASM_SIMD_TEST(SimdF32x4ExtractWithI32x4) { } WASM_SIMD_TEST(SimdF32x4ExtractLane) { - WasmRunner<float> r(execution_tier, lower_simd); + WasmRunner<float> r(execution_tier); r.AllocateLocal(kWasmF32); r.AllocateLocal(kWasmS128); BUILD(r, @@ -2475,7 +2415,7 @@ WASM_SIMD_TEST(SimdF32x4AddWithI32x4) { // representable as a float. const int kOne = 0x3F800000; const int kTwo = 0x40000000; - WasmRunner<int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t> r(execution_tier); BUILD(r, WASM_IF_ELSE_I( WASM_F32_EQ( @@ -2490,7 +2430,7 @@ WASM_SIMD_TEST(SimdF32x4AddWithI32x4) { } WASM_SIMD_TEST(SimdI32x4AddWithF32x4) { - WasmRunner<int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t> r(execution_tier); BUILD(r, WASM_IF_ELSE_I( WASM_I32_EQ( @@ -2505,7 +2445,7 @@ WASM_SIMD_TEST(SimdI32x4AddWithF32x4) { } WASM_SIMD_TEST(SimdI32x4Local) { - WasmRunner<int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t> r(execution_tier); r.AllocateLocal(kWasmS128); BUILD(r, WASM_LOCAL_SET(0, WASM_SIMD_I32x4_SPLAT(WASM_I32V(31))), @@ -2514,7 +2454,7 @@ WASM_SIMD_TEST(SimdI32x4Local) { } WASM_SIMD_TEST(SimdI32x4SplatFromExtract) { - WasmRunner<int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t> r(execution_tier); r.AllocateLocal(kWasmI32); r.AllocateLocal(kWasmS128); BUILD(r, @@ -2526,7 +2466,7 @@ WASM_SIMD_TEST(SimdI32x4SplatFromExtract) { } WASM_SIMD_TEST(SimdI32x4For) { - WasmRunner<int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t> r(execution_tier); r.AllocateLocal(kWasmI32); r.AllocateLocal(kWasmS128); BUILD(r, @@ -2560,7 +2500,7 @@ WASM_SIMD_TEST(SimdI32x4For) { } WASM_SIMD_TEST(SimdF32x4For) { - WasmRunner<int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t> r(execution_tier); r.AllocateLocal(kWasmI32); r.AllocateLocal(kWasmS128); BUILD(r, WASM_LOCAL_SET(1, WASM_SIMD_F32x4_SPLAT(WASM_F32(21.25))), @@ -2600,7 +2540,7 @@ const T GetScalar(T* v, int lane) { } WASM_SIMD_TEST(SimdI32x4GetGlobal) { - WasmRunner<int32_t, int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, int32_t> r(execution_tier); // Pad the globals with a few unused slots to get a non-zero offset. r.builder().AddGlobal<int32_t>(kWasmI32); // purposefully unused r.builder().AddGlobal<int32_t>(kWasmI32); // purposefully unused @@ -2628,7 +2568,7 @@ WASM_SIMD_TEST(SimdI32x4GetGlobal) { } WASM_SIMD_TEST(SimdI32x4SetGlobal) { - WasmRunner<int32_t, int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, int32_t> r(execution_tier); // Pad the globals with a few unused slots to get a non-zero offset. r.builder().AddGlobal<int32_t>(kWasmI32); // purposefully unused r.builder().AddGlobal<int32_t>(kWasmI32); // purposefully unused @@ -2651,7 +2591,7 @@ WASM_SIMD_TEST(SimdI32x4SetGlobal) { } WASM_SIMD_TEST(SimdF32x4GetGlobal) { - WasmRunner<int32_t, int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, int32_t> r(execution_tier); float* global = r.builder().AddGlobal<float>(kWasmS128); SetVectorByLanes<float>(global, {{0.0, 1.5, 2.25, 3.5}}); r.AllocateLocal(kWasmI32); @@ -2674,7 +2614,7 @@ WASM_SIMD_TEST(SimdF32x4GetGlobal) { } WASM_SIMD_TEST(SimdF32x4SetGlobal) { - WasmRunner<int32_t, int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, int32_t> r(execution_tier); float* global = r.builder().AddGlobal<float>(kWasmS128); BUILD(r, WASM_GLOBAL_SET(0, WASM_SIMD_F32x4_SPLAT(WASM_F32(13.5))), WASM_GLOBAL_SET(0, WASM_SIMD_F32x4_REPLACE_LANE(1, WASM_GLOBAL_GET(0), @@ -2692,7 +2632,7 @@ WASM_SIMD_TEST(SimdF32x4SetGlobal) { } WASM_SIMD_TEST(SimdLoadStoreLoad) { - WasmRunner<int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t> r(execution_tier); int32_t* memory = r.builder().AddMemoryElems<int32_t>(kWasmPageSize / sizeof(int32_t)); // Load memory, store it, then reload it and extract the first lane. Use a @@ -2708,7 +2648,7 @@ WASM_SIMD_TEST(SimdLoadStoreLoad) { { // OOB tests for loads. - WasmRunner<int32_t, uint32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, uint32_t> r(execution_tier); r.builder().AddMemoryElems<int32_t>(kWasmPageSize / sizeof(int32_t)); BUILD(r, WASM_SIMD_I32x4_EXTRACT_LANE( 0, WASM_SIMD_LOAD_MEM(WASM_LOCAL_GET(0)))); @@ -2721,7 +2661,7 @@ WASM_SIMD_TEST(SimdLoadStoreLoad) { { // OOB tests for stores. - WasmRunner<int32_t, uint32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, uint32_t> r(execution_tier); r.builder().AddMemoryElems<int32_t>(kWasmPageSize / sizeof(int32_t)); BUILD(r, WASM_SIMD_STORE_MEM(WASM_LOCAL_GET(0), WASM_SIMD_LOAD_MEM(WASM_ZERO)), @@ -2735,7 +2675,7 @@ WASM_SIMD_TEST(SimdLoadStoreLoad) { } WASM_SIMD_TEST(SimdLoadStoreLoadMemargOffset) { - WasmRunner<int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t> r(execution_tier); int32_t* memory = r.builder().AddMemoryElems<int32_t>(kWasmPageSize / sizeof(int32_t)); constexpr byte offset_1 = 4; @@ -2760,7 +2700,7 @@ WASM_SIMD_TEST(SimdLoadStoreLoadMemargOffset) { // OOB tests for loads with offsets. for (uint32_t offset = kWasmPageSize - (kSimd128Size - 1); offset < kWasmPageSize; ++offset) { - WasmRunner<int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t> r(execution_tier); r.builder().AddMemoryElems<int32_t>(kWasmPageSize / sizeof(int32_t)); BUILD(r, WASM_SIMD_I32x4_EXTRACT_LANE( 0, WASM_SIMD_LOAD_MEM_OFFSET(U32V_3(offset), WASM_ZERO))); @@ -2772,7 +2712,7 @@ WASM_SIMD_TEST(SimdLoadStoreLoadMemargOffset) { // OOB tests for stores with offsets for (uint32_t offset = kWasmPageSize - (kSimd128Size - 1); offset < kWasmPageSize; ++offset) { - WasmRunner<int32_t, uint32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, uint32_t> r(execution_tier); r.builder().AddMemoryElems<int32_t>(kWasmPageSize / sizeof(int32_t)); BUILD(r, WASM_SIMD_STORE_MEM_OFFSET(U32V_3(offset), WASM_ZERO, @@ -2788,7 +2728,7 @@ WASM_SIMD_TEST(SimdLoadStoreLoadMemargOffset) { WASM_SIMD_TEST(S128Load8SplatOffset) { // This offset is [82, 22] when encoded, which contains valid opcodes. constexpr int offset = 4354; - WasmRunner<int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t> r(execution_tier); int8_t* memory = r.builder().AddMemoryElems<int8_t>(kWasmPageSize); int8_t* global = r.builder().AddGlobal<int8_t>(kWasmS128); BUILD(r, @@ -2807,11 +2747,10 @@ WASM_SIMD_TEST(S128Load8SplatOffset) { } template <typename T> -void RunLoadSplatTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode op) { +void RunLoadSplatTest(TestExecutionTier execution_tier, WasmOpcode op) { constexpr int lanes = 16 / sizeof(T); constexpr int mem_index = 16; // Load from mem index 16 (bytes). - WasmRunner<int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t> r(execution_tier); T* memory = r.builder().AddMemoryElems<T>(kWasmPageSize / sizeof(T)); T* global = r.builder().AddGlobal<T>(kWasmS128); BUILD(r, WASM_GLOBAL_SET(0, WASM_SIMD_LOAD_OP(op, WASM_I32V(mem_index))), @@ -2828,7 +2767,7 @@ void RunLoadSplatTest(TestExecutionTier execution_tier, LowerSimd lower_simd, // Test for OOB. { - WasmRunner<int32_t, uint32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, uint32_t> r(execution_tier); r.builder().AddMemoryElems<T>(kWasmPageSize / sizeof(T)); r.builder().AddGlobal<T>(kWasmS128); @@ -2844,24 +2783,23 @@ void RunLoadSplatTest(TestExecutionTier execution_tier, LowerSimd lower_simd, } WASM_SIMD_TEST(S128Load8Splat) { - RunLoadSplatTest<int8_t>(execution_tier, lower_simd, kExprS128Load8Splat); + RunLoadSplatTest<int8_t>(execution_tier, kExprS128Load8Splat); } WASM_SIMD_TEST(S128Load16Splat) { - RunLoadSplatTest<int16_t>(execution_tier, lower_simd, kExprS128Load16Splat); + RunLoadSplatTest<int16_t>(execution_tier, kExprS128Load16Splat); } WASM_SIMD_TEST(S128Load32Splat) { - RunLoadSplatTest<int32_t>(execution_tier, lower_simd, kExprS128Load32Splat); + RunLoadSplatTest<int32_t>(execution_tier, kExprS128Load32Splat); } WASM_SIMD_TEST(S128Load64Splat) { - RunLoadSplatTest<int64_t>(execution_tier, lower_simd, kExprS128Load64Splat); + RunLoadSplatTest<int64_t>(execution_tier, kExprS128Load64Splat); } template <typename S, typename T> -void RunLoadExtendTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode op) { +void RunLoadExtendTest(TestExecutionTier execution_tier, WasmOpcode op) { static_assert(sizeof(S) < sizeof(T), "load extend should go from smaller to larger type"); constexpr int lanes_s = 16 / sizeof(S); @@ -2869,7 +2807,7 @@ void RunLoadExtendTest(TestExecutionTier execution_tier, LowerSimd lower_simd, constexpr int mem_index = 16; // Load from mem index 16 (bytes). // Load extends always load 64 bits, so alignment values can be from 0 to 3. for (byte alignment = 0; alignment <= 3; alignment++) { - WasmRunner<int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t> r(execution_tier); S* memory = r.builder().AddMemoryElems<S>(kWasmPageSize / sizeof(S)); T* global = r.builder().AddGlobal<T>(kWasmS128); BUILD(r, @@ -2891,7 +2829,7 @@ void RunLoadExtendTest(TestExecutionTier execution_tier, LowerSimd lower_simd, // Test for offset. { - WasmRunner<int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t> r(execution_tier); S* memory = r.builder().AddMemoryElems<S>(kWasmPageSize / sizeof(S)); T* global = r.builder().AddGlobal<T>(kWasmS128); constexpr byte offset = sizeof(S); @@ -2919,7 +2857,7 @@ void RunLoadExtendTest(TestExecutionTier execution_tier, LowerSimd lower_simd, // Test for OOB. { - WasmRunner<int32_t, uint32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, uint32_t> r(execution_tier); r.builder().AddMemoryElems<S>(kWasmPageSize / sizeof(S)); r.builder().AddGlobal<T>(kWasmS128); @@ -2935,37 +2873,30 @@ void RunLoadExtendTest(TestExecutionTier execution_tier, LowerSimd lower_simd, } WASM_SIMD_TEST(S128Load8x8U) { - RunLoadExtendTest<uint8_t, uint16_t>(execution_tier, lower_simd, - kExprS128Load8x8U); + RunLoadExtendTest<uint8_t, uint16_t>(execution_tier, kExprS128Load8x8U); } WASM_SIMD_TEST(S128Load8x8S) { - RunLoadExtendTest<int8_t, int16_t>(execution_tier, lower_simd, - kExprS128Load8x8S); + RunLoadExtendTest<int8_t, int16_t>(execution_tier, kExprS128Load8x8S); } WASM_SIMD_TEST(S128Load16x4U) { - RunLoadExtendTest<uint16_t, uint32_t>(execution_tier, lower_simd, - kExprS128Load16x4U); + RunLoadExtendTest<uint16_t, uint32_t>(execution_tier, kExprS128Load16x4U); } WASM_SIMD_TEST(S128Load16x4S) { - RunLoadExtendTest<int16_t, int32_t>(execution_tier, lower_simd, - kExprS128Load16x4S); + RunLoadExtendTest<int16_t, int32_t>(execution_tier, kExprS128Load16x4S); } WASM_SIMD_TEST(S128Load32x2U) { - RunLoadExtendTest<uint32_t, uint64_t>(execution_tier, lower_simd, - kExprS128Load32x2U); + RunLoadExtendTest<uint32_t, uint64_t>(execution_tier, kExprS128Load32x2U); } WASM_SIMD_TEST(S128Load32x2S) { - RunLoadExtendTest<int32_t, int64_t>(execution_tier, lower_simd, - kExprS128Load32x2S); + RunLoadExtendTest<int32_t, int64_t>(execution_tier, kExprS128Load32x2S); } template <typename S> -void RunLoadZeroTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode op) { +void RunLoadZeroTest(TestExecutionTier execution_tier, WasmOpcode op) { constexpr int lanes_s = kSimd128Size / sizeof(S); constexpr int mem_index = 16; // Load from mem index 16 (bytes). constexpr S sentinel = S{-1}; @@ -2983,7 +2914,7 @@ void RunLoadZeroTest(TestExecutionTier execution_tier, LowerSimd lower_simd, // Check all supported alignments. constexpr int max_alignment = base::bits::CountTrailingZeros(sizeof(S)); for (byte alignment = 0; alignment <= max_alignment; alignment++) { - WasmRunner<int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t> r(execution_tier); std::tie(memory, global) = initialize_builder(&r); BUILD(r, WASM_GLOBAL_SET(0, WASM_SIMD_LOAD_OP(op, WASM_I32V(mem_index))), @@ -3000,7 +2931,7 @@ void RunLoadZeroTest(TestExecutionTier execution_tier, LowerSimd lower_simd, { // Use memarg to specific offset. - WasmRunner<int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t> r(execution_tier); std::tie(memory, global) = initialize_builder(&r); BUILD( @@ -3019,7 +2950,7 @@ void RunLoadZeroTest(TestExecutionTier execution_tier, LowerSimd lower_simd, // Test for OOB. { - WasmRunner<int32_t, uint32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, uint32_t> r(execution_tier); r.builder().AddMemoryElems<S>(kWasmPageSize / sizeof(S)); r.builder().AddGlobal<S>(kWasmS128); @@ -3035,16 +2966,16 @@ void RunLoadZeroTest(TestExecutionTier execution_tier, LowerSimd lower_simd, } WASM_SIMD_TEST(S128Load32Zero) { - RunLoadZeroTest<int32_t>(execution_tier, lower_simd, kExprS128Load32Zero); + RunLoadZeroTest<int32_t>(execution_tier, kExprS128Load32Zero); } WASM_SIMD_TEST(S128Load64Zero) { - RunLoadZeroTest<int64_t>(execution_tier, lower_simd, kExprS128Load64Zero); + RunLoadZeroTest<int64_t>(execution_tier, kExprS128Load64Zero); } template <typename T> -void RunLoadLaneTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode load_op, WasmOpcode splat_op) { +void RunLoadLaneTest(TestExecutionTier execution_tier, WasmOpcode load_op, + WasmOpcode splat_op) { WasmOpcode const_op = splat_op == kExprI64x2Splat ? kExprI64Const : kExprI32Const; @@ -3077,7 +3008,7 @@ void RunLoadLaneTest(TestExecutionTier execution_tier, LowerSimd lower_simd, }; for (int lane_index = 0; lane_index < lanes_s; ++lane_index) { - WasmRunner<int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t> r(execution_tier); build_fn(r, mem_index, lane_index, /*alignment=*/0, /*offset=*/0); r.Call(); check_results(global, lane_index); @@ -3086,7 +3017,7 @@ void RunLoadLaneTest(TestExecutionTier execution_tier, LowerSimd lower_simd, // Check all possible alignments. constexpr int max_alignment = base::bits::CountTrailingZeros(sizeof(T)); for (byte alignment = 0; alignment <= max_alignment; ++alignment) { - WasmRunner<int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t> r(execution_tier); build_fn(r, mem_index, /*lane=*/0, alignment, /*offset=*/0); r.Call(); check_results(global); @@ -3095,7 +3026,7 @@ void RunLoadLaneTest(TestExecutionTier execution_tier, LowerSimd lower_simd, { // Use memarg to specify offset. int lane_index = 0; - WasmRunner<int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t> r(execution_tier); build_fn(r, /*mem_index=*/0, /*lane=*/0, /*alignment=*/0, /*offset=*/mem_index); r.Call(); @@ -3104,7 +3035,7 @@ void RunLoadLaneTest(TestExecutionTier execution_tier, LowerSimd lower_simd, // Test for OOB. { - WasmRunner<int32_t, uint32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, uint32_t> r(execution_tier); r.builder().AddMemoryElems<T>(kWasmPageSize / sizeof(T)); r.builder().AddGlobal<T>(kWasmS128); @@ -3121,28 +3052,27 @@ void RunLoadLaneTest(TestExecutionTier execution_tier, LowerSimd lower_simd, } WASM_SIMD_TEST(S128Load8Lane) { - RunLoadLaneTest<int8_t>(execution_tier, lower_simd, kExprS128Load8Lane, - kExprI8x16Splat); + RunLoadLaneTest<int8_t>(execution_tier, kExprS128Load8Lane, kExprI8x16Splat); } WASM_SIMD_TEST(S128Load16Lane) { - RunLoadLaneTest<int16_t>(execution_tier, lower_simd, kExprS128Load16Lane, + RunLoadLaneTest<int16_t>(execution_tier, kExprS128Load16Lane, kExprI16x8Splat); } WASM_SIMD_TEST(S128Load32Lane) { - RunLoadLaneTest<int32_t>(execution_tier, lower_simd, kExprS128Load32Lane, + RunLoadLaneTest<int32_t>(execution_tier, kExprS128Load32Lane, kExprI32x4Splat); } WASM_SIMD_TEST(S128Load64Lane) { - RunLoadLaneTest<int64_t>(execution_tier, lower_simd, kExprS128Load64Lane, + RunLoadLaneTest<int64_t>(execution_tier, kExprS128Load64Lane, kExprI64x2Splat); } template <typename T> -void RunStoreLaneTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode store_op, WasmOpcode splat_op) { +void RunStoreLaneTest(TestExecutionTier execution_tier, WasmOpcode store_op, + WasmOpcode splat_op) { constexpr int lanes = kSimd128Size / sizeof(T); constexpr int mem_index = 16; // Store to mem index 16 (bytes). constexpr int splat_value = 33; @@ -3174,7 +3104,7 @@ void RunStoreLaneTest(TestExecutionTier execution_tier, LowerSimd lower_simd, }; for (int lane_index = 0; lane_index < lanes; lane_index++) { - WasmRunner<int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t> r(execution_tier); build_fn(r, mem_index, lane_index, ZERO_ALIGNMENT, ZERO_OFFSET); r.Call(); check_results(r, memory); @@ -3183,7 +3113,7 @@ void RunStoreLaneTest(TestExecutionTier execution_tier, LowerSimd lower_simd, // Check all possible alignments. constexpr int max_alignment = base::bits::CountTrailingZeros(sizeof(T)); for (byte alignment = 0; alignment <= max_alignment; ++alignment) { - WasmRunner<int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t> r(execution_tier); build_fn(r, mem_index, /*lane_index=*/0, alignment, ZERO_OFFSET); r.Call(); check_results(r, memory); @@ -3191,7 +3121,7 @@ void RunStoreLaneTest(TestExecutionTier execution_tier, LowerSimd lower_simd, { // Use memarg for offset. - WasmRunner<int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t> r(execution_tier); build_fn(r, /*mem_index=*/0, /*lane_index=*/0, ZERO_ALIGNMENT, mem_index); r.Call(); check_results(r, memory); @@ -3199,7 +3129,7 @@ void RunStoreLaneTest(TestExecutionTier execution_tier, LowerSimd lower_simd, // OOB stores { - WasmRunner<int32_t, uint32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, uint32_t> r(execution_tier); r.builder().AddMemoryElems<T>(kWasmPageSize / sizeof(T)); BUILD(r, WASM_LOCAL_GET(0), const_op, splat_value, WASM_SIMD_OP(splat_op), @@ -3214,29 +3144,29 @@ void RunStoreLaneTest(TestExecutionTier execution_tier, LowerSimd lower_simd, } WASM_SIMD_TEST(S128Store8Lane) { - RunStoreLaneTest<int8_t>(execution_tier, lower_simd, kExprS128Store8Lane, + RunStoreLaneTest<int8_t>(execution_tier, kExprS128Store8Lane, kExprI8x16Splat); } WASM_SIMD_TEST(S128Store16Lane) { - RunStoreLaneTest<int16_t>(execution_tier, lower_simd, kExprS128Store16Lane, + RunStoreLaneTest<int16_t>(execution_tier, kExprS128Store16Lane, kExprI16x8Splat); } WASM_SIMD_TEST(S128Store32Lane) { - RunStoreLaneTest<int32_t>(execution_tier, lower_simd, kExprS128Store32Lane, + RunStoreLaneTest<int32_t>(execution_tier, kExprS128Store32Lane, kExprI32x4Splat); } WASM_SIMD_TEST(S128Store64Lane) { - RunStoreLaneTest<int64_t>(execution_tier, lower_simd, kExprS128Store64Lane, + RunStoreLaneTest<int64_t>(execution_tier, kExprS128Store64Lane, kExprI64x2Splat); } #define WASM_SIMD_ANYTRUE_TEST(format, lanes, max, param_type) \ WASM_SIMD_TEST(S##format##AnyTrue) { \ - WasmRunner<int32_t, param_type> r(execution_tier, lower_simd); \ - if (lanes == 2 && lower_simd == kLowerSimd) return; \ + WasmRunner<int32_t, param_type> r(execution_tier); \ + if (lanes == 2) return; \ byte simd = r.AllocateLocal(kWasmS128); \ BUILD( \ r, \ @@ -3254,7 +3184,7 @@ WASM_SIMD_ANYTRUE_TEST(8x16, 16, 0xff, int32_t) // This is specifically to ensure that our implementation correct handles that // 0.0 and -0.0 will be different in an anytrue (IEEE753 says they are equals). WASM_SIMD_TEST(V128AnytrueWithNegativeZero) { - WasmRunner<int32_t, int64_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, int64_t> r(execution_tier); byte simd = r.AllocateLocal(kWasmS128); BUILD(r, WASM_LOCAL_SET(simd, WASM_SIMD_I64x2_SPLAT(WASM_LOCAL_GET(0))), WASM_SIMD_UNOP(kExprV128AnyTrue, WASM_LOCAL_GET(simd))); @@ -3264,8 +3194,8 @@ WASM_SIMD_TEST(V128AnytrueWithNegativeZero) { #define WASM_SIMD_ALLTRUE_TEST(format, lanes, max, param_type) \ WASM_SIMD_TEST(I##format##AllTrue) { \ - WasmRunner<int32_t, param_type> r(execution_tier, lower_simd); \ - if (lanes == 2 && lower_simd == kLowerSimd) return; \ + WasmRunner<int32_t, param_type> r(execution_tier); \ + if (lanes == 2) return; \ byte simd = r.AllocateLocal(kWasmS128); \ BUILD( \ r, \ @@ -3281,7 +3211,7 @@ WASM_SIMD_ALLTRUE_TEST(16x8, 8, 0xffff, int32_t) WASM_SIMD_ALLTRUE_TEST(8x16, 16, 0xff, int32_t) WASM_SIMD_TEST(BitSelect) { - WasmRunner<int32_t, int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, int32_t> r(execution_tier); byte simd = r.AllocateLocal(kWasmS128); BUILD(r, WASM_LOCAL_SET( @@ -3293,9 +3223,9 @@ WASM_SIMD_TEST(BitSelect) { CHECK_EQ(0x01020304, r.Call(0xFFFFFFFF)); } -void RunSimdConstTest(TestExecutionTier execution_tier, LowerSimd lower_simd, +void RunSimdConstTest(TestExecutionTier execution_tier, const std::array<uint8_t, kSimd128Size>& expected) { - WasmRunner<uint32_t> r(execution_tier, lower_simd); + WasmRunner<uint32_t> r(execution_tier); byte temp1 = r.AllocateLocal(kWasmS128); uint8_t* src0 = r.builder().AddGlobal<uint8_t>(kWasmS128); BUILD(r, WASM_GLOBAL_SET(temp1, WASM_SIMD_CONSTANT(expected)), WASM_ONE); @@ -3311,7 +3241,7 @@ WASM_SIMD_TEST(S128Const) { for (int i = 0; i < kSimd128Size; i++) { expected[i] = i; } - RunSimdConstTest(execution_tier, lower_simd, expected); + RunSimdConstTest(execution_tier, expected); // Keep the first 4 lanes as 0, set the remaining ones. for (int i = 0; i < 4; i++) { @@ -3320,18 +3250,18 @@ WASM_SIMD_TEST(S128Const) { for (int i = 4; i < kSimd128Size; i++) { expected[i] = i; } - RunSimdConstTest(execution_tier, lower_simd, expected); + RunSimdConstTest(execution_tier, expected); // Check sign extension logic used to pack int32s into int64. expected = {0}; // Set the top bit of lane 3 (top bit of first int32), the rest can be 0. expected[3] = 0x80; - RunSimdConstTest(execution_tier, lower_simd, expected); + RunSimdConstTest(execution_tier, expected); } WASM_SIMD_TEST(S128ConstAllZero) { std::array<uint8_t, kSimd128Size> expected = {0}; - RunSimdConstTest(execution_tier, lower_simd, expected); + RunSimdConstTest(execution_tier, expected); } WASM_SIMD_TEST(S128ConstAllOnes) { @@ -3340,46 +3270,42 @@ WASM_SIMD_TEST(S128ConstAllOnes) { for (int i = 0; i < kSimd128Size; i++) { expected[i] = 0xff; } - RunSimdConstTest(execution_tier, lower_simd, expected); + RunSimdConstTest(execution_tier, expected); } WASM_SIMD_TEST(I8x16LeUMixed) { - RunI8x16MixedRelationalOpTest(execution_tier, lower_simd, kExprI8x16LeU, + RunI8x16MixedRelationalOpTest(execution_tier, kExprI8x16LeU, UnsignedLessEqual); } WASM_SIMD_TEST(I8x16LtUMixed) { - RunI8x16MixedRelationalOpTest(execution_tier, lower_simd, kExprI8x16LtU, - UnsignedLess); + RunI8x16MixedRelationalOpTest(execution_tier, kExprI8x16LtU, UnsignedLess); } WASM_SIMD_TEST(I8x16GeUMixed) { - RunI8x16MixedRelationalOpTest(execution_tier, lower_simd, kExprI8x16GeU, + RunI8x16MixedRelationalOpTest(execution_tier, kExprI8x16GeU, UnsignedGreaterEqual); } WASM_SIMD_TEST(I8x16GtUMixed) { - RunI8x16MixedRelationalOpTest(execution_tier, lower_simd, kExprI8x16GtU, - UnsignedGreater); + RunI8x16MixedRelationalOpTest(execution_tier, kExprI8x16GtU, UnsignedGreater); } WASM_SIMD_TEST(I16x8LeUMixed) { - RunI16x8MixedRelationalOpTest(execution_tier, lower_simd, kExprI16x8LeU, + RunI16x8MixedRelationalOpTest(execution_tier, kExprI16x8LeU, UnsignedLessEqual); } WASM_SIMD_TEST(I16x8LtUMixed) { - RunI16x8MixedRelationalOpTest(execution_tier, lower_simd, kExprI16x8LtU, - UnsignedLess); + RunI16x8MixedRelationalOpTest(execution_tier, kExprI16x8LtU, UnsignedLess); } WASM_SIMD_TEST(I16x8GeUMixed) { - RunI16x8MixedRelationalOpTest(execution_tier, lower_simd, kExprI16x8GeU, + RunI16x8MixedRelationalOpTest(execution_tier, kExprI16x8GeU, UnsignedGreaterEqual); } WASM_SIMD_TEST(I16x8GtUMixed) { - RunI16x8MixedRelationalOpTest(execution_tier, lower_simd, kExprI16x8GtU, - UnsignedGreater); + RunI16x8MixedRelationalOpTest(execution_tier, kExprI16x8GtU, UnsignedGreater); } WASM_SIMD_TEST(I16x8ExtractLaneU_I8x16Splat) { // Test that we are correctly signed/unsigned extending when extracting. - WasmRunner<int32_t, int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, int32_t> r(execution_tier); byte simd_val = r.AllocateLocal(kWasmS128); BUILD(r, WASM_LOCAL_SET(simd_val, WASM_SIMD_I8x16_SPLAT(WASM_LOCAL_GET(0))), WASM_SIMD_I16x8_EXTRACT_LANE_U(0, WASM_LOCAL_GET(simd_val))); @@ -3388,7 +3314,7 @@ WASM_SIMD_TEST(I16x8ExtractLaneU_I8x16Splat) { #define WASM_EXTRACT_I16x8_TEST(Sign, Type) \ WASM_SIMD_TEST(I16X8ExtractLane##Sign) { \ - WasmRunner<int32_t, int32_t> r(execution_tier, lower_simd); \ + WasmRunner<int32_t, int32_t> r(execution_tier); \ byte int_val = r.AllocateLocal(kWasmI32); \ byte simd_val = r.AllocateLocal(kWasmS128); \ BUILD(r, \ @@ -3405,7 +3331,7 @@ WASM_EXTRACT_I16x8_TEST(S, UINT16) WASM_EXTRACT_I16x8_TEST(I, INT16) #define WASM_EXTRACT_I8x16_TEST(Sign, Type) \ WASM_SIMD_TEST(I8x16ExtractLane##Sign) { \ - WasmRunner<int32_t, int32_t> r(execution_tier, lower_simd); \ + WasmRunner<int32_t, int32_t> r(execution_tier); \ byte int_val = r.AllocateLocal(kWasmI32); \ byte simd_val = r.AllocateLocal(kWasmS128); \ BUILD(r, \ diff --git a/deps/v8/test/cctest/wasm/test-run-wasm.cc b/deps/v8/test/cctest/wasm/test-run-wasm.cc index 250820ed19..09a6985b49 100644 --- a/deps/v8/test/cctest/wasm/test-run-wasm.cc +++ b/deps/v8/test/cctest/wasm/test-run-wasm.cc @@ -114,21 +114,18 @@ static void RunInt32AddTest(TestExecutionTier execution_tier, const byte* code, } WASM_EXEC_TEST(Int32Add_P2) { - EXPERIMENTAL_FLAG_SCOPE(mv); static const byte code[] = { WASM_I32_ADD(WASM_LOCAL_GET(0), WASM_LOCAL_GET(1))}; RunInt32AddTest(execution_tier, code, sizeof(code)); } WASM_EXEC_TEST(Int32Add_block1) { - EXPERIMENTAL_FLAG_SCOPE(mv); static const byte code[] = { WASM_BLOCK_X(1, WASM_LOCAL_GET(0), WASM_LOCAL_GET(1)), kExprI32Add}; RunInt32AddTest(execution_tier, code, sizeof(code)); } WASM_EXEC_TEST(Int32Add_block2) { - EXPERIMENTAL_FLAG_SCOPE(mv); static const byte code[] = { WASM_BLOCK_X(1, WASM_LOCAL_GET(0), WASM_LOCAL_GET(1), kExprBr, DEPTH_0), kExprI32Add}; @@ -136,7 +133,6 @@ WASM_EXEC_TEST(Int32Add_block2) { } WASM_EXEC_TEST(Int32Add_multi_if) { - EXPERIMENTAL_FLAG_SCOPE(mv); static const byte code[] = { WASM_IF_ELSE_X(1, WASM_LOCAL_GET(0), WASM_SEQ(WASM_LOCAL_GET(0), WASM_LOCAL_GET(1)), @@ -2425,18 +2421,47 @@ WASM_EXEC_TEST(Regular_Factorial) { } } +namespace { +// TODO(cleanup): Define in cctest.h and re-use where appropriate. +class IsolateScope { + public: + IsolateScope() { + v8::Isolate::CreateParams create_params; + create_params.array_buffer_allocator = CcTest::array_buffer_allocator(); + isolate_ = v8::Isolate::New(create_params); + isolate_->Enter(); + } + + ~IsolateScope() { + isolate_->Exit(); + isolate_->Dispose(); + } + + v8::Isolate* isolate() { return isolate_; } + Isolate* i_isolate() { return reinterpret_cast<Isolate*>(isolate_); } + + private: + v8::Isolate* isolate_; +}; +} // namespace + // Tail-recursive variation on factorial: // fact(N) => f(N,1). // // f(N,X) where N=<1 => X // f(N,X) => f(N-1,X*N). -WASM_EXEC_TEST(ReturnCall_Factorial) { +UNINITIALIZED_WASM_EXEC_TEST(ReturnCall_Factorial) { EXPERIMENTAL_FLAG_SCOPE(return_call); // Run in bounded amount of stack - 8kb. FlagScope<int32_t> stack_size(&v8::internal::FLAG_stack_size, 8); - WasmRunner<uint32_t, uint32_t> r(execution_tier); + IsolateScope isolate_scope; + LocalContext current(isolate_scope.isolate()); + + WasmRunner<uint32_t, uint32_t> r(execution_tier, nullptr, "main", + kRuntimeExceptionSupport, + isolate_scope.i_isolate()); WasmFunctionCompiler& fact_aux_fn = r.NewFunction<uint32_t, uint32_t, uint32_t>("fact_aux"); @@ -2464,12 +2489,17 @@ WASM_EXEC_TEST(ReturnCall_Factorial) { // g(X,0) => X. // g(X,N) => f(N-1,X*N). -WASM_EXEC_TEST(ReturnCall_MutualFactorial) { +UNINITIALIZED_WASM_EXEC_TEST(ReturnCall_MutualFactorial) { EXPERIMENTAL_FLAG_SCOPE(return_call); // Run in bounded amount of stack - 8kb. FlagScope<int32_t> stack_size(&v8::internal::FLAG_stack_size, 8); - WasmRunner<uint32_t, uint32_t> r(execution_tier); + IsolateScope isolate_scope; + LocalContext current(isolate_scope.isolate()); + + WasmRunner<uint32_t, uint32_t> r(execution_tier, nullptr, "main", + kRuntimeExceptionSupport, + isolate_scope.i_isolate()); WasmFunctionCompiler& f_fn = r.NewFunction<uint32_t, uint32_t, uint32_t>("f"); WasmFunctionCompiler& g_fn = r.NewFunction<uint32_t, uint32_t, uint32_t>("g"); @@ -2506,12 +2536,17 @@ WASM_EXEC_TEST(ReturnCall_MutualFactorial) { // f(N,X,_) where N=<1 => X // f(N,X,F) => F(N-1,X*N,F). -WASM_EXEC_TEST(ReturnCall_IndirectFactorial) { +UNINITIALIZED_WASM_EXEC_TEST(ReturnCall_IndirectFactorial) { EXPERIMENTAL_FLAG_SCOPE(return_call); // Run in bounded amount of stack - 8kb. FlagScope<int32_t> stack_size(&v8::internal::FLAG_stack_size, 8); - WasmRunner<uint32_t, uint32_t> r(execution_tier); + IsolateScope isolate_scope; + LocalContext current(isolate_scope.isolate()); + + WasmRunner<uint32_t, uint32_t> r(execution_tier, nullptr, "main", + kRuntimeExceptionSupport, + isolate_scope.i_isolate()); TestSignatures sigs; @@ -2550,12 +2585,17 @@ WASM_EXEC_TEST(ReturnCall_IndirectFactorial) { // sum(N,k) where N<1 =>k. // sum(N,k) => sum(N-1,k+N). -WASM_EXEC_TEST(ReturnCall_Sum) { +UNINITIALIZED_WASM_EXEC_TEST(ReturnCall_Sum) { EXPERIMENTAL_FLAG_SCOPE(return_call); // Run in bounded amount of stack - 8kb. FlagScope<int32_t> stack_size(&v8::internal::FLAG_stack_size, 8); - WasmRunner<int32_t, int32_t> r(execution_tier); + IsolateScope isolate_scope; + LocalContext current(isolate_scope.isolate()); + + WasmRunner<int32_t, int32_t> r(execution_tier, nullptr, "main", + kRuntimeExceptionSupport, + isolate_scope.i_isolate()); TestSignatures sigs; WasmFunctionCompiler& sum_aux_fn = r.NewFunction(sigs.i_ii(), "sum_aux"); @@ -2587,12 +2627,17 @@ WASM_EXEC_TEST(ReturnCall_Sum) { // b3(N,_,_,k) where N<1 =>k. // b3(N,_,_,k) => b1(N-1,k+N). -WASM_EXEC_TEST(ReturnCall_Bounce_Sum) { +UNINITIALIZED_WASM_EXEC_TEST(ReturnCall_Bounce_Sum) { EXPERIMENTAL_FLAG_SCOPE(return_call); // Run in bounded amount of stack - 8kb. FlagScope<int32_t> stack_size(&v8::internal::FLAG_stack_size, 8); - WasmRunner<int32_t, int32_t> r(execution_tier); + IsolateScope isolate_scope; + LocalContext current(isolate_scope.isolate()); + + WasmRunner<int32_t, int32_t> r(execution_tier, nullptr, "main", + kRuntimeExceptionSupport, + isolate_scope.i_isolate()); TestSignatures sigs; WasmFunctionCompiler& b1_fn = r.NewFunction(sigs.i_ii(), "b1"); @@ -2741,7 +2786,6 @@ WASM_EXEC_TEST(AddCall) { } WASM_EXEC_TEST(MultiReturnSub) { - EXPERIMENTAL_FLAG_SCOPE(mv); WasmRunner<int32_t, int32_t, int32_t> r(execution_tier); ValueType storage[] = {kWasmI32, kWasmI32, kWasmI32, kWasmI32}; @@ -2763,7 +2807,6 @@ WASM_EXEC_TEST(MultiReturnSub) { template <typename T> void RunMultiReturnSelect(TestExecutionTier execution_tier, const T* inputs) { - EXPERIMENTAL_FLAG_SCOPE(mv); ValueType type = ValueType::For(MachineTypeForC<T>()); ValueType storage[] = {type, type, type, type, type, type}; const size_t kNumReturns = 2; @@ -3117,7 +3160,6 @@ WASM_EXEC_TEST(Regress_EnsureArguments) { } WASM_EXEC_TEST(Regress_PushControl) { - EXPERIMENTAL_FLAG_SCOPE(mv); WasmRunner<int32_t> r(execution_tier); BUILD(r, WASM_I32V(42), WASM_IF(WASM_I32V(0), WASM_UNREACHABLE, kExprIf, kVoidCode, kExprEnd)); @@ -3854,7 +3896,6 @@ TEST(Liftoff_tier_up) { } TEST(Regression_1085507) { - EXPERIMENTAL_FLAG_SCOPE(mv); WasmRunner<int32_t> r(TestExecutionTier::kInterpreter); TestSignatures sigs; uint32_t sig_v_i = r.builder().AddSignature(sigs.v_i()); diff --git a/deps/v8/test/cctest/wasm/test-wasm-breakpoints.cc b/deps/v8/test/cctest/wasm/test-wasm-breakpoints.cc index 9c2edfe75f..256b2ce296 100644 --- a/deps/v8/test/cctest/wasm/test-wasm-breakpoints.cc +++ b/deps/v8/test/cctest/wasm/test-wasm-breakpoints.cc @@ -546,7 +546,6 @@ WASM_COMPILED_EXEC_TEST(WasmBreakInPostMVP) { // being used. There was a bug where we were trying to update the "detected" // features set, but we were passing a nullptr when compiling with // breakpoints. - EXPERIMENTAL_FLAG_SCOPE(mv); WasmRunner<int> runner(execution_tier); Isolate* isolate = runner.main_isolate(); diff --git a/deps/v8/test/cctest/wasm/test-wasm-serialization.cc b/deps/v8/test/cctest/wasm/test-wasm-serialization.cc index 79ba524ffb..2f8f92b803 100644 --- a/deps/v8/test/cctest/wasm/test-wasm-serialization.cc +++ b/deps/v8/test/cctest/wasm/test-wasm-serialization.cc @@ -257,7 +257,6 @@ TEST(BlockWasmCodeGenAtDeserialization) { } UNINITIALIZED_TEST(CompiledWasmModulesTransfer) { - i::wasm::WasmEngine::InitializeOncePerProcess(); v8::internal::AccountingAllocator allocator; Zone zone(&allocator, ZONE_NAME); diff --git a/deps/v8/test/cctest/wasm/test-wasm-shared-engine.cc b/deps/v8/test/cctest/wasm/test-wasm-shared-engine.cc index b7f3a8d83e..d6d9e40a04 100644 --- a/deps/v8/test/cctest/wasm/test-wasm-shared-engine.cc +++ b/deps/v8/test/cctest/wasm/test-wasm-shared-engine.cc @@ -22,40 +22,15 @@ namespace internal { namespace wasm { namespace test_wasm_shared_engine { -// Helper class representing a WebAssembly engine that is capable of being -// shared between multiple Isolates, sharing the underlying generated code. -class SharedEngine { - public: - ~SharedEngine() { - // Ensure no remaining uses exist. - CHECK(wasm_engine_.unique()); - } - - WasmEngine* engine() const { return wasm_engine_.get(); } - WasmCodeManager* code_manager() const { return engine()->code_manager(); } - - int NumberOfExportedEngineUses() const { - // This class holds one implicit use itself, which we discount. - return static_cast<int>(wasm_engine_.use_count()) - 1; - } - - std::shared_ptr<WasmEngine> ExportEngineForSharing() { return wasm_engine_; } - - private: - std::shared_ptr<WasmEngine> wasm_engine_ = std::make_unique<WasmEngine>(); -}; - // Helper type definition representing a WebAssembly module shared between // multiple Isolates with implicit reference counting. using SharedModule = std::shared_ptr<NativeModule>; -// Helper class representing an Isolate based on a given shared WebAssembly -// engine available at construction time. +// Helper class representing an Isolate that uses the process-wide (shared) wasm +// engine. class SharedEngineIsolate { public: - explicit SharedEngineIsolate(SharedEngine* engine) - : isolate_(v8::Isolate::Allocate()) { - isolate()->SetWasmEngine(engine->ExportEngineForSharing()); + SharedEngineIsolate() : isolate_(v8::Isolate::Allocate()) { v8::Isolate::CreateParams create_params; create_params.array_buffer_allocator = CcTest::array_buffer_allocator(); v8::Isolate::Initialize(isolate_, create_params); @@ -111,19 +86,16 @@ class SharedEngineIsolate { // with a shared WebAssembly engine available at construction time. class SharedEngineThread : public v8::base::Thread { public: - SharedEngineThread(SharedEngine* engine, - std::function<void(SharedEngineIsolate*)> callback) - : Thread(Options("SharedEngineThread")), - engine_(engine), - callback_(callback) {} + explicit SharedEngineThread( + std::function<void(SharedEngineIsolate*)> callback) + : Thread(Options("SharedEngineThread")), callback_(callback) {} void Run() override { - SharedEngineIsolate isolate(engine_); + SharedEngineIsolate isolate; callback_(&isolate); } private: - SharedEngine* engine_; std::function<void(SharedEngineIsolate*)> callback_; }; @@ -201,34 +173,16 @@ Handle<WasmInstanceObject> CompileAndInstantiateAsync( } // namespace -TEST(SharedEngineUseCount) { - SharedEngine engine; - CHECK_EQ(0, engine.NumberOfExportedEngineUses()); - { - SharedEngineIsolate isolate(&engine); - CHECK_EQ(1, engine.NumberOfExportedEngineUses()); - } - CHECK_EQ(0, engine.NumberOfExportedEngineUses()); - { - SharedEngineIsolate isolate1(&engine); - CHECK_EQ(1, engine.NumberOfExportedEngineUses()); - SharedEngineIsolate isolate2(&engine); - CHECK_EQ(2, engine.NumberOfExportedEngineUses()); - } - CHECK_EQ(0, engine.NumberOfExportedEngineUses()); -} - TEST(SharedEngineRunSeparated) { - SharedEngine engine; { - SharedEngineIsolate isolate(&engine); + SharedEngineIsolate isolate; HandleScope scope(isolate.isolate()); ZoneBuffer* buffer = BuildReturnConstantModule(isolate.zone(), 23); Handle<WasmInstanceObject> instance = isolate.CompileAndInstantiate(buffer); CHECK_EQ(23, isolate.Run(instance)); } { - SharedEngineIsolate isolate(&engine); + SharedEngineIsolate isolate; HandleScope scope(isolate.isolate()); ZoneBuffer* buffer = BuildReturnConstantModule(isolate.zone(), 42); Handle<WasmInstanceObject> instance = isolate.CompileAndInstantiate(buffer); @@ -237,10 +191,9 @@ TEST(SharedEngineRunSeparated) { } TEST(SharedEngineRunImported) { - SharedEngine engine; SharedModule module; { - SharedEngineIsolate isolate(&engine); + SharedEngineIsolate isolate; HandleScope scope(isolate.isolate()); ZoneBuffer* buffer = BuildReturnConstantModule(isolate.zone(), 23); Handle<WasmInstanceObject> instance = isolate.CompileAndInstantiate(buffer); @@ -248,7 +201,7 @@ TEST(SharedEngineRunImported) { CHECK_EQ(23, isolate.Run(instance)); } { - SharedEngineIsolate isolate(&engine); + SharedEngineIsolate isolate; HandleScope scope(isolate.isolate()); Handle<WasmInstanceObject> instance = isolate.ImportInstance(module); CHECK_EQ(23, isolate.Run(instance)); @@ -256,15 +209,14 @@ TEST(SharedEngineRunImported) { } TEST(SharedEngineRunThreadedBuildingSync) { - SharedEngine engine; - SharedEngineThread thread1(&engine, [](SharedEngineIsolate* isolate) { + SharedEngineThread thread1([](SharedEngineIsolate* isolate) { HandleScope scope(isolate->isolate()); ZoneBuffer* buffer = BuildReturnConstantModule(isolate->zone(), 23); Handle<WasmInstanceObject> instance = isolate->CompileAndInstantiate(buffer); CHECK_EQ(23, isolate->Run(instance)); }); - SharedEngineThread thread2(&engine, [](SharedEngineIsolate* isolate) { + SharedEngineThread thread2([](SharedEngineIsolate* isolate) { HandleScope scope(isolate->isolate()); ZoneBuffer* buffer = BuildReturnConstantModule(isolate->zone(), 42); Handle<WasmInstanceObject> instance = @@ -278,15 +230,14 @@ TEST(SharedEngineRunThreadedBuildingSync) { } TEST(SharedEngineRunThreadedBuildingAsync) { - SharedEngine engine; - SharedEngineThread thread1(&engine, [](SharedEngineIsolate* isolate) { + SharedEngineThread thread1([](SharedEngineIsolate* isolate) { HandleScope scope(isolate->isolate()); ZoneBuffer* buffer = BuildReturnConstantModule(isolate->zone(), 23); Handle<WasmInstanceObject> instance = CompileAndInstantiateAsync(isolate, buffer); CHECK_EQ(23, isolate->Run(instance)); }); - SharedEngineThread thread2(&engine, [](SharedEngineIsolate* isolate) { + SharedEngineThread thread2([](SharedEngineIsolate* isolate) { HandleScope scope(isolate->isolate()); ZoneBuffer* buffer = BuildReturnConstantModule(isolate->zone(), 42); Handle<WasmInstanceObject> instance = @@ -300,21 +251,20 @@ TEST(SharedEngineRunThreadedBuildingAsync) { } TEST(SharedEngineRunThreadedExecution) { - SharedEngine engine; SharedModule module; { - SharedEngineIsolate isolate(&engine); + SharedEngineIsolate isolate; HandleScope scope(isolate.isolate()); ZoneBuffer* buffer = BuildReturnConstantModule(isolate.zone(), 23); Handle<WasmInstanceObject> instance = isolate.CompileAndInstantiate(buffer); module = isolate.ExportInstance(instance); } - SharedEngineThread thread1(&engine, [module](SharedEngineIsolate* isolate) { + SharedEngineThread thread1([module](SharedEngineIsolate* isolate) { HandleScope scope(isolate->isolate()); Handle<WasmInstanceObject> instance = isolate->ImportInstance(module); CHECK_EQ(23, isolate->Run(instance)); }); - SharedEngineThread thread2(&engine, [module](SharedEngineIsolate* isolate) { + SharedEngineThread thread2([module](SharedEngineIsolate* isolate) { HandleScope scope(isolate->isolate()); Handle<WasmInstanceObject> instance = isolate->ImportInstance(module); CHECK_EQ(23, isolate->Run(instance)); @@ -326,10 +276,9 @@ TEST(SharedEngineRunThreadedExecution) { } TEST(SharedEngineRunThreadedTierUp) { - SharedEngine engine; SharedModule module; { - SharedEngineIsolate isolate(&engine); + SharedEngineIsolate isolate; HandleScope scope(isolate.isolate()); ZoneBuffer* buffer = BuildReturnConstantModule(isolate.zone(), 23); Handle<WasmInstanceObject> instance = isolate.CompileAndInstantiate(buffer); @@ -338,7 +287,7 @@ TEST(SharedEngineRunThreadedTierUp) { constexpr int kNumberOfThreads = 5; std::list<SharedEngineThread> threads; for (int i = 0; i < kNumberOfThreads; ++i) { - threads.emplace_back(&engine, [module](SharedEngineIsolate* isolate) { + threads.emplace_back([module](SharedEngineIsolate* isolate) { constexpr int kNumberOfIterations = 100; HandleScope scope(isolate->isolate()); Handle<WasmInstanceObject> instance = isolate->ImportInstance(module); @@ -347,7 +296,7 @@ TEST(SharedEngineRunThreadedTierUp) { } }); } - threads.emplace_back(&engine, [module](SharedEngineIsolate* isolate) { + threads.emplace_back([module](SharedEngineIsolate* isolate) { HandleScope scope(isolate->isolate()); Handle<WasmInstanceObject> instance = isolate->ImportInstance(module); WasmFeatures detected = WasmFeatures::None(); diff --git a/deps/v8/test/cctest/wasm/wasm-run-utils.cc b/deps/v8/test/cctest/wasm/wasm-run-utils.cc index 163e7b8799..de7139fa3c 100644 --- a/deps/v8/test/cctest/wasm/wasm-run-utils.cc +++ b/deps/v8/test/cctest/wasm/wasm-run-utils.cc @@ -22,13 +22,12 @@ namespace wasm { TestingModuleBuilder::TestingModuleBuilder( Zone* zone, ManuallyImportedJSFunction* maybe_import, TestExecutionTier tier, RuntimeExceptionSupport exception_support, - LowerSimd lower_simd) + Isolate* isolate) : test_module_(std::make_shared<WasmModule>()), - isolate_(CcTest::InitIsolateOnce()), + isolate_(isolate ? isolate : CcTest::InitIsolateOnce()), enabled_features_(WasmFeatures::FromIsolate(isolate_)), execution_tier_(tier), - runtime_exception_support_(exception_support), - lower_simd_(lower_simd) { + runtime_exception_support_(exception_support) { WasmJs::Install(isolate_, true); test_module_->untagged_globals_buffer_size = kMaxGlobalsSize; memset(globals_data_, 0, sizeof(globals_data_)); @@ -164,7 +163,6 @@ void TestingModuleBuilder::FreezeSignatureMapAndInitializeWrapperCache() { Handle<JSFunction> TestingModuleBuilder::WrapCode(uint32_t index) { CHECK(!interpreter_); FreezeSignatureMapAndInitializeWrapperCache(); - SetExecutable(); return WasmInstanceObject::GetOrCreateWasmExternalFunction( isolate_, instance_object(), index); } @@ -297,9 +295,11 @@ uint32_t TestingModuleBuilder::AddPassiveElementSegment( uint32_t index = static_cast<uint32_t>(test_module_->elem_segments.size()); DCHECK_EQ(index, dropped_elem_segments_.size()); - test_module_->elem_segments.emplace_back(false); + test_module_->elem_segments.emplace_back(kWasmFuncRef, false); auto& elem_segment = test_module_->elem_segments.back(); - elem_segment.entries = entries; + for (uint32_t entry : entries) { + elem_segment.entries.push_back(WasmInitExpr::RefFuncConst(entry)); + } // The vector pointers may have moved, so update the instance object. dropped_elem_segments_.push_back(0); @@ -314,7 +314,7 @@ CompilationEnv TestingModuleBuilder::CreateCompilationEnv() { V8_TRAP_HANDLER_SUPPORTED && i::FLAG_wasm_trap_handler; return {test_module_.get(), is_trap_handler_enabled ? kUseTrapHandler : kNoTrapHandler, - runtime_exception_support_, enabled_features_, lower_simd()}; + runtime_exception_support_, enabled_features_}; } const WasmGlobal* TestingModuleBuilder::AddGlobal(ValueType type) { @@ -363,7 +363,7 @@ void TestBuildingGraphWithBuilder(compiler::WasmGraphBuilder* builder, std::vector<compiler::WasmLoopInfo> loops; DecodeResult result = BuildTFGraph(zone->allocator(), WasmFeatures::All(), nullptr, builder, - &unused_detected_features, body, &loops, nullptr); + &unused_detected_features, body, &loops, nullptr, 0); if (result.failed()) { #ifdef DEBUG if (!FLAG_trace_wasm_decoder) { @@ -371,7 +371,7 @@ void TestBuildingGraphWithBuilder(compiler::WasmGraphBuilder* builder, FLAG_trace_wasm_decoder = true; result = BuildTFGraph(zone->allocator(), WasmFeatures::All(), nullptr, builder, - &unused_detected_features, body, &loops, nullptr); + &unused_detected_features, body, &loops, nullptr, 0); } #endif @@ -463,11 +463,9 @@ void WasmFunctionWrapper::Init(CallDescriptor* call_descriptor, graph()->SetEnd(graph()->NewNode(common()->End(1), r)); } -Handle<Code> WasmFunctionWrapper::GetWrapperCode() { +Handle<Code> WasmFunctionWrapper::GetWrapperCode(Isolate* isolate) { Handle<Code> code; if (!code_.ToHandle(&code)) { - Isolate* isolate = CcTest::InitIsolateOnce(); - auto call_descriptor = compiler::Linkage::GetSimplifiedCDescriptor( zone(), signature_, CallDescriptor::kInitializeRootRegister); diff --git a/deps/v8/test/cctest/wasm/wasm-run-utils.h b/deps/v8/test/cctest/wasm/wasm-run-utils.h index e4b0868e47..05ada59bda 100644 --- a/deps/v8/test/cctest/wasm/wasm-run-utils.h +++ b/deps/v8/test/cctest/wasm/wasm-run-utils.h @@ -98,7 +98,7 @@ struct ManuallyImportedJSFunction { class TestingModuleBuilder { public: TestingModuleBuilder(Zone*, ManuallyImportedJSFunction*, TestExecutionTier, - RuntimeExceptionSupport, LowerSimd); + RuntimeExceptionSupport, Isolate* isolate = nullptr); ~TestingModuleBuilder(); void ChangeOriginToAsmjs() { test_module_->origin = kAsmJsSloppyOrigin; } @@ -219,7 +219,6 @@ class TestingModuleBuilder { WasmInterpreter* interpreter() const { return interpreter_.get(); } bool interpret() const { return interpreter_ != nullptr; } - LowerSimd lower_simd() const { return lower_simd_; } Isolate* isolate() const { return isolate_; } Handle<WasmInstanceObject> instance_object() const { return instance_object_; @@ -231,8 +230,6 @@ class TestingModuleBuilder { return reinterpret_cast<Address>(globals_data_); } - void SetExecutable() { native_module_->SetExecutable(true); } - void SetTieredDown() { native_module_->SetTieringState(kTieredDown); execution_tier_ = TestExecutionTier::kLiftoff; @@ -275,7 +272,6 @@ class TestingModuleBuilder { Handle<WasmInstanceObject> instance_object_; NativeModule* native_module_ = nullptr; RuntimeExceptionSupport runtime_exception_support_; - LowerSimd lower_simd_; // Data segment arrays that are normally allocated on the instance. std::vector<byte> data_segment_data_; @@ -327,7 +323,7 @@ class WasmFunctionWrapper : private compiler::GraphAndBuilders { common()->HeapConstant(instance)); } - Handle<Code> GetWrapperCode(); + Handle<Code> GetWrapperCode(Isolate* isolate = nullptr); Signature<MachineType>* signature() const { return signature_; } @@ -389,10 +385,11 @@ class WasmRunnerBase : public InitializedHandleScope { WasmRunnerBase(ManuallyImportedJSFunction* maybe_import, TestExecutionTier execution_tier, int num_params, RuntimeExceptionSupport runtime_exception_support, - LowerSimd lower_simd) - : zone_(&allocator_, ZONE_NAME, kCompressGraphZone), + Isolate* isolate = nullptr) + : InitializedHandleScope(isolate), + zone_(&allocator_, ZONE_NAME, kCompressGraphZone), builder_(&zone_, maybe_import, execution_tier, - runtime_exception_support, lower_simd), + runtime_exception_support, isolate), wrapper_(&zone_, num_params) {} static void SetUpTrapCallback() { @@ -496,7 +493,9 @@ class WasmRunnerBase : public InitializedHandleScope { } } - Handle<Code> GetWrapperCode() { return wrapper_.GetWrapperCode(); } + Handle<Code> GetWrapperCode() { + return wrapper_.GetWrapperCode(main_isolate()); + } private: static FunctionSig* CreateSig(Zone* zone, MachineType return_type, @@ -552,9 +551,9 @@ class WasmRunner : public WasmRunnerBase { const char* main_fn_name = "main", RuntimeExceptionSupport runtime_exception_support = kNoRuntimeExceptionSupport, - LowerSimd lower_simd = kNoLowerSimd) + Isolate* isolate = nullptr) : WasmRunnerBase(maybe_import, execution_tier, sizeof...(ParamTypes), - runtime_exception_support, lower_simd) { + runtime_exception_support, isolate) { WasmFunctionCompiler& main_fn = NewFunction<ReturnType, ParamTypes...>(main_fn_name); // Non-zero if there is an import. @@ -565,15 +564,10 @@ class WasmRunner : public WasmRunnerBase { } } - WasmRunner(TestExecutionTier execution_tier, LowerSimd lower_simd) - : WasmRunner(execution_tier, nullptr, "main", kNoRuntimeExceptionSupport, - lower_simd) {} - ReturnType Call(ParamTypes... p) { - Isolate* isolate = CcTest::InitIsolateOnce(); // Save the original context, because CEntry (for runtime calls) will // reset / invalidate it when returning. - SaveContext save_context(isolate); + SaveContext save_context(main_isolate()); DCHECK(compiled_); if (interpret()) return CallInterpreter(p...); @@ -583,10 +577,9 @@ class WasmRunner : public WasmRunnerBase { wrapper_.SetInnerCode(builder_.GetFunctionCode(main_fn_index_)); wrapper_.SetInstance(builder_.instance_object()); - builder_.SetExecutable(); - Handle<Code> wrapper_code = wrapper_.GetWrapperCode(); - compiler::CodeRunner<int32_t> runner(CcTest::InitIsolateOnce(), - wrapper_code, wrapper_.signature()); + Handle<Code> wrapper_code = GetWrapperCode(); + compiler::CodeRunner<int32_t> runner(main_isolate(), wrapper_code, + wrapper_.signature()); int32_t result; { SetThreadInWasmFlag(); @@ -647,6 +640,19 @@ class WasmRunner : public WasmRunnerBase { } \ void RunWasm_##name(TestExecutionTier execution_tier) +#define UNINITIALIZED_WASM_EXEC_TEST(name) \ + void RunWasm_##name(TestExecutionTier execution_tier); \ + UNINITIALIZED_TEST(RunWasmTurbofan_##name) { \ + RunWasm_##name(TestExecutionTier::kTurbofan); \ + } \ + UNINITIALIZED_TEST(RunWasmLiftoff_##name) { \ + RunWasm_##name(TestExecutionTier::kLiftoff); \ + } \ + UNINITIALIZED_TEST(RunWasmInterpreter_##name) { \ + RunWasm_##name(TestExecutionTier::kInterpreter); \ + } \ + void RunWasm_##name(TestExecutionTier execution_tier) + #define WASM_COMPILED_EXEC_TEST(name) \ void RunWasm_##name(TestExecutionTier execution_tier); \ TEST(RunWasmTurbofan_##name) { \ diff --git a/deps/v8/test/cctest/wasm/wasm-simd-utils.cc b/deps/v8/test/cctest/wasm/wasm-simd-utils.cc index 64a3e63aaa..1777ee095c 100644 --- a/deps/v8/test/cctest/wasm/wasm-simd-utils.cc +++ b/deps/v8/test/cctest/wasm/wasm-simd-utils.cc @@ -20,9 +20,9 @@ namespace v8 { namespace internal { namespace wasm { -void RunI8x16UnOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode opcode, Int8UnOp expected_op) { - WasmRunner<int32_t, int32_t> r(execution_tier, lower_simd); +void RunI8x16UnOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, + Int8UnOp expected_op) { + WasmRunner<int32_t, int32_t> r(execution_tier); // Global to hold output. int8_t* g = r.builder().AddGlobal<int8_t>(kWasmS128); // Build fn to splat test value, perform unop, and write the result. @@ -42,9 +42,9 @@ void RunI8x16UnOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, } template <typename T, typename OpType> -void RunI8x16BinOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode opcode, OpType expected_op) { - WasmRunner<int32_t, T, T> r(execution_tier, lower_simd); +void RunI8x16BinOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, + OpType expected_op) { + WasmRunner<int32_t, T, T> r(execution_tier); // Global to hold output. T* g = r.builder().template AddGlobal<T>(kWasmS128); // Build fn to splat test values, perform binop, and write the result. @@ -69,17 +69,17 @@ void RunI8x16BinOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, } // Explicit instantiations of uses. -template void RunI8x16BinOpTest<int8_t>(TestExecutionTier, LowerSimd, - WasmOpcode, Int8BinOp); +template void RunI8x16BinOpTest<int8_t>(TestExecutionTier, WasmOpcode, + Int8BinOp); -template void RunI8x16BinOpTest<uint8_t>(TestExecutionTier, LowerSimd, - WasmOpcode, Uint8BinOp); +template void RunI8x16BinOpTest<uint8_t>(TestExecutionTier, WasmOpcode, + Uint8BinOp); -void RunI8x16ShiftOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode opcode, Int8ShiftOp expected_op) { +void RunI8x16ShiftOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, + Int8ShiftOp expected_op) { // Intentionally shift by 8, should be no-op. for (int shift = 1; shift <= 8; shift++) { - WasmRunner<int32_t, int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, int32_t> r(execution_tier); int32_t* memory = r.builder().AddMemoryElems<int32_t>(1); int8_t* g_imm = r.builder().AddGlobal<int8_t>(kWasmS128); int8_t* g_mem = r.builder().AddGlobal<int8_t>(kWasmS128); @@ -108,9 +108,8 @@ void RunI8x16ShiftOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, } void RunI8x16MixedRelationalOpTest(TestExecutionTier execution_tier, - LowerSimd lower_simd, WasmOpcode opcode, - Int8BinOp expected_op) { - WasmRunner<int32_t, int32_t, int32_t> r(execution_tier, lower_simd); + WasmOpcode opcode, Int8BinOp expected_op) { + WasmRunner<int32_t, int32_t, int32_t> r(execution_tier); byte value1 = 0, value2 = 1; byte temp1 = r.AllocateLocal(kWasmS128); byte temp2 = r.AllocateLocal(kWasmS128); @@ -129,9 +128,9 @@ void RunI8x16MixedRelationalOpTest(TestExecutionTier execution_tier, r.Call(0xff, 0x7ffe)); } -void RunI16x8UnOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode opcode, Int16UnOp expected_op) { - WasmRunner<int32_t, int32_t> r(execution_tier, lower_simd); +void RunI16x8UnOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, + Int16UnOp expected_op) { + WasmRunner<int32_t, int32_t> r(execution_tier); // Global to hold output. int16_t* g = r.builder().AddGlobal<int16_t>(kWasmS128); // Build fn to splat test value, perform unop, and write the result. @@ -151,9 +150,9 @@ void RunI16x8UnOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, } template <typename T, typename OpType> -void RunI16x8BinOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode opcode, OpType expected_op) { - WasmRunner<int32_t, T, T> r(execution_tier, lower_simd); +void RunI16x8BinOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, + OpType expected_op) { + WasmRunner<int32_t, T, T> r(execution_tier); // Global to hold output. T* g = r.builder().template AddGlobal<T>(kWasmS128); // Build fn to splat test values, perform binop, and write the result. @@ -178,16 +177,16 @@ void RunI16x8BinOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, } // Explicit instantiations of uses. -template void RunI16x8BinOpTest<int16_t>(TestExecutionTier, LowerSimd, - WasmOpcode, Int16BinOp); -template void RunI16x8BinOpTest<uint16_t>(TestExecutionTier, LowerSimd, - WasmOpcode, Uint16BinOp); +template void RunI16x8BinOpTest<int16_t>(TestExecutionTier, WasmOpcode, + Int16BinOp); +template void RunI16x8BinOpTest<uint16_t>(TestExecutionTier, WasmOpcode, + Uint16BinOp); -void RunI16x8ShiftOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode opcode, Int16ShiftOp expected_op) { +void RunI16x8ShiftOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, + Int16ShiftOp expected_op) { // Intentionally shift by 16, should be no-op. for (int shift = 1; shift <= 16; shift++) { - WasmRunner<int32_t, int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, int32_t> r(execution_tier); int32_t* memory = r.builder().AddMemoryElems<int32_t>(1); int16_t* g_imm = r.builder().AddGlobal<int16_t>(kWasmS128); int16_t* g_mem = r.builder().AddGlobal<int16_t>(kWasmS128); @@ -216,9 +215,8 @@ void RunI16x8ShiftOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, } void RunI16x8MixedRelationalOpTest(TestExecutionTier execution_tier, - LowerSimd lower_simd, WasmOpcode opcode, - Int16BinOp expected_op) { - WasmRunner<int32_t, int32_t, int32_t> r(execution_tier, lower_simd); + WasmOpcode opcode, Int16BinOp expected_op) { + WasmRunner<int32_t, int32_t, int32_t> r(execution_tier); byte value1 = 0, value2 = 1; byte temp1 = r.AllocateLocal(kWasmS128); byte temp2 = r.AllocateLocal(kWasmS128); @@ -237,9 +235,9 @@ void RunI16x8MixedRelationalOpTest(TestExecutionTier execution_tier, r.Call(0xffff, 0x7ffffeff)); } -void RunI32x4UnOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode opcode, Int32UnOp expected_op) { - WasmRunner<int32_t, int32_t> r(execution_tier, lower_simd); +void RunI32x4UnOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, + Int32UnOp expected_op) { + WasmRunner<int32_t, int32_t> r(execution_tier); // Global to hold output. int32_t* g = r.builder().AddGlobal<int32_t>(kWasmS128); // Build fn to splat test value, perform unop, and write the result. @@ -258,9 +256,9 @@ void RunI32x4UnOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, } } -void RunI32x4BinOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode opcode, Int32BinOp expected_op) { - WasmRunner<int32_t, int32_t, int32_t> r(execution_tier, lower_simd); +void RunI32x4BinOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, + Int32BinOp expected_op) { + WasmRunner<int32_t, int32_t, int32_t> r(execution_tier); // Global to hold output. int32_t* g = r.builder().AddGlobal<int32_t>(kWasmS128); // Build fn to splat test values, perform binop, and write the result. @@ -284,11 +282,11 @@ void RunI32x4BinOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, } } -void RunI32x4ShiftOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode opcode, Int32ShiftOp expected_op) { +void RunI32x4ShiftOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, + Int32ShiftOp expected_op) { // Intentionally shift by 32, should be no-op. for (int shift = 1; shift <= 32; shift++) { - WasmRunner<int32_t, int32_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, int32_t> r(execution_tier); int32_t* memory = r.builder().AddMemoryElems<int32_t>(1); int32_t* g_imm = r.builder().AddGlobal<int32_t>(kWasmS128); int32_t* g_mem = r.builder().AddGlobal<int32_t>(kWasmS128); @@ -316,9 +314,9 @@ void RunI32x4ShiftOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, } } -void RunI64x2UnOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode opcode, Int64UnOp expected_op) { - WasmRunner<int32_t, int64_t> r(execution_tier, lower_simd); +void RunI64x2UnOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, + Int64UnOp expected_op) { + WasmRunner<int32_t, int64_t> r(execution_tier); // Global to hold output. int64_t* g = r.builder().AddGlobal<int64_t>(kWasmS128); // Build fn to splat test value, perform unop, and write the result. @@ -337,9 +335,9 @@ void RunI64x2UnOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, } } -void RunI64x2BinOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode opcode, Int64BinOp expected_op) { - WasmRunner<int32_t, int64_t, int64_t> r(execution_tier, lower_simd); +void RunI64x2BinOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, + Int64BinOp expected_op) { + WasmRunner<int32_t, int64_t, int64_t> r(execution_tier); // Global to hold output. int64_t* g = r.builder().AddGlobal<int64_t>(kWasmS128); // Build fn to splat test values, perform binop, and write the result. @@ -363,11 +361,11 @@ void RunI64x2BinOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, } } -void RunI64x2ShiftOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode opcode, Int64ShiftOp expected_op) { +void RunI64x2ShiftOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, + Int64ShiftOp expected_op) { // Intentionally shift by 64, should be no-op. for (int shift = 1; shift <= 64; shift++) { - WasmRunner<int32_t, int64_t> r(execution_tier, lower_simd); + WasmRunner<int32_t, int64_t> r(execution_tier); int32_t* memory = r.builder().AddMemoryElems<int32_t>(1); int64_t* g_imm = r.builder().AddGlobal<int64_t>(kWasmS128); int64_t* g_mem = r.builder().AddGlobal<int64_t>(kWasmS128); @@ -448,9 +446,9 @@ void CheckFloatResult(float x, float y, float expected, float actual, } } -void RunF32x4UnOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode opcode, FloatUnOp expected_op, bool exact) { - WasmRunner<int32_t, float> r(execution_tier, lower_simd); +void RunF32x4UnOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, + FloatUnOp expected_op, bool exact) { + WasmRunner<int32_t, float> r(execution_tier); // Global to hold output. float* g = r.builder().AddGlobal<float>(kWasmS128); // Build fn to splat test value, perform unop, and write the result. @@ -492,9 +490,9 @@ void RunF32x4UnOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, } } -void RunF32x4BinOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode opcode, FloatBinOp expected_op) { - WasmRunner<int32_t, float, float> r(execution_tier, lower_simd); +void RunF32x4BinOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, + FloatBinOp expected_op) { + WasmRunner<int32_t, float, float> r(execution_tier); // Global to hold output. float* g = r.builder().AddGlobal<float>(kWasmS128); // Build fn to splat test values, perform binop, and write the result. @@ -538,10 +536,9 @@ void RunF32x4BinOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, } } -void RunF32x4CompareOpTest(TestExecutionTier execution_tier, - LowerSimd lower_simd, WasmOpcode opcode, +void RunF32x4CompareOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, FloatCompareOp expected_op) { - WasmRunner<int32_t, float, float> r(execution_tier, lower_simd); + WasmRunner<int32_t, float, float> r(execution_tier); // Set up global to hold mask output. int32_t* g = r.builder().AddGlobal<int32_t>(kWasmS128); // Build fn to splat test values, perform compare op, and write the result. @@ -622,9 +619,9 @@ void CheckDoubleResult(double x, double y, double expected, double actual, } } -void RunF64x2UnOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode opcode, DoubleUnOp expected_op, bool exact) { - WasmRunner<int32_t, double> r(execution_tier, lower_simd); +void RunF64x2UnOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, + DoubleUnOp expected_op, bool exact) { + WasmRunner<int32_t, double> r(execution_tier); // Global to hold output. double* g = r.builder().AddGlobal<double>(kWasmS128); // Build fn to splat test value, perform unop, and write the result. @@ -666,9 +663,9 @@ void RunF64x2UnOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, } } -void RunF64x2BinOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode opcode, DoubleBinOp expected_op) { - WasmRunner<int32_t, double, double> r(execution_tier, lower_simd); +void RunF64x2BinOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, + DoubleBinOp expected_op) { + WasmRunner<int32_t, double, double> r(execution_tier); // Global to hold output. double* g = r.builder().AddGlobal<double>(kWasmS128); // Build fn to splat test value, perform binop, and write the result. @@ -711,10 +708,9 @@ void RunF64x2BinOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, } } -void RunF64x2CompareOpTest(TestExecutionTier execution_tier, - LowerSimd lower_simd, WasmOpcode opcode, +void RunF64x2CompareOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, DoubleCompareOp expected_op) { - WasmRunner<int32_t, double, double> r(execution_tier, lower_simd); + WasmRunner<int32_t, double, double> r(execution_tier); // Set up global to hold mask output. int64_t* g = r.builder().AddGlobal<int64_t>(kWasmS128); // Build fn to splat test values, perform compare op, and write the result. diff --git a/deps/v8/test/cctest/wasm/wasm-simd-utils.h b/deps/v8/test/cctest/wasm/wasm-simd-utils.h index 157731df27..140acda05c 100644 --- a/deps/v8/test/cctest/wasm/wasm-simd-utils.h +++ b/deps/v8/test/cctest/wasm/wasm-simd-utils.h @@ -38,43 +38,41 @@ using DoubleUnOp = double (*)(double); using DoubleBinOp = double (*)(double, double); using DoubleCompareOp = int64_t (*)(double, double); -void RunI8x16UnOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode opcode, Int8UnOp expected_op); +void RunI8x16UnOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, + Int8UnOp expected_op); template <typename T = int8_t, typename OpType = T (*)(T, T)> -void RunI8x16BinOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode opcode, OpType expected_op); +void RunI8x16BinOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, + OpType expected_op); -void RunI8x16ShiftOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode opcode, Int8ShiftOp expected_op); +void RunI8x16ShiftOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, + Int8ShiftOp expected_op); void RunI8x16MixedRelationalOpTest(TestExecutionTier execution_tier, - LowerSimd lower_simd, WasmOpcode opcode, - Int8BinOp expected_op); + WasmOpcode opcode, Int8BinOp expected_op); -void RunI16x8UnOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode opcode, Int16UnOp expected_op); +void RunI16x8UnOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, + Int16UnOp expected_op); template <typename T = int16_t, typename OpType = T (*)(T, T)> -void RunI16x8BinOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode opcode, OpType expected_op); -void RunI16x8ShiftOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode opcode, Int16ShiftOp expected_op); +void RunI16x8BinOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, + OpType expected_op); +void RunI16x8ShiftOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, + Int16ShiftOp expected_op); void RunI16x8MixedRelationalOpTest(TestExecutionTier execution_tier, - LowerSimd lower_simd, WasmOpcode opcode, - Int16BinOp expected_op); - -void RunI32x4UnOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode opcode, Int32UnOp expected_op); -void RunI32x4BinOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode opcode, Int32BinOp expected_op); -void RunI32x4ShiftOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode opcode, Int32ShiftOp expected_op); - -void RunI64x2UnOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode opcode, Int64UnOp expected_op); -void RunI64x2BinOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode opcode, Int64BinOp expected_op); -void RunI64x2ShiftOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode opcode, Int64ShiftOp expected_op); + WasmOpcode opcode, Int16BinOp expected_op); + +void RunI32x4UnOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, + Int32UnOp expected_op); +void RunI32x4BinOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, + Int32BinOp expected_op); +void RunI32x4ShiftOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, + Int32ShiftOp expected_op); + +void RunI64x2UnOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, + Int64UnOp expected_op); +void RunI64x2BinOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, + Int64BinOp expected_op); +void RunI64x2ShiftOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, + Int64ShiftOp expected_op); // Generic expected value functions. template <typename T, typename = typename std::enable_if< @@ -152,24 +150,20 @@ bool IsCanonical(double actual); void CheckDoubleResult(double x, double y, double expected, double actual, bool exact = true); -void RunF32x4UnOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode opcode, FloatUnOp expected_op, - bool exact = true); +void RunF32x4UnOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, + FloatUnOp expected_op, bool exact = true); -void RunF32x4BinOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode opcode, FloatBinOp expected_op); +void RunF32x4BinOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, + FloatBinOp expected_op); -void RunF32x4CompareOpTest(TestExecutionTier execution_tier, - LowerSimd lower_simd, WasmOpcode opcode, +void RunF32x4CompareOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, FloatCompareOp expected_op); -void RunF64x2UnOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode opcode, DoubleUnOp expected_op, - bool exact = true); -void RunF64x2BinOpTest(TestExecutionTier execution_tier, LowerSimd lower_simd, - WasmOpcode opcode, DoubleBinOp expected_op); -void RunF64x2CompareOpTest(TestExecutionTier execution_tier, - LowerSimd lower_simd, WasmOpcode opcode, +void RunF64x2UnOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, + DoubleUnOp expected_op, bool exact = true); +void RunF64x2BinOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, + DoubleBinOp expected_op); +void RunF64x2CompareOpTest(TestExecutionTier execution_tier, WasmOpcode opcode, DoubleCompareOp expected_op); } // namespace wasm diff --git a/deps/v8/test/common/wasm/wasm-interpreter.cc b/deps/v8/test/common/wasm/wasm-interpreter.cc index 9f7217699b..cbf3e16ee4 100644 --- a/deps/v8/test/common/wasm/wasm-interpreter.cc +++ b/deps/v8/test/common/wasm/wasm-interpreter.cc @@ -903,7 +903,7 @@ class SideTable : public ZoneObject { CLabel* end_label = CLabel::New(&control_transfer_zone, target_stack_height, imm.out_arity()); CLabel* catch_label = - CLabel::New(&control_transfer_zone, stack_height, 0); + CLabel::New(&control_transfer_zone, target_stack_height, 0); control_stack.emplace_back(i.pc(), end_label, catch_label, imm.out_arity()); exception_stack.push_back(control_stack.size() - 1); @@ -3106,9 +3106,6 @@ class WasmInterpreterInternals { // it to 0 here such that we report the same position as in compiled code. frames_.back().pc = 0; isolate_->StackOverflow(); - if (FLAG_experimental_wasm_eh) { - possible_nondeterminism_ = true; - } if (HandleException(isolate_) == WasmInterpreter::HANDLED) { ReloadFromFrameOnException(decoder, target, pc, limit); return true; diff --git a/deps/v8/test/common/wasm/wasm-macro-gen.h b/deps/v8/test/common/wasm/wasm-macro-gen.h index ee51d6a0dd..87b60e40c6 100644 --- a/deps/v8/test/common/wasm/wasm-macro-gen.h +++ b/deps/v8/test/common/wasm/wasm-macro-gen.h @@ -519,6 +519,8 @@ inline WasmOpcode LoadStoreOpcodeOf(MachineType type, bool store) { // conditional branches. #define WASM_BR_ON_CAST(depth, rtt) \ rtt, WASM_GC_OP(kExprBrOnCast), static_cast<byte>(depth) +#define WASM_BR_ON_CAST_FAIL(depth, rtt) \ + rtt, WASM_GC_OP(kExprBrOnCastFail), static_cast<byte>(depth) #define WASM_REF_IS_DATA(ref) ref, WASM_GC_OP(kExprRefIsData) #define WASM_REF_AS_DATA(ref) ref, WASM_GC_OP(kExprRefAsData) @@ -564,6 +566,9 @@ inline WasmOpcode LoadStoreOpcodeOf(MachineType type, bool store) { #define WASM_BR_ON_NULL(depth, ref_object) \ ref_object, kExprBrOnNull, static_cast<byte>(depth) +#define WASM_BR_ON_NON_NULL(depth, ref_object) \ + ref_object, kExprBrOnNonNull, static_cast<byte>(depth) + // Pass: sig_index, ...args, func_index #define WASM_CALL_INDIRECT(sig_index, ...) \ __VA_ARGS__, kExprCallIndirect, static_cast<byte>(sig_index), TABLE_ZERO diff --git a/deps/v8/test/debugger/debug/debug-evaluate-repl-mode-optimized.js b/deps/v8/test/debugger/debug/debug-evaluate-repl-mode-optimized.js index cb06854dcf..469b54844f 100644 --- a/deps/v8/test/debugger/debug/debug-evaluate-repl-mode-optimized.js +++ b/deps/v8/test/debugger/debug/debug-evaluate-repl-mode-optimized.js @@ -30,3 +30,36 @@ assertEquals(21, foo()); // script context. evaluate('x; let x;'); assertEquals(undefined, foo()); + +// Test that a const declared variable 'y' bound by an optimized function is +// updated properly. +evaluate('const y = 42;'); + +evaluate('function foo1() { return y; }'); + +%PrepareFunctionForOptimization(foo1); +foo1(); +foo1(); +%OptimizeFunctionOnNextCall(foo1); +assertEquals(42, foo1()); +assertOptimized(foo1); + +evaluate('const y = 21'); +assertEquals(21, foo1()); + +// Test that a const declared variable 'z' bound by an optimized function is +// updated properly. +evaluate('const z = {a:0};'); + +evaluate('function foo2() { z.a = 42; }'); + +%PrepareFunctionForOptimization(foo2); +foo2(); +foo2(); +%OptimizeFunctionOnNextCall(foo2); +foo2(); +assertOptimized(foo2); + +evaluate('const z = {a:21}'); +foo2(); +assertEquals(42, z.a); diff --git a/deps/v8/test/debugger/debug/debug-evaluate-repl-mode.js b/deps/v8/test/debugger/debug/debug-evaluate-repl-mode.js index 4001033ca6..d225818c9d 100644 --- a/deps/v8/test/debugger/debug/debug-evaluate-repl-mode.js +++ b/deps/v8/test/debugger/debug/debug-evaluate-repl-mode.js @@ -103,42 +103,85 @@ assertDoesNotThrow(() => result = evaluate("class K {};")); // result = evaluate("toString;"); -// Re-declare let as const -evaluate("let z = 10;"); -assertThrows(() => result = evaluate("const z = 9;"), - SyntaxError, "Identifier 'z' has already been declared"); -result = await evaluate("z;"); -assertEquals(10, result); +// Declare const and get value +result = await evaluate("const c = 7;"); +result = await evaluate("c;"); +assertEquals(7, result); + +// Re-declare in the same script after declaration in another script. +assertThrows(() => evaluate("let c = 8; let c = 9;")); +result = await evaluate("c;"); +assertEquals(7, result); // Re-declare const as const +result = await evaluate("const c = 8;"); +result = await evaluate("c;"); +assertEquals(8, result); + +// Assign to const +assertThrowsAsync(evaluate("c = 11;"), + TypeError, "Assignment to constant variable."); +result = await evaluate("c;"); +assertEquals(8, result); + +await evaluate("const c = 8;"); + +// Close over const. Inner function is only pre-parsed. +result = await evaluate("function getter() { return c; }"); +assertEquals(undefined, result); +result = await evaluate("getter();"); +assertEquals(8, result); +// Modifies the original c; does not create a new one/shadow. result = await evaluate("const c = 10;"); -assertThrows(() => result = evaluate("const c = 11;"), - SyntaxError, "Identifier 'c' has already been declared"); +assertEquals(undefined, result); +result = await evaluate("c;"); +assertEquals(10, result); +result = await evaluate("getter();"); +assertEquals(10, result); + +await evaluate("const c = 10"); + +// Check store from an inner scope throws error. +assertThrowsAsync(evaluate("{ let z; c = 11; };"), + TypeError, "Assignment to constant variable."); result = await evaluate("c;"); assertEquals(10, result); +// Check re-declare from an inner scope does nothing. +result = await evaluate("{ let z; const c = 12; } c;"); +assertEquals(10, result); + +assertThrowsAsync(evaluate("{ const qq = 10; } qq;"), + ReferenceError, "qq is not defined"); + // Const vs. const in same script. assertThrows(() => result = evaluate("const d = 9; const d = 10;"), SyntaxError, "Identifier 'd' has already been declared"); -// Close over const -result = await evaluate("const e = 10; function closure() { return e; }"); -result = await evaluate("e;"); -assertEquals(10, result); +// Check TDZ; const use before initialization. +assertThrowsAsync(evaluate("e; const e = 7;"), ReferenceError); +assertThrowsAsync(evaluate("e;"), ReferenceError); -// Assign to const -assertThrowsAsync(evaluate("e = 11;"), - TypeError, "Assignment to constant variable."); -result = await evaluate("e;"); -assertEquals(10, result); -result = await evaluate("closure();"); -assertEquals(10, result); +result = await evaluate("const e = 8;"); +assertEquals(undefined, result); +result = await evaluate("e;") +assertEquals(8, result); -// Assign to const in TDZ -assertThrowsAsync(evaluate("f; const f = 11;"), - ReferenceError, "Cannot access 'f' before initialization"); -assertThrowsAsync(evaluate("f = 12;"), - TypeError, "Assignment to constant variable."); +// f is marked as constant in TDZ +assertThrowsAsync(evaluate("f = 10; const f = 7;"), + TypeError, ("Assignment to constant variable.")); +result = await evaluate("const f = 11;"); +assertEquals(undefined, result); +// We fixed 'f'! +result = await evaluate("f;"); +assertEquals(11, result); + +// Re-declare let as const +evaluate("let z = 10;"); +assertThrows(() => result = evaluate("const z = 9;"), + SyntaxError, "Identifier 'z' has already been declared"); +result = await evaluate("z;"); +assertEquals(10, result) // Re-declare const as let result = await evaluate("const g = 12;"); @@ -246,6 +289,53 @@ assertEquals(2, result); result = await evaluate("typeof k11"); assertEquals("undefined", result); +// Non-configurable properties of the global object (also created by plain old +// top-level var declarations) cannot be re-declared as const. +result = await evaluate(`Object.defineProperty(globalThis, 'k12', { + value: 1, + configurable: false +});`); +result = await evaluate("k12;"); +assertEquals(1, result); +assertThrows(() => result = evaluate("const k12 = 2;"), + SyntaxError, "Identifier 'k12' has already been declared"); +result = await evaluate("k12;"); +assertEquals(1, result); + +// ... Except if you do it in the same script. +result = await evaluate(`Object.defineProperty(globalThis, 'k13', { + value: 1, + configurable: false +}); +const k13 = 2;`); +result = await evaluate("k13;"); +assertEquals(2, result); +result = await evaluate("globalThis.k13;"); +assertEquals(1, result); + +// But if the property is configurable then both versions are allowed. +result = await evaluate(`Object.defineProperty(globalThis, 'k14', { + value: 1, + configurable: true +});`); +result = await evaluate("k14;"); +assertEquals(1, result); +result = await evaluate("const k14 = 2;"); +result = await evaluate("k14;"); +assertEquals(2, result); +result = await evaluate("globalThis.k14;"); +assertEquals(1, result); + +result = await evaluate(`Object.defineProperty(globalThis, 'k15', { + value: 1, + configurable: true +}); +const k15 = 2;`); +result = await evaluate("k15;"); +assertEquals(2, result); +result = await evaluate("globalThis.k15;"); +assertEquals(1, result); + // Test lets with names on the object prototype e.g. toString to make sure // it only works for own properties. // result = evaluate("let valueOf;"); @@ -307,6 +397,18 @@ evaluate("let l10 = 42; function fn2() { return l10; }"); evaluate("let l10 = 'foo';"); assertEquals("foo", fn2()); +// Check that binding and re-declaring a function via const works. +result = evaluate("const fn3 = function() { return 21; }"); +assertEquals(21, fn3()); +result = evaluate("const fn3 = function() { return 42; }"); +assertEquals(42, fn3()); + +// Check that lazily parsed functions that bind a REPL-const variable work. +evaluate("const l11 = 21;"); +evaluate("const l11 = 42; function fn4() { return l11; }"); +evaluate("const l11 = 'foo1';"); +assertEquals("foo1", fn4()); + })().catch(e => { print(e); print(e.stack); diff --git a/deps/v8/test/debugger/debug/debug-liveedit-check-stack.js b/deps/v8/test/debugger/debug/debug-liveedit-check-stack.js index e2e9c6412d..2b2e8c9050 100644 --- a/deps/v8/test/debugger/debug/debug-liveedit-check-stack.js +++ b/deps/v8/test/debugger/debug/debug-liveedit-check-stack.js @@ -136,13 +136,6 @@ test = new TestBase("Test without function on stack"); test.ScriptChanger(); assertEquals("Capybara", test.ChooseAnimal(Noop)); -test = new TestBase("Test with function on stack"); -assertEquals("Capybara", test.ChooseAnimal(WrapInDebuggerCall(WrapInRestartProof(test.ScriptChanger)))); - - -test = new TestBase("Test with function on stack and with constructor frame"); -assertEquals("Capybara", test.ChooseAnimal(WrapInConstructor(WrapInDebuggerCall(WrapInRestartProof(test.ScriptChanger))))); - test = new TestBase("Test with C++ frame above ChooseAnimal frame"); exception_holder = {}; assertEquals("Cat", test.ChooseAnimal(WrapInNativeCall(WrapInDebuggerCall(WrapInCatcher(test.ScriptChanger, exception_holder))))); diff --git a/deps/v8/test/debugger/debug/debug-liveedit-double-call.js b/deps/v8/test/debugger/debug/debug-liveedit-double-call.js deleted file mode 100644 index 1de6bd3171..0000000000 --- a/deps/v8/test/debugger/debug/debug-liveedit-double-call.js +++ /dev/null @@ -1,137 +0,0 @@ -// Copyright 2012 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: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Flags: --noalways-opt - -Debug = debug.Debug - -function TestCase(test_scenario, expected_output) { - // Global variable, accessed from eval'd script. - test_output = ""; - - var script_text_generator = (function() { - var variables = { a: 1, b: 1, c: 1, d: 1, e: 1, f: 1 }; - - return { - get: function() { - return "(function() {\n " + - " function A() {\n " + - " test_output += 'a' + " + variables.a + ";\n " + - " test_output += '=';\n " + - " debugger;\n " + - " return 'Capybara';\n " + - " }\n " + - " function B(p1, p2) {\n " + - " test_output += 'b' + " + variables.b + ";\n " + - " return A();\n " + - " }\n " + - " function C() {\n " + - " test_output += 'c' + " + variables.c + ";\n " + - " // Function call with argument adaptor is intentional.\n " + - " return B();\n " + - " }\n " + - " function D() {\n " + - " test_output += 'd' + " + variables.d + ";\n " + - " // Function call with argument adaptor is intentional.\n " + - " return C(1, 2);\n " + - " }\n " + - " function E() {\n " + - " test_output += 'e' + " + variables.e + ";\n " + - " return D();\n " + - " }\n " + - " function F() {\n " + - " test_output += 'f' + " + variables.f + ";\n " + - " return E();\n " + - " }\n " + - " return F();\n " + - "})\n"; - }, - change: function(var_name) { - variables[var_name]++; - } - }; - })(); - - var test_fun = eval(script_text_generator.get()); - - var scenario_pos = 0; - - function DebuggerStatementHandler() { - while (true) { - assertTrue(scenario_pos < test_scenario.length); - var change_var = test_scenario[scenario_pos++]; - if (change_var == '=') { - // Continue. - return; - } - script_text_generator.change(change_var); - try { - %LiveEditPatchScript(test_fun, script_text_generator.get()) - } catch (e) { - print("LiveEdit exception: " + e); - throw e; - } - } - } - - var saved_exception = null; - - function listener(event, exec_state, event_data, data) { - if (event == Debug.DebugEvent.Break) { - try { - DebuggerStatementHandler(); - } catch (e) { - saved_exception = e; - } - } else { - print("Other: " + event); - } - } - - Debug.setListener(listener); - assertEquals("Capybara", test_fun()); - Debug.setListener(null); - - if (saved_exception) { - print("Exception: " + saved_exception); - assertUnreachable(); - } - - print(test_output); - - assertEquals(expected_output, test_output); -} - -TestCase(['='], "f1e1d1c1b1a1="); - -TestCase(['c', '=', '='], "f1e1d1c1b1a1=c2b1a1="); - -TestCase(['b', 'c', 'd', 'e', '=', '='], "f1e1d1c1b1a1=e2d2c2b2a1="); - -TestCase(['b', 'c', '=', 'b', 'c', 'd', 'e', '=', '='], "f1e1d1c1b1a1=c2b2a1=e2d2c3b3a1="); - -TestCase(['e', 'f', '=', '='], "f1e1d1c1b1a1=f2e2d1c1b1a1="); diff --git a/deps/v8/test/debugger/debug/debug-liveedit-exceptions.js b/deps/v8/test/debugger/debug/debug-liveedit-exceptions.js deleted file mode 100644 index 091f1af0dd..0000000000 --- a/deps/v8/test/debugger/debug/debug-liveedit-exceptions.js +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2016 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Flags: --allow-natives-syntax - -Debug = debug.Debug -function BestEditor() { - throw 'Emacs'; -} - -var exception = null; -var results = []; -var log = [] - -function listener(event, exec_state, event_data, data) { - if (event != Debug.DebugEvent.Exception) return; - try { - var source_line = event_data.sourceLineText(); - print(source_line); - log.push(source_line); - switch (results.length) { - case 0: - Replace(BestEditor, "Emacs", "Eclipse"); - break; - case 1: - Replace(BestEditor, "Eclipse", "Vim"); - break; - case 2: - break; - default: - assertUnreachable(); - } - } catch (e) { - exception = e; - } -}; - -function Replace(fun, original, patch) { - if (fun.toString().indexOf(original) < 0) return; - %LiveEditPatchScript(fun, Debug.scriptSource(fun).replace(original, patch)); -} - -Debug.setListener(listener); -Debug.setBreakOnException(); - -for (var i = 0; i < 3; i++) { - try { - BestEditor(); - } catch (e) { - results.push(e); - } -} -Debug.setListener(null); - -assertNull(exception); -assertEquals(["Emacs", "Eclipse", "Vim"], results); -print(JSON.stringify(log, 1)); -assertEquals([ - " throw 'Emacs';", - " throw 'Eclipse';", - " throw 'Vim';", -], log); diff --git a/deps/v8/test/debugger/debug/debug-liveedit-recursion.js b/deps/v8/test/debugger/debug/debug-liveedit-recursion.js index 6328a9b6de..7b12332f96 100644 --- a/deps/v8/test/debugger/debug/debug-liveedit-recursion.js +++ b/deps/v8/test/debugger/debug/debug-liveedit-recursion.js @@ -21,11 +21,13 @@ let patch = null, exception = null; Debug.setListener(listener); patch = ['return 5', 'return 3']; -assertEquals(3, test(2)); // no running generator +assertEquals(5, test(2)); // generator on stack +assertEquals(exception, + 'LiveEdit failed: BLOCKED_BY_ACTIVE_FUNCTION'); patch = ['return 3', 'return -1']; -assertEquals(3, test(3)); // there is running generator +assertEquals(5, test(5)); // there is running generator assertEquals(exception, - 'LiveEdit failed: BLOCKED_BY_FUNCTION_BELOW_NON_DROPPABLE_FRAME'); + 'LiveEdit failed: BLOCKED_BY_ACTIVE_FUNCTION'); Debug.setListener(null); function listener(event) { diff --git a/deps/v8/test/debugger/debug/debug-liveedit-replace-code.js b/deps/v8/test/debugger/debug/debug-liveedit-replace-code.js deleted file mode 100644 index c517c67a43..0000000000 --- a/deps/v8/test/debugger/debug/debug-liveedit-replace-code.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2017 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Flags: --allow-natives-syntax - -Debug = debug.Debug -var counter = 0; -var exception = null; -function f() { - if (++counter > 5) return; - debugger; - return counter; -}; - -function listener(event, exec_state, event_data, data) { - if (event != Debug.DebugEvent.Break) return; - try { - var original = 'debugger;'; - var patch = 'debugger;\n'; - %LiveEditPatchScript(f, Debug.scriptSource(f).replace(original, patch)); - } catch (e) { - exception = e; - } -} - -Debug.setListener(listener); -f(); -Debug.setListener(null); -assertNull(exception); -assertEquals(6, counter); diff --git a/deps/v8/test/debugger/debug/debug-liveedit-restart-frame.js b/deps/v8/test/debugger/debug/debug-liveedit-restart-frame.js deleted file mode 100644 index 659e3c74e6..0000000000 --- a/deps/v8/test/debugger/debug/debug-liveedit-restart-frame.js +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright 2012 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: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Flags: --noanalyze-environment-liveness - - -Debug = debug.Debug - -function FindCallFrame(exec_state, frame_code) { - var number = Number(frame_code); - if (number >= 0) { - return exec_state.frame(number); - } else { - for (var i = 0; i < exec_state.frameCount(); i++) { - var frame = exec_state.frame(i); - var func_mirror = frame.func(); - if (frame_code == func_mirror.name()) { - return frame; - } - } - } - throw new Error("Failed to find function name " + function_name); -} - -function TestCase(test_scenario, expected_output) { - // Global variable, accessed from eval'd script. - test_output = ""; - - function TestCode() { - function A() { - // Extra stack variable. To make function not slim. - // Restarter doesn't work on slim function when stopped on 'debugger' - // statement. (There is no padding for 'debugger' statement). - var o = {}; - test_output += 'A'; - test_output += '='; - debugger; - return 'Capybara'; - } - function B(p1, p2) { - test_output += 'B'; - return A(); - } - function C() { - test_output += 'C'; - // Function call with argument adaptor is intentional. - return B(); - } - function D() { - test_output += 'D'; - // Function call with argument adaptor is intentional. - return C(1, 2); - } - function E() { - test_output += 'E'; - return D(); - } - function F() { - test_output += 'F'; - return E(); - } - return F(); - } - - var scenario_pos = 0; - - function DebuggerStatementHandler(exec_state) { - while (true) { - assertTrue(scenario_pos < test_scenario.length); - var change_code = test_scenario[scenario_pos++]; - if (change_code == '=') { - // Continue. - return; - } - var frame = FindCallFrame(exec_state, change_code); - var error = frame.restart(); - if (typeof error === 'string') - throw new Error(error); - } - } - - var saved_exception = null; - - function listener(event, exec_state, event_data, data) { - if (saved_exception != null) { - return; - } - if (event == Debug.DebugEvent.Break) { - try { - DebuggerStatementHandler(exec_state); - } catch (e) { - saved_exception = e; - } - } else { - print("Other: " + event); - } - } - - Debug.setListener(listener); - assertEquals("Capybara", TestCode()); - Debug.setListener(null); - - if (saved_exception) { - print("Exception: " + saved_exception); - print("Stack: " + saved_exception.stack); - assertUnreachable(); - } - - print(test_output); - - assertEquals(expected_output, test_output); -} - -TestCase('0==', "FEDCBA=A="); -TestCase('1==', "FEDCBA=BA="); -TestCase('2==', "FEDCBA=CBA="); -TestCase('3==', "FEDCBA=DCBA="); -TestCase('4==', "FEDCBA=EDCBA="); -TestCase('5==', "FEDCBA=FEDCBA="); - -TestCase('=', "FEDCBA="); - -TestCase('C==', "FEDCBA=CBA="); - -TestCase('B=C=A=D==', "FEDCBA=BA=CBA=A=DCBA="); - -// Successive restarts don't work now and require additional fix. -//TestCase('BCDE==', "FEDCBA=EDCBA="); -//TestCase('BC=BCDE==', "FEDCBA=CBA=EDCBA="); -//TestCase('EF==', "FEDCBA=FEDCBA="); diff --git a/deps/v8/test/debugger/debug/debug-liveedit-stepin.js b/deps/v8/test/debugger/debug/debug-liveedit-stepin.js deleted file mode 100644 index 10264ddd5b..0000000000 --- a/deps/v8/test/debugger/debug/debug-liveedit-stepin.js +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2015 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Flags: --allow-natives-syntax - -Debug = debug.Debug -function BestEditor() { - return 'Emacs'; -} - -var exception = null; -var results = []; -var log = [] - -function listener(event, exec_state, event_data, data) { - if (event != Debug.DebugEvent.Break) return; - try { - var source_line = event_data.sourceLineText(); - log.push(source_line); - if (source_line.indexOf("return") >= 0) { - switch (results.length) { - case 0: - break; - case 1: - Replace(BestEditor, "Emacs", "Eclipse"); - break; - case 2: - Replace(BestEditor, "Eclipse", "Vim"); - break; - default: - assertUnreachable(); - } - } - exec_state.prepareStep(Debug.StepAction.StepIn); - } catch (e) { - exception = e; - } -}; - -function Replace(fun, original, patch) { - if (fun.toString().indexOf(original) < 0) return; - %LiveEditPatchScript(fun, Debug.scriptSource(fun).replace(original, patch)); -} - -Debug.setListener(listener); - -debugger; -results.push(BestEditor()); -results.push(BestEditor()); -results.push(BestEditor()); -Debug.setListener(null); - -assertNull(exception); -assertEquals(["Emacs", "Eclipse", "Vim"], results); -assertEquals([ - "debugger;", - "results.push(BestEditor());", - " return 'Emacs';", - " return 'Emacs';", - "results.push(BestEditor());", - "results.push(BestEditor());", - " return 'Emacs';", - " return 'Eclipse';", - " return 'Eclipse';", - "results.push(BestEditor());", - "results.push(BestEditor());", - " return 'Eclipse';", - " return 'Vim';", - " return 'Vim';", - "results.push(BestEditor());", - "Debug.setListener(null);" -], log); diff --git a/deps/v8/test/debugger/debug/es6/debug-liveedit-new-target-1.js b/deps/v8/test/debugger/debug/es6/debug-liveedit-new-target-1.js index ea8765c0da..65b81e273d 100644 --- a/deps/v8/test/debugger/debug/es6/debug-liveedit-new-target-1.js +++ b/deps/v8/test/debugger/debug/es6/debug-liveedit-new-target-1.js @@ -46,7 +46,7 @@ function Replace(fun, original, patch) { try { %LiveEditPatchScript(fun, Debug.scriptSource(fun).replace(original, patch)); } catch (e) { - assertEquals(e, 'LiveEdit failed: BLOCKED_BY_NEW_TARGET_IN_RESTART_FRAME'); + assertEquals(e, 'LiveEdit failed: BLOCKED_BY_ACTIVE_FUNCTION'); exceptions++; } }); diff --git a/deps/v8/test/debugger/debug/es6/debug-liveedit-new-target-2.js b/deps/v8/test/debugger/debug/es6/debug-liveedit-new-target-2.js index 63b5fac976..76311ae706 100644 --- a/deps/v8/test/debugger/debug/es6/debug-liveedit-new-target-2.js +++ b/deps/v8/test/debugger/debug/es6/debug-liveedit-new-target-2.js @@ -43,7 +43,7 @@ function Replace(fun, original, patch) { try { %LiveEditPatchScript(fun, Debug.scriptSource(fun).replace(original, patch)); } catch (e) { - assertEquals(e, 'LiveEdit failed: BLOCKED_BY_NEW_TARGET_IN_RESTART_FRAME'); + assertEquals(e, 'LiveEdit failed: BLOCKED_BY_ACTIVE_FUNCTION'); exceptions++; } }); diff --git a/deps/v8/test/debugger/debug/es6/debug-liveedit-new-target-3.js b/deps/v8/test/debugger/debug/es6/debug-liveedit-new-target-3.js index c60729016a..3e5c991fa7 100644 --- a/deps/v8/test/debugger/debug/es6/debug-liveedit-new-target-3.js +++ b/deps/v8/test/debugger/debug/es6/debug-liveedit-new-target-3.js @@ -83,6 +83,6 @@ assertEquals([LogNewTarget, LogNewTarget], results); replace_again = true; Wrapper(); assertEquals(3, construct_calls); -assertEquals(4, wrapper_calls); // Restarts -assertEquals(0, exceptions); // Replace succeeds +assertEquals(3, wrapper_calls); +assertEquals(1, exceptions); // Replace failed assertEquals([LogNewTarget, LogNewTarget, LogNewTarget], results); diff --git a/deps/v8/test/debugger/debug/es6/generators-debug-liveedit.js b/deps/v8/test/debugger/debug/es6/generators-debug-liveedit.js deleted file mode 100644 index 2627c8d740..0000000000 --- a/deps/v8/test/debugger/debug/es6/generators-debug-liveedit.js +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright 2014 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Flags: --allow-natives-syntax -var Debug = debug.Debug; - -unique_id = 0; - -var Generator = (function*(){}).constructor; - -function assertIteratorResult(value, done, result) { - assertEquals({value: value, done: done}, result); -} - -function MakeGenerator() { - // Prevents eval script caching. - unique_id++; - return Generator('callback', - "/* " + unique_id + "*/\n" + - "yield callback();\n" + - "return 'Cat';\n"); -} - -function MakeFunction() { - // Prevents eval script caching. - unique_id++; - return Function('callback', - "/* " + unique_id + "*/\n" + - "callback();\n" + - "return 'Cat';\n"); -} - -// First, try MakeGenerator with no perturbations. -(function(){ - var generator = MakeGenerator(); - function callback() {}; - var iter = generator(callback); - assertIteratorResult(undefined, false, iter.next()); - assertIteratorResult("Cat", true, iter.next()); -})(); - -function ExecuteInDebugContext(f) { - var result; - var exception = null; - Debug.setListener(function(event) { - if (event == Debug.DebugEvent.Break) { - try { - result = f(); - } catch (e) { - // Rethrow this exception later. - exception = e; - } - } - }); - debugger; - Debug.setListener(null); - if (exception !== null) throw exception; - return result; -} - -function patch(fun, from, to) { - function debug() { - %LiveEditPatchScript(fun, Debug.scriptSource(fun).replace(from, to)); - } - ExecuteInDebugContext(debug); -} - -// Try to edit a MakeGenerator while it's running, then again while it's -// stopped. -(function(){ - var generator = MakeGenerator(); - - var gen_patch_attempted = false; - function attempt_gen_patch() { - assertFalse(gen_patch_attempted); - gen_patch_attempted = true; - assertThrowsEquals(function() { - patch(generator, '\'Cat\'', '\'Capybara\'') - }, 'LiveEdit failed: BLOCKED_BY_FUNCTION_BELOW_NON_DROPPABLE_FRAME'); - }; - var iter = generator(attempt_gen_patch); - assertIteratorResult(undefined, false, iter.next()); - // Patch should not succeed because there is a live generator activation on - // the stack. - assertIteratorResult("Cat", true, iter.next()); - assertTrue(gen_patch_attempted); - - // At this point one iterator is live, but closed, so the patch will succeed. - patch(generator, "'Cat'", "'Capybara'"); - iter = generator(function(){}); - assertIteratorResult(undefined, false, iter.next()); - // Patch successful. - assertIteratorResult("Capybara", true, iter.next()); - - // Patching will fail however when a live iterator is suspended. - iter = generator(function(){}); - assertIteratorResult(undefined, false, iter.next()); - assertThrowsEquals(function() { - patch(generator, '\'Capybara\'', '\'Tapir\'') - }, 'LiveEdit failed: BLOCKED_BY_RUNNING_GENERATOR'); - assertIteratorResult("Capybara", true, iter.next()); - - // Try to patch functions with activations inside and outside generator - // function activations. We should succeed in the former case, but not in the - // latter. - var fun_outside = MakeFunction(); - var fun_inside = MakeFunction(); - var fun_patch_attempted = false; - var fun_patch_restarted = false; - function attempt_fun_patches() { - if (fun_patch_attempted) { - assertFalse(fun_patch_restarted); - fun_patch_restarted = true; - return; - } - fun_patch_attempted = true; - // Patching outside a generator activation must fail. - assertThrowsEquals(function() { - patch(fun_outside, '\'Cat\'', '\'Cobra\'') - }, 'LiveEdit failed: BLOCKED_BY_FUNCTION_BELOW_NON_DROPPABLE_FRAME'); - // Patching inside a generator activation may succeed. - patch(fun_inside, "'Cat'", "'Koala'"); - } - iter = generator(function() { return fun_inside(attempt_fun_patches) }); - assertEquals('Cat', - fun_outside(function () { - assertIteratorResult('Koala', false, iter.next()); - assertTrue(fun_patch_restarted); - })); -})(); diff --git a/deps/v8/test/debugger/debug/es8/debug-async-liveedit.js b/deps/v8/test/debugger/debug/es8/debug-async-liveedit.js deleted file mode 100644 index e85cbe3896..0000000000 --- a/deps/v8/test/debugger/debug/es8/debug-async-liveedit.js +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright 2016 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Flags: --allow-natives-syntax - -var Debug = debug.Debug; - -unique_id = 0; - -var AsyncFunction = (async function(){}).constructor; - -function assertPromiseValue(value, promise) { - promise.then(resolve => { - went = true; - if (resolve !== value) { - print(`expected ${value} found ${resolve}`); - quit(1); - } - }, reject => { - print(`rejected ${reject}`); - quit(1); - }); -} - -function MakeAsyncFunction() { - // Prevents eval script caching. - unique_id++; - return AsyncFunction('callback', - "/* " + unique_id + "*/\n" + - "await callback();\n" + - "return 'Cat';\n"); -} - -function MakeFunction() { - // Prevents eval script caching. - unique_id++; - return Function('callback', - "/* " + unique_id + "*/\n" + - "callback();\n" + - "return 'Cat';\n"); -} - -// First, try MakeGenerator with no perturbations. -(function(){ - var asyncfn = MakeAsyncFunction(); - function callback() {}; - var promise = asyncfn(callback); - assertPromiseValue('Cat', promise); -})(); - -function ExecuteInDebugContext(f) { - var result; - var exception = null; - Debug.setListener(function(event) { - if (event == Debug.DebugEvent.Break) { - try { - result = f(); - } catch (e) { - // Rethrow this exception later. - exception = e; - } - } - }); - debugger; - Debug.setListener(null); - if (exception !== null) throw exception; - return result; -} - -function patch(fun, from, to) { - function debug() { - %LiveEditPatchScript(fun, Debug.scriptSource(fun).replace(from, to)); - } - ExecuteInDebugContext(debug); -} - -// Try to edit a MakeAsyncFunction while it's running, then again while it's -// stopped. -(function(){ - var asyncfn = MakeAsyncFunction(); - - var patch_attempted = false; - function attempt_patch() { - assertFalse(patch_attempted); - patch_attempted = true; - assertThrowsEquals(function() { - patch(asyncfn, '\'Cat\'', '\'Capybara\'') - }, 'LiveEdit failed: BLOCKED_BY_FUNCTION_BELOW_NON_DROPPABLE_FRAME'); - }; - var promise = asyncfn(attempt_patch); - // Patch should not succeed because there is a live async function activation - // on the stack. - assertPromiseValue("Cat", promise); - assertTrue(patch_attempted); - - %PerformMicrotaskCheckpoint(); - - // At this point one iterator is live, but closed, so the patch will succeed. - patch(asyncfn, "'Cat'", "'Capybara'"); - promise = asyncfn(function(){}); - // Patch successful. - assertPromiseValue("Capybara", promise); - - // Patching will fail however when an async function is suspended. - var resolve; - promise = asyncfn(function(){return new Promise(function(r){resolve = r})}); - assertThrowsEquals(function() { - patch(asyncfn, '\'Capybara\'', '\'Tapir\'') - }, 'LiveEdit failed: BLOCKED_BY_RUNNING_GENERATOR'); - resolve(); - assertPromiseValue("Capybara", promise); - - // Try to patch functions with activations inside and outside async - // function activations. We should succeed in the former case, but not in the - // latter. - var fun_outside = eval('((callback) => { callback(); return \'Cat\';})'); - var fun_inside = MakeFunction(); - var fun_patch_attempted = false; - var fun_patch_restarted = false; - function attempt_fun_patches() { - if (fun_patch_attempted) { - assertFalse(fun_patch_restarted); - fun_patch_restarted = true; - return; - } - fun_patch_attempted = true; - // Patching outside an async function activation must fail. - assertThrowsEquals(function() { - patch(fun_outside, '\'Cat\'', '\'Cobra\'') - }, 'LiveEdit failed: BLOCKED_BY_FUNCTION_BELOW_NON_DROPPABLE_FRAME'); - // Patching inside an async function activation may succeed. - patch(fun_inside, "'Cat'", "'Koala'"); - } - result = fun_outside(() => asyncfn(function() { - return fun_inside(attempt_fun_patches); - })); - assertEquals('Cat', - fun_outside(function () { - assertEquals(result, 'Cat'); - assertTrue(fun_patch_restarted); - assertTrue(fun_inside.toString().includes("'Koala'")); - })); -})(); - -%PerformMicrotaskCheckpoint(); diff --git a/deps/v8/test/debugger/debug/wasm/breakpoints.js b/deps/v8/test/debugger/debug/wasm/breakpoints.js index 80d474fb87..58d1ab365b 100644 --- a/deps/v8/test/debugger/debug/wasm/breakpoints.js +++ b/deps/v8/test/debugger/debug/wasm/breakpoints.js @@ -34,10 +34,10 @@ const a_add_offset = body_a.indexOf(kExprI32Add); const b_sub_offset = body_b.indexOf(kExprI32Sub); const expected_breaks = [ - `a:1:${fun_a.body_offset + a_add_offset}`, // break in a at i32.add - `b:1:${fun_b.body_offset + b_sub_offset}`, // break in b at i32.sub - `a:1:${fun_a.body_offset + a_localget_offset}`, // break in a at local.get i0 - `a:1:${fun_a.body_offset + a_const_offset}` // break in a at i32.const 1 + `$a:1:${fun_a.body_offset + a_add_offset}`, // break in a at i32.add + `$b:1:${fun_b.body_offset + b_sub_offset}`, // break in b at i32.sub + `$a:1:${fun_a.body_offset + a_localget_offset}`, // break in a at local.get i0 + `$a:1:${fun_a.body_offset + a_const_offset}` // break in a at i32.const 1 ]; let error; function onBreak(event, exec_state, data) { @@ -53,13 +53,13 @@ function onBreak(event, exec_state, data) { assertEquals(expected_pos, pos); // When we stop in b, we add another breakpoint in a at offset 0 and remove // the existing breakpoint. - if (data.functionName() == 'b') { + if (data.functionName() === '$b') { Debug.setBreakPoint(instance.exports.a, 0, a_localget_offset); Debug.clearBreakPoint(breakpoint_a); } // When we stop at a at local.get, we set another breakpoint *in the same // function*, one instruction later (at i32.const). - if (data.functionName() == 'a' && + if (data.functionName() === '$a' && data.sourceColumn() == fun_a.body_offset) { Debug.setBreakPoint(instance.exports.a, 0, a_const_offset); } diff --git a/deps/v8/test/debugger/debug/wasm/debug-step-into-wasm.js b/deps/v8/test/debugger/debug/wasm/debug-step-into-wasm.js index 8454c24668..8234db26c0 100644 --- a/deps/v8/test/debugger/debug/wasm/debug-step-into-wasm.js +++ b/deps/v8/test/debugger/debug/wasm/debug-step-into-wasm.js @@ -36,7 +36,7 @@ function listener(event, exec_state, event_data, data) { event_data.sourceLineText().indexOf(`Line ${js_break_line}.`) > 0); js_break_line++; } else { - assertTrue(event_data.functionName() == 'sub'); + assertTrue(event_data.functionName() == '$sub'); wasm_break_count++; } exec_state.prepareStep(Debug.StepAction.StepIn); diff --git a/deps/v8/test/debugger/debug/wasm/frame-inspection.js b/deps/v8/test/debugger/debug/wasm/frame-inspection.js index 68aeeb5eac..53aaaff006 100644 --- a/deps/v8/test/debugger/debug/wasm/frame-inspection.js +++ b/deps/v8/test/debugger/debug/wasm/frame-inspection.js @@ -14,8 +14,8 @@ var break_count = 0; const expected_frames = [ // func-name; wasm?; pos; line; col ['call_debugger', false], // -- - ['wasm_2', true, 56, 1, 60], // -- - ['wasm_1', true, 52, 1, 55], // -- + ['$wasm_2', true, 56, 1, 60], // -- + ['$wasm_1', true, 52, 1, 55], // -- ['testFrameInspection', false], // -- ['', false] ]; diff --git a/deps/v8/test/debugger/debug/wasm/stepping-from-js.js b/deps/v8/test/debugger/debug/wasm/stepping-from-js.js index 4b9edabadb..85b8d8caa1 100644 --- a/deps/v8/test/debugger/debug/wasm/stepping-from-js.js +++ b/deps/v8/test/debugger/debug/wasm/stepping-from-js.js @@ -36,13 +36,13 @@ const expected_breaks = [ `imported:${import_line_nr + 1}:2`, // debugger; `imported:${import_line_nr + 2}:2`, // return 7; `imported:${import_line_nr + 2}:11`, // return 7; - 'main:1:68', // i32.const 3 - 'main:1:70', // call 'sub' - 'sub:1:58', // local.get i0 - 'sub:1:60', // local.get i1 - 'sub:1:62', // i32.sub - 'sub:1:63', // end - 'main:1:72' // end + '$main:1:68', // i32.const 3 + '$main:1:70', // call 'sub' + '$sub:1:58', // local.get i0 + '$sub:1:60', // local.get i1 + '$sub:1:62', // i32.sub + '$sub:1:63', // end + '$main:1:72' // end ]; let error; function onBreak(event, exec_state, data) { diff --git a/deps/v8/test/debugger/debugger.status b/deps/v8/test/debugger/debugger.status index b862b3cad2..53c49238f2 100644 --- a/deps/v8/test/debugger/debugger.status +++ b/deps/v8/test/debugger/debugger.status @@ -70,7 +70,6 @@ # https://crbug.com/v8/8141 'debug/debug-liveedit-1': [SKIP], - 'debug/debug-liveedit-double-call': [SKIP], 'debug/es6/debug-liveedit-new-target-3': [SKIP], 'debug/side-effect/debug-evaluate-no-side-effect-control': [SKIP], }], # 'gc_stress == True' @@ -126,8 +125,6 @@ # Stack manipulations in LiveEdit is not implemented for this arch. 'debug/debug-liveedit-check-stack': [SKIP], - 'debug/debug-liveedit-double-call': [SKIP], - 'debug/debug-liveedit-restart-frame': [SKIP], }], # 'arch == s390 or arch == s390x' ############################################################################## @@ -164,4 +161,16 @@ '*': [SKIP], # only relevant for mjsunit tests. }], +################################################################################ +['third_party_heap', { + # Requires --concurrent_recompilation + 'debug/regress/regress-opt-after-debug-deopt': [SKIP], + 'debug/regress/regress-prepare-break-while-recompile': [SKIP], + 'regress/regress-7421': [SKIP], + # Requires a second isolate + 'debug/debug-step': [SKIP], + 'debug/deserialize-script-id': [SKIP], + 'regress/regress-crbug-507070': [SKIP], +}], # third_party_heap + ] diff --git a/deps/v8/test/debugger/regress/regress-crbug-1156498.js b/deps/v8/test/debugger/regress/regress-crbug-1156498.js new file mode 100644 index 0000000000..89c193f09d --- /dev/null +++ b/deps/v8/test/debugger/regress/regress-crbug-1156498.js @@ -0,0 +1,20 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +const Debug = debug.Debug; +Debug.setListener(function (event, exec_state, event_data, data) { +}); +Debug.setBreakOnException(); + +function f(){ + (() => { + var out = 42; + var needsOut = () => {return out} + var simp_class = class { + static var1 = unreferenced; + } + })(); +} + +assertThrows(f, ReferenceError); diff --git a/deps/v8/test/debugger/test-api.js b/deps/v8/test/debugger/test-api.js index 1b978eb157..53c80ec99a 100644 --- a/deps/v8/test/debugger/test-api.js +++ b/deps/v8/test/debugger/test-api.js @@ -463,7 +463,12 @@ class DebugWrapper { "Runtime.getProperties", { objectId : objectId, ownProperties: true }); this.sendMessage(msg); const reply = this.takeReplyChecked(msgid); - return Object(reply.result.internalProperties[0].value.value); + for (const internalProperty of reply.result.internalProperties) { + if (internalProperty.name === '[[PrimitiveValue]]') { + return Object(internalProperty.value.value); + } + } + throw new Error('Remote object is not a value wrapper'); } reconstructRemoteObject(obj) { diff --git a/deps/v8/test/fuzzer/fuzzer.status b/deps/v8/test/fuzzer/fuzzer.status index 4a8bc4d286..6e6d44f124 100644 --- a/deps/v8/test/fuzzer/fuzzer.status +++ b/deps/v8/test/fuzzer/fuzzer.status @@ -19,4 +19,13 @@ '*': [SKIP], # only relevant for mjsunit tests. }], +################################################################################ +['third_party_heap', { + # Requires a second isolate + 'inspector/empty': [SKIP], + 'inspector/endless-loop': [SKIP], + 'inspector/invalid': [SKIP], + 'inspector/regress-1166549': [SKIP], +}], # third_party_heap + ] diff --git a/deps/v8/test/fuzzer/inspector-fuzzer.cc b/deps/v8/test/fuzzer/inspector-fuzzer.cc index 77e2402fa8..60d074418e 100644 --- a/deps/v8/test/fuzzer/inspector-fuzzer.cc +++ b/deps/v8/test/fuzzer/inspector-fuzzer.cc @@ -3,8 +3,8 @@ // found in the LICENSE file. #if !defined(_WIN32) && !defined(_WIN64) -#include <unistd.h> // NOLINT -#endif // !defined(_WIN32) && !defined(_WIN64) +#include <unistd.h> +#endif // !defined(_WIN32) && !defined(_WIN64) #include <locale.h> @@ -439,14 +439,14 @@ class InspectorExtension : public IsolateData::SetupGlobalTask { static void AccessorGetter(v8::Local<v8::String> property, const v8::PropertyCallbackInfo<v8::Value>& info) { v8::Isolate* isolate = info.GetIsolate(); - isolate->ThrowException(ToV8String(isolate, "Getter is called")); + isolate->ThrowError("Getter is called"); } static void AccessorSetter(v8::Local<v8::String> property, v8::Local<v8::Value> value, const v8::PropertyCallbackInfo<void>& info) { v8::Isolate* isolate = info.GetIsolate(); - isolate->ThrowException(ToV8String(isolate, "Setter is called")); + isolate->ThrowError("Setter is called"); } static void StoreCurrentStackTrace( diff --git a/deps/v8/test/fuzzer/multi-return.cc b/deps/v8/test/fuzzer/multi-return.cc index e09a7227a5..58b4510160 100644 --- a/deps/v8/test/fuzzer/multi-return.cc +++ b/deps/v8/test/fuzzer/multi-return.cc @@ -165,7 +165,7 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { if (param_count > Code::kMaxArguments) return 0; size_t return_count = input.NumNonZeroBytes(param_count + 1, kNumTypes); - if (return_count > wasm::kV8MaxWasmFunctionMultiReturns) return 0; + if (return_count > wasm::kV8MaxWasmFunctionReturns) return 0; CallDescriptor* desc = CreateRandomCallDescriptor(&zone, return_count, param_count, &input); diff --git a/deps/v8/test/inspector/debugger/access-obsolete-frame-expected.txt b/deps/v8/test/inspector/debugger/access-obsolete-frame-expected.txt deleted file mode 100644 index 7093d76c2e..0000000000 --- a/deps/v8/test/inspector/debugger/access-obsolete-frame-expected.txt +++ /dev/null @@ -1,9 +0,0 @@ -Tests that accessing no longer valid call frames returns an error -Paused on 'debugger;' -resume -restartFrame -PASS, error message as expected -evaluateOnFrame -PASS, error message as expected -setVariableValue -PASS, error message as expected diff --git a/deps/v8/test/inspector/debugger/access-obsolete-frame.js b/deps/v8/test/inspector/debugger/access-obsolete-frame.js deleted file mode 100644 index 9d498e041d..0000000000 --- a/deps/v8/test/inspector/debugger/access-obsolete-frame.js +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2016 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -let {session, contextGroup, Protocol} = InspectorTest.start('Tests that accessing no longer valid call frames returns an error'); - -contextGroup.addScript(` -function testFunction() -{ - debugger; -} -//# sourceURL=foo.js`); - -Protocol.Debugger.enable(); - -Protocol.Debugger.oncePaused().then(handleDebuggerPausedOne); - -Protocol.Runtime.evaluate({ "expression": "setTimeout(testFunction, 0)" }); - -var obsoleteTopFrameId; - -function handleDebuggerPausedOne(messageObject) -{ - InspectorTest.log("Paused on 'debugger;'"); - - var topFrame = messageObject.params.callFrames[0]; - obsoleteTopFrameId = topFrame.callFrameId; - - Protocol.Debugger.resume().then(callbackResume); -} - -function callbackResume(response) -{ - InspectorTest.log("resume"); - InspectorTest.log("restartFrame"); - Protocol.Debugger.restartFrame({ callFrameId: obsoleteTopFrameId }).then(callbackRestartFrame); -} - -function callbackRestartFrame(response) -{ - logErrorResponse(response); - InspectorTest.log("evaluateOnFrame"); - Protocol.Debugger.evaluateOnCallFrame({ callFrameId: obsoleteTopFrameId, expression: "0"}).then(callbackEvaluate); -} - -function callbackEvaluate(response) -{ - logErrorResponse(response); - InspectorTest.log("setVariableValue"); - Protocol.Debugger.setVariableValue({ callFrameId: obsoleteTopFrameId, scopeNumber: 0, variableName: "a", newValue: { value: 0 } }).then(callbackSetVariableValue); -} - -function callbackSetVariableValue(response) -{ - logErrorResponse(response); - InspectorTest.completeTest(); -} - -function logErrorResponse(response) -{ - if (response.error) { - if (response.error.message.indexOf("Can only perform operation while paused.") !== -1) { - InspectorTest.log("PASS, error message as expected"); - return; - } - } - InspectorTest.log("FAIL, unexpected error message"); - InspectorTest.log(JSON.stringify(response)); -} diff --git a/deps/v8/test/inspector/debugger/command-line-api-with-arrow-function-expected.txt b/deps/v8/test/inspector/debugger/command-line-api-with-arrow-function-expected.txt new file mode 100644 index 0000000000..f81c82499d --- /dev/null +++ b/deps/v8/test/inspector/debugger/command-line-api-with-arrow-function-expected.txt @@ -0,0 +1,23 @@ +Check that debug and monitor methods from Command Line API works with bound function. +> debug foo and bar +> call foo and bar +paused in foo +paused in bar +> undebug foo and bar +> call foo and bar +> monitor foo and bar +> call foo and bar +function foo called +function bar called +> unmonitor foo and bar +> call foo and bar +> monitor and debug bar +> call bar +function bar called +paused in bar +> undebug bar +> call bar +function bar called +> debug and unmonitor bar +> call bar +paused in bar diff --git a/deps/v8/test/inspector/debugger/command-line-api-with-arrow-function.js b/deps/v8/test/inspector/debugger/command-line-api-with-arrow-function.js new file mode 100644 index 0000000000..86e42f4c95 --- /dev/null +++ b/deps/v8/test/inspector/debugger/command-line-api-with-arrow-function.js @@ -0,0 +1,67 @@ +// Copyright 2016 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +let {session, contextGroup, Protocol} = InspectorTest.start( + 'Check that debug and monitor methods from Command Line API works with bound function.'); + +contextGroup.addScript(` +function foo() {} +function boo() {} +var bar = () => boo(); + +function testFunction() { + console.log("> debug foo and bar"); + debug(foo); + debug(bar); + console.log("> call foo and bar"); + foo(); + bar(); + console.log("> undebug foo and bar"); + undebug(foo); + undebug(bar); + console.log("> call foo and bar"); + foo(); + bar(); + + console.log("> monitor foo and bar"); + monitor(foo); + monitor(bar); + console.log("> call foo and bar"); + foo(); + bar(); + console.log("> unmonitor foo and bar"); + unmonitor(foo); + unmonitor(bar); + console.log("> call foo and bar"); + foo(); + bar(); + + console.log("> monitor and debug bar"); + monitor(bar); + debug(bar); + console.log("> call bar"); + bar(); + console.log("> undebug bar"); + undebug(bar); + console.log("> call bar"); + bar(); + console.log("> debug and unmonitor bar"); + debug(bar); + unmonitor(bar); + console.log("> call bar"); + bar(); +}`); + +Protocol.Runtime.enable(); +Protocol.Debugger.enable(); +Protocol.Debugger.onPaused(message => { + var functionName = message.params.callFrames[0].functionName; + InspectorTest.log(`paused in ${functionName}`); + Protocol.Debugger.resume(); +}); +Protocol.Runtime.onConsoleAPICalled( + message => InspectorTest.log(message.params.args[0].value)); +Protocol.Runtime + .evaluate({expression: 'testFunction()', includeCommandLineAPI: true}) + .then(InspectorTest.completeTest); diff --git a/deps/v8/test/inspector/debugger/get-properties-paused-expected.txt b/deps/v8/test/inspector/debugger/get-properties-paused-expected.txt index a993c829f1..1fea7a5549 100644 --- a/deps/v8/test/inspector/debugger/get-properties-paused-expected.txt +++ b/deps/v8/test/inspector/debugger/get-properties-paused-expected.txt @@ -1,10 +1,10 @@ Checks Runtime.getProperties method while debugger is paused. Running test: testObject5 - __proto__ own object undefined foo own string cat Internal properties [[PrimitiveValue]] number 5 + [[Prototype]] object undefined Running test: testNotOwn __defineGetter__ inherited function undefined @@ -23,6 +23,8 @@ Running test: testNotOwn toLocaleString inherited function undefined toString inherited function undefined valueOf inherited function undefined +Internal properties + [[Prototype]] object undefined Running test: testAccessorsOnly b own no value, getter, setter @@ -32,31 +34,34 @@ Running test: testArray 0 own string red 1 own string green 2 own string blue - __proto__ own object undefined length own number 3 +Internal properties + [[Prototype]] object undefined Running test: testBound - __proto__ own function undefined length own number 0 name own string bound Number Internal properties [[BoundArgs]] object undefined [[BoundThis]] object undefined + [[Prototype]] function undefined [[TargetFunction]] function undefined Running test: testObjectThrowsLength - __proto__ own object undefined length own no value, getter +Internal properties + [[Prototype]] object undefined Running test: testTypedArrayWithoutLength - __proto__ own object undefined +Internal properties + [[Prototype]] object undefined Running test: testArrayBuffer Running test: testArrayBufferWithBrokenUintCtor - __proto__ own object undefined Internal properties [[ArrayBufferByteLength]] number 7 [[ArrayBufferData]] string 0x... [[Int8Array]] object undefined + [[Prototype]] object undefined [[Uint8Array]] object undefined diff --git a/deps/v8/test/inspector/debugger/get-properties-paused.js b/deps/v8/test/inspector/debugger/get-properties-paused.js index c750df0f13..d76429db7f 100644 --- a/deps/v8/test/inspector/debugger/get-properties-paused.js +++ b/deps/v8/test/inspector/debugger/get-properties-paused.js @@ -42,8 +42,6 @@ let { Protocol } = InspectorTest.start('Checks Runtime.getProperties method whil let objectId = await evaluateToObjectId('new Uint8Array([1, 1, 1, 1, 1, 1, 1, 1]).buffer'); let props = await Protocol.Runtime.getProperties({ objectId, ownProperties: true }); for (let prop of props.result.result) { - if (prop.name === '__proto__') - continue; InspectorTest.log(prop.name); await logGetPropertiesResult(prop.value.objectId); } diff --git a/deps/v8/test/inspector/debugger/restart-frame-expected.txt b/deps/v8/test/inspector/debugger/restart-frame-expected.txt index 3f6efb8e62..1a894a70ad 100644 --- a/deps/v8/test/inspector/debugger/restart-frame-expected.txt +++ b/deps/v8/test/inspector/debugger/restart-frame-expected.txt @@ -1,10 +1,12 @@ -Checks that Debugger.restartFrame works +Checks that Debugger.restartFrame returns an error Paused at debugger: function foo() { #debugger; }; foo(); -Call restart and dump location of restart: -function foo() { debugger; }; #foo(); - -Location after restart: -function foo() { #debugger; }; foo(); - +restartFrame result: +{ + error : { + code : -32000 + message : Frame restarting not supported + } + id : <messageId> +} diff --git a/deps/v8/test/inspector/debugger/restart-frame.js b/deps/v8/test/inspector/debugger/restart-frame.js index 480ab492fc..ecb6761577 100644 --- a/deps/v8/test/inspector/debugger/restart-frame.js +++ b/deps/v8/test/inspector/debugger/restart-frame.js @@ -3,7 +3,7 @@ // found in the LICENSE file. const {session, Protocol} = - InspectorTest.start('Checks that Debugger.restartFrame works'); + InspectorTest.start('Checks that Debugger.restartFrame returns an error'); session.setupScriptMap(); @@ -16,18 +16,9 @@ session.setupScriptMap(); const { params: { callFrames: before } } = await Protocol.Debugger.oncePaused(); await session.logSourceLocation(before[0].location); - InspectorTest.log('Call restart and dump location of restart:'); - const { result: { callFrames: restart }} = - await Protocol.Debugger.restartFrame({ - callFrameId: before[0].callFrameId - }); - await session.logSourceLocation(restart[0].location); - InspectorTest.log('Location after restart:'); - Protocol.Debugger.resume(); - const { params: { callFrames: after } } = - await Protocol.Debugger.oncePaused(); - await session.logSourceLocation(after[0].location); - Protocol.Debugger.resume(); - await evalPromise; + const result = await Protocol.Debugger.restartFrame({ callFrameId: before[0].callFrameId }); + InspectorTest.log('restartFrame result:'); + InspectorTest.logMessage(result); + await Promise.all([Protocol.Debugger.resume(), evalPromise]); InspectorTest.completeTest(); })() diff --git a/deps/v8/test/inspector/debugger/set-script-source-2-expected.txt b/deps/v8/test/inspector/debugger/set-script-source-2-expected.txt deleted file mode 100644 index 26d450d020..0000000000 --- a/deps/v8/test/inspector/debugger/set-script-source-2-expected.txt +++ /dev/null @@ -1,73 +0,0 @@ -Tests Debugger.setScriptSource - -Running test: addLineAfter -var x = a; -#debugger; -return x + b; - ---- -Break location after LiveEdit: -var x = a; -#debugger; -var x = 3; - -stackChanged: true -Protocol.Debugger.stepInto -function foo(a,b,c) { -var x = #a; -debugger; - - -Running test: addLineBefore -var x = a; -#debugger; -return x + b; - ---- -Break location after LiveEdit: -var x = a; -#var x = 3; -debugger; - -stackChanged: true -Protocol.Debugger.stepInto -function foo(a,b,c) { -var x = #a; -var x = 3; - - -Running test: breakAtFirstLineAddLineAfter -function boo() { -#debugger; -var x = 1; - ---- -Break location after LiveEdit: -function boo() { -#debugger; -var x = 3; - -stackChanged: true -Protocol.Debugger.stepInto -function boo() { -#debugger; -var x = 3; - - -Running test: breakAtFirstLineAddLineBefore -function boo() { -#debugger; -var x = 1; - ---- -Break location after LiveEdit: -function boo() { -#var x = 3; -debugger; - -stackChanged: true -Protocol.Debugger.stepInto -function boo() { -var x = #3; -debugger; - diff --git a/deps/v8/test/inspector/debugger/set-script-source-2.js b/deps/v8/test/inspector/debugger/set-script-source-2.js deleted file mode 100644 index 335bc47644..0000000000 --- a/deps/v8/test/inspector/debugger/set-script-source-2.js +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright 2017 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Flags: --no-always-opt - -let {session, contextGroup, Protocol} = - InspectorTest.start('Tests Debugger.setScriptSource'); - -session.setupScriptMap(); - -function foo(a,b,c) { -var x = a; -debugger; -return x + b; -} - -function boo() { -debugger; -var x = 1; -return x + 2; -} - -InspectorTest.runAsyncTestSuite([ - async function addLineAfter() { - await Protocol.Debugger.enable(); - Protocol.Runtime.evaluate({expression: foo.toString()}); - let {params:{scriptId}} = await Protocol.Debugger.onceScriptParsed(); - Protocol.Runtime.evaluate({ - expression: 'setTimeout(() => foo(1,2,3), 0)//# sourceURL=test.js'}); - let {params:{callFrames}} = await Protocol.Debugger.oncePaused(); - await session.logSourceLocation(callFrames[0].location); - await replaceInSource(scriptId, 'debugger;', 'debugger;\nvar x = 3;'); - - Protocol.Debugger.resume(); - await Protocol.Debugger.oncePaused(); - await Protocol.Debugger.disable(); - }, - - async function addLineBefore() { - await Protocol.Debugger.enable(); - Protocol.Runtime.evaluate({expression: foo.toString()}); - let {params:{scriptId}} = await Protocol.Debugger.onceScriptParsed(); - Protocol.Runtime.evaluate({ - expression: 'setTimeout(foo, 0)//# sourceURL=test.js'}); - let {params:{callFrames}} = await Protocol.Debugger.oncePaused(); - await session.logSourceLocation(callFrames[0].location); - await replaceInSource(scriptId, 'debugger;', 'var x = 3;\ndebugger;'); - - Protocol.Debugger.resume(); - await Protocol.Debugger.oncePaused(); - await Protocol.Debugger.disable(); - }, - - async function breakAtFirstLineAddLineAfter() { - await Protocol.Debugger.enable(); - Protocol.Runtime.evaluate({expression: boo.toString()}); - let {params:{scriptId}} = await Protocol.Debugger.onceScriptParsed(); - Protocol.Runtime.evaluate({ - expression: 'setTimeout(boo, 0)//# sourceURL=test.js'}); - let {params:{callFrames}} = await Protocol.Debugger.oncePaused(); - await session.logSourceLocation(callFrames[0].location); - await replaceInSource(scriptId, 'debugger;', 'debugger;\nvar x = 3;'); - - await Protocol.Debugger.disable(); - }, - - async function breakAtFirstLineAddLineBefore() { - await Protocol.Debugger.enable(); - Protocol.Runtime.evaluate({expression: boo.toString()}); - let {params:{scriptId}} = await Protocol.Debugger.onceScriptParsed(); - Protocol.Runtime.evaluate({ - expression: 'setTimeout(boo, 0)//# sourceURL=test.js'}); - let {params:{callFrames}} = await Protocol.Debugger.oncePaused(); - await session.logSourceLocation(callFrames[0].location); - await replaceInSource(scriptId, 'debugger;', 'var x = 3;\ndebugger;'); - - await Protocol.Debugger.disable(); - } -]); - -async function replaceInSource(scriptId, oldString, newString) { - InspectorTest.log('---'); - let {result:{scriptSource}} = - await Protocol.Debugger.getScriptSource({scriptId}); - let {result} = await Protocol.Debugger.setScriptSource({ - scriptId, - scriptSource: scriptSource.replace(oldString, newString) - }); - InspectorTest.log('Break location after LiveEdit:'); - await session.logSourceLocation(result.callFrames[0].location, true); - InspectorTest.log('stackChanged: ' + result.stackChanged); - if (result.stackChanged) { - InspectorTest.log('Protocol.Debugger.stepInto'); - Protocol.Debugger.stepInto(); - var {params:{callFrames}} = await Protocol.Debugger.oncePaused(); - await session.logSourceLocation(callFrames[0].location); - } -} diff --git a/deps/v8/test/inspector/debugger/set-script-source-stack-padding-expected.txt b/deps/v8/test/inspector/debugger/set-script-source-stack-padding-expected.txt deleted file mode 100644 index c0ecafb94d..0000000000 --- a/deps/v8/test/inspector/debugger/set-script-source-stack-padding-expected.txt +++ /dev/null @@ -1,15 +0,0 @@ -Change return string constant at breakpoint -Set breakpoint inside f() and call function.. -Paused at: -(function f() { - #return 'Cat'; -}) - -Change Cat to Capybara.. -Paused at: -(function f() { - #return 'Capybara'; -}) - -Resume and check return value.. -SlimFunction() = Capybara diff --git a/deps/v8/test/inspector/debugger/set-script-source-stack-padding.js b/deps/v8/test/inspector/debugger/set-script-source-stack-padding.js deleted file mode 100644 index 0a11e8977e..0000000000 --- a/deps/v8/test/inspector/debugger/set-script-source-stack-padding.js +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2018 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -let {session, contextGroup, Protocol} = - InspectorTest.start('Change return string constant at breakpoint'); - -contextGroup.addScript( -`SlimFunction = eval( - '(function f() {\\n ' + - ' return \\'Cat\\';\\n' + - '})\\n' + - '//# sourceURL=eval.js\\n');`); - -(async function test() { - session.setupScriptMap(); - let scriptPromise = new Promise(resolve => { - Protocol.Debugger.onScriptParsed(({params}) => { - if (params.url === 'eval.js') { - resolve(params); - Protocol.Debugger.onScriptParsed(null); - } - }); - }); - Protocol.Debugger.enable(); - const script = await scriptPromise; - - InspectorTest.log('Set breakpoint inside f() and call function..'); - const {result:{actualLocation}} = await Protocol.Debugger.setBreakpoint({ - location: { scriptId: script.scriptId, lineNumber: 1, columnNumber: 0}}); - const evalPromise = Protocol.Runtime.evaluate({expression: 'SlimFunction()'}); - const {params:{callFrames}} = await Protocol.Debugger.oncePaused(); - InspectorTest.log('Paused at:'); - await session.logSourceLocation(callFrames[0].location); - - InspectorTest.log('Change Cat to Capybara..'); - const {result:{scriptSource}} = await Protocol.Debugger.getScriptSource({ - scriptId: script.scriptId - }); - const {result:{callFrames:[topFrame],stackChanged}} = - await Protocol.Debugger.setScriptSource({ - scriptId: script.scriptId, - scriptSource: scriptSource.replace(`'Cat'`, `'Capybara'`) - }); - - InspectorTest.log('Paused at:'); - await session.logSourceLocation(topFrame.location, true); - - InspectorTest.log('Resume and check return value..'); - Protocol.Debugger.resume(); - InspectorTest.log( - `SlimFunction() = ${(await evalPromise).result.result.value}`); - InspectorTest.completeTest(); -})(); diff --git a/deps/v8/test/inspector/debugger/set-variable-value-expected.txt b/deps/v8/test/inspector/debugger/set-variable-value-expected.txt index b50adf7a58..5d3c3a9398 100644 --- a/deps/v8/test/inspector/debugger/set-variable-value-expected.txt +++ b/deps/v8/test/inspector/debugger/set-variable-value-expected.txt @@ -54,6 +54,17 @@ Running test: testSetVariableValueMain { id : <messageId> result : { + internalProperties : [ + [0] : { + name : [[Prototype]] + value : { + className : Object + description : Object + objectId : <objectId> + type : object + } + } + ] result : [ [0] : { configurable : true @@ -67,19 +78,6 @@ Running test: testSetVariableValueMain } writable : true } - [1] : { - configurable : true - enumerable : false - isOwn : true - name : __proto__ - value : { - className : Object - description : Object - objectId : <objectId> - type : object - } - writable : true - } ] } } @@ -98,6 +96,18 @@ Running test: testSetVariableValueMain { id : <messageId> result : { + internalProperties : [ + [0] : { + name : [[Prototype]] + value : { + className : Array + description : Array(0) + objectId : <objectId> + subtype : array + type : object + } + } + ] result : [ [0] : { configurable : true @@ -144,20 +154,6 @@ Running test: testSetVariableValueMain } writable : true } - [4] : { - configurable : true - enumerable : false - isOwn : true - name : __proto__ - value : { - className : Array - description : Array(0) - objectId : <objectId> - subtype : array - type : object - } - writable : true - } ] } } @@ -175,6 +171,17 @@ Running test: testSetVariableValueMain { id : <messageId> result : { + internalProperties : [ + [0] : { + name : [[Prototype]] + value : { + className : Object + description : Object + objectId : <objectId> + type : object + } + } + ] result : [ [0] : { configurable : true @@ -188,19 +195,6 @@ Running test: testSetVariableValueMain } writable : true } - [1] : { - configurable : true - enumerable : false - isOwn : true - name : __proto__ - value : { - className : Object - description : Object - objectId : <objectId> - type : object - } - writable : true - } ] } } diff --git a/deps/v8/test/inspector/debugger/wasm-breakpoint-reset-on-debugger-restart.js b/deps/v8/test/inspector/debugger/wasm-breakpoint-reset-on-debugger-restart.js index 273a9be450..1697a3f676 100644 --- a/deps/v8/test/inspector/debugger/wasm-breakpoint-reset-on-debugger-restart.js +++ b/deps/v8/test/inspector/debugger/wasm-breakpoint-reset-on-debugger-restart.js @@ -20,6 +20,7 @@ Protocol.Debugger.onPaused(async msg => { InspectorTest.runAsyncTestSuite([ async function test() { + await Protocol.Runtime.enable(); await Protocol.Debugger.enable(); InspectorTest.log('Instantiating.'); // Spawn asynchronously: diff --git a/deps/v8/test/inspector/debugger/wasm-conditional-breakpoints.js b/deps/v8/test/inspector/debugger/wasm-conditional-breakpoints.js index 6099a8a70f..0b000198ea 100644 --- a/deps/v8/test/inspector/debugger/wasm-conditional-breakpoints.js +++ b/deps/v8/test/inspector/debugger/wasm-conditional-breakpoints.js @@ -50,6 +50,7 @@ Protocol.Debugger.onPaused(async msg => { InspectorTest.runAsyncTestSuite([ async function test() { + await Protocol.Runtime.enable(); await Protocol.Debugger.enable(); InspectorTest.log('Instantiating.'); // Spawn asynchronously: diff --git a/deps/v8/test/inspector/debugger/wasm-debug-command.js b/deps/v8/test/inspector/debugger/wasm-debug-command.js index 8bea6d5e53..372b12e4f9 100644 --- a/deps/v8/test/inspector/debugger/wasm-debug-command.js +++ b/deps/v8/test/inspector/debugger/wasm-debug-command.js @@ -47,6 +47,7 @@ InspectorTest.runAsyncTestSuite([ async function test() { breakCount = 0; breakpointId = 0; + await Protocol.Runtime.enable(); await Protocol.Debugger.enable(); WasmInspectorTest.instantiate(module_bytes); await waitForWasmScript(); diff --git a/deps/v8/test/inspector/debugger/wasm-evaluate-on-call-frame-expected.txt b/deps/v8/test/inspector/debugger/wasm-evaluate-on-call-frame-expected.txt index 04bc977dda..2605342e0c 100644 --- a/deps/v8/test/inspector/debugger/wasm-evaluate-on-call-frame-expected.txt +++ b/deps/v8/test/inspector/debugger/wasm-evaluate-on-call-frame-expected.txt @@ -5,7 +5,7 @@ Compile module. Set breakpoint in main. Instantiate module. Call main. -Debugger paused in main. +Debugger paused in $main. > instance = Instance > module = Module @@ -14,7 +14,7 @@ Compile module. Set breakpoint in main. Instantiate module. Call main. -Debugger paused in main. +Debugger paused in $main. > globals = Globals > typeof globals = "object" > Object.keys(globals) = Array(2) @@ -27,7 +27,7 @@ Debugger paused in main. > globals["$global3"] = i64 {2n} > $global3 = i64 {2n} Stepping twice in main. -Debugger paused in main. +Debugger paused in $main. > globals[0] = i32 {0} > globals[1] = i32 {1} > globals[2] = i64 {2n} @@ -51,29 +51,29 @@ Compile module. Set breakpoint in main. Instantiate module. Call main. -Debugger paused in main. +Debugger paused in $main. > functions = Functions > typeof functions = "object" > Object.keys(functions) = Array(4) -> functions[0] = function 0() { [native code] } -> functions[1] = function 1() { [native code] } -> functions[2] = function 2() { [native code] } -> functions[3] = function 3() { [native code] } -> functions[4] = function 4() { [native code] } -> functions["$foo.bar"] = function 0() { [native code] } -> functions["$main"] = function 1() { [native code] } -> $main = function 1() { [native code] } -> functions["$func2"] = function 2() { [native code] } -> $func2 = function 2() { [native code] } -> functions["$func4"] = function 4() { [native code] } -> $func4 = function 4() { [native code] } +> functions[0] = function $foo.bar() { [native code] } +> functions[1] = function $main() { [native code] } +> functions[2] = function $func2() { [native code] } +> functions[3] = function $func2() { [native code] } +> functions[4] = function $func4() { [native code] } +> functions["$foo.bar"] = function $foo.bar() { [native code] } +> functions["$main"] = function $main() { [native code] } +> $main = function $main() { [native code] } +> functions["$func2"] = function $func2() { [native code] } +> $func2 = function $func2() { [native code] } +> functions["$func4"] = function $func4() { [native code] } +> $func4 = function $func4() { [native code] } Running test: testLocals Compile module. Set breakpoint in main. Instantiate module. Call main. -Debugger paused in main. +Debugger paused in $main. > locals = Locals > typeof locals = "object" > Object.keys(locals) = Array(2) @@ -85,7 +85,7 @@ Debugger paused in main. > locals["$var2"] = i32 {0} > $var2 = i32 {0} Stepping twice in main. -Debugger paused in main. +Debugger paused in $main. > locals[0] = i32 {3} > locals[1] = i32 {6} > locals[2] = i32 {42} @@ -99,7 +99,7 @@ Compile module. Set breakpoint in main. Instantiate module. Call main. -Debugger paused in main. +Debugger paused in $main. > memories = Memories > typeof memories = "object" > Object.keys(memories) = Array(1) @@ -112,7 +112,7 @@ Compile module. Set breakpoint in main. Instantiate module. Call main. -Debugger paused in main. +Debugger paused in $main. > tables = Tables > typeof tables = "object" > Object.keys(tables) = Array(1) @@ -125,12 +125,12 @@ Compile module. Set breakpoint in main. Instantiate module. Call main. -Debugger paused in main. +Debugger paused in $main. > stack = Stack > typeof stack = "object" > Object.keys(stack) = Array(0) Stepping twice in main. -Debugger paused in main. +Debugger paused in $main. > stack = Stack > Object.keys(stack) = Array(2) > stack[0] = i32 {5} diff --git a/deps/v8/test/inspector/debugger/wasm-gc-breakpoints-expected.txt b/deps/v8/test/inspector/debugger/wasm-gc-breakpoints-expected.txt index 037057b13b..68f2801b6e 100644 --- a/deps/v8/test/inspector/debugger/wasm-gc-breakpoints-expected.txt +++ b/deps/v8/test/inspector/debugger/wasm-gc-breakpoints-expected.txt @@ -8,7 +8,7 @@ Calling main() Paused: Script wasm://wasm/22e4830a byte offset 107: Wasm opcode 0x21 (kExprLocalSet) Scope: -at main (0:107): +at $main (0:107): - scope (wasm-expression-stack): 0: Array ((ref $ArrC)) object details: @@ -25,7 +25,7 @@ at main (0:107): instance: exports: "main" (Function) module: Module functions: "$main": (Function) - globals: "$global0": function 0() { [native code] } ((ref null $type3)) + globals: "$global0": function $main() { [native code] } ((ref null $type3)) at (anonymous) (0:17): -- skipped exports.main returned! diff --git a/deps/v8/test/inspector/debugger/wasm-gc-breakpoints.js b/deps/v8/test/inspector/debugger/wasm-gc-breakpoints.js index 2c4c774411..1a50a09204 100644 --- a/deps/v8/test/inspector/debugger/wasm-gc-breakpoints.js +++ b/deps/v8/test/inspector/debugger/wasm-gc-breakpoints.js @@ -196,6 +196,7 @@ Protocol.Debugger.onPaused(async msg => { InspectorTest.runAsyncTestSuite([ async function test() { + await Protocol.Runtime.enable(); await Protocol.Debugger.enable(); InspectorTest.log('Instantiating.'); // Spawn asynchronously: diff --git a/deps/v8/test/inspector/debugger/wasm-gc-in-debug-break-expected.txt b/deps/v8/test/inspector/debugger/wasm-gc-in-debug-break-expected.txt index a9e1c76813..2d1669e3f6 100644 --- a/deps/v8/test/inspector/debugger/wasm-gc-in-debug-break-expected.txt +++ b/deps/v8/test/inspector/debugger/wasm-gc-in-debug-break-expected.txt @@ -6,5 +6,7 @@ GC triggered Debugger.resume Hello World (v8://test/instantiate:11:36) at bar (v8://test/instantiate:11:36) + at $wasm_A (wasm://wasm/38e28046:1:54) + at test (test.js:4:20) + at (anonymous function) (:1:1) exports.main returned! - diff --git a/deps/v8/test/inspector/debugger/wasm-gc-in-debug-break.js b/deps/v8/test/inspector/debugger/wasm-gc-in-debug-break.js index f6ad6b6bfa..90680a7b4a 100644 --- a/deps/v8/test/inspector/debugger/wasm-gc-in-debug-break.js +++ b/deps/v8/test/inspector/debugger/wasm-gc-in-debug-break.js @@ -36,11 +36,11 @@ contextGroup.addScript(` function test() { debug(instance.exports.main); instance.exports.main({val: "Hello World"}); -} -//# sourceURL=test.js`); +}`, 0, 0, 'test.js'); InspectorTest.runAsyncTestSuite([async function test() { utils.setLogConsoleApiMessageCalls(true); + await Protocol.Runtime.enable(); await Protocol.Debugger.enable(); await WasmInspectorTest.instantiate( module_bytes, 'instance', '{foo: {bar: (x) => console.log(x.val)}}'); diff --git a/deps/v8/test/inspector/debugger/wasm-get-breakable-locations-byte-offsets.js b/deps/v8/test/inspector/debugger/wasm-get-breakable-locations-byte-offsets.js index beb6ca9fa9..f6ae1da4b2 100644 --- a/deps/v8/test/inspector/debugger/wasm-get-breakable-locations-byte-offsets.js +++ b/deps/v8/test/inspector/debugger/wasm-get-breakable-locations-byte-offsets.js @@ -32,6 +32,7 @@ builder.addFunction('main', kSig_v_i) var module_bytes = builder.toArray(); +Protocol.Runtime.enable(); Protocol.Debugger.enable(); Protocol.Debugger.onScriptParsed(handleScriptParsed); diff --git a/deps/v8/test/inspector/debugger/wasm-imports.js b/deps/v8/test/inspector/debugger/wasm-imports.js index 822064921f..b1b51eeca0 100644 --- a/deps/v8/test/inspector/debugger/wasm-imports.js +++ b/deps/v8/test/inspector/debugger/wasm-imports.js @@ -39,7 +39,8 @@ function instantiate(bytes, imp) { session.setupScriptMap(); // Main promise chain: -Protocol.Debugger.enable() +Protocol.Runtime.enable() + .then(() => Protocol.Debugger.enable()) .then(() => InspectorTest.log('Installing code and global variable.')) .then( () => WasmInspectorTest.evalWithUrl( diff --git a/deps/v8/test/inspector/debugger/wasm-inspect-many-registers.js b/deps/v8/test/inspector/debugger/wasm-inspect-many-registers.js index d300b8bb9a..51c09aa193 100644 --- a/deps/v8/test/inspector/debugger/wasm-inspect-many-registers.js +++ b/deps/v8/test/inspector/debugger/wasm-inspect-many-registers.js @@ -98,6 +98,7 @@ async function testConfig(config) { InspectorTest.runAsyncTestSuite([ async function test() { + await Protocol.Runtime.enable(); await Protocol.Debugger.enable(); for (let config in configs) { await testConfig(config); diff --git a/deps/v8/test/inspector/debugger/wasm-instrumentation-breakpoint.js b/deps/v8/test/inspector/debugger/wasm-instrumentation-breakpoint.js index 9f1d897daa..903613e1f0 100644 --- a/deps/v8/test/inspector/debugger/wasm-instrumentation-breakpoint.js +++ b/deps/v8/test/inspector/debugger/wasm-instrumentation-breakpoint.js @@ -24,6 +24,7 @@ InspectorTest.runAsyncTestSuite([ const start_fn = builder.addFunction('start', kSig_v_v).addBody([kExprNop]); builder.addStart(start_fn.index); + await Protocol.Runtime.enable(); await Protocol.Debugger.enable(); InspectorTest.log('Setting instrumentation breakpoint'); InspectorTest.logMessage( @@ -40,6 +41,7 @@ InspectorTest.runAsyncTestSuite([ 'new WebAssembly.Instance(module)', 'instantiate2'); InspectorTest.log('Done.'); await Protocol.Debugger.disable(); + await Protocol.Runtime.disable(); }, // If we compile twice, we get two instrumentation breakpoints (which might or @@ -49,6 +51,7 @@ InspectorTest.runAsyncTestSuite([ const start_fn = builder.addFunction('start', kSig_v_v).addBody([kExprNop]); builder.addStart(start_fn.index); + await Protocol.Runtime.enable(); await Protocol.Debugger.enable(); InspectorTest.log('Setting instrumentation breakpoint'); InspectorTest.logMessage( @@ -61,6 +64,7 @@ InspectorTest.runAsyncTestSuite([ await WasmInspectorTest.instantiate(builder.toArray()); InspectorTest.log('Done.'); await Protocol.Debugger.disable(); + await Protocol.Runtime.disable(); }, async function testBreakInExportedFunction() { @@ -68,6 +72,7 @@ InspectorTest.runAsyncTestSuite([ const func = builder.addFunction('func', kSig_v_v).addBody([kExprNop]).exportFunc(); + await Protocol.Runtime.enable(); await Protocol.Debugger.enable(); InspectorTest.log('Setting instrumentation breakpoint'); InspectorTest.logMessage( @@ -84,6 +89,7 @@ InspectorTest.runAsyncTestSuite([ await WasmInspectorTest.evalWithUrl('instance.exports.func()', 'call_func'); InspectorTest.log('Done.'); await Protocol.Debugger.disable(); + await Protocol.Runtime.disable(); }, async function testBreakOnlyWithSourceMap() { @@ -94,6 +100,7 @@ InspectorTest.runAsyncTestSuite([ builder.addCustomSection('sourceMappingURL', [3, 97, 98, 99]); const bytes_with_source_map = builder.toArray(); + await Protocol.Runtime.enable(); await Protocol.Debugger.enable(); InspectorTest.log( 'Setting instrumentation breakpoint for source maps only'); @@ -114,6 +121,7 @@ InspectorTest.runAsyncTestSuite([ await WasmInspectorTest.evalWithUrl('instance.exports.func()', 'call_func'); InspectorTest.log('Done.'); await Protocol.Debugger.disable(); + await Protocol.Runtime.disable(); }, ]); diff --git a/deps/v8/test/inspector/debugger/wasm-remove-breakpoint.js b/deps/v8/test/inspector/debugger/wasm-remove-breakpoint.js index b17f03c835..41eb80e6c4 100644 --- a/deps/v8/test/inspector/debugger/wasm-remove-breakpoint.js +++ b/deps/v8/test/inspector/debugger/wasm-remove-breakpoint.js @@ -43,11 +43,11 @@ contextGroup.addScript(` function test() { instance.exports.main(1); instance.exports.main(1); -} -//# sourceURL=test.js`); +}`, 0, 0, 'test.js'); InspectorTest.runAsyncTestSuite([ async function Test() { + await Protocol.Runtime.enable(); await Protocol.Debugger.enable(); InspectorTest.log('Calling instantiate function.'); WasmInspectorTest.instantiate(module_bytes); diff --git a/deps/v8/test/inspector/debugger/wasm-scope-info-expected.txt b/deps/v8/test/inspector/debugger/wasm-scope-info-expected.txt index 7778b57f41..b55d88d0f7 100644 --- a/deps/v8/test/inspector/debugger/wasm-scope-info-expected.txt +++ b/deps/v8/test/inspector/debugger/wasm-scope-info-expected.txt @@ -13,7 +13,7 @@ Setting breakpoint on line 2 (first instruction) of third function Paused: Script wasm://wasm/e33badc2 byte offset 169: Wasm opcode 0x20 (kExprLocalGet) Scope: -at C (interpreted) (0:169): +at $C (interpreted) (0:169): - scope (wasm-expression-stack): stack: - scope (local): @@ -27,7 +27,7 @@ at C (interpreted) (0:169): globals: "$exported_global": 0 (i32) memories: "$exported_memory": (Memory) tables: "$exported_table": (Table) -at B (liftoff) (0:158): +at $B (liftoff) (0:158): - scope (wasm-expression-stack): stack: "0": 42 (i32), "1": 3 (i32) - scope (local): @@ -44,7 +44,7 @@ at B (liftoff) (0:158): globals: "$exported_global": 0 (i32) memories: "$exported_memory": (Memory) tables: "$exported_table": (Table) -at A (liftoff) (0:128): +at $A (liftoff) (0:128): - scope (wasm-expression-stack): stack: - scope (local): @@ -63,7 +63,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/e33badc2 byte offset 171: Wasm opcode 0x24 (kExprGlobalSet) Scope: -at C (interpreted) (0:171): +at $C (interpreted) (0:171): - scope (wasm-expression-stack): stack: "0": 42 (i32) - scope (local): @@ -77,7 +77,7 @@ at C (interpreted) (0:171): globals: "$exported_global": 0 (i32) memories: "$exported_memory": (Memory) tables: "$exported_table": (Table) -at B (liftoff) (0:158): +at $B (liftoff) (0:158): - scope (wasm-expression-stack): stack: "0": 42 (i32), "1": 3 (i32) - scope (local): @@ -94,7 +94,7 @@ at B (liftoff) (0:158): globals: "$exported_global": 0 (i32) memories: "$exported_memory": (Memory) tables: "$exported_table": (Table) -at A (liftoff) (0:128): +at $A (liftoff) (0:128): - scope (wasm-expression-stack): stack: - scope (local): @@ -113,7 +113,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/e33badc2 byte offset 173: Wasm opcode 0x41 (kExprI32Const) Scope: -at C (interpreted) (0:173): +at $C (interpreted) (0:173): - scope (wasm-expression-stack): stack: - scope (local): @@ -127,7 +127,7 @@ at C (interpreted) (0:173): globals: "$exported_global": 42 (i32) memories: "$exported_memory": (Memory) tables: "$exported_table": (Table) -at B (liftoff) (0:158): +at $B (liftoff) (0:158): - scope (wasm-expression-stack): stack: "0": 42 (i32), "1": 3 (i32) - scope (local): @@ -144,7 +144,7 @@ at B (liftoff) (0:158): globals: "$exported_global": 42 (i32) memories: "$exported_memory": (Memory) tables: "$exported_table": (Table) -at A (liftoff) (0:128): +at $A (liftoff) (0:128): - scope (wasm-expression-stack): stack: - scope (local): @@ -163,7 +163,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/e33badc2 byte offset 175: Wasm opcode 0x21 (kExprLocalSet) Scope: -at C (interpreted) (0:175): +at $C (interpreted) (0:175): - scope (wasm-expression-stack): stack: "0": 47 (i32) - scope (local): @@ -177,7 +177,7 @@ at C (interpreted) (0:175): globals: "$exported_global": 42 (i32) memories: "$exported_memory": (Memory) tables: "$exported_table": (Table) -at B (liftoff) (0:158): +at $B (liftoff) (0:158): - scope (wasm-expression-stack): stack: "0": 42 (i32), "1": 3 (i32) - scope (local): @@ -194,7 +194,7 @@ at B (liftoff) (0:158): globals: "$exported_global": 42 (i32) memories: "$exported_memory": (Memory) tables: "$exported_table": (Table) -at A (liftoff) (0:128): +at $A (liftoff) (0:128): - scope (wasm-expression-stack): stack: - scope (local): @@ -213,7 +213,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/e33badc2 byte offset 177: Wasm opcode 0x0b (kExprEnd) Scope: -at C (interpreted) (0:177): +at $C (interpreted) (0:177): - scope (wasm-expression-stack): stack: - scope (local): @@ -227,7 +227,7 @@ at C (interpreted) (0:177): globals: "$exported_global": 42 (i32) memories: "$exported_memory": (Memory) tables: "$exported_table": (Table) -at B (liftoff) (0:158): +at $B (liftoff) (0:158): - scope (wasm-expression-stack): stack: "0": 42 (i32), "1": 3 (i32) - scope (local): @@ -244,7 +244,7 @@ at B (liftoff) (0:158): globals: "$exported_global": 42 (i32) memories: "$exported_memory": (Memory) tables: "$exported_table": (Table) -at A (liftoff) (0:128): +at $A (liftoff) (0:128): - scope (wasm-expression-stack): stack: - scope (local): @@ -263,7 +263,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/e33badc2 byte offset 160: Wasm opcode 0x1a (kExprDrop) Scope: -at B (liftoff) (0:160): +at $B (liftoff) (0:160): - scope (wasm-expression-stack): stack: "0": 42 (i32), "1": 3 (i32) - scope (local): @@ -280,7 +280,7 @@ at B (liftoff) (0:160): globals: "$exported_global": 42 (i32) memories: "$exported_memory": (Memory) tables: "$exported_table": (Table) -at A (liftoff) (0:128): +at $A (liftoff) (0:128): - scope (wasm-expression-stack): stack: - scope (local): @@ -299,7 +299,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/e33badc2 byte offset 161: Wasm opcode 0x1a (kExprDrop) Scope: -at B (liftoff) (0:161): +at $B (liftoff) (0:161): - scope (wasm-expression-stack): stack: "0": 42 (i32) - scope (local): @@ -316,7 +316,7 @@ at B (liftoff) (0:161): globals: "$exported_global": 42 (i32) memories: "$exported_memory": (Memory) tables: "$exported_table": (Table) -at A (liftoff) (0:128): +at $A (liftoff) (0:128): - scope (wasm-expression-stack): stack: - scope (local): @@ -335,7 +335,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/e33badc2 byte offset 162: Wasm opcode 0x0b (kExprEnd) Scope: -at B (liftoff) (0:162): +at $B (liftoff) (0:162): - scope (wasm-expression-stack): stack: - scope (local): @@ -352,7 +352,7 @@ at B (liftoff) (0:162): globals: "$exported_global": 42 (i32) memories: "$exported_memory": (Memory) tables: "$exported_table": (Table) -at A (liftoff) (0:128): +at $A (liftoff) (0:128): - scope (wasm-expression-stack): stack: - scope (local): @@ -371,7 +371,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/e33badc2 byte offset 130: Wasm opcode 0x0b (kExprEnd) Scope: -at A (liftoff) (0:130): +at $A (liftoff) (0:130): - scope (wasm-expression-stack): stack: - scope (local): @@ -388,10 +388,10 @@ at (anonymous) (0:17): -- skipped globals Paused: -instance.exports.main(42) +instance.exports.main(42)# Scope: -at (anonymous) (1:31): +at (anonymous) (0:25): - scope (global): -- skipped globals diff --git a/deps/v8/test/inspector/debugger/wasm-scope-info.js b/deps/v8/test/inspector/debugger/wasm-scope-info.js index 04481a33b8..4b920d2b89 100644 --- a/deps/v8/test/inspector/debugger/wasm-scope-info.js +++ b/deps/v8/test/inspector/debugger/wasm-scope-info.js @@ -2,15 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Flags: --experimental-wasm-type-reflection --experimental-wasm-simd -// SIMD in Liftoff only works with these cpu features, force them on. -// Flags: --enable-sse3 --enable-ssse3 --enable-sse4-1 +// Flags: --experimental-wasm-type-reflection utils.load('test/inspector/wasm-inspector-test.js'); let {session, contextGroup, Protocol} = InspectorTest.start( 'Test retrieving scope information from compiled Liftoff frames'); session.setupScriptMap(); +Protocol.Runtime.enable(); Protocol.Debugger.enable(); Protocol.Debugger.onPaused(printPauseLocationsAndContinue); diff --git a/deps/v8/test/inspector/debugger/wasm-set-breakpoint-breaks-on-first-breakable-location.js b/deps/v8/test/inspector/debugger/wasm-set-breakpoint-breaks-on-first-breakable-location.js index ae59334b93..88cc3afb08 100644 --- a/deps/v8/test/inspector/debugger/wasm-set-breakpoint-breaks-on-first-breakable-location.js +++ b/deps/v8/test/inspector/debugger/wasm-set-breakpoint-breaks-on-first-breakable-location.js @@ -30,6 +30,7 @@ builder.addFunction('main', kSig_v_i) // clang-format on var module_bytes = builder.toArray(); +Protocol.Runtime.enable(); Protocol.Debugger.enable(); InspectorTest.runAsyncTestSuite([ diff --git a/deps/v8/test/inspector/debugger/wasm-set-breakpoint-expected.txt b/deps/v8/test/inspector/debugger/wasm-set-breakpoint-expected.txt index 49836f93ab..98a0c07b17 100644 --- a/deps/v8/test/inspector/debugger/wasm-set-breakpoint-expected.txt +++ b/deps/v8/test/inspector/debugger/wasm-set-breakpoint-expected.txt @@ -8,7 +8,7 @@ Calling main(4) Paused: Script wasm://wasm/0c10a5fe byte offset 38: Wasm opcode 0x01 (kExprNop) Scope: -at wasm_A (0:38): +at $wasm_A (0:38): - scope (wasm-expression-stack): stack: - scope (local): @@ -16,7 +16,7 @@ at wasm_A (0:38): instance: exports: "main" (Function) module: Module functions: "$wasm_A": (Function), "$wasm_B": (Function) -at wasm_B (0:56): +at $wasm_B (0:56): - scope (wasm-expression-stack): stack: - scope (local): @@ -39,7 +39,7 @@ Setting breakpoint at offset 47 on script v8://test/runWasm Paused: Script wasm://wasm/0c10a5fe byte offset 39: Wasm opcode 0x01 (kExprNop) Scope: -at wasm_A (0:39): +at $wasm_A (0:39): - scope (wasm-expression-stack): stack: - scope (local): @@ -47,7 +47,7 @@ at wasm_A (0:39): instance: exports: "main" (Function) module: Module functions: "$wasm_A": (Function), "$wasm_B": (Function) -at wasm_B (0:56): +at $wasm_B (0:56): - scope (wasm-expression-stack): stack: - scope (local): @@ -61,7 +61,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/0c10a5fe byte offset 45: Wasm opcode 0x20 (kExprLocalGet) Scope: -at wasm_B (0:45): +at $wasm_B (0:45): - scope (wasm-expression-stack): stack: - scope (local): @@ -75,7 +75,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/0c10a5fe byte offset 47: Wasm opcode 0x04 (kExprIf) Scope: -at wasm_B (0:47): +at $wasm_B (0:47): - scope (wasm-expression-stack): stack: "0": 3 (i32) - scope (local): @@ -89,7 +89,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/0c10a5fe byte offset 49: Wasm opcode 0x20 (kExprLocalGet) Scope: -at wasm_B (0:49): +at $wasm_B (0:49): - scope (wasm-expression-stack): stack: - scope (local): @@ -103,7 +103,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/0c10a5fe byte offset 51: Wasm opcode 0x41 (kExprI32Const) Scope: -at wasm_B (0:51): +at $wasm_B (0:51): - scope (wasm-expression-stack): stack: "0": 3 (i32) - scope (local): @@ -117,7 +117,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/0c10a5fe byte offset 53: Wasm opcode 0x6b (kExprI32Sub) Scope: -at wasm_B (0:53): +at $wasm_B (0:53): - scope (wasm-expression-stack): stack: "0": 3 (i32), "1": 1 (i32) - scope (local): @@ -131,7 +131,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/0c10a5fe byte offset 54: Wasm opcode 0x21 (kExprLocalSet) Scope: -at wasm_B (0:54): +at $wasm_B (0:54): - scope (wasm-expression-stack): stack: "0": 2 (i32) - scope (local): @@ -145,7 +145,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/0c10a5fe byte offset 38: Wasm opcode 0x01 (kExprNop) Scope: -at wasm_A (0:38): +at $wasm_A (0:38): - scope (wasm-expression-stack): stack: - scope (local): @@ -153,7 +153,7 @@ at wasm_A (0:38): instance: exports: "main" (Function) module: Module functions: "$wasm_A": (Function), "$wasm_B": (Function) -at wasm_B (0:56): +at $wasm_B (0:56): - scope (wasm-expression-stack): stack: - scope (local): @@ -167,7 +167,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/0c10a5fe byte offset 39: Wasm opcode 0x01 (kExprNop) Scope: -at wasm_A (0:39): +at $wasm_A (0:39): - scope (wasm-expression-stack): stack: - scope (local): @@ -175,7 +175,7 @@ at wasm_A (0:39): instance: exports: "main" (Function) module: Module functions: "$wasm_A": (Function), "$wasm_B": (Function) -at wasm_B (0:56): +at $wasm_B (0:56): - scope (wasm-expression-stack): stack: - scope (local): @@ -189,7 +189,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/0c10a5fe byte offset 45: Wasm opcode 0x20 (kExprLocalGet) Scope: -at wasm_B (0:45): +at $wasm_B (0:45): - scope (wasm-expression-stack): stack: - scope (local): @@ -203,7 +203,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/0c10a5fe byte offset 47: Wasm opcode 0x04 (kExprIf) Scope: -at wasm_B (0:47): +at $wasm_B (0:47): - scope (wasm-expression-stack): stack: "0": 2 (i32) - scope (local): @@ -217,7 +217,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/0c10a5fe byte offset 49: Wasm opcode 0x20 (kExprLocalGet) Scope: -at wasm_B (0:49): +at $wasm_B (0:49): - scope (wasm-expression-stack): stack: - scope (local): @@ -231,7 +231,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/0c10a5fe byte offset 51: Wasm opcode 0x41 (kExprI32Const) Scope: -at wasm_B (0:51): +at $wasm_B (0:51): - scope (wasm-expression-stack): stack: "0": 2 (i32) - scope (local): @@ -245,7 +245,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/0c10a5fe byte offset 53: Wasm opcode 0x6b (kExprI32Sub) Scope: -at wasm_B (0:53): +at $wasm_B (0:53): - scope (wasm-expression-stack): stack: "0": 2 (i32), "1": 1 (i32) - scope (local): @@ -259,7 +259,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/0c10a5fe byte offset 54: Wasm opcode 0x21 (kExprLocalSet) Scope: -at wasm_B (0:54): +at $wasm_B (0:54): - scope (wasm-expression-stack): stack: "0": 1 (i32) - scope (local): @@ -273,7 +273,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/0c10a5fe byte offset 38: Wasm opcode 0x01 (kExprNop) Scope: -at wasm_A (0:38): +at $wasm_A (0:38): - scope (wasm-expression-stack): stack: - scope (local): @@ -281,7 +281,7 @@ at wasm_A (0:38): instance: exports: "main" (Function) module: Module functions: "$wasm_A": (Function), "$wasm_B": (Function) -at wasm_B (0:56): +at $wasm_B (0:56): - scope (wasm-expression-stack): stack: - scope (local): @@ -295,7 +295,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/0c10a5fe byte offset 39: Wasm opcode 0x01 (kExprNop) Scope: -at wasm_A (0:39): +at $wasm_A (0:39): - scope (wasm-expression-stack): stack: - scope (local): @@ -303,7 +303,7 @@ at wasm_A (0:39): instance: exports: "main" (Function) module: Module functions: "$wasm_A": (Function), "$wasm_B": (Function) -at wasm_B (0:56): +at $wasm_B (0:56): - scope (wasm-expression-stack): stack: - scope (local): @@ -317,7 +317,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/0c10a5fe byte offset 45: Wasm opcode 0x20 (kExprLocalGet) Scope: -at wasm_B (0:45): +at $wasm_B (0:45): - scope (wasm-expression-stack): stack: - scope (local): @@ -331,7 +331,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/0c10a5fe byte offset 47: Wasm opcode 0x04 (kExprIf) Scope: -at wasm_B (0:47): +at $wasm_B (0:47): - scope (wasm-expression-stack): stack: "0": 1 (i32) - scope (local): @@ -345,7 +345,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/0c10a5fe byte offset 49: Wasm opcode 0x20 (kExprLocalGet) Scope: -at wasm_B (0:49): +at $wasm_B (0:49): - scope (wasm-expression-stack): stack: - scope (local): @@ -359,7 +359,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/0c10a5fe byte offset 51: Wasm opcode 0x41 (kExprI32Const) Scope: -at wasm_B (0:51): +at $wasm_B (0:51): - scope (wasm-expression-stack): stack: "0": 1 (i32) - scope (local): @@ -373,7 +373,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/0c10a5fe byte offset 53: Wasm opcode 0x6b (kExprI32Sub) Scope: -at wasm_B (0:53): +at $wasm_B (0:53): - scope (wasm-expression-stack): stack: "0": 1 (i32), "1": 1 (i32) - scope (local): @@ -387,7 +387,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/0c10a5fe byte offset 54: Wasm opcode 0x21 (kExprLocalSet) Scope: -at wasm_B (0:54): +at $wasm_B (0:54): - scope (wasm-expression-stack): stack: "0": 0 (i32) - scope (local): @@ -401,7 +401,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/0c10a5fe byte offset 38: Wasm opcode 0x01 (kExprNop) Scope: -at wasm_A (0:38): +at $wasm_A (0:38): - scope (wasm-expression-stack): stack: - scope (local): @@ -409,7 +409,7 @@ at wasm_A (0:38): instance: exports: "main" (Function) module: Module functions: "$wasm_A": (Function), "$wasm_B": (Function) -at wasm_B (0:56): +at $wasm_B (0:56): - scope (wasm-expression-stack): stack: - scope (local): @@ -423,7 +423,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/0c10a5fe byte offset 39: Wasm opcode 0x01 (kExprNop) Scope: -at wasm_A (0:39): +at $wasm_A (0:39): - scope (wasm-expression-stack): stack: - scope (local): @@ -431,7 +431,7 @@ at wasm_A (0:39): instance: exports: "main" (Function) module: Module functions: "$wasm_A": (Function), "$wasm_B": (Function) -at wasm_B (0:56): +at $wasm_B (0:56): - scope (wasm-expression-stack): stack: - scope (local): @@ -445,7 +445,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/0c10a5fe byte offset 45: Wasm opcode 0x20 (kExprLocalGet) Scope: -at wasm_B (0:45): +at $wasm_B (0:45): - scope (wasm-expression-stack): stack: - scope (local): @@ -459,7 +459,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/0c10a5fe byte offset 47: Wasm opcode 0x04 (kExprIf) Scope: -at wasm_B (0:47): +at $wasm_B (0:47): - scope (wasm-expression-stack): stack: "0": 0 (i32) - scope (local): @@ -473,7 +473,7 @@ at (anonymous) (0:17): Paused: Script wasm://wasm/0c10a5fe byte offset 61: Wasm opcode 0x0b (kExprEnd) Scope: -at wasm_B (0:61): +at $wasm_B (0:61): - scope (wasm-expression-stack): stack: - scope (local): diff --git a/deps/v8/test/inspector/debugger/wasm-set-breakpoint.js b/deps/v8/test/inspector/debugger/wasm-set-breakpoint.js index 1b28959f7a..a5bc8b333e 100644 --- a/deps/v8/test/inspector/debugger/wasm-set-breakpoint.js +++ b/deps/v8/test/inspector/debugger/wasm-set-breakpoint.js @@ -86,6 +86,7 @@ Protocol.Debugger.onPaused(async msg => { InspectorTest.runAsyncTestSuite([ async function test() { + await Protocol.Runtime.enable(); await Protocol.Debugger.enable(); InspectorTest.log('Instantiating.'); // Spawn asynchronously: diff --git a/deps/v8/test/inspector/debugger/wasm-side-effect-free-debug-evaluate-expected.txt b/deps/v8/test/inspector/debugger/wasm-side-effect-free-debug-evaluate-expected.txt new file mode 100644 index 0000000000..e538b7584b --- /dev/null +++ b/deps/v8/test/inspector/debugger/wasm-side-effect-free-debug-evaluate-expected.txt @@ -0,0 +1,33 @@ +Test side-effect-free evaluation of WebAssembly APIs + +Running test: testWebAssemblyGlobal +someGlobalGlobal.value: ok +someGlobalGlobal.valueOf(): ok +new WebAssembly.Global({value: "f32", mutable: true}, 3.14): ok +new WebAssembly.Global({value: "f32", mutable: false}, 3.14): ok +new WebAssembly.Global({value: "f32", mutable: true}, 3.14).value: ok +new WebAssembly.Global({value: "f32", mutable: true}, 3.14).valueOf(): ok + +Running test: testWebAssemblyInstance +someGlobalInstance.exports: ok +new WebAssembly.Instance(someGlobalModule): ok +new WebAssembly.Instance(someGlobalModule).exports: ok + +Running test: testWebAssemblyMemory +someGlobalMemory.buffer: ok +new WebAssembly.Memory({initial: 1}): ok +new WebAssembly.Memory({initial: 1}).buffer: ok + +Running test: testWebAssemblyModule +WebAssembly.Module.customSections(someGlobalModule, ".debug_info"): ok +WebAssembly.Module.exports(someGlobalModule): ok +WebAssembly.Module.imports(someGlobalModule): ok +new WebAssembly.Module(EMPTY_WASM_MODULE_BYTES): ok +WebAssembly.Module.customSections(new WebAssembly.Module(EMPTY_WASM_MODULE_BYTES), ".debug_info"): ok +WebAssembly.Module.exports(new WebAssembly.Module(EMPTY_WASM_MODULE_BYTES)): ok +WebAssembly.Module.imports(new WebAssembly.Module(EMPTY_WASM_MODULE_BYTES)): ok + +Running test: testWebAssemblyTable +someGlobalTable.get(0): ok +new WebAssembly.Table({element: "anyfunc", initial: 1}): ok +new WebAssembly.Table({element: "anyfunc", initial: 1}).get(0): ok diff --git a/deps/v8/test/inspector/debugger/wasm-side-effect-free-debug-evaluate.js b/deps/v8/test/inspector/debugger/wasm-side-effect-free-debug-evaluate.js new file mode 100644 index 0000000000..37aca4701c --- /dev/null +++ b/deps/v8/test/inspector/debugger/wasm-side-effect-free-debug-evaluate.js @@ -0,0 +1,72 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +utils.load('test/inspector/wasm-inspector-test.js'); + +let {session, contextGroup, Protocol} = + InspectorTest.start('Test side-effect-free evaluation of WebAssembly APIs'); + +contextGroup.addScript(` +var EMPTY_WASM_MODULE_BYTES = new Uint8Array([0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00]); +var someGlobalGlobal = new WebAssembly.Global({value: "i64"}, 42n); +var someGlobalMemory = new WebAssembly.Memory({initial: 1}); +var someGlobalModule = new WebAssembly.Module(EMPTY_WASM_MODULE_BYTES); +var someGlobalInstance = new WebAssembly.Instance(someGlobalModule); +var someGlobalTable = new WebAssembly.Table({element: 'anyfunc', initial: 1}); +someGlobalTable.set(0, x => x); +`, 0, 0, 'foo.js'); + +async function check(expression) { + const {result:{exceptionDetails}} = await Protocol.Runtime.evaluate({expression, throwOnSideEffect: true}); + InspectorTest.log(`${expression}: ${exceptionDetails ? 'throws' : 'ok'}`); +} + +InspectorTest.runAsyncTestSuite([ + async function testWebAssemblyGlobal() { + await Protocol.Runtime.enable(); + await check('someGlobalGlobal.value'); + await check('someGlobalGlobal.valueOf()'); + await check('new WebAssembly.Global({value: "f32", mutable: true}, 3.14)'); + await check('new WebAssembly.Global({value: "f32", mutable: false}, 3.14)'); + await check('new WebAssembly.Global({value: "f32", mutable: true}, 3.14).value'); + await check('new WebAssembly.Global({value: "f32", mutable: true}, 3.14).valueOf()'); + await Protocol.Runtime.disable(); + }, + + async function testWebAssemblyInstance() { + await Protocol.Runtime.enable(); + await check('someGlobalInstance.exports'); + await check('new WebAssembly.Instance(someGlobalModule)'); + await check('new WebAssembly.Instance(someGlobalModule).exports'); + await Protocol.Runtime.disable(); + }, + + async function testWebAssemblyMemory() { + await Protocol.Runtime.enable(); + await check('someGlobalMemory.buffer'); + await check('new WebAssembly.Memory({initial: 1})'); + await check('new WebAssembly.Memory({initial: 1}).buffer'); + await Protocol.Runtime.disable(); + }, + + async function testWebAssemblyModule() { + await Protocol.Runtime.enable(); + await check('WebAssembly.Module.customSections(someGlobalModule, ".debug_info")'); + await check('WebAssembly.Module.exports(someGlobalModule)'); + await check('WebAssembly.Module.imports(someGlobalModule)'); + await check('new WebAssembly.Module(EMPTY_WASM_MODULE_BYTES)'); + await check('WebAssembly.Module.customSections(new WebAssembly.Module(EMPTY_WASM_MODULE_BYTES), ".debug_info")'); + await check('WebAssembly.Module.exports(new WebAssembly.Module(EMPTY_WASM_MODULE_BYTES))'); + await check('WebAssembly.Module.imports(new WebAssembly.Module(EMPTY_WASM_MODULE_BYTES))'); + await Protocol.Runtime.disable(); + }, + + async function testWebAssemblyTable() { + await Protocol.Runtime.enable(); + await check('someGlobalTable.get(0)'); + await check('new WebAssembly.Table({element: "anyfunc", initial: 1})'); + await check('new WebAssembly.Table({element: "anyfunc", initial: 1}).get(0)'); + await Protocol.Runtime.disable(); + } +]); diff --git a/deps/v8/test/inspector/debugger/wasm-stack-check.js b/deps/v8/test/inspector/debugger/wasm-stack-check.js index cd2384acec..08ee162f8e 100644 --- a/deps/v8/test/inspector/debugger/wasm-stack-check.js +++ b/deps/v8/test/inspector/debugger/wasm-stack-check.js @@ -37,6 +37,7 @@ function instantiate(bytes, imports) { InspectorTest.runAsyncTestSuite([ async function testPauseAndStep() { + await Protocol.Runtime.enable(); await Protocol.Debugger.enable(); InspectorTest.log('Instantiate'); const instantiate_code = `var instance = (${instantiate})(${JSON.stringify(module_bytes)}, {'imports': {'pause': () => { %ScheduleBreak() } }});`; diff --git a/deps/v8/test/inspector/debugger/wasm-stack-expected.txt b/deps/v8/test/inspector/debugger/wasm-stack-expected.txt index 1ff78f3543..ff2955caee 100644 --- a/deps/v8/test/inspector/debugger/wasm-stack-expected.txt +++ b/deps/v8/test/inspector/debugger/wasm-stack-expected.txt @@ -3,8 +3,8 @@ Running testFunction with generated wasm bytes... Paused on 'debugger;' Number of frames: 5 - [0] {"functionName":"call_debugger","function_lineNumber":1,"function_columnNumber":24,"lineNumber":2,"columnNumber":4} - - [1] {"functionName":"call_func","lineNumber":0,"columnNumber":55} - - [2] {"functionName":"main","lineNumber":0,"columnNumber":62} + - [1] {"functionName":"$call_func","lineNumber":0,"columnNumber":55} + - [2] {"functionName":"$main","lineNumber":0,"columnNumber":62} - [3] {"functionName":"testFunction","function_lineNumber":0,"function_columnNumber":21,"lineNumber":14,"columnNumber":19} - [4] {"functionName":"","function_lineNumber":0,"function_columnNumber":0,"lineNumber":0,"columnNumber":0} Getting v8-generated stack trace... diff --git a/deps/v8/test/inspector/debugger/wasm-step-a-lot.js b/deps/v8/test/inspector/debugger/wasm-step-a-lot.js index df0e983d53..e6e57830e0 100644 --- a/deps/v8/test/inspector/debugger/wasm-step-a-lot.js +++ b/deps/v8/test/inspector/debugger/wasm-step-a-lot.js @@ -33,6 +33,7 @@ Protocol.Debugger.onPaused(msg => { InspectorTest.runAsyncTestSuite([ async function test() { + await Protocol.Runtime.enable(); await Protocol.Debugger.enable(); InspectorTest.log('Setting up global instance variable.'); WasmInspectorTest.instantiate(module_bytes); diff --git a/deps/v8/test/inspector/debugger/wasm-step-after-trap-expected.txt b/deps/v8/test/inspector/debugger/wasm-step-after-trap-expected.txt index 45d0d74e8d..2f54b5225e 100644 --- a/deps/v8/test/inspector/debugger/wasm-step-after-trap-expected.txt +++ b/deps/v8/test/inspector/debugger/wasm-step-after-trap-expected.txt @@ -6,7 +6,7 @@ Calling div function. Paused at: --- 0 --- Script wasm://wasm/a9a86c5e byte offset 46: Wasm opcode 0x6d (kExprI32DivS) -scope at div (0:46): +scope at $div (0:46): $a: 1 (i32) $b: 0 (i32) $unused: 4711 (i32) @@ -36,7 +36,7 @@ Paused at: Paused at: --- 0 --- Script wasm://wasm/a9a86c5e byte offset 46: Wasm opcode 0x6d (kExprI32DivS) -scope at div (0:46): +scope at $div (0:46): $a: -2147483648 (i32) $b: -1 (i32) $unused: 4711 (i32) diff --git a/deps/v8/test/inspector/debugger/wasm-step-after-trap.js b/deps/v8/test/inspector/debugger/wasm-step-after-trap.js index fec9555ce8..182b2a16b9 100644 --- a/deps/v8/test/inspector/debugger/wasm-step-after-trap.js +++ b/deps/v8/test/inspector/debugger/wasm-step-after-trap.js @@ -64,6 +64,7 @@ contextGroup.addScript(call_div.toString()); InspectorTest.runAsyncTestSuite([ async function test() { + await Protocol.Runtime.enable(); await Protocol.Debugger.enable(); await Protocol.Debugger.setPauseOnExceptions({state: 'all'}); InspectorTest.log('Instantiating.'); diff --git a/deps/v8/test/inspector/debugger/wasm-step-from-non-breakable-position.js b/deps/v8/test/inspector/debugger/wasm-step-from-non-breakable-position.js index aa4b92b59b..cbb7c5b39f 100644 --- a/deps/v8/test/inspector/debugger/wasm-step-from-non-breakable-position.js +++ b/deps/v8/test/inspector/debugger/wasm-step-from-non-breakable-position.js @@ -26,6 +26,7 @@ InspectorTest.runAsyncTestSuite([ InspectorTest.logProtocolCommandCalls('Debugger.stepInto'); InspectorTest.logProtocolCommandCalls('Debugger.resume'); + await Protocol.Runtime.enable(); await Protocol.Debugger.enable(); InspectorTest.log('Setting up global instance variable.'); WasmInspectorTest.instantiate(module_bytes); diff --git a/deps/v8/test/inspector/debugger/wasm-stepping-in-from-js.js b/deps/v8/test/inspector/debugger/wasm-stepping-in-from-js.js index e445b436e9..7de5aa9c8f 100644 --- a/deps/v8/test/inspector/debugger/wasm-stepping-in-from-js.js +++ b/deps/v8/test/inspector/debugger/wasm-stepping-in-from-js.js @@ -41,11 +41,11 @@ contextGroup.addScript(` function test() { debugger; instance.exports.main(1); -} -//# sourceURL=test.js`); +}`, 0, 0, 'test.js'); InspectorTest.runAsyncTestSuite([ async function test() { + await Protocol.Runtime.enable(); await Protocol.Debugger.enable(); InspectorTest.log('Calling instantiate function.'); WasmInspectorTest.instantiate(module_bytes); diff --git a/deps/v8/test/inspector/debugger/wasm-stepping-no-opcode-merging.js b/deps/v8/test/inspector/debugger/wasm-stepping-no-opcode-merging.js index a89db04cdb..02e04e0fb2 100644 --- a/deps/v8/test/inspector/debugger/wasm-stepping-no-opcode-merging.js +++ b/deps/v8/test/inspector/debugger/wasm-stepping-no-opcode-merging.js @@ -23,6 +23,7 @@ Protocol.Debugger.onPaused(printPauseLocationAndStep); InspectorTest.runAsyncTestSuite([ async function test() { + await Protocol.Runtime.enable(); await Protocol.Debugger.enable(); WasmInspectorTest.instantiate(module_bytes); [, {params: {scriptId: wasm_script_id}}] = await Protocol.Debugger.onceScriptParsed(2); diff --git a/deps/v8/test/inspector/debugger/wasm-stepping-out-from-js.js b/deps/v8/test/inspector/debugger/wasm-stepping-out-from-js.js index a3c837d311..858072e89b 100644 --- a/deps/v8/test/inspector/debugger/wasm-stepping-out-from-js.js +++ b/deps/v8/test/inspector/debugger/wasm-stepping-out-from-js.js @@ -34,6 +34,7 @@ function pauseAlternating() { InspectorTest.runAsyncTestSuite([ async function test() { + await Protocol.Runtime.enable(); await Protocol.Debugger.enable(); InspectorTest.log('Instantiating.'); const instantiate_code = diff --git a/deps/v8/test/inspector/debugger/wasm-stepping-to-js.js b/deps/v8/test/inspector/debugger/wasm-stepping-to-js.js index 2debb024ee..df38437a9c 100644 --- a/deps/v8/test/inspector/debugger/wasm-stepping-to-js.js +++ b/deps/v8/test/inspector/debugger/wasm-stepping-to-js.js @@ -58,11 +58,11 @@ function test() { instance.exports.main(); var x = 1; x++; -} -//# sourceURL=test.js`); +}`, 0, 0, 'test.js'); InspectorTest.runAsyncTestSuite([ async function test() { + await Protocol.Runtime.enable(); await Protocol.Debugger.enable(); InspectorTest.log('Calling instantiate function.'); WasmInspectorTest.instantiate(module_bytes); diff --git a/deps/v8/test/inspector/debugger/wasm-stepping-with-skiplist.js b/deps/v8/test/inspector/debugger/wasm-stepping-with-skiplist.js index 32301dc7bd..30c7f77daf 100644 --- a/deps/v8/test/inspector/debugger/wasm-stepping-with-skiplist.js +++ b/deps/v8/test/inspector/debugger/wasm-stepping-with-skiplist.js @@ -46,6 +46,7 @@ const func_a_end_offset = func_a_start_offset + 2; InspectorTest.runAsyncTestSuite([ async function test() { + await Protocol.Runtime.enable(); await Protocol.Debugger.enable(); InspectorTest.log('Setting up global instance variable'); WasmInspectorTest.instantiate(module_bytes); diff --git a/deps/v8/test/inspector/debugger/wasm-stepping-with-source-map-expected.txt b/deps/v8/test/inspector/debugger/wasm-stepping-with-source-map-expected.txt index f9890d5a3a..ee855d2bf7 100644 --- a/deps/v8/test/inspector/debugger/wasm-stepping-with-source-map-expected.txt +++ b/deps/v8/test/inspector/debugger/wasm-stepping-with-source-map-expected.txt @@ -12,7 +12,7 @@ Setting breakpoint on offset 54 (on the setlocal before the call), url wasm://wa scriptId : <scriptId> } Script wasm://wasm/9b4bf87e byte offset 54: Wasm opcode 0x21 (kExprLocalSet) -at wasm_B (0:54): +at $wasm_B (0:54): - scope (wasm-expression-stack): 0: 3 (i32) - scope (local): @@ -24,7 +24,7 @@ at (anonymous) (0:17): -- skipped Debugger.stepInto called Script wasm://wasm/9b4bf87e byte offset 56: Wasm opcode 0x10 (kExprCallFunction) -at wasm_B (0:56): +at $wasm_B (0:56): - scope (wasm-expression-stack): - scope (local): $var0: 3 (i32) @@ -35,12 +35,12 @@ at (anonymous) (0:17): -- skipped Debugger.stepInto called Script wasm://wasm/9b4bf87e byte offset 38: Wasm opcode 0x01 (kExprNop) -at wasm_A (0:38): +at $wasm_A (0:38): - scope (wasm-expression-stack): - scope (local): - scope (module): -- skipped -at wasm_B (0:56): +at $wasm_B (0:56): - scope (wasm-expression-stack): - scope (local): $var0: 3 (i32) @@ -51,12 +51,12 @@ at (anonymous) (0:17): -- skipped Debugger.stepOver called Script wasm://wasm/9b4bf87e byte offset 39: Wasm opcode 0x01 (kExprNop) -at wasm_A (0:39): +at $wasm_A (0:39): - scope (wasm-expression-stack): - scope (local): - scope (module): -- skipped -at wasm_B (0:56): +at $wasm_B (0:56): - scope (wasm-expression-stack): - scope (local): $var0: 3 (i32) @@ -67,7 +67,7 @@ at (anonymous) (0:17): -- skipped Debugger.stepOut called Script wasm://wasm/9b4bf87e byte offset 58: Wasm opcode 0x0c (kExprBr) -at wasm_B (0:58): +at $wasm_B (0:58): - scope (wasm-expression-stack): - scope (local): $var0: 3 (i32) @@ -78,7 +78,7 @@ at (anonymous) (0:17): -- skipped Debugger.stepOut called Script wasm://wasm/9b4bf87e byte offset 54: Wasm opcode 0x21 (kExprLocalSet) -at wasm_B (0:54): +at $wasm_B (0:54): - scope (wasm-expression-stack): 0: 2 (i32) - scope (local): @@ -90,7 +90,7 @@ at (anonymous) (0:17): -- skipped Debugger.stepOver called Script wasm://wasm/9b4bf87e byte offset 56: Wasm opcode 0x10 (kExprCallFunction) -at wasm_B (0:56): +at $wasm_B (0:56): - scope (wasm-expression-stack): - scope (local): $var0: 2 (i32) @@ -101,7 +101,7 @@ at (anonymous) (0:17): -- skipped Debugger.stepOver called Script wasm://wasm/9b4bf87e byte offset 58: Wasm opcode 0x0c (kExprBr) -at wasm_B (0:58): +at $wasm_B (0:58): - scope (wasm-expression-stack): - scope (local): $var0: 2 (i32) @@ -112,7 +112,7 @@ at (anonymous) (0:17): -- skipped Debugger.resume called Script wasm://wasm/9b4bf87e byte offset 54: Wasm opcode 0x21 (kExprLocalSet) -at wasm_B (0:54): +at $wasm_B (0:54): - scope (wasm-expression-stack): 0: 1 (i32) - scope (local): @@ -124,7 +124,7 @@ at (anonymous) (0:17): -- skipped Debugger.stepInto called Script wasm://wasm/9b4bf87e byte offset 56: Wasm opcode 0x10 (kExprCallFunction) -at wasm_B (0:56): +at $wasm_B (0:56): - scope (wasm-expression-stack): - scope (local): $var0: 1 (i32) @@ -135,12 +135,12 @@ at (anonymous) (0:17): -- skipped Debugger.stepInto called Script wasm://wasm/9b4bf87e byte offset 38: Wasm opcode 0x01 (kExprNop) -at wasm_A (0:38): +at $wasm_A (0:38): - scope (wasm-expression-stack): - scope (local): - scope (module): -- skipped -at wasm_B (0:56): +at $wasm_B (0:56): - scope (wasm-expression-stack): - scope (local): $var0: 1 (i32) @@ -151,7 +151,7 @@ at (anonymous) (0:17): -- skipped Debugger.stepOut called Script wasm://wasm/9b4bf87e byte offset 58: Wasm opcode 0x0c (kExprBr) -at wasm_B (0:58): +at $wasm_B (0:58): - scope (wasm-expression-stack): - scope (local): $var0: 1 (i32) @@ -162,7 +162,7 @@ at (anonymous) (0:17): -- skipped Debugger.stepInto called Script wasm://wasm/9b4bf87e byte offset 45: Wasm opcode 0x20 (kExprLocalGet) -at wasm_B (0:45): +at $wasm_B (0:45): - scope (wasm-expression-stack): - scope (local): $var0: 1 (i32) @@ -173,7 +173,7 @@ at (anonymous) (0:17): -- skipped Debugger.stepInto called Script wasm://wasm/9b4bf87e byte offset 47: Wasm opcode 0x04 (kExprIf) -at wasm_B (0:47): +at $wasm_B (0:47): - scope (wasm-expression-stack): 0: 1 (i32) - scope (local): @@ -185,7 +185,7 @@ at (anonymous) (0:17): -- skipped Debugger.stepInto called Script wasm://wasm/9b4bf87e byte offset 49: Wasm opcode 0x20 (kExprLocalGet) -at wasm_B (0:49): +at $wasm_B (0:49): - scope (wasm-expression-stack): - scope (local): $var0: 1 (i32) @@ -196,7 +196,7 @@ at (anonymous) (0:17): -- skipped Debugger.stepInto called Script wasm://wasm/9b4bf87e byte offset 51: Wasm opcode 0x41 (kExprI32Const) -at wasm_B (0:51): +at $wasm_B (0:51): - scope (wasm-expression-stack): 0: 1 (i32) - scope (local): @@ -208,7 +208,7 @@ at (anonymous) (0:17): -- skipped Debugger.stepInto called Script wasm://wasm/9b4bf87e byte offset 53: Wasm opcode 0x6b (kExprI32Sub) -at wasm_B (0:53): +at $wasm_B (0:53): - scope (wasm-expression-stack): 0: 1 (i32) 1: 1 (i32) @@ -221,7 +221,7 @@ at (anonymous) (0:17): -- skipped Debugger.stepInto called Script wasm://wasm/9b4bf87e byte offset 54: Wasm opcode 0x21 (kExprLocalSet) -at wasm_B (0:54): +at $wasm_B (0:54): - scope (wasm-expression-stack): 0: 0 (i32) - scope (local): @@ -233,7 +233,7 @@ at (anonymous) (0:17): -- skipped Debugger.stepInto called Script wasm://wasm/9b4bf87e byte offset 56: Wasm opcode 0x10 (kExprCallFunction) -at wasm_B (0:56): +at $wasm_B (0:56): - scope (wasm-expression-stack): - scope (local): $var0: 0 (i32) @@ -244,12 +244,12 @@ at (anonymous) (0:17): -- skipped Debugger.stepInto called Script wasm://wasm/9b4bf87e byte offset 38: Wasm opcode 0x01 (kExprNop) -at wasm_A (0:38): +at $wasm_A (0:38): - scope (wasm-expression-stack): - scope (local): - scope (module): -- skipped -at wasm_B (0:56): +at $wasm_B (0:56): - scope (wasm-expression-stack): - scope (local): $var0: 0 (i32) @@ -260,12 +260,12 @@ at (anonymous) (0:17): -- skipped Debugger.stepInto called Script wasm://wasm/9b4bf87e byte offset 39: Wasm opcode 0x01 (kExprNop) -at wasm_A (0:39): +at $wasm_A (0:39): - scope (wasm-expression-stack): - scope (local): - scope (module): -- skipped -at wasm_B (0:56): +at $wasm_B (0:56): - scope (wasm-expression-stack): - scope (local): $var0: 0 (i32) @@ -276,12 +276,12 @@ at (anonymous) (0:17): -- skipped Debugger.stepInto called Script wasm://wasm/9b4bf87e byte offset 40: Wasm opcode 0x0b (kExprEnd) -at wasm_A (0:40): +at $wasm_A (0:40): - scope (wasm-expression-stack): - scope (local): - scope (module): -- skipped -at wasm_B (0:56): +at $wasm_B (0:56): - scope (wasm-expression-stack): - scope (local): $var0: 0 (i32) @@ -292,7 +292,7 @@ at (anonymous) (0:17): -- skipped Debugger.stepInto called Script wasm://wasm/9b4bf87e byte offset 58: Wasm opcode 0x0c (kExprBr) -at wasm_B (0:58): +at $wasm_B (0:58): - scope (wasm-expression-stack): - scope (local): $var0: 0 (i32) diff --git a/deps/v8/test/inspector/debugger/wasm-stepping-with-source-map.js b/deps/v8/test/inspector/debugger/wasm-stepping-with-source-map.js index 7d80628131..ce31be6747 100644 --- a/deps/v8/test/inspector/debugger/wasm-stepping-with-source-map.js +++ b/deps/v8/test/inspector/debugger/wasm-stepping-with-source-map.js @@ -41,6 +41,7 @@ InspectorTest.runAsyncTestSuite([ for (const action of ['stepInto', 'stepOver', 'stepOut', 'resume']) InspectorTest.logProtocolCommandCalls('Debugger.' + action); + await Protocol.Runtime.enable(); await Protocol.Debugger.enable(); WasmInspectorTest.instantiate(module_bytes); const [, {params: wasmScript}] = await Protocol.Debugger.onceScriptParsed(2); diff --git a/deps/v8/test/inspector/debugger/wasm-stepping.js b/deps/v8/test/inspector/debugger/wasm-stepping.js index 30deadaaef..e1721f3ffb 100644 --- a/deps/v8/test/inspector/debugger/wasm-stepping.js +++ b/deps/v8/test/inspector/debugger/wasm-stepping.js @@ -59,6 +59,7 @@ InspectorTest.runAsyncTestSuite([ for (const action of ['stepInto', 'stepOver', 'stepOut', 'resume']) InspectorTest.logProtocolCommandCalls('Debugger.' + action); + await Protocol.Runtime.enable(); await Protocol.Debugger.enable(); InspectorTest.log('Setting up global instance variable.'); WasmInspectorTest.instantiate(module_bytes); diff --git a/deps/v8/test/inspector/debugger/wasm-unnamed-function-names-expected.txt b/deps/v8/test/inspector/debugger/wasm-unnamed-function-names-expected.txt index e0146285cf..b7c820b855 100644 --- a/deps/v8/test/inspector/debugger/wasm-unnamed-function-names-expected.txt +++ b/deps/v8/test/inspector/debugger/wasm-unnamed-function-names-expected.txt @@ -5,7 +5,7 @@ Running testFunction with generated wasm bytes... Paused on 'debugger;' Number of frames: 5 - [0] call_debugger - - [1] func1 - - [2] main + - [1] $func1 + - [2] $main - [3] testFunction - [4] diff --git a/deps/v8/test/inspector/inspector-test.cc b/deps/v8/test/inspector/inspector-test.cc index bc785e919d..ce3caf7661 100644 --- a/deps/v8/test/inspector/inspector-test.cc +++ b/deps/v8/test/inspector/inspector-test.cc @@ -3,8 +3,8 @@ // found in the LICENSE file. #if !defined(_WIN32) && !defined(_WIN64) -#include <unistd.h> // NOLINT -#endif // !defined(_WIN32) && !defined(_WIN64) +#include <unistd.h> +#endif // !defined(_WIN32) && !defined(_WIN64) #include <locale.h> @@ -128,7 +128,7 @@ class UtilsExtension : public IsolateData::SetupGlobalTask { v8::Local<v8::String> str_obj; if (arg->IsSymbol()) { - arg = v8::Local<v8::Symbol>::Cast(arg)->Description(); + arg = v8::Local<v8::Symbol>::Cast(arg)->Description(args.GetIsolate()); } if (!arg->ToString(args.GetIsolate()->GetCurrentContext()) .ToLocal(&str_obj)) { @@ -171,7 +171,7 @@ class UtilsExtension : public IsolateData::SetupGlobalTask { std::string filename(*str, str.length()); *chars = v8::internal::ReadFile(filename.c_str(), &exists); if (!exists) { - isolate->ThrowException(ToV8String(isolate, "Error reading file")); + isolate->ThrowError("Error reading file"); return false; } return true; @@ -632,14 +632,14 @@ class InspectorExtension : public IsolateData::SetupGlobalTask { static void AccessorGetter(v8::Local<v8::String> property, const v8::PropertyCallbackInfo<v8::Value>& info) { v8::Isolate* isolate = info.GetIsolate(); - isolate->ThrowException(ToV8String(isolate, "Getter is called")); + isolate->ThrowError("Getter is called"); } static void AccessorSetter(v8::Local<v8::String> property, v8::Local<v8::Value> value, const v8::PropertyCallbackInfo<void>& info) { v8::Isolate* isolate = info.GetIsolate(); - isolate->ThrowException(ToV8String(isolate, "Setter is called")); + isolate->ThrowError("Setter is called"); } static void StoreCurrentStackTrace( diff --git a/deps/v8/test/inspector/inspector.status b/deps/v8/test/inspector/inspector.status index 5e13f52dfd..9803a2954e 100644 --- a/deps/v8/test/inspector/inspector.status +++ b/deps/v8/test/inspector/inspector.status @@ -26,7 +26,7 @@ 'regress/regress-crbug-1080638': [SKIP], # https://crbug.com/v8/11338 - 'runtime-call-stats/enable-disable': [PASS, ['verify_csa', SKIP]], + 'runtime-call-stats/enable-disable': [SKIP], }], # ALWAYS ############################################################################## @@ -44,6 +44,12 @@ }], # 'system == android' ############################################################################## +['system == macos', { + # Bug(v8:11399): Deadlock on Mac. + 'cpu-profiler/console-profile-wasm': [SKIP], +}], + +############################################################################## ['variant != default', { # Issue 6167. 'debugger/eval-scopes': [PASS, FAIL], @@ -108,23 +114,26 @@ ############################################################################## ['arch == s390 or arch == s390x', { - # Stack manipulations in LiveEdit is not implemented for this arch. - 'debugger/set-script-source-stack-padding': [SKIP], # Liftoff needs to be enabled before running these tests. 'debugger/wasm-*': [SKIP], }], # 'arch == s390 or arch == s390x' ############################################################################## -['(arch == mipsel or arch == mips64el) and not simd_mips', { - # Skip tests that fail on MIPS architectures that don't support SIMD. - 'debugger/wasm-scope-info*': [SKIP], -}], # '(arch == mipsel or arch == mips64el) and not simd_mips' +['no_simd_hardware', { + # Test contains SIMD value. + 'debugger/wasm-scope-info': [SKIP], +}], # no_simd_hardware ############################################################################## ['arch == riscv64', { # SIMD support is still in progress. 'debugger/wasm-scope-info*': [SKIP], 'debugger/wasm-step-after-trap': [SKIP], + +}], # 'arch == riscv64' + +['arch == riscv64 and variant == stress_incremental_marking', { + 'debugger/wasm-gc-breakpoints': [SKIP] }], # 'arch == riscv64' ################################################################################ @@ -202,4 +211,317 @@ 'runtime/evaluate-async': [SKIP], }], # asan == True +################################################################################ +['third_party_heap', { + # Requires a second isolate + 'regress/regress-crbug-1207867': [SKIP], + 'regress/regress-crbug-1197392': [SKIP], + 'debugger/command-line-api-with-arrow-function': [SKIP], + 'regress/regress-crbug-1199919': [SKIP], + 'console/destroy-context-during-log': [SKIP], + 'console/scoped-variables': [SKIP], + 'counters/collection': [SKIP], + 'counters/enable-disable': [SKIP], + 'cpu-profiler/console-profile': [SKIP], + 'cpu-profiler/console-profile-asm-js': [SKIP], + 'cpu-profiler/console-profile-end-parameterless-crash': [SKIP], + 'cpu-profiler/console-profile-wasm': [SKIP], + 'cpu-profiler/coverage': [SKIP], + 'cpu-profiler/coverage-block': [SKIP], + 'cpu-profiler/enable-disable': [SKIP], + 'cpu-profiler/record-cpu-profile': [SKIP], + 'cpu-profiler/stop-without-preceeding-start': [SKIP], + 'debugger/asm-js-breakpoint-before-exec': [SKIP], + 'debugger/asm-js-breakpoint-during-exec': [SKIP], + 'debugger/asm-js-stack': [SKIP], + 'debugger/async-chains': [SKIP], + 'debugger/async-console-count-doesnt-crash': [SKIP], + 'debugger/async-for-await-of-promise-stack': [SKIP], + 'debugger/async-function-step-out': [SKIP], + 'debugger/async-instrumentation': [SKIP], + 'debugger/async-promise-late-then': [SKIP], + 'debugger/async-set-timeout': [SKIP], + 'debugger/async-stack-await': [SKIP], + 'debugger/async-stack-created-frame': [SKIP], + 'debugger/async-stack-for-promise': [SKIP], + 'debugger/async-stack-load-more': [SKIP], + 'debugger/break-location-function-calls': [SKIP], + 'debugger/break-locations-await': [SKIP], + 'debugger/break-locations-var-init': [SKIP], + 'debugger/break-on-exception': [SKIP], + 'debugger/break-on-exception-and-step': [SKIP], + 'debugger/break-on-exception-compiler-errors': [SKIP], + 'debugger/breakpoints': [SKIP], + 'debugger/breakpoints-and-side-effects': [SKIP], + 'debugger/call-frame-function-location': [SKIP], + 'debugger/call-frame-url': [SKIP], + 'debugger/caught-exception-from-framework-inside-async': [SKIP], + 'debugger/caught-uncaught-exceptions': [SKIP], + 'debugger/change-return-value': [SKIP], + 'debugger/class-fields-scopes': [SKIP], + 'debugger/class-private-fields-scopes': [SKIP], + 'debugger/class-private-methods': [SKIP], + 'debugger/class-private-methods-empty-inner': [SKIP], + 'debugger/class-private-methods-preview': [SKIP], + 'debugger/class-private-methods-static': [SKIP], + 'debugger/class-private-methods-static-nested': [SKIP], + 'debugger/class-private-methods-static-preview': [SKIP], + 'debugger/class-private-methods-unused': [SKIP], + 'debugger/clear-breakpoints-on-disable': [SKIP], + 'debugger/collect-obsolete-async-tasks': [SKIP], + 'debugger/collect-old-async-call-chains': [SKIP], + 'debugger/command-line-api-with-bound-function': [SKIP], + 'debugger/continue-to-location': [SKIP], + 'debugger/continue-to-location-target-call-frames': [SKIP], + 'debugger/destroy-in-break-program': [SKIP], + 'debugger/destroy-in-break-program2': [SKIP], + 'debugger/destructuring': [SKIP], + 'debugger/disable-agent-on-pause': [SKIP], + 'debugger/doesnt-step-into-injected-script': [SKIP], + 'debugger/es6-module-liveedit': [SKIP], + 'debugger/es6-module-script-parsed': [SKIP], + 'debugger/eval-scopes': [SKIP], + 'debugger/eval-without-codegen': [SKIP], + 'debugger/evaluate-at-first-module-line': [SKIP], + 'debugger/evaluate-on-call-frame': [SKIP], + 'debugger/evaluate-on-call-frame-in-module': [SKIP], + 'debugger/evaluate-on-call-frame-return-values': [SKIP], + 'debugger/evaluate-on-call-frame-timeout': [SKIP], + 'debugger/external-stack-trace': [SKIP], + 'debugger/for-of-loops': [SKIP], + 'debugger/framework-break': [SKIP], + 'debugger/framework-nested-scheduled-break': [SKIP], + 'debugger/framework-precise-ranges': [SKIP], + 'debugger/framework-stepping': [SKIP], + 'debugger/get-possible-breakpoints': [SKIP], + 'debugger/get-possible-breakpoints-after-gc': [SKIP], + 'debugger/get-possible-breakpoints-array-literal': [SKIP], + 'debugger/get-possible-breakpoints-class-fields': [SKIP], + 'debugger/get-possible-breakpoints-lazy-error': [SKIP], + 'debugger/get-possible-breakpoints-master': [SKIP], + 'debugger/get-possible-breakpoints-restrict-to-function': [SKIP], + 'debugger/get-properties-paused': [SKIP], + 'debugger/inspector-break-api': [SKIP], + 'debugger/limit-size-of-collected-scripts': [SKIP], + 'debugger/max-async-call-chain-depth': [SKIP], + 'debugger/max-async-call-stack-depth-changed': [SKIP], + 'debugger/not-hold-promises': [SKIP], + 'debugger/object-preview-internal-properties': [SKIP], + 'debugger/pause': [SKIP], + 'debugger/pause-at-negative-offset': [SKIP], + 'debugger/pause-inside-blackboxed-optimized': [SKIP], + 'debugger/pause-on-async-call': [SKIP], + 'debugger/pause-on-async-call-set-timeout': [SKIP], + 'debugger/pause-on-oom': [SKIP], + 'debugger/pause-on-oom-extrawide': [SKIP], + 'debugger/pause-on-oom-wide': [SKIP], + 'debugger/pause-on-promise-rejections': [SKIP], + 'debugger/promise-chain-when-limit-hit': [SKIP], + 'debugger/protocol-string-to-double-locale': [SKIP], + 'debugger/provisional-breakpoint-for-anonymous-script': [SKIP], + 'debugger/regress-1125934': [SKIP], + 'debugger/regress-1190290': [SKIP], + 'debugger/regress-crbug-481896': [SKIP], + 'debugger/regression-1185540': [SKIP], + 'debugger/regression-1853': [SKIP], + 'debugger/regression-419663': [SKIP], + 'debugger/regression-424142': [SKIP], + 'debugger/remove-breakpoint-at-breakpoint': [SKIP], + 'debugger/resource-name-to-url': [SKIP], + 'debugger/restart-frame': [SKIP], + 'debugger/restore-breakpoint': [SKIP], + 'debugger/return-break-locations': [SKIP], + 'debugger/scope-skip-variables-with-empty-name': [SKIP], + 'debugger/script-end-location': [SKIP], + 'debugger/script-on-after-compile': [SKIP], + 'debugger/script-origin-stack': [SKIP], + 'debugger/script-parsed-for-runtime-evaluate': [SKIP], + 'debugger/script-parsed-hash': [SKIP], + 'debugger/script-unique-hash': [SKIP], + 'debugger/set-async-call-stack-depth': [SKIP], + 'debugger/set-blackbox-patterns': [SKIP], + 'debugger/set-breakpoint': [SKIP], + 'debugger/set-breakpoint-after-gc': [SKIP], + 'debugger/set-breakpoint-after-liveedit': [SKIP], + 'debugger/set-breakpoint-at-last-line': [SKIP], + 'debugger/set-breakpoint-before-enabling': [SKIP], + 'debugger/set-breakpoint-breaks-on-first-breakable-location': [SKIP], + 'debugger/set-breakpoint-ignore-hint-when-no-location': [SKIP], + 'debugger/set-breakpoint-in-class-initializer': [SKIP], + 'debugger/set-breakpoint-inline-function': [SKIP], + 'debugger/set-breakpoint-on-function-call': [SKIP], + 'debugger/set-breakpoint-url-regex': [SKIP], + 'debugger/set-instrumentation-breakpoint': [SKIP], + 'debugger/set-script-source': [SKIP], + 'debugger/set-script-source-exception': [SKIP], + 'debugger/set-script-source-unchanged': [SKIP], + 'debugger/set-skip-all-pauses': [SKIP], + 'debugger/set-variable-value': [SKIP], + 'debugger/side-effect-free-coverage-enabled': [SKIP], + 'debugger/side-effect-free-debug-evaluate': [SKIP], + 'debugger/step-into': [SKIP], + 'debugger/step-into-break-on-async-call': [SKIP], + 'debugger/step-into-external-async-task': [SKIP], + 'debugger/step-into-external-async-task-same-context': [SKIP], + 'debugger/step-into-nested-arrow': [SKIP], + 'debugger/step-into-next-script': [SKIP], + 'debugger/step-into-optimized-blackbox': [SKIP], + 'debugger/step-into-out': [SKIP], + 'debugger/step-out-async-await': [SKIP], + 'debugger/step-over-another-context-group': [SKIP], + 'debugger/step-over-caught-exception': [SKIP], + 'debugger/step-snapshot': [SKIP], + 'debugger/stepping-after-get-possible-breakpoints': [SKIP], + 'debugger/stepping-and-break-program-api': [SKIP], + 'debugger/stepping-tail-call': [SKIP], + 'debugger/stepping-with-blackboxed-ranges': [SKIP], + 'debugger/stepping-with-natives-and-frameworks': [SKIP], + 'debugger/stepping-with-skiplist': [SKIP], + 'debugger/suspended-generator-scopes': [SKIP], + 'debugger/tdz-modules-scopes': [SKIP], + 'debugger/tdz-scopes': [SKIP], + 'debugger/terminate-execution-on-pause': [SKIP], + 'debugger/this-in-arrow-function': [SKIP], + 'debugger/update-call-frame-scopes': [SKIP], + 'debugger/wasm-breakpoint-reset-on-debugger-restart': [SKIP], + 'debugger/wasm-conditional-breakpoints': [SKIP], + 'debugger/wasm-debug-command': [SKIP], + 'debugger/wasm-evaluate-on-call-frame': [SKIP], + 'debugger/wasm-gc-breakpoints': [SKIP], + 'debugger/wasm-gc-in-debug-break': [SKIP], + 'debugger/wasm-get-breakable-locations-byte-offsets': [SKIP], + 'debugger/wasm-global-names': [SKIP], + 'debugger/wasm-imports': [SKIP], + 'debugger/wasm-inspect-many-registers': [SKIP], + 'debugger/wasm-instrumentation-breakpoint': [SKIP], + 'debugger/wasm-memory-names': [SKIP], + 'debugger/wasm-regress-10957': [SKIP], + 'debugger/wasm-remove-breakpoint': [SKIP], + 'debugger/wasm-reset-context-group': [SKIP], + 'debugger/wasm-scope-info': [SKIP], + 'debugger/wasm-script-code-offset': [SKIP], + 'debugger/wasm-script-code-offset-streaming': [SKIP], + 'debugger/wasm-scripts': [SKIP], + 'debugger/wasm-scripts-with-name': [SKIP], + 'debugger/wasm-set-breakpoint': [SKIP], + 'debugger/wasm-set-breakpoint-breaks-on-first-breakable-location': [SKIP], + 'debugger/wasm-source': [SKIP], + 'debugger/wasm-stack': [SKIP], + 'debugger/wasm-stack-check': [SKIP], + 'debugger/wasm-step-a-lot': [SKIP], + 'debugger/wasm-step-after-trap': [SKIP], + 'debugger/wasm-step-from-non-breakable-position': [SKIP], + 'debugger/wasm-stepping': [SKIP], + 'debugger/wasm-stepping-in-from-js': [SKIP], + 'debugger/wasm-stepping-no-opcode-merging': [SKIP], + 'debugger/wasm-stepping-out-from-js': [SKIP], + 'debugger/wasm-stepping-to-js': [SKIP], + 'debugger/wasm-stepping-with-skiplist': [SKIP], + 'debugger/wasm-stepping-with-source-map': [SKIP], + 'debugger/wasm-unnamed-function-names': [SKIP], + 'heap-profiler/collect-garbage': [SKIP], + 'heap-profiler/console-retaining-path': [SKIP], + 'heap-profiler/sampling-heap-profiler': [SKIP], + 'heap-profiler/take-heap-snapshot-on-pause': [SKIP], + 'json-parse': [SKIP], + 'print-method-not-found': [SKIP], + 'regress/regress-crbug-1147552': [SKIP], + 'regress/regress-crbug-1183664': [SKIP], + 'runtime-call-stats/collection': [SKIP], + 'runtime-call-stats/enable-disable': [SKIP], + 'runtime/add-binding': [SKIP], + 'runtime/await-promise': [SKIP], + 'runtime/call-function-on-async': [SKIP], + 'runtime/clear-of-command-line-api': [SKIP], + 'runtime/client-console-api-message': [SKIP], + 'runtime/command-line-api': [SKIP], + 'runtime/compile-script': [SKIP], + 'runtime/console-api-repeated-in-console': [SKIP], + 'runtime/console-assert': [SKIP], + 'runtime/console-context': [SKIP], + 'runtime/console-line-and-column': [SKIP], + 'runtime/console-log-doesnt-run-microtasks': [SKIP], + 'runtime/console-memory': [SKIP], + 'runtime/console-message-omit-data-urls': [SKIP], + 'runtime/console-messages-limits': [SKIP], + 'runtime/console-methods': [SKIP], + 'runtime/console-spec': [SKIP], + 'runtime/console-table': [SKIP], + 'runtime/console-time-end-format': [SKIP], + 'runtime/console-time-log': [SKIP], + 'runtime/console-time-repeat': [SKIP], + 'runtime/console-timestamp': [SKIP], + 'runtime/context-destroyed-on-context-collected': [SKIP], + 'runtime/create-context': [SKIP], + 'runtime/custom-preview': [SKIP], + 'runtime/enable-async-stack': [SKIP], + 'runtime/error-preview': [SKIP], + 'runtime/es6-module': [SKIP], + 'runtime/evaluate-async': [SKIP], + 'runtime/evaluate-async-with-wrap-error': [SKIP], + 'runtime/evaluate-empty-stack': [SKIP], + 'runtime/evaluate-new-function-error': [SKIP], + 'runtime/evaluate-repl-await': [SKIP], + 'runtime/evaluate-repl-mode': [SKIP], + 'runtime/evaluate-repl-mode-code-cache': [SKIP], + 'runtime/evaluate-repl-mode-side-effecting': [SKIP], + 'runtime/evaluate-run-microtasks': [SKIP], + 'runtime/evaluate-timeout': [SKIP], + 'runtime/evaluate-unique-context-id': [SKIP], + 'runtime/evaluate-unserializable': [SKIP], + 'runtime/evaluate-with-context-id-equal-zero': [SKIP], + 'runtime/evaluate-with-disable-breaks': [SKIP], + 'runtime/evaluate-with-generate-preview': [SKIP], + 'runtime/evaluate-without-side-effects': [SKIP], + 'runtime/exception-thrown': [SKIP], + 'runtime/exceptionthrown-on-connect': [SKIP], + 'runtime/function-location': [SKIP], + 'runtime/function-scopes': [SKIP], + 'runtime/get-heap-usage': [SKIP], + 'runtime/get-isolate-id': [SKIP], + 'runtime/get-properties': [SKIP], + 'runtime/get-properties-on-proxy': [SKIP], + 'runtime/get-properties-preview': [SKIP], + 'runtime/internal-properties': [SKIP], + 'runtime/internal-properties-entries': [SKIP], + 'runtime/length-or-size-description': [SKIP], + 'runtime/property-on-console-proto': [SKIP], + 'runtime/protocol-works-with-different-locale': [SKIP], + 'runtime/query-objects': [SKIP], + 'runtime/regress-1075763': [SKIP], + 'runtime/regress-1078205': [SKIP], + 'runtime/regress-986051': [SKIP], + 'runtime/regression-1052721': [SKIP], + 'runtime/regression-1140845': [SKIP], + 'runtime/regression-732717': [SKIP], + 'runtime/regression-736302': [SKIP], + 'runtime/release-object': [SKIP], + 'runtime/remote-object': [SKIP], + 'runtime/remote-object-get-properties': [SKIP], + 'runtime/run-script-async': [SKIP], + 'runtime/runtime-disable-preserve-injected-script': [SKIP], + 'runtime/runtime-evaluate-null-property': [SKIP], + 'runtime/runtime-evaluate-with-dirty-context': [SKIP], + 'runtime/runtime-get-properties-and-accessor': [SKIP], + 'runtime/runtime-global-lexical-scope-names': [SKIP], + 'runtime/runtime-restore': [SKIP], + 'runtime/set-max-call-stack-size': [SKIP], + 'runtime/set-or-map-entries': [SKIP], + 'runtime/terminate-execution': [SKIP], + 'sessions/create-session': [SKIP], + 'sessions/debugger-stepping-and-breakpoints': [SKIP], + 'sessions/pause-on-console-assert': [SKIP], + 'sessions/runtime-command-line-api': [SKIP], + 'sessions/runtime-console-api-called': [SKIP], + 'sessions/runtime-evaluate': [SKIP], + 'sessions/runtime-evaluate-exception': [SKIP], + 'sessions/runtime-remote-object': [SKIP], + 'type-profiler/type-profile': [SKIP], + 'type-profiler/type-profile-disable': [SKIP], + 'type-profiler/type-profile-start-stop': [SKIP], + 'type-profiler/type-profile-with-classes': [SKIP], + 'type-profiler/type-profile-with-to-string-tag': [SKIP], + 'regress/regress-crbug-1195927': [SKIP], +}], # third_party_heap + ] diff --git a/deps/v8/test/inspector/isolate-data.cc b/deps/v8/test/inspector/isolate-data.cc index 35f51c1fcd..b45e795fe4 100644 --- a/deps/v8/test/inspector/isolate-data.cc +++ b/deps/v8/test/inspector/isolate-data.cc @@ -139,8 +139,14 @@ v8::MaybeLocal<v8::Module> IsolateData::ModuleResolveCallback( // TODO(v8:11189) Consider JSON modules support in the InspectorClient IsolateData* data = IsolateData::FromContext(context); std::string str = *v8::String::Utf8Value(data->isolate(), specifier); - return data->modules_[ToVector(data->isolate(), specifier)].Get( - data->isolate()); + v8::MaybeLocal<v8::Module> maybe_module = + data->modules_[ToVector(data->isolate(), specifier)].Get(data->isolate()); + if (maybe_module.IsEmpty()) { + data->isolate()->ThrowError(v8::String::Concat( + data->isolate(), + ToV8String(data->isolate(), "Failed to resolve module: "), specifier)); + } + return maybe_module; } int IsolateData::ConnectSession(int context_group_id, diff --git a/deps/v8/test/inspector/regress/regress-crbug-1195927-expected.txt b/deps/v8/test/inspector/regress/regress-crbug-1195927-expected.txt new file mode 100644 index 0000000000..b5c92408da --- /dev/null +++ b/deps/v8/test/inspector/regress/regress-crbug-1195927-expected.txt @@ -0,0 +1,32 @@ +Regression test for crbug.com/1195927 + +Running test: test +Debugger.setBreakpoint result: +{ + actualLocation : { + columnNumber : 2 + lineNumber : 2 + scriptId : <scriptId> + } + breakpointId : <breakpointId> +} +Debugger.paused call frames: +foo (foo.js:2:2) +(anonymous) (:0:0) +Debugger.setScriptSource result: +{ + exceptionDetails : { + columnNumber : 0 + exceptionId : <exceptionId> + lineNumber : 0 + text : + } +} +foo(42) result: +{ + result : { + description : 43 + type : number + value : 43 + } +} diff --git a/deps/v8/test/inspector/regress/regress-crbug-1195927.js b/deps/v8/test/inspector/regress/regress-crbug-1195927.js new file mode 100644 index 0000000000..2a2306f609 --- /dev/null +++ b/deps/v8/test/inspector/regress/regress-crbug-1195927.js @@ -0,0 +1,54 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +const {session, contextGroup, Protocol} = + InspectorTest.start('Regression test for crbug.com/1195927'); + +const source = ` +function foo(x) { + x = x + 1; + return x; +} +`; + +const newSource = ` +function foo(x) { + x = x + 2; + return x; +} +`; + +InspectorTest.runAsyncTestSuite([ + async function test() { + session.setupScriptMap(); + await Protocol.Runtime.enable(); + await Protocol.Debugger.enable(); + contextGroup.addScript(source, 0, 0, 'foo.js'); + const { params: { scriptId } } = await Protocol.Debugger.onceScriptParsed(); + + let {result} = await Protocol.Debugger.setBreakpoint({location: { + scriptId, + lineNumber: 2, + }}); + InspectorTest.log('Debugger.setBreakpoint result:'); + InspectorTest.logMessage(result); + + const callPromise = Protocol.Runtime.evaluate({expression: 'foo(42)'}); + + let {params: {callFrames}} = await Protocol.Debugger.oncePaused(); + InspectorTest.log('Debugger.paused call frames:'); + session.logCallFrames(callFrames); + + ({result} = await Protocol.Debugger.setScriptSource({ + scriptId, + scriptSource: newSource + })); + InspectorTest.log('Debugger.setScriptSource result:'); + InspectorTest.logMessage(result); + + ([, {result}] = await Promise.all([Protocol.Debugger.resume(), callPromise])); + InspectorTest.log('foo(42) result:'); + InspectorTest.logMessage(result); + } +]); diff --git a/deps/v8/test/inspector/regress/regress-crbug-1197392-expected.txt b/deps/v8/test/inspector/regress/regress-crbug-1197392-expected.txt new file mode 100644 index 0000000000..e6e27f9094 --- /dev/null +++ b/deps/v8/test/inspector/regress/regress-crbug-1197392-expected.txt @@ -0,0 +1,10 @@ +Regression test for crbug.com/1197392 + +Running test: testInvalidSamplingInterval +{ + error : { + code : -32000 + message : Invalid sampling interval + } + id : <messageId> +} diff --git a/deps/v8/test/inspector/regress/regress-crbug-1197392.js b/deps/v8/test/inspector/regress/regress-crbug-1197392.js new file mode 100644 index 0000000000..572d35885a --- /dev/null +++ b/deps/v8/test/inspector/regress/regress-crbug-1197392.js @@ -0,0 +1,16 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --sampling-heap-profiler-suppress-randomness + +let {contextGroup, Protocol} = InspectorTest.start('Regression test for crbug.com/1197392'); + +InspectorTest.runAsyncTestSuite([ + async function testInvalidSamplingInterval() { + await Protocol.HeapProfiler.enable(); + const message = await Protocol.HeapProfiler.startSampling({samplingInterval: 0}); + InspectorTest.logMessage(message); + await Protocol.HeapProfiler.disable(); + } +]); diff --git a/deps/v8/test/inspector/regress/regress-crbug-1207867-expected.txt b/deps/v8/test/inspector/regress/regress-crbug-1207867-expected.txt new file mode 100644 index 0000000000..edd478cab2 --- /dev/null +++ b/deps/v8/test/inspector/regress/regress-crbug-1207867-expected.txt @@ -0,0 +1,41 @@ +Regression test for crbug/1207867 + +Running test: testFunctionDescription +{ + className : Function + description : function fun(x) { return x; } + objectId : <objectId> + type : function +} + +Running test: testArrowFunctionDescription +{ + className : Function + description : x => x + objectId : <objectId> + type : function +} + +Running test: testBoundFunctionDescription +{ + className : Function + description : function () { [native code] } + objectId : <objectId> + type : function +} + +Running test: testAsyncFunctionDescription +{ + className : AsyncFunction + description : async function afun(x) { await x; } + objectId : <objectId> + type : function +} + +Running test: testNativeFunctionDescription +{ + className : Function + description : function map() { [native code] } + objectId : <objectId> + type : function +} diff --git a/deps/v8/test/inspector/regress/regress-crbug-1207867.js b/deps/v8/test/inspector/regress/regress-crbug-1207867.js new file mode 100644 index 0000000000..0e05aac0c1 --- /dev/null +++ b/deps/v8/test/inspector/regress/regress-crbug-1207867.js @@ -0,0 +1,59 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +let {session, contextGroup, Protocol} = InspectorTest.start('Regression test for crbug/1207867'); + +contextGroup.addScript(` +function fun(x) { return x; } +fun.toString = fn => 'bar'; + +const arrow = x => x; +arrow.toString = fn => 'baz'; + +const bound = fun.bind(this); +bound.toString = fn => 'foo'; + +async function afun(x) { await x; } +afun.toString = fn => 'blah'; + +const native = Array.prototype.map; +native.toString = fn => 'meh'; +`); + +InspectorTest.runAsyncTestSuite([ + async function testFunctionDescription() { + await Protocol.Runtime.enable(); + const {result: {result}} = await Protocol.Runtime.evaluate({expression: 'fun'}); + InspectorTest.logMessage(result); + await Protocol.Runtime.disable(); + }, + + async function testArrowFunctionDescription() { + await Protocol.Runtime.enable(); + const {result: {result}} = await Protocol.Runtime.evaluate({expression: 'arrow'}); + InspectorTest.logMessage(result); + await Protocol.Runtime.disable(); + }, + + async function testBoundFunctionDescription() { + await Protocol.Runtime.enable(); + const {result: {result}} = await Protocol.Runtime.evaluate({expression: 'bound'}); + InspectorTest.logMessage(result); + await Protocol.Runtime.disable(); + }, + + async function testAsyncFunctionDescription() { + await Protocol.Runtime.enable(); + const {result: {result}} = await Protocol.Runtime.evaluate({expression: 'afun'}); + InspectorTest.logMessage(result); + await Protocol.Runtime.disable(); + }, + + async function testNativeFunctionDescription() { + await Protocol.Runtime.enable(); + const {result: {result}} = await Protocol.Runtime.evaluate({expression: 'native'}); + InspectorTest.logMessage(result); + await Protocol.Runtime.disable(); + } +]); diff --git a/deps/v8/test/inspector/runtime/add-binding-expected.txt b/deps/v8/test/inspector/runtime/add-binding-expected.txt index 38ecb05825..ff876782ab 100644 --- a/deps/v8/test/inspector/runtime/add-binding-expected.txt +++ b/deps/v8/test/inspector/runtime/add-binding-expected.txt @@ -157,6 +157,50 @@ binding called in session1 } Call binding in newly created context (binding should NOT be exposed) +Running test: testAddBindingToMultipleContextsById +Call binding in default context (binding should be exposed) +binding called in session1 +{ + method : Runtime.bindingCalled + params : { + executionContextId : <executionContextId> + name : frobnicate + payload : message + } +} +Call binding in target context (binding should be exposed) +binding called in session1 +{ + method : Runtime.bindingCalled + params : { + executionContextId : <executionContextId> + name : frobnicate + payload : message + } +} + +Running test: testAddBindingToMultipleContextsInDifferentContextGroups +Call binding in default context (binding should be exposed) +binding called in group1/session1 +{ + method : Runtime.bindingCalled + params : { + executionContextId : <executionContextId> + name : frobnicate + payload : message + } +} +Call binding in target context (binding should be exposed) +binding called in group2/session1 +{ + method : Runtime.bindingCalled + params : { + executionContextId : <executionContextId> + name : frobnicate + payload : message + } +} + Running test: testAddBindingToContextByName Call binding in default context (binding should NOT be exposed) Call binding in Foo (binding should be exposed) diff --git a/deps/v8/test/inspector/runtime/add-binding.js b/deps/v8/test/inspector/runtime/add-binding.js index 95f4549d4f..a44a9bcf35 100644 --- a/deps/v8/test/inspector/runtime/add-binding.js +++ b/deps/v8/test/inspector/runtime/add-binding.js @@ -87,6 +87,44 @@ InspectorTest.runAsyncTestSuite([ await session.Protocol.Runtime.evaluate({expression, contextId: contextId3}); }, + async function testAddBindingToMultipleContextsById() { + const {contextGroup, sessions: [session]} = setupSessions(1); + const contextId1 = (await session.Protocol.Runtime.onceExecutionContextCreated()).params.context.id; + + contextGroup.createContext(); + const contextId2 = (await session.Protocol.Runtime.onceExecutionContextCreated()).params.context.id; + + await session.Protocol.Runtime.addBinding({name: 'frobnicate', executionContextId: contextId1}); + await session.Protocol.Runtime.addBinding({name: 'frobnicate', executionContextId: contextId2}); + const expression = `frobnicate('message')`; + + InspectorTest.log('Call binding in default context (binding should be exposed)'); + await session.Protocol.Runtime.evaluate({expression}); + + InspectorTest.log('Call binding in target context (binding should be exposed)'); + await session.Protocol.Runtime.evaluate({expression, contextId: contextId2}); + }, + + async function testAddBindingToMultipleContextsInDifferentContextGroups() { + const sessions1 = setupSessions(1, 'group1/'); + const session1 = sessions1.sessions[0]; + const contextId1 = (await session1.Protocol.Runtime.onceExecutionContextCreated()).params.context.id; + + const sessions2 = setupSessions(1, 'group2/'); + const session2 = sessions2.sessions[0]; + const contextId2 = (await session2.Protocol.Runtime.onceExecutionContextCreated()).params.context.id; + + await session1.Protocol.Runtime.addBinding({name: 'frobnicate', executionContextId: contextId1}); + await session2.Protocol.Runtime.addBinding({name: 'frobnicate', executionContextId: contextId2}); + const expression = `frobnicate('message')`; + + InspectorTest.log('Call binding in default context (binding should be exposed)'); + await session1.Protocol.Runtime.evaluate({expression, contextId: contextId1}); + + InspectorTest.log('Call binding in target context (binding should be exposed)'); + await session2.Protocol.Runtime.evaluate({expression, contextId: contextId2}); + }, + async function testAddBindingToContextByName() { const {contextGroup, sessions: [session]} = setupSessions(1); const defaultContext = (await session.Protocol.Runtime.onceExecutionContextCreated()).params.context.id; @@ -134,7 +172,7 @@ InspectorTest.runAsyncTestSuite([ ]); -function setupSessions(num) { +function setupSessions(num, prefix = '') { const contextGroup = new InspectorTest.ContextGroup(); const sessions = []; for (let i = 0; i < num; ++i) { @@ -142,7 +180,7 @@ function setupSessions(num) { sessions.push(session); session.Protocol.Runtime.enable(); session.Protocol.Runtime.onBindingCalled(msg => { - InspectorTest.log(`binding called in session${i + 1}`); + InspectorTest.log(`binding called in ${prefix}session${i + 1}`); InspectorTest.logMessage(msg); }); } diff --git a/deps/v8/test/inspector/runtime/clear-of-command-line-api.js b/deps/v8/test/inspector/runtime/clear-of-command-line-api.js index d67a1c5447..13a8d19154 100644 --- a/deps/v8/test/inspector/runtime/clear-of-command-line-api.js +++ b/deps/v8/test/inspector/runtime/clear-of-command-line-api.js @@ -13,7 +13,7 @@ function presentedAPIMethods() var methodCount = 0; for (var method of methods) { try { - if (eval("window." + method + "&&" + method + ".toString ? " + method + ".toString().indexOf(\\"[Command Line API]\\") !== -1 : false")) + if (eval("window." + method + "&&" + method + ".toString ? " + method + ".toString().indexOf(\\"[native code]\\") !== -1 : false")) ++methodCount; } catch (e) { } diff --git a/deps/v8/test/inspector/runtime/command-line-api-expected.txt b/deps/v8/test/inspector/runtime/command-line-api-expected.txt index 38d53b7eb4..ba5f08d885 100644 --- a/deps/v8/test/inspector/runtime/command-line-api-expected.txt +++ b/deps/v8/test/inspector/runtime/command-line-api-expected.txt @@ -6,7 +6,7 @@ Running test: testKeys result : { result : { className : Function - description : function keys(object) { [Command Line API] } + description : function keys() { [native code] } objectId : <objectId> type : function } @@ -114,7 +114,7 @@ Running test: testQueryObjects result : { result : { className : Function - description : function queryObjects(constructor) { [Command Line API] } + description : function queryObjects() { [native code] } objectId : <objectId> type : function } @@ -235,7 +235,7 @@ Running test: testDebug result : { result : { className : Function - description : function debug(function, condition) { [Command Line API] } + description : function debug() { [native code] } objectId : <objectId> type : function } @@ -246,7 +246,7 @@ Running test: testDebug result : { result : { className : Function - description : function undebug(function) { [Command Line API] } + description : function undebug() { [native code] } objectId : <objectId> type : function } @@ -295,7 +295,7 @@ Running test: testMonitor result : { result : { className : Function - description : function monitor(function) { [Command Line API] } + description : function monitor() { [native code] } objectId : <objectId> type : function } @@ -306,7 +306,7 @@ Running test: testMonitor result : { result : { className : Function - description : function unmonitor(function) { [Command Line API] } + description : function unmonitor() { [native code] } objectId : <objectId> type : function } @@ -325,7 +325,7 @@ Running test: testProfile result : { result : { className : Function - description : function profile(title) { [Command Line API] } + description : function profile() { [native code] } objectId : <objectId> type : function } @@ -336,7 +336,7 @@ Running test: testProfile result : { result : { className : Function - description : function profileEnd(title) { [Command Line API] } + description : function profileEnd() { [native code] } objectId : <objectId> type : function } @@ -399,7 +399,7 @@ Running test: testDir result : { result : { className : Function - description : function dir(value) { [Command Line API] } + description : function dir() { [native code] } objectId : <objectId> type : function } @@ -506,7 +506,7 @@ Running test: testDirXML result : { result : { className : Function - description : function dirxml(value) { [Command Line API] } + description : function dirxml() { [native code] } objectId : <objectId> type : function } @@ -579,7 +579,7 @@ Running test: testTable result : { result : { className : Function - description : function table(data, [columns]) { [Command Line API] } + description : function table() { [native code] } objectId : <objectId> type : function } @@ -652,7 +652,7 @@ Running test: testClear result : { result : { className : Function - description : function clear() { [Command Line API] } + description : function clear() { [native code] } objectId : <objectId> type : function } diff --git a/deps/v8/test/inspector/runtime/get-properties-expected.txt b/deps/v8/test/inspector/runtime/get-properties-expected.txt index ca23ac8b10..b67f470971 100644 --- a/deps/v8/test/inspector/runtime/get-properties-expected.txt +++ b/deps/v8/test/inspector/runtime/get-properties-expected.txt @@ -1,10 +1,10 @@ Checks Runtime.getProperties method Running test: testObject5 - __proto__ own object undefined foo own string cat Internal properties [[PrimitiveValue]] number 5 + [[Prototype]] object undefined Running test: testNotOwn __defineGetter__ inherited function undefined @@ -23,6 +23,8 @@ Running test: testNotOwn toLocaleString inherited function undefined toString inherited function undefined valueOf inherited function undefined +Internal properties + [[Prototype]] object undefined Running test: testAccessorsOnly b own no value, getter, setter @@ -32,33 +34,38 @@ Running test: testArray 0 own string red 1 own string green 2 own string blue - __proto__ own object undefined length own number 3 +Internal properties + [[Prototype]] object undefined Running test: testBound - __proto__ own function undefined length own number 0 name own string bound Number Internal properties [[BoundArgs]] object undefined [[BoundThis]] object undefined + [[Prototype]] function undefined [[TargetFunction]] function undefined Running test: testObjectThrowsLength - __proto__ own object undefined length own no value, getter +Internal properties + [[Prototype]] object undefined Running test: testTypedArrayWithoutLength - __proto__ own object undefined +Internal properties + [[Prototype]] object undefined Running test: testClassWithPrivateFields - __proto__ own object undefined baz own number 4 +Internal properties + [[Prototype]] object undefined Private properties #bar number 3 #foo number 2 - __proto__ own object undefined baz own number 4 +Internal properties + [[Prototype]] object undefined Private properties #bar number 3 #baz number 1 @@ -72,6 +79,13 @@ Private properties #foo number 2 Running test: testArrayBuffer +[[Prototype]] + Symbol(Symbol.toStringTag) own string ArrayBuffer + byteLength own no value, getter + constructor own function undefined + slice own function undefined +Internal properties + [[Prototype]] object undefined [[Int8Array]] 0 own number 1 1 own number 1 @@ -81,7 +95,8 @@ Running test: testArrayBuffer 5 own number 1 6 own number 1 7 own number 1 - __proto__ own object undefined +Internal properties + [[Prototype]] object undefined [[Uint8Array]] 0 own number 1 1 own number 1 @@ -91,21 +106,31 @@ Running test: testArrayBuffer 5 own number 1 6 own number 1 7 own number 1 - __proto__ own object undefined +Internal properties + [[Prototype]] object undefined [[Int16Array]] 0 own number 257 1 own number 257 2 own number 257 3 own number 257 - __proto__ own object undefined +Internal properties + [[Prototype]] object undefined [[Int32Array]] 0 own number 16843009 1 own number 16843009 - __proto__ own object undefined +Internal properties + [[Prototype]] object undefined [[ArrayBufferByteLength]] [[ArrayBufferData]] Running test: testArrayBufferFromWebAssemblyMemory +[[Prototype]] + Symbol(Symbol.toStringTag) own string ArrayBuffer + byteLength own no value, getter + constructor own function undefined + slice own function undefined +Internal properties + [[Prototype]] object undefined [[Int8Array]] [[Uint8Array]] [[Int16Array]] @@ -113,18 +138,22 @@ Running test: testArrayBufferFromWebAssemblyMemory [[ArrayBufferByteLength]] [[ArrayBufferData]] [[WebAssemblyMemory]] - __proto__ own object undefined +Internal properties + [[Prototype]] object undefined Running test: testDetachedArrayBuffer +[[Prototype]] undefined [[IsDetached]] true Running test: testArrayBufferWithBrokenUintCtor - __proto__ own object undefined Internal properties [[ArrayBufferByteLength]] number 7 [[ArrayBufferData]] string 0x... [[Int8Array]] object undefined + [[Prototype]] object undefined [[Uint8Array]] object undefined Running test: testObjectWithProtoProperty __proto__ own object undefined +Internal properties + [[Prototype]] object undefined diff --git a/deps/v8/test/inspector/runtime/get-properties.js b/deps/v8/test/inspector/runtime/get-properties.js index 1a8aa9e99a..69305e241d 100644 --- a/deps/v8/test/inspector/runtime/get-properties.js +++ b/deps/v8/test/inspector/runtime/get-properties.js @@ -45,8 +45,6 @@ InspectorTest.runAsyncTestSuite([ let objectId = await evaluateToObjectId('new Uint8Array([1, 1, 1, 1, 1, 1, 1, 1]).buffer'); let props = await Protocol.Runtime.getProperties({ objectId, ownProperties: true }); for (let prop of props.result.result) { - if (prop.name === '__proto__') - continue; InspectorTest.log(prop.name); await logGetPropertiesResult(prop.value.objectId); } @@ -61,8 +59,6 @@ InspectorTest.runAsyncTestSuite([ let objectId = await evaluateToObjectId('new WebAssembly.Memory({initial: 1}).buffer'); let props = await Protocol.Runtime.getProperties({ objectId, ownProperties: true }); for (let prop of props.result.result) { - if (prop.name === '__proto__') - continue; InspectorTest.log(prop.name); await logGetPropertiesResult(prop.value.objectId); } @@ -84,8 +80,6 @@ InspectorTest.runAsyncTestSuite([ await Protocol.Runtime.evaluate({ expression: 'b', generatePreview: true }) let props = await Protocol.Runtime.getProperties({ objectId, ownProperties: true }); for (let prop of props.result.result) { - if (prop.name === '__proto__') - continue; InspectorTest.log(prop.name); await logGetPropertiesResult(prop.value.objectId); } diff --git a/deps/v8/test/inspector/runtime/internal-properties-expected.txt b/deps/v8/test/inspector/runtime/internal-properties-expected.txt index fc4de5bca3..0a35506f4d 100644 --- a/deps/v8/test/inspector/runtime/internal-properties-expected.txt +++ b/deps/v8/test/inspector/runtime/internal-properties-expected.txt @@ -27,6 +27,15 @@ expression: (function* foo() { yield 1 }) } } [2] : { + name : [[Prototype]] + value : { + className : GeneratorFunction + description : GeneratorFunction + objectId : <objectId> + type : object + } + } + [3] : { name : [[Scopes]] value : { className : Array @@ -60,6 +69,15 @@ expression: (function foo() {}) } } [1] : { + name : [[Prototype]] + value : { + className : Function + description : function () { [native code] } + objectId : <objectId> + type : function + } + } + [2] : { name : [[Scopes]] value : { className : Array @@ -80,6 +98,15 @@ expression: new Number(239) result : { internalProperties : [ [0] : { + name : [[Prototype]] + value : { + className : Number + description : Number + objectId : <objectId> + type : object + } + } + [1] : { name : [[PrimitiveValue]] value : { description : 239 @@ -96,6 +123,15 @@ expression: new Boolean(false) result : { internalProperties : [ [0] : { + name : [[Prototype]] + value : { + className : Boolean + description : Boolean + objectId : <objectId> + type : object + } + } + [1] : { name : [[PrimitiveValue]] value : { type : boolean @@ -111,6 +147,15 @@ expression: new String('abc') result : { internalProperties : [ [0] : { + name : [[Prototype]] + value : { + className : String + description : String + objectId : <objectId> + type : object + } + } + [1] : { name : [[PrimitiveValue]] value : { type : string @@ -126,6 +171,15 @@ expression: Object(Symbol(42)) result : { internalProperties : [ [0] : { + name : [[Prototype]] + value : { + className : Symbol + description : Symbol + objectId : <objectId> + type : object + } + } + [1] : { name : [[PrimitiveValue]] value : { description : Symbol(42) @@ -142,6 +196,15 @@ expression: Object(BigInt(2)) result : { internalProperties : [ [0] : { + name : [[Prototype]] + value : { + className : BigInt + description : BigInt + objectId : <objectId> + type : object + } + } + [1] : { name : [[PrimitiveValue]] value : { description : 2n @@ -160,13 +223,22 @@ expression: Promise.resolve(42) result : { internalProperties : [ [0] : { + name : [[Prototype]] + value : { + className : Promise + description : Promise + objectId : <objectId> + type : object + } + } + [1] : { name : [[PromiseState]] value : { type : string value : fulfilled } } - [1] : { + [2] : { name : [[PromiseResult]] value : { description : 42 @@ -183,13 +255,22 @@ expression: new Promise(() => undefined) result : { internalProperties : [ [0] : { + name : [[Prototype]] + value : { + className : Promise + description : Promise + objectId : <objectId> + type : object + } + } + [1] : { name : [[PromiseState]] value : { type : string value : pending } } - [1] : { + [2] : { name : [[PromiseResult]] value : { type : undefined @@ -219,13 +300,22 @@ expression: gen1 } } [1] : { + name : [[Prototype]] + value : { + className : Generator + description : Generator + objectId : <objectId> + type : object + } + } + [2] : { name : [[GeneratorState]] value : { type : string value : suspended } } - [2] : { + [3] : { name : [[GeneratorFunction]] value : { className : GeneratorFunction @@ -234,7 +324,7 @@ expression: gen1 type : function } } - [3] : { + [4] : { name : [[GeneratorReceiver]] value : { className : global @@ -243,7 +333,7 @@ expression: gen1 type : object } } - [4] : { + [5] : { name : [[Scopes]] value : { className : Array @@ -275,13 +365,22 @@ expression: gen1.next();gen1 } } [1] : { + name : [[Prototype]] + value : { + className : Generator + description : Generator + objectId : <objectId> + type : object + } + } + [2] : { name : [[GeneratorState]] value : { type : string value : suspended } } - [2] : { + [3] : { name : [[GeneratorFunction]] value : { className : GeneratorFunction @@ -290,7 +389,7 @@ expression: gen1.next();gen1 type : function } } - [3] : { + [4] : { name : [[GeneratorReceiver]] value : { className : global @@ -299,7 +398,7 @@ expression: gen1.next();gen1 type : object } } - [4] : { + [5] : { name : [[Scopes]] value : { className : Array @@ -331,13 +430,22 @@ expression: gen1.next();gen1 } } [1] : { + name : [[Prototype]] + value : { + className : Generator + description : Generator + objectId : <objectId> + type : object + } + } + [2] : { name : [[GeneratorState]] value : { type : string value : closed } } - [2] : { + [3] : { name : [[GeneratorFunction]] value : { className : GeneratorFunction @@ -346,7 +454,7 @@ expression: gen1.next();gen1 type : function } } - [3] : { + [4] : { name : [[GeneratorReceiver]] value : { className : global @@ -379,13 +487,22 @@ expression: gen2 } } [1] : { + name : [[Prototype]] + value : { + className : Generator + description : Generator + objectId : <objectId> + type : object + } + } + [2] : { name : [[GeneratorState]] value : { type : string value : suspended } } - [2] : { + [3] : { name : [[GeneratorFunction]] value : { className : GeneratorFunction @@ -394,7 +511,7 @@ expression: gen2 type : function } } - [3] : { + [4] : { name : [[GeneratorReceiver]] value : { className : global @@ -403,7 +520,7 @@ expression: gen2 type : object } } - [4] : { + [5] : { name : [[Scopes]] value : { className : Array @@ -435,13 +552,22 @@ expression: gen2.next();gen2 } } [1] : { + name : [[Prototype]] + value : { + className : Generator + description : Generator + objectId : <objectId> + type : object + } + } + [2] : { name : [[GeneratorState]] value : { type : string value : suspended } } - [2] : { + [3] : { name : [[GeneratorFunction]] value : { className : GeneratorFunction @@ -450,7 +576,7 @@ expression: gen2.next();gen2 type : function } } - [3] : { + [4] : { name : [[GeneratorReceiver]] value : { className : global @@ -459,7 +585,7 @@ expression: gen2.next();gen2 type : object } } - [4] : { + [5] : { name : [[Scopes]] value : { className : Array @@ -491,13 +617,22 @@ expression: gen2.next();gen2 } } [1] : { + name : [[Prototype]] + value : { + className : Generator + description : Generator + objectId : <objectId> + type : object + } + } + [2] : { name : [[GeneratorState]] value : { type : string value : closed } } - [2] : { + [3] : { name : [[GeneratorFunction]] value : { className : GeneratorFunction @@ -506,7 +641,7 @@ expression: gen2.next();gen2 type : function } } - [3] : { + [4] : { name : [[GeneratorReceiver]] value : { className : global @@ -526,13 +661,22 @@ expression: (new Map([[1,2]])).entries() result : { internalProperties : [ [0] : { + name : [[Prototype]] + value : { + className : Map Iterator + description : Map Iterator + objectId : <objectId> + type : object + } + } + [1] : { name : [[IteratorHasMore]] value : { type : boolean value : true } } - [1] : { + [2] : { name : [[IteratorIndex]] value : { description : 0 @@ -540,14 +684,14 @@ expression: (new Map([[1,2]])).entries() value : 0 } } - [2] : { + [3] : { name : [[IteratorKind]] value : { type : string value : entries } } - [3] : { + [4] : { name : [[Entries]] value : { className : Array @@ -566,13 +710,22 @@ expression: (new Set([[1,2]])).entries() result : { internalProperties : [ [0] : { + name : [[Prototype]] + value : { + className : Set Iterator + description : Set Iterator + objectId : <objectId> + type : object + } + } + [1] : { name : [[IteratorHasMore]] value : { type : boolean value : true } } - [1] : { + [2] : { name : [[IteratorIndex]] value : { description : 0 @@ -580,14 +733,14 @@ expression: (new Set([[1,2]])).entries() value : 0 } } - [2] : { + [3] : { name : [[IteratorKind]] value : { type : string value : entries } } - [3] : { + [4] : { name : [[Entries]] value : { className : Array diff --git a/deps/v8/test/inspector/runtime/remote-object-expected.txt b/deps/v8/test/inspector/runtime/remote-object-expected.txt index f4d98a9cca..82e6ed8bf8 100644 --- a/deps/v8/test/inspector/runtime/remote-object-expected.txt +++ b/deps/v8/test/inspector/runtime/remote-object-expected.txt @@ -397,6 +397,16 @@ Running test: testBigInt } Running test: testRegExp +'/w+/d', returnByValue: false, generatePreview: false +{ + result : { + className : RegExp + description : /w+/d + objectId : <objectId> + subtype : regexp + type : object + } +} '/w+/g', returnByValue: false, generatePreview: false { result : { @@ -457,11 +467,11 @@ Running test: testRegExp type : object } } -'/w+/gimsuy', returnByValue: false, generatePreview: false +'/w+/dgimsuy', returnByValue: false, generatePreview: false { result : { className : RegExp - description : /w+/gimsuy + description : /w+/dgimsuy objectId : <objectId> subtype : regexp type : object @@ -477,6 +487,16 @@ Running test: testRegExp type : object } } +'new RegExp('foo/bar')', returnByValue: false, generatePreview: false +{ + result : { + className : RegExp + description : /foo\/bar/ + objectId : <objectId> + subtype : regexp + type : object + } +} 'var re = new RegExp('\w+', 'g'); re.prop = 32; re', returnByValue: false, generatePreview: true diff --git a/deps/v8/test/inspector/runtime/remote-object-get-properties-expected.txt b/deps/v8/test/inspector/runtime/remote-object-get-properties-expected.txt index 216639355e..31080efbc5 100644 --- a/deps/v8/test/inspector/runtime/remote-object-get-properties-expected.txt +++ b/deps/v8/test/inspector/runtime/remote-object-get-properties-expected.txt @@ -4,6 +4,17 @@ Running test: testObject { id : <messageId> result : { + internalProperties : [ + [0] : { + name : [[Prototype]] + value : { + className : Object + description : Object + objectId : <objectId> + type : object + } + } + ] result : [ [0] : { configurable : true @@ -17,25 +28,23 @@ Running test: testObject } writable : true } - [1] : { - configurable : true - enumerable : false - isOwn : true - name : __proto__ + ] + } +} +{ + id : <messageId> + result : { + internalProperties : [ + [0] : { + name : [[Prototype]] value : { className : Object description : Object objectId : <objectId> type : object } - writable : true } ] - } -} -{ - id : <messageId> - result : { result : [ [0] : { configurable : false @@ -120,19 +129,6 @@ Running test: testObject } writable : false } - [6] : { - configurable : true - enumerable : false - isOwn : true - name : __proto__ - value : { - className : Object - description : Object - objectId : <objectId> - type : object - } - writable : true - } ] } } diff --git a/deps/v8/test/inspector/runtime/remote-object.js b/deps/v8/test/inspector/runtime/remote-object.js index 78926479ae..49099d704e 100644 --- a/deps/v8/test/inspector/runtime/remote-object.js +++ b/deps/v8/test/inspector/runtime/remote-object.js @@ -201,6 +201,9 @@ InspectorTest.runAsyncTestSuite([ }, async function testRegExp() { InspectorTest.logMessage((await evaluate({ + expression: '/\w+/d' + })).result); + InspectorTest.logMessage((await evaluate({ expression: '/\w+/g' })).result); InspectorTest.logMessage((await evaluate({ @@ -219,12 +222,15 @@ InspectorTest.runAsyncTestSuite([ expression: '/\w+/y' })).result); InspectorTest.logMessage((await evaluate({ - expression: '/\w+/gimsuy' + expression: '/\w+/dgimsuy' })).result); InspectorTest.logMessage((await evaluate({ expression: `new RegExp('\\w+', 'g')`, })).result); InspectorTest.logMessage((await evaluate({ + expression: `new RegExp('foo/bar')` + })).result); + InspectorTest.logMessage((await evaluate({ expression: `var re = new RegExp('\\w+', 'g'); re.prop = 32; re`, diff --git a/deps/v8/test/inspector/sessions/runtime-remote-object-expected.txt b/deps/v8/test/inspector/sessions/runtime-remote-object-expected.txt index a8d0ec0c20..04a0e0ce94 100644 --- a/deps/v8/test/inspector/sessions/runtime-remote-object-expected.txt +++ b/deps/v8/test/inspector/sessions/runtime-remote-object-expected.txt @@ -5,6 +5,17 @@ Retrieving properties in 2 { id : <messageId> result : { + internalProperties : [ + [0] : { + name : [[Prototype]] + value : { + className : Object + description : Object + objectId : <objectId> + type : object + } + } + ] result : [ [0] : { configurable : true @@ -18,26 +29,24 @@ Retrieving properties in 2 } writable : true } - [1] : { - configurable : true - enumerable : false - isOwn : true - name : __proto__ + ] + } +} +Retrieving properties in 1 +{ + id : <messageId> + result : { + internalProperties : [ + [0] : { + name : [[Prototype]] value : { className : Object description : Object objectId : <objectId> type : object } - writable : true } ] - } -} -Retrieving properties in 1 -{ - id : <messageId> - result : { result : [ [0] : { configurable : true @@ -51,19 +60,6 @@ Retrieving properties in 1 } writable : true } - [1] : { - configurable : true - enumerable : false - isOwn : true - name : __proto__ - value : { - className : Object - description : Object - objectId : <objectId> - type : object - } - writable : true - } ] } } @@ -72,6 +68,17 @@ Retrieving properties in 1 { id : <messageId> result : { + internalProperties : [ + [0] : { + name : [[Prototype]] + value : { + className : Object + description : Object + objectId : <objectId> + type : object + } + } + ] result : [ [0] : { configurable : true @@ -85,19 +92,6 @@ Retrieving properties in 1 } writable : true } - [1] : { - configurable : true - enumerable : false - isOwn : true - name : __proto__ - value : { - className : Object - description : Object - objectId : <objectId> - type : object - } - writable : true - } ] } } diff --git a/deps/v8/test/inspector/task-runner.cc b/deps/v8/test/inspector/task-runner.cc index ebd0b6378c..f4270348de 100644 --- a/deps/v8/test/inspector/task-runner.cc +++ b/deps/v8/test/inspector/task-runner.cc @@ -8,8 +8,8 @@ #include "src/flags/flags.h" #if !defined(_WIN32) && !defined(_WIN64) -#include <unistd.h> // NOLINT -#endif // !defined(_WIN32) && !defined(_WIN64) +#include <unistd.h> +#endif // !defined(_WIN32) && !defined(_WIN64) namespace v8 { namespace internal { diff --git a/deps/v8/test/inspector/wasm-inspector-test.js b/deps/v8/test/inspector/wasm-inspector-test.js index 9fe13e9d7d..939316ed02 100644 --- a/deps/v8/test/inspector/wasm-inspector-test.js +++ b/deps/v8/test/inspector/wasm-inspector-test.js @@ -7,9 +7,12 @@ utils.load('test/mjsunit/wasm/wasm-module-builder.js'); WasmInspectorTest = {} InspectorTest.getWasmOpcodeName = getOpcodeName; -WasmInspectorTest.evalWithUrl = async function(code, url) { +WasmInspectorTest.evalWithUrl = async function(expression, url) { + const sourceURL = `v8://test/${url}`; + const {result: {scriptId}} = await Protocol.Runtime.compileScript({ + expression, sourceURL, persistScript: true}).then(printIfFailure); return await Protocol.Runtime - .evaluate({'expression': code + '\n//# sourceURL=v8://test/' + url}) + .runScript({scriptId}) .then(printIfFailure); }; diff --git a/deps/v8/test/intl/general/getCanonicalLocales.js b/deps/v8/test/intl/general/getCanonicalLocales.js index a6a344ff9c..48f2fee897 100644 --- a/deps/v8/test/intl/general/getCanonicalLocales.js +++ b/deps/v8/test/intl/general/getCanonicalLocales.js @@ -24,5 +24,5 @@ assertEquals("ro", Intl.getCanonicalLocales("mo")[0]); assertEquals("sr", Intl.getCanonicalLocales("scc")[0]); assertEquals("sr-Latn", Intl.getCanonicalLocales("sh")[0]); assertEquals("sr-ME", Intl.getCanonicalLocales("cnr")[0]); -assertEquals("nb", Intl.getCanonicalLocales("no")[0]); +assertEquals("no", Intl.getCanonicalLocales("no")[0]); assertEquals("fil", Intl.getCanonicalLocales("tl")[0]); diff --git a/deps/v8/test/intl/locale/locale-info-check-property.js b/deps/v8/test/intl/locale/locale-info-check-property.js new file mode 100644 index 0000000000..77c676e6ec --- /dev/null +++ b/deps/v8/test/intl/locale/locale-info-check-property.js @@ -0,0 +1,23 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --harmony_intl_locale_info + +// Check getter properties against the spec. +function checkProperties(property) { + let desc = Object.getOwnPropertyDescriptor(Intl.Locale.prototype, property); + assertEquals(`get ${property}`, desc.get.name); + assertEquals('function', typeof desc.get) + assertEquals(undefined, desc.set); + assertFalse(desc.enumerable); + assertTrue(desc.configurable); +} + +checkProperties('calendars'); +checkProperties('collations'); +checkProperties('hourCycles'); +checkProperties('numberingSystems'); +checkProperties('textInfo'); +checkProperties('timeZones'); +checkProperties('weekInfo'); diff --git a/deps/v8/test/intl/locale/locale-info-check-return-types.js b/deps/v8/test/intl/locale/locale-info-check-return-types.js new file mode 100644 index 0000000000..051b8596ae --- /dev/null +++ b/deps/v8/test/intl/locale/locale-info-check-return-types.js @@ -0,0 +1,46 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --harmony_intl_locale_info + +function checkLocale(locale) { + let l = new Intl.Locale(locale); + assertTrue(Array.isArray(l.calendars)); + assertTrue(Array.isArray(l.collations)); + assertTrue(Array.isArray(l.hourCycles)); + assertTrue(Array.isArray(l.numberingSystems)); + + if (l.region == undefined) { + assertEquals(undefined, l.timeZones); + } else { + assertTrue(Array.isArray(l.timeZones)); + } + + assertEquals("object", typeof(l.textInfo)); + assertEquals(1, Object.keys(l.textInfo).length); + assertEquals("string", typeof(l.textInfo.direction)); + + assertEquals("object", typeof(l.weekInfo)); + assertEquals(4, Object.keys(l.weekInfo).length); + assertEquals("number", typeof(l.weekInfo.firstDay)); + assertTrue(l.weekInfo.firstDay >= 1); + assertTrue(l.weekInfo.firstDay <= 7); + + assertEquals("number", typeof(l.weekInfo.weekendStart)); + assertTrue(l.weekInfo.weekendStart >= 1); + assertTrue(l.weekInfo.weekendStart <= 7); + + assertEquals("number", typeof(l.weekInfo.weekendEnd)); + assertTrue(l.weekInfo.weekendEnd >= 1); + assertTrue(l.weekInfo.weekendEnd <= 7); + + assertEquals("number", typeof(l.weekInfo.minimalDays)); + assertTrue(l.weekInfo.minimalDays >= 1); + assertTrue(l.weekInfo.minimalDays <= 7); +} + +checkLocale("ar"); +checkLocale("en"); +checkLocale("fr"); +checkLocale("en-GB"); diff --git a/deps/v8/test/intl/locale/locale-info-ext.js b/deps/v8/test/intl/locale/locale-info-ext.js new file mode 100644 index 0000000000..647e6c8a4e --- /dev/null +++ b/deps/v8/test/intl/locale/locale-info-ext.js @@ -0,0 +1,26 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --harmony_intl_locale_info + +// Test Unicode extension. +function testExt(base, ukey, uvalue, property) { + let baseLocale = new Intl.Locale(base); + let extLocale = new Intl.Locale(base + "-u-" + ukey + "-" + uvalue); + + let baseActual = baseLocale[property]; + assertTrue(Array.isArray(baseActual)); + assertTrue(baseActual.length > 0); + assertFalse(uvalue == baseActual[0]); + + let extActual = extLocale[property]; + assertTrue(Array.isArray(extActual)); + assertEquals(1, extActual.length); + assertEquals(uvalue, extActual[0]); +} + +testExt("ar", "ca", "roc", "calendars"); +testExt("fr", "nu", "thai", "numberingSystems"); +testExt("th", "co", "pinyin", "collations"); +testExt("ko", "hc", "h11", "hourCycles"); diff --git a/deps/v8/test/intl/locale/locale.js b/deps/v8/test/intl/locale/locale.js index 15b5870f3a..4c70e0d1c4 100644 --- a/deps/v8/test/intl/locale/locale.js +++ b/deps/v8/test/intl/locale/locale.js @@ -12,7 +12,7 @@ assertEquals("hr", (new Intl.Locale("scr")).toString()); assertEquals("sr-Latn", (new Intl.Locale("sh")).toString()); assertEquals("sr-ME", (new Intl.Locale("cnr")).toString()); -assertEquals("nb", (new Intl.Locale("no")).toString()); +assertEquals("no", (new Intl.Locale("no")).toString()); assertEquals("fil", (new Intl.Locale("tl")).toString()); assertEquals("hy-AM", (new Intl.Locale("hy-SU")).toString()); diff --git a/deps/v8/test/memory/Memory.json b/deps/v8/test/memory/Memory.json index f2b362768b..77be23c1a0 100644 --- a/deps/v8/test/memory/Memory.json +++ b/deps/v8/test/memory/Memory.json @@ -6,7 +6,8 @@ "resources": ["run.js"], "main": "run.js", "path": ["."], - "flags": ["--allow-natives-syntax", "--profile-deserialization"], + "flags": ["--allow-natives-syntax", "--profile-deserialization", + "--serialization-statistics"], "tests": [ { "name": "ReservedMemoryIsolate", diff --git a/deps/v8/test/message/fail/wasm-async-compile-fail.out b/deps/v8/test/message/fail/wasm-async-compile-fail.out index 0ecf9b1968..322b872976 100644 --- a/deps/v8/test/message/fail/wasm-async-compile-fail.out +++ b/deps/v8/test/message/fail/wasm-async-compile-fail.out @@ -1,5 +1,5 @@ -*%(basename)s:9: CompileError: WebAssembly.compile(): Compiling function #0:"f" failed: expected 1 elements on the stack for fallthru to @1, found 0 @+24 +*%(basename)s:9: CompileError: WebAssembly.compile(): Compiling function #0:"f" failed: expected 1 elements on the stack for fallthru, found 0 @+24 let rethrow = e => setTimeout(_ => {throw e}, 0); ^ -CompileError: WebAssembly.compile(): Compiling function #0:"f" failed: expected 1 elements on the stack for fallthru to @1, found 0 @+24 +CompileError: WebAssembly.compile(): Compiling function #0:"f" failed: expected 1 elements on the stack for fallthru, found 0 @+24 diff --git a/deps/v8/test/message/fail/wasm-async-instantiate-fail.out b/deps/v8/test/message/fail/wasm-async-instantiate-fail.out index ebe2760dd2..fd5193de2c 100644 --- a/deps/v8/test/message/fail/wasm-async-instantiate-fail.out +++ b/deps/v8/test/message/fail/wasm-async-instantiate-fail.out @@ -1,5 +1,5 @@ -*%(basename)s:9: CompileError: WebAssembly.instantiate(): Compiling function #0:"f" failed: expected 1 elements on the stack for fallthru to @1, found 0 @+24 +*%(basename)s:9: CompileError: WebAssembly.instantiate(): Compiling function #0:"f" failed: expected 1 elements on the stack for fallthru, found 0 @+24 let rethrow = e => setTimeout(_ => {throw e}, 0); ^ -CompileError: WebAssembly.instantiate(): Compiling function #0:"f" failed: expected 1 elements on the stack for fallthru to @1, found 0 @+24 +CompileError: WebAssembly.instantiate(): Compiling function #0:"f" failed: expected 1 elements on the stack for fallthru, found 0 @+24 diff --git a/deps/v8/test/message/fail/wasm-module-name.js b/deps/v8/test/message/fail/wasm-module-name.js index c872c32cb8..9fa60789b1 100644 --- a/deps/v8/test/message/fail/wasm-module-name.js +++ b/deps/v8/test/message/fail/wasm-module-name.js @@ -8,7 +8,7 @@ load("test/mjsunit/wasm/wasm-module-builder.js"); var builder = new WasmModuleBuilder(); builder.setName('test-module'); -builder.addFunction(undefined, kSig_i_v) +builder.addFunction('main', kSig_i_v) .addBody([kExprUnreachable]) .exportAs('main'); builder.instantiate().exports.main(); diff --git a/deps/v8/test/message/fail/wasm-no-name.out b/deps/v8/test/message/fail/wasm-no-name.out index 182b15dc87..c39dff6310 100644 --- a/deps/v8/test/message/fail/wasm-no-name.out +++ b/deps/v8/test/message/fail/wasm-no-name.out @@ -1,4 +1,4 @@ wasm-function[0]:0x22: RuntimeError: unreachable RuntimeError: unreachable - at main (<anonymous>:wasm-function[0]:0x22) + at <anonymous>:wasm-function[0]:0x22 at *%(basename)s:{NUMBER}:31 diff --git a/deps/v8/test/message/fail/wasm-streaming-compile-fail.out b/deps/v8/test/message/fail/wasm-streaming-compile-fail.out index d11d5ebf84..94719c6695 100644 --- a/deps/v8/test/message/fail/wasm-streaming-compile-fail.out +++ b/deps/v8/test/message/fail/wasm-streaming-compile-fail.out @@ -1,5 +1,5 @@ -*%(basename)s:11: CompileError: WebAssembly.compileStreaming(): Compiling function #0:"f" failed: expected 1 elements on the stack for fallthru to @1, found 0 @+24 +*%(basename)s:11: CompileError: WebAssembly.compileStreaming(): Compiling function #0:"f" failed: expected 1 elements on the stack for fallthru, found 0 @+24 let rethrow = e => setTimeout(_ => {throw e}, 0); ^ -CompileError: WebAssembly.compileStreaming(): Compiling function #0:"f" failed: expected 1 elements on the stack for fallthru to @1, found 0 @+24 +CompileError: WebAssembly.compileStreaming(): Compiling function #0:"f" failed: expected 1 elements on the stack for fallthru, found 0 @+24 diff --git a/deps/v8/test/message/fail/wasm-streaming-instantiate-fail.out b/deps/v8/test/message/fail/wasm-streaming-instantiate-fail.out index d8cd334de0..b9eda93704 100644 --- a/deps/v8/test/message/fail/wasm-streaming-instantiate-fail.out +++ b/deps/v8/test/message/fail/wasm-streaming-instantiate-fail.out @@ -1,5 +1,5 @@ -*%(basename)s:11: CompileError: WebAssembly.instantiateStreaming(): Compiling function #0:"f" failed: expected 1 elements on the stack for fallthru to @1, found 0 @+24 +*%(basename)s:11: CompileError: WebAssembly.instantiateStreaming(): Compiling function #0:"f" failed: expected 1 elements on the stack for fallthru, found 0 @+24 let rethrow = e => setTimeout(_ => {throw e}, 0); ^ -CompileError: WebAssembly.instantiateStreaming(): Compiling function #0:"f" failed: expected 1 elements on the stack for fallthru to @1, found 0 @+24 +CompileError: WebAssembly.instantiateStreaming(): Compiling function #0:"f" failed: expected 1 elements on the stack for fallthru, found 0 @+24 diff --git a/deps/v8/test/message/fail/wasm-sync-compile-fail.out b/deps/v8/test/message/fail/wasm-sync-compile-fail.out index 849fc202ee..c22bb032a0 100644 --- a/deps/v8/test/message/fail/wasm-sync-compile-fail.out +++ b/deps/v8/test/message/fail/wasm-sync-compile-fail.out @@ -1,6 +1,6 @@ -*%(basename)s:9: CompileError: WebAssembly.Module(): Compiling function #0:"f" failed: expected 1 elements on the stack for fallthru to @1, found 0 @+24 +*%(basename)s:9: CompileError: WebAssembly.Module(): Compiling function #0:"f" failed: expected 1 elements on the stack for fallthru, found 0 @+24 new WebAssembly.Module(builder.toBuffer()); ^ -CompileError: WebAssembly.Module(): Compiling function #0:"f" failed: expected 1 elements on the stack for fallthru to @1, found 0 @+24 +CompileError: WebAssembly.Module(): Compiling function #0:"f" failed: expected 1 elements on the stack for fallthru, found 0 @+24 at *%(basename)s:9:1 diff --git a/deps/v8/test/message/message.status b/deps/v8/test/message/message.status index 4301867fdf..4a6e1176bc 100644 --- a/deps/v8/test/message/message.status +++ b/deps/v8/test/message/message.status @@ -70,11 +70,6 @@ }], ################################################################################ -['arch == ppc64', { - # Tests that require Simd enabled. - 'wasm-trace-memory': [SKIP], -}], - ['arch == mips64el or arch == mipsel', { # Tests that require Simd enabled. 'wasm-trace-memory': [SKIP], @@ -84,4 +79,17 @@ # Tests that require Simd enabled. 'wasm-trace-memory': [SKIP], }], + +############################################################################## +['no_simd_hardware == True', { + 'wasm-trace-memory': [SKIP], + 'wasm-trace-memory-liftoff': [SKIP], +}], # no_simd_hardware == True + +################################################################################ +['third_party_heap', { + # Performs GC + 'weakref-finalizationregistry-error': [SKIP], +}], # third_party_heap + ] diff --git a/deps/v8/test/message/testcfg.py b/deps/v8/test/message/testcfg.py index f99c377661..7bc5ddf52f 100644 --- a/deps/v8/test/message/testcfg.py +++ b/deps/v8/test/message/testcfg.py @@ -49,6 +49,8 @@ class TestCase(testcase.D8TestCase): def __init__(self, *args, **kwargs): super(TestCase, self).__init__(*args, **kwargs) + # get_source() relies on this being set. + self._base_path = os.path.join(self.suite.root, self.path) source = self.get_source() self._source_files = self._parse_source_files(source) self._source_flags = self._parse_source_flags(source) @@ -78,13 +80,12 @@ class TestCase(testcase.D8TestCase): return self._source_flags def _get_source_path(self): - base_path = os.path.join(self.suite.root, self.path) # Try .js first, and fall back to .mjs. # TODO(v8:9406): clean this up by never separating the path from # the extension in the first place. - if os.path.exists(base_path + self._get_suffix()): - return base_path + self._get_suffix() - return base_path + '.mjs' + if os.path.exists(self._base_path + self._get_suffix()): + return self._base_path + self._get_suffix() + return self._base_path + '.mjs' def skip_predictable(self): # Message tests expected to fail don't print allocation output for @@ -94,8 +95,10 @@ class TestCase(testcase.D8TestCase): @property def output_proc(self): return message.OutProc(self.expected_outcomes, - os.path.join(self.suite.root, self.path), - self._expected_fail()) + self._base_path, + self._expected_fail(), + self._base_path + '.out', + self.suite.test_config.regenerate_expected_files) def GetSuite(*args, **kwargs): diff --git a/deps/v8/test/message/wasm-module-name-async.js b/deps/v8/test/message/wasm-module-name-async.js index a0d501fc25..48a7183ede 100644 --- a/deps/v8/test/message/wasm-module-name-async.js +++ b/deps/v8/test/message/wasm-module-name-async.js @@ -9,7 +9,7 @@ load('test/mjsunit/wasm/wasm-module-builder.js'); var builder = new WasmModuleBuilder(); builder.setName('test-module'); -builder.addFunction(undefined, kSig_i_v) +builder.addFunction('main', kSig_i_v) .addBody([kExprUnreachable]) .exportAs('main'); let buffer = builder.toBuffer(); diff --git a/deps/v8/test/message/wasm-no-name-async.out b/deps/v8/test/message/wasm-no-name-async.out index ad003ef227..b35991d7fa 100644 --- a/deps/v8/test/message/wasm-no-name-async.out +++ b/deps/v8/test/message/wasm-no-name-async.out @@ -1,4 +1,4 @@ RuntimeError: unreachable - at main (<anonymous>:wasm-function[0]:0x22) + at <anonymous>:wasm-function[0]:0x22 at *%(basename)s:{NUMBER}:27 at test/mjsunit/mjsunit.js:* diff --git a/deps/v8/test/message/wasm-no-name-streaming.out b/deps/v8/test/message/wasm-no-name-streaming.out index 987952db8b..182d3c552b 100644 --- a/deps/v8/test/message/wasm-no-name-streaming.out +++ b/deps/v8/test/message/wasm-no-name-streaming.out @@ -1,4 +1,4 @@ RuntimeError: unreachable - at main (<anonymous>:wasm-function[0]:0x22) + at <anonymous>:wasm-function[0]:0x22 at test/message/wasm-no-name-async.js:{NUMBER}:27 at test/mjsunit/mjsunit.js:* diff --git a/deps/v8/test/message/wasm-trace-memory-liftoff.js b/deps/v8/test/message/wasm-trace-memory-liftoff.js index ad1b9e4042..1050123c59 100644 --- a/deps/v8/test/message/wasm-trace-memory-liftoff.js +++ b/deps/v8/test/message/wasm-trace-memory-liftoff.js @@ -4,7 +4,6 @@ // Flags: --no-stress-opt --trace-wasm-memory --liftoff // Flags: --no-wasm-tier-up --experimental-wasm-simd -// Flags: --enable-sse3 --enable-sse4-1 // Force enable sse3 and sse4-1, since that will determine which execution tier // we use, and thus the expected output message will differ. diff --git a/deps/v8/test/message/wasm-trace-memory-liftoff.out b/deps/v8/test/message/wasm-trace-memory-liftoff.out index 7228cb4607..43de995348 100644 --- a/deps/v8/test/message/wasm-trace-memory-liftoff.out +++ b/deps/v8/test/message/wasm-trace-memory-liftoff.out @@ -1,14 +1,14 @@ -liftoff func: 0+0x3 load from 0000000000000004 val: i32:0 / 00000000 -liftoff func: 1+0x3 load from 0000000000000001 val: i8:0 / 00 -liftoff func: 3+0x5 store to 0000000000000004 val: i32:305419896 / 12345678 -liftoff func: 0+0x3 load from 0000000000000002 val: i32:1450704896 / 56780000 -liftoff func: 1+0x3 load from 0000000000000006 val: i8:52 / 34 -liftoff func: 2+0x3 load from 0000000000000002 val: f32:68169720922112.000000 / 56780000 -liftoff func: 4+0x5 store to 0000000000000004 val: i8:171 / ab -liftoff func: 0+0x3 load from 0000000000000002 val: i32:1454047232 / 56ab0000 -liftoff func: 2+0x3 load from 0000000000000002 val: f32:94008244174848.000000 / 56ab0000 -liftoff func: 6+0x7 store to 0000000000000004 val: s128:48879 48879 48879 48879 / 0000beef 0000beef 0000beef 0000beef -liftoff func: 5+0x3 load from 0000000000000002 val: s128:-1091633152 -1091633152 -1091633152 -1091633152 / beef0000 beef0000 beef0000 beef0000 -liftoff func: 7+0x3 load from 0000000000000004 val: i16:48879 / beef -liftoff func: 8+0x3 load from 0000000000000002 val: i64:-4688528683866062848 / beef0000beef0000 -liftoff func: 9+0x3 load from 0000000000000002 val: f64:-0.000015 / beef0000beef0000 +liftoff func: 0:0xab load from 0000000000000004 val: i32:0 / 00000000 +liftoff func: 1:0xb4 load from 0000000000000001 val: i8:0 / 00 +liftoff func: 3:0xc8 store to 0000000000000004 val: i32:305419896 / 12345678 +liftoff func: 0:0xab load from 0000000000000002 val: i32:1450704896 / 56780000 +liftoff func: 1:0xb4 load from 0000000000000006 val: i8:52 / 34 +liftoff func: 2:0xbd load from 0000000000000002 val: f32:68169720922112.000000 / 56780000 +liftoff func: 4:0xd2 store to 0000000000000004 val: i8:171 / ab +liftoff func: 0:0xab load from 0000000000000002 val: i32:1454047232 / 56ab0000 +liftoff func: 2:0xbd load from 0000000000000002 val: f32:94008244174848.000000 / 56ab0000 +liftoff func: 6:0xe8 store to 0000000000000004 val: s128:48879 48879 48879 48879 / 0000beef 0000beef 0000beef 0000beef +liftoff func: 5:0xda load from 0000000000000002 val: s128:-1091633152 -1091633152 -1091633152 -1091633152 / beef0000 beef0000 beef0000 beef0000 +liftoff func: 7:0xf1 load from 0000000000000004 val: i16:48879 / beef +liftoff func: 8:0xfa load from 0000000000000002 val: i64:-4688528683866062848 / beef0000beef0000 +liftoff func: 9:0x103 load from 0000000000000002 val: f64:-0.000015 / beef0000beef0000 diff --git a/deps/v8/test/message/wasm-trace-memory.js b/deps/v8/test/message/wasm-trace-memory.js index e1091ad4c7..b31dbb8e1f 100644 --- a/deps/v8/test/message/wasm-trace-memory.js +++ b/deps/v8/test/message/wasm-trace-memory.js @@ -4,7 +4,6 @@ // Flags: --no-stress-opt --trace-wasm-memory --no-liftoff // Flags: --experimental-wasm-simd -// Flags: --enable-sse3 --enable-sse4-1 load("test/mjsunit/wasm/wasm-module-builder.js"); diff --git a/deps/v8/test/message/wasm-trace-memory.out b/deps/v8/test/message/wasm-trace-memory.out index 373ff8f78b..e3491fdb1c 100644 --- a/deps/v8/test/message/wasm-trace-memory.out +++ b/deps/v8/test/message/wasm-trace-memory.out @@ -1,14 +1,14 @@ -turbofan func: 0+0x3 load from 0000000000000004 val: i32:0 / 00000000 -turbofan func: 1+0x3 load from 0000000000000001 val: i8:0 / 00 -turbofan func: 3+0x5 store to 0000000000000004 val: i32:305419896 / 12345678 -turbofan func: 0+0x3 load from 0000000000000002 val: i32:1450704896 / 56780000 -turbofan func: 1+0x3 load from 0000000000000006 val: i8:52 / 34 -turbofan func: 2+0x3 load from 0000000000000002 val: f32:68169720922112.000000 / 56780000 -turbofan func: 4+0x5 store to 0000000000000004 val: i8:171 / ab -turbofan func: 0+0x3 load from 0000000000000002 val: i32:1454047232 / 56ab0000 -turbofan func: 2+0x3 load from 0000000000000002 val: f32:94008244174848.000000 / 56ab0000 -turbofan func: 6+0x7 store to 0000000000000004 val: s128:48879 48879 48879 48879 / 0000beef 0000beef 0000beef 0000beef -turbofan func: 5+0x3 load from 0000000000000002 val: s128:-1091633152 -1091633152 -1091633152 -1091633152 / beef0000 beef0000 beef0000 beef0000 -turbofan func: 7+0x3 load from 0000000000000004 val: i16:48879 / beef -turbofan func: 8+0x3 load from 0000000000000002 val: i64:-4688528683866062848 / beef0000beef0000 -turbofan func: 9+0x3 load from 0000000000000002 val: f64:-0.000015 / beef0000beef0000 +turbofan func: 0:0xab load from 0000000000000004 val: i32:0 / 00000000 +turbofan func: 1:0xb4 load from 0000000000000001 val: i8:0 / 00 +turbofan func: 3:0xc8 store to 0000000000000004 val: i32:305419896 / 12345678 +turbofan func: 0:0xab load from 0000000000000002 val: i32:1450704896 / 56780000 +turbofan func: 1:0xb4 load from 0000000000000006 val: i8:52 / 34 +turbofan func: 2:0xbd load from 0000000000000002 val: f32:68169720922112.000000 / 56780000 +turbofan func: 4:0xd2 store to 0000000000000004 val: i8:171 / ab +turbofan func: 0:0xab load from 0000000000000002 val: i32:1454047232 / 56ab0000 +turbofan func: 2:0xbd load from 0000000000000002 val: f32:94008244174848.000000 / 56ab0000 +turbofan func: 6:0xe8 store to 0000000000000004 val: s128:48879 48879 48879 48879 / 0000beef 0000beef 0000beef 0000beef +turbofan func: 5:0xda load from 0000000000000002 val: s128:-1091633152 -1091633152 -1091633152 -1091633152 / beef0000 beef0000 beef0000 beef0000 +turbofan func: 7:0xf1 load from 0000000000000004 val: i16:48879 / beef +turbofan func: 8:0xfa load from 0000000000000002 val: i64:-4688528683866062848 / beef0000beef0000 +turbofan func: 9:0x103 load from 0000000000000002 val: f64:-0.000015 / beef0000beef0000 diff --git a/deps/v8/test/mjsunit/BUILD.gn b/deps/v8/test/mjsunit/BUILD.gn index 1acef4ef64..2bdfd797d5 100644 --- a/deps/v8/test/mjsunit/BUILD.gn +++ b/deps/v8/test/mjsunit/BUILD.gn @@ -24,14 +24,10 @@ group("v8_mjsunit") { "../../tools/profile.mjs", "../../tools/profile_view.mjs", "../../tools/splaytree.mjs", - "../../tools/system-analyzer/helper.mjs", - "../../tools/system-analyzer/log/api.mjs", - "../../tools/system-analyzer/log/code.mjs", - "../../tools/system-analyzer/log/ic.mjs", - "../../tools/system-analyzer/log/log.mjs", - "../../tools/system-analyzer/log/map.mjs", + "../../tools/system-analyzer/log/", "../../tools/system-analyzer/processor.mjs", "../../tools/system-analyzer/timeline.mjs", + "../../tools/system-analyzer/helper.mjs", "../../tools/tickprocessor.mjs", ] } diff --git a/deps/v8/test/mjsunit/baseline/test-osr.js b/deps/v8/test/mjsunit/baseline/test-osr.js new file mode 100644 index 0000000000..8add12ddb2 --- /dev/null +++ b/deps/v8/test/mjsunit/baseline/test-osr.js @@ -0,0 +1,51 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --allow-natives-syntax --sparkplug --no-always-sparkplug --use-osr +// Flags: --opt --no-always-opt --deopt-every-n-times=0 + +function isExecutingBaseline(func) { + let opt_status = %GetOptimizationStatus(func); + return (opt_status & V8OptimizationStatus.kTopmostFrameIsBaseline) !== 0; +} + +function f() { + for (var i = 0; i <= 20; i++) { + if (i == 5) { + %BaselineOsr(); + } + if (i > 5) { + assertTrue(isBaseline(f)); + assertTrue(isExecutingBaseline(f)); + } + } +} + +%NeverOptimizeFunction(f); +f(); + +var expectedStatus = V8OptimizationStatus.kTopmostFrameIsInterpreted; + +function checkTopmostFrame(func) { + let opt_status = %GetOptimizationStatus(func); + assertTrue ((opt_status & expectedStatus) !== 0, "Expected flag " + + expectedStatus + " to be set in optimization status"); +} + +function g() { + for (var i = 0; i <= 20; i++) { + checkTopmostFrame(g) + if (i == 2) { + %BaselineOsr(); + expectedStatus = V8OptimizationStatus.kTopmostFrameIsBaseline; + } + if (i == 5) { + %OptimizeOsr(); + expectedStatus = V8OptimizationStatus.kTopmostFrameIsTurboFanned; + } + } +} + +%PrepareFunctionForOptimization(g); +g(); diff --git a/deps/v8/test/mjsunit/compiler/bigint-asuintn.js b/deps/v8/test/mjsunit/compiler/bigint-asuintn.js new file mode 100644 index 0000000000..fb127bad9d --- /dev/null +++ b/deps/v8/test/mjsunit/compiler/bigint-asuintn.js @@ -0,0 +1,37 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --allow-natives-syntax --opt --no-always-opt + + +function f(x) { + return BigInt.asUintN(3, x); +} + +%PrepareFunctionForOptimization(f); +assertEquals(7n, f(7n)); +assertEquals(1n, f(9n)); +%OptimizeFunctionOnNextCall(f); +assertEquals(7n, f(7n)); +assertEquals(1n, f(9n)); +assertOptimized(f); + +// BigInt.asUintN throws TypeError for non-BigInt arguments. +assertThrows(() => f(2), TypeError); +if(%Is64Bit()) { + // On 64 bit architectures TurboFan optimizes BigInt.asUintN to native code + // that deoptimizes on non-BigInt arguments. + assertUnoptimized(f); + + // The next time the function is optimized, speculation should be disabled + // so the builtin call is kept, which won't deoptimize again. + %PrepareFunctionForOptimization(f); + %OptimizeFunctionOnNextCall(f); +} +assertEquals(7n, f(7n)); +assertOptimized(f); + +// Re-optimized still throws but does not deopt-loop. +assertThrows(() => f(2), TypeError); +assertOptimized(f); diff --git a/deps/v8/test/mjsunit/compiler/concurrent-invalidate-transition-map.js b/deps/v8/test/mjsunit/compiler/concurrent-invalidate-transition-map.js index ac0e9ef59e..e005331221 100644 --- a/deps/v8/test/mjsunit/compiler/concurrent-invalidate-transition-map.js +++ b/deps/v8/test/mjsunit/compiler/concurrent-invalidate-transition-map.js @@ -27,7 +27,7 @@ // Flags: --track-fields --track-double-fields --allow-natives-syntax // Flags: --concurrent-recompilation --block-concurrent-recompilation -// Flags: --no-always-opt +// Flags: --no-always-opt --no-turbo-concurrent-get-property-access-info if (!%IsConcurrentRecompilationSupported()) { print("Concurrent recompilation is disabled. Skipping this test."); diff --git a/deps/v8/test/mjsunit/compiler/concurrent-proto-change.js b/deps/v8/test/mjsunit/compiler/concurrent-proto-change.js index df8d629f32..6ee45ef342 100644 --- a/deps/v8/test/mjsunit/compiler/concurrent-proto-change.js +++ b/deps/v8/test/mjsunit/compiler/concurrent-proto-change.js @@ -27,7 +27,7 @@ // Flags: --allow-natives-syntax --no-always-opt // Flags: --concurrent-recompilation --block-concurrent-recompilation -// Flags: --no-always-opt +// Flags: --no-always-opt --no-turbo-concurrent-get-property-access-info if (!%IsConcurrentRecompilationSupported()) { print("Concurrent recompilation is disabled. Skipping this test."); diff --git a/deps/v8/test/mjsunit/compiler/deopt-pretenure.js b/deps/v8/test/mjsunit/compiler/deopt-pretenure.js new file mode 100644 index 0000000000..7823dc94fa --- /dev/null +++ b/deps/v8/test/mjsunit/compiler/deopt-pretenure.js @@ -0,0 +1,72 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --allow-natives-syntax --opt --no-always-opt +// Flags: --allocation-site-pretenuring --stress-gc-during-compilation +// Flags: --stress-scavenge=0 +// Flags: --max-optimized-bytecode-size=132000 + +function CheckOptimizationStatus(func, expectedOptimizationStatus) { + let opt_status = %GetOptimizationStatus(func); + assertTrue ((opt_status & expectedOptimizationStatus) !== 0, + "Expected flag " + expectedOptimizationStatus + + " to be set in optimization status"); +} + +// Trigger pretenuring decision change at entry, deopting at bytecode offset -1. +let arr = []; +var empty; +function DeoptEntry(expectedStatus) { + CheckOptimizationStatus(DeoptEntry, expectedStatus); + empty = []; + arr.push(empty); +} + +%PrepareFunctionForOptimization(DeoptEntry); +DeoptEntry(V8OptimizationStatus.kTopmostFrameIsInterpreted + | V8OptimizationStatus.kTopmostFrameIsBaseline); + +%OptimizeFunctionOnNextCall(DeoptEntry); +// Force the allocation site to be pretenured. +assertTrue(%PretenureAllocationSite(empty)); +// This call should deopt at entry because of the pretenuring decision change. +DeoptEntry(V8OptimizationStatus.kTopmostFrameIsInterpreted + | V8OptimizationStatus.kTopmostFrameIsBaseline); + +%PrepareFunctionForOptimization(DeoptEntry); +%OptimizeFunctionOnNextCall(DeoptEntry); +// Function should be compiled now. +DeoptEntry(V8OptimizationStatus.kTopmostFrameIsTurboFanned); + +// Trigger pretenuring decision change during OSR. +function createSource(name, fillCnt) { + var src = + `function ${name}() { + let arr = []; + for (var i = 0; i < 10; i++) { + let local_arr = []; + arr[i] = local_arr;` + // Useless bytecodes to force a wider jump. + for (var i = 0; i < fillCnt; i++) { + src += ' try {} catch (e) {}\n'; + } + src += + ` if (i == 5) { + %OptimizeOsr(); + %PretenureAllocationSite(local_arr); + } + } + } + %PrepareFunctionForOptimization(${name}); + ${name}();` + return src; +} + +// Deopt at JumpLoop. +eval(createSource('Loop',0)); +// Deopt at JumpLoop.Wide. +eval(createSource('LoopWide',0xFF)); +// Deopt at JumpLoop.ExtraWide. +// --max-optimized-bytecode-size has to be large enough to compile this. +eval(createSource('LoopExtraWide',0xFFF)); diff --git a/deps/v8/test/mjsunit/compiler/fast-api-calls.js b/deps/v8/test/mjsunit/compiler/fast-api-calls.js index c61a7a62a0..b673fc714e 100644 --- a/deps/v8/test/mjsunit/compiler/fast-api-calls.js +++ b/deps/v8/test/mjsunit/compiler/fast-api-calls.js @@ -9,9 +9,12 @@ // --always-opt is disabled because we rely on particular feedback for // optimizing to the fastest path. // Flags: --no-always-opt +// The test relies on optimizing/deoptimizing at predictable moments, so +// it's not suitable for deoptimization fuzzing. +// Flags: --deopt-every-n-times=0 -assertThrows(() => d8.test.fast_c_api()); -const fast_c_api = new d8.test.fast_c_api(); +assertThrows(() => d8.test.FastCAPI()); +const fast_c_api = new d8.test.FastCAPI(); // ----------- add_all ----------- // `add_all` has the following signature: @@ -36,24 +39,28 @@ if (fast_c_api.supports_fp_params) { // Test that regular call hits the fast path. fast_c_api.reset_counts(); assertEquals(add_all_result, add_all()); + assertOptimized(add_all); assertEquals(1, fast_c_api.fast_call_count()); assertEquals(0, fast_c_api.slow_call_count()); // Test fallback to slow path. fast_c_api.reset_counts(); assertEquals(add_all_result, add_all(true)); + assertOptimized(add_all); assertEquals(1, fast_c_api.fast_call_count()); assertEquals(1, fast_c_api.slow_call_count()); // Test that no fallback hits the fast path again. fast_c_api.reset_counts(); assertEquals(add_all_result, add_all()); + assertOptimized(add_all); assertEquals(1, fast_c_api.fast_call_count()); assertEquals(0, fast_c_api.slow_call_count()); } else { // Test that calling with unsupported types hits the slow path. fast_c_api.reset_counts(); assertEquals(add_all_result, add_all()); + assertOptimized(add_all); assertEquals(0, fast_c_api.fast_call_count()); assertEquals(1, fast_c_api.slow_call_count()); } @@ -71,15 +78,17 @@ const add_all_mismatch_result = add_all_mismatch(); fast_c_api.reset_counts(); assertEquals(add_all_mismatch_result, add_all_mismatch()); -assertEquals(1, fast_c_api.slow_call_count()); -assertEquals(0, fast_c_api.fast_call_count()); // If the function was ever optimized to the fast path, it should // have been deoptimized due to the argument types mismatch. If it // wasn't optimized due to lack of support for FP params, it will // stay optimized. if (fast_c_api.supports_fp_params) { assertUnoptimized(add_all_mismatch); +} else { + assertOptimized(add_all_mismatch); } +assertEquals(0, fast_c_api.fast_call_count()); +assertEquals(1, fast_c_api.slow_call_count()); // ----------- add_32bit_int ----------- // `add_32bit_int` has the following signature: @@ -98,18 +107,21 @@ assertEquals(add_32bit_int_result, add_32bit_int()); // Test that regular call hits the fast path. fast_c_api.reset_counts(); assertEquals(add_32bit_int_result, add_32bit_int()); +assertOptimized(add_32bit_int); assertEquals(1, fast_c_api.fast_call_count()); assertEquals(0, fast_c_api.slow_call_count()); // Test fallback to slow path. fast_c_api.reset_counts(); assertEquals(add_32bit_int_result, add_32bit_int(true)); +assertOptimized(add_32bit_int); assertEquals(1, fast_c_api.fast_call_count()); assertEquals(1, fast_c_api.slow_call_count()); // Test that no fallback hits the fast path again. fast_c_api.reset_counts(); assertEquals(add_32bit_int_result, add_32bit_int()); +assertOptimized(add_32bit_int); assertEquals(1, fast_c_api.fast_call_count()); assertEquals(0, fast_c_api.slow_call_count()); @@ -125,24 +137,56 @@ assertEquals(add_32bit_int_result, add_32bit_int_mismatch(false, -42, 45)); // Test that passing extra argument stays on the fast path. fast_c_api.reset_counts(); assertEquals(add_32bit_int_result, add_32bit_int_mismatch(false, -42, 45, -42)); +assertOptimized(add_32bit_int_mismatch); assertEquals(1, fast_c_api.fast_call_count()); +assertEquals(0, fast_c_api.slow_call_count()); +%PrepareFunctionForOptimization(add_32bit_int_mismatch); // Test that passing wrong argument types stays on the fast path. fast_c_api.reset_counts(); -assertEquals(Math.round(-42 + 3.14), add_32bit_int_mismatch(false, -42, 3.14)); +let mismatch_result = add_32bit_int_mismatch(false, -42, 3.14); +assertOptimized(add_32bit_int_mismatch); +assertEquals(Math.round(-42 + 3.14), mismatch_result); assertEquals(1, fast_c_api.fast_call_count()); +assertEquals(0, fast_c_api.slow_call_count()); + +// Test that passing arguments non-convertible to number falls down the slow path. +fast_c_api.reset_counts(); +assertEquals(0, add_32bit_int_mismatch(false, -4294967296, Symbol())); +assertUnoptimized(add_32bit_int_mismatch); +assertEquals(0, fast_c_api.fast_call_count()); +assertEquals(1, fast_c_api.slow_call_count()); + +// Optimize again. +%OptimizeFunctionOnNextCall(add_32bit_int_mismatch); +assertEquals(add_32bit_int_result, add_32bit_int_mismatch(false, -42, 45)); +assertOptimized(add_32bit_int_mismatch); // Test that passing too few argument falls down the slow path, // because it's an argument type mismatch (undefined vs. int). fast_c_api.reset_counts(); assertEquals(-42, add_32bit_int_mismatch(false, -42)); -assertEquals(1, fast_c_api.slow_call_count()); -assertEquals(0, fast_c_api.fast_call_count()); assertUnoptimized(add_32bit_int_mismatch); +assertEquals(0, fast_c_api.fast_call_count()); +assertEquals(1, fast_c_api.slow_call_count()); // Test that the function can be optimized again. %PrepareFunctionForOptimization(add_32bit_int_mismatch); %OptimizeFunctionOnNextCall(add_32bit_int_mismatch); fast_c_api.reset_counts(); assertEquals(add_32bit_int_result, add_32bit_int_mismatch(false, -42, 45)); +assertOptimized(add_32bit_int_mismatch); assertEquals(1, fast_c_api.fast_call_count()); +assertEquals(0, fast_c_api.slow_call_count()); + +// Test function overloads +function overloaded_add_all(should_fallback = false) { + return fast_c_api.overloaded_add_all(should_fallback, + -42, 45, Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER, + max_safe_float * 0.5, Math.PI); +} + +%PrepareFunctionForOptimization(overloaded_add_all); +assertEquals(add_all_result, overloaded_add_all()); +%OptimizeFunctionOnNextCall(overloaded_add_all); +assertEquals(add_all_result, overloaded_add_all()); diff --git a/deps/v8/test/mjsunit/compiler/fast-api-interface-types.js b/deps/v8/test/mjsunit/compiler/fast-api-interface-types.js new file mode 100644 index 0000000000..33a17ebe04 --- /dev/null +++ b/deps/v8/test/mjsunit/compiler/fast-api-interface-types.js @@ -0,0 +1,61 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// This file interface types used with fast API calls. + +// Flags: --turbo-fast-api-calls --allow-natives-syntax --opt +// Flags: --no-always-opt +// Flags: --deopt-every-n-times=0 + +const fast_c_api = new d8.test.FastCAPI(); +// We create another API object to avoid migrating the map of fast_c_api +// when using it as a prototype. +const another_fast_c_api = new d8.test.FastCAPI(); + +function is_fast_c_api_object(obj, should_fallback = false) { + return fast_c_api.is_fast_c_api_object(should_fallback, obj); +} + +%PrepareFunctionForOptimization(is_fast_c_api_object); +assertTrue(is_fast_c_api_object(another_fast_c_api)); +%OptimizeFunctionOnNextCall(is_fast_c_api_object); + +// Test that fast_c_api is an API object wrapping a C++ one. +fast_c_api.reset_counts(); +assertTrue(is_fast_c_api_object(another_fast_c_api)); +assertOptimized(is_fast_c_api_object); +assertEquals(1, fast_c_api.fast_call_count()); +assertEquals(0, fast_c_api.slow_call_count()); + +// Same test but taking the fallback to the slow path. +fast_c_api.reset_counts(); +assertTrue(is_fast_c_api_object(another_fast_c_api, true)); +assertOptimized(is_fast_c_api_object); +assertEquals(1, fast_c_api.fast_call_count()); +assertEquals(1, fast_c_api.slow_call_count()); + +// Test that a regular JS object returns false. +fast_c_api.reset_counts(); +assertFalse(is_fast_c_api_object({})); +assertOptimized(is_fast_c_api_object); +assertEquals(1, fast_c_api.fast_call_count()); +assertEquals(0, fast_c_api.slow_call_count()); + +// Test that a subclassed object returns false. +const child = Object.create(another_fast_c_api); +fast_c_api.reset_counts(); +assertFalse(is_fast_c_api_object(child)); +assertOptimized(is_fast_c_api_object); +assertEquals(1, fast_c_api.fast_call_count()); +assertEquals(0, fast_c_api.slow_call_count()); + +// Test that passing an API object of an unrelated (leaf) type +// causes the function to return false, because an object of +// FastCAPI type is expected as an argument. +const leaf_interface_obj = new d8.test.LeafInterfaceType(); +fast_c_api.reset_counts(); +assertFalse(is_fast_c_api_object(leaf_interface_obj)); +assertOptimized(is_fast_c_api_object); +assertEquals(1, fast_c_api.fast_call_count()); +assertEquals(0, fast_c_api.slow_call_count()); diff --git a/deps/v8/test/mjsunit/compiler/load-elimination-const-field.js b/deps/v8/test/mjsunit/compiler/load-elimination-const-field.js index fb227dd93d..0f215c2d80 100644 --- a/deps/v8/test/mjsunit/compiler/load-elimination-const-field.js +++ b/deps/v8/test/mjsunit/compiler/load-elimination-const-field.js @@ -134,7 +134,8 @@ } } - %EnsureFeedbackVectorForFunction(B); + %PrepareFunctionForOptimization(B); + %PrepareFunctionForOptimization(inst_param); inst_param(1); inst_param(2); %OptimizeFunctionOnNextCall(inst_param); inst_param(3); @@ -165,7 +166,6 @@ } } - %EnsureFeedbackVectorForFunction(B); %PrepareFunctionForOptimization(inst_computed); inst_computed(1); inst_computed(2); %OptimizeFunctionOnNextCall(inst_computed); inst_computed(3); diff --git a/deps/v8/test/mjsunit/compiler/opt-higher-order-functions.js b/deps/v8/test/mjsunit/compiler/opt-higher-order-functions.js index 3fdcabe504..380a6ceac2 100644 --- a/deps/v8/test/mjsunit/compiler/opt-higher-order-functions.js +++ b/deps/v8/test/mjsunit/compiler/opt-higher-order-functions.js @@ -28,6 +28,51 @@ assertOptimized(TestFunctionPrototypeApply); TestFunctionPrototypeApply("abc"); assertUnoptimized(TestFunctionPrototypeApply); +// Testing: FunctionPrototypeApply with non-HeapConstant Receiver +var MathMin = (function() { return Math.min.apply(null, arguments); }) + +function TestFunctionPrototypeApplyReceiver(func, x, y) { + return func(x, y); +} + +%PrepareFunctionForOptimization(MathMin); +%PrepareFunctionForOptimization(TestFunctionPrototypeApplyReceiver); +assertEquals(-13, TestFunctionPrototypeApplyReceiver(MathMin, -13, 42)); +assertEquals(-4, TestFunctionPrototypeApplyReceiver(MathMin, 3, -4)); +%OptimizeFunctionOnNextCall(TestFunctionPrototypeApplyReceiver); +assertEquals(7, TestFunctionPrototypeApplyReceiver(MathMin, 7, 9)); +assertOptimized(TestFunctionPrototypeApplyReceiver); +TestFunctionPrototypeApplyReceiver(MathMin, "abc"); +assertUnoptimized(TestFunctionPrototypeApplyReceiver); + +// Testing: FunctionPrototypeApply with non-HeapConstant Receiver won't cause +// deopt loop +(function() { + + var F; + function foo() { + return F.apply(null, arguments); + } + function test(x, y) { + return foo(x, y); + } + F = Math.min; + %PrepareFunctionForOptimization(foo); + %PrepareFunctionForOptimization(test); + assertEquals(-13, test(-13, 42)); + %OptimizeFunctionOnNextCall(test); + assertEquals(-13, test(-13, 42)); + assertOptimized(test); + %PrepareFunctionForOptimization(test); + F = Math.max; + assertEquals(42, test(-13, 42)); + assertUnoptimized(test); + %OptimizeFunctionOnNextCall(test); + assertEquals(42, test(-13, 42)); + F = Math.min; + assertEquals(-13, test(-13, 42)); + assertOptimized(test); +})(); // Testing: FunctionPrototypeCall function TestFunctionPrototypeCall(x) { diff --git a/deps/v8/test/mjsunit/compiler/regress-1195650.js b/deps/v8/test/mjsunit/compiler/regress-1195650.js new file mode 100644 index 0000000000..b82cc013eb --- /dev/null +++ b/deps/v8/test/mjsunit/compiler/regress-1195650.js @@ -0,0 +1,31 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --allow-natives-syntax + +(function() { + var gaga = "gaga"; + function foo(a) { + let y = Math.min(Infinity ? gaga : Infinity, -0) / 0; + if (a) y = -0; + return y ? 1 : 0; + } + %PrepareFunctionForOptimization(foo); + foo(false); + %OptimizeFunctionOnNextCall(foo); + assertEquals(0, foo(false)); +})(); + +(function() { + var gaga = "gaga"; + function foo(a) { + let y = Math.min(Infinity ? gaga : Infinity, -0) % 0; + if (a) y = 1.3; + return y ? 1 : 0; + } + %PrepareFunctionForOptimization(foo); + foo(false); + %OptimizeFunctionOnNextCall(foo); + assertEquals(0, foo(false)); +})(); diff --git a/deps/v8/test/mjsunit/compiler/regress-1196185.js b/deps/v8/test/mjsunit/compiler/regress-1196185.js new file mode 100644 index 0000000000..be5b219fb4 --- /dev/null +++ b/deps/v8/test/mjsunit/compiler/regress-1196185.js @@ -0,0 +1,46 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --allow-natives-syntax --disable-in-process-stack-traces +// Flags: --gc-interval=500 --stress-compaction + +class X {} +function rando() {} + +let named; +function foo(input) { + var b; + rando(), { + blah: function () { b = b(); }, + }; + + for (var i = 0; i < 10; i++) { + var r = rando(); + var broom; + + try { + input[r]; + named(); + } catch (e) {} + + try { + broom = __v_859.exports.main; + } catch (e) {} + + try { + for (var j = 0; j < 10; j++) { + broom(); + } + } catch (e) {} + } +} + +function testfunc() { + for (var i = 0; i < 10; i++) { + %PrepareFunctionForOptimization(foo); + %OptimizeFunctionOnNextCall(foo); + foo(); + } +} +testfunc(); diff --git a/deps/v8/test/mjsunit/compiler/regress-1196683.js b/deps/v8/test/mjsunit/compiler/regress-1196683.js index abd7d6b2f8..7fc7957cc6 100644 --- a/deps/v8/test/mjsunit/compiler/regress-1196683.js +++ b/deps/v8/test/mjsunit/compiler/regress-1196683.js @@ -14,7 +14,7 @@ assertEquals(-(2**31) + 1, foo()); %OptimizeFunctionOnNextCall(foo); assertEquals(-(2**31) + 1, foo()); -}); +})(); // The remaining tests already passed without the bugfix. diff --git a/deps/v8/test/mjsunit/compiler/regress-1202312.js b/deps/v8/test/mjsunit/compiler/regress-1202312.js new file mode 100644 index 0000000000..ad2cfa4228 --- /dev/null +++ b/deps/v8/test/mjsunit/compiler/regress-1202312.js @@ -0,0 +1,24 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --allow-natives-syntax + +function foo() { + var __v_0 = { x: 1 }; + var __v_1 = { }; + var __v_2 = 0; + for (var i = 0; i < 1; i = {}) { + __v_0 += __v_0.x + 0.5; + __v_2 += __v_2.x % 0.5; + __v_2 += __v_2.x % 0.5; + __v_2 += __v_0.x < 6; + __v_2 += __v_0.x === 7; + __v_2 = __v_1; + } +} + +%PrepareFunctionForOptimization(foo); +foo(); +%OptimizeFunctionOnNextCall(foo); +foo(); diff --git a/deps/v8/test/mjsunit/compiler/regress-1202625.js b/deps/v8/test/mjsunit/compiler/regress-1202625.js new file mode 100644 index 0000000000..ad85683ec8 --- /dev/null +++ b/deps/v8/test/mjsunit/compiler/regress-1202625.js @@ -0,0 +1,21 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --allow-natives-syntax + +function foo() { + var __v_10 = { x: 1 }; + var __v_11 = { y: 1 }; + for (var i = 0; i < 1; i = {}) { + i += Math.abs(__v_10.x); + i += Math.abs(__v_10.x); + __v_10 = __v_11; + } +} + +%PrepareFunctionForOptimization(foo); +foo(); +foo(); +%OptimizeFunctionOnNextCall(foo); +foo(); diff --git a/deps/v8/test/mjsunit/compiler/regress-1202924.js b/deps/v8/test/mjsunit/compiler/regress-1202924.js new file mode 100644 index 0000000000..a8b8970ee2 --- /dev/null +++ b/deps/v8/test/mjsunit/compiler/regress-1202924.js @@ -0,0 +1,18 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --no-lazy-feedback-allocation --interrupt-budget=1000 +// Flags: --no-analyze-environment-liveness + +function foo() { + for (var i = 1; i < 10; i++) { + var n = 1; + for (var j = 1; j < 10; j++) { + if (n == j) j = 0; + foo = j % - n; + n++; + } + } +} +foo(); diff --git a/deps/v8/test/mjsunit/compiler/regress-1203116.js b/deps/v8/test/mjsunit/compiler/regress-1203116.js new file mode 100644 index 0000000000..62a53cb412 --- /dev/null +++ b/deps/v8/test/mjsunit/compiler/regress-1203116.js @@ -0,0 +1,30 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --allow-natives-syntax + +function bar(x) { + x.f = 13.37; +} + +function foo() { + const v2 = {}; + const v3 = {a:42}; + const v4 = {a:42}; + v3.d = 42; + v4.b = v2; + v4.b = 42; + v4.b; + v3.f = v2; + bar(v4); + const v10 = {a:42}; + for (let i = 0; i < 10; i++) { + bar(v10); + } +} + +%PrepareFunctionForOptimization(foo); +foo(); +%OptimizeFunctionOnNextCall(foo); +foo(); diff --git a/deps/v8/test/mjsunit/compiler/regress-crbug-11564.js b/deps/v8/test/mjsunit/compiler/regress-crbug-11564.js new file mode 100644 index 0000000000..4ad964d019 --- /dev/null +++ b/deps/v8/test/mjsunit/compiler/regress-crbug-11564.js @@ -0,0 +1,32 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --allow-natives-syntax --max-optimized-bytecode-size=300000 + +const args = new Array(35000).fill('arg'); + +// Regression test for ReduceJSCreateAsyncFunctionObject. +function outer_async() { + async function g(replace_me) {} + %PrepareFunctionForOptimization(g); + %OptimizeFunctionOnNextCall(g); + new Promise(g); +} + +const outer_async_many_args = outer_async.toLocaleString().replace('replace_me', args); +eval(outer_async_many_args); +outer_async(); + +// Regression test for ReduceJSCreateBoundFunction. +function outer_bind(arg) { + function b() { return 42; }; + return b.bind(null, replace_me); +} + +const outer_bind_many_args = outer_bind.toLocaleString().replace('replace_me', args); +eval(outer_bind_many_args); +%PrepareFunctionForOptimization(outer_bind); +outer_bind(); +%OptimizeFunctionOnNextCall(outer_bind); +outer_bind(); diff --git a/deps/v8/test/mjsunit/compiler/regress-crbug-1201011.js b/deps/v8/test/mjsunit/compiler/regress-crbug-1201011.js new file mode 100644 index 0000000000..f521a60b85 --- /dev/null +++ b/deps/v8/test/mjsunit/compiler/regress-crbug-1201011.js @@ -0,0 +1,11 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --turbo-fast-api-calls + +const fast_c_api = new d8.test.FastCAPI(); +function foo(obj) { + return fast_c_api.is_fast_c_api_object(false, obj); +} +foo(); diff --git a/deps/v8/test/mjsunit/compiler/regress-crbug-1201057.js b/deps/v8/test/mjsunit/compiler/regress-crbug-1201057.js new file mode 100644 index 0000000000..7afaaa6e38 --- /dev/null +++ b/deps/v8/test/mjsunit/compiler/regress-crbug-1201057.js @@ -0,0 +1,9 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --turbo-fast-api-calls + +const fast_c_api = new d8.test.FastCAPI(); +const fast_obj = Object.create(fast_c_api); +assertThrows(() => fast_obj.supports_fp_params); diff --git a/deps/v8/test/mjsunit/compiler/regress-crbug-1201082.js b/deps/v8/test/mjsunit/compiler/regress-crbug-1201082.js new file mode 100644 index 0000000000..2ec25b3a15 --- /dev/null +++ b/deps/v8/test/mjsunit/compiler/regress-crbug-1201082.js @@ -0,0 +1,11 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --turbo-fast-api-calls + +const fast_c_api = new d8.test.FastCAPI(); +function foo(obj) { + return fast_c_api.is_fast_c_api_object(false, obj); +} +foo(1); diff --git a/deps/v8/test/mjsunit/compiler/test-literal-map-migration.js b/deps/v8/test/mjsunit/compiler/test-literal-map-migration.js new file mode 100644 index 0000000000..2c1e631e7b --- /dev/null +++ b/deps/v8/test/mjsunit/compiler/test-literal-map-migration.js @@ -0,0 +1,30 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --allow-natives-syntax --opt --no-always-opt + +function f() { + let r = []; + let o1 = { x: 5 }; + let o2 = { y: 5, inner: { n: 5 } }; + r.push(o1); + r.push(o2); + return r; +} + +%PrepareFunctionForOptimization(f); +{ + let r = f(); + f(); + + // Deprecate all the maps. + r[0].x = 5.5; + r[1].y = 5.5; + r[1].inner.n = 5.5; +} +// We will optimize despite deprecated maps in the boilerplates. +// until code finalization. +%OptimizeFunctionOnNextCall(f); +f(); +assertOptimized(f); diff --git a/deps/v8/test/mjsunit/concurrent-initial-prototype-change-1.js b/deps/v8/test/mjsunit/concurrent-initial-prototype-change-1.js index 3234c61c96..c2135bfaf7 100644 --- a/deps/v8/test/mjsunit/concurrent-initial-prototype-change-1.js +++ b/deps/v8/test/mjsunit/concurrent-initial-prototype-change-1.js @@ -28,7 +28,9 @@ // Flags: --allow-natives-syntax // Flags: --concurrent-recompilation --block-concurrent-recompilation // Flags: --nostress-opt --no-always-opt -// Flags: --no-turbo-direct-heap-access +// Flags: --no-turboprop +// Flags: --no-concurrent-inlining +// Flags: --no-turbo-concurrent-get-property-access-info // --nostress-opt is in place because this particular optimization // (guaranteeing that the Array prototype chain has no elements) is diff --git a/deps/v8/test/mjsunit/const-dict-tracking.js b/deps/v8/test/mjsunit/const-dict-tracking.js index 051239fb5f..c737cbda2a 100644 --- a/deps/v8/test/mjsunit/const-dict-tracking.js +++ b/deps/v8/test/mjsunit/const-dict-tracking.js @@ -5,6 +5,7 @@ // Flags: --allow-natives-syntax --opt --no-always-opt // Flags: --no-stress-flush-bytecode // Flags: --block-concurrent-recompilation +// Flags: --no-turbo-concurrent-get-property-access-info // // Tests tracking of constness of properties stored in dictionary // mode prototypes. diff --git a/deps/v8/test/mjsunit/harmony/class-static-blocks.js b/deps/v8/test/mjsunit/harmony/class-static-blocks.js index b4bb710e68..0bfcd8804c 100644 --- a/deps/v8/test/mjsunit/harmony/class-static-blocks.js +++ b/deps/v8/test/mjsunit/harmony/class-static-blocks.js @@ -113,6 +113,19 @@ assertArrayEquals([undefined], log); } +{ + // 'await' is allowed as an identifier name in named function expressions. + class C1 { static { (function await() {}); } } + // 'return' is allowed across function boundaries inside static blocks. + class C2 { static { + function f1() { return; } + function f2() { return 0; } + let f3 = (x => { return x; }) + let f4 = (x => { return; }) + } + } +} + function assertDoesntParse(expr, context_start, context_end) { assertThrows(() => { eval(`${context_start} class C { static { ${expr} } } ${context_end}`); @@ -131,4 +144,14 @@ for (let [s, e] of [['', ''], // 'await' is disallowed as an identifier. assertDoesntParse('let await;', s, e); assertDoesntParse('await;', s, e); + assertDoesntParse('function await() {}', s, e); + assertDoesntParse('class await() {}', s, e); + assertDoesntParse('try {} catch (await) {}', s, e); + assertDoesntParse('try {} catch ({await}) {}', s, e); + assertDoesntParse('var {await} = 0;', s, e); + assertDoesntParse('({await} = 0);', s, e); + assertDoesntParse('return;', s, e); + assertDoesntParse('return 0;', s, e); + assertDoesntParse('{ return; }', s, e); + assertDoesntParse('{ return 0; }', s, e); } diff --git a/deps/v8/test/mjsunit/harmony/error-cause.js b/deps/v8/test/mjsunit/harmony/error-cause.js new file mode 100644 index 0000000000..eeb1976803 --- /dev/null +++ b/deps/v8/test/mjsunit/harmony/error-cause.js @@ -0,0 +1,221 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --harmony-error-cause + +// Basic error +(function () { + const err = Error('message', { cause: 'a cause' }); + assertEquals('a cause', err.cause); + const descriptor = Object.getOwnPropertyDescriptor(err, 'cause'); + assertEquals('a cause', descriptor.value); + assertFalse(descriptor.enumerable); + assertTrue(descriptor.writable); + assertTrue(descriptor.configurable); +})(); + +// No cause +(function () { + const err = Error('message'); + assertEquals(undefined, err.cause); +})(); + +// Chained errors +(function () { + async function fail() { throw new Error('caused by fail') } + + async function doJob() { + await fail() + .catch(err => { + throw new Error('Found an error', { cause: err }); + }); + } + + async function main() { + try { + await doJob(); + } catch (e) { + assertEquals('Found an error', e.message); + assertEquals('caused by fail', e.cause.message); + } + } + + main(); +})(); + +// AggregateError with cause +(function() { + const err = AggregateError([1, 2, 3], 'aggregate errors', { cause: 'a cause' }); + assertEquals('a cause', err.cause); + const descriptor = Object.getOwnPropertyDescriptor(err, 'cause'); + assertEquals('a cause', descriptor.value); + assertFalse(descriptor.enumerable); + assertTrue(descriptor.writable); + assertTrue(descriptor.configurable); +})(); + +// Options is not an object +(function () { + const err1 = Error('message', 42); + assertEquals(undefined, err1.cause); + const err2 = Error('message', null); + assertEquals(undefined, err2.cause); + const err3 = Error('message', [42]); + assertEquals(undefined, err3.cause); +})(); + +// Options object does not contain 'cause' +(function () { + const err = Error('message', { syy: 'A finnish cause' }); + assertEquals(undefined, err.cause); + assertEquals(undefined, err.syy); +})(); + +// Options is a proxy +(function () { + const options = { cause: 'a cause' }; + const proxy = new Proxy(options, { get: () => 'proxied cause'}); + const err = Error('message', proxy); + assertEquals('proxied cause', err.cause); +})(); + +// Options is a proxy, but does not expose 'cause' +(function () { + const options = { cause: 'a cause' }; + const proxy = new Proxy(options, { + has: (_, key) => key != 'cause', + get: () => 'proxied cause' + }) + const err = Error('message', proxy); + assertEquals(undefined, err.cause); +})(); + +// Options is a proxy, throw in 'get' +(function () { + const options = { cause: 'a cause' }; + const proxy = new Proxy(options, { + get: () => { throw Error('proxy get', { cause: 'no reason' }) }, + }); + try { + Error('message', proxy); + assertUnreachable(); + } catch(e) { + assertEquals('proxy get', e.message); + assertEquals('no reason', e.cause); + } +})(); + +// Options is a proxy, throw in 'has' +(function () { + const options = { cause: 'a cause' }; + const proxy = new Proxy(options, { + has: () => { throw Error('proxy has', { cause: 'no reason' }) }, + }); + try { + Error('message', proxy); + assertUnreachable(); + } catch(e) { + assertEquals('proxy has', e.message); + assertEquals('no reason', e.cause); + } +})(); + +// Cause in the options prototype chain +(function () { + function Options() {}; + Options.prototype.cause = 'cause in the prototype'; + const options = new Options(); + const err = Error('message', options); + assertEquals('cause in the prototype', err.cause); +})(); + +// Cause in the options prototype chain proxy +(function () { + function Options() {}; + Options.prototype = new Proxy({ cause: 42 }, { + get: (_ ,name) => { + assertEquals('cause', name); + return 'cause in the prototype' + }}); + const options = new Options(); + const err = Error('message', options); + assertEquals('cause in the prototype', err.cause); +})(); + +// Cause in the options prototype chain proxy and throw +(function () { + function Options() {}; + Options.prototype = new Proxy({ cause: 42 }, { get: () => { throw Error('cause in the prototype')} }); + const options = new Options(); + try { + Error('message', options); + assertUnreachable(); + } catch(e) { + assertEquals('cause in the prototype', e.message); + } +})(); + +// Change Error.cause in the prototype +(function () { + Error.prototype.cause = 'main cause'; + const err1 = new Error('err1'); + assertEquals('main cause', err1.cause); + const desc1 = Object.getOwnPropertyDescriptor(err1, 'cause'); + assertEquals(undefined, desc1); + + const err2 = new Error('err2', { cause: 'another cause' }); + assertEquals(err2.cause, 'another cause'); + const desc2 = Object.getOwnPropertyDescriptor(err2, 'cause'); + assertFalse(desc2.enumerable); + assertTrue(desc2.writable); + assertTrue(desc2.configurable); + + const err3 = new Error('err3'); + err3.cause = 'after err3'; + assertEquals('after err3', err3.cause); + const desc3 = Object.getOwnPropertyDescriptor(err3, 'cause'); + assertTrue(desc3.enumerable); + assertTrue(desc3.writable); + assertTrue(desc3.configurable); +})(); + +// Change prototype to throw in setter +(function() { + const my_proto = {}; + Object.defineProperty(my_proto, 'cause', {set: function(x) { throw 'foo' } }); + Error.prototype.__proto__ = my_proto + const err = Error('message', { cause: 'a cause' }); + assertEquals('a cause', err.cause); +})(); + +// Use defineProperty to change Error cause and throw +(function () { + Object.defineProperty(Error.prototype, 'cause', { + get: () => { throw Error('from get', { cause: 'inside get' }) }, + }); + const err1 = new Error('err1'); + try { + err1.cause; + assertUnreachable(); + } catch(e) { + assertEquals('from get', e.message); + assertEquals('inside get', e.cause); + } + const err2 = new Error('err2', { cause: 'another cause' }); + assertEquals('another cause', err2.cause); +})(); + +// Serialize and deserialize error object +(function () { + const err = Error('message', { cause: 'a cause' }); + const worker = new Worker('onmessage = (msg) => postMessage(msg)', { type: 'string' }); + worker.postMessage(err); + const serialized_err = worker.getMessage(); + assertEquals(err, serialized_err); + const descriptor = Object.getOwnPropertyDescriptor(serialized_err, 'cause'); + assertEquals(descriptor.value, 'a cause'); + assertFalse(descriptor.enumerable); + assertTrue(descriptor.writable); + assertTrue(descriptor.configurable); +})(); diff --git a/deps/v8/test/mjsunit/harmony/modules-import-assertions-dynamic-12.mjs b/deps/v8/test/mjsunit/harmony/modules-import-assertions-dynamic-12.mjs new file mode 100644 index 0000000000..0cbb5f25de --- /dev/null +++ b/deps/v8/test/mjsunit/harmony/modules-import-assertions-dynamic-12.mjs @@ -0,0 +1,26 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --allow-natives-syntax --harmony-import-assertions + +let result1; +let result2; + +let badAssertProxy1 = new Proxy({}, { ownKeys() { throw "bad ownKeys!"; } }); +import('./modules-skip-1.mjs', { assert: badAssertProxy1 }).then( + () => assertUnreachable('Should have failed due to throwing ownKeys'), + error => result1 = error); + +let badAssertProxy2 = new Proxy( + {foo: "bar"}, + { getOwnPropertyDescriptor() { throw "bad getOwnPropertyDescriptor!"; } }); +import('./modules-skip-1.mjs', { assert: badAssertProxy2 }).then( + () => assertUnreachable( + 'Should have failed due to throwing getOwnPropertyDescriptor'), + error => result2 = error); + +%PerformMicrotaskCheckpoint(); + +assertEquals('bad ownKeys!', result1); +assertEquals('bad getOwnPropertyDescriptor!', result2);
\ No newline at end of file diff --git a/deps/v8/test/mjsunit/harmony/to-string.js b/deps/v8/test/mjsunit/harmony/to-string.js index dfe36c2dd9..87b5fe4415 100644 --- a/deps/v8/test/mjsunit/harmony/to-string.js +++ b/deps/v8/test/mjsunit/harmony/to-string.js @@ -5,50 +5,37 @@ // Flags: --allow-natives-syntax assertEquals("1", %ToString(1)); -assertEquals("1", %_ToString(1)); assertEquals("0.5", %ToString(.5)); -assertEquals("0.5", %_ToString(.5)); assertEquals("null", %ToString(null)); -assertEquals("null", %_ToString(null)); assertEquals("true", %ToString(true)); -assertEquals("true", %_ToString(true)); assertEquals("false", %ToString(false)); -assertEquals("false", %_ToString(false)); assertEquals("undefined", %ToString(undefined)); -assertEquals("undefined", %_ToString(undefined)); assertEquals("random text", %ToString("random text")); -assertEquals("random text", %_ToString("random text")); assertThrows(function() { %ToString(Symbol.toPrimitive) }, TypeError); -assertThrows(function() { %_ToString(Symbol.toPrimitive) }, TypeError); var a = { toString: function() { return "xyz" }}; assertEquals("xyz", %ToString(a)); -assertEquals("xyz", %_ToString(a)); var b = { valueOf: function() { return 42 }}; assertEquals("[object Object]", %ToString(b)); -assertEquals("[object Object]", %_ToString(b)); var c = { toString: function() { return "x"}, valueOf: function() { return 123 } }; assertEquals("x", %ToString(c)); -assertEquals("x", %_ToString(c)); var d = { [Symbol.toPrimitive]: function(hint) { return hint } }; assertEquals("string", %ToString(d)); -assertEquals("string", %_ToString(d)); var e = new Date(0); assertEquals(e.toString(), %ToString(e)); -assertEquals(e.toString(), %_ToString(e)); diff --git a/deps/v8/test/mjsunit/harmony/weakrefs/finalizationregistry-independent-lifetime.js b/deps/v8/test/mjsunit/harmony/weakrefs/finalizationregistry-independent-lifetime.js index 4e0ab2af8e..7d7ec6f991 100644 --- a/deps/v8/test/mjsunit/harmony/weakrefs/finalizationregistry-independent-lifetime.js +++ b/deps/v8/test/mjsunit/harmony/weakrefs/finalizationregistry-independent-lifetime.js @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Flags: --expose-gc --noincremental-marking +// Flags: --expose-gc --noincremental-marking --no-concurrent-inlining let cleanup_called = false; function cleanup(holdings) { diff --git a/deps/v8/test/mjsunit/ic-megadom-2.js b/deps/v8/test/mjsunit/ic-megadom-2.js new file mode 100644 index 0000000000..325aa2bdad --- /dev/null +++ b/deps/v8/test/mjsunit/ic-megadom-2.js @@ -0,0 +1,52 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// +// Flags: --enable-mega-dom-ic --allow-natives-syntax + +function load(obj) { + return obj.nodeType; +} + +%PrepareFunctionForOptimization(load); + +var a = new d8.dom.Div(); +var b = new d8.dom.Div(); +b.b = 1; + +var c = new d8.dom.Div(); +c.c = 1; + +var d = new d8.dom.Div(); +d.d = 1; + +var e = new d8.dom.Div(); +e.e = 1; + +var f = new d8.dom.Div(); +f.f = 1; + +const objs = [ + a, b, c, d, e, f +]; + + +function test() { + let result = 0; + for (let i = 0; i < objs.length; i++) { + result += load(objs[i]); + } + + return result; +} +%PrepareFunctionForOptimization(test); +let result = test(); +assertEquals(6, result); +assertEquals(load({}), undefined); +assertEquals(load({ nodeType: 'foo' }), 'foo'); + +%OptimizeFunctionOnNextCall(test); +result = test(); +assertEquals(6, result); +assertEquals(load({}), undefined) +assertEquals(load({nodeType: 'foo'}), 'foo') diff --git a/deps/v8/test/mjsunit/ic-megadom.js b/deps/v8/test/mjsunit/ic-megadom.js new file mode 100644 index 0000000000..67f73b24ee --- /dev/null +++ b/deps/v8/test/mjsunit/ic-megadom.js @@ -0,0 +1,48 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// +// Flags: --enable-mega-dom-ic --allow-natives-syntax + +function load(obj) { + return obj.nodeType; +} +%PrepareFunctionForOptimization(load); + +var a = new d8.dom.Div(); +var b = new d8.dom.Div(); +b.b = 1; + +var c = new d8.dom.Div(); +c.c = 1; + +var d = new d8.dom.Div(); +d.d = 1; + +var e = new d8.dom.Div(); +e.e = 1; + +var f = new d8.dom.Div(); +f.f = 1; + +const objs = [ + a, b, c, d, e, f +]; + + + +function test() { + let result = 0; + for (let i = 0; i < objs.length; i++) { + result += load(objs[i]); + } + + return result; +} +%PrepareFunctionForOptimization(test); +let result = test(); +assertEquals(6, result); + +%OptimizeFunctionOnNextCall(test); +result = test(); +assertEquals(6, result); diff --git a/deps/v8/test/mjsunit/mjsunit.js b/deps/v8/test/mjsunit/mjsunit.js index eb27e5ba6e..061fc291ab 100644 --- a/deps/v8/test/mjsunit/mjsunit.js +++ b/deps/v8/test/mjsunit/mjsunit.js @@ -176,6 +176,8 @@ var V8OptimizationStatus = { kLiteMode: 1 << 12, kMarkedForDeoptimization: 1 << 13, kBaseline: 1 << 14, + kTopmostFrameIsInterpreted: 1 << 15, + kTopmostFrameIsBaseline: 1 << 16, }; // Returns true if --lite-mode is on and we can't ever turn on optimization. diff --git a/deps/v8/test/mjsunit/mjsunit.status b/deps/v8/test/mjsunit/mjsunit.status index b6dd59ec69..4dd5927dfe 100644 --- a/deps/v8/test/mjsunit/mjsunit.status +++ b/deps/v8/test/mjsunit/mjsunit.status @@ -150,6 +150,7 @@ 'wasm/atomics64-stress': [PASS, SLOW, NO_VARIANTS, ['mode != release or dcheck_always_on', SKIP], ['tsan', SKIP]], 'wasm/compare-exchange-stress': [PASS, SLOW, NO_VARIANTS], 'wasm/compare-exchange64-stress': [PASS, SLOW, NO_VARIANTS], + 'tools/tickprocessor-test-large': [PASS, SLOW, NO_VARIANTS, ['mode != release or arch != x64', SKIP]], # Very slow on ARM and MIPS, contains no architecture dependent code. 'unicode-case-overoptimization0': [PASS, NO_VARIANTS, ['arch in (arm, arm64, mipsel, mips64el, mips64, mips, riscv64)', SKIP]], @@ -351,8 +352,12 @@ 'regexp-tier-up-multiple': [SKIP], 'regress/regress-996234': [SKIP], - # This test relies on TurboFan being enabled. + # These tests rely on TurboFan being enabled. 'compiler/fast-api-calls': [SKIP], + 'compiler/fast-api-interface-types': [SKIP], + 'compiler/regress-crbug-1201011': [SKIP], + 'compiler/regress-crbug-1201057': [SKIP], + 'compiler/regress-crbug-1201082': [SKIP], # These tests check that we can trace the compiler. 'tools/compiler-trace-flags': [SKIP], @@ -593,10 +598,13 @@ # Slow tests. 'compiler/regress-1125145': [SKIP], + 'compiler/regress-crbug-11564': [PASS, SLOW], + 'd8/d8-worker-shutdown*': [PASS, SLOW], 'es6/block-conflicts-sloppy': [PASS, SLOW], 'math-floor-part1': [PASS, SLOW], 'regress/regress-430201': [SKIP], 'regress/regress-500980': [PASS, SLOW], + 'regress/regress-crbug-941743': [PASS, SLOW], 'wasm/shared-memory-worker-stress': [PASS, SLOW], # BUG(v8:9506): times out. @@ -604,6 +612,12 @@ # https://crbug.com/v8/9337 - OOMs on TSAN 'compiler/regress-9017': [SKIP], + + # BUG(v8:11702): Times out on TSAN. + 'harmony/sharedarraybuffer-worker-gc-stress': [SKIP], + + # BUG(v8:11752): Flakes on TSAN. + 'd8/d8-worker-shutdown-spawn': [SKIP], }], # 'tsan == True' ############################################################################## @@ -800,29 +814,13 @@ # This often fails in debug mode because it is too slow 'd8/d8-performance-now': [PASS, ['mode == debug', SKIP]], - # Some atomic functions are not yet implemented - 'wasm/compare-exchange64-stress': [SKIP], - 'wasm/compare-exchange-stress': [SKIP], - 'regress/wasm/regress-1045225': [SKIP], - 'regress/wasm/regress-1045737': [SKIP], - 'regress/wasm/regress-1048241': [SKIP], - 'regress/wasm/regress-1074586-b': [SKIP], - 'regress/wasm/regress-1075953': [SKIP], - 'regress/wasm/regress-1074586': [SKIP], - 'regress/wasm/regress-1079449': [SKIP], - 'regress/wasm/regress-1080902': [SKIP], - 'regress/wasm/regress-1140549': [SKIP], - 'regress/wasm/regress-1153442': [SKIP], - 'regress/wasm/regress-1168116': [SKIP], - 'wasm/atomics': [SKIP], - 'wasm/atomics-non-shared': [SKIP], - 'wasm/grow-shared-memory': [SKIP], - 'wasm/shared-memory': [SKIP], - # https://github.com/v8-riscv/v8/issues/418 'regress/regress-1138075': [SKIP], 'regress/regress-1138611': [SKIP], + # Some atomic functions are not yet implemented + 'regress/wasm/regress-1196837': [SKIP], + # SIMD not be implemented 'regress/wasm/regress-1054466': [SKIP], 'regress/wasm/regress-1065599': [SKIP], @@ -839,21 +837,16 @@ 'regress/wasm/regress-1161555': [SKIP], 'regress/wasm/regress-1161954': [SKIP], 'regress/wasm/regress-1187831': [SKIP], + 'regress/wasm/regress-1199662': [SKIP], 'regress/regress-1172797': [SKIP], 'regress/wasm/regress-1179025': [SKIP], - 'wasm/simd-errors': [SKIP], - 'wasm/simd-globals': [SKIP], 'wasm/multi-value-simd': [SKIP], - 'wasm/simd-call': [SKIP], 'wasm/liftoff-simd-params': [SKIP], 'wasm/exceptions-simd': [SKIP], + 'wasm/simd-*': [SKIP], }], # 'arch == riscv64' -['arch == riscv64 and variant == stress_incremental_marking', { - # https://github.com/v8-riscv/v8/issues/414 - 'wasm/externref-globals-liftoff': [SKIP], -}], #'arch == riscv64 and variant == stress-incremental-marking' ############################################################################## ['system == macos', { @@ -955,7 +948,6 @@ 'deopt-recursive-lazy-once': [SKIP], 'deopt-recursive-soft-once': [SKIP], 'code-coverage-block-opt': [SKIP], - 'compiler/fast-api-calls': [SKIP], 'compiler/serializer-apply': [SKIP], 'compiler/serializer-call': [SKIP], 'compiler/serializer-dead-after-jump': [SKIP], @@ -1322,9 +1314,13 @@ ############################################################################## ['variant == stress_snapshot', { - # This test initializes an embedder object that never needs to be serialized + # These tests initialize an embedder object that never needs to be serialized # to the snapshot, so we don't have a SerializeInternalFieldsCallback for it. 'compiler/fast-api-calls': [SKIP], + 'compiler/fast-api-interface-types': [SKIP], + 'compiler/regress-crbug-1201011': [SKIP], + 'compiler/regress-crbug-1201057': [SKIP], + 'compiler/regress-crbug-1201082': [SKIP], }], # variant == stress_snapshot ############################################################################## @@ -1427,7 +1423,15 @@ }], # variant == stress_incremental_marking ############################################################################## -['no_simd_sse == True', { +['variant == stress_concurrent_allocation', { + # This test manually forces pretenuring of allocation sites. + # stress-concurrent-allocation reverts the pretenuring decision due to low + # survival rate in old generation. + 'compiler/deopt-pretenure': [SKIP], +}], # variant == stress_concurrent_allocation + +############################################################################## +['no_simd_hardware == True', { 'wasm/exceptions-simd': [SKIP], 'wasm/liftoff-simd-params': [SKIP], 'wasm/multi-value-simd': [SKIP], @@ -1447,7 +1451,8 @@ 'regress/wasm/regress-1161954': [SKIP], 'regress/wasm/regress-1165966': [SKIP], 'regress/wasm/regress-1187831': [SKIP], -}], # no_simd_sse == True + 'regress/wasm/regress-1199662': [SKIP], +}], # no_simd_hardware == True ############################################################################## # TODO(v8:11421): Port baseline compiler to other architectures. @@ -1456,6 +1461,12 @@ }], ############################################################################## +# Skip baseline for no-lazy-feedback-allocation +['variant == no_lfa', { + 'baseline/*': [SKIP], +}], # variant == no_lfa + +############################################################################## ['variant == experimental_regexp', { 'regress/regress-779407': [SKIP], }], # variant == experimental_regexp @@ -1465,4 +1476,145 @@ 'concurrent-initial-prototype-change-1': [SKIP], }], # variant == concurrent_inlining +################################################################################ +['single_generation', { + # These tests rely on allocation site tracking which only works in the young generation. + 'array-constructor-feedback': [SKIP], + 'wasm/generic-wrapper': [SKIP], + 'regress/regress-trap-allocation-memento': [SKIP], + 'regress/regress-crbug-1151890': [SKIP], + 'regress/regress-crbug-1163184': [SKIP], + 'regress/regress-11519': [SKIP], + 'regress/regress-4121': [SKIP], + 'packed-elements': [SKIP], + 'const-dict-tracking': [SKIP], + 'compiler/native-context-specialization-hole-check': [SKIP], + 'compiler/test-literal-map-migration': [SKIP], +}], # single_generation + +################################################################################ +['third_party_heap', { + # Requires --concurrent_inlining / --finalize_streaming_on_background: + 'regress-1146106': [SKIP], + 'compiler/bound-functions-serialize': [SKIP], + 'regress/regress-1003730': [SKIP], + 'regress/regress-1168435': [SKIP], + # Asserts %InLargeObjectSpace + 'regress/regress-542823': [SKIP], + # Requires --allocation_site_pretenuring + 'compiler/deopt-pretenure': [SKIP], + # Requires --concurrent_recompilation + 'compiler/concurrent-invalidate-transition-map': [SKIP], + 'compiler/concurrent-proto-change': [SKIP], + 'compiler/manual-concurrent-recompile': [SKIP], + 'compiler/regress-905555': [SKIP], + 'compiler/regress-905555-2': [SKIP], + 'compiler/regress-9945-1': [SKIP], + 'concurrent-initial-prototype-change-1': [SKIP], + 'concurrent-initial-prototype-change-2': [SKIP], + 'regress/regress-356053': [SKIP], + 'regress/regress-embedded-cons-string': [SKIP], + # Requires a second isolate + 'resizablearraybuffer-growablesharedarraybuffer': [SKIP], + 'regress/regress-1205290': [SKIP], + 'compiler/regress-725743': [SKIP], + 'd8/d8-fuzzable-worker': [SKIP], + 'd8/d8-worker': [SKIP], + 'd8/d8-worker-script': [SKIP], + 'd8/d8-worker-sharedarraybuffer': [SKIP], + 'd8/d8-worker-shutdown': [SKIP], + 'd8/d8-worker-shutdown-empty': [SKIP], + 'd8/d8-worker-shutdown-gc': [SKIP], + 'd8/d8-worker-shutdown-spawn': [SKIP], + 'd8/d8-worker-spawn-worker': [SKIP], + 'deserialize-optimize-inner': [SKIP], + 'deserialize-reference': [SKIP], + 'harmony/atomics-value-check': [SKIP], + 'harmony/atomics-waitasync-1thread-2timeout': [SKIP], + 'harmony/atomics-waitasync-1thread-buffer-out-of-scope-timeout': [SKIP], + 'harmony/atomics-waitasync-1thread-timeout': [SKIP], + 'harmony/atomics-waitasync-1thread-timeouts-and-no-timeouts': [SKIP], + 'harmony/atomics-waitasync-worker-shutdown-before-wait-finished-2-waits': [SKIP], + 'harmony/atomics-waitasync-worker-shutdown-before-wait-finished-2-workers': [SKIP], + 'harmony/atomics-waitasync-worker-shutdown-before-wait-finished-no-timeout': [SKIP], + 'harmony/atomics-waitasync-worker-shutdown-before-wait-finished-timeout': [SKIP], + 'harmony/error-cause': [SKIP], + 'harmony/futex': [SKIP], + 'harmony/sharedarraybuffer-worker-gc-stress': [SKIP], + 'regress/regress-1006629': [SKIP], + 'regress/regress-4271': [SKIP], + 'regress/regress-821368': [SKIP], + 'regress/regress-9383': [SKIP], + 'regress/regress-chromium-1194026': [SKIP], + 'regress/regress-crbug-1162473': [SKIP], + 'regress/regress-crbug-465564': [SKIP], + 'regress/regress-crbug-503578': [SKIP], + 'regress/regress-crbug-503698': [SKIP], + 'regress/regress-crbug-503968': [SKIP], + 'regress/regress-crbug-503991': [SKIP], + 'regress/regress-crbug-504136': [SKIP], + 'regress/regress-crbug-504727': [SKIP], + 'regress/regress-crbug-505778': [SKIP], + 'regress/regress-crbug-506549': [SKIP], + 'regress/regress-crbug-511880': [SKIP], + 'regress/regress-crbug-514081': [SKIP], + 'regress/regress-crbug-518747': [SKIP], + 'regress/regress-crbug-522496': [SKIP], + 'regress/regress-crbug-523919': [SKIP], + 'regress/regress-crbug-722871': [SKIP], + 'regress/wasm/regress-1010272': [SKIP], + 'regress/wasm/regress-1067621': [SKIP], + 'regress/wasm/regress-643595': [SKIP], + 'regress/wasm/regress-674447': [SKIP], + 'regress/wasm/regress-801850': [SKIP], + 'regress/wasm/regress-803427': [SKIP], + 'regress/wasm/regress-8059': [SKIP], + 'regress/wasm/regress-808012': [SKIP], + 'regress/wasm/regress-808848': [SKIP], + 'regress/wasm/regress-8533': [SKIP], + 'serialize-after-execute': [SKIP], + 'serialize-ic': [SKIP], + 'wasm/compare-exchange-stress': [SKIP], + 'wasm/compare-exchange64-stress': [SKIP], + 'wasm/futex': [SKIP], + 'wasm/grow-shared-memory': [SKIP], + 'wasm/shared-arraybuffer-worker-simple-gc': [SKIP], + 'wasm/shared-memory-worker-simple-gc': [SKIP], + 'wasm/shared-memory-worker-stress': [SKIP], + 'wasm/worker-memory': [SKIP], + 'wasm/worker-module': [SKIP], + # Performs GC + 'code-coverage-precise': [SKIP], + 'compiler/monomorphic-named-load-with-no-map': [SKIP], + 'harmony/weakrefs/cleanup': [SKIP], + 'harmony/weakrefs/cleanup-from-different-realm': [SKIP], + 'harmony/weakrefs/cleanup-is-not-a-microtask': [SKIP], + 'harmony/weakrefs/cleanup-on-detached-realm': [SKIP], + 'harmony/weakrefs/cleanup-proxy-from-different-realm': [SKIP], + 'harmony/weakrefs/cleanupsome': [SKIP], + 'harmony/weakrefs/cleanupsome-2': [SKIP], + 'harmony/weakrefs/finalizationregistry-and-weakref': [SKIP], + 'harmony/weakrefs/finalizationregistry-keeps-holdings-alive': [SKIP], + 'harmony/weakrefs/finalizationregistry-scheduled-for-cleanup-multiple-times': [SKIP], + 'harmony/weakrefs/multiple-dirty-finalization-groups': [SKIP], + 'harmony/weakrefs/reentrant-gc-from-cleanup': [SKIP], + 'harmony/weakrefs/two-weakrefs': [SKIP], + 'harmony/weakrefs/undefined-holdings': [SKIP], + 'harmony/weakrefs/unregister-after-cleanup': [SKIP], + 'harmony/weakrefs/unregister-inside-cleanup': [SKIP], + 'harmony/weakrefs/unregister-inside-cleanup2': [SKIP], + 'harmony/weakrefs/unregister-inside-cleanup3': [SKIP], + 'harmony/weakrefs/unregister-many': [SKIP], + 'harmony/weakrefs/weak-cell-basics': [SKIP], + 'harmony/weakrefs/weak-unregistertoken': [SKIP], + 'harmony/weakrefs/weakref-creation-keeps-alive': [SKIP], + 'harmony/weakrefs/weakref-deref-keeps-alive': [SKIP], + 'measure-memory': [SKIP], + 'measure-memory-multiple-realms': [SKIP], + 'regress/regress-936077': [SKIP], + 'regress/wasm/regress-827806': [SKIP], + 'wasm/compiled-module-management': [SKIP], + 'wasm/shared-memory-gc-stress': [SKIP], +}], # third_party_heap + ] diff --git a/deps/v8/test/mjsunit/regress-10782.js b/deps/v8/test/mjsunit/regress-10782.js new file mode 100644 index 0000000000..55c3217878 --- /dev/null +++ b/deps/v8/test/mjsunit/regress-10782.js @@ -0,0 +1,10 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +function f() { + let x = [0,0,0,0,0]; + Object.defineProperty(x, 'length', {value : 4, enumerable : true}); +} + +assertThrows(f, TypeError); diff --git a/deps/v8/test/mjsunit/regress/regress-1189077.js b/deps/v8/test/mjsunit/regress/regress-1189077.js new file mode 100644 index 0000000000..8372726b18 --- /dev/null +++ b/deps/v8/test/mjsunit/regress/regress-1189077.js @@ -0,0 +1,56 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --allow-natives-syntax + +const string_max_length = %StringMaxLength(); +const longest_double = -2.2250738585105353E-308; +const s18 = "A".repeat(string_max_length - 18); +const s23 = "A".repeat(string_max_length - 23); +const s24 = "A".repeat(string_max_length - 24); +const s25 = "A".repeat(string_max_length - 25); + +(function() { + function f() { + return s18 + longest_double; + } + + %PrepareFunctionForOptimization(f); + assertThrows(f, RangeError); + %OptimizeFunctionOnNextCall(f); + assertThrows(f, RangeError); +})(); + +(function() { + function f() { + return s23 + longest_double; + } + + %PrepareFunctionForOptimization(f); + assertThrows(f, RangeError); + %OptimizeFunctionOnNextCall(f); + assertThrows(f, RangeError); +})(); + +(function() { + function f() { + return s24 + longest_double; + } + + %PrepareFunctionForOptimization(f); + assertEquals(string_max_length, f().length); + %OptimizeFunctionOnNextCall(f); + assertEquals(string_max_length, f().length); +})(); + +(function() { + function f() { + return s25 + longest_double; + } + + %PrepareFunctionForOptimization(f); + assertEquals(string_max_length - 1, f().length); + %OptimizeFunctionOnNextCall(f); + assertEquals(string_max_length - 1, f().length); +})(); diff --git a/deps/v8/test/mjsunit/regress/regress-1201114.js b/deps/v8/test/mjsunit/regress/regress-1201114.js new file mode 100644 index 0000000000..7f81d63c95 --- /dev/null +++ b/deps/v8/test/mjsunit/regress/regress-1201114.js @@ -0,0 +1,19 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --turboprop --allow-natives-syntax --print-code + +var a = {b: 1}; +function nop() { return false; } +function __f_4(a) { return a; } +function __f_5(__v_2) { + __f_4(__v_2.a); + nop(__f_5)&a.b; +} +%PrepareFunctionForOptimization(__f_5); +__f_5(true); +%OptimizeFunctionOnNextCall(__f_5); +try { + __f_5(); +} catch {} diff --git a/deps/v8/test/mjsunit/regress/regress-1204748.js b/deps/v8/test/mjsunit/regress/regress-1204748.js new file mode 100644 index 0000000000..7c487b7dc8 --- /dev/null +++ b/deps/v8/test/mjsunit/regress/regress-1204748.js @@ -0,0 +1,24 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --allow-natives-syntax --assert-types + +function __f_2(__v_4, __v_5) { + let __v_6 = __v_4 >= __v_5; + while (__v_6 != 0) { + __v_4 = __v_4 | __v_5 - __v_4; + let __v_7 = __v_4 >= __v_5; + new Int32Array(__v_4); + __v_6 = __v_4 < __v_5; + } +} +function __f_3() { + __f_2(Infinity, 1); + __f_2(); +} + %PrepareFunctionForOptimization(__f_3); + %PrepareFunctionForOptimization(__f_2); + __f_3(); + %OptimizeFunctionOnNextCall(__f_3); + __f_3(); diff --git a/deps/v8/test/mjsunit/regress/regress-1205290.js b/deps/v8/test/mjsunit/regress/regress-1205290.js new file mode 100644 index 0000000000..50eac5f960 --- /dev/null +++ b/deps/v8/test/mjsunit/regress/regress-1205290.js @@ -0,0 +1,24 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +const sync_arr = new Int32Array(new SharedArrayBuffer(4)); +function waitForWorker() { + while (Atomics.load(sync_arr) == 0) {} +} +function onmessage([sab, lock]) { + const i32a = new Int32Array(sab); + Atomics.store(lock, 0, 1); + for (let j = 1; j < 1000; ++j) { + for (let i = 0; i < i32a.length; ++i) { + i32a[i] = j; + } + } +} +const worker = new Worker(`onmessage = ${onmessage}`, {type: 'string'}); +const arr = + new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT * 100)); +worker.postMessage([arr.buffer, sync_arr]); + +waitForWorker(); +arr.sort(); diff --git a/deps/v8/test/mjsunit/regress/regress-1207679.js b/deps/v8/test/mjsunit/regress/regress-1207679.js new file mode 100644 index 0000000000..ebe9f11d03 --- /dev/null +++ b/deps/v8/test/mjsunit/regress/regress-1207679.js @@ -0,0 +1,24 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// +// Flags: --expose-gc --interrupt-budget=1000 --no-lazy-feedback-allocation + +var __v_5; +function __v_1() { + var PI = { + get() {} + }; + function __v_5() { + Object.defineProperty(PI, 'func', { + }); + '𝌆'.match(); + } + __v_5(...[__v_5]); + try { + __v_1(); + } catch (PI) {} +} +__v_1(); +gc(); +__v_1(); diff --git a/deps/v8/test/mjsunit/regress/regress-1208782.js b/deps/v8/test/mjsunit/regress/regress-1208782.js new file mode 100644 index 0000000000..b9e8708d5f --- /dev/null +++ b/deps/v8/test/mjsunit/regress/regress-1208782.js @@ -0,0 +1,6 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +var arr = new Int8Array(new SharedArrayBuffer(16), 13); +new Uint8Array(arr); diff --git a/deps/v8/test/mjsunit/regress/regress-1212583.js b/deps/v8/test/mjsunit/regress/regress-1212583.js new file mode 100644 index 0000000000..b83cdd2060 --- /dev/null +++ b/deps/v8/test/mjsunit/regress/regress-1212583.js @@ -0,0 +1,25 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --allow-natives-syntax --opt --no-always-opt + +async function f(a, b) { + let x = 0xfffffffff; + if (b == 5) { + x = 0xffffffff1; + } + let y = Math.max(0xffffffff2, x); + return BigInt.asUintN(1, y); +}; + +%PrepareFunctionForOptimization(f); +assertThrowsAsync(f(1, 2), TypeError); +%OptimizeFunctionOnNextCall(f); +assertThrowsAsync(f(1, 2), TypeError); +if (%Is64Bit()) assertUnoptimized(f); +%PrepareFunctionForOptimization(f); +assertThrowsAsync(f(1, 2), TypeError); +%OptimizeFunctionOnNextCall(f); +assertThrowsAsync(f(1, 2), TypeError); +assertOptimized(f); diff --git a/deps/v8/test/mjsunit/regress/regress-crbug-1163499.js b/deps/v8/test/mjsunit/regress/regress-crbug-1163499.js new file mode 100644 index 0000000000..7457ef077c --- /dev/null +++ b/deps/v8/test/mjsunit/regress/regress-crbug-1163499.js @@ -0,0 +1,15 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +const o1 = {k:1}; +const o2 = Object.create(o1); +for (let i = 0; i < 1100; i++) { + Object.defineProperty(o1, "k" + i, {value: 0, enumerable: false}); +} +Object.defineProperty(o1, "enum", {value: 1, enumerable: false, configurable: true}); +for (let k in o2) {} +Object.defineProperty(o1, "enum", {value: 1, enumerable: true, configurable: true}); +let last; +for (let k in o2) { last = k } +assertEquals("enum", last); diff --git a/deps/v8/test/mjsunit/regress/regress-crbug-1209152.js b/deps/v8/test/mjsunit/regress/regress-crbug-1209152.js new file mode 100644 index 0000000000..62cc3cdff9 --- /dev/null +++ b/deps/v8/test/mjsunit/regress/regress-crbug-1209152.js @@ -0,0 +1,13 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --multi-mapped-mock-allocator + +let size = 8 * 1024 * 1024; +let initialized = 2 * 1024 * 1008; +let array = new Uint8Array(size); +for (let i = 0; i < initialized; i++) { + array[i] = 42; +} +array.sort(); diff --git a/deps/v8/test/mjsunit/regress/regress-v8-11290.js b/deps/v8/test/mjsunit/regress/regress-v8-11290.js new file mode 100644 index 0000000000..2f6f79e417 --- /dev/null +++ b/deps/v8/test/mjsunit/regress/regress-v8-11290.js @@ -0,0 +1,5 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +assertEquals("zzz".match(/(z(?=.)){2}/), ["zz", "z"]); diff --git a/deps/v8/test/mjsunit/regress/regress-v8-11616.js b/deps/v8/test/mjsunit/regress/regress-v8-11616.js new file mode 100644 index 0000000000..dfe1893a7a --- /dev/null +++ b/deps/v8/test/mjsunit/regress/regress-v8-11616.js @@ -0,0 +1,8 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +assertEquals("x".repeat(3).match(/x(?<=^x{3})/), ["x"]); +assertEquals("x".repeat(4).match(/x(?<=^x{4})/), ["x"]); +assertEquals("x".repeat(7).match(/x(?<=^x{7})/), ["x"]); +assertEquals("x".repeat(17).match(/x(?<=^x{17})/), ["x"]); diff --git a/deps/v8/test/mjsunit/regress/regress-v8-11851.js b/deps/v8/test/mjsunit/regress/regress-v8-11851.js new file mode 100644 index 0000000000..4f2d217b52 --- /dev/null +++ b/deps/v8/test/mjsunit/regress/regress-v8-11851.js @@ -0,0 +1,22 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --allow-natives-syntax --expose-gc + +function v0(v1) { + v1.apply(); +} + +function v2() { + function v3() { + } + %PrepareFunctionForOptimization(v0); + v0(v3); + %OptimizeFunctionOnNextCall(v0); + v0(v3); +} + +v2(); +gc(); +assertThrows(function () { v0(2); }, TypeError); diff --git a/deps/v8/test/mjsunit/regress/wasm/regress-1046472.js b/deps/v8/test/mjsunit/regress/wasm/regress-1046472.js index 20ffb0f204..5e5b9fee55 100644 --- a/deps/v8/test/mjsunit/regress/wasm/regress-1046472.js +++ b/deps/v8/test/mjsunit/regress/wasm/regress-1046472.js @@ -11,7 +11,7 @@ load('test/mjsunit/wasm/wasm-module-builder.js'); builder.addMemory(16, 32, false); builder.addType(makeSig([kWasmI32, kWasmI32, kWasmI32], [kWasmI32])); // Generate function 1 (out of 1). - builder.addFunction(undefined, 0 /* sig */) + builder.addFunction('main', 0 /* sig */) .addBodyWithEnd([ // signature: i_iii // body: @@ -29,5 +29,5 @@ kExprEnd, // @21 assertThrows( () => {builder.toModule()}, WebAssembly.CompileError, 'WebAssembly.Module(): Compiling function #0:\"main\" failed: ' + - 'type error in merge[0] (expected <bot>, got i32) @+57'); + 'type error in branch[0] (expected f32, got i32) @+57'); })(); diff --git a/deps/v8/test/mjsunit/regress/wasm/regress-10702.js b/deps/v8/test/mjsunit/regress/wasm/regress-10702.js index d1ec94989b..ff6931a804 100644 --- a/deps/v8/test/mjsunit/regress/wasm/regress-10702.js +++ b/deps/v8/test/mjsunit/regress/wasm/regress-10702.js @@ -5,7 +5,7 @@ load('test/mjsunit/wasm/wasm-module-builder.js'); const builder = new WasmModuleBuilder(); -builder.addGlobal(kWasmI32, 1).init = 35; +builder.addGlobal(kWasmI32, true, WasmInitExpr.I32Const(35)); builder.addType(makeSig([], [kWasmI32])); builder.addType(makeSig([kWasmI32, kWasmI32], [kWasmI32])); // Generate function 1 (out of 3). diff --git a/deps/v8/test/mjsunit/regress/wasm/regress-11809.js b/deps/v8/test/mjsunit/regress/wasm/regress-11809.js deleted file mode 100644 index eef8c291f6..0000000000 --- a/deps/v8/test/mjsunit/regress/wasm/regress-11809.js +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2021 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -// -// Flags: --enable-testing-opcode-in-wasm --nowasm-tier-up -// Flags: --wasm-tier-mask-for-testing=2 - -load("test/mjsunit/wasm/wasm-module-builder.js"); - -function InstanceMaker(offset) { - var builder = new WasmModuleBuilder(); - builder.addMemory(1, 1, false /* exported */); - - var sig_index = builder.addType(makeSig( - [kWasmI32, kWasmI32, kWasmI32, kWasmI32, kWasmI32, kWasmI32, kWasmI32, - kWasmI32], - [kWasmI32])); - var sig_three = builder.addType(makeSig( - [kWasmI64, kWasmI64, kWasmI64, kWasmI64, kWasmI64, kWasmI64, kWasmI64, - kWasmI64], - [])); - - var zero = builder.addFunction("zero", kSig_i_i); - var one = builder.addFunction("one", sig_index); - var two = builder.addFunction("two", kSig_v_i); - var three = builder.addFunction("three", sig_three).addBody([]); - - zero.addBody([kExprLocalGet, 0, kExprI32LoadMem, 0, offset]); - - one.addBody([ - kExprLocalGet, 7, - kExprCallFunction, zero.index]); - - two.addBody([ - kExprI64Const, 0x81, 0x80, 0x80, 0x80, 0x10, - kExprI64Const, 0x81, 0x80, 0x80, 0x80, 0x10, - kExprI64Const, 0x81, 0x80, 0x80, 0x80, 0x10, - kExprI64Const, 0x81, 0x80, 0x80, 0x80, 0x10, - kExprI64Const, 0x81, 0x80, 0x80, 0x80, 0x10, - kExprI64Const, 0x81, 0x80, 0x80, 0x80, 0x10, - kExprI64Const, 0x81, 0x80, 0x80, 0x80, 0x10, - kExprI64Const, 0x81, 0x80, 0x80, 0x80, 0x10, - kExprCallFunction, three.index, - kExprI32Const, 0, - kExprI32Const, 0, - kExprI32Const, 0, - kExprI32Const, 0, - kExprI32Const, 0, - kExprI32Const, 0, - kExprI32Const, 0, - kExprI32Const, 0, - kExprCallFunction, one.index, - kExprDrop, - ]).exportFunc(); - - return builder.instantiate({}); -} - -var instance = InstanceMaker(0); -instance.exports.two(); - -// Regression test for crbug.com/1224882. -var instance_with_offset = InstanceMaker(4); -instance_with_offset.exports.two(); diff --git a/deps/v8/test/mjsunit/regress/wasm/regress-1187831.js b/deps/v8/test/mjsunit/regress/wasm/regress-1187831.js index 84e7ed5429..c9fa9e9228 100644 --- a/deps/v8/test/mjsunit/regress/wasm/regress-1187831.js +++ b/deps/v8/test/mjsunit/regress/wasm/regress-1187831.js @@ -11,7 +11,7 @@ builder.addMemory(16, 32, false, true); builder.addType(makeSig([kWasmI32, kWasmI32, kWasmI32], [kWasmI32])); builder.addType(makeSig([], [])); builder.setTableBounds(1, 1); -builder.addElementSegment(0, 0, false, [0]); +builder.addActiveElementSegment(0, WasmInitExpr.I32Const(0), [0]); // Generate function 1 (out of 1). builder.addFunction(undefined, 0 /* sig */) .addBodyWithEnd([ diff --git a/deps/v8/test/mjsunit/regress/wasm/regress-1196837.js b/deps/v8/test/mjsunit/regress/wasm/regress-1196837.js new file mode 100644 index 0000000000..5c4a354ad6 --- /dev/null +++ b/deps/v8/test/mjsunit/regress/wasm/regress-1196837.js @@ -0,0 +1,39 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --wasm-staging + +load('test/mjsunit/wasm/wasm-module-builder.js'); + +const builder = new WasmModuleBuilder(); +builder.addMemory(16, 32, false); +builder.addType(makeSig([kWasmI32, kWasmI32, kWasmI32], [kWasmI32])); +builder.addFunction(undefined, 0 /* sig */) + .addBodyWithEnd([ +// signature: i_iii +// body: +kExprLocalGet, 0x01, +kExprLocalGet, 0x01, +kExprLocalGet, 0x01, +kExprLocalGet, 0x01, +kAtomicPrefix, kExprI32AtomicCompareExchange16U, 0x00, 0x7a, +kExprLocalGet, 0x01, +kExprLocalGet, 0x01, +kExprLocalGet, 0x01, +kExprLocalGet, 0x00, +kExprMemoryGrow, 0x00, +kAtomicPrefix, kExprI32AtomicCompareExchange16U, 0x00, 0x7a, +kExprLocalGet, 0x01, +kExprLocalGet, 0x00, +kAtomicPrefix, kExprI32AtomicCompareExchange16U, 0x00, 0x7a, +kExprLocalGet, 0x01, +kExprLocalGet, 0x00, +kAtomicPrefix, kExprI32AtomicCompareExchange16U, 0x00, 0x7a, +kExprLocalGet, 0x01, +kExprReturnCall, 0x00, +kExprEnd, +]); +builder.addExport('main', 0); +const instance = builder.instantiate(); +assertTraps(kTrapUnalignedAccess, () => instance.exports.main(0, 0, 0)); diff --git a/deps/v8/test/mjsunit/regress/wasm/regress-1199662.js b/deps/v8/test/mjsunit/regress/wasm/regress-1199662.js new file mode 100644 index 0000000000..ef5a60e8b3 --- /dev/null +++ b/deps/v8/test/mjsunit/regress/wasm/regress-1199662.js @@ -0,0 +1,38 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --wasm-staging + +load('test/mjsunit/wasm/wasm-module-builder.js'); + +// This is a regression test that is minimized and manually trimmed down. It +// exercises a bug in our attempt to canonicalize shuffle in platform +// independent code, see +// https://bugs.chromium.org/p/v8/issues/detail?id=11542#c6. +const builder = new WasmModuleBuilder(); +builder.addType(makeSig([kWasmI32, kWasmI32, kWasmI32], [kWasmI32])); +// Generate function 1 (out of 1). +builder.addFunction(undefined, 0 /* sig */).addBodyWithEnd([ + // signature: i_iii + // body: + kExprI32Const, 0x00, // i32.const + kSimdPrefix, kExprI8x16Splat, // i8x16.splat + kExprI32Const, 0x00, // i32.const + kSimdPrefix, kExprI8x16Splat, // i8x16.splat + kSimdPrefix, kExprI8x16Shuffle, + 0x00, 0x15, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, // i8x16.shuffle + kSimdPrefix, kExprI64x2BitMask, + 0x01, // i64x2.bitmask + kExprEnd, // end @30 +]); +builder.addExport('main', 0); +const instance = builder.instantiate(); +assertEquals(0, instance.exports.main(1, 2, 3)); diff --git a/deps/v8/test/mjsunit/regress/wasm/regress-1200231.js b/deps/v8/test/mjsunit/regress/wasm/regress-1200231.js new file mode 100644 index 0000000000..c71031470e --- /dev/null +++ b/deps/v8/test/mjsunit/regress/wasm/regress-1200231.js @@ -0,0 +1,19 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --experimental-wasm-reftypes --trace-turbo-graph + +load('test/mjsunit/wasm/wasm-module-builder.js'); + +const builder = new WasmModuleBuilder(); + +builder.addFunction(`get`, makeSig([], [kWasmExternRef])) + .addBody([kExprTableGet]) + .exportFunc(); +builder.addFunction(`fill`, makeSig([kWasmI32, kWasmAnyFunc, kWasmI32], [])) + .addBody([]) + .exportFunc(); +try { + builder.toModule(); +} catch {} diff --git a/deps/v8/test/mjsunit/regress/wasm/regress-1202736.js b/deps/v8/test/mjsunit/regress/wasm/regress-1202736.js new file mode 100644 index 0000000000..6d9f88f725 --- /dev/null +++ b/deps/v8/test/mjsunit/regress/wasm/regress-1202736.js @@ -0,0 +1,34 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --wasm-staging + +load('test/mjsunit/wasm/wasm-module-builder.js'); + +const builder = new WasmModuleBuilder(); +builder.addMemory(1, 1, false, true); +builder.addType( + makeSig([kWasmF64, kWasmI32, kWasmI32, kWasmF64, kWasmF32], [kWasmI64])); +builder.addFunction(undefined, 0 /* sig */) + .addLocals(kWasmI64, 1) + .addBodyWithEnd([ +// signature: l_diidf +// body: +kExprLoop, 0x7e, // loop @3 i64 + kExprI64Const, 0x01, // i64.const + kExprEnd, // end @7 +kExprBlock, 0x7f, // block @8 i32 + kExprLocalGet, 0x05, // local.get + kExprLocalSet, 0x05, // local.set + kExprI32Const, 0x00, // i32.const + kExprEnd, // end @16 +kExprLocalGet, 0x05, // local.get +kExprLocalGet, 0x05, // local.get +kAtomicPrefix, kExprI64AtomicCompareExchange, 0x00, 0x04, +kExprI64GtS, // i64.gt_s +kExprDrop, // drop +kExprI64Const, 0x01, // i64.const +kExprEnd, // end @29 +]); +const instance = builder.instantiate(); diff --git a/deps/v8/test/mjsunit/regress/wasm/regress-1217064.js b/deps/v8/test/mjsunit/regress/wasm/regress-1217064.js new file mode 100644 index 0000000000..93a8494547 --- /dev/null +++ b/deps/v8/test/mjsunit/regress/wasm/regress-1217064.js @@ -0,0 +1,32 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +load('test/mjsunit/wasm/wasm-module-builder.js'); + +const builder = new WasmModuleBuilder(); +builder.addMemory(16, 32, false); +builder.addType(makeSig([kWasmI32, kWasmI32, kWasmI32], [kWasmI32])); +builder.addFunction(undefined, 0 /* sig */).addBody([ + kExprI64Const, 0x7a, // i64.const + kExprI64Const, 0x42, // i64.const + kExprI64Const, 0xb4, 0xbd, 0xeb, 0xb5, 0x72, // i64.const + kExprI32Const, 0x37, // i32.const + kExprI32Const, 0x67, // i32.const + kExprI32Const, 0x45, // i32.const + kExprLoop, 0, // loop + kExprLocalGet, 0, // local.get + kExprBrIf, 1, // br_if depth=1 + kExprLocalGet, 1, // local.get + kExprLocalGet, 0, // local.get + kExprMemorySize, 0, // memory.size + kExprLocalTee, 0, // local.tee + kExprLocalGet, 0, // local.get + kExprBrIf, 0, // br_if depth=0 + kExprUnreachable, // unreachable + kExprEnd, // end + kExprUnreachable, // unreachable +]); +builder.addExport('main', 0); +const instance = builder.instantiate(); +assertEquals(16, instance.exports.main(0, 0, 0)); diff --git a/deps/v8/test/mjsunit/regress/wasm/regress-1227351.js b/deps/v8/test/mjsunit/regress/wasm/regress-1227351.js new file mode 100644 index 0000000000..38157f66f1 --- /dev/null +++ b/deps/v8/test/mjsunit/regress/wasm/regress-1227351.js @@ -0,0 +1,13 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --wasm-staging + +load('test/mjsunit/wasm/wasm-module-builder.js'); + +const builder = new WasmModuleBuilder(); +builder.addFunction(undefined, kSig_d_v) + .addLocals(kWasmExternRef, 16000) + .addBody([kExprCallFunction, 0]); +builder.toModule(); diff --git a/deps/v8/test/mjsunit/regress/wasm/regress-1228720.js b/deps/v8/test/mjsunit/regress/wasm/regress-1228720.js new file mode 100644 index 0000000000..410c55168f --- /dev/null +++ b/deps/v8/test/mjsunit/regress/wasm/regress-1228720.js @@ -0,0 +1,13 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --wasm-staging + +load('test/mjsunit/wasm/wasm-module-builder.js'); + +const builder = new WasmModuleBuilder(); +builder.addFunction(undefined, kSig_v_v) + .addLocals(kWasmExternRef, 16268) + .addBody([kExprLoop, kWasmVoid, kExprEnd]); +builder.toModule(); diff --git a/deps/v8/test/mjsunit/regress/wasm/regress-739768.js b/deps/v8/test/mjsunit/regress/wasm/regress-739768.js index 0bd73223c9..f34420d3ae 100644 --- a/deps/v8/test/mjsunit/regress/wasm/regress-739768.js +++ b/deps/v8/test/mjsunit/regress/wasm/regress-739768.js @@ -24,7 +24,7 @@ let builder1 = new WasmModuleBuilder(); builder1.setName('module_1'); builder1.addFunction('main', kSig_i_v).addBody([kExprUnreachable]); builder1.addImportedTable('z', 'table'); -builder1.addElementSegment(0, 0, false, [0], true); +builder1.addActiveElementSegment(0, WasmInitExpr.I32Const(0), [0]); let module1 = new WebAssembly.Module(builder1.toBuffer()); let instance1 = new WebAssembly.Instance(module1, {z: {table: instance0.exports.table}}); diff --git a/deps/v8/test/mjsunit/regress/wasm/regress-803788.js b/deps/v8/test/mjsunit/regress/wasm/regress-803788.js index 5c894ae25a..21f32538e5 100644 --- a/deps/v8/test/mjsunit/regress/wasm/regress-803788.js +++ b/deps/v8/test/mjsunit/regress/wasm/regress-803788.js @@ -11,7 +11,7 @@ let q_table = builder.addImportedTable("q", "table") let q_base = builder.addImportedGlobal("q", "base", kWasmI32); let q_fun = builder.addImport("q", "fun", kSig_v_v); builder.addType(kSig_i_ii); -builder.addElementSegment(0, q_base, true, [ q_fun ]) +builder.addActiveElementSegment(0, WasmInitExpr.GlobalGet(q_base), [q_fun]); let module = new WebAssembly.Module(builder.toBuffer()); let table = new WebAssembly.Table({ element: "anyfunc", diff --git a/deps/v8/test/mjsunit/regress/wasm/regress-817380.js b/deps/v8/test/mjsunit/regress/wasm/regress-817380.js index 23ab2a5c91..caa577ed37 100644 --- a/deps/v8/test/mjsunit/regress/wasm/regress-817380.js +++ b/deps/v8/test/mjsunit/regress/wasm/regress-817380.js @@ -19,6 +19,7 @@ const builder2 = new WasmModuleBuilder(); const mul_import = builder2.addImport('q', 'wasm_mul', kSig_i_ii); builder2.addImportedTable('q', 'table'); const glob_import = builder2.addImportedGlobal('q', 'glob', kWasmI32); -builder2.addElementSegment(0, glob_import, true, [mul_import]); +builder2.addActiveElementSegment(0, WasmInitExpr.GlobalGet(glob_import), + [mul_import]); builder2.instantiate( {q: {glob: 0, js_div: i => i, wasm_mul: mul, table: table}}); diff --git a/deps/v8/test/mjsunit/regress/wasm/regress-834619.js b/deps/v8/test/mjsunit/regress/wasm/regress-834619.js index af7043904e..22ffadb341 100644 --- a/deps/v8/test/mjsunit/regress/wasm/regress-834619.js +++ b/deps/v8/test/mjsunit/regress/wasm/regress-834619.js @@ -33,7 +33,7 @@ load("test/mjsunit/wasm/wasm-module-builder.js"); kExprCallIndirect, 0, kTableZero ]) .exportFunc(); - builder.addElementSegment(0, 0, false, [0, 1, 1, 0]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(0), [0, 1, 1, 0]); return builder.instantiate({q: {f2: i1.exports.f2, f1: i1.exports.f1}}); })(); diff --git a/deps/v8/test/mjsunit/regress/wasm/regress-crbug-1203692.js b/deps/v8/test/mjsunit/regress/wasm/regress-crbug-1203692.js new file mode 100644 index 0000000000..024786d2e4 --- /dev/null +++ b/deps/v8/test/mjsunit/regress/wasm/regress-crbug-1203692.js @@ -0,0 +1,12 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +function asm(stdlib, foreign) { + "use asm"; + var unused = foreign.a | 0; + function fun() { } + return fun; +} + +assertThrows(() => asm(null, { a: 1n }).fun(), TypeError); diff --git a/deps/v8/test/mjsunit/regress/wasm/regress-v8-9106.js b/deps/v8/test/mjsunit/regress/wasm/regress-v8-9106.js index f51c2e9498..75f72d8048 100644 --- a/deps/v8/test/mjsunit/regress/wasm/regress-v8-9106.js +++ b/deps/v8/test/mjsunit/regress/wasm/regress-v8-9106.js @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Flags: --experimental-wasm-bulk-memory - // Make sure DCHECK doesn't fire when passive data segment is at the end of the // module. let bytes = new Uint8Array([ diff --git a/deps/v8/test/mjsunit/resizablearraybuffer-growablesharedarraybuffer.js b/deps/v8/test/mjsunit/resizablearraybuffer-growablesharedarraybuffer.js new file mode 100644 index 0000000000..add184cd42 --- /dev/null +++ b/deps/v8/test/mjsunit/resizablearraybuffer-growablesharedarraybuffer.js @@ -0,0 +1,430 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --harmony-rab-gsab --allow-natives-syntax + +"use strict"; + +function resizeHelper(ab, value) { + const return_value = ab.resize(value); + assertEquals(undefined, return_value); + assertEquals(value, ab.byteLength); +} + +function growHelper(ab, value) { + const return_value = ab.grow(value); + assertEquals(undefined, return_value); + assertEquals(value, ab.byteLength); +} + +(function TestRABBasics() { + const rab = new ResizableArrayBuffer(10, 20); + assertTrue(rab instanceof ResizableArrayBuffer); + assertFalse(rab instanceof GrowableSharedArrayBuffer); + assertFalse(rab instanceof ArrayBuffer); + assertFalse(rab instanceof SharedArrayBuffer); + assertEquals(10, rab.byteLength); + assertEquals(20, rab.maxByteLength); +})(); + +(function TestRABCtorByteLengthEqualsMax() { + const rab = new ResizableArrayBuffer(10, 10); + assertEquals(10, rab.byteLength); + assertEquals(10, rab.maxByteLength); +})(); + +(function TestRABCtorByteLengthZero() { + const rab = new ResizableArrayBuffer(0, 10); + assertEquals(0, rab.byteLength); + assertEquals(10, rab.maxByteLength); +})(); + +(function TestRABCtorByteLengthAndMaxZero() { + const rab = new ResizableArrayBuffer(0, 0); + assertEquals(0, rab.byteLength); + assertEquals(0, rab.maxByteLength); +})(); + +(function TestRABCtorNoMaxByteLength() { + assertThrows(() => { new ResizableArrayBuffer(10); }, RangeError); + // But this is fine; undefined is converted to 0. + const rab = new ResizableArrayBuffer(0); + assertEquals(0, rab.byteLength); + assertEquals(0, rab.maxByteLength); +})(); + +(function TestAllocatingOutrageouslyMuchThrows() { + assertThrows(() => { new ResizableArrayBuffer(0, 2 ** 100);}, RangeError); +})(); + +(function TestRABCtorOperationOrder() { + let log = ''; + const mock_length = {valueOf: function() { + log += 'valueof length, '; return 10; }}; + const mock_max_length = {valueOf: function() { + log += 'valueof max_length, '; return 10; }}; + new ResizableArrayBuffer(mock_length, mock_max_length); + + assertEquals('valueof length, valueof max_length, ', log); +})(); + +(function TestGSABCtorOperationOrder() { + let log = ''; + const mock_length = {valueOf: function() { + log += 'valueof length, '; return 10; }}; + const mock_max_length = {valueOf: function() { + log += 'valueof max_length, '; return 10; }}; + new ResizableArrayBuffer(mock_length, mock_max_length); + + assertEquals('valueof length, valueof max_length, ', log); +})(); + +(function TestByteLengthGetterReceiverChecks() { + const name = 'byteLength'; + const ab_getter = Object.getOwnPropertyDescriptor( + ArrayBuffer.prototype, name).get; + const sab_getter = Object.getOwnPropertyDescriptor( + SharedArrayBuffer.prototype, name).get; + const rab_getter = Object.getOwnPropertyDescriptor( + ResizableArrayBuffer.prototype, name).get; + const gsab_getter = Object.getOwnPropertyDescriptor( + GrowableSharedArrayBuffer.prototype, name).get; + + const ab = new ArrayBuffer(40); + const sab = new SharedArrayBuffer(40); + const rab = new ResizableArrayBuffer(40, 40); + const gsab = new GrowableSharedArrayBuffer(40, 40); + + assertEquals(40, ab_getter.call(ab)); + assertEquals(40, sab_getter.call(sab)); + assertEquals(40, rab_getter.call(rab)); + assertEquals(40, gsab_getter.call(gsab)); + + assertThrows(() => { ab_getter.call(sab);}); + assertThrows(() => { ab_getter.call(rab);}); + assertThrows(() => { ab_getter.call(gsab);}); + + assertThrows(() => { sab_getter.call(ab);}); + assertThrows(() => { sab_getter.call(rab);}); + assertThrows(() => { sab_getter.call(gsab);}); + + assertThrows(() => { rab_getter.call(ab);}); + assertThrows(() => { rab_getter.call(sab);}); + assertThrows(() => { rab_getter.call(gsab);}); + + assertThrows(() => { gsab_getter.call(ab);}); + assertThrows(() => { gsab_getter.call(sab);}); + assertThrows(() => { gsab_getter.call(rab);}); +})(); + +(function TestMaxByteLengthGetterReceiverChecks() { + const name = 'maxByteLength'; + const rab_getter = Object.getOwnPropertyDescriptor( + ResizableArrayBuffer.prototype, name).get; + const gsab_getter = Object.getOwnPropertyDescriptor( + GrowableSharedArrayBuffer.prototype, name).get; + + const ab = new ArrayBuffer(40); + const sab = new SharedArrayBuffer(40); + const rab = new ResizableArrayBuffer(20, 40); + const gsab = new GrowableSharedArrayBuffer(20, 40); + + assertEquals(40, rab_getter.call(rab)); + assertEquals(40, gsab_getter.call(gsab)); + + assertThrows(() => { rab_getter.call(ab);}); + assertThrows(() => { rab_getter.call(sab);}); + assertThrows(() => { rab_getter.call(gsab);}); + + assertThrows(() => { gsab_getter.call(ab);}); + assertThrows(() => { gsab_getter.call(sab);}); + assertThrows(() => { gsab_getter.call(rab);}); +})(); + +(function TestResizeAndGrowReceiverChecks() { + const rab_resize = ResizableArrayBuffer.prototype.resize; + const gsab_grow = GrowableSharedArrayBuffer.prototype.grow; + + const ab = new ArrayBuffer(40); + const sab = new SharedArrayBuffer(40); + const rab = new ResizableArrayBuffer(10, 40); + const gsab = new GrowableSharedArrayBuffer(10, 40); + + rab_resize.call(rab, 20); + gsab_grow.call(gsab, 20); + assertThrows(() => { rab_resize.call(ab, 30);}); + assertThrows(() => { rab_resize.call(sab, 30);}); + assertThrows(() => { rab_resize.call(gsab, 30);}); + + assertThrows(() => { gsab_grow.call(ab, 30);}); + assertThrows(() => { gsab_grow.call(sab, 30);}); + assertThrows(() => { gsab_grow.call(rab, 30);}); +})(); + +(function TestRABResizeToMax() { + const rab = new ResizableArrayBuffer(10, 20); + resizeHelper(rab, 20); +})(); + +(function TestRABResizeToSameSize() { + const rab = new ResizableArrayBuffer(10, 20); + resizeHelper(rab, 10); +})(); + +(function TestRABResizeToSmaller() { + const rab = new ResizableArrayBuffer(10, 20); + resizeHelper(rab, 5); +})(); + +(function TestRABResizeToZero() { + const rab = new ResizableArrayBuffer(10, 20); + resizeHelper(rab, 0); +})(); + +(function TestRABResizeZeroToZero() { + const rab = new ResizableArrayBuffer(0, 20); + resizeHelper(rab, 0); +})(); + +(function TestRABGrowBeyondMaxThrows() { + const rab = new ResizableArrayBuffer(10, 20); + assertEquals(10, rab.byteLength); + assertThrows(() => {rab.grow(21)}); + assertEquals(10, rab.byteLength); +})(); + +(function TestRABResizeMultipleTimes() { + const rab = new ResizableArrayBuffer(10, 20); + const sizes = [15, 7, 7, 0, 8, 20, 20, 10]; + for (let s of sizes) { + resizeHelper(rab, s); + } +})(); + +(function TestRABResizeParameters() { + const rab = new ResizableArrayBuffer(10, 20); + rab.resize('15'); + assertEquals(15, rab.byteLength); + rab.resize({valueOf: function() { return 16; }}); + assertEquals(16, rab.byteLength); + rab.resize(17.9); + assertEquals(17, rab.byteLength); +})(); + +(function TestRABResizeInvalidParameters() { + const rab = new ResizableArrayBuffer(10, 20); + assertThrows(() => { rab.resize(-1) }, RangeError); + assertThrows(() => { rab.resize({valueOf: function() { + throw new Error('length param'); }})}); + assertEquals(10, rab.byteLength); + + // Various non-numbers are converted to NaN which is treated as 0. + rab.resize('string'); + assertEquals(0, rab.byteLength); + rab.resize(); + assertEquals(0, rab.byteLength); +})(); + +(function TestRABResizeDetached() { + const rab = new ResizableArrayBuffer(10, 20); + %ArrayBufferDetach(rab); + assertThrows(() => { rab.resize(15) }, TypeError); +})(); + +(function DetachInsideResizeParameterConversion() { + const rab = new ResizableArrayBuffer(40, 80); + + const evil = { + valueOf: () => { %ArrayBufferDetach(rab); return 20; } + }; + + assertThrows(() => { rab.resize(evil); }); +})(); + +(function ResizeInsideResizeParameterConversion() { + const rab = new ResizableArrayBuffer(40, 80); + + const evil = { + valueOf: () => { rab.resize(10); return 20; } + }; + + rab.resize(evil); + assertEquals(20, rab.byteLength); +})(); + + +(function TestRABNewMemoryAfterResizeInitializedToZero() { + const maybe_page_size = 4096; + const rab = new ResizableArrayBuffer(maybe_page_size, 2 * maybe_page_size); + const i8a = new Int8Array(rab); + rab.resize(2 * maybe_page_size); + for (let i = 0; i < 2 * maybe_page_size; ++i) { + assertEquals(0, i8a[i]); + } +})(); + +(function TestRABMemoryInitializedToZeroAfterShrinkAndGrow() { + const maybe_page_size = 4096; + const rab = new ResizableArrayBuffer(maybe_page_size, 2 * maybe_page_size); + const i8a = new Int8Array(rab); + for (let i = 0; i < maybe_page_size; ++i) { + i8a[i] = 1; + } + rab.resize(maybe_page_size / 2); + rab.resize(maybe_page_size); + for (let i = maybe_page_size / 2; i < maybe_page_size; ++i) { + assertEquals(0, i8a[i]); + } +})(); + +(function TestGSABBasics() { + const gsab = new GrowableSharedArrayBuffer(10, 20); + assertFalse(gsab instanceof ResizableArrayBuffer); + assertTrue(gsab instanceof GrowableSharedArrayBuffer); + assertFalse(gsab instanceof ArrayBuffer); + assertFalse(gsab instanceof SharedArrayBuffer); + assertEquals(10, gsab.byteLength); + assertEquals(20, gsab.maxByteLength); +})(); + +(function TestGSABCtorByteLengthEqualsMax() { + const gsab = new GrowableSharedArrayBuffer(10, 10); + assertEquals(10, gsab.byteLength); + assertEquals(10, gsab.maxByteLength); +})(); + +(function TestGSABCtorByteLengthZero() { + const gsab = new GrowableSharedArrayBuffer(0, 10); + assertEquals(0, gsab.byteLength); + assertEquals(10, gsab.maxByteLength); +})(); + +(function TestGSABCtorByteLengthAndMaxZero() { + const gsab = new GrowableSharedArrayBuffer(0, 0); + assertEquals(0, gsab.byteLength); + assertEquals(0, gsab.maxByteLength); +})(); + +(function TestGSABCtorNoMaxByteLength() { + assertThrows(() => { new GrowableSharedArrayBuffer(10); }, RangeError); + // But this is fine; undefined is converted to 0. + const gsab = new GrowableSharedArrayBuffer(0); + assertEquals(0, gsab.byteLength); + assertEquals(0, gsab.maxByteLength); +})(); + +(function TestAllocatingOutrageouslyMuchThrows() { + assertThrows(() => { new GrowableSharedArrayBuffer(0, 2 ** 100);}, + RangeError); +})(); + +(function TestGSABGrowToMax() { + const gsab = new GrowableSharedArrayBuffer(10, 20); + assertEquals(10, gsab.byteLength); + growHelper(gsab, 20); +})(); + +(function TestGSABGrowToSameSize() { + const gsab = new GrowableSharedArrayBuffer(10, 20); + assertEquals(10, gsab.byteLength); + growHelper(gsab, 10); +})(); + +(function TestGSABGrowToSmallerThrows() { + const gsab = new GrowableSharedArrayBuffer(10, 20); + assertEquals(10, gsab.byteLength); + assertThrows(() => {gsab.grow(5)}); + assertEquals(10, gsab.byteLength); +})(); + +(function TestGSABGrowToZeroThrows() { + const gsab = new GrowableSharedArrayBuffer(10, 20); + assertEquals(10, gsab.byteLength); + assertThrows(() => {gsab.grow(0)}); + assertEquals(10, gsab.byteLength); +})(); + +(function TestGSABGrowBeyondMaxThrows() { + const gsab = new GrowableSharedArrayBuffer(10, 20); + assertEquals(10, gsab.byteLength); + assertThrows(() => {gsab.grow(21)}); + assertEquals(10, gsab.byteLength); +})(); + +(function TestGSABGrowMultipleTimes() { + const gsab = new GrowableSharedArrayBuffer(10, 20); + assertEquals(10, gsab.byteLength); + const sizes = [15, 7, 7, 0, 8, 20, 20, 10]; + for (let s of sizes) { + const current_size = gsab.byteLength; + if (s < gsab.byteLength) { + assertThrows(() => {gsab.grow(s)}); + assertEquals(current_size, gsab.byteLength); + } else { + growHelper(gsab, s); + } + } +})(); + +(function TestGSABGrowParameters() { + const gsab = new GrowableSharedArrayBuffer(10, 20); + gsab.grow('15'); + assertEquals(15, gsab.byteLength); + gsab.grow({valueOf: function() { return 16; }}); + assertEquals(16, gsab.byteLength); + gsab.grow(17.9); + assertEquals(17, gsab.byteLength); +})(); + +(function TestGSABGrowInvalidParameters() { + const gsab = new GrowableSharedArrayBuffer(0, 20); + assertThrows(() => { gsab.grow(-1) }, RangeError); + assertThrows(() => { gsab.grow({valueOf: function() { + throw new Error('length param'); }})}); + assertEquals(0, gsab.byteLength); + + // Various non-numbers are converted to NaN which is treated as 0. + gsab.grow('string'); + assertEquals(0, gsab.byteLength); + gsab.grow(); + assertEquals(0, gsab.byteLength); +})(); + +(function TestGSABMemoryInitializedToZeroAfterGrow() { + const maybe_page_size = 4096; + const gsab = new GrowableSharedArrayBuffer(maybe_page_size, + 2 * maybe_page_size); + const i8a = new Int8Array(gsab); + gsab.grow(2 * maybe_page_size); + assertEquals(2 * maybe_page_size, i8a.length); + for (let i = 0; i < 2 * maybe_page_size; ++i) { + assertEquals(0, i8a[i]); + } +})(); + +(function GrowGSABOnADifferentThread() { + const gsab = new GrowableSharedArrayBuffer(10, 20); + assertEquals(10, gsab.byteLength); + function workerCode() { + function assert(thing) { + if (!thing) { + postMessage('error'); + } + } + onmessage = function(params) { + const gsab = params.gsab; + assert(!(gsab instanceof ResizableArrayBuffer)); + assert(gsab instanceof GrowableSharedArrayBuffer); + assert(!(gsab instanceof ArrayBuffer)); + assert(!(gsab instanceof SharedArrayBuffer)); + assert(10 == gsab.byteLength); + gsab.grow(15); + postMessage('ok'); + } + } + const w = new Worker(workerCode, {type: 'function'}); + w.postMessage({gsab: gsab}); + assertEquals('ok', w.getMessage()); + assertEquals(15, gsab.byteLength); +})(); diff --git a/deps/v8/test/mjsunit/tools/tickprocessor-test-func-info.log.symbols.json b/deps/v8/test/mjsunit/tools/tickprocessor-test-func-info.log.symbols.json new file mode 100644 index 0000000000..eccc52c346 --- /dev/null +++ b/deps/v8/test/mjsunit/tools/tickprocessor-test-func-info.log.symbols.json @@ -0,0 +1,7 @@ +[ + ["exp",4158389888,4158390051], + ["fegetexcept",4158374368,4158374389], + ["v8::internal::Runtime_Math_exp(v8::internal::Arguments)",135412512,135412608], + ["v8::internal::JSObject::LookupOwnRealNamedProperty(v8::internal::String*, v8::internal::LookupResult*)",135235584,135237008], + ["v8::internal::HashTable<v8::internal::StringDictionaryShape, v8::internal::String*>::FindEntry(v8::internal::String*)",135234064,135235584] +]
\ No newline at end of file diff --git a/deps/v8/test/mjsunit/tools/tickprocessor-test-large.default b/deps/v8/test/mjsunit/tools/tickprocessor-test-large.default new file mode 100644 index 0000000000..407cd2ead6 --- /dev/null +++ b/deps/v8/test/mjsunit/tools/tickprocessor-test-large.default @@ -0,0 +1,85 @@ +Statistical profiling result from v8.log, (303 ticks, 0 unaccounted, 0 excluded). + + [Shared libraries]: + ticks total nonlib name + 9 3.0% /usr/local/google/home/cbruni/Documents/v8/v8/out/x64.release/d8 + 6 2.0% /usr/lib/x86_64-linux-gnu/libc-2.31.so + + [JavaScript]: + ticks total nonlib name + 102 33.7% 35.4% LazyCompile: *<anonymous> test/mjsunit/tools/tickprocessor-test.js:1:1 + 25 8.3% 8.7% LazyCompile: *ics test/mjsunit/tools/tickprocessor-test.js:47:13 + 21 6.9% 7.3% LazyCompile: *loop test/mjsunit/tools/tickprocessor-test.js:10:14 + + [C++]: + ticks total nonlib name + 99 32.7% 34.4% v8_Default_embedded_blob_code_data_ + 12 4.0% 4.2% __write + 3 1.0% 1.0% fwrite + 2 0.7% 0.7% v8::internal::RootScavengeVisitor::VisitRootPointer(v8::internal::Root, char const*, v8::internal::FullObjectSlot) + 2 0.7% 0.7% __pthread_mutex_unlock_usercnt + 2 0.7% 0.7% __libc_malloc + 2 0.7% 0.7% _IO_file_xsputn + 1 0.3% 0.3% v8::internal::compiler::TopLevelLiveRange::AddUseInterval(v8::internal::compiler::LifetimePosition, v8::internal::compiler::LifetimePosition, v8::internal::Zone*, bool) + 1 0.3% 0.3% v8::internal::compiler::Scheduler::PrepareUses() + 1 0.3% 0.3% v8::internal::compiler::CommonOperatorBuilder::CommonOperatorBuilder(v8::internal::Zone*) + 1 0.3% 0.3% v8::internal::SpaceWithLinearArea::AdvanceAllocationObservers() + 1 0.3% 0.3% v8::internal::SerializerDeserializer::Iterate(v8::internal::Isolate*, v8::internal::RootVisitor*) + 1 0.3% 0.3% v8::internal::Log::MessageBuilder::AppendString(char const*, unsigned long, bool) + 1 0.3% 0.3% v8::internal::LargeObjectSpace::SizeOfObjects() + 1 0.3% 0.3% v8::internal::Heap::Scavenge() + 1 0.3% 0.3% v8::internal::Heap::AllocateRawWithRetryOrFailSlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) + 1 0.3% 0.3% v8::internal::Heap::AllocateRaw(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) + 1 0.3% 0.3% v8::OutputStream::GetChunkSize() + 1 0.3% 0.3% std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > std::__1::__pad_and_output<char, std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*, char const*, std::__1::ios_base&, char) + 1 0.3% 0.3% std::__1::num_put<char, std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > >::do_put(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, char, long) const + 1 0.3% 0.3% std::__1::basic_ostream<char, std::__1::char_traits<char> >::operator<<(unsigned long) + 1 0.3% 0.3% int v8::internal::Deserializer::ReadSingleBytecodeData<v8::internal::SlotAccessorForHeapObject>(unsigned char, v8::internal::SlotAccessorForHeapObject) + 1 0.3% 0.3% __pthread_cond_wait + 1 0.3% 0.3% __pthread_cond_signal + 1 0.3% 0.3% Cr_z_inflate_fast_chunk_ + + [Summary]: + ticks total nonlib name + 148 48.8% 51.4% JavaScript + 140 46.2% 48.6% C++ + 20 6.6% 6.9% GC + 15 5.0% Shared libraries + + [C++ entry points]: + ticks cpp total name + 93 93.9% 30.7% v8_Default_embedded_blob_code_data_ + 4 4.0% 1.3% v8::internal::Runtime_CompileForOnStackReplacement(int, unsigned long*, v8::internal::Isolate*) + 2 2.0% 0.7% v8::internal::Runtime_AllocateInYoungGeneration(int, unsigned long*, v8::internal::Isolate*) + + [Bottom up (heavy) profile]: + Note: percentage shows a share of a particular caller in the total + amount of its parent calls. + Callers occupying less than 1.0% are not shown. + + ticks parent name + 102 33.7% LazyCompile: *<anonymous> test/mjsunit/tools/tickprocessor-test.js:1:1 + + 99 32.7% v8_Default_embedded_blob_code_data_ + 76 76.8% LazyCompile: *<anonymous> test/mjsunit/tools/tickprocessor-test.js:1:1 + 16 16.2% LazyCompile: *ics test/mjsunit/tools/tickprocessor-test.js:47:13 + 16 100.0% Script: ~<anonymous> test/mjsunit/tools/tickprocessor-test.js:1:1 + 1 1.0% Script: ~<anonymous> test/mjsunit/tools/tickprocessor-test.js:1:1 + + 25 8.3% LazyCompile: *ics test/mjsunit/tools/tickprocessor-test.js:47:13 + 25 100.0% Script: ~<anonymous> test/mjsunit/tools/tickprocessor-test.js:1:1 + + 21 6.9% LazyCompile: *loop test/mjsunit/tools/tickprocessor-test.js:10:14 + 21 100.0% Script: ~<anonymous> test/mjsunit/tools/tickprocessor-test.js:1:1 + + 12 4.0% __write + + 9 3.0% /usr/local/google/home/cbruni/Documents/v8/v8/out/x64.release/d8 + 4 44.4% LazyCompile: ~ics test/mjsunit/tools/tickprocessor-test.js:47:13 + 4 100.0% Script: ~<anonymous> test/mjsunit/tools/tickprocessor-test.js:1:1 + 2 22.2% Script: ~<anonymous> test/mjsunit/tools/tickprocessor-test.js:1:1 + 2 22.2% LazyCompile: ~read_megamorphic test/mjsunit/tools/tickprocessor-test.js:35:26 + 2 100.0% LazyCompile: ~ics test/mjsunit/tools/tickprocessor-test.js:47:13 + 2 100.0% Script: ~<anonymous> test/mjsunit/tools/tickprocessor-test.js:1:1 + + 6 2.0% /usr/lib/x86_64-linux-gnu/libc-2.31.so diff --git a/deps/v8/test/mjsunit/tools/tickprocessor-test-large.js b/deps/v8/test/mjsunit/tools/tickprocessor-test-large.js new file mode 100644 index 0000000000..0ca4b86450 --- /dev/null +++ b/deps/v8/test/mjsunit/tools/tickprocessor-test-large.js @@ -0,0 +1,58 @@ +// Copyright 2020 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Sample file for creating tickprocessor-test.log +"use strict" + +let result; + +function loop() { + let result = 0; + for (let i = 0; i < 10_000_000; i++) { + result = add(result, 1); + } + return result; +} + +function add(a, b) { + return a + b; +} + + +result = loop(); +result = loop(); + +// Cause some IC misses +function read_monomorphic(o) { + return o.value +} + +function read_polymorphic(o) { + return o.value +} + +function read_megamorphic(o) { + return o.value +} + +const objects = []; +for (let i = 0; i < 100; i++) { + const object = {}; + object['key' + i ]; + object['value'] = 1 + i/100; + objects.push(object) +} + +function ics() { + result = 0; + for (let i = 0; i < objects.length; i++) { + result += read_monomorphic(objects[0]); + result += read_polymorphic(objects[i % 3]) + result += read_megamorphic(objects[i]); + } +} + +for (let i = 0; i < 100_000; i++) { + ics(); +} diff --git a/deps/v8/test/mjsunit/tools/tickprocessor-test-large.log b/deps/v8/test/mjsunit/tools/tickprocessor-test-large.log new file mode 100644 index 0000000000..6aa49159f9 --- /dev/null +++ b/deps/v8/test/mjsunit/tools/tickprocessor-test-large.log @@ -0,0 +1,2759 @@ +v8-version,9,1,0,0,1 +shared-library,/usr/local/google/home/cbruni/Documents/v8/v8/out/x64.release/d8,0x55742561f000,0x557426612000,0 +shared-library,/usr/lib/x86_64-linux-gnu/libc-2.31.so,0x7f3662d7a000,0x7f3662eea000,0 +shared-library,/usr/lib/x86_64-linux-gnu/libgcc_s.so.1,0x7f3662f3f000,0x7f3662f53000,0 +shared-library,/usr/lib/x86_64-linux-gnu/libm-2.31.so,0x7f3662f59000,0x7f3663002000,0 +shared-library,/usr/lib/x86_64-linux-gnu/libpthread-2.31.so,0x7f366309d000,0x7f36630b4000,0 +shared-library,/usr/lib/x86_64-linux-gnu/ld-2.31.so,0x7f36630f2000,0x7f3663113000,0 +shared-library,[vdso],0x7ffd02d39000,0x7ffd02d3b000,0 +profiler,begin,1000 +new,CodeRange,0x2ae700040000,134217728 +tick,0x7f3662e68f6f,1156,0,0x0,6 +new,MemoryChunk,0x2ae708040000,262144 +tick,0x557425b28b7c,2152,0,0x0,6 +new,MemoryChunk,0x2ae708080000,262144 +new,MemoryChunk,0x2ae7080c0000,262144 +new,MemoryChunk,0x2ae708100000,262144 +new,MemoryChunk,0x2ae708140000,262144 +heap-capacity,1014688 +heap-available,4295550784 +new,MemoryChunk,0x2ae708180000,262144 +new,MemoryChunk,0x2ae7081c0000,262144 +new,MemoryChunk,0x2ae700040000,262144 +tick,0x557425e809e0,3216,0,0x0,6 +code-creation,Builtin,2,4006,0x55742631e640,1616,RecordWrite +code-creation,Builtin,2,4022,0x55742631eca0,416,EphemeronKeyBarrier +code-creation,Builtin,2,4031,0x55742631ee60,64,AdaptorWithBuiltinExitFrame +code-creation,Builtin,2,4041,0x55742631eec0,352,CallFunction_ReceiverIsNullOrUndefined +code-creation,Builtin,2,4051,0x55742631f040,404,CallFunction_ReceiverIsNotNullOrUndefined +code-creation,Builtin,2,4061,0x55742631f1e0,444,CallFunction_ReceiverIsAny +code-creation,Builtin,2,4070,0x55742631f3a0,120,CallBoundFunction +code-creation,Builtin,2,4079,0x55742631f420,128,Call_ReceiverIsNullOrUndefined +code-creation,Builtin,2,4088,0x55742631f4c0,128,Call_ReceiverIsNotNullOrUndefined +code-creation,Builtin,2,4098,0x55742631f560,128,Call_ReceiverIsAny +code-creation,Builtin,2,4107,0x55742631f600,576,Call_ReceiverIsNullOrUndefined_Baseline +code-creation,Builtin,2,4117,0x55742631f860,576,Call_ReceiverIsNotNullOrUndefined_Baseline +code-creation,Builtin,2,4127,0x55742631fac0,576,Call_ReceiverIsAny_Baseline +code-creation,Builtin,2,4137,0x55742631fd20,556,Call_ReceiverIsNullOrUndefined_WithFeedback +code-creation,Builtin,2,4148,0x55742631ff60,556,Call_ReceiverIsNotNullOrUndefined_WithFeedback +code-creation,Builtin,2,4159,0x5574263201a0,556,Call_ReceiverIsAny_WithFeedback +code-creation,Builtin,2,4168,0x5574263203e0,752,CallProxy +code-creation,Builtin,2,4176,0x5574263206e0,128,CallVarargs +code-creation,Builtin,2,4185,0x557426320780,988,CallWithSpread +code-creation,Builtin,2,4193,0x557426320b60,1556,CallWithSpread_Baseline +code-creation,Builtin,2,4202,0x557426321180,1588,CallWithSpread_WithFeedback +code-creation,Builtin,2,4211,0x5574263217c0,892,CallWithArrayLike +code-creation,Builtin,2,4220,0x557426321b40,1468,CallWithArrayLike_WithFeedback +code-creation,Builtin,2,4229,0x557426322100,128,CallForwardVarargs +code-creation,Builtin,2,4238,0x5574263221a0,128,CallFunctionForwardVarargs +code-creation,Builtin,2,4247,0x557426322240,152,CallFunctionTemplate_CheckAccess +code-creation,Builtin,2,4257,0x5574263222e0,260,CallFunctionTemplate_CheckCompatibleReceiver +code-creation,Builtin,2,4281,0x557426322400,360,CallFunctionTemplate_CheckAccessAndCompatibleReceiver +code-creation,Builtin,2,4296,0x557426322580,32,ConstructFunction +code-creation,Builtin,2,4308,0x5574263225c0,120,ConstructBoundFunction +code-creation,Builtin,2,4320,0x557426322640,28,ConstructedNonConstructable +code-creation,Builtin,2,4333,0x557426322660,108,Construct +code-creation,Builtin,2,4345,0x5574263226e0,128,ConstructVarargs +code-creation,Builtin,2,4357,0x557426322780,1004,ConstructWithSpread +code-creation,Builtin,2,4369,0x557426322b80,1820,ConstructWithSpread_Baseline +code-creation,Builtin,2,4382,0x5574263232a0,1860,ConstructWithSpread_WithFeedback +code-creation,Builtin,2,4395,0x557426323a00,956,ConstructWithArrayLike +code-creation,Builtin,2,4408,0x557426323dc0,1828,ConstructWithArrayLike_WithFeedback +code-creation,Builtin,2,4421,0x557426324500,168,ConstructForwardVarargs +code-creation,Builtin,2,4434,0x5574263245c0,168,ConstructFunctionForwardVarargs +code-creation,Builtin,2,4456,0x557426324680,876,Construct_Baseline +code-creation,Builtin,2,4469,0x557426324a00,904,Construct_WithFeedback +code-creation,Builtin,2,4482,0x557426324da0,472,JSConstructStubGeneric +code-creation,Builtin,2,4494,0x557426324f80,360,JSBuiltinsConstructStub +code-creation,Builtin,2,4507,0x557426325100,708,FastNewObject +code-creation,Builtin,2,4519,0x5574263253e0,300,FastNewClosure +code-creation,Builtin,2,4532,0x557426325520,748,ConstructProxy +code-creation,Builtin,2,4544,0x557426325820,192,JSEntry +code-creation,Builtin,2,4555,0x557426325900,192,JSConstructEntry +code-creation,Builtin,2,4568,0x5574263259e0,192,JSRunMicrotasksEntry +code-creation,Builtin,2,4580,0x557426325ac0,96,JSEntryTrampoline +code-creation,Builtin,2,4592,0x557426325b40,96,JSConstructEntryTrampoline +code-creation,Builtin,2,4605,0x557426325bc0,332,ResumeGeneratorTrampoline +code-creation,Builtin,2,4618,0x557426325d20,1108,StringCodePointAt +code-creation,Builtin,2,4630,0x557426326180,1572,StringFromCodePointAt +code-creation,Builtin,2,4642,0x5574263267c0,568,StringEqual +code-creation,Builtin,2,4654,0x557426326a00,300,StringGreaterThan +code-creation,Builtin,2,4666,0x557426326b40,300,StringGreaterThanOrEqual +code-creation,Builtin,2,4679,0x557426326c80,300,StringLessThan +code-creation,Builtin,2,4691,0x557426326dc0,300,StringLessThanOrEqual +code-creation,Builtin,2,4700,0x557426326f00,2560,StringSubstring +code-creation,Builtin,2,4712,0x557426327920,80,OrderedHashTableHealIndex +code-creation,Builtin,2,4725,0x557426327980,1240,InterpreterEntryTrampoline +code-creation,Builtin,2,4738,0x557426327e60,80,InterpreterPushArgsThenCall +code-creation,Builtin,2,4751,0x557426327ec0,92,InterpreterPushUndefinedAndArgsThenCall +code-creation,Builtin,2,4764,0x557426327f20,88,InterpreterPushArgsThenCallWithFinalSpread +code-creation,Builtin,2,4778,0x557426327f80,80,InterpreterPushArgsThenConstruct +code-creation,Builtin,2,4791,0x557426327fe0,80,InterpreterPushArgsThenConstructArrayFunction +code-creation,Builtin,2,4805,0x557426328040,88,InterpreterPushArgsThenConstructWithFinalSpread +code-creation,Builtin,2,4819,0x5574263280a0,224,InterpreterEnterBytecodeAdvance +code-creation,Builtin,2,4832,0x5574263281a0,92,InterpreterEnterBytecodeDispatch +code-creation,Builtin,2,4845,0x557426328200,56,InterpreterOnStackReplacement +code-creation,Builtin,2,4858,0x557426328240,612,BaselineOutOfLinePrologue +code-creation,Builtin,2,4871,0x5574263284c0,56,BaselineOnStackReplacement +code-creation,Builtin,2,4883,0x557426328500,84,BaselineLeaveFrame +code-creation,Builtin,2,4896,0x557426328560,1164,CompileLazy +code-creation,Builtin,2,4908,0x557426328a00,88,CompileLazyDeoptimizedCode +code-creation,Builtin,2,4920,0x557426328a60,264,InstantiateAsmJs +code-creation,Builtin,2,4933,0x557426328b80,32,NotifyDeoptimized +code-creation,Builtin,2,4945,0x557426328bc0,788,DeoptimizationEntry_Eager +code-creation,Builtin,2,4958,0x557426328ee0,792,DeoptimizationEntry_Soft +code-creation,Builtin,2,4970,0x557426329200,792,DeoptimizationEntry_Bailout +code-creation,Builtin,2,4983,0x557426329520,792,DeoptimizationEntry_Lazy +code-creation,Builtin,2,4996,0x557426329840,48,ContinueToCodeStubBuiltin +code-creation,Builtin,2,5009,0x557426329880,56,ContinueToCodeStubBuiltinWithResult +code-creation,Builtin,2,5022,0x5574263298c0,52,ContinueToJavaScriptBuiltin +code-creation,Builtin,2,5035,0x557426329900,60,ContinueToJavaScriptBuiltinWithResult +code-creation,Builtin,2,5048,0x557426329940,292,CallApiCallback +code-creation,Builtin,2,5061,0x557426329a80,288,CallApiGetter +code-creation,Builtin,2,5073,0x557426329bc0,12,HandleApiCall +code-creation,Builtin,2,5085,0x557426329be0,12,HandleApiCallAsFunction +code-creation,Builtin,2,5097,0x557426329c00,12,HandleApiCallAsConstructor +code-creation,Builtin,2,5110,0x557426329c20,56,AllocateInYoungGeneration +code-creation,Builtin,2,5122,0x557426329c60,52,AllocateRegularInYoungGeneration +code-creation,Builtin,2,5136,0x557426329ca0,56,AllocateInOldGeneration +code-creation,Builtin,2,5148,0x557426329ce0,52,AllocateRegularInOldGeneration +code-creation,Builtin,2,5166,0x557426329d20,456,CopyFastSmiOrObjectElements +code-creation,Builtin,2,5179,0x557426329f00,516,GrowFastDoubleElements +code-creation,Builtin,2,5191,0x55742632a120,416,GrowFastSmiOrObjectElements +code-creation,Builtin,2,5204,0x55742632a2e0,440,DebugBreakTrampoline +code-creation,Builtin,2,5216,0x55742632a4a0,288,FrameDropperTrampoline +code-creation,Builtin,2,5229,0x55742632a5e0,48,HandleDebuggerStatement +code-creation,Builtin,2,5241,0x55742632a620,184,ToNumber +code-creation,Builtin,2,5253,0x55742632a6e0,288,ToNumber_Baseline +code-creation,Builtin,2,5265,0x55742632a820,348,ToNumeric_Baseline +code-creation,Builtin,2,5277,0x55742632a980,104,PlainPrimitiveToNumber +code-creation,Builtin,2,5290,0x55742632aa00,216,ToNumberConvertBigInt +code-creation,Builtin,2,5302,0x55742632aae0,136,Typeof +code-creation,Builtin,2,5313,0x55742632ab80,104,BigIntToI64 +code-creation,Builtin,2,5323,0x55742632ac00,4,BigIntToI32Pair +code-creation,Builtin,2,5342,0x55742632ac20,212,I64ToBigInt +code-creation,Builtin,2,5375,0x55742632ad00,4,I32PairToBigInt +code-creation,Builtin,2,5387,0x55742632ad20,116,ToBooleanLazyDeoptContinuation +code-creation,Builtin,2,5400,0x55742632ada0,212,TailCallOptimizedCodeSlot +code-creation,Builtin,2,5413,0x55742632ae80,3788,KeyedLoadIC_PolymorphicName +code-creation,Builtin,2,5426,0x55742632bd60,16864,KeyedStoreIC_Megamorphic +code-creation,Builtin,2,5438,0x55742632ff60,324,LoadGlobalIC_NoFeedback +code-creation,Builtin,2,5451,0x5574263300c0,68,LoadIC_FunctionPrototype +code-creation,Builtin,2,5464,0x557426330120,8,LoadIC_StringLength +code-creation,Builtin,2,5476,0x557426330140,16,LoadIC_StringWrapperLength +code-creation,Builtin,2,5489,0x557426330160,3316,LoadIC_NoFeedback +code-creation,Builtin,2,5501,0x557426330e60,32,StoreGlobalIC_Slow +code-creation,Builtin,2,5513,0x557426330ea0,7912,StoreIC_NoFeedback +code-creation,Builtin,2,5525,0x557426332da0,196,KeyedLoadIC_SloppyArguments +code-creation,Builtin,2,5538,0x557426332e80,68,LoadIndexedInterceptorIC +code-creation,Builtin,2,5551,0x557426332ee0,272,KeyedStoreIC_SloppyArguments_Standard +code-creation,Builtin,2,5565,0x557426333000,272,KeyedStoreIC_SloppyArguments_GrowNoTransitionHandleCOW +code-creation,Builtin,2,5579,0x557426333120,272,KeyedStoreIC_SloppyArguments_NoTransitionIgnoreOOB +code-creation,Builtin,2,5594,0x557426333240,272,KeyedStoreIC_SloppyArguments_NoTransitionHandleCOW +code-creation,Builtin,2,5620,0x557426333360,6836,StoreFastElementIC_Standard +code-creation,Builtin,2,5633,0x557426334e20,10144,StoreFastElementIC_GrowNoTransitionHandleCOW +code-creation,Builtin,2,5647,0x5574263375e0,6832,StoreFastElementIC_NoTransitionIgnoreOOB +code-creation,Builtin,2,5661,0x5574263390a0,5820,StoreFastElementIC_NoTransitionHandleCOW +code-creation,Builtin,2,5675,0x55742633a760,9076,ElementsTransitionAndStore_Standard +code-creation,Builtin,2,5689,0x55742633cae0,20632,ElementsTransitionAndStore_GrowNoTransitionHandleCOW +code-creation,Builtin,2,5703,0x557426341b80,9076,ElementsTransitionAndStore_NoTransitionIgnoreOOB +code-creation,Builtin,2,5717,0x557426343f00,11936,ElementsTransitionAndStore_NoTransitionHandleCOW +code-creation,Builtin,2,5732,0x557426346dc0,872,KeyedHasIC_PolymorphicName +code-creation,Builtin,2,5744,0x557426347140,172,KeyedHasIC_SloppyArguments +code-creation,Builtin,2,5757,0x557426347200,68,HasIndexedInterceptorIC +code-creation,Builtin,2,5770,0x557426347260,88,DynamicCheckMapsTrampoline +code-creation,Builtin,2,5782,0x5574263472c0,272,DynamicCheckMaps +code-creation,Builtin,2,5798,0x5574263473e0,164,EnqueueMicrotask +code-creation,Builtin,2,5810,0x5574263474a0,8,RunMicrotasksTrampoline +code-creation,Builtin,2,5823,0x5574263474c0,2404,RunMicrotasks +code-creation,Builtin,2,5835,0x557426347e40,2316,HasProperty +code-creation,Builtin,2,5847,0x557426348760,1112,DeleteProperty +code-creation,Builtin,2,5859,0x557426348bc0,1972,CopyDataProperties +code-creation,Builtin,2,5871,0x557426349380,10024,SetDataProperties +code-creation,Builtin,2,5883,0x55742634bac0,28,Abort +code-creation,Builtin,2,5895,0x55742634bae0,28,AbortCSAAssert +code-creation,Builtin,2,5907,0x55742634bb00,12,EmptyFunction +code-creation,Builtin,2,5922,0x55742634bb20,12,Illegal +code-creation,Builtin,2,5934,0x55742634bb40,12,StrictPoisonPillThrower +code-creation,Builtin,2,5947,0x55742634bb60,12,UnsupportedThrower +code-creation,Builtin,2,5959,0x55742634bb80,64,ReturnReceiver +code-creation,Builtin,2,5971,0x55742634bbe0,36,ArrayConstructor +code-creation,Builtin,2,5983,0x55742634bc20,400,ArrayConstructorImpl +code-creation,Builtin,2,5996,0x55742634bdc0,204,ArrayNoArgumentConstructor_PackedSmi_DontOverride +code-creation,Builtin,2,6010,0x55742634bea0,204,ArrayNoArgumentConstructor_HoleySmi_DontOverride +code-creation,Builtin,2,6024,0x55742634bf80,168,ArrayNoArgumentConstructor_PackedSmi_DisableAllocationSites +code-creation,Builtin,2,6039,0x55742634c040,168,ArrayNoArgumentConstructor_HoleySmi_DisableAllocationSites +code-creation,Builtin,2,6054,0x55742634c100,168,ArrayNoArgumentConstructor_Packed_DisableAllocationSites +code-creation,Builtin,2,6069,0x55742634c1c0,168,ArrayNoArgumentConstructor_Holey_DisableAllocationSites +code-creation,Builtin,2,6083,0x55742634c280,180,ArrayNoArgumentConstructor_PackedDouble_DisableAllocationSites +code-creation,Builtin,2,6098,0x55742634c340,180,ArrayNoArgumentConstructor_HoleyDouble_DisableAllocationSites +code-creation,Builtin,2,6113,0x55742634c400,548,ArraySingleArgumentConstructor_PackedSmi_DontOverride +code-creation,Builtin,2,6128,0x55742634c640,508,ArraySingleArgumentConstructor_HoleySmi_DontOverride +code-creation,Builtin,2,6142,0x55742634c840,476,ArraySingleArgumentConstructor_PackedSmi_DisableAllocationSites +code-creation,Builtin,2,6157,0x55742634ca20,436,ArraySingleArgumentConstructor_HoleySmi_DisableAllocationSites +code-creation,Builtin,2,6172,0x55742634cbe0,476,ArraySingleArgumentConstructor_Packed_DisableAllocationSites +code-creation,Builtin,2,6187,0x55742634cdc0,436,ArraySingleArgumentConstructor_Holey_DisableAllocationSites +code-creation,Builtin,2,6202,0x55742634cf80,480,ArraySingleArgumentConstructor_PackedDouble_DisableAllocationSites +code-creation,Builtin,2,6217,0x55742634d180,444,ArraySingleArgumentConstructor_HoleyDouble_DisableAllocationSites +code-creation,Builtin,2,6235,0x55742634d340,64,ArrayNArgumentsConstructor +code-creation,Builtin,2,6248,0x55742634d3a0,12,ArrayConcat +code-creation,Builtin,2,6260,0x55742634d3c0,12,ArrayPrototypeFill +code-creation,Builtin,2,6272,0x55742634d3e0,956,ArrayIncludesSmiOrObject +code-creation,Builtin,2,6285,0x55742634d7a0,152,ArrayIncludesPackedDoubles +code-creation,Builtin,2,6297,0x55742634d840,228,ArrayIncludesHoleyDoubles +code-creation,Builtin,2,6310,0x55742634d940,556,ArrayIncludes +code-creation,Builtin,2,6322,0x55742634db80,868,ArrayIndexOfSmiOrObject +code-creation,Builtin,2,6335,0x55742634df00,108,ArrayIndexOfPackedDoubles +code-creation,Builtin,2,6347,0x55742634df80,108,ArrayIndexOfHoleyDoubles +code-creation,Builtin,2,6360,0x55742634e000,556,ArrayIndexOf +code-creation,Builtin,2,6372,0x55742634e240,12,ArrayPop +code-creation,Builtin,2,6383,0x55742634e260,656,ArrayPrototypePop +code-creation,Builtin,2,6396,0x55742634e500,12,ArrayPush +code-creation,Builtin,2,6413,0x55742634e520,2588,ArrayPrototypePush +code-creation,Builtin,2,6425,0x55742634ef40,12,ArrayShift +code-creation,Builtin,2,6437,0x55742634ef60,12,ArrayUnshift +code-creation,Builtin,2,6449,0x55742634ef80,992,CloneFastJSArray +code-creation,Builtin,2,6461,0x55742634f380,2368,CloneFastJSArrayFillingHoles +code-creation,Builtin,2,6474,0x55742634fce0,988,ExtractFastJSArray +code-creation,Builtin,2,6486,0x5574263500c0,248,ArrayPrototypeEntries +code-creation,Builtin,2,6499,0x5574263501c0,244,ArrayPrototypeKeys +code-creation,Builtin,2,6511,0x5574263502c0,248,ArrayPrototypeValues +code-creation,Builtin,2,6523,0x5574263503c0,4264,ArrayIteratorPrototypeNext +code-creation,Builtin,2,6536,0x557426351480,3828,FlattenIntoArray +code-creation,Builtin,2,6548,0x557426352380,3804,FlatMapIntoArray +code-creation,Builtin,2,6560,0x557426353260,380,ArrayPrototypeFlat +code-creation,Builtin,2,6573,0x5574263533e0,432,ArrayPrototypeFlatMap +code-creation,Builtin,2,6585,0x5574263535a0,12,ArrayBufferConstructor +code-creation,Builtin,2,6601,0x5574263535c0,12,ArrayBufferConstructor_DoNotInitialize +code-creation,Builtin,2,6615,0x5574263535e0,12,ArrayBufferPrototypeSlice +code-creation,Builtin,2,6628,0x557426353600,608,AsyncFunctionEnter +code-creation,Builtin,2,6642,0x557426353880,140,AsyncFunctionReject +code-creation,Builtin,2,6655,0x557426353920,128,AsyncFunctionResolve +code-creation,Builtin,2,6667,0x5574263539c0,12,AsyncFunctionLazyDeoptContinuation +code-creation,Builtin,2,6681,0x5574263539e0,1320,AsyncFunctionAwaitCaught +code-creation,Builtin,2,6693,0x557426353f20,1320,AsyncFunctionAwaitUncaught +code-creation,Builtin,2,6706,0x557426354460,172,AsyncFunctionAwaitRejectClosure +code-creation,Builtin,2,6719,0x557426354520,168,AsyncFunctionAwaitResolveClosure +code-creation,Builtin,2,6732,0x5574263545e0,12,BigIntConstructor +code-creation,Builtin,2,6745,0x557426354600,12,BigIntAsUintN +code-creation,Builtin,2,6757,0x557426354620,12,BigIntAsIntN +code-creation,Builtin,2,6769,0x557426354640,12,BigIntPrototypeToLocaleString +code-creation,Builtin,2,6782,0x557426354660,12,BigIntPrototypeToString +code-creation,Builtin,2,6794,0x557426354680,12,BigIntPrototypeValueOf +code-creation,Builtin,2,6807,0x5574263546a0,12,CallSitePrototypeGetColumnNumber +code-creation,Builtin,2,6820,0x5574263546c0,12,CallSitePrototypeGetEnclosingColumnNumber +code-creation,Builtin,2,6834,0x5574263546e0,12,CallSitePrototypeGetEnclosingLineNumber +code-creation,Builtin,2,6847,0x557426354700,12,CallSitePrototypeGetEvalOrigin +code-creation,Builtin,2,6860,0x557426354720,12,CallSitePrototypeGetFileName +code-creation,Builtin,2,6873,0x557426354740,12,CallSitePrototypeGetFunction +code-creation,Builtin,2,6886,0x557426354760,12,CallSitePrototypeGetFunctionName +code-creation,Builtin,2,6899,0x557426354780,12,CallSitePrototypeGetLineNumber +code-creation,Builtin,2,6912,0x5574263547a0,12,CallSitePrototypeGetMethodName +code-creation,Builtin,2,6925,0x5574263547c0,12,CallSitePrototypeGetPosition +code-creation,Builtin,2,6938,0x5574263547e0,12,CallSitePrototypeGetPromiseIndex +code-creation,Builtin,2,6951,0x557426354800,12,CallSitePrototypeGetScriptNameOrSourceURL +code-creation,Builtin,2,6965,0x557426354820,12,CallSitePrototypeGetThis +code-creation,Builtin,2,6978,0x557426354840,12,CallSitePrototypeGetTypeName +code-creation,Builtin,2,6990,0x557426354860,12,CallSitePrototypeIsAsync +code-creation,Builtin,2,7003,0x557426354880,12,CallSitePrototypeIsConstructor +code-creation,Builtin,2,7016,0x5574263548a0,12,CallSitePrototypeIsEval +code-creation,Builtin,2,7029,0x5574263548c0,12,CallSitePrototypeIsNative +code-creation,Builtin,2,7041,0x5574263548e0,12,CallSitePrototypeIsPromiseAll +code-creation,Builtin,2,7057,0x557426354900,12,CallSitePrototypeIsToplevel +code-creation,Builtin,2,7070,0x557426354920,12,CallSitePrototypeToString +code-creation,Builtin,2,7083,0x557426354940,12,ConsoleDebug +code-creation,Builtin,2,7095,0x557426354960,12,ConsoleError +code-creation,Builtin,2,7107,0x557426354980,12,ConsoleInfo +code-creation,Builtin,2,7119,0x5574263549a0,12,ConsoleLog +code-creation,Builtin,2,7130,0x5574263549c0,12,ConsoleWarn +code-creation,Builtin,2,7142,0x5574263549e0,12,ConsoleDir +code-creation,Builtin,2,7154,0x557426354a00,12,ConsoleDirXml +code-creation,Builtin,2,7166,0x557426354a20,12,ConsoleTable +code-creation,Builtin,2,7178,0x557426354a40,12,ConsoleTrace +code-creation,Builtin,2,7190,0x557426354a60,12,ConsoleGroup +code-creation,Builtin,2,7202,0x557426354a80,12,ConsoleGroupCollapsed +code-creation,Builtin,2,7214,0x557426354aa0,12,ConsoleGroupEnd +code-creation,Builtin,2,7226,0x557426354ac0,12,ConsoleClear +code-creation,Builtin,2,7238,0x557426354ae0,12,ConsoleCount +code-creation,Builtin,2,7250,0x557426354b00,12,ConsoleCountReset +code-creation,Builtin,2,7262,0x557426354b20,12,ConsoleAssert +code-creation,Builtin,2,7274,0x557426354b40,12,ConsoleProfile +code-creation,Builtin,2,7286,0x557426354b60,12,ConsoleProfileEnd +code-creation,Builtin,2,7299,0x557426354b80,12,ConsoleTime +code-creation,Builtin,2,7310,0x557426354ba0,12,ConsoleTimeLog +code-creation,Builtin,2,7322,0x557426354bc0,12,ConsoleTimeEnd +code-creation,Builtin,2,7334,0x557426354be0,12,ConsoleTimeStamp +code-creation,Builtin,2,7350,0x557426354c00,12,ConsoleContext +code-creation,Builtin,2,7363,0x557426354c20,12,DataViewConstructor +code-creation,Builtin,2,7375,0x557426354c40,12,DateConstructor +code-creation,Builtin,2,7387,0x557426354c60,212,DatePrototypeGetDate +code-creation,Builtin,2,7400,0x557426354d40,212,DatePrototypeGetDay +code-creation,Builtin,2,7412,0x557426354e20,212,DatePrototypeGetFullYear +code-creation,Builtin,2,7425,0x557426354f00,212,DatePrototypeGetHours +code-creation,Builtin,2,7437,0x557426354fe0,188,DatePrototypeGetMilliseconds +code-creation,Builtin,2,7452,0x5574263550a0,212,DatePrototypeGetMinutes +code-creation,Builtin,2,7469,0x557426355180,212,DatePrototypeGetMonth +code-creation,Builtin,2,7481,0x557426355260,212,DatePrototypeGetSeconds +code-creation,Builtin,2,7494,0x557426355340,124,DatePrototypeGetTime +code-creation,Builtin,2,7506,0x5574263553c0,188,DatePrototypeGetTimezoneOffset +code-creation,Builtin,2,7519,0x557426355480,188,DatePrototypeGetUTCDate +code-creation,Builtin,2,7532,0x557426355540,188,DatePrototypeGetUTCDay +code-creation,Builtin,2,7544,0x557426355600,188,DatePrototypeGetUTCFullYear +code-creation,Builtin,2,7557,0x5574263556c0,188,DatePrototypeGetUTCHours +code-creation,Builtin,2,7570,0x557426355780,188,DatePrototypeGetUTCMilliseconds +code-creation,Builtin,2,7583,0x557426355840,188,DatePrototypeGetUTCMinutes +code-creation,Builtin,2,7596,0x557426355900,188,DatePrototypeGetUTCMonth +code-creation,Builtin,2,7608,0x5574263559c0,188,DatePrototypeGetUTCSeconds +code-creation,Builtin,2,7621,0x557426355a80,124,DatePrototypeValueOf +code-creation,Builtin,2,7633,0x557426355b00,364,DatePrototypeToPrimitive +code-creation,Builtin,2,7646,0x557426355c80,12,DatePrototypeGetYear +code-creation,Builtin,2,7658,0x557426355ca0,12,DatePrototypeSetYear +code-creation,Builtin,2,7671,0x557426355cc0,12,DateNow +code-creation,Builtin,2,7683,0x557426355ce0,12,DateParse +code-creation,Builtin,2,7694,0x557426355d00,12,DatePrototypeSetDate +code-creation,Builtin,2,7707,0x557426355d20,12,DatePrototypeSetFullYear +code-creation,Builtin,2,7719,0x557426355d40,12,DatePrototypeSetHours +code-creation,Builtin,2,7732,0x557426355d60,12,DatePrototypeSetMilliseconds +code-creation,Builtin,2,7745,0x557426355d80,12,DatePrototypeSetMinutes +code-creation,Builtin,2,7757,0x557426355da0,12,DatePrototypeSetMonth +code-creation,Builtin,2,7770,0x557426355dc0,12,DatePrototypeSetSeconds +code-creation,Builtin,2,7782,0x557426355de0,12,DatePrototypeSetTime +code-creation,Builtin,2,7794,0x557426355e00,12,DatePrototypeSetUTCDate +code-creation,Builtin,2,7807,0x557426355e20,12,DatePrototypeSetUTCFullYear +code-creation,Builtin,2,7820,0x557426355e40,12,DatePrototypeSetUTCHours +code-creation,Builtin,2,7832,0x557426355e60,12,DatePrototypeSetUTCMilliseconds +code-creation,Builtin,2,7846,0x557426355e80,12,DatePrototypeSetUTCMinutes +code-creation,Builtin,2,7860,0x557426355ea0,12,DatePrototypeSetUTCMonth +code-creation,Builtin,2,7873,0x557426355ec0,12,DatePrototypeSetUTCSeconds +code-creation,Builtin,2,7885,0x557426355ee0,12,DatePrototypeToDateString +code-creation,Builtin,2,7899,0x557426355f00,12,DatePrototypeToISOString +code-creation,Builtin,2,7911,0x557426355f20,12,DatePrototypeToUTCString +code-creation,Builtin,2,7924,0x557426355f40,12,DatePrototypeToString +code-creation,Builtin,2,7937,0x557426355f60,12,DatePrototypeToTimeString +code-creation,Builtin,2,7949,0x557426355f80,12,DatePrototypeToJson +code-creation,Builtin,2,7962,0x557426355fa0,12,DateUTC +code-creation,Builtin,2,7973,0x557426355fc0,12,ErrorConstructor +code-creation,Builtin,2,7985,0x557426355fe0,12,ErrorCaptureStackTrace +code-creation,Builtin,2,7998,0x557426356000,12,ErrorPrototypeToString +code-creation,Builtin,2,8010,0x557426356020,12,FunctionConstructor +code-creation,Builtin,2,8023,0x557426356040,76,FunctionPrototypeApply +code-creation,Builtin,2,8035,0x5574263560a0,12,FunctionPrototypeBind +code-creation,Builtin,2,8048,0x5574263560c0,32,FunctionPrototypeCall +code-creation,Builtin,2,8060,0x557426356100,12,FunctionPrototypeToString +code-creation,Builtin,2,8073,0x557426356120,196,CreateIterResultObject +code-creation,Builtin,2,8090,0x557426356200,808,CreateGeneratorObject +code-creation,Builtin,2,8102,0x557426356540,12,GeneratorFunctionConstructor +code-creation,Builtin,2,8115,0x557426356560,400,GeneratorPrototypeNext +code-creation,Builtin,2,8128,0x557426356700,396,GeneratorPrototypeReturn +code-creation,Builtin,2,8140,0x5574263568a0,400,GeneratorPrototypeThrow +code-creation,Builtin,2,8153,0x557426356a40,12,AsyncFunctionConstructor +code-creation,Builtin,2,8165,0x557426356a60,36,GetIteratorWithFeedbackLazyDeoptContinuation +code-creation,Builtin,2,8179,0x557426356aa0,12,GlobalDecodeURI +code-creation,Builtin,2,8191,0x557426356ac0,12,GlobalDecodeURIComponent +code-creation,Builtin,2,8204,0x557426356ae0,12,GlobalEncodeURI +code-creation,Builtin,2,8216,0x557426356b00,12,GlobalEncodeURIComponent +code-creation,Builtin,2,8229,0x557426356b20,12,GlobalEscape +code-creation,Builtin,2,8241,0x557426356b40,12,GlobalUnescape +code-creation,Builtin,2,8253,0x557426356b60,12,GlobalEval +code-creation,Builtin,2,8267,0x557426356b80,136,GlobalIsFinite +code-creation,Builtin,2,8280,0x557426356c20,132,GlobalIsNaN +code-creation,Builtin,2,8291,0x557426356cc0,12,JsonParse +code-creation,Builtin,2,8303,0x557426356ce0,12,JsonStringify +code-creation,Builtin,2,8315,0x557426356d00,4004,LoadIC +code-creation,Builtin,2,8326,0x557426357cc0,3816,LoadIC_Megamorphic +code-creation,Builtin,2,8339,0x557426358bc0,3848,LoadIC_Noninlined +code-creation,Builtin,2,8351,0x557426359ae0,48,LoadICTrampoline +code-creation,Builtin,2,8363,0x557426359b20,24,LoadICBaseline +code-creation,Builtin,2,8375,0x557426359b40,48,LoadICTrampoline_Megamorphic +code-creation,Builtin,2,8388,0x557426359b80,6856,LoadSuperIC +code-creation,Builtin,2,8400,0x55742635b660,24,LoadSuperICBaseline +code-creation,Builtin,2,8412,0x55742635b680,7232,KeyedLoadIC +code-creation,Builtin,2,8424,0x55742635d2e0,12344,KeyedLoadIC_Megamorphic +code-creation,Builtin,2,8436,0x557426360320,48,KeyedLoadICTrampoline +code-creation,Builtin,2,8448,0x557426360360,24,KeyedLoadICBaseline +code-creation,Builtin,2,8461,0x557426360380,48,KeyedLoadICTrampoline_Megamorphic +code-creation,Builtin,2,8474,0x5574263603c0,5600,StoreGlobalIC +code-creation,Builtin,2,8486,0x5574263619c0,48,StoreGlobalICTrampoline +code-creation,Builtin,2,8498,0x557426361a00,24,StoreGlobalICBaseline +code-creation,Builtin,2,8510,0x557426361a20,5924,StoreIC +code-creation,Builtin,2,8522,0x557426363160,52,StoreICTrampoline +code-creation,Builtin,2,8539,0x5574263631a0,24,StoreICBaseline +code-creation,Builtin,2,8551,0x5574263631c0,6400,KeyedStoreIC +code-creation,Builtin,2,8563,0x557426364ae0,52,KeyedStoreICTrampoline +code-creation,Builtin,2,8575,0x557426364b20,24,KeyedStoreICBaseline +code-creation,Builtin,2,8588,0x557426364b40,500,StoreInArrayLiteralIC +code-creation,Builtin,2,8600,0x557426364d40,24,StoreInArrayLiteralICBaseline +code-creation,Builtin,2,8613,0x557426364d60,152,LookupContextBaseline +code-creation,Builtin,2,8626,0x557426364e00,152,LookupContextInsideTypeofBaseline +code-creation,Builtin,2,8639,0x557426364ea0,2768,LoadGlobalIC +code-creation,Builtin,2,8651,0x557426365980,2748,LoadGlobalICInsideTypeof +code-creation,Builtin,2,8665,0x557426366440,48,LoadGlobalICTrampoline +code-creation,Builtin,2,8678,0x557426366480,24,LoadGlobalICBaseline +code-creation,Builtin,2,8690,0x5574263664a0,48,LoadGlobalICInsideTypeofTrampoline +code-creation,Builtin,2,8703,0x5574263664e0,24,LoadGlobalICInsideTypeofBaseline +code-creation,Builtin,2,8716,0x557426366500,156,LookupGlobalICBaseline +code-creation,Builtin,2,8729,0x5574263665a0,156,LookupGlobalICInsideTypeofBaseline +code-creation,Builtin,2,8742,0x557426366640,2148,CloneObjectIC +code-creation,Builtin,2,8754,0x557426366ec0,24,CloneObjectICBaseline +code-creation,Builtin,2,8766,0x557426366ee0,2128,CloneObjectIC_Slow +code-creation,Builtin,2,8778,0x557426367740,2552,KeyedHasIC +code-creation,Builtin,2,8790,0x557426368140,24,KeyedHasICBaseline +code-creation,Builtin,2,8802,0x557426368160,2320,KeyedHasIC_Megamorphic +code-creation,Builtin,2,8815,0x557426368a80,1464,IterableToList +code-creation,Builtin,2,8827,0x557426369040,1276,IterableToFixedArray +code-creation,Builtin,2,8843,0x557426369540,780,IterableToListWithSymbolLookup +code-creation,Builtin,2,8856,0x557426369860,56,IterableToFixedArrayWithSymbolLookupSlow +code-creation,Builtin,2,8870,0x5574263698a0,128,IterableToListMayPreserveHoles +code-creation,Builtin,2,8883,0x557426369940,1012,IterableToFixedArrayForWasm +code-creation,Builtin,2,8895,0x557426369d40,1660,StringListFromIterable +code-creation,Builtin,2,8908,0x55742636a3c0,1284,FindOrderedHashMapEntry +code-creation,Builtin,2,8921,0x55742636a8e0,4360,MapConstructor +code-creation,Builtin,2,8933,0x55742636ba00,2100,MapPrototypeSet +code-creation,Builtin,2,8945,0x55742636c240,1616,MapPrototypeDelete +code-creation,Builtin,2,8957,0x55742636c8a0,220,MapPrototypeGet +code-creation,Builtin,2,8969,0x55742636c980,168,MapPrototypeHas +code-creation,Builtin,2,8981,0x55742636ca40,12,MapPrototypeClear +code-creation,Builtin,2,8993,0x55742636ca60,284,MapPrototypeEntries +code-creation,Builtin,2,9006,0x55742636cb80,144,MapPrototypeGetSize +code-creation,Builtin,2,9018,0x55742636cc20,520,MapPrototypeForEach +code-creation,Builtin,2,9030,0x55742636ce40,284,MapPrototypeKeys +code-creation,Builtin,2,9042,0x55742636cf60,284,MapPrototypeValues +code-creation,Builtin,2,9054,0x55742636d080,972,MapIteratorPrototypeNext +code-creation,Builtin,2,9069,0x55742636d460,1264,MapIteratorToList +code-creation,Builtin,2,9081,0x55742636d960,12,NumberPrototypeToExponential +code-creation,Builtin,2,9094,0x55742636d980,12,NumberPrototypeToFixed +code-creation,Builtin,2,9106,0x55742636d9a0,12,NumberPrototypeToLocaleString +code-creation,Builtin,2,9119,0x55742636d9c0,12,NumberPrototypeToPrecision +code-creation,Builtin,2,9132,0x55742636d9e0,336,SameValue +code-creation,Builtin,2,9144,0x55742636db40,200,SameValueNumbersOnly +code-creation,Builtin,2,9156,0x55742636dc20,772,Add_Baseline +code-creation,Builtin,2,9168,0x55742636df40,816,Subtract_Baseline +code-creation,Builtin,2,9180,0x55742636e280,912,Multiply_Baseline +code-creation,Builtin,2,9192,0x55742636e620,792,Divide_Baseline +code-creation,Builtin,2,9204,0x55742636e940,840,Modulus_Baseline +code-creation,Builtin,2,9216,0x55742636eca0,76,Exponentiate_Baseline +code-creation,Builtin,2,9228,0x55742636ed00,816,BitwiseAnd_Baseline +code-creation,Builtin,2,9241,0x55742636f040,820,BitwiseOr_Baseline +code-creation,Builtin,2,9253,0x55742636f380,816,BitwiseXor_Baseline +code-creation,Builtin,2,9265,0x55742636f6c0,836,ShiftLeft_Baseline +code-creation,Builtin,2,9277,0x55742636fa20,836,ShiftRight_Baseline +code-creation,Builtin,2,9290,0x55742636fd80,840,ShiftRightLogical_Baseline +code-creation,Builtin,2,9302,0x5574263700e0,696,Add_WithFeedback +code-creation,Builtin,2,9314,0x5574263703a0,764,Subtract_WithFeedback +code-creation,Builtin,2,9327,0x5574263706a0,880,Multiply_WithFeedback +code-creation,Builtin,2,9339,0x557426370a20,784,Divide_WithFeedback +code-creation,Builtin,2,9351,0x557426370d40,824,Modulus_WithFeedback +code-creation,Builtin,2,9364,0x557426371080,52,Exponentiate_WithFeedback +code-creation,Builtin,2,9376,0x5574263710c0,788,BitwiseAnd_WithFeedback +code-creation,Builtin,2,9389,0x5574263713e0,780,BitwiseOr_WithFeedback +code-creation,Builtin,2,9401,0x557426371700,788,BitwiseXor_WithFeedback +code-creation,Builtin,2,9413,0x557426371a20,800,ShiftLeft_WithFeedback +code-creation,Builtin,2,9426,0x557426371d60,800,ShiftRight_WithFeedback +code-creation,Builtin,2,9438,0x5574263720a0,808,ShiftRightLogical_WithFeedback +code-creation,Builtin,2,9451,0x5574263723e0,1588,Equal_Baseline +code-creation,Builtin,2,9465,0x557426372a20,848,StrictEqual_Baseline +code-creation,Builtin,2,9477,0x557426372d80,1220,LessThan_Baseline +code-creation,Builtin,2,9489,0x557426373260,1220,GreaterThan_Baseline +code-creation,Builtin,2,9502,0x557426373740,1220,LessThanOrEqual_Baseline +code-creation,Builtin,2,9514,0x557426373c20,1220,GreaterThanOrEqual_Baseline +code-creation,Builtin,2,9527,0x557426374100,1560,Equal_WithFeedback +code-creation,Builtin,2,9539,0x557426374720,884,StrictEqual_WithFeedback +code-creation,Builtin,2,9552,0x557426374aa0,1204,LessThan_WithFeedback +code-creation,Builtin,2,9564,0x557426374f60,1204,GreaterThan_WithFeedback +code-creation,Builtin,2,9580,0x557426375420,1204,LessThanOrEqual_WithFeedback +tick,0x557425c38bd0,9617,0,0x0,6 +tick,0x7f36630a9f09,9659,0,0x0,6 +tick,0x5574264606de,9675,0,0x0,6 +tick,0x7f3662e68f6f,9690,0,0x0,6 +tick,0x7f3662dfac6d,9705,0,0x0,6 +tick,0x5574259875be,9719,0,0x0,6 +code-creation,Builtin,2,9734,0x5574263758e0,1204,GreaterThanOrEqual_WithFeedback +code-creation,Builtin,2,9748,0x557426375da0,448,BitwiseNot_Baseline +code-creation,Builtin,2,9757,0x557426375f80,448,Decrement_Baseline +code-creation,Builtin,2,9766,0x557426376160,448,Increment_Baseline +code-creation,Builtin,2,9774,0x557426376340,472,Negate_Baseline +code-creation,Builtin,2,9783,0x557426376520,424,BitwiseNot_WithFeedback +code-creation,Builtin,2,9792,0x5574263766e0,420,Decrement_WithFeedback +code-creation,Builtin,2,9801,0x5574263768a0,420,Increment_WithFeedback +code-creation,Builtin,2,9810,0x557426376a60,444,Negate_WithFeedback +code-creation,Builtin,2,9818,0x557426376c20,256,ObjectAssign +code-creation,Builtin,2,9827,0x557426376d40,924,ObjectCreate +code-creation,Builtin,2,9835,0x5574263770e0,12,ObjectDefineGetter +code-creation,Builtin,2,9844,0x557426377100,12,ObjectDefineProperties +code-creation,Builtin,2,9853,0x557426377120,12,ObjectDefineProperty +code-creation,Builtin,2,9862,0x557426377140,12,ObjectDefineSetter +code-creation,Builtin,2,9870,0x557426377160,1592,ObjectEntries +code-creation,Builtin,2,9879,0x5574263777a0,12,ObjectFreeze +code-creation,Builtin,2,9887,0x5574263777c0,6300,ObjectGetOwnPropertyDescriptor +code-creation,Builtin,2,9897,0x557426379060,12,ObjectGetOwnPropertyDescriptors +code-creation,Builtin,2,9906,0x557426379080,612,ObjectGetOwnPropertyNames +code-creation,Builtin,2,9915,0x557426379300,12,ObjectGetOwnPropertySymbols +code-creation,Builtin,2,9925,0x557426379320,396,ObjectIs +code-creation,Builtin,2,9935,0x5574263794c0,12,ObjectIsFrozen +code-creation,Builtin,2,9943,0x5574263794e0,12,ObjectIsSealed +code-creation,Builtin,2,9952,0x557426379500,552,ObjectKeys +code-creation,Builtin,2,9960,0x557426379740,12,ObjectLookupGetter +code-creation,Builtin,2,9969,0x557426379760,12,ObjectLookupSetter +code-creation,Builtin,2,9978,0x557426379780,1896,ObjectPrototypeHasOwnProperty +code-creation,Builtin,2,9987,0x557426379f00,244,ObjectPrototypeIsPrototypeOf +code-creation,Builtin,2,9997,0x55742637a000,12,ObjectPrototypePropertyIsEnumerable +code-creation,Builtin,2,10006,0x55742637a020,12,ObjectPrototypeGetProto +code-creation,Builtin,2,10016,0x55742637a040,12,ObjectPrototypeSetProto +code-creation,Builtin,2,10025,0x55742637a060,12,ObjectSeal +code-creation,Builtin,2,10033,0x55742637a080,1180,ObjectToString +code-creation,Builtin,2,10041,0x55742637a520,1328,ObjectValues +code-creation,Builtin,2,10050,0x55742637aa60,312,OrdinaryHasInstance +code-creation,Builtin,2,10059,0x55742637aba0,364,InstanceOf +code-creation,Builtin,2,10067,0x55742637ad20,684,InstanceOf_WithFeedback +code-creation,Builtin,2,10076,0x55742637afe0,708,InstanceOf_Baseline +code-creation,Builtin,2,10084,0x55742637b2c0,280,ForInEnumerate +code-creation,Builtin,2,10093,0x55742637b3e0,144,ForInPrepare +code-creation,Builtin,2,10101,0x55742637b480,2264,ForInFilter +code-creation,Builtin,2,10110,0x55742637bd60,56,ReflectApply +code-creation,Builtin,2,10118,0x55742637bda0,64,ReflectConstruct +code-creation,Builtin,2,10126,0x55742637be00,12,ReflectDefineProperty +code-creation,Builtin,2,10135,0x55742637be20,12,ReflectGetOwnPropertyDescriptor +code-creation,Builtin,2,10145,0x55742637be40,12,ReflectOwnKeys +code-creation,Builtin,2,10153,0x55742637be60,12,ReflectSet +code-creation,Builtin,2,10161,0x55742637be80,12,RegExpCapture1Getter +code-creation,Builtin,2,10170,0x55742637bea0,12,RegExpCapture2Getter +code-creation,Builtin,2,10179,0x55742637bec0,12,RegExpCapture3Getter +code-creation,Builtin,2,10188,0x55742637bee0,12,RegExpCapture4Getter +code-creation,Builtin,2,10197,0x55742637bf00,12,RegExpCapture5Getter +code-creation,Builtin,2,10206,0x55742637bf20,12,RegExpCapture6Getter +code-creation,Builtin,2,10216,0x55742637bf40,12,RegExpCapture7Getter +code-creation,Builtin,2,10225,0x55742637bf60,12,RegExpCapture8Getter +code-creation,Builtin,2,10238,0x55742637bf80,12,RegExpCapture9Getter +code-creation,Builtin,2,10247,0x55742637bfa0,2312,RegExpConstructor +code-creation,Builtin,2,10256,0x55742637c8c0,12,RegExpInputGetter +code-creation,Builtin,2,10264,0x55742637c8e0,12,RegExpInputSetter +code-creation,Builtin,2,10273,0x55742637c900,12,RegExpLastMatchGetter +code-creation,Builtin,2,10282,0x55742637c920,12,RegExpLastParenGetter +code-creation,Builtin,2,10291,0x55742637c940,12,RegExpLeftContextGetter +code-creation,Builtin,2,10300,0x55742637c960,940,RegExpPrototypeCompile +code-creation,Builtin,2,10309,0x55742637cd20,12,RegExpPrototypeToString +code-creation,Builtin,2,10318,0x55742637cd40,12,RegExpRightContextGetter +code-creation,Builtin,2,10327,0x55742637cd60,280,RegExpExecAtom +code-creation,Builtin,2,10335,0x55742637ce80,1052,RegExpExecInternal +code-creation,Builtin,2,10344,0x55742637d2a0,8,RegExpInterpreterTrampoline +code-creation,Builtin,2,10353,0x55742637d2c0,8,RegExpExperimentalTrampoline +code-creation,Builtin,2,10362,0x55742637d2e0,2792,SetConstructor +code-creation,Builtin,2,10371,0x55742637dde0,1360,SetPrototypeHas +code-creation,Builtin,2,10379,0x55742637e340,1800,SetPrototypeAdd +code-creation,Builtin,2,10388,0x55742637ea60,1564,SetPrototypeDelete +code-creation,Builtin,2,10397,0x55742637f080,12,SetPrototypeClear +code-creation,Builtin,2,10405,0x55742637f0a0,284,SetPrototypeEntries +code-creation,Builtin,2,10414,0x55742637f1c0,144,SetPrototypeGetSize +code-creation,Builtin,2,10423,0x55742637f260,480,SetPrototypeForEach +code-creation,Builtin,2,10431,0x55742637f460,284,SetPrototypeValues +code-creation,Builtin,2,10440,0x55742637f580,908,SetIteratorPrototypeNext +code-creation,Builtin,2,10449,0x55742637f920,1200,SetOrSetIteratorToList +code-creation,Builtin,2,10458,0x55742637fde0,12,SharedArrayBufferPrototypeSlice +code-creation,Builtin,2,10467,0x55742637fe00,1316,AtomicsLoad +code-creation,Builtin,2,10476,0x557426380340,1008,AtomicsStore +code-creation,Builtin,2,10484,0x557426380740,1736,AtomicsExchange +code-creation,Builtin,2,10493,0x557426380e20,2152,AtomicsCompareExchange +code-creation,Builtin,2,10504,0x5574263816a0,1860,AtomicsAdd +code-creation,Builtin,2,10512,0x557426381e00,1860,AtomicsSub +code-creation,Builtin,2,10520,0x557426382560,1860,AtomicsAnd +code-creation,Builtin,2,10529,0x557426382cc0,1860,AtomicsOr +code-creation,Builtin,2,10537,0x557426383420,1860,AtomicsXor +code-creation,Builtin,2,10545,0x557426383b80,12,AtomicsNotify +code-creation,Builtin,2,10553,0x557426383ba0,12,AtomicsIsLockFree +code-creation,Builtin,2,10562,0x557426383bc0,12,AtomicsWait +code-creation,Builtin,2,10570,0x557426383be0,12,AtomicsWaitAsync +code-creation,Builtin,2,10579,0x557426383c00,12,StringFromCodePoint +code-creation,Builtin,2,10588,0x557426383c20,1476,StringFromCharCode +code-creation,Builtin,2,10596,0x557426384200,12,StringPrototypeLastIndexOf +code-creation,Builtin,2,10606,0x557426384220,4660,StringPrototypeMatchAll +code-creation,Builtin,2,10615,0x557426385460,12,StringPrototypeLocaleCompare +code-creation,Builtin,2,10624,0x557426385480,1300,StringPrototypeReplace +code-creation,Builtin,2,10633,0x5574263859a0,3060,StringPrototypeSplit +code-creation,Builtin,2,10642,0x5574263865a0,12,StringRaw +code-creation,Builtin,2,10660,0x5574263865c0,12,SymbolConstructor +code-creation,Builtin,2,10672,0x5574263865e0,12,SymbolFor +code-creation,Builtin,2,10684,0x557426386600,12,SymbolKeyFor +code-creation,Builtin,2,10696,0x557426386620,84,TypedArrayBaseConstructor +code-creation,Builtin,2,10709,0x557426386680,260,TypedArrayConstructor +code-creation,Builtin,2,10721,0x5574263867a0,12,TypedArrayPrototypeBuffer +code-creation,Builtin,2,10734,0x5574263867c0,292,TypedArrayPrototypeByteLength +code-creation,Builtin,2,10747,0x557426386900,292,TypedArrayPrototypeByteOffset +code-creation,Builtin,2,10760,0x557426386a40,292,TypedArrayPrototypeLength +code-creation,Builtin,2,10773,0x557426386b80,12,TypedArrayPrototypeCopyWithin +code-creation,Builtin,2,10785,0x557426386ba0,12,TypedArrayPrototypeFill +code-creation,Builtin,2,10798,0x557426386bc0,12,TypedArrayPrototypeIncludes +code-creation,Builtin,2,10815,0x557426386be0,12,TypedArrayPrototypeIndexOf +code-creation,Builtin,2,10828,0x557426386c00,12,TypedArrayPrototypeLastIndexOf +code-creation,Builtin,2,10841,0x557426386c20,12,TypedArrayPrototypeReverse +code-creation,Builtin,2,10855,0x557426386c40,320,TypedArrayPrototypeToStringTag +code-creation,Builtin,2,10869,0x557426386da0,10692,TypedArrayPrototypeMap +code-creation,Builtin,2,10881,0x557426389780,836,GenericJSToWasmWrapper +code-creation,Builtin,2,10894,0x557426389ae0,148,WasmCompileLazy +code-creation,Builtin,2,10906,0x557426389b80,168,WasmDebugBreak +code-creation,Builtin,2,10918,0x557426389c40,140,WasmFloat32ToNumber +code-creation,Builtin,2,10930,0x557426389ce0,164,WasmFloat64ToNumber +code-creation,Builtin,2,10943,0x557426389da0,4,WasmI32AtomicWait32 +code-creation,Builtin,2,10955,0x557426389dc0,4,WasmI64AtomicWait32 +code-creation,Builtin,2,10967,0x557426389de0,24,JSToWasmLazyDeoptContinuation +code-creation,Builtin,2,10980,0x557426389e00,4596,WeakMapConstructor +code-creation,Builtin,2,10993,0x55742638b000,212,WeakMapLookupHashIndex +code-creation,Builtin,2,11005,0x55742638b0e0,204,WeakMapGet +code-creation,Builtin,2,11017,0x55742638b1c0,176,WeakMapPrototypeHas +code-creation,Builtin,2,11029,0x55742638b280,200,WeakMapPrototypeSet +code-creation,Builtin,2,11042,0x55742638b360,144,WeakMapPrototypeDelete +code-creation,Builtin,2,11054,0x55742638b400,3044,WeakSetConstructor +code-creation,Builtin,2,11066,0x55742638c000,176,WeakSetPrototypeHas +code-creation,Builtin,2,11079,0x55742638c0c0,200,WeakSetPrototypeAdd +code-creation,Builtin,2,11091,0x55742638c1a0,144,WeakSetPrototypeDelete +code-creation,Builtin,2,11103,0x55742638c240,424,WeakCollectionDelete +code-creation,Builtin,2,11116,0x55742638c400,864,WeakCollectionSet +code-creation,Builtin,2,11128,0x55742638c780,332,AsyncGeneratorResolve +code-creation,Builtin,2,11140,0x55742638c8e0,120,AsyncGeneratorReject +code-creation,Builtin,2,11153,0x55742638c960,1260,AsyncGeneratorYield +code-creation,Builtin,2,11165,0x55742638ce60,1332,AsyncGeneratorReturn +code-creation,Builtin,2,11178,0x55742638d3a0,308,AsyncGeneratorResumeNext +code-creation,Builtin,2,11190,0x55742638d4e0,12,AsyncGeneratorFunctionConstructor +code-creation,Builtin,2,11203,0x55742638d500,892,AsyncGeneratorPrototypeNext +code-creation,Builtin,2,11216,0x55742638d880,892,AsyncGeneratorPrototypeReturn +code-creation,Builtin,2,11229,0x55742638dc00,892,AsyncGeneratorPrototypeThrow +code-creation,Builtin,2,11242,0x55742638df80,1252,AsyncGeneratorAwaitCaught +code-creation,Builtin,2,11256,0x55742638e480,1252,AsyncGeneratorAwaitUncaught +code-creation,Builtin,2,11269,0x55742638e980,120,AsyncGeneratorAwaitResolveClosure +code-creation,Builtin,2,11282,0x55742638ea00,124,AsyncGeneratorAwaitRejectClosure +code-creation,Builtin,2,11295,0x55742638ea80,124,AsyncGeneratorYieldResolveClosure +code-creation,Builtin,2,11309,0x55742638eb00,124,AsyncGeneratorReturnClosedResolveClosure +code-creation,Builtin,2,11322,0x55742638eb80,116,AsyncGeneratorReturnClosedRejectClosure +code-creation,Builtin,2,11336,0x55742638ec00,124,AsyncGeneratorReturnResolveClosure +code-creation,Builtin,2,11349,0x55742638ec80,1444,AsyncFromSyncIteratorPrototypeNext +code-creation,Builtin,2,11362,0x55742638f240,1552,AsyncFromSyncIteratorPrototypeThrow +code-creation,Builtin,2,11376,0x55742638f860,1572,AsyncFromSyncIteratorPrototypeReturn +code-creation,Builtin,2,11389,0x55742638fea0,100,AsyncIteratorValueUnwrap +code-creation,Builtin,2,11402,0x55742638ff20,228,CEntry_Return1_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit +code-creation,Builtin,2,11416,0x557426390020,228,CEntry_Return1_DontSaveFPRegs_ArgvOnStack_BuiltinExit +code-creation,Builtin,2,11431,0x557426390120,212,CEntry_Return1_DontSaveFPRegs_ArgvInRegister_NoBuiltinExit +code-creation,Builtin,2,11446,0x557426390200,404,CEntry_Return1_SaveFPRegs_ArgvOnStack_NoBuiltinExit +code-creation,Builtin,2,11460,0x5574263903a0,404,CEntry_Return1_SaveFPRegs_ArgvOnStack_BuiltinExit +code-creation,Builtin,2,11475,0x557426390540,228,CEntry_Return2_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit +code-creation,Builtin,2,11489,0x557426390640,228,CEntry_Return2_DontSaveFPRegs_ArgvOnStack_BuiltinExit +code-creation,Builtin,2,11508,0x557426390740,212,CEntry_Return2_DontSaveFPRegs_ArgvInRegister_NoBuiltinExit +code-creation,Builtin,2,11523,0x557426390820,404,CEntry_Return2_SaveFPRegs_ArgvOnStack_NoBuiltinExit +code-creation,Builtin,2,11537,0x5574263909c0,404,CEntry_Return2_SaveFPRegs_ArgvOnStack_BuiltinExit +code-creation,Builtin,2,11551,0x557426390b60,4,DirectCEntry +code-creation,Builtin,2,11563,0x557426390b80,1136,StringAdd_CheckNone +code-creation,Builtin,2,11575,0x557426391000,2600,SubString +code-creation,Builtin,2,11587,0x557426391a40,16,StackCheck +code-creation,Builtin,2,11599,0x557426391a60,84,DoubleToI +code-creation,Builtin,2,11611,0x557426391ac0,2364,GetProperty +code-creation,Builtin,2,11623,0x557426392400,2468,GetPropertyWithReceiver +code-creation,Builtin,2,11636,0x557426392dc0,16988,SetProperty +code-creation,Builtin,2,11647,0x557426397020,14512,SetPropertyInLiteral +code-creation,Builtin,2,11660,0x55742639a8e0,8,MemCopyUint8Uint8 +code-creation,Builtin,2,11673,0x55742639a900,8,MemMove +code-creation,Builtin,2,11687,0x55742639a920,12,IsTraceCategoryEnabled +code-creation,Builtin,2,11701,0x55742639a940,12,Trace +tick,0x7f3662e68f6f,11718,0,0x0,6 +tick,0x7f36630a9f09,11736,0,0x0,6 +code-creation,Builtin,2,11751,0x55742639a960,12,FinalizationRegistryUnregister +code-creation,Builtin,2,11764,0x55742639a980,400,AsyncModuleEvaluate +code-creation,Builtin,2,11773,0x55742639ab20,12,CallAsyncModuleFulfilled +code-creation,Builtin,2,11783,0x55742639ab40,12,CallAsyncModuleRejected +code-creation,Builtin,2,11792,0x55742639ab60,236,AggregateErrorConstructor +code-creation,Builtin,2,11802,0x55742639ac60,880,ArrayPrototypeAt +code-creation,Builtin,2,11810,0x55742639afe0,5892,ArrayPrototypeCopyWithin +code-creation,Builtin,2,11820,0x55742639c700,224,ArrayEveryLoopEagerDeoptContinuation +code-creation,Builtin,2,11830,0x55742639c800,628,ArrayEveryLoopLazyDeoptContinuation +code-creation,Builtin,2,11840,0x55742639ca80,2916,ArrayEveryLoopContinuation +code-creation,Builtin,2,11849,0x55742639d600,1532,ArrayEvery +code-creation,Builtin,2,11858,0x55742639dc00,292,ArrayFilterLoopEagerDeoptContinuation +code-creation,Builtin,2,11868,0x55742639dd40,1000,ArrayFilterLoopLazyDeoptContinuation +code-creation,Builtin,2,11878,0x55742639e140,3240,ArrayFilterLoopContinuation +code-creation,Builtin,2,11888,0x55742639ee00,4504,ArrayFilter +code-creation,Builtin,2,11896,0x55742639ffa0,208,ArrayFindLoopEagerDeoptContinuation +code-creation,Builtin,2,11907,0x5574263a0080,32,ArrayFindLoopLazyDeoptContinuation +code-creation,Builtin,2,11917,0x5574263a00c0,332,ArrayFindLoopAfterCallbackLazyDeoptContinuation +code-creation,Builtin,2,11927,0x5574263a0220,540,ArrayFindLoopContinuation +code-creation,Builtin,2,11937,0x5574263a0440,1520,ArrayPrototypeFind +code-creation,Builtin,2,11946,0x5574263a0a40,208,ArrayFindIndexLoopEagerDeoptContinuation +code-creation,Builtin,2,11956,0x5574263a0b20,32,ArrayFindIndexLoopLazyDeoptContinuation +code-creation,Builtin,2,11966,0x5574263a0b60,332,ArrayFindIndexLoopAfterCallbackLazyDeoptContinuation +code-creation,Builtin,2,11977,0x5574263a0cc0,532,ArrayFindIndexLoopContinuation +code-creation,Builtin,2,11986,0x5574263a0ee0,1516,ArrayPrototypeFindIndex +code-creation,Builtin,2,11995,0x5574263a14e0,224,ArrayForEachLoopEagerDeoptContinuation +code-creation,Builtin,2,12005,0x5574263a15e0,224,ArrayForEachLoopLazyDeoptContinuation +code-creation,Builtin,2,12015,0x5574263a16e0,2808,ArrayForEachLoopContinuation +code-creation,Builtin,2,12024,0x5574263a21e0,1364,ArrayForEach +code-creation,Builtin,2,12033,0x5574263a2740,3780,ArrayFrom +code-creation,Builtin,2,12043,0x5574263a3620,164,ArrayIsArray +code-creation,Builtin,2,12051,0x5574263a36e0,432,LoadJoinElement_DictionaryElements_0 +code-creation,Builtin,2,12061,0x5574263a38a0,48,LoadJoinElement_FastSmiOrObjectElements_0 +code-creation,Builtin,2,12072,0x5574263a38e0,144,LoadJoinElement_FastDoubleElements_0 +code-creation,Builtin,2,12081,0x5574263a3980,332,ConvertToLocaleString +code-creation,Builtin,2,12090,0x5574263a3ae0,812,JoinStackPush +code-creation,Builtin,2,12099,0x5574263a3e20,280,JoinStackPop +code-creation,Builtin,2,12111,0x5574263a3f40,6944,ArrayPrototypeJoin +code-creation,Builtin,2,12120,0x5574263a5a80,5580,ArrayPrototypeToLocaleString +code-creation,Builtin,2,12129,0x5574263a7060,244,ArrayPrototypeToString +code-creation,Builtin,2,12138,0x5574263a7160,6220,TypedArrayPrototypeJoin +code-creation,Builtin,2,12147,0x5574263a89c0,4840,TypedArrayPrototypeToLocaleString +code-creation,Builtin,2,12157,0x5574263a9cc0,3888,ArrayPrototypeLastIndexOf +code-creation,Builtin,2,12166,0x5574263aac00,264,ArrayMapPreLoopLazyDeoptContinuation +code-creation,Builtin,2,12175,0x5574263aad20,264,ArrayMapLoopEagerDeoptContinuation +code-creation,Builtin,2,12185,0x5574263aae40,552,ArrayMapLoopLazyDeoptContinuation +code-creation,Builtin,2,12195,0x5574263ab080,2848,ArrayMapLoopContinuation +code-creation,Builtin,2,12204,0x5574263abbc0,3956,ArrayMap +code-creation,Builtin,2,12212,0x5574263acb40,1016,ArrayOf +code-creation,Builtin,2,12220,0x5574263acf40,452,ArrayReduceRightPreLoopEagerDeoptContinuation +code-creation,Builtin,2,12230,0x5574263ad120,208,ArrayReduceRightLoopEagerDeoptContinuation +code-creation,Builtin,2,12240,0x5574263ad200,208,ArrayReduceRightLoopLazyDeoptContinuation +code-creation,Builtin,2,12250,0x5574263ad2e0,2820,ArrayReduceRightLoopContinuation +code-creation,Builtin,2,12260,0x5574263ade00,2076,ArrayReduceRight +code-creation,Builtin,2,12268,0x5574263ae620,188,ArrayReducePreLoopEagerDeoptContinuation +code-creation,Builtin,2,12278,0x5574263ae6e0,208,ArrayReduceLoopEagerDeoptContinuation +code-creation,Builtin,2,12288,0x5574263ae7c0,208,ArrayReduceLoopLazyDeoptContinuation +code-creation,Builtin,2,12298,0x5574263ae8a0,2884,ArrayReduceLoopContinuation +code-creation,Builtin,2,12307,0x5574263af400,1652,ArrayReduce +code-creation,Builtin,2,12315,0x5574263afa80,3420,ArrayPrototypeReverse +code-creation,Builtin,2,12324,0x5574263b07e0,3724,ArrayPrototypeShift +code-creation,Builtin,2,12333,0x5574263b1680,5360,ArrayPrototypeSlice +code-creation,Builtin,2,12343,0x5574263b2b80,224,ArraySomeLoopEagerDeoptContinuation +code-creation,Builtin,2,12353,0x5574263b2c80,596,ArraySomeLoopLazyDeoptContinuation +code-creation,Builtin,2,12363,0x5574263b2ee0,2900,ArraySomeLoopContinuation +code-creation,Builtin,2,12372,0x5574263b3a40,1516,ArraySome +code-creation,Builtin,2,12380,0x5574263b4040,15124,ArrayPrototypeSplice +code-creation,Builtin,2,12389,0x5574263b7b60,3440,ArrayPrototypeUnshift +code-creation,Builtin,2,12398,0x5574263b88e0,324,ArrayBufferPrototypeGetByteLength +code-creation,Builtin,2,12407,0x5574263b8a40,324,SharedArrayBufferPrototypeGetByteLength +code-creation,Builtin,2,12417,0x5574263b8ba0,104,ArrayBufferIsView +code-creation,Builtin,2,12426,0x5574263b8c20,396,ToInteger +code-creation,Builtin,2,12434,0x5574263b8dc0,3364,FastCreateDataProperty +code-creation,Builtin,2,12443,0x5574263b9b00,672,CheckNumberInRange +code-creation,Builtin,2,12452,0x5574263b9dc0,648,CheckSameObject +code-creation,Builtin,2,12460,0x5574263ba060,952,BooleanConstructor +code-creation,Builtin,2,12469,0x5574263ba420,164,BooleanPrototypeToString +code-creation,Builtin,2,12478,0x5574263ba4e0,160,BooleanPrototypeValueOf +code-creation,Builtin,2,12487,0x5574263ba5a0,1148,BigIntAddNoThrow +code-creation,Builtin,2,12496,0x5574263baa20,1240,BigIntAdd +code-creation,Builtin,2,12504,0x5574263baf00,1148,BigIntSubtractNoThrow +code-creation,Builtin,2,12512,0x5574263bb380,1240,BigIntSubtract +code-creation,Builtin,2,12521,0x5574263bb860,272,BigIntUnaryMinus +code-creation,Builtin,2,12530,0x5574263bb980,1444,ToString +code-creation,Builtin,2,12538,0x5574263bbf40,160,StringPrototypeToString +code-creation,Builtin,2,12547,0x5574263bc000,160,StringPrototypeValueOf +code-creation,Builtin,2,12555,0x5574263bc0c0,2604,StringToList +code-creation,Builtin,2,12564,0x5574263bcb00,1056,StringPrototypeCharAt +code-creation,Builtin,2,12573,0x5574263bcf40,724,StringPrototypeCharCodeAt +code-creation,Builtin,2,12582,0x5574263bd220,1292,StringPrototypeCodePointAt +code-creation,Builtin,2,12591,0x5574263bd740,412,StringPrototypeConcat +code-creation,Builtin,2,12600,0x5574263bd8e0,1044,StringConstructor +code-creation,Builtin,2,12612,0x5574263bdd00,1524,StringAddConvertLeft +code-creation,Builtin,2,12621,0x5574263be300,1556,StringAddConvertRight +code-creation,Builtin,2,12639,0x5574263be920,836,StringCharAt +code-creation,Builtin,2,12648,0x5574263bec80,196,FastNewFunctionContextEval +code-creation,Builtin,2,12657,0x5574263bed60,196,FastNewFunctionContextFunction +code-creation,Builtin,2,12666,0x5574263bee40,260,CreateRegExpLiteral +code-creation,Builtin,2,12675,0x5574263bef60,1136,CreateShallowArrayLiteral +code-creation,Builtin,2,12684,0x5574263bf3e0,528,CreateEmptyArrayLiteral +code-creation,Builtin,2,12693,0x5574263bf600,1816,CreateShallowObjectLiteral +code-creation,Builtin,2,12702,0x5574263bfd20,412,ObjectConstructor +code-creation,Builtin,2,12711,0x5574263bfec0,180,CreateEmptyLiteralObject +code-creation,Builtin,2,12720,0x5574263bff80,568,NumberConstructor +code-creation,Builtin,2,12729,0x5574263c01c0,64,GenericLazyDeoptContinuation +code-creation,Builtin,2,12738,0x5574263c0220,60,StringToNumber +code-creation,Builtin,2,12746,0x5574263c0260,188,NonNumberToNumber +code-creation,Builtin,2,12755,0x5574263c0320,244,NonNumberToNumeric +code-creation,Builtin,2,12764,0x5574263c0420,36,ToNumeric +code-creation,Builtin,2,12772,0x5574263c0460,1252,NumberToString +code-creation,Builtin,2,12789,0x5574263c0960,104,ToBoolean +code-creation,Builtin,2,12801,0x5574263c09e0,740,ToLength +code-creation,Builtin,2,12812,0x5574263c0ce0,1388,ToName +code-creation,Builtin,2,12824,0x5574263c1260,792,ToObject +code-creation,Builtin,2,12835,0x5574263c1580,232,NonPrimitiveToPrimitive_Default +code-creation,Builtin,2,12848,0x5574263c1680,232,NonPrimitiveToPrimitive_Number +code-creation,Builtin,2,12862,0x5574263c1780,232,NonPrimitiveToPrimitive_String +code-creation,Builtin,2,12875,0x5574263c1880,336,OrdinaryToPrimitive_Number +code-creation,Builtin,2,12887,0x5574263c19e0,336,OrdinaryToPrimitive_String +code-creation,Builtin,2,12900,0x5574263c1b40,240,FastConsoleAssert +code-creation,Builtin,2,12912,0x5574263c1c40,160,DataViewPrototypeGetBuffer +code-creation,Builtin,2,12925,0x5574263c1d00,332,DataViewPrototypeGetByteLength +code-creation,Builtin,2,12938,0x5574263c1e60,332,DataViewPrototypeGetByteOffset +code-creation,Builtin,2,12951,0x5574263c1fc0,592,DataViewPrototypeGetUint8 +code-creation,Builtin,2,12964,0x5574263c2220,592,DataViewPrototypeGetInt8 +code-creation,Builtin,2,12977,0x5574263c2480,656,DataViewPrototypeGetUint16 +code-creation,Builtin,2,12992,0x5574263c2720,652,DataViewPrototypeGetInt16 +code-creation,Builtin,2,13005,0x5574263c29c0,816,DataViewPrototypeGetUint32 +code-creation,Builtin,2,13018,0x5574263c2d00,812,DataViewPrototypeGetInt32 +code-creation,Builtin,2,13031,0x5574263c3040,868,DataViewPrototypeGetFloat32 +code-creation,Builtin,2,13044,0x5574263c33c0,932,DataViewPrototypeGetFloat64 +code-creation,Builtin,2,13057,0x5574263c3780,984,DataViewPrototypeGetBigUint64 +code-creation,Builtin,2,13070,0x5574263c3b60,1008,DataViewPrototypeGetBigInt64 +code-creation,Builtin,2,13083,0x5574263c3f60,956,DataViewPrototypeSetUint8 +code-creation,Builtin,2,13095,0x5574263c4320,956,DataViewPrototypeSetInt8 +code-creation,Builtin,2,13108,0x5574263c46e0,1060,DataViewPrototypeSetUint16 +code-creation,Builtin,2,13121,0x5574263c4b20,1060,DataViewPrototypeSetInt16 +code-creation,Builtin,2,13133,0x5574263c4f60,1100,DataViewPrototypeSetUint32 +code-creation,Builtin,2,13146,0x5574263c53c0,1100,DataViewPrototypeSetInt32 +code-creation,Builtin,2,13159,0x5574263c5820,1064,DataViewPrototypeSetFloat32 +code-creation,Builtin,2,13172,0x5574263c5c60,1128,DataViewPrototypeSetFloat64 +code-creation,Builtin,2,13185,0x5574263c60e0,960,DataViewPrototypeSetBigUint64 +code-creation,Builtin,2,13198,0x5574263c64c0,960,DataViewPrototypeSetBigInt64 +code-creation,Builtin,2,13210,0x5574263c68a0,848,FinalizationRegistryConstructor +code-creation,Builtin,2,13223,0x5574263c6c00,1292,FinalizationRegistryRegister +code-creation,Builtin,2,13236,0x5574263c7120,700,FinalizationRegistryPrototypeCleanupSome +code-creation,Builtin,2,13250,0x5574263c73e0,356,FunctionPrototypeHasInstance +code-creation,Builtin,2,13263,0x5574263c7560,964,FastFunctionPrototypeBind +code-creation,Builtin,2,13279,0x5574263c7940,88,IncBlockCounter +code-creation,Builtin,2,13291,0x5574263c79a0,248,GetTemplateObject +code-creation,Builtin,2,13304,0x5574263c7aa0,28,BytecodeBudgetInterruptFromCode +code-creation,Builtin,2,13317,0x5574263c7ac0,88,ForInNext +code-creation,Builtin,2,13328,0x5574263c7b20,144,GetImportMetaObjectBaseline +code-creation,Builtin,2,13341,0x5574263c7bc0,112,GetIteratorWithFeedback +code-creation,Builtin,2,13354,0x5574263c7c40,88,GetIteratorBaseline +code-creation,Builtin,2,13366,0x5574263c7ca0,272,CreateAsyncFromSyncIteratorBaseline +code-creation,Builtin,2,13380,0x5574263c7dc0,656,CallIteratorWithFeedback +code-creation,Builtin,2,13392,0x5574263c8060,292,MathAbs +code-creation,Builtin,2,13405,0x5574263c81a0,428,MathCeil +code-creation,Builtin,2,13417,0x5574263c8360,432,MathFloor +code-creation,Builtin,2,13429,0x5574263c8520,488,MathRound +code-creation,Builtin,2,13441,0x5574263c8720,432,MathTrunc +code-creation,Builtin,2,13453,0x5574263c88e0,360,MathPow +code-creation,Builtin,2,13464,0x5574263c8a60,404,MathMax +code-creation,Builtin,2,13476,0x5574263c8c00,412,MathMin +code-creation,Builtin,2,13487,0x5574263c8da0,316,MathAcos +code-creation,Builtin,2,13499,0x5574263c8ee0,316,MathAcosh +code-creation,Builtin,2,13511,0x5574263c9020,316,MathAsin +code-creation,Builtin,2,13525,0x5574263c9160,316,MathAsinh +code-creation,Builtin,2,13538,0x5574263c92a0,316,MathAtan +code-creation,Builtin,2,13552,0x5574263c93e0,408,MathAtan2 +code-creation,Builtin,2,13568,0x5574263c9580,316,MathAtanh +code-creation,Builtin,2,13580,0x5574263c96c0,316,MathCbrt +code-creation,Builtin,2,13592,0x5574263c9800,260,MathClz32 +code-creation,Builtin,2,13610,0x5574263c9920,316,MathCos +code-creation,Builtin,2,13622,0x5574263c9a60,316,MathCosh +code-creation,Builtin,2,13633,0x5574263c9ba0,316,MathExp +code-creation,Builtin,2,13645,0x5574263c9ce0,316,MathExpm1 +code-creation,Builtin,2,13657,0x5574263c9e20,272,MathFround +code-creation,Builtin,2,13669,0x5574263c9f40,392,MathImul +code-creation,Builtin,2,13680,0x5574263ca0e0,316,MathLog +code-creation,Builtin,2,13692,0x5574263ca220,316,MathLog1p +code-creation,Builtin,2,13704,0x5574263ca360,316,MathLog10 +code-creation,Builtin,2,13717,0x5574263ca4a0,316,MathLog2 +code-creation,Builtin,2,13729,0x5574263ca5e0,316,MathSin +code-creation,Builtin,2,13740,0x5574263ca720,152,MathSign +code-creation,Builtin,2,13752,0x5574263ca7c0,316,MathSinh +code-creation,Builtin,2,13763,0x5574263ca900,268,MathSqrt +code-creation,Builtin,2,13775,0x5574263caa20,316,MathTan +code-creation,Builtin,2,13787,0x5574263cab60,316,MathTanh +code-creation,Builtin,2,13800,0x5574263caca0,1052,MathHypot +code-creation,Builtin,2,13823,0x5574263cb0c0,312,MathRandom +code-creation,Builtin,2,13832,0x5574263cb200,3008,NumberPrototypeToString +code-creation,Builtin,2,13841,0x5574263cbde0,156,NumberIsFinite +code-creation,Builtin,2,13853,0x5574263cbe80,348,NumberIsInteger +code-creation,Builtin,2,13862,0x5574263cbfe0,128,NumberIsNaN +code-creation,Builtin,2,13870,0x5574263cc080,376,NumberIsSafeInteger +code-creation,Builtin,2,13879,0x5574263cc200,160,NumberPrototypeValueOf +code-creation,Builtin,2,13888,0x5574263cc2c0,196,NumberParseFloat +code-creation,Builtin,2,13897,0x5574263cc3a0,336,ParseInt +code-creation,Builtin,2,13906,0x5574263cc500,84,NumberParseInt +code-creation,Builtin,2,13914,0x5574263cc560,864,Add +code-creation,Builtin,2,13922,0x5574263cc8e0,420,Subtract +code-creation,Builtin,2,13931,0x5574263ccaa0,688,Multiply +code-creation,Builtin,2,13939,0x5574263ccd60,516,Divide +code-creation,Builtin,2,13947,0x5574263ccf80,640,Modulus +code-creation,Builtin,2,13956,0x5574263cd220,524,Exponentiate +code-creation,Builtin,2,13964,0x5574263cd440,428,Negate +code-creation,Builtin,2,13972,0x5574263cd600,104,BitwiseNot +code-creation,Builtin,2,13981,0x5574263cd680,104,Decrement +code-creation,Builtin,2,13989,0x5574263cd700,104,Increment +code-creation,Builtin,2,13998,0x5574263cd780,500,ShiftLeft +code-creation,Builtin,2,14006,0x5574263cd980,500,ShiftRight +code-creation,Builtin,2,14014,0x5574263cdb80,508,ShiftRightLogical +code-creation,Builtin,2,14023,0x5574263cdd80,472,BitwiseAnd +code-creation,Builtin,2,14036,0x5574263cdf60,472,BitwiseOr +code-creation,Builtin,2,14045,0x5574263ce140,472,BitwiseXor +code-creation,Builtin,2,14053,0x5574263ce320,784,LessThan +code-creation,Builtin,2,14062,0x5574263ce640,784,LessThanOrEqual +code-creation,Builtin,2,14071,0x5574263ce960,784,GreaterThan +code-creation,Builtin,2,14079,0x5574263cec80,784,GreaterThanOrEqual +code-creation,Builtin,2,14088,0x5574263cefa0,872,Equal +code-creation,Builtin,2,14097,0x5574263cf320,352,StrictEqual +code-creation,Builtin,2,14106,0x5574263cf4a0,3244,ObjectFromEntries +code-creation,Builtin,2,14114,0x5574263d0160,808,CreateObjectWithoutProperties +code-creation,Builtin,2,14124,0x5574263d04a0,148,ObjectIsExtensible +code-creation,Builtin,2,14132,0x5574263d0540,156,ObjectPreventExtensions +code-creation,Builtin,2,14141,0x5574263d05e0,148,ObjectGetPrototypeOf +code-creation,Builtin,2,14150,0x5574263d0680,308,ObjectSetPrototypeOf +code-creation,Builtin,2,14159,0x5574263d07c0,80,ObjectPrototypeToString +code-creation,Builtin,2,14168,0x5574263d0820,100,ObjectPrototypeValueOf +code-creation,Builtin,2,14177,0x5574263d08a0,172,ObjectPrototypeToLocaleString +code-creation,Builtin,2,14186,0x5574263d0960,784,FulfillPromise +code-creation,Builtin,2,14196,0x5574263d0c80,924,RejectPromise +code-creation,Builtin,2,14204,0x5574263d1020,2360,NewPromiseCapability +code-creation,Builtin,2,14213,0x5574263d1960,172,PromiseCapabilityDefaultReject +code-creation,Builtin,2,14223,0x5574263d1a20,156,PromiseCapabilityDefaultResolve +code-creation,Builtin,2,14232,0x5574263d1ac0,1544,PerformPromiseThen +code-creation,Builtin,2,14241,0x5574263d20e0,492,PromiseReject +code-creation,Builtin,2,14249,0x5574263d22e0,336,PromiseGetCapabilitiesExecutor +code-creation,Builtin,2,14258,0x5574263d2440,112,PromiseConstructorLazyDeoptContinuation +code-creation,Builtin,2,14268,0x5574263d24c0,4828,PromiseAll +code-creation,Builtin,2,14277,0x5574263d37a0,5136,PromiseAllSettled +code-creation,Builtin,2,14286,0x5574263d4bc0,1228,PromiseAllResolveElementClosure +code-creation,Builtin,2,14295,0x5574263d50a0,1552,PromiseAllSettledResolveElementClosure +code-creation,Builtin,2,14304,0x5574263d56c0,1560,PromiseAllSettledRejectElementClosure +code-creation,Builtin,2,14314,0x5574263d5ce0,1276,PromiseAnyRejectElementClosure +code-creation,Builtin,2,14323,0x5574263d61e0,2480,PromiseAny +code-creation,Builtin,2,14332,0x5574263d6ba0,2660,PromiseConstructor +code-creation,Builtin,2,14341,0x5574263d7620,312,PromisePrototypeCatch +code-creation,Builtin,2,14350,0x5574263d7760,92,PromiseValueThunkFinally +code-creation,Builtin,2,14359,0x5574263d77c0,84,PromiseThrowerFinally +code-creation,Builtin,2,14367,0x5574263d7820,956,PromiseCatchFinally +code-creation,Builtin,2,14376,0x5574263d7be0,956,PromiseThenFinally +code-creation,Builtin,2,14385,0x5574263d7fa0,1764,PromisePrototypeFinally +code-creation,Builtin,2,14394,0x5574263d86a0,1420,PromiseRace +code-creation,Builtin,2,14403,0x5574263d8c40,324,PromiseFulfillReactionJob +code-creation,Builtin,2,14412,0x5574263d8da0,440,PromiseRejectReactionJob +code-creation,Builtin,2,14421,0x5574263d8f60,156,PromiseResolveTrampoline +code-creation,Builtin,2,14430,0x5574263d9000,508,PromiseResolve +code-creation,Builtin,2,14439,0x5574263d9200,752,ResolvePromise +code-creation,Builtin,2,14448,0x5574263d9500,2272,PromisePrototypeThen +code-creation,Builtin,2,14456,0x5574263d9e00,1192,PromiseResolveThenableJob +code-creation,Builtin,2,14466,0x5574263da2c0,448,ProxyConstructor +code-creation,Builtin,2,14475,0x5574263da4a0,1932,ProxyDeleteProperty +code-creation,Builtin,2,14484,0x5574263dac40,2284,ProxyGetProperty +code-creation,Builtin,2,14492,0x5574263db540,1088,ProxyGetPrototypeOf +code-creation,Builtin,2,14501,0x5574263db9a0,1796,ProxyHasProperty +code-creation,Builtin,2,14510,0x5574263dc0c0,804,ProxyIsExtensible +code-creation,Builtin,2,14518,0x5574263dc400,836,ProxyPreventExtensions +code-creation,Builtin,2,14527,0x5574263dc760,1168,ProxyRevocable +code-creation,Builtin,2,14536,0x5574263dcc00,132,ProxyRevoke +code-creation,Builtin,2,14544,0x5574263dcca0,2356,ProxySetProperty +code-creation,Builtin,2,14556,0x5574263dd5e0,1368,ProxySetPrototypeOf +code-creation,Builtin,2,14565,0x5574263ddb40,208,ReflectIsExtensible +code-creation,Builtin,2,14574,0x5574263ddc20,220,ReflectPreventExtensions +code-creation,Builtin,2,14583,0x5574263ddd00,188,ReflectGetPrototypeOf +code-creation,Builtin,2,14591,0x5574263dddc0,296,ReflectSetPrototypeOf +code-creation,Builtin,2,14600,0x5574263ddf00,288,ReflectGet +code-creation,Builtin,2,14609,0x5574263de040,156,ReflectDeleteProperty +code-creation,Builtin,2,14618,0x5574263de0e0,144,ReflectHas +code-creation,Builtin,2,14626,0x5574263de180,5576,RegExpPrototypeExecSlow +code-creation,Builtin,2,14635,0x5574263df760,5640,RegExpPrototypeExec +code-creation,Builtin,2,14644,0x5574263e0d80,2524,RegExpPrototypeMatchAll +code-creation,Builtin,2,14653,0x5574263e1760,10172,RegExpStringIteratorPrototypeNext +code-creation,Builtin,2,14662,0x5574263e3f20,9704,RegExpMatchFast +code-creation,Builtin,2,14671,0x5574263e6520,3708,RegExpPrototypeMatch +code-creation,Builtin,2,14680,0x5574263e73a0,6628,RegExpReplace +code-creation,Builtin,2,14689,0x5574263e8da0,544,RegExpPrototypeReplace +code-creation,Builtin,2,14698,0x5574263e8fe0,1748,RegExpSearchFast +code-creation,Builtin,2,14706,0x5574263e96c0,1692,RegExpPrototypeSearch +code-creation,Builtin,2,14715,0x5574263e9d60,208,RegExpPrototypeSourceGetter +code-creation,Builtin,2,14724,0x5574263e9e40,5888,RegExpSplit +code-creation,Builtin,2,14733,0x5574263eb560,500,RegExpPrototypeSplit +code-creation,Builtin,2,14742,0x5574263eb760,2468,RegExpPrototypeTest +code-creation,Builtin,2,14751,0x5574263ec120,1488,RegExpPrototypeTestFast +code-creation,Builtin,2,14760,0x5574263ec700,240,RegExpPrototypeGlobalGetter +code-creation,Builtin,2,14769,0x5574263ec800,240,RegExpPrototypeIgnoreCaseGetter +code-creation,Builtin,2,14778,0x5574263ec900,244,RegExpPrototypeMultilineGetter +code-creation,Builtin,2,14787,0x5574263eca00,244,RegExpPrototypeHasIndicesGetter +code-creation,Builtin,2,14797,0x5574263ecb00,244,RegExpPrototypeLinearGetter +code-creation,Builtin,2,14806,0x5574263ecc00,244,RegExpPrototypeDotAllGetter +code-creation,Builtin,2,14815,0x5574263ecd00,264,RegExpPrototypeStickyGetter +code-creation,Builtin,2,14824,0x5574263ece20,264,RegExpPrototypeUnicodeGetter +code-creation,Builtin,2,14834,0x5574263ecf40,2396,RegExpPrototypeFlagsGetter +code-creation,Builtin,2,14843,0x5574263ed8a0,1580,StringPrototypeAt +code-creation,Builtin,2,14851,0x5574263edee0,3108,StringPrototypeEndsWith +code-creation,Builtin,2,14860,0x5574263eeb20,504,CreateHTML +code-creation,Builtin,2,14869,0x5574263eed20,168,StringPrototypeAnchor +code-creation,Builtin,2,14878,0x5574263eede0,136,StringPrototypeBig +code-creation,Builtin,2,14887,0x5574263eee80,136,StringPrototypeBlink +code-creation,Builtin,2,14896,0x5574263eef20,136,StringPrototypeBold +code-creation,Builtin,2,14904,0x5574263eefc0,184,StringPrototypeFontcolor +code-creation,Builtin,2,14917,0x5574263ef080,184,StringPrototypeFontsize +code-creation,Builtin,2,14927,0x5574263ef140,136,StringPrototypeFixed +code-creation,Builtin,2,14935,0x5574263ef1e0,136,StringPrototypeItalics +code-creation,Builtin,2,14944,0x5574263ef280,184,StringPrototypeLink +code-creation,Builtin,2,14953,0x5574263ef340,136,StringPrototypeSmall +code-creation,Builtin,2,14960,0x5574263ef3e0,136,StringPrototypeStrike +code-creation,Builtin,2,14969,0x5574263ef480,136,StringPrototypeSub +code-creation,Builtin,2,14977,0x5574263ef520,136,StringPrototypeSup +code-creation,Builtin,2,14986,0x5574263ef5c0,1052,StringPrototypeIncludes +code-creation,Builtin,2,14995,0x5574263ef9e0,640,StringPrototypeIndexOf +code-creation,Builtin,2,15004,0x5574263efc80,348,StringPrototypeIterator +code-creation,Builtin,2,15013,0x5574263efde0,2056,StringIteratorPrototypeNext +code-creation,Builtin,2,15023,0x5574263f0600,1388,StringPrototypeMatch +code-creation,Builtin,2,15032,0x5574263f0b80,1388,StringPrototypeSearch +code-creation,Builtin,2,15040,0x5574263f1100,844,StringPrototypePadStart +code-creation,Builtin,2,15050,0x5574263f1460,848,StringPrototypePadEnd +code-creation,Builtin,2,15059,0x5574263f17c0,124,StringRepeat +code-creation,Builtin,2,15067,0x5574263f1840,392,StringPrototypeRepeat +code-creation,Builtin,2,15079,0x5574263f19e0,11516,StringPrototypeReplaceAll +code-creation,Builtin,2,15088,0x5574263f46e0,3480,StringPrototypeSlice +code-creation,Builtin,2,15097,0x5574263f5480,3124,StringPrototypeStartsWith +code-creation,Builtin,2,15106,0x5574263f60c0,3420,StringPrototypeSubstr +code-creation,Builtin,2,15115,0x5574263f6e20,3348,StringPrototypeSubstring +code-creation,Builtin,2,15124,0x5574263f7b40,6964,StringPrototypeTrim +code-creation,Builtin,2,15133,0x5574263f9680,6376,StringPrototypeTrimStart +code-creation,Builtin,2,15142,0x5574263faf80,5920,StringPrototypeTrimEnd +code-creation,Builtin,2,15151,0x5574263fc6c0,164,SymbolPrototypeDescriptionGetter +code-creation,Builtin,2,15160,0x5574263fc780,160,SymbolPrototypeToPrimitive +code-creation,Builtin,2,15170,0x5574263fc840,176,SymbolPrototypeToString +code-creation,Builtin,2,15178,0x5574263fc900,160,SymbolPrototypeValueOf +code-creation,Builtin,2,15187,0x5574263fc9c0,828,TypedArrayPrototypeAt +code-creation,Builtin,2,15196,0x5574263fcd00,7960,CreateTypedArray +code-creation,Builtin,2,15205,0x5574263fec20,1008,TypedArrayPrototypeEvery +code-creation,Builtin,2,15214,0x5574263ff020,360,TypedArrayPrototypeEntries +code-creation,Builtin,2,15223,0x5574263ff1a0,3384,TypedArrayPrototypeFilter +code-creation,Builtin,2,15232,0x5574263ffee0,1000,TypedArrayPrototypeFind +code-creation,Builtin,2,15241,0x5574264002e0,1004,TypedArrayPrototypeFindIndex +code-creation,Builtin,2,15251,0x5574264006e0,860,TypedArrayPrototypeForEach +code-creation,Builtin,2,15260,0x557426400a40,2356,TypedArrayFrom +code-creation,Builtin,2,15268,0x557426401380,356,TypedArrayPrototypeKeys +code-creation,Builtin,2,15277,0x557426401500,988,TypedArrayOf +code-creation,Builtin,2,15286,0x5574264018e0,952,TypedArrayPrototypeReduce +code-creation,Builtin,2,15295,0x557426401ca0,944,TypedArrayPrototypeReduceRight +code-creation,Builtin,2,15304,0x557426402060,2208,TypedArrayPrototypeSet +code-creation,Builtin,2,15313,0x557426402920,2548,TypedArrayPrototypeSlice +code-creation,Builtin,2,15322,0x557426403320,1000,TypedArrayPrototypeSome +code-creation,Builtin,2,15331,0x557426403720,1184,TypedArrayMergeSort +code-creation,Builtin,2,15340,0x557426403be0,1604,TypedArrayPrototypeSort +code-creation,Builtin,2,15349,0x557426404240,2344,TypedArrayPrototypeSubArray +code-creation,Builtin,2,15358,0x557426404b80,360,TypedArrayPrototypeValues +code-creation,Builtin,2,15367,0x557426404d00,1004,WeakRefConstructor +code-creation,Builtin,2,15376,0x557426405100,188,WeakRefDeref +code-creation,Builtin,2,15385,0x5574264051c0,716,NewSloppyArgumentsElements +code-creation,Builtin,2,15394,0x5574264054a0,324,NewStrictArgumentsElements +code-creation,Builtin,2,15403,0x557426405600,340,NewRestArgumentsElements +code-creation,Builtin,2,15412,0x557426405760,1400,FastNewSloppyArguments +code-creation,Builtin,2,15421,0x557426405ce0,544,FastNewStrictArguments +code-creation,Builtin,2,15430,0x557426405f20,580,FastNewRestArguments +code-creation,Builtin,2,15439,0x557426406180,720,StringSlowFlatten +code-creation,Builtin,2,15448,0x557426406460,2012,StringIndexOf +code-creation,Builtin,2,15456,0x557426406c40,4,GenericBuiltinTest_JSAny_0 +code-creation,Builtin,2,15466,0x557426406c60,8,TestHelperPlus1 +code-creation,Builtin,2,15474,0x557426406c80,8,TestHelperPlus2 +code-creation,Builtin,2,15483,0x557426406ca0,96,NewSmiBox +code-creation,Builtin,2,15491,0x557426406d20,16,ReturnTwoValues +code-creation,Builtin,2,15500,0x557426406d40,32,Load_FastSmiElements_0 +code-creation,Builtin,2,15509,0x557426406d80,32,Load_FastObjectElements_0 +code-creation,Builtin,2,15518,0x557426406dc0,148,Load_FastDoubleElements_0 +code-creation,Builtin,2,15528,0x557426406e60,32,Store_FastSmiElements_0 +code-creation,Builtin,2,15537,0x557426406ea0,112,Store_FastObjectElements_0 +code-creation,Builtin,2,15546,0x557426406f20,48,Store_FastDoubleElements_0 +code-creation,Builtin,2,15556,0x557426406f60,40,Delete_FastSmiElements_0 +code-creation,Builtin,2,15565,0x557426406fa0,40,Delete_FastObjectElements_0 +code-creation,Builtin,2,15574,0x557426406fe0,44,Delete_FastDoubleElements_0 +code-creation,Builtin,2,15586,0x557426407020,312,SortCompareDefault +code-creation,Builtin,2,15595,0x557426407160,96,SortCompareUserFn +code-creation,Builtin,2,15604,0x5574264071e0,12,CanUseSameAccessor_GenericElementsAccessor_0 +code-creation,Builtin,2,15614,0x557426407200,328,Copy +code-creation,Builtin,2,15622,0x557426407360,6072,MergeAt +code-creation,Builtin,2,15631,0x557426408b20,824,GallopLeft +code-creation,Builtin,2,15639,0x557426408e60,828,GallopRight +code-creation,Builtin,2,15648,0x5574264091a0,3880,ArrayTimSort +code-creation,Builtin,2,15656,0x55742640a0e0,2128,ArrayPrototypeSort +code-creation,Builtin,2,15665,0x55742640a940,100,WasmInt32ToHeapNumber +code-creation,Builtin,2,15674,0x55742640a9c0,120,WasmTaggedNonSmiToInt32 +code-creation,Builtin,2,15684,0x55742640aa40,72,WasmTaggedToFloat64 +code-creation,Builtin,2,15693,0x55742640aaa0,68,WasmMemoryGrow +code-creation,Builtin,2,15702,0x55742640ab00,96,WasmTableInit +code-creation,Builtin,2,15710,0x55742640ab80,96,WasmTableCopy +code-creation,Builtin,2,15719,0x55742640ac00,80,WasmTableFill +code-creation,Builtin,2,15728,0x55742640ac60,64,WasmTableGrow +code-creation,Builtin,2,15736,0x55742640acc0,168,WasmTableGet +code-creation,Builtin,2,15745,0x55742640ad80,268,WasmTableSet +code-creation,Builtin,2,15753,0x55742640aea0,104,WasmRefFunc +code-creation,Builtin,2,15762,0x55742640af20,144,WasmAllocateFixedArray +code-creation,Builtin,2,15771,0x55742640afc0,44,WasmThrow +code-creation,Builtin,2,15779,0x55742640b000,56,WasmRethrow +code-creation,Builtin,2,15788,0x55742640b040,44,WasmTriggerTierUp +code-creation,Builtin,2,15798,0x55742640b080,28,WasmStackGuard +code-creation,Builtin,2,15807,0x55742640b0a0,28,WasmStackOverflow +code-creation,Builtin,2,15816,0x55742640b0c0,40,WasmTraceMemory +code-creation,Builtin,2,15824,0x55742640b100,28,WasmTraceEnter +code-creation,Builtin,2,15833,0x55742640b120,40,WasmTraceExit +code-creation,Builtin,2,15842,0x55742640b160,368,WasmAllocateJSArray +code-creation,Builtin,2,15850,0x55742640b2e0,100,WasmAllocatePair +code-creation,Builtin,2,15859,0x55742640b360,44,WasmAllocateRtt +code-creation,Builtin,2,15868,0x55742640b3a0,108,WasmAllocateStructWithRtt +code-creation,Builtin,2,15877,0x55742640b420,128,WasmAllocateArrayWithRtt +code-creation,Builtin,2,15886,0x55742640b4c0,248,WasmAllocateObjectWrapper +code-creation,Builtin,2,15895,0x55742640b5c0,52,WasmSubtypeCheck +code-creation,Builtin,2,15903,0x55742640b600,112,WasmInt32ToNumber +code-creation,Builtin,2,15912,0x55742640b680,116,WasmUint32ToNumber +code-creation,Builtin,2,15921,0x55742640b700,140,UintPtr53ToNumber +code-creation,Builtin,2,15929,0x55742640b7a0,92,WasmAtomicNotify +code-creation,Builtin,2,15938,0x55742640b800,112,WasmI32AtomicWait64 +code-creation,Builtin,2,15947,0x55742640b880,112,WasmI64AtomicWait64 +code-creation,Builtin,2,15955,0x55742640b900,616,WasmGetOwnProperty +code-creation,Builtin,2,15964,0x55742640bb80,40,WasmTrap +code-creation,Builtin,2,15973,0x55742640bbc0,12,ThrowWasmTrapUnreachable +code-creation,Builtin,2,15986,0x55742640bbe0,12,ThrowWasmTrapMemOutOfBounds +code-creation,Builtin,2,15995,0x55742640bc00,12,ThrowWasmTrapUnalignedAccess +code-creation,Builtin,2,16004,0x55742640bc20,12,ThrowWasmTrapDivByZero +code-creation,Builtin,2,16013,0x55742640bc40,12,ThrowWasmTrapDivUnrepresentable +code-creation,Builtin,2,16023,0x55742640bc60,12,ThrowWasmTrapRemByZero +code-creation,Builtin,2,16032,0x55742640bc80,12,ThrowWasmTrapFloatUnrepresentable +code-creation,Builtin,2,16041,0x55742640bca0,12,ThrowWasmTrapFuncSigMismatch +code-creation,Builtin,2,16051,0x55742640bcc0,12,ThrowWasmTrapDataSegmentDropped +code-creation,Builtin,2,16060,0x55742640bce0,12,ThrowWasmTrapElemSegmentDropped +code-creation,Builtin,2,16069,0x55742640bd00,12,ThrowWasmTrapTableOutOfBounds +code-creation,Builtin,2,16079,0x55742640bd20,12,ThrowWasmTrapRethrowNull +code-creation,Builtin,2,16089,0x55742640bd40,12,ThrowWasmTrapNullDereference +code-creation,Builtin,2,16099,0x55742640bd60,12,ThrowWasmTrapIllegalCast +code-creation,Builtin,2,16108,0x55742640bd80,12,ThrowWasmTrapArrayOutOfBounds +code-creation,Builtin,2,16117,0x55742640bda0,168,LoadJoinElement_GenericElementsAccessor_0 +code-creation,Builtin,2,16129,0x55742640be60,120,LoadJoinTypedElement_Int32Elements_0 +code-creation,Builtin,2,16140,0x55742640bee0,112,LoadJoinTypedElement_Float32Elements_0 +code-creation,Builtin,2,16149,0x55742640bf60,108,LoadJoinTypedElement_Float64Elements_0 +code-creation,Builtin,2,16159,0x55742640bfe0,20,LoadJoinTypedElement_Uint8ClampedElements_0 +code-creation,Builtin,2,16169,0x55742640c000,200,LoadJoinTypedElement_BigUint64Elements_0 +code-creation,Builtin,2,16179,0x55742640c0e0,228,LoadJoinTypedElement_BigInt64Elements_0 +code-creation,Builtin,2,16188,0x55742640c1e0,20,LoadJoinTypedElement_Uint8Elements_0 +code-creation,Builtin,2,16198,0x55742640c200,20,LoadJoinTypedElement_Int8Elements_0 +code-creation,Builtin,2,16208,0x55742640c220,20,LoadJoinTypedElement_Uint16Elements_0 +code-creation,Builtin,2,16217,0x55742640c240,20,LoadJoinTypedElement_Int16Elements_0 +code-creation,Builtin,2,16227,0x55742640c260,124,LoadJoinTypedElement_Uint32Elements_0 +code-creation,Builtin,2,16236,0x55742640c2e0,12,GenericBuiltinTest_Smi_0 +code-creation,Builtin,2,16245,0x55742640c300,40,CanUseSameAccessor_FastDoubleElements_0 +code-creation,Builtin,2,16255,0x55742640c340,40,CanUseSameAccessor_FastSmiElements_0 +code-creation,Builtin,2,16265,0x55742640c380,40,CanUseSameAccessor_FastObjectElements_0 +code-creation,Builtin,2,16274,0x55742640c3c0,2380,Load_GenericElementsAccessor_0 +code-creation,Builtin,2,16283,0x55742640cd20,28,Store_GenericElementsAccessor_0 +code-creation,Builtin,2,16293,0x55742640cd40,32,Delete_GenericElementsAccessor_0 +code-creation,Builtin,2,16302,0x55742640cd80,120,LoadTypedElement_Int32Elements_0 +code-creation,Builtin,2,16312,0x55742640ce00,164,StoreTypedElementNumeric_Int32Elements_0 +code-creation,Builtin,2,16321,0x55742640cec0,176,StoreTypedElementJSAny_Int32Elements_0 +code-creation,Builtin,2,16331,0x55742640cf80,112,LoadTypedElement_Float32Elements_0 +code-creation,Builtin,2,16340,0x55742640d000,28,StoreTypedElementNumeric_Float32Elements_0 +code-creation,Builtin,2,16350,0x55742640d020,152,StoreTypedElementJSAny_Float32Elements_0 +code-creation,Builtin,2,16360,0x55742640d0c0,108,LoadTypedElement_Float64Elements_0 +code-creation,Builtin,2,16369,0x55742640d140,24,StoreTypedElementNumeric_Float64Elements_0 +code-creation,Builtin,2,16379,0x55742640d160,148,StoreTypedElementJSAny_Float64Elements_0 +code-creation,Builtin,2,16389,0x55742640d200,20,LoadTypedElement_Uint8ClampedElements_0 +code-creation,Builtin,2,16400,0x55742640d220,20,StoreTypedElementNumeric_Uint8ClampedElements_0 +code-creation,Builtin,2,16410,0x55742640d240,600,StoreTypedElementJSAny_Uint8ClampedElements_0 +code-creation,Builtin,2,16420,0x55742640d4a0,200,LoadTypedElement_BigUint64Elements_0 +code-creation,Builtin,2,16429,0x55742640d580,56,StoreTypedElementNumeric_BigUint64Elements_0 +code-creation,Builtin,2,16439,0x55742640d5c0,192,StoreTypedElementJSAny_BigUint64Elements_0 +code-creation,Builtin,2,16449,0x55742640d6a0,228,LoadTypedElement_BigInt64Elements_0 +code-creation,Builtin,2,16458,0x55742640d7a0,56,StoreTypedElementNumeric_BigInt64Elements_0 +code-creation,Builtin,2,16468,0x55742640d7e0,192,StoreTypedElementJSAny_BigInt64Elements_0 +code-creation,Builtin,2,16477,0x55742640d8c0,20,LoadTypedElement_Uint8Elements_0 +code-creation,Builtin,2,16487,0x55742640d8e0,20,StoreTypedElementNumeric_Uint8Elements_0 +code-creation,Builtin,2,16496,0x55742640d900,176,StoreTypedElementJSAny_Uint8Elements_0 +code-creation,Builtin,2,16506,0x55742640d9c0,20,LoadTypedElement_Int8Elements_0 +code-creation,Builtin,2,16515,0x55742640d9e0,20,StoreTypedElementNumeric_Int8Elements_0 +code-creation,Builtin,2,16525,0x55742640da00,176,StoreTypedElementJSAny_Int8Elements_0 +code-creation,Builtin,2,16534,0x55742640dac0,20,LoadTypedElement_Uint16Elements_0 +code-creation,Builtin,2,16544,0x55742640dae0,20,StoreTypedElementNumeric_Uint16Elements_0 +code-creation,Builtin,2,16554,0x55742640db00,176,StoreTypedElementJSAny_Uint16Elements_0 +code-creation,Builtin,2,16563,0x55742640dbc0,20,LoadTypedElement_Int16Elements_0 +code-creation,Builtin,2,16572,0x55742640dbe0,20,StoreTypedElementNumeric_Int16Elements_0 +code-creation,Builtin,2,16585,0x55742640dc00,176,StoreTypedElementJSAny_Int16Elements_0 +code-creation,Builtin,2,16594,0x55742640dcc0,124,LoadTypedElement_Uint32Elements_0 +code-creation,Builtin,2,16604,0x55742640dd40,164,StoreTypedElementNumeric_Uint32Elements_0 +code-creation,Builtin,2,16614,0x55742640de00,176,StoreTypedElementJSAny_Uint32Elements_0 +code-creation,Builtin,2,16623,0x55742640dec0,12,CollatorConstructor +code-creation,Builtin,2,16632,0x55742640dee0,12,CollatorInternalCompare +code-creation,Builtin,2,16641,0x55742640df00,12,CollatorPrototypeCompare +code-creation,Builtin,2,16650,0x55742640df20,12,CollatorSupportedLocalesOf +code-creation,Builtin,2,16660,0x55742640df40,12,CollatorPrototypeResolvedOptions +code-creation,Builtin,2,16669,0x55742640df60,12,DatePrototypeToLocaleDateString +code-creation,Builtin,2,16678,0x55742640df80,12,DatePrototypeToLocaleString +code-creation,Builtin,2,16688,0x55742640dfa0,12,DatePrototypeToLocaleTimeString +code-creation,Builtin,2,16697,0x55742640dfc0,12,DateTimeFormatConstructor +code-creation,Builtin,2,16707,0x55742640dfe0,12,DateTimeFormatInternalFormat +code-creation,Builtin,2,16717,0x55742640e000,12,DateTimeFormatPrototypeFormat +code-creation,Builtin,2,16726,0x55742640e020,12,DateTimeFormatPrototypeFormatRange +code-creation,Builtin,2,16735,0x55742640e040,12,DateTimeFormatPrototypeFormatRangeToParts +code-creation,Builtin,2,16745,0x55742640e060,12,DateTimeFormatPrototypeFormatToParts +code-creation,Builtin,2,16755,0x55742640e080,12,DateTimeFormatPrototypeResolvedOptions +code-creation,Builtin,2,16764,0x55742640e0a0,12,DateTimeFormatSupportedLocalesOf +code-creation,Builtin,2,16774,0x55742640e0c0,12,DisplayNamesConstructor +code-creation,Builtin,2,16783,0x55742640e0e0,12,DisplayNamesPrototypeOf +code-creation,Builtin,2,16792,0x55742640e100,12,DisplayNamesPrototypeResolvedOptions +code-creation,Builtin,2,16802,0x55742640e120,12,DisplayNamesSupportedLocalesOf +code-creation,Builtin,2,16811,0x55742640e140,12,IntlGetCanonicalLocales +code-creation,Builtin,2,16820,0x55742640e160,12,ListFormatConstructor +code-creation,Builtin,2,16829,0x55742640e180,224,ListFormatPrototypeFormat +code-creation,Builtin,2,16838,0x55742640e280,224,ListFormatPrototypeFormatToParts +code-creation,Builtin,2,16848,0x55742640e380,12,ListFormatPrototypeResolvedOptions +code-creation,Builtin,2,16857,0x55742640e3a0,12,ListFormatSupportedLocalesOf +code-creation,Builtin,2,16866,0x55742640e3c0,12,LocaleConstructor +code-creation,Builtin,2,16875,0x55742640e3e0,12,LocalePrototypeBaseName +code-creation,Builtin,2,16884,0x55742640e400,12,LocalePrototypeCalendar +code-creation,Builtin,2,16893,0x55742640e420,12,LocalePrototypeCaseFirst +code-creation,Builtin,2,16902,0x55742640e440,12,LocalePrototypeCollation +code-creation,Builtin,2,16911,0x55742640e460,12,LocalePrototypeHourCycle +code-creation,Builtin,2,16920,0x55742640e480,12,LocalePrototypeLanguage +code-creation,Builtin,2,16929,0x55742640e4a0,12,LocalePrototypeMaximize +code-creation,Builtin,2,16938,0x55742640e4c0,12,LocalePrototypeMinimize +code-creation,Builtin,2,16947,0x55742640e4e0,12,LocalePrototypeNumeric +code-creation,Builtin,2,16956,0x55742640e500,12,LocalePrototypeNumberingSystem +code-creation,Builtin,2,16965,0x55742640e520,12,LocalePrototypeRegion +code-creation,Builtin,2,16974,0x55742640e540,12,LocalePrototypeScript +code-creation,Builtin,2,16983,0x55742640e560,12,LocalePrototypeToString +code-creation,Builtin,2,16992,0x55742640e580,12,NumberFormatConstructor +code-creation,Builtin,2,17003,0x55742640e5a0,12,NumberFormatInternalFormatNumber +code-creation,Builtin,2,17012,0x55742640e5c0,12,NumberFormatPrototypeFormatNumber +code-creation,Builtin,2,17022,0x55742640e5e0,12,NumberFormatPrototypeFormatToParts +code-creation,Builtin,2,17031,0x55742640e600,12,NumberFormatPrototypeResolvedOptions +code-creation,Builtin,2,17041,0x55742640e620,12,NumberFormatSupportedLocalesOf +code-creation,Builtin,2,17054,0x55742640e640,12,PluralRulesConstructor +code-creation,Builtin,2,17063,0x55742640e660,12,PluralRulesPrototypeResolvedOptions +code-creation,Builtin,2,17072,0x55742640e680,12,PluralRulesPrototypeSelect +code-creation,Builtin,2,17084,0x55742640e6a0,12,PluralRulesSupportedLocalesOf +code-creation,Builtin,2,17094,0x55742640e6c0,12,RelativeTimeFormatConstructor +code-creation,Builtin,2,17103,0x55742640e6e0,12,RelativeTimeFormatPrototypeFormat +code-creation,Builtin,2,17112,0x55742640e700,12,RelativeTimeFormatPrototypeFormatToParts +code-creation,Builtin,2,17122,0x55742640e720,12,RelativeTimeFormatPrototypeResolvedOptions +code-creation,Builtin,2,17132,0x55742640e740,12,RelativeTimeFormatSupportedLocalesOf +code-creation,Builtin,2,17141,0x55742640e760,12,SegmenterConstructor +code-creation,Builtin,2,17150,0x55742640e780,12,SegmenterPrototypeResolvedOptions +code-creation,Builtin,2,17160,0x55742640e7a0,12,SegmenterPrototypeSegment +code-creation,Builtin,2,17169,0x55742640e7c0,12,SegmenterSupportedLocalesOf +code-creation,Builtin,2,17178,0x55742640e7e0,12,SegmentIteratorPrototypeNext +code-creation,Builtin,2,17187,0x55742640e800,12,SegmentsPrototypeContaining +code-creation,Builtin,2,17197,0x55742640e820,12,SegmentsPrototypeIterator +code-creation,Builtin,2,17206,0x55742640e840,12,StringPrototypeNormalizeIntl +code-creation,Builtin,2,17215,0x55742640e860,12,StringPrototypeToLocaleLowerCase +code-creation,Builtin,2,17224,0x55742640e880,12,StringPrototypeToLocaleUpperCase +code-creation,Builtin,2,17234,0x55742640e8a0,208,StringPrototypeToLowerCaseIntl +code-creation,Builtin,2,17243,0x55742640e980,12,StringPrototypeToUpperCaseIntl +code-creation,Builtin,2,17253,0x55742640e9a0,672,StringToLowerCaseIntl +code-creation,Builtin,2,17261,0x55742640ec60,12,V8BreakIteratorConstructor +code-creation,Builtin,2,17271,0x55742640ec80,12,V8BreakIteratorInternalAdoptText +code-creation,Builtin,2,17280,0x55742640eca0,12,V8BreakIteratorInternalBreakType +code-creation,Builtin,2,17289,0x55742640ecc0,12,V8BreakIteratorInternalCurrent +code-creation,Builtin,2,17299,0x55742640ece0,12,V8BreakIteratorInternalFirst +code-creation,Builtin,2,17309,0x55742640ed00,12,V8BreakIteratorInternalNext +code-creation,Builtin,2,17318,0x55742640ed20,12,V8BreakIteratorPrototypeAdoptText +code-creation,Builtin,2,17328,0x55742640ed40,12,V8BreakIteratorPrototypeBreakType +code-creation,Builtin,2,17337,0x55742640ed60,12,V8BreakIteratorPrototypeCurrent +code-creation,Builtin,2,17347,0x55742640ed80,12,V8BreakIteratorPrototypeFirst +code-creation,Builtin,2,17356,0x55742640eda0,12,V8BreakIteratorPrototypeNext +code-creation,Builtin,2,17365,0x55742640edc0,12,V8BreakIteratorPrototypeResolvedOptions +code-creation,Builtin,2,17375,0x55742640ede0,12,V8BreakIteratorSupportedLocalesOf +code-creation,BytecodeHandler,0,17385,0x55742640ee00,24,Wide +code-creation,BytecodeHandler,0,17394,0x55742640ee20,24,ExtraWide +code-creation,BytecodeHandler,0,17403,0x55742640ee40,204,DebugBreakWide +code-creation,BytecodeHandler,0,17412,0x55742640ef20,204,DebugBreakExtraWide +code-creation,BytecodeHandler,0,17421,0x55742640f000,276,DebugBreak0 +code-creation,BytecodeHandler,0,17430,0x55742640f120,204,DebugBreak1 +code-creation,BytecodeHandler,0,17438,0x55742640f200,204,DebugBreak2 +code-creation,BytecodeHandler,0,17447,0x55742640f2e0,204,DebugBreak3 +code-creation,BytecodeHandler,0,17456,0x55742640f3c0,204,DebugBreak4 +code-creation,BytecodeHandler,0,17466,0x55742640f4a0,204,DebugBreak5 +code-creation,BytecodeHandler,0,17474,0x55742640f580,204,DebugBreak6 +code-creation,BytecodeHandler,0,17483,0x55742640f660,68,LdaZero +code-creation,BytecodeHandler,0,17492,0x55742640f6c0,68,LdaSmi +code-creation,BytecodeHandler,0,17501,0x55742640f720,72,LdaUndefined +code-creation,BytecodeHandler,0,17510,0x55742640f780,72,LdaNull +code-creation,BytecodeHandler,0,17519,0x55742640f7e0,72,LdaTheHole +code-creation,BytecodeHandler,0,17528,0x55742640f840,24,LdaTrue +code-creation,BytecodeHandler,0,17537,0x55742640f860,24,LdaFalse +code-creation,BytecodeHandler,0,17545,0x55742640f880,80,LdaConstant +code-creation,BytecodeHandler,0,17554,0x55742640f8e0,4968,LdaGlobal +code-creation,BytecodeHandler,0,17563,0x557426410c60,3760,LdaGlobalInsideTypeof +code-creation,BytecodeHandler,0,17572,0x557426411b20,180,StaGlobal +code-creation,BytecodeHandler,0,17581,0x557426411be0,40,PushContext +code-creation,BytecodeHandler,0,17593,0x557426411c20,36,PopContext +code-creation,BytecodeHandler,0,17611,0x557426411c60,140,LdaContextSlot +code-creation,BytecodeHandler,0,17621,0x557426411d00,140,LdaImmutableContextSlot +code-creation,BytecodeHandler,0,17630,0x557426411da0,92,LdaCurrentContextSlot +code-creation,BytecodeHandler,0,17639,0x557426411e00,92,LdaImmutableCurrentContextSlot +code-creation,BytecodeHandler,0,17649,0x557426411e60,176,StaContextSlot +code-creation,BytecodeHandler,0,17669,0x557426411f20,128,StaCurrentContextSlot +code-creation,BytecodeHandler,0,17678,0x557426411fc0,124,LdaLookupSlot +code-creation,BytecodeHandler,0,17687,0x557426412040,260,LdaLookupContextSlot +code-creation,BytecodeHandler,0,17697,0x557426412160,3960,LdaLookupGlobalSlot +code-creation,BytecodeHandler,0,17706,0x5574264130e0,124,LdaLookupSlotInsideTypeof +code-creation,BytecodeHandler,0,17716,0x557426413160,260,LdaLookupContextSlotInsideTypeof +code-creation,BytecodeHandler,0,17726,0x557426413280,3928,LdaLookupGlobalSlotInsideTypeof +code-creation,BytecodeHandler,0,17736,0x5574264141e0,204,StaLookupSlot +code-creation,BytecodeHandler,0,17745,0x5574264142c0,32,Ldar +code-creation,BytecodeHandler,0,17753,0x557426414300,32,Star +code-creation,BytecodeHandler,0,17762,0x557426414340,40,Mov +code-creation,BytecodeHandler,0,17771,0x557426414380,4524,LdaNamedProperty +code-creation,BytecodeHandler,0,17780,0x557426415540,124,LdaNamedPropertyNoFeedback +code-creation,BytecodeHandler,0,17790,0x5574264155c0,196,LdaNamedPropertyFromSuper +code-creation,BytecodeHandler,0,17800,0x5574264156a0,216,LdaKeyedProperty +code-creation,BytecodeHandler,0,17809,0x557426415780,188,LdaModuleVariable +code-creation,BytecodeHandler,0,17818,0x557426415840,320,StaModuleVariable +code-creation,BytecodeHandler,0,17827,0x5574264159a0,180,StaNamedProperty +code-creation,BytecodeHandler,0,17836,0x557426415a60,140,StaNamedPropertyNoFeedback +code-creation,BytecodeHandler,0,17846,0x557426415b00,180,StaNamedOwnProperty +code-creation,BytecodeHandler,0,17855,0x557426415bc0,168,StaKeyedProperty +code-creation,BytecodeHandler,0,17864,0x557426415c80,168,StaInArrayLiteral +code-creation,BytecodeHandler,0,17874,0x557426415d40,196,StaDataPropertyInLiteral +code-creation,BytecodeHandler,0,17884,0x557426415e20,164,CollectTypeProfile +code-creation,BytecodeHandler,0,17893,0x557426415ee0,1000,Add +code-creation,BytecodeHandler,0,17901,0x5574264162e0,1060,Sub +code-creation,BytecodeHandler,0,17910,0x557426416720,1152,Mul +code-creation,BytecodeHandler,0,17921,0x557426416bc0,948,Div +code-creation,BytecodeHandler,0,17929,0x557426416f80,1012,Mod +code-creation,BytecodeHandler,0,17938,0x557426417380,188,Exp +code-creation,BytecodeHandler,0,17947,0x557426417440,992,BitwiseOr +code-creation,BytecodeHandler,0,17956,0x557426417840,988,BitwiseXor +code-creation,BytecodeHandler,0,17965,0x557426417c20,988,BitwiseAnd +code-creation,BytecodeHandler,0,17974,0x557426418000,988,ShiftLeft +code-creation,BytecodeHandler,0,17982,0x5574264183e0,988,ShiftRight +code-creation,BytecodeHandler,0,17991,0x5574264187c0,992,ShiftRightLogical +code-creation,BytecodeHandler,0,18000,0x557426418bc0,924,AddSmi +code-creation,BytecodeHandler,0,18009,0x557426418f60,992,SubSmi +code-creation,BytecodeHandler,0,18018,0x557426419360,1048,MulSmi +code-creation,BytecodeHandler,0,18027,0x557426419780,936,DivSmi +code-creation,BytecodeHandler,0,18035,0x557426419b40,932,ModSmi +code-creation,BytecodeHandler,0,18044,0x557426419f00,180,ExpSmi +code-creation,BytecodeHandler,0,18053,0x557426419fc0,600,BitwiseOrSmi +code-creation,BytecodeHandler,0,18062,0x55742641a220,600,BitwiseXorSmi +code-creation,BytecodeHandler,0,18071,0x55742641a480,600,BitwiseAndSmi +code-creation,BytecodeHandler,0,18080,0x55742641a6e0,600,ShiftLeftSmi +code-creation,BytecodeHandler,0,18089,0x55742641a940,600,ShiftRightSmi +code-creation,BytecodeHandler,0,18098,0x55742641aba0,604,ShiftRightLogicalSmi +code-creation,BytecodeHandler,0,18107,0x55742641ae00,628,Inc +code-creation,BytecodeHandler,0,18120,0x55742641b080,632,Dec +code-creation,BytecodeHandler,0,18129,0x55742641b300,608,Negate +code-creation,BytecodeHandler,0,18141,0x55742641b580,596,BitwiseNot +code-creation,BytecodeHandler,0,18149,0x55742641b7e0,124,ToBooleanLogicalNot +code-creation,BytecodeHandler,0,18159,0x55742641b860,44,LogicalNot +code-creation,BytecodeHandler,0,18168,0x55742641b8a0,212,TypeOf +code-creation,BytecodeHandler,0,18176,0x55742641b980,112,DeletePropertyStrict +code-creation,BytecodeHandler,0,18186,0x55742641ba00,108,DeletePropertySloppy +code-creation,BytecodeHandler,0,18195,0x55742641ba80,44,GetSuperConstructor +code-creation,BytecodeHandler,0,18205,0x55742641bac0,596,CallAnyReceiver +code-creation,BytecodeHandler,0,18215,0x55742641bd20,596,CallProperty +code-creation,BytecodeHandler,0,18224,0x55742641bf80,596,CallProperty0 +code-creation,BytecodeHandler,0,18234,0x55742641c1e0,616,CallProperty1 +code-creation,BytecodeHandler,0,18242,0x55742641c460,628,CallProperty2 +code-creation,BytecodeHandler,0,18252,0x55742641c6e0,604,CallUndefinedReceiver +code-creation,BytecodeHandler,0,18261,0x55742641c940,644,CallUndefinedReceiver0 +code-creation,BytecodeHandler,0,18270,0x55742641cbe0,620,CallUndefinedReceiver1 +code-creation,BytecodeHandler,0,18279,0x55742641ce60,636,CallUndefinedReceiver2 +code-creation,BytecodeHandler,0,18289,0x55742641d0e0,60,CallNoFeedback +code-creation,BytecodeHandler,0,18298,0x55742641d120,596,CallWithSpread +code-creation,BytecodeHandler,0,18307,0x55742641d380,128,CallRuntime +code-creation,BytecodeHandler,0,18316,0x55742641d420,160,CallRuntimeForPair +code-creation,BytecodeHandler,0,18326,0x55742641d4e0,92,CallJSRuntime +code-creation,BytecodeHandler,0,18335,0x55742641d540,1628,InvokeIntrinsic +code-creation,BytecodeHandler,0,18344,0x55742641dba0,1124,Construct +code-creation,BytecodeHandler,0,18353,0x55742641e020,576,ConstructWithSpread +code-creation,BytecodeHandler,0,18362,0x55742641e280,1848,TestEqual +code-creation,BytecodeHandler,0,18371,0x55742641e9c0,1036,TestEqualStrict +code-creation,BytecodeHandler,0,18380,0x55742641ede0,1364,TestLessThan +code-creation,BytecodeHandler,0,18389,0x55742641f340,1364,TestGreaterThan +code-creation,BytecodeHandler,0,18398,0x55742641f8a0,1364,TestLessThanOrEqual +code-creation,BytecodeHandler,0,18408,0x55742641fe00,1364,TestGreaterThanOrEqual +code-creation,BytecodeHandler,0,18417,0x557426420360,52,TestReferenceEqual +code-creation,BytecodeHandler,0,18426,0x5574264203a0,880,TestInstanceOf +code-creation,BytecodeHandler,0,18435,0x557426420720,164,TestIn +code-creation,BytecodeHandler,0,18444,0x5574264207e0,60,TestUndetectable +code-creation,BytecodeHandler,0,18453,0x557426420820,44,TestNull +code-creation,BytecodeHandler,0,18462,0x557426420860,44,TestUndefined +code-creation,BytecodeHandler,0,18471,0x5574264208a0,376,TestTypeOf +code-creation,BytecodeHandler,0,18480,0x557426420a20,108,ToName +code-creation,BytecodeHandler,0,18489,0x557426420aa0,208,ToNumber +code-creation,BytecodeHandler,0,18498,0x557426420b80,224,ToNumeric +code-creation,BytecodeHandler,0,18509,0x557426420c80,108,ToObject +code-creation,BytecodeHandler,0,18518,0x557426420d00,116,ToString +code-creation,BytecodeHandler,0,18526,0x557426420d80,424,CreateRegExpLiteral +code-creation,BytecodeHandler,0,18536,0x557426420f40,1472,CreateArrayLiteral +code-creation,BytecodeHandler,0,18545,0x557426421520,92,CreateArrayFromIterable +code-creation,BytecodeHandler,0,18555,0x557426421580,836,CreateEmptyArrayLiteral +code-creation,BytecodeHandler,0,18564,0x5574264218e0,2224,CreateObjectLiteral +code-creation,BytecodeHandler,0,18573,0x5574264221a0,224,CreateEmptyObjectLiteral +code-creation,BytecodeHandler,0,18583,0x5574264222a0,176,CloneObject +code-creation,BytecodeHandler,0,18592,0x557426422360,224,GetTemplateObject +code-creation,BytecodeHandler,0,18601,0x557426422460,332,CreateClosure +code-creation,BytecodeHandler,0,18610,0x5574264225c0,128,CreateBlockContext +code-creation,BytecodeHandler,0,18619,0x557426422660,140,CreateCatchContext +code-creation,BytecodeHandler,0,18629,0x557426422700,276,CreateFunctionContext +code-creation,BytecodeHandler,0,18638,0x557426422820,276,CreateEvalContext +code-creation,BytecodeHandler,0,18647,0x557426422940,140,CreateWithContext +code-creation,BytecodeHandler,0,18659,0x5574264229e0,1576,CreateMappedArguments +code-creation,BytecodeHandler,0,18669,0x557426423020,572,CreateUnmappedArguments +code-creation,BytecodeHandler,0,18678,0x557426423260,604,CreateRestParameter +code-creation,BytecodeHandler,0,18687,0x5574264234c0,456,JumpLoop +code-creation,BytecodeHandler,0,18696,0x5574264236a0,44,Jump +code-creation,BytecodeHandler,0,18705,0x5574264236e0,64,JumpConstant +code-creation,BytecodeHandler,0,18714,0x557426423740,88,JumpIfNullConstant +code-creation,BytecodeHandler,0,18723,0x5574264237a0,88,JumpIfNotNullConstant +code-creation,BytecodeHandler,0,18733,0x557426423800,88,JumpIfUndefinedConstant +code-creation,BytecodeHandler,0,18742,0x557426423860,88,JumpIfNotUndefinedConstant +code-creation,BytecodeHandler,0,18752,0x5574264238c0,96,JumpIfUndefinedOrNullConstant +code-creation,BytecodeHandler,0,18762,0x557426423940,88,JumpIfTrueConstant +code-creation,BytecodeHandler,0,18771,0x5574264239a0,88,JumpIfFalseConstant +code-creation,BytecodeHandler,0,18780,0x557426423a00,96,JumpIfJSReceiverConstant +code-creation,BytecodeHandler,0,18790,0x557426423a80,164,JumpIfToBooleanTrueConstant +code-creation,BytecodeHandler,0,18799,0x557426423b40,164,JumpIfToBooleanFalseConstant +code-creation,BytecodeHandler,0,18810,0x557426423c00,148,JumpIfToBooleanTrue +code-creation,BytecodeHandler,0,18820,0x557426423ca0,148,JumpIfToBooleanFalse +code-creation,BytecodeHandler,0,18829,0x557426423d40,68,JumpIfTrue +code-creation,BytecodeHandler,0,18838,0x557426423da0,68,JumpIfFalse +code-creation,BytecodeHandler,0,18847,0x557426423e00,68,JumpIfNull +code-creation,BytecodeHandler,0,18856,0x557426423e60,68,JumpIfNotNull +code-creation,BytecodeHandler,0,18865,0x557426423ec0,68,JumpIfUndefined +code-creation,BytecodeHandler,0,18874,0x557426423f20,68,JumpIfNotUndefined +code-creation,BytecodeHandler,0,18883,0x557426423f80,80,JumpIfUndefinedOrNull +code-creation,BytecodeHandler,0,18893,0x557426423fe0,80,JumpIfJSReceiver +code-creation,BytecodeHandler,0,18902,0x557426424040,112,SwitchOnSmiNoFeedback +code-creation,BytecodeHandler,0,18911,0x5574264240c0,484,ForInEnumerate +code-creation,BytecodeHandler,0,18920,0x5574264242c0,296,ForInPrepare +code-creation,BytecodeHandler,0,18929,0x557426424400,64,ForInContinue +code-creation,BytecodeHandler,0,18938,0x557426424460,260,ForInNext +code-creation,BytecodeHandler,0,18947,0x557426424580,36,ForInStep +code-creation,BytecodeHandler,0,18956,0x5574264245c0,36,SetPendingMessage +code-creation,BytecodeHandler,0,18965,0x557426424600,100,Throw +code-creation,BytecodeHandler,0,18974,0x557426424680,100,ReThrow +code-creation,BytecodeHandler,0,18983,0x557426424700,108,Return +code-creation,BytecodeHandler,0,18991,0x557426424780,188,ThrowReferenceErrorIfHole +code-creation,BytecodeHandler,0,19001,0x557426424840,120,ThrowSuperNotCalledIfHole +code-creation,BytecodeHandler,0,19011,0x5574264248c0,120,ThrowSuperAlreadyCalledIfNotHole +code-creation,BytecodeHandler,0,19020,0x557426424940,148,ThrowIfNotSuperConstructor +code-creation,BytecodeHandler,0,19030,0x5574264249e0,128,SwitchOnGeneratorState +code-creation,BytecodeHandler,0,19039,0x557426424a80,580,SuspendGenerator +code-creation,BytecodeHandler,0,19049,0x557426424ce0,176,ResumeGenerator +code-creation,BytecodeHandler,0,19058,0x557426424da0,164,GetIterator +code-creation,BytecodeHandler,0,19067,0x557426424e60,100,Debugger +code-creation,BytecodeHandler,0,19076,0x557426424ee0,116,IncBlockCounter +code-creation,BytecodeHandler,0,19085,0x557426424f60,48,Abort +code-creation,BytecodeHandler,0,19094,0x557426424fa0,32,Star0 +code-creation,BytecodeHandler,0,19104,0x557426424fe0,52,Illegal +code-creation,BytecodeHandler,0,19114,0x557426425020,204,DebugBreak1.Wide +code-creation,BytecodeHandler,0,19123,0x557426425100,204,DebugBreak2.Wide +code-creation,BytecodeHandler,0,19132,0x5574264251e0,204,DebugBreak3.Wide +code-creation,BytecodeHandler,0,19141,0x5574264252c0,204,DebugBreak4.Wide +code-creation,BytecodeHandler,0,19151,0x5574264253a0,204,DebugBreak5.Wide +code-creation,BytecodeHandler,0,19160,0x557426425480,204,DebugBreak6.Wide +code-creation,BytecodeHandler,0,19169,0x557426425560,28,LdaSmi.Wide +code-creation,BytecodeHandler,0,19185,0x557426425580,40,LdaConstant.Wide +code-creation,BytecodeHandler,0,19194,0x5574264255c0,3908,LdaGlobal.Wide +code-creation,BytecodeHandler,0,19208,0x557426426520,3800,LdaGlobalInsideTypeof.Wide +code-creation,BytecodeHandler,0,19218,0x557426427400,180,StaGlobal.Wide +code-creation,BytecodeHandler,0,19227,0x5574264274c0,40,PushContext.Wide +code-creation,BytecodeHandler,0,19236,0x557426427500,36,PopContext.Wide +code-creation,BytecodeHandler,0,19245,0x557426427540,100,LdaContextSlot.Wide +code-creation,BytecodeHandler,0,19255,0x5574264275c0,100,LdaImmutableContextSlot.Wide +code-creation,BytecodeHandler,0,19264,0x557426427640,52,LdaCurrentContextSlot.Wide +code-creation,BytecodeHandler,0,19274,0x557426427680,52,LdaImmutableCurrentContextSlot.Wide +code-creation,BytecodeHandler,0,19284,0x5574264276c0,176,StaContextSlot.Wide +code-creation,BytecodeHandler,0,19293,0x557426427780,128,StaCurrentContextSlot.Wide +code-creation,BytecodeHandler,0,19303,0x557426427820,128,LdaLookupSlot.Wide +code-creation,BytecodeHandler,0,19312,0x5574264278c0,260,LdaLookupContextSlot.Wide +code-creation,BytecodeHandler,0,19322,0x5574264279e0,4000,LdaLookupGlobalSlot.Wide +code-creation,BytecodeHandler,0,19331,0x5574264289a0,128,LdaLookupSlotInsideTypeof.Wide +code-creation,BytecodeHandler,0,19342,0x557426428a40,260,LdaLookupContextSlotInsideTypeof.Wide +code-creation,BytecodeHandler,0,19352,0x557426428b60,3964,LdaLookupGlobalSlotInsideTypeof.Wide +code-creation,BytecodeHandler,0,19362,0x557426429ae0,216,StaLookupSlot.Wide +code-creation,BytecodeHandler,0,19371,0x557426429bc0,32,Ldar.Wide +code-creation,BytecodeHandler,0,19380,0x557426429c00,32,Star.Wide +code-creation,BytecodeHandler,0,19389,0x557426429c40,40,Mov.Wide +code-creation,BytecodeHandler,0,19398,0x557426429c80,4508,LdaNamedProperty.Wide +code-creation,BytecodeHandler,0,19407,0x55742642ae20,128,LdaNamedPropertyNoFeedback.Wide +code-creation,BytecodeHandler,0,19419,0x55742642aec0,196,LdaNamedPropertyFromSuper.Wide +code-creation,BytecodeHandler,0,19429,0x55742642afa0,164,LdaKeyedProperty.Wide +code-creation,BytecodeHandler,0,19438,0x55742642b060,188,LdaModuleVariable.Wide +code-creation,BytecodeHandler,0,19448,0x55742642b120,320,StaModuleVariable.Wide +code-creation,BytecodeHandler,0,19457,0x55742642b280,184,StaNamedProperty.Wide +code-creation,BytecodeHandler,0,19467,0x55742642b340,140,StaNamedPropertyNoFeedback.Wide +code-creation,BytecodeHandler,0,19476,0x55742642b3e0,184,StaNamedOwnProperty.Wide +code-creation,BytecodeHandler,0,19486,0x55742642b4a0,176,StaKeyedProperty.Wide +code-creation,BytecodeHandler,0,19495,0x55742642b560,176,StaInArrayLiteral.Wide +code-creation,BytecodeHandler,0,19505,0x55742642b620,200,StaDataPropertyInLiteral.Wide +code-creation,BytecodeHandler,0,19515,0x55742642b700,168,CollectTypeProfile.Wide +code-creation,BytecodeHandler,0,19524,0x55742642b7c0,948,Add.Wide +code-creation,BytecodeHandler,0,19533,0x55742642bb80,1008,Sub.Wide +code-creation,BytecodeHandler,0,19542,0x55742642bf80,1104,Mul.Wide +code-creation,BytecodeHandler,0,19551,0x55742642c3e0,952,Div.Wide +code-creation,BytecodeHandler,0,19559,0x55742642c7a0,1020,Mod.Wide +code-creation,BytecodeHandler,0,19568,0x55742642cba0,188,Exp.Wide +code-creation,BytecodeHandler,0,19577,0x55742642cc60,996,BitwiseOr.Wide +code-creation,BytecodeHandler,0,19586,0x55742642d060,992,BitwiseXor.Wide +code-creation,BytecodeHandler,0,19595,0x55742642d460,992,BitwiseAnd.Wide +code-creation,BytecodeHandler,0,19604,0x55742642d860,992,ShiftLeft.Wide +code-creation,BytecodeHandler,0,19613,0x55742642dc60,992,ShiftRight.Wide +code-creation,BytecodeHandler,0,19623,0x55742642e060,996,ShiftRightLogical.Wide +code-creation,BytecodeHandler,0,19632,0x55742642e460,884,AddSmi.Wide +code-creation,BytecodeHandler,0,19641,0x55742642e7e0,944,SubSmi.Wide +code-creation,BytecodeHandler,0,19650,0x55742642eba0,1052,MulSmi.Wide +code-creation,BytecodeHandler,0,19659,0x55742642efc0,936,DivSmi.Wide +code-creation,BytecodeHandler,0,19668,0x55742642f380,936,ModSmi.Wide +code-creation,BytecodeHandler,0,19677,0x55742642f740,184,ExpSmi.Wide +code-creation,BytecodeHandler,0,19689,0x55742642f800,604,BitwiseOrSmi.Wide +code-creation,BytecodeHandler,0,19698,0x55742642fa60,604,BitwiseXorSmi.Wide +code-creation,BytecodeHandler,0,19707,0x55742642fcc0,604,BitwiseAndSmi.Wide +code-creation,BytecodeHandler,0,19718,0x55742642ff20,604,ShiftLeftSmi.Wide +code-creation,BytecodeHandler,0,19727,0x557426430180,604,ShiftRightSmi.Wide +code-creation,BytecodeHandler,0,19737,0x5574264303e0,608,ShiftRightLogicalSmi.Wide +code-creation,BytecodeHandler,0,19746,0x557426430660,592,Inc.Wide +code-creation,BytecodeHandler,0,19755,0x5574264308c0,592,Dec.Wide +code-creation,BytecodeHandler,0,19764,0x557426430b20,612,Negate.Wide +code-creation,BytecodeHandler,0,19773,0x557426430da0,600,BitwiseNot.Wide +code-creation,BytecodeHandler,0,19782,0x557426431000,116,DeletePropertyStrict.Wide +code-creation,BytecodeHandler,0,19792,0x557426431080,112,DeletePropertySloppy.Wide +code-creation,BytecodeHandler,0,19801,0x557426431100,44,GetSuperConstructor.Wide +code-creation,BytecodeHandler,0,19811,0x557426431140,600,CallAnyReceiver.Wide +code-creation,BytecodeHandler,0,19820,0x5574264313a0,600,CallProperty.Wide +code-creation,BytecodeHandler,0,19829,0x557426431600,600,CallProperty0.Wide +code-creation,BytecodeHandler,0,19839,0x557426431860,616,CallProperty1.Wide +code-creation,BytecodeHandler,0,19848,0x557426431ae0,628,CallProperty2.Wide +code-creation,BytecodeHandler,0,19857,0x557426431d60,604,CallUndefinedReceiver.Wide +code-creation,BytecodeHandler,0,19867,0x557426431fc0,644,CallUndefinedReceiver0.Wide +code-creation,BytecodeHandler,0,19876,0x557426432260,624,CallUndefinedReceiver1.Wide +code-creation,BytecodeHandler,0,19886,0x5574264324e0,636,CallUndefinedReceiver2.Wide +code-creation,BytecodeHandler,0,19896,0x557426432760,60,CallNoFeedback.Wide +code-creation,BytecodeHandler,0,19905,0x5574264327a0,600,CallWithSpread.Wide +code-creation,BytecodeHandler,0,19914,0x557426432a00,132,CallRuntime.Wide +code-creation,BytecodeHandler,0,19923,0x557426432aa0,172,CallRuntimeForPair.Wide +code-creation,BytecodeHandler,0,19933,0x557426432b60,92,CallJSRuntime.Wide +code-creation,BytecodeHandler,0,19942,0x557426432bc0,1632,InvokeIntrinsic.Wide +code-creation,BytecodeHandler,0,19952,0x557426433240,1068,Construct.Wide +code-creation,BytecodeHandler,0,19961,0x557426433680,512,ConstructWithSpread.Wide +code-creation,BytecodeHandler,0,19970,0x5574264338a0,1868,TestEqual.Wide +code-creation,BytecodeHandler,0,19980,0x557426434000,1040,TestEqualStrict.Wide +code-creation,BytecodeHandler,0,19989,0x557426434420,1364,TestLessThan.Wide +code-creation,BytecodeHandler,0,19998,0x557426434980,1364,TestGreaterThan.Wide +code-creation,BytecodeHandler,0,20007,0x557426434ee0,1364,TestLessThanOrEqual.Wide +code-creation,BytecodeHandler,0,20019,0x557426435440,1364,TestGreaterThanOrEqual.Wide +code-creation,BytecodeHandler,0,20028,0x5574264359a0,52,TestReferenceEqual.Wide +code-creation,BytecodeHandler,0,20038,0x5574264359e0,884,TestInstanceOf.Wide +code-creation,BytecodeHandler,0,20047,0x557426435d60,164,TestIn.Wide +code-creation,BytecodeHandler,0,20056,0x557426435e20,112,ToName.Wide +code-creation,BytecodeHandler,0,20065,0x557426435ea0,212,ToNumber.Wide +code-creation,BytecodeHandler,0,20074,0x557426435f80,228,ToNumeric.Wide +code-creation,BytecodeHandler,0,20083,0x557426436080,112,ToObject.Wide +code-creation,BytecodeHandler,0,20092,0x557426436100,424,CreateRegExpLiteral.Wide +code-creation,BytecodeHandler,0,20102,0x5574264362c0,1380,CreateArrayLiteral.Wide +code-creation,BytecodeHandler,0,20112,0x557426436840,836,CreateEmptyArrayLiteral.Wide +code-creation,BytecodeHandler,0,20121,0x557426436ba0,2124,CreateObjectLiteral.Wide +code-creation,BytecodeHandler,0,20131,0x557426437400,176,CloneObject.Wide +code-creation,BytecodeHandler,0,20140,0x5574264374c0,172,GetTemplateObject.Wide +code-creation,BytecodeHandler,0,20149,0x557426437580,336,CreateClosure.Wide +code-creation,BytecodeHandler,0,20159,0x5574264376e0,128,CreateBlockContext.Wide +code-creation,BytecodeHandler,0,20168,0x557426437780,144,CreateCatchContext.Wide +code-creation,BytecodeHandler,0,20178,0x557426437820,276,CreateFunctionContext.Wide +code-creation,BytecodeHandler,0,20198,0x557426437940,276,CreateEvalContext.Wide +code-creation,BytecodeHandler,0,20207,0x557426437a60,144,CreateWithContext.Wide +code-creation,BytecodeHandler,0,20216,0x557426437b00,464,JumpLoop.Wide +code-creation,BytecodeHandler,0,20225,0x557426437ce0,44,Jump.Wide +code-creation,BytecodeHandler,0,20234,0x557426437d20,64,JumpConstant.Wide +code-creation,BytecodeHandler,0,20247,0x557426437d80,88,JumpIfNullConstant.Wide +code-creation,BytecodeHandler,0,20257,0x557426437de0,88,JumpIfNotNullConstant.Wide +code-creation,BytecodeHandler,0,20266,0x557426437e40,88,JumpIfUndefinedConstant.Wide +code-creation,BytecodeHandler,0,20276,0x557426437ea0,88,JumpIfNotUndefinedConstant.Wide +code-creation,BytecodeHandler,0,20286,0x557426437f00,96,JumpIfUndefinedOrNullConstant.Wide +code-creation,BytecodeHandler,0,20296,0x557426437f80,88,JumpIfTrueConstant.Wide +code-creation,BytecodeHandler,0,20305,0x557426437fe0,88,JumpIfFalseConstant.Wide +code-creation,BytecodeHandler,0,20315,0x557426438040,96,JumpIfJSReceiverConstant.Wide +code-creation,BytecodeHandler,0,20325,0x5574264380c0,164,JumpIfToBooleanTrueConstant.Wide +code-creation,BytecodeHandler,0,20336,0x557426438180,164,JumpIfToBooleanFalseConstant.Wide +code-creation,BytecodeHandler,0,20346,0x557426438240,148,JumpIfToBooleanTrue.Wide +code-creation,BytecodeHandler,0,20356,0x5574264382e0,148,JumpIfToBooleanFalse.Wide +code-creation,BytecodeHandler,0,20365,0x557426438380,68,JumpIfTrue.Wide +code-creation,BytecodeHandler,0,20375,0x5574264383e0,68,JumpIfFalse.Wide +code-creation,BytecodeHandler,0,20384,0x557426438440,68,JumpIfNull.Wide +code-creation,BytecodeHandler,0,20393,0x5574264384a0,68,JumpIfNotNull.Wide +code-creation,BytecodeHandler,0,20402,0x557426438500,68,JumpIfUndefined.Wide +code-creation,BytecodeHandler,0,20412,0x557426438560,68,JumpIfNotUndefined.Wide +code-creation,BytecodeHandler,0,20421,0x5574264385c0,80,JumpIfUndefinedOrNull.Wide +code-creation,BytecodeHandler,0,20431,0x557426438620,80,JumpIfJSReceiver.Wide +code-creation,BytecodeHandler,0,20440,0x557426438680,112,SwitchOnSmiNoFeedback.Wide +code-creation,BytecodeHandler,0,20450,0x557426438700,484,ForInEnumerate.Wide +code-creation,BytecodeHandler,0,20460,0x557426438900,296,ForInPrepare.Wide +code-creation,BytecodeHandler,0,20469,0x557426438a40,64,ForInContinue.Wide +code-creation,BytecodeHandler,0,20478,0x557426438aa0,260,ForInNext.Wide +code-creation,BytecodeHandler,0,20487,0x557426438bc0,36,ForInStep.Wide +code-creation,BytecodeHandler,0,20496,0x557426438c00,148,ThrowReferenceErrorIfHole.Wide +code-creation,BytecodeHandler,0,20506,0x557426438ca0,148,ThrowIfNotSuperConstructor.Wide +code-creation,BytecodeHandler,0,20516,0x557426438d40,128,SwitchOnGeneratorState.Wide +code-creation,BytecodeHandler,0,20525,0x557426438de0,592,SuspendGenerator.Wide +code-creation,BytecodeHandler,0,20535,0x557426439040,176,ResumeGenerator.Wide +code-creation,BytecodeHandler,0,20544,0x557426439100,164,GetIterator.Wide +code-creation,BytecodeHandler,0,20553,0x5574264391c0,120,IncBlockCounter.Wide +code-creation,BytecodeHandler,0,20563,0x557426439240,52,Abort.Wide +code-creation,BytecodeHandler,0,20572,0x557426439280,204,DebugBreak1.ExtraWide +code-creation,BytecodeHandler,0,20581,0x557426439360,204,DebugBreak2.ExtraWide +code-creation,BytecodeHandler,0,20590,0x557426439440,204,DebugBreak3.ExtraWide +code-creation,BytecodeHandler,0,20600,0x557426439520,204,DebugBreak4.ExtraWide +code-creation,BytecodeHandler,0,20609,0x557426439600,204,DebugBreak5.ExtraWide +code-creation,BytecodeHandler,0,20618,0x5574264396e0,204,DebugBreak6.ExtraWide +code-creation,BytecodeHandler,0,20628,0x5574264397c0,24,LdaSmi.ExtraWide +code-creation,BytecodeHandler,0,20638,0x5574264397e0,36,LdaConstant.ExtraWide +code-creation,BytecodeHandler,0,20647,0x557426439820,3896,LdaGlobal.ExtraWide +code-creation,BytecodeHandler,0,20657,0x55742643a760,3788,LdaGlobalInsideTypeof.ExtraWide +code-creation,BytecodeHandler,0,20667,0x55742643b640,180,StaGlobal.ExtraWide +code-creation,BytecodeHandler,0,20676,0x55742643b700,36,PushContext.ExtraWide +code-creation,BytecodeHandler,0,20685,0x55742643b740,32,PopContext.ExtraWide +code-creation,BytecodeHandler,0,20698,0x55742643b780,96,LdaContextSlot.ExtraWide +code-creation,BytecodeHandler,0,20707,0x55742643b800,96,LdaImmutableContextSlot.ExtraWide +code-creation,BytecodeHandler,0,20717,0x55742643b880,52,LdaCurrentContextSlot.ExtraWide +code-creation,BytecodeHandler,0,20727,0x55742643b8c0,52,LdaImmutableCurrentContextSlot.ExtraWide +code-creation,BytecodeHandler,0,20737,0x55742643b900,172,StaContextSlot.ExtraWide +code-creation,BytecodeHandler,0,20747,0x55742643b9c0,128,StaCurrentContextSlot.ExtraWide +code-creation,BytecodeHandler,0,20757,0x55742643ba60,128,LdaLookupSlot.ExtraWide +code-creation,BytecodeHandler,0,20766,0x55742643bb00,260,LdaLookupContextSlot.ExtraWide +code-creation,BytecodeHandler,0,20776,0x55742643bc20,3988,LdaLookupGlobalSlot.ExtraWide +code-creation,BytecodeHandler,0,20786,0x55742643cbc0,128,LdaLookupSlotInsideTypeof.ExtraWide +code-creation,BytecodeHandler,0,20796,0x55742643cc60,260,LdaLookupContextSlotInsideTypeof.ExtraWide +code-creation,BytecodeHandler,0,20806,0x55742643cd80,3952,LdaLookupGlobalSlotInsideTypeof.ExtraWide +code-creation,BytecodeHandler,0,20817,0x55742643dd00,212,StaLookupSlot.ExtraWide +code-creation,BytecodeHandler,0,20826,0x55742643dde0,32,Ldar.ExtraWide +code-creation,BytecodeHandler,0,20835,0x55742643de20,28,Star.ExtraWide +code-creation,BytecodeHandler,0,20845,0x55742643de40,40,Mov.ExtraWide +code-creation,BytecodeHandler,0,20854,0x55742643de80,4492,LdaNamedProperty.ExtraWide +code-creation,BytecodeHandler,0,20863,0x55742643f020,128,LdaNamedPropertyNoFeedback.ExtraWide +code-creation,BytecodeHandler,0,20874,0x55742643f0c0,192,LdaNamedPropertyFromSuper.ExtraWide +code-creation,BytecodeHandler,0,20884,0x55742643f1a0,164,LdaKeyedProperty.ExtraWide +code-creation,BytecodeHandler,0,20893,0x55742643f260,188,LdaModuleVariable.ExtraWide +code-creation,BytecodeHandler,0,20903,0x55742643f320,320,StaModuleVariable.ExtraWide +code-creation,BytecodeHandler,0,20912,0x55742643f480,184,StaNamedProperty.ExtraWide +code-creation,BytecodeHandler,0,20922,0x55742643f540,140,StaNamedPropertyNoFeedback.ExtraWide +code-creation,BytecodeHandler,0,20932,0x55742643f5e0,184,StaNamedOwnProperty.ExtraWide +code-creation,BytecodeHandler,0,20942,0x55742643f6a0,172,StaKeyedProperty.ExtraWide +code-creation,BytecodeHandler,0,20953,0x55742643f760,172,StaInArrayLiteral.ExtraWide +code-creation,BytecodeHandler,0,20963,0x55742643f820,196,StaDataPropertyInLiteral.ExtraWide +code-creation,BytecodeHandler,0,20973,0x55742643f900,168,CollectTypeProfile.ExtraWide +code-creation,BytecodeHandler,0,20982,0x55742643f9c0,948,Add.ExtraWide +code-creation,BytecodeHandler,0,20991,0x55742643fd80,1008,Sub.ExtraWide +code-creation,BytecodeHandler,0,21000,0x557426440180,1104,Mul.ExtraWide +code-creation,BytecodeHandler,0,21010,0x5574264405e0,952,Div.ExtraWide +code-creation,BytecodeHandler,0,21019,0x5574264409a0,1016,Mod.ExtraWide +code-creation,BytecodeHandler,0,21028,0x557426440da0,188,Exp.ExtraWide +code-creation,BytecodeHandler,0,21037,0x557426440e60,992,BitwiseOr.ExtraWide +code-creation,BytecodeHandler,0,21046,0x557426441260,988,BitwiseXor.ExtraWide +code-creation,BytecodeHandler,0,21055,0x557426441640,988,BitwiseAnd.ExtraWide +code-creation,BytecodeHandler,0,21065,0x557426441a20,988,ShiftLeft.ExtraWide +code-creation,BytecodeHandler,0,21074,0x557426441e00,988,ShiftRight.ExtraWide +code-creation,BytecodeHandler,0,21083,0x5574264421e0,992,ShiftRightLogical.ExtraWide +code-creation,BytecodeHandler,0,21093,0x5574264425e0,884,AddSmi.ExtraWide +code-creation,BytecodeHandler,0,21102,0x557426442960,944,SubSmi.ExtraWide +code-creation,BytecodeHandler,0,21111,0x557426442d20,1048,MulSmi.ExtraWide +code-creation,BytecodeHandler,0,21120,0x557426443140,936,DivSmi.ExtraWide +code-creation,BytecodeHandler,0,21130,0x557426443500,932,ModSmi.ExtraWide +code-creation,BytecodeHandler,0,21139,0x5574264438c0,180,ExpSmi.ExtraWide +code-creation,BytecodeHandler,0,21148,0x557426443980,604,BitwiseOrSmi.ExtraWide +code-creation,BytecodeHandler,0,21157,0x557426443be0,604,BitwiseXorSmi.ExtraWide +code-creation,BytecodeHandler,0,21167,0x557426443e40,604,BitwiseAndSmi.ExtraWide +code-creation,BytecodeHandler,0,21185,0x5574264440a0,604,ShiftLeftSmi.ExtraWide +code-creation,BytecodeHandler,0,21194,0x557426444300,604,ShiftRightSmi.ExtraWide +code-creation,BytecodeHandler,0,21204,0x557426444560,608,ShiftRightLogicalSmi.ExtraWide +code-creation,BytecodeHandler,0,21213,0x5574264447e0,588,Inc.ExtraWide +code-creation,BytecodeHandler,0,21223,0x557426444a40,592,Dec.ExtraWide +code-creation,BytecodeHandler,0,21232,0x557426444ca0,612,Negate.ExtraWide +code-creation,BytecodeHandler,0,21241,0x557426444f20,600,BitwiseNot.ExtraWide +code-creation,BytecodeHandler,0,21250,0x557426445180,112,DeletePropertyStrict.ExtraWide +code-creation,BytecodeHandler,0,21262,0x557426445200,112,DeletePropertySloppy.ExtraWide +code-creation,BytecodeHandler,0,21272,0x557426445280,40,GetSuperConstructor.ExtraWide +code-creation,BytecodeHandler,0,21281,0x5574264452c0,596,CallAnyReceiver.ExtraWide +code-creation,BytecodeHandler,0,21291,0x557426445520,596,CallProperty.ExtraWide +code-creation,BytecodeHandler,0,21300,0x557426445780,596,CallProperty0.ExtraWide +code-creation,BytecodeHandler,0,21314,0x5574264459e0,612,CallProperty1.ExtraWide +code-creation,BytecodeHandler,0,21323,0x557426445c60,624,CallProperty2.ExtraWide +code-creation,BytecodeHandler,0,21333,0x557426445ee0,600,CallUndefinedReceiver.ExtraWide +code-creation,BytecodeHandler,0,21343,0x557426446140,644,CallUndefinedReceiver0.ExtraWide +code-creation,BytecodeHandler,0,21353,0x5574264463e0,620,CallUndefinedReceiver1.ExtraWide +code-creation,BytecodeHandler,0,21363,0x557426446660,632,CallUndefinedReceiver2.ExtraWide +code-creation,BytecodeHandler,0,21373,0x5574264468e0,56,CallNoFeedback.ExtraWide +code-creation,BytecodeHandler,0,21382,0x557426446920,596,CallWithSpread.ExtraWide +code-creation,BytecodeHandler,0,21392,0x557426446b80,128,CallRuntime.ExtraWide +code-creation,BytecodeHandler,0,21401,0x557426446c20,172,CallRuntimeForPair.ExtraWide +code-creation,BytecodeHandler,0,21411,0x557426446ce0,92,CallJSRuntime.ExtraWide +code-creation,BytecodeHandler,0,21420,0x557426446d40,1628,InvokeIntrinsic.ExtraWide +code-creation,BytecodeHandler,0,21430,0x5574264473a0,1064,Construct.ExtraWide +code-creation,BytecodeHandler,0,21439,0x5574264477e0,508,ConstructWithSpread.ExtraWide +code-creation,BytecodeHandler,0,21449,0x5574264479e0,1864,TestEqual.ExtraWide +code-creation,BytecodeHandler,0,21458,0x557426448140,1036,TestEqualStrict.ExtraWide +code-creation,BytecodeHandler,0,21468,0x557426448560,1364,TestLessThan.ExtraWide +code-creation,BytecodeHandler,0,21481,0x557426448ac0,1364,TestGreaterThan.ExtraWide +code-creation,BytecodeHandler,0,21493,0x557426449020,1364,TestLessThanOrEqual.ExtraWide +code-creation,BytecodeHandler,0,21506,0x557426449580,1364,TestGreaterThanOrEqual.ExtraWide +code-creation,BytecodeHandler,0,21516,0x557426449ae0,52,TestReferenceEqual.ExtraWide +code-creation,BytecodeHandler,0,21526,0x557426449b20,880,TestInstanceOf.ExtraWide +code-creation,BytecodeHandler,0,21536,0x557426449ea0,164,TestIn.ExtraWide +code-creation,BytecodeHandler,0,21545,0x557426449f60,112,ToName.ExtraWide +code-creation,BytecodeHandler,0,21554,0x557426449fe0,208,ToNumber.ExtraWide +code-creation,BytecodeHandler,0,21563,0x55742644a0c0,228,ToNumeric.ExtraWide +code-creation,BytecodeHandler,0,21573,0x55742644a1c0,112,ToObject.ExtraWide +code-creation,BytecodeHandler,0,21584,0x55742644a240,424,CreateRegExpLiteral.ExtraWide +code-creation,BytecodeHandler,0,21594,0x55742644a400,1380,CreateArrayLiteral.ExtraWide +code-creation,BytecodeHandler,0,21608,0x55742644a980,832,CreateEmptyArrayLiteral.ExtraWide +code-creation,BytecodeHandler,0,21618,0x55742644ace0,2124,CreateObjectLiteral.ExtraWide +code-creation,BytecodeHandler,0,21628,0x55742644b540,176,CloneObject.ExtraWide +code-creation,BytecodeHandler,0,21638,0x55742644b600,172,GetTemplateObject.ExtraWide +code-creation,BytecodeHandler,0,21647,0x55742644b6c0,336,CreateClosure.ExtraWide +code-creation,BytecodeHandler,0,21657,0x55742644b820,128,CreateBlockContext.ExtraWide +code-creation,BytecodeHandler,0,21666,0x55742644b8c0,140,CreateCatchContext.ExtraWide +code-creation,BytecodeHandler,0,21680,0x55742644b960,272,CreateFunctionContext.ExtraWide +code-creation,BytecodeHandler,0,21690,0x55742644ba80,272,CreateEvalContext.ExtraWide +code-creation,BytecodeHandler,0,21700,0x55742644bba0,140,CreateWithContext.ExtraWide +code-creation,BytecodeHandler,0,21710,0x55742644bc40,460,JumpLoop.ExtraWide +code-creation,BytecodeHandler,0,21719,0x55742644be20,44,Jump.ExtraWide +code-creation,BytecodeHandler,0,21729,0x55742644be60,64,JumpConstant.ExtraWide +code-creation,BytecodeHandler,0,21738,0x55742644bec0,88,JumpIfNullConstant.ExtraWide +code-creation,BytecodeHandler,0,21748,0x55742644bf20,88,JumpIfNotNullConstant.ExtraWide +code-creation,BytecodeHandler,0,21758,0x55742644bf80,88,JumpIfUndefinedConstant.ExtraWide +code-creation,BytecodeHandler,0,21768,0x55742644bfe0,88,JumpIfNotUndefinedConstant.ExtraWide +code-creation,BytecodeHandler,0,21778,0x55742644c040,96,JumpIfUndefinedOrNullConstant.ExtraWide +code-creation,BytecodeHandler,0,21788,0x55742644c0c0,88,JumpIfTrueConstant.ExtraWide +code-creation,BytecodeHandler,0,21798,0x55742644c120,88,JumpIfFalseConstant.ExtraWide +code-creation,BytecodeHandler,0,21808,0x55742644c180,96,JumpIfJSReceiverConstant.ExtraWide +code-creation,BytecodeHandler,0,21818,0x55742644c200,164,JumpIfToBooleanTrueConstant.ExtraWide +code-creation,BytecodeHandler,0,21828,0x55742644c2c0,164,JumpIfToBooleanFalseConstant.ExtraWide +code-creation,BytecodeHandler,0,21838,0x55742644c380,148,JumpIfToBooleanTrue.ExtraWide +code-creation,BytecodeHandler,0,21848,0x55742644c420,148,JumpIfToBooleanFalse.ExtraWide +code-creation,BytecodeHandler,0,21858,0x55742644c4c0,68,JumpIfTrue.ExtraWide +code-creation,BytecodeHandler,0,21867,0x55742644c520,68,JumpIfFalse.ExtraWide +code-creation,BytecodeHandler,0,21877,0x55742644c580,68,JumpIfNull.ExtraWide +code-creation,BytecodeHandler,0,21886,0x55742644c5e0,68,JumpIfNotNull.ExtraWide +code-creation,BytecodeHandler,0,21896,0x55742644c640,68,JumpIfUndefined.ExtraWide +code-creation,BytecodeHandler,0,21907,0x55742644c6a0,68,JumpIfNotUndefined.ExtraWide +code-creation,BytecodeHandler,0,21917,0x55742644c700,76,JumpIfUndefinedOrNull.ExtraWide +code-creation,BytecodeHandler,0,21926,0x55742644c760,76,JumpIfJSReceiver.ExtraWide +code-creation,BytecodeHandler,0,21936,0x55742644c7c0,112,SwitchOnSmiNoFeedback.ExtraWide +code-creation,BytecodeHandler,0,21946,0x55742644c840,484,ForInEnumerate.ExtraWide +code-creation,BytecodeHandler,0,21956,0x55742644ca40,296,ForInPrepare.ExtraWide +code-creation,BytecodeHandler,0,21965,0x55742644cb80,60,ForInContinue.ExtraWide +code-creation,BytecodeHandler,0,21975,0x55742644cbc0,256,ForInNext.ExtraWide +code-creation,BytecodeHandler,0,21984,0x55742644cce0,36,ForInStep.ExtraWide +code-creation,BytecodeHandler,0,21994,0x55742644cd20,148,ThrowReferenceErrorIfHole.ExtraWide +code-creation,BytecodeHandler,0,22004,0x55742644cdc0,144,ThrowIfNotSuperConstructor.ExtraWide +code-creation,BytecodeHandler,0,22014,0x55742644ce60,128,SwitchOnGeneratorState.ExtraWide +code-creation,BytecodeHandler,0,22024,0x55742644cf00,588,SuspendGenerator.ExtraWide +code-creation,BytecodeHandler,0,22033,0x55742644d160,176,ResumeGenerator.ExtraWide +code-creation,BytecodeHandler,0,22043,0x55742644d220,160,GetIterator.ExtraWide +code-creation,BytecodeHandler,0,22052,0x55742644d2e0,120,IncBlockCounter.ExtraWide +code-creation,BytecodeHandler,0,22062,0x55742644d360,52,Abort.ExtraWide +tick,0x7f3662e68f6f,22077,0,0x0,6 +tick,0x7f3662def52c,22093,0,0x0,6 +tick,0x7f3662e68f6f,22103,0,0x0,6 +tick,0x7f3662def577,22113,0,0x0,6 +tick,0x557426454401,22128,0,0x0,6 +tick,0x7f3662dfac7e,22142,0,0x0,6 +tick,0x7f3662e68f6f,22156,0,0x0,6 +tick,0x7f3662e68f6f,22170,0,0x0,6 +tick,0x7f3662e68f6f,22184,0,0x0,6 +new,MemoryChunk,0x2ae708200000,262144 +new,MemoryChunk,0x2ae708240000,262144 +tick,0x5574260ac3a0,22383,0,0x0,5 +code-creation,Script,10,23305,0x2ae70821264a,128, test/mjsunit/tools/tickprocessor-test.js:1:1,0x2ae70821243c,~ +script-source,3,test/mjsunit/tools/tickprocessor-test.js,// Copyright 2020 the V8 project authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n// Sample file for creating tickprocessor-test.log\n"use strict"\n\nlet result;\n\nfunction loop() {\n let result = 0;\n for (let i = 0; i < 10_000_000; i++) {\n result = add(result\x2C 1);\n }\n return result;\n}\n\nfunction add(a\x2C b) {\n return a + b;\n}\n\n\nresult = loop();\nresult = loop();\n\n// Cause some IC misses\nfunction read_monomorphic(o) {\n return o.value\n}\n\nfunction read_polymorphic(o) {\n return o.value\n}\n\nfunction read_megamorphic(o) {\n return o.value\n}\n\nconst objects = [];\nfor (let i = 0; i < 100; i++) {\n const object = {};\n object['key' + i ];\n object['value'] = 1 + i/100;\n objects.push(object)\n}\n\nfunction ics() {\n result = 0;\n for (let i = 0; i < objects.length; i++) {\n result += read_monomorphic(objects[0]);\n result += read_polymorphic(objects[i % 3])\n result += read_megamorphic(objects[i]);\n }\n}\n\nfor (let i = 0; i < 100_000; i++) {\n ics();\n}\n +code-source-info,0x2ae70821264a,3,0,1046,C6O0C11O237C12O237C14O417C18O426C21O424C23O434C27O443C30O441C32O645C34O645C36O662C38O667C40O667C45O698C47O704C52O717C55O710C58O726C63O749C66O746C69O742C73O757C76O765C81O765C86O675C91O649C94O1012C98O1017C104O1017C109O1037C113O1037C117O1029C122O999C127O1046,, +tick,0x557426325820,23510,0,0x0,0 +code-creation,LazyCompile,10,23550,0x2ae708212ab2,39,loop test/mjsunit/tools/tickprocessor-test.js:10:14,0x2ae7082124c8,~ +code-source-info,0x2ae708212ab2,3,259,374,C0O279C2O297C4O302C10O302C15O327C22O336C28O317C33O284C36O358C38O372,, +code-creation,LazyCompile,10,23599,0x2ae708212b62,6,add test/mjsunit/tools/tickprocessor-test.js:18:13,0x2ae7082124fc,~ +code-source-info,0x2ae708212b62,3,388,414,C0O399C2O408C5O412,, +tick,0x557426070040,24524,0,0x0,4,0x557425e00550,0x2ae708212ad3,0x2ae70821265c +new,MemoryChunk,0x2ae700080000,262144 +code-creation,LazyCompile,14,25309,0x2ae700084040,668,loop test/mjsunit/tools/tickprocessor-test.js:10:14,0x2ae7082124c8,* +code-source-info,0x2ae700084040,3,259,374,C0O259C54O302C93O372C124O408I0C154O317C168O284C198O302C220O408I0C232O317C245O284C256O372C280O302C324O284C377O302C435O284C569O372,F0O336,S0x2ae7082124fc +tick,0x2ae700084100,25586,0,0x0,0,0x2ae70821265c +tick,0x2ae700084100,26724,0,0x0,0,0x2ae70821265c +tick,0x2ae70008411c,27733,0,0x0,0,0x2ae70821265c +tick,0x2ae70008411c,28797,0,0x0,0,0x2ae70821265c +tick,0x2ae70008412b,29864,0,0x0,0,0x2ae70821265c +tick,0x2ae70008412b,31001,0,0x0,0,0x2ae70821265c +tick,0x2ae70008412f,31996,0,0x0,0,0x2ae70821265c +tick,0x2ae70008412b,33131,0,0x0,0,0x2ae70821265c +tick,0x2ae70008412b,34126,0,0x0,0,0x2ae70821265c +tick,0x2ae70008412b,35268,0,0x0,0,0x2ae70821265c +tick,0x2ae70008412b,36259,0,0x0,0,0x2ae70821265c +tick,0x2ae70008411c,37408,0,0x0,0,0x2ae708212665 +tick,0x2ae700084100,38388,0,0x0,0,0x2ae708212665 +tick,0x2ae70008411c,39531,0,0x0,0,0x2ae708212665 +tick,0x2ae700084103,40516,0,0x0,0,0x2ae708212665 +tick,0x2ae70008412f,41585,0,0x0,0,0x2ae708212665 +tick,0x2ae700084100,42737,0,0x0,0,0x2ae708212665 +tick,0x2ae700084100,43714,0,0x0,0,0x2ae708212665 +tick,0x2ae700084100,44853,0,0x0,0,0x2ae708212665 +tick,0x2ae70008412b,45845,0,0x0,0,0x2ae708212665 +tick,0x2ae70008412b,46998,0,0x0,0,0x2ae708212665 +code-creation,LazyCompile,10,47645,0x2ae708213eb6,146,ics test/mjsunit/tools/tickprocessor-test.js:47:13,0x2ae7082125cc,~ +code-source-info,0x2ae708213eb6,3,793,997,C0O800C4O807C10O827C12O832C14O834C17O842C21O832C26O861C37O888C41O895C45O871C55O868C61O905C72O932C77O942C80O939C84O915C94O912C100O952C111O979C116O986C120O962C130O959C136O851C141O814C145O996,, +code-creation,LazyCompile,10,47688,0x2ae70821400a,5,read_monomorphic test/mjsunit/tools/tickprocessor-test.js:27:26,0x2ae708212530,~ +code-source-info,0x2ae70821400a,3,501,525,C0O518C4O523,, +code-creation,LazyCompile,10,47711,0x2ae70821408e,5,read_polymorphic test/mjsunit/tools/tickprocessor-test.js:31:26,0x2ae708212564,~ +code-source-info,0x2ae70821408e,3,552,576,C0O569C4O574,, +code-creation,LazyCompile,10,47728,0x2ae708214112,5,read_megamorphic test/mjsunit/tools/tickprocessor-test.js:35:26,0x2ae708212598,~ +code-source-info,0x2ae708214112,3,603,627,C0O620C4O625,, +tick,0x5574264143eb,47977,0,0x0,0,0x2ae708214112,0x2ae708213f2e,0x2ae7082126bb +tick,0x557426411f3c,49182,0,0x0,0,0x2ae708213f2e,0x2ae7082126bb +tick,0x5574264143a4,50195,0,0x0,0,0x2ae708214112,0x2ae708213f2e,0x2ae7082126bb +tick,0x55742641eee9,51325,0,0x0,0,0x2ae708213f2e,0x2ae7082126bb +new,MemoryChunk,0x2ae708280000,262144 +new,MemoryChunk,0x2ae7082c0000,262144 +new,MemoryChunk,0x2ae708300000,262144 +new,MemoryChunk,0x2ae708340000,262144 +scavenge,begin,0,48726,1616666746763 +scavenge,end,0,48830,1616666746763 +tick,0x55742640f94f,52325,0,0x0,0,0x2ae708213f2e,0x2ae7082126bb +tick,0x557426327ab9,53466,0,0x0,0,0x2ae7082126bb +tick,0x55742635b744,54451,0,0x0,0,0x2ae708213f06,0x2ae7082126bb +scavenge,begin,0,56381,1616666746767 +new,MemoryChunk,0x2ae708380000,262144 +new,MemoryChunk,0x2ae7083c0000,262144 +tick,0x7f36630ac7b0,55531,0,0x0,1 +scavenge,end,0,57884,1616666746767 +code-creation,LazyCompile,14,55610,0x2ae700084380,3364,ics test/mjsunit/tools/tickprocessor-test.js:47:13,0x2ae7082125cc,* +code-source-info,0x2ae700084380,3,793,997,C0O793C50O800C63O807C83O842C113O832C126O895C139O518I0C184O871C192O868C321O939C328O569I1C361O915C367O912C465O962C469O912C494O959C617O814C640O832C649O861C669O871C736O868C848O942C868O868C894O939C911O569I1C946O915C953O912C1091O986C1099O620I2C1134O962C1141O959C1279O851C1283O814C1298O996C1332O793C1380O518I0C1572O569I1C1861O814C1940O868C2052O569I1C2184O912C2296O620I2C2428O959C2540O814C2624O861C2678O807,F0O871F1O915F2O962,S0x2ae708212530S0x2ae708212564S0x2ae708212598 +tick,0x2ae700084eb5,56707,0,0x0,0,0x2ae7082126bb +scavenge,begin,0,58781,1616666746768 +scavenge,end,0,58814,1616666746768 +code-creation,LazyCompile,14,56912,0x2ae7000851c0,460,read_monomorphic test/mjsunit/tools/tickprocessor-test.js:27:26,0x2ae708212530,* +code-source-info,0x2ae7000851c0,3,501,525,C0O501C50O518C95O523C236O501C284O518C358O523,, +code-creation,LazyCompile,14,57036,0x2ae700085400,460,read_polymorphic test/mjsunit/tools/tickprocessor-test.js:31:26,0x2ae708212564,* +code-source-info,0x2ae700085400,3,552,576,C0O552C50O569C95O574C236O552C284O569C358O574,, +code-creation,LazyCompile,14,57152,0x2ae700085640,460,read_megamorphic test/mjsunit/tools/tickprocessor-test.js:35:26,0x2ae708212598,* +code-source-info,0x2ae700085640,3,603,627,C0O603C50O620C95O625C236O603C284O620C358O625,, +scavenge,begin,0,63111,1616666746769 +tick,0x7f3662edcf0d,57779,0,0x0,1 +scavenge,end,0,63169,1616666746769 +scavenge,begin,0,63713,1616666746770 +scavenge,end,0,63735,1616666746770 +tick,0x2ae70008478f,58825,0,0x0,0,0x2ae7082126bb +scavenge,begin,0,64311,1616666746771 +scavenge,end,0,64334,1616666746771 +tick,0x55742631e6bd,59948,0,0x0,0,0x2ae700084eb8,0x2ae7082126bb +scavenge,begin,0,64955,1616666746772 +scavenge,end,0,64976,1616666746772 +tick,0x2ae70008473d,60957,0,0x0,0,0x2ae7082126bb +scavenge,begin,0,65555,1616666746773 +scavenge,end,0,65575,1616666746773 +scavenge,begin,0,66377,1616666746773 +scavenge,end,0,66408,1616666746773 +tick,0x2ae700084eb8,62021,0,0x0,0,0x2ae7082126bb +scavenge,begin,0,67233,1616666746774 +scavenge,end,0,67263,1616666746774 +tick,0x2ae700084f0a,63087,0,0x0,0,0x2ae7082126bb +scavenge,begin,0,68093,1616666746775 +scavenge,end,0,68123,1616666746775 +scavenge,begin,0,68956,1616666746776 +scavenge,end,0,68985,1616666746776 +tick,0x2ae700084eb8,64229,0,0x0,0,0x2ae7082126bb +scavenge,begin,0,69772,1616666746777 +scavenge,end,0,69792,1616666746777 +tick,0x2ae700084742,65219,0,0x0,0,0x2ae7082126bb +scavenge,begin,0,70664,1616666746777 +scavenge,end,0,70696,1616666746777 +tick,0x2ae700084669,66282,0,0x0,0,0x2ae7082126bb +scavenge,begin,0,71551,1616666746778 +scavenge,end,0,71581,1616666746778 +scavenge,begin,0,72347,1616666746779 +scavenge,end,0,72397,1616666746779 +tick,0x7f36630ad014,67401,0,0x0,1 +scavenge,begin,0,73259,1616666746780 +scavenge,end,0,73289,1616666746780 +tick,0x55742631e6bd,68415,0,0x0,0,0x2ae700084eb8,0x2ae7082126bb +scavenge,begin,0,74023,1616666746781 +scavenge,end,0,74047,1616666746781 +tick,0x55742641cb27,69482,0,0x0,0,0x2ae7082126bb +scavenge,begin,0,74937,1616666746781 +scavenge,end,0,74969,1616666746781 +scavenge,begin,0,75789,1616666746782 +scavenge,end,0,75824,1616666746782 +tick,0x7f3662dcb010,70541,0,0x0,1 +scavenge,begin,0,76652,1616666746783 +scavenge,end,0,76682,1616666746783 +tick,0x2ae700084669,71661,0,0x0,0,0x2ae7082126bb +scavenge,begin,0,77561,1616666746784 +scavenge,end,0,77591,1616666746784 +tick,0x2ae7000847f9,72675,0,0x0,0,0x2ae7082126bb +scavenge,begin,0,78281,1616666746785 +scavenge,end,0,78302,1616666746785 +scavenge,begin,0,79083,1616666746785 +tick,0x557425e83bb4,73736,0,0x0,1 +scavenge,end,0,79178,1616666746785 +scavenge,begin,0,79932,1616666746786 +scavenge,end,0,79963,1616666746786 +tick,0x2ae700084f0a,74870,0,0x0,0,0x2ae7082126bb +scavenge,begin,0,80872,1616666746787 +scavenge,end,0,80902,1616666746787 +tick,0x2ae700084ea8,75869,0,0x0,0,0x2ae7082126bb +scavenge,begin,0,81711,1616666746788 +scavenge,end,0,81741,1616666746788 +scavenge,begin,0,82498,1616666746789 +scavenge,end,0,82518,1616666746789 +tick,0x7f3662def69c,77006,0,0x0,1 +scavenge,begin,0,83480,1616666746789 +scavenge,end,0,83512,1616666746789 +tick,0x55742631ec8c,77999,0,0x0,0,0x2ae7082126bb +scavenge,begin,0,84370,1616666746790 +scavenge,end,0,84400,1616666746790 +tick,0x2ae70008473d,79124,0,0x0,0,0x2ae7082126bb +scavenge,begin,0,85348,1616666746791 +scavenge,end,0,85378,1616666746791 +scavenge,begin,0,86199,1616666746792 +tick,0x557425ba3d08,80129,0,0x0,1 +scavenge,end,0,86285,1616666746792 +scavenge,begin,0,86940,1616666746793 +scavenge,end,0,86962,1616666746793 +tick,0x2ae700084ea5,81195,0,0x0,0,0x2ae7082126bb +scavenge,begin,0,87831,1616666746793 +scavenge,end,0,87862,1616666746793 +tick,0x2ae70008474c,82259,0,0x0,0,0x2ae7082126bb +scavenge,begin,0,88673,1616666746794 +scavenge,end,0,88703,1616666746794 +scavenge,begin,0,89515,1616666746795 +scavenge,end,0,89543,1616666746795 +tick,0x2ae70008482b,83383,0,0x0,0,0x2ae7082126bb +scavenge,begin,0,90477,1616666746796 +scavenge,end,0,90508,1616666746796 +tick,0x55742631e6a7,84391,0,0x0,0,0x2ae700084eb8,0x2ae7082126bb +scavenge,begin,0,91217,1616666746796 +scavenge,end,0,91239,1616666746796 +tick,0x2ae7000846ba,85488,0,0x0,0,0x2ae7082126bb +scavenge,begin,0,92059,1616666746797 +scavenge,end,0,92090,1616666746797 +scavenge,begin,0,92844,1616666746798 +scavenge,end,0,92872,1616666746798 +tick,0x55742631e64a,86554,0,0x0,0,0x2ae700084f07,0x2ae7082126bb +scavenge,begin,0,93718,1616666746799 +scavenge,end,0,93749,1616666746799 +tick,0x2ae700084707,87680,0,0x0,0,0x2ae7082126bb +scavenge,begin,0,94631,1616666746800 +scavenge,end,0,94660,1616666746800 +tick,0x2ae700084732,88685,0,0x0,0,0x2ae7082126bb +scavenge,begin,0,95413,1616666746800 +scavenge,end,0,95435,1616666746800 +scavenge,begin,0,96288,1616666746801 +scavenge,end,0,96318,1616666746801 +tick,0x55742631e64a,89750,0,0x0,0,0x2ae700084e69,0x2ae7082126bb +scavenge,begin,0,97206,1616666746802 +scavenge,end,0,97237,1616666746802 +tick,0x55742631e64a,90879,0,0x0,0,0x2ae700084f07,0x2ae7082126bb +scavenge,begin,0,98130,1616666746803 +scavenge,end,0,98159,1616666746803 +tick,0x55742631e682,91883,0,0x0,0,0x2ae700084eb8,0x2ae7082126bb +scavenge,begin,0,99038,1616666746804 +scavenge,end,0,99072,1616666746804 +scavenge,begin,0,99748,1616666746804 +scavenge,end,0,99770,1616666746804 +tick,0x2ae700084869,92945,0,0x0,0,0x2ae7082126bb +scavenge,begin,0,100637,1616666746805 +scavenge,end,0,100670,1616666746805 +tick,0x2ae700084818,94011,0,0x0,0,0x2ae7082126bb +scavenge,begin,0,101504,1616666746806 +scavenge,end,0,101535,1616666746806 +tick,0x2ae70008475c,95134,0,0x0,0,0x2ae7082126bb +scavenge,begin,0,102488,1616666746807 +scavenge,end,0,102517,1616666746807 +scavenge,begin,0,103359,1616666746808 +scavenge,end,0,103388,1616666746808 +tick,0x55742631e6bd,96142,0,0x0,0,0x2ae700084eb8,0x2ae7082126bb +scavenge,begin,0,104142,1616666746808 +scavenge,end,0,104167,1616666746809 +tick,0x2ae7000846a5,97206,0,0x0,0,0x2ae7082126bb +scavenge,begin,0,104995,1616666746809 +scavenge,end,0,105030,1616666746809 +tick,0x55742631e6c5,98272,0,0x0,0,0x2ae700084f07,0x2ae7082126bb +scavenge,begin,0,105842,1616666746810 +scavenge,end,0,105873,1616666746810 +scavenge,begin,0,106634,1616666746811 +scavenge,end,0,106664,1616666746811 +tick,0x55742631ec81,99398,0,0x0,0,0x2ae700084e69,0x2ae7082126bb +scavenge,begin,0,107567,1616666746812 +scavenge,end,0,107603,1616666746812 +tick,0x2ae700084eaa,100404,0,0x0,0,0x2ae7082126bb +scavenge,begin,0,108352,1616666746812 +scavenge,end,0,108375,1616666746813 +tick,0x55742631e64a,101469,0,0x0,0,0x2ae700084f07,0x2ae7082126bb +scavenge,begin,0,109193,1616666746813 +scavenge,end,0,109225,1616666746813 +scavenge,begin,0,110045,1616666746814 +scavenge,end,0,110073,1616666746814 +tick,0x7f3662e68f6f,102534,0,0x0,1 +scavenge,begin,0,110961,1616666746815 +scavenge,end,0,110993,1616666746815 +tick,0x55742631e64a,103658,0,0x0,0,0x2ae700084f07,0x2ae7082126bb +scavenge,begin,0,111878,1616666746816 +scavenge,end,0,111909,1616666746816 +tick,0x2ae700084ea0,104664,0,0x0,0,0x2ae7082126bb +scavenge,begin,0,112687,1616666746816 +scavenge,end,0,112710,1616666746817 +scavenge,begin,0,113481,1616666746817 +scavenge,end,0,113511,1616666746817 +tick,0x55742631e6bd,105746,0,0x0,0,0x2ae700084f07,0x2ae7082126bb +scavenge,begin,0,114394,1616666746818 +scavenge,end,0,114425,1616666746818 +tick,0x55742631e6b2,106811,0,0x0,0,0x2ae700084f07,0x2ae7082126bb +scavenge,begin,0,115226,1616666746819 +scavenge,end,0,115256,1616666746819 +tick,0x55742631e66a,107937,0,0x0,0,0x2ae700084e69,0x2ae7082126bb +scavenge,begin,0,116208,1616666746820 +scavenge,end,0,116237,1616666746820 +scavenge,begin,0,117003,1616666746820 +scavenge,end,0,117025,1616666746820 +tick,0x55742631e64a,108945,0,0x0,0,0x2ae700084f07,0x2ae7082126bb +scavenge,begin,0,117898,1616666746821 +scavenge,end,0,117932,1616666746821 +tick,0x557426125fa6,110017,0,0x0,4,0x557425e00550,0x2ae7082126c4 +tick,0x55742628821c,111086,0,0x0,4,0x557425e00550,0x2ae7082126c4 +tick,0x5574260f1677,112211,0,0x0,4,0x557425e00550,0x2ae7082126c4 +code-creation,LazyCompile,14,112854,0x2ae700085880,3960, test/mjsunit/tools/tickprocessor-test.js:1:1,0x2ae70821243c,* +code-source-info,0x2ae700085880,3,0,1046,C0O0C107O1017C140O800I0C154O807I0C175O842I0C205O832I0C218O895I0C232O518I1C275O871I0C283O868I0C410O939I0C417O569I2C448O915I0C453O912I0C549O962I0C553O912I0C577O959I0C697O814I0C720O832I0C729O861I0C749O871I0C807O868I0C912O942I0C931O868I0C956O939I0C973O569I2C1006O915I0C1012O912I0C1145O986I0C1153O620I3C1186O962I0C1192O959I0C1325O851I0C1328O814I0C1343O1029C1358O999C1368O1017C1385O1046C1412O1017C1474O518I1C1724O569I2C2108O814I0C2212O868I0C2356O569I2C2517O912I0C2661O620I3C2822O959I0C2966O814I0C3073O999C3211O1017C3237O861I0C3280O807I0,F0O1037F1O871I0F2O915I0F3O962I0,S0x2ae7082125ccS0x2ae708212530S0x2ae708212564S0x2ae708212598 +tick,0x55742631e6a3,113215,0,0x0,0,0x2ae70008664a +scavenge,begin,0,121717,1616666746825 +scavenge,end,0,121749,1616666746825 +scavenge,begin,0,122491,1616666746826 +scavenge,end,0,122525,1616666746826 +tick,0x2ae7000865bd,114277,0,0x0,0 +scavenge,begin,0,123308,1616666746827 +scavenge,end,0,123340,1616666746827 +tick,0x55742631e659,115337,0,0x0,0,0x2ae7000865b3 +scavenge,begin,0,124119,1616666746827 +scavenge,end,0,124153,1616666746827 +tick,0x55742631e6af,116399,0,0x0,0,0x2ae7000865fe +scavenge,begin,0,124931,1616666746828 +scavenge,end,0,124962,1616666746828 +scavenge,begin,0,125693,1616666746829 +scavenge,end,0,125724,1616666746829 +tick,0x2ae700085c7d,117466,0,0x0,0 +scavenge,begin,0,126578,1616666746830 +scavenge,end,0,126609,1616666746830 +tick,0x2ae700085c10,118531,0,0x0,0 +scavenge,begin,0,127452,1616666746830 +scavenge,end,0,127482,1616666746830 +scavenge,begin,0,128266,1616666746831 +scavenge,end,0,128294,1616666746831 +tick,0x55742631e65b,119665,0,0x0,0,0x2ae7000865b3 +scavenge,begin,0,129215,1616666746832 +scavenge,end,0,129245,1616666746832 +tick,0x2ae700086647,120654,0,0x0,0 +scavenge,begin,0,129991,1616666746833 +scavenge,end,0,130015,1616666746833 +tick,0x2ae700085ba3,121718,0,0x0,0 +scavenge,begin,0,130856,1616666746833 +scavenge,end,0,130887,1616666746833 +scavenge,begin,0,131621,1616666746834 +scavenge,end,0,131650,1616666746834 +tick,0x55742631e6a7,122847,0,0x0,0,0x2ae7000865fe +scavenge,begin,0,132566,1616666746835 +scavenge,end,0,132597,1616666746835 +tick,0x2ae700086647,123845,0,0x0,0 +scavenge,begin,0,133393,1616666746836 +scavenge,end,0,133422,1616666746836 +scavenge,begin,0,134182,1616666746836 +scavenge,end,0,134206,1616666746836 +tick,0x2ae700085c6e,124968,0,0x0,0 +scavenge,begin,0,134896,1616666746837 +scavenge,end,0,134921,1616666746837 +tick,0x55742631ec8b,125973,0,0x0,0,0x2ae7000865b3 +scavenge,begin,0,134921,1616666746838 +scavenge,end,0,134921,1616666746838 +scavenge,begin,0,134921,1616666746839 +tick,0x55742631e6af,127115,0,0x0,0,0x2ae7000865b3 +scavenge,end,0,134921,1616666746839 +scavenge,begin,0,134921,1616666746839 +scavenge,end,0,134921,1616666746840 +tick,0x2ae7000865d9,128098,0,0x0,0 +scavenge,begin,0,135138,1616666746840 +scavenge,end,0,135162,1616666746840 +tick,0x2ae700085d35,129222,0,0x0,0 +scavenge,begin,0,135837,1616666746841 +scavenge,end,0,135861,1616666746841 +scavenge,begin,0,136658,1616666746842 +scavenge,end,0,136688,1616666746842 +tick,0x55742631e64e,130225,0,0x0,0,0x2ae7000865fe +scavenge,begin,0,137534,1616666746843 +scavenge,end,0,137565,1616666746843 +tick,0x55742631e6bd,131288,0,0x0,0,0x2ae7000865b3 +scavenge,begin,0,138394,1616666746843 +scavenge,end,0,138423,1616666746843 +tick,0x2ae700085cb1,132413,0,0x0,0 +scavenge,begin,0,139336,1616666746844 +scavenge,end,0,139366,1616666746844 +scavenge,begin,0,140049,1616666746845 +scavenge,end,0,140071,1616666746845 +tick,0x2ae700085ce4,133413,0,0x0,0 +scavenge,begin,0,140912,1616666746846 +scavenge,end,0,140944,1616666746846 +tick,0x2ae700085c6e,134478,0,0x0,0 +scavenge,begin,0,141722,1616666746846 +scavenge,end,0,141753,1616666746846 +scavenge,begin,0,142550,1616666746847 +scavenge,end,0,142580,1616666746847 +tick,0x7f3662e68f6f,135552,0,0x0,1 +scavenge,begin,0,143443,1616666746848 +scavenge,end,0,143473,1616666746848 +tick,0x55742631e64a,136602,0,0x0,0,0x2ae7000865fe +scavenge,begin,0,144262,1616666746849 +scavenge,end,0,144286,1616666746849 +tick,0x2ae700085be8,137625,0,0x0,0 +scavenge,begin,0,145069,1616666746849 +scavenge,end,0,145098,1616666746849 +scavenge,begin,0,145826,1616666746850 +scavenge,end,0,145855,1616666746850 +tick,0x2ae700085dad,138789,0,0x0,0 +scavenge,begin,0,146747,1616666746851 +scavenge,end,0,146777,1616666746851 +tick,0x55742631ec8b,139805,0,0x0,0,0x2ae7000865b3 +scavenge,begin,0,147627,1616666746852 +scavenge,end,0,147657,1616666746852 +scavenge,begin,0,148388,1616666746852 +tick,0x557425b2293f,140831,0,0x0,1 +scavenge,end,0,148463,1616666746852 +scavenge,begin,0,149054,1616666746853 +scavenge,end,0,149054,1616666746853 +tick,0x55742631e64a,141878,0,0x0,0,0x2ae70008664a +scavenge,begin,0,149054,1616666746854 +scavenge,end,0,149054,1616666746854 +tick,0x2ae700085d31,143006,0,0x0,0 +scavenge,begin,0,149054,1616666746855 +scavenge,end,0,149054,1616666746855 +scavenge,begin,0,149054,1616666746855 +scavenge,end,0,149054,1616666746856 +tick,0x2ae700085ce4,144004,0,0x0,0 +scavenge,begin,0,149054,1616666746856 +scavenge,end,0,149054,1616666746856 +tick,0x55742631e682,145069,0,0x0,0,0x2ae70008664a +scavenge,begin,0,149235,1616666746857 +scavenge,end,0,149258,1616666746857 +tick,0x2ae700086583,146132,0,0x0,0 +scavenge,begin,0,150063,1616666746858 +scavenge,end,0,150093,1616666746858 +scavenge,begin,0,150827,1616666746859 +scavenge,end,0,150855,1616666746859 +tick,0x2ae700085cf9,147196,0,0x0,0 +scavenge,begin,0,151685,1616666746859 +scavenge,end,0,151715,1616666746859 +tick,0x2ae7000865d9,148325,0,0x0,0 +scavenge,begin,0,152648,1616666746860 +scavenge,end,0,152676,1616666746860 +scavenge,begin,0,153427,1616666746861 +scavenge,end,0,153450,1616666746861 +tick,0x2ae700085bab,149320,0,0x0,0 +scavenge,begin,0,154237,1616666746862 +scavenge,end,0,154270,1616666746862 +tick,0x2ae700085bd3,150383,0,0x0,0 +scavenge,begin,0,155045,1616666746862 +scavenge,end,0,155075,1616666746862 +scavenge,begin,0,155826,1616666746863 +scavenge,end,0,155855,1616666746863 +tick,0x2ae700085c23,151525,0,0x0,0 +scavenge,begin,0,156704,1616666746864 +scavenge,end,0,156733,1616666746864 +tick,0x2ae700085d31,152509,0,0x0,0 +scavenge,begin,0,157508,1616666746865 +scavenge,end,0,157531,1616666746865 +tick,0x2ae7000865b3,153574,0,0x0,0 +scavenge,begin,0,158316,1616666746865 +scavenge,end,0,158345,1616666746865 +scavenge,begin,0,159140,1616666746866 +scavenge,end,0,159167,1616666746866 +tick,0x55742631e66d,154641,0,0x0,0,0x2ae7000865fe +scavenge,begin,0,160010,1616666746867 +scavenge,end,0,160040,1616666746867 +tick,0x55742631e682,155772,0,0x0,0,0x2ae7000865b3 +scavenge,begin,0,160970,1616666746868 +scavenge,end,0,161000,1616666746868 +tick,0x55742631e6a3,156762,0,0x0,0,0x2ae70008664a +scavenge,begin,0,161783,1616666746868 +scavenge,end,0,161806,1616666746868 +scavenge,begin,0,162392,1616666746869 +scavenge,end,0,162416,1616666746869 +tick,0x2ae700085bfc,157825,0,0x0,0 +scavenge,begin,0,163252,1616666746870 +scavenge,end,0,163284,1616666746870 +tick,0x2ae70008658b,158949,0,0x0,0 +scavenge,begin,0,164142,1616666746871 +scavenge,end,0,164171,1616666746871 +scavenge,begin,0,164957,1616666746871 +scavenge,end,0,164986,1616666746871 +tick,0x2ae700085c19,159951,0,0x0,0 +scavenge,begin,0,165822,1616666746872 +scavenge,end,0,165851,1616666746872 +tick,0x55742631ec8b,161073,0,0x0,0,0x2ae7000865b3 +scavenge,begin,0,166705,1616666746873 +scavenge,end,0,166729,1616666746873 +tick,0x2ae700085d75,162082,0,0x0,0 +scavenge,begin,0,167514,1616666746874 +scavenge,end,0,167544,1616666746874 +scavenge,begin,0,168272,1616666746874 +scavenge,end,0,168301,1616666746875 +tick,0x2ae700085c23,163210,0,0x0,0 +scavenge,begin,0,169159,1616666746875 +scavenge,end,0,169188,1616666746875 +tick,0x557425afe8dc,164206,0,0x0,0,0x557425e19180,0x2ae7000863c8 +scavenge,begin,0,169969,1616666746876 +scavenge,end,0,169999,1616666746876 +scavenge,begin,0,170731,1616666746877 +scavenge,end,0,170761,1616666746877 +tick,0x55742631e6bd,165333,0,0x0,0,0x2ae7000865b3 +scavenge,begin,0,171623,1616666746878 +scavenge,end,0,171656,1616666746878 +tick,0x2ae7000865e7,166331,0,0x0,0 +scavenge,begin,0,172489,1616666746878 +scavenge,end,0,172518,1616666746878 +scavenge,begin,0,173324,1616666746879 +scavenge,end,0,173354,1616666746879 +tick,0x2ae7000865a2,167480,0,0x0,0 +scavenge,begin,0,174218,1616666746880 +scavenge,end,0,174247,1616666746880 +tick,0x2ae700085d28,168458,0,0x0,0 +scavenge,begin,0,175049,1616666746881 +scavenge,end,0,175073,1616666746881 +tick,0x55742631e6a3,169583,0,0x0,0,0x2ae70008664a +scavenge,begin,0,175073,1616666746881 +scavenge,end,0,175073,1616666746881 +scavenge,begin,0,175073,1616666746882 +scavenge,end,0,175073,1616666746882 +tick,0x2ae700085c17,170583,0,0x0,0 +scavenge,begin,0,175073,1616666746883 +scavenge,end,0,175073,1616666746883 +tick,0x55742631e6b2,171711,0,0x0,0,0x2ae7000865b3 +scavenge,begin,0,175387,1616666746884 +scavenge,end,0,175410,1616666746884 +tick,0x55742631e6bd,172708,0,0x0,0,0x2ae70008664a +scavenge,begin,0,176090,1616666746884 +scavenge,end,0,176115,1616666746884 +scavenge,begin,0,176745,1616666746885 +scavenge,end,0,176769,1616666746885 +tick,0x2ae700085d87,173770,0,0x0,0 +scavenge,begin,0,177553,1616666746886 +scavenge,end,0,177585,1616666746886 +tick,0x2ae700085b50,174893,0,0x0,0 +scavenge,begin,0,178438,1616666746887 +scavenge,end,0,178469,1616666746887 +scavenge,begin,0,179202,1616666746887 +scavenge,end,0,179232,1616666746887 +tick,0x2ae700085b60,175898,0,0x0,0 +scavenge,begin,0,180008,1616666746888 +scavenge,end,0,180039,1616666746888 +tick,0x2ae700085bfc,177024,0,0x0,0 +scavenge,begin,0,180875,1616666746889 +scavenge,end,0,180899,1616666746889 +tick,0x55742631ec8c,178023,0,0x0,0 +scavenge,begin,0,181679,1616666746890 +scavenge,end,0,181709,1616666746890 +scavenge,begin,0,182496,1616666746890 +scavenge,end,0,182524,1616666746890 +tick,0x2ae700085c87,179084,0,0x0,0 +scavenge,begin,0,183353,1616666746891 +scavenge,end,0,183383,1616666746891 +tick,0x2ae700085c78,180146,0,0x0,0 +scavenge,begin,0,184214,1616666746892 +scavenge,end,0,184242,1616666746892 +scavenge,begin,0,185011,1616666746893 +scavenge,end,0,185035,1616666746893 +tick,0x55742631e655,181212,0,0x0,0,0x2ae7000865b3 +scavenge,begin,0,185824,1616666746893 +scavenge,end,0,185855,1616666746893 +tick,0x55742631e69f,182340,0,0x0,0,0x2ae7000865fe +scavenge,begin,0,186773,1616666746894 +scavenge,end,0,186803,1616666746894 +tick,0x55742631e6bd,183339,0,0x0,0,0x2ae7000865b3 +scavenge,begin,0,187589,1616666746895 +scavenge,end,0,187618,1616666746895 +scavenge,begin,0,188404,1616666746896 +scavenge,end,0,188434,1616666746896 +tick,0x55742631e64e,184486,0,0x0,0,0x2ae7000865fe +scavenge,begin,0,189316,1616666746897 +scavenge,end,0,189339,1616666746897 +tick,0x2ae700085c7d,185465,0,0x0,0 +scavenge,begin,0,190190,1616666746897 +scavenge,end,0,190221,1616666746897 +scavenge,begin,0,190952,1616666746898 +scavenge,end,0,190980,1616666746898 +tick,0x2ae700085b60,186538,0,0x0,0 +scavenge,begin,0,191767,1616666746899 +scavenge,end,0,191798,1616666746899 +tick,0x55742631e644,187600,0,0x0,0,0x2ae70008664a +scavenge,begin,0,192589,1616666746900 +scavenge,end,0,192618,1616666746900 +tick,0x2ae700085c23,188654,0,0x0,0 +scavenge,begin,0,193388,1616666746900 +scavenge,end,0,193412,1616666746900 +scavenge,begin,0,194008,1616666746901 +scavenge,end,0,194032,1616666746901 +tick,0x2ae700086616,189716,0,0x0,0 +scavenge,begin,0,194819,1616666746902 +scavenge,end,0,194850,1616666746902 +tick,0x55742631e6c5,190847,0,0x0,0,0x2ae70008664a +scavenge,begin,0,195774,1616666746903 +scavenge,end,0,195803,1616666746903 +scavenge,begin,0,196604,1616666746903 +scavenge,end,0,196634,1616666746903 +tick,0x2ae700085d57,191844,0,0x0,0 +scavenge,begin,0,197477,1616666746904 +scavenge,end,0,197506,1616666746904 +tick,0x55742631e692,192966,0,0x0,0,0x2ae70008664a +scavenge,begin,0,198351,1616666746905 +scavenge,end,0,198375,1616666746905 +tick,0x2ae700085c7d,193971,0,0x0,0 +scavenge,begin,0,199157,1616666746906 +scavenge,end,0,199186,1616666746906 +scavenge,begin,0,199976,1616666746906 +scavenge,end,0,200005,1616666746906 +tick,0x2ae700085ccc,195098,0,0x0,0 +scavenge,begin,0,200873,1616666746907 +scavenge,end,0,200902,1616666746907 +tick,0x2ae700085d5e,196154,0,0x0,0 +scavenge,begin,0,201792,1616666746908 +scavenge,end,0,201821,1616666746908 +scavenge,begin,0,202579,1616666746909 +scavenge,end,0,202602,1616666746909 +tick,0x2ae700085cd3,197284,0,0x0,0 +scavenge,begin,0,203520,1616666746909 +scavenge,end,0,203553,1616666746909 +tick,0x55742631e67e,198288,0,0x0,0,0x2ae7000865fe +scavenge,begin,0,204332,1616666746910 +scavenge,end,0,204362,1616666746910 +scavenge,begin,0,205093,1616666746911 +scavenge,end,0,205142,1616666746911 +tick,0x557425ba3ce1,199417,0,0x0,1 +scavenge,begin,0,205989,1616666746912 +scavenge,end,0,206019,1616666746912 +tick,0x55742631ec8b,200419,0,0x0,0,0x2ae7000865b3 +scavenge,begin,0,206774,1616666746912 +scavenge,end,0,206798,1616666746912 +tick,0x2ae7000858f9,201487,0,0x0,0 +scavenge,begin,0,207583,1616666746913 +scavenge,end,0,207614,1616666746913 +scavenge,begin,0,208344,1616666746914 +scavenge,end,0,208372,1616666746914 +tick,0x2ae700085c7d,202549,0,0x0,0 +scavenge,begin,0,209205,1616666746915 +scavenge,end,0,209234,1616666746915 +tick,0x55742631e692,203670,0,0x0,0,0x2ae70008664a +scavenge,begin,0,210141,1616666746915 +scavenge,end,0,210171,1616666746916 +scavenge,begin,0,210901,1616666746916 +scavenge,end,0,210924,1616666746916 +tick,0x557425b35cd0,204677,0,0x0,1 +scavenge,begin,0,211609,1616666746917 +scavenge,end,0,211636,1616666746917 +tick,0x2ae7000865a6,205741,0,0x0,0 +scavenge,begin,0,212434,1616666746918 +scavenge,end,0,212464,1616666746918 +tick,0x2ae700085be8,206870,0,0x0,0 +scavenge,begin,0,213378,1616666746919 +scavenge,end,0,213407,1616666746919 +scavenge,begin,0,214193,1616666746919 +scavenge,end,0,214222,1616666746919 +tick,0x55742631e6bd,207873,0,0x0,0,0x2ae7000865fe +scavenge,begin,0,215057,1616666746920 +scavenge,end,0,215086,1616666746920 +tick,0x2ae700085cfe,208996,0,0x0,0 +scavenge,begin,0,215945,1616666746921 +scavenge,end,0,215969,1616666746921 +scavenge,begin,0,216767,1616666746922 +tick,0x7f3662e043a0,210003,0,0x0,1 +scavenge,end,0,216854,1616666746922 +scavenge,begin,0,217645,1616666746922 +scavenge,end,0,217674,1616666746922 +tick,0x2ae700085cf9,211067,0,0x0,0 +scavenge,begin,0,218452,1616666746923 +scavenge,end,0,218481,1616666746923 +tick,0x2ae700085c7d,212135,0,0x0,0 +scavenge,begin,0,219264,1616666746924 +scavenge,end,0,219294,1616666746924 +scavenge,begin,0,220026,1616666746925 +scavenge,end,0,220053,1616666746925 +tick,0x55742631e663,213264,0,0x0,0,0x2ae7000865b3 +scavenge,begin,0,220920,1616666746925 +scavenge,end,0,220951,1616666746925 +tick,0x2ae700085c7d,214264,0,0x0,0 +scavenge,begin,0,221730,1616666746926 +scavenge,end,0,221760,1616666746926 +scavenge,begin,0,222507,1616666746927 +scavenge,end,0,222556,1616666746927 +tick,0x7f3662e043a0,215432,0,0x0,1 +scavenge,begin,0,223499,1616666746928 +scavenge,end,0,223534,1616666746928 +tick,0x55742631e673,216393,0,0x0,0,0x2ae7000865fe +scavenge,begin,0,224287,1616666746928 +scavenge,end,0,224311,1616666746928 +tick,0x2ae700086602,217460,0,0x0,0 +scavenge,begin,0,225038,1616666746929 +scavenge,end,0,225074,1616666746929 +scavenge,begin,0,225826,1616666746930 +scavenge,end,0,225854,1616666746930 +tick,0x2ae700085d91,218520,0,0x0,0 +scavenge,begin,0,226647,1616666746931 +scavenge,end,0,226676,1616666746931 +tick,0x2ae700085c23,219643,0,0x0,0 +scavenge,begin,0,227585,1616666746931 +scavenge,end,0,227616,1616666746932 +scavenge,begin,0,228403,1616666746932 +tick,0x7f3662e68f6f,220652,0,0x0,1 +scavenge,end,0,228491,1616666746932 +scavenge,begin,0,229220,1616666746933 +scavenge,end,0,229244,1616666746933 +tick,0x55742631e6bd,221715,0,0x0,0,0x2ae70008664a +scavenge,begin,0,230085,1616666746934 +scavenge,end,0,230115,1616666746934 +tick,0x55742631e69f,222883,0,0x0,0,0x2ae7000865fe +scavenge,begin,0,230990,1616666746935 +scavenge,end,0,231020,1616666746935 +scavenge,begin,0,231753,1616666746935 +scavenge,end,0,231781,1616666746935 +tick,0x55742631e64a,223886,0,0x0,0,0x2ae70008664a +scavenge,begin,0,232563,1616666746936 +scavenge,end,0,232592,1616666746936 +tick,0x2ae70008659d,224952,0,0x0,0 +scavenge,begin,0,233364,1616666746937 +scavenge,end,0,233388,1616666746937 +scavenge,begin,0,234127,1616666746938 +scavenge,end,0,234157,1616666746938 +tick,0x55742631ec8c,226015,0,0x0,0 +scavenge,begin,0,234936,1616666746938 +scavenge,end,0,234967,1616666746938 +tick,0x2ae70008662b,227138,0,0x0,0 +scavenge,begin,0,235826,1616666746939 +scavenge,end,0,235856,1616666746939 +tick,0x2ae700085d87,228203,0,0x0,0 +scavenge,begin,0,236773,1616666746940 +scavenge,end,0,236803,1616666746940 +scavenge,begin,0,237534,1616666746941 +scavenge,end,0,237558,1616666746941 +tick,0x55742631e6bd,229214,0,0x0,0,0x2ae7000865fe +scavenge,begin,0,238417,1616666746941 +scavenge,end,0,238448,1616666746941 +tick,0x55742631e6af,230275,0,0x0,0,0x2ae7000865b3 +scavenge,begin,0,239279,1616666746942 +scavenge,end,0,239309,1616666746942 +scavenge,begin,0,240105,1616666746943 +scavenge,end,0,240154,1616666746943 +tick,0x7f3662e01164,231352,0,0x0,1 +scavenge,begin,0,240978,1616666746944 +scavenge,end,0,241008,1616666746944 +tick,0x2ae7000865f0,232487,0,0x0,0 +scavenge,begin,0,241896,1616666746944 +scavenge,end,0,241922,1616666746944 +tick,0x2ae7000858f9,233474,0,0x0,0 +scavenge,begin,0,242632,1616666746945 +scavenge,end,0,242632,1616666746945 +scavenge,begin,0,242632,1616666746946 +scavenge,end,0,242632,1616666746946 +tick,0x55742631e6bd,234536,0,0x0,0,0x2ae7000865fe +scavenge,begin,0,242632,1616666746947 +scavenge,end,0,242632,1616666746947 +tick,0x55742631e659,235604,0,0x0,0,0x2ae70008664a +scavenge,begin,0,242632,1616666746947 +scavenge,end,0,242632,1616666746948 +scavenge,begin,0,242632,1616666746948 +scavenge,end,0,242632,1616666746948 +tick,0x7f3662ed9ac0,236727,0,0x0,1 +scavenge,begin,0,242658,1616666746949 +scavenge,end,0,242683,1616666746949 +tick,0x55742631ec8c,237731,0,0x0,0 +scavenge,begin,0,243472,1616666746950 +scavenge,end,0,243502,1616666746950 +tick,0x2ae700085c36,238862,0,0x0,0 +scavenge,begin,0,244362,1616666746951 +scavenge,end,0,244391,1616666746951 +scavenge,begin,0,245132,1616666746951 +scavenge,end,0,245160,1616666746951 +tick,0x2ae7000865a6,239861,0,0x0,0 +scavenge,begin,0,245996,1616666746952 +scavenge,end,0,246027,1616666746952 +tick,0x55742631e6b2,240923,0,0x0,0,0x2ae70008664a +scavenge,begin,0,246802,1616666746953 +scavenge,end,0,246828,1616666746953 +scavenge,begin,0,247616,1616666746954 +scavenge,end,0,247647,1616666746954 +tick,0x7f3662e68f6f,241990,0,0x0,1 +scavenge,begin,0,248426,1616666746954 +scavenge,end,0,248459,1616666746954 +tick,0x55742631e67e,243120,0,0x0,0,0x2ae7000865b3 +scavenge,begin,0,249337,1616666746955 +scavenge,end,0,249367,1616666746955 +tick,0x55742631e659,244122,0,0x0,0,0x2ae7000865fe +scavenge,begin,0,250204,1616666746956 +scavenge,end,0,250234,1616666746956 +scavenge,begin,0,251007,1616666746957 +scavenge,end,0,251033,1616666746957 +tick,0x55742631e64a,245248,0,0x0,0,0x2ae70008664a +scavenge,begin,0,251952,1616666746957 +scavenge,end,0,251982,1616666746957 +tick,0x2ae700085c7d,246251,0,0x0,0 +scavenge,begin,0,252822,1616666746958 +scavenge,end,0,252851,1616666746958 +scavenge,begin,0,253590,1616666746959 +scavenge,end,0,253618,1616666746959 +tick,0x55742631e6bd,247380,0,0x0,0,0x2ae70008664a +scavenge,begin,0,254475,1616666746960 +scavenge,end,0,254505,1616666746960 +tick,0x2ae700085cb1,248383,0,0x0,0 +scavenge,begin,0,255263,1616666746960 +scavenge,end,0,255287,1616666746960 +tick,0x55742631e692,249449,0,0x0,0,0x2ae7000865fe +scavenge,begin,0,255947,1616666746961 +scavenge,end,0,255972,1616666746961 +scavenge,begin,0,256716,1616666746962 +scavenge,end,0,256745,1616666746962 +tick,0x2ae700085c10,250511,0,0x0,0 +scavenge,begin,0,257517,1616666746963 +scavenge,end,0,257546,1616666746963 +tick,0x2ae700085ba3,251648,0,0x0,0 +scavenge,begin,0,258470,1616666746963 +scavenge,end,0,258499,1616666746963 +scavenge,begin,0,259283,1616666746964 +scavenge,end,0,259313,1616666746964 +tick,0x55742631e688,252640,0,0x0,0,0x2ae7000865b3 +scavenge,begin,0,260097,1616666746965 +scavenge,end,0,260124,1616666746965 +tick,0x55742631e688,253770,0,0x0,0,0x2ae7000865b3 +scavenge,begin,0,260993,1616666746966 +scavenge,end,0,261023,1616666746966 +tick,0x2ae70008656f,254771,0,0x0,0 +scavenge,begin,0,261815,1616666746966 +scavenge,end,0,261844,1616666746967 +scavenge,begin,0,262632,1616666746967 +scavenge,end,0,262661,1616666746967 +tick,0x557425bb4dbe,255895,0,0x0,0,0x557425e19180,0x2ae7000863c8 +scavenge,begin,0,263520,1616666746968 +scavenge,end,0,263549,1616666746968 +tick,0x55742631e6b2,256903,0,0x0,0,0x2ae7000865fe +scavenge,begin,0,264362,1616666746969 +scavenge,end,0,264388,1616666746969 +scavenge,begin,0,265182,1616666746970 +scavenge,end,0,265212,1616666746970 +tick,0x2ae700085ba3,257966,0,0x0,0 +scavenge,begin,0,265988,1616666746970 +scavenge,end,0,266019,1616666746970 +tick,0x2ae700085d1b,259093,0,0x0,0 +scavenge,begin,0,266945,1616666746971 +scavenge,end,0,266975,1616666746971 +tick,0x55742631e6bd,260098,0,0x0,0,0x2ae7000865fe +scavenge,begin,0,267756,1616666746972 +scavenge,end,0,267785,1616666746972 +scavenge,begin,0,268520,1616666746973 +scavenge,end,0,268543,1616666746973 +tick,0x2ae7000865d1,261220,0,0x0,0 +scavenge,begin,0,269399,1616666746973 +scavenge,end,0,269429,1616666746973 +tick,0x2ae700085be8,262230,0,0x0,0 +scavenge,begin,0,270212,1616666746974 +scavenge,end,0,270245,1616666746974 +scavenge,begin,0,270979,1616666746975 +scavenge,end,0,271008,1616666746975 +tick,0x2ae700085baf,263364,0,0x0,0 +scavenge,begin,0,271883,1616666746976 +scavenge,end,0,271915,1616666746976 +tick,0x2ae700085d65,264394,0,0x0,0 +scavenge,begin,0,272742,1616666746976 +scavenge,end,0,272768,1616666746976 +tick,0x2ae700086599,265453,0,0x0,0 +scavenge,begin,0,273430,1616666746977 +scavenge,end,0,273457,1616666746977 +scavenge,begin,0,274264,1616666746978 +scavenge,end,0,274295,1616666746978 +tick,0x55742631e6af,266516,0,0x0,0,0x2ae7000865b3 +scavenge,begin,0,275085,1616666746979 +scavenge,end,0,275115,1616666746979 +tick,0x2ae700085d31,267656,0,0x0,0 +scavenge,begin,0,276035,1616666746979 +scavenge,end,0,276065,1616666746979 +scavenge,begin,0,276849,1616666746980 +scavenge,end,0,276878,1616666746980 +tick,0x55742631e6a7,268648,0,0x0,0,0x2ae7000865fe +scavenge,begin,0,277709,1616666746981 +scavenge,end,0,277741,1616666746981 +tick,0x2ae700085dad,269713,0,0x0,0 +scavenge,begin,0,278607,1616666746982 +scavenge,end,0,278638,1616666746982 +tick,0x55742631e6c3,270853,0,0x0,0,0x2ae7000865fe +scavenge,begin,0,279404,1616666746983 +scavenge,end,0,279564,1616666746983 +scavenge,begin,0,280352,1616666746983 +scavenge,end,0,280382,1616666746983 +tick,0x2ae70008662b,271846,0,0x0,0 +scavenge,begin,0,281161,1616666746984 +scavenge,end,0,281191,1616666746984 +tick,0x55742631e692,272920,0,0x0,0,0x2ae70008664a +scavenge,begin,0,281977,1616666746985 +scavenge,end,0,282006,1616666746985 +scavenge,begin,0,282743,1616666746986 +scavenge,end,0,282772,1616666746986 +tick,0x2ae7000865b5,273992,0,0x0,0 +scavenge,begin,0,283564,1616666746986 +scavenge,end,0,283594,1616666746986 +tick,0x2ae700085c87,275113,0,0x0,0 +scavenge,begin,0,284441,1616666746987 +scavenge,end,0,284470,1616666746987 +tick,0x2ae7000865e3,276125,0,0x0,0 +scavenge,begin,0,285258,1616666746988 +scavenge,end,0,285292,1616666746988 +scavenge,begin,0,286076,1616666746989 +scavenge,end,0,286106,1616666746989 +tick,0x2ae7000865f4,277187,0,0x0,0 +scavenge,begin,0,286894,1616666746989 +scavenge,end,0,286925,1616666746989 +tick,0x2ae700085c97,278251,0,0x0,0 +scavenge,begin,0,287712,1616666746990 +scavenge,end,0,287741,1616666746990 +scavenge,begin,0,288489,1616666746991 +scavenge,end,0,288518,1616666746991 +tick,0x55742631ec81,279386,0,0x0,0,0x2ae7000865fe +scavenge,begin,0,289436,1616666746992 +scavenge,end,0,289467,1616666746992 +tick,0x55742631e6a3,280383,0,0x0,0,0x2ae70008664a +scavenge,begin,0,290299,1616666746992 +scavenge,end,0,290330,1616666746992 +tick,0x55742631e6bd,281448,0,0x0,0,0x2ae70008664a +scavenge,begin,0,291168,1616666746993 +scavenge,end,0,291197,1616666746993 +scavenge,begin,0,291955,1616666746994 +scavenge,end,0,291986,1616666746994 +tick,0x55742631e64a,282512,0,0x0,0,0x2ae70008664a +scavenge,begin,0,292762,1616666746995 +scavenge,end,0,292792,1616666746995 +tick,0x55742631e6bd,283636,0,0x0,0,0x2ae7000865fe +scavenge,begin,0,293698,1616666746995 +scavenge,end,0,293727,1616666746995 +scavenge,begin,0,294460,1616666746996 +scavenge,end,0,294489,1616666746996 +tick,0x55742631e659,284645,0,0x0,0,0x2ae70008664a +scavenge,begin,0,295267,1616666746997 +scavenge,end,0,295297,1616666746997 +tick,0x55742631ec8c,285708,0,0x0,0 +scavenge,begin,0,296087,1616666746998 +scavenge,end,0,296120,1616666746998 +tick,0x2ae700085d1b,286777,0,0x0,0 +scavenge,begin,0,296916,1616666746999 +scavenge,end,0,296945,1616666746999 +scavenge,begin,0,297682,1616666746999 +scavenge,end,0,297711,1616666746999 +tick,0x55742631e659,287902,0,0x0,0,0x2ae70008664a +scavenge,begin,0,298631,1616666747000 +scavenge,end,0,298663,1616666747000 +tick,0x55742631e644,288906,0,0x0,0,0x2ae70008664a +scavenge,begin,0,299448,1616666747001 +scavenge,end,0,299480,1616666747001 +tick,0x55742631e6bd,289974,0,0x0,0,0x2ae70008664a +scavenge,begin,0,300286,1616666747002 +scavenge,end,0,300319,1616666747002 +scavenge,begin,0,301060,1616666747002 +scavenge,end,0,301091,1616666747002 +tick,0x2ae700085c7d,291110,0,0x0,0 +scavenge,begin,0,301963,1616666747003 +scavenge,end,0,301992,1616666747003 +tick,0x2ae700086597,292104,0,0x0,0 +scavenge,begin,0,302825,1616666747004 +scavenge,end,0,302854,1616666747004 +scavenge,begin,0,303638,1616666747005 +scavenge,end,0,303666,1616666747005 +tick,0x2ae700085b93,293166,0,0x0,0 +scavenge,begin,0,304499,1616666747005 +scavenge,end,0,304531,1616666747005 +tick,0x2ae700085c23,294232,0,0x0,0 +scavenge,begin,0,305318,1616666747006 +scavenge,end,0,305354,1616666747006 +scavenge,begin,0,306116,1616666747007 +scavenge,end,0,306145,1616666747007 +tick,0x2ae700085c7d,295390,0,0x0,0 +scavenge,begin,0,307070,1616666747008 +scavenge,end,0,307099,1616666747008 +tick,0x2ae700086599,296361,0,0x0,0 +scavenge,begin,0,307875,1616666747008 +scavenge,end,0,307904,1616666747008 +tick,0x55742631e64e,297425,0,0x0,0,0x2ae7000865b3 +scavenge,begin,0,308683,1616666747009 +scavenge,end,0,308720,1616666747009 +scavenge,begin,0,309468,1616666747010 +scavenge,end,0,309498,1616666747010 +tick,0x2ae700085c7d,298491,0,0x0,0 +scavenge,begin,0,310277,1616666747011 +scavenge,end,0,310308,1616666747011 +tick,0x55742631e6c5,299557,0,0x0,0,0x2ae70008664a +scavenge,begin,0,311153,1616666747012 +scavenge,end,0,311185,1616666747012 +tick,0x55742631ec8c,300625,0,0x0,0 +scavenge,begin,0,311976,1616666747012 +scavenge,end,0,312006,1616666747012 +scavenge,begin,0,312803,1616666747013 +scavenge,end,0,312835,1616666747013 +tick,0x55742631e6b2,301687,0,0x0,0,0x2ae70008664a +scavenge,begin,0,313625,1616666747014 +scavenge,end,0,313657,1616666747014 +tick,0x2ae700085d65,302754,0,0x0,0 +scavenge,begin,0,314436,1616666747015 +scavenge,end,0,314466,1616666747015 +scavenge,begin,0,315257,1616666747015 +scavenge,end,0,315285,1616666747015 +tick,0x55742631e6a3,303821,0,0x0,0,0x2ae7000865fe +scavenge,begin,0,316113,1616666747016 +scavenge,end,0,316143,1616666747016 +tick,0x55742631e644,304884,0,0x0,0,0x2ae7000865b3 +scavenge,begin,0,316988,1616666747017 +scavenge,end,0,317017,1616666747017 +tick,0x2ae700085d80,305949,0,0x0,0 +scavenge,begin,0,317851,1616666747018 +scavenge,end,0,317885,1616666747018 +scavenge,begin,0,318625,1616666747018 +scavenge,end,0,318653,1616666747018 +tick,0x2ae700086591,307074,0,0x0,0 +scavenge,begin,0,319558,1616666747019 +scavenge,end,0,319588,1616666747019 +tick,0x55742631e66a,308082,0,0x0,0,0x2ae7000865fe +scavenge,begin,0,320425,1616666747020 +scavenge,end,0,320455,1616666747020 +scavenge,begin,0,321187,1616666747021 +scavenge,end,0,321218,1616666747021 +tick,0x55742631e6c5,309145,0,0x0,0,0x2ae7000865b3 +scavenge,begin,0,322007,1616666747021 +scavenge,end,0,322037,1616666747021 +tick,0x2ae700085c7d,310209,0,0x0,0 +scavenge,begin,0,322823,1616666747022 +scavenge,end,0,322853,1616666747022 +scavenge,begin,0,323609,1616666747023 +tick,0x2ae700085be8,311346,0,0x0,0 +scavenge,end,0,323649,1616666747023 +scavenge,begin,0,324575,1616666747024 +scavenge,end,0,324606,1616666747024 +tick,0x55742631e67e,312340,0,0x0,0,0x2ae7000865fe +scavenge,begin,0,325442,1616666747024 +scavenge,end,0,325473,1616666747025 +tick,0x2ae700085cf3,313402,0,0x0,0 +scavenge,begin,0,326311,1616666747025 +scavenge,end,0,326343,1616666747025 +scavenge,begin,0,327084,1616666747026 +scavenge,end,0,327113,1616666747026 +tick,0x7f3662dccff0,314465,0,0x0,1 +scavenge,begin,0,327888,1616666747027 +scavenge,end,0,327918,1616666747027 +tick,0x55742631e68e,315587,0,0x0,0,0x2ae7000865b3 +scavenge,begin,0,328823,1616666747028 +scavenge,end,0,328854,1616666747028 +tick,0x55742631e644,316600,0,0x0,0,0x2ae70008664a +scavenge,begin,0,329692,1616666747028 +scavenge,end,0,329724,1616666747028 +scavenge,begin,0,330512,1616666747029 +scavenge,end,0,330541,1616666747029 +tick,0x2ae700086616,317625,0,0x0,0 +scavenge,begin,0,331375,1616666747030 +scavenge,end,0,331407,1616666747030 +tick,0x2ae700085c6e,318792,0,0x0,0 +scavenge,begin,0,332320,1616666747031 +scavenge,end,0,332349,1616666747031 +scavenge,begin,0,333133,1616666747031 +tick,0x7f3662e0322e,319757,0,0x0,1 +scavenge,end,0,333221,1616666747031 +scavenge,begin,0,334027,1616666747032 +scavenge,end,0,334056,1616666747032 +tick,0x55742631e655,320820,0,0x0,0,0x2ae7000865fe +scavenge,begin,0,334833,1616666747033 +scavenge,end,0,334862,1616666747033 +tick,0x55742631e641,321884,0,0x0,0 +scavenge,begin,0,335648,1616666747034 +scavenge,end,0,335678,1616666747034 +scavenge,begin,0,336422,1616666747034 +scavenge,end,0,336450,1616666747034 +tick,0x55742631e6b7,323047,0,0x0,0,0x2ae7000865b3 +profiler,end +delete,MemoryChunk,0x2ae708180000 +delete,MemoryChunk,0x2ae708200000 +delete,MemoryChunk,0x2ae708380000 +delete,MemoryChunk,0x2ae7083c0000 +delete,MemoryChunk,0x2ae700040000 +delete,MemoryChunk,0x2ae700080000 +delete,MemoryChunk,0x2ae7081c0000 +delete,MemoryChunk,0x2ae708240000 +delete,MemoryChunk,0x2ae708280000 +delete,MemoryChunk,0x2ae7082c0000 +delete,MemoryChunk,0x2ae708300000 +delete,MemoryChunk,0x2ae708340000 +delete,MemoryChunk,0x2ae708080000 +delete,MemoryChunk,0x2ae7080c0000 +delete,MemoryChunk,0x2ae708100000 +delete,MemoryChunk,0x2ae708140000 +delete,MemoryChunk,0x2ae708040000 diff --git a/deps/v8/test/mjsunit/tools/tickprocessor-test-large.log.symbols.json b/deps/v8/test/mjsunit/tools/tickprocessor-test-large.log.symbols.json new file mode 100644 index 0000000000..e7917da290 --- /dev/null +++ b/deps/v8/test/mjsunit/tools/tickprocessor-test-large.log.symbols.json @@ -0,0 +1 @@ +[["v8_Default_embedded_blob_code_data_",93957345371712,93957345373344],["v8::internal::Runtime_AllocateInYoungGeneration(int, unsigned long*, v8::internal::Isolate*)",93957340107136,93957340107454],["construct_stub_invoke_deopt_addr",93957345398548,93957345398656],["v8::internal::SpaceWithLinearArea::RemoveAllocationObserver(v8::internal::AllocationObserver*)",93957337599472,93957337599634],["v8::internal::Deserializer::GetBackReferencedObject()",93957340528336,93957340528467],["v8::internal::SetSnapshotFromFile(v8::StartupData*)",93957346612128,93957346612307],["v8::internal::RootScavengeVisitor::VisitRootPointers(v8::internal::Root, char const*, v8::internal::FullObjectSlot, v8::internal::FullObjectSlot)",93957337529616,93957337529705],["v8::internal::Log::MessageBuilder::AppendString(char const*, unsigned long, bool)",93957338139424,93957338139694],["v8::internal::Stats_Runtime_ShrinkFinalizationRegistryUnregisterTokenMap(int, unsigned long*, v8::internal::Isolate*)",93957340505520,93957340506329],["v8::internal::compiler::JSOperatorBuilder::ToName()",93957343305728,93957343305741],["__libc_malloc",139871563825392,139871563826148],["v8::internal::LargeObjectSpace::SizeOfObjects()",93957337078992,93957337079005],["v8::internal::SpaceWithLinearArea::AdvanceAllocationObservers()",93957337599376,93957337599467],["v8::sampler::Sampler::Start()",93957338110944,93957338111064],["v8::internal::Runtime_CompileForOnStackReplacement(int, unsigned long*, v8::internal::Isolate*)",93957340005712,93957340007781],["v8::internal::Stats_Runtime_StringIteratorProtector(int, unsigned long*, v8::internal::Isolate*)",93957340477680,93957340478182],["v8::internal::IdentityMap<int, v8::base::DefaultAllocationPolicy>::~IdentityMap()",93957340518592,93957340518630],["v8::internal::compiler::TopLevelLiveRange::AddUsePosition(v8::internal::compiler::UsePosition*, bool)",93957343090544,93957343090865],["v8::internal::SetupIsolateDelegate::SetupBuiltins(v8::internal::Isolate*)",93957345371568,93957345371601],["vprintf",139871563591584,139871563591607],["cfree",139871563826976,139871563827241],["v8::internal::Heap::Scavenge()",93957336999824,93957337000599],["v8::internal::RootScavengeVisitor::VisitRootPointer(v8::internal::Root, char const*, v8::internal::FullObjectSlot)",93957337529568,93957337529610],["v8::internal::Page::CreateBlackAreaBackground(unsigned long, unsigned long)",93957337597056,93957337597560],["std::__1::vector<v8::internal::JsonParser<unsigned char>::JsonContinuation, std::__1::allocator<v8::internal::JsonParser<unsigned char>::JsonContinuation> >::pop_back()",93957338045776,93957338045855],["v8::internal::WorkerThreadRuntimeCallStats::AddToMainTable(v8::internal::RuntimeCallStats*)",93957338130704,93957338131057],["v8::internal::Stats_Runtime_HealOptimizedCodeSlot(int, unsigned long*, v8::internal::Isolate*)",93957340000496,93957340001052],["v8::internal::Runtime_BytecodeBudgetInterruptFromBytecode(int, unsigned long*, v8::internal::Isolate*)",93957340104320,93957340105047],["v8::internal::Stats_Runtime_RegexpHasBytecode(int, unsigned long*, v8::internal::Isolate*)",93957340455856,93957340456577],["v8::internal::Runtime_TypedArrayCopyElements(int, unsigned long*, v8::internal::Isolate*)",93957340488720,93957340489144],["v8::internal::ScriptData::ScriptData(unsigned char const*, int)",93957340510320,93957340510490],["std::__1::vector<std::__1::shared_ptr<v8::internal::BackingStore>, std::__1::allocator<std::__1::shared_ptr<v8::internal::BackingStore> > >::push_back(std::__1::shared_ptr<v8::internal::BackingStore>&&)",93957340523760,93957340523810],["Cr_z_inflate_fast_chunk_",93957342806528,93957342810754],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::SelectParameters const&)",93957343304480,93957343304597],["v8::internal::compiler::Scheduler::ScheduleEarly()",93957344756624,93957344757199],["v8_code_start_for_profiler_",93957345371680,93957345371681],["std::__1::__libcpp_snprintf_l(char*, unsigned long, __locale_struct*, char const*, ...)",93957346691040,93957346691237],["pthread_attr_setschedparam",139871563805840,139871563805934],["__write",139871564238624,139871564238781],["v8::internal::Heap::AllocateRaw(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment)",93957336852080,93957336853129],["v8::internal::Heap::AllocateRawWithRetryOrFailSlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment)",93957337025376,93957337025582],["v8::internal::ScavengerCollector::CollectGarbage()",93957337516832,93957337523563],["void v8::internal::BodyDescriptorBase::IterateJSObjectBodyImpl<v8::internal::IterateAndScavengePromotedObjectsVisitor>(v8::internal::Map, v8::internal::HeapObject, int, int, v8::internal::IterateAndScavengePromotedObjectsVisitor*)",93957337572544,93957337572722],["v8::internal::SpaceWithLinearArea::UpdateAllocationOrigins(v8::internal::AllocationOrigin)",93957337598752,93957337598770],["v8::internal::interpreter::LoopBuilder::BindContinueTarget()",93957338027808,93957338027826],["v8::internal::JsonStringifier::InitializeReplacer(v8::internal::Handle<v8::internal::Object>)",93957338070272,93957338071476],["v8::internal::RuntimeCallCounter::Reset()",93957338127712,93957338127725],["v8::internal::Log::MessageBuilder& v8::internal::Log::MessageBuilder::operator<< <char const*>(char const*)",93957338138112,93957338138165],["v8::internal::Stats_Runtime_WeakCollectionDelete(int, unsigned long*, v8::internal::Isolate*)",93957339991888,93957339992527],["v8::internal::Stats_Runtime_ObserveNode(int, unsigned long*, v8::internal::Isolate*)",93957340005216,93957340005712],["v8::internal::Runtime_ThrowInvalidStringLength(int, unsigned long*, v8::internal::Isolate*)",93957340097296,93957340097439],["v8::internal::Runtime_BytecodeBudgetInterruptFromCode(int, unsigned long*, v8::internal::Isolate*)",93957340106160,93957340106438],["v8::internal::Stats_Runtime_EnsureFeedbackVectorForFunction(int, unsigned long*, v8::internal::Isolate*)",93957340422896,93957340423492],["v8::internal::Stats_Runtime_HasFixedUint16Elements(int, unsigned long*, v8::internal::Isolate*)",93957340467536,93957340468072],["v8::internal::Stats_Runtime_IsBeingInterpreted(int, unsigned long*, v8::internal::Isolate*)",93957340483120,93957340483576],["unsigned int std::__1::__sort3<bool (*&)(double, double), v8::internal::UnalignedSlot<double> >(v8::internal::UnalignedSlot<double>, v8::internal::UnalignedSlot<double>, v8::internal::UnalignedSlot<double>, bool (*&)(double, double))",93957340500112,93957340500366],["v8::internal::Runtime::IsAllowListedForFuzzing(v8::internal::Runtime::FunctionId)",93957340509072,93957340509179],["v8::internal::CreateInterpreterDataForDeserializedCode(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SharedFunctionInfo>, bool)",93957340514096,93957340515202],["v8::internal::ContextSerializer::ContextSerializer(v8::internal::Isolate*, v8::base::Flags<v8::internal::Snapshot::SerializerFlag, int>, v8::internal::StartupSerializer*, v8::SerializeInternalFieldsCallback)",93957340520240,93957340520339],["v8::internal::Deserializer::LogNewMapEvents()",93957340525200,93957340525331],["operator delete(void*)",93957340609296,93957340609306],["v8::internal::compiler::TopLevelLiveRange::AddUseInterval(v8::internal::compiler::LifetimePosition, v8::internal::compiler::LifetimePosition, v8::internal::Zone*, bool)",93957343090272,93957343090533],["v8::internal::compiler::NodeCache<int, v8::base::hash<int>, std::__1::equal_to<int> >::GetCachedNodes(v8::internal::ZoneVector<v8::internal::compiler::Node*>*)",93957343291792,93957343292516],["v8::internal::compiler::SparseInputMask::IterateOverInputs(v8::internal::compiler::Node*)",93957343305040,93957343305064],["v8::internal::compiler::Scheduler::Scheduler(v8::internal::Zone*, v8::internal::compiler::Graph*, v8::internal::compiler::Schedule*, v8::base::Flags<v8::internal::compiler::Scheduler::Flag, int>, unsigned long, v8::internal::TickCounter*, v8::internal::ProfileDataFromFile const*)",93957344752240,93957344752602],["v8::internal::compiler::WasmGraphBuilder::ArrayNewWithRtt(unsigned int, v8::internal::wasm::ArrayType const*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, int)",93957345312624,93957345313820],["v8::internal::SetupIsolateDelegate::SetupHeap(v8::internal::Heap*)",93957345371616,93957345371651],["std::__1::basic_ostream<char, std::__1::char_traits<char> >::operator<<(float)",93957346641056,93957346641457],["cuserid",139871563591056,139871563591221],["pthread_attr_getschedparam",139871563805824,139871563805831],["posix_spawnattr_setschedpolicy",139871564234784,139871564234803],["__nss_database_lookup",139871564548416,139871564548429],["std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > std::__1::__pad_and_output<char, std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*, char const*, std::__1::ios_base&, char)",93957335315632,93957335315963],["v8::internal::Heap::MoveRange(v8::internal::HeapObject, v8::internal::CompressedObjectSlot, v8::internal::CompressedObjectSlot, int, v8::internal::WriteBarrierMode)",93957336995504,93957336995715],["v8::internal::Heap::ConfigureHeap(v8::ResourceConstraints const&)",93957337021456,93957337022600],["v8::internal::LargeObjectSpace::Size()",93957337078944,93957337078957],["v8::internal::GlobalSafepoint::EnterSafepointScope()",93957337500656,93957337501333],["v8::internal::Scavenger::RememberPromotedEphemeron(v8::internal::EphemeronHashTable, int)",93957337526976,93957337527142],["v8::internal::ScavengeVisitor::VisitPointers(v8::internal::HeapObject, v8::internal::CompressedObjectSlot, v8::internal::CompressedObjectSlot)",93957337536096,93957337536206],["v8::internal::Worklist<v8::internal::MemoryChunk*, 64>::FlushToGlobal(int)",93957337575792,93957337576014],["v8::internal::Space::RemoveAllocationObserver(v8::internal::AllocationObserver*)",93957337598560,93957337598574],["v8::internal::LocalAllocationBuffer::LocalAllocationBuffer(v8::internal::Heap*, v8::internal::LinearAllocationArea)",93957337599024,93957337599080],["v8::internal::interpreter::BytecodeRegisterOptimizer::RegisterAllocateEvent(v8::internal::interpreter::Register)",93957338008128,93957338008269],["v8::internal::interpreter::Interpreter::Interpreter(v8::internal::Isolate*)",93957338030368,93957338030487],["v8::internal::Handle<v8::internal::String> v8::internal::JsonParser<unsigned short>::DecodeString<v8::internal::SeqTwoByteString>(v8::internal::JsonString const&, v8::internal::Handle<v8::internal::SeqTwoByteString>, v8::internal::Handle<v8::internal::String>)",93957338059392,93957338059655],["v8::internal::JsonStringifier::SerializeJSReceiverSlow(v8::internal::Handle<v8::internal::JSReceiver>)",93957338087744,93957338088570],["v8::internal::Histogram::AddSample(int)",93957338112992,93957338113026],["v8::internal::RuntimeCallStatEntries::Add(v8::internal::RuntimeCallCounter*)",93957338128880,93957338129033],["bool std::__1::__insertion_sort_incomplete<std::__1::__less<v8::internal::RuntimeCallStatEntries::Entry, v8::internal::RuntimeCallStatEntries::Entry>&, std::__1::reverse_iterator<std::__1::__wrap_iter<v8::internal::RuntimeCallStatEntries::Entry*> > >(std::__1::reverse_iterator<std::__1::__wrap_iter<v8::internal::RuntimeCallStatEntries::Entry*> >, std::__1::reverse_iterator<std::__1::__wrap_iter<v8::internal::RuntimeCallStatEntries::Entry*> >, std::__1::__less<v8::internal::RuntimeCallStatEntries::Entry, v8::internal::RuntimeCallStatEntries::Entry>&)",93957338135952,93957338136940],["v8::internal::Log::MessageBuilder::AppendString(v8::internal::Vector<char const>)",93957338139216,93957338139417],["v8::internal::(anonymous namespace)::AddDescriptorsByTemplate(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::DescriptorArray>, v8::internal::Handle<v8::internal::NumberDictionary>, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Arguments<(v8::internal::ArgumentsType)0>&)",93957339977424,93957339979670],["v8::internal::Stats_Runtime_TryInstallNCICode(int, unsigned long*, v8::internal::Isolate*)",93957339996464,93957339997246],["v8::internal::Stats_Runtime_NotifyDeoptimized(int, unsigned long*, v8::internal::Isolate*)",93957340003840,93957340005142],["v8::internal::Runtime_Throw(int, unsigned long*, v8::internal::Isolate*)",93957340084144,93957340084279],["v8::internal::Runtime_ThrowNotConstructor(int, unsigned long*, v8::internal::Isolate*)",93957340100048,93957340100207],["v8::internal::Stats_Runtime_BytecodeBudgetInterruptFromBytecode(int, unsigned long*, v8::internal::Isolate*)",93957340105056,93957340106147],["v8::internal::Stats_Runtime_BytecodeBudgetInterruptFromCode(int, unsigned long*, v8::internal::Isolate*)",93957340106448,93957340107123],["v8::internal::Runtime_StringBuilderConcat(int, unsigned long*, v8::internal::Isolate*)",93957340387936,93957340388868],["v8::internal::Stats_Runtime_DebugTrace(int, unsigned long*, v8::internal::Isolate*)",93957340442512,93957340442965],["v8::internal::Stats_Runtime_HasDoubleElements(int, unsigned long*, v8::internal::Isolate*)",93957340462240,93957340462776],["v8::internal::Stats_Runtime_HasFixedBigInt64Elements(int, unsigned long*, v8::internal::Isolate*)",93957340472784,93957340473320],["v8::internal::Stats_Runtime_ArrayBufferMaxByteLength(int, unsigned long*, v8::internal::Isolate*)",93957340480544,93957340481060],["v8::internal::(anonymous namespace)::EnsureFeedbackVector(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSFunction>)",93957340486720,93957340487127],["bool v8::internal::(anonymous namespace)::CompareNum<float>(float, float)",93957340494944,93957340495022],["unsigned int std::__1::__sort5<std::__1::__less<unsigned long, unsigned long>&, v8::internal::UnalignedSlot<unsigned long> >(v8::internal::UnalignedSlot<unsigned long>, v8::internal::UnalignedSlot<unsigned long>, v8::internal::UnalignedSlot<unsigned long>, v8::internal::UnalignedSlot<unsigned long>, v8::internal::UnalignedSlot<unsigned long>, std::__1::__less<unsigned long, unsigned long>&)",93957340502784,93957340502928],["v8::internal::Stats_Runtime_JSWeakRefAddToKeptObjects(int, unsigned long*, v8::internal::Isolate*)",93957340507488,93957340508087],["v8::internal::Runtime::FunctionForId(v8::internal::Runtime::FunctionId)",93957340510160,93957340510183],["v8::internal::SnapshotByteSink::Put(unsigned char, char const*)",93957340512224,93957340512451],["v8::internal::SerializedCodeData::Payload() const",93957340518112,93957340518130],["v8::internal::ContextDeserializer::Deserialize(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSGlobalProxy>, v8::DeserializeInternalFieldsCallback)",93957340518912,93957340519157],["v8::internal::ContextSerializer::SerializeObjectImpl(v8::internal::Handle<v8::internal::HeapObject>)",93957340521136,93957340521801],["v8::internal::Deserializer::VisitRootPointers(v8::internal::Root, char const*, v8::internal::FullObjectSlot, v8::internal::FullObjectSlot)",93957340524416,93957340524526],["v8::internal::StringTableInsertionKey::IsMatch(v8::internal::Isolate*, v8::internal::String)",93957340525728,93957340525765],["v8::internal::SerializerDeserializer::CanBeDeferred(v8::internal::HeapObject)",93957340544032,93957340544206],["v8::OutputStream::GetChunkSize()",93957342560320,93957342560331],["v8::internal::compiler::LiveRangeBoundArray::Find(v8::internal::compiler::LifetimePosition) const",93957343088480,93957343088540],["v8::internal::compiler::BytecodeGraphBuilder::BuildSwitchOnGeneratorState(v8::internal::ZoneVector<v8::internal::compiler::ResumeJumpTarget> const&, bool)",93957343277712,93957343279214],["v8::internal::compiler::CommonOperatorReducer::reducer_name() const",93957343301072,93957343301085],["v8::internal::compiler::SparseInputMask::InputIterator::IsReal() const",93957343304848,93957343304865],["v8::internal::compiler::CommonOperatorBuilder::CommonOperatorBuilder(v8::internal::Zone*)",93957343305616,93957343305727],["v8::internal::compiler::BasicBlock::AddSuccessor(v8::internal::compiler::BasicBlock*)",93957344737072,93957344737731],["v8::internal::compiler::Scheduler::PrepareUses()",93957344755104,93957344756620],["v8::internal::compiler::WasmGraphBuilder::LoadIndirectFunctionTable(unsigned int, v8::internal::compiler::Node**, v8::internal::compiler::Node**, v8::internal::compiler::Node**, v8::internal::compiler::Node**)",93957345284384,93957345285490],["v8::internal::compiler::WasmAssemblerOptions()",93957345329776,93957345329827],["std::__1::basic_ostream<char, std::__1::char_traits<char> >::operator<<(short)",93957346638992,93957346639422],["std::__1::__num_get<wchar_t>::__stage2_float_loop(wchar_t, bool&, char&, char*, char*&, wchar_t, wchar_t, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned int*, unsigned int*&, unsigned int&, wchar_t*)",93957346688496,93957346689333],["strtof128",139871563578576,139871563578594],["_IO_vfprintf",139871563591568,139871563591575],["_IO_file_read",139871563787744,139871563787773],["pathconf",139871564098480,139871564099114],["openat",139871564238112,139871564238408],["llseek",139871564238784,139871564238820],["__libc_freeres",139871564762752,139871564762913],["operator delete[](void*)",93957335214528,93957335214538],["v8::internal::Factory::NewBaselineData(v8::internal::Handle<v8::internal::Code>, v8::internal::Handle<v8::internal::HeapObject>)",93957336851280,93957336851613],["v8::internal::Heap::DevToolsTraceEventScope::~DevToolsTraceEventScope()",93957336987936,93957336988312],["v8::internal::Heap::CompleteSweepingYoung(v8::internal::GarbageCollector)",93957336997616,93957336998051],["v8::internal::Heap::RestoreHeapLimit(unsigned long)",93957337017984,93957337018320],["v8::internal::Heap::PercentToGlobalMemoryLimit()",93957337024848,93957337025164],["v8::internal::CodeLargeObjectSpace::CodeLargeObjectSpace(v8::internal::Heap*)",93957337078064,93957337078360],["v8::internal::LargeObjectSpace::~LargeObjectSpace()",93957337078960,93957337078988],["v8::internal::ReadOnlySpace::~ReadOnlySpace()",93957337497872,93957337497910],["v8::internal::ScavengeJob::ScheduleTaskIfNeeded(v8::internal::Heap*)",93957337501984,93957337502351],["v8::internal::ScavengerCollector::IterateStackAndScavenge(v8::internal::RootScavengeVisitor*, std::__1::vector<std::__1::unique_ptr<v8::internal::Scavenger, std::__1::default_delete<v8::internal::Scavenger> >, std::__1::allocator<std::__1::unique_ptr<v8::internal::Scavenger, std::__1::default_delete<v8::internal::Scavenger> > > >*, int)",93957337524880,93957337525932],["v8::internal::ScavengerCollector::ClearOldEphemerons()",93957337528176,93957337529558],["v8::internal::ScavengerCollector::JobTask::~JobTask()",93957337535920,93957337536000],["v8::internal::Worklist<v8::internal::Scavenger::PromotionListEntry, 4>::FlushToGlobal(int)",93957337566288,93957337566548],["void v8::internal::Code::BodyDescriptor::IterateBody<v8::internal::IterateAndScavengePromotedObjectsVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::IterateAndScavengePromotedObjectsVisitor*)",93957337574416,93957337574495],["v8::internal::Page::AllocateFreeListCategories()",93957337595184,93957337595370],["v8::internal::Page::DestroyBlackAreaBackground(unsigned long, unsigned long)",93957337598016,93957337598533],["v8::internal::Space::ResumeAllocationObservers()",93957337598592,93957337598605],["v8::internal::LocalAllocationBuffer::CloseAndMakeIterable()",93957337598864,93957337598961],["v8::internal::LocalAllocationBuffer::operator=(v8::internal::LocalAllocationBuffer&&)",93957337599152,93957337599198],["v8::internal::interpreter::BytecodeGenerator::GetCachedLoadSuperICSlot(v8::internal::AstRawString const*)",93957337971184,93957337971486],["v8::internal::interpreter::ConstantArrayBuilder::ConstantArraySlice::Allocate(v8::internal::interpreter::ConstantArrayBuilder::Entry, unsigned long)",93957338020752,93957338021205],["v8::internal::interpreter::ConditionalControlFlowBuilder::~ConditionalControlFlowBuilder()",93957338029088,93957338029116],["v8::internal::JsonParser<unsigned char>::ParseJson()",93957338036832,93957338036965],["v8::internal::JsonParser<unsigned short>::JsonParser(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>)",93957338052080,93957338052636],["v8::base::SmallVector<v8::internal::JsonProperty, 16ul>::Grow()",93957338068304,93957338068316],["v8::internal::CircularStructureMessageBuilder::AppendNormalLine(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957338075712,93957338076914],["v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_<true>(v8::internal::Handle<v8::internal::Object>, bool, v8::internal::Handle<v8::internal::Object>)",93957338098496,93957338108648],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<unsigned long, std::__1::vector<v8::sampler::Sampler*, std::__1::allocator<v8::sampler::Sampler*> > >, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<unsigned long, std::__1::vector<v8::sampler::Sampler*, std::__1::allocator<v8::sampler::Sampler*> > >, std::__1::__unordered_map_hasher<unsigned long, std::__1::__hash_value_type<unsigned long, std::__1::vector<v8::sampler::Sampler*, std::__1::allocator<v8::sampler::Sampler*> > >, std::__1::hash<unsigned long>, std::__1::equal_to<unsigned long>, true>, std::__1::__unordered_map_equal<unsigned long, std::__1::__hash_value_type<unsigned long, std::__1::vector<v8::sampler::Sampler*, std::__1::allocator<v8::sampler::Sampler*> > >, std::__1::equal_to<unsigned long>, std::__1::hash<unsigned long>, true>, std::__1::allocator<std::__1::__hash_value_type<unsigned long, std::__1::vector<v8::sampler::Sampler*, std::__1::allocator<v8::sampler::Sampler*> > > > >::__emplace_unique_key_args<unsigned long, unsigned long&, std::__1::vector<v8::sampler::Sampler*, std::__1::allocator<v8::sampler::Sampler*> > >(unsigned long const&, unsigned long&, std::__1::vector<v8::sampler::Sampler*, std::__1::allocator<v8::sampler::Sampler*> >&&)",93957338111872,93957338112816],["v8::internal::Counters::Counters(v8::internal::Isolate*)",93957338113488,93957338115946],["v8::internal::RuntimeCallTimer::Stop()",93957338128144,93957338128263],["v8::internal::RuntimeCallStats::Dump(v8::tracing::TracedValue*)",93957338130112,93957338130188],["v8::internal::RuntimeCallStatEntries::Entry::Print(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)",93957338131712,93957338132122],["v8::internal::Log::CreateOutputHandle(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)",93957338137040,93957338137294],["v8::internal::Log::Close()",93957338138496,93957338138573],["v8::internal::Runtime_ThrowSuperAlreadyCalledError(int, unsigned long*, v8::internal::Isolate*)",93957339963152,93957339963307],["v8::internal::Stats_Runtime_SetGrow(int, unsigned long*, v8::internal::Isolate*)",93957339986960,93957339987816],["v8::internal::Stats_Runtime_CompileLazy(int, unsigned long*, v8::internal::Isolate*)",93957339993920,93957339994780],["v8::internal::Stats_Runtime_CompileOptimized_NotConcurrent(int, unsigned long*, v8::internal::Isolate*)",93957339998272,93957339998866],["v8::internal::Stats_Runtime_InstantiateAsmJs(int, unsigned long*, v8::internal::Isolate*)",93957340001824,93957340002952],["v8::internal::Runtime_ObserveNode(int, unsigned long*, v8::internal::Isolate*)",93957340005152,93957340005207],["v8::internal::Runtime_AsyncFunctionEnter(int, unsigned long*, v8::internal::Isolate*)",93957340074128,93957340074165],["v8::internal::Runtime_UnwindAndFindExceptionHandler(int, unsigned long*, v8::internal::Isolate*)",93957340091008,93957340091040],["v8::internal::Runtime_ThrowThrowMethodMissing(int, unsigned long*, v8::internal::Isolate*)",93957340098672,93957340098827],["v8::internal::Runtime_StackGuard(int, unsigned long*, v8::internal::Isolate*)",93957340101504,93957340101899],["v8::internal::Runtime_ThrowConstAssignError(int, unsigned long*, v8::internal::Isolate*)",93957340340976,93957340341131],["v8::internal::Stats_Runtime_ClearMegamorphicStubCache(int, unsigned long*, v8::internal::Isolate*)",93957340408896,93957340409415],["v8::internal::Stats_Runtime_ClearFunctionFeedback(int, unsigned long*, v8::internal::Isolate*)",93957340435552,93957340436151],["v8::internal::Stats_Runtime_DisassembleFunction(int, unsigned long*, v8::internal::Isolate*)",93957340449264,93957340449724],["v8::internal::Stats_Runtime_HasFastElements(int, unsigned long*, v8::internal::Isolate*)",93957340459616,93957340460150],["v8::internal::Stats_Runtime_HasSloppyArgumentsElements(int, unsigned long*, v8::internal::Isolate*)",93957340464912,93957340465451],["v8::internal::Stats_Runtime_HasFixedFloat32Elements(int, unsigned long*, v8::internal::Isolate*)",93957340470160,93957340470696],["v8::internal::Stats_Runtime_PromiseSpeciesProtector(int, unsigned long*, v8::internal::Isolate*)",93957340475248,93957340475750],["v8::internal::Stats_Runtime_SerializeDeserializeNow(int, unsigned long*, v8::internal::Isolate*)",93957340479040,93957340479651],["v8::internal::Stats_Runtime_CompleteInobjectSlackTracking(int, unsigned long*, v8::internal::Isolate*)",93957340481984,93957340482591],["v8::internal::Stats_Runtime_NewRegExpWithBacktrackLimit(int, unsigned long*, v8::internal::Isolate*)",93957340484880,93957340485780],["v8::internal::DebugPrintImpl(v8::internal::MaybeObject)",93957340487408,93957340487833],["v8::internal::Runtime_TypedArraySortFast(int, unsigned long*, v8::internal::Isolate*)",93957340490800,93957340491846],["unsigned int std::__1::__sort4<bool (*&)(float, float), float*>(float*, float*, float*, float*, bool (*&)(float, float))",93957340497280,93957340497684],["bool std::__1::__insertion_sort_incomplete<bool (*&)(double, double), v8::internal::UnalignedSlot<double> >(v8::internal::UnalignedSlot<double>, v8::internal::UnalignedSlot<double>, bool (*&)(double, double))",93957340501056,93957340501492],["unsigned int std::__1::__sort4<std::__1::__less<long, long>&, v8::internal::UnalignedSlot<long> >(v8::internal::UnalignedSlot<long>, v8::internal::UnalignedSlot<long>, v8::internal::UnalignedSlot<long>, v8::internal::UnalignedSlot<long>, std::__1::__less<long, long>&)",93957340504448,93957340504554],["v8::internal::Stats_Runtime_JSFinalizationRegistryRegisterWeakCellWithUnregisterToken(int, unsigned long*, v8::internal::Isolate*)",93957340506608,93957340507272],["v8::internal::Runtime::NeedsExactContext(v8::internal::Runtime::FunctionId)",93957340508928,93957340508993],["v8::internal::(anonymous namespace)::InitializeIntrinsicFunctionNames()",93957340509504,93957340510064],["v8::internal::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::Runtime::FunctionId)",93957340510208,93957340510263],["v8::internal::CodeSerializer::~CodeSerializer()",93957340512128,93957340512173],["v8::internal::TorqueGeneratedScript<v8::internal::Script, v8::internal::Struct>::set_context_data(v8::internal::Object, v8::internal::WriteBarrierMode)",93957340513824,93957340513955],["v8::internal::SerializedCodeData::SerializedCodeData(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > const*, v8::internal::CodeSerializer const*)",93957340517312,93957340517808],["v8::internal::SnapshotData::~SnapshotData()",93957340518208,93957340518261],["v8::internal::IdentityMap<int, v8::base::DefaultAllocationPolicy>::NewPointerArray(unsigned long)",93957340518688,93957340518706],["v8::internal::ContextDeserializer::DeserializeEmbedderFields(v8::DeserializeInternalFieldsCallback)",93957340519456,93957340519989],["v8::internal::ContextSerializer::~ContextSerializer()",93957340520432,93957340520509],["v8::internal::ContextSerializer::CheckRehashability(v8::internal::HeapObject)",93957340523424,93957340523486],["v8::internal::Deserializer::Rehash()",93957340523888,93957340523980],["v8::internal::Deserializer::DeserializeDeferredObjects()",93957340524576,93957340524648],["v8::internal::Deserializer::LogScriptEvents(v8::internal::Script)",93957340525520,93957340525621],["v8::internal::ExternalString::set_address_as_resource(v8::internal::Isolate*, unsigned long)",93957340528016,93957340528190],["int v8::internal::Deserializer::ReadSingleBytecodeData<v8::internal::SlotAccessorForHeapObject>(unsigned char, v8::internal::SlotAccessorForHeapObject)",93957340531168,93957340533261],["v8::tracing::TracedValue::~TracedValue()",93957340605104,93957340605152],["v8_inspector::(anonymous namespace)::HeapSnapshotOutputStream::GetChunkSize()",93957342560208,93957342560219],["v8_crdtp::(anonymous namespace)::PreSerialized::~PreSerialized()",93957342802656,93957342802694],["v8::internal::compiler::RegisterAllocatorVerifier::VerifyAssignment(char const*)",93957343071440,93957343072596],["v8::internal::compiler::TopLevelLiveRange::GetSpillRangeOperand() const",93957343089136,93957343089173],["v8::internal::compiler::BytecodeGraphBuilder::VisitStar9()",93957343264400,93957343264468],["v8::base::TemplateHashMapImpl<int, v8::internal::compiler::BytecodeLiveness, v8::base::KeyEqualityMatcher<int>, v8::internal::ZoneAllocationPolicy>::Resize()",93957343284272,93957343284653],["v8::internal::compiler::CommonOperatorReducer::ReduceReturn(v8::internal::compiler::Node*)",93957343296992,93957343298052],["v8::internal::compiler::ValueInputCountOfReturn(v8::internal::compiler::Operator const*)",93957343302080,93957343302092],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::TypedObjectStateInfo const&)",93957343304624,93957343304794],["v8::internal::compiler::SparseInputMask::InputIterator::GetReal() const",93957343304912,93957343304957],["v8::internal::compiler::MachineTypesOf(v8::internal::compiler::Operator const*)",93957343305408,93957343305429],["v8::internal::compiler::Truncation::LessGeneral(v8::internal::compiler::Truncation::TruncationKind, v8::internal::compiler::Truncation::TruncationKind)",93957344722304,93957344722403],["v8::internal::compiler::Schedule::AddNode(v8::internal::compiler::BasicBlock*, v8::internal::compiler::Node*)",93957344740176,93957344741304],["v8::internal::compiler::Scheduler::BuildCFG()",93957344753680,93957344754840],["v8::internal::compiler::WasmGraphBuilder::BuildI32AsmjsDivU(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957345259728,93957345260117],["v8::internal::compiler::WasmGraphBuilder::StoreLane(v8::internal::MachineRepresentation, v8::internal::compiler::Node*, unsigned long, unsigned int, v8::internal::compiler::Node*, unsigned char, int, v8::internal::wasm::ValueType)",93957345298432,93957345298857],["v8::internal::compiler::WasmGraphBuilder::RefIsI31(v8::internal::compiler::Node*)",93957345320416,93957345320487],["v8::internal::compiler::(anonymous namespace)::WasmWrapperGraphBuilder::BuildUnpackObjectWrapper(v8::internal::compiler::Node*, v8::internal::compiler::(anonymous namespace)::WasmWrapperGraphBuilder::UnpackFailureBehavior)",93957345366480,93957345367424],["std::__1::ios_base::init(void*)",93957346635104,93957346635184],["std::__1::basic_ostream<char, std::__1::char_traits<char> >::operator<<(unsigned long)",93957346640656,93957346641050],["std::__1::num_get<wchar_t, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::do_get(std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, unsigned int&, unsigned long&) const",93957346677936,93957346677946],["std::__1::num_put<char, std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > >::do_put(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, char, long) const",93957346690416,93957346691031],["wcstoimax",139871563568688,139871563568695],["__strtof128_nan",139871563589856,139871563590022],["fsetpos",139871563739600,139871563739920],["pthread_self",139871563805488,139871563805498],["endgrent",139871564079904,139871564080126],["__sched_get_priority_min",139871564197888,139871564197921],["__fxstatat",139871564236896,139871564236980],["__read",139871564238464,139871564238621],["__nss_group_lookup",139871564548368,139871564548388],["__pthread_cond_timedwait",139871566612640,139871566613513],["_start",93957335199456,93957335199499],["std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long)",93957335315376,93957335315627],["v8::internal::Factory::NewFillerObject(int, bool, v8::internal::AllocationType, v8::internal::AllocationOrigin)",93957336850128,93957336850443],["v8::internal::Factory::TryNewFixedArray(int, v8::internal::AllocationType)",93957336851776,93957336852071],["v8::internal::Heap::MonotonicallyIncreasingTimeInMs()",93957336975712,93957336975740],["v8::internal::Heap::NotifyContextDisposed(bool)",93957336991824,93957336992330],["void v8::internal::Heap::WriteBarrierForRange<v8::internal::CompressedObjectSlot>(v8::internal::HeapObject, v8::internal::CompressedObjectSlot, v8::internal::CompressedObjectSlot)",93957336996000,93957336997530],["v8::internal::Heap::MinorMarkCompact()",93957336999216,93957336999824],["void v8::internal::Heap::CreateFillerForArray<v8::internal::FixedArrayBase>(v8::internal::FixedArrayBase, int, int)",93957337010096,93957337010868],["v8::internal::Heap::builtin(int)",93957337020064,93957337020081],["v8::internal::Heap::MaxRegularHeapObjectSize(v8::internal::AllocationType)",93957337024064,93957337024087],["v8::internal::Heap::AllocateRawWithLightRetrySlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment)",93957337025216,93957337025363],["v8::internal::LargeObjectSpace::GetObjectIterator(v8::internal::Heap*)",93957337076400,93957337076447],["v8::internal::CodeLargeObjectSpace::AddPage(v8::internal::LargePage*, unsigned long)",93957337078384,93957337078710],["v8::internal::PagedSpace::AllocateRawSlow(int, v8::internal::AllocationAlignment, v8::internal::AllocationOrigin)",93957337495664,93957337495921],["v8::internal::ReadOnlySpace::CommittedPhysicalMemory()",93957337499248,93957337499364],["v8::internal::SafepointScope::SafepointScope(v8::internal::Heap*)",93957337501616,93957337501639],["v8::internal::ScavengerCollector::JobTask::GetMaxConcurrency(unsigned long) const",93957337503888,93957337503971],["v8::internal::ScavengerCollector::NumberOfScavengeTasks()",93957337524016,93957337524223],["v8::internal::Scavenger::Finalize()",93957337525984,93957337526502],["v8::internal::ScavengerCollector::ClearYoungEphemerons(v8::internal::Worklist<v8::internal::EphemeronHashTable, 128>*)",93957337527152,93957337528162],["v8::internal::SlotCallbackResult v8::internal::Scavenger::ScavengeObject<v8::internal::FullHeapObjectSlot>(v8::internal::FullHeapObjectSlot, v8::internal::HeapObject)",93957337529712,93957337535918],["v8::internal::ScavengerCollector::JobTask::~JobTask()",93957337536000,93957337536083],["v8::internal::IterateAndScavengePromotedObjectsVisitor::VisitEmbeddedPointer(v8::internal::Code, v8::internal::RelocInfo*)",93957337539280,93957337540033],["void v8::internal::CallIterateBody::apply<v8::internal::CodeDataContainer::BodyDescriptor, v8::internal::IterateAndScavengePromotedObjectsVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::IterateAndScavengePromotedObjectsVisitor*)",93957337569888,93957337569946],["void v8::internal::JSDataView::BodyDescriptor::IterateBody<v8::internal::IterateAndScavengePromotedObjectsVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::IterateAndScavengePromotedObjectsVisitor*)",93957337573600,93957337573812],["void v8::internal::SubclassBodyDescriptor<v8::internal::FixedBodyDescriptor<4, 28, 28>, v8::internal::FixedBodyDescriptor<28, 72, 72> >::IterateBody<v8::internal::IterateAndScavengePromotedObjectsVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::IterateAndScavengePromotedObjectsVisitor*)",93957337574768,93957337574824],["v8::internal::TypedSlots::~TypedSlots()",93957337594288,93957337594391],["v8::internal::Page::MoveOldToNewRememberedSetForSweeping()",93957337595712,93957337595768],["v8::internal::Page::DestroyBlackArea(unsigned long, unsigned long)",93957337597568,93957337598005],["v8::internal::Space::AddAllocationObserver(v8::internal::AllocationObserver*)",93957337598544,93957337598558],["v8::internal::Space::PauseAllocationObservers()",93957337598576,93957337598589],["v8::internal::SpaceWithLinearArea::ComputeLimit(unsigned long, unsigned long, unsigned long)",93957337598608,93957337598738],["v8::internal::SpaceWithLinearArea::PrintAllocationsOrigins()",93957337598784,93957337598858],["v8::internal::LocalAllocationBuffer::MakeIterable()",93957337598976,93957337599013],["v8::internal::LocalAllocationBuffer::LocalAllocationBuffer(v8::internal::LocalAllocationBuffer&&)",93957337599088,93957337599143],["v8::internal::SpaceWithLinearArea::AddAllocationObserver(v8::internal::AllocationObserver*)",93957337599200,93957337599362],["v8::internal::interpreter::BytecodeGenerator::VisitIfStatement(v8::internal::IfStatement*)",93957337909952,93957337910537],["v8::internal::interpreter::BytecodeGenerator::VisitForNullishTest(v8::internal::Expression*, v8::internal::interpreter::BytecodeLabels*, v8::internal::interpreter::BytecodeLabels*, v8::internal::interpreter::BytecodeLabels*)",93957337996784,93957337997082],["v8::internal::interpreter::Register::current_context()",93957338014128,93957338014139],["v8::internal::interpreter::ConstantArrayBuilder::CreateReservedEntry()",93957338025376,93957338025515],["v8::internal::interpreter::TryCatchBuilder::EndCatch()",93957338028432,93957338028453],["v8::internal::interpreter::HandlerTableBuilder::SetTryRegionStart(int, unsigned long)",93957338030064,93957338030084],["v8::internal::interpreter::Interpreter::NewSourcePositionCollectionJob(v8::internal::ParseInfo*, v8::internal::FunctionLiteral*, v8::internal::Handle<v8::internal::BytecodeArray>, v8::internal::AccountingAllocator*, v8::internal::LocalIsolate*)",93957338034528,93957338034764],["v8::internal::JsonParser<unsigned char>::ScanUnicodeCharacter()",93957338042768,93957338043017],["v8::base::SmallVector<v8::internal::JsonProperty, 16ul>::resize_no_init(unsigned long)",93957338050832,93957338050909],["v8::internal::JsonParser<unsigned short>::ScanUnicodeCharacter()",93957338058032,93957338058281],["v8::internal::JsonParseInternalizer::RecurseAndApply(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::String>)",93957338066704,93957338066916],["_ZN2v88internal11StringShape33DispatchToSpecificTypeWithoutCastIZNS1_22DispatchToSpecificTypeIZNKS0_6String13IsEqualToImplILNS4_12EqualityTypeE0EtEEbNS0_6VectorIKT0_EERKNS0_31SharedStringAccessGuardIfNeededEE19IsEqualToDispatcherbJPKtRmRNS0_22CombinationAssertScopeIJNS0_29PerThreadAssertScopeDebugOnlyILNS0_19PerThreadAssertTypeE0ELb0EEENSJ_ILSK_1ELb0EEEEEESD_EEES8_S4_DpOT1_E17CastingDispatcherbJRS4_SG_SH_SO_SD_EEES8_SR_",93957338068656,93957338069048],["v8::internal::JsonStringifier::CurrentHolder(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957338073856,93957338074120],["v8::internal::JsonStringifier::SerializeString(v8::internal::Handle<v8::internal::String>)",93957338081488,93957338085593],["v8::internal::CircularStructureMessageBuilder::AppendConstructorName(v8::internal::Handle<v8::internal::Object>)",93957338095376,93957338095537],["v8::sampler::SamplerManager::DoSample(v8::RegisterState const&)",93957338110112,93957338110630],["v8::sampler::Sampler::Stop()",93957338111344,93957338111664],["v8::internal::StatsCounterThreadSafe::Increment()",93957338112848,93957338112901],["v8::internal::TimedHistogram::Start(v8::base::ElapsedTimer*, v8::internal::Isolate*)",93957338113136,93957338113266],["v8::internal::Counters::ResetCreateHistogramFunction(void* (*)(char const*, int, int, unsigned long))",93957338120432,93957338127695],["v8::internal::RuntimeCallStats::Enter(v8::internal::RuntimeCallTimer*, v8::internal::RuntimeCallCounterId)",93957338127808,93957338127914],["v8::internal::RuntimeCallStats::Print()",93957338128336,93957338128582],["v8::internal::RuntimeCallStats::EnumerateCounters(std::__1::function<void (char const*, long, v8::base::TimeDelta)>)",93957338129760,93957338130009],["v8::internal::WorkerThreadRuntimeCallStats::GetKey()",93957338130320,93957338130385],["v8::internal::WorkerThreadRuntimeCallStatsScope::~WorkerThreadRuntimeCallStatsScope()",93957338131200,93957338131511],["unsigned int std::__1::__sort3<std::__1::__less<v8::internal::RuntimeCallStatEntries::Entry, v8::internal::RuntimeCallStatEntries::Entry>&, std::__1::reverse_iterator<std::__1::__wrap_iter<v8::internal::RuntimeCallStatEntries::Entry*> > >(std::__1::reverse_iterator<std::__1::__wrap_iter<v8::internal::RuntimeCallStatEntries::Entry*> >, std::__1::reverse_iterator<std::__1::__wrap_iter<v8::internal::RuntimeCallStatEntries::Entry*> >, std::__1::reverse_iterator<std::__1::__wrap_iter<v8::internal::RuntimeCallStatEntries::Entry*> >, std::__1::__less<v8::internal::RuntimeCallStatEntries::Entry, v8::internal::RuntimeCallStatEntries::Entry>&)",93957338134528,93957338135073],["v8::internal::LocalLogger::ScriptEvent(v8::internal::Logger::ScriptEventType, int)",93957338137008,93957338137021],["v8::internal::Log::Log(v8::internal::Logger*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)",93957338137328,93957338137628],["v8::internal::Log::MessageBuilder::WriteToLogFile()",93957338138224,93957338138335],["v8::internal::Log::MessageBuilder::AppendString(v8::internal::String, v8::base::Optional<int>)",93957338138640,93957338138946],["v8::internal::Runtime_BigIntToBoolean(int, unsigned long*, v8::internal::Isolate*)",93957339955872,93957339955973],["v8::internal::Runtime_LoadFromSuper(int, unsigned long*, v8::internal::Isolate*)",93957339972240,93957339972789],["v8::internal::(anonymous namespace)::GetSuperHolder(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::(anonymous namespace)::SuperMode, v8::internal::LookupIterator::Key*)",93957339985408,93957339985950],["v8::internal::Stats_Runtime_MapShrink(int, unsigned long*, v8::internal::Isolate*)",93957339989472,93957339990248],["v8::internal::Stats_Runtime_WeakCollectionSet(int, unsigned long*, v8::internal::Isolate*)",93957339992784,93957339993417],["v8::internal::Stats_Runtime_InstallBaselineCode(int, unsigned long*, v8::internal::Isolate*)",93957339995232,93957339996051],["v8::internal::Stats_Runtime_CompileOptimized_Concurrent(int, unsigned long*, v8::internal::Isolate*)",93957339997456,93957339998053],["v8::internal::Stats_Runtime_FunctionFirstExecution(int, unsigned long*, v8::internal::Isolate*)",93957339999408,93957340000300],["v8::internal::Runtime_InstantiateAsmJs(int, unsigned long*, v8::internal::Isolate*)",93957340001056,93957340001816],["v8::internal::Runtime_NotifyDeoptimized(int, unsigned long*, v8::internal::Isolate*)",93957340002960,93957340003833],["v8_inspector::V8Debugger::interruptAndBreak(int)::$_1::__invoke(v8::Isolate*, void*)",93957340058672,93957340058682],["v8::internal::Runtime_AsyncGeneratorResolve(int, unsigned long*, v8::internal::Isolate*)",93957340079616,93957340079653],["v8::internal::Runtime_ThrowRangeError(int, unsigned long*, v8::internal::Isolate*)",93957340086656,93957340086940],["v8::internal::Runtime_NewError(int, unsigned long*, v8::internal::Isolate*)",93957340093408,93957340093683],["v8::internal::Runtime_ThrowIteratorResultNotAnObject(int, unsigned long*, v8::internal::Isolate*)",93957340097952,93957340098111],["v8::internal::Runtime_ThrowSymbolIteratorInvalid(int, unsigned long*, v8::internal::Isolate*)",93957340099360,93957340099515],["v8::internal::Runtime_ThrowApplyNonFunction(int, unsigned long*, v8::internal::Isolate*)",93957340100768,93957340100942],["v8::internal::Runtime_StackGuardWithGap(int, unsigned long*, v8::internal::Isolate*)",93957340102720,93957340103323],["v8::internal::Stats_Runtime_JSProxyGetHandler(int, unsigned long*, v8::internal::Isolate*)",93957340269520,93957340270035],["v8::internal::Runtime_LoadLookupSlotInsideTypeof(int, unsigned long*, v8::internal::Isolate*)",93957340367664,93957340367874],["v8::internal::Runtime_StringMaxLength(int, unsigned long*, v8::internal::Isolate*)",93957340399664,93957340399694],["v8::internal::Stats_Runtime_ICsAreEnabled(int, unsigned long*, v8::internal::Isolate*)",93957340417360,93957340417824],["v8::internal::Stats_Runtime_GetOptimizationStatus(int, unsigned long*, v8::internal::Isolate*)",93957340430848,93957340432941],["v8::internal::Stats_Runtime_ScheduleGCInStackCheck(int, unsigned long*, v8::internal::Isolate*)",93957340438640,93957340439087],["v8::internal::Stats_Runtime_SetForceSlowPath(int, unsigned long*, v8::internal::Isolate*)",93957340446304,93957340446792],["v8::internal::Stats_Runtime_InLargeObjectSpace(int, unsigned long*, v8::internal::Isolate*)",93957340452768,93957340453347],["v8::internal::Stats_Runtime_RegexpTypeTag(int, unsigned long*, v8::internal::Isolate*)",93957340457984,93957340458682],["v8::internal::Stats_Runtime_HasObjectElements(int, unsigned long*, v8::internal::Isolate*)",93957340460928,93957340461464],["v8::internal::Stats_Runtime_HasDictionaryElements(int, unsigned long*, v8::internal::Isolate*)",93957340463584,93957340464120],["v8::internal::Stats_Runtime_HasFixedUint8Elements(int, unsigned long*, v8::internal::Isolate*)",93957340466224,93957340466760],["v8::internal::Stats_Runtime_HasFixedUint32Elements(int, unsigned long*, v8::internal::Isolate*)",93957340468848,93957340469384],["v8::internal::Stats_Runtime_HasFixedUint8ClampedElements(int, unsigned long*, v8::internal::Isolate*)",93957340471472,93957340472008],["v8::internal::Stats_Runtime_TypedArraySpeciesProtector(int, unsigned long*, v8::internal::Isolate*)",93957340474032,93957340474534],["v8::internal::Stats_Runtime_MapIteratorProtector(int, unsigned long*, v8::internal::Isolate*)",93957340476464,93957340476966],["v8::internal::Stats_Runtime_ArrayIteratorProtector(int, unsigned long*, v8::internal::Isolate*)",93957340478288,93957340478790],["v8::internal::Stats_Runtime_HeapObjectVerify(int, unsigned long*, v8::internal::Isolate*)",93957340479808,93957340480382],["v8::internal::Stats_Runtime_TypedArrayMaxLength(int, unsigned long*, v8::internal::Isolate*)",93957340481232,93957340481748],["v8::internal::Stats_Runtime_TurbofanStaticAssert(int, unsigned long*, v8::internal::Isolate*)",93957340482624,93957340483080],["v8::internal::Stats_Runtime_EnableCodeLoggingForTesting(int, unsigned long*, v8::internal::Isolate*)",93957340483776,93957340484343],["v8::internal::JSFunction::is_compiled() const",93957340486560,93957340486660],["v8::internal::call_as_function(v8::FunctionCallbackInfo<v8::Value> const&)",93957340487168,93957340487379],["v8::internal::Runtime_ArrayBufferDetach(int, unsigned long*, v8::internal::Isolate*)",93957340487856,93957340488095],["v8::internal::Runtime_TypedArrayGetBuffer(int, unsigned long*, v8::internal::Isolate*)",93957340489968,93957340490179],["v8::internal::Runtime_TypedArraySet(int, unsigned long*, v8::internal::Isolate*)",93957340493280,93957340493907],["std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >::__append(unsigned long)",93957340495120,93957340495379],["bool std::__1::__insertion_sort_incomplete<bool (*&)(float, float), float*>(float*, float*, bool (*&)(float, float))",93957340498032,93957340498948],["unsigned int std::__1::__sort5<bool (*&)(double, double), v8::internal::UnalignedSlot<double> >(v8::internal::UnalignedSlot<double>, v8::internal::UnalignedSlot<double>, v8::internal::UnalignedSlot<double>, v8::internal::UnalignedSlot<double>, v8::internal::UnalignedSlot<double>, bool (*&)(double, double))",93957340500560,93957340500825],["unsigned int std::__1::__sort3<std::__1::__less<unsigned long, unsigned long>&, v8::internal::UnalignedSlot<unsigned long> >(v8::internal::UnalignedSlot<unsigned long>, v8::internal::UnalignedSlot<unsigned long>, v8::internal::UnalignedSlot<unsigned long>, std::__1::__less<unsigned long, unsigned long>&)",93957340502560,93957340502665],["void std::__1::__sort<std::__1::__less<long, long>&, v8::internal::UnalignedSlot<long> >(v8::internal::UnalignedSlot<long>, v8::internal::UnalignedSlot<long>, std::__1::__less<long, long>&)",93957340503280,93957340504331],["bool std::__1::__insertion_sort_incomplete<std::__1::__less<long, long>&, v8::internal::UnalignedSlot<long> >(v8::internal::UnalignedSlot<long>, v8::internal::UnalignedSlot<long>, std::__1::__less<long, long>&)",93957340504704,93957340505043],["v8::internal::Runtime_JSFinalizationRegistryRegisterWeakCellWithUnregisterToken(int, unsigned long*, v8::internal::Isolate*)",93957340506336,93957340506603],["v8::internal::Runtime_JSWeakRefAddToKeptObjects(int, unsigned long*, v8::internal::Isolate*)",93957340507280,93957340507481],["v8::internal::JSFinalizationRegistry::RegisterWeakCellWithUnregisterToken(v8::internal::Handle<v8::internal::JSFinalizationRegistry>, v8::internal::Handle<v8::internal::WeakCell>, v8::internal::Isolate*)",93957340508096,93957340508920],["v8::internal::Runtime::IsNonReturning(v8::internal::Runtime::FunctionId)",93957340509008,93957340509065],["v8::internal::Runtime::FunctionForName(unsigned char const*, int)",93957340509184,93957340509493],["v8::internal::Runtime::FunctionForEntry(unsigned long)",93957340510064,93957340510154],["v8::internal::Runtime::RuntimeFunctionTable(v8::internal::Isolate*)",93957340510192,93957340510205],["v8::internal::(anonymous namespace)::IntrinsicFunctionIdentifier::Match(void*, void*)",93957340510272,93957340510307],["v8::internal::CodeSerializer::Serialize(v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957340510496,93957340512120],["v8::internal::SerializedData::~SerializedData()",93957340512176,93957340512213],["v8::internal::CodeSerializer::SerializeObjectImpl(v8::internal::Handle<v8::internal::HeapObject>)",93957340512464,93957340513819],["v8::internal::TorqueGeneratedScript<v8::internal::Script, v8::internal::Struct>::set_host_defined_options(v8::internal::FixedArray, v8::internal::WriteBarrierMode)",93957340513968,93957340514092],["v8::internal::CodeSerializer::Deserialize(v8::internal::Isolate*, v8::internal::ScriptData*, v8::internal::Handle<v8::internal::String>, v8::ScriptOriginOptions)",93957340515216,93957340517306],["v8::internal::SerializedCodeData::SanityCheck(unsigned int) const",93957340517808,93957340518100],["v8::internal::CodeSerializer::~CodeSerializer()",93957340518144,93957340518197],["v8::internal::Serializer::~Serializer()",93957340518272,93957340518577],["v8::internal::IdentityMap<int, v8::base::DefaultAllocationPolicy>::~IdentityMap()",93957340518640,93957340518686],["v8::internal::ContextDeserializer::DeserializeContext(v8::internal::Isolate*, v8::internal::SnapshotData const*, bool, v8::internal::Handle<v8::internal::JSGlobalProxy>, v8::DeserializeInternalFieldsCallback)",93957340518720,93957340518912],["v8::internal::Deserializer::AddAttachedObject(v8::internal::Handle<v8::internal::HeapObject>)",93957340519168,93957340519442],["v8::internal::ContextDeserializer::SetupOffHeapArrayBufferBackingStores()",93957340520000,93957340520237],["v8::internal::ContextSerializer::~ContextSerializer()",93957340520352,93957340520421],["v8::internal::ContextSerializer::Serialize(v8::internal::Context*, v8::internal::CombinationAssertScope<v8::internal::PerThreadAssertScopeDebugOnly<(v8::internal::PerThreadAssertType)0, false>, v8::internal::PerThreadAssertScopeDebugOnly<(v8::internal::PerThreadAssertType)1, false> > const&)",93957340520512,93957340521121],["v8::internal::ContextSerializer::SerializeJSObjectWithEmbedderFields(v8::internal::Handle<v8::internal::HeapObject>)",93957340521808,93957340523413],["v8::internal::Deserializer::Deserializer(v8::internal::Isolate*, v8::internal::Vector<unsigned char const>, unsigned int, bool, bool)",93957340523488,93957340523750],["std::__1::shared_ptr<v8::internal::BackingStore>::~shared_ptr()",93957340523824,93957340523887],["v8::internal::Deserializer::~Deserializer()",93957340523984,93957340524414],["v8::internal::Deserializer::Synchronize(v8::internal::VisitorSynchronization::SyncTag)",93957340524528,93957340524575],["v8::internal::Deserializer::ReadObject(v8::internal::SnapshotSpace)",93957340524656,93957340525188],["v8::internal::Deserializer::WeakenDescriptorArrays()",93957340525344,93957340525514],["v8::internal::StringTableInsertionKey::StringTableInsertionKey(v8::internal::Handle<v8::internal::String>)",93957340525632,93957340525727],["v8::internal::Deserializer::PostProcessNewObject(v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::SnapshotSpace)",93957340525776,93957340528009],["v8::internal::JSTypedArray::SetOnHeapDataPtr(v8::internal::Isolate*, v8::internal::HeapObject, unsigned long)",93957340528192,93957340528335],["v8::internal::Deserializer::ReadExternalReferenceCase()",93957340530416,93957340530518],["v8::internal::RootsSerializer::Synchronize(v8::internal::VisitorSynchronization::SyncTag)",93957340543168,93957340543194],["v8::internal::CancelableTaskManager::CancelableTaskManager()",93957340600512,93957340600578],["v8::tracing::TracingCategoryObserver::OnTraceDisabled()",93957340607360,93957340607410],["v8_inspector::(anonymous namespace)::buildSampingHeapProfileNode(v8::Isolate*, v8::AllocationProfile::Node const*)",93957342558304,93957342558964],["v8_inspector::(anonymous namespace)::HeapSnapshotOutputStream::WriteAsciiChunk(char*, int)",93957342560224,93957342560307],["v8_crdtp::ContainerSerializer::EncodeStop()",93957342800656,93957342800903],["Cr_z_adler32_simd_",93957342805872,93957342806526],["v8::internal::compiler::MoveOptimizer::MoveOptimizer(v8::internal::Zone*, v8::internal::compiler::InstructionSequence*)",93957343047184,93957343047248],["void std::__1::set<v8::internal::compiler::InstructionOperand, v8::internal::compiler::OperandAsKeyLess, v8::internal::ZoneAllocator<v8::internal::compiler::InstructionOperand> >::insert<std::__1::__tree_const_iterator<v8::internal::compiler::InstructionOperand, std::__1::__tree_node<v8::internal::compiler::InstructionOperand, void*>*, long> >(std::__1::__tree_const_iterator<v8::internal::compiler::InstructionOperand, std::__1::__tree_node<v8::internal::compiler::InstructionOperand, void*>*, long>, std::__1::__tree_const_iterator<v8::internal::compiler::InstructionOperand, std::__1::__tree_node<v8::internal::compiler::InstructionOperand, void*>*, long>)",93957343077664,93957343077991],["v8::internal::compiler::LiveRange::FirstHintPosition(int*)",93957343088768,93957343089023],["v8::internal::compiler::TopLevelLiveRange::CommitSpillMoves(v8::internal::compiler::TopTierRegisterAllocationData*, v8::internal::compiler::InstructionOperand const&)",93957343089648,93957343089899],["v8::internal::compiler::BytecodeGraphBuilder::VisitJumpIfNotUndefined()",93957343252672,93957343252813],["v8::internal::compiler::BytecodeGraphBuilder::BuildLdaLookupGlobalSlot(v8::internal::TypeofMode)",93957343267632,93957343268393],["v8::internal::Handle<v8::internal::FixedArray> v8::internal::compiler::JSHeapBroker::CanonicalPersistentHandle<v8::internal::FixedArray>(v8::internal::FixedArray)",93957343282496,93957343282727],["std::__1::__hash_table<std::__1::__hash_value_type<long, v8::internal::compiler::Node*>, std::__1::__unordered_map_hasher<long, std::__1::__hash_value_type<long, v8::internal::compiler::Node*>, v8::base::hash<long>, std::__1::equal_to<long>, true>, std::__1::__unordered_map_equal<long, std::__1::__hash_value_type<long, v8::internal::compiler::Node*>, std::__1::equal_to<long>, v8::base::hash<long>, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<long, v8::internal::compiler::Node*> > >::__rehash(unsigned long)",93957343287072,93957343287788],["v8::internal::compiler::CommonOperatorReducer::ReduceBranch(v8::internal::compiler::Node*)",93957343294016,93957343294909],["v8::internal::compiler::(anonymous namespace)::DecideCondition(v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::Node*)",93957343300304,93957343300580],["v8::internal::compiler::OsrValueIndexOf(v8::internal::compiler::Operator const*)",93957343301808,93957343301817],["v8::internal::compiler::CommonOperatorBuilder::Branch(v8::internal::compiler::BranchHint, v8::internal::compiler::IsSafetyCheck)",93957343302752,93957343302951],["v8::base::BoundedPageAllocator::AllocatePageSize()",93957343304608,93957343304618],["v8::internal::compiler::SparseInputMask::InputIterator::Advance()",93957343304800,93957343304833],["v8::internal::compiler::SparseInputMask::InputIterator::AdvanceToNextRealOrEnd()",93957343304880,93957343304908],["v8::internal::compiler::SparseInputMask::InputIterator::IsEnd() const",93957343304960,93957343305036],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::TypedStateValueInfo const&)",93957343305088,93957343305362],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::IfValueParameters const&)",93957343305440,93957343305613],["v8::internal::compiler::WasmLoopUnrollingPhase::Run(v8::internal::compiler::PipelineData*, v8::internal::Zone*, std::__1::vector<v8::internal::compiler::WasmLoopInfo, std::__1::allocator<v8::internal::compiler::WasmLoopInfo> >*)",93957344709616,93957344710082],["v8::internal::compiler::RepresentationChanger::InsertChangeFloat64ToUint32(v8::internal::compiler::Node*)",93957344734624,93957344734690],["v8::internal::compiler::BasicBlock::GetCommonDominator(v8::internal::compiler::BasicBlock*, v8::internal::compiler::BasicBlock*)",93957344737920,93957344737964],["v8::internal::compiler::Schedule::AddDeoptimize(v8::internal::compiler::BasicBlock*, v8::internal::compiler::Node*)",93957344743760,93957344743963],["v8::internal::compiler::Scheduler::ComputeSchedule(v8::internal::Zone*, v8::internal::compiler::Graph*, v8::base::Flags<v8::internal::compiler::Scheduler::Flag, int>, v8::internal::TickCounter*, v8::internal::ProfileDataFromFile const*)",93957344752608,93957344753666],["v8::internal::compiler::Scheduler::GenerateDominatorTree()",93957344754848,93957344755090],["v8::internal::compiler::SimdScalarLowering::LowerConvertFromFloat(v8::internal::compiler::Node*, bool)",93957345234144,93957345235361],["v8::internal::compiler::WasmGraphBuilder::TrapIfFalse(v8::internal::wasm::TrapReason, v8::internal::compiler::Node*, int)",93957345271168,93957345271360],["v8::internal::compiler::WasmGraphBuilder::GetBaseAndOffsetForImportedMutableExternRefGlobal(v8::internal::wasm::WasmGlobal const&, v8::internal::compiler::Node**, v8::internal::compiler::Node**)",93957345292288,93957345292839],["v8::internal::compiler::WasmGraphBuilder::SimdLaneOp(v8::internal::wasm::WasmOpcode, unsigned char, v8::internal::compiler::Node* const*)",93957345306272,93957345306724],["v8::internal::compiler::WasmGraphBuilder::RefCast(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::WasmGraphBuilder::ObjectReferenceKnowledge, int)",93957345317776,93957345318195],["v8::internal::compiler::WasmGraphBuilder::I31New(v8::internal::compiler::Node*)",93957345323136,93957345323181],["v8::internal::compiler::ExecuteTurbofanWasmCompilation(v8::internal::wasm::WasmEngine*, v8::internal::wasm::CompilationEnv*, v8::internal::wasm::FunctionBody const&, int, v8::internal::Counters*, v8::internal::wasm::WasmFeatures*)",93957345351136,93957345356189],["void std::__1::__function::__policy_invoker<void (v8::internal::compiler::Node*, v8::internal::compiler::BranchHint)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::WasmGraphBuilder::CastCallbacks(v8::internal::compiler::GraphAssemblerLabel<0ul>*, int)::$_5, void (v8::internal::compiler::Node*, v8::internal::compiler::BranchHint)> >(std::__1::__function::__policy_storage const*, v8::internal::compiler::Node*, v8::internal::compiler::BranchHint)",93957345369184,93957345369211],["void std::__1::__sort<std::__1::__less<unsigned short, unsigned short>&, unsigned short*>(unsigned short*, unsigned short*, std::__1::__less<unsigned short, unsigned short>&)",93957346619328,93957346620874],["std::__1::basic_streambuf<wchar_t, std::__1::char_traits<wchar_t> >::uflow()",93957346637040,93957346637088],["std::__1::basic_ostream<char, std::__1::char_traits<char> >::operator<<(unsigned int)",93957346639856,93957346640250],["std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > std::__1::num_get<char, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > >::__do_get_floating_point<double>(std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, unsigned int&, double&) const",93957346666000,93957346667259],["std::__1::num_get<wchar_t, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::do_get(std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, unsigned int&, long double&) const",93957346683184,93957346683194],["wchar_t const* std::__1::__num_get<wchar_t>::__do_widen_p<wchar_t>(std::__1::ios_base&, wchar_t*) const",93957346689632,93957346689903],["strfmon",139871563560336,139871563560528],["makecontext",139871563569040,139871563569633],["strtof128_l",139871563589840,139871563589850],["ctermid",139871563591008,139871563591041],["__printf_fp",139871563603488,139871563603513],["__getdelim",139871563740880,139871563741613],["pthread_cond_destroy",139871563803296,139871563803331],["pthread_attr_getdetachstate",139871563805696,139871563805707],["mbrtoc32",139871564002064,139871564002083],["__fork",139871564092528,139871564092986],["re_search",139871564188960,139871564188981],["posix_spawn_file_actions_addchdir_np",139871564232016,139871564232134],["mkfifo",139871564235504,139871564235576],["lchmod",139871564237424,139871564237444],["__openat64_2",139871564238416,139871564238455],["putpmsg",139871564546816,139871564546836],["__nss_next",139871564548400,139871564548406],["__GI___pthread_mutex_unlock",139871566602128,139871566602138],["__pthread_cond_signal",139871566614384,139871566615189],["__cxxabiv1::__class_type_info::~__class_type_info()",93957335214464,93957335214492],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::wasm::WasmCode const*, std::__1::unique_ptr<v8::internal::wasm::DebugSideTable, std::__1::default_delete<v8::internal::wasm::DebugSideTable> > >, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::wasm::WasmCode const*, std::__1::unique_ptr<v8::internal::wasm::DebugSideTable, std::__1::default_delete<v8::internal::wasm::DebugSideTable> > >, std::__1::__unordered_map_hasher<v8::internal::wasm::WasmCode const*, std::__1::__hash_value_type<v8::internal::wasm::WasmCode const*, std::__1::unique_ptr<v8::internal::wasm::DebugSideTable, std::__1::default_delete<v8::internal::wasm::DebugSideTable> > >, std::__1::hash<v8::internal::wasm::WasmCode const*>, std::__1::equal_to<v8::internal::wasm::WasmCode const*>, true>, std::__1::__unordered_map_equal<v8::internal::wasm::WasmCode const*, std::__1::__hash_value_type<v8::internal::wasm::WasmCode const*, std::__1::unique_ptr<v8::internal::wasm::DebugSideTable, std::__1::default_delete<v8::internal::wasm::DebugSideTable> > >, std::__1::equal_to<v8::internal::wasm::WasmCode const*>, std::__1::hash<v8::internal::wasm::WasmCode const*>, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::wasm::WasmCode const*, std::__1::unique_ptr<v8::internal::wasm::DebugSideTable, std::__1::default_delete<v8::internal::wasm::DebugSideTable> > > > >::__emplace_unique_key_args<v8::internal::wasm::WasmCode const*, std::__1::piecewise_construct_t const&, std::__1::tuple<v8::internal::wasm::WasmCode const* const&>, std::__1::tuple<> >(v8::internal::wasm::WasmCode const* const&, std::__1::piecewise_construct_t const&, std::__1::tuple<v8::internal::wasm::WasmCode const* const&>&&, std::__1::tuple<>&&)",93957335313280,93957335314162],["v8::internal::Handle<v8::internal::ExternalOneByteString> v8::internal::Factory::InternalizeExternalString<v8::internal::ExternalOneByteString>(v8::internal::Handle<v8::internal::String>)",93957336847184,93957336847548],["v8::internal::Factory::NewEnumCache(v8::internal::Handle<v8::internal::FixedArray>, v8::internal::Handle<v8::internal::FixedArray>)",93957336850576,93957336850909],["v8::internal::Factory::NewPropertyArray(int)",93957336851616,93957336851774],["v8::internal::Heap::IncrementDeferredCount(v8::Isolate::UseCounterFeature)",93957336964912,93957336964928],["v8::internal::Heap::InvokeNearHeapLimitCallback()",93957336985920,93957336986160],["v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags)",93957336988624,93957336990994],["v8::internal::Heap::IncrementalMarkingLimitReached()",93957336994288,93957336994871],["v8::internal::MemMove(void*, void const*, unsigned long)",93957336995728,93957336995997],["v8::internal::Heap::RequestCollectionBackground(v8::internal::LocalHeap*)",93957336997536,93957336997610],["v8::internal::Heap::MarkCompact()",93957336998064,93957336999206],["v8::internal::Heap::UpdateYoungReferencesInExternalStringTable(v8::internal::String (*)(v8::internal::Heap*, v8::internal::FullObjectSlot))",93957337007456,93957337007707],["v8::internal::Heap::PerformIdleTimeAction(v8::internal::GCIdleTimeAction, v8::internal::GCIdleTimeHeapState, double)",93957337013904,93957337014417],["v8::internal::Heap::MeasureMemoryDelegate(v8::internal::Handle<v8::internal::NativeContext>, v8::internal::Handle<v8::internal::JSPromise>, v8::MeasureMemoryMode)",93957337019536,93957337019550],["v8::internal::Heap::IterateSmiRoots(v8::internal::RootVisitor*)",93957337020320,93957337020413],["v8::internal::Heap::RecordStats(v8::internal::HeapStats*, bool)",93957337022768,93957337023605],["v8::internal::Heap::ShouldExpandOldGenerationOnSlowAllocation(v8::internal::LocalHeap*)",93957337024208,93957337024621],["v8::internal::Heap::NextStressMarkingLimit()",93957337025168,93957337025205],["v8::internal::OldLargeObjectSpace::ClearMarkingStateOfLiveObjects()",93957337074128,93957337074741],["v8::internal::NewLargeObjectSpace::Available()",93957337077440,93957337077472],["v8::internal::CodeLargeObjectSpace::AllocateRaw(int)",93957337078368,93957337078383],["v8::internal::CodeLargeObjectSpace::RemovePage(v8::internal::LargePage*, unsigned long)",93957337078720,93957337078941],["v8::internal::PagedSpace::UnmarkLinearAllocationArea()",93957337492368,93957337492415],["v8::internal::ReadOnlyHeap::ExtendReadOnlyObjectCache()",93957337496976,93957337497255],["v8::internal::ReadOnlySpace::RepairFreeSpacesAfterDeserialization()",93957337498288,93957337498430],["v8::internal::ReadOnlySpace::ShrinkPages()",93957337500288,93957337500458],["v8::internal::GlobalSafepoint::WaitInUnpark()",93957337501472,93957337501536],["v8::internal::GlobalSafepoint::Iterate(v8::internal::RootVisitor*)",93957337501824,93957337501882],["v8::internal::ScavengerCollector::JobTask::Run(v8::JobDelegate*)",93957337502704,93957337503516],["v8::internal::Scavenger::ScavengePage(v8::internal::MemoryChunk*)",93957337513088,93957337516773],["v8::internal::Worklist<v8::internal::MemoryChunk*, 64>::Worklist()",93957337523568,93957337524003],["v8::internal::Scavenger::PromotionList::PromotionList(int)",93957337524224,93957337524869],["v8::internal::(anonymous namespace)::IsUnscavengedHeapObjectSlot(v8::internal::Heap*, v8::internal::FullObjectSlot)",93957337525936,93957337525978],["v8::internal::Scavenger::Scavenger(v8::internal::ScavengerCollector*, v8::internal::Heap*, bool, v8::internal::Worklist<v8::internal::MemoryChunk*, 64>*, v8::internal::Worklist<std::__1::pair<v8::internal::HeapObject, int>, 256>*, v8::internal::Scavenger::PromotionList*, v8::internal::Worklist<v8::internal::EphemeronHashTable, 128>*, int)",93957337526512,93957337526964],["v8::internal::IterateAndScavengePromotedObjectsVisitor::VisitPointers(v8::internal::HeapObject, v8::internal::CompressedObjectSlot, v8::internal::CompressedObjectSlot)",93957337536592,93957337537468],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::HeapObject, v8::internal::Map>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::HeapObject, v8::internal::Map>, std::__1::__unordered_map_hasher<v8::internal::HeapObject, std::__1::__hash_value_type<v8::internal::HeapObject, v8::internal::Map>, v8::internal::Object::Hasher, std::__1::equal_to<v8::internal::HeapObject>, true>, std::__1::__unordered_map_equal<v8::internal::HeapObject, std::__1::__hash_value_type<v8::internal::HeapObject, v8::internal::Map>, std::__1::equal_to<v8::internal::HeapObject>, v8::internal::Object::Hasher, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::HeapObject, v8::internal::Map> > >::__emplace_unique_key_args<v8::internal::HeapObject, std::__1::pair<v8::internal::HeapObject const, v8::internal::Map> >(v8::internal::HeapObject const&, std::__1::pair<v8::internal::HeapObject const, v8::internal::Map>&&)",93957337564640,93957337565434],["v8::internal::SlotSet::Bucket::IsEmpty()",93957337567888,93957337568126],["void v8::internal::EphemeronHashTable::BodyDescriptor::IterateBody<v8::internal::IterateAndScavengePromotedObjectsVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::IterateAndScavengePromotedObjectsVisitor*)",93957337570960,93957337571370],["void v8::internal::JSWeakCollection::BodyDescriptorImpl::IterateBody<v8::internal::IterateAndScavengePromotedObjectsVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::IterateAndScavengePromotedObjectsVisitor*)",93957337573168,93957337573364],["void v8::internal::WeakCell::BodyDescriptor::IterateBody<v8::internal::IterateAndScavengePromotedObjectsVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::IterateAndScavengePromotedObjectsVisitor*)",93957337574064,93957337574171],["void v8::internal::AllocationSite::BodyDescriptor::IterateBody<v8::internal::IterateAndScavengePromotedObjectsVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::IterateAndScavengePromotedObjectsVisitor*)",93957337574592,93957337574679],["void v8::internal::BodyDescriptorBase::IterateJSObjectBodyImpl<v8::internal::ScavengeVisitor>(v8::internal::Map, v8::internal::HeapObject, int, int, v8::internal::ScavengeVisitor*)",93957337574896,93957337575269],["v8::internal::SlotCallbackResult v8::internal::Scavenger::EvacuateShortcutCandidate<v8::internal::FullHeapObjectSlot>(v8::internal::Map, v8::internal::FullHeapObjectSlot, v8::internal::ConsString, int)",93957337582016,93957337594163],["v8::internal::TypedSlots::Merge(v8::internal::TypedSlots*)",93957337594880,93957337594933],["v8::internal::Page::ReleaseFreeListCategories()",93957337595472,93957337595617],["v8::internal::Page::ShrinkToHighWaterMark()",93957337596272,93957337596622],["v8::internal::interpreter::BytecodeArrayRandomIterator::UpdateOffsetFromIndex()",93957337881392,93957337881434],["v8::internal::interpreter::BytecodeGenerator::VisitObjectLiteral(v8::internal::ObjectLiteral*)",93957337936128,93957337944686],["v8::internal::interpreter::BytecodeGenerator::VisitNullishExpression(v8::internal::BinaryOperation*)",93957337987328,93957337988071],["std::__1::pair<std::__1::__tree_iterator<std::__1::__value_type<std::__1::tuple<v8::internal::interpreter::BytecodeGenerator::FeedbackSlotCache::SlotKind, int, void const*>, int>, std::__1::__tree_node<std::__1::__value_type<std::__1::tuple<v8::internal::interpreter::BytecodeGenerator::FeedbackSlotCache::SlotKind, int, void const*>, int>, void*>*, long>, bool> std::__1::__tree<std::__1::__value_type<std::__1::tuple<v8::internal::interpreter::BytecodeGenerator::FeedbackSlotCache::SlotKind, int, void const*>, int>, std::__1::__map_value_compare<std::__1::tuple<v8::internal::interpreter::BytecodeGenerator::FeedbackSlotCache::SlotKind, int, void const*>, std::__1::__value_type<std::__1::tuple<v8::internal::interpreter::BytecodeGenerator::FeedbackSlotCache::SlotKind, int, void const*>, int>, std::__1::less<std::__1::tuple<v8::internal::interpreter::BytecodeGenerator::FeedbackSlotCache::SlotKind, int, void const*> >, true>, v8::internal::ZoneAllocator<std::__1::__value_type<std::__1::tuple<v8::internal::interpreter::BytecodeGenerator::FeedbackSlotCache::SlotKind, int, void const*>, int> > >::__emplace_unique_key_args<std::__1::tuple<v8::internal::interpreter::BytecodeGenerator::FeedbackSlotCache::SlotKind, int, void const*>, std::__1::pair<std::__1::tuple<v8::internal::interpreter::BytecodeGenerator::FeedbackSlotCache::SlotKind, int, void const*>, int>&>(std::__1::tuple<v8::internal::interpreter::BytecodeGenerator::FeedbackSlotCache::SlotKind, int, void const*> const&, std::__1::pair<std::__1::tuple<v8::internal::interpreter::BytecodeGenerator::FeedbackSlotCache::SlotKind, int, void const*>, int>&)",93957338003456,93957338003748],["std::__1::__split_buffer<int*, v8::internal::RecyclingZoneAllocator<int*> >::push_back(int*&&)",93957338010288,93957338011225],["v8::internal::interpreter::Bytecodes::GetOperandOffset(v8::internal::interpreter::Bytecode, int, v8::internal::interpreter::OperandScale)",93957338017552,93957338017685],["v8::internal::interpreter::ConstantArrayBuilder::InsertClassFieldsSymbol()",93957338024016,93957338024165],["v8::internal::interpreter::BreakableControlFlowBuilder::EmitJumpIfTrue(v8::internal::interpreter::BytecodeArrayBuilder::ToBooleanMode, v8::internal::interpreter::BytecodeLabels*)",93957338027200,93957338027240],["v8::internal::interpreter::TryCatchBuilder::~TryCatchBuilder()",93957338028192,93957338028235],["v8::internal::interpreter::TryFinallyBuilder::EndTry()",93957338028704,93957338028724],["v8::internal::Handle<v8::internal::ByteArray> v8::internal::interpreter::HandlerTableBuilder::ToHandlerTable<v8::internal::Isolate>(v8::internal::Isolate*)",93957338029296,93957338029504],["v8::internal::interpreter::HandlerTableBuilder::SetContextRegister(int, v8::internal::interpreter::Register)",93957338030192,93957338030212],["v8::internal::CompilationJob::Status v8::internal::interpreter::InterpreterCompilationJob::DoFinalizeJobImpl<v8::internal::Isolate>(v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Isolate*)",93957338031584,93957338032691],["v8::internal::interpreter::InterpreterCompilationJob::~InterpreterCompilationJob()",93957338036208,93957338036497],["v8::internal::JsonParser<unsigned char>::~JsonParser()",93957338037840,93957338037907],["v8::internal::Handle<v8::internal::String> v8::internal::JsonParser<unsigned char>::DecodeString<v8::internal::SeqTwoByteString>(v8::internal::JsonString const&, v8::internal::Handle<v8::internal::SeqTwoByteString>, v8::internal::Handle<v8::internal::String>)",93957338044112,93957338044372],["v8::internal::Map::IsDetached(v8::internal::Isolate*) const",93957338046032,93957338046140],["v8::internal::TransitionsAccessor::ExpectedTransitionKey()",93957338051648,93957338051932],["v8::internal::JsonParser<unsigned short>::ReportUnexpectedToken(v8::internal::JsonToken)",93957338057120,93957338057540],["v8::internal::JsonParser<unsigned short>::MakeString(v8::internal::JsonString const&, v8::internal::Handle<v8::internal::String>)",93957338058704,93957338059115],["v8::internal::JsonParser<unsigned short>::BuildJsonObject(v8::internal::JsonParser<unsigned short>::JsonContinuation const&, v8::base::SmallVector<v8::internal::JsonProperty, 16ul> const&, v8::internal::Handle<v8::internal::Map>)",93957338060688,93957338065372],["void v8::internal::JsonParser<unsigned char>::DecodeString<unsigned short>(unsigned short*, int, int)",93957338067328,93957338067835],["v8::base::SmallVector<v8::internal::CharacterRange, 8ul>::Grow()",93957338068496,93957338068508],["void v8::internal::JsonParser<unsigned short>::DecodeString<unsigned short>(unsigned short*, int, int)",93957338069472,93957338069963],["v8::internal::JsonStringifier::ApplyToJsonFunction(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957338072880,93957338073478],["v8::internal::JsonStringifier::ConstructCircularStructureErrorMessage(v8::internal::Handle<v8::internal::Object>, unsigned long)",93957338074368,93957338074690],["v8::internal::CircularStructureMessageBuilder::AppendClosingLine(v8::internal::Handle<v8::internal::Object>)",93957338078080,93957338079786],["v8::internal::JsonStringifier::SerializeDouble(double)",93957338085872,93957338086505],["v8::internal::JsonStringifier::Result v8::internal::JsonStringifier::Serialize_<false>(v8::internal::Handle<v8::internal::Object>, bool, v8::internal::Handle<v8::internal::Object>)",93957338089536,93957338095222],["v8::internal::CircularStructureMessageBuilder::AppendSmi(v8::internal::Smi)",93957338098000,93957338098242],["v8::sampler::SamplerManager::AddSampler(v8::sampler::Sampler*)",93957338108944,93957338109487],["v8::sampler::Sampler::Sampler(v8::Isolate*)",93957338110816,93957338110888],["v8::sampler::SignalHandler::IncreaseSamplerCount()",93957338111072,93957338111344],["v8::sampler::Sampler::DoSample()",93957338111664,93957338111868],["v8::internal::StatsCounterBase::FindLocationInStatsTable() const",93957338112816,93957338112843],["v8::internal::StatsCounterThreadSafe::Increment(int)",93957338112912,93957338112983],["v8::internal::TimedHistogram::AddTimedSample(v8::base::TimeDelta)",93957338113040,93957338113133],["v8::internal::TimedHistogram::Stop(v8::base::ElapsedTimer*, v8::internal::Isolate*)",93957338113280,93957338113478],["v8::internal::Counters::ResetCounterFunction(int* (*)(char const*))",93957338115952,93957338120427],["v8::internal::RuntimeCallTimer::NowCPUTime()",93957338127696,93957338127706],["v8::internal::RuntimeCallCounter::Dump(v8::tracing::TracedValue*)",93957338127728,93957338127795],["v8::internal::RuntimeCallStats::Leave(v8::internal::RuntimeCallTimer*)",93957338127920,93957338128134],["v8::internal::RuntimeCallStats::CorrectCurrentCounterId(v8::internal::RuntimeCallCounterId, v8::internal::RuntimeCallStats::CounterMode)",93957338128272,93957338128324],["v8::internal::RuntimeCallStats::Print(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)",93957338128592,93957338128870],["v8::internal::RuntimeCallStatEntries::Print(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)",93957338129040,93957338129756],["v8::internal::RuntimeCallStats::Reset()",93957338130016,93957338130108],["v8::internal::WorkerThreadRuntimeCallStats::~WorkerThreadRuntimeCallStats()",93957338130192,93957338130320],["v8::internal::WorkerThreadRuntimeCallStats::NewTable()",93957338130400,93957338130694],["v8::internal::WorkerThreadRuntimeCallStatsScope::WorkerThreadRuntimeCallStatsScope(v8::internal::WorkerThreadRuntimeCallStats*)",93957338131072,93957338131197],["v8::internal::RuntimeCallStatEntries::Entry::SetTotal(v8::base::TimeDelta, unsigned long)",93957338131520,93957338131706],["void std::__1::__sort<std::__1::__less<v8::internal::RuntimeCallStatEntries::Entry, v8::internal::RuntimeCallStatEntries::Entry>&, std::__1::reverse_iterator<std::__1::__wrap_iter<v8::internal::RuntimeCallStatEntries::Entry*> > >(std::__1::reverse_iterator<std::__1::__wrap_iter<v8::internal::RuntimeCallStatEntries::Entry*> >, std::__1::reverse_iterator<std::__1::__wrap_iter<v8::internal::RuntimeCallStatEntries::Entry*> >, std::__1::__less<v8::internal::RuntimeCallStatEntries::Entry, v8::internal::RuntimeCallStatEntries::Entry>&)",93957338132128,93957338134520],["unsigned int std::__1::__sort5<std::__1::__less<v8::internal::RuntimeCallStatEntries::Entry, v8::internal::RuntimeCallStatEntries::Entry>&, std::__1::reverse_iterator<std::__1::__wrap_iter<v8::internal::RuntimeCallStatEntries::Entry*> > >(std::__1::reverse_iterator<std::__1::__wrap_iter<v8::internal::RuntimeCallStatEntries::Entry*> >, std::__1::reverse_iterator<std::__1::__wrap_iter<v8::internal::RuntimeCallStatEntries::Entry*> >, std::__1::reverse_iterator<std::__1::__wrap_iter<v8::internal::RuntimeCallStatEntries::Entry*> >, std::__1::reverse_iterator<std::__1::__wrap_iter<v8::internal::RuntimeCallStatEntries::Entry*> >, std::__1::reverse_iterator<std::__1::__wrap_iter<v8::internal::RuntimeCallStatEntries::Entry*> >, std::__1::__less<v8::internal::RuntimeCallStatEntries::Entry, v8::internal::RuntimeCallStatEntries::Entry>&)",93957338135088,93957338135939],["v8::internal::LocalLogger::LocalLogger(v8::internal::Isolate*)",93957338136944,93957338137008],["v8::internal::LocalLogger::CodeLinePosInfoRecordEvent(unsigned long, v8::internal::ByteArray)",93957338137024,93957338137037],["v8::internal::Log::IsLoggingToTemporaryFile(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)",93957338137296,93957338137319],["v8::internal::Log::WriteLogHeader()",93957338137632,93957338138109],["v8::internal::Log::MessageBuilder& v8::internal::Log::MessageBuilder::operator<< <v8::internal::LogSeparator>(v8::internal::LogSeparator)",93957338138176,93957338138220],["v8::internal::Log::NewMessageBuilder()",93957338138336,93957338138487],["v8::internal::Log::file_name() const",93957338138576,93957338138640],["v8::internal::Log::MessageBuilder::AppendRawFormatString(char const*, ...)",93957338138960,93957338139211],["v8::internal::Runtime_AtomicsOr(int, unsigned long*, v8::internal::Isolate*)",93957339949856,93957339949893],["v8::internal::Runtime_BigIntUnaryOp(int, unsigned long*, v8::internal::Isolate*)",93957339959376,93957339959694],["v8::internal::Runtime_ThrowNotSuperConstructor(int, unsigned long*, v8::internal::Isolate*)",93957339964528,93957339965374],["v8::internal::Runtime_StoreToSuper(int, unsigned long*, v8::internal::Isolate*)",93957339974800,93957339975368],["v8::internal::Handle<v8::internal::NumberDictionary> v8::internal::(anonymous namespace)::ShallowCopyDictionaryTemplate<v8::internal::NumberDictionary>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::NumberDictionary>)",93957339983152,93957339983667],["v8::internal::Stats_Runtime_TheHole(int, unsigned long*, v8::internal::Isolate*)",93957339985984,93957339986440],["v8::internal::Stats_Runtime_SetShrink(int, unsigned long*, v8::internal::Isolate*)",93957339988256,93957339989032],["v8::internal::Stats_Runtime_MapGrow(int, unsigned long*, v8::internal::Isolate*)",93957339990768,93957339991624],["v8::internal::Runtime_WeakCollectionSet(int, unsigned long*, v8::internal::Isolate*)",93957339992528,93957339992770],["v8::internal::Runtime_CompileLazy(int, unsigned long*, v8::internal::Isolate*)",93957339993424,93957339993914],["v8::internal::Runtime_InstallBaselineCode(int, unsigned long*, v8::internal::Isolate*)",93957339994784,93957339995230],["v8::internal::Runtime_TryInstallNCICode(int, unsigned long*, v8::internal::Isolate*)",93957339996064,93957339996462],["v8::internal::Runtime_CompileOptimized_Concurrent(int, unsigned long*, v8::internal::Isolate*)",93957339997248,93957339997447],["v8::internal::Runtime_CompileOptimized_NotConcurrent(int, unsigned long*, v8::internal::Isolate*)",93957339998064,93957339998260],["v8::internal::Runtime_FunctionFirstExecution(int, unsigned long*, v8::internal::Isolate*)",93957339998880,93957339999408],["v8::internal::Runtime_HealOptimizedCodeSlot(int, unsigned long*, v8::internal::Isolate*)",93957340000304,93957340000484],["v8::internal::Runtime_CollectGarbage(int, unsigned long*, v8::internal::Isolate*)",93957340035136,93957340035207],["v8::internal::Runtime_Call(int, unsigned long*, v8::internal::Isolate*)",93957340066160,93957340066980],["v8::internal::Runtime_GeneratorClose(int, unsigned long*, v8::internal::Isolate*)",93957340077648,93957340077685],["v8::internal::Runtime_AsyncGeneratorHasCatchHandlerForPC(int, unsigned long*, v8::internal::Isolate*)",93957340081280,93957340081512],["v8::internal::Runtime_ThrowStackOverflow(int, unsigned long*, v8::internal::Isolate*)",93957340085488,93957340085520],["v8::internal::Runtime_ThrowTypeErrorIfStrict(int, unsigned long*, v8::internal::Isolate*)",93957340088544,93957340088834],["v8::internal::Runtime_ThrowReferenceError(int, unsigned long*, v8::internal::Isolate*)",93957340091968,93957340092127],["v8::internal::Runtime_NewReferenceError(int, unsigned long*, v8::internal::Isolate*)",93957340095408,93957340095683],["v8::internal::Stats_Runtime_ThrowInvalidStringLength(int, unsigned long*, v8::internal::Isolate*)",93957340097440,93957340097952],["v8::internal::Stats_Runtime_ThrowIteratorResultNotAnObject(int, unsigned long*, v8::internal::Isolate*)",93957340098112,93957340098659],["v8::internal::Stats_Runtime_ThrowThrowMethodMissing(int, unsigned long*, v8::internal::Isolate*)",93957340098832,93957340099356],["v8::internal::Stats_Runtime_ThrowSymbolIteratorInvalid(int, unsigned long*, v8::internal::Isolate*)",93957340099520,93957340100044],["v8::internal::Stats_Runtime_ThrowNotConstructor(int, unsigned long*, v8::internal::Isolate*)",93957340100208,93957340100755],["v8::internal::Stats_Runtime_ThrowApplyNonFunction(int, unsigned long*, v8::internal::Isolate*)",93957340100944,93957340101503],["v8::internal::Stats_Runtime_StackGuard(int, unsigned long*, v8::internal::Isolate*)",93957340101904,93957340102709],["v8::internal::Stats_Runtime_StackGuardWithGap(int, unsigned long*, v8::internal::Isolate*)",93957340103328,93957340104318],["v8::internal::Runtime_SwissTableDetailsAt(int, unsigned long*, v8::internal::Isolate*)",93957340243104,93957340243298],["v8::internal::Runtime_StringReplaceNonGlobalRegExpWithFunction(int, unsigned long*, v8::internal::Isolate*)",93957340305648,93957340307741],["v8::internal::Runtime_NewClosure(int, unsigned long*, v8::internal::Isolate*)",93957340358928,93957340359356],["v8::internal::(anonymous namespace)::StoreLookupSlot(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Context>, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object>, v8::internal::LanguageMode, v8::internal::ContextLookupFlags)",93957340378208,93957340378786],["v8::internal::Runtime_StringGreaterThan(int, unsigned long*, v8::internal::Isolate*)",93957340395792,93957340396066],["v8::internal::Stats_Runtime_CreatePrivateBrandSymbol(int, unsigned long*, v8::internal::Isolate*)",93957340404288,93957340404882],["v8::internal::Stats_Runtime_DeoptimizeFunction(int, unsigned long*, v8::internal::Isolate*)",93957340414144,93957340414768],["v8::internal::Stats_Runtime_IsMidTierTurboprop(int, unsigned long*, v8::internal::Isolate*)",93957340419440,93957340419925],["v8::internal::Stats_Runtime_OptimizeOsr(int, unsigned long*, v8::internal::Isolate*)",93957340426160,93957340427756],["v8::internal::Stats_Runtime_GetUndetectable(int, unsigned long*, v8::internal::Isolate*)",93957340433792,93957340434364],["v8::internal::Stats_Runtime_SetAllocationTimeout(int, unsigned long*, v8::internal::Isolate*)",93957340436848,93957340437304],["v8::internal::Stats_Runtime_DebugPrintPtr(int, unsigned long*, v8::internal::Isolate*)",93957340440080,93957340440922],["v8::internal::Stats_Runtime_GlobalPrint(int, unsigned long*, v8::internal::Isolate*)",93957340444736,93957340445596],["v8::internal::Stats_Runtime_AbortJS(int, unsigned long*, v8::internal::Isolate*)",93957340447760,93957340448489],["v8::internal::Stats_Runtime_TraceExit(int, unsigned long*, v8::internal::Isolate*)",93957340451040,93957340451788],["v8::internal::Stats_Runtime_InYoungGeneration(int, unsigned long*, v8::internal::Isolate*)",93957340454272,93957340454822],["v8::internal::Stats_Runtime_RegexpHasNativeCode(int, unsigned long*, v8::internal::Isolate*)",93957340456912,93957340457633],["v8::internal::Stats_Runtime_RegexpIsUnmodified(int, unsigned long*, v8::internal::Isolate*)",93957340458896,93957340459497],["v8::internal::Stats_Runtime_HasSmiElements(int, unsigned long*, v8::internal::Isolate*)",93957340460272,93957340460806],["v8::internal::Stats_Runtime_HasSmiOrObjectElements(int, unsigned long*, v8::internal::Isolate*)",93957340461584,93957340462118],["v8::internal::Stats_Runtime_HasHoleyElements(int, unsigned long*, v8::internal::Isolate*)",93957340462912,93957340463461],["v8::internal::Stats_Runtime_HasPackedElements(int, unsigned long*, v8::internal::Isolate*)",93957340464240,93957340464776],["v8::internal::Stats_Runtime_HasFastProperties(int, unsigned long*, v8::internal::Isolate*)",93957340465568,93957340466101],["v8::internal::Stats_Runtime_HasFixedInt8Elements(int, unsigned long*, v8::internal::Isolate*)",93957340466880,93957340467416],["v8::internal::Stats_Runtime_HasFixedInt16Elements(int, unsigned long*, v8::internal::Isolate*)",93957340468192,93957340468728],["v8::internal::Stats_Runtime_HasFixedInt32Elements(int, unsigned long*, v8::internal::Isolate*)",93957340469504,93957340470040],["v8::internal::Stats_Runtime_HasFixedFloat64Elements(int, unsigned long*, v8::internal::Isolate*)",93957340470816,93957340471352],["v8::internal::Stats_Runtime_HasFixedBigUint64Elements(int, unsigned long*, v8::internal::Isolate*)",93957340472128,93957340472664],["v8::internal::Stats_Runtime_IsConcatSpreadableProtector(int, unsigned long*, v8::internal::Isolate*)",93957340473424,93957340473926],["v8::internal::Stats_Runtime_RegExpSpeciesProtector(int, unsigned long*, v8::internal::Isolate*)",93957340474640,93957340475142],["v8::internal::Stats_Runtime_ArraySpeciesProtector(int, unsigned long*, v8::internal::Isolate*)",93957340475856,93957340476358],["v8::internal::Stats_Runtime_SetIteratorProtector(int, unsigned long*, v8::internal::Isolate*)",93957340477072,93957340477574],["v8::internal::Runtime_ArrayIteratorProtector(int, unsigned long*, v8::internal::Isolate*)",93957340478192,93957340478277],["v8::internal::Runtime_SerializeDeserializeNow(int, unsigned long*, v8::internal::Isolate*)",93957340478800,93957340479027],["v8::internal::Runtime_HeapObjectVerify(int, unsigned long*, v8::internal::Isolate*)",93957340479664,93957340479799],["v8::internal::Runtime_ArrayBufferMaxByteLength(int, unsigned long*, v8::internal::Isolate*)",93957340480384,93957340480531],["v8::internal::Runtime_TypedArrayMaxLength(int, unsigned long*, v8::internal::Isolate*)",93957340481072,93957340481219],["v8::internal::Runtime_CompleteInobjectSlackTracking(int, unsigned long*, v8::internal::Isolate*)",93957340481760,93957340481984],["v8::internal::Runtime_TurbofanStaticAssert(int, unsigned long*, v8::internal::Isolate*)",93957340482592,93957340482624],["v8::internal::Runtime_IsBeingInterpreted(int, unsigned long*, v8::internal::Isolate*)",93957340483088,93957340483120],["v8::internal::Runtime_EnableCodeLoggingForTesting(int, unsigned long*, v8::internal::Isolate*)",93957340483584,93957340483775],["v8::internal::Runtime_NewRegExpWithBacktrackLimit(int, unsigned long*, v8::internal::Isolate*)",93957340484352,93957340484880],["v8::internal::(anonymous namespace)::OptimizeFunctionOnNextCall(v8::internal::Arguments<(v8::internal::ArgumentsType)0>&, v8::internal::Isolate*, v8::internal::(anonymous namespace)::TierupKind)",93957340485792,93957340486547],["v8::internal::WriteBarrier::Marking(v8::internal::HeapObject, v8::internal::CompressedObjectSlot, v8::internal::Object)",93957340486672,93957340486720],["v8::internal::ReturnNull(v8::FunctionCallbackInfo<v8::Value> const&)",93957340487136,93957340487160],["v8::internal::__RT_impl_Runtime_ScheduleGCInStackCheck(v8::internal::Arguments<(v8::internal::ArgumentsType)0>, v8::internal::Isolate*)::{lambda(v8::Isolate*, void*)#1}::__invoke(v8::Isolate*, void*)",93957340487392,93957340487404],["v8::internal::(anonymous namespace)::DisallowCodegenFromStringsCallback(v8::Local<v8::Context>, v8::Local<v8::Value>, bool)",93957340487840,93957340487850],["v8::internal::Stats_Runtime_ArrayBufferDetach(int, unsigned long*, v8::internal::Isolate*)",93957340488096,93957340488710],["v8::internal::Stats_Runtime_TypedArrayCopyElements(int, unsigned long*, v8::internal::Isolate*)",93957340489152,93957340489965],["v8::internal::Stats_Runtime_TypedArrayGetBuffer(int, unsigned long*, v8::internal::Isolate*)",93957340490192,93957340490786],["v8::internal::Stats_Runtime_TypedArraySortFast(int, unsigned long*, v8::internal::Isolate*)",93957340491856,93957340493269],["v8::internal::Stats_Runtime_TypedArraySet(int, unsigned long*, v8::internal::Isolate*)",93957340493920,93957340494932],["bool v8::internal::(anonymous namespace)::CompareNum<double>(double, double)",93957340495024,93957340495113],["void std::__1::__sort<bool (*&)(float, float), float*>(float*, float*, bool (*&)(float, float))",93957340495392,93957340497278],["void std::__1::__insertion_sort_3<bool (*&)(float, float), float*>(float*, float*, bool (*&)(float, float))",93957340497696,93957340498030],["void std::__1::__sort<bool (*&)(double, double), v8::internal::UnalignedSlot<double> >(v8::internal::UnalignedSlot<double>, v8::internal::UnalignedSlot<double>, bool (*&)(double, double))",93957340498960,93957340500098],["unsigned int std::__1::__sort4<bool (*&)(double, double), v8::internal::UnalignedSlot<double> >(v8::internal::UnalignedSlot<double>, v8::internal::UnalignedSlot<double>, v8::internal::UnalignedSlot<double>, v8::internal::UnalignedSlot<double>, bool (*&)(double, double))",93957340500368,93957340500555],["void std::__1::__insertion_sort_3<bool (*&)(double, double), v8::internal::UnalignedSlot<double> >(v8::internal::UnalignedSlot<double>, v8::internal::UnalignedSlot<double>, bool (*&)(double, double))",93957340500832,93957340501049],["void std::__1::__sort<std::__1::__less<unsigned long, unsigned long>&, v8::internal::UnalignedSlot<unsigned long> >(v8::internal::UnalignedSlot<unsigned long>, v8::internal::UnalignedSlot<unsigned long>, std::__1::__less<unsigned long, unsigned long>&)",93957340501504,93957340502555],["unsigned int std::__1::__sort4<std::__1::__less<unsigned long, unsigned long>&, v8::internal::UnalignedSlot<unsigned long> >(v8::internal::UnalignedSlot<unsigned long>, v8::internal::UnalignedSlot<unsigned long>, v8::internal::UnalignedSlot<unsigned long>, v8::internal::UnalignedSlot<unsigned long>, std::__1::__less<unsigned long, unsigned long>&)",93957340502672,93957340502778],["bool std::__1::__insertion_sort_incomplete<std::__1::__less<unsigned long, unsigned long>&, v8::internal::UnalignedSlot<unsigned long> >(v8::internal::UnalignedSlot<unsigned long>, v8::internal::UnalignedSlot<unsigned long>, std::__1::__less<unsigned long, unsigned long>&)",93957340502928,93957340503267],["unsigned int std::__1::__sort3<std::__1::__less<long, long>&, v8::internal::UnalignedSlot<long> >(v8::internal::UnalignedSlot<long>, v8::internal::UnalignedSlot<long>, v8::internal::UnalignedSlot<long>, std::__1::__less<long, long>&)",93957340504336,93957340504441],["unsigned int std::__1::__sort5<std::__1::__less<long, long>&, v8::internal::UnalignedSlot<long> >(v8::internal::UnalignedSlot<long>, v8::internal::UnalignedSlot<long>, v8::internal::UnalignedSlot<long>, v8::internal::UnalignedSlot<long>, v8::internal::UnalignedSlot<long>, std::__1::__less<long, long>&)",93957340504560,93957340504704],["v8::internal::Runtime_ShrinkFinalizationRegistryUnregisterTokenMap(int, unsigned long*, v8::internal::Isolate*)",93957340505056,93957340505516],["v8::internal::Deserializer::ReadData(v8::internal::Handle<v8::internal::HeapObject>, int, int)",93957340529488,93957340529608],["v8::internal::Deserializer::RelocInfoVisitor::VisitOffHeapTarget(v8::internal::Code, v8::internal::RelocInfo*)",93957340530688,93957340531154],["v8::internal::ReadOnlySerializer::~ReadOnlySerializer()",93957340541856,93957340541959],["v8::internal::SerializerDeserializer::Iterate(v8::internal::Isolate*, v8::internal::RootVisitor*)",93957340543536,93957340544018],["v8::internal::StringStream::OutputToFile(_IO_FILE*)",93957340582640,93957340582798],["v8::internal::MakeCancelableIdleTask(v8::internal::CancelableTaskManager*, std::__1::function<void (double)>)",93957340603584,93957340603766],["v8::tracing::TracedValue::AppendDouble(double)",93957340606368,93957340606512],["v8::internal::trap_handler::MetadataLock::~MetadataLock()",93957340608432,93957340608471],["v8_inspector::(anonymous namespace)::GlobalObjectNameResolver::~GlobalObjectNameResolver()",93957342555392,93957342555430],["v8_inspector::(anonymous namespace)::GlobalObjectNameResolver::GetName(v8::Local<v8::Object>)",93957342559072,93957342560138],["v8_crdtp::json::(anonymous namespace)::JsonParser<unsigned char>::DecodeString(unsigned char const*, unsigned char const*, std::__1::vector<unsigned short, std::__1::allocator<unsigned short> >*)",93957342792432,93957342793862],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >& std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__append_forward_unsafe<char const*>(char const*, char const*)",93957342801376,93957342802116],["v8_crdtp::Status::Message() const",93957342802896,93957342805241],["v8::internal::compiler::DefineOutputs(v8::internal::compiler::MidTierRegisterAllocationData*)",93957343032544,93957343033099],["v8::internal::compiler::MoveOptimizer::CompressMoves(v8::internal::compiler::ParallelMove*, v8::internal::ZoneVector<v8::internal::compiler::MoveOperands*>*)",93957343064832,93957343066025],["v8::internal::compiler::BlockAssessments::CheckReferenceMap(v8::internal::compiler::ReferenceMap const*)",93957343074576,93957343075189],["std::__1::__tree_node_base<void*>*& std::__1::__tree<v8::internal::compiler::InstructionOperand, v8::internal::compiler::OperandAsKeyLess, v8::internal::ZoneAllocator<v8::internal::compiler::InstructionOperand> >::__find_equal<v8::internal::compiler::InstructionOperand>(std::__1::__tree_const_iterator<v8::internal::compiler::InstructionOperand, std::__1::__tree_node<v8::internal::compiler::InstructionOperand, void*>*, long>, std::__1::__tree_end_node<std::__1::__tree_node_base<void*>*>*&, std::__1::__tree_node_base<void*>*&, v8::internal::compiler::InstructionOperand const&)",93957343086256,93957343086990],["v8::internal::compiler::LiveRangeFinder::ArrayFor(int)",93957343088544,93957343088767],["v8::internal::compiler::LiveRange::GetAssignedOperand() const",93957343089024,93957343089132],["v8::internal::compiler::LiveRange::DetachAt(v8::internal::compiler::LifetimePosition, v8::internal::compiler::LiveRange*, v8::internal::Zone*, v8::internal::compiler::LiveRange::HintConnectionOption)",93957343089184,93957343089636],["v8::internal::compiler::TopLevelLiveRange::FilterSpillMoves(v8::internal::compiler::TopTierRegisterAllocationData*, v8::internal::compiler::InstructionOperand const&)",93957343089904,93957343090270],["v8::internal::compiler::BytecodeGraphBuilder::VisitTestGreaterThan()",93957343245168,93957343245268],["v8::internal::compiler::BytecodeGraphBuilder::VisitThrowSuperNotCalledIfHole()",93957343258032,93957343258180],["v8::internal::compiler::BytecodeGraphBuilder::VisitStar1()",93957343265040,93957343265108],["v8::internal::compiler::BytecodeGraphBuilder::BuildBinaryOpWithImmediate(v8::internal::compiler::Operator const*)",93957343273456,93957343273894],["v8::internal::compiler::BytecodeGraphBuilder::ApplyEarlyReduction(v8::internal::compiler::JSTypeHintLowering::LoweringResult)",93957343280624,93957343281339],["v8::internal::compiler::BytecodeLiveness::BytecodeLiveness(int, v8::internal::Zone*)",93957343283184,93957343283708],["v8::internal::compiler::CheckpointElimination::Reduce(v8::internal::compiler::Node*)",93957343285872,93957343285896],["std::__1::__hash_table<std::__1::__hash_value_type<std::__1::pair<long, char>, v8::internal::compiler::Node*>, std::__1::__unordered_map_hasher<std::__1::pair<long, char>, std::__1::__hash_value_type<std::__1::pair<long, char>, v8::internal::compiler::Node*>, v8::base::hash<std::__1::pair<long, char> >, std::__1::equal_to<std::__1::pair<long, char> >, true>, std::__1::__unordered_map_equal<std::__1::pair<long, char>, std::__1::__hash_value_type<std::__1::pair<long, char>, v8::internal::compiler::Node*>, std::__1::equal_to<std::__1::pair<long, char> >, v8::base::hash<std::__1::pair<long, char> >, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<std::__1::pair<long, char>, v8::internal::compiler::Node*> > >::__rehash(unsigned long)",93957343289312,93957343290059],["v8::internal::compiler::CommonOperatorReducer::CommonOperatorReducer(v8::internal::compiler::AdvancedReducer::Editor*, v8::internal::compiler::Graph*, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::CommonOperatorBuilder*, v8::internal::compiler::MachineOperatorBuilder*, v8::internal::Zone*)",93957343293488,93957343293591],["v8::internal::compiler::CommonOperatorReducer::ReduceMerge(v8::internal::compiler::Node*)",93957343295632,93957343296036],["v8::internal::compiler::CommonOperatorReducer::ReduceSwitch(v8::internal::compiler::Node*)",93957343299472,93957343299881],["v8::internal::compiler::BinopMatcher<v8::internal::compiler::FloatMatcher<float, (v8::internal::compiler::IrOpcode::Value)25>, v8::internal::compiler::FloatMatcher<float, (v8::internal::compiler::IrOpcode::Value)25> >::BinopMatcher(v8::internal::compiler::Node*)",93957343300752,93957343300886],["v8::internal::compiler::FloatMatcher<double, (v8::internal::compiler::IrOpcode::Value)26>::FloatMatcher(v8::internal::compiler::Node*)",93957343301280,93957343301462],["v8::internal::compiler::BranchHintOf(v8::internal::compiler::Operator const*)",93957343302000,93957343302056],["v8::internal::compiler::IsSafetyCheckOf(v8::internal::compiler::Operator const*)",93957343302384,93957343302412],["v8::internal::compiler::CommonOperatorBuilder::DeoptimizeUnless(v8::internal::DeoptimizeKind, v8::internal::DeoptimizeReason, v8::internal::compiler::FeedbackSource const&, v8::internal::compiler::IsSafetyCheck)",93957343303648,93957343304330],["v8::internal::compiler::operator!=(v8::internal::compiler::SparseInputMask const&, v8::internal::compiler::SparseInputMask const&)",93957343305072,93957343305085],["v8::internal::compiler::SparseInputMaskOf(v8::internal::compiler::Operator const*)",93957343305376,93957343305404],["v8::internal::StdoutStream& v8::base::Optional<v8::internal::StdoutStream>::emplace<>()",93957344681520,93957344681734],["v8::internal::compiler::RedundancyElimination::~RedundancyElimination()",93957344716352,93957344716381],["v8::internal::compiler::RepresentationChanger::GetTaggedRepresentationFor(v8::internal::compiler::Node*, v8::internal::MachineRepresentation, v8::internal::compiler::Type, v8::internal::compiler::Truncation)",93957344726096,93957344727322],["v8::internal::compiler::RepresentationChanger::Int32OperatorFor(v8::internal::compiler::IrOpcode::Value)",93957344735616,93957344735816],["v8::internal::compiler::BasicBlock::set_rpo_number(int)",93957344737824,93957344737833],["v8::internal::compiler::Schedule::IsScheduled(v8::internal::compiler::Node*)",93957344739504,93957344739550],["v8::internal::compiler::Schedule::AddBranch(v8::internal::compiler::BasicBlock*, v8::internal::compiler::Node*, v8::internal::compiler::BasicBlock*, v8::internal::compiler::BasicBlock*)",93957344742896,93957344743095],["v8::internal::compiler::Schedule::InsertSwitch(v8::internal::compiler::BasicBlock*, v8::internal::compiler::BasicBlock*, v8::internal::compiler::Node*, v8::internal::compiler::BasicBlock**, unsigned long)",93957344745440,93957344745861],["v8::internal::compiler::Type::Tuple(v8::internal::compiler::Type, v8::internal::compiler::Type, v8::internal::compiler::Type, v8::internal::Zone*)",93957345156192,93957345156355],["v8::internal::compiler::WasmGraphBuilder::AppendToMerge(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957345249936,93957345250030],["v8::internal::compiler::WasmGraphBuilder::BuildF64NearestInt(v8::internal::compiler::Node*)",93957345267680,93957345267724],["v8::internal::compiler::WasmGraphBuilder::BuildDecodeException32BitValue(v8::internal::compiler::Node*, unsigned int*)",93957345277104,93957345277530],["v8::internal::compiler::WasmGraphBuilder::BrOnNull(v8::internal::compiler::Node*, v8::internal::compiler::Node**, v8::internal::compiler::Node**)",93957345288880,93957345289108],["v8::internal::compiler::WasmGraphBuilder::BoundsCheckMem(unsigned char, v8::internal::compiler::Node*, unsigned long, int, v8::internal::compiler::WasmGraphBuilder::EnforceBoundsCheck)",93957345295216,93957345295666],["v8::internal::compiler::WasmGraphBuilder::BuildF32x4Trunc(v8::internal::compiler::Node*)",93957345299744,93957345299788],["v8::internal::compiler::WasmGraphBuilder::TableInit(unsigned int, unsigned int, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, int)",93957345309888,93957345310226],["v8::internal::compiler::WasmGraphBuilder::DataCheck(v8::internal::compiler::Node*, bool, v8::internal::compiler::WasmGraphBuilder::Callbacks)",93957345315616,93957345316071],["v8::internal::compiler::WasmGraphBuilder::BrOnData(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::WasmGraphBuilder::ObjectReferenceKnowledge, v8::internal::compiler::Node**, v8::internal::compiler::Node**, v8::internal::compiler::Node**, v8::internal::compiler::Node**)",93957345319216,93957345319395],["v8::internal::compiler::WasmGraphBuilder::StructSet(v8::internal::compiler::Node*, v8::internal::wasm::StructType const*, unsigned int, v8::internal::compiler::Node*, v8::internal::compiler::WasmGraphBuilder::CheckForNull, int)",93957345321520,93957345321646],["v8::internal::compiler::WasmGraphBuilder::RemoveBytecodePositionDecorator()",93957345323472,93957345323512],["v8::internal::compiler::GetI32WasmCallDescriptor(v8::internal::Zone*, v8::internal::compiler::CallDescriptor const*)",93957345340496,93957345340516],["v8::internal::compiler::(anonymous namespace)::WasmWrapperGraphBuilder::BuildCallAndReturn(bool, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::base::SmallVector<v8::internal::compiler::Node*, 16ul>, v8::internal::compiler::JSWasmCallData const*, v8::internal::compiler::Node*)",93957345358992,93957345360800],["void std::__1::__function::__policy_invoker<void (v8::internal::compiler::Node*, v8::internal::compiler::BranchHint)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::WasmGraphBuilder::TestCallbacks(v8::internal::compiler::GraphAssemblerLabel<1ul>*)::$_1, void (v8::internal::compiler::Node*, v8::internal::compiler::BranchHint)> >(std::__1::__function::__policy_storage const*, v8::internal::compiler::Node*, v8::internal::compiler::BranchHint)",93957345368912,93957345368981],["void std::__1::__function::__policy_invoker<void (v8::internal::compiler::WasmGraphBuilder::Callbacks)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::WasmGraphBuilder::BrOnCast(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::WasmGraphBuilder::ObjectReferenceKnowledge, v8::internal::compiler::Node**, v8::internal::compiler::Node**, v8::internal::compiler::Node**, v8::internal::compiler::Node**)::$_10, void (v8::internal::compiler::WasmGraphBuilder::Callbacks)> >(std::__1::__function::__policy_storage const*, v8::internal::compiler::WasmGraphBuilder::Callbacks&&)",93957345369856,93957345370423],["unsigned int std::__1::__sort5<std::__1::__less<signed char, signed char>&, signed char*>(signed char*, signed char*, signed char*, signed char*, signed char*, std::__1::__less<signed char, signed char>&)",93957346613888,93957346614149],["std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&)",93957346630736,93957346630807],["std::__1::basic_streambuf<char, std::__1::char_traits<char> >::seekoff(long long, std::__1::ios_base::seekdir, unsigned int)",93957346636208,93957346636223],["std::__1::basic_ostream<wchar_t, std::__1::char_traits<wchar_t> >::flush()",93957346638032,93957346638250],["std::__1::basic_ostream<char, std::__1::char_traits<char> >::operator<<(int)",93957346639424,93957346639852],["std::__1::basic_ostream<char, std::__1::char_traits<char> >::operator<<(long)",93957346640256,93957346640650],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const* std::__1::__scan_keyword<std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const*, std::__1::ctype<char> >(std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >&, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const*, std::__1::ctype<char> const&, unsigned int&, bool)",93957346656528,93957346657779],["std::__1::num_get<wchar_t, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::do_get(std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, unsigned int&, long&) const",93957346672624,93957346672634],["std::__1::num_get<wchar_t, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::do_get(std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, unsigned int&, float&) const",93957346680592,93957346680602],["std::__1::__num_get<char>::__stage2_float_prep(std::__1::ios_base&, char*, char&, char&)",93957346686384,93957346686851],["std::__1::__num_get<wchar_t>::__stage2_int_prep(std::__1::ios_base&, wchar_t&)",93957346689344,93957346689623],["std::__1::num_put<char, std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > >::do_put(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, char, bool) const",93957346689904,93957346690415],["__strtod_nan",139871563556624,139871563556824],["fmtmsg",139871563567136,139871563568463],["getcontext",139871563568720,139871563568877],["strfromf128",139871563577952,139871563578555],["__isoc99_vsscanf",139871563621344,139871563621512],["fwrite",139871563740416,139871563740870],["_IO_file_seekoff",139871563784256,139871563785766],["_IO_sungetc",139871563797072,139871563797191],["pthread_mutex_destroy",139871563803680,139871563803715],["thrd_yield",139871563805584,139871563805592],["pthread_attr_getinheritsched",139871563805760,139871563805773],["__stpcpy_small",139871563868112,139871563868333],["timespec_get",139871564069440,139871564069480],["getpwent_r",139871564087968,139871564088226],["getegid",139871564095776,139871564095784],["re_set_syntax",139871564186384,139871564186401],["getopt_long",139871564197472,139871564197491],["wordexp",139871564227728,139871564230979],["posix_spawnattr_getpgroup",139871564232496,139871564232504],["__sched_cpufree",139871564235152,139871564235157],["__lxstat",139871564235824,139871564235900],["fstatvfs",139871564237200,139871564237308],["__open_2",139871564237664,139871564237704],["getmsg",139871564546688,139871564546708],["step",139871564548096,139871564548228],["__pthread_mutex_clocklock",139871566600896,139871566600918],["__pthread_cond_wait",139871566611920,139871566612637],["__pthread_cond_clockwait",139871566613520,139871566614379],["cnd_timedwait",139871566637872,139871566637950],["std::__1::__hash_table<unsigned long, std::__1::hash<unsigned long>, std::__1::equal_to<unsigned long>, std::__1::allocator<unsigned long> >::rehash(unsigned long)",93957335213376,93957335213747],["std::__1::__shared_ptr_pointer<v8::DelayedTasksPlatform::DelayedTaskRunner*, v8::DelayedTasksPlatform::DelayedTaskRunnerDeleter, std::__1::allocator<v8::DelayedTasksPlatform::DelayedTaskRunner> >::__on_zero_shared()",93957335214496,93957335214514],["v8::(anonymous namespace)::MultiMappedAllocator::~MultiMappedAllocator()",93957335312352,93957335312483],["std::__1::__murmur2_or_cityhash<unsigned long, 64ul>::operator()(void const*, unsigned long)",93957335314176,93957335315366],["v8::internal::FactoryBase<v8::internal::LocalFactory>::NewConsString(v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String>, int, bool, v8::internal::AllocationType)",93957336845952,93957336846385],["v8::internal::Factory::CodeBuilder::TryBuild()",93957336849488,93957336849500],["v8::internal::Factory::NewPrototypeInfo()",93957336850448,93957336850574],["v8::internal::Factory::NewTuple2(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::AllocationType)",93957336850912,93957336851266],["v8::internal::Heap::CanPromoteYoungAndExpandOldGeneration(unsigned long)",93957336948944,93957336949256],["v8::internal::Heap::PublishPendingAllocations()",93957336967232,93957336967395],["v8::internal::Heap::CheckCollectionRequested()",93957336976848,93957336976910],["v8::internal::Heap::StartIncrementalMarking(int, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags)",93957336987136,93957336987256],["v8::internal::Heap::GarbageCollectionReasonToString(v8::internal::GarbageCollectionReason)",93957336988352,93957336988391],["v8::internal::Heap::OldGenerationSizeOfObjects()",93957336991232,93957336991384],["v8::internal::Context::set_retained_maps(v8::internal::WeakArrayList)",93957336993184,93957336993455],["v8::internal::Heap::StartIncrementalMarkingIfAllocationLimitIsReachedBackground()",93957336995088,93957336995376],["v8::internal::Heap::ConfigureInitialOldGenerationSize()",93957337000608,93957337001360],["v8::internal::Heap::PrecedeWithFiller(v8::internal::ReadOnlyRoots, v8::internal::HeapObject, int)",93957337008704,93957337008769],["v8::internal::Heap::FinalizeIncrementalMarkingIfComplete(v8::internal::GarbageCollectionReason)",93957337011792,93957337012089],["v8::internal::Heap::CollectGarbageOnMemoryPressure()",93957337016096,93957337017074],["v8::internal::Heap::MeasureMemory(std::__1::unique_ptr<v8::MeasureMemoryDelegate, std::__1::default_delete<v8::MeasureMemoryDelegate> >, v8::MeasureMemoryExecution)",93957337018352,93957337019066],["v8::internal::Heap::InSpaceSlow(unsigned long, v8::internal::AllocationSpace) const",93957337019808,93957337020038],["v8::internal::Heap::set_builtin(int, v8::internal::Code)",93957337020128,93957337020145],["v8::internal::Heap::IterateStackRoots(v8::internal::RootVisitor*)",93957337021376,93957337021421],["v8::internal::Heap::AddToRingBuffer(char const*)",93957337022608,93957337022768],["v8::internal::HeapObjectIterator::Next()",93957337023616,93957337024052],["v8::internal::Heap::ShouldOptimizeForLoadTime()",93957337024096,93957337024199],["v8::internal::Heap::GlobalMemoryAvailable()",93957337024624,93957337024839],["v8::internal::LargePage::ClearOutOfLiveRangeSlots(unsigned long)",93957337071760,93957337072397],["v8::internal::LargeObjectSpace::RemovePage(v8::internal::LargePage*, unsigned long)",93957337075680,93957337075853],["v8::internal::NewLargeObjectSpace::NewLargeObjectSpace(v8::internal::Heap*, unsigned long)",93957337076704,93957337076976],["v8::internal::NewLargeObjectSpace::FreeDeadObjects(std::__1::function<bool (v8::internal::HeapObject)> const&)",93957337077536,93957337078014],["v8::internal::PagedSpace::InitializePage(v8::internal::MemoryChunk*)",93957337488496,93957337488599],["v8::internal::PagedSpace::RawRefillLabBackground(v8::internal::LocalHeap*, unsigned long, unsigned long, v8::internal::AllocationAlignment, v8::internal::AllocationOrigin)",93957337493632,93957337494061],["v8::internal::ReadOnlyHeap::SetUp(v8::internal::Isolate*, v8::internal::SnapshotData*, bool)",93957337496544,93957337496827],["v8::internal::ReadOnlyHeapObjectIterator::Next()",93957337497376,93957337497629],["v8::internal::ReadOnlySpace::TearDown(v8::internal::MemoryAllocator*)",93957337497984,93957337498079],["v8::internal::ReadOnlySpace::FreeLinearAllocationArea()",93957337498672,93957337499176],["v8::internal::ReadOnlySpace::AllocateRaw(int, v8::internal::AllocationAlignment)",93957337499840,93957337499924],["v8::internal::ReadOnlySpace::Size()",93957337500528,93957337500538],["v8::internal::GlobalSafepoint::WaitInSafepoint()",93957337501344,93957337501461],["v8::internal::GlobalSafepoint::NotifyPark()",93957337501536,93957337501610],["v8::internal::SafepointScope::~SafepointScope()",93957337501648,93957337501811],["v8::internal::ScavengeJob::YoungGenerationTaskTriggerSize(v8::internal::Heap*)",93957337501888,93957337501969],["v8::internal::ScavengeJob::Task::RunInternal()",93957337502352,93957337502696],["v8::internal::ScavengerCollector::JobTask::ProcessItems(v8::JobDelegate*, v8::internal::Scavenger*)",93957337503520,93957337503874],["v8::internal::Scavenger::Process(v8::JobDelegate*)",93957337503984,93957337513074],["v8::internal::ScavengerCollector::ScavengerCollector(v8::internal::Heap*)",93957337516784,93957337516822],["v8::internal::ScavengeVisitor::VisitCodeTarget(v8::internal::Code, v8::internal::RelocInfo*)",93957337536336,93957337536462],["v8::internal::IterateAndScavengePromotedObjectsVisitor::VisitEphemeron(v8::internal::HeapObject, int, v8::internal::CompressedObjectSlot, v8::internal::CompressedObjectSlot)",93957337538368,93957337538491],["v8::internal::SlotCallbackResult v8::internal::Scavenger::EvacuateThinString<v8::internal::CompressedHeapObjectSlot>(v8::internal::Map, v8::internal::CompressedHeapObjectSlot, v8::internal::ThinString, int)",93957337546352,93957337552343],["v8::internal::ScavengeWeakObjectRetainer::RetainAs(v8::internal::Object)",93957337565680,93957337565742],["void std::__1::vector<std::__1::unique_ptr<v8::internal::Scavenger, std::__1::default_delete<v8::internal::Scavenger> >, std::__1::allocator<std::__1::unique_ptr<v8::internal::Scavenger, std::__1::default_delete<v8::internal::Scavenger> > > >::__emplace_back_slow_path<v8::internal::Scavenger*>(v8::internal::Scavenger*&&)",93957337566896,93957337567651],["void v8::internal::CallIterateBody::apply<v8::internal::NativeContext::BodyDescriptor, v8::internal::IterateAndScavengePromotedObjectsVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::IterateAndScavengePromotedObjectsVisitor*)",93957337569760,93957337569824],["void v8::internal::CallIterateBody::apply<v8::internal::ExportedSubClass::BodyDescriptor, v8::internal::IterateAndScavengePromotedObjectsVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::IterateAndScavengePromotedObjectsVisitor*)",93957337570016,93957337570074],["void v8::internal::WasmArray::BodyDescriptor::IterateBody<v8::internal::IterateAndScavengePromotedObjectsVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::IterateAndScavengePromotedObjectsVisitor*)",93957337572256,93957337572327],["void v8::internal::WasmInstanceObject::BodyDescriptor::IterateBody<v8::internal::IterateAndScavengePromotedObjectsVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::IterateAndScavengePromotedObjectsVisitor*)",93957337572736,93957337573167],["void v8::internal::JSArrayBuffer::BodyDescriptor::IterateBody<v8::internal::IterateAndScavengePromotedObjectsVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::IterateAndScavengePromotedObjectsVisitor*)",93957337573376,93957337573588],["void v8::internal::JSTypedArray::BodyDescriptor::IterateBody<v8::internal::IterateAndScavengePromotedObjectsVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::IterateAndScavengePromotedObjectsVisitor*)",93957337573824,93957337574050],["void v8::internal::JSWeakRef::BodyDescriptor::IterateBody<v8::internal::IterateAndScavengePromotedObjectsVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::IterateAndScavengePromotedObjectsVisitor*)",93957337574176,93957337574402],["void v8::internal::BytecodeArray::BodyDescriptor::IterateBody<v8::internal::IterateAndScavengePromotedObjectsVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::IterateAndScavengePromotedObjectsVisitor*)",93957337574496,93957337574585],["void v8::internal::DataHandler::BodyDescriptor::IterateBody<v8::internal::IterateAndScavengePromotedObjectsVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::IterateAndScavengePromotedObjectsVisitor*)",93957337574688,93957337574754],["void v8::internal::SubclassBodyDescriptor<v8::internal::FixedBodyDescriptor<4, 28, 28>, v8::internal::FixedBodyDescriptor<28, 40, 40> >::IterateBody<v8::internal::IterateAndScavengePromotedObjectsVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::IterateAndScavengePromotedObjectsVisitor*)",93957337574832,93957337574888],["void v8::internal::WasmInstanceObject::BodyDescriptor::IterateBody<v8::internal::ScavengeVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::ScavengeVisitor*)",93957337575280,93957337575785],["v8::internal::SlotCallbackResult v8::internal::Scavenger::EvacuateThinString<v8::internal::FullHeapObjectSlot>(v8::internal::Map, v8::internal::FullHeapObjectSlot, v8::internal::ThinString, int)",93957337576016,93957337582006],["v8::internal::TypedSlots::~TypedSlots()",93957337594176,93957337594279],["v8::internal::TypedSlots::Insert(v8::internal::SlotType, unsigned int)",93957337594400,93957337594875],["v8::internal::TypedSlotSet::ClearInvalidSlots(std::__1::map<unsigned int, unsigned int, std::__1::less<unsigned int>, std::__1::allocator<std::__1::pair<unsigned int const, unsigned int> > > const&)",93957337594944,93957337595178],["v8::internal::Page::InitializeFreeListCategories()",93957337595376,93957337595461],["v8::internal::Page::ConvertNewToOld(v8::internal::Page*)",93957337595632,93957337595698],["v8::internal::Page::MergeOldToNewRememberedSets()",93957337595776,93957337596260],["v8::internal::Page::CreateBlackArea(unsigned long, unsigned long)",93957337596624,93957337597046],["v8::internal::interpreter::BytecodeArrayBuilder::ForInPrepare(v8::internal::interpreter::RegisterList, int)",93957337862528,93957337862944],["v8::internal::interpreter::TestTypeOfFlags::GetFlagForLiteral(v8::internal::AstStringConstants const*, v8::internal::Literal*)",93957337894256,93957337894371],["v8::internal::interpreter::BytecodeGenerator::VisitTryFinallyStatement(v8::internal::TryFinallyStatement*)",93957337925248,93957337926360],["v8::internal::interpreter::BytecodeGenerator::BuildPrivateBrandCheck(v8::internal::Property*, v8::internal::interpreter::Register, v8::internal::MessageTemplate)",93957337956848,93957337957596],["v8::internal::interpreter::BytecodeGenerator::VisitForTypeOfValue(v8::internal::Expression*)",93957337978768,93957337979038],["v8::internal::interpreter::BytecodeGenerator::BuildLiteralCompareNil(v8::internal::Token::Value, v8::internal::interpreter::BytecodeArrayBuilder::NilValue)",93957337992208,93957337992426],["v8::internal::interpreter::BytecodeGenerator::BuildTest(v8::internal::interpreter::BytecodeArrayBuilder::ToBooleanMode, v8::internal::interpreter::BytecodeLabels*, v8::internal::interpreter::BytecodeLabels*, v8::internal::interpreter::BytecodeGenerator::TestFallthrough)",93957338000784,93957338000932],["v8::internal::interpreter::BytecodeRegisterOptimizer::BytecodeRegisterOptimizer(v8::internal::Zone*, v8::internal::interpreter::BytecodeRegisterAllocator*, int, int, v8::internal::interpreter::BytecodeRegisterOptimizer::BytecodeWriter*)",93957338005136,93957338005610],["v8::internal::interpreter::BytecodeRegisterOptimizer::~BytecodeRegisterOptimizer()",93957338008864,93957338008919],["v8::internal::interpreter::Register::FromParameterIndex(int, int)",93957338014064,93957338014077],["v8::internal::interpreter::Register::ToString(int) const",93957338014192,93957338015064],["v8::internal::Handle<v8::internal::Object> v8::internal::interpreter::ConstantArrayBuilder::Entry::ToHandle<v8::internal::Isolate>(v8::internal::Isolate*) const",93957338017872,93957338018332],["v8::internal::interpreter::ConstantArrayBuilder::Insert(v8::internal::AstRawString const*)",93957338022800,93957338023141],["v8::internal::interpreter::ConstantArrayBuilder::InsertDeferred()",93957338024656,93957338024779],["v8::internal::interpreter::BreakableControlFlowBuilder::~BreakableControlFlowBuilder()",93957338026176,93957338026282],["v8::internal::interpreter::LoopBuilder::~LoopBuilder()",93957338027568,93957338027596],["v8::internal::interpreter::SwitchBuilder::~SwitchBuilder()",93957338027968,93957338028086],["v8::internal::interpreter::TryCatchBuilder::BeginTry(v8::internal::interpreter::Register)",93957338028304,93957338028326],["v8::internal::interpreter::TryFinallyBuilder::~TryFinallyBuilder()",93957338028560,93957338028652],["v8::internal::interpreter::TryFinallyBuilder::BeginFinally()",93957338028784,93957338028842],["v8::internal::interpreter::ConditionalControlFlowBuilder::Then()",93957338029168,93957338029229],["v8::internal::interpreter::HandlerTableBuilder::HandlerTableBuilder(v8::internal::Zone*)",93957338029712,93957338029736],["v8::internal::interpreter::HandlerTableBuilder::SetHandlerTarget(int, unsigned long)",93957338030128,93957338030149],["v8::internal::interpreter::IntrinsicsHelper::FromRuntimeId(v8::internal::Runtime::FunctionId)",93957338030256,93957338030310],["v8::internal::interpreter::InterpreterCompilationJob::ExecuteJobImpl()",93957338030608,93957338031119],["v8::internal::CompilationJob::Status v8::internal::interpreter::InterpreterCompilationJob::DoFinalizeJobImpl<v8::internal::LocalIsolate>(v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::LocalIsolate*)",93957338033168,93957338034275],["v8::internal::interpreter::Interpreter::GetDispatchCountersObject()",93957338035072,93957338035912],["v8::internal::interpreter::Interpreter::~Interpreter()",93957338036560,93957338036621],["v8::internal::JsonParser<unsigned char>::JsonParser(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>)",93957338037184,93957338037766],["v8::internal::JsonParser<unsigned char>::ReportUnexpectedToken(v8::internal::JsonToken)",93957338041920,93957338042340],["v8::internal::JsonParser<unsigned char>::MakeString(v8::internal::JsonString const&, v8::internal::Handle<v8::internal::String>)",93957338043440,93957338043830],["std::__1::vector<v8::internal::JsonParser<unsigned char>::JsonContinuation, std::__1::allocator<v8::internal::JsonParser<unsigned char>::JsonContinuation> >::reserve(unsigned long)",93957338045312,93957338045648],["v8::internal::Handle<v8::internal::Object> v8::internal::HandleScope::CloseAndEscape<v8::internal::Object>(v8::internal::Handle<v8::internal::Object>)",93957338045856,93957338046027],["v8::internal::JsonParser<unsigned char>::BuildJsonObject(v8::internal::JsonParser<unsigned char>::JsonContinuation const&, v8::base::SmallVector<v8::internal::JsonProperty, 16ul> const&, v8::internal::Handle<v8::internal::Map>)",93957338046144,93957338050828],["v8::internal::JsonParser<unsigned char>::BuildJsonArray(v8::internal::JsonParser<unsigned char>::JsonContinuation const&, v8::base::SmallVector<v8::internal::Handle<v8::internal::Object>, 16ul> const&)",93957338050912,93957338051641],["v8::internal::JsonParser<unsigned short>::ParseJson()",93957338051936,93957338052080],["v8::internal::JsonParser<unsigned short>::ParseJsonValue()",93957338052640,93957338057118],["v8::internal::JsonParser<unsigned short>::ScanJsonString(bool)",93957338057552,93957338058025],["v8::internal::JsonParser<unsigned short>::ScanJsonPropertyKey(v8::internal::JsonParser<unsigned short>::JsonContinuation*)",93957338058288,93957338058697],["v8::internal::Handle<v8::internal::String> v8::internal::JsonParser<unsigned short>::DecodeString<v8::internal::SeqOneByteString>(v8::internal::JsonString const&, v8::internal::Handle<v8::internal::SeqOneByteString>, v8::internal::Handle<v8::internal::String>)",93957338059120,93957338059383],["v8::internal::JsonParser<unsigned short>::ParseJsonNumber()",93957338059664,93957338060681],["v8::internal::JsonParseInternalizer::InternalizeJsonProperty(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::String>)",93957338065376,93957338066701],["void v8::internal::JsonParser<unsigned char>::DecodeString<unsigned char>(unsigned char*, int, int)",93957338066928,93957338067325],["void std::__1::vector<v8::internal::JsonParser<unsigned char>::JsonContinuation, std::__1::allocator<v8::internal::JsonParser<unsigned char>::JsonContinuation> >::__emplace_back_slow_path<v8::internal::JsonParser<unsigned char>::JsonContinuation>(v8::internal::JsonParser<unsigned char>::JsonContinuation&&)",93957338067840,93957338068296],["v8::base::SmallVector<v8::internal::JsonProperty, 16ul>::Grow(unsigned long)",93957338068320,93957338068481],["v8::base::SmallVector<v8::internal::CharacterRange, 8ul>::Grow(unsigned long)",93957338068512,93957338068651],["void v8::internal::JsonParser<unsigned short>::DecodeString<unsigned char>(unsigned char*, int, int)",93957338069056,93957338069469],["v8::internal::JsonStringify(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957338069968,93957338070263],["v8::internal::JsonStringifier::InitializeGap(v8::internal::Handle<v8::internal::Object>)",93957338071488,93957338072880],["v8::internal::JsonStringifier::ApplyReplacerFunction(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957338073488,93957338073843],["v8::internal::JsonStringifier::StackPush(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957338074128,93957338074361],["v8::internal::CircularStructureMessageBuilder::AppendStartLine(v8::internal::Handle<v8::internal::Object>)",93957338074704,93957338075708],["v8::internal::CircularStructureMessageBuilder::AppendEllipsis()",93957338076928,93957338078074],["v8::internal::JsonStringifier::SerializeJSPrimitiveWrapper(v8::internal::Handle<v8::internal::JSPrimitiveWrapper>, v8::internal::Handle<v8::internal::Object>)",93957338079792,93957338081476],["v8::internal::JsonStringifier::SerializeSmi(v8::internal::Smi)",93957338085600,93957338085865],["v8::internal::JsonStringifier::SerializeArrayLikeSlow(v8::internal::Handle<v8::internal::JSReceiver>, unsigned int, unsigned int)",93957338086512,93957338087731],["v8::internal::JsonStringifier::SerializeJSProxy(v8::internal::Handle<v8::internal::JSProxy>, v8::internal::Handle<v8::internal::Object>)",93957338088576,93957338089521],["v8::internal::Object::ToArrayLength(unsigned int*) const",93957338095232,93957338095361],["v8::internal::CircularStructureMessageBuilder::AppendKey(v8::internal::Handle<v8::internal::Object>)",93957338095552,93957338097993],["v8::internal::FieldIndex::ForDescriptor(v8::internal::Map, v8::internal::InternalIndex)",93957338098256,93957338098491],["void std::__1::vector<std::__1::pair<v8::internal::Handle<v8::internal::JSGlobalObject>, char const*>, std::__1::allocator<std::__1::pair<v8::internal::Handle<v8::internal::JSGlobalObject>, char const*> > >::__emplace_back_slow_path<v8::internal::Handle<v8::internal::JSGlobalObject>&, char const*&>(v8::internal::Handle<v8::internal::JSGlobalObject>&, char const*&)",93957338108656,93957338108930],["v8::sampler::SamplerManager::RemoveSampler(v8::sampler::Sampler*)",93957338109488,93957338110101],["v8::sampler::SignalHandler::HandleProfilerSignal(int, siginfo_t*, void*)",93957338110640,93957338110811],["v8::sampler::Sampler::~Sampler()",93957338110896,93957338110938],["v8::internal::Stats_Runtime_ArrayIndexOf(int, unsigned long*, v8::internal::Isolate*)",93957339944400,93957339946769],["v8::internal::Runtime_BigIntCompareToString(int, unsigned long*, v8::internal::Isolate*)",93957339952336,93957339952690],["v8::internal::Runtime_ToBigInt(int, unsigned long*, v8::internal::Isolate*)",93957339957328,93957339957472],["v8::internal::Runtime_ThrowConstructorNonCallableError(int, unsigned long*, v8::internal::Isolate*)",93957339961104,93957339961588],["v8::internal::Runtime_ThrowSuperNotCalled(int, unsigned long*, v8::internal::Isolate*)",93957339963840,93957339963995],["v8::internal::Runtime_DefineClass(int, unsigned long*, v8::internal::Isolate*)",93957339966608,93957339969211],["v8::internal::Runtime_LoadKeyedFromSuper(int, unsigned long*, v8::internal::Isolate*)",93957339973744,93957339974072],["v8::internal::Runtime_StoreKeyedToSuper(int, unsigned long*, v8::internal::Isolate*)",93957339976336,93957339976681],["bool v8::internal::(anonymous namespace)::AddDescriptorsByTemplate<v8::internal::NameDictionary>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::NameDictionary>, v8::internal::Handle<v8::internal::NumberDictionary>, v8::internal::Handle<v8::internal::FixedArray>, v8::internal::Handle<v8::internal::JSObject>, bool, v8::internal::Arguments<(v8::internal::ArgumentsType)0>&)",93957339979680,93957339983138],["bool v8::internal::(anonymous namespace)::SubstituteValues<v8::internal::NumberDictionary>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::NumberDictionary>, v8::internal::Arguments<(v8::internal::ArgumentsType)0>&, bool*)",93957339983680,93957339985401],["v8::internal::Runtime_TheHole(int, unsigned long*, v8::internal::Isolate*)",93957339985952,93957339985984],["v8::internal::Runtime_SetGrow(int, unsigned long*, v8::internal::Isolate*)",93957339986448,93957339986951],["v8::internal::Runtime_SetShrink(int, unsigned long*, v8::internal::Isolate*)",93957339987824,93957339988246],["v8::internal::Runtime_MapShrink(int, unsigned long*, v8::internal::Isolate*)",93957339989040,93957339989462],["v8::internal::Runtime_MapGrow(int, unsigned long*, v8::internal::Isolate*)",93957339990256,93957339990759],["v8::internal::Runtime_WeakCollectionDelete(int, unsigned long*, v8::internal::Isolate*)",93957339991632,93957339991875],["v8::internal::Stats_Runtime_DateCurrentTime(int, unsigned long*, v8::internal::Isolate*)",93957340013024,93957340013718],["v8::internal::Runtime_DebugToggleBlockCoverage(int, unsigned long*, v8::internal::Isolate*)",93957340051392,93957340051529],["v8::internal::Runtime_FunctionGetScriptId(int, unsigned long*, v8::internal::Isolate*)",93957340062512,93957340062921],["v8::internal::Runtime_AtomicsNumUnresolvedAsyncPromisesForTesting(int, unsigned long*, v8::internal::Isolate*)",93957340070944,93957340071538],["v8::internal::Runtime_AsyncFunctionResolve(int, unsigned long*, v8::internal::Isolate*)",93957340074960,93957340074997],["v8::internal::Runtime_AsyncGeneratorAwaitCaught(int, unsigned long*, v8::internal::Isolate*)",93957340078784,93957340078821],["v8::internal::Runtime_AsyncGeneratorYield(int, unsigned long*, v8::internal::Isolate*)",93957340080448,93957340080485],["v8::internal::Runtime_FatalProcessOutOfMemoryInAllocateRaw(int, unsigned long*, v8::internal::Isolate*)",93957340083248,93957340083300],["v8::internal::Runtime_ReThrow(int, unsigned long*, v8::internal::Isolate*)",93957340084816,93957340084949],["v8::internal::Runtime_ThrowSymbolAsyncIteratorInvalid(int, unsigned long*, v8::internal::Isolate*)",93957340085968,93957340086123],["v8::internal::Runtime_ThrowTypeError(int, unsigned long*, v8::internal::Isolate*)",93957340087664,93957340087903],["v8::internal::Runtime_ThrowInvalidTypedArrayAlignment(int, unsigned long*, v8::internal::Isolate*)",93957340089536,93957340090086],["v8::internal::Runtime_PromoteScheduledException(int, unsigned long*, v8::internal::Isolate*)",93957340091488,93957340091520],["v8::internal::Runtime_ThrowAccessedUninitializedVariable(int, unsigned long*, v8::internal::Isolate*)",93957340092688,93957340092847],["v8::internal::Runtime_NewTypeError(int, unsigned long*, v8::internal::Isolate*)",93957340094352,93957340094679],["v8::internal::Runtime_NewSyntaxError(int, unsigned long*, v8::internal::Isolate*)",93957340096352,93957340096627],["v8::internal::Runtime_IsJSReceiver(int, unsigned long*, v8::internal::Isolate*)",93957340209264,93957340209365],["v8::internal::Runtime_EnqueueMicrotask(int, unsigned long*, v8::internal::Isolate*)",93957340254944,93957340255321],["v8::internal::CompiledReplacement::Apply(v8::internal::ReplacementStringBuilder*, int, int, int*)",93957340280736,93957340281333],["v8::internal::(anonymous namespace)::MatchInfoBackedMatch::GetPrefix()",93957340337968,93957340338013],["v8::internal::Runtime_DeclareEvalVar(int, unsigned long*, v8::internal::Isolate*)",93957340350080,93957340350276],["v8::internal::Runtime_PushCatchContext(int, unsigned long*, v8::internal::Isolate*)",93957340363520,93957340363832],["v8::internal::Runtime_StoreLookupSlot_SloppyHoisting(int, unsigned long*, v8::internal::Isolate*)",93957340371360,93957340371708],["v8::internal::Runtime_StringSubstring(int, unsigned long*, v8::internal::Isolate*)",93957340382944,93957340383481],["v8::internal::Runtime_StringLessThan(int, unsigned long*, v8::internal::Isolate*)",93957340393840,93957340394114],["v8::internal::Runtime_StringEqual(int, unsigned long*, v8::internal::Isolate*)",93957340397744,93957340398115],["v8::internal::__RT_impl_Runtime_GetSubstitution(v8::internal::Arguments<(v8::internal::ArgumentsType)0>, v8::internal::Isolate*)::SimpleMatch::GetCapture(int, bool*)",93957340402864,93957340402877],["v8::internal::Stats_Runtime_SymbolDescriptiveString(int, unsigned long*, v8::internal::Isolate*)",93957340406688,93957340408065],["v8::internal::Stats_Runtime_ConstructConsString(int, unsigned long*, v8::internal::Isolate*)",93957340411936,93957340412683],["v8::internal::Stats_Runtime_RunningInSimulator(int, unsigned long*, v8::internal::Isolate*)",93957340416032,93957340416488],["v8::internal::Stats_Runtime_DynamicCheckMapsEnabled(int, unsigned long*, v8::internal::Isolate*)",93957340418384,93957340418848],["v8::internal::Stats_Runtime_OptimizeFunctionOnNextCall(int, unsigned long*, v8::internal::Isolate*)",93957340421392,93957340421939],["v8::internal::Stats_Runtime_PrepareFunctionForOptimization(int, unsigned long*, v8::internal::Isolate*)",93957340424096,93957340425104],["v8::internal::Stats_Runtime_NeverOptimizeFunction(int, unsigned long*, v8::internal::Isolate*)",93957340428272,93957340429161],["v8::internal::Stats_Runtime_UnblockConcurrentRecompilation(int, unsigned long*, v8::internal::Isolate*)",93957340433072,93957340433573],["v8::internal::Stats_Runtime_GetCallable(int, unsigned long*, v8::internal::Isolate*)",93957340434656,93957340435318],["v8::internal::Stats_Runtime_NotifyContextDisposed(int, unsigned long*, v8::internal::Isolate*)",93957340436304,93957340436816],["v8::internal::Stats_Runtime_SimulateNewspaceFull(int, unsigned long*, v8::internal::Isolate*)",93957340437744,93957340438546],["v8::internal::Stats_Runtime_DebugPrint(int, unsigned long*, v8::internal::Isolate*)",93957340439152,93957340439586],["v8::internal::Stats_Runtime_PrintWithNameForAssert(int, unsigned long*, v8::internal::Isolate*)",93957340441456,93957340442424],["v8::internal::Stats_Runtime_DebugTrackRetainingPath(int, unsigned long*, v8::internal::Isolate*)",93957340443440,93957340444290],["v8::internal::Stats_Runtime_SystemBreak(int, unsigned long*, v8::internal::Isolate*)",93957340445744,93957340446244],["v8::internal::Stats_Runtime_Abort(int, unsigned long*, v8::internal::Isolate*)",93957340446928,93957340447387],["v8::internal::Stats_Runtime_AbortCSAAssert(int, unsigned long*, v8::internal::Isolate*)",93957340448688,93957340449203],["v8::internal::Stats_Runtime_TraceEnter(int, unsigned long*, v8::internal::Isolate*)",93957340450016,93957340450735],["v8::internal::Stats_Runtime_HaveSameMap(int, unsigned long*, v8::internal::Isolate*)",93957340451968,93957340452591],["v8::internal::Stats_Runtime_HasElementsInALargeObjectSpace(int, unsigned long*, v8::internal::Isolate*)",93957340453568,93957340454168],["v8::internal::Stats_Runtime_DisallowCodegenFromStrings(int, unsigned long*, v8::internal::Isolate*)",93957340454976,93957340455525],["v8::internal::Runtime_RegexpHasNativeCode(int, unsigned long*, v8::internal::Isolate*)",93957340456592,93957340456907],["v8::internal::Runtime_RegexpTypeTag(int, unsigned long*, v8::internal::Isolate*)",93957340457648,93957340457974],["v8::internal::Runtime_RegexpIsUnmodified(int, unsigned long*, v8::internal::Isolate*)",93957340458688,93957340458891],["v8::internal::Runtime_HasFastElements(int, unsigned long*, v8::internal::Isolate*)",93957340459504,93957340459614],["v8::internal::Runtime_HasSmiElements(int, unsigned long*, v8::internal::Isolate*)",93957340460160,93957340460270],["v8::internal::Runtime_HasObjectElements(int, unsigned long*, v8::internal::Isolate*)",93957340460816,93957340460928],["v8::internal::Runtime_HasSmiOrObjectElements(int, unsigned long*, v8::internal::Isolate*)",93957340461472,93957340461582],["v8::internal::Runtime_HasDoubleElements(int, unsigned long*, v8::internal::Isolate*)",93957340462128,93957340462240],["v8::internal::Runtime_HasHoleyElements(int, unsigned long*, v8::internal::Isolate*)",93957340462784,93957340462909],["v8::internal::Runtime_HasDictionaryElements(int, unsigned long*, v8::internal::Isolate*)",93957340463472,93957340463584],["v8::internal::Runtime_HasPackedElements(int, unsigned long*, v8::internal::Isolate*)",93957340464128,93957340464240],["v8::internal::Runtime_HasSloppyArgumentsElements(int, unsigned long*, v8::internal::Isolate*)",93957340464784,93957340464899],["v8::internal::Runtime_HasFastProperties(int, unsigned long*, v8::internal::Isolate*)",93957340465456,93957340465565],["v8::internal::Runtime_HasFixedUint8Elements(int, unsigned long*, v8::internal::Isolate*)",93957340466112,93957340466224],["v8::internal::Runtime_HasFixedInt8Elements(int, unsigned long*, v8::internal::Isolate*)",93957340466768,93957340466880],["v8::internal::Runtime_HasFixedUint16Elements(int, unsigned long*, v8::internal::Isolate*)",93957340467424,93957340467536],["v8::internal::Runtime_HasFixedInt16Elements(int, unsigned long*, v8::internal::Isolate*)",93957340468080,93957340468192],["v8::internal::Runtime_HasFixedUint32Elements(int, unsigned long*, v8::internal::Isolate*)",93957340468736,93957340468848],["v8::internal::Runtime_HasFixedInt32Elements(int, unsigned long*, v8::internal::Isolate*)",93957340469392,93957340469504],["v8::internal::Runtime_HasFixedFloat32Elements(int, unsigned long*, v8::internal::Isolate*)",93957340470048,93957340470160],["v8::internal::Runtime_HasFixedFloat64Elements(int, unsigned long*, v8::internal::Isolate*)",93957340470704,93957340470816],["v8::internal::Runtime_HasFixedUint8ClampedElements(int, unsigned long*, v8::internal::Isolate*)",93957340471360,93957340471472],["v8::internal::Runtime_HasFixedBigUint64Elements(int, unsigned long*, v8::internal::Isolate*)",93957340472016,93957340472128],["v8::internal::Runtime_HasFixedBigInt64Elements(int, unsigned long*, v8::internal::Isolate*)",93957340472672,93957340472784],["v8::internal::Runtime_IsConcatSpreadableProtector(int, unsigned long*, v8::internal::Isolate*)",93957340473328,93957340473413],["v8::internal::Runtime_TypedArraySpeciesProtector(int, unsigned long*, v8::internal::Isolate*)",93957340473936,93957340474021],["v8::internal::Runtime_RegExpSpeciesProtector(int, unsigned long*, v8::internal::Isolate*)",93957340474544,93957340474629],["v8::internal::Runtime_PromiseSpeciesProtector(int, unsigned long*, v8::internal::Isolate*)",93957340475152,93957340475237],["v8::internal::Runtime_ArraySpeciesProtector(int, unsigned long*, v8::internal::Isolate*)",93957340475760,93957340475845],["v8::internal::Runtime_MapIteratorProtector(int, unsigned long*, v8::internal::Isolate*)",93957340476368,93957340476453],["v8::internal::Runtime_SetIteratorProtector(int, unsigned long*, v8::internal::Isolate*)",93957340476976,93957340477061],["v8::internal::Runtime_StringIteratorProtector(int, unsigned long*, v8::internal::Isolate*)",93957340477584,93957340477669],["v8::internal::Deserializer::ReadObject()",93957340528576,93957340528659],["v8::internal::Deserializer::RelocInfoVisitor::VisitEmbeddedPointer(v8::internal::Code, v8::internal::RelocInfo*)",93957340529952,93957340530131],["v8::internal::Deserializer::RelocInfoVisitor::VisitInternalReference(v8::internal::Code, v8::internal::RelocInfo*)",93957340530528,93957340530685],["v8::internal::EmbeddedData::FromIsolate(v8::internal::Isolate*)",93957340538000,93957340539169],["v8::internal::ReadOnlySerializer::MustBeDeferred(v8::internal::HeapObject)",93957340542624,93957340542649],["v8::internal::RootsSerializer::CheckRehashability(v8::internal::HeapObject)",93957340543392,93957340543454],["v8::internal::StartupSerializer::SerializeStringTable(v8::internal::StringTable*)::StartupSerializerStringTableVisitor::VisitRootPointers(v8::internal::Root, char const*, v8::internal::OffHeapCompressedObjectSlot, v8::internal::OffHeapCompressedObjectSlot)",93957340575536,93957340575706],["void v8::internal::Utf8Decoder::Decode<unsigned short>(unsigned short*, v8::internal::Vector<unsigned char const> const&)",93957340588096,93957340588418],["non-virtual thunk to v8::internal::CancelableTask::~CancelableTask()",93957340602864,93957340602917],["v8::internal::(anonymous namespace)::CancelableIdleFuncTask::RunInternal(double)",93957340604224,93957340604239],["v8::tracing::(anonymous namespace)::EscapeAndAppendString(char const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*)",93957340605632,93957340605972],["v8::tracing::TracedValue::AppendAsTraceFormat(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*) const",93957340606672,93957340606748],["v8::internal::trap_handler::GetThreadInWasmThreadLocalAddress()",93957340608256,93957340608278],["v8::internal::Malloced::operator new(unsigned long)",93957340609136,93957340609168],["v8_inspector::V8HeapProfilerAgentImpl::restore()",93957342552992,93957342553472],["v8_inspector::V8HeapProfilerAgentImpl::onTimer(void*)",93957342557024,93957342557128],["v8_inspector::(anonymous namespace)::HeapSnapshotProgress::ReportProgressValue(int, int)",93957342558976,93957342559066],["v8_inspector::(anonymous namespace)::GlobalObjectNameResolver::~GlobalObjectNameResolver()",93957342560144,93957342560195],["v8_crdtp::json::(anonymous namespace)::JSONEncoder<std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > >::HandleArrayBegin()",93957342773936,93957342774063],["v8_crdtp::DeserializerDescriptor::DeserializerDescriptor(v8_crdtp::DeserializerDescriptor::Field const*, unsigned long)",93957342798992,93957342799151],["v8_crdtp::ProtocolTypeTraits<double, void>::Deserialize(v8_crdtp::DeserializerState*, double*)",93957342801104,93957342801230],["v8_crdtp::IncomingDeferredMessage::MakeDeserializer() const",93957342802320,93957342802415],["v8_crdtp::SpanLessThan(v8_crdtp::span<char>, v8_crdtp::span<char>)",93957342802768,93957342802837],["v8_crdtp::json::platform::StrToD(char const*, double*)",93957342805504,93957342805554],["v8::internal::compiler::SinglePassRegisterAllocator::EmitGapMoveFromOutput(v8::internal::compiler::InstructionOperand, v8::internal::compiler::InstructionOperand, int)",93957343018592,93957343019053],["v8::internal::compiler::AllocateSpillSlots(v8::internal::compiler::MidTierRegisterAllocationData*)",93957343040256,93957343041723],["v8::internal::compiler::MoveOptimizer::FinalizeMoves(v8::internal::compiler::Instruction*)",93957343053424,93957343054793],["void std::__1::__insertion_sort_3<bool (*&)(v8::internal::compiler::MoveOperands const*, v8::internal::compiler::MoveOperands const*), v8::internal::compiler::MoveOperands**>(v8::internal::compiler::MoveOperands**, v8::internal::compiler::MoveOperands**, bool (*&)(v8::internal::compiler::MoveOperands const*, v8::internal::compiler::MoveOperands const*))",93957343068480,93957343068806],["v8::internal::ElementSizeLog2Of(v8::internal::MachineRepresentation)",93957343073264,93957343073308],["std::__1::map<v8::internal::compiler::Variable, v8::internal::compiler::Node*, std::__1::less<v8::internal::compiler::Variable>, v8::internal::ZoneAllocator<std::__1::pair<v8::internal::compiler::Variable const, v8::internal::compiler::Node*> > >::operator[](v8::internal::compiler::Variable const&)",93957343076944,93957343077195],["v8::internal::compiler::RegisterAllocatorVerifier::VerifyGapMoves()",93957343081760,93957343085790],["std::__1::__tree_iterator<v8::internal::compiler::InstructionOperand, std::__1::__tree_node<v8::internal::compiler::InstructionOperand, void*>*, long> std::__1::__tree<v8::internal::compiler::InstructionOperand, v8::internal::compiler::OperandAsKeyLess, v8::internal::ZoneAllocator<v8::internal::compiler::InstructionOperand> >::find<v8::internal::compiler::InstructionOperand>(v8::internal::compiler::InstructionOperand const&)",93957343087328,93957343087715],["v8::internal::compiler::BytecodeGraphBuilder::VisitBitwiseAndSmi()",93957343235504,93957343235604],["v8::internal::compiler::BytecodeGraphBuilder::VisitCreateArrayLiteral()",93957343249024,93957343249326],["v8::internal::compiler::BytecodeGraphBuilder::VisitForInContinue()",93957343254448,93957343254763],["v8::internal::compiler::BytecodeGraphBuilder::VisitIncBlockCounter()",93957343262880,93957343263080],["v8::internal::compiler::BytecodeGraphBuilder::VisitStar5()",93957343264720,93957343264788],["v8::internal::compiler::BytecodeGraphBuilder::TryGetScopeInfo()",93957343266064,93957343266360],["v8::internal::compiler::BytecodeGraphBuilder::MakeNode(v8::internal::compiler::Operator const*, int, v8::internal::compiler::Node* const*, bool)",93957343270000,93957343271228],["v8::internal::compiler::BytecodeGraphBuilder::BuildJumpIfFalse()",93957343275088,93957343275733],["v8::internal::compiler::BytecodeGraphBuilder::BuildJumpIf(v8::internal::compiler::Node*)",93957343279632,93957343280113],["v8::internal::compiler::BytecodeGraphBuilder::~BytecodeGraphBuilder()",93957343281520,93957343281754],["std::__1::__deque_base<v8::internal::compiler::GraphReducer::NodeState, v8::internal::RecyclingZoneAllocator<v8::internal::compiler::GraphReducer::NodeState> >::~__deque_base()",93957343282784,93957343283109],["v8::internal::compiler::BytecodeLivenessMap::InitializeLiveness(int, int, v8::internal::Zone*)",93957343283920,93957343284174],["v8::internal::compiler::CheckpointElimination::CheckpointElimination(v8::internal::compiler::AdvancedReducer::Editor*)",93957343285280,93957343285300],["v8::internal::compiler::CommonNodeCache::CommonNodeCache(v8::internal::Zone*)",93957343285920,93957343286687],["std::__1::__hash_table<std::__1::__hash_value_type<std::__1::pair<int, char>, v8::internal::compiler::Node*>, std::__1::__unordered_map_hasher<std::__1::pair<int, char>, std::__1::__hash_value_type<std::__1::pair<int, char>, v8::internal::compiler::Node*>, v8::base::hash<std::__1::pair<int, char> >, std::__1::equal_to<std::__1::pair<int, char> >, true>, std::__1::__unordered_map_equal<std::__1::pair<int, char>, std::__1::__hash_value_type<std::__1::pair<int, char>, v8::internal::compiler::Node*>, std::__1::equal_to<std::__1::pair<int, char> >, v8::base::hash<std::__1::pair<int, char> >, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<std::__1::pair<int, char>, v8::internal::compiler::Node*> > >::__rehash(unsigned long)",93957343288176,93957343288921],["v8::internal::compiler::CommonNodeCache::FindHeapConstant(v8::internal::Handle<v8::internal::HeapObject>)",93957343290128,93957343290185],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<long, v8::internal::compiler::Node*>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<long, v8::internal::compiler::Node*>, std::__1::__unordered_map_hasher<long, std::__1::__hash_value_type<long, v8::internal::compiler::Node*>, v8::base::hash<long>, std::__1::equal_to<long>, true>, std::__1::__unordered_map_equal<long, std::__1::__hash_value_type<long, v8::internal::compiler::Node*>, std::__1::equal_to<long>, v8::base::hash<long>, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<long, v8::internal::compiler::Node*> > >::__emplace_unique_key_args<long, std::__1::piecewise_construct_t const&, std::__1::tuple<long const&>, std::__1::tuple<> >(long const&, std::__1::piecewise_construct_t const&, std::__1::tuple<long const&>&&, std::__1::tuple<>&&)",93957343292528,93957343293485],["v8::internal::compiler::CommonOperatorReducer::Reduce(v8::internal::compiler::Node*)",93957343293600,93957343294012],["v8::internal::compiler::CommonOperatorReducer::ReduceDeoptimizeConditional(v8::internal::compiler::Node*)",93957343294912,93957343295617],["v8::internal::compiler::CommonOperatorReducer::ReducePhi(v8::internal::compiler::Node*)",93957343296048,93957343296979],["v8::internal::compiler::CommonOperatorReducer::ReduceSelect(v8::internal::compiler::Node*)",93957343298064,93957343299466],["v8::internal::compiler::CommonOperatorReducer::ReduceTrapConditional(v8::internal::compiler::Node*)",93957343299888,93957343300304],["v8::internal::compiler::NodeProperties::GetControlInput(v8::internal::compiler::Node*, int)",93957343300592,93957343300748],["v8::internal::compiler::CommonOperatorReducer::Change(v8::internal::compiler::Node*, v8::internal::compiler::Operator const*, v8::internal::compiler::Node*)",93957343300896,93957343301064],["v8::internal::compiler::FloatMatcher<float, (v8::internal::compiler::IrOpcode::Value)25>::FloatMatcher(v8::internal::compiler::Node*)",93957343301088,93957343301270],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::TrapId)",93957343301472,93957343301805],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::BranchOperatorInfo)",93957343301824,93957343301995],["v8::internal::compiler::ObjectAccessOf(v8::internal::compiler::Operator const*)",93957343302064,93957343302074],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::DeoptimizeParameters)",93957343302096,93957343302372],["v8::internal::compiler::CommonOperatorBuilder::MarkAsSafetyCheck(v8::internal::compiler::Operator const*, v8::internal::compiler::IsSafetyCheck)",93957343302416,93957343302739],["v8::internal::compiler::CommonOperatorBuilder::DeoptimizeIf(v8::internal::DeoptimizeKind, v8::internal::DeoptimizeReason, v8::internal::compiler::FeedbackSource const&, v8::internal::compiler::IsSafetyCheck)",93957343302960,93957343303635],["v8::internal::compiler::CommonOperatorBuilder::DelayedStringConstant(v8::internal::StringConstantBase const*)",93957343304336,93957343304476],["v8::internal::compiler::PipelineImpl::AllocateRegistersForTopTier(v8::internal::RegisterConfiguration const*, v8::internal::compiler::CallDescriptor*, bool)",93957344666336,93957344667367],["v8::internal::compiler::TypedLoweringPhase::Run(v8::internal::compiler::PipelineData*, v8::internal::Zone*)",93957344692176,93957344694460],["v8::internal::compiler::PropertyAccessBuilder::BuildCheckValue(v8::internal::compiler::Node*, v8::internal::compiler::Effect*, v8::internal::compiler::Control, v8::internal::Handle<v8::internal::HeapObject>)",93957344712848,93957344713246],["v8::internal::compiler::RedundancyElimination::TakeChecksFromFirstEffect(v8::internal::compiler::Node*)",93957344720704,93957344721004],["v8::internal::compiler::RepresentationChanger::TypeError(v8::internal::compiler::Node*, v8::internal::MachineRepresentation, v8::internal::compiler::Type, v8::internal::MachineRepresentation)",93957344723088,93957344723413],["v8::internal::compiler::RepresentationChanger::GetWord32RepresentationFor(v8::internal::compiler::Node*, v8::internal::MachineRepresentation, v8::internal::compiler::Type, v8::internal::compiler::Node*, v8::internal::compiler::UseInfo)",93957344730112,93957344732521],["v8::internal::compiler::RepresentationChanger::InsertUnconditionalDeopt(v8::internal::compiler::Node*, v8::internal::DeoptimizeReason)",93957344734944,93957344735397],["v8::internal::compiler::RepresentationChanger::Uint32OperatorFor(v8::internal::compiler::IrOpcode::Value)",93957344736112,93957344736284],["v8::internal::compiler::BasicBlock::set_control_input(v8::internal::compiler::Node*)",93957344737760,93957344737800],["v8::internal::compiler::BasicBlock::TrimNodes(std::__1::__wrap_iter<v8::internal::compiler::Node**>)",93957344737856,93957344737872],["v8::internal::compiler::Schedule::NewBasicBlock()",93957344738608,93957344739448],["v8::internal::compiler::Schedule::PlanNode(v8::internal::compiler::BasicBlock*, v8::internal::compiler::Node*)",93957344739568,93957344740060],["v8::internal::compiler::Schedule::AddSuccessor(v8::internal::compiler::BasicBlock*, v8::internal::compiler::BasicBlock*)",93957344741360,93957344742680],["v8::internal::compiler::Schedule::AddTailCall(v8::internal::compiler::BasicBlock*, v8::internal::compiler::Node*)",93957344743344,93957344743547],["v8::internal::compiler::Schedule::InsertBranch(v8::internal::compiler::BasicBlock*, v8::internal::compiler::BasicBlock*, v8::internal::compiler::Node*, v8::internal::compiler::BasicBlock*, v8::internal::compiler::BasicBlock*)",93957344744176,93957344744566],["v8::internal::compiler::ScheduledMachineLowering::ScheduledMachineLowering(v8::internal::compiler::JSGraph*, v8::internal::compiler::Schedule*, v8::internal::Zone*, v8::internal::compiler::SourcePositionTable*, v8::internal::compiler::NodeOriginTable*, v8::internal::PoisoningMitigationLevel)",93957344751504,93957344751925],["v8::internal::compiler::Typer::Visitor::SameValueNumbersOnlyTyper(v8::internal::compiler::Type, v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345138608,93957345138631],["v8::internal::compiler::Int64Lowering::ReplaceNodeWithProjections(v8::internal::compiler::Node*)",93957345194144,93957345194343],["void v8::internal::compiler::SimdScalarLowering::SmallerIntToInt32<short>(v8::internal::compiler::Node**, v8::internal::compiler::Node**)",93957345245312,93957345245840],["v8::internal::compiler::WasmGraphBuilder::Binop(v8::internal::wasm::WasmOpcode, v8::internal::compiler::Node*, v8::internal::compiler::Node*, int)",93957345252640,93957345254384],["v8::internal::compiler::WasmGraphBuilder::BuildI32Popcnt(v8::internal::compiler::Node*)",93957345267168,93957345267331],["v8::internal::compiler::WasmGraphBuilder::BuildF64UConvertI64(v8::internal::compiler::Node*)",93957345268416,93957345268463],["v8::internal::compiler::Diamond::Nest(v8::internal::compiler::Diamond const&, bool)",93957345272656,93957345273151],["v8::internal::compiler::WasmGraphBuilder::BuildWasmCall(v8::internal::Signature<v8::internal::wasm::ValueType> const*, v8::internal::Vector<v8::internal::compiler::Node*>, v8::internal::Vector<v8::internal::compiler::Node*>, int, v8::internal::compiler::Node*, v8::internal::compiler::WasmGraphBuilder::UseRetpoline, v8::internal::compiler::Node*)",93957345280704,93957345280973],["v8::internal::compiler::WasmGraphBuilder::CallRef(unsigned int, v8::internal::Vector<v8::internal::compiler::Node*>, v8::internal::Vector<v8::internal::compiler::Node*>, v8::internal::compiler::WasmGraphBuilder::CheckForNull, int)",93957345288544,93957345288578],["v8::internal::compiler::WasmGraphBuilder::MergeInstanceCacheInto(v8::internal::compiler::WasmInstanceCacheNodes*, v8::internal::compiler::WasmInstanceCacheNodes*, v8::internal::compiler::Node*)",93957345290048,93957345290167],["v8::internal::compiler::WasmGraphBuilder::GlobalSet(unsigned int, v8::internal::compiler::Node*)",93957345293920,93957345294454],["v8::internal::compiler::WasmGraphBuilder::TraceMemoryOperation(bool, v8::internal::MachineRepresentation, v8::internal::compiler::Node*, unsigned long, int)",93957345296240,93957345296583],["v8::internal::compiler::WasmGraphBuilder::BuildF64x2Trunc(v8::internal::compiler::Node*)",93957345299552,93957345299596],["v8::internal::compiler::WasmGraphBuilder::LowerInt64(v8::internal::Signature<v8::internal::MachineRepresentation>*)",93957345300320,93957345300828],["v8::internal::compiler::WasmGraphBuilder::MemoryInit(unsigned int, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, int)",93957345308800,93957345309092],["v8::internal::compiler::WasmGraphBuilder::TableSize(unsigned int)",93957345311072,93957345311465],["v8::internal::compiler::WasmGraphBuilder::RttSub(unsigned int, v8::internal::compiler::Node*)",93957345314080,93957345314305],["v8::internal::compiler::WasmGraphBuilder::BrOnCastAbs(v8::internal::compiler::Node**, v8::internal::compiler::Node**, v8::internal::compiler::Node**, v8::internal::compiler::Node**, std::__1::function<void (v8::internal::compiler::WasmGraphBuilder::Callbacks)>)",93957345316272,93957345317336],["v8::internal::compiler::WasmGraphBuilder::RefIsData(v8::internal::compiler::Node*, bool)",93957345318400,93957345318808],["v8::internal::compiler::WasmGraphBuilder::RefAsFunc(v8::internal::compiler::Node*, bool, int)",93957345319824,93957345320223],["v8::internal::compiler::WasmGraphBuilder::BrOnI31(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::WasmGraphBuilder::ObjectReferenceKnowledge, v8::internal::compiler::Node**, v8::internal::compiler::Node**, v8::internal::compiler::Node**, v8::internal::compiler::Node**)",93957345320624,93957345320935],["v8::internal::compiler::WasmGraphBuilder::ArraySet(v8::internal::compiler::Node*, v8::internal::wasm::ArrayType const*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::WasmGraphBuilder::CheckForNull, int)",93957345322288,93957345322936],["v8::internal::compiler::WasmGraphBuilder::I31GetU(v8::internal::compiler::Node*)",93957345323264,93957345323340],["v8::internal::compiler::(anonymous namespace)::WasmWrapperGraphBuilder::BuildJSToWasmWrapper(bool, v8::internal::compiler::JSWasmCallData const*, v8::internal::compiler::Node*)",93957345324112,93957345328638],["v8::internal::compiler::CompileWasmImportCallWrapper(v8::internal::wasm::WasmEngine*, v8::internal::wasm::CompilationEnv*, v8::internal::compiler::WasmImportCallKind, v8::internal::Signature<v8::internal::wasm::ValueType> const*, bool, int)",93957345331504,93957345335603],["v8::internal::compiler::CompileWasmToJSWrapper(v8::internal::Isolate*, v8::internal::Signature<v8::internal::wasm::ValueType> const*, v8::internal::compiler::WasmImportCallKind, int)",93957345345376,93957345346602],["v8::internal::compiler::(anonymous namespace)::LinkageLocationAllocator::Next(v8::internal::MachineRepresentation)",93957345356224,93957345356498],["v8::internal::compiler::(anonymous namespace)::WasmWrapperGraphBuilder::ToJS(v8::internal::compiler::Node*, v8::internal::wasm::ValueType)",93957345362784,93957345365658],["v8::internal::compiler::(anonymous namespace)::WasmWrapperGraphBuilder::BuildChangeTaggedToFloat64(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957345367856,93957345368264],["void std::__1::__function::__policy_invoker<void (v8::internal::compiler::Node*, v8::internal::compiler::BranchHint)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::WasmGraphBuilder::TestCallbacks(v8::internal::compiler::GraphAssemblerLabel<1ul>*)::$_3, void (v8::internal::compiler::Node*, v8::internal::compiler::BranchHint)> >(std::__1::__function::__policy_storage const*, v8::internal::compiler::Node*, v8::internal::compiler::BranchHint)",93957345369072,93957345369138],["void std::__1::__function::__policy_invoker<void (v8::internal::compiler::Node*, v8::internal::compiler::BranchHint)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::WasmGraphBuilder::BranchCallbacks(v8::base::SmallVector<v8::internal::compiler::Node*, 6ul>&, v8::base::SmallVector<v8::internal::compiler::Node*, 6ul>&, v8::base::SmallVector<v8::internal::compiler::Node*, 6ul>&, v8::base::SmallVector<v8::internal::compiler::Node*, 6ul>&)::$_7, void (v8::internal::compiler::Node*, v8::internal::compiler::BranchHint)> >(std::__1::__function::__policy_storage const*, v8::internal::compiler::Node*, v8::internal::compiler::BranchHint)",93957345369248,93957345369544],["void std::__1::__function::__policy_invoker<void (v8::internal::compiler::WasmGraphBuilder::Callbacks)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::WasmGraphBuilder::BrOnFunc(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::WasmGraphBuilder::ObjectReferenceKnowledge, v8::internal::compiler::Node**, v8::internal::compiler::Node**, v8::internal::compiler::Node**, v8::internal::compiler::Node**)::$_12, void (v8::internal::compiler::WasmGraphBuilder::Callbacks)> >(std::__1::__function::__policy_storage const*, v8::internal::compiler::WasmGraphBuilder::Callbacks&&)",93957345370960,93957345371478],["v8::internal::Snapshot::DefaultSnapshotBlob()",93957346612320,93957346612488],["bool std::__1::__insertion_sort_incomplete<std::__1::__less<unsigned char, unsigned char>&, unsigned char*>(unsigned char*, unsigned char*, std::__1::__less<unsigned char, unsigned char>&)",93957346616336,93957346616843],["bool std::__1::__insertion_sort_incomplete<std::__1::__less<unsigned int, unsigned int>&, unsigned int*>(unsigned int*, unsigned int*, std::__1::__less<unsigned int, unsigned int>&)",93957346625680,93957346626187],["std::__1::ios_base::failure::~failure()",93957346634560,93957346634570],["std::__1::basic_ios<char, std::__1::char_traits<char> >::copyfmt(std::__1::basic_ios<char, std::__1::char_traits<char> > const&)",93957346635952,93957346636057],["std::__1::basic_streambuf<wchar_t, std::__1::char_traits<wchar_t> >::~basic_streambuf()",93957346636688,93957346636712],["std::__1::basic_istream<char, std::__1::char_traits<char> >::~basic_istream()",93957346637328,93957346637360],["virtual thunk to std::__1::basic_ostream<char, std::__1::char_traits<char> >::~basic_ostream()",93957346638336,93957346638379],["std::__1::__stdoutbuf<char>::sync()",93957346653920,93957346654077],["std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > std::__1::num_get<char, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > >::__do_get_unsigned<unsigned int>(std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, unsigned int&, unsigned int&) const",93957346661264,93957346662396],["std::__1::__num_get<char>::__stage2_int_loop(char, int, char*, char*&, unsigned int&, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned int*, unsigned int*&, char const*)",93957346669792,93957346670407],["std::__1::num_get<wchar_t, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::do_get(std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, unsigned int&, unsigned short&) const",93957346675280,93957346675290],["std::__1::num_get<wchar_t, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::do_get(std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, unsigned int&, unsigned long long&) const",93957346679264,93957346679274],["std::__1::num_get<wchar_t, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::do_get(std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, unsigned int&, double&) const",93957346681888,93957346681898],["std::__1::num_get<wchar_t, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::do_get(std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, unsigned int&, void*&) const",93957346684496,93957346685752],["std::__1::__num_get<char>::__stage2_int_prep(std::__1::ios_base&, char&)",93957346687728,93957346688007],["__strtod_internal",139871563525872,139871563525888],["canonicalize_file_name",139871563559936,139871563559943],["getsubopt",139871563565888,139871563566186],["strtoimax",139871563568656,139871563568663],["wcstoumax",139871563568704,139871563568711],["setcontext",139871563568880,139871563569025],["swapcontext",139871563569648,139871563569908],["__strtof128_internal",139871563578560,139871563578576],["tempnam",139871563618368,139871563618499],["fopen",139871563738240,139871563738250],["ftell",139871563739920,139871563740286],["feof_unlocked",139871563780800,139871563780809],["_IO_file_xsputn",139871563787264,139871563787735],["_IO_file_open",139871563788464,139871563788695],["_IO_list_unlock",139871563800800,139871563800888],["pthread_cond_timedwait",139871563803488,139871563803523],["pthread_setcancelstate",139871563803872,139871563803907],["thrd_equal",139871563805520,139871563805529],["pthread_attr_destroy",139871563805616,139871563805636],["pthread_attr_setdetachstate",139871563805712,139871563805750],["pthread_attr_setinheritsched",139871563805776,139871563805817],["__libc_dynarray_finalize",139871563839456,139871563839667],["wcstol",139871563954576,139871563954594],["settimeofday",139871564024576,139871564024715],["readdir64_r",139871564073744,139871564074288],["fgetpwent",139871564085296,139871564085817],["__waitpid",139871564091776,139871564091783],["execvp",139871564094224,139871564094239],["__bsd_getpgrp",139871564096400,139871564096405],["globfree",139871564110448,139871564110530],["regfree",139871564188192,139871564188260],["re_exec",139871564189600,139871564189639],["__sched_setscheduler",139871564197696,139871564197729],["getaddrinfo",139871564210432,139871564213625],["posix_spawn_file_actions_destroy",139871564231440,139871564231552],["posix_spawnattr_getsigdefault",139871564232288,139871564232362],["posix_spawnattr_getsigmask",139871564234528,139871564234626],["posix_madvise",139871564234832,139871564234849],["getcpu",139871564235328,139871564235442],["__xstat",139871564235664,139871564235740],["__xmknod",139871564236704,139871564236796],["fstatfs",139871564237040,139871564237073],["chmod",139871564237328,139871564237361],["mkdir",139871564237568,139871564237601],["__open64_2",139871564238016,139871564238056],["posix_spawn",139871564546592,139871564546608],["isastream",139871564546752,139871564546776],["nftw",139871564548064,139871564548085],["advance",139871564548240,139871564548362],["__pthread_attr_getstack",139871566592608,139871566592631],["__pthread_mutex_unlock_usercnt",139871566601872,139871566602113],["pthread_rwlockattr_init",139871566610848,139871566610858],["pthread_attr_setaffinity_np@GLIBC_2.3.3",139871566632384,139871566632397],["_dl_make_stack_executable",139871566976016,139871566976080],["v8::DelayedTasksPlatform::GetTracingController()",93957335212448,93957335212466],["std::__1::__hash_table<unsigned long, std::__1::hash<unsigned long>, std::__1::equal_to<unsigned long>, std::__1::allocator<unsigned long> >::__rehash(unsigned long)",93957335213760,93957335214455],["v8::(anonymous namespace)::MockArrayBufferAllocator::Free(void*, unsigned long)",93957335312064,93957335312114],["v8::(anonymous namespace)::MultiMappedAllocator::AllocateUninitialized(unsigned long)",93957335312544,93957335313015],["v8::internal::FactoryBase<v8::internal::LocalFactory>::InternalizeString(v8::internal::Vector<unsigned char const> const&, bool)",93957336842992,93957336843140],["v8::internal::FactoryBase<v8::internal::LocalFactory>::NewDescriptorArray(int, int, v8::internal::AllocationType)",93957336846752,93957336846923],["v8::internal::Factory::CodeBuilder::CodeBuilder(v8::internal::Isolate*, v8::internal::CodeDesc const&, v8::internal::CodeKind)",93957336847808,93957336847906],["v8::internal::Factory::AllocateRaw(int, v8::internal::AllocationType, v8::internal::AllocationAlignment)",93957336849552,93957336849751],["v8::internal::Heap::RememberUnmappedPage(unsigned long, bool)",93957336945696,93957336945772],["v8::internal::Heap::AddHeapObjectAllocationTracker(v8::internal::HeapObjectAllocationTracker*)",93957336961120,93957336961461],["v8::internal::Heap::UsedGlobalHandlesSize()",93957336966464,93957336966485],["v8::internal::Heap::DeoptMarkedAllocationSites()",93957336969664,93957336969967],["v8::internal::Heap::CollectAllGarbage(int, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags)",93957336976080,93957336976122],["v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags)",93957336977888,93957336982756],["v8::internal::Heap::FinalizeIncrementalMarkingAtomically(v8::internal::GarbageCollectionReason)",93957336986272,93957336986316],["v8::internal::Heap::CreateFillerObjectAt(unsigned long, int, v8::internal::ClearRecordedSlots)",93957336987280,93957336987514],["v8::internal::Heap::FatalProcessOutOfMemory(char const*)",93957336988320,93957336988341],["v8::internal::Heap::CallGCPrologueCallbacks(v8::GCType, v8::GCCallbackFlags)",93957336988400,93957336988619],["v8::internal::Heap::CallGCEpilogueCallbacks(v8::GCType, v8::GCCallbackFlags)",93957336991008,93957336991227],["v8::internal::Heap::StartIncrementalMarkingIfAllocationLimitIsReached(int, v8::GCCallbackFlags)",93957336991392,93957336991820],["v8::internal::Heap::RemoveDirtyFinalizationRegistriesOnContext(v8::internal::NativeContext)",93957336992336,93957336993172],["v8::internal::Heap::CompleteSweepingFull()",93957336993456,93957336994279],["v8::internal::Heap::OldGenerationSpaceAvailable()",93957336994880,93957336995077],["v8::internal::Heap::StartIdleIncrementalMarking(v8::internal::GarbageCollectionReason, v8::GCCallbackFlags)",93957336995376,93957336995495],["v8::internal::Heap::UnprotectAndRegisterMemoryChunk(v8::internal::MemoryChunk*)",93957337006080,93957337006175],["v8::internal::Heap::ProcessYoungWeakReferences(v8::internal::WeakObjectRetainer*)",93957337008128,93957337008166],["v8::internal::Heap::IsLargeObject(v8::internal::HeapObject)",93957337009296,93957337009317],["v8::internal::Heap::HasLowAllocationRate()",93957337010912,93957337011458],["v8::internal::Heap::InvokeIncrementalMarkingEpilogueCallbacks()",93957337012864,93957337013622],["v8::internal::Heap::IdleNotification(double)",93957337014688,93957337016056],["v8::internal::Heap::AddNearHeapLimitCallback(unsigned long (*)(void*, unsigned long, unsigned long), void*)",93957337017664,93957337017832],["v8::internal::Heap::AppendArrayBufferExtension(v8::internal::JSArrayBuffer, v8::internal::ArrayBufferExtension*)",93957337018320,93957337018337],["v8::internal::Heap::FindAllNativeContexts()",93957337019072,93957337019536],["v8::internal::Heap::Contains(v8::internal::HeapObject) const",93957337019552,93957337019802],["v8::internal::Heap::IsValidAllocationSpace(v8::internal::AllocationSpace)",93957337020048,93957337020060],["v8::internal::Heap::builtin_address(int)",93957337020096,93957337020115],["v8::internal::Heap::IterateWeakRoots(v8::internal::RootVisitor*, v8::base::EnumSet<v8::internal::SkipRoot, int>)",93957337020160,93957337020314],["v8::internal::Heap::IterateRoots(v8::internal::RootVisitor*, v8::base::EnumSet<v8::internal::SkipRoot, int>)",93957337020416,93957337021366],["v8::internal::Heap::IterateWeakGlobalHandles(v8::internal::RootVisitor*)",93957337021424,93957337021445],["v8::internal::IndexGenerator::IndexGenerator(unsigned long)",93957337070256,93957337070579],["v8::internal::OldLargeObjectSpace::AllocateRaw(int, v8::internal::Executability)",93957337072496,93957337073136],["v8::internal::OldLargeObjectSpace::PromoteNewLargeObject(v8::internal::LargePage*)",93957337075344,93957337075454],["v8::internal::LargeObjectSpace::Contains(v8::internal::HeapObject)",93957337076320,93957337076343],["v8::internal::OldLargeObjectSpace::OldLargeObjectSpace(v8::internal::Heap*)",93957337076448,93957337076701],["v8::internal::NewLargeObjectSpace::AllocateRaw(int)",93957337076976,93957337077437],["v8::internal::NewLargeObjectSpace::Flip()",93957337077472,93957337077521],["v8::internal::NewLargeObjectSpace::SetCapacity(unsigned long)",93957337078016,93957337078054],["v8::internal::ObjectStatsCollector::Collect()",93957337480272,93957337481586],["v8::internal::PagedSpace::CommittedPhysicalMemory()",93957337490960,93957337491135],["v8::internal::PagedSpace::SetReadAndExecutable()",93957337492864,93957337492997],["v8::internal::PagedSpace::RefillLabMain(int, v8::internal::AllocationOrigin)",93957337494464,93957337494643],["v8::internal::LocalSpace::~LocalSpace()",93957337496288,93957337496353],["v8::internal::ReadOnlyHeap::OnHeapTearDown(v8::internal::Heap*)",93957337496880,93957337496934],["v8::internal::ReadOnlyHeapObjectIterator::ReadOnlyHeapObjectIterator(v8::internal::ReadOnlyHeap*)",93957337497280,93957337497327],["v8::internal::ReadOnlyHeap::~ReadOnlyHeap()",93957337497680,93957337497731],["v8::internal::ReadOnlySpace::~ReadOnlySpace()",93957337497920,93957337497971],["v8::internal::ReadOnlySpace::Seal(v8::internal::ReadOnlySpace::SealMode)",93957337498080,93957337498278],["v8::internal::ReadOnlySpace::ClearStringPaddingIfNeeded()",93957337498432,93957337498661],["v8::internal::ReadOnlySpace::ContainsSlow(unsigned long)",93957337499184,93957337499242],["v8::internal::ReadOnlySpace::EnsureSpaceForAllocation(int)",93957337499376,93957337499830],["v8::internal::ReadOnlyPage::ShrinkToHighWaterMark()",93957337499936,93957337500275],["v8::internal::ReadOnlySpace::InitializePage(v8::internal::BasicMemoryChunk*)",93957337500464,93957337500521],["v8::internal::GlobalSafepoint::GlobalSafepoint(v8::internal::Heap*)",93957337500544,93957337500642],["v8::internal::ScavengeVisitor::VisitPointers(v8::internal::HeapObject, v8::internal::CompressedMaybeObjectSlot, v8::internal::CompressedMaybeObjectSlot)",93957337536208,93957337536333],["v8::internal::ScavengeVisitor::VisitEmbeddedPointer(v8::internal::Code, v8::internal::RelocInfo*)",93957337536464,93957337536577],["v8::internal::IterateAndScavengePromotedObjectsVisitor::VisitPointers(v8::internal::HeapObject, v8::internal::CompressedMaybeObjectSlot, v8::internal::CompressedMaybeObjectSlot)",93957337537472,93957337538364],["v8::internal::IterateAndScavengePromotedObjectsVisitor::VisitCodeTarget(v8::internal::Code, v8::internal::RelocInfo*)",93957337538496,93957337539265],["v8::internal::SlotCallbackResult v8::internal::Scavenger::ScavengeObject<v8::internal::CompressedHeapObjectSlot>(v8::internal::CompressedHeapObjectSlot, v8::internal::HeapObject)",93957337540048,93957337546347],["v8::internal::SlotCallbackResult v8::internal::Scavenger::EvacuateShortcutCandidate<v8::internal::CompressedHeapObjectSlot>(v8::internal::Map, v8::internal::CompressedHeapObjectSlot, v8::internal::ConsString, int)",93957337552352,93957337564636],["v8::internal::Scavenger::PromotionList::PushLargeObject(int, v8::internal::HeapObject, v8::internal::Map, int)",93957337565440,93957337565667],["v8::internal::Worklist<std::__1::pair<v8::internal::HeapObject, int>, 256>::FlushToGlobal(int)",93957337565744,93957337566274],["v8::internal::Scavenger::~Scavenger()",93957337566560,93957337566890],["v8::internal::SlotSet::CheckPossiblyEmptyBuckets(unsigned long, v8::internal::PossiblyEmptyBuckets*)",93957337567664,93957337567882],["void v8::internal::BodyDescriptorApply<v8::internal::CallIterateBody, void, v8::internal::Map, v8::internal::HeapObject, int, v8::internal::IterateAndScavengePromotedObjectsVisitor*>(v8::internal::InstanceType, v8::internal::Map, v8::internal::HeapObject, int, v8::internal::IterateAndScavengePromotedObjectsVisitor*)",93957337568128,93957337569756],["void v8::internal::CallIterateBody::apply<v8::internal::Map::BodyDescriptor, v8::internal::IterateAndScavengePromotedObjectsVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::IterateAndScavengePromotedObjectsVisitor*)",93957337569824,93957337569882],["void v8::internal::CallIterateBody::apply<v8::internal::SharedFunctionInfo::BodyDescriptor, v8::internal::IterateAndScavengePromotedObjectsVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::IterateAndScavengePromotedObjectsVisitor*)",93957337569952,93957337570007],["void v8::internal::BodyDescriptorBase::IteratePointers<v8::internal::IterateAndScavengePromotedObjectsVisitor>(v8::internal::HeapObject, int, int, v8::internal::IterateAndScavengePromotedObjectsVisitor*)",93957337570080,93957337570956],["void v8::internal::BodyDescriptorBase::IterateMaybeWeakPointers<v8::internal::IterateAndScavengePromotedObjectsVisitor>(v8::internal::HeapObject, int, int, v8::internal::IterateAndScavengePromotedObjectsVisitor*)",93957337571376,93957337572252],["void v8::internal::WasmStruct::BodyDescriptor::IterateBody<v8::internal::IterateAndScavengePromotedObjectsVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::IterateAndScavengePromotedObjectsVisitor*)",93957337572336,93957337572544],["v8::internal::interpreter::BytecodeArrayBuilder::LoadIteratorProperty(v8::internal::interpreter::Register, int)",93957337843488,93957337843931],["v8::internal::Handle<v8::internal::Object> v8::internal::interpreter::BytecodeArrayIterator::GetConstantForIndexOperand<v8::internal::Isolate>(int, v8::internal::Isolate*) const",93957337876736,93957337876920],["v8::internal::interpreter::BytecodeArrayWriter::BindJumpTableEntry(v8::internal::interpreter::BytecodeJumpTable*, int)",93957337889792,93957337889862],["v8::internal::interpreter::BytecodeGenerator::BuildGeneratorObjectVariableInitialization()",93957337903168,93957337903558],["v8::internal::interpreter::BytecodeGenerator::VisitWhileStatement(v8::internal::WhileStatement*)",93957337914656,93957337915404],["v8::internal::interpreter::BytecodeGenerator::VisitInitializeClassMembersStatement(v8::internal::InitializeClassMembersStatement*)",93957337933872,93957337933947],["v8::internal::interpreter::BytecodeGenerator::BuildAsyncReturn(int)",93957337949296,93957337949659],["v8::internal::interpreter::BytecodeGenerator::BuildAwait(int)",93957337965712,93957337966365],["v8::internal::interpreter::BytecodeGenerator::VisitCall(v8::internal::Call*)",93957337972624,93957337976463],["v8::internal::interpreter::BytecodeGenerator::VisitCountOperation(v8::internal::CountOperation*)",93957337981936,93957337985562],["v8::internal::interpreter::BytecodeGenerator::VisitNaryLogicalOrExpression(v8::internal::NaryOperation*)",93957337989504,93957337990107],["v8::internal::interpreter::BytecodeGenerator::VisitGetTemplateObject(v8::internal::GetTemplateObject*)",93957337995152,93957337995560],["v8::internal::interpreter::BytecodeGenerator::VisitNullishSubExpression(v8::internal::Expression*, v8::internal::interpreter::BytecodeLabels*, int)",93957337998336,93957337998843],["v8::internal::interpreter::BytecodeGenerator::VisitNoStackOverflowCheck(v8::internal::AstNode*)",93957338001152,93957338002232],["v8::internal::interpreter::BytecodeGenerator::ControlScope::DeferredCommands::GetNewTokenForCommand(v8::internal::interpreter::BytecodeGenerator::ControlScope::Command, v8::internal::Statement*)",93957338004512,93957338004858],["v8::internal::interpreter::BytecodeRegisterOptimizer::PrepareOutputRegister(v8::internal::interpreter::Register)",93957338007200,93957338007476],["v8::internal::interpreter::BytecodeRegisterOptimizer::RegisterListFreeEvent(v8::internal::interpreter::RegisterList)",93957338008672,93957338008807],["std::__1::__deque_base<v8::internal::interpreter::BytecodeRegisterOptimizer::RegisterInfo*, v8::internal::RecyclingZoneAllocator<v8::internal::interpreter::BytecodeRegisterOptimizer::RegisterInfo*> >::~__deque_base()",93957338009200,93957338009525],["std::__1::__split_buffer<int*, v8::internal::RecyclingZoneAllocator<int*>&>::push_back(int*&&)",93957338012160,93957338013098],["v8::internal::interpreter::Register::function_closure()",93957338014096,93957338014107],["v8::internal::interpreter::Register::bytecode_array()",93957338014160,93957338014171],["v8::internal::interpreter::Bytecodes::ToString(v8::internal::interpreter::Bytecode, v8::internal::interpreter::OperandScale, char const*)",93957338016928,93957338017458],["v8::internal::interpreter::Bytecodes::BytecodeHasHandler(v8::internal::interpreter::Bytecode, v8::internal::interpreter::OperandScale)",93957338017728,93957338017823],["v8::internal::Handle<v8::internal::FixedArray> v8::internal::interpreter::ConstantArrayBuilder::ToFixedArray<v8::internal::Isolate>(v8::internal::Isolate*)",93957338018832,93957338019782],["v8::internal::interpreter::ConstantArrayBuilder::AllocateReservedEntry(v8::internal::Smi)",93957338021792,93957338022156],["v8::internal::interpreter::ConstantArrayBuilder::Insert(v8::internal::Scope const*)",93957338023504,93957338023845],["v8::internal::interpreter::ConstantArrayBuilder::InsertEmptyArrayBoilerplateDescription()",93957338024336,93957338024485],["v8::internal::interpreter::ConstantArrayBuilder::SetDeferredAt(unsigned long, v8::internal::Handle<v8::internal::Object>)",93957338024928,93957338025036],["v8::internal::interpreter::ConstantArrayBuilder::DiscardReservedEntry(v8::internal::interpreter::OperandSize)",93957338025728,93957338025792],["v8::internal::interpreter::BreakableControlFlowBuilder::~BreakableControlFlowBuilder()",93957338027040,93957338027145],["v8::internal::interpreter::BreakableControlFlowBuilder::EmitJumpIfUndefined(v8::internal::interpreter::BytecodeLabels*)",93957338027296,93957338027331],["v8::internal::interpreter::LoopBuilder::LoopBody()",93957338027632,93957338027667],["v8::internal::interpreter::SwitchBuilder::~SwitchBuilder()",93957338027840,93957338027959],["v8::internal::interpreter::SwitchBuilder::SetCaseTarget(int, v8::internal::CaseClause*)",93957338028096,93957338028188],["v8::internal::interpreter::TryCatchBuilder::~TryCatchBuilder()",93957338028240,93957338028296],["v8::internal::interpreter::TryCatchBuilder::EndTry()",93957338028336,93957338028421],["v8::internal::interpreter::TryFinallyBuilder::~TryFinallyBuilder()",93957338028464,93957338028557],["v8::internal::interpreter::TryFinallyBuilder::LeaveTry()",93957338028656,93957338028692],["v8::internal::interpreter::TryFinallyBuilder::BeginHandler()",93957338028736,93957338028779],["v8::internal::interpreter::ConditionalControlFlowBuilder::~ConditionalControlFlowBuilder()",93957338028848,93957338029081],["v8::internal::interpreter::ConditionalControlFlowBuilder::JumpToEnd()",93957338029120,93957338029156],["v8::internal::interpreter::ConditionalControlFlowBuilder::Else()",93957338029232,93957338029293],["v8::internal::Handle<v8::internal::ByteArray> v8::internal::interpreter::HandlerTableBuilder::ToHandlerTable<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*)",93957338029504,93957338029712],["v8::internal::interpreter::HandlerTableBuilder::NewHandlerEntry()",93957338029744,93957338030058],["v8::internal::interpreter::HandlerTableBuilder::SetTryRegionEnd(int, unsigned long)",93957338030096,93957338030117],["v8::internal::interpreter::HandlerTableBuilder::SetPrediction(int, v8::internal::HandlerTable::CatchPrediction)",93957338030160,93957338030180],["v8::internal::interpreter::IntrinsicsHelper::IsSupported(v8::internal::Runtime::FunctionId)",93957338030224,93957338030256],["v8::internal::interpreter::IntrinsicsHelper::ToRuntimeId(v8::internal::interpreter::IntrinsicsHelper::IntrinsicId)",93957338030320,93957338030358],["v8::internal::interpreter::Interpreter::GetBytecodeHandler(v8::internal::interpreter::Bytecode, v8::internal::interpreter::OperandScale)",93957338030496,93957338030602],["v8::internal::interpreter::InterpreterCompilationJob::FinalizeJobImpl(v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Isolate*)",93957338031120,93957338031582],["v8::internal::interpreter::InterpreterCompilationJob::FinalizeJobImpl(v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::LocalIsolate*)",93957338032704,93957338033166],["v8::internal::interpreter::Interpreter::NewCompilationJob(v8::internal::ParseInfo*, v8::internal::FunctionLiteral*, v8::internal::AccountingAllocator*, std::__1::vector<v8::internal::FunctionLiteral*, std::__1::allocator<v8::internal::FunctionLiteral*> >*, v8::internal::LocalIsolate*)",93957338034288,93957338034513],["v8::internal::interpreter::Interpreter::Initialize()",93957338034768,93957338035063],["v8::internal::interpreter::InterpreterCompilationJob::~InterpreterCompilationJob()",93957338035920,93957338036204],["v8::internal::interpreter::Interpreter::~Interpreter()",93957338036512,93957338036560],["void std::__1::__function::__policy_invoker<void (v8::internal::interpreter::Bytecode, v8::internal::interpreter::OperandScale)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::interpreter::Interpreter::Initialize()::$_0, void (v8::internal::interpreter::Bytecode, v8::internal::interpreter::OperandScale)> >(std::__1::__function::__policy_storage const*, v8::internal::interpreter::Bytecode, v8::internal::interpreter::OperandScale)",93957338036624,93957338036826],["v8::internal::JsonParseInternalizer::Internalize(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957338036976,93957338037177],["v8::internal::JsonParser<unsigned char>::UpdatePointersCallback(v8::Isolate*, v8::GCType, v8::GCCallbackFlags, void*)",93957338037776,93957338037834],["v8::internal::JsonParser<unsigned char>::ParseJsonValue()",93957338037920,93957338041916],["v8::internal::JsonParser<unsigned char>::ScanJsonString(bool)",93957338042352,93957338042753],["v8::internal::JsonParser<unsigned char>::ScanJsonPropertyKey(v8::internal::JsonParser<unsigned char>::JsonContinuation*)",93957338043024,93957338043429],["v8::internal::Handle<v8::internal::String> v8::internal::JsonParser<unsigned char>::DecodeString<v8::internal::SeqOneByteString>(v8::internal::JsonString const&, v8::internal::Handle<v8::internal::SeqOneByteString>, v8::internal::Handle<v8::internal::String>)",93957338043840,93957338044100],["v8::internal::JsonParser<unsigned char>::ParseJsonNumber()",93957338044384,93957338045311],["v8::internal::JsonParser<unsigned char>::JsonContinuation::operator=(v8::internal::JsonParser<unsigned char>::JsonContinuation&&)",93957338045648,93957338045766],["v8::internal::Stats_Runtime_TransitionElementsKindWithKind(int, unsigned long*, v8::internal::Isolate*)",93957339930960,93957339931586],["v8::internal::Runtime_AtomicsCompareExchange(int, unsigned long*, v8::internal::Isolate*)",93957339948192,93957339948229],["v8::internal::Runtime_BigIntCompareToBigInt(int, unsigned long*, v8::internal::Isolate*)",93957339950688,93957339950909],["v8::internal::Runtime_BigIntEqualToNumber(int, unsigned long*, v8::internal::Isolate*)",93957339954208,93957339954334],["v8::internal::Runtime_BigIntToNumber(int, unsigned long*, v8::internal::Isolate*)",93957339956544,93957339956733],["v8::internal::Runtime_BigIntBinaryOp(int, unsigned long*, v8::internal::Isolate*)",93957339958016,93957339958467],["v8::internal::Runtime_ThrowUnsupportedSuperError(int, unsigned long*, v8::internal::Isolate*)",93957339960416,93957339960571],["v8::internal::Runtime_ThrowStaticPrototypeError(int, unsigned long*, v8::internal::Isolate*)",93957339962464,93957339962619],["v8::internal::Stats_Runtime_ThrowSuperAlreadyCalledError(int, unsigned long*, v8::internal::Isolate*)",93957339963312,93957339963836],["v8::internal::Stats_Runtime_ThrowSuperNotCalled(int, unsigned long*, v8::internal::Isolate*)",93957339964000,93957339964524],["v8::internal::Stats_Runtime_ThrowNotSuperConstructor(int, unsigned long*, v8::internal::Isolate*)",93957339965376,93957339966594],["v8::internal::Stats_Runtime_DefineClass(int, unsigned long*, v8::internal::Isolate*)",93957339969216,93957339972240],["v8::internal::Stats_Runtime_LoadFromSuper(int, unsigned long*, v8::internal::Isolate*)",93957339972800,93957339973730],["v8::internal::Stats_Runtime_LoadKeyedFromSuper(int, unsigned long*, v8::internal::Isolate*)",93957339974080,93957339974790],["v8::internal::Stats_Runtime_StoreToSuper(int, unsigned long*, v8::internal::Isolate*)",93957339975376,93957339976326],["v8::internal::Stats_Runtime_StoreKeyedToSuper(int, unsigned long*, v8::internal::Isolate*)",93957339976688,93957339977415],["v8::internal::Stats_Runtime_CompileForOnStackReplacement(int, unsigned long*, v8::internal::Isolate*)",93957340007792,93957340010288],["v8::internal::Runtime_GetGeneratorScopeCount(int, unsigned long*, v8::internal::Isolate*)",93957340024736,93957340025098],["v8::internal::Runtime_DebugPushPromise(int, unsigned long*, v8::internal::Isolate*)",93957340043184,93957340043381],["v8::internal::Runtime_DebugAsyncFunctionResumed(int, unsigned long*, v8::internal::Isolate*)",93957340054224,93957340054421],["v8::internal::Stats_Runtime_ForInHasProperty(int, unsigned long*, v8::internal::Isolate*)",93957340060224,93957340060867],["v8::internal::Runtime_FunctionGetScriptSourcePosition(int, unsigned long*, v8::internal::Isolate*)",93957340064736,93957340064858],["v8::internal::Runtime_AtomicsNumWaitersForTesting(int, unsigned long*, v8::internal::Isolate*)",93957340068880,93957340069474],["v8::internal::Runtime_AsyncFunctionAwaitCaught(int, unsigned long*, v8::internal::Isolate*)",93957340073296,93957340073333],["v8::internal::Runtime_AsyncFunctionReject(int, unsigned long*, v8::internal::Isolate*)",93957340074544,93957340074581],["v8::internal::Runtime_CreateJSGeneratorObject(int, unsigned long*, v8::internal::Isolate*)",93957340075376,93957340076318],["v8::internal::Runtime_GeneratorGetFunction(int, unsigned long*, v8::internal::Isolate*)",93957340078064,93957340078198],["v8::internal::Runtime_AsyncGeneratorAwaitUncaught(int, unsigned long*, v8::internal::Isolate*)",93957340079200,93957340079237],["v8::internal::Runtime_AsyncGeneratorReject(int, unsigned long*, v8::internal::Isolate*)",93957340080032,93957340080069],["v8::internal::Runtime_GeneratorGetResumeMode(int, unsigned long*, v8::internal::Isolate*)",93957340080864,93957340080901],["v8::internal::Runtime_AccessCheck(int, unsigned long*, v8::internal::Isolate*)",93957340082176,93957340082517],["v8::internal::Runtime_FatalProcessOutOfMemoryInvalidArrayLength(int, unsigned long*, v8::internal::Isolate*)",93957340083696,93957340083748],["v8::internal::Stats_Runtime_Throw(int, unsigned long*, v8::internal::Isolate*)",93957340084288,93957340084814],["v8::internal::Stats_Runtime_ReThrow(int, unsigned long*, v8::internal::Isolate*)",93957340084960,93957340085484],["v8::internal::Stats_Runtime_ThrowStackOverflow(int, unsigned long*, v8::internal::Isolate*)",93957340085520,93957340085954],["v8::internal::Stats_Runtime_ThrowSymbolAsyncIteratorInvalid(int, unsigned long*, v8::internal::Isolate*)",93957340086128,93957340086652],["v8::internal::Stats_Runtime_ThrowRangeError(int, unsigned long*, v8::internal::Isolate*)",93957340086944,93957340087653],["v8::internal::Stats_Runtime_ThrowTypeError(int, unsigned long*, v8::internal::Isolate*)",93957340087904,93957340088543],["v8::internal::Stats_Runtime_ThrowTypeErrorIfStrict(int, unsigned long*, v8::internal::Isolate*)",93957340088848,93957340089522],["v8::internal::Stats_Runtime_ThrowInvalidTypedArrayAlignment(int, unsigned long*, v8::internal::Isolate*)",93957340090096,93957340090999],["v8::internal::Stats_Runtime_UnwindAndFindExceptionHandler(int, unsigned long*, v8::internal::Isolate*)",93957340091040,93957340091474],["v8::internal::Stats_Runtime_PromoteScheduledException(int, unsigned long*, v8::internal::Isolate*)",93957340091520,93957340091954],["v8::internal::Stats_Runtime_ThrowReferenceError(int, unsigned long*, v8::internal::Isolate*)",93957340092128,93957340092675],["v8::internal::Stats_Runtime_ThrowAccessedUninitializedVariable(int, unsigned long*, v8::internal::Isolate*)",93957340092848,93957340093395],["v8::internal::Stats_Runtime_NewError(int, unsigned long*, v8::internal::Isolate*)",93957340093696,93957340094345],["v8::internal::Stats_Runtime_NewTypeError(int, unsigned long*, v8::internal::Isolate*)",93957340094688,93957340095400],["v8::internal::Stats_Runtime_NewReferenceError(int, unsigned long*, v8::internal::Isolate*)",93957340095696,93957340096345],["v8::internal::Stats_Runtime_NewSyntaxError(int, unsigned long*, v8::internal::Isolate*)",93957340096640,93957340097289],["v8::internal::Stats_Runtime_AddDictionaryProperty(int, unsigned long*, v8::internal::Isolate*)",93957340174656,93957340175330],["v8::internal::Runtime_SetOwnPropertyIgnoreAttributes(int, unsigned long*, v8::internal::Isolate*)",93957340226096,93957340226414],["v8::internal::Runtime_LessThan(int, unsigned long*, v8::internal::Isolate*)",93957340248192,93957340248375],["v8::internal::Runtime_PromiseHookBefore(int, unsigned long*, v8::internal::Isolate*)",93957340262512,93957340262784],["v8::internal::Stats_Runtime_CheckProxyGetSetTrapResult(int, unsigned long*, v8::internal::Isolate*)",93957340273248,93957340274044],["v8::internal::Runtime_RegExpExperimentalOneshotExec(int, unsigned long*, v8::internal::Isolate*)",93957340290752,93957340291398],["v8::internal::Runtime_IsRegExp(int, unsigned long*, v8::internal::Isolate*)",93957340336720,93957340336821],["v8::internal::(anonymous namespace)::VectorBackedMatch::GetPrefix()",93957340340128,93957340340164],["v8::internal::Runtime_DeclareGlobals(int, unsigned long*, v8::internal::Isolate*)",93957340345200,93957340347033],["v8::internal::Runtime_NewStrictArguments(int, unsigned long*, v8::internal::Isolate*)",93957340355392,93957340356103],["v8::internal::Runtime_NewFunctionContext(int, unsigned long*, v8::internal::Isolate*)",93957340361424,93957340361714],["v8::internal::Runtime_DeleteLookupSlot(int, unsigned long*, v8::internal::Isolate*)",93957340365488,93957340365973],["v8::internal::Runtime_StoreLookupSlot_Sloppy(int, unsigned long*, v8::internal::Isolate*)",93957340369280,93957340369610],["v8::internal::(anonymous namespace)::DeclareGlobal(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSGlobalObject>, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes, bool, v8::internal::(anonymous namespace)::RedeclarationType)",93957340374112,93957340374855],["v8::internal::Runtime_StringReplaceOneCharWithString(int, unsigned long*, v8::internal::Isolate*)",93957340380912,93957340381395],["v8::internal::Runtime_InternalizeString(int, unsigned long*, v8::internal::Isolate*)",93957340385536,93957340385759],["v8::internal::Runtime_StringToArray(int, unsigned long*, v8::internal::Isolate*)",93957340390208,93957340391791],["v8::internal::Runtime_StringLessThanOrEqual(int, unsigned long*, v8::internal::Isolate*)",93957340394816,93957340395090],["v8::internal::Runtime_StringGreaterThanOrEqual(int, unsigned long*, v8::internal::Isolate*)",93957340396768,93957340397042],["v8::internal::Runtime_FlattenString(int, unsigned long*, v8::internal::Isolate*)",93957340398880,93957340399071],["v8::internal::Runtime_StringEscapeQuotes(int, unsigned long*, v8::internal::Isolate*)",93957340400112,93957340401284],["v8::internal::Stats_Runtime_CreatePrivateSymbol(int, unsigned long*, v8::internal::Isolate*)",93957340403296,93957340404069],["v8::internal::Stats_Runtime_CreatePrivateNameSymbol(int, unsigned long*, v8::internal::Isolate*)",93957340405088,93957340405675],["v8::internal::Stats_Runtime_SymbolIsPrivate(int, unsigned long*, v8::internal::Isolate*)",93957340408192,93957340408734],["v8::internal::Stats_Runtime_ConstructDouble(int, unsigned long*, v8::internal::Isolate*)",93957340410288,93957340411544],["v8::internal::Stats_Runtime_ConstructSlicedString(int, unsigned long*, v8::internal::Isolate*)",93957340413088,93957340413876],["v8::internal::Stats_Runtime_DeoptimizeNow(int, unsigned long*, v8::internal::Isolate*)",93957340415168,93957340415993],["v8::internal::Stats_Runtime_RuntimeEvaluateREPL(int, unsigned long*, v8::internal::Isolate*)",93957340416704,93957340417309],["v8::internal::Stats_Runtime_IsConcurrentRecompilationSupported(int, unsigned long*, v8::internal::Isolate*)",93957340417872,93957340418334],["v8::internal::Stats_Runtime_IsTopTierTurboprop(int, unsigned long*, v8::internal::Isolate*)",93957340418896,93957340419360],["v8::internal::Stats_Runtime_CompileBaseline(int, unsigned long*, v8::internal::Isolate*)",93957340420384,93957340421217],["v8::internal::Stats_Runtime_TierupFunctionOnNextCall(int, unsigned long*, v8::internal::Isolate*)",93957340422128,93957340422678],["v8::internal::Runtime_PrepareFunctionForOptimization(int, unsigned long*, v8::internal::Isolate*)",93957340423504,93957340424094],["v8::internal::Runtime_OptimizeOsr(int, unsigned long*, v8::internal::Isolate*)",93957340425104,93957340426146],["v8::internal::Runtime_NeverOptimizeFunction(int, unsigned long*, v8::internal::Isolate*)",93957340427760,93957340428272],["v8::internal::Runtime_GetOptimizationStatus(int, unsigned long*, v8::internal::Isolate*)",93957340429168,93957340430844],["v8::internal::Runtime_UnblockConcurrentRecompilation(int, unsigned long*, v8::internal::Isolate*)",93957340432944,93957340433065],["v8::internal::Runtime_GetUndetectable(int, unsigned long*, v8::internal::Isolate*)",93957340433584,93957340433790],["v8::internal::Runtime_GetCallable(int, unsigned long*, v8::internal::Isolate*)",93957340434368,93957340434641],["v8::internal::Runtime_ClearFunctionFeedback(int, unsigned long*, v8::internal::Isolate*)",93957340435328,93957340435544],["v8::internal::Runtime_NotifyContextDisposed(int, unsigned long*, v8::internal::Isolate*)",93957340436160,93957340436303],["v8::internal::Runtime_SetAllocationTimeout(int, unsigned long*, v8::internal::Isolate*)",93957340436816,93957340436848],["v8::internal::Runtime_SimulateNewspaceFull(int, unsigned long*, v8::internal::Isolate*)",93957340437312,93957340437741],["v8::internal::Runtime_ScheduleGCInStackCheck(int, unsigned long*, v8::internal::Isolate*)",93957340438560,93957340438627],["v8::internal::Runtime_DebugPrint(int, unsigned long*, v8::internal::Isolate*)",93957340439088,93957340439142],["v8::internal::Runtime_DebugPrintPtr(int, unsigned long*, v8::internal::Isolate*)",93957340439600,93957340440074],["v8::internal::Runtime_PrintWithNameForAssert(int, unsigned long*, v8::internal::Isolate*)",93957340440928,93957340441453],["v8::internal::Runtime_DebugTrace(int, unsigned long*, v8::internal::Isolate*)",93957340442432,93957340442505],["v8::internal::Runtime_DebugTrackRetainingPath(int, unsigned long*, v8::internal::Isolate*)",93957340442976,93957340443438],["v8::internal::Runtime_GlobalPrint(int, unsigned long*, v8::internal::Isolate*)",93957340444304,93957340444735],["v8::internal::Runtime_SystemBreak(int, unsigned long*, v8::internal::Isolate*)",93957340445600,93957340445731],["v8::internal::Runtime_SetForceSlowPath(int, unsigned long*, v8::internal::Isolate*)",93957340446256,93957340446303],["v8::internal::Runtime_Abort(int, unsigned long*, v8::internal::Isolate*)",93957340446800,93957340446919],["v8::internal::Runtime_AbortJS(int, unsigned long*, v8::internal::Isolate*)",93957340447392,93957340447748],["v8::internal::Runtime_AbortCSAAssert(int, unsigned long*, v8::internal::Isolate*)",93957340448496,93957340448684],["v8::internal::Runtime_DisassembleFunction(int, unsigned long*, v8::internal::Isolate*)",93957340449216,93957340449259],["v8::internal::Runtime_TraceEnter(int, unsigned long*, v8::internal::Isolate*)",93957340449728,93957340450015],["v8::internal::Runtime_TraceExit(int, unsigned long*, v8::internal::Isolate*)",93957340450736,93957340451029],["v8::internal::Runtime_HaveSameMap(int, unsigned long*, v8::internal::Isolate*)",93957340451792,93957340451964],["v8::internal::Runtime_InLargeObjectSpace(int, unsigned long*, v8::internal::Isolate*)",93957340452592,93957340452767],["v8::internal::Runtime_HasElementsInALargeObjectSpace(int, unsigned long*, v8::internal::Isolate*)",93957340453360,93957340453556],["v8::internal::Runtime_InYoungGeneration(int, unsigned long*, v8::internal::Isolate*)",93957340454176,93957340454258],["v8::internal::Runtime_DisallowCodegenFromStrings(int, unsigned long*, v8::internal::Isolate*)",93957340454832,93957340454974],["v8::internal::Runtime_RegexpHasBytecode(int, unsigned long*, v8::internal::Isolate*)",93957340455536,93957340455851],["v8::internal::SnapshotByteSource::GetInt()",93957340528480,93957340528561],["int v8::internal::Deserializer::ReadSingleBytecodeData<v8::internal::SlotAccessorForHandle>(unsigned char, v8::internal::SlotAccessorForHandle)",93957340528672,93957340529488],["v8::internal::Deserializer::ReadMetaMap()",93957340529616,93957340529946],["v8::internal::Deserializer::RelocInfoVisitor::VisitExternalReference(v8::internal::Code, v8::internal::RelocInfo*)",93957340530144,93957340530404],["void std::__1::vector<v8::internal::Deserializer::UnresolvedForwardRef, std::__1::allocator<v8::internal::Deserializer::UnresolvedForwardRef> >::emplace_back<v8::internal::Handle<v8::internal::HeapObject>, int, v8::internal::HeapObjectReferenceType&>(v8::internal::Handle<v8::internal::HeapObject>&&, int&&, v8::internal::HeapObjectReferenceType&)",93957340534976,93957340535022],["v8::internal::EmbeddedData::InstructionEndOfBytecodeHandlers() const",93957340539808,93957340539836],["v8::internal::ReadOnlySerializer::SerializeReadOnlyRoots()",93957340542416,93957340542542],["v8::internal::RootsSerializer::RootsSerializer(v8::internal::Isolate*, v8::base::Flags<v8::internal::Snapshot::SerializerFlag, int>, v8::internal::RootIndex)",93957340542768,93957340543066],["v8::internal::RootsSerializer::VisitRootPointers(v8::internal::Root, char const*, v8::internal::FullObjectSlot, v8::internal::FullObjectSlot)",93957340543200,93957340543386],["v8::internal::RootsSerializer::~RootsSerializer()",93957340543456,93957340543525],["v8::internal::SnapshotData::Payload() const",93957340561392,93957340561409],["v8::internal::ReplacementStringBuilder::ToString()",93957340577552,93957340578061],["v8::internal::StringStream::PrintMentionedObjectCache(v8::internal::Isolate*)",93957340585504,93957340586008],["v8::internal::Uri::Escape(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>)",93957340593968,93957340595040],["v8::internal::CancelableTaskManager::TryAbortAll()",93957340602000,93957340602237],["v8::internal::OperationsBarrier::CancelAndWait()",93957340603072,93957340603134],["non-virtual thunk to v8::internal::(anonymous namespace)::CancelableFuncTask::~CancelableFuncTask()",93957340603936,93957340604000],["v8::internal::tracing::CallStatsScopedTracer::AddEndTraceEvent()",93957340604416,93957340604784],["v8::tracing::TracedValue::SetDouble(char const*, double)",93957340605312,93957340605505],["v8::tracing::TracedValue::BeginArray(char const*)",93957340606112,93957340606227],["v8::tracing::TracedValue::EndDictionary()",93957340606576,93957340606610],["v8::tracing::TracingCategoryObserver::TearDown()",93957340606832,93957340606890],["v8::internal::trap_handler::RegisterHandlerData(unsigned long, unsigned long, unsigned long, v8::internal::trap_handler::ProtectedInstructionData const*)",93957340607648,93957340608134],["v8::internal::trap_handler::EnableTrapHandler(bool)",93957340608304,93957340608354],["v8::internal::RootIndexMap::Lookup(unsigned long, v8::internal::RootIndex*) const",93957340608864,93957340608973],["v8::internal::AllocWithRetry(unsigned long)",93957340609168,93957340609286],["void std::__1::__function::__policy_invoker<void (v8_inspector::V8InspectorSessionImpl*)>::__call_impl<std::__1::__function::__default_alloc_func<v8_inspector::V8Debugger::captureStackTrace(bool)::$_9, void (v8_inspector::V8InspectorSessionImpl*)> >(std::__1::__function::__policy_storage const*, v8_inspector::V8InspectorSessionImpl*)",93957342551296,93957342551326],["v8_inspector::V8HeapProfilerAgentImpl::stopTrackingHeapObjectsInternal()",93957342554320,93957342554500],["v8_inspector::V8HeapProfilerAgentImpl::addInspectedHeapObject(v8_inspector::String16 const&)",93957342556224,93957342556688],["v8_inspector::V8HeapProfilerAgentImpl::stopSampling(std::__1::unique_ptr<v8_inspector::protocol::HeapProfiler::SamplingHeapProfile, std::__1::default_delete<v8_inspector::protocol::HeapProfiler::SamplingHeapProfile> >*)",93957342557520,93957342557633],["void std::__1::__function::__policy_invoker<void ()>::__call_impl<std::__1::__function::__default_alloc_func<v8_crdtp::UberDispatcher::Dispatch(v8_crdtp::Dispatchable const&) const::$_1, void ()> >(std::__1::__function::__policy_storage const*)",93957342764432,93957342765135],["v8_crdtp::json::(anonymous namespace)::JSONEncoder<std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > >::HandleNull()",93957342783936,93957342784044],["v8_crdtp::DeserializerState::DeserializerState(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >)",93957342798304,93957342798476],["v8_crdtp::ProtocolTypeTraits<bool, void>::Serialize(bool, std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*)",93957342800016,93957342800270],["v8_crdtp::ObjectSerializer::~ObjectSerializer()",93957342800976,93957342801003],["v8_crdtp::DeferredMessage::FromSpan(v8_crdtp::span<unsigned char>)",93957342801248,93957342801301],["v8_crdtp::IncomingDeferredMessage::~IncomingDeferredMessage()",93957342802160,93957342802233],["v8_crdtp::Serializable::From(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >)",93957342802464,93957342802624],["v8_crdtp::(anonymous namespace)::PreSerialized::~PreSerialized()",93957342802704,93957342802755],["v8_crdtp::SpanEquals(v8_crdtp::span<char>, v8_crdtp::span<char>)",93957342802848,93957342802893],["v8_crdtp::Status::ToASCIIString() const",93957342805248,93957342805496],["v8_crdtp::json::platform::DToStr(double)",93957342805568,93957342805862],["v8::internal::compiler::VirtualRegisterData::AddDeferredSpillOutput(v8::internal::compiler::AllocatedOperand, int, v8::internal::compiler::MidTierRegisterAllocationData*)",93957343010208,93957343010746],["v8::internal::compiler::SinglePassRegisterAllocator::AllocateOutput(v8::internal::compiler::UnallocatedOperand*, v8::internal::compiler::VirtualRegisterData&, int, v8::internal::compiler::SinglePassRegisterAllocator::UsePosition)",93957343023296,93957343024963],["v8::internal::compiler::AllocateRegisters(v8::internal::compiler::MidTierRegisterAllocationData*)",93957343038208,93957343038494],["void std::__1::vector<v8::internal::compiler::BlockState, v8::internal::ZoneAllocator<v8::internal::compiler::BlockState> >::__emplace_back_slow_path<int&, v8::internal::Zone*>(int&, v8::internal::Zone*&&)",93957343043840,93957343044396],["v8::internal::compiler::MoveOptimizer::CompressGaps(v8::internal::compiler::Instruction*)",93957343047952,93957343048430],["v8::internal::compiler::(anonymous namespace)::OperandSet::ContainsOpOrAlias(v8::internal::compiler::InstructionOperand const&) const",93957343057360,93957343057659],["void std::__1::__sort<bool (*&)(v8::internal::compiler::MoveOperands const*, v8::internal::compiler::MoveOperands const*), v8::internal::compiler::MoveOperands**>(v8::internal::compiler::MoveOperands**, v8::internal::compiler::MoveOperands**, bool (*&)(v8::internal::compiler::MoveOperands const*, v8::internal::compiler::MoveOperands const*))",93957343066496,93957343068152],["v8::internal::compiler::RegisterAllocatorVerifier::RegisterAllocatorVerifier(v8::internal::Zone*, v8::internal::RegisterConfiguration const*, v8::internal::compiler::InstructionSequence const*, v8::internal::compiler::Frame const*)",93957343069632,93957343071015],["v8::internal::compiler::RegisterAllocatorVerifier::CheckConstraint(v8::internal::compiler::InstructionOperand const*, v8::internal::compiler::RegisterAllocatorVerifier::OperandConstraint const*)",93957343072608,93957343073257],["v8::internal::compiler::BlockAssessments::PerformParallelMoves(v8::internal::compiler::ParallelMove const*)",93957343073312,93957343074576],["v8::internal::compiler::RegisterAllocatorVerifier::CreateForBlock(v8::internal::compiler::InstructionBlock const*)",93957343075200,93957343076930],["v8::internal::compiler::BlockAssessments::CopyFrom(v8::internal::compiler::BlockAssessments const*)",93957343077200,93957343077661],["v8::internal::compiler::RegisterAllocatorVerifier::ValidatePendingAssessment(v8::internal::compiler::RpoNumber, v8::internal::compiler::InstructionOperand, v8::internal::compiler::BlockAssessments const*, v8::internal::compiler::PendingAssessment*, int)",93957343078000,93957343081750],["v8::internal::compiler::BlockAssessments::AddDefinition(v8::internal::compiler::InstructionOperand, int)",93957343085792,93957343086255],["std::__1::__tree_node_base<void*>*& std::__1::__tree<v8::internal::compiler::InstructionOperand, v8::internal::compiler::OperandAsKeyLess, v8::internal::ZoneAllocator<v8::internal::compiler::InstructionOperand> >::__find_equal<v8::internal::compiler::InstructionOperand>(std::__1::__tree_end_node<std::__1::__tree_node_base<void*>*>*&, v8::internal::compiler::InstructionOperand const&)",93957343086992,93957343087325],["std::__1::deque<v8::internal::compiler::GraphReducer::NodeState, v8::internal::RecyclingZoneAllocator<v8::internal::compiler::GraphReducer::NodeState> >::__add_back_capacity()",93957343087728,93957343088479],["v8::internal::compiler::BytecodeGraphBuilder::VisitMov()",93957343227568,93957343227711],["v8::internal::compiler::BytecodeGraphBuilder::VisitCallProperty2()",93957343238064,93957343238305],["v8::internal::compiler::BytecodeGraphBuilder::VisitTestUndefined()",93957343246512,93957343246677],["v8::internal::compiler::BytecodeGraphBuilder::VisitCreateBlockContext()",93957343250992,93957343251205],["v8::internal::compiler::BytecodeGraphBuilder::VisitJumpIfToBooleanFalse()",93957343253328,93957343253449],["v8::internal::compiler::BytecodeGraphBuilder::VisitThrow()",93957343255984,93957343256858],["v8::internal::compiler::BytecodeGraphBuilder::VisitSuspendGenerator()",93957343260560,93957343261447],["v8::internal::compiler::BytecodeGraphBuilder::VisitStar13()",93957343264080,93957343264148],["v8::internal::compiler::BytecodeGraphBuilder::VisitStar7()",93957343264560,93957343264628],["v8::internal::compiler::BytecodeGraphBuilder::VisitStar3()",93957343264880,93957343264948],["v8::internal::compiler::BytecodeGraphBuilder::BuildLdaLookupSlot(v8::internal::TypeofMode)",93957343265184,93957343265495],["v8::internal::compiler::BytecodeGraphBuilder::CheckContextExtensionsSlowPath(unsigned int)",93957343266592,93957343267140],["v8::internal::compiler::BytecodeGraphBuilder::BuildCreateArguments(v8::internal::CreateArgumentsType)",93957343269184,93957343269352],["v8::internal::compiler::BytecodeGraphBuilder::BuildUnaryOp(v8::internal::compiler::Operator const*)",93957343272608,93957343272993],["v8::internal::compiler::BytecodeGraphBuilder::BuildJump()",93957343274256,93957343274426],["v8::internal::compiler::BytecodeGraphBuilder::MergeIntoSuccessorEnvironment(int)",93957343276304,93957343276754],["v8::internal::compiler::BytecodeGraphBuilder::BuildLoopExitsUntilLoop(int, v8::internal::compiler::BytecodeLivenessState const*)",93957343279216,93957343279631],["v8::internal::compiler::BytecodeGraphBuilder::BuildJumpIfNot(v8::internal::compiler::Node*)",93957343280128,93957343280609],["v8::internal::compiler::BuildGraphFromBytecode(v8::internal::compiler::JSHeapBroker*, v8::internal::Zone*, v8::internal::compiler::SharedFunctionInfoRef const&, v8::internal::compiler::FeedbackCellRef const&, v8::internal::BytecodeOffset, v8::internal::compiler::JSGraph*, v8::internal::compiler::CallFrequency const&, v8::internal::compiler::SourcePositionTable*, int, v8::internal::CodeKind, v8::base::Flags<v8::internal::compiler::BytecodeGraphBuilderFlag, int>, v8::internal::TickCounter*, v8::internal::compiler::ObserveNodeInfo const&)",93957343281344,93957343281517],["std::__1::deque<v8::internal::compiler::BytecodeGraphBuilder::OsrIteratorState::IteratorsStates, v8::internal::RecyclingZoneAllocator<v8::internal::compiler::BytecodeGraphBuilder::OsrIteratorState::IteratorsStates> >::__add_back_capacity()",93957343281760,93957343282495],["v8::internal::compiler::IrOpcode::IsFeedbackCollectingOpcode(v8::internal::compiler::IrOpcode::Value)",93957343282736,93957343282774],["std::__1::__tree<std::__1::__value_type<int, v8::internal::compiler::LoopInfo>, std::__1::__map_value_compare<int, std::__1::__value_type<int, v8::internal::compiler::LoopInfo>, std::__1::less<int>, true>, v8::internal::ZoneAllocator<std::__1::__value_type<int, v8::internal::compiler::LoopInfo> > >::destroy(std::__1::__tree_node<std::__1::__value_type<int, v8::internal::compiler::LoopInfo>, void*>*)",93957343283120,93957343283176],["v8::internal::compiler::BytecodeLivenessMap::BytecodeLivenessMap(int, v8::internal::Zone*)",93957343283712,93957343283911],["v8::internal::compiler::BytecodeLivenessMap::GetLiveness(int)",93957343284176,93957343284268],["v8::internal::compiler::Linkage::GetSimplifiedCDescriptor(v8::internal::Zone*, v8::internal::Signature<v8::internal::MachineType> const*, v8::base::Flags<v8::internal::compiler::CallDescriptor::Flag, int>)",93957343284656,93957343285272],["v8::internal::compiler::CheckpointElimination::ReduceCheckpoint(v8::internal::compiler::Node*)",93957343285312,93957343285858],["v8::internal::compiler::CheckpointElimination::reducer_name() const",93957343285904,93957343285917],["std::__1::__hash_table<std::__1::__hash_value_type<long, v8::internal::compiler::Node*>, std::__1::__unordered_map_hasher<long, std::__1::__hash_value_type<long, v8::internal::compiler::Node*>, v8::base::hash<long>, std::__1::equal_to<long>, true>, std::__1::__unordered_map_equal<long, std::__1::__hash_value_type<long, v8::internal::compiler::Node*>, std::__1::equal_to<long>, v8::base::hash<long>, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<long, v8::internal::compiler::Node*> > >::rehash(unsigned long)",93957343286688,93957343287059],["std::__1::__hash_table<std::__1::__hash_value_type<std::__1::pair<int, char>, v8::internal::compiler::Node*>, std::__1::__unordered_map_hasher<std::__1::pair<int, char>, std::__1::__hash_value_type<std::__1::pair<int, char>, v8::internal::compiler::Node*>, v8::base::hash<std::__1::pair<int, char> >, std::__1::equal_to<std::__1::pair<int, char> >, true>, std::__1::__unordered_map_equal<std::__1::pair<int, char>, std::__1::__hash_value_type<std::__1::pair<int, char>, v8::internal::compiler::Node*>, std::__1::equal_to<std::__1::pair<int, char> >, v8::base::hash<std::__1::pair<int, char> >, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<std::__1::pair<int, char>, v8::internal::compiler::Node*> > >::rehash(unsigned long)",93957343287792,93957343288163],["std::__1::__hash_table<std::__1::__hash_value_type<std::__1::pair<long, char>, v8::internal::compiler::Node*>, std::__1::__unordered_map_hasher<std::__1::pair<long, char>, std::__1::__hash_value_type<std::__1::pair<long, char>, v8::internal::compiler::Node*>, v8::base::hash<std::__1::pair<long, char> >, std::__1::equal_to<std::__1::pair<long, char> >, true>, std::__1::__unordered_map_equal<std::__1::pair<long, char>, std::__1::__hash_value_type<std::__1::pair<long, char>, v8::internal::compiler::Node*>, std::__1::equal_to<std::__1::pair<long, char> >, v8::base::hash<std::__1::pair<long, char> >, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<std::__1::pair<long, char>, v8::internal::compiler::Node*> > >::rehash(unsigned long)",93957343288928,93957343289299],["v8::internal::compiler::CommonNodeCache::FindExternalConstant(v8::internal::ExternalReference)",93957343290064,93957343290121],["v8::internal::compiler::CommonNodeCache::GetCachedNodes(v8::internal::ZoneVector<v8::internal::compiler::Node*>*)",93957343290192,93957343291783],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::EarlyGraphTrimmingPhase>()",93957344643936,93957344644321],["v8::internal::compiler::(anonymous namespace)::TraceSequence(v8::internal::OptimizedCompilationInfo*, v8::internal::compiler::PipelineData*, char const*)",93957344674816,93957344675719],["v8::internal::compiler::GraphBuilderPhase::Run(v8::internal::compiler::PipelineData*, v8::internal::Zone*)",93957344686656,93957344686933],["v8::internal::compiler::EarlyOptimizationPhase::Run(v8::internal::compiler::PipelineData*, v8::internal::Zone*)",93957344701376,93957344703082],["v8::internal::compiler::HasOnlyStringMaps(v8::internal::compiler::JSHeapBroker*, v8::internal::ZoneVector<v8::internal::Handle<v8::internal::Map> > const&)",93957344711376,93957344711517],["v8::internal::compiler::PropertyAccessBuilder::BuildLoadDataField(v8::internal::compiler::NameRef const&, v8::internal::compiler::Node*, v8::internal::compiler::FieldAccess&, bool, v8::internal::compiler::Node**, v8::internal::compiler::Node**)",93957344714400,93957344715487],["v8::internal::compiler::RedundancyElimination::ReduceSpeculativeNumberOperation(v8::internal::compiler::Node*)",93957344718064,93957344718660],["v8::internal::compiler::RefsMap::LookupOrInsert(unsigned long const&)",93957344721312,93957344721518],["v8::internal::compiler::RepresentationChanger::RepresentationChanger(v8::internal::compiler::JSGraph*, v8::internal::compiler::JSHeapBroker*)",93957344722432,93957344722484],["v8::internal::compiler::RepresentationChanger::GetTaggedSignedRepresentationFor(v8::internal::compiler::Node*, v8::internal::MachineRepresentation, v8::internal::compiler::Type, v8::internal::compiler::Node*, v8::internal::compiler::UseInfo)",93957344723792,93957344725046],["v8::internal::compiler::RepresentationChanger::GetFloat64RepresentationFor(v8::internal::compiler::Node*, v8::internal::MachineRepresentation, v8::internal::compiler::Type, v8::internal::compiler::Node*, v8::internal::compiler::UseInfo)",93957344728080,93957344729365],["v8::internal::compiler::RepresentationChanger::InsertTruncateInt64ToInt32(v8::internal::compiler::Node*)",93957344734464,93957344734530],["v8::internal::compiler::RepresentationChanger::InsertChangeFloat32ToFloat64(v8::internal::compiler::Node*)",93957344734784,93957344734850],["v8::internal::compiler::Truncation::IsUsedAsWord32() const",93957344735488,93957344735521],["v8::internal::compiler::RepresentationChanger::Int64OperatorFor(v8::internal::compiler::IrOpcode::Value)",93957344735952,93957344736026],["v8::internal::compiler::RepresentationChanger::Float64OperatorFor(v8::internal::compiler::IrOpcode::Value)",93957344736368,93957344736958],["v8::internal::compiler::BasicBlock::set_control(v8::internal::compiler::BasicBlock::Control)",93957344737744,93957344737753],["v8::internal::compiler::BasicBlock::set_loop_depth(int)",93957344737808,93957344737817],["v8::internal::compiler::BasicBlock::set_loop_header(v8::internal::compiler::BasicBlock*)",93957344737840,93957344737850],["v8::internal::compiler::BasicBlock::ResetRPOInfo()",93957344737872,93957344737910],["v8::internal::compiler::Schedule::Schedule(v8::internal::Zone*, unsigned long)",93957344737968,93957344738604],["v8::internal::compiler::Schedule::block(v8::internal::compiler::Node*) const",93957344739456,93957344739497],["v8::internal::compiler::Schedule::GetBlockById(v8::internal::compiler::BasicBlock::Id)",93957344739552,93957344739566],["v8::internal::compiler::Schedule::SetBlockForNode(v8::internal::compiler::BasicBlock*, v8::internal::compiler::Node*)",93957344740064,93957344740175],["v8::internal::compiler::Schedule::AddGoto(v8::internal::compiler::BasicBlock*, v8::internal::compiler::BasicBlock*)",93957344741312,93957344741356],["v8::internal::compiler::Schedule::AddCall(v8::internal::compiler::BasicBlock*, v8::internal::compiler::Node*, v8::internal::compiler::BasicBlock*, v8::internal::compiler::BasicBlock*)",93957344742688,93957344742887],["v8::internal::compiler::Schedule::AddSwitch(v8::internal::compiler::BasicBlock*, v8::internal::compiler::Node*, v8::internal::compiler::BasicBlock**, unsigned long)",93957344743104,93957344743342],["v8::internal::compiler::Schedule::AddReturn(v8::internal::compiler::BasicBlock*, v8::internal::compiler::Node*)",93957344743552,93957344743755],["v8::internal::compiler::Schedule::AddThrow(v8::internal::compiler::BasicBlock*, v8::internal::compiler::Node*)",93957344743968,93957344744171],["v8::internal::compiler::Schedule::MoveSuccessors(v8::internal::compiler::BasicBlock*, v8::internal::compiler::BasicBlock*)",93957344744576,93957344745438],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Schedule const&)",93957344745872,93957344751502],["v8::internal::compiler::ScheduledMachineLowering::Run()",93957344751936,93957344752239],["v8::internal::compiler::TypedOptimization::ReduceSpeculativeNumberAdd(v8::internal::compiler::Node*)",93957345114432,93957345114998],["v8::internal::compiler::Typer::Visitor::TypeJSForInPrepare(v8::internal::compiler::Node*)",93957345144736,93957345144818],["v8::internal::compiler::ZoneStats::StatsScope::StatsScope(v8::internal::compiler::ZoneStats*)",93957345175856,93957345176536],["v8::internal::compiler::SimdScalarLowering::GetIndexNodes(v8::internal::compiler::Node*, v8::internal::compiler::Node**, v8::internal::compiler::SimdScalarLowering::SimdType)",93957345218608,93957345218951],["v8::internal::compiler::SimdScalarLowering::LowerExtMul(v8::internal::compiler::Node*, v8::internal::compiler::Operator const*, v8::internal::compiler::SimdScalarLowering::SimdType, v8::internal::compiler::SimdScalarLowering::SimdType, bool, bool)",93957345242400,93957345243050],["v8::internal::compiler::WasmGraphBuilder::TerminateLoop(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957345249136,93957345249295],["v8::internal::compiler::WasmGraphBuilder::TrapIfTrue(v8::internal::wasm::TrapReason, v8::internal::compiler::Node*, int)",93957345250848,93957345251040],["v8::internal::compiler::WasmGraphBuilder::BuildI64DivU(v8::internal::compiler::Node*, v8::internal::compiler::Node*, int)",93957345256592,93957345256809],["v8::internal::compiler::WasmGraphBuilder::Unop(v8::internal::wasm::WasmOpcode, v8::internal::compiler::Node*, int)",93957345263040,93957345265067],["v8::internal::compiler::WasmGraphBuilder::BuildF32NearestInt(v8::internal::compiler::Node*)",93957345267488,93957345267532],["v8::internal::compiler::WasmGraphBuilder::BuildI64Popcnt(v8::internal::compiler::Node*)",93957345268048,93957345268258],["v8::internal::compiler::WasmGraphBuilder::Float64Constant(double)",93957345270832,93957345270846],["v8::internal::compiler::WasmGraphBuilder::IfDefault(v8::internal::compiler::Node*)",93957345271840,93957345271908],["v8::internal::compiler::WasmGraphBuilder::MemoryGrow(v8::internal::compiler::Node*)",93957345274160,93957345274920],["v8::internal::compiler::WasmGraphBuilder::GetExceptionTag(v8::internal::compiler::Node*)",93957345278144,93957345278637],["v8::internal::compiler::WasmGraphBuilder::Uint32ToUintptr(v8::internal::compiler::Node*)",93957345282880,93957345283077],["v8::internal::compiler::WasmGraphBuilder::BuildCallRef(unsigned int, v8::internal::Vector<v8::internal::compiler::Node*>, v8::internal::Vector<v8::internal::compiler::Node*>, v8::internal::compiler::WasmGraphBuilder::CheckForNull, v8::internal::compiler::WasmGraphBuilder::IsReturnCall, int)",93957345285728,93957345288257],["v8::internal::compiler::WasmGraphBuilder::ReturnCall(unsigned int, v8::internal::Vector<v8::internal::compiler::Node*>, int)",93957345288640,93957345288817],["v8::internal::compiler::WasmGraphBuilder::PrepareInstanceCacheForLoop(v8::internal::compiler::WasmInstanceCacheNodes*, v8::internal::compiler::Node*)",93957345289520,93957345289757],["v8::internal::compiler::WasmGraphBuilder::CreateOrMergeIntoEffectPhi(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957345290976,93957345291758],["v8::internal::compiler::WasmGraphBuilder::BuildCallToRuntimeWithContext(v8::internal::Runtime::FunctionId, v8::internal::compiler::Node*, v8::internal::compiler::Node**, int)",93957345292992,93957345293392],["v8::internal::compiler::WasmGraphBuilder::TableSet(unsigned int, v8::internal::compiler::Node*, v8::internal::compiler::Node*, int)",93957345294656,93957345294865],["v8::internal::compiler::WasmGraphBuilder::TraceFunctionEntry(int)",93957345295840,93957345295934],["v8::internal::compiler::WasmGraphBuilder::LoadTransform(v8::internal::wasm::ValueType, v8::internal::MachineType, v8::internal::wasm::LoadTransformationKind, v8::internal::compiler::Node*, unsigned long, unsigned int, int)",93957345297024,93957345297776],["v8::internal::compiler::WasmGraphBuilder::BuildF64x2Ceil(v8::internal::compiler::Node*)",93957345299456,93957345299500],["v8::internal::compiler::WasmGraphBuilder::BuildF32x4Ceil(v8::internal::compiler::Node*)",93957345299648,93957345299692],["v8::internal::compiler::WasmGraphBuilder::GetI32AtomicWaitCallDescriptor()",93957345299840,93957345300073],["v8::internal::compiler::WasmGraphBuilder::S128Zero()",93957345301424,93957345301474],["v8::internal::compiler::WasmGraphBuilder::AtomicOp(v8::internal::wasm::WasmOpcode, v8::internal::compiler::Node* const*, unsigned int, unsigned long, int)",93957345306960,93957345308703],["v8::internal::compiler::WasmGraphBuilder::MemoryCopy(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, int)",93957345309376,93957345309617],["v8::internal::compiler::WasmGraphBuilder::TableCopy(unsigned int, unsigned int, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, int)",93957345310416,93957345310754],["v8::internal::compiler::WasmGraphBuilder::StructNewWithRtt(unsigned int, v8::internal::wasm::StructType const*, v8::internal::compiler::Node*, v8::internal::Vector<v8::internal::compiler::Node*>)",93957345311728,93957345312019],["v8::internal::compiler::WasmGraphBuilder::RttCanon(unsigned int)",93957345313824,93957345314067],["v8::internal::compiler::WasmGraphBuilder::TypeCheck(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::WasmGraphBuilder::ObjectReferenceKnowledge, bool, v8::internal::compiler::WasmGraphBuilder::Callbacks)",93957345314320,93957345315616],["v8::internal::compiler::WasmGraphBuilder::FuncCheck(v8::internal::compiler::Node*, bool, v8::internal::compiler::WasmGraphBuilder::Callbacks)",93957345316080,93957345316272],["v8::internal::compiler::WasmGraphBuilder::RefTest(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::WasmGraphBuilder::ObjectReferenceKnowledge)",93957345317344,93957345317767],["v8::internal::compiler::WasmGraphBuilder::BrOnCast(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::WasmGraphBuilder::ObjectReferenceKnowledge, v8::internal::compiler::Node**, v8::internal::compiler::Node**, v8::internal::compiler::Node**, v8::internal::compiler::Node**)",93957345318208,93957345318396],["v8::internal::compiler::WasmGraphBuilder::RefAsData(v8::internal::compiler::Node*, bool, int)",93957345318816,93957345319215],["v8::internal::compiler::WasmGraphBuilder::RefIsFunc(v8::internal::compiler::Node*, bool)",93957345319408,93957345319816],["v8::internal::compiler::WasmGraphBuilder::BrOnFunc(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::WasmGraphBuilder::ObjectReferenceKnowledge, v8::internal::compiler::Node**, v8::internal::compiler::Node**, v8::internal::compiler::Node**, v8::internal::compiler::Node**)",93957345320224,93957345320403],["v8::internal::compiler::WasmGraphBuilder::RefAsI31(v8::internal::compiler::Node*, int)",93957345320496,93957345320613],["v8::internal::compiler::WasmGraphBuilder::StructGet(v8::internal::compiler::Node*, v8::internal::wasm::StructType const*, unsigned int, v8::internal::compiler::WasmGraphBuilder::CheckForNull, bool, int)",93957345320944,93957345321519],["v8::internal::compiler::WasmGraphBuilder::ArrayGet(v8::internal::compiler::Node*, v8::internal::wasm::ArrayType const*, v8::internal::compiler::Node*, v8::internal::compiler::WasmGraphBuilder::CheckForNull, bool, int)",93957345321648,93957345322273],["v8::internal::compiler::WasmGraphBuilder::ArrayLen(v8::internal::compiler::Node*, v8::internal::compiler::WasmGraphBuilder::CheckForNull, int)",93957345322944,93957345323131],["v8::internal::compiler::WasmGraphBuilder::I31GetS(v8::internal::compiler::Node*)",93957345323184,93957345323260],["v8::internal::compiler::WasmGraphBuilder::AddBytecodePositionDecorator(v8::internal::compiler::NodeOriginTable*, v8::internal::wasm::Decoder*)",93957345323344,93957345323457],["v8::internal::compiler::BuildInlinedJSToWasmWrapper(v8::internal::Zone*, v8::internal::compiler::MachineGraph*, v8::internal::Signature<v8::internal::wasm::ValueType> const*, v8::internal::wasm::WasmModule const*, v8::internal::Isolate*, v8::internal::compiler::SourcePositionTable*, v8::internal::StubCallMode, v8::internal::wasm::WasmFeatures, v8::internal::compiler::JSWasmCallData const*, v8::internal::compiler::Node*)",93957345323520,93957345324111],["v8::internal::compiler::NewJSToWasmCompilationJob(v8::internal::Isolate*, v8::internal::wasm::WasmEngine*, v8::internal::Signature<v8::internal::wasm::ValueType> const*, v8::internal::wasm::WasmModule const*, bool, v8::internal::wasm::WasmFeatures const&)",93957345328640,93957345329766],["v8::internal::compiler::ResolveWasmImportCall(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Signature<v8::internal::wasm::ValueType> const*, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmFeatures const&)",93957345329840,93957345331492],["v8::internal::compiler::(anonymous namespace)::WasmWrapperGraphBuilder::BuildWasmToJSWrapper(v8::internal::compiler::WasmImportCallKind, int)",93957345335616,93957345340487],["v8::internal::compiler::CompileWasmCapiCallWrapper(v8::internal::wasm::WasmEngine*, v8::internal::wasm::NativeModule*, v8::internal::Signature<v8::internal::wasm::ValueType> const*, unsigned long)",93957345340528,93957345345364],["v8::internal::compiler::CompileJSToJSWrapper(v8::internal::Isolate*, v8::internal::Signature<v8::internal::wasm::ValueType> const*, v8::internal::wasm::WasmModule const*)",93957345346608,93957345351133],["v8::internal::compiler::GetI32WasmCallDescriptorForSimd(v8::internal::Zone*, v8::internal::compiler::CallDescriptor*)",93957345356192,93957345356212],["v8::internal::compiler::(anonymous namespace)::ReplaceTypeInCallDescriptorWith(v8::internal::Zone*, v8::internal::compiler::CallDescriptor const*, unsigned long, v8::internal::MachineType, v8::internal::MachineRepresentation)",93957345356512,93957345358985],["v8::internal::compiler::(anonymous namespace)::WasmWrapperGraphBuilder::FromJS(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::wasm::ValueType, v8::internal::compiler::Node*)",93957345360800,93957345362777],["v8::internal::compiler::(anonymous namespace)::WasmWrapperGraphBuilder::BuildModifyThreadInWasmFlagHelper(v8::internal::compiler::Node*, bool)",93957345365664,93957345366479],["v8::internal::compiler::(anonymous namespace)::WasmWrapperGraphBuilder::BuildCheckValidRefValue(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::wasm::ValueType)",93957345367424,93957345367853],["v8::internal::compiler::(anonymous namespace)::WasmWrapperGraphBuilder::BuildReceiverNode(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957345368272,93957345368901],["void std::__1::__function::__policy_invoker<void (v8::internal::compiler::Node*, v8::internal::compiler::BranchHint)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::WasmGraphBuilder::TestCallbacks(v8::internal::compiler::GraphAssemblerLabel<1ul>*)::$_2, void (v8::internal::compiler::Node*, v8::internal::compiler::BranchHint)> >(std::__1::__function::__policy_storage const*, v8::internal::compiler::Node*, v8::internal::compiler::BranchHint)",93957345368992,93957345369058],["void std::__1::__function::__policy_invoker<void (v8::internal::compiler::Node*, v8::internal::compiler::BranchHint)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::WasmGraphBuilder::CastCallbacks(v8::internal::compiler::GraphAssemblerLabel<0ul>*, int)::$_4, void (v8::internal::compiler::Node*, v8::internal::compiler::BranchHint)> >(std::__1::__function::__policy_storage const*, v8::internal::compiler::Node*, v8::internal::compiler::BranchHint)",93957345369152,93957345369174],["void std::__1::__function::__policy_invoker<void (v8::internal::compiler::Node*, v8::internal::compiler::BranchHint)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::WasmGraphBuilder::CastCallbacks(v8::internal::compiler::GraphAssemblerLabel<0ul>*, int)::$_6, void (v8::internal::compiler::Node*, v8::internal::compiler::BranchHint)> >(std::__1::__function::__policy_storage const*, v8::internal::compiler::Node*, v8::internal::compiler::BranchHint)",93957345369216,93957345369243],["void std::__1::__function::__policy_invoker<void (v8::internal::compiler::Node*, v8::internal::compiler::BranchHint)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::WasmGraphBuilder::BranchCallbacks(v8::base::SmallVector<v8::internal::compiler::Node*, 6ul>&, v8::base::SmallVector<v8::internal::compiler::Node*, 6ul>&, v8::base::SmallVector<v8::internal::compiler::Node*, 6ul>&, v8::base::SmallVector<v8::internal::compiler::Node*, 6ul>&)::$_9, void (v8::internal::compiler::Node*, v8::internal::compiler::BranchHint)> >(std::__1::__function::__policy_storage const*, v8::internal::compiler::Node*, v8::internal::compiler::BranchHint)",93957345369552,93957345369848],["void std::__1::__function::__policy_invoker<void (v8::internal::compiler::WasmGraphBuilder::Callbacks)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::WasmGraphBuilder::BrOnData(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::WasmGraphBuilder::ObjectReferenceKnowledge, v8::internal::compiler::Node**, v8::internal::compiler::Node**, v8::internal::compiler::Node**, v8::internal::compiler::Node**)::$_11, void (v8::internal::compiler::WasmGraphBuilder::Callbacks)> >(std::__1::__function::__policy_storage const*, v8::internal::compiler::WasmGraphBuilder::Callbacks&&)",93957345370432,93957345370950],["v8::internal::compiler::WasmDecorator::Decorate(v8::internal::compiler::Node*)",93957345371488,93957345371561],["void std::__1::__sort<std::__1::__less<signed char, signed char>&, signed char*>(signed char*, signed char*, std::__1::__less<signed char, signed char>&)",93957346612496,93957346613880],["void std::__1::__sort<std::__1::__less<unsigned char, unsigned char>&, unsigned char*>(unsigned char*, unsigned char*, std::__1::__less<unsigned char, unsigned char>&)",93957346614672,93957346616056],["unsigned int std::__1::__sort5<std::__1::__less<short, short>&, short*>(short*, short*, short*, short*, short*, std::__1::__less<short, short>&)",93957346618400,93957346618717],["unsigned int std::__1::__sort5<std::__1::__less<int, int>&, int*>(int*, int*, int*, int*, int*, std::__1::__less<int, int>&)",93957346623216,93957346623477],["std::__1::__itoa::__u32toa(unsigned int, char*)",93957346628512,93957346629116],["std::__1::__throw_overflow_error(char const*)",93957346634304,93957346634379],["std::__1::ios_base::~ios_base()",93957346634720,93957346634836],["std::__1::ios_base::__set_badbit_and_consider_rethrow()",93957346635904,93957346635925],["std::__1::basic_streambuf<char, std::__1::char_traits<char> >::~basic_streambuf()",93957346636096,93957346636138],["std::__1::basic_streambuf<char, std::__1::char_traits<char> >::uflow()",93957346636432,93957346636481],["std::__1::basic_streambuf<wchar_t, std::__1::char_traits<wchar_t> >::basic_streambuf()",93957346636768,93957346636818],["std::__1::basic_istream<char, std::__1::char_traits<char> >::~basic_istream()",93957346637280,93957346637294],["std::__1::basic_istream<char, std::__1::char_traits<char> >::sentry::sentry(std::__1::basic_istream<char, std::__1::char_traits<char> >&, bool)",93957346637408,93957346637801],["virtual thunk to std::__1::basic_ostream<char, std::__1::char_traits<char> >::~basic_ostream()",93957346638272,93957346638296],["std::__1::basic_ostream<char, std::__1::char_traits<char> >::sentry::~sentry()",93957346638448,93957346638583],["std::__1::DoIOSInit::DoIOSInit()",93957346650640,93957346651952],["__cxxabiv1::__enum_type_info::~__enum_type_info()",93957346655104,93957346655114],["std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > std::__1::num_get<char, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > >::__do_get_signed<long long>(std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, unsigned int&, long long&) const",93957346658960,93957346660092],["std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > std::__1::num_get<char, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > >::__do_get_unsigned<unsigned long long>(std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, unsigned int&, unsigned long long&) const",93957346663568,93957346664700],["std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > std::__1::num_get<char, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > >::__do_get_floating_point<long double>(std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, unsigned int&, long double&) const",93957346667280,93957346668549],["std::__1::num_get<wchar_t, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::do_get(std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, unsigned int&, bool&) const",93957346670608,93957346671335],["std::__1::num_get<wchar_t, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::do_get(std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, unsigned int&, long long&) const",93957346673952,93957346673962],["std::__1::num_get<wchar_t, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::do_get(std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, unsigned int&, unsigned int&) const",93957346676608,93957346676618],["std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > std::__1::num_get<wchar_t, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::__do_get_unsigned<unsigned long>(std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, unsigned int&, unsigned long&) const",93957346677952,93957346679256],["std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > std::__1::num_get<wchar_t, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::__do_get_unsigned<unsigned long long>(std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, unsigned int&, unsigned long long&) const",93957346679280,93957346680584],["std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > std::__1::num_get<wchar_t, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::__do_get_floating_point<float>(std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, unsigned int&, float&) const",93957346680608,93957346681881],["std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > std::__1::num_get<wchar_t, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::__do_get_floating_point<double>(std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, unsigned int&, double&) const",93957346681904,93957346683177],["std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > std::__1::num_get<wchar_t, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::__do_get_floating_point<long double>(std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, unsigned int&, long double&) const",93957346683200,93957346684483],["std::__1::__num_get<wchar_t>::__stage2_int_loop(wchar_t, int, char*, char*&, unsigned int&, wchar_t, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned int*, unsigned int*&, wchar_t const*)",93957346685760,93957346686384],["std::__1::__num_get<char>::__stage2_float_loop(char, bool&, char&, char*, char*&, char, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned int*, unsigned int*&, unsigned int&, char*)",93957346686864,93957346687728],["std::__1::__num_get<wchar_t>::__stage2_float_prep(std::__1::ios_base&, wchar_t*, wchar_t&, wchar_t&)",93957346688016,93957346688483],["__strtol_internal",139871563523200,139871563523216],["strtof32_l",139871563536176,139871563536186],["__libc_system",139871563558480,139871563558525],["l64a",139871563560016,139871563560086],["__strfmon_l",139871563565712,139871563565882],["__xpg_basename",139871563566192,139871563566357],["addseverity",139871563568464,139871563568650],["strtoumax",139871563568672,139871563568679],["_IO_printf",139871563615472,139871563615672],["flockfile",139871563620256,139871563620356],["fdopen",139871563736224,139871563736817],["fputs",139871563738912,139871563739292],["ftello",139871563775808,139871563776174],["fread_unlocked",139871563781376,139871563781467],["_IO_file_write",139871563785792,139871563785932],["_IO_file_close_it",139871563787888,139871563788298],["_IO_switch_to_get_mode",139871563793808,139871563793959],["_IO_seekmark",139871563799984,139871563800110],["__libc_alloca_cutoff",139871563802880,139871563802948],["pthread_cond_signal",139871563803392,139871563803427],["pthread_getschedparam",139871563803584,139871563803619],["pthread_mutex_lock",139871563803776,139871563803811],["__libc_pthread_init",139871563804256,139871563804346],["thrd_current",139871563805504,139871563805514],["thrd_sleep",139871563805536,139871563805576],["pthread_equal",139871563805600,139871563805609],["pthread_attr_init",139871563805648,139871563805690],["__libc_realloc",139871563827584,139871563828550],["argz_create",139871563851520,139871563851695],["wmemmove",139871563950032,139871563950041],["wcwidth",139871563986896,139871563986997],["ctime",139871564021600,139871564021621],["getdate_r",139871564035280,139871564037127],["opendir",139871564072912,139871564072961],["getgrouplist",139871564077264,139871564077468],["_nss_files_parse_grent",139871564082800,139871564083606],["getpwnam",139871564086640,139871564087078],["fgetpwent_r",139871564090960,139871564091620],["alarm",139871564092176,139871564092209],["fexecve",139871564093168,139871564093467],["getppid",139871564095712,139871564095720],["group_member",139871564096128,139871564096284],["getresuid",139871564096528,139871564096561],["fpathconf",139871564100496,139871564101100],["fnmatch",139871564125520,139871564126460],["regcomp",139871564187760,139871564188042],["regexec",139871564188560,139871564188927],["re_search_2",139871564189264,139871564189531],["getopt",139871564197408,139871564197432],["sched_setparam",139871564197600,139871564197633],["__sched_yield",139871564197792,139871564197825],["sched_getaffinity",139871564197984,139871564198086],["gai_strerror",139871564213696,139871564213784],["__libc_pwrite",139871564231168,139871564231333],["posix_spawn_file_actions_addopen",139871564231664,139871564231830],["posix_spawnattr_init",139871564232224,139871564232271],["posix_spawnattr_getflags",139871564232448,139871564232457],["posix_spawn",139871564232528,139871564232544],["posix_spawnattr_getschedparam",139871564234656,139871564234667],["posix_spawnattr_setschedparam",139871564234816,139871564234827],["__sched_cpualloc",139871564235120,139871564235137],["sched_getcpu",139871564235168,139871564235325],["utime",139871564235456,139871564235489],["mkfifoat",139871564235584,139871564235658],["__fxstat",139871564235744,139871564235820],["statx",139871564236608,139871564236692],["__xmknodat",139871564236800,139871564236892],["__statfs",139871564236992,139871564237025],["statvfs",139871564237088,139871564237196],["umask",139871564237312,139871564237320],["fchmod",139871564237376,139871564237409],["fchmodat",139871564237456,139871564237556],["mkdirat",139871564237616,139871564237649],["__open",139871564237712,139871564238008],["__openat_2",139871564238064,139871564238103],["regexec",139871564539696,139871564539705],["fattach",139871564546624,139871564546644],["getpmsg",139871564546720,139871564546740],["putmsg",139871564546784,139871564546804],["__pthread_attr_getschedpolicy",139871566592336,139871566592344],["__GI___pthread_mutex_destroy",139871566594032,139871566594061],["__pthread_mutex_timedlock",139871566600928,139871566600938],["pthread_rwlock_timedrdlock",139871566605600,139871566606247],["pthread_rwlockattr_getkind_np",139871566610928,139871566610935],["__libc_send",139871566627888,139871566628069],["pthread_getattr_default_np",139871566636592,139871566636735],["__errno_location",139871566639248,139871566639265],["malloc",139871567004224,139871567004505],["v8::DelayedTasksPlatform::MonotonicallyIncreasingTime()",93957335212416,93957335212431],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::TaskRunner*, std::__1::weak_ptr<v8::DelayedTasksPlatform::DelayedTaskRunner> >, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8::TaskRunner*, std::__1::weak_ptr<v8::DelayedTasksPlatform::DelayedTaskRunner> >, std::__1::__unordered_map_hasher<v8::TaskRunner*, std::__1::__hash_value_type<v8::TaskRunner*, std::__1::weak_ptr<v8::DelayedTasksPlatform::DelayedTaskRunner> >, std::__1::hash<v8::TaskRunner*>, std::__1::equal_to<v8::TaskRunner*>, true>, std::__1::__unordered_map_equal<v8::TaskRunner*, std::__1::__hash_value_type<v8::TaskRunner*, std::__1::weak_ptr<v8::DelayedTasksPlatform::DelayedTaskRunner> >, std::__1::equal_to<v8::TaskRunner*>, std::__1::hash<v8::TaskRunner*>, true>, std::__1::allocator<std::__1::__hash_value_type<v8::TaskRunner*, std::__1::weak_ptr<v8::DelayedTasksPlatform::DelayedTaskRunner> > > >::__emplace_unique_key_args<v8::TaskRunner*, std::__1::piecewise_construct_t const&, std::__1::tuple<v8::TaskRunner*&&>, std::__1::tuple<> >(v8::TaskRunner* const&, std::__1::piecewise_construct_t const&, std::__1::tuple<v8::TaskRunner*&&>&&, std::__1::tuple<>&&)",93957335212480,93957335213367],["v8::(anonymous namespace)::ShellArrayBufferAllocator::Free(void*, unsigned long)",93957335311792,93957335311924],["v8::(anonymous namespace)::MockArrayBufferAllocatiorWithLimit::AllocateUninitialized(unsigned long)",93957335312208,93957335312276],["v8::(anonymous namespace)::MultiMappedAllocator::Allocate(unsigned long)",93957335312496,93957335312533],["v8::(anonymous namespace)::MultiMappedAllocator::Free(void*, unsigned long)",93957335313024,93957335313273],["v8::internal::FactoryBase<v8::internal::LocalFactory>::NewScriptWithId(v8::internal::Handle<v8::internal::PrimitiveHeapObject>, int)",93957336840880,93957336841201],["v8::internal::FactoryBase<v8::internal::LocalFactory>::NewRawOneByteString(int, v8::internal::AllocationType)",93957336843776,93957336843935],["v8::internal::FactoryBase<v8::internal::LocalFactory>::NewScopeInfo(int, v8::internal::AllocationType)",93957336846560,93957336846700],["v8::internal::Handle<v8::internal::String> v8::internal::Factory::InternalizeString<v8::internal::SeqOneByteString>(v8::internal::Handle<v8::internal::SeqOneByteString>, int, int, bool)",93957336846992,93957336847087],["v8::internal::Factory::New(v8::internal::Handle<v8::internal::Map>, v8::internal::AllocationType)",93957336847552,93957336847807],["v8::internal::Factory::CodeBuilder::BuildInternal(bool)",93957336847920,93957336849486],["v8::internal::Factory::CodeBuilder::Build()",93957336849504,93957336849546],["v8::internal::Factory::AllocateRawWithAllocationSite(v8::internal::Handle<v8::internal::Map>, v8::internal::AllocationType, v8::internal::Handle<v8::internal::AllocationSite>)",93957336849760,93957336850126],["v8::internal::WriteBarrier::SetForThread(v8::internal::MarkingBarrier*)",93957336943200,93957336943235],["v8::internal::Heap::CommittedMemory()",93957336947904,93957336948140],["v8::internal::Heap::SizeOfObjects()",93957336952000,93957336952151],["v8::internal::Heap::IsRetainingPathTarget(v8::internal::HeapObject, v8::internal::RetainingPathOption*)",93957336962608,93957336962963],["v8::internal::Heap::GarbageCollectionPrologueInSafepoint()",93957336965792,93957336966427],["v8::internal::Heap::AddAllocationObserversToAllSpaces(v8::internal::AllocationObserver*, v8::internal::AllocationObserver*)",93957336966720,93957336966969],["v8::internal::Heap::ProcessPretenuringFeedback()",93957336967808,93957336969267],["v8::internal::Heap::ReduceNewSpaceSize()",93957336973216,93957336973409],["v8::internal::Heap::HandleGCRequest()",93957336975744,93957336976067],["v8::internal::Heap::CheckMemoryPressure()",93957336976128,93957336976842],["v8::internal::Heap::FinalizeIncrementalMarkingIncrementally(v8::internal::GarbageCollectionReason)",93957336976912,93957336977888],["v8::internal::Heap::CollectAllAvailableGarbage(v8::internal::GarbageCollectionReason)",93957336982768,93957336985907],["v8::internal::Heap::PreciseCollectAllGarbage(int, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags)",93957336986160,93957336986264],["v8::internal::Heap::ReportExternalMemoryPressure()",93957336986320,93957336987128],["v8::base::BoundedPageAllocator::CommitPageSize()",93957336987264,93957336987274],["v8::internal::Heap::DevToolsTraceEventScope::DevToolsTraceEventScope(v8::internal::Heap*, char const*, char const*)",93957336987520,93957336987930],["v8::internal::Heap::MarkCompactEpilogue()",93957337003808,93957337004277],["v8::internal::Heap::UpdateExternalString(v8::internal::String, unsigned long, unsigned long)",93957337006816,93957337006914],["v8::internal::Heap::UpdateReferencesInExternalStringTable(v8::internal::String (*)(v8::internal::Heap*, v8::internal::FullObjectSlot))",93957337007984,93957337008001],["v8::internal::Heap::ResetAllAllocationSitesDependentCode(v8::internal::AllocationType)",93957337008288,93957337008639],["v8::internal::Heap::CreateFillerObjectAtBackground(unsigned long, int, v8::internal::ClearFreedMemoryMode)",93957337009120,93957337009220],["v8::internal::Heap::LeftTrimFixedArray(v8::internal::FixedArrayBase, int)",93957337009600,93957337009940],["v8::internal::Heap::RightTrimWeakFixedArray(v8::internal::WeakFixedArray, int)",93957337010880,93957337010897],["v8::internal::Heap::ShouldOptimizeForMemoryUsage()",93957337011472,93957337011777],["v8::internal::Heap::InvokeIncrementalMarkingPrologueCallbacks()",93957337012096,93957337012854],["v8::internal::Heap::NotifyObjectLayoutChange(v8::internal::HeapObject, v8::internal::CombinationAssertScope<v8::internal::PerThreadAssertScopeDebugOnly<(v8::internal::PerThreadAssertType)0, false>, v8::internal::PerThreadAssertScopeDebugOnly<(v8::internal::PerThreadAssertType)1, false> > const&, v8::internal::InvalidateRecordedSlots)",93957337013632,93957337013897],["v8::internal::Heap::IdleNotificationEpilogue(v8::internal::GCIdleTimeAction, v8::internal::GCIdleTimeHeapState, double, double)",93957337014432,93957337014680],["v8::internal::Heap::EmbedderAllocationCounter() const",93957337016064,93957337016090],["v8::internal::Heap::MemoryPressureNotification(v8::MemoryPressureLevel, bool)",93957337017088,93957337017661],["v8::internal::Heap::RemoveNearHeapLimitCallback(unsigned long (*)(void*, unsigned long, unsigned long), unsigned long)",93957337017840,93957337017977],["v8::internal::IncrementalMarking::AdvanceWithDeadline(double, v8::internal::IncrementalMarking::CompletionAction, v8::internal::StepOrigin)",93957337066944,93957337068107],["v8::internal::InvalidatedSlotsFilter::InvalidatedSlotsFilter(v8::internal::MemoryChunk*, std::__1::set<v8::internal::HeapObject, v8::internal::Object::Comparer, std::__1::allocator<v8::internal::HeapObject> >*)",93957337071248,93957337071525],["v8::internal::LargeObjectSpaceObjectIterator::Next()",93957337072432,93957337072470],["v8::internal::LargeObjectSpace::CommittedPhysicalMemory()",93957337073648,93957337073658],["v8::internal::CodeLargeObjectSpace::RemoveChunkMapEntries(v8::internal::LargePage*)",93957337074752,93957337075335],["v8::internal::LargeObjectSpace::AddPage(v8::internal::LargePage*, unsigned long)",93957337075456,93957337075666],["v8::internal::LargeObjectSpace::FreeUnmarkedObjects()",93957337075856,93957337076317],["v8::internal::LargeObjectSpace::ContainsSlow(unsigned long)",93957337076352,93957337076400],["v8::internal::ObjectStatsCollectorImpl::RecordVirtualFunctionTemplateInfoDetails(v8::internal::FunctionTemplateInfo)",93957337471952,93957337472223],["v8::internal::WeakListVisitor<v8::internal::Context>::VisitLiveObject(v8::internal::Heap*, v8::internal::Context, v8::internal::WeakObjectRetainer*)",93957337483776,93957337484671],["v8::internal::PagedSpace::RemovePage(v8::internal::Page*)",93957337489632,93957337490006],["v8::internal::PagedSpace::ExpandBackground(v8::internal::LocalHeap*, unsigned long)",93957337491600,93957337491850],["v8::internal::PagedSpace::ReleasePage(v8::internal::Page*)",93957337492496,93957337492711],["v8::internal::PagedSpace::GetObjectIterator(v8::internal::Heap*)",93957337493152,93957337493209],["v8::internal::PagedSpace::UpdateInlineAllocationLimit(unsigned long)",93957337494368,93957337494416],["v8::internal::LocalSpace::Expand()",93957337495344,93957337495644],["v8::internal::MapSpace::SortFreeList()",93957337495936,93957337496281],["v8::internal::PagedSpaceObjectIterator::Next()",93957337496368,93957337496539],["v8::internal::ReadOnlyHeap::OnCreateHeapObjectsComplete(v8::internal::Isolate*)",93957337496832,93957337496875],["v8::internal::ReadOnlyHeap::Contains(v8::internal::HeapObject)",93957337496944,93957337496965],["v8::internal::ReadOnlyHeap::cached_read_only_object(unsigned long) const",93957337497264,93957337497278],["v8::internal::ReadOnlyHeapObjectIterator::ReadOnlyHeapObjectIterator(v8::internal::ReadOnlySpace*)",93957337497328,93957337497371],["v8::internal::ReadOnlyHeap::~ReadOnlyHeap()",93957337497632,93957337497670],["v8::internal::ReadOnlySpace::ReadOnlySpace(v8::internal::Heap*)",93957337497744,93957337497859],["v8::internal::IsolateAllocator::IsolateAllocator()",93957337815920,93957337815977],["v8::internal::interpreter::BytecodeArrayBuilder::ToString()",93957337855088,93957337855325],["v8::internal::interpreter::BytecodeArrayBuilder::CallRuntime(v8::internal::Runtime::FunctionId, v8::internal::interpreter::RegisterList)",93957337873360,93957337874165],["v8::internal::interpreter::BytecodeArrayIterator::GetRegisterPairOperand(int) const",93957337878128,93957337878218],["v8::internal::interpreter::BytecodeArrayWriter::WriteJump(v8::internal::interpreter::BytecodeNode*, v8::internal::interpreter::BytecodeLabel*)",93957337887984,93957337888337],["std::__1::vector<unsigned char, v8::internal::ZoneAllocator<unsigned char> >::__append(unsigned long)",93957337890736,93957337891280],["v8::internal::Handle<v8::internal::FixedArray> v8::internal::interpreter::BytecodeGenerator::TopLevelDeclarationsBuilder::AllocateDeclarations<v8::internal::Isolate>(v8::internal::UnoptimizedCompilationInfo*, v8::internal::interpreter::BytecodeGenerator*, v8::internal::Handle<v8::internal::Script>, v8::internal::Isolate*)",93957337896720,93957337898168],["v8::internal::interpreter::BytecodeGenerator::VisitVariableDeclaration(v8::internal::VariableDeclaration*)",93957337906304,93957337906738],["v8::internal::interpreter::BytecodeGenerator::VisitReturnStatement(v8::internal::ReturnStatement*)",93957337911120,93957337911554],["v8::internal::interpreter::BytecodeGenerator::BuildAssignment(v8::internal::interpreter::BytecodeGenerator::AssignmentLhsData const&, v8::internal::Token::Value, v8::internal::LookupHoistingMode)",93957337920128,93957337921497],["v8::internal::interpreter::BytecodeGenerator::VisitLiteralAccessor(v8::internal::LiteralProperty*, v8::internal::interpreter::Register)",93957337931776,93957337932021],["v8::internal::interpreter::BytecodeGenerator::VisitConditional(v8::internal::Conditional*)",93957337934736,93957337935499],["v8::internal::interpreter::BytecodeGenerator::BuildCreateArrayLiteral(v8::internal::ZoneList<v8::internal::Expression*> const*, v8::internal::ArrayLiteral*)",93957337945856,93957337948890],["v8::internal::interpreter::BytecodeGenerator::GetCachedStoreICSlot(v8::internal::Expression const*, v8::internal::AstRawString const*)",93957337950592,93957337950995],["v8::internal::interpreter::BytecodeGenerator::BuildPrivateGetterAccess(v8::internal::interpreter::Register, v8::internal::interpreter::Register)",93957337960848,93957337961185],["v8::internal::interpreter::BytecodeGenerator::VisitPropertyLoad(v8::internal::interpreter::Register, v8::internal::Property*)",93957337967376,93957337968611],["v8::internal::interpreter::BytecodeGenerator::VisitProperty(v8::internal::Property*)",93957337971872,93957337972293],["v8::internal::interpreter::BytecodeGenerator::VisitCallNew(v8::internal::CallNew*)",93957337977856,93957337978526],["v8::internal::interpreter::BytecodeGenerator::VisitUnaryOperation(v8::internal::UnaryOperation*)",93957337979648,93957337980310],["v8::internal::interpreter::BytecodeGenerator::VisitLogicalOrExpression(v8::internal::BinaryOperation*)",93957337985904,93957337986613],["v8::internal::interpreter::BytecodeGenerator::VisitNaryOperation(v8::internal::NaryOperation*)",93957337988928,93957337988995],["v8::internal::interpreter::BytecodeGenerator::VisitNaryNullishExpression(v8::internal::NaryOperation*)",93957337990720,93957337991339],["v8::internal::interpreter::BytecodeGenerator::VisitImportCallExpression(v8::internal::ImportCallExpression*)",93957337993888,93957337994403],["v8::internal::interpreter::BytecodeGenerator::VisitThisExpression(v8::internal::ThisExpression*)",93957337996464,93957337996523],["v8::internal::interpreter::BytecodeGenerator::VisitLogicalOrSubExpression(v8::internal::Expression*, v8::internal::interpreter::BytecodeLabels*, int)",93957337997376,93957337997853],["v8::internal::interpreter::BlockCoverageBuilder::AllocateBlockCoverageSlot(v8::internal::ZoneObject*, v8::internal::SourceRangeKind)",93957337999264,93957338000015],["v8::internal::interpreter::BlockBuilder::~BlockBuilder()",93957338001040,93957338001068],["v8::internal::interpreter::BytecodeGenerator::ControlScopeForIteration::Execute(v8::internal::interpreter::BytecodeGenerator::ControlScope::Command, v8::internal::Statement*, int)",93957338002880,93957338003003],["v8::internal::interpreter::BytecodeGenerator::ControlScopeForTryFinally::Execute(v8::internal::interpreter::BytecodeGenerator::ControlScope::Command, v8::internal::Statement*, int)",93957338004208,93957338004300],["v8::internal::interpreter::BytecodeLabels::New()",93957338004912,93957338005062],["v8::internal::interpreter::BytecodeRegisterOptimizer::Materialize(v8::internal::interpreter::BytecodeRegisterOptimizer::RegisterInfo*)",93957338006336,93957338006495],["v8::internal::interpreter::BytecodeRegisterOptimizer::GetInputRegister(v8::internal::interpreter::Register)",93957338007552,93957338007796],["v8::internal::interpreter::BytecodeRegisterOptimizer::RegisterListAllocateEvent(v8::internal::interpreter::RegisterList)",93957338008272,93957338008665],["v8::internal::interpreter::BytecodeRegisterOptimizer::~BytecodeRegisterOptimizer()",93957338008816,93957338008864],["v8::internal::interpreter::BytecodeRegisterOptimizer::NewRegisterInfo(v8::internal::interpreter::Register)",93957338008928,93957338009186],["std::__1::deque<v8::internal::Map, v8::internal::RecyclingZoneAllocator<v8::internal::Map> >::__add_back_capacity()",93957338009536,93957338010287],["std::__1::__split_buffer<int*, v8::internal::RecyclingZoneAllocator<int*> >::push_front(int*&&)",93957338011232,93957338012154],["std::__1::__split_buffer<int*, v8::internal::RecyclingZoneAllocator<int*>&>::push_front(int* const&)",93957338013104,93957338014058],["v8::internal::interpreter::Register::ToParameterIndex(int) const",93957338014080,93957338014093],["v8::internal::interpreter::Register::is_function_closure() const",93957338014112,93957338014124],["v8::internal::interpreter::Register::is_current_context() const",93957338014144,93957338014156],["v8::internal::interpreter::Register::virtual_accumulator()",93957338014176,93957338014187],["v8::internal::interpreter::Bytecodes::ToString(v8::internal::interpreter::Bytecode)",93957338015072,93957338016922],["v8::internal::interpreter::Bytecodes::GetDebugBreak(v8::internal::interpreter::Bytecode)",93957338017472,93957338017550],["v8::internal::interpreter::Bytecodes::IsDebugBreak(v8::internal::interpreter::Bytecode)",93957338017696,93957338017713],["v8::internal::interpreter::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::interpreter::Bytecode const&)",93957338017824,93957338017871],["v8::internal::Handle<v8::internal::Object> v8::internal::interpreter::ConstantArrayBuilder::Entry::ToHandle<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*) const",93957338018336,93957338018828],["v8::internal::Handle<v8::internal::FixedArray> v8::internal::interpreter::ConstantArrayBuilder::ToFixedArray<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*)",93957338019792,93957338020742],["v8::internal::interpreter::ConstantArrayBuilder::ConstantArrayBuilder(v8::internal::Zone*)",93957338021216,93957338021787],["v8::internal::interpreter::ConstantArrayBuilder::Insert(double)",93957338022160,93957338022785],["v8::internal::interpreter::ConstantArrayBuilder::Insert(v8::internal::AstBigInt)",93957338023152,93957338023493],["v8::internal::interpreter::ConstantArrayBuilder::InsertAsyncIteratorSymbol()",93957338023856,93957338024005],["v8::internal::interpreter::ConstantArrayBuilder::InsertEmptyObjectBoilerplateDescription()",93957338024176,93957338024325],["v8::internal::interpreter::ConstantArrayBuilder::InsertIteratorSymbol()",93957338024496,93957338024645],["v8::internal::interpreter::ConstantArrayBuilder::InsertJumpTable(unsigned long)",93957338024784,93957338024917],["v8::internal::interpreter::ConstantArrayBuilder::SetJumpTableSmi(unsigned long, v8::internal::Smi)",93957338025040,93957338025376],["v8::internal::interpreter::ConstantArrayBuilder::CommitReservedEntry(v8::internal::interpreter::OperandSize, v8::internal::Smi)",93957338025520,93957338025727],["v8::base::TemplateHashMapImpl<long, unsigned int, v8::base::KeyEqualityMatcher<long>, v8::internal::ZoneAllocationPolicy>::Resize()",93957338025792,93957338026170],["v8::internal::interpreter::BlockCoverageBuilder::IncrementBlockCounter(v8::internal::ZoneObject*, v8::internal::SourceRangeKind)",93957338026288,93957338027038],["v8::internal::interpreter::BreakableControlFlowBuilder::EmitJump(v8::internal::interpreter::BytecodeLabels*)",93957338027152,93957338027187],["v8::internal::interpreter::BreakableControlFlowBuilder::EmitJumpIfFalse(v8::internal::interpreter::BytecodeArrayBuilder::ToBooleanMode, v8::internal::interpreter::BytecodeLabels*)",93957338027248,93957338027288],["v8::internal::interpreter::LoopBuilder::~LoopBuilder()",93957338027344,93957338027557],["v8::internal::interpreter::LoopBuilder::LoopHeader()",93957338027600,93957338027621],["v8::internal::interpreter::LoopBuilder::JumpToHeader(int, v8::internal::interpreter::LoopBuilder*)",93957338027680,93957338027802],["v8::internal::RegExpImpl::CompileIrregexp(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSRegExp>, v8::internal::Handle<v8::internal::String>, bool)",93957339922128,93957339923867],["v8::internal::Stats_Runtime_ArrayIsArray(int, unsigned long*, v8::internal::Isolate*)",93957339936272,93957339936913],["v8::internal::Runtime_AtomicsStore64(int, unsigned long*, v8::internal::Isolate*)",93957339947360,93957339947397],["v8::internal::Runtime_AtomicsSub(int, unsigned long*, v8::internal::Isolate*)",93957339949024,93957339949061],["v8::internal::Runtime_AtomicsXor(int, unsigned long*, v8::internal::Isolate*)",93957339950272,93957339950309],["v8::internal::Runtime_BigIntCompareToNumber(int, unsigned long*, v8::internal::Isolate*)",93957339951568,93957339951730],["v8::internal::Runtime_BigIntEqualToBigInt(int, unsigned long*, v8::internal::Isolate*)",93957339953440,93957339953616],["v8::internal::Runtime_BigIntEqualToString(int, unsigned long*, v8::internal::Isolate*)",93957339954880,93957339955172],["v8::internal::Stats_Runtime_BigIntToBoolean(int, unsigned long*, v8::internal::Isolate*)",93957339955984,93957339956531],["v8::internal::Stats_Runtime_BigIntToNumber(int, unsigned long*, v8::internal::Isolate*)",93957339956736,93957339957323],["v8::internal::Stats_Runtime_ToBigInt(int, unsigned long*, v8::internal::Isolate*)",93957339957472,93957339958010],["v8::internal::Stats_Runtime_BigIntBinaryOp(int, unsigned long*, v8::internal::Isolate*)",93957339958480,93957339959362],["v8::internal::Stats_Runtime_BigIntUnaryOp(int, unsigned long*, v8::internal::Isolate*)",93957339959696,93957339960414],["v8::internal::Stats_Runtime_ThrowUnsupportedSuperError(int, unsigned long*, v8::internal::Isolate*)",93957339960576,93957339961100],["v8::internal::Stats_Runtime_ThrowConstructorNonCallableError(int, unsigned long*, v8::internal::Isolate*)",93957339961600,93957339962453],["v8::internal::Stats_Runtime_ThrowStaticPrototypeError(int, unsigned long*, v8::internal::Isolate*)",93957339962624,93957339963148],["v8::internal::(anonymous namespace)::CompileOptimized(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSFunction>, v8::internal::ConcurrencyMode)",93957340012352,93957340012519],["v8::internal::Stats_Runtime_ScheduleBreak(int, unsigned long*, v8::internal::Isolate*)",93957340017440,93957340017887],["v8::internal::Runtime_IsBreakOnException(int, unsigned long*, v8::internal::Isolate*)",93957340030944,93957340031369],["v8::internal::Runtime_DebugOnFunctionCall(int, unsigned long*, v8::internal::Isolate*)",93957340041504,93957340041812],["v8::internal::Runtime_DebugCollectCoverage(int, unsigned long*, v8::internal::Isolate*)",93957340044512,93957340047408],["v8::internal::Runtime_DebugAsyncFunctionEntered(int, unsigned long*, v8::internal::Isolate*)",93957340052496,93957340052739],["v8::internal::Runtime_LiveEditPatchScript(int, unsigned long*, v8::internal::Isolate*)",93957340056112,93957340056799],["v8::internal::Stats_Runtime_ForInEnumerate(int, unsigned long*, v8::internal::Isolate*)",93957340059120,93957340059961],["v8::internal::Runtime_FunctionGetScriptSource(int, unsigned long*, v8::internal::Isolate*)",93957340061344,93957340061742],["v8::internal::Runtime_FunctionGetSourceCode(int, unsigned long*, v8::internal::Isolate*)",93957340063712,93957340064030],["v8::internal::Runtime_FunctionIsAPIFunction(int, unsigned long*, v8::internal::Isolate*)",93957340065376,93957340065541],["v8::internal::Runtime_IsFunction(int, unsigned long*, v8::internal::Isolate*)",93957340068192,93957340068294],["v8::internal::Runtime_AtomicsNumAsyncWaitersForTesting(int, unsigned long*, v8::internal::Isolate*)",93957340070464,93957340070496],["v8::internal::Runtime_SetAllowAtomicsWait(int, unsigned long*, v8::internal::Isolate*)",93957340072528,93957340072678],["v8::internal::Runtime_AsyncFunctionAwaitUncaught(int, unsigned long*, v8::internal::Isolate*)",93957340073712,93957340073749],["v8::internal::Stats_Runtime_AsyncFunctionEnter(int, unsigned long*, v8::internal::Isolate*)",93957340074176,93957340074530],["v8::internal::Stats_Runtime_AsyncFunctionReject(int, unsigned long*, v8::internal::Isolate*)",93957340074592,93957340074946],["v8::internal::Stats_Runtime_AsyncFunctionResolve(int, unsigned long*, v8::internal::Isolate*)",93957340075008,93957340075362],["v8::internal::Stats_Runtime_CreateJSGeneratorObject(int, unsigned long*, v8::internal::Isolate*)",93957340076320,93957340077639],["v8::internal::Stats_Runtime_GeneratorClose(int, unsigned long*, v8::internal::Isolate*)",93957340077696,93957340078050],["v8::internal::Stats_Runtime_GeneratorGetFunction(int, unsigned long*, v8::internal::Isolate*)",93957340078208,93957340078783],["v8::internal::Stats_Runtime_AsyncGeneratorAwaitCaught(int, unsigned long*, v8::internal::Isolate*)",93957340078832,93957340079186],["v8::internal::Stats_Runtime_AsyncGeneratorAwaitUncaught(int, unsigned long*, v8::internal::Isolate*)",93957340079248,93957340079602],["v8::internal::Stats_Runtime_AsyncGeneratorResolve(int, unsigned long*, v8::internal::Isolate*)",93957340079664,93957340080018],["v8::internal::Stats_Runtime_AsyncGeneratorReject(int, unsigned long*, v8::internal::Isolate*)",93957340080080,93957340080434],["v8::internal::Stats_Runtime_AsyncGeneratorYield(int, unsigned long*, v8::internal::Isolate*)",93957340080496,93957340080850],["v8::internal::Stats_Runtime_GeneratorGetResumeMode(int, unsigned long*, v8::internal::Isolate*)",93957340080912,93957340081266],["v8::internal::Stats_Runtime_AsyncGeneratorHasCatchHandlerForPC(int, unsigned long*, v8::internal::Isolate*)",93957340081520,93957340082175],["v8::internal::Stats_Runtime_AccessCheck(int, unsigned long*, v8::internal::Isolate*)",93957340082528,93957340083235],["v8::internal::Stats_Runtime_FatalProcessOutOfMemoryInAllocateRaw(int, unsigned long*, v8::internal::Isolate*)",93957340083312,93957340083682],["v8::internal::Stats_Runtime_FatalProcessOutOfMemoryInvalidArrayLength(int, unsigned long*, v8::internal::Isolate*)",93957340083760,93957340084130],["v8::internal::Runtime_FormatList(int, unsigned long*, v8::internal::Isolate*)",93957340128768,93957340129043],["v8::internal::Runtime_SetNamedProperty(int, unsigned long*, v8::internal::Isolate*)",93957340191744,93957340191905],["v8::internal::Runtime_ToNumber(int, unsigned long*, v8::internal::Isolate*)",93957340219408,93957340219595],["v8::internal::Runtime_SwissTableAdd(int, unsigned long*, v8::internal::Isolate*)",93957340235136,93957340235438],["v8::internal::Runtime_NotEqual(int, unsigned long*, v8::internal::Isolate*)",93957340245760,93957340245938],["v8::internal::Runtime_PromiseRejectEventFromStack(int, unsigned long*, v8::internal::Isolate*)",93957340251392,93957340251715],["v8::internal::Runtime_PromiseMarkAsHandled(int, unsigned long*, v8::internal::Isolate*)",93957340258400,93957340258504],["v8::internal::Runtime_ConstructAggregateErrorHelper(int, unsigned long*, v8::internal::Isolate*)",93957340266192,93957340266408],["v8::internal::Stats_Runtime_GetPropertyWithReceiver(int, unsigned long*, v8::internal::Isolate*)",93957340271008,93957340271714],["v8::internal::Stats_Runtime_CheckProxyDeleteTrapResult(int, unsigned long*, v8::internal::Isolate*)",93957340275360,93957340276054],["v8::internal::Runtime_RegExpExec(int, unsigned long*, v8::internal::Isolate*)",93957340287360,93957340288006],["v8::internal::Runtime_RegExpBuildIndices(int, unsigned long*, v8::internal::Isolate*)",93957340294144,93957340294348],["v8::internal::Runtime_RegExpReplaceRT(int, unsigned long*, v8::internal::Isolate*)",93957340316608,93957340325893],["v8::internal::Object std::__1::__function::__policy_invoker<v8::internal::Object (int)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::__RT_impl_Runtime_StringReplaceNonGlobalRegExpWithFunction(v8::internal::Arguments<(v8::internal::ArgumentsType)0>, v8::internal::Isolate*)::{lambda(int)#1}, v8::internal::Object (int)> >(std::__1::__function::__policy_storage const*, int)",93957340337792,93957340337814],["v8::internal::(anonymous namespace)::MatchInfoBackedMatch::GetNamedCapture(v8::internal::Handle<v8::internal::String>, v8::internal::String::Match::CaptureState*)",93957340338208,93957340338633],["v8::internal::(anonymous namespace)::VectorBackedMatch::GetCapture(int, bool*)",93957340340256,93957340340352],["v8::internal::Runtime_DeclareModuleExports(int, unsigned long*, v8::internal::Isolate*)",93957340341664,93957340343235],["v8::internal::Runtime_DeclareEvalFunction(int, unsigned long*, v8::internal::Isolate*)",93957340349280,93957340349473],["v8::internal::Runtime_NewSloppyArguments(int, unsigned long*, v8::internal::Isolate*)",93957340350896,93957340352927],["v8::internal::Runtime_NewRestParameter(int, unsigned long*, v8::internal::Isolate*)",93957340357216,93957340357871],["v8::internal::Runtime_NewClosure_Tenured(int, unsigned long*, v8::internal::Isolate*)",93957340360176,93957340360604],["v8::internal::Runtime_PushWithContext(int, unsigned long*, v8::internal::Isolate*)",93957340362384,93957340362759],["v8::internal::Runtime_PushBlockContext(int, unsigned long*, v8::internal::Isolate*)",93957340364528,93957340364818],["v8::internal::Runtime_LoadLookupSlot(int, unsigned long*, v8::internal::Isolate*)",93957340366848,93957340367055],["v8::internal::Runtime_LoadLookupSlotForCall(int, unsigned long*, v8::internal::Isolate*)",93957340368496,93957340368694],["v8::internal::Runtime_StoreLookupSlot_Strict(int, unsigned long*, v8::internal::Isolate*)",93957340370320,93957340370653],["v8::internal::Runtime_StoreGlobalNoHoleCheckForReplLet(int, unsigned long*, v8::internal::Isolate*)",93957340372432,93957340373088],["v8::internal::(anonymous namespace)::GetCallerArguments(v8::internal::Isolate*, int*)",93957340376128,93957340377340],["v8::internal::Stats_Runtime_GetSubstitution(int, unsigned long*, v8::internal::Isolate*)",93957340379360,93957340380305],["v8::internal::Runtime_StringLastIndexOf(int, unsigned long*, v8::internal::Isolate*)",93957340382256,93957340382397],["v8::internal::Runtime_StringAdd(int, unsigned long*, v8::internal::Isolate*)",93957340384400,93957340384777],["v8::internal::Runtime_StringCharCodeAt(int, unsigned long*, v8::internal::Isolate*)",93957340386384,93957340386953],["v8::internal::Stats_Runtime_StringBuilderConcat(int, unsigned long*, v8::internal::Isolate*)",93957340388880,93957340390207],["v8::internal::Stats_Runtime_StringToArray(int, unsigned long*, v8::internal::Isolate*)",93957340391792,93957340393832],["v8::internal::Stats_Runtime_StringLessThan(int, unsigned long*, v8::internal::Isolate*)",93957340394128,93957340394801],["v8::internal::Stats_Runtime_StringLessThanOrEqual(int, unsigned long*, v8::internal::Isolate*)",93957340395104,93957340395777],["v8::internal::Stats_Runtime_StringGreaterThan(int, unsigned long*, v8::internal::Isolate*)",93957340396080,93957340396753],["v8::internal::Stats_Runtime_StringGreaterThanOrEqual(int, unsigned long*, v8::internal::Isolate*)",93957340397056,93957340397729],["v8::internal::Stats_Runtime_StringEqual(int, unsigned long*, v8::internal::Isolate*)",93957340398128,93957340398874],["v8::internal::Stats_Runtime_FlattenString(int, unsigned long*, v8::internal::Isolate*)",93957340399072,93957340399661],["v8::internal::Stats_Runtime_StringMaxLength(int, unsigned long*, v8::internal::Isolate*)",93957340399696,93957340400111],["v8::internal::Stats_Runtime_StringEscapeQuotes(int, unsigned long*, v8::internal::Isolate*)",93957340401296,93957340402862],["v8::internal::Runtime_CreatePrivateSymbol(int, unsigned long*, v8::internal::Isolate*)",93957340402880,93957340403288],["v8::internal::Runtime_CreatePrivateBrandSymbol(int, unsigned long*, v8::internal::Isolate*)",93957340404080,93957340404276],["v8::internal::Runtime_CreatePrivateNameSymbol(int, unsigned long*, v8::internal::Isolate*)",93957340404896,93957340405085],["v8::internal::Runtime_SymbolDescriptiveString(int, unsigned long*, v8::internal::Isolate*)",93957340405680,93957340406682],["v8::internal::Runtime_SymbolIsPrivate(int, unsigned long*, v8::internal::Isolate*)",93957340408080,93957340408177],["v8::internal::Runtime_ClearMegamorphicStubCache(int, unsigned long*, v8::internal::Isolate*)",93957340408736,93957340408886],["v8::internal::Runtime_ConstructDouble(int, unsigned long*, v8::internal::Isolate*)",93957340409424,93957340410279],["v8::internal::Runtime_ConstructConsString(int, unsigned long*, v8::internal::Isolate*)",93957340411552,93957340411927],["v8::internal::Runtime_ConstructSlicedString(int, unsigned long*, v8::internal::Isolate*)",93957340412688,93957340413085],["v8::internal::Runtime_DeoptimizeFunction(int, unsigned long*, v8::internal::Isolate*)",93957340413888,93957340414138],["v8::internal::Runtime_DeoptimizeNow(int, unsigned long*, v8::internal::Isolate*)",93957340414768,93957340415157],["v8::internal::Runtime_RunningInSimulator(int, unsigned long*, v8::internal::Isolate*)",93957340416000,93957340416032],["v8::internal::Runtime_RuntimeEvaluateREPL(int, unsigned long*, v8::internal::Isolate*)",93957340416496,93957340416703],["v8::internal::Runtime_ICsAreEnabled(int, unsigned long*, v8::internal::Isolate*)",93957340417312,93957340417360],["v8::internal::Runtime_IsConcurrentRecompilationSupported(int, unsigned long*, v8::internal::Isolate*)",93957340417824,93957340417870],["v8::internal::Runtime_DynamicCheckMapsEnabled(int, unsigned long*, v8::internal::Isolate*)",93957340418336,93957340418384],["v8::internal::Runtime_IsTopTierTurboprop(int, unsigned long*, v8::internal::Isolate*)",93957340418848,93957340418896],["v8::internal::Runtime_IsMidTierTurboprop(int, unsigned long*, v8::internal::Isolate*)",93957340419360,93957340419429],["v8::internal::Runtime_CompileBaseline(int, unsigned long*, v8::internal::Isolate*)",93957340419936,93957340420377],["v8::internal::Runtime_OptimizeFunctionOnNextCall(int, unsigned long*, v8::internal::Isolate*)",93957340421232,93957340421391],["v8::internal::Runtime_TierupFunctionOnNextCall(int, unsigned long*, v8::internal::Isolate*)",93957340421952,93957340422114],["v8::internal::Runtime_EnsureFeedbackVectorForFunction(int, unsigned long*, v8::internal::Isolate*)",93957340422688,93957340422886],["int v8::internal::Deserializer::ReadSingleBytecodeData<v8::internal::SlotAccessorForRootSlots>(unsigned char, v8::internal::SlotAccessorForRootSlots)",93957340533264,93957340534517],["v8::internal::SlotAccessorForHeapObject::Write(v8::internal::Handle<v8::internal::HeapObject>, v8::internal::HeapObjectReferenceType, int)",93957340535952,93957340536057],["v8::internal::EmbeddedData::InstructionSizeOfBuiltin(int) const",93957340539680,93957340539701],["v8::internal::ObjectDeserializer::CommitPostProcessedObjects()",93957340541024,93957340541399],["v8::internal::ReadOnlySerializer::SerializeObjectImpl(v8::internal::Handle<v8::internal::HeapObject>)",93957340541968,93957340542402],["v8::internal::ReadOnlySerializer::FinalizeSerialization()",93957340542544,93957340542610],["v8::internal::ReadOnlySerializer::SerializeUsingReadOnlyObjectCache(v8::internal::SnapshotByteSink*, v8::internal::Handle<v8::internal::HeapObject>)",93957340542656,93957340542754],["v8::internal::RootsSerializer::SerializeInObjectCache(v8::internal::Handle<v8::internal::HeapObject>)",93957340543072,93957340543158],["v8::internal::Serializer::ObjectSerializer::SerializePrologue(v8::internal::SnapshotSpace, int, v8::internal::Map)",93957340549744,93957340550340],["v8::internal::StartupDeserializer::DeserializeStringTable()",93957340572432,93957340572582],["v8::internal::FixedArrayBuilder::EnsureCapacity(v8::internal::Isolate*, int)",93957340576640,93957340576735],["v8::internal::HeapStringAllocator::allocate(unsigned int)",93957340579712,93957340579801],["v8::internal::StringStream::PrintName(v8::internal::Object)",93957340583680,93957340583804],["v8::internal::HeapStringAllocator::grow(unsigned int*)",93957340587584,93957340587758],["unibrow::Utf8::ValidateEncoding(unsigned char const*, unsigned long)",93957340589264,93957340589345],["int v8::internal::(anonymous namespace)::UnescapeChar<unsigned short>(v8::internal::Vector<unsigned short const>, int, int, int*)",93957340599408,93957340599829],["v8::internal::CancelableTaskManager::TryAbort(unsigned long)",93957340600720,93957340601270],["v8::internal::CancelableTask::CancelableTask(v8::internal::CancelableTaskManager*)",93957340602448,93957340602649],["non-virtual thunk to v8::internal::CancelableIdleTask::Run(double)",93957340602960,93957340602994],["v8::internal::MakeCancelableTask(v8::internal::Isolate*, std::__1::function<void ()>)",93957340603200,93957340603382],["v8::internal::(anonymous namespace)::CancelableFuncTask::~CancelableFuncTask()",93957340603840,93957340603911],["v8::internal::(anonymous namespace)::CancelableIdleFuncTask::~CancelableIdleFuncTask()",93957340604080,93957340604143],["non-virtual thunk to v8::internal::(anonymous namespace)::CancelableIdleFuncTask::~CancelableIdleFuncTask()",93957340604304,93957340604376],["v8::tracing::TracedValue::Create()",93957340605024,93957340605069],["v8::tracing::TracedValue::SetInteger(char const*, int)",93957340605152,93957340605311],["v8::tracing::TracedValue::SetString(char const*, char const*)",93957340605520,93957340605629],["v8::tracing::TracedValue::BeginDictionary(char const*)",93957340605984,93957340606099],["v8::tracing::TracedValue::AppendInteger(int)",93957340606240,93957340606357],["v8::tracing::TracedValue::BeginDictionary()",93957340606512,93957340606572],["v8::tracing::TracedValue::EndArray()",93957340606624,93957340606658],["v8::tracing::TracingCategoryObserver::SetUp()",93957340606752,93957340606820],["v8::tracing::TracingCategoryObserver::OnTraceEnabled()",93957340606896,93957340607358],["v8::internal::trap_handler::TryFindLandingPad(unsigned long, unsigned long*)",93957340607424,93957340607647],["v8::internal::trap_handler::ReleaseHandlerData(int)",93957340608144,93957340608253],["v8::internal::trap_handler::GetRecoveredTrapCount()",93957340608288,93957340608304],["v8::internal::trap_handler::MetadataLock::MetadataLock()",93957340608368,93957340608419],["v8::internal::RootIndexMap::RootIndexMap(v8::internal::Isolate*)",93957340608480,93957340608854],["v8::internal::GetPlatformPageAllocator()",93957340608976,93957340609128],["void std::__1::__function::__policy_invoker<void (v8_inspector::V8InspectorSessionImpl*)>::__call_impl<std::__1::__function::__default_alloc_func<v8_inspector::V8Debugger::handleProgramBreak(v8::Local<v8::Context>, v8::Local<v8::Value>, std::__1::vector<int, std::__1::allocator<int> > const&, v8::debug::ExceptionType, bool)::$_4, void (v8_inspector::V8InspectorSessionImpl*)> >(std::__1::__function::__policy_storage const*, v8_inspector::V8InspectorSessionImpl*)",93957342548608,93957342548633],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<int, v8_inspector::V8DebuggerId>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<int, v8_inspector::V8DebuggerId>, std::__1::__unordered_map_hasher<int, std::__1::__hash_value_type<int, v8_inspector::V8DebuggerId>, std::__1::hash<int>, std::__1::equal_to<int>, true>, std::__1::__unordered_map_equal<int, std::__1::__hash_value_type<int, v8_inspector::V8DebuggerId>, std::__1::equal_to<int>, std::__1::hash<int>, true>, std::__1::allocator<std::__1::__hash_value_type<int, v8_inspector::V8DebuggerId> > >::__emplace_unique_key_args<int, std::__1::pair<int, v8_inspector::V8DebuggerId> >(int const&, std::__1::pair<int, v8_inspector::V8DebuggerId>&&)",93957342551488,93957342552401],["v8_inspector::V8HeapProfilerAgentImpl::startTrackingHeapObjects(v8_crdtp::detail::ValueMaybe<bool>)",93957342553840,93957342554088],["v8_inspector::V8HeapProfilerAgentImpl::disable()",93957342554608,93957342554817],["v8_inspector::V8HeapProfilerAgentImpl::getObjectByHeapObjectId(v8_inspector::String16 const&, v8_crdtp::detail::ValueMaybe<v8_inspector::String16>, std::__1::unique_ptr<v8_inspector::protocol::Runtime::RemoteObject, std::__1::default_delete<v8_inspector::protocol::Runtime::RemoteObject> >*)",93957342555440,93957342556219],["v8_inspector::V8HeapProfilerAgentImpl::getHeapObjectId(v8_inspector::String16 const&, v8_inspector::String16*)",93957342556688,93957342557021],["v8_inspector::V8HeapProfilerAgentImpl::startSampling(v8_crdtp::detail::ValueMaybe<double>)",93957342557136,93957342557508],["v8_inspector::V8HeapProfilerAgentImpl::getSamplingProfile(std::__1::unique_ptr<v8_inspector::protocol::HeapProfiler::SamplingHeapProfile, std::__1::default_delete<v8_inspector::protocol::HeapProfiler::SamplingHeapProfile> >*)",93957342557648,93957342558301],["v8_crdtp::UberDispatcher::Dispatch(v8_crdtp::Dispatchable const&) const",93957342759616,93957342760804],["v8_crdtp::json::ConvertCBORToJSON(v8_crdtp::span<unsigned char>, std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*)",93957342769888,93957342770041],["v8_crdtp::json::(anonymous namespace)::JSONEncoder<std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > >::HandleBinary(v8_crdtp::span<unsigned char>)",93957342780368,93957342783068],["_ZNSt3__16vectorIhNS_9allocatorIhEEE6insertIPKcEENS_9enable_ifIXaasr27__is_cpp17_forward_iteratorIT_EE5valuesr16is_constructibleIhNS_15iterator_traitsIS8_E9referenceEEE5valueENS_11__wrap_iterIPhEEE4typeENSC_IPKhEES8_S8_",93957342784592,93957342786840],["v8_crdtp::json::(anonymous namespace)::JsonParser<unsigned short>::ParseToken(unsigned short const*, unsigned short const*, unsigned short const**, unsigned short const**)",93957342795648,93957342797219],["v8_crdtp::DeserializerState::ErrorMessage(v8_crdtp::span<char>) const",93957342798544,93957342798922],["v8_crdtp::DeserializerDescriptor::DeserializeField(v8_crdtp::DeserializerState*, v8_crdtp::span<char>, int*, void*) const",93957342799600,93957342799897],["v8_crdtp::ProtocolTypeTraits<int, void>::Serialize(int, std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*)",93957342800384,93957342800394],["v8_crdtp::ObjectSerializer::ObjectSerializer()",93957342800912,93957342800963],["v8_crdtp::ObjectSerializer::Finish()",93957342801008,93957342801098],["v8_crdtp::ProtocolTypeTraits<double, void>::Serialize(double, std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*)",93957342801232,93957342801242],["std::__1::__shared_ptr_pointer<std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*, std::__1::shared_ptr<std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > const>::__shared_ptr_default_delete<std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > const, std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > >, std::__1::allocator<std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > > >::__on_zero_shared()",93957342801312,93957342801365],["v8_crdtp::IncomingDeferredMessage::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342802128,93957342802159],["v8_crdtp::IncomingDeferredMessage::~IncomingDeferredMessage()",93957342802240,93957342802316],["v8_crdtp::Serializable::Serialize() const",93957342802416,93957342802460],["v8_crdtp::(anonymous namespace)::PreSerialized::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342802624,93957342802652],["v8::internal::compiler::InstructionSequence::SetSourcePosition(v8::internal::compiler::Instruction const*, v8::internal::SourcePosition)",93957343001392,93957343001613],["v8::internal::compiler::RegisterState::AllocatePendingUse(v8::internal::compiler::RegisterIndex, int, v8::internal::compiler::InstructionOperand*, bool, int)",93957343013904,93957343014161],["v8::internal::compiler::SinglePassRegisterAllocator::AllocateUseWithMove(v8::internal::compiler::RegisterIndex, v8::internal::compiler::VirtualRegisterData&, v8::internal::compiler::UnallocatedOperand*, int, v8::internal::compiler::SinglePassRegisterAllocator::UsePosition)",93957343020160,93957343020479],["v8::internal::compiler::SinglePassRegisterAllocator::AllocatePhiGapMove(v8::internal::compiler::VirtualRegisterData&, v8::internal::compiler::VirtualRegisterData&, int)",93957343027136,93957343027878],["v8::internal::compiler::MidTierRegisterAllocator::ReserveFixedRegisters(int)",93957343036592,93957343037339],["v8::internal::compiler::MidTierSpillSlotAllocator::Allocate(v8::internal::compiler::VirtualRegisterData*)",93957343038944,93957343039426],["v8::internal::compiler::PopulateReferenceMaps(v8::internal::compiler::MidTierRegisterAllocationData*)",93957343042176,93957343042581],["unsigned int std::__1::__sort4<v8::internal::compiler::AllocateSpillSlots(v8::internal::compiler::MidTierRegisterAllocationData*)::$_0&, v8::internal::compiler::VirtualRegisterData**>(v8::internal::compiler::VirtualRegisterData**, v8::internal::compiler::VirtualRegisterData**, v8::internal::compiler::VirtualRegisterData**, v8::internal::compiler::VirtualRegisterData**, v8::internal::compiler::AllocateSpillSlots(v8::internal::compiler::MidTierRegisterAllocationData*)::$_0&)",93957343046112,93957343046374],["v8::internal::compiler::MoveOptimizer::Run()",93957343047248,93957343047938],["v8::internal::compiler::MoveOptimizer::OptimizeMerge(v8::internal::compiler::InstructionBlock*)",93957343048432,93957343053421],["v8::internal::compiler::MoveOptimizer::RemoveClobberedDestinations(v8::internal::compiler::Instruction*)",93957343054800,93957343057354],["v8::internal::compiler::MoveOptimizer::MigrateMoves(v8::internal::compiler::Instruction*, v8::internal::compiler::Instruction*)",93957343057664,93957343064819],["v8::internal::compiler::(anonymous namespace)::LoadCompare(v8::internal::compiler::MoveOperands const*, v8::internal::compiler::MoveOperands const*)",93957343066032,93957343066495],["unsigned int std::__1::__sort4<bool (*&)(v8::internal::compiler::MoveOperands const*, v8::internal::compiler::MoveOperands const*), v8::internal::compiler::MoveOperands**>(v8::internal::compiler::MoveOperands**, v8::internal::compiler::MoveOperands**, v8::internal::compiler::MoveOperands**, v8::internal::compiler::MoveOperands**, bool (*&)(v8::internal::compiler::MoveOperands const*, v8::internal::compiler::MoveOperands const*))",93957343068160,93957343068478],["bool std::__1::__insertion_sort_incomplete<bool (*&)(v8::internal::compiler::MoveOperands const*, v8::internal::compiler::MoveOperands const*), v8::internal::compiler::MoveOperands**>(v8::internal::compiler::MoveOperands**, v8::internal::compiler::MoveOperands**, bool (*&)(v8::internal::compiler::MoveOperands const*, v8::internal::compiler::MoveOperands const*))",93957343068816,93957343069626],["v8::internal::compiler::RegisterAllocatorVerifier::BuildConstraint(v8::internal::compiler::InstructionOperand const*, v8::internal::compiler::RegisterAllocatorVerifier::OperandConstraint*)",93957343071024,93957343071425],["v8::internal::compiler::BytecodeGraphBuilder::VisitBytecodes()",93957343213648,93957343214019],["v8::internal::compiler::BytecodeGraphBuilder::VisitMod()",93957343233712,93957343233812],["v8::internal::compiler::BytecodeGraphBuilder::VisitToBooleanLogicalNot()",93957343236400,93957343236591],["v8::internal::compiler::BytecodeGraphBuilder::VisitCallRuntimeForPair()",93957343241792,93957343242179],["v8::internal::compiler::BytecodeGraphBuilder::VisitTestInstanceOf()",93957343245696,93957343245796],["v8::internal::compiler::BytecodeGraphBuilder::VisitToNumeric()",93957343248096,93957343248437],["v8::internal::compiler::BytecodeGraphBuilder::VisitCreateEmptyObjectLiteral()",93957343249936,93957343250030],["v8::internal::compiler::BytecodeGraphBuilder::VisitCreateWithContext()",93957343251968,93957343252230],["v8::internal::compiler::BytecodeGraphBuilder::VisitJumpIfJSReceiver()",93957343253072,93957343253193],["v8::internal::compiler::BytecodeGraphBuilder::VisitForInEnumerate()",93957343253760,93957343253877],["v8::internal::compiler::BytecodeGraphBuilder::VisitForInStep()",93957343255520,93957343255780],["v8::internal::compiler::BytecodeGraphBuilder::VisitReturn()",93957343257728,93957343257784],["v8::internal::compiler::BytecodeGraphBuilder::VisitThrowIfNotSuperConstructor()",93957343258400,93957343259972],["v8::internal::compiler::BytecodeGraphBuilder::VisitGetIterator()",93957343262080,93957343262570],["v8::internal::compiler::BytecodeGraphBuilder::VisitStar15()",93957343263920,93957343263988],["v8::internal::compiler::BytecodeGraphBuilder::VisitStar11()",93957343264240,93957343264308],["v8::internal::compiler::BytecodeGraphBuilder::VisitStar8()",93957343264480,93957343264548],["v8::internal::compiler::BytecodeGraphBuilder::VisitStar6()",93957343264640,93957343264708],["v8::internal::compiler::BytecodeGraphBuilder::VisitStar4()",93957343264800,93957343264868],["v8::internal::compiler::BytecodeGraphBuilder::VisitStar2()",93957343264960,93957343265028],["v8::internal::compiler::BytecodeGraphBuilder::VisitStar0()",93957343265120,93957343265183],["v8::internal::compiler::BytecodeGraphBuilder::CheckContextExtensionAtDepth(v8::internal::compiler::BytecodeGraphBuilder::Environment*, unsigned int)",93957343265504,93957343266057],["v8::internal::compiler::BytecodeGraphBuilder::CheckContextExtensions(unsigned int)",93957343266368,93957343266588],["v8::internal::compiler::BytecodeGraphBuilder::BuildLdaLookupContextSlot(v8::internal::TypeofMode)",93957343267152,93957343267620],["v8::internal::compiler::BytecodeGraphBuilder::BuildNamedStore(v8::internal::compiler::BytecodeGraphBuilder::StoreMode)",93957343268400,93957343269172],["v8::internal::compiler::BytecodeGraphBuilder::BuildCall(v8::internal::ConvertReceiverMode, v8::internal::compiler::Node* const*, unsigned long, int)",93957343269360,93957343269986],["v8::internal::compiler::BytecodeGraphBuilder::BuildHoleCheckAndThrow(v8::internal::compiler::Node*, v8::internal::Runtime::FunctionId, v8::internal::compiler::Node*)",93957343271232,93957343272593],["v8::internal::compiler::BytecodeGraphBuilder::BuildBinaryOp(v8::internal::compiler::Operator const*)",93957343273008,93957343273445],["v8::internal::compiler::BytecodeGraphBuilder::BuildDelete(v8::internal::LanguageMode)",93957343273904,93957343274241],["v8::internal::compiler::BytecodeGraphBuilder::BuildJumpIfTrue()",93957343274432,93957343275076],["v8::internal::compiler::BytecodeGraphBuilder::BuildSwitchOnSmi(v8::internal::compiler::Node*)",93957343275744,93957343276293],["v8::internal::compiler::BytecodeGraphBuilder::BuildReturn(v8::internal::compiler::BytecodeLivenessState const*)",93957343276768,93957343277706],["v8::internal::compiler::PipelineStatistics::BeginPhaseKind(char const*)",93957344624368,93957344624628],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::LateOptimizationPhase>()",93957344650320,93957344650705],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::InstructionStartsAsJSON const&)",93957344671376,93957344671940],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::PopulateReferenceMapsPhase>()",93957344678912,93957344679307],["void v8::internal::compiler::GraphTrimmer::TrimGraph<std::__1::__wrap_iter<v8::internal::compiler::Node**> >(std::__1::__wrap_iter<v8::internal::compiler::Node**>, std::__1::__wrap_iter<v8::internal::compiler::Node**>)",93957344684016,93957344684824],["v8::internal::compiler::(anonymous namespace)::NodeOriginsWrapper::Reduce(v8::internal::compiler::Node*)",93957344689792,93957344689944],["v8::internal::compiler::TypeAssertionsPhase::Run(v8::internal::compiler::PipelineData*, v8::internal::Zone*)",93957344699088,93957344699510],["v8::internal::compiler::LateOptimizationPhase::Run(v8::internal::compiler::PipelineData*, v8::internal::Zone*)",93957344704720,93957344706581],["v8::internal::compiler::LateGraphTrimmingPhase::Run(v8::internal::compiler::PipelineData*, v8::internal::Zone*)",93957344710528,93957344710724],["v8::internal::compiler::PropertyAccessBuilder::TryBuildNumberCheck(v8::internal::compiler::JSHeapBroker*, v8::internal::ZoneVector<v8::internal::Handle<v8::internal::Map> > const&, v8::internal::compiler::Node**, v8::internal::compiler::Node**, v8::internal::compiler::Node*)",93957344711824,93957344712122],["v8::internal::compiler::PropertyAccessBuilder::FoldLoadDictPrototypeConstant(v8::internal::compiler::PropertyAccessInfo const&)",93957344713296,93957344713704],["v8::internal::compiler::PropertyAccessBuilder::BuildLoadDataField(v8::internal::compiler::NameRef const&, v8::internal::compiler::PropertyAccessInfo const&, v8::internal::compiler::Node*, v8::internal::compiler::Node**, v8::internal::compiler::Node**)",93957344715760,93957344716299],["v8::internal::compiler::RedundancyElimination::ReduceCheckNode(v8::internal::compiler::Node*)",93957344716512,93957344717016],["v8::internal::compiler::RedundancyElimination::ReduceStart(v8::internal::compiler::Node*)",93957344719936,93957344720187],["v8::internal::compiler::RefsMap::RefsMap(unsigned int, v8::internal::compiler::AddressMatcher, v8::internal::Zone*)",93957344721024,93957344721208],["v8::internal::compiler::Truncation::description() const",93957344721904,93957344722041],["v8::internal::compiler::Truncation::GeneralizeIdentifyZeros(v8::internal::compiler::IdentifyZeros, v8::internal::compiler::IdentifyZeros)",93957344722416,93957344722432],["v8::internal::compiler::RepresentationChanger::GetRepresentationFor(v8::internal::compiler::Node*, v8::internal::MachineRepresentation, v8::internal::compiler::Type, v8::internal::compiler::Node*, v8::internal::compiler::UseInfo)",93957344722496,93957344723075],["v8::internal::compiler::RepresentationChanger::InsertConversion(v8::internal::compiler::Node*, v8::internal::compiler::Operator const*, v8::internal::compiler::Node*)",93957344723424,93957344723789],["v8::internal::compiler::RepresentationChanger::GetTaggedPointerRepresentationFor(v8::internal::compiler::Node*, v8::internal::MachineRepresentation, v8::internal::compiler::Type, v8::internal::compiler::Node*, v8::internal::compiler::UseInfo)",93957344725056,93957344726093],["v8::internal::compiler::RepresentationChanger::GetFloat32RepresentationFor(v8::internal::compiler::Node*, v8::internal::MachineRepresentation, v8::internal::compiler::Type, v8::internal::compiler::Truncation)",93957344727328,93957344728068],["v8::internal::compiler::RepresentationChanger::GetBitRepresentationFor(v8::internal::compiler::Node*, v8::internal::MachineRepresentation, v8::internal::compiler::Type)",93957344729376,93957344730109],["v8::internal::compiler::RepresentationChanger::GetWord64RepresentationFor(v8::internal::compiler::Node*, v8::internal::MachineRepresentation, v8::internal::compiler::Type, v8::internal::compiler::Node*, v8::internal::compiler::UseInfo)",93957344732528,93957344734451],["v8::internal::compiler::RepresentationChanger::InsertChangeFloat64ToInt32(v8::internal::compiler::Node*)",93957344734544,93957344734610],["v8::internal::compiler::RepresentationChanger::InsertCheckedFloat64ToInt32(v8::internal::compiler::Node*, v8::internal::compiler::CheckForMinusZeroMode, v8::internal::compiler::FeedbackSource const&, v8::internal::compiler::Node*)",93957344734704,93957344734771],["v8::internal::compiler::RepresentationChanger::InsertChangeBitToTagged(v8::internal::compiler::Node*)",93957344734864,93957344734933],["v8::internal::compiler::RepresentationChanger::InsertChangeInt32ToFloat64(v8::internal::compiler::Node*)",93957344735408,93957344735474],["v8::internal::compiler::RepresentationChanger::InsertChangeTaggedSignedToInt32(v8::internal::compiler::Node*)",93957344735536,93957344735605],["v8::internal::compiler::RepresentationChanger::Int32OverflowOperatorFor(v8::internal::compiler::IrOpcode::Value)",93957344735824,93957344735937],["v8::internal::compiler::RepresentationChanger::TaggedSignedOperatorFor(v8::internal::compiler::IrOpcode::Value)",93957344736032,93957344736107],["v8::internal::compiler::RepresentationChanger::Uint32OverflowOperatorFor(v8::internal::compiler::IrOpcode::Value)",93957344736288,93957344736356],["v8::internal::compiler::BasicBlock::BasicBlock(v8::internal::Zone*, v8::internal::compiler::BasicBlock::Id)",93957344736960,93957344737063],["v8::internal::compiler::Operator1<v8::internal::compiler::AllocateParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::AllocateParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::AllocateParameters> >::Equals(v8::internal::compiler::Operator const*) const",93957345086752,93957345086794],["v8::internal::compiler::Typer::Visitor::ObjectIsNumber(v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345130704,93957345130822],["v8::internal::compiler::Typer::Visitor::TypeCheckNumber(v8::internal::compiler::Node*)",93957345142208,93957345142301],["v8::internal::compiler::Type::Intersect(v8::internal::compiler::Type, v8::internal::compiler::Type, v8::internal::Zone*)",93957345148672,93957345149143],["v8::internal::compiler::Verifier::Visitor::Check(v8::internal::compiler::Node*, v8::internal::compiler::AllNodes const&)",93957345158560,93957345167030],["v8::internal::compiler::ZoneStats::NewEmptyZone(char const*, bool)",93957345177536,93957345177825],["std::__1::vector<v8::internal::compiler::Node*, v8::internal::ZoneAllocator<v8::internal::compiler::Node*> >::vector(unsigned long, v8::internal::compiler::Node* const&, v8::internal::ZoneAllocator<v8::internal::compiler::Node*> const&)",93957345198688,93957345199050],["v8::internal::compiler::SimdScalarLowering::LowerCompareOp(v8::internal::compiler::Node*, v8::internal::compiler::SimdScalarLowering::SimdType, v8::internal::compiler::Operator const*, bool)",93957345227936,93957345228773],["v8::internal::compiler::SimdScalarLowering::LowerNotEqual(v8::internal::compiler::Node*, v8::internal::compiler::SimdScalarLowering::SimdType, v8::internal::compiler::Operator const*)",93957345239088,93957345239775],["v8::internal::compiler::SimdScalarLowering::Float64ToInt64(v8::internal::compiler::Node**, v8::internal::compiler::Node**)",93957345243776,93957345243940],["v8::internal::compiler::JSWasmCallData::JSWasmCallData(v8::internal::Signature<v8::internal::wasm::ValueType> const*)",93957345248416,93957345248595],["v8::internal::compiler::WasmGraphBuilder::SetEffectControl(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957345249488,93957345249501],["v8::internal::compiler::WasmGraphBuilder::RefNull()",93957345250240,93957345250417],["v8::internal::compiler::WasmGraphBuilder::Int64Constant(long)",93957345251632,93957345251646],["v8::internal::compiler::WasmGraphBuilder::BuildI32RemU(v8::internal::compiler::Node*, v8::internal::compiler::Node*, int)",93957345255248,93957345255306],["v8::internal::compiler::WasmGraphBuilder::BuildI64Rol(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957345257728,93957345258056],["v8::internal::compiler::WasmGraphBuilder::BuildI32AsmjsRemU(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957345262224,93957345262578],["v8::internal::compiler::WasmGraphBuilder::BuildI32AsmjsSConvertF32(v8::internal::compiler::Node*)",93957345266944,93957345266978],["v8::internal::compiler::WasmGraphBuilder::BuildF32Ceil(v8::internal::compiler::Node*)",93957345267392,93957345267436],["v8::internal::compiler::WasmGraphBuilder::BuildF64Ceil(v8::internal::compiler::Node*)",93957345267584,93957345267628],["v8::internal::compiler::WasmGraphBuilder::BuildF64Asin(v8::internal::compiler::Node*)",93957345267776,93957345267820],["v8::internal::compiler::WasmGraphBuilder::BuildF32UConvertI64(v8::internal::compiler::Node*)",93957345268320,93957345268367],["v8::internal::compiler::WasmGraphBuilder::BuildAsmjsLoadMem(v8::internal::MachineType, v8::internal::compiler::Node*)",93957345270208,93957345270809],["v8::internal::compiler::WasmGraphBuilder::BranchNoHint(v8::internal::compiler::Node*, v8::internal::compiler::Node**, v8::internal::compiler::Node**)",93957345270912,93957345271112],["v8::internal::compiler::WasmGraphBuilder::Switch(unsigned int, v8::internal::compiler::Node*)",93957345271664,93957345271750],["v8::internal::compiler::WasmGraphBuilder::Trap(v8::internal::wasm::TrapReason, int)",93957345272304,93957345272380],["v8::internal::compiler::WasmGraphBuilder::BuildCFuncInstruction(v8::internal::ExternalReference, v8::internal::MachineType, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957345273456,93957345273751],["v8::internal::compiler::WasmGraphBuilder::BuildEncodeException32BitValue(v8::internal::compiler::Node*, unsigned int*, v8::internal::compiler::Node*)",93957345276400,93957345276843],["v8::internal::compiler::WasmGraphBuilder::Rethrow(v8::internal::compiler::Node*)",93957345277952,93957345278120],["v8::internal::compiler::WasmGraphBuilder::BuildDiv64Call(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::ExternalReference, v8::internal::MachineType, v8::internal::wasm::TrapReason, int)",93957345279888,93957345280213],["v8::internal::compiler::WasmGraphBuilder::BuildWasmReturnCall(v8::internal::Signature<v8::internal::wasm::ValueType> const*, v8::internal::Vector<v8::internal::compiler::Node*>, int, v8::internal::compiler::Node*, v8::internal::compiler::WasmGraphBuilder::UseRetpoline)",93957345282032,93957345282229],["v8::internal::compiler::WasmGraphBuilder::CallIndirect(unsigned int, unsigned int, v8::internal::Vector<v8::internal::compiler::Node*>, v8::internal::Vector<v8::internal::compiler::Node*>, int)",93957345283280,93957345283315],["v8::internal::compiler::WasmGraphBuilder::BuildLoadJumpTableOffsetFromExportedFunctionData(v8::internal::compiler::Node*)",93957345285504,93957345285714],["v8::internal::compiler::WasmGraphAssembler::HasInstanceType(v8::internal::compiler::Node*, v8::internal::InstanceType)",93957345288272,93957345288540],["v8::internal::compiler::WasmGraphBuilder::ReturnCallRef(unsigned int, v8::internal::Vector<v8::internal::compiler::Node*>, v8::internal::compiler::WasmGraphBuilder::CheckForNull, int)",93957345288592,93957345288628],["v8::internal::compiler::WasmGraphBuilder::ReturnCallIndirect(unsigned int, unsigned int, v8::internal::Vector<v8::internal::compiler::Node*>, int)",93957345288832,93957345288874],["v8::internal::compiler::WasmGraphBuilder::InitInstanceCache(v8::internal::compiler::WasmInstanceCacheNodes*)",93957345289120,93957345289510],["v8::internal::compiler::WasmGraphBuilder::NewInstanceCacheMerge(v8::internal::compiler::WasmInstanceCacheNodes*, v8::internal::compiler::WasmInstanceCacheNodes*, v8::internal::compiler::Node*)",93957345289760,93957345290044],["v8::internal::compiler::WasmGraphBuilder::CreateOrMergeIntoPhi(v8::internal::MachineRepresentation, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957345290176,93957345290968],["v8::internal::compiler::WasmGraphBuilder::GetGlobalBaseAndOffset(v8::internal::MachineType, v8::internal::wasm::WasmGlobal const&, v8::internal::compiler::Node**, v8::internal::compiler::Node**)",93957345291760,93957345292277],["v8::internal::compiler::WasmGraphBuilder::CurrentMemoryPages()",93957345292848,93957345292987],["v8::internal::compiler::WasmGraphBuilder::GlobalGet(unsigned int)",93957345293392,93957345293910],["v8::internal::compiler::WasmGraphBuilder::TableGet(unsigned int, v8::internal::compiler::Node*, int)",93957345294464,93957345294653],["v8::internal::compiler::WasmGraphBuilder::CheckBoundsAndAlignment(signed char, v8::internal::compiler::Node*, unsigned long, int)",93957345294880,93957345295205],["v8::internal::compiler::WasmGraphBuilder::GetSafeLoadOperator(int, v8::internal::wasm::ValueType)",93957345295680,93957345295829],["v8::internal::compiler::WasmGraphBuilder::TraceFunctionExit(v8::internal::Vector<v8::internal::compiler::Node*>, int)",93957345295936,93957345296225],["v8::internal::compiler::WasmGraphBuilder::LoadLane(v8::internal::wasm::ValueType, v8::internal::MachineType, v8::internal::compiler::Node*, v8::internal::compiler::Node*, unsigned long, unsigned int, unsigned char, int)",93957345296592,93957345297017],["v8::internal::compiler::WasmGraphBuilder::LoadMem(v8::internal::wasm::ValueType, v8::internal::MachineType, v8::internal::compiler::Node*, unsigned long, unsigned int, int)",93957345297776,93957345298417],["v8::internal::compiler::WasmGraphBuilder::StoreMem(v8::internal::MachineRepresentation, v8::internal::compiler::Node*, unsigned long, unsigned int, v8::internal::compiler::Node*, int, v8::internal::wasm::ValueType)",93957345298864,93957345299450],["v8::internal::compiler::WasmGraphBuilder::BuildF64x2Floor(v8::internal::compiler::Node*)",93957345299504,93957345299548],["v8::internal::compiler::WasmGraphBuilder::BuildF64x2NearestInt(v8::internal::compiler::Node*)",93957345299600,93957345299644],["v8::internal::compiler::WasmGraphBuilder::BuildF32x4Floor(v8::internal::compiler::Node*)",93957345299696,93957345299740],["v8::internal::compiler::WasmGraphBuilder::BuildF32x4NearestInt(v8::internal::compiler::Node*)",93957345299792,93957345299836],["v8::internal::compiler::WasmGraphBuilder::GetI64AtomicWaitCallDescriptor()",93957345300080,93957345300313],["v8::internal::compiler::(anonymous namespace)::CreateMachineSignature(v8::internal::Zone*, v8::internal::Signature<v8::internal::wasm::ValueType> const*, v8::internal::compiler::WasmGraphBuilder::CallOrigin)",93957345300832,93957345301419],["v8::internal::compiler::WasmGraphBuilder::SimdOp(v8::internal::wasm::WasmOpcode, v8::internal::compiler::Node* const*)",93957345301488,93957345306266],["v8::internal::compiler::WasmGraphBuilder::Simd8x16ShuffleOp(unsigned char const*, v8::internal::compiler::Node* const*)",93957345306736,93957345306946],["v8::internal::compiler::WasmGraphBuilder::AtomicFence()",93957345308704,93957345308792],["v8::internal::compiler::WasmGraphBuilder::DataDrop(unsigned int, int)",93957345309104,93957345309362],["v8::internal::compiler::WasmGraphBuilder::MemoryFill(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, int)",93957345309632,93957345309873],["v8::internal::compiler::WasmGraphBuilder::ElemDrop(unsigned int, int)",93957345310240,93957345310410],["v8::internal::compiler::WasmGraphBuilder::TableGrow(unsigned int, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957345310768,93957345311061],["v8::internal::compiler::WasmGraphBuilder::TableFill(unsigned int, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957345311472,93957345311724],["v8::internal::compiler::WasmGraphAssembler::StoreStructField(v8::internal::compiler::Node*, v8::internal::wasm::StructType const*, unsigned int, v8::internal::compiler::Node*)",93957345312032,93957345312623],["bool std::__1::__insertion_sort_incomplete<std::__1::__less<signed char, signed char>&, signed char*>(signed char*, signed char*, std::__1::__less<signed char, signed char>&)",93957346614160,93957346614667],["unsigned int std::__1::__sort5<std::__1::__less<unsigned char, unsigned char>&, unsigned char*>(unsigned char*, unsigned char*, unsigned char*, unsigned char*, unsigned char*, std::__1::__less<unsigned char, unsigned char>&)",93957346616064,93957346616325],["void std::__1::__sort<std::__1::__less<short, short>&, short*>(short*, short*, std::__1::__less<short, short>&)",93957346616848,93957346618394],["bool std::__1::__insertion_sort_incomplete<std::__1::__less<short, short>&, short*>(short*, short*, std::__1::__less<short, short>&)",93957346618720,93957346619325],["bool std::__1::__insertion_sort_incomplete<std::__1::__less<unsigned short, unsigned short>&, unsigned short*>(unsigned short*, unsigned short*, std::__1::__less<unsigned short, unsigned short>&)",93957346621200,93957346621805],["void std::__1::__sort<std::__1::__less<unsigned int, unsigned int>&, unsigned int*>(unsigned int*, unsigned int*, std::__1::__less<unsigned int, unsigned int>&)",93957346624000,93957346625400],["unsigned int std::__1::__sort5<std::__1::__less<unsigned long, unsigned long>&, unsigned long*>(unsigned long*, unsigned long*, unsigned long*, unsigned long*, unsigned long*, std::__1::__less<unsigned long, unsigned long>&)",93957346627648,93957346627916],["__clang_call_terminate",93957346630704,93957346630715],["std::uncaught_exception()",93957346630832,93957346630848],["std::__1::__iostream_category::name() const",93957346634432,93957346634445],["std::__1::ios_base::__call_callbacks(std::__1::ios_base::event)",93957346634608,93957346634679],["std::__1::ios_base::clear(unsigned int)",93957346634880,93957346634918],["std::__1::ios_base::copyfmt(std::__1::ios_base const&)",93957346635184,93957346635892],["std::__1::basic_ios<char, std::__1::char_traits<char> >::~basic_ios()",93957346635936,93957346635946],["std::__1::basic_streambuf<char, std::__1::char_traits<char> >::~basic_streambuf()",93957346636064,93957346636088],["std::__1::basic_streambuf<char, std::__1::char_traits<char> >::basic_streambuf()",93957346636144,93957346636194],["std::__1::basic_streambuf<char, std::__1::char_traits<char> >::xsgetn(char*, long)",93957346636224,93957346636422],["std::__1::basic_streambuf<char, std::__1::char_traits<char> >::xsputn(char const*, long)",93957346636496,93957346636679],["std::__1::basic_streambuf<wchar_t, std::__1::char_traits<wchar_t> >::~basic_streambuf()",93957346636720,93957346636762],["std::__1::basic_streambuf<wchar_t, std::__1::char_traits<wchar_t> >::xsgetn(wchar_t*, long)",93957346636832,93957346637030],["std::__1::basic_streambuf<wchar_t, std::__1::char_traits<wchar_t> >::xsputn(wchar_t const*, long)",93957346637088,93957346637270],["virtual thunk to std::__1::basic_istream<char, std::__1::char_traits<char> >::~basic_istream()",93957346637296,93957346637320],["virtual thunk to std::__1::basic_istream<char, std::__1::char_traits<char> >::~basic_istream()",93957346637360,93957346637403],["std::__1::basic_ostream<char, std::__1::char_traits<char> >::flush()",93957346637808,93957346638026],["std::__1::basic_ostream<char, std::__1::char_traits<char> >::~basic_ostream()",93957346638256,93957346638270],["std::__1::basic_ostream<char, std::__1::char_traits<char> >::~basic_ostream()",93957346638304,93957346638336],["std::__1::basic_ostream<char, std::__1::char_traits<char> >::sentry::sentry(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)",93957346638384,93957346638442],["std::__1::basic_ostream<char, std::__1::char_traits<char> >::operator<<(bool)",93957346638592,93957346638987],["non-virtual thunk to std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_stringstream()",93957346648912,93957346649020],["std::__1::__stdinbuf<char>::__getchar(bool)",93957346652688,93957346653058],["std::__1::__stdoutbuf<wchar_t>::xsputn(wchar_t const*, long)",93957346654560,93957346654667],["std::__1::collate<wchar_t>::do_compare(wchar_t const*, wchar_t const*, wchar_t const*, wchar_t const*) const",93957346655440,93957346655506],["std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > std::__1::num_get<char, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > >::__do_get_signed<long>(std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, unsigned int&, long&) const",93957346657808,93957346658940],["std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > std::__1::num_get<char, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > >::__do_get_unsigned<unsigned short>(std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, unsigned int&, unsigned short&) const",93957346660112,93957346661244],["std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > std::__1::num_get<char, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > >::__do_get_unsigned<unsigned long>(std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, unsigned int&, unsigned long&) const",93957346662416,93957346663548],["std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > std::__1::num_get<char, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > >::__do_get_floating_point<float>(std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, unsigned int&, float&) const",93957346664720,93957346665979],["std::__1::num_get<char, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > >::do_get(std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, unsigned int&, long double&) const",93957346667264,93957346667274],["std::__1::num_get<char, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > >::do_get(std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, unsigned int&, void*&) const",93957346668560,93957346669787],["std::__1::__libcpp_sscanf_l(char const*, __locale_struct*, char const*, ...)",93957346670416,93957346670607],["std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> > const* std::__1::__scan_keyword<std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> > const*, std::__1::ctype<wchar_t> >(std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >&, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> > const*, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> > const*, std::__1::ctype<wchar_t> const&, unsigned int&, bool)",93957346671344,93957346672618],["std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > std::__1::num_get<wchar_t, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::__do_get_signed<long>(std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, unsigned int&, long&) const",93957346672640,93957346673944],["std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > std::__1::num_get<wchar_t, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::__do_get_signed<long long>(std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, unsigned int&, long long&) const",93957346673968,93957346675272],["std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > std::__1::num_get<wchar_t, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::__do_get_unsigned<unsigned short>(std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, unsigned int&, unsigned short&) const",93957346675296,93957346676600],["std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > std::__1::num_get<wchar_t, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::__do_get_unsigned<unsigned int>(std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, unsigned int&, unsigned int&) const",93957346676624,93957346677928],["srand48_r",139871563520832,139871563520867],["__strtol_l",139871563524592,139871563524602],["__strtold_internal",139871563525920,139871563525936],["strtof64x_l",139871563556448,139871563556458],["__strtold_nan",139871563556832,139871563557027],["realpath",139871563558528,139871563559932],["a64l",139871563559952,139871563560005],["rpmatch",139871563560240,139871563560323],["register_printf_specifier",139871563603600,139871563603890],["fscanf",139871563616496,139871563616673],["remove",139871563619984,139871563620039],["__isoc99_vscanf",139871563620784,139871563620810],["_IO_file_doallocate",139871563735216,139871563735567],["fgetpos",139871563737136,139871563737536],["fopencookie",139871563738704,139871563738904],["fread",139871563739296,139871563739589],["fgetc",139871563771584,139871563771896],["__fpurge",139871563777088,139871563777191],["getchar_unlocked",139871563780928,139871563780965],["_IO_file_sync",139871563782000,139871563782225],["_IO_file_stat",139871563785776,139871563785792],["_IO_file_init",139871563787824,139871563787886],["_IO_file_finish",139871563788304,139871563788463],["_IO_file_underflow",139871563790112,139871563790933],["_IO_default_xsputn",139871563795248,139871563795520],["_IO_init_marker",139871563799760,139871563799844],["_IO_iter_end",139871563800656,139871563800659],["_IO_str_pbackfail",139871563801888,139871563801910],["pthread_attr_setscope",139871563803104,139871563803139],["pthread_cond_init",139871563803344,139871563803379],["pthread_cond_wait",139871563803440,139871563803475],["pthread_exit",139871563803536,139871563803579],["pthread_setschedparam",139871563803632,139871563803667],["pthread_mutex_init",139871563803728,139871563803763],["pthread_mutex_unlock",139871563803824,139871563803859],["pthread_setcanceltype",139871563803920,139871563803955],["__register_atfork",139871563804352,139871563804782],["mprobe",139871563834640,139871563834792],["strtok",139871563844944,139871563844956],["__strcoll_l",139871563854672,139871563858480],["wcsdup",139871563948880,139871563948944],["__mbrtowc",139871563951184,139871563951721],["wcstof",139871563954768,139871563954786],["__isoc99_wscanf",139871564000240,139871564000443],["wcstof128",139871564013024,139871564013042],["gmtime",139871564021760,139871564021777],["setitimer",139871564034992,139871564035025],["strftime",139871564049456,139871564049472],["clock_settime",139871564069776,139871564069852],["telldir",139871564073376,139871564073381],["fdopendir",139871564074400,139871564074591],["getgrgid",139871564078064,139871564078502],["getgrgid_r",139871564080400,139871564081586],["__copy_grp",139871564084288,139871564084802],["putpwent",139871564086048,139871564086441],["setpwent",139871564087536,139871564087738],["getpwuid_r",139871564089248,139871564090241],["times",139871564091680,139871564091756],["wait4",139871564091824,139871564091987],["pause",139871564092336,139871564092459],["_exit",139871564093040,139871564093112],["execle",139871564093488,139871564093872],["execvpe",139871564095664,139871564095674],["geteuid",139871564095744,139871564095752],["setuid",139871564095840,139871564095984],["__setpgid",139871564096336,139871564096369],["getsid",139871564096432,139871564096465],["setresuid",139871564096624,139871564096776],["__sysconf",139871564099424,139871564100496],["glob",139871564103776,139871564110448],["glob_pattern_p",139871564110544,139871564110653],["re_compile_pattern",139871564186256,139871564186375],["re_compile_fastmap",139871564186416,139871564186580],["regerror",139871564188048,139871564188180],["re_comp",139871564188272,139871564188560],["re_match",139871564188928,139871564188952],["re_match_2",139871564188992,139871564189259],["re_set_registers",139871564189536,139871564189595],["confstr",139871564192320,139871564193874],["__posix_getopt",139871564197440,139871564197464],["getopt_long_only",139871564197536,139871564197558],["__sched_getparam",139871564197648,139871564197681],["__sched_getscheduler",139871564197744,139871564197777],["__sched_get_priority_max",139871564197840,139871564197873],["sched_rr_get_interval",139871564197936,139871564197969],["sched_setaffinity",139871564198096,139871564198174],["freeaddrinfo",139871564213632,139871564213689],["wordfree",139871564227616,139871564227713],["__libc_pread",139871564230992,139871564231157],["posix_spawn_file_actions_init",139871564231408,139871564231434],["posix_spawn_file_actions_addclose",139871564231552,139871564231658],["posix_spawn_file_actions_adddup2",139871564231840,139871564231962],["posix_spawn_file_actions_addfchdir_np",139871564232144,139871564232223],["posix_spawnattr_destroy",139871564232272,139871564232275],["posix_spawnattr_setsigdefault",139871564232368,139871564232442],["posix_spawnattr_setflags",139871564232464,139871564232482],["posix_spawnattr_setpgroup",139871564232512,139871564232518],["posix_spawnp",139871564232544,139871564232560],["posix_spawnattr_getschedpolicy",139871564234640,139871564234651],["posix_spawnattr_setsigmask",139871564234672,139871564234770],["pthread_cond_timedwait",139871564539232,139871564539267],["sched_getaffinity",139871564546384,139871564546486],["posix_spawnp",139871564546608,139871564546624],["fdetach",139871564546656,139871564546676],["pthread_yield",139871566591328,139871566591333],["__pthread_attr_getstackaddr",139871566592432,139871566592442],["pthread_getattr_np",139871566592688,139871566593550],["__GI___pthread_mutex_lock",139871566595936,139871566596572],["__pthread_mutex_unlock_full",139871566600944,139871566601869],["__pthread_mutexattr_destroy",139871566604768,139871566604771],["pthread_rwlock_clockwrlock",139871566608960,139871566610108],["pthread_rwlockattr_getpshared",139871566610880,139871566610888],["__pthread_cond_init",139871566610976,139871566611020],["sem_close",139871566622400,139871566622702],["__ftrylockfile",139871566631056,139871566631142],["pthread_mutexattr_getprioceiling",139871566633296,139871566633416],["mtx_timedlock",139871566637360,139871566637438],["tss_get",139871566638128,139871566638133],["_dl_get_tls_static_info",139871566973328,139871566973349],["_dl_exception_free",139871566990416,139871566990454],["_dl_signal_exception",139871567005696,139871567005769],["v8::DelayedTasksPlatform::IdleTasksEnabled(v8::Isolate*)",93957335212240,93957335212258],["v8::DelayedTasksPlatform::CurrentClockTimeMillis()",93957335212432,93957335212447],["v8::Deserializer::GetSharedArrayBufferFromId(v8::Isolate*, unsigned int)",93957335311456,93957335311524],["v8::(anonymous namespace)::MockArrayBufferAllocator::Allocate(unsigned long)",93957335311968,93957335312013],["v8::(anonymous namespace)::MockArrayBufferAllocatiorWithLimit::Allocate(unsigned long)",93957335312128,93957335312196],["v8::(anonymous namespace)::MockArrayBufferAllocatiorWithLimit::Free(void*, unsigned long)",93957335312288,93957335312343],["v8::internal::FactoryBase<v8::internal::LocalFactory>::NewFixedDoubleArray(int, v8::internal::AllocationType)",93957336839008,93957336839185],["v8::internal::FactoryBase<v8::internal::LocalFactory>::NewUncompiledDataWithoutPreparseData(v8::internal::Handle<v8::internal::String>, int, int)",93957336842480,93957336842496],["v8::internal::FactoryBase<v8::internal::LocalFactory>::NewOneByteInternalizedString(v8::internal::Vector<unsigned char const> const&, unsigned int)",93957336843312,93957336843533],["v8::internal::FactoryBase<v8::internal::LocalFactory>::NewConsString(v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String>, v8::internal::AllocationType)",93957336844112,93957336845675],["v8::internal::FactoryBase<v8::internal::LocalFactory>::NewBigInt(int, v8::internal::AllocationType)",93957336846400,93957336846548],["v8::internal::FactoryBase<v8::internal::LocalFactory>::NewSourceTextModuleInfo()",93957336846704,93957336846739],["v8::internal::FactoryBase<v8::internal::LocalFactory>::NewClassPositions(int, int)",93957336846928,93957336846978],["v8::internal::Handle<v8::internal::String> v8::internal::Factory::InternalizeString<v8::internal::SeqTwoByteString>(v8::internal::Handle<v8::internal::SeqTwoByteString>, int, int, bool)",93957336847088,93957336847183],["v8::internal::GCTracer::OldGenerationAllocationThroughputInBytesPerMillisecond(double) const",93957336939584,93957336939832],["v8::internal::Heap_WriteBarrierForCodeSlow(v8::internal::Code)",93957336943920,93957336943930],["v8::internal::Heap::GenerationSizesFromHeapSize(unsigned long, unsigned long*, unsigned long*)",93957336947440,93957336947602],["v8::internal::Heap::CommittedMemoryExecutable()",93957336948368,93957336948399],["v8::internal::Heap::AllocationLimitOvershotByLargeMargin()",93957336949600,93957336950278],["v8::internal::Heap::DumpJSONHeapStatistics(std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >&)",93957336957920,93957336960018],["v8::internal::Heap::RemoveHeapObjectAllocationTracker(v8::internal::HeapObjectAllocationTracker*)",93957336961984,93957336962179],["v8::internal::Heap::AddRetainer(v8::internal::HeapObject, v8::internal::HeapObject)",93957336964224,93957336964592],["v8::internal::Heap::GarbageCollectionPrologue()",93957336964928,93957336965785],["v8::internal::Heap::TotalGlobalHandlesSize()",93957336966432,93957336966453],["v8::internal::Heap::MergeAllocationSitePretenuringFeedback(std::__1::unordered_map<v8::internal::AllocationSite, unsigned long, v8::internal::Object::Hasher, std::__1::equal_to<v8::internal::AllocationSite>, std::__1::allocator<std::__1::pair<v8::internal::AllocationSite const, unsigned long> > > const&)",93957336966496,93957336966714],["v8::internal::Heap::RemoveAllocationObserversFromAllSpaces(v8::internal::AllocationObserver*, v8::internal::AllocationObserver*)",93957336966976,93957336967225],["v8::internal::Heap::RemoveAllocationSitePretenuringFeedback(v8::internal::AllocationSite)",93957336967408,93957336967807],["v8::internal::Heap::InvalidateCodeDeoptimizationData(v8::internal::Code)",93957336969280,93957336969653],["v8::internal::Heap::GarbageCollectionEpilogueInSafepoint(v8::internal::GarbageCollector)",93957336969968,93957336973201],["v8::internal::Heap::GarbageCollectionEpilogue()",93957336973424,93957336975707],["v8::internal::Heap::GlobalSizeOfObjects()",93957337003008,93957337003186],["v8::internal::Heap::EvacuateYoungGeneration()",93957337004608,93957337005550],["v8::internal::Heap::UnregisterUnprotectedMemoryChunk(v8::internal::MemoryChunk*)",93957337006288,93957337006405],["v8::internal::Heap::ExternalStringTable::IterateYoung(v8::internal::RootVisitor*)",93957337007312,93957337007351],["v8::internal::Heap::ExternalStringTable::UpdateReferences(v8::internal::String (*)(v8::internal::Heap*, v8::internal::FullObjectSlot))",93957337007712,93957337007983],["v8::internal::Heap::ProcessAllWeakReferences(v8::internal::WeakObjectRetainer*)",93957337008016,93957337008121],["v8::internal::Heap::ProcessWeakListRoots(v8::internal::WeakObjectRetainer*)",93957337008176,93957337008286],["v8::internal::Heap::GetFillToAlign(unsigned long, v8::internal::AllocationAlignment)",93957337008640,93957337008689],["v8::internal::Heap::AllocateExternalBackingStore(std::__1::function<void* (unsigned long)> const&, unsigned long)",93957337008784,93957337009112],["v8::internal::Heap::CanMoveObjectStart(v8::internal::HeapObject)",93957337009232,93957337009294],["v8::internal::Heap::OnMoveEvent(v8::internal::HeapObject, v8::internal::HeapObject, int)",93957337009328,93957337009594],["v8::internal::Heap::RightTrimFixedArray(v8::internal::FixedArrayBase, int)",93957337009952,93957337010093],["v8::internal::IncrementalMarking::UpdateMarkedBytesAfterScavenge(unsigned long)",93957337064528,93957337064558],["v8::internal::IncrementalMarkingRootMarkingVisitor::VisitRootPointers(v8::internal::Root, char const*, v8::internal::FullObjectSlot, v8::internal::FullObjectSlot)",93957337069472,93957337069535],["v8::internal::InvalidatedSlotsFilter::OldToOld(v8::internal::MemoryChunk*)",93957337071184,93957337071215],["v8::internal::InvalidatedSlotsCleanup::NoCleanup(v8::internal::MemoryChunk*)",93957337071632,93957337071683],["v8::internal::LargeObjectSpaceObjectIterator::LargeObjectSpaceObjectIterator(v8::internal::LargeObjectSpace*)",93957337072400,93957337072427],["v8::internal::OldLargeObjectSpace::AllocateRaw(int)",93957337072480,93957337072492],["v8::internal::OldLargeObjectSpace::AllocateRawBackground(v8::internal::LocalHeap*, int)",93957337073136,93957337073638],["v8::internal::CodeLargeObjectSpace::FindPage(unsigned long)",93957337073664,93957337074126],["v8::internal::NewSpace::~NewSpace()",93957337449968,93957337450086],["v8::internal::ObjectStatsCollectorImpl::RecordVirtualCodeDetails(v8::internal::Code)",93957337477440,93957337478008],["v8::internal::FieldStatsCollector::VisitPointers(v8::internal::HeapObject, v8::internal::CompressedObjectSlot, v8::internal::CompressedObjectSlot)",93957337481952,93957337481972],["void v8::internal::WeakListVisitor<v8::internal::Context>::DoWeakList<v8::internal::Code>(v8::internal::Heap*, v8::internal::Context, v8::internal::WeakObjectRetainer*, int)",93957337486912,93957337487346],["v8::internal::PagedSpace::TearDown()",93957337488912,93957337489088],["v8::internal::PagedSpace::MergeLocalSpace(v8::internal::LocalSpace*)",93957337490416,93957337490657],["v8::internal::PagedSpace::ShrinkImmortalImmovablePages()",93957337491200,93957337491382],["v8::internal::PagedSpace::DecreaseLimit(unsigned long)",93957337491920,93957337492307],["v8::internal::PagedSpace::Available()",93957337492416,93957337492490],["v8::internal::PagedSpace::SetReadable()",93957337492720,93957337492853],["v8::internal::PagedSpace::SetReadAndWritable()",93957337493008,93957337493141],["v8::internal::PagedSpace::TryAllocationFromFreeListMain(unsigned long, v8::internal::AllocationOrigin)",93957337493216,93957337493624],["v8::internal::PagedSpace::TryAllocationFromFreeListBackground(v8::internal::LocalHeap*, unsigned long, unsigned long, v8::internal::AllocationAlignment, v8::internal::AllocationOrigin)",93957337494064,93957337494356],["v8::internal::PagedSpace::PrepareForMarkCompact()",93957337494416,93957337494449],["v8::internal::PagedSpace::RawRefillLabMain(int, v8::internal::AllocationOrigin)",93957337494656,93957337495337],["v8::internal::CompactionSpace::RefillLabMain(int, v8::internal::AllocationOrigin)",93957337495648,93957337495658],["v8::internal::(anonymous namespace)::CreateFunctionForBuiltinWithoutPrototype(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, v8::internal::Builtins::Name)",93957337715696,93957337716275],["v8::internal::interpreter::BytecodeArrayBuilder::CompareUndetectable()",93957337830944,93957337831198],["v8::internal::interpreter::BytecodeArrayBuilder::CreateFunctionContext(v8::internal::Scope const*, int)",93957337849600,93957337849926],["v8::internal::interpreter::BytecodeArrayBuilder::JumpIfNil(v8::internal::interpreter::BytecodeLabel*, v8::internal::Token::Value, v8::internal::interpreter::BytecodeArrayBuilder::NilValue)",93957337858592,93957337858661],["v8::internal::interpreter::BytecodeArrayBuilder::ResumeGenerator(v8::internal::interpreter::Register, v8::internal::interpreter::RegisterList)",93957337866032,93957337866549],["v8::internal::interpreter::BytecodeArrayBuilder::EmptyArrayBoilerplateDescriptionConstantPoolEntry()",93957337875904,93957337875918],["v8::internal::interpreter::BytecodeArrayIterator::current_bytecode_size() const",93957337877664,93957337877705],["v8::internal::interpreter::JumpTableTargetOffsets::end() const",93957337879232,93957337879275],["v8::internal::Handle<v8::internal::ByteArray> v8::internal::interpreter::BytecodeArrayWriter::ToSourcePositionTable<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*)",93957337881888,93957337881918],["v8::internal::interpreter::BytecodeArrayWriter::WriteSwitch(v8::internal::interpreter::BytecodeNode*, v8::internal::interpreter::BytecodeJumpTable*)",93957337889152,93957337889527],["v8::internal::interpreter::BytecodeArrayWriter::SetFunctionEntrySourcePosition(int)",93957337890016,93957337890062],["v8::internal::interpreter::BytecodeDecoder::Decode(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, unsigned char const*, int)",93957337891552,93957337894187],["v8::internal::Handle<v8::internal::BytecodeArray> v8::internal::interpreter::BytecodeGenerator::FinalizeBytecode<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*, v8::internal::Handle<v8::internal::Script>)",93957337895504,93957337895890],["v8::internal::interpreter::BytecodeGenerator::AllocateTopLevelRegisters()",93957337901040,93957337901242],["v8::internal::interpreter::BytecodeGenerator::BuildInstanceMemberInitialization(v8::internal::interpreter::Register, v8::internal::interpreter::Register)",93957337904640,93957337904968],["v8::internal::interpreter::BytecodeGenerator::BuildDeclareCall(v8::internal::Runtime::FunctionId)",93957337909136,93957337909356],["v8::internal::interpreter::BytecodeGenerator::VisitContinueStatement(v8::internal::ContinueStatement*)",93957337910832,93957337910965],["v8::internal::interpreter::BytecodeGenerator::VisitSwitchStatement(v8::internal::SwitchStatement*)",93957337912288,93957337913553],["v8::internal::interpreter::BytecodeGenerator::VisitForInStatement(v8::internal::ForInStatement*)",93957337916272,93957337917794],["v8::internal::interpreter::BytecodeGenerator::BuildGetIteratorRecord(v8::internal::IteratorType)",93957337923904,93957337924177],["v8::internal::interpreter::(anonymous namespace)::AccessorTable<v8::internal::ClassLiteralProperty>::LookupOrInsert(v8::internal::Literal*)",93957337931040,93957337931465],["v8::internal::interpreter::BytecodeGenerator::BuildClassProperty(v8::internal::ClassLiteralProperty*)",93957337932544,93957337933105],["v8::internal::interpreter::BytecodeGenerator::BuildInvalidPropertyAccess(v8::internal::MessageTemplate, v8::internal::Property*)",93957337934064,93957337934334],["v8::internal::interpreter::BytecodeGenerator::VisitRegExpLiteral(v8::internal::RegExpLiteral*)",93957337935760,93957337935832],["v8::internal::interpreter::BytecodeGenerator::BuildFillArrayWithIterator(v8::internal::interpreter::BytecodeGenerator::IteratorRecord, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::FeedbackSlot, v8::internal::FeedbackSlot, v8::internal::FeedbackSlot, v8::internal::FeedbackSlot)",93957337945056,93957337945662],["v8::internal::interpreter::BytecodeGenerator::BuildThrowIfHole(v8::internal::Variable*)",93957337948960,93957337948999],["v8::internal::interpreter::BytecodeGenerator::GetCachedLoadICSlot(v8::internal::Expression const*, v8::internal::AstRawString const*)",93957337949936,93957337950287],["v8::internal::interpreter::BytecodeGenerator::BuildDestructuringArrayAssignment(v8::internal::ArrayLiteral*, v8::internal::Token::Value, v8::internal::LookupHoistingMode)",93957337952064,93957337954945],["v8::internal::interpreter::BytecodeGenerator::VisitAssignment(v8::internal::Assignment*)",93957337957968,93957337958246],["v8::internal::interpreter::BytecodeGenerator::VisitYieldStar(v8::internal::YieldStar*)",93957337962336,93957337965399],["v8::internal::interpreter::BytecodeGenerator::VisitAwait(v8::internal::Await*)",93957337966816,93957337967100],["v8::internal::interpreter::BytecodeGenerator::VisitKeyedSuperPropertyLoad(v8::internal::Property*, v8::internal::interpreter::Register)",93957337969312,93957337969843],["void v8::internal::interpreter::BytecodeGenerator::BuildOptionalChain<v8::internal::interpreter::BytecodeGenerator::VisitOptionalChain(v8::internal::OptionalChain*)::$_10>(v8::internal::interpreter::BytecodeGenerator::VisitOptionalChain(v8::internal::OptionalChain*)::$_10)",93957337971488,93957337971870],["v8::internal::interpreter::BytecodeGenerator::VisitAndPushIntoRegisterList(v8::internal::Expression*, v8::internal::interpreter::RegisterList*)",93957337972304,93957337972620],["v8::internal::interpreter::BytecodeGenerator::VisitCallSuper(v8::internal::Call*)",93957337976464,93957337977843],["v8::internal::interpreter::BytecodeGenerator::VisitCallRuntime(v8::internal::CallRuntime*)",93957337978528,93957337978756],["v8::internal::interpreter::BytecodeGenerator::VisitNot(v8::internal::UnaryOperation*)",93957337979040,93957337979645],["v8::internal::interpreter::BytecodeGenerator::VisitDelete(v8::internal::UnaryOperation*)",93957337980320,93957337981927],["v8::internal::interpreter::BytecodeGenerator::VisitBinaryOperation(v8::internal::BinaryOperation*)",93957337985568,93957337985900],["v8::internal::interpreter::BytecodeGenerator::VisitLogicalAndExpression(v8::internal::BinaryOperation*)",93957337986624,93957337987327],["v8::internal::interpreter::BytecodeGenerator::VisitArithmeticExpression(v8::internal::BinaryOperation*)",93957337988080,93957337988915],["v8::internal::interpreter::BytecodeGenerator::VisitNaryCommaExpression(v8::internal::NaryOperation*)",93957337989008,93957337989504],["v8::internal::interpreter::BytecodeGenerator::VisitNaryLogicalAndExpression(v8::internal::NaryOperation*)",93957337990112,93957337990715],["v8::internal::interpreter::BytecodeGenerator::VisitNaryArithmeticExpression(v8::internal::NaryOperation*)",93957337991344,93957337992205],["v8::internal::interpreter::BytecodeGenerator::VisitCompareOperation(v8::internal::CompareOperation*)",93957337992432,93957337993873],["v8::internal::interpreter::BytecodeGenerator::BuildGetIterator(v8::internal::IteratorType)",93957337994416,93957337995147],["v8::internal::interpreter::BytecodeGenerator::VisitTemplateLiteral(v8::internal::TemplateLiteral*)",93957337995568,93957337996450],["v8::internal::interpreter::BytecodeGenerator::VisitLogicalTestSubExpression(v8::internal::Token::Value, v8::internal::Expression*, v8::internal::interpreter::BytecodeLabels*, v8::internal::interpreter::BytecodeLabels*, int)",93957337996528,93957337996772],["v8::internal::interpreter::BytecodeGenerator::VisitNaryLogicalTest(v8::internal::Token::Value, v8::internal::NaryOperation*, v8::internal::interpreter::BytecodeGenerator::NaryCodeCoverageSlots const*)",93957337997088,93957337997370],["v8::internal::interpreter::BytecodeGenerator::VisitLogicalAndSubExpression(v8::internal::Expression*, v8::internal::interpreter::BytecodeLabels*, int)",93957337997856,93957337998333],["v8::internal::interpreter::BytecodeGenerator::NaryCodeCoverageSlots::NaryCodeCoverageSlots(v8::internal::interpreter::BytecodeGenerator*, v8::internal::NaryOperation*)",93957337998848,93957337999257],["v8::internal::interpreter::BytecodeGenerator::AllocateNaryBlockCoverageSlotIfEnabled(v8::internal::NaryOperation*, unsigned long)",93957338000016,93957338000781],["v8::internal::interpreter::BytecodeGenerator::ControlScopeForTopLevel::Execute(v8::internal::interpreter::BytecodeGenerator::ControlScope::Command, v8::internal::Statement*, int)",93957338000944,93957338001036],["v8::internal::interpreter::BytecodeGenerator::ControlScopeForBreakable::Execute(v8::internal::interpreter::BytecodeGenerator::ControlScope::Command, v8::internal::Statement*, int)",93957338001072,93957338001150],["std::__1::vector<v8::internal::interpreter::BytecodeLabel, v8::internal::ZoneAllocator<v8::internal::interpreter::BytecodeLabel> >::__append(unsigned long)",93957338002240,93957338002866],["v8::internal::interpreter::BytecodeGenerator::MultipleEntryBlockContextScope::EnterScope()",93957338003008,93957338003448],["v8::internal::interpreter::BytecodeGenerator::ControlScope::DeferredCommands::ApplyDeferredCommands()",93957338003760,93957338004206],["v8::internal::interpreter::BytecodeGenerator::ControlScope::DeferredCommands::RecordCommand(v8::internal::interpreter::BytecodeGenerator::ControlScope::Command, v8::internal::Statement*)",93957338004304,93957338004512],["v8::internal::interpreter::BytecodeGenerator::ControlScopeForTryCatch::Execute(v8::internal::interpreter::BytecodeGenerator::ControlScope::Command, v8::internal::Statement*, int)",93957338004864,93957338004903],["v8::internal::interpreter::BytecodeLabels::Bind(v8::internal::interpreter::BytecodeArrayBuilder*)",93957338005072,93957338005136],["v8::internal::interpreter::BytecodeRegisterOptimizer::Flush()",93957338005616,93957338006323],["v8::internal::interpreter::BytecodeRegisterOptimizer::RegisterTransfer(v8::internal::interpreter::BytecodeRegisterOptimizer::RegisterInfo*, v8::internal::interpreter::BytecodeRegisterOptimizer::RegisterInfo*)",93957338006496,93957338007186],["v8::internal::interpreter::BytecodeRegisterOptimizer::PrepareOutputRegisterList(v8::internal::interpreter::RegisterList)",93957338007488,93957338007550],["v8::internal::interpreter::BytecodeRegisterOptimizer::GetInputRegisterList(v8::internal::interpreter::RegisterList)",93957338007808,93957338008125],["v8::internal::RegExpUtils::RegExpExec(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object>)",93957339915408,93957339916344],["v8::internal::RegExpGlobalCache::LastSuccessfulMatch()",93957339927520,93957339927556],["v8::internal::Stats_Runtime_NormalizeElements(int, unsigned long*, v8::internal::Isolate*)",93957339934064,93957339934756],["v8::internal::Stats_Runtime_ArraySpeciesConstructor(int, unsigned long*, v8::internal::Isolate*)",93957339937760,93957339938298],["v8::internal::Runtime_AtomicsLoad64(int, unsigned long*, v8::internal::Isolate*)",93957339946944,93957339946981],["v8::internal::Runtime_AtomicsExchange(int, unsigned long*, v8::internal::Isolate*)",93957339947776,93957339947813],["v8::internal::Runtime_AtomicsAdd(int, unsigned long*, v8::internal::Isolate*)",93957339948608,93957339948645],["v8::internal::Runtime_AtomicsAnd(int, unsigned long*, v8::internal::Isolate*)",93957339949440,93957339949477],["v8::internal::Stats_Runtime_AtomicsOr(int, unsigned long*, v8::internal::Isolate*)",93957339949904,93957339950258],["v8::internal::Stats_Runtime_AtomicsXor(int, unsigned long*, v8::internal::Isolate*)",93957339950320,93957339950674],["v8::internal::Stats_Runtime_BigIntCompareToBigInt(int, unsigned long*, v8::internal::Isolate*)",93957339950912,93957339951553],["v8::internal::Stats_Runtime_BigIntCompareToNumber(int, unsigned long*, v8::internal::Isolate*)",93957339951744,93957339952322],["v8::internal::Stats_Runtime_BigIntCompareToString(int, unsigned long*, v8::internal::Isolate*)",93957339952704,93957339953440],["v8::internal::Stats_Runtime_BigIntEqualToBigInt(int, unsigned long*, v8::internal::Isolate*)",93957339953616,93957339954202],["v8::internal::Stats_Runtime_BigIntEqualToNumber(int, unsigned long*, v8::internal::Isolate*)",93957339954336,93957339954865],["v8::internal::Stats_Runtime_BigIntEqualToString(int, unsigned long*, v8::internal::Isolate*)",93957339955184,93957339955871],["v8::internal::Stats_Runtime_ResolvePossiblyDirectEval(int, unsigned long*, v8::internal::Isolate*)",93957340011008,93957340012119],["v8::internal::CodeTracer::CloseFile()",93957340012624,93957340012691],["v8::internal::Stats_Runtime_DebugBreakAtEntry(int, unsigned long*, v8::internal::Isolate*)",93957340015984,93957340016758],["v8::internal::Handle<v8::internal::String> v8::internal::Factory::NewStringFromStaticChars<17ul>(char const (&) [17ul], v8::internal::AllocationType)",93957340024368,93957340024429],["v8::internal::Runtime_SetGeneratorScopeVariableValue(int, unsigned long*, v8::internal::Isolate*)",93957340027840,93957340028624],["v8::internal::Runtime_DebugGetLoadedScriptIds(int, unsigned long*, v8::internal::Isolate*)",93957340032928,93957340033352],["v8::internal::Runtime_ScriptLocationFromLine2(int, unsigned long*, v8::internal::Isolate*)",93957340035680,93957340038455],["v8::internal::Runtime_DebugPrepareStepInSuspendedGenerator(int, unsigned long*, v8::internal::Isolate*)",93957340042528,93957340042666],["v8::internal::Runtime_DebugPopPromise(int, unsigned long*, v8::internal::Isolate*)",93957340044000,93957340044058],["v8::internal::Runtime_DebugTogglePreciseCoverage(int, unsigned long*, v8::internal::Isolate*)",93957340050704,93957340050839],["v8::internal::Runtime_IncBlockCounter(int, unsigned long*, v8::internal::Isolate*)",93957340052080,93957340052117],["v8::internal::Runtime_DebugAsyncFunctionSuspended(int, unsigned long*, v8::internal::Isolate*)",93957340053392,93957340053611],["v8::internal::Runtime_DebugAsyncFunctionFinished(int, unsigned long*, v8::internal::Isolate*)",93957340055040,93957340055377],["v8::internal::Runtime_ProfileCreateSnapshotDataBlob(int, unsigned long*, v8::internal::Isolate*)",93957340057856,93957340058073],["v8::internal::Runtime_ForInEnumerate(int, unsigned long*, v8::internal::Isolate*)",93957340058688,93957340059108],["v8::internal::Runtime_ForInHasProperty(int, unsigned long*, v8::internal::Isolate*)",93957340059968,93957340060217],["v8::internal::(anonymous namespace)::HasEnumerableProperty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::Object>)",93957340060880,93957340061335],["v8::internal::Stats_Runtime_FunctionGetScriptSource(int, unsigned long*, v8::internal::Isolate*)",93957340061744,93957340062507],["v8::internal::Stats_Runtime_FunctionGetScriptId(int, unsigned long*, v8::internal::Isolate*)",93957340062928,93957340063702],["v8::internal::Stats_Runtime_FunctionGetSourceCode(int, unsigned long*, v8::internal::Isolate*)",93957340064032,93957340064736],["v8::internal::Stats_Runtime_FunctionGetScriptSourcePosition(int, unsigned long*, v8::internal::Isolate*)",93957340064864,93957340065376],["v8::internal::Stats_Runtime_FunctionIsAPIFunction(int, unsigned long*, v8::internal::Isolate*)",93957340065552,93957340066148],["v8::internal::Stats_Runtime_Call(int, unsigned long*, v8::internal::Isolate*)",93957340066992,93957340068185],["v8::internal::Stats_Runtime_IsFunction(int, unsigned long*, v8::internal::Isolate*)",93957340068304,93957340068874],["v8::internal::Stats_Runtime_AtomicsNumWaitersForTesting(int, unsigned long*, v8::internal::Isolate*)",93957340069488,93957340070460],["v8::internal::Stats_Runtime_AtomicsNumAsyncWaitersForTesting(int, unsigned long*, v8::internal::Isolate*)",93957340070496,93957340070930],["v8::internal::Stats_Runtime_AtomicsNumUnresolvedAsyncPromisesForTesting(int, unsigned long*, v8::internal::Isolate*)",93957340071552,93957340072524],["v8::internal::Stats_Runtime_SetAllowAtomicsWait(int, unsigned long*, v8::internal::Isolate*)",93957340072688,93957340073283],["v8::internal::Stats_Runtime_AsyncFunctionAwaitCaught(int, unsigned long*, v8::internal::Isolate*)",93957340073344,93957340073698],["v8::internal::Stats_Runtime_AsyncFunctionAwaitUncaught(int, unsigned long*, v8::internal::Isolate*)",93957340073760,93957340074114],["v8::internal::Runtime_ThrowSpreadArgError(int, unsigned long*, v8::internal::Isolate*)",93957340112240,93957340112412],["v8::internal::Runtime_StringToNumber(int, unsigned long*, v8::internal::Isolate*)",93957340158016,93957340158205],["v8::internal::Runtime_ObjectIsExtensible(int, unsigned long*, v8::internal::Isolate*)",93957340182240,93957340182460],["v8::internal::Runtime_NewObject(int, unsigned long*, v8::internal::Isolate*)",93957340199152,93957340199433],["v8::internal::Runtime_CopyDataProperties(int, unsigned long*, v8::internal::Isolate*)",93957340213728,93957340213980],["v8::internal::Runtime_ToName(int, unsigned long*, v8::internal::Isolate*)",93957340222624,93957340222809],["v8::internal::Runtime_CreatePrivateAccessors(int, unsigned long*, v8::internal::Isolate*)",93957340229664,93957340230152],["v8::internal::Runtime_SwissTableEquals(int, unsigned long*, v8::internal::Isolate*)",93957340239680,93957340239965],["v8::internal::Runtime_Add(int, unsigned long*, v8::internal::Isolate*)",93957340244288,93957340244436],["v8::internal::Runtime_StrictNotEqual(int, unsigned long*, v8::internal::Isolate*)",93957340247088,93957340247162],["v8::internal::Runtime_LessThanOrEqual(int, unsigned long*, v8::internal::Isolate*)",93957340249776,93957340249976],["v8::internal::Runtime_PromiseResolveAfterResolved(int, unsigned long*, v8::internal::Isolate*)",93957340253248,93957340253454],["v8::internal::Runtime_RunMicrotaskCallback(int, unsigned long*, v8::internal::Isolate*)",93957340256736,93957340256947],["v8::internal::Runtime_AwaitPromisesInit(int, unsigned long*, v8::internal::Isolate*)",93957340259872,93957340260288],["v8::internal::Runtime_RejectPromise(int, unsigned long*, v8::internal::Isolate*)",93957340264368,93957340264672],["v8::internal::(anonymous namespace)::AwaitPromisesInitCommon(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::JSPromise>, v8::internal::Handle<v8::internal::JSPromise>, v8::internal::Handle<v8::internal::JSFunction>, bool)",93957340268432,93957340268734],["v8::internal::Stats_Runtime_JSProxyGetTarget(int, unsigned long*, v8::internal::Isolate*)",93957340270144,93957340270659],["v8::internal::Stats_Runtime_SetPropertyWithReceiver(int, unsigned long*, v8::internal::Isolate*)",93957340272096,93957340272834],["v8::internal::Stats_Runtime_CheckProxyHasTrapResult(int, unsigned long*, v8::internal::Isolate*)",93957340274352,93957340275046],["bool v8::internal::CompiledReplacement::ParseReplacementPattern<unsigned char const>(v8::internal::Vector<unsigned char const>, v8::internal::FixedArray, int, int)",93957340276496,93957340278595],["v8::internal::Runtime_StringSplit(int, unsigned long*, v8::internal::Isolate*)",93957340282928,93957340284923],["v8::internal::Runtime_RegExpExecTreatMatchAtEndAsFailure(int, unsigned long*, v8::internal::Isolate*)",93957340289056,93957340289709],["v8::internal::Runtime_RegExpExperimentalOneshotExecTreatMatchAtEndAsFailure(int, unsigned long*, v8::internal::Isolate*)",93957340292448,93957340293101],["v8::internal::Runtime_RegExpExecMultiple(int, unsigned long*, v8::internal::Isolate*)",93957340294960,93957340299992],["v8::internal::Runtime_RegExpSplit(int, unsigned long*, v8::internal::Isolate*)",93957340310288,93957340313218],["v8::internal::Runtime_RegExpInitializeAndCompile(int, unsigned long*, v8::internal::Isolate*)",93957340335632,93957340335981],["v8::internal::(anonymous namespace)::ConstructNamedCaptureGroupsObject(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FixedArray>, std::__1::function<v8::internal::Object (int)> const&)",93957340337408,93957340337731],["v8::internal::Object::ToObject(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, char const*)",93957340337872,93957340337925],["v8::internal::(anonymous namespace)::MatchInfoBackedMatch::CaptureCount()",93957340338064,93957340338091],["v8::internal::Object v8::internal::StringReplaceGlobalAtomRegExpWithString<v8::internal::SeqOneByteString>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::JSRegExp>, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::RegExpMatchInfo>)",93957340338752,93957340339438],["uhash_count_68",93957340340224,93957340340233],["bool std::__1::__function::__policy_invoker<bool (v8::internal::String)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::CompiledReplacement::ParseReplacementPattern<unsigned char const>(v8::internal::Vector<unsigned char const>, v8::internal::FixedArray, int, int)::{lambda(v8::internal::String)#1}, bool (v8::internal::String)> >(std::__1::__function::__policy_storage const*, v8::internal::String&&)",93957340340688,93957340340821],["v8::internal::Stats_Runtime_ThrowConstAssignError(int, unsigned long*, v8::internal::Isolate*)",93957340341136,93957340341660],["v8::internal::Stats_Runtime_DeclareModuleExports(int, unsigned long*, v8::internal::Isolate*)",93957340343248,93957340345198],["v8::internal::Stats_Runtime_DeclareGlobals(int, unsigned long*, v8::internal::Isolate*)",93957340347040,93957340349265],["v8::internal::Stats_Runtime_DeclareEvalFunction(int, unsigned long*, v8::internal::Isolate*)",93957340349488,93957340350079],["v8::internal::Stats_Runtime_DeclareEvalVar(int, unsigned long*, v8::internal::Isolate*)",93957340350288,93957340350882],["v8::internal::Stats_Runtime_NewSloppyArguments(int, unsigned long*, v8::internal::Isolate*)",93957340352928,93957340355392],["v8::internal::Stats_Runtime_NewStrictArguments(int, unsigned long*, v8::internal::Isolate*)",93957340356112,93957340357215],["v8::internal::Stats_Runtime_NewRestParameter(int, unsigned long*, v8::internal::Isolate*)",93957340357872,93957340358922],["v8::internal::Stats_Runtime_NewClosure(int, unsigned long*, v8::internal::Isolate*)",93957340359360,93957340360175],["v8::internal::Stats_Runtime_NewClosure_Tenured(int, unsigned long*, v8::internal::Isolate*)",93957340360608,93957340361423],["v8::internal::Stats_Runtime_NewFunctionContext(int, unsigned long*, v8::internal::Isolate*)",93957340361728,93957340362384],["v8::internal::Stats_Runtime_PushWithContext(int, unsigned long*, v8::internal::Isolate*)",93957340362768,93957340363515],["v8::internal::Stats_Runtime_PushCatchContext(int, unsigned long*, v8::internal::Isolate*)",93957340363840,93957340364524],["v8::internal::Stats_Runtime_PushBlockContext(int, unsigned long*, v8::internal::Isolate*)",93957340364832,93957340365488],["v8::internal::Stats_Runtime_DeleteLookupSlot(int, unsigned long*, v8::internal::Isolate*)",93957340365984,93957340366844],["v8::internal::Stats_Runtime_LoadLookupSlot(int, unsigned long*, v8::internal::Isolate*)",93957340367056,93957340367661],["v8::internal::Stats_Runtime_LoadLookupSlotInsideTypeof(int, unsigned long*, v8::internal::Isolate*)",93957340367888,93957340368496],["v8::internal::Stats_Runtime_LoadLookupSlotForCall(int, unsigned long*, v8::internal::Isolate*)",93957340368704,93957340369277],["v8::internal::Stats_Runtime_StoreLookupSlot_Sloppy(int, unsigned long*, v8::internal::Isolate*)",93957340369616,93957340370312],["v8::internal::Stats_Runtime_StoreLookupSlot_Strict(int, unsigned long*, v8::internal::Isolate*)",93957340370656,93957340371355],["v8::internal::Stats_Runtime_StoreLookupSlot_SloppyHoisting(int, unsigned long*, v8::internal::Isolate*)",93957340371712,93957340372423],["v8::internal::Stats_Runtime_StoreGlobalNoHoleCheckForReplLet(int, unsigned long*, v8::internal::Isolate*)",93957340373088,93957340374106],["v8::internal::(anonymous namespace)::DeclareEvalHelper(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object>)",93957340374864,93957340376121],["v8::internal::(anonymous namespace)::LoadLookupSlot(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, v8::internal::ShouldThrow, v8::internal::Handle<v8::internal::Object>*)",93957340377344,93957340378196],["v8::internal::Runtime_GetSubstitution(int, unsigned long*, v8::internal::Isolate*)",93957340378800,93957340379359],["v8::internal::StringReplaceOneCharWithString(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String>, bool*, int)",93957340380320,93957340380909],["v8::internal::Stats_Runtime_StringReplaceOneCharWithString(int, unsigned long*, v8::internal::Isolate*)",93957340381408,93957340382252],["v8::internal::Stats_Runtime_StringLastIndexOf(int, unsigned long*, v8::internal::Isolate*)",93957340382400,93957340382935],["v8::internal::Stats_Runtime_StringSubstring(int, unsigned long*, v8::internal::Isolate*)",93957340383488,93957340384387],["v8::internal::Stats_Runtime_StringAdd(int, unsigned long*, v8::internal::Isolate*)",93957340384784,93957340385530],["v8::internal::Stats_Runtime_InternalizeString(int, unsigned long*, v8::internal::Isolate*)",93957340385760,93957340386373],["v8::internal::Stats_Runtime_StringCharCodeAt(int, unsigned long*, v8::internal::Isolate*)",93957340386960,93957340387927],["void std::__1::vector<v8::internal::Handle<v8::internal::HeapObject>, std::__1::allocator<v8::internal::Handle<v8::internal::HeapObject> > >::__push_back_slow_path<v8::internal::Handle<v8::internal::HeapObject> >(v8::internal::Handle<v8::internal::HeapObject>&&)",93957340534592,93957340534854],["std::__1::unique_ptr<v8::internal::BackingStore, std::__1::default_delete<v8::internal::BackingStore> >::~unique_ptr()",93957340535456,93957340535506],["v8::internal::InstructionStream::PcIsOffHeap(v8::internal::Isolate*, unsigned long)",93957340536736,93957340536884],["v8::internal::EmbeddedData::PrintStatistics() const",93957340539360,93957340539638],["v8::internal::EmbeddedData::MetadataSizeOfBuiltin(int) const",93957340539744,93957340539765],["v8::internal::ObjectDeserializer::Deserialize()",93957340540272,93957340540574],["v8::internal::ReadOnlySerializer::ReadOnlySerializer(v8::internal::Isolate*, v8::base::Flags<v8::internal::Snapshot::SerializerFlag, int>)",93957340541712,93957340541745],["v8::internal::Serializer::Serializer(v8::internal::Isolate*, v8::base::Flags<v8::internal::Snapshot::SerializerFlag, int>)",93957340544336,93957340544722],["v8::internal::Serializer::ObjectSerializer::VisitExternalReference(v8::internal::Code, v8::internal::RelocInfo*)",93957340557040,93957340557118],["v8::internal::Snapshot::NewContextFromSnapshot(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSGlobalProxy>, unsigned long, v8::DeserializeInternalFieldsCallback)",93957340564768,93957340565394],["v8::internal::StartupSerializer::SerializeStrongReferences(v8::internal::CombinationAssertScope<v8::internal::PerThreadAssertScopeDebugOnly<(v8::internal::PerThreadAssertType)0, false>, v8::internal::PerThreadAssertScopeDebugOnly<(v8::internal::PerThreadAssertType)1, false> > const&)",93957340574160,93957340574333],["void v8::internal::StringBuilderConcatHelper<unsigned char>(v8::internal::String, unsigned char*, v8::internal::FixedArray, int)",93957340575952,93957340576140],["v8::internal::ReplacementStringBuilder::ReplacementStringBuilder(v8::internal::Heap*, v8::internal::Handle<v8::internal::String>, int)",93957340576976,93957340577071],["v8::internal::IncrementalStringBuilder::Finish()",93957340578432,93957340578609],["v8::internal::StringStream::Add(v8::internal::Vector<char const>, v8::internal::Vector<v8::internal::StringStream::FmtElm>)",93957340580080,93957340581948],["v8::internal::StringStream::Put(v8::internal::String)",93957340582880,93957340582895],["v8::internal::StringStream::PrintFixedArray(v8::internal::FixedArray, unsigned int)",93957340584704,93957340585098],["v8::internal::StringStream::PrintFunction(v8::internal::JSFunction, v8::internal::Object, v8::internal::Code*)",93957340586128,93957340586173],["v8::internal::HeapStringAllocator::~HeapStringAllocator()",93957340587792,93957340587839],["unibrow::Utf8::CalculateValue(unsigned char const*, unsigned long, unsigned long*)",93957340589040,93957340589226],["v8::internal::Uri::Decode(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, bool)",93957340589376,93957340591365],["v8::internal::(anonymous namespace)::IntoTwoByte(int, bool, int, v8::internal::String::FlatContent*, std::__1::vector<unsigned short, std::__1::allocator<unsigned short> >*)",93957340596352,93957340598985],["v8::internal::CancelableTaskManager::RemoveFinishedTask(unsigned long)",93957340599904,93957340600423],["v8::internal::CancelableTaskManager::~CancelableTaskManager()",93957340600592,93957340600708],["v8::internal::CancelableTaskManager::CancelAndWait()",93957340601280,93957340601994],["v8::internal::CancelableTask::CancelableTask(v8::internal::Isolate*)",93957340602240,93957340602445],["v8::internal::CancelableIdleTask::CancelableIdleTask(v8::internal::CancelableTaskManager*)",93957340602656,93957340602857],["v8::internal::CancelableIdleTask::Run(double)",93957340602928,93957340602958],["v8::internal::OperationsBarrier::TryLock()",93957340603008,93957340603066],["v8::internal::OperationsBarrier::Release()",93957340603136,93957340603186],["v8::internal::MakeCancelableTask(v8::internal::CancelableTaskManager*, std::__1::function<void ()>)",93957340603392,93957340603574],["v8::internal::(anonymous namespace)::CancelableFuncTask::~CancelableFuncTask()",93957340603776,93957340603839],["v8::internal::(anonymous namespace)::CancelableFuncTask::RunInternal()",93957340603920,93957340603935],["non-virtual thunk to v8::internal::(anonymous namespace)::CancelableFuncTask::~CancelableFuncTask()",93957340604000,93957340604072],["v8::internal::(anonymous namespace)::CancelableIdleFuncTask::~CancelableIdleFuncTask()",93957340604144,93957340604215],["non-virtual thunk to v8::internal::(anonymous namespace)::CancelableIdleFuncTask::~CancelableIdleFuncTask()",93957340604240,93957340604304],["v8::internal::tracing::TraceEventHelper::GetTracingController()",93957340604384,93957340604406],["v8::internal::tracing::CallStatsScopedTracer::Initialize(v8::internal::Isolate*, unsigned char const*, char const*)",93957340604784,93957340605014],["v8::tracing::TracedValue::~TracedValue()",93957340605072,93957340605104],["v8_inspector::V8Debugger::asyncTaskFinished(void*)",93957342547808,93957342548036],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8_inspector::V8DebuggerAgentImpl*, int>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8_inspector::V8DebuggerAgentImpl*, int>, std::__1::__unordered_map_hasher<v8_inspector::V8DebuggerAgentImpl*, std::__1::__hash_value_type<v8_inspector::V8DebuggerAgentImpl*, int>, std::__1::hash<v8_inspector::V8DebuggerAgentImpl*>, std::__1::equal_to<v8_inspector::V8DebuggerAgentImpl*>, true>, std::__1::__unordered_map_equal<v8_inspector::V8DebuggerAgentImpl*, std::__1::__hash_value_type<v8_inspector::V8DebuggerAgentImpl*, int>, std::__1::equal_to<v8_inspector::V8DebuggerAgentImpl*>, std::__1::hash<v8_inspector::V8DebuggerAgentImpl*>, true>, std::__1::allocator<std::__1::__hash_value_type<v8_inspector::V8DebuggerAgentImpl*, int> > >::__emplace_unique_key_args<v8_inspector::V8DebuggerAgentImpl*, std::__1::piecewise_construct_t const&, std::__1::tuple<v8_inspector::V8DebuggerAgentImpl* const&>, std::__1::tuple<> >(v8_inspector::V8DebuggerAgentImpl* const&, std::__1::piecewise_construct_t const&, std::__1::tuple<v8_inspector::V8DebuggerAgentImpl* const&>&&, std::__1::tuple<>&&)",93957342548848,93957342549729],["std::__1::__shared_ptr_emplace<v8_inspector::StackFrame, std::__1::allocator<v8_inspector::StackFrame> >::~__shared_ptr_emplace()",93957342551360,93957342551398],["v8_inspector::V8HeapProfilerAgentImpl::~V8HeapProfilerAgentImpl()",93957342552576,93957342552769],["v8_inspector::V8HeapProfilerAgentImpl::collectGarbage(std::__1::unique_ptr<v8_inspector::protocol::HeapProfiler::Backend::CollectGarbageCallback, std::__1::default_delete<v8_inspector::protocol::HeapProfiler::Backend::CollectGarbageCallback> >)",93957342553472,93957342553836],["v8_inspector::V8HeapProfilerAgentImpl::stopTrackingHeapObjects(v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<bool>)",93957342554096,93957342554305],["v8_inspector::V8HeapProfilerAgentImpl::enable()",93957342554512,93957342554604],["v8_inspector::V8HeapProfilerAgentImpl::takeHeapSnapshot(v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<bool>)",93957342554832,93957342555382],["v8_crdtp::CreateNotification(char const*, std::__1::unique_ptr<v8_crdtp::Serializable, std::__1::default_delete<v8_crdtp::Serializable> >)",93957342757264,93957342757310],["v8_crdtp::(anonymous namespace)::Response::~Response()",93957342763760,93957342763803],["std::__1::__split_buffer<std::__1::pair<v8_crdtp::span<unsigned char>, std::__1::unique_ptr<v8_crdtp::DomainDispatcher, std::__1::default_delete<v8_crdtp::DomainDispatcher> > >, std::__1::allocator<std::__1::pair<v8_crdtp::span<unsigned char>, std::__1::unique_ptr<v8_crdtp::DomainDispatcher, std::__1::default_delete<v8_crdtp::DomainDispatcher> > > >&>::push_back(std::__1::pair<v8_crdtp::span<unsigned char>, std::__1::unique_ptr<v8_crdtp::DomainDispatcher, std::__1::default_delete<v8_crdtp::DomainDispatcher> > >&&)",93957342767008,93957342767671],["v8_crdtp::json::(anonymous namespace)::JSONEncoder<std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > >::~JSONEncoder()",93957342773600,93957342773624],["v8_crdtp::json::(anonymous namespace)::JSONEncoder<std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > >::HandleString8(v8_crdtp::span<unsigned char>)",93957342774192,93957342778868],["v8_crdtp::json::(anonymous namespace)::JSONEncoder<std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > >::HandleInt32(int)",93957342783632,93957342783786],["v8_crdtp::json::(anonymous namespace)::State::StartElement(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*)",93957342784080,93957342784347],["v8_crdtp::json::(anonymous namespace)::JsonParser<unsigned char>::ParseValue(unsigned char const*, unsigned char const*, unsigned char const**, int)",93957342789104,93957342790789],["v8_crdtp::json::(anonymous namespace)::JsonParser<unsigned short>::ParseValue(unsigned short const*, unsigned short const*, unsigned short const**, int)",93957342793872,93957342795644],["v8_crdtp::json::(anonymous namespace)::JsonParser<unsigned short>::DecodeString(unsigned short const*, unsigned short const*, std::__1::vector<unsigned short, std::__1::allocator<unsigned short> >*)",93957342797232,93957342798295],["v8_crdtp::DeserializerState::RegisterError(v8_crdtp::Error)",93957342798480,93957342798539],["v8_crdtp::DeserializerState::status() const",93957342798928,93957342798979],["v8_crdtp::DeserializerDescriptor::Deserialize(v8_crdtp::DeserializerState*, void*) const",93957342799152,93957342799596],["v8_crdtp::ProtocolTypeTraits<bool, void>::Deserialize(v8_crdtp::DeserializerState*, bool*)",93957342799904,93957342800003],["v8_crdtp::ProtocolTypeTraits<int, void>::Deserialize(v8_crdtp::DeserializerState*, int*)",93957342800272,93957342800371],["v8_crdtp::ContainerSerializer::ContainerSerializer(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*, unsigned char)",93957342800400,93957342800650],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::PrintableInstructionBlock const&)",93957342990816,93957342992809],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::InstructionSequence const&)",93957343002384,93957343002936],["v8::internal::compiler::RegisterState::Register::Commit(v8::internal::compiler::AllocatedOperand, v8::internal::compiler::MidTierRegisterAllocationData*)",93957343012368,93957343012806],["v8::internal::compiler::SinglePassRegisterAllocator::MergeStateFrom(v8::internal::ZoneVector<v8::internal::compiler::RpoNumber> const&)",93957343015888,93957343017528],["v8::internal::compiler::SinglePassRegisterAllocator::SpillRegister(v8::internal::compiler::RegisterIndex)",93957343019328,93957343019563],["v8::internal::compiler::SinglePassRegisterAllocator::AllocateGapMoveInput(v8::internal::compiler::UnallocatedOperand*, v8::internal::compiler::VirtualRegisterData&, int)",93957343022160,93957343022839],["v8::internal::compiler::SinglePassRegisterAllocator::AllocateTemp(v8::internal::compiler::UnallocatedOperand*, int, v8::internal::MachineRepresentation, int)",93957343025792,93957343026671],["v8::internal::compiler::MidTierOutputProcessor::InitializeBlockState(v8::internal::compiler::InstructionBlock const*)",93957343030688,93957343031028],["v8::internal::compiler::MidTierRegisterAllocator::AllocateRegisters(v8::internal::compiler::InstructionBlock const*)",93957343033104,93957343036584],["v8::internal::compiler::MidTierRegisterAllocator::UpdateSpillRangesForLoops()",93957343037344,93957343038194],["v8::internal::compiler::MidTierSpillSlotAllocator::AdvanceTo(int)",93957343038496,93957343038935],["std::__1::priority_queue<v8::internal::compiler::MidTierSpillSlotAllocator::SpillSlot*, v8::internal::ZoneVector<v8::internal::compiler::MidTierSpillSlotAllocator::SpillSlot*>, v8::internal::compiler::MidTierSpillSlotAllocator::OrderByLastUse>::push(v8::internal::compiler::MidTierSpillSlotAllocator::SpillSlot* const&)",93957343039440,93957343040242],["v8::internal::compiler::MidTierReferenceMapPopulator::RecordReferences(v8::internal::compiler::VirtualRegisterData const&)",93957343041728,93957343042163],["v8::internal::compiler::ParallelMove::AddMove(v8::internal::compiler::InstructionOperand const&, v8::internal::compiler::InstructionOperand const&, v8::internal::Zone*)",93957343042592,93957343043830],["void std::__1::__sort<v8::internal::compiler::AllocateSpillSlots(v8::internal::compiler::MidTierRegisterAllocationData*)::$_0&, v8::internal::compiler::VirtualRegisterData**>(v8::internal::compiler::VirtualRegisterData**, v8::internal::compiler::VirtualRegisterData**, v8::internal::compiler::AllocateSpillSlots(v8::internal::compiler::MidTierRegisterAllocationData*)::$_0&)",93957343044400,93957343046106],["bool std::__1::__insertion_sort_incomplete<v8::internal::compiler::AllocateSpillSlots(v8::internal::compiler::MidTierRegisterAllocationData*)::$_0&, v8::internal::compiler::VirtualRegisterData**>(v8::internal::compiler::VirtualRegisterData**, v8::internal::compiler::VirtualRegisterData**, v8::internal::compiler::AllocateSpillSlots(v8::internal::compiler::MidTierRegisterAllocationData*)::$_0&)",93957343046384,93957343047172],["v8::internal::compiler::BytecodeAnalysis::PushLoop(int, int)",93957343195344,93957343196145],["v8::internal::compiler::BytecodeGraphBuilder::VisitLdaFalse()",93957343224096,93957343224165],["v8::internal::compiler::BytecodeGraphBuilder::VisitStaKeyedProperty()",93957343230832,93957343231491],["v8::internal::compiler::BytecodeGraphBuilder::VisitAddSmi()",93957343234608,93957343234708],["v8::internal::compiler::BytecodeGraphBuilder::VisitInc()",93957343235952,93957343236049],["v8::internal::compiler::BytecodeGraphBuilder::VisitCallAnyReceiver()",93957343237056,93957343237376],["v8::internal::compiler::BytecodeGraphBuilder::VisitCallUndefinedReceiver2()",93957343238960,93957343239177],["v8::internal::compiler::BytecodeGraphBuilder::VisitConstructWithSpread()",93957343244000,93957343244819],["v8::internal::compiler::BytecodeGraphBuilder::VisitTestGreaterThanOrEqual()",93957343245392,93957343245492],["v8::internal::compiler::BytecodeGraphBuilder::VisitTestUndetectable()",93957343246176,93957343246321],["v8::internal::compiler::BytecodeGraphBuilder::VisitToName()",93957343247584,93957343247737],["v8::internal::compiler::BytecodeGraphBuilder::VisitToString()",93957343248608,93957343248728],["v8::internal::compiler::BytecodeGraphBuilder::VisitCreateEmptyArrayLiteral()",93957343249456,93957343249620],["v8::internal::compiler::BytecodeGraphBuilder::VisitGetTemplateObject()",93957343250368,93957343250672],["v8::internal::compiler::BytecodeGraphBuilder::VisitCreateFunctionContext()",93957343251488,93957343251727],["v8::internal::compiler::BytecodeGraphBuilder::VisitJumpIfNotNull()",93957343252384,93957343252525],["v8::internal::compiler::BytecodeGraphBuilder::VisitJumpIfUndefinedOrNull()",93957343252816,93957343253066],["v8::internal::compiler::BytecodeGraphBuilder::VisitJumpIfToBooleanTrue()",93957343253200,93957343253321],["v8::internal::compiler::BytecodeGraphBuilder::VisitSwitchOnSmiNoFeedback()",93957343253456,93957343253754],["v8::internal::compiler::BytecodeGraphBuilder::VisitForInPrepare()",93957343253888,93957343254440],["v8::internal::compiler::BytecodeGraphBuilder::VisitForInNext()",93957343254768,93957343255514],["v8::internal::compiler::BytecodeGraphBuilder::VisitSetPendingMessage()",93957343255792,93957343255974],["v8::internal::compiler::BytecodeGraphBuilder::VisitReThrow()",93957343256864,93957343257722],["v8::internal::compiler::BytecodeGraphBuilder::VisitThrowReferenceErrorIfHole()",93957343257792,93957343258029],["v8::internal::compiler::BytecodeGraphBuilder::VisitThrowSuperAlreadyCalledIfNotHole()",93957343258192,93957343258390],["v8::internal::compiler::BytecodeGraphBuilder::VisitSwitchOnGeneratorState()",93957343259984,93957343260551],["v8::internal::compiler::BytecodeGraphBuilder::VisitResumeGenerator()",93957343261456,93957343262078],["v8::internal::compiler::BytecodeGraphBuilder::VisitDebugger()",93957343262576,93957343262877],["v8::internal::compiler::BytecodeGraphBuilder::VisitAbort()",93957343263088,93957343263905],["v8::internal::compiler::BytecodeGraphBuilder::VisitStar14()",93957343264000,93957343264068],["v8::internal::compiler::BytecodeGraphBuilder::VisitStar12()",93957343264160,93957343264228],["v8::internal::compiler::BytecodeGraphBuilder::VisitStar10()",93957343264320,93957343264388],["v8::internal::compiler::OperationTyper::SpeculativeNumberBitwiseXor(v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344619040,93957344619140],["v8::internal::compiler::PipelineImpl::AssembleCode(v8::internal::compiler::Linkage*, std::__1::unique_ptr<v8::internal::AssemblerBuffer, std::__1::default_delete<v8::internal::AssemblerBuffer> >)",93957344634128,93957344634832],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::TypeAssertionsPhase>()",93957344647104,93957344647489],["v8::internal::compiler::Pipeline::GenerateCodeForWasmNativeStub(v8::internal::wasm::WasmEngine*, v8::internal::compiler::CallDescriptor*, v8::internal::compiler::MachineGraph*, v8::internal::CodeKind, int, char const*, v8::internal::AssemblerOptions const&, v8::internal::compiler::SourcePositionTable*)",93957344657072,93957344659943],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::InstructionSelectionPhase, v8::internal::compiler::Linkage*&>(v8::internal::compiler::Linkage*&)",93957344669600,93957344670003],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::MeetRegisterConstraintsPhase>()",93957344673168,93957344673563],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::AssignSpillSlotsPhase>()",93957344677280,93957344677675],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::MidTierSpillSlotAllocatorPhase>()",93957344680496,93957344680873],["v8::internal::compiler::WasmHeapStubCompilationJob::WasmHeapStubCompilationJob(v8::internal::Isolate*, v8::internal::wasm::WasmEngine*, v8::internal::compiler::CallDescriptor*, std::__1::unique_ptr<v8::internal::Zone, std::__1::default_delete<v8::internal::Zone> >, v8::internal::compiler::Graph*, v8::internal::CodeKind, std::__1::unique_ptr<char [], std::__1::default_delete<char []> >, v8::internal::AssemblerOptions const&, v8::internal::compiler::SourcePositionTable*)",93957344682864,93957344683258],["v8::internal::compiler::PrintGraphPhase::Run(v8::internal::compiler::PipelineData*, v8::internal::Zone*, char const*)",93957344684896,93957344686478],["v8::internal::compiler::JSInliner::reducer_name() const",93957344689696,93957344689709],["v8::internal::compiler::CopyMetadataForConcurrentCompilePhase::Run(v8::internal::compiler::PipelineData*, v8::internal::Zone*)",93957344690144,93957344690643],["v8::internal::compiler::LoadEliminationPhase::Run(v8::internal::compiler::PipelineData*, v8::internal::Zone*)",93957344694848,93957344697684],["v8::internal::compiler::WasmInliningPhase::Run(v8::internal::compiler::PipelineData*, v8::internal::Zone*)",93957344699712,93957344700857],["v8::internal::compiler::StoreStoreEliminationPhase::Run(v8::internal::compiler::PipelineData*, v8::internal::Zone*)",93957344704080,93957344704305],["v8::internal::compiler::ScheduledMachineLoweringPhase::Run(v8::internal::compiler::PipelineData*, v8::internal::Zone*)",93957344707312,93957344707572],["v8::internal::compiler::WasmBaseOptimizationPhase::Run(v8::internal::compiler::PipelineData*, v8::internal::Zone*)",93957344710096,93957344710514],["v8::internal::compiler::InstructionSelectionPhase::Run(v8::internal::compiler::PipelineData*, v8::internal::Zone*, v8::internal::compiler::Linkage*)",93957344710736,93957344711371],["v8::internal::compiler::PropertyAccessBuilder::TryBuildStringCheck(v8::internal::compiler::JSHeapBroker*, v8::internal::ZoneVector<v8::internal::Handle<v8::internal::Map> > const&, v8::internal::compiler::Node**, v8::internal::compiler::Node**, v8::internal::compiler::Node*)",93957344711520,93957344711816],["v8::internal::compiler::PropertyAccessBuilder::BuildCheckMaps(v8::internal::compiler::Node*, v8::internal::compiler::Node**, v8::internal::compiler::Node*, v8::internal::ZoneVector<v8::internal::Handle<v8::internal::Map> > const&)",93957344712128,93957344712845],["v8::internal::compiler::PropertyAccessBuilder::ConvertRepresentation(v8::internal::Representation)",93957344713248,93957344713289],["v8::internal::compiler::PropertyAccessBuilder::TryFoldLoadConstantDataField(v8::internal::compiler::NameRef const&, v8::internal::compiler::PropertyAccessInfo const&, v8::internal::compiler::Node*)",93957344713712,93957344714397],["v8::internal::compiler::PropertyAccessBuilder::BuildMinimorphicLoadDataField(v8::internal::compiler::NameRef const&, v8::internal::compiler::MinimorphicLoadPropertyAccessInfo const&, v8::internal::compiler::Node*, v8::internal::compiler::Node**, v8::internal::compiler::Node**)",93957344715488,93957344715750],["v8::internal::compiler::RedundancyElimination::RedundancyElimination(v8::internal::compiler::AdvancedReducer::Editor*, v8::internal::Zone*)",93957344716304,93957344716347],["v8::internal::compiler::RedundancyElimination::Reduce(v8::internal::compiler::Node*)",93957344716384,93957344716507],["v8::internal::compiler::RedundancyElimination::ReduceSpeculativeNumberComparison(v8::internal::compiler::Node*)",93957344717024,93957344718051],["v8::internal::compiler::RedundancyElimination::ReduceEffectPhi(v8::internal::compiler::Node*)",93957344718672,93957344719931],["v8::internal::compiler::RedundancyElimination::EffectPathChecks::LookupCheck(v8::internal::compiler::Node*) const",93957344720192,93957344720702],["v8::internal::compiler::RedundancyElimination::reducer_name() const",93957344721008,93957344721021],["v8::internal::compiler::RefsMap::Lookup(unsigned long const&) const",93957344721216,93957344721301],["v8::base::TemplateHashMapImpl<unsigned long, v8::internal::compiler::ObjectData*, v8::internal::compiler::AddressMatcher, v8::internal::ZoneAllocationPolicy>::Resize()",93957344721520,93957344721899],["v8::internal::compiler::Truncation::Generalize(v8::internal::compiler::Truncation::TruncationKind, v8::internal::compiler::Truncation::TruncationKind)",93957344722048,93957344722297],["v8::internal::compiler::SimplifiedOperatorBuilder::SpeculativeNumberModulus(v8::internal::compiler::NumberOperationHint)",93957345053776,93957345053858],["v8::internal::compiler::StateValuesAccess::size() const",93957345091600,93957345091810],["v8::internal::compiler::Typer::Visitor::Decrement(v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345128432,93957345128535],["v8::internal::compiler::Typer::Visitor::JSBitwiseXorTyper(v8::internal::compiler::Type, v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345133360,93957345133584],["v8::internal::compiler::Typer::Visitor::TypeInductionVariablePhi(v8::internal::compiler::Node*)",93957345139520,93957345141207],["v8::internal::compiler::Typer::Visitor::TypeLoadTypedElement(v8::internal::compiler::Node*)",93957345143072,93957345143273],["v8::internal::compiler::Type::BitsetGlb() const",93957345146656,93957345146972],["v8::internal::compiler::Type::Constant(double, v8::internal::Zone*)",93957345151936,93957345152325],["v8::internal::compiler::ValueNumberingReducer::Grow()",93957345157440,93957345157718],["v8::internal::compiler::Type::Equals(v8::internal::compiler::Type) const",93957345168144,93957345168220],["v8::internal::compiler::ZoneStats::StatsScope::ZoneReturned(v8::internal::Zone*)",93957345176928,93957345177351],["v8::internal::compiler::Int64Lowering::LowerNode(v8::internal::compiler::Node*)",93957345179232,93957345192473],["v8::internal::compiler::Int64Lowering::LowerStoreOperator(v8::internal::compiler::Node*, v8::internal::MachineRepresentation, v8::internal::compiler::Operator const*)",93957345195968,93957345197193],["v8::internal::compiler::SimdScalarLowering::SetLoweredType(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957345217072,93957345217305],["v8::internal::compiler::SimdScalarLowering::LowerLoadTransformOp(v8::internal::compiler::Node*, v8::internal::compiler::SimdScalarLowering::SimdType)",93957345221264,93957345222992],["v8::internal::compiler::SimdScalarLowering::LowerSaturateBinaryOp(v8::internal::compiler::Node*, v8::internal::compiler::SimdScalarLowering::SimdType, v8::internal::compiler::Operator const*, bool)",93957345230416,93957345231969],["v8::internal::compiler::SimdScalarLowering::LowerPack(v8::internal::compiler::Node*, v8::internal::compiler::SimdScalarLowering::SimdType, v8::internal::compiler::SimdScalarLowering::SimdType, bool)",93957345236336,93957345237504],["v8::internal::compiler::SimdScalarLowering::LowerAllTrueOp(v8::internal::compiler::Node*, v8::internal::compiler::SimdScalarLowering::SimdType)",93957345240672,93957345241418],["v8::internal::compiler::SimdScalarLowering::Int32ToFloat32(v8::internal::compiler::Node**, v8::internal::compiler::Node**)",93957345243264,93957345243588],["v8::internal::compiler::SimdScalarLowering::Int64ToInt32(v8::internal::compiler::Node**, v8::internal::compiler::Node**)",93957345244288,93957345244832],["void v8::internal::compiler::SimdScalarLowering::Int32ToSmallerInt<short>(v8::internal::compiler::Node**, v8::internal::compiler::Node**)",93957345246816,93957345247826],["v8::internal::compiler::WasmGraphBuilder::Param(int, char const*)",93957345248928,93957345249043],["v8::internal::compiler::WasmGraphBuilder::control()",93957345249456,93957345249469],["v8::internal::compiler::WasmGraphBuilder::TerminateThrow(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957345249600,93957345249759],["v8::internal::compiler::WasmGraphBuilder::Phi(v8::internal::wasm::ValueType, unsigned int, v8::internal::compiler::Node**)",93957345250096,93957345250173],["v8::internal::compiler::WasmGraphBuilder::RefFunc(unsigned int)",93957345250592,93957345250768],["v8::internal::compiler::WasmGraphAssembler::LoadFunctionDataFromJSFunction(v8::internal::compiler::Node*)",93957345251376,93957345251611],["v8::internal::compiler::WasmGraphBuilder::SetEffect(v8::internal::compiler::Node*)",93957345252448,93957345252479],["v8::internal::compiler::WasmGraphBuilder::BuildI32DivU(v8::internal::compiler::Node*, v8::internal::compiler::Node*, int)",93957345254800,93957345254858],["v8::internal::compiler::WasmGraphBuilder::BuildI32Rol(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957345255600,93957345255950],["v8::internal::compiler::WasmGraphBuilder::BuildI64RemU(v8::internal::compiler::Node*, v8::internal::compiler::Node*, int)",93957345257344,93957345257561],["v8::internal::compiler::WasmGraphBuilder::BuildF64CopySign(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957345258432,93957345258754],["v8::internal::compiler::WasmGraphBuilder::BuildI32AsmjsRemS(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957345260128,93957345262210],["v8::internal::compiler::WasmGraphBuilder::BuildAsmjsStoreMem(v8::internal::MachineType, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957345262592,93957345263033],["v8::internal::compiler::WasmGraphBuilder::BuildIntConvertFloat(v8::internal::compiler::Node*, int, v8::internal::wasm::WasmOpcode)",93957345265072,93957345266934],["v8::internal::compiler::WasmGraphBuilder::BuildI32Ctz(v8::internal::compiler::Node*)",93957345266992,93957345267155],["v8::internal::compiler::WasmGraphBuilder::BuildF32Floor(v8::internal::compiler::Node*)",93957345267344,93957345267388],["v8::internal::compiler::WasmGraphBuilder::BuildF32Trunc(v8::internal::compiler::Node*)",93957345267440,93957345267484],["v8::internal::compiler::WasmGraphBuilder::BuildF64Floor(v8::internal::compiler::Node*)",93957345267536,93957345267580],["v8::internal::compiler::WasmGraphBuilder::BuildF64Trunc(v8::internal::compiler::Node*)",93957345267632,93957345267676],["v8::internal::compiler::WasmGraphBuilder::BuildF64Acos(v8::internal::compiler::Node*)",93957345267728,93957345267772],["v8::internal::compiler::WasmGraphBuilder::BuildI64Ctz(v8::internal::compiler::Node*)",93957345267824,93957345268034],["v8::internal::compiler::WasmGraphBuilder::BuildF32SConvertI64(v8::internal::compiler::Node*)",93957345268272,93957345268319],["v8::internal::compiler::WasmGraphBuilder::BuildF64SConvertI64(v8::internal::compiler::Node*)",93957345268368,93957345268415],["v8::internal::compiler::WasmGraphBuilder::BuildCcallConvertFloat(v8::internal::compiler::Node*, int, v8::internal::wasm::WasmOpcode)",93957345268464,93957345270199],["v8::internal::compiler::WasmGraphBuilder::Float32Constant(float)",93957345270816,93957345270830],["v8::internal::compiler::WasmGraphBuilder::Simd128Constant(unsigned char const*)",93957345270848,93957345270898],["v8::internal::compiler::WasmGraphBuilder::SetControl(v8::internal::compiler::Node*)",93957345271120,93957345271154],["v8::internal::compiler::WasmGraphBuilder::TrapIfEq32(v8::internal::wasm::TrapReason, v8::internal::compiler::Node*, int, int)",93957345271360,93957345271659],["v8::internal::compiler::WasmGraphBuilder::IfValue(int, v8::internal::compiler::Node*)",93957345271760,93957345271830],["v8::internal::compiler::WasmGraphBuilder::Return(v8::internal::Vector<v8::internal::compiler::Node*>)",93957345271920,93957345272291],["v8::internal::compiler::(anonymous namespace)::ConvertTrapTest(v8::internal::compiler::WasmGraphBuilder*, v8::internal::wasm::WasmOpcode, v8::internal::MachineType const&, v8::internal::MachineType const&, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957345272384,93957345272651],["v8::internal::compiler::WasmGraphBuilder::StoreArgsInStackSlot(std::initializer_list<std::__1::pair<v8::internal::MachineRepresentation, v8::internal::compiler::Node*> >)",93957345273152,93957345273455],["v8::internal::compiler::WasmGraphBuilder::BuildIntToFloatConversionInstruction(v8::internal::compiler::Node*, v8::internal::ExternalReference, v8::internal::MachineRepresentation, v8::internal::MachineType)",93957345273760,93957345274146],["v8::internal::compiler::WasmGraphBuilder::Throw(unsigned int, v8::internal::wasm::WasmException const*, v8::internal::Vector<v8::internal::compiler::Node*>, int)",93957345274928,93957345276386],["v8::internal::compiler::WasmGraphBuilder::LoadExceptionTagFromTable(unsigned int)",93957345276848,93957345277091],["v8::internal::compiler::WasmGraphBuilder::BuildDecodeException64BitValue(v8::internal::compiler::Node*, unsigned int*)",93957345277536,93957345277948],["v8::internal::compiler::WasmGraphBuilder::ExceptionTagEqual(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957345278128,93957345278141],["v8::internal::compiler::WasmGraphBuilder::GetExceptionValues(v8::internal::compiler::Node*, v8::internal::wasm::WasmException const*, v8::internal::Vector<v8::internal::compiler::Node*>)",93957345278640,93957345279886],["v8::internal::compiler::WasmGraphBuilder::BuildCallNode(v8::internal::Signature<v8::internal::wasm::ValueType> const*, v8::internal::Vector<v8::internal::compiler::Node*>, int, v8::internal::compiler::Node*, v8::internal::compiler::Operator const*, v8::internal::compiler::Node*)",93957345280224,93957345280693],["v8::internal::compiler::GetWasmCallDescriptor(v8::internal::Zone*, v8::internal::Signature<v8::internal::wasm::ValueType> const*, v8::internal::compiler::WasmGraphBuilder::UseRetpoline, v8::internal::compiler::WasmCallKind, bool)",93957345280976,93957345282022],["v8::internal::compiler::WasmGraphBuilder::BuildImportCall(v8::internal::Signature<v8::internal::wasm::ValueType> const*, v8::internal::Vector<v8::internal::compiler::Node*>, v8::internal::Vector<v8::internal::compiler::Node*>, int, v8::internal::compiler::Node*, v8::internal::compiler::WasmGraphBuilder::IsReturnCall)",93957345282240,93957345282880],["v8::internal::compiler::WasmGraphBuilder::CallDirect(unsigned int, v8::internal::Vector<v8::internal::compiler::Node*>, v8::internal::Vector<v8::internal::compiler::Node*>, int)",93957345283088,93957345283271],["v8::internal::compiler::WasmGraphBuilder::BuildIndirectCall(unsigned int, unsigned int, v8::internal::Vector<v8::internal::compiler::Node*>, v8::internal::Vector<v8::internal::compiler::Node*>, int, v8::internal::compiler::WasmGraphBuilder::IsReturnCall)",93957345283328,93957345284371],["unsigned int std::__1::__sort5<std::__1::__less<unsigned short, unsigned short>&, unsigned short*>(unsigned short*, unsigned short*, unsigned short*, unsigned short*, unsigned short*, std::__1::__less<unsigned short, unsigned short>&)",93957346620880,93957346621197],["void std::__1::__sort<std::__1::__less<int, int>&, int*>(int*, int*, std::__1::__less<int, int>&)",93957346621808,93957346623208],["bool std::__1::__insertion_sort_incomplete<std::__1::__less<int, int>&, int*>(int*, int*, std::__1::__less<int, int>&)",93957346623488,93957346623995],["unsigned int std::__1::__sort5<std::__1::__less<unsigned int, unsigned int>&, unsigned int*>(unsigned int*, unsigned int*, unsigned int*, unsigned int*, unsigned int*, std::__1::__less<unsigned int, unsigned int>&)",93957346625408,93957346625669],["void std::__1::__sort<std::__1::__less<unsigned long, unsigned long>&, unsigned long*>(unsigned long*, unsigned long*, std::__1::__less<unsigned long, unsigned long>&)",93957346626192,93957346627642],["bool std::__1::__insertion_sort_incomplete<std::__1::__less<unsigned long, unsigned long>&, unsigned long*>(unsigned long*, unsigned long*, std::__1::__less<unsigned long, unsigned long>&)",93957346627920,93957346628507],["std::__1::__itoa::__u64toa(unsigned long, char*)",93957346629120,93957346630697],["v8::base::ConditionVariable::NotifyAll()",93957346630720,93957346630730],["v8::base::ConditionVariable::~ConditionVariable()",93957346630816,93957346630826],["std::__1::__next_prime(unsigned long)",93957346630848,93957346634298],["std::overflow_error::overflow_error(char const*)",93957346634384,93957346634419],["std::__1::__iostream_category::message(int) const",93957346634448,93957346634546],["std::__1::ios_base::failure::~failure()",93957346634576,93957346634604],["std::__1::ios_base::getloc() const",93957346634688,93957346634716],["std::__1::ios_base::~ios_base()",93957346634848,93957346634876],["std::__1::__throw_failure(char const*)",93957346634928,93957346635091],["std::__1::basic_filebuf<char, std::__1::char_traits<char> >::basic_filebuf()",93957346645424,93957346645718],["std::__1::basic_istringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_istringstream()",93957346649872,93957346649966],["std::__1::__stdinbuf<char>::imbue(std::__1::locale const&)",93957346652320,93957346652401],["std::__1::__stdinbuf<wchar_t>::uflow()",93957346653216,93957346653231],["std::__1::__stdoutbuf<char>::overflow(int)",93957346654192,93957346654496],["global constructors keyed to 000101",93957346654976,93957346655087],["std::__1::collate<char>::do_transform(char const*, char const*) const",93957346655200,93957346655354],["std::__1::collate<wchar_t>::do_hash(wchar_t const*, wchar_t const*) const",93957346655712,93957346655784],["std::__1::num_get<char, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > >::do_get(std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, unsigned int&, long&) const",93957346657792,93957346657802],["std::__1::num_get<char, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > >::do_get(std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, unsigned int&, long long&) const",93957346658944,93957346658954],["std::__1::num_get<char, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > >::do_get(std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, unsigned int&, unsigned short&) const",93957346660096,93957346660106],["std::__1::num_get<char, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > >::do_get(std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, unsigned int&, unsigned int&) const",93957346661248,93957346661258],["std::__1::num_get<char, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > >::do_get(std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, unsigned int&, unsigned long&) const",93957346662400,93957346662410],["std::__1::num_get<char, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > >::do_get(std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, unsigned int&, unsigned long long&) const",93957346663552,93957346663562],["std::__1::num_get<char, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > >::do_get(std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, unsigned int&, float&) const",93957346664704,93957346664714],["std::__1::num_get<char, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > >::do_get(std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, unsigned int&, double&) const",93957346665984,93957346665994],["seed48",139871563520480,139871563520508],["getentropy",139871563521264,139871563521396],["__strtoul_internal",139871563523248,139871563523264],["__strtof_internal",139871563525824,139871563525840],["strtod",139871563525888,139871563525906],["strtof64x",139871563525936,139871563525954],["__strtod_l",139871563546464,139871563546474],["__strtof_nan",139871563556464,139871563556617],["register_printf_type",139871563612448,139871563612713],["dprintf",139871563616256,139871563616435],["psignal",139871563617568,139871563617896],["getw",139871563619840,139871563619932],["renameat",139871563620096,139871563620138],["funlockfile",139871563620496,139871563620573],["__isoc99_vfscanf",139871563621008,139871563621018],["psiginfo",139871563621520,139871563622803],["fclose",139871563735568,139871563736212],["fflush",139871563736832,139871563737125],["fgets",139871563737536,139871563737932],["_IO_unsave_wmarkers",139871563758592,139871563758721],["vasprintf",139871563773696,139871563773703],["__fwriting",139871563777024,139871563777032],["fmemopen",139871563778448,139871563778934],["fputc_unlocked",139871563780832,139871563780880],["putc_unlocked",139871563781072,139871563781120],["fgets_unlocked",139871563781680,139871563781832],["_IO_file_setbuf",139871563782368,139871563782415],["_IO_file_attach",139871563789888,139871563790063],["_IO_un_link",139871563792480,139871563792497],["__uflow",139871563794496,139871563794833],["_IO_enable_locks",139871563796288,139871563796337],["_IO_flush_all",139871563798976,139871563798986],["_IO_marker_difference",139871563799920,139871563799927],["_IO_default_pbackfail",139871563800208,139871563800543],["_IO_iter_file",139871563800688,139871563800692],["_IO_str_underflow",139871563800928,139871563801014],["_IO_str_init_readonly",139871563802176,139871563802205],["pthread_attr_setschedpolicy",139871563803008,139871563803043],["pthread_condattr_init",139871563803200,139871563803235],["malloc_stats",139871563830992,139871563831559],["_obstack_free",139871563838432,139871563838557],["__libc_thread_freeres",139871563840336,139871563840364],["__strcasestr",139871563848144,139871563849193],["argz_replace",139871563852880,139871563853718],["__strcspn_c3",139871563867344,139871563867405],["memcpy",139871563945568,139871563945608],["wcsspn",139871563949360,139871563949431],["btowc",139871563950304,139871563950765],["mbsnrtowcs",139871563952992,139871563953714],["wcstod",139871563954672,139871563954690],["wcstof64x_l",139871563976448,139871563976458],["wcscasecmp",139871563997216,139871563997299],["__isoc99_swscanf",139871564000688,139871564001000],["wcstof128_l",139871564012992,139871564013002],["asctime",139871564021440,139871564021457],["difftime",139871564021712,139871564021743],["localtime",139871564021808,139871564021828],["tzset",139871564028768,139871564028954],["timegm",139871564035120,139871564035146],["strptime",139871564037200,139871564037218],["__strftime_l",139871564059072,139871564059140],["clock_getres",139871564069552,139871564069663],["ntp_gettime",139871564072144,139871564072249],["rewinddir",139871564073024,139871564073187],["dirfd",139871564073456,139871564073459],["alphasort",139871564074336,139871564074355],["getdirentries",139871564075200,139871564075265],["setgroups",139871564077728,139871564077872],["putgrent",139871564078960,139871564079693],["getgrent_r",139871564080128,139871564080386],["getgrnam_r",139871564081600,139871564082786],["fgetgrent_r",139871564083616,139871564084279],["__merge_grp",139871564084816,139871564085287],["getpw",139871564085824,139871564086041],["getpwent",139871564086448,139871564086634],["getpwuid",139871564087088,139871564087526],["endpwent",139871564087744,139871564087966],["getpwnam_r",139871564088240,139871564089233],["_nss_files_parse_pwent",139871564090256,139871564090953],["uname",139871564091632,139871564091665],["__wait",139871564091760,139871564091775],["wait3",139871564091792,139871564091810],["waitid",139871564092000,139871564092171],["sleep",139871564092224,139871564092330],["__nanosleep",139871564092464,139871564092513],["__vfork",139871564092992,139871564093026],["execve",139871564093120,139871564093153],["execv",139871564093472,139871564093487],["execl",139871564093872,139871564094224],["execlp",139871564094240,139871564094592],["__getpid",139871564095696,139871564095704],["getuid",139871564095728,139871564095736],["getgid",139871564095760,139871564095768],["getgroups",139871564095792,139871564095825],["setgid",139871564095984,139871564096128],["__getpgid",139871564096288,139871564096321],["getpgrp",139871564096384,139871564096392],["setpgrp",139871564096416,139871564096425],["setsid",139871564096480,139871564096513],["getresgid",139871564096576,139871564096609],["setresgid",139871564096784,139871564096936],["pthread_cond_destroy",139871564539040,139871564539075],["malloc_set_state",139871564539376,139871564539615],["glob",139871564539712,139871564546384],["sched_setaffinity",139871564546496,139871564546582],["__libpthread_freeres",139871566580704,139871566580727],["__pthread_setschedparam",139871566591760,139871566592038],["__pthread_attr_getscope",139871566592384,139871566592398],["__pthread_attr_getstacksize",139871566592464,139871566592574],["__pthread_attr_setstack",139871566592640,139871566592674],["__GI___pthread_mutex_init",139871566593552,139871566594028],["__pthread_mutex_lock_full",139871566594064,139871566595927],["__GI___pthread_mutex_trylock",139871566596576,139871566598192],["__GI___pthread_mutexattr_init",139871566604752,139871566604761],["__GI___pthread_mutexattr_settype",139871566604864,139871566604898],["__GI___pthread_rwlock_wrlock",139871566606976,139871566607934],["__pthread_rwlock_trywrlock",139871566610288,139871566610377],["pthread_rwlockattr_destroy",139871566610864,139871566610867],["pthread_rwlockattr_setpshared",139871566610896,139871566610918],["pthread_rwlockattr_setkind_np",139871566610944,139871566610966],["__pthread_cond_destroy",139871566611024,139871566611155],["pthread_condattr_setclock",139871566616720,139871566616744],["__pthread_cleanup_pop",139871566625120,139871566625153],["__libc_pwrite",139871566629232,139871566629397],["__pthread_kill_other_threads_np",139871566631872,139871566631873],["__pthread_cleanup_routine",139871566632512,139871566632537],["pthread_mutex_setprioceiling",139871566635008,139871566635458],["thrd_join",139871566636928,139871566637059],["cnd_broadcast",139871566637616,139871566637694],["tss_create",139871566638032,139871566638110],["__libpthread_version_placeholder",139871566638320,139871566638321],["_dl_debug_state",139871566964064,139871566964065],["_dl_allocate_tls",139871566974144,139871566974242],["_dl_exception_create",139871566989008,139871566989227],["__tls_get_addr",139871566996544,139871566996605],["free",139871567004576,139871567004628],["_dl_catch_exception",139871567006128,139871567006347],["v8::DelayedTasksPlatform::CallOnWorkerThread(std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> >)",93957335211968,93957335212087],["v8::DelayedTasksPlatform::PostJob(v8::TaskPriority, std::__1::unique_ptr<v8::JobTask, std::__1::default_delete<v8::JobTask> >)",93957335212272,93957335212407],["v8::Serializer::PrepareTransfer(v8::Local<v8::Context>, v8::Local<v8::Value>)",93957335310384,93957335310927],["v8::(anonymous namespace)::ShellArrayBufferAllocator::Allocate(unsigned long)",93957335311600,93957335311696],["v8::(anonymous namespace)::ArrayBufferAllocatorBase::Allocate(unsigned long)",93957335311936,93957335311954],["v8::(anonymous namespace)::MockArrayBufferAllocator::AllocateUninitialized(unsigned long)",93957335312016,93957335312061],["v8::internal::FactoryBase<v8::internal::Factory>::AllocateRawFixedArray(int, v8::internal::AllocationType)",93957336837984,93957336838138],["v8::internal::FactoryBase<v8::internal::LocalFactory>::NewBytecodeArray(int, unsigned char const*, int, int, v8::internal::Handle<v8::internal::FixedArray>)",93957336839712,93957336840292],["v8::internal::FactoryBase<v8::internal::LocalFactory>::NewSharedFunctionInfo(v8::internal::MaybeHandle<v8::internal::String>, v8::internal::MaybeHandle<v8::internal::HeapObject>, int, v8::internal::FunctionKind)",93957336841376,93957336842241],["v8::internal::FactoryBase<v8::internal::LocalFactory>::NewFeedbackMetadata(int, int, v8::internal::AllocationType)",93957336842512,93957336842739],["v8::internal::FactoryBase<v8::internal::LocalFactory>::InternalizeString(v8::internal::Vector<unsigned short const> const&, bool)",93957336843152,93957336843300],["v8::internal::FactoryBase<v8::internal::LocalFactory>::NewTwoByteInternalizedString(v8::internal::Vector<unsigned short const> const&, unsigned int)",93957336843536,93957336843762],["v8::internal::FactoryBase<v8::internal::LocalFactory>::NewRawTwoByteString(int, v8::internal::AllocationType)",93957336843936,93957336844102],["v8::internal::FactoryBase<v8::internal::LocalFactory>::MakeOrFindTwoCharacterString(unsigned short, unsigned short)",93957336845680,93957336845952],["v8::internal::GCTracer::AddCompactionEvent(double, unsigned long)",93957336936128,93957336936235],["v8::internal::GCTracer::RecordGCPhasesHistograms(v8::internal::TimedHistogram*)",93957336940944,93957336941469],["v8::internal::WriteBarrier::MarkingSlow(v8::internal::Heap*, v8::internal::JSArrayBuffer, v8::internal::ArrayBufferExtension*)",93957336943440,93957336943511],["v8::internal::Heap::SetSerializedObjects(v8::internal::FixedArray)",93957336944736,93957336944749],["v8::internal::Heap::MaxReserved()",93957336947232,93957336947253],["v8::internal::PagedSpaceIterator::Next()",93957336947648,93957336947737],["v8::internal::SpaceIterator::HasNext()",93957336948320,93957336948333],["v8::internal::Heap::CanExpandOldGeneration(unsigned long)",93957336948608,93957336948861],["v8::internal::Heap::SelectGarbageCollector(v8::internal::AllocationSpace, char const**)",93957336949264,93957336949592],["v8::internal::Heap::PrintShortHeapStatistics()",93957336950288,93957336951998],["v8::internal::Heap::PrintFreeListsStats()",93957336952160,93957336957918],["v8::internal::Heap::DumpJSONHeapStatistics(std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >&)::$_0::operator()(int) const",93957336960032,93957336961115],["v8::internal::Heap::DisableInlineAllocation()",93957336961472,93957336961976],["v8::internal::Heap::AddRetainingPathTarget(v8::internal::Handle<v8::internal::HeapObject>, v8::internal::RetainingPathOption)",93957336962192,93957336962597],["v8::internal::Heap::PrintRetainingPath(v8::internal::HeapObject, v8::internal::RetainingPathOption)",93957336962976,93957336964215],["v8::internal::Heap::AddRetainingRoot(v8::internal::Root, v8::internal::HeapObject)",93957336964592,93957336964909],["v8::internal::Heap::RecomputeLimits(v8::internal::GarbageCollector)",93957337001360,93957337003001],["v8::internal::Heap::MarkCompactPrologue()",93957337003200,93957337003802],["v8::internal::Heap::EvaluateOldSpaceLocalPretenuring(unsigned long)",93957337004288,93957337004608],["v8::internal::Heap::ExternalStringTable::PromoteYoung()",93957337005552,93957337006070],["v8::internal::Heap::UnprotectAndRegisterMemoryChunk(v8::internal::HeapObject)",93957337006176,93957337006278],["v8::internal::Heap::ProtectUnprotectedMemoryChunks()",93957337006416,93957337006808],["v8::internal::Heap::UpdateYoungReferenceInExternalStringTableEntry(v8::internal::Heap*, v8::internal::FullObjectSlot)",93957337006928,93957337007297],["v8::internal::Heap::ExternalStringTable::IterateAll(v8::internal::RootVisitor*)",93957337007360,93957337007443],["v8::internal::IncrementalMarking::IsBelowActivationThresholds() const",93957337060000,93957337060058],["v8::internal::IncrementalMarking::Stop()",93957337065776,93957337066400],["v8::internal::IncrementalMarking::ScheduleBytesToMarkBasedOnAllocation()",93957337068960,93957337069224],["v8::internal::IncrementalMarkingRootMarkingVisitor::MarkObjectByPointer(v8::internal::FullObjectSlot)",93957337069552,93957337069798],["v8::internal::IndexGenerator::GetNext()",93957337070592,93957337071174],["v8::internal::InvalidatedSlotsFilter::OldToNew(v8::internal::MemoryChunk*)",93957337071216,93957337071247],["v8::internal::InvalidatedSlotsCleanup::OldToNew(v8::internal::MemoryChunk*)",93957337071536,93957337071624],["v8::internal::LargePage::Initialize(v8::internal::Heap*, v8::internal::MemoryChunk*, v8::internal::Executability)",93957337071696,93957337071746],["v8::internal::NewSpace::Flip()",93957337446864,93957337446891],["v8::internal::ObjectStats::PrintJSON(char const*)",93957337452224,93957337461252],["v8::internal::ObjectStatsCollectorImpl::RecordVirtualFixedArrayDetails(v8::internal::FixedArray)",93957337475120,93957337475223],["v8::internal::ObjectStatsCollectorImpl::RecordObjectStats(v8::internal::HeapObject, v8::internal::InstanceType, unsigned long, unsigned long)",93957337478784,93957337479198],["v8::internal::FieldStatsCollector::~FieldStatsCollector()",93957337481776,93957337481855],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::Map, v8::internal::FieldStatsCollector::JSObjectFieldStats>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::Map, v8::internal::FieldStatsCollector::JSObjectFieldStats>, std::__1::__unordered_map_hasher<v8::internal::Map, std::__1::__hash_value_type<v8::internal::Map, v8::internal::FieldStatsCollector::JSObjectFieldStats>, v8::internal::Object::Hasher, std::__1::equal_to<v8::internal::Map>, true>, std::__1::__unordered_map_equal<v8::internal::Map, std::__1::__hash_value_type<v8::internal::Map, v8::internal::FieldStatsCollector::JSObjectFieldStats>, std::__1::equal_to<v8::internal::Map>, v8::internal::Object::Hasher, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::Map, v8::internal::FieldStatsCollector::JSObjectFieldStats> > >::__emplace_unique_key_args<v8::internal::Map, std::__1::pair<v8::internal::Map, v8::internal::FieldStatsCollector::JSObjectFieldStats> >(v8::internal::Map const&, std::__1::pair<v8::internal::Map, v8::internal::FieldStatsCollector::JSObjectFieldStats>&&)",93957337482000,93957337482794],["v8::internal::Object v8::internal::VisitWeakList<v8::internal::AllocationSite>(v8::internal::Heap*, v8::internal::Object, v8::internal::WeakObjectRetainer*)",93957337485120,93957337485968],["v8::internal::PagedSpaceObjectIterator::PagedSpaceObjectIterator(v8::internal::Heap*, v8::internal::PagedSpace*)",93957337488160,93957337488432],["v8::internal::PagedSpace::PagedSpace(v8::internal::Heap*, v8::internal::AllocationSpace, v8::internal::Executability, v8::internal::FreeList*, v8::internal::LocalSpaceKind)",93957337488608,93957337488899],["v8::internal::PagedSpace::RefillFreeList()",93957337489088,93957337489624],["v8::internal::PagedSpace::AddPage(v8::internal::Page*)",93957337490016,93957337490411],["v8::internal::PagedSpace::FreeLinearAllocationArea()",93957337490672,93957337490946],["v8::internal::PagedSpace::ContainsSlow(unsigned long) const",93957337491136,93957337491196],["v8::internal::PagedSpace::Expand()",93957337491392,93957337491590],["v8::internal::PagedSpace::CountTotalPages()",93957337491856,93957337491905],["v8::internal::PagedSpace::MarkLinearAllocationAreaBlack()",93957337492320,93957337492367],["v8::internal::Stats_Runtime_LoadGlobalIC_Slow(int, unsigned long*, v8::internal::Isolate*)",93957337673904,93957337674736],["v8::internal::(anonymous namespace)::SimpleInstallGetter(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Name>, v8::internal::Builtins::Name, bool)",93957337789120,93957337789139],["v8::internal::Handle<v8::internal::BytecodeArray> v8::internal::interpreter::BytecodeArrayBuilder::ToBytecodeArray<v8::internal::Isolate>(v8::internal::Isolate*)",93957337819408,93957337819524],["v8::internal::interpreter::BytecodeArrayBuilder::LoadBoolean(bool)",93957337835264,93957337835300],["v8::internal::interpreter::BytecodeArrayBuilder::StoreNamedOwnProperty(v8::internal::interpreter::Register, v8::internal::AstRawString const*, int)",93957337846576,93957337847049],["v8::internal::interpreter::BytecodeArrayBuilder::CreateObjectLiteral(unsigned long, int, int)",93957337852320,93957337852641],["v8::internal::interpreter::BytecodeArrayBuilder::Jump(v8::internal::interpreter::BytecodeLabel*)",93957337856048,93957337856290],["v8::internal::interpreter::BytecodeArrayBuilder::Return()",93957337860432,93957337860645],["v8::internal::interpreter::BytecodeArrayBuilder::StoreModuleVariable(int, int)",93957337864336,93957337864646],["v8::internal::interpreter::BytecodeArrayBuilder::CallNoFeedback(v8::internal::interpreter::Register, v8::internal::interpreter::RegisterList)",93957337871184,93957337871686],["v8::internal::interpreter::BytecodeArrayBuilder::CallRuntimeForPair(v8::internal::Runtime::FunctionId, v8::internal::interpreter::Register, v8::internal::interpreter::RegisterList)",93957337874768,93957337874793],["v8::internal::interpreter::BytecodeArrayBuilder::EmitFunctionStartSourcePosition(int)",93957337876064,93957337876108],["v8::internal::interpreter::BytecodeArrayIterator::UpdatePointersCallback(void*)",93957337877392,93957337877451],["v8::internal::interpreter::BytecodeArrayIterator::GetImmediateOperand(int) const",93957337877888,93957337877939],["v8::internal::interpreter::BytecodeArrayIterator::GetJumpTargetOffset() const",93957337878672,93957337878701],["v8::internal::interpreter::JumpTableTargetOffsets::iterator::operator++()",93957337879728,93957337879871],["v8::internal::Handle<v8::internal::BytecodeArray> v8::internal::interpreter::BytecodeArrayWriter::ToBytecodeArray<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*, int, int, v8::internal::Handle<v8::internal::ByteArray>)",93957337881648,93957337881849],["v8::internal::interpreter::BytecodeArrayWriter::Write(v8::internal::interpreter::BytecodeNode*)",93957337882464,93957337882795],["v8::internal::interpreter::BytecodeArrayWriter::WriteJumpLoop(v8::internal::interpreter::BytecodeNode*, v8::internal::interpreter::BytecodeLoopHeader*)",93957337888576,93957337888929],["v8::internal::interpreter::BytecodeArrayWriter::PatchJump(unsigned long, unsigned long)",93957337889600,93957337889750],["v8::internal::interpreter::BytecodeArrayWriter::BindTryRegionStart(v8::internal::interpreter::HandlerTableBuilder*, int)",93957337889920,93957337889953],["v8::internal::interpreter::BytecodeArrayWriter::PatchJumpWith16BitOperand(unsigned long, int)",93957337890304,93957337890555],["v8::internal::interpreter::BytecodeDecoder::DecodeSignedOperand(unsigned long, v8::internal::interpreter::OperandType, v8::internal::interpreter::OperandScale)",93957337891392,93957337891470],["v8::internal::interpreter::CreateObjectLiteralFlags::Encode(int, bool)",93957337894208,93957337894222],["v8::internal::Handle<v8::internal::BytecodeArray> v8::internal::interpreter::BytecodeGenerator::FinalizeBytecode<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Script>)",93957337894400,93957337894786],["v8::internal::Handle<v8::internal::ByteArray> v8::internal::interpreter::BytecodeGenerator::FinalizeSourcePositionTable<v8::internal::Isolate>(v8::internal::Isolate*)",93957337896528,93957337896622],["v8::internal::interpreter::BytecodeGenerator::BytecodeGenerator(v8::internal::Zone*, v8::internal::UnoptimizedCompilationInfo*, v8::internal::AstStringConstants const*, std::__1::vector<v8::internal::FunctionLiteral*, std::__1::allocator<v8::internal::FunctionLiteral*> >*)",93957337899632,93957337900333],["v8::internal::interpreter::BytecodeGenerator::BuildLocalActivationContextInitialization()",93957337901616,93957337901863],["v8::internal::interpreter::BytecodeGenerator::VisitModuleNamespaceImports()",93957337903936,93957337904257],["v8::internal::interpreter::BytecodeGenerator::VisitBlock(v8::internal::Block*)",93957337905248,93957337905733],["v8::internal::interpreter::BytecodeGenerator::VisitFunctionLiteral(v8::internal::FunctionLiteral*)",93957337907104,93957337907730],["v8::internal::interpreter::BytecodeGenerator::Visit(v8::internal::AstNode*)",93957337909664,93957337909722],["v8::internal::interpreter::BytecodeGenerator::VisitForTest(v8::internal::Expression*, v8::internal::interpreter::BytecodeLabels*, v8::internal::interpreter::BytecodeLabels*, v8::internal::interpreter::BytecodeGenerator::TestFallthrough)",93957337910544,93957337910824],["v8::internal::interpreter::BytecodeGenerator::VisitBreakStatement(v8::internal::BreakStatement*)",93957337910976,93957337911106],["v8::internal::interpreter::BytecodeGenerator::VisitWithStatement(v8::internal::WithStatement*)",93957337911568,93957337912281],["v8::internal::interpreter::BytecodeGenerator::VisitDoWhileStatement(v8::internal::DoWhileStatement*)",93957337913568,93957337914653],["v8::internal::interpreter::BytecodeGenerator::VisitForStatement(v8::internal::ForStatement*)",93957337915408,93957337916269],["v8::internal::interpreter::BytecodeGenerator::PrepareAssignmentLhs(v8::internal::Expression*, v8::internal::interpreter::BytecodeGenerator::AccumulatorPreservingMode)",93957337917808,93957337920128],["v8::internal::interpreter::BytecodeGenerator::VisitForOfStatement(v8::internal::ForOfStatement*)",93957337921504,93957337923895],["v8::internal::interpreter::BytecodeGenerator::VisitTryCatchStatement(v8::internal::TryCatchStatement*)",93957337924192,93957337925237],["v8::internal::interpreter::BytecodeGenerator::BuildClassLiteral(v8::internal::ClassLiteral*, v8::internal::interpreter::Register)",93957337926368,93957337931028],["v8::internal::interpreter::BytecodeGenerator::BuildLoadPropertyKey(v8::internal::LiteralProperty*, v8::internal::interpreter::Register)",93957337931472,93957337931776],["v8::internal::interpreter::BytecodeGenerator::VisitClassLiteral(v8::internal::ClassLiteral*, v8::internal::interpreter::Register)",93957337932032,93957337932538],["v8::internal::interpreter::BytecodeGenerator::BuildVariableLoad(v8::internal::Variable*, v8::internal::HoleCheckMode, v8::internal::TypeofMode)",93957337933120,93957337933867],["v8::internal::interpreter::BytecodeGenerator::VisitInitializeClassStaticElementsStatement(v8::internal::InitializeClassStaticElementsStatement*)",93957337933952,93957337934057],["v8::internal::interpreter::BytecodeGenerator::VisitNativeFunctionLiteral(v8::internal::NativeFunctionLiteral*)",93957337934336,93957337934726],["v8::internal::interpreter::BytecodeGenerator::VisitLiteral(v8::internal::Literal*)",93957337935504,93957337935754],["v8::internal::interpreter::BytecodeGenerator::BuildCreateObjectLiteral(v8::internal::interpreter::Register, unsigned char, unsigned long)",93957337935840,93957337936125],["v8::internal::interpreter::BytecodeGenerator::MultipleEntryBlockContextScope::MultipleEntryBlockContextScope(v8::internal::interpreter::BytecodeGenerator*, v8::internal::Scope*)",93957337944688,93957337945047],["v8::internal::interpreter::BytecodeGenerator::BuildIteratorNext(v8::internal::interpreter::BytecodeGenerator::IteratorRecord const&, v8::internal::interpreter::Register)",93957337945664,93957337945848],["v8::internal::interpreter::BytecodeGenerator::VisitVariableProxy(v8::internal::VariableProxy*)",93957337948896,93957337948956],["v8::internal::interpreter::BytecodeGenerator::GetCachedLoadGlobalICSlot(v8::internal::TypeofMode, v8::internal::Variable*)",93957337949008,93957337949287],["v8::internal::interpreter::BytecodeGenerator::GetCachedStoreGlobalICSlot(v8::internal::LanguageMode, v8::internal::Variable*)",93957337949664,93957337949922],["v8::internal::interpreter::BytecodeGenerator::BuildStoreNamedProperty(v8::internal::Expression const*, v8::internal::interpreter::Register, v8::internal::AstRawString const*)",93957337950288,93957337950578],["v8::internal::interpreter::BytecodeGenerator::BuildFinalizeIteration(v8::internal::interpreter::BytecodeGenerator::IteratorRecord, v8::internal::interpreter::Register, v8::internal::interpreter::Register)",93957337951008,93957337952062],["v8::internal::interpreter::BytecodeGenerator::BuildDestructuringObjectAssignment(v8::internal::ObjectLiteral*, v8::internal::Token::Value, v8::internal::LookupHoistingMode)",93957337954960,93957337956835],["v8::internal::interpreter::BytecodeGenerator::BuildPrivateSetterAccess(v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::Register)",93957337957600,93957337957960],["v8::internal::interpreter::BytecodeGenerator::VisitCompoundAssignment(v8::internal::CompoundAssignment*)",93957337958256,93957337960833],["v8::internal::interpreter::BytecodeGenerator::VisitYield(v8::internal::Yield*)",93957337961200,93957337962327],["v8::internal::interpreter::BytecodeGenerator::BuildCallIteratorMethod(v8::internal::interpreter::Register, v8::internal::AstRawString const*, v8::internal::interpreter::RegisterList, v8::internal::interpreter::BytecodeLabel*, v8::internal::interpreter::BytecodeLabels*)",93957337965408,93957337965697],["v8::internal::interpreter::BytecodeGenerator::BuildIteratorClose(v8::internal::interpreter::BytecodeGenerator::IteratorRecord const&, v8::internal::Expression*)",93957337966368,93957337966805],["v8::internal::interpreter::BytecodeGenerator::VisitThrow(v8::internal::Throw*)",93957337967104,93957337967371],["v8::internal::interpreter::BytecodeGenerator::VisitNamedSuperPropertyLoad(v8::internal::Property*, v8::internal::interpreter::Register)",93957337968624,93957337969306],["v8::internal::interpreter::BytecodeGenerator::BuildPrivateMethodIn(v8::internal::Variable*, v8::internal::Expression*)",93957337969856,93957337971181],["v8::internal::BufferedZoneList<v8::internal::RegExpTree, 2>::Add(v8::internal::RegExpTree*, v8::internal::Zone*)",93957339909536,93957339909899],["v8::internal::HasFewDifferentCharacters(v8::internal::Handle<v8::internal::String>)",93957339919088,93957339919398],["v8::internal::RegExpGlobalCache::RegExpGlobalCache(v8::internal::Handle<v8::internal::JSRegExp>, v8::internal::Handle<v8::internal::String>, v8::internal::Isolate*)",93957339926368,93957339926886],["v8::internal::ReadOnlyRoots::Iterate(v8::internal::RootVisitor*)",93957339929664,93957339929722],["v8::internal::Stats_Runtime_NewArray(int, unsigned long*, v8::internal::Isolate*)",93957339932480,93957339933749],["v8::internal::Stats_Runtime_GrowArrayElements(int, unsigned long*, v8::internal::Isolate*)",93957339935200,93957339936004],["v8::internal::Stats_Runtime_IsArray(int, unsigned long*, v8::internal::Isolate*)",93957339937040,93957339937609],["v8::internal::Stats_Runtime_ArrayIncludes_Slow(int, unsigned long*, v8::internal::Isolate*)",93957339940224,93957339942506],["v8::internal::Handle<v8::internal::Object> v8::internal::FactoryBase<v8::internal::Factory>::NewNumberFromInt64<(v8::internal::AllocationType)0>(long)",93957339946784,93957339946935],["v8::internal::Stats_Runtime_AtomicsLoad64(int, unsigned long*, v8::internal::Isolate*)",93957339946992,93957339947346],["v8::internal::Stats_Runtime_AtomicsStore64(int, unsigned long*, v8::internal::Isolate*)",93957339947408,93957339947762],["v8::internal::Stats_Runtime_AtomicsExchange(int, unsigned long*, v8::internal::Isolate*)",93957339947824,93957339948178],["v8::internal::Stats_Runtime_AtomicsCompareExchange(int, unsigned long*, v8::internal::Isolate*)",93957339948240,93957339948594],["v8::internal::Stats_Runtime_AtomicsAdd(int, unsigned long*, v8::internal::Isolate*)",93957339948656,93957339949010],["v8::internal::Stats_Runtime_AtomicsSub(int, unsigned long*, v8::internal::Isolate*)",93957339949072,93957339949426],["v8::internal::Stats_Runtime_AtomicsAnd(int, unsigned long*, v8::internal::Isolate*)",93957339949488,93957339949842],["v8::internal::Runtime_ResolvePossiblyDirectEval(int, unsigned long*, v8::internal::Isolate*)",93957340010288,93957340011004],["v8::internal::(anonymous namespace)::TryInstallNCICode(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSFunction>, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::IsCompiledScope*)",93957340012128,93957340012348],["v8::internal::CodeTracer::OpenFile()",93957340012528,93957340012621],["v8::internal::Runtime_DateCurrentTime(int, unsigned long*, v8::internal::Isolate*)",93957340012704,93957340013023],["v8::internal::Stats_Runtime_DebugBreakOnBytecode(int, unsigned long*, v8::internal::Isolate*)",93957340014448,93957340015617],["v8::internal::Stats_Runtime_HandleDebuggerStatement(int, unsigned long*, v8::internal::Isolate*)",93957340016848,93957340017349],["v8::internal::Handle<v8::internal::String> v8::internal::Factory::NewStringFromStaticChars<15ul>(char const (&) [15ul], v8::internal::AllocationType)",93957340024240,93957340024301],["v8::internal::Handle<v8::internal::String> v8::internal::Factory::NewStringFromStaticChars<18ul>(char const (&) [18ul], v8::internal::AllocationType)",93957340024496,93957340024557],["v8::internal::Runtime_GetGeneratorScopeDetails(int, unsigned long*, v8::internal::Isolate*)",93957340025920,93957340026643],["v8::internal::Runtime_GetBreakLocations(int, unsigned long*, v8::internal::Isolate*)",93957340029856,93957340030201],["v8::internal::Runtime_ClearStepping(int, unsigned long*, v8::internal::Isolate*)",93957340032208,93957340032373],["v8::internal::Runtime_FunctionGetInferredName(int, unsigned long*, v8::internal::Isolate*)",93957340034208,93957340034459],["v8::internal::Stats_Runtime_CollectGarbage(int, unsigned long*, v8::internal::Isolate*)",93957340035216,93957340035667],["v8::internal::Stats_Runtime_ScriptLocationFromLine2(int, unsigned long*, v8::internal::Isolate*)",93957340038464,93957340041498],["v8::internal::Stats_Runtime_DebugOnFunctionCall(int, unsigned long*, v8::internal::Isolate*)",93957340041824,93957340042523],["v8::internal::Stats_Runtime_DebugPrepareStepInSuspendedGenerator(int, unsigned long*, v8::internal::Isolate*)",93957340042672,93957340043179],["v8::internal::Stats_Runtime_DebugPushPromise(int, unsigned long*, v8::internal::Isolate*)",93957340043392,93957340043987],["v8::internal::Stats_Runtime_DebugPopPromise(int, unsigned long*, v8::internal::Isolate*)",93957340044064,93957340044502],["v8::internal::Stats_Runtime_DebugCollectCoverage(int, unsigned long*, v8::internal::Isolate*)",93957340047408,93957340050699],["v8::internal::Stats_Runtime_DebugTogglePreciseCoverage(int, unsigned long*, v8::internal::Isolate*)",93957340050848,93957340051390],["v8::internal::Stats_Runtime_DebugToggleBlockCoverage(int, unsigned long*, v8::internal::Isolate*)",93957340051536,93957340052080],["v8::internal::Stats_Runtime_IncBlockCounter(int, unsigned long*, v8::internal::Isolate*)",93957340052128,93957340052482],["v8::internal::Stats_Runtime_DebugAsyncFunctionEntered(int, unsigned long*, v8::internal::Isolate*)",93957340052752,93957340053380],["v8::internal::Stats_Runtime_DebugAsyncFunctionSuspended(int, unsigned long*, v8::internal::Isolate*)",93957340053616,93957340054224],["v8::internal::Stats_Runtime_DebugAsyncFunctionResumed(int, unsigned long*, v8::internal::Isolate*)",93957340054432,93957340055027],["v8::internal::Stats_Runtime_DebugAsyncFunctionFinished(int, unsigned long*, v8::internal::Isolate*)",93957340055392,93957340056097],["v8::internal::Stats_Runtime_LiveEditPatchScript(int, unsigned long*, v8::internal::Isolate*)",93957340056800,93957340057854],["v8::internal::Stats_Runtime_ProfileCreateSnapshotDataBlob(int, unsigned long*, v8::internal::Isolate*)",93957340058080,93957340058662],["v8::internal::Runtime_AllocateByteArray(int, unsigned long*, v8::internal::Isolate*)",93957340109216,93957340109380],["v8::internal::Runtime_OrdinaryHasInstance(int, unsigned long*, v8::internal::Isolate*)",93957340120400,93957340120548],["v8::internal::Runtime_CreateRegExpLiteral(int, unsigned long*, v8::internal::Isolate*)",93957340141904,93957340142980],["v8::internal::Runtime::GetObjectProperty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, bool*)",93957340165152,93957340165602],["v8::internal::Runtime_ObjectValues(int, unsigned long*, v8::internal::Isolate*)",93957340178592,93957340178848],["v8::internal::Runtime_JSReceiverSetPrototypeOfThrow(int, unsigned long*, v8::internal::Isolate*)",93957340185984,93957340186207],["v8::internal::Runtime_HasProperty(int, unsigned long*, v8::internal::Isolate*)",93957340195616,93957340195932],["v8::internal::Runtime_DefineAccessorPropertyUnchecked(int, unsigned long*, v8::internal::Isolate*)",93957340202800,93957340203336],["v8::internal::Runtime_DefineGetterPropertyUnchecked(int, unsigned long*, v8::internal::Isolate*)",93957340210752,93957340211588],["v8::internal::Runtime_DefineSetterPropertyUnchecked(int, unsigned long*, v8::internal::Isolate*)",93957340216912,93957340217762],["v8::internal::Runtime_ToLength(int, unsigned long*, v8::internal::Isolate*)",93957340221008,93957340221229],["v8::internal::Runtime_CreateIterResultObject(int, unsigned long*, v8::internal::Isolate*)",93957340224288,93957340224462],["v8::internal::Runtime_LoadPrivateSetter(int, unsigned long*, v8::internal::Isolate*)",93957340228256,93957340228384],["v8::internal::Runtime_AddPrivateField(int, unsigned long*, v8::internal::Isolate*)",93957340232768,93957340233363],["v8::internal::Runtime_SwissTableUpdate(int, unsigned long*, v8::internal::Isolate*)",93957340237440,93957340237935],["v8::internal::Runtime_SwissTableKeyAt(int, unsigned long*, v8::internal::Isolate*)",93957340241472,93957340241653],["v8::internal::Name::Equals(v8::internal::Name)",93957340243952,93957340244102],["v8::internal::Runtime_Equal(int, unsigned long*, v8::internal::Isolate*)",93957340244992,93957340245170],["v8::internal::Runtime_StrictEqual(int, unsigned long*, v8::internal::Isolate*)",93957340246528,93957340246604],["v8::internal::Runtime_ReferenceEqual(int, unsigned long*, v8::internal::Isolate*)",93957340247648,93957340247691],["v8::internal::Runtime_GreaterThan(int, unsigned long*, v8::internal::Isolate*)",93957340248960,93957340249159],["v8::internal::Runtime_GreaterThanOrEqual(int, unsigned long*, v8::internal::Isolate*)",93957340250576,93957340250780],["v8::internal::Runtime_PromiseRejectAfterResolved(int, unsigned long*, v8::internal::Isolate*)",93957340252432,93957340252638],["v8::internal::Runtime_PromiseRevokeReject(int, unsigned long*, v8::internal::Isolate*)",93957340254064,93957340254296],["v8::internal::Runtime_PerformMicrotaskCheckpoint(int, unsigned long*, v8::internal::Isolate*)",93957340256080,93957340256214],["v8::internal::Runtime_PromiseStatus(int, unsigned long*, v8::internal::Isolate*)",93957340257568,93957340257782],["v8::internal::Runtime_PromiseHookInit(int, unsigned long*, v8::internal::Isolate*)",93957340259040,93957340259249],["v8::internal::Runtime_AwaitPromisesInitOld(int, unsigned long*, v8::internal::Isolate*)",93957340261120,93957340261626],["v8::internal::Runtime_PromiseHookAfter(int, unsigned long*, v8::internal::Isolate*)",93957340263440,93957340263705],["v8::internal::Runtime_ResolvePromise(int, unsigned long*, v8::internal::Isolate*)",93957340265360,93957340265574],["v8::internal::Runtime_ConstructInternalAggregateErrorHelper(int, unsigned long*, v8::internal::Isolate*)",93957340267040,93957340267542],["v8::internal::Stats_Runtime_IsJSProxy(int, unsigned long*, v8::internal::Isolate*)",93957340268848,93957340269417],["v8::internal::Runtime_JSProxyGetTarget(int, unsigned long*, v8::internal::Isolate*)",93957340270048,93957340270140],["v8::internal::Runtime_GetPropertyWithReceiver(int, unsigned long*, v8::internal::Isolate*)",93957340270672,93957340270997],["v8::internal::Runtime_SetPropertyWithReceiver(int, unsigned long*, v8::internal::Isolate*)",93957340271728,93957340272085],["v8::internal::Runtime_CheckProxyGetSetTrapResult(int, unsigned long*, v8::internal::Isolate*)",93957340272848,93957340273246],["v8::internal::Runtime_CheckProxyHasTrapResult(int, unsigned long*, v8::internal::Isolate*)",93957340274048,93957340274352],["v8::internal::Runtime_CheckProxyDeleteTrapResult(int, unsigned long*, v8::internal::Isolate*)",93957340275056,93957340275360],["v8::internal::CompiledReplacement::Compile(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSRegExp>, v8::internal::Handle<v8::internal::String>, int, int)",93957340276064,93957340276482],["bool v8::internal::CompiledReplacement::ParseReplacementPattern<unsigned short const>(v8::internal::Vector<unsigned short const>, v8::internal::FixedArray, int, int)",93957340278608,93957340280733],["v8::internal::FindStringIndicesDispatch(v8::internal::Isolate*, v8::internal::String, v8::internal::String, std::__1::vector<int, std::__1::allocator<int> >*, unsigned int)",93957340281344,93957340282921],["v8::internal::Stats_Runtime_StringSplit(int, unsigned long*, v8::internal::Isolate*)",93957340284928,93957340287353],["v8::internal::Stats_Runtime_RegExpExec(int, unsigned long*, v8::internal::Isolate*)",93957340288016,93957340289052],["v8::internal::Stats_Runtime_RegExpExecTreatMatchAtEndAsFailure(int, unsigned long*, v8::internal::Isolate*)",93957340289712,93957340290751],["v8::internal::Stats_Runtime_RegExpExperimentalOneshotExec(int, unsigned long*, v8::internal::Isolate*)",93957340291408,93957340292444],["v8::internal::Stats_Runtime_RegExpExperimentalOneshotExecTreatMatchAtEndAsFailure(int, unsigned long*, v8::internal::Isolate*)",93957340293104,93957340294143],["v8::internal::Stats_Runtime_RegExpBuildIndices(int, unsigned long*, v8::internal::Isolate*)",93957340294352,93957340294948],["v8::internal::Stats_Runtime_RegExpExecMultiple(int, unsigned long*, v8::internal::Isolate*)",93957340300000,93957340305641],["v8::internal::Stats_Runtime_StringReplaceNonGlobalRegExpWithFunction(int, unsigned long*, v8::internal::Isolate*)",93957340307744,93957340310284],["v8::internal::Stats_Runtime_RegExpSplit(int, unsigned long*, v8::internal::Isolate*)",93957340313232,93957340316595],["v8::internal::Stats_Runtime_RegExpReplaceRT(int, unsigned long*, v8::internal::Isolate*)",93957340325904,93957340335627],["v8::internal::Stats_Runtime_RegExpInitializeAndCompile(int, unsigned long*, v8::internal::Isolate*)",93957340335984,93957340336713],["v8::internal::Stats_Runtime_IsRegExp(int, unsigned long*, v8::internal::Isolate*)",93957340336832,93957340337401],["v8::internal::Object std::__1::__function::__policy_invoker<v8::internal::Object (int)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::(anonymous namespace)::SearchRegExpMultiple<true>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::JSRegExp>, v8::internal::Handle<v8::internal::RegExpMatchInfo>, v8::internal::Handle<v8::internal::JSArray>)::{lambda(int)#1}, v8::internal::Object (int)> >(std::__1::__function::__policy_storage const*, int)",93957340337744,93957340337779],["v8::internal::(anonymous namespace)::NewJSArrayWithElements(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FixedArray>, int)",93957340337824,93957340337871],["v8::internal::(anonymous namespace)::MatchInfoBackedMatch::GetMatch()",93957340337936,93957340337961],["v8::internal::(anonymous namespace)::MatchInfoBackedMatch::GetSuffix()",93957340338016,93957340338059],["v8::internal::(anonymous namespace)::MatchInfoBackedMatch::GetCapture(int, bool*)",93957340338096,93957340338198],["bool std::__1::__function::__policy_invoker<bool (v8::internal::String)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::(anonymous namespace)::MatchInfoBackedMatch::GetNamedCapture(v8::internal::Handle<v8::internal::String>, v8::internal::String::Match::CaptureState*)::{lambda(v8::internal::String)#1}, bool (v8::internal::String)> >(std::__1::__function::__policy_storage const*, v8::internal::String&&)",93957340338640,93957340338737],["v8::internal::Object v8::internal::StringReplaceGlobalAtomRegExpWithString<v8::internal::SeqTwoByteString>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::JSRegExp>, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::RegExpMatchInfo>)",93957340339440,93957340340126],["v8::internal::(anonymous namespace)::VectorBackedMatch::GetSuffix()",93957340340176,93957340340220],["v8::internal::(anonymous namespace)::VectorBackedMatch::HasNamedCaptures()",93957340340240,93957340340249],["v8::internal::(anonymous namespace)::VectorBackedMatch::GetNamedCapture(v8::internal::Handle<v8::internal::String>, v8::internal::String::Match::CaptureState*)",93957340340352,93957340340682],["bool std::__1::__function::__policy_invoker<bool (v8::internal::String)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::CompiledReplacement::ParseReplacementPattern<unsigned short const>(v8::internal::Vector<unsigned short const>, v8::internal::FixedArray, int, int)::{lambda(v8::internal::String)#1}, bool (v8::internal::String)> >(std::__1::__function::__policy_storage const*, v8::internal::String&&)",93957340340832,93957340340965],["v8::internal::Heap::ExternalStringTable::AddString(v8::internal::String)",93957340534528,93957340534578],["v8::internal::SlotAccessorForHandle::Write(v8::internal::HeapObject, v8::internal::HeapObjectReferenceType, int)",93957340534864,93957340534966],["void v8::internal::RelocInfo::Visit<v8::internal::Deserializer::RelocInfoVisitor>(v8::internal::Deserializer::RelocInfoVisitor*)",93957340535136,93957340535321],["void std::__1::vector<v8::internal::Deserializer::UnresolvedForwardRef, std::__1::allocator<v8::internal::Deserializer::UnresolvedForwardRef> >::__emplace_back_slow_path<v8::internal::Handle<v8::internal::HeapObject>, int, v8::internal::HeapObjectReferenceType&>(v8::internal::Handle<v8::internal::HeapObject>&&, int&&, v8::internal::HeapObjectReferenceType&)",93957340535552,93957340535848],["v8::internal::SlotAccessorForHeapObject::WriteWithGenerationalBarrier(v8::internal::MaybeObject)",93957340536304,93957340536471],["v8::internal::InstructionStream::TryLookupCode(v8::internal::Isolate*, unsigned long)",93957340537072,93957340537514],["v8::internal::InstructionStream::FreeOffHeapInstructionStream(unsigned char*, unsigned int, unsigned char*, unsigned int)",93957340539184,93957340539347],["v8::internal::EmbeddedData::InstructionStartOfBuiltin(int) const",93957340539648,93957340539672],["v8::internal::EmbeddedData::MetadataStartOfBuiltin(int) const",93957340539712,93957340539742],["v8::internal::EmbeddedData::InstructionStartOfBytecodeHandlers() const",93957340539776,93957340539795],["v8::internal::ObjectDeserializer::DeserializeSharedFunctionInfo(v8::internal::Isolate*, v8::internal::SerializedCodeData const*, v8::internal::Handle<v8::internal::String>)",93957340539840,93957340540264],["v8::internal::ObjectDeserializer::LinkAllocationSites()",93957340540576,93957340541016],["v8::internal::ReadOnlyDeserializer::DeserializeIntoIsolate()",93957340541408,93957340541706],["v8::internal::ReadOnlySerializer::~ReadOnlySerializer()",93957340541760,93957340541855],["v8::internal::SerializerDeserializer::RestoreExternalReferenceRedirector(v8::internal::Isolate*, v8::internal::Handle<v8::internal::AccessorInfo>)",93957340544208,93957340544266],["v8::internal::Serializer::PutRoot(v8::internal::RootIndex)",93957340546304,93957340546545],["v8::internal::Serializer::ObjectSerializer::SerializeContent(v8::internal::Map, int)",93957340552976,93957340553206],["v8::internal::CodeAddressMap::CodeMoveEvent(v8::internal::AbstractCode, v8::internal::AbstractCode)",93957340558896,93957340559267],["_ZNSt3__16vectorIhNS_9allocatorIhEEE6insertINS_11__wrap_iterIPKhEEEENS_9enable_ifIXaasr27__is_cpp17_forward_iteratorIT_EE5valuesr16is_constructibleIhNS_15iterator_traitsISA_E9referenceEEE5valueENS5_IPhEEE4typeES8_SA_SA_",93957340561712,93957340563628],["v8::internal::CreateSnapshotDataBlobInternal(v8::SnapshotCreator::FunctionCodeHandling, char const*, v8::Isolate*)",93957340570864,93957340571077],["v8::internal::StartupSerializer::SerializeObjectImpl(v8::internal::Handle<v8::internal::HeapObject>)",93957340573056,93957340573813],["v8::internal::SerializedHandleChecker::VisitRootPointers(v8::internal::Root, char const*, v8::internal::FullObjectSlot, v8::internal::FullObjectSlot)",93957340574816,93957340575291],["v8::internal::IsIdentifierPartSlow(unsigned int)",93957340575792,93957340575880],["v8::internal::StringBuilderConcatLength(int, v8::internal::FixedArray, int, bool*)",93957340576336,93957340576607],["v8::internal::FixedArrayBuilder::Add(v8::internal::Smi)",93957340576896,93957340576920],["v8::internal::ReplacementStringBuilder::AddString(v8::internal::Handle<v8::internal::String>)",93957340577184,93957340577286],["v8::internal::IncrementalStringBuilder::Length() const",93957340578224,93957340578243],["int v8::internal::FastAsciiConvert<false>(char*, char const*, int, bool*)",93957340578976,93957340579340],["v8::internal::FixedStringAllocator::grow(unsigned int*)",93957340579856,93957340579871],["v8::internal::StringStream::ToCString() const",93957340582448,93957340582584],["v8::internal::StringStream::ClearMentionedObjectCache(v8::internal::Isolate*)",93957340582800,93957340582877],["v8::internal::StringStream::Put(v8::internal::String, int, int)",93957340582896,93957340583677],["v8::internal::StringStream::PrintUsingMap(v8::internal::JSObject)",93957340583808,93957340584703],["v8::internal::StringStream::PrintByteArray(v8::internal::ByteArray)",93957340585104,93957340585490],["v8::internal::StringStream::PrintSecurityTokenIfChanged(v8::internal::JSFunction)",93957340586016,93957340586118],["v8::internal::StringStream::PrintPrototype(v8::internal::JSFunction, v8::internal::Object)",93957340586176,93957340587582],["v8::internal::HeapStringAllocator::~HeapStringAllocator()",93957340587760,93957340587791],["void v8::internal::Utf8Decoder::Decode<unsigned char>(unsigned char*, v8::internal::Vector<unsigned char const> const&)",93957340587840,93957340588094],["v8::internal::Utf8Decoder::Utf8Decoder(v8::internal::Vector<unsigned char const> const&)",93957340588432,93957340589036],["unibrow::Utf8::ValueOfIncrementalFinish(Utf8DfaDecoder::State*)",93957340589232,93957340589253],["unibrow::Uppercase::Is(unsigned int)",93957340589360,93957340589376],["v8::internal::Uri::Encode(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, bool)",93957340591376,93957340593968],["v8::internal::Uri::Unescape(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>)",93957340595040,93957340596352],["int v8::internal::(anonymous namespace)::UnescapeChar<unsigned char>(v8::internal::Vector<unsigned char const>, int, int, int*)",93957340598992,93957340599406],["v8::internal::Cancelable::~Cancelable()",93957340599840,93957340599892],["v8::internal::Cancelable::~Cancelable()",93957340600432,93957340600497],["v8_inspector::V8Debugger::storeCurrentStackTrace(v8_inspector::StringView const&)",93957342545504,93957342546014],["v8_inspector::(anonymous namespace)::MatchPrototypePredicate::Filter(v8::Local<v8::Object>)",93957342548192,93957342548359],["void std::__1::__function::__policy_invoker<void (v8_inspector::V8InspectorSessionImpl*)>::__call_impl<std::__1::__function::__default_alloc_func<v8_inspector::V8Debugger::IsFunctionBlackboxed(v8::Local<v8::debug::Script>, v8::debug::Location const&, v8::debug::Location const&)::$_7, void (v8_inspector::V8InspectorSessionImpl*)> >(std::__1::__function::__policy_storage const*, v8_inspector::V8InspectorSessionImpl*)",93957342548720,93957342548781],["void std::__1::vector<std::__1::shared_ptr<v8_inspector::AsyncStackTrace>, std::__1::allocator<std::__1::shared_ptr<v8_inspector::AsyncStackTrace> > >::__emplace_back_slow_path<>()",93957342550672,93957342551022],["std::__1::__shared_ptr_emplace<v8_inspector::StackFrame, std::__1::allocator<v8_inspector::StackFrame> >::~__shared_ptr_emplace()",93957342551328,93957342551348],["std::__1::__shared_ptr_emplace<v8_inspector::StackFrame, std::__1::allocator<v8_inspector::StackFrame> >::__on_zero_shared()",93957342551408,93957342551487],["v8_inspector::V8HeapProfilerAgentImpl::V8HeapProfilerAgentImpl(v8_inspector::V8InspectorSessionImpl*, v8_crdtp::FrontendChannel*, v8_inspector::protocol::DictionaryValue*)",93957342552416,93957342552573],["v8_inspector::V8HeapProfilerAgentImpl::~V8HeapProfilerAgentImpl()",93957342552784,93957342552978],["v8_crdtp::cbor::(anonymous namespace)::ParseUTF16String(v8_crdtp::cbor::CBORTokenizer*, v8_crdtp::ParserHandler*)",93957342753824,93957342754297],["v8_crdtp::DomainDispatcher::DomainDispatcher(v8_crdtp::FrontendChannel*)",93957342758512,93957342758550],["v8_crdtp::(anonymous namespace)::ProtocolError::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342763072,93957342763401],["v8_crdtp::(anonymous namespace)::Notification::~Notification()",93957342764144,93957342764200],["void std::__1::__inplace_merge<v8_crdtp::FirstLessThan<v8_crdtp::span<unsigned char> >&, std::__1::__wrap_iter<std::__1::pair<v8_crdtp::span<unsigned char>, v8_crdtp::span<unsigned char> >*> >(std::__1::__wrap_iter<std::__1::pair<v8_crdtp::span<unsigned char>, v8_crdtp::span<unsigned char> >*>, std::__1::__wrap_iter<std::__1::pair<v8_crdtp::span<unsigned char>, v8_crdtp::span<unsigned char> >*>, std::__1::__wrap_iter<std::__1::pair<v8_crdtp::span<unsigned char>, v8_crdtp::span<unsigned char> >*>, v8_crdtp::FirstLessThan<v8_crdtp::span<unsigned char> >&, std::__1::iterator_traits<std::__1::__wrap_iter<std::__1::pair<v8_crdtp::span<unsigned char>, v8_crdtp::span<unsigned char> >*> >::difference_type, std::__1::iterator_traits<std::__1::__wrap_iter<std::__1::pair<v8_crdtp::span<unsigned char>, v8_crdtp::span<unsigned char> >*> >::difference_type, std::__1::iterator_traits<std::__1::__wrap_iter<std::__1::pair<v8_crdtp::span<unsigned char>, v8_crdtp::span<unsigned char> >*> >::value_type*, long)",93957342765216,93957342766407],["void std::__1::__buffered_inplace_merge<v8_crdtp::FirstLessThan<std::__1::unique_ptr<v8_crdtp::DomainDispatcher, std::__1::default_delete<v8_crdtp::DomainDispatcher> > >&, std::__1::__wrap_iter<std::__1::pair<v8_crdtp::span<unsigned char>, std::__1::unique_ptr<v8_crdtp::DomainDispatcher, std::__1::default_delete<v8_crdtp::DomainDispatcher> > >*> >(std::__1::__wrap_iter<std::__1::pair<v8_crdtp::span<unsigned char>, std::__1::unique_ptr<v8_crdtp::DomainDispatcher, std::__1::default_delete<v8_crdtp::DomainDispatcher> > >*>, std::__1::__wrap_iter<std::__1::pair<v8_crdtp::span<unsigned char>, std::__1::unique_ptr<v8_crdtp::DomainDispatcher, std::__1::default_delete<v8_crdtp::DomainDispatcher> > >*>, std::__1::__wrap_iter<std::__1::pair<v8_crdtp::span<unsigned char>, std::__1::unique_ptr<v8_crdtp::DomainDispatcher, std::__1::default_delete<v8_crdtp::DomainDispatcher> > >*>, v8_crdtp::FirstLessThan<std::__1::unique_ptr<v8_crdtp::DomainDispatcher, std::__1::default_delete<v8_crdtp::DomainDispatcher> > >&, std::__1::iterator_traits<std::__1::__wrap_iter<std::__1::pair<v8_crdtp::span<unsigned char>, std::__1::unique_ptr<v8_crdtp::DomainDispatcher, std::__1::default_delete<v8_crdtp::DomainDispatcher> > >*> >::difference_type, std::__1::iterator_traits<std::__1::__wrap_iter<std::__1::pair<v8_crdtp::span<unsigned char>, std::__1::unique_ptr<v8_crdtp::DomainDispatcher, std::__1::default_delete<v8_crdtp::DomainDispatcher> > >*> >::difference_type, std::__1::iterator_traits<std::__1::__wrap_iter<std::__1::pair<v8_crdtp::span<unsigned char>, std::__1::unique_ptr<v8_crdtp::DomainDispatcher, std::__1::default_delete<v8_crdtp::DomainDispatcher> > >*> >::value_type*)",93957342768976,93957342769842],["v8_crdtp::json::ConvertJSONToCBOR(v8_crdtp::span<unsigned short>, std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*)",93957342770208,93957342770372],["v8_crdtp::json::(anonymous namespace)::JSONEncoder<std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > >::HandleMapBegin()",93957342773680,93957342773807],["v8_crdtp::json::(anonymous namespace)::JSONEncoder<std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > >::HandleArrayEnd()",93957342774064,93957342774184],["v8_crdtp::json::(anonymous namespace)::JSONEncoder<std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > >::HandleString16(v8_crdtp::span<unsigned short>)",93957342778880,93957342780364],["v8_crdtp::json::(anonymous namespace)::JSONEncoder<std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > >::HandleDouble(double)",93957342783072,93957342783623],["v8_crdtp::json::(anonymous namespace)::JSONEncoder<std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > >::HandleBool(bool)",93957342783792,93957342783922],["v8_crdtp::json::(anonymous namespace)::JSONEncoder<std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > >::HandleError(v8_crdtp::Status)",93957342784048,93957342784075],["v8_crdtp::json::(anonymous namespace)::JSONEncoder<std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > >::Emit(char)",93957342784352,93957342784589],["_ZNSt3__16vectorIhNS_9allocatorIhEEE6insertINS_11__wrap_iterIPKcEEEENS_9enable_ifIXaasr27__is_cpp17_forward_iteratorIT_EE5valuesr16is_constructibleIhNS_15iterator_traitsISA_E9referenceEEE5valueENS5_IPhEEE4typeENS5_IPKhEESA_SA_",93957342786848,93957342789096],["v8_crdtp::json::(anonymous namespace)::JsonParser<unsigned char>::ParseToken(unsigned char const*, unsigned char const*, unsigned char const**, unsigned char const**)",93957342790800,93957342792420],["v8::internal::compiler::ParallelMove::PrepareInsertAfter(v8::internal::compiler::MoveOperands*, v8::internal::ZoneVector<v8::internal::compiler::MoveOperands*>*) const",93957342978432,93957342979576],["v8::internal::compiler::InstructionSequence::AddInstruction(v8::internal::compiler::Instruction*)",93957342999888,93957343000421],["v8::internal::compiler::FrameStateDescriptor::GetTotalSize() const",93957343002128,93957343002220],["std::__1::deque<int, v8::internal::RecyclingZoneAllocator<int> >::__add_back_capacity()",93957343007216,93957343007967],["v8::internal::compiler::VirtualRegisterData::EmitGapMoveToInputFromSpillSlot(v8::internal::compiler::InstructionOperand, int, v8::internal::compiler::MidTierRegisterAllocationData*)",93957343011168,93957343011575],["v8::internal::compiler::RegisterState::SpillForDeferred(v8::internal::compiler::RegisterIndex, v8::internal::compiler::AllocatedOperand, int, v8::internal::compiler::MidTierRegisterAllocationData*)",93957343013408,93957343013663],["v8::internal::compiler::SinglePassRegisterAllocator::SinglePassRegisterAllocator(v8::internal::compiler::RegisterKind, v8::internal::compiler::MidTierRegisterAllocationData*)",93957343014752,93957343015503],["v8::internal::compiler::SinglePassRegisterAllocator::MoveRegisterOnMerge(v8::internal::compiler::RegisterIndex, v8::internal::compiler::RegisterIndex, v8::internal::compiler::VirtualRegisterData&, v8::internal::compiler::RpoNumber, v8::internal::compiler::RegisterState*)",93957343017888,93957343018432],["v8::internal::compiler::SinglePassRegisterAllocator::CommitRegister(v8::internal::compiler::RegisterIndex, int, v8::internal::MachineRepresentation, v8::internal::compiler::InstructionOperand*, v8::internal::compiler::SinglePassRegisterAllocator::UsePosition)",93957343019056,93957343019324],["v8::internal::compiler::SinglePassRegisterAllocator::AllocateUse(v8::internal::compiler::RegisterIndex, v8::internal::compiler::VirtualRegisterData&, v8::internal::compiler::InstructionOperand*, int, v8::internal::compiler::SinglePassRegisterAllocator::UsePosition)",93957343019568,93957343020160],["v8::internal::compiler::SinglePassRegisterAllocator::AllocateInput(v8::internal::compiler::UnallocatedOperand*, v8::internal::compiler::VirtualRegisterData&, int)",93957343020480,93957343022148],["v8::internal::compiler::SinglePassRegisterAllocator::AllocateConstantOutput(v8::internal::compiler::ConstantOperand*, v8::internal::compiler::VirtualRegisterData&, int)",93957343022848,93957343023290],["v8::internal::compiler::SinglePassRegisterAllocator::AllocateSameInputOutput(v8::internal::compiler::UnallocatedOperand*, v8::internal::compiler::UnallocatedOperand*, v8::internal::compiler::VirtualRegisterData&, v8::internal::compiler::VirtualRegisterData&, int)",93957343024976,93957343025786],["v8::internal::compiler::SinglePassRegisterAllocator::ReserveFixedRegister(v8::internal::compiler::UnallocatedOperand const*, int, v8::internal::MachineRepresentation, int, v8::internal::compiler::SinglePassRegisterAllocator::UsePosition)",93957343026672,93957343027128],["v8::internal::compiler::MidTierOutputProcessor::PopulateDeferredBlockRegion(v8::internal::compiler::RpoNumber)",93957343027888,93957343030677],["v8::internal::compiler::MidTierOutputProcessor::DefineOutputs(v8::internal::compiler::InstructionBlock const*)",93957343031040,93957343032529],["bool std::__1::__function::__policy_invoker<bool (v8::internal::compiler::TopLevelLiveRange*)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::LinearScanAllocator::ComputeStateFromManyPredecessors(v8::internal::compiler::InstructionBlock*, v8::internal::ZoneUnorderedSet<v8::internal::compiler::LinearScanAllocator::RangeWithRegister, v8::internal::compiler::LinearScanAllocator::RangeWithRegister::Hash, v8::internal::compiler::LinearScanAllocator::RangeWithRegister::Equals>*)::$_2, bool (v8::internal::compiler::TopLevelLiveRange*)> >(std::__1::__function::__policy_storage const*, v8::internal::compiler::TopLevelLiveRange*)",93957343173808,93957343173821],["v8::internal::compiler::BytecodeGraphBuilder::Environment::BindRegistersToProjections(v8::internal::interpreter::Register, v8::internal::compiler::Node*, v8::internal::compiler::BytecodeGraphBuilder::Environment::FrameStateAttachmentMode)",93957343204592,93957343204935],["v8::internal::compiler::BytecodeGraphBuilder::ExitThenEnterExceptionHandlers(int)",93957343222304,93957343222964],["v8::internal::compiler::BytecodeGraphBuilder::VisitLdaImmutableContextSlot()",93957343226128,93957343226319],["v8::internal::compiler::BytecodeGraphBuilder::VisitLdaKeyedProperty()",93957343229280,93957343229762],["v8::internal::compiler::BytecodeGraphBuilder::VisitAdd()",93957343233264,93957343233364],["v8::internal::compiler::BytecodeGraphBuilder::VisitBitwiseAnd()",93957343234160,93957343234260],["v8::internal::compiler::BytecodeGraphBuilder::VisitModSmi()",93957343235056,93957343235156],["v8::internal::compiler::BytecodeGraphBuilder::VisitShiftRightSmi()",93957343235728,93957343235828],["v8::internal::compiler::BytecodeGraphBuilder::VisitNegate()",93957343236176,93957343236273],["v8::internal::compiler::BytecodeGraphBuilder::VisitTypeOf()",93957343236752,93957343236890],["v8::internal::compiler::BytecodeGraphBuilder::VisitCallProperty0()",93957343237696,93957343237854],["v8::internal::compiler::BytecodeGraphBuilder::VisitCallUndefinedReceiver0()",93957343238640,93957343238774],["v8::internal::compiler::BytecodeGraphBuilder::VisitCallWithSpread()",93957343239744,93957343240602],["v8::internal::compiler::BytecodeGraphBuilder::VisitInvokeIntrinsic()",93957343242784,93957343243153],["v8::internal::compiler::BytecodeGraphBuilder::VisitTestEqualStrict()",93957343244944,93957343245044],["v8::internal::compiler::BytecodeGraphBuilder::VisitTestLessThanOrEqual()",93957343245280,93957343245380],["v8::internal::compiler::BytecodeGraphBuilder::VisitTestReferenceEqual()",93957343245504,93957343245691],["v8::internal::compiler::BytecodeGraphBuilder::VisitTestIn()",93957343245808,93957343246166],["v8::internal::compiler::BytecodeGraphBuilder::VisitTestNull()",93957343246336,93957343246501],["v8::internal::compiler::BytecodeGraphBuilder::VisitTestTypeOf()",93957343246688,93957343247571],["v8::internal::compiler::BytecodeGraphBuilder::VisitToNumber()",93957343247744,93957343248085],["v8::internal::compiler::BytecodeGraphBuilder::VisitToObject()",93957343248448,93957343248601],["v8::internal::compiler::BytecodeGraphBuilder::VisitCreateRegExpLiteral()",93957343248736,93957343249013],["v8::internal::compiler::BytecodeGraphBuilder::VisitCreateArrayFromIterable()",93957343249328,93957343249448],["v8::internal::compiler::BytecodeGraphBuilder::VisitCreateObjectLiteral()",93957343249632,93957343249931],["v8::internal::compiler::BytecodeGraphBuilder::VisitCloneObject()",93957343250032,93957343250364],["v8::internal::compiler::BytecodeGraphBuilder::VisitCreateClosure()",93957343250672,93957343250982],["v8::internal::compiler::BytecodeGraphBuilder::VisitCreateCatchContext()",93957343251216,93957343251475],["v8::internal::compiler::BytecodeGraphBuilder::VisitCreateEvalContext()",93957343251728,93957343251967],["v8::internal::compiler::BytecodeGraphBuilder::VisitJumpIfNull()",93957343252240,93957343252381],["v8::internal::compiler::BytecodeGraphBuilder::VisitJumpIfUndefined()",93957343252528,93957343252669],["v8::internal::compiler::OperationTyper::NumberSign(v8::internal::compiler::Type)",93957344610704,93957344611074],["v8::internal::compiler::OperatorProperties::HasContextInput(v8::internal::compiler::Operator const*)",93957344621760,93957344621781],["v8::internal::compiler::PipelineCompilationJob::~PipelineCompilationJob()",93957344628496,93957344628612],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::MemoryOptimizationPhase>()",93957344640912,93957344641297],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::LoopPeelingPhase>()",93957344645520,93957344645905],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::EarlyOptimizationPhase>()",93957344648720,93957344649105],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::ScheduledEffectControlLinearizationPhase>()",93957344654672,93957344655182],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::CsaEarlyOptimizationPhase, bool const&>(bool const&)",93957344664768,93957344665172],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::ComputeSchedulePhase>()",93957344667776,93957344668191],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::FrameElisionPhase>()",93957344670496,93957344670891],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::AssembleCodePhase>()",93957344672416,93957344672790],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::BuildLiveRangesPhase>()",93957344673968,93957344674393],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::AllocateFPRegistersPhase<v8::internal::compiler::LinearScanAllocator>>()",93957344676304,93957344676870],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::ConnectRangesPhase>()",93957344678080,93957344678483],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::MidTierRegisterOutputDefinitionPhase>()",93957344679728,93957344680105],["v8::internal::compiler::WasmHeapStubCompilationJob::~WasmHeapStubCompilationJob()",93957344681264,93957344681387],["v8::internal::compiler::(anonymous namespace)::PrintFunctionSource(v8::internal::OptimizedCompilationInfo*, v8::internal::Isolate*, int, v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957344681744,93957344682859],["v8::internal::compiler::MemoryOptimizationPhase::Run(v8::internal::compiler::PipelineData*, v8::internal::Zone*)",93957344683264,93957344684001],["std::__1::__tree<std::__1::__value_type<unsigned int, v8::internal::ZoneVector<v8::internal::compiler::MemoryLowering::AllocationState const*> >, std::__1::__map_value_compare<unsigned int, std::__1::__value_type<unsigned int, v8::internal::ZoneVector<v8::internal::compiler::MemoryLowering::AllocationState const*> >, std::__1::less<unsigned int>, true>, v8::internal::ZoneAllocator<std::__1::__value_type<unsigned int, v8::internal::ZoneVector<v8::internal::compiler::MemoryLowering::AllocationState const*> > > >::destroy(std::__1::__tree_node<std::__1::__value_type<unsigned int, v8::internal::ZoneVector<v8::internal::compiler::MemoryLowering::AllocationState const*> >, void*>*)",93957344684832,93957344684888],["v8::internal::compiler::SerializationPhase::Run(v8::internal::compiler::PipelineData*, v8::internal::Zone*)",93957344686480,93957344686644],["v8::internal::compiler::InliningPhase::Run(v8::internal::compiler::PipelineData*, v8::internal::Zone*)",93957344686944,93957344689690],["v8::internal::compiler::(anonymous namespace)::SourcePositionWrapper::Reduce(v8::internal::compiler::Node*)",93957344689712,93957344689786],["v8::internal::compiler::EarlyGraphTrimmingPhase::Run(v8::internal::compiler::PipelineData*, v8::internal::Zone*)",93957344689952,93957344690143],["v8::internal::compiler::TyperPhase::Run(v8::internal::compiler::PipelineData*, v8::internal::Zone*, v8::internal::compiler::Typer*)",93957344690656,93957344692174],["v8::internal::compiler::LoopPeelingPhase::Run(v8::internal::compiler::PipelineData*, v8::internal::Zone*)",93957344694464,93957344694836],["v8::internal::compiler::EscapeAnalysisPhase::Run(v8::internal::compiler::PipelineData*, v8::internal::Zone*)",93957344697696,93957344699080],["v8::internal::compiler::SimplifiedLoweringPhase::Run(v8::internal::compiler::PipelineData*, v8::internal::Zone*, v8::internal::compiler::Linkage*)",93957344699520,93957344699710],["v8::internal::compiler::GenericLoweringPhase::Run(v8::internal::compiler::PipelineData*, v8::internal::Zone*)",93957344700864,93957344701371],["v8::internal::compiler::EffectControlLinearizationPhase::Run(v8::internal::compiler::PipelineData*, v8::internal::Zone*)",93957344703088,93957344704072],["v8::internal::compiler::ControlFlowOptimizationPhase::Run(v8::internal::compiler::PipelineData*, v8::internal::Zone*)",93957344704320,93957344704714],["v8::internal::compiler::MachineOperatorOptimizationPhase::Run(v8::internal::compiler::PipelineData*, v8::internal::Zone*)",93957344706592,93957344707298],["v8::internal::compiler::CsaEarlyOptimizationPhase::Run(v8::internal::compiler::PipelineData*, v8::internal::Zone*, bool)",93957344707584,93957344709602],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckedUint32Mod()",93957345042288,93957345042302],["v8::internal::compiler::FastApiCallNode::SlowCallArgumentCount() const",93957345057776,93957345057828],["v8::internal::compiler::Operator1<v8::internal::compiler::(anonymous namespace)::TransitionAndStoreNonNumberElementParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::(anonymous namespace)::TransitionAndStoreNonNumberElementParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::(anonymous namespace)::TransitionAndStoreNonNumberElementParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957345088080,93957345088201],["v8::internal::compiler::TypedOptimization::Reduce(v8::internal::compiler::Node*)",93957345106368,93957345107422],["v8::internal::compiler::Typer::Typer(v8::internal::compiler::JSHeapBroker*, v8::base::Flags<v8::internal::compiler::Typer::Flag, int>, v8::internal::compiler::Graph*, v8::internal::TickCounter*)",93957345117728,93957345117895],["v8::internal::compiler::Typer::Visitor::ObjectIsArrayBufferView(v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345129712,93957345129791],["v8::internal::compiler::Typer::Visitor::JSCompareTyper(v8::internal::compiler::Type, v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345131904,93957345132241],["v8::internal::compiler::Typer::Visitor::JSModulusTyper(v8::internal::compiler::Type, v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345135296,93957345135520],["v8::internal::compiler::Typer::Visitor::UpdateType(v8::internal::compiler::Node*, v8::internal::compiler::Type)",93957345138768,93957345139060],["v8::internal::compiler::Typer::Visitor::TypeCheckBounds(v8::internal::compiler::Node*)",93957345141760,93957345141882],["v8::internal::compiler::Typer::Visitor::TypeCheckString(v8::internal::compiler::Node*)",93957345142656,93957345142760],["v8::internal::compiler::Typer::Visitor::TypeToBoolean(v8::internal::compiler::Node*)",93957345143584,93957345143678],["v8::internal::compiler::Type::Min() const",93957345145360,93957345145822],["v8::internal::compiler::Type::SimplyEquals(v8::internal::compiler::Type) const",93957345147328,93957345147714],["v8::internal::compiler::Type::Range(double, double, v8::internal::Zone*)",93957345150432,93957345150668],["v8::internal::compiler::BitsetType::Print(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, unsigned int)",93957345155200,93957345155443],["v8::internal::compiler::ValueNumberingReducer::ValueNumberingReducer(v8::internal::Zone*, v8::internal::Zone*)",93957345156576,93957345156615],["v8::internal::compiler::Verifier::Visitor::CheckSwitch(v8::internal::compiler::Node*, v8::internal::compiler::AllNodes const&)",93957345157744,93957345158329],["v8::internal::compiler::Verifier::Visitor::CheckTypeIs(v8::internal::compiler::Node*, v8::internal::compiler::Type)",93957345167344,93957345167634],["v8::internal::compiler::ScheduleVerifier::Run(v8::internal::compiler::Schedule*)",93957345168896,93957345175070],["v8::internal::compiler::ZoneStats::StatsScope::GetMaxAllocatedBytes()",93957345176576,93957345176826],["v8::internal::compiler::ZoneStats::~ZoneStats()",93957345177392,93957345177449],["v8::internal::compiler::Int64Lowering::Int64Lowering(v8::internal::compiler::Graph*, v8::internal::compiler::MachineOperatorBuilder*, v8::internal::compiler::CommonOperatorBuilder*, v8::internal::compiler::SimplifiedOperatorBuilder*, v8::internal::Zone*, v8::internal::Signature<v8::internal::MachineRepresentation>*, std::__1::unique_ptr<v8::internal::compiler::Int64LoweringSpecialCase, std::__1::default_delete<v8::internal::compiler::Int64LoweringSpecialCase> >)",93957345178176,93957345178406],["v8::internal::compiler::Int64Lowering::LowerWord64AtomicBinop(v8::internal::compiler::Node*, v8::internal::compiler::Operator const*)",93957345193344,93957345193778],["v8::internal::compiler::Int64Lowering::DefaultLowering(v8::internal::compiler::Node*, bool)",93957345194832,93957345195276],["v8::internal::compiler::Int64Lowering::LowerComparison(v8::internal::compiler::Node*, v8::internal::compiler::Operator const*, v8::internal::compiler::Operator const*)",93957345197280,93957345197778],["v8::internal::compiler::SimdScalarLowering::LowerGraph()",93957345199280,93957345200121],["v8::internal::compiler::SimdScalarLowering::GetParameterCountAfterLowering()",93957345218352,93957345218540],["v8::internal::compiler::SimdScalarLowering::ReplaceNode(v8::internal::compiler::Node*, v8::internal::compiler::Node**, int)",93957345220448,93957345220725],["v8::internal::compiler::SimdScalarLowering::GetReplacementsWithType(v8::internal::compiler::Node*, v8::internal::compiler::SimdScalarLowering::SimdType)",93957345224656,93957345227193],["v8::internal::compiler::SimdScalarLowering::LowerBinaryOpForSmallInt(v8::internal::compiler::Node*, v8::internal::compiler::SimdScalarLowering::SimdType, v8::internal::compiler::Operator const*, bool)",93957345229024,93957345230294],["v8::internal::compiler::SimdScalarLowering::LowerIntMinMax(v8::internal::compiler::Node*, v8::internal::compiler::Operator const*, bool, v8::internal::compiler::SimdScalarLowering::SimdType)",93957345232512,93957345233482],["v8::internal::compiler::SimdScalarLowering::LowerConvertFromInt(v8::internal::compiler::Node*, v8::internal::compiler::SimdScalarLowering::SimdType, v8::internal::compiler::SimdScalarLowering::SimdType, bool, int)",93957345235376,93957345236334],["v8::internal::compiler::SimdScalarLowering::LowerShiftOp(v8::internal::compiler::Node*, v8::internal::compiler::SimdScalarLowering::SimdType)",93957345237504,93957345239078],["v8::internal::compiler::SimdScalarLowering::LowerBitMaskOp(v8::internal::compiler::Node*, v8::internal::compiler::SimdScalarLowering::SimdType, int)",93957345239776,93957345240663],["v8::internal::compiler::SimdScalarLowering::LowerFloatPseudoMinMax(v8::internal::compiler::Node*, v8::internal::compiler::Operator const*, bool, v8::internal::compiler::SimdScalarLowering::SimdType)",93957345241424,93957345242389],["v8::internal::compiler::SimdScalarLowering::ExtendNode(v8::internal::compiler::Node*, v8::internal::compiler::SimdScalarLowering::SimdType, bool)",93957345243056,93957345243256],["v8::internal::compiler::SimdScalarLowering::Int64ToFloat64(v8::internal::compiler::Node**, v8::internal::compiler::Node**)",93957345243600,93957345243764],["v8::internal::compiler::SimdScalarLowering::Float32ToInt32(v8::internal::compiler::Node**, v8::internal::compiler::Node**)",93957345243952,93957345244276],["v8::internal::compiler::SimdScalarLowering::Int32ToInt64(v8::internal::compiler::Node**, v8::internal::compiler::Node**)",93957345244832,93957345245306],["void v8::internal::compiler::SimdScalarLowering::SmallerIntToInt32<signed char>(v8::internal::compiler::Node**, v8::internal::compiler::Node**)",93957345245840,93957345246804],["void v8::internal::compiler::SimdScalarLowering::Int32ToSmallerInt<signed char>(v8::internal::compiler::Node**, v8::internal::compiler::Node**)",93957345247840,93957345248414],["v8::internal::compiler::WasmGraphBuilder::Start(unsigned int)",93957345248608,93957345248918],["v8::internal::compiler::WasmGraphBuilder::Loop(v8::internal::compiler::Node*)",93957345249056,93957345249127],["v8::internal::compiler::WasmGraphBuilder::LoopExit(v8::internal::compiler::Node*)",93957345249296,93957345249454],["v8::internal::compiler::WasmGraphBuilder::effect()",93957345249472,93957345249485],["v8::internal::compiler::WasmGraphBuilder::LoopExitValue(v8::internal::compiler::Node*, v8::internal::MachineRepresentation)",93957345249504,93957345249590],["v8::internal::compiler::WasmGraphBuilder::ThrowsException(v8::internal::compiler::Node*, v8::internal::compiler::Node**, v8::internal::compiler::Node**)",93957345249760,93957345249926],["v8::internal::compiler::WasmGraphBuilder::Merge(unsigned int, v8::internal::compiler::Node**)",93957345250032,93957345250092],["v8::internal::compiler::WasmGraphBuilder::EffectPhi(unsigned int, v8::internal::compiler::Node**)",93957345250176,93957345250237],["v8::internal::compiler::WasmGraphBuilder::BuildLoadIsolateRoot()",93957345250432,93957345250580],["v8::internal::compiler::WasmGraphBuilder::RefAsNonNull(v8::internal::compiler::Node*, int)",93957345250768,93957345250841],["v8::internal::compiler::WasmGraphBuilder::BuildLoadInstance()",93957345251040,93957345251372],["v8::internal::compiler::WasmGraphBuilder::Int32Constant(int)",93957345251616,93957345251630],["v8::internal::compiler::WasmGraphBuilder::StackCheck(int)",93957345251648,93957345252445],["v8::internal::compiler::WasmGraphBuilder::PatchInStackCheckIfNeeded()",93957345252480,93957345252634],["v8::internal::compiler::WasmGraphBuilder::BuildI32DivS(v8::internal::compiler::Node*, v8::internal::compiler::Node*, int)",93957345254384,93957345254799],["v8::internal::compiler::WasmGraphBuilder::BuildI32RemS(v8::internal::compiler::Node*, v8::internal::compiler::Node*, int)",93957345254864,93957345255246],["v8::internal::compiler::WasmGraphBuilder::MaskShiftCount32(v8::internal::compiler::Node*)",93957345255312,93957345255588],["v8::internal::compiler::WasmGraphBuilder::BuildI64DivS(v8::internal::compiler::Node*, v8::internal::compiler::Node*, int)",93957345255952,93957345256590],["v8::internal::compiler::WasmGraphBuilder::BuildI64RemS(v8::internal::compiler::Node*, v8::internal::compiler::Node*, int)",93957345256816,93957345257340],["v8::internal::compiler::WasmGraphBuilder::MaskShiftCount64(v8::internal::compiler::Node*)",93957345257568,93957345257724],["v8::internal::compiler::WasmGraphBuilder::BuildF32CopySign(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957345258064,93957345258426],["v8::internal::compiler::WasmGraphBuilder::BuildI32AsmjsDivS(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957345258768,93957345259724],["std::__1::basic_ostream<char, std::__1::char_traits<char> >::put(char)",93957346642272,93957346642517],["std::__1::basic_filebuf<char, std::__1::char_traits<char> >::seekoff(long long, std::__1::ios_base::seekdir, unsigned int)",93957346647568,93957346647750],["std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_ostringstream()",93957346649424,93957346649518],["std::__1::basic_ifstream<char, std::__1::char_traits<char> >::~basic_ifstream()",93957346650320,93957346650380],["std::__1::__stdoutbuf<wchar_t>::__stdoutbuf(_IO_FILE*, __mbstate_t*)",93957346652096,93957346652236],["std::__1::__stdinbuf<char>::uflow()",93957346652432,93957346652447],["std::__1::__stdinbuf<wchar_t>::imbue(std::__1::locale const&)",93957346653104,93957346653185],["std::__1::__stdinbuf<wchar_t>::__getchar(bool)",93957346653472,93957346653841],["std::__1::__stdoutbuf<char>::xsputn(char const*, long)",93957346654080,93957346654188],["std::__1::__stdoutbuf<wchar_t>::imbue(std::__1::locale const&)",93957346654496,93957346654551],["std::__1::__stdoutbuf<wchar_t>::overflow(unsigned int)",93957346654672,93957346654976],["_GLOBAL__sub_I_iostream.cpp",93957346655088,93957346655094],["std::__1::collate<char>::do_compare(char const*, char const*, char const*, char const*) const",93957346655120,93957346655188],["std::__1::collate<char>::do_hash(char const*, char const*) const",93957346655360,93957346655433],["std::__1::collate<wchar_t>::do_transform(wchar_t const*, wchar_t const*) const",93957346655520,93957346655711],["std::__1::num_get<char, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > >::do_get(std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, unsigned int&, bool&) const",93957346655792,93957346656519],["rand_r",139871563519904,139871563519979],["lrand48_r",139871563520656,139871563520678],["lcong48_r",139871563520944,139871563521005],["strfromd",139871563522000,139871563522587],["strtol",139871563523216,139871563523234],["strtoul",139871563523264,139871563523282],["__strtoul_l",139871563525808,139871563525818],["strtof",139871563525840,139871563525858],["parse_printf_format",139871563603920,139871563604233],["printf_size_info",139871563615248,139871563615276],["_IO_sprintf",139871563615856,139871563616049],["__vfscanf",139871563616464,139871563616471],["_IO_sscanf",139871563616896,139871563617200],["tmpnam",139871563618112,139871563618274],["getline",139871563619824,139871563619837],["putw",139871563619936,139871563619983],["rename",139871563620048,139871563620082],["renameat2",139871563620144,139871563620253],["ftrylockfile",139871563620368,139871563620483],["__isoc99_scanf",139871563620576,139871563620779],["__isoc99_fscanf",139871563620816,139871563620998],["__isoc99_sscanf",139871563621024,139871563621331],["_IO_wdefault_uflow",139871563755760,139871563755871],["open_wmemstream",139871563769216,139871563769448],["_IO_putc",139871563772704,139871563773036],["obstack_vprintf",139871563775312,139871563775319],["__fbufsize",139871563776912,139871563776953],["__fwritable",139871563777056,139871563777065],["__fsetlocking",139871563777248,139871563777282],["__libc_readline_unlocked",139871563780048,139871563780778],["ferror_unlocked",139871563780816,139871563780825],["fgetc_unlocked",139871563780880,139871563780917],["fflush_unlocked",139871563780976,139871563781065],["_IO_peekc_locked",139871563781120,139871563781365],["fwrite_unlocked",139871563781472,139871563781673],["fputs_unlocked",139871563781840,139871563781991],["_IO_file_close",139871563782352,139871563782360],["_IO_file_seek",139871563783536,139871563783544],["_IO_file_fopen",139871563788704,139871563789884],["_IO_do_write",139871563790064,139871563790102],["_IO_file_overflow",139871563790944,139871563791469],["_IO_link_in",139871563792512,139871563793221],["__overflow",139871563794032,139871563794144],["_IO_doallocbuf",139871563794944,139871563795127],["_IO_default_xsgetn",139871563795632,139871563795797],["_IO_default_finish",139871563796800,139871563796919],["_IO_adjust_column",139871563797200,139871563797247],["_flushlbf",139871563798992,139871563799747],["_IO_remove_marker",139871563799856,139871563799908],["_IO_marker_delta",139871563799936,139871563799983],["_IO_unsave_markers",139871563800112,139871563800198],["_IO_iter_begin",139871563800640,139871563800648],["_IO_iter_next",139871563800672,139871563800677],["_IO_list_lock",139871563800704,139871563800799],["_IO_list_resetlock",139871563800896,139871563800919],["_IO_str_overflow",139871563801024,139871563801423],["_IO_str_init_static",139871563802144,139871563802162],["_IO_str_seekoff",139871563802240,139871563802874],["pthread_attr_getschedpolicy",139871563802960,139871563802995],["pthread_attr_getscope",139871563803056,139871563803091],["pthread_condattr_destroy",139871563803152,139871563803187],["pthread_cond_broadcast",139871563803248,139871563803283],["calloc",139871563828816,139871563829737],["__default_morecore",139871563832240,139871563832267],["_obstack_begin",139871563837632,139871563837803],["__libc_scratch_buffer_grow_preserve",139871563838768,139871563838929],["__libc_alloc_buffer_allocate",139871563840048,139871563840123],["__strndup",139871563841136,139871563841201],["__ffs",139871563845840,139871563845855],["memmem",139871563850512,139871563851077],["argz_extract",139871563852112,139871563852178],["envz_add",139871563854016,139871563854291],["__strsep_2c",139871563867056,139871563867132],["__strpbrk_c2",139871563867584,139871563867639],["strerror_l",139871563868688,139871563868936],["wcscat",139871563948608,139871563948649],["wcsncpy",139871563949152,139871563949232],["wcsstr",139871563949632,139871563949830],["wcpncpy",139871563950192,139871563950286],["mbsinit",139871563951120,139871563951140],["mbsrtowcs",139871563952208,139871563952238],["wcschrnul",139871563954528,139871563954560],["wcstoul",139871563954624,139871563954642],["wcstof64x",139871563954720,139871563954738],["__wcstoul_l",139871563956976,139871563956986],["wcscoll",139871563986864,139871563986880],["__wcscoll_l",139871563987168,139871563990695],["__wcscasecmp_l",139871563997424,139871563997523],["__isoc99_fwscanf",139871564000480,139871564000662],["mbrtoc16",139871564001184,139871564001875],["c32rtomb",139871564002096,139871564002115],["__wcstof128_internal",139871564013008,139871564013024],["asctime_r",139871564021424,139871564021434],["clock",139871564021472,139871564021598],["ctime_r",139871564021632,139871564021702],["__gmtime_r",139871564021744,139871564021757],["localtime_r",139871564021792,139871564021808],["mktime",139871564023984,139871564024016],["adjtime",139871564024768,139871564025107],["getitimer",139871564034944,139871564034977],["dysize",139871564035040,139871564035108],["ftime",139871564035152,139871564035265],["getdate",139871564037136,139871564037196],["strptime_l",139871564049440,139871564049450],["wcsftime",139871564049472,139871564049488],["__wcsftime_l",139871564069360,139871564069428],["clock_getcpuclockid",139871564069488,139871564069541],["__clock_gettime",139871564069664,139871564069775],["clock_nanosleep",139871564069856,139871564070003],["ntp_gettimex",139871564072256,139871564072405],["closedir",139871564072976,139871564073017],["seekdir",139871564073200,139871564073363],["getdents64",139871564073392,139871564073444],["readdir",139871564073472,139871564073740],["scandir",139871564074288,139871564074329],["versionsort",139871564074368,139871564074387],["scandirat",139871564074592,139871564074633],["fgetgrent",139871564075280,139871564075796],["initgroups",139871564077472,139871564077725],["getgrent",139871564077872,139871564078058],["getgrnam",139871564078512,139871564078950],["setgrent",139871564079696,139871564079898],["quick_exit",139871564538816,139871564538839],["pthread_cond_signal",139871564539136,139871564539171],["malloc_get_state",139871564539344,139871564539361],["stime",139871564539616,139871564539686],["register_tm_clones",139871566579168,139871566579232],["__pthread_join",139871566590448,139871566590463],["pthread_setconcurrency",139871566591360,139871566591382],["pthread_attr_getguardsize",139871566592304,139871566592314],["__pthread_attr_setschedpolicy",139871566592352,139871566592378],["__pthread_attr_setscope",139871566592400,139871566592431],["__pthread_attr_setstackaddr",139871566592448,139871566592459],["__pthread_attr_setstacksize",139871566592576,139871566592599],["__pthread_mutex_clocklock_common",139871566598192,139871566600895],["__pthread_mutex_cond_lock",139871566604000,139871566604601],["pthread_mutexattr_setpshared",139871566604800,139871566604841],["__pthread_rwlock_destroy",139871566604976,139871566604979],["pthread_rwlock_clockrdlock",139871566606256,139871566606971],["pthread_rwlock_timedwrlock",139871566607936,139871566608957],["__pthread_rwlock_tryrdlock",139871566610112,139871566610278],["__GI___pthread_rwlock_unlock",139871566610384,139871566610838],["__condvar_cancel_waiting",139871566611440,139871566611765],["__pthread_cond_timedwait_2_0",139871566616256,139871566616389],["pthread_sigmask",139871566618144,139871566618372],["do_futex_wait",139871566624112,139871566624321],["__fcntl_alias",139871566626624,139871566626709],["msync",139871566628464,139871566628619],["__libc_sendmsg",139871566630400,139871566630557],["__res_state",139871566631808,139871566631820],["pthread_setaffinity_np@GLIBC_2.3.3",139871566632048,139871566632061],["pthread_mutexattr_setrobust",139871566632416,139871566632462],["pthread_mutexattr_getprotocol",139871566633232,139871566633245],["__init_sched_fifo_prio",139871566633552,139871566633593],["pthread_getname_np",139871566635776,139871566636082],["thrd_detach",139871566636832,139871566636910],["mtx_init",139871566637088,139871566637280],["mtx_unlock",139871566637520,139871566637598],["cnd_init",139871566637712,139871566637790],["cnd_wait",139871566637952,139871566638030],["tss_delete",139871566638112,139871566638117],["tss_set",139871566638144,139871566638222],["_dl_tunable_set_elision_skip_trylock_internal_abort",139871566638384,139871566638394],["_dl_rtld_di_serinfo",139871566937056,139871566937711],["_dl_mcount",139871566971024,139871566971616],["_dl_allocate_tls_init",139871566973568,139871566974142],["_dl_deallocate_tls",139871566974256,139871566974375],["_dl_find_dso_for_object",139871566976864,139871566977060],["_dl_exception_create_format",139871566989232,139871566990408],["__tunable_get_val",139871566994576,139871566994677],["__get_cpu_features",139871566996608,139871566996616],["calloc",139871567004512,139871567004568],["realloc",139871567005040,139871567005178],["_dl_signal_error",139871567005776,139871567005855],["_dl_catch_error",139871567006352,139871567006417],["v8::DelayedTasksPlatform::DelayedTaskRunner::IdleTasksEnabled()",93957335211488,93957335211503],["v8::DelayedTasksPlatform::CallDelayedOnWorkerThread(std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> >, double)",93957335212096,93957335212233],["Cr_z_zcfree",93957335308896,93957335308909],["v8::Deserializer::~Deserializer()",93957335311296,93957335311370],["v8::(anonymous namespace)::ArrayBufferAllocatorBase::~ArrayBufferAllocatorBase()",93957335311536,93957335311592],["v8::(anonymous namespace)::ShellArrayBufferAllocator::AllocateUninitialized(unsigned long)",93957335311696,93957335311792],["v8::internal::FactoryBase<v8::internal::Factory>::NewBigInt(int, v8::internal::AllocationType)",93957336836512,93957336836668],["v8::internal::FactoryBase<v8::internal::LocalFactory>::NewFixedArray(int, v8::internal::AllocationType)",93957336838592,93957336838637],["v8::internal::FactoryBase<v8::internal::LocalFactory>::NewWeakFixedArray(int, v8::internal::AllocationType)",93957336839456,93957336839497],["v8::internal::FactoryBase<v8::internal::LocalFactory>::NewArrayBoilerplateDescription(v8::internal::ElementsKind, v8::internal::Handle<v8::internal::FixedArrayBase>)",93957336840448,93957336840602],["v8::internal::FactoryBase<v8::internal::LocalFactory>::NewSharedFunctionInfoForLiteral(v8::internal::FunctionLiteral*, v8::internal::Handle<v8::internal::Script>, bool)",93957336841216,93957336841372],["v8::internal::FactoryBase<v8::internal::LocalFactory>::NewPreparseData(int, int)",93957336842256,93957336842477],["v8::internal::FactoryBase<v8::internal::LocalFactory>::NewUncompiledDataWithPreparseData(v8::internal::Handle<v8::internal::String>, int, int, v8::internal::Handle<v8::internal::PreparseData>)",93957336842496,93957336842512],["v8::internal::FactoryBase<v8::internal::LocalFactory>::NewCoverageInfo(v8::internal::ZoneVector<v8::internal::SourceRange> const&)",93957336842752,93957336842983],["v8::internal::WorkerThreadRuntimeCallStatsScope& v8::base::Optional<v8::internal::WorkerThreadRuntimeCallStatsScope>::emplace<v8::internal::WorkerThreadRuntimeCallStats*>(v8::internal::WorkerThreadRuntimeCallStats*&&)",93957336920864,93957336920929],["v8::internal::GCTracer::ContextDisposalRateInMilliseconds() const",93957336937680,93957336937901],["v8::internal::GCTracer::CurrentEmbedderAllocationThroughputInBytesPerMillisecond() const",93957336940624,93957336940856],["v8::internal::MemoryController<v8::internal::V8HeapTrait>::GrowingFactor(v8::internal::Heap*, unsigned long, double, double)",93957336941888,93957336942187],["v8::internal::WriteBarrier::MarkingSlow(v8::internal::Heap*, v8::internal::HeapObject, v8::internal::CompressedHeapObjectSlot, v8::internal::HeapObject)",93957336943280,93957336943357],["v8::internal::WriteBarrier::MarkingFromCode(unsigned long, unsigned long)",93957336943600,93957336943736],["v8::internal::Heap_GenerationalBarrierForCodeSlow(v8::internal::Code, v8::internal::RelocInfo*, v8::internal::HeapObject)",93957336944384,93957336944514],["v8::internal::Heap::SetBasicBlockProfilingData(v8::internal::Handle<v8::internal::ArrayList>)",93957336944768,93957336944784],["v8::internal::Heap::~Heap()",93957336945776,93957336947219],["v8::internal::Heap::HeapSizeFromPhysicalMemory(unsigned long)",93957336947264,93957336947430],["v8::internal::Heap::HasBeenSetUp() const",93957336947616,93957336947633],["v8::internal::Heap::CommittedOldGenerationMemory()",93957336947744,93957336947899],["v8::internal::Heap::CommittedPhysicalMemory()",93957336948144,93957336948313],["v8::internal::SpaceIterator::Next()",93957336948336,93957336948365],["v8::internal::Heap::Available()",93957336948400,93957336948599],["v8::internal::Heap::CanExpandOldGenerationBackground(unsigned long)",93957336948864,93957336948931],["v8::internal::IncrementalMarking::AdvanceOnAllocation()",93957337057136,93957337058029],["v8::internal::IncrementalMarking::PauseBlackAllocation()",93957337062272,93957337062415],["v8::internal::IncrementalMarking::EmbedderStep(double, double*)",93957337064672,93957337065556],["v8::internal::IncrementalMarking::MarkingComplete(v8::internal::IncrementalMarking::CompletionAction)",93957337066432,93957337066919],["v8::internal::IncrementalMarking::Step(double, v8::internal::IncrementalMarking::CompletionAction, v8::internal::StepOrigin)",93957337068112,93957337068952],["v8::internal::IncrementalMarking::ComputeStepSizeInBytes(v8::internal::StepOrigin)",93957337069232,93957337069465],["v8::internal::IncrementalMarkingRootMarkingVisitor::VisitRootPointer(v8::internal::Root, char const*, v8::internal::FullObjectSlot)",93957337069536,93957337069549],["void heap::base::Worklist<v8::internal::HeapObject, (unsigned short)64>::Update<v8::internal::IncrementalMarking::UpdateMarkingWorklistAfterScavenge()::$_2>(v8::internal::IncrementalMarking::UpdateMarkingWorklistAfterScavenge()::$_2)",93957337069808,93957337070243],["v8::internal::SemiSpace::InitializePage(v8::internal::MemoryChunk*)",93957337441696,93957337441837],["v8::internal::NewSpace::EnsureAllocation(int, v8::internal::AllocationAlignment)",93957337449120,93957337449291],["v8::internal::FieldStatsCollector::GetInobjectFieldStats(v8::internal::Map)",93957337450448,93957337451266],["v8::internal::ObjectStats::CheckpointObjectStats()",93957337469792,93957337470130],["v8::internal::ObjectStatsCollectorImpl::RecordVirtualJSObjectDetails(v8::internal::JSObject)",93957337472432,93957337473537],["v8::internal::ObjectStatsCollectorImpl::RecordVirtualMapDetails(v8::internal::Map)",93957337476064,93957337476995],["v8::internal::ObjectStatsCollectorImpl::RecordVirtualContext(v8::internal::Context)",93957337478160,93957337478436],["v8::internal::ObjectStatsCollectorImpl::CollectGlobalStatistics()",93957337479536,93957337480041],["std::__1::basic_ostream<char, std::__1::char_traits<char> >& v8::internal::operator<< <unsigned long*>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::PrintIteratorRange<unsigned long*> const&)",93957337481600,93957337481766],["v8::internal::FieldStatsCollector::~FieldStatsCollector()",93957337481856,93957337481938],["v8::internal::FieldStatsCollector::VisitEmbeddedPointer(v8::internal::Code, v8::internal::RelocInfo*)",93957337481984,93957337481998],["v8::internal::Object v8::internal::VisitWeakList<v8::internal::Context>(v8::internal::Heap*, v8::internal::Object, v8::internal::WeakObjectRetainer*)",93957337482800,93957337483772],["v8::internal::WeakListVisitor<v8::internal::Context>::VisitPhantomObject(v8::internal::Heap*, v8::internal::Context)",93957337484672,93957337485111],["v8::internal::Object v8::internal::VisitWeakList<v8::internal::JSFinalizationRegistry>(v8::internal::Heap*, v8::internal::Object, v8::internal::WeakObjectRetainer*)",93957337485968,93957337486904],["v8::internal::Object v8::internal::VisitWeakList<v8::internal::Code>(v8::internal::Heap*, v8::internal::Object, v8::internal::WeakObjectRetainer*)",93957337487360,93957337488157],["v8::internal::PagedSpaceObjectIterator::AdvanceToNextPage()",93957337488432,93957337488484],["v8::internal::JavaScriptFrameIterator::JavaScriptFrameIterator(v8::internal::Isolate*)",93957337629056,93957337629101],["v8::internal::Stats_Runtime_LoadElementWithInterceptor(int, unsigned long*, v8::internal::Isolate*)",93957337701472,93957337702692],["v8::internal::Genesis::CreateNewGlobals(v8::Local<v8::ObjectTemplate>, v8::internal::Handle<v8::internal::JSGlobalProxy>)",93957337727792,93957337729401],["v8::internal::Genesis::InstallABunchOfRandomThings()",93957337803296,93957337808332],["v8::internal::V8::Initialize()",93957337817872,93957337817999],["v8::internal::interpreter::BytecodeArrayBuilder::BinaryOperation(v8::internal::Token::Value, v8::internal::interpreter::Register, int)",93957337820176,93957337823630],["v8::internal::interpreter::BytecodeArrayBuilder::LoadLiteral(v8::internal::AstRawString const*)",93957337833200,93957337833487],["v8::internal::interpreter::BytecodeArrayBuilder::LoadLookupSlot(v8::internal::AstRawString const*, v8::internal::TypeofMode)",93957337839552,93957337840022],["v8::internal::interpreter::BytecodeArrayBuilder::CollectTypeProfile(int)",93957337845328,93957337845592],["v8::internal::interpreter::BytecodeArrayBuilder::LoadClassFieldsInitializer(v8::internal::interpreter::Register, int)",93957337848144,93957337848587],["v8::internal::interpreter::BytecodeArrayBuilder::CreateRegExpLiteral(v8::internal::AstRawString const*, int, int)",93957337851136,93957337851466],["v8::internal::interpreter::BytecodeArrayBuilder::PushContext(v8::internal::interpreter::Register)",93957337853600,93957337853986],["v8::internal::interpreter::BytecodeArrayBuilder::Bind(v8::internal::interpreter::BytecodeJumpTable*, int)",93957337855744,93957337855812],["v8::internal::interpreter::BytecodeArrayBuilder::JumpIfNotNull(v8::internal::interpreter::BytecodeLabel*)",93957337857504,93957337857771],["v8::internal::interpreter::BytecodeArrayBuilder::SwitchOnSmiNoFeedback(v8::internal::interpreter::BytecodeJumpTable*)",93957337859328,93957337859741],["v8::internal::interpreter::BytecodeArrayBuilder::ThrowIfNotSuperConstructor(v8::internal::interpreter::Register)",93957337861376,93957337861695],["v8::internal::interpreter::BytecodeArrayBuilder::ForInNext(v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::RegisterList, int)",93957337863376,93957337863959],["v8::internal::interpreter::BytecodeArrayBuilder::SuspendGenerator(v8::internal::interpreter::Register, v8::internal::interpreter::RegisterList, int)",93957337864976,93957337865533],["v8::internal::interpreter::BytecodeArrayBuilder::CallUndefinedReceiver(v8::internal::interpreter::Register, v8::internal::interpreter::RegisterList, int)",93957337868704,93957337870628],["v8::internal::interpreter::BytecodeArrayBuilder::Construct(v8::internal::interpreter::Register, v8::internal::interpreter::RegisterList, int)",93957337872240,93957337872800],["v8::internal::interpreter::BytecodeArrayBuilder::CallRuntime(v8::internal::Runtime::FunctionId)",93957337874208,93957337874223],["v8::internal::interpreter::BytecodeArrayBuilder::Delete(v8::internal::interpreter::Register, v8::internal::LanguageMode)",93957337875232,93957337875886],["v8::internal::interpreter::BytecodeArrayBuilder::AllocateDeferredConstantPoolEntry()",93957337876032,93957337876046],["v8::internal::interpreter::RegisterTransferWriter::EmitStar(v8::internal::interpreter::Register)",93957337876288,93957337876496],["v8::internal::Handle<v8::internal::Object> v8::internal::interpreter::BytecodeArrayIterator::GetConstantForIndexOperand<v8::internal::LocalIsolate>(int, v8::internal::LocalIsolate*) const",93957337877008,93957337877193],["v8::internal::interpreter::BytecodeArrayIterator::SetOffset(int)",93957337877488,93957337877575],["v8::internal::interpreter::BytecodeArrayIterator::GetFlagOperand(int) const",93957337877760,93957337877811],["v8::internal::interpreter::BytecodeArrayIterator::GetParameter(int) const",93957337878016,93957337878043],["v8::internal::interpreter::BytecodeArrayIterator::GetIntrinsicIdOperand(int) const",93957337878368,93957337878452],["v8::internal::interpreter::BytecodeArrayIterator::PrintTo(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) const",93957337879024,93957337879063],["v8::internal::interpreter::JumpTableTargetOffsets::iterator::operator!=(v8::internal::interpreter::JumpTableTargetOffsets::iterator const&)",93957337879680,93957337879695],["v8::internal::interpreter::BytecodeArrayRandomIterator::Initialize()",93957337880352,93957337881339],["v8::internal::Handle<v8::internal::BytecodeArray> v8::internal::interpreter::BytecodeArrayWriter::ToBytecodeArray<v8::internal::Isolate>(v8::internal::Isolate*, int, int, v8::internal::Handle<v8::internal::ByteArray>)",93957337881440,93957337881641],["v8::internal::Handle<v8::internal::ByteArray> v8::internal::interpreter::BytecodeArrayWriter::ToSourcePositionTable<v8::internal::Isolate>(v8::internal::Isolate*)",93957337881856,93957337881888],["v8::internal::interpreter::BytecodeArrayWriter::BytecodeArrayWriter(v8::internal::Zone*, v8::internal::interpreter::ConstantArrayBuilder*, v8::internal::SourcePositionTableBuilder::RecordingMode)",93957337881920,93957337882462],["v8::internal::interpreter::BytecodeArrayWriter::EmitBytecode(v8::internal::interpreter::BytecodeNode const*)",93957337882800,93957337887982],["v8::internal::interpreter::BytecodeArrayWriter::EmitJump(v8::internal::interpreter::BytecodeNode*, v8::internal::interpreter::BytecodeLabel*)",93957337888352,93957337888563],["v8::internal::interpreter::BytecodeArrayWriter::EmitJumpLoop(v8::internal::interpreter::BytecodeNode*, v8::internal::interpreter::BytecodeLoopHeader*)",93957337888944,93957337889150],["v8::internal::interpreter::BytecodeArrayWriter::BindLabel(v8::internal::interpreter::BytecodeLabel*)",93957337889536,93957337889589],["v8::internal::interpreter::BytecodeArrayWriter::BindLoopHeader(v8::internal::interpreter::BytecodeLoopHeader*)",93957337889760,93957337889791],["v8::internal::interpreter::BytecodeArrayWriter::BindHandlerTarget(v8::internal::interpreter::HandlerTableBuilder*, int)",93957337889872,93957337889912],["v8::internal::interpreter::BytecodeArrayWriter::BindTryRegionEnd(v8::internal::interpreter::HandlerTableBuilder*, int)",93957337889968,93957337890001],["v8::internal::interpreter::BytecodeArrayWriter::PatchJumpWith8BitOperand(unsigned long, int)",93957337890064,93957337890304],["v8::internal::interpreter::BytecodeArrayWriter::PatchJumpWith32BitOperand(unsigned long, int)",93957337890560,93957337890726],["v8::internal::interpreter::BytecodeDecoder::DecodeRegisterOperand(unsigned long, v8::internal::interpreter::OperandType, v8::internal::interpreter::OperandScale)",93957337891280,93957337891379],["v8::internal::interpreter::BytecodeDecoder::DecodeUnsignedOperand(unsigned long, v8::internal::interpreter::OperandType, v8::internal::interpreter::OperandScale)",93957337891472,93957337891550],["v8::internal::interpreter::CreateArrayLiteralFlags::Encode(bool, int)",93957337894192,93957337894206],["v8::internal::interpreter::CreateClosureFlags::Encode(bool, bool, bool)",93957337894224,93957337894251],["v8::internal::interpreter::StoreLookupSlotFlags::Encode(v8::internal::LanguageMode, v8::internal::LookupHoistingMode)",93957337894384,93957337894400],["void v8::internal::interpreter::BytecodeGenerator::AllocateDeferredConstants<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Script>)",93957337894800,93957337895494],["void v8::internal::interpreter::BytecodeGenerator::AllocateDeferredConstants<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*, v8::internal::Handle<v8::internal::Script>)",93957337895904,93957337896524],["v8::internal::Handle<v8::internal::ByteArray> v8::internal::interpreter::BytecodeGenerator::FinalizeSourcePositionTable<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*)",93957337896624,93957337896705],["v8::internal::Handle<v8::internal::FixedArray> v8::internal::interpreter::BytecodeGenerator::TopLevelDeclarationsBuilder::AllocateDeclarations<v8::internal::LocalIsolate>(v8::internal::UnoptimizedCompilationInfo*, v8::internal::interpreter::BytecodeGenerator*, v8::internal::Handle<v8::internal::Script>, v8::internal::LocalIsolate*)",93957337898176,93957337899624],["v8::internal::interpreter::BytecodeGenerator::GenerateBytecode(unsigned long)",93957337900336,93957337901031],["v8::internal::interpreter::BytecodeGenerator::BuildNewLocalActivationContext()",93957337901248,93957337901601],["v8::internal::interpreter::BytecodeGenerator::GenerateBytecodeBody()",93957337901872,93957337903160],["v8::internal::interpreter::BytecodeGenerator::VisitModuleDeclarations(v8::base::ThreadedListBase<v8::internal::Declaration, v8::base::EmptyBase, v8::base::ThreadedListTraits<v8::internal::Declaration> >*)",93957337903568,93957337903933],["v8::internal::interpreter::BytecodeGenerator::BuildPrivateBrandInitialization(v8::internal::interpreter::Register)",93957337904272,93957337904635],["v8::internal::interpreter::BytecodeGenerator::BuildReturn(int)",93957337904976,93957337905246],["v8::internal::interpreter::BytecodeGenerator::VisitBlockDeclarationsAndStatements(v8::internal::Block*)",93957337905744,93957337906292],["v8::internal::interpreter::BytecodeGenerator::VisitFunctionDeclaration(v8::internal::FunctionDeclaration*)",93957337906752,93957337907095],["v8::internal::interpreter::BytecodeGenerator::BuildVariableAssignment(v8::internal::Variable*, v8::internal::Token::Value, v8::internal::HoleCheckMode, v8::internal::LookupHoistingMode)",93957337907744,93957337909135],["v8::internal::interpreter::BytecodeGenerator::AddToEagerLiteralsIfEager(v8::internal::FunctionLiteral*)",93957337909360,93957337909649],["v8::internal::interpreter::BytecodeGenerator::VisitExpressionStatement(v8::internal::ExpressionStatement*)",93957337909728,93957337909941],["v8::internal::RegExpParser::ParseNamedBackReference(v8::internal::RegExpBuilder*, v8::internal::RegExpParser::RegExpParserState*)",93957339896240,93957339896885],["v8::internal::RegExpStackScope::RegExpStackScope(v8::internal::Isolate*)",93957339913712,93957339913765],["v8::internal::RegExp::ThrowRegExpException(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSRegExp>, v8::internal::Handle<v8::internal::String>, v8::internal::RegExpError)",93957339917584,93957339917717],["v8::internal::RegExp::Exec(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSRegExp>, v8::internal::Handle<v8::internal::String>, int, v8::internal::Handle<v8::internal::RegExpMatchInfo>, v8::internal::RegExp::ExecQuirks)",93957339919968,93957339920065],["v8::internal::RegExpImpl::IrregexpExecRaw(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSRegExp>, v8::internal::Handle<v8::internal::String>, int, int*, int)",93957339924784,93957339925648],["v8::internal::RegExpGlobalCache::AdvanceZeroLength(int)",93957339926928,93957339927157],["v8::internal::RegExpResultsCache::Enter(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::FixedArray>, v8::internal::Handle<v8::internal::FixedArray>, v8::internal::RegExpResultsCache::ResultsCacheType)",93957339927792,93957339929588],["v8::internal::Stats_Runtime_TransitionElementsKind(int, unsigned long*, v8::internal::Isolate*)",93957339930032,93957339930715],["v8::internal::Runtime_NewArray(int, unsigned long*, v8::internal::Isolate*)",93957339931600,93957339932467],["v8::internal::Runtime_NormalizeElements(int, unsigned long*, v8::internal::Isolate*)",93957339933760,93957339934062],["v8::internal::Runtime_GrowArrayElements(int, unsigned long*, v8::internal::Isolate*)",93957339934768,93957339935196],["v8::internal::Runtime_ArrayIsArray(int, unsigned long*, v8::internal::Isolate*)",93957339936016,93957339936261],["v8::internal::Runtime_IsArray(int, unsigned long*, v8::internal::Isolate*)",93957339936928,93957339937029],["v8::internal::Runtime_ArraySpeciesConstructor(int, unsigned long*, v8::internal::Isolate*)",93957339937616,93957339937760],["v8::internal::Runtime_ArrayIncludes_Slow(int, unsigned long*, v8::internal::Isolate*)",93957339938304,93957339940219],["v8::internal::Runtime_ArrayIndexOf(int, unsigned long*, v8::internal::Isolate*)",93957339942512,93957339944396],["v8::internal::Runtime_DebugBreakOnBytecode(int, unsigned long*, v8::internal::Isolate*)",93957340013728,93957340014443],["v8::internal::Runtime_DebugBreakAtEntry(int, unsigned long*, v8::internal::Isolate*)",93957340015632,93957340015973],["v8::internal::Runtime_HandleDebuggerStatement(int, unsigned long*, v8::internal::Isolate*)",93957340016768,93957340016845],["v8::internal::Runtime_ScheduleBreak(int, unsigned long*, v8::internal::Isolate*)",93957340017360,93957340017427],["v8::internal::Runtime::GetInternalProperties(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)",93957340017888,93957340024238],["v8::internal::Handle<v8::internal::String> v8::internal::Factory::NewStringFromStaticChars<16ul>(char const (&) [16ul], v8::internal::AllocationType)",93957340024304,93957340024365],["v8::internal::Handle<v8::internal::String> v8::internal::Factory::NewStringFromStaticChars<19ul>(char const (&) [19ul], v8::internal::AllocationType)",93957340024432,93957340024493],["v8::internal::Handle<v8::internal::Object> v8::internal::FactoryBase<v8::internal::Factory>::NewNumberFromSize<(v8::internal::AllocationType)0>(unsigned long)",93957340024560,93957340024724],["v8::internal::Stats_Runtime_GetGeneratorScopeCount(int, unsigned long*, v8::internal::Isolate*)",93957340025104,93957340025909],["v8::internal::Stats_Runtime_GetGeneratorScopeDetails(int, unsigned long*, v8::internal::Isolate*)",93957340026656,93957340027834],["v8::internal::Stats_Runtime_SetGeneratorScopeVariableValue(int, unsigned long*, v8::internal::Isolate*)",93957340028624,93957340029850],["v8::internal::Stats_Runtime_GetBreakLocations(int, unsigned long*, v8::internal::Isolate*)",93957340030208,93957340030939],["v8::internal::Stats_Runtime_IsBreakOnException(int, unsigned long*, v8::internal::Isolate*)",93957340031376,93957340032194],["v8::internal::Stats_Runtime_ClearStepping(int, unsigned long*, v8::internal::Isolate*)",93957340032384,93957340032918],["v8::internal::Stats_Runtime_DebugGetLoadedScriptIds(int, unsigned long*, v8::internal::Isolate*)",93957340033360,93957340034197],["v8::internal::Stats_Runtime_FunctionGetInferredName(int, unsigned long*, v8::internal::Isolate*)",93957340034464,93957340035123],["v8::internal::Runtime_AllocateInOldGeneration(int, unsigned long*, v8::internal::Isolate*)",93957340108160,93957340108484],["v8::internal::Runtime_AllocateSeqTwoByteString(int, unsigned long*, v8::internal::Isolate*)",93957340110752,93957340110953],["v8::internal::Runtime_ThrowConstructorReturnedNonObject(int, unsigned long*, v8::internal::Isolate*)",93957340115040,93957340115195],["v8::internal::Runtime_GetTemplateObject(int, unsigned long*, v8::internal::Isolate*)",93957340124208,93957340124649],["v8::internal::Runtime_CreateObjectLiteral(int, unsigned long*, v8::internal::Isolate*)",93957340132416,93957340133969],["v8::internal::(anonymous namespace)::JSObjectWalkVisitor<v8::internal::AllocationSiteUsageContext>::StructureWalk(v8::internal::Handle<v8::internal::JSObject>)",93957340151664,93957340154353],["v8::internal::Runtime_MaxSmi(int, unsigned long*, v8::internal::Isolate*)",93957340162800,93957340162830],["v8::internal::Stats_Runtime_ObjectGetOwnPropertyNamesTryFast(int, unsigned long*, v8::internal::Isolate*)",93957340169408,93957340170188],["v8::internal::Runtime_InternalSetPrototype(int, unsigned long*, v8::internal::Isolate*)",93957340176688,93957340176908],["v8::internal::Runtime_ObjectEntries(int, unsigned long*, v8::internal::Isolate*)",93957340180416,93957340180672],["v8::internal::Runtime_JSReceiverPreventExtensionsDontThrow(int, unsigned long*, v8::internal::Isolate*)",93957340183920,93957340184158],["v8::internal::Runtime_GetProperty(int, unsigned long*, v8::internal::Isolate*)",93957340187728,93957340189151],["v8::internal::Runtime_DeleteProperty(int, unsigned long*, v8::internal::Isolate*)",93957340193568,93957340193885],["v8::internal::Runtime_ToFastProperties(int, unsigned long*, v8::internal::Isolate*)",93957340197648,93957340197876],["v8::internal::Runtime_CompleteInobjectSlackTrackingForMap(int, unsigned long*, v8::internal::Isolate*)",93957340201104,93957340201322],["v8::internal::Runtime_CollectTypeProfile(int, unsigned long*, v8::internal::Isolate*)",93957340207136,93957340207671],["v8::internal::Runtime_GetFunctionName(int, unsigned long*, v8::internal::Isolate*)",93957340209952,93957340210146],["v8::internal::Runtime_SetDataProperties(int, unsigned long*, v8::internal::Isolate*)",93957340212816,93957340213068],["v8::internal::Runtime_CopyDataPropertiesWithExcludedProperties(int, unsigned long*, v8::internal::Isolate*)",93957340214640,93957340215569],["v8::internal::Runtime_ToObject(int, unsigned long*, v8::internal::Isolate*)",93957340218992,93957340219029],["v8::internal::Runtime_ToNumeric(int, unsigned long*, v8::internal::Isolate*)",93957340220192,93957340220399],["v8::internal::Runtime_ToString(int, unsigned long*, v8::internal::Isolate*)",93957340221856,93957340222041],["v8::internal::Runtime_HasInPrototypeChain(int, unsigned long*, v8::internal::Isolate*)",93957340223392,93957340223633],["v8::internal::Runtime_CreateDataProperty(int, unsigned long*, v8::internal::Isolate*)",93957340225024,93957340225370],["v8::internal::Runtime_GetOwnPropertyDescriptor(int, unsigned long*, v8::internal::Isolate*)",93957340227136,93957340227492],["v8::internal::Runtime_LoadPrivateGetter(int, unsigned long*, v8::internal::Isolate*)",93957340228960,93957340229088],["v8::internal::Runtime_AddPrivateBrand(int, unsigned long*, v8::internal::Isolate*)",93957340231040,93957340231695],["v8::internal::Runtime_SwissTableAllocate(int, unsigned long*, v8::internal::Isolate*)",93957340234400,93957340234564],["v8::internal::Runtime_SwissTableFindEntry(int, unsigned long*, v8::internal::Isolate*)",93957340236144,93957340236586],["v8::internal::Runtime_SwissTableDelete(int, unsigned long*, v8::internal::Isolate*)",93957340238800,93957340239027],["v8::internal::Runtime_SwissTableElementsCount(int, unsigned long*, v8::internal::Isolate*)",93957340240640,93957340240824],["v8::internal::Runtime_SwissTableValueAt(int, unsigned long*, v8::internal::Isolate*)",93957340242288,93957340242469],["v8::internal::Stats_Runtime_SwissTableDetailsAt(int, unsigned long*, v8::internal::Isolate*)",93957340243312,93957340243949],["v8::internal::InternalIndex v8::internal::HashTable<v8::internal::NameDictionary, v8::internal::NameDictionaryShape>::FindEntry<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Name>)",93957340244112,93957340244276],["v8::internal::Stats_Runtime_Add(int, unsigned long*, v8::internal::Isolate*)",93957340244448,93957340244990],["v8::internal::Stats_Runtime_Equal(int, unsigned long*, v8::internal::Isolate*)",93957340245184,93957340245752],["v8::internal::Stats_Runtime_NotEqual(int, unsigned long*, v8::internal::Isolate*)",93957340245952,93957340246520],["v8::internal::Stats_Runtime_StrictEqual(int, unsigned long*, v8::internal::Isolate*)",93957340246608,93957340247086],["v8::internal::Stats_Runtime_StrictNotEqual(int, unsigned long*, v8::internal::Isolate*)",93957340247168,93957340247644],["v8::internal::Stats_Runtime_ReferenceEqual(int, unsigned long*, v8::internal::Isolate*)",93957340247696,93957340248179],["v8::internal::Stats_Runtime_LessThan(int, unsigned long*, v8::internal::Isolate*)",93957340248384,93957340248957],["v8::internal::Stats_Runtime_GreaterThan(int, unsigned long*, v8::internal::Isolate*)",93957340249168,93957340249765],["v8::internal::Stats_Runtime_LessThanOrEqual(int, unsigned long*, v8::internal::Isolate*)",93957340249984,93957340250574],["v8::internal::Stats_Runtime_GreaterThanOrEqual(int, unsigned long*, v8::internal::Isolate*)",93957340250784,93957340251379],["v8::internal::Stats_Runtime_PromiseRejectEventFromStack(int, unsigned long*, v8::internal::Isolate*)",93957340251728,93957340252417],["v8::internal::Stats_Runtime_PromiseRejectAfterResolved(int, unsigned long*, v8::internal::Isolate*)",93957340252640,93957340253244],["v8::internal::Stats_Runtime_PromiseResolveAfterResolved(int, unsigned long*, v8::internal::Isolate*)",93957340253456,93957340254060],["v8::internal::Stats_Runtime_PromiseRevokeReject(int, unsigned long*, v8::internal::Isolate*)",93957340254304,93957340254938],["v8::internal::Stats_Runtime_EnqueueMicrotask(int, unsigned long*, v8::internal::Isolate*)",93957340255328,93957340256070],["v8::internal::Stats_Runtime_PerformMicrotaskCheckpoint(int, unsigned long*, v8::internal::Isolate*)",93957340256224,93957340256727],["v8::internal::Stats_Runtime_RunMicrotaskCallback(int, unsigned long*, v8::internal::Isolate*)",93957340256960,93957340257558],["v8::internal::Stats_Runtime_PromiseStatus(int, unsigned long*, v8::internal::Isolate*)",93957340257792,93957340258389],["v8::internal::Stats_Runtime_PromiseMarkAsHandled(int, unsigned long*, v8::internal::Isolate*)",93957340258512,93957340259040],["v8::internal::Stats_Runtime_PromiseHookInit(int, unsigned long*, v8::internal::Isolate*)",93957340259264,93957340259865],["v8::internal::Stats_Runtime_AwaitPromisesInit(int, unsigned long*, v8::internal::Isolate*)",93957340260288,93957340261108],["v8::internal::Stats_Runtime_AwaitPromisesInitOld(int, unsigned long*, v8::internal::Isolate*)",93957340261632,93957340262500],["v8::internal::Stats_Runtime_PromiseHookBefore(int, unsigned long*, v8::internal::Isolate*)",93957340262784,93957340263438],["v8::internal::Stats_Runtime_PromiseHookAfter(int, unsigned long*, v8::internal::Isolate*)",93957340263712,93957340264362],["v8::internal::Stats_Runtime_RejectPromise(int, unsigned long*, v8::internal::Isolate*)",93957340264672,93957340265347],["v8::internal::Stats_Runtime_ResolvePromise(int, unsigned long*, v8::internal::Isolate*)",93957340265584,93957340266190],["v8::internal::Stats_Runtime_ConstructAggregateErrorHelper(int, unsigned long*, v8::internal::Isolate*)",93957340266416,93957340267030],["v8::internal::Stats_Runtime_ConstructInternalAggregateErrorHelper(int, unsigned long*, v8::internal::Isolate*)",93957340267552,93957340268425],["v8::internal::Runtime_IsJSProxy(int, unsigned long*, v8::internal::Isolate*)",93957340268736,93957340268837],["v8::internal::Runtime_JSProxyGetHandler(int, unsigned long*, v8::internal::Isolate*)",93957340269424,93957340269516],["v8::internal::SlotAccessorForHeapObject::Write(v8::internal::HeapObject, v8::internal::HeapObjectReferenceType, int)",93957340535024,93957340535126],["int v8::internal::Deserializer::ReadRepeatedObject<v8::internal::SlotAccessorForHandle>(v8::internal::SlotAccessorForHandle, int)",93957340535328,93957340535453],["v8::internal::(anonymous namespace)::NoExternalReferencesCallback()",93957340535520,93957340535538],["v8::internal::SlotAccessorForHeapObject::Write(v8::internal::MaybeObject, int)",93957340535856,93957340535946],["int v8::internal::Deserializer::ReadRepeatedObject<v8::internal::SlotAccessorForHeapObject>(v8::internal::SlotAccessorForHeapObject, int)",93957340536064,93957340536291],["int v8::internal::Deserializer::ReadRepeatedObject<v8::internal::SlotAccessorForRootSlots>(v8::internal::SlotAccessorForRootSlots, int)",93957340536480,93957340536728],["v8::internal::InstructionStream::TryGetAddressForHashing(v8::internal::Isolate*, unsigned long, unsigned int*)",93957340536896,93957340537066],["v8::internal::InstructionStream::CreateOffHeapInstructionStream(v8::internal::Isolate*, unsigned char**, unsigned int*, unsigned char**, unsigned int*)",93957340537520,93957340537996],["v8::internal::SerializerDeserializer::RestoreExternalReferenceRedirector(v8::internal::Isolate*, v8::internal::Handle<v8::internal::CallHandlerInfo>)",93957340544272,93957340544330],["v8::internal::Serializer::SerializeObject(v8::internal::Handle<v8::internal::HeapObject>)",93957340545664,93957340545884],["v8::internal::Serializer::ResolvePendingObject(v8::internal::Handle<v8::internal::HeapObject>)",93957340547456,93957340547711],["v8::internal::Serializer::ObjectSerializer::SerializeJSArrayBuffer()",93957340551008,93957340551256],["v8::internal::Serializer::ObjectSerializer::VisitPointers(v8::internal::HeapObject, v8::internal::CompressedMaybeObjectSlot, v8::internal::CompressedMaybeObjectSlot)",93957340554688,93957340556646],["v8::internal::Serializer::HotObjectsList::~HotObjectsList()",93957340557568,93957340557588],["v8::internal::SnapshotCompression::Compress(v8::internal::SnapshotData const*)",93957340560384,93957340560644],["v8::internal::SnapshotByteSink::PutRaw(unsigned char const*, int, char const*)",93957340561648,93957340561674],["v8::internal::(anonymous namespace)::SnapshotImpl::ExtractNumContexts(v8::StartupData const*)",93957340563680,93957340563718],["v8::internal::Snapshot::SerializeDeserializeAndVerifyForTesting(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Context>)",93957340566928,93957340567399],["void std::__1::vector<v8::internal::SnapshotData, std::__1::allocator<v8::internal::SnapshotData> >::__push_back_slow_path<v8::internal::SnapshotData>(v8::internal::SnapshotData&&)",93957340571456,93957340571853],["v8::internal::StartupSerializer::~StartupSerializer()",93957340572720,93957340573014],["v8::internal::TorqueGeneratedUncompiledData<v8::internal::UncompiledData, v8::internal::HeapObject>::set_inferred_name(v8::internal::String, v8::internal::WriteBarrierMode)",93957340573856,93957340573980],["v8::internal::StartupSerializer::SerializeUsingStartupObjectCache(v8::internal::SnapshotByteSink*, v8::internal::Handle<v8::internal::HeapObject>)",93957340574672,93957340574735],["v8::internal::SerializedHandleChecker::~SerializedHandleChecker()",93957340575360,93957340575439],["v8::internal::IsIdentifierStartSlow(unsigned int)",93957340575712,93957340575783],["v8::internal::IsWhiteSpaceSlow(unsigned int)",93957340575888,93957340575950],["void v8::internal::StringBuilderConcatHelper<unsigned short>(v8::internal::String, unsigned short*, v8::internal::FixedArray, int)",93957340576144,93957340576336],["v8::internal::FixedArrayBuilder::FixedArrayBuilder(v8::internal::Handle<v8::internal::FixedArray>)",93957340576608,93957340576628],["v8::internal::FixedArrayBuilder::Add(v8::internal::Object)",93957340576736,93957340576889],["v8::internal::FixedArrayBuilder::ToJSArray(v8::internal::Handle<v8::internal::JSArray>)",93957340576928,93957340576972],["v8::internal::ReplacementStringBuilder::EnsureCapacity(int)",93957340577072,93957340577180],["v8::internal::ReplacementStringBuilder::AddElement(v8::internal::Handle<v8::internal::Object>)",93957340577296,93957340577548],["v8::internal::IncrementalStringBuilder::IncrementalStringBuilder(v8::internal::Isolate*)",93957340578064,93957340578218],["v8::internal::IncrementalStringBuilder::Extend()",93957340578256,93957340578426],["v8::internal::IncrementalStringBuilder::AppendString(v8::internal::Handle<v8::internal::String>)",93957340578624,93957340578963],["int v8::internal::FastAsciiConvert<true>(char*, char const*, int, bool*)",93957340579344,93957340579708],["v8::internal::FixedStringAllocator::allocate(unsigned int)",93957340579808,93957340579844],["v8::internal::StringStream::Put(char)",93957340579872,93957340580066],["v8::internal::StringStream::PrintObject(v8::internal::Object)",93957340581952,93957340582446],["v8::internal::StringStream::Log(v8::internal::Isolate*)",93957340582592,93957340582637],["v8_inspector::V8Debugger::collectionsEntries(v8::Local<v8::Context>, v8::Local<v8::Value>)",93957342541840,93957342542442],["v8_inspector::V8Debugger::externalAsyncTaskFinished(v8_inspector::V8StackTraceId const&)",93957342547376,93957342547562],["v8_inspector::V8Debugger::unmuteScriptParsedEvents()",93957342548064,93957342548074],["void std::__1::__function::__policy_invoker<void (v8_inspector::V8InspectorSessionImpl*)>::__call_impl<std::__1::__function::__default_alloc_func<v8_inspector::V8Debugger::handleProgramBreak(v8::Local<v8::Context>, v8::Local<v8::Value>, std::__1::vector<int, std::__1::allocator<int> > const&, v8::debug::ExceptionType, bool)::$_3, void (v8_inspector::V8InspectorSessionImpl*)> >(std::__1::__function::__policy_storage const*, v8_inspector::V8InspectorSessionImpl*)",93957342548416,93957342548533],["void std::__1::__function::__policy_invoker<void (v8_inspector::V8InspectorSessionImpl*)>::__call_impl<std::__1::__function::__default_alloc_func<v8_inspector::V8Debugger::ScriptCompiled(v8::Local<v8::debug::Script>, bool, bool)::$_6, void (v8_inspector::V8InspectorSessionImpl*)> >(std::__1::__function::__policy_storage const*, v8_inspector::V8InspectorSessionImpl*)",93957342548640,93957342548719],["void std::__1::__function::__policy_invoker<void (v8_inspector::V8InspectorSessionImpl*)>::__call_impl<std::__1::__function::__default_alloc_func<v8_inspector::V8Debugger::ShouldBeSkipped(v8::Local<v8::debug::Script>, int, int)::$_8, void (v8_inspector::V8InspectorSessionImpl*)> >(std::__1::__function::__policy_storage const*, v8_inspector::V8InspectorSessionImpl*)",93957342548784,93957342548843],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<unsigned long, std::__1::weak_ptr<v8_inspector::AsyncStackTrace> >, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<unsigned long, std::__1::weak_ptr<v8_inspector::AsyncStackTrace> >, std::__1::__unordered_map_hasher<unsigned long, std::__1::__hash_value_type<unsigned long, std::__1::weak_ptr<v8_inspector::AsyncStackTrace> >, std::__1::hash<unsigned long>, std::__1::equal_to<unsigned long>, true>, std::__1::__unordered_map_equal<unsigned long, std::__1::__hash_value_type<unsigned long, std::__1::weak_ptr<v8_inspector::AsyncStackTrace> >, std::__1::equal_to<unsigned long>, std::__1::hash<unsigned long>, true>, std::__1::allocator<std::__1::__hash_value_type<unsigned long, std::__1::weak_ptr<v8_inspector::AsyncStackTrace> > > >::__emplace_unique_key_args<unsigned long, std::__1::piecewise_construct_t const&, std::__1::tuple<unsigned long const&>, std::__1::tuple<> >(unsigned long const&, std::__1::piecewise_construct_t const&, std::__1::tuple<unsigned long const&>&&, std::__1::tuple<>&&)",93957342549744,93957342550662],["void std::__1::vector<v8_inspector::V8StackTraceId, std::__1::allocator<v8_inspector::V8StackTraceId> >::__emplace_back_slow_path<>()",93957342551024,93957342551283],["v8_crdtp::cbor::ParseCBOR(v8_crdtp::span<unsigned char>, v8_crdtp::ParserHandler*)",93957342750832,93957342750984],["v8_crdtp::DispatchResponse::ServerError(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)",93957342755200,93957342755237],["v8_crdtp::DomainDispatcher::Callback::Callback(std::__1::unique_ptr<v8_crdtp::DomainDispatcher::WeakPtr, std::__1::default_delete<v8_crdtp::DomainDispatcher::WeakPtr> >, int, v8_crdtp::span<unsigned char>, v8_crdtp::span<unsigned char>)",93957342757664,93957342757793],["v8_crdtp::UberDispatcher::DispatchResult::Run()",93957342759200,93957342759279],["_ZNSt3__16vectorINS_4pairIN8v8_crdtp4spanIhEES4_EENS_9allocatorIS5_EEE6insertINS_11__wrap_iterIPKS5_EEEENS_9enable_ifIXaasr27__is_cpp17_forward_iteratorIT_EE5valuesr16is_constructibleIS5_NS_15iterator_traitsISF_E9referenceEEE5valueENSA_IPS5_EEE4typeESD_SF_SF_",93957342761376,93957342762244],["v8_crdtp::(anonymous namespace)::ProtocolError::~ProtocolError()",93957342763488,93957342763559],["v8_crdtp::(anonymous namespace)::Notification::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342763872,93957342764083],["void* std::__1::__function::__policy::__large_clone<std::__1::__function::__default_alloc_func<v8_crdtp::UberDispatcher::Dispatch(v8_crdtp::Dispatchable const&) const::$_0, void ()> >(void const*)",93957342764240,93957342764377],["void* std::__1::__function::__policy::__large_clone<std::__1::__function::__default_alloc_func<v8_crdtp::UberDispatcher::Dispatch(v8_crdtp::Dispatchable const&) const::$_1, void ()> >(void const*)",93957342765136,93957342765216],["void std::__1::__buffered_inplace_merge<v8_crdtp::FirstLessThan<v8_crdtp::span<unsigned char> >&, std::__1::__wrap_iter<std::__1::pair<v8_crdtp::span<unsigned char>, v8_crdtp::span<unsigned char> >*> >(std::__1::__wrap_iter<std::__1::pair<v8_crdtp::span<unsigned char>, v8_crdtp::span<unsigned char> >*>, std::__1::__wrap_iter<std::__1::pair<v8_crdtp::span<unsigned char>, v8_crdtp::span<unsigned char> >*>, std::__1::__wrap_iter<std::__1::pair<v8_crdtp::span<unsigned char>, v8_crdtp::span<unsigned char> >*>, v8_crdtp::FirstLessThan<v8_crdtp::span<unsigned char> >&, std::__1::iterator_traits<std::__1::__wrap_iter<std::__1::pair<v8_crdtp::span<unsigned char>, v8_crdtp::span<unsigned char> >*> >::difference_type, std::__1::iterator_traits<std::__1::__wrap_iter<std::__1::pair<v8_crdtp::span<unsigned char>, v8_crdtp::span<unsigned char> >*> >::difference_type, std::__1::iterator_traits<std::__1::__wrap_iter<std::__1::pair<v8_crdtp::span<unsigned char>, v8_crdtp::span<unsigned char> >*> >::value_type*)",93957342766416,93957342767008],["void std::__1::__inplace_merge<v8_crdtp::FirstLessThan<std::__1::unique_ptr<v8_crdtp::DomainDispatcher, std::__1::default_delete<v8_crdtp::DomainDispatcher> > >&, std::__1::__wrap_iter<std::__1::pair<v8_crdtp::span<unsigned char>, std::__1::unique_ptr<v8_crdtp::DomainDispatcher, std::__1::default_delete<v8_crdtp::DomainDispatcher> > >*> >(std::__1::__wrap_iter<std::__1::pair<v8_crdtp::span<unsigned char>, std::__1::unique_ptr<v8_crdtp::DomainDispatcher, std::__1::default_delete<v8_crdtp::DomainDispatcher> > >*>, std::__1::__wrap_iter<std::__1::pair<v8_crdtp::span<unsigned char>, std::__1::unique_ptr<v8_crdtp::DomainDispatcher, std::__1::default_delete<v8_crdtp::DomainDispatcher> > >*>, std::__1::__wrap_iter<std::__1::pair<v8_crdtp::span<unsigned char>, std::__1::unique_ptr<v8_crdtp::DomainDispatcher, std::__1::default_delete<v8_crdtp::DomainDispatcher> > >*>, v8_crdtp::FirstLessThan<std::__1::unique_ptr<v8_crdtp::DomainDispatcher, std::__1::default_delete<v8_crdtp::DomainDispatcher> > >&, std::__1::iterator_traits<std::__1::__wrap_iter<std::__1::pair<v8_crdtp::span<unsigned char>, std::__1::unique_ptr<v8_crdtp::DomainDispatcher, std::__1::default_delete<v8_crdtp::DomainDispatcher> > >*> >::difference_type, std::__1::iterator_traits<std::__1::__wrap_iter<std::__1::pair<v8_crdtp::span<unsigned char>, std::__1::unique_ptr<v8_crdtp::DomainDispatcher, std::__1::default_delete<v8_crdtp::DomainDispatcher> > >*> >::difference_type, std::__1::iterator_traits<std::__1::__wrap_iter<std::__1::pair<v8_crdtp::span<unsigned char>, std::__1::unique_ptr<v8_crdtp::DomainDispatcher, std::__1::default_delete<v8_crdtp::DomainDispatcher> > >*> >::value_type*, long)",93957342767680,93957342768969],["v8_crdtp::ErrorSupport::Errors() const",93957342769856,93957342769887],["v8_crdtp::json::ConvertJSONToCBOR(v8_crdtp::span<unsigned char>, std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*)",93957342770048,93957342770208],["void std::__1::stack<v8_crdtp::json::(anonymous namespace)::State, std::__1::deque<v8_crdtp::json::(anonymous namespace)::State, std::__1::allocator<v8_crdtp::json::(anonymous namespace)::State> > >::emplace<v8_crdtp::json::(anonymous namespace)::Container>(v8_crdtp::json::(anonymous namespace)::Container&&)",93957342770384,93957342773593],["v8_crdtp::json::(anonymous namespace)::JSONEncoder<std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > >::~JSONEncoder()",93957342773632,93957342773674],["v8_crdtp::json::(anonymous namespace)::JSONEncoder<std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > >::HandleMapEnd()",93957342773808,93957342773928],["v8::internal::compiler::InstructionSelector::SwapShuffleInputs(v8::internal::compiler::Node*)",93957342966272,93957342966547],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::FlagsCondition const&)",93957342989072,93957342989550],["v8::internal::compiler::InstructionSequence::InstructionSequence(v8::internal::Isolate*, v8::internal::Zone*, v8::internal::ZoneVector<v8::internal::compiler::InstructionBlock*>*)",93957342999408,93957342999692],["v8::internal::compiler::InstructionSequence::AddDeoptimizationEntry(v8::internal::compiler::FrameStateDescriptor*, v8::internal::DeoptimizeKind, v8::internal::DeoptimizeReason, v8::internal::compiler::FeedbackSource const&)",93957343000704,93957343001147],["v8::internal::compiler::FrameStateDescriptor::GetHeight() const",93957343001984,93957343002047],["v8::internal::compiler::FrameStateDescriptor::GetJSFrameCount() const",93957343002256,93957343002317],["v8::internal::compiler::JumpThreading::ComputeForwarding(v8::internal::Zone*, v8::internal::ZoneVector<v8::internal::compiler::RpoNumber>*, v8::internal::compiler::InstructionSequence*, bool)",93957343003968,93957343006249],["v8::internal::compiler::VirtualRegisterData::EnsureSpillRange(v8::internal::compiler::MidTierRegisterAllocationData*)",93957343009248,93957343009762],["v8::internal::compiler::VirtualRegisterData::EmitGapMoveToSpillSlot(v8::internal::compiler::InstructionOperand, int, v8::internal::compiler::MidTierRegisterAllocationData*)",93957343010752,93957343011162],["v8::internal::compiler::RegisterState::Register::AddDeferredBlockSpill(int, bool, v8::internal::Zone*)",93957343011584,93957343012355],["v8::internal::compiler::RegisterState::Register::Spill(v8::internal::compiler::AllocatedOperand, v8::internal::compiler::InstructionBlock const*, v8::internal::compiler::MidTierRegisterAllocationData*)",93957343012816,93957343013393],["v8::internal::compiler::RegisterState::MoveToSpillSlotOnDeferred(v8::internal::compiler::RegisterIndex, int, int, v8::internal::compiler::MidTierRegisterAllocationData*)",93957343013664,93957343013895],["v8::internal::compiler::RegisterState::Clone()",93957343014176,93957343014744],["v8::internal::compiler::SinglePassRegisterAllocator::CloneStateFrom(v8::internal::compiler::RpoNumber)",93957343015504,93957343015886],["v8::internal::compiler::SinglePassRegisterAllocator::EndBlock(v8::internal::compiler::InstructionBlock const*)",93957343017536,93957343017878],["v8::internal::compiler::SinglePassRegisterAllocator::AllocatePendingUse(v8::internal::compiler::RegisterIndex, v8::internal::compiler::VirtualRegisterData&, v8::internal::compiler::InstructionOperand*, bool, int)",93957343018432,93957343018578],["v8::internal::compiler::LinearScanAllocator::AllocateRegisters()::$_4::operator()(v8::internal::compiler::RpoNumber, v8::internal::ZoneUnorderedSet<v8::internal::compiler::LinearScanAllocator::RangeWithRegister, v8::internal::compiler::LinearScanAllocator::RangeWithRegister::Hash, v8::internal::compiler::LinearScanAllocator::RangeWithRegister::Equals>*) const",93957343144720,93957343145025],["v8::internal::compiler::BranchElimination::ReduceMerge(v8::internal::compiler::Node*)",93957343183984,93957343184316],["v8::internal::compiler::BytecodeAnalysis::GetLoopInfoFor(int) const",93957343201648,93957343201720],["v8::internal::compiler::BytecodeGraphBuilder::Environment::Checkpoint(v8::internal::BytecodeOffset, v8::internal::compiler::OutputFrameStateCombine, v8::internal::compiler::BytecodeLivenessState const*)",93957343209952,93957343210633],["v8::internal::compiler::BytecodeGraphBuilder::PrepareFrameStateForOSREntryStackCheck(v8::internal::compiler::Node*)",93957343214704,93957343214811],["v8::internal::compiler::BytecodeGraphBuilder::VisitLdaUndefined()",93957343223776,93957343223845],["v8::internal::compiler::BytecodeGraphBuilder::VisitStaGlobal()",93957343225120,93957343225681],["v8::internal::compiler::BytecodeGraphBuilder::VisitStaCurrentContextSlot()",93957343226784,93957343226915],["v8::internal::compiler::BytecodeGraphBuilder::VisitLdaNamedPropertyNoFeedback()",93957343228256,93957343228674],["v8::internal::compiler::BytecodeGraphBuilder::VisitStaModuleVariable()",93957343229984,93957343230194],["v8::internal::compiler::BytecodeGraphBuilder::VisitStaDataPropertyInLiteral()",93957343232144,93957343232823],["v8::internal::compiler::BytecodeGraphBuilder::VisitMul()",93957343233488,93957343233588],["v8::internal::compiler::BytecodeGraphBuilder::VisitBitwiseOr()",93957343233936,93957343234036],["v8::internal::compiler::BytecodeGraphBuilder::VisitShiftRight()",93957343234384,93957343234484],["v8::internal::compiler::BytecodeGraphBuilder::VisitMulSmi()",93957343234832,93957343234932],["v8::internal::compiler::BytecodeGraphBuilder::VisitBitwiseOrSmi()",93957343235280,93957343235380],["v8::internal::compiler::BytecodeGraphBuilder::VisitShiftLeftSmi()",93957343235616,93957343235716],["v8::internal::compiler::BytecodeGraphBuilder::VisitShiftRightLogicalSmi()",93957343235840,93957343235940],["v8::internal::compiler::BytecodeGraphBuilder::VisitDec()",93957343236064,93957343236161],["v8::internal::compiler::BytecodeGraphBuilder::VisitBitwiseNot()",93957343236288,93957343236385],["v8::internal::compiler::BytecodeGraphBuilder::VisitLogicalNot()",93957343236592,93957343236737],["v8::internal::compiler::BytecodeGraphBuilder::VisitGetSuperConstructor()",93957343236896,93957343237049],["v8::internal::compiler::BytecodeGraphBuilder::VisitCallProperty()",93957343237376,93957343237696],["v8::internal::compiler::BytecodeGraphBuilder::VisitCallProperty1()",93957343237856,93957343238055],["v8::internal::compiler::BytecodeGraphBuilder::VisitCallUndefinedReceiver()",93957343238320,93957343238631],["v8::internal::compiler::BytecodeGraphBuilder::VisitCallUndefinedReceiver1()",93957343238784,93957343238959],["v8::internal::compiler::BytecodeGraphBuilder::VisitCallNoFeedback()",93957343239184,93957343239732],["v8::internal::compiler::BytecodeGraphBuilder::VisitCallRuntime()",93957343240608,93957343241786],["v8::internal::compiler::BytecodeGraphBuilder::VisitCallJSRuntime()",93957343242192,93957343242772],["v8::internal::compiler::BytecodeGraphBuilder::VisitConstruct()",93957343243168,93957343243987],["v8::internal::compiler::BytecodeGraphBuilder::VisitTestEqual()",93957343244832,93957343244932],["v8::internal::compiler::BytecodeGraphBuilder::VisitTestLessThan()",93957343245056,93957343245156],["v8::internal::compiler::Node::InsertInput(v8::internal::Zone*, int, v8::internal::compiler::Node*)",93957344603568,93957344604215],["v8::internal::compiler::OperationTyper::NumberModulus(v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344614912,93957344615604],["v8::internal::compiler::OperationTyper::SameValueNumbersOnly(v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344620448,93957344620458],["v8::internal::compiler::Operator::PrintPropsTo(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) const",93957344622288,93957344623128],["v8::internal::compiler::(anonymous namespace)::CreatePipelineStatistics(v8::internal::Handle<v8::internal::Script>, v8::internal::OptimizedCompilationInfo*, v8::internal::Isolate*, v8::internal::compiler::ZoneStats*)",93957344625712,93957344626052],["v8::internal::compiler::PipelineImpl::CreateGraph()",93957344630528,93957344631077],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::InstructionRangesAsJSON const&)",93957344638224,93957344638926],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::HeapBrokerInitializationPhase>()",93957344642304,93957344642761],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::TyperPhase, v8::internal::compiler::Typer*>(v8::internal::compiler::Typer*&&)",93957344644704,93957344645107],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::LoadEliminationPhase>()",93957344646304,93957344646689],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::WasmInliningPhase>()",93957344647920,93957344648305],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::StoreStoreEliminationPhase>()",93957344649520,93957344649905],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::DecompressionOptimizationPhase>()",93957344651120,93957344651933],["v8::internal::compiler::PipelineData::PipelineData(v8::internal::compiler::ZoneStats*, v8::internal::OptimizedCompilationInfo*, v8::internal::Isolate*, v8::internal::AccountingAllocator*, v8::internal::compiler::Graph*, v8::internal::compiler::JSGraph*, v8::internal::compiler::Schedule*, v8::internal::compiler::SourcePositionTable*, v8::internal::compiler::NodeOriginTable*, v8::internal::JumpOptimizationInfo*, v8::internal::AssemblerOptions const&, v8::internal::ProfileDataFromFile const*)",93957344655584,93957344656751],["v8::internal::compiler::Pipeline::GenerateCodeForWasmFunction(v8::internal::OptimizedCompilationInfo*, v8::internal::wasm::WasmEngine*, v8::internal::compiler::MachineGraph*, v8::internal::compiler::CallDescriptor*, v8::internal::compiler::SourcePositionTable*, v8::internal::compiler::NodeOriginTable*, v8::internal::wasm::FunctionBody, v8::internal::wasm::WasmModule const*, int, std::__1::vector<v8::internal::compiler::WasmLoopInfo, std::__1::allocator<v8::internal::compiler::WasmLoopInfo> >*)",93957344660864,93957344664351],["v8::internal::compiler::Pipeline::NewCompilationJob(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSFunction>, v8::internal::CodeKind, bool, v8::internal::BytecodeOffset, v8::internal::JavaScriptFrame*)",93957344665584,93957344665775],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::LateGraphTrimmingPhase>()",93957344667376,93957344667761],["v8::internal::compiler::(anonymous namespace)::TraceScheduleAndVerify(v8::internal::OptimizedCompilationInfo*, v8::internal::compiler::PipelineData*, v8::internal::compiler::Schedule*, char const*)",93957344668192,93957344669591],["v8::internal::compiler::PipelineImpl::VerifyGeneratedCodeIsIdempotent()",93957344670016,93957344670495],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::JumpThreadingPhase, bool&>(bool&)",93957344670896,93957344671374],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::TurbolizerCodeOffsetsInfoAsJSON const&)",93957344671952,93957344672409],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::FinalizeCodePhase>()",93957344672800,93957344673157],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::ResolvePhisPhase>()",93957344673568,93957344673963],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::BuildBundlesPhase>()",93957344674400,93957344674804],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::AllocateGeneralRegistersPhase<v8::internal::compiler::LinearScanAllocator>>()",93957344675728,93957344676294],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::DecideSpillingModePhase>()",93957344676880,93957344677275],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::CommitAssignmentPhase>()",93957344677680,93957344678075],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::ResolveControlFlowPhase>()",93957344678496,93957344678899],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::OptimizeMovesPhase>()",93957344679312,93957344679718],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::MidTierRegisterAllocatorPhase>()",93957344680112,93957344680489],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::MidTierPopulateReferenceMapsPhase>()",93957344680880,93957344681257],["v8::internal::compiler::WasmHeapStubCompilationJob::~WasmHeapStubCompilationJob()",93957344681392,93957344681518],["v8::internal::compiler::SimplifiedOperatorBuilder::ChangeUint32ToTagged()",93957345041264,93957345041278],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckedTaggedToInt32(v8::internal::compiler::CheckForMinusZeroMode, v8::internal::compiler::FeedbackSource const&)",93957345048512,93957345048806],["v8::internal::compiler::SimplifiedOperatorBuilder::LoadTypedElement(v8::internal::ExternalArrayType const&)",93957345055760,93957345055888],["v8::internal::compiler::Operator1<v8::internal::compiler::CheckMapsParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CheckMapsParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CheckMapsParameters> >::Equals(v8::internal::compiler::Operator const*) const",93957345085376,93957345085454],["v8::internal::compiler::Operator1<v8::internal::compiler::ObjectAccess, v8::internal::compiler::OpEqualTo<v8::internal::compiler::ObjectAccess>, v8::internal::compiler::OpHash<v8::internal::compiler::ObjectAccess> >::Equals(v8::internal::compiler::Operator const*) const",93957345087424,93957345087470],["v8::internal::compiler::StateValuesCache::BuildTree(unsigned long*, v8::internal::compiler::Node**, unsigned long, v8::internal::BitVector const*, int, unsigned long)",93957345089776,93957345090594],["std::__1::map<v8::internal::compiler::(anonymous namespace)::UnobservableStore, bool, std::__1::less<v8::internal::compiler::(anonymous namespace)::UnobservableStore>, v8::internal::ZoneAllocator<std::__1::pair<v8::internal::compiler::(anonymous namespace)::UnobservableStore const, bool> > >::operator[](v8::internal::compiler::(anonymous namespace)::UnobservableStore const&)",93957345100752,93957345101040],["v8::internal::compiler::TypedOptimization::ReducePhi(v8::internal::compiler::Node*)",93957345110032,93957345110397],["v8::internal::compiler::TypedOptimization::TryReduceStringComparisonOfStringFromSingleCharCode(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Type, bool)",93957345116128,93957345116945],["v8::internal::compiler::Typer::Visitor::~Visitor()",93957345119520,93957345119548],["v8::internal::compiler::Typer::Visitor::ToLength(v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345128960,93957345129140],["v8::internal::compiler::Typer::Visitor::ObjectIsDetectableCallable(v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345130192,93957345130310],["v8::internal::compiler::Typer::Visitor::ObjectIsSymbol(v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345131152,93957345131270],["v8::internal::compiler::Typer::Visitor::JSLessThanOrEqualTyper(v8::internal::compiler::Type, v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345132720,93957345132813],["v8::internal::compiler::Typer::Visitor::JSAddTyper(v8::internal::compiler::Type, v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345134112,93957345134621],["v8::internal::compiler::Typer::Visitor::NumberLessThanTyper(v8::internal::compiler::Type, v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345138240,93957345138350],["v8::internal::compiler::Typer::Visitor::reducer_name() const",93957345138688,93957345138701],["v8::internal::compiler::Typer::Visitor::TypeSelect(v8::internal::compiler::Node*)",93957345139120,93957345139250],["v8::internal::compiler::Typer::Visitor::TypeProjection(v8::internal::compiler::Node*)",93957345141440,93957345141645],["v8::internal::compiler::Typer::Visitor::TypeCheckInternalizedString(v8::internal::compiler::Node*)",93957345141984,93957345142088],["v8::internal::compiler::Typer::Visitor::TypeCheckReceiverOrNullOrUndefined(v8::internal::compiler::Node*)",93957345142416,93957345142520],["v8::internal::compiler::Typer::Visitor::TypeConvertReceiver(v8::internal::compiler::Node*)",93957345142880,93957345142973],["v8::internal::compiler::Typer::Visitor::TypePoisonIndex(v8::internal::compiler::Node*)",93957345143376,93957345143486],["v8::internal::compiler::Typer::Visitor::TypeJSWasmCall(v8::internal::compiler::Node*)",93957345143744,93957345143805],["v8::internal::compiler::Typer::Visitor::TypeUnaryOp(v8::internal::compiler::Node*, v8::internal::compiler::Type (*)(v8::internal::compiler::Type, v8::internal::compiler::Typer*))",93957345144976,93957345145066],["v8::internal::compiler::Type::Max() const",93957345146032,93957345146477],["v8::internal::compiler::BitsetType::ExpandInternals(unsigned int)",93957345147216,93957345147297],["v8::internal::compiler::Type::Maybe(v8::internal::compiler::Type) const",93957345148128,93957345148614],["v8::internal::compiler::Type::IntersectAux(v8::internal::compiler::Type, v8::internal::compiler::Type, v8::internal::compiler::UnionType*, int, v8::internal::compiler::RangeType::Limits*, v8::internal::Zone*)",93957345149280,93957345150243],["v8::internal::compiler::Type::AddToUnion(v8::internal::compiler::Type, v8::internal::compiler::UnionType*, int, v8::internal::Zone*)",93957345151024,93957345151252],["v8::internal::compiler::Type::Union(v8::internal::compiler::Type, v8::internal::compiler::Type, v8::internal::Zone*)",93957345152624,93957345153127],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Type)",93957345156128,93957345156163],["unsigned int v8::internal::compiler::BitsetType::Lub<v8::internal::compiler::HeapObjectType>(v8::internal::compiler::HeapObjectType const&)",93957345156368,93957345156561],["v8::internal::compiler::ValueNumberingReducer::Reduce(v8::internal::compiler::Node*)",93957345156624,93957345157430],["v8::internal::compiler::ValueNumberingReducer::reducer_name() const",93957345157728,93957345157741],["v8::internal::compiler::Verifier::Visitor::CheckNotTyped(v8::internal::compiler::Node*)",93957345158336,93957345158547],["v8::internal::compiler::Verifier::Visitor::CheckOutput(v8::internal::compiler::Node*, v8::internal::compiler::Node*, int, char const*)",93957345167040,93957345167341],["v8::internal::compiler::Verifier::Visitor::CheckValueInputIs(v8::internal::compiler::Node*, int, v8::internal::compiler::Type)",93957345167648,93957345168134],["v8::internal::compiler::Verifier::Run(v8::internal::compiler::Graph*, v8::internal::compiler::Verifier::Typing, v8::internal::compiler::Verifier::CheckInputs, v8::internal::compiler::Verifier::CodeType)",93957345168224,93957345168893],["v8::internal::compiler::CheckInputsDominate(v8::internal::compiler::Schedule*, v8::internal::compiler::BasicBlock*, v8::internal::compiler::Node*, int)",93957345175072,93957345175842],["v8::internal::compiler::ZoneStats::StatsScope::~StatsScope()",93957345176544,93957345176570],["v8::internal::compiler::ZoneStats::StatsScope::GetTotalAllocatedBytes()",93957345176832,93957345176922],["v8::internal::compiler::ZoneStats::ZoneStats(v8::internal::AccountingAllocator*)",93957345177360,93957345177388],["v8::internal::compiler::ZoneStats::GetCurrentAllocatedBytes() const",93957345177456,93957345177530],["v8::internal::compiler::ZoneStats::ReturnZone(v8::internal::Zone*)",93957345177840,93957345178171],["v8::internal::compiler::Int64Lowering::LowerGraph()",93957345178416,93957345179225],["v8::internal::compiler::Int64Lowering::PreparePhiReplacement(v8::internal::compiler::Node*)",93957345192480,93957345193329],["v8::internal::compiler::Int64Lowering::LowerMemoryBaseAndIndex(v8::internal::compiler::Node*)",93957345193792,93957345194133],["v8::internal::compiler::Int64Lowering::LowerWord64AtomicNarrowOp(v8::internal::compiler::Node*, v8::internal::compiler::Operator const*)",93957345194352,93957345194822],["v8::internal::compiler::Int64Lowering::LowerLoadOperator(v8::internal::compiler::Node*, v8::internal::MachineRepresentation, v8::internal::compiler::Operator const*)",93957345195280,93957345195964],["v8::internal::compiler::Int64Lowering::LowerCallDescriptor(v8::internal::compiler::CallDescriptor const*)",93957345197200,93957345197269],["std::__1::deque<v8::internal::compiler::Int64Lowering::NodeState, v8::internal::RecyclingZoneAllocator<v8::internal::compiler::Int64Lowering::NodeState> >::__add_front_capacity()",93957345197792,93957345198679],["v8::internal::compiler::SimdScalarLowering::SimdScalarLowering(v8::internal::compiler::MachineGraph*, v8::internal::compiler::SimplifiedOperatorBuilder*, v8::internal::Signature<v8::internal::MachineRepresentation>*)",93957345199056,93957345199266],["v8::internal::compiler::SimdScalarLowering::LowerNode(v8::internal::compiler::Node*)",93957345200128,93957345217070],["v8::internal::compiler::SimdScalarLowering::PreparePhiReplacement(v8::internal::compiler::Node*)",93957345217312,93957345218351],["v8::internal::compiler::SimdScalarLowering::NumLanes(v8::internal::compiler::SimdScalarLowering::SimdType)",93957345218544,93957345218607],["v8::internal::compiler::SimdScalarLowering::LowerLoadOp(v8::internal::compiler::Node*, v8::internal::compiler::SimdScalarLowering::SimdType)",93957345218960,93957345220437],["v8::internal::compiler::SimdScalarLowering::DefaultLowering(v8::internal::compiler::Node*)",93957345220736,93957345221257],["v8::internal::compiler::SimdScalarLowering::LowerStoreOp(v8::internal::compiler::Node*)",93957345222992,93957345224642],["v8::internal::compiler::SimdScalarLowering::LowerBinaryOp(v8::internal::compiler::Node*, v8::internal::compiler::SimdScalarLowering::SimdType, v8::internal::compiler::Operator const*, bool)",93957345227200,93957345227926],["v8::internal::compiler::SimdScalarLowering::ConstructPhiForComparison(v8::internal::compiler::Diamond, v8::internal::compiler::SimdScalarLowering::SimdType, int, int)",93957345228784,93957345229018],["v8::internal::compiler::SimdScalarLowering::Mask(v8::internal::compiler::Node*, int)",93957345230304,93957345230405],["v8::internal::compiler::SimdScalarLowering::LowerUnaryOp(v8::internal::compiler::Node*, v8::internal::compiler::SimdScalarLowering::SimdType, v8::internal::compiler::Operator const*)",93957345231984,93957345232499],["v8::internal::compiler::SimdScalarLowering::BuildF64Trunc(v8::internal::compiler::Node*)",93957345233488,93957345234144],["std::__1::basic_ostream<char, std::__1::char_traits<char> >::operator<<(double)",93957346641472,93957346641869],["std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::str() const",93957346643104,93957346643967],["std::__1::__throw_bad_cast()",93957346646592,93957346646641],["std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_stringbuf()",93957346648608,93957346648670],["virtual thunk to std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_stringstream()",93957346649152,93957346649279],["virtual thunk to std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_ostringstream()",93957346649632,93957346649741],["virtual thunk to std::__1::basic_istringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_istringstream()",93957346650080,93957346650189],["virtual thunk to std::__1::basic_ifstream<char, std::__1::char_traits<char> >::~basic_ifstream()",93957346650464,93957346650537],["std::__1::__stdoutbuf<char>::__stdoutbuf(_IO_FILE*, __mbstate_t*)",93957346651952,93957346652092],["std::__1::DoIOSInit::~DoIOSInit()",93957346652240,93957346652310],["std::__1::__stdinbuf<char>::underflow()",93957346652416,93957346652428],["std::__1::__stdinbuf<char>::pbackfail(int)",93957346652448,93957346652681],["std::__1::__stdinbuf<wchar_t>::~__stdinbuf()",93957346653072,93957346653100],["std::__1::__stdinbuf<wchar_t>::underflow()",93957346653200,93957346653212],["std::__1::__stdinbuf<wchar_t>::pbackfail(unsigned int)",93957346653232,93957346653465],["std::__1::__stdoutbuf<char>::imbue(std::__1::locale const&)",93957346653856,93957346653911],["initstate",139871563518208,139871563518421],["nrand48",139871563520224,139871563520289],["drand48_r",139871563520528,139871563520539],["mrand48_r",139871563520752,139871563520774],["seed48_r",139871563520880,139871563520939],["getrandom",139871563521104,139871563521261],["strfromf",139871563521408,139871563521995],["strfromf64x",139871563522592,139871563523195],["register_printf_function",139871563603904,139871563603909],["register_printf_modifier",139871563611600,139871563612026],["printf_size",139871563612720,139871563615243],["fprintf",139871563615280,139871563615459],["__snprintf",139871563615680,139871563615855],["__asprintf",139871563616064,139871563616243],["vfwprintf",139871563616448,139871563616455],["vfwscanf",139871563616480,139871563616487],["scanf",139871563616688,139871563616888],["perror",139871563617360,139871563617555],["tmpfile",139871563617904,139871563618105],["tmpnam_r",139871563618288,139871563618363],["fwprintf",139871563752400,139871563752579],["__wunderflow",139871563757312,139871563757658],["_IO_wfile_overflow",139871563766000,139871563766709],["fileno",139871563770160,139871563770196],["open_memstream",139871563772464,139871563772676],["setbuf",139871563773264,139871563773274],["vscanf",139871563774112,139871563774135],["fcloseall",139871563775520,139871563775525],["freopen64",139871563776176,139871563776898],["__freading",139871563776960,139871563777010],["__freadable",139871563777040,139871563777049],["__flbf",139871563777072,139871563777080],["__fpending",139871563777200,139871563777241],["__libc_fatal",139871563777904,139871563777940],["fmemopen",139871563779440,139871563779900],["clearerr_unlocked",139871563780784,139871563780788],["_IO_free_backup_area",139871563793968,139871563794023],["__underflow",139871563794144,139871563794481],["_IO_setb",139871563794848,139871563794937],["_IO_default_uflow",139871563795152,139871563795239],["_IO_sgetn",139871563795520,139871563795622],["_IO_default_doallocate",139871563796176,139871563796282],["_IO_init",139871563796736,139871563796778],["_IO_sputbackc",139871563796944,139871563797071],["__libc_valloc",139871563828656,139871563828711],["malloc_usable_size",139871563830464,139871563830675],["posix_memalign",139871563832080,139871563832167],["mcheck",139871563834320,139871563834596],["mtrace",139871563837024,139871563837414],["_obstack_newchunk",139871563838000,139871563838355],["__libc_reallocarray",139871563838608,139871563838641],["__libc_dynarray_at_failure",139871563839120,139871563839184],["__libc_dynarray_resize_clear",139871563839856,139871563839928],["__libc_alloc_buffer_copy_string",139871563840224,139871563840269],["__strverscmp",139871563840784,139871563841060],["__strerror_r",139871563841360,139871563841798],["strxfrm",139871563845088,139871563845104],["memccpy",139871563846400,139871563846486],["strfry",139871563849248,139871563849518],["argz_add",139871563851328,139871563851437],["__argz_next",139871563851920,139871563851997],["__argz_stringify",139871563852464,139871563852537],["envz_get",139871563853904,139871563853952],["envz_strip",139871563854512,139871563854628],["__strtok_r_1c",139871563866848,139871563866945],["__strcspn_c1",139871563867248,139871563867285],["__strspn_c2",139871563867456,139871563867492],["__mempcpy_small",139871563867728,139871563867931],["__xpg_strerror_r",139871563868400,139871563868664],["explicit_bzero",139871563868944,139871563868963],["__bzero",139871563946528,139871563946540],["wcscspn",139871563948816,139871563948878],["wcsncat",139871563949008,139871563949085],["wcspbrk",139871563949232,139871563949294],["wcstok",139871563949440,139871563949625],["wmemcpy",139871563950016,139871563950025],["wcpcpy",139871563950144,139871563950189],["wmempcpy",139871563950288,139871563950297],["wctob",139871563950768,139871563951119],["__mbrlen",139871563951152,139871563951182],["wcrtomb",139871563951728,139871563952196],["wcsrtombs",139871563952240,139871563952986],["wcsnrtombs",139871563953728,139871563954443],["__wcstol_internal",139871563954560,139871563954576],["__wcstoul_internal",139871563954608,139871563954624],["__wcstod_internal",139871563954656,139871563954672],["__wcstold_internal",139871563954704,139871563954720],["__wcstof_internal",139871563954752,139871563954768],["__wcstol_l",139871563955904,139871563955914],["__wcstod_l",139871563966832,139871563966842],["wcstof32_l",139871563986272,139871563986282],["wcsxfrm",139871563986880,139871563986896],["wcswidth",139871563987008,139871563987167],["__wcsxfrm_l",139871563990704,139871563997216],["wcsncasecmp",139871563997312,139871563997419],["__wcsncasecmp_l",139871563997536,139871563997675],["__isoc99_vwscanf",139871564000448,139871564000474],["__isoc99_vfwscanf",139871564000672,139871564000682],["__isoc99_vswscanf",139871564001008,139871564001181],["c16rtomb",139871564001888,139871564002049],["_dl_catch_error",139871564538608,139871564538710],["_IO_vfscanf",139871564538896,139871564538932],["pthread_cond_init",139871564539088,139871564539123],["pthread_cond_wait",139871564539184,139871564539219],["f32xsubf128",139871565714736,139871565715354],["sigcancel_handler",139871566579344,139871566579497],["__pthread_exit",139871566590304,139871566590348],["__pthread_timedjoin_np",139871566590512,139871566590528],["pthread_getconcurrency",139871566591344,139871566591351],["__pthread_getschedparam",139871566591392,139871566591745],["pthread_setschedprio",139871566592048,139871566592302],["pthread_attr_setguardsize",139871566592320,139871566592327],["__pthread_mutex_cond_lock_full",139871566602144,139871566603999],["__pthread_mutex_cond_lock_adjust",139871566604608,139871566604745],["pthread_mutexattr_getpshared",139871566604784,139871566604794],["pthread_mutexattr_getkind_np",139871566604848,139871566604860],["__pthread_rwlock_init",139871566604912,139871566604970],["__GI___pthread_rwlock_rdlock",139871566604992,139871566605586],["__condvar_release_lock",139871566611248,139871566611331],["__condvar_cleanup_waiting",139871566611776,139871566611908],["__pthread_cond_broadcast",139871566615200,139871566616077],["__pthread_condattr_destroy",139871566616640,139871566616643],["pthread_barrierattr_init",139871566617520,139871566617529],["__dyn_pthread_atfork",139871566619648,139871566619660],["__new_sem_wait",139871566623424,139871566623473],["__GI___pthread_unregister_cancel",139871566624816,139871566624830],["__GI___pthread_unwind",139871566625776,139871566625845],["accept",139871566627184,139871566627339],["fsync",139871566628272,139871566628411],["__libc_pause",139871566628928,139871566629051],["__libc_sigwait",139871566629952,139871566630077],["system_alias",139871566630944,139871566630949],["__sigaction",139871566631728,139871566631772],["__libc_current_sigrtmax",139871566631840,139871566631845],["pthread_getaffinity_np@GLIBC_2.3.3",139871566631968,139871566631981],["pthread_attr_getaffinity_np@GLIBC_2.3.3",139871566632240,139871566632253],["pthread_mutexattr_getrobust",139871566632400,139871566632413],["pthread_mutex_consistent",139871566632464,139871566632500],["_Unwind_Resume",139871566632864,139871566632929],["pthread_mutexattr_setprotocol",139871566633248,139871566633286],["pthread_mutexattr_setprioceiling",139871566633424,139871566633547],["pthread_mutex_getprioceiling",139871566634976,139871566635006],["pthread_setname_np",139871566635472,139871566635765],["pthread_setattr_default_np",139871566636096,139871566636582],["thrd_create",139871566636736,139871566636822],["thrd_exit",139871566636912,139871566636924],["mtx_destroy",139871566637072,139871566637077],["mtx_lock",139871566637280,139871566637358],["mtx_trylock",139871566637440,139871566637518],["call_once",139871566637600,139871566637605],["cnd_destroy",139871566637696,139871566637701],["cnd_signal",139871566637792,139871566637870],["_dl_tunable_set_mutex_spin_count",139871566638224,139871566638234],["_dl_tunable_set_elision_skip_lock_internal_abort",139871566638352,139871566638362],["__lll_trylock_elision",139871566639136,139871566639245],["v8::DelayedTasksPlatform::OnCriticalMemoryPressure()",93957335211440,93957335211455],["v8::DelayedTasksPlatform::GetForegroundTaskRunner(v8::Isolate*)",93957335211504,93957335211965],["v8::Serializer::ThrowDataCloneError(v8::Local<v8::String>)",93957335308048,93957335308083],["void std::__1::vector<std::__1::shared_ptr<v8::BackingStore>, std::__1::allocator<std::__1::shared_ptr<v8::BackingStore> > >::__push_back_slow_path<std::__1::shared_ptr<v8::BackingStore> >(std::__1::shared_ptr<v8::BackingStore>&&)",93957335309424,93957335309790],["v8::Serializer::FinalizeTransfer()",93957335310928,93957335311281],["v8::Deserializer::GetWasmModuleFromId(v8::Isolate*, unsigned int)",93957335311376,93957335311442],["v8::internal::FactoryBase<v8::internal::Factory>::AllocateRawOneByteInternalizedString(int, unsigned int)",93957336833680,93957336833882],["v8::internal::FactoryBase<v8::internal::Factory>::NewClassPositions(int, int)",93957336837040,93957336837268],["v8::internal::FactoryBase<v8::internal::LocalFactory>::NewStruct(v8::internal::InstanceType, v8::internal::AllocationType)",93957336838304,93957336838518],["v8::internal::FactoryBase<v8::internal::LocalFactory>::NewFixedArrayWithMap(v8::internal::Handle<v8::internal::Map>, int, v8::internal::AllocationType)",93957336838928,93957336838948],["v8::internal::FactoryBase<v8::internal::LocalFactory>::NewWeakFixedArrayWithMap(v8::internal::Map, int, v8::internal::AllocationType)",93957336839200,93957336839445],["v8::internal::FactoryBase<v8::internal::LocalFactory>::NewByteArray(int, v8::internal::AllocationType)",93957336839504,93957336839707],["v8::internal::FactoryBase<v8::internal::LocalFactory>::NewObjectBoilerplateDescription(int, int, int, bool)",93957336840304,93957336840444],["v8::internal::FactoryBase<v8::internal::LocalFactory>::NewTemplateObjectDescription(v8::internal::Handle<v8::internal::FixedArray>, v8::internal::Handle<v8::internal::FixedArray>)",93957336840608,93957336840865],["v8::internal::FreeListManyCached::RemoveCategory(v8::internal::FreeListCategory*)",93957336917952,93957336918124],["v8::internal::GCTracer::StopInSafepoint()",93957336924304,93957336924531],["v8::internal::GCTracer::AverageMarkCompactMutatorUtilization() const",93957336936688,93957336936740],["v8::internal::GCTracer::AverageTimeToIncrementalMarkingTask() const",93957336938352,93957336938366],["v8::internal::GCTracer::CurrentAllocationThroughputInBytesPerMillisecond() const",93957336940352,93957336940370],["v8::internal::GCTracer::ResetSurvivalEvents()",93957336940880,93957336940897],["std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_stringstream(unsigned int)",93957336941584,93957336941850],["v8::internal::MemoryController<v8::internal::GlobalMemoryTrait>::GrowingFactor(v8::internal::Heap*, unsigned long, double, double)",93957336942544,93957336942843],["v8::internal::WriteBarrier::ClearForThread(v8::internal::MarkingBarrier*)",93957336943248,93957336943277],["v8::internal::WriteBarrier::MarkingSlow(v8::internal::Heap*, v8::internal::Code, v8::internal::RelocInfo*, v8::internal::HeapObject)",93957336943360,93957336943437],["v8::internal::WriteBarrier::MarkingSlow(v8::internal::Heap*, v8::internal::DescriptorArray, int)",93957336943520,93957336943591],["v8::internal::Heap_GenerationalBarrierSlow(v8::internal::HeapObject, unsigned long, v8::internal::HeapObject)",93957336943744,93957336943905],["v8::internal::Heap::WriteBarrierForCodeSlow(v8::internal::Code)",93957336943936,93957336944369],["v8::internal::Heap_GenerationalEphemeronKeyBarrierSlow(v8::internal::Heap*, v8::internal::EphemeronHashTable, unsigned long)",93957336944528,93957336944736],["v8::internal::Heap::SetSerializedGlobalProxySizes(v8::internal::FixedArray)",93957336944752,93957336944765],["v8::internal::Heap::Heap()",93957336944784,93957336945691],["v8::internal::MemoryMeasurement::~MemoryMeasurement()",93957337054064,93957337054483],["v8::internal::IncrementalMarking::MarkBlackBackground(v8::internal::HeapObject, int)",93957337059408,93957337059638],["v8::internal::IncrementalMarking::StartMarking()",93957337061280,93957337062112],["v8::internal::IncrementalMarking::FinalizeIncrementally()",93957337063360,93957337063857],["v8::internal::IncrementalMarking::ProcessBlackAllocatedObject(v8::internal::HeapObject)",93957337064560,93957337064670],["v8::internal::IncrementalMarking::Hurry()",93957337065568,93957337065769],["v8::internal::IncrementalMarking::Finalize()",93957337066400,93957337066428],["v8::internal::IncrementalMarking::Epilogue()",93957337066928,93957337066942],["v8::internal::NativeContextInferrer::InferForJSFunction(v8::internal::Isolate*, v8::internal::JSFunction, unsigned long*)",93957337437264,93957337437368],["v8::internal::SemiSpace::Swap(v8::internal::SemiSpace*, v8::internal::SemiSpace*)",93957337444352,93957337444817],["v8::internal::NewSpace::Rebalance()",93957337448032,93957337448087],["v8::internal::Space::~Space()",93957337449600,93957337449779],["v8::internal::NewSpace::ExternalBackingStoreBytes(v8::internal::ExternalBackingStoreType) const",93957337450208,93957337450241],["v8::internal::ObjectStats::PrintInstanceTypeJSON(char const*, int, char const*, int)",93957337451472,93957337451765],["v8::internal::DumpJSONArray(std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, unsigned long*, int)",93957337461696,93957337461735],["v8::internal::ObjectStatsCollectorImpl::RecordExternalResourceStats(unsigned long, v8::internal::ObjectStats::VirtualInstanceType, unsigned long)",93957337471008,93957337471520],["v8::internal::ObjectStatsCollectorImpl::RecordVirtualJSGlobalObjectDetails(v8::internal::JSGlobalObject)",93957337472224,93957337472432],["v8::internal::ObjectStatsCollectorImpl::RecordVirtualFeedbackVectorDetails(v8::internal::FeedbackVector)",93957337473552,93957337475113],["v8::internal::ObjectStatsCollectorImpl::CollectStatistics(v8::internal::HeapObject, v8::internal::ObjectStatsCollectorImpl::Phase, v8::internal::ObjectStatsCollectorImpl::CollectFieldStats)",93957337475232,93957337476049],["v8::internal::ObjectStatsCollectorImpl::RecordVirtualBytecodeArrayDetails(v8::internal::BytecodeArray)",93957337477008,93957337477440],["v8::internal::ObjectStatsCollectorImpl::RecordVirtualSharedFunctionInfoDetails(v8::internal::SharedFunctionInfo)",93957337478016,93957337478145],["v8::internal::ObjectStatsCollectorImpl::RecordVirtualScriptDetails(v8::internal::Script)",93957337478448,93957337478783],["v8::internal::FieldStatsCollector::RecordStats(v8::internal::HeapObject)",93957337479200,93957337479534],["v8::internal::ObjectStatsCollectorImpl::RecordVirtualObjectsForConstantPoolOrEmbeddedObjects(v8::internal::HeapObject, v8::internal::HeapObject, v8::internal::ObjectStats::VirtualInstanceType)",93957337480048,93957337480259],["v8::internal::Sweeper::PauseOrCompleteScope::~PauseOrCompleteScope()",93957337601568,93957337601739],["v8::internal::LoadHandler::LoadElement(v8::internal::Isolate*, v8::internal::ElementsKind, bool, bool, v8::internal::KeyedAccessLoadMode)",93957337648640,93957337648757],["v8::internal::Stats_Runtime_StoreInArrayLiteralIC_Miss(int, unsigned long*, v8::internal::Isolate*)",93957337685760,93957337686559],["v8::internal::StubCache::StubCache(v8::internal::Isolate*)",93957337710432,93957337710469],["v8::internal::(anonymous namespace)::SimpleCreateFunction(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, v8::internal::Builtins::Name, int, bool)",93957337721872,93957337722035],["v8::internal::(anonymous namespace)::InstallFunction(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, char const*, v8::internal::InstanceType, int, int, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Builtins::Name)",93957337788096,93957337788205],["v8::internal::Genesis::InitializeGlobal_harmony_regexp_match_indices()",93957337794272,93957337794913],["v8::internal::Genesis::TransferObject(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::JSObject>)",93957337812816,93957337813083],["v8::internal::InitializeExternalStartupData(char const*)",93957337817472,93957337817527],["v8::internal::V8::ShutdownPlatform()",93957337819168,93957337819228],["v8::internal::interpreter::BytecodeArrayBuilder::BytecodeArrayBuilder(v8::internal::Zone*, int, int, v8::internal::FeedbackVectorSpec*, v8::internal::SourcePositionTableBuilder::RecordingMode)",93957337819728,93957337820091],["v8::internal::interpreter::BytecodeArrayBuilder::TypeOf()",93957337827600,93957337827837],["v8::internal::interpreter::BytecodeArrayBuilder::CompareTypeOf(v8::internal::interpreter::TestTypeOfFlags::LiteralFlag)",93957337831776,93957337832050],["v8::internal::interpreter::BytecodeArrayBuilder::LoadNull()",93957337834304,93957337834533],["v8::internal::interpreter::BytecodeArrayBuilder::LoadGlobal(v8::internal::AstRawString const*, int, v8::internal::TypeofMode)",93957337836480,93957337837089],["v8::internal::interpreter::BytecodeArrayBuilder::LoadNamedProperty(v8::internal::interpreter::Register, v8::internal::AstRawString const*, int)",93957337841728,93957337842174],["v8::internal::interpreter::BytecodeArrayBuilder::LoadAsyncIteratorProperty(v8::internal::interpreter::Register, int)",93957337844384,93957337844827],["v8::internal::interpreter::BytecodeArrayBuilder::StoreNamedProperty(v8::internal::interpreter::Register, v8::internal::AstRawString const*, int, v8::internal::LanguageMode)",93957337846064,93957337846125],["v8::internal::interpreter::BytecodeArrayBuilder::StoreInArrayLiteral(v8::internal::interpreter::Register, v8::internal::interpreter::Register, int)",93957337847568,93957337848068],["v8::internal::interpreter::BytecodeArrayBuilder::CreateBlockContext(v8::internal::Scope const*)",93957337848928,93957337849198],["v8::internal::interpreter::BytecodeArrayBuilder::CreateWithContext(v8::internal::interpreter::Register, v8::internal::Scope const*)",93957337850272,93957337850670],["v8::internal::interpreter::BytecodeArrayBuilder::CreateArrayLiteral(unsigned long, int, int)",93957337851744,93957337852065],["v8::internal::interpreter::BytecodeArrayBuilder::CloneObject(v8::internal::interpreter::Register, int, int)",93957337852880,93957337853279],["v8::internal::interpreter::BytecodeArrayBuilder::ToObject(v8::internal::interpreter::Register)",93957337854352,93957337854717],["v8::internal::interpreter::BytecodeArrayBuilder::Bind(v8::internal::interpreter::BytecodeLabel*)",93957337855616,93957337855676],["v8::internal::interpreter::BytecodeArrayBuilder::MarkTryBegin(int, v8::internal::interpreter::Register)",93957337855904,93957337855992],["v8::internal::interpreter::BytecodeArrayBuilder::JumpIfFalse(v8::internal::interpreter::BytecodeArrayBuilder::ToBooleanMode, v8::internal::interpreter::BytecodeLabel*)",93957337856768,93957337857223],["v8::internal::interpreter::BytecodeArrayBuilder::JumpIfUndefinedOrNull(v8::internal::interpreter::BytecodeLabel*)",93957337858048,93957337858315],["v8::internal::interpreter::BytecodeArrayBuilder::JumpIfJSReceiver(v8::internal::interpreter::BytecodeLabel*)",93957337858752,93957337859019],["v8::internal::interpreter::BytecodeArrayBuilder::Throw()",93957337859984,93957337860197],["v8::internal::interpreter::BytecodeArrayBuilder::ThrowSuperNotCalledIfHole()",93957337860928,93957337861141],["v8::internal::interpreter::BytecodeArrayBuilder::IncBlockCounter(int)",93957337861920,93957337862153],["v8::internal::interpreter::BytecodeArrayBuilder::ForInContinue(v8::internal::interpreter::Register, v8::internal::interpreter::Register)",93957337862944,93957337863373],["v8::internal::interpreter::BytecodeArrayBuilder::ForInStep(v8::internal::interpreter::Register)",93957337863968,93957337864335],["v8::internal::interpreter::BytecodeArrayBuilder::LoadModuleVariable(int, int)",93957337864656,93957337864965],["v8::internal::interpreter::BytecodeArrayBuilder::SwitchOnGeneratorState(v8::internal::interpreter::Register, v8::internal::interpreter::BytecodeJumpTable*)",93957337865536,93957337866017],["v8::internal::interpreter::BytecodeArrayBuilder::CallProperty(v8::internal::interpreter::Register, v8::internal::interpreter::RegisterList, int)",93957337866560,93957337868700],["v8::internal::interpreter::BytecodeArrayBuilder::CallAnyReceiver(v8::internal::interpreter::Register, v8::internal::interpreter::RegisterList, int)",93957337870640,93957337871181],["v8::internal::interpreter::BytecodeArrayBuilder::CallWithSpread(v8::internal::interpreter::Register, v8::internal::interpreter::RegisterList, int)",93957337871696,93957337872237],["v8::internal::interpreter::BytecodeArrayBuilder::ConstructWithSpread(v8::internal::interpreter::Register, v8::internal::interpreter::RegisterList, int)",93957337872800,93957337873360],["v8::internal::interpreter::BytecodeArrayBuilder::CallRuntime(v8::internal::Runtime::FunctionId, v8::internal::interpreter::Register)",93957337874176,93957337874201],["v8::internal::interpreter::BytecodeArrayBuilder::CallRuntimeForPair(v8::internal::Runtime::FunctionId, v8::internal::interpreter::RegisterList, v8::internal::interpreter::RegisterList)",93957337874224,93957337874767],["v8::internal::interpreter::BytecodeArrayBuilder::CallJSRuntime(int, v8::internal::interpreter::RegisterList)",93957337874800,93957337875227],["v8::internal::interpreter::BytecodeArrayBuilder::EmptyObjectBoilerplateDescriptionConstantPoolEntry()",93957337875888,93957337875902],["v8::internal::interpreter::BytecodeArrayBuilder::AllocateJumpTable(int, int)",93957337875920,93957337876023],["v8::internal::interpreter::BytecodeArrayBuilder::SetDeferredConstantPoolEntry(unsigned long, v8::internal::Handle<v8::internal::Object>)",93957337876048,93957337876062],["v8::internal::interpreter::RegisterTransferWriter::EmitLdar(v8::internal::interpreter::Register)",93957337876112,93957337876278],["v8::internal::interpreter::RegisterTransferWriter::EmitMov(v8::internal::interpreter::Register, v8::internal::interpreter::Register)",93957337876496,93957337876721],["v8::internal::interpreter::BytecodeArrayIterator::GetSlotOperand(int) const",93957337876928,93957337877005],["v8::internal::interpreter::BytecodeArrayIterator::BytecodeArrayIterator(v8::internal::Handle<v8::internal::BytecodeArray>, int)",93957337877200,93957337877391],["v8::internal::interpreter::BytecodeArrayIterator::~BytecodeArrayIterator()",93957337877456,93957337877480],["v8::internal::interpreter::BytecodeArrayIterator::ApplyDebugBreak()",93957337877584,93957337877650],["v8::internal::interpreter::BytecodeArrayIterator::current_bytecode_size_without_prefix() const",93957337877712,93957337877750],["v8::internal::interpreter::BytecodeArrayIterator::GetUnsignedImmediateOperand(int) const",93957337877824,93957337877875],["v8::internal::interpreter::BytecodeArrayIterator::GetRegisterCountOperand(int) const",93957337877952,93957337878003],["v8::internal::interpreter::BytecodeArrayIterator::GetRegisterOperand(int) const",93957337878048,93957337878125],["v8::internal::interpreter::BytecodeArrayIterator::GetRegisterListOperand(int) const",93957337878224,93957337878364],["v8::internal::interpreter::BytecodeArrayIterator::GetRelativeJumpTargetOffset() const",93957337878464,93957337878666],["v8::internal::interpreter::BytecodeArrayIterator::GetJumpTableTargetOffsets() const",93957337878704,93957337879016],["v8::internal::interpreter::JumpTableTargetOffsets::begin() const",93957337879072,93957337879218],["v8::internal::interpreter::JumpTableTargetOffsets::size() const",93957337879280,93957337879676],["v8::internal::interpreter::JumpTableTargetOffsets::iterator::operator*()",93957337879696,93957337879728],["v8::internal::interpreter::BytecodeArrayRandomIterator::BytecodeArrayRandomIterator(v8::internal::Handle<v8::internal::BytecodeArray>, v8::internal::Zone*)",93957337879872,93957337880338],["v8::internal::interpreter::BytecodeArrayRandomIterator::IsValid() const",93957337881344,93957337881379],["v8::internal::RegExpParser::IsSyntaxCharacterOrSlash(unsigned int)",93957339878096,93957339878131],["v8::internal::(anonymous namespace)::LookupPropertyValueName(UProperty, char const*, bool, v8::internal::ZoneList<v8::internal::CharacterRange>*, v8::internal::Zone*)",93957339905424,93957339906036],["_ZNSt3__16vectorIPN2v88internal13RegExpCaptureENS2_13ZoneAllocatorIS4_EEEC2INS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEEEET_SF_RKS6_PNS_9enable_ifIXaasr27__is_cpp17_forward_iteratorISF_EE5valuesr16is_constructibleIS4_NS_15iterator_traitsISF_E9referenceEEE5valueEvE4typeE",93957339910880,93957339911198],["v8::internal::RegExpStack::EnsureCapacity(unsigned long)",93957339914064,93957339914325],["v8::internal::RegExpUtils::AdvanceStringIndex(v8::internal::Handle<v8::internal::String>, unsigned long, bool)",93957339916832,93957339917049],["v8::internal::RegExp::IsUnmodifiedRegExp(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSRegExp>)",93957339917968,93957339917978],["v8::internal::RegExpImpl::IrregexpPrepare(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSRegExp>, v8::internal::Handle<v8::internal::String>)",93957339919568,93957339919939],["v8::internal::RegExpImpl::IrregexpExec(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSRegExp>, v8::internal::Handle<v8::internal::String>, int, v8::internal::Handle<v8::internal::RegExpMatchInfo>, v8::internal::RegExp::ExecQuirks)",93957339920448,93957339920996],["v8::internal::RegExpImpl::Compile(v8::internal::Isolate*, v8::internal::Zone*, v8::internal::RegExpCompileData*, v8::base::Flags<v8::internal::JSRegExp::Flag, int>, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String>, bool, unsigned int&)",93957339923872,93957339924780],["v8::internal::RegExp::SetLastMatchInfo(v8::internal::Isolate*, v8::internal::Handle<v8::internal::RegExpMatchInfo>, v8::internal::Handle<v8::internal::String>, int, int*)",93957339925648,93957339926353],["v8::internal::RegExpGlobalCache::~RegExpGlobalCache()",93957339926896,93957339926926],["v8::internal::RegExpGlobalCache::FetchNext()",93957339927168,93957339927517],["v8::internal::RegExpResultsCache::Lookup(v8::internal::Heap*, v8::internal::String, v8::internal::Object, v8::internal::FixedArray*, v8::internal::RegExpResultsCache::ResultsCacheType)",93957339927568,93957339927787],["v8::internal::RegExpResultsCache::Clear(v8::internal::FixedArray)",93957339929600,93957339929655],["v8::internal::Runtime_TransitionElementsKind(int, unsigned long*, v8::internal::Isolate*)",93957339929728,93957339930025],["v8::internal::Runtime_TransitionElementsKindWithKind(int, unsigned long*, v8::internal::Isolate*)",93957339930720,93957339930953],["v8::internal::Stats_Runtime_AllocateInYoungGeneration(int, unsigned long*, v8::internal::Isolate*)",93957340107456,93957340108156],["v8::internal::Stats_Runtime_AllocateInOldGeneration(int, unsigned long*, v8::internal::Isolate*)",93957340108496,93957340109202],["v8::internal::Runtime_AllocateSeqOneByteString(int, unsigned long*, v8::internal::Isolate*)",93957340109952,93957340110153],["v8::internal::Runtime_ThrowIteratorError(int, unsigned long*, v8::internal::Isolate*)",93957340111552,93957340111695],["v8::internal::Runtime_ThrowConstructedNonConstructable(int, unsigned long*, v8::internal::Isolate*)",93957340113680,93957340113823],["v8::internal::Runtime_IncrementUseCounter(int, unsigned long*, v8::internal::Isolate*)",93957340116432,93957340116598],["v8::internal::Runtime_AllowDynamicFunction(int, unsigned long*, v8::internal::Isolate*)",93957340121776,93957340122101],["v8::internal::Runtime_GetInitializerFunction(int, unsigned long*, v8::internal::Isolate*)",93957340126240,93957340126658],["v8::internal::Runtime_StringToLowerCaseIntl(int, unsigned long*, v8::internal::Isolate*)",93957340130720,93957340130936],["v8::internal::Runtime_CreateArrayLiteralWithoutAllocationSite(int, unsigned long*, v8::internal::Isolate*)",93957340137152,93957340137507],["v8::internal::(anonymous namespace)::JSObjectWalkVisitor<v8::internal::(anonymous namespace)::DeprecationUpdateContext>::StructureWalk(v8::internal::Handle<v8::internal::JSObject>)",93957340144912,93957340146806],["v8::internal::Runtime_GetModuleNamespace(int, unsigned long*, v8::internal::Isolate*)",93957340156192,93957340156470],["v8::internal::Runtime_StringParseFloat(int, unsigned long*, v8::internal::Isolate*)",93957340160816,93957340161211],["v8::internal::Runtime_GetHoleNaNUpper(int, unsigned long*, v8::internal::Isolate*)",93957340163776,93957340163923],["v8::internal::Stats_Runtime_ObjectKeys(int, unsigned long*, v8::internal::Isolate*)",93957340167456,93957340168083],["v8::internal::Stats_Runtime_HasOwnConstDataProperty(int, unsigned long*, v8::internal::Isolate*)",93957340173120,93957340173839],["v8::internal::Stats_Runtime_ObjectCreate(int, unsigned long*, v8::internal::Isolate*)",93957340175648,93957340176317],["v8::internal::Runtime_OptimizeObjectForAddingMultipleProperties(int, unsigned long*, v8::internal::Isolate*)",93957340177536,93957340177870],["v8::internal::Runtime_ObjectValuesSkipFastPath(int, unsigned long*, v8::internal::Isolate*)",93957340179504,93957340179757],["v8::internal::Runtime_ObjectEntriesSkipFastPath(int, unsigned long*, v8::internal::Isolate*)",93957340181328,93957340181581],["v8::internal::Runtime_JSReceiverPreventExtensionsThrow(int, unsigned long*, v8::internal::Isolate*)",93957340183088,93957340183302],["v8::internal::Runtime_JSReceiverGetPrototypeOf(int, unsigned long*, v8::internal::Isolate*)",93957340184800,93957340185186],["v8::internal::Runtime_JSReceiverSetPrototypeOfDontThrow(int, unsigned long*, v8::internal::Isolate*)",93957340186832,93957340187082],["v8::internal::Runtime_SetKeyedProperty(int, unsigned long*, v8::internal::Isolate*)",93957340191024,93957340191182],["v8::internal::Runtime_StoreDataPropertyInLiteral(int, unsigned long*, v8::internal::Isolate*)",93957340192480,93957340192825],["v8::internal::Runtime_ShrinkPropertyDictionary(int, unsigned long*, v8::internal::Isolate*)",93957340194576,93957340194905],["v8::internal::Runtime_GetOwnPropertyKeys(int, unsigned long*, v8::internal::Isolate*)",93957340196656,93957340196952],["v8::internal::Runtime_AllocateHeapNumber(int, unsigned long*, v8::internal::Isolate*)",93957340198496,93957340198637],["v8::internal::Runtime_GetDerivedMap(int, unsigned long*, v8::internal::Isolate*)",93957340200128,93957340200404],["v8::internal::Runtime_TryMigrateInstance(int, unsigned long*, v8::internal::Isolate*)",93957340201936,93957340202174],["v8::internal::Runtime_DefineDataPropertyInLiteral(int, unsigned long*, v8::internal::Isolate*)",93957340204272,93957340205533],["v8::internal::Runtime_HasFastPackedElements(int, unsigned long*, v8::internal::Isolate*)",93957340208624,93957340208727],["v8::internal::Stats_Runtime_IsJSReceiver(int, unsigned long*, v8::internal::Isolate*)",93957340209376,93957340209945],["v8::internal::Stats_Runtime_GetFunctionName(int, unsigned long*, v8::internal::Isolate*)",93957340210160,93957340210752],["v8::internal::Stats_Runtime_DefineGetterPropertyUnchecked(int, unsigned long*, v8::internal::Isolate*)",93957340211600,93957340212811],["v8::internal::Stats_Runtime_SetDataProperties(int, unsigned long*, v8::internal::Isolate*)",93957340213072,93957340213720],["v8::internal::Stats_Runtime_CopyDataProperties(int, unsigned long*, v8::internal::Isolate*)",93957340213984,93957340214632],["v8::internal::Stats_Runtime_CopyDataPropertiesWithExcludedProperties(int, unsigned long*, v8::internal::Isolate*)",93957340215584,93957340216902],["v8::internal::Stats_Runtime_DefineSetterPropertyUnchecked(int, unsigned long*, v8::internal::Isolate*)",93957340217776,93957340218987],["v8::internal::Stats_Runtime_ToObject(int, unsigned long*, v8::internal::Isolate*)",93957340219040,93957340219394],["v8::internal::Stats_Runtime_ToNumber(int, unsigned long*, v8::internal::Isolate*)",93957340219600,93957340220177],["v8::internal::Stats_Runtime_ToNumeric(int, unsigned long*, v8::internal::Isolate*)",93957340220400,93957340220998],["v8::internal::Stats_Runtime_ToLength(int, unsigned long*, v8::internal::Isolate*)",93957340221232,93957340221842],["v8::internal::Stats_Runtime_ToString(int, unsigned long*, v8::internal::Isolate*)",93957340222048,93957340222623],["v8::internal::Stats_Runtime_ToName(int, unsigned long*, v8::internal::Isolate*)",93957340222816,93957340223391],["v8::internal::Stats_Runtime_HasInPrototypeChain(int, unsigned long*, v8::internal::Isolate*)",93957340223648,93957340224288],["v8::internal::Stats_Runtime_CreateIterResultObject(int, unsigned long*, v8::internal::Isolate*)",93957340224464,93957340225011],["v8::internal::Stats_Runtime_CreateDataProperty(int, unsigned long*, v8::internal::Isolate*)",93957340225376,93957340226094],["v8::internal::Stats_Runtime_SetOwnPropertyIgnoreAttributes(int, unsigned long*, v8::internal::Isolate*)",93957340226416,93957340227123],["v8::internal::Stats_Runtime_GetOwnPropertyDescriptor(int, unsigned long*, v8::internal::Isolate*)",93957340227504,93957340228242],["v8::internal::Stats_Runtime_LoadPrivateSetter(int, unsigned long*, v8::internal::Isolate*)",93957340228384,93957340228953],["v8::internal::Stats_Runtime_LoadPrivateGetter(int, unsigned long*, v8::internal::Isolate*)",93957340229088,93957340229657],["v8::internal::Stats_Runtime_CreatePrivateAccessors(int, unsigned long*, v8::internal::Isolate*)",93957340230160,93957340231040],["v8::internal::Stats_Runtime_AddPrivateBrand(int, unsigned long*, v8::internal::Isolate*)",93957340231696,93957340232767],["v8::internal::Stats_Runtime_AddPrivateField(int, unsigned long*, v8::internal::Isolate*)",93957340233376,93957340234387],["v8::internal::Stats_Runtime_SwissTableAllocate(int, unsigned long*, v8::internal::Isolate*)",93957340234576,93957340235135],["v8::internal::Stats_Runtime_SwissTableAdd(int, unsigned long*, v8::internal::Isolate*)",93957340235440,93957340236141],["v8::internal::Stats_Runtime_SwissTableFindEntry(int, unsigned long*, v8::internal::Isolate*)",93957340236592,93957340237436],["v8::internal::Stats_Runtime_SwissTableUpdate(int, unsigned long*, v8::internal::Isolate*)",93957340237936,93957340238786],["v8::internal::Stats_Runtime_SwissTableDelete(int, unsigned long*, v8::internal::Isolate*)",93957340239040,93957340239669],["v8::internal::Stats_Runtime_SwissTableEquals(int, unsigned long*, v8::internal::Isolate*)",93957340239968,93957340240635],["v8::internal::Stats_Runtime_SwissTableElementsCount(int, unsigned long*, v8::internal::Isolate*)",93957340240832,93957340241458],["v8::internal::Stats_Runtime_SwissTableKeyAt(int, unsigned long*, v8::internal::Isolate*)",93957340241664,93957340242284],["v8::internal::Stats_Runtime_SwissTableValueAt(int, unsigned long*, v8::internal::Isolate*)",93957340242480,93957340243100],["v8::internal::Serializer::OutputStatistics(char const*)",93957340544768,93957340545031],["v8::internal::Serializer::SerializeRootObject(v8::internal::FullObjectSlot)",93957340546048,93957340546153],["v8::internal::Serializer::SerializeBackReference(v8::internal::Handle<v8::internal::HeapObject>)",93957340546784,93957340547083],["v8::internal::Serializer::InitializeCodeAddressMap()",93957340547856,93957340548142],["v8::internal::Serializer::ObjectSerializer::SerializeJSTypedArray()",93957340550560,93957340550716],["v8::internal::Serializer::ObjectSerializer::SerializeExternalStringAsSequentialString()",93957340551424,93957340551896],["v8::internal::Serializer::ObjectSerializer::SerializeCode(v8::internal::Map, int)",93957340553504,93957340554179],["v8::internal::Serializer::ObjectSerializer::VisitExternalReference(v8::internal::Foreign, unsigned long*)",93957340556976,93957340557012],["v8::internal::Serializer::ObjectSerializer::VisitOffHeapTarget(v8::internal::Code, v8::internal::RelocInfo*)",93957340557200,93957340557326],["v8::internal::CodeAddressMap::~CodeAddressMap()",93957340558496,93957340558682],["v8::internal::CodeAddressMap::NameMap::FindOrCreateEntry(unsigned long)",93957340559904,93957340560182],["v8::internal::SerializedData::AllocateData(unsigned int)",93957340560896,93957340561006],["v8::internal::SnapshotByteSink::PutInt(unsigned long, char const*)",93957340561424,93957340561646],["v8::internal::SnapshotByteSink::Append(v8::internal::SnapshotByteSink const&)",93957340561680,93957340561704],["v8::internal::Checksum(v8::internal::Vector<unsigned char const>)",93957340563632,93957340563673],["v8::internal::Snapshot::Initialize(v8::internal::Isolate*)",93957340563728,93957340564760],["v8::internal::Snapshot::ClearReconstructableDataForSerialization(v8::internal::Isolate*, bool)",93957340565408,93957340566925],["v8::internal::Snapshot::Create(v8::internal::Isolate*, std::__1::vector<v8::internal::Context, std::__1::allocator<v8::internal::Context> >*, std::__1::vector<v8::SerializeInternalFieldsCallback, std::__1::allocator<v8::SerializeInternalFieldsCallback> > const&, v8::internal::CombinationAssertScope<v8::internal::PerThreadAssertScopeDebugOnly<(v8::internal::PerThreadAssertType)0, false>, v8::internal::PerThreadAssertScopeDebugOnly<(v8::internal::PerThreadAssertType)1, false> > const&, v8::base::Flags<v8::internal::Snapshot::SerializerFlag, int>)",93957340567408,93957340570853],["v8::internal::(anonymous namespace)::RunExtraCode(v8::Isolate*, v8::Local<v8::Context>, char const*, char const*)",93957340571088,93957340571444],["v8::internal::StartupDeserializer::DeserializeIntoIsolate()",93957340571856,93957340572428],["v8::internal::StartupSerializer::StartupSerializer(v8::internal::Isolate*, v8::base::Flags<v8::internal::Snapshot::SerializerFlag, int>, v8::internal::ReadOnlySerializer*)",93957340572592,93957340572716],["v8::internal::StartupSerializer::~StartupSerializer()",93957340573024,93957340573052],["v8::internal::StartupSerializer::SerializeUsingReadOnlyObjectCache(v8::internal::SnapshotByteSink*, v8::internal::Handle<v8::internal::HeapObject>)",93957340573824,93957340573841],["v8::internal::StartupSerializer::SerializeWeakReferencesAndDeferred()",93957340573984,93957340574152],["v8::internal::SerializedHandleChecker::SerializedHandleChecker(v8::internal::Isolate*, std::__1::vector<v8::internal::Context, std::__1::allocator<v8::internal::Context> >*)",93957340574336,93957340574659],["v8::internal::StartupSerializer::CheckNoDirtyFinalizationRegistries()",93957340574736,93957340574810],["v8::internal::SerializedHandleChecker::CheckGlobalAndEternalHandles()",93957340575296,93957340575353],["v8::internal::SerializedHandleChecker::~SerializedHandleChecker()",93957340575440,93957340575522],["v8_inspector::V8Debugger::asyncTaskScheduledForStack(v8_inspector::String16 const&, void*, bool)",93957342538704,93957342539093],["v8_inspector::V8Debugger::setAsyncCallStackDepth(v8_inspector::V8DebuggerAgentImpl*, int)",93957342543424,93957342543722],["v8_inspector::V8Debugger::storeStackTrace(std::__1::shared_ptr<v8_inspector::AsyncStackTrace>)",93957342546608,93957342546771],["v8_inspector::V8Debugger::asyncTaskCanceled(void*)",93957342547664,93957342547745],["v8_inspector::V8Debugger::muteScriptParsedEvents()",93957342548048,93957342548058],["v8_inspector::V8Debugger::symbolize(v8::Local<v8::StackFrame>)",93957342548080,93957342548187],["void std::__1::__function::__policy_invoker<void (v8_inspector::V8InspectorSessionImpl*)>::__call_impl<std::__1::__function::__default_alloc_func<v8_inspector::V8Debugger::handleProgramBreak(v8::Local<v8::Context>, v8::Local<v8::Value>, std::__1::vector<int, std::__1::allocator<int> > const&, v8::debug::ExceptionType, bool)::$_2, void (v8_inspector::V8InspectorSessionImpl*)> >(std::__1::__function::__policy_storage const*, v8_inspector::V8InspectorSessionImpl*)",93957342548368,93957342548413],["void* std::__1::__function::__policy::__large_clone<std::__1::__function::__default_alloc_func<v8_inspector::V8Debugger::handleProgramBreak(v8::Local<v8::Context>, v8::Local<v8::Value>, std::__1::vector<int, std::__1::allocator<int> > const&, v8::debug::ExceptionType, bool)::$_3, void (v8_inspector::V8InspectorSessionImpl*)> >(void const*)",93957342548544,93957342548600],["_ZNSt3__16vectorIhNS_9allocatorIhEEE6insertIPKtEENS_9enable_ifIXaasr27__is_cpp17_forward_iteratorIT_EE5valuesr16is_constructibleIhNS_15iterator_traitsIS8_E9referenceEEE5valueENS_11__wrap_iterIPhEEE4typeENSC_IPKhEES8_S8_",93957342746192,93957342748654],["v8_crdtp::cbor::(anonymous namespace)::CBOREncoder::HandleString16(v8_crdtp::span<unsigned short>)",93957342752704,93957342752845],["v8_crdtp::DispatchResponse::Success()",93957342754992,93957342755022],["v8_crdtp::Dispatchable::DispatchError() const",93957342756224,93957342756368],["v8_crdtp::DomainDispatcher::Callback::~Callback()",93957342757440,93957342757619],["v8_crdtp::DomainDispatcher::sendResponse(int, v8_crdtp::DispatchResponse const&, std::__1::unique_ptr<v8_crdtp::Serializable, std::__1::default_delete<v8_crdtp::Serializable> >)",93957342758016,93957342758290],["v8_crdtp::DomainDispatcher::MaybeReportInvalidParams(v8_crdtp::Dispatchable const&, v8_crdtp::DeserializerState const&)",93957342758896,93957342759112],["v8_crdtp::UberDispatcher::~UberDispatcher()",93957342759328,93957342759462],["v8_crdtp::UberDispatcher::WireBackend(v8_crdtp::span<unsigned char>, std::__1::vector<std::__1::pair<v8_crdtp::span<unsigned char>, v8_crdtp::span<unsigned char> >, std::__1::allocator<std::__1::pair<v8_crdtp::span<unsigned char>, v8_crdtp::span<unsigned char> > > > const&, std::__1::unique_ptr<v8_crdtp::DomainDispatcher, std::__1::default_delete<v8_crdtp::DomainDispatcher> >)",93957342760816,93957342761376],["std::__1::vector<std::__1::pair<v8_crdtp::span<unsigned char>, std::__1::unique_ptr<v8_crdtp::DomainDispatcher, std::__1::default_delete<v8_crdtp::DomainDispatcher> > >, std::__1::allocator<std::__1::pair<v8_crdtp::span<unsigned char>, std::__1::unique_ptr<v8_crdtp::DomainDispatcher, std::__1::default_delete<v8_crdtp::DomainDispatcher> > > > >::insert(std::__1::__wrap_iter<std::__1::pair<v8_crdtp::span<unsigned char>, std::__1::unique_ptr<v8_crdtp::DomainDispatcher, std::__1::default_delete<v8_crdtp::DomainDispatcher> > > const*>, std::__1::pair<v8_crdtp::span<unsigned char>, std::__1::unique_ptr<v8_crdtp::DomainDispatcher, std::__1::default_delete<v8_crdtp::DomainDispatcher> > >&&)",93957342762256,93957342763058],["v8_crdtp::(anonymous namespace)::ProtocolError::~ProtocolError()",93957342763408,93957342763476],["v8_crdtp::(anonymous namespace)::Response::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342763568,93957342763752],["v8_crdtp::(anonymous namespace)::Response::~Response()",93957342763808,93957342763864],["v8_crdtp::(anonymous namespace)::Notification::~Notification()",93957342764096,93957342764139],["void std::__1::__function::__policy_invoker<void ()>::__call_impl<std::__1::__function::__default_alloc_func<v8_crdtp::UberDispatcher::Dispatch(v8_crdtp::Dispatchable const&) const::$_0, void ()> >(std::__1::__function::__policy_storage const*)",93957342764208,93957342764226],["void std::__1::__function::__policy::__large_destroy<std::__1::__function::__default_alloc_func<v8_crdtp::UberDispatcher::Dispatch(v8_crdtp::Dispatchable const&) const::$_0, void ()> >(void*)",93957342764384,93957342764426],["v8::internal::compiler::InstructionSelector::VisitComment(v8::internal::compiler::Node*)",93957342960336,93957342960429],["std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::compiler::FeedbackSource, v8::internal::compiler::MinimorphicLoadPropertyAccessInfo>, std::__1::__unordered_map_hasher<v8::internal::compiler::FeedbackSource, std::__1::__hash_value_type<v8::internal::compiler::FeedbackSource, v8::internal::compiler::MinimorphicLoadPropertyAccessInfo>, v8::internal::compiler::FeedbackSource::Hash, v8::internal::compiler::FeedbackSource::Equal, true>, std::__1::__unordered_map_equal<v8::internal::compiler::FeedbackSource, std::__1::__hash_value_type<v8::internal::compiler::FeedbackSource, v8::internal::compiler::MinimorphicLoadPropertyAccessInfo>, v8::internal::compiler::FeedbackSource::Equal, v8::internal::compiler::FeedbackSource::Hash, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<v8::internal::compiler::FeedbackSource, v8::internal::compiler::MinimorphicLoadPropertyAccessInfo> > >::__rehash(unsigned long)",93957342974064,93957342974804],["v8::internal::compiler::ReferenceMap::RecordReference(v8::internal::compiler::AllocatedOperand const&)",93957342981600,93957342982303],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Constant const&)",93957342990240,93957342990532],["v8::internal::compiler::InstructionSequence::InstructionBlocksFor(v8::internal::Zone*, v8::internal::compiler::Schedule const*)",93957342992832,93957342996414],["v8::internal::compiler::InstructionSequence::StartBlock(v8::internal::compiler::RpoNumber)",93957342999744,93957342999804],["v8::internal::compiler::InstructionSequence::GetRepresentation(int) const",93957343000480,93957343000513],["v8::internal::compiler::InstructionSequence::InputRpo(v8::internal::compiler::Instruction*, unsigned long)",93957343001184,93957343001308],["v8::internal::compiler::FrameStateDescriptor::FrameStateDescriptor(v8::internal::Zone*, v8::internal::compiler::FrameStateType, v8::internal::BytecodeOffset, v8::internal::compiler::OutputFrameStateCombine, unsigned long, unsigned long, unsigned long, v8::internal::MaybeHandle<v8::internal::SharedFunctionInfo>, v8::internal::compiler::FrameStateDescriptor*)",93957343001616,93957343001969],["v8::internal::compiler::FrameStateDescriptor::GetSize() const",93957343002048,93957343002113],["v8::internal::compiler::FrameStateDescriptor::GetFrameCount() const",93957343002224,93957343002255],["v8::internal::compiler::JSToWasmFrameStateDescriptor::JSToWasmFrameStateDescriptor(v8::internal::Zone*, v8::internal::compiler::FrameStateType, v8::internal::BytecodeOffset, v8::internal::compiler::OutputFrameStateCombine, unsigned long, unsigned long, unsigned long, v8::internal::MaybeHandle<v8::internal::SharedFunctionInfo>, v8::internal::compiler::FrameStateDescriptor*, v8::internal::Signature<v8::internal::wasm::ValueType> const*)",93957343002320,93957343002384],["std::__1::vector<v8::internal::MachineRepresentation, v8::internal::ZoneAllocator<v8::internal::MachineRepresentation> >::__append(unsigned long, v8::internal::MachineRepresentation const&)",93957343002944,93957343003966],["v8::internal::compiler::JumpThreading::ApplyForwarding(v8::internal::Zone*, v8::internal::ZoneVector<v8::internal::compiler::RpoNumber> const&, v8::internal::compiler::InstructionSequence*)",93957343006256,93957343007212],["v8::internal::compiler::MidTierRegisterAllocationData::MidTierRegisterAllocationData(v8::internal::RegisterConfiguration const*, v8::internal::Zone*, v8::internal::compiler::Frame*, v8::internal::compiler::InstructionSequence*, v8::internal::TickCounter*, char const*)",93957343007968,93957343009237],["v8::internal::compiler::VirtualRegisterData::AddSpillUse(int, v8::internal::compiler::MidTierRegisterAllocationData*)",93957343009776,93957343010202],["v8::internal::compiler::LiveRangeBuilder::FixedLiveRangeFor(int, v8::internal::compiler::TopTierRegisterAllocationData::SpillMode)",93957343108192,93957343108535],["v8::internal::compiler::LiveRangeConnector::ResolveControlFlow(v8::internal::Zone*)",93957343157616,93957343160259],["v8::internal::compiler::SpillPlacer::ForwardPass()",93957343176256,93957343176549],["v8::internal::compiler::BranchElimination::UpdateConditions(v8::internal::compiler::Node*, v8::internal::compiler::BranchElimination::ControlPathConditions)",93957343187376,93957343187705],["v8::internal::compiler::(anonymous namespace)::UpdateInLiveness(v8::internal::interpreter::Bytecode, v8::internal::compiler::BytecodeLivenessState*, v8::internal::interpreter::BytecodeArrayIterator const&)",93957343197888,93957343199458],["v8::internal::compiler::BytecodeGraphBuilder::Environment::Environment(v8::internal::compiler::BytecodeGraphBuilder*, int, int, v8::internal::interpreter::Register, v8::internal::compiler::Node*)",93957343202128,93957343203946],["v8::internal::compiler::BytecodeGraphBuilder::MergeValue(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343206272,93957343206835],["v8::internal::compiler::BytecodeGraphBuilder::CreateNativeContextNode()",93957343212000,93957343212239],["v8::internal::compiler::BytecodeGraphBuilder::BuildFunctionEntryStackCheck()",93957343214352,93957343214501],["v8::internal::compiler::BytecodeGraphBuilder::OsrIteratorState::ProcessOsrPrelude()",93957343216400,93957343217857],["v8::internal::compiler::BytecodeGraphBuilder::VisitLdaZero()",93957343223600,93957343223669],["v8::internal::compiler::BytecodeGraphBuilder::VisitLdaTheHole()",93957343223936,93957343224005],["v8::internal::compiler::BytecodeGraphBuilder::VisitLdaGlobal()",93957343224320,93957343224717],["v8::internal::compiler::BytecodeGraphBuilder::VisitPopContext()",93957343225872,93957343225929],["v8::internal::compiler::BytecodeGraphBuilder::VisitLdaImmutableCurrentContextSlot()",93957343226448,93957343226567],["v8::internal::compiler::BytecodeGraphBuilder::VisitLdar()",93957343227328,93957343227418],["v8::internal::compiler::BytecodeGraphBuilder::VisitLdaNamedProperty()",93957343227712,93957343228242],["v8::internal::compiler::BytecodeGraphBuilder::VisitLdaNamedPropertyFromSuper()",93957343228688,93957343229275],["v8::internal::compiler::BytecodeGraphBuilder::VisitLdaModuleVariable()",93957343229776,93957343229972],["v8::internal::compiler::BytecodeGraphBuilder::VisitStaNamedPropertyNoFeedback()",93957343230208,93957343230820],["v8::internal::compiler::BytecodeGraphBuilder::VisitStaInArrayLiteral()",93957343231504,93957343232141],["v8::internal::compiler::BytecodeGraphBuilder::VisitCollectTypeProfile()",93957343232832,93957343233253],["v8::internal::compiler::BytecodeGraphBuilder::VisitSub()",93957343233376,93957343233476],["v8::internal::compiler::BytecodeGraphBuilder::VisitDiv()",93957343233600,93957343233700],["v8::internal::compiler::BytecodeGraphBuilder::VisitExp()",93957343233824,93957343233924],["v8::internal::compiler::BytecodeGraphBuilder::VisitBitwiseXor()",93957343234048,93957343234148],["v8::internal::compiler::BytecodeGraphBuilder::VisitShiftLeft()",93957343234272,93957343234372],["v8::internal::compiler::BytecodeGraphBuilder::VisitShiftRightLogical()",93957343234496,93957343234596],["v8::internal::compiler::BytecodeGraphBuilder::VisitSubSmi()",93957343234720,93957343234820],["v8::internal::compiler::BytecodeGraphBuilder::VisitDivSmi()",93957343234944,93957343235044],["v8::internal::compiler::BytecodeGraphBuilder::VisitExpSmi()",93957343235168,93957343235268],["v8::internal::compiler::BytecodeGraphBuilder::VisitBitwiseXorSmi()",93957343235392,93957343235492],["v8::internal::compiler::NodeProperties::FindSuccessfulControlProjection(v8::internal::compiler::Node*)",93957344592800,93957344593073],["v8::internal::compiler::OperationTyper::OperationTyper(v8::internal::compiler::JSHeapBroker*, v8::internal::Zone*)",93957344606976,93957344607373],["v8::internal::compiler::OperationTyper::NumberAdd(v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344611888,93957344612456],["v8::internal::compiler::OperationTyper::NumberMax(v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344617312,93957344617863],["v8::internal::compiler::OperationTyper::BigIntSubtract(v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344619488,93957344619519],["v8::internal::compiler::OperationTyper::CheckNumber(v8::internal::compiler::Type)",93957344621264,93957344621288],["v8::internal::compiler::OperatorProperties::IsBasicBlockBegin(v8::internal::compiler::Operator const*)",93957344622016,93957344622051],["v8::internal::compiler::PipelineStatistics::CommonStats::End(v8::internal::compiler::PipelineStatistics*, v8::internal::CompilationStatistics::BasicStats*)",93957344623392,93957344623627],["v8::internal::compiler::PipelineStatistics::EndPhase()",93957344624896,93957344625213],["v8::internal::compiler::PipelineCompilationJob::~PipelineCompilationJob()",93957344627760,93957344627871],["v8::internal::compiler::PipelineData::ChooseSpecializationContext()",93957344629200,93957344629634],["v8::internal::compiler::PipelineImpl::OptimizeGraphForMidTier(v8::internal::compiler::Linkage*)",93957344631312,93957344632339],["v8::internal::compiler::PipelineImpl::FinalizeCode(bool)",93957344635264,93957344637384],["v8::internal::compiler::WasmHeapStubCompilationJob::ExecuteJobImpl(v8::internal::RuntimeCallStats*, v8::internal::LocalIsolate*)",93957344639056,93957344640646],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::PrintGraphPhase, char const*&>(char const*&)",93957344641456,93957344641859],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::GraphBuilderPhase>()",93957344643136,93957344643521],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::CopyMetadataForConcurrentCompilePhase>()",93957344644336,93957344644704],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::TypedLoweringPhase>()",93957344645120,93957344645505],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::LoopExitEliminationPhase>()",93957344645920,93957344646302],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::EscapeAnalysisPhase>()",93957344646704,93957344647089],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::SimplifiedLoweringPhase, v8::internal::compiler::Linkage*&>(v8::internal::compiler::Linkage*&)",93957344647504,93957344647907],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::GenericLoweringPhase>()",93957344648320,93957344648705],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::EffectControlLinearizationPhase>()",93957344649120,93957344649505],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::ControlFlowOptimizationPhase>()",93957344649920,93957344650305],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::MachineOperatorOptimizationPhase>()",93957344650720,93957344651105],["v8::internal::compiler::PipelineImpl::SelectInstructions(v8::internal::compiler::Linkage*)",93957344651936,93957344654671],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::ScheduledMachineLoweringPhase>()",93957344655184,93957344655569],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::BlockStartsAsJSON const&)",93957344656752,93957344657061],["v8::internal::compiler::PipelineData::PipelineData(v8::internal::compiler::ZoneStats*, v8::internal::wasm::WasmEngine*, v8::internal::OptimizedCompilationInfo*, v8::internal::compiler::MachineGraph*, v8::internal::compiler::PipelineStatistics*, v8::internal::compiler::SourcePositionTable*, v8::internal::compiler::NodeOriginTable*, v8::internal::AssemblerOptions const&)",93957344659952,93957344660857],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::WasmLoopUnrollingPhase, std::__1::vector<v8::internal::compiler::WasmLoopInfo, std::__1::allocator<v8::internal::compiler::WasmLoopInfo> >*&>(std::__1::vector<v8::internal::compiler::WasmLoopInfo, std::__1::allocator<v8::internal::compiler::WasmLoopInfo> >*&)",93957344664352,93957344664755],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::WasmBaseOptimizationPhase>()",93957344665184,93957344665569],["v8::internal::compiler::PipelineImpl::AllocateRegistersForMidTier(v8::internal::RegisterConfiguration const*, v8::internal::compiler::CallDescriptor*, bool)",93957344665776,93957344666329],["v8::internal::compiler::(anonymous namespace)::ReplaceEffectControlUses(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957345030848,93957345031559],["v8::internal::compiler::SimplifiedOperatorBuilder::ObjectIsInteger()",93957345041776,93957345041790],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckedUint32ToTaggedSigned(v8::internal::compiler::FeedbackSource const&)",93957345044848,93957345045048],["v8::internal::compiler::SimplifiedOperatorBuilder::MaybeGrowFastElements(v8::internal::compiler::GrowFastElementsMode, v8::internal::compiler::FeedbackSource const&)",93957345051616,93957345051910],["v8::internal::compiler::SimplifiedOperatorBuilder::SpeculativeSafeIntegerSubtract(v8::internal::compiler::NumberOperationHint)",93957345054544,93957345054626],["v8::internal::compiler::SimplifiedOperatorBuilder::LoadStackArgument()",93957345056816,93957345056830],["v8::internal::compiler::Operator1<v8::internal::compiler::CheckMinusZeroParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CheckMinusZeroParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CheckMinusZeroParameters> >::HashCode() const",93957345084384,93957345084472],["v8::internal::compiler::Operator1<v8::internal::compiler::BigIntOperationHint, v8::internal::compiler::OpEqualTo<v8::internal::compiler::BigIntOperationHint>, v8::internal::compiler::OpHash<v8::internal::compiler::BigIntOperationHint> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957345086048,93957345086146],["v8::internal::compiler::Operator1<v8::internal::compiler::FieldAccess, v8::internal::compiler::OpEqualTo<v8::internal::compiler::FieldAccess>, v8::internal::compiler::OpHash<v8::internal::compiler::FieldAccess> >::HashCode() const",93957345087040,93957345087162],["v8::internal::compiler::Operator1<v8::internal::compiler::(anonymous namespace)::TransitionAndStoreElementParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::(anonymous namespace)::TransitionAndStoreElementParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::(anonymous namespace)::TransitionAndStoreElementParameters> >::HashCode() const",93957345087680,93957345087720],["v8::internal::compiler::StateValuesCache::StateValuesCache(v8::internal::compiler::JSGraph*)",93957345088592,93957345088832],["v8::internal::compiler::StateValuesAccess::iterator::AdvanceTillNotEmpty()",93957345091248,93957345091353],["v8::internal::compiler::PersistentMap<v8::internal::compiler::(anonymous namespace)::UnobservableStore, bool, v8::base::hash<v8::internal::compiler::(anonymous namespace)::UnobservableStore> >::Set(v8::internal::compiler::(anonymous namespace)::UnobservableStore, bool)",93957345097760,93957345099398],["v8::internal::compiler::TypeNarrowingReducer::TypeNarrowingReducer(v8::internal::compiler::AdvancedReducer::Editor*, v8::internal::compiler::JSGraph*, v8::internal::compiler::JSHeapBroker*)",93957345103072,93957345103113],["v8::internal::compiler::TypedOptimization::ReduceCheckMaps(v8::internal::compiler::Node*)",93957345108624,93957345109084],["v8::internal::compiler::TypedOptimization::ReduceSameValue(v8::internal::compiler::Node*)",93957345111856,93957345112720],["v8::internal::compiler::TypedOptimization::ReduceSpeculativeNumberComparison(v8::internal::compiler::Node*)",93957345115552,93957345115919],["v8::internal::compiler::(anonymous namespace)::NumberOpFromSpeculativeNumberOp(v8::internal::compiler::SimplifiedOperatorBuilder*, v8::internal::compiler::Operator const*)",93957345117616,93957345117704],["v8::internal::compiler::Typer::Run(v8::internal::ZoneVector<v8::internal::compiler::Node*> const&, v8::internal::compiler::LoopVariableOptimizer*)",93957345117936,93957345118371],["v8::internal::compiler::Typer::Visitor::TypeNode(v8::internal::compiler::Node*)",93957345119744,93957345128306],["v8::internal::compiler::Typer::Visitor::Negate(v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345128656,93957345128759],["v8::internal::compiler::Typer::Visitor::ToString(v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345129440,93957345129577],["v8::internal::compiler::Typer::Visitor::ObjectIsCallable(v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345129920,93957345130038],["v8::internal::compiler::Typer::Visitor::NumberIsNaN(v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345130448,93957345130566],["v8::internal::compiler::Typer::Visitor::ObjectIsSmi(v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345130960,93957345131018],["v8::internal::compiler::Typer::Visitor::Operand(v8::internal::compiler::Node*, int)",93957345131408,93957345131516],["v8::internal::compiler::Typer::Visitor::JSLessThanTyper(v8::internal::compiler::Type, v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345132544,93957345132619],["v8::internal::compiler::Typer::Visitor::JSBitwiseOrTyper(v8::internal::compiler::Type, v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345132912,93957345133136],["v8::internal::compiler::Typer::Visitor::JSShiftRightTyper(v8::internal::compiler::Type, v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345133808,93957345134032],["v8::internal::compiler::Typer::Visitor::JSMultiplyTyper(v8::internal::compiler::Type, v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345134848,93957345135072],["v8::internal::compiler::Typer::Visitor::JSCallTyper(v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345136832,93957345138146],["v8::internal::compiler::Typer::Visitor::ReferenceEqualTyper(v8::internal::compiler::Type, v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345138496,93957345138571],["v8::internal::compiler::Typer::Visitor::~Visitor()",93957345138640,93957345138686],["v8::internal::compiler::Typer::Visitor::Reduce(v8::internal::compiler::Node*)",93957345138704,93957345138756],["v8::internal::compiler::Typer::Visitor::TypeHeapConstant(v8::internal::compiler::Node*)",93957345139072,93957345139118],["v8::internal::compiler::Typer::Visitor::TypePhi(v8::internal::compiler::Node*)",93957345139264,93957345139508],["v8::internal::compiler::Typer::Visitor::TypeParameter(v8::internal::compiler::Node*)",93957345141216,93957345141438],["v8::internal::compiler::Typer::Visitor::TypeTypeGuard(v8::internal::compiler::Node*)",93957345141648,93957345141745],["v8::internal::compiler::Typer::Visitor::TypeCheckFloat64Hole(v8::internal::compiler::Node*)",93957345141888,93957345141981],["v8::internal::compiler::Typer::Visitor::TypeCheckNotTaggedHole(v8::internal::compiler::Node*)",93957345142096,93957345142200],["v8::internal::compiler::Typer::Visitor::TypeCheckReceiver(v8::internal::compiler::Node*)",93957345142304,93957345142408],["v8::internal::compiler::Typer::Visitor::TypeCheckSmi(v8::internal::compiler::Node*)",93957345142528,93957345142647],["v8::internal::compiler::Typer::Visitor::TypeCheckSymbol(v8::internal::compiler::Node*)",93957345142768,93957345142872],["v8::internal::compiler::Typer::Visitor::TypeConvertTaggedHoleToUndefined(v8::internal::compiler::Node*)",93957345142976,93957345143069],["v8::internal::compiler::Typer::Visitor::TypeStringToNumber(v8::internal::compiler::Node*)",93957345143280,93957345143374],["v8::internal::compiler::Typer::Visitor::TypeStringFromSingleCharCode(v8::internal::compiler::Node*)",93957345143488,93957345143572],["v8::internal::compiler::Typer::Visitor::TypeJSCreateArguments(v8::internal::compiler::Node*)",93957345143680,93957345143729],["v8::internal::compiler::Typer::Visitor::TypeJSCallRuntime(v8::internal::compiler::Node*)",93957345143808,93957345144736],["v8::internal::compiler::Typer::Visitor::TypeBinaryOp(v8::internal::compiler::Node*, v8::internal::compiler::Type (*)(v8::internal::compiler::Type, v8::internal::compiler::Type, v8::internal::compiler::Typer*))",93957345144832,93957345144973],["unsigned int v8::internal::compiler::BitsetType::Lub<v8::internal::compiler::MapRef>(v8::internal::compiler::MapRef const&)",93957345145072,93957345145354],["v8::internal::compiler::BitsetType::Min(unsigned int)",93957345145824,93957345146020],["v8::internal::compiler::BitsetType::Max(unsigned int)",93957345146480,93957345146641],["v8::internal::compiler::Type::BitsetLub() const",93957345146976,93957345147214],["v8::internal::compiler::HeapConstantType::Value() const",93957345147312,93957345147326],["v8::internal::compiler::Type::SlowIs(v8::internal::compiler::Type) const",93957345147728,93957345148123],["v8::internal::compiler::Type::GetRange() const",93957345148624,93957345148668],["v8::internal::compiler::UnionType::New(int, v8::internal::Zone*)",93957345149152,93957345149280],["v8::internal::compiler::Type::UpdateRange(v8::internal::compiler::Type, v8::internal::compiler::UnionType*, int, v8::internal::Zone*)",93957345150256,93957345150422],["v8::internal::compiler::Type::NormalizeUnion(v8::internal::compiler::UnionType*, int, v8::internal::Zone*)",93957345150672,93957345151021],["v8::internal::compiler::Type::NormalizeRangeAndBitset(v8::internal::compiler::Type, unsigned int*, v8::internal::Zone*)",93957345151264,93957345151925],["v8::internal::compiler::Type::Constant(v8::internal::compiler::JSHeapBroker*, v8::internal::Handle<v8::internal::Object>, v8::internal::Zone*)",93957345152336,93957345152624],["v8::internal::compiler::BitsetType::Name(unsigned int)",93957345153136,93957345155192],["v8::internal::compiler::Type::PrintTo(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) const",93957345155456,93957345156125],["v8::internal::compiler::BitsetType::SignedSmall()",93957345156176,93957345156187],["std::__1::basic_ostream<char, std::__1::char_traits<char> >::operator<<(void const*)",93957346641872,93957346642266],["virtual thunk to std::__1::basic_iostream<char, std::__1::char_traits<char> >::~basic_iostream()",93957346642944,93957346642968],["std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::overflow(int)",93957346644528,93957346644863],["std::__1::basic_filebuf<char, std::__1::char_traits<char> >::~basic_filebuf()",93957346645936,93957346645964],["std::__1::basic_filebuf<char, std::__1::char_traits<char> >::overflow(int)",93957346646736,93957346647292],["std::__1::basic_filebuf<char, std::__1::char_traits<char> >::sync()",93957346647856,93957346648340],["std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::seekpos(std::__1::fpos<__mbstate_t>, unsigned int)",93957346648752,93957346648771],["non-virtual thunk to std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_stringstream()",93957346649024,93957346649137],["virtual thunk to std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_stringstream()",93957346649280,93957346649412],["std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_ostringstream()",93957346649520,93957346649619],["virtual thunk to std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_ostringstream()",93957346649744,93957346649858],["std::__1::basic_istringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_istringstream()",93957346649968,93957346650067],["virtual thunk to std::__1::basic_istringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_istringstream()",93957346650192,93957346650306],["std::__1::basic_ifstream<char, std::__1::char_traits<char> >::~basic_ifstream()",93957346650384,93957346650454],["virtual thunk to std::__1::basic_ifstream<char, std::__1::char_traits<char> >::~basic_ifstream()",93957346650544,93957346650628],["imaxdiv",139871563517440,139871563517449],["initstate_r",139871563519120,139871563519495],["erand48",139871563520064,139871563520130],["jrand48",139871563520384,139871563520449],["lcong48",139871563520512,139871563520524],["erand48_r",139871563520544,139871563520644],["nrand48_r",139871563520688,139871563520750],["jrand48_r",139871563520784,139871563520829],["fputwc_unlocked",139871563748288,139871563748410],["vswscanf",139871563753824,139871563753994],["_IO_wdefault_doallocate",139871563756576,139871563756690],["_IO_adjust_wcolumn",139871563758160,139871563758211],["_IO_wfile_seekoff",139871563762816,139871563765054],["_IO_wfile_xsputn",139871563767120,139871563767494],["feof",139871563769680,139871563769909],["freopen",139871563770544,139871563771298],["getchar",139871563771904,139871563772268],["pclose",139871563772688,139871563772693],["rewind",139871563773040,139871563773261],["setlinebuf",139871563773280,139871563773294],["vdprintf",139871563774096,139871563774103],["__vsnprintf",139871563774496,139871563774504],["obstack_printf",139871563775328,139871563775507],["fseeko",139871563775536,139871563775797],["aligned_alloc",139871563828640,139871563828649],["__libc_pvalloc",139871563828720,139871563828809],["malloc_trim",139871563829744,139871563830463],["__libc_mallinfo",139871563830688,139871563830991],["__libc_mallopt",139871563831568,139871563832065],["malloc_info",139871563832176,139871563832231],["mcheck_check_all",139871563832688,139871563832903],["mcheck_pedantic",139871563834608,139871563834636],["tr_break",139871563837008,139871563837009],["muntrace",139871563837424,139871563837554],["_obstack_begin_1",139871563837808,139871563837995],["_obstack_allocated_p",139871563838368,139871563838423],["_obstack_memory_used",139871563838560,139871563838595],["__libc_scratch_buffer_grow",139871563838656,139871563838768],["__libc_scratch_buffer_set_array_size",139871563838944,139871563839118],["__libc_dynarray_emplace_enlarge",139871563839184,139871563839453],["__libc_dynarray_resize",139871563839680,139871563839846],["__libc_alloc_buffer_alloc_array",139871563839936,139871563840034],["__libc_alloc_buffer_copy_bytes",139871563840128,139871563840213],["__libc_alloc_buffer_create_failure",139871563840272,139871563840333],["strcoll",139871563840640,139871563840656],["__strdup",139871563841072,139871563841132],["strerror",139871563841216,139871563841353],["strsignal",139871563842480,139871563842946],["__strtok_r",139871563844960,139871563845077],["bcopy",139871563845824,139871563845832],["ffsl",139871563845856,139871563845875],["strsep",139871563846688,139871563846770],["swab",139871563849200,139871563849239],["memfrob",139871563849520,139871563849553],["argz_append",139871563851216,139871563851315],["__argz_count",139871563851440,139871563851515],["argz_create_sep",139871563851696,139871563851913],["argz_delete",139871563852000,139871563852110],["argz_insert",139871563852192,139871563852461],["argz_add_sep",139871563852544,139871563852737],["envz_entry",139871563853728,139871563853897],["envz_remove",139871563853952,139871563854016],["envz_merge",139871563854304,139871563854497],["basename",139871563854640,139871563854670],["__strxfrm_l",139871563858656,139871563866836],["__strsep_1c",139871563866960,139871563867042],["__strsep_3c",139871563867136,139871563867236],["__strcspn_c2",139871563867296,139871563867337],["__strspn_c1",139871563867408,139871563867441],["__strspn_c3",139871563867504,139871563867569],["__strpbrk_c3",139871563867648,139871563867719],["__strcpy_small",139871563867936,139871563868104],["_dl_sym",139871564537936,139871564537949],["__sigaddset",139871564538752,139871564538777],["realpath",139871564538848,139871564538881],["pthread_cond_broadcast",139871564538992,139871564539027],["f32mulf128",139871565711008,139871565711570],["__nptl_setxid_error.cold",139871566579077,139871566579086],["frame_dummy",139871566579296,139871566579312],["__pthread_initialize_minimal",139871566579808,139871566580671],["__pthread_create_2_1",139871566586240,139871566590290],["__pthread_detach",139871566590352,139871566590443],["pthread_tryjoin_np",139871566590464,139871566590502],["__pthread_clockjoin_np",139871566590528,139871566590539],["__condvar_confirm_wakeup",139871566611168,139871566611248],["__condvar_dec_grefs",139871566611344,139871566611429],["__pthread_cond_destroy_2_0",139871566616112,139871566616131],["__pthread_cond_broadcast_2_0",139871566616512,139871566616613],["pthread_condattr_setpshared",139871566616672,139871566616702],["pthread_spin_init",139871566616832,139871566616841],["__GI___pthread_key_create",139871566617600,139871566617676],["__GI___pthread_testcancel",139871566618896,139871566618958],["__new_sem_init",139871566620304,139871566620356],["__new_sem_getvalue",139871566623008,139871566623016],["do_futex_wait.constprop.0",139871566623552,139871566623745],["__new_sem_post",139871566624656,139871566624764],["__pthread_unregister_cancel_restore",139871566624944,139871566625076],["__pthread_cleanup_pop_restore",139871566625280,139871566625444],["longjmp_alias",139871566625872,139871566625881],["__libc_read",139871566626880,139871566627037],["__libc_recv",139871566627504,139871566627685],["__libc_sendto",139871566628080,139871566628269],["__libc_lseek",139871566628416,139871566628452],["__libc_open",139871566628624,139871566628920],["__libc_pread",139871566629056,139871566629221],["__libc_tcdrain",139871566629408,139871566629571],["__libc_recvmsg",139871566630240,139871566630397],["gsignal",139871566630560,139871566630937],["__flockfile",139871566630960,139871566631047],["__funlockfile",139871566631152,139871566631213],["__h_errno_location",139871566631776,139871566631793],["__libc_current_sigrtmin",139871566631824,139871566631829],["__libc_allocate_rtsig",139871566631856,139871566631861],["__pthread_getaffinity_new",139871566631888,139871566631966],["__pthread_setaffinity_new",139871566631984,139871566632041],["__pthread_attr_getaffinity_new",139871566632064,139871566632236],["__pthread_attr_setaffinity_new",139871566632256,139871566632371],["pthread_cancel_init",139871566632544,139871566632809],["_Unwind_ForcedUnwind",139871566633056,139871566633141],["__pthread_current_priority",139871566634640,139871566634972],["__pthread_tunables_init",139871566638240,139871566638308],["_dl_tunable_set_elision_skip_lock_busy",139871566638336,139871566638346],["_dl_tunable_set_elision_retry_try_xbegin",139871566638368,139871566638378],["__lll_unlock_elision",139871566638816,139871566638862],["v8::DelayedTasksPlatform::~DelayedTasksPlatform()",93957335211264,93957335211411],["ustrenum_count(UEnumeration*, UErrorCode*)",93957335211456,93957335211474],["v8::TerminateTask::RunInternal()",93957335307792,93957335307810],["v8::Serializer::GetWasmModuleTransferId(v8::Isolate*, v8::Local<v8::WasmModuleObject>)",93957335308416,93957335308809],["void std::__1::vector<v8::Global<v8::ArrayBuffer>, std::__1::allocator<v8::Global<v8::ArrayBuffer> > >::__emplace_back_slow_path<v8::Isolate*&, v8::Local<v8::ArrayBuffer>&>(v8::Isolate*&, v8::Local<v8::ArrayBuffer>&)",93957335308912,93957335309421],["void std::__1::vector<v8::CompiledWasmModule, std::__1::allocator<v8::CompiledWasmModule> >::__push_back_slow_path<v8::CompiledWasmModule>(v8::CompiledWasmModule&&)",93957335309792,93957335310381],["v8::internal::FactoryBase<v8::internal::Factory>::NewPreparseData(int, int)",93957336832608,93957336832828],["v8::internal::FactoryBase<v8::internal::Factory>::NewRawTwoByteString(int, v8::internal::AllocationType)",93957336834496,93957336834678],["v8::internal::FactoryBase<v8::internal::Factory>::NewSourceTextModuleInfo()",93957336836816,93957336836851],["v8::internal::FactoryBase<v8::internal::Factory>::NewSwissNameDictionaryWithCapacity(int, v8::internal::AllocationType)",93957336837360,93957336837656],["v8::internal::FactoryBase<v8::internal::Factory>::AllocateRawWeakArrayList(int, v8::internal::AllocationType)",93957336838144,93957336838298],["v8::internal::FactoryBase<v8::internal::LocalFactory>::NewAccessorPair()",93957336838528,93957336838580],["v8::internal::FactoryBase<v8::internal::LocalFactory>::NewFixedArrayWithFiller(v8::internal::Handle<v8::internal::Map>, int, v8::internal::Handle<v8::internal::Oddball>, v8::internal::AllocationType)",93957336838640,93957336838917],["v8::internal::FactoryBase<v8::internal::LocalFactory>::NewFixedArrayWithHoles(int, v8::internal::AllocationType)",93957336838960,93957336839005],["v8::internal::FinalizationRegistryCleanupTask::FinalizationRegistryCleanupTask(v8::internal::Heap*)",93957336914848,93957336914903],["v8::internal::FreeListCategory::FreeListLength()",93957336920048,93957336920099],["v8::internal::GCTracer::NotifyYoungGenerationHandling(v8::internal::YoungGenerationHandling)",93957336921984,93957336922009],["v8::internal::GCTracer::PrintNVP() const",93957336928800,93957336935115],["v8::internal::GCTracer::AddIncrementalMarkingStep(double, unsigned long)",93957336936336,93957336936370],["v8::internal::GCTracer::AverageSurvivalRatio() const",93957336937248,93957336937411],["v8::internal::GCTracer::CompactionSpeedInBytesPerMillisecond() const",93957336938000,93957336938284],["v8::internal::GCTracer::EmbedderSpeedInBytesPerMillisecond() const",93957336938480,93957336938494],["v8::internal::GCTracer::AllocationThroughputInBytesPerMillisecond(double) const",93957336939840,93957336940344],["v8::internal::GCTracer::CurrentOldGenerationAllocationThroughputInBytesPerMillisecond() const",93957336940384,93957336940616],["v8::internal::GCTracer::SurvivalEventsRecorded() const",93957336940864,93957336940880],["v8::internal::GCTracer::NotifyIncrementalMarkingStart()",93957336940912,93957336940944],["std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_stringstream()",93957336941472,93957336941581],["v8::internal::MemoryController<v8::internal::V8HeapTrait>::MinimumAllocationLimitGrowingStep(v8::internal::Heap::HeapGrowingMode)",93957336941856,93957336941879],["v8::internal::MemoryController<v8::internal::V8HeapTrait>::CalculateAllocationLimit(v8::internal::Heap*, unsigned long, unsigned long, unsigned long, unsigned long, double, v8::internal::Heap::HeapGrowingMode)",93957336942192,93957336942536],["v8::internal::MemoryController<v8::internal::GlobalMemoryTrait>::CalculateAllocationLimit(v8::internal::Heap*, unsigned long, unsigned long, unsigned long, unsigned long, double, v8::internal::Heap::HeapGrowingMode)",93957336942848,93957336943192],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::AllocationSite, unsigned long>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::AllocationSite, unsigned long>, std::__1::__unordered_map_hasher<v8::internal::AllocationSite, std::__1::__hash_value_type<v8::internal::AllocationSite, unsigned long>, v8::internal::Object::Hasher, std::__1::equal_to<v8::internal::AllocationSite>, true>, std::__1::__unordered_map_equal<v8::internal::AllocationSite, std::__1::__hash_value_type<v8::internal::AllocationSite, unsigned long>, std::__1::equal_to<v8::internal::AllocationSite>, v8::internal::Object::Hasher, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::AllocationSite, unsigned long> > >::__emplace_unique_key_args<v8::internal::AllocationSite, std::__1::pair<v8::internal::AllocationSite, int> >(v8::internal::AllocationSite const&, std::__1::pair<v8::internal::AllocationSite, int>&&)",93957337052208,93957337053003],["v8::internal::IncrementalMarkingJob::ScheduleTask(v8::internal::Heap*, v8::internal::IncrementalMarkingJob::TaskType)",93957337055888,93957337056313],["v8::internal::IncrementalMarking::IncrementalMarking(v8::internal::Heap*, v8::internal::WeakObjects*)",93957337058384,93957337058594],["v8::internal::IncrementalMarking::WasActivated()",93957337059920,93957337059929],["v8::internal::IncrementalMarking::Start(v8::internal::GarbageCollectionReason)",93957337060064,93957337061274],["v8::internal::IncrementalMarking::StartBlackAllocation()",93957337062112,93957337062270],["v8::internal::IncrementalMarking::RetainMaps()",93957337062416,93957337063346],["v8::internal::IncrementalMarking::UpdateMarkingWorklistAfterScavenge()",93957337063872,93957337064516],["v8::internal::TypedSlotSet* v8::internal::MemoryChunk::AllocateTypedSlotSet<(v8::internal::RememberedSetType)0>()",93957337431616,93957337431699],["void std::__1::__function::__policy_invoker<void ()>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::MemoryMeasurement::ScheduleGCTask(v8::MeasureMemoryExecution)::$_1, void ()> >(std::__1::__function::__policy_storage const*)",93957337439360,93957337439517],["v8::internal::SemiSpace::CommittedPhysicalMemory()",93957337443168,93957337443231],["v8::internal::NewSpace::NewSpace(v8::internal::Heap*, v8::PageAllocator*, unsigned long, unsigned long)",93957337445184,93957337446063],["v8::internal::NewSpace::Shrink()",93957337447280,93957337447955],["v8::internal::NewSpace::AddFreshPage()",93957337448160,93957337448518],["v8::internal::NewSpace::GetObjectIterator(v8::internal::Heap*)",93957337449360,93957337449422],["v8::internal::NewSpace::MaximumCommittedMemory()",93957337449824,93957337449844],["v8::internal::NewSpace::Available()",93957337450096,93957337450194],["v8::internal::SemiSpaceObjectIterator::Next()",93957337450256,93957337450435],["v8::internal::ObjectStats::ClearObjectStats(bool)",93957337451280,93957337451457],["v8::internal::PrintJSONArray(unsigned long*, int)",93957337451776,93957337452214],["v8::internal::ObjectStats::DumpInstanceTypeData(std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const*, int)",93957337461264,93957337461690],["v8::internal::ObjectStats::Dump(std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >&)",93957337461744,93957337469788],["v8::internal::ObjectStatsCollectorImpl::RecordVirtualObjectStats(v8::internal::HeapObject, v8::internal::HeapObject, v8::internal::ObjectStats::VirtualInstanceType, unsigned long, unsigned long, v8::internal::ObjectStatsCollectorImpl::CowMode)",93957337470144,93957337470998],["v8::internal::ObjectStatsCollectorImpl::RecordVirtualAllocationSiteDetails(v8::internal::AllocationSite)",93957337471520,93957337471952],["v8::internal::SpaceWithLinearArea::MarkLabStartInitialized()",93957337599840,93957337599891],["v8::internal::WeakObjects::UpdateWeakObjectsInCode(v8::internal::Worklist<std::__1::pair<v8::internal::HeapObject, v8::internal::Code>, 64>&)",93957337616432,93957337617159],["v8::internal::IC::UpdatePolymorphicIC(v8::internal::Handle<v8::internal::Name>, v8::internal::MaybeObjectHandle const&)",93957337635920,93957337637482],["v8::internal::KeyedStoreIC::UpdateStoreElement(v8::internal::Handle<v8::internal::Map>, v8::internal::KeyedAccessStoreMode, v8::internal::Handle<v8::internal::Map>)",93957337659744,93957337661190],["v8::internal::Stats_Runtime_StoreGlobalIC_Miss(int, unsigned long*, v8::internal::Isolate*)",93957337679104,93957337679996],["v8::internal::Stats_Runtime_CloneObjectIC_Miss(int, unsigned long*, v8::internal::Isolate*)",93957337691424,93957337693637],["v8::internal::IC::~IC()",93957337706576,93957337706614],["v8::internal::Bootstrapper::TearDown()",93957337712560,93957337712574],["v8::internal::(anonymous namespace)::CreateFunction(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, v8::internal::InstanceType, int, int, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Builtins::Name)",93957337718672,93957337718975],["v8::internal::Genesis::CreateJSProxyMaps()",93957337725392,93957337726714],["v8::internal::Genesis::TransferNamedProperties(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::JSObject>)",93957337730976,93957337734119],["v8::internal::(anonymous namespace)::InstallFunctionWithBuiltinId(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, char const*, v8::internal::Builtins::Name, int, bool)",93957337788752,93957337788886],["v8::internal::Genesis::InstallTypedArray(char const*, v8::internal::ElementsKind, v8::internal::InstanceType)",93957337791344,93957337792596],["v8::internal::Genesis::CompileExtension(v8::internal::Isolate*, v8::Extension*)",93957337796848,93957337797521],["v8::internal::Genesis::InstallSpecialObjects(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Context>)",93957337810800,93957337811144],["int v8::internal::BinarySearch<(v8::internal::SearchMode)1, v8::internal::DescriptorArray>(v8::internal::DescriptorArray*, v8::internal::Name, int, int*)",93957337815216,93957337815544],["v8::internal::IsolateAllocator::CommitPagesForIsolate(unsigned long)",93957337817008,93957337817388],["v8::internal::InitializeExternalStartupDataFromFile(char const*)",93957337817808,93957337817818],["v8::internal::V8::InitializeOncePerProcessImpl()",93957337818032,93957337819063],["v8::internal::V8::SetSnapshotBlob(v8::StartupData*)",93957337819248,93957337819377],["v8::internal::Handle<v8::internal::ByteArray> v8::internal::interpreter::BytecodeArrayBuilder::ToSourcePositionTable<v8::internal::Isolate>(v8::internal::Isolate*)",93957337819664,93957337819681],["v8::internal::interpreter::BytecodeArrayBuilder::Receiver() const",93957337820128,93957337820146],["v8::internal::interpreter::BytecodeArrayBuilder::UnaryOperation(v8::internal::Token::Value, int)",93957337826208,93957337827191],["v8::internal::interpreter::BytecodeArrayBuilder::CompareOperation(v8::internal::Token::Value, v8::internal::interpreter::Register, int)",93957337828208,93957337830574],["v8::internal::interpreter::BytecodeArrayBuilder::CompareNull()",93957337831456,93957337831710],["v8::internal::interpreter::BytecodeArrayBuilder::LoadLiteral(v8::internal::Smi)",93957337832352,93957337832815],["v8::internal::interpreter::BytecodeArrayBuilder::LoadLiteral(v8::internal::AstBigInt)",93957337833776,93957337834063],["v8::internal::interpreter::BytecodeArrayBuilder::LoadTrue()",93957337834784,93957337835013],["v8::internal::interpreter::BytecodeArrayBuilder::StoreAccumulatorInRegister(v8::internal::interpreter::Register)",93957337835696,93957337836014],["v8::internal::interpreter::BytecodeArrayBuilder::LoadContextSlot(v8::internal::interpreter::Register, int, int, v8::internal::interpreter::BytecodeArrayBuilder::ContextSlotMutability)",93957337837440,93957337838846],["v8::internal::interpreter::BytecodeArrayBuilder::LoadLookupGlobalSlot(v8::internal::AstRawString const*, v8::internal::TypeofMode, int, int)",93957337840704,93957337841367],["v8::internal::interpreter::BytecodeArrayBuilder::LoadNamedPropertyNoFeedback(v8::internal::interpreter::Register, v8::internal::AstRawString const*)",93957337842656,93957337843054],["v8::internal::interpreter::BytecodeArrayBuilder::GetIterator(v8::internal::interpreter::Register, int, int)",93957337843936,93957337844380],["v8::internal::interpreter::BytecodeArrayBuilder::StoreDataPropertyInLiteral(v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::base::Flags<v8::internal::DataPropertyInLiteralFlag, int>, int)",93957337844832,93957337845315],["v8::internal::interpreter::BytecodeArrayBuilder::StoreNamedProperty(v8::internal::interpreter::Register, unsigned long, int, v8::internal::LanguageMode)",93957337845600,93957337846061],["v8::internal::interpreter::BytecodeArrayBuilder::StoreNamedPropertyNoFeedback(v8::internal::interpreter::Register, v8::internal::AstRawString const*, v8::internal::LanguageMode)",93957337846128,93957337846566],["v8::internal::interpreter::BytecodeArrayBuilder::StoreKeyedProperty(v8::internal::interpreter::Register, v8::internal::interpreter::Register, int, v8::internal::LanguageMode)",93957337847056,93957337847556],["v8::internal::interpreter::BytecodeArrayBuilder::StoreClassFieldsInitializer(v8::internal::interpreter::Register, int)",93957337848080,93957337848138],["v8::internal::interpreter::BytecodeArrayBuilder::CreateClosure(unsigned long, int, int)",93957337848592,93957337848913],["v8::internal::interpreter::BytecodeArrayBuilder::CreateCatchContext(v8::internal::interpreter::Register, v8::internal::Scope const*)",93957337849200,93957337849598],["v8::internal::interpreter::BytecodeArrayBuilder::CreateEvalContext(v8::internal::Scope const*, int)",93957337849936,93957337850262],["v8::internal::interpreter::BytecodeArrayBuilder::CreateArguments(v8::internal::CreateArgumentsType)",93957337850672,93957337851124],["v8::internal::interpreter::BytecodeArrayBuilder::CreateEmptyArrayLiteral(int)",93957337851472,93957337851733],["v8::internal::interpreter::BytecodeArrayBuilder::CreateArrayFromIterable()",93957337852080,93957337852317],["v8::internal::interpreter::BytecodeArrayBuilder::CreateEmptyObjectLiteral()",93957337852656,93957337852868],["v8::internal::interpreter::BytecodeArrayBuilder::GetTemplateObject(unsigned long, int)",93957337853280,93957337853597],["v8::internal::interpreter::BytecodeArrayBuilder::PopContext(v8::internal::interpreter::Register)",93957337854000,93957337854340],["v8::internal::interpreter::BytecodeArrayBuilder::ToName(v8::internal::interpreter::Register)",93957337854720,93957337855085],["v8::internal::interpreter::BytecodeArrayBuilder::ToNumeric(int)",93957337855328,93957337855614],["v8::internal::interpreter::BytecodeArrayBuilder::Bind(v8::internal::interpreter::BytecodeLoopHeader*)",93957337855680,93957337855733],["v8::internal::interpreter::BytecodeArrayBuilder::MarkHandler(int, v8::internal::HandlerTable::CatchPrediction)",93957337855824,93957337855895],["v8::internal::interpreter::BytecodeArrayBuilder::MarkTryEnd(int)",93957337856000,93957337856040],["v8::internal::interpreter::BytecodeArrayBuilder::JumpIfTrue(v8::internal::interpreter::BytecodeArrayBuilder::ToBooleanMode, v8::internal::interpreter::BytecodeLabel*)",93957337856304,93957337856759],["v8::internal::interpreter::BytecodeArrayBuilder::JumpIfNull(v8::internal::interpreter::BytecodeLabel*)",93957337857232,93957337857499],["v8::internal::interpreter::BytecodeArrayBuilder::JumpIfUndefined(v8::internal::interpreter::BytecodeLabel*)",93957337857776,93957337858043],["v8::internal::interpreter::BytecodeArrayBuilder::JumpIfNotUndefined(v8::internal::interpreter::BytecodeLabel*)",93957337858320,93957337858587],["v8::internal::interpreter::BytecodeArrayBuilder::JumpIfNotNil(v8::internal::interpreter::BytecodeLabel*, v8::internal::Token::Value, v8::internal::interpreter::BytecodeArrayBuilder::NilValue)",93957337858672,93957337858741],["v8::internal::interpreter::BytecodeArrayBuilder::JumpLoop(v8::internal::interpreter::BytecodeLoopHeader*, int, int)",93957337859024,93957337859316],["v8::internal::interpreter::BytecodeArrayBuilder::SetPendingMessage()",93957337859744,93957337859981],["v8::internal::interpreter::BytecodeArrayBuilder::ReThrow()",93957337860208,93957337860421],["v8::internal::interpreter::BytecodeArrayBuilder::ThrowReferenceErrorIfHole(v8::internal::AstRawString const*)",93957337860656,93957337860927],["v8::internal::interpreter::BytecodeArrayBuilder::ThrowSuperAlreadyCalledIfNotHole()",93957337861152,93957337861365],["v8::internal::interpreter::BytecodeArrayBuilder::Debugger()",93957337861696,93957337861905],["v8::internal::interpreter::BytecodeArrayBuilder::ForInEnumerate(v8::internal::interpreter::Register)",93957337862160,93957337862527],["v8::base::SmallVector<int, 64ul>::Grow()",93957339875136,93957339875148],["v8::internal::RegExpParser::ParseOpenParenthesis(v8::internal::RegExpParser::RegExpParserState*)",93957339885392,93957339886795],["v8::internal::RegExpBuilder::FlushText()",93957339898832,93957339899347],["v8::internal::RegExpParser::Parse(v8::internal::RegExpCompileData*, v8::internal::CombinationAssertScope<v8::internal::PerThreadAssertScopeDebugOnly<(v8::internal::PerThreadAssertType)0, false>, v8::internal::PerThreadAssertScopeDebugOnly<(v8::internal::PerThreadAssertType)1, false> > const&)",93957339908112,93957339908563],["v8::internal::BufferedZoneList<v8::internal::RegExpTree, 2>::GetList(v8::internal::Zone*)",93957339910144,93957339910467],["unsigned int std::__1::__sort4<v8::internal::(anonymous namespace)::RegExpCaptureIndexLess&, v8::internal::RegExpCapture**>(v8::internal::RegExpCapture**, v8::internal::RegExpCapture**, v8::internal::RegExpCapture**, v8::internal::RegExpCapture**, v8::internal::(anonymous namespace)::RegExpCaptureIndexLess&)",93957339912752,93957339912999],["v8::internal::RegExpStack::RegExpStack()",93957339913888,93957339913981],["v8::internal::RegExpUtils::SetLastIndex(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, unsigned long)",93957339914592,93957339914932],["v8::internal::RegExpUtils::IsUnmodifiedRegExp(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)",93957339916352,93957339916827],["v8::internal::RegExpUtils::SetAdvancedStringIndex(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::String>, bool)",93957339917056,93957339917573],["v8::internal::RegExp::ThrowRegExpException(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSRegExp>, v8::internal::RegExpError)",93957339917728,93957339917959],["v8::internal::RegExp::Compile(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSRegExp>, v8::internal::Handle<v8::internal::String>, v8::base::Flags<v8::internal::JSRegExp::Flag, int>, unsigned int)",93957339917984,93957339919083],["v8::internal::RegExp::EnsureFullyCompiled(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSRegExp>, v8::internal::Handle<v8::internal::String>)",93957339919408,93957339919564],["v8::internal::RegExp::ExperimentalOneshotExec(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSRegExp>, v8::internal::Handle<v8::internal::String>, int, v8::internal::Handle<v8::internal::RegExpMatchInfo>, v8::internal::RegExp::ExecQuirks)",93957339919952,93957339919962],["v8::internal::RegExpImpl::AtomExec(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSRegExp>, v8::internal::Handle<v8::internal::String>, int, v8::internal::Handle<v8::internal::RegExpMatchInfo>)",93957339920080,93957339920448],["v8::internal::RegExpImpl::AtomExecRaw(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSRegExp>, v8::internal::Handle<v8::internal::String>, int, int*, int)",93957339921008,93957339922124],["v8::internal::Stats_Runtime_AllocateByteArray(int, unsigned long*, v8::internal::Isolate*)",93957340109392,93957340109951],["v8::internal::Stats_Runtime_AllocateSeqOneByteString(int, unsigned long*, v8::internal::Isolate*)",93957340110160,93957340110752],["v8::internal::Stats_Runtime_AllocateSeqTwoByteString(int, unsigned long*, v8::internal::Isolate*)",93957340110960,93957340111552],["v8::internal::Stats_Runtime_ThrowIteratorError(int, unsigned long*, v8::internal::Isolate*)",93957340111696,93957340112233],["v8::internal::Runtime_ThrowCalledNonCallable(int, unsigned long*, v8::internal::Isolate*)",93957340112992,93957340113135],["v8::internal::Runtime_ThrowPatternAssignmentNonCoercible(int, unsigned long*, v8::internal::Isolate*)",93957340114368,93957340114500],["v8::internal::Runtime_CreateListFromArrayLike(int, unsigned long*, v8::internal::Isolate*)",93957340115728,93957340115874],["v8::internal::Runtime_GetAndResetRuntimeCallStats(int, unsigned long*, v8::internal::Isolate*)",93957340117184,93957340118567],["v8::internal::Runtime_Typeof(int, unsigned long*, v8::internal::Isolate*)",93957340121104,93957340121234],["v8::internal::Runtime_CreateAsyncFromSyncIterator(int, unsigned long*, v8::internal::Isolate*)",93957340122816,93957340123286],["v8::internal::Runtime_ReportMessageFromMicrotask(int, unsigned long*, v8::internal::Isolate*)",93957340125472,93957340125649],["v8::internal::Runtime_DoubleToStringWithRadix(int, unsigned long*, v8::internal::Isolate*)",93957340127520,93957340127952],["v8::internal::Runtime_FormatListToParts(int, unsigned long*, v8::internal::Isolate*)",93957340129744,93957340130019],["v8::internal::Runtime_StringToUpperCaseIntl(int, unsigned long*, v8::internal::Isolate*)",93957340131568,93957340131784],["v8::internal::Runtime_CreateObjectLiteralWithoutAllocationSite(int, unsigned long*, v8::internal::Isolate*)",93957340136000,93957340136363],["v8::internal::Runtime_CreateArrayLiteral(int, unsigned long*, v8::internal::Isolate*)",93957340138288,93957340139887],["v8::internal::(anonymous namespace)::AllocationSiteCreationContext::EnterNewScope()",93957340144368,93957340144707],["v8::internal::(anonymous namespace)::CreateArrayLiteral(v8::internal::Isolate*, v8::internal::Handle<v8::internal::ArrayBoilerplateDescription>, v8::internal::AllocationType)",93957340148016,93957340148833],["v8::internal::Runtime_DynamicImportCall(int, unsigned long*, v8::internal::Isolate*)",93957340154448,93957340155126],["v8::internal::Runtime_GetImportMetaObject(int, unsigned long*, v8::internal::Isolate*)",93957340157152,93957340157401],["v8::internal::Runtime_StringParseInt(int, unsigned long*, v8::internal::Isolate*)",93957340158800,93957340159589],["v8::internal::Runtime_NumberToStringSlow(int, unsigned long*, v8::internal::Isolate*)",93957340162016,93957340162206],["v8::internal::Runtime_IsSmi(int, unsigned long*, v8::internal::Isolate*)",93957340163248,93957340163287],["v8::internal::Runtime_GetHoleNaNLower(int, unsigned long*, v8::internal::Isolate*)",93957340164464,93957340164611],["v8::internal::Runtime::DeleteObjectProperty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::Object>, v8::internal::LanguageMode)",93957340165824,93957340167206],["v8::internal::Stats_Runtime_ObjectGetOwnPropertyNames(int, unsigned long*, v8::internal::Isolate*)",93957340168336,93957340168963],["v8::internal::Stats_Runtime_ObjectHasOwnProperty(int, unsigned long*, v8::internal::Isolate*)",93957340171280,93957340172772],["v8::internal::Stats_Runtime_IsDictPropertyConstTrackingEnabled(int, unsigned long*, v8::internal::Isolate*)",93957340173872,93957340174328],["v8::internal::Runtime_ObjectCreate(int, unsigned long*, v8::internal::Isolate*)",93957340175344,93957340175633],["v8::internal::Runtime::SetObjectProperty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::StoreOrigin, v8::Maybe<v8::internal::ShouldThrow>)",93957340176320,93957340176684],["v8::internal::Stats_Runtime_InternalSetPrototype(int, unsigned long*, v8::internal::Isolate*)",93957340176912,93957340177521],["v8::internal::Stats_Runtime_OptimizeObjectForAddingMultipleProperties(int, unsigned long*, v8::internal::Isolate*)",93957340177872,93957340178587],["v8::internal::Stats_Runtime_ObjectValues(int, unsigned long*, v8::internal::Isolate*)",93957340178848,93957340179496],["v8::internal::Stats_Runtime_ObjectValuesSkipFastPath(int, unsigned long*, v8::internal::Isolate*)",93957340179760,93957340180405],["v8::internal::Stats_Runtime_ObjectEntries(int, unsigned long*, v8::internal::Isolate*)",93957340180672,93957340181320],["v8::internal::Stats_Runtime_ObjectEntriesSkipFastPath(int, unsigned long*, v8::internal::Isolate*)",93957340181584,93957340182229],["v8::internal::Stats_Runtime_ObjectIsExtensible(int, unsigned long*, v8::internal::Isolate*)",93957340182464,93957340183080],["v8::internal::Stats_Runtime_JSReceiverPreventExtensionsThrow(int, unsigned long*, v8::internal::Isolate*)",93957340183312,93957340183915],["v8::internal::Stats_Runtime_JSReceiverPreventExtensionsDontThrow(int, unsigned long*, v8::internal::Isolate*)",93957340184160,93957340184789],["v8::internal::Stats_Runtime_JSReceiverGetPrototypeOf(int, unsigned long*, v8::internal::Isolate*)",93957340185200,93957340185970],["v8::internal::Stats_Runtime_JSReceiverSetPrototypeOfThrow(int, unsigned long*, v8::internal::Isolate*)",93957340186208,93957340186820],["v8::internal::Stats_Runtime_JSReceiverSetPrototypeOfDontThrow(int, unsigned long*, v8::internal::Isolate*)",93957340187088,93957340187726],["v8::internal::Stats_Runtime_GetProperty(int, unsigned long*, v8::internal::Isolate*)",93957340189152,93957340191020],["v8::internal::Stats_Runtime_SetKeyedProperty(int, unsigned long*, v8::internal::Isolate*)",93957340191184,93957340191736],["v8::internal::Stats_Runtime_SetNamedProperty(int, unsigned long*, v8::internal::Isolate*)",93957340191920,93957340192475],["v8::internal::Stats_Runtime_StoreDataPropertyInLiteral(int, unsigned long*, v8::internal::Isolate*)",93957340192832,93957340193558],["v8::internal::Stats_Runtime_DeleteProperty(int, unsigned long*, v8::internal::Isolate*)",93957340193888,93957340194570],["v8::internal::Stats_Runtime_ShrinkPropertyDictionary(int, unsigned long*, v8::internal::Isolate*)",93957340194912,93957340195605],["v8::internal::Stats_Runtime_HasProperty(int, unsigned long*, v8::internal::Isolate*)",93957340195936,93957340196641],["v8::internal::Stats_Runtime_GetOwnPropertyKeys(int, unsigned long*, v8::internal::Isolate*)",93957340196960,93957340197644],["v8::internal::Stats_Runtime_ToFastProperties(int, unsigned long*, v8::internal::Isolate*)",93957340197888,93957340198490],["v8::internal::Stats_Runtime_AllocateHeapNumber(int, unsigned long*, v8::internal::Isolate*)",93957340198640,93957340199150],["v8::internal::Stats_Runtime_NewObject(int, unsigned long*, v8::internal::Isolate*)",93957340199440,93957340200114],["v8::internal::Stats_Runtime_GetDerivedMap(int, unsigned long*, v8::internal::Isolate*)",93957340200416,93957340201091],["v8::internal::Stats_Runtime_CompleteInobjectSlackTrackingForMap(int, unsigned long*, v8::internal::Isolate*)",93957340201328,93957340201929],["v8::internal::Stats_Runtime_TryMigrateInstance(int, unsigned long*, v8::internal::Isolate*)",93957340202176,93957340202799],["v8::internal::Stats_Runtime_DefineAccessorPropertyUnchecked(int, unsigned long*, v8::internal::Isolate*)",93957340203344,93957340204271],["v8::internal::Stats_Runtime_DefineDataPropertyInLiteral(int, unsigned long*, v8::internal::Isolate*)",93957340205536,93957340207136],["v8::internal::Stats_Runtime_CollectTypeProfile(int, unsigned long*, v8::internal::Isolate*)",93957340207680,93957340208611],["v8::internal::Stats_Runtime_HasFastPackedElements(int, unsigned long*, v8::internal::Isolate*)",93957340208736,93957340209259],["v8::internal::Serializer::TotalAllocationSize() const",93957340544736,93957340544766],["v8::internal::Serializer::SerializeDeferredObjects()",93957340545040,93957340545660],["v8::internal::Serializer::VisitRootPointers(v8::internal::Root, char const*, v8::internal::FullObjectSlot, v8::internal::FullObjectSlot)",93957340545888,93957340546035],["v8::internal::Serializer::SerializeRoot(v8::internal::Handle<v8::internal::HeapObject>)",93957340546160,93957340546291],["v8::internal::Serializer::SerializeHotObject(v8::internal::Handle<v8::internal::HeapObject>)",93957340546560,93957340546774],["v8::internal::Serializer::PutPendingForwardReference(std::__1::vector<int, std::__1::allocator<int> >*&)",93957340547088,93957340547456],["v8::internal::Serializer::Pad(int)",93957340547712,93957340547846],["_ZNSt3__16vectorIhNS_9allocatorIhEEE6insertIPhEENS_9enable_ifIXaasr27__is_cpp17_forward_iteratorIT_EE5valuesr16is_constructibleIhNS_15iterator_traitsIS7_E9referenceEEE5valueENS_11__wrap_iterIS5_EEE4typeENSB_IPKhEES7_S7_",93957340548144,93957340549741],["v8::internal::Serializer::ObjectSerializer::SerializeBackingStore(void*, int)",93957340550352,93957340550559],["v8::internal::Serializer::ObjectSerializer::SerializeObject()",93957340550720,93957340550995],["v8::internal::Serializer::ObjectSerializer::SerializeExternalString()",93957340551264,93957340551418],["v8::internal::Serializer::ObjectSerializer::Serialize()",93957340551904,93957340552965],["v8::internal::UnlinkWeakNextScope::UnlinkWeakNextScope(v8::internal::Heap*, v8::internal::Handle<v8::internal::HeapObject>)",93957340553216,93957340553500],["v8::internal::Serializer::ObjectSerializer::OutputRawData(unsigned long)",93957340554192,93957340554679],["v8::internal::Serializer::ObjectSerializer::OutputExternalReference(unsigned long, int, bool)",93957340556656,93957340556971],["v8::internal::Serializer::ObjectSerializer::VisitCodeTarget(v8::internal::Code, v8::internal::RelocInfo*)",93957340557024,93957340557034],["v8::internal::Serializer::ObjectSerializer::VisitInternalReference(v8::internal::Code, v8::internal::RelocInfo*)",93957340557120,93957340557191],["void v8::internal::RelocInfo::Visit<v8::internal::Serializer::ObjectSerializer::RelocInfoObjectPreSerializer>(v8::internal::Serializer::ObjectSerializer::RelocInfoObjectPreSerializer*)",93957340557328,93957340557560],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<void*, v8::internal::SerializerReference>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<void*, v8::internal::SerializerReference>, std::__1::__unordered_map_hasher<void*, std::__1::__hash_value_type<void*, v8::internal::SerializerReference>, std::__1::hash<void*>, std::__1::equal_to<void*>, true>, std::__1::__unordered_map_equal<void*, std::__1::__hash_value_type<void*, v8::internal::SerializerReference>, std::__1::equal_to<void*>, std::__1::hash<void*>, true>, std::__1::allocator<std::__1::__hash_value_type<void*, v8::internal::SerializerReference> > >::__emplace_unique_key_args<void*, void*&, v8::internal::SerializerReference&>(void* const&, void*&, v8::internal::SerializerReference&)",93957340557600,93957340558483],["v8::internal::CodeAddressMap::~CodeAddressMap()",93957340558688,93957340558882],["v8::internal::CodeAddressMap::LogRecordedBuffer(v8::internal::Handle<v8::internal::AbstractCode>, v8::internal::MaybeHandle<v8::internal::SharedFunctionInfo>, char const*, int)",93957340559280,93957340559898],["v8::internal::Serializer::ObjectSerializer::RelocInfoObjectPreSerializer::VisitCodeTarget(v8::internal::Code, v8::internal::RelocInfo*)",93957340560192,93957340560372],["v8::internal::SnapshotCompression::Decompress(v8::internal::Vector<unsigned char const>)",93957340560656,93957340560884],["v8::internal::SnapshotData::SnapshotData(v8::internal::Serializer const*)",93957340561008,93957340561391],["v8_inspector::V8Debugger::shouldContinueToCurrentLocation()",93957342535968,93957342536412],["v8_inspector::V8Debugger::asyncTaskCanceledForStack(void*)",93957342540080,93957342540295],["v8_inspector::V8Debugger::queryObjects(v8::Local<v8::Context>, v8::Local<v8::Object>)",93957342542832,93957342543283],["v8_inspector::V8Debugger::stackTraceFor(int, v8_inspector::V8StackTraceId const&)",93957342544512,93957342545026],["v8_inspector::V8Debugger::collectOldAsyncStacksIfNeeded()",93957342546016,93957342546600],["v8_inspector::V8Debugger::externalAsyncTaskStarted(v8_inspector::V8StackTraceId const&)",93957342546784,93957342547375],["v8_inspector::V8Debugger::asyncTaskScheduled(v8_inspector::StringView const&, void*, bool)",93957342547568,93957342547660],["v8_inspector::V8Debugger::asyncTaskStarted(void*)",93957342547760,93957342547793],["v8_inspector::UTF16ToUTF8(unsigned short const*, unsigned long)",93957342740528,93957342741129],["v8_crdtp::cbor::CBORTokenizer::Next()",93957342750624,93957342750650],["v8_crdtp::cbor::(anonymous namespace)::CBOREncoder::HandleMapBegin()",93957342751696,93957342751950],["v8_crdtp::cbor::(anonymous namespace)::CBOREncoder::HandleBool(bool)",93957342752976,93957342753243],["v8_crdtp::cbor::(anonymous namespace)::ParseArray(int, v8_crdtp::cbor::CBORTokenizer*, v8_crdtp::ParserHandler*)",93957342754576,93957342754763],["v8_crdtp::DispatchResponse::InvalidParams(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)",93957342755072,93957342755109],["v8_crdtp::Dispatchable::MaybeParseProperty(v8_crdtp::cbor::CBORTokenizer*)",93957342755760,93957342756200],["v8_crdtp::CreateErrorResponse(int, v8_crdtp::DispatchResponse, v8_crdtp::ErrorSupport const*)",93957342756512,93957342757163],["v8_crdtp::DomainDispatcher::WeakPtr::~WeakPtr()",93957342757312,93957342757431],["v8_crdtp::DomainDispatcher::Callback::~Callback()",93957342757632,93957342757660],["v8_crdtp::DomainDispatcher::Callback::sendIfActive(std::__1::unique_ptr<v8_crdtp::Serializable, std::__1::default_delete<v8_crdtp::Serializable> >, v8_crdtp::DispatchResponse const&)",93957342757808,93957342758003],["v8_crdtp::DomainDispatcher::Callback::fallThroughIfActive()",93957342758304,93957342758512],["v8_crdtp::DomainDispatcher::~DomainDispatcher()",93957342758560,93957342758895],["v8_crdtp::DomainDispatcher::weakPtr()",93957342759120,93957342759185],["v8_crdtp::UberDispatcher::UberDispatcher(v8_crdtp::FrontendChannel*)",93957342759280,93957342759315],["v8_crdtp::UberDispatcher::~UberDispatcher()",93957342759472,93957342759603],["v8::internal::compiler::InstructionSelector::VisitIfException(v8::internal::compiler::Node*)",93957342955776,93957342955942],["v8::internal::compiler::InstructionSelector::EmitWordPoisonOnSpeculation(v8::internal::compiler::Node*)",93957342961680,93957342962155],["void std::__1::__stable_sort<v8::internal::compiler::SwitchInfo::CasesSortedByValue() const::{lambda(v8::internal::compiler::CaseInfo, v8::internal::compiler::CaseInfo)#1}&, std::__1::__wrap_iter<v8::internal::compiler::CaseInfo*> >(std::__1::__wrap_iter<v8::internal::compiler::CaseInfo*>, std::__1::__wrap_iter<v8::internal::compiler::CaseInfo*>, v8::internal::compiler::SwitchInfo::CasesSortedByValue() const::{lambda(v8::internal::compiler::CaseInfo, v8::internal::compiler::CaseInfo)#1}&, std::__1::iterator_traits<std::__1::__wrap_iter<v8::internal::compiler::CaseInfo*> >::difference_type, std::__1::iterator_traits::value_type*, long)",93957342971600,93957342972144],["v8::internal::compiler::CommuteFlagsCondition(v8::internal::compiler::FlagsCondition)",93957342976912,93957342977071],["v8::internal::compiler::Instruction::AreMovesRedundant() const",93957342980960,93957342981382],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::AddressingMode const&)",93957342988512,93957342988905],["v8::internal::compiler::Constant::Constant(int)",93957342990160,93957342990183],["v8::internal::compiler::PhiInstruction::RenameInput(unsigned long, int)",93957342990736,93957342990749],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::RpoNumber const&)",93957342992816,93957342992829],["v8::internal::compiler::InstructionSequence::ComputeAssemblyOrder()",93957342996416,93957342999406],["v8::internal::compiler::InstructionSequence::NextVirtualRegister()",93957342999696,93957342999741],["v8::internal::compiler::InstructionSequence::EndBlock(v8::internal::compiler::RpoNumber)",93957342999808,93957342999873],["v8::internal::compiler::InstructionSequence::GetInstructionBlock(int) const",93957343000432,93957343000479],["v8::internal::compiler::InstructionSequence::MarkAsRepresentation(v8::internal::MachineRepresentation, int)",93957343000528,93957343000692],["v8::internal::compiler::InstructionSequence::GetDeoptimizationEntry(int)",93957343001152,93957343001172],["v8::internal::compiler::InstructionSequence::GetSourcePosition(v8::internal::compiler::Instruction const*, v8::internal::SourcePosition*) const",93957343001312,93957343001392],["v8::internal::compiler::TopTierRegisterAllocationData::AddGapMove(int, v8::internal::compiler::Instruction::GapPosition, v8::internal::compiler::InstructionOperand const&, v8::internal::compiler::InstructionOperand const&)",93957343098656,93957343098832],["v8::internal::compiler::RegisterAllocator::FindOptimalSpillingPos(v8::internal::compiler::LiveRange*, v8::internal::compiler::LifetimePosition, v8::internal::compiler::TopTierRegisterAllocationData::SpillMode, v8::internal::compiler::LiveRange**)",93957343127872,93957343128456],["v8::internal::compiler::LinearScanAllocator::PickRegisterThatIsAvailableLongest(v8::internal::compiler::LiveRange*, int, v8::internal::Vector<v8::internal::compiler::LifetimePosition> const&)",93957343150896,93957343151442],["void std::__1::__function::__policy_invoker<void (v8::internal::compiler::LiveRange*)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::LinearScanAllocator::UpdateDeferredFixedRanges(v8::internal::compiler::TopTierRegisterAllocationData::SpillMode, v8::internal::compiler::InstructionBlock*)::$_3::operator()(v8::internal::compiler::LiveRange*) const::{lambda(v8::internal::compiler::LiveRange*)#1}, void (v8::internal::compiler::LiveRange*)> >(std::__1::__function::__policy_storage const*, v8::internal::compiler::LiveRange*)",93957343169776,93957343169809],["v8::internal::compiler::SpillPlacer::Add(v8::internal::compiler::TopLevelLiveRange*)",93957343174224,93957343175145],["v8::internal::compiler::BranchElimination::BranchElimination(v8::internal::compiler::AdvancedReducer::Editor*, v8::internal::compiler::JSGraph*, v8::internal::Zone*, v8::internal::compiler::BranchElimination::Phase)",93957343182704,93957343182990],["v8::internal::compiler::BranchElimination::SimplifyBranchCondition(v8::internal::compiler::Node*)",93957343185968,93957343186734],["v8::internal::compiler::BytecodeLoopAssignments::ContainsParameter(int) const",93957343188352,93957343188409],["v8::internal::compiler::(anonymous namespace)::UpdateLiveness(v8::internal::interpreter::Bytecode, v8::internal::compiler::BytecodeLiveness const&, v8::internal::compiler::BytecodeLivenessState**, v8::internal::interpreter::BytecodeArrayIterator const&, v8::internal::Handle<v8::internal::BytecodeArray>, v8::internal::compiler::BytecodeLivenessMap const&)",93957343196480,93957343196846],["v8::internal::compiler::BytecodeAnalysis::IsLoopHeader(int) const",93957343201440,93957343201514],["v8::internal::compiler::BytecodeAnalysis::GetOutLivenessFor(int) const",93957343201760,93957343201792],["v8::internal::compiler::BytecodeGraphBuilder::Environment::BindAccumulator(v8::internal::compiler::Node*, v8::internal::compiler::BytecodeGraphBuilder::Environment::FrameStateAttachmentMode)",93957343204176,93957343204352],["v8::internal::compiler::BytecodeGraphBuilder::MergeControl(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343205520,93957343205704],["v8::internal::compiler::BytecodeGraphBuilder::Environment::FillWithOsrValues()",93957343208816,93957343209082],["v8::internal::compiler::BytecodeGraphBuilder::BuildLoadFeedbackCell()",93957343211520,93957343211726],["v8::internal::compiler::BytecodeGraphBuilder::MaybeBuildIncrementInvocationCount()",93957343212688,93957343212978],["v8::internal::compiler::BytecodeGraphBuilder::AdvanceIteratorsTo(int)",93957343214032,93957343214344],["v8::internal::compiler::BytecodeGraphBuilder::BuildIterationBodyStackCheck()",93957343214512,93957343214697],["v8::internal::compiler::BytecodeGraphBuilder::AdvanceToOsrEntryAndPeelLoops()",93957343214816,93957343216391],["v8::internal::compiler::BytecodeGraphBuilder::VisitSingleBytecode()",93957343217872,93957343222289],["v8::internal::compiler::BytecodeGraphBuilder::BuildLoopHeaderEnvironment(int)",93957343222976,93957343223600],["v8::internal::compiler::BytecodeGraphBuilder::VisitLdaSmi()",93957343223680,93957343223769],["v8::internal::compiler::BytecodeGraphBuilder::VisitLdaNull()",93957343223856,93957343223925],["v8::internal::compiler::BytecodeGraphBuilder::VisitLdaTrue()",93957343224016,93957343224085],["v8::internal::compiler::BytecodeGraphBuilder::VisitLdaConstant()",93957343224176,93957343224320],["v8::internal::compiler::BytecodeGraphBuilder::VisitLdaGlobalInsideTypeof()",93957343224720,93957343225114],["v8::internal::compiler::BytecodeGraphBuilder::VisitPushContext()",93957343225696,93957343225861],["v8::internal::compiler::BytecodeGraphBuilder::VisitLdaContextSlot()",93957343225936,93957343226124],["v8::internal::compiler::BytecodeGraphBuilder::VisitLdaCurrentContextSlot()",93957343226320,93957343226436],["v8::internal::compiler::BytecodeGraphBuilder::VisitStaContextSlot()",93957343226576,93957343226779],["v8::internal::compiler::BytecodeGraphBuilder::VisitStaLookupSlot()",93957343226928,93957343227322],["v8::internal::compiler::BytecodeGraphBuilder::VisitStar()",93957343227424,93957343227556],["v8::internal::compiler::MemoryLowering::reducer_name() const",93957344582096,93957344582109],["v8::internal::compiler::NodeProperties::NoObservableSideEffectBetween(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957344599616,93957344599768],["v8::internal::compiler::Node::Print(int) const",93957344605728,93957344605979],["v8::internal::compiler::OperationTyper::ToNumberConvertBigInt(v8::internal::compiler::Type)",93957344609824,93957344609948],["v8::internal::compiler::OperationTyper::NumberToUint32(v8::internal::compiler::Type)",93957344611552,93957344611738],["v8::internal::compiler::OperationTyper::SpeculativeSafeIntegerSubtract(v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344613296,93957344613418],["v8::internal::compiler::OperationTyper::NumberShiftLeft(v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344616528,93957344616799],["v8::internal::compiler::OperationTyper::SpeculativeNumberDivide(v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344618592,93957344618692],["v8::internal::compiler::OperationTyper::SpeculativeNumberShiftRight(v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344619264,93957344619364],["v8::internal::compiler::OperationTyper::SameValue(v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344619552,93957344620054],["v8::internal::compiler::OperationTyper::CheckBounds(v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344620944,93957344621167],["v8::internal::compiler::OperationTyper::ConvertTaggedHoleToUndefined(v8::internal::compiler::Type)",93957344621344,93957344621420],["v8::internal::compiler::OperatorProperties::HasFrameStateInput(v8::internal::compiler::Operator const*)",93957344621888,93957344621948],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator const&)",93957344622192,93957344622225],["v8::internal::compiler::OsrHelper::SetupFrame(v8::internal::compiler::Frame*)",93957344623216,93957344623238],["v8::internal::compiler::PipelineStatistics::~PipelineStatistics()",93957344623776,93957344624041],["v8::internal::compiler::PipelineStatistics::BeginPhase(char const*)",93957344624640,93957344624888],["v8::internal::compiler::PipelineCompilationJob::PipelineCompilationJob(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::JSFunction>, v8::internal::BytecodeOffset, v8::internal::JavaScriptFrame*, v8::internal::CodeKind)",93957344625216,93957344625707],["v8::internal::compiler::PipelineData::PipelineData(v8::internal::compiler::ZoneStats*, v8::internal::Isolate*, v8::internal::OptimizedCompilationInfo*, v8::internal::compiler::PipelineStatistics*, bool)",93957344626064,93957344627751],["v8::internal::compiler::PipelineData::~PipelineData()",93957344627872,93957344628482],["v8::internal::compiler::PipelineCompilationJob::PrepareJobImpl(v8::internal::Isolate*)",93957344628624,93957344629194],["v8::internal::compiler::PipelineImpl::Serialize()",93957344629648,93957344630516],["v8::internal::compiler::PipelineCompilationJob::ExecuteJobImpl(v8::internal::RuntimeCallStats*, v8::internal::LocalIsolate*)",93957344631088,93957344631312],["v8::internal::compiler::PipelineImpl::OptimizeGraph(v8::internal::compiler::Linkage*)",93957344632352,93957344634123],["v8::internal::compiler::PipelineCompilationJob::FinalizeJobImpl(v8::internal::Isolate*)",93957344634832,93957344635251],["v8::internal::compiler::PipelineCompilationJob::RegisterWeakObjectsInOptimizedCode(v8::internal::Isolate*, v8::internal::Handle<v8::internal::NativeContext>, v8::internal::Handle<v8::internal::Code>)",93957344637392,93957344638212],["v8::internal::compiler::Pipeline::NewWasmHeapStubCompilationJob(v8::internal::Isolate*, v8::internal::wasm::WasmEngine*, v8::internal::compiler::CallDescriptor*, std::__1::unique_ptr<v8::internal::Zone, std::__1::default_delete<v8::internal::Zone> >, v8::internal::compiler::Graph*, v8::internal::CodeKind, std::__1::unique_ptr<char [], std::__1::default_delete<char []> >, v8::internal::AssemblerOptions const&, v8::internal::compiler::SourcePositionTable*)",93957344638928,93957344639043],["v8::internal::CodeTracer::StreamScope::~StreamScope()",93957344640656,93957344640912],["v8::internal::compiler::WasmHeapStubCompilationJob::FinalizeJobImpl(v8::internal::Isolate*)",93957344641312,93957344641444],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::VerifyGraphPhase, bool&>(bool&)",93957344641872,93957344642302],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::SerializationPhase>()",93957344642768,93957344643136],["void v8::internal::compiler::PipelineImpl::Run<v8::internal::compiler::InliningPhase>()",93957344643536,93957344643921],["void v8::internal::compiler::RepresentationSelector::VisitCheckBounds<(v8::internal::compiler::Phase)0>(v8::internal::compiler::Node*, v8::internal::compiler::SimplifiedLowering*)",93957344946528,93957344948445],["v8::internal::compiler::SimplifiedOperatorBuilder::NumberTanh()",93957345040752,93957345040766],["v8::internal::compiler::SimplifiedOperatorBuilder::NumberIsMinusZero()",93957345041520,93957345041534],["v8::internal::compiler::SimplifiedOperatorBuilder::StringFromCodePointAt()",93957345042032,93957345042046],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckedInt32ToTaggedSigned(v8::internal::compiler::FeedbackSource const&)",93957345043184,93957345043384],["v8::internal::compiler::SimplifiedOperatorBuilder::UpdateInterruptBudget(int)",93957345046432,93957345046557],["v8::internal::compiler::SimplifiedOperatorBuilder::ConvertReceiver(v8::internal::ConvertReceiverMode)",93957345050416,93957345050478],["v8::internal::compiler::SimplifiedOperatorBuilder::NewArgumentsElements(v8::internal::CreateArgumentsType, int)",93957345052752,93957345052900],["v8::internal::compiler::SimplifiedOperatorBuilder::SpeculativeNumberShiftLeft(v8::internal::compiler::NumberOperationHint)",93957345054160,93957345054242],["v8::internal::compiler::SimplifiedOperatorBuilder::LoadField(v8::internal::compiler::FieldAccess const&)",93957345054928,93957345055163],["v8::internal::compiler::SimplifiedOperatorBuilder::LoadDataViewElement(v8::internal::ExternalArrayType const&)",93957345056336,93957345056464],["v8::internal::compiler::SimplifiedOperatorBuilder::TransitionAndStoreNonNumberElement(v8::internal::Handle<v8::internal::Map>, v8::internal::compiler::Type)",93957345057216,93957345057357],["v8::internal::compiler::Operator1<v8::internal::compiler::CheckIfParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CheckIfParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CheckIfParameters> >::Equals(v8::internal::compiler::Operator const*) const",93957345083984,93957345084024],["v8::internal::compiler::Operator1<v8::internal::compiler::CheckFloat64HoleParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CheckFloat64HoleParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CheckFloat64HoleParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957345084864,93957345085012],["v8::internal::compiler::Operator1<v8::internal::compiler::DynamicCheckMapsParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::DynamicCheckMapsParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::DynamicCheckMapsParameters> >::HashCode() const",93957345085776,93957345085849],["v8::internal::compiler::Operator1<v8::internal::AllocationType, v8::internal::compiler::OpEqualTo<v8::internal::AllocationType>, v8::internal::compiler::OpHash<v8::internal::AllocationType> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957345086384,93957345086553],["v8::internal::compiler::Operator1<v8::internal::compiler::AllocateParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::AllocateParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::AllocateParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957345086864,93957345086938],["v8::internal::compiler::Operator1<v8::internal::compiler::ElementAccess, v8::internal::compiler::OpEqualTo<v8::internal::compiler::ElementAccess>, v8::internal::compiler::OpHash<v8::internal::compiler::ElementAccess> >::HashCode() const",93957345087232,93957345087330],["v8::internal::compiler::Operator1<v8::internal::compiler::ObjectAccess, v8::internal::compiler::OpEqualTo<v8::internal::compiler::ObjectAccess>, v8::internal::compiler::OpHash<v8::internal::compiler::ObjectAccess> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957345087552,93957345087624],["v8::internal::compiler::Operator1<v8::internal::compiler::(anonymous namespace)::TransitionAndStoreNumberElementParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::(anonymous namespace)::TransitionAndStoreNumberElementParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::(anonymous namespace)::TransitionAndStoreNumberElementParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957345087888,93957345087990],["v8::internal::compiler::Operator1<v8::internal::compiler::FastApiCallParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::FastApiCallParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::FastApiCallParameters> >::HashCode() const",93957345088288,93957345088442],["v8::internal::compiler::StateValuesCache::IsKeysEqualToNode(v8::internal::compiler::StateValuesCache::StateValuesKey*, v8::internal::compiler::Node*)",93957345089024,93957345089362],["v8::internal::compiler::StateValuesAccess::iterator::iterator(v8::internal::compiler::Node*)",93957345090768,93957345090898],["v8::internal::compiler::StateValuesAccess::iterator::operator++()",93957345091424,93957345091471],["v8::internal::compiler::StoreStoreElimination::Run(v8::internal::compiler::JSGraph*, v8::internal::TickCounter*, v8::internal::Zone*)",93957345092176,93957345093757],["v8::internal::compiler::PersistentMap<v8::internal::compiler::(anonymous namespace)::UnobservableStore, bool, v8::base::hash<v8::internal::compiler::(anonymous namespace)::UnobservableStore> >::begin() const",93957345100032,93957345100298],["v8::internal::compiler::TypeCache::Get()",93957345101344,93957345101416],["v8::internal::compiler::TypeNarrowingReducer::reducer_name() const",93957345106224,93957345106237],["v8::internal::compiler::TypedOptimization::ReduceMaybeGrowFastElements(v8::internal::compiler::Node*)",93957345107680,93957345108416],["v8::internal::compiler::TypedOptimization::ReduceLoadField(v8::internal::compiler::Node*)",93957345109344,93957345109594],["v8::internal::compiler::TypedOptimization::ReduceStringComparison(v8::internal::compiler::Node*)",93957345110592,93957345111394],["v8::internal::compiler::TypedOptimization::ReduceTypeOf(v8::internal::compiler::Node*)",93957345113264,93957345113748],["v8::internal::compiler::TypedOptimization::ReduceSpeculativeNumberBinop(v8::internal::compiler::Node*)",93957345115008,93957345115538],["v8::internal::compiler::TypedOptimization::TryReduceStringComparisonOfStringFromSingleCharCodeToConstant(v8::internal::compiler::Node*, v8::internal::compiler::StringRef const&, bool)",93957345115920,93957345116114],["v8::internal::compiler::TypedOptimization::ReduceJSToNumberInput(v8::internal::compiler::Node*)",93957345116960,93957345117608],["v8::internal::compiler::TypedOptimization::reducer_name() const",93957345117712,93957345117725],["v8::internal::compiler::Typer::~Typer()",93957345117904,93957345117925],["v8::internal::compiler::Typer::Visitor::InductionVariablePhiTypeIsPrefixedPoint(v8::internal::compiler::InductionVariable*)",93957345118384,93957345119509],["v8::internal::compiler::Typer::Decorator::Decorate(v8::internal::compiler::Node*)",93957345119552,93957345119743],["v8::internal::compiler::Typer::Visitor::BitwiseNot(v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345128320,93957345128423],["v8::internal::compiler::Typer::Visitor::Increment(v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345128544,93957345128647],["v8::internal::compiler::Typer::Visitor::ToInteger(v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345128768,93957345128947],["v8::internal::compiler::Typer::Visitor::ToName(v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345129152,93957345129425],["v8::internal::compiler::Typer::Visitor::ToObject(v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345129584,93957345129711],["v8::internal::compiler::Typer::Visitor::ObjectIsBigInt(v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345129792,93957345129910],["v8::internal::compiler::Typer::Visitor::ObjectIsConstructor(v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345130048,93957345130192],["v8::internal::compiler::Typer::Visitor::NumberIsMinusZero(v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345130320,93957345130438],["v8::internal::compiler::Typer::Visitor::ObjectIsNonCallable(v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345130576,93957345130694],["v8::internal::compiler::Typer::Visitor::ObjectIsReceiver(v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345130832,93957345130950],["v8::internal::compiler::Typer::Visitor::ObjectIsString(v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345131024,93957345131142],["v8::internal::compiler::Typer::Visitor::ObjectIsUndetectable(v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345131280,93957345131398],["v8::internal::compiler::Typer::Visitor::JSEqualTyper(v8::internal::compiler::Type, v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345131520,93957345131894],["v8::internal::compiler::Typer::Visitor::NumberCompareTyper(v8::internal::compiler::Type, v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345132256,93957345132537],["v8::internal::compiler::Typer::Visitor::JSGreaterThanTyper(v8::internal::compiler::Type, v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345132624,93957345132708],["v8::internal::compiler::Typer::Visitor::JSGreaterThanOrEqualTyper(v8::internal::compiler::Type, v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345132816,93957345132900],["v8::internal::compiler::Typer::Visitor::JSBitwiseAndTyper(v8::internal::compiler::Type, v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345133136,93957345133360],["v8::internal::compiler::Typer::Visitor::JSShiftLeftTyper(v8::internal::compiler::Type, v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345133584,93957345133808],["v8::internal::compiler::Typer::Visitor::JSShiftRightLogicalTyper(v8::internal::compiler::Type, v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345134032,93957345134101],["v8::internal::compiler::Typer::Visitor::JSSubtractTyper(v8::internal::compiler::Type, v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345134624,93957345134848],["v8::internal::compiler::Typer::Visitor::JSDivideTyper(v8::internal::compiler::Type, v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345135072,93957345135296],["v8::internal::compiler::Typer::Visitor::Weaken(v8::internal::compiler::Node*, v8::internal::compiler::Type, v8::internal::compiler::Type)",93957345135520,93957345136831],["v8::internal::compiler::Typer::Visitor::NumberEqualTyper(v8::internal::compiler::Type, v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345138160,93957345138228],["v8::internal::compiler::Typer::Visitor::NumberLessThanOrEqualTyper(v8::internal::compiler::Type, v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345138352,93957345138481],["v8::internal::compiler::Typer::Visitor::SameValueTyper(v8::internal::compiler::Type, v8::internal::compiler::Type, v8::internal::compiler::Typer*)",93957345138576,93957345138599],["std::__1::basic_ostream<wchar_t, std::__1::char_traits<wchar_t> >::sentry::~sentry()",93957346642784,93957346642919],["non-virtual thunk to std::__1::basic_iostream<char, std::__1::char_traits<char> >::~basic_iostream()",93957346643008,93957346643041],["std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::underflow()",93957346644352,93957346644417],["std::__1::basic_filebuf<char, std::__1::char_traits<char> >::open(char const*, unsigned int)",93957346645104,93957346645350],["std::__1::basic_filebuf<char, std::__1::char_traits<char> >::~basic_filebuf()",93957346645728,93957346645925],["std::__1::basic_filebuf<char, std::__1::char_traits<char> >::underflow()",93957346645968,93957346646590],["std::__1::basic_filebuf<char, std::__1::char_traits<char> >::pbackfail(int)",93957346646656,93957346646730],["std::__1::basic_filebuf<char, std::__1::char_traits<char> >::setbuf(char*, long)",93957346647296,93957346647555],["std::__1::basic_filebuf<char, std::__1::char_traits<char> >::seekpos(std::__1::fpos<__mbstate_t>, unsigned int)",93957346647760,93957346647852],["std::__1::basic_filebuf<char, std::__1::char_traits<char> >::imbue(std::__1::locale const&)",93957346648352,93957346648594],["std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_stringbuf()",93957346648672,93957346648739],["std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_stringstream()",93957346648784,93957346648900],["quick_exit",139871563516992,139871563517012],["mbtowc",139871563517712,139871563517857],["random",139871563518624,139871563518815],["random_r",139871563519728,139871563519876],["drand48",139871563519984,139871563520053],["lrand48",139871563520144,139871563520212],["mrand48",139871563520304,139871563520372],["srand48",139871563520464,139871563520476],["_IO_getline_info",139871563741616,139871563742032],["fputws_unlocked",139871563750016,139871563750159],["wscanf",139871563753008,139871563753208],["_IO_switch_to_wbackup_area",139871563755024,139871563755073],["_IO_wdefault_xsputn",139871563756000,139871563756404],["_IO_free_wbackup_area",139871563756832,139871563756937],["_IO_sputbackwc",139871563757904,139871563758031],["_IO_wmarker_delta",139871563758336,139871563758402],["_IO_wfile_underflow",139871563760848,139871563762572],["_IO_wdo_write",139871563765488,139871563765998],["_IO_wfile_sync",139871563766720,139871563767108],["fwide",139871563768576,139871563768988],["clearerr",139871563769456,139871563769677],["ferror",139871563769920,139871563770149],["fputc",139871563770208,139871563770540],["fseek",139871563771312,139871563771573],["__libc_dlsym",139871564535936,139871564536097],["_dl_signal_error",139871564538240,139871564538323],["__sigismember",139871564538720,139871564538749],["__sigdelset",139871564538784,139871564538812],["ddivl",139871565707744,139871565708070],["f32xsubf64",139871565713152,139871565713310],["_init",139871566577664,139871566579072],["__pthread_create_2_1.cold",139871566579095,139871566579109],["__do_global_dtors_aux",139871566579232,139871566579296],["__nptl_set_robust",139871566579312,139871566579332],["sighandler_setxid",139871566579504,139871566579802],["__pthread_get_minstack",139871566580672,139871566580697],["__free_tcb",139871566585216,139871566585290],["__pthread_clockjoin_ex",139871566590576,139871566591318],["__pthread_cond_init_2_0",139871566616080,139871566616107],["__pthread_cond_wait_2_0",139871566616144,139871566616247],["__pthread_cond_signal_2_0",139871566616400,139871566616501],["__pthread_condattr_init",139871566616624,139871566616633],["pthread_condattr_getpshared",139871566616656,139871566616666],["pthread_condattr_getclock",139871566616704,139871566616716],["pthread_spin_lock",139871566616768,139871566616793],["pthread_barrier_destroy",139871566616912,139871566617035],["pthread_barrierattr_getpshared",139871566617552,139871566617559],["__GI___pthread_getspecific",139871566617744,139871566617877],["pthread_sigqueue",139871566618480,139871566618684],["__pthread_setcanceltype",139871566619120,139871566619280],["__GI___shm_directory",139871566620192,139871566620256],["__sem_search",139871566621056,139871566621101],["sem_unlink",139871566622704,139871566623007],["__sem_wait_cleanup",139871566623024,139871566623039],["__new_sem_trywait",139871566623488,139871566623532],["sem_timedwait",139871566623984,139871566624092],["sem_clockwait",139871566624576,139871566624644],["__GI___pthread_register_cancel",139871566624768,139871566624804],["__pthread_register_cancel_defer",139871566624832,139871566624939],["__pthread_cleanup_push",139871566625088,139871566625118],["__pthread_cleanup_push_defer",139871566625168,139871566625275],["unwind_stop",139871566625456,139871566625748],["__GI___pthread_unwind_next",139871566625856,139871566625869],["__fork_alias",139871566626608,139871566626613],["__libc_write",139871566626720,139871566626877],["__close",139871566627040,139871566627179],["__connect",139871566627344,139871566627499],["__libc_recvfrom",139871566627696,139871566627885],["__libc_msgrcv",139871566629584,139871566629765],["__libc_sigsuspend",139871566630080,139871566630235],["__libc_sigaction",139871566631248,139871566631721],["__nptl_unwind_freeres",139871566632816,139871566632849],["__gcc_personality_v0",139871566632944,139871566633043],["_Unwind_GetCFA",139871566633152,139871566633217],["__pthread_tpp_change_priority",139871566633600,139871566634627],["_dl_tunable_set_elision_enable",139871566638576,139871566638615],["__lll_clocklock_elision",139871566638864,139871566639128],["noopHasNext(UCharIterator*)",93957335211104,93957335211112],["v8::DelayedTasksPlatform::GetPageAllocator()",93957335211424,93957335211439],["non-virtual thunk to v8::ProcessMessageTask::~ProcessMessageTask()",93957335307424,93957335307553],["non-virtual thunk to v8::TerminateTask::~TerminateTask()",93957335307920,93957335308016],["v8::Serializer::GetSharedArrayBufferId(v8::Isolate*, v8::Local<v8::SharedArrayBuffer>)",93957335308096,93957335308414],["v8::Serializer::ReallocateBufferMemory(void*, unsigned long, unsigned long*)",93957335308816,93957335308887],["v8::internal::FactoryBase<v8::internal::Factory>::NewObjectBoilerplateDescription(int, int, int, bool)",93957336829616,93957336829756],["v8::internal::FactoryBase<v8::internal::Factory>::NewCoverageInfo(v8::internal::ZoneVector<v8::internal::SourceRange> const&)",93957336833104,93957336833335],["v8::internal::FactoryBase<v8::internal::Factory>::AllocateRawTwoByteInternalizedString(int, unsigned int)",93957336834112,93957336834299],["v8::internal::FactoryBase<v8::internal::Factory>::MakeOrFindTwoCharacterString(unsigned short, unsigned short)",93957336835808,93957336836060],["v8::internal::FactoryBase<v8::internal::Factory>::NewScopeInfo(int, v8::internal::AllocationType)",93957336836672,93957336836809],["v8::internal::FactoryBase<v8::internal::Factory>::NewDescriptorArray(int, int, v8::internal::AllocationType)",93957336836864,93957336837032],["v8::internal::FactoryBase<v8::internal::Factory>::NewSwissNameDictionary(int, v8::internal::AllocationType)",93957336837280,93957336837359],["void v8::internal::SwissNameDictionary::Initialize<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::ByteArray, int)",93957336837664,93957336837983],["v8::internal::Factory::NewRegExpMatchInfo()",93957336909552,93957336909863],["v8::internal::FreeListMany::GuaranteedAllocatable(unsigned long)",93957336916464,93957336916546],["v8::internal::FreeListManyCachedFastPath::Allocate(unsigned long, unsigned long*, v8::internal::AllocationOrigin)",93957336918832,93957336919724],["v8::internal::GCIdleTimeHandler::EstimateMarkingStepSize(double, double)",93957336920336,93957336920451],["v8::internal::GCTracer::Scope::Name(v8::internal::GCTracer::Scope::ScopeId)",93957336921280,93957336921319],["v8::internal::GCTracer::StartInSafepoint()",93957336923456,93957336924127],["v8::internal::GCTracer::AddAllocation(double)",93957336927696,93957336928092],["v8::internal::GCTracer::NotifySweepingCompleted()",93957336935888,93957336936026],["v8::internal::GCTracer::AddSurvivalRatio(double)",93957336936240,93957336936323],["v8::internal::GCTracer::Output(char const*, ...) const",93957336936384,93957336936683],["v8::internal::GCTracer::ScavengeSpeedInBytesPerMillisecond(v8::internal::ScavengeSpeedMode) const",93957336936752,93957336937244],["v8::internal::GCTracer::NewSpaceAllocationThroughputInBytesPerMillisecond(double) const",93957336937424,93957336937672],["v8::internal::GCTracer::IncrementalMarkingSpeedInBytesPerMillisecond() const",93957336937904,93957336937997],["v8::internal::GCTracer::RecordTimeToIncrementalMarkingTask(double)",93957336938288,93957336938347],["v8::internal::GCTracer::RecordEmbedderSpeed(unsigned long, double)",93957336938368,93957336938477],["v8::internal::GCTracer::CombinedMarkCompactSpeedInBytesPerMillisecond()",93957336938496,93957336939576],["v8::internal::UnreachableObjectsFilter::MarkingVisitor::VisitRootPointers(v8::internal::Root, char const*, v8::internal::OffHeapCompressedObjectSlot, v8::internal::OffHeapCompressedObjectSlot)",93957337049408,93957337049538],["void std::__1::__function::__policy_invoker<void (v8::internal::AllocationSite)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::Heap::ResetAllAllocationSitesDependentCode(v8::internal::AllocationType)::$_4, void (v8::internal::AllocationSite)> >(std::__1::__function::__policy_storage const*, v8::internal::AllocationSite&&)",93957337053424,93957337053510],["v8::internal::SlotSet::RemoveRange(unsigned long, unsigned long, unsigned long, v8::internal::SlotSet::EmptyBucketMode)",93957337054816,93957337055859],["v8::internal::IncrementalMarkingJob::CurrentTimeToTask(v8::internal::Heap*) const",93957337056880,93957337056933],["v8::internal::IncrementalMarking::EnsureBlackAllocated(unsigned long, unsigned long)",93957337058032,93957337058370],["v8::internal::IncrementalMarking::MarkBlackAndVisitObjectDueToLayoutChange(v8::internal::HeapObject)",93957337058608,93957337059395],["v8::internal::IncrementalMarking::NotifyLeftTrimming(v8::internal::HeapObject, v8::internal::HeapObject)",93957337059648,93957337059917],["v8::internal::IncrementalMarking::CanBeActivated()",93957337059936,93957337059990],["v8::internal::MemoryChunk::ReleaseAllocatedMemoryNeededForWritableChunk()",93957337429280,93957337429901],["v8::internal::MemoryMeasurement::EnqueueRequest(std::__1::unique_ptr<v8::MeasureMemoryDelegate, std::__1::default_delete<v8::MeasureMemoryDelegate> >, v8::MeasureMemoryExecution, std::__1::vector<v8::internal::Handle<v8::internal::NativeContext>, std::__1::allocator<v8::internal::Handle<v8::internal::NativeContext> > >)",93957337433312,93957337433919],["v8::internal::NativeContextStats::IncrementExternalSize(unsigned long, v8::internal::Map, v8::internal::HeapObject)",93957337438048,93957337438157],["v8::internal::MemoryReducer::Step(v8::internal::MemoryReducer::State const&, v8::internal::MemoryReducer::Event const&)",93957337440480,93957337441108],["v8::internal::SemiSpace::Uncommit()",93957337442384,93957337442588],["v8::internal::SemiSpace::RemovePage(v8::internal::Page*)",93957337443920,93957337444157],["v8::internal::NewSpace::CommittedPhysicalMemory()",93957337444928,93957337445146],["v8::internal::NewSpace::TearDown()",93957337446320,93957337446829],["v8::internal::NewSpace::Grow()",93957337446896,93957337447267],["v8::internal::NewSpace::SizeOfObjects()",93957337447968,93957337448028],["v8::internal::NewSpace::UpdateInlineAllocationLimit(unsigned long)",93957337448096,93957337448145],["v8::internal::NewSpace::AddParkedAllocationBuffer(int, v8::internal::AllocationAlignment)",93957337448528,93957337449116],["v8::internal::NewSpace::MaybeFreeUnusedLab(v8::internal::LinearAllocationArea)",93957337449296,93957337449349],["v8::internal::NewSpace::AllocateRawSlow(int, v8::internal::AllocationAlignment, v8::internal::AllocationOrigin)",93957337449424,93957337449595],["v8::internal::SemiSpace::~SemiSpace()",93957337449792,93957337449820],["v8::internal::NewSpace::~NewSpace()",93957337449856,93957337449966],["v8::internal::SpaceWithLinearArea::PauseAllocationObservers()",93957337599648,93957337599746],["v8::internal::StressMarkingObserver::Step(int, unsigned long, unsigned long)",93957337600240,93957337600304],["v8::internal::Sweeper::ParallelSweepPage(v8::internal::Page*, v8::internal::AllocationSpace, v8::internal::Sweeper::FreeSpaceMayContainInvalidatedSlots)",93957337607968,93957337608213],["v8::internal::StoreHandler::StoreTransition(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>)",93957337621776,93957337622138],["v8::internal::IC::ConfigureVectorState(v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Object>)",93957337630688,93957337630854],["v8::internal::LoadHandler::LoadGlobal(v8::internal::Isolate*)",93957337645024,93957337645110],["v8::internal::StoreGlobalIC::Store(v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>)",93957337652304,93957337653543],["v8::internal::Stats_Runtime_LoadIC_Miss(int, unsigned long*, v8::internal::Isolate*)",93957337667712,93957337669077],["v8::internal::Stats_Runtime_KeyedLoadIC_Miss(int, unsigned long*, v8::internal::Isolate*)",93957337676400,93957337677199],["v8::internal::Stats_Runtime_StoreGlobalIC_Slow(int, unsigned long*, v8::internal::Isolate*)",93957337682096,93957337683460],["v8::internal::Stats_Runtime_StoreInArrayLiteralIC_Slow(int, unsigned long*, v8::internal::Isolate*)",93957337687600,93957337688287],["v8::internal::Stats_Runtime_LoadPropertyWithInterceptor(int, unsigned long*, v8::internal::Isolate*)",93957337696128,93957337697915],["v8::internal::Stats_Runtime_HasElementWithInterceptor(int, unsigned long*, v8::internal::Isolate*)",93957337704928,93957337706284],["v8::internal::PropertyCallbackArguments::BasicCallIndexedGetterCallback(void (*)(unsigned int, v8::PropertyCallbackInfo<v8::Value> const&), unsigned int, v8::internal::Handle<v8::internal::Object>)",93957337708960,93957337709575],["v8::internal::SourceCodeCache::Add(v8::internal::Isolate*, v8::internal::Vector<char const>, v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957337711296,93957337711896],["v8::internal::Genesis::CreateEmptyFunction()",93957337713696,93957337714345],["v8::internal::Genesis::AddRestrictedFunctionProperties(v8::internal::Handle<v8::internal::JSFunction>)",93957337717104,93957337717520],["v8::internal::(anonymous namespace)::InstallFunctionAtSymbol(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Symbol>, char const*, v8::internal::Builtins::Name, int, bool, v8::internal::PropertyAttributes)",93957337721584,93957337721713],["v8::internal::Genesis::CreateAsyncIteratorMaps(v8::internal::Handle<v8::internal::JSFunction>)",93957337722416,93957337724629],["v8::internal::Genesis::CreateRoots()",93957337727072,93957337727330],["v8::internal::Genesis::HookUpGlobalProxy(v8::internal::Handle<v8::internal::JSGlobalProxy>)",93957337730144,93957337730493],["v8::internal::Genesis::InitializeGlobal(v8::internal::Handle<v8::internal::JSGlobalObject>, v8::internal::Handle<v8::internal::JSFunction>)",93957337734368,93957337787902],["v8::internal::(anonymous namespace)::InstallConstructor(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, char const*, v8::internal::InstanceType, int, int, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Builtins::Name, v8::internal::InstanceType)",93957337788560,93957337788702],["v8::internal::(anonymous namespace)::InstallToStringTag(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::String>)",93957337788992,93957337789018],["v8::internal::InstallError(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::String>, int, v8::internal::Builtins::Name, int, int)",93957337789264,93957337790894],["v8::internal::Genesis::InitializeGlobal_harmony_atomics()",93957337792880,93957337793307],["v8::internal::Genesis::InitializeGlobal_harmony_weak_refs_with_cleanup_some()",93957337795968,93957337796413],["v8::internal::Genesis::InitializeCallSiteBuiltins()",93957337801856,93957337803190],["v8::internal::Genesis::InstallExtrasBindings()",93957337809472,93957337809805],["v8::internal::Genesis::InstallExtension(v8::internal::Isolate*, v8::RegisteredExtension*, v8::internal::Genesis::ExtensionStates*)",93957337811440,93957337812074],["_ZN2v88internal11StringShape33DispatchToSpecificTypeWithoutCastIZNS1_22DispatchToSpecificTypeIZNKS0_6String13IsEqualToImplILNS4_12EqualityTypeE0EcEEbNS0_6VectorIKT0_EERKNS0_31SharedStringAccessGuardIfNeededEE19IsEqualToDispatcherbJPKcRmRNS0_22CombinationAssertScopeIJNS0_29PerThreadAssertScopeDebugOnlyILNS0_19PerThreadAssertTypeE0ELb0EEENSJ_ILSK_1ELb0EEEEEESD_EEES8_S4_DpOT1_E17CastingDispatcherbJRS4_SG_SH_SO_SD_EEES8_SR_",93957337814688,93957337815070],["v8::internal::InitializeICU(char const*)",93957337815632,93957337815880],["v8::internal::IsolateAllocator::InitReservation()",93957337815984,93957337816993],["v8::internal::IsolateAllocator::~IsolateAllocator()",93957337817392,93957337817461],["v8::internal::(anonymous namespace)::LoadFromFile(char const*)",93957337817536,93957337817800],["v8::internal::(anonymous namespace)::FreeStartupData()",93957337817824,93957337817868],["v8::internal::V8::TearDown()",93957337818000,93957337818030],["v8::internal::V8::InitializePlatform(v8::Platform*)",93957337819072,93957337819160],["v8::internal::V8::GetCurrentPlatform()",93957337819232,93957337819245],["void std::__1::__function::__policy_invoker<void ()>::__call_impl<std::__1::__function::__default_alloc_func<void (*)(), void ()> >(std::__1::__function::__policy_storage const*)",93957337819392,93957337819399],["v8::internal::Handle<v8::internal::BytecodeArray> v8::internal::interpreter::BytecodeArrayBuilder::ToBytecodeArray<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*)",93957337819536,93957337819652],["v8::internal::Handle<v8::internal::ByteArray> v8::internal::interpreter::BytecodeArrayBuilder::ToSourcePositionTable<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*)",93957337819696,93957337819713],["v8::internal::interpreter::BytecodeArrayBuilder::Parameter(int) const",93957337820096,93957337820117],["enumSameValue(void const*, unsigned int)",93957337820160,93957337820168],["v8::internal::interpreter::BytecodeArrayBuilder::BinaryOperationSmiLiteral(v8::internal::Token::Value, v8::internal::Smi, int)",93957337823632,93957337826203],["v8::internal::interpreter::BytecodeArrayBuilder::LogicalNot(v8::internal::interpreter::BytecodeArrayBuilder::ToBooleanMode)",93957337827200,93957337827595],["v8::internal::interpreter::BytecodeArrayBuilder::GetSuperConstructor(v8::internal::interpreter::Register)",93957337827840,93957337828205],["v8::internal::interpreter::BytecodeArrayBuilder::CompareReference(v8::internal::interpreter::Register)",93957337830576,93957337830939],["v8::internal::interpreter::BytecodeArrayBuilder::CompareUndefined()",93957337831200,93957337831454],["v8::internal::interpreter::BytecodeArrayBuilder::CompareNil(v8::internal::Token::Value, v8::internal::interpreter::BytecodeArrayBuilder::NilValue)",93957337831712,93957337831761],["v8::internal::interpreter::BytecodeArrayBuilder::LoadConstantPoolEntry(unsigned long)",93957337832064,93957337832342],["v8::internal::interpreter::BytecodeArrayBuilder::LoadLiteral(double)",93957337832816,93957337833188],["v8::internal::interpreter::BytecodeArrayBuilder::LoadLiteral(v8::internal::Scope const*)",93957337833488,93957337833775],["v8::internal::interpreter::BytecodeArrayBuilder::LoadUndefined()",93957337834064,93957337834293],["v8::internal::interpreter::BytecodeArrayBuilder::LoadTheHole()",93957337834544,93957337834773],["v8::internal::interpreter::BytecodeArrayBuilder::LoadFalse()",93957337835024,93957337835253],["v8::internal::interpreter::BytecodeArrayBuilder::LoadAccumulatorWithRegister(v8::internal::interpreter::Register)",93957337835312,93957337835692],["v8::internal::interpreter::BytecodeArrayBuilder::MoveRegister(v8::internal::interpreter::Register, v8::internal::interpreter::Register)",93957337836016,93957337836469],["v8::internal::interpreter::BytecodeArrayBuilder::StoreGlobal(v8::internal::AstRawString const*, int)",93957337837104,93957337837431],["v8::internal::interpreter::BytecodeArrayBuilder::StoreContextSlot(v8::internal::interpreter::Register, int, int)",93957337838848,93957337839537],["v8::internal::interpreter::BytecodeArrayBuilder::LoadLookupContextSlot(v8::internal::AstRawString const*, v8::internal::TypeofMode, int, int)",93957337840032,93957337840695],["v8::internal::interpreter::BytecodeArrayBuilder::StoreLookupSlot(v8::internal::AstRawString const*, v8::internal::LanguageMode, v8::internal::LookupHoistingMode)",93957337841376,93957337841718],["v8::internal::interpreter::BytecodeArrayBuilder::LoadNamedPropertyFromSuper(v8::internal::interpreter::Register, v8::internal::AstRawString const*, int)",93957337842176,93957337842649],["v8::internal::interpreter::BytecodeArrayBuilder::LoadKeyedProperty(v8::internal::interpreter::Register, int)",93957337843056,93957337843481],["std::__1::__bit_iterator<std::__1::__bitset<2ul, 128ul>, false, 0> std::__1::__copy_unaligned<std::__1::__bitset<2ul, 128ul>, false>(std::__1::__bit_iterator<std::__1::__bitset<2ul, 128ul>, false, 0>, std::__1::__bit_iterator<std::__1::__bitset<2ul, 128ul>, false, 0>, std::__1::__bit_iterator<std::__1::__bitset<2ul, 128ul>, false, 0>)",93957339858544,93957339859145],["v8::internal::NativeRegExpMacroAssembler::LoadCurrentCharacterImpl(int, v8::internal::Label*, bool, int, int)",93957339876064,93957339876153],["v8::internal::RegExpParser::CreateNamedCaptureAtIndex(v8::internal::ZoneVector<unsigned short> const*, int)",93957339883936,93957339884392],["v8::internal::RegExpParser::GetPropertySequence(v8::internal::ZoneVector<char> const&)",93957339891664,93957339894365],["v8::internal::RegExpBuilder::AddUnicodeCharacter(unsigned int)",93957339897760,93957339897973],["v8::internal::RegExpParser::ScanForCaptures()",93957339903888,93957339905010],["v8::internal::RegExpParser::ParseClassCharacterEscape()",93957339906224,93957339907301],["v8::internal::RegExpBuilder::AddTrailSurrogate(unsigned short)",93957339908752,93957339909152],["v8::internal::RegExpBuilder::FlushTerms()",93957339909904,93957339910136],["std::__1::pair<std::__1::__tree_iterator<v8::internal::RegExpCapture*, std::__1::__tree_node<v8::internal::RegExpCapture*, void*>*, long>, bool> std::__1::__tree<v8::internal::RegExpCapture*, v8::internal::RegExpParser::RegExpCaptureNameLess, v8::internal::ZoneAllocator<v8::internal::RegExpCapture*> >::__emplace_unique_key_args<v8::internal::RegExpCapture*, v8::internal::RegExpCapture*&>(v8::internal::RegExpCapture* const&, v8::internal::RegExpCapture*&)",93957339910480,93957339910866],["void std::__1::__sort<v8::internal::(anonymous namespace)::RegExpCaptureIndexLess&, v8::internal::RegExpCapture**>(v8::internal::RegExpCapture**, v8::internal::RegExpCapture**, v8::internal::(anonymous namespace)::RegExpCaptureIndexLess&)",93957339911200,93957339912750],["bool std::__1::__insertion_sort_incomplete<v8::internal::(anonymous namespace)::RegExpCaptureIndexLess&, v8::internal::RegExpCapture**>(v8::internal::RegExpCapture**, v8::internal::RegExpCapture**, v8::internal::(anonymous namespace)::RegExpCaptureIndexLess&)",93957339913008,93957339913706],["v8::internal::RegExpStackScope::~RegExpStackScope()",93957339913776,93957339913873],["v8::internal::RegExpStack::~RegExpStack()",93957339913984,93957339914054],["v8::internal::RegExpUtils::GenericCaptureGetter(v8::internal::Isolate*, v8::internal::Handle<v8::internal::RegExpMatchInfo>, int, bool*)",93957339914336,93957339914589],["v8::internal::RegExpUtils::GetLastIndex(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>)",93957339914944,93957339915393],["v8::internal::Stats_Runtime_ThrowSpreadArgError(int, unsigned long*, v8::internal::Isolate*)",93957340112416,93957340112980],["v8::internal::Stats_Runtime_ThrowCalledNonCallable(int, unsigned long*, v8::internal::Isolate*)",93957340113136,93957340113673],["v8::internal::Stats_Runtime_ThrowConstructedNonConstructable(int, unsigned long*, v8::internal::Isolate*)",93957340113824,93957340114361],["v8::internal::Stats_Runtime_ThrowPatternAssignmentNonCoercible(int, unsigned long*, v8::internal::Isolate*)",93957340114512,93957340115038],["v8::internal::Stats_Runtime_ThrowConstructorReturnedNonObject(int, unsigned long*, v8::internal::Isolate*)",93957340115200,93957340115724],["v8::internal::Stats_Runtime_CreateListFromArrayLike(int, unsigned long*, v8::internal::Isolate*)",93957340115888,93957340116428],["v8::internal::Stats_Runtime_IncrementUseCounter(int, unsigned long*, v8::internal::Isolate*)",93957340116608,93957340117169],["v8::internal::Stats_Runtime_GetAndResetRuntimeCallStats(int, unsigned long*, v8::internal::Isolate*)",93957340118576,93957340120400],["v8::internal::Stats_Runtime_OrdinaryHasInstance(int, unsigned long*, v8::internal::Isolate*)",93957340120560,93957340121102],["v8::internal::Stats_Runtime_Typeof(int, unsigned long*, v8::internal::Isolate*)",93957340121248,93957340121772],["v8::internal::Stats_Runtime_AllowDynamicFunction(int, unsigned long*, v8::internal::Isolate*)",93957340122112,93957340122804],["v8::internal::Stats_Runtime_CreateAsyncFromSyncIterator(int, unsigned long*, v8::internal::Isolate*)",93957340123296,93957340124198],["v8::internal::Stats_Runtime_GetTemplateObject(int, unsigned long*, v8::internal::Isolate*)",93957340124656,93957340125468],["v8::internal::Stats_Runtime_ReportMessageFromMicrotask(int, unsigned long*, v8::internal::Isolate*)",93957340125664,93957340126231],["v8::internal::Stats_Runtime_GetInitializerFunction(int, unsigned long*, v8::internal::Isolate*)",93957340126672,93957340127510],["v8::internal::Stats_Runtime_DoubleToStringWithRadix(int, unsigned long*, v8::internal::Isolate*)",93957340127952,93957340128759],["v8::internal::Stats_Runtime_FormatList(int, unsigned long*, v8::internal::Isolate*)",93957340129056,93957340129730],["v8::internal::Stats_Runtime_FormatListToParts(int, unsigned long*, v8::internal::Isolate*)",93957340130032,93957340130706],["v8::internal::Stats_Runtime_StringToLowerCaseIntl(int, unsigned long*, v8::internal::Isolate*)",93957340130944,93957340131558],["v8::internal::Stats_Runtime_StringToUpperCaseIntl(int, unsigned long*, v8::internal::Isolate*)",93957340131792,93957340132406],["v8::internal::Stats_Runtime_CreateObjectLiteral(int, unsigned long*, v8::internal::Isolate*)",93957340133984,93957340135987],["v8::internal::Stats_Runtime_CreateObjectLiteralWithoutAllocationSite(int, unsigned long*, v8::internal::Isolate*)",93957340136368,93957340137142],["v8::internal::Stats_Runtime_CreateArrayLiteralWithoutAllocationSite(int, unsigned long*, v8::internal::Isolate*)",93957340137520,93957340138285],["v8::internal::Stats_Runtime_CreateArrayLiteral(int, unsigned long*, v8::internal::Isolate*)",93957340139888,93957340141899],["v8::internal::Stats_Runtime_CreateRegExpLiteral(int, unsigned long*, v8::internal::Isolate*)",93957340142992,93957340144361],["v8::internal::AllocationSiteUsageContext::EnterNewScope()",93957340144720,93957340144899],["v8::internal::(anonymous namespace)::CreateObjectLiteral(v8::internal::Isolate*, v8::internal::Handle<v8::internal::ObjectBoilerplateDescription>, int, v8::internal::AllocationType)",93957340146816,93957340148012],["v8::internal::(anonymous namespace)::JSObjectWalkVisitor<v8::internal::(anonymous namespace)::AllocationSiteCreationContext>::StructureWalk(v8::internal::Handle<v8::internal::JSObject>)",93957340148848,93957340151654],["v8::internal::(anonymous namespace)::JSObjectWalkVisitor<v8::internal::AllocationSiteUsageContext>::VisitElementOrProperty(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::JSObject>)",93957340154368,93957340154438],["v8::internal::Stats_Runtime_DynamicImportCall(int, unsigned long*, v8::internal::Isolate*)",93957340155136,93957340156187],["v8::internal::Stats_Runtime_GetModuleNamespace(int, unsigned long*, v8::internal::Isolate*)",93957340156480,93957340157142],["v8::internal::Stats_Runtime_GetImportMetaObject(int, unsigned long*, v8::internal::Isolate*)",93957340157408,93957340158010],["v8::internal::Stats_Runtime_StringToNumber(int, unsigned long*, v8::internal::Isolate*)",93957340158208,93957340158795],["v8::internal::Stats_Runtime_StringParseInt(int, unsigned long*, v8::internal::Isolate*)",93957340159600,93957340160801],["v8::internal::Stats_Runtime_StringParseFloat(int, unsigned long*, v8::internal::Isolate*)",93957340161216,93957340162007],["v8::internal::Stats_Runtime_NumberToStringSlow(int, unsigned long*, v8::internal::Isolate*)",93957340162208,93957340162796],["v8::internal::Stats_Runtime_MaxSmi(int, unsigned long*, v8::internal::Isolate*)",93957340162832,93957340163247],["v8::internal::Stats_Runtime_IsSmi(int, unsigned long*, v8::internal::Isolate*)",93957340163296,93957340163773],["v8::internal::Stats_Runtime_GetHoleNaNUpper(int, unsigned long*, v8::internal::Isolate*)",93957340163936,93957340164452],["v8::internal::Stats_Runtime_GetHoleNaNLower(int, unsigned long*, v8::internal::Isolate*)",93957340164624,93957340165140],["v8::internal::Runtime::HasProperty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957340165616,93957340165817],["v8::internal::Runtime_ObjectKeys(int, unsigned long*, v8::internal::Isolate*)",93957340167216,93957340167452],["v8::internal::Runtime_ObjectGetOwnPropertyNames(int, unsigned long*, v8::internal::Isolate*)",93957340168096,93957340168332],["v8::internal::Runtime_ObjectGetOwnPropertyNamesTryFast(int, unsigned long*, v8::internal::Isolate*)",93957340168976,93957340169394],["v8::internal::Runtime_ObjectHasOwnProperty(int, unsigned long*, v8::internal::Isolate*)",93957340170192,93957340171278],["v8::internal::Runtime_HasOwnConstDataProperty(int, unsigned long*, v8::internal::Isolate*)",93957340172784,93957340173108],["v8::internal::Runtime_IsDictPropertyConstTrackingEnabled(int, unsigned long*, v8::internal::Isolate*)",93957340173840,93957340173872],["v8::internal::Runtime_AddDictionaryProperty(int, unsigned long*, v8::internal::Isolate*)",93957340174336,93957340174645],["v8_inspector::V8Debugger::asyncStepOutOfFunction(int, bool)",93957342534016,93957342534486],["v8_inspector::V8Debugger::ExceptionThrown(v8::Local<v8::Context>, v8::Local<v8::Value>, v8::Local<v8::Value>, bool, v8::debug::ExceptionType)",93957342537408,93957342537473],["v8_inspector::V8Debugger::asyncTaskStartedForStack(void*)",93957342539248,93957342539911],["v8_inspector::V8Debugger::currentExternalParent()",93957342540320,93957342540380],["v8_inspector::V8Debugger::internalProperties(v8::Local<v8::Context>, v8::Local<v8::Value>)",93957342542448,93957342542817],["v8_inspector::V8Debugger::createStackTrace(v8::Local<v8::StackTrace>)",93957342543296,93957342543420],["v8_inspector::V8Debugger::allAsyncTasksCanceled()",93957342543728,93957342544508],["v8_inspector::V8Debugger::debuggerIdFor(int)",93957342545040,93957342545490],["v8_inspector::(anonymous namespace)::PrimitiveValueMirror::buildPropertyPreview(v8::Local<v8::Context>, v8_inspector::String16 const&, std::__1::unique_ptr<v8_inspector::protocol::Runtime::PropertyPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::PropertyPreview> >*) const",93957342733264,93957342733645],["v8_crdtp::cbor::EncodeFalse()",93957342745360,93957342745368],["v8_crdtp::cbor::EnvelopeEncoder::EncodeStop(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*)",93957342749648,93957342749768],["v8_crdtp::cbor::CBORTokenizer::GetDouble() const",93957342750704,93957342750730],["v8_crdtp::cbor::(anonymous namespace)::CBOREncoder::~CBOREncoder()",93957342751584,93957342751622],["v8_crdtp::cbor::(anonymous namespace)::CBOREncoder::HandleArrayBegin()",93957342752352,93957342752606],["v8_crdtp::cbor::(anonymous namespace)::CBOREncoder::HandleDouble(double)",93957342752896,93957342752921],["v8_crdtp::cbor::(anonymous namespace)::CBOREncoder::HandleError(v8_crdtp::Status)",93957342753488,93957342753522],["v8_crdtp::cbor::(anonymous namespace)::ParseMap(int, v8_crdtp::cbor::CBORTokenizer*, v8_crdtp::ParserHandler*)",93957342754304,93957342754575],["void std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >::__push_back_slow_path<unsigned char>(unsigned char&&)",93957342754768,93957342754982],["v8_crdtp::DispatchResponse::ParseError(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)",93957342755024,93957342755061],["v8_crdtp::DispatchResponse::InternalError()",93957342755120,93957342755186],["v8_crdtp::Dispatchable::Dispatchable(v8_crdtp::span<unsigned char>)",93957342755248,93957342755751],["icu_68::number::impl::DecimalQuantity::isZeroish() const",93957342756208,93957342756221],["v8_crdtp::Dispatchable::MaybeParseParams(v8_crdtp::cbor::CBORTokenizer*)",93957342756368,93957342756499],["v8_crdtp::CreateErrorNotification(v8_crdtp::DispatchResponse)",93957342757168,93957342757262],["v8::internal::compiler::InstructionSelector::EmitWithContinuation(unsigned int, v8::internal::compiler::InstructionOperand, v8::internal::compiler::InstructionOperand, v8::internal::compiler::FlagsContinuation*)",93957342920960,93957342921013],["v8::internal::compiler::InstructionSelector::MarkAsFloat64(v8::internal::compiler::Node*)",93957342958256,93957342958340],["v8::internal::compiler::InstructionSelector::VisitBitcastWordToTagged(v8::internal::compiler::Node*)",93957342960832,93957342961151],["v8::internal::compiler::CallBuffer::CallBuffer(v8::internal::Zone*, v8::internal::compiler::CallDescriptor const*, v8::internal::compiler::FrameStateDescriptor*)",93957342963840,93957342965348],["_ZNSt3__16vectorIN2v88internal8compiler18InstructionOperandENS2_13ZoneAllocatorIS4_EEE6insertINS_11__wrap_iterIPS4_EEEENS_9enable_ifIXaasr27__is_cpp17_forward_iteratorIT_EE5valuesr16is_constructibleIS4_NS_15iterator_traitsISD_E9referenceEEE5valueESB_E4typeENS9_IPKS4_EESD_SD_",93957342967392,93957342970922],["void std::__1::__inplace_merge<v8::internal::compiler::SwitchInfo::CasesSortedByValue() const::{lambda(v8::internal::compiler::CaseInfo, v8::internal::compiler::CaseInfo)#1}&, std::__1::__wrap_iter<v8::internal::compiler::CaseInfo*> >(std::__1::__wrap_iter<v8::internal::compiler::CaseInfo*>, std::__1::__wrap_iter<v8::internal::compiler::CaseInfo*>, std::__1::__wrap_iter<v8::internal::compiler::CaseInfo*>, v8::internal::compiler::SwitchInfo::CasesSortedByValue() const::{lambda(v8::internal::compiler::CaseInfo, v8::internal::compiler::CaseInfo)#1}&, std::__1::iterator_traits<std::__1::__wrap_iter<v8::internal::compiler::CaseInfo*> >::difference_type, std::__1::iterator_traits<std::__1::__wrap_iter<v8::internal::compiler::CaseInfo*> >, std::__1::iterator_traits::value_type*, long)",93957342972672,93957342973666],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::compiler::InstructionSelector::FrameStateInput, v8::internal::compiler::InstructionSelector::CachedStateValues*>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::compiler::InstructionSelector::FrameStateInput, v8::internal::compiler::InstructionSelector::CachedStateValues*>, std::__1::__unordered_map_hasher<v8::internal::compiler::InstructionSelector::FrameStateInput, std::__1::__hash_value_type<v8::internal::compiler::InstructionSelector::FrameStateInput, v8::internal::compiler::InstructionSelector::CachedStateValues*>, v8::internal::compiler::InstructionSelector::FrameStateInput::Hash, v8::internal::compiler::InstructionSelector::FrameStateInput::Equal, true>, std::__1::__unordered_map_equal<v8::internal::compiler::InstructionSelector::FrameStateInput, std::__1::__hash_value_type<v8::internal::compiler::InstructionSelector::FrameStateInput, v8::internal::compiler::InstructionSelector::CachedStateValues*>, v8::internal::compiler::InstructionSelector::FrameStateInput::Equal, v8::internal::compiler::InstructionSelector::FrameStateInput::Hash, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<v8::internal::compiler::InstructionSelector::FrameStateInput, v8::internal::compiler::InstructionSelector::CachedStateValues*> > >::__emplace_unique_key_args<v8::internal::compiler::InstructionSelector::FrameStateInput, v8::internal::compiler::InstructionSelector::FrameStateInput&, v8::internal::compiler::InstructionSelector::CachedStateValues*>(v8::internal::compiler::InstructionSelector::FrameStateInput const&, v8::internal::compiler::InstructionSelector::FrameStateInput&, v8::internal::compiler::InstructionSelector::CachedStateValues*&&)",93957342975264,93957342976271],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::InstructionOperand const&)",93957342977216,93957342978353],["v8::internal::compiler::Instruction::Instruction(unsigned int, unsigned long, v8::internal::compiler::InstructionOperand*, unsigned long, v8::internal::compiler::InstructionOperand*, unsigned long, v8::internal::compiler::InstructionOperand*)",93957342979584,93957342980945],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::ParallelMove const&)",93957342981392,93957342981594],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::ArchOpcode const&)",93957342982304,93957342988499],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::FlagsMode const&)",93957342988912,93957342989071],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Instruction const&)",93957342989552,93957342990152],["v8::internal::compiler::Constant::Constant(v8::internal::compiler::RelocatablePtrConstantInfo)",93957342990192,93957342990237],["v8::internal::compiler::PhiInstruction::PhiInstruction(v8::internal::Zone*, int, unsigned long)",93957342990544,93957342990726],["v8::internal::compiler::InstructionBlock::PredecessorIndexOf(v8::internal::compiler::RpoNumber) const",93957342990752,93957342990805],["v8::internal::compiler::LinearScanAllocator::PrintRangeRow(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::TopLevelLiveRange const*)",93957343090880,93957343093303],["v8::internal::compiler::ConstraintBuilder::MeetConstraintsBefore(int)",93957343101472,93957343103517],["v8::internal::compiler::BundleBuilder::BuildBundles()",93957343118608,93957343124796],["v8::internal::compiler::LinearScanAllocator::ChooseOneOfTwoPredecessorStates(v8::internal::compiler::InstructionBlock*, v8::internal::compiler::LifetimePosition)",93957343133872,93957343136050],["v8::internal::compiler::LinearScanAllocator::FindFreeRegistersForRange(v8::internal::compiler::LiveRange*, v8::internal::Vector<v8::internal::compiler::LifetimePosition>)",93957343146896,93957343147929],["v8::internal::compiler::TopLevelLiveRange::TransitionRangeToDeferredSpill(v8::internal::Zone*, int)",93957343153776,93957343154070],["std::__1::__hash_table<v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::JSObject>::hash, v8::internal::Handle<v8::internal::JSObject>::equal_to, v8::internal::ZoneAllocator<v8::internal::Handle<v8::internal::JSObject> > >::__node_insert_unique_prepare(unsigned long, v8::internal::Handle<v8::internal::JSObject>&)",93957343167408,93957343167948],["std::__1::vector<v8::internal::ZoneMultiset<v8::internal::compiler::LiveRange*, v8::internal::compiler::LinearScanAllocator::InactiveLiveRangeOrdering>, v8::internal::ZoneAllocator<v8::internal::ZoneMultiset<v8::internal::compiler::LiveRange*, v8::internal::compiler::LinearScanAllocator::InactiveLiveRangeOrdering> > >::vector(unsigned long, v8::internal::ZoneMultiset<v8::internal::compiler::LiveRange*, v8::internal::compiler::LinearScanAllocator::InactiveLiveRangeOrdering> const&, v8::internal::ZoneAllocator<v8::internal::ZoneMultiset<v8::internal::compiler::LiveRange*, v8::internal::compiler::LinearScanAllocator::InactiveLiveRangeOrdering> > const&)",93957343171584,93957343172611],["v8::internal::compiler::SpillPlacer::SpillPlacer(v8::internal::compiler::LiveRangeFinder*, v8::internal::compiler::TopTierRegisterAllocationData*, v8::internal::Zone*)",93957343174112,93957343174151],["v8::internal::compiler::SpillPlacer::GetOrCreateIndexForLatestVreg(int)",93957343175376,93957343175867],["v8::internal::compiler::BasicBlockInstrumentor::Instrument(v8::internal::OptimizedCompilationInfo*, v8::internal::compiler::Graph*, v8::internal::compiler::Schedule*, v8::internal::Isolate*)",93957343177440,93957343179155],["v8::internal::compiler::BranchElimination::Reduce(v8::internal::compiler::Node*)",93957343183024,93957343183124],["v8::internal::compiler::BranchElimination::ReduceIf(v8::internal::compiler::Node*, bool)",93957343184912,93957343185290],["v8::internal::compiler::BranchElimination::TakeConditionsFromFirstControl(v8::internal::compiler::Node*)",93957343186912,93957343187124],["v8::internal::compiler::BranchElimination::reducer_name() const",93957343188080,93957343188093],["v8::internal::compiler::BytecodeAnalysis::BytecodeAnalysis(v8::internal::Handle<v8::internal::BytecodeArray>, v8::internal::Zone*, v8::internal::BytecodeOffset, bool)",93957343188480,93957343188730],["v8::internal::compiler::LoopInfo::AddResumeTarget(v8::internal::compiler::ResumeJumpTarget const&)",93957343196160,93957343196471],["v8::internal::compiler::(anonymous namespace)::UpdateOutLiveness(v8::internal::interpreter::Bytecode, v8::internal::compiler::BytecodeLivenessState*, v8::internal::compiler::BytecodeLivenessState*, v8::internal::interpreter::BytecodeArrayIterator const&, v8::internal::Handle<v8::internal::BytecodeArray>, v8::internal::compiler::BytecodeLivenessMap const&)",93957343196848,93957343197873],["v8::internal::compiler::BytecodeAnalysis::PrintLivenessTo(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) const",93957343199472,93957343201431],["v8::internal::compiler::BytecodeAnalysis::GetLoopOffsetFor(int) const",93957343201520,93957343201642],["v8::internal::compiler::BytecodeAnalysis::GetInLivenessFor(int) const",93957343201728,93957343201759],["std::__1::pair<std::__1::__tree_iterator<std::__1::__value_type<int, v8::internal::compiler::LoopInfo>, std::__1::__tree_node<std::__1::__value_type<int, v8::internal::compiler::LoopInfo>, void*>*, long>, bool> std::__1::__tree<std::__1::__value_type<int, v8::internal::compiler::LoopInfo>, std::__1::__map_value_compare<int, std::__1::__value_type<int, v8::internal::compiler::LoopInfo>, std::__1::less<int>, true>, v8::internal::ZoneAllocator<std::__1::__value_type<int, v8::internal::compiler::LoopInfo> > >::__emplace_unique_key_args<int, std::__1::pair<int const, v8::internal::compiler::LoopInfo> >(int const&, std::__1::pair<int const, v8::internal::compiler::LoopInfo>&&)",93957343201792,93957343202128],["v8::internal::compiler::BytecodeGraphBuilder::Environment::LookupRegister(v8::internal::interpreter::Register) const",93957343203952,93957343204168],["v8::internal::compiler::BytecodeGraphBuilder::Environment::BindRegister(v8::internal::interpreter::Register, v8::internal::compiler::Node*, v8::internal::compiler::BytecodeGraphBuilder::Environment::FrameStateAttachmentMode)",93957343204352,93957343204587],["v8::internal::compiler::BytecodeGraphBuilder::Environment::Merge(v8::internal::compiler::BytecodeGraphBuilder::Environment*, v8::internal::compiler::BytecodeLivenessState const*)",93957343204944,93957343205505],["v8::internal::compiler::BytecodeGraphBuilder::MergeEffect(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343205712,93957343206265],["v8::internal::compiler::BytecodeGraphBuilder::Environment::PrepareForLoop(v8::internal::compiler::BytecodeLoopAssignments const&, v8::internal::compiler::BytecodeLivenessState const*)",93957343206848,93957343208815],["v8::internal::compiler::BytecodeGraphBuilder::Environment::PrepareForLoopExit(v8::internal::compiler::Node*, v8::internal::compiler::BytecodeLoopAssignments const&, v8::internal::compiler::BytecodeLivenessState const*)",93957343209088,93957343209945],["v8::internal::compiler::BytecodeGraphBuilder::BytecodeGraphBuilder(v8::internal::compiler::JSHeapBroker*, v8::internal::Zone*, v8::internal::compiler::NativeContextRef const&, v8::internal::compiler::SharedFunctionInfoRef const&, v8::internal::compiler::FeedbackCellRef const&, v8::internal::BytecodeOffset, v8::internal::compiler::JSGraph*, v8::internal::compiler::CallFrequency const&, v8::internal::compiler::SourcePositionTable*, int, v8::internal::CodeKind, v8::base::Flags<v8::internal::compiler::BytecodeGraphBuilderFlag, int>, v8::internal::TickCounter*, v8::internal::compiler::ObserveNodeInfo const&)",93957343210640,93957343211520],["v8::internal::compiler::BytecodeGraphBuilder::BuildLoadFeedbackCell(int)",93957343211728,93957343211985],["v8::internal::compiler::BytecodeGraphBuilder::MaybeBuildTierUpCheck()",93957343212240,93957343212673],["v8::internal::compiler::BytecodeGraphBuilder::CreateGraph()",93957343212992,93957343213640],["v8::internal::compiler::MapInference::HaveMaps() const",93957344573296,93957344573313],["v8::internal::compiler::BranchMatcher::BranchMatcher(v8::internal::compiler::Node*)",93957344588880,93957344588997],["v8::internal::compiler::NodeProperties::MergeControlToEnd(v8::internal::compiler::Graph*, v8::internal::compiler::CommonOperatorBuilder*, v8::internal::compiler::Node*)",93957344594432,93957344594514],["v8::internal::compiler::NodeProperties::Equals(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957344601200,93957344601442],["v8::internal::compiler::Node::UseCount() const",93957344605392,93957344605421],["v8::internal::compiler::Node::Uses::empty() const",93957344606816,93957344606833],["v8::internal::compiler::OperationTyper::SubtractRanger(double, double, double, double)",93957344608608,93957344608964],["v8::internal::compiler::OperationTyper::NumberCeil(v8::internal::compiler::Type)",93957344610416,93957344610520],["v8::internal::compiler::OperationTyper::NumberToInt32(v8::internal::compiler::Type)",93957344611248,93957344611434],["v8::internal::compiler::OperationTyper::NumberSilenceNaN(v8::internal::compiler::Type)",93957344611824,93957344611871],["v8::internal::compiler::OperationTyper::SpeculativeSafeIntegerAdd(v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344613056,93957344613178],["v8::internal::compiler::OperationTyper::NumberMultiply(v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344613536,93957344614406],["v8::internal::compiler::OperationTyper::NumberBitwiseAnd(v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344615984,93957344616262],["v8::internal::compiler::OperationTyper::NumberShiftRightLogical(v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344617056,93957344617287],["v8::internal::compiler::OperationTyper::SpeculativeToNumber(v8::internal::compiler::Type)",93957344618432,93957344618477],["v8::internal::compiler::OperationTyper::SpeculativeNumberBitwiseOr(v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344618816,93957344618916],["v8::internal::compiler::OperationTyper::SpeculativeNumberShiftLeft(v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344619152,93957344619252],["v8::internal::compiler::OperationTyper::SpeculativeNumberShiftRightLogical(v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344619376,93957344619476],["v8::internal::compiler::OperationTyper::BigIntNegate(v8::internal::compiler::Type)",93957344619520,93957344619543],["v8::internal::compiler::(anonymous namespace)::JSType(v8::internal::compiler::Type)",93957344620064,93957344620433],["v8::internal::compiler::OperationTyper::StrictEqual(v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344620464,93957344620936],["v8::internal::compiler::OperationTyper::CheckFloat64Hole(v8::internal::compiler::Type)",93957344621168,93957344621252],["v8::internal::compiler::OperationTyper::TypeTypeGuard(v8::internal::compiler::Operator const*, v8::internal::compiler::Type)",93957344621296,93957344621335],["v8::internal::compiler::OperationTyper::ToBoolean(v8::internal::compiler::Type)",93957344621424,93957344621756],["v8::internal::compiler::OperatorProperties::NeedsExactContext(v8::internal::compiler::Operator const*)",93957344621792,93957344621877],["v8::internal::compiler::OperatorProperties::GetTotalInputCount(v8::internal::compiler::Operator const*)",93957344621952,93957344622016],["v8::internal::compiler::Operator::Operator(unsigned short, v8::base::Flags<v8::internal::compiler::Operator::Property, unsigned char>, char const*, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long)",93957344622064,93957344622191],["v8::internal::compiler::Operator::PrintToImpl(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344622240,93957344622280],["v8::internal::compiler::OsrHelper::OsrHelper(v8::internal::OptimizedCompilationInfo*)",93957344623136,93957344623205],["v8::internal::compiler::PipelineStatistics::CommonStats::Begin(v8::internal::compiler::PipelineStatistics*)",93957344623248,93957344623389],["v8::internal::compiler::PipelineStatistics::PipelineStatistics(v8::internal::OptimizedCompilationInfo*, v8::internal::CompilationStatistics*, v8::internal::compiler::ZoneStats*)",93957344623632,93957344623773],["v8::internal::compiler::PipelineStatistics::EndPhaseKind()",93957344624048,93957344624358],["std::__1::deque<v8::internal::compiler::HandlerRangeMatcher::Range, std::__1::allocator<v8::internal::compiler::HandlerRangeMatcher::Range> >::__add_back_capacity()",93957344877312,93957344877733],["void v8::internal::compiler::RepresentationSelector::VisitJSWasmCall<(v8::internal::compiler::Phase)1>(v8::internal::compiler::Node*, v8::internal::compiler::SimplifiedLowering*)",93957344973104,93957344973796],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::NumberOperationHint)",93957345039984,93957345040116],["v8::internal::compiler::SimplifiedOperatorBuilder::StringToUpperCaseIntl()",93957345041008,93957345041022],["v8::internal::compiler::SimplifiedOperatorBuilder::TruncateTaggedToWord32()",93957345041392,93957345041406],["v8::internal::compiler::SimplifiedOperatorBuilder::ObjectIsSymbol()",93957345041648,93957345041662],["v8::internal::compiler::SimplifiedOperatorBuilder::StringLessThanOrEqual()",93957345041904,93957345041918],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckReceiver()",93957345042160,93957345042174],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckNumber(v8::internal::compiler::FeedbackSource const&)",93957345042352,93957345042552],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckedTaggedSignedToInt32(v8::internal::compiler::FeedbackSource const&)",93957345044016,93957345044216],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckedUint64Bounds(v8::internal::compiler::FeedbackSource const&, v8::base::Flags<v8::internal::compiler::CheckBoundsFlag, int>)",93957345045680,93957345045873],["v8::internal::compiler::SimplifiedOperatorBuilder::ChangeFloat64ToTagged(v8::internal::compiler::CheckForMinusZeroMode)",93957345047776,93957345047825],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckMaps(v8::base::Flags<v8::internal::compiler::CheckMapsFlag, int>, v8::internal::ZoneHandleSet<v8::internal::Map>, v8::internal::compiler::FeedbackSource const&)",93957345049728,93957345049928],["v8::internal::compiler::SimplifiedOperatorBuilder::SpeculativeBigIntNegate(v8::internal::compiler::BigIntOperationHint)",93957345051024,93957345051149],["v8::internal::compiler::CheckParametersOf(v8::internal::compiler::Operator const*)",93957345052368,93957345052433],["v8::internal::compiler::SimplifiedOperatorBuilder::SpeculativeNumberAdd(v8::internal::compiler::NumberOperationHint)",93957345053392,93957345053474],["v8::internal::compiler::SimplifiedOperatorBuilder::SpeculativeNumberBitwiseOr(v8::internal::compiler::NumberOperationHint)",93957345053968,93957345054050],["v8::internal::compiler::SimplifiedOperatorBuilder::SpeculativeNumberShiftRightLogical(v8::internal::compiler::NumberOperationHint)",93957345054352,93957345054434],["v8::internal::compiler::SimplifiedOperatorBuilder::SpeculativeNumberLessThanOrEqual(v8::internal::compiler::NumberOperationHint)",93957345054736,93957345054818],["v8::internal::compiler::SimplifiedOperatorBuilder::LoadElement(v8::internal::compiler::ElementAccess const&)",93957345055408,93957345055569],["v8::internal::compiler::SimplifiedOperatorBuilder::StoreTypedElement(v8::internal::ExternalArrayType const&)",93957345056048,93957345056176],["v8::internal::compiler::SimplifiedOperatorBuilder::LoadMessage()",93957345056592,93957345056701],["v8::internal::compiler::SimplifiedOperatorBuilder::StoreSignedSmallElement()",93957345056976,93957345057085],["v8::internal::compiler::FastApiCallNode::FastCallExtraInputCount() const",93957345057632,93957345057681],["v8::internal::compiler::Operator1<v8::internal::compiler::CheckBoundsParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CheckBoundsParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CheckBoundsParameters> >::HashCode() const",93957345083760,93957345083871],["v8::internal::compiler::Operator1<v8::internal::compiler::CheckIfParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CheckIfParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CheckIfParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957345084144,93957345084246],["v8::internal::compiler::Operator1<v8::internal::compiler::CheckTaggedInputParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CheckTaggedInputParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CheckTaggedInputParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957345084640,93957345084710],["v8::internal::compiler::Operator1<v8::internal::compiler::NumberOperationHint, v8::internal::compiler::OpEqualTo<v8::internal::compiler::NumberOperationHint>, v8::internal::compiler::OpHash<v8::internal::compiler::NumberOperationHint> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957345085184,93957345085254],["v8::internal::compiler::Operator1<v8::internal::compiler::CheckMapsParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CheckMapsParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CheckMapsParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957345085568,93957345085731],["v8::internal::compiler::Operator1<v8::internal::ZoneHandleSet<v8::internal::Map>, v8::internal::compiler::OpEqualTo<v8::internal::ZoneHandleSet<v8::internal::Map> >, v8::internal::compiler::OpHash<v8::internal::ZoneHandleSet<v8::internal::Map> > >::Equals(v8::internal::compiler::Operator const*) const",93957345085936,93957345085968],["v8::internal::compiler::Operator1<v8::internal::compiler::ElementsTransition, v8::internal::compiler::OpEqualTo<v8::internal::compiler::ElementsTransition>, v8::internal::compiler::OpHash<v8::internal::compiler::ElementsTransition> >::HashCode() const",93957345086224,93957345086282],["v8::internal::compiler::Operator1<v8::internal::compiler::NewArgumentsElementsParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::NewArgumentsElementsParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::NewArgumentsElementsParameters> >::HashCode() const",93957345086608,93957345086668],["v8::internal::compiler::Operator1<v8::internal::compiler::AllocateParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::AllocateParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::AllocateParameters> >::HashCode() const",93957345086800,93957345086861],["v8::internal::compiler::Operator1<v8::internal::compiler::FieldAccess, v8::internal::compiler::OpEqualTo<v8::internal::compiler::FieldAccess>, v8::internal::compiler::OpHash<v8::internal::compiler::FieldAccess> >::Equals(v8::internal::compiler::Operator const*) const",93957345086944,93957345087026],["v8::internal::compiler::Operator1<v8::internal::compiler::ElementAccess, v8::internal::compiler::OpEqualTo<v8::internal::compiler::ElementAccess>, v8::internal::compiler::OpHash<v8::internal::compiler::ElementAccess> >::Equals(v8::internal::compiler::Operator const*) const",93957345087168,93957345087222],["v8::internal::compiler::Operator1<v8::internal::compiler::ElementAccess, v8::internal::compiler::OpEqualTo<v8::internal::compiler::ElementAccess>, v8::internal::compiler::OpHash<v8::internal::compiler::ElementAccess> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957345087344,93957345087416],["v8::internal::compiler::Operator1<v8::internal::compiler::ObjectAccess, v8::internal::compiler::OpEqualTo<v8::internal::compiler::ObjectAccess>, v8::internal::compiler::OpHash<v8::internal::compiler::ObjectAccess> >::HashCode() const",93957345087472,93957345087539],["v8::internal::compiler::Operator1<v8::internal::compiler::(anonymous namespace)::TransitionAndStoreElementParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::(anonymous namespace)::TransitionAndStoreElementParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::(anonymous namespace)::TransitionAndStoreElementParameters> >::Equals(v8::internal::compiler::Operator const*) const",93957345087632,93957345087674],["v8::internal::compiler::Operator1<v8::internal::compiler::(anonymous namespace)::TransitionAndStoreElementParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::(anonymous namespace)::TransitionAndStoreElementParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::(anonymous namespace)::TransitionAndStoreElementParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957345087728,93957345087880],["v8::internal::compiler::Operator1<v8::internal::compiler::(anonymous namespace)::TransitionAndStoreNonNumberElementParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::(anonymous namespace)::TransitionAndStoreNonNumberElementParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::(anonymous namespace)::TransitionAndStoreNonNumberElementParameters> >::HashCode() const",93957345088000,93957345088073],["v8::internal::compiler::Operator1<v8::internal::compiler::FastApiCallParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::FastApiCallParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::FastApiCallParameters> >::Equals(v8::internal::compiler::Operator const*) const",93957345088208,93957345088281],["v8::internal::compiler::Operator1<v8::internal::compiler::FastApiCallParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::FastApiCallParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::FastApiCallParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957345088448,93957345088580],["v8::internal::compiler::StateValuesCache::AreKeysEqual(void*, void*)",93957345088832,93957345089013],["v8::internal::compiler::StateValuesCache::GetValuesNodeFromCache(v8::internal::compiler::Node**, unsigned long, v8::internal::compiler::SparseInputMask)",93957345089376,93957345089763],["v8::internal::compiler::StateValuesCache::GetNodeForValues(v8::internal::compiler::Node**, unsigned long, v8::internal::BitVector const*, int)",93957345090608,93957345090758],["v8::internal::compiler::StateValuesAccess::iterator::EnsureValid()",93957345090912,93957345091245],["v8::internal::compiler::StateValuesAccess::iterator::node()",93957345091360,93957345091416],["v8::internal::compiler::StateValuesAccess::iterator::operator*()",93957345091472,93957345091592],["std::__1::vector<std::__1::array<v8::internal::compiler::Node*, 8ul>, v8::internal::ZoneAllocator<std::__1::array<v8::internal::compiler::Node*, 8ul> > >::__append(unsigned long)",93957345091824,93957345092172],["v8::internal::compiler::(anonymous namespace)::RedundantStoreFinder::Visit(v8::internal::compiler::Node*)",93957345093760,93957345097760],["v8::internal::compiler::PersistentMap<v8::internal::compiler::(anonymous namespace)::UnobservableStore, bool, v8::base::hash<v8::internal::compiler::(anonymous namespace)::UnobservableStore> >::double_iterator::operator++()",93957345099408,93957345100025],["v8::internal::compiler::PersistentMap<v8::internal::compiler::(anonymous namespace)::UnobservableStore, bool, v8::base::hash<v8::internal::compiler::(anonymous namespace)::UnobservableStore> >::iterator::operator++()",93957345100304,93957345100750],["v8::internal::compiler::PersistentMap<v8::internal::compiler::(anonymous namespace)::UnobservableStore, bool, v8::base::hash<v8::internal::compiler::(anonymous namespace)::UnobservableStore> >::Get(v8::internal::compiler::(anonymous namespace)::UnobservableStore const&) const",93957345101040,93957345101341],["v8::internal::compiler::TypeCache::TypeCache()",93957345101424,93957345103071],["v8::internal::compiler::TypeNarrowingReducer::Reduce(v8::internal::compiler::Node*)",93957345103120,93957345106212],["v8::internal::compiler::TypedOptimization::TypedOptimization(v8::internal::compiler::AdvancedReducer::Editor*, v8::internal::compiler::CompilationDependencies*, v8::internal::compiler::JSGraph*, v8::internal::compiler::JSHeapBroker*)",93957345106240,93957345106357],["v8::internal::compiler::TypedOptimization::ReduceConvertReceiver(v8::internal::compiler::Node*)",93957345107424,93957345107673],["v8::internal::compiler::TypedOptimization::ReduceCheckBounds(v8::internal::compiler::Node*)",93957345108416,93957345108613],["v8::internal::compiler::TypedOptimization::ReduceCheckEqualsSymbol(v8::internal::compiler::Node*)",93957345109088,93957345109339],["v8::internal::compiler::TypedOptimization::ReduceNumberFloor(v8::internal::compiler::Node*)",93957345109600,93957345110020],["v8::internal::compiler::TypedOptimization::ReduceReferenceEqual(v8::internal::compiler::Node*)",93957345110400,93957345110585],["v8::internal::compiler::TypedOptimization::ReduceStringLength(v8::internal::compiler::Node*)",93957345111408,93957345111851],["v8::internal::compiler::TypedOptimization::ReduceSelect(v8::internal::compiler::Node*)",93957345112720,93957345113261],["v8::internal::compiler::TypedOptimization::ReduceToBoolean(v8::internal::compiler::Node*)",93957345113760,93957345114420],["std::__1::basic_ostream<char, std::__1::char_traits<char> >::write(char const*, long)",93957346642528,93957346642777],["std::__1::basic_iostream<char, std::__1::char_traits<char> >::~basic_iostream()",93957346642928,93957346642942],["std::__1::basic_iostream<char, std::__1::char_traits<char> >::~basic_iostream()",93957346642976,93957346643008],["virtual thunk to std::__1::basic_iostream<char, std::__1::char_traits<char> >::~basic_iostream()",93957346643056,93957346643099],["std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::str(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)",93957346643968,93957346644339],["std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::pbackfail(int)",93957346644432,93957346644524],["std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::seekoff(long long, std::__1::ios_base::seekdir, unsigned int)",93957346644864,93957346645099],["std::__1::basic_ofstream<char, std::__1::char_traits<char> >::open(char const*, unsigned int)",93957346645360,93957346645415],["setenv",139871563514160,139871563514249],["abs",139871563517376,139871563517384],["mblen",139871563517472,139871563517617],["wctomb",139871563517952,139871563518057],["setstate",139871563518432,139871563518618],["srandom_r",139871563518816,139871563519118],["setstate_r",139871563519504,139871563519724],["rand",139871563519888,139871563519902],["_IO_seekoff",139871563745536,139871563745773],["getwchar_unlocked",139871563749056,139871563749109],["putwchar",139871563751568,139871563751916],["vwprintf",139871563752768,139871563752791],["vwscanf",139871563753408,139871563753431],["_IO_least_wmarker",139871563754896,139871563754951],["_IO_wdefault_pbackfail",139871563755200,139871563755626],["__woverflow",139871563755872,139871563755989],["_IO_wdoallocbuf",139871563756416,139871563756563],["_IO_switch_to_wget_mode",139871563756704,139871563756818],["__wuflow",139871563756944,139871563757298],["_IO_wdefault_xsgetn",139871563757664,139871563757895],["_IO_sungetwc",139871563758032,139871563758151],["_IO_init_wmarker",139871563758224,139871563758324],["_IO_seekwmark",139871563758416,139871563758582],["_dl_addr",139871564534384,139871564535227],["__libc_dlclose",139871564536464,139871564536509],["_dl_signal_exception",139871564538160,139871564538237],["_dl_catch_exception",139871564538336,139871564538604],["f32addf64x",139871565704144,139871565704538],["f32mulf32x",139871565709712,139871565710101],["f64xmulf128",139871565712176,139871565712716],["dsubl",139871565713712,139871565714120],["f64xsubf128",139871565715360,139871565715948],["free_stacks.cold",139871566579072,139871566579077],["__nptl_setxid.cold",139871566579086,139871566579095],["deregister_tm_clones",139871566579120,139871566579168],["__pthread_init_static_tls",139871566583856,139871566584172],["start_thread",139871566585296,139871566586228],["cleanup",139871566590544,139871566590568],["pthread_spin_destroy",139871566616752,139871566616755],["pthread_spin_trylock",139871566616800,139871566616820],["__pthread_barrier_init",139871566616848,139871566616910],["__pthread_barrier_wait",139871566617040,139871566617518],["pthread_barrierattr_destroy",139871566617536,139871566617539],["pthread_barrierattr_setpshared",139871566617568,139871566617590],["__pthread_key_delete",139871566617680,139871566617734],["__GI___pthread_setspecific",139871566617888,139871566618131],["__pthread_kill",139871566618384,139871566618477],["__pthread_cancel",139871566618688,139871566618894],["__GI___pthread_setcancelstate",139871566618960,139871566619107],["__GI___pthread_once",139871566619616,139871566619637],["pthread_getcpuclockid",139871566619664,139871566619702],["__shm_directory_freeres",139871566620256,139871566620289],["__new_sem_destroy",139871566620368,139871566620371],["sem_open",139871566621104,139871566622357],["__new_sem_wait_slow.constprop.0",139871566623200,139871566623413],["__sem_wait_cleanup",139871566623536,139871566623551],["__new_sem_wait_slow.constprop.0",139871566623760,139871566623981],["__sem_wait_cleanup",139871566624096,139871566624111],["__new_sem_wait_slow",139871566624336,139871566624565],["unwind_cleanup",139871566625760,139871566625776],["__lll_clocklock_wait",139871566626368,139871566626604],["__libc_msgsnd",139871566629776,139871566629939],["__restore_rt",139871566631232,139871566631248],["elision_init",139871566638400,139871566638573],["__lll_lock_elision",139871566638624,139871566638805],["std::__1::unique_ptr<v8::DelayedTasksPlatform, std::__1::default_delete<v8::DelayedTasksPlatform> >::~unique_ptr()",93957335210912,93957335211086],["v8::DelayedTasksPlatform::~DelayedTasksPlatform()",93957335211120,93957335211262],["v8::ProcessMessageTask::~ProcessMessageTask()",93957335307104,93957335307232],["v8::TerminateTask::~TerminateTask()",93957335307600,93957335307687],["non-virtual thunk to v8::TerminateTask::~TerminateTask()",93957335307824,93957335307912],["v8::Serializer::~Serializer()",93957335308016,93957335308044],["v8::internal::FactoryBase<v8::internal::Factory>::NewFixedArrayWithFiller(v8::internal::Handle<v8::internal::Map>, int, v8::internal::Handle<v8::internal::Oddball>, v8::internal::AllocationType)",93957336827936,93957336828220],["v8::internal::FactoryBase<v8::internal::Factory>::NewScript(v8::internal::Handle<v8::internal::PrimitiveHeapObject>)",93957336831024,93957336831059],["v8::internal::FactoryBase<v8::internal::Factory>::NewUncompiledDataWithPreparseData(v8::internal::Handle<v8::internal::String>, int, int, v8::internal::Handle<v8::internal::PreparseData>)",93957336832848,93957336832864],["v8::internal::FactoryBase<v8::internal::Factory>::InternalizeString(v8::internal::Vector<unsigned short const> const&, bool)",93957336833488,93957336833626],["v8::internal::FactoryBase<v8::internal::Factory>::NewTwoByteInternalizedString(v8::internal::Vector<unsigned short const> const&, unsigned int)",93957336833888,93957336834108],["v8::internal::FactoryBase<v8::internal::Factory>::NewRawOneByteString(int, v8::internal::AllocationType)",93957336834304,93957336834483],["v8::internal::FactoryBase<v8::internal::Factory>::NewConsString(v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String>, v8::internal::AllocationType)",93957336834688,93957336835794],["v8::internal::FactoryBase<v8::internal::Factory>::NewConsString(v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String>, int, bool, v8::internal::AllocationType)",93957336836064,93957336836503],["v8::internal::Factory::NewSharedFunctionInfoForBuiltin(v8::internal::MaybeHandle<v8::internal::String>, int, v8::internal::FunctionKind)",93957336902400,93957336902417],["v8::internal::Factory::NewCallHandlerInfo(bool)",93957336912384,93957336912587],["v8::internal::FreeList::CreateFreeList()",93957336915776,93957336915875],["v8::internal::FreeListManyCached::Reset()",93957336917392,93957336917609],["v8::internal::FreeListManyCached::Free(unsigned long, unsigned long, v8::internal::FreeMode)",93957336918240,93957336918473],["v8::internal::FreeList::EvictFreeListItems(v8::internal::Page*)",93957336919760,93957336919969],["v8::internal::FreeListMany::~FreeListMany()",93957336920208,93957336920239],["v8::internal::GCTracer::CurrentEpoch(v8::internal::GCTracer::Scope::ScopeId)",93957336920560,93957336920612],["v8::internal::GCTracer::Scope::~Scope()",93957336920944,93957336921273],["v8::internal::GCTracer::GCTracer(v8::internal::Heap*)",93957336921328,93957336921972],["v8::internal::GCTracer::Start(v8::internal::GarbageCollector, v8::internal::GarbageCollectionReason, char const*)",93957336922016,93957336923446],["v8::internal::GCTracer::SampleAllocation(double, unsigned long, unsigned long, unsigned long)",93957336924128,93957336924297],["v8::internal::GCTracer::Stop(v8::internal::GarbageCollector)",93957336924544,93957336927686],["v8::internal::GCTracer::RecordGCSumCounters(double)",93957336928096,93957336928800],["v8::internal::GCTracer::Print() const",93957336935120,93957336935883],["v8::internal::GCTracer::AddContextDisposalTime(double)",93957336936032,93957336936115],["v8::internal::UnreachableObjectsFilter::~UnreachableObjectsFilter()",93957337048256,93957337048284],["non-virtual thunk to v8::internal::UnreachableObjectsFilter::MarkingVisitor::VisitRootPointers(v8::internal::Root, char const*, v8::internal::OffHeapCompressedObjectSlot, v8::internal::OffHeapCompressedObjectSlot)",93957337049792,93957337049922],["void std::__1::__function::__policy_invoker<void (v8::internal::AllocationSite)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::Heap::DeoptMarkedAllocationSites()::$_2, void (v8::internal::AllocationSite)> >(std::__1::__function::__policy_storage const*, v8::internal::AllocationSite&&)",93957337053072,93957337053135],["v8::internal::MemoryAllocator::~MemoryAllocator()",93957337053536,93957337053789],["void std::__1::vector<v8::internal::Heap::GCCallbackTuple, std::__1::allocator<v8::internal::Heap::GCCallbackTuple> >::__emplace_back_slow_path<void (*&)(v8::Isolate*, v8::GCType, v8::GCCallbackFlags, void*), v8::GCType&, void*&>(void (*&)(v8::Isolate*, v8::GCType, v8::GCCallbackFlags, void*), v8::GCType&, void*&)",93957337054496,93957337054801],["v8::internal::IncrementalMarkingJob::Start(v8::internal::Heap*)",93957337055872,93957337055884],["v8::internal::IncrementalMarkingJob::Task::RunInternal()",93957337056320,93957337056865],["v8::internal::IncrementalMarking::Observer::Step(int, unsigned long, unsigned long)",93957337056944,93957337057129],["v8::internal::MemoryChunkLayout::ObjectStartOffsetInCodePage()",93957337427776,93957337427829],["v8::internal::MemoryChunk::ReleaseAllAllocatedMemory()",93957337430464,93957337430474],["v8::internal::MeasureMemoryDelegate::~MeasureMemoryDelegate()",93957337431888,93957337431939],["v8::internal::MemoryMeasurement::ScheduleReportingTask()",93957337435872,93957337436100],["v8::internal::NativeContextStats::Clear()",93957337437728,93957337437922],["std::__1::list<v8::internal::MemoryMeasurement::Request, std::__1::allocator<v8::internal::MemoryMeasurement::Request> >::__move_assign(std::__1::list<v8::internal::MemoryMeasurement::Request, std::__1::allocator<v8::internal::MemoryMeasurement::Request> >&, std::__1::integral_constant<bool, true>)",93957337439104,93957337439327],["v8::internal::MemoryReducer::TimerTask::RunInternal()",93957337439600,93957337440060],["v8::internal::MemoryReducer::NotifyPossibleGarbage(v8::internal::MemoryReducer::Event const&)",93957337441424,93957337441654],["v8::internal::SemiSpace::EnsureCurrentCapacity()",93957337441840,93957337442379],["v8::internal::SemiSpace::Commit()",93957337442592,93957337443155],["v8::internal::SemiSpace::GrowTo(unsigned long)",93957337443232,93957337443910],["v8::internal::SemiSpace::PrependPage(v8::internal::Page*)",93957337444160,93957337444350],["v8::internal::SemiSpace::set_age_mark(unsigned long)",93957337444832,93957337444914],["v8::internal::NewSpace::CommittedMemory()",93957337445152,93957337445175],["v8::internal::NewSpace::ResetLinearAllocationArea()",93957337446064,93957337446319],["v8::internal::NewSpace::ResetParkedAllocationBuffers()",93957337446832,93957337446852],["v8::internal::SpaceWithLinearArea::ResumeAllocationObservers()",93957337599760,93957337599831],["v8::internal::MemoryChunk::FreeListsLength()",93957337600080,93957337600196],["v8::internal::StressScavengeObserver::RequestedGCDone()",93957337600896,93957337601235],["v8::internal::Sweeper::MergeOldToNewRememberedSetsForSweptPages()",93957337602752,93957337602897],["v8::internal::Sweeper::SweeperJob::GetMaxConcurrency(unsigned long) const",93957337612256,93957337612375],["v8::internal::CallOptimization::AnalyzePossibleApiFunction(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSFunction>)",93957337618960,93957337619355],["v8::internal::ICStats::Reset()",93957337624464,93957337625047],["v8::internal::IC::UpdateState(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957337629584,93957337629869],["v8::internal::LoadIC::Load(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Name>, bool, v8::internal::Handle<v8::internal::Object>)",93957337631456,93957337633998],["v8::internal::LoadIC::ComputeHandler(v8::internal::LookupIterator*)",93957337638896,93957337644731],["v8::internal::LoadHandler::LoadConstantFromPrototype(v8::internal::Isolate*)",93957337645424,93957337645510],["v8::internal::StoreIC::LookupForWrite(v8::internal::LookupIterator*, v8::internal::Handle<v8::internal::Object>, v8::internal::StoreOrigin)",93957337650640,93957337651840],["v8::internal::StoreIC::ComputeHandler(v8::internal::LookupIterator*)",93957337655904,93957337659444],["v8::internal::(anonymous namespace)::GetStoreMode(v8::internal::Handle<v8::internal::JSObject>, unsigned long)",93957337665248,93957337665641],["v8::internal::Stats_Runtime_LoadWithReceiverNoFeedbackIC_Miss(int, unsigned long*, v8::internal::Isolate*)",93957337670864,93957337671636],["v8::internal::Stats_Runtime_LoadWithReceiverIC_Miss(int, unsigned long*, v8::internal::Isolate*)",93957337675168,93957337675946],["v8::internal::Stats_Runtime_StoreIC_Miss(int, unsigned long*, v8::internal::Isolate*)",93957337677696,93957337678571],["v8::internal::Stats_Runtime_StoreGlobalICNoFeedback_Miss(int, unsigned long*, v8::internal::Isolate*)",93957337680352,93957337681060],["v8::internal::Stats_Runtime_KeyedStoreIC_Miss(int, unsigned long*, v8::internal::Isolate*)",93957337684176,93957337685298],["v8::internal::Stats_Runtime_KeyedStoreIC_Slow(int, unsigned long*, v8::internal::Isolate*)",93957337686736,93957337687288],["v8::internal::Stats_Runtime_ElementsTransitionAndStoreIC_Miss(int, unsigned long*, v8::internal::Isolate*)",93957337688752,93957337689585],["v8::internal::Stats_Runtime_StoreCallbackProperty(int, unsigned long*, v8::internal::Isolate*)",93957337693984,93957337694739],["v8::internal::Stats_Runtime_StorePropertyWithInterceptor(int, unsigned long*, v8::internal::Isolate*)",93957337699056,93957337700594],["v8::internal::Stats_Runtime_KeyedHasIC_Miss(int, unsigned long*, v8::internal::Isolate*)",93957337703152,93957337703951],["v8::internal::MaybeObjectHandle::MaybeObjectHandle(v8::internal::Object, v8::internal::HeapObjectReferenceType, v8::internal::Isolate*)",93957337706352,93957337706448],["v8::internal::PropertyCallbackArguments::BasicCallNamedGetterCallback(void (*)(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&), v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957337707552,93957337708170],["std::__1::__function::__policy_invoker<v8::internal::MaybeHandle<v8::internal::Map> (v8::internal::Handle<v8::internal::Map>)>::__call_empty(std::__1::__function::__policy_storage const*, v8::internal::Handle<v8::internal::Map>&&)",93957337710384,93957337710393],["v8::internal::StubCache::Set(v8::internal::Name, v8::internal::Map, v8::internal::MaybeObject)",93957337710672,93957337710937],["v8::internal::Bootstrapper::Initialize(bool)",93957337711936,93957337711969],["v8::internal::Bootstrapper::CreateEnvironment(v8::internal::MaybeHandle<v8::internal::JSGlobalProxy>, v8::Local<v8::ObjectTemplate>, v8::ExtensionConfiguration*, unsigned long, v8::DeserializeInternalFieldsCallback, v8::MicrotaskQueue*)",93957337712640,93957337713100],["v8::internal::Genesis::CreateSloppyModeFunctionMaps(v8::internal::Handle<v8::internal::JSFunction>)",93957337714832,93957337715422],["v8::internal::Genesis::CreateStrictModeFunctionMaps(v8::internal::Handle<v8::internal::JSFunction>)",93957337716288,93957337717096],["v8::internal::Genesis::CreateObjectFunction(v8::internal::Handle<v8::internal::JSFunction>)",93957337717520,93957337718663],["v8::internal::Genesis::CreateIteratorMaps(v8::internal::Handle<v8::internal::JSFunction>)",93957337718976,93957337721571],["v8::internal::(anonymous namespace)::SimpleInstallFunction(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, char const*, v8::internal::Builtins::Name, int, bool, v8::internal::PropertyAttributes)",93957337721728,93957337721860],["v8::internal::(anonymous namespace)::CreateNonConstructorMap(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::JSObject>, char const*)",93957337722048,93957337722409],["v8::internal::Genesis::CreateAsyncFunctionMaps(v8::internal::Handle<v8::internal::JSFunction>)",93957337724640,93957337725390],["v8::internal::(anonymous namespace)::ReplaceAccessors(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::String>, v8::internal::PropertyAttributes, v8::internal::Handle<v8::internal::AccessorPair>)",93957337726720,93957337727058],["v8::internal::Genesis::InstallGlobalThisBinding()",93957337727344,93957337727791],["v8::internal::(anonymous namespace)::CreateFunctionForBuiltinWithPrototype(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, v8::internal::Builtins::Name, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::InstanceType, int, int, v8::internal::MutableMode)",93957337729408,93957337730137],["v8::internal::Genesis::HookUpGlobalObject(v8::internal::Handle<v8::internal::JSGlobalObject>)",93957337730496,93957337730968],["v8::internal::Genesis::TransferIndexedProperties(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::JSObject>)",93957337734128,93957337734365],["v8::internal::(anonymous namespace)::SimpleInstallGetterSetter(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::String>, v8::internal::Builtins::Name, v8::internal::Builtins::Name)",93957337787904,93957337788090],["v8::internal::InstallWithIntrinsicDefaultProto(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSFunction>, int)",93957337788208,93957337788559],["v8::internal::(anonymous namespace)::InstallSpeciesGetter(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSFunction>)",93957337788704,93957337788740],["v8::internal::(anonymous namespace)::InstallTrueValuedProperty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, char const*)",93957337788896,93957337788981],["v8::internal::(anonymous namespace)::InstallConstant(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, char const*, v8::internal::Handle<v8::internal::Object>)",93957337789024,93957337789115],["v8::internal::(anonymous namespace)::CreateFunction(v8::internal::Isolate*, char const*, v8::internal::InstanceType, int, int, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Builtins::Name)",93957337789152,93957337789259],["v8::internal::Genesis::CreateArrayBuffer(v8::internal::Handle<v8::internal::String>, v8::internal::Genesis::ArrayBufferKind)",93957337790896,93957337791341],["v8::internal::Genesis::InitializeGlobal_harmony_sharedarraybuffer()",93957337792608,93957337792879],["v8::internal::Genesis::InitializeGlobal_harmony_weak_refs()",93957337793312,93957337794268],["v8::internal::Genesis::InitializeGlobal_harmony_relative_indexing_methods()",93957337794928,93957337795953],["v8::internal::Genesis::InitializeGlobal_regexp_linear_flag()",93957337796416,93957337796839],["v8::internal::Genesis::InitializeIteratorFunctions()",93957337797536,93957337801850],["v8::internal::(anonymous namespace)::InstallFunction(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::String>, v8::internal::InstanceType, int, int, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Builtins::Name)",93957337803200,93957337803295],["v8::internal::Genesis::CreateInitialMapForArraySubclass(int, int)",93957337808336,93957337809463],["v8::internal::Genesis::InstallExtensions(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Context>, v8::ExtensionConfiguration*)",93957337809808,93957337810786],["v8::internal::Genesis::ExtensionStates::set_state(v8::RegisteredExtension*, v8::internal::Genesis::ExtensionTraversalState)",93957337811152,93957337811435],["v8::internal::Genesis::ConfigureGlobalObjects(v8::Local<v8::ObjectTemplate>)",93957337812080,93957337812810],["v8::internal::Genesis::Genesis(v8::internal::Isolate*, v8::internal::MaybeHandle<v8::internal::JSGlobalProxy>, v8::Local<v8::ObjectTemplate>, unsigned long, v8::DeserializeInternalFieldsCallback, v8::MicrotaskQueue*)",93957337813088,93957337814679],["v8::internal::(anonymous namespace)::SimpleInstallGetter(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Name>, v8::internal::Builtins::Name, bool)",93957337815072,93957337815215],["v8::internal::InitializeICUDefaultLocation(char const*, char const*)",93957337815552,93957337815619],["v8::internal::(anonymous namespace)::free_icu_data_ptr()",93957337815888,93957337815912],["v8::internal::ChoiceNode::EmitOutOfLineContinuation(v8::internal::RegExpCompiler*, v8::internal::Trace*, v8::internal::GuardedAlternative, v8::internal::AlternativeGeneration*, int, bool)",93957339850288,93957339850884],["v8::internal::RegExpErrorString(v8::internal::RegExpError)",93957339861456,93957339861476],["v8::internal::RegExpMacroAssembler::CheckNotInSurrogatePair(int, v8::internal::Label*)",93957339875744,93957339875923],["v8::internal::NativeRegExpMacroAssembler::Execute(v8::internal::String, int, unsigned char const*, unsigned char const*, int*, int, v8::internal::Isolate*, v8::internal::JSRegExp)",93957339877232,93957339877466],["v8::internal::RegExpParser::PatchNamedBackReferences()",93957339883216,93957339883725],["v8::internal::RegExpBuilder::AddAtom(v8::internal::RegExpTree*)",93957339884976,93957339885211],["v8::internal::RegExpParser::ParsePropertyClassName(v8::internal::ZoneVector<char>*, v8::internal::ZoneVector<char>*)",93957339888480,93957339890704],["v8::internal::RegExpParser::ParseBackReferenceIndex(int*)",93957339894864,93957339895265],["v8::internal::RegExpParser::ParseIntervalQuantifier(int*, int*)",93957339896896,93957339897745],["v8::internal::RegExpBuilder::AddQuantifierToAtom(int, int, v8::internal::RegExpQuantifier::QuantifierType)",93957339897984,93957339898824],["v8::internal::RegExpParser::ParseCaptureGroupName()",93957339899360,93957339903878],["v8::internal::RegExpParser::CreateCaptureNameMap()",93957339905024,93957339905411],["v8::internal::ZoneList<v8::internal::CharacterRange>::Add(v8::internal::CharacterRange const&, v8::internal::Zone*)",93957339906048,93957339906212],["v8::internal::RegExpParser::ParseClassEscape(v8::internal::ZoneList<v8::internal::CharacterRange>*, v8::internal::Zone*, bool, unsigned int*, bool*)",93957339907312,93957339908097],["v8::internal::RegExpParser::ParseRegExp(v8::internal::Isolate*, v8::internal::Zone*, v8::internal::FlatStringReader*, v8::base::Flags<v8::internal::JSRegExp::Flag, int>, v8::internal::RegExpCompileData*)",93957339908576,93957339908739],["v8::internal::RegExpBuilder::AddCharacterClassForDesugaring(unsigned int)",93957339909152,93957339909521],["v8_inspector::V8Debugger::setPauseOnExceptionsState(v8::debug::ExceptionBreakState)",93957342533472,93957342533514],["v8_inspector::V8Debugger::terminateExecution(std::__1::unique_ptr<v8_inspector::protocol::Runtime::Backend::TerminateExecutionCallback, std::__1::default_delete<v8_inspector::protocol::Runtime::Backend::TerminateExecutionCallback> >)",93957342534704,93957342534939],["v8_inspector::V8Debugger::ScriptCompiled(v8::Local<v8::debug::Script>, bool, bool)",93957342537120,93957342537368],["v8_inspector::V8Debugger::ShouldBeSkipped(v8::Local<v8::debug::Script>, int, int)",93957342537776,93957342538063],["v8_inspector::V8Debugger::asyncTaskCandidateForStepping(void*)",93957342539104,93957342539243],["v8_inspector::V8Debugger::asyncTaskStartedForStepping(void*)",93957342539920,93957342540079],["non-virtual thunk to v8_inspector::V8Debugger::AsyncEventOccurred(v8::debug::DebugAsyncActionType, int, bool)",93957342540304,93957342540318],["v8_inspector::V8Debugger::getTargetScopes(v8::Local<v8::Context>, v8::Local<v8::Value>, v8_inspector::V8Debugger::ScopeTargetKind)",93957342540384,93957342541834],["v8_inspector::protocol::Runtime::PropertyPreview::setSubtype(v8_inspector::String16 const&)",93957342717680,93957342718342],["v8_inspector::(anonymous namespace)::BigIntMirror::buildPropertyPreview(v8::Local<v8::Context>, v8_inspector::String16 const&, std::__1::unique_ptr<v8_inspector::protocol::Runtime::PropertyPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::PropertyPreview> >*) const",93957342736848,93957342737160],["void v8_crdtp::cbor::(anonymous namespace)::WriteBytesMostSignificantByteFirst<unsigned long>(unsigned long, std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*)",93957342744816,93957342745197],["v8_crdtp::cbor::EncodeInt32(int, std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*)",93957342745424,93957342745447],["v8_crdtp::cbor::EncodeDouble(double, std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*)",93957342748928,93957342749169],["v8_crdtp::cbor::CBORTokenizer::CBORTokenizer(v8_crdtp::span<unsigned char>)",93957342749856,93957342749890],["v8_crdtp::cbor::CBORTokenizer::Status() const",93957342750672,93957342750685],["v8_crdtp::cbor::CBORTokenizer::GetEnvelope() const",93957342750768,93957342750789],["v8_crdtp::cbor::(anonymous namespace)::ParseValue(int, v8_crdtp::cbor::CBORTokenizer*, v8_crdtp::ParserHandler*)",93957342750992,93957342751573],["v8_crdtp::cbor::(anonymous namespace)::CBOREncoder::~CBOREncoder()",93957342751632,93957342751683],["v8_crdtp::cbor::(anonymous namespace)::CBOREncoder::HandleMapEnd()",93957342751952,93957342752346],["v8_crdtp::cbor::(anonymous namespace)::CBOREncoder::HandleString8(v8_crdtp::span<unsigned char>)",93957342752608,93957342752695],["v8_crdtp::cbor::(anonymous namespace)::CBOREncoder::HandleBinary(v8_crdtp::span<unsigned char>)",93957342752848,93957342752882],["v8_crdtp::cbor::(anonymous namespace)::CBOREncoder::HandleInt32(int)",93957342752928,93957342752968],["v8_crdtp::cbor::(anonymous namespace)::CBOREncoder::HandleNull()",93957342753248,93957342753473],["void std::__1::vector<v8_crdtp::cbor::EnvelopeEncoder, std::__1::allocator<v8_crdtp::cbor::EnvelopeEncoder> >::emplace_back<>()",93957342753536,93957342753813],["v8::internal::compiler::InstructionSelector::MarkAsDefined(v8::internal::compiler::Node*)",93957342912960,93957342912999],["v8::internal::compiler::InstructionSelector::VisitNode(v8::internal::compiler::Node*)",93957342939744,93957342951405],["v8::internal::compiler::InstructionSelector::VisitPhi(v8::internal::compiler::Node*)",93957342956528,93957342957606],["v8::internal::compiler::InstructionSelector::VisitTrapIf(v8::internal::compiler::Node*, v8::internal::compiler::TrapId)",93957342959776,93957342959920],["v8::internal::compiler::InstructionSelector::MarkAsWord64(v8::internal::compiler::Node*)",93957342960640,93957342960724],["v8::internal::compiler::InstructionSelector::VisitLoadFramePointer(v8::internal::compiler::Node*)",93957342961328,93957342961494],["v8::internal::compiler::InstructionSelector::EmitBinarySearchSwitch(v8::internal::compiler::SwitchInfo const&, v8::internal::compiler::InstructionOperand const&)",93957342962816,93957342963461],["v8::internal::compiler::InstructionSelector::ZeroExtendsWord32ToWord64(v8::internal::compiler::Node*, int)",93957342965456,93957342965765],["std::__1::vector<v8::internal::compiler::StateValueDescriptor, v8::internal::ZoneAllocator<v8::internal::compiler::StateValueDescriptor> >::insert(std::__1::__wrap_iter<v8::internal::compiler::StateValueDescriptor const*>, unsigned long, v8::internal::compiler::StateValueDescriptor const&)",93957342966560,93957342967382],["_ZNSt3__16vectorIN2v88internal8compiler20StateValueDescriptorENS2_13ZoneAllocatorIS4_EEE6insertINS_11__wrap_iterIPS4_EEEENS_9enable_ifIXaasr27__is_cpp17_forward_iteratorIT_EE5valuesr16is_constructibleIS4_NS_15iterator_traitsISD_E9referenceEEE5valueESB_E4typeENS9_IPKS4_EESD_SD_",93957342970928,93957342971586],["void std::__1::__stable_sort_move<v8::internal::compiler::SwitchInfo::CasesSortedByValue() const::{lambda(v8::internal::compiler::CaseInfo, v8::internal::compiler::CaseInfo)#1}&, std::__1::__wrap_iter<v8::internal::compiler::CaseInfo*> >(std::__1::__wrap_iter<v8::internal::compiler::CaseInfo*>, std::__1::__wrap_iter<v8::internal::compiler::CaseInfo*>, v8::internal::compiler::SwitchInfo::CasesSortedByValue() const::{lambda(v8::internal::compiler::CaseInfo, v8::internal::compiler::CaseInfo)#1}&, std::__1::iterator_traits<std::__1::__wrap_iter<v8::internal::compiler::CaseInfo*> >::difference_type, std::__1::iterator_traits::value_type*)",93957342972144,93957342972657],["std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::compiler::FeedbackSource, v8::internal::compiler::MinimorphicLoadPropertyAccessInfo>, std::__1::__unordered_map_hasher<v8::internal::compiler::FeedbackSource, std::__1::__hash_value_type<v8::internal::compiler::FeedbackSource, v8::internal::compiler::MinimorphicLoadPropertyAccessInfo>, v8::internal::compiler::FeedbackSource::Hash, v8::internal::compiler::FeedbackSource::Equal, true>, std::__1::__unordered_map_equal<v8::internal::compiler::FeedbackSource, std::__1::__hash_value_type<v8::internal::compiler::FeedbackSource, v8::internal::compiler::MinimorphicLoadPropertyAccessInfo>, v8::internal::compiler::FeedbackSource::Equal, v8::internal::compiler::FeedbackSource::Hash, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<v8::internal::compiler::FeedbackSource, v8::internal::compiler::MinimorphicLoadPropertyAccessInfo> > >::rehash(unsigned long)",93957342973680,93957342974051],["std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::compiler::InstructionSelector::FrameStateInput, v8::internal::compiler::InstructionSelector::CachedStateValues*>, void*>*> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::compiler::InstructionSelector::FrameStateInput, v8::internal::compiler::InstructionSelector::CachedStateValues*>, std::__1::__unordered_map_hasher<v8::internal::compiler::InstructionSelector::FrameStateInput, std::__1::__hash_value_type<v8::internal::compiler::InstructionSelector::FrameStateInput, v8::internal::compiler::InstructionSelector::CachedStateValues*>, v8::internal::compiler::InstructionSelector::FrameStateInput::Hash, v8::internal::compiler::InstructionSelector::FrameStateInput::Equal, true>, std::__1::__unordered_map_equal<v8::internal::compiler::InstructionSelector::FrameStateInput, std::__1::__hash_value_type<v8::internal::compiler::InstructionSelector::FrameStateInput, v8::internal::compiler::InstructionSelector::CachedStateValues*>, v8::internal::compiler::InstructionSelector::FrameStateInput::Equal, v8::internal::compiler::InstructionSelector::FrameStateInput::Hash, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<v8::internal::compiler::InstructionSelector::FrameStateInput, v8::internal::compiler::InstructionSelector::CachedStateValues*> > >::find<v8::internal::compiler::InstructionSelector::FrameStateInput>(v8::internal::compiler::InstructionSelector::FrameStateInput const&)",93957342974816,93957342975257],["std::__1::vector<v8::internal::compiler::PushParameter, v8::internal::ZoneAllocator<v8::internal::compiler::PushParameter> >::__append(unsigned long)",93957342976272,93957342976898],["v8::internal::compiler::InstructionOperand::InterferesWith(v8::internal::compiler::InstructionOperand const&) const",93957342977072,93957342977215],["std::__1::basic_ostream<char, std::__1::char_traits<char> >& v8::internal::operator<< <v8::internal::XMMRegister, char const*>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::XMMRegister)",93957342978368,93957342978432],["v8::internal::compiler::(anonymous namespace)::PrintBlockRow(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::ZoneVector<v8::internal::compiler::InstructionBlock*> const&)",93957343093632,93957343094575],["v8::internal::compiler::TopTierRegisterAllocationData::RangesDefinedInDeferredStayInDeferred()",93957343100384,93957343100723],["v8::internal::compiler::ConstraintBuilder::ResolvePhis(v8::internal::compiler::InstructionBlock const*)",93957343105824,93957343107041],["v8::internal::compiler::LiveRangeBuilder::ProcessInstructions(v8::internal::compiler::InstructionBlock const*, v8::internal::BitVector*)",93957343110272,93957343115863],["v8::internal::compiler::RegisterAllocator::SplitAndSpillRangesDefinedByMemoryOperand()",93957343126432,93957343126951],["v8::internal::compiler::LinearScanAllocator::AssignRegisterOnReload(v8::internal::compiler::LiveRange*, int)",93957343131120,93957343131800],["v8::internal::compiler::LinearScanAllocator::UpdateDeferredFixedRanges(v8::internal::compiler::TopTierRegisterAllocationData::SpillMode, v8::internal::compiler::InstructionBlock*)::$_3::operator()(v8::internal::compiler::LiveRange*) const",93957343139024,93957343139449],["v8::internal::compiler::LinearScanAllocator::ActiveToInactive(std::__1::__wrap_iter<v8::internal::compiler::LiveRange**>, v8::internal::compiler::LifetimePosition)",93957343145568,93957343145949],["v8::internal::compiler::LinearScanAllocator::TryAllocateFreeReg(v8::internal::compiler::LiveRange*, v8::internal::Vector<v8::internal::compiler::LifetimePosition> const&)",93957343148288,93957343148673],["v8::internal::compiler::LinearScanAllocator::SpillBetweenUntil(v8::internal::compiler::LiveRange*, v8::internal::compiler::LifetimePosition, v8::internal::compiler::LifetimePosition, v8::internal::compiler::LifetimePosition, v8::internal::compiler::TopTierRegisterAllocationData::SpillMode)",93957343152880,93957343153477],["v8::internal::compiler::OperandAssigner::CommitAssignment()",93957343154912,93957343155987],["v8::internal::compiler::LiveRangeConnector::ConnectRanges(v8::internal::Zone*)",93957343162912,93957343166951],["std::__1::__hash_table<v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Map>::hash, v8::internal::Handle<v8::internal::Map>::equal_to, v8::internal::ZoneAllocator<v8::internal::Handle<v8::internal::Map> > >::__rehash(unsigned long)",93957343168336,93957343169046],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<v8::internal::compiler::LinearScanAllocator::RangeWithRegister, void*>*>, bool> std::__1::__hash_table<v8::internal::compiler::LinearScanAllocator::RangeWithRegister, v8::internal::compiler::LinearScanAllocator::RangeWithRegister::Hash, v8::internal::compiler::LinearScanAllocator::RangeWithRegister::Equals, v8::internal::ZoneAllocator<v8::internal::compiler::LinearScanAllocator::RangeWithRegister> >::__emplace_unique_impl<v8::internal::compiler::LiveRange* const&>(v8::internal::compiler::LiveRange* const&)",93957343169872,93957343170314],["std::__1::__hash_table<v8::internal::compiler::LinearScanAllocator::RangeWithRegister, v8::internal::compiler::LinearScanAllocator::RangeWithRegister::Hash, v8::internal::compiler::LinearScanAllocator::RangeWithRegister::Equals, v8::internal::ZoneAllocator<v8::internal::compiler::LinearScanAllocator::RangeWithRegister> >::remove(std::__1::__hash_const_iterator<std::__1::__hash_node<v8::internal::compiler::LinearScanAllocator::RangeWithRegister, void*>*>)",93957343173280,93957343173777],["std::__1::__tree_iterator<v8::internal::compiler::LiveRange*, std::__1::__tree_node<v8::internal::compiler::LiveRange*, void*>*, long> std::__1::__tree<v8::internal::compiler::LiveRange*, v8::internal::compiler::LinearScanAllocator::UnhandledLiveRangeOrdering, v8::internal::ZoneAllocator<v8::internal::compiler::LiveRange*> >::__emplace_multi<v8::internal::compiler::LiveRange* const&>(v8::internal::compiler::LiveRange* const&)",93957343173824,93957343174106],["v8::internal::compiler::SpillPlacer::~SpillPlacer()",93957343174160,93957343174209],["v8::internal::compiler::SpillPlacer::SetSpillRequired(v8::internal::compiler::InstructionBlock*, int, v8::internal::compiler::RpoNumber)",93957343175152,93957343175376],["v8::internal::compiler::SpillPlacer::FirstBackwardPass()",93957343175872,93957343176256],["v8::internal::compiler::SpillPlacer::SecondBackwardPass()",93957343176560,93957343177436],["_ZNSt3__16vectorIPN2v88internal8compiler4NodeENS2_13ZoneAllocatorIS5_EEE6insertIPS5_EENS_9enable_ifIXaasr27__is_cpp17_forward_iteratorIT_EE5valuesr16is_constructibleIS5_NS_15iterator_traitsISC_E9referenceEEE5valueENS_11__wrap_iterISA_EEE4typeENSG_IPKS5_EESC_SC_",93957343179168,93957343182698],["v8::internal::compiler::BranchElimination::~BranchElimination()",93957343182992,93957343183021],["v8::internal::compiler::BranchElimination::ReduceDeoptimizeConditional(v8::internal::compiler::Node*)",93957343183136,93957343183979],["v8::internal::compiler::BranchElimination::ReduceBranch(v8::internal::compiler::Node*)",93957343184320,93957343184903],["v8::internal::compiler::BranchElimination::ReduceTrapConditional(v8::internal::compiler::Node*)",93957343185296,93957343185959],["v8::internal::compiler::BranchElimination::MarkAsSafetyCheckIfNeeded(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343186736,93957343186904],["v8::internal::compiler::FunctionalList<v8::internal::compiler::BranchElimination::BranchCondition>::ResetToCommonAncestor(v8::internal::compiler::FunctionalList<v8::internal::compiler::BranchElimination::BranchCondition>)",93957343187136,93957343187375],["v8::internal::compiler::FunctionalList<v8::internal::compiler::BranchElimination::BranchCondition>::PushFront(v8::internal::compiler::BranchElimination::BranchCondition, v8::internal::Zone*, v8::internal::compiler::FunctionalList<v8::internal::compiler::BranchElimination::BranchCondition>)",93957343187712,93957343188079],["v8::internal::compiler::BytecodeLoopAssignments::AddList(v8::internal::interpreter::Register, unsigned int)",93957343188096,93957343188339],["v8::internal::compiler::BytecodeLoopAssignments::ContainsLocal(int) const",93957343188416,93957343188475],["v8::internal::compiler::BytecodeAnalysis::Analyze()",93957343188736,93957343195335],["v8::internal::compiler::operator==(v8::internal::compiler::ShuffleParameter const&, v8::internal::compiler::ShuffleParameter const&)",93957344512848,93957344513178],["v8::internal::compiler::MemoryLowering::MemoryLowering(v8::internal::compiler::JSGraph*, v8::internal::Zone*, v8::internal::compiler::JSGraphAssembler*, v8::internal::PoisoningMitigationLevel, v8::internal::compiler::MemoryLowering::AllocationFolding, std::__1::function<void (v8::internal::compiler::Node*, v8::internal::compiler::Node*, char const*, v8::internal::Zone*)>, char const*)",93957344575632,93957344575779],["v8::internal::compiler::MemoryOptimizer::MergeStates(v8::internal::ZoneVector<v8::internal::compiler::MemoryLowering::AllocationState const*> const&)",93957344585216,93957344585578],["v8::internal::compiler::NodeOriginTable::PrintJson(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) const",93957344590992,93957344591315],["v8::internal::compiler::NodeProperties::ReplaceControlInput(v8::internal::compiler::Node*, v8::internal::compiler::Node*, int)",93957344593712,93957344593956],["v8::internal::compiler::NodeProperties::CollectValueProjections(v8::internal::compiler::Node*, v8::internal::compiler::Node**, unsigned long)",93957344595664,93957344595777],["v8::internal::compiler::NodeProperties::GetTypeOrAny(v8::internal::compiler::Node const*)",93957344600512,93957344600534],["v8::internal::compiler::Node* v8::internal::compiler::Node::NewImpl<v8::internal::compiler::Node*>(v8::internal::Zone*, unsigned int, v8::internal::compiler::Operator const*, int, v8::internal::compiler::Node* const*, bool)",93957344601568,93957344602241],["v8::internal::compiler::Node::TrimInputCount(int)",93957344604768,93957344605021],["v8::internal::compiler::Node::OwnedBy(v8::internal::compiler::Node const*) const",93957344605536,93957344605607],["v8::internal::compiler::(anonymous namespace)::PrintNode(v8::internal::compiler::Node const*, std::__1::basic_ostream<char, std::__1::char_traits<char> >&, int, int)",93957344606000,93957344606320],["v8::internal::compiler::IrOpcode::Mnemonic(v8::internal::compiler::IrOpcode::Value)",93957344606864,93957344606898],["v8::internal::compiler::OperationTyper::WeakenRange(v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344607408,93957344608246],["v8::internal::compiler::OperationTyper::ConvertReceiver(v8::internal::compiler::Type)",93957344609376,93957344609504],["v8::internal::compiler::OperationTyper::NumberAbs(v8::internal::compiler::Type)",93957344610080,93957344610391],["v8::internal::compiler::OperationTyper::NumberExp(v8::internal::compiler::Type)",93957344610560,93957344610583],["v8::internal::compiler::OperationTyper::NumberToBoolean(v8::internal::compiler::Type)",93957344611088,93957344611244],["v8::internal::compiler::OperationTyper::NumberToString(v8::internal::compiler::Type)",93957344611440,93957344611547],["v8::internal::compiler::OperationTyper::NumberToUint8Clamped(v8::internal::compiler::Type)",93957344611744,93957344611812],["v8::internal::compiler::OperationTyper::CheckBigInt(v8::internal::compiler::Type)",93957344611872,93957344611883],["v8::internal::compiler::OperationTyper::NumberSubtract(v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344612464,93957344613053],["v8::internal::compiler::OperationTyper::SpeculativeNumberAdd(v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344613184,93957344613284],["v8::internal::compiler::OperationTyper::SpeculativeNumberSubtract(v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344613424,93957344613524],["v8::internal::compiler::OperationTyper::NumberDivide(v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344614416,93957344614906],["v8::internal::compiler::OperationTyper::NumberBitwiseOr(v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344615616,93957344615974],["v8::internal::compiler::OperationTyper::NumberBitwiseXor(v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344616272,93957344616515],["v8::internal::compiler::OperationTyper::NumberShiftRight(v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344616800,93957344617045],["v8::internal::compiler::OperationTyper::NumberImul(v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344617296,93957344617307],["v8::internal::compiler::OperationTyper::NumberMin(v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344617872,93957344618423],["v8::internal::compiler::OperationTyper::SpeculativeNumberMultiply(v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344618480,93957344618580],["v8::internal::compiler::OperationTyper::SpeculativeNumberModulus(v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344618704,93957344618804],["v8::internal::compiler::OperationTyper::SpeculativeNumberBitwiseAnd(v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344618928,93957344619028],["v8::internal::compiler::SerializerForBackgroundCompilation::VisitCreateClosure(v8::internal::interpreter::BytecodeArrayIterator*)",93957344826592,93957344827115],["v8::internal::compiler::SimplifiedLowering::DoIntegerToUint8Clamped(v8::internal::compiler::Node*)",93957344902384,93957344902895],["void v8::internal::compiler::RepresentationSelector::VisitNode<(v8::internal::compiler::Phase)1>(v8::internal::compiler::Node*, v8::internal::compiler::Truncation, v8::internal::compiler::SimplifiedLowering*)",93957344958064,93957344967102],["v8::internal::compiler::RepresentationSelector::ChangeToInt32OverflowOp(v8::internal::compiler::Node*)",93957345017376,93957345017455],["v8::internal::compiler::Operator1<v8::internal::compiler::FieldAccess, v8::internal::compiler::OpEqualTo<v8::internal::compiler::FieldAccess>, v8::internal::compiler::OpHash<v8::internal::compiler::FieldAccess> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957345038480,93957345038576],["v8::internal::compiler::SimplifiedOperatorBuilder::NumberMin()",93957345040624,93957345040638],["v8::internal::compiler::SimplifiedOperatorBuilder::BigIntNegate()",93957345040880,93957345040894],["v8::internal::compiler::SimplifiedOperatorBuilder::ChangeTaggedToInt64()",93957345041136,93957345041150],["v8::internal::compiler::SimplifiedOperatorBuilder::TruncateBigIntToUint64()",93957345041328,93957345041342],["v8::internal::compiler::SimplifiedOperatorBuilder::ObjectIsCallable()",93957345041456,93957345041470],["v8::internal::compiler::SimplifiedOperatorBuilder::ObjectIsNumber()",93957345041584,93957345041598],["v8::internal::compiler::SimplifiedOperatorBuilder::ObjectIsFiniteNumber()",93957345041712,93957345041726],["v8::internal::compiler::SimplifiedOperatorBuilder::NumberSameValue()",93957345041840,93957345041854],["v8::internal::compiler::SimplifiedOperatorBuilder::BigIntAdd()",93957345041968,93957345041982],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckEqualsSymbol()",93957345042096,93957345042110],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckedInt32Div()",93957345042224,93957345042238],["v8::internal::compiler::SimplifiedOperatorBuilder::FindOrderedHashMapEntryForInt32Key()",93957345042320,93957345042334],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckString(v8::internal::compiler::FeedbackSource const&)",93957345042768,93957345042968],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckedInt64ToTaggedSigned(v8::internal::compiler::FeedbackSource const&)",93957345043600,93957345043800],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckedTaggedToTaggedSigned(v8::internal::compiler::FeedbackSource const&)",93957345044432,93957345044632],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckedUint64ToTaggedSigned(v8::internal::compiler::FeedbackSource const&)",93957345045264,93957345045464],["v8::internal::compiler::SimplifiedOperatorBuilder::RuntimeAbort(v8::internal::AbortReason)",93957345046128,93957345046254],["v8::internal::compiler::SimplifiedOperatorBuilder::AssertType(v8::internal::compiler::Type)",93957345046672,93957345046815],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckedFloat64ToInt32(v8::internal::compiler::CheckForMinusZeroMode, v8::internal::compiler::FeedbackSource const&)",93957345047904,93957345048198],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckedTaggedToFloat64(v8::internal::compiler::CheckTaggedInputMode, v8::internal::compiler::FeedbackSource const&)",93957345049120,93957345049409],["v8::internal::compiler::SimplifiedOperatorBuilder::MapGuard(v8::internal::ZoneHandleSet<v8::internal::Map>)",93957345050160,93957345050285],["v8::internal::compiler::SimplifiedOperatorBuilder::SpeculativeBigIntAdd(v8::internal::compiler::BigIntOperationHint)",93957345050768,93957345050893],["v8::internal::compiler::SimplifiedOperatorBuilder::SpeculativeToNumber(v8::internal::compiler::NumberOperationHint, v8::internal::compiler::FeedbackSource const&)",93957345051280,93957345051593],["v8::internal::compiler::SimplifiedOperatorBuilder::ArgumentsLength()",93957345052096,93957345052215],["v8::internal::compiler::SimplifiedOperatorBuilder::NewDoubleElements(v8::internal::AllocationType)",93957345052496,93957345052621],["v8::internal::compiler::SimplifiedOperatorBuilder::Allocate(v8::internal::compiler::Type, v8::internal::AllocationType)",93957345053040,93957345053202],["v8::internal::compiler::SimplifiedOperatorBuilder::SpeculativeNumberMultiply(v8::internal::compiler::NumberOperationHint)",93957345053584,93957345053666],["v8::internal::compiler::SimplifiedOperatorBuilder::SpeculativeNumberBitwiseAnd(v8::internal::compiler::NumberOperationHint)",93957345053872,93957345053954],["v8::internal::compiler::SimplifiedOperatorBuilder::SpeculativeNumberBitwiseXor(v8::internal::compiler::NumberOperationHint)",93957345054064,93957345054146],["v8::internal::compiler::SimplifiedOperatorBuilder::SpeculativeNumberShiftRight(v8::internal::compiler::NumberOperationHint)",93957345054256,93957345054338],["v8::internal::compiler::SimplifiedOperatorBuilder::SpeculativeSafeIntegerAdd(v8::internal::compiler::NumberOperationHint)",93957345054448,93957345054530],["v8::internal::compiler::SimplifiedOperatorBuilder::SpeculativeNumberLessThan(v8::internal::compiler::NumberOperationHint)",93957345054640,93957345054722],["v8::internal::compiler::SimplifiedOperatorBuilder::SpeculativeNumberEqual(v8::internal::compiler::NumberOperationHint)",93957345054832,93957345054924],["v8::internal::compiler::SimplifiedOperatorBuilder::StoreField(v8::internal::compiler::FieldAccess const&)",93957345055168,93957345055403],["v8::internal::compiler::SimplifiedOperatorBuilder::StoreElement(v8::internal::compiler::ElementAccess const&)",93957345055584,93957345055745],["v8::internal::compiler::SimplifiedOperatorBuilder::LoadFromObject(v8::internal::compiler::ObjectAccess const&)",93957345055888,93957345056035],["v8::internal::compiler::SimplifiedOperatorBuilder::StoreToObject(v8::internal::compiler::ObjectAccess const&)",93957345056176,93957345056323],["v8::internal::compiler::SimplifiedOperatorBuilder::StoreDataViewElement(v8::internal::ExternalArrayType const&)",93957345056464,93957345056592],["v8::internal::compiler::SimplifiedOperatorBuilder::StoreMessage()",93957345056704,93957345056813],["v8::internal::compiler::SimplifiedOperatorBuilder::TransitionAndStoreElement(v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Map>)",93957345056832,93957345056973],["v8::internal::compiler::SimplifiedOperatorBuilder::TransitionAndStoreNumberElement(v8::internal::Handle<v8::internal::Map>)",93957345057088,93957345057213],["v8::internal::compiler::SimplifiedOperatorBuilder::FastApiCall(v8::CFunctionInfo const*, v8::internal::compiler::FeedbackSource const&, v8::internal::compiler::CallDescriptor*)",93957345057360,93957345057620],["v8::internal::compiler::FastApiCallNode::FastCallArgumentCount() const",93957345057696,93957345057768],["v8::internal::compiler::SimplifiedOperatorGlobalCache::SimplifiedOperatorGlobalCache()",93957345057840,93957345083757],["v8::internal::compiler::Operator1<v8::internal::compiler::CheckBoundsParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CheckBoundsParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CheckBoundsParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957345083872,93957345083975],["v8::internal::compiler::Operator1<v8::internal::compiler::CheckIfParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CheckIfParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CheckIfParameters> >::HashCode() const",93957345084032,93957345084131],["v8::internal::compiler::Operator1<v8::internal::compiler::CheckForMinusZeroMode, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CheckForMinusZeroMode>, v8::internal::compiler::OpHash<v8::internal::compiler::CheckForMinusZeroMode> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957345084256,93957345084374],["v8::internal::compiler::Operator1<v8::internal::compiler::CheckMinusZeroParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CheckMinusZeroParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CheckMinusZeroParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957345084480,93957345084633],["v8::internal::compiler::Operator1<v8::internal::ConvertReceiverMode, v8::internal::compiler::OpEqualTo<v8::internal::ConvertReceiverMode>, v8::internal::compiler::OpHash<v8::internal::ConvertReceiverMode> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957345084720,93957345084857],["v8::internal::compiler::Operator1<v8::internal::compiler::GrowFastElementsParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::GrowFastElementsParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::GrowFastElementsParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957345085024,93957345085177],["v8::internal::compiler::Operator1<v8::internal::compiler::NumberOperationParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::NumberOperationParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::NumberOperationParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957345085264,93957345085366],["v8::internal::compiler::Operator1<v8::internal::compiler::CheckMapsParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CheckMapsParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CheckMapsParameters> >::HashCode() const",93957345085456,93957345085567],["v8::internal::compiler::Operator1<v8::internal::compiler::DynamicCheckMapsParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::DynamicCheckMapsParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::DynamicCheckMapsParameters> >::Equals(v8::internal::compiler::Operator const*) const",93957345085744,93957345085776],["v8::internal::compiler::Operator1<v8::internal::compiler::DynamicCheckMapsParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::DynamicCheckMapsParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::DynamicCheckMapsParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957345085856,93957345085926],["v8::internal::compiler::Operator1<v8::internal::ZoneHandleSet<v8::internal::Map>, v8::internal::compiler::OpEqualTo<v8::internal::ZoneHandleSet<v8::internal::Map> >, v8::internal::compiler::OpHash<v8::internal::ZoneHandleSet<v8::internal::Map> > >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957345085968,93957345086038],["v8::internal::compiler::Operator1<v8::internal::compiler::ElementsTransition, v8::internal::compiler::OpEqualTo<v8::internal::compiler::ElementsTransition>, v8::internal::compiler::OpHash<v8::internal::compiler::ElementsTransition> >::Equals(v8::internal::compiler::Operator const*) const",93957345086160,93957345086209],["v8::internal::compiler::Operator1<v8::internal::compiler::ElementsTransition, v8::internal::compiler::OpEqualTo<v8::internal::compiler::ElementsTransition>, v8::internal::compiler::OpHash<v8::internal::compiler::ElementsTransition> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957345086288,93957345086374],["v8::internal::compiler::Operator1<v8::internal::compiler::NewArgumentsElementsParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::NewArgumentsElementsParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::NewArgumentsElementsParameters> >::Equals(v8::internal::compiler::Operator const*) const",93957345086560,93957345086600],["v8::internal::compiler::Operator1<v8::internal::compiler::NewArgumentsElementsParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::NewArgumentsElementsParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::NewArgumentsElementsParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957345086672,93957345086742],["atoi",139871563509664,139871563509685],["exit",139871563515488,139871563515514],["__cxa_thread_atexit_impl",139871563517056,139871563517254],["llabs",139871563517408,139871563517420],["lldiv",139871563517456,139871563517465],["mbstowcs",139871563517632,139871563517707],["wcstombs",139871563517872,139871563517947],["srand",139871563518064,139871563518202],["_IO_proc_close",139871563742816,139871563743460],["_IO_ungetc",139871563747088,139871563747359],["fgetwc_unlocked",139871563748688,139871563748725],["fgetws_unlocked",139871563749520,139871563749675],["putwc",139871563751232,139871563751493],["putchar",139871563751984,139871563752332],["swprintf",139871563752592,139871563752767],["wprintf",139871563752800,139871563753000],["fwscanf",139871563753216,139871563753393],["vswprintf",139871563753808,139871563753816],["swscanf",139871563754000,139871563754309],["_IO_switch_to_main_wget_area",139871563754960,139871563755009],["_IO_wsetb",139871563755088,139871563755185],["_IO_wdefault_finish",139871563755632,139871563755758],["utmpxname",139871564533776,139871564533781],["_dl_mcount_wrapper_check",139871564535392,139871564535441],["__libc_dlvsym",139871564536112,139871564536457],["_dl_vsym",139871564537696,139871564537930],["tgammaf128",139871565674672,139871565675158],["f64xaddf128",139871565706256,139871565706860],["f32xdivf128",139871565708640,139871565709186],["f32mulf64x",139871565710288,139871565710630],["f32xmulf128",139871565711584,139871565712170],["f32subf32x",139871565712720,139871565713141],["f32subf64x",139871565713312,139871565713704],["f32subf128",139871565714128,139871565714730],["setxid_unmark_thread.constprop.0",139871566581440,139871566581533],["__find_in_stack_list",139871566584656,139871566584865],["clear_once_control",139871566619552,139871566619613],["where_is_shmfs",139871566619712,139871566620190],["check_add_mapping",139871566620384,139871566621055],["walker",139871566622368,139871566622389],["do_futex_wait.constprop.0",139871566623040,139871566623185],["__lll_lock_wait_private",139871566626240,139871566626289],["void std::__1::__tree_remove<std::__1::__tree_node_base<void*>*>(std::__1::__tree_node_base<void*>*, std::__1::__tree_node_base<void*>*)",93957335209744,93957335210730],["v8::internal::FreePages(v8::PageAllocator*, void*, unsigned long)",93957335211088,93957335211102],["v8::InspectorFrontend::sendResponse(int, std::__1::unique_ptr<v8_inspector::StringBuffer, std::__1::default_delete<v8_inspector::StringBuffer> >)",93957335306448,93957335306519],["v8::ProcessMessageTask::RunInternal()",93957335307264,93957335307293],["non-virtual thunk to v8::internal::CancelableTask::Run()",93957335307568,93957335307599],["v8::TerminateTask::~TerminateTask()",93957335307696,93957335307791],["v8::internal::Handle<v8::internal::String> v8::internal::FactoryBase<v8::internal::Factory>::InternalizeStringWithKey<v8::internal::SeqSubStringKey<v8::internal::SeqOneByteString> >(v8::internal::SeqSubStringKey<v8::internal::SeqOneByteString>*)",93957336827152,93957336827175],["v8::internal::FactoryBase<v8::internal::Factory>::NewWeakFixedArrayWithMap(v8::internal::Map, int, v8::internal::AllocationType)",93957336828496,93957336828740],["v8::internal::FactoryBase<v8::internal::Factory>::NewRegExpBoilerplateDescription(v8::internal::Handle<v8::internal::FixedArray>, v8::internal::Handle<v8::internal::String>, v8::internal::Smi)",93957336830112,93957336830563],["v8::internal::FactoryBase<v8::internal::Factory>::NewSharedFunctionInfoForLiteral(v8::internal::FunctionLiteral*, v8::internal::Handle<v8::internal::Script>, bool)",93957336831568,93957336831721],["v8::internal::FactoryBase<v8::internal::Factory>::NewUncompiledDataWithoutPreparseData(v8::internal::Handle<v8::internal::String>, int, int)",93957336832832,93957336832848],["v8::internal::FactoryBase<v8::internal::Factory>::NewFeedbackMetadata(int, int, v8::internal::AllocationType)",93957336832864,93957336833092],["v8::internal::FactoryBase<v8::internal::Factory>::InternalizeString(v8::internal::Vector<unsigned char const> const&, bool)",93957336833344,93957336833482],["v8::internal::FactoryBase<v8::internal::Factory>::NewOneByteInternalizedString(v8::internal::Vector<unsigned char const> const&, unsigned int)",93957336833632,93957336833680],["v8::internal::Factory::NewJSArrayBuffer(std::__1::shared_ptr<v8::internal::BackingStore>, v8::internal::AllocationType)",93957336892304,93957336892665],["v8::internal::Factory::NewStackFrameInfo(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::HeapObject>, int, int, v8::internal::Handle<v8::internal::FixedArray>)",93957336905856,93957336906461],["v8::internal::Factory::CreateStrictFunctionMap(v8::internal::FunctionMode, v8::internal::Handle<v8::internal::JSFunction>)",93957336910944,93957336911528],["v8::internal::Factory::JSFunctionBuilder::PrepareFeedbackCell()",93957336913088,93957336913213],["v8::internal::FreeListCategory::Reset(v8::internal::FreeList*)",93957336915680,93957336915737],["v8::internal::FreeList::Free(unsigned long, unsigned long, v8::internal::FreeMode)",93957336916240,93957336916409],["v8::internal::FreeListMany::Allocate(unsigned long, unsigned long*, v8::internal::AllocationOrigin)",93957336916704,93957336916992],["v8::internal::FreeListManyCached::AddCategory(v8::internal::FreeListCategory*)",93957336917792,93957336917881],["v8::internal::FreeList::RemoveCategory(v8::internal::FreeListCategory*)",93957336918128,93957336918238],["v8::internal::FreeListManyCached::Allocate(unsigned long, unsigned long*, v8::internal::AllocationOrigin)",93957336918480,93957336918832],["v8::internal::FreeListManyCachedOrigin::Allocate(unsigned long, unsigned long*, v8::internal::AllocationOrigin)",93957336919728,93957336919754],["v8::internal::FreeListCategory::SumFreeList()",93957336919984,93957336920043],["v8::internal::FreeListMany::SelectFreeListCategoryType(unsigned long)",93957336920112,93957336920202],["v8::internal::GCIdleTimeHeapState::Print()",93957336920240,93957336920326],["v8::internal::GCIdleTimeHandler::Compute(double, v8::internal::GCIdleTimeHeapState)",93957336920464,93957336920560],["v8::internal::GCTracer::Scope::Scope(v8::internal::GCTracer*, v8::internal::GCTracer::Scope::ScopeId, v8::internal::ThreadKind)",93957336920624,93957336920862],["v8::internal::PagedSpace::SupportsAllocationObserver()",93957337047280,93957337047296],["v8::internal::UnreachableObjectsFilter::MarkingVisitor::VisitPointers(v8::internal::HeapObject, v8::internal::CompressedObjectSlot, v8::internal::CompressedObjectSlot)",93957337048896,93957337049035],["non-virtual thunk to v8::internal::UnreachableObjectsFilter::MarkingVisitor::~MarkingVisitor()",93957337049616,93957337049679],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<v8::internal::HeapObject, void*>*>, bool> std::__1::__hash_table<v8::internal::HeapObject, v8::internal::Object::Hasher, std::__1::equal_to<v8::internal::HeapObject>, std::__1::allocator<v8::internal::HeapObject> >::__emplace_unique_key_args<v8::internal::HeapObject, v8::internal::HeapObject const&>(v8::internal::HeapObject const&, v8::internal::HeapObject const&)",93957337050464,93957337051251],["void std::__1::__function::__policy_invoker<void (v8::internal::AllocationSite)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::Heap::ProcessPretenuringFeedback()::$_1, void (v8::internal::AllocationSite)> >(std::__1::__function::__policy_storage const*, v8::internal::AllocationSite&&)",93957337053008,93957337053058],["v8::internal::MarkingBarrier::MarkValue(v8::internal::HeapObject, v8::internal::HeapObject)",93957337053136,93957337053416],["v8::internal::MemoryPressureInterruptTask::RunInternal()",93957337053520,93957337053534],["std::__1::default_delete<v8::internal::ConcurrentMarking>::operator()(v8::internal::ConcurrentMarking*) const",93957337053792,93957337054056],["v8::internal::MemoryAllocator::CommitExecutableMemory(v8::internal::VirtualMemory*, unsigned long, unsigned long, unsigned long)",93957337423616,93957337423946],["v8::internal::MemoryChunk::DecrementWriteUnprotectCounterAndMaybeSetPermissions(v8::PageAllocator::Permission)",93957337428336,93957337428489],["void v8::internal::MemoryChunk::ReleaseTypedSlotSet<(v8::internal::RememberedSetType)0>()",93957337430240,93957337430279],["void v8::internal::MemoryChunk::RegisterObjectWithInvalidatedSlots<(v8::internal::RememberedSetType)0>(v8::internal::HeapObject)",93957337430976,93957337431209],["v8::internal::TypedSlotSet::~TypedSlotSet()",93957337431808,93957337431836],["v8::internal::MeasureMemoryDelegate::MeasurementComplete(std::__1::vector<std::__1::pair<v8::Local<v8::Context>, unsigned long>, std::__1::allocator<std::__1::pair<v8::Local<v8::Context>, unsigned long> > > const&, unsigned long)",93957337432000,93957337433180],["v8::internal::MemoryMeasurement::StartProcessing()",93957337434256,93957337434778],["v8::internal::MemoryMeasurement::DefaultDelegate(v8::internal::Isolate*, v8::internal::Handle<v8::internal::NativeContext>, v8::internal::Handle<v8::internal::JSPromise>, v8::MeasureMemoryMode)",93957337437056,93957337437169],["v8::internal::NativeContextInferrer::InferForJSObject(v8::internal::Isolate*, v8::internal::Map, v8::internal::JSObject, unsigned long*)",93957337437376,93957337437721],["v8::internal::NativeContextStats::Merge(v8::internal::NativeContextStats const&)",93957337437936,93957337438044],["v8::internal::(anonymous namespace)::MemoryMeasurementResultBuilder::NewResult(unsigned long, unsigned long, unsigned long)",93957337438160,93957337439103],["void std::__1::__function::__policy_invoker<void ()>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::MemoryMeasurement::ScheduleReportingTask()::$_0, void ()> >(std::__1::__function::__policy_storage const*)",93957337439328,93957337439345],["v8::internal::MemoryReducer::MemoryReducer(v8::internal::Heap*)",93957337439520,93957337439599],["v8::internal::MemoryReducer::NotifyTimer(v8::internal::MemoryReducer::Event const&)",93957337440064,93957337440478],["v8::internal::MemoryReducer::NotifyMarkCompact(v8::internal::MemoryReducer::Event const&)",93957337441120,93957337441421],["v8::internal::MemoryReducer::TearDown()",93957337441664,93957337441681],["v8::internal::SpaceWithLinearArea::InvokeAllocationObservers(unsigned long, unsigned long, unsigned long, unsigned long)",93957337599904,93957337600076],["v8::internal::StressMarkingObserver::StressMarkingObserver(v8::internal::Heap*)",93957337600208,93957337600236],["v8::internal::StressScavengeObserver::Step(int, unsigned long, unsigned long)",93957337600464,93957337600870],["v8::internal::Sweeper::Sweeper(v8::internal::Heap*, v8::internal::MajorNonAtomicMarkingState*)",93957337601264,93957337601415],["v8::internal::Sweeper::TearDown()",93957337602240,93957337602291],["v8::internal::Sweeper::DrainSweepingWorklistForSpace(v8::internal::AllocationSpace)",93957337603968,93957337604148],["void std::__1::__sort<v8::internal::Sweeper::StartSweeping()::$_0::operator()(v8::internal::AllocationSpace) const::{lambda(v8::internal::Page*, v8::internal::Page*)#1}&, v8::internal::Page**>(v8::internal::Page**, v8::internal::Page**, v8::internal::Sweeper::StartSweeping()::$_0::operator()(v8::internal::AllocationSpace) const::{lambda(v8::internal::Page*, v8::internal::Page*)#1}&)",93957337608688,93957337610490],["v8::internal::WeakObjects::UpdateAfterScavenge()",93957337614016,93957337614127],["v8::internal::CallOptimization::GetAccessorContext(v8::internal::Map) const",93957337618240,93957337618351],["v8::internal::LoadHandler::LoadFullChain(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::MaybeObjectHandle const&, v8::internal::Handle<v8::internal::Smi>)",93957337620816,93957337621226],["v8::internal::ICStats::ICStats()",93957337623680,93957337623984],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<unsigned long, std::__1::unique_ptr<char [], std::__1::default_delete<char []> > >, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<unsigned long, std::__1::unique_ptr<char [], std::__1::default_delete<char []> > >, std::__1::__unordered_map_hasher<unsigned long, std::__1::__hash_value_type<unsigned long, std::__1::unique_ptr<char [], std::__1::default_delete<char []> > >, std::__1::hash<unsigned long>, std::__1::equal_to<unsigned long>, true>, std::__1::__unordered_map_equal<unsigned long, std::__1::__hash_value_type<unsigned long, std::__1::unique_ptr<char [], std::__1::default_delete<char []> > >, std::__1::equal_to<unsigned long>, std::__1::hash<unsigned long>, true>, std::__1::allocator<std::__1::__hash_value_type<unsigned long, std::__1::unique_ptr<char [], std::__1::default_delete<char []> > > > >::__emplace_unique_key_args<unsigned long, std::__1::pair<unsigned long, std::__1::unique_ptr<char [], std::__1::default_delete<char []> > > >(unsigned long const&, std::__1::pair<unsigned long, std::__1::unique_ptr<char [], std::__1::default_delete<char []> > >&&)",93957337626816,93957337627731],["v8::internal::AbstractCode v8::internal::JSFunction::abstract_code<v8::internal::Isolate>(v8::internal::Isolate*)",93957337629120,93957337629208],["v8::internal::IC::TypeError(v8::internal::MessageTemplate, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957337630016,93957337630143],["v8::internal::IC::ConfigureVectorState(v8::internal::Handle<v8::internal::Name>, std::__1::vector<v8::internal::Handle<v8::internal::Map>, std::__1::allocator<v8::internal::Handle<v8::internal::Map> > > const&, std::__1::vector<v8::internal::MaybeObjectHandle, std::__1::allocator<v8::internal::MaybeObjectHandle> >*)",93957337631024,93957337631345],["v8::internal::LoadIC::UpdateCaches(v8::internal::LookupIterator*)",93957337634096,93957337634904],["v8::internal::IC::CopyICToMegamorphicCache(v8::internal::Handle<v8::internal::Name>)",93957337638016,93957337638321],["v8::internal::LoadHandler::LoadApiGetter(v8::internal::Isolate*, bool)",93957337644832,93957337644925],["v8::internal::LoadHandler::LoadNativeDataProperty(v8::internal::Isolate*, int)",93957337645216,93957337645305],["v8::internal::KeyedLoadIC::LoadElementHandler(v8::internal::Handle<v8::internal::Map>, v8::internal::KeyedAccessLoadMode)",93957337646672,93957337648220],["v8::internal::KeyedLoadIC::Load(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957337649008,93957337650338],["v8::internal::LookupIterator::ExtendingNonExtensible(v8::internal::Handle<v8::internal::JSReceiver>)",93957337651920,93957337651994],["v8::internal::StoreIC::Store(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>, v8::internal::StoreOrigin)",93957337653648,93957337655354],["v8::internal::StoreHandler::StoreApiSetter(v8::internal::Isolate*, bool)",93957337659552,93957337659645],["v8::internal::KeyedStoreIC::StoreElementPolymorphicHandlers(std::__1::vector<std::__1::pair<v8::internal::Handle<v8::internal::Map>, v8::internal::MaybeObjectHandle>, std::__1::allocator<std::__1::pair<v8::internal::Handle<v8::internal::Map>, v8::internal::MaybeObjectHandle> > >*, v8::internal::KeyedAccessStoreMode)",93957337662064,93957337663159],["v8::internal::StoreInArrayLiteralIC::Store(v8::internal::Handle<v8::internal::JSArray>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957337665856,93957337666749],["v8::internal::Stats_Runtime_LoadNoFeedbackIC_Miss(int, unsigned long*, v8::internal::Isolate*)",93957337669600,93957337670458],["v8::internal::Stats_Runtime_LoadGlobalIC_Miss(int, unsigned long*, v8::internal::Isolate*)",93957337672336,93957337673413],["v8::internal::Runtime_LoadWithReceiverIC_Miss(int, unsigned long*, v8::internal::Isolate*)",93957337674736,93957337675157],["v8::internal::Runtime_KeyedLoadIC_Miss(int, unsigned long*, v8::internal::Isolate*)",93957337675952,93957337676398],["v8::internal::Runtime_StoreIC_Miss(int, unsigned long*, v8::internal::Isolate*)",93957337677200,93957337677696],["v8::internal::Runtime_StoreGlobalIC_Miss(int, unsigned long*, v8::internal::Isolate*)",93957337678576,93957337679098],["v8::internal::Runtime_StoreGlobalICNoFeedback_Miss(int, unsigned long*, v8::internal::Isolate*)",93957337680000,93957337680345],["v8::internal::Runtime_StoreGlobalIC_Slow(int, unsigned long*, v8::internal::Isolate*)",93957337681072,93957337682090],["v8::internal::Runtime_KeyedStoreIC_Miss(int, unsigned long*, v8::internal::Isolate*)",93957337683472,93957337684163],["v8::internal::Runtime_StoreInArrayLiteralIC_Miss(int, unsigned long*, v8::internal::Isolate*)",93957337685312,93957337685745],["v8::internal::Runtime_KeyedStoreIC_Slow(int, unsigned long*, v8::internal::Isolate*)",93957337686560,93957337686724],["v8::internal::Runtime_StoreInArrayLiteralIC_Slow(int, unsigned long*, v8::internal::Isolate*)",93957337687296,93957337687593],["v8::internal::Runtime_ElementsTransitionAndStoreIC_Miss(int, unsigned long*, v8::internal::Isolate*)",93957337688288,93957337688737],["v8::internal::Runtime_CloneObjectIC_Miss(int, unsigned long*, v8::internal::Isolate*)",93957337689600,93957337691424],["v8::internal::Runtime_StoreCallbackProperty(int, unsigned long*, v8::internal::Isolate*)",93957337693648,93957337693979],["v8::internal::Runtime_LoadPropertyWithInterceptor(int, unsigned long*, v8::internal::Isolate*)",93957337694752,93957337696124],["v8::internal::Runtime_StorePropertyWithInterceptor(int, unsigned long*, v8::internal::Isolate*)",93957337697920,93957337699041],["v8::internal::Runtime_LoadElementWithInterceptor(int, unsigned long*, v8::internal::Isolate*)",93957337700608,93957337701461],["v8::internal::Runtime_KeyedHasIC_Miss(int, unsigned long*, v8::internal::Isolate*)",93957337702704,93957337703150],["v8::internal::Runtime_HasElementWithInterceptor(int, unsigned long*, v8::internal::Isolate*)",93957337703952,93957337704928],["v8::internal::KeyedLoadIC::~KeyedLoadIC()",93957337706288,93957337706339],["v8::internal::StoreHandler::StoreField(v8::internal::Isolate*, v8::internal::StoreHandler::Kind, int, v8::internal::FieldIndex, v8::internal::Representation)",93957337706448,93957337706570],["v8::internal::PropertyCallbackArguments::CallAccessorSetter(v8::internal::Handle<v8::internal::AccessorInfo>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>)",93957337706624,93957337707549],["v8::internal::PropertyCallbackArguments::CallNamedSetter(v8::internal::Handle<v8::internal::InterceptorInfo>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>)",93957337708176,93957337708950],["v8::internal::PropertyCallbackArguments::CallIndexedQuery(v8::internal::Handle<v8::internal::InterceptorInfo>, unsigned int)",93957337709584,93957337710375],["v8::internal::MaybeHandle<v8::internal::Map> std::__1::__function::__policy_invoker<v8::internal::MaybeHandle<v8::internal::Map> (v8::internal::Handle<v8::internal::Map>)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::KeyedStoreIC::UpdateStoreElement(v8::internal::Handle<v8::internal::Map>, v8::internal::KeyedAccessStoreMode, v8::internal::Handle<v8::internal::Map>)::$_1, v8::internal::MaybeHandle<v8::internal::Map> (v8::internal::Handle<v8::internal::Map>)> >(std::__1::__function::__policy_storage const*, v8::internal::Handle<v8::internal::Map>&&)",93957337710400,93957337710420],["v8::internal::StubCache::Initialize()",93957337710480,93957337710662],["v8::internal::SourceCodeCache::Lookup(v8::internal::Isolate*, v8::internal::Vector<char const>, v8::internal::Handle<v8::internal::SharedFunctionInfo>*)",93957337710944,93957337711290],["v8::internal::Bootstrapper::Bootstrapper(v8::internal::Isolate*)",93957337711904,93957337711935],["v8::internal::Bootstrapper::InitializeOncePerProcess()",93957337711984,93957337712546],["v8::internal::Bootstrapper::Iterate(v8::internal::RootVisitor*)",93957337712576,93957337712628],["v8::internal::Bootstrapper::DetachGlobal(v8::internal::Handle<v8::internal::Context>)",93957337713104,93957337713689],["v8::internal::(anonymous namespace)::CreateFunctionForBuiltin(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Map>, v8::internal::Builtins::Name)",93957337714352,93957337714820],["v8::internal::Genesis::GetThrowTypeErrorIntrinsic()",93957337715424,93957337715685],["v8::internal::TextNode::CreateForSurrogatePair(v8::internal::Zone*, v8::internal::CharacterRange, v8::internal::CharacterRange, bool, v8::internal::RegExpNode*, v8::base::Flags<v8::internal::JSRegExp::Flag, int>)",93957339840128,93957339840829],["v8::internal::RegExpCompiler::PreprocessRegExp(v8::internal::RegExpCompileData*, v8::base::Flags<v8::internal::JSRegExp::Flag, int>, bool)",93957339854528,93957339855522],["v8::internal::Analysis<v8::internal::(anonymous namespace)::AssertionPropagator, v8::internal::(anonymous namespace)::EatsAtLeastPropagator>::VisitNegativeLookaroundChoice(v8::internal::NegativeLookaroundChoiceNode*)",93957339860128,93957339860534],["v8::internal::IrregexpInterpreter::Result v8::internal::(anonymous namespace)::RawMatch<unsigned short>(v8::internal::Isolate*, v8::internal::ByteArray, v8::internal::String, v8::internal::Vector<unsigned short const>, int*, int, int, int, unsigned int, v8::internal::RegExp::CallOrigin, unsigned int)",93957339868432,93957339874781],["v8::internal::RegExpMacroAssembler::CaseInsensitiveCompareNonUnicode(unsigned long, unsigned long, unsigned long, v8::internal::Isolate*)",93957339875200,93957339875576],["v8::internal::RegExpMacroAssembler::CheckPosition(int, v8::internal::Label*)",93957339875968,93957339876002],["v8::internal::NativeRegExpMacroAssembler::CheckStackGuardState(v8::internal::Isolate*, int, v8::internal::RegExp::CallOrigin, unsigned long*, v8::internal::Code, unsigned long*, unsigned char const**, unsigned char const**)",93957339876192,93957339876932],["v8::internal::RegExpParser::Advance()",93957339877552,93957339877917],["v8::internal::RegExpParser::ParseDisjunction()",93957339878144,93957339883208],["v8::internal::RegExpBuilder::ToRegExp()",93957339883728,93957339883930],["v8::internal::RegExpParser::GetCapture(int)",93957339884400,93957339884964],["v8::internal::RegExpBuilder::AddCharacterClass(v8::internal::RegExpCharacterClass*)",93957339885216,93957339885377],["v8::internal::RegExpParser::ParseCharacterClass(v8::internal::RegExpBuilder const*)",93957339886800,93957339888471],["v8::internal::RegExpParser::AddPropertyClassRange(v8::internal::ZoneList<v8::internal::CharacterRange>*, bool, v8::internal::ZoneVector<char> const&, v8::internal::ZoneVector<char> const&)",93957339890704,93957339891658],["v8::internal::RegExpBuilder::AddCharacter(unsigned short)",93957339894368,93957339894862],["v8::internal::RegExpParser::ParseUnicodeEscape(unsigned int*)",93957339895280,93957339896232],["v8_inspector::V8Debugger::enable()",93957342532160,93957342532281],["v8_inspector::V8Debugger::interruptAndBreak(int)",93957342533712,93957342533746],["v8_inspector::V8Debugger::stepOutOfFunction(int)",93957342534576,93957342534650],["v8_inspector::V8Debugger::continueToLocation(int, v8_inspector::V8DebuggerScript*, std::__1::unique_ptr<v8_inspector::protocol::Debugger::Location, std::__1::default_delete<v8_inspector::protocol::Debugger::Location> >, v8_inspector::String16 const&)",93957342535072,93957342535656],["v8_inspector::V8Debugger::handleProgramBreak(v8::Local<v8::Context>, v8::Local<v8::Value>, std::__1::vector<int, std::__1::allocator<int> > const&, v8::debug::ExceptionType, bool)",93957342536416,93957342537114],["v8_inspector::V8Debugger::BreakProgramRequested(v8::Local<v8::Context>, std::__1::vector<int, std::__1::allocator<int> > const&)",93957342537376,93957342537397],["v8_inspector::V8Debugger::IsFunctionBlackboxed(v8::Local<v8::debug::Script>, v8::debug::Location const&, v8::debug::Location const&)",93957342537488,93957342537775],["v8_inspector::V8Debugger::AsyncEventOccurred(v8::debug::DebugAsyncActionType, int, bool)",93957342538064,93957342538698],["v8_inspector::String16 v8_inspector::String16::concat<char, v8_inspector::String16, char>(char, v8_inspector::String16, char)",93957342708240,93957342708982],["void std::__1::vector<v8_inspector::String16, std::__1::allocator<v8_inspector::String16> >::__emplace_back_slow_path<char const (&) [17]>(char const (&) [17])",93957342730816,93957342731193],["v8_inspector::(anonymous namespace)::NumberMirror::buildPropertyPreview(v8::Local<v8::Context>, v8_inspector::String16 const&, std::__1::unique_ptr<v8_inspector::protocol::Runtime::PropertyPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::PropertyPreview> >*) const",93957342734944,93957342735319],["v8_inspector::(anonymous namespace)::SymbolMirror::buildPropertyPreview(v8::Local<v8::Context>, v8_inspector::String16 const&, std::__1::unique_ptr<v8_inspector::protocol::Runtime::PropertyPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::PropertyPreview> >*) const",93957342738384,93957342738763],["v8_crdtp::cbor::internals::ReadTokenStart(v8_crdtp::span<unsigned char>, v8_crdtp::cbor::MajorType*, unsigned long*)",93957342742288,93957342742460],["v8_crdtp::cbor::EncodeIndefiniteLengthMapStart()",93957342745328,93957342745336],["v8_crdtp::cbor::EncodeIndefiniteLengthArrayStart()",93957342745392,93957342745400],["v8_crdtp::cbor::EncodeString8(v8_crdtp::span<unsigned char>, std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*)",93957342746000,93957342746058],["v8_crdtp::cbor::EncodeBinary(v8_crdtp::span<unsigned char>, std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*)",93957342748656,93957342748915],["v8_crdtp::cbor::EnvelopeEncoder::EncodeStart(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*)",93957342749184,93957342749635],["v8_crdtp::cbor::NewCBOREncoder(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*, v8_crdtp::Status*)",93957342749776,93957342749852],["v8_crdtp::cbor::CBORTokenizer::ReadNextToken(bool)",93957342749904,93957342750609],["v8_crdtp::cbor::CBORTokenizer::EnterEnvelope()",93957342750656,93957342750671],["v8_crdtp::cbor::CBORTokenizer::GetInt32() const",93957342750688,93957342750704],["v8_crdtp::cbor::CBORTokenizer::GetString8() const",93957342750736,93957342750760],["v8_crdtp::cbor::CBORTokenizer::GetEnvelopeContents() const",93957342750800,93957342750824],["v8::internal::compiler::InstructionSelector::SelectInstructions()",93957342907552,93957342909065],["v8::internal::compiler::StateValueList::PushArgumentsLength()",93957342917904,93957342918165],["v8::internal::compiler::OperandGenerator::DefineAsLocation(v8::internal::compiler::Node*, v8::internal::compiler::LinkageLocation)",93957342937664,93957342937925],["v8::internal::compiler::InstructionSelector::VisitReturn(v8::internal::compiler::Node*)",93957342954848,93957342955380],["v8::internal::compiler::InstructionSelector::VisitParameter(v8::internal::compiler::Node*)",93957342956064,93957342956402],["v8::internal::compiler::InstructionSelector::VisitConstant(v8::internal::compiler::Node*)",93957342958080,93957342958153],["v8::internal::compiler::InstructionSelector::VisitDeoptimizeUnless(v8::internal::compiler::Node*)",93957342958736,93957342959026],["v8::internal::compiler::InstructionSelector::VisitStaticAssert(v8::internal::compiler::Node*)",93957342960064,93957342960155],["v8::internal::compiler::InstructionSelector::VisitRetain(v8::internal::compiler::Node*)",93957342960432,93957342960634],["v8::internal::compiler::InstructionSelector::MarkAsSimd128(v8::internal::compiler::Node*)",93957342960736,93957342960820],["v8::internal::compiler::InstructionSelector::VisitLoadStackCheckOffset(v8::internal::compiler::Node*)",93957342961152,93957342961318],["v8::internal::compiler::InstructionSelector::VisitLoadParentFramePointer(v8::internal::compiler::Node*)",93957342961504,93957342961670],["v8::internal::compiler::InstructionSelector::EmitTableSwitch(v8::internal::compiler::SwitchInfo const&, v8::internal::compiler::InstructionOperand const&)",93957342962160,93957342962804],["v8::internal::compiler::OperandGenerator::DefineAsConstant(v8::internal::compiler::Node*)",93957342963472,93957342963830],["v8::internal::compiler::UnparkedScopeIfNeeded::UnparkedScopeIfNeeded(v8::internal::compiler::JSHeapBroker*, bool)",93957342965360,93957342965451],["v8::internal::compiler::(anonymous namespace)::GetFrameStateDescriptorInternal(v8::internal::Zone*, v8::internal::compiler::FrameState)",93957342965776,93957342966264],["v8::internal::compiler::LinearScanAllocator::PrintRangeOverview(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)",93957343093312,93957343093619],["v8::internal::compiler::SpillRange::TryMerge(v8::internal::compiler::SpillRange*)",93957343095536,93957343095843],["v8::internal::compiler::TopTierRegisterAllocationData::InitializePhiMap(v8::internal::compiler::InstructionBlock const*, v8::internal::compiler::PhiInstruction*)",93957343099152,93957343099879],["v8::internal::compiler::ConstraintBuilder::AllocateFixed(v8::internal::compiler::UnallocatedOperand*, int, bool, bool)",93957343100816,93957343101271],["v8::internal::compiler::ConstraintBuilder::MeetRegisterConstraintsForLastInstructionInBlock(v8::internal::compiler::InstructionBlock const*)",93957343104864,93957343105686],["v8::internal::compiler::LiveRangeBuilder::ComputeLiveOut(v8::internal::compiler::InstructionBlock const*, v8::internal::compiler::TopTierRegisterAllocationData*)",93957343107104,93957343107774],["v8::internal::compiler::LiveRangeBuilder::Define(v8::internal::compiler::LifetimePosition, v8::internal::compiler::InstructionOperand*, void*, v8::internal::compiler::UsePositionHintType, v8::internal::compiler::TopTierRegisterAllocationData::SpillMode)",93957343109008,93957343109712],["v8::internal::compiler::LiveRangeBuilder::ProcessLoopHeader(v8::internal::compiler::InstructionBlock const*, v8::internal::BitVector*)",93957343116928,93957343117682],["v8::internal::compiler::LiveRangeBundle::InsertUses(v8::internal::compiler::UseInterval*)",93957343125824,93957343126149],["v8::internal::compiler::RegisterAllocator::FindOptimalSplitPos(v8::internal::compiler::LifetimePosition, v8::internal::compiler::LifetimePosition)",93957343127376,93957343127567],["v8::internal::compiler::LinearScanAllocator::MaybeUndoPreviousSplit(v8::internal::compiler::LiveRange*)",93957343129200,93957343129621],["v8::internal::compiler::LinearScanAllocator::ReloadLiveRanges(v8::internal::ZoneUnorderedSet<v8::internal::compiler::LinearScanAllocator::RangeWithRegister, v8::internal::compiler::LinearScanAllocator::RangeWithRegister::Hash, v8::internal::compiler::LinearScanAllocator::RangeWithRegister::Equals> const&, v8::internal::compiler::LifetimePosition)",93957343132128,93957343133040],["v8::internal::compiler::LinearScanAllocator::ComputeStateFromManyPredecessors(v8::internal::compiler::InstructionBlock*, v8::internal::ZoneUnorderedSet<v8::internal::compiler::LinearScanAllocator::RangeWithRegister, v8::internal::compiler::LinearScanAllocator::RangeWithRegister::Hash, v8::internal::compiler::LinearScanAllocator::RangeWithRegister::Equals>*)::$_0::operator()(std::__1::function<bool (v8::internal::compiler::TopLevelLiveRange*)>, v8::internal::ZoneUnorderedSet<v8::internal::compiler::LinearScanAllocator::RangeWithRegister, v8::internal::compiler::LinearScanAllocator::RangeWithRegister::Hash, v8::internal::compiler::LinearScanAllocator::RangeWithRegister::Equals>*, bool*) const",93957343137952,93957343138420],["v8::internal::compiler::LinearScanAllocator::AddToInactive(v8::internal::compiler::LiveRange*)",93957343141920,93957343142263],["v8::internal::compiler::LinearScanAllocator::TryReuseSpillForPhi(v8::internal::compiler::TopLevelLiveRange*)",93957343145040,93957343145562],["v8::internal::compiler::LinearScanAllocator::InactiveToActive(std::__1::__tree_const_iterator<v8::internal::compiler::LiveRange*, std::__1::__tree_node<v8::internal::compiler::LiveRange*, void*>*, long>, v8::internal::compiler::LifetimePosition)",93957343145952,93957343146895],["v8::internal::compiler::LinearScanAllocator::TryAllocatePreferredReg(v8::internal::compiler::LiveRange*, v8::internal::Vector<v8::internal::compiler::LifetimePosition> const&)",93957343147936,93957343148286],["v8::internal::compiler::LinearScanAllocator::AllocateBlockedReg(v8::internal::compiler::LiveRange*, v8::internal::compiler::TopTierRegisterAllocationData::SpillMode)",93957343148688,93957343150884],["v8::internal::compiler::LinearScanAllocator::SplitAndSpillIntersecting(v8::internal::compiler::LiveRange*, v8::internal::compiler::TopTierRegisterAllocationData::SpillMode)",93957343151456,93957343152877],["v8::internal::compiler::OperandAssigner::DecideSpillingMode()",93957343153488,93957343153761],["v8::internal::compiler::OperandAssigner::AssignSpillSlots()",93957343154080,93957343154904],["v8::internal::compiler::ReferenceMapPopulator::PopulateReferenceMaps()",93957343156000,93957343157608],["v8::internal::compiler::LiveRangeConnector::CommitSpillsInDeferredBlocks(v8::internal::compiler::TopLevelLiveRange*, v8::internal::compiler::LiveRangeBoundArray*, v8::internal::Zone*)",93957343160272,93957343162912],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<v8::internal::compiler::LinearScanAllocator::RangeWithRegister, void*>*>, bool> std::__1::__hash_table<v8::internal::compiler::LinearScanAllocator::RangeWithRegister, v8::internal::compiler::LinearScanAllocator::RangeWithRegister::Hash, v8::internal::compiler::LinearScanAllocator::RangeWithRegister::Equals, v8::internal::ZoneAllocator<v8::internal::compiler::LinearScanAllocator::RangeWithRegister> >::__emplace_unique_impl<v8::internal::compiler::TopLevelLiveRange* const&, int&>(v8::internal::compiler::TopLevelLiveRange* const&, int&)",93957343166960,93957343167395],["std::__1::__hash_table<v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Map>::hash, v8::internal::Handle<v8::internal::Map>::equal_to, v8::internal::ZoneAllocator<v8::internal::Handle<v8::internal::Map> > >::rehash(unsigned long)",93957343167952,93957343168323],["v8::internal::compiler::LinearScanAllocator::UpdateDeferredFixedRanges(v8::internal::compiler::TopTierRegisterAllocationData::SpillMode, v8::internal::compiler::InstructionBlock*)::$_3::operator()(v8::internal::compiler::LiveRange*) const::{lambda(v8::internal::compiler::LiveRange*, v8::internal::compiler::LiveRange*, std::__1::function<void (v8::internal::compiler::LiveRange*)>)#1}::operator()(v8::internal::compiler::LiveRange*, v8::internal::compiler::LiveRange*, std::__1::function<void (v8::internal::compiler::LiveRange*)>) const",93957343169056,93957343169771],["void std::__1::__function::__policy_invoker<void (v8::internal::compiler::LiveRange*)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::LinearScanAllocator::UpdateDeferredFixedRanges(v8::internal::compiler::TopTierRegisterAllocationData::SpillMode, v8::internal::compiler::InstructionBlock*)::$_3::operator()(v8::internal::compiler::LiveRange*) const::{lambda(v8::internal::compiler::LiveRange*)#2}, void (v8::internal::compiler::LiveRange*)> >(std::__1::__function::__policy_storage const*, v8::internal::compiler::LiveRange*)",93957343169824,93957343169857],["std::__1::vector<v8::internal::SourcePosition, v8::internal::ZoneAllocator<v8::internal::SourcePosition> >::__append(unsigned long, v8::internal::SourcePosition const&)",93957343170320,93957343171570],["std::__1::pair<std::__1::__tree_iterator<v8::internal::compiler::LiveRange*, std::__1::__tree_node<v8::internal::compiler::LiveRange*, void*>*, long>, std::__1::__tree_iterator<v8::internal::compiler::LiveRange*, std::__1::__tree_node<v8::internal::compiler::LiveRange*, void*>*, long> > std::__1::__tree<v8::internal::compiler::LiveRange*, v8::internal::compiler::LinearScanAllocator::UnhandledLiveRangeOrdering, v8::internal::ZoneAllocator<v8::internal::compiler::LiveRange*> >::__equal_range_multi<v8::internal::compiler::LiveRange*>(v8::internal::compiler::LiveRange* const&)",93957343172624,93957343173267],["bool std::__1::__function::__policy_invoker<bool (v8::internal::compiler::TopLevelLiveRange*)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::LinearScanAllocator::ComputeStateFromManyPredecessors(v8::internal::compiler::InstructionBlock*, v8::internal::ZoneUnorderedSet<v8::internal::compiler::LinearScanAllocator::RangeWithRegister, v8::internal::compiler::LinearScanAllocator::RangeWithRegister::Hash, v8::internal::compiler::LinearScanAllocator::RangeWithRegister::Equals>*)::$_1, bool (v8::internal::compiler::TopLevelLiveRange*)> >(std::__1::__function::__policy_storage const*, v8::internal::compiler::TopLevelLiveRange*)",93957343173792,93957343173804],["v8::internal::compiler::MachineOperatorBuilder::Word64AtomicXor(v8::internal::MachineType)",93957344508800,93957344508915],["v8::internal::compiler::Operator1<v8::internal::compiler::StoreRepresentation, v8::internal::compiler::OpEqualTo<v8::internal::compiler::StoreRepresentation>, v8::internal::compiler::OpHash<v8::internal::compiler::StoreRepresentation> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344570016,93957344570086],["v8::internal::compiler::MapInference::Is(v8::internal::Handle<v8::internal::Map>)",93957344574560,93957344574611],["v8::internal::compiler::MemoryLowering::ReduceStore(v8::internal::compiler::Node*, v8::internal::compiler::MemoryLowering::AllocationState const*)",93957344577872,93957344578237],["v8::internal::compiler::MemoryOptimizer::EnqueueUses(v8::internal::compiler::Node*, v8::internal::compiler::MemoryLowering::AllocationState const*)",93957344583984,93957344584315],["std::__1::pair<std::__1::__tree_iterator<std::__1::__value_type<unsigned int, v8::internal::ZoneVector<v8::internal::compiler::MemoryLowering::AllocationState const*> >, std::__1::__tree_node<std::__1::__value_type<unsigned int, v8::internal::ZoneVector<v8::internal::compiler::MemoryLowering::AllocationState const*> >, void*>*, long>, bool> std::__1::__tree<std::__1::__value_type<unsigned int, v8::internal::ZoneVector<v8::internal::compiler::MemoryLowering::AllocationState const*> >, std::__1::__map_value_compare<unsigned int, std::__1::__value_type<unsigned int, v8::internal::ZoneVector<v8::internal::compiler::MemoryLowering::AllocationState const*> >, std::__1::less<unsigned int>, true>, v8::internal::ZoneAllocator<std::__1::__value_type<unsigned int, v8::internal::ZoneVector<v8::internal::compiler::MemoryLowering::AllocationState const*> > > >::__emplace_unique_key_args<unsigned int, std::__1::pair<unsigned int, v8::internal::ZoneVector<v8::internal::compiler::MemoryLowering::AllocationState const*> > >(unsigned int const&, std::__1::pair<unsigned int, v8::internal::ZoneVector<v8::internal::compiler::MemoryLowering::AllocationState const*> >&&)",93957344588448,93957344588764],["v8::internal::compiler::NodeOriginTable::NodeOriginTable(v8::internal::compiler::Graph*)",93957344590544,93957344590623],["v8::internal::compiler::NodeProperties::IsFrameStateEdge(v8::internal::compiler::Edge)",93957344592128,93957344592230],["v8::internal::compiler::NodeProperties::ReplaceValueInputs(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957344593296,93957344593511],["v8::internal::compiler::NodeProperties::ReplaceFrameStateInput(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957344594208,93957344594406],["v8::internal::compiler::NodeProperties::FindFrameStateBefore(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957344595200,93957344595545],["v8::internal::compiler::NodeProperties::GetJSCreateMap(v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::Node*)",93957344596096,93957344597138],["v8::internal::compiler::NodeProperties::CanBeNullOrUndefined(v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957344600080,93957344600299],["v8::internal::compiler::NodeProperties::IsFreshObject(v8::internal::compiler::Node*)",93957344600720,93957344600948],["v8::internal::compiler::Node::AppendUse(v8::internal::compiler::Node::Use*)",93957344601504,93957344601542],["v8::internal::compiler::Node::NullAllInputs()",93957344602336,93957344602472],["v8::internal::compiler::Node::RemoveInput(int)",93957344604224,93957344604758],["v8::internal::compiler::Node::EnsureInputCount(v8::internal::Zone*, int)",93957344605024,93957344605381],["v8::internal::compiler::Node::ReplaceUses(v8::internal::compiler::Node*)",93957344605424,93957344605521],["v8::internal::compiler::Node::OwnedBy(v8::internal::compiler::Node const*, v8::internal::compiler::Node const*) const",93957344605616,93957344605727],["v8::internal::compiler::Node::Print(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, int) const",93957344605984,93957344605996],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Node const&)",93957344606320,93957344606815],["v8::internal::compiler::Node::Uses::const_iterator::operator++(int)",93957344606848,93957344606863],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::IrOpcode::Value)",93957344606912,93957344606976],["v8::internal::compiler::OperationTyper::Merge(v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344607376,93957344607398],["v8::internal::compiler::OperationTyper::AddRanger(double, double, double, double)",93957344608256,93957344608608],["v8::internal::compiler::OperationTyper::MultiplyRanger(double, double, double, double)",93957344608976,93957344609374],["v8::internal::compiler::OperationTyper::ToNumber(v8::internal::compiler::Type)",93957344609504,93957344609818],["v8::internal::compiler::OperationTyper::ToNumeric(v8::internal::compiler::Type)",93957344609952,93957344610079],["v8::internal::compiler::OperationTyper::NumberAcos(v8::internal::compiler::Type)",93957344610400,93957344610411],["v8::internal::compiler::OperationTyper::NumberClz32(v8::internal::compiler::Type)",93957344610528,93957344610545],["v8::internal::compiler::OperationTyper::NumberFloor(v8::internal::compiler::Type)",93957344610592,93957344610696],["v8::internal::compiler::CFGBuilder::ConnectThrow(v8::internal::compiler::Node*)",93957344773168,93957344773376],["v8::internal::compiler::SerializerForBackgroundCompilation::ProcessCalleeForCallOrConstruct(v8::internal::compiler::Callee const&, v8::base::Optional<v8::internal::compiler::Hints>, v8::internal::ZoneVector<v8::internal::compiler::Hints> const&, v8::internal::SpeculationMode, v8::internal::compiler::MissingArgumentsPolicy, v8::internal::compiler::Hints*)",93957344844784,93957344846216],["v8::internal::compiler::SimplifiedLowering::DoJSToNumberOrNumericTruncatesToFloat64(v8::internal::compiler::Node*, v8::internal::compiler::RepresentationSelector*)",93957344888864,93957344891090],["void v8::internal::compiler::RepresentationSelector::VisitBinop<(v8::internal::compiler::Phase)0>(v8::internal::compiler::Node*, v8::internal::compiler::UseInfo, v8::internal::MachineRepresentation, v8::internal::compiler::Type)",93957344937520,93957344937825],["void v8::internal::compiler::RepresentationSelector::VisitObjectState<(v8::internal::compiler::Phase)0>(v8::internal::compiler::Node*)",93957344951248,93957344951633],["void v8::internal::compiler::RepresentationSelector::VisitSpeculativeAdditiveOp<(v8::internal::compiler::Phase)1>(v8::internal::compiler::Node*, v8::internal::compiler::Truncation, v8::internal::compiler::SimplifiedLowering*)",93957344969584,93957344969887],["void v8::internal::compiler::RepresentationSelector::VisitSpeculativeIntegerAdditiveOp<(v8::internal::compiler::Phase)2>(v8::internal::compiler::Node*, v8::internal::compiler::Truncation, v8::internal::compiler::SimplifiedLowering*)",93957345013632,93957345015550],["void v8::internal::compiler::RepresentationSelector::VisitObjectIs<(v8::internal::compiler::Phase)2>(v8::internal::compiler::Node*, v8::internal::compiler::Type, v8::internal::compiler::SimplifiedLowering*)",93957345023952,93957345024378],["v8::internal::compiler::SimplifiedOperatorReducer::Change(v8::internal::compiler::Node*, v8::internal::compiler::Operator const*, v8::internal::compiler::Node*)",93957345037408,93957345037563],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::DynamicCheckMapsParameters const&)",93957345039488,93957345039724],["v8::internal::compiler::SimplifiedOperatorBuilder::SimplifiedOperatorBuilder(v8::internal::Zone*)",93957345040464,93957345040575],["v8::internal::compiler::SimplifiedOperatorBuilder::NumberSin()",93957345040688,93957345040702],["v8::internal::compiler::SimplifiedOperatorBuilder::NumberToString()",93957345040816,93957345040830],["v8::internal::compiler::SimplifiedOperatorBuilder::StringFromSingleCodePoint()",93957345040944,93957345040958],["v8::internal::compiler::SimplifiedOperatorBuilder::PlainPrimitiveToFloat64()",93957345041072,93957345041086],["v8::internal::compiler::SimplifiedOperatorBuilder::ChangeFloat64ToTaggedPointer()",93957345041200,93957345041214],["v8::internal::compiler::SimplifiedOperatorBuilder::ChangeTaggedToBit()",93957345041296,93957345041310],["v8::internal::compiler::SimplifiedOperatorBuilder::TruncateTaggedToBit()",93957345041360,93957345041374],["v8::internal::compiler::SimplifiedOperatorBuilder::ObjectIsArrayBufferView()",93957345041424,93957345041438],["v8::internal::compiler::SimplifiedOperatorBuilder::ObjectIsDetectableCallable()",93957345041488,93957345041502],["v8::internal::compiler::SimplifiedOperatorBuilder::NumberIsNaN()",93957345041552,93957345041566],["v8::internal::compiler::SimplifiedOperatorBuilder::ObjectIsSmi()",93957345041616,93957345041630],["v8::internal::compiler::SimplifiedOperatorBuilder::NumberIsFloat64Hole()",93957345041680,93957345041694],["v8::internal::compiler::SimplifiedOperatorBuilder::ObjectIsSafeInteger()",93957345041744,93957345041758],["v8::internal::compiler::SimplifiedOperatorBuilder::SameValue()",93957345041808,93957345041822],["v8::internal::compiler::SimplifiedOperatorBuilder::StringEqual()",93957345041872,93957345041886],["v8::internal::compiler::SimplifiedOperatorBuilder::NewConsString()",93957345041936,93957345041950],["v8::internal::compiler::SimplifiedOperatorBuilder::StringCharCodeAt()",93957345042000,93957345042014],["v8::internal::compiler::SimplifiedOperatorBuilder::DateNow()",93957345042064,93957345042078],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckInternalizedString()",93957345042128,93957345042142],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckSymbol()",93957345042192,93957345042206],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckedInt32Sub()",93957345042256,93957345042270],["v8::internal::compiler::SimplifiedOperatorBuilder::FindOrderedHashMapEntry()",93957345042304,93957345042318],["v8::internal::compiler::SimplifiedOperatorBuilder::LoadFieldByIndex()",93957345042336,93957345042350],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckSmi(v8::internal::compiler::FeedbackSource const&)",93957345042560,93957345042760],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckBigInt(v8::internal::compiler::FeedbackSource const&)",93957345042976,93957345043176],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckedInt64ToInt32(v8::internal::compiler::FeedbackSource const&)",93957345043392,93957345043592],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckedTaggedToArrayIndex(v8::internal::compiler::FeedbackSource const&)",93957345043808,93957345044008],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckedTaggedToTaggedPointer(v8::internal::compiler::FeedbackSource const&)",93957345044224,93957345044424],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckedUint32ToInt32(v8::internal::compiler::FeedbackSource const&)",93957345044640,93957345044840],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckedUint64ToInt32(v8::internal::compiler::FeedbackSource const&)",93957345045056,93957345045256],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckedUint32Bounds(v8::internal::compiler::FeedbackSource const&, v8::base::Flags<v8::internal::compiler::CheckBoundsFlag, int>)",93957345045472,93957345045665],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckBounds(v8::internal::compiler::FeedbackSource const&, v8::base::Flags<v8::internal::compiler::CheckBoundsFlag, int>)",93957345045888,93957345046115],["v8::internal::compiler::SimplifiedOperatorBuilder::BigIntAsUintN(int)",93957345046256,93957345046425],["v8::internal::compiler::SimplifiedOperatorBuilder::TierUpCheck()",93957345046560,93957345046669],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckIf(v8::internal::DeoptimizeReason, v8::internal::compiler::FeedbackSource const&)",93957345046816,93957345047776],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckedInt32Mul(v8::internal::compiler::CheckForMinusZeroMode)",93957345047840,93957345047889],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckedFloat64ToInt64(v8::internal::compiler::CheckForMinusZeroMode, v8::internal::compiler::FeedbackSource const&)",93957345048208,93957345048502],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckedTaggedToInt64(v8::internal::compiler::CheckForMinusZeroMode, v8::internal::compiler::FeedbackSource const&)",93957345048816,93957345049110],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckedTruncateTaggedToWord32(v8::internal::compiler::CheckTaggedInputMode, v8::internal::compiler::FeedbackSource const&)",93957345049424,93957345049721],["v8::internal::compiler::SimplifiedOperatorBuilder::DynamicCheckMaps(v8::base::Flags<v8::internal::compiler::CheckMapsFlag, int>, v8::internal::Handle<v8::internal::Object>, v8::internal::ZoneHandleSet<v8::internal::Map> const&, v8::internal::compiler::FeedbackSource const&)",93957345049936,93957345050151],["v8::internal::compiler::SimplifiedOperatorBuilder::CompareMaps(v8::internal::ZoneHandleSet<v8::internal::Map>)",93957345050288,93957345050413],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckFloat64Hole(v8::internal::compiler::CheckFloat64HoleMode, v8::internal::compiler::FeedbackSource const&)",93957345050480,93957345050754],["v8::internal::compiler::SimplifiedOperatorBuilder::SpeculativeBigIntSubtract(v8::internal::compiler::BigIntOperationHint)",93957345050896,93957345051021],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckClosure(v8::internal::Handle<v8::internal::FeedbackCell> const&)",93957345051152,93957345051280],["v8::internal::compiler::SimplifiedOperatorBuilder::EnsureWritableFastElements()",93957345051600,93957345051614],["v8::internal::compiler::SimplifiedOperatorBuilder::TransitionElementsKind(v8::internal::compiler::ElementsTransition)",93957345051920,93957345052082],["v8::internal::compiler::SimplifiedOperatorBuilder::RestLength(int)",93957345052224,93957345052364],["v8::internal::compiler::CheckIfParametersOf(v8::internal::compiler::Operator const*)",93957345052448,93957345052493],["v8::internal::compiler::SimplifiedOperatorBuilder::NewSmiOrObjectElements(v8::internal::AllocationType)",93957345052624,93957345052749],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::NewArgumentsElementsParameters const&)",93957345052912,93957345053031],["v8::internal::compiler::SimplifiedOperatorBuilder::AllocateRaw(v8::internal::compiler::Type, v8::internal::AllocationType, v8::internal::AllowLargeObjects)",93957345053216,93957345053385],["v8::internal::compiler::SimplifiedOperatorBuilder::SpeculativeNumberSubtract(v8::internal::compiler::NumberOperationHint)",93957345053488,93957345053570],["v8::internal::compiler::SimplifiedOperatorBuilder::SpeculativeNumberDivide(v8::internal::compiler::NumberOperationHint)",93957345053680,93957345053762],["__sigtimedwait",139871563508480,139871563508735],["qsort_r",139871563511872,139871563512702],["clearenv",139871563514608,139871563514806],["__cxa_atexit",139871563516400,139871563516412],["__cxa_at_quick_exit",139871563517024,139871563517041],["__call_tls_dtors",139871563517264,139871563517364],["imaxabs",139871563517392,139871563517404],["div",139871563517424,139871563517437],["gets",139871563742048,139871563742492],["_IO_popen",139871563744592,139871563744737],["_IO_setbuffer",139871563746160,139871563746501],["__vsscanf",139871563747808,139871563747973],["fgetwc",139871563748416,139871563748677],["getwchar",139871563748736,139871563749052],["fgetws",139871563749120,139871563749516],["fputws",139871563749680,139871563750008],["ungetwc",139871563750976,139871563751221],["putwc_unlocked",139871563751504,139871563751559],["putwchar_unlocked",139871563751920,139871563751975],["putchar_unlocked",139871563752336,139871563752395],["endutxent",139871564533712,139871564533717],["getutmp",139871564533808,139871564533864],["_dl_mcount_wrapper",139871564535360,139871564535383],["__libc_dlopen_mode",139871564535808,139871564535936],["ynf128",139871565673216,139871565673360],["__exp2f128_finite",139871565675728,139871565676187],["f32addf128",139871565704960,139871565705586],["f32xdivf64",139871565707248,139871565707414],["f32divf128",139871565708080,139871565708626],["f64xdivf128",139871565709200,139871565709708],["f32xmulf64",139871565710112,139871565710286],["dmull",139871565710640,139871565710998],["__GI___nptl_death_event",139871566580752,139871566580753],["__make_stacks_executable",139871566582080,139871566582385],["__wait_lookup_done",139871566584176,139871566584656],["__nptl_deallocate_tsd",139871566584880,139871566585203],["__pthread_once_slow",139871566619280,139871566619541],["__pthread_enable_asynccancel",139871566626048,139871566626134],["__lll_lock_wait",139871566626304,139871566626353],["std::__1::pair<std::__1::__tree_iterator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::base::TimeTicks>, std::__1::__tree_node<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::base::TimeTicks>, void*>*, long>, bool> std::__1::__tree<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::base::TimeTicks>, std::__1::__map_value_compare<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::base::TimeTicks>, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::allocator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::base::TimeTicks> > >::__emplace_unique_key_args<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::base::TimeTicks> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::base::TimeTicks>&&)",93957335208912,93957335209381],["v8::MakeDelayedTasksPlatform(std::__1::unique_ptr<v8::Platform, std::__1::default_delete<v8::Platform> >, long)",93957335210736,93957335210901],["v8::InspectorClient::ensureDefaultContextInGroup(int)",93957335306304,93957335306334],["v8::InspectorFrontend::Send(v8_inspector::StringView const&)",93957335306608,93957335306969],["v8::internal::CancelableTask::Run()",93957335307232,93957335307259],["non-virtual thunk to v8::ProcessMessageTask::~ProcessMessageTask()",93957335307296,93957335307417],["v8::internal::LocalEmbedderHeapTracer::ProcessingScope::TracePossibleWrapper(v8::internal::JSObject)",93957336826416,93957336826617],["v8::internal::FactoryBase<v8::internal::Factory>::NewStruct(v8::internal::InstanceType, v8::internal::AllocationType)",93957336827280,93957336827493],["v8::internal::FactoryBase<v8::internal::Factory>::NewFixedArrayWithHoles(int, v8::internal::AllocationType)",93957336828256,93957336828304],["v8::internal::FactoryBase<v8::internal::Factory>::NewByteArray(int, v8::internal::AllocationType)",93957336828800,93957336829013],["v8::internal::FactoryBase<v8::internal::Factory>::NewArrayBoilerplateDescription(v8::internal::ElementsKind, v8::internal::Handle<v8::internal::FixedArrayBase>)",93957336829760,93957336830106],["v8::internal::FactoryBase<v8::internal::Factory>::NewTemplateObjectDescription(v8::internal::Handle<v8::internal::FixedArray>, v8::internal::Handle<v8::internal::FixedArray>)",93957336830576,93957336831010],["v8::internal::FactoryBase<v8::internal::Factory>::NewScriptWithId(v8::internal::Handle<v8::internal::PrimitiveHeapObject>, int)",93957336831072,93957336831568],["v8::internal::FactoryBase<v8::internal::Factory>::NewSharedFunctionInfo(v8::internal::MaybeHandle<v8::internal::String>, v8::internal::MaybeHandle<v8::internal::HeapObject>, int, v8::internal::FunctionKind)",93957336831728,93957336832595],["v8::internal::Factory::NewJSObjectWithNullProto()",93957336884192,93957336884471],["v8::internal::Factory::NewJSArrayBufferView(v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::Handle<v8::internal::JSArrayBuffer>, unsigned long, unsigned long)",93957336896064,93957336896892],["v8::internal::Factory::SizeToString(unsigned long, bool)",93957336904528,93957336904987],["v8::internal::Factory::NewStoreHandler(int)",93957336908144,93957336908354],["v8::internal::Factory::CreateSloppyFunctionMap(v8::internal::FunctionMode, v8::internal::MaybeHandle<v8::internal::JSFunction>)",93957336909920,93957336910605],["v8::internal::Factory::NewJSPromiseWithoutHook()",93957336911968,93957336912333],["v8::internal::Factory::JSFunctionBuilder::Build()",93957336912624,93957336913053],["v8::internal::DescriptorArray::Append(v8::internal::Descriptor*)",93957336914048,93957336914480],["v8::internal::FinalizationRegistryCleanupTask::RunInternal()",93957336914912,93957336915678],["v8::internal::FreeListCategory::Relink(v8::internal::FreeList*)",93957336915744,93957336915767],["v8::internal::FreeList::SearchForNodeInList(int, unsigned long, unsigned long*)",93957336915888,93957336916235],["v8::internal::FreeListMany::~FreeListMany()",93957336916416,93957336916463],["v8::internal::FreeListMany::GetPageForSize(unsigned long)",93957336916560,93957336916693],["v8::internal::FreeListManyCached::FreeListManyCached()",93957336916992,93957336917378],["v8::internal::FreeList::Reset()",93957336917616,93957336917785],["v8::internal::FreeList::AddCategory(v8::internal::FreeListCategory*)",93957336917888,93957336917945],["v8::internal::FixStaleLeftTrimmedHandlesVisitor::VisitRootPointers(v8::internal::Root, char const*, v8::internal::FullObjectSlot, v8::internal::FullObjectSlot)",93957337046944,93957337047041],["v8::internal::ScavengeTaskObserver::Step(int, unsigned long, unsigned long)",93957337047600,93957337047621],["v8::internal::UnreachableObjectsFilter::MarkingVisitor::~MarkingVisitor()",93957337048768,93957337048817],["v8::internal::UnreachableObjectsFilter::MarkingVisitor::VisitEmbeddedPointer(v8::internal::Code, v8::internal::RelocInfo*)",93957337049168,93957337049281],["non-virtual thunk to v8::internal::UnreachableObjectsFilter::MarkingVisitor::~MarkingVisitor()",93957337049552,93957337049601],["non-virtual thunk to v8::internal::UnreachableObjectsFilter::MarkingVisitor::VisitRootPointers(v8::internal::Root, char const*, v8::internal::FullObjectSlot, v8::internal::FullObjectSlot)",93957337049680,93957337049791],["v8::internal::UnreachableObjectsFilter::MarkAsReachable(v8::internal::HeapObject)",93957337049936,93957337050454],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::EphemeronHashTable, std::__1::unordered_set<int, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<int> > >, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::EphemeronHashTable, std::__1::unordered_set<int, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<int> > >, std::__1::__unordered_map_hasher<v8::internal::EphemeronHashTable, std::__1::__hash_value_type<v8::internal::EphemeronHashTable, std::__1::unordered_set<int, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<int> > >, v8::internal::Object::Hasher, std::__1::equal_to<v8::internal::EphemeronHashTable>, true>, std::__1::__unordered_map_equal<v8::internal::EphemeronHashTable, std::__1::__hash_value_type<v8::internal::EphemeronHashTable, std::__1::unordered_set<int, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<int> > >, std::__1::equal_to<v8::internal::EphemeronHashTable>, v8::internal::Object::Hasher, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::EphemeronHashTable, std::__1::unordered_set<int, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<int> > > > >::__emplace_unique_key_args<v8::internal::EphemeronHashTable, std::__1::pair<v8::internal::EphemeronHashTable const, std::__1::unordered_set<int, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<int> > > >(v8::internal::EphemeronHashTable const&, std::__1::pair<v8::internal::EphemeronHashTable const, std::__1::unordered_set<int, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<int> > >&&)",93957337051264,93957337052196],["v8::internal::CodeRangeAddressHint::GetAddressHint(unsigned long)",93957337419056,93957337419481],["v8::internal::MemoryAllocator::ComputeDiscardMemoryArea(unsigned long, unsigned long)",93957337425616,93957337425721],["v8::internal::MemoryChunkLayout::AllocatableMemoryInMemoryChunk(v8::internal::AllocationSpace)",93957337428000,93957337428128],["v8::internal::MemoryChunk::Initialize(v8::internal::BasicMemoryChunk*, v8::internal::Heap*, v8::internal::Executability)",93957337428704,93957337429119],["v8::internal::MemoryChunk::ReleaseSweepingSlotSet()",93957337430016,93957337430125],["void v8::internal::MemoryChunk::ReleaseInvalidatedSlots<(v8::internal::RememberedSetType)0>()",93957337430336,93957337430394],["v8::internal::MemoryChunk::InvalidateRecordedSlots(v8::internal::HeapObject)",93957337430656,93957337430731],["v8::internal::SlotSet* v8::internal::MemoryChunk::AllocateSlotSet<(v8::internal::RememberedSetType)0>()",93957337431264,93957337431440],["v8::internal::TypedSlotSet* v8::internal::MemoryChunk::AllocateTypedSlotSet<(v8::internal::RememberedSetType)1>()",93957337431712,93957337431795],["v8::internal::MeasureMemoryDelegate::~MeasureMemoryDelegate()",93957337431840,93957337431883],["v8::internal::MeasureMemoryDelegate::ShouldMeasure(v8::Local<v8::Context>)",93957337431952,93957337431985],["v8::internal::MemoryMeasurement::MemoryMeasurement(v8::internal::Isolate*)",93957337433184,93957337433310],["v8::internal::MemoryMeasurement::ScheduleGCTask(v8::MeasureMemoryExecution)",93957337433920,93957337434256],["v8::internal::MemoryMeasurement::FinishProcessing(v8::internal::NativeContextStats const&)",93957337434784,93957337435868],["v8::internal::MemoryMeasurement::ReportResults()",93957337436112,93957337437051],["v8::internal::NativeContextInferrer::InferForContext(v8::internal::Isolate*, v8::internal::Context, unsigned long*)",93957337437184,93957337437251],["v8::internal::StressScavengeObserver::StressScavengeObserver(v8::internal::Heap*)",93957337600304,93957337600461],["v8::internal::StressScavengeObserver::HasRequestedGC() const",93957337600880,93957337600889],["v8::internal::StressScavengeObserver::MaxNewSpaceSizeReached() const",93957337601248,93957337601259],["v8::internal::Sweeper::PauseOrCompleteScope::PauseOrCompleteScope(v8::internal::Sweeper*)",93957337601424,93957337601560],["v8::internal::Sweeper::FilterSweepingPagesScope::FilterSweepingPagesScope(v8::internal::Sweeper*, v8::internal::Sweeper::PauseOrCompleteScope const&)",93957337601904,93957337602076],["v8::internal::Sweeper::ScheduleIncrementalSweepingTask()",93957337602432,93957337602655],["v8::internal::Sweeper::EnsureIterabilityCompleted()",93957337603360,93957337603585],["v8::internal::Sweeper::AreSweeperTasksRunning()",93957337604784,93957337604837],["v8::internal::Sweeper::StartIterabilityTasks()",93957337608384,93957337608611],["bool std::__1::__insertion_sort_incomplete<v8::internal::Sweeper::StartSweeping()::$_0::operator()(v8::internal::AllocationSpace) const::{lambda(v8::internal::Page*, v8::internal::Page*)#1}&, v8::internal::Page**>(v8::internal::Page**, v8::internal::Page**, v8::internal::Sweeper::StartSweeping()::$_0::operator()(v8::internal::AllocationSpace) const::{lambda(v8::internal::Page*, v8::internal::Page*)#1}&)",93957337610752,93957337611524],["v8::internal::Sweeper::IncrementalSweeperTask::RunInternal()",93957337613056,93957337613390],["v8::internal::WeakObjects::UpdateNextEphemerons(v8::internal::Worklist<v8::internal::Ephemeron, 64>&)",93957337614752,93957337615671],["v8::internal::CallOptimization::CallOptimization(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)",93957337617824,93957337617997],["v8::internal::CallOptimization::LookupHolderOfExpectedType(v8::internal::Handle<v8::internal::Map>, v8::internal::CallOptimization::HolderLookup*) const",93957337618448,93957337618807],["int v8::internal::(anonymous namespace)::GetHandlerDataSize<v8::internal::LoadHandler>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Smi>*, v8::internal::Handle<v8::internal::Map>, v8::internal::MaybeObjectHandle, v8::internal::MaybeObjectHandle)",93957337619776,93957337620049],["v8::internal::StoreHandler::GetKeyedAccessStoreMode(v8::internal::MaybeObject)",93957337621280,93957337621312],["v8::internal::StoreHandler::StoreGlobal(v8::internal::Handle<v8::internal::PropertyCell>)",93957337623472,93957337623483],["v8::internal::ICStats::End()",93957337624016,93957337624068],["v8::internal::ICStats::GetOrCacheScriptName(v8::internal::Script)",93957337626048,93957337626645],["v8::internal::IC::TraceIC(char const*, v8::internal::Handle<v8::internal::Object>, v8::internal::InlineCacheState, v8::internal::InlineCacheState)",93957337627792,93957337628993],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::assign(char const*)",93957337629104,93957337629114],["v8::internal::IC::ShouldRecomputeHandler(v8::internal::Handle<v8::internal::String>)",93957337629216,93957337629584],["v8::internal::IC::update_lookup_start_object_map(v8::internal::Handle<v8::internal::Object>)",93957337629872,93957337630002],["v8::internal::IC::OnFeedbackChanged(v8::internal::Isolate*, v8::internal::FeedbackVector, v8::internal::FeedbackSlot, char const*)",93957337630144,93957337630684],["v8::internal::IC::ConfigureVectorState(v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Map>, v8::internal::MaybeObjectHandle const&)",93957337630864,93957337631012],["v8::internal::IC::ConfigureVectorState(v8::internal::Handle<v8::internal::Name>, std::__1::vector<std::__1::pair<v8::internal::Handle<v8::internal::Map>, v8::internal::MaybeObjectHandle>, std::__1::allocator<std::__1::pair<v8::internal::Handle<v8::internal::Map>, v8::internal::MaybeObjectHandle> > > const&)",93957337631360,93957337631451],["v8::internal::LoadHandler::LoadSlow(v8::internal::Isolate*)",93957337634000,93957337634086],["v8::internal::LoadGlobalIC::Load(v8::internal::Handle<v8::internal::Name>, bool)",93957337634912,93957337635905],["v8::internal::IC::IsTransitionOfMonomorphicTarget(v8::internal::Map, v8::internal::Map)",93957337637488,93957337638001],["v8::internal::IC::SetCache(v8::internal::Handle<v8::internal::Name>, v8::internal::MaybeObjectHandle const&)",93957337638336,93957337638883],["v8::internal::FunctionTemplateInfo::BreakAtEntry()",93957337644736,93957337644819],["v8::internal::LoadHandler::LoadAccessor(v8::internal::Isolate*, int)",93957337644928,93957337645017],["v8::internal::LoadHandler::LoadNormal(v8::internal::Isolate*)",93957337645120,93957337645206],["v8::internal::MaybeObjectHandle::MaybeObjectHandle(v8::internal::Object, v8::internal::Isolate*)",93957337645312,93957337645412],["v8::internal::KeyedLoadIC::UpdateLoadElement(v8::internal::Handle<v8::internal::HeapObject>, v8::internal::KeyedAccessLoadMode)",93957337645520,93957337646666],["v8::internal::KeyedLoadIC::LoadElementPolymorphicHandlers(std::__1::vector<v8::internal::Handle<v8::internal::Map>, std::__1::allocator<v8::internal::Handle<v8::internal::Map> > >*, std::__1::vector<v8::internal::MaybeObjectHandle, std::__1::allocator<v8::internal::MaybeObjectHandle> >*, v8::internal::KeyedAccessLoadMode)",93957337648224,93957337648626],["v8::internal::(anonymous namespace)::AllowConvertHoleElementToUndefined(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>)",93957337648768,93957337648999],["v8::internal::(anonymous namespace)::TryConvertKey(v8::internal::Handle<v8::internal::Object>, v8::internal::Isolate*, long*, v8::internal::Handle<v8::internal::Name>*)",93957337650352,93957337650631],["v8::internal::PrototypeIterator::PrototypeIterator(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::WhereToStart, v8::internal::PrototypeIterator::WhereToEnd)",93957337651840,93957337651913],["v8::internal::LookupIterator::IsCacheableTransition()",93957337652000,93957337652298],["v8::internal::StoreHandler::StoreSlow(v8::internal::Isolate*, v8::internal::KeyedAccessStoreMode)",93957337653552,93957337653641],["v8::internal::StoreIC::UpdateCaches(v8::internal::LookupIterator*, v8::internal::Handle<v8::internal::Object>, v8::internal::StoreOrigin)",93957337655360,93957337655900],["v8::internal::StoreHandler::StoreNativeDataProperty(v8::internal::Isolate*, int)",93957337659456,93957337659545],["v8::internal::StoreHandler::StoreAccessor(v8::internal::Isolate*, int)",93957337659648,93957337659737],["v8::internal::KeyedStoreIC::StoreElementHandler(v8::internal::Handle<v8::internal::Map>, v8::internal::KeyedAccessStoreMode, v8::internal::MaybeHandle<v8::internal::Object>)",93957337661200,93957337662061],["v8::internal::KeyedStoreIC::Store(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957337663168,93957337665242],["v8::internal::(anonymous namespace)::MayHaveTypedArrayInPrototypeChain(v8::internal::Handle<v8::internal::JSObject>)",93957337665648,93957337665849],["v8::internal::Runtime_LoadIC_Miss(int, unsigned long*, v8::internal::Isolate*)",93957337666752,93957337667703],["v8::internal::Runtime_LoadNoFeedbackIC_Miss(int, unsigned long*, v8::internal::Isolate*)",93957337669088,93957337669589],["v8::internal::Runtime_LoadWithReceiverNoFeedbackIC_Miss(int, unsigned long*, v8::internal::Isolate*)",93957337670464,93957337670856],["v8::internal::Runtime_LoadGlobalIC_Miss(int, unsigned long*, v8::internal::Isolate*)",93957337671648,93957337672332],["v8::internal::Runtime_LoadGlobalIC_Slow(int, unsigned long*, v8::internal::Isolate*)",93957337673424,93957337673901],["v8::internal::TextNode::FilterOneByte(int)",93957339831792,93957339832464],["v8::internal::BoyerMoorePositionInfo::SetInterval(v8::internal::Interval const&)",93957339844432,93957339844797],["v8::internal::BackReferenceNode::FillInBMInfo(v8::internal::Isolate*, int, int, v8::internal::BoyerMooreLookahead*, bool)",93957339852416,93957339852517],["v8::internal::LoopChoiceNode::read_backward()",93957339855632,93957339855641],["v8::internal::Analysis<v8::internal::(anonymous namespace)::AssertionPropagator, v8::internal::(anonymous namespace)::EatsAtLeastPropagator>::VisitChoice(v8::internal::ChoiceNode*)",93957339859392,93957339859734],["v8::internal::Analysis<v8::internal::(anonymous namespace)::AssertionPropagator, v8::internal::(anonymous namespace)::EatsAtLeastPropagator>::VisitAssertion(v8::internal::AssertionNode*)",93957339860720,93957339860902],["v8::internal::IrregexpInterpreter::MatchInternal(v8::internal::Isolate*, v8::internal::ByteArray, v8::internal::String, int*, int, int, int, v8::internal::RegExp::CallOrigin, unsigned int)",93957339861776,93957339862025],["v8::internal::IrregexpInterpreter::MatchForCallFromRuntime(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSRegExp>, v8::internal::Handle<v8::internal::String>, int*, int, int)",93957339874960,93957339874992],["v8::internal::RegExpMacroAssembler::RegExpMacroAssembler(v8::internal::Isolate*, v8::internal::Zone*)",93957339875152,93957339875198],["v8::internal::RegExpMacroAssembler::CaseInsensitiveCompareUnicode(unsigned long, unsigned long, unsigned long, v8::internal::Isolate*)",93957339875584,93957339875739],["v8::internal::RegExpMacroAssembler::LoadCurrentCharacter(int, v8::internal::Label*, bool, int, int)",93957339875936,93957339875961],["v8::internal::NativeRegExpMacroAssembler::NativeRegExpMacroAssembler(v8::internal::Isolate*, v8::internal::Zone*)",93957339876016,93957339876062],["v8::internal::NativeRegExpMacroAssembler::CanReadUnaligned()",93957339876160,93957339876189],["v8::internal::NativeRegExpMacroAssembler::Match(v8::internal::Handle<v8::internal::JSRegExp>, v8::internal::Handle<v8::internal::String>, int*, int, int, v8::internal::Isolate*)",93957339876944,93957339877228],["v8::internal::NativeRegExpMacroAssembler::GrowStack(unsigned long, unsigned long*, v8::internal::Isolate*)",93957339877472,93957339877549],["v8::internal::RegExpParser::Next()",93957339877920,93957339878085],["v8_inspector::(anonymous namespace)::ActualScript::script() const",93957342530640,93957342530673],["v8_inspector::V8Debugger::enabled() const",93957342532816,93957342532829],["v8_inspector::V8Debugger::canBreakProgram()",93957342533648,93957342533665],["v8_inspector::V8Debugger::breakProgramOnAssert(int)",93957342533824,93957342533897],["v8_inspector::V8Debugger::stepOverStatement(int)",93957342534496,93957342534576],["v8_inspector::V8Debugger::currentAsyncParent()",93957342534656,93957342534703],["v8_inspector::V8Debugger::reportTermination()",93957342534944,93957342535060],["v8_inspector::V8Debugger::captureStackTrace(bool)",93957342535664,93957342535954],["std::__1::__unique_if<v8_inspector::(anonymous namespace)::ObjectMirror>::__unique_single std::__1::make_unique<v8_inspector::(anonymous namespace)::ObjectMirror, v8::Local<v8::Value>&, char const (&) [19], v8_inspector::String16>(v8::Local<v8::Value>&, char const (&) [19], v8_inspector::String16&&)",93957342693264,93957342694562],["v8_inspector::(anonymous namespace)::ObjectMirror::buildRemoteObject(v8::Local<v8::Context>, v8_inspector::WrapMode, std::__1::unique_ptr<v8_inspector::protocol::Runtime::RemoteObject, std::__1::default_delete<v8_inspector::protocol::Runtime::RemoteObject> >*) const",93957342712240,93957342713212],["void v8_inspector::String16Builder::appendAll<v8_inspector::String16, v8_inspector::String16, v8_inspector::String16>(v8_inspector::String16, v8_inspector::String16, v8_inspector::String16)",93957342721824,93957342723094],["v8_inspector::protocol::Runtime::ObjectPreview::setDescription(v8_inspector::String16 const&)",93957342731952,93957342732608],["v8_inspector::(anonymous namespace)::descriptionForPrimitiveType(v8::Local<v8::Context>, v8::Local<v8::Value>)",93957342734112,93957342734353],["v8_inspector::protocol::Runtime::RemoteObject::setUnserializableValue(v8_inspector::String16 const&)",93957342735840,93957342736505],["v8_inspector::(anonymous namespace)::descriptionForBigInt(v8::Local<v8::Context>, v8::Local<v8::BigInt>)",93957342737568,93957342737849],["v8_inspector::(anonymous namespace)::FunctionMirror::buildPropertyPreview(v8::Local<v8::Context>, v8_inspector::String16 const&, std::__1::unique_ptr<v8_inspector::protocol::Runtime::PropertyPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::PropertyPreview> >*) const",93957342739744,93957342739990],["v8_inspector::UTF8ToUTF16(char const*, unsigned long)",93957342741136,93957342742286],["v8_crdtp::cbor::internals::WriteTokenStart(v8_crdtp::cbor::MajorType, unsigned long, std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*)",93957342742464,93957342744808],["v8_crdtp::cbor::CheckCBORMessage(v8_crdtp::span<unsigned char>)",93957342745200,93957342745328],["v8_crdtp::cbor::EncodeTrue()",93957342745344,93957342745352],["v8_crdtp::cbor::EncodeNull()",93957342745376,93957342745384],["v8_crdtp::cbor::EncodeStop()",93957342745408,93957342745416],["v8_crdtp::cbor::EncodeString16(v8_crdtp::span<unsigned short>, std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*)",93957342745456,93957342746000],["v8_crdtp::cbor::EncodeFromUTF16(v8_crdtp::span<unsigned short>, std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*)",93957342746064,93957342746183],["std::__1::deque<v8::internal::compiler::DeoptimizationLiteral, v8::internal::RecyclingZoneAllocator<v8::internal::compiler::DeoptimizationLiteral> >::__add_back_capacity()",93957342892976,93957342893727],["v8::internal::compiler::InstructionSelector::Emit(unsigned int, v8::internal::compiler::InstructionOperand, v8::internal::compiler::InstructionOperand, v8::internal::compiler::InstructionOperand, v8::internal::compiler::InstructionOperand, v8::internal::compiler::InstructionOperand, unsigned long, v8::internal::compiler::InstructionOperand*)",93957342911968,93957342912044],["v8::internal::compiler::InstructionSelector::CanUseRootsRegister() const",93957342913184,93957342913205],["v8::internal::compiler::InstructionSelector::AddInputsToFrameStateDescriptor(v8::internal::compiler::StateValueList*, v8::internal::ZoneVector<v8::internal::compiler::InstructionOperand>*, v8::internal::compiler::OperandGenerator*, v8::internal::compiler::StateObjectDeduplicator*, v8::internal::compiler::Node*, v8::internal::compiler::FrameStateInputKind, v8::internal::Zone*)",93957342918800,93957342920144],["v8::internal::compiler::InstructionSelector::AppendDeoptimizeArguments(v8::internal::ZoneVector<v8::internal::compiler::InstructionOperand>*, v8::internal::DeoptimizeKind, v8::internal::DeoptimizeReason, v8::internal::compiler::FeedbackSource const&, v8::internal::compiler::FrameState)",93957342927136,93957342927977],["v8::internal::compiler::OperandGenerator::UsePointerLocation(v8::internal::compiler::LinkageLocation, v8::internal::compiler::LinkageLocation)",93957342938208,93957342938579],["v8::internal::compiler::InstructionSelector::VisitTailCall(v8::internal::compiler::Node*)",93957342952896,93957342954624],["v8::internal::compiler::InstructionSelector::MarkAsWord32(v8::internal::compiler::Node*)",93957342955584,93957342955668],["v8::internal::compiler::InstructionSelector::EmitIdentity(v8::internal::compiler::Node*)",93957342955952,93957342956054],["v8::internal::compiler::InstructionSelector::VisitOsrValue(v8::internal::compiler::Node*)",93957342956416,93957342956521],["v8::internal::compiler::InstructionSelector::VisitProjection(v8::internal::compiler::Node*)",93957342957616,93957342958070],["v8::internal::compiler::InstructionSelector::MarkAsFloat32(v8::internal::compiler::Node*)",93957342958160,93957342958244],["v8::internal::compiler::InstructionSelector::VisitDeoptimizeIf(v8::internal::compiler::Node*)",93957342958352,93957342958721],["v8::internal::compiler::InstructionSelector::VisitDynamicCheckMapsWithDeoptUnless(v8::internal::compiler::Node*)",93957342959040,93957342959772],["v8::internal::compiler::InstructionSelector::VisitTrapUnless(v8::internal::compiler::Node*, v8::internal::compiler::TrapId)",93957342959920,93957342960058],["v8::internal::compiler::InstructionSelector::VisitDeadValue(v8::internal::compiler::Node*)",93957342960160,93957342960327],["v8::internal::compiler::SpillRange::SpillRange(v8::internal::compiler::TopLevelLiveRange*, v8::internal::Zone*)",93957343094576,93957343095532],["v8::internal::compiler::TopTierRegisterAllocationData::TopTierRegisterAllocationData(v8::internal::RegisterConfiguration const*, v8::internal::Zone*, v8::internal::compiler::Frame*, v8::internal::compiler::InstructionSequence*, v8::base::Flags<v8::internal::compiler::RegisterAllocationFlag, int>, v8::internal::TickCounter*, char const*)",93957343095856,93957343098656],["v8::internal::compiler::TopTierRegisterAllocationData::GetOrCreateLiveRangeFor(int)",93957343098832,93957343099151],["v8::internal::compiler::TopTierRegisterAllocationData::ExistsUseWithoutDefinition()",93957343099888,93957343100375],["v8::internal::compiler::TopTierRegisterAllocationData::IsBlockBoundary(v8::internal::compiler::LifetimePosition) const",93957343100736,93957343100806],["v8::internal::compiler::ConstraintBuilder::MeetRegisterConstraints()",93957343101280,93957343101466],["v8::internal::compiler::ConstraintBuilder::MeetConstraintsAfter(int)",93957343103520,93957343104860],["v8::internal::compiler::ConstraintBuilder::ResolvePhis()",93957343105696,93957343105824],["v8::internal::compiler::LiveRangeBuilder::LiveRangeBuilder(v8::internal::compiler::TopTierRegisterAllocationData*, v8::internal::Zone*)",93957343107056,93957343107093],["v8::internal::compiler::LiveRangeBuilder::AddInitialIntervals(v8::internal::compiler::InstructionBlock const*, v8::internal::BitVector*)",93957343107776,93957343108181],["v8::internal::compiler::LiveRangeBuilder::FixedFPLiveRangeFor(int, v8::internal::MachineRepresentation, v8::internal::compiler::TopTierRegisterAllocationData::SpillMode)",93957343108544,93957343109006],["v8::internal::compiler::LiveRangeBuilder::Use(v8::internal::compiler::LifetimePosition, v8::internal::compiler::LifetimePosition, v8::internal::compiler::InstructionOperand*, void*, v8::internal::compiler::UsePositionHintType, v8::internal::compiler::TopTierRegisterAllocationData::SpillMode)",93957343109712,93957343110257],["v8::internal::compiler::LiveRangeBuilder::ProcessPhis(v8::internal::compiler::InstructionBlock const*, v8::internal::BitVector*)",93957343115872,93957343116920],["v8::internal::compiler::LiveRangeBuilder::BuildLiveRanges()",93957343117696,93957343118593],["v8::internal::compiler::LiveRangeBundle::TryMerge(v8::internal::compiler::LiveRangeBundle*, v8::internal::compiler::LiveRangeBundle*, bool)",93957343124800,93957343125810],["v8::internal::compiler::LiveRangeBundle::MergeSpillRangesAndClear()",93957343126160,93957343126418],["v8::internal::compiler::RegisterAllocator::Spill(v8::internal::compiler::LiveRange*, v8::internal::compiler::TopTierRegisterAllocationData::SpillMode)",93957343126960,93957343127368],["v8::internal::compiler::RegisterAllocator::SplitRangeAt(v8::internal::compiler::LiveRange*, v8::internal::compiler::LifetimePosition)",93957343127568,93957343127872],["v8::internal::compiler::LinearScanAllocator::LinearScanAllocator(v8::internal::compiler::TopTierRegisterAllocationData*, v8::internal::compiler::RegisterKind, v8::internal::Zone*)",93957343128464,93957343129189],["v8::internal::compiler::LinearScanAllocator::SpillNotLiveRanges(v8::internal::ZoneUnorderedSet<v8::internal::compiler::LinearScanAllocator::RangeWithRegister, v8::internal::compiler::LinearScanAllocator::RangeWithRegister::Hash, v8::internal::compiler::LinearScanAllocator::RangeWithRegister::Equals>*, v8::internal::compiler::LifetimePosition, v8::internal::compiler::TopTierRegisterAllocationData::SpillMode)",93957343129632,93957343131112],["v8::internal::compiler::LinearScanAllocator::SetLiveRangeAssignedRegister(v8::internal::compiler::LiveRange*, int)",93957343131808,93957343132123],["v8::internal::compiler::LinearScanAllocator::AddToActive(v8::internal::compiler::LiveRange*)",93957343133040,93957343133870],["v8::internal::compiler::LinearScanAllocator::ComputeStateFromManyPredecessors(v8::internal::compiler::InstructionBlock*, v8::internal::ZoneUnorderedSet<v8::internal::compiler::LinearScanAllocator::RangeWithRegister, v8::internal::compiler::LinearScanAllocator::RangeWithRegister::Hash, v8::internal::compiler::LinearScanAllocator::RangeWithRegister::Equals>*)",93957343136064,93957343137952],["v8::internal::compiler::LinearScanAllocator::UpdateDeferredFixedRanges(v8::internal::compiler::TopTierRegisterAllocationData::SpillMode, v8::internal::compiler::InstructionBlock*)",93957343138432,93957343139015],["v8::internal::compiler::LinearScanAllocator::AllocateRegisters()",93957343139456,93957343141918],["v8::internal::compiler::LinearScanAllocator::ForwardStateTo(v8::internal::compiler::LifetimePosition)",93957343142272,93957343144718],["v8::internal::compiler::MachineOperatorBuilder::PoisonedLoad(v8::internal::MachineType)",93957344485936,93957344486326],["v8::internal::compiler::MachineOperatorBuilder::I32x4ExtractLane(int)",93957344509776,93957344509918],["v8::internal::compiler::Operator1<v8::internal::compiler::LoadTransformParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::LoadTransformParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::LoadTransformParameters> >::Equals(v8::internal::compiler::Operator const*) const",93957344569456,93957344569504],["v8::internal::compiler::Operator1<v8::internal::compiler::S128ImmediateParameter, v8::internal::compiler::OpEqualTo<v8::internal::compiler::S128ImmediateParameter>, v8::internal::compiler::OpHash<v8::internal::compiler::S128ImmediateParameter> >::HashCode() const",93957344570672,93957344570708],["v8::internal::compiler::MapInference::AllOfInstanceTypesAre(v8::internal::InstanceType) const",93957344573856,93957344573965],["v8::internal::compiler::MapInference::RelyOnMapsPreferStability(v8::internal::compiler::CompilationDependencies*, v8::internal::compiler::JSGraph*, v8::internal::compiler::Effect*, v8::internal::compiler::Control, v8::internal::compiler::FeedbackSource const&)",93957344575328,93957344575554],["v8::internal::compiler::MemoryLowering::ReduceLoadField(v8::internal::compiler::Node*)",93957344576448,93957344576616],["v8::internal::compiler::MemoryLowering::AllocationState::AllocationState()",93957344581920,93957344581948],["v8::internal::compiler::(anonymous namespace)::WriteBarrierAssertFailed(v8::internal::compiler::Node*, v8::internal::compiler::Node*, char const*, v8::internal::Zone*)",93957344582560,93957344583723],["v8::internal::compiler::MemoryOptimizer::VisitAllocateRaw(v8::internal::compiler::Node*, v8::internal::compiler::MemoryLowering::AllocationState const*)",93957344584656,93957344585132],["v8::internal::compiler::(anonymous namespace)::SearchAllocatingNode(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::Zone*)",93957344586960,93957344588407],["v8::internal::compiler::NodeMatcher::IsComparison() const",93957344588800,93957344588820],["v8::internal::compiler::ObserveNodeManager::OnNodeChanged(char const*, v8::internal::compiler::Node const*, v8::internal::compiler::Node const*)",93957344589376,93957344590258],["v8::internal::compiler::NodeOriginTable::GetNodeOrigin(v8::internal::compiler::Node*) const",93957344590720,93957344590808],["std::__1::vector<v8::internal::compiler::NodeOrigin, v8::internal::ZoneAllocator<v8::internal::compiler::NodeOrigin> >::__append(unsigned long, v8::internal::compiler::NodeOrigin const&)",93957344591504,93957344592080],["v8::internal::compiler::NodeProperties::IsControlEdge(v8::internal::compiler::Edge)",93957344592368,93957344592492],["v8::internal::compiler::NodeProperties::ReplaceValueInput(v8::internal::compiler::Node*, v8::internal::compiler::Node*, int)",93957344593088,93957344593294],["v8::internal::compiler::NodeProperties::ReplaceContextInput(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957344593520,93957344593704],["v8::internal::compiler::NodeProperties::ReplaceEffectInput(v8::internal::compiler::Node*, v8::internal::compiler::Node*, int)",93957344593968,93957344594206],["v8::internal::compiler::NodeProperties::RemoveNonValueInputs(v8::internal::compiler::Node*)",93957344594416,93957344594432],["v8::internal::compiler::NodeProperties::ReplaceUses(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957344594528,93957344595185],["v8::internal::compiler::NodeProperties::FindProjection(v8::internal::compiler::Node*, unsigned long)",93957344595552,93957344595659],["v8::internal::compiler::NodeProperties::CollectControlProjections(v8::internal::compiler::Node*, v8::internal::compiler::Node**, unsigned long)",93957344595792,93957344596096],["v8::internal::compiler::NodeProperties::InferMapsUnsafe(v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::ZoneHandleSet<v8::internal::Map>*)",93957344597152,93957344599604],["v8::internal::compiler::NodeProperties::CanBePrimitive(v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957344599776,93957344600073],["v8::internal::compiler::NodeProperties::GetOuterContext(v8::internal::compiler::Node*, unsigned long*)",93957344600304,93957344600505],["v8::internal::compiler::NodeProperties::AllValueInputsAreTyped(v8::internal::compiler::Node*)",93957344600544,93957344600712],["v8::internal::compiler::NodeProperties::HashCode(v8::internal::compiler::Node*)",93957344600960,93957344601185],["v8::internal::compiler::Node::RemoveUse(v8::internal::compiler::Node::Use*)",93957344601456,93957344601499],["v8::internal::compiler::Node::New(v8::internal::Zone*, unsigned int, v8::internal::compiler::Operator const*, int, v8::internal::compiler::Node* const*, bool)",93957344601552,93957344601562],["v8::internal::compiler::Node::Clone(v8::internal::Zone*, unsigned int, v8::internal::compiler::Node const*)",93957344602256,93957344602332],["v8::internal::compiler::Node::AppendInput(v8::internal::Zone*, v8::internal::compiler::Node*)",93957344602480,93957344603557],["v8::internal::compiler::Scheduler::UpdatePlacement(v8::internal::compiler::Node*, v8::internal::compiler::Scheduler::Placement)",93957344758144,93957344758639],["v8::internal::compiler::Hints::AddVirtualBoundFunction(v8::internal::compiler::VirtualBoundFunction const&, v8::internal::Zone*, v8::internal::compiler::JSHeapBroker*)",93957344796272,93957344796991],["v8::internal::compiler::SerializerForBackgroundCompilation::VisitStaGlobal(v8::internal::interpreter::BytecodeArrayIterator*)",93957344832560,93957344832751],["v8::internal::compiler::SerializerForBackgroundCompilation::ProcessHintsForObjectGetPrototype(v8::internal::compiler::Hints const&)",93957344867664,93957344867929],["v8::internal::compiler::RepresentationSelector::ConvertInput(v8::internal::compiler::Node*, int, v8::internal::compiler::UseInfo, v8::internal::compiler::Type)",93957344885456,93957344885951],["v8::internal::compiler::SimplifiedLowering::Int32Sign(v8::internal::compiler::Node*)",93957344899216,93957344899576],["v8::internal::compiler::RepresentationSelector::RunLowerPhase(v8::internal::compiler::SimplifiedLowering*)",93957344908944,93957344909417],["void v8::internal::compiler::RepresentationSelector::VisitFloat64Binop<(v8::internal::compiler::Phase)0>(v8::internal::compiler::Node*)",93957344940928,93957344941249],["v8::internal::compiler::RepresentationSelector::WriteBarrierKindFor(v8::internal::compiler::BaseTaggedness, v8::internal::MachineRepresentation, v8::internal::compiler::Type, v8::internal::MachineRepresentation, v8::internal::compiler::Node*)",93957344949328,93957344949694],["void v8::internal::compiler::RepresentationSelector::VisitJSWasmCall<(v8::internal::compiler::Phase)0>(v8::internal::compiler::Node*, v8::internal::compiler::SimplifiedLowering*)",93957344954176,93957344955484],["v8::internal::compiler::RepresentationSelector::PrintNodeFeedbackType(v8::internal::compiler::Node*)",93957344967792,93957344968702],["void v8::internal::compiler::RepresentationSelector::VisitCheckBounds<(v8::internal::compiler::Phase)1>(v8::internal::compiler::Node*, v8::internal::compiler::SimplifiedLowering*)",93957344971568,93957344972002],["void v8::internal::compiler::RepresentationSelector::VisitPhi<(v8::internal::compiler::Phase)2>(v8::internal::compiler::Node*, v8::internal::compiler::Truncation, v8::internal::compiler::SimplifiedLowering*)",93957345012544,93957345012983],["void v8::internal::compiler::RepresentationSelector::VisitInt64Binop<(v8::internal::compiler::Phase)2>(v8::internal::compiler::Node*)",93957345016736,93957345016893],["void v8::internal::compiler::RepresentationSelector::VisitNoop<(v8::internal::compiler::Phase)2>(v8::internal::compiler::Node*, v8::internal::compiler::Truncation)",93957345021136,93957345021596],["void v8::internal::compiler::RepresentationSelector::VisitReturn<(v8::internal::compiler::Phase)2>(v8::internal::compiler::Node*)",93957345027648,93957345027954],["v8::internal::compiler::SimplifiedOperatorReducer::SimplifiedOperatorReducer(v8::internal::compiler::AdvancedReducer::Editor*, v8::internal::compiler::JSGraph*, v8::internal::compiler::JSHeapBroker*)",93957345031888,93957345031916],["v8::internal::compiler::SimplifiedOperatorReducer::reducer_name() const",93957345037856,93957345037869],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::ObjectAccess const&)",93957345039008,93957345039187],["v8::internal::compiler::DoubleMapParameterOf(v8::internal::compiler::Operator const*)",93957345039872,93957345039917],["v8::internal::compiler::AllocationTypeOf(v8::internal::compiler::Operator const*)",93957345040288,93957345040323],["v8::internal::compiler::SimplifiedOperatorBuilder::NumberLog2()",93957345040592,93957345040606],["v8::internal::compiler::SimplifiedOperatorBuilder::NumberRound()",93957345040656,93957345040670],["v8::internal::compiler::SimplifiedOperatorBuilder::NumberSqrt()",93957345040720,93957345040734],["v8::internal::compiler::SimplifiedOperatorBuilder::NumberToBoolean()",93957345040784,93957345040798],["v8::internal::compiler::SimplifiedOperatorBuilder::NumberToUint8Clamped()",93957345040848,93957345040862],["v8::internal::compiler::SimplifiedOperatorBuilder::StringToNumber()",93957345040912,93957345040926],["v8::internal::compiler::SimplifiedOperatorBuilder::StringLength()",93957345040976,93957345040990],["v8::internal::compiler::SimplifiedOperatorBuilder::PlainPrimitiveToNumber()",93957345041040,93957345041054],["v8::internal::compiler::SimplifiedOperatorBuilder::ChangeTaggedSignedToInt64()",93957345041104,93957345041118],["v8::internal::compiler::SimplifiedOperatorBuilder::ChangeTaggedToFloat64()",93957345041168,93957345041182],["v8::internal::compiler::SimplifiedOperatorBuilder::ChangeInt32ToTagged()",93957345041232,93957345041246],["v8::internal::compiler::SimplifiedOperatorBuilder::ChangeUint64ToTagged()",93957345041280,93957345041294],["v8::internal::compiler::SimplifiedOperatorBuilder::ChangeBitToTagged()",93957345041312,93957345041326],["v8::internal::compiler::SimplifiedOperatorBuilder::ChangeUint64ToBigInt()",93957345041344,93957345041358],["v8::internal::compiler::SimplifiedOperatorBuilder::TruncateTaggedPointerToBit()",93957345041376,93957345041390],["v8::internal::compiler::SimplifiedOperatorBuilder::TruncateTaggedToFloat64()",93957345041408,93957345041422],["v8::internal::compiler::SimplifiedOperatorBuilder::ObjectIsBigInt()",93957345041440,93957345041454],["v8::internal::compiler::SimplifiedOperatorBuilder::ObjectIsConstructor()",93957345041472,93957345041486],["v8::internal::compiler::SimplifiedOperatorBuilder::ObjectIsMinusZero()",93957345041504,93957345041518],["v8::internal::compiler::SimplifiedOperatorBuilder::ObjectIsNaN()",93957345041536,93957345041550],["v8::internal::compiler::SimplifiedOperatorBuilder::ObjectIsNonCallable()",93957345041568,93957345041582],["v8::internal::compiler::SimplifiedOperatorBuilder::ObjectIsReceiver()",93957345041600,93957345041614],["v8::internal::compiler::SimplifiedOperatorBuilder::ObjectIsString()",93957345041632,93957345041646],["v8::internal::compiler::SimplifiedOperatorBuilder::ObjectIsUndetectable()",93957345041664,93957345041678],["v8::internal::compiler::SimplifiedOperatorBuilder::NumberIsFinite()",93957345041696,93957345041710],["v8::internal::compiler::SimplifiedOperatorBuilder::NumberIsInteger()",93957345041728,93957345041742],["v8::internal::compiler::SimplifiedOperatorBuilder::NumberIsSafeInteger()",93957345041760,93957345041774],["v8::internal::compiler::SimplifiedOperatorBuilder::ConvertTaggedHoleToUndefined()",93957345041792,93957345041806],["v8::internal::compiler::SimplifiedOperatorBuilder::SameValueNumbersOnly()",93957345041824,93957345041838],["v8::internal::compiler::SimplifiedOperatorBuilder::ReferenceEqual()",93957345041856,93957345041870],["v8::internal::compiler::SimplifiedOperatorBuilder::StringLessThan()",93957345041888,93957345041902],["v8::internal::compiler::SimplifiedOperatorBuilder::ToBoolean()",93957345041920,93957345041934],["v8::internal::compiler::SimplifiedOperatorBuilder::PoisonIndex()",93957345041952,93957345041966],["v8::internal::compiler::SimplifiedOperatorBuilder::BigIntSubtract()",93957345041984,93957345041998],["v8::internal::compiler::SimplifiedOperatorBuilder::StringCodePointAt()",93957345042016,93957345042030],["v8::internal::compiler::SimplifiedOperatorBuilder::StringSubstring()",93957345042048,93957345042062],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckEqualsInternalizedString()",93957345042080,93957345042094],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckHeapObject()",93957345042112,93957345042126],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckNotTaggedHole()",93957345042144,93957345042158],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckReceiverOrNullOrUndefined()",93957345042176,93957345042190],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckedInt32Add()",93957345042208,93957345042222],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckedInt32Mod()",93957345042240,93957345042254],["v8::internal::compiler::SimplifiedOperatorBuilder::CheckedUint32Div()",93957345042272,93957345042286],["siggetmask",139871563507920,139871563507927],["sigrelse",139871563509056,139871563509172],["atoll",139871563509712,139871563509724],["getenv",139871563512720,139871563512933],["unsetenv",139871563514256,139871563514601],["__libc_secure_getenv",139871563514816,139871563514843],["on_exit",139871563515520,139871563515796],["__cxa_finalize",139871563516416,139871563516984],["_IO_getline",139871563742032,139871563742040],["_IO_padn",139871563742496,139871563742804],["_IO_proc_open",139871563743568,139871563744579],["_IO_puts",139871563744752,139871563745224],["_IO_seekpos",139871563745920,139871563746157],["_IO_setvbuf",139871563746512,139871563747075],["_IO_vsprintf",139871563747616,139871563747795],["fputwc",139871563747984,139871563748277],["ptsname_r",139871564533584,139871564533650],["getutxline",139871564533744,139871564533749],["updwtmpx",139871564533792,139871564533797],["dl_iterate_phdr",139871564533872,139871564534371],["exp2f128",139871565672272,139871565672461],["powf128",139871565673744,139871565674234],["lgammaf128_r",139871565675360,139871565675533],["f32addf32x",139871565703536,139871565703973],["daddl",139871565704544,139871565704954],["f32xaddf128",139871565705600,139871565706242],["f32divf32x",139871565706864,139871565707237],["f32divf64x",139871565707424,139871565707742],["__GI___nptl_create_event",139871566580736,139871566580737],["free_stacks",139871566580816,139871566580993],["__nptl_stacks_freeres",139871566581776,139871566581783],["__nptl_setxid_error",139871566583056,139871566583105],["__GI___pthread_cleanup_upto",139871566625888,139871566626036],["__pthread_disable_asynccancel",139871566626144,139871566626233],["std::__1::__tree<v8_inspector::String16, std::__1::less<v8_inspector::String16>, std::__1::allocator<v8_inspector::String16> >::destroy(std::__1::__tree_node<v8_inspector::String16, void*>*)",93957335208576,93957335208642],["void std::__1::__tree_balance_after_insert<std::__1::__tree_node_base<void*>*>(std::__1::__tree_node_base<void*>*, std::__1::__tree_node_base<void*>*)",93957335209392,93957335209743],["v8::InspectorClient::SendInspectorMessage(v8::FunctionCallbackInfo<v8::Value> const&)",93957335305392,93957335305796],["v8::InspectorFrontend::~InspectorFrontend()",93957335306352,93957335306400],["v8::InspectorFrontend::sendNotification(std::__1::unique_ptr<v8_inspector::StringBuffer, std::__1::default_delete<v8_inspector::StringBuffer> >)",93957335306528,93957335306596],["v8::ProcessMessageTask::~ProcessMessageTask()",93957335306976,93957335307096],["v8::internal::LocalEmbedderHeapTracer::EnterFinalPause()",93957336825696,93957336825737],["v8::internal::Handle<v8::internal::HeapNumber> v8::internal::FactoryBase<v8::internal::LocalFactory>::NewHeapNumber<(v8::internal::AllocationType)1>()",93957336826912,93957336827041],["v8::internal::Handle<v8::internal::String> v8::internal::FactoryBase<v8::internal::LocalFactory>::InternalizeStringWithKey<v8::internal::SequentialStringKey<unsigned char> >(v8::internal::SequentialStringKey<unsigned char>*)",93957336827216,93957336827246],["v8::internal::FactoryBase<v8::internal::Factory>::NewAccessorPair()",93957336827648,93957336827874],["v8::internal::FactoryBase<v8::internal::Factory>::NewFixedArrayWithMap(v8::internal::Handle<v8::internal::Map>, int, v8::internal::AllocationType)",93957336828224,93957336828244],["v8::internal::FactoryBase<v8::internal::Factory>::NewFixedDoubleArray(int, v8::internal::AllocationType)",93957336828304,93957336828487],["v8::internal::FactoryBase<v8::internal::Factory>::NewWeakFixedArray(int, v8::internal::AllocationType)",93957336828752,93957336828791],["v8::internal::FactoryBase<v8::internal::Factory>::NewBytecodeArray(int, unsigned char const*, int, int, v8::internal::Handle<v8::internal::FixedArray>)",93957336829024,93957336829608],["v8::internal::Factory::CopyAndTenureFixedCOWArray(v8::internal::Handle<v8::internal::FixedArray>)",93957336878480,93957336878526],["v8::internal::Factory::NewJSArrayStorage(v8::internal::ElementsKind, int, v8::internal::ArrayStorageAllocationMode)",93957336887392,93957336887684],["v8::internal::Factory::NewJSAsyncFromSyncIterator(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::Object>)",93957336894352,93957336895038],["v8::internal::Factory::NewUninitializedJSGlobalProxy(int)",93957336900432,93957336900844],["v8::internal::Factory::SmiToString(v8::internal::Smi, v8::internal::NumberCacheMode)",93957336902544,93957336903537],["v8::internal::Factory::NewBreakPointInfo(int)",93957336905488,93957336905616],["v8::internal::Factory::ObjectLiteralMapFromCache(v8::internal::Handle<v8::internal::NativeContext>, int)",93957336907216,93957336908007],["v8::internal::Factory::SetRegExpIrregexpData(v8::internal::Handle<v8::internal::JSRegExp>, v8::internal::Handle<v8::internal::String>, v8::base::Flags<v8::internal::JSRegExp::Flag, int>, int, unsigned int)",93957336908768,93957336909176],["v8::internal::Factory::ToPrimitiveHintString(v8::internal::ToPrimitiveHint)",93957336909872,93957336909914],["v8::internal::Map::AppendDescriptor(v8::internal::Isolate*, v8::internal::Descriptor*)",93957336910608,93957336910929],["v8::internal::Factory::CreateClassFunctionMap(v8::internal::Handle<v8::internal::JSFunction>)",93957336911536,93957336911953],["v8::internal::Factory::NewJSPromise()",93957336912336,93957336912382],["v8::internal::Factory::CanAllocateInReadOnlySpace()",93957336912592,93957336912612],["v8::internal::Factory::JSFunctionBuilder::JSFunctionBuilder(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::Context>)",93957336913056,93957336913084],["v8::internal::Factory::JSFunctionBuilder::BuildRaw(v8::internal::Handle<v8::internal::Code>)",93957336913216,93957336914047],["v8::internal::DescriptorArray::Set(v8::internal::InternalIndex, v8::internal::Name, v8::internal::MaybeObject, v8::internal::PropertyDetails)",93957336914480,93957336914840],["unsigned int std::__1::__sort5<v8::internal::(anonymous namespace)::ReportDuplicates(int, std::__1::vector<v8::internal::HeapObject, std::__1::allocator<v8::internal::HeapObject> >*)::$_6&, v8::internal::HeapObject*>(v8::internal::HeapObject*, v8::internal::HeapObject*, v8::internal::HeapObject*, v8::internal::HeapObject*, v8::internal::HeapObject*, v8::internal::(anonymous namespace)::ReportDuplicates(int, std::__1::vector<v8::internal::HeapObject, std::__1::allocator<v8::internal::HeapObject> >*)::$_6&)",93957337043328,93957337043708],["v8::internal::PagedSpace::~PagedSpace()",93957337047152,93957337047180],["v8::internal::PagedSpace::~PagedSpace()",93957337047328,93957337047539],["v8::internal::TorqueGeneratedWeakArrayList<v8::internal::WeakArrayList, v8::internal::HeapObject>::set_objects(int, v8::internal::MaybeObject, v8::internal::WriteBarrierMode)",93957337047712,93957337048034],["v8::internal::UnreachableObjectsFilter::SkipObject(v8::internal::HeapObject)",93957337048288,93957337048754],["v8::internal::UnreachableObjectsFilter::MarkingVisitor::~MarkingVisitor()",93957337048832,93957337048894],["v8::internal::UnreachableObjectsFilter::MarkingVisitor::VisitCodeTarget(v8::internal::Code, v8::internal::RelocInfo*)",93957337049040,93957337049167],["v8::internal::UnreachableObjectsFilter::MarkingVisitor::VisitRootPointers(v8::internal::Root, char const*, v8::internal::FullObjectSlot, v8::internal::FullObjectSlot)",93957337049296,93957337049407],["v8::internal::MarkingWorklists::Local::Publish()",93957337414608,93957337414952],["v8::internal::MemoryAllocator::Unmapper::PrepareForGC()",93957337421856,93957337421868],["v8::internal::MemoryAllocator::UnregisterMemory(v8::internal::BasicMemoryChunk*, v8::internal::Executability)",93957337424992,93957337425196],["v8::internal::MemoryAllocator::Unmapper::UnmapFreeMemoryJob::GetMaxConcurrency(unsigned long) const",93957337427440,93957337427548],["v8::internal::MemoryChunkLayout::ObjectStartOffsetInMemoryChunk(v8::internal::AllocationSpace)",93957337427872,93957337427949],["v8::internal::MemoryChunk::DiscardUnusedMemory(unsigned long, unsigned long)",93957337428224,93957337428313],["v8::internal::MemoryChunk::SetReadAndExecutable()",93957337428512,93957337428527],["v8::internal::MemoryChunk::SetOldGenerationPageFlags(bool)",93957337429184,93957337429224],["void v8::internal::MemoryChunk::ReleaseSlotSet<(v8::internal::RememberedSetType)0>()",93957337429904,93957337430010],["void v8::internal::MemoryChunk::ReleaseSlotSet<(v8::internal::RememberedSetType)1>()",93957337430128,93957337430234],["void v8::internal::MemoryChunk::ReleaseTypedSlotSet<(v8::internal::RememberedSetType)1>()",93957337430288,93957337430327],["void v8::internal::MemoryChunk::ReleaseInvalidatedSlots<(v8::internal::RememberedSetType)1>()",93957337430400,93957337430458],["v8::internal::MemoryChunk::AllocateSweepingSlotSet()",93957337430480,93957337430656],["void v8::internal::MemoryChunk::RegisterObjectWithInvalidatedSlots<(v8::internal::RememberedSetType)1>(v8::internal::HeapObject)",93957337430736,93957337430969],["v8::internal::MemoryChunk::AllocateYoungGenerationBitmap()",93957337431216,93957337431259],["v8::internal::SlotSet* v8::internal::MemoryChunk::AllocateSlotSet<(v8::internal::RememberedSetType)1>()",93957337431440,93957337431616],["v8::internal::Sweeper::StartSweeperTasks()",93957337601744,93957337601902],["v8::internal::Sweeper::FilterSweepingPagesScope::~FilterSweepingPagesScope()",93957337602080,93957337602238],["v8::internal::Sweeper::StartSweeping()",93957337602304,93957337602427],["v8::internal::Sweeper::GetSweptPageSafe(v8::internal::PagedSpace*)",93957337602656,93957337602750],["v8::internal::Sweeper::EnsureCompleted()",93957337602912,93957337603353],["v8::internal::Sweeper::DrainSweepingWorklists()",93957337603600,93957337603965],["v8::internal::Sweeper::ParallelSweepSpace(v8::internal::AllocationSpace, int, int, v8::internal::Sweeper::FreeSpaceMayContainInvalidatedSlots)",93957337604160,93957337604779],["v8::internal::Sweeper::RawSweep(v8::internal::Page*, v8::internal::Sweeper::FreeListRebuildingMode, v8::internal::FreeSpaceTreatmentMode, v8::internal::Sweeper::FreeSpaceMayContainInvalidatedSlots, v8::base::LockGuard<v8::base::Mutex, (v8::base::NullBehavior)0> const&)",93957337604848,93957337607953],["v8::internal::Sweeper::AddPage(v8::internal::AllocationSpace, v8::internal::Page*, v8::internal::Sweeper::AddPageMode)",93957337608224,93957337608371],["v8::internal::Sweeper::AddPageForIterability(v8::internal::Page*)",93957337608624,93957337608674],["unsigned int std::__1::__sort4<v8::internal::Sweeper::StartSweeping()::$_0::operator()(v8::internal::AllocationSpace) const::{lambda(v8::internal::Page*, v8::internal::Page*)#1}&, v8::internal::Page**>(v8::internal::Page**, v8::internal::Page**, v8::internal::Page**, v8::internal::Page**, v8::internal::Sweeper::StartSweeping()::$_0::operator()(v8::internal::AllocationSpace) const::{lambda(v8::internal::Page*, v8::internal::Page*)#1}&)",93957337610496,93957337610746],["v8::internal::Sweeper::SweeperJob::Run(v8::JobDelegate*)",93957337611536,93957337612255],["v8::internal::Sweeper::SweeperJob::RunImpl(v8::JobDelegate*)",93957337612384,93957337613041],["v8::internal::Sweeper::IterabilityTask::RunInternal()",93957337613392,93957337614012],["v8::internal::WeakObjects::UpdateFlushedJSFunctions(v8::internal::Worklist<v8::internal::JSFunction, 64>&)",93957337614128,93957337614743],["v8::internal::WeakObjects::UpdateWeakReferences(v8::internal::Worklist<std::__1::pair<v8::internal::HeapObject, v8::internal::CompressedHeapObjectSlot>, 64>&)",93957337615680,93957337616419],["v8::internal::WeakObjects::UpdateJSWeakRefs(v8::internal::Worklist<v8::internal::JSWeakRef, 64>&)",93957337617168,93957337617814],["v8::internal::CallOptimization::Initialize(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FunctionTemplateInfo>)",93957337618000,93957337618235],["v8::internal::CallOptimization::IsCrossContextLazyAccessorPair(v8::internal::Context, v8::internal::Map) const",93957337618352,93957337618444],["v8::internal::CallOptimization::IsCompatibleReceiverMap(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::JSObject>, v8::internal::CallOptimization::HolderLookup) const",93957337618816,93957337618951],["v8::internal::LoadHandler::LoadFromPrototype(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::Smi>, v8::internal::MaybeObjectHandle, v8::internal::MaybeObjectHandle)",93957337619360,93957337619762],["void v8::internal::(anonymous namespace)::InitPrototypeChecks<v8::internal::LoadHandler>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::LoadHandler>, v8::internal::Handle<v8::internal::Map>, v8::internal::MaybeObjectHandle, v8::internal::MaybeObjectHandle)",93957337620064,93957337620812],["v8::internal::LoadHandler::GetKeyedAccessLoadMode(v8::internal::MaybeObject)",93957337621232,93957337621265],["v8::internal::StoreHandler::StoreElementTransition(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Map>, v8::internal::KeyedAccessStoreMode, v8::internal::MaybeHandle<v8::internal::Object>)",93957337621312,93957337621767],["v8::internal::StoreHandler::StoreThroughPrototype(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::Smi>, v8::internal::MaybeObjectHandle, v8::internal::MaybeObjectHandle)",93957337622144,93957337623458],["v8::internal::StoreHandler::StoreProxy(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::JSProxy>, v8::internal::Handle<v8::internal::JSReceiver>)",93957337623488,93957337623669],["v8::internal::ICStats::Begin()",93957337623984,93957337624012],["v8::internal::ICStats::Dump()",93957337624080,93957337624463],["v8::internal::ICInfo::AppendToTracedValue(v8::tracing::TracedValue*) const",93957337625056,93957337626036],["v8::internal::ICStats::GetOrCacheFunctionName(v8::internal::JSFunction)",93957337626656,93957337626814],["v8::internal::IC::TransitionMarkFromState(v8::internal::InlineCacheState)",93957337627744,93957337627786],["v8::internal::(anonymous namespace)::GetModifier(v8::internal::KeyedAccessStoreMode)",93957337629008,93957337629047],["v8::internal::ActionNode::StorePosition(int, bool, v8::internal::RegExpNode*)",93957339826976,93957339827103],["v8::internal::ChoiceNode::FillInBMInfo(v8::internal::Isolate*, int, int, v8::internal::BoyerMooreLookahead*, bool)",93957339834416,93957339834683],["v8::internal::LoopChoiceNode::AddLoopAlternative(v8::internal::GuardedAlternative)",93957339842288,93957339842498],["v8::internal::BoyerMooreLookahead::EmitSkipInstructions(v8::internal::RegExpMacroAssembler*)",93957339846160,93957339846864],["v8::internal::BackReferenceNode::Emit(v8::internal::RegExpCompiler*, v8::internal::Trace*)",93957339851984,93957339852241],["v8::internal::RegExpCompiler::OptionallyStepBackToLeadSurrogate(v8::internal::RegExpNode*, v8::base::Flags<v8::internal::JSRegExp::Flag, int>)",93957339853584,93957339854264],["v8::internal::NegativeLookaroundChoiceNode::FillInBMInfo(v8::internal::Isolate*, int, int, v8::internal::BoyerMooreLookahead*, bool)",93957339855552,93957339855616],["std::__1::bitset<128ul>::operator>>=(unsigned long)",93957339857840,93957339858130],["v8::internal::Analysis<v8::internal::(anonymous namespace)::AssertionPropagator, v8::internal::(anonymous namespace)::EatsAtLeastPropagator>::VisitAction(v8::internal::ActionNode*)",93957339859152,93957339859385],["v8::internal::Analysis<v8::internal::(anonymous namespace)::AssertionPropagator, v8::internal::(anonymous namespace)::EatsAtLeastPropagator>::VisitLoopChoice(v8::internal::LoopChoiceNode*)",93957339859744,93957339860123],["v8::internal::Analysis<v8::internal::(anonymous namespace)::AssertionPropagator, v8::internal::(anonymous namespace)::EatsAtLeastPropagator>::VisitBackReference(v8::internal::BackReferenceNode*)",93957339860544,93957339860710],["v8::internal::Analysis<v8::internal::(anonymous namespace)::AssertionPropagator, v8::internal::(anonymous namespace)::EatsAtLeastPropagator>::VisitText(v8::internal::TextNode*)",93957339860912,93957339861449],["v8::internal::IrregexpInterpreter::Match(v8::internal::Isolate*, v8::internal::JSRegExp, v8::internal::String, int*, int, int, v8::internal::RegExp::CallOrigin)",93957339861488,93957339861764],["v8::internal::IrregexpInterpreter::Result v8::internal::(anonymous namespace)::RawMatch<unsigned char>(v8::internal::Isolate*, v8::internal::ByteArray, v8::internal::String, v8::internal::Vector<unsigned char const>, int*, int, int, int, unsigned int, v8::internal::RegExp::CallOrigin, unsigned int)",93957339862032,93957339868426],["v8::internal::IrregexpInterpreter::MatchForCallFromJs(unsigned long, int, unsigned long, unsigned long, int*, int, unsigned long, v8::internal::RegExp::CallOrigin, v8::internal::Isolate*, unsigned long)",93957339874784,93957339874949],["v8::base::SmallVector<int, 64ul>::Grow(unsigned long)",93957339874992,93957339875130],["v8_inspector::(anonymous namespace)::ActualScript::offset(int, int) const",93957342529232,93957342529355],["v8_inspector::V8Debugger::terminateExecutionCompletedCallback(v8::Isolate*)",93957342531936,93957342532058],["v8_inspector::V8Debugger::disable()",93957342532400,93957342532774],["v8_inspector::V8Debugger::setBreakpointsActive(bool)",93957342533392,93957342533447],["v8_inspector::V8Debugger::setPauseOnNextCall(bool, int)",93957342533520,93957342533639],["v8_inspector::V8Debugger::breakProgram(int)",93957342533680,93957342533705],["v8_inspector::V8Debugger::continueProgram(int, bool)",93957342533760,93957342533820],["v8_inspector::V8Debugger::stepIntoStatement(int, bool)",93957342533904,93957342534009],["v8_inspector::String16 v8_inspector::String16::concat<v8_inspector::String16, char, v8_inspector::String16>(v8_inspector::String16, char, v8_inspector::String16)",93957342674160,93957342675586],["v8_inspector::(anonymous namespace)::nativeSetterCallback(v8::FunctionCallbackInfo<v8::Value> const&)",93957342703536,93957342703821],["void v8_inspector::String16Builder::appendAll<v8_inspector::String16, char, v8_inspector::String16>(v8_inspector::String16, char, v8_inspector::String16)",93957342710752,93957342711415],["v8_inspector::(anonymous namespace)::toProtocolValue(v8::Local<v8::Context>, v8::Local<v8::Value>, int, std::__1::unique_ptr<v8_inspector::protocol::Value, std::__1::default_delete<v8_inspector::protocol::Value> >*)",93957342713760,93957342715458],["v8_inspector::String16 v8_inspector::String16::concat<v8_inspector::String16, v8_inspector::String16, v8_inspector::String16>(v8_inspector::String16, v8_inspector::String16, v8_inspector::String16)",93957342719008,93957342721097],["v8_inspector::(anonymous namespace)::ObjectMirror::buildObjectPreviewInternal(v8::Local<v8::Context>, bool, bool, int*, int*, std::__1::unique_ptr<v8_inspector::protocol::Runtime::ObjectPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::ObjectPreview> >*) const",93957342723760,93957342730750],["v8_inspector::(anonymous namespace)::PreviewPropertyAccumulator::~PreviewPropertyAccumulator()",93957342731312,93957342731420],["v8_inspector::(anonymous namespace)::PrimitiveValueMirror::~PrimitiveValueMirror()",93957342732688,93957342732759],["v8_inspector::(anonymous namespace)::PrimitiveValueMirror::buildEntryPreview(v8::Local<v8::Context>, int*, int*, std::__1::unique_ptr<v8_inspector::protocol::Runtime::ObjectPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::ObjectPreview> >*) const",93957342733648,93957342734098],["v8_inspector::(anonymous namespace)::NumberMirror::buildRemoteObject(v8::Local<v8::Context>, v8_inspector::WrapMode, std::__1::unique_ptr<v8_inspector::protocol::Runtime::RemoteObject, std::__1::default_delete<v8_inspector::protocol::Runtime::RemoteObject> >*) const",93957342734368,93957342734941],["v8_inspector::(anonymous namespace)::NumberMirror::buildEntryPreview(v8::Local<v8::Context>, int*, int*, std::__1::unique_ptr<v8_inspector::protocol::Runtime::ObjectPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::ObjectPreview> >*) const",93957342735328,93957342735833],["v8_inspector::(anonymous namespace)::BigIntMirror::buildRemoteObject(v8::Local<v8::Context>, v8_inspector::WrapMode, std::__1::unique_ptr<v8_inspector::protocol::Runtime::RemoteObject, std::__1::default_delete<v8_inspector::protocol::Runtime::RemoteObject> >*) const",93957342736512,93957342736841],["v8_inspector::(anonymous namespace)::BigIntMirror::buildEntryPreview(v8::Local<v8::Context>, int*, int*, std::__1::unique_ptr<v8_inspector::protocol::Runtime::ObjectPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::ObjectPreview> >*) const",93957342737168,93957342737568],["v8_inspector::(anonymous namespace)::SymbolMirror::buildRemoteObject(v8::Local<v8::Context>, v8_inspector::WrapMode, std::__1::unique_ptr<v8_inspector::protocol::Runtime::RemoteObject, std::__1::default_delete<v8_inspector::protocol::Runtime::RemoteObject> >*) const",93957342737856,93957342738381],["v8_inspector::(anonymous namespace)::FunctionMirror::buildRemoteObject(v8::Local<v8::Context>, v8_inspector::WrapMode, std::__1::unique_ptr<v8_inspector::protocol::Runtime::RemoteObject, std::__1::default_delete<v8_inspector::protocol::Runtime::RemoteObject> >*) const",93957342738768,93957342739735],["v8_inspector::(anonymous namespace)::FunctionMirror::buildEntryPreview(v8::Local<v8::Context>, int*, int*, std::__1::unique_ptr<v8_inspector::protocol::Runtime::ObjectPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::ObjectPreview> >*) const",93957342740000,93957342740528],["v8::internal::compiler::CodeGenerator::MoveType::InferSwap(v8::internal::compiler::InstructionOperand*, v8::internal::compiler::InstructionOperand*)",93957342880880,93957342880938],["v8::internal::compiler::InstructionScheduler::EndBlock(v8::internal::compiler::RpoNumber)",93957342896912,93957342896971],["v8::internal::compiler::InstructionSelector::Emit(unsigned int, unsigned long, v8::internal::compiler::InstructionOperand*, unsigned long, v8::internal::compiler::InstructionOperand*, unsigned long, v8::internal::compiler::InstructionOperand*)",93957342910896,93957342911741],["v8::internal::compiler::InstructionSelector::IsOnlyUserOfNodeInSameBlock(v8::internal::compiler::Node*, v8::internal::compiler::Node*) const",93957342912480,93957342912617],["v8::internal::compiler::InstructionSelector::GetEffectLevel(v8::internal::compiler::Node*, v8::internal::compiler::FlagsContinuation*) const",93957342913072,93957342913124],["v8::internal::compiler::InstructionSelector::AddOperandToStateValueDescriptor(v8::internal::compiler::StateValueList*, v8::internal::ZoneVector<v8::internal::compiler::InstructionOperand>*, v8::internal::compiler::OperandGenerator*, v8::internal::compiler::StateObjectDeduplicator*, v8::internal::compiler::Node*, v8::internal::MachineType, v8::internal::compiler::FrameStateInputKind, v8::internal::Zone*)",93957342913312,93957342917614],["v8::internal::compiler::StateValueList::PushDuplicate(unsigned long)",93957342918224,93957342918502],["v8::internal::compiler::InstructionSelector::EmitWithContinuation(unsigned int, unsigned long, v8::internal::compiler::InstructionOperand*, unsigned long, v8::internal::compiler::InstructionOperand*, v8::internal::compiler::FlagsContinuation*)",93957342920848,93957342920883],["v8::internal::compiler::InstructionSelector::EmitWithContinuation(unsigned int, unsigned long, v8::internal::compiler::InstructionOperand*, unsigned long, v8::internal::compiler::InstructionOperand*, unsigned long, v8::internal::compiler::InstructionOperand*, v8::internal::compiler::FlagsContinuation*)",93957342921024,93957342927128],["v8::internal::compiler::InstructionSelector::InitializeCallBuffer(v8::internal::compiler::Node*, v8::internal::compiler::CallBuffer*, v8::base::Flags<v8::internal::compiler::InstructionSelector::CallBufferFlag, int>, bool, int)",93957342927984,93957342937653],["v8::internal::compiler::OperandGenerator::UseLocation(v8::internal::compiler::Node*, v8::internal::compiler::LinkageLocation)",93957342937936,93957342938197],["v8::internal::compiler::InstructionSelector::VisitControl(v8::internal::compiler::BasicBlock*)",93957342938592,93957342939740],["v8::internal::compiler::InstructionSelector::VisitCall(v8::internal::compiler::Node*, v8::internal::compiler::BasicBlock*)",93957342951408,93957342952883],["v8::internal::compiler::InstructionSelector::VisitBranch(v8::internal::compiler::Node*, v8::internal::compiler::BasicBlock*, v8::internal::compiler::BasicBlock*)",93957342954624,93957342954846],["v8::internal::compiler::InstructionSelector::MarkPairProjectionsAsWord32(v8::internal::compiler::Node*)",93957342955392,93957342955581],["v8::internal::compiler::InstructionSelector::MarkAsTagged(v8::internal::compiler::Node*)",93957342955680,93957342955764],["v8::internal::compiler::MachineOperatorBuilder::V128AnyTrue()",93957344484320,93957344484335],["v8::internal::compiler::MachineOperatorBuilder::MemBarrier()",93957344506816,93957344506831],["v8::internal::compiler::MachineOperatorBuilder::Word32AtomicPairOr()",93957344509264,93957344509279],["v8::internal::compiler::MachineOperatorBuilder::I32x4ReplaceLane(int)",93957344510928,93957344511070],["v8::internal::compiler::Operator1<v8::internal::compiler::TruncateKind, v8::internal::compiler::OpEqualTo<v8::internal::compiler::TruncateKind>, v8::internal::compiler::OpHash<v8::internal::compiler::TruncateKind> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344569184,93957344569282],["v8::internal::compiler::Operator1<v8::internal::compiler::StackSlotRepresentation, v8::internal::compiler::OpEqualTo<v8::internal::compiler::StackSlotRepresentation>, v8::internal::compiler::OpHash<v8::internal::compiler::StackSlotRepresentation> >::HashCode() const",93957344569696,93957344569779],["v8::internal::compiler::Operator1<v8::internal::compiler::StoreLaneParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::StoreLaneParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::StoreLaneParameters> >::Equals(v8::internal::compiler::Operator const*) const",93957344570384,93957344570454],["v8::internal::compiler::Operator1<v8::internal::compiler::ShuffleParameter, v8::internal::compiler::OpEqualTo<v8::internal::compiler::ShuffleParameter>, v8::internal::compiler::OpHash<v8::internal::compiler::ShuffleParameter> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344570912,93957344571054],["v8::internal::compiler::MapInference::AllOfInstanceTypesUnsafe(std::__1::function<bool (v8::internal::InstanceType)>) const",93957344573424,93957344573836],["v8::internal::compiler::MapInference::AnyOfInstanceTypesUnsafe(std::__1::function<bool (v8::internal::InstanceType)>) const",93957344574080,93957344574492],["v8::internal::compiler::MapInference::RelyOnMapsViaStability(v8::internal::compiler::CompilationDependencies*)",93957344574896,93957344575005],["bool std::__1::__function::__policy_invoker<bool (v8::internal::InstanceType)>::__call_impl<std::__1::__function::__default_alloc_func<bool (*)(v8::internal::InstanceType), bool (v8::internal::InstanceType)> >(std::__1::__function::__policy_storage const*, v8::internal::InstanceType)",93957344575600,93957344575612],["v8::internal::compiler::MemoryLowering::ReduceLoadFromObject(v8::internal::compiler::Node*)",93957344576016,93957344576152],["v8::internal::compiler::MemoryLowering::ReduceStoreElement(v8::internal::compiler::Node*, v8::internal::compiler::MemoryLowering::AllocationState const*)",93957344577056,93957344577508],["v8::internal::compiler::MemoryLowering::ComputeIndex(v8::internal::compiler::ElementAccess const&, v8::internal::compiler::Node*)",93957344581376,93957344581563],["v8::internal::compiler::MemoryLowering::~MemoryLowering()",93957344581984,93957344582020],["v8::internal::compiler::MemoryOptimizer::MemoryOptimizer(v8::internal::compiler::JSGraph*, v8::internal::Zone*, v8::internal::PoisoningMitigationLevel, v8::internal::compiler::MemoryLowering::AllocationFolding, char const*, v8::internal::TickCounter*)",93957344582112,93957344582556],["v8::internal::compiler::MemoryOptimizer::Optimize()",93957344583728,93957344583975],["v8::internal::compiler::MemoryOptimizer::VisitNode(v8::internal::compiler::Node*, v8::internal::compiler::MemoryLowering::AllocationState const*)",93957344584320,93957344584646],["v8::internal::compiler::(anonymous namespace)::CanAllocate(v8::internal::compiler::Node const*)",93957344585136,93957344585210],["v8::internal::compiler::MemoryOptimizer::EnqueueMerge(v8::internal::compiler::Node*, int, v8::internal::compiler::MemoryLowering::AllocationState const*)",93957344585584,93957344586954],["void std::__1::__function::__policy_invoker<void (v8::internal::compiler::Node*, v8::internal::compiler::Node*, char const*, v8::internal::Zone*)>::__call_impl<std::__1::__function::__default_alloc_func<void (*)(v8::internal::compiler::Node*, v8::internal::compiler::Node*, char const*, v8::internal::Zone*), void (v8::internal::compiler::Node*, v8::internal::compiler::Node*, char const*, v8::internal::Zone*)> >(std::__1::__function::__policy_storage const*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, char const*, v8::internal::Zone*)",93957344588416,93957344588438],["v8::internal::compiler::NodeMarkerBase::NodeMarkerBase(v8::internal::compiler::Graph*, unsigned int)",93957344588768,93957344588788],["v8::internal::compiler::IrOpcode::IsComparisonOpcode(v8::internal::compiler::IrOpcode::Value)",93957344588832,93957344588874],["v8::internal::compiler::ObserveNodeManager::StartObserving(v8::internal::compiler::Node*, v8::internal::compiler::NodeObserver*)",93957344589008,93957344589368],["v8::internal::compiler::NodeOrigin::PrintJson(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) const",93957344590272,93957344590541],["v8::internal::compiler::NodeOriginTable::AddDecorator()",93957344590624,93957344590711],["v8::internal::compiler::NodeOriginTable::SetNodeOrigin(v8::internal::compiler::Node*, v8::internal::compiler::NodeOrigin const&)",93957344590816,93957344590977],["v8::internal::compiler::NodeOriginTable::Decorator::Decorate(v8::internal::compiler::Node*)",93957344591328,93957344591491],["v8::internal::compiler::NodeProperties::IsValueEdge(v8::internal::compiler::Edge)",93957344592080,93957344592124],["v8::internal::compiler::NodeProperties::IsEffectEdge(v8::internal::compiler::Edge)",93957344592240,93957344592361],["v8::internal::compiler::NodeProperties::IsExceptionalCall(v8::internal::compiler::Node*, v8::internal::compiler::Node**)",93957344592496,93957344592786],["v8::internal::compiler::Scheduler::ScheduleLate()",93957344757200,93957344757858],["v8::internal::compiler::ScheduleEarlyNodeVisitor::Run(v8::internal::ZoneVector<v8::internal::compiler::Node*>*)",93957344763040,93957344763675],["v8::internal::compiler::ScheduleLateNodeVisitor::GetBlockForUse(v8::internal::compiler::Edge)",93957344785168,93957344785781],["v8::internal::compiler::SerializerForBackgroundCompilation::SerializerForBackgroundCompilation(v8::internal::compiler::ZoneStats*, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::CompilationDependencies*, v8::internal::compiler::CompilationSubject, v8::base::Optional<v8::internal::compiler::Hints>, v8::internal::ZoneVector<v8::internal::compiler::Hints> const&, v8::internal::compiler::MissingArgumentsPolicy, v8::base::Flags<v8::internal::compiler::SerializerForBackgroundCompilationFlag, int>, int)",93957344808704,93957344810630],["v8::internal::compiler::SerializerForBackgroundCompilation::VisitLdaImmutableContextSlot(v8::internal::interpreter::BytecodeArrayIterator*)",93957344829968,93957344830236],["v8::internal::compiler::SerializerForBackgroundCompilation::PrepareArgumentsHints(v8::internal::interpreter::Register, unsigned long)",93957344837120,93957344838272],["std::__1::vector<v8::internal::compiler::Hints, v8::internal::ZoneAllocator<v8::internal::compiler::Hints> >::insert(std::__1::__wrap_iter<v8::internal::compiler::Hints const*>, v8::internal::compiler::Hints&&)",93957344863488,93957344865125],["v8::internal::compiler::SerializerForBackgroundCompilation::ProcessKeyedPropertyAccess(v8::internal::compiler::Hints*, v8::internal::compiler::Hints const&, v8::internal::FeedbackSlot, v8::internal::compiler::AccessMode, bool)",93957344871888,93957344872241],["void std::__1::__function::__policy_invoker<void (int)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::SerializerForBackgroundCompilation::TraverseBytecode()::$_0, void (int)> >(std::__1::__function::__policy_storage const*, int)",93957344882560,93957344883353],["void v8::internal::compiler::RepresentationSelector::InsertUnreachableIfNecessary<(v8::internal::compiler::Phase)2>(v8::internal::compiler::Node*)",93957344886848,93957344887515],["v8::internal::compiler::SimplifiedLowering::Float64Sign(v8::internal::compiler::Node*)",93957344895328,93957344895689],["v8::internal::compiler::SimplifiedLowering::DoMin(v8::internal::compiler::Node*, v8::internal::compiler::Operator const*, v8::internal::MachineRepresentation)",93957344901216,93957344901390],["v8::internal::compiler::NodeProperties::PastEffectIndex(v8::internal::compiler::Node*)",93957344904304,93957344904365],["void v8::internal::compiler::RepresentationSelector::VisitSelect<(v8::internal::compiler::Phase)0>(v8::internal::compiler::Node*, v8::internal::compiler::Truncation, v8::internal::compiler::SimplifiedLowering*)",93957344935856,93957344936230],["v8::internal::compiler::(anonymous namespace)::CheckedUseInfoAsFloat64FromHint(v8::internal::compiler::NumberOperationHint, v8::internal::compiler::FeedbackSource const&, v8::internal::compiler::IdentifyZeros)",93957344940032,93957344940109],["void v8::internal::compiler::RepresentationSelector::VisitBinop<(v8::internal::compiler::Phase)0>(v8::internal::compiler::Node*, v8::internal::compiler::UseInfo, v8::internal::compiler::UseInfo, v8::internal::MachineRepresentation, v8::internal::compiler::Type)",93957344944864,93957344945153],["void v8::internal::compiler::RepresentationSelector::VisitCheck<(v8::internal::compiler::Phase)0>(v8::internal::compiler::Node*, v8::internal::compiler::Type, v8::internal::compiler::SimplifiedLowering*)",93957344948528,93957344949219],["void v8::internal::compiler::RepresentationSelector::VisitObjectIs<(v8::internal::compiler::Phase)0>(v8::internal::compiler::Node*, v8::internal::compiler::Type, v8::internal::compiler::SimplifiedLowering*)",93957344949776,93957344950534],["void v8::internal::compiler::RepresentationSelector::VisitReturn<(v8::internal::compiler::Phase)0>(v8::internal::compiler::Node*)",93957344952128,93957344952562],["v8::internal::compiler::RepresentationSelector::RetypeNode(v8::internal::compiler::Node*)",93957344955632,93957344955793],["v8::internal::compiler::RepresentationSelector::Weaken(v8::internal::compiler::Node*, v8::internal::compiler::Type, v8::internal::compiler::Type)",93957344967376,93957344967640],["void v8::internal::compiler::RepresentationSelector::VisitCall<(v8::internal::compiler::Phase)1>(v8::internal::compiler::Node*, v8::internal::compiler::SimplifiedLowering*)",93957344968800,93957344968960],["void v8::internal::compiler::RepresentationSelector::VisitSpeculativeInt32Binop<(v8::internal::compiler::Phase)1>(v8::internal::compiler::Node*)",93957344971232,93957344971448],["void v8::internal::compiler::RepresentationSelector::VisitObjectIs<(v8::internal::compiler::Phase)1>(v8::internal::compiler::Node*, v8::internal::compiler::Type, v8::internal::compiler::SimplifiedLowering*)",93957344972128,93957344972294],["void v8::internal::compiler::RepresentationSelector::VisitUnused<(v8::internal::compiler::Phase)2>(v8::internal::compiler::Node*)",93957345011824,93957345012071],["v8::internal::compiler::RepresentationSelector::ChangeOp(v8::internal::compiler::Node*, v8::internal::compiler::Operator const*)",93957345013536,93957345013599],["v8::internal::compiler::RepresentationSelector::ChangeToPureOp(v8::internal::compiler::Node*, v8::internal::compiler::Operator const*)",93957345016160,93957345016574],["v8::internal::compiler::RepresentationSelector::LowerToCheckedInt32Mul(v8::internal::compiler::Node*, v8::internal::compiler::Truncation, v8::internal::compiler::Type, v8::internal::compiler::Type)",93957345017056,93957345017281],["void v8::internal::compiler::RepresentationSelector::VisitSpeculativeInt32Binop<(v8::internal::compiler::Phase)2>(v8::internal::compiler::Node*)",93957345020368,93957345020800],["void v8::internal::compiler::RepresentationSelector::VisitCheckBounds<(v8::internal::compiler::Phase)2>(v8::internal::compiler::Node*, v8::internal::compiler::SimplifiedLowering*)",93957345022080,93957345023582],["void v8::internal::compiler::RepresentationSelector::VisitStateValues<(v8::internal::compiler::Phase)2>(v8::internal::compiler::Node*)",93957345025744,93957345026671],["void v8::internal::compiler::RepresentationSelector::VisitJSWasmCall<(v8::internal::compiler::Phase)2>(v8::internal::compiler::Node*, v8::internal::compiler::SimplifiedLowering*)",93957345029360,93957345030464],["v8::internal::compiler::RepresentationSelector::ChangeToDeadValue(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957345031568,93957345031880],["v8::internal::compiler::SimplifiedOperatorReducer::Reduce(v8::internal::compiler::Node*)",93957345031920,93957345037406],["v8::internal::compiler::(anonymous namespace)::DecideObjectIsSmi(v8::internal::compiler::Node*)",93957345037568,93957345037853],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::FieldAccess const&)",93957345037872,93957345038468],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::ElementAccess const&)",93957345038576,93957345038994],["std::__1::basic_ostream<char, std::__1::char_traits<char> >& v8::internal::operator<< <v8::internal::Map>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::ZoneHandleSet<v8::internal::Map>)",93957345039200,93957345039479],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::ElementsTransition)",93957345039728,93957345039865],["v8::internal::compiler::FastMapParameterOf(v8::internal::compiler::Operator const*)",93957345039920,93957345039977],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::AllocateParameters)",93957345040128,93957345040277],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::CheckTaggedInputParameters const&)",93957345040336,93957345040454],["v8::internal::compiler::SimplifiedOperatorBuilder::NumberLog10()",93957345040576,93957345040590],["v8::internal::compiler::SimplifiedOperatorBuilder::NumberMax()",93957345040608,93957345040622],["v8::internal::compiler::SimplifiedOperatorBuilder::NumberPow()",93957345040640,93957345040654],["v8::internal::compiler::SimplifiedOperatorBuilder::NumberSign()",93957345040672,93957345040686],["v8::internal::compiler::SimplifiedOperatorBuilder::NumberSinh()",93957345040704,93957345040718],["v8::internal::compiler::SimplifiedOperatorBuilder::NumberTan()",93957345040736,93957345040750],["v8::internal::compiler::SimplifiedOperatorBuilder::NumberTrunc()",93957345040768,93957345040782],["v8::internal::compiler::SimplifiedOperatorBuilder::NumberToInt32()",93957345040800,93957345040814],["v8::internal::compiler::SimplifiedOperatorBuilder::NumberToUint32()",93957345040832,93957345040846],["v8::internal::compiler::SimplifiedOperatorBuilder::NumberSilenceNaN()",93957345040864,93957345040878],["v8::internal::compiler::SimplifiedOperatorBuilder::StringConcat()",93957345040896,93957345040910],["v8::internal::compiler::SimplifiedOperatorBuilder::StringFromSingleCharCode()",93957345040928,93957345040942],["v8::internal::compiler::SimplifiedOperatorBuilder::StringIndexOf()",93957345040960,93957345040974],["v8::internal::compiler::SimplifiedOperatorBuilder::StringToLowerCaseIntl()",93957345040992,93957345041006],["v8::internal::compiler::SimplifiedOperatorBuilder::TypeOf()",93957345041024,93957345041038],["v8::internal::compiler::SimplifiedOperatorBuilder::PlainPrimitiveToWord32()",93957345041056,93957345041070],["v8::internal::compiler::SimplifiedOperatorBuilder::ChangeTaggedSignedToInt32()",93957345041088,93957345041102],["v8::internal::compiler::SimplifiedOperatorBuilder::ChangeTaggedToInt32()",93957345041120,93957345041134],["v8::internal::compiler::SimplifiedOperatorBuilder::ChangeTaggedToUint32()",93957345041152,93957345041166],["v8::internal::compiler::SimplifiedOperatorBuilder::ChangeTaggedToTaggedSigned()",93957345041184,93957345041198],["v8::internal::compiler::SimplifiedOperatorBuilder::ChangeInt31ToTaggedSigned()",93957345041216,93957345041230],["v8::internal::compiler::SimplifiedOperatorBuilder::ChangeInt64ToTagged()",93957345041248,93957345041262],["sigaltstack",139871563507264,139871563507297],["sigorset",139871563508304,139871563508381],["sigqueue",139871563508752,139871563508920],["sigset",139871563509296,139871563509636],["atol",139871563509696,139871563509708],["bsearch",139871563509728,139871563509850],["qsort",139871563512704,139871563512712],["putenv",139871563512944,139871563513190],["getpt",139871564532000,139871564532046],["setutxent",139871564533680,139871564533685],["getutxid",139871564533728,139871564533733],["pututxline",139871564533760,139871564533765],["fminmagf128",139871565670960,139871565671252],["y0f128",139871565672896,139871565673040],["log10f128",139871565673488,139871565673601],["sinhf128",139871565674400,139871565674573],["lgammaf128",139871565675168,139871565675349],["expf128",139871565675536,139871565675725],["__iscanonicall",139871565677152,139871565677186],["f32xaddf64",139871565703984,139871565704134],["__nptl_main",139871566580768,139871566580801],["create_thread.constprop.0",139871566581008,139871566581427],["setxid_mark_thread.constprop.0",139871566581536,139871566581776],["__deallocate_stack",139871566581792,139871566582068],["__reclaim_stacks",139871566582400,139871566583042],["__nptl_setxid",139871566583120,139871566583850],["v8::D8Console::~D8Console()",93957335208496,93957335208524],["std::__1::__tree_const_iterator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__tree_node<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, void*>*, long> std::__1::__tree<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::find<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const",93957335208656,93957335208907],["calendar_astro_cleanup()",93957335305312,93957335305320],["v8::InspectorClient::runMessageLoopOnPause(int)",93957335305936,93957335306279],["v8_inspector::V8InspectorClient::currentTimeMS()",93957335306336,93957335306345],["v8::InspectorFrontend::~InspectorFrontend()",93957335306400,93957335306447],["v8::internal::GraphBuildingVisitor::Visit(v8::TracedReferenceBase const&)",93957336823200,93957336823227],["v8::internal::LocalEmbedderHeapTracer::ProcessingScope::ProcessingScope(v8::internal::LocalEmbedderHeapTracer*)",93957336825840,93957336825902],["v8::internal::FactoryBase<v8::internal::Factory>::AllocateRawWithImmortalMap(int, v8::internal::AllocationType, v8::internal::Map, v8::internal::AllocationAlignment)",93957336826752,93957336826779],["v8::internal::Handle<v8::internal::String> v8::internal::FactoryBase<v8::internal::Factory>::InternalizeStringWithKey<v8::internal::SequentialStringKey<unsigned char> >(v8::internal::SequentialStringKey<unsigned char>*)",93957336827088,93957336827111],["v8::internal::Handle<v8::internal::String> v8::internal::FactoryBase<v8::internal::Factory>::InternalizeStringWithKey<v8::internal::SeqSubStringKey<v8::internal::SeqTwoByteString> >(v8::internal::SeqSubStringKey<v8::internal::SeqTwoByteString>*)",93957336827184,93957336827207],["v8::internal::Handle<v8::internal::String> v8::internal::FactoryBase<v8::internal::LocalFactory>::InternalizeStringWithKey<v8::internal::SequentialStringKey<unsigned short> >(v8::internal::SequentialStringKey<unsigned short>*)",93957336827248,93957336827278],["v8::internal::FactoryBase<v8::internal::Factory>::NewStructInternal(v8::internal::InstanceType, v8::internal::AllocationType)",93957336827504,93957336827646],["v8::internal::FactoryBase<v8::internal::Factory>::NewFixedArray(int, v8::internal::AllocationType)",93957336827888,93957336827936],["v8::internal::Factory::CopyJSObject(v8::internal::Handle<v8::internal::JSObject>)",93957336872256,93957336872268],["v8::internal::Factory::NewTypeError(v8::internal::MessageTemplate, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957336879776,93957336879954],["v8::internal::Factory::NewSlowJSObjectFromMap(v8::internal::Handle<v8::internal::Map>, int, v8::internal::AllocationType, v8::internal::Handle<v8::internal::AllocationSite>)",93957336886048,93957336886331],["v8::internal::Factory::NewJSModuleNamespace()",93957336889088,93957336889853],["v8::internal::Factory::NewJSSharedArrayBuffer(std::__1::shared_ptr<v8::internal::BackingStore>)",93957336893120,93957336893627],["v8::internal::Factory::NewJSSet()",93957336895520,93957336895995],["v8::internal::Factory::NewJSDataView(v8::internal::Handle<v8::internal::JSArrayBuffer>, unsigned long, unsigned long)",93957336898640,93957336898902],["v8::internal::Factory::NewJSMessageObject(v8::internal::MessageTemplate, v8::internal::Handle<v8::internal::Object>, int, int, v8::internal::Handle<v8::internal::SharedFunctionInfo>, int, v8::internal::Handle<v8::internal::Script>, v8::internal::Handle<v8::internal::Object>)",93957336901328,93957336902359],["v8::internal::Factory::NumberToString(v8::internal::Handle<v8::internal::Object>, v8::internal::NumberCacheMode)",93957336902432,93957336902539],["v8::internal::Factory::HeapNumberToString(v8::internal::Handle<v8::internal::HeapNumber>, double, v8::internal::NumberCacheMode)",93957336903552,93957336904517],["v8::internal::Factory::NewDebugInfo(v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957336904992,93957336905480],["v8::internal::Factory::NewBreakPoint(int, v8::internal::Handle<v8::internal::String>)",93957336905616,93957336905841],["v8::internal::Factory::NewArgumentsObject(v8::internal::Handle<v8::internal::JSFunction>, int)",93957336906464,93957336907209],["v8::internal::Factory::NewLoadHandler(int, v8::internal::AllocationType)",93957336908016,93957336908139],["v8::internal::Factory::SetRegExpAtomData(v8::internal::Handle<v8::internal::JSRegExp>, v8::internal::Handle<v8::internal::String>, v8::base::Flags<v8::internal::JSRegExp::Flag, int>, v8::internal::Handle<v8::internal::Object>)",93957336908368,93957336908762],["v8::internal::Factory::SetRegExpExperimentalData(v8::internal::Handle<v8::internal::JSRegExp>, v8::internal::Handle<v8::internal::String>, v8::base::Flags<v8::internal::JSRegExp::Flag, int>, int)",93957336909184,93957336909542],["v8::internal::ObjectVisitor::VisitPointer(v8::internal::HeapObject, v8::internal::CompressedObjectSlot)",93957337038848,93957337038866],["unsigned int std::__1::__sort4<std::__1::__less<std::__1::pair<int, v8::internal::HeapObject>, std::__1::pair<int, v8::internal::HeapObject> >&, std::__1::pair<int, v8::internal::HeapObject>*>(std::__1::pair<int, v8::internal::HeapObject>*, std::__1::pair<int, v8::internal::HeapObject>*, std::__1::pair<int, v8::internal::HeapObject>*, std::__1::pair<int, v8::internal::HeapObject>*, std::__1::__less<std::__1::pair<int, v8::internal::HeapObject>, std::__1::pair<int, v8::internal::HeapObject> >&)",93957337045936,93957337046138],["v8::internal::ZoneConsumedPreparseData::GetScopeData()",93957337047120,93957337047130],["v8::internal::Space::RoundSizeDownToObjectAlignment(int)",93957337047200,93957337047225],["v8::internal::PagedSpace::Waste()",93957337047296,93957337047313],["v8::internal::MapSpace::RoundSizeDownToObjectAlignment(int)",93957337047552,93957337047587],["v8::internal::StressConcurrentAllocationObserver::Step(int, unsigned long, unsigned long)",93957337047632,93957337047702],["v8::internal::UnreachableObjectsFilter::~UnreachableObjectsFilter()",93957337048048,93957337048247],["v8::internal::MarkingBarrier::RecordRelocSlot(v8::internal::Code, v8::internal::RelocInfo*, v8::internal::HeapObject)",93957337409616,93957337409774],["v8::internal::MarkingWorklists::Local::SwitchToContextSlow(unsigned long)",93957337416448,93957337416997],["v8::internal::MemoryAllocator::GetCommitPageSize()",93957337420704,93957337420735],["v8::internal::MemoryAllocator::Unmapper::NumberOfCommittedChunks()",93957337423024,93957337423098],["v8::internal::MemoryAllocator::ZapBlock(unsigned long, unsigned long, unsigned long)",93957337424848,93957337424870],["v8::internal::MemoryAllocator::AllocateReadOnlyPage(unsigned long, v8::internal::ReadOnlySpace*)",93957337425392,93957337425445],["v8::base::LazyInstanceImpl<v8::internal::(anonymous namespace)::GlobalBackingStoreRegistryImpl, v8::base::StaticallyAllocatedInstanceTrait<v8::internal::(anonymous namespace)::GlobalBackingStoreRegistryImpl>, v8::base::DefaultConstructTrait<v8::internal::(anonymous namespace)::GlobalBackingStoreRegistryImpl>, v8::base::ThreadSafeInitOnceTrait, v8::base::LeakyInstanceTrait<v8::internal::(anonymous namespace)::GlobalBackingStoreRegistryImpl> >::InitInstance(void*)",93957337426656,93957337426717],["v8::internal::MemoryChunkLayout::CodePageGuardStartOffset()",93957337427712,93957337427757],["v8::internal::MemoryChunkLayout::ObjectStartOffsetInDataPage()",93957337427840,93957337427865],["v8::internal::MemoryChunkLayout::AllocatableMemoryInDataPage()",93957337427952,93957337427985],["v8::internal::MemoryChunkLayout::MaxRegularCodeObjectSize()",93957337428128,93957337428224],["v8::internal::MemoryChunk::InitializationMemoryFence()",93957337428320,93957337428329],["v8::internal::MemoryChunk::SetReadable()",93957337428496,93957337428511],["v8::internal::MemoryChunk::SetReadAndWritable()",93957337428528,93957337428692],["v8::internal::MemoryChunk::CommittedPhysicalMemory()",93957337429120,93957337429172],["v8::internal::MemoryChunk::SetYoungGenerationPageFlags(bool)",93957337429232,93957337429272],["v8::internal::RegExpCharacterClass::AppendToText(v8::internal::RegExpText*, v8::internal::Zone*)",93957339820656,93957339820688],["v8::internal::AssertionNode::FillInBMInfo(v8::internal::Isolate*, int, int, v8::internal::BoyerMooreLookahead*, bool)",93957339828688,93957339828764],["v8::internal::LoopChoiceNode::GetQuickCheckDetails(v8::internal::QuickCheckDetails*, v8::internal::RegExpCompiler*, int, bool)",93957339833488,93957339833626],["v8::internal::AssertionNode::Emit(v8::internal::RegExpCompiler*, v8::internal::Trace*)",93957339835920,93957339836582],["v8::internal::TextNode::GreedyLoopTextLength()",93957339842064,93957339842129],["v8::internal::LoopChoiceNode::Emit(v8::internal::RegExpCompiler*, v8::internal::Trace*)",93957339842736,93957339843041],["v8::internal::BoyerMooreLookahead::FindBestInterval(int, int, int*, int*)",93957339845312,93957339845902],["v8::internal::ChoiceNode::EmitOptimizedUnanchoredSearch(v8::internal::RegExpCompiler*, v8::internal::Trace*)",93957339848704,93957339848982],["v8::internal::ActionNode::Emit(v8::internal::RegExpCompiler*, v8::internal::Trace*)",93957339850896,93957339851970],["v8::internal::AnalyzeRegExp(v8::internal::Isolate*, bool, v8::internal::RegExpNode*)",93957339852256,93957339852413],["v8::internal::TextNode::FillInBMInfo(v8::internal::Isolate*, int, int, v8::internal::BoyerMooreLookahead*, bool)",93957339852528,93957339853575],["v8::internal::ChoiceNode* v8::internal::Zone::New<v8::internal::ChoiceNode, int, v8::internal::Zone*>(int&&, v8::internal::Zone*&&)",93957339854272,93957339854520],["v8::internal::ActionNode::GreedyLoopTextLength()",93957339855536,93957339855547],["v8::internal::NegativeLookaroundChoiceNode::try_to_emit_quick_check_for_alternative(bool)",93957339855616,93957339855626],["v8::internal::GenerateBranches(v8::internal::RegExpMacroAssembler*, v8::internal::ZoneList<unsigned int>*, unsigned int, unsigned int, unsigned int, unsigned int, v8::internal::Label*, v8::internal::Label*, v8::internal::Label*)",93957339855648,93957339857826],["std::__1::__bit_iterator<std::__1::__bitset<2ul, 128ul>, false, 0> std::__1::copy<std::__1::__bitset<2ul, 128ul>, false>(std::__1::__bit_iterator<std::__1::__bitset<2ul, 128ul>, false, 0>, std::__1::__bit_iterator<std::__1::__bitset<2ul, 128ul>, false, 0>, std::__1::__bit_iterator<std::__1::__bitset<2ul, 128ul>, false, 0>)",93957339858144,93957339858540],["v8_inspector::(anonymous namespace)::ActualScript::codeOffset() const",93957342528080,93957342528153],["v8_inspector::(anonymous namespace)::ActualScript::setBreakpointOnRun(int*) const",93957342529632,93957342529713],["v8_inspector::V8Debugger::V8Debugger(v8::Isolate*, v8_inspector::V8InspectorImpl*)",93957342530736,93957342531073],["v8_inspector::V8Debugger::~V8Debugger()",93957342532080,93957342532108],["v8_inspector::V8Debugger::nearHeapLimitCallback(void*, unsigned long, unsigned long)",93957342532288,93957342532389],["v8_inspector::V8Debugger::isPausedInContextGroup(int) const",93957342532784,93957342532805],["v8_inspector::V8Debugger::getCompiledScripts(int, v8_inspector::V8DebuggerAgentImpl*)",93957342532832,93957342533386],["v8_inspector::V8Debugger::getPauseOnExceptionsState()",93957342533456,93957342533468],["v8_inspector::AsyncStackTrace::capture(v8_inspector::V8Debugger*, int, v8_inspector::String16 const&, int)",93957342655488,93957342656658],["std::__1::__unique_if<v8_inspector::(anonymous namespace)::PrimitiveValueMirror>::__unique_single std::__1::make_unique<v8_inspector::(anonymous namespace)::PrimitiveValueMirror, v8::Local<v8::Value>&, char const*&>(v8::Local<v8::Value>&, char const*&)",93957342687856,93957342688548],["v8_inspector::(anonymous namespace)::isArrayLike(v8::Local<v8::Context>, v8::Local<v8::Value>, unsigned long*)",93957342701232,93957342701751],["v8_inspector::protocol::Runtime::RemoteObject::setDescription(v8_inspector::String16 const&)",93957342704736,93957342705401],["void std::__1::vector<v8_inspector::InternalPropertyMirror, std::__1::allocator<v8_inspector::InternalPropertyMirror> >::__push_back_slow_path<v8_inspector::InternalPropertyMirror>(v8_inspector::InternalPropertyMirror&&)",93957342709696,93957342710154],["v8_inspector::(anonymous namespace)::ObjectMirror::~ObjectMirror()",93957342712080,93957342712148],["v8_inspector::(anonymous namespace)::ObjectMirror::buildObjectPreview(v8::Local<v8::Context>, bool, int*, int*, std::__1::unique_ptr<v8_inspector::protocol::Runtime::ObjectPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::ObjectPreview> >*) const",93957342713664,93957342713700],["v8_inspector::protocol::Runtime::RemoteObject::setClassName(v8_inspector::String16 const&)",93957342716128,93957342716784],["v8_inspector::protocol::Runtime::PropertyPreview::setValue(v8_inspector::String16 const&)",93957342718352,93957342719008],["v8_inspector::String16 v8_inspector::String16::concat<v8_inspector::String16, unsigned short>(v8_inspector::String16, unsigned short)",93957342721104,93957342721812],["void v8_inspector::String16Builder::appendAll<v8_inspector::String16, v8_inspector::String16>(v8_inspector::String16, v8_inspector::String16)",93957342723104,93957342723746],["void std::__1::vector<v8_inspector::String16, std::__1::allocator<v8_inspector::String16> >::emplace_back<char const (&) [17]>(char const (&) [17])",93957342730752,93957342730805],["v8_inspector::(anonymous namespace)::PreviewPropertyAccumulator::~PreviewPropertyAccumulator()",93957342731200,93957342731311],["v8_inspector::(anonymous namespace)::PreviewPropertyAccumulator::Add(v8_inspector::PropertyMirror)",93957342731424,93957342731945],["v8_inspector::(anonymous namespace)::PrimitiveValueMirror::~PrimitiveValueMirror()",93957342732608,93957342732676],["v8_inspector::(anonymous namespace)::PrimitiveValueMirror::buildRemoteObject(v8::Local<v8::Context>, v8_inspector::WrapMode, std::__1::unique_ptr<v8_inspector::protocol::Runtime::RemoteObject, std::__1::default_delete<v8_inspector::protocol::Runtime::RemoteObject> >*) const",93957342732768,93957342733255],["v8::internal::compiler::CodeGenerator::DefineDeoptimizationLiteral(v8::internal::compiler::DeoptimizationLiteral)",93957342873280,93957342873609],["v8::internal::compiler::CodeGenerator::TranslateStateValueDescriptor(v8::internal::compiler::StateValueDescriptor*, v8::internal::compiler::StateValueList*, v8::internal::compiler::InstructionOperandIterator*)",93957342884160,93957342884612],["v8::internal::compiler::GapResolver::Resolve(v8::internal::compiler::ParallelMove*)",93957342895136,93957342895790],["v8::internal::compiler::InstructionScheduler::AddInstruction(v8::internal::compiler::Instruction*)",93957342900128,93957342903546],["v8::internal::compiler::InstructionSelector::VisitBlock(v8::internal::compiler::BasicBlock*)",93957342909120,93957342910817],["v8::internal::compiler::InstructionSelector::Emit(unsigned int, v8::internal::compiler::InstructionOperand, v8::internal::compiler::InstructionOperand, v8::internal::compiler::InstructionOperand, unsigned long, v8::internal::compiler::InstructionOperand*)",93957342911808,93957342911875],["v8::internal::compiler::InstructionSelector::GetEffectLevel(v8::internal::compiler::Node*) const",93957342912304,93957342912328],["v8::internal::compiler::InstructionSelector::GetVirtualRegister(v8::internal::compiler::Node const*)",93957342912848,93957342912911],["v8::internal::compiler::InstructionSelector::IsUsed(v8::internal::compiler::Node*) const",93957342913008,93957342913070],["v8::internal::compiler::InstructionSelector::CanAddressRelativeToRootsRegister(v8::internal::ExternalReference const&) const",93957342913136,93957342913183],["v8::internal::compiler::InstructionSelector::MarkAsRepresentation(v8::internal::MachineRepresentation, v8::internal::compiler::Node*)",93957342913216,93957342913302],["v8::internal::compiler::StateValueList::PushArgumentsElements(v8::internal::CreateArgumentsType)",93957342917616,93957342917891],["v8::internal::compiler::Node::InputAt(int) const",93957342918176,93957342918215],["v8::internal::compiler::StateValueList::PushPlain(v8::internal::MachineType)",93957342918512,93957342918787],["v8::internal::compiler::InstructionSelector::AddInputsToFrameStateDescriptor(v8::internal::compiler::FrameStateDescriptor*, v8::internal::compiler::FrameState, v8::internal::compiler::OperandGenerator*, v8::internal::compiler::StateObjectDeduplicator*, v8::internal::ZoneVector<v8::internal::compiler::InstructionOperand>*, v8::internal::compiler::FrameStateInputKind, v8::internal::Zone*)",93957342920144,93957342920843],["v8::internal::compiler::InstructionSelector::EmitWithContinuation(unsigned int, v8::internal::compiler::InstructionOperand, v8::internal::compiler::FlagsContinuation*)",93957342920896,93957342920945],["v8::internal::compiler::MachineOperatorBuilder::I8x16Shl()",93957344483808,93957344483823],["v8::internal::compiler::MachineOperatorBuilder::Word64ReverseBits()",93957344484736,93957344484759],["v8::internal::compiler::StackSlotOperator* v8::internal::Zone::New<v8::internal::compiler::StackSlotOperator, int&, int&>(int&, int&)",93957344504864,93957344505027],["v8::internal::compiler::MachineOperatorBuilder::Word32AtomicOr(v8::internal::MachineType)",93957344507776,93957344507907],["v8::internal::compiler::MachineOperatorBuilder::Word32AtomicPairStore()",93957344509200,93957344509215],["v8::internal::compiler::MachineOperatorBuilder::Word32PoisonOnSpeculation()",93957344509328,93957344509343],["v8::internal::compiler::MachineOperatorBuilder::I8x16ExtractLaneS(int)",93957344510352,93957344510494],["v8::internal::compiler::operator==(v8::internal::compiler::S128ImmediateParameter const&, v8::internal::compiler::S128ImmediateParameter const&)",93957344511504,93957344511534],["v8::internal::compiler::MachineOperatorGlobalCache::MachineOperatorGlobalCache()",93957344513392,93957344569059],["v8::internal::compiler::Operator1<v8::internal::MachineType, v8::internal::compiler::OpEqualTo<v8::internal::MachineType>, v8::internal::compiler::OpHash<v8::internal::MachineType> >::HashCode() const",93957344569344,93957344569376],["v8::internal::compiler::Operator1<v8::internal::compiler::LoadTransformParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::LoadTransformParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::LoadTransformParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344569568,93957344569638],["v8::internal::compiler::Operator1<v8::internal::compiler::StoreRepresentation, v8::internal::compiler::OpEqualTo<v8::internal::compiler::StoreRepresentation>, v8::internal::compiler::OpHash<v8::internal::compiler::StoreRepresentation> >::Equals(v8::internal::compiler::Operator const*) const",93957344569904,93957344569942],["v8::internal::compiler::Operator1<v8::internal::compiler::LoadLaneParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::LoadLaneParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::LoadLaneParameters> >::HashCode() const",93957344570192,93957344570294],["v8::internal::compiler::Operator1<v8::internal::compiler::StoreLaneParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::StoreLaneParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::StoreLaneParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344570560,93957344570630],["v8::internal::compiler::Operator1<v8::internal::compiler::ShuffleParameter, v8::internal::compiler::OpEqualTo<v8::internal::compiler::ShuffleParameter>, v8::internal::compiler::OpHash<v8::internal::compiler::ShuffleParameter> >::Equals(v8::internal::compiler::Operator const*) const",93957344570800,93957344570832],["_ZNSt3__16vectorIN2v88internal6HandleINS2_3MapEEENS_9allocatorIS5_EEE6insertINS2_13ZoneHandleSetIS4_E14const_iteratorEEENS_9enable_ifIXaasr27__is_cpp17_forward_iteratorIT_EE5valuesr16is_constructibleIS5_NS_15iterator_traitsISE_E9referenceEEE5valueENS_11__wrap_iterIPS5_EEE4typeENSI_IPKS5_EESE_SE_",93957344571248,93957344573217],["v8::internal::compiler::MapInference::AllOfInstanceTypesAreJSReceiver() const",93957344573328,93957344573417],["v8::internal::InstanceTypeChecker::IsJSReceiver(v8::internal::InstanceType)",93957344573840,93957344573855],["v8::internal::compiler::MapInference::AnyOfInstanceTypesAre(v8::internal::InstanceType) const",93957344573968,93957344574077],["v8::internal::compiler::MapInference::GetMaps()",93957344574496,93957344574553],["v8::internal::compiler::MapInference::InsertMapChecks(v8::internal::compiler::JSGraph*, v8::internal::compiler::Effect*, v8::internal::compiler::Control, v8::internal::compiler::FeedbackSource const&)",93957344574624,93957344574889],["v8::internal::compiler::MapInference::RelyOnMapsHelper(v8::internal::compiler::CompilationDependencies*, v8::internal::compiler::JSGraph*, v8::internal::compiler::Effect*, v8::internal::compiler::Control, v8::internal::compiler::FeedbackSource const&)",93957344575008,93957344575326],["v8::internal::compiler::MapInference::NoChange()",93957344575568,93957344575591],["bool std::__1::__function::__policy_invoker<bool (v8::internal::InstanceType)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::MapInference::AllOfInstanceTypesAre(v8::internal::InstanceType) const::$_0, bool (v8::internal::InstanceType)> >(std::__1::__function::__policy_storage const*, v8::internal::InstanceType)",93957344575616,93957344575628],["v8::internal::compiler::MemoryLowering::Reduce(v8::internal::compiler::Node*)",93957344575792,93957344576006],["v8::internal::compiler::MemoryLowering::ReduceLoadElement(v8::internal::compiler::Node*)",93957344576160,93957344576448],["v8::internal::compiler::MemoryLowering::ReduceStoreToObject(v8::internal::compiler::Node*, v8::internal::compiler::MemoryLowering::AllocationState const*)",93957344576624,93957344577043],["v8::internal::compiler::MemoryLowering::ReduceStoreField(v8::internal::compiler::Node*, v8::internal::compiler::MemoryLowering::AllocationState const*)",93957344577520,93957344577872],["v8::internal::compiler::MemoryLowering::ReduceAllocateRaw(v8::internal::compiler::Node*, v8::internal::AllocationType, v8::internal::AllowLargeObjects, v8::internal::compiler::MemoryLowering::AllocationState const**)",93957344578240,93957344581364],["v8::internal::compiler::MemoryLowering::AllocationGroup::Contains(v8::internal::compiler::Node*) const",93957344581568,93957344581912],["v8::internal::compiler::MemoryLowering::AllocationState::AllocationState(v8::internal::compiler::MemoryLowering::AllocationGroup*, v8::internal::compiler::Node*)",93957344581952,93957344581981],["v8::internal::compiler::MemoryLowering::~MemoryLowering()",93957344582032,93957344582084],["v8::internal::compiler::Scheduler::InitializePlacement(v8::internal::compiler::Node*)",93957344757872,93957344758134],["v8::internal::compiler::Scheduler::ComputeSpecialRPO(v8::internal::Zone*, v8::internal::compiler::Schedule*)",93957344760896,93957344761050],["v8::internal::compiler::CFGBuilder::BuildBlockForNode(v8::internal::compiler::Node*)",93957344770080,93957344770219],["std::__1::vector<v8::internal::compiler::SpecialRPONumberer::LoopInfo, v8::internal::ZoneAllocator<v8::internal::compiler::SpecialRPONumberer::LoopInfo> >::__append(unsigned long, v8::internal::compiler::SpecialRPONumberer::LoopInfo const&)",93957344778784,93957344779554],["v8::internal::compiler::SerializerForBackgroundCompilation::Run()",93957344787696,93957344791170],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::VirtualBoundFunction const&)",93957344803392,93957344803725],["v8::internal::compiler::SerializerForBackgroundCompilation::VisitCallProperty1(v8::internal::interpreter::BytecodeArrayIterator*)",93957344822960,93957344823500],["v8::internal::compiler::SerializerForBackgroundCompilation::VisitGetTemplateObject(v8::internal::interpreter::BytecodeArrayIterator*)",93957344828320,93957344828639],["v8::internal::compiler::SerializerForBackgroundCompilation::VisitMov(v8::internal::interpreter::BytecodeArrayIterator*)",93957344830992,93957344831464],["v8::internal::compiler::SerializerForBackgroundCompilation::VisitShortStar(v8::internal::interpreter::Register)",93957344834016,93957344834360],["v8::internal::compiler::SerializerForBackgroundCompilation::ProcessCreateContext(v8::internal::interpreter::BytecodeArrayIterator*, int)",93957344840000,93957344840437],["v8::internal::compiler::SerializerForBackgroundCompilation::ProcessCalleeForCallOrConstruct(v8::internal::Handle<v8::internal::Object>, v8::base::Optional<v8::internal::compiler::Hints>, v8::internal::ZoneVector<v8::internal::compiler::Hints> const&, v8::internal::SpeculationMode, v8::internal::compiler::MissingArgumentsPolicy, v8::internal::compiler::Hints*)",93957344857344,93957344859695],["v8::internal::compiler::SerializerForBackgroundCompilation::ProcessHintsForRegExpTest(v8::internal::compiler::Hints const&)",93957344866160,93957344866753],["v8::internal::compiler::SerializerForBackgroundCompilation::ProcessGlobalAccess(v8::internal::FeedbackSlot, bool)",93957344868640,93957344868872],["v8::internal::compiler::SerializerForBackgroundCompilation::ProcessNamedSuperAccess(v8::internal::compiler::Hints*, v8::internal::compiler::NamedAccessFeedback const&, v8::internal::compiler::AccessMode, v8::internal::compiler::Hints*)",93957344875312,93957344876081],["bool std::__1::all_of<v8::internal::compiler::FunctionalList<v8::internal::compiler::VirtualClosure>::iterator, v8::internal::compiler::FunctionalSet<v8::internal::compiler::VirtualClosure, std::__1::equal_to<v8::internal::compiler::VirtualClosure> >::Includes(v8::internal::compiler::FunctionalSet<v8::internal::compiler::VirtualClosure, std::__1::equal_to<v8::internal::compiler::VirtualClosure> > const&) const::{lambda(v8::internal::compiler::VirtualClosure const&)#1}>(v8::internal::compiler::FunctionalList<v8::internal::compiler::VirtualClosure>::iterator, v8::internal::compiler::FunctionalSet<v8::internal::compiler::VirtualClosure, std::__1::equal_to<v8::internal::compiler::VirtualClosure> >::Includes(v8::internal::compiler::FunctionalSet<v8::internal::compiler::VirtualClosure, std::__1::equal_to<v8::internal::compiler::VirtualClosure> > const&) const::{lambda(v8::internal::compiler::VirtualClosure const&)#1}, v8::internal::compiler::FunctionalSet<v8::internal::compiler::VirtualClosure, std::__1::equal_to<v8::internal::compiler::VirtualClosure> >::Includes(v8::internal::compiler::FunctionalSet<v8::internal::compiler::VirtualClosure, std::__1::equal_to<v8::internal::compiler::VirtualClosure> > const&) const::{lambda(v8::internal::compiler::VirtualClosure const&)#1})",93957344881360,93957344881485],["v8::internal::compiler::SerializerForBackgroundCompilation::Environment::Environment(v8::internal::compiler::SerializerForBackgroundCompilation::Environment const&)",93957344883840,93957344884793],["void v8::internal::compiler::RepresentationSelector::VisitInputs<(v8::internal::compiler::Phase)0>(v8::internal::compiler::Node*)",93957344886192,93957344886578],["v8::internal::compiler::SimplifiedLowering::LowerAllNodes()",93957344887632,93957344888253],["v8::internal::compiler::SimplifiedLowering::DoJSToNumberOrNumericTruncatesToWord32(v8::internal::compiler::Node*, v8::internal::compiler::RepresentationSelector*)",93957344892704,93957344894898],["v8::internal::compiler::SimplifiedLowering::Int32Div(v8::internal::compiler::Node*)",93957344895936,93957344897284],["v8::internal::compiler::SimplifiedLowering::Uint32Mod(v8::internal::compiler::Node*)",93957344899936,93957344900904],["v8::internal::compiler::SimplifiedLowering::DoOrderedNumberToBit(v8::internal::compiler::Node*)",93957344901728,93957344902069],["v8::internal::compiler::SimplifiedLowering::DoSigned32ToUint8Clamped(v8::internal::compiler::Node*)",93957344903424,93957344903931],["v8::internal::compiler::RepresentationSelector::RunPropagatePhase()",93957344907248,93957344907819],["void v8::internal::compiler::RepresentationSelector::VisitUnused<(v8::internal::compiler::Phase)0>(v8::internal::compiler::Node*)",93957344935136,93957344935551],["void v8::internal::compiler::RepresentationSelector::VisitCall<(v8::internal::compiler::Phase)0>(v8::internal::compiler::Node*, v8::internal::compiler::SimplifiedLowering*)",93957344936624,93957344937365],["void v8::internal::compiler::RepresentationSelector::VisitSpeculativeAdditiveOp<(v8::internal::compiler::Phase)0>(v8::internal::compiler::Node*, v8::internal::compiler::Truncation, v8::internal::compiler::SimplifiedLowering*)",93957344939312,93957344939927],["v8::internal::compiler::RepresentationSelector::BothInputsAre(v8::internal::compiler::Node*, v8::internal::compiler::Type)",93957344940432,93957344940581],["v8::internal::compiler::RepresentationSelector::BothInputsAreSigned32(v8::internal::compiler::Node*)",93957344941424,93957344941583],["v8::internal::compiler::RepresentationSelector::InputIs(v8::internal::compiler::Node*, v8::internal::compiler::Type)",93957344946016,93957344946086],["v8::internal::compiler::RepresentationSelector::InputCannotBe(v8::internal::compiler::Node*, v8::internal::compiler::Type)",93957344948448,93957344948513],["v8::internal::compiler::(anonymous namespace)::TruncatingUseInfoFromRepresentation(v8::internal::MachineRepresentation)",93957344949232,93957344949326],["v8::internal::compiler::(anonymous namespace)::MachineRepresentationFromArrayType(v8::internal::ExternalArrayType)",93957344949696,93957344949772],["void v8::internal::compiler::RepresentationSelector::VisitFrameState<(v8::internal::compiler::Phase)0>(v8::internal::compiler::FrameState)",93957344950544,93957344951240],["v8::internal::compiler::RepresentationSelector::GetOutputInfoForPhi(v8::internal::compiler::Node*, v8::internal::compiler::Type, v8::internal::compiler::Truncation)",93957344951648,93957344952117],["void v8::internal::compiler::RepresentationSelector::VisitFastApiCall<(v8::internal::compiler::Phase)0>(v8::internal::compiler::Node*, v8::internal::compiler::SimplifiedLowering*)",93957344952576,93957344954165],["v8::base::SmallVector<v8::internal::compiler::UseInfo, 10ul>::Grow(unsigned long)",93957344955488,93957344955625],["v8::internal::compiler::RepresentationSelector::UpdateFeedbackType(v8::internal::compiler::Node*)",93957344955808,93957344958063],["v8::internal::compiler::RepresentationSelector::TypePhi(v8::internal::compiler::Node*)",93957344967104,93957344967362],["v8::internal::compiler::RepresentationSelector::TypeSelect(v8::internal::compiler::Node*)",93957344967648,93957344967780],["void v8::internal::compiler::RepresentationSelector::VisitSelect<(v8::internal::compiler::Phase)1>(v8::internal::compiler::Node*, v8::internal::compiler::Truncation, v8::internal::compiler::SimplifiedLowering*)",93957344968704,93957344968787],["void v8::internal::compiler::RepresentationSelector::VisitSpeculativeIntegerAdditiveOp<(v8::internal::compiler::Phase)1>(v8::internal::compiler::Node*, v8::internal::compiler::Truncation, v8::internal::compiler::SimplifiedLowering*)",93957344968960,93957344969575],["void v8::internal::compiler::RepresentationSelector::VisitSpeculativeNumberModulus<(v8::internal::compiler::Phase)1>(v8::internal::compiler::Node*, v8::internal::compiler::Truncation, v8::internal::compiler::SimplifiedLowering*)",93957344969888,93957344971223],["void v8::internal::compiler::RepresentationSelector::VisitNoop<(v8::internal::compiler::Phase)1>(v8::internal::compiler::Node*, v8::internal::compiler::Truncation)",93957344971456,93957344971563],["void v8::internal::compiler::RepresentationSelector::VisitCheck<(v8::internal::compiler::Phase)1>(v8::internal::compiler::Node*, v8::internal::compiler::Type, v8::internal::compiler::SimplifiedLowering*)",93957344972016,93957344972121],["void v8::internal::compiler::RepresentationSelector::VisitFastApiCall<(v8::internal::compiler::Phase)1>(v8::internal::compiler::Node*, v8::internal::compiler::SimplifiedLowering*)",93957344972304,93957344973093],["void v8::internal::compiler::RepresentationSelector::VisitNode<(v8::internal::compiler::Phase)2>(v8::internal::compiler::Node*, v8::internal::compiler::Truncation, v8::internal::compiler::SimplifiedLowering*)",93957344973808,93957345011819],["void v8::internal::compiler::RepresentationSelector::VisitSelect<(v8::internal::compiler::Phase)2>(v8::internal::compiler::Node*, v8::internal::compiler::Truncation, v8::internal::compiler::SimplifiedLowering*)",93957345012080,93957345012530],["void v8::internal::compiler::RepresentationSelector::VisitCall<(v8::internal::compiler::Phase)2>(v8::internal::compiler::Node*, v8::internal::compiler::SimplifiedLowering*)",93957345012992,93957345013524],["v8::internal::compiler::MachineOperatorBuilder::WordEqual()",93957345013600,93957345013622],["void v8::internal::compiler::RepresentationSelector::VisitSpeculativeAdditiveOp<(v8::internal::compiler::Phase)2>(v8::internal::compiler::Node*, v8::internal::compiler::Truncation, v8::internal::compiler::SimplifiedLowering*)",93957345015552,93957345016155],["void v8::internal::compiler::RepresentationSelector::VisitWord32TruncatingBinop<(v8::internal::compiler::Phase)2>(v8::internal::compiler::Node*)",93957345016576,93957345016727],["void v8::internal::compiler::RepresentationSelector::VisitFloat64Binop<(v8::internal::compiler::Phase)2>(v8::internal::compiler::Node*)",93957345016896,93957345017053],["v8::internal::compiler::RepresentationSelector::ChangeToUint32OverflowOp(v8::internal::compiler::Node*)",93957345017296,93957345017375],["void v8::internal::compiler::RepresentationSelector::VisitSpeculativeNumberModulus<(v8::internal::compiler::Phase)2>(v8::internal::compiler::Node*, v8::internal::compiler::Truncation, v8::internal::compiler::SimplifiedLowering*)",93957345017456,93957345020354],["v8::internal::compiler::RepresentationSelector::MaskShiftOperand(v8::internal::compiler::Node*, v8::internal::compiler::Type)",93957345020800,93957345021132],["v8::internal::compiler::RepresentationSelector::ChangeUnaryToPureBinaryOp(v8::internal::compiler::Node*, v8::internal::compiler::Operator const*, int, v8::internal::compiler::Node*)",93957345021600,93957345022066],["void v8::internal::compiler::RepresentationSelector::VisitCheck<(v8::internal::compiler::Phase)2>(v8::internal::compiler::Node*, v8::internal::compiler::Type, v8::internal::compiler::SimplifiedLowering*)",93957345023584,93957345023950],["void v8::internal::compiler::RepresentationSelector::VisitFrameState<(v8::internal::compiler::Phase)2>(v8::internal::compiler::FrameState)",93957345024384,93957345025739],["void v8::internal::compiler::RepresentationSelector::VisitObjectState<(v8::internal::compiler::Phase)2>(v8::internal::compiler::Node*)",93957345026672,93957345027643],["void v8::internal::compiler::RepresentationSelector::VisitFastApiCall<(v8::internal::compiler::Phase)2>(v8::internal::compiler::Node*, v8::internal::compiler::SimplifiedLowering*)",93957345027968,93957345029347],["v8::internal::compiler::RepresentationSelector::Kill(v8::internal::compiler::Node*)",93957345030464,93957345030837],["sigwait",139871563506048,139871563506173],["sigaddset",139871563507696,139871563507756],["sigisemptyset",139871563508128,139871563508221],["__libc_current_sigrtmax",139871563508400,139871563508407],["sigwaitinfo",139871563508736,139871563508743],["sighold",139871563508928,139871563509044],["sigignore",139871563509184,139871563509293],["atof",139871563509648,139871563509655],["getutline_r",139871564527216,139871564527394],["unlockpt",139871564532704,139871564532812],["__ptsname_r_chk",139871564533664,139871564533680],["getutxent",139871564533696,139871564533701],["nanf128",139871565669872,139871565669881],["atan2f128",139871565671584,139871565671760],["hypotf128",139871565672624,139871565672865],["y1f128",139871565673056,139871565673200],["logf128",139871565673360,139871565673473],["log2f128",139871565673616,139871565673729],["remainderf128",139871565674240,139871565674394],["sqrtf128",139871565674576,139871565674663],["v8::D8Console::Trace(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&)",93957335208432,93957335208472],["v8::D8Console::~D8Console()",93957335208528,93957335208574],["std::__1::deque<unsigned long, std::__1::allocator<unsigned long> >::__add_back_capacity()",93957335304736,93957335305157],["v8::ExternalOwningOneByteStringResource::data() const",93957335305360,93957335305375],["v8::InspectorClient::~InspectorClient()",93957335305808,93957335305932],["v8::InspectorClient::quitMessageLoopOnPause()",93957335306288,93957335306298],["v8::internal::CppGraphBuilderImpl::VisitationDoneItem::Process(v8::internal::CppGraphBuilderImpl&)",93957336822032,93957336822201],["cppgc::internal::HeapVisitor<v8::internal::LiveObjectsForVisibilityIterator>::Traverse(cppgc::internal::BasePage*)",93957336825104,93957336825495],["v8::internal::LocalEmbedderHeapTracer::IsRemoteTracingDone()",93957336825776,93957336825800],["v8::internal::LocalEmbedderHeapTracer::ExtractWrapperInfo(v8::internal::Isolate*, v8::internal::JSObject)",93957336825984,93957336826049],["v8::internal::Handle<v8::internal::HeapNumber> v8::internal::FactoryBase<v8::internal::Factory>::NewHeapNumber<(v8::internal::AllocationType)0>()",93957336826624,93957336826747],["v8::internal::Handle<v8::internal::HeapNumber> v8::internal::FactoryBase<v8::internal::Factory>::NewHeapNumber<(v8::internal::AllocationType)1>()",93957336826784,93957336826910],["v8::internal::FactoryBase<v8::internal::LocalFactory>::AllocateRawWithImmortalMap(int, v8::internal::AllocationType, v8::internal::Map, v8::internal::AllocationAlignment)",93957336827056,93957336827083],["v8::internal::Handle<v8::internal::String> v8::internal::FactoryBase<v8::internal::Factory>::InternalizeStringWithKey<v8::internal::SequentialStringKey<unsigned short> >(v8::internal::SequentialStringKey<unsigned short>*)",93957336827120,93957336827143],["v8::internal::Factory::CloneScript(v8::internal::Handle<v8::internal::Script>)",93957336866528,93957336867353],["v8::internal::Factory::NewWeakArrayList(int, v8::internal::AllocationType)",93957336876512,93957336876688],["v8::internal::Factory::NewError(v8::internal::MessageTemplate, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957336879008,93957336879186],["v8::internal::Factory::NewOffHeapTrampolineFor(v8::internal::Handle<v8::internal::Code>, unsigned long)",93957336881568,93957336882176],["v8::internal::Factory::InitializeJSObjectFromMap(v8::internal::JSObject, v8::internal::Object, v8::internal::Map)",93957336885440,93957336885739],["v8::internal::Factory::NewJSArray(v8::internal::ElementsKind, int, int, v8::internal::ArrayStorageAllocationMode, v8::internal::AllocationType)",93957336887072,93957336887345],["v8::internal::Factory::NewJSArrayStorage(v8::internal::Handle<v8::internal::JSArray>, int, int, v8::internal::ArrayStorageAllocationMode)",93957336888112,93957336888533],["v8::internal::Factory::NewSourceTextModule(v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957336890256,93957336891499],["v8::internal::Factory::NewJSArrayBufferAndBackingStore(unsigned long, v8::internal::InitializedFlag, v8::internal::AllocationType)",93957336892672,93957336893108],["v8::internal::Factory::NewJSIteratorResult(v8::internal::Handle<v8::internal::Object>, bool)",93957336893632,93957336894343],["v8::internal::Factory::NewJSMap()",93957336895040,93957336895515],["v8::internal::Factory::TypeAndSizeForElementsKind(v8::internal::ElementsKind, v8::internal::ExternalArrayType*, unsigned long*)",93957336896000,93957336896060],["v8::internal::Factory::NewJSTypedArray(v8::internal::ExternalArrayType, v8::internal::Handle<v8::internal::JSArrayBuffer>, unsigned long, unsigned long)",93957336896896,93957336898626],["v8::internal::Factory::NewJSBoundFunction(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::Object>, v8::internal::Vector<v8::internal::Handle<v8::internal::Object> >)",93957336898912,93957336900426],["v8::internal::Factory::ReinitializeJSGlobalProxy(v8::internal::Handle<v8::internal::JSGlobalProxy>, v8::internal::Handle<v8::internal::JSFunction>)",93957336900848,93957336901324],["v8::internal::Factory::NewSharedFunctionInfoForApiFunction(v8::internal::MaybeHandle<v8::internal::String>, v8::internal::Handle<v8::internal::FunctionTemplateInfo>, v8::internal::FunctionKind)",93957336902368,93957336902386],["v8::internal::Heap::NumberOfDetachedContexts()",93957337037584,93957337037613],["void v8::internal::Heap::WriteBarrierForRange<v8::internal::CompressedMaybeObjectSlot>(v8::internal::HeapObject, v8::internal::CompressedMaybeObjectSlot, v8::internal::CompressedMaybeObjectSlot)",93957337039264,93957337040873],["void std::__1::__sort<std::__1::__less<std::__1::pair<int, v8::internal::HeapObject>, std::__1::pair<int, v8::internal::HeapObject> >&, std::__1::pair<int, v8::internal::HeapObject>*>(std::__1::pair<int, v8::internal::HeapObject>*, std::__1::pair<int, v8::internal::HeapObject>*, std::__1::__less<std::__1::pair<int, v8::internal::HeapObject>, std::__1::pair<int, v8::internal::HeapObject> >&)",93957337044224,93957337045649],["bool std::__1::__insertion_sort_incomplete<std::__1::__less<std::__1::pair<int, v8::internal::HeapObject>, std::__1::pair<int, v8::internal::HeapObject> >&, std::__1::pair<int, v8::internal::HeapObject>*>(std::__1::pair<int, v8::internal::HeapObject>*, std::__1::pair<int, v8::internal::HeapObject>*, std::__1::__less<std::__1::pair<int, v8::internal::HeapObject>, std::__1::pair<int, v8::internal::HeapObject> >&)",93957337046432,93957337046900],["v8::internal::FixStaleLeftTrimmedHandlesVisitor::VisitRootPointer(v8::internal::Root, char const*, v8::internal::FullObjectSlot)",93957337047056,93957337047120],["v8::internal::PagedSpace::Size()",93957337047136,93957337047149],["ucache_hashKeys_68",93957337047184,93957337047195],["v8::internal::OldSpace::ExternalBackingStoreBytes(v8::internal::ExternalBackingStoreType) const",93957337047232,93957337047272],["v8::internal::(anonymous namespace)::YoungGenerationEvacuator::~YoungGenerationEvacuator()",93957337404192,93957337404269],["v8::internal::MarkingBarrier::Publish()",93957337410832,93957337411433],["v8::internal::MarkingWorklists::Local::IsEmbedderEmpty() const",93957337415584,93957337415634],["void v8::internal::MemoryAllocator::Free<(v8::internal::MemoryAllocator::FreeMode)3>(v8::internal::MemoryChunk*)",93957337418160,93957337418377],["v8::internal::MemoryAllocator::MemoryAllocator(v8::internal::Isolate*, unsigned long, unsigned long)",93957337419824,93957337420130],["v8::internal::MemoryAllocator::Unmapper::FreeQueuedChunks()",93957337421040,93957337421289],["v8::internal::MemoryAllocator::Unmapper::EnsureUnmappingCompleted()",93957337422160,93957337422256],["v8::internal::MemoryAllocator::Unmapper::CommittedBufferedMemory()",93957337423200,93957337423317],["v8::internal::MemoryAllocator::AllocateBasicChunk(unsigned long, unsigned long, v8::internal::Executability, v8::internal::BaseSpace*)",93957337423952,93957337424848],["v8::internal::MemoryAllocator::PartialFreeMemory(v8::internal::BasicMemoryChunk*, unsigned long, unsigned long, unsigned long)",93957337424880,93957337424988],["v8::internal::MemoryAllocator::FreeReadOnlyPage(v8::internal::ReadOnlyPage*)",93957337425200,93957337425384],["v8::internal::MemoryAllocator::AllocateLargePage(unsigned long, v8::internal::LargeObjectSpace*, v8::internal::Executability)",93957337425456,93957337425608],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<unsigned long, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> > >, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<unsigned long, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> > >, std::__1::__unordered_map_hasher<unsigned long, std::__1::__hash_value_type<unsigned long, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> > >, std::__1::hash<unsigned long>, std::__1::equal_to<unsigned long>, true>, std::__1::__unordered_map_equal<unsigned long, std::__1::__hash_value_type<unsigned long, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> > >, std::__1::equal_to<unsigned long>, std::__1::hash<unsigned long>, true>, std::__1::allocator<std::__1::__hash_value_type<unsigned long, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> > > > >::__emplace_unique_key_args<unsigned long, std::__1::piecewise_construct_t const&, std::__1::tuple<unsigned long const&>, std::__1::tuple<> >(unsigned long const&, std::__1::piecewise_construct_t const&, std::__1::tuple<unsigned long const&>&&, std::__1::tuple<>&&)",93957337425728,93957337426654],["v8::internal::MemoryAllocator::Unmapper::UnmapFreeMemoryJob::Run(v8::JobDelegate*)",93957337426720,93957337427439],["v8::internal::MemoryAllocator::Unmapper::TryGetPooledMemoryChunkSafe()",93957337427552,93957337427700],["v8::internal::MemoryChunkLayout::CodePageGuardSize()",93957337427760,93957337427770],["v8::internal::CharacterRange::AddClassEscape(char, v8::internal::ZoneList<v8::internal::CharacterRange>*, v8::internal::Zone*)",93957339805440,93957339809618],["v8::internal::Trace::RestoreAffectedRegisters(v8::internal::RegExpMacroAssembler*, int, v8::internal::DynamicBitSet const&, v8::internal::DynamicBitSet const&)",93957339823712,93957339824085],["v8::internal::ActionNode::EmptyMatchCheck(int, int, int, v8::internal::RegExpNode*)",93957339827520,93957339827653],["v8::internal::TextNode::GetQuickCheckDetails(v8::internal::QuickCheckDetails*, v8::internal::RegExpCompiler*, int, bool)",93957339829504,93957339830659],["v8::internal::ChoiceNode::FilterOneByte(int)",93957339832576,93957339833302],["v8::internal::LoopChoiceNode::GetQuickCheckDetailsFromLoopEntry(v8::internal::QuickCheckDetails*, v8::internal::RegExpCompiler*, int, bool)",93957339834160,93957339834225],["v8::internal::AssertionNode::BacktrackIfPrevious(v8::internal::RegExpCompiler*, v8::internal::Trace*, v8::internal::AssertionNode::IfPrevious)",93957339835392,93957339835864],["v8::internal::TextNode::CreateForCharacterRanges(v8::internal::Zone*, v8::internal::ZoneList<v8::internal::CharacterRange>*, bool, v8::internal::RegExpNode*, v8::base::Flags<v8::internal::JSRegExp::Flag, int>)",93957339839344,93957339839827],["v8::internal::TextNode::Emit(v8::internal::RegExpCompiler*, v8::internal::Trace*)",93957339840832,93957339842062],["v8::internal::TextNode::GetSuccessorOfOmnivorousTextNode(v8::internal::RegExpCompiler*)",93957339842144,93957339842284],["v8::internal::LoopChoiceNode::AddContinueAlternative(v8::internal::GuardedAlternative)",93957339842512,93957339842722],["v8::internal::ChoiceNode::Emit(v8::internal::RegExpCompiler*, v8::internal::Trace*)",93957339843056,93957339844429],["v8::internal::BoyerMooreLookahead::BoyerMooreLookahead(int, v8::internal::RegExpCompiler*, v8::internal::Zone*)",93957339844800,93957339845304],["v8::internal::BoyerMooreLookahead::GetSkipTable(int, int, v8::internal::Handle<v8::internal::ByteArray>)",93957339845904,93957339846146],["v8::internal::AlternativeGenerationList::AlternativeGenerationList(int, v8::internal::Zone*)",93957339846864,93957339848690],["v8::internal::ChoiceNode::EmitChoices(v8::internal::RegExpCompiler*, v8::internal::AlternativeGenerationList*, int, v8::internal::Trace*, v8::internal::PreloadState*)",93957339848992,93957339850274],["v8_inspector::(anonymous namespace)::ActualScript::sourceMappingURL() const",93957342526560,93957342526573],["v8_inspector::(anonymous namespace)::ActualScript::setSourceMappingURL(v8_inspector::String16 const&)",93957342528320,93957342528361],["v8_inspector::(anonymous namespace)::ActualScript::setBreakpoint(v8_inspector::String16 const&, v8::debug::Location*, int*) const",93957342529472,93957342529586],["v8_inspector::(anonymous namespace)::ActualScript::getDebugSymbolsType() const",93957342529856,93957342529926],["v8_inspector::(anonymous namespace)::ActualScript::MakeWeak()::{lambda(v8::WeakCallbackInfo<v8_inspector::(anonymous namespace)::ActualScript> const&)#1}::__invoke(v8::WeakCallbackInfo<v8_inspector::(anonymous namespace)::ActualScript> const&)",93957342530688,93957342530728],["v8_inspector::V8Debugger::~V8Debugger()",93957342531088,93957342531930],["non-virtual thunk to v8_inspector::V8Debugger::~V8Debugger()",93957342532064,93957342532078],["non-virtual thunk to v8_inspector::V8Debugger::~V8Debugger()",93957342532112,93957342532147],["v8_inspector::V8StackTraceImpl::StackFrameIterator::next()",93957342650928,93957342651398],["v8_inspector::ValueMirror::getProperties(v8::Local<v8::Context>, v8::Local<v8::Object>, bool, bool, v8_inspector::ValueMirror::PropertyAccumulator*)",93957342659008,93957342664280],["std::__1::__unique_if<v8_inspector::(anonymous namespace)::ObjectMirror>::__unique_single std::__1::make_unique<v8_inspector::(anonymous namespace)::ObjectMirror, v8::Local<v8::Value>&, char const (&) [15], v8_inspector::String16>(v8::Local<v8::Value>&, char const (&) [15], v8_inspector::String16&&)",93957342680720,93957342682017],["v8_inspector::(anonymous namespace)::descriptionForDate(v8::Local<v8::Context>, v8::Local<v8::Date>)",93957342690400,93957342690540],["v8_inspector::(anonymous namespace)::descriptionForEntry(v8::Local<v8::Context>, v8::Local<v8::Object>)",93957342694672,93957342701071],["void v8_inspector::String16Builder::appendAll<char const*, v8_inspector::String16, char const*>(char const*, v8_inspector::String16, char const*)",93957342702512,93957342703252],["bool std::__1::operator!=<unsigned short, std::__1::char_traits<unsigned short>, std::__1::allocator<unsigned short> >(std::__1::basic_string<unsigned short, std::__1::char_traits<unsigned short>, std::__1::allocator<unsigned short> > const&, std::__1::basic_string<unsigned short, std::__1::char_traits<unsigned short>, std::__1::allocator<unsigned short> > const&)",93957342703952,93957342704082],["void v8_inspector::String16Builder::appendAll<v8_inspector::String16, char, v8_inspector::String16, char>(v8_inspector::String16, char, v8_inspector::String16, char)",93957342706848,93957342707556],["void v8_inspector::String16Builder::appendAll<char const*, v8_inspector::String16, char>(char const*, v8_inspector::String16, char)",93957342708992,93957342709695],["void std::__1::vector<v8_inspector::PrivatePropertyMirror, std::__1::allocator<v8_inspector::PrivatePropertyMirror> >::__emplace_back_slow_path<v8_inspector::PrivatePropertyMirror>(v8_inspector::PrivatePropertyMirror&&)",93957342710160,93957342710748],["void v8_inspector::String16Builder::appendAll<char, v8_inspector::String16>(char, v8_inspector::String16)",93957342711424,93957342712066],["v8_inspector::(anonymous namespace)::ObjectMirror::~ObjectMirror()",93957342712160,93957342712231],["v8_inspector::(anonymous namespace)::ObjectMirror::buildPropertyPreview(v8::Local<v8::Context>, v8_inspector::String16 const&, std::__1::unique_ptr<v8_inspector::protocol::Runtime::PropertyPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::PropertyPreview> >*) const",93957342713216,93957342713656],["v8_inspector::(anonymous namespace)::ObjectMirror::buildEntryPreview(v8::Local<v8::Context>, int*, int*, std::__1::unique_ptr<v8_inspector::protocol::Runtime::ObjectPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::ObjectPreview> >*) const",93957342713712,93957342713751],["v8_inspector::protocol::StringValue::create(v8_inspector::String16 const&)",93957342715472,93957342716121],["v8_inspector::(anonymous namespace)::abbreviateString(v8_inspector::String16 const&, v8_inspector::(anonymous namespace)::AbbreviateMode)",93957342716784,93957342717666],["v8::internal::compiler::AddTypeAssertionsReducer::Reduce(v8::internal::compiler::Node*)",93957342862144,93957342862758],["v8::internal::compiler::CodeGenerator::FinalizeCode()",93957342876752,93957342877303],["v8::internal::compiler::DeoptimizationLiteral::Reify(v8::internal::Isolate*) const",93957342881104,93957342881383],["void std::__1::__sort<v8::internal::compiler::CodeGenerator::AssembleCode()::$_0&, std::__1::__deque_iterator<v8::internal::compiler::DeoptimizationExit*, v8::internal::compiler::DeoptimizationExit**, v8::internal::compiler::DeoptimizationExit*&, v8::internal::compiler::DeoptimizationExit***, long, 0l> >(std::__1::__deque_iterator<v8::internal::compiler::DeoptimizationExit*, v8::internal::compiler::DeoptimizationExit**, v8::internal::compiler::DeoptimizationExit*&, v8::internal::compiler::DeoptimizationExit***, long, 0l>, std::__1::__deque_iterator<v8::internal::compiler::DeoptimizationExit*, v8::internal::compiler::DeoptimizationExit**, v8::internal::compiler::DeoptimizationExit*&, v8::internal::compiler::DeoptimizationExit***, long, 0l>, v8::internal::compiler::CodeGenerator::AssembleCode()::$_0&)",93957342886432,93957342890591],["v8::internal::compiler::FrameElider::PropagateMarks()",93957342893968,93957342894725],["v8::internal::compiler::InstructionScheduler::InstructionScheduler(v8::internal::Zone*, v8::internal::compiler::InstructionSequence*)",93957342896688,93957342896894],["void v8::internal::compiler::InstructionScheduler::Schedule<v8::internal::compiler::InstructionScheduler::CriticalPathFirstQueue>()",93957342898144,93957342899164],["v8::internal::compiler::InstructionSelector::InstructionSelector(v8::internal::Zone*, unsigned long, v8::internal::compiler::Linkage*, v8::internal::compiler::InstructionSequence*, v8::internal::compiler::Schedule*, v8::internal::compiler::SourcePositionTable*, v8::internal::compiler::Frame*, v8::internal::compiler::InstructionSelector::EnableSwitchJumpTable, v8::internal::TickCounter*, v8::internal::compiler::JSHeapBroker*, unsigned long*, unsigned long*, v8::internal::compiler::InstructionSelector::SourcePositionMode, v8::internal::compiler::InstructionSelector::Features, v8::internal::compiler::InstructionSelector::EnableScheduling, v8::internal::compiler::InstructionSelector::EnableRootsRelativeAddressing, v8::internal::PoisoningMitigationLevel, v8::internal::compiler::InstructionSelector::EnableTraceTurboJson)",93957342903648,93957342906591],["v8::internal::compiler::InstructionSelector::MarkAsUsed(v8::internal::compiler::Node*)",93957342909072,93957342909111],["v8::internal::compiler::InstructionSelector::Emit(unsigned int, v8::internal::compiler::InstructionOperand, unsigned long, v8::internal::compiler::InstructionOperand*)",93957342910832,93957342910886],["v8::internal::compiler::InstructionSelector::Emit(unsigned int, v8::internal::compiler::InstructionOperand, v8::internal::compiler::InstructionOperand, unsigned long, v8::internal::compiler::InstructionOperand*)",93957342911744,93957342911806],["v8::internal::compiler::InstructionSelector::Emit(unsigned int, v8::internal::compiler::InstructionOperand, v8::internal::compiler::InstructionOperand, v8::internal::compiler::InstructionOperand, v8::internal::compiler::InstructionOperand, unsigned long, v8::internal::compiler::InstructionOperand*)",93957342911888,93957342911956],["v8::internal::compiler::InstructionSelector::CanCover(v8::internal::compiler::Node*, v8::internal::compiler::Node*) const",93957342912048,93957342912292],["v8::internal::compiler::InstructionSelector::CanCoverTransitively(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*) const",93957342912336,93957342912465],["v8::internal::compiler::InstructionSelector::SetRename(v8::internal::compiler::Node const*, v8::internal::compiler::Node const*)",93957342912624,93957342912837],["v8::internal::compiler::InstructionSelector::IsDefined(v8::internal::compiler::Node*) const",93957342912912,93957342912951],["v8::internal::compiler::MachineOperatorBuilder::I16x8AddSatS()",93957344483296,93957344483311],["v8::internal::compiler::MachineOperatorBuilder::I8x16SubSatU()",93957344484064,93957344484079],["v8::internal::compiler::MachineOperatorBuilder::TruncateFloat32ToUint32(v8::internal::compiler::TruncateKind)",93957344484480,93957344484509],["v8::internal::compiler::MachineOperatorBuilder::Float64RoundTruncate()",93957344484992,93957344485015],["v8::internal::compiler::Operator1<v8::internal::compiler::LoadLaneParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::LoadLaneParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::LoadLaneParameters> >* v8::internal::Zone::New<v8::internal::compiler::Operator1<v8::internal::compiler::LoadLaneParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::LoadLaneParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::LoadLaneParameters> >, v8::internal::compiler::IrOpcode::Value, v8::base::Flags<v8::internal::compiler::Operator::Property, unsigned char>, char const (&) [9], int, int, int, int, int, int, v8::internal::compiler::LoadLaneParameters>(v8::internal::compiler::IrOpcode::Value&&, v8::base::Flags<v8::internal::compiler::Operator::Property, unsigned char>&&, char const (&) [9], int&&, int&&, int&&, int&&, int&&, int&&, v8::internal::compiler::LoadLaneParameters&&)",93957344496112,93957344496298],["v8::internal::compiler::MachineOperatorBuilder::UnsafePointerAdd()",93957344506672,93957344506687],["v8::internal::compiler::MachineOperatorBuilder::Word32AtomicCompareExchange(v8::internal::MachineType)",93957344507200,93957344507331],["v8::internal::compiler::MachineOperatorBuilder::Word64AtomicAdd(v8::internal::MachineType)",93957344508288,93957344508403],["v8::internal::compiler::MachineOperatorBuilder::Word64AtomicCompareExchange(v8::internal::MachineType)",93957344509056,93957344509171],["v8::internal::compiler::MachineOperatorBuilder::Word32AtomicPairSub()",93957344509232,93957344509247],["v8::internal::compiler::MachineOperatorBuilder::Word32AtomicPairExchange()",93957344509296,93957344509311],["v8::internal::compiler::MachineOperatorBuilder::F32x4ExtractLane(int)",93957344509488,93957344509630],["v8::internal::compiler::MachineOperatorBuilder::I16x8ExtractLaneS(int)",93957344510064,93957344510206],["v8::internal::compiler::MachineOperatorBuilder::F32x4ReplaceLane(int)",93957344510640,93957344510782],["v8::internal::compiler::MachineOperatorBuilder::I8x16ReplaceLane(int)",93957344511216,93957344511358],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::S128ImmediateParameter const&)",93957344512160,93957344512642],["v8::internal::compiler::MachineOperatorBuilder::I8x16Shuffle(unsigned char const*, bool)",93957344513184,93957344513385],["v8::internal::compiler::Operator1<v8::internal::compiler::ShiftKind, v8::internal::compiler::OpEqualTo<v8::internal::compiler::ShiftKind>, v8::internal::compiler::OpHash<v8::internal::compiler::ShiftKind> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344569072,93957344569170],["v8::internal::compiler::Operator1<v8::internal::MachineType, v8::internal::compiler::OpEqualTo<v8::internal::MachineType>, v8::internal::compiler::OpHash<v8::internal::MachineType> >::Equals(v8::internal::compiler::Operator const*) const",93957344569296,93957344569336],["v8::internal::compiler::Operator1<v8::internal::MachineType, v8::internal::compiler::OpEqualTo<v8::internal::MachineType>, v8::internal::compiler::OpHash<v8::internal::MachineType> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344569376,93957344569446],["v8::internal::compiler::Operator1<v8::internal::compiler::LoadTransformParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::LoadTransformParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::LoadTransformParameters> >::HashCode() const",93957344569504,93957344569560],["v8::internal::compiler::Operator1<v8::internal::compiler::StackSlotRepresentation, v8::internal::compiler::OpEqualTo<v8::internal::compiler::StackSlotRepresentation>, v8::internal::compiler::OpHash<v8::internal::compiler::StackSlotRepresentation> >::Equals(v8::internal::compiler::Operator const*) const",93957344569648,93957344569696],["v8::internal::compiler::Operator1<v8::internal::compiler::StackSlotRepresentation, v8::internal::compiler::OpEqualTo<v8::internal::compiler::StackSlotRepresentation>, v8::internal::compiler::OpHash<v8::internal::compiler::StackSlotRepresentation> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344569792,93957344569899],["v8::internal::compiler::Operator1<v8::internal::compiler::StoreRepresentation, v8::internal::compiler::OpEqualTo<v8::internal::compiler::StoreRepresentation>, v8::internal::compiler::OpHash<v8::internal::compiler::StoreRepresentation> >::HashCode() const",93957344569952,93957344570008],["v8::internal::compiler::Operator1<v8::internal::compiler::LoadLaneParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::LoadLaneParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::LoadLaneParameters> >::Equals(v8::internal::compiler::Operator const*) const",93957344570096,93957344570179],["v8::internal::compiler::Operator1<v8::internal::compiler::LoadLaneParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::LoadLaneParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::LoadLaneParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344570304,93957344570374],["v8::internal::compiler::Operator1<v8::internal::compiler::StoreLaneParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::StoreLaneParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::StoreLaneParameters> >::HashCode() const",93957344570464,93957344570550],["v8::internal::compiler::Operator1<v8::internal::compiler::S128ImmediateParameter, v8::internal::compiler::OpEqualTo<v8::internal::compiler::S128ImmediateParameter>, v8::internal::compiler::OpHash<v8::internal::compiler::S128ImmediateParameter> >::Equals(v8::internal::compiler::Operator const*) const",93957344570640,93957344570672],["v8::internal::compiler::Operator1<v8::internal::compiler::S128ImmediateParameter, v8::internal::compiler::OpEqualTo<v8::internal::compiler::S128ImmediateParameter>, v8::internal::compiler::OpHash<v8::internal::compiler::S128ImmediateParameter> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344570720,93957344570792],["v8::internal::compiler::Operator1<v8::internal::compiler::ShuffleParameter, v8::internal::compiler::OpEqualTo<v8::internal::compiler::ShuffleParameter>, v8::internal::compiler::OpHash<v8::internal::compiler::ShuffleParameter> >::HashCode() const",93957344570832,93957344570910],["v8::internal::compiler::MapInference::MapInference(v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957344571056,93957344571240],["v8::internal::compiler::MapInference::~MapInference()",93957344573232,93957344573287],["v8::internal::compiler::Scheduler::IncrementUnscheduledUseCount(v8::internal::compiler::Node*, int, v8::internal::compiler::Node*)",93957344759216,93957344759599],["v8::internal::compiler::Scheduler::GenerateDominatorTree(v8::internal::compiler::Schedule*)",93957344761904,93957344762130],["v8::internal::compiler::CFGBuilder::Queue(v8::internal::compiler::Node*)",93957344768480,93957344769242],["v8::internal::compiler::CFGBuilder::ConnectSwitch(v8::internal::compiler::Node*)",93957344771776,93957344772539],["v8::internal::compiler::SpecialRPONumberer::ComputeLoopInfo(v8::internal::ZoneVector<v8::internal::compiler::SpecialRPONumberer::SpecialRPOStackFrame>*, unsigned long, v8::internal::ZoneVector<std::__1::pair<v8::internal::compiler::BasicBlock*, unsigned long> >*)",93957344776912,93957344777745],["v8::internal::compiler::ScheduleLateNodeVisitor::GetCommonDominatorOfUses(v8::internal::compiler::Node*)",93957344781536,93957344781719],["v8::internal::compiler::SelectLowering::Reduce(v8::internal::compiler::Node*)",93957344786752,93957344786776],["v8::internal::compiler::Hints::AddConstant(v8::internal::Handle<v8::internal::Object>, v8::internal::Zone*, v8::internal::compiler::JSHeapBroker*)",93957344792896,93957344793700],["v8::internal::compiler::Hints::CopyToParentZone(v8::internal::Zone*, v8::internal::compiler::JSHeapBroker*) const",93957344799952,93957344801829],["v8::internal::compiler::Hints::Merge(v8::internal::compiler::Hints const&, v8::internal::Zone*, v8::internal::compiler::JSHeapBroker*)",93957344805008,93957344805847],["v8::internal::compiler::SerializerForBackgroundCompilation::IncorporateJumpTargetEnvironment(int)",93957344820736,93957344821262],["v8::internal::compiler::SerializerForBackgroundCompilation::VisitCallUndefinedReceiver2(v8::internal::interpreter::BytecodeArrayIterator*)",93957344825120,93957344825738],["v8::internal::compiler::SerializerForBackgroundCompilation::VisitGetIterator(v8::internal::interpreter::BytecodeArrayIterator*)",93957344827312,93957344827676],["v8::internal::compiler::SerializerForBackgroundCompilation::VisitLdaConstant(v8::internal::interpreter::BytecodeArrayIterator*)",93957344829520,93957344829704],["v8::internal::compiler::SerializerForBackgroundCompilation::VisitLdaSmi(v8::internal::interpreter::BytecodeArrayIterator*)",93957344830592,93957344830798],["v8::internal::compiler::SerializerForBackgroundCompilation::VisitPushContext(v8::internal::interpreter::BytecodeArrayIterator*)",93957344831824,93957344832312],["v8::internal::compiler::SerializerForBackgroundCompilation::VisitSwitchOnSmiNoFeedback(v8::internal::interpreter::BytecodeArrayIterator*)",93957344833120,93957344833294],["v8::internal::ZoneVector<v8::internal::compiler::Hints> v8::internal::compiler::SerializerForBackgroundCompilation::PrepareArgumentsHints<>(v8::internal::compiler::Hints*)",93957344834736,93957344835607],["v8::internal::compiler::SerializerForBackgroundCompilation::ProcessContextAccess(v8::internal::compiler::Hints const&, int, int, v8::internal::compiler::SerializerForBackgroundCompilation::ContextProcessingMode, v8::internal::compiler::Hints*)",93957344838848,93957344839785],["v8::internal::ZoneVector<v8::internal::compiler::Hints> v8::internal::compiler::SerializerForBackgroundCompilation::PrepareArgumentsHints<v8::internal::compiler::Hints*>(v8::internal::compiler::Hints*, v8::internal::compiler::Hints*)",93957344840656,93957344842272],["v8::internal::compiler::SerializerForBackgroundCompilation::ProcessBuiltinCall(v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::base::Optional<v8::internal::compiler::Hints>, v8::internal::ZoneVector<v8::internal::compiler::Hints> const&, v8::internal::SpeculationMode, v8::internal::compiler::MissingArgumentsPolicy, v8::internal::compiler::Hints*)",93957344847136,93957344856938],["std::__1::vector<v8::internal::compiler::Hints, v8::internal::ZoneAllocator<v8::internal::compiler::Hints> >::insert(std::__1::__wrap_iter<v8::internal::compiler::Hints const*>, v8::internal::compiler::Hints const&)",93957344860336,93957344861989],["v8::internal::compiler::SerializerForBackgroundCompilation::ProcessHintsForObjectCreate(v8::internal::compiler::Hints const&)",93957344865632,93957344865762],["v8::internal::compiler::SerializerForBackgroundCompilation::ProcessHintsForOrdinaryHasInstance(v8::internal::compiler::Hints const&, v8::internal::compiler::Hints const&)",93957344867024,93957344867203],["v8::internal::compiler::SerializerForBackgroundCompilation::ProcessHintsForHasInPrototypeChain(v8::internal::compiler::Hints const&)::$_1::operator()(v8::internal::Handle<v8::internal::Map>) const",93957344868208,93957344868370],["v8::internal::compiler::SerializerForBackgroundCompilation::ProcessLdaLookupContextSlot(v8::internal::interpreter::BytecodeArrayIterator*)",93957344869168,93957344869479],["v8::internal::compiler::SerializerForBackgroundCompilation::ProcessNamedAccess(v8::internal::compiler::Hints*, v8::internal::compiler::NamedAccessFeedback const&, v8::internal::compiler::AccessMode, v8::internal::compiler::Hints*)",93957344873408,93957344874933],["v8::internal::compiler::SerializerForBackgroundCompilation::ProcessConstantForInstanceOf(v8::internal::compiler::ObjectRef const&, bool*)",93957344876480,93957344877032],["_ZNSt3__16vectorIN2v88internal8compiler5HintsENS2_13ZoneAllocatorIS4_EEE6insertINS_16reverse_iteratorINS_11__wrap_iterIPS4_EEEEEENS_9enable_ifIXaasr27__is_cpp17_forward_iteratorIT_EE5valuesr16is_constructibleIS4_NS_15iterator_traitsISF_E9referenceEEE5valueESC_E4typeENSA_IPKS4_EESF_SF_",93957344877744,93957344881352],["v8::internal::compiler::FunctionalList<v8::internal::compiler::VirtualBoundFunction>::Cons* v8::internal::Zone::New<v8::internal::compiler::FunctionalList<v8::internal::compiler::VirtualBoundFunction>::Cons, v8::internal::compiler::VirtualBoundFunction, v8::internal::compiler::FunctionalList<v8::internal::compiler::VirtualBoundFunction>::Cons*&>(v8::internal::compiler::VirtualBoundFunction&&, v8::internal::compiler::FunctionalList<v8::internal::compiler::VirtualBoundFunction>::Cons*&)",93957344881488,93957344882557],["_ZNSt3__16vectorIN2v88internal8compiler5HintsENS2_13ZoneAllocatorIS4_EEEC2INS_11__wrap_iterIPKS4_EEEET_SD_RKS6_PNS_9enable_ifIXaasr27__is_cpp17_forward_iteratorISD_EE5valuesr16is_constructibleIS4_NS_15iterator_traitsISD_E9referenceEEE5valueEvE4typeE",93957344883360,93957344883835],["void v8::internal::compiler::RepresentationSelector::EnqueueInput<(v8::internal::compiler::Phase)0>(v8::internal::compiler::Node*, int, v8::internal::compiler::UseInfo)",93957344884800,93957344885448],["void v8::internal::compiler::RepresentationSelector::ProcessRemainingInputs<(v8::internal::compiler::Phase)0>(v8::internal::compiler::Node*, int)",93957344885952,93957344886191],["void v8::internal::compiler::RepresentationSelector::VisitInputs<(v8::internal::compiler::Phase)2>(v8::internal::compiler::Node*)",93957344886592,93957344886834],["v8::internal::compiler::SimplifiedLowering::SimplifiedLowering(v8::internal::compiler::JSGraph*, v8::internal::compiler::JSHeapBroker*, v8::internal::Zone*, v8::internal::compiler::SourcePositionTable*, v8::internal::compiler::NodeOriginTable*, v8::internal::PoisoningMitigationLevel, v8::internal::TickCounter*, v8::internal::compiler::Linkage*, v8::internal::compiler::ObserveNodeManager*)",93957344887520,93957344887625],["v8::internal::compiler::RepresentationSelector::RepresentationSelector(v8::internal::compiler::JSGraph*, v8::internal::compiler::JSHeapBroker*, v8::internal::Zone*, v8::internal::compiler::RepresentationChanger*, v8::internal::compiler::SourcePositionTable*, v8::internal::compiler::NodeOriginTable*, v8::internal::TickCounter*, v8::internal::compiler::Linkage*, v8::internal::compiler::ObserveNodeManager*)",93957344888256,93957344888862],["v8::internal::compiler::RepresentationSelector::DeferReplacement(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957344891104,93957344892692],["v8::internal::compiler::SimplifiedLowering::Float64Round(v8::internal::compiler::Node*)",93957344894912,93957344895326],["v8::internal::compiler::SimplifiedLowering::Int32Abs(v8::internal::compiler::Node*)",93957344895696,93957344895922],["v8::internal::compiler::SimplifiedLowering::Int32Mod(v8::internal::compiler::Node*)",93957344897296,93957344899213],["v8::internal::compiler::SimplifiedLowering::Uint32Div(v8::internal::compiler::Node*)",93957344899584,93957344899926],["v8::internal::compiler::SimplifiedLowering::DoMax(v8::internal::compiler::Node*, v8::internal::compiler::Operator const*, v8::internal::MachineRepresentation)",93957344900912,93957344901214],["v8::internal::compiler::SimplifiedLowering::DoIntegral32ToBit(v8::internal::compiler::Node*)",93957344901392,93957344901718],["v8::internal::compiler::SimplifiedLowering::DoNumberToBit(v8::internal::compiler::Node*)",93957344902080,93957344902383],["v8::internal::compiler::SimplifiedLowering::DoNumberToUint8Clamped(v8::internal::compiler::Node*)",93957344902896,93957344903424],["v8::internal::compiler::SimplifiedLowering::DoUnsigned32ToUint8Clamped(v8::internal::compiler::Node*)",93957344903936,93957344904303],["v8::internal::compiler::RepresentationSelector::GenerateTraversal()",93957344904368,93957344907241],["v8::internal::compiler::RepresentationSelector::RunRetypePhase()",93957344907824,93957344908940],["void v8::internal::compiler::RepresentationSelector::VisitNode<(v8::internal::compiler::Phase)0>(v8::internal::compiler::Node*, v8::internal::compiler::Truncation, v8::internal::compiler::SimplifiedLowering*)",93957344909424,93957344935128],["void v8::internal::compiler::RepresentationSelector::VisitUnop<(v8::internal::compiler::Phase)0>(v8::internal::compiler::Node*, v8::internal::compiler::UseInfo, v8::internal::MachineRepresentation, v8::internal::compiler::Type)",93957344935552,93957344935843],["void v8::internal::compiler::RepresentationSelector::VisitPhi<(v8::internal::compiler::Phase)0>(v8::internal::compiler::Node*, v8::internal::compiler::Truncation, v8::internal::compiler::SimplifiedLowering*)",93957344936240,93957344936623],["v8::internal::compiler::RepresentationSelector::OneInputCannotBe(v8::internal::compiler::Node*, v8::internal::compiler::Type)",93957344937376,93957344937512],["void v8::internal::compiler::RepresentationSelector::VisitSpeculativeIntegerAdditiveOp<(v8::internal::compiler::Phase)0>(v8::internal::compiler::Node*, v8::internal::compiler::Truncation, v8::internal::compiler::SimplifiedLowering*)",93957344937840,93957344939297],["v8::internal::compiler::(anonymous namespace)::CheckedUseInfoAsWord32FromHint(v8::internal::compiler::NumberOperationHint, v8::internal::compiler::FeedbackSource const&, v8::internal::compiler::IdentifyZeros)",93957344939936,93957344940022],["void v8::internal::compiler::RepresentationSelector::VisitWord32TruncatingBinop<(v8::internal::compiler::Phase)0>(v8::internal::compiler::Node*)",93957344940112,93957344940420],["void v8::internal::compiler::RepresentationSelector::VisitInt64Binop<(v8::internal::compiler::Phase)0>(v8::internal::compiler::Node*)",93957344940592,93957344940913],["v8::internal::compiler::RepresentationSelector::BothInputsAreUnsigned32(v8::internal::compiler::Node*)",93957344941264,93957344941423],["void v8::internal::compiler::RepresentationSelector::VisitSpeculativeNumberModulus<(v8::internal::compiler::Phase)0>(v8::internal::compiler::Node*, v8::internal::compiler::Truncation, v8::internal::compiler::SimplifiedLowering*)",93957344941584,93957344944859],["void v8::internal::compiler::RepresentationSelector::VisitSpeculativeInt32Binop<(v8::internal::compiler::Phase)0>(v8::internal::compiler::Node*)",93957344945168,93957344946002],["void v8::internal::compiler::RepresentationSelector::VisitNoop<(v8::internal::compiler::Phase)0>(v8::internal::compiler::Node*, v8::internal::compiler::Truncation)",93957344946096,93957344946528],["bsd_signal",139871563504480,139871563504534],["sigpause",139871563506592,139871563506685],["sigemptyset",139871563507520,139871563507586],["sigismember",139871563507824,139871563507876],["__sysv_signal",139871563508080,139871563508126],["sigandset",139871563508224,139871563508301],["__libc_current_sigrtmin",139871563508384,139871563508391],["__libc_allocate_rtsig",139871563508416,139871563508476],["endutent",139871564526576,139871564526714],["updwtmp",139871564531200,139871564531468],["grantpt",139871564532048,139871564532704],["ptsname",139871564533488,139871564533584],["cprojf128",139871565664304,139871565664507],["llogbf128",139871565670144,139871565670236],["acoshf128",139871565671376,139871565671463],["coshf128",139871565671904,139871565672077],["fmodf128",139871565672464,139871565672618],["j0f128",139871565672880,139871565672885],["j1f128",139871565673040,139871565673045],["jnf128",139871565673200,139871565673205],["v8::D8Console::TimeEnd(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&)",93957335207392,93957335207988],["__jit_debug_register_code",93957335208480,93957335208486],["std::__1::__deque_base<v8::Global<v8::Context>, std::__1::allocator<v8::Global<v8::Context> > >::clear()",93957335303184,93957335303476],["v8::ExternalOwningOneByteStringResource::~ExternalOwningOneByteStringResource()",93957335305200,93957335305243],["ucache_deleteKey_68",93957335305328,93957335305346],["v8::ExternalOwningOneByteStringResource::length() const",93957335305376,93957335305391],["v8::internal::CppGraphBuilderImpl::VisitRootForGraphBuilding(v8::internal::RootState&, cppgc::internal::HeapObjectHeader const&, cppgc::SourceLocation const&)",93957336818848,93957336819062],["v8::internal::EmbedderNode::GetDetachedness()",93957336822368,93957336822377],["v8::internal::CppGraphBuilderImpl::AddEdge(v8::internal::State&, v8::TracedReferenceBase const&)",93957336823776,93957336824351],["v8::internal::LocalEmbedderHeapTracer::TracePrologue(v8::EmbedderHeapTracer::TraceFlags)",93957336825552,93957336825584],["v8::internal::LocalEmbedderHeapTracer::Trace(double)",93957336825744,93957336825771],["v8::internal::LocalEmbedderHeapTracer::SetEmbedderStackStateForNextFinalization(cppgc::EmbedderStackState)",93957336825808,93957336825840],["v8::internal::LocalEmbedderHeapTracer::ProcessingScope::~ProcessingScope()",93957336825904,93957336825971],["v8::internal::(anonymous namespace)::ExtractWrappableInfo(v8::internal::Isolate*, v8::internal::JSObject, v8::WrapperDescriptor const&, std::__1::pair<void*, void*>*)",93957336826064,93957336826405],["v8::internal::Factory::NewPrivateNameSymbol(v8::internal::Handle<v8::internal::String>)",93957336859552,93957336859822],["v8::internal::Factory::NewCell(v8::internal::Handle<v8::internal::Object>)",93957336869408,93957336869657],["v8::internal::Handle<v8::internal::PropertyArray> v8::internal::Factory::CopyArrayWithMap<v8::internal::PropertyArray>(v8::internal::Handle<v8::internal::PropertyArray>, v8::internal::Handle<v8::internal::Map>)",93957336875680,93957336875923],["v8::internal::Factory::CompactWeakArrayList(v8::internal::Handle<v8::internal::WeakArrayList>, int, v8::internal::AllocationType)",93957336877312,93957336877918],["v8::internal::Factory::NewError(v8::internal::Handle<v8::internal::JSFunction>, v8::internal::Handle<v8::internal::String>)",93957336878736,93957336878803],["v8::internal::Factory::NewReferenceError(v8::internal::MessageTemplate, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957336879392,93957336879570],["v8::internal::Factory::NewFunctionPrototype(v8::internal::Handle<v8::internal::JSFunction>)",93957336880160,93957336880945],["v8::internal::Factory::CopyBytecodeArray(v8::internal::Handle<v8::internal::BytecodeArray>)",93957336883312,93957336883949],["v8::internal::Factory::NewJSGlobalObject(v8::internal::Handle<v8::internal::JSFunction>)",93957336884480,93957336885430],["v8::internal::Factory::InitializeJSObjectBody(v8::internal::JSObject, v8::internal::Map, int)",93957336885744,93957336886042],["v8::internal::Factory::NewSlowJSObjectWithPropertiesAndElements(v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::FixedArrayBase>)",93957336886336,93957336887058],["v8::internal::Factory::NewJSArrayWithElements(v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::ElementsKind, int, v8::internal::AllocationType)",93957336887360,93957336887392],["v8::internal::Factory::NewJSArrayWithUnverifiedElements(v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::ElementsKind, int, v8::internal::AllocationType)",93957336887696,93957336888102],["v8::internal::Factory::NewJSWeakMap()",93957336888544,93957336889084],["v8::internal::Factory::NewJSGeneratorObject(v8::internal::Handle<v8::internal::JSFunction>)",93957336889856,93957336890248],["v8::internal::Factory::NewSyntheticModule(v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::FixedArray>, v8::MaybeLocal<v8::Value> (*)(v8::Local<v8::Context>, v8::Local<v8::Module>))",93957336891504,93957336892290],["v8::internal::Heap::SetInterpreterEntryTrampolineForProfiling(v8::internal::Code)",93957337035824,93957337035837],["v8::internal::Heap::SetEmbedderStackStateForNextFinalization(cppgc::EmbedderStackState)",93957337038464,93957337038481],["void v8::internal::Heap::CopyRange<v8::internal::CompressedObjectSlot>(v8::internal::HeapObject, v8::internal::CompressedObjectSlot, v8::internal::CompressedObjectSlot, int, v8::internal::WriteBarrierMode)",93957337038912,93957337039083],["unsigned int std::__1::__sort3<v8::internal::(anonymous namespace)::ReportDuplicates(int, std::__1::vector<v8::internal::HeapObject, std::__1::allocator<v8::internal::HeapObject> >*)::$_6&, v8::internal::HeapObject*>(v8::internal::HeapObject*, v8::internal::HeapObject*, v8::internal::HeapObject*, v8::internal::(anonymous namespace)::ReportDuplicates(int, std::__1::vector<v8::internal::HeapObject, std::__1::allocator<v8::internal::HeapObject> >*)::$_6&)",93957337042640,93957337043014],["bool std::__1::__insertion_sort_incomplete<v8::internal::(anonymous namespace)::ReportDuplicates(int, std::__1::vector<v8::internal::HeapObject, std::__1::allocator<v8::internal::HeapObject> >*)::$_6&, v8::internal::HeapObject*>(v8::internal::HeapObject*, v8::internal::HeapObject*, v8::internal::(anonymous namespace)::ReportDuplicates(int, std::__1::vector<v8::internal::HeapObject, std::__1::allocator<v8::internal::HeapObject> >*)::$_6&)",93957337043712,93957337044216],["unsigned int std::__1::__sort3<std::__1::__less<std::__1::pair<int, v8::internal::HeapObject>, std::__1::pair<int, v8::internal::HeapObject> >&, std::__1::pair<int, v8::internal::HeapObject>*>(std::__1::pair<int, v8::internal::HeapObject>*, std::__1::pair<int, v8::internal::HeapObject>*, std::__1::pair<int, v8::internal::HeapObject>*, std::__1::__less<std::__1::pair<int, v8::internal::HeapObject>, std::__1::pair<int, v8::internal::HeapObject> >&)",93957337045664,93957337045932],["unsigned int std::__1::__sort5<std::__1::__less<std::__1::pair<int, v8::internal::HeapObject>, std::__1::pair<int, v8::internal::HeapObject> >&, std::__1::pair<int, v8::internal::HeapObject>*>(std::__1::pair<int, v8::internal::HeapObject>*, std::__1::pair<int, v8::internal::HeapObject>*, std::__1::pair<int, v8::internal::HeapObject>*, std::__1::pair<int, v8::internal::HeapObject>*, std::__1::pair<int, v8::internal::HeapObject>*, std::__1::__less<std::__1::pair<int, v8::internal::HeapObject>, std::__1::pair<int, v8::internal::HeapObject> >&)",93957337046144,93957337046422],["v8::internal::Space::ExternalBackingStoreBytes(v8::internal::ExternalBackingStoreType) const",93957337046912,93957337046931],["void v8::internal::WasmTypeInfo::BodyDescriptor::IterateBody<v8::internal::YoungGenerationMarkingVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::YoungGenerationMarkingVisitor*)",93957337374272,93957337374855],["void v8::internal::LiveObjectVisitor::VisitGreyObjectsNoFail<v8::internal::EvacuateNewSpacePageVisitor<(v8::internal::PageEvacuationMode)1>, v8::internal::MinorNonAtomicMarkingState>(v8::internal::MemoryChunk*, v8::internal::MinorNonAtomicMarkingState*, v8::internal::EvacuateNewSpacePageVisitor<(v8::internal::PageEvacuationMode)1>*, v8::internal::LiveObjectVisitor::IterationMode)",93957337406432,93957337407704],["v8::internal::MarkingBarrier::Activate(bool)",93957337409920,93957337410302],["v8::internal::MarkingWorklists::CreateContextWorklists(std::__1::vector<unsigned long, std::__1::allocator<unsigned long> > const&)",93957337412432,93957337413132],["v8::internal::MarkingWorklists::Local::IsEmpty()",93957337415200,93957337415467],["v8::internal::MarkingWorklists::Local::MergeOnHold()",93957337415824,93957337416029],["void v8::internal::MemoryAllocator::Free<(v8::internal::MemoryAllocator::FreeMode)0>(v8::internal::MemoryChunk*)",93957337417808,93957337417952],["v8::internal::Page* v8::internal::MemoryAllocator::AllocatePage<(v8::internal::MemoryAllocator::AllocationMode)1, v8::internal::SemiSpace>(unsigned long, v8::internal::SemiSpace*, v8::internal::Executability)",93957337418544,93957337418723],["v8::internal::CodeRangeAddressHint::NotifyFreedCodeRange(unsigned long, unsigned long)",93957337419488,93957337419812],["v8::internal::MemoryAllocator::InitializeCodePageAllocator(v8::PageAllocator*, unsigned long)",93957337420144,93957337420697],["v8::internal::MemoryAllocator::TearDown()",93957337420736,93957337421030],["void v8::internal::MemoryAllocator::Unmapper::PerformFreeMemoryOnQueuedChunks<(v8::internal::MemoryAllocator::Unmapper::FreeMode)0>(v8::JobDelegate*)",93957337421296,93957337421853],["v8::internal::MemoryAllocator::Unmapper::PerformFreeMemoryOnQueuedNonRegularChunks(v8::JobDelegate*)",93957337421872,93957337422159],["void v8::internal::MemoryAllocator::Unmapper::PerformFreeMemoryOnQueuedChunks<(v8::internal::MemoryAllocator::Unmapper::FreeMode)1>(v8::JobDelegate*)",93957337422256,93957337423023],["v8::internal::MemoryAllocator::Unmapper::NumberOfChunks()",93957337423104,93957337423190],["v8::internal::MemoryAllocator::AllocateAlignedMemory(unsigned long, unsigned long, unsigned long, v8::internal::Executability, void*, v8::internal::VirtualMemory*)",93957337423328,93957337423606],["v8::internal::RegExpDisjunction::RationalizeConsecutiveAtoms(v8::internal::RegExpCompiler*)",93957339792768,93957339795741],["void std::__1::__stable_sort<v8::internal::ZoneList<v8::internal::RegExpTree*>::StableSort<int (*)(v8::internal::RegExpTree* const*, v8::internal::RegExpTree* const*)>(int (*)(v8::internal::RegExpTree* const*, v8::internal::RegExpTree* const*), unsigned long, unsigned long)::{lambda(v8::internal::RegExpTree* const&, v8::internal::RegExpTree* const&)#1}&, v8::internal::RegExpTree**>(v8::internal::RegExpTree**, v8::internal::RegExpTree**, v8::internal::ZoneList<v8::internal::RegExpTree*>::StableSort<int (*)(v8::internal::RegExpTree* const*, v8::internal::RegExpTree* const*)>(int (*)(v8::internal::RegExpTree* const*, v8::internal::RegExpTree* const*), unsigned long, unsigned long)::{lambda(v8::internal::RegExpTree* const&, v8::internal::RegExpTree* const&)#1}&, std::__1::iterator_traits<v8::internal::RegExpTree**>::difference_type, std::__1::iterator_traits::value_type*, long)",93957339814032,93957339815232],["v8::internal::FrequencyCollator::FrequencyCollator()",93957339821040,93957339822238],["v8::internal::EndNode::Emit(v8::internal::RegExpCompiler*, v8::internal::Trace*)",93957339826208,93957339826409],["v8::internal::ActionNode::BeginSubmatch(int, int, v8::internal::RegExpNode*)",93957339827232,93957339827359],["v8::internal::ActionNode::FillInBMInfo(v8::internal::Isolate*, int, int, v8::internal::BoyerMooreLookahead*, bool)",93957339828480,93957339828626],["v8::internal::LoopChoiceNode::EatsAtLeastFromLoopEntry()",93957339828800,93957339829004],["v8::internal::SeqRegExpNode::FilterOneByte(int)",93957339831600,93957339831698],["v8::internal::LoopChoiceNode::FilterOneByte(int)",93957339832464,93957339832575],["v8::internal::NegativeLookaroundChoiceNode::FilterOneByte(int)",93957339833312,93957339833473],["v8::internal::ChoiceNode::GetQuickCheckDetails(v8::internal::QuickCheckDetails*, v8::internal::RegExpCompiler*, int, bool)",93957339833632,93957339834145],["v8::internal::LoopChoiceNode::FillInBMInfo(v8::internal::Isolate*, int, int, v8::internal::BoyerMooreLookahead*, bool)",93957339834240,93957339834411],["v8::internal::AssertionNode::EmitBoundaryCheck(v8::internal::RegExpCompiler*, v8::internal::Trace*)",93957339834688,93957339835381],["v8::internal::AssertionNode::GetQuickCheckDetails(v8::internal::QuickCheckDetails*, v8::internal::RegExpCompiler*, int, bool)",93957339835872,93957339835911],["v8::internal::TextNode::TextEmitPass(v8::internal::RegExpCompiler*, v8::internal::TextNode::TextEmitPassType, bool, v8::internal::Trace*, bool, int*)",93957339836592,93957339839330],["v8::internal::RegExpCharacterClass* v8::internal::Zone::New<v8::internal::RegExpCharacterClass, v8::internal::Zone*, v8::internal::ZoneList<v8::internal::CharacterRange>*&, v8::base::Flags<v8::internal::JSRegExp::Flag, int> >(v8::internal::Zone*&&, v8::internal::ZoneList<v8::internal::CharacterRange>*&, v8::base::Flags<v8::internal::JSRegExp::Flag, int>&&)",93957339839840,93957339840122],["v8_inspector::V8DebuggerScript::Create(v8::Isolate*, v8::Local<v8::debug::Script>, bool, v8_inspector::V8DebuggerAgentImpl*, v8_inspector::V8InspectorClient*)",93957342523568,93957342524654],["v8_inspector::(anonymous namespace)::ActualScript::startLine() const",93957342528016,93957342528028],["v8_inspector::(anonymous namespace)::ActualScript::isModule() const",93957342528176,93957342528188],["v8_inspector::(anonymous namespace)::ActualScript::getPossibleBreakpoints(v8::debug::Location const&, v8::debug::Location const&, bool, std::__1::vector<v8::debug::BreakLocation, std::__1::allocator<v8::debug::BreakLocation> >*)",93957342528688,93957342529124],["v8_inspector::(anonymous namespace)::ActualScript::location(int) const",93957342529360,93957342529459],["v8_inspector::(anonymous namespace)::ActualScript::MakeWeak()",93957342529600,93957342529632],["v8_inspector::(anonymous namespace)::ActualScript::wasmBytecode() const",93957342529728,93957342529847],["v8_inspector::(anonymous namespace)::ActualScript::getExternalDebugSymbolsURL() const",93957342529936,93957342530639],["v8_inspector::V8SchemaAgentImpl::getDomains(std::__1::unique_ptr<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Schema::Domain, std::__1::default_delete<v8_inspector::protocol::Schema::Domain> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Schema::Domain, std::__1::default_delete<v8_inspector::protocol::Schema::Domain> > > >, std::__1::default_delete<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Schema::Domain, std::__1::default_delete<v8_inspector::protocol::Schema::Domain> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Schema::Domain, std::__1::default_delete<v8_inspector::protocol::Schema::Domain> > > > > >*)",93957342646720,93957342646983],["v8_inspector::V8StackTraceImpl::buildInspectorObjectImpl(v8_inspector::V8Debugger*) const",93957342651648,93957342651844],["v8_inspector::protocol::Runtime::StackTrace::setDescription(v8_inspector::String16 const&)",93957342657856,93957342658512],["v8_inspector::String16::String16(v8_inspector::String16 const&)",93957342668624,93957342669223],["v8_inspector::clientMirror(v8::Local<v8::Context>, v8::Local<v8::Value>, v8_inspector::String16 const&)",93957342676352,93957342680612],["v8_inspector::(anonymous namespace)::descriptionForCollection(v8::Isolate*, v8::Local<v8::Object>, unsigned long)",93957342686432,93957342687188],["v8_inspector::(anonymous namespace)::descriptionForRegExp(v8::Isolate*, v8::Local<v8::RegExp>)",93957342688656,93957342689032],["std::__1::__unique_if<v8_inspector::(anonymous namespace)::ObjectMirror>::__unique_single std::__1::make_unique<v8_inspector::(anonymous namespace)::ObjectMirror, v8::Local<v8::Object>&, char const*&, v8_inspector::String16>(v8::Local<v8::Object>&, char const*&, v8_inspector::String16&&)",93957342691872,93957342693186],["v8_inspector::(anonymous namespace)::descriptionForScopeList(v8::Local<v8::Array>)",93957342694576,93957342694659],["v8_inspector::(anonymous namespace)::descriptionForScope(v8::Local<v8::Context>, v8::Local<v8::Object>)",93957342701072,93957342701224],["v8_inspector::String16 v8_inspector::String16::concat<char const*, v8_inspector::String16, char const*>(char const*, v8_inspector::String16, char const*)",93957342701760,93957342702500],["v8_inspector::(anonymous namespace)::nativeGetterCallback(v8::FunctionCallbackInfo<v8::Value> const&)",93957342703264,93957342703529],["bool std::__1::operator==<unsigned short, std::__1::char_traits<unsigned short>, std::__1::allocator<unsigned short> >(std::__1::basic_string<unsigned short, std::__1::char_traits<unsigned short>, std::__1::allocator<unsigned short> > const&, std::__1::basic_string<unsigned short, std::__1::char_traits<unsigned short>, std::__1::allocator<unsigned short> > const&)",93957342703824,93957342703944],["v8_inspector::(anonymous namespace)::LocationMirror::buildRemoteObject(v8::Local<v8::Context>, v8_inspector::WrapMode, std::__1::unique_ptr<v8_inspector::protocol::Runtime::RemoteObject, std::__1::default_delete<v8_inspector::protocol::Runtime::RemoteObject> >*) const",93957342704096,93957342704723],["v8_inspector::String16 v8_inspector::String16::concat<v8_inspector::String16, char, v8_inspector::String16, char>(v8_inspector::String16, char, v8_inspector::String16, char)",93957342705408,93957342706842],["void v8_inspector::String16Builder::appendAll<char, v8_inspector::String16, char>(char, v8_inspector::String16, char)",93957342707568,93957342708239],["v8::internal::compiler::AccessInfoFactory::TryLoadPropertyDetails(v8::internal::Handle<v8::internal::Map>, v8::internal::MaybeHandle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Name>, v8::internal::InternalIndex*, v8::internal::PropertyDetails*) const",93957342848912,93957342849381],["v8::internal::compiler::CodeGenerator::wasm_runtime_exception_support() const",93957342867520,93957342867541],["v8::internal::compiler::CodeGenerator::ComputeBranchInfo(v8::internal::compiler::BranchInfo*, v8::internal::compiler::Instruction*)",93957342875728,93957342876315],["v8::internal::compiler::CodeGenerator::IsMaterializableFromRoot(v8::internal::Handle<v8::internal::HeapObject>, v8::internal::RootIndex*)",93957342878880,93957342878949],["v8::internal::compiler::CodeGenerator::ResetSpeculationPoison()",93957342881040,93957342881068],["v8::internal::compiler::CodeGenerator::RecordCallPosition(v8::internal::compiler::Instruction*)",93957342881504,93957342882426],["v8::internal::compiler::CodeGenerator::BuildTranslationForFrameStateDescriptor(v8::internal::compiler::FrameStateDescriptor*, v8::internal::compiler::InstructionOperandIterator*, v8::internal::compiler::OutputFrameStateCombine)",93957342885840,93957342886358],["unsigned int std::__1::__sort5<v8::internal::compiler::CodeGenerator::AssembleCode()::$_0&, std::__1::__deque_iterator<v8::internal::compiler::DeoptimizationExit*, v8::internal::compiler::DeoptimizationExit**, v8::internal::compiler::DeoptimizationExit*&, v8::internal::compiler::DeoptimizationExit***, long, 0l> >(std::__1::__deque_iterator<v8::internal::compiler::DeoptimizationExit*, v8::internal::compiler::DeoptimizationExit**, v8::internal::compiler::DeoptimizationExit*&, v8::internal::compiler::DeoptimizationExit***, long, 0l>, std::__1::__deque_iterator<v8::internal::compiler::DeoptimizationExit*, v8::internal::compiler::DeoptimizationExit**, v8::internal::compiler::DeoptimizationExit*&, v8::internal::compiler::DeoptimizationExit***, long, 0l>, std::__1::__deque_iterator<v8::internal::compiler::DeoptimizationExit*, v8::internal::compiler::DeoptimizationExit**, v8::internal::compiler::DeoptimizationExit*&, v8::internal::compiler::DeoptimizationExit***, long, 0l>, std::__1::__deque_iterator<v8::internal::compiler::DeoptimizationExit*, v8::internal::compiler::DeoptimizationExit**, v8::internal::compiler::DeoptimizationExit*&, v8::internal::compiler::DeoptimizationExit***, long, 0l>, std::__1::__deque_iterator<v8::internal::compiler::DeoptimizationExit*, v8::internal::compiler::DeoptimizationExit**, v8::internal::compiler::DeoptimizationExit*&, v8::internal::compiler::DeoptimizationExit***, long, 0l>, v8::internal::compiler::CodeGenerator::AssembleCode()::$_0&)",93957342890800,93957342891110],["v8::internal::compiler::FrameElider::Run()",93957342893728,93957342893959],["v8::internal::compiler::FrameElider::MarkDeConstruction()",93957342894736,93957342895131],["v8::internal::compiler::GapResolver::PerformMove(v8::internal::compiler::ParallelMove*, v8::internal::compiler::MoveOperands*)",93957342895792,93957342896683],["v8::internal::compiler::InstructionScheduler::StartBlock(v8::internal::compiler::RpoNumber)",93957342896896,93957342896910],["void v8::internal::compiler::InstructionScheduler::Schedule<v8::internal::compiler::InstructionScheduler::StressSchedulerQueue>()",93957342896976,93957342898140],["v8::internal::compiler::InstructionScheduler::AddTerminator(v8::internal::compiler::Instruction*)",93957342899168,93957342900114],["v8::internal::compiler::InstructionScheduler::GetInstructionFlags(v8::internal::compiler::Instruction const*) const",93957342903552,93957342903639],["std::__1::vector<std::__1::pair<int, int>, v8::internal::ZoneAllocator<std::__1::pair<int, int> > >::assign(unsigned long, std::__1::pair<int, int> const&)",93957342906592,93957342907537],["v8::internal::compiler::MachineOperatorBuilder::I32x4MaxS()",93957344482784,93957344482799],["v8::internal::compiler::MachineOperatorBuilder::I16x8MinU()",93957344483552,93957344483567],["v8::internal::compiler::MachineOperatorBuilder::I8x16MaxS()",93957344483936,93957344483951],["v8::internal::compiler::MachineOperatorBuilder::I8x16BitMask()",93957344484192,93957344484207],["v8::internal::compiler::MachineOperatorBuilder::I8x16AllTrue()",93957344484384,93957344484399],["v8::internal::compiler::MachineOperatorBuilder::Word64Ctz()",93957344484608,93957344484631],["v8::internal::compiler::MachineOperatorBuilder::Float64RoundDown()",93957344484864,93957344484886],["v8::internal::compiler::MachineOperatorBuilder::Int32SubWithOverflow()",93957344485104,93957344485119],["v8::internal::compiler::MachineOperatorBuilder::LoadTransform(v8::internal::compiler::MemoryAccessKind, v8::internal::compiler::LoadTransformation)",93957344486736,93957344487493],["v8::internal::compiler::Operator1<v8::internal::compiler::StoreLaneParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::StoreLaneParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::StoreLaneParameters> >* v8::internal::Zone::New<v8::internal::compiler::Operator1<v8::internal::compiler::StoreLaneParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::StoreLaneParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::StoreLaneParameters> >, v8::internal::compiler::IrOpcode::Value, v8::base::Flags<v8::internal::compiler::Operator::Property, unsigned char>, char const (&) [10], int, int, int, int, int, int, v8::internal::compiler::StoreLaneParameters>(v8::internal::compiler::IrOpcode::Value&&, v8::base::Flags<v8::internal::compiler::Operator::Property, unsigned char>&&, char const (&) [10], int&&, int&&, int&&, int&&, int&&, int&&, v8::internal::compiler::StoreLaneParameters&&)",93957344504480,93957344504666],["v8::internal::compiler::MachineOperatorBuilder::Store(v8::internal::compiler::StoreRepresentation)",93957344505392,93957344506470],["v8::internal::compiler::MachineOperatorBuilder::BitcastWordToTagged()",93957344506784,93957344506799],["v8::internal::compiler::MachineOperatorBuilder::Word32AtomicStore(v8::internal::MachineRepresentation)",93957344506976,93957344507045],["v8::internal::compiler::MachineOperatorBuilder::Word32AtomicSub(v8::internal::MachineType)",93957344507488,93957344507619],["v8::internal::compiler::MachineOperatorBuilder::Word64AtomicLoad(v8::internal::MachineType)",93957344508064,93957344508179],["v8::internal::compiler::MachineOperatorBuilder::Word64AtomicAnd(v8::internal::MachineType)",93957344508544,93957344508659],["v8::internal::compiler::MachineOperatorBuilder::Word64AtomicExchange(v8::internal::MachineType)",93957344508928,93957344509043],["v8::internal::compiler::MachineOperatorBuilder::Word32AtomicPairLoad()",93957344509184,93957344509199],["v8::internal::compiler::MachineOperatorBuilder::Word32AtomicPairAdd()",93957344509216,93957344509231],["v8::internal::compiler::MachineOperatorBuilder::Word32AtomicPairAnd()",93957344509248,93957344509263],["v8::internal::compiler::MachineOperatorBuilder::Word32AtomicPairXor()",93957344509280,93957344509295],["v8::internal::compiler::MachineOperatorBuilder::Word32AtomicPairCompareExchange()",93957344509312,93957344509327],["v8::internal::compiler::MachineOperatorBuilder::F64x2ExtractLane(int)",93957344509344,93957344509486],["v8::internal::compiler::MachineOperatorBuilder::I64x2ExtractLane(int)",93957344509632,93957344509774],["v8::internal::compiler::MachineOperatorBuilder::I16x8ExtractLaneU(int)",93957344509920,93957344510062],["v8::internal::compiler::MachineOperatorBuilder::I8x16ExtractLaneU(int)",93957344510208,93957344510350],["v8::internal::compiler::MachineOperatorBuilder::F64x2ReplaceLane(int)",93957344510496,93957344510638],["v8::internal::compiler::MachineOperatorBuilder::I64x2ReplaceLane(int)",93957344510784,93957344510926],["v8::internal::compiler::MachineOperatorBuilder::I16x8ReplaceLane(int)",93957344511072,93957344511214],["v8::internal::compiler::MachineOperatorBuilder::I64x2ReplaceLaneI32Pair(int)",93957344511360,93957344511502],["v8::internal::compiler::hash_value(v8::internal::compiler::S128ImmediateParameter const&)",93957344511536,93957344512145],["v8::internal::compiler::MachineOperatorBuilder::S128Const(unsigned char const*)",93957344512656,93957344512840],["v8::internal::compiler::Scheduler::DecrementUnscheduledUseCount(v8::internal::compiler::Node*, int, v8::internal::compiler::Node*)",93957344758640,93957344759201],["v8::internal::compiler::CFGBuilder::Run()",93957344759600,93957344760893],["v8::internal::compiler::SpecialRPONumberer::SerializeRPOIntoSchedule()",93957344761056,93957344761893],["v8::internal::compiler::PrepareUsesVisitor::Pre(v8::internal::compiler::Node*)",93957344762144,93957344763030],["v8::internal::compiler::CFGBuilder::Run(v8::internal::compiler::BasicBlock*, v8::internal::compiler::Node*)",93957344766576,93957344768221],["v8::internal::compiler::CFGBuilder::BuildBlocks(v8::internal::compiler::Node*)",93957344769568,93957344770025],["v8::internal::compiler::CFGBuilder::ConnectMerge(v8::internal::compiler::Node*)",93957344770368,93957344770763],["v8::internal::compiler::CFGBuilder::ConnectTailCall(v8::internal::compiler::Node*)",93957344772752,93957344772960],["v8::internal::compiler::CFGBuilder::FindPredecessorBlock(v8::internal::compiler::Node*)",93957344773840,93957344774020],["v8::internal::BitVector::Resize(int, v8::internal::Zone*)",93957344778080,93957344778507],["v8::internal::compiler::ScheduleLateNodeVisitor::ProcessQueue(v8::internal::compiler::Node*)",93957344779984,93957344780639],["v8::internal::compiler::ScheduleLateNodeVisitor::ScheduleRegion(v8::internal::compiler::BasicBlock*, v8::internal::compiler::Node*)",93957344784048,93957344784330],["std::__1::vector<v8::internal::compiler::Scheduler::SchedulerData, v8::internal::ZoneAllocator<v8::internal::compiler::Scheduler::SchedulerData> >::__append(unsigned long, v8::internal::compiler::Scheduler::SchedulerData const&)",93957344786208,93957344786712],["v8::internal::compiler::SelectLowering::reducer_name() const",93957344787056,93957344787069],["v8::internal::compiler::Hints::operator==(v8::internal::compiler::Hints const&) const",93957344791568,93957344792422],["v8::internal::compiler::Hints::AddVirtualContext(v8::internal::compiler::VirtualContext const&, v8::internal::Zone*, v8::internal::compiler::JSHeapBroker*)",93957344794528,93957344795374],["v8::internal::compiler::Hints::Add(v8::internal::compiler::Hints const&, v8::internal::Zone*, v8::internal::compiler::JSHeapBroker*)",93957344797680,93957344798401],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::VirtualClosure const&)",93957344802032,93957344802454],["v8::internal::compiler::SerializerForBackgroundCompilation::Environment::Environment(v8::internal::Zone*, v8::internal::Isolate*, v8::internal::compiler::CompilationSubject, v8::base::Optional<v8::internal::compiler::Hints>, v8::internal::ZoneVector<v8::internal::compiler::Hints> const&, v8::internal::compiler::MissingArgumentsPolicy)",93957344804112,93957344804626],["v8::internal::compiler::SerializerForBackgroundCompilation::SerializerForBackgroundCompilation(v8::internal::compiler::ZoneStats*, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::CompilationDependencies*, v8::internal::Handle<v8::internal::JSFunction>, v8::base::Flags<v8::internal::compiler::SerializerForBackgroundCompilationFlag, int>, v8::internal::BytecodeOffset)",93957344807040,93957344808634],["v8::internal::compiler::SerializerForBackgroundCompilation::TraverseBytecode()",93957344811136,93957344820520],["v8::internal::compiler::SerializerForBackgroundCompilation::ContributeToJumpTargetEnvironment(int)",93957344822032,93957344822682],["v8::internal::compiler::SerializerForBackgroundCompilation::VisitCallUndefinedReceiver0(v8::internal::interpreter::BytecodeArrayIterator*)",93957344824208,93957344824629],["v8::internal::compiler::SerializerForBackgroundCompilation::VisitConstructWithSpread(v8::internal::interpreter::BytecodeArrayIterator*)",93957344826064,93957344826387],["v8::internal::compiler::SerializerForBackgroundCompilation::VisitCreateRegExpLiteral(v8::internal::interpreter::BytecodeArrayIterator*)",93957344827120,93957344827312],["v8::internal::compiler::SerializerForBackgroundCompilation::VisitGetSuperConstructor(v8::internal::interpreter::BytecodeArrayIterator*)",93957344827680,93957344828314],["v8::internal::compiler::SerializerForBackgroundCompilation::VisitInvokeIntrinsic(v8::internal::interpreter::BytecodeArrayIterator*)",93957344828640,93957344829519],["v8::internal::compiler::SerializerForBackgroundCompilation::VisitLdaContextSlot(v8::internal::interpreter::BytecodeArrayIterator*)",93957344829712,93957344829968],["v8::internal::compiler::SerializerForBackgroundCompilation::VisitLdar(v8::internal::interpreter::BytecodeArrayIterator*)",93957344830240,93957344830583],["v8::internal::compiler::SerializerForBackgroundCompilation::VisitLdaZero(v8::internal::interpreter::BytecodeArrayIterator*)",93957344830800,93957344830982],["v8::internal::compiler::SerializerForBackgroundCompilation::VisitPopContext(v8::internal::interpreter::BytecodeArrayIterator*)",93957344831472,93957344831814],["v8::internal::compiler::SerializerForBackgroundCompilation::VisitStaContextSlot(v8::internal::interpreter::BytecodeArrayIterator*)",93957344832320,93957344832560],["v8::internal::compiler::SerializerForBackgroundCompilation::VisitStar(v8::internal::interpreter::BytecodeArrayIterator*)",93957344832752,93957344833106],["v8::internal::compiler::SerializerForBackgroundCompilation::VisitTestInstanceOf(v8::internal::interpreter::BytecodeArrayIterator*)",93957344833296,93957344834008],["v8::internal::compiler::SerializerForBackgroundCompilation::ProcessNamedPropertyAccess(v8::internal::compiler::Hints*, v8::internal::compiler::NameRef const&, v8::internal::FeedbackSlot, v8::internal::compiler::AccessMode)",93957344834368,93957344834725],["v8::internal::compiler::SerializerForBackgroundCompilation::ProcessCallOrConstruct(v8::internal::compiler::Hints, v8::base::Optional<v8::internal::compiler::Hints>, v8::internal::ZoneVector<v8::internal::compiler::Hints>*, v8::internal::FeedbackSlot, v8::internal::compiler::MissingArgumentsPolicy)",93957344835616,93957344837119],["v8::internal::compiler::SerializerForBackgroundCompilation::ProcessHintsForPromiseResolve(v8::internal::compiler::Hints const&)",93957344838272,93957344838837],["v8::internal::compiler::SerializerForBackgroundCompilation::ProcessModuleVariableAccess(v8::internal::interpreter::BytecodeArrayIterator*)",93957344839792,93957344839986],["v8::internal::compiler::SerializerForBackgroundCompilation::ProcessCallVarArgs(v8::internal::ConvertReceiverMode, v8::internal::compiler::Hints const&, v8::internal::interpreter::Register, int, v8::internal::FeedbackSlot, v8::internal::compiler::MissingArgumentsPolicy)",93957344840448,93957344840650],["v8::internal::ZoneVector<v8::internal::compiler::Hints> v8::internal::compiler::SerializerForBackgroundCompilation::PrepareArgumentsHints<v8::internal::compiler::Hints*, v8::internal::compiler::Hints*>(v8::internal::compiler::Hints*, v8::internal::compiler::Hints*, v8::internal::compiler::Hints*)",93957344842272,93957344844771],["v8::internal::compiler::SerializerForBackgroundCompilation::ProcessApiCall(v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::ZoneVector<v8::internal::compiler::Hints> const&)",93957344846224,93957344847130],["v8::internal::compiler::Callee::ToCompilationSubject(v8::internal::Isolate*, v8::internal::Zone*) const",93957344856944,93957344857335],["v8::internal::compiler::SerializerForBackgroundCompilation::ProcessNewTargetForConstruct(v8::internal::compiler::Hints const&, v8::internal::compiler::Hints*)",93957344859696,93957344860326],["v8::internal::compiler::SerializerForBackgroundCompilation::ProcessCallOrConstructRecursive(v8::internal::compiler::Hints const&, v8::base::Optional<v8::internal::compiler::Hints>, v8::internal::ZoneVector<v8::internal::compiler::Hints> const&, v8::internal::SpeculationMode, v8::internal::compiler::MissingArgumentsPolicy, v8::internal::compiler::Hints*)",93957344862000,93957344863484],["v8::internal::compiler::SerializerForBackgroundCompilation::ProcessReceiverMapForApiCall(v8::internal::compiler::FunctionTemplateInfoRef, v8::internal::Handle<v8::internal::Map>)",93957344865136,93957344865622],["v8::internal::compiler::SerializerForBackgroundCompilation::ProcessMapHintsForPromises(v8::internal::compiler::Hints const&)",93957344865776,93957344866155],["v8::internal::compiler::SerializerForBackgroundCompilation::ProcessHintsForHasInPrototypeChain(v8::internal::compiler::Hints const&)",93957344866768,93957344867011],["v8::internal::compiler::SerializerForBackgroundCompilation::ProcessHintsForFunctionBind(v8::internal::compiler::Hints const&)",93957344867216,93957344867657],["v8::internal::compiler::SerializerForBackgroundCompilation::ProcessConstantForOrdinaryHasInstance(v8::internal::compiler::HeapObjectRef const&, bool*)",93957344867936,93957344868193],["v8::internal::compiler::SerializerForBackgroundCompilation::ProcessMapForRegExpTest(v8::internal::compiler::MapRef)",93957344868384,93957344868638],["v8::internal::compiler::SerializerForBackgroundCompilation::ProcessLdaLookupGlobalSlot(v8::internal::interpreter::BytecodeArrayIterator*)",93957344868880,93957344869160],["v8::internal::compiler::SerializerForBackgroundCompilation::ProcessMapForNamedPropertyAccess(v8::internal::compiler::Hints*, v8::base::Optional<v8::internal::compiler::MapRef>, v8::internal::compiler::MapRef, v8::internal::compiler::NameRef const&, v8::internal::compiler::AccessMode, v8::base::Optional<v8::internal::compiler::JSObjectRef>, v8::internal::compiler::Hints*)",93957344869488,93957344871876],["v8::internal::compiler::SerializerForBackgroundCompilation::ProcessElementAccess(v8::internal::compiler::Hints const&, v8::internal::compiler::Hints const&, v8::internal::compiler::ElementAccessFeedback const&, v8::internal::compiler::AccessMode)",93957344872256,93957344873404],["v8::internal::compiler::SerializerForBackgroundCompilation::ProcessNamedSuperPropertyAccess(v8::internal::compiler::Hints*, v8::internal::compiler::NameRef const&, v8::internal::FeedbackSlot, v8::internal::compiler::AccessMode)",93957344874944,93957344875301],["std::__1::vector<v8::internal::Handle<v8::internal::Map>, std::__1::allocator<v8::internal::Handle<v8::internal::Map> > > v8::internal::compiler::(anonymous namespace)::GetRelevantReceiverMaps<v8::internal::compiler::FunctionalSet<v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Map>::equal_to> >(v8::internal::Isolate*, v8::internal::compiler::FunctionalSet<v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Map>::equal_to> const&)",93957344876096,93957344876472],["std::__1::pair<std::__1::__tree_iterator<v8::internal::compiler::HandlerRangeMatcher::Range, std::__1::__tree_node<v8::internal::compiler::HandlerRangeMatcher::Range, void*>*, long>, bool> std::__1::__tree<v8::internal::compiler::HandlerRangeMatcher::Range, std::__1::less<v8::internal::compiler::HandlerRangeMatcher::Range>, std::__1::allocator<v8::internal::compiler::HandlerRangeMatcher::Range> >::__emplace_unique_key_args<v8::internal::compiler::HandlerRangeMatcher::Range, v8::internal::compiler::HandlerRangeMatcher::Range>(v8::internal::compiler::HandlerRangeMatcher::Range const&, v8::internal::compiler::HandlerRangeMatcher::Range&&)",93957344877040,93957344877307],["frexpf",139871563501936,139871563502037],["sigprocmask",139871563505536,139871563505787],["sigsetmask",139871563506304,139871563506425],["sigvec",139871563506816,139871563507082],["siginterrupt",139871563507312,139871563507514],["sigfillset",139871563507600,139871563507681],["sigdelset",139871563507760,139871563507820],["sigreturn",139871563507888,139871563507908],["getutent",139871564525984,139871564526097],["getutline",139871564526848,139871564526969],["utmpname",139871564530896,139871564531199],["posix_openpt",139871564531472,139871564531790],["casinhf128",139871565645360,139871565646372],["fdimf128",139871565669072,139871565669379],["canonicalizef128",139871565670016,139871565670066],["scalblnf128",139871565670368,139871565670652],["acosf128",139871565671264,139871565671372],["asinf128",139871565671472,139871565671580],["atanhf128",139871565671760,139871565671897],["exp10f128",139871565672080,139871565672269],["v8::D8Console::Debug(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&)",93957335206832,93957335206866],["v8::D8Console::TimeStamp(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&)",93957335208000,93957335208422],["v8::SourceGroup::IsolateThread::~IsolateThread()",93957335302512,93957335302540],["std::__1::__hash_table<std::__1::__hash_value_type<v8::Global<v8::Module>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::__unordered_map_hasher<v8::Global<v8::Module>, std::__1::__hash_value_type<v8::Global<v8::Module>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, v8::(anonymous namespace)::ModuleEmbedderData::ModuleGlobalHash, std::__1::equal_to<v8::Global<v8::Module> >, false>, std::__1::__unordered_map_equal<v8::Global<v8::Module>, std::__1::__hash_value_type<v8::Global<v8::Module>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<v8::Global<v8::Module> >, v8::(anonymous namespace)::ModuleEmbedderData::ModuleGlobalHash, true>, std::__1::allocator<std::__1::__hash_value_type<v8::Global<v8::Module>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > >::rehash(unsigned long)",93957335303584,93957335303955],["v8::Shell::ReadBuffer(v8::FunctionCallbackInfo<v8::Value> const&)::$_1::__invoke(void*, unsigned long, void*)",93957335305168,93957335305185],["v8::ExternalOwningOneByteStringResource::~ExternalOwningOneByteStringResource()",93957335305248,93957335305304],["v8::internal::ConcurrentMarking::JobTask::Run(v8::JobDelegate*)",93957336816112,93957336816623],["v8::internal::CppGraphBuilder::Run(v8::Isolate*, v8::EmbedderGraph*, void*)",93957336820528,93957336820842],["v8::internal::VisiblityVisitor::VisitWeakContainer(void const*, cppgc::TraceDescriptor, cppgc::TraceDescriptor, void (*)(cppgc::LivenessBroker const&, void const*), void const*)",93957336822240,93957336822279],["v8::internal::GraphBuildingVisitor::Visit(void const*, cppgc::TraceDescriptor)",93957336823136,93957336823164],["v8::internal::CppGraphBuilderImpl::AddEdge(v8::internal::State&, cppgc::internal::HeapObjectHeader const&)",93957336823232,93957336823771],["void std::__1::vector<std::__1::unique_ptr<v8_inspector::V8DebuggerScript, std::__1::default_delete<v8_inspector::V8DebuggerScript> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::V8DebuggerScript, std::__1::default_delete<v8_inspector::V8DebuggerScript> > > >::__push_back_slow_path<std::__1::unique_ptr<v8_inspector::V8DebuggerScript, std::__1::default_delete<v8_inspector::V8DebuggerScript> > >(std::__1::unique_ptr<v8_inspector::V8DebuggerScript, std::__1::default_delete<v8_inspector::V8DebuggerScript> >&&)",93957336824352,93957336825095],["v8::internal::LocalEmbedderHeapTracer::SetRemoteTracer(v8::EmbedderHeapTracer*)",93957336825504,93957336825543],["v8::internal::LocalEmbedderHeapTracer::TraceEpilogue()",93957336825584,93957336825683],["v8::internal::Factory::InternalizeUtf8String(v8::internal::Vector<char const> const&)",93957336854240,93957336854467],["v8::internal::Factory::NewCatchContext(v8::internal::Handle<v8::internal::Context>, v8::internal::Handle<v8::internal::ScopeInfo>, v8::internal::Handle<v8::internal::Object>)",93957336863328,93957336863884],["v8::internal::Factory::NewForeign(unsigned long)",93957336868592,93957336868715],["v8::internal::Factory::NewProtector()",93957336870624,93957336870737],["v8::internal::Factory::CopyFixedDoubleArray(v8::internal::Handle<v8::internal::FixedDoubleArray>)",93957336875024,93957336875509],["v8::internal::Handle<v8::internal::FixedArray> v8::internal::Factory::CopyArrayWithMap<v8::internal::FixedArray>(v8::internal::Handle<v8::internal::FixedArray>, v8::internal::Handle<v8::internal::Map>)",93957336875952,93957336876203],["v8::internal::Handle<v8::internal::WeakFixedArray> v8::internal::Factory::CopyArrayAndGrow<v8::internal::WeakFixedArray>(v8::internal::Handle<v8::internal::WeakFixedArray>, int, v8::internal::AllocationType)",93957336876704,93957336877001],["v8::internal::Handle<v8::internal::PropertyArray> v8::internal::Factory::CopyArrayAndGrow<v8::internal::PropertyArray>(v8::internal::Handle<v8::internal::PropertyArray>, int, v8::internal::AllocationType)",93957336877936,93957336878234],["v8::internal::Factory::NewError(v8::internal::Handle<v8::internal::JSFunction>, v8::internal::MessageTemplate, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957336878528,93957336878732],["v8::internal::Factory::NewRangeError(v8::internal::MessageTemplate, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957336878816,93957336878994],["v8::internal::Factory::NewEvalError(v8::internal::MessageTemplate, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957336879200,93957336879378],["v8::internal::Factory::NewSyntaxError(v8::internal::MessageTemplate, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957336879584,93957336879762],["v8::internal::Factory::NewWasmRuntimeError(v8::internal::MessageTemplate, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957336879968,93957336880146],["v8::internal::Factory::NewExternal(void*)",93957336880960,93957336881555],["v8::internal::Factory::CopyCode(v8::internal::Handle<v8::internal::Code>)",93957336882176,93957336883312],["v8::internal::Factory::NewJSObject(v8::internal::Handle<v8::internal::JSFunction>, v8::internal::AllocationType)",93957336883952,93957336884187],["v8::internal::Heap::ExternalStringTable::CleanUpYoung()",93957337035056,93957337035296],["v8::internal::Heap::KeepDuringJob(v8::internal::Handle<v8::internal::JSReceiver>)",93957337036848,93957337037021],["v8::internal::Heap::GcSafeFindCodeForInnerPointer(unsigned long)",93957337037792,93957337038093],["v8::internal::StrongRootBlockAllocator::deallocate(unsigned long*, unsigned long)",93957337038688,93957337038821],["v8::internal::ObjectVisitor::VisitPointer(v8::internal::HeapObject, v8::internal::CompressedMaybeObjectSlot)",93957337038880,93957337038898],["void v8::internal::Heap::CopyRange<v8::internal::CompressedMaybeObjectSlot>(v8::internal::HeapObject, v8::internal::CompressedMaybeObjectSlot, v8::internal::CompressedMaybeObjectSlot, int, v8::internal::WriteBarrierMode)",93957337039088,93957337039259],["void std::__1::__sort<v8::internal::(anonymous namespace)::ReportDuplicates(int, std::__1::vector<v8::internal::HeapObject, std::__1::allocator<v8::internal::HeapObject> >*)::$_6&, v8::internal::HeapObject*>(v8::internal::HeapObject*, v8::internal::HeapObject*, v8::internal::(anonymous namespace)::ReportDuplicates(int, std::__1::vector<v8::internal::HeapObject, std::__1::allocator<v8::internal::HeapObject> >*)::$_6&)",93957337040880,93957337042632],["unsigned int std::__1::__sort4<v8::internal::(anonymous namespace)::ReportDuplicates(int, std::__1::vector<v8::internal::HeapObject, std::__1::allocator<v8::internal::HeapObject> >*)::$_6&, v8::internal::HeapObject*>(v8::internal::HeapObject*, v8::internal::HeapObject*, v8::internal::HeapObject*, v8::internal::HeapObject*, v8::internal::(anonymous namespace)::ReportDuplicates(int, std::__1::vector<v8::internal::HeapObject, std::__1::allocator<v8::internal::HeapObject> >*)::$_6&)",93957337043024,93957337043320],["void v8::internal::JSArrayBuffer::BodyDescriptor::IterateBody<v8::internal::YoungGenerationMarkingVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::YoungGenerationMarkingVisitor*)",93957337366304,93957337366684],["v8::internal::YoungGenerationMarkingJob::ProcessItems(v8::JobDelegate*)",93957337377328,93957337377984],["v8::internal::(anonymous namespace)::YoungGenerationEvacuator::RawEvacuatePage(v8::internal::MemoryChunk*, long*)",93957337404400,93957337404910],["v8::internal::MarkingBarrier::~MarkingBarrier()",93957337408944,93957337409068],["v8::internal::MarkingBarrier::Write(v8::internal::DescriptorArray, int)",93957337409792,93957337409840],["v8::internal::MarkingBarrier::Deactivate()",93957337410384,93957337410747],["v8::internal::MarkingWorklists::Clear()",93957337411712,93957337412283],["v8::internal::MarkingWorklists::Local::Local(v8::internal::MarkingWorklists*)",93957337413840,93957337414432],["heap::base::Worklist<v8::internal::HeapObject, (unsigned short)64>::Local::Publish()",93957337414960,93957337415186],["v8::internal::MarkingWorklists::Local::SwitchToContext(unsigned long, heap::base::Worklist<v8::internal::HeapObject, (unsigned short)64>::Local*)",93957337415472,93957337415579],["v8::internal::MarkingWorklists::Local::ShareWork()",93957337415648,93957337415811],["v8::internal::MarkingWorklists::Local::PopContext(v8::internal::HeapObject*)",93957337416032,93957337416446],["void std::__1::vector<std::__1::unique_ptr<heap::base::Worklist<v8::internal::HeapObject, (unsigned short)64>, std::__1::default_delete<heap::base::Worklist<v8::internal::HeapObject, (unsigned short)64> > >, std::__1::allocator<std::__1::unique_ptr<heap::base::Worklist<v8::internal::HeapObject, (unsigned short)64>, std::__1::default_delete<heap::base::Worklist<v8::internal::HeapObject, (unsigned short)64> > > > >::__push_back_slow_path<std::__1::unique_ptr<heap::base::Worklist<v8::internal::HeapObject, (unsigned short)64>, std::__1::default_delete<heap::base::Worklist<v8::internal::HeapObject, (unsigned short)64> > > >(std::__1::unique_ptr<heap::base::Worklist<v8::internal::HeapObject, (unsigned short)64>, std::__1::default_delete<heap::base::Worklist<v8::internal::HeapObject, (unsigned short)64> > >&&)",93957337417008,93957337417805],["void v8::internal::MemoryAllocator::Free<(v8::internal::MemoryAllocator::FreeMode)2>(v8::internal::MemoryChunk*)",93957337417952,93957337418155],["v8::internal::Page* v8::internal::MemoryAllocator::AllocatePage<(v8::internal::MemoryAllocator::AllocationMode)0, v8::internal::PagedSpace>(unsigned long, v8::internal::PagedSpace*, v8::internal::Executability)",93957337418384,93957337418534],["v8::internal::MemoryChunk* v8::internal::MemoryAllocator::AllocatePagePooled<v8::internal::SemiSpace>(v8::internal::SemiSpace*)",93957337418736,93957337419055],["v8::internal::RegExpBytecodeDisassemble(unsigned char const*, int, char const*)",93957339781920,93957339782048],["v8::internal::RegExpBackReference::ToNode(v8::internal::RegExpCompiler*, v8::internal::RegExpNode*)",93957339803968,93957339804118],["v8::internal::(anonymous namespace)::NegativeLookaroundAgainstReadDirectionAndMatch(v8::internal::RegExpCompiler*, v8::internal::ZoneList<v8::internal::CharacterRange>*, v8::internal::ZoneList<v8::internal::CharacterRange>*, v8::internal::RegExpNode*, bool, v8::base::Flags<v8::internal::JSRegExp::Flag, int>)",93957339811936,93957339812347],["v8::internal::NegativeLookaroundChoiceNode::NegativeLookaroundChoiceNode(v8::internal::GuardedAlternative, v8::internal::GuardedAlternative, v8::internal::Zone*)",93957339819632,93957339820317],["v8::internal::RegExpText::AppendToText(v8::internal::RegExpText*, v8::internal::Zone*)",93957339820720,93957339820826],["v8::internal::Trace::FindAffectedRegisters(v8::internal::DynamicBitSet*, v8::internal::Zone*)",93957339822688,93957339823316],["v8::internal::Trace::Flush(v8::internal::RegExpCompiler*, v8::internal::RegExpNode*)",93957339824752,93957339826093],["v8::internal::ActionNode::SetRegisterForLoop(int, int, v8::internal::RegExpNode*)",93957339826736,93957339826863],["v8::internal::ActionNode::ClearCaptures(v8::internal::Interval, v8::internal::RegExpNode*)",93957339827104,93957339827225],["v8::internal::ActionNode::PositiveSubmatchSuccess(int, int, int, int, v8::internal::RegExpNode*)",93957339827360,93957339827509],["v8::internal::RegExpNode::LimitVersions(v8::internal::RegExpCompiler*, v8::internal::Trace*)",93957339827664,93957339828468],["v8::internal::ActionNode::GetQuickCheckDetails(v8::internal::QuickCheckDetails*, v8::internal::RegExpCompiler*, int, bool)",93957339828640,93957339828679],["v8::internal::NegativeLookaroundChoiceNode::GetQuickCheckDetails(v8::internal::QuickCheckDetails*, v8::internal::RegExpCompiler*, int, bool)",93957339828768,93957339828793],["v8::internal::RegExpNode::EmitQuickCheck(v8::internal::RegExpCompiler*, v8::internal::Trace*, v8::internal::Trace*, bool, v8::internal::Label*, v8::internal::QuickCheckDetails*, bool, v8::internal::ChoiceNode*)",93957339829008,93957339829499],["v8::internal::GetCaseIndependentLetters(v8::internal::Isolate*, unsigned short, bool, unsigned int*, int)",93957339830672,93957339831598],["v8::internal::RangeContainsLatin1Equivalents(v8::internal::CharacterRange)",93957339831712,93957339831784],["_ZNSt3__16vectorINS_4pairIiiEENS_9allocatorIS2_EEE6assignIPS2_EENS_9enable_ifIXaasr27__is_cpp17_forward_iteratorIT_EE5valuesr16is_constructibleIS2_NS_15iterator_traitsIS9_E9referenceEEE5valueEvE4typeES9_S9_",93957342522144,93957342522487],["v8_inspector::(anonymous namespace)::ActualScript::GetScriptName(v8::Isolate*, v8::Local<v8::debug::Script>, v8_inspector::V8InspectorClient*)",93957342524896,93957342525680],["v8_inspector::(anonymous namespace)::ActualScript::getLanguage() const",93957342526816,93957342526828],["v8_inspector::(anonymous namespace)::ActualScript::endLine() const",93957342528048,93957342528060],["v8_inspector::(anonymous namespace)::ActualScript::isLiveEdit() const",93957342528160,93957342528172],["v8_inspector::(anonymous namespace)::ActualScript::length() const",93957342528192,93957342528311],["v8_inspector::(anonymous namespace)::ActualScript::setSource(v8_inspector::String16 const&, bool, v8::debug::LiveEditResult*)",93957342528368,93957342528683],["v8_inspector::(anonymous namespace)::ActualScript::resetBlackboxedStateCache()",93957342529136,93957342529223],["v8_inspector::V8RuntimeAgentImpl::reportExecutionContextCreated(v8_inspector::InspectedContext*)",93957342641120,93957342643341],["v8_inspector::V8StackTraceImpl::create(v8_inspector::V8Debugger*, int, v8::Local<v8::StackTrace>, int)",93957342648096,93957342648613],["v8_inspector::V8StackTraceImpl::topColumnNumber() const",93957342651520,93957342651539],["v8_inspector::V8StackTraceImpl::buildInspectorObject(int) const",93957342653600,93957342653804],["v8_inspector::AsyncStackTrace::buildInspectorObject(v8_inspector::V8Debugger*, int) const",93957342657552,93957342657728],["v8_inspector::createDataProperty(v8::Local<v8::Context>, v8::Local<v8::Object>, v8::Local<v8::Name>, v8::Local<v8::Value>)",93957342658688,93957342658848],["v8_inspector::ValueMirror::create(v8::Local<v8::Context>, v8::Local<v8::Value>)",93957342664400,93957342668086],["v8_inspector::ValueMirror::getPrivateProperties(v8::Local<v8::Context>, v8::Local<v8::Object>)",93957342670960,93957342671970],["v8_inspector::String16 v8_inspector::String16::concat<char const*, v8_inspector::String16, char>(char const*, v8_inspector::String16, char)",93957342675600,93957342676341],["std::__1::unique_ptr<v8_inspector::(anonymous namespace)::ObjectMirror, std::__1::default_delete<v8_inspector::(anonymous namespace)::ObjectMirror> >::~unique_ptr()",93957342680624,93957342680714],["v8_inspector::(anonymous namespace)::descriptionForError(v8::Local<v8::Context>, v8::Local<v8::Object>, v8_inspector::(anonymous namespace)::ErrorType)",93957342682032,93957342686420],["std::__1::__unique_if<v8_inspector::(anonymous namespace)::ObjectMirror>::__unique_single std::__1::make_unique<v8_inspector::(anonymous namespace)::ObjectMirror, v8::Local<v8::Value>&, v8_inspector::String16>(v8::Local<v8::Value>&, v8_inspector::String16&&)",93957342687200,93957342687851],["std::__1::unique_ptr<v8_inspector::(anonymous namespace)::PrimitiveValueMirror, std::__1::default_delete<v8_inspector::(anonymous namespace)::PrimitiveValueMirror> >::~unique_ptr()",93957342688560,93957342688650],["std::__1::__unique_if<v8_inspector::(anonymous namespace)::ObjectMirror>::__unique_single std::__1::make_unique<v8_inspector::(anonymous namespace)::ObjectMirror, v8::Local<v8::Value>&, char const*&, char const (&) [6]>(v8::Local<v8::Value>&, char const*&, char const (&) [6])",93957342689040,93957342690385],["std::__1::__unique_if<v8_inspector::(anonymous namespace)::ObjectMirror>::__unique_single std::__1::make_unique<v8_inspector::(anonymous namespace)::ObjectMirror, v8::Local<v8::Promise>&, char const*&, v8_inspector::String16>(v8::Local<v8::Promise>&, char const*&, v8_inspector::String16&&)",93957342690544,93957342691858],["v8_inspector::(anonymous namespace)::descriptionForWasmValueObject(v8::Local<v8::Context>, v8::Local<v8::debug::WasmValueObject>)",93957342693200,93957342693260],["v8::internal::compiler::PropertyAccessInfo::ModuleExport(v8::internal::Zone*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Cell>)",93957342834208,93957342834512],["v8::internal::compiler::AccessInfoFactory::FinalizePropertyAccessInfos(v8::internal::ZoneVector<v8::internal::compiler::PropertyAccessInfo>, v8::internal::compiler::AccessMode, v8::internal::ZoneVector<v8::internal::compiler::PropertyAccessInfo>*) const",93957342858304,93957342859095],["v8::internal::compiler::AllNodes::AllNodes(v8::internal::Zone*, v8::internal::compiler::Graph const*, bool)",93957342863536,93957342863800],["v8::internal::compiler::CodeGenerator::AssembleDeoptImmediateArgs(v8::internal::ZoneVector<v8::internal::compiler::ImmediateOperand*> const*, v8::internal::Label*)",93957342868432,93957342868976],["std::__1::vector<v8::internal::compiler::TurbolizerInstructionStartInfo, v8::internal::ZoneAllocator<v8::internal::compiler::TurbolizerInstructionStartInfo> >::assign(unsigned long, v8::internal::compiler::TurbolizerInstructionStartInfo const&)",93957342874800,93957342875476],["v8::internal::compiler::CodeGenerator::GetSourcePositionTable()",93957342876640,93957342876657],["v8::internal::compiler::CodeGenerator::IsNextInAssemblyOrder(v8::internal::compiler::RpoNumber) const",93957342878624,93957342878697],["v8::internal::compiler::CodeGenerator::GetPushCompatibleMoves(v8::internal::compiler::Instruction*, v8::base::Flags<v8::internal::compiler::CodeGenerator::PushTypeFlag, int>, v8::internal::ZoneVector<v8::internal::compiler::MoveOperands*>*)",93957342880048,93957342880758],["v8::internal::compiler::CodeGenerator::AssembleSourcePosition(v8::internal::compiler::Instruction*)",93957342880944,93957342881034],["v8::internal::compiler::CodeGenerator::DetermineStubCallMode() const",93957342881072,93957342881099],["v8::internal::compiler::CodeGenerator::AddJumpTable(v8::internal::Label**, unsigned long)",93957342881392,93957342881496],["v8::internal::compiler::CodeGenerator::BuildTranslation(v8::internal::compiler::Instruction*, int, unsigned long, unsigned long, v8::internal::compiler::OutputFrameStateCombine)",93957342882432,93957342884152],["v8::internal::compiler::CodeGenerator::AddTranslationForOperand(v8::internal::compiler::Instruction*, v8::internal::compiler::InstructionOperand*, v8::internal::MachineType)",93957342884624,93957342885836],["v8::internal::compiler::OutOfLineCode::OutOfLineCode(v8::internal::compiler::CodeGenerator*)",93957342886368,93957342886431],["unsigned int std::__1::__sort3<v8::internal::compiler::CodeGenerator::AssembleCode()::$_0&, std::__1::__deque_iterator<v8::internal::compiler::DeoptimizationExit*, v8::internal::compiler::DeoptimizationExit**, v8::internal::compiler::DeoptimizationExit*&, v8::internal::compiler::DeoptimizationExit***, long, 0l> >(std::__1::__deque_iterator<v8::internal::compiler::DeoptimizationExit*, v8::internal::compiler::DeoptimizationExit**, v8::internal::compiler::DeoptimizationExit*&, v8::internal::compiler::DeoptimizationExit***, long, 0l>, std::__1::__deque_iterator<v8::internal::compiler::DeoptimizationExit*, v8::internal::compiler::DeoptimizationExit**, v8::internal::compiler::DeoptimizationExit*&, v8::internal::compiler::DeoptimizationExit***, long, 0l>, std::__1::__deque_iterator<v8::internal::compiler::DeoptimizationExit*, v8::internal::compiler::DeoptimizationExit**, v8::internal::compiler::DeoptimizationExit*&, v8::internal::compiler::DeoptimizationExit***, long, 0l>, v8::internal::compiler::CodeGenerator::AssembleCode()::$_0&)",93957342890592,93957342890800],["bool std::__1::__insertion_sort_incomplete<v8::internal::compiler::CodeGenerator::AssembleCode()::$_0&, std::__1::__deque_iterator<v8::internal::compiler::DeoptimizationExit*, v8::internal::compiler::DeoptimizationExit**, v8::internal::compiler::DeoptimizationExit*&, v8::internal::compiler::DeoptimizationExit***, long, 0l> >(std::__1::__deque_iterator<v8::internal::compiler::DeoptimizationExit*, v8::internal::compiler::DeoptimizationExit**, v8::internal::compiler::DeoptimizationExit*&, v8::internal::compiler::DeoptimizationExit***, long, 0l>, std::__1::__deque_iterator<v8::internal::compiler::DeoptimizationExit*, v8::internal::compiler::DeoptimizationExit**, v8::internal::compiler::DeoptimizationExit*&, v8::internal::compiler::DeoptimizationExit***, long, 0l>, v8::internal::compiler::CodeGenerator::AssembleCode()::$_0&)",93957342891120,93957342892961],["v8::internal::compiler::MachineOperatorBuilder::I64x2Abs()",93957344482272,93957344482287],["v8::internal::compiler::MachineOperatorBuilder::I32x4ExtMulLowI16x8S()",93957344483040,93957344483055],["v8::internal::compiler::MachineOperatorBuilder::I16x8GtS()",93957344483424,93957344483439],["v8::internal::compiler::MachineOperatorBuilder::I16x8ExtMulLowI8x16S()",93957344483680,93957344483695],["v8::internal::compiler::MachineOperatorBuilder::I8x16AddSatS()",93957344483872,93957344483887],["v8::internal::compiler::MachineOperatorBuilder::I8x16GeS()",93957344484000,93957344484015],["v8::internal::compiler::MachineOperatorBuilder::I8x16GeU()",93957344484128,93957344484143],["v8::internal::compiler::MachineOperatorBuilder::S128Xor()",93957344484256,93957344484271],["v8::internal::compiler::MachineOperatorBuilder::I32x4AllTrue()",93957344484352,93957344484367],["v8::internal::compiler::MachineOperatorBuilder::Word32Sar(v8::internal::compiler::ShiftKind)",93957344484416,93957344484445],["v8::internal::compiler::MachineOperatorBuilder::TruncateFloat32ToInt32(v8::internal::compiler::TruncateKind)",93957344484544,93957344484573],["v8::internal::compiler::MachineOperatorBuilder::Word64Rol()",93957344484672,93957344484695],["v8::internal::compiler::MachineOperatorBuilder::Word64Popcnt()",93957344484800,93957344484822],["v8::internal::compiler::MachineOperatorBuilder::Float64RoundUp()",93957344484928,93957344484951],["v8::internal::compiler::MachineOperatorBuilder::Float64RoundTiesEven()",93957344485056,93957344485077],["v8::internal::compiler::MachineOperatorBuilder::Load(v8::internal::MachineType)",93957344485136,93957344485526],["v8::internal::compiler::MachineOperatorBuilder::ProtectedLoad(v8::internal::MachineType)",93957344486336,93957344486726],["v8::internal::compiler::MachineOperatorBuilder::LoadLane(v8::internal::compiler::MemoryAccessKind, v8::internal::MachineType, unsigned char)",93957344487504,93957344496098],["v8::internal::compiler::MachineOperatorBuilder::StoreLane(v8::internal::compiler::MemoryAccessKind, v8::internal::MachineRepresentation, unsigned char)",93957344496304,93957344504473],["v8::internal::compiler::MachineOperatorBuilder::StackSlot(int, int)",93957344504672,93957344504855],["v8::internal::compiler::MachineOperatorBuilder::StackSlot(v8::internal::MachineRepresentation, int)",93957344505040,93957344505391],["v8::internal::compiler::MachineOperatorBuilder::ProtectedStore(v8::internal::MachineRepresentation)",93957344506480,93957344506664],["v8::internal::compiler::MachineOperatorBuilder::StackPointerGreaterThan(v8::internal::compiler::StackCheckKind)",93957344506688,93957344506773],["v8::internal::compiler::MachineOperatorBuilder::BitcastTaggedToWord()",93957344506800,93957344506815],["v8::internal::compiler::MachineOperatorBuilder::Word32AtomicLoad(v8::internal::MachineType)",93957344506832,93957344506963],["v8::internal::compiler::MachineOperatorBuilder::Word32AtomicExchange(v8::internal::MachineType)",93957344507056,93957344507187],["v8::internal::compiler::MachineOperatorBuilder::Word32AtomicAdd(v8::internal::MachineType)",93957344507344,93957344507475],["v8::internal::compiler::MachineOperatorBuilder::Word32AtomicAnd(v8::internal::MachineType)",93957344507632,93957344507763],["v8::internal::compiler::MachineOperatorBuilder::Word32AtomicXor(v8::internal::MachineType)",93957344507920,93957344508051],["v8::internal::compiler::MachineOperatorBuilder::Word64AtomicStore(v8::internal::MachineRepresentation)",93957344508192,93957344508284],["v8::internal::compiler::MachineOperatorBuilder::Word64AtomicSub(v8::internal::MachineType)",93957344508416,93957344508531],["v8::internal::compiler::MachineOperatorBuilder::Word64AtomicOr(v8::internal::MachineType)",93957344508672,93957344508787],["v8::internal::compiler::Scheduler::FuseFloatingControl(v8::internal::compiler::BasicBlock*, v8::internal::compiler::Node*)",93957344763680,93957344766561],["v8::internal::compiler::Scheduler::MovePlannedNodes(v8::internal::compiler::BasicBlock*, v8::internal::compiler::BasicBlock*)",93957344768224,93957344768466],["v8::internal::compiler::CFGBuilder::ConnectBlocks(v8::internal::compiler::Node*)",93957344769248,93957344769565],["v8::internal::compiler::CFGBuilder::FixNode(v8::internal::compiler::BasicBlock*, v8::internal::compiler::Node*)",93957344770032,93957344770075],["v8::internal::compiler::CFGBuilder::BuildBlocksForSuccessors(v8::internal::compiler::Node*)",93957344770224,93957344770367],["v8::internal::compiler::CFGBuilder::ConnectBranch(v8::internal::compiler::Node*)",93957344770768,93957344771769],["v8::internal::compiler::CFGBuilder::ConnectDeoptimize(v8::internal::compiler::Node*)",93957344772544,93957344772752],["v8::internal::compiler::CFGBuilder::ConnectReturn(v8::internal::compiler::Node*)",93957344772960,93957344773168],["v8::internal::compiler::CFGBuilder::ConnectCall(v8::internal::compiler::Node*)",93957344773376,93957344773827],["v8::internal::compiler::SpecialRPONumberer::ComputeAndInsertSpecialRPO(v8::internal::compiler::BasicBlock*, v8::internal::compiler::BasicBlock*)",93957344774032,93957344776906],["std::__1::vector<v8::internal::compiler::SpecialRPONumberer::SpecialRPOStackFrame, v8::internal::ZoneAllocator<v8::internal::compiler::SpecialRPONumberer::SpecialRPOStackFrame> >::__append(unsigned long)",93957344777760,93957344778075],["v8::internal::BitVector* v8::internal::Zone::New<v8::internal::BitVector, int, v8::internal::Zone*&>(int&&, v8::internal::Zone*&)",93957344778512,93957344778775],["v8::internal::compiler::ScheduleEarlyNodeVisitor::PropagateMinimumPositionToNode(v8::internal::compiler::BasicBlock*, v8::internal::compiler::Node*)",93957344779568,93957344779979],["v8::internal::compiler::ScheduleLateNodeVisitor::VisitNode(v8::internal::compiler::Node*)",93957344780640,93957344781535],["v8::internal::compiler::ScheduleLateNodeVisitor::SplitNode(v8::internal::compiler::BasicBlock*, v8::internal::compiler::Node*)",93957344781728,93957344784042],["v8::internal::compiler::ScheduleLateNodeVisitor::ScheduleNode(v8::internal::compiler::BasicBlock*, v8::internal::compiler::Node*)",93957344784336,93957344785154],["v8::internal::compiler::ScheduleLateNodeVisitor::CloneNode(v8::internal::compiler::Node*)",93957344785792,93957344786196],["v8::internal::compiler::SelectLowering::SelectLowering(v8::internal::compiler::JSGraphAssembler*, v8::internal::compiler::Graph*)",93957344786720,93957344786748],["v8::internal::compiler::SelectLowering::LowerSelect(v8::internal::compiler::Node*)",93957344786784,93957344787049],["v8::internal::compiler::RunSerializerForBackgroundCompilation(v8::internal::compiler::ZoneStats*, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::CompilationDependencies*, v8::internal::Handle<v8::internal::JSFunction>, v8::base::Flags<v8::internal::compiler::SerializerForBackgroundCompilationFlag, int>, v8::internal::BytecodeOffset)",93957344787072,93957344787688],["v8::internal::compiler::VirtualClosure::VirtualClosure(v8::internal::Handle<v8::internal::JSFunction>, v8::internal::Isolate*, v8::internal::Zone*)",93957344791184,93957344791562],["v8::internal::compiler::FunctionalSet<v8::internal::compiler::VirtualBoundFunction, std::__1::equal_to<v8::internal::compiler::VirtualBoundFunction> >::operator==(v8::internal::compiler::FunctionalSet<v8::internal::compiler::VirtualBoundFunction, std::__1::equal_to<v8::internal::compiler::VirtualBoundFunction> > const&) const",93957344792432,93957344792891],["v8::internal::compiler::Hints::AddMap(v8::internal::Handle<v8::internal::Map>, v8::internal::Zone*, v8::internal::compiler::JSHeapBroker*, bool)",93957344793712,93957344794518],["v8::internal::compiler::Hints::AddVirtualClosure(v8::internal::compiler::VirtualClosure const&, v8::internal::Zone*, v8::internal::compiler::JSHeapBroker*)",93957344795376,93957344796262],["v8::internal::compiler::FunctionalSet<v8::internal::compiler::VirtualBoundFunction, std::__1::equal_to<v8::internal::compiler::VirtualBoundFunction> >::Add(v8::internal::compiler::VirtualBoundFunction const&, v8::internal::Zone*)",93957344796992,93957344797673],["v8::internal::compiler::Hints::Union(v8::internal::compiler::Hints const&)",93957344798416,93957344799937],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::VirtualContext const&)",93957344801840,93957344802032],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Hints const&)",93957344802464,93957344803387],["v8::internal::compiler::SerializerForBackgroundCompilation::Environment::Environment(v8::internal::Zone*, v8::internal::Isolate*, v8::internal::compiler::CompilationSubject)",93957344803728,93957344804111],["v8::internal::compiler::SerializerForBackgroundCompilation::Environment::Merge(v8::internal::compiler::SerializerForBackgroundCompilation::Environment*, v8::internal::Zone*, v8::internal::compiler::JSHeapBroker*)",93957344804640,93957344804999],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::SerializerForBackgroundCompilation::Environment const&)",93957344805856,93957344807034],["v8::internal::compiler::SerializerForBackgroundCompilation::zone()",93957344808640,93957344808693],["v8::internal::ZoneVector<v8::internal::compiler::Hints>::ZoneVector(v8::internal::ZoneVector<v8::internal::compiler::Hints> const&)",93957344810640,93957344811124],["v8::internal::compiler::HandlerRangeMatcher::HandlerRangeMatcher(v8::internal::interpreter::BytecodeArrayIterator const&, v8::internal::Handle<v8::internal::BytecodeArray>)",93957344820528,93957344820726],["v8::internal::compiler::HandlerRangeMatcher::HandlerOffsetForCurrentPosition(std::__1::function<void (int)> const&)",93957344821264,93957344822021],["v8::internal::compiler::SerializerForBackgroundCompilation::VisitCallJSRuntime(v8::internal::interpreter::BytecodeArrayIterator*)",93957344822688,93957344822954],["v8::internal::compiler::SerializerForBackgroundCompilation::VisitCallProperty2(v8::internal::interpreter::BytecodeArrayIterator*)",93957344823504,93957344824195],["v8::internal::compiler::SerializerForBackgroundCompilation::VisitCallUndefinedReceiver1(v8::internal::interpreter::BytecodeArrayIterator*)",93957344824640,93957344825120],["v8::internal::compiler::SerializerForBackgroundCompilation::VisitConstruct(v8::internal::interpreter::BytecodeArrayIterator*)",93957344825744,93957344826063],["v8::internal::compiler::SerializerForBackgroundCompilation::VisitCreateArrayLiteral(v8::internal::interpreter::BytecodeArrayIterator*)",93957344826400,93957344826592],["frexp",139871563501088,139871563501236],["setjmp",139871563503920,139871563503930],["killpg",139871563504928,139871563504964],["sigpending",139871563505840,139871563505882],["sigblock",139871563506176,139871563506294],["__sigpause",139871563506432,139871563506589],["__xpg_sigpause",139871563506688,139871563506812],["sigstack",139871563507088,139871563507258],["getlogin",139871564524832,139871564524889],["getutent_r",139871564526256,139871564526426],["getutid",139871564526720,139871564526841],["getutid_r",139871564526976,139871564527201],["crealf128",139871565639296,139871565639303],["ctanf128",139871565657456,139871565659021],["cpowf128",139871565666800,139871565667210],["fmaxf128",139871565669424,139871565669634],["__iseqsigf128",139871565669888,139871565670014],["ilogbf128",139871565670080,139871565670139],["log1pf128",139871565670240,139871565670361],["fmaxmagf128",139871565670656,139871565670948],["v8::D8Console::Warn(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&)",93957335206736,93957335206770],["v8::D8Console::Time(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&)",93957335206880,93957335207392],["v8::(anonymous namespace)::ArrayBufferAllocatorBase::~ArrayBufferAllocatorBase()",93957335302272,93957335302315],["void std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::__push_back_slow_path<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)",93957335302560,93957335302969],["std::__1::__tree<std::__1::__value_type<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::ModuleType>, v8::Global<v8::Module> >, std::__1::__map_value_compare<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::ModuleType>, std::__1::__value_type<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::ModuleType>, v8::Global<v8::Module> >, std::__1::less<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::ModuleType> >, true>, std::__1::allocator<std::__1::__value_type<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::ModuleType>, v8::Global<v8::Module> > > >::destroy(std::__1::__tree_node<std::__1::__value_type<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::ModuleType>, v8::Global<v8::Module> >, void*>*)",93957335303488,93957335303576],["std::__1::__hash_table<std::__1::__hash_value_type<v8::Global<v8::Module>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::__unordered_map_hasher<v8::Global<v8::Module>, std::__1::__hash_value_type<v8::Global<v8::Module>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, v8::(anonymous namespace)::ModuleEmbedderData::ModuleGlobalHash, std::__1::equal_to<v8::Global<v8::Module> >, false>, std::__1::__unordered_map_equal<v8::Global<v8::Module>, std::__1::__hash_value_type<v8::Global<v8::Module>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<v8::Global<v8::Module> >, v8::(anonymous namespace)::ModuleEmbedderData::ModuleGlobalHash, true>, std::__1::allocator<std::__1::__hash_value_type<v8::Global<v8::Module>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > >::__rehash(unsigned long)",93957335303968,93957335304735],["void v8::internal::BodyDescriptorBase::IterateJSObjectBodyImpl<v8::internal::ConcurrentMarkingVisitor>(v8::internal::Map, v8::internal::HeapObject, int, int, v8::internal::ConcurrentMarkingVisitor*)",93957336813120,93957336814034],["cppgc::internal::StatsCollector::GetScopeName(cppgc::internal::StatsCollector::ScopeId, cppgc::internal::MarkerBase::MarkingConfig::CollectionType)",93957336817152,93957336817812],["v8::internal::CppGraphBuilderImpl::Run()",93957336819680,93957336820212],["v8::internal::StateBase::FollowDependencies()",93957336821264,93957336821773],["v8::internal::VisiblityVisitor::Visit(void const*, cppgc::TraceDescriptor)",93957336822208,93957336822236],["v8::internal::VisiblityVisitor::Visit(v8::TracedReferenceBase const&)",93957336822288,93957336822358],["void std::__1::vector<std::__1::unique_ptr<char const, std::__1::default_delete<char const> >, std::__1::allocator<std::__1::unique_ptr<char const, std::__1::default_delete<char const> > > >::__push_back_slow_path<std::__1::unique_ptr<char const, std::__1::default_delete<char const> > >(std::__1::unique_ptr<char const, std::__1::default_delete<char const> >&&)",93957336822384,93957336823126],["v8::internal::GraphBuildingVisitor::VisitRoot(void const*, cppgc::TraceDescriptor, cppgc::SourceLocation const&)",93957336823168,93957336823199],["v8::internal::Factory::NewUninitializedFixedArray(int)",93957336853136,93957336853206],["v8::internal::Handle<v8::internal::String> v8::internal::Factory::AllocateInternalizedStringImpl<false, v8::internal::Handle<v8::internal::String> >(v8::internal::Handle<v8::internal::String>, int, unsigned int)",93957336856960,93957336857149],["v8::internal::Factory::NewScriptContext(v8::internal::Handle<v8::internal::NativeContext>, v8::internal::Handle<v8::internal::ScopeInfo>)",93957336861440,93957336862010],["v8::internal::Factory::NewBuiltinContext(v8::internal::Handle<v8::internal::NativeContext>, int)",93957336865712,93957336866169],["v8::internal::Factory::NewCallbackTask(v8::internal::Handle<v8::internal::Foreign>, v8::internal::Handle<v8::internal::Foreign>)",93957336867696,93957336868026],["v8::internal::Factory::CopyFixedArrayAndGrow(v8::internal::Handle<v8::internal::FixedArray>, int)",93957336869360,93957336869372],["v8::internal::Factory::NewOneClosureCell(v8::internal::Handle<v8::internal::HeapObject>)",93957336869952,93957336870227],["v8::internal::Factory::NewAllocationSite(bool)",93957336871024,93957336871412],["v8::internal::Factory::CopyJSObjectWithAllocationSite(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::AllocationSite>)",93957336872272,93957336875009],["v8::internal::Factory::CopyFixedArray(v8::internal::Handle<v8::internal::FixedArray>)",93957336875520,93957336875666],["v8::internal::Factory::CopyFixedArrayWithMap(v8::internal::Handle<v8::internal::FixedArray>, v8::internal::Handle<v8::internal::Map>)",93957336875936,93957336875946],["v8::internal::Handle<v8::internal::FixedArray> v8::internal::Factory::CopyArrayAndGrow<v8::internal::FixedArray>(v8::internal::Handle<v8::internal::FixedArray>, int, v8::internal::AllocationType)",93957336876208,93957336876505],["v8::internal::Factory::CopyWeakFixedArrayAndGrow(v8::internal::Handle<v8::internal::WeakFixedArray>, int)",93957336876688,93957336876703],["v8::internal::Factory::CopyWeakArrayListAndGrow(v8::internal::Handle<v8::internal::WeakArrayList>, int, v8::internal::AllocationType)",93957336877008,93957336877310],["v8::internal::Factory::CopyPropertyArrayAndGrow(v8::internal::Handle<v8::internal::PropertyArray>, int)",93957336877920,93957336877932],["v8::internal::Factory::CopyFixedArrayUpTo(v8::internal::Handle<v8::internal::FixedArray>, int, v8::internal::AllocationType)",93957336878240,93957336878474],["v8::internal::Heap::AddRetainedMap(v8::internal::Handle<v8::internal::NativeContext>, v8::internal::Handle<v8::internal::Map>)",93957337033456,93957337033823],["v8::internal::Heap::UpdateStrongRoots(v8::internal::StrongRootsEntry*, v8::internal::FullObjectSlot, v8::internal::FullObjectSlot)",93957337035664,93957337035677],["v8::internal::Heap::EnqueueDirtyJSFinalizationRegistry(v8::internal::JSFinalizationRegistry, std::__1::function<void (v8::internal::HeapObject, v8::internal::CompressedObjectSlot, v8::internal::Object)>)",93957337036016,93957337036401],["v8::internal::Heap::NumberOfNativeContexts()",93957337037056,93957337037126],["v8::internal::Heap::CreateObjectStats()",93957337037616,93957337037778],["v8::internal::Heap::EphemeronKeyWriteBarrierFromCode(unsigned long, unsigned long, v8::internal::Isolate*)",93957337038096,93957337038461],["v8::internal::StrongRootBlockAllocator::allocate(unsigned long)",93957337038496,93957337038675],["v8::internal::ObjectVisitor::VisitCustomWeakPointers(v8::internal::HeapObject, v8::internal::CompressedObjectSlot, v8::internal::CompressedObjectSlot)",93957337038832,93957337038846],["v8::internal::ToSpaceUpdatingItem<v8::internal::MinorNonAtomicMarkingState>::Process()",93957337358496,93957337358522],["void v8::internal::SmallOrderedHashTable<v8::internal::SmallOrderedHashMap>::BodyDescriptor::IterateBody<v8::internal::YoungGenerationMarkingVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::YoungGenerationMarkingVisitor*)",93957337370640,93957337371000],["v8::internal::YoungGenerationMarkingJob::~YoungGenerationMarkingJob()",93957337376352,93957337376432],["unsigned long v8::internal::SlotSet::Iterate<v8::internal::PageMarkingItem::MarkUntypedPointers(v8::internal::YoungGenerationMarkingTask*)::{lambda(v8::internal::CompressedMaybeObjectSlot)#2}, v8::internal::SlotSet::Iterate<{lambda(v8::internal::CompressedMaybeObjectSlot)#2}>(unsigned long, unsigned long, unsigned long, {lambda(v8::internal::CompressedMaybeObjectSlot)#2}, v8::internal::SlotSet::EmptyBucketMode)::{lambda(unsigned long)#1}>(unsigned long, unsigned long, unsigned long, v8::internal::SlotSet::Iterate, v8::internal::SlotSet::Iterate<{lambda(v8::internal::CompressedMaybeObjectSlot)#2}>(unsigned long, unsigned long, unsigned long, {lambda(v8::internal::CompressedMaybeObjectSlot)#2}, v8::internal::SlotSet::EmptyBucketMode)::{lambda(unsigned long)#1})",93957337390240,93957337391200],["v8::internal::(anonymous namespace)::YoungGenerationEvacuator::GetBackgroundTracingScope()",93957337404368,93957337404379],["v8::internal::YoungGenerationRecordMigratedSlotVisitor::RecordMigratedSlot(v8::internal::HeapObject, v8::internal::MaybeObject, unsigned long)",93957337404976,93957337405388],["v8::internal::MarkingBarrier::MarkingBarrier(v8::internal::Heap*)",93957337408752,93957337408847],["v8::internal::MarkingBarrier::Write(v8::internal::HeapObject, v8::internal::CompressedHeapObjectSlot, v8::internal::HeapObject)",93957337409216,93957337409500],["v8::internal::MarkingBarrier::Write(v8::internal::JSArrayBuffer, v8::internal::ArrayBufferExtension*)",93957337409776,93957337409785],["v8::internal::MarkingBarrier::ActivateAll(v8::internal::Heap*, bool)",93957337409840,93957337409914],["v8::internal::MarkingBarrier::DeactivateAll(v8::internal::Heap*)",93957337410304,93957337410377],["v8::internal::MarkingBarrier::PublishAll(v8::internal::Heap*)",93957337410752,93957337410825],["v8::internal::MarkingWorklists::~MarkingWorklists()",93957337411440,93957337411702],["v8::internal::MarkingWorklists::ReleaseContextWorklists()",93957337412288,93957337412427],["std::__1::vector<std::__1::unique_ptr<heap::base::Worklist<v8::internal::HeapObject, (unsigned short)64>, std::__1::default_delete<heap::base::Worklist<v8::internal::HeapObject, (unsigned short)64> > >, std::__1::allocator<std::__1::unique_ptr<heap::base::Worklist<v8::internal::HeapObject, (unsigned short)64>, std::__1::default_delete<heap::base::Worklist<v8::internal::HeapObject, (unsigned short)64> > > > >::reserve(unsigned long)",93957337413136,93957337413829],["v8::internal::MarkingWorklists::Local::~Local()",93957337414432,93957337414598],["v8::internal::RegExpBytecodeGenerator::IfRegisterLT(int, int, v8::internal::Label*)",93957339761856,93957339762112],["v8::internal::RegExpCharacterClass::ToNode(v8::internal::RegExpCompiler*, v8::internal::RegExpNode*)",93957339784960,93957339790494],["v8::internal::RegExpQuantifier::ToNode(int, int, bool, v8::internal::RegExpTree*, v8::internal::RegExpCompiler*, v8::internal::RegExpNode*, bool)",93957339797536,93957339799906],["v8::internal::RegExpLookaround::ToNode(v8::internal::RegExpCompiler*, v8::internal::RegExpNode*)",93957339804496,93957339804915],["v8::internal::CharacterRange::Canonicalize(v8::internal::ZoneList<v8::internal::CharacterRange>*)",93957339810400,93957339811640],["v8::internal::(anonymous namespace)::AssertionSequenceRewriter::Rewrite(int, int)",93957339812784,93957339813634],["void std::__1::__inplace_merge<v8::internal::ZoneList<v8::internal::RegExpTree*>::StableSort<int (*)(v8::internal::RegExpTree* const*, v8::internal::RegExpTree* const*)>(int (*)(v8::internal::RegExpTree* const*, v8::internal::RegExpTree* const*), unsigned long, unsigned long)::{lambda(v8::internal::RegExpTree* const&, v8::internal::RegExpTree* const&)#1}&, v8::internal::RegExpTree**>(v8::internal::RegExpTree**, v8::internal::RegExpTree**, v8::internal::RegExpTree**, v8::internal::ZoneList<v8::internal::RegExpTree*>::StableSort<int (*)(v8::internal::RegExpTree* const*, v8::internal::RegExpTree* const*)>(int (*)(v8::internal::RegExpTree* const*, v8::internal::RegExpTree* const*), unsigned long, unsigned long)::{lambda(v8::internal::RegExpTree* const&, v8::internal::RegExpTree* const&)#1}&, std::__1::iterator_traits<v8::internal::RegExpTree**>::difference_type, std::__1::iterator_traits<v8::internal::RegExpTree**>, std::__1::iterator_traits::value_type*, long)",93957339816400,93957339818359],["v8::internal::RegExpText::AddElement(v8::internal::TextElement, v8::internal::Zone*)",93957339820352,93957339820626],["v8::internal::TextElement::CharClass(v8::internal::RegExpCharacterClass*)",93957339820688,93957339820707],["v8::internal::RegExpCompiler::RegExpCompiler(v8::internal::Isolate*, v8::internal::Zone*, int, bool)",93957339820832,93957339821031],["v8::internal::RegExpCompiler::Assemble(v8::internal::Isolate*, v8::internal::RegExpMacroAssembler*, v8::internal::RegExpNode*, int, v8::internal::Handle<v8::internal::String>)",93957339822240,93957339822677],["v8::internal::DynamicBitSet::Set(unsigned int, v8::internal::Zone*)",93957339823328,93957339823711],["v8::internal::Trace::PerformDeferredActions(v8::internal::RegExpMacroAssembler*, int, v8::internal::DynamicBitSet const&, v8::internal::DynamicBitSet*, v8::internal::DynamicBitSet*, v8::internal::Zone*)",93957339824096,93957339824745],["v8::internal::NegativeSubmatchSuccess::Emit(v8::internal::RegExpCompiler*, v8::internal::Trace*)",93957339826096,93957339826204],["v8::internal::GuardedAlternative::AddGuard(v8::internal::Guard*, v8::internal::Zone*)",93957339826416,93957339826721],["v8::internal::ActionNode::IncrementRegister(int, v8::internal::RegExpNode*)",93957339826864,93957339826975],["v8_inspector::V8DebuggerAgentImpl::removeBreakpointFor(v8::Local<v8::Function>, v8_inspector::V8DebuggerAgentImpl::BreakpointSource)",93957342517696,93957342517874],["v8_inspector::V8DebuggerId::V8DebuggerId(v8_inspector::String16 const&)",93957342522960,93957342523213],["v8_inspector::V8DebuggerScript::setSourceURL(v8_inspector::String16 const&)",93957342524752,93957342524812],["v8_inspector::(anonymous namespace)::ActualScript::~ActualScript()",93957342526144,93957342526338],["v8_inspector::(anonymous namespace)::ActualScript::source(unsigned long, unsigned long) const",93957342526576,93957342526807],["v8_inspector::(anonymous namespace)::ActualScript::hash() const",93957342526832,93957342528011],["v8_inspector::(anonymous namespace)::ActualScript::startColumn() const",93957342528032,93957342528044],["v8_inspector::(anonymous namespace)::ActualScript::endColumn() const",93957342528064,93957342528076],["v8_inspector::V8RuntimeAgentImpl::runScript(v8_inspector::String16 const&, v8_crdtp::detail::ValueMaybe<int>, v8_crdtp::detail::ValueMaybe<v8_inspector::String16>, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<bool>, std::__1::unique_ptr<v8_inspector::protocol::Runtime::Backend::RunScriptCallback, std::__1::default_delete<v8_inspector::protocol::Runtime::Backend::RunScriptCallback> >)",93957342632352,93957342634194],["void std::__1::vector<v8_inspector::String16, std::__1::allocator<v8_inspector::String16> >::__push_back_slow_path<v8_inspector::String16>(v8_inspector::String16&&)",93957342643792,93957342644179],["v8_inspector::V8StackTraceId::IsInvalid() const",93957342647120,93957342647133],["v8_inspector::V8StackTraceImpl::~V8StackTraceImpl()",93957342650112,93957342650262],["v8_inspector::V8StackTraceImpl::topSourceURL() const",93957342651440,93957342651475],["v8_inspector::V8StackTraceImpl::topScriptIdAsInteger() const",93957342651600,93957342651616],["v8_inspector::(anonymous namespace)::buildInspectorObjectCommon(v8_inspector::V8Debugger*, std::__1::vector<std::__1::shared_ptr<v8_inspector::StackFrame>, std::__1::allocator<std::__1::shared_ptr<v8_inspector::StackFrame> > > const&, v8_inspector::String16 const&, std::__1::shared_ptr<v8_inspector::AsyncStackTrace> const&, v8_inspector::V8StackTraceId const&, int)",93957342652064,93957342653564],["v8_inspector::V8StackTraceImpl::isEqualIgnoringTopFrame(v8_inspector::V8StackTraceImpl*) const",93957342655120,93957342655453],["v8_inspector::AsyncStackTrace::AsyncStackTrace(int, v8_inspector::String16 const&, std::__1::vector<std::__1::shared_ptr<v8_inspector::StackFrame>, std::__1::allocator<std::__1::shared_ptr<v8_inspector::StackFrame> > >, std::__1::shared_ptr<v8_inspector::AsyncStackTrace>, v8_inspector::V8StackTraceId const&)",93957342656672,93957342657541],["v8_inspector::AsyncStackTrace::store(v8_inspector::V8Debugger*, std::__1::shared_ptr<v8_inspector::AsyncStackTrace>)",93957342657728,93957342657843],["std::__1::__shared_ptr_pointer<v8_inspector::AsyncStackTrace*, std::__1::shared_ptr<v8_inspector::AsyncStackTrace>::__shared_ptr_default_delete<v8_inspector::AsyncStackTrace, v8_inspector::AsyncStackTrace>, std::__1::allocator<v8_inspector::AsyncStackTrace> >::__on_zero_shared()",93957342658512,93957342658686],["v8_inspector::createDataProperty(v8::Local<v8::Context>, v8::Local<v8::Array>, int, v8::Local<v8::Value>)",93957342658848,93957342659008],["v8_inspector::(anonymous namespace)::v8InternalValueTypeFrom(v8::Local<v8::Context>, v8::Local<v8::Value>)",93957342664288,93957342664392],["v8_inspector::(anonymous namespace)::doesAttributeHaveObservableSideEffectOnGet(v8::Local<v8::Context>, v8::Local<v8::Object>, v8::Local<v8::Name>)",93957342668096,93957342668611],["v8_inspector::ValueMirror::getInternalProperties(v8::Local<v8::Context>, v8::Local<v8::Object>, std::__1::vector<v8_inspector::InternalPropertyMirror, std::__1::allocator<v8_inspector::InternalPropertyMirror> >*)",93957342669232,93957342670955],["v8_inspector::descriptionForNode(v8::Local<v8::Context>, v8::Local<v8::Value>)",93957342671984,93957342674149],["v8::internal::compiler::AccessBuilder::ForOrderedHashMapOrSetNextTable()",93957342831744,93957342831808],["v8::internal::compiler::AccessInfoFactory::ComputeElementAccessInfo(v8::internal::Handle<v8::internal::Map>, v8::internal::compiler::AccessMode) const",93957342839184,93957342839580],["v8::internal::compiler::AccessInfoFactory::FinalizePropertyAccessInfosAsOne(v8::internal::ZoneVector<v8::internal::compiler::PropertyAccessInfo>, v8::internal::compiler::AccessMode) const",93957342855920,93957342856822],["void std::__1::vector<v8::internal::compiler::PropertyAccessInfo, v8::internal::ZoneAllocator<v8::internal::compiler::PropertyAccessInfo> >::__push_back_slow_path<v8::internal::compiler::PropertyAccessInfo const&>(v8::internal::compiler::PropertyAccessInfo const&)",93957342861280,93957342861846],["std::__1::vector<bool, v8::internal::ZoneAllocator<bool> >::resize(unsigned long, bool)",93957342862784,93957342863211],["v8::internal::compiler::AllNodes::AllNodes(v8::internal::Zone*, v8::internal::compiler::Node*, v8::internal::compiler::Graph const*, bool)",93957342866144,93957342866410],["v8::internal::compiler::CodeGenerator::ShouldApplyOffsetToStackCheck(v8::internal::compiler::Instruction*, unsigned int*)",93957342868288,93957342868363],["v8::internal::compiler::CodeGenerator::AssembleCode()",93957342869328,93957342872533],["std::__1::vector<int, v8::internal::ZoneAllocator<int> >::assign(unsigned long, int const&)",93957342873616,93957342874789],["v8::internal::compiler::CodeGenerator::TryInsertBranchPoisoning(v8::internal::compiler::InstructionBlock const*)",93957342875488,93957342875727],["v8::internal::compiler::CodeGenerator::AssembleArchBinarySearchSwitchRange(v8::internal::Register, v8::internal::compiler::RpoNumber, std::__1::pair<int, v8::internal::Label*>*, std::__1::pair<int, v8::internal::Label*>*)",93957342876320,93957342876628],["v8::internal::compiler::CodeGenerator::GetProtectedInstructionsData()",93957342876672,93957342876748],["v8::internal::compiler::CodeGenerator::GenerateDeoptimizationData()",93957342877312,93957342878616],["v8::internal::compiler::CodeGenerator::RecordSafepoint(v8::internal::compiler::ReferenceMap*)",93957342878704,93957342878868],["v8::internal::compiler::CodeGenerator::AssembleInstruction(int, v8::internal::compiler::InstructionBlock const*)",93957342878960,93957342880040],["v8::internal::compiler::CodeGenerator::MoveType::InferMove(v8::internal::compiler::InstructionOperand*, v8::internal::compiler::InstructionOperand*)",93957342880768,93957342880875],["v8::internal::compiler::MachineOperatorBuilder::F64x2ConvertLowI32x4S()",93957344481760,93957344481775],["v8::internal::compiler::MachineOperatorBuilder::I64x2ShrU()",93957344482528,93957344482543],["v8::internal::compiler::MachineOperatorBuilder::I32x4ShrU()",93957344482912,93957344482927],["v8::internal::compiler::MachineOperatorBuilder::I16x8Splat()",93957344483168,93957344483183],["v8::internal::compiler::MachineOperatorBuilder::I16x8MinS()",93957344483360,93957344483375],["v8::internal::compiler::MachineOperatorBuilder::I16x8ShrU()",93957344483488,93957344483503],["v8::internal::compiler::MachineOperatorBuilder::I16x8RoundingAverageU()",93957344483616,93957344483631],["v8::internal::compiler::MachineOperatorBuilder::I16x8ExtAddPairwiseI8x16S()",93957344483744,93957344483759],["v8::internal::compiler::MachineOperatorBuilder::I8x16SConvertI16x8()",93957344483840,93957344483855],["v8::internal::compiler::MachineOperatorBuilder::I8x16SubSatS()",93957344483904,93957344483919],["v8::internal::compiler::MachineOperatorBuilder::I8x16Ne()",93957344483968,93957344483983],["v8::internal::compiler::MachineOperatorBuilder::I8x16UConvertI16x8()",93957344484032,93957344484047],["v8::internal::compiler::MachineOperatorBuilder::I8x16MaxU()",93957344484096,93957344484111],["v8::internal::compiler::MachineOperatorBuilder::I8x16Popcnt()",93957344484160,93957344484175],["v8::internal::compiler::MachineOperatorBuilder::S128And()",93957344484224,93957344484239],["v8::internal::compiler::MachineOperatorBuilder::S128Select()",93957344484288,93957344484303],["v8::internal::compiler::MachineOperatorBuilder::I64x2AllTrue()",93957344484336,93957344484351],["v8::internal::compiler::MachineOperatorBuilder::I16x8AllTrue()",93957344484368,93957344484383],["v8::internal::compiler::MachineOperatorBuilder::I8x16Swizzle()",93957344484400,93957344484415],["v8::internal::compiler::MachineOperatorBuilder::Word64Sar(v8::internal::compiler::ShiftKind)",93957344484448,93957344484477],["v8::internal::compiler::MachineOperatorBuilder::TruncateFloat64ToInt64(v8::internal::compiler::TruncateKind)",93957344484512,93957344484541],["v8::internal::compiler::MachineOperatorBuilder::Word32Ctz()",93957344484576,93957344484599],["v8::internal::compiler::MachineOperatorBuilder::Word32Rol()",93957344484640,93957344484663],["v8::internal::compiler::MachineOperatorBuilder::Word32ReverseBits()",93957344484704,93957344484724],["v8::internal::compiler::MachineOperatorBuilder::Word32Popcnt()",93957344484768,93957344484791],["v8::internal::compiler::MachineOperatorBuilder::Float32RoundDown()",93957344484832,93957344484852],["v8::internal::compiler::MachineOperatorBuilder::Float32RoundUp()",93957344484896,93957344484919],["v8::internal::compiler::MachineOperatorBuilder::Float32RoundTruncate()",93957344484960,93957344484983],["v8::internal::compiler::MachineOperatorBuilder::Float32RoundTiesEven()",93957344485024,93957344485047],["v8::internal::compiler::MachineOperatorBuilder::Int32AddWithOverflow()",93957344485088,93957344485103],["v8::internal::compiler::MachineOperatorBuilder::Int32MulWithOverflow()",93957344485120,93957344485135],["v8::internal::compiler::MachineOperatorBuilder::LoadImmutable(v8::internal::MachineType)",93957344485536,93957344485926],["frexpl",139871563500160,139871563500303],["__isnanf",139871563501440,139871563501461],["ldexpf",139871563502064,139871563502181],["__libc_siglongjmp",139871563503952,139871563504017],["gsignal",139871563504544,139871563504921],["__sigaction",139871563505488,139871563505532],["kill",139871563505792,139871563505825],["__sigsuspend",139871563505888,139871563506043],["xdr_sizeof",139871564507232,139871564507473],["setlogin",139871564525936,139871564525956],["setutent",139871564526112,139871564526250],["pututline",139871564526432,139871564526570],["roundevenf128",139871565636048,139871565636423],["ccosf128",139871565641040,139871565641161],["catanhf128",139871565652624,139871565654749],["cexpf128",139871565660688,139871565662451],["csqrtf128",139871565664512,139871565666798],["clog10f128",139871565667216,139871565669071],["nextdownf128",139871565669392,139871565669422],["fminf128",139871565669648,139871565669858],["v8::D8Console::Log(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&)",93957335206656,93957335206685],["v8::D8Console::Info(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&)",93957335206784,93957335206818],["v8::Serializer::~Serializer()",93957335297184,93957335297590],["v8::Worker::WorkerThread::~WorkerThread()",93957335302336,93957335302412],["v8::SourceGroup::IsolateThread::Run()",93957335302544,93957335302558],["std::__1::__deque_base<v8::AsyncContext, std::__1::allocator<v8::AsyncContext> >::~__deque_base()",93957335302976,93957335303183],["void v8::internal::MarkingVisitorBase<v8::internal::ConcurrentMarkingVisitor, v8::internal::ConcurrentMarkingState>::ProcessStrongHeapObject<v8::internal::CompressedHeapObjectSlot>(v8::internal::HeapObject, v8::internal::CompressedHeapObjectSlot, v8::internal::HeapObject)",93957336809760,93957336810040],["void v8::internal::PrototypeInfo::BodyDescriptor::IterateBody<v8::internal::ConcurrentMarkingVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::ConcurrentMarkingVisitor*)",93957336814944,93957336815237],["v8::internal::CppHeap::DetachIsolate()",93957336816752,93957336816869],["v8::internal::CppGraphBuilderImpl::VisitForVisibility(v8::internal::State*, cppgc::internal::HeapObjectHeader const&)",93957336818128,93957336818497],["v8::internal::CppGraphBuilderImpl::AddRootEdge(v8::internal::RootState&, v8::internal::State&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)",93957336819072,93957336819668],["v8::internal::StateStorage::CreateRootState(v8::internal::EmbedderRootNode*)",93957336820224,93957336820520],["std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::wasm::WasmCode const*, std::__1::unique_ptr<v8::internal::wasm::DebugSideTable, std::__1::default_delete<v8::internal::wasm::DebugSideTable> > >, std::__1::__unordered_map_hasher<v8::internal::wasm::WasmCode const*, std::__1::__hash_value_type<v8::internal::wasm::WasmCode const*, std::__1::unique_ptr<v8::internal::wasm::DebugSideTable, std::__1::default_delete<v8::internal::wasm::DebugSideTable> > >, std::__1::hash<v8::internal::wasm::WasmCode const*>, std::__1::equal_to<v8::internal::wasm::WasmCode const*>, true>, std::__1::__unordered_map_equal<v8::internal::wasm::WasmCode const*, std::__1::__hash_value_type<v8::internal::wasm::WasmCode const*, std::__1::unique_ptr<v8::internal::wasm::DebugSideTable, std::__1::default_delete<v8::internal::wasm::DebugSideTable> > >, std::__1::equal_to<v8::internal::wasm::WasmCode const*>, std::__1::hash<v8::internal::wasm::WasmCode const*>, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::wasm::WasmCode const*, std::__1::unique_ptr<v8::internal::wasm::DebugSideTable, std::__1::default_delete<v8::internal::wasm::DebugSideTable> > > > >::__node_insert_unique(std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::wasm::WasmCode const*, std::__1::unique_ptr<v8::internal::wasm::DebugSideTable, std::__1::default_delete<v8::internal::wasm::DebugSideTable> > >, void*>*)",93957336820848,93957336821254],["v8::internal::CppGraphBuilderImpl::VisitationItem::Process(v8::internal::CppGraphBuilderImpl&)",93957336821776,93957336822019],["v8::internal::Factory::NewOrderedHashSet()",93957336854000,93957336854044],["v8::internal::Factory::NewStringFromTwoByte(unsigned short const*, int, v8::internal::AllocationType)",93957336855136,93957336855534],["v8::internal::Factory::NewInvalidStringLengthError()",93957336858912,93957336859132],["v8::internal::Factory::NewNativeContext()",93957336860144,93957336861238],["v8::internal::Factory::NewModuleContext(v8::internal::Handle<v8::internal::SourceTextModule>, v8::internal::Handle<v8::internal::NativeContext>, v8::internal::Handle<v8::internal::ScopeInfo>)",93957336862064,93957336862747],["v8::internal::Factory::NewWithContext(v8::internal::Handle<v8::internal::Context>, v8::internal::Handle<v8::internal::ScopeInfo>, v8::internal::Handle<v8::internal::JSReceiver>)",93957336864688,93957336865244],["v8::internal::Factory::NewAccessorInfo()",93957336866304,93957336866451],["v8::internal::Factory::NewCallableTask(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::Context>)",93957336867360,93957336867690],["v8::internal::Factory::NewPromiseResolveThenableJobTask(v8::internal::Handle<v8::internal::JSPromise>, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::Context>)",93957336868032,93957336868577],["v8::internal::Factory::NewWasmTypeInfo(unsigned long, v8::internal::Handle<v8::internal::Map>)",93957336868720,93957336869354],["v8::internal::Factory::NewSharedFunctionInfoForWasmJSFunction(v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::WasmJSFunctionData>)",93957336869376,93957336869394],["v8::internal::Factory::NewNoClosuresCell(v8::internal::Handle<v8::internal::HeapObject>)",93957336869664,93957336869939],["v8::internal::Factory::NewPropertyCell(v8::internal::Handle<v8::internal::Name>, v8::internal::PropertyDetails, v8::internal::Handle<v8::internal::Object>, v8::internal::AllocationType)",93957336870240,93957336870620],["v8::internal::Factory::NewTransitionArray(int, int)",93957336870752,93957336871010],["v8::internal::Factory::InitializeMap(v8::internal::Map, v8::internal::InstanceType, int, v8::internal::ElementsKind, int)",93957336871424,93957336872245],["v8::internal::Heap::SetEmbedderHeapTracer(v8::EmbedderHeapTracer*)",93957337029392,93957337029409],["v8::internal::SpaceIterator::SpaceIterator(v8::internal::Heap*)",93957337034416,93957337034443],["v8::internal::Heap::YoungArrayBufferBytes()",93957337035504,93957337035521],["v8::internal::Heap::SetBuiltinsConstantsTable(v8::internal::FixedArray)",93957337035792,93957337035805],["v8::internal::Heap::PostFinalizationRegistryCleanupTaskIfNeeded()",93957337035840,93957337036016],["v8::internal::Heap::DequeueDirtyJSFinalizationRegistry()",93957337036416,93957337036837],["v8::internal::Heap::ClearKeptObjects()",93957337037024,93957337037044],["v8::internal::Heap::FindAllRetainedMaps()",93957337037136,93957337037581],["v8::internal::RememberedSetUpdatingItem<v8::internal::MajorNonAtomicMarkingState, (v8::internal::GarbageCollector)1>::UpdateUntypedPointers()",93957337349632,93957337350076],["v8::internal::SlotCallbackResult v8::internal::UpdateTypedSlotHelper::UpdateCodeTarget<v8::internal::RememberedSetUpdatingItem<v8::internal::MinorNonAtomicMarkingState, (v8::internal::GarbageCollector)2>::UpdateTypedPointers()::{lambda(v8::internal::FullMaybeObjectSlot)#1}>(v8::internal::RelocInfo*, v8::internal::RememberedSetUpdatingItem<v8::internal::MinorNonAtomicMarkingState, (v8::internal::GarbageCollector)2>::UpdateTypedPointers()::{lambda(v8::internal::FullMaybeObjectSlot)#1})",93957337363264,93957337363592],["void v8::internal::JSWeakRef::BodyDescriptor::IterateBody<v8::internal::YoungGenerationMarkingVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::YoungGenerationMarkingVisitor*)",93957337368224,93957337368629],["void v8::internal::SwissNameDictionary::BodyDescriptor::IterateBody<v8::internal::YoungGenerationMarkingVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::YoungGenerationMarkingVisitor*)",93957337372432,93957337372792],["void v8::internal::ExportedSubClass::BodyDescriptor::IterateBody<v8::internal::YoungGenerationMarkingVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::YoungGenerationMarkingVisitor*)",93957337375456,93957337376071],["v8::internal::YoungGenerationMarkingJob::Run(v8::JobDelegate*)",93957337376528,93957337377280],["v8::internal::PageMarkingItem::Process(v8::internal::YoungGenerationMarkingTask*)",93957337389344,93957337389897],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::MemoryChunk*, std::__1::unique_ptr<v8::internal::TypedSlots, std::__1::default_delete<v8::internal::TypedSlots> > >, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::MemoryChunk*, std::__1::unique_ptr<v8::internal::TypedSlots, std::__1::default_delete<v8::internal::TypedSlots> > >, std::__1::__unordered_map_hasher<v8::internal::MemoryChunk*, std::__1::__hash_value_type<v8::internal::MemoryChunk*, std::__1::unique_ptr<v8::internal::TypedSlots, std::__1::default_delete<v8::internal::TypedSlots> > >, v8::internal::BasicMemoryChunk::Hasher, std::__1::equal_to<v8::internal::MemoryChunk*>, true>, std::__1::__unordered_map_equal<v8::internal::MemoryChunk*, std::__1::__hash_value_type<v8::internal::MemoryChunk*, std::__1::unique_ptr<v8::internal::TypedSlots, std::__1::default_delete<v8::internal::TypedSlots> > >, std::__1::equal_to<v8::internal::MemoryChunk*>, v8::internal::BasicMemoryChunk::Hasher, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::MemoryChunk*, std::__1::unique_ptr<v8::internal::TypedSlots, std::__1::default_delete<v8::internal::TypedSlots> > > > >::__emplace_unique_key_args<v8::internal::MemoryChunk*, std::__1::piecewise_construct_t const&, std::__1::tuple<v8::internal::MemoryChunk* const&>, std::__1::tuple<> >(v8::internal::MemoryChunk* const&, std::__1::piecewise_construct_t const&, std::__1::tuple<v8::internal::MemoryChunk* const&>&&, std::__1::tuple<>&&)",93957337402976,93957337403889],["v8::internal::(anonymous namespace)::YoungGenerationEvacuator::~YoungGenerationEvacuator()",93957337404272,93957337404357],["v8::internal::(anonymous namespace)::YoungGenerationEvacuator::GetTracingScope()",93957337404384,93957337404395],["v8::internal::YoungGenerationRecordMigratedSlotVisitor::MarkArrayBufferExtensionPromoted(v8::internal::HeapObject)",93957337404912,93957337404970],["void v8::internal::LiveObjectVisitor::VisitGreyObjectsNoFail<v8::internal::EvacuateNewSpaceVisitor, v8::internal::MinorNonAtomicMarkingState>(v8::internal::MemoryChunk*, v8::internal::MinorNonAtomicMarkingState*, v8::internal::EvacuateNewSpaceVisitor*, v8::internal::LiveObjectVisitor::IterationMode)",93957337405392,93957337406426],["void v8::internal::LiveObjectVisitor::VisitGreyObjectsNoFail<v8::internal::EvacuateNewSpacePageVisitor<(v8::internal::PageEvacuationMode)0>, v8::internal::MinorNonAtomicMarkingState>(v8::internal::MemoryChunk*, v8::internal::MinorNonAtomicMarkingState*, v8::internal::EvacuateNewSpacePageVisitor<(v8::internal::PageEvacuationMode)0>*, v8::internal::LiveObjectVisitor::IterationMode)",93957337407712,93957337408746],["v8::internal::MarkingBarrier::MarkingBarrier(v8::internal::LocalHeap*)",93957337408848,93957337408943],["heap::base::Worklist<v8::internal::HeapObject, (unsigned short)16>::Local::~Local()",93957337409072,93957337409215],["v8::internal::MarkingBarrier::Write(v8::internal::Code, v8::internal::RelocInfo*, v8::internal::HeapObject)",93957337409504,93957337409607],["v8::internal::RegExpBytecodeGenerator::CheckGreedyLoop(v8::internal::Label*)",93957339757264,93957339757463],["v8::internal::RegExpBytecodePeepholeOptimization::OptimizeBytecode(v8::internal::Isolate*, v8::internal::Zone*, v8::internal::Handle<v8::internal::String>, unsigned char const*, int, v8::internal::ZoneUnorderedMap<int, int, v8::base::hash<int>, std::__1::equal_to<int> > const&)",93957339764960,93957339776754],["v8::internal::CompareRanges(v8::internal::ZoneList<v8::internal::CharacterRange>*, int const*, int)",93957339784064,93957339784163],["v8::internal::CompareFirstChar(v8::internal::RegExpTree* const*, v8::internal::RegExpTree* const*)",93957339791792,93957339791866],["v8::internal::RegExpDisjunction::ToNode(v8::internal::RegExpCompiler*, v8::internal::RegExpNode*)",93957339797024,93957339797462],["v8::internal::(anonymous namespace)::BoundaryAssertionAsLookaround(v8::internal::RegExpCompiler*, v8::internal::RegExpNode*, v8::internal::RegExpAssertion::AssertionType, v8::base::Flags<v8::internal::JSRegExp::Flag, int>)",93957339801584,93957339802804],["v8::internal::RegExpLookaround::Builder::Builder(bool, v8::internal::RegExpNode*, int, int, int, int)",93957339804144,93957339804340],["v8::internal::RegExpCapture::ToNode(v8::internal::RegExpTree*, int, v8::internal::RegExpCompiler*, v8::internal::RegExpNode*)",93957339805024,93957339805115],["v8::internal::CharacterRange::AddCaseEquivalents(v8::internal::Isolate*, v8::internal::Zone*, v8::internal::ZoneList<v8::internal::CharacterRange>*, bool)",93957339809632,93957339810400],["v8::internal::CharacterRange::List(v8::internal::Zone*, v8::internal::CharacterRange)",93957339811648,93957339811930],["v8::internal::(anonymous namespace)::MatchAndNegativeLookaroundInReadDirection(v8::internal::RegExpCompiler*, v8::internal::ZoneList<v8::internal::CharacterRange>*, v8::internal::ZoneList<v8::internal::CharacterRange>*, v8::internal::RegExpNode*, bool, v8::base::Flags<v8::internal::JSRegExp::Flag, int>)",93957339812352,93957339812775],["v8::internal::TextNode::TextNode(v8::internal::RegExpCharacterClass*, bool, v8::internal::RegExpNode*)",93957339813648,93957339814029],["void std::__1::__stable_sort_move<v8::internal::ZoneList<v8::internal::RegExpTree*>::StableSort<int (*)(v8::internal::RegExpTree* const*, v8::internal::RegExpTree* const*)>(int (*)(v8::internal::RegExpTree* const*, v8::internal::RegExpTree* const*), unsigned long, unsigned long)::{lambda(v8::internal::RegExpTree* const&, v8::internal::RegExpTree* const&)#1}&, v8::internal::RegExpTree**>(v8::internal::RegExpTree**, v8::internal::RegExpTree**, v8::internal::ZoneList<v8::internal::RegExpTree*>::StableSort<int (*)(v8::internal::RegExpTree* const*, v8::internal::RegExpTree* const*)>(int (*)(v8::internal::RegExpTree* const*, v8::internal::RegExpTree* const*), unsigned long, unsigned long)::{lambda(v8::internal::RegExpTree* const&, v8::internal::RegExpTree* const&)#1}&, std::__1::iterator_traits<v8::internal::RegExpTree**>::difference_type, std::__1::iterator_traits::value_type*)",93957339815232,93957339816390],["void std::__1::__buffered_inplace_merge<v8::internal::ZoneList<v8::internal::RegExpTree*>::StableSort<int (*)(v8::internal::RegExpTree* const*, v8::internal::RegExpTree* const*)>(int (*)(v8::internal::RegExpTree* const*, v8::internal::RegExpTree* const*), unsigned long, unsigned long)::{lambda(v8::internal::RegExpTree* const&, v8::internal::RegExpTree* const&)#1}&, v8::internal::RegExpTree**>(v8::internal::RegExpTree**, v8::internal::RegExpTree**, v8::internal::RegExpTree**, v8::internal::ZoneList<v8::internal::RegExpTree*>::StableSort<int (*)(v8::internal::RegExpTree* const*, v8::internal::RegExpTree* const*)>(int (*)(v8::internal::RegExpTree* const*, v8::internal::RegExpTree* const*), unsigned long, unsigned long)::{lambda(v8::internal::RegExpTree* const&, v8::internal::RegExpTree* const&)#1}&, std::__1::iterator_traits<v8::internal::RegExpTree**>::difference_type, std::__1::iterator_traits<v8::internal::RegExpTree**>, std::__1::iterator_traits::value_type*)",93957339818368,93957339819618],["v8::internal::RegExpAtom::AppendToText(v8::internal::RegExpText*, v8::internal::Zone*)",93957339820320,93957339820347],["v8::internal::TextElement::Atom(v8::internal::RegExpAtom*)",93957339820640,93957339820654],["v8_inspector::V8DebuggerAgentImpl::setBlackboxPatterns(std::__1::unique_ptr<std::__1::vector<v8_inspector::String16, std::__1::allocator<v8_inspector::String16> >, std::__1::default_delete<std::__1::vector<v8_inspector::String16, std::__1::allocator<v8_inspector::String16> > > >)",93957342512592,93957342513432],["std::__1::pair<v8_inspector::String16 const, std::__1::vector<std::__1::pair<int, int>, std::__1::allocator<std::__1::pair<int, int> > > >::pair(std::__1::pair<v8_inspector::String16 const, std::__1::vector<std::__1::pair<int, int>, std::__1::allocator<std::__1::pair<int, int> > > > const&)",93957342520016,93957342520722],["v8_inspector::V8DebuggerId::V8DebuggerId(std::__1::pair<long, long>)",93957342522896,93957342522909],["v8_inspector::V8DebuggerId::isValid() const",93957342523520,93957342523544],["v8_inspector::V8DebuggerScript::~V8DebuggerScript()",93957342524656,93957342524745],["v8_inspector::V8DebuggerScript::removeWasmBreakpoint(int)",93957342524816,93957342524893],["v8_inspector::(anonymous namespace)::ActualScript::Initialize(v8::Local<v8::debug::Script>)",93957342525680,93957342526144],["v8_inspector::(anonymous namespace)::ActualScript::~ActualScript()",93957342526352,93957342526549],["v8_inspector::V8RuntimeAgentImpl::~V8RuntimeAgentImpl()",93957342621792,93957342621955],["v8_inspector::V8RuntimeAgentImpl::addBinding(v8_inspector::InspectedContext*, v8_inspector::String16 const&)",93957342637776,93957342638017],["v8_inspector::(anonymous namespace)::EvaluateCallbackWrapper<v8_inspector::protocol::Runtime::Backend::EvaluateCallback>::sendSuccess(std::__1::unique_ptr<v8_inspector::protocol::Runtime::RemoteObject, std::__1::default_delete<v8_inspector::protocol::Runtime::RemoteObject> >, v8_crdtp::detail::PtrMaybe<v8_inspector::protocol::Runtime::ExceptionDetails>)",93957342643584,93957342643648],["void std::__1::__function::__policy_invoker<void (v8_inspector::InspectedContext*)>::__call_impl<std::__1::__function::__default_alloc_func<v8_inspector::V8RuntimeAgentImpl::restore()::$_2, void (v8_inspector::InspectedContext*)> >(std::__1::__function::__policy_storage const*, v8_inspector::InspectedContext*)",93957342646368,93957342646381],["v8_inspector::V8StackTraceId::V8StackTraceId(unsigned long, std::__1::pair<long, long>)",93957342647056,93957342647077],["v8_inspector::StackFrame::buildInspectorObject(v8_inspector::V8InspectorClient*) const",93957342647344,93957342648055],["v8_inspector::(anonymous namespace)::calculateAsyncChain(v8_inspector::V8Debugger*, int, std::__1::shared_ptr<v8_inspector::AsyncStackTrace>*, v8_inspector::V8StackTraceId*, int*)",93957342649216,93957342649673],["v8_inspector::V8StackTraceImpl::clone()",93957342650432,93957342650693],["v8_inspector::V8StackTraceImpl::isEmpty() const",93957342651408,93957342651425],["v8_inspector::V8StackTraceImpl::topLineNumber() const",93957342651488,93957342651507],["v8_inspector::V8StackTraceImpl::topScriptId() const",93957342651552,93957342651587],["v8_inspector::V8StackTraceImpl::topFunctionName() const",93957342651616,93957342651647],["v8_inspector::V8StackTraceImpl::buildInspectorObjectImpl(v8_inspector::V8Debugger*, int) const",93957342651856,93957342652051],["v8_inspector::V8StackTraceImpl::buildInspectorObject() const",93957342653568,93957342653592],["v8_inspector::V8StackTraceImpl::toString() const",93957342653808,93957342655106],["v8_inspector::AsyncStackTrace::parent() const",93957342655456,93957342655481],["v8::internal::compiler::AccessBuilder::ForJSArrayIteratorNextIndex()",93957342830368,93957342830449],["v8::internal::compiler::AccessBuilder::ForFeedbackVectorFlags()",93957342832368,93957342832449],["v8::internal::compiler::PropertyAccessInfo::Merge(v8::internal::compiler::PropertyAccessInfo const*, v8::internal::compiler::AccessMode, v8::internal::Zone*)",93957342835216,93957342835548],["v8::internal::compiler::AccessInfoFactory::ComputeDataFieldAccessInfo(v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Map>, v8::internal::MaybeHandle<v8::internal::JSObject>, v8::internal::InternalIndex, v8::internal::compiler::AccessMode) const",93957342842784,93957342846747],["v8::internal::compiler::AccessInfoFactory::LookupSpecialFieldAccessor(v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Name>) const",93957342851760,93957342852278],["v8::internal::compiler::PropertyAccessInfo::PropertyAccessInfo(v8::internal::compiler::PropertyAccessInfo const&)",93957342856912,93957342857919],["v8::internal::compiler::ElementAccessInfo::ElementAccessInfo(v8::internal::compiler::ElementAccessInfo const&)",93957342859600,93957342860545],["v8::internal::compiler::NodeAuxData<bool, &(bool v8::internal::compiler::DefaultConstruct<bool>())>::NodeAuxData(unsigned long, v8::internal::Zone*)",93957342861904,93957342862123],["v8::internal::compiler::AddTypeAssertionsReducer::reducer_name() const",93957342862768,93957342862781],["std::__1::vector<bool, v8::internal::ZoneAllocator<bool> >::reserve(unsigned long)",93957342863216,93957342863532],["v8::internal::compiler::AllNodes::Mark(v8::internal::Zone*, v8::internal::compiler::Node*, v8::internal::compiler::Graph const*)",93957342863808,93957342866136],["v8::internal::compiler::CodeGenerator::CodeGenerator(v8::internal::Zone*, v8::internal::compiler::Frame*, v8::internal::compiler::Linkage*, v8::internal::compiler::InstructionSequence*, v8::internal::OptimizedCompilationInfo*, v8::internal::Isolate*, v8::base::Optional<v8::internal::compiler::OsrHelper>, int, v8::internal::JumpOptimizationInfo*, v8::internal::PoisoningMitigationLevel, v8::internal::AssemblerOptions const&, int, unsigned long, unsigned long, std::__1::unique_ptr<v8::internal::AssemblerBuffer, std::__1::default_delete<v8::internal::AssemblerBuffer> >, char const*)",93957342866416,93957342867506],["v8::internal::compiler::CodeGenerator::AddProtectedInstructionLanding(unsigned int, unsigned int)",93957342867552,93957342868278],["v8::internal::compiler::CodeGenerator::GetStackCheckOffset()",93957342868368,93957342868427],["v8::internal::compiler::CodeGenerator::AssembleDeoptimizerCall(v8::internal::compiler::DeoptimizationExit*)",93957342868976,93957342869325],["v8::internal::compiler::CodeGenerator::AssembleSourcePosition(v8::internal::SourcePosition)",93957342872544,93957342873276],["v8::internal::compiler::MachineOperatorBuilder::Float64InsertLowWord32()",93957344481248,93957344481263],["v8::internal::compiler::MachineOperatorBuilder::F32x4Max()",93957344482016,93957344482031],["v8::internal::compiler::MachineOperatorBuilder::I64x2ShrS()",93957344482400,93957344482415],["v8::internal::compiler::MachineOperatorBuilder::I32x4SConvertI16x8High()",93957344482656,93957344482671],["v8::internal::compiler::MachineOperatorBuilder::I32x4GeS()",93957344482848,93957344482863],["v8::internal::compiler::MachineOperatorBuilder::I32x4GeU()",93957344482976,93957344482991],["v8::internal::compiler::MachineOperatorBuilder::I32x4ExtAddPairwiseI16x8S()",93957344483104,93957344483119],["v8::internal::compiler::MachineOperatorBuilder::I16x8Shl()",93957344483232,93957344483247],["v8::internal::compiler::MachineOperatorBuilder::I16x8SubSatS()",93957344483328,93957344483343],["v8::internal::compiler::MachineOperatorBuilder::I16x8Eq()",93957344483392,93957344483407],["v8::internal::compiler::MachineOperatorBuilder::I16x8UConvertI8x16Low()",93957344483456,93957344483471],["v8::internal::compiler::MachineOperatorBuilder::I16x8AddSatU()",93957344483520,93957344483535],["v8::internal::compiler::MachineOperatorBuilder::I16x8GtU()",93957344483584,93957344483599],["v8::internal::compiler::MachineOperatorBuilder::I16x8Abs()",93957344483648,93957344483663],["v8::internal::compiler::MachineOperatorBuilder::I16x8ExtMulLowI8x16U()",93957344483712,93957344483727],["v8::internal::compiler::MachineOperatorBuilder::I8x16Splat()",93957344483776,93957344483791],["v8::internal::compiler::MachineOperatorBuilder::I8x16ShrS()",93957344483824,93957344483839],["v8::internal::compiler::MachineOperatorBuilder::I8x16Add()",93957344483856,93957344483871],["v8::internal::compiler::MachineOperatorBuilder::I8x16Sub()",93957344483888,93957344483903],["v8::internal::compiler::MachineOperatorBuilder::I8x16MinS()",93957344483920,93957344483935],["v8::internal::compiler::MachineOperatorBuilder::I8x16Eq()",93957344483952,93957344483967],["v8::internal::compiler::MachineOperatorBuilder::I8x16GtS()",93957344483984,93957344483999],["v8::internal::compiler::MachineOperatorBuilder::I8x16ShrU()",93957344484016,93957344484031],["v8::internal::compiler::MachineOperatorBuilder::I8x16AddSatU()",93957344484048,93957344484063],["v8::internal::compiler::MachineOperatorBuilder::I8x16MinU()",93957344484080,93957344484095],["v8::internal::compiler::MachineOperatorBuilder::I8x16GtU()",93957344484112,93957344484127],["v8::internal::compiler::MachineOperatorBuilder::I8x16RoundingAverageU()",93957344484144,93957344484159],["v8::internal::compiler::MachineOperatorBuilder::I8x16Abs()",93957344484176,93957344484191],["v8::internal::compiler::MachineOperatorBuilder::S128Zero()",93957344484208,93957344484223],["v8::internal::compiler::MachineOperatorBuilder::S128Or()",93957344484240,93957344484255],["v8::internal::compiler::MachineOperatorBuilder::S128Not()",93957344484272,93957344484287],["v8::internal::compiler::MachineOperatorBuilder::S128AndNot()",93957344484304,93957344484319],["catgets",139871563497216,139871563497346],["__isnan",139871563500496,139871563500524],["ldexp",139871563501264,139871563501390],["copysignf",139871563501504,139871563501522],["__signbitf",139871563502048,139871563502056],["__sigsetjmp",139871563503776,139871563503863],["_setjmp",139871563503936,139871563503943],["__libc_longjmp",139871563504032,139871563504099],["xdr_uint8_t",139871564505968,139871564506098],["svc_exit",139871564508176,139871564508213],["getlogin_r",139871564525872,139871564525922],["__getlogin_r_chk",139871564525968,139871564525984],["nextupf128",139871565634752,139871565635020],["ufromfpxf128",139871565638512,139871565639205],["cacosf128",139871565639344,139871565640008],["casinf128",139871565643248,139871565643623],["csinhf128",139871565650640,139871565652619],["catanf128",139871565654752,139871565657455],["ctanhf128",139871565659024,139871565660684],["clogf128",139871565662464,139871565664303],["v8::D8Console::Assert(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&)",93957335206112,93957335206231],["v8::D8Console::Error(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&)",93957335206688,93957335206722],["v8::Shell::NotifyStartStreamingTask(v8::Isolate*)",93957335295344,93957335295708],["v8::Shell::Main(int, char**)",93957335297680,93957335302142],["main",93957335302320,93957335302330],["v8::Worker::WorkerThread::~WorkerThread()",93957335302416,93957335302500],["v8::internal::MarkingVisitorBase<v8::internal::ConcurrentMarkingVisitor, v8::internal::ConcurrentMarkingState>::VisitPointers(v8::internal::HeapObject, v8::internal::CompressedObjectSlot, v8::internal::CompressedObjectSlot)",93957336808112,93957336808215],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::MemoryChunk*, v8::internal::MemoryChunkData>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::MemoryChunk*, v8::internal::MemoryChunkData>, std::__1::__unordered_map_hasher<v8::internal::MemoryChunk*, std::__1::__hash_value_type<v8::internal::MemoryChunk*, v8::internal::MemoryChunkData>, v8::internal::BasicMemoryChunk::Hasher, std::__1::equal_to<v8::internal::MemoryChunk*>, true>, std::__1::__unordered_map_equal<v8::internal::MemoryChunk*, std::__1::__hash_value_type<v8::internal::MemoryChunk*, v8::internal::MemoryChunkData>, std::__1::equal_to<v8::internal::MemoryChunk*>, v8::internal::BasicMemoryChunk::Hasher, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::MemoryChunk*, v8::internal::MemoryChunkData> > >::__emplace_unique_key_args<v8::internal::MemoryChunk*, std::__1::piecewise_construct_t const&, std::__1::tuple<v8::internal::MemoryChunk* const&>, std::__1::tuple<> >(v8::internal::MemoryChunk* const&, std::__1::piecewise_construct_t const&, std::__1::tuple<v8::internal::MemoryChunk* const&>&&, std::__1::tuple<>&&)",93957336810752,93957336811670],["int v8::internal::ConcurrentMarkingVisitor::VisitJSObjectSubclass<v8::internal::JSTypedArray, v8::internal::JSTypedArray::BodyDescriptor>(v8::internal::Map, v8::internal::JSTypedArray)",93957336814320,93957336814646],["v8::internal::ConcurrentMarkingVisitor::VisitPointersInSnapshot(v8::internal::HeapObject, v8::internal::SlotSnapshot const&)",93957336815472,93957336815854],["v8::internal::ConcurrentMarking::JobTask::GetMaxConcurrency(unsigned long) const",93957336816624,93957336816742],["cppgc::internal::StatsCollector::InternalScope<(cppgc::internal::StatsCollector::TraceCategory)0, (cppgc::internal::StatsCollector::ScopeContext)0>::InternalScope<>(cppgc::internal::StatsCollector*, cppgc::internal::StatsCollector::ScopeId)",93957336816880,93957336817147],["cppgc::internal::StatsCollector::InternalScope<(cppgc::internal::StatsCollector::TraceCategory)0, (cppgc::internal::StatsCollector::ScopeContext)0>::StopTraceImpl()",93957336817824,93957336818126],["v8::internal::StateStorage::GetOrCreateState(cppgc::internal::HeapObjectHeader const&)",93957336818512,93957336818842],["v8::internal::Factory::NewFeedbackVector(v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::ClosureFeedbackCellArray>)",93957336853264,93957336853822],["v8::internal::Factory::NewNameDictionary(int)",93957336854096,93957336854110],["v8::internal::Factory::LookupSingleCharacterStringFromCode(unsigned short)",93957336854608,93957336854964],["v8::internal::Factory::NewStringFromTwoByte(v8::internal::Vector<unsigned short const> const&, v8::internal::AllocationType)",93957336856672,93957336856693],["v8::internal::Factory::NewProperSubString(v8::internal::Handle<v8::internal::String>, int, int)",93957336857280,93957336858435],["v8::internal::Factory::NewSymbol(v8::internal::AllocationType)",93957336859264,93957336859408],["v8::internal::Factory::NewContextInternal(v8::internal::Handle<v8::internal::Map>, int, int, v8::internal::AllocationType)",93957336859824,93957336860131],["v8::internal::Factory::NewMap(v8::internal::InstanceType, int, v8::internal::ElementsKind, int)",93957336861248,93957336861429],["v8::internal::Factory::NewScriptContextTable()",93957336862016,93957336862051],["v8::internal::Factory::NewFunctionContext(v8::internal::Handle<v8::internal::Context>, v8::internal::Handle<v8::internal::ScopeInfo>)",93957336862752,93957336863314],["v8::internal::Factory::NewDebugEvaluateContext(v8::internal::Handle<v8::internal::Context>, v8::internal::Handle<v8::internal::ScopeInfo>, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::Context>, v8::internal::Handle<v8::internal::StringSet>)",93957336863888,93957336864687],["v8::internal::Factory::NewBlockContext(v8::internal::Handle<v8::internal::Context>, v8::internal::Handle<v8::internal::ScopeInfo>)",93957336865248,93957336865708],["v8::internal::Factory::NewAliasedArgumentsEntry(int)",93957336866176,93957336866290],["v8::internal::Factory::AddToScriptList(v8::internal::Handle<v8::internal::Script>)",93957336866464,93957336866525],["v8::internal::Heap::SetUp()",93957337025584,93957337026304],["v8::internal::Heap::ExternalStringTable::TearDown()",93957337031280,93957337031800],["v8::internal::Heap::ClearRecordedSlot(v8::internal::HeapObject, v8::internal::CompressedObjectSlot)",93957337034112,93957337034242],["v8::internal::HeapObjectIterator::~HeapObjectIterator()",93957337034896,93957337035001],["v8::internal::Heap::ExternalStringTable::CleanUpAll()",93957337035296,93957337035489],["v8::internal::Heap::RegisterStrongRoots(v8::internal::FullObjectSlot, v8::internal::FullObjectSlot)",93957337035536,93957337035655],["v8::internal::Heap::UnregisterStrongRoots(v8::internal::StrongRootsEntry*)",93957337035680,93957337035791],["v8::internal::Heap::SetDetachedContexts(v8::internal::WeakArrayList)",93957337035808,93957337035821],["void v8::internal::WasmTypeInfo::BodyDescriptor::IterateBody<v8::internal::ObjectVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::ObjectVisitor*)",93957337346576,93957337346641],["v8::internal::SlotCallbackResult v8::internal::UpdateTypedSlotHelper::UpdateCodeTarget<v8::internal::RememberedSetUpdatingItem<v8::internal::MajorNonAtomicMarkingState, (v8::internal::GarbageCollector)1>::UpdateTypedPointers()::{lambda(v8::internal::SlotType, unsigned long)#2}::operator()(v8::internal::SlotType, unsigned long) const::{lambda(v8::internal::FullMaybeObjectSlot)#1}>(v8::internal::RelocInfo*, v8::internal::RememberedSetUpdatingItem<v8::internal::MajorNonAtomicMarkingState, (v8::internal::GarbageCollector)1>::UpdateTypedPointers()::{lambda(v8::internal::SlotType, unsigned long)#2}::operator()(v8::internal::SlotType, unsigned long) const::{lambda(v8::internal::FullMaybeObjectSlot)#1})",93957337354560,93957337354732],["v8::internal::RememberedSetUpdatingItem<v8::internal::MinorNonAtomicMarkingState, (v8::internal::GarbageCollector)2>::UpdateUntypedPointers()",93957337360368,93957337360812],["void v8::internal::DataHandler::BodyDescriptor::IterateBody<v8::internal::YoungGenerationMarkingVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::YoungGenerationMarkingVisitor*)",93957337364768,93957337365146],["void v8::internal::JSDataView::BodyDescriptor::IterateBody<v8::internal::YoungGenerationMarkingVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::YoungGenerationMarkingVisitor*)",93957337367184,93957337367564],["void v8::internal::NativeContext::BodyDescriptor::IterateBody<v8::internal::YoungGenerationMarkingVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::YoungGenerationMarkingVisitor*)",93957337369264,93957337369644],["void v8::internal::SmallOrderedHashTable<v8::internal::SmallOrderedNameDictionary>::BodyDescriptor::IterateBody<v8::internal::YoungGenerationMarkingVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::YoungGenerationMarkingVisitor*)",93957337371376,93957337371736],["void v8::internal::WasmInstanceObject::BodyDescriptor::IterateBody<v8::internal::YoungGenerationMarkingVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::YoungGenerationMarkingVisitor*)",93957337373488,93957337373799],["void v8::internal::UncompiledDataWithPreparseData::BodyDescriptor::IterateBody<v8::internal::YoungGenerationMarkingVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::YoungGenerationMarkingVisitor*)",93957337374864,93957337375447],["void std::__1::vector<v8::internal::PageMarkingItem, std::__1::allocator<v8::internal::PageMarkingItem> >::__emplace_back_slow_path<v8::internal::MemoryChunk*&>(v8::internal::MemoryChunk*&)",93957337376080,93957337376351],["v8::internal::YoungGenerationMarkingJob::~YoungGenerationMarkingJob()",93957337376432,93957337376515],["v8::internal::YoungGenerationMarkingJob::GetMaxConcurrency(unsigned long) const",93957337377280,93957337377328],["v8::internal::YoungGenerationMarkingTask::EmptyMarkingWorklist()",93957337377984,93957337389343],["v8::internal::PageMarkingItem::MarkUntypedPointers(v8::internal::YoungGenerationMarkingTask*)",93957337389904,93957337390240],["v8::internal::YoungGenerationMarkingTask::MarkObject(v8::internal::Object)",93957337391200,93957337402975],["v8::internal::SlotCallbackResult v8::internal::UpdateTypedSlotHelper::UpdateTypedSlot<v8::internal::PageMarkingItem::MarkTypedPointers(v8::internal::YoungGenerationMarkingTask*)::{lambda(v8::internal::SlotType, unsigned long)#1}::operator()(v8::internal::SlotType, unsigned long) const::{lambda(v8::internal::FullMaybeObjectSlot)#1}>(v8::internal::Heap*, v8::internal::SlotType, unsigned long, v8::internal::PageMarkingItem::MarkTypedPointers(v8::internal::YoungGenerationMarkingTask*)::{lambda(v8::internal::SlotType, unsigned long)#1}::operator()(v8::internal::SlotType, unsigned long) const::{lambda(v8::internal::FullMaybeObjectSlot)#1})",93957337403904,93957337404181],["v8::internal::RegExpBytecodeGenerator::WriteCurrentPositionToRegister(int, int)",93957339755472,93957339755584],["v8::internal::RegExpBytecodeGenerator::CheckCharacterAfterAnd(unsigned int, unsigned int, v8::internal::Label*)",93957339759376,93957339759700],["v8::internal::RegExpBytecodeGenerator::Expand()",93957339762720,93957339762869],["v8::internal::(anonymous namespace)::BytecodeSequenceNode::MapArgument(int, int, int, int)",93957339778112,93957339778507],["v8::internal::RegExpText::ToNode(v8::internal::RegExpCompiler*, v8::internal::RegExpNode*)",93957339782544,93957339782676],["v8::internal::CompareInverseRanges(v8::internal::ZoneList<v8::internal::CharacterRange>*, int const*, int)",93957339784336,93957339784430],["v8::internal::CharacterRange::Negate(v8::internal::ZoneList<v8::internal::CharacterRange>*, v8::internal::ZoneList<v8::internal::CharacterRange>*, v8::internal::Zone*)",93957339790976,93957339791522],["v8::internal::RegExpDisjunction::SortConsecutiveAtoms(v8::internal::RegExpCompiler*)",93957339792144,93957339792554],["v8::internal::RegExpDisjunction::FixSingleCharacterDisjunctions(v8::internal::RegExpCompiler*)",93957339795744,93957339797023],["v8::internal::RegExpQuantifier::ToNode(v8::internal::RegExpCompiler*, v8::internal::RegExpNode*)",93957339797472,93957339797525],["v8::internal::RegExpAssertion::ToNode(v8::internal::RegExpCompiler*, v8::internal::RegExpNode*)",93957339799920,93957339801578],["v8::internal::CharacterRange::AddClassEscape(char, v8::internal::ZoneList<v8::internal::CharacterRange>*, bool, v8::internal::Zone*)",93957339802816,93957339803961],["v8::internal::RegExpEmpty::ToNode(v8::internal::RegExpCompiler*, v8::internal::RegExpNode*)",93957339804128,93957339804137],["v8::internal::RegExpLookaround::Builder::ForMatch(v8::internal::RegExpNode*)",93957339804352,93957339804490],["v8::internal::RegExpCapture::ToNode(v8::internal::RegExpCompiler*, v8::internal::RegExpNode*)",93957339804928,93957339805020],["v8::internal::RegExpAlternative::ToNode(v8::internal::RegExpCompiler*, v8::internal::RegExpNode*)",93957339805120,93957339805428],["v8_inspector::V8DebuggerAgentImpl::stepInto(v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::PtrMaybe<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Debugger::LocationRange, std::__1::default_delete<v8_inspector::protocol::Debugger::LocationRange> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Debugger::LocationRange, std::__1::default_delete<v8_inspector::protocol::Debugger::LocationRange> > > > >)",93957342507280,93957342507879],["v8_inspector::V8DebuggerAgentImpl::setScriptInstrumentationBreakpointIfNeeded(v8_inspector::V8DebuggerScript*)",93957342515008,93957342516716],["v8_inspector::V8DebuggerAgentImpl::ScriptCollected(v8_inspector::V8DebuggerScript const*)",93957342518768,93957342519265],["v8_inspector::protocol::Runtime::RemoteObject::setSubtype(v8_inspector::String16 const&)",93957342521024,93957342521680],["std::__1::__hash_table<std::__1::__hash_value_type<v8_inspector::String16, std::__1::vector<std::__1::pair<int, int>, std::__1::allocator<std::__1::pair<int, int> > > >, std::__1::__unordered_map_hasher<v8_inspector::String16, std::__1::__hash_value_type<v8_inspector::String16, std::__1::vector<std::__1::pair<int, int>, std::__1::allocator<std::__1::pair<int, int> > > >, std::__1::hash<v8_inspector::String16>, std::__1::equal_to<v8_inspector::String16>, true>, std::__1::__unordered_map_equal<v8_inspector::String16, std::__1::__hash_value_type<v8_inspector::String16, std::__1::vector<std::__1::pair<int, int>, std::__1::allocator<std::__1::pair<int, int> > > >, std::__1::equal_to<v8_inspector::String16>, std::__1::hash<v8_inspector::String16>, true>, std::__1::allocator<std::__1::__hash_value_type<v8_inspector::String16, std::__1::vector<std::__1::pair<int, int>, std::__1::allocator<std::__1::pair<int, int> > > > > >::__move_assign(std::__1::__hash_table<std::__1::__hash_value_type<v8_inspector::String16, std::__1::vector<std::__1::pair<int, int>, std::__1::allocator<std::__1::pair<int, int> > > >, std::__1::__unordered_map_hasher<v8_inspector::String16, std::__1::__hash_value_type<v8_inspector::String16, std::__1::vector<std::__1::pair<int, int>, std::__1::allocator<std::__1::pair<int, int> > > >, std::__1::hash<v8_inspector::String16>, std::__1::equal_to<v8_inspector::String16>, true>, std::__1::__unordered_map_equal<v8_inspector::String16, std::__1::__hash_value_type<v8_inspector::String16, std::__1::vector<std::__1::pair<int, int>, std::__1::allocator<std::__1::pair<int, int> > > >, std::__1::equal_to<v8_inspector::String16>, std::__1::hash<v8_inspector::String16>, true>, std::__1::allocator<std::__1::__hash_value_type<v8_inspector::String16, std::__1::vector<std::__1::pair<int, int>, std::__1::allocator<std::__1::pair<int, int> > > > > >&, std::__1::integral_constant<bool, true>)",93957342522496,93957342522894],["v8_inspector::V8DebuggerId::generate(v8_inspector::V8InspectorImpl*)",93957342522912,93957342522949],["v8_inspector::V8DebuggerId::toString() const",93957342523216,93957342523513],["v8_inspector::V8DebuggerId::pair() const",93957342523552,93957342523565],["v8_inspector::V8ProfilerAgentImpl::startTypeProfile()",93957342610736,93957342610849],["v8_crdtp::detail::PtrMaybe<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::PrivatePropertyDescriptor, std::__1::default_delete<v8_inspector::protocol::Runtime::PrivatePropertyDescriptor> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::PrivatePropertyDescriptor, std::__1::default_delete<v8_inspector::protocol::Runtime::PrivatePropertyDescriptor> > > > >::operator=(std::__1::unique_ptr<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::PrivatePropertyDescriptor, std::__1::default_delete<v8_inspector::protocol::Runtime::PrivatePropertyDescriptor> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::PrivatePropertyDescriptor, std::__1::default_delete<v8_inspector::protocol::Runtime::PrivatePropertyDescriptor> > > >, std::__1::default_delete<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::PrivatePropertyDescriptor, std::__1::default_delete<v8_inspector::protocol::Runtime::PrivatePropertyDescriptor> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::PrivatePropertyDescriptor, std::__1::default_delete<v8_inspector::protocol::Runtime::PrivatePropertyDescriptor> > > > > >)",93957342629696,93957342629819],["v8_inspector::V8RuntimeAgentImpl::getIsolateId(v8_inspector::String16*)",93957342636048,93957342636205],["v8_inspector::V8RuntimeAgentImpl::restore()",93957342639904,93957342640213],["v8_inspector::V8RuntimeAgentImpl::inspect(std::__1::unique_ptr<v8_inspector::protocol::Runtime::RemoteObject, std::__1::default_delete<v8_inspector::protocol::Runtime::RemoteObject> >, std::__1::unique_ptr<v8_inspector::protocol::DictionaryValue, std::__1::default_delete<v8_inspector::protocol::DictionaryValue> >)",93957342643424,93957342643498],["v8_inspector::(anonymous namespace)::EvaluateCallbackWrapper<v8_inspector::protocol::Runtime::Backend::EvaluateCallback>::~EvaluateCallbackWrapper()",93957342643680,93957342643723],["void std::__1::__function::__policy_invoker<void (v8_inspector::V8InspectorSessionImpl*)>::__call_impl<std::__1::__function::__default_alloc_func<v8_inspector::V8RuntimeAgentImpl::bindingCallback(v8::FunctionCallbackInfo<v8::Value> const&)::$_1, void (v8_inspector::V8InspectorSessionImpl*)> >(std::__1::__function::__policy_storage const*, v8_inspector::V8InspectorSessionImpl*)",93957342645088,93957342645388],["void std::__1::__function::__policy_invoker<void (v8_inspector::InspectedContext*)>::__call_impl<std::__1::__function::__default_alloc_func<v8_inspector::V8RuntimeAgentImpl::reset()::$_3, void (v8_inspector::InspectedContext*)> >(std::__1::__function::__policy_storage const*, v8_inspector::InspectedContext*)",93957342646656,93957342646679],["v8_inspector::V8StackTraceId::V8StackTraceId()",93957342646992,93957342647046],["v8_inspector::V8StackTraceId::V8StackTraceId(unsigned long, std::__1::pair<long, long>, bool)",93957342647088,93957342647109],["v8_inspector::StackFrame::StackFrame(v8::Isolate*, v8::Local<v8::StackFrame>)",93957342647136,93957342647331],["v8_inspector::V8StackTraceImpl::setCaptureStackTraceForUncaughtExceptions(v8::Isolate*, bool)",93957342648064,93957342648085],["v8_inspector::(anonymous namespace)::toFramesVector(v8_inspector::V8Debugger*, v8::Local<v8::StackTrace>, int)",93957342648624,93957342649212],["v8_inspector::V8StackTraceImpl::capture(v8_inspector::V8Debugger*, int, int)",93957342649680,93957342650112],["v8_inspector::V8StackTraceImpl::~V8StackTraceImpl()",93957342650272,93957342650421],["v8_inspector::V8StackTraceImpl::firstNonEmptySourceURL() const",93957342650704,93957342650928],["v8::internal::compiler::AccessBuilder::ForMapBitField3()",93957342829232,93957342829313],["v8::internal::compiler::AccessBuilder::ForFixedArrayElement(v8::internal::ElementsKind, v8::internal::LoadSensitivity)",93957342830992,93957342831161],["v8::internal::compiler::AccessBuilder::ForDictionaryNextEnumerationIndex()",93957342832048,93957342832125],["v8::internal::compiler::PropertyAccessInfo::NotFound(v8::internal::Zone*, v8::internal::Handle<v8::internal::Map>, v8::internal::MaybeHandle<v8::internal::JSObject>)",93957342832752,93957342833067],["v8::internal::compiler::PropertyAccessInfo::DictionaryProtoAccessorConstant(v8::internal::Zone*, v8::internal::Handle<v8::internal::Map>, v8::internal::MaybeHandle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Name>)",93957342834816,93957342835154],["v8::internal::compiler::PropertyAccessInfo::GetConstFieldInfo() const",93957342839088,93957342839133],["v8::internal::compiler::AccessInfoFactory::ComputeElementAccessInfos(v8::internal::compiler::ElementAccessFeedback const&, v8::internal::ZoneVector<v8::internal::compiler::ElementAccessInfo>*) const",93957342839648,93957342840796],["v8::internal::compiler::AccessInfoFactory::ComputeAccessorDescriptorAccessInfo(v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Map>, v8::internal::MaybeHandle<v8::internal::JSObject>, v8::internal::InternalIndex, v8::internal::compiler::AccessMode) const",93957342847440,93957342848809],["v8::internal::compiler::AccessInfoFactory::ComputePropertyAccessInfo(v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Name>, v8::internal::compiler::AccessMode) const",93957342849392,93957342851748],["v8::internal::compiler::AccessInfoFactory::LookupTransition(v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Name>, v8::internal::MaybeHandle<v8::internal::JSObject>) const",93957342852288,93957342855913],["v8::internal::compiler::PropertyAccessInfo::RecordDependencies(v8::internal::compiler::CompilationDependencies*)",93957342856832,93957342856901],["v8::internal::compiler::AccessInfoFactory::ComputePropertyAccessInfos(std::__1::vector<v8::internal::Handle<v8::internal::Map>, std::__1::allocator<v8::internal::Handle<v8::internal::Map> > > const&, v8::internal::Handle<v8::internal::Name>, v8::internal::compiler::AccessMode, v8::internal::ZoneVector<v8::internal::compiler::PropertyAccessInfo>*) const",93957342857920,93957342858298],["void std::__1::vector<v8::internal::compiler::ElementAccessInfo, v8::internal::ZoneAllocator<v8::internal::compiler::ElementAccessInfo> >::__push_back_slow_path<v8::internal::compiler::ElementAccessInfo const&>(v8::internal::compiler::ElementAccessInfo const&)",93957342859104,93957342859597],["void std::__1::vector<v8::internal::compiler::PropertyAccessInfo, v8::internal::ZoneAllocator<v8::internal::compiler::PropertyAccessInfo> >::__push_back_slow_path<v8::internal::compiler::PropertyAccessInfo>(v8::internal::compiler::PropertyAccessInfo&&)",93957342860560,93957342861271],["v8::internal::compiler::AddTypeAssertionsReducer::AddTypeAssertionsReducer(v8::internal::compiler::AdvancedReducer::Editor*, v8::internal::compiler::JSGraph*, v8::internal::Zone*)",93957342861856,93957342861897],["v8::internal::compiler::AddTypeAssertionsReducer::~AddTypeAssertionsReducer()",93957342862128,93957342862144],["v8::internal::compiler::MachineOperatorBuilder::Float64Atanh()",93957344480736,93957344480751],["v8::internal::compiler::MachineOperatorBuilder::F64x2Mul()",93957344481504,93957344481519],["v8::internal::compiler::MachineOperatorBuilder::F32x4Sqrt()",93957344481888,93957344481903],["v8::internal::compiler::MachineOperatorBuilder::F32x4Pmax()",93957344482144,93957344482159],["v8::internal::compiler::MachineOperatorBuilder::I64x2UConvertI32x4Low()",93957344482336,93957344482351],["v8::internal::compiler::MachineOperatorBuilder::I64x2Eq()",93957344482464,93957344482479],["v8::internal::compiler::MachineOperatorBuilder::I64x2ExtMulHighI32x4U()",93957344482592,93957344482607],["v8::internal::compiler::MachineOperatorBuilder::I32x4Add()",93957344482720,93957344482735],["v8::internal::compiler::MachineOperatorBuilder::I32x4Ne()",93957344482816,93957344482831],["v8::internal::compiler::MachineOperatorBuilder::I32x4UConvertI16x8Low()",93957344482880,93957344482895],["v8::internal::compiler::MachineOperatorBuilder::I32x4MaxU()",93957344482944,93957344482959],["v8::internal::compiler::MachineOperatorBuilder::I32x4BitMask()",93957344483008,93957344483023],["v8::internal::compiler::MachineOperatorBuilder::I32x4ExtMulLowI16x8U()",93957344483072,93957344483087],["v8::internal::compiler::MachineOperatorBuilder::I32x4TruncSatF64x2SZero()",93957344483136,93957344483151],["v8::internal::compiler::MachineOperatorBuilder::I16x8SConvertI8x16High()",93957344483200,93957344483215],["v8::internal::compiler::MachineOperatorBuilder::I16x8SConvertI32x4()",93957344483264,93957344483279],["v8::internal::compiler::MachineOperatorBuilder::I16x8Sub()",93957344483312,93957344483327],["v8::internal::compiler::MachineOperatorBuilder::I16x8Mul()",93957344483344,93957344483359],["v8::internal::compiler::MachineOperatorBuilder::I16x8MaxS()",93957344483376,93957344483391],["v8::internal::compiler::MachineOperatorBuilder::I16x8Ne()",93957344483408,93957344483423],["v8::internal::compiler::MachineOperatorBuilder::I16x8GeS()",93957344483440,93957344483455],["v8::internal::compiler::MachineOperatorBuilder::I16x8UConvertI8x16High()",93957344483472,93957344483487],["v8::internal::compiler::MachineOperatorBuilder::I16x8UConvertI32x4()",93957344483504,93957344483519],["v8::internal::compiler::MachineOperatorBuilder::I16x8SubSatU()",93957344483536,93957344483551],["v8::internal::compiler::MachineOperatorBuilder::I16x8MaxU()",93957344483568,93957344483583],["v8::internal::compiler::MachineOperatorBuilder::I16x8GeU()",93957344483600,93957344483615],["v8::internal::compiler::MachineOperatorBuilder::I16x8Q15MulRSatS()",93957344483632,93957344483647],["v8::internal::compiler::MachineOperatorBuilder::I16x8BitMask()",93957344483664,93957344483679],["v8::internal::compiler::MachineOperatorBuilder::I16x8ExtMulHighI8x16S()",93957344483696,93957344483711],["v8::internal::compiler::MachineOperatorBuilder::I16x8ExtMulHighI8x16U()",93957344483728,93957344483743],["v8::internal::compiler::MachineOperatorBuilder::I16x8ExtAddPairwiseI8x16U()",93957344483760,93957344483775],["v8::internal::compiler::MachineOperatorBuilder::I8x16Neg()",93957344483792,93957344483807],["__dcgettext",139871563477024,139871563477039],["__isnanl",139871563499680,139871563499738],["ldexpl",139871563500320,139871563500429],["copysign",139871563500560,139871563500581],["__signbit",139871563501248,139871563501258],["__isinff",139871563501392,139871563501427],["__finitef",139871563501472,139871563501496],["modff",139871563501536,139871563501675],["xdr_uint32_t",139871564505456,139871564505527],["xdr_reference",139871564506608,139871564506825],["xdrstdio_create",139871564508128,139871564508161],["svc_run",139871564508224,139871564508572],["__isinff128",139871565627072,139871565627133],["totalordermagf128",139871565635264,139871565635295],["ufromfpf128",139871565637104,139871565637770],["conjf128",139871565639248,139871565639279],["cabsf128",139871565639312,139871565639329],["cacoshf128",139871565640016,139871565641034],["ccoshf128",139871565641168,139871565643246],["csinf128",139871565643632,139871565645346],["std::__1::__split_buffer<int*, std::__1::allocator<int*> >::push_front(int*&&)",93957335205184,93957335206045],["v8::(anonymous namespace)::WriteToFile(char const*, _IO_FILE*, v8::Isolate*, v8::debug::ConsoleCallArguments const&)",93957335206240,93957335206650],["v8::ShellOptions::DisallowReassignment<char const*, false>::operator=(char const*)",93957335293824,93957335293873],["v8::(anonymous namespace)::ProcessMessages(v8::Isolate*, std::__1::function<v8::platform::MessageLoopBehavior ()> const&)",93957335296080,93957335296916],["v8::Deserializer::~Deserializer()",93957335297600,93957335297669],["v8::(anonymous namespace)::MultiMappedAllocator::~MultiMappedAllocator()",93957335302144,93957335302272],["v8::internal::ConcurrentMarking::Pause()",93957336806528,93957336806582],["v8::internal::ObjectVisitor::VisitCustomWeakPointer(v8::internal::HeapObject, v8::internal::CompressedObjectSlot)",93957336808624,93957336808642],["void v8::internal::MarkingVisitorBase<v8::internal::MainMarkingVisitor<v8::internal::MajorMarkingState>, v8::internal::MajorMarkingState>::ProcessWeakHeapObject<v8::internal::CompressedHeapObjectSlot>(v8::internal::HeapObject, v8::internal::CompressedHeapObjectSlot, v8::internal::HeapObject)",93957336810304,93957336810580],["v8::internal::ConcurrentMarkingVisitor::ShouldVisit(v8::internal::HeapObject)",93957336812608,93957336812847],["int v8::internal::ConcurrentMarkingVisitor::VisitJSObjectSubclass<v8::internal::JSDataView, v8::internal::JSDataView::BodyDescriptor>(v8::internal::Map, v8::internal::JSDataView)",93957336814048,93957336814319],["int v8::internal::ConcurrentMarkingVisitor::VisitJSObjectSubclass<v8::internal::JSWeakRef, v8::internal::JSWeakRef::BodyDescriptor>(v8::internal::Map, v8::internal::JSWeakRef)",93957336814656,93957336814944],["int v8::internal::ConcurrentMarkingVisitor::VisitLeftTrimmableArray<v8::internal::FixedArray>(v8::internal::Map, v8::internal::FixedArray)",93957336815248,93957336815464],["int v8::internal::ConcurrentMarkingVisitor::VisitJSObjectSubclass<v8::internal::JSObject, v8::internal::JSObject::FastBodyDescriptor>(v8::internal::Map, v8::internal::JSObject)",93957336815856,93957336816104],["v8::internal::Factory::NewClosureFeedbackCellArray(int)",93957336853216,93957336853256],["v8::internal::Factory::NewEmbedderDataArray(int)",93957336853824,93957336853987],["v8::internal::Factory::NewOrderedHashMap()",93957336854048,93957336854092],["v8::internal::Factory::NewPropertyDescriptorObject()",93957336854112,93957336854227],["v8::internal::Factory::NewStringFromOneByte(v8::internal::Vector<unsigned char const> const&, v8::internal::AllocationType)",93957336854480,93957336854600],["v8::internal::Factory::NewStringFromUtf8(v8::internal::Vector<char const> const&, v8::internal::AllocationType)",93957336854976,93957336855133],["void v8::internal::CopyChars<unsigned short, unsigned char>(unsigned char*, unsigned short const*, unsigned long)",93957336855536,93957336856664],["v8::internal::Factory::NewInternalizedStringImpl(v8::internal::Handle<v8::internal::String>, int, unsigned int)",93957336856704,93957336856957],["v8::internal::Factory::InternalizedStringMapForString(v8::internal::Handle<v8::internal::String>)",93957336857152,93957336857270],["v8::internal::Factory::NewExternalStringFromOneByte(v8::String::ExternalOneByteStringResource const*)",93957336858448,93957336858910],["v8::internal::Factory::NewJSObjectFromMap(v8::internal::Handle<v8::internal::Map>, v8::internal::AllocationType, v8::internal::Handle<v8::internal::AllocationSite>)",93957336859136,93957336859260],["v8::internal::Factory::NewPrivateSymbol(v8::internal::AllocationType)",93957336859408,93957336859552],["v8::internal::Heap::InitializeHashSeed()",93957337028576,93957337028641],["v8::internal::Heap::StartTearDown()",93957337029456,93957337029483],["v8::internal::Heap::RemoveGCEpilogueCallback(void (*)(v8::Isolate*, v8::GCType, v8::GCCallbackFlags, void*), void*)",93957337031904,93957337032016],["v8::internal::Heap::CompactRetainedMaps(v8::internal::WeakArrayList)",93957337033824,93957337034105],["v8::internal::Heap::InsertIntoRememberedSetFromCode(v8::internal::MemoryChunk*, unsigned long)",93957337034256,93957337034412],["v8::internal::HeapObjectIterator::HeapObjectIterator(v8::internal::Heap*, v8::internal::HeapObjectIterator::HeapObjectsFiltering)",93957337034448,93957337034895],["v8::internal::Heap::UpdateTotalGCTime(double)",93957337035008,93957337035042],["v8::internal::EvacuateOldSpaceVisitor::~EvacuateOldSpaceVisitor()",93957337338320,93957337338371],["void v8::internal::Code::BodyDescriptor::IterateBody<v8::internal::ObjectVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::ObjectVisitor*)",93957337348416,93957337348498],["v8::internal::SlotCallbackResult v8::internal::UpdateTypedSlotHelper::UpdateTypedSlot<v8::internal::RememberedSetUpdatingItem<v8::internal::MajorNonAtomicMarkingState, (v8::internal::GarbageCollector)1>::UpdateTypedPointers()::{lambda(v8::internal::FullMaybeObjectSlot)#1}>(v8::internal::Heap*, v8::internal::SlotType, unsigned long, v8::internal::RememberedSetUpdatingItem<v8::internal::MajorNonAtomicMarkingState, (v8::internal::GarbageCollector)1>::UpdateTypedPointers()::{lambda(v8::internal::FullMaybeObjectSlot)#1})",93957337352608,93957337353447],["v8::internal::PointersUpdatingJob::~PointersUpdatingJob()",93957337356528,93957337356673],["v8::internal::ToSpaceUpdatingItem<v8::internal::MinorNonAtomicMarkingState>::ProcessVisitAll()",93957337359424,93957337359898],["unsigned long v8::internal::SlotSet::Iterate<v8::internal::RememberedSetUpdatingItem<v8::internal::MinorNonAtomicMarkingState, (v8::internal::GarbageCollector)2>::UpdateUntypedPointers()::{lambda(v8::internal::CompressedMaybeObjectSlot)#2}, v8::internal::SlotSet::Iterate<{lambda(v8::internal::CompressedMaybeObjectSlot)#2}>(unsigned long, unsigned long, unsigned long, {lambda(v8::internal::CompressedMaybeObjectSlot)#2}, v8::internal::SlotSet::EmptyBucketMode)::{lambda(unsigned long)#1}>(unsigned long, unsigned long, unsigned long, v8::internal::SlotSet::Iterate, v8::internal::SlotSet::Iterate<{lambda(v8::internal::CompressedMaybeObjectSlot)#2}>(unsigned long, unsigned long, unsigned long, {lambda(v8::internal::CompressedMaybeObjectSlot)#2}, v8::internal::SlotSet::EmptyBucketMode)::{lambda(unsigned long)#1})",93957337361296,93957337362407],["void v8::internal::BodyDescriptorBase::IteratePointers<v8::internal::YoungGenerationMarkingVisitor>(v8::internal::HeapObject, int, int, v8::internal::YoungGenerationMarkingVisitor*)",93957337364000,93957337364360],["void v8::internal::BodyDescriptorBase::IteratePointer<v8::internal::YoungGenerationMarkingVisitor>(v8::internal::HeapObject, int, v8::internal::YoungGenerationMarkingVisitor*)",93957337365536,93957337365832],["void v8::internal::BodyDescriptorBase::IterateJSObjectBodyImpl<v8::internal::YoungGenerationMarkingVisitor>(v8::internal::Map, v8::internal::HeapObject, int, int, v8::internal::YoungGenerationMarkingVisitor*)",93957337366688,93957337367169],["void v8::internal::JSTypedArray::BodyDescriptor::IterateBody<v8::internal::YoungGenerationMarkingVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::YoungGenerationMarkingVisitor*)",93957337367568,93957337368212],["void v8::internal::Map::BodyDescriptor::IterateBody<v8::internal::YoungGenerationMarkingVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::YoungGenerationMarkingVisitor*)",93957337368640,93957337369257],["void v8::internal::PrototypeInfo::BodyDescriptor::IterateBody<v8::internal::YoungGenerationMarkingVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::YoungGenerationMarkingVisitor*)",93957337369648,93957337370630],["void v8::internal::SmallOrderedHashTable<v8::internal::SmallOrderedHashSet>::BodyDescriptor::IterateBody<v8::internal::YoungGenerationMarkingVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::YoungGenerationMarkingVisitor*)",93957337371008,93957337371368],["void v8::internal::SubclassBodyDescriptor<v8::internal::FixedBodyDescriptor<4, 28, 28>, v8::internal::FixedBodyDescriptor<28, 72, 72> >::IterateBody<v8::internal::YoungGenerationMarkingVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::YoungGenerationMarkingVisitor*)",93957337371744,93957337372423],["void v8::internal::SubclassBodyDescriptor<v8::internal::FixedBodyDescriptor<4, 28, 28>, v8::internal::FixedBodyDescriptor<28, 40, 40> >::IterateBody<v8::internal::YoungGenerationMarkingVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::YoungGenerationMarkingVisitor*)",93957337372800,93957337373479],["void v8::internal::WasmStruct::BodyDescriptor::IterateBody<v8::internal::YoungGenerationMarkingVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::YoungGenerationMarkingVisitor*)",93957337373808,93957337374267],["v8::internal::RegExpUnparser::VisitLookaround(v8::internal::RegExpLookaround*, void*)",93957339754032,93957339754196],["v8::internal::RegExpBytecodeGenerator::PopCurrentPosition()",93957339756144,93957339756199],["v8::internal::RegExpBytecodeGenerator::CheckCharacter(unsigned int, v8::internal::Label*)",93957339758384,93957339758660],["v8::internal::RegExpBytecodeGenerator::CheckCharacterNotInRange(unsigned short, unsigned short, v8::internal::Label*)",93957339760656,93957339760947],["v8::internal::RegExpBytecodeGenerator::IfRegisterEqPos(int, v8::internal::Label*)",93957339762368,93957339762571],["std::__1::__hash_table<std::__1::__hash_value_type<int, int>, std::__1::__unordered_map_hasher<int, std::__1::__hash_value_type<int, int>, v8::base::hash<int>, std::__1::equal_to<int>, true>, std::__1::__unordered_map_equal<int, std::__1::__hash_value_type<int, int>, std::__1::equal_to<int>, v8::base::hash<int>, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<int, int> > >::__rehash(unsigned long)",93957339763264,93957339763978],["v8::internal::(anonymous namespace)::BytecodeSequenceNode::BytecodeSequenceNode(int, v8::internal::Zone*)",93957339777264,93957339777549],["std::__1::vector<unsigned char, v8::internal::ZoneAllocator<unsigned char> >::insert(std::__1::__wrap_iter<unsigned char const*>, unsigned long, unsigned char const&)",93957339779424,93957339781690],["v8::internal::RegExpAtom::ToNode(v8::internal::RegExpCompiler*, v8::internal::RegExpNode*)",93957339782048,93957339782536],["v8::internal::RegExpCharacterClass::is_standard(v8::internal::Zone*)",93957339782688,93957339784051],["v8::internal::CharacterSet::ranges(v8::internal::Zone*)",93957339784176,93957339784334],["v8::internal::UnicodeRangeSplitter::AddRange(v8::internal::CharacterRange)",93957339784432,93957339784945],["v8::internal::(anonymous namespace)::AddUnicodeCaseEquivalents(v8::internal::ZoneList<v8::internal::CharacterRange>*, v8::internal::Zone*)",93957339790496,93957339790962],["v8::internal::ChoiceNode* v8::internal::Zone::New<v8::internal::ChoiceNode, int, v8::internal::Zone*&>(int&&, v8::internal::Zone*&)",93957339791536,93957339791788],["v8::internal::CompareFirstCharCaseInsensitve(v8::internal::RegExpTree* const*, v8::internal::RegExpTree* const*)",93957339791872,93957339792143],["void v8::internal::ZoneList<v8::internal::RegExpTree*>::StableSort<int (*)(v8::internal::RegExpTree* const*, v8::internal::RegExpTree* const*)>(int (*)(v8::internal::RegExpTree* const*, v8::internal::RegExpTree* const*), unsigned long, unsigned long)",93957339792560,93957339792756],["v8_inspector::V8DebuggerAgentImpl::getWasmBytecode(v8_inspector::String16 const&, v8_inspector::protocol::Binary*)",93957342501968,93957342502663],["v8_inspector::V8DebuggerAgentImpl::evaluateOnCallFrame(v8_inspector::String16 const&, v8_inspector::String16 const&, v8_crdtp::detail::ValueMaybe<v8_inspector::String16>, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<double>, std::__1::unique_ptr<v8_inspector::protocol::Runtime::RemoteObject, std::__1::default_delete<v8_inspector::protocol::Runtime::RemoteObject> >*, v8_crdtp::detail::PtrMaybe<v8_inspector::protocol::Runtime::ExceptionDetails>*)",93957342509088,93957342510311],["v8_inspector::(anonymous namespace)::isValidPosition(v8_inspector::protocol::Debugger::ScriptPosition*)",93957342514576,93957342514803],["v8_inspector::V8DebuggerAgentImpl::breakProgram(v8_inspector::String16 const&, std::__1::unique_ptr<v8_inspector::protocol::DictionaryValue, std::__1::default_delete<v8_inspector::protocol::DictionaryValue> >)",93957342516880,93957342517380],["v8_inspector::V8DebuggerAgentImpl::reset()",93957342517888,93957342518768],["std::__1::deque<v8_inspector::String16, std::__1::allocator<v8_inspector::String16> >::push_back(v8_inspector::String16 const&)",93957342519280,93957342520012],["std::__1::__deque_base<v8_inspector::String16, std::__1::allocator<v8_inspector::String16> >::clear()",93957342520736,93957342521012],["void std::__1::vector<std::__1::pair<v8_inspector::String16, std::__1::unique_ptr<v8_inspector::protocol::DictionaryValue, std::__1::default_delete<v8_inspector::protocol::DictionaryValue> > >, std::__1::allocator<std::__1::pair<v8_inspector::String16, std::__1::unique_ptr<v8_inspector::protocol::DictionaryValue, std::__1::default_delete<v8_inspector::protocol::DictionaryValue> > > > >::__push_back_slow_path<std::__1::pair<v8_inspector::String16, std::__1::unique_ptr<v8_inspector::protocol::DictionaryValue, std::__1::default_delete<v8_inspector::protocol::DictionaryValue> > > >(std::__1::pair<v8_inspector::String16, std::__1::unique_ptr<v8_inspector::protocol::DictionaryValue, std::__1::default_delete<v8_inspector::protocol::DictionaryValue> > >&&)",93957342521680,93957342522138],["v8_inspector::V8ProfilerAgentImpl::startProfiling(v8_inspector::String16 const&)",93957342598576,93957342598765],["v8_inspector::V8ProfilerAgentImpl::getRuntimeCallStats(std::__1::unique_ptr<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Profiler::RuntimeCallCounterInfo, std::__1::default_delete<v8_inspector::protocol::Profiler::RuntimeCallCounterInfo> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Profiler::RuntimeCallCounterInfo, std::__1::default_delete<v8_inspector::protocol::Profiler::RuntimeCallCounterInfo> > > >, std::__1::default_delete<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Profiler::RuntimeCallCounterInfo, std::__1::default_delete<v8_inspector::protocol::Profiler::RuntimeCallCounterInfo> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Profiler::RuntimeCallCounterInfo, std::__1::default_delete<v8_inspector::protocol::Profiler::RuntimeCallCounterInfo> > > > > >*)",93957342617152,93957342617677],["v8_inspector::V8RuntimeAgentImpl::awaitPromise(v8_inspector::String16 const&, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<bool>, std::__1::unique_ptr<v8_inspector::protocol::Runtime::Backend::AwaitPromiseCallback, std::__1::default_delete<v8_inspector::protocol::Runtime::Backend::AwaitPromiseCallback> >)",93957342624688,93957342625249],["v8_inspector::V8RuntimeAgentImpl::setCustomObjectFormatterEnabled(bool)",93957342630128,93957342630336],["v8_inspector::V8RuntimeAgentImpl::queryObjects(v8_inspector::String16 const&, v8_crdtp::detail::ValueMaybe<v8_inspector::String16>, std::__1::unique_ptr<v8_inspector::protocol::Runtime::RemoteObject, std::__1::default_delete<v8_inspector::protocol::Runtime::RemoteObject> >*)",93957342634464,93957342634908],["v8_inspector::V8RuntimeAgentImpl::terminateExecution(std::__1::unique_ptr<v8_inspector::protocol::Runtime::Backend::TerminateExecutionCallback, std::__1::default_delete<v8_inspector::protocol::Runtime::Backend::TerminateExecutionCallback> >)",93957342636384,93957342636402],["v8_inspector::V8RuntimeAgentImpl::removeBinding(v8_inspector::String16 const&)",93957342638448,93957342638958],["v8_inspector::V8RuntimeAgentImpl::disable()",93957342640576,93957342640960],["v8_inspector::V8RuntimeAgentImpl::reportExecutionContextDestroyed(v8_inspector::InspectedContext*)",93957342643344,93957342643424],["v8_inspector::V8RuntimeAgentImpl::messageAdded(v8_inspector::V8ConsoleMessage*)",93957342643504,93957342643577],["v8_inspector::(anonymous namespace)::EvaluateCallbackWrapper<v8_inspector::protocol::Runtime::Backend::EvaluateCallback>::sendFailure(v8_crdtp::DispatchResponse const&)",93957342643648,93957342643666],["v8_inspector::(anonymous namespace)::EvaluateCallbackWrapper<v8_inspector::protocol::Runtime::Backend::EvaluateCallback>::~EvaluateCallbackWrapper()",93957342643728,93957342643784],["void std::__1::__function::__policy_invoker<void (v8_inspector::InspectedContext*)>::__call_impl<std::__1::__function::__default_alloc_func<v8_inspector::V8RuntimeAgentImpl::addBinding(v8_inspector::String16 const&, v8_crdtp::detail::ValueMaybe<int>, v8_crdtp::detail::ValueMaybe<v8_inspector::String16>)::$_0, void (v8_inspector::InspectedContext*)> >(std::__1::__function::__policy_storage const*, v8_inspector::InspectedContext*)",93957342644192,93957342645078],["std::__1::pair<std::__1::__tree_iterator<v8_inspector::String16, std::__1::__tree_node<v8_inspector::String16, void*>*, long>, bool> std::__1::__tree<v8_inspector::String16, std::__1::less<v8_inspector::String16>, std::__1::allocator<v8_inspector::String16> >::__emplace_unique_key_args<v8_inspector::String16, v8_inspector::String16 const&>(v8_inspector::String16 const&, v8_inspector::String16 const&)",93957342645392,93957342646364],["std::__1::__hash_table<std::__1::__hash_value_type<v8_inspector::String16, std::__1::unique_ptr<v8::Global<v8::Script>, std::__1::default_delete<v8::Global<v8::Script> > > >, std::__1::__unordered_map_hasher<v8_inspector::String16, std::__1::__hash_value_type<v8_inspector::String16, std::__1::unique_ptr<v8::Global<v8::Script>, std::__1::default_delete<v8::Global<v8::Script> > > >, std::__1::hash<v8_inspector::String16>, std::__1::equal_to<v8_inspector::String16>, true>, std::__1::__unordered_map_equal<v8_inspector::String16, std::__1::__hash_value_type<v8_inspector::String16, std::__1::unique_ptr<v8::Global<v8::Script>, std::__1::default_delete<v8::Global<v8::Script> > > >, std::__1::equal_to<v8_inspector::String16>, std::__1::hash<v8_inspector::String16>, true>, std::__1::allocator<std::__1::__hash_value_type<v8_inspector::String16, std::__1::unique_ptr<v8::Global<v8::Script>, std::__1::default_delete<v8::Global<v8::Script> > > > > >::clear()",93957342646384,93957342646646],["v8_inspector::V8SchemaAgentImpl::V8SchemaAgentImpl(v8_inspector::V8InspectorSessionImpl*, v8_crdtp::FrontendChannel*, v8_inspector::protocol::DictionaryValue*)",93957342646688,93957342646712],["v8::internal::compiler::AccessBuilder::ForJSArrayBufferBitField()",93957342827984,93957342828062],["v8::internal::compiler::AccessBuilder::ForConsStringFirst()",93957342829840,93957342829903],["v8::internal::compiler::AccessBuilder::ForContextSlot(unsigned long)",93957342830736,93957342830803],["v8::internal::compiler::AccessBuilder::ForEnumCacheIndices()",93957342831344,93957342831407],["v8::internal::compiler::AccessBuilder::ForOrderedHashMapOrSetNumberOfElements()",93957342831904,93957342831985],["v8::internal::compiler::AccessBuilder::ForFeedbackCellValue()",93957342832208,93957342832272],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::AccessMode)",93957342832528,93957342832641],["v8::internal::compiler::PropertyAccessInfo::FastDataConstant(v8::internal::Zone*, v8::internal::Handle<v8::internal::Map>, v8::internal::ZoneVector<v8::internal::compiler::CompilationDependency const*>&&, v8::internal::FieldIndex, v8::internal::Representation, v8::internal::compiler::Type, v8::internal::Handle<v8::internal::Map>, v8::internal::MaybeHandle<v8::internal::Map>, v8::internal::MaybeHandle<v8::internal::JSObject>, v8::internal::MaybeHandle<v8::internal::Map>)",93957342833472,93957342833866],["v8::internal::compiler::PropertyAccessInfo::StringLength(v8::internal::Zone*, v8::internal::Handle<v8::internal::Map>)",93957342834512,93957342834804],["v8::internal::compiler::MinimorphicLoadPropertyAccessInfo::Invalid()",93957342835168,93957342835206],["_ZNSt3__16vectorIN2v88internal6HandleINS2_3MapEEENS2_13ZoneAllocatorIS5_EEE6insertINS_11__wrap_iterIPKS5_EEEENS_9enable_ifIXaasr27__is_cpp17_forward_iteratorIT_EE5valuesr16is_constructibleIS5_NS_15iterator_traitsISF_E9referenceEEE5valueENSA_IPS5_EEE4typeESD_SF_SF_",93957342835552,93957342839082],["v8::internal::compiler::AccessInfoFactory::AccessInfoFactory(v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::CompilationDependencies*, v8::internal::Zone*)",93957342839136,93957342839174],["v8::internal::compiler::MapRef::MapRef(v8::internal::compiler::JSHeapBroker*, v8::internal::Handle<v8::internal::Object>, v8::internal::compiler::ObjectRef::BackgroundSerialization, bool)",93957342839584,93957342839648],["v8::internal::compiler::AccessInfoFactory::ConsolidateElementLoad(v8::internal::compiler::ElementAccessFeedback const&) const",93957342840800,93957342842774],["std::__1::vector<v8::internal::compiler::CompilationDependency const*, v8::internal::ZoneAllocator<v8::internal::compiler::CompilationDependency const*> >::push_back(v8::internal::compiler::CompilationDependency const*&&)",93957342846752,93957342847430],["v8::internal::compiler::AccessInfoFactory::ComputePropertyAccessInfo(v8::internal::compiler::MinimorphicLoadPropertyAccessFeedback const&) const",93957342848816,93957342848899],["v8::internal::compiler::MachineOperatorBuilder::RoundUint64ToFloat64()",93957344480224,93957344480239],["v8::internal::compiler::MachineOperatorBuilder::Float64Div()",93957344480992,93957344481007],["v8::internal::compiler::MachineOperatorBuilder::Word32PairShr()",93957344481376,93957344481391],["v8::internal::compiler::MachineOperatorBuilder::F64x2Qfma()",93957344481632,93957344481647],["v8::internal::compiler::MachineOperatorBuilder::F32x4SConvertI32x4()",93957344481824,93957344481839],["v8::internal::compiler::MachineOperatorBuilder::F32x4Sub()",93957344481952,93957344481967],["v8::internal::compiler::MachineOperatorBuilder::F32x4Le()",93957344482080,93957344482095],["v8::internal::compiler::MachineOperatorBuilder::F32x4NearestInt()",93957344482208,93957344482223],["v8::internal::compiler::MachineOperatorBuilder::I64x2SConvertI32x4Low()",93957344482304,93957344482319],["v8::internal::compiler::MachineOperatorBuilder::I64x2BitMask()",93957344482368,93957344482383],["v8::internal::compiler::MachineOperatorBuilder::I64x2Sub()",93957344482432,93957344482447],["v8::internal::compiler::MachineOperatorBuilder::I64x2GtS()",93957344482496,93957344482511],["v8::internal::compiler::MachineOperatorBuilder::I64x2ExtMulHighI32x4S()",93957344482560,93957344482575],["v8::internal::compiler::MachineOperatorBuilder::I32x4SConvertF32x4()",93957344482624,93957344482639],["v8::internal::compiler::MachineOperatorBuilder::I32x4Shl()",93957344482688,93957344482703],["v8::internal::compiler::MachineOperatorBuilder::I32x4Mul()",93957344482752,93957344482767],["v8::internal::compiler::MachineOperatorBuilder::I32x4Eq()",93957344482800,93957344482815],["v8::internal::compiler::MachineOperatorBuilder::I32x4GtS()",93957344482832,93957344482847],["v8::internal::compiler::MachineOperatorBuilder::I32x4UConvertF32x4()",93957344482864,93957344482879],["v8::internal::compiler::MachineOperatorBuilder::I32x4UConvertI16x8High()",93957344482896,93957344482911],["v8::internal::compiler::MachineOperatorBuilder::I32x4MinU()",93957344482928,93957344482943],["v8::internal::compiler::MachineOperatorBuilder::I32x4GtU()",93957344482960,93957344482975],["v8::internal::compiler::MachineOperatorBuilder::I32x4Abs()",93957344482992,93957344483007],["v8::internal::compiler::MachineOperatorBuilder::I32x4DotI16x8S()",93957344483024,93957344483039],["v8::internal::compiler::MachineOperatorBuilder::I32x4ExtMulHighI16x8S()",93957344483056,93957344483071],["v8::internal::compiler::MachineOperatorBuilder::I32x4ExtMulHighI16x8U()",93957344483088,93957344483103],["v8::internal::compiler::MachineOperatorBuilder::I32x4ExtAddPairwiseI16x8U()",93957344483120,93957344483135],["v8::internal::compiler::MachineOperatorBuilder::I32x4TruncSatF64x2UZero()",93957344483152,93957344483167],["v8::internal::compiler::MachineOperatorBuilder::I16x8SConvertI8x16Low()",93957344483184,93957344483199],["v8::internal::compiler::MachineOperatorBuilder::I16x8Neg()",93957344483216,93957344483231],["v8::internal::compiler::MachineOperatorBuilder::I16x8ShrS()",93957344483248,93957344483263],["v8::internal::compiler::MachineOperatorBuilder::I16x8Add()",93957344483280,93957344483295],["__toupper_l",139871563475584,139871563475595],["dngettext",139871563482912,139871563482923],["__open_catalog",139871563497456,139871563499587],["copysignl",139871563499760,139871563499790],["__signbitl",139871563500304,139871563500320],["__isinf",139871563500432,139871563500482],["__finite",139871563500528,139871563500560],["modf",139871563500592,139871563500777],["xdr_quad_t",139871564505104,139871564505109],["xdr_uint16_t",139871564505680,139871564505818],["xdrmem_create",139871564506576,139871564506601],["xdr_pointer",139871564506832,139871564506976],["sincosf128",139871565620736,139871565621236],["modff128",139871565627264,139871565627666],["totalorderf128",139871565635136,139871565635167],["setpayloadf128",139871565635472,139871565635753],["fromfpf128",139871565636432,139871565637097],["fromfpxf128",139871565637776,139871565638508],["cargf128",139871565639216,139871565639233],["cimagf128",139871565639280,139871565639287],["std::__1::deque<v8::AsyncContext, std::__1::allocator<v8::AsyncContext> >::__add_back_capacity()",93957335203888,93957335204309],["v8::D8Console::D8Console(v8::Isolate*)",93957335206048,93957335206110],["v8::Worker::ProcessMessages()",93957335289520,93957335289693],["v8::ShellOptions::DisallowReassignment<int, false>::operator=(int)",93957335293952,93957335294000],["v8::Shell::NotifyFinishStreamingTask(v8::Isolate*)",93957335295712,93957335296076],["v8::Serializer::WriteValue(v8::Local<v8::Context>, v8::Local<v8::Value>, v8::Local<v8::Value>)",93957335296928,93957335297182],["v8::internal::ConcurrentMarking::Run(v8::JobDelegate*, v8::internal::BytecodeFlushMode, unsigned int, bool)",93957336779184,93957336804752],["v8::internal::ConcurrentMarking::ClearMemoryChunkData(v8::internal::MemoryChunk*)",93957336807344,93957336807892],["v8::internal::MarkingVisitorBase<v8::internal::ConcurrentMarkingVisitor, v8::internal::ConcurrentMarkingState>::VisitPointer(v8::internal::HeapObject, v8::internal::CompressedObjectSlot)",93957336808368,93957336808471],["v8::internal::MarkingVisitorBase<v8::internal::ConcurrentMarkingVisitor, v8::internal::ConcurrentMarkingState>::VisitCodeTarget(v8::internal::Code, v8::internal::RelocInfo*)",93957336808720,93957336809070],["void v8::internal::MainMarkingVisitor<v8::internal::MajorMarkingState>::RecordSlot<v8::internal::CompressedObjectSlot>(v8::internal::HeapObject, v8::internal::CompressedObjectSlot, v8::internal::HeapObject)",93957336810048,93957336810300],["v8::internal::ConcurrentMarkingVisitor::RecordRelocSlot(v8::internal::Code, v8::internal::RelocInfo*, v8::internal::HeapObject)",93957336810592,93957336810747],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<unsigned long, unsigned long>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<unsigned long, unsigned long>, std::__1::__unordered_map_hasher<unsigned long, std::__1::__hash_value_type<unsigned long, unsigned long>, std::__1::hash<unsigned long>, std::__1::equal_to<unsigned long>, true>, std::__1::__unordered_map_equal<unsigned long, std::__1::__hash_value_type<unsigned long, unsigned long>, std::__1::equal_to<unsigned long>, std::__1::hash<unsigned long>, true>, std::__1::allocator<std::__1::__hash_value_type<unsigned long, unsigned long> > >::__emplace_unique_key_args<unsigned long, std::__1::piecewise_construct_t const&, std::__1::tuple<unsigned long const&>, std::__1::tuple<> >(unsigned long const&, std::__1::piecewise_construct_t const&, std::__1::tuple<unsigned long const&>&&, std::__1::tuple<>&&)",93957336811680,93957336812593],["int v8::internal::ConcurrentMarkingVisitor::VisitJSObjectSubclass<v8::internal::JSArrayBuffer, v8::internal::JSArrayBuffer::BodyDescriptor>(v8::internal::Map, v8::internal::JSArrayBuffer)",93957336812848,93957336813119],["v8::internal::Heap::RemapEmbeddedBuiltinsIntoCodeRange(unsigned char const*, unsigned long)",93957337026336,93957337026660],["v8::internal::Heap::NotifyBootstrapComplete()",93957337028880,93957337029058],["v8::internal::Heap::flags_for_embedder_tracer() const",93957337029424,93957337029455],["v8::internal::Heap::TearDown()",93957337029488,93957337031280],["v8::internal::Heap::AddGCEpilogueCallback(void (*)(v8::Isolate*, v8::GCType, v8::GCCallbackFlags, void*), v8::GCType, void*)",93957337031808,93957337031900],["v8::internal::Heap::CompactWeakArrayLists(v8::internal::AllocationType)",93957337032016,93957337033455],["int v8::internal::MainMarkingVisitor<v8::internal::MajorMarkingState>::VisitJSObjectSubclass<v8::internal::JSFunction, v8::internal::JSObject::BodyDescriptor>(v8::internal::Map, v8::internal::JSFunction)",93957337331120,93957337331452],["v8::internal::ToSpaceUpdatingItem<v8::internal::MajorNonAtomicMarkingState>::ProcessVisitLive()",93957337342128,93957337343011],["void v8::internal::JSDataView::BodyDescriptor::IterateBody<v8::internal::ObjectVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::ObjectVisitor*)",93957337347584,93957337347796],["void v8::internal::DataHandler::BodyDescriptor::IterateBody<v8::internal::PointersUpdatingVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::PointersUpdatingVisitor*)",93957337348752,93957337348907],["unsigned long v8::internal::SlotSet::Iterate<v8::internal::RememberedSetUpdatingItem<v8::internal::MajorNonAtomicMarkingState, (v8::internal::GarbageCollector)1>::UpdateUntypedPointers()::{lambda(v8::internal::CompressedMaybeObjectSlot)#2}, v8::internal::SlotSet::Iterate<{lambda(v8::internal::CompressedMaybeObjectSlot)#2}>(unsigned long, unsigned long, unsigned long, {lambda(v8::internal::CompressedMaybeObjectSlot)#2}, v8::internal::SlotSet::EmptyBucketMode)::{lambda(unsigned long)#1}>(unsigned long, unsigned long, unsigned long, v8::internal::SlotSet::Iterate, v8::internal::SlotSet::Iterate<{lambda(v8::internal::CompressedMaybeObjectSlot)#2}>(unsigned long, unsigned long, unsigned long, {lambda(v8::internal::CompressedMaybeObjectSlot)#2}, v8::internal::SlotSet::EmptyBucketMode)::{lambda(unsigned long)#1})",93957337350560,93957337351671],["v8::internal::SlotCallbackResult v8::internal::UpdateTypedSlotHelper::UpdateEmbeddedPointer<v8::internal::RememberedSetUpdatingItem<v8::internal::MajorNonAtomicMarkingState, (v8::internal::GarbageCollector)1>::UpdateTypedPointers()::{lambda(v8::internal::FullMaybeObjectSlot)#1}>(v8::internal::Heap*, v8::internal::RelocInfo*, v8::internal::RememberedSetUpdatingItem<v8::internal::MajorNonAtomicMarkingState, (v8::internal::GarbageCollector)1>::UpdateTypedPointers()::{lambda(v8::internal::FullMaybeObjectSlot)#1})",93957337353792,93957337354180],["v8::internal::EphemeronTableUpdatingItem::Process()",93957337354976,93957337356365],["v8::internal::PointersUpdatingJob::GetMaxConcurrency(unsigned long) const",93957337357760,93957337357805],["v8::internal::ToSpaceUpdatingItem<v8::internal::MinorNonAtomicMarkingState>::ProcessVisitLive()",93957337358528,93957337359411],["v8::internal::RememberedSetUpdatingItem<v8::internal::MinorNonAtomicMarkingState, (v8::internal::GarbageCollector)2>::Process()",93957337359904,93957337360356],["v8::internal::RememberedSetUpdatingItem<v8::internal::MinorNonAtomicMarkingState, (v8::internal::GarbageCollector)2>::UpdateTypedPointers()",93957337360816,93957337361283],["v8::internal::SlotCallbackResult v8::internal::UpdateTypedSlotHelper::UpdateTypedSlot<v8::internal::RememberedSetUpdatingItem<v8::internal::MinorNonAtomicMarkingState, (v8::internal::GarbageCollector)2>::UpdateTypedPointers()::{lambda(v8::internal::FullMaybeObjectSlot)#1}>(v8::internal::Heap*, v8::internal::SlotType, unsigned long, v8::internal::RememberedSetUpdatingItem<v8::internal::MinorNonAtomicMarkingState, (v8::internal::GarbageCollector)2>::UpdateTypedPointers()::{lambda(v8::internal::FullMaybeObjectSlot)#1})",93957337362416,93957337363255],["v8::internal::SlotCallbackResult v8::internal::UpdateTypedSlotHelper::UpdateEmbeddedPointer<v8::internal::RememberedSetUpdatingItem<v8::internal::MinorNonAtomicMarkingState, (v8::internal::GarbageCollector)2>::UpdateTypedPointers()::{lambda(v8::internal::FullMaybeObjectSlot)#1}>(v8::internal::Heap*, v8::internal::RelocInfo*, v8::internal::RememberedSetUpdatingItem<v8::internal::MinorNonAtomicMarkingState, (v8::internal::GarbageCollector)2>::UpdateTypedPointers()::{lambda(v8::internal::FullMaybeObjectSlot)#1})",93957337363600,93957337363988],["void v8::internal::Code::BodyDescriptor::IterateBody<v8::internal::YoungGenerationMarkingVisitor>(v8::internal::Map, v8::internal::HeapObject, v8::internal::YoungGenerationMarkingVisitor*)",93957337364368,93957337364764],["void v8::internal::BodyDescriptorBase::IterateMaybeWeakPointers<v8::internal::YoungGenerationMarkingVisitor>(v8::internal::HeapObject, int, int, v8::internal::YoungGenerationMarkingVisitor*)",93957337365152,93957337365528],["void v8::internal::EphemeronHashTable::BodyDescriptor::IterateBody<v8::internal::YoungGenerationMarkingVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::YoungGenerationMarkingVisitor*)",93957337365840,93957337366301],["v8::internal::RegExpAssertion::IsAnchoredAtStart()",93957339751936,93957339751949],["v8::internal::RegExpQuantifier::max_match()",93957339754768,93957339754777],["v8::internal::RegExpBytecodeGenerator::ReadStackPointerFromRegister(int)",93957339755792,93957339755854],["v8::internal::RegExpBytecodeGenerator::PushBacktrack(v8::internal::Label*)",93957339756784,93957339756983],["v8::internal::RegExpBytecodeGenerator::CheckCharacterLT(unsigned short, v8::internal::Label*)",93957339757968,93957339758171],["v8::internal::RegExpBytecodeGenerator::CheckNotAtStart(int, v8::internal::Label*)",93957339758880,93957339759083],["v8::internal::RegExpBytecodeGenerator::CheckNotCharacterAfterMinusAnd(unsigned short, unsigned short, unsigned short, v8::internal::Label*)",93957339760048,93957339760348],["v8::internal::RegExpBytecodeGenerator::CheckNotBackReference(int, bool, v8::internal::Label*)",93957339761392,93957339761614],["v8::internal::RegExpBytecodeGenerator::IfRegisterGE(int, int, v8::internal::Label*)",93957339762112,93957339762368],["v8::internal::RegExpBytecodeGenerator::GetCode(v8::internal::Handle<v8::internal::String>)",93957339762576,93957339762706],["std::__1::__hash_table<std::__1::__hash_value_type<int, int>, std::__1::__unordered_map_hasher<int, std::__1::__hash_value_type<int, int>, v8::base::hash<int>, std::__1::equal_to<int>, true>, std::__1::__unordered_map_equal<int, std::__1::__hash_value_type<int, int>, std::__1::equal_to<int>, v8::base::hash<int>, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<int, int> > >::rehash(unsigned long)",93957339762880,93957339763251],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<int, int>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<int, int>, std::__1::__unordered_map_hasher<int, std::__1::__hash_value_type<int, int>, v8::base::hash<int>, std::__1::equal_to<int>, true>, std::__1::__unordered_map_equal<int, std::__1::__hash_value_type<int, int>, std::__1::equal_to<int>, v8::base::hash<int>, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<int, int> > >::__emplace_unique_key_args<int, int&, int&>(int const&, int&, int&)",93957339763984,93957339764952],["v8::internal::(anonymous namespace)::RegExpBytecodePeephole::AddSentinelFixups(int)",93957339776768,93957339777253],["v8::internal::(anonymous namespace)::BytecodeSequenceNode::FollowedBy(int)",93957339777552,93957339778101],["std::__1::unordered_map<int, v8::internal::(anonymous namespace)::BytecodeSequenceNode*, v8::base::hash<int>, std::__1::equal_to<int>, v8::internal::ZoneAllocator<std::__1::pair<int const, v8::internal::(anonymous namespace)::BytecodeSequenceNode*> > >::operator[](int const&)",93957339778512,93957339779423],["v8::internal::RegExpBytecodeDisassembleSingle(unsigned char const*, unsigned char const*)",93957339781696,93957339781917],["v8_inspector::V8DebuggerAgentImpl::shouldBeSkipped(v8_inspector::String16 const&, int, int)",93957342493456,93957342493628],["v8_inspector::V8DebuggerAgentImpl::pause()",93957342503792,93957342504063],["v8_inspector::V8DebuggerAgentImpl::pauseOnAsyncCall(std::__1::unique_ptr<v8_inspector::protocol::Runtime::StackTraceId, std::__1::default_delete<v8_inspector::protocol::Runtime::StackTraceId> >)",93957342508112,93957342508152],["v8_inspector::V8DebuggerAgentImpl::setReturnValue(std::__1::unique_ptr<v8_inspector::protocol::Runtime::CallArgument, std::__1::default_delete<v8_inspector::protocol::Runtime::CallArgument> >)",93957342511408,93957342512354],["v8_inspector::V8DebuggerAgentImpl::setBlackboxedRanges(v8_inspector::String16 const&, std::__1::unique_ptr<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Debugger::ScriptPosition, std::__1::default_delete<v8_inspector::protocol::Debugger::ScriptPosition> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Debugger::ScriptPosition, std::__1::default_delete<v8_inspector::protocol::Debugger::ScriptPosition> > > >, std::__1::default_delete<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Debugger::ScriptPosition, std::__1::default_delete<v8_inspector::protocol::Debugger::ScriptPosition> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Debugger::ScriptPosition, std::__1::default_delete<v8_inspector::protocol::Debugger::ScriptPosition> > > > > >)",93957342513440,93957342514561],["v8_inspector::(anonymous namespace)::isValidRangeOfPositions(std::__1::vector<std::__1::pair<int, int>, std::__1::allocator<std::__1::pair<int, int> > >&)",93957342514816,93957342515008],["v8_inspector::V8DebuggerAgentImpl::didContinue()",93957342516720,93957342516868],["v8_inspector::V8DebuggerAgentImpl::setBreakpointFor(v8::Local<v8::Function>, v8::Local<v8::String>, v8_inspector::V8DebuggerAgentImpl::BreakpointSource)",93957342517392,93957342517696],["v8_inspector::V8InspectorSessionImpl::breakProgram(v8_inspector::StringView, v8_inspector::StringView)",93957342593760,93957342593942],["v8_inspector::V8ProfilerAgentImpl::start()",93957342602960,93957342603251],["v8_inspector::V8ProfilerAgentImpl::disableCounters()",93957342616032,93957342616131],["void std::__1::__function::__policy_invoker<void (char const*, long, v8::base::TimeDelta)>::__call_impl<std::__1::__function::__default_alloc_func<v8_inspector::V8ProfilerAgentImpl::getRuntimeCallStats(std::__1::unique_ptr<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Profiler::RuntimeCallCounterInfo, std::__1::default_delete<v8_inspector::protocol::Profiler::RuntimeCallCounterInfo> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Profiler::RuntimeCallCounterInfo, std::__1::default_delete<v8_inspector::protocol::Profiler::RuntimeCallCounterInfo> > > >, std::__1::default_delete<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Profiler::RuntimeCallCounterInfo, std::__1::default_delete<v8_inspector::protocol::Profiler::RuntimeCallCounterInfo> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Profiler::RuntimeCallCounterInfo, std::__1::default_delete<v8_inspector::protocol::Profiler::RuntimeCallCounterInfo> > > > > >*)::$_0, void (char const*, long, v8::base::TimeDelta)> >(std::__1::__function::__policy_storage const*, char const*, long, v8::base::TimeDelta&&)",93957342620368,93957342620633],["v8_inspector::V8RuntimeAgentImpl::evaluate(v8_inspector::String16 const&, v8_crdtp::detail::ValueMaybe<v8_inspector::String16>, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<int>, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<double>, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<v8_inspector::String16>, std::__1::unique_ptr<v8_inspector::protocol::Runtime::Backend::EvaluateCallback, std::__1::default_delete<v8_inspector::protocol::Runtime::Backend::EvaluateCallback> >)",93957342622000,93957342624089],["v8_inspector::(anonymous namespace)::innerCallFunctionOn(v8_inspector::V8InspectorSessionImpl*, v8_inspector::InjectedScript::Scope&, v8::Local<v8::Value>, v8_inspector::String16 const&, v8_crdtp::detail::PtrMaybe<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::CallArgument, std::__1::default_delete<v8_inspector::protocol::Runtime::CallArgument> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::CallArgument, std::__1::default_delete<v8_inspector::protocol::Runtime::CallArgument> > > > >, bool, v8_inspector::WrapMode, bool, bool, v8_inspector::String16 const&, std::__1::unique_ptr<v8_inspector::protocol::Runtime::Backend::CallFunctionOnCallback, std::__1::default_delete<v8_inspector::protocol::Runtime::Backend::CallFunctionOnCallback> >)",93957342626928,93957342628556],["v8_inspector::V8RuntimeAgentImpl::releaseObjectGroup(v8_inspector::String16 const&)",93957342630032,93957342630071],["v8_inspector::V8RuntimeAgentImpl::discardConsoleEntries()",93957342630480,93957342630531],["bool v8_inspector::(anonymous namespace)::wrapEvaluateResultAsync<v8_inspector::protocol::Runtime::Backend::RunScriptCallback>(v8_inspector::InjectedScript*, v8::MaybeLocal<v8::Value>, v8::TryCatch const&, v8_inspector::String16 const&, v8_inspector::WrapMode, v8_inspector::protocol::Runtime::Backend::RunScriptCallback*)",93957342634208,93957342634450],["v8_inspector::V8RuntimeAgentImpl::globalLexicalScopeNames(v8_crdtp::detail::ValueMaybe<int>, std::__1::unique_ptr<std::__1::vector<v8_inspector::String16, std::__1::allocator<v8_inspector::String16> >, std::__1::default_delete<std::__1::vector<v8_inspector::String16, std::__1::allocator<v8_inspector::String16> > > >*)",93957342634912,93957342636037],["v8_inspector::V8RuntimeAgentImpl::getHeapUsage(double*, double*)",93957342636208,93957342636371],["v8_inspector::V8RuntimeAgentImpl::addBinding(v8_inspector::String16 const&, v8_crdtp::detail::ValueMaybe<int>, v8_crdtp::detail::ValueMaybe<v8_inspector::String16>)",93957342636416,93957342637767],["v8_inspector::V8RuntimeAgentImpl::bindingCallback(v8::FunctionCallbackInfo<v8::Value> const&)",93957342638032,93957342638447],["v8_inspector::V8RuntimeAgentImpl::addBindings(v8_inspector::InspectedContext*)",93957342638960,93957342639902],["v8_inspector::V8RuntimeAgentImpl::enable()",93957342640224,93957342640574],["v8_inspector::V8RuntimeAgentImpl::reset()",93957342640960,93957342641114],["v8::internal::compiler::AccessBuilder::ForJSCollectionIteratorIndex()",93957342826800,93957342826881],["v8::internal::compiler::AccessBuilder::ForJSRegExpData()",93957342828640,93957342828703],["v8::internal::compiler::AccessBuilder::ForModuleRegularExports()",93957342829552,93957342829615],["v8::internal::compiler::AccessBuilder::ForSeqOneByteStringCharacter()",93957342830112,93957342830171],["v8::internal::compiler::AccessBuilder::ForJSStringIteratorIndex()",93957342830560,93957342830641],["v8::internal::compiler::AccessBuilder::ForFixedArrayElement()",93957342830896,93957342830941],["v8::internal::compiler::AccessBuilder::ForFixedDoubleArrayElement()",93957342831216,93957342831278],["v8::internal::compiler::AccessBuilder::ForHashTableBaseNumberOfElements()",93957342831584,93957342831661],["v8::internal::compiler::AccessBuilder::ForOrderedHashMapOrSetNumberOfDeletedElements()",93957342831808,93957342831889],["v8::internal::compiler::AccessBuilder::ForOrderedHashMapEntryValue()",93957342832000,93957342832045],["v8::internal::compiler::AccessBuilder::ForDictionaryObjectHashIndex()",93957342832128,93957342832205],["v8::internal::compiler::AccessBuilder::ForFeedbackCellInterruptBudget()",93957342832272,93957342832353],["v8::internal::compiler::AccessBuilder::ForFeedbackVectorClosureFeedbackCellArray()",93957342832464,93957342832528],["v8::internal::compiler::PropertyAccessInfo::Invalid(v8::internal::Zone*)",93957342832656,93957342832752],["v8::internal::compiler::PropertyAccessInfo::DataField(v8::internal::Zone*, v8::internal::Handle<v8::internal::Map>, v8::internal::ZoneVector<v8::internal::compiler::CompilationDependency const*>&&, v8::internal::FieldIndex, v8::internal::Representation, v8::internal::compiler::Type, v8::internal::Handle<v8::internal::Map>, v8::internal::MaybeHandle<v8::internal::Map>, v8::internal::MaybeHandle<v8::internal::JSObject>, v8::internal::MaybeHandle<v8::internal::Map>)",93957342833072,93957342833466],["v8::internal::compiler::PropertyAccessInfo::FastAccessorConstant(v8::internal::Zone*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Object>, v8::internal::MaybeHandle<v8::internal::JSObject>)",93957342833872,93957342834197],["v8::internal::compiler::MachineOperatorBuilder::Int64Div()",93957344479712,93957344479727],["v8::internal::compiler::MachineOperatorBuilder::Float32Abs()",93957344480480,93957344480495],["v8::internal::compiler::MachineOperatorBuilder::Float64Log2()",93957344480864,93957344480879],["v8::internal::compiler::MachineOperatorBuilder::Float32Equal()",93957344481120,93957344481135],["v8::internal::compiler::MachineOperatorBuilder::Int32PairAdd()",93957344481312,93957344481327],["v8::internal::compiler::MachineOperatorBuilder::F64x2Neg()",93957344481440,93957344481455],["v8::internal::compiler::MachineOperatorBuilder::F64x2Eq()",93957344481568,93957344481583],["v8::internal::compiler::MachineOperatorBuilder::F64x2Ceil()",93957344481696,93957344481711],["v8::internal::compiler::MachineOperatorBuilder::F64x2PromoteLowF32x4()",93957344481792,93957344481807],["v8::internal::compiler::MachineOperatorBuilder::F32x4Abs()",93957344481856,93957344481871],["v8::internal::compiler::MachineOperatorBuilder::F32x4RecipSqrtApprox()",93957344481920,93957344481935],["v8::internal::compiler::MachineOperatorBuilder::F32x4Div()",93957344481984,93957344481999],["v8::internal::compiler::MachineOperatorBuilder::F32x4Ne()",93957344482048,93957344482063],["v8::internal::compiler::MachineOperatorBuilder::F32x4Qfms()",93957344482112,93957344482127],["v8::internal::compiler::MachineOperatorBuilder::F32x4Floor()",93957344482176,93957344482191],["v8::internal::compiler::MachineOperatorBuilder::I64x2Splat()",93957344482240,93957344482255],["v8::internal::compiler::MachineOperatorBuilder::I64x2Neg()",93957344482288,93957344482303],["v8::internal::compiler::MachineOperatorBuilder::I64x2SConvertI32x4High()",93957344482320,93957344482335],["v8::internal::compiler::MachineOperatorBuilder::I64x2UConvertI32x4High()",93957344482352,93957344482367],["v8::internal::compiler::MachineOperatorBuilder::I64x2Shl()",93957344482384,93957344482399],["v8::internal::compiler::MachineOperatorBuilder::I64x2Add()",93957344482416,93957344482431],["v8::internal::compiler::MachineOperatorBuilder::I64x2Mul()",93957344482448,93957344482463],["v8::internal::compiler::MachineOperatorBuilder::I64x2Ne()",93957344482480,93957344482495],["v8::internal::compiler::MachineOperatorBuilder::I64x2GeS()",93957344482512,93957344482527],["v8::internal::compiler::MachineOperatorBuilder::I64x2ExtMulLowI32x4S()",93957344482544,93957344482559],["v8::internal::compiler::MachineOperatorBuilder::I64x2ExtMulLowI32x4U()",93957344482576,93957344482591],["v8::internal::compiler::MachineOperatorBuilder::I32x4Splat()",93957344482608,93957344482623],["v8::internal::compiler::MachineOperatorBuilder::I32x4SConvertI16x8Low()",93957344482640,93957344482655],["v8::internal::compiler::MachineOperatorBuilder::I32x4Neg()",93957344482672,93957344482687],["v8::internal::compiler::MachineOperatorBuilder::I32x4ShrS()",93957344482704,93957344482719],["v8::internal::compiler::MachineOperatorBuilder::I32x4Sub()",93957344482736,93957344482751],["v8::internal::compiler::MachineOperatorBuilder::I32x4MinS()",93957344482768,93957344482783],["__islower_l",139871563475360,139871563475377],["__ctype_tolower_loc",139871563475696,139871563475713],["gettext",139871563477056,139871563477071],["textdomain",139871563491168,139871563491447],["catclose",139871563497360,139871563497445],["__isinfl",139871563499600,139871563499666],["__finitel",139871563499744,139871563499759],["modfl",139871563499792,139871563500122],["xdr_union",139871564504336,139871564504479],["xdr_u_quad_t",139871564505360,139871564505365],["xdr_int16_t",139871564505536,139871564505674],["xdr_int8_t",139871564505824,139871564505954],["tanf128",139871565616864,139871565617125],["lroundf128",139871565625952,139871565626271],["__finitef128",139871565627200,139871565627231],["__signbitf128",139871565628272,139871565628279],["totalorderf128",139871565635024,139871565635134],["totalordermagf128",139871565635168,139871565635253],["getpayloadf128",139871565635296,139871565635469],["setpayloadsigf128",139871565635760,139871565636047],["v8::AsyncHooks::Deinitialize()",93957335203536,93957335203608],["std::__1::__split_buffer<int*, std::__1::allocator<int*> >::push_back(int*&&)",93957335204320,93957335205175],["v8::Worker::WorkerThread::Run()",93957335286960,93957335287067],["v8::Shell::SetOptions(int, char**)",93957335290192,93957335293745],["v8::ShellOptions::DisallowReassignment<v8::ShellOptions::CodeCacheOptions, true>::operator=(v8::ShellOptions::CodeCacheOptions)",93957335293888,93957335293941],["v8::Shell::RunMain(v8::Isolate*, bool)",93957335294000,93957335295343],["v8::internal::ConcurrentAllocator::MakeLinearAllocationAreaIterable()",93957336777696,93957336777710],["v8::internal::Worklist<v8::internal::EphemeronHashTable, 128>::FlushToGlobal(int)",93957336805776,93957336806020],["v8::internal::ConcurrentMarking::FlushNativeContexts(v8::internal::NativeContextStats*)",93957336806640,93957336806848],["v8::internal::ConcurrentMarking::PauseScope::PauseScope(v8::internal::ConcurrentMarking*)",93957336808000,93957336808070],["v8::internal::MarkingVisitorBase<v8::internal::ConcurrentMarkingVisitor, v8::internal::ConcurrentMarkingState>::VisitPointers(v8::internal::HeapObject, v8::internal::CompressedMaybeObjectSlot, v8::internal::CompressedMaybeObjectSlot)",93957336808224,93957336808362],["v8::internal::MarkingVisitorBase<v8::internal::ConcurrentMarkingVisitor, v8::internal::ConcurrentMarkingState>::VisitPointer(v8::internal::HeapObject, v8::internal::CompressedMaybeObjectSlot)",93957336808480,93957336808618],["v8::internal::ObjectVisitor::VisitEphemeron(v8::internal::HeapObject, int, v8::internal::CompressedObjectSlot, v8::internal::CompressedObjectSlot)",93957336808656,93957336808712],["v8::internal::MarkingVisitorBase<v8::internal::ConcurrentMarkingVisitor, v8::internal::ConcurrentMarkingState>::VisitEmbeddedPointer(v8::internal::Code, v8::internal::RelocInfo*)",93957336809072,93957336809751],["v8::internal::Heap::SetUpFromReadOnlyHeap(v8::internal::ReadOnlyHeap*)",93957337026304,93957337026332],["v8::internal::Heap::SetUpSpaces()",93957337026672,93957337028573],["v8::internal::Heap::NotifyDeserializationComplete()",93957337028656,93957337028872],["v8::internal::Heap::NotifyOldGenerationExpansion(v8::internal::AllocationSpace, v8::internal::MemoryChunk*)",93957337029072,93957337029388],["v8::internal::EvacuationAllocator::NewLocalAllocationBuffer()",93957337323024,93957337323407],["v8::internal::LiveObjectRange<(v8::internal::LiveObjectIterationMode)0>::iterator::AdvanceToNextValidObject()",93957337334384,93957337334930],["v8::internal::PageEvacuationJob::~PageEvacuationJob()",93957337340800,93957337340883],["void v8::internal::CallIterateBody::apply<v8::internal::WeakFixedArray::BodyDescriptor, v8::internal::PointersUpdatingVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::PointersUpdatingVisitor*)",93957337346000,93957337346116],["void v8::internal::JSWeakCollection::BodyDescriptorImpl::IterateBody<v8::internal::ObjectVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::ObjectVisitor*)",93957337347152,93957337347348],["void v8::internal::WeakCell::BodyDescriptor::IterateBody<v8::internal::ObjectVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::ObjectVisitor*)",93957337348048,93957337348157],["void v8::internal::PreparseData::BodyDescriptor::IterateBody<v8::internal::ObjectVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::ObjectVisitor*)",93957337348592,93957337348645],["void v8::internal::SuffixRangeWeakBodyDescriptor<20>::IterateBody<v8::internal::PointersUpdatingVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::PointersUpdatingVisitor*)",93957337349040,93957337349156],["v8::internal::RememberedSetUpdatingItem<v8::internal::MajorNonAtomicMarkingState, (v8::internal::GarbageCollector)1>::UpdateTypedPointers()",93957337350080,93957337350547],["unsigned long v8::internal::SlotSet::Iterate<v8::internal::RememberedSetUpdatingItem<v8::internal::MajorNonAtomicMarkingState, (v8::internal::GarbageCollector)1>::UpdateUntypedPointers()::{lambda(v8::internal::CompressedMaybeObjectSlot)#3}, v8::internal::SlotSet::Iterate<{lambda(v8::internal::CompressedMaybeObjectSlot)#3}>(unsigned long, unsigned long, unsigned long, {lambda(v8::internal::CompressedMaybeObjectSlot)#3}, v8::internal::SlotSet::EmptyBucketMode)::{lambda(unsigned long)#1}>(unsigned long, unsigned long, unsigned long, v8::internal::SlotSet::Iterate, v8::internal::SlotSet::Iterate<{lambda(v8::internal::CompressedMaybeObjectSlot)#3}>(unsigned long, unsigned long, unsigned long, {lambda(v8::internal::CompressedMaybeObjectSlot)#3}, v8::internal::SlotSet::EmptyBucketMode)::{lambda(unsigned long)#1})",93957337351680,93957337352599],["v8::internal::SlotCallbackResult v8::internal::UpdateTypedSlotHelper::UpdateCodeTarget<v8::internal::RememberedSetUpdatingItem<v8::internal::MajorNonAtomicMarkingState, (v8::internal::GarbageCollector)1>::UpdateTypedPointers()::{lambda(v8::internal::FullMaybeObjectSlot)#1}>(v8::internal::RelocInfo*, v8::internal::RememberedSetUpdatingItem<v8::internal::MajorNonAtomicMarkingState, (v8::internal::GarbageCollector)1>::UpdateTypedPointers()::{lambda(v8::internal::FullMaybeObjectSlot)#1})",93957337353456,93957337353783],["v8::internal::SlotCallbackResult v8::internal::UpdateTypedSlotHelper::UpdateTypedSlot<v8::internal::RememberedSetUpdatingItem<v8::internal::MajorNonAtomicMarkingState, (v8::internal::GarbageCollector)1>::UpdateTypedPointers()::{lambda(v8::internal::SlotType, unsigned long)#2}::operator()(v8::internal::SlotType, unsigned long) const::{lambda(v8::internal::FullMaybeObjectSlot)#1}>(v8::internal::Heap*, v8::internal::SlotType, unsigned long, v8::internal::RememberedSetUpdatingItem<v8::internal::MajorNonAtomicMarkingState, (v8::internal::GarbageCollector)1>::UpdateTypedPointers()::{lambda(v8::internal::SlotType, unsigned long)#2}::operator()(v8::internal::SlotType, unsigned long) const::{lambda(v8::internal::FullMaybeObjectSlot)#1})",93957337354192,93957337354559],["v8::internal::SlotCallbackResult v8::internal::UpdateTypedSlotHelper::UpdateEmbeddedPointer<v8::internal::RememberedSetUpdatingItem<v8::internal::MajorNonAtomicMarkingState, (v8::internal::GarbageCollector)1>::UpdateTypedPointers()::{lambda(v8::internal::SlotType, unsigned long)#2}::operator()(v8::internal::SlotType, unsigned long) const::{lambda(v8::internal::FullMaybeObjectSlot)#1}>(v8::internal::Heap*, v8::internal::RelocInfo*, v8::internal::RememberedSetUpdatingItem<v8::internal::MajorNonAtomicMarkingState, (v8::internal::GarbageCollector)1>::UpdateTypedPointers()::{lambda(v8::internal::SlotType, unsigned long)#2}::operator()(v8::internal::SlotType, unsigned long) const::{lambda(v8::internal::FullMaybeObjectSlot)#1})",93957337354736,93957337354967],["v8::internal::PointersUpdatingJob::~PointersUpdatingJob()",93957337356368,93957337356516],["v8::internal::PointersUpdatingJob::Run(v8::JobDelegate*)",93957337356688,93957337357745],["v8::internal::LiveObjectRange<(v8::internal::LiveObjectIterationMode)1>::iterator::AdvanceToNextValidObject()",93957337357808,93957337358494],["v8::internal::ExperimentalRegExp::OneshotExecRaw(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSRegExp>, v8::internal::Handle<v8::internal::String>, int*, int, int)",93957339750096,93957339750899],["v8::internal::RegExpUnparser::VisitAlternative(v8::internal::RegExpAlternative*, void*)",93957339752560,93957339752719],["v8::internal::RegExpDisjunction::RegExpDisjunction(v8::internal::ZoneList<v8::internal::RegExpTree*>*)",93957339754400,93957339754557],["v8::internal::RegExpBytecodeGenerator::~RegExpBytecodeGenerator()",93957339755104,93957339755190],["v8::internal::RegExpBytecodeGenerator::ReadCurrentPositionFromRegister(int)",93957339755664,93957339755726],["v8::internal::RegExpBytecodeGenerator::SetRegister(int, int)",93957339755920,93957339756032],["v8::internal::RegExpBytecodeGenerator::Backtrack()",93957339756272,93957339756342],["v8::internal::RegExpBytecodeGenerator::Fail()",93957339757056,93957339757111],["v8::internal::RegExpBytecodeGenerator::LoadCurrentCharacterImpl(int, v8::internal::Label*, bool, int, int)",93957339757472,93957339757963],["v8::internal::RegExpBytecodeGenerator::CheckCharacterGT(unsigned short, v8::internal::Label*)",93957339758176,93957339758379],["v8::internal::RegExpBytecodeGenerator::CheckAtStart(int, v8::internal::Label*)",93957339758672,93957339758875],["v8::internal::RegExpBytecodeGenerator::CheckNotCharacter(unsigned int, v8::internal::Label*)",93957339759088,93957339759364],["v8::internal::RegExpBytecodeGenerator::CheckNotCharacterAfterAnd(unsigned int, unsigned int, v8::internal::Label*)",93957339759712,93957339760036],["v8::internal::RegExpBytecodeGenerator::CheckCharacterInRange(unsigned short, unsigned short, v8::internal::Label*)",93957339760352,93957339760643],["v8::internal::RegExpBytecodeGenerator::CheckBitInTable(v8::internal::Handle<v8::internal::ByteArray>, v8::internal::Label*)",93957339760960,93957339761389],["v8::internal::RegExpBytecodeGenerator::CheckNotBackReferenceIgnoreCase(int, bool, bool, v8::internal::Label*)",93957339761616,93957339761841],["v8_inspector::V8DebuggerAgentImpl::setInstrumentationBreakpoint(v8_inspector::String16 const&, v8_inspector::String16*)",93957342483296,93957342483826],["v8_inspector::V8DebuggerAgentImpl::currentCallFrames(std::__1::unique_ptr<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Debugger::CallFrame, std::__1::default_delete<v8_inspector::protocol::Debugger::CallFrame> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Debugger::CallFrame, std::__1::default_delete<v8_inspector::protocol::Debugger::CallFrame> > > >, std::__1::default_delete<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Debugger::CallFrame, std::__1::default_delete<v8_inspector::protocol::Debugger::CallFrame> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Debugger::CallFrame, std::__1::default_delete<v8_inspector::protocol::Debugger::CallFrame> > > > > >*)",93957342495472,93957342500150],["v8_inspector::V8DebuggerAgentImpl::schedulePauseOnNextStatement(v8_inspector::String16 const&, std::__1::unique_ptr<v8_inspector::protocol::DictionaryValue, std::__1::default_delete<v8_inspector::protocol::DictionaryValue> >)",93957342503456,93957342503615],["v8_inspector::V8DebuggerAgentImpl::stepOver(v8_crdtp::detail::PtrMaybe<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Debugger::LocationRange, std::__1::default_delete<v8_inspector::protocol::Debugger::LocationRange> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Debugger::LocationRange, std::__1::default_delete<v8_inspector::protocol::Debugger::LocationRange> > > > >)",93957342504320,93957342504877],["v8_inspector::V8DebuggerAgentImpl::stepOut()",93957342507888,93957342508111],["v8_inspector::V8DebuggerAgentImpl::setPauseOnExceptions(v8_inspector::String16 const&)",93957342508160,93957342509085],["v8_inspector::V8DebuggerAgentImpl::setVariableValue(int, v8_inspector::String16 const&, std::__1::unique_ptr<v8_inspector::protocol::Runtime::CallArgument, std::__1::default_delete<v8_inspector::protocol::Runtime::CallArgument> >, v8_inspector::String16 const&)",93957342510320,93957342511403],["v8_inspector::V8DebuggerAgentImpl::setAsyncCallStackDepth(int)",93957342512368,93957342512586],["v8_inspector::V8InspectorSessionImpl::unwrapObject(std::__1::unique_ptr<v8_inspector::StringBuffer, std::__1::default_delete<v8_inspector::StringBuffer> >*, v8_inspector::StringView, v8::Local<v8::Value>*, v8::Local<v8::Context>*, std::__1::unique_ptr<v8_inspector::StringBuffer, std::__1::default_delete<v8_inspector::StringBuffer> >*)",93957342588128,93957342588512],["void std::__1::__function::__policy_invoker<void (v8_inspector::InspectedContext*)>::__call_impl<std::__1::__function::__default_alloc_func<v8_inspector::V8InspectorSessionImpl::setCustomObjectFormatterEnabled(bool)::$_2, void (v8_inspector::InspectedContext*)> >(std::__1::__function::__policy_storage const*, v8_inspector::InspectedContext*)",93957342594912,93957342594970],["v8_inspector::V8ProfilerAgentImpl::enable()",93957342601264,93957342601366],["v8_inspector::V8ProfilerAgentImpl::takePreciseCoverage(std::__1::unique_ptr<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Profiler::ScriptCoverage, std::__1::default_delete<v8_inspector::protocol::Profiler::ScriptCoverage> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Profiler::ScriptCoverage, std::__1::default_delete<v8_inspector::protocol::Profiler::ScriptCoverage> > > >, std::__1::default_delete<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Profiler::ScriptCoverage, std::__1::default_delete<v8_inspector::protocol::Profiler::ScriptCoverage> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Profiler::ScriptCoverage, std::__1::default_delete<v8_inspector::protocol::Profiler::ScriptCoverage> > > > > >*, double*)",93957342604528,93957342604872],["v8_inspector::V8ProfilerAgentImpl::takeTypeProfile(std::__1::unique_ptr<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Profiler::ScriptTypeProfile, std::__1::default_delete<v8_inspector::protocol::Profiler::ScriptTypeProfile> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Profiler::ScriptTypeProfile, std::__1::default_delete<v8_inspector::protocol::Profiler::ScriptTypeProfile> > > >, std::__1::default_delete<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Profiler::ScriptTypeProfile, std::__1::default_delete<v8_inspector::protocol::Profiler::ScriptTypeProfile> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Profiler::ScriptTypeProfile, std::__1::default_delete<v8_inspector::protocol::Profiler::ScriptTypeProfile> > > > > >*)",93957342610976,93957342615744],["v8_inspector::V8ProfilerAgentImpl::enableRuntimeCallStats()",93957342616736,93957342616887],["v8_inspector::(anonymous namespace)::flattenNodesTree(v8_inspector::V8InspectorImpl*, v8::CpuProfileNode const*, std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Profiler::ProfileNode, std::__1::default_delete<v8_inspector::protocol::Profiler::ProfileNode> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Profiler::ProfileNode, std::__1::default_delete<v8_inspector::protocol::Profiler::ProfileNode> > > >*)",93957342618448,93957342619826],["v8_inspector::V8Regex::match(v8_inspector::String16 const&, int, int*) const",93957342621136,93957342621709],["v8_inspector::V8RuntimeAgentImpl::~V8RuntimeAgentImpl()",93957342621968,93957342621996],["v8_inspector::(anonymous namespace)::ensureContext(v8_inspector::V8InspectorImpl*, int, v8_crdtp::detail::ValueMaybe<int>, v8_crdtp::detail::ValueMaybe<v8_inspector::String16>, int*)",93957342624096,93957342624679],["v8_inspector::V8RuntimeAgentImpl::callFunctionOn(v8_inspector::String16 const&, v8_crdtp::detail::ValueMaybe<v8_inspector::String16>, v8_crdtp::detail::PtrMaybe<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::CallArgument, std::__1::default_delete<v8_inspector::protocol::Runtime::CallArgument> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::CallArgument, std::__1::default_delete<v8_inspector::protocol::Runtime::CallArgument> > > > >, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<int>, v8_crdtp::detail::ValueMaybe<v8_inspector::String16>, std::__1::unique_ptr<v8_inspector::protocol::Runtime::Backend::CallFunctionOnCallback, std::__1::default_delete<v8_inspector::protocol::Runtime::Backend::CallFunctionOnCallback> >)",93957342625264,93957342626928],["v8_inspector::V8RuntimeAgentImpl::getProperties(v8_inspector::String16 const&, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<bool>, std::__1::unique_ptr<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::PropertyDescriptor, std::__1::default_delete<v8_inspector::protocol::Runtime::PropertyDescriptor> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::PropertyDescriptor, std::__1::default_delete<v8_inspector::protocol::Runtime::PropertyDescriptor> > > >, std::__1::default_delete<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::PropertyDescriptor, std::__1::default_delete<v8_inspector::protocol::Runtime::PropertyDescriptor> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::PropertyDescriptor, std::__1::default_delete<v8_inspector::protocol::Runtime::PropertyDescriptor> > > > > >*, v8_crdtp::detail::PtrMaybe<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::InternalPropertyDescriptor, std::__1::default_delete<v8_inspector::protocol::Runtime::InternalPropertyDescriptor> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::InternalPropertyDescriptor, std::__1::default_delete<v8_inspector::protocol::Runtime::InternalPropertyDescriptor> > > > >*, v8_crdtp::detail::PtrMaybe<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::PrivatePropertyDescriptor, std::__1::default_delete<v8_inspector::protocol::Runtime::PrivatePropertyDescriptor> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::PrivatePropertyDescriptor, std::__1::default_delete<v8_inspector::protocol::Runtime::PrivatePropertyDescriptor> > > > >*, v8_crdtp::detail::PtrMaybe<v8_inspector::protocol::Runtime::ExceptionDetails>*)",93957342628560,93957342629695],["v8_inspector::V8RuntimeAgentImpl::releaseObject(v8_inspector::String16 const&)",93957342629824,93957342630025],["v8_inspector::V8RuntimeAgentImpl::runIfWaitingForDebugger()",93957342630080,93957342630128],["v8_inspector::V8RuntimeAgentImpl::setMaxCallStackSizeToCapture(int)",93957342630336,93957342630469],["v8_inspector::V8RuntimeAgentImpl::compileScript(v8_inspector::String16 const&, v8_inspector::String16 const&, bool, v8_crdtp::detail::ValueMaybe<int>, v8_crdtp::detail::ValueMaybe<v8_inspector::String16>*, v8_crdtp::detail::PtrMaybe<v8_inspector::protocol::Runtime::ExceptionDetails>*)",93957342630544,93957342632346],["Cr_z_crc32_sse42_simd_",93957342823120,93957342823837],["v8::internal::compiler::AccessBuilder::ForJSGeneratorObjectContinuation()",93957342827344,93957342827421],["v8::internal::compiler::AccessBuilder::ForJSTypedArrayBasePointer()",93957342828352,93957342828415],["v8::internal::compiler::AccessBuilder::ForSloppyArgumentsElementsArguments()",93957342828928,93957342828992],["v8::internal::compiler::AccessBuilder::ForMapPrototype()",93957342829424,93957342829488],["v8::internal::compiler::AccessBuilder::ForNameRawHashField()",93957342829680,93957342829743],["v8::internal::compiler::AccessBuilder::ForSlicedStringOffset()",93957342829968,93957342830045],["v8::internal::compiler::AccessBuilder::ForJSGlobalProxyNativeContext()",93957342830240,93957342830303],["v8::internal::compiler::AccessBuilder::ForJSArrayIteratorKind()",93957342830464,93957342830545],["v8::internal::compiler::AccessBuilder::ForFixedArraySlot(unsigned long, v8::internal::compiler::WriteBarrierKind)",93957342830656,93957342830722],["v8::internal::compiler::AccessBuilder::ForContextSlotKnownPointer(unsigned long)",93957342830816,93957342830883],["v8::internal::compiler::AccessBuilder::ForSloppyArgumentsElementsMappedEntry()",93957342830944,93957342830989],["v8::internal::compiler::AccessBuilder::ForStackArgument()",93957342831168,93957342831212],["v8::internal::compiler::AccessBuilder::ForEnumCacheKeys()",93957342831280,93957342831343],["v8::internal::compiler::AccessBuilder::ForTypedArrayElement(v8::internal::ExternalArrayType, bool, v8::internal::LoadSensitivity)",93957342831408,93957342831577],["v8::internal::compiler::AccessBuilder::ForHashTableBaseNumberOfDeletedElement()",93957342831664,93957342831741],["v8::internal::compiler::MachineOperatorBuilder::MachineOperatorBuilder(v8::internal::Zone*, v8::internal::MachineRepresentation, v8::base::Flags<v8::internal::compiler::MachineOperatorBuilder::Flag, unsigned int>, v8::internal::compiler::MachineOperatorBuilder::AlignmentRequirements)",93957344478496,93957344478641],["v8::internal::compiler::MachineOperatorBuilder::ChangeFloat64ToUint32()",93957344479968,93957344479983],["v8::internal::compiler::MachineOperatorBuilder::BitcastFloat64ToInt64()",93957344480352,93957344480367],["v8::internal::compiler::MachineOperatorBuilder::Float32Min()",93957344480608,93957344480623],["v8::internal::compiler::MachineOperatorBuilder::Float64Exp()",93957344480800,93957344480815],["v8::internal::compiler::MachineOperatorBuilder::Float64Neg()",93957344480928,93957344480943],["v8::internal::compiler::MachineOperatorBuilder::Float64Sinh()",93957344481056,93957344481071],["v8::internal::compiler::MachineOperatorBuilder::Float64LessThan()",93957344481184,93957344481199],["v8::internal::compiler::MachineOperatorBuilder::LoadStackCheckOffset()",93957344481280,93957344481295],["v8::internal::compiler::MachineOperatorBuilder::Int32PairMul()",93957344481344,93957344481359],["v8::internal::compiler::MachineOperatorBuilder::F64x2Splat()",93957344481408,93957344481423],["v8::internal::compiler::MachineOperatorBuilder::F64x2Add()",93957344481472,93957344481487],["v8::internal::compiler::MachineOperatorBuilder::F64x2Min()",93957344481536,93957344481551],["v8::internal::compiler::MachineOperatorBuilder::F64x2Lt()",93957344481600,93957344481615],["v8::internal::compiler::MachineOperatorBuilder::F64x2Pmin()",93957344481664,93957344481679],["v8::internal::compiler::MachineOperatorBuilder::F64x2Trunc()",93957344481728,93957344481743],["v8::internal::compiler::MachineOperatorBuilder::F64x2ConvertLowI32x4U()",93957344481776,93957344481791],["v8::internal::compiler::MachineOperatorBuilder::F32x4Splat()",93957344481808,93957344481823],["v8::internal::compiler::MachineOperatorBuilder::F32x4UConvertI32x4()",93957344481840,93957344481855],["v8::internal::compiler::MachineOperatorBuilder::F32x4Neg()",93957344481872,93957344481887],["v8::internal::compiler::MachineOperatorBuilder::F32x4RecipApprox()",93957344481904,93957344481919],["v8::internal::compiler::MachineOperatorBuilder::F32x4Add()",93957344481936,93957344481951],["v8::internal::compiler::MachineOperatorBuilder::F32x4Mul()",93957344481968,93957344481983],["v8::internal::compiler::MachineOperatorBuilder::F32x4Min()",93957344482000,93957344482015],["v8::internal::compiler::MachineOperatorBuilder::F32x4Eq()",93957344482032,93957344482047],["v8::internal::compiler::MachineOperatorBuilder::F32x4Lt()",93957344482064,93957344482079],["v8::internal::compiler::MachineOperatorBuilder::F32x4Qfma()",93957344482096,93957344482111],["v8::internal::compiler::MachineOperatorBuilder::F32x4Pmin()",93957344482128,93957344482143],["v8::internal::compiler::MachineOperatorBuilder::F32x4Ceil()",93957344482160,93957344482175],["v8::internal::compiler::MachineOperatorBuilder::F32x4Trunc()",93957344482192,93957344482207],["v8::internal::compiler::MachineOperatorBuilder::F32x4DemoteF64x2Zero()",93957344482224,93957344482239],["v8::internal::compiler::MachineOperatorBuilder::I64x2SplatI32Pair()",93957344482256,93957344482271],["_toupper",139871563475184,139871563475213],["__isspace_l",139871563475472,139871563475489],["__ctype_b_loc",139871563475632,139871563475649],["bindtextdomain",139871563476928,139871563476971],["__dgettext",139871563477040,139871563477050],["dcngettext",139871563482896,139871563482912],["ngettext",139871563482928,139871563482950],["catopen",139871563496704,139871563497205],["xdr_enum",139871564503728,139871564503856],["xdr_wrapstring",139871564504832,139871564504859],["xdr_uint64_t",139871564505120,139871564505346],["xdr_int32_t",139871564505376,139871564505447],["erff128",139871565610832,139871565611837],["remquof128",139871565618000,139871565618926],["lrintf128",139871565624944,139871565625496],["__exp10f128_finite",139871565626592,139871565626998],["__isnanf128",139871565627136,139871565627193],["copysignf128",139871565627232,139871565627253],["frexpf128",139871565628064,139871565628261],["ldexpf128",139871565628288,139871565628571],["v8::EnableHook(v8::FunctionCallbackInfo<v8::Value> const&)",93957335203472,93957335203492],["v8::UnwrapHook(v8::FunctionCallbackInfo<v8::Value> const&)",93957335203616,93957335203873],["v8::InspectorClient::InspectorClient(v8::Local<v8::Context>, bool)",93957335285568,93957335286240],["v8::Shell::RemoveRunningWorker(std::__1::shared_ptr<v8::Worker> const&)",93957335288880,93957335289163],["v8::Worker::PostMessageOut(v8::FunctionCallbackInfo<v8::Value> const&)",93957335289696,93957335290190],["v8::ShellOptions::DisallowReassignment<bool, true>::operator=(bool)",93957335293760,93957335293815],["v8::internal::CollectionBarrier::StopTimeToCollectionTimer()",93957336775936,93957336776282],["v8::internal::ConcurrentAllocator::EnsureLab(v8::internal::AllocationOrigin)",93957336777984,93957336778322],["v8::internal::ConcurrentMarkingVisitor::ProcessEphemeron(v8::internal::HeapObject, v8::internal::HeapObject)",93957336805024,93957336805509],["v8::internal::ConcurrentMarking::RescheduleJobIfNeeded(v8::TaskPriority)",93957336806192,93957336806459],["v8::internal::ConcurrentMarking::IsStopped()",93957336806592,93957336806628],["v8::internal::ConcurrentMarking::FlushMemoryChunkData(v8::internal::MajorNonAtomicMarkingState*)",93957336806848,93957336807330],["v8::internal::ConcurrentMarking::TotalMarkedBytes()",93957336807904,93957336807987],["v8::internal::ConcurrentMarking::PauseScope::~PauseScope()",93957336808080,93957336808106],["v8::internal::YoungGenerationMarkingVisitor::VisitPointer(v8::internal::HeapObject, v8::internal::CompressedObjectSlot)",93957337317728,93957337318008],["void v8::internal::MarkingVisitorBase<v8::internal::MainMarkingVisitor<v8::internal::MajorMarkingState>, v8::internal::MajorMarkingState>::ProcessStrongHeapObject<v8::internal::CompressedHeapObjectSlot>(v8::internal::HeapObject, v8::internal::CompressedHeapObjectSlot, v8::internal::HeapObject)",93957337325296,93957337325613],["int v8::internal::MainMarkingVisitor<v8::internal::MajorMarkingState>::VisitLeftTrimmableArray<v8::internal::FixedArray>(v8::internal::Map, v8::internal::FixedArray)",93957337332640,93957337333015],["void std::__1::vector<std::__1::pair<v8::internal::ParallelWorkItem, v8::internal::MemoryChunk*>, std::__1::allocator<std::__1::pair<v8::internal::ParallelWorkItem, v8::internal::MemoryChunk*> > >::__emplace_back_slow_path<v8::internal::ParallelWorkItem, v8::internal::Page*&>(v8::internal::ParallelWorkItem&&, v8::internal::Page*&)",93957337335424,93957337335698],["void v8::internal::EvacuateVisitorBase::RawMigrateObject<(v8::internal::EvacuateVisitorBase::MigrationMode)1>(v8::internal::EvacuateVisitorBase*, v8::internal::HeapObject, v8::internal::HeapObject, int, v8::internal::AllocationSpace)",93957337338672,93957337340719],["v8::internal::PageEvacuationJob::GetMaxConcurrency(unsigned long) const",93957337342048,93957337342088],["v8::internal::LiveObjectRange<(v8::internal::LiveObjectIterationMode)2>::iterator::AdvanceToNextValidObject()",93957337343504,93957337344210],["void v8::internal::WasmArray::BodyDescriptor::IterateBody<v8::internal::ObjectVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::ObjectVisitor*)",93957337346272,93957337346363],["void v8::internal::WasmInstanceObject::BodyDescriptor::IterateBody<v8::internal::ObjectVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::ObjectVisitor*)",93957337346656,93957337347141],["void v8::internal::JSArrayBuffer::BodyDescriptor::IterateBody<v8::internal::ObjectVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::ObjectVisitor*)",93957337347360,93957337347572],["void v8::internal::JSTypedArray::BodyDescriptor::IterateBody<v8::internal::ObjectVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::ObjectVisitor*)",93957337347808,93957337348036],["void v8::internal::JSWeakRef::BodyDescriptor::IterateBody<v8::internal::ObjectVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::ObjectVisitor*)",93957337348160,93957337348404],["void v8::internal::BytecodeArray::BodyDescriptor::IterateBody<v8::internal::ObjectVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::ObjectVisitor*)",93957337348512,93957337348577],["void v8::internal::AllocationSite::BodyDescriptor::IterateBody<v8::internal::ObjectVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::ObjectVisitor*)",93957337348656,93957337348742],["void v8::internal::SuffixRangeWeakBodyDescriptor<12>::IterateBody<v8::internal::PointersUpdatingVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::PointersUpdatingVisitor*)",93957337348912,93957337349028],["v8::internal::RememberedSetUpdatingItem<v8::internal::MajorNonAtomicMarkingState, (v8::internal::GarbageCollector)1>::Process()",93957337349168,93957337349620],["v8::internal::(anonymous namespace)::CompileVisitor::VisitAtom(v8::internal::RegExpAtom*, void*)",93957339733872,93957339734160],["v8::internal::RegExpGroup::Accept(v8::internal::RegExpVisitor*, void*)",93957339751520,93957339751543],["v8::internal::RegExpDisjunction::IsAnchoredAtStart()",93957339752208,93957339752282],["v8::internal::RegExpUnparser::VisitText(v8::internal::RegExpText*, void*)",93957339753408,93957339753600],["v8::internal::RegExpUnparser::VisitEmpty(v8::internal::RegExpEmpty*, void*)",93957339754288,93957339754326],["v8::internal::RegExpTree::CaptureRegisters()",93957339754736,93957339754752],["v8::internal::RegExpBytecodeGenerator::RegExpBytecodeGenerator(v8::internal::Isolate*, v8::internal::Zone*)",93957339754800,93957339755013],["v8::internal::RegExpBytecodeGenerator::PopRegister(int)",93957339755344,93957339755406],["v8::internal::RegExpBytecodeGenerator::ClearRegisters(int, int)",93957339755584,93957339755654],["v8::internal::RegExpBytecodeGenerator::WriteStackPointerToRegister(int)",93957339755728,93957339755790],["v8::internal::RegExpBytecodeGenerator::SetCurrentPositionFromEnd(int)",93957339755856,93957339755918],["v8::internal::RegExpBytecodeGenerator::AdvanceRegister(int, int)",93957339756032,93957339756144],["v8::internal::RegExpBytecodeGenerator::PushCurrentPosition()",93957339756208,93957339756263],["v8::internal::RegExpBytecodeGenerator::GoTo(v8::internal::Label*)",93957339756352,93957339756774],["v8::internal::RegExpBytecodeGenerator::Succeed()",93957339756992,93957339757049],["v8::internal::RegExpBytecodeGenerator::AdvanceCurrentPosition(int)",93957339757120,93957339757255],["v8_inspector::V8DebuggerAgentImpl::setSkipAllPauses(bool)",93957342475424,93957342475536],["v8_inspector::V8DebuggerAgentImpl::getPossibleBreakpoints(std::__1::unique_ptr<v8_inspector::protocol::Debugger::Location, std::__1::default_delete<v8_inspector::protocol::Debugger::Location> >, v8_crdtp::detail::PtrMaybe<v8_inspector::protocol::Debugger::Location>, v8_crdtp::detail::ValueMaybe<bool>, std::__1::unique_ptr<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Debugger::BreakLocation, std::__1::default_delete<v8_inspector::protocol::Debugger::BreakLocation> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Debugger::BreakLocation, std::__1::default_delete<v8_inspector::protocol::Debugger::BreakLocation> > > >, std::__1::default_delete<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Debugger::BreakLocation, std::__1::default_delete<v8_inspector::protocol::Debugger::BreakLocation> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Debugger::BreakLocation, std::__1::default_delete<v8_inspector::protocol::Debugger::BreakLocation> > > > > >*)",93957342486240,93957342489609],["v8_inspector::V8DebuggerAgentImpl::searchInContent(v8_inspector::String16 const&, v8_inspector::String16 const&, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<bool>, std::__1::unique_ptr<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Debugger::SearchMatch, std::__1::default_delete<v8_inspector::protocol::Debugger::SearchMatch> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Debugger::SearchMatch, std::__1::default_delete<v8_inspector::protocol::Debugger::SearchMatch> > > >, std::__1::default_delete<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Debugger::SearchMatch, std::__1::default_delete<v8_inspector::protocol::Debugger::SearchMatch> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Debugger::SearchMatch, std::__1::default_delete<v8_inspector::protocol::Debugger::SearchMatch> > > > > >*)",93957342493664,93957342494273],["v8_inspector::V8DebuggerAgentImpl::restartFrame(v8_inspector::String16 const&, std::__1::unique_ptr<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Debugger::CallFrame, std::__1::default_delete<v8_inspector::protocol::Debugger::CallFrame> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Debugger::CallFrame, std::__1::default_delete<v8_inspector::protocol::Debugger::CallFrame> > > >, std::__1::default_delete<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Debugger::CallFrame, std::__1::default_delete<v8_inspector::protocol::Debugger::CallFrame> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Debugger::CallFrame, std::__1::default_delete<v8_inspector::protocol::Debugger::CallFrame> > > > > >*, v8_crdtp::detail::PtrMaybe<v8_inspector::protocol::Runtime::StackTrace>*, v8_crdtp::detail::PtrMaybe<v8_inspector::protocol::Runtime::StackTraceId>*)",93957342500480,93957342501324],["v8_inspector::V8DebuggerAgentImpl::pushBreakDetails(v8_inspector::String16 const&, std::__1::unique_ptr<v8_inspector::protocol::DictionaryValue, std::__1::default_delete<v8_inspector::protocol::DictionaryValue> >)",93957342502672,93957342503446],["v8_inspector::V8DebuggerAgentImpl::cancelPauseOnNextStatement()",93957342503616,93957342503792],["v8_inspector::V8DebuggerAgentImpl::resume(v8_crdtp::detail::ValueMaybe<bool>)",93957342504064,93957342504313],["v8_inspector::V8DebuggerAgentImpl::processSkipList(std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Debugger::LocationRange, std::__1::default_delete<v8_inspector::protocol::Debugger::LocationRange> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Debugger::LocationRange, std::__1::default_delete<v8_inspector::protocol::Debugger::LocationRange> > > >*)",93957342504880,93957342507266],["v8_inspector::V8InspectorSessionImpl::~V8InspectorSessionImpl()",93957342585792,93957342586548],["v8_inspector::V8InspectorSessionImpl::state()",93957342590464,93957342590492],["v8_inspector::V8InspectorSessionImpl::searchInTextByLines(v8_inspector::StringView, v8_inspector::StringView, bool, bool)",93957342594288,93957342594722],["v8_inspector::V8ProfilerAgentImpl::~V8ProfilerAgentImpl()",93957342596016,93957342596270],["v8_inspector::V8ProfilerAgentImpl::consoleProfileEnd(v8_inspector::String16 const&)",93957342598992,93957342600444],["v8_inspector::V8ProfilerAgentImpl::setSamplingInterval(int)",93957342602016,93957342602210],["v8_inspector::V8ProfilerAgentImpl::startPreciseCoverage(v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<bool>, double*)",93957342603712,93957342604215],["v8_inspector::V8ProfilerAgentImpl::triggerPreciseCoverageDeltaUpdate(v8_inspector::String16 const&)",93957342610240,93957342610582],["v8_inspector::V8ProfilerAgentImpl::stopTypeProfile()",93957342610864,93957342610971],["v8_inspector::V8ProfilerAgentImpl::enableCounters()",93957342615744,93957342616024],["v8_inspector::V8ProfilerAgentImpl::getCounters(std::__1::unique_ptr<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Profiler::CounterInfo, std::__1::default_delete<v8_inspector::protocol::Profiler::CounterInfo> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Profiler::CounterInfo, std::__1::default_delete<v8_inspector::protocol::Profiler::CounterInfo> > > >, std::__1::default_delete<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Profiler::CounterInfo, std::__1::default_delete<v8_inspector::protocol::Profiler::CounterInfo> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Profiler::CounterInfo, std::__1::default_delete<v8_inspector::protocol::Profiler::CounterInfo> > > > > >*)",93957342616144,93957342616729],["v8_inspector::V8ProfilerAgentImpl::disableRuntimeCallStats()",93957342616896,93957342617148],["v8_inspector::(anonymous namespace)::resourceNameToUrl(v8_inspector::V8InspectorImpl*, v8::Local<v8::String>)",93957342617680,93957342618437],["void std::__1::vector<v8_inspector::V8ProfilerAgentImpl::ProfileDescriptor, std::__1::allocator<v8_inspector::V8ProfilerAgentImpl::ProfileDescriptor> >::__push_back_slow_path<v8_inspector::V8ProfilerAgentImpl::ProfileDescriptor>(v8_inspector::V8ProfilerAgentImpl::ProfileDescriptor&&)",93957342619840,93957342620356],["v8_inspector::V8Regex::V8Regex(v8_inspector::V8InspectorImpl*, v8_inspector::String16 const&, bool, bool)",93957342620640,93957342621130],["v8_inspector::V8RuntimeAgentImpl::V8RuntimeAgentImpl(v8_inspector::V8InspectorSessionImpl*, v8_crdtp::FrontendChannel*, v8_inspector::protocol::DictionaryValue*)",93957342621712,93957342621782],["Cr_z_inflateReset",93957342810768,93957342811007],["v8::internal::compiler::AccessBuilder::ForBigIntBitfield()",93957342826208,93957342826289],["v8::internal::compiler::AccessBuilder::ForJSFunctionCode()",93957342827088,93957342827151],["v8::internal::compiler::AccessBuilder::ForJSAsyncFunctionObjectPromise()",93957342827632,93957342827695],["v8::internal::compiler::AccessBuilder::ForJSArrayBufferViewByteOffset()",93957342828160,93957342828241],["v8::internal::compiler::AccessBuilder::ForJSDataViewDataPointer()",93957342828480,93957342828543],["v8::internal::compiler::AccessBuilder::ForFixedArrayLength()",93957342828768,93957342828849],["v8::internal::compiler::AccessBuilder::ForMapBitField()",93957342829072,93957342829150],["v8::internal::compiler::AccessBuilder::ForMapInstanceType()",93957342829328,93957342829409],["v8::internal::compiler::AccessBuilder::ForMapNativeContext()",93957342829488,93957342829552],["v8::internal::compiler::AccessBuilder::ForModuleRegularImports()",93957342829616,93957342829679],["v8::internal::compiler::AccessBuilder::ForStringLength()",93957342829744,93957342829825],["v8::internal::compiler::AccessBuilder::ForConsStringSecond()",93957342829904,93957342829967],["v8::internal::compiler::AccessBuilder::ForExternalStringResourceData()",93957342830048,93957342830111],["v8::internal::compiler::AccessBuilder::ForSeqTwoByteStringCharacter()",93957342830176,93957342830238],["v8::internal::compiler::AccessBuilder::ForJSArrayIteratorIteratedObject()",93957342830304,93957342830367],["v8::internal::compiler::MachineOperatorReducer::ReduceWord32Comparisons(v8::internal::compiler::Node*)",93957344464992,93957344465374],["v8::internal::compiler::MachineOperatorBuilder::Int32LessThanOrEqual()",93957344479456,93957344479471],["v8::internal::compiler::MachineOperatorBuilder::Word32Clz()",93957344479840,93957344479855],["v8::internal::compiler::MachineOperatorBuilder::ChangeInt64ToFloat64()",93957344480096,93957344480111],["v8::internal::compiler::MachineOperatorBuilder::ChangeUint32ToUint64()",93957344480288,93957344480303],["v8::internal::compiler::MachineOperatorBuilder::SignExtendWord16ToInt32()",93957344480416,93957344480431],["v8::internal::compiler::MachineOperatorBuilder::Float32Div()",93957344480544,93957344480559],["v8::internal::compiler::MachineOperatorBuilder::Float64Asin()",93957344480672,93957344480687],["v8::internal::compiler::MachineOperatorBuilder::Float64Cos()",93957344480768,93957344480783],["v8::internal::compiler::MachineOperatorBuilder::Float64Log()",93957344480832,93957344480847],["v8::internal::compiler::MachineOperatorBuilder::Float64Max()",93957344480896,93957344480911],["v8::internal::compiler::MachineOperatorBuilder::Float64Sub()",93957344480960,93957344480975],["v8::internal::compiler::MachineOperatorBuilder::Float64Pow()",93957344481024,93957344481039],["v8::internal::compiler::MachineOperatorBuilder::Float64Tan()",93957344481088,93957344481103],["v8::internal::compiler::MachineOperatorBuilder::Float32LessThanOrEqual()",93957344481152,93957344481167],["v8::internal::compiler::MachineOperatorBuilder::Float64ExtractLowWord32()",93957344481216,93957344481231],["v8::internal::compiler::MachineOperatorBuilder::Float64InsertHighWord32()",93957344481264,93957344481279],["v8::internal::compiler::MachineOperatorBuilder::LoadFramePointer()",93957344481296,93957344481311],["v8::internal::compiler::MachineOperatorBuilder::Int32PairSub()",93957344481328,93957344481343],["v8::internal::compiler::MachineOperatorBuilder::Word32PairShl()",93957344481360,93957344481375],["v8::internal::compiler::MachineOperatorBuilder::Word32PairSar()",93957344481392,93957344481407],["v8::internal::compiler::MachineOperatorBuilder::F64x2Abs()",93957344481424,93957344481439],["v8::internal::compiler::MachineOperatorBuilder::F64x2Sqrt()",93957344481456,93957344481471],["v8::internal::compiler::MachineOperatorBuilder::F64x2Sub()",93957344481488,93957344481503],["v8::internal::compiler::MachineOperatorBuilder::F64x2Div()",93957344481520,93957344481535],["v8::internal::compiler::MachineOperatorBuilder::F64x2Max()",93957344481552,93957344481567],["v8::internal::compiler::MachineOperatorBuilder::F64x2Ne()",93957344481584,93957344481599],["v8::internal::compiler::MachineOperatorBuilder::F64x2Le()",93957344481616,93957344481631],["v8::internal::compiler::MachineOperatorBuilder::F64x2Qfms()",93957344481648,93957344481663],["v8::internal::compiler::MachineOperatorBuilder::F64x2Pmax()",93957344481680,93957344481695],["v8::internal::compiler::MachineOperatorBuilder::F64x2Floor()",93957344481712,93957344481727],["v8::internal::compiler::MachineOperatorBuilder::F64x2NearestInt()",93957344481744,93957344481759],["ispunct",139871563474896,139871563474918],["__isalnum_l",139871563475264,139871563475279],["__isprint_l",139871563475424,139871563475441],["__isxdigit_l",139871563475536,139871563475553],["__isctype",139871563475600,139871563475632],["__ctype_toupper_loc",139871563475664,139871563475681],["__ctype_init",139871563475728,139871563475808],["bind_textdomain_codeset",139871563476976,139871563477019],["xdr_u_short",139871564503168,139871564503296],["xdr_bytes",139871564503888,139871564504303],["xdr_string",139871564504480,139871564504822],["xdr_int64_t",139871564504864,139871564505090],["__sqrtf128_finite",139871565598320,139871565599249],["logbf128",139871565615200,139871565615373],["__fpclassifyf128",139871565617680,139871565617774],["roundf128",139871565620128,139871565620394],["fmaf128",139871565621248,139871565624936],["llrintf128",139871565625504,139871565625950],["llroundf128",139871565626272,139871565626587],["__issignalingf128",139871565627008,139871565627072],["v8::AsyncHooks::PromiseHookDispatch(v8::PromiseHookType, v8::Local<v8::Promise>, v8::Local<v8::Value>, v8::AsyncHooksWrap*, v8::AsyncHooks*)",93957335202016,93957335202747],["v8::DisableHook(v8::FunctionCallbackInfo<v8::Value> const&)",93957335203504,93957335203524],["std::__1::basic_istream<char, std::__1::char_traits<char> >& std::__1::getline<char, std::__1::char_traits<char>, std::__1::allocator<char> >(std::__1::basic_istream<char, std::__1::char_traits<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char)",93957335282656,93957335282907],["v8::SerializationDataQueue::Dequeue(std::__1::unique_ptr<v8::SerializationData, std::__1::default_delete<v8::SerializationData> >*)",93957335286368,93957335286684],["v8::Worker::ExecuteInThread()",93957335287072,93957335288872],["v8::Worker::ProcessMessage(std::__1::unique_ptr<v8::SerializationData, std::__1::default_delete<v8::SerializationData> >)",93957335289168,93957335289513],["v8::internal::CodeObjectRegistry::Clear()",93957336774656,93957336774673],["v8::internal::StressConcurrentAllocatorTask::RunInternal()",93957336776432,93957336777165],["v8::internal::ConcurrentAllocator::UnmarkLinearAllocationArea()",93957336777760,93957336777801],["v8::internal::ConcurrentAllocator::AllocateInLab(int, v8::internal::AllocationAlignment, v8::internal::AllocationOrigin)",93957336778480,93957336778660],["v8::internal::Worklist<v8::internal::Ephemeron, 64>::Pop(int, v8::internal::Ephemeron*)",93957336804752,93957336805020],["v8::internal::Worklist<v8::internal::HeapObject, 64>::FlushToGlobal(int)",93957336805520,93957336805764],["v8::internal::ConcurrentMarking::ScheduleJob(v8::TaskPriority)",93957336806032,93957336806178],["v8::internal::ConcurrentMarking::Join()",93957336806464,93957336806513],["void v8::internal::SubclassBodyDescriptor<v8::internal::FixedBodyDescriptor<4, 28, 28>, v8::internal::FixedBodyDescriptor<28, 40, 40> >::IterateBody<v8::internal::RecordMigratedSlotVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::RecordMigratedSlotVisitor*)",93957337315840,93957337315991],["v8::internal::EvacuateNewSpaceVisitor::~EvacuateNewSpaceVisitor()",93957337319744,93957337319814],["v8::internal::MarkingVisitorBase<v8::internal::MainMarkingVisitor<v8::internal::MajorMarkingState>, v8::internal::MajorMarkingState>::VisitPointer(v8::internal::HeapObject, v8::internal::CompressedObjectSlot)",93957337323936,93957337324039],["int v8::internal::MainMarkingVisitor<v8::internal::MajorMarkingState>::VisitLeftTrimmableArray<v8::internal::FixedDoubleArray>(v8::internal::Map, v8::internal::FixedDoubleArray)",93957337328960,93957337329278],["int v8::internal::MainMarkingVisitor<v8::internal::MajorMarkingState>::VisitJSObjectSubclass<v8::internal::JSWeakRef, v8::internal::JSWeakRef::BodyDescriptor>(v8::internal::Map, v8::internal::JSWeakRef)",93957337331904,93957337332321],["std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::HeapObject, v8::internal::HeapObject>, std::__1::__unordered_map_hasher<v8::internal::HeapObject, std::__1::__hash_value_type<v8::internal::HeapObject, v8::internal::HeapObject>, v8::internal::Object::Hasher, std::__1::equal_to<v8::internal::HeapObject>, true>, std::__1::__unordered_map_equal<v8::internal::HeapObject, std::__1::__hash_value_type<v8::internal::HeapObject, v8::internal::HeapObject>, std::__1::equal_to<v8::internal::HeapObject>, v8::internal::Object::Hasher, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::HeapObject, v8::internal::HeapObject> > >::__node_insert_multi_prepare(unsigned long, std::__1::__hash_value_type<v8::internal::HeapObject, v8::internal::HeapObject>&)",93957337333424,93957337334120],["v8::internal::EvacuateNewSpacePageVisitor<(v8::internal::PageEvacuationMode)0>::Visit(v8::internal::HeapObject, int)",93957337335088,93957337335353],["v8::internal::ProfilingMigrationObserver::Move(v8::internal::AllocationSpace, v8::internal::HeapObject, v8::internal::HeapObject, int)",93957337336464,93957337336579],["v8::internal::EvacuateVisitorBase::AddObserver(v8::internal::MigrationObserver*)",93957337338384,93957337338669],["v8::internal::PageEvacuationJob::~PageEvacuationJob()",93957337340720,93957337340800],["v8::internal::PageEvacuationJob::Run(v8::JobDelegate*)",93957337340896,93957337342036],["v8::internal::ToSpaceUpdatingItem<v8::internal::MajorNonAtomicMarkingState>::Process()",93957337342096,93957337342122],["v8::internal::ToSpaceUpdatingItem<v8::internal::MajorNonAtomicMarkingState>::ProcessVisitAll()",93957337343024,93957337343498],["void v8::internal::BodyDescriptorApply<v8::internal::CallIterateBody, void, v8::internal::Map, v8::internal::HeapObject, int, v8::internal::PointersUpdatingVisitor*>(v8::internal::InstanceType, v8::internal::Map, v8::internal::HeapObject, int, v8::internal::PointersUpdatingVisitor*)",93957337344224,93957337345995],["void v8::internal::EphemeronHashTable::BodyDescriptor::IterateBody<v8::internal::ObjectVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::ObjectVisitor*)",93957337346128,93957337346270],["void v8::internal::WasmStruct::BodyDescriptor::IterateBody<v8::internal::ObjectVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::ObjectVisitor*)",93957337346368,93957337346568],["v8::internal::WeakCodeRegistry::Track(v8::internal::CodeEntry*, v8::internal::Handle<v8::internal::AbstractCode>)",93957339729152,93957339729229],["v8::internal::ExperimentalRegExp::Initialize(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSRegExp>, v8::internal::Handle<v8::internal::String>, v8::base::Flags<v8::internal::JSRegExp::Flag, int>, int)",93957339746336,93957339746759],["v8::internal::ChoiceNode::Accept(v8::internal::NodeVisitor*)",93957339751392,93957339751415],["v8::internal::RegExpText::Accept(v8::internal::RegExpVisitor*, void*)",93957339751648,93957339751671],["v8::internal::RegExpAlternative::IsAnchoredAtStart()",93957339751968,93957339752093],["v8::internal::RegExpLookaround::IsAnchoredAtStart()",93957339752368,93957339752399],["v8::internal::RegExpUnparser::VisitAssertion(v8::internal::RegExpAssertion*, void*)",93957339753120,93957339753259],["v8::internal::RegExpUnparser::VisitCapture(v8::internal::RegExpCapture*, void*)",93957339753840,93957339753930],["v8::internal::RegExpUnparser::VisitBackReference(v8::internal::RegExpBackReference*, void*)",93957339754208,93957339754282],["v8::internal::RegExpTree::Print(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::Zone*)",93957339754336,93957339754389],["v8::internal::RegExpAlternative::RegExpAlternative(v8::internal::ZoneList<v8::internal::RegExpTree*>*)",93957339754560,93957339754723],["v8::internal::RegExpText::max_match()",93957339754752,93957339754761],["v8::internal::RegExpBackReference::max_match()",93957339754784,93957339754795],["v8::internal::RegExpBytecodeGenerator::~RegExpBytecodeGenerator()",93957339755024,93957339755102],["v8::internal::RegExpBytecodeGenerator::Bind(v8::internal::Label*)",93957339755200,93957339755333],["v8::internal::RegExpBytecodeGenerator::PushRegister(int, v8::internal::RegExpMacroAssembler::StackCheckFlag)",93957339755408,93957339755470],["v8_inspector::V8DebuggerAgentImpl::enableImpl()",93957342454912,93957342455260],["v8_inspector::(anonymous namespace)::adjustBreakpointLocation(v8_inspector::V8DebuggerScript const&, v8_inspector::String16 const&, int*, int*)",93957342479088,93957342480065],["v8_inspector::(anonymous namespace)::parseBreakpointId(v8_inspector::String16 const&, v8_inspector::(anonymous namespace)::BreakpointType*, v8_inspector::String16*, int*, int*)",93957342484768,93957342485504],["v8_inspector::V8DebuggerAgentImpl::getStackTrace(std::__1::unique_ptr<v8_inspector::protocol::Runtime::StackTraceId, std::__1::default_delete<v8_inspector::protocol::Runtime::StackTraceId> >, std::__1::unique_ptr<v8_inspector::protocol::Runtime::StackTrace, std::__1::default_delete<v8_inspector::protocol::Runtime::StackTrace> >*)",93957342490992,93957342493052],["v8_inspector::V8DebuggerAgentImpl::acceptsPause(bool) const",93957342493632,93957342493662],["v8_inspector::V8DebuggerAgentImpl::setScriptSource(v8_inspector::String16 const&, v8_inspector::String16 const&, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::PtrMaybe<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Debugger::CallFrame, std::__1::default_delete<v8_inspector::protocol::Debugger::CallFrame> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Debugger::CallFrame, std::__1::default_delete<v8_inspector::protocol::Debugger::CallFrame> > > > >*, v8_crdtp::detail::ValueMaybe<bool>*, v8_crdtp::detail::PtrMaybe<v8_inspector::protocol::Runtime::StackTrace>*, v8_crdtp::detail::PtrMaybe<v8_inspector::protocol::Runtime::StackTraceId>*, v8_crdtp::detail::PtrMaybe<v8_inspector::protocol::Runtime::ExceptionDetails>*)",93957342494288,93957342495471],["v8_inspector::V8DebuggerAgentImpl::currentExternalStackTrace()",93957342500160,93957342500471],["v8_inspector::V8DebuggerAgentImpl::getScriptSource(v8_inspector::String16 const&, v8_inspector::String16*, v8_crdtp::detail::ValueMaybe<v8_inspector::protocol::Binary>*)",93957342501328,93957342501957],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<int, std::__1::unique_ptr<std::__1::unordered_map<int, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> > > > >, std::__1::default_delete<std::__1::unordered_map<int, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> > > > > > > >, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<int, std::__1::unique_ptr<std::__1::unordered_map<int, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> > > > >, std::__1::default_delete<std::__1::unordered_map<int, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> > > > > > > >, std::__1::__unordered_map_hasher<int, std::__1::__hash_value_type<int, std::__1::unique_ptr<std::__1::unordered_map<int, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> > > > >, std::__1::default_delete<std::__1::unordered_map<int, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> > > > > > > >, std::__1::hash<int>, std::__1::equal_to<int>, true>, std::__1::__unordered_map_equal<int, std::__1::__hash_value_type<int, std::__1::unique_ptr<std::__1::unordered_map<int, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> > > > >, std::__1::default_delete<std::__1::unordered_map<int, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> > > > > > > >, std::__1::equal_to<int>, std::__1::hash<int>, true>, std::__1::allocator<std::__1::__hash_value_type<int, std::__1::unique_ptr<std::__1::unordered_map<int, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> > > > >, std::__1::default_delete<std::__1::unordered_map<int, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> > > > > > > > > >::__emplace_unique_key_args<int, std::__1::pair<int, std::__1::unique_ptr<std::__1::unordered_map<int, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> > > > >, std::__1::default_delete<std::__1::unordered_map<int, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> > > > > > > > >(int const&, std::__1::pair<int, std::__1::unique_ptr<std::__1::unordered_map<int, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> > > > >, std::__1::default_delete<std::__1::unordered_map<int, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> > > > > > > >&&)",93957342581344,93957342582342],["non-virtual thunk to v8_inspector::V8InspectorSessionImpl::SendProtocolNotification(std::__1::unique_ptr<v8_crdtp::Serializable, std::__1::default_delete<v8_crdtp::Serializable> >)",93957342587152,93957342587192],["v8_inspector::V8InspectorSessionImpl::wrapTable(v8::Local<v8::Context>, v8::Local<v8::Object>, v8::MaybeLocal<v8::Array>)",93957342589344,93957342589459],["std::__1::vector<std::__1::unique_ptr<v8_inspector::V8InspectorSession::Inspectable, std::__1::default_delete<v8_inspector::V8InspectorSession::Inspectable> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::V8InspectorSession::Inspectable, std::__1::default_delete<v8_inspector::V8InspectorSession::Inspectable> > > >::insert(std::__1::__wrap_iter<std::__1::unique_ptr<v8_inspector::V8InspectorSession::Inspectable, std::__1::default_delete<v8_inspector::V8InspectorSession::Inspectable> > const*>, std::__1::unique_ptr<v8_inspector::V8InspectorSession::Inspectable, std::__1::default_delete<v8_inspector::V8InspectorSession::Inspectable> >&&)",93957342592352,93957342593487],["v8_inspector::V8InspectorSessionImpl::resume(bool)",93957342594016,93957342594083],["void std::__1::__function::__policy_invoker<void (v8_inspector::InspectedContext*)>::__call_impl<std::__1::__function::__default_alloc_func<v8_inspector::V8InspectorSessionImpl::discardInjectedScripts()::$_0, void (v8_inspector::InspectedContext*)> >(std::__1::__function::__policy_storage const*, v8_inspector::InspectedContext*)",93957342594816,93957342594837],["std::__1::__split_buffer<std::__1::unique_ptr<v8_inspector::V8InspectorSession::Inspectable, std::__1::default_delete<v8_inspector::V8InspectorSession::Inspectable> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::V8InspectorSession::Inspectable, std::__1::default_delete<v8_inspector::V8InspectorSession::Inspectable> > >&>::push_back(std::__1::unique_ptr<v8_inspector::V8InspectorSession::Inspectable, std::__1::default_delete<v8_inspector::V8InspectorSession::Inspectable> >&&)",93957342594992,93957342595916],["v8_inspector::V8ProfilerAgentImpl::consoleProfile(v8_inspector::String16 const&)",93957342596304,93957342597366],["v8_inspector::(anonymous namespace)::currentDebugLocation(v8_inspector::V8InspectorImpl*)",93957342598768,93957342598977],["v8_inspector::V8ProfilerAgentImpl::stopProfiling(v8_inspector::String16 const&, bool)",93957342600448,93957342601249],["v8_inspector::V8ProfilerAgentImpl::disable()",93957342601376,93957342602012],["v8_inspector::V8ProfilerAgentImpl::restore()",93957342602224,93957342602947],["v8_inspector::V8ProfilerAgentImpl::stop(std::__1::unique_ptr<v8_inspector::protocol::Profiler::Profile, std::__1::default_delete<v8_inspector::protocol::Profiler::Profile> >*)",93957342603264,93957342603708],["v8_inspector::V8ProfilerAgentImpl::stopPreciseCoverage()",93957342604224,93957342604525],["v8_inspector::(anonymous namespace)::coverageToProtocol(v8_inspector::V8InspectorImpl*, v8::debug::Coverage const&, std::__1::unique_ptr<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Profiler::ScriptCoverage, std::__1::default_delete<v8_inspector::protocol::Profiler::ScriptCoverage> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Profiler::ScriptCoverage, std::__1::default_delete<v8_inspector::protocol::Profiler::ScriptCoverage> > > >, std::__1::default_delete<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Profiler::ScriptCoverage, std::__1::default_delete<v8_inspector::protocol::Profiler::ScriptCoverage> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Profiler::ScriptCoverage, std::__1::default_delete<v8_inspector::protocol::Profiler::ScriptCoverage> > > > > >*)",93957342604880,93957342610227],["v8_inspector::V8ProfilerAgentImpl::getBestEffortCoverage(std::__1::unique_ptr<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Profiler::ScriptCoverage, std::__1::default_delete<v8_inspector::protocol::Profiler::ScriptCoverage> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Profiler::ScriptCoverage, std::__1::default_delete<v8_inspector::protocol::Profiler::ScriptCoverage> > > >, std::__1::default_delete<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Profiler::ScriptCoverage, std::__1::default_delete<v8_inspector::protocol::Profiler::ScriptCoverage> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Profiler::ScriptCoverage, std::__1::default_delete<v8_inspector::protocol::Profiler::ScriptCoverage> > > > > >*)",93957342610592,93957342610734],["Cr_z_inflate",93957342811456,93957342821458],["Cr_z_fill_window_sse",93957342825360,93957342825981],["v8::internal::compiler::AccessBuilder::ForJSObjectElements()",93957342826528,93957342826591],["v8::internal::compiler::AccessBuilder::ForJSFunctionContext()",93957342826960,93957342827023],["v8::internal::compiler::AccessBuilder::ForJSRegExpSource()",93957342827216,93957342827279],["v8::internal::compiler::AccessBuilder::ForJSGeneratorObjectParametersAndRegisters()",93957342827488,93957342827551],["v8::internal::compiler::AccessBuilder::ForJSAsyncGeneratorObjectIsAwaiting()",93957342827760,93957342827837],["v8::internal::compiler::AccessBuilder::ForJSArrayBufferViewByteLength()",93957342828064,93957342828145],["v8::internal::compiler::AccessBuilder::ForJSTypedArrayLength()",93957342828256,93957342828337],["v8::internal::compiler::AccessBuilder::ForJSTypedArrayExternalPointer()",93957342828416,93957342828479],["v8::internal::compiler::AccessBuilder::ForJSDateValue()",93957342828544,93957342828625],["v8::internal::compiler::AccessBuilder::ForJSRegExpFlags()",93957342828704,93957342828767],["v8::internal::compiler::AccessBuilder::ForSloppyArgumentsElementsContext()",93957342828864,93957342828928],["v8::internal::compiler::AccessBuilder::ForScopeInfoFlags()",93957342828992,93957342829069],["v8::internal::compiler::AccessBuilder::ForMapBitField2()",93957342829152,93957342829230],["v8::internal::compiler::MachineOperatorReducer::Word32And(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957344444528,93957344444637],["v8::internal::compiler::(anonymous namespace)::BitfieldCheck::Detect(v8::internal::compiler::Node*)",93957344471824,93957344472740],["v8::internal::compiler::MachineOperatorBuilder::Word32Equal()",93957344479328,93957344479343],["v8::internal::compiler::MachineOperatorBuilder::Word64Xor()",93957344479584,93957344479599],["v8::internal::compiler::MachineOperatorBuilder::Uint64Div()",93957344479776,93957344479791],["v8::internal::compiler::MachineOperatorBuilder::TruncateFloat64ToWord32()",93957344479904,93957344479919],["v8::internal::compiler::MachineOperatorBuilder::TryTruncateFloat64ToInt64()",93957344480032,93957344480047],["v8::internal::compiler::MachineOperatorBuilder::RoundInt64ToFloat32()",93957344480160,93957344480175],["v8::internal::compiler::MachineOperatorBuilder::ChangeInt32ToInt64()",93957344480256,93957344480271],["v8::internal::compiler::MachineOperatorBuilder::TruncateInt64ToInt32()",93957344480320,93957344480335],["v8::internal::compiler::MachineOperatorBuilder::BitcastInt64ToFloat64()",93957344480384,93957344480399],["v8::internal::compiler::MachineOperatorBuilder::SignExtendWord16ToInt64()",93957344480448,93957344480463],["v8::internal::compiler::MachineOperatorBuilder::Float32Sub()",93957344480512,93957344480527],["v8::internal::compiler::MachineOperatorBuilder::Float32Sqrt()",93957344480576,93957344480591],["v8::internal::compiler::MachineOperatorBuilder::Float64Acos()",93957344480640,93957344480655],["v8::internal::compiler::MachineOperatorBuilder::Float64Atan()",93957344480704,93957344480719],["v8::internal::compiler::MachineOperatorBuilder::Float64Cbrt()",93957344480752,93957344480767],["v8::internal::compiler::MachineOperatorBuilder::Float64Cosh()",93957344480784,93957344480799],["v8::internal::compiler::MachineOperatorBuilder::Float64Expm1()",93957344480816,93957344480831],["v8::internal::compiler::MachineOperatorBuilder::Float64Log1p()",93957344480848,93957344480863],["v8::internal::compiler::MachineOperatorBuilder::Float64Log10()",93957344480880,93957344480895],["v8::internal::compiler::MachineOperatorBuilder::Float64Min()",93957344480912,93957344480927],["v8::internal::compiler::MachineOperatorBuilder::Float64Add()",93957344480944,93957344480959],["v8::internal::compiler::MachineOperatorBuilder::Float64Mul()",93957344480976,93957344480991],["v8::internal::compiler::MachineOperatorBuilder::Float64Mod()",93957344481008,93957344481023],["v8::internal::compiler::MachineOperatorBuilder::Float64Sin()",93957344481040,93957344481055],["v8::internal::compiler::MachineOperatorBuilder::Float64Sqrt()",93957344481072,93957344481087],["v8::internal::compiler::MachineOperatorBuilder::Float64Tanh()",93957344481104,93957344481119],["v8::internal::compiler::MachineOperatorBuilder::Float32LessThan()",93957344481136,93957344481151],["v8::internal::compiler::MachineOperatorBuilder::Float64Equal()",93957344481168,93957344481183],["v8::internal::compiler::MachineOperatorBuilder::Float64LessThanOrEqual()",93957344481200,93957344481215],["v8::internal::compiler::MachineOperatorBuilder::Float64ExtractHighWord32()",93957344481232,93957344481247],["__assert",139871563474656,139871563474667],["tolower",139871563475024,139871563475065],["isascii",139871563475232,139871563475241],["__iscntrl_l",139871563475312,139871563475327],["__isgraph_l",139871563475392,139871563475409],["__ispunct_l",139871563475456,139871563475471],["__isupper_l",139871563475504,139871563475521],["__tolower_l",139871563475568,139871563475579],["xdr_u_hyper",139871564502752,139871564502978],["xdr_u_char",139871564503440,139871564503584],["xdr_opaque",139871564503856,139871564503878],["xdr_netobj",139871564504304,139871564504321],["__jnf128_finite",139871565578048,139871565580310],["cbrtf128",139871565604736,139871565605572],["fabsf128",139871565612944,139871565612982],["rintf128",139871565615872,139871565616095],["tanhf128",139871565617136,139871565617673],["truncf128",139871565617776,139871565617996],["__log2f128_finite",139871565618928,139871565620121],["nearbyintf128",139871565620400,139871565620730],["v8::AsyncHooks::CreateHook(v8::FunctionCallbackInfo<v8::Value> const&)",93957335199792,93957335200902],["v8::AsyncHooks::Initialize()",93957335202752,93957335203467],["v8::FuzzerMonitor::SimulateErrors()",93957335282256,93957335282451],["v8::SourceGroup::Execute(v8::Isolate*)",93957335283504,93957335284248],["v8::InspectorClient::~InspectorClient()",93957335286240,93957335286363],["v8::Worker::~Worker()",93957335286688,93957335286956],["v8::internal::ArrayBufferSweeper::Append(v8::internal::JSArrayBuffer, v8::internal::ArrayBufferExtension*)",93957336772400,93957336772680],["v8::internal::CollectionBarrier::ShutdownRequested()",93957336775056,93957336775125],["v8::internal::CombinedHeapObjectIterator::CombinedHeapObjectIterator(v8::internal::Heap*, v8::internal::HeapObjectIterator::HeapObjectsFiltering)",93957336776304,93957336776372],["v8::internal::StressConcurrentAllocatorTask::Schedule(v8::internal::Isolate*)",93957336777552,93957336777663],["v8::internal::ConcurrentAllocator::MarkLinearAllocationAreaBlack()",93957336777712,93957336777753],["v8::internal::ConcurrentAllocator::AllocateInLabSlow(int, v8::internal::AllocationAlignment, v8::internal::AllocationOrigin)",93957336777808,93957336777969],["v8::internal::ConcurrentAllocator::AllocateOutsideLab(int, v8::internal::AllocationAlignment, v8::internal::AllocationOrigin)",93957336778336,93957336778472],["v8::internal::ConcurrentMarking::ConcurrentMarking(v8::internal::Heap*, v8::internal::MarkingWorklists*, v8::internal::WeakObjects*)",93957336778672,93957336779169],["void v8::internal::JSArrayBuffer::BodyDescriptor::IterateBody<v8::internal::RecordMigratedSlotVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::RecordMigratedSlotVisitor*)",93957337313392,93957337313532],["v8::internal::PointersUpdatingVisitor::VisitRootPointer(v8::internal::Root, char const*, v8::internal::FullObjectSlot)",93957337316656,93957337316700],["v8::internal::MinorMarkCompactCollector::RootMarkingVisitor::VisitRootPointers(v8::internal::Root, char const*, v8::internal::FullObjectSlot, v8::internal::FullObjectSlot)",93957337318720,93957337319002],["v8::internal::EvacuateVisitorBase::TryEvacuateObject(v8::internal::AllocationSpace, v8::internal::HeapObject, int, v8::internal::HeapObject*)",93957337321056,93957337321577],["v8::internal::MarkingVisitorBase<v8::internal::MainMarkingVisitor<v8::internal::MajorMarkingState>, v8::internal::MajorMarkingState>::VisitPointers(v8::internal::HeapObject, v8::internal::CompressedObjectSlot, v8::internal::CompressedObjectSlot)",93957337323680,93957337323783],["v8::internal::MarkingVisitorBase<v8::internal::MainMarkingVisitor<v8::internal::MajorMarkingState>, v8::internal::MajorMarkingState>::VisitCodeTarget(v8::internal::Code, v8::internal::RelocInfo*)",93957337324192,93957337324574],["unsigned int std::__1::__sort4<v8::internal::MarkCompactCollector::CollectEvacuationCandidates(v8::internal::PagedSpace*)::$_1&, std::__1::pair<unsigned long, v8::internal::Page*>*>(std::__1::pair<unsigned long, v8::internal::Page*>*, std::__1::pair<unsigned long, v8::internal::Page*>*, std::__1::pair<unsigned long, v8::internal::Page*>*, std::__1::pair<unsigned long, v8::internal::Page*>*, v8::internal::MarkCompactCollector::CollectEvacuationCandidates(v8::internal::PagedSpace*)::$_1&)",93957337327696,93957337327999],["void v8::internal::BodyDescriptorBase::IterateJSObjectBodyImpl<v8::internal::MainMarkingVisitor<v8::internal::MajorMarkingState> >(v8::internal::Map, v8::internal::HeapObject, int, int, v8::internal::MainMarkingVisitor<v8::internal::MajorMarkingState>*)",93957337329680,93957337330706],["int v8::internal::MainMarkingVisitor<v8::internal::MajorMarkingState>::VisitJSObjectSubclass<v8::internal::JSTypedArray, v8::internal::JSTypedArray::BodyDescriptor>(v8::internal::Map, v8::internal::JSTypedArray)",93957337331456,93957337331894],["void v8::internal::PrototypeInfo::BodyDescriptor::IterateBody<v8::internal::MainMarkingVisitor<v8::internal::MajorMarkingState> >(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::MainMarkingVisitor<v8::internal::MajorMarkingState>*)",93957337332336,93957337332629],["std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::HeapObject, v8::internal::HeapObject>, std::__1::__unordered_map_hasher<v8::internal::HeapObject, std::__1::__hash_value_type<v8::internal::HeapObject, v8::internal::HeapObject>, v8::internal::Object::Hasher, std::__1::equal_to<v8::internal::HeapObject>, true>, std::__1::__unordered_map_equal<v8::internal::HeapObject, std::__1::__hash_value_type<v8::internal::HeapObject, v8::internal::HeapObject>, std::__1::equal_to<v8::internal::HeapObject>, v8::internal::Object::Hasher, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::HeapObject, v8::internal::HeapObject> > >::__node_insert_multi(std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::HeapObject, v8::internal::HeapObject>, void*>*)",93957337333024,93957337333424],["void std::__1::__function::__policy_invoker<void (v8::internal::HeapObject, v8::internal::CompressedObjectSlot, v8::internal::Object)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::MarkCompactCollector::ClearJSWeakRefs()::$_6, void (v8::internal::HeapObject, v8::internal::CompressedObjectSlot, v8::internal::Object)> >(std::__1::__function::__policy_storage const*, v8::internal::HeapObject&&, v8::internal::CompressedObjectSlot&&, v8::internal::Object&&)",93957337334128,93957337334380],["v8::internal::EvacuateNewSpacePageVisitor<(v8::internal::PageEvacuationMode)1>::Visit(v8::internal::HeapObject, int)",93957337334944,93957337335076],["v8::internal::EvacuateOldSpaceVisitor::Visit(v8::internal::HeapObject, int)",93957337335360,93957337335420],["std::__1::__unique_if<v8::internal::FullEvacuator>::__unique_single std::__1::make_unique<v8::internal::FullEvacuator, v8::internal::MarkCompactCollector*&>(v8::internal::MarkCompactCollector*&)",93957337335712,93957337336459],["void v8::internal::EvacuateVisitorBase::RawMigrateObject<(v8::internal::EvacuateVisitorBase::MigrationMode)0>(v8::internal::EvacuateVisitorBase*, v8::internal::HeapObject, v8::internal::HeapObject, int, v8::internal::AllocationSpace)",93957337336592,93957337338313],["v8::internal::StringsStorage::GetName(int)",93957339724416,93957339724437],["v8::internal::(anonymous namespace)::CanBeHandledVisitor::VisitQuantifier(v8::internal::RegExpQuantifier*, void*)",93957339731136,93957339731230],["v8::internal::ExperimentalRegExpInterpreter::FindMatches(v8::internal::Isolate*, v8::internal::RegExp::CallOrigin, v8::internal::ByteArray, int, v8::internal::String, int, int*, int, v8::internal::Zone*)",93957339737920,93957339743110],["v8::internal::ExperimentalRegExp::ExecRaw(v8::internal::Isolate*, v8::internal::RegExp::CallOrigin, v8::internal::JSRegExp, v8::internal::String, int*, int, int)",93957339748576,93957339749164],["v8::internal::RegExpDisjunction::Accept(v8::internal::RegExpVisitor*, void*)",93957339751328,93957339751351],["v8::internal::RegExpAtom::Accept(v8::internal::RegExpVisitor*, void*)",93957339751456,93957339751479],["v8::internal::RegExpBackReference::Accept(v8::internal::RegExpVisitor*, void*)",93957339751584,93957339751607],["v8::internal::RegExpGroup::CaptureRegisters()",93957339751840,93957339751855],["v8::internal::RegExpAssertion::IsAnchoredAtEnd()",93957339751952,93957339751965],["v8::internal::RegExpAlternative::IsAnchoredAtEnd()",93957339752096,93957339752201],["v8::internal::RegExpDisjunction::IsAnchoredAtEnd()",93957339752288,93957339752362],["v8::internal::RegExpUnparser::VisitDisjunction(v8::internal::RegExpDisjunction*, void*)",93957339752400,93957339752559],["v8::internal::RegExpUnparser::VisitCharacterClass(v8::internal::RegExpCharacterClass*, void*)",93957339752720,93957339753118],["v8::internal::RegExpUnparser::VisitAtom(v8::internal::RegExpAtom*, void*)",93957339753264,93957339753396],["v8::internal::RegExpUnparser::VisitQuantifier(v8::internal::RegExpQuantifier*, void*)",93957339753600,93957339753829],["v8::internal::RegExpUnparser::VisitGroup(v8::internal::RegExpGroup*, void*)",93957339753936,93957339754026],["v8_inspector::V8Console::CommandLineAPIScope::~CommandLineAPIScope()",93957342452768,93957342453081],["v8_inspector::V8DebuggerAgentImpl::disable()",93957342471936,93957342474232],["v8_inspector::(anonymous namespace)::generateBreakpointId(v8_inspector::(anonymous namespace)::BreakpointType, v8_inspector::String16 const&, int, int)",93957342478320,93957342478493],["v8_inspector::V8DebuggerAgentImpl::setBreakpoint(std::__1::unique_ptr<v8_inspector::protocol::Debugger::Location, std::__1::default_delete<v8_inspector::protocol::Debugger::Location> >, v8_crdtp::detail::ValueMaybe<v8_inspector::String16>, v8_inspector::String16*, std::__1::unique_ptr<v8_inspector::protocol::Debugger::Location, std::__1::default_delete<v8_inspector::protocol::Debugger::Location> >*)",93957342480592,93957342482375],["v8_inspector::V8DebuggerAgentImpl::removeBreakpoint(v8_inspector::String16 const&)",93957342483840,93957342484758],["v8_inspector::V8DebuggerAgentImpl::removeBreakpointImpl(v8_inspector::String16 const&, std::__1::vector<v8_inspector::V8DebuggerScript*, std::__1::allocator<v8_inspector::V8DebuggerScript*> > const&)",93957342485504,93957342486229],["v8_inspector::V8DebuggerAgentImpl::continueToLocation(std::__1::unique_ptr<v8_inspector::protocol::Debugger::Location, std::__1::default_delete<v8_inspector::protocol::Debugger::Location> >, v8_crdtp::detail::ValueMaybe<v8_inspector::String16>)",93957342489616,93957342490987],["v8_inspector::V8DebuggerAgentImpl::isFunctionBlackboxed(v8_inspector::String16 const&, v8::debug::Location const&, v8::debug::Location const&)",93957342493056,93957342493455],["v8_inspector::V8InspectorImpl::asyncTaskCanceled(void*)",93957342575424,93957342575444],["std::__1::__shared_ptr_emplace<v8_inspector::V8Inspector::Counters, std::__1::allocator<v8_inspector::V8Inspector::Counters> >::__on_zero_shared()",93957342582976,93957342582990],["v8_inspector::V8InspectorSessionImpl::serializeForFrontend(std::__1::unique_ptr<v8_crdtp::Serializable, std::__1::default_delete<v8_crdtp::Serializable> >)",93957342586656,93957342587000],["v8_inspector::V8InspectorSessionImpl::findInjectedScript(int, v8_inspector::InjectedScript*&)",93957342587456,93957342587676],["v8_inspector::V8InspectorSessionImpl::wrapObject(v8::Local<v8::Context>, v8::Local<v8::Value>, v8_inspector::StringView, bool)",93957342589056,93957342589165],["v8_inspector::V8InspectorSessionImpl::reportAllContexts(v8_inspector::V8RuntimeAgentImpl*)",93957342589616,93957342589735],["v8_inspector::V8InspectorSessionImpl::supportedDomainsImpl()",93957342590832,93957342592171],["v8_inspector::V8InspectorSessionImpl::schedulePauseOnNextStatement(v8_inspector::StringView, v8_inspector::StringView)",93957342593536,93957342593718],["v8_inspector::V8InspectorSessionImpl::setSkipAllPauses(bool)",93957342593952,93957342594009],["v8_inspector::V8InspectorSessionImpl::stepOver()",93957342594096,93957342594273],["v8_inspector::V8InspectorSessionImpl::triggerPreciseCoverageDeltaUpdate(v8_inspector::StringView)",93957342594736,93957342594805],["void std::__1::__function::__policy_invoker<void (v8_inspector::InspectedContext*)>::__call_impl<std::__1::__function::__default_alloc_func<v8_inspector::V8InspectorSessionImpl::releaseObjectGroup(v8_inspector::String16 const&)::$_1, void (v8_inspector::InspectedContext*)> >(std::__1::__function::__policy_storage const*, v8_inspector::InspectedContext*)",93957342594848,93957342594903],["void std::__1::__function::__policy_invoker<void (v8_inspector::InspectedContext*)>::__call_impl<std::__1::__function::__default_alloc_func<v8_inspector::V8InspectorSessionImpl::reportAllContexts(v8_inspector::V8RuntimeAgentImpl*)::$_3, void (v8_inspector::InspectedContext*)> >(std::__1::__function::__policy_storage const*, v8_inspector::InspectedContext*)",93957342594976,93957342594992],["v8_inspector::V8ProfilerAgentImpl::V8ProfilerAgentImpl(v8_inspector::V8InspectorSessionImpl*, v8_crdtp::FrontendChannel*, v8_inspector::protocol::DictionaryValue*)",93957342595920,93957342596004],["v8_inspector::V8ProfilerAgentImpl::~V8ProfilerAgentImpl()",93957342596272,93957342596300],["v8_inspector::V8ProfilerAgentImpl::ProfileDescriptor::ProfileDescriptor(v8_inspector::String16 const&, v8_inspector::String16 const&)",93957342597376,93957342598575],["Cr_z_inflateInit2_",93957342811008,93957342811446],["chunkcopy_lapped_safe",93957342821696,93957342822984],["Cr_z_crc_fold_copy",93957342823888,93957342825128],["v8::internal::compiler::AccessBuilder::ForMap()",93957342826048,93957342826111],["v8::internal::compiler::AccessBuilder::ForCellValue()",93957342826400,93957342826464],["v8::internal::compiler::AccessBuilder::ForJSObjectOffset(int, v8::internal::compiler::WriteBarrierKind)",93957342826672,93957342826730],["v8::internal::compiler::AccessBuilder::ForJSFunctionPrototypeOrInitialMap()",93957342826896,93957342826960],["v8::internal::compiler::AccessBuilder::ForJSFunctionFeedbackCell()",93957342827024,93957342827087],["v8::internal::compiler::AccessBuilder::ForJSBoundFunctionBoundTargetFunction()",93957342827152,93957342827215],["v8::internal::compiler::AccessBuilder::ForJSGeneratorObjectFunction()",93957342827280,93957342827343],["v8::internal::compiler::AccessBuilder::ForJSRegExpLastIndex()",93957342827424,93957342827487],["v8::internal::compiler::AccessBuilder::ForJSGeneratorObjectResumeMode()",93957342827552,93957342827629],["v8::internal::compiler::AccessBuilder::ForJSAsyncGeneratorObjectQueue()",93957342827696,93957342827759],["v8::internal::compiler::AccessBuilder::ForJSArrayLength(v8::internal::ElementsKind)",93957342827840,93957342827971],["v8::internal::compiler::LoopVariableOptimizer::ChangeToInductionVariablePhis()",93957344430336,93957344430853],["v8::internal::compiler::MachineOperatorReducer::ReduceWord32Shl(v8::internal::compiler::Node*)",93957344456736,93957344457432],["v8::internal::compiler::MachineOperatorReducer::ReduceFloat64RoundDown(v8::internal::compiler::Node*)",93957344468560,93957344468767],["v8::base::Optional<std::__1::pair<v8::internal::compiler::Node*, unsigned int> > v8::internal::compiler::MachineOperatorReducer::ReduceWord32EqualForConstantRhs<v8::internal::compiler::Word32Adapter>(v8::internal::compiler::Node*, unsigned int)",93957344477072,93957344477407],["v8::internal::compiler::MachineOperatorBuilder::Word32Xor()",93957344479264,93957344479278],["v8::internal::compiler::MachineOperatorBuilder::Int32MulHigh()",93957344479392,93957344479407],["v8::internal::compiler::MachineOperatorBuilder::Uint32Mod()",93957344479520,93957344479535],["v8::internal::compiler::MachineOperatorBuilder::Word64Equal()",93957344479648,93957344479663],["v8::internal::compiler::MachineOperatorBuilder::Int64LessThan()",93957344479744,93957344479759],["v8::internal::compiler::MachineOperatorBuilder::Uint64LessThan()",93957344479808,93957344479823],["v8::internal::compiler::MachineOperatorBuilder::Word32ReverseBytes()",93957344479872,93957344479887],["v8::internal::compiler::MachineOperatorBuilder::ChangeFloat64ToInt32()",93957344479936,93957344479951],["v8::internal::compiler::MachineOperatorBuilder::TruncateFloat64ToUint32()",93957344480000,93957344480015],["v8::internal::compiler::MachineOperatorBuilder::TryTruncateFloat64ToUint64()",93957344480064,93957344480079],["v8::internal::compiler::MachineOperatorBuilder::RoundFloat64ToInt32()",93957344480128,93957344480143],["v8::internal::compiler::MachineOperatorBuilder::RoundUint32ToFloat32()",93957344480192,93957344480207],["v8::internal::compiler::MachineOperatorBuilder::BitcastWord32ToWord64()",93957344480240,93957344480255],["v8::internal::compiler::MachineOperatorBuilder::ChangeUint32ToFloat64()",93957344480272,93957344480287],["v8::internal::compiler::MachineOperatorBuilder::TruncateFloat64ToFloat32()",93957344480304,93957344480319],["v8::internal::compiler::MachineOperatorBuilder::BitcastFloat32ToInt32()",93957344480336,93957344480351],["v8::internal::compiler::MachineOperatorBuilder::BitcastInt32ToFloat32()",93957344480368,93957344480383],["v8::internal::compiler::MachineOperatorBuilder::SignExtendWord8ToInt32()",93957344480400,93957344480415],["v8::internal::compiler::MachineOperatorBuilder::SignExtendWord8ToInt64()",93957344480432,93957344480447],["v8::internal::compiler::MachineOperatorBuilder::SignExtendWord32ToInt64()",93957344480464,93957344480479],["v8::internal::compiler::MachineOperatorBuilder::Float32Add()",93957344480496,93957344480511],["v8::internal::compiler::MachineOperatorBuilder::Float32Mul()",93957344480528,93957344480543],["v8::internal::compiler::MachineOperatorBuilder::Float32Neg()",93957344480560,93957344480575],["v8::internal::compiler::MachineOperatorBuilder::Float32Max()",93957344480592,93957344480607],["v8::internal::compiler::MachineOperatorBuilder::Float64Abs()",93957344480624,93957344480639],["v8::internal::compiler::MachineOperatorBuilder::Float64Acosh()",93957344480656,93957344480671],["v8::internal::compiler::MachineOperatorBuilder::Float64Asinh()",93957344480688,93957344480703],["v8::internal::compiler::MachineOperatorBuilder::Float64Atan2()",93957344480720,93957344480735],["__nl_langinfo_l",139871563470304,139871563470377],["isdigit",139871563474768,139871563474792],["isupper",139871563474960,139871563474984],["isblank",139871563475120,139871563475142],["toascii",139871563475216,139871563475222],["__isblank_l",139871563475248,139871563475263],["__isalpha_l",139871563475280,139871563475297],["__isdigit_l",139871563475328,139871563475345],["xdr_u_int",139871564502160,139871564502287],["xdr_u_longlong_t",139871564503008,139871564503013],["xdr_char",139871564503296,139871564503440],["xdr_bool",139871564503584,139871564503726],["__coshf128_finite",139871565553728,139871565554248],["__log10f128_finite",139871565591312,139871565592617],["asinhf128",139871565603392,139871565603875],["cosf128",139871565605872,139871565606248],["expm1f128",139871565611840,139871565612938],["floorf128",139871565612992,139871565613280],["nextafterf128",139871565615376,139871565615858],["sinf128",139871565616480,139871565616851],["v8::AsyncHooks::GetExecutionAsyncId() const",93957335199696,93957335199741],["v8::AsyncHooks::ShellPromiseHook(v8::PromiseHookType, v8::Local<v8::Promise>, v8::Local<v8::Value>)",93957335200912,93957335202008],["v8::PrintMessageCallback(v8::Local<v8::Message>, v8::Local<v8::Value>)",93957335269168,93957335269489],["v8::FuzzerMonitor::ObservableDifference()",93957335282496,93957335282513],["v8::Shell::RunShell(v8::Isolate*)",93957335282912,93957335283494],["v8::SourceGroup::ExecuteInThread()",93957335284256,93957335285555],["v8::internal::ArrayBufferSweeper::EnsureFinished()",93957336769776,93957336770693],["v8::internal::BaseSpace::GetSpaceName(v8::internal::AllocationSpace)",93957336774320,93957336774359],["v8::internal::CodeObjectRegistry::GetCodeObjectStartFromInnerAddress(unsigned long) const",93957336774848,93957336774981],["v8::internal::CollectionBarrier::ActivateStackGuardAndPostTask()",93957336775232,93957336775457],["v8::internal::BackgroundCollectionInterruptTask::RunInternal()",93957336776288,93957336776302],["v8::internal::CombinedHeapObjectIterator::Next()",93957336776384,93957336776431],["v8::internal::LocalHeap::AllocateRawOrFail(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment)",93957336777168,93957336777546],["v8::internal::ConcurrentAllocator::FreeLinearAllocationArea()",93957336777664,93957336777691],["v8::internal::RecordMigratedSlotVisitor::VisitEmbeddedPointer(v8::internal::Code, v8::internal::RelocInfo*)",93957337306880,93957337307028],["void v8::internal::SmallOrderedHashTable<v8::internal::SmallOrderedHashSet>::BodyDescriptor::IterateBody<v8::internal::RecordMigratedSlotVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::RecordMigratedSlotVisitor*)",93957337314672,93957337314789],["v8::internal::PointersUpdatingVisitor::VisitPointers(v8::internal::HeapObject, v8::internal::CompressedObjectSlot, v8::internal::CompressedObjectSlot)",93957337316384,93957337316435],["non-virtual thunk to v8::internal::PointersUpdatingVisitor::VisitRootPointers(v8::internal::Root, char const*, v8::internal::OffHeapCompressedObjectSlot, v8::internal::OffHeapCompressedObjectSlot)",93957337316864,93957337316915],["v8::internal::(anonymous namespace)::YoungGenerationExternalStringTableCleaner::VisitRootPointers(v8::internal::Root, char const*, v8::internal::FullObjectSlot, v8::internal::FullObjectSlot)",93957337318336,93957337318601],["v8::internal::YoungGenerationMigrationObserver::~YoungGenerationMigrationObserver()",93957337319248,93957337319290],["v8::internal::EvacuateNewSpaceVisitor::~EvacuateNewSpaceVisitor()",93957337319872,93957337319950],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::AllocationSite, unsigned long>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::AllocationSite, unsigned long>, std::__1::__unordered_map_hasher<v8::internal::AllocationSite, std::__1::__hash_value_type<v8::internal::AllocationSite, unsigned long>, v8::internal::Object::Hasher, std::__1::equal_to<v8::internal::AllocationSite>, true>, std::__1::__unordered_map_equal<v8::internal::AllocationSite, std::__1::__hash_value_type<v8::internal::AllocationSite, unsigned long>, std::__1::equal_to<v8::internal::AllocationSite>, v8::internal::Object::Hasher, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::AllocationSite, unsigned long> > >::__emplace_unique_key_args<v8::internal::AllocationSite, std::__1::piecewise_construct_t const&, std::__1::tuple<v8::internal::AllocationSite&&>, std::__1::tuple<> >(v8::internal::AllocationSite const&, std::__1::piecewise_construct_t const&, std::__1::tuple<v8::internal::AllocationSite&&>&&, std::__1::tuple<>&&)",93957337321936,93957337322737],["v8::internal::LocalSpace::~LocalSpace()",93957337323408,93957337323667],["v8::internal::MarkingVisitorBase<v8::internal::MainMarkingVisitor<v8::internal::MajorMarkingState>, v8::internal::MajorMarkingState>::VisitPointers(v8::internal::HeapObject, v8::internal::CompressedMaybeObjectSlot, v8::internal::CompressedMaybeObjectSlot)",93957337323792,93957337323930],["v8::internal::MarkingVisitorBase<v8::internal::MainMarkingVisitor<v8::internal::MajorMarkingState>, v8::internal::MajorMarkingState>::VisitPointer(v8::internal::HeapObject, v8::internal::CompressedMaybeObjectSlot)",93957337324048,93957337324186],["v8::internal::MarkingVisitorBase<v8::internal::MainMarkingVisitor<v8::internal::MajorMarkingState>, v8::internal::MajorMarkingState>::VisitEmbeddedPointer(v8::internal::Code, v8::internal::RelocInfo*)",93957337324576,93957337325283],["void std::__1::__sort<v8::internal::MarkCompactCollector::CollectEvacuationCandidates(v8::internal::PagedSpace*)::$_1&, std::__1::pair<unsigned long, v8::internal::Page*>*>(std::__1::pair<unsigned long, v8::internal::Page*>*, std::__1::pair<unsigned long, v8::internal::Page*>*, v8::internal::MarkCompactCollector::CollectEvacuationCandidates(v8::internal::PagedSpace*)::$_1&)",93957337325616,93957337327682],["bool std::__1::__insertion_sort_incomplete<v8::internal::MarkCompactCollector::CollectEvacuationCandidates(v8::internal::PagedSpace*)::$_1&, std::__1::pair<unsigned long, v8::internal::Page*>*>(std::__1::pair<unsigned long, v8::internal::Page*>*, std::__1::pair<unsigned long, v8::internal::Page*>*, v8::internal::MarkCompactCollector::CollectEvacuationCandidates(v8::internal::PagedSpace*)::$_1&)",93957337328000,93957337328953],["int v8::internal::MainMarkingVisitor<v8::internal::MajorMarkingState>::VisitJSObjectSubclass<v8::internal::JSArrayBuffer, v8::internal::JSArrayBuffer::BodyDescriptor>(v8::internal::Map, v8::internal::JSArrayBuffer)",93957337329280,93957337329680],["int v8::internal::MainMarkingVisitor<v8::internal::MajorMarkingState>::VisitJSObjectSubclass<v8::internal::JSDataView, v8::internal::JSDataView::BodyDescriptor>(v8::internal::Map, v8::internal::JSDataView)",93957337330720,93957337331120],["std::__1::__tree<std::__1::__value_type<unsigned long, std::__1::unique_ptr<v8::internal::SamplingHeapProfiler::AllocationNode, std::__1::default_delete<v8::internal::SamplingHeapProfiler::AllocationNode> > >, std::__1::__map_value_compare<unsigned long, std::__1::__value_type<unsigned long, std::__1::unique_ptr<v8::internal::SamplingHeapProfiler::AllocationNode, std::__1::default_delete<v8::internal::SamplingHeapProfiler::AllocationNode> > >, std::__1::less<unsigned long>, true>, std::__1::allocator<std::__1::__value_type<unsigned long, std::__1::unique_ptr<v8::internal::SamplingHeapProfiler::AllocationNode, std::__1::default_delete<v8::internal::SamplingHeapProfiler::AllocationNode> > > > >::destroy(std::__1::__tree_node<std::__1::__value_type<unsigned long, std::__1::unique_ptr<v8::internal::SamplingHeapProfiler::AllocationNode, std::__1::default_delete<v8::internal::SamplingHeapProfiler::AllocationNode> > >, void*>*)",93957339720336,93957339720437],["v8::internal::TracingCpuProfilerImpl::TracingCpuProfilerImpl(v8::internal::Isolate*)",93957339728320,93957339728402],["v8::internal::ExperimentalRegExpCompiler::Compile(v8::internal::RegExpTree*, v8::base::Flags<v8::internal::JSRegExp::Flag, int>, v8::internal::Zone*)",93957339729648,93957339730942],["v8::internal::(anonymous namespace)::CompileVisitor::VisitDisjunction(v8::internal::RegExpDisjunction*, void*)",93957339731376,93957339732152],["v8::internal::(anonymous namespace)::CompileVisitor::VisitCapture(v8::internal::RegExpCapture*, void*)",93957339737456,93957339737819],["v8::internal::(anonymous namespace)::NfaInterpreter<unsigned short>::RunActiveThreads()",93957339744704,93957339746320],["v8::internal::ExperimentalRegExp::Compile(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSRegExp>)",93957339746816,93957339748078],["v8::internal::ExperimentalRegExp::MatchForCallFromJs(unsigned long, int, unsigned long, unsigned long, int*, int, unsigned long, v8::internal::RegExp::CallOrigin, v8::internal::Isolate*, unsigned long)",93957339749456,93957339749590],["v8::internal::ExperimentalRegExp::OneshotExec(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSRegExp>, v8::internal::Handle<v8::internal::String>, int, v8::internal::Handle<v8::internal::RegExpMatchInfo>, v8::internal::RegExp::ExecQuirks)",93957339750912,93957339751328],["v8::internal::ActionNode::Accept(v8::internal::NodeVisitor*)",93957339751360,93957339751383],["v8::internal::LoopChoiceNode::Accept(v8::internal::NodeVisitor*)",93957339751424,93957339751447],["v8::internal::AssertionNode::Accept(v8::internal::NodeVisitor*)",93957339751488,93957339751511],["v8::internal::RegExpLookaround::Accept(v8::internal::RegExpVisitor*, void*)",93957339751552,93957339751575],["v8::internal::RegExpEmpty::Accept(v8::internal::RegExpVisitor*, void*)",93957339751616,93957339751639],["v8::internal::RegExpAlternative::CaptureRegisters()",93957339751680,93957339751828],["v8::internal::RegExpCapture::CaptureRegisters()",93957339751856,93957339751934],["void v8_inspector::V8Console::call<&v8_inspector::V8Console::inspectedObject0>(v8::FunctionCallbackInfo<v8::Value> const&)",93957342451024,93957342451130],["void std::__1::__function::__policy_invoker<void (v8_inspector::V8InspectorSessionImpl*)>::__call_impl<std::__1::__function::__default_alloc_func<v8_inspector::V8Console::ProfileEnd(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&)::$_1, void (v8_inspector::V8InspectorSessionImpl*)> >(std::__1::__function::__policy_storage const*, v8_inspector::V8InspectorSessionImpl*)",93957342453552,93957342453640],["v8_inspector::V8DebuggerAgentImpl::didPause(int, v8::Local<v8::Value>, std::__1::vector<int, std::__1::allocator<int> > const&, v8::debug::ExceptionType, bool, bool, bool)",93957342466112,93957342471540],["v8_inspector::V8DebuggerAgentImpl::setBlackboxPattern(v8_inspector::String16 const&)",93957342474768,93957342475087],["v8_inspector::V8DebuggerAgentImpl::setBreakpointByUrl(int, v8_crdtp::detail::ValueMaybe<v8_inspector::String16>, v8_crdtp::detail::ValueMaybe<v8_inspector::String16>, v8_crdtp::detail::ValueMaybe<v8_inspector::String16>, v8_crdtp::detail::ValueMaybe<int>, v8_crdtp::detail::ValueMaybe<v8_inspector::String16>, v8_inspector::String16*, std::__1::unique_ptr<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Debugger::Location, std::__1::default_delete<v8_inspector::protocol::Debugger::Location> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Debugger::Location, std::__1::default_delete<v8_inspector::protocol::Debugger::Location> > > >, std::__1::default_delete<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Debugger::Location, std::__1::default_delete<v8_inspector::protocol::Debugger::Location> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Debugger::Location, std::__1::default_delete<v8_inspector::protocol::Debugger::Location> > > > > >*)",93957342475536,93957342478312],["v8_inspector::matches(v8_inspector::V8InspectorImpl*, v8_inspector::V8DebuggerScript const&, v8_inspector::(anonymous namespace)::BreakpointType, v8_inspector::String16 const&)",93957342478496,93957342479085],["v8_inspector::V8DebuggerAgentImpl::setBreakpointImpl(v8_inspector::String16 const&, v8_inspector::String16 const&, v8_inspector::String16 const&, int, int)",93957342480080,93957342480579],["v8_inspector::V8DebuggerAgentImpl::setBreakpointOnFunctionCall(v8_inspector::String16 const&, v8_crdtp::detail::ValueMaybe<v8_inspector::String16>, v8_inspector::String16*)",93957342482384,93957342483295],["v8_inspector::V8InspectorImpl::forEachSession(int, std::__1::function<void (v8_inspector::V8InspectorSessionImpl*)> const&)",93957342569408,93957342570631],["std::__1::unordered_map<int, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> > > > >::erase(int const&)",93957342576496,93957342577021],["unsigned long std::__1::__tree<std::__1::__value_type<std::__1::pair<long, long>, int>, std::__1::__map_value_compare<std::__1::pair<long, long>, std::__1::__value_type<std::__1::pair<long, long>, int>, std::__1::less<std::__1::pair<long, long> >, true>, std::__1::allocator<std::__1::__value_type<std::__1::pair<long, long>, int> > >::__erase_unique<std::__1::pair<long, long> >(std::__1::pair<long, long> const&)",93957342582640,93957342582873],["v8_inspector::V8InspectorImpl::EvaluateScope::TerminateTask::~TerminateTask()",93957342584128,93957342584204],["v8_inspector::V8InspectorSessionImpl::~V8InspectorSessionImpl()",93957342586576,93957342586604],["non-virtual thunk to v8_inspector::V8InspectorSessionImpl::SendProtocolResponse(int, std::__1::unique_ptr<v8_crdtp::Serializable, std::__1::default_delete<v8_crdtp::Serializable> >)",93957342587056,93957342587104],["non-virtual thunk to v8_inspector::V8InspectorSessionImpl::FlushProtocolNotifications()",93957342587216,93957342587231],["v8_inspector::V8InspectorSessionImpl::releaseObjectGroup(v8_inspector::StringView)",93957342587824,93957342587986],["v8_inspector::V8InspectorSessionImpl::unwrapObject(v8_inspector::String16 const&, v8::Local<v8::Value>*, v8::Local<v8::Context>*, v8_inspector::String16*)",93957342588512,93957342589055],["v8_inspector::V8InspectorSessionImpl::wrapObject(v8::Local<v8::Context>, v8::Local<v8::Value>, v8_inspector::String16 const&, bool)",93957342589168,93957342589333],["v8_inspector::V8InspectorSessionImpl::setCustomObjectFormatterEnabled(bool)",93957342589472,93957342589609],["v8_inspector::V8InspectorSessionImpl::dispatchProtocolMessage(v8_inspector::StringView)",93957342589744,93957342590460],["v8_inspector::V8InspectorSessionImpl::supportedDomains()",93957342590496,93957342590817],["v8_inspector::V8InspectorSessionImpl::addInspectedObject(std::__1::unique_ptr<v8_inspector::V8InspectorSession::Inspectable, std::__1::default_delete<v8_inspector::V8InspectorSession::Inspectable> >)",93957342592176,93957342592338],["v8_inspector::V8InspectorSessionImpl::inspectedObject(unsigned int)",93957342593488,93957342593530],["v8_inspector::V8InspectorSessionImpl::cancelPauseOnNextStatement()",93957342593728,93957342593745],["chunkcopy_safe",93957342821472,93957342821681],["Cr_z_inflateEnd",93957342822992,93957342823110],["Cr_z_crc_fold_init",93957342823840,93957342823886],["Cr_z_crc_fold_512to32",93957342825136,93957342825350],["v8::internal::compiler::AccessBuilder::ForExternalIntPtr()",93957342825984,93957342826048],["v8::internal::compiler::AccessBuilder::ForHeapNumberValue()",93957342826112,93957342826193],["v8::internal::compiler::AccessBuilder::ForBigIntLeastSignificantDigit64()",93957342826304,93957342826385],["v8::internal::compiler::AccessBuilder::ForJSObjectPropertiesOrHashKnownPointer()",93957342826464,93957342826528],["v8::internal::compiler::AccessBuilder::ForJSObjectInObjectProperty(v8::internal::compiler::MapRef const&, int)",93957342826592,93957342826671],["v8::internal::compiler::AccessBuilder::ForJSCollectionTable()",93957342826736,93957342826799],["v8::internal::compiler::LoopFinderImpl::PropagateBackward()",93957344395568,93957344397135],["v8::internal::compiler::MachineGraph::Int32Constant(int)",93957344440528,93957344440646],["v8::internal::compiler::MachineOperatorReducer::ReduceInt32Sub(v8::internal::compiler::Node*)",93957344446544,93957344446849],["v8::internal::compiler::(anonymous namespace)::ObjectsMayAlias(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957344460640,93957344460747],["v8::internal::compiler::MachineOperatorReducer::ReduceFloat64InsertLowWord32(v8::internal::compiler::Node*)",93957344465760,93957344466161],["v8::internal::compiler::MachineOperatorReducer::Word32And(v8::internal::compiler::Node*, unsigned int)",93957344470320,93957344470440],["v8::internal::compiler::Reduction v8::internal::compiler::MachineOperatorReducer::ReduceWordNOr<v8::internal::compiler::Word64Adapter>(v8::internal::compiler::Node*)",93957344475136,93957344475650],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::LoadTransformParameters)",93957344477872,93957344478029],["v8::internal::compiler::MachineOperatorBuilder::UnalignedStore(v8::internal::MachineRepresentation)",93957344479056,93957344479240],["v8::internal::compiler::MachineOperatorBuilder::Word32Shr()",93957344479296,93957344479311],["v8::internal::compiler::MachineOperatorBuilder::Int32Sub()",93957344479360,93957344479375],["v8::internal::compiler::MachineOperatorBuilder::Int32Mod()",93957344479424,93957344479439],["v8::internal::compiler::MachineOperatorBuilder::Uint32LessThan()",93957344479488,93957344479503],["v8::internal::compiler::MachineOperatorBuilder::Word64And()",93957344479552,93957344479567],["v8::internal::compiler::MachineOperatorBuilder::Word64Shr()",93957344479616,93957344479631],["v8::internal::compiler::MachineOperatorBuilder::Int64Sub()",93957344479680,93957344479695],["v8::internal::compiler::MachineOperatorBuilder::Int64Mod()",93957344479728,93957344479743],["v8::internal::compiler::MachineOperatorBuilder::Int64LessThanOrEqual()",93957344479760,93957344479775],["v8::internal::compiler::MachineOperatorBuilder::Uint64Mod()",93957344479792,93957344479807],["v8::internal::compiler::MachineOperatorBuilder::Uint64LessThanOrEqual()",93957344479824,93957344479839],["v8::internal::compiler::MachineOperatorBuilder::Word64Clz()",93957344479856,93957344479871],["v8::internal::compiler::MachineOperatorBuilder::Word64ReverseBytes()",93957344479888,93957344479903],["v8::internal::compiler::MachineOperatorBuilder::ChangeFloat32ToFloat64()",93957344479920,93957344479935],["v8::internal::compiler::MachineOperatorBuilder::ChangeFloat64ToInt64()",93957344479952,93957344479967],["v8::internal::compiler::MachineOperatorBuilder::ChangeFloat64ToUint64()",93957344479984,93957344479999],["v8::internal::compiler::MachineOperatorBuilder::TryTruncateFloat32ToInt64()",93957344480016,93957344480031],["v8::internal::compiler::MachineOperatorBuilder::TryTruncateFloat32ToUint64()",93957344480048,93957344480063],["v8::internal::compiler::MachineOperatorBuilder::ChangeInt32ToFloat64()",93957344480080,93957344480095],["v8::internal::compiler::MachineOperatorBuilder::Float64SilenceNaN()",93957344480112,93957344480127],["v8::internal::compiler::MachineOperatorBuilder::RoundInt32ToFloat32()",93957344480144,93957344480159],["v8::internal::compiler::MachineOperatorBuilder::RoundInt64ToFloat64()",93957344480176,93957344480191],["v8::internal::compiler::MachineOperatorBuilder::RoundUint64ToFloat32()",93957344480208,93957344480223],["__gconv_get_alias_db",139871563421840,139871563421848],["__freelocale",139871563473376,139871563473561],["isalpha",139871563474704,139871563474728],["isgraph",139871563474832,139871563474856],["isspace",139871563474928,139871563474952],["isxdigit",139871563474992,139871563475016],["toupper",139871563475072,139871563475113],["_tolower",139871563475152,139871563475181],["xdr_vector",139871564501648,139871564501770],["xdr_u_long",139871564502352,139871564502512],["xdr_longlong_t",139871564502992,139871564502997],["xdr_short",139871564503024,139871564503153],["scalblnf",139871565546512,139871565546629],["__j0f128_finite",139871565557936,139871565562772],["__lgammaf128_r_finite",139871565581728,139871565590131],["__remainderf128_finite",139871565597072,139871565597650],["__gammaf128_r_finite",139871565600528,139871565601953],["atanf128",139871565603888,139871565604736],["ceilf128",139871565605584,139871565605871],["erfcf128",139871565606256,139871565610832],["__do_global_dtors_aux",93957335199616,93957335199680],["v8::AsyncHooks::GetTriggerAsyncId() const",93957335199744,93957335199790],["v8::Shell::CreateWorkerTemplate(v8::Isolate*)",93957335267504,93957335268112],["v8::Shell::WriteIgnitionDispatchCountersFile(v8::Isolate*)",93957335270192,93957335270771],["v8::FuzzerMonitor::Fatal()",93957335282464,93957335282482],["v8::FuzzerMonitor::UseAfterFree()",93957335282528,93957335282647],["v8::internal::PersistentHandlesScope::~PersistentHandlesScope()",93957336768032,93957336768052],["v8::internal::ArrayBufferSweeper::RequestSweepFull()",93957336772080,93957336772095],["v8::internal::ArrayBufferSweeper::SweepingJob::SweepFull()",93957336773136,93957336773762],["v8::internal::CodeObjectRegistry::RegisterNewlyAllocatedCodeObject(unsigned long)",93957336774560,93957336774616],["v8::internal::CodeObjectRegistry::Finalize()",93957336774688,93957336774840],["v8::internal::CollectionBarrier::ResumeThreadsAwaitingCollection()",93957336774992,93957336775045],["v8::internal::CollectionBarrier::AwaitCollectionBackground()",93957336775136,93957336775219],["v8::internal::CollectionBarrier::BlockUntilCollected()",93957336775472,93957336775924],["v8::internal::Worklist<v8::internal::Ephemeron, 64>::Worklist()",93957337302176,93957337302788],["void v8::internal::EphemeronHashTable::BodyDescriptor::IterateBody<v8::internal::RecordMigratedSlotVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::RecordMigratedSlotVisitor*)",93957337311184,93957337311358],["void v8::internal::JSWeakRef::BodyDescriptor::IterateBody<v8::internal::RecordMigratedSlotVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::RecordMigratedSlotVisitor*)",93957337314080,93957337314235],["void v8::internal::PreparseData::BodyDescriptor::IterateBody<v8::internal::RecordMigratedSlotVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::RecordMigratedSlotVisitor*)",93957337315184,93957337315317],["void v8::internal::UncompiledDataWithPreparseData::BodyDescriptor::IterateBody<v8::internal::RecordMigratedSlotVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::RecordMigratedSlotVisitor*)",93957337316128,93957337316227],["v8::internal::PointersUpdatingVisitor::VisitPointer(v8::internal::HeapObject, v8::internal::CompressedObjectSlot)",93957337316560,93957337316588],["v8::internal::PointersUpdatingVisitor::VisitRootPointers(v8::internal::Root, char const*, v8::internal::OffHeapCompressedObjectSlot, v8::internal::OffHeapCompressedObjectSlot)",93957337316784,93957337316835],["v8::internal::YoungGenerationMarkingVisitor::VisitPointers(v8::internal::HeapObject, v8::internal::CompressedObjectSlot, v8::internal::CompressedObjectSlot)",93957337316976,93957337317334],["v8::internal::YoungGenerationMarkingVisitor::VisitPointer(v8::internal::HeapObject, v8::internal::CompressedMaybeObjectSlot)",93957337318016,93957337318328],["v8::internal::(anonymous namespace)::MinorMarkCompactWeakObjectRetainer::RetainAs(v8::internal::Object)",93957337318608,93957337318705],["v8::internal::MinorMarkCompactCollector::RootMarkingVisitor::VisitRootPointer(v8::internal::Root, char const*, v8::internal::FullObjectSlot)",93957337319008,93957337319243],["v8::internal::YoungGenerationMigrationObserver::Move(v8::internal::AllocationSpace, v8::internal::HeapObject, v8::internal::HeapObject, int)",93957337319296,93957337319739],["v8::internal::EvacuateVisitorBase::~EvacuateVisitorBase()",93957337319824,93957337319862],["v8::internal::EvacuateNewSpaceVisitor::Visit(v8::internal::HeapObject, int)",93957337319952,93957337321050],["v8::internal::EvacuateNewSpaceVisitor::AllocateTargetObject(v8::internal::HeapObject, int, v8::internal::HeapObject*)",93957337321584,93957337321928],["v8::internal::EvacuationAllocator::AllocateInLAB(int, v8::internal::AllocationAlignment)",93957337322752,93957337323016],["std::__1::__hash_table<std::__1::unique_ptr<v8::internal::CodeEntry, std::__1::default_delete<v8::internal::CodeEntry> >, v8::internal::CodeEntry::Hasher, v8::internal::CodeEntry::Equals, std::__1::allocator<std::__1::unique_ptr<v8::internal::CodeEntry, std::__1::default_delete<v8::internal::CodeEntry> > > >::rehash(unsigned long)",93957339710064,93957339710435],["std::__1::deque<v8::AllocationProfile::Node, std::__1::allocator<v8::AllocationProfile::Node> >::__add_back_capacity()",93957339722256,93957339722677],["v8::internal::Symbolizer::Symbolizer(v8::internal::CodeMap*)",93957339725488,93957339725497],["v8::internal::TracingCpuProfilerImpl::OnTraceDisabled()",93957339728752,93957339728815],["v8::internal::WeakCodeRegistry::Clear()",93957339729488,93957339729568],["v8::internal::(anonymous namespace)::CanBeHandledVisitor::VisitAssertion(v8::internal::RegExpAssertion*, void*)",93957339731040,93957339731076],["v8::internal::(anonymous namespace)::CanBeHandledVisitor::VisitLookaround(v8::internal::RegExpLookaround*, void*)",93957339731264,93957339731276],["v8::internal::(anonymous namespace)::CompileVisitor::VisitAssertion(v8::internal::RegExpAssertion*, void*)",93957339732256,93957339732421],["v8::internal::(anonymous namespace)::CompileVisitor::VisitQuantifier(v8::internal::RegExpQuantifier*, void*)",93957339734160,93957339737454],["v8::internal::(anonymous namespace)::CompileVisitor::VisitText(v8::internal::RegExpText*, void*)",93957339737824,93957339737908],["v8::internal::(anonymous namespace)::NfaInterpreter<unsigned char>::RunActiveThreads()",93957339743120,93957339744704],["v8::internal::ExperimentalRegExp::CanBeHandled(v8::internal::RegExpTree*, v8::base::Flags<v8::internal::JSRegExp::Flag, int>, int)",93957339746320,93957339746330],["v8::internal::ExperimentalRegExp::IsCompiled(v8::internal::Handle<v8::internal::JSRegExp>, v8::internal::Isolate*)",93957339746768,93957339746803],["v8::internal::(anonymous namespace)::CompileImpl(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSRegExp>)",93957339748080,93957339748561],["v8::internal::(anonymous namespace)::ExecRawImpl(v8::internal::Isolate*, v8::internal::RegExp::CallOrigin, v8::internal::ByteArray, v8::internal::String, int, int*, int, int)",93957339749168,93957339749447],["v8::internal::ExperimentalRegExp::Exec(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSRegExp>, v8::internal::Handle<v8::internal::String>, int, v8::internal::Handle<v8::internal::RegExpMatchInfo>, v8::internal::RegExp::ExecQuirks)",93957339749600,93957339750090],["void v8_inspector::V8Console::call<&v8_inspector::V8Console::debugFunctionCallback>(v8::FunctionCallbackInfo<v8::Value> const&)",93957342450064,93957342450168],["void v8_inspector::V8Console::call<&v8_inspector::V8Console::inspectedObject4>(v8::FunctionCallbackInfo<v8::Value> const&)",93957342451472,93957342451581],["v8_inspector::(anonymous namespace)::returnDataCallback(v8::FunctionCallbackInfo<v8::Value> const&)",93957342453408,93957342453446],["v8_inspector::V8DebuggerAgentImpl::~V8DebuggerAgentImpl()",93957342453904,93957342454867],["v8_inspector::V8DebuggerAgentImpl::didParseSource(std::__1::unique_ptr<v8_inspector::V8DebuggerScript, std::__1::default_delete<v8_inspector::V8DebuggerScript> >, bool)",93957342455264,93957342466102],["v8_inspector::V8DebuggerAgentImpl::enable(v8_crdtp::detail::ValueMaybe<double>, v8_inspector::String16*)",93957342471552,93957342471928],["v8_inspector::V8DebuggerAgentImpl::restore()",93957342474240,93957342474761],["v8_inspector::V8DebuggerAgentImpl::setBreakpointsActive(bool)",93957342475088,93957342475417],["v8_inspector::V8InspectorImpl::resolveUniqueContextId(v8_inspector::V8DebuggerId) const",93957342564016,93957342564160],["v8_inspector::V8InspectorImpl::idleFinished()",93957342573936,93957342573952],["v8_inspector::V8Inspector::Counters::getCounterPtr(char const*)",93957342575536,93957342575782],["v8_inspector::V8InspectorImpl::EvaluateScope::~EvaluateScope()",93957342578960,93957342579106],["void std::__1::__function::__policy_invoker<void (v8_inspector::V8InspectorSessionImpl*)>::__call_impl<std::__1::__function::__default_alloc_func<v8_inspector::V8InspectorImpl::contextCreated(v8_inspector::V8ContextInfo const&)::$_0, void (v8_inspector::V8InspectorSessionImpl*)> >(std::__1::__function::__policy_storage const*, v8_inspector::V8InspectorSessionImpl*)",93957342582560,93957342582607],["std::__1::__shared_ptr_emplace<v8_inspector::V8Inspector::Counters, std::__1::allocator<v8_inspector::V8Inspector::Counters> >::~__shared_ptr_emplace()",93957342582896,93957342582916],["std::__1::__shared_ptr_pointer<v8_inspector::V8InspectorImpl::EvaluateScope::CancelToken*, std::__1::shared_ptr<v8_inspector::V8InspectorImpl::EvaluateScope::CancelToken>::__shared_ptr_default_delete<v8_inspector::V8InspectorImpl::EvaluateScope::CancelToken, v8_inspector::V8InspectorImpl::EvaluateScope::CancelToken>, std::__1::allocator<v8_inspector::V8InspectorImpl::EvaluateScope::CancelToken> >::__on_zero_shared()",93957342584000,93957342584044],["v8_inspector::V8InspectorSessionImpl::create(v8_inspector::V8InspectorImpl*, int, int, v8_inspector::V8Inspector::Channel*, v8_inspector::StringView)",93957342584272,93957342584369],["non-virtual thunk to v8_inspector::V8InspectorSessionImpl::~V8InspectorSessionImpl()",93957342586560,93957342586574],["non-virtual thunk to v8_inspector::V8InspectorSessionImpl::~V8InspectorSessionImpl()",93957342586608,93957342586643],["v8_inspector::V8InspectorSessionImpl::SendProtocolResponse(int, std::__1::unique_ptr<v8_crdtp::Serializable, std::__1::default_delete<v8_crdtp::Serializable> >)",93957342587008,93957342587052],["v8_inspector::V8InspectorSessionImpl::SendProtocolNotification(std::__1::unique_ptr<v8_crdtp::Serializable, std::__1::default_delete<v8_crdtp::Serializable> >)",93957342587104,93957342587140],["v8_inspector::V8InspectorSessionImpl::FlushProtocolNotifications()",93957342587200,93957342587215],["v8_inspector::V8InspectorSessionImpl::reset()",93957342587232,93957342587447],["v8_inspector::V8InspectorSessionImpl::findInjectedScript(v8_inspector::RemoteObjectIdBase*, v8_inspector::InjectedScript*&)",93957342587680,93957342587819],["v8_inspector::V8InspectorSessionImpl::releaseObjectGroup(v8_inspector::String16 const&)",93957342588000,93957342588127],["v8::internal::compiler::LoadElimination::AbstractField::KillConst(v8::internal::compiler::Node*, v8::internal::Zone*) const",93957344370528,93957344371498],["v8::internal::compiler::LoopPeeler::PeelInnerLoopsOfTree()",93957344415440,93957344415514],["v8::internal::compiler::(anonymous namespace)::MachineRepresentationChecker::CheckValueInputIsTaggedOrPointer(v8::internal::compiler::Node const*, int)",93957344438672,93957344439029],["v8::internal::compiler::MachineGraph::ExternalConstant(v8::internal::ExternalReference)",93957344441648,93957344441733],["v8::internal::compiler::MachineOperatorReducer::Word64And(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957344445440,93957344445549],["v8::internal::compiler::MachineOperatorReducer::TruncateInt64ToInt32(v8::internal::compiler::Node*)",93957344448048,93957344448275],["v8::internal::compiler::MachineOperatorReducer::ReduceWord32Sar(v8::internal::compiler::Node*)",93957344458960,93957344459326],["v8::internal::compiler::MachineOperatorReducer::ReduceInt32Div(v8::internal::compiler::Node*)",93957344463072,93957344463673],["v8::internal::compiler::FloatMatcher<double, (v8::internal::compiler::IrOpcode::Value)26>::IsPositiveOrNegativePowerOf2() const",93957344465456,93957344465565],["v8::internal::compiler::MachineOperatorReducer::ReduceStore(v8::internal::compiler::Node*)",93957344466576,93957344466996],["v8::internal::compiler::MachineOperatorReducer::ReduceWord64Comparisons(v8::internal::compiler::Node*)",93957344469040,93957344470171],["v8::internal::compiler::MachineOperatorReducer::ReduceWord32Shifts(v8::internal::compiler::Node*)",93957344470576,93957344470779],["v8::internal::compiler::MachineOperatorReducer::TryMatchWord32Ror(v8::internal::compiler::Node*)",93957344474368,93957344474900],["v8::internal::compiler::Reduction v8::internal::compiler::MachineOperatorReducer::ReduceWordNXor<v8::internal::compiler::Word64Adapter>(v8::internal::compiler::Node*)",93957344475824,93957344476368],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::StoreRepresentation)",93957344477424,93957344477598],["v8::internal::compiler::AtomicOpType(v8::internal::compiler::Operator const*)",93957344478256,93957344478266],["v8::internal::compiler::MachineOperatorBuilder::UnalignedLoad(v8::internal::MachineType)",93957344478656,93957344479046],["v8::internal::compiler::MachineOperatorBuilder::Word32Or()",93957344479248,93957344479262],["v8::internal::compiler::MachineOperatorBuilder::Word32Shl()",93957344479280,93957344479295],["v8::internal::compiler::MachineOperatorBuilder::Word32Ror()",93957344479312,93957344479327],["v8::internal::compiler::MachineOperatorBuilder::Int32Add()",93957344479344,93957344479359],["v8::internal::compiler::MachineOperatorBuilder::Int32Mul()",93957344479376,93957344479391],["v8::internal::compiler::MachineOperatorBuilder::Int32Div()",93957344479408,93957344479423],["v8::internal::compiler::MachineOperatorBuilder::Int32LessThan()",93957344479440,93957344479455],["v8::internal::compiler::MachineOperatorBuilder::Uint32Div()",93957344479472,93957344479487],["v8::internal::compiler::MachineOperatorBuilder::Uint32LessThanOrEqual()",93957344479504,93957344479519],["v8::internal::compiler::MachineOperatorBuilder::Uint32MulHigh()",93957344479536,93957344479551],["v8::internal::compiler::MachineOperatorBuilder::Word64Or()",93957344479568,93957344479583],["v8::internal::compiler::MachineOperatorBuilder::Word64Shl()",93957344479600,93957344479615],["v8::internal::compiler::MachineOperatorBuilder::Word64Ror()",93957344479632,93957344479647],["v8::internal::compiler::MachineOperatorBuilder::Int64Add()",93957344479664,93957344479679],["v8::internal::compiler::MachineOperatorBuilder::Int64Mul()",93957344479696,93957344479711],["gnu_get_libc_release",139871563419168,139871563419176],["__gconv_destroy_spec",139871563462304,139871563462326],["__newlocale",139871563470416,139871563472990],["__assert_fail",139871563474464,139871563474530],["isalnum",139871563474672,139871563474694],["iscntrl",139871563474736,139871563474758],["islower",139871563474800,139871563474824],["isprint",139871563474864,139871563474888],["passwd2des",139871564500784,139871564500851],["xdr_void",139871564502016,139871564502022],["xdr_long",139871564502288,139871564502343],["xdr_hyper",139871564502512,139871564502738],["fminf",139871565546048,139871565546106],["__acoshf128_finite",139871565550000,139871565550436],["__fmodf128_finite",139871565555504,139871565556726],["__j1f128_finite",139871565567776,139871565572789],["__ynf128_finite",139871565580320,139871565581728],["__logf128_finite",139871565590144,139871565591303],["__powf128_finite",139871565592624,139871565597069],["__sinhf128_finite",139871565597664,139871565598314],["deregister_tm_clones",93957335199504,93957335199552],["frame_dummy",93957335199680,93957335199696],["v8::Shell::ReadLine(v8::FunctionCallbackInfo<v8::Value> const&)",93957335265744,93957335265787],["v8::Shell::CreateAsyncHookTemplate(v8::Isolate*)",93957335268512,93957335268843],["v8::Shell::CreateEvaluationContext(v8::Isolate*)",93957335269504,93957335270192],["v8::Shell::WriteLcovData(v8::Isolate*, char const*)",93957335270784,93957335282252],["v8::internal::LocalHandles::Iterate(v8::internal::RootVisitor*)",93957336766192,93957336766365],["v8::internal::AllocationCounter::AdvanceAllocationObservers(unsigned long)",93957336768576,93957336768603],["v8::internal::ArrayBufferSweeper::RequestSweepYoung()",93957336771040,93957336771052],["v8::internal::ArrayBufferSweeper::OldBytes()",93957336772112,93957336772125],["v8::internal::ArrayBufferSweeper::SweepingJob::SweepYoung()",93957336772688,93957336773133],["void std::__1::__function::__policy_invoker<void ()>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::ArrayBufferSweeper::RequestSweep(v8::internal::ArrayBufferSweeper::SweepingScope)::$_0, void ()> >(std::__1::__function::__policy_storage const*)",93957336773776,93957336774314],["v8::internal::BasicMemoryChunk::Initialize(v8::internal::Heap*, unsigned long, unsigned long, unsigned long, unsigned long, v8::internal::BaseSpace*, v8::internal::VirtualMemory)",93957336774368,93957336774547],["v8::internal::CodeObjectRegistry::RegisterAlreadyExistingCodeObject(unsigned long)",93957336774624,93957336774651],["v8::internal::MinorMarkCompactCollector::EvacuateEpilogue()",93957337284608,93957337284674],["v8::internal::ExternalStringTableCleaner::VisitRootPointers(v8::internal::Root, char const*, v8::internal::FullObjectSlot, v8::internal::FullObjectSlot)",93957337305168,93957337305428],["void v8::internal::CallIterateBody::apply<v8::internal::FlexibleBodyDescriptor<8>, v8::internal::RecordMigratedSlotVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::RecordMigratedSlotVisitor*)",93957337310416,93957337310533],["void v8::internal::WasmTypeInfo::BodyDescriptor::IterateBody<v8::internal::RecordMigratedSlotVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::RecordMigratedSlotVisitor*)",93957337311904,93957337312003],["void v8::internal::JSTypedArray::BodyDescriptor::IterateBody<v8::internal::RecordMigratedSlotVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::RecordMigratedSlotVisitor*)",93957337313680,93957337313852],["void v8::internal::Code::BodyDescriptor::IterateBody<v8::internal::RecordMigratedSlotVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::RecordMigratedSlotVisitor*)",93957337314384,93957337314520],["void v8::internal::SmallOrderedHashTable<v8::internal::SmallOrderedNameDictionary>::BodyDescriptor::IterateBody<v8::internal::RecordMigratedSlotVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::RecordMigratedSlotVisitor*)",93957337314928,93957337315045],["void v8::internal::DataHandler::BodyDescriptor::IterateBody<v8::internal::RecordMigratedSlotVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::RecordMigratedSlotVisitor*)",93957337315488,93957337315671],["void v8::internal::SharedFunctionInfo::BodyDescriptor::IterateBody<v8::internal::RecordMigratedSlotVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::RecordMigratedSlotVisitor*)",93957337316000,93957337316117],["void v8::internal::ExportedSubClass::BodyDescriptor::IterateBody<v8::internal::RecordMigratedSlotVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::RecordMigratedSlotVisitor*)",93957337316240,93957337316377],["v8::internal::PointersUpdatingVisitor::VisitPointers(v8::internal::HeapObject, v8::internal::CompressedMaybeObjectSlot, v8::internal::CompressedMaybeObjectSlot)",93957337316448,93957337316547],["v8::internal::PointersUpdatingVisitor::VisitPointer(v8::internal::HeapObject, v8::internal::CompressedMaybeObjectSlot)",93957337316592,93957337316656],["v8::internal::PointersUpdatingVisitor::VisitRootPointers(v8::internal::Root, char const*, v8::internal::FullObjectSlot, v8::internal::FullObjectSlot)",93957337316704,93957337316779],["non-virtual thunk to v8::internal::PointersUpdatingVisitor::~PointersUpdatingVisitor()",93957337316848,93957337316862],["v8::internal::EvacuationWeakObjectRetainer::RetainAs(v8::internal::Object)",93957337316928,93957337316972],["v8::internal::YoungGenerationMarkingVisitor::VisitPointers(v8::internal::HeapObject, v8::internal::CompressedMaybeObjectSlot, v8::internal::CompressedMaybeObjectSlot)",93957337317344,93957337317718],["v8::internal::ProfilerListener::CodeCreateEvent(v8::internal::CodeEventListener::LogEventsAndTags, v8::internal::Handle<v8::internal::AbstractCode>, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::Name>, int, int)",93957339702240,93957339706146],["v8::internal::SamplingHeapProfiler::AddStack()",93957339713632,93957339715283],["v8::internal::AllocationProfile::~AllocationProfile()",93957339720688,93957339720846],["v8::internal::StringsStorage::GetCopy(char const*)",93957339723408,93957339723687],["v8::internal::StringsStorage::Release(char const*)",93957339724880,93957339725186],["v8::internal::TickSample::Init(v8::internal::Isolate*, v8::RegisterState const&, v8::internal::TickSample::RecordCEntryFrame, bool, bool, v8::base::TimeDelta)",93957339727200,93957339727429],["v8::internal::TracingCpuProfilerImpl::~TracingCpuProfilerImpl()",93957339728608,93957339728636],["v8::internal::TracingCpuProfilerImpl::OnTraceEnabled()::$_0::__invoke(v8::Isolate*, void*)",93957339729024,93957339729037],["v8::internal::WeakCodeRegistry::Sweep(v8::internal::WeakCodeRegistry::Listener*)",93957339729232,93957339729476],["v8::internal::ExperimentalRegExpCompiler::CanBeHandled(v8::internal::RegExpTree*, v8::base::Flags<v8::internal::JSRegExp::Flag, int>, int)",93957339729568,93957339729634],["v8::internal::(anonymous namespace)::CanBeHandledVisitor::VisitAlternative(v8::internal::RegExpAlternative*, void*)",93957339730944,93957339731038],["v8::internal::(anonymous namespace)::CanBeHandledVisitor::VisitCharacterClass(v8::internal::RegExpCharacterClass*, void*)",93957339731088,93957339731124],["v8::internal::(anonymous namespace)::CompileVisitor::VisitGroup(v8::internal::RegExpGroup*, void*)",93957339731232,93957339731258],["v8::internal::(anonymous namespace)::CanBeHandledVisitor::VisitText(v8::internal::RegExpText*, void*)",93957339731280,93957339731375],["v8::internal::(anonymous namespace)::CompileVisitor::VisitAlternative(v8::internal::RegExpAlternative*, void*)",93957339732160,93957339732243],["v8::internal::(anonymous namespace)::CompileVisitor::VisitCharacterClass(v8::internal::RegExpCharacterClass*, void*)",93957339732432,93957339733865],["void v8_inspector::V8Console::call<&v8_inspector::V8Console::Dir>(v8::FunctionCallbackInfo<v8::Value> const&)",93957342448752,93957342448927],["void v8_inspector::V8Console::call<&v8_inspector::V8Console::inspectCallback>(v8::FunctionCallbackInfo<v8::Value> const&)",93957342450512,93957342450651],["void v8_inspector::V8Console::call<&v8_inspector::V8Console::inspectedObject2>(v8::FunctionCallbackInfo<v8::Value> const&)",93957342451248,93957342451357],["v8_inspector::V8Console::CommandLineAPIScope::accessorSetterCallback(v8::Local<v8::Name>, v8::Local<v8::Value>, v8::PropertyCallbackInfo<void> const&)",93957342452048,93957342452288],["v8_inspector::(anonymous namespace)::consoleContextToString(v8::Isolate*, v8::debug::ConsoleContext const&)",93957342453088,93957342453404],["void std::__1::__function::__policy_invoker<void (v8_inspector::V8InspectorSessionImpl*)>::__call_impl<std::__1::__function::__default_alloc_func<v8_inspector::V8Console::Profile(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&)::$_0, void (v8_inspector::V8InspectorSessionImpl*)> >(std::__1::__function::__policy_storage const*, v8_inspector::V8InspectorSessionImpl*)",93957342453456,93957342453544],["v8_inspector::V8DebuggerAgentImpl::V8DebuggerAgentImpl(v8_inspector::V8InspectorSessionImpl*, v8_crdtp::FrontendChannel*, v8_inspector::protocol::DictionaryValue*)",93957342453648,93957342453889],["v8_inspector::V8DebuggerAgentImpl::~V8DebuggerAgentImpl()",93957342454880,93957342454908],["v8_inspector::(anonymous namespace)::HeapStatsStream::WriteHeapStatsChunk(v8::HeapStatsUpdate*, int)",93957342560416,93957342560548],["v8_inspector::V8InspectorImpl::hasConsoleMessageStorage(int)",93957342565248,93957342565640],["v8_inspector::V8InspectorImpl::discardInspectedContext(int, int)",93957342572144,93957342572715],["v8_inspector::V8InspectorImpl::storeCurrentStackTrace(v8_inspector::StringView)",93957342575312,93957342575344],["v8_inspector::V8InspectorImpl::asyncTaskFinished(void*)",93957342575488,93957342575508],["v8_inspector::V8InspectorImpl::enableCounters()",93957342575968,93957342576343],["v8_inspector::V8InspectorImpl::forEachContext(int, std::__1::function<void (v8_inspector::InspectedContext*)> const&)",93957342577520,93957342578903],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<int, std::__1::unique_ptr<v8_inspector::V8ConsoleMessageStorage, std::__1::default_delete<v8_inspector::V8ConsoleMessageStorage> > >, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<int, std::__1::unique_ptr<v8_inspector::V8ConsoleMessageStorage, std::__1::default_delete<v8_inspector::V8ConsoleMessageStorage> > >, std::__1::__unordered_map_hasher<int, std::__1::__hash_value_type<int, std::__1::unique_ptr<v8_inspector::V8ConsoleMessageStorage, std::__1::default_delete<v8_inspector::V8ConsoleMessageStorage> > >, std::__1::hash<int>, std::__1::equal_to<int>, true>, std::__1::__unordered_map_equal<int, std::__1::__hash_value_type<int, std::__1::unique_ptr<v8_inspector::V8ConsoleMessageStorage, std::__1::default_delete<v8_inspector::V8ConsoleMessageStorage> > >, std::__1::equal_to<int>, std::__1::hash<int>, true>, std::__1::allocator<std::__1::__hash_value_type<int, std::__1::unique_ptr<v8_inspector::V8ConsoleMessageStorage, std::__1::default_delete<v8_inspector::V8ConsoleMessageStorage> > > > >::__emplace_unique_key_args<int, std::__1::pair<int, std::__1::unique_ptr<v8_inspector::V8ConsoleMessageStorage, std::__1::default_delete<v8_inspector::V8ConsoleMessageStorage> > > >(int const&, std::__1::pair<int, std::__1::unique_ptr<v8_inspector::V8ConsoleMessageStorage, std::__1::default_delete<v8_inspector::V8ConsoleMessageStorage> > >&&)",93957342579488,93957342580402],["std::__1::unique_ptr<std::__1::__hash_node<std::__1::__hash_value_type<int, std::__1::unique_ptr<std::__1::unordered_map<int, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> > > > >, std::__1::default_delete<std::__1::unordered_map<int, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> > > > > > > >, void*>, std::__1::__hash_node_destructor<std::__1::allocator<std::__1::__hash_node<std::__1::__hash_value_type<int, std::__1::unique_ptr<std::__1::unordered_map<int, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> > > > >, std::__1::default_delete<std::__1::unordered_map<int, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> > > > > > > >, void*> > > >::~unique_ptr()",93957342582352,93957342582549],["void std::__1::__function::__policy_invoker<void (v8_inspector::V8InspectorSessionImpl*)>::__call_impl<std::__1::__function::__default_alloc_func<v8_inspector::V8InspectorImpl::contextCollected(int, int)::$_1, void (v8_inspector::V8InspectorSessionImpl*)> >(std::__1::__function::__policy_storage const*, v8_inspector::V8InspectorSessionImpl*)",93957342582608,93957342582631],["void std::__1::__function::__policy_invoker<void (v8_inspector::V8InspectorSessionImpl*)>::__call_impl<std::__1::__function::__default_alloc_func<v8_inspector::V8InspectorImpl::resetContextGroup(int)::$_2, void (v8_inspector::V8InspectorSessionImpl*)> >(std::__1::__function::__policy_storage const*, v8_inspector::V8InspectorSessionImpl*)",93957342582880,93957342582893],["std::__1::__shared_ptr_emplace<v8_inspector::V8Inspector::Counters, std::__1::allocator<v8_inspector::V8Inspector::Counters> >::~__shared_ptr_emplace()",93957342582928,93957342582966],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<int, std::__1::unique_ptr<std::__1::unordered_map<int, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> > > > >, std::__1::default_delete<std::__1::unordered_map<int, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> > > > > > > >, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<int, std::__1::unique_ptr<std::__1::unordered_map<int, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> > > > >, std::__1::default_delete<std::__1::unordered_map<int, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> > > > > > > >, std::__1::__unordered_map_hasher<int, std::__1::__hash_value_type<int, std::__1::unique_ptr<std::__1::unordered_map<int, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> > > > >, std::__1::default_delete<std::__1::unordered_map<int, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> > > > > > > >, std::__1::hash<int>, std::__1::equal_to<int>, true>, std::__1::__unordered_map_equal<int, std::__1::__hash_value_type<int, std::__1::unique_ptr<std::__1::unordered_map<int, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> > > > >, std::__1::default_delete<std::__1::unordered_map<int, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> > > > > > > >, std::__1::equal_to<int>, std::__1::hash<int>, true>, std::__1::allocator<std::__1::__hash_value_type<int, std::__1::unique_ptr<std::__1::unordered_map<int, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> > > > >, std::__1::default_delete<std::__1::unordered_map<int, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::unique_ptr<v8_inspector::InspectedContext, std::__1::default_delete<v8_inspector::InspectedContext> > > > > > > > > >::__emplace_unique_key_args<int, std::__1::piecewise_construct_t const&, std::__1::tuple<int const&>, std::__1::tuple<> >(int const&, std::__1::piecewise_construct_t const&, std::__1::tuple<int const&>&&, std::__1::tuple<>&&)",93957342582992,93957342583986],["v8_inspector::V8InspectorImpl::EvaluateScope::TerminateTask::~TerminateTask()",93957342584048,93957342584121],["v8_inspector::V8InspectorImpl::EvaluateScope::TerminateTask::Run()",93957342584208,93957342584261],["v8_inspector::V8InspectorSessionImpl::V8InspectorSessionImpl(v8_inspector::V8InspectorImpl*, int, int, v8_inspector::V8Inspector::Channel*, v8_inspector::StringView)",93957342584384,93957342585778],["v8::internal::compiler::Linkage::ComputeIncoming(v8::internal::Zone*, v8::internal::OptimizedCompilationInfo*)",93957344345008,93957344345074],["v8::internal::compiler::LoadElimination::AbstractState::KillAll(v8::internal::Zone*) const",93957344380672,93957344381192],["v8::internal::compiler::LoopFinderImpl::ConnectLoopTree(int)",93957344402976,93957344404567],["v8::internal::compiler::InductionVariable::AddUpperBound(v8::internal::compiler::Node*, v8::internal::compiler::InductionVariable::ConstraintKind)",93957344425920,93957344426754],["v8::internal::compiler::(anonymous namespace)::MachineRepresentationChecker::CheckValueInputRepresentationIs(v8::internal::compiler::Node const*, int, v8::internal::MachineRepresentation)",93957344437136,93957344437554],["std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::operator<< <std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*)",93957344440240,93957344440279],["v8::internal::compiler::MachineGraph::RelocatableIntPtrConstant(long, v8::internal::RelocInfo::Mode)",93957344441120,93957344441258],["v8::internal::compiler::MachineOperatorReducer::ReplaceInt64(long)",93957344443760,93957344443806],["v8::internal::compiler::MachineOperatorReducer::Word32Sar(v8::internal::compiler::Node*, unsigned int)",93957344445200,93957344445313],["v8::internal::compiler::MachineOperatorReducer::ReduceInt32Add(v8::internal::compiler::Node*)",93957344445664,93957344446417],["v8::internal::compiler::MachineOperatorReducer::Int32Div(v8::internal::compiler::Node*, int)",93957344446944,93957344447492],["v8::internal::compiler::MachineOperatorReducer::Reduce(v8::internal::compiler::Node*)",93957344448464,93957344456435],["v8::internal::compiler::MachineOperatorReducer::ReduceWord32Shr(v8::internal::compiler::Node*)",93957344458528,93957344458703],["v8::internal::compiler::MachineOperatorReducer::ReduceWord32Equal(v8::internal::compiler::Node*)",93957344459584,93957344460495],["v8::internal::compiler::MachineOperatorReducer::ReduceInt64Sub(v8::internal::compiler::Node*)",93957344461376,93957344461949],["v8::internal::compiler::MachineOperatorReducer::ReduceInt32Mod(v8::internal::compiler::Node*)",93957344464080,93957344464631],["v8::internal::compiler::MachineOperatorReducer::ReplaceFloat32(float)",93957344465376,93957344465442],["v8::internal::compiler::IntMatcher<int, (v8::internal::compiler::IrOpcode::Value)22>::IntMatcher(v8::internal::compiler::Node*)",93957344465568,93957344465746],["v8::internal::compiler::MachineOperatorReducer::ReduceFloat64InsertHighWord32(v8::internal::compiler::Node*)",93957344466176,93957344466565],["v8::internal::compiler::MachineOperatorReducer::ReduceFloat64Compare(v8::internal::compiler::Node*)",93957344467008,93957344468545],["v8::internal::compiler::MachineOperatorReducer::ReduceConditional(v8::internal::compiler::Node*)",93957344468768,93957344469025],["v8::internal::compiler::BinopMatcher<v8::internal::compiler::IntMatcher<unsigned long, (v8::internal::compiler::IrOpcode::Value)23>, v8::internal::compiler::IntMatcher<unsigned long, (v8::internal::compiler::IrOpcode::Value)23> >::BinopMatcher(v8::internal::compiler::Node*)",93957344470176,93957344470310],["v8::internal::compiler::MachineOperatorReducer::Map64To32Comparison(v8::internal::compiler::Operator const*, bool)",93957344470448,93957344470575],["v8::internal::compiler::Reduction v8::internal::compiler::MachineOperatorReducer::ReduceWordNAnd<v8::internal::compiler::Word32Adapter>(v8::internal::compiler::Node*)",93957344470784,93957344471821],["v8::internal::compiler::Reduction v8::internal::compiler::MachineOperatorReducer::ReduceWordNAnd<v8::internal::compiler::Word64Adapter>(v8::internal::compiler::Node*)",93957344472752,93957344474356],["v8::internal::compiler::Reduction v8::internal::compiler::MachineOperatorReducer::ReduceWordNOr<v8::internal::compiler::Word32Adapter>(v8::internal::compiler::Node*)",93957344474912,93957344475128],["v8::internal::compiler::Reduction v8::internal::compiler::MachineOperatorReducer::ReduceWordNXor<v8::internal::compiler::Word32Adapter>(v8::internal::compiler::Node*)",93957344475664,93957344475821],["v8::base::Optional<std::__1::pair<v8::internal::compiler::Node*, unsigned int> > v8::internal::compiler::MachineOperatorReducer::ReduceWord32EqualForConstantRhs<v8::internal::compiler::Word64Adapter>(v8::internal::compiler::Node*, unsigned int)",93957344476368,93957344477058],["v8::internal::compiler::MachineOperatorReducer::reducer_name() const",93957344477408,93957344477421],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::LoadTransformation)",93957344477600,93957344477861],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::LoadLaneParameters)",93957344478032,93957344478252],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::StoreLaneParameters)",93957344478272,93957344478493],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::reserve(unsigned long)",93957346784576,93957346784686],["iconv",139871563419776,139871563420255],["__gconv_get_cache",139871563458560,139871563458568],["localeconv",139871563469792,139871563470286],["__ctype_get_mb_cur_max",139871563470384,139871563470405],["__duplocale",139871563472992,139871563473373],["__uselocale",139871563473568,139871563473663],["__assert_perror_fail",139871563474544,139871563474645],["svcfd_create",139871564497616,139871564497621],["xdecrypt",139871564501072,139871564501265],["xdr_free",139871564501952,139871564502014],["xdr_int",139871564502032,139871564502160],["clogf",139871565541744,139871565542848],["significandf",139871565546240,139871565546280],["fminmagf",139871565546784,139871565546919],["__atan2f128_finite",139871565552320,139871565553197],["__expf128_finite",139871565554256,139871565555500],["__hypotf128_finite",139871565556736,139871565557929],["__y0f128_finite",139871565562784,139871565567764],["__y1f128_finite",139871565572800,139871565578036],["register_tm_clones",93957335199552,93957335199616],["v8::Shell::LookupCounter(char const*)",93957335265104,93957335265116],["v8::Shell::CreateRealmTemplate(v8::Isolate*)",93957335266128,93957335267249],["v8::Shell::CreateD8Template(v8::Isolate*)",93957335268112,93957335268499],["v8::Shell::PromiseRejectCallback(v8::PromiseRejectMessage)",93957335268848,93957335269167],["v8::internal::IdentityMap<unsigned int, v8::internal::ZoneAllocationPolicy>::~IdentityMap()",93957336765616,93957336765662],["v8::internal::PersistentHandles::AddBlock()",93957336767008,93957336767367],["v8::internal::AllocationCounter::AddAllocationObserver(v8::internal::AllocationObserver*)",93957336768128,93957336768368],["v8::internal::PauseAllocationObserversScope::PauseAllocationObserversScope(v8::internal::Heap*)",93957336769488,93957336769617],["v8::internal::ArrayBufferSweeper::AdjustCountersAndMergeIfPossible()",93957336770704,93957336771037],["v8::internal::ArrayBufferSweeper::RequestSweep(v8::internal::ArrayBufferSweeper::SweepingScope)",93957336771056,93957336772077],["v8::internal::ArrayBufferSweeper::YoungBytes()",93957336772096,93957336772109],["v8::internal::ArrayBufferSweeper::ReleaseAll()",93957336772128,93957336772394],["int v8::internal::MarkCompactCollectorBase::CollectRememberedSetUpdatingItems<v8::internal::OldLargeObjectSpace>(std::__1::vector<std::__1::unique_ptr<v8::internal::UpdatingItem, std::__1::default_delete<v8::internal::UpdatingItem> >, std::__1::allocator<std::__1::unique_ptr<v8::internal::UpdatingItem, std::__1::default_delete<v8::internal::UpdatingItem> > > >*, v8::internal::OldLargeObjectSpace*, v8::internal::RememberedSetUpdatingMode)",93957337272384,93957337272734],["v8::internal::YoungGenerationMigrationObserver::~YoungGenerationMigrationObserver()",93957337300976,93957337301000],["v8::internal::MarkCompactCollector::CustomRootBodyMarkingVisitor::VisitPointer(v8::internal::HeapObject, v8::internal::CompressedObjectSlot)",93957337303936,93957337304253],["v8::internal::RecordMigratedSlotVisitor::VisitPointers(v8::internal::HeapObject, v8::internal::CompressedObjectSlot, v8::internal::CompressedObjectSlot)",93957337306304,93957337306406],["void v8::internal::BodyDescriptorApply<v8::internal::CallIterateBody, void, v8::internal::Map, v8::internal::HeapObject, int, v8::internal::RecordMigratedSlotVisitor*>(v8::internal::InstanceType, v8::internal::Map, v8::internal::HeapObject, int, v8::internal::RecordMigratedSlotVisitor*)",93957337307280,93957337310274],["void v8::internal::CallIterateBody::apply<v8::internal::DescriptorArray::BodyDescriptor, v8::internal::RecordMigratedSlotVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::RecordMigratedSlotVisitor*)",93957337310928,93957337311045],["void v8::internal::WasmArray::BodyDescriptor::IterateBody<v8::internal::RecordMigratedSlotVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::RecordMigratedSlotVisitor*)",93957337311488,93957337311637],["void v8::internal::WasmInstanceObject::BodyDescriptor::IterateBody<v8::internal::RecordMigratedSlotVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::RecordMigratedSlotVisitor*)",93957337312384,93957337313037],["void v8::internal::JSDataView::BodyDescriptor::IterateBody<v8::internal::RecordMigratedSlotVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::RecordMigratedSlotVisitor*)",93957337313536,93957337313676],["void v8::internal::WeakCell::BodyDescriptor::IterateBody<v8::internal::RecordMigratedSlotVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::RecordMigratedSlotVisitor*)",93957337313856,93957337314070],["void v8::internal::Map::BodyDescriptor::IterateBody<v8::internal::RecordMigratedSlotVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::RecordMigratedSlotVisitor*)",93957337314240,93957337314376],["void v8::internal::BytecodeArray::BodyDescriptor::IterateBody<v8::internal::RecordMigratedSlotVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::RecordMigratedSlotVisitor*)",93957337314528,93957337314657],["void v8::internal::SmallOrderedHashTable<v8::internal::SmallOrderedHashMap>::BodyDescriptor::IterateBody<v8::internal::RecordMigratedSlotVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::RecordMigratedSlotVisitor*)",93957337314800,93957337314917],["void v8::internal::SwissNameDictionary::BodyDescriptor::IterateBody<v8::internal::RecordMigratedSlotVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::RecordMigratedSlotVisitor*)",93957337315056,93957337315173],["void v8::internal::AllocationSite::BodyDescriptor::IterateBody<v8::internal::RecordMigratedSlotVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::RecordMigratedSlotVisitor*)",93957337315328,93957337315474],["void v8::internal::SubclassBodyDescriptor<v8::internal::FixedBodyDescriptor<4, 28, 28>, v8::internal::FixedBodyDescriptor<28, 72, 72> >::IterateBody<v8::internal::RecordMigratedSlotVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::RecordMigratedSlotVisitor*)",93957337315680,93957337315831],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::CodeEntryAndLineNumber, v8::internal::ProfileNode*>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::CodeEntryAndLineNumber, v8::internal::ProfileNode*>, std::__1::__unordered_map_hasher<v8::internal::CodeEntryAndLineNumber, std::__1::__hash_value_type<v8::internal::CodeEntryAndLineNumber, v8::internal::ProfileNode*>, v8::internal::ProfileNode::Hasher, v8::internal::ProfileNode::Equals, true>, std::__1::__unordered_map_equal<v8::internal::CodeEntryAndLineNumber, std::__1::__hash_value_type<v8::internal::CodeEntryAndLineNumber, v8::internal::ProfileNode*>, v8::internal::ProfileNode::Equals, v8::internal::ProfileNode::Hasher, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::CodeEntryAndLineNumber, v8::internal::ProfileNode*> > >::__emplace_unique_key_args<v8::internal::CodeEntryAndLineNumber, std::__1::piecewise_construct_t const&, std::__1::tuple<v8::internal::CodeEntryAndLineNumber&&>, std::__1::tuple<> >(v8::internal::CodeEntryAndLineNumber const&, std::__1::piecewise_construct_t const&, std::__1::tuple<v8::internal::CodeEntryAndLineNumber&&>&&, std::__1::tuple<>&&)",93957339696080,93957339697205],["v8::internal::ProfilerListener::CodeMoveEvent(v8::internal::AbstractCode, v8::internal::AbstractCode)",93957339707856,93957339708083],["v8::internal::ProfilerStats::AddReason(v8::internal::ProfilerStats::Reason)",93957339712592,93957339712605],["v8::internal::SamplingHeapProfiler::GetAllocationProfile()",93957339719200,93957339719748],["v8::internal::AllocationProfile::GetSamples()",93957339720512,93957339720522],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::SamplingHeapProfiler::Sample*, std::__1::unique_ptr<v8::internal::SamplingHeapProfiler::Sample, std::__1::default_delete<v8::internal::SamplingHeapProfiler::Sample> > >, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::SamplingHeapProfiler::Sample*, std::__1::unique_ptr<v8::internal::SamplingHeapProfiler::Sample, std::__1::default_delete<v8::internal::SamplingHeapProfiler::Sample> > >, std::__1::__unordered_map_hasher<v8::internal::SamplingHeapProfiler::Sample*, std::__1::__hash_value_type<v8::internal::SamplingHeapProfiler::Sample*, std::__1::unique_ptr<v8::internal::SamplingHeapProfiler::Sample, std::__1::default_delete<v8::internal::SamplingHeapProfiler::Sample> > >, std::__1::hash<v8::internal::SamplingHeapProfiler::Sample*>, std::__1::equal_to<v8::internal::SamplingHeapProfiler::Sample*>, true>, std::__1::__unordered_map_equal<v8::internal::SamplingHeapProfiler::Sample*, std::__1::__hash_value_type<v8::internal::SamplingHeapProfiler::Sample*, std::__1::unique_ptr<v8::internal::SamplingHeapProfiler::Sample, std::__1::default_delete<v8::internal::SamplingHeapProfiler::Sample> > >, std::__1::equal_to<v8::internal::SamplingHeapProfiler::Sample*>, std::__1::hash<v8::internal::SamplingHeapProfiler::Sample*>, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::SamplingHeapProfiler::Sample*, std::__1::unique_ptr<v8::internal::SamplingHeapProfiler::Sample, std::__1::default_delete<v8::internal::SamplingHeapProfiler::Sample> > > > >::__emplace_unique_key_args<v8::internal::SamplingHeapProfiler::Sample*, v8::internal::SamplingHeapProfiler::Sample*, std::__1::unique_ptr<v8::internal::SamplingHeapProfiler::Sample, std::__1::default_delete<v8::internal::SamplingHeapProfiler::Sample> > >(v8::internal::SamplingHeapProfiler::Sample* const&, v8::internal::SamplingHeapProfiler::Sample*&&, std::__1::unique_ptr<v8::internal::SamplingHeapProfiler::Sample, std::__1::default_delete<v8::internal::SamplingHeapProfiler::Sample> >&&)",93957339721168,93957339722059],["v8::internal::StringsStorage::StringsStorage()",93957339723056,93957339723235],["v8::internal::StringsStorage::GetVFormatted(char const*, __va_list_tag*)",93957339723840,93957339724133],["v8::internal::StringsStorage::GetConsName(char const*, v8::internal::Name)",93957339724448,93957339724873],["v8::base::TemplateHashMapImpl<void*, void*, v8::base::HashEqualityThenKeyMatcher<void*, bool (*)(void*, void*)>, v8::base::DefaultAllocationPolicy>::Remove(void* const&, unsigned int)",93957339725200,93957339725487],["v8::internal::Symbolizer::SymbolizeTickSample(v8::internal::TickSample const&)",93957339725504,93957339727199],["v8::internal::TickSample::GetStackSample(v8::internal::Isolate*, v8::RegisterState*, v8::internal::TickSample::RecordCEntryFrame, void**, unsigned long, v8::SampleInfo*, v8::StateTag*, bool)",93957339727440,93957339728320],["v8::internal::TracingCpuProfilerImpl::~TracingCpuProfilerImpl()",93957339728416,93957339728604],["v8::internal::TracingCpuProfilerImpl::OnTraceEnabled()",93957339728640,93957339728737],["v8::internal::TracingCpuProfilerImpl::StartProfiling()",93957339728816,93957339729016],["v8::internal::TracingCpuProfilerImpl::OnTraceDisabled()::$_1::__invoke(v8::Isolate*, void*)",93957339729040,93957339729137],["v8_inspector::inspectImpl(v8::FunctionCallbackInfo<v8::Value> const&, v8::Local<v8::Value>, int, v8_inspector::(anonymous namespace)::InspectRequest, v8_inspector::V8InspectorImpl*)",93957342445696,93957342446228],["void v8_inspector::V8Console::call<&v8_inspector::V8Console::Clear>(v8::FunctionCallbackInfo<v8::Value> const&)",93957342449488,93957342449663],["void v8_inspector::V8Console::call<&v8_inspector::V8Console::monitorFunctionCallback>(v8::FunctionCallbackInfo<v8::Value> const&)",93957342450288,93957342450392],["void v8_inspector::V8Console::call<&v8_inspector::V8Console::queryObjectsCallback>(v8::FunctionCallbackInfo<v8::Value> const&)",93957342450800,93957342450904],["void v8_inspector::V8Console::call<&v8_inspector::V8Console::inspectedObject1>(v8::FunctionCallbackInfo<v8::Value> const&)",93957342451136,93957342451245],["void v8_inspector::V8Console::call<&v8_inspector::V8Console::inspectedObject3>(v8::FunctionCallbackInfo<v8::Value> const&)",93957342451360,93957342451469],["v8_inspector::V8Console::CommandLineAPIScope::accessorGetterCallback(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&)",93957342451584,93957342452033],["v8_inspector::V8Console::CommandLineAPIScope::CommandLineAPIScope(v8::Local<v8::Context>, v8::Local<v8::Object>, v8::Local<v8::Object>)",93957342452288,93957342452767],["v8_inspector::(anonymous namespace)::InspectableHeapObject::get(v8::Local<v8::Context>)",93957342560336,93957342560416],["v8_inspector::V8Inspector::create(v8::Isolate*, v8_inspector::V8InspectorClient*)",93957342561840,93957342561897],["v8_inspector::V8InspectorImpl::disableStackCapturingIfNeeded()",93957342564576,93957342564600],["v8_inspector::V8InspectorImpl::getContext(int, int) const",93957342566720,93957342567417],["v8_inspector::V8InspectorImpl::contextCollected(int, int)",93957342571088,93957342571665],["std::__1::unordered_map<int, std::__1::unique_ptr<v8_inspector::V8ConsoleMessageStorage, std::__1::default_delete<v8_inspector::V8ConsoleMessageStorage> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::unique_ptr<v8_inspector::V8ConsoleMessageStorage, std::__1::default_delete<v8_inspector::V8ConsoleMessageStorage> > > > >::erase(int const&)",93957342573376,93957342573901],["v8_inspector::V8InspectorImpl::exceptionRevoked(v8::Local<v8::Context>, unsigned int, v8_inspector::StringView)",93957342574752,93957342575295],["v8_inspector::V8InspectorImpl::externalAsyncTaskFinished(v8_inspector::V8StackTraceId const&)",93957342575360,93957342575374],["v8_inspector::V8InspectorImpl::asyncTaskStarted(void*)",93957342575456,93957342575476],["v8_inspector::V8InspectorImpl::allAsyncTasksCanceled()",93957342575520,93957342575534],["v8_inspector::V8Inspector::Counters::~Counters()",93957342575792,93957342575968],["v8_inspector::V8InspectorImpl::regexContext()",93957342576352,93957342576491],["v8_inspector::V8InspectorImpl::sessionById(int, int)",93957342577024,93957342577505],["v8_inspector::V8InspectorImpl::EvaluateScope::EvaluateScope(v8_inspector::InjectedScript::Scope const&)",93957342578912,93957342578948],["v8_inspector::V8InspectorImpl::EvaluateScope::setTimeout(double)",93957342579120,93957342579480],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<int, std::__1::map<int, v8_inspector::V8InspectorSessionImpl*, std::__1::less<int>, std::__1::allocator<std::__1::pair<int const, v8_inspector::V8InspectorSessionImpl*> > > >, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<int, std::__1::map<int, v8_inspector::V8InspectorSessionImpl*, std::__1::less<int>, std::__1::allocator<std::__1::pair<int const, v8_inspector::V8InspectorSessionImpl*> > > >, std::__1::__unordered_map_hasher<int, std::__1::__hash_value_type<int, std::__1::map<int, v8_inspector::V8InspectorSessionImpl*, std::__1::less<int>, std::__1::allocator<std::__1::pair<int const, v8_inspector::V8InspectorSessionImpl*> > > >, std::__1::hash<int>, std::__1::equal_to<int>, true>, std::__1::__unordered_map_equal<int, std::__1::__hash_value_type<int, std::__1::map<int, v8_inspector::V8InspectorSessionImpl*, std::__1::less<int>, std::__1::allocator<std::__1::pair<int const, v8_inspector::V8InspectorSessionImpl*> > > >, std::__1::equal_to<int>, std::__1::hash<int>, true>, std::__1::allocator<std::__1::__hash_value_type<int, std::__1::map<int, v8_inspector::V8InspectorSessionImpl*, std::__1::less<int>, std::__1::allocator<std::__1::pair<int const, v8_inspector::V8InspectorSessionImpl*> > > > > >::__emplace_unique_key_args<int, std::__1::piecewise_construct_t const&, std::__1::tuple<int&&>, std::__1::tuple<> >(int const&, std::__1::piecewise_construct_t const&, std::__1::tuple<int&&>&&, std::__1::tuple<>&&)",93957342580416,93957342581340],["v8::internal::compiler::JSTypedLowering::ReduceJSStoreContext(v8::internal::compiler::Node*)",93957344321920,93957344322843],["v8::internal::compiler::LoadElimination::ReduceTransitionElementsKind(v8::internal::compiler::Node*)",93957344354816,93957344356649],["v8::internal::compiler::LoadElimination::AbstractMaps::Print() const",93957344375888,93957344377362],["void std::__1::__tree<std::__1::__value_type<v8::internal::compiler::Node*, v8::internal::compiler::LoadElimination::FieldInfo>, std::__1::__map_value_compare<v8::internal::compiler::Node*, std::__1::__value_type<v8::internal::compiler::Node*, v8::internal::compiler::LoadElimination::FieldInfo>, std::__1::less<v8::internal::compiler::Node*>, true>, v8::internal::ZoneAllocator<std::__1::__value_type<v8::internal::compiler::Node*, v8::internal::compiler::LoadElimination::FieldInfo> > >::__assign_multi<std::__1::__tree_const_iterator<std::__1::__value_type<v8::internal::compiler::Node*, v8::internal::compiler::LoadElimination::FieldInfo>, std::__1::__tree_node<std::__1::__value_type<v8::internal::compiler::Node*, v8::internal::compiler::LoadElimination::FieldInfo>, void*>*, long> >(std::__1::__tree_const_iterator<std::__1::__value_type<v8::internal::compiler::Node*, v8::internal::compiler::LoadElimination::FieldInfo>, std::__1::__tree_node<std::__1::__value_type<v8::internal::compiler::Node*, v8::internal::compiler::LoadElimination::FieldInfo>, void*>*, long>, std::__1::__tree_const_iterator<std::__1::__value_type<v8::internal::compiler::Node*, v8::internal::compiler::LoadElimination::FieldInfo>, std::__1::__tree_node<std::__1::__value_type<v8::internal::compiler::Node*, v8::internal::compiler::LoadElimination::FieldInfo>, void*>*, long>)",93957344389248,93957344390282],["v8::internal::compiler::LoopFinderImpl::CreateLoopInfo(v8::internal::compiler::Node*)",93957344399696,93957344400358],["v8::internal::compiler::LoopPeeler::Peel(v8::internal::compiler::LoopTree::Loop*)",93957344408352,93957344412501],["v8::internal::compiler::LoopVariableOptimizer::LoopVariableOptimizer(v8::internal::compiler::Graph*, v8::internal::compiler::CommonOperatorBuilder*, v8::internal::Zone*)",93957344423472,93957344423706],["v8::internal::compiler::LoopVariableOptimizer::DetectInductionVariables(v8::internal::compiler::Node*)",93957344428400,93957344429007],["v8::internal::compiler::MachineGraphVerifier::Run(v8::internal::compiler::Graph*, v8::internal::compiler::Schedule const*, v8::internal::compiler::Linkage*, bool, char const*, v8::internal::Zone*)",93957344431920,93957344436613],["v8::internal::compiler::(anonymous namespace)::MachineRepresentationChecker::CheckValueInputIsTagged(v8::internal::compiler::Node const*, int)",93957344437936,93957344438293],["v8::internal::compiler::(anonymous namespace)::MachineRepresentationChecker::CheckValueInputIsCompressedOrTaggedOrInt32(v8::internal::compiler::Node const*, int)",93957344439488,93957344439857],["std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_ostringstream()",93957344440320,93957344440491],["v8::internal::compiler::MachineGraph::IntPtrConstant(long)",93957344440784,93957344440978],["v8::internal::compiler::MachineGraph::Float64Constant(double)",93957344441392,93957344441515],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<std::__1::pair<long, char>, v8::internal::compiler::Node*>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<std::__1::pair<long, char>, v8::internal::compiler::Node*>, std::__1::__unordered_map_hasher<std::__1::pair<long, char>, std::__1::__hash_value_type<std::__1::pair<long, char>, v8::internal::compiler::Node*>, v8::base::hash<std::__1::pair<long, char> >, std::__1::equal_to<std::__1::pair<long, char> >, true>, std::__1::__unordered_map_equal<std::__1::pair<long, char>, std::__1::__hash_value_type<std::__1::pair<long, char>, v8::internal::compiler::Node*>, std::__1::equal_to<std::__1::pair<long, char> >, v8::base::hash<std::__1::pair<long, char> >, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<std::__1::pair<long, char>, v8::internal::compiler::Node*> > >::__emplace_unique_key_args<std::__1::pair<long, char>, std::__1::piecewise_construct_t const&, std::__1::tuple<std::__1::pair<long, char> const&>, std::__1::tuple<> >(std::__1::pair<long, char> const&, std::__1::piecewise_construct_t const&, std::__1::tuple<std::__1::pair<long, char> const&>&&, std::__1::tuple<>&&)",93957344442704,93957344443728],["v8::internal::compiler::Diamond::Diamond(v8::internal::compiler::Graph*, v8::internal::compiler::CommonOperatorBuilder*, v8::internal::compiler::Node*, v8::internal::compiler::BranchHint)",93957344444176,93957344444420],["v8::internal::compiler::MachineOperatorReducer::ReduceWord32And(v8::internal::compiler::Node*)",93957344444640,93957344445187],["v8::internal::compiler::MachineOperatorReducer::Word32Shr(v8::internal::compiler::Node*, unsigned int)",93957344445328,93957344445439],["v8::internal::compiler::MachineOperatorReducer::Int32Add(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957344445552,93957344445661],["v8::internal::compiler::MachineOperatorReducer::Int32Sub(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957344446432,93957344446541],["v8::internal::compiler::MachineOperatorReducer::Int32Mul(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957344446864,93957344446941],["v8::internal::compiler::MachineOperatorReducer::Uint32Div(v8::internal::compiler::Node*, unsigned int)",93957344447504,93957344448044],["v8::internal::compiler::MachineOperatorReducer::ReduceTruncateInt64ToInt32(v8::internal::compiler::Node*)",93957344448288,93957344448451],["v8::internal::compiler::MachineOperatorReducer::ReduceProjection(unsigned long, v8::internal::compiler::Node*)",93957344456448,93957344456729],["v8::internal::compiler::MachineOperatorReducer::ReduceWord64Shl(v8::internal::compiler::Node*)",93957344457440,93957344458528],["v8::internal::compiler::MachineOperatorReducer::ReduceWord64Shr(v8::internal::compiler::Node*)",93957344458704,93957344458956],["v8::internal::compiler::MachineOperatorReducer::ReduceWord64Sar(v8::internal::compiler::Node*)",93957344459328,93957344459580],["v8::internal::compiler::BinopMatcher<v8::internal::compiler::IntMatcher<long, (v8::internal::compiler::IrOpcode::Value)23>, v8::internal::compiler::IntMatcher<long, (v8::internal::compiler::IrOpcode::Value)23> >::BinopMatcher(v8::internal::compiler::Node*)",93957344460496,93957344460630],["v8::internal::compiler::MachineOperatorReducer::ReduceInt64Add(v8::internal::compiler::Node*)",93957344460752,93957344461366],["v8::internal::compiler::MachineOperatorReducer::ReduceInt64Mul(v8::internal::compiler::Node*)",93957344461952,93957344463071],["v8::internal::compiler::MachineOperatorReducer::ReduceUint32Div(v8::internal::compiler::Node*)",93957344463680,93957344464070],["v8::internal::compiler::MachineOperatorReducer::ReduceUint32Mod(v8::internal::compiler::Node*)",93957344464640,93957344464983],["operator new[](unsigned long, std::nothrow_t const&)",93957346781424,93957346781460],["_init",93957348461728,93957348461752],["__errno_location",139871563419584,139871563419601],["__gconv_open",139871563420320,139871563421109],["__gconv_transliterate",139871563456848,139871563458052],["__gconv_create_spec",139871563461568,139871563462296],["setlocale",139871563462848,139871563464689],["nl_langinfo",139871563470288,139871563470304],["svc_getreqset",139871564495424,139871564495553],["svcudp_create",139871564500240,139871564500255],["xencrypt",139871564500864,139871564501057],["xdr_array",139871564501280,139871564501642],["csinf",139871565530256,139871565531335],["__clog10f",139871565544720,139871565545840],["__iseqsigf",139871565546128,139871565546189],["llogbf",139871565546352,139871565546444],["fmaxmagf",139871565546640,139871565546775],["__acosf128_finite",139871565547248,139871565549990],["__asinf128_finite",139871565550448,139871565552308],["__atanhf128_finite",139871565553200,139871565553722],["v8::Shell::SetWaitUntilDone(v8::Isolate*, bool)",93957335264480,93957335264842],["v8::Shell::AddHistogramSample(void*, int)",93957335265136,93957335265148],["v8::Shell::CreateTestRunnerTemplate(v8::Isolate*)",93957335265792,93957335266123],["v8::Shell::CreatePerformanceTemplate(v8::Isolate*)",93957335267264,93957335267490],["v8::internal::HandleScope::DeleteExtensions(v8::internal::Isolate*)",93957336764752,93957336764874],["v8::internal::LocalHandleScope::CloseMainThreadScope(v8::internal::LocalHeap*, unsigned long*, unsigned long*)",93957336765856,93957336765908],["v8::internal::PersistentHandles::PersistentHandles(v8::internal::Isolate*)",93957336766736,93957336766832],["v8::internal::PersistentHandlesList::Iterate(v8::internal::RootVisitor*, v8::internal::Isolate*)",93957336767440,93957336767669],["v8::internal::PersistentHandlesScope::Detach()",93957336768064,93957336768120],["v8::internal::AllocationCounter::RemoveAllocationObserver(v8::internal::AllocationObserver*)",93957336768368,93957336768568],["v8::internal::AllocationCounter::InvokeAllocationObservers(unsigned long, unsigned long, unsigned long)",93957336768608,93957336769486],["v8::internal::PauseAllocationObserversScope::~PauseAllocationObserversScope()",93957336769632,93957336769761],["v8::internal::Evacuator::EvacuatePage(v8::internal::MemoryChunk*)",93957337257392,93957337257995],["v8::internal::MinorMarkCompactCollector::~MinorMarkCompactCollector()",93957337274784,93957337274812],["v8::internal::MinorMarkCompactCollector::DrainMarkingWorklist()",93957337286240,93957337297115],["v8::internal::FullEvacuator::Finalize()",93957337301456,93957337301938],["v8::internal::MarkCompactCollector::RootMarkingVisitor::VisitRootPointer(v8::internal::Root, char const*, v8::internal::FullObjectSlot)",93957337303200,93957337303501],["v8::internal::MarkCompactCollector::CustomRootBodyMarkingVisitor::VisitEmbeddedPointer(v8::internal::Code, v8::internal::RelocInfo*)",93957337304656,93957337305046],["void std::__1::__function::__policy_invoker<void (v8::internal::HeapObject, v8::internal::CompressedObjectSlot, v8::internal::HeapObject)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::MarkCompactCollector::FlushBytecodeFromSFI(v8::internal::SharedFunctionInfo)::$_4, void (v8::internal::HeapObject, v8::internal::CompressedObjectSlot, v8::internal::HeapObject)> >(std::__1::__function::__policy_storage const*, v8::internal::HeapObject&&, v8::internal::CompressedObjectSlot&&, v8::internal::HeapObject&&)",93957337305936,93957337306172],["v8::internal::RecordMigratedSlotVisitor::VisitEphemeron(v8::internal::HeapObject, int, v8::internal::CompressedObjectSlot, v8::internal::CompressedObjectSlot)",93957337306464,93957337306763],["v8::internal::RecordMigratedSlotVisitor::RecordMigratedSlot(v8::internal::HeapObject, v8::internal::MaybeObject, unsigned long)",93957337307040,93957337307268],["void v8::internal::CallIterateBody::apply<v8::internal::FixedArray::BodyDescriptor, v8::internal::RecordMigratedSlotVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::RecordMigratedSlotVisitor*)",93957337310288,93957337310405],["void v8::internal::CallIterateBody::apply<v8::internal::JSObject::BodyDescriptor, v8::internal::RecordMigratedSlotVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::RecordMigratedSlotVisitor*)",93957337310544,93957337310919],["void v8::internal::CallIterateBody::apply<v8::internal::FeedbackVector::BodyDescriptor, v8::internal::RecordMigratedSlotVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::RecordMigratedSlotVisitor*)",93957337311056,93957337311173],["void v8::internal::NativeContext::BodyDescriptor::IterateBody<v8::internal::RecordMigratedSlotVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::RecordMigratedSlotVisitor*)",93957337311360,93957337311487],["void v8::internal::WasmStruct::BodyDescriptor::IterateBody<v8::internal::RecordMigratedSlotVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::RecordMigratedSlotVisitor*)",93957337311648,93957337311890],["void v8::internal::BodyDescriptorBase::IterateJSObjectBodyImpl<v8::internal::RecordMigratedSlotVisitor>(v8::internal::Map, v8::internal::HeapObject, int, int, v8::internal::RecordMigratedSlotVisitor*)",93957337312016,93957337312374],["void v8::internal::JSWeakCollection::BodyDescriptorImpl::IterateBody<v8::internal::RecordMigratedSlotVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::RecordMigratedSlotVisitor*)",93957337313040,93957337313382],["v8::internal::CodeMap::RemoveCode(v8::internal::CodeEntry*)",93957339690960,93957339691544],["void std::__1::vector<std::__1::unique_ptr<v8::internal::CpuProfile, std::__1::default_delete<v8::internal::CpuProfile> >, std::__1::allocator<std::__1::unique_ptr<v8::internal::CpuProfile, std::__1::default_delete<v8::internal::CpuProfile> > > >::__emplace_back_slow_path<v8::internal::CpuProfile*>(v8::internal::CpuProfile*&&)",93957339699936,93957339700263],["v8::internal::ProfilerListener::CallbackEvent(v8::internal::Handle<v8::internal::Name>, unsigned long)",93957339706976,93957339707138],["v8::internal::ProfilerListener::WeakCodeClearEvent()",93957339708960,93957339708981],["v8::internal::CodeEntry::RareData::~RareData()",93957339711328,93957339711642],["v8::internal::SamplingHeapProfiler::~SamplingHeapProfiler()",93957339712896,93957339713068],["v8::internal::SamplingHeapProfiler::AllocationNode::AddChildNode(unsigned long, std::__1::unique_ptr<v8::internal::SamplingHeapProfiler::AllocationNode, std::__1::default_delete<v8::internal::SamplingHeapProfiler::AllocationNode> >)",93957339716304,93957339716559],["v8::internal::SamplingHeapProfiler::Observer::Step(int, unsigned long, unsigned long)",93957339720160,93957339720186],["v8::internal::AllocationProfile::GetRootNode()",93957339720448,93957339720511],["v8::internal::AllocationProfile::~AllocationProfile()",93957339720528,93957339720687],["std::__1::__deque_base<v8::AllocationProfile::Node, std::__1::allocator<v8::AllocationProfile::Node> >::clear()",93957339720848,93957339721168],["std::__1::__tree<std::__1::__value_type<unsigned long, std::__1::unique_ptr<v8::internal::SamplingHeapProfiler::AllocationNode, std::__1::default_delete<v8::internal::SamplingHeapProfiler::AllocationNode> > >, std::__1::__map_value_compare<unsigned long, std::__1::__value_type<unsigned long, std::__1::unique_ptr<v8::internal::SamplingHeapProfiler::AllocationNode, std::__1::default_delete<v8::internal::SamplingHeapProfiler::AllocationNode> > >, std::__1::less<unsigned long>, true>, std::__1::allocator<std::__1::__value_type<unsigned long, std::__1::unique_ptr<v8::internal::SamplingHeapProfiler::AllocationNode, std::__1::default_delete<v8::internal::SamplingHeapProfiler::AllocationNode> > > > >::erase(std::__1::__tree_const_iterator<std::__1::__value_type<unsigned long, std::__1::unique_ptr<v8::internal::SamplingHeapProfiler::AllocationNode, std::__1::default_delete<v8::internal::SamplingHeapProfiler::AllocationNode> > >, std::__1::__tree_node<std::__1::__value_type<unsigned long, std::__1::unique_ptr<v8::internal::SamplingHeapProfiler::AllocationNode, std::__1::default_delete<v8::internal::SamplingHeapProfiler::AllocationNode> > >, void*>*, long>)",93957339722064,93957339722241],["_ZNSt3__16vectorIN2v817AllocationProfile6SampleENS_9allocatorIS3_EEE6assignIPS3_EENS_9enable_ifIXaasr27__is_cpp17_forward_iteratorIT_EE5valuesr16is_constructibleIS3_NS_15iterator_traitsISA_E9referenceEEE5valueEvE4typeESA_SA_",93957339722688,93957339723044],["v8::internal::StringsStorage::~StringsStorage()",93957339723248,93957339723403],["v8::internal::StringsStorage::GetFormatted(char const*, ...)",93957339723696,93957339723828],["v8::internal::StringsStorage::GetName(v8::internal::Name)",93957339724144,93957339724415],["v8_inspector::V8Console::TimeStamp(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&)",93957342443072,93957342443251],["void v8_inspector::V8Console::call<&v8_inspector::V8Console::memoryGetterCallback>(v8::FunctionCallbackInfo<v8::Value> const&)",93957342446896,93957342446988],["void v8_inspector::V8Console::call<&v8_inspector::V8Console::Profile>(v8::FunctionCallbackInfo<v8::Value> const&)",93957342449104,93957342449282],["void v8_inspector::V8Console::call<&v8_inspector::V8Console::keysCallback>(v8::FunctionCallbackInfo<v8::Value> const&)",93957342449840,93957342449940],["void v8_inspector::V8Console::call<&v8_inspector::V8Console::undebugFunctionCallback>(v8::FunctionCallbackInfo<v8::Value> const&)",93957342450176,93957342450280],["void v8_inspector::V8Console::call<&v8_inspector::V8Console::unmonitorFunctionCallback>(v8::FunctionCallbackInfo<v8::Value> const&)",93957342450400,93957342450504],["void v8_inspector::V8Console::call<&v8_inspector::V8Console::copyCallback>(v8::FunctionCallbackInfo<v8::Value> const&)",93957342450656,93957342450798],["void v8_inspector::V8Console::call<&v8_inspector::V8Console::lastEvaluationResultCallback>(v8::FunctionCallbackInfo<v8::Value> const&)",93957342450912,93957342451016],["void std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::HeapProfiler::Backend::CollectGarbageCallback, std::__1::default_delete<v8_inspector::protocol::HeapProfiler::Backend::CollectGarbageCallback> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::HeapProfiler::Backend::CollectGarbageCallback, std::__1::default_delete<v8_inspector::protocol::HeapProfiler::Backend::CollectGarbageCallback> > > >::__push_back_slow_path<std::__1::unique_ptr<v8_inspector::protocol::HeapProfiler::Backend::CollectGarbageCallback, std::__1::default_delete<v8_inspector::protocol::HeapProfiler::Backend::CollectGarbageCallback> > >(std::__1::unique_ptr<v8_inspector::protocol::HeapProfiler::Backend::CollectGarbageCallback, std::__1::default_delete<v8_inspector::protocol::HeapProfiler::Backend::CollectGarbageCallback> >&&)",93957342560768,93957342561511],["v8_inspector::V8InspectorImpl::~V8InspectorImpl()",93957342562448,93957342563157],["v8_inspector::V8InspectorImpl::compileScript(v8::Local<v8::Context>, v8_inspector::String16 const&, v8_inspector::String16 const&)",93957342564368,93957342564517],["v8_inspector::V8InspectorImpl::unmuteExceptions(int)",93957342564672,93957342564725],["v8_inspector::V8InspectorImpl::connect(int, v8_inspector::V8Inspector::Channel*, v8_inspector::StringView)",93957342565664,93957342565969],["v8_inspector::V8InspectorImpl::contextById(int)",93957342567856,93957342568312],["v8_inspector::V8InspectorImpl::contextDestroyed(v8::Local<v8::Context>)",93957342570640,93957342571081],["std::__1::unordered_map<int, int, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, int> > >::erase(int const&)",93957342571680,93957342572143],["v8_inspector::V8InspectorImpl::resetContextGroup(int)",93957342572720,93957342573370],["v8_inspector::V8InspectorImpl::idleStarted()",93957342573904,93957342573923],["v8_inspector::V8InspectorImpl::exceptionThrown(v8::Local<v8::Context>, v8_inspector::StringView, v8::Local<v8::Value>, v8_inspector::StringView, v8_inspector::StringView, unsigned int, unsigned int, std::__1::unique_ptr<v8_inspector::V8StackTrace, std::__1::default_delete<v8_inspector::V8StackTrace> >, int)",93957342573952,93957342574745],["v8_inspector::V8InspectorImpl::captureStackTrace(bool)",93957342575296,93957342575310],["v8_inspector::V8InspectorImpl::externalAsyncTaskStarted(v8_inspector::V8StackTraceId const&)",93957342575344,93957342575358],["v8_inspector::V8InspectorImpl::asyncTaskScheduled(v8_inspector::StringView, void*, bool)",93957342575376,93957342575409],["v8::internal::compiler::JSTypedLowering::ReduceJSComparison(v8::internal::compiler::Node*)",93957344300432,93957344301989],["v8::internal::compiler::JSTypedLowering::ReduceJSGeneratorRestoreRegister(v8::internal::compiler::Node*)",93957344339024,93957344339730],["v8::internal::compiler::Linkage::GetParameterSecondaryLocation(int) const",93957344347936,93957344348061],["v8::internal::compiler::LoadElimination::ReduceOtherNode(v8::internal::compiler::Node*)",93957344364848,93957344365188],["v8::internal::compiler::LoadElimination::AbstractMaps::Kill(v8::internal::compiler::LoadElimination::AliasStateInfo const&, v8::internal::Zone*) const",93957344373200,93957344374186],["v8::internal::compiler::LoadElimination::AbstractState::Merge(v8::internal::compiler::LoadElimination::AbstractState const*, v8::internal::Zone*)",93957344378992,93957344379230],["v8::internal::compiler::LoadElimination::ComputeLoopStateForStoreField(v8::internal::compiler::Node*, v8::internal::compiler::LoadElimination::AbstractState const*, v8::internal::compiler::FieldAccess const&) const",93957344387312,93957344388173],["v8::internal::compiler::LoopFinder::FindUnnestedLoopFromHeader(v8::internal::compiler::Node*, v8::internal::Zone*, unsigned long)",93957344392224,93957344393544],["v8::internal::compiler::LoopFinderImpl::FinishLoopTree()",93957344398272,93957344399400],["void std::__1::vector<v8::internal::compiler::LoopTree::Loop, v8::internal::ZoneAllocator<v8::internal::compiler::LoopTree::Loop> >::__push_back_slow_path<v8::internal::compiler::LoopTree::Loop>(v8::internal::compiler::LoopTree::Loop&&)",93957344400976,93957344401457],["v8::internal::compiler::LoopFinderImpl::PrintLoop(v8::internal::compiler::LoopTree::Loop*)",93957344406992,93957344407379],["v8::internal::compiler::LoopPeeler::PeelInnerLoops(v8::internal::compiler::LoopTree::Loop*)",93957344414752,93957344414972],["v8::internal::compiler::UnrollLoop(v8::internal::compiler::Node*, v8::internal::ZoneUnorderedSet<v8::internal::compiler::Node*, v8::base::hash<v8::internal::compiler::Node*>, std::__1::equal_to<v8::internal::compiler::Node*> >*, unsigned int, v8::internal::compiler::Graph*, v8::internal::compiler::CommonOperatorBuilder*, v8::internal::Zone*, v8::internal::compiler::SourcePositionTable*, v8::internal::compiler::NodeOriginTable*)",93957344416976,93957344421223],["v8::internal::compiler::LoopVariableOptimizer::VisitNode(v8::internal::compiler::Node*)",93957344425040,93957344425328],["v8::internal::compiler::LoopVariableOptimizer::VisitMerge(v8::internal::compiler::Node*)",93957344427536,93957344427964],["v8::internal::compiler::LoopVariableOptimizer::AddCmpToLimits(v8::internal::compiler::FunctionalList<v8::internal::compiler::LoopVariableOptimizer::Constraint>*, v8::internal::compiler::Node*, v8::internal::compiler::InductionVariable::ConstraintKind, bool)",93957344429360,93957344429769],["v8::internal::compiler::LoopVariableOptimizer::ChangeToPhisAndInsertGuards()",93957344430864,93957344431919],["v8::internal::compiler::(anonymous namespace)::MachineRepresentationChecker::CheckValueInputForInt64Op(v8::internal::compiler::Node const*, int)",93957344436624,93957344437125],["v8::internal::compiler::(anonymous namespace)::MachineRepresentationChecker::CheckValueInputIsCompressedOrTagged(v8::internal::compiler::Node const*, int)",93957344437568,93957344437925],["v8::internal::compiler::(anonymous namespace)::MachineRepresentationChecker::CheckValueInputForFloat64Op(v8::internal::compiler::Node const*, int)",93957344438304,93957344438658],["v8::internal::compiler::(anonymous namespace)::MachineRepresentationChecker::CheckValueInputForInt32Op(v8::internal::compiler::Node const*, int)",93957344439040,93957344439479],["v8::internal::compiler::(anonymous namespace)::MachineRepresentationChecker::CheckValueInputForFloat32Op(v8::internal::compiler::Node const*, int)",93957344439872,93957344440226],["std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::str() const",93957344440288,93957344440316],["std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::str() const",93957344440496,93957344440524],["v8::internal::compiler::MachineGraph::Int64Constant(long)",93957344440656,93957344440775],["v8::internal::compiler::MachineGraph::TaggedIndexConstant(long)",93957344440992,93957344441114],["v8::internal::compiler::MachineGraph::Float32Constant(float)",93957344441264,93957344441387],["v8::internal::compiler::MachineGraph::PointerConstant(long)",93957344441520,93957344441642],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<int, v8::internal::compiler::SerializerForBackgroundCompilation::Environment*>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<int, v8::internal::compiler::SerializerForBackgroundCompilation::Environment*>, std::__1::__unordered_map_hasher<int, std::__1::__hash_value_type<int, v8::internal::compiler::SerializerForBackgroundCompilation::Environment*>, v8::base::hash<int>, std::__1::equal_to<int>, true>, std::__1::__unordered_map_equal<int, std::__1::__hash_value_type<int, v8::internal::compiler::SerializerForBackgroundCompilation::Environment*>, std::__1::equal_to<int>, v8::base::hash<int>, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<int, v8::internal::compiler::SerializerForBackgroundCompilation::Environment*> > >::__emplace_unique_key_args<int, std::__1::piecewise_construct_t const&, std::__1::tuple<int const&>, std::__1::tuple<> >(int const&, std::__1::piecewise_construct_t const&, std::__1::tuple<int const&>&&, std::__1::tuple<>&&)",93957344441744,93957344442698],["v8::internal::compiler::MachineOperatorReducer::MachineOperatorReducer(v8::internal::compiler::AdvancedReducer::Editor*, v8::internal::compiler::MachineGraph*, bool)",93957344443728,93957344443755],["v8::internal::compiler::MachineOperatorReducer::Float64PowHalf(v8::internal::compiler::Node*)",93957344443808,93957344444166],["v8::internal::compiler::Diamond::Phi(v8::internal::MachineRepresentation, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957344444432,93957344444525],["operator new(unsigned long)",93957346781248,93957346781357],["operator new[](unsigned long, std::align_val_t)",93957346781728,93957346781738],["__libc_csu_fini",93957348461696,93957348461697],["__libc_init_first",139871563418496,139871563418497],["gnu_get_libc_version",139871563419184,139871563419192],["iconv_open",139871563419616,139871563419773],["iconv_close",139871563420256,139871563420308],["__gconv_get_modules_db",139871563421824,139871563421832],["svcerr_weakauth",139871564494352,139871564494440],["svc_getreq_poll",139871564495664,139871564495809],["svcudp_bufcreate",139871564499232,139871564500231],["svcudp_enablecache",139871564500256,139871564500520],["cimagf",139871565527968,139871565527981],["catanf",139871565537616,139871565538898],["csqrtf",139871565542960,139871565544500],["nextdownf",139871565545936,139871565545972],["nanf",139871565546112,139871565546121],["canonicalizef",139871565546192,139871565546234],["ilogbf",139871565546288,139871565546347],["log1pf",139871565546448,139871565546505],["v8::Shell::WaitForRunningWorkers()",93957335261472,93957335261942],["v8::Shell::Version(v8::FunctionCallbackInfo<v8::Value> const&)",93957335264880,93957335264945],["v8::Shell::CreateHistogram(char const*, int, int, unsigned long)",93957335265120,93957335265135],["v8::Shell::GetCounter(char const*, bool)",93957335265152,93957335265742],["v8::internal::EternalHandles::~EternalHandles()",93957336763248,93957336763363],["v8::internal::CanonicalHandleScope::CanonicalHandleScope(v8::internal::Isolate*, v8::internal::OptimizedCompilationInfo*)",93957336764928,93957336765170],["v8::internal::LocalHandleScope::GetMainThreadHandle(v8::internal::LocalHeap*, unsigned long)",93957336765712,93957336765799],["v8::internal::LocalHandles::~LocalHandles()",93957336765952,93957336766086],["v8::internal::LocalHandles::AddBlock()",93957336766368,93957336766729],["v8::internal::PersistentHandles::~PersistentHandles()",93957336766832,93957336767004],["v8::internal::PersistentHandles::GetHandle(unsigned long)",93957336767376,93957336767431],["v8::internal::PersistentHandlesScope::PersistentHandlesScope(v8::internal::Isolate*)",93957336767680,93957336768022],["v8::internal::MarkCompactCollector::ClearWeakReferences()",93957337243376,93957337244204],["void v8::internal::MarkCompactCollectorBase::CreateAndExecuteEvacuationTasks<v8::internal::FullEvacuator, v8::internal::MarkCompactCollector>(v8::internal::MarkCompactCollector*, std::__1::vector<std::__1::pair<v8::internal::ParallelWorkItem, v8::internal::MemoryChunk*>, std::__1::allocator<std::__1::pair<v8::internal::ParallelWorkItem, v8::internal::MemoryChunk*> > >, v8::internal::MigrationObserver*, long)",93957337264784,93957337265818],["v8::internal::MinorMarkCompactCollector::MinorMarkCompactCollector(v8::internal::Heap*)",93957337273696,93957337273819],["v8::internal::MinorMarkCompactCollector::ClearNonLiveReferences()",93957337279568,93957337280749],["v8::internal::MinorMarkCompactCollector::CreateRememberedSetUpdatingItem(v8::internal::MemoryChunk*, v8::internal::RememberedSetUpdatingMode)",93957337284768,93957337284845],["v8::internal::MinorMarkCompactCollector::TraceFragmentation()",93957337297232,93957337298285],["v8::internal::FullEvacuator::~FullEvacuator()",93957337301200,93957337301418],["v8::internal::FullEvacuator::GetTracingScope()",93957337301968,93957337301979],["v8::internal::MarkCompactCollector::RootMarkingVisitor::VisitRootPointers(v8::internal::Root, char const*, v8::internal::FullObjectSlot, v8::internal::FullObjectSlot)",93957337302800,93957337303190],["v8::internal::MarkCompactCollector::CustomRootBodyMarkingVisitor::VisitPointers(v8::internal::HeapObject, v8::internal::CompressedObjectSlot, v8::internal::CompressedObjectSlot)",93957337303504,93957337303932],["v8::internal::MarkCompactCollector::CustomRootBodyMarkingVisitor::VisitCodeTarget(v8::internal::Code, v8::internal::RelocInfo*)",93957337304256,93957337304644],["v8::internal::InternalizedStringTableCleaner::VisitRootPointers(v8::internal::Root, char const*, v8::internal::OffHeapCompressedObjectSlot, v8::internal::OffHeapCompressedObjectSlot)",93957337305056,93957337305161],["v8::internal::MarkCompactWeakObjectRetainer::RetainAs(v8::internal::Object)",93957337305440,93957337305932],["v8::internal::EvacuateRecordOnlyVisitor::Visit(v8::internal::HeapObject, int)",93957337306176,93957337306296],["v8::internal::RecordMigratedSlotVisitor::VisitPointer(v8::internal::HeapObject, v8::internal::CompressedObjectSlot)",93957337306416,93957337306454],["v8::internal::RecordMigratedSlotVisitor::VisitCodeTarget(v8::internal::Code, v8::internal::RelocInfo*)",93957337306768,93957337306874],["v8::internal::ProfileNode::FindOrAddChild(v8::internal::CodeEntry*, int)",93957339684336,93957339684737],["v8::internal::CpuProfilesCollection::RemoveProfile(v8::internal::CpuProfile*)",93957339693392,93957339693447],["void std::__1::vector<v8::internal::Position, std::__1::allocator<v8::internal::Position> >::__emplace_back_slow_path<v8::internal::ProfileNode*>(v8::internal::ProfileNode*&&)",93957339699280,93957339699554],["v8::internal::ProfilerListener::CodeCreateEvent(v8::internal::CodeEventListener::LogEventsAndTags, v8::internal::Handle<v8::internal::AbstractCode>, char const*)",93957339700864,93957339701208],["std::__1::unordered_set<std::__1::unique_ptr<v8::internal::CodeEntry, std::__1::default_delete<v8::internal::CodeEntry> >, v8::internal::CodeEntry::Hasher, v8::internal::CodeEntry::Equals, std::__1::allocator<std::__1::unique_ptr<v8::internal::CodeEntry, std::__1::default_delete<v8::internal::CodeEntry> > > >::~unordered_set()",93957339706448,93957339706646],["v8::internal::ProfilerListener::SetterCallbackEvent(v8::internal::Handle<v8::internal::Name>, unsigned long)",93957339707328,93957339707497],["v8::internal::ProfilerListener::CodeDeoptEvent(v8::internal::Handle<v8::internal::Code>, v8::internal::DeoptimizeKind, unsigned long, int, bool)",93957339708272,93957339708470],["non-virtual thunk to v8::internal::ProfilerListener::OnHeapObjectDeletion(v8::internal::CodeEntry*)",93957339709072,93957339709143],["std::__1::__hash_table<std::__1::unique_ptr<v8::internal::CodeEntry, std::__1::default_delete<v8::internal::CodeEntry> >, v8::internal::CodeEntry::Hasher, v8::internal::CodeEntry::Equals, std::__1::allocator<std::__1::unique_ptr<v8::internal::CodeEntry, std::__1::default_delete<v8::internal::CodeEntry> > > >::__rehash(unsigned long)",93957339710448,93957339711322],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<int, std::__1::vector<v8::internal::CodeEntryAndLineNumber, std::__1::allocator<v8::internal::CodeEntryAndLineNumber> > >, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<int, std::__1::vector<v8::internal::CodeEntryAndLineNumber, std::__1::allocator<v8::internal::CodeEntryAndLineNumber> > >, std::__1::__unordered_map_hasher<int, std::__1::__hash_value_type<int, std::__1::vector<v8::internal::CodeEntryAndLineNumber, std::__1::allocator<v8::internal::CodeEntryAndLineNumber> > >, std::__1::hash<int>, std::__1::equal_to<int>, true>, std::__1::__unordered_map_equal<int, std::__1::__hash_value_type<int, std::__1::vector<v8::internal::CodeEntryAndLineNumber, std::__1::allocator<v8::internal::CodeEntryAndLineNumber> > >, std::__1::equal_to<int>, std::__1::hash<int>, true>, std::__1::allocator<std::__1::__hash_value_type<int, std::__1::vector<v8::internal::CodeEntryAndLineNumber, std::__1::allocator<v8::internal::CodeEntryAndLineNumber> > > > >::__emplace_unique_key_args<int, int&, std::__1::vector<v8::internal::CodeEntryAndLineNumber, std::__1::allocator<v8::internal::CodeEntryAndLineNumber> > >(int const&, int&, std::__1::vector<v8::internal::CodeEntryAndLineNumber, std::__1::allocator<v8::internal::CodeEntryAndLineNumber> >&&)",93957339711648,93957339712591],["v8::internal::SamplingHeapProfiler::SamplingHeapProfiler(v8::internal::Heap*, v8::internal::StringsStorage*, unsigned long, int, v8::HeapProfiler::SamplingFlags)",93957339712608,93957339712886],["v8::internal::SamplingHeapProfiler::SampleObject(unsigned long, unsigned long)",93957339713072,93957339713619],["v8::internal::SamplingHeapProfiler::OnWeakCallback(v8::WeakCallbackInfo<v8::internal::SamplingHeapProfiler::Sample> const&)",93957339715296,93957339716289],["v8::internal::SamplingHeapProfiler::TranslateAllocationNode(v8::internal::AllocationProfile*, v8::internal::SamplingHeapProfiler::AllocationNode*, std::__1::map<int, v8::internal::Handle<v8::internal::Script>, std::__1::less<int>, std::__1::allocator<std::__1::pair<int const, v8::internal::Handle<v8::internal::Script> > > > const&)",93957339716560,93957339719190],["v8::internal::SamplingHeapProfiler::BuildSamples() const",93957339719760,93957339720146],["v8::internal::SamplingHeapProfiler::Observer::GetNextStepSize()",93957339720192,93957339720321],["v8_inspector::V8Console::Assert(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&)",93957342438976,93957342439327],["v8_inspector::V8Console::undebugFunctionCallback(v8::FunctionCallbackInfo<v8::Value> const&, int)",93957342444256,93957342444514],["v8_inspector::V8Console::inspectedObject(v8::FunctionCallbackInfo<v8::Value> const&, int, unsigned int)",93957342446496,93957342446698],["v8_inspector::V8Console::createCommandLineAPI(v8::Local<v8::Context>, int)",93957342447024,93957342448463],["void v8_inspector::V8Console::call<&v8_inspector::V8Console::DirXml>(v8::FunctionCallbackInfo<v8::Value> const&)",93957342448928,93957342449103],["void v8_inspector::V8Console::call<&v8_inspector::V8Console::ProfileEnd>(v8::FunctionCallbackInfo<v8::Value> const&)",93957342449296,93957342449474],["void v8_inspector::V8Console::call<&v8_inspector::V8Console::Table>(v8::FunctionCallbackInfo<v8::Value> const&)",93957342449664,93957342449839],["void v8_inspector::V8Console::call<&v8_inspector::V8Console::valuesCallback>(v8::FunctionCallbackInfo<v8::Value> const&)",93957342449952,93957342450052],["std::__1::__shared_ptr_emplace<v8_inspector::V8HeapProfilerAgentImpl::AsyncGC, std::__1::allocator<v8_inspector::V8HeapProfilerAgentImpl::AsyncGC> >::~__shared_ptr_emplace()",93957342560592,93957342560630],["v8_inspector::V8HeapProfilerAgentImpl::GCTask::~GCTask()",93957342561552,93957342561599],["v8_inspector::V8InspectorImpl::generateUniqueId()",93957342562288,93957342562346],["v8_inspector::V8InspectorImpl::contextGroupId(v8::Local<v8::Context>) const",93957342563200,93957342563615],["v8_inspector::V8InspectorImpl::compileAndRunInternalScript(v8::Local<v8::Context>, v8::Local<v8::String>)",93957342564160,93957342564362],["v8_inspector::V8InspectorImpl::enableStackCapturingIfNeeded()",93957342564528,93957342564574],["v8_inspector::V8InspectorImpl::muteExceptions(int)",93957342564608,93957342564661],["v8_inspector::V8InspectorImpl::ensureConsoleMessageStorage(int)",93957342564736,93957342565238],["v8_inspector::V8InspectorImpl::createStackTrace(v8::Local<v8::StackTrace>)",93957342565648,93957342565662],["v8_inspector::V8InspectorImpl::disconnect(v8_inspector::V8InspectorSessionImpl*)",93957342565984,93957342566718],["v8_inspector::V8InspectorImpl::getContext(int) const",93957342567424,93957342567851],["v8_inspector::V8InspectorImpl::contextCreated(v8_inspector::V8ContextInfo const&)",93957342568320,93957342569407],["v8::internal::compiler::JSTypeHintLowering::ReduceForInNextOperation(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::FeedbackSlot) const",93957344286912,93957344287000],["v8::internal::compiler::JSBinopReduction::GetCompareNumberOperationHint(v8::internal::compiler::NumberOperationHint*)",93957344310320,93957344310392],["v8::internal::compiler::(anonymous namespace)::ReduceBuiltin(v8::internal::compiler::JSGraph*, v8::internal::compiler::Node*, int, int, v8::base::Flags<v8::internal::compiler::CallDescriptor::Flag, int>)",93957344330192,93957344330927],["v8::internal::compiler::JSBinopReduction::BothInputsMaybe(v8::internal::compiler::Type)",93957344343536,93957344343679],["v8::internal::compiler::Linkage::GetCEntryStubCallDescriptor(v8::internal::Zone*, int, int, char const*, v8::base::Flags<v8::internal::compiler::Operator::Property, unsigned char>, v8::base::Flags<v8::internal::compiler::CallDescriptor::Flag, int>, v8::internal::StackArgumentOrder)",93957344345936,93957344346824],["v8::internal::compiler::LoadElimination::ReduceCheckMaps(v8::internal::compiler::Node*)",93957344350864,93957344351847],["v8::internal::compiler::LoadElimination::ReduceStoreElement(v8::internal::compiler::Node*)",93957344361520,93957344362245],["v8::internal::compiler::(anonymous namespace)::MayAlias(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957344368096,93957344368440],["v8::internal::compiler::LoadElimination::AliasStateInfo::MayAlias(v8::internal::compiler::Node*) const",93957344372576,93957344372921],["v8::internal::operator==(v8::internal::ZoneHandleSet<v8::internal::Map> const&, v8::internal::ZoneHandleSet<v8::internal::Map> const&)",93957344375088,93957344375397],["v8::internal::compiler::LoadElimination::AbstractState::Equals(v8::internal::compiler::LoadElimination::AbstractState const*) const",93957344377712,93957344378229],["v8::internal::compiler::LoadElimination::AbstractState::AddField(v8::internal::compiler::Node*, v8::internal::compiler::LoadElimination::IndexRange, v8::internal::compiler::LoadElimination::FieldInfo, v8::internal::Zone*) const",93957344379696,93957344380376],["v8::internal::compiler::LoadElimination::UpdateStateForPhi(v8::internal::compiler::LoadElimination::AbstractState const*, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957344381824,93957344382943],["v8::internal::compiler::LoadElimination::reducer_name() const",93957344388208,93957344388221],["v8::internal::compiler::LoopFinderImpl::LoopFinderImpl(v8::internal::compiler::Graph*, v8::internal::compiler::LoopTree*, v8::internal::TickCounter*, v8::internal::Zone*)",93957344391136,93957344391803],["v8::internal::compiler::NodeCopier::map(v8::internal::compiler::Node*, unsigned int)",93957344394176,93957344394238],["v8::internal::compiler::LoopFinderImpl::PropagateForward()",93957344397136,93957344398264],["v8::internal::compiler::LoopFinderImpl::ResizeBackwardMarks()",93957344399408,93957344399682],["v8::internal::compiler::LoopFinderImpl::SetLoopMarkForLoopHeader(v8::internal::compiler::Node*, int)",93957344400368,93957344400964],["v8::internal::compiler::LoopFinderImpl::FinishSingleLoop()",93957344401472,93957344402974],["v8::internal::compiler::LoopFinderImpl::SerializeLoop(v8::internal::compiler::LoopTree::Loop*)",93957344404576,93957344406990],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<v8::internal::compiler::Node*, void*>*>, bool> std::__1::__hash_table<v8::internal::compiler::Node*, v8::base::hash<v8::internal::compiler::Node*>, std::__1::equal_to<v8::internal::compiler::Node*>, v8::internal::ZoneAllocator<v8::internal::compiler::Node*> >::__emplace_unique_key_args<v8::internal::compiler::Node*, v8::internal::compiler::Node* const&>(v8::internal::compiler::Node* const&, v8::internal::compiler::Node* const&)",93957344407392,93957344408338],["void v8::internal::compiler::NodeCopier::CopyNodes<v8::internal::compiler::Node**>(v8::internal::compiler::Graph*, v8::internal::Zone*, v8::internal::compiler::Node*, v8::base::iterator_range<v8::internal::compiler::Node**>, v8::internal::compiler::SourcePositionTable*, v8::internal::compiler::NodeOriginTable*)",93957344412512,93957344414741],["v8::internal::compiler::LoopPeeler::EliminateLoopExit(v8::internal::compiler::Node*)",93957344414976,93957344415438],["v8::internal::compiler::LoopPeeler::EliminateLoopExits(v8::internal::compiler::Graph*, v8::internal::Zone*)",93957344415520,93957344416967],["void v8::internal::compiler::NodeCopier::CopyNodes<std::__1::__hash_const_iterator<std::__1::__hash_node<v8::internal::compiler::Node*, void*>*> >(v8::internal::compiler::Graph*, v8::internal::Zone*, v8::internal::compiler::Node*, v8::base::iterator_range<std::__1::__hash_const_iterator<std::__1::__hash_node<v8::internal::compiler::Node*, void*>*> >, v8::internal::compiler::SourcePositionTable*, v8::internal::compiler::NodeOriginTable*)",93957344421232,93957344423461],["v8::internal::compiler::LoopVariableOptimizer::Run()",93957344423712,93957344425031],["v8::internal::compiler::LoopVariableOptimizer::VisitBackedge(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957344425328,93957344425905],["v8::internal::compiler::InductionVariable::AddLowerBound(v8::internal::compiler::Node*, v8::internal::compiler::InductionVariable::ConstraintKind)",93957344426768,93957344427522],["v8::internal::compiler::LoopVariableOptimizer::VisitIf(v8::internal::compiler::Node*, bool)",93957344427968,93957344428392],["v8::internal::compiler::LoopVariableOptimizer::TakeConditionsFromFirstControl(v8::internal::compiler::Node*)",93957344429008,93957344429359],["v8::internal::compiler::LoopVariableOptimizer::TryGetInductionVariable(v8::internal::compiler::Node*)",93957344429776,93957344430323],["std::__1::__sp_mut::lock()",93957346780384,93957346780455],["operator new(unsigned long, std::nothrow_t const&)",93957346781360,93957346781396],["operator new(unsigned long, std::align_val_t)",93957346781488,93957346781665],["operator delete(void*, unsigned long, std::align_val_t)",93957346781792,93957346781805],["__libc_csu_init",93957348461600,93957348461693],["atexit",93957348461712,93957348461726],["abort",139871563412500,139871563413027],["__libc_start_main",139871563418656,139871563419132],["svcerr_noproc",139871564493920,139871564494019],["svcerr_progvers",139871564494560,139871564494669],["svc_getreq",139871564495568,139871564495656],["svctcp_create",139871564497056,139871564497611],["setpayloadsigf",139871565525024,139871565525116],["cacoshf",139871565528400,139871565528973],["csinhf",139871565535312,139871565536322],["ctanhf",139871565539808,139871565540746],["cprojf",139871565542848,139871565542948],["cpowf",139871565544512,139871565544713],["fdimf",139871565545840,139871565545921],["fmaxf",139871565545984,139871565546042],["v8::Shell::WorkerTerminate(v8::FunctionCallbackInfo<v8::Value> const&)",93957335260832,93957335260950],["v8::Shell::Quit(v8::FunctionCallbackInfo<v8::Value> const&)",93957335264304,93957335264433],["v8::Shell::NotifyDone(v8::FunctionCallbackInfo<v8::Value> const&)",93957335264848,93957335264867],["v8::Shell::MapCounters(v8::Isolate*, char const*)",93957335264960,93957335265102],["v8::internal::GlobalHandles::InvokeOrScheduleSecondPassPhantomCallbacks(bool)",93957336760800,93957336761312],["void std::__1::vector<v8::internal::RuntimeCallStatEntries::Entry, std::__1::allocator<v8::internal::RuntimeCallStatEntries::Entry> >::__push_back_slow_path<v8::internal::RuntimeCallStatEntries::Entry>(v8::internal::RuntimeCallStatEntries::Entry&&)",93957336763712,93957336764014],["v8::internal::HandleScope::current_next_address(v8::internal::Isolate*)",93957336764896,93957336764909],["v8::internal::CanonicalHandleScope::Lookup(unsigned long)",93957336765344,93957336765553],["v8::internal::IdentityMap<unsigned int, v8::internal::ZoneAllocationPolicy>::NewPointerArray(unsigned long)",93957336765664,93957336765708],["v8::internal::LocalHandleScope::OpenMainThreadScope(v8::internal::LocalHeap*)",93957336765808,93957336765849],["v8::internal::LocalHandles::LocalHandles()",93957336765920,93957336765948],["v8::internal::LocalHandles::RemoveUnusedBlocks()",93957336766096,93957336766185],["v8::internal::MarkCompactCollector::IsUnmarkedHeapObject(v8::internal::Heap*, v8::internal::FullObjectSlot)",93957337170512,93957337170569],["v8::internal::Worklist<v8::internal::HeapObject, 64>::Pop(int, v8::internal::HeapObject*)",93957337254336,93957337254593],["void v8::internal::LiveObjectVisitor::VisitBlackObjectsNoFail<v8::internal::EvacuateNewSpacePageVisitor<(v8::internal::PageEvacuationMode)1>, v8::internal::MajorNonAtomicMarkingState>(v8::internal::MemoryChunk*, v8::internal::MajorNonAtomicMarkingState*, v8::internal::EvacuateNewSpacePageVisitor<(v8::internal::PageEvacuationMode)1>*, v8::internal::LiveObjectVisitor::IterationMode)",93957337260096,93957337261384],["v8::internal::MarkCompactCollector::UpdatePointersAfterEvacuation()",93957337268480,93957337271894],["void v8::internal::LiveObjectVisitor::RecomputeLiveBytes<v8::internal::MajorNonAtomicMarkingState>(v8::internal::MemoryChunk*, v8::internal::MajorNonAtomicMarkingState*)",93957337272912,93957337273380],["v8::internal::MinorMarkCompactCollector::~MinorMarkCompactCollector()",93957337274448,93957337274559],["v8::internal::MinorMarkCompactCollector::CollectGarbage()",93957337276800,93957337278237],["v8::internal::MinorMarkCompactCollector::MakeIterable(v8::internal::Page*, v8::internal::MarkingTreatmentMode, v8::internal::FreeSpaceTreatmentMode)",93957337283232,93957337284391],["v8::internal::MinorMarkCompactCollector::CreateToSpaceUpdatingItem(v8::internal::MemoryChunk*, unsigned long, unsigned long)",93957337284688,93957337284764],["v8::internal::MinorMarkCompactCollector::MarkRootSetInParallel(v8::internal::MinorMarkCompactCollector::RootMarkingVisitor*)",93957337284848,93957337286232],["v8::internal::(anonymous namespace)::IsUnmarkedObjectForYoungGeneration(v8::internal::Heap*, v8::internal::FullObjectSlot)",93957337297120,93957337297223],["v8::internal::MinorMarkCompactCollector::EvacuatePagesInParallel()",93957337298288,93957337300975],["v8::internal::Evacuator::~Evacuator()",93957337301008,93957337301185],["v8::internal::FullEvacuator::~FullEvacuator()",93957337301424,93957337301452],["v8::internal::FullEvacuator::GetBackgroundTracingScope()",93957337301952,93957337301963],["heap::base::Worklist<v8::internal::HeapObject, (unsigned short)64>::Local::Pop(v8::internal::HeapObject*)",93957337301984,93957337302166],["v8::internal::CodeEntry::idle_entry()",93957339680592,93957339680714],["v8::internal::CpuProfile::CpuProfile(v8::internal::CpuProfiler*, char const*, v8::CpuProfilingOptions, std::__1::unique_ptr<v8::DiscardedSamplesDelegate, std::__1::default_delete<v8::DiscardedSamplesDelegate> >)",93957339686848,93957339687462],["v8::internal::CpuProfilesCollection::StartProfiling(char const*, v8::CpuProfilingOptions, std::__1::unique_ptr<v8::DiscardedSamplesDelegate, std::__1::default_delete<v8::DiscardedSamplesDelegate> >)",93957339692496,93957339692766],["std::__1::__hash_table<std::__1::__hash_value_type<int, std::__1::vector<v8::internal::CodeEntryAndLineNumber, std::__1::allocator<v8::internal::CodeEntryAndLineNumber> > >, std::__1::__unordered_map_hasher<int, std::__1::__hash_value_type<int, std::__1::vector<v8::internal::CodeEntryAndLineNumber, std::__1::allocator<v8::internal::CodeEntryAndLineNumber> > >, std::__1::hash<int>, std::__1::equal_to<int>, true>, std::__1::__unordered_map_equal<int, std::__1::__hash_value_type<int, std::__1::vector<v8::internal::CodeEntryAndLineNumber, std::__1::allocator<v8::internal::CodeEntryAndLineNumber> > >, std::__1::equal_to<int>, std::__1::hash<int>, true>, std::__1::allocator<std::__1::__hash_value_type<int, std::__1::vector<v8::internal::CodeEntryAndLineNumber, std::__1::allocator<v8::internal::CodeEntryAndLineNumber> > > > >::__move_assign(std::__1::__hash_table<std::__1::__hash_value_type<int, std::__1::vector<v8::internal::CodeEntryAndLineNumber, std::__1::allocator<v8::internal::CodeEntryAndLineNumber> > >, std::__1::__unordered_map_hasher<int, std::__1::__hash_value_type<int, std::__1::vector<v8::internal::CodeEntryAndLineNumber, std::__1::allocator<v8::internal::CodeEntryAndLineNumber> > >, std::__1::hash<int>, std::__1::equal_to<int>, true>, std::__1::__unordered_map_equal<int, std::__1::__hash_value_type<int, std::__1::vector<v8::internal::CodeEntryAndLineNumber, std::__1::allocator<v8::internal::CodeEntryAndLineNumber> > >, std::__1::equal_to<int>, std::__1::hash<int>, true>, std::__1::allocator<std::__1::__hash_value_type<int, std::__1::vector<v8::internal::CodeEntryAndLineNumber, std::__1::allocator<v8::internal::CodeEntryAndLineNumber> > > > >&, std::__1::integral_constant<bool, true>)",93957339694304,93957339694686],["std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::CodeEntryAndLineNumber, v8::internal::ProfileNode*>, std::__1::__unordered_map_hasher<v8::internal::CodeEntryAndLineNumber, std::__1::__hash_value_type<v8::internal::CodeEntryAndLineNumber, v8::internal::ProfileNode*>, v8::internal::ProfileNode::Hasher, v8::internal::ProfileNode::Equals, true>, std::__1::__unordered_map_equal<v8::internal::CodeEntryAndLineNumber, std::__1::__hash_value_type<v8::internal::CodeEntryAndLineNumber, v8::internal::ProfileNode*>, v8::internal::ProfileNode::Equals, v8::internal::ProfileNode::Hasher, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::CodeEntryAndLineNumber, v8::internal::ProfileNode*> > >::__rehash(unsigned long)",93957339697600,93957339698359],["v8::internal::CpuProfileMaxSamplesCallbackTask::~CpuProfileMaxSamplesCallbackTask()",93957339699824,93957339699867],["void std::__1::vector<std::__1::unique_ptr<v8::internal::CpuProfile, std::__1::default_delete<v8::internal::CpuProfile> >, std::__1::allocator<std::__1::unique_ptr<v8::internal::CpuProfile, std::__1::default_delete<v8::internal::CpuProfile> > > >::__push_back_slow_path<std::__1::unique_ptr<v8::internal::CpuProfile, std::__1::default_delete<v8::internal::CpuProfile> > >(std::__1::unique_ptr<v8::internal::CpuProfile, std::__1::default_delete<v8::internal::CpuProfile> >&&)",93957339700464,93957339700807],["v8::internal::ProfilerListener::CodeCreateEvent(v8::internal::CodeEventListener::LogEventsAndTags, v8::internal::Handle<v8::internal::AbstractCode>, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::Name>)",93957339701568,93957339702055],["v8::internal::ProfilerListener::GetFunctionName(v8::internal::SharedFunctionInfo)",93957339706160,93957339706445],["v8::internal::ProfilerListener::CodeCreateEvent(v8::internal::CodeEventListener::LogEventsAndTags, v8::internal::wasm::WasmCode const*, v8::internal::Vector<char const>, char const*, int, int)",93957339706656,93957339706974],["v8::internal::ProfilerListener::GetterCallbackEvent(v8::internal::Handle<v8::internal::Name>, unsigned long)",93957339707152,93957339707321],["v8::internal::ProfilerListener::RegExpCodeCreateEvent(v8::internal::Handle<v8::internal::AbstractCode>, v8::internal::Handle<v8::internal::String>)",93957339707504,93957339707847],["v8::internal::ProfilerListener::CodeDisableOptEvent(v8::internal::Handle<v8::internal::AbstractCode>, v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957339708096,93957339708271],["v8::internal::ProfilerListener::AttachDeoptInlinedFrames(v8::internal::Handle<v8::internal::Code>, v8::internal::CodeDeoptEventRecord*)",93957339708480,93957339708952],["v8::internal::ProfilerListener::OnHeapObjectDeletion(v8::internal::CodeEntry*)",93957339708992,93957339709063],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::unique_ptr<v8::internal::CodeEntry, std::__1::default_delete<v8::internal::CodeEntry> >, void*>*>, bool> std::__1::__hash_table<std::__1::unique_ptr<v8::internal::CodeEntry, std::__1::default_delete<v8::internal::CodeEntry> >, v8::internal::CodeEntry::Hasher, v8::internal::CodeEntry::Equals, std::__1::allocator<std::__1::unique_ptr<v8::internal::CodeEntry, std::__1::default_delete<v8::internal::CodeEntry> > > >::__emplace_unique_key_args<std::__1::unique_ptr<v8::internal::CodeEntry, std::__1::default_delete<v8::internal::CodeEntry> >, std::__1::unique_ptr<v8::internal::CodeEntry, std::__1::default_delete<v8::internal::CodeEntry> > >(std::__1::unique_ptr<v8::internal::CodeEntry, std::__1::default_delete<v8::internal::CodeEntry> > const&, std::__1::unique_ptr<v8::internal::CodeEntry, std::__1::default_delete<v8::internal::CodeEntry> >&&)",93957339709152,93957339710057],["v8_inspector::V8Console::Group(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&)",93957342434176,93957342434307],["v8_inspector::V8Console::Time(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&)",93957342439888,93957342440909],["v8_inspector::V8Console::valuesCallback(v8::FunctionCallbackInfo<v8::Value> const&, int)",93957342443520,93957342443920],["v8_inspector::V8Console::unmonitorFunctionCallback(v8::FunctionCallbackInfo<v8::Value> const&, int)",93957342445248,93957342445506],["v8_inspector::V8Console::queryObjectsCallback(v8::FunctionCallbackInfo<v8::Value> const&, int)",93957342446240,93957342446496],["v8_inspector::V8Console::installMemoryGetter(v8::Local<v8::Context>, v8::Local<v8::Object>)",93957342446704,93957342446894],["void v8_inspector::V8Console::call<&v8_inspector::V8Console::memorySetterCallback>(v8::FunctionCallbackInfo<v8::Value> const&)",93957342446992,93957342447009],["v8_inspector::(anonymous namespace)::createBoundFunctionProperty(v8::Local<v8::Context>, v8::Local<v8::Object>, v8::Local<v8::Value>, char const*, void (*)(v8::FunctionCallbackInfo<v8::Value> const&), char const*, v8::SideEffectType)",93957342448464,93957342448747],["std::__1::__shared_ptr_emplace<v8_inspector::V8HeapProfilerAgentImpl::AsyncGC, std::__1::allocator<v8_inspector::V8HeapProfilerAgentImpl::AsyncGC> >::~__shared_ptr_emplace()",93957342560560,93957342560580],["std::__1::__shared_ptr_emplace<v8_inspector::V8HeapProfilerAgentImpl::AsyncGC, std::__1::allocator<v8_inspector::V8HeapProfilerAgentImpl::AsyncGC> >::__on_zero_shared()",93957342560640,93957342560757],["v8_inspector::V8HeapProfilerAgentImpl::GCTask::~GCTask()",93957342561520,93957342561551],["v8_inspector::V8HeapProfilerAgentImpl::GCTask::Run()",93957342561600,93957342561837],["v8_inspector::V8InspectorImpl::V8InspectorImpl(v8::Isolate*, v8_inspector::V8InspectorClient*)",93957342561904,93957342562274],["v8_inspector::V8InspectorImpl::console()",93957342562352,93957342562441],["v8_inspector::V8InspectorImpl::~V8InspectorImpl()",93957342563168,93957342563196],["v8_inspector::V8InspectorImpl::contextGroupId(int) const",93957342563616,93957342564001],["v8::internal::compiler::Operator1<v8::internal::compiler::ContextAccess, v8::internal::compiler::OpEqualTo<v8::internal::compiler::ContextAccess>, v8::internal::compiler::OpHash<v8::internal::compiler::ContextAccess> >::HashCode() const",93957344282160,93957344282259],["v8::internal::compiler::JSBinopReduction::ChangeToPureOperator(v8::internal::compiler::Operator const*, v8::internal::compiler::Type)",93957344290128,93957344290297],["v8::internal::compiler::JSBinopReduction::IsReceiverOrNullOrUndefinedCompareOperation()",93957344306768,93957344306944],["v8::internal::compiler::JSTypedLowering::ReduceJSToNumber(v8::internal::compiler::Node*)",93957344313424,93957344313668],["v8::internal::compiler::JSTypedLowering::ReduceJSConstructForwardVarargs(v8::internal::compiler::Node*)",93957344324640,93957344325138],["v8::internal::compiler::JSTypedLowering::ReduceJSStoreMessage(v8::internal::compiler::Node*)",93957344336560,93957344336933],["v8::internal::compiler::JSTypedLowering::ReduceJSResolvePromise(v8::internal::compiler::Node*)",93957344342224,93957344342392],["v8::internal::compiler::CallDescriptor::GetOffsetToReturns() const",93957344344128,93957344344537],["v8::internal::compiler::Linkage::NeedsFrameStateInput(v8::internal::Runtime::FunctionId)",93957344345728,93957344345824],["v8::internal::compiler::Linkage::GetOsrValueLocation(int) const",93957344347584,93957344347729],["v8::internal::compiler::LoadElimination::AbstractState::Print() const",93957344349264,93957344349860],["v8::internal::compiler::LoadElimination::ReduceEnsureWritableFastElements(v8::internal::compiler::Node*)",93957344352688,93957344353909],["v8::internal::compiler::LoadElimination::ReduceStoreField(v8::internal::compiler::Node*, v8::internal::compiler::FieldAccess const&)",93957344358288,93957344360854],["v8::internal::compiler::LoadElimination::ReduceStoreTypedElement(v8::internal::compiler::Node*)",93957344363424,93957344363716],["v8::internal::compiler::(anonymous namespace)::MustAlias(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957344366432,93957344366666],["v8::internal::compiler::LoadElimination::AbstractElements::Merge(v8::internal::compiler::LoadElimination::AbstractElements const*, v8::internal::Zone*) const",93957344369216,93957344369832],["v8::internal::compiler::LoadElimination::AbstractField::Kill(v8::internal::compiler::LoadElimination::AliasStateInfo const&, v8::internal::MaybeHandle<v8::internal::Name>, v8::internal::Zone*) const",93957344371504,93957344372562],["v8::internal::compiler::LoadElimination::AbstractMaps::AbstractMaps(v8::internal::compiler::Node*, v8::internal::ZoneHandleSet<v8::internal::Map>, v8::internal::Zone*)",93957344372928,93957344373199],["v8::internal::compiler::LoadElimination::AbstractMaps::Merge(v8::internal::compiler::LoadElimination::AbstractMaps const*, v8::internal::Zone*) const",93957344374192,93957344375077],["v8::internal::compiler::LoadElimination::AbstractMaps::Extend(v8::internal::compiler::Node*, v8::internal::ZoneHandleSet<v8::internal::Map>, v8::internal::Zone*) const",93957344375408,93957344375884],["v8::internal::compiler::LoadElimination::AbstractField::Equals(v8::internal::compiler::LoadElimination::AbstractField const*) const",93957344377376,93957344377701],["v8::internal::compiler::LoadElimination::AbstractField::Merge(v8::internal::compiler::LoadElimination::AbstractField const*, v8::internal::Zone*) const",93957344378240,93957344378977],["v8::internal::compiler::LoadElimination::AbstractState::AddElement(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::MachineRepresentation, v8::internal::Zone*) const",93957344379232,93957344379686],["v8::internal::compiler::LoadElimination::AbstractField* v8::internal::Zone::New<v8::internal::compiler::LoadElimination::AbstractField, v8::internal::compiler::Node*&, v8::internal::compiler::LoadElimination::FieldInfo&, v8::internal::Zone*&>(v8::internal::compiler::Node*&, v8::internal::compiler::LoadElimination::FieldInfo&, v8::internal::Zone*&)",93957344380384,93957344380657],["v8::internal::compiler::LoadElimination::AbstractState::LookupField(v8::internal::compiler::Node*, v8::internal::compiler::LoadElimination::IndexRange, v8::internal::compiler::ConstFieldInfo) const",93957344381200,93957344381815],["v8::internal::compiler::LoadElimination::ComputeLoopState(v8::internal::compiler::Node*, v8::internal::compiler::LoadElimination::AbstractState const*) const",93957344382944,93957344387308],["v8::internal::compiler::LoadElimination::~LoadElimination()",93957344388176,93957344388205],["void std::__1::__tree<std::__1::__value_type<v8::internal::compiler::Node*, v8::internal::ZoneHandleSet<v8::internal::Map> >, std::__1::__map_value_compare<v8::internal::compiler::Node*, std::__1::__value_type<v8::internal::compiler::Node*, v8::internal::ZoneHandleSet<v8::internal::Map> >, std::__1::less<v8::internal::compiler::Node*>, true>, v8::internal::ZoneAllocator<std::__1::__value_type<v8::internal::compiler::Node*, v8::internal::ZoneHandleSet<v8::internal::Map> > > >::__assign_multi<std::__1::__tree_const_iterator<std::__1::__value_type<v8::internal::compiler::Node*, v8::internal::ZoneHandleSet<v8::internal::Map> >, std::__1::__tree_node<std::__1::__value_type<v8::internal::compiler::Node*, v8::internal::ZoneHandleSet<v8::internal::Map> >, void*>*, long> >(std::__1::__tree_const_iterator<std::__1::__value_type<v8::internal::compiler::Node*, v8::internal::ZoneHandleSet<v8::internal::Map> >, std::__1::__tree_node<std::__1::__value_type<v8::internal::compiler::Node*, v8::internal::ZoneHandleSet<v8::internal::Map> >, void*>*, long>, std::__1::__tree_const_iterator<std::__1::__value_type<v8::internal::compiler::Node*, v8::internal::ZoneHandleSet<v8::internal::Map> >, std::__1::__tree_node<std::__1::__value_type<v8::internal::compiler::Node*, v8::internal::ZoneHandleSet<v8::internal::Map> >, void*>*, long>)",93957344388224,93957344389242],["v8::internal::compiler::LoopFinder::BuildLoopTree(v8::internal::compiler::Graph*, v8::internal::TickCounter*, v8::internal::Zone*)",93957344390288,93957344391127],["v8::internal::compiler::LoopFinderImpl::Print()",93957344391808,93957344392211],["v8::internal::compiler::LoopFinder::HasMarkedExits(v8::internal::compiler::LoopTree*, v8::internal::compiler::LoopTree::Loop const*)",93957344393552,93957344394174],["v8::internal::compiler::NodeCopier::Insert(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957344394240,93957344395555],["__cxx_global_array_dtor.140",93957346776256,93957346776314],["v8::base::RecursiveMutex::Unlock()",93957346780880,93957346780890],["operator new[](unsigned long)",93957346781408,93957346781418],["operator delete[](void*, unsigned long)",93957346781472,93957346781482],["operator new(unsigned long, std::align_val_t, std::nothrow_t const&)",93957346781680,93957346781716],["operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)",93957346781744,93957346781780],["operator delete[](void*, unsigned long, std::align_val_t)",93957346781808,93957346781821],["icu_68::TZEnumeration::snext(UErrorCode&)",93957347797616,93957347797693],["xprt_unregister",139871564493248,139871564493446],["svcerr_systemerr",139871564494144,139871564494243],["svcerr_noprog",139871564494448,139871564494547],["svc_getreq_common",139871564494672,139871564495411],["ldexpf",139871565522512,139871565522629],["fromfpxf",139871565526528,139871565527186],["cabsf",139871565528000,139871565528023],["ccoshf",139871565529024,139871565530041],["casinhf",139871565531344,139871565531741],["catanhf",139871565536336,139871565537604],["ctanf",139871565538912,139871565539802],["cexpf",139871565540752,139871565541732],["v8::(anonymous namespace)::GetWorkerFromInternalField(v8::Isolate*, v8::Local<v8::Object>)",93957335259696,93957335259930],["v8::Shell::WorkerTerminateAndWait(v8::FunctionCallbackInfo<v8::Value> const&)",93957335261216,93957335261346],["v8::Shell::OnExit(v8::Isolate*)",93957335261952,93957335264301],["v8::Shell::WaitUntilDone(v8::FunctionCallbackInfo<v8::Value> const&)",93957335264448,93957335264470],["v8::internal::GlobalHandles::InvokeSecondPassPhantomCallbacksFromTask()",93957336758528,93957336759104],["v8::internal::GlobalHandles::IterateWeakRoots(v8::internal::RootVisitor*)",93957336762032,93957336762248],["v8::internal::EternalHandles::IterateYoungRoots(v8::internal::RootVisitor*)",93957336763472,93957336763560],["std::__1::vector<int, std::__1::allocator<int> >::__append(unsigned long)",93957336764032,93957336764339],["v8::internal::HandleScope::current_level_address(v8::internal::Isolate*)",93957336764880,93957336764893],["v8::internal::HandleScope::current_limit_address(v8::internal::Isolate*)",93957336764912,93957336764925],["v8::internal::CanonicalHandleScope::~CanonicalHandleScope()",93957336765184,93957336765341],["v8::internal::IdentityMap<unsigned int, v8::internal::ZoneAllocationPolicy>::~IdentityMap()",93957336765568,93957336765606],["v8::internal::MarkCompactCollector::StartCompaction()",93957337153024,93957337153432],["v8::internal::MarkCompactCollector::ProcessEphemeronsLinear()",93957337235168,93957337241348],["v8::internal::Worklist<std::__1::pair<v8::internal::HeapObject, v8::internal::CompressedHeapObjectSlot>, 64>::Pop(int, std::__1::pair<v8::internal::HeapObject, v8::internal::CompressedHeapObjectSlot>*)",93957337252400,93957337252687],["v8::internal::MarkCompactCollector::PrepareRecordRelocSlot(v8::internal::Code, v8::internal::RelocInfo*, v8::internal::HeapObject)",93957337256512,93957337256665],["v8::internal::FullEvacuator::RawEvacuatePage(v8::internal::MemoryChunk*, long*)",93957337258256,93957337259046],["bool v8::internal::LiveObjectVisitor::VisitBlackObjects<v8::internal::EvacuateOldSpaceVisitor, v8::internal::MajorNonAtomicMarkingState>(v8::internal::MemoryChunk*, v8::internal::MajorNonAtomicMarkingState*, v8::internal::EvacuateOldSpaceVisitor*, v8::internal::LiveObjectVisitor::IterationMode, v8::internal::HeapObject*)",93957337262432,93957337263533],["v8::internal::MarkCompactCollector::RecordLiveSlotsOnPage(v8::internal::Page*)",93957337267120,93957337267177],["v8::internal::MarkCompactCollector::CreateRememberedSetUpdatingItem(v8::internal::MemoryChunk*, v8::internal::RememberedSetUpdatingMode)",93957337271984,93957337272064],["v8::internal::UpdateReferenceInExternalStringTableEntry(v8::internal::Heap*, v8::internal::FullObjectSlot)",93957337272736,93957337272911],["v8::internal::MarkCompactCollector::StartSweepSpace(v8::internal::PagedSpace*)",93957337273392,93957337273681],["v8::internal::Worklist<v8::internal::HeapObject, 64>::Worklist()",93957337273824,93957337274436],["v8::internal::Worklist<v8::internal::HeapObject, 64>::~Worklist()",93957337274560,93957337274779],["v8::internal::MinorMarkCompactCollector::UpdatePointersAfterEvacuation()",93957337274816,93957337276799],["v8::internal::MinorMarkCompactCollector::MarkLiveObjects()",93957337278240,93957337279557],["v8::internal::MinorMarkCompactCollector::Evacuate()",93957337280752,93957337283230],["v8::internal::MinorMarkCompactCollector::EvacuatePrologue()",93957337284400,93957337284596],["v8::internal::EmbedderGraphImpl::~EmbedderGraphImpl()",93957339674096,93957339674225],["v8::internal::CodeEntry::EnsureRareData()",93957339681648,93957339681797],["v8::internal::ProfileNode::Print(int) const",93957339685664,93957339686195],["v8::internal::CodeMap::CodeMap(v8::internal::StringsStorage&)",93957339690080,93957339690116],["v8::internal::CodeMap::MoveCode(unsigned long, unsigned long)",93957339691728,93957339692426],["std::__1::vector<std::__1::unique_ptr<v8::internal::CpuProfile, std::__1::default_delete<v8::internal::CpuProfile> >, std::__1::allocator<std::__1::unique_ptr<v8::internal::CpuProfile, std::__1::default_delete<v8::internal::CpuProfile> > > >::erase(std::__1::__wrap_iter<std::__1::unique_ptr<v8::internal::CpuProfile, std::__1::default_delete<v8::internal::CpuProfile> > const*>)",93957339693008,93957339693325],["v8::internal::CpuProfilesCollection::AddPathToCurrentProfiles(v8::base::TimeTicks, std::__1::vector<v8::internal::CodeEntryAndLineNumber, std::__1::allocator<v8::internal::CodeEntryAndLineNumber> > const&, int, bool, v8::base::TimeDelta)",93957339693680,93957339693816],["void std::__1::vector<v8::CpuProfileDeoptInfo, std::__1::allocator<v8::CpuProfileDeoptInfo> >::__push_back_slow_path<v8::CpuProfileDeoptInfo>(v8::CpuProfileDeoptInfo&&)",93957339695056,93957339695494],["std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::CodeEntryAndLineNumber, v8::internal::ProfileNode*>, std::__1::__unordered_map_hasher<v8::internal::CodeEntryAndLineNumber, std::__1::__hash_value_type<v8::internal::CodeEntryAndLineNumber, v8::internal::ProfileNode*>, v8::internal::ProfileNode::Hasher, v8::internal::ProfileNode::Equals, true>, std::__1::__unordered_map_equal<v8::internal::CodeEntryAndLineNumber, std::__1::__hash_value_type<v8::internal::CodeEntryAndLineNumber, v8::internal::ProfileNode*>, v8::internal::ProfileNode::Equals, v8::internal::ProfileNode::Hasher, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::CodeEntryAndLineNumber, v8::internal::ProfileNode*> > >::rehash(unsigned long)",93957339697216,93957339697587],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<int, int>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<int, int>, std::__1::__unordered_map_hasher<int, std::__1::__hash_value_type<int, int>, std::__1::hash<int>, std::__1::equal_to<int>, true>, std::__1::__unordered_map_equal<int, std::__1::__hash_value_type<int, int>, std::__1::equal_to<int>, std::__1::hash<int>, true>, std::__1::allocator<std::__1::__hash_value_type<int, int> > >::__emplace_unique_key_args<int, std::__1::piecewise_construct_t const&, std::__1::tuple<int const&>, std::__1::tuple<> >(int const&, std::__1::piecewise_construct_t const&, std::__1::tuple<int const&>&&, std::__1::tuple<>&&)",93957339698368,93957339699278],["v8::internal::ProfileNode::~ProfileNode()",93957339699568,93957339699815],["v8::internal::CpuProfileMaxSamplesCallbackTask::~CpuProfileMaxSamplesCallbackTask()",93957339699872,93957339699928],["std::__1::__split_buffer<std::__1::unique_ptr<v8::internal::CpuProfile, std::__1::default_delete<v8::internal::CpuProfile> >, std::__1::allocator<std::__1::unique_ptr<v8::internal::CpuProfile, std::__1::default_delete<v8::internal::CpuProfile> > >&>::~__split_buffer()",93957339700272,93957339700452],["v8::internal::ProfilerListener::ProfilerListener(v8::internal::Isolate*, v8::internal::CodeEventObserver*, v8::internal::StringsStorage&, v8::internal::WeakCodeRegistry&, v8::CpuProfilingNamingMode)",93957339700816,93957339700863],["v8::internal::ProfilerListener::CodeCreateEvent(v8::internal::CodeEventListener::LogEventsAndTags, v8::internal::Handle<v8::internal::AbstractCode>, v8::internal::Handle<v8::internal::Name>)",93957339701216,93957339701563],["v8::internal::ProfilerListener::InferScriptName(v8::internal::Name, v8::internal::SharedFunctionInfo)",93957339702064,93957339702228],["v8_inspector::V8Console::Info(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&)",93957342433184,93957342433271],["v8_inspector::V8Console::Count(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&)",93957342434768,93957342436030],["v8_inspector::V8Console::Profile(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&)",93957342439536,93957342439705],["v8_inspector::timeEndFunction(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&, bool, v8_inspector::V8InspectorImpl*)",93957342440944,93957342443026],["v8_inspector::V8Console::keysCallback(v8::FunctionCallbackInfo<v8::Value> const&, int)",93957342443264,93957342443505],["v8_inspector::V8Console::debugFunctionCallback(v8::FunctionCallbackInfo<v8::Value> const&, int)",93957342443920,93957342444245],["v8_inspector::V8Console::monitorFunctionCallback(v8::FunctionCallbackInfo<v8::Value> const&, int)",93957342444528,93957342445238],["v8_inspector::V8Console::lastEvaluationResultCallback(v8::FunctionCallbackInfo<v8::Value> const&, int)",93957342445520,93957342445696],["v8::internal::compiler::Operator1<v8::internal::compiler::CallParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CallParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CallParameters> >::Equals(v8::internal::compiler::Operator const*) const",93957344278960,93957344279008],["v8::internal::compiler::Operator1<v8::internal::compiler::CreateLiteralParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CreateLiteralParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CreateLiteralParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344283552,93957344283702],["v8::internal::compiler::JSTypeHintLowering::ReduceStoreNamedOperation(v8::internal::compiler::Operator const*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::FeedbackSlot) const",93957344287904,93957344287991],["v8::internal::compiler::JSTypedLowering::ReduceJSToStringInput(v8::internal::compiler::Node*)",93957344296128,93957344296650],["v8::internal::compiler::JSBinopReduction::IsInternalizedStringCompareOperation()",93957344304656,93957344304832],["v8::internal::compiler::JSBinopReduction::IsSymbolCompareOperation()",93957344307888,93957344308064],["v8::internal::compiler::JSBinopReduction::CheckLeftInputToSymbol()",93957344311648,93957344312154],["v8::internal::compiler::JSTypedLowering::ReduceJSHasInPrototypeChain(v8::internal::compiler::Node*)",93957344315920,93957344320033],["v8::internal::compiler::JSTypedLowering::ReduceJSLoadModule(v8::internal::compiler::Node*)",93957344323680,93957344324121],["v8::internal::compiler::JSTypedLowering::ReduceJSCallForwardVarargs(v8::internal::compiler::Node*)",93957344326336,93957344326740],["v8::internal::compiler::JSTypedLowering::ReduceJSForInPrepare(v8::internal::compiler::Node*)",93957344333776,93957344336351],["v8::internal::compiler::JSTypedLowering::ReduceJSGeneratorRestoreContinuation(v8::internal::compiler::Node*)",93957344338288,93957344338883],["v8::internal::compiler::JSTypedLowering::ReduceObjectIsArray(v8::internal::compiler::Node*)",93957344339872,93957344341952],["v8::internal::compiler::JSTypedLowering::reducer_name() const",93957344343344,93957344343357],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::CallDescriptor const&)",93957344343840,93957344344071],["v8::internal::compiler::CallDescriptor::GetTaggedParameterSlots() const",93957344344720,93957344344917],["v8::internal::compiler::Linkage::GetJSCallDescriptor(v8::internal::Zone*, bool, int, v8::base::Flags<v8::internal::compiler::CallDescriptor::Flag, int>)",93957344345088,93957344345714],["v8::internal::compiler::Linkage::GetRuntimeCallDescriptor(v8::internal::Zone*, v8::internal::Runtime::FunctionId, int, v8::base::Flags<v8::internal::compiler::Operator::Property, unsigned char>, v8::base::Flags<v8::internal::compiler::CallDescriptor::Flag, int>)",93957344345824,93957344345934],["v8::internal::compiler::Linkage::GetStubCallDescriptor(v8::internal::Zone*, v8::internal::CallInterfaceDescriptor const&, int, v8::base::Flags<v8::internal::compiler::CallDescriptor::Flag, int>, v8::base::Flags<v8::internal::compiler::Operator::Property, unsigned char>, v8::internal::StubCallMode)",93957344346832,93957344347577],["v8::internal::compiler::Linkage::ParameterHasSecondaryLocation(int) const",93957344347744,93957344347923],["v8::internal::compiler::LoadElimination::Reduce(v8::internal::compiler::Node*)",93957344348064,93957344349250],["v8::internal::compiler::LoadElimination::ReduceMapGuard(v8::internal::compiler::Node*)",93957344349872,93957344350853],["v8::internal::compiler::LoadElimination::ReduceCompareMaps(v8::internal::compiler::Node*)",93957344351856,93957344352684],["v8::internal::compiler::LoadElimination::ReduceMaybeGrowFastElements(v8::internal::compiler::Node*)",93957344353920,93957344354816],["v8::internal::compiler::LoadElimination::ReduceLoadField(v8::internal::compiler::Node*, v8::internal::compiler::FieldAccess const&)",93957344356656,93957344358280],["v8::internal::compiler::LoadElimination::ReduceLoadElement(v8::internal::compiler::Node*)",93957344360864,93957344361513],["v8::internal::compiler::LoadElimination::ReduceTransitionAndStoreElement(v8::internal::compiler::Node*)",93957344362256,93957344363424],["v8::internal::compiler::LoadElimination::ReduceEffectPhi(v8::internal::compiler::Node*)",93957344363728,93957344364837],["v8::internal::compiler::LoadElimination::AbstractElements::Lookup(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::MachineRepresentation) const",93957344365200,93957344366428],["v8::internal::compiler::LoadElimination::AbstractElements::Kill(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::Zone*) const",93957344366672,93957344368089],["v8::internal::compiler::LoadElimination::AbstractElements::Equals(v8::internal::compiler::LoadElimination::AbstractElements const*) const",93957344368448,93957344369211],["v8::internal::compiler::LoadElimination::AbstractElements::Print() const",93957344369840,93957344370515],["std::__1::__time_get_c_storage<char>::__x() const",93957346773616,93957346773744],["unsigned long std::__1::__num_get_unsigned_integral<unsigned long>(char const*, char const*, unsigned int&, int)",93957346777728,93957346778005],["std::__1::__get_sp_mut(void const*)",93957346780480,93957346780840],["std::__throw_bad_alloc()",93957346781184,93957346781233],["std::runtime_error::runtime_error(char const*)",93957346782096,93957346782218],["icu_68::DecimalFormat::setDecimalPatternMatchRequired(signed char)",93957347045536,93957347045597],["icu_68::UnicodeSet::_toPattern(icu_68::UnicodeString&, signed char) const",93957348289888,93957348290271],["__rpc_thread_createerr",139871564492736,139871564492799],["svc_unregister",139871564493680,139871564493801],["svcerr_decode",139871564494032,139871564494131],["svcerr_auth",139871564494256,139871564494340],["llroundf",139871565521632,139871565521775],["totalordermagf",139871565524816,139871565524840],["fromfpf",139871565525264,139871565525852],["cargf",139871565527888,139871565527911],["crealf",139871565527984,139871565527997],["cacosf",139871565528032,139871565528399],["ccosf",139871565528976,139871565529024],["casinf",139871565530048,139871565530245],["v8::FunctionAndArgumentsToString(v8::Local<v8::Function>, v8::Local<v8::Value>, v8::Local<v8::String>*, v8::Isolate*)",93957335257152,93957335257671],["v8::Shell::WorkerGetMessage(v8::FunctionCallbackInfo<v8::Value> const&)",93957335260272,93957335260523],["v8::Worker::Terminate()",93957335260960,93957335261205],["v8::Shell::QuitOnce(v8::FunctionCallbackInfo<v8::Value>*)",93957335261360,93957335261472],["v8::internal::GlobalHandles::Node::CollectPhantomCallbackData(std::__1::vector<std::__1::pair<v8::internal::GlobalHandles::Node*, v8::internal::GlobalHandles::PendingPhantomCallback>, std::__1::allocator<std::__1::pair<v8::internal::GlobalHandles::Node*, v8::internal::GlobalHandles::PendingPhantomCallback> > >*)",93957336756304,93957336756775],["void v8::internal::GlobalHandles::UpdateAndCompactListOfYoungNode<v8::internal::GlobalHandles::TracedNode>(std::__1::vector<v8::internal::GlobalHandles::TracedNode*, std::__1::allocator<v8::internal::GlobalHandles::TracedNode*> >*)",93957336759872,93957336760202],["v8::internal::GlobalHandles::IterateStrongRoots(v8::internal::RootVisitor*)",93957336761744,93957336761865],["v8::internal::GlobalHandles::IterateAllYoungRoots(v8::internal::RootVisitor*)",93957336762656,93957336762985],["v8::internal::EternalHandles::IterateAllRoots(v8::internal::RootVisitor*)",93957336763376,93957336763472],["v8::internal::EternalHandles::PostGarbageCollectionProcessing()",93957336763568,93957336763709],["void std::__1::__function::__policy_invoker<void ()>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::GlobalHandles::InvokeOrScheduleSecondPassPhantomCallbacks(bool)::$_0, void ()> >(std::__1::__function::__policy_storage const*)",93957336764016,93957336764029],["v8::internal::HandleScope::Extend(v8::internal::Isolate*)",93957336764352,93957336764747],["v8::internal::LocalHeap::FreeLinearAllocationArea()",93957337082096,93957337082110],["v8::internal::MarkCompactCollector::Evacuate()",93957337165392,93957337167780],["v8::internal::MarkCompactCollector::MarkDescriptorArrayFromWriteBarrier(v8::internal::DescriptorArray, int)",93957337232464,93957337232481],["std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_stringstream()",93957337242112,93957337242372],["v8::internal::MarkCompactCollector::ClearJSWeakRefs()",93957337245008,93957337252139],["v8::internal::MarkCompactCollector::ClearPotentialSimpleMapTransition(v8::internal::Map, v8::internal::Map)",93957337253040,93957337253188],["v8::internal::MarkCompactCollector::RightTrimDescriptorArray(v8::internal::DescriptorArray, int)",93957337256128,93957337256349],["v8::internal::MarkCompactCollector::EvacuatePrologue()",93957337256848,93957337257119],["v8::internal::Evacuator::Finalize()",93957337258000,93957337258253],["void v8::internal::LiveObjectVisitor::VisitBlackObjectsNoFail<v8::internal::EvacuateNewSpaceVisitor, v8::internal::MajorNonAtomicMarkingState>(v8::internal::MemoryChunk*, v8::internal::MajorNonAtomicMarkingState*, v8::internal::EvacuateNewSpaceVisitor*, v8::internal::LiveObjectVisitor::IterationMode)",93957337259056,93957337260087],["void v8::internal::LiveObjectVisitor::VisitBlackObjectsNoFail<v8::internal::EvacuateNewSpacePageVisitor<(v8::internal::PageEvacuationMode)0>, v8::internal::MajorNonAtomicMarkingState>(v8::internal::MemoryChunk*, v8::internal::MajorNonAtomicMarkingState*, v8::internal::EvacuateNewSpacePageVisitor<(v8::internal::PageEvacuationMode)0>*, v8::internal::LiveObjectVisitor::IterationMode)",93957337261392,93957337262423],["v8::internal::MarkCompactCollector::EvacuatePagesInParallel()",93957337263536,93957337264771],["v8::internal::MarkCompactCollector::PostProcessEvacuationCandidates()",93957337265824,93957337267105],["void v8::internal::LiveObjectVisitor::VisitBlackObjectsNoFail<v8::internal::EvacuateRecordOnlyVisitor, v8::internal::MajorNonAtomicMarkingState>(v8::internal::MemoryChunk*, v8::internal::MajorNonAtomicMarkingState*, v8::internal::EvacuateRecordOnlyVisitor*, v8::internal::LiveObjectVisitor::IterationMode)",93957337267184,93957337268472],["v8::internal::MarkCompactCollector::CreateToSpaceUpdatingItem(v8::internal::MemoryChunk*, unsigned long, unsigned long)",93957337271904,93957337271983],["v8::internal::MarkCompactCollectorBase::CollectToSpaceUpdatingItems(std::__1::vector<std::__1::unique_ptr<v8::internal::UpdatingItem, std::__1::default_delete<v8::internal::UpdatingItem> >, std::__1::allocator<std::__1::unique_ptr<v8::internal::UpdatingItem, std::__1::default_delete<v8::internal::UpdatingItem> > > >*)",93957337272064,93957337272369],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<void*, v8::internal::HeapEntry*>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<void*, v8::internal::HeapEntry*>, std::__1::__unordered_map_hasher<void*, std::__1::__hash_value_type<void*, v8::internal::HeapEntry*>, std::__1::hash<void*>, std::__1::equal_to<void*>, true>, std::__1::__unordered_map_equal<void*, std::__1::__hash_value_type<void*, v8::internal::HeapEntry*>, std::__1::equal_to<void*>, std::__1::hash<void*>, true>, std::__1::allocator<std::__1::__hash_value_type<void*, v8::internal::HeapEntry*> > >::__emplace_unique_key_args<void*, void*&, v8::internal::HeapEntry*>(void* const&, void*&, v8::internal::HeapEntry*&&)",93957339671248,93957339672132],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<unsigned long, void*>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<unsigned long, void*>, std::__1::__unordered_map_hasher<unsigned long, std::__1::__hash_value_type<unsigned long, void*>, std::__1::hash<unsigned long>, std::__1::equal_to<unsigned long>, true>, std::__1::__unordered_map_equal<unsigned long, std::__1::__hash_value_type<unsigned long, void*>, std::__1::equal_to<unsigned long>, std::__1::hash<unsigned long>, true>, std::__1::allocator<std::__1::__hash_value_type<unsigned long, void*> > >::__emplace_unique_key_args<unsigned long, unsigned long const&, void* const&>(unsigned long const&, unsigned long const&, void* const&)",93957339677296,93957339678208],["v8::internal::CodeEntry::IsSameFunctionAs(v8::internal::CodeEntry const*) const",93957339681216,93957339681287],["std::__1::unique_ptr<v8::internal::CodeEntry::RareData, std::__1::default_delete<v8::internal::CodeEntry::RareData> >::reset(v8::internal::CodeEntry::RareData*)",93957339682896,93957339683208],["v8::internal::ProfileNode::IncrementLineTicks(int)",93957339685120,93957339685577],["void v8::internal::ProfileTree::TraverseDepthFirst<v8::internal::DeleteNodesCallback>(v8::internal::DeleteNodesCallback*)",93957339686256,93957339686590],["v8::internal::CpuProfile::StreamPendingTraceEvents()",93957339687952,93957339689728],["v8::internal::CodeMap::Clear()",93957339690176,93957339690800],["v8::internal::CodeMap::FindEntry(unsigned long, unsigned long*)",93957339691552,93957339691721],["v8::internal::CpuProfilesCollection::CpuProfilesCollection(v8::internal::Isolate*)",93957339692432,93957339692489],["v8::internal::CpuProfilesCollection::StopProfiling(char const*)",93957339692768,93957339693001],["v8::internal::CpuProfilesCollection::IsLastProfile(char const*)",93957339693328,93957339693380],["v8::internal::CpuProfilesCollection::GetCommonSamplingInterval() const",93957339693456,93957339693675],["std::__1::__hash_table<std::__1::unique_ptr<v8::internal::CodeEntry, std::__1::default_delete<v8::internal::CodeEntry> >, v8::internal::CodeEntry::Hasher, v8::internal::CodeEntry::Equals, std::__1::allocator<std::__1::unique_ptr<v8::internal::CodeEntry, std::__1::default_delete<v8::internal::CodeEntry> > > >::__move_assign(std::__1::__hash_table<std::__1::unique_ptr<v8::internal::CodeEntry, std::__1::default_delete<v8::internal::CodeEntry> >, v8::internal::CodeEntry::Hasher, v8::internal::CodeEntry::Equals, std::__1::allocator<std::__1::unique_ptr<v8::internal::CodeEntry, std::__1::default_delete<v8::internal::CodeEntry> > > >&, std::__1::integral_constant<bool, true>)",93957339693824,93957339694290],["_ZNSt3__16vectorIN2v820CpuProfileDeoptFrameENS_9allocatorIS2_EEE6assignIPS2_EENS_9enable_ifIXaasr27__is_cpp17_forward_iteratorIT_EE5valuesr16is_constructibleIS2_NS_15iterator_traitsIS9_E9referenceEEE5valueEvE4typeES9_S9_",93957339694688,93957339695044],["std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::CodeEntryAndLineNumber, v8::internal::ProfileNode*>, void*>*> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::CodeEntryAndLineNumber, v8::internal::ProfileNode*>, std::__1::__unordered_map_hasher<v8::internal::CodeEntryAndLineNumber, std::__1::__hash_value_type<v8::internal::CodeEntryAndLineNumber, v8::internal::ProfileNode*>, v8::internal::ProfileNode::Hasher, v8::internal::ProfileNode::Equals, true>, std::__1::__unordered_map_equal<v8::internal::CodeEntryAndLineNumber, std::__1::__hash_value_type<v8::internal::CodeEntryAndLineNumber, v8::internal::ProfileNode*>, v8::internal::ProfileNode::Equals, v8::internal::ProfileNode::Hasher, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::CodeEntryAndLineNumber, v8::internal::ProfileNode*> > >::find<v8::internal::CodeEntryAndLineNumber>(v8::internal::CodeEntryAndLineNumber const&)",93957339695504,93957339696076],["void std::__1::__function::__policy_invoker<void (v8_inspector::V8InspectorSessionImpl*)>::__call_impl<std::__1::__function::__default_alloc_func<v8_inspector::V8ConsoleMessageStorage::clear()::$_1, void (v8_inspector::V8InspectorSessionImpl*)> >(std::__1::__function::__policy_storage const*, v8_inspector::V8InspectorSessionImpl*)",93957342430464,93957342430532],["v8_inspector::V8Console::DirXml(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&)",93957342433568,93957342433655],["v8_inspector::V8Console::GroupEnd(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&)",93957342434464,93957342434595],["v8_inspector::identifierFromTitleOrStackTrace(v8_inspector::String16 const&, v8_inspector::(anonymous namespace)::ConsoleHelper const&, v8::debug::ConsoleContext const&, v8_inspector::V8InspectorImpl*)",93957342437344,93957342438297],["v8_inspector::(anonymous namespace)::ConsoleHelper::reportCall(v8_inspector::ConsoleAPIType, std::__1::vector<v8::Local<v8::Value>, std::__1::allocator<v8::Local<v8::Value> > > const&)",93957342439328,93957342439530],["v8_inspector::V8Console::ProfileEnd(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&)",93957342439712,93957342439881],["v8_inspector::V8Console::TimeLog(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&)",93957342440912,93957342440937],["v8_inspector::V8Console::TimeEnd(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&)",93957342443040,93957342443062],["v8::internal::compiler::JSOperatorBuilder::StoreGlobal(v8::internal::LanguageMode, v8::internal::Handle<v8::internal::Name> const&, v8::internal::compiler::FeedbackSource const&)",93957344272080,93957344272296],["v8::internal::compiler::Operator1<v8::internal::compiler::PropertyAccess, v8::internal::compiler::OpEqualTo<v8::internal::compiler::PropertyAccess>, v8::internal::compiler::OpHash<v8::internal::compiler::PropertyAccess> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344280608,93957344280735],["v8::internal::compiler::Operator1<v8::internal::compiler::CreateCollectionIteratorParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CreateCollectionIteratorParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CreateCollectionIteratorParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344282880,93957344282950],["v8::internal::compiler::Operator1<v8::internal::compiler::CreateFunctionContextParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CreateFunctionContextParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CreateFunctionContextParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344284432,93957344284533],["v8::internal::compiler::JSTypeHintLowering::ReduceConstructOperation(v8::internal::compiler::Operator const*, v8::internal::compiler::Node* const*, int, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::FeedbackSlot) const",93957344287472,93957344287559],["v8::internal::compiler::JSTypedLowering::JSTypedLowering(v8::internal::compiler::AdvancedReducer::Editor*, v8::internal::compiler::JSGraph*, v8::internal::compiler::JSHeapBroker*, v8::internal::Zone*)",93957344288608,93957344288735],["v8::internal::compiler::JSTypedLowering::ReduceJSNegate(v8::internal::compiler::Node*)",93957344291408,93957344291805],["v8::internal::compiler::JSBinopReduction::OneInputIs(v8::internal::compiler::Type)",93957344299168,93957344299327],["v8::internal::compiler::JSBinopReduction::IsStringCompareOperation()",93957344302320,93957344302388],["v8::internal::compiler::JSBinopReduction::IsReceiverCompareOperation()",93957344305920,93957344306096],["v8::internal::compiler::JSGraphAssembler::JSGraphAssembler(v8::internal::compiler::JSGraph*, v8::internal::Zone*, v8::base::Optional<std::__1::function<void (v8::internal::compiler::Node*)> >, v8::internal::compiler::Schedule*, bool)",93957344307616,93957344307836],["v8::internal::compiler::JSTypedLowering::ReduceJSStrictEqual(v8::internal::compiler::Node*)",93957344308736,93957344310019],["v8::internal::compiler::JSBinopReduction::CheckLeftInputToReceiver()",93957344310624,93957344311130],["v8::internal::compiler::JSTypedLowering::ReduceJSToLength(v8::internal::compiler::Node*)",93957344312320,93957344312757],["v8::internal::compiler::JSTypedLowering::ReduceJSToObject(v8::internal::compiler::Node*)",93957344313888,93957344315548],["v8::internal::compiler::JSTypedLowering::ReduceJSHasContextExtension(v8::internal::compiler::Node*)",93957344320288,93957344321127],["v8::internal::compiler::JSTypedLowering::BuildGetModuleCell(v8::internal::compiler::Node*)",93957344322848,93957344323672],["v8::internal::compiler::JSTypedLowering::ReduceJSStoreModule(v8::internal::compiler::Node*)",93957344324128,93957344324639],["v8::internal::compiler::JSTypedLowering::ReduceJSConstruct(v8::internal::compiler::Node*)",93957344325152,93957344326321],["v8::internal::compiler::JSTypedLowering::ReduceJSCall(v8::internal::compiler::Node*)",93957344326752,93957344330179],["v8::internal::compiler::JSTypedLowering::ReduceJSForInNext(v8::internal::compiler::Node*)",93957344330928,93957344333771],["v8::internal::compiler::JSTypedLowering::ReduceJSLoadMessage(v8::internal::compiler::Node*)",93957344336352,93957344336554],["v8::internal::compiler::JSTypedLowering::ReduceJSGeneratorStore(v8::internal::compiler::Node*)",93957344336944,93957344338284],["v8::internal::compiler::JSTypedLowering::ReduceJSGeneratorRestoreContext(v8::internal::compiler::Node*)",93957344338896,93957344339021],["v8::internal::compiler::JSTypedLowering::ReduceJSGeneratorRestoreInputOrDebugPos(v8::internal::compiler::Node*)",93957344339744,93957344339869],["v8::internal::compiler::JSTypedLowering::ReduceJSParseInt(v8::internal::compiler::Node*)",93957344341952,93957344342216],["v8::internal::compiler::JSTypedLowering::Reduce(v8::internal::compiler::Node*)",93957344342400,93957344343330],["v8::internal::compiler::JSBinopReduction::ConvertToUI32(v8::internal::compiler::Node*, v8::internal::compiler::Signedness)",93957344343360,93957344343529],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::CallDescriptor::Kind const&)",93957344343680,93957344343827],["v8::internal::compiler::CallDescriptor::GetStackParameterDelta(v8::internal::compiler::CallDescriptor const*) const",93957344344080,93957344344122],["v8::internal::compiler::CallDescriptor::GetOffsetToFirstUnusedStackSlot() const",93957344344544,93957344344714],["v8::internal::compiler::CallDescriptor::CalculateFixedFrameSize(v8::internal::CodeKind) const",93957344344928,93957344345004],["std::__1::numpunct<wchar_t>::do_truename() const",93957346767776,93957346767823],["std::__1::codecvt<wchar_t, char, __mbstate_t>::~codecvt()",93957346774640,93957346774760],["void std::__1::__call_once_proxy<std::__1::tuple<std::__1::(anonymous namespace)::__fake_bind&&> >(void*)",93957346776832,93957346776868],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >& std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__append_forward_unsafe<char*>(char*, char*)",93957346778688,93957346779454],["std::__1::__sp_mut::unlock()",93957346780464,93957346780477],["std::__1::mutex::lock()",93957346780848,93957346780877],["std::__1::__call_once(unsigned long volatile&, void*, void (*)(void*))",93957346780896,93957346781172],["std::logic_error::logic_error(char const*)",93957346781824,93957346781946],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::replace(unsigned long, unsigned long, char const*, unsigned long)",93957346782336,93957346783169],["(anonymous namespace)::itanium_demangle::DeleteExpr::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346851424,93957346851744],["uprv_decNumberMultiply_68",93957347419392,93957347419487],["icu_68::LocaleKeyFactory::create(icu_68::ICUServiceKey const&, icu_68::ICUService const*, UErrorCode&) const",93957348128240,93957348128515],["unistrTextLength(UText*)",93957348405184,93957348405213],["netname2host",139871564491552,139871564491653],["__rpc_thread_svc_max_pollfd",139871564492864,139871564492927],["svc_register",139871564493456,139871564493676],["svc_sendreply",139871564493808,139871564493917],["nexttowardf",139871565518624,139871565518976],["copysignf",139871565521952,139871565521970],["totalorderf",139871565524736,139871565524763],["getpayloadf",139871565524896,139871565524912],["roundevenf",139871565525120,139871565525261],["ufromfpf",139871565525856,139871565526519],["ufromfpxf",139871565527200,139871565527885],["conjf",139871565527920,139871565527964],["v8::Shell::Load(v8::FunctionCallbackInfo<v8::Value> const&)",93957335255632,93957335256161],["v8::Worker::StartWorkerThread(std::__1::shared_ptr<v8::Worker>)",93957335258864,93957335259248],["v8::Worker::PostMessage(std::__1::unique_ptr<v8::SerializationData, std::__1::default_delete<v8::SerializationData> >)",93957335259936,93957335260258],["v8::Shell::DeserializeValue(v8::Isolate*, std::__1::unique_ptr<v8::SerializationData, std::__1::default_delete<v8::SerializationData> >)",93957335260528,93957335260822],["v8::internal::GlobalHandles::NodeSpace<v8::internal::GlobalHandles::Node>::Release(v8::internal::GlobalHandles::Node*)",93957336754848,93957336755093],["v8::internal::GlobalHandles::IterateYoungStrongAndDependentRoots(v8::internal::RootVisitor*)",93957336757584,93957336757738],["v8::internal::GlobalHandles::Node::PostGarbageCollectionProcessing(v8::internal::Isolate*)",93957336759296,93957336759533],["unsigned long v8::internal::GlobalHandles::InvokeFirstPassWeakCallbacks<v8::internal::GlobalHandles::Node>(std::__1::vector<std::__1::pair<v8::internal::GlobalHandles::Node*, v8::internal::GlobalHandles::PendingPhantomCallback>, std::__1::allocator<std::__1::pair<v8::internal::GlobalHandles::Node*, v8::internal::GlobalHandles::PendingPhantomCallback> > >*)",93957336760256,93957336760527],["v8::internal::GlobalHandles::PostGarbageCollectionProcessing(v8::internal::GarbageCollector, v8::GCCallbackFlags)",93957336761312,93957336761740],["v8::internal::GlobalHandles::IterateStrongStackRoots(v8::internal::RootVisitor*)",93957336761872,93957336762027],["v8::internal::GlobalHandles::IterateAllRoots(v8::internal::RootVisitor*)",93957336762256,93957336762651],["v8::internal::GlobalHandles::RecordStats(v8::internal::HeapStats*)",93957336762992,93957336763237],["v8::internal::CodeLargeObjectSpace::~CodeLargeObjectSpace()",93957337079472,93957337079560],["unsigned long v8::internal::MarkCompactCollector::ProcessMarkingWorklist<(v8::internal::MarkCompactCollector::MarkingWorklistProcessingMode)0>(unsigned long)",93957337084112,93957337116871],["v8::internal::MarkCompactCollector::MarkLiveObjects()",93957337157056,93957337161252],["v8::internal::MarkCompactCollector::DrainSweepingWorklistForSpace(v8::internal::AllocationSpace)",93957337169008,93957337169044],["v8::internal::MarkCompactCollector::VisitObject(v8::internal::HeapObject)",93957337170880,93957337201670],["v8::internal::MarkCompactCollector::ProcessEphemeronsUntilFixpoint()",93957337233072,93957337234510],["v8::internal::MarkCompactCollector::ProcessEphemeron(v8::internal::HeapObject, v8::internal::HeapObject)",93957337241632,93957337242090],["v8::internal::MarkCompactCollector::ClearOldBytecodeCandidates()",93957337242512,93957337242988],["v8::internal::MarkCompactCollector::ClearWeakCollections()",93957337244208,93957337245008],["v8::internal::MarkCompactCollector::MarkDependentCodeForDeoptimization()",93957337252144,93957337252392],["v8::internal::MarkCompactCollector::ClearPotentialSimpleMapTransition(v8::internal::Map)",93957337252688,93957337253028],["v8::internal::MarkCompactCollector::FlushBytecodeFromSFI(v8::internal::SharedFunctionInfo)",93957337253200,93957337254324],["v8::internal::MarkCompactCollector::CompactTransitionArray(v8::internal::Map, v8::internal::TransitionArray, v8::internal::DescriptorArray)",93957337254608,93957337256123],["v8::internal::MarkCompactCollector::TrimEnumCache(v8::internal::Map, v8::internal::DescriptorArray)",93957337256352,93957337256512],["v8::internal::MarkCompactCollector::RecordRelocSlot(v8::internal::Code, v8::internal::RelocInfo*, v8::internal::HeapObject)",93957337256672,93957337256845],["v8::internal::MarkCompactCollector::EvacuateEpilogue()",93957337257120,93957337257384],["v8::internal::OutputStreamWriter::AddString(char const*)",93957339660912,93957339661079],["v8::internal::GlobalObjectsEnumerator::~GlobalObjectsEnumerator()",93957339673072,93957339673123],["std::__1::deque<v8::internal::HeapEntry, std::__1::allocator<v8::internal::HeapEntry> >::__add_back_capacity()",93957339675328,93957339675749],["v8::base::TemplateHashMapEntry<void*, void*> v8::base::TemplateHashMapImpl<void*, void*, v8::base::HashEqualityThenKeyMatcher<void*, bool (*)(void*, void*)>, v8::base::DefaultAllocationPolicy>::LookupOrInsert<void*, v8::base::TemplateHashMapImpl<void*, void*, v8::base::HashEqualityThenKeyMatcher<void*, bool (*)(void*, void*)>, v8::base::DefaultAllocationPolicy>::LookupOrInsert<v8::base::TemplateHashMapImpl<void*, void*, v8::base::HashEqualityThenKeyMatcher<void*, bool (*)(void*, void*)>, v8::base::DefaultAllocationPolicy>::LookupOrInsert(void* const&, unsigned int)::{lambda()#1}>(void* const&, unsigned int, v8::base::TemplateHashMapImpl<void*, void*, v8::base::HashEqualityThenKeyMatcher<void*, bool (*)(void*, void*)>, v8::base::DefaultAllocationPolicy>::LookupOrInsert(void* const&, unsigned int)::{lambda()#1} const&)::{lambda()#1}, {lambda()#1}>(void* const, unsigned int, v8::base::TemplateHashMapImpl<void*, void*, v8::base::HashEqualityThenKeyMatcher<void*, bool (*)(void*, void*)>, v8::base::DefaultAllocationPolicy>::LookupOrInsert<v8::base::TemplateHashMapImpl<void*, void*, v8::base::HashEqualityThenKeyMatcher<void*, bool (*)(void*, void*)>, v8::base::DefaultAllocationPolicy>::LookupOrInsert(void* const&, unsigned int)::{lambda()#1}>(void* const&, unsigned int, v8::base::TemplateHashMapImpl<void*, void*, v8::base::HashEqualityThenKeyMatcher<void*, bool (*)(void*, void*)>, v8::base::DefaultAllocationPolicy>::LookupOrInsert(void* const&, unsigned int)::{lambda()#1} const&)::{lambda()#1} const&, {lambda()#1} const&)",93957339679536,93957339679813],["v8::internal::CodeEntry::unresolved_entry()",93957339680848,93957339680970],["v8::internal::CodeEntry::GetSourceLine(int) const",93957339681328,93957339681445],["v8::internal::CodeEntry::set_deopt_info(char const*, int, std::__1::vector<v8::CpuProfileDeoptFrame, std::__1::allocator<v8::CpuProfileDeoptFrame> >)",93957339682304,93957339682556],["v8::internal::ProfileNode::source_type() const",93957339683344,93957339684054],["v8::internal::ProfileNode::ProfileNode(v8::internal::ProfileTree*, v8::internal::CodeEntry*, v8::internal::ProfileNode*, int)",93957339684752,93957339685108],["v8::internal::ProfileNode::GetLineTicks(v8::CpuProfileNode::LineTick*, unsigned int) const",93957339685584,93957339685657],["v8::internal::ProfileTree::~ProfileTree()",93957339686208,93957339686250],["v8::internal::ProfileTree::AddPathFromEnd(std::__1::vector<v8::internal::CodeEntryAndLineNumber, std::__1::allocator<v8::internal::CodeEntryAndLineNumber> > const&, int, bool, v8::CpuProfilingMode)",93957339686592,93957339686847],["v8::internal::CpuProfile::AddPath(v8::base::TimeTicks, std::__1::vector<v8::internal::CodeEntryAndLineNumber, std::__1::allocator<v8::internal::CodeEntryAndLineNumber> > const&, int, bool, v8::base::TimeDelta)",93957339687472,93957339687943],["v8::internal::CpuProfile::FinishProfile()",93957339689728,93957339690066],["v8::internal::CodeMap::~CodeMap()",93957339690128,93957339690169],["v8::internal::CodeMap::AddCode(unsigned long, v8::internal::CodeEntry*, unsigned int)",93957339690800,93957339690954],["v8_inspector::(anonymous namespace)::V8ValueStringBuilder::append(v8::Local<v8::String>)",93957342428320,93957342428432],["v8_inspector::V8Console::V8Console(v8_inspector::V8InspectorImpl*)",93957342432720,93957342432740],["v8_inspector::V8Console::Warn(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&)",93957342433376,93957342433463],["v8_inspector::V8Console::Trace(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&)",93957342433760,93957342433891],["v8_inspector::V8Console::GroupCollapsed(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&)",93957342434320,93957342434451],["v8_inspector::V8Console::Clear(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&)",93957342434608,93957342434762],["v8_inspector::(anonymous namespace)::ConsoleHelper::firstArgToString(v8_inspector::String16 const&, bool)",93957342436032,93957342437333],["v8_inspector::V8Console::CountReset(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&)",93957342438304,93957342438973],["v8::internal::compiler::JSOperatorBuilder::GreaterThan(v8::internal::compiler::FeedbackSource const&)",93957344266048,93957344266223],["v8::internal::compiler::JSOperatorBuilder::CreateArrayFromIterable()",93957344274608,93957344274714],["v8::internal::compiler::Operator1<v8::internal::compiler::ConstructForwardVarargsParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::ConstructForwardVarargsParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::ConstructForwardVarargsParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344279728,93957344279830],["v8::internal::compiler::Operator1<v8::internal::compiler::StoreNamedOwnParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::StoreNamedOwnParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::StoreNamedOwnParameters> >::HashCode() const",93957344281360,93957344281458],["v8::internal::compiler::Operator1<v8::internal::compiler::CreateArrayParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CreateArrayParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CreateArrayParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344282512,93957344282641],["v8::internal::compiler::Operator1<v8::internal::compiler::CreateClosureParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CreateClosureParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CreateClosureParameters> >::HashCode() const",93957344283264,93957344283325],["v8::internal::compiler::Operator1<v8::internal::compiler::CloneObjectParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CloneObjectParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CloneObjectParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344284032,93957344284101],["v8::internal::compiler::JSSpeculativeBinopBuilder::TryBuildNumberBinop()",93957344285728,93957344285907],["v8::internal::compiler::JSTypeHintLowering::ReduceToNumberOperation(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::FeedbackSlot) const",93957344287104,93957344287367],["v8::internal::compiler::JSTypeHintLowering::ReduceLoadNamedOperation(v8::internal::compiler::Operator const*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::FeedbackSlot) const",93957344287712,93957344287795],["v8::internal::compiler::JSSpeculativeBinopBuilder::SpeculativeNumberOp(v8::internal::compiler::NumberOperationHint)",93957344288096,93957344288445],["v8::internal::compiler::JSBinopReduction::ConvertInputsToNumber()",93957344289152,93957344289717],["v8::internal::compiler::JSTypedLowering::ReduceJSDecrement(v8::internal::compiler::Node*)",93957344290608,93957344290997],["v8::internal::compiler::JSBinopReduction::BothInputsAre(v8::internal::compiler::Type)",93957344295888,93957344296047],["v8::internal::compiler::JSTypedLowering::ReduceJSToString(v8::internal::compiler::Node*)",93957344297808,93957344297905],["v8::internal::compiler::JSTypedLowering::ReduceInt32Binop(v8::internal::compiler::Node*)",93957344299680,93957344300035],["v8::internal::compiler::JSBinopReduction::SwapInputs()",93957344302000,93957344302311],["v8::internal::compiler::JSTypedLowering::ReduceJSEqual(v8::internal::compiler::Node*)",93957344302400,93957344304654],["v8::internal::compiler::JSBinopReduction::CheckInputsToInternalizedString()",93957344304832,93957344305914],["v8::internal::compiler::JSBinopReduction::CheckInputsToReceiver()",93957344306096,93957344306767],["v8::internal::compiler::JSBinopReduction::CheckInputsToReceiverOrNullOrUndefined()",93957344306944,93957344307615],["void v8::internal::compiler::GraphAssembler::Goto<v8::internal::TNode<v8::internal::Oddball> >(v8::internal::compiler::GraphAssemblerLabel<1>*, v8::internal::TNode<v8::internal::Oddball>)",93957344307840,93957344307882],["v8::internal::compiler::JSBinopReduction::CheckInputsToSymbol()",93957344308064,93957344308735],["v8::internal::compiler::Type::IsSingleton() const",93957344310032,93957344310306],["v8::internal::compiler::JSBinopReduction::ChangeToSpeculativeOperator(v8::internal::compiler::Operator const*, v8::internal::compiler::Type)",93957344310400,93957344310619],["v8::internal::compiler::JSBinopReduction::CheckLeftInputToReceiverOrNullOrUndefined()",93957344311136,93957344311642],["v8::internal::compiler::JSTypedLowering::ReduceJSToName(v8::internal::compiler::Node*)",93957344312160,93957344312310],["v8::internal::compiler::JSTypedLowering::ReduceJSToNumberInput(v8::internal::compiler::Node*)",93957344312768,93957344313416],["v8::internal::compiler::JSTypedLowering::ReduceJSToNumeric(v8::internal::compiler::Node*)",93957344313680,93957344313881],["v8::internal::compiler::JSTypedLowering::ReduceJSLoadNamed(v8::internal::compiler::Node*)",93957344315552,93957344315913],["v8::internal::compiler::JSTypedLowering::ReduceJSOrdinaryHasInstance(v8::internal::compiler::Node*)",93957344320048,93957344320286],["v8::internal::compiler::JSTypedLowering::ReduceJSLoadContext(v8::internal::compiler::Node*)",93957344321136,93957344321916],["std::__1::utf8_to_utf16(unsigned char const*, unsigned char const*, unsigned char const*&, unsigned short*, unsigned short*, unsigned short*&, unsigned long, std::__1::codecvt_mode)",93957346764288,93957346765035],["std::__1::__time_get_c_storage<char>::__months() const",93957346769952,93957346770054],["std::__1::__time_get_c_storage<char>::__c() const",93957346774128,93957346774256],["__cxx_global_array_dtor.74",93957346775536,93957346776062],["std::length_error::length_error(char const*)",93957346776400,93957346776435],["unsigned short std::__1::__num_get_unsigned_integral<unsigned short>(char const*, char const*, unsigned int&, int)",93957346777136,93957346777422],["double std::__1::__num_get_float<double>(char const*, char const*, unsigned int&)",93957346778240,93957346778450],["std::__1::__shared_weak_count::__release_weak()",93957346780288,93957346780328],["std::runtime_error::runtime_error(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)",93957346781952,93957346782083],["std::__1::__basic_string_common<true>::__throw_out_of_range() const",93957346782240,93957346782256],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__init_copy_ctor_external(char const*, unsigned long)",93957346783536,93957346783651],["std::get_terminate()",93957346793744,93957346793760],["v8::platform::DefaultPlatform::RunIdleTasks(v8::Isolate*, double)",93957346915552,93957346916152],["icu_68::number::impl::AffixUtils::unescape(icu_68::UnicodeString const&, icu_68::FormattedStringBuilder&, int, icu_68::number::impl::SymbolProvider const&, icu_68::FormattedStringBuilder::Field, UErrorCode&)",93957347236224,93957347236794],["icu_68::CollationBuilder::~CollationBuilder()",93957347574064,93957347574145],["icu_68::SimpleFilteredSentenceBreakIterator::setText(UText*, UErrorCode&)",93957347950112,93957347950133],["doLoadFromIndividualFiles(char const*, char const*, char const*, char const*, char const*, char const*, signed char (*)(void*, char const*, char const*, UDataInfo const*), void*, UErrorCode*, UErrorCode*)",93957348195056,93957348195621],["icu_68::ResourceDataValue::~ResourceDataValue()",93957348371904,93957348371954],["Cr_z_deflateReset",93957348435472,93957348435704],["user2netname",139871564490592,139871564490815],["pmap_getport",139871564492272,139871564492289],["__rpc_thread_svc_pollfd",139871564492800,139871564492863],["xprt_register",139871564492928,139871564493246],["atanf",139871565512896,139871565513518],["remquof",139871565520080,139871565520555],["__issignalingf",139871565521808,139871565521840],["frexpf",139871565522384,139871565522485],["nextupf",139871565524640,139871565524736],["totalorderf",139871565524768,139871565524804],["totalordermagf",139871565524848,139871565524884],["setpayloadf",139871565524912,139871565525020],["v8::Shell::Write(v8::FunctionCallbackInfo<v8::Value> const&)",93957335254624,93957335254647],["v8::PerIsolateData::SetTimeout(v8::Local<v8::Function>, v8::Local<v8::Context>)",93957335256352,93957335256670],["v8::Shell::WorkerNew(v8::FunctionCallbackInfo<v8::Value> const&)",93957335257680,93957335258855],["v8::Shell::WorkerPostMessage(v8::FunctionCallbackInfo<v8::Value> const&)",93957335259248,93957335259688],["v8::internal::GlobalHandles::UsedSize() const",93957336753344,93957336753370],["v8::internal::GlobalHandles::ClearWeakness(unsigned long*)",93957336755536,93957336755566],["v8::internal::GlobalHandles::IterateWeakRootsIdentifyFinalizers(bool (*)(v8::internal::Heap*, v8::internal::FullObjectSlot))",93957336757200,93957336757374],["v8::internal::GlobalHandles::IterateYoungWeakDeadObjectsForFinalizers(v8::internal::RootVisitor*)",93957336757904,93957336757987],["v8::internal::GlobalHandles::InvokeSecondPassPhantomCallbacks()",93957336759104,93957336759296],["void v8::internal::GlobalHandles::UpdateAndCompactListOfYoungNode<v8::internal::GlobalHandles::Node>(std::__1::vector<v8::internal::GlobalHandles::Node*, std::__1::allocator<v8::internal::GlobalHandles::Node*> >*)",93957336759536,93957336759866],["v8::internal::GlobalHandles::InvokeFirstPassWeakCallbacks()",93957336760208,93957336760250],["unsigned long v8::internal::GlobalHandles::InvokeFirstPassWeakCallbacks<v8::internal::GlobalHandles::TracedNode>(std::__1::vector<std::__1::pair<v8::internal::GlobalHandles::TracedNode*, v8::internal::GlobalHandles::PendingPhantomCallback>, std::__1::allocator<std::__1::pair<v8::internal::GlobalHandles::TracedNode*, v8::internal::GlobalHandles::PendingPhantomCallback> > >*)",93957336760528,93957336760799],["v8::internal::LargeObjectSpace::~LargeObjectSpace()",93957337079008,93957337079467],["v8::internal::LocalHeap::~LocalHeap()",93957337080528,93957337080848],["v8::internal::LocalHeap::PerformCollectionAndAllocateAgain(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment)",93957337082160,93957337083887],["v8::internal::Sweeper::~Sweeper()",93957337150816,93957337151032],["v8::internal::MarkCompactCollector::StartMarking()",93957337155968,93957337156795],["v8::internal::MarkCompactCollector::RecordObjectStats()",93957337164048,93957337164791],["v8::internal::MarkCompactCollector::EnsureSweepingCompleted()",93957337168816,93957337168959],["v8::internal::MarkCompactCollector::Prepare()",93957337169456,93957337170108],["v8::internal::MarkCompactCollector::ProcessTopOptimizedFrame(v8::internal::ObjectVisitor*)",93957337170576,93957337170878],["v8::internal::MarkCompactCollector::RevisitObject(v8::internal::HeapObject)",93957337201680,93957337232449],["v8::internal::MainMarkingVisitor<v8::internal::MajorMarkingState>::MarkDescriptorArrayFromWriteBarrier(v8::internal::DescriptorArray, int)",93957337232496,93957337233066],["v8::internal::MarkCompactCollector::PerformWrapperTracing()",93957337234512,93957337235153],["v8::internal::MarkCompactCollector::ProcessEphemerons()",93957337241360,93957337241629],["v8::internal::MarkCompactCollector::DrainMarkingWorklist()",93957337242096,93957337242108],["std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_stringstream()",93957337242384,93957337242509],["v8::internal::MarkCompactCollector::ClearFullMapTransitions()",93957337242992,93957337243361],["v8::internal::V8HeapExplorer::SetGcSubrootReference(v8::internal::Root, char const*, bool, v8::internal::Object)",93957339653344,93957339653943],["v8::internal::HeapSnapshotJSONSerializer::SerializeNode(v8::internal::HeapEntry const*)",93957339665968,93957339667396],["equalFormatsForHash(UElement, UElement)",93957339672512,93957339672526],["void v8::internal::GlobalObjectsEnumerator::VisitRootPointersImpl<v8::internal::OffHeapCompressedObjectSlot>(v8::internal::Root, char const*, v8::internal::OffHeapCompressedObjectSlot, v8::internal::OffHeapCompressedObjectSlot)",93957339673456,93957339673733],["std::__1::deque<v8::internal::CpuProfile::SampleInfo, std::__1::allocator<v8::internal::CpuProfile::SampleInfo> >::__add_back_capacity()",93957339674576,93957339674997],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::compiler::CallDescriptor const*, v8::internal::compiler::CallDescriptor const*>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::compiler::CallDescriptor const*, v8::internal::compiler::CallDescriptor const*>, std::__1::__unordered_map_hasher<v8::internal::compiler::CallDescriptor const*, std::__1::__hash_value_type<v8::internal::compiler::CallDescriptor const*, v8::internal::compiler::CallDescriptor const*>, std::__1::hash<v8::internal::compiler::CallDescriptor const*>, std::__1::equal_to<v8::internal::compiler::CallDescriptor const*>, true>, std::__1::__unordered_map_equal<v8::internal::compiler::CallDescriptor const*, std::__1::__hash_value_type<v8::internal::compiler::CallDescriptor const*, v8::internal::compiler::CallDescriptor const*>, std::__1::equal_to<v8::internal::compiler::CallDescriptor const*>, std::__1::hash<v8::internal::compiler::CallDescriptor const*>, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::compiler::CallDescriptor const*, v8::internal::compiler::CallDescriptor const*> > >::__emplace_unique_key_args<v8::internal::compiler::CallDescriptor const*, std::__1::pair<v8::internal::compiler::CallDescriptor const* const, v8::internal::compiler::CallDescriptor const*> >(v8::internal::compiler::CallDescriptor const* const&, std::__1::pair<v8::internal::compiler::CallDescriptor const* const, v8::internal::compiler::CallDescriptor const*>&&)",93957339676096,93957339676971],["void std::__1::fill_n<std::__1::vector<bool, v8::internal::ZoneAllocator<bool> > >(std::__1::__bit_iterator<std::__1::vector<bool, v8::internal::ZoneAllocator<bool> >, false, 0>, std::__1::vector<bool, v8::internal::ZoneAllocator<bool> >::size_type, bool)",93957339678480,93957339678734],["v8::internal::SourcePositionTable::SetPosition(int, int, int)",93957339680368,93957339680457],["v8::internal::CodeEntry::gc_entry()",93957339680720,93957339680842],["v8::internal::CodeEntry::GetHash() const",93957339680976,93957339681212],["v8::internal::CodeEntry::SetBuiltinId(v8::internal::Builtins::Name)",93957339681296,93957339681328],["v8::internal::CodeEntry::SetInlineStacks(std::__1::unordered_set<std::__1::unique_ptr<v8::internal::CodeEntry, std::__1::default_delete<v8::internal::CodeEntry> >, v8::internal::CodeEntry::Hasher, v8::internal::CodeEntry::Equals, std::__1::allocator<std::__1::unique_ptr<v8::internal::CodeEntry, std::__1::default_delete<v8::internal::CodeEntry> > > >, std::__1::unordered_map<int, std::__1::vector<v8::internal::CodeEntryAndLineNumber, std::__1::allocator<v8::internal::CodeEntryAndLineNumber> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::vector<v8::internal::CodeEntryAndLineNumber, std::__1::allocator<v8::internal::CodeEntryAndLineNumber> > > > >)",93957339681456,93957339681638],["v8::internal::CodeEntry::GetInlineStack(int) const",93957339681808,93957339682298],["v8::internal::CodeEntry::FillFunctionInfo(v8::internal::SharedFunctionInfo)",93957339682560,93957339682883],["v8::internal::CodeEntry::ReleaseStrings(v8::internal::StringsStorage&)",93957339683216,93957339683343],["v8::internal::ProfileNode::CollectDeoptInfo(v8::internal::CodeEntry*)",93957339684064,93957339684336],["v8_inspector::V8ConsoleMessageStorage::count(int, v8_inspector::String16 const&)",93957342424256,93957342424554],["std::__1::__deque_base<std::__1::unique_ptr<v8_inspector::V8ConsoleMessage, std::__1::default_delete<v8_inspector::V8ConsoleMessage> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::V8ConsoleMessage, std::__1::default_delete<v8_inspector::V8ConsoleMessage> > > >::clear()",93957342429216,93957342429520],["std::__1::pair<std::__1::__tree_iterator<std::__1::__value_type<v8_inspector::String16, double>, std::__1::__tree_node<std::__1::__value_type<v8_inspector::String16, double>, void*>*, long>, bool> std::__1::__tree<std::__1::__value_type<v8_inspector::String16, double>, std::__1::__map_value_compare<v8_inspector::String16, std::__1::__value_type<v8_inspector::String16, double>, std::__1::less<v8_inspector::String16>, true>, std::__1::allocator<std::__1::__value_type<v8_inspector::String16, double> > >::__emplace_unique_key_args<v8_inspector::String16, std::__1::piecewise_construct_t const&, std::__1::tuple<v8_inspector::String16 const&>, std::__1::tuple<> >(v8_inspector::String16 const&, std::__1::piecewise_construct_t const&, std::__1::tuple<v8_inspector::String16 const&>&&, std::__1::tuple<>&&)",93957342431552,93957342432548],["v8_inspector::(anonymous namespace)::ConsoleHelper::reportCall(v8_inspector::ConsoleAPIType)",93957342432848,93957342433073],["v8_inspector::V8Console::Log(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&)",93957342433280,93957342433364],["v8_inspector::V8Console::Dir(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&)",93957342433472,93957342433559],["v8_inspector::V8Console::Table(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&)",93957342433664,93957342433751],["v8_inspector::(anonymous namespace)::ConsoleHelper::reportCallWithDefaultArgument(v8_inspector::ConsoleAPIType, v8_inspector::String16 const&)",93957342433904,93957342434169],["v8::internal::compiler::JSOperatorBuilder::StoreMessage()",93957344262480,93957344262494],["v8::internal::compiler::JSOperatorBuilder::ConstructWithSpread(unsigned int, v8::internal::compiler::CallFrequency const&, v8::internal::compiler::FeedbackSource const&)",93957344269136,93957344269330],["v8::internal::compiler::JSOperatorBuilder::CreateArray(unsigned long, v8::internal::MaybeHandle<v8::internal::AllocationSite>)",93957344273248,93957344273387],["v8::internal::compiler::JSOperatorBuilder::CreateCatchContext(v8::internal::Handle<v8::internal::ScopeInfo> const&)",93957344275968,93957344276093],["v8::internal::compiler::Operator1<v8::internal::compiler::CallRuntimeParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CallRuntimeParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CallRuntimeParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344279264,93957344279365],["v8::internal::compiler::Operator1<v8::internal::compiler::NamedAccess, v8::internal::compiler::OpEqualTo<v8::internal::compiler::NamedAccess>, v8::internal::compiler::OpHash<v8::internal::compiler::NamedAccess> >::HashCode() const",93957344280176,93957344280299],["v8::internal::compiler::Operator1<v8::internal::compiler::ForInParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::ForInParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::ForInParameters> >::Equals(v8::internal::compiler::Operator const*) const",93957344281056,93957344281118],["v8::internal::compiler::Operator1<v8::internal::compiler::StoreGlobalParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::StoreGlobalParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::StoreGlobalParameters> >::Equals(v8::internal::compiler::Operator const*) const",93957344281760,93957344281820],["v8::internal::compiler::Operator1<v8::internal::compiler::(anonymous namespace)::TransitionAndStoreNonNumberElementParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::(anonymous namespace)::TransitionAndStoreNonNumberElementParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::(anonymous namespace)::TransitionAndStoreNonNumberElementParameters> >::Equals(v8::internal::compiler::Operator const*) const",93957344282416,93957344282458],["v8::internal::compiler::Operator1<v8::internal::compiler::CreateArrayIteratorParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CreateArrayIteratorParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CreateArrayIteratorParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344282688,93957344282825],["v8::internal::compiler::Operator1<v8::internal::compiler::CreateBoundFunctionParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CreateBoundFunctionParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CreateBoundFunctionParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344283056,93957344283187],["v8::internal::compiler::Operator1<v8::internal::compiler::CreateLiteralParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CreateLiteralParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CreateLiteralParameters> >::Equals(v8::internal::compiler::Operator const*) const",93957344283408,93957344283489],["v8::internal::compiler::Operator1<v8::internal::compiler::CheckBoundsParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CheckBoundsParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CheckBoundsParameters> >::Equals(v8::internal::compiler::Operator const*) const",93957344283840,93957344283902],["v8::internal::compiler::Operator1<v8::internal::compiler::CreateFunctionContextParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CreateFunctionContextParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CreateFunctionContextParameters> >::Equals(v8::internal::compiler::Operator const*) const",93957344284272,93957344284319],["v8::internal::compiler::JSTypeHintLowering::ReduceUnaryOperation(v8::internal::compiler::Operator const*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::FeedbackSlot) const",93957344284576,93957344285243],["v8::internal::compiler::JSSpeculativeBinopBuilder::TryBuildNumberCompare()",93957344286464,93957344286643],["v8::internal::compiler::JSTypeHintLowering::ReduceForInPrepareOperation(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::FeedbackSlot) const",93957344287008,93957344287091],["v8::internal::compiler::JSTypeHintLowering::ReduceCallOperation(v8::internal::compiler::Operator const*, v8::internal::compiler::Node* const*, int, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::FeedbackSlot) const",93957344287376,93957344287463],["v8::internal::compiler::JSTypeHintLowering::ReduceGetIteratorOperation(v8::internal::compiler::Operator const*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::FeedbackSlot, v8::internal::FeedbackSlot) const",93957344287568,93957344287699],["v8::internal::compiler::JSTypeHintLowering::ReduceLoadKeyedOperation(v8::internal::compiler::Operator const*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::FeedbackSlot) const",93957344287808,93957344287895],["v8::internal::compiler::JSTypeHintLowering::ReduceStoreKeyedOperation(v8::internal::compiler::Operator const*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::FeedbackSlot) const",93957344288000,93957344288088],["v8::internal::compiler::JSSpeculativeBinopBuilder::SpeculativeCompareOp(v8::internal::compiler::NumberOperationHint)",93957344288448,93957344288605],["v8::internal::compiler::JSTypedLowering::ReduceJSBitwiseNot(v8::internal::compiler::Node*)",93957344288736,93957344289145],["v8::internal::compiler::JSBinopReduction::ConvertInputsToUI32(v8::internal::compiler::Signedness, v8::internal::compiler::Signedness)",93957344289728,93957344290123],["v8::internal::compiler::JSBinopReduction::NumberOp()",93957344290304,93957344290606],["v8::internal::compiler::JSTypedLowering::ReduceJSIncrement(v8::internal::compiler::Node*)",93957344291008,93957344291397],["v8::internal::compiler::JSTypedLowering::ReduceJSAdd(v8::internal::compiler::Node*)",93957344291808,93957344295875],["v8::internal::compiler::JSBinopReduction::LeftInputIs(v8::internal::compiler::Type)",93957344296048,93957344296120],["v8::internal::compiler::JSBinopReduction::CheckInputsToString()",93957344296656,93957344297802],["v8::internal::compiler::JSBinopReduction::ShouldCreateConsString()",93957344297920,93957344299163],["v8::internal::compiler::JSTypedLowering::ReduceNumberBinop(v8::internal::compiler::Node*)",93957344299328,93957344299671],["v8::internal::compiler::JSTypedLowering::ReduceUI32Shift(v8::internal::compiler::Node*, v8::internal::compiler::Signedness)",93957344300048,93957344300430],["std::__1::ctype<char>::do_widen(char const*, char const*, char*) const",93957346759888,93957346760282],["std::__1::utf8_to_ucs4_length(unsigned char const*, unsigned char const*, unsigned long, unsigned long, std::__1::codecvt_mode)",93957346766864,93957346767431],["std::__1::__time_get_c_storage<char>::__weeks() const",93957346768096,93957346768198],["std::__1::__time_get_c_storage<char>::__am_pm() const",93957346772928,93957346773030],["std::__1::__time_get_c_storage<char>::__X() const",93957346773872,93957346774000],["std::__1::__time_get_c_storage<char>::__r() const",93957346774384,93957346774512],["std::__1::time_put<char, std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > >::~time_put()",93957346774896,93957346775006],["__cxx_global_array_dtor.113",93957346776128,93957346776191],["std::__1::__throw_length_error(char const*)",93957346776320,93957346776395],["std::__1::vector<std::__1::locale::facet*, std::__1::__sso_allocator<std::__1::locale::facet*, 30ul> >::__append(unsigned long)",93957346776448,93957346776831],["long std::__1::__num_get_signed_integral<long>(char const*, char const*, unsigned int&, int)",93957346776880,93957346777130],["unsigned int std::__1::__num_get_unsigned_integral<unsigned int>(char const*, char const*, unsigned int&, int)",93957346777424,93957346777713],["float std::__1::__num_get_float<float>(char const*, char const*, unsigned int&)",93957346778016,93957346778226],["long double std::__1::__num_get_float<long double>(char const*, char const*, unsigned int&)",93957346778464,93957346778675],["std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >& std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >::__append_forward_unsafe<wchar_t*>(wchar_t*, wchar_t*)",93957346779456,93957346780288],["std::__1::__shared_weak_count::lock()",93957346780336,93957346780379],["std::__1::__basic_string_common<true>::__throw_length_error() const",93957346782224,93957346782240],["std::__1::__throw_out_of_range(char const*)",93957346782256,93957346782331],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_string()",93957346783248,93957346783269],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__assign_external(char const*, unsigned long)",93957346784192,93957346784527],["std::__1::__do_message::message(int) const",93957346790736,93957346791021],["(anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::parseDecltype()",93957346822384,93957346822683],["v8::base::ieee754::pow(double, double)",93957346895792,93957346898004],["icu_68::ChineseCalendar::isLeapMonthBetween(int, int) const",93957346988512,93957346988614],["icu_68::Formattable::isNumeric() const",93957347188912,93957347188949],["icu_68::number::impl::Modifier::Parameters::Parameters(icu_68::number::impl::ModifierStore const*, icu_68::number::impl::Signum, icu_68::StandardPlural::Form)",93957347346128,93957347346143],["icu_68::PluralRules::getRuleFromResource(icu_68::Locale const&, UPluralType, UErrorCode&)",93957347486928,93957347488451],["icu_68::(anonymous namespace)::FCDUTF8NFDIterator::nextRawCodePoint()",93957347691024,93957347691058],["(anonymous namespace)::KeywordsSink::~KeywordsSink()",93957347872144,93957347872186],["icu_68::FCDNormalizer2::isInert(int) const",93957348048688,93957348048767],["u_isdigit_68",93957348158752,93957348158888],["LocExtType* icu_68::MemoryPool<LocExtType, 8>::create<>()",93957348232096,93957348232291],["icu_68::UnicodeString::findAndReplace(int, int, icu_68::UnicodeString const&, int, int, icu_68::UnicodeString const&, int, int)",93957348342912,93957348343591],["icu_68::UStringEnumeration::count(UErrorCode&) const",93957348390416,93957348390430],["icu_68::UVector::sort(signed char (*)(UElement, UElement), UErrorCode&)",93957348429168,93957348429229],["zlib_internal::CompressHelper(zlib_internal::WrapperType, unsigned char*, unsigned long*, unsigned char const*, unsigned long, int, void* (*)(unsigned long), void (*)(void*))",93957348460864,93957348461330],["key_decryptsession_pk",139871564489840,139871564490028],["getnetname",139871564491184,139871564491229],["__libc_rpc_getport",139871564491824,139871564492257],["__rpc_thread_svc_fdset",139871564492672,139871564492727],["__lgammaf_r_finite",139871565504512,139871565507113],["expm1f",139871565516496,139871565517453],["tanhf",139871565519680,139871565519968],["llrintf",139871565521472,139871565521478],["__exp10f_finite",139871565521776,139871565521806],["__finitef",139871565521920,139871565521944],["modff",139871565521984,139871565522123],["__signbitf",139871565522496,139871565522504],["v8::Shell::AsyncHooksTriggerAsyncId(v8::FunctionCallbackInfo<v8::Value> const&)",93957335253952,93957335254047],["v8::Shell::ReadBuffer(v8::FunctionCallbackInfo<v8::Value> const&)",93957335254960,93957335255262],["v8::Shell::SetTimeout(v8::FunctionCallbackInfo<v8::Value> const&)",93957335256176,93957335256350],["v8::ReadWorkerTypeAndArguments(v8::FunctionCallbackInfo<v8::Value> const&, v8::WorkerType*, v8::Local<v8::Value>*)",93957335256672,93957335257146],["v8::internal::FlagList::ResetAllFlags()",93957336728384,93957336728427],["v8::internal::GlobalHandles::Create(v8::internal::Object)",93957336754016,93957336754765],["v8::internal::GlobalHandles::MakeWeak(unsigned long*, void*, void (*)(v8::WeakCallbackInfo<void> const&), v8::WeakCallbackType)",93957336755360,93957336755451],["v8::internal::GlobalHandles::IterateWeakRootsForFinalizers(v8::internal::RootVisitor*)",93957336755584,93957336755705],["v8::internal::GlobalHandles::TracedNode::CollectPhantomCallbackData(std::__1::vector<std::__1::pair<v8::internal::GlobalHandles::TracedNode*, v8::internal::GlobalHandles::PendingPhantomCallback>, std::__1::allocator<std::__1::pair<v8::internal::GlobalHandles::TracedNode*, v8::internal::GlobalHandles::PendingPhantomCallback> > >*)",93957336756784,93957336757199],["v8::internal::GlobalHandles::IdentifyWeakUnmodifiedObjects(bool (*)(v8::internal::FullObjectSlot))",93957336757376,93957336757573],["v8::internal::GlobalHandles::MarkYoungWeakDeadObjectsPending(bool (*)(v8::internal::Heap*, v8::internal::FullObjectSlot))",93957336757744,93957336757895],["v8::internal::GlobalHandles::IterateYoungWeakObjectsForPhantomHandles(v8::internal::RootVisitor*, bool (*)(v8::internal::Heap*, v8::internal::FullObjectSlot))",93957336758000,93957336758528],["v8::internal::LocalFactory::LocalFactory(v8::internal::Isolate*)",93957337079728,93957337079741],["v8::internal::LocalHeap::IsParked()",93957337081008,93957337081031],["v8::internal::LocalHeap::MarkLinearAllocationAreaBlack()",93957337082128,93957337082142],["v8::internal::LocalHeap::RemoveGCEpilogueCallback(void (*)(void*), void*)",93957337083968,93957337084047],["v8::internal::MarkCompactCollector::MarkCompactCollector(v8::internal::Heap*)",93957337149872,93957337150324],["v8::internal::MarkCompactCollector::TearDown()",93957337151072,93957337151246],["v8::internal::MarkCompactCollector::CollectEvacuationCandidates(v8::internal::PagedSpace*)",93957337153440,93957337155963],["v8::internal::MarkCompactCollector::CollectGarbage()",93957337156800,93957337157043],["v8::internal::MarkCompactCollector::ClearNonLiveReferences()",93957337161264,93957337164044],["v8::internal::MarkCompactCollector::StartSweepSpaces()",93957337164800,93957337165391],["v8::internal::MarkCompactCollector::Finish()",93957337167792,93957337168814],["v8::internal::MarkCompactCollector::DrainSweepingWorklists()",93957337168960,93957337168996],["v8::internal::RememberedSet<(v8::internal::RememberedSetType)1>::ClearAll(v8::internal::Heap*)",93957337169056,93957337169450],["v8::internal::MarkCompactCollector::SweepArrayBufferExtensions()",93957337170112,93957337170507],["v8::internal::V8HeapExplorer::ExtractPropertyReferences(v8::internal::JSObject, v8::internal::HeapEntry*)",93957339644800,93957339645789],["v8::internal::EmbedderGraphImpl::~EmbedderGraphImpl()",93957339657152,93957339657284],["v8::internal::HeapSnapshotJSONSerializer::SerializeLocations()",93957339664448,93957339664654],["v8::internal::HeapSnapshotJSONSerializer::SerializeLocation(v8::internal::SourceLocation const&)",93957339670176,93957339670959],["v8::internal::RootsReferencesExtractor::VisitRootPointer(v8::internal::Root, char const*, v8::internal::FullObjectSlot)",93957339672240,93957339672361],["v8::internal::IndexedReferencesExtractor::VisitCodeTarget(v8::internal::Code, v8::internal::RelocInfo*)",93957339672832,93957339672957],["v8::internal::GlobalObjectsEnumerator::VisitRootPointers(v8::internal::Root, char const*, v8::internal::OffHeapCompressedObjectSlot, v8::internal::OffHeapCompressedObjectSlot)",93957339673152,93957339673162],["v8::internal::EmbedderGraphImpl::AddNode(std::__1::unique_ptr<v8::EmbedderGraph::Node, std::__1::default_delete<v8::EmbedderGraph::Node> >)",93957339673904,93957339674011],["void v8::internal::OutputStreamWriter::AddNumberImpl<unsigned int>(unsigned int, char const*)",93957339674240,93957339674575],["void std::__1::vector<v8::internal::SourceLocation, std::__1::allocator<v8::internal::SourceLocation> >::__emplace_back_slow_path<int, int&, int&, int&>(int&&, int&, int&, int&)",93957339675008,93957339675319],["void std::__1::vector<v8::internal::HeapObjectsMap::EntryInfo, std::__1::allocator<v8::internal::HeapObjectsMap::EntryInfo> >::__emplace_back_slow_path<int, unsigned long const&, int, bool>(int&&, unsigned long const&, int&&, bool&&)",93957339675760,93957339676083],["void std::__1::vector<v8::internal::HeapObjectsMap::TimeInterval, std::__1::allocator<v8::internal::HeapObjectsMap::TimeInterval> >::__emplace_back_slow_path<unsigned int&>(unsigned int&)",93957339676976,93957339677291],["std::__1::vector<bool, std::__1::allocator<bool> >::reserve(unsigned long)",93957339678208,93957339678480],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::JSGlobalObject, char const*>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::JSGlobalObject, char const*>, std::__1::__unordered_map_hasher<v8::internal::JSGlobalObject, std::__1::__hash_value_type<v8::internal::JSGlobalObject, char const*>, v8::internal::Object::Hasher, std::__1::equal_to<v8::internal::JSGlobalObject>, true>, std::__1::__unordered_map_equal<v8::internal::JSGlobalObject, std::__1::__hash_value_type<v8::internal::JSGlobalObject, char const*>, std::__1::equal_to<v8::internal::JSGlobalObject>, v8::internal::Object::Hasher, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::JSGlobalObject, char const*> > >::__emplace_unique_key_args<v8::internal::JSGlobalObject, v8::internal::JSGlobalObject, char const* const&>(v8::internal::JSGlobalObject const&, v8::internal::JSGlobalObject&&, char const* const&)",93957339678736,93957339679535],["v8::base::TemplateHashMapImpl<void*, void*, v8::base::HashEqualityThenKeyMatcher<void*, bool (*)(void*, void*)>, v8::base::DefaultAllocationPolicy>::Resize()",93957339679824,93957339680353],["v8::internal::CodeEntry::program_entry()",93957339680464,93957339680586],["v8_inspector::V8ConsoleMessage::createForConsoleAPI(v8::Local<v8::Context>, int, int, v8_inspector::V8InspectorImpl*, double, v8_inspector::ConsoleAPIType, std::__1::vector<v8::Local<v8::Value>, std::__1::allocator<v8::Local<v8::Value> > > const&, v8_inspector::String16 const&, std::__1::unique_ptr<v8_inspector::V8StackTraceImpl, std::__1::default_delete<v8_inspector::V8StackTraceImpl> >)",93957342417440,93957342420337],["v8_inspector::V8ConsoleMessageStorage::timeEnd(int, v8_inspector::String16 const&)",93957342426016,93957342426723],["v8_inspector::(anonymous namespace)::V8ValueStringBuilder::append(v8::Local<v8::Symbol>)",93957342428624,93957342428748],["std::__1::__tree<std::__1::__value_type<int, v8_inspector::V8ConsoleMessageStorage::PerContextData>, std::__1::__map_value_compare<int, std::__1::__value_type<int, v8_inspector::V8ConsoleMessageStorage::PerContextData>, std::__1::less<int>, true>, std::__1::allocator<std::__1::__value_type<int, v8_inspector::V8ConsoleMessageStorage::PerContextData> > >::destroy(std::__1::__tree_node<std::__1::__value_type<int, v8_inspector::V8ConsoleMessageStorage::PerContextData>, void*>*)",93957342430304,93957342430397],["std::__1::pair<std::__1::__tree_iterator<std::__1::__value_type<v8_inspector::String16, int>, std::__1::__tree_node<std::__1::__value_type<v8_inspector::String16, int>, void*>*, long>, bool> std::__1::__tree<std::__1::__value_type<v8_inspector::String16, int>, std::__1::__map_value_compare<v8_inspector::String16, std::__1::__value_type<v8_inspector::String16, int>, std::__1::less<v8_inspector::String16>, true>, std::__1::allocator<std::__1::__value_type<v8_inspector::String16, int> > >::__emplace_unique_key_args<v8_inspector::String16, std::__1::piecewise_construct_t const&, std::__1::tuple<v8_inspector::String16 const&>, std::__1::tuple<> >(v8_inspector::String16 const&, std::__1::piecewise_construct_t const&, std::__1::tuple<v8_inspector::String16 const&>&&, std::__1::tuple<>&&)",93957342430544,93957342431540],["std::__1::__tree<std::__1::__value_type<int, v8_inspector::V8ConsoleMessageStorage::PerContextData>, std::__1::__map_value_compare<int, std::__1::__value_type<int, v8_inspector::V8ConsoleMessageStorage::PerContextData>, std::__1::less<int>, true>, std::__1::allocator<std::__1::__value_type<int, v8_inspector::V8ConsoleMessageStorage::PerContextData> > >::erase(std::__1::__tree_const_iterator<std::__1::__value_type<int, v8_inspector::V8ConsoleMessageStorage::PerContextData>, std::__1::__tree_node<std::__1::__value_type<int, v8_inspector::V8ConsoleMessageStorage::PerContextData>, void*>*, long>)",93957342432560,93957342432720],["v8_inspector::V8Console::Debug(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&)",93957342432752,93957342432839],["v8_inspector::V8Console::Error(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&)",93957342433088,93957342433175],["v8::internal::compiler::JSNativeContextSpecialization::BuildElementAccess(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::ElementAccessInfo const&, v8::internal::compiler::KeyedAccessMode const&)",93957344235472,93957344244234],["v8::internal::compiler::JSOperatorBuilder::Increment(v8::internal::compiler::FeedbackSource const&)",93957344263216,93957344263391],["v8::internal::compiler::JSOperatorBuilder::CallWithArrayLike(v8::internal::compiler::CallFrequency const&, v8::internal::compiler::FeedbackSource const&, v8::internal::SpeculationMode, v8::internal::compiler::CallFeedbackRelation)",93957344267552,93957344267781],["v8::internal::compiler::JSOperatorBuilder::GeneratorStore(int)",93957344270768,93957344270894],["v8::internal::compiler::JSOperatorBuilder::LoadModule(int)",93957344272752,93957344272877],["v8::internal::compiler::JSOperatorBuilder::CreateBoundFunction(unsigned long, v8::internal::Handle<v8::internal::Map>)",93957344273840,93957344273982],["v8::internal::compiler::JSOperatorBuilder::StackCheck(v8::internal::compiler::StackCheckKind)",93957344275344,93957344275466],["v8::internal::compiler::Operator1<v8::internal::compiler::CheckParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CheckParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CheckParameters> >::Equals(v8::internal::compiler::Operator const*) const",93957344278640,93957344278672],["v8::internal::compiler::Operator1<v8::internal::compiler::CallParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CallParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CallParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344279120,93957344279190],["v8::internal::compiler::Operator1<v8::internal::compiler::JSWasmCallParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::JSWasmCallParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::JSWasmCallParameters> >::HashCode() const",93957344279440,93957344279573],["v8::internal::compiler::Operator1<v8::internal::compiler::ConstructParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::ConstructParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::ConstructParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344279968,93957344280097],["v8::internal::compiler::Operator1<v8::internal::compiler::PropertyAccess, v8::internal::compiler::OpEqualTo<v8::internal::compiler::PropertyAccess>, v8::internal::compiler::OpHash<v8::internal::compiler::PropertyAccess> >::Equals(v8::internal::compiler::Operator const*) const",93957344280448,93957344280498],["v8::internal::compiler::Operator1<v8::internal::compiler::GetIteratorParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::GetIteratorParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::GetIteratorParameters> >::HashCode() const",93957344280816,93957344280942],["v8::internal::compiler::Operator1<v8::internal::compiler::ForInParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::ForInParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::ForInParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344281232,93957344281302],["v8::internal::compiler::Operator1<v8::internal::compiler::LoadGlobalParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::LoadGlobalParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::LoadGlobalParameters> >::HashCode() const",93957344281552,93957344281632],["v8::internal::compiler::Operator1<v8::internal::compiler::StoreGlobalParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::StoreGlobalParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::StoreGlobalParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344281952,93957344282089],["v8::internal::compiler::Operator1<v8::internal::compiler::ContextAccess, v8::internal::compiler::OpEqualTo<v8::internal::compiler::ContextAccess>, v8::internal::compiler::OpHash<v8::internal::compiler::ContextAccess> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344282272,93957344282403],["v8::internal::compiler::Operator1<v8::internal::compiler::CreateArrayParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CreateArrayParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CreateArrayParameters> >::HashCode() const",93957344282464,93957344282507],["v8::internal::compiler::Operator1<v8::internal::compiler::TruncateKind, v8::internal::compiler::OpEqualTo<v8::internal::compiler::TruncateKind>, v8::internal::compiler::OpHash<v8::internal::compiler::TruncateKind> >::HashCode() const",93957344282656,93957344282674],["v8::internal::compiler::Operator1<v8::internal::compiler::CreateCollectionIteratorParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CreateCollectionIteratorParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CreateCollectionIteratorParameters> >::HashCode() const",93957344282832,93957344282875],["v8::internal::compiler::Operator1<v8::internal::compiler::CreateBoundFunctionParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CreateBoundFunctionParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CreateBoundFunctionParameters> >::HashCode() const",93957344282960,93957344283041],["v8::internal::compiler::Operator1<v8::internal::compiler::CreateClosureParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CreateClosureParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CreateClosureParameters> >::Equals(v8::internal::compiler::Operator const*) const",93957344283200,93957344283249],["v8::internal::compiler::Operator1<v8::internal::compiler::CreateClosureParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CreateClosureParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CreateClosureParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344283328,93957344283398],["v8::internal::compiler::Operator1<v8::internal::compiler::CreateLiteralParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CreateLiteralParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CreateLiteralParameters> >::HashCode() const",93957344283504,93957344283540],["v8::internal::compiler::Operator1<v8::internal::compiler::GetTemplateObjectParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::GetTemplateObjectParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::GetTemplateObjectParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344283712,93957344283840],["v8::internal::compiler::Operator1<v8::internal::compiler::CloneObjectParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CloneObjectParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CloneObjectParameters> >::HashCode() const",93957344283904,93957344284022],["v8::internal::compiler::Operator1<v8::internal::compiler::StackCheckKind, v8::internal::compiler::OpEqualTo<v8::internal::compiler::StackCheckKind>, v8::internal::compiler::OpHash<v8::internal::compiler::StackCheckKind> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344284112,93957344284266],["v8::internal::compiler::Operator1<v8::internal::compiler::CreateFunctionContextParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CreateFunctionContextParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CreateFunctionContextParameters> >::HashCode() const",93957344284320,93957344284426],["v8::internal::compiler::JSTypeHintLowering::JSTypeHintLowering(v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::JSGraph*, v8::internal::compiler::FeedbackVectorRef, v8::base::Flags<v8::internal::compiler::JSTypeHintLowering::Flag, int>)",93957344284544,93957344284569],["v8::internal::compiler::JSTypeHintLowering::TryBuildSoftDeopt(v8::internal::FeedbackSlot, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::DeoptimizeReason) const",93957344285248,93957344285727],["v8::internal::compiler::JSTypeHintLowering::ReduceBinaryOperation(v8::internal::compiler::Operator const*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::FeedbackSlot) const",93957344285920,93957344286453],["v8::internal::compiler::JSSpeculativeBinopBuilder::TryBuildBigIntBinop()",93957344286656,93957344286911],["std::__1::ctype<wchar_t>::do_is(wchar_t const*, wchar_t const*, unsigned short*) const",93957346757152,93957346757320],["std::__1::codecvt<wchar_t, char, __mbstate_t>::do_in(__mbstate_t&, char const*, char const*, char const*&, wchar_t*, wchar_t*, wchar_t*&) const",93957346761952,93957346762603],["std::__1::ucs4_to_utf8(unsigned int const*, unsigned int const*, unsigned int const*&, unsigned char*, unsigned char*, unsigned char*&, unsigned long, std::__1::codecvt_mode)",93957346765760,93957346766137],["std::__1::numpunct<wchar_t>::~numpunct()",93957346767600,93957346767656],["std::__1::numpunct<char>::do_falsename() const",93957346767984,93957346768009],["std::__1::__time_get_c_storage<wchar_t>::__weeks() const",93957346769072,93957346769174],["std::__1::__time_get_c_storage<wchar_t>::__months() const",93957346771440,93957346771542],["std::__1::__time_get_c_storage<wchar_t>::__am_pm() const",93957346773248,93957346773350],["std::__1::__time_get_c_storage<wchar_t>::__x() const",93957346773744,93957346773872],["std::__1::__time_get_c_storage<wchar_t>::__X() const",93957346774000,93957346774128],["std::__1::__time_get_c_storage<wchar_t>::__c() const",93957346774256,93957346774384],["std::__1::__time_get_c_storage<wchar_t>::__r() const",93957346774512,93957346774640],["std::__1::time_put<char, std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > >::~time_put()",93957346774768,93957346774886],["__cxx_global_array_dtor",93957346775008,93957346775534],["__cxx_global_array_dtor.89",93957346776064,93957346776127],["__cxx_global_array_dtor.137",93957346776192,93957346776250],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::replace(unsigned long, unsigned long, char const*)",93957346783184,93957346783243],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__grow_by(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long)",93957346783280,93957346783536],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::insert(unsigned long, char const*, unsigned long)",93957346783664,93957346784187],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__assign_external(char const*)",93957346784528,93957346784567],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::append(char const*)",93957346787856,93957346787895],["__cxa_allocate_exception",93957346792384,93957346792459],["std::bad_cast::what() const",93957346801664,93957346801677],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::InitListExpr, decltype(nullptr), (anonymous namespace)::itanium_demangle::NodeArray>(decltype(nullptr)&&, (anonymous namespace)::itanium_demangle::NodeArray&&)",93957346839536,93957346839683],["(anonymous namespace)::itanium_demangle::QualType::hasArraySlow((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346872512,93957346872544],["v8::base::RandomNumberGenerator::NextInt64()",93957346905472,93957346905527],["icu_68::LocaleCacheKey<icu_68::SharedCalendar>::createObject(void const*, UErrorCode&) const",93957346948384,93957346948506],["icu_68::CurrencyUnit::getDynamicClassID() const",93957347023824,93957347023837],["icu_68::DateIntervalFormat::getTimeZone() const",93957347133680,93957347133757],["icu_68::HebrewCalendar::isLeapYear(int)",93957347209024,93957347209088],["icu_68::number::LocalizedNumberFormatter::formatDouble(double, UErrorCode&) const",93957347297808,93957347298113],["icu_68::number::Precision::integer()",93957347375952,93957347375995],["icu_68::numparse::impl::CombinedCurrencyMatcher::~CombinedCurrencyMatcher()",93957347459376,93957347459404],["icu_68::NFRule::doParse(icu_68::UnicodeString const&, icu_68::ParsePosition&, signed char, double, unsigned int, icu_68::Formattable&) const",93957347527360,93957347529151],["icu_68::RuleBasedTimeZone::~RuleBasedTimeZone()",93957347638944,93957347639058],["icu_68::AppendableWrapper::formatAndAppend(icu_68::Format const*, icu_68::Formattable const&, icu_68::UnicodeString const&, UErrorCode&)",93957347764192,93957347764515],["icu_68::TextTrieMap::search(icu_68::CharacterNode*, icu_68::UnicodeString const&, int, int, icu_68::TextTrieMapSearchResultHandler*, UErrorCode&) const",93957347843424,93957347844050],["icu_68::BreakIterator::createInstance(icu_68::Locale const&, int, UErrorCode&)",93957347922240,93957347922715],["icu_68::Locale::createFromName(char const*)",93957348000880,93957348001128],["icu_68::RuleBasedBreakIterator::current() const",93957348090944,93957348090956],["icu_68::SharedObject::removeRef() const",93957348135632,93957348135676],["icu_68::UCharCharacterIterator::first()",93957348171664,93957348171694],["utf8IteratorMove(UCharIterator*, int, UCharIteratorOrigin)",93957348209120,93957348210231],["icu_68::UnicodeSet::hasStrings() const",93957348277088,93957348277114],["icu_68::UnicodeSetStringSpan::spanUTF8(unsigned char const*, int, USetSpanCondition) const",93957348326752,93957348328219],["getVo(IntProperty const&, int, UProperty)",93957348351264,93957348351322],["icu_68::UnicodeSetIterator::getString()",93957348379312,93957348379475],["u_terminateChars_68",93957348395952,93957348396013],["getDataBlock(UNewTrie2*, int, signed char)",93957348421568,93957348422195],["icu_68::UVector64::~UVector64()",93957348431248,93957348431306],["Cr_z__tr_stored_block",93957348451888,93957348452208],["zlib_internal::CompressHelper(zlib_internal::WrapperType, unsigned char*, unsigned long*, unsigned char const*, unsigned long, int, void* (*)(unsigned long), void (*)(void*))::$_0::__invoke(void*, unsigned int, unsigned int)",93957348461568,93957348461584],["key_secretkey_is_set",139871564489232,139871564489353],["key_setnet",139871564490272,139871564490376],["host2netname",139871564490816,139871564491177],["netname2user",139871564491232,139871564491542],["__fmodf_finite",139871565496224,139871565496691],["__sinhf_finite",139871565509296,139871565509737],["erff",139871565513920,139871565515187],["logbf",139871565518304,139871565518399],["tanf",139871565519312,139871565519679],["__fpclassifyf",139871565519968,139871565520034],["roundf",139871565520912,139871565521021],["lroundf",139871565521488,139871565521631],["v8::Shell::TestVerifySourcePositions(v8::FunctionCallbackInfo<v8::Value> const&)",93957335251296,93957335253550],["v8::Shell::Print(v8::FunctionCallbackInfo<v8::Value> const&)",93957335254496,93957335254550],["v8::Shell::Read(v8::FunctionCallbackInfo<v8::Value> const&)",93957335254656,93957335254954],["v8::Shell::ReadFromStdin(v8::Isolate*)",93957335255264,93957335255623],["v8::internal::StatisticsExtension::GetCounters(v8::FunctionCallbackInfo<v8::Value> const&)",93957336719072,93957336722950],["v8::internal::(anonymous namespace)::Flag::CheckFlagChange(v8::internal::(anonymous namespace)::Flag::SetBy, bool, char const*)",93957336752672,93957336753084],["v8::internal::GlobalHandles::GlobalHandles(v8::internal::Isolate*)",93957336753424,93957336753635],["v8::internal::GlobalHandles::MoveGlobal(unsigned long**, unsigned long**)",93957336754784,93957336754808],["v8::internal::GlobalHandles::NodeSpace<v8::internal::GlobalHandles::TracedNode>::Release(v8::internal::GlobalHandles::TracedNode*)",93957336755104,93957336755357],["v8::internal::GlobalHandles::MakeWeak(unsigned long**)",93957336755456,93957336755525],["v8_inspector::AsyncStackTrace::setSuspendedTaskId(void*)",93957336755568,93957336755578],["v8::internal::GlobalHandles::IterateWeakRootsForPhantomHandles(bool (*)(v8::internal::Heap*, v8::internal::FullObjectSlot))",93957336755712,93957336756295],["v8::internal::NoFreeList::GuaranteedAllocatable(unsigned long)",93957337079664,93957337079682],["v8::internal::LocalHeap::Current()",93957337080128,93957337080153],["v8::internal::LocalHeap::AttachPersistentHandles(std::__1::unique_ptr<v8::internal::PersistentHandles, std::__1::default_delete<v8::internal::PersistentHandles> >)",93957337080928,93957337080976],["v8::internal::LocalHeap::Unpark()",93957337081152,93957337081653],["v8::internal::LocalHeap::MakeLinearAllocationAreaIterable()",93957337082112,93957337082126],["v8::internal::LocalHeap::UnmarkLinearAllocationArea()",93957337082144,93957337082158],["v8::internal::LocalHeap::AddGCEpilogueCallback(void (*)(void*), void*)",93957337083888,93957337083954],["v8::internal::LocalHeap::InvokeGCEpilogueCallbacksInSafepoint()",93957337084048,93957337084100],["unsigned long v8::internal::MarkCompactCollector::ProcessMarkingWorklist<(v8::internal::MarkCompactCollector::MarkingWorklistProcessingMode)1>(unsigned long)",93957337116880,93957337149863],["v8::internal::MarkCompactCollector::~MarkCompactCollector()",93957337150336,93957337150806],["v8::internal::MarkCompactCollector::~MarkCompactCollector()",93957337151040,93957337151068],["v8::internal::MarkCompactCollector::AbortWeakObjects()",93957337151248,93957337153021],["v8::internal::V8HeapExplorer::ExtractSharedFunctionInfoReferences(v8::internal::HeapEntry*, v8::internal::SharedFunctionInfo)",93957339640368,93957339640741],["v8::internal::V8HeapExplorer::SetWeakReference(v8::internal::HeapEntry*, char const*, v8::internal::Object, int)",93957339648800,93957339649361],["v8::internal::EmbedderGraphEntriesAllocator::AllocateEntry(void*)",93957339654768,93957339655239],["v8::internal::HeapSnapshotGenerator::ProgressReport(bool)",93957339658224,93957339658300],["v8::internal::HeapSnapshotJSONSerializer::SerializeTraceNodeInfos()",93957339662016,93957339663751],["v8::internal::OutputStreamWriter::Finalize()",93957339665200,93957339665273],["v8::internal::HeapSnapshotJSONSerializer::SerializeString(unsigned char const*)",93957339668384,93957339669852],["v8::internal::HeapSnapshotGenerator::~HeapSnapshotGenerator()",93957339670992,93957339671113],["v8::internal::RootsReferencesExtractor::VisitRootPointers(v8::internal::Root, char const*, v8::internal::FullObjectSlot, v8::internal::FullObjectSlot)",93957339672144,93957339672235],["v8::internal::RootsReferencesExtractor::VisitRootPointers(v8::internal::Root, char const*, v8::internal::OffHeapCompressedObjectSlot, v8::internal::OffHeapCompressedObjectSlot)",93957339672368,93957339672499],["v8::internal::IndexedReferencesExtractor::VisitPointers(v8::internal::HeapObject, v8::internal::CompressedMaybeObjectSlot, v8::internal::CompressedMaybeObjectSlot)",93957339672528,93957339672827],["v8::internal::IndexedReferencesExtractor::VisitEmbeddedPointer(v8::internal::Code, v8::internal::RelocInfo*)",93957339672960,93957339673065],["v8::internal::GlobalObjectsEnumerator::VisitRootPointers(v8::internal::Root, char const*, v8::internal::FullObjectSlot, v8::internal::FullObjectSlot)",93957339673136,93957339673146],["void v8::internal::GlobalObjectsEnumerator::VisitRootPointersImpl<v8::internal::FullObjectSlot>(v8::internal::Root, char const*, v8::internal::FullObjectSlot, v8::internal::FullObjectSlot)",93957339673168,93957339673443],["v8::internal::EmbedderGraphImpl::V8Node(v8::Local<v8::Value> const&)",93957339673744,93957339673895],["v8::internal::EmbedderGraphImpl::AddEdge(v8::EmbedderGraph::Node*, v8::EmbedderGraph::Node*, char const*)",93957339674016,93957339674094],["v8_inspector::V8ConsoleMessage::~V8ConsoleMessage()",93957342410608,93957342410898],["v8_inspector::V8ConsoleMessageStorage::V8ConsoleMessageStorage(v8_inspector::V8InspectorImpl*, int)",93957342422352,93957342422398],["v8_inspector::V8ConsoleMessageStorage::countReset(int, v8_inspector::String16 const&)",93957342424880,93957342425456],["v8_inspector::V8ConsoleMessageStorage::contextDestroyed(int)",93957342427264,93957342427550],["v8_inspector::(anonymous namespace)::V8ValueStringBuilder::append(v8::Local<v8::BigInt>)",93957342428432,93957342428612],["v8_inspector::(anonymous namespace)::V8ValueStringBuilder::append(v8::Local<v8::Array>)",93957342428752,93957342429201],["void std::__1::vector<std::__1::unique_ptr<v8::Global<v8::Value>, std::__1::default_delete<v8::Global<v8::Value> > >, std::__1::allocator<std::__1::unique_ptr<v8::Global<v8::Value>, std::__1::default_delete<v8::Global<v8::Value> > > > >::__push_back_slow_path<std::__1::unique_ptr<v8::Global<v8::Value>, std::__1::default_delete<v8::Global<v8::Value> > > >(std::__1::unique_ptr<v8::Global<v8::Value>, std::__1::default_delete<v8::Global<v8::Value> > >&&)",93957342429520,93957342430296],["void std::__1::__function::__policy_invoker<void (v8_inspector::V8InspectorSessionImpl*)>::__call_impl<std::__1::__function::__default_alloc_func<v8_inspector::V8ConsoleMessageStorage::addMessage(std::__1::unique_ptr<v8_inspector::V8ConsoleMessage, std::__1::default_delete<v8_inspector::V8ConsoleMessage> >)::$_0, void (v8_inspector::V8InspectorSessionImpl*)> >(std::__1::__function::__policy_storage const*, v8_inspector::V8InspectorSessionImpl*)",93957342430400,93957342430455],["v8::internal::compiler::JSNativeContextSpecialization::ReduceJSPromiseResolve(v8::internal::compiler::Node*)",93957344192304,93957344193449],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::CallParameters const&)",93957344261168,93957344261491],["v8::internal::compiler::JSOperatorBuilder::RejectPromise()",93957344262608,93957344262622],["v8::internal::compiler::JSOperatorBuilder::BitwiseXor(v8::internal::compiler::FeedbackSource const&)",93957344264624,93957344264799],["v8::internal::compiler::JSOperatorBuilder::StoreDataPropertyInLiteral(v8::internal::compiler::FeedbackSource const&)",93957344266752,93957344266930],["v8::internal::compiler::JSOperatorBuilder::CallWasm(v8::internal::wasm::WasmModule const*, v8::internal::Signature<v8::internal::wasm::ValueType> const*, v8::internal::compiler::FeedbackSource const&)",93957344268368,93957344268574],["v8::internal::compiler::JSOperatorBuilder::GetIterator(v8::internal::compiler::FeedbackSource const&, v8::internal::compiler::FeedbackSource const&)",93957344269952,93957344270150],["v8::internal::compiler::JSOperatorBuilder::StoreNamedOwn(v8::internal::Handle<v8::internal::Name>, v8::internal::compiler::FeedbackSource const&)",93957344271456,93957344271642],["v8::internal::compiler::JSOperatorBuilder::LoadContext(unsigned long, unsigned long, bool)",93957344272432,93957344272585],["v8::internal::compiler::JSOperatorBuilder::StoreModule(int)",93957344272992,93957344273117],["v8::internal::compiler::JSOperatorBuilder::CreateAsyncFunctionObject(int)",93957344273520,93957344273645],["v8::internal::compiler::JSOperatorBuilder::CreateLiteralArray(v8::internal::Handle<v8::internal::ArrayBoilerplateDescription>, v8::internal::compiler::FeedbackSource const&, int, int)",93957344274192,93957344274403],["v8::internal::compiler::JSOperatorBuilder::GetTemplateObject(v8::internal::Handle<v8::internal::TemplateObjectDescription>, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::compiler::FeedbackSource const&)",93957344274944,93957344275144],["v8::internal::compiler::JSOperatorBuilder::CreateLiteralRegExp(v8::internal::Handle<v8::internal::String>, v8::internal::compiler::FeedbackSource const&, int)",93957344275584,93957344275791],["v8::internal::compiler::JSOperatorBuilder::CreateBlockContext(v8::internal::Handle<v8::internal::ScopeInfo> const&)",93957344276224,93957344276346],["v8::internal::compiler::Operator1<v8::internal::compiler::CheckParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CheckParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CheckParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344278752,93957344278822],["v8::internal::compiler::Operator1<v8::internal::compiler::CallParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CallParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CallParameters> >::HashCode() const",93957344279008,93957344279116],["v8::internal::compiler::Operator1<v8::internal::compiler::CallRuntimeParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CallRuntimeParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CallRuntimeParameters> >::HashCode() const",93957344279200,93957344279252],["v8::internal::compiler::Operator1<v8::internal::compiler::JSWasmCallParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::JSWasmCallParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::JSWasmCallParameters> >::Equals(v8::internal::compiler::Operator const*) const",93957344279376,93957344279428],["v8::internal::compiler::Operator1<v8::internal::compiler::JSWasmCallParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::JSWasmCallParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::JSWasmCallParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344279584,93957344279716],["v8::internal::compiler::Operator1<v8::internal::compiler::ConstructParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::ConstructParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::ConstructParameters> >::HashCode() const",93957344279840,93957344279961],["v8::internal::compiler::Operator1<v8::internal::compiler::NamedAccess, v8::internal::compiler::OpEqualTo<v8::internal::compiler::NamedAccess>, v8::internal::compiler::OpHash<v8::internal::compiler::NamedAccess> >::Equals(v8::internal::compiler::Operator const*) const",93957344280112,93957344280172],["v8::internal::compiler::Operator1<v8::internal::compiler::NamedAccess, v8::internal::compiler::OpEqualTo<v8::internal::compiler::NamedAccess>, v8::internal::compiler::OpHash<v8::internal::compiler::NamedAccess> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344280304,93957344280441],["v8::internal::compiler::Operator1<v8::internal::compiler::PropertyAccess, v8::internal::compiler::OpEqualTo<v8::internal::compiler::PropertyAccess>, v8::internal::compiler::OpHash<v8::internal::compiler::PropertyAccess> >::HashCode() const",93957344280512,93957344280600],["v8::internal::compiler::Operator1<v8::internal::compiler::GetIteratorParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::GetIteratorParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::GetIteratorParameters> >::Equals(v8::internal::compiler::Operator const*) const",93957344280736,93957344280806],["v8::internal::compiler::Operator1<v8::internal::compiler::GetIteratorParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::GetIteratorParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::GetIteratorParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344280944,93957344281046],["v8::internal::compiler::Operator1<v8::internal::compiler::ForInParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::ForInParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::ForInParameters> >::HashCode() const",93957344281120,93957344281231],["v8::internal::compiler::Operator1<v8::internal::compiler::StoreNamedOwnParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::StoreNamedOwnParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::StoreNamedOwnParameters> >::Equals(v8::internal::compiler::Operator const*) const",93957344281312,93957344281354],["v8::internal::compiler::Operator1<v8::internal::compiler::LoadGlobalParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::LoadGlobalParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::LoadGlobalParameters> >::Equals(v8::internal::compiler::Operator const*) const",93957344281472,93957344281544],["v8::internal::compiler::Operator1<v8::internal::compiler::LoadGlobalParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::LoadGlobalParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::LoadGlobalParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344281632,93957344281745],["v8::internal::compiler::Operator1<v8::internal::compiler::StoreGlobalParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::StoreGlobalParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::StoreGlobalParameters> >::HashCode() const",93957344281824,93957344281947],["v8::internal::compiler::Operator1<v8::internal::compiler::ContextAccess, v8::internal::compiler::OpEqualTo<v8::internal::compiler::ContextAccess>, v8::internal::compiler::OpHash<v8::internal::compiler::ContextAccess> >::Equals(v8::internal::compiler::Operator const*) const",93957344282096,93957344282150],["std::__1::messages<char>::do_get(long, int, int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const",93957346746048,93957346746385],["std::__1::ctype<wchar_t>::do_narrow(wchar_t, char) const",93957346758544,93957346758561],["std::__1::codecvt<char, char, __mbstate_t>::do_unshift(__mbstate_t&, char*, char*, char*&) const",93957346760864,93957346760878],["std::__1::codecvt<wchar_t, char, __mbstate_t>::do_max_length() const",93957346763376,93957346763435],["std::__1::utf8_to_utf16_length(unsigned char const*, unsigned char const*, unsigned long, unsigned long, std::__1::codecvt_mode)",93957346765072,93957346765652],["std::__1::utf8_to_ucs4(unsigned char const*, unsigned char const*, unsigned char const*&, unsigned int*, unsigned int*, unsigned int*&, unsigned long, std::__1::codecvt_mode)",93957346766240,93957346766830],["std::__1::numpunct<char>::~numpunct()",93957346767488,93957346767544],["std::__1::numpunct<char>::do_grouping() const",93957346767680,93957346767744],["std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >::basic_string<decltype(nullptr)>(wchar_t const*)",93957346767824,93957346767974],["std::__1::numpunct<wchar_t>::do_falsename() const",93957346768016,93957346768089],["std::__1::init_weeks()",93957346768208,93957346769067],["std::__1::init_wweeks()",93957346769184,93957346769946],["std::__1::init_months()",93957346770064,93957346771432],["std::__1::init_wmonths()",93957346771552,93957346772922],["std::__1::init_am_pm()",93957346773040,93957346773238],["std::__1::init_wam_pm()",93957346773360,93957346773609],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >& std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__assign_no_alias<true>(char const*, unsigned long)",93957346786192,93957346786360],["std::__1::to_string(int)",93957346789408,93957346789726],["std::__1::system_error::~system_error()",93957346791888,93957346791898],["__cxa_uncaught_exceptions",93957346793280,93957346793311],["__cxxabiv1::__vmi_class_type_info::has_unambiguous_public_base(__cxxabiv1::__dynamic_cast_info*, void*, int) const",93957346798416,93957346798717],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::SpecialName, char const (&) [12], (anonymous namespace)::itanium_demangle::Node*&>(char const (&) [12], (anonymous namespace)::itanium_demangle::Node*&)",93957346816432,93957346816593],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::EnclosingExpr, char const (&) [10], (anonymous namespace)::itanium_demangle::Node*&, char const (&) [2]>(char const (&) [10], (anonymous namespace)::itanium_demangle::Node*&, char const (&) [2])",93957346830336,93957346830538],["(anonymous namespace)::itanium_demangle::IntegerLiteral::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346843184,93957346843862],["(anonymous namespace)::itanium_demangle::parse_discriminator(char const*, char const*)",93957346862752,93957346862954],["v8::base::BoundedPageAllocator::DiscardSystemPages(void*, unsigned long)",93957346878400,93957346878418],["v8::base::SharedMutex::UnlockShared()",93957346900144,93957346900154],["v8::base::OS::isDirectorySeparator(char)",93957346911584,93957346911597],["v8::platform::DefaultForegroundTaskRunner::MoveExpiredDelayedTasks(v8::base::LockGuard<v8::base::Mutex, (v8::base::NullBehavior)0> const&)",93957346927104,93957346927505],["icu_68::Calendar::getActualMinimum(UCalendarDateFields, UErrorCode&) const",93957346972000,93957346972591],["icu_68::CollationTailoring::ensureOwnedData(UErrorCode&)",93957346999920,93957347000098],["icu_68::DecimalFormat::setMultiplierScale(int)",93957347033248,93957347033304],["icu_68::DateFormatSymbols::DateFormatSymbols(UErrorCode&)",93957347093296,93957347093414],["icu_68::PtnSkeleton::getSkeleton() const",93957347164032,93957347164293],["icu_68::FormattedStringBuilder::contentEquals(icu_68::FormattedStringBuilder const&) const",93957347200096,93957347200300],["icu_68::FormattedList::~FormattedList()",93957347221120,93957347221176],["icu_68::double_conversion::Bignum::AssignBignum(icu_68::double_conversion::Bignum const&)",93957347255856,93957347255914],["icu_68::number::IntegerWidth::operator==(icu_68::number::IntegerWidth const&) const",93957347324048,93957347324077],["icu_68::number::impl::MutablePatternModifier::MutablePatternModifier(bool)",93957347354400,93957347354551],["icu_68::number::impl::GeneratorHelpers::integerWidth(icu_68::number::impl::MacroProps const&, icu_68::UnicodeString&, UErrorCode&)",93957347397984,93957347398269],["icu_68::LocaleCacheKey<icu_68::SharedNumberFormat>::~LocaleCacheKey()",93957347431728,93957347431778],["icu_68::OlsonTimeZone::OlsonTimeZone(UResourceBundle const*, UResourceBundle const*, icu_68::UnicodeString const&, UErrorCode&)",93957347465616,93957347467345],["icu_68::RuleBasedNumberFormat::getNumberOfRuleSetDisplayNameLocales() const",93957347503792,93957347503819],["icu_68::ModulusSubstitution::calcUpperBound(double) const",93957347548832,93957347548844],["icu_68::DataBuilderCollationIterator::previousCodePoint(UErrorCode&)",93957347611136,93957347611207],["icu_68::RelativeDateFormat::format(icu_68::Calendar&, icu_68::UnicodeString&, icu_68::FieldPosition&) const",93957347665984,93957347667490],["icu_68::createFastFormatter(icu_68::DecimalFormat const*, int, int, UErrorCode&)",93957347729952,93957347730221],["icu_68::StringSegment::StringSegment(icu_68::UnicodeString const&, bool)",93957347785552,93957347785591],["icu_68::TZGNCore::~TZGNCore()",93957347829168,93957347829196],["icu_68::TimeZoneRule::operator==(icu_68::TimeZoneRule const&) const",93957347860544,93957347860720],["icu_68::UTF16CollationIterator::handleNextCE32(int&, UErrorCode&)",93957347900736,93957347900819],["icu_68::CanonicalIterator::extract(icu_68::Hashtable*, int, char16_t const*, int, int, UErrorCode&)",93957347937536,93957347938715],["_getStringOrCopyKey(char const*, char const*, char const*, char const*, char const*, char const*, char16_t*, int, UErrorCode*)",93957347968896,93957347969263],["icu_68::MessagePattern::clear()",93957348031840,93957348031890],["icu_68::PatternProps::trimWhiteSpace(char16_t const*, int&)",93957348080928,93957348081283],["icu_68::RuleBasedBreakIterator::BreakCache::seek(int)",93957348116864,93957348117021],["icu_68::LocaleKey::prefix(icu_68::UnicodeString&) const",93957348132416,93957348132658],["icu_68::StringTrieBuilder::IntermediateValueNode::write(icu_68::StringTrieBuilder&)",93957348147440,93957348147490],["icu_68::UCharsTrieBuilder::getLimitOfLinearMatch(int, int, int) const",93957348165104,93957348165348],["ucptrie_internalSmallU8Index_68",93957348175008,93957348175187],["uhash_get_68",93957348202560,93957348202820],["uloc_openKeywords_68",93957348218928,93957348219957],["icu_68::(anonymous namespace)::MutableCodePointTrie::getDataBlock(int)",93957348269232,93957348269740],["icu_68::UnicodeSet::containsNone(int, int) const",93957348281856,93957348281954],["icu_68::(anonymous namespace)::mungeCharName(char*, char const*, int)",93957348307808,93957348307907],["icu_68::UnicodeString::UnicodeString(icu_68::UnicodeString const&, int)",93957348338624,93957348338757],["hasFullCompositionExclusion(BinaryProperty const&, int, UProperty)",93957348349008,93957348349176],["ures_getLocaleInternal_68",93957348362528,93957348362568],["res_getTableItemByIndex_68",93957348376352,93957348376683],["_cmpFold(char16_t const*, int, char16_t const*, int, unsigned int, int*, int*, UErrorCode*)",93957348386784,93957348388829],["u_strstr_68",93957348392880,93957348392903],["utext_nativeLength_68",93957348402080,93957348402092],["utf8_nextCharSafeBody_68",93957348409216,93957348409797],["icu_68::UVector::assign(icu_68::UVector const&, void (*)(UElement*, UElement*), UErrorCode&)",93957348425408,93957348425644],["icu_68::UVector32::setSize(int)",93957348430176,93957348430471],["_cpu_check_features",93957348433152,93957348433228],["deflate_rle",93957348443424,93957348444813],["build_tree",93957348455952,93957348458321],["zlib_internal::UncompressHelper(zlib_internal::WrapperType, unsigned char*, unsigned long*, unsigned char const*, unsigned long)",93957348461344,93957348461568],["zlib_internal::CompressHelper(zlib_internal::WrapperType, unsigned char*, unsigned long*, unsigned char const*, unsigned long, int, void* (*)(unsigned long), void (*)(void*))::$_1::__invoke(void*, void*)",93957348461584,93957348461598],["clntudp_bufcreate",139871564487952,139871564487978],["key_decryptsession",139871564489504,139871564489636],["key_gendes",139871564490032,139871564490258],["key_get_conv",139871564490384,139871564490500],["exp",139871565492448,139871565492548],["__j1f_finite",139871565500592,139871565501353],["__remainderf_finite",139871565508752,139871565509026],["__gammaf_r_finite",139871565510592,139871565511726],["cbrtf",139871565513520,139871565513838],["erfcf",139871565515200,139871565516484],["fabsf",139871565517456,139871565517464],["nextafterf",139871565518400,139871565518612],["v8::Shell::RealmEval(v8::FunctionCallbackInfo<v8::Value> const&)",93957335250080,93957335250587],["v8::Shell::AsyncHooksCreateHook(v8::FunctionCallbackInfo<v8::Value> const&)",93957335253792,93957335253854],["v8::WriteToFile(_IO_FILE*, v8::FunctionCallbackInfo<v8::Value> const&)",93957335254048,93957335254482],["v8::Shell::PrintErr(v8::FunctionCallbackInfo<v8::Value> const&)",93957335254560,93957335254614],["v8::internal::(anonymous namespace)::AsyncGC::~AsyncGC()",93957336718464,93957336718495],["v8::internal::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::(anonymous namespace)::Flag const&)",93957336723472,93957336723718],["v8::internal::FlagList::EnforceFlagImplications()",93957336729680,93957336752641],["v8::internal::GlobalHandles::CleanupOnStackReferencesBelowCurrentStackPosition()",93957336753296,93957336753310],["v8::internal::GlobalHandles::NotifyEmptyEmbedderStack()",93957336753376,93957336753418],["v8::internal::GlobalHandles::~GlobalHandles()",93957336753648,93957336754001],["v8::internal::GlobalHandles::Create(unsigned long)",93957336754768,93957336754778],["v8::internal::GlobalHandles::Destroy(unsigned long*)",93957336754816,93957336754833],["v8::internal::CodeLargeObjectSpace::~CodeLargeObjectSpace()",93957337079568,93957337079664],["v8::internal::NoFreeList::GetPageForSize(unsigned long)",93957337079696,93957337079714],["v8::internal::LocalFactory::AllocateRaw(int, v8::internal::AllocationType, v8::internal::AllocationAlignment)",93957337079744,93957337080117],["v8::internal::LocalHeap::LocalHeap(v8::internal::Heap*, v8::internal::ThreadKind, std::__1::unique_ptr<v8::internal::PersistentHandles, std::__1::default_delete<v8::internal::PersistentHandles> >)",93957337080160,93957337080523],["v8::internal::LocalHeap::EnsurePersistentHandles()",93957337080848,93957337080918],["v8::internal::LocalHeap::DetachPersistentHandles()",93957337080976,93957337080994],["v8::internal::LocalHeap::Park()",93957337081040,93957337081140],["v8::internal::LocalHeap::SafepointSlowPath()",93957337081664,93957337082088],["v8::internal::HeapObjectsMap::RemoveDeadEntries()",93957339629408,93957339630753],["v8::internal::V8HeapExplorer::ExtractFeedbackVectorReferences(v8::internal::HeapEntry*, v8::internal::FeedbackVector)",93957339641904,93957339641967],["v8::internal::V8HeapExplorer::TagObject(v8::internal::Object, char const*)",93957339647152,93957339647445],["v8::internal::V8HeapExplorer::IterateAndExtractReferences(v8::internal::HeapSnapshotGenerator*)",93957339650544,93957339651890],["v8::internal::V8HeapExplorer::CollectGlobalObjectsTags()",93957339654448,93957339654708],["v8::internal::NativeObjectsExplorer::EntryForEmbedderGraphNode(v8::EmbedderGraph::Node*)",93957339655744,93957339655946],["v8::internal::HeapSnapshotGenerator::GenerateSnapshot()",93957339657664,93957339658195],["v8::internal::HeapSnapshotJSONSerializer::SerializeImpl()",93957339658528,93957339660806],["v8::internal::HeapSnapshotJSONSerializer::SerializeSnapshot()",93957339661088,93957339662005],["v8::internal::HeapSnapshotJSONSerializer::SerializeSamples()",93957339663760,93957339664438],["v8::internal::HeapSnapshotJSONSerializer::SerializeStrings()",93957339664656,93957339665196],["v8::internal::HeapSnapshotJSONSerializer::SerializeEdge(v8::internal::HeapGraphEdge*, bool)",93957339665280,93957339665956],["v8::internal::HeapSnapshotJSONSerializer::SerializeTraceNode(v8::internal::AllocationTraceNode*)",93957339667408,93957339668377],["v8::internal::WriteUChar(v8::internal::OutputStreamWriter*, unsigned int)",93957339669856,93957339670171],["v8::internal::V8HeapExplorer::~V8HeapExplorer()",93957339670960,93957339670988],["v8::internal::HeapSnapshotGenerator::~HeapSnapshotGenerator()",93957339671120,93957339671246],["v8_inspector::(anonymous namespace)::StringBuffer16::string() const",93957342409792,93957342409837],["v8_inspector::V8ConsoleMessage::wrapArguments(v8_inspector::V8InspectorSessionImpl*, bool) const",93957342412480,93957342413774],["v8_inspector::V8ConsoleMessage::createForRevokedException(double, v8_inspector::String16 const&, unsigned int)",93957342421360,93957342422093],["v8_inspector::V8ConsoleMessageStorage::clear()",93957342422704,93957342422860],["v8_inspector::V8ConsoleMessageStorage::time(int, v8_inspector::String16 const&)",93957342424560,93957342424869],["v8_inspector::V8ConsoleMessageStorage::timeLog(int, v8_inspector::String16 const&)",93957342425456,93957342426008],["v8_inspector::V8ConsoleMessageStorage::hasTimer(int, v8_inspector::String16 const&)",93957342426736,93957342427258],["v8_inspector::(anonymous namespace)::V8ValueStringBuilder::append(v8::Local<v8::Value>, unsigned int)",93957342427552,93957342428305],["v8::internal::compiler::JSIntrinsicLowering::ReduceAsyncFunctionAwaitUncaught(v8::internal::compiler::Node*)",93957344176912,93957344177095],["v8::internal::compiler::JSNativeContextSpecialization::GetMaxStringLength(v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::Node*)",93957344203872,93957344204449],["v8::internal::compiler::JSNativeContextSpecialization::BuildPropertyStore(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::NameRef const&, v8::internal::ZoneVector<v8::internal::compiler::Node*>*, v8::internal::compiler::PropertyAccessInfo const&, v8::internal::compiler::AccessMode)",93957344251392,93957344254798],["v8::internal::compiler::JSOperatorBuilder::ObjectIsArray()",93957344262352,93957344262366],["v8::internal::compiler::JSOperatorBuilder::Debugger()",93957344262544,93957344262558],["v8::internal::compiler::JSOperatorBuilder::RegExpTest()",93957344262672,93957344262686],["v8::internal::compiler::JSOperatorBuilder::Divide(v8::internal::compiler::FeedbackSource const&)",93957344263920,93957344264095],["v8::internal::compiler::JSOperatorBuilder::ShiftRightLogical(v8::internal::compiler::FeedbackSource const&)",93957344265328,93957344265503],["v8::internal::compiler::JSOperatorBuilder::GreaterThanOrEqual(v8::internal::compiler::FeedbackSource const&)",93957344266400,93957344266575],["v8::internal::compiler::JSOperatorBuilder::CallForwardVarargs(unsigned long, unsigned int)",93957344267136,93957344267281],["v8::internal::compiler::JSOperatorBuilder::CallRuntime(v8::internal::Runtime::FunctionId)",93957344268048,93957344268201],["v8::internal::compiler::JSOperatorBuilder::Construct(unsigned int, v8::internal::compiler::CallFrequency const&, v8::internal::compiler::FeedbackSource const&)",93957344268720,93957344268914],["v8::internal::compiler::JSOperatorBuilder::LoadNamedFromSuper(v8::internal::Handle<v8::internal::Name>, v8::internal::compiler::FeedbackSource const&)",93957344269552,93957344269757],["v8::internal::compiler::JSOperatorBuilder::ForInNext(v8::internal::compiler::ForInMode, v8::internal::compiler::FeedbackSource const&)",93957344270352,93957344270553],["v8::internal::compiler::JSOperatorBuilder::StoreNamed(v8::internal::LanguageMode, v8::internal::Handle<v8::internal::Name>, v8::internal::compiler::FeedbackSource const&)",93957344271024,93957344271240],["v8::internal::compiler::JSOperatorBuilder::CreateGeneratorObject()",93957344271760,93957344271869],["v8::internal::compiler::JSOperatorBuilder::HasContextExtension(unsigned long)",93957344272304,93957344272426],["v8::internal::compiler::JSOperatorBuilder::StoreContext(unsigned long, unsigned long)",93957344272592,93957344272740],["v8::internal::compiler::JSOperatorBuilder::GetImportMeta()",93957344272880,93957344272983],["v8::internal::compiler::JSOperatorBuilder::CreateArguments(v8::internal::CreateArgumentsType)",93957344273120,93957344273245],["v8::internal::compiler::JSOperatorBuilder::CreateArrayIterator(v8::internal::IterationKind)",93957344273392,93957344273517],["v8::internal::compiler::JSOperatorBuilder::CreateCollectionIterator(v8::internal::CollectionKind, v8::internal::IterationKind)",93957344273648,93957344273826],["v8::internal::compiler::JSOperatorBuilder::CreateClosure(v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::Code>, v8::internal::AllocationType)",93957344273984,93957344274187],["v8::internal::compiler::JSOperatorBuilder::CreateEmptyLiteralArray(v8::internal::compiler::FeedbackSource const&)",93957344274416,93957344274594],["v8::internal::compiler::JSOperatorBuilder::CreateLiteralObject(v8::internal::Handle<v8::internal::ObjectBoilerplateDescription>, v8::internal::compiler::FeedbackSource const&, int, int)",93957344274720,93957344274931],["v8::internal::compiler::JSOperatorBuilder::CloneObject(v8::internal::compiler::FeedbackSource const&, int)",93957344275152,93957344275338],["v8::internal::compiler::JSOperatorBuilder::CreateEmptyLiteralObject()",93957344275472,93957344275575],["v8::internal::compiler::JSOperatorBuilder::CreateFunctionContext(v8::internal::Handle<v8::internal::ScopeInfo>, int, v8::internal::ScopeType)",93957344275792,93957344275955],["v8::internal::compiler::JSOperatorBuilder::CreateWithContext(v8::internal::Handle<v8::internal::ScopeInfo> const&)",93957344276096,93957344276221],["v8::internal::compiler::JSOperatorGlobalCache::JSOperatorGlobalCache()",93957344276352,93957344278627],["v8::internal::compiler::Operator1<v8::internal::compiler::CheckParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CheckParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CheckParameters> >::HashCode() const",93957344278672,93957344278745],["v8::internal::compiler::Operator1<v8::internal::compiler::CallForwardVarargsParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::CallForwardVarargsParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::CallForwardVarargsParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957344278832,93957344278947],["std::__1::__throw_runtime_error(char const*)",93957346727104,93957346727179],["std::__1::locale::locale()",93957346756448,93957346756565],["std::__1::ctype<wchar_t>::do_toupper(wchar_t*, wchar_t const*) const",93957346757792,93957346757945],["std::__1::ctype<char>::do_toupper(char) const",93957346759344,93957346759448],["std::__1::ctype<char>::do_narrow(char const*, char const*, char, char*) const",93957346760304,93957346760831],["std::__1::codecvt<wchar_t, char, __mbstate_t>::~codecvt()",93957346760912,93957346761040],["std::__1::codecvt<wchar_t, char, __mbstate_t>::do_encoding() const",93957346762976,93957346763106],["std::__1::utf16_to_utf8(unsigned short const*, unsigned short const*, unsigned short const*&, unsigned char*, unsigned char*, unsigned char*&, unsigned long, std::__1::codecvt_mode)",93957346763536,93957346764189],["std::__1::codecvt<char16_t, char, __mbstate_t>::do_length(__mbstate_t&, char const*, char const*, unsigned long) const",93957346765040,93957346765067],["std::__1::codecvt<char32_t, char, __mbstate_t>::do_out(__mbstate_t&, char32_t const*, char32_t const*, char32_t const*&, char*, char*, char*&) const",93957346765664,93957346765753],["std::__1::codecvt<char32_t, char, __mbstate_t>::do_in(__mbstate_t&, char const*, char const*, char const*&, char32_t*, char32_t*, char32_t*&) const",93957346766144,93957346766233],["std::__1::codecvt<char32_t, char, __mbstate_t>::do_length(__mbstate_t&, char const*, char const*, unsigned long) const",93957346766832,93957346766859],["std::__1::numpunct_byname<char>::~numpunct_byname()",93957346767440,93957346767488],["std::__1::numpunct_byname<wchar_t>::~numpunct_byname()",93957346767552,93957346767600],["std::__1::numpunct<char>::do_decimal_point() const",93957346767664,93957346767673],["std::__1::numpunct<char>::do_truename() const",93957346767744,93957346767767],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_string(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned long, unsigned long, std::__1::allocator<char> const&)",93957346785552,93957346785731],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::assign(unsigned long, char)",93957346787120,93957346787448],["std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >::__assign_external(wchar_t const*, unsigned long)",93957346788624,93957346788790],["std::out_of_range::out_of_range(char const*)",93957346790592,93957346790627],["std::__1::__system_error_category::message(int) const",93957346791152,93957346791242],["std::__1::__vector_base_common<true>::__throw_out_of_range() const",93957346792096,93957346792112],["__cxxabiv1::failed_throw(__cxxabiv1::__cxa_exception*)",93957346792720,93957346792747],["__cxxabiv1::(anonymous namespace)::destruct_(void*)",93957346793568,93957346793610],["__cxxabiv1::exception_spec_can_catch(long, unsigned char const*, unsigned char, __cxxabiv1::__shim_type_info const*, void*, _Unwind_Exception*)",93957346796880,93957346797148],["std::bad_exception::what() const",93957346801312,93957346801325],["(anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::parseEncoding()",93957346804064,93957346806542],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::SpecialName, char const (&) [18], (anonymous namespace)::itanium_demangle::Node*&>(char const (&) [18], (anonymous namespace)::itanium_demangle::Node*&)",93957346818128,93957346818289],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::NameType, char const (&) [10]>(char const (&) [10])",93957346825136,93957346825291],["(anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::parseConversionExpr()",93957346835280,93957346836076],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::SizeofParamPackExpr, (anonymous namespace)::itanium_demangle::Node*&>((anonymous namespace)::itanium_demangle::Node*&)",93957346841856,93957346841993],["(anonymous namespace)::itanium_demangle::ParameterPackExpansion::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346848592,93957346849019],["(anonymous namespace)::itanium_demangle::BracedRangeExpr::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346858080,93957346858533],["(anonymous namespace)::itanium_demangle::DotSuffix::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346865840,93957346866155],["(anonymous namespace)::itanium_demangle::ReferenceType::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346876048,93957346876536],["v8::base::ieee754::asin(double)",93957346882448,93957346883143],["v8::base::SharedMemory::~SharedMemory()",93957346899440,93957346899491],["v8::base::RegionAllocator::FreeListAddRegion(v8::base::RegionAllocator::Region*)",93957346901920,93957346902133],["v8::base::OS::Sleep(v8::base::TimeDelta)",93957346910336,93957346910370],["v8::base::Thread::CreateThreadLocalKey()",93957346913088,93957346913116],["v8::platform::DefaultJobState::~DefaultJobState()",93957346921632,93957346921720],["v8::platform::tracing::TraceBufferRingBuffer::~TraceBufferRingBuffer()",93957346937696,93957346937846],["icu_68::Calendar::complete(UErrorCode&)",93957346956320,93957346956433],["icu_68::DangiCalendar::~DangiCalendar()",93957346984224,93957346984252],["icu_68::Collator::compare(char16_t const*, int, char16_t const*, int) const",93957346996016,93957346996047],["icu_68::Collation::getThreeBytePrimaryForOffsetData(int, long)",93957347008512,93957347008752],["icu_68::DateFormat::getCalendar() const",93957347028160,93957347028173],["icu_68::DecimalFormat::getDecimalFormatSymbols() const",93957347042416,93957347042445],["icu_68::CurrencyPluralInfo::copyHash(icu_68::Hashtable const*, icu_68::Hashtable*, UErrorCode&)",93957347050752,93957347051081],["icu_68::UnicodeString::setTo(icu_68::UnicodeString const&, int, int)",93957347123216,93957347123288],["icu_68::DateIntervalInfo::DateIntervalSink::~DateIntervalSink()",93957347148656,93957347148698],["icu_68::FormatParser::setTokens(icu_68::UnicodeString const&, int, int*)",93957347181520,93957347181708],["icu_68::FormattedValueStringBuilderImpl::FormattedValueStringBuilderImpl(icu_68::FormattedStringBuilder::Field)",93957347193152,93957347193227],["icu_68::GregorianCalendar::handleComputeFields(int, UErrorCode&)",93957347203248,93957347203711],["icu_68::IslamicCalendar::monthStart(int, int) const",93957347214624,93957347214959],["icu_68::ListFormatter::ListPatternsSink::setAliasedStyle(icu_68::UnicodeString)",93957347230320,93957347230524],["icu_68::number::impl::DecimalQuantity::hasIntegerValue() const",93957347243920,93957347243933],["icu_68::number::impl::DecimalFormatProperties::DecimalFormatProperties()",93957347285952,93957347286179],["icu_68::MeasureUnitImpl::forMeasureUnitMaybeCopy(icu_68::MeasureUnit const&, UErrorCode&)",93957347312768,93957347313087],["icu_68::number::impl::PropertiesAffixPatternProvider::setTo(icu_68::number::impl::DecimalFormatProperties const&, UErrorCode&)",93957347341872,93957347342834],["(anonymous namespace)::cleanupDefaultCurrencySpacing()",93957347351456,93957347351557],["icu_68::number::impl::PatternParser::parseToExistingPropertiesImpl(icu_68::UnicodeString const&, icu_68::number::impl::DecimalFormatProperties&, icu_68::number::impl::IgnoreRounding, UErrorCode&)",93957347359488,93957347360048],["non-virtual thunk to icu_68::number::impl::ScientificHandler::~ScientificHandler()",93957347379584,93957347379613],["icu_68::number::impl::UsagePrefsHandler::~UsagePrefsHandler()",93957347404096,93957347404120],["icu_68::NumberFormat::createInstance(UErrorCode&)",93957347426656,93957347426752],["icu_68::numparse::impl::ArraySeriesMatcher::end() const",93957347447360,93957347447378],["icu_68::numparse::impl::PercentMatcher::accept(icu_68::StringSegment&, icu_68::numparse::impl::ParsedNumber&) const",93957347462432,93957347462449],["icu_68::DateTimeRule::DateTimeRule(int, int, int, signed char, int, icu_68::DateTimeRule::TimeRuleType)",93957347480160,93957347480218],["icu_68::FixedDecimal::~FixedDecimal()",93957347495552,93957347495592],["icu_68::RuleBasedNumberFormat::setRoundingMode(icu_68::NumberFormat::ERoundingMode)",93957347513680,93957347513692],["icu_68::NFSubstitution::getDynamicClassID() const",93957347542192,93957347542205],["icu_68::CollationIterator::handleNextCE32(int&, UErrorCode&)",93957347552384,93957347552560],["icu_68::compareRanges(void const*, void const*, void const*)",93957347592944,93957347592969],["icu_68::CollationDataBuilder::getCEs(icu_68::UnicodeString const&, long*, int)",93957347625040,93957347625058],["icu_68::FormatNameEnumeration::count(UErrorCode&) const",93957347653552,93957347653574],["icu_68::RuleBasedCollator::setVariableTop(char16_t const*, int, UErrorCode&)",93957347673360,93957347674172],["icu_68::SimpleTimeZone::getRawOffset() const",93957347709232,93957347709241],["icu_68::SimpleDateFormat::setContext(UDisplayContext, UErrorCode&)",93957347751248,93957347751371],["icu_68::number::impl::LocalizedNumberFormatterAsFormat::operator==(icu_68::Format const&) const",93957347774672,93957347774975],["icu_68::TimeZone::operator==(icu_68::TimeZone const&) const",93957347788576,93957347788701],["icu_68::TimeZoneFormat::parse(UTimeZoneFormatStyle, icu_68::UnicodeString const&, icu_68::ParsePosition&, int, UTimeZoneFormatTimeType*) const",93957347810304,93957347815238],["icu_68::TimeZoneNamesDelegate::getMetaZoneID(icu_68::UnicodeString const&, double, icu_68::UnicodeString&) const",93957347839472,93957347839493],["icu_68::TimeZoneNamesImpl::doFind(icu_68::ZNameSearchHandler&, icu_68::UnicodeString const&, int, UErrorCode&) const",93957347850256,93957347850482],["icu_68::TimeArrayTimeZoneRule::getNextStart(double, int, int, signed char, double&) const",93957347864336,93957347864465],["icu_68::units::UnitConverter* icu_68::MemoryPool<icu_68::units::UnitConverter, 8>::create<icu_68::MeasureUnitImpl const&, icu_68::MeasureUnitImpl&, icu_68::units::ConversionRates const&, UErrorCode&>(icu_68::MeasureUnitImpl const&, icu_68::MeasureUnitImpl&, icu_68::units::ConversionRates const&, UErrorCode&)",93957347881536,93957347881786],["icu_68::FCDUTF8CollationIterator::handleNextCE32(int&, UErrorCode&)",93957347906736,93957347907913],["icu_68::compareElementStrings(void const*, void const*, void const*)",93957347927408,93957347927564],["icu_68::Edits::growArray()",93957347943232,93957347943401],["icu_68::LocaleBuilder::clearExtensions()",93957347954864,93957347954906],["icu_68::LocaleDisplayNamesImpl::variantDisplayName(char const*, icu_68::UnicodeString&) const",93957347983648,93957347983660],["createTagStringWithAlternates(char const*, int, char const*, int, char const*, int, char const*, int, char const*, icu_68::ByteSink&, UErrorCode*)",93957348017584,93957348018445],["icu_68::Normalizer2Factory::getFCDInstance(UErrorCode&)",93957348044752,93957348044888],["icu_68::Normalizer2Impl::getDecomposition(int, char16_t*, int&) const",93957348058560,93957348059137],["searchForTZFile(char const*, DefaultTZInfo*)",93957348084624,93957348086059],["icu_68::LaoBreakEngine::LaoBreakEngine(icu_68::DictionaryMatcher*, UErrorCode&)",93957348103072,93957348103663],["icu_68::ICUServiceKey::parseSuffix(icu_68::UnicodeString&)",93957348122976,93957348123086],["icu_68::ServiceEnumeration::getDynamicClassID() const",93957348130528,93957348130541],["icu_68::ICUResourceBundleFactory::~ICUResourceBundleFactory()",93957348134352,93957348134394],["icu_68::StringPiece::StringPiece(icu_68::StringPiece const&, int, int)",93957348142608,93957348142661],["ucase_addStringCaseClosure_68",93957348151808,93957348152165],["uscript_hasScript_68",93957348162144,93957348162392],["icu_68::UCharsTrie::next(int)",93957348168032,93957348168213],["icu_68::UCharCharacterIterator::next32PostInc()",93957348172880,93957348172975],["currency_cleanup()",93957348186816,93957348187238],["udata_getLength_68",93957348198864,93957348198918],["uhash_equals_68",93957348205968,93957348206511],["ulist_count_keyword_values_68",93957348212384,93957348212414],["uloc_toLegacyKey_68",93957348225504,93957348225604],["ulocimp_toLanguageTag_68",93957348236160,93957348243906],["icu_68::UnifiedCache::_poll(icu_68::CacheKeyBase const&, icu_68::SharedObject const*&, UErrorCode&) const",93957348272992,93957348273454],["non-virtual thunk to icu_68::UnicodeSet::~UnicodeSet()",93957348279200,93957348279235],["icu_68::UnicodeSet::addAll(icu_68::UnicodeString const&)",93957348286240,93957348286364],["icu_68::BMPSet::span(char16_t const*, char16_t const*, USetSpanCondition) const",93957348297504,93957348298575],["icu_68::isDataLoaded(UErrorCode*)",93957348312288,93957348312471],["icu_68::UnicodeString::UnicodeString(int, int, int)",93957348333776,93957348334910],["icu_68::UnicodeString::getLength() const",93957348340144,93957348340167],["icu_68::UnicodeStringAppendable::reserveAppendCapacity(int)",93957348346848,93957348346899],["defaultGetMaxValue(IntProperty const&, UProperty)",93957348350672,93957348350703],["ures_hasNext_68",93957348353424,93957348353456],["getPoolEntry(char const*, UErrorCode*)",93957348370320,93957348370384],["icu_68::ResourceDataValue::getArray(UErrorCode&) const",93957348372896,93957348373052],["uset_getSerializedRangeCount_68",93957348378576,93957348378625],["icu_68::GreekUpper::getDiacriticData(int)",93957348383152,93957348383217],["icu_68::StringEnumeration::unext(int*, UErrorCode&)",93957348389584,93957348389695],["ustrenum_next(UEnumeration*, int*, UErrorCode*)",93957348390832,93957348390850],["u_strncpy_68",93957348394384,93957348394427],["ustrcase_getTitleBreakIterator_68",93957348396448,93957348396795],["utext_setup_68",93957348403456,93957348403837],["ucstrTextAccess(UText*, long, signed char)",93957348407024,93957348407476],["utrace_exit_68",93957348411376,93957348411628],["icu_68::UVector::getDynamicClassID() const",93957348424640,93957348424653],["icu_68::UVector::removeAll(icu_68::UVector const&)",93957348427120,93957348427535],["icu_68::UVector32::UVector32(int, UErrorCode&)",93957348429376,93957348429502],["icu_68::UVector32::expandCapacity(int, UErrorCode&)",93957348430912,93957348431066],["Cr_z_adler32_z",93957348431920,93957348433039],["Cr_z_crc_finalize",93957348434224,93957348434266],["Cr_z_deflate",93957348437456,93957348440805],["deflate_slow",93957348446560,93957348448546],["Cr_z__tr_align",93957348452352,93957348452711],["send_tree",93957348459440,93957348460847],["clnt_spcreateerror",139871564482080,139871564482328],["get_myaddress",139871564488016,139871564488206],["key_encryptsession",139871564489360,139871564489492],["key_encryptsession_pk",139871564489648,139871564489836],["ilogb",139871565491440,139871565491499],["__asinf_finite",139871565494080,139871565494673],["__j0f_finite",139871565498144,139871565498871],["__jnf_finite",139871565502272,139871565503687],["__log10f_finite",139871565507488,139871565507713],["__scalbf_finite",139871565509168,139871565509292],["__sqrtf_finite",139871565509744,139871565509749],["asinhf",139871565512512,139871565512889],["v8::Shell::RealmNavigate(v8::FunctionCallbackInfo<v8::Value> const&)",93957335249344,93957335249663],["v8::Shell::RealmSharedSet(v8::Local<v8::String>, v8::Local<v8::Value>, v8::PropertyCallbackInfo<void> const&)",93957335250624,93957335250700],["v8::internal::BytecodeArray v8::internal::SharedFunctionInfo::GetBytecodeArray<v8::internal::Isolate>(v8::internal::Isolate*) const",93957335253552,93957335253786],["v8::Shell::AsyncHooksExecutionAsyncId(v8::FunctionCallbackInfo<v8::Value> const&)",93957335253856,93957335253951],["v8::internal::CpuTraceMarkExtension::Mark(v8::FunctionCallbackInfo<v8::Value> const&)",93957336716224,93957336716388],["non-virtual thunk to v8::internal::(anonymous namespace)::AsyncGC::~AsyncGC()",93957336718848,93957336718901],["v8::internal::TriggerFailureExtension::TriggerCheckFalse(v8::FunctionCallbackInfo<v8::Value> const&)",93957336723248,93957336723273],["v8::internal::FlagList::PrintHelp()",93957336726496,93957336727726],["v8::internal::(anonymous namespace)::Flag::Reset()",93957336728432,93957336729671],["v8::internal::FlagList::Hash()",93957336752656,93957336752668],["v8::internal::GlobalHandles::OnStackTracedNodeSpace::CleanupBelowCurrentStackPosition()",93957336753088,93957336753290],["v8::internal::GlobalHandles::TotalSize() const",93957336753312,93957336753338],["std::__1::default_delete<v8::internal::HeapSnapshot>::operator()(v8::internal::HeapSnapshot*) const",93957339623344,93957339623513],["v8::internal::V8HeapExplorer::GetSystemEntryName(v8::internal::HeapObject)",93957339633968,93957339636080],["v8::internal::V8HeapExplorer::ExtractCodeReferences(v8::internal::HeapEntry*, v8::internal::Code)",93957339641264,93957339641510],["v8::internal::V8HeapExplorer::ExtractContextReferences(v8::internal::HeapEntry*, v8::internal::Context)",93957339642560,93957339643255],["v8::internal::V8HeapExplorer::ExtractInternalReferences(v8::internal::JSObject, v8::internal::HeapEntry*)",93957339646208,93957339646587],["v8::internal::V8HeapExplorer::SetWeakReference(v8::internal::HeapEntry*, int, v8::internal::Object, int)",93957339647808,93957339648388],["v8::internal::V8HeapExplorer::ExtractAccessorPairProperty(v8::internal::HeapEntry*, v8::internal::Name, v8::internal::Object, int)",93957339649952,93957339650181],["v8::internal::V8HeapExplorer::SetHiddenReference(v8::internal::HeapObject, v8::internal::HeapEntry*, int, v8::internal::Object, int)",93957339652352,93957339652981],["v8::internal::V8HeapExplorer::GetStrongGcSubrootName(v8::internal::Object)",93957339653952,93957339654446],["v8::internal::GlobalObjectsEnumerator::~GlobalObjectsEnumerator()",93957339654720,93957339654758],["v8::internal::NativeObjectsExplorer::MergeNodeIntoEntry(v8::internal::HeapEntry*, v8::EmbedderGraph::Node*, v8::EmbedderGraph::Node*)",93957339655248,93957339655740],["v8::internal::NativeObjectsExplorer::IterateAndExtractReferences(v8::internal::HeapSnapshotGenerator*)",93957339655952,93957339657144],["v8::internal::HeapSnapshotGenerator::HeapSnapshotGenerator(v8::internal::HeapSnapshot*, v8::ActivityControl*, v8::HeapProfiler::ObjectNameResolver*, v8::internal::Heap*)",93957339657296,93957339657657],["v8::internal::HeapSnapshotGenerator::ProgressStep()",93957339658208,93957339658221],["v8::internal::HeapSnapshotJSONSerializer::Serialize(v8::OutputStream*)",93957339658304,93957339658520],["v8::internal::OutputStreamWriter::AddCharacter(char)",93957339660816,93957339660900],["v8_crdtp::ProtocolTypeTraits<v8_inspector::String16, void>::Serialize(v8_inspector::String16 const&, std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*)",93957342409472,93957342409501],["v8_inspector::V8ConsoleAgentImpl::disable()",93957342410256,93957342410375],["v8_inspector::V8ConsoleMessage::reportToFrontend(v8_inspector::protocol::Console::Frontend*) const",93957342411360,93957342411802],["v8_inspector::V8ConsoleMessage::wrapException(v8_inspector::V8InspectorSessionImpl*, bool) const",93957342416544,93957342416766],["v8_inspector::V8ConsoleMessage::createForException(double, v8_inspector::String16 const&, v8_inspector::String16 const&, unsigned int, unsigned int, std::__1::unique_ptr<v8_inspector::V8StackTraceImpl, std::__1::default_delete<v8_inspector::V8StackTraceImpl> >, int, v8::Isolate*, v8_inspector::String16 const&, int, v8::Local<v8::Value>, unsigned int)",93957342420352,93957342421359],["v8_inspector::V8ConsoleMessage::contextDestroyed(int)",93957342422096,93957342422339],["v8_inspector::V8ConsoleMessageStorage::~V8ConsoleMessageStorage()",93957342422400,93957342422690],["v8_inspector::V8ConsoleMessageStorage::addMessage(std::__1::unique_ptr<v8_inspector::V8ConsoleMessage, std::__1::default_delete<v8_inspector::V8ConsoleMessage> >)",93957342422864,93957342424246],["v8::internal::compiler::JSInliningHeuristic::Finalize()",93957344145888,93957344146294],["v8::internal::compiler::JSIntrinsicLowering::ReduceCall(v8::internal::compiler::Node*)",93957344180432,93957344180623],["v8::internal::compiler::JSNativeContextSpecialization::ReduceJSLoadProperty(v8::internal::compiler::Node*)",93957344199216,93957344199577],["v8::internal::compiler::(anonymous namespace)::HasNumberMaps(v8::internal::compiler::JSHeapBroker*, v8::internal::ZoneVector<v8::internal::Handle<v8::internal::Map> > const&)",93957344223872,93957344224013],["v8::internal::compiler::JSNativeContextSpecialization::InlineApiCall(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node**, v8::internal::compiler::Node**, v8::internal::compiler::FunctionTemplateInfoRef const&)",93957344247936,93957344249188],["_ZNSt3__16vectorIN2v88internal6HandleINS2_3MapEEENS2_13ZoneAllocatorIS5_EEE6assignINS_13move_iteratorINS_11__wrap_iterIPS5_EEEEEENS_9enable_ifIXaasr27__is_cpp17_forward_iteratorIT_EE5valuesr16is_constructibleIS5_NS_15iterator_traitsISG_E9referenceEEE5valueEvE4typeESG_SG_",93957344259360,93957344260846],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::ForInParameters const&)",93957344262048,93957344262167],["v8::internal::compiler::JSOperatorBuilder::AsyncFunctionEnter()",93957344262416,93957344262430],["v8::internal::compiler::JSOperatorBuilder::GeneratorRestoreContext()",93957344262512,93957344262526],["v8::internal::compiler::JSOperatorBuilder::PerformPromiseThen()",93957344262576,93957344262590],["v8::internal::compiler::JSOperatorBuilder::GetSuperConstructor()",93957344262640,93957344262654],["v8::internal::compiler::JSOperatorBuilder::Negate(v8::internal::compiler::FeedbackSource const&)",93957344262864,93957344263039],["v8::internal::compiler::JSOperatorBuilder::Subtract(v8::internal::compiler::FeedbackSource const&)",93957344263568,93957344263743],["v8::internal::compiler::JSOperatorBuilder::Exponentiate(v8::internal::compiler::FeedbackSource const&)",93957344264272,93957344264447],["v8::internal::compiler::JSOperatorBuilder::ShiftLeft(v8::internal::compiler::FeedbackSource const&)",93957344264976,93957344265151],["v8::internal::compiler::JSOperatorBuilder::StrictEqual(v8::internal::compiler::FeedbackSource const&)",93957344265680,93957344265858],["v8::internal::compiler::JSOperatorBuilder::LessThanOrEqual(v8::internal::compiler::FeedbackSource const&)",93957344266224,93957344266399],["v8::internal::compiler::JSOperatorBuilder::InstanceOf(v8::internal::compiler::FeedbackSource const&)",93957344266576,93957344266751],["v8::internal::compiler::JSOperatorBuilder::StoreInArrayLiteral(v8::internal::compiler::FeedbackSource const&)",93957344266944,93957344267122],["v8::internal::compiler::JSOperatorBuilder::Call(unsigned long, v8::internal::compiler::CallFrequency const&, v8::internal::compiler::FeedbackSource const&, v8::internal::ConvertReceiverMode, v8::internal::SpeculationMode, v8::internal::compiler::CallFeedbackRelation)",93957344267296,93957344267547],["v8::internal::compiler::JSOperatorBuilder::CallWithSpread(unsigned int, v8::internal::compiler::CallFrequency const&, v8::internal::compiler::FeedbackSource const&, v8::internal::SpeculationMode, v8::internal::compiler::CallFeedbackRelation)",93957344267792,93957344268034],["v8::internal::compiler::JSOperatorBuilder::CallRuntime(v8::internal::Runtime::FunctionId, unsigned long)",93957344268208,93957344268359],["v8::internal::compiler::JSOperatorBuilder::ConstructForwardVarargs(unsigned long, unsigned int)",93957344268576,93957344268715],["v8::internal::compiler::JSOperatorBuilder::ConstructWithArrayLike(v8::internal::compiler::CallFrequency const&, v8::internal::compiler::FeedbackSource const&)",93957344268928,93957344269121],["v8::internal::compiler::JSOperatorBuilder::LoadNamed(v8::internal::Handle<v8::internal::Name>, v8::internal::compiler::FeedbackSource const&)",93957344269344,93957344269549],["v8::internal::compiler::JSOperatorBuilder::LoadProperty(v8::internal::compiler::FeedbackSource const&)",93957344269760,93957344269951],["v8::internal::compiler::JSOperatorBuilder::HasProperty(v8::internal::compiler::FeedbackSource const&)",93957344270160,93957344270351],["v8::internal::compiler::JSOperatorBuilder::ForInPrepare(v8::internal::compiler::ForInMode, v8::internal::compiler::FeedbackSource const&)",93957344270560,93957344270764],["v8::internal::compiler::JSOperatorBuilder::GeneratorRestoreRegister(int)",93957344270896,93957344271021],["v8::internal::compiler::JSOperatorBuilder::StoreProperty(v8::internal::LanguageMode, v8::internal::compiler::FeedbackSource const&)",93957344271248,93957344271449],["v8::internal::compiler::JSOperatorBuilder::DeleteProperty()",93957344271648,93957344271754],["v8::internal::compiler::JSOperatorBuilder::LoadGlobal(v8::internal::Handle<v8::internal::Name> const&, v8::internal::compiler::FeedbackSource const&, v8::internal::TypeofMode)",93957344271872,93957344272069],["std::__1::time_get<wchar_t, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::do_get_monthname(std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, unsigned int&, tm*) const",93957346715984,93957346716382],["std::__1::__money_put<char>::__gather_info(bool, bool, std::__1::locale const&, std::__1::money_base::pattern&, char&, char&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, int&)",93957346738304,93957346738817],["std::__1::locale::__imp::__imp(unsigned long)",93957346747376,93957346756052],["std::__1::locale::has_facet(std::__1::locale::id&) const",93957346756720,93957346756854],["std::__1::ctype<wchar_t>::do_scan_not(unsigned short, wchar_t const*, wchar_t const*) const",93957346757504,93957346757665],["std::__1::ctype<wchar_t>::do_tolower(wchar_t*, wchar_t const*) const",93957346758064,93957346758217],["std::__1::ctype<char>::~ctype()",93957346759216,93957346759269],["std::__1::ctype<char>::do_tolower(char) const",93957346759616,93957346759720],["std::__1::ctype<char>::do_narrow(char, char) const",93957346760288,93957346760302],["std::__1::codecvt<char, char, __mbstate_t>::do_in(__mbstate_t&, char const*, char const*, char const*&, char*, char*, char*&) const",93957346760832,93957346760853],["std::__1::codecvt<char, char, __mbstate_t>::do_length(__mbstate_t&, char const*, char const*, unsigned long) const",93957346760880,93957346760898],["std::__1::codecvt<wchar_t, char, __mbstate_t>::do_out(__mbstate_t&, wchar_t const*, wchar_t const*, wchar_t const*&, char*, char*, char*&) const",93957346761040,93957346761939],["std::__1::codecvt<wchar_t, char, __mbstate_t>::do_unshift(__mbstate_t&, char*, char*, char*&) const",93957346762608,93957346762968],["std::__1::codecvt<wchar_t, char, __mbstate_t>::do_length(__mbstate_t&, char const*, char const*, unsigned long) const",93957346763120,93957346763372],["std::__1::codecvt<char16_t, char, __mbstate_t>::do_out(__mbstate_t&, char16_t const*, char16_t const*, char16_t const*&, char*, char*, char*&) const",93957346763440,93957346763529],["std::__1::codecvt<char16_t, char, __mbstate_t>::do_in(__mbstate_t&, char const*, char const*, char const*&, char16_t*, char16_t*, char16_t*&) const",93957346764192,93957346764281],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::append(char const*, unsigned long)",93957346785040,93957346785436],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::insert(unsigned long, char const*)",93957346785840,93957346785894],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::append(unsigned long, char)",93957346786656,93957346787025],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::compare(char const*) const",93957346787584,93957346787716],["std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >::__grow_by_and_replace(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, wchar_t const*)",93957346787968,93957346788314],["std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >::push_back(wchar_t)",93957346788976,93957346789131],["std::__1::to_string(unsigned int)",93957346790064,93957346790306],["std::__1::error_category::equivalent(int, std::__1::error_condition const&) const",93957346790656,93957346790692],["std::__1::__generic_error_category::message(int) const",93957346791040,93957346791132],["std::__1::system_error::__init(std::__1::error_code const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)",93957346791376,93957346791567],["std::__1::__throw_system_error(int, char const*)",93957346791936,93957346792067],["__cxa_bad_typeid",93957346792288,93957346792337],["__cxa_throw",93957346792496,93957346792613],["__cxa_end_catch",93957346792880,93957346793069],["__cxa_get_globals_fast",93957346793456,93957346793509],["std::terminate()",93957346793632,93957346793702],["__cxxabiv1::scan_eh_tab(__cxxabiv1::(anonymous namespace)::scan_results&, _Unwind_Action, bool, _Unwind_Exception*, _Unwind_Context*)",93957346794304,93957346795983],["__cxxabiv1::__free_with_fallback(void*)",93957346797776,93957346798025],["__cxxabiv1::__class_type_info::search_below_dst(__cxxabiv1::__dynamic_cast_info*, void const*, int, bool) const",93957346800160,93957346800329],["std::logic_error::~logic_error()",93957346801424,93957346801493],["__cxa_guard_release",93957346801888,93957346802001],["(anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::parseName((anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::NameState*)",93957346811584,93957346815417],["(anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::parseCallOffset()",93957346817136,93957346817605],["(anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::parseSubstitution()",93957346818928,93957346819815],["(anonymous namespace)::itanium_demangle::NameType::getBaseName() const",93957346824784,93957346824798],["(anonymous namespace)::itanium_demangle::ForwardTemplateReference::getSyntaxNode((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346825536,93957346825594],["(anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::parseBinaryExpr((anonymous namespace)::itanium_demangle::StringView)",93957346834544,93957346834754],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::MemberExpr, (anonymous namespace)::itanium_demangle::Node*&, char const (&) [3], (anonymous namespace)::itanium_demangle::Node*&>((anonymous namespace)::itanium_demangle::Node*&, char const (&) [3], (anonymous namespace)::itanium_demangle::Node*&)",93957346838352,93957346838542],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::ConditionalExpr, (anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::Node*&>((anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::Node*&)",93957346841184,93957346841352],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::ThrowExpr, (anonymous namespace)::itanium_demangle::Node*&>((anonymous namespace)::itanium_demangle::Node*&)",93957346842496,93957346842633],["(anonymous namespace)::itanium_demangle::FloatLiteralImpl<long double>::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346845376,93957346846336],["(anonymous namespace)::itanium_demangle::CallExpr::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346850432,93957346850640],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::LiteralOperator, (anonymous namespace)::itanium_demangle::Node*&>((anonymous namespace)::itanium_demangle::Node*&)",93957346856432,93957346856569],["(anonymous namespace)::itanium_demangle::ExpandedSpecialSubstitution::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346860592,93957346861324],["(anonymous namespace)::itanium_demangle::ParameterPack::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346864112,93957346864175],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::PostfixQualifiedType, (anonymous namespace)::itanium_demangle::Node*&, char const (&) [11]>((anonymous namespace)::itanium_demangle::Node*&, char const (&) [11])",93957346870464,93957346870625],["(anonymous namespace)::itanium_demangle::ArrayType::printRight((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346873760,93957346874165],["v8::base::bits::SignedMulOverflow32(int, int, int*)",93957346877152,93957346877179],["v8::base::RelativePath(char const*, char const*)",93957346879616,93957346879774],["v8::base::ieee754::log2(double)",93957346891760,93957346892222],["v8::base::PageAllocator::GetRandomMmapAddr()",93957346899088,93957346899098],["v8::base::Mutex::Mutex()",93957346899952,93957346899964],["v8::base::Time::NowFromSystemTime()",93957346900448,93957346900529],["v8::base::SysInfo::NumberOfProcessors()",93957346904176,93957346904206],["v8::base::OS::SetRandomMmapSeed(long)",93957346909008,93957346909249],["v8::base::OS::GetCurrentThreadId()",93957346911152,93957346911169],["v8::base::OS::SNPrintF(char*, int, char const*, ...)",93957346912176,93957346912364],["void std::__1::vector<v8::base::OS::SharedLibraryAddress, std::__1::allocator<v8::base::OS::SharedLibraryAddress> >::__push_back_slow_path<v8::base::OS::SharedLibraryAddress>(v8::base::OS::SharedLibraryAddress&&)",93957346914240,93957346914675],["v8::platform::(anonymous namespace)::PrintStackTrace()",93957346918048,93957346918106],["v8::JobHandle::IsRunning()",93957346923952,93957346923963],["v8::platform::DefaultWorkerThreadsTaskRunner::PostDelayedTask(std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> >, double)",93957346932960,93957346933080],["v8::platform::tracing::TracingController::~TracingController()",93957346945440,93957346945780],["icu_68::Calendar::operator=(icu_68::Calendar const&)",93957346952208,93957346952672],["icu_68::Calendar::roll(UCalendarDateFields, int, UErrorCode&)",93957346961376,93957346964411],["icu_68::DefaultCalendarFactory::create(icu_68::ICUServiceKey const&, icu_68::ICUService const*, UErrorCode&) const",93957346982496,93957346982972],["icu_68::HebrewCalendar::~HebrewCalendar()",93957346985664,93957346985692],["icu_68::CalendarAstronomer::getSunTime(double, signed char)",93957346991552,93957346991604],["icu_68::Collator::internalCompareUTF8(char const*, int, char const*, int, UErrorCode&) const",93957346997456,93957346997637],["icu_68::CollationSettings::setFlag(int, UColAttributeValue, int, UErrorCode&)",93957347004544,93957347004606],["icu_68::initializeSystemDefaultCentury()",93957347022192,93957347022470],["icu_68::DateFormat::operator==(icu_68::Format const&) const",93957347025648,93957347025762],["icu_68::DateFmtBestPatternKey::clone() const",93957347029008,93957347029131],["icu_68::DecimalFormat::clone() const",93957347036176,93957347036254],["icu_68::DecimalFormat::setRoundingMode(icu_68::NumberFormat::ERoundingMode)",93957347044224,93957347044331],["icu_68::DecimalFormat::toNumberFormatter(UErrorCode&) const",93957347048288,93957347048329],["icu_68::DecimalFormatSymbols::DecimalFormatSymbols(icu_68::DecimalFormatSymbols const&)",93957347060496,93957347061114],["icu_68::DateFormatSymbols::getAmPmStrings(int&) const",93957347114080,93957347114101],["icu_68::FormattedList::nextPosition(icu_68::ConstrainedFieldPosition&, UErrorCode&) const",93957347124624,93957347124666],["icu_68::DateIntervalInfo::getDynamicClassID() const",93957347144656,93957347144669],["icu_68::DateTimePatternGenerator::operator=(icu_68::DateTimePatternGenerator const&)",93957347156272,93957347157131],["icu_68::DateTimePatternGenerator::adjustFieldTypes(icu_68::UnicodeString const&, icu_68::PtnSkeleton const*, int, UDateTimePatternMatchOptions)",93957347172336,93957347174158],["icu_68::EthiopicCalendar::defaultCenturyStart() const",93957347186720,93957347186778],["icu_68::Format::operator=(icu_68::Format const&)",93957347190224,93957347190285],["icu_68::FormattedStringBuilder::length() const",93957347196320,93957347196332],["icu_68::FieldPositionIteratorHandler::~FieldPositionIteratorHandler()",93957347200992,93957347201055],["icu_68::GregorianCalendar::defaultCenturyStart() const",93957347206432,93957347206490],["icu_68::IndianCalendar::IndianCalendar(icu_68::Locale const&, UErrorCode&)",93957347212288,93957347212368],["icu_68::JapaneseCalendar::getDefaultMonthInYear(int)",93957347218336,93957347218421],["icu_68::ListFormatter::formatStringsToValue(icu_68::UnicodeString const*, int, UErrorCode&) const",93957347224064,93957347224779],["icu_68::MeasureUnit::getSubtype() const",93957347232976,93957347233068],["icu_68::number::impl::DecimalQuantity::applyMaxInteger(int)",93957347240144,93957347240352],["icu_68::number::impl::DecimalQuantity::setToDecNumber(icu_68::StringPiece, UErrorCode&)",93957347247600,93957347247895],["double icu_68::double_conversion::StringToDoubleConverter::StringToIeee<char const*>(char const*, int, bool, int*) const",93957347268048,93957347271630],["icu_68::number::NumberFormatterSettings<icu_68::number::LocalizedNumberFormatter>::sign(UNumberSignDisplay) const &",93957347292032,93957347292340],["icu_68::MeasureUnitImpl::~MeasureUnitImpl()",93957347307712,93957347307821],["icu_68::number::impl::CompactData::CompactDataSink::put(char const*, icu_68::ResourceValue&, signed char, UErrorCode&)",93957347319344,93957347320261],["icu_68::number::impl::LongNameMultiplexer::processQuantity(icu_68::number::impl::DecimalQuantity&, icu_68::number::impl::MicroProps&, UErrorCode&) const",93957347335328,93957347335527],["icu_68::number::impl::CurrencyPluralInfoAffixProvider::hasCurrencySign() const",93957347344608,93957347344630],["icu_68::number::impl::ConstantMultiFieldModifier::isStrong() const",93957347347696,93957347347708],["icu_68::number::Notation::scientific()",93957347352960,93957347352987],["non-virtual thunk to icu_68::number::impl::MutablePatternModifier::getPrefixLength() const",93957347357904,93957347358005],["icu_68::number::impl::ParsedPatternInfo::consumeLiteral(UErrorCode&)",93957347362048,93957347362543],["icu_68::number::impl::RoundingImpl::isSignificantDigits() const",93957347377568,93957347377580],["icu_68::number::impl::blueprint_helpers::parseDigitsStem(icu_68::StringSegment const&, icu_68::number::impl::MacroProps&, UErrorCode&)",93957347389616,93957347389894],["icu_68::number::impl::SymbolsWrapper::~SymbolsWrapper()",93957347400384,93957347400418],["icu_68::number::impl::DecNum::multiplyBy(icu_68::number::impl::DecNum const&, UErrorCode&)",93957347407296,93957347407345],["icu_68::NumberFormat::operator==(icu_68::Format const&) const",93957347424272,93957347424468],["icu_68::NumberFormat::setMinimumFractionDigits(int)",93957347427888,93957347427945],["icu_68::numparse::impl::NumberParserImpl::parse(icu_68::UnicodeString const&, int, bool, icu_68::numparse::impl::ParsedNumber&, UErrorCode&) const",93957347439856,93957347440265],["icu_68::numparse::impl::CompactUnicodeString<4>::operator==(icu_68::numparse::impl::CompactUnicodeString<4> const&) const",93957347450432,93957347450710],["icu_68::numparse::impl::SymbolMatcher::smokeTest(icu_68::StringSegment const&) const",93957347461280,93957347461335],["icu_68::numparse::impl::RequireNumberValidator::toString() const",93957347463184,93957347463215],["icu_68::OlsonTimeZone::hasSameRules(icu_68::TimeZone const&) const",93957347470464,93957347470885],["icu_68::PluralRules::getDynamicClassID() const",93957347481648,93957347481661],["icu_68::OrConstraint::~OrConstraint()",93957347492368,93957347492447],["icu_68::StandardPluralRanges::copy(UErrorCode&) const",93957347496832,93957347497024],["icu_68::RuleBasedNumberFormat::setLenient(signed char)",93957347509136,93957347509193],["icu_68::PluralFormat::PluralSelectorAdapter::~PluralSelectorAdapter()",93957347518672,93957347518720],["icu_68::NFRuleSet::findNormalRule(long) const",93957347536736,93957347536988],["icu_68::IntegralPartSubstitution::getDynamicClassID() const",93957347544912,93957347544925],["icu_68::CollationElementIterator::getDynamicClassID() const",93957347549200,93957347549213],["icu_68::TailoredSet::comparePrefixes(int, char16_t const*, char16_t const*)",93957347566672,93957347567534],["icu_68::CollationBuilder::ignoreString(icu_68::UnicodeString const&, UErrorCode&) const",93957347585616,93957347585718],["icu_68::CollationRuleParser::setErrorContext()",93957347606096,93957347606429],["icu_68::CollationDataBuilder::encodeCEs(long const*, int, UErrorCode&)",93957347617680,93957347618143],["icu_68::Collation::ceFromCE32(unsigned int)",93957347633120,93957347633194],["icu_68::RuleBasedTimeZone::hasSameRules(icu_68::TimeZone const&) const",93957347643232,93957347643697],["icu_68::RelativeDateTimeFormatter::formatRelativeImpl(double, URelativeDateTimeUnit, icu_68::FormattedRelativeDateTimeData&, UErrorCode&) const",93957347658320,93957347658960],["icu_68::RuleBasedCollator::~RuleBasedCollator()",93957347670704,93957347670790],["icu_68::RuleBasedCollator::compare(UCharIterator&, UCharIterator&, UErrorCode&) const",93957347682432,93957347684542],["icu_68::SimpleTimeZone::getDynamicClassID() const",93957347705520,93957347705533],["icu_68::SimpleDateFormat::~SimpleDateFormat()",93957347713184,93957347713212],["icu_68::SimpleDateFormat::set2DigitYearStart(double, UErrorCode&)",93957347747440,93957347747565],["icu_68::MessageFormat::applyPattern(icu_68::UnicodeString const&, UParseError&, UErrorCode&)",93957347754720,93957347754856],["icu_68::MessageFormat::DummyFormat::clone() const",93957347771712,93957347771783],["icu_68::DayPeriodRulesDataSink::parseSetNum(icu_68::UnicodeString const&, UErrorCode&)",93957347781008,93957347781258],["icu_68::TaiwanCalendar::getDynamicClassID() const",93957347787120,93957347787133],["icu_68::TimeZone::findID(icu_68::UnicodeString const&)",93957347792368,93957347792518],["icu_68::TimeZoneFormat::operator=(icu_68::TimeZoneFormat const&)",93957347803920,93957347804551],["icu_68::TimeZoneFormat::parseOffsetLocalizedGMTPattern(icu_68::UnicodeString const&, int, signed char, int&) const",93957347821200,93957347821599],["icu_68::deleteTZGNCoreRef(void*)",93957347837984,93957347838021],["icu_68::TimeZoneNames::MatchInfoCollection::addMetaZone(UTimeZoneNameType, int, icu_68::UnicodeString const&, UErrorCode&)",93957347840816,93957347841144],["icu_68::TimeZoneNamesImpl::loadMetaZoneNames(icu_68::UnicodeString const&, UErrorCode&)",93957347846512,93957347847555],["icu_68::TZDBTimeZoneNames::~TZDBTimeZoneNames()",93957347856144,93957347856186],["icu_68::AnnualTimeZoneRule::getStartInYear(int, int, int, double&) const",93957347861792,93957347862469],["ucal_getKeywordValuesForLocale_68",93957347865248,93957347865930],["icu_68::FCDUIterCollationIterator::~FCDUIterCollationIterator()",93957347873728,93957347873781],["icu_68::units::ConversionRates::extractConversionInfo(icu_68::StringPiece, UErrorCode&) const",93957347889984,93957347890131],["icu_68::FCDUTF16CollationIterator::previousCodePoint(UErrorCode&)",93957347903664,93957347904127],["icu_68::ZoneMeta::getMetazoneID(icu_68::UnicodeString const&, double, icu_68::UnicodeString&)",93957347915440,93957347915606],["icu_68::ByteSinkUtil::appendCodePoint(int, int, icu_68::ByteSink&, icu_68::Edits*)",93957347925312,93957347925516],["icu_68::BytesTrieBuilder::writeDeltaTo(int)",93957347929360,93957347929538],["uprv_malloc_68",93957347940592,93957347940644],["icu_68::SimpleFilteredSentenceBreakIterator::previous()",93957347946432,93957347946631],["icu_68::deleteNorm2AllModes(void*)",93957347952272,93957347952306],["(anonymous namespace)::_load_installedLocales(UErrorCode&)",93957347961776,93957347961968],["icu_68::LocaleDisplayNamesImpl::getContext(UDisplayContextType) const",93957347976144,93957347976207],["icu_68::Locale::Locale(char const*, char const*, char const*, char const*)",93957347987216,93957347988183],["icu_68::KeywordEnumeration::next(int*, UErrorCode&)",93957348007344,93957348007439],["icu_68::LocaleUtility::canonicalLocaleString(icu_68::UnicodeString const*, icu_68::UnicodeString&)",93957348027584,93957348028012],["icu_68::MessagePattern::isPlural(int)",93957348040144,93957348040520],["icu_68::DecomposeNormalizer2::isInert(int) const",93957348046736,93957348046886],["icu_68::ReorderingBuffer::append(char16_t const*, int, signed char, unsigned char, unsigned char, UErrorCode&)",93957348051104,93957348052389],["icu_68::Normalizer2Impl::composeUTF8(unsigned int, signed char, unsigned char const*, unsigned char const*, icu_68::ByteSink*, icu_68::Edits*, UErrorCode&) const",93957348070608,93957348075144],["uprv_getNaN_68",93957348083488,93957348083502],["icu_68::RuleBasedBreakIterator::operator==(icu_68::BreakIterator const&) const",93957348089136,93957348089326],["icu_68::UnhandledEngine::handleCharacter(int)",93957348098048,93957348098179],["icu_68::UCharsDictionaryMatcher::~UCharsDictionaryMatcher()",93957348114176,93957348114218],["icu_68::StringCharacterIterator::getDynamicClassID() const",93957348121776,93957348121789],["icu_68::ICUService::getVisibleIDMap(UErrorCode&) const",93957348126480,93957348126799],["icu_68::ICULocaleService::get(icu_68::Locale const&, int, UErrorCode&) const",93957348129696,93957348129901],["icu_68::ServiceEnumeration::snext(UErrorCode&)",93957348131152,93957348131264],["icu_68::LocaleKey::getDynamicClassID() const",93957348133488,93957348133501],["icu_68::ResourceBundle::~ResourceBundle()",93957348134832,93957348134902],["icu_68::SimpleFormatter::getTextWithNoArguments(char16_t const*, int, int*, int)",93957348138320,93957348138598],["icu_68::StringTrieBuilder::writeBranchSubNode(int, int, int, int)",93957348144688,93957348145481],["icu_68::StringTrieBuilder::SplitBranchNode::write(icu_68::StringTrieBuilder&)",93957348148368,93957348148468],["ucase_toFullTitle_68",93957348155840,93957348155853],["u_isgraphPOSIX_68",93957348160368,93957348160505],["icu_68::UCharsTrieBuilder::add(icu_68::UnicodeString const&, int, UErrorCode&)",93957348163600,93957348163971],["icu_68::UCharsTrieBuilder::write(int)",93957348166656,93957348166726],["icu_68::UCharsTrie::Iterator::branchNext(char16_t const*, int, UErrorCode&)",93957348170544,93957348171238],["icu_68::UCharCharacterIterator::previous()",93957348172000,93957348172035],["icu_68::CharacterIterator::operator=(icu_68::CharacterIterator const&)",93957348173984,93957348174017],["uprv_parseCurrency_68",93957348180112,93957348180789],["udata_cacheDataItem(char const*, UDataMemory*, UErrorCode*)",93957348191680,93957348192014],["pointerTOCLookupFn(UDataMemory const*, char const*, int*, UErrorCode*)",93957348198080,93957348198441],["uhash_openSize_68",93957348199984,93957348200936],["uhash_iputi_68",93957348204800,93957348204835],["uprv_isInvariantString_68",93957348207248,93957348207335],["ulist_createEmptyList_68",93957348211424,93957348211482],["getShortestSubtagLength(char const*)",93957348214608,93957348214808],["uloc_getName_68",93957348222464,93957348222611],["ulocimp_toLegacyKey_68",93957348230240,93957348230292],["ultag_isPrivateuseValueSubtags_68",93957348233552,93957348233895],["uprv_unmapFile_68",93957348255808,93957348255865],["icu_68::umtx_cleanup()",93957348271040,93957348271128],["icu_68::RuleCharacterIterator::atEnd() const",93957348275648,93957348275697],["icu_68::UnicodeSet::ensureCapacity(int)",93957348278288,93957348278548],["icu_68::UnicodeSet::getRangeEnd(int) const",93957348280400,93957348280425],["non-virtual thunk to icu_68::UnicodeSet::addMatchSetTo(icu_68::UnicodeSet&) const",93957348283440,93957348283460],["icu_68::UnicodeSet::remove(int)",93957348287792,93957348287911],["icu_68::UnicodeFilter::toMatcher() const",93957348293488,93957348293505],["icu_68::UnicodeSet::resemblesPropertyPattern(icu_68::RuleCharacterIterator&, int)",93957348304784,93957348304993],["ubidi_getMaxValue_68",93957348311296,93957348311357],["icu_68::enumGroupNames(icu_68::UCharNames*, unsigned short const*, int, int, signed char (*)(void*, int, UCharNameChoice, char const*, int), void*, UCharNameChoice)",93957348317760,93957348318993],["uhash_hashCaselessUnicodeString_68",93957348332816,93957348332960],["icu_68::UnicodeString::UnicodeString(char16_t*, int, int)",93957348336112,93957348336275],["icu_68::UnicodeString::operator=(icu_68::UnicodeString const&)",93957348339440,93957348339452],["icu_68::UnicodeString::extract(int, int, char*, int, icu_68::UnicodeString::EInvariant) const",93957348341200,93957348341352],["icu_68::UnicodeString::doAppend(icu_68::UnicodeString const&, int, int)",93957348345728,93957348345825],["u_hasBinaryProperty_68",93957348347968,93957348348007],["isPOSIX_print(BinaryProperty const&, int, UProperty)",93957348349424,93957348349436],["getHangulSyllableType(IntProperty const&, int, UProperty)",93957348350896,93957348350941],["ures_getString_68",93957348352496,93957348352696],["ures_getStringByKeyWithFallback_68",93957348358224,93957348358627],["findFirstExisting(char const*, char*, signed char*, signed char*, signed char*, UErrorCode*)",93957348368160,93957348368439],["res_unload_68",93957348371200,93957348371236],["icu_68::ResourceDataValue::getInt(UErrorCode&) const",93957348372416,93957348372486],["(anonymous namespace)::getStringArray(ResourceData const*, icu_68::ResourceArray const&, icu_68::UnicodeString*, int, UErrorCode&)",93957348373696,93957348374164],["res_getArrayItem_68",93957348377504,93957348377612],["icu_68::UnicodeSetIterator::~UnicodeSetIterator()",93957348379024,93957348379072],["ustrcase_internalToTitle_68",93957348379568,93957348380950],["ustrcase_internalFold_68",93957348386048,93957348386155],["u_strToUpper_68",93957348389024,93957348389144],["icu_68::UStringEnumeration::fromUEnumeration(UEnumeration*, UErrorCode&)",93957348390048,93957348390159],["icu_68::UStringEnumeration::getDynamicClassID() const",93957348390592,93957348390605],["u_strchr_68",93957348392416,93957348392637],["uprv_strCompare_68",93957348393552,93957348394179],["u_memcmp_68",93957348394720,93957348394763],["icu_68::WholeStringBreakIterator::getDynamicClassID() const",93957348396304,93957348396317],["u_strToUTF8_68",93957348401184,93957348401211],["utext_current32_68",93957348402704,93957348402935],["utext_openUChars_68",93957348404288,93957348404459],["unistrTextCopy(UText*, long, long, long, signed char, UErrorCode*)",93957348405936,93957348406327],["charIterTextLength(UText*)",93957348408368,93957348408378],["icu_68::ICU_Utility::escapeUnprintable(icu_68::UnicodeString&, int)",93957348410704,93957348411107],["utrie2_set32_68",93957348412944,93957348413071],["utrie2_isFrozen_68",93957348423232,93957348423246],["icu_68::UVector::UVector(void (*)(void*), signed char (*)(UElement, UElement), int, UErrorCode&)",93957348424944,93957348425057],["icu_68::UVector::setElementAt(void*, int)",93957348426400,93957348426471],["icu_68::UVector::removeElement(void*)",93957348428176,93957348428468],["icu_68::UVector32::getDynamicClassID() const",93957348429264,93957348429277],["icu_68::UVector32::~UVector32()",93957348429568,93957348429626],["icu_68::UVector32::insertElementAt(int, int, UErrorCode&)",93957348430512,93957348430889],["icu_68::UVector64::UVector64(UErrorCode&)",93957348431088,93957348431174],["icu_68::UVector64::insertElementAt(long, int, UErrorCode&)",93957348431344,93957348431745],["Cr_z_compressBound",93957348433056,93957348433108],["Cr_z_crc32",93957348434144,93957348434156],["Cr_z_deflateInit2_",93957348434384,93957348435205],["Cr_z_deflateResetKeep",93957348437088,93957348437338],["deflate_stored",93957348440928,93957348442619],["insert_string_simd",93957348444944,93957348445027],["Cr_z_inflate_table",93957348449296,93957348451262],["Cr_z__tr_flush_bits",93957348452208,93957348452347],["Cr_z__tr_flush_block",93957348452720,93957348455948],["compress_block",93957348458336,93957348459428],["Cr_z_zcalloc",93957348460848,93957348460863],["clnt_sperrno",139871564481312,139871564481414],["clnttcp_create",139871564484016,139871564484673],["clntudp_create",139871564487984,139871564488010],["key_setsecret",139871564489120,139871564489228],["fdim",139871565490976,139871565491063],["fmaxmag",139871565491792,139871565491999],["__acosf_finite",139871565493136,139871565493853],["__atanhf_finite",139871565495296,139871565495589],["__hypotf_finite",139871565496704,139871565496915],["__y0f_finite",139871565498880,139871565499622],["__y1f_finite",139871565501360,139871565502260],["__ynf_finite",139871565503696,139871565504500],["v8::Shell::CreateGlobalTemplate(v8::Isolate*)",93957335247392,93957335249061],["v8::Shell::RealmDispose(v8::FunctionCallbackInfo<v8::Value> const&)",93957335249888,93957335250028],["v8::Shell::RealmSharedGet(v8::Local<v8::String>, v8::PropertyCallbackInfo<v8::Value> const&)",93957335250592,93957335250624],["v8::Shell::LogGetAndStop(v8::FunctionCallbackInfo<v8::Value> const&)",93957335250704,93957335251282],["v8::internal::ThreadLocalTop::Free()",93957336715456,93957336715514],["v8::internal::SimpleStringResource<char, v8::String::ExternalOneByteStringResource>::~SimpleStringResource()",93957336717312,93957336717343],["v8::internal::(anonymous namespace)::AsyncGC::RunInternal()",93957336718560,93957336718788],["v8::internal::IgnitionStatisticsExtension::GetIgnitionDispatchCounters(v8::FunctionCallbackInfo<v8::Value> const&)",93957336718960,93957336719010],["v8::internal::TriggerFailureExtension::GetNativeFunctionTemplate(v8::Isolate*, v8::Local<v8::String>)",93957336722960,93957336723240],["v8::internal::(anonymous namespace)::Flag::IsDefault() const",93957336723280,93957336723470],["v8::internal::FlagList::SetFlagsFromCommandLine(int*, char**, bool, v8::internal::FlagList::HelpOptions)",93957336723728,93957336726485],["v8::internal::FlagList::SetFlagsFromString(char const*, unsigned long)",93957336727728,93957336728381],["v8::internal::HeapProfiler::GetAllocationProfile()",93957339620400,93957339620423],["v8::internal::HeapSnapshot::FillChildren()",93957339626224,93957339626694],["v8::internal::V8HeapExplorer::ExtractLocation(v8::internal::HeapEntry*, v8::internal::HeapObject)",93957339632960,93957339633310],["v8::internal::V8HeapExplorer::ExtractJSGeneratorObjectReferences(v8::internal::HeapEntry*, v8::internal::JSGeneratorObject)",93957339638016,93957339638177],["v8::internal::V8HeapExplorer::ExtractAccessorInfoReferences(v8::internal::HeapEntry*, v8::internal::AccessorInfo)",93957339640944,93957339641137],["v8::internal::V8HeapExplorer::ExtractPropertyCellReferences(v8::internal::HeapEntry*, v8::internal::PropertyCell)",93957339641616,93957339641736],["void v8::internal::V8HeapExplorer::ExtractWeakArrayReferences<v8::internal::WeakFixedArray>(int, v8::internal::HeapEntry*, v8::internal::WeakFixedArray)",93957339642208,93957339642384],["v8::internal::V8HeapExplorer::ExtractFixedArrayReferences(v8::internal::HeapEntry*, v8::internal::FixedArray)",93957339644080,93957339644217],["v8::internal::V8HeapExplorer::ExtractElementReferences(v8::internal::JSObject, v8::internal::HeapEntry*)",93957339645792,93957339646194],["v8::internal::V8HeapExplorer::SetPropertyReference(v8::internal::HeapEntry*, v8::internal::Name, v8::internal::Object, char const*, int)",93957339646592,93957339647142],["v8::internal::V8HeapExplorer::SetNativeBindReference(v8::internal::HeapEntry*, char const*, v8::internal::Object)",93957339647456,93957339647802],["v8::internal::V8HeapExplorer::SetContextReference(v8::internal::HeapEntry*, v8::internal::String, v8::internal::Object, int)",93957339648400,93957339648798],["v8::internal::V8HeapExplorer::SetInternalReference(v8::internal::HeapEntry*, int, v8::internal::Object, int)",93957339649376,93957339649947],["v8::internal::V8HeapExplorer::SetElementReference(v8::internal::HeapEntry*, int, v8::internal::Object)",93957339650192,93957339650535],["std::__1::vector<bool, std::__1::allocator<bool> >::resize(unsigned long, bool)",93957339651904,93957339652339],["v8::internal::V8HeapExplorer::SetUserGlobalReference(v8::internal::Object)",93957339652992,93957339653341],["v8_inspector::toProtocolString(v8::Isolate*, v8::Local<v8::String>)",93957342408496,93957342408696],["v8_inspector::(anonymous namespace)::StringBuffer8::~StringBuffer8()",93957342409616,93957342409667],["v8_inspector::V8ConsoleAgentImpl::enable()",93957342409872,93957342410002],["v8_inspector::V8ConsoleAgentImpl::restore()",93957342410416,93957342410534],["v8_inspector::V8ConsoleMessage::setLocation(v8_inspector::String16 const&, unsigned int, unsigned int, std::__1::unique_ptr<v8_inspector::V8StackTraceImpl, std::__1::default_delete<v8_inspector::V8StackTraceImpl> >, int)",93957342410912,93957342411347],["v8_inspector::protocol::Console::ConsoleMessage::setUrl(v8_inspector::String16 const&)",93957342411808,93957342412467],["v8_inspector::V8ConsoleMessage::reportToFrontend(v8_inspector::protocol::Runtime::Frontend*, v8_inspector::V8InspectorSessionImpl*, bool) const",93957342413776,93957342416539],["v8_inspector::protocol::Runtime::ExceptionDetails::setUrl(v8_inspector::String16 const&)",93957342416768,93957342417427],["v8::internal::compiler::ProcessedFeedback::AsMinimorphicPropertyAccess() const",93957344123504,93957344123539],["std::__1::vector<v8::internal::compiler::Node*, v8::internal::ZoneAllocator<v8::internal::compiler::Node*> >::push_back(v8::internal::compiler::Node* const&)",93957344162224,93957344162885],["v8::internal::compiler::JSIntrinsicLowering::ReduceAsyncGeneratorYield(v8::internal::compiler::Node*)",93957344178080,93957344178263],["v8::internal::compiler::JSNativeContextSpecialization::ReduceJSAdd(v8::internal::compiler::Node*)",93957344182304,93957344183133],["v8::internal::compiler::JSNativeContextSpecialization::ReduceJSLoadNamed(v8::internal::compiler::Node*)",93957344196848,93957344198272],["v8::internal::compiler::JSNativeContextSpecialization::ReduceJSStoreInArrayLiteral(v8::internal::compiler::Node*)",93957344200640,93957344200898],["v8::internal::compiler::JSNativeContextSpecialization::ReduceMinimorphicPropertyAccess(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::MinimorphicLoadPropertyAccessFeedback const&, v8::internal::compiler::FeedbackSource const&)",93957344209952,93957344210976],["v8::internal::compiler::JSNativeContextSpecialization::InferRootMap(v8::internal::compiler::Node*) const",93957344226176,93957344226553],["v8::internal::compiler::JSNativeContextSpecialization::ReduceJSLoadPropertyWithEnumeratedKey(v8::internal::compiler::Node*)",93957344244784,93957344246393],["v8::internal::compiler::JSNativeContextSpecialization::BuildPropertyLoad(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::NameRef const&, v8::internal::ZoneVector<v8::internal::compiler::Node*>*, v8::internal::compiler::PropertyAccessInfo const&)",93957344250496,93957344251166],["v8::internal::compiler::JSNativeContextSpecialization::CanTreatHoleAsUndefined(v8::internal::ZoneVector<v8::internal::Handle<v8::internal::Map> > const&)",93957344259136,93957344259340],["v8::internal::compiler::JSCreateClosureNode::GetFeedbackCellRefChecked(v8::internal::compiler::JSHeapBroker*) const",93957344260864,93957344261107],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::CreateClosureParameters const&)",93957344261664,93957344261883],["v8::internal::compiler::JSOperatorBuilder::JSOperatorBuilder(v8::internal::Zone*)",93957344262224,93957344262335],["v8::internal::compiler::JSOperatorBuilder::OrdinaryHasInstance()",93957344262384,93957344262398],["v8::internal::compiler::JSOperatorBuilder::AsyncFunctionResolve()",93957344262448,93957344262462],["v8::internal::compiler::JSOperatorBuilder::GeneratorRestoreContinuation()",93957344262496,93957344262510],["v8::internal::compiler::JSOperatorBuilder::GeneratorRestoreInputOrDebugPos()",93957344262528,93957344262542],["v8::internal::compiler::JSOperatorBuilder::FulfillPromise()",93957344262560,93957344262574],["v8::internal::compiler::JSOperatorBuilder::PromiseResolve()",93957344262592,93957344262606],["v8::internal::compiler::JSOperatorBuilder::ResolvePromise()",93957344262624,93957344262638],["v8::internal::compiler::JSOperatorBuilder::ParseInt()",93957344262656,93957344262670],["v8::internal::compiler::JSOperatorBuilder::BitwiseNot(v8::internal::compiler::FeedbackSource const&)",93957344262688,93957344262863],["v8::internal::compiler::JSOperatorBuilder::Decrement(v8::internal::compiler::FeedbackSource const&)",93957344263040,93957344263215],["v8::internal::compiler::JSOperatorBuilder::Add(v8::internal::compiler::FeedbackSource const&)",93957344263392,93957344263567],["v8::internal::compiler::JSOperatorBuilder::Multiply(v8::internal::compiler::FeedbackSource const&)",93957344263744,93957344263919],["v8::internal::compiler::JSOperatorBuilder::Modulus(v8::internal::compiler::FeedbackSource const&)",93957344264096,93957344264271],["v8::internal::compiler::JSOperatorBuilder::BitwiseOr(v8::internal::compiler::FeedbackSource const&)",93957344264448,93957344264623],["v8::internal::compiler::JSOperatorBuilder::BitwiseAnd(v8::internal::compiler::FeedbackSource const&)",93957344264800,93957344264975],["v8::internal::compiler::JSOperatorBuilder::ShiftRight(v8::internal::compiler::FeedbackSource const&)",93957344265152,93957344265327],["v8::internal::compiler::JSOperatorBuilder::Equal(v8::internal::compiler::FeedbackSource const&)",93957344265504,93957344265679],["v8::internal::compiler::JSOperatorBuilder::LessThan(v8::internal::compiler::FeedbackSource const&)",93957344265872,93957344266047],["std::__1::num_put<wchar_t, std::__1::ostreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::do_put(std::__1::ostreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, wchar_t, long double) const",93957346706528,93957346707864],["std::__1::__time_put::__do_put(wchar_t*, wchar_t*&, tm const*, char, char) const",93957346720288,93957346720592],["std::__1::money_get<wchar_t, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::__do_get(std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >&, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, bool, std::__1::locale const&, unsigned int, unsigned int&, bool&, std::__1::ctype<wchar_t> const&, std::__1::unique_ptr<wchar_t, void (*)(void*)>&, wchar_t*&, wchar_t*)",93957346730000,93957346735206],["std::__1::__money_put<wchar_t>::__gather_info(bool, bool, std::__1::locale const&, std::__1::money_base::pattern&, wchar_t&, wchar_t&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >&, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >&, int&)",93957346743104,93957346743617],["std::__1::messages<wchar_t>::do_get(long, int, int, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> > const&) const",93957346746432,93957346747072],["std::__1::locale::__imp::~__imp()",93957346756256,93957346756284],["std::__1::locale::~locale()",93957346756608,93957346756642],["std::__1::locale::id::__init()",93957346757008,93957346757033],["std::__1::ctype<wchar_t>::do_scan_is(unsigned short, wchar_t const*, wchar_t const*) const",93957346757328,93957346757489],["std::__1::ctype<wchar_t>::do_toupper(wchar_t) const",93957346757680,93957346757784],["std::__1::ctype<wchar_t>::do_tolower(wchar_t) const",93957346757952,93957346758056],["std::__1::ctype<wchar_t>::do_widen(char const*, char const*, wchar_t*) const",93957346758224,93957346758543],["std::__1::ctype<wchar_t>::do_narrow(wchar_t const*, wchar_t const*, char, char*) const",93957346758576,93957346759214],["std::__1::ctype<char>::~ctype()",93957346759280,93957346759341],["std::__1::ctype<char>::do_toupper(char*, char const*) const",93957346759456,93957346759611],["std::__1::ctype<char>::do_tolower(char*, char const*) const",93957346759728,93957346759883],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__shrink_or_extend(unsigned long)",93957346784688,93957346785025],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::copy(char*, unsigned long, unsigned long) const",93957346785440,93957346785538],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::find(char, unsigned long) const",93957346785744,93957346785837],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >& std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__assign_no_alias<false>(char const*, unsigned long)",93957346785904,93957346786190],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::push_back(char)",93957346786368,93957346786641],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::rfind(char, unsigned long) const",93957346787040,93957346787118],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__erase_external_with_move(unsigned long, unsigned long)",93957346787456,93957346787572],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::compare(unsigned long, unsigned long, char const*, unsigned long) const",93957346787728,93957346787850],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::resize(unsigned long, char)",93957346787904,93957346787966],["std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >::__grow_by(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long)",93957346788320,93957346788615],["std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >::append(wchar_t const*, unsigned long)",93957346788800,93957346788976],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > std::__1::operator+<char, std::__1::char_traits<char>, std::__1::allocator<char> >(char const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)",93957346789136,93957346789398],["std::__1::to_string(long)",93957346789728,93957346790050],["std::__1::to_string(unsigned long)",93957346790320,93957346790578],["std::__1::error_category::default_error_condition(int) const",93957346790640,93957346790651],["std::__1::error_category::equivalent(std::__1::error_code const&, int) const",93957346790704,93957346790724],["std::__1::__generic_error_category::name() const",93957346791024,93957346791037],["std::__1::__system_error_category::name() const",93957346791136,93957346791149],["std::__1::__system_error_category::default_error_condition(int) const",93957346791248,93957346791364],["std::__1::system_error::system_error(std::__1::error_code, char const*)",93957346791568,93957346791881],["std::__1::system_error::~system_error()",93957346791904,93957346791932],["std::__1::__vector_base_common<true>::__throw_length_error() const",93957346792080,93957346792096],["abort_message",93957346792112,93957346792288],["__cxxabiv1::__isOurExceptionClass(_Unwind_Exception const*)",93957346792352,93957346792381],["__cxa_free_exception",93957346792464,93957346792487],["__cxxabiv1::exception_cleanup_func(_Unwind_Reason_Code, _Unwind_Exception*)",93957346792624,93957346792710],["__cxa_begin_catch",93957346792752,93957346792870],["__cxa_rethrow",93957346793072,93957346793265],["__cxa_get_globals",93957346793312,93957346793453],["__cxxabiv1::(anonymous namespace)::construct_()",93957346793520,93957346793563],["std::get_unexpected()",93957346793616,93957346793632],["std::__unexpected(void (*)())",93957346793712,93957346793732],["std::get_new_handler()",93957346793840,93957346793853],["__cxa_call_unexpected",93957346796032,93957346796588],["__cxxabiv1::__aligned_malloc_with_fallback(unsigned long)",93957346797184,93957346797477],["__cxxabiv1::__class_type_info::has_unambiguous_public_base(__cxxabiv1::__dynamic_cast_info*, void*, int) const",93957346798240,93957346798310],["__cxxabiv1::__vmi_class_type_info::search_below_dst(__cxxabiv1::__dynamic_cast_info*, void const*, int, bool) const",93957346798976,93957346799849],["__cxxabiv1::__si_class_type_info::search_above_dst(__cxxabiv1::__dynamic_cast_info*, void const*, void const*, int, bool) const",93957346800928,93957346801144],["std::bad_alloc::what() const",93957346801344,93957346801357],["std::runtime_error::~runtime_error()",93957346801568,93957346801637],["std::bad_typeid::what() const",93957346801696,93957346801709],["__cxa_demangle",93957346802144,93957346803865],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::SpecialName, char const (&) [34], (anonymous namespace)::itanium_demangle::Node*&>(char const (&) [34], (anonymous namespace)::itanium_demangle::Node*&)",93957346806720,93957346806894],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::EnableIfAttr, (anonymous namespace)::itanium_demangle::NodeArray>((anonymous namespace)::itanium_demangle::NodeArray&&)",93957346816064,93957346816202],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::SpecialName, char const (&) [14], (anonymous namespace)::itanium_demangle::Node*&>(char const (&) [14], (anonymous namespace)::itanium_demangle::Node*&)",93957346816784,93957346816945],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::CtorVtableSpecialName, (anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::Node*&>((anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::Node*&)",93957346817792,93957346817940],["(anonymous namespace)::itanium_demangle::SpecialName::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346818480,93957346818643],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::NameWithTemplateArgs, (anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::Node*&>((anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::Node*&)",93957346821504,93957346821652],["(anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::parseUnqualifiedName((anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::NameState*)",93957346822928,93957346824646],["(anonymous namespace)::itanium_demangle::NestedName::getBaseName() const",93957346824992,93957346825007],["(anonymous namespace)::itanium_demangle::ForwardTemplateReference::hasArraySlow((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346825376,93957346825450],["(anonymous namespace)::itanium_demangle::ForwardTemplateReference::printRight((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346825664,93957346825716],["(anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::parseFunctionParam()",93957346832656,93957346833320],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::CastExpr, char const (&) [11], (anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::Node*&>(char const (&) [11], (anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::Node*&)",93957346834944,93957346835116],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::CastExpr, char const (&) [13], (anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::Node*&>(char const (&) [13], (anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::Node*&)",93957346836256,93957346836428],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::ArraySubscriptExpr, (anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::Node*&>((anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::Node*&)",93957346838720,93957346838868],["(anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::parseNewExpr()",93957346839872,93957346840977],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::CastExpr, char const (&) [12], (anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::Node*&>(char const (&) [12], (anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::Node*&)",93957346841536,93957346841708],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::NodeArrayNode, (anonymous namespace)::itanium_demangle::NodeArray>((anonymous namespace)::itanium_demangle::NodeArray&&)",93957346842192,93957346842330],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::BoolExpr, int>(int&&)",93957346842880,93957346843018],["(anonymous namespace)::itanium_demangle::FloatLiteralImpl<float>::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346844032,93957346844559],["(anonymous namespace)::itanium_demangle::FunctionParam::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346846656,93957346846845],["(anonymous namespace)::itanium_demangle::PrefixExpr::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346849760,93957346850071],["(anonymous namespace)::itanium_demangle::NodeArray (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::makeNodeArray<(anonymous namespace)::itanium_demangle::Node**>((anonymous namespace)::itanium_demangle::Node**, (anonymous namespace)::itanium_demangle::Node**)",93957346850912,93957346851133],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::NameType, (anonymous namespace)::itanium_demangle::StringView&>((anonymous namespace)::itanium_demangle::StringView&)",93957346853408,93957346853546],["(anonymous namespace)::itanium_demangle::StdQualifiedName::getBaseName() const",93957346857072,93957346857087],["(anonymous namespace)::itanium_demangle::ConditionalExpr::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346859744,93957346860166],["(anonymous namespace)::itanium_demangle::AbiTagAttr::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346861648,93957346861925],["(anonymous namespace)::itanium_demangle::ParameterPack::hasRHSComponentSlow((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346863792,93957346863870],["(anonymous namespace)::itanium_demangle::StdQualifiedName::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346864608,93957346864760],["(anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::parseClassEnumType()",93957346869616,93957346869949],["(anonymous namespace)::itanium_demangle::FunctionType::printRight((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346871152,93957346871909],["(anonymous namespace)::itanium_demangle::PixelVectorType::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346872912,93957346873196],["(anonymous namespace)::itanium_demangle::PointerToMemberType::printRight((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346874720,93957346874879],["v8::base::bits::RoundUpToPowerOfTwo64(unsigned long)",93957346876976,93957346877022],["v8::base::BoundedPageAllocator::ReserveForSharedMemoryMapping(void*, unsigned long)",93957346877824,93957346878045],["v8::base::BoundedPageAllocator::GetRandomMmapAddr()",93957346878576,93957346878591],["v8::base::ieee754::acos(double)",93957346879952,93957346880714],["v8::base::ieee754::cos(double)",93957346884624,93957346885929],["v8::base::ieee754::sin(double)",93957346893584,93957346894745],["V8_Fatal(char const*, ...)",93957346898608,93957346898946],["v8::base::PageAllocator::ReleasePages(void*, unsigned long, unsigned long)",93957346899312,93957346899332],["v8::base::ConditionVariable::ConditionVariable()",93957346899712,93957346899779],["v8::base::SharedMutex::SharedMutex()",93957346900080,93957346900092],["v8::base::Semaphore::Wait()",93957346900240,93957346900275],["v8::base::Time::ToJsTime() const",93957346900896,93957346900953],["v8::base::RegionAllocator::Merge(std::__1::__tree_const_iterator<v8::base::RegionAllocator::Region*, std::__1::__tree_node<v8::base::RegionAllocator::Region*, void*>*, long>, std::__1::__tree_const_iterator<v8::base::RegionAllocator::Region*, std::__1::__tree_node<v8::base::RegionAllocator::Region*, void*>*, long>)",93957346903024,93957346903177],["v8::base::RandomNumberGenerator::SetSeed(long)",93957346904928,93957346905073],["v8::base::RandomNumberGenerator::MurmurHash3(unsigned long)",93957346908688,93957346908752],["v8::base::OS::AllocateShared(unsigned long, v8::base::OS::MemoryPermission)",93957346910000,93957346910090],["v8::base::OS::MemoryMappedFile::create(char const*, unsigned long, void*)",93957346910704,93957346910921],["v8::base::PosixTimezoneCache::DaylightSavingsOffset(double)",93957346911360,93957346911455],["v8::base::OS::FPrint(_IO_FILE*, char const*, ...)",93957346911808,93957346911951],["v8::base::Thread::~Thread()",93957346912608,93957346912663],["v8::base::OS::CreateTimezoneCache()",93957346913168,93957346913198],["v8::platform::NewDefaultJobHandle(v8::Platform*, v8::TaskPriority, std::__1::unique_ptr<v8::JobTask, std::__1::default_delete<v8::JobTask> >, unsigned long)",93957346914992,93957346915226],["v8::platform::DefaultPlatform::CallOnWorkerThread(std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> >)",93957346917792,93957346917809],["v8::base::debug::DisableSignalStackDump()",93957346919824,93957346919837],["v8::platform::DefaultJobHandle::Cancel()",93957346923472,93957346923640],["std::__1::priority_queue<v8::platform::DefaultForegroundTaskRunner::DelayedEntry, std::__1::vector<v8::platform::DefaultForegroundTaskRunner::DelayedEntry, std::__1::allocator<v8::platform::DefaultForegroundTaskRunner::DelayedEntry> >, v8::platform::DefaultForegroundTaskRunner::DelayedEntryCompare>::pop()",93957346925184,93957346925704],["std::__1::__deque_iterator<std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >*, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >&, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >**, long, 0l> std::__1::move_backward<std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >*, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >&, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >**, long, 0l, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >*, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >&, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >**, long, 0l>(std::__1::__deque_iterator<std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >*, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >&, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >**, long, 0l>, std::__1::__deque_iterator<std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >*, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >&, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >**, long, 0l>, std::__1::__deque_iterator<std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >*, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >&, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >**, long, 0l>)",93957346930464,93957346930785],["v8::platform::DelayedTaskQueue::GetNext()",93957346933968,93957346934932],["v8::platform::tracing::TraceObject::~TraceObject()",93957346942272,93957346942354],["v8::platform::tracing::TracingController::GetCategoryGroupName(unsigned char const*)",93957346946736,93957346946763],["icu_68::getCalendarService(UErrorCode&)",93957346949680,93957346949951],["icu_68::Calendar::setTimeZone(icu_68::TimeZone const&)",93957346955104,93957346955166],["icu_68::Calendar::computeFields(UErrorCode&)",93957346959552,93957346960236],["icu_68::Calendar::getWeekendTransition(UCalendarDaysOfWeek, UErrorCode&) const",93957346971056,93957346971109],["icu_68::Calendar::handleGetExtendedYearFromWeekFields(int, int)",93957346976064,93957346977017],["icu_68::LocaleCacheKey<icu_68::SharedCalendar>::~LocaleCacheKey()",93957346983792,93957346983842],["icu_68::initializeSystemDefaultCentury()",93957346984592,93957346984909],["icu_68::ChineseCalendar::add(UCalendarDateFields, int, UErrorCode&)",93957346986368,93957346986514],["icu_68::ChineseCalendar::getDynamicClassID() const",93957346990400,93957346990413],["icu_68::CalendarCache::~CalendarCache()",93957346993824,93957346993871],["icu_68::Collator::getTailoredSet(UErrorCode&) const",93957346997136,93957346997194],["icu_68::CollationRoot::load(UErrorCode&)",93957346998752,93957346999043],["icu_68::CollationSettings::~CollationSettings()",93957347001040,93957347001096],["icu_68::CollationData::getLastPrimaryForGroup(int) const",93957347005632,93957347005709],["icu_68::CollationFastLatin::compareUTF8(unsigned short const*, unsigned short const*, int, unsigned char const*, int, unsigned char const*, int)",93957347016880,93957347021656],["icu_68::CurrencyUnit::CurrencyUnit(icu_68::ConstChar16Ptr, UErrorCode&)",93957347023072,93957347023319],["icu_68::DateFmtBestPattern::~DateFmtBestPattern()",93957347024944,93957347024994],["icu_68::DateFormat::createTimeInstance(icu_68::DateFormat::EStyle, icu_68::Locale const&)",93957347027024,93957347027042],["icu_68::DateFormat::isLenient() const",93957347028544,93957347028662],["icu_68::DecimalFormat::DecimalFormat(icu_68::DecimalFormatSymbols const*, UErrorCode&)",93957347029904,93957347031138],["icu_68::DecimalFormat::getMultiplier() const",93957347034080,93957347034142],["icu_68::DecimalFormat::format(long, icu_68::UnicodeString&, icu_68::FieldPosition&) const",93957347038272,93957347038772],["icu_68::DecimalFormat::getPositiveSuffix(icu_68::UnicodeString&) const",93957347043360,93957347043435],["icu_68::DecimalFormat::setScientificNotation(signed char)",93957347045056,93957347045119],["icu_68::DecimalFormat::applyLocalizedPattern(icu_68::UnicodeString const&, UErrorCode&)",93957347046976,93957347047137],["icu_68::CurrencyAmount::~CurrencyAmount()",93957347049904,93957347049932],["icu_68::DecimalFormatSymbols::getDynamicClassID() const",93957347054176,93957347054189],["icu_68::(anonymous namespace)::CurrencySpacingSink::put(char const*, icu_68::ResourceValue&, signed char, UErrorCode&)",93957347064128,93957347065012],["icu_68::DateFormatSymbols::disposeZoneStrings()",93957347111040,93957347111360],["icu_68::(anonymous namespace)::CalendarDataSink::~CalendarDataSink()",93957347115984,93957347116255],["icu_68::LocaleCacheKey<icu_68::SharedDateFormatSymbols>::clone() const",93957347124080,93957347124174],["icu_68::DateIntervalFormat::format(icu_68::Formattable const&, icu_68::UnicodeString&, icu_68::FieldPosition&, UErrorCode&) const",93957347127408,93957347127558],["icu_68::DateIntervalFormat::setFallbackPattern(UCalendarDateFields, icu_68::UnicodeString const&, UErrorCode&)",93957347137936,93957347138150],["icu_68::DateIntervalInfo::clone() const",93957347147952,93957347148116],["icu_68::DateIntervalInfo::DateIntervalSink::validateAndProcessPatternLetter(char const*)",93957347152224,93957347152318],["icu_68::DateTimePatternGenerator::addICUPatterns(icu_68::Locale const&, UErrorCode&)",93957347159296,93957347159837],["icu_68::DateTimePatternGenerator::AppendItemFormatsSink::fillInMissing()",93957347167712,93957347167919],["icu_68::DateTimePatternGenerator::getFieldAndWidthIndices(char const*, UDateTimePGDisplayWidth*) const",93957347178752,93957347179374],["icu_68::(anonymous namespace)::AllowedHourFormatsSink::getHourFormatFromUnicodeString(icu_68::UnicodeString const&)",93957347185616,93957347186138],["icu_68::Formattable::Formattable(long)",93957347187488,93957347187579],["icu_68::Formattable::adoptArray(icu_68::Formattable*, int)",93957347189664,93957347189714],["icu_68::NumberingSystem::getDescription() const",93957347190784,93957347190812],["icu_68::FormattedValueStringBuilderImpl::nextFieldPosition(icu_68::FieldPosition&, UErrorCode&) const",93957347194784,93957347195141],["icu_68::FormattedStringBuilder::insert(int, icu_68::UnicodeString const&, int, int, icu_68::FormattedStringBuilder::Field, UErrorCode&)",93957347197744,93957347198066],["icu_68::FieldPositionOnlyHandler::FieldPositionOnlyHandler(icu_68::FieldPosition&)",93957347200560,93957347200593],["icu_68::FieldPositionIterator::next(icu_68::FieldPosition&)",93957347201952,93957347202138],["icu_68::GregorianCalendar::roll(UCalendarDateFields, int, UErrorCode&)",93957347204768,93957347205826],["icu_68::Grego::dayToFields(double, int&, int&, int&, int&, int&)",93957347207424,93957347207976],["icu_68::HebrewCalendar::handleComputeFields(int, UErrorCode&)",93957347210432,93957347211205],["icu_68::initializeSystemDefaultCentury()",93957347213632,93957347213960],["icu_68::IslamicCalendar::initializeSystemDefaultCentury()",93957347217552,93957347217871],["icu_68::EraRules::initCurrentEra()",93957347219344,93957347219620],["icu_68::ListFormatter::ListPatternsSink::~ListPatternsSink()",93957347222928,93957347223003],["icu_68::(anonymous namespace)::ContextualHandler::~ContextualHandler()",93957347229536,93957347229621],["icu_68::MeasureUnit::MeasureUnit(icu_68::MeasureUnit&&)",93957347231648,93957347231694],["icu_68::Measure::getDynamicClassID() const",93957347234960,93957347234973],["icu_68::number::impl::DecimalQuantity::~DecimalQuantity()",93957347239328,93957347239381],["icu_68::number::impl::DecimalQuantity::setToDecNum(icu_68::number::impl::DecNum const&, UErrorCode&)",93957347242208,93957347242357],["icu_68::number::impl::DecimalQuantity::readLongToBcd(long)",93957347244432,93957347244854],["icu_68::number::impl::DecimalQuantity::appendDigit(signed char, int, bool)",93957347252288,93957347252561],["icu_68::double_conversion::Bignum::Square()",93957347260512,93957347261794],["bool icu_68::double_conversion::Advance<unsigned short const*>(unsigned short const**, unsigned short, int, unsigned short const*&)",93957347279584,93957347279782],["icu_68::number::NumberFormatterSettings<icu_68::number::LocalizedNumberFormatter>::unit(icu_68::MeasureUnit const&) const &",93957347289440,93957347289763],["icu_68::number::LocalizedNumberFormatter::LocalizedNumberFormatter(icu_68::number::LocalizedNumberFormatter&&)",93957347295200,93957347295456],["icu_68::number::impl::NumberFormatterImpl::NumberFormatterImpl(icu_68::number::impl::MacroProps const&, UErrorCode&)",93957347300176,93957347300609],["icu_68::MeasureUnitImpl::forMeasureUnit(icu_68::MeasureUnit const&, icu_68::MeasureUnitImpl&, UErrorCode&)",93957347309008,93957347309623],["icu_68::SingleUnitImpl* icu_68::MemoryPool<icu_68::SingleUnitImpl, 8>::create<>()",93957347317072,93957347317276],["icu_68::number::impl::Grouper::setLocaleData(icu_68::number::impl::ParsedPatternInfo const&, icu_68::Locale const&)",93957347323232,93957347323581],["icu_68::number::impl::LongNameHandler::forCurrencyLongNames(icu_68::Locale const&, icu_68::CurrencyUnit const&, icu_68::PluralRules const*, icu_68::number::impl::MicroPropsGenerator const*, UErrorCode&)",93957347329392,93957347330468],["non-virtual thunk to icu_68::number::impl::MixedUnitLongNameHandler::~MixedUnitLongNameHandler()",93957347336864,93957347337029],["icu_68::number::impl::PropertiesAffixPatternProvider::containsSymbolType(icu_68::number::impl::AffixPatternType, UErrorCode&) const",93957347343872,93957347343989],["icu_68::number::impl::CurrencySymbols::getNarrowCurrencySymbol(UErrorCode&) const",93957347345232,93957347345353],["icu_68::TimeZoneRule::getDSTSavings() const",93957347347072,93957347347081],["icu_68::number::impl::CurrencySpacingEnabledModifier::applyCurrencySpacingAffix(icu_68::FormattedStringBuilder&, int, icu_68::number::impl::CurrencySpacingEnabledModifier::EAffix, icu_68::DecimalFormatSymbols const&, UErrorCode&)",93957347350240,93957347350964],["icu_68::number::Scale::powerOfTen(int)",93957347352144,93957347352170],["icu_68::number::FormattedNumber::~FormattedNumber()",93957347353344,93957347353400],["icu_68::number::impl::ImmutablePatternModifier::processQuantity(icu_68::number::impl::DecimalQuantity&, icu_68::number::impl::MicroProps&, UErrorCode&) const",93957347356352,93957347356441],["non-virtual thunk to icu_68::number::impl::MutablePatternModifier::~MutablePatternModifier()",93957347358912,93957347358926],["icu_68::number::impl::ParsedPatternInfo::hasCurrencySign() const",93957347360624,93957347360666],["icu_68::number::impl::PatternStringUtils::escapePaddingString(icu_68::UnicodeString, icu_68::UnicodeString&, int, UErrorCode&)",93957347369424,93957347370041],["icu_68::number::Precision::constructIncrement(double, int)",93957347376496,93957347376711],["icu_68::number::impl::ScientificModifier::getCodePointCount() const",93957347378992,93957347379003],["icu_68::number::impl::enum_to_stem_string::signDisplay(UNumberSignDisplay, icu_68::UnicodeString&)",93957347380688,93957347380957],["icu_68::number::impl::blueprint_helpers::parseScaleOption(icu_68::StringSegment const&, icu_68::number::impl::MacroProps&, UErrorCode&)",93957347394752,93957347395288],["icu_68::number::NumberFormatterSettings<icu_68::number::LocalizedNumberFormatter>::toSkeleton(UErrorCode&) const",93957347399600,93957347399935],["icu_68::number::impl::Usage::operator=(icu_68::number::impl::Usage&&)",93957347400944,93957347401012],["(anonymous namespace)::doGetPattern(UResourceBundle*, char const*, char const*, UErrorCode&, UErrorCode&)",93957347405520,93957347405882],["decSetCoeff(decNumber*, decContext*, unsigned char const*, int, int*, unsigned int*)",93957347408928,93957347410520],["decApplyRound(decNumber*, decContext*, int, unsigned int*)",93957347422448,93957347423168],["icu_68::NumberFormat::format(icu_68::Formattable const&, icu_68::UnicodeString&, icu_68::FieldPosition&, UErrorCode&) const",93957347424992,93957347425475],["icu_68::NumberFormat::setGroupingUsed(signed char)",93957347427616,93957347427629],["icu_68::UnicodeString::setTo(icu_68::UnicodeString const&, int)",93957347430800,93957347430929],["icu_68::numparse::impl::CombinedCurrencyMatcher::~CombinedCurrencyMatcher()",93957347434000,93957347434169],["icu_68::numparse::impl::DecimalMatcher::smokeTest(icu_68::StringSegment const&) const",93957347445952,93957347446343],["icu_68::numparse::impl::AffixTokenMatcherWarehouse::AffixTokenMatcherWarehouse(icu_68::numparse::impl::AffixTokenMatcherSetupData const*)",93957347449024,93957347449429],["icu_68::numparse::impl::AffixMatcher::toString() const",93957347456272,93957347456823],["icu_68::numparse::impl::ScientificMatcher::ScientificMatcher(icu_68::DecimalFormatSymbols const&, icu_68::number::impl::Grouper const&)",93957347459840,93957347460094],["icu_68::numparse::impl::PlusSignMatcher::isDisabled(icu_68::numparse::impl::ParsedNumber const&) const",93957347461920,93957347461943],["icu_68::numparse::impl::RequireAffixValidator::postProcess(icu_68::numparse::impl::ParsedNumber&) const",93957347462912,93957347462937],["icu_68::NumberingSystem::createInstance(int, signed char, icu_68::UnicodeString const&, UErrorCode&)",93957347463520,93957347463905],["icu_68::OlsonTimeZone::getHistoricalOffset(double, signed char, int, int, int&, int&) const",93957347468608,93957347469458],["icu_68::BasicTimeZone::BasicTimeZone(icu_68::BasicTimeZone const&)",93957347475952,93957347475983],["icu_68::PersianCalendar::handleGetMonthLength(int, int) const",93957347480608,93957347480723],["icu_68::PluralRules::clone() const",93957347482336,93957347482424],["icu_68::PluralRuleParser::getNextToken(UErrorCode&)",93957347490064,93957347490998],["icu_68::PluralKeywordEnumeration::snext(UErrorCode&)",93957347494352,93957347494392],["icu_68::PluralAvailableLocalesEnumeration::next(int*, UErrorCode&)",93957347495920,93957347496048],["icu_68::RuleBasedNumberFormat::getDecimalFormatSymbols() const",93957347502576,93957347502589],["icu_68::RuleBasedNumberFormat::format(double, icu_68::UnicodeString&, icu_68::FieldPosition&) const",93957347506800,93957347506850],["icu_68::RuleBasedNumberFormat::initCapitalizationContextInfo(icu_68::Locale const&)",93957347512384,93957347512693],["icu_68::PluralFormat::format(icu_68::Formattable const&, double, icu_68::UnicodeString&, icu_68::FieldPosition&, UErrorCode&) const",93957347514560,93957347515683],["icu_68::NFRule::setBaseValue(long, UErrorCode&)",93957347522912,93957347523106],["icu_68::NFRuleSet::parseRules(icu_68::UnicodeString&, UErrorCode&)",93957347534032,93957347534611],["icu_68::util64_tou(long, char16_t*, unsigned int, unsigned int, signed char)",93957347539968,93957347540265],["icu_68::MultiplierSubstitution::operator==(icu_68::NFSubstitution const&) const",93957347543824,93957347543960],["icu_68::NumeratorSubstitution::doParse(icu_68::UnicodeString const&, icu_68::ParsePosition&, double, double, signed char, unsigned int, icu_68::Formattable&) const",93957347547520,93957347548493],["icu_68::IntegralPartSubstitution::calcUpperBound(double) const",93957347549040,93957347549054],["icu_68::CollationElementIterator::CollationElementIterator(icu_68::CharacterIterator const&, icu_68::RuleBasedCollator const*, UErrorCode&)",93957347550928,93957347551065],["icu_68::CollationIterator::nextCE32FromDiscontiguousContraction(icu_68::CollationData const*, icu_68::UCharsTrie&, unsigned int, int, int, UErrorCode&)",93957347560320,93957347562745],["icu_68::ContractionsAndExpansions::handleCE32(int, int, unsigned int)",93957347570032,93957347571092],["icu_68::CollationBuilder::findOrInsertNodeForPrimary(unsigned int, UErrorCode&)",93957347580944,93957347581284],["icu_68::CEFinalizer::modifyCE32(unsigned int) const",93957347591072,93957347591164],["icu_68::CollationRuleParser::parseSetting(UErrorCode&)",93957347595888,93957347600876],["uprv_deleteConditionalCE32_68",93957347610144,93957347610182],["icu_68::CollationDataBuilder::~CollationDataBuilder()",93957347613872,93957347614013],["icu_68::CollationDataBuilder::getJamoCE32s(unsigned int*, UErrorCode&)",93957347621584,93957347622173],["icu_68::CollationFastLatinBuilder::loadGroups(icu_68::CollationData const&, UErrorCode&)",93957347628400,93957347628765],["icu_68::CollationRootElements::getTertiaryBefore(unsigned int, unsigned int, unsigned int) const",93957347635504,93957347635805],["icu_68::RuleBasedTimeZone::getOffsetInternal(double, signed char, int, int, int&, int&, UErrorCode&) const",93957347640656,93957347641090],["region_cleanup()",93957347652240,93957347652253],["icu_68::RelativeDateTimeFormatter::init(icu_68::NumberFormat*, icu_68::BreakIterator*, UErrorCode&)",93957347656480,93957347657106],["icu_68::RelativeDateFormat::getDynamicClassID() const",93957347663696,93957347663709],["icu_68::RelativeDateFormat::getDateFormatSymbols() const",93957347669280,93957347669301],["icu_68::RuleBasedCollator::getRules() const",93957347671936,93957347671950],["icu_68::RuleBasedCollator::compare(char16_t const*, int, char16_t const*, int, UErrorCode&) const",93957347677632,93957347677795],["icu_68::RuleBasedCollator::internalNextSortKeyPart(UCharIterator*, unsigned int*, unsigned char*, int, UErrorCode&) const",93957347686416,93957347687790],["icu_68::CollationKeys::writeSortKeyUpToQuaternary(icu_68::CollationIterator&, signed char const*, icu_68::CollationSettings const&, icu_68::SortKeyByteSink&, icu_68::Collation::Level, icu_68::CollationKeys::LevelCallback&, signed char, UErrorCode&)",93957347691520,93957347702209],["icu_68::SimpleTimeZone::setStartYear(int)",93957347706512,93957347706525],["icu_68::SimpleTimeZone::initTransitionRules(UErrorCode&)",93957347710544,93957347712418],["icu_68::SimpleDateFormat::initFastNumberFormatters(UErrorCode&)",93957347721280,93957347721505],["icu_68::SimpleDateFormat::isAtNumericField(icu_68::UnicodeString const&, int)",93957347731840,93957347732043],["icu_68::SimpleDateFormat::applyLocalizedPattern(icu_68::UnicodeString const&, UErrorCode&)",93957347750208,93957347750346],["icu_68::MessageFormat::copyObjects(icu_68::MessageFormat const&, UErrorCode&)",93957347753152,93957347753765],["icu_68::MessageFormat::adoptFormat(icu_68::UnicodeString const&, icu_68::Format*, UErrorCode&)",93957347757472,93957347758101],["icu_68::MessageFormat::findFirstPluralNumberArg(int, icu_68::UnicodeString const&) const",93957347767216,93957347767502],["icu_68::number::impl::MacroProps::~MacroProps()",93957347772912,93957347772996],["icu_68::DayPeriodRules::getInstance(icu_68::Locale const&, UErrorCode&)",93957347776560,93957347777066],["icu_68::CollationKey::setToBogus()",93957347784656,93957347784679],["icu_68::StringSegment::codePointAt(int) const",93957347786016,93957347786035],["icu_68::initializeSystemDefaultCentury()",93957347787600,93957347787901],["icu_68::TimeZone::getOffset(double, signed char, int&, int&, UErrorCode&) const",93957347790288,93957347790713],["icu_68::TimeZone::getDSTSavings() const",93957347794864,93957347794888],["icu_68::GMTOffsetField::createText(icu_68::UnicodeString const&, UErrorCode&)",93957347799760,93957347799988],["icu_68::TimeZoneFormat::formatGeneric(icu_68::TimeZone const&, int, double, icu_68::UnicodeString&) const",93957347808320,93957347808600],["icu_68::TimeZoneFormat::parseZoneID(icu_68::UnicodeString const&, icu_68::ParsePosition&, icu_68::UnicodeString&) const",93957347816864,93957347817379],["icu_68::ZoneIdMatchHandler::handleMatch(int, icu_68::CharacterNode const*, UErrorCode&)",93957347826944,93957347827027],["icu_68::UnicodeString::caseCompare(icu_68::UnicodeString const&, unsigned int) const",93957347833760,93957347833885],["icu_68::TimeZoneNamesDelegate::TimeZoneNamesDelegate(icu_68::Locale const&, UErrorCode&)",93957347838352,93957347838988],["icu_68::TimeZoneNames::createInstance(icu_68::Locale const&, UErrorCode&)",93957347839728,93957347839814],["icu_68::TextTrieMap::~TextTrieMap()",93957347841712,93957347841925],["icu_68::MetaZoneIDsEnumeration::~MetaZoneIDsEnumeration()",93957347844736,93957347844795],["icu_68::TimeZoneNamesImpl::getMetaZoneID(icu_68::UnicodeString const&, double, icu_68::UnicodeString&) const",93957347848480,93957347848510],["icu_68::TimeZoneNamesImpl::getDefaultExemplarLocationName(icu_68::UnicodeString const&, icu_68::UnicodeString&)",93957347853568,93957347854165],["icu_68::TimeZoneNamesImpl::ZoneStringsLoader::put(char const*, icu_68::ResourceValue&, signed char, UErrorCode&)",93957347859136,93957347859431],["icu_68::InitialTimeZoneRule::isEquivalentTo(icu_68::TimeZoneRule const&) const",93957347861152,93957347861217],["icu_68::TimeArrayTimeZoneRule::initStartTimes(double const*, int, UErrorCode&)",93957347863328,93957347863562],["icu_68::TimeZoneTransition::operator=(icu_68::TimeZoneTransition const&)",93957347864896,93957347865005],["icu_68::CollationLoader::loadFromLocale(UErrorCode&)",93957347867808,93957347868483],["icu_68::UIterCollationIterator::getOffset() const",93957347873344,93957347873367],["icu_68::FCDUIterCollationIterator::previousSegment(UErrorCode&)",93957347876752,93957347877582],["icu_68::units::UnitConverter::UnitConverter(icu_68::MeasureUnitImpl const&, icu_68::MeasureUnitImpl const&, icu_68::units::ConversionRates const&, UErrorCode&)",93957347885984,93957347886982],["icu_68::units::UnitsRouter::parseSkeletonToPrecision(icu_68::UnicodeString, UErrorCode&)",93957347896592,93957347896979],["icu_68::FCDUTF16CollationIterator::~FCDUTF16CollationIterator()",93957347901504,93957347901557],["icu_68::UTF8CollationIterator::nextCodePoint(UErrorCode&)",93957347905600,93957347905941],["icu_68::FCDUTF8CollationIterator::forwardNumCodePoints(int, UErrorCode&)",93957347912592,93957347912660],["icu_68::ZoneMeta::createCustomTimeZone(int)",93957347919568,93957347919815],["icu_68::BreakIterator::getRuleStatusVec(int*, int, UErrorCode&)",93957347923808,93957347923846],["icu_68::CheckedArrayByteSink::Append(char const*, int)",93957347925952,93957347926066],["icu_68::BytesTrieBuilder::BTLinearMatchNode::operator==(icu_68::StringTrieBuilder::Node const&) const",93957347928208,93957347928270],["icu_68::CanonicalIterator::~CanonicalIterator()",93957347932352,93957347932408],["icu_68::CharString::append(char, UErrorCode&)",93957347939536,93957347939605],["T_CString_integerToString_68",93957347941088,93957347941277],["icu_68::SimpleFilteredSentenceBreakIterator::SimpleFilteredSentenceBreakIterator(icu_68::BreakIterator*, icu_68::UCharsTrie*, icu_68::UCharsTrie*, UErrorCode&)",93957347944688,93957347944958],["icu_68::SimpleFilteredBreakIteratorBuilder::suppressBreakAfter(icu_68::UnicodeString const&, UErrorCode&)",93957347947680,93957347947818],["icu_68::LoadedNormalizer2Impl::load(char const*, char const*, UErrorCode&)",93957347950480,93957347950651],["icu_68::LocaleBuilder::~LocaleBuilder()",93957347953136,93957347953223],["icu_68::LocaleMatcher::LocaleMatcher(icu_68::LocaleMatcher::Builder const&, UErrorCode&)",93957347957248,93957347959876],["icu_68::LocaleBased::getLocaleID(ULocDataLocaleType, UErrorCode&) const",93957347963136,93957347963177],["icu_68::LocaleDistance::isParadigmLSR(icu_68::LSR const&) const",93957347972432,93957347972515],["icu_68::LocaleDisplayNamesImpl::variantDisplayName(char const*, icu_68::UnicodeString&, signed char) const",93957347981712,93957347981954],["icu_68::Locale::init(char const*, signed char)",93957347985200,93957347986699],["icu_68::Locale::initBaseName(UErrorCode&)",93957347999440,93957347999627],["icu_68::Locale::getKeywordValue(char const*, char*, int, UErrorCode&) const",93957348005504,93957348005518],["icu_68::(anonymous namespace)::cleanupKnownCanonicalized()",93957348010000,93957348010033],["icu_68::XLikelySubtags::makeMaximizedLsrFrom(icu_68::Locale const&, UErrorCode&) const",93957348023344,93957348023469],["icu_68::LSR::operator=(icu_68::LSR&&)",93957348030272,93957348030392],["icu_68::MessagePattern::validateArgumentName(icu_68::UnicodeString const&)",93957348036704,93957348036983],["icu_68::Normalizer2::isNormalizedUTF8(icu_68::StringPiece, UErrorCode&) const",93957348043584,93957348043698],["icu_68::Normalizer2WithImpl::getRawDecomposition(int, icu_68::UnicodeString&) const",93957348045968,93957348046143],["icu_68::ComposeNormalizer2::quickCheck(icu_68::UnicodeString const&, UErrorCode&) const",93957348047712,93957348047835],["icu_68::NoopNormalizer2::isNormalizedUTF8(icu_68::StringPiece, UErrorCode&) const",93957348049120,93957348049132],["icu_68::Normalizer2Impl::ensureCanonIterData(UErrorCode&) const",93957348054112,93957348054211],["icu_68::Normalizer2Impl::compose(char16_t const*, char16_t const*, signed char, signed char, icu_68::ReorderingBuffer&, UErrorCode&) const",93957348064128,93957348067120],["icu_68::InitCanonIterData::doInit(icu_68::Normalizer2Impl*, UErrorCode&)",93957348078896,93957348079302],["u_getPropertyValueName_68",93957348082960,93957348082970],["uprv_trunc_68",93957348083648,93957348083731],["u_versionFromString_68",93957348087472,93957348087680],["icu_68::RuleBasedBreakIterator::first()",93957348090080,93957348090153],["icu_68::RuleBasedBreakIterator::getLanguageBreakEngine(int)",93957348096976,93957348097571],["icu_68::DictionaryBreakEngine::handles(int) const",93957348099792,93957348099806],["icu_68::KhmerBreakEngine::~KhmerBreakEngine()",93957348106768,93957348106886],["icu_68::RuleBasedBreakIterator::DictionaryCache::preceding(int, int*, int*)",93957348115456,93957348115689],["icu_68::RBBIDataWrapper::RBBIDataWrapper(UDataMemory*, UErrorCode&)",93957348120896,93957348121061],["icu_68::StringCharacterIterator::getText(icu_68::UnicodeString&)",93957348122560,93957348122580],["icu_68::ICUService::ICUService(icu_68::UnicodeString const&)",93957348123776,93957348123839],["icu_68::ICUService::countFactories() const",93957348127712,93957348127734],["icu_68::LocaleKeyFactory::getDynamicClassID() const",93957348129168,93957348129181],["icu_68::ICULocaleService::registerInstance(icu_68::UObject*, icu_68::Locale const&, int, UErrorCode&)",93957348130240,93957348130263],["icu_68::ICULocaleService::createKey(icu_68::UnicodeString const*, UErrorCode&) const",93957348130864,93957348130900],["icu_68::LocaleKey::createWithCanonicalFallback(icu_68::UnicodeString const*, icu_68::UnicodeString const*, int, UErrorCode&)",93957348131792,93957348131982],["icu_68::LocaleKey::canonicalLocale(icu_68::Locale&) const",93957348132928,93957348132942],["icu_68::ICUNotifier::removeListener(icu_68::EventListener const*, UErrorCode&)",93957348133872,93957348134066],["icu_68::ICUResourceBundleFactory::getDynamicClassID() const",93957348134672,93957348134685],["icu_68::SimpleLocaleKeyFactory::create(icu_68::ICUServiceKey const&, icu_68::ICUService const*, UErrorCode&) const",93957348135168,93957348135468],["icu_68::SimpleFormatter::format(icu_68::UnicodeString const&, icu_68::UnicodeString&, UErrorCode&) const",93957348136624,93957348137007],["(anonymous namespace)::computeUnion(icu_68::unisets::Key, icu_68::unisets::Key, icu_68::unisets::Key)",93957348140352,93957348140499],["icu_68::StringTrieBuilder::~StringTrieBuilder()",93957348142864,93957348142914],["icu_68::StringTrieBuilder::FinalValueNode::operator==(icu_68::StringTrieBuilder::Node const&) const",93957348147168,93957348147238],["icu_68::StringTrieBuilder::ListBranchNode::markRightEdgesFirst(int)",93957348147792,93957348147889],["ucase_addPropertyStarts_68",93957348150704,93957348150740],["ucase_toFullLower_68",93957348152832,93957348154530],["ucase_hasBinaryProperty_68",93957348156928,93957348158334],["u_isWhitespace_68",93957348159536,93957348159723],["u_getMainProperties_68",93957348161568,93957348161694],["icu_68::UCharsTrieElement::getString(icu_68::UnicodeString const&) const",93957348163280,93957348163366],["icu_68::compareElementStrings(void const*, void const*, void const*)",93957348164896,93957348164918],["icu_68::UCharsTrieBuilder::UCTLinearMatchNode::operator==(icu_68::StringTrieBuilder::Node const&) const",93957348165904,93957348165965],["icu_68::UCharsTrieBuilder::writeDeltaTo(int)",93957348167408,93957348167600],["icu_68::UCharsTrie::next(icu_68::ConstChar16Ptr, int)",93957348168928,93957348169434],["icu_68::UCharCharacterIterator::operator=(icu_68::UCharCharacterIterator const&)",93957348171392,93957348171426],["icu_68::UCharCharacterIterator::current() const",93957348171856,93957348171888],["icu_68::UCharCharacterIterator::last32()",93957348172272,93957348172372],["icu_68::UCharCharacterIterator::setText(icu_68::ConstChar16Ptr, int)",93957348173728,93957348173771],["ucln_registerCleanup_68",93957348174192,93957348174216],["(anonymous namespace)::getRange(void const*, int, unsigned int (*)(void const*, unsigned int), void const*, unsigned int*)",93957348176048,93957348177583],["ucurr_getDefaultFractionDigits_68",93957348186224,93957348186246],["icu_68::UDataPathIterator::UDataPathIterator(char const*, char const*, char const*, char const*, signed char, UErrorCode*)",93957348189856,93957348190269],["udata_setFileAccess_68",93957348194448,93957348194460],["udata_getHeaderSize_68",93957348197456,93957348197483],["UDataMemory_normalizeDataPointer_68",93957348198640,93957348198674],["uenum_unext_68",93957348199312,93957348199350],["uhash_setValueComparator_68",93957348201648,93957348201662],["uhash_put_68",93957348203680,93957348203698],["uhash_find_68",93957348205536,93957348205809],["uhash_compareLong_68",93957348206800,93957348206811],["uiter_next32_68",93957348207904,93957348207998],["utf8IteratorNext(UCharIterator*)",93957348210608,93957348211022],["ulist_removeString_68",93957348211968,93957348212142],["ulocimp_getKeywords_68",93957348212544,93957348213483],["ulocimp_getLanguage_68(char const*, char const**, UErrorCode&)",93957348217392,93957348217926],["uloc_getScript_68",93957348220368,93957348220637],["uloc_canonicalize_68",93957348225184,93957348225334],["uloc_kw_nextKeyword(UEnumeration*, int*, UErrorCode*)",93957348225920,93957348226000],["ulocimp_toLegacyType_68",93957348230848,93957348231171],["ultag_isRegionSubtag_68",93957348232720,93957348232829],["ultag_isTransformedExtensionSubtags_68",93957348234528,93957348234696],["icu_68::CharString* icu_68::MemoryPool<icu_68::CharString, 8>::create<icu_68::CharString&, UErrorCode&>(icu_68::CharString&, UErrorCode&)",93957348254592,93957348254870],["umutablecptrie_close_68",93957348256176,93957348256231],["umtx_lock_68",93957348270496,93957348270704],["icu_68::UnifiedCache::_runEvictionSlice() const",93957348271984,93957348272328],["(anonymous namespace)::_set_add(USet*, int)",93957348275472,93957348275482],["icu_68::RuleCharacterIterator::getPos(icu_68::RuleCharacterIterator::Pos&) const",93957348276752,93957348276781],["icu_68::UnicodeSet::add(int, int)",93957348277360,93957348277676],["icu_68::UnicodeSet::setPattern(char16_t const*, int)",93957348278864,93957348278980],["icu_68::UnicodeSet::operator==(icu_68::UnicodeSet const&) const",93957348279952,93957348280079],["icu_68::UnicodeSet::contains(int, int) const",93957348280656,93957348280752],["icu_68::UnicodeSet::matchRest(icu_68::Replaceable const&, int, int, icu_68::UnicodeString const&)",93957348282864,93957348283240],["icu_68::UnicodeSet::add(int const*, int, signed char)",93957348284080,93957348284861],["icu_68::UnicodeSet::removeAllStrings()",93957348286752,93957348286836],["icu_68::UnicodeSet::UnicodeSet(unsigned short const*, int, icu_68::UnicodeSet::ESerialization, UErrorCode&)",93957348288704,93957348289339],["icu_68::UnicodeSet::freeze()",93957348291184,93957348291484],["icu_68::BMPSet::initBits()",93957348295184,93957348295850],["icu_68::UnicodeSet::UnicodeSet(icu_68::UnicodeString const&, UErrorCode&)",93957348301040,93957348301265],["icu_68::(anonymous namespace)::generalCategoryMaskFilter(int, void*)",93957348306112,93957348306141],["(anonymous namespace)::getInclusionsForSource(UPropertySource, UErrorCode&)",93957348309728,93957348310351],["ubidi_getJoiningType_68",93957348311792,93957348311924],["icu_68::enumNames(icu_68::UCharNames*, int, int, signed char (*)(void*, int, UCharNameChoice, char const*, int), void*, UCharNameChoice)",93957348315280,93957348317037],["icu_68::UnicodeSetStringSpan::span(char16_t const*, int, USetSpanCondition) const",93957348321504,93957348323567],["icu_68::UnicodeSetStringSpan::spanNotBackUTF8(unsigned char const*, int) const",93957348330576,93957348330935],["icu_68::UnicodeString::toUpper(icu_68::Locale const&)",93957348333232,93957348333284],["icu_68::UnicodeString::doAppend(char16_t const*, int, int)",93957348335088,93957348335799],["icu_68::UnicodeString::setToUTF8(icu_68::StringPiece)",93957348337536,93957348337964],["icu_68::UnicodeString::~UnicodeString()",93957348339024,93957348339095],["icu_68::UnicodeString::append(int)",93957348339680,93957348339780],["icu_68::UnicodeString::countChar32(int, int) const",93957348340512,93957348340598],["icu_68::UnicodeString::indexOf(char16_t const*, int, int, int, int) const",93957348342256,93957348342438],["icu_68::UnicodeString::setCharAt(int, char16_t)",93957348344144,93957348344281],["icu_68::UnicodeString::doHashCode() const",93957348346592,93957348346656],["icu_68::UnicodeString::trim()",93957348347344,93957348347764],["(anonymous namespace)::ulayout_ensureData(UErrorCode&)",93957348348528,93957348348921],["isCanonSegmentStarter(BinaryProperty const&, int, UProperty)",93957348349280,93957348349364],["isRegionalIndicator(BinaryProperty const&, int, UProperty)",93957348350560,93957348350578],["getJoiningType(IntProperty const&, int, UProperty)",93957348350752,93957348350764],["getBiDiPairedBracketType(IntProperty const&, int, UProperty)",93957348351024,93957348351036],["icu_68::StackUResourceBundle::~StackUResourceBundle()",93957348351616,93957348351626],["ures_getType_68",93957348353296,93957348353323],["init_resb_result(ResourceData const*, unsigned int, char const*, int, UResourceDataEntry*, UResourceBundle const*, int, UResourceBundle*, UErrorCode*)",93957348354448,93957348357508],["(anonymous namespace)::getAllItemsWithFallback(UResourceBundle const*, icu_68::ResourceDataValue&, icu_68::ResourceSink&, UErrorCode&)",93957348360544,93957348361328],["ures_openDirect_68",93957348364944,93957348364970],["hashEntry(UElement)",93957348369744,93957348369791],["ures_loc_resetLocales(UEnumeration*, UErrorCode*)",93957348370576,93957348370601],["res_getBinaryNoTrace_68",93957348371600,93957348371671],["icu_68::ResourceDataValue::getString(int&, UErrorCode&) const",93957348372000,93957348372294],["icu_68::ResourceDataValue::getIntVector(int&, UErrorCode&) const",93957348372576,93957348372733],["icu_68::ResourceDataValue::isNoInheritanceMarker() const",93957348373328,93957348373551],["icu_68::ResourceDataValue::getStringOrFirstOfArray(UErrorCode&) const",93957348374704,93957348375462],["icu_68::ResourceTable::getKeyAndValue(int, char const*&, icu_68::ResourceValue&) const",93957348376736,93957348376996],["res_findResource_68",93957348377808,93957348378472],["icu_68::UnicodeSetIterator::getDynamicClassID() const",93957348378864,93957348378877],["icu_68::UnicodeSetIterator::next()",93957348379136,93957348379252],["icu_68::UStack::UStack(UErrorCode&)",93957348379504,93957348379535],["icu_68::(anonymous namespace)::appendResult(char16_t*, int, int, int, char16_t const*, int, unsigned int, icu_68::Edits*)",93957348381200,93957348381965],["ustrcase_internalToLower_68",93957348384640,93957348384776],["u_strFoldCase_68",93957348386688,93957348386749],["ustrcase_getCaseLocale_68",93957348388848,93957348388888],["icu_68::StringEnumeration::~StringEnumeration()",93957348389216,93957348389281],["icu_68::StringEnumeration::setChars(char const*, int, UErrorCode&)",93957348389872,93957348390011],["icu_68::UStringEnumeration::~UStringEnumeration()",93957348390224,93957348390308],["icu_68::UStringEnumeration::snext(UErrorCode&)",93957348390448,93957348390575],["ustrenum_close(UEnumeration*)",93957348390752,93957348390790],["uprv_itou_68",93957348390896,93957348391458],["u_strlen_68",93957348392736,93957348392769],["u_memrchr_68",93957348393408,93957348393501],["u_strncmp_68",93957348394240,93957348394330],["u_memcpy_68",93957348394624,93957348394660],["u_asciiToUpper_68",93957348395856,93957348395875],["ustr_hashCharsN_68",93957348396112,93957348396181],["icu_68::WholeStringBreakIterator::setText(icu_68::UnicodeString const&)",93957348396352,93957348396381],["u_strToUTF8WithSub_68",93957348398800,93957348401011],["utext_next32_68",93957348401728,93957348401901],["utext_setNativeIndex_68",93957348402128,93957348402291],["utext_equals_68",93957348403248,93957348403366],["utext_openUnicodeString_68",93957348403984,93957348404014],["shallowTextClone(UText*, UText const*, UErrorCode*)",93957348404624,93957348405079],["unistrTextExtract(UText*, long, long, char16_t*, int, UErrorCode*)",93957348405296,93957348405602],["ucstrTextClone(UText*, UText const*, signed char, UErrorCode*)",93957348406384,93957348406934],["ucstrTextClose(UText*)",93957348407920,93957348407959],["charIterTextExtract(UText*, long, long, char16_t*, int, UErrorCode*)",93957348408784,93957348409159],["utf8_back1SafeBody_68",93957348410400,93957348410677],["icu_68::ICU_Utility::parseAsciiInteger(icu_68::UnicodeString const&, int&)",93957348411232,93957348411342],["utrace_getLevel_68",93957348411808,93957348411820],["utrie2_freeze_68",93957348413216,93957348419413],["utrie2_openFromSerialized_68",93957348422608,93957348423138],["enumEitherTrie(UTrie2 const*, int, int, unsigned int (*)(void const*, unsigned int), signed char (*)(void const*, int, int, unsigned int), void const*)",93957348423280,93957348424564],["icu_68::UVector::UVector(int, UErrorCode&)",93957348424736,93957348424844],["icu_68::UVector::removeAllElements()",93957348425200,93957348425280],["icu_68::UVector::operator==(icu_68::UVector const&)",93957348426112,93957348426247],["icu_68::UVector::elementAt(int) const",93957348426832,93957348426861],["icu_68::UVector::retainAll(icu_68::UVector const&)",93957348427664,93957348428054],["icu_68::UVector::sortedInsert(void*, signed char (*)(UElement, UElement), UErrorCode&)",93957348428672,93957348428682],["icu_68::sortComparator(void const*, void const*, void const*)",93957348429232,93957348429252],["icu_68::UVector32::UVector32(UErrorCode&)",93957348429280,93957348429366],["icu_68::UVector32::~UVector32()",93957348429504,93957348429554],["icu_68::UVector32::assign(icu_68::UVector32 const&, UErrorCode&)",93957348429632,93957348430163],["icu_68::UVector32::setElementAt(int, int)",93957348430480,93957348430504],["icu_68::UVector32::removeAllElements()",93957348430896,93957348430909],["icu_68::UVector64::getDynamicClassID() const",93957348431072,93957348431085],["icu_68::UVector64::~UVector64()",93957348431184,93957348431234],["icu_68::UVector64::setElementAt(long, int)",93957348431312,93957348431337],["icu_68::UVector64::expandCapacity(int, UErrorCode&)",93957348431760,93957348431914],["Cr_z_adler32",93957348433040,93957348433052],["Cr_z_cpu_check_features",93957348433120,93957348433144],["Cr_z_crc32_z",93957348433232,93957348434133],["Cr_z_crc_reset",93957348434160,93957348434218],["Cr_z_copy_with_crc",93957348434272,93957348434375],["Cr_z_deflateEnd",93957348435216,93957348435471],["fill_window",93957348435712,93957348437077],["Cr_z_deflateSetHeader",93957348437344,93957348437448],["flush_pending",93957348440816,93957348440922],["deflate_huff",93957348442624,93957348443421],["Cr_z_deflate_read_buf",93957348444816,93957348444944],["deflate_fast",93957348445040,93957348446555],["longest_match",93957348448560,93957348449292],["Cr_z__tr_init",93957348451264,93957348451883],["authdes_create",139871564478896,139871564479044],["clnt_perror",139871564482016,139871564482048],["clnt_pcreateerror",139871564482336,139871564482368],["__libc_clntudp_bufcreate",139871564487216,139871564487951],["ctan",139871565483920,139871565484843],["nan",139871565491248,139871565491257],["log1p",139871565491600,139871565491657],["log",139871565492192,139871565492249],["exp2",139871565492560,139871565493122],["__acoshf_finite",139871565493856,139871565494069],["__atan2f_finite",139871565494688,139871565495293],["__coshf_finite",139871565495600,139871565495897],["v8::Shell::RealmCurrent(v8::FunctionCallbackInfo<v8::Value> const&)",93957335245872,93957335246042],["v8::Shell::RealmCreate(v8::FunctionCallbackInfo<v8::Value> const&)",93957335249232,93957335249249],["v8::Shell::RealmDetachGlobal(v8::FunctionCallbackInfo<v8::Value> const&)",93957335249664,93957335249881],["v8::Shell::RealmSwitch(v8::FunctionCallbackInfo<v8::Value> const&)",93957335250032,93957335250076],["v8::internal::StackGuard::RequestInterrupt(v8::internal::StackGuard::InterruptFlag)",93957336711824,93957336711932],["v8::internal::ThreadManager::~ThreadManager()",93957336715712,93957336715913],["v8::internal::ExternalizeStringExtension::Externalize(v8::FunctionCallbackInfo<v8::Value> const&)",93957336716560,93957336717154],["v8::internal::GCExtension::GetNativeFunctionTemplate(v8::Isolate*, v8::Local<v8::String>)",93957336717392,93957336717434],["v8::internal::(anonymous namespace)::AsyncGC::~AsyncGC()",93957336718496,93957336718545],["non-virtual thunk to v8::internal::(anonymous namespace)::AsyncGC::~AsyncGC()",93957336718800,93957336718838],["v8::internal::IgnitionStatisticsExtension::GetNativeFunctionTemplate(v8::Isolate*, v8::Local<v8::String>)",93957336718912,93957336718954],["v8::internal::StatisticsExtension::GetNativeFunctionTemplate(v8::Isolate*, v8::Local<v8::String>)",93957336719024,93957336719066],["v8::internal::CpuSampler::SampleStack(v8::RegisterState const&)",93957339616368,93957339616737],["v8::internal::HeapProfiler::AllocationEvent(unsigned long, int)",93957339620992,93957339621013],["v8::internal::HeapSnapshot::HeapSnapshot(v8::internal::HeapProfiler*, bool)",93957339624720,93957339624921],["v8::internal::HeapObjectsMap::FindOrAddEntry(unsigned long, unsigned int, bool)",93957339628208,93957339628807],["v8::internal::V8HeapExplorer::AllocateEntry(void*)",93957339631344,93957339631354],["v8::internal::V8HeapExplorer::AddEntry(v8::internal::HeapObject, v8::internal::HeapEntry::Type, char const*)",93957339633616,93957339633730],["v8::internal::V8HeapExplorer::ExtractReferences(v8::internal::HeapEntry*, v8::internal::HeapObject)",93957339636480,93957339637634],["v8::internal::V8HeapExplorer::ExtractStringReferences(v8::internal::HeapEntry*, v8::internal::String)",93957339639440,93957339639689],["v8::internal::V8HeapExplorer::ExtractScriptReferences(v8::internal::HeapEntry*, v8::internal::Script)",93957339640752,93957339640936],["v8::internal::V8HeapExplorer::ExtractAccessorPairReferences(v8::internal::HeapEntry*, v8::internal::AccessorPair)",93957339641152,93957339641249],["v8::internal::V8HeapExplorer::ExtractFeedbackCellReferences(v8::internal::HeapEntry*, v8::internal::FeedbackCell)",93957339641520,93957339641607],["v8::internal::V8HeapExplorer::ExtractAllocationSiteReferences(v8::internal::HeapEntry*, v8::internal::AllocationSite)",93957339641744,93957339641896],["v8::internal::V8HeapExplorer::ExtractDescriptorArrayReferences(v8::internal::HeapEntry*, v8::internal::DescriptorArray)",93957339641968,93957339642197],["void v8::internal::V8HeapExplorer::ExtractWeakArrayReferences<v8::internal::WeakArrayList>(int, v8::internal::HeapEntry*, v8::internal::WeakArrayList)",93957339642384,93957339642560],["v8::internal::V8HeapExplorer::ExtractEphemeronHashTableReferences(v8::internal::HeapEntry*, v8::internal::EphemeronHashTable)",93957339643264,93957339644068],["v8::internal::V8HeapExplorer::SetInternalReference(v8::internal::HeapEntry*, char const*, v8::internal::Object, int)",93957339644224,93957339644785],["v8_inspector::String16Builder::toString()",93957342405456,93957342406141],["v8_inspector::StringBufferFrom(v8_inspector::String16)",93957342408944,93957342409080],["v8_inspector::(anonymous namespace)::EmptyStringBuffer::string() const",93957342409536,93957342409555],["v8_inspector::(anonymous namespace)::StringBuffer16::~StringBuffer16()",93957342409712,93957342409744],["v8_inspector::V8ConsoleAgentImpl::V8ConsoleAgentImpl(v8_inspector::V8InspectorSessionImpl*, v8_crdtp::FrontendChannel*, v8_inspector::protocol::DictionaryValue*)",93957342409840,93957342409872],["v8_inspector::V8ConsoleAgentImpl::reportAllMessages()",93957342410016,93957342410244],["v8_inspector::V8ConsoleAgentImpl::clearMessages()",93957342410384,93957342410408],["v8_inspector::V8ConsoleAgentImpl::messageAdded(v8_inspector::V8ConsoleMessage*)",93957342410544,93957342410608],["v8::internal::compiler::JSHeapBroker::ReadFeedbackForArrayOrObjectLiteral(v8::internal::compiler::FeedbackSource const&)",93957344114256,93957344114886],["std::__1::__hash_const_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::compiler::FeedbackSource, v8::internal::compiler::ProcessedFeedback const*>, void*>*> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::compiler::FeedbackSource, v8::internal::compiler::ProcessedFeedback const*>, std::__1::__unordered_map_hasher<v8::internal::compiler::FeedbackSource, std::__1::__hash_value_type<v8::internal::compiler::FeedbackSource, v8::internal::compiler::ProcessedFeedback const*>, v8::internal::compiler::FeedbackSource::Hash, v8::internal::compiler::FeedbackSource::Equal, true>, std::__1::__unordered_map_equal<v8::internal::compiler::FeedbackSource, std::__1::__hash_value_type<v8::internal::compiler::FeedbackSource, v8::internal::compiler::ProcessedFeedback const*>, v8::internal::compiler::FeedbackSource::Equal, v8::internal::compiler::FeedbackSource::Hash, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<v8::internal::compiler::FeedbackSource, v8::internal::compiler::ProcessedFeedback const*> > >::find<v8::internal::compiler::FeedbackSource>(v8::internal::compiler::FeedbackSource const&) const",93957344130608,93957344131069],["v8::internal::compiler::JSInliningHeuristic::~JSInliningHeuristic()",93957344153760,93957344153814],["v8::internal::compiler::JSIntrinsicLowering::Reduce(v8::internal::compiler::Node*)",93957344173744,93957344174281],["v8::internal::compiler::JSIntrinsicLowering::ReduceAsyncGeneratorAwaitCaught(v8::internal::compiler::Node*)",93957344177312,93957344177495],["v8::internal::compiler::JSIntrinsicLowering::ReduceIsSmi(v8::internal::compiler::Node*)",93957344179856,93957344179945],["v8::internal::compiler::JSIntrinsicLowering::Change(v8::internal::compiler::Node*, v8::internal::compiler::Operator const*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957344181424,93957344181859],["v8::internal::compiler::JSNativeContextSpecialization::ReduceJSGetSuperConstructor(v8::internal::compiler::Node*)",93957344185776,93957344186816],["v8::internal::compiler::JSNativeContextSpecialization::ReduceJSLoadGlobal(v8::internal::compiler::Node*)",93957344195504,93957344196066],["v8::internal::compiler::JSNativeContextSpecialization::ReduceJSStoreNamed(v8::internal::compiler::Node*)",93957344198576,93957344198888],["v8::internal::compiler::JSNativeContextSpecialization::ReduceJSStoreNamedOwn(v8::internal::compiler::Node*)",93957344199856,93957344200168],["v8::internal::compiler::JSNativeContextSpecialization::ReduceJSToString(v8::internal::compiler::Node*)",93957344201232,93957344201837],["v8::internal::compiler::JSNativeContextSpecialization::InferHasInPrototypeChain(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::HeapObjectRef const&)",93957344205200,93957344206439],["v8::internal::compiler::JSNativeContextSpecialization::InferMaps(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::ZoneVector<v8::internal::Handle<v8::internal::Map> >*) const",93957344221584,93957344223354],["v8::internal::compiler::JSNativeContextSpecialization::ReduceElementAccessOnString(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::KeyedAccessMode const&)",93957344224288,93957344224928],["v8::internal::compiler::JSNativeContextSpecialization::ReduceElementLoadFromHeapConstant(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::AccessMode, v8::internal::KeyedAccessLoadMode)",93957344233056,93957344235121],["v8::internal::compiler::JSNativeContextSpecialization::ReduceSoftDeoptimize(v8::internal::compiler::Node*, v8::internal::DeoptimizeReason)",93957344244240,93957344244780],["v8::internal::compiler::JSNativeContextSpecialization::InlinePropertyGetterCall(v8::internal::compiler::Node*, v8::internal::ConvertReceiverMode, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node**, v8::internal::compiler::Node**, v8::internal::ZoneVector<v8::internal::compiler::Node*>*, v8::internal::compiler::PropertyAccessInfo const&)",93957344246400,93957344247932],["v8::internal::compiler::JSNativeContextSpecialization::InlinePropertySetterCall(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node**, v8::internal::compiler::Node**, v8::internal::ZoneVector<v8::internal::compiler::Node*>*, v8::internal::compiler::PropertyAccessInfo const&)",93957344249200,93957344250488],["v8::internal::compiler::JSNativeContextSpecialization::BuildPropertyTest(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::PropertyAccessInfo const&)",93957344251168,93957344251382],["v8::internal::compiler::JSNativeContextSpecialization::BuildExtendPropertiesBackingStore(v8::internal::compiler::MapRef const&, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957344254800,93957344259124],["v8::internal::compiler::JSNativeContextSpecialization::reducer_name() const",93957344259344,93957344259357],["v8::internal::compiler::js_node_wrapper_utils::UndefinedConstant(v8::internal::compiler::JSGraph*)",93957344260848,93957344260858],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::CallFrequency const&)",93957344261120,93957344261157],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::CreateCollectionIteratorParameters const&)",93957344261504,93957344261655],["v8::internal::compiler::hash_value(v8::internal::compiler::CreateLiteralParameters const&)",93957344261888,93957344262041],["v8::internal::compiler::JSWasmCallNode::TypeForWasmReturnType(v8::internal::wasm::ValueType const&)",93957344262176,93957344262221],["v8::internal::compiler::JSOperatorBuilder::CreateObject()",93957344262336,93957344262350],["v8::internal::compiler::JSOperatorBuilder::HasInPrototypeChain()",93957344262368,93957344262382],["v8::internal::compiler::JSOperatorBuilder::ForInEnumerate()",93957344262400,93957344262414],["v8::internal::compiler::JSOperatorBuilder::AsyncFunctionReject()",93957344262432,93957344262446],["v8::internal::compiler::JSOperatorBuilder::LoadMessage()",93957344262464,93957344262478],["std::__1::num_put<char, std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > >::do_put(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, char, unsigned long) const",93957346692880,93957346693505],["std::__1::time_get<char, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > >::do_get(std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, unsigned int&, tm*, char, char) const",93957346711152,93957346712809],["std::__1::time_get<wchar_t, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::__get_percent(std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >&, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, unsigned int&, std::__1::ctype<wchar_t> const&) const",93957346718768,93957346719111],["std::__1::moneypunct<char, false>::do_neg_format() const",93957346720672,93957346720683],["std::__1::__money_get<char>::__gather_info(bool, std::__1::locale const&, std::__1::money_base::pattern&, char&, char&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, int&)",93957346728096,93957346728627],["std::__1::__money_get<wchar_t>::__gather_info(bool, std::__1::locale const&, std::__1::money_base::pattern&, wchar_t&, wchar_t&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >&, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >&, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >&, int&)",93957346735952,93957346736483],["std::__1::money_put<char, std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > >::do_put(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, bool, std::__1::ios_base&, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const",93957346740064,93957346741334],["std::__1::money_put<wchar_t, std::__1::ostreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::do_put(std::__1::ostreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, bool, std::__1::ios_base&, wchar_t, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> > const&) const",93957346744928,93957346745997],["std::__1::messages<char>::do_close(long) const",93957346746400,93957346746422],["std::__1::back_insert_iterator<std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> > > std::__1::__widen_from_utf8<32ul>::operator()<std::__1::back_insert_iterator<std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> > > >(std::__1::back_insert_iterator<std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> > >, char const*, char const*) const",93957346747072,93957346747374],["std::__1::locale::__imp::~__imp()",93957346756064,93957346756250],["std::__1::locale::__imp::make_global()",93957346756288,93957346756435],["std::__1::locale::locale(std::__1::locale const&)",93957346756576,93957346756594],["std::__1::locale::operator=(std::__1::locale const&)",93957346756656,93957346756719],["std::__1::locale::use_facet(std::__1::locale::id&) const",93957346756864,93957346757000],["std::__1::ctype<wchar_t>::do_is(unsigned short, wchar_t) const",93957346757040,93957346757152],["std::__terminate(void (*)())",93957346793760,93957346793828],["__gxx_personality_v0",93957346793856,93957346794291],["__cxxabiv1::call_terminate(bool, _Unwind_Exception*)",93957346795984,93957346796024],["__cxxabiv1::readEncodedPointer(unsigned char const**, unsigned char)",93957346796592,93957346796866],["__cxa_pure_virtual",93957346797152,93957346797170],["__cxxabiv1::__calloc_with_fallback(unsigned long, unsigned long)",93957346797488,93957346797774],["__cxxabiv1::__class_type_info::can_catch(__cxxabiv1::__shim_type_info const*, void*&) const",93957346798032,93957346798235],["__cxxabiv1::__si_class_type_info::has_unambiguous_public_base(__cxxabiv1::__dynamic_cast_info*, void*, int) const",93957346798320,93957346798402],["__dynamic_cast",93957346798720,93957346798969],["__cxxabiv1::__si_class_type_info::search_below_dst(__cxxabiv1::__dynamic_cast_info*, void const*, int, bool) const",93957346799856,93957346800156],["__cxxabiv1::__vmi_class_type_info::search_above_dst(__cxxabiv1::__dynamic_cast_info*, void const*, void const*, int, bool) const",93957346800336,93957346800923],["__cxxabiv1::__class_type_info::search_above_dst(__cxxabiv1::__dynamic_cast_info*, void const*, void const*, int, bool) const",93957346801152,93957346801304],["std::bad_alloc::bad_alloc()",93957346801328,93957346801344],["std::logic_error::~logic_error()",93957346801360,93957346801421],["std::range_error::~range_error()",93957346801504,93957346801565],["std::bad_cast::bad_cast()",93957346801648,93957346801664],["std::bad_typeid::bad_typeid()",93957346801680,93957346801696],["__cxa_guard_acquire",93957346801712,93957346801888],["__cxa_guard_abort",93957346802016,93957346802129],["(anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::~AbstractManglingParser()",93957346803872,93957346804058],["(anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::parseNumber(bool)",93957346806544,93957346806709],["(anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::parseType()",93957346806896,93957346811580],["(anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::parseTemplateArg()",93957346815424,93957346816054],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::FunctionEncoding, (anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::NodeArray, (anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::Qualifiers&, (anonymous namespace)::itanium_demangle::FunctionRefQual&>((anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::NodeArray&&, (anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::Qualifiers&, (anonymous namespace)::itanium_demangle::FunctionRefQual&)",93957346816208,93957346816431],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::SpecialName, char const (&) [9], (anonymous namespace)::itanium_demangle::Node*&>(char const (&) [9], (anonymous namespace)::itanium_demangle::Node*&)",93957346816608,93957346816769],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::SpecialName, char const (&) [19], (anonymous namespace)::itanium_demangle::Node*&>(char const (&) [19], (anonymous namespace)::itanium_demangle::Node*&)",93957346816960,93957346817121],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::SpecialName, char const (&) [27], (anonymous namespace)::itanium_demangle::Node*&>(char const (&) [27], (anonymous namespace)::itanium_demangle::Node*&)",93957346817616,93957346817777],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::SpecialName, char const (&) [41], (anonymous namespace)::itanium_demangle::Node*&>(char const (&) [41], (anonymous namespace)::itanium_demangle::Node*&)",93957346817952,93957346818113],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::SpecialName, char const (&) [22], (anonymous namespace)::itanium_demangle::Node*&>(char const (&) [22], (anonymous namespace)::itanium_demangle::Node*&)",93957346818304,93957346818465],["(anonymous namespace)::itanium_demangle::CtorVtableSpecialName::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346818656,93957346818928],["(anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::parseTemplateArgs(bool)",93957346819824,93957346821503],["(anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::parseTemplateParam()",93957346821664,93957346822375],["(anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::parseAbiTags((anonymous namespace)::itanium_demangle::Node*)",93957346822688,93957346822928],["(anonymous namespace)::itanium_demangle::NameType::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346824656,93957346824772],["(anonymous namespace)::itanium_demangle::NestedName::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346824800,93957346824977],["(anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::parsePositiveInteger(unsigned long*)",93957346825008,93957346825125],["(anonymous namespace)::itanium_demangle::ForwardTemplateReference::hasRHSComponentSlow((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346825296,93957346825369],["(anonymous namespace)::itanium_demangle::ForwardTemplateReference::hasFunctionSlow((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346825456,93957346825530],["(anonymous namespace)::itanium_demangle::ForwardTemplateReference::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346825600,93957346825652],["(anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::parseExpr()",93957346825728,93957346830324],["(anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::parseExprPrimary()",93957346830544,93957346832649],["(anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::parseFoldExpr()",93957346833328,93957346834529],["(anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::parsePrefixExpr((anonymous namespace)::itanium_demangle::StringView)",93957346834768,93957346834940],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::CallExpr, (anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::NodeArray>((anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::NodeArray&&)",93957346835120,93957346835269],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::DeleteExpr, (anonymous namespace)::itanium_demangle::Node*&, bool&, bool>((anonymous namespace)::itanium_demangle::Node*&, bool&, bool&&)",93957346836080,93957346836248],["(anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::parseUnresolvedName()",93957346836432,93957346838349],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::MemberExpr, (anonymous namespace)::itanium_demangle::Node*&, char const (&) [2], (anonymous namespace)::itanium_demangle::Node*&>((anonymous namespace)::itanium_demangle::Node*&, char const (&) [2], (anonymous namespace)::itanium_demangle::Node*&)",93957346838544,93957346838716],["(anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::parseBracedExpr()",93957346838880,93957346839529],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::PostfixExpr, (anonymous namespace)::itanium_demangle::Node*&, char const (&) [3]>((anonymous namespace)::itanium_demangle::Node*&, char const (&) [3])",93957346839696,93957346839870],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::EnclosingExpr, char const (&) [11], (anonymous namespace)::itanium_demangle::Node*&, char const (&) [2]>(char const (&) [11], (anonymous namespace)::itanium_demangle::Node*&, char const (&) [2])",93957346840992,93957346841177],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::CastExpr, char const (&) [17], (anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::Node*&>(char const (&) [17], (anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::Node*&)",93957346841360,93957346841532],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::ParameterPackExpansion, (anonymous namespace)::itanium_demangle::Node*&>((anonymous namespace)::itanium_demangle::Node*&)",93957346841712,93957346841849],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::EnclosingExpr, char const (&) [12], (anonymous namespace)::itanium_demangle::Node*&, char const (&) [2]>(char const (&) [12], (anonymous namespace)::itanium_demangle::Node*&, char const (&) [2])",93957346842000,93957346842185],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::InitListExpr, (anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::NodeArray>((anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::NodeArray&&)",93957346842336,93957346842485],["(anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::parseIntegerLiteral((anonymous namespace)::itanium_demangle::StringView)",93957346842640,93957346842867],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::IntegerCastExpr, (anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::StringView&>((anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::StringView&)",93957346843024,93957346843173],["(anonymous namespace)::itanium_demangle::BoolExpr::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346843872,93957346844020],["(anonymous namespace)::itanium_demangle::FloatLiteralImpl<double>::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346844560,93957346845367],["(anonymous namespace)::itanium_demangle::PostfixExpr::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346846336,93957346846647],["(anonymous namespace)::itanium_demangle::FoldExpr::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346846848,93957346848588],["(anonymous namespace)::itanium_demangle::BinaryExpr::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346849024,93957346849758],["(anonymous namespace)::itanium_demangle::CastExpr::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346850080,93957346850432],["(anonymous namespace)::itanium_demangle::NodeArray::printWithComma((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346850640,93957346850904],["(anonymous namespace)::itanium_demangle::ConversionExpr::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346851136,93957346851418],["(anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::parseBaseUnresolvedName()",93957346852016,93957346852890],["(anonymous namespace)::itanium_demangle::DtorName::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346856176,93957346856279],["(anonymous namespace)::itanium_demangle::LiteralOperator::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346856736,93957346856898],["(anonymous namespace)::itanium_demangle::ArraySubscriptExpr::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346857312,93957346857613],["(anonymous namespace)::itanium_demangle::NewExpr::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346858768,93957346859479],["(anonymous namespace)::itanium_demangle::NodeArrayNode::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346860416,93957346860430],["(anonymous namespace)::itanium_demangle::CtorDtorName::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346861360,93957346861558],["(anonymous namespace)::itanium_demangle::ClosureTypeName::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346862208,93957346862563],["(anonymous namespace)::itanium_demangle::SpecialSubstitution::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346863120,93957346863756],["(anonymous namespace)::itanium_demangle::ParameterPack::hasFunctionSlow((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346863952,93957346864031],["(anonymous namespace)::itanium_demangle::TemplateArgs::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346864240,93957346864494],["(anonymous namespace)::itanium_demangle::FunctionEncoding::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346864960,93957346865149],["(anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::parseQualifiedType()",93957346867712,93957346868688],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::ReferenceType, (anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::ReferenceKind>((anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::ReferenceKind&&)",93957346870112,93957346870277],["(anonymous namespace)::itanium_demangle::DynamicExceptionSpec::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346870864,93957346871045],["(anonymous namespace)::itanium_demangle::VendorExtQualType::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346872240,93957346872473],["(anonymous namespace)::itanium_demangle::QualType::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346872576,93957346872872],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::ArrayType, (anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::NodeOrString&>((anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::NodeOrString&)",93957346873568,93957346873717],["(anonymous namespace)::itanium_demangle::PointerToMemberType::hasRHSComponentSlow((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346874336,93957346874367],["(anonymous namespace)::itanium_demangle::PointerType::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346875120,93957346875788],["(anonymous namespace)::itanium_demangle::PostfixQualifiedType::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346876784,93957346876913],["v8::base::bits::SignedMod32(int, int)",93957346877056,93957346877079],["v8::base::BoundedPageAllocator::AllocatePages(void*, unsigned long, unsigned long, v8::PageAllocator::Permission)",93957346877392,93957346877585],["v8::base::BoundedPageAllocator::ReleasePages(void*, unsigned long, unsigned long)",93957346878192,93957346878354],["v8::base::BoundedPageAllocator::~BoundedPageAllocator()",93957346878480,93957346878531],["v8::base::MagicNumbersForDivision<unsigned int> v8::base::SignedDivisionByConstant<unsigned int>(unsigned int)",93957346879136,93957346879306],["v8::base::hash_value(unsigned int)",93957346879824,93957346879869],["v8::base::ieee754::log(double)",93957346881040,93957346881691],["v8::base::ieee754::atan(double)",93957346883520,93957346884062],["v8::base::ieee754::exp(double)",93957346890864,93957346891458],["v8::base::ieee754::expm1(double)",93957346892496,93957346893301],["v8::base::ieee754::(anonymous namespace)::__kernel_tan(double, double, int)",93957346894848,93957346895502],["v8::base::ieee754::tanh(double)",93957346898320,93957346898585],["v8::base::PageAllocator::PageAllocator()",93957346899024,93957346899068],["v8::base::PageAllocator::AllocateSharedPages(unsigned long, void const*)",93957346899136,93957346899294],["v8::base::PageAllocator::DiscardSystemPages(void*, unsigned long)",93957346899376,93957346899392],["v8::base::SharedMemoryMapping::~SharedMemoryMapping()",93957346899600,93957346899639],["v8::base::ConditionVariable::Wait(v8::base::Mutex*)",93957346899808,93957346899818],["v8::base::RecursiveMutex::Lock()",93957346899984,93957346899994],["v8::base::SharedMutex::LockShared()",93957346900112,93957346900122],["v8::base::Semaphore::~Semaphore()",93957346900176,93957346900186],["v8::base::TimeDelta::InMillisecondsF() const",93957346900336,93957346900383],["v8::base::Time::ToTimespec() const",93957346900640,93957346900737],["v8::base::ThreadTicks::Now()",93957346901344,93957346901468],["v8::base::RegionAllocator::FreeListRemoveRegion(v8::base::RegionAllocator::Region*)",93957346902304,93957346902517],["v8::base::RegionAllocator::AllocateRegionAt(unsigned long, unsigned long, v8::base::RegionAllocator::RegionState)",93957346903344,93957346903564],["v8::base::SysInfo::AmountOfVirtualMemory()",93957346904272,93957346904323],["v8::base::RandomNumberGenerator::Next(int)",93957346905312,93957346905374],["v8::base::RandomNumberGenerator::NextSample(unsigned long, unsigned long)",93957346905632,93957346906931],["v8::base::OS::Initialize(bool, char const*)",93957346908896,93957346908916],["v8::base::OS::Allocate(void*, unsigned long, unsigned long, v8::base::OS::MemoryPermission)",93957346909520,93957346909973],["v8::base::OS::DiscardSystemPages(void*, unsigned long)",93957346910224,93957346910311],["v8::base::OS::DebugBreak()",93957346910416,93957346910423],["v8::base::PosixMemoryMappedFile::~PosixMemoryMappedFile()",93957346911104,93957346911132],["v8::base::OS::GetUserTime(unsigned int*, unsigned int*)",93957346911232,93957346911315],["v8::base::OS::FOpen(char const*, char const*)",93957346911472,93957346911558],["v8::base::OS::Print(char const*, ...)",93957346911616,93957346911776],["v8::base::OS::PrintError(char const*, ...)",93957346911984,93957346912144],["v8::base::OS::StrNCpy(char*, int, char const*, unsigned long)",93957346912448,93957346912465],["v8::base::ThreadEntry(void*)",93957346912960,93957346913047],["v8::base::Thread::GetThreadLocal(int)",93957346913136,93957346913146],["v8::base::OS::SignalCodeMovingGC()",93957346914016,93957346914191],["v8::base::PosixDefaultTimezoneCache::LocalTimeOffset(double, bool)",93957346914800,93957346914873],["v8::platform::DefaultPlatform::PumpMessageLoop(v8::Isolate*, v8::platform::MessageLoopBehavior)",93957346915248,93957346915525],["v8::platform::DefaultPlatform::~DefaultPlatform()",93957346916784,93957346917074],["v8::platform::DefaultPlatform::MonotonicallyIncreasingTime()",93957346917952,93957346917988],["std::__1::__shared_ptr_emplace<v8::platform::DefaultForegroundTaskRunner, std::__1::allocator<v8::platform::DefaultForegroundTaskRunner> >::~__shared_ptr_emplace()",93957346918256,93957346918294],["v8::base::debug::(anonymous namespace)::PrintBacktraceOutputHandler::HandleOutput(char const*)",93957346921280,93957346921319],["v8::platform::DefaultJobHandle::DefaultJobHandle(std::__1::shared_ptr<v8::platform::DefaultJobState>)",93957346923184,93957346923215],["v8::platform::DefaultJobState::JobDelegate::ShouldYield()",93957346923888,93957346923903],["v8::platform::DefaultForegroundTaskRunner::RunTaskScope::RunTaskScope(std::__1::shared_ptr<v8::platform::DefaultForegroundTaskRunner>)",93957346924384,93957346924474],["v8::platform::DefaultForegroundTaskRunner::PostNonNestableDelayedTask(std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> >, double)",93957346926512,93957346926584],["v8::platform::DefaultForegroundTaskRunner::~DefaultForegroundTaskRunner()",93957346929376,93957346929745],["v8::platform::DefaultWorkerThreadsTaskRunner::~DefaultWorkerThreadsTaskRunner()",93957346932384,93957346932532],["v8::platform::DelayedTaskQueue::DelayedTaskQueue(double (*)())",93957346933264,93957346933346],["v8::platform::tracing::TraceBufferRingBuffer::GetEventByHandle(unsigned long)",93957346935392,93957346935546],["v8::platform::tracing::TraceConfig::CreateDefaultTraceConfig()",93957346939680,93957346939773],["v8::platform::tracing::JSONTraceWriter::~JSONTraceWriter()",93957346943744,93957346943798],["v8::platform::tracing::TracingController::CurrentTimestampMicroseconds()",93957346946288,93957346946298],["v8::platform::tracing::TracingController::RemoveTraceStateObserver(v8::TracingController::TraceStateObserver*)",93957346947744,93957346947882],["icu_68::ICUCollatorFactory::~ICUCollatorFactory()",93957346949584,93957346949594],["icu_68::Calendar::Calendar(icu_68::TimeZone*, icu_68::Locale const&, UErrorCode&)",93957346951664,93957346951872],["icu_68::getCalendarTypeForLocale(char const*)",93957346954160,93957346954830],["icu_68::Calendar::isEquivalentTo(icu_68::Calendar const&) const",93957346955824,93957346956031],["icu_68::Calendar::setRelatedYear(int)",93957346957840,93957346958426],["icu_68::Calendar::getFirstDayOfWeek() const",93957346961072,93957346961084],["icu_68::Calendar::getImmediatePreviousZoneTransition(double, double*, UErrorCode&) const",93957346968192,93957346968490],["icu_68::Calendar::getMaximum(UCalendarDateFields) const",93957346971728,93957346971750],["icu_68::Calendar::computeTime(UErrorCode&)",93957346972864,93957346973592],["icu_68::Calendar::getActualHelper(UCalendarDateFields, int, int, UErrorCode&) const",93957346977584,93957346978498],["calendar_cleanup()",93957346983344,93957346983389],["icu_68::LocaleCacheKey<icu_68::SharedCalendar>::writeDescription(char*, int) const",93957346984096,93957346984138],["icu_68::BuddhistCalendar::handleComputeMonthStart(int, int, signed char) const",93957346984416,93957346984426],["icu_68::ChineseCalendar::getChineseCalZoneAstroCalc() const",93957346985200,93957346985431],["icu_68::ChineseCalendar::handleGetMonthLength(int, int) const",93957346985872,93957346985940],["icu_68::ChineseCalendar::newMoonNear(double, signed char) const",93957346987568,93957346987987],["icu_68::CECalendar::inDaylightTime(UErrorCode&) const",93957346989856,93957346989925],["icu_68::CalendarAstronomer::getSunLongitude()",93957346991040,93957346991139],["icu_68::CalendarAstronomer::getMoonTime(icu_68::CalendarAstronomer::MoonAge const&, signed char)",93957346993184,93957346993238],["icu_68::Collator::createInstance(icu_68::Locale const&, UErrorCode&)",93957346994384,93957346995934],["icu_68::isAvailableLocaleListInitialized(UErrorCode&)",93957346996352,93957346997032],["icu_68::WholeStringBreakIterator::refreshInputText(UText*, UErrorCode&)",93957346997344,93957346997366],["icu_68::ICUCollatorService::handleDefault(icu_68::ICUServiceKey const&, icu_68::UnicodeString*, UErrorCode&) const",93957346997824,93957346998165],["icu_68::CollationRoot::getRoot(UErrorCode&)",93957346999296,93957346999411],["icu_68::CollationCacheEntry::~CollationCacheEntry()",93957347000304,93957347000382],["icu_68::CollationSettings::aliasReordering(icu_68::CollationData const&, int const*, int, unsigned int const*, int, unsigned char const*, UErrorCode&)",93957347001936,93957347002275],["icu_68::CollationData::getIndirectCE32(unsigned int) const",93957347004832,93957347004885],["icu_68::Collation::incTwoBytePrimaryByOffset(unsigned int, signed char, int)",93957347007952,93957347008099],["icu_68::CollationSettings* icu_68::SharedObject::copyOnWrite<icu_68::CollationSettings>(icu_68::CollationSettings const*&)",93957347011440,93957347011538],["icu_68::CopticCalendar::getType() const",93957347021776,93957347021789],["icu_68::CECalendar::CECalendar(icu_68::CECalendar const&)",93957347022640,93957347022671],["icu_68::CurrencyUnit::operator=(icu_68::CurrencyUnit const&)",93957347023632,93957347023682],["icu_68::DangiCalendar::getType() const",93957347024816,93957347024829],["icu_68::DateFormat::DateFormat()",93957347025168,93957347025226],["icu_68::DateFormat::format(icu_68::Calendar&, icu_68::UnicodeString&, icu_68::FieldPositionIterator*, UErrorCode&) const",93957347026336,93957347026360],["icu_68::DateFormat::getBestPattern(icu_68::Locale const&, icu_68::UnicodeString const&, UErrorCode&)",93957347027392,93957347027842],["icu_68::DateFormat::adoptTimeZone(icu_68::TimeZone*)",93957347028336,93957347028360],["icu_68::DateFormat::getContext(UDisplayContextType, UErrorCode&) const",93957347028784,93957347028818],["icu_68::LocaleCacheKey<icu_68::DateFmtBestPattern>::~LocaleCacheKey()",93957347029664,93957347029714],["icu_68::DecimalFormat::setAttribute(UNumberFormatAttribute, int, UErrorCode&)",93957347032304,93957347032955],["icu_68::DecimalFormat::setParseCaseSensitive(signed char)",93957347033520,93957347033587],["icu_68::DecimalFormat::DecimalFormat(icu_68::UnicodeString const&, icu_68::DecimalFormatSymbols const&, UErrorCode&)",93957347034464,93957347034740],["icu_68::DecimalFormat::format(double, icu_68::UnicodeString&, icu_68::FieldPositionIterator*, UErrorCode&) const",93957347037568,93957347038171],["icu_68::DecimalFormat::format(icu_68::number::impl::DecimalQuantity const&, icu_68::UnicodeString&, icu_68::FieldPositionIterator*, UErrorCode&) const",93957347040304,93957347040760],["icu_68::DecimalFormat::adoptCurrencyPluralInfo(icu_68::CurrencyPluralInfo*)",93957347042752,93957347042853],["icu_68::DecimalFormat::setMultiplier(int)",93957347043904,93957347044042],["icu_68::DecimalFormat::setPadCharacter(icu_68::UnicodeString const&)",93957347044560,93957347044867],["icu_68::DecimalFormat::setExponentSignAlwaysShown(signed char)",93957347045280,93957347045341],["icu_68::DecimalFormat::toLocalizedPattern(icu_68::UnicodeString&) const",93957347046608,93957347046823],["icu_68::DecimalFormat::setMinimumFractionDigits(int)",93957347047408,93957347047479],["icu_68::number::impl::CurrencyPluralInfoAffixProvider::~CurrencyPluralInfoAffixProvider()",93957347049216,93957347049679],["icu_68::CurrencyPluralInfo::CurrencyPluralInfo(icu_68::Locale const&, UErrorCode&)",93957347050144,93957347050175],["icu_68::CurrencyPluralInfo::getCurrencyPluralPattern(icu_68::UnicodeString const&, icu_68::UnicodeString&) const",93957347051408,93957347051687],["icu_68::DecimalFormatSymbols::DecimalFormatSymbols(icu_68::Locale const&, icu_68::NumberingSystem const&, UErrorCode&)",93957347057776,93957347058427],["icu_68::DecimalFormatSymbols::getPatternForCurrencySpacing(UCurrencySpacing, signed char, UErrorCode&) const",93957347062960,93957347063013],["icu_68::DateFormatSymbols::getDynamicClassID() const",93957347065664,93957347065677],["icu_68::DateFormatSymbols::createZoneStrings(icu_68::UnicodeString const* const*)",93957347108064,93957347108780],["icu_68::DateFormatSymbols::getMonths(int&, icu_68::DateFormatSymbols::DtContextType, icu_68::DateFormatSymbols::DtWidthType) const",93957347113552,93957347113690],["icu_68::DateFormatSymbols::isNumericPatternChar(char16_t, int)",93957347114256,93957347114353],["icu_68::Hashtable::put(icu_68::UnicodeString const&, void*, UErrorCode&)",93957347120272,93957347120358],["icu_68::(anonymous namespace)::CalendarDataSink::deleteUnicodeStringArray(void*)",93957347123808,93957347123890],["icu_68::FormattedDateInterval::~FormattedDateInterval()",93957347124288,93957347124352],["icu_68::DateIntervalFormat::~DateIntervalFormat()",93957347125776,93957347126220],["icu_68::DateIntervalFormat::fallbackFormat(icu_68::Calendar&, icu_68::Calendar&, signed char, icu_68::UnicodeString&, signed char&, icu_68::FieldPositionHandler&, UErrorCode&) const",93957347130224,93957347131466],["icu_68::DateIntervalFormat::normalizeHourMetacharacters(icu_68::UnicodeString const&) const",93957347134544,93957347135942],["icu_68::DateIntervalFormat::splitPatternInto2Part(icu_68::UnicodeString const&)",93957347140336,93957347140689],["icu_68::DateIntervalInfo::setIntervalPatternInternally(icu_68::UnicodeString const&, UCalendarDateFields, icu_68::UnicodeString const&, UErrorCode&)",93957347146432,93957347146830],["icu_68::DateIntervalInfo::getIntervalPattern(icu_68::UnicodeString const&, UCalendarDateFields, icu_68::UnicodeString&, UErrorCode&) const",93957347148416,93957347148544],["icu_68::dtitvinfHashTableValueComparator(UElement, UElement)",93957347150800,93957347150964],["icu_68::DateTimePatternGenerator::createInstanceNoStdPat(icu_68::Locale const&, UErrorCode&)",93957347152848,93957347152965],["icu_68::DateTimePatternGenerator::~DateTimePatternGenerator()",93957347158960,93957347158988],["icu_68::DateTimePatternGenerator::getAllowedHourFormats(icu_68::Locale const&, UErrorCode&)",93957347161872,93957347162712],["icu_68::DateTimePatternGenerator::getCalendarTypeToUse(icu_68::Locale const&, icu_68::CharString&, UErrorCode&)",93957347167216,93957347167571],["icu_68::DateTimePatternGenerator::getBestPattern(icu_68::UnicodeString const&, UErrorCode&)",93957347168640,93957347168669],["icu_68::PatternMap::getPatternFromBasePattern(icu_68::UnicodeString const&, signed char&) const",93957347176560,93957347176874],["icu_68::PatternMap::getDuplicateElem(icu_68::UnicodeString const&, icu_68::PtnSkeleton const&, icu_68::PtnElem*)",93957347179600,93957347180012],["icu_68::DateTimePatternGenerator::AppendItemFormatsSink::put(char const*, icu_68::ResourceValue&, signed char, UErrorCode&)",93957347182176,93957347182608],["icu_68::EthiopicCalendar::getType() const",93957347186288,93957347186319],["icu_68::Formattable::getDynamicClassID() const",93957347187184,93957347187197],["icu_68::Formattable::dispose()",93957347188528,93957347188779],["icu_68::Formattable::setDouble(double)",93957347189440,93957347189483],["icu_68::Formattable::adoptDecimalQuantity(icu_68::number::impl::DecimalQuantity*)",93957347189968,93957347190090],["icu_68::Format::setLocaleIDs(char const*, char const*)",93957347190560,93957347190602],["icu_68::FormattedValueFieldPositionIteratorImpl::getHandler(UErrorCode&)",93957347191360,93957347191388],["icu_68::FormattedValueStringBuilderImpl::toTempString(UErrorCode&) const",93957347193408,93957347193436],["icu_68::FormattedStringBuilder::FormattedStringBuilder()",93957347195808,93957347195828],["icu_68::FormattedStringBuilder::codePointAt(int) const",93957347196816,93957347196991],["icu_68::FormattedStringBuilder::prepareForInsertHelper(int, int, UErrorCode&)",93957347199184,93957347199916],["icu_68::ConstrainedFieldPosition::constrainField(int, int)",93957347200432,93957347200448],["icu_68::FieldPositionOnlyHandler::setAcceptFirstOnly(signed char)",93957347200752,93957347200762],["icu_68::FieldPositionIterator::~FieldPositionIterator()",93957347201568,93957347201631],["icu_68::GregorianCalendar::GregorianCalendar(icu_68::GregorianCalendar const&)",93957347202448,93957347202567],["icu_68::GregorianCalendar::handleGetYearLength(int) const",93957347204416,93957347204515],["icu_68::GregorianCalendar::handleGetExtendedYear()",93957347206176,93957347206318],["icu_68::ClockMath::floorDivide(long, long)",93957347206896,93957347206966],["icu_68::HebrewCalendar::HebrewCalendar(icu_68::Locale const&, UErrorCode&)",93957347208432,93957347208512],["icu_68::HebrewCalendar::handleGetLimit(UCalendarDateFields, icu_68::Calendar::ELimitType) const",93957347209904,93957347209931],["icu_68::initializeSystemDefaultCentury()",93957347211792,93957347212129],["icu_68::IndianCalendar::handleGetYearLength(int) const",93957347212544,93957347212625],["icu_68::IslamicCalendar::clone() const",93957347214096,93957347214170],["icu_68::IslamicCalendar::handleGetYearLength(int) const",93957347215536,93957347216028],["icu_68::JapaneseCalendar::JapaneseCalendar(icu_68::Locale const&, UErrorCode&)",93957347217968,93957347218024],["icu_68::JapaneseCalendar::handleComputeFields(int, UErrorCode&)",93957347218736,93957347218858],["icu_68::EraRules::getStartYear(int, UErrorCode&) const",93957347220736,93957347220797],["icu_68::uprv_deleteListFormatInternal(void*)",93957347221504,93957347221569],["icu_68::ListFormatter::~ListFormatter()",93957347223456,93957347223541],["icu_68::(anonymous namespace)::createPatternHandler(char const*, icu_68::UnicodeString const&, icu_68::UnicodeString const&, UErrorCode&)",93957347226288,93957347228791],["icu_68::(anonymous namespace)::ContextualHandler::getEndPattern(icu_68::UnicodeString const&) const",93957347230048,93957347230093],["icu_68::MeasureUnit::getPermille()",93957347230912,93957347230949],["icu_68::MeasureUnit::operator=(icu_68::MeasureUnit&&)",93957347232496,93957347232686],["icu_68::MeasureUnit::setTo(int, int)",93957347233552,93957347233695],["icu_68::Measure::~Measure()",93957347235328,93957347235385],["icu_68::number::impl::AffixUtils::hasCurrencySymbols(icu_68::UnicodeString const&, UErrorCode&)",93957347238272,93957347238588],["icu_68::number::impl::DecimalQuantity::operator=(icu_68::number::impl::DecimalQuantity&&)",93957347239776,93957347239990],["icu_68::number::impl::DecimalQuantity::divideBy(icu_68::number::impl::DecNum const&, UErrorCode&)",93957347241376,93957347241588],["icu_68::number::impl::DecimalQuantity::isNegative() const",93957347243376,93957347243387],["icu_68::number::impl::DecimalQuantity::signum() const",93957347244064,93957347244138],["icu_68::number::impl::DecimalQuantity::setToDouble(double)",93957347245920,93957347246113],["icu_68::number::impl::DecimalQuantity::roundToNickel(int, UNumberFormatRoundingMode, UErrorCode&)",93957347248976,93957347248994],["icu_68::double_conversion::BignumDtoa(double, icu_68::double_conversion::BignumDtoaMode, int, icu_68::double_conversion::Vector<char>, int*, int*)",93957347253712,93957347255494],["icu_68::double_conversion::Bignum::SubtractBignum(icu_68::double_conversion::Bignum const&)",93957347258816,93957347259525],["icu_68::double_conversion::Bignum::Compare(icu_68::double_conversion::Bignum const&, icu_68::double_conversion::Bignum const&)",93957347264368,93957347264552],["bool icu_68::double_conversion::IsHexFloatString<char const*>(char const*, char const*, unsigned short, bool)",93957347275456,93957347276408],["icu_68::double_conversion::ComputeGuess(icu_68::double_conversion::Vector<char const>, int, double*)",93957347282960,93957347284473],["icu_68::number::impl::DecimalFormatProperties::getDefault()",93957347287808,93957347288120],["icu_68::number::NumberFormatterSettings<icu_68::number::LocalizedNumberFormatter>::grouping(UNumberGroupingStrategy) const &",93957347290736,93957347291052],["icu_68::number::NumberFormatter::withLocale(icu_68::Locale const&)",93957347293216,93957347293649],["icu_68::number::impl::AutoAffixPatternProvider::setTo(icu_68::number::impl::AffixPatternProvider const*, UErrorCode&)",93957347296448,93957347296813],["icu_68::number::impl::MicroProps::~MicroProps()",93957347299360,93957347299543],["icu_68::number::impl::NumberFormatterImpl::format(icu_68::number::impl::UFormattedNumberData*, UErrorCode&) const",93957347302576,93957347303357],["icu_68::number::impl::NumberFormatterImpl::writeIntegerDigits(icu_68::number::impl::MicroProps const&, icu_68::number::impl::DecimalQuantity&, icu_68::FormattedStringBuilder&, int, UErrorCode&)",93957347308336,93957347308706],["icu_68::SingleUnitImpl::getSimpleUnitID() const",93957347310608,93957347310628],["icu_68::MeasureUnit::product(icu_68::MeasureUnit const&, UErrorCode&) const",93957347314000,93957347315111],["icu_68::MeasureUnitImpl* icu_68::MemoryPool<icu_68::MeasureUnitImpl, 8>::create<icu_68::SingleUnitImpl const&, UErrorCode&>(icu_68::SingleUnitImpl const&, UErrorCode&)",93957347318160,93957347318502],["icu_68::number::impl::CompactHandler::~CompactHandler()",93957347322368,93957347322396],["icu_68::number::IntegerWidth::IntegerWidth(short, short, bool)",93957347323696,93957347323716],["icu_68::number::impl::LongNameHandler::simpleFormatsToModifiers(icu_68::UnicodeString const*, icu_68::FormattedStringBuilder::Field, UErrorCode&)",93957347327712,93957347328298],["icu_68::number::impl::MixedUnitLongNameHandler::forMeasureUnit(icu_68::Locale const&, icu_68::MeasureUnit const&, UNumberUnitWidth const&, icu_68::PluralRules const*, icu_68::number::impl::MicroPropsGenerator const*, icu_68::number::impl::MixedUnitLongNameHandler*, UErrorCode&)",93957347330896,93957347331972],["non-virtual thunk to icu_68::number::impl::LongNameHandler::~LongNameHandler()",93957347336096,93957347336356],["icu_68::number::impl::MixedUnitLongNameHandler* icu_68::MemoryPool<icu_68::number::impl::MixedUnitLongNameHandler, 8>::create<>()",93957347337888,93957347338371],["icu_68::number::impl::PropertiesAffixPatternProvider::positiveHasPlusSign() const",93957347343168,93957347343324],["icu_68::number::impl::CurrencyPluralInfoAffixProvider::getString(int) const",93957347344464,93957347344512],["icu_68::number::impl::PropertiesAffixPatternProvider::~PropertiesAffixPatternProvider()",93957347344784,93957347344867],["icu_68::number::impl::CurrencySymbols::getIntlCurrencySymbol(UErrorCode&) const",93957347345760,93957347345822],["icu_68::number::impl::SimpleModifier::SimpleModifier(icu_68::SimpleFormatter const&, icu_68::FormattedStringBuilder::Field, bool, icu_68::number::impl::Modifier::Parameters)",93957347346320,93957347346757],["icu_68::number::impl::SimpleModifier::semanticallyEquivalent(icu_68::number::impl::Modifier const&) const",93957347347200,93957347347408],["icu_68::number::impl::CurrencySpacingEnabledModifier::CurrencySpacingEnabledModifier(icu_68::FormattedStringBuilder const&, icu_68::FormattedStringBuilder const&, bool, bool, icu_68::DecimalFormatSymbols const&, UErrorCode&)",93957347347968,93957347349017],["icu_68::number::impl::SimpleModifier::~SimpleModifier()",93957347351152,93957347351176],["icu_68::number::Scale::Scale(icu_68::number::Scale&&)",93957347351920,93957347351952],["icu_68::number::impl::MultiplierFormatHandler::setAndChain(icu_68::number::Scale const&, icu_68::number::impl::MicroPropsGenerator const*)",93957347352624,93957347352744],["icu_68::number::Notation::compactLong()",93957347353120,93957347353156],["icu_68::number::impl::UFormattedNumberData::~UFormattedNumberData()",93957347353600,93957347353657],["icu_68::number::impl::MutablePatternModifier::setNumberProperties(icu_68::number::impl::Signum, icu_68::StandardPlural::Form)",93957347354928,93957347354946],["icu_68::number::impl::MutablePatternModifier::processQuantity(icu_68::number::impl::DecimalQuantity&, icu_68::number::impl::MicroProps&, UErrorCode&) const",93957347356896,93957347357324],["icu_68::number::impl::MutablePatternModifier::getSymbol(icu_68::number::impl::AffixPatternType) const",93957347358416,93957347358694],["icu_68::number::impl::ImmutablePatternModifier::~ImmutablePatternModifier()",93957347359040,93957347359072],["icu_68::number::impl::ParsedPatternInfo::getString(int) const",93957347360400,93957347360566],["icu_68::number::impl::ParsedPatternInfo::consumePadding(UNumberFormatPadPosition, UErrorCode&)",93957347360896,93957347361131],["icu_68::number::impl::ParsedPatternInfo::~ParsedPatternInfo()",93957347364912,93957347364978],["icu_68::number::impl::ParsedPatternInfo::~ParsedPatternInfo()",93957347374416,93957347374490],["icu_68::number::Precision::minMaxFraction(int, int)",93957347376208,93957347376283],["icu_68::number::Precision::withCurrency(icu_68::CurrencyUnit const&, UErrorCode&) const",93957347376960,93957347377329],["(anonymous namespace)::getDisplayMagnitudeSignificant(icu_68::number::impl::DecimalQuantity const&, int)",93957347378368,93957347378413],["icu_68::number::impl::ScientificHandler::getMultiplier(int) const",93957347379408,93957347379469],["icu_68::number::impl::stem_to_object::roundingMode(icu_68::number::impl::skeleton::StemEnum)",93957347379872,93957347379892],["icu_68::number::impl::GeneratorHelpers::generateSkeleton(icu_68::number::impl::MacroProps const&, icu_68::UnicodeString&, UErrorCode&)",93957347386608,93957347387480],["icu_68::number::impl::blueprint_helpers::parseIdentifierUnitOption(icu_68::StringSegment const&, icu_68::number::impl::MacroProps&, UErrorCode&)",93957347392384,93957347393528],["icu_68::number::impl::GeneratorHelpers::notation(icu_68::number::impl::MacroProps const&, icu_68::UnicodeString&, UErrorCode&)",93957347396176,93957347396567],["icu_68::UnicodeString::truncate(int)",93957347398752,93957347398844],["icu_68::number::impl::SymbolsWrapper::doCopyFrom(icu_68::number::impl::SymbolsWrapper const&)",93957347400032,93957347400168],["icu_68::number::impl::SymbolsWrapper::isNumberingSystem() const",93957347400624,93957347400636],["icu_68::number::impl::UsagePrefsHandler::UsagePrefsHandler(icu_68::Locale const&, icu_68::MeasureUnit const&, icu_68::StringPiece, icu_68::number::impl::MicroPropsGenerator const*, UErrorCode&)",93957347401888,93957347402067],["icu_68::units::UnitsRouter::~UnitsRouter()",93957347404320,93957347404645],["icu_68::number::impl::DecNum::setTo(char const*, UErrorCode&)",93957347406480,93957347406654],["uprv_decContextDefault_68",93957347407472,93957347407575],["decDivideOp(decNumber*, decNumber const*, decNumber const*, decContext*, unsigned char, unsigned int*)",93957347411488,93957347415114],["decShiftToLeast(unsigned char*, int, int)",93957347420384,93957347420991],["icu_68::SharedNumberFormat::~SharedNumberFormat()",93957347423792,93957347423840],["icu_68::NumberFormat::format(long, icu_68::UnicodeString&, icu_68::FieldPosition&, UErrorCode&) const",93957347424576,93957347424601],["icu_68::NumberFormat::parse(icu_68::UnicodeString const&, icu_68::Formattable&, UErrorCode&) const",93957347426160,93957347426247],["icu_68::NumberFormat::createPercentInstance(icu_68::Locale const&, UErrorCode&)",93957347426992,93957347427010],["icu_68::NumberFormat::setMinimumIntegerDigits(int)",93957347427728,93957347427785],["icu_68::NumberFormat::getContext(UDisplayContextType, UErrorCode&) const",93957347428176,93957347428210],["icu_68::ICUNumberFormatService::handleDefault(icu_68::ICUServiceKey const&, icu_68::UnicodeString*, UErrorCode&) const",93957347431104,93957347431336],["icu_68::numparse::impl::AffixMatcherWarehouse::operator=(icu_68::numparse::impl::AffixMatcherWarehouse&&)",93957347432512,93957347433100],["icu_68::numparse::impl::NumberParserImpl::{unnamed type#1}::~NumberParserImpl()",93957347439104,93957347439573],["icu_68::numparse::impl::AffixMatcherWarehouse::AffixMatcherWarehouse()",93957347441328,93957347441765],["icu_68::numparse::impl::SeriesMatcher::smokeTest(icu_68::StringSegment const&) const",93957347447040,93957347447117],["icu_68::numparse::impl::AffixPatternMatcherBuilder::consumeToken(icu_68::number::impl::AffixPatternType, int, UErrorCode&)",93957347447536,93957347448352],["icu_68::numparse::impl::CodePointMatcher::toString() const",93957347449760,93957347449791],["icu_68::numparse::impl::AffixMatcher::compareTo(icu_68::numparse::impl::AffixMatcher const&) const",93957347454256,93957347455062],["icu_68::numparse::impl::CombinedCurrencyMatcher::CombinedCurrencyMatcher(icu_68::number::impl::CurrencySymbols const&, icu_68::DecimalFormatSymbols const&, int, UErrorCode&)",93957347457056,93957347457794],["icu_68::numparse::impl::ParsedNumber::success() const",93957347459584,93957347459607],["icu_68::numparse::impl::ScientificMatcher::~ScientificMatcher()",93957347460800,93957347460919],["icu_68::numparse::impl::InfinityMatcher::InfinityMatcher(icu_68::DecimalFormatSymbols const&)",93957347461600,93957347461726],["icu_68::numparse::impl::NanMatcher::accept(icu_68::StringSegment&, icu_68::numparse::impl::ParsedNumber&) const",93957347462128,93957347462145],["icu_68::numparse::impl::PlusSignMatcher::PlusSignMatcher(icu_68::DecimalFormatSymbols const&, bool)",93957347462640,93957347462772],["icu_68::numparse::impl::RequireDecimalSeparatorValidator::RequireDecimalSeparatorValidator(bool)",93957347463040,93957347463060],["icu_68::numparse::impl::MultiplierParseHandler::~MultiplierParseHandler()",93957347463312,93957347463354],["icu_68::NumberingSystem::~NumberingSystem()",93957347465504,93957347465554],["icu_68::OlsonTimeZone::operator==(icu_68::TimeZone const&) const",93957347467760,93957347467857],["icu_68::OlsonTimeZone::transitionTimeInSeconds(short) const",93957347469744,93957347469852],["icu_68::OlsonTimeZone::getPreviousTransition(double, signed char, icu_68::TimeZoneTransition&) const",93957347474128,93957347475227],["icu_68::BasicTimeZone::getOffsetFromLocal(double, int, int, int&, int&, UErrorCode&) const",93957347480016,93957347480037],["icu_68::PersianCalendar::getType() const",93957347480416,93957347480429],["icu_68::PersianCalendar::defaultCenturyStart() const",93957347481184,93957347481242],["icu_68::PluralRules::~PluralRules()",93957347482048,93957347482126],["icu_68::PluralRules::internalForLocale(icu_68::Locale const&, UPluralType, UErrorCode&)",93957347485840,93957347486449],["icu_68::RuleChain::select(icu_68::IFixedDecimal const&) const",93957347489024,93957347489240],["icu_68::AndConstraint::~AndConstraint()",93957347491680,93957347491759],["icu_68::PluralRuleParser::~PluralRuleParser()",93957347492928,93957347492952],["icu_68::PluralKeywordEnumeration::~PluralKeywordEnumeration()",93957347494480,93957347494530],["icu_68::FixedDecimal::isInfinite() const",93957347495744,93957347495757],["icu_68::LocaleCacheKey<icu_68::SharedPluralRules>::~LocaleCacheKey()",93957347496160,93957347496210],["icu_68::RuleBasedNumberFormat::init(icu_68::UnicodeString const&, icu_68::LocalizationInfo*, UParseError&, UErrorCode&)",93957347498128,93957347500863],["icu_68::RuleBasedNumberFormat::operator==(icu_68::Format const&) const",93957347502976,93957347503244],["icu_68::RuleBasedNumberFormat::findRuleSet(icu_68::UnicodeString const&, UErrorCode&) const",93957347505520,93957347505717],["icu_68::UnicodeString::indexOf(char16_t const*, int, int) const",93957347507632,93957347507712],["icu_68::RuleBasedNumberFormat::initializeDefaultInfinityRule(UErrorCode&)",93957347510928,93957347511295],["icu_68::RuleBasedNumberFormat::adoptDecimalFormatSymbols(icu_68::DecimalFormatSymbols*)",93957347513168,93957347513461],["icu_68::PluralFormat::PluralFormat(icu_68::PluralFormat const&)",93957347513968,93957347514188],["icu_68::PluralFormat::operator==(icu_68::Format const&) const",93957347517280,93957347517470],["icu_68::NFRule::~NFRule()",93957347520608,93957347520716],["icu_68::NFRule::getDivisor() const",93957347525520,93957347525539],["icu_68::NFRule::findText(icu_68::UnicodeString const&, icu_68::UnicodeString const&, int, int*) const",93957347531200,93957347532611],["icu_68::NFRuleSet::~NFRuleSet()",93957347535312,93957347535614],["icu_68::util64_fromDouble(double)",93957347538224,93957347538371],["icu_68::NumeratorSubstitution::NumeratorSubstitution(int, double, icu_68::NFRuleSet*, icu_68::UnicodeString const&, UErrorCode&)",93957347541088,93957347541438],["icu_68::NFSubstitution::doSubstitution(double, icu_68::UnicodeString&, int, int, UErrorCode&) const",93957347543088,93957347543504],["icu_68::ModulusSubstitution::doSubstitution(long, icu_68::UnicodeString&, int, int, UErrorCode&) const",93957347544320,93957347544441],["icu_68::FractionalPartSubstitution::operator==(icu_68::NFSubstitution const&) const",93957347546688,93957347546823],["icu_68::ModulusSubstitution::setDivisor(int, short, UErrorCode&)",93957347548688,93957347548734],["icu_68::ModulusSubstitution::composeRuleValue(double, double) const",93957347548928,93957347548992],["icu_68::AbsoluteValueSubstitution::composeRuleValue(double, double) const",93957347549136,93957347549149],["icu_68::CollationElementIterator::next(UErrorCode&)",93957347549456,93957347549661],["icu_68::CollationIterator::~CollationIterator()",93957347551968,93957347552053],["icu_68::CollationIterator::appendCEsFromCE32(icu_68::CollationData const*, int, unsigned int, signed char, UErrorCode&)",93957347552832,93957347557162],["icu_68::TailoredSet::forData(icu_68::CollationData const*, UErrorCode&)",93957347564960,93957347565024],["icu_68::TailoredSet::add(int)",93957347569152,93957347569358],["icu_68::RuleBasedCollator::RuleBasedCollator(icu_68::UnicodeString const&, UErrorCode&)",93957347572352,93957347572483],["icu_68::CollationBuilder::finalizeCEs(UErrorCode&)",93957347576928,93957347577130],["icu_68::CollationBuilder::findOrInsertWeakNode(int, unsigned int, int, UErrorCode&)",93957347582064,93957347582703],["icu_68::CollationBuilder::optimize(icu_68::UnicodeSet const&, char const*&, UErrorCode&)",93957347586528,93957347586550],["icu_68::CollationWeights::initForPrimary(signed char)",93957347591344,93957347591427],["icu_68::CollationRuleParser::CollationRuleParser(icu_68::CollationData const*, UErrorCode&)",93957347594688,93957347594768],["icu_68::CollationRuleParser::parseStarredCharacters(int, int, UErrorCode&)",93957347603392,93957347604742],["icu_68::CollationRuleParser::parseReordering(icu_68::UnicodeString const&, UErrorCode&)",93957347608304,93957347608988],["icu_68::CollationData::getCE32(int) const",93957347610848,93957347610989],["icu_68::DataBuilderCollationIterator::getCE32FromBuilderData(unsigned int, UErrorCode&)",93957347611344,93957347611573],["icu_68::CollationDataBuilder::addConditionalCE32(icu_68::UnicodeString const&, unsigned int, UErrorCode&)",93957347614304,93957347614477],["icu_68::CollationDataBuilder::copyFrom(icu_68::CollationDataBuilder const&, icu_68::CollationDataBuilder::CEModifier const&, UErrorCode&)",93957347620160,93957347620451],["icu_68::CollationDataBuilder::buildMappings(icu_68::CollationData&, UErrorCode&)",93957347622976,93957347623915],["icu_68::CollationFastLatinBuilder::CollationFastLatinBuilder(UErrorCode&)",93957347627680,93957347627807],["icu_68::CollationFastLatinBuilder::encodeContractions(UErrorCode&)",93957347630960,93957347631683],["icu_68::CollationRootElements::firstCEWithPrimaryAtLeast(unsigned int) const",93957347634608,93957347634806],["icu_68::RuleBasedTimeZone::getDynamicClassID() const",93957347636224,93957347636237],["icu_68::RuleBasedTimeZone::addTransitionRule(icu_68::TimeZoneRule*, UErrorCode&)",93957347639904,93957347640164],["icu_68::RuleBasedTimeZone::findRuleInFinal(double, signed char, int, int) const",93957347641504,93957347642274],["icu_68::RuleBasedTimeZone::countTransitionRules(UErrorCode&) const",93957347644752,93957347644786],["icu_68::Region::getInstance(char const*, UErrorCode&)",93957347652688,93957347653072],["icu_68::RelativeDateTimeCacheData::~RelativeDateTimeCacheData()",93957347654208,93957347654236],["icu_68::RelativeDateTimeFormatter::~RelativeDateTimeFormatter()",93957347657488,93957347657516],["icu_68::LocaleCacheKey<icu_68::RelativeDateTimeCacheData>::~LocaleCacheKey()",93957347662768,93957347662818],["icu_68::RelativeDateFormat::~RelativeDateFormat()",93957347665424,93957347665568],["icu_68::RelativeDateFormat::toPattern(icu_68::UnicodeString&, UErrorCode&) const",93957347668928,93957347669052],["icu_68::CollationKeyByteSink::AppendBeyondCapacity(char const*, int, int)",93957347670160,93957347670232],["icu_68::RuleBasedCollator::operator==(icu_68::Collator const&) const",93957347671072,93957347671367],["icu_68::RuleBasedCollator::setAttribute(UColAttribute, UColAttributeValue, UErrorCode&)",93957347672400,93957347672928],["icu_68::RuleBasedCollator::setReorderCodes(int const*, int, UErrorCode&)",93957347674656,93957347675022],["icu_68::(anonymous namespace)::compareNFDIter(icu_68::Normalizer2Impl const&, icu_68::(anonymous namespace)::NFDIterator&, icu_68::(anonymous namespace)::NFDIterator&)",93957347681248,93957347681913],["icu_68::RuleBasedCollator::writeSortKey(char16_t const*, int, icu_68::SortKeyByteSink&, UErrorCode&) const",93957347684928,93957347685725],["icu_68::(anonymous namespace)::UTF16NFDIterator::nextRawCodePoint()",93957347690448,93957347690565],["icu_68::(anonymous namespace)::FixedSortKeyByteSink::AppendBeyondCapacity(char const*, int, int)",93957347691200,93957347691231],["u_writeIdenticalLevelRun_68",93957347704240,93957347705374],["icu_68::SimpleTimeZone::deleteTransitionRules()",93957347706000,93957347706110],["icu_68::SimpleTimeZone::getOffset(unsigned char, int, int, int, unsigned char, int, int, UErrorCode&) const",93957347707088,93957347707348],["icu_68::SimpleTimeZone::inDaylightTime(double, UErrorCode&) const",93957347709296,93957347709418],["icu_68::SimpleDateFormat::getDynamicClassID() const",93957347712672,93957347712685],["icu_68::SimpleDateFormat::SimpleDateFormat(icu_68::UnicodeString const&, icu_68::Locale const&, UErrorCode&)",93957347719040,93957347719532],["icu_68::SimpleDateFormat::format(icu_68::Calendar&, icu_68::UnicodeString&, icu_68::FieldPosition&) const",93957347722272,93957347722411],["icu_68::SimpleDateFormat::tzFormat(UErrorCode&) const",93957347731408,93957347731513],["icu_68::SimpleDateFormat::matchQuarterString(icu_68::UnicodeString const&, int, UCalendarDateFields, icu_68::UnicodeString const*, int, icu_68::Calendar&) const",93957347746032,93957347746269],["icu_68::SimpleDateFormat::translatePattern(icu_68::UnicodeString const&, icu_68::UnicodeString&, icu_68::UnicodeString const&, icu_68::UnicodeString const&, UErrorCode&)",93957347748640,93957347749054],["icu_68::SimpleDateFormat::getTimeZoneFormat() const",93957347750528,93957347750639],["icu_68::MessageFormat::getDynamicClassID() const",93957347752544,93957347752557],["icu_68::MessageFormat::clone() const",93957347754368,93957347754419],["icu_68::MessageFormat::setArgStartFormat(int, icu_68::Format*, UErrorCode&)",93957347756112,93957347756347],["icu_68::MessageFormat::getFormats(int&) const",93957347759328,93957347759740],["icu_68::MessageFormat::formatComplexSubMessage(int, void const*, icu_68::Formattable const*, icu_68::UnicodeString const*, int, icu_68::AppendableWrapper&, UErrorCode&) const",93957347764928,93957347766292],["icu_68::MessageFormat::parseObject(icu_68::UnicodeString const&, icu_68::Formattable&, icu_68::ParsePosition&) const",93957347769952,93957347770013],["icu_68::FormatNameEnumeration::~FormatNameEnumeration()",93957347771920,93957347771976],["icu_68::SelectFormat::findSubMessage(icu_68::MessagePattern const&, int, icu_68::UnicodeString const&, UErrorCode&)",93957347773952,93957347774505],["icu_68::number::impl::LocalizedNumberFormatterAsFormat::parseObject(icu_68::UnicodeString const&, icu_68::Formattable&, icu_68::ParsePosition&) const",93957347775936,93957347775949],["icu_68::DayPeriodRules::getDayPeriodFromString(char const*)",93957347778576,93957347778933],["icu_68::SimpleDateFormatStaticSets::~SimpleDateFormatStaticSets()",93957347784096,93957347784208],["icu_68::StandardPlural::indexOrNegativeFromString(char const*)",93957347784784,93957347784993],["icu_68::StringSegment::setLength(int)",93957347785872,93957347785884],["icu_68::StringSegment::startsWith(icu_68::UnicodeString const&) const",93957347786464,93957347786712],["icu_68::TaiwanCalendar::handleGetExtendedYear()",93957347787264,93957347787417],["icu_68::TimeZone::TimeZone(icu_68::UnicodeString const&)",93957347788416,93957347788440],["icu_68::TimeZone::createDefault()",93957347789488,93957347789655],["icu_68::TimeZone::createTimeZoneIDEnumeration(USystemTimeZoneType, char const*, int const*, UErrorCode&)",93957347790864,93957347790874],["icu_68::TimeZone::getRegion(icu_68::UnicodeString const&, UErrorCode&)",93957347793248,93957347793426],["icu_68::TimeZone::getCanonicalID(icu_68::UnicodeString const&, icu_68::UnicodeString&, UErrorCode&)",93957347796944,93957347796979],["icu_68::initMap(USystemTimeZoneType, UErrorCode&)",93957347798400,93957347799406],["icu_68::TimeZoneFormat::expandOffsetPattern(icu_68::UnicodeString const&, icu_68::UnicodeString&, UErrorCode&)",93957347802368,93957347802904],["icu_68::TimeZoneFormat::clone() const",93957347805472,93957347805776],["icu_68::TimeZoneFormat::formatOffsetShortLocalizedGMT(int, icu_68::UnicodeString&, UErrorCode&) const",93957347809600,93957347809621],["icu_68::TimeZoneFormat::getTimeType(UTimeZoneNameType)",93957347816352,93957347816395],["icu_68::TimeZoneFormat::formatOffsetISO8601(int, signed char, signed char, signed char, signed char, icu_68::UnicodeString&, UErrorCode&) const",93957347818544,93957347819174],["icu_68::TimeZoneFormat::parseAbuttingOffsetFields(icu_68::UnicodeString const&, int, int&) const",93957347824192,93957347825468],["icu_68::GNameSearchHandler::handleMatch(int, icu_68::CharacterNode const*, UErrorCode&)",93957347827248,93957347827694],["icu_68::TZGNCore::getDisplayName(icu_68::TimeZone const&, UTimeZoneGenericNameType, double, icu_68::UnicodeString&) const",93957347830112,93957347830406],["icu_68::TZGNCore::findLocal(icu_68::UnicodeString const&, int, unsigned int, UErrorCode&) const",93957347836336,93957347836959],["icu_68::TimeZoneGenericNames::getDisplayName(icu_68::TimeZone const&, UTimeZoneGenericNameType, double, icu_68::UnicodeString&) const",93957347838224,93957347838241],["icu_68::TimeZoneNamesDelegate::operator==(icu_68::TimeZoneNames const&) const",93957347839200,93957347839285],["icu_68::TimeZoneNamesDelegate::getExemplarLocationName(icu_68::UnicodeString const&, icu_68::UnicodeString&) const",93957347839600,93957347839621],["icu_68::TimeZoneNames::MatchInfoCollection::MatchInfoCollection()",93957347840352,93957347840376],["icu_68::TimeZoneNames::MatchInfoCollection::getTimeZoneIDAt(int, icu_68::UnicodeString&) const",93957347841248,93957347841330],["icu_68::TextTrieMap::putImpl(icu_68::UnicodeString const&, void*, UErrorCode&)",93957347842208,93957347842626],["icu_68::MetaZoneIDsEnumeration::getDynamicClassID() const",93957347844512,93957347844525],["icu_68::TimeZoneNamesImpl::TimeZoneNamesImpl(icu_68::Locale const&, UErrorCode&)",93957347845376,93957347845515],["icu_68::TimeZoneNamesImpl::getAvailableMetaZoneIDs(UErrorCode&) const",93957347847920,93957347847933],["icu_68::TimeZoneNamesImpl::getExemplarLocationName(icu_68::UnicodeString const&, icu_68::UnicodeString&) const",93957347849008,93957347849160],["icu_68::TimeZoneNamesImpl::ZoneStringsLoader::~ZoneStringsLoader()",93957347851728,93957347851778],["icu_68::TZDBNameSearchHandler::~TZDBNameSearchHandler()",93957347855088,93957347855120],["icu_68::TZDBTimeZoneNames::getMetaZoneNames(icu_68::UnicodeString const&, UErrorCode&)",93957347856480,93957347857294],["icu_68::tzdbTimeZoneNames_cleanup()",93957347859568,93957347859656],["icu_68::InitialTimeZoneRule::InitialTimeZoneRule(icu_68::UnicodeString const&, int, int)",93957347860848,93957347860915],["icu_68::AnnualTimeZoneRule::~AnnualTimeZoneRule()",93957347861424,93957347861499],["icu_68::AnnualTimeZoneRule::getNextStart(double, int, int, signed char, double&) const",93957347862672,93957347862918],["icu_68::TimeArrayTimeZoneRule::operator==(icu_68::TimeZoneRule const&) const",93957347863888,93957347864046],["icu_68::TimeZoneTransition::TimeZoneTransition(double, icu_68::TimeZoneRule const&, icu_68::TimeZoneRule const&)",93957347864656,93957347864715],["icu_68::TimeZoneTransition::adoptFrom(icu_68::TimeZoneRule*)",93957347865120,93957347865157],["icu_68::LocaleCacheKey<icu_68::CollationCacheEntry>::createObject(void const*, UErrorCode&) const",93957347866464,93957347866546],["icu_68::CollationLoader::makeCacheEntryFromRoot(icu_68::Locale const&, UErrorCode&) const",93957347871536,93957347871593],["icu_68::LocaleCacheKey<icu_68::CollationCacheEntry>::~LocaleCacheKey()",93957347873072,93957347873122],["icu_68::UIterCollationIterator::previousCodePoint(UErrorCode&)",93957347873552,93957347873569],["icu_68::FCDUIterCollationIterator::nextSegment(UErrorCode&)",93957347874560,93957347875296],["icu_68::units::ComplexUnitsConverter::greaterThanOrEqual(double, double) const",93957347878432,93957347878471],["icu_68::units::(anonymous namespace)::strToDouble(icu_68::StringPiece, UErrorCode&)",93957347883088,93957347883250],["icu_68::units::(anonymous namespace)::loadCompoundFactor(icu_68::MeasureUnitImpl const&, icu_68::units::ConversionRates const&, UErrorCode&)",93957347887504,93957347889241],["icu_68::units::ConversionRateInfo* icu_68::MemoryPool<icu_68::units::ConversionRateInfo, 8>::create<>()",93957347893456,93957347893805],["icu_68::units::ConverterPreference* icu_68::MemoryPool<icu_68::units::ConverterPreference, 8>::create<icu_68::MeasureUnitImpl&, icu_68::MeasureUnitImpl&, double const&, icu_68::UnicodeString&, icu_68::units::ConversionRates&, UErrorCode&>(icu_68::MeasureUnitImpl&, icu_68::MeasureUnitImpl&, double const&, icu_68::UnicodeString&, icu_68::units::ConversionRates&, UErrorCode&)",93957347900160,93957347900564],["icu_68::UTF16CollationIterator::previousCodePoint(UErrorCode&)",93957347901072,93957347901181],["icu_68::FCDUTF16CollationIterator::handleNextCE32(int&, UErrorCode&)",93957347901920,93957347902367],["icu_68::UTF8CollationIterator::resetToOffset(int)",93957347904960,93957347904990],["icu_68::FCDUTF8CollationIterator::~FCDUTF8CollationIterator()",93957347906528,93957347906573],["icu_68::FCDUTF8CollationIterator::foundNULTerminator()",93957347909760,93957347909811],["icu_68::ZoneMeta::findTimeZoneID(icu_68::UnicodeString const&)",93957347913984,93957347913994],["icu_68::ZoneMeta::getZoneIdByMetazone(icu_68::UnicodeString const&, icu_68::UnicodeString const&, icu_68::UnicodeString&)",93957347917920,93957347918525],["icu_68::ZoneMeta::getShortID(icu_68::UnicodeString const&)",93957347920768,93957347920819],["icu_68::BreakIterator::BreakIterator()",93957347922800,93957347922827],["icu_68::ICUBreakIteratorService::ICUBreakIteratorService()",93957347924192,93957347924426],["icu_68::CharStringByteSink::GetAppendBuffer(int, int, char*, int, int*)",93957347925728,93957347925818],["icu_68::BytesTrieBuilder::~BytesTrieBuilder()",93957347926368,93957347926463],["icu_68::BytesTrieBuilder::getLimitOfLinearMatch(int, int, int) const",93957347927712,93957347927896],["icu_68::BytesTrieBuilder::write(int)",93957347928800,93957347929004],["icu_68::BytesTrie::next(int)",93957347930544,93957347930804],["icu_68::CanonicalIterator::next()",93957347932752,93957347933005],["icu_68::CharString::extract(char*, int, UErrorCode&) const",93957347939024,93957347939139],["icu_68::CharString::getAppendBuffer(int, int, int&, UErrorCode&)",93957347940048,93957347940145],["uprv_toupper_68",93957347940896,93957347940916],["icu_68::Edits::reset()",93957347941648,93957347941661],["icu_68::UStringSet::~UStringSet()",93957347944464,93957347944474],["icu_68::SimpleFilteredSentenceBreakIterator::internalNext(int)",93957347945904,93957347946126],["icu_68::SimpleFilteredSentenceBreakIterator::last()",93957347946896,93957347946914],["icu_68::SimpleFilteredSentenceBreakIterator::clone() const",93957347949904,93957347950014],["icu_68::SimpleFilteredSentenceBreakIterator::refreshInputText(UText*, UErrorCode&)",93957347950240,93957347950275],["icu_68::Norm2AllModes::getNFKC_CFInstance(UErrorCode&)",93957347951232,93957347951340],["icu_68::Normalizer2Factory::getNFKC_CFImpl(UErrorCode&)",93957347952800,93957347952916],["icu_68::LocaleBuilder::setRegion(icu_68::StringPiece)",93957347953968,93957347954070],["icu_68::LocaleMatcher::Builder::addSupportedLocale(icu_68::Locale const&)",93957347956816,93957347956982],["icu_68::LocaleMatcher::~LocaleMatcher()",93957347960112,93957347960350],["(anonymous namespace)::AvailableLocalesStringEnumeration::~AvailableLocalesStringEnumeration()",93957347962832,93957347962860],["uloc_getDisplayVariant_68",93957347963600,93957347963886],["icu_68::LocaleDistance::LocaleDistance(icu_68::LocaleDistanceData const&, icu_68::XLikelySubtags const&)",93957347969616,93957347970004],["icu_68::LocaleDisplayNamesImpl::LocaleDisplayNamesImpl(icu_68::Locale const&, UDisplayContext*, int)",93957347975152,93957347975872],["icu_68::LocaleDisplayNamesImpl::localeIdName(char const*, icu_68::UnicodeString&, bool) const",93957347980384,93957347980763],["icu_68::LocaleDisplayNamesImpl::languageDisplayName(char const*, icu_68::UnicodeString&) const",93957347983056,93957347983560],["icu_68::LocaleDisplayNames::createInstance(icu_68::Locale const&, UDisplayContext*, int)",93957347983776,93957347983852],["icu_68::Locale::~Locale()",93957347986880,93957347986968],["icu_68::Locale::operator=(icu_68::Locale&&)",93957347988592,93957347988779],["icu_68::Locale::minimizeSubtags(UErrorCode&)",93957347999936,93957348000152],["icu_68::KeywordEnumeration::~KeywordEnumeration()",93957348004800,93957348004854],["icu_68::Locale::setUnicodeKeywordValue(icu_68::StringPiece, icu_68::StringPiece, UErrorCode&)",93957348006624,93957348006980],["icu_68::(anonymous namespace)::AliasData::cleanup()",93957348009648,93957348009767],["ulocimp_getRegionForSupplementalData_68",93957348013776,93957348014250],["icu_68::XLikelySubtagsData::~XLikelySubtagsData()",93957348022160,93957348022462],["icu_68::XLikelySubtags::compareLikely(icu_68::LSR const&, icu_68::LSR const&, int) const",93957348025136,93957348025438],["service_cleanup()",93957348029568,93957348029627],["icu_68::MessagePattern::MessagePattern(UErrorCode&)",93957348030704,93957348030887],["icu_68::MessagePattern::parseChoiceStyle(int, int, UParseError*, UErrorCode&)",93957348033200,93957348034362],["icu_68::MessagePattern::parseArg(int, int, int, UParseError*, UErrorCode&)",93957348037424,93957348039343],["icu_68::MessagePattern::parseDouble(int, int, signed char, UParseError*, UErrorCode&)",93957348041904,93957348042665],["icu_68::Norm2AllModes::createNFCInstance(UErrorCode&)",93957348044112,93957348044329],["icu_68::Normalizer2WithImpl::normalize(icu_68::UnicodeString const&, icu_68::UnicodeString&, UErrorCode&) const",93957348045440,93957348045744],["icu_68::Normalizer2WithImpl::quickCheck(icu_68::UnicodeString const&, UErrorCode&) const",93957348046464,93957348046579],["icu_68::DecomposeNormalizer2::getQuickCheck(int) const",93957348046960,93957348047093],["icu_68::ComposeNormalizer2::normalize(char16_t const*, char16_t const*, icu_68::ReorderingBuffer&, UErrorCode&) const",93957348048400,93957348048443],["icu_68::NoopNormalizer2::normalize(icu_68::UnicodeString const&, icu_68::UnicodeString&, UErrorCode&) const",93957348048832,93957348048877],["icu_68::ReorderingBuffer::init(int, UErrorCode&)",93957348049808,93957348049986],["icu_68::Normalizer2Impl::~Normalizer2Impl()",93957348053104,93957348053187],["icu_68::Normalizer2Impl::decompose(char16_t const*, char16_t const*, icu_68::ReorderingBuffer*, UErrorCode&) const",93957348054736,93957348055534],["icu_68::Normalizer2Impl::hasDecompBoundaryAfter(int) const",93957348060608,93957348060904],["icu_68::Normalizer2Impl::composeQuickCheck(char16_t const*, char16_t const*, signed char, UNormalizationCheckResult*) const",93957348067984,93957348069255],["icu_68::Normalizer2Impl::findNextFCDBoundary(char16_t const*, char16_t const*) const",93957348077040,93957348077552],["icu_68::ParsePosition::getDynamicClassID() const",93957348080544,93957348080557],["icu_68::PropNameData::getPropertyValueName(int, int, int)",93957348081936,93957348082363],["uprv_getUTCtime_68",93957348083232,93957348083315],["uprv_round_68",93957348083552,93957348083570],["uprv_timezone_68",93957348083792,93957348083807],["u_getDataDirectory_68",93957348086432,93957348086525],["icu_68::RuleBasedBreakIterator::operator=(icu_68::RuleBasedBreakIterator const&)",93957348088224,93957348088624],["icu_68::RuleBasedBreakIterator::getText() const",93957348089632,93957348089645],["icu_68::RuleBasedBreakIterator::previous()",93957348090416,93957348090475],["icu_68::RuleBasedBreakIterator::getRuleStatusVec(int*, int, UErrorCode&)",93957348096560,93957348096756],["icu_68::UnhandledEngine::~UnhandledEngine()",93957348097776,93957348097834],["icu_68::ICULanguageBreakFactory::getEngineFor(int)",93957348098304,93957348098549],["icu_68::ThaiBreakEngine::ThaiBreakEngine(icu_68::DictionaryMatcher*, UErrorCode&)",93957348100240,93957348100888],["icu_68::BurmeseBreakEngine::BurmeseBreakEngine(icu_68::DictionaryMatcher*, UErrorCode&)",93957348105408,93957348105945],["icu_68::CjkBreakEngine::~CjkBreakEngine()",93957348109376,93957348109494],["icu_68::BytesDictionaryMatcher::matches(UText*, int, int, int*, int*, int*, int*) const",93957348114816,93957348115360],["icu_68::RuleBasedBreakIterator::BreakCache::~BreakCache()",93957348116416,93957348116443],["icu_68::RuleBasedBreakIterator::BreakCache::nextOL()",93957348118256,93957348118325],["icu_68::RBBIDataWrapper::addReference()",93957348121248,93957348121262],["icu_68::StringCharacterIterator::operator=(icu_68::StringCharacterIterator const&)",93957348122064,93957348122141],["icu_68::ICUServiceKey::canonicalID(icu_68::UnicodeString&) const",93957348122736,93957348122775],["icu_68::SimpleFactory::create(icu_68::ICUServiceKey const&, icu_68::ICUService const*, UErrorCode&) const",93957348123248,93957348123504],["icu_68::ICUService::getKey(icu_68::ICUServiceKey&, icu_68::UnicodeString*, icu_68::ICUServiceFactory const*, UErrorCode&) const",93957348124000,93957348126074],["icu_68::ICUService::unregister(void const*, UErrorCode&)",93957348127424,93957348127561],["icu_68::ICUService::acceptsListener(icu_68::EventListener const&) const",93957348128032,93957348128079],["icu_68::LocaleKeyFactory::updateVisibleIDs(icu_68::Hashtable&, UErrorCode&) const",93957348128704,93957348128922],["icu_68::ICULocaleService::~ICULocaleService()",93957348129264,93957348129318],["icu_68::ICULocaleService::registerInstance(icu_68::UObject*, icu_68::UnicodeString const&, signed char, UErrorCode&)",93957348129936,93957348130196],["icu_68::ServiceEnumeration::~ServiceEnumeration()",93957348130416,93957348130461],["icu_68::ServiceEnumeration::create(icu_68::ICULocaleService const*)",93957348130560,93957348130724],["icu_68::ServiceEnumeration::clone() const",93957348130976,93957348131059],["icu_68::ServiceEnumeration::ServiceEnumeration(icu_68::ServiceEnumeration const&, UErrorCode&)",93957348131360,93957348131590],["icu_68::LocaleKey::~LocaleKey()",93957348132256,93957348132322],["icu_68::LocaleKey::currentID(icu_68::UnicodeString&) const",93957348132720,93957348132784],["icu_68::LocaleKey::fallback()",93957348132976,93957348133196],["icu_68::ICUNotifier::~ICUNotifier()",93957348133536,93957348133608],["icu_68::ICUResourceBundleFactory::ICUResourceBundleFactory()",93957348134224,93957348134278],["icu_68::ICUResourceBundleFactory::getSupportedIDs(UErrorCode&) const",93957348134464,93957348134487],["icu_68::ResourceBundle::ResourceBundle(char const*, icu_68::Locale const&, UErrorCode&)",93957348134704,93957348134760],["icu_68::SimpleLocaleKeyFactory::~SimpleLocaleKeyFactory()",93957348135008,93957348135073],["icu_68::SimpleLocaleKeyFactory::getDynamicClassID() const",93957348135600,93957348135613],["icu_68::SimpleFormatter::~SimpleFormatter()",93957348135712,93957348135726],["icu_68::SimpleFormatter::format(char16_t const*, int, icu_68::UnicodeString const* const*, icu_68::UnicodeString&, icu_68::UnicodeString const*, signed char, int*, int, UErrorCode&)",93957348137392,93957348137780],["icu_68::unisets::chooseFrom(icu_68::UnicodeString, icu_68::unisets::Key, icu_68::unisets::Key)",93957348140064,93957348140208],["(anonymous namespace)::saveSet(icu_68::unisets::Key, icu_68::UnicodeString const&, UErrorCode&)",93957348142480,93957348142559],["icu_68::operator==(icu_68::StringPiece const&, icu_68::StringPiece const&)",93957348142768,93957348142825],["icu_68::StringTrieBuilder::writeNode(int, int, int)",93957348143136,93957348143644],["icu_68::StringTrieBuilder::makeBranchSubNode(int, int, int, int, UErrorCode&)",93957348145760,93957348147129],["icu_68::StringTrieBuilder::IntermediateValueNode::operator==(icu_68::StringTrieBuilder::Node const&) const",93957348147296,93957348147388],["icu_68::StringTrieBuilder::BranchHeadNode::markRightEdgesFirst(int)",93957348147616,93957348147655],["icu_68::StringTrieBuilder::SplitBranchNode::operator==(icu_68::StringTrieBuilder::Node const&) const",93957348148208,93957348148300],["uprv_sortArray_68",93957348148608,93957348149549],["ucase_getTrie_68",93957348150784,93957348150797],["ucase_getTypeOrIgnorable_68",93957348152336,93957348152487],["ucase_toFullUpper_68",93957348154768,93957348154784],["ucase_toFullFolding_68",93957348156304,93957348156906],["u_islower_68",93957348158464,93957348158600],["u_getUnicodeProperties_68",93957348159088,93957348159241],["u_isUWhiteSpace_68",93957348159888,93957348160027],["u_getNumericValue_68",93957348160672,93957348161283],["u_charAge_68",93957348161728,93957348161895],["upropsvec_addPropertyStarts_68",93957348162896,93957348162932],["icu_68::UCharsTrieBuilder::~UCharsTrieBuilder()",93957348163440,93957348163505],["icu_68::UCharsTrieBuilder::buildUChars(UStringTrieBuildOption, UErrorCode&)",93957348164096,93957348164800],["icu_68::UCharsTrieBuilder::getElementUnit(int, int) const",93957348164992,93957348165063],["icu_68::UCharsTrieBuilder::skipElementsBySomeUnits(int, int, int) const",93957348165584,93957348165776],["icu_68::UCharsTrieBuilder::createLinearMatchNode(int, int, int, icu_68::StringTrieBuilder::Node*) const",93957348166128,93957348166463],["icu_68::UCharsTrieBuilder::writeValueAndFinal(int, signed char)",93957348167008,93957348167199],["icu_68::UCharsTrie::current() const",93957348167616,93957348167664],["icu_68::UCharsTrie::branchNext(char16_t const*, int, int)",93957348168304,93957348168758],["icu_68::UCharsTrie::Iterator::~Iterator()",93957348169600,93957348169642],["icu_68::UCharCharacterIterator::UCharCharacterIterator(icu_68::ConstChar16Ptr, int)",93957348171264,93957348171332],["icu_68::UCharCharacterIterator::hashCode() const",93957348171536,93957348171573],["icu_68::UCharCharacterIterator::last()",93957348171744,93957348171782],["icu_68::UCharCharacterIterator::nextPostInc()",93957348171936,93957348171969],["icu_68::UCharCharacterIterator::first32()",93957348172064,93957348172153],["icu_68::UCharCharacterIterator::current32() const",93957348172560,93957348172691],["icu_68::UCharCharacterIterator::move(int, icu_68::CharacterIterator::EOrigin)",93957348173088,93957348173150],["icu_68::CharacterIterator::CharacterIterator(int)",93957348173872,93957348173922],["icu_68::CharacterIterator::first32PostInc()",93957348174080,93957348174117],["ucptrie_getValueWidth_68",93957348174832,93957348174842],["ucptrie_get_68",93957348175504,93957348175786],["ucurr_getName_68",93957348178544,93957348179528],["searchCurrencyName(CurrencyNameStruct const*, int, char16_t const*, int, int*, int*, int*)",93957348185408,93957348186090],["_findMetaData(char16_t const*, UErrorCode&)",93957348186320,93957348186675],["getCurrSymbolsEquiv()",93957348187440,93957348189739],["udata_setCommonData_68",93957348190848,93957348190992],["doOpenChoice(char const*, char const*, char const*, signed char (*)(void*, char const*, char const*, UDataInfo const*), void*, UErrorCode*)",93957348192080,93957348194390],["udata_getHashTable(UErrorCode&)",93957348194832,93957348194994],["icu_68::UDataPathIterator::~UDataPathIterator()",93957348196528,93957348196601],["offsetTOCLookupFn(UDataMemory const*, char const*, int*, UErrorCode*)",93957348197664,93957348198036],["UDatamemory_assign_68",93957348198496,93957348198538],["udata_close_68",93957348198736,93957348198811],["uenum_count_68",93957348199008,93957348199049],["uenum_reset_68",93957348199440,93957348199476],["uhash_close_68",93957348201344,93957348201554],["uhash_setValueDeleter_68",93957348201680,93957348201694],["uhash_geti_68",93957348203120,93957348203379],["uhash_iput_68",93957348204704,93957348204737],["uhash_removeAll_68",93957348205232,93957348205422],["uhash_hashChars_68",93957348205872,93957348205910],["uhash_compareChars_68",93957348206608,93957348206671],["u_charsToUChars_68",93957348206864,93957348207152],["uprv_compareInvAscii_68",93957348207424,93957348207665],["noopSetState(UCharIterator*, unsigned int, UErrorCode*)",93957348208096,93957348208108],["utf8IteratorHasPrevious(UCharIterator*)",93957348210272,93957348210285],["utf8IteratorGetState(UCharIterator const*)",93957348211200,93957348211221],["ulist_addItemBeginList_68",93957348211680,93957348211856],["ulist_deleteList_68",93957348212176,93957348212261],["ulist_reset_keyword_values_iterator_68",93957348212496,93957348212525],["uloc_getKeywordValue_68",93957348213504,93957348213661],["uloc_getCurrentCountryID_68",93957348216672,93957348217224],["ulocimp_getCountry_68(char const*, char const**, UErrorCode&)",93957348218240,93957348218657],["uloc_getParent_68",93957348219984,93957348220197],["uloc_getVariant_68",93957348221056,93957348222128],["_canonicalize(char const*, icu_68::ByteSink&, unsigned int, UErrorCode*)",93957348222640,93957348225014],["uloc_toUnicodeLocaleKey_68",93957348225376,93957348225427],["uloc_kw_closeKeywords(UEnumeration*)",93957348225792,93957348225836],["ulocimp_toBcpKey_68",93957348226032,93957348226085],["isSpecialTypeReorderCode(char const*)",93957348230640,93957348230740],["icu_68::CharString* icu_68::MemoryPool<icu_68::CharString, 8>::create<>()",93957348231568,93957348231791],["ultag_isLanguageSubtag_68",93957348232512,93957348232600],["_isVariantSubtag(char const*, int)",93957348233008,93957348233192],["ultag_isUnicodeLocaleKey_68",93957348234256,93957348234338],["ultag_isUnicodeExtensionSubtags_68",93957348235440,93957348235608],["ulocimp_forLanguageTag_68",93957348244080,93957348254296],["_addExtensionToList(ExtensionListEntry**, ExtensionListEntry*, signed char)",93957348255168,93957348255562],["uprv_min_68",93957348255888,93957348255901],["umutablecptrie_set_68",93957348256320,93957348256598],["void icu_68::(anonymous namespace)::MixedBlocks::extend<unsigned short>(unsigned short const*, int, int, int)",93957348270064,93957348270378],["icu_68::umtx_initImplPreInit(icu_68::UInitOnce&)",93957348270736,93957348270966],["icu_68::UnifiedCache::_flush(signed char) const",93957348271616,93957348271916],["icu_68::UnifiedCache::~UnifiedCache()",93957348272496,93957348272524],["unifiedcache_cleanup()",93957348273616,93957348273695],["(anonymous namespace)::_set_addString(USet*, char16_t const*, int)",93957348275504,93957348275616],["icu_68::RuleCharacterIterator::lookahead(icu_68::UnicodeString&, int) const",93957348276544,93957348276632],["icu_68::RuleCharacterIterator::skipIgnored(int)",93957348276816,93957348277067],["icu_68::UnicodeSet::UnicodeSet()",93957348277152,93957348277245],["icu_68::UnicodeSet::operator=(icu_68::UnicodeSet const&)",93957348277776,93957348277788],["icu_68::cloneUnicodeString(UElement*, UElement*)",93957348278704,93957348278763],["non-virtual thunk to icu_68::UnicodeSet::~UnicodeSet()",93957348279152,93957348279166],["icu_68::UnicodeSet::clone() const",93957348279744,93957348279880],["icu_68::UnicodeSet::size() const",93957348280224,93957348280361],["icu_68::UnicodeSet::isEmpty() const",93957348280464,93957348280500],["icu_68::UnicodeSet::containsAll(icu_68::UnicodeSet const&) const",93957348281040,93957348281247],["non-virtual thunk to icu_68::UnicodeSet::matchesIndexValue(unsigned char) const",93957348282160,93957348282174],["icu_68::UnicodeSet::addMatchSetTo(icu_68::UnicodeSet&) const",93957348283264,93957348283283],["icu_68::UnicodeSet::clear()",93957348283776,93957348283873],["icu_68::UnicodeSet::add(icu_68::UnicodeString const&)",93957348285584,93957348285809],["icu_68::UnicodeSet::complementAll(icu_68::UnicodeSet const&)",93957348286480,93957348286628],["icu_68::UnicodeSet::retain(int const*, int, signed char)",93957348287056,93957348287661],["icu_68::UnicodeSet::complement()",93957348288304,93957348288474],["icu_68::UnicodeSet::_appendToPat(icu_68::UnicodeString&, icu_68::UnicodeString const&, signed char)",93957348289584,93957348289730],["icu_68::UnicodeSet::toPattern(icu_68::UnicodeString&, signed char) const",93957348290976,93957348291068],["icu_68::UnicodeSet::spanUTF8(char const*, int, USetSpanCondition) const",93957348292096,93957348292905],["icu_68::BMPSet::BMPSet(int const*, int)",93957348293728,93957348295095],["icu_68::set32x64Bits(unsigned int*, int, int)",93957348296064,93957348297218],["icu_68::BMPSet::spanUTF8(unsigned char const*, int, USetSpanCondition) const",93957348299632,93957348300515],["icu_68::UnicodeSet::applyPatternIgnoreSpace(icu_68::UnicodeString const&, icu_68::ParsePosition&, icu_68::SymbolTable const*, UErrorCode&)",93957348301440,93957348301782],["icu_68::UnicodeSet::applyFilter(signed char (*)(int, void*), void*, icu_68::UnicodeSet const*, UErrorCode&)",93957348305280,93957348305566],["icu_68::UnicodeSet::applyPropertyAlias(icu_68::UnicodeString const&, icu_68::UnicodeString const&, UErrorCode&)",93957348306176,93957348307747],["icu_68::UnicodeSet::applyPropertyPattern(icu_68::UnicodeString const&, icu_68::ParsePosition&, UErrorCode&)",93957348308000,93957348309206],["(anonymous namespace)::characterproperties_cleanup()",93957348310800,93957348311003],["ubidi_isBidiControl_68",93957348311504,93957348311635],["ubidi_getPairedBracketType_68",93957348312000,93957348312130],["u_charFromName_68",93957348312896,93957348315156],["icu_68::unames_cleanup()",93957348317104,93957348317179],["icu_68::UnicodeSetStringSpan::UnicodeSetStringSpan(icu_68::UnicodeSetStringSpan const&, icu_68::UVector const&)",93957348321072,93957348321378],["icu_68::UnicodeSetStringSpan::spanBack(char16_t const*, int, USetSpanCondition) const",93957348324112,93957348326187],["icu_68::spanOneUTF8(icu_68::UnicodeSet const&, unsigned char const*, int)",93957348328544,93957348328843],["icu_68::UnicodeString::caseMap(int, unsigned int, icu_68::BreakIterator*, int (*)(int, unsigned int, icu_68::BreakIterator*, char16_t*, int, char16_t const*, int, icu_68::Edits*, UErrorCode&))",93957348331168,93957348332773],["icu_68::UnicodeString::toLower(icu_68::Locale const&)",93957348333120,93957348333172],["icu_68::operator+(icu_68::UnicodeString const&, icu_68::UnicodeString const&)",93957348333312,93957348333759],["icu_68::UnicodeString::UnicodeString(int)",93957348334944,93957348335030],["icu_68::UnicodeString::UnicodeString(signed char, icu_68::ConstChar16Ptr, int)",93957348335840,93957348336026],["icu_68::UnicodeString::cloneArrayIfNeeded(int, int, signed char, int**, signed char)",93957348336512,93957348337465],["icu_68::UnicodeString::copyFrom(icu_68::UnicodeString const&, signed char)",93957348338000,93957348338501],["icu_68::UnicodeString::clone() const",93957348338880,93957348338949],["icu_68::UnicodeString::getBuffer(int)",93957348339168,93957348339257],["icu_68::UnicodeString::operator=(icu_68::UnicodeString&&)",93957348339472,93957348339624],["icu_68::UnicodeString::doEquals(icu_68::UnicodeString const&, int) const",93957348339856,93957348339915],["icu_68::UnicodeString::getChar32At(int) const",93957348340240,93957348340391],["icu_68::UnicodeString::doExtract(int, int, char16_t*, int) const",93957348340896,93957348341010],["icu_68::UnicodeString::extractBetween(int, int, icu_68::UnicodeString&) const",93957348341584,93957348341768],["icu_68::UnicodeString::lastIndexOf(char16_t const*, int, int, int, int) const",93957348342576,93957348342758],["icu_68::UnicodeString::getTerminatedBuffer()",93957348343632,93957348343849],["icu_68::UnicodeString::doReplace(int, int, char16_t const*, int, int)",93957348344400,93957348345624],["icu_68::UnicodeString::copy(int, int, int)",93957348345920,93957348346203],["icu_68::UnicodeStringAppendable::appendCodePoint(int)",93957348346704,93957348346812],["uhash_hashUnicodeString_68",93957348347104,93957348347174],["icu_68::UnicodeString::toTitle(icu_68::BreakIterator*, icu_68::Locale const&)",93957348347936,93957348347948],["uprops_getSource_68",93957348348128,93957348348314],["isBidiControl(BinaryProperty const&, int, UProperty)",93957348348976,93957348348988],["caseBinaryPropertyContains(BinaryProperty const&, int, UProperty)",93957348349200,93957348349215],["isPOSIX_blank(BinaryProperty const&, int, UProperty)",93957348349392,93957348349404],["changesWhenCasefolded(BinaryProperty const&, int, UProperty)",93957348349456,93957348350008],["biDiGetMaxValue(IntProperty const&, UProperty)",93957348350608,93957348350620],["getGeneralCategory(IntProperty const&, int, UProperty)",93957348350720,93957348350736],["getScript(IntProperty const&, int, UProperty)",93957348350832,93957348350864],["getLeadCombiningClass(IntProperty const&, int, UProperty)",93957348350976,93957348350995],["layoutGetMaxValue(IntProperty const&, UProperty)",93957348351104,93957348351189],["(anonymous namespace)::uprops_cleanup()",93957348351392,93957348351530],["ures_copyResb_68",93957348351808,93957348352299],["ures_getIntVector_68",93957348352912,93957348353112],["ures_getSize_68",93957348353360,93957348353380],["ures_getStringWithAlias(UResourceBundle const*, unsigned int, int, int*, UErrorCode*)",93957348353808,93957348354128],["ures_getStringByIndex_68",93957348357824,93957348358192],["ures_getValueWithFallback_68",93957348359920,93957348360146],["getFallbackData(UResourceBundle const*, char const**, UResourceDataEntry**, unsigned int*, UErrorCode*)",93957348361632,93957348362002],["ures_openWithType(UResourceBundle*, char const*, char const*, UResOpenType, UErrorCode*)",93957348362640,93957348364906],["ures_getFunctionalEquivalent_68",93957348365248,93957348368079],["loadParentsExceptRoot(UResourceDataEntry*&, char*, int, signed char, char*, UErrorCode*)",93957348369328,93957348369634],["ures_cleanup()",93957348369856,93957348370194],["ures_loc_countLocales(UEnumeration*, UErrorCode*)",93957348370448,93957348370473],["res_init(ResourceData*, unsigned char*, void const*, int, UErrorCode*)",93957348370688,93957348371066],["res_getStringNoTrace_68",93957348371280,93957348371509],["res_countArrayItems_68",93957348371760,93957348371850],["icu_68::ResourceDataValue::getType() const",93957348371968,93957348371992],["icu_68::ResourceDataValue::getAliasString(int&, UErrorCode&) const",93957348372304,93957348372404],["icu_68::ResourceDataValue::getUInt(UErrorCode&) const",93957348372496,93957348372566],["icu_68::ResourceDataValue::getBinary(int&, UErrorCode&) const",93957348372736,93957348372893],["icu_68::ResourceDataValue::getTable(UErrorCode&) const",93957348373056,93957348373328],["icu_68::ResourceDataValue::getStringArray(icu_68::UnicodeString*, int, UErrorCode&) const",93957348373552,93957348373682],["icu_68::ResourceDataValue::getStringArrayOrStringAsArray(icu_68::UnicodeString*, int, UErrorCode&) const",93957348374176,93957348374692],["res_getTableItemByKey_68",93957348375472,93957348376352],["res_getResource_68",93957348376688,93957348376729],["icu_68::ResourceTable::findValue(char const*, icu_68::ResourceValue&) const",93957348377008,93957348377501],["icu_68::ResourceArray::getValue(int, icu_68::ResourceValue&) const",93957348377616,93957348377797],["uset_getSerializedSet_68",93957348378480,93957348378569],["uset_getSerializedRange_68",93957348378640,93957348378858],["icu_68::UnicodeSetIterator::UnicodeSetIterator(icu_68::UnicodeSet const&)",93957348378880,93957348379022],["icu_68::UnicodeSetIterator::~UnicodeSetIterator()",93957348379072,93957348379128],["icu_68::UnicodeSetIterator::loadRange(int)",93957348379264,93957348379309],["icu_68::UStack::getDynamicClassID() const",93957348379488,93957348379501],["icu_68::UStack::UStack(void (*)(void*), signed char (*)(UElement, UElement), UErrorCode&)",93957348379536,93957348379567],["icu_68::(anonymous namespace)::utf16_caseContextIterator(void*, signed char)",93957348380960,93957348381200],["icu_68::(anonymous namespace)::toLower(int, unsigned int, char16_t*, int, char16_t const*, UCaseContext*, int, int, icu_68::Edits*, UErrorCode&)",93957348381968,93957348383146],["icu_68::GreekUpper::toUpper(unsigned int, char16_t*, int, char16_t const*, int, icu_68::Edits*, UErrorCode&)",93957348383232,93957348384632],["ustrcase_internalToUpper_68",93957348384784,93957348386042],["ustrcase_mapWithOverlap_68",93957348386160,93957348386673],["u_strcmpFold_68",93957348386752,93957348386776],["u_caseInsensitivePrefixMatch_68",93957348388832,93957348388842],["u_strToLower_68",93957348388896,93957348389016],["icu_68::StringEnumeration::StringEnumeration()",93957348389152,93957348389204],["icu_68::StringEnumeration::next(int*, UErrorCode&)",93957348389296,93957348389580],["icu_68::StringEnumeration::snext(UErrorCode&)",93957348389696,93957348389862],["icu_68::StringEnumeration::operator!=(icu_68::StringEnumeration const&) const",93957348390016,93957348390033],["icu_68::UStringEnumeration::UStringEnumeration(UEnumeration*)",93957348390160,93957348390216],["icu_68::UStringEnumeration::~UStringEnumeration()",93957348390320,93957348390412],["icu_68::UStringEnumeration::next(int*, UErrorCode&)",93957348390432,93957348390446],["icu_68::UStringEnumeration::reset(UErrorCode&)",93957348390576,93957348390590],["uenum_openFromStringEnumeration_68",93957348390608,93957348390750],["ustrenum_unext(UEnumeration*, int*, UErrorCode*)",93957348390800,93957348390818],["ustrenum_reset(UEnumeration*, UErrorCode*)",93957348390864,93957348390882],["u_strFindFirst_68",93957348391472,93957348392414],["isMatchAtCPBoundary(char16_t const*, char16_t const*, char16_t const*, char16_t const*)",93957348392640,93957348392730],["u_memchr_68",93957348392784,93957348392871],["u_strFindLast_68",93957348392912,93957348393406],["u_strcmp_68",93957348393504,93957348393551],["u_strCompare_68",93957348394192,93957348394233],["u_strcpy_68",93957348394336,93957348394371],["u_countChar32_68",93957348394432,93957348394621],["u_memmove_68",93957348394672,93957348394708],["u_unescapeAt_68",93957348394768,93957348395847],["u_terminateUChars_68",93957348395888,93957348395951],["ustr_hashUCharsN_68",93957348396016,93957348396101],["ustr_hashICharsN_68",93957348396192,93957348396294],["icu_68::WholeStringBreakIterator::getUText(UText*, UErrorCode&) const",93957348396320,93957348396339],["icu_68::WholeStringBreakIterator::setText(UText*, UErrorCode&)",93957348396384,93957348396438],["u_strFromUTF8WithSub_68",93957348396800,93957348398787],["_appendUTF8(unsigned char*, int)",93957348401024,93957348401183],["utext_moveIndex32_68",93957348401216,93957348401727],["utext_previous32_68",93957348401904,93957348402071],["utext_getNativeIndex_68",93957348402096,93957348402123],["utext_getPreviousNativeIndex_68",93957348402304,93957348402704],["utext_char32At_68",93957348402944,93957348403248],["utext_clone_68",93957348403376,93957348403451],["utext_close_68",93957348403840,93957348403974],["utext_openConstUnicodeString_68",93957348404016,93957348404274],["utext_openCharacterIterator_68",93957348404464,93957348404617],["unistrTextClone(UText*, UText const*, signed char, UErrorCode*)",93957348405088,93957348405183],["unistrTextAccess(UText*, long, signed char)",93957348405216,93957348405286],["unistrTextReplace(UText*, long, long, char16_t const*, int, UErrorCode*)",93957348405616,93957348405932],["unistrTextClose(UText*)",93957348406336,93957348406381],["ucstrTextLength(UText*)",93957348406944,93957348407016],["ucstrTextExtract(UText*, long, long, char16_t*, int, UErrorCode*)",93957348407488,93957348407914],["charIterTextClone(UText*, UText const*, signed char, UErrorCode*)",93957348407968,93957348408358],["charIterTextAccess(UText*, long, signed char)",93957348408384,93957348408776],["charIterTextClose(UText*)",93957348409168,93957348409207],["utf8_prevCharSafeBody_68",93957348409808,93957348410392],["icu_68::ICU_Utility::isUnprintable(int)",93957348410688,93957348410703],["icu_68::ICU_Utility::skipWhitespace(icu_68::UnicodeString const&, int&, signed char)",93957348411120,93957348411225],["utrace_entry_68",93957348411344,93957348411374],["utrace_data_68",93957348411632,93957348411796],["utrie2_open_68",93957348411824,93957348412938],["utrie2_set32ForLeadSurrogateCodeUnit_68",93957348413072,93957348413202],["utrie2_setRange32_68",93957348419424,93957348421561],["utrie2_get32_68",93957348422208,93957348422604],["utrie2_close_68",93957348423152,93957348423226],["utrie2_enum_68",93957348423248,93957348423274],["utrie2_enumForLeadSurrogate_68",93957348424576,93957348424628],["icu_68::UVector::UVector(UErrorCode&)",93957348424656,93957348424735],["icu_68::UVector::UVector(void (*)(void*), signed char (*)(UElement, UElement), UErrorCode&)",93957348424848,93957348424931],["icu_68::UVector::~UVector()",93957348425072,93957348425192],["icu_68::UVector::~UVector()",93957348425280,93957348425408],["icu_68::UVector::setSize(int, UErrorCode&)",93957348425648,93957348426104],["icu_68::UVector::addElement(void*, UErrorCode&)",93957348426256,93957348426399],["icu_68::UVector::insertElementAt(void*, int, UErrorCode&)",93957348426480,93957348426830],["icu_68::UVector::containsAll(icu_68::UVector const&) const",93957348426864,93957348427112],["icu_68::UVector::removeElementAt(int)",93957348427536,93957348427658],["icu_68::UVector::orphanElementAt(int)",93957348428064,93957348428170],["icu_68::UVector::indexOf(void*, int) const",93957348428480,93957348428664],["icu_68::UVector::sortedInsert(UElement, signed char (*)(UElement, UElement), UErrorCode&)",93957348428688,93957348429154],["clntunix_create",139871564473888,139871564474607],["authunix_create_default",139871564480384,139871564480749],["clnt_sperror",139871564481424,139871564482001],["clnt_perrno",139871564482048,139871564482080],["ccos",139871565473712,139871565473737],["cproj",139871565487936,139871565488013],["fmax",139871565491120,139871565491181],["canonicalize",139871565491328,139871565491377],["llogb",139871565491504,139871565491596],["scalbln",139871565491664,139871565491790],["fminmag",139871565492000,139871565492191],["pow",139871565492256,139871565492438],["v8::(anonymous namespace)::DisposeModuleEmbedderData(v8::Local<v8::Context>)",93957335244896,93957335245217],["v8::Shell::RealmGlobal(v8::FunctionCallbackInfo<v8::Value> const&)",93957335246544,93957335246655],["v8::Shell::DisposeRealm(v8::FunctionCallbackInfo<v8::Value> const&, int)",93957335249072,93957335249231],["v8::Shell::RealmCreateAllowCrossRealmAccess(v8::FunctionCallbackInfo<v8::Value> const&)",93957335249264,93957335249334],["v8::internal::RuntimeProfiler::ShouldOptimize(v8::internal::JSFunction, v8::internal::BytecodeArray)",93957336709792,93957336710217],["v8::internal::StackGuard::HandleInterrupts()",93957336712304,93957336715149],["v8::internal::ThreadManager::FirstThreadStateInUse()",93957336715552,93957336715580],["v8::internal::ThreadManager::IterateArchivedThreads(v8::internal::ThreadVisitor*)",93957336716064,93957336716174],["v8::internal::ExternalizeStringExtension::GetNativeFunctionTemplate(v8::Isolate*, v8::Local<v8::String>)",93957336716400,93957336716547],["v8::internal::ExternalizeStringExtension::IsOneByte(v8::FunctionCallbackInfo<v8::Value> const&)",93957336717168,93957336717311],["v8::internal::SimpleStringResource<char, v8::String::ExternalOneByteStringResource>::~SimpleStringResource()",93957336717344,93957336717391],["v8::internal::GCExtension::GC(v8::FunctionCallbackInfo<v8::Value> const&)",93957336717440,93957336718450],["v8::internal::CpuProfiler::StopProcessor()",93957339612976,93957339613166],["v8::internal::HeapProfiler::DeleteAllSnapshots()",93957339618912,93957339619108],["v8::internal::HeapProfiler::GetSnapshotsCount() const",93957339620800,93957339620818],["v8::internal::HeapProfiler::ClearHeapObjectMap()",93957339621328,93957339621410],["std::__1::default_delete<v8::internal::HeapObjectsMap>::operator()(v8::internal::HeapObjectsMap*) const",93957339624288,93957339624421],["v8::internal::HeapSnapshot::AddSyntheticRootEntries()",93957339624944,93957339625894],["v8::internal::HeapObjectsMap::MoveObject(unsigned long, unsigned long, int)",93957339626960,93957339628179],["v8::internal::HeapObjectsMap::StopHeapObjectsTracking()",93957339629008,93957339629022],["v8::internal::HeapObjectsMap::PushHeapObjectsStats(v8::OutputStream*, long*)",93957339630768,93957339631333],["v8::internal::V8HeapExplorer::AddEntry(v8::internal::HeapObject)",93957339631360,93957339632949],["v8::internal::V8HeapExplorer::ExtractLocationForJSFunction(v8::internal::HeapEntry*, v8::internal::JSFunction)",93957339633312,93957339633603],["v8::internal::V8HeapExplorer::GetConstructorName(v8::internal::JSObject)",93957339633744,93957339633957],["v8::internal::V8HeapExplorer::AddEntry(unsigned long, v8::internal::HeapEntry::Type, char const*, unsigned long)",93957339636080,93957339636466],["v8::internal::V8HeapExplorer::ExtractJSArrayBufferReferences(v8::internal::HeapEntry*, v8::internal::JSArrayBuffer)",93957339637648,93957339638008],["v8::internal::V8HeapExplorer::ExtractJSObjectReferences(v8::internal::HeapEntry*, v8::internal::JSObject)",93957339638192,93957339639435],["v8::internal::V8HeapExplorer::ExtractMapReferences(v8::internal::HeapEntry*, v8::internal::Map)",93957339639696,93957339640353],["v8_inspector::String16::stripWhiteSpace() const",93957342398112,93957342399605],["std::__1::basic_string<unsigned short, std::__1::char_traits<unsigned short>, std::__1::allocator<unsigned short> >::__grow_by(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long)",93957342407008,93957342408279],["v8_inspector::toString16(v8_inspector::StringView const&)",93957342408800,93957342408871],["v8_inspector::stackTraceIdToString(unsigned long)",93957342409200,93957342409285],["v8_crdtp::ProtocolTypeTraits<v8_inspector::protocol::Binary, void>::Serialize(v8_inspector::protocol::Binary const&, std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*)",93957342409504,93957342409530],["v8_inspector::(anonymous namespace)::StringBuffer8::~StringBuffer8()",93957342409568,93957342409606],["v8_inspector::(anonymous namespace)::StringBuffer8::string() const",93957342409680,93957342409711],["v8_inspector::(anonymous namespace)::StringBuffer16::~StringBuffer16()",93957342409744,93957342409792],["v8::internal::compiler::JSTypedArrayRef::ShouldHaveBeenSerialized() const",93957344099664,93957344099734],["v8::internal::compiler::JSHeapBroker::GetFeedbackForGlobalAccess(v8::internal::compiler::FeedbackSource const&)",93957344118496,93957344118556],["std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::compiler::PropertyAccessTarget, v8::internal::compiler::PropertyAccessInfo>, std::__1::__unordered_map_hasher<v8::internal::compiler::PropertyAccessTarget, std::__1::__hash_value_type<v8::internal::compiler::PropertyAccessTarget, v8::internal::compiler::PropertyAccessInfo>, v8::internal::compiler::PropertyAccessTarget::Hash, v8::internal::compiler::PropertyAccessTarget::Equal, true>, std::__1::__unordered_map_equal<v8::internal::compiler::PropertyAccessTarget, std::__1::__hash_value_type<v8::internal::compiler::PropertyAccessTarget, v8::internal::compiler::PropertyAccessInfo>, v8::internal::compiler::PropertyAccessTarget::Equal, v8::internal::compiler::PropertyAccessTarget::Hash, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<v8::internal::compiler::PropertyAccessTarget, v8::internal::compiler::PropertyAccessInfo> > >::__rehash(unsigned long)",93957344126112,93957344126878],["v8::internal::compiler::AllocationSiteRef::AllocationSiteRef(v8::internal::compiler::JSHeapBroker*, v8::internal::Handle<v8::internal::Object>, v8::internal::compiler::ObjectRef::BackgroundSerialization, bool)",93957344137840,93957344137904],["v8::internal::compiler::JSInliningHeuristic::TryReuseDispatch(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node**, v8::internal::compiler::Node**, v8::internal::compiler::Node**, int)",93957344150800,93957344152671],["std::__1::pair<std::__1::__tree_iterator<unsigned int, std::__1::__tree_node<unsigned int, void*>*, long>, bool> std::__1::__tree<unsigned int, std::__1::less<unsigned int>, v8::internal::ZoneAllocator<unsigned int> >::__emplace_unique_key_args<unsigned int, unsigned int>(unsigned int const&, unsigned int&&)",93957344154128,93957344154370],["v8::internal::compiler::JSInliner::ReduceJSWasmCall(v8::internal::compiler::Node*)",93957344166288,93957344167915],["v8::internal::compiler::JSIntrinsicLowering::ReduceDeoptimizeNow(v8::internal::compiler::Node*)",93957344175168,93957344175695],["v8::internal::compiler::JSIntrinsicLowering::ReduceAsyncFunctionReject(v8::internal::compiler::Node*)",93957344177152,93957344177219],["v8::internal::compiler::JSIntrinsicLowering::ReduceAsyncGeneratorReject(v8::internal::compiler::Node*)",93957344177696,93957344177879],["v8::internal::compiler::JSIntrinsicLowering::ReduceIsInstanceType(v8::internal::compiler::Node*, v8::internal::InstanceType)",93957344178688,93957344179753],["v8::internal::compiler::JSIntrinsicLowering::ReduceToObject(v8::internal::compiler::Node*)",93957344180000,93957344180046],["v8::internal::compiler::JSIntrinsicLowering::ReduceGetImportMetaObject(v8::internal::compiler::Node*)",93957344180816,93957344180862],["v8::internal::compiler::JSNativeContextSpecialization::JSNativeContextSpecialization(v8::internal::compiler::AdvancedReducer::Editor*, v8::internal::compiler::JSGraph*, v8::internal::compiler::JSHeapBroker*, v8::base::Flags<v8::internal::compiler::JSNativeContextSpecialization::Flag, int>, v8::internal::compiler::CompilationDependencies*, v8::internal::Zone*, v8::internal::Zone*)",93957344181888,93957344182099],["v8::internal::compiler::JSNativeContextSpecialization::ReduceJSAsyncFunctionReject(v8::internal::compiler::Node*)",93957344184000,93957344184892],["v8::internal::compiler::JSNativeContextSpecialization::ReduceJSHasInPrototypeChain(v8::internal::compiler::Node*)",93957344189984,93957344190492],["v8::internal::compiler::JSNativeContextSpecialization::ReduceJSResolvePromise(v8::internal::compiler::Node*)",93957344193456,93957344195498],["v8::internal::compiler::JSNativeContextSpecialization::ReduceJSStoreGlobal(v8::internal::compiler::Node*)",93957344196080,93957344196834],["v8::internal::compiler::JSNativeContextSpecialization::ReduceJSLoadNamedFromSuper(v8::internal::compiler::Node*)",93957344198272,93957344198576],["v8::internal::compiler::JSNativeContextSpecialization::ReduceJSHasProperty(v8::internal::compiler::Node*)",93957344198896,93957344199208],["v8::internal::compiler::JSNativeContextSpecialization::ReduceJSStoreProperty(v8::internal::compiler::Node*)",93957344199584,93957344199842],["v8::internal::compiler::JSNativeContextSpecialization::ReduceJSStoreDataPropertyInLiteral(v8::internal::compiler::Node*)",93957344200176,93957344200639],["v8::internal::compiler::JSNativeContextSpecialization::ReduceJSToObject(v8::internal::compiler::Node*)",93957344200912,93957344201228],["v8::internal::compiler::JSNativeContextSpecialization::ReduceJSGetIterator(v8::internal::compiler::Node*)",93957344201840,93957344203858],["v8::internal::compiler::JSNativeContextSpecialization::CreateDelayedStringConstant(v8::internal::compiler::Node*)",93957344204464,93957344205199],["v8::internal::compiler::JSNativeContextSpecialization::ReduceGlobalAccess(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::NameRef const&, v8::internal::compiler::AccessMode, v8::internal::compiler::Node*, v8::internal::compiler::PropertyCellRef const&, v8::internal::compiler::Node*)",93957344206448,93957344209950],["v8::internal::compiler::JSNativeContextSpecialization::ReduceNamedAccess(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::NamedAccessFeedback const&, v8::internal::compiler::AccessMode, v8::internal::compiler::Node*)",93957344210976,93957344221581],["v8::internal::compiler::JSNativeContextSpecialization::RemoveImpossibleMaps(v8::internal::compiler::Node*, v8::internal::ZoneVector<v8::internal::Handle<v8::internal::Map> >*) const",93957344223360,93957344223857],["v8::internal::compiler::JSNativeContextSpecialization::ReducePropertyAccess(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::base::Optional<v8::internal::compiler::NameRef>, v8::internal::compiler::Node*, v8::internal::compiler::FeedbackSource const&, v8::internal::compiler::AccessMode)",93957344224016,93957344224284],["v8::internal::compiler::JSNativeContextSpecialization::BuildIndexedStringLoad(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node**, v8::internal::compiler::Node**, v8::internal::KeyedAccessLoadMode)",93957344224928,93957344226176],["v8::internal::compiler::JSNativeContextSpecialization::ReduceElementAccess(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::ElementAccessFeedback const&)",93957344226560,93957344233043],["v8::internal::compiler::(anonymous namespace)::GetTypedArrayConstant(v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::Node*)",93957344235136,93957344235467],["std::__1::__num_put<char>::__widen_and_group_int(char*, char*, char*, char*, char*&, char*&, std::__1::locale const&)",93957346691248,93957346692252],["std::__1::num_put<wchar_t, std::__1::ostreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::do_put(std::__1::ostreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, wchar_t, long) const",93957346699696,93957346700322],["std::__1::time_get<char, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > >::do_get_date(std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, unsigned int&, tm*) const",93957346709888,93957346709996],["std::__1::time_get<wchar_t, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::get(std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, unsigned int&, tm*, wchar_t const*, wchar_t const*) const",93957346714176,93957346715421],["std::__1::time_get<wchar_t, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::do_get(std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, unsigned int&, tm*, char, char) const",93957346716720,93957346718378],["std::__1::time_put<char, std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > >::do_put(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, char, tm const*, char, char) const",93957346719792,93957346720056],["std::__1::moneypunct<char, false>::do_grouping() const",93957346720608,93957346720631],["std::__1::money_get<char, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > >::do_get(std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, bool, std::__1::ios_base&, unsigned int&, long double&) const",93957346720736,93957346722077],["std::__1::money_get<char, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > >::do_get(std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, bool, std::__1::ios_base&, unsigned int&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&) const",93957346727184,93957346728094],["std::__1::money_get<wchar_t, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::do_get(std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, bool, std::__1::ios_base&, unsigned int&, long double&) const",93957346728640,93957346729990],["std::__1::money_get<wchar_t, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::do_get(std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, bool, std::__1::ios_base&, unsigned int&, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >&) const",93957346735216,93957346735938],["std::__1::money_put<char, std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > >::do_put(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, bool, std::__1::ios_base&, char, long double) const",93957346736496,93957346738289],["std::__1::__money_put<char>::__format(char*, char*&, char*&, unsigned int, char const*, char const*, std::__1::ctype<char> const&, bool, std::__1::money_base::pattern const&, char, char, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int)",93957346738832,93957346740060],["std::__1::money_put<wchar_t, std::__1::ostreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::do_put(std::__1::ostreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, bool, std::__1::ios_base&, wchar_t, long double) const",93957346741344,93957346743101],["std::__1::__money_put<wchar_t>::__format(wchar_t*, wchar_t*&, wchar_t*&, unsigned int, wchar_t const*, wchar_t const*, std::__1::ctype<wchar_t> const&, bool, std::__1::money_base::pattern const&, wchar_t, wchar_t, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> > const&, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> > const&, int)",93957346743632,93957346744926],["std::__1::messages<char>::do_open(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::locale const&) const",93957346746000,93957346746045],["(anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::parseUnresolvedType()",93957346851744,93957346852016],["(anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::parseSourceName((anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::NameState*)",93957346852896,93957346853403],["(anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::parseOperatorName((anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::NameState*)",93957346853552,93957346856172],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::ConversionOperatorType, (anonymous namespace)::itanium_demangle::Node*&>((anonymous namespace)::itanium_demangle::Node*&)",93957346856288,93957346856425],["(anonymous namespace)::itanium_demangle::ConversionOperatorType::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346856576,93957346856735],["(anonymous namespace)::itanium_demangle::GlobalQualifiedName::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346856912,93957346857058],["(anonymous namespace)::itanium_demangle::MemberExpr::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346857088,93957346857300],["(anonymous namespace)::itanium_demangle::BracedExpr::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346857616,93957346858067],["(anonymous namespace)::itanium_demangle::InitListExpr::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346858544,93957346858766],["(anonymous namespace)::itanium_demangle::EnclosingExpr::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346859488,93957346859731],["(anonymous namespace)::itanium_demangle::SizeofParamPackExpr::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346860176,93957346860407],["(anonymous namespace)::itanium_demangle::ThrowExpr::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346860432,93957346860586],["(anonymous namespace)::itanium_demangle::ExpandedSpecialSubstitution::getBaseName() const",93957346861328,93957346861360],["(anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::parseBareSourceName()",93957346861568,93957346861636],["(anonymous namespace)::itanium_demangle::UnnamedTypeName::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346861936,93957346862205],["(anonymous namespace)::itanium_demangle::StructuredBindingName::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346862576,93957346862750],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::LocalName, (anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::Node*&>((anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::Node*&)",93957346862960,93957346863108],["(anonymous namespace)::itanium_demangle::SpecialSubstitution::getBaseName() const",93957346863760,93957346863792],["(anonymous namespace)::itanium_demangle::ParameterPack::hasArraySlow((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346863872,93957346863951],["(anonymous namespace)::itanium_demangle::ParameterPack::getSyntaxNode((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346864032,93957346864098],["(anonymous namespace)::itanium_demangle::ParameterPack::printRight((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346864176,93957346864239],["(anonymous namespace)::itanium_demangle::NameWithTemplateArgs::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346864496,93957346864601],["(anonymous namespace)::itanium_demangle::EnableIfAttr::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346864768,93957346864957],["(anonymous namespace)::itanium_demangle::FunctionEncoding::printRight((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346865152,93957346865840],["(anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::parseFunctionType()",93957346866160,93957346867704],["(anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::parseVectorType()",93957346868688,93957346869613],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::PointerType, (anonymous namespace)::itanium_demangle::Node*&>((anonymous namespace)::itanium_demangle::Node*&)",93957346869952,93957346870102],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::PostfixQualifiedType, (anonymous namespace)::itanium_demangle::Node*&, char const (&) [9]>((anonymous namespace)::itanium_demangle::Node*&, char const (&) [9])",93957346870288,93957346870449],["(anonymous namespace)::itanium_demangle::NoexceptSpec::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346870640,93957346870855],["(anonymous namespace)::itanium_demangle::FunctionType::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346871056,93957346871152],["(anonymous namespace)::itanium_demangle::ObjCProtoName::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346871920,93957346872233],["(anonymous namespace)::itanium_demangle::PointerType::hasRHSComponentSlow((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346872480,93957346872511],["(anonymous namespace)::itanium_demangle::QualType::hasFunctionSlow((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346872544,93957346872576],["(anonymous namespace)::itanium_demangle::QualType::printRight((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346872880,93957346872898],["(anonymous namespace)::itanium_demangle::VectorType::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346873200,93957346873563],["(anonymous namespace)::itanium_demangle::ArrayType::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346873728,93957346873746],["(anonymous namespace)::itanium_demangle::Node* (anonymous namespace)::itanium_demangle::AbstractManglingParser<(anonymous namespace)::itanium_demangle::ManglingParser<(anonymous namespace)::DefaultAllocator>, (anonymous namespace)::DefaultAllocator>::make<(anonymous namespace)::itanium_demangle::PointerToMemberType, (anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::Node*&>((anonymous namespace)::itanium_demangle::Node*&, (anonymous namespace)::itanium_demangle::Node*&)",93957346874176,93957346874335],["(anonymous namespace)::itanium_demangle::PointerToMemberType::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346874368,93957346874711],["(anonymous namespace)::itanium_demangle::ElaboratedTypeSpefType::printLeft((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346874880,93957346875118],["(anonymous namespace)::itanium_demangle::PointerType::printRight((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346875792,93957346876038],["(anonymous namespace)::itanium_demangle::ReferenceType::printRight((anonymous namespace)::itanium_demangle::OutputStream&) const",93957346876544,93957346876783],["v8::base::bits::RoundUpToPowerOfTwo32(unsigned int)",93957346876928,93957346876968],["v8::base::bits::SignedDiv32(int, int)",93957346877024,93957346877056],["v8::base::bits::SignedSaturatedAdd64(long, long)",93957346877088,93957346877143],["v8::base::BoundedPageAllocator::BoundedPageAllocator(v8::PageAllocator*, unsigned long, unsigned long, unsigned long)",93957346877184,93957346877387],["v8::base::BoundedPageAllocator::AllocatePagesAt(unsigned long, unsigned long, v8::PageAllocator::Permission)",93957346877600,93957346877820],["v8::base::BoundedPageAllocator::FreePages(void*, unsigned long)",93957346878048,93957346878179],["v8::base::BoundedPageAllocator::SetPermissions(void*, unsigned long, v8::PageAllocator::Permission)",93957346878368,93957346878386],["v8::base::BoundedPageAllocator::~BoundedPageAllocator()",93957346878432,93957346878478],["v8::base::BoundedPageAllocator::SetRandomMmapSeed(long)",93957346878544,93957346878562],["v8::base::CPU::CPU()",93957346878592,93957346879124],["v8::base::MagicNumbersForDivision<unsigned int> v8::base::UnsignedDivisionByConstant<unsigned int>(unsigned int, unsigned int)",93957346879312,93957346879603],["v8::base::hash_combine(unsigned long, unsigned long)",93957346879776,93957346879817],["v8::base::hash_value(unsigned long)",93957346879872,93957346879946],["v8::base::ieee754::acosh(double)",93957346880720,93957346881034],["v8::base::ieee754::log1p(double)",93957346881696,93957346882440],["v8::base::ieee754::asinh(double)",93957346883152,93957346883520],["v8::base::ieee754::atan2(double, double)",93957346884064,93957346884614],["v8::base::ieee754::(anonymous namespace)::__ieee754_rem_pio2(double, double*)",93957346885936,93957346890863],["v8::base::ieee754::atanh(double)",93957346891472,93957346891750],["v8::base::ieee754::log10(double)",93957346892224,93957346892495],["v8::base::ieee754::cbrt(double)",93957346893312,93957346893584],["v8::base::ieee754::tan(double)",93957346894752,93957346894848],["v8::base::ieee754::cosh(double)",93957346895504,93957346895787],["v8::base::ieee754::sinh(double)",93957346898016,93957346898317],["v8::base::SetPrintStackTrace(void (*)())",93957346898592,93957346898605],["v8::base::CallOnceImpl(std::__1::atomic<unsigned char>*, std::__1::function<void ()>)",93957346898960,93957346899022],["v8::base::PageAllocator::SetRandomMmapSeed(long)",93957346899072,93957346899085],["v8::base::PageAllocator::AllocatePages(void*, unsigned long, unsigned long, v8::PageAllocator::Permission)",93957346899104,93957346899135],["v8::base::PageAllocator::FreePages(void*, unsigned long)",93957346899296,93957346899312],["v8::base::PageAllocator::SetPermissions(void*, unsigned long, v8::PageAllocator::Permission)",93957346899344,93957346899362],["v8::base::SharedMemory::~SharedMemory()",93957346899392,93957346899431],["v8::base::SharedMemory::RemapTo(void*) const",93957346899504,93957346899587],["v8::base::SharedMemoryMapping::~SharedMemoryMapping()",93957346899648,93957346899699],["v8::base::ConditionVariable::NotifyOne()",93957346899792,93957346899802],["v8::base::ConditionVariable::WaitFor(v8::base::Mutex*, v8::base::TimeDelta const&)",93957346899824,93957346899943],["v8::base::RecursiveMutex::~RecursiveMutex()",93957346899968,93957346899978],["v8::base::RecursiveMutex::RecursiveMutex()",93957346900000,93957346900067],["v8::base::SharedMutex::~SharedMutex()",93957346900096,93957346900106],["v8::base::SharedMutex::LockExclusive()",93957346900128,93957346900138],["v8::base::Semaphore::Semaphore(int)",93957346900160,93957346900174],["v8::base::Semaphore::Signal()",93957346900192,93957346900228],["v8::base::TimeDelta::InSecondsF() const",93957346900288,93957346900335],["v8::base::TimeDelta::InMilliseconds() const",93957346900384,93957346900441],["v8::base::Time::FromTimespec(timespec)",93957346900544,93957346900628],["v8::base::TimeTicks::HighResolutionNow()",93957346900752,93957346900881],["v8::base::TimeTicks::IsHighResolution()",93957346900960,93957346901330],["v8::base::RegionAllocator::RegionAllocator(unsigned long, unsigned long, unsigned long)",93957346901472,93957346901912],["v8::base::RegionAllocator::~RegionAllocator()",93957346902144,93957346902290],["v8::base::RegionAllocator::Split(v8::base::RegionAllocator::Region*, unsigned long)",93957346902528,93957346903010],["v8::base::RegionAllocator::AllocateRegion(unsigned long)",93957346903184,93957346903330],["v8::base::RegionAllocator::TrimRegion(unsigned long, unsigned long)",93957346903568,93957346904171],["v8::base::SysInfo::AmountOfPhysicalMemory()",93957346904208,93957346904272],["v8::base::RandomNumberGenerator::RandomNumberGenerator()",93957346904336,93957346904921],["v8::base::RandomNumberGenerator::NextInt(int)",93957346905088,93957346905304],["v8::base::RandomNumberGenerator::NextDouble()",93957346905376,93957346905458],["v8::base::RandomNumberGenerator::NextBytes(void*, unsigned long)",93957346905536,93957346905620],["v8::base::RandomNumberGenerator::NextSampleSlow(unsigned long, unsigned long, std::__1::unordered_set<unsigned long, std::__1::hash<unsigned long>, std::__1::equal_to<unsigned long>, std::__1::allocator<unsigned long> > const&)",93957346906944,93957346908676],["v8::base::VLQBase64Decode(char const*, unsigned long, unsigned long*)",93957346908752,93957346908890],["v8::base::OS::CommitPageSize()",93957346908928,93957346909005],["v8::base::OS::GetRandomMmapAddr()",93957346909264,93957346909511],["v8::base::OS::Free(void*, unsigned long)",93957346909984,93957346910000],["v8::base::OS::SetPermissions(void*, unsigned long, v8::base::OS::MemoryPermission)",93957346910096,93957346910222],["v8::base::OS::GetGCFakeMMapFile()",93957346910320,93957346910333],["v8::base::OS::Abort()",93957346910384,93957346910405],["v8::base::OS::MemoryMappedFile::open(char const*, v8::base::OS::MemoryMappedFile::FileMode)",93957346910432,93957346910691],["v8::base::PosixMemoryMappedFile::~PosixMemoryMappedFile()",93957346910928,93957346911094],["v8::base::OS::GetCurrentProcessId()",93957346911136,93957346911146],["v8::base::OS::ExitProcess(int)",93957346911184,93957346911229],["v8::base::OS::TimeCurrentMillis()",93957346911328,93957346911360],["v8::base::OS::GetLastError()",93957346911456,93957346911469],["v8::base::OS::DirectorySeparator()",93957346911568,93957346911576],["v8::base::OS::OpenTemporaryFile()",93957346911600,93957346911610],["v8::base::OS::VPrint(char const*, __va_list_tag*)",93957346911776,93957346911807],["v8::base::OS::VFPrint(_IO_FILE*, char const*, __va_list_tag*)",93957346911952,93957346911973],["v8::base::OS::VPrintError(char const*, __va_list_tag*)",93957346912144,93957346912175],["v8::base::OS::VSNPrintF(char*, int, char const*, __va_list_tag*)",93957346912368,93957346912441],["v8::base::Thread::Thread(v8::base::Thread::Options const&)",93957346912480,93957346912607],["v8::base::Thread::Start()",93957346912672,93957346912952],["v8::base::Thread::Join()",93957346913056,93957346913075],["v8::base::Thread::DeleteThreadLocalKey(int)",93957346913120,93957346913130],["v8::base::Thread::SetThreadLocal(int, void*)",93957346913152,93957346913162],["v8::base::OS::GetSharedLibraryAddresses()",93957346913200,93957346914012],["v8::base::OS::RemapShared(void*, void*, unsigned long)",93957346914192,93957346914232],["v8::base::PosixDefaultTimezoneCache::LocalTimezone(double)",93957346914688,93957346914787],["v8::platform::NewDefaultPlatform(int, v8::platform::IdleTaskSupport, v8::platform::InProcessStackDumping, std::__1::unique_ptr<v8::TracingController, std::__1::default_delete<v8::TracingController> >)",93957346914880,93957346914985],["v8::platform::PumpMessageLoop(v8::Platform*, v8::Isolate*, v8::platform::MessageLoopBehavior)",93957346915232,93957346915242],["v8::platform::RunIdleTasks(v8::Platform*, v8::Isolate*, double)",93957346915536,93957346915546],["v8::platform::DefaultPlatform::NotifyIsolateShutdown(v8::Isolate*)",93957346916176,93957346916447],["v8::platform::(anonymous namespace)::DefaultTimeFunction()",93957346917120,93957346917144],["v8::platform::DefaultPlatform::IdleTasksEnabled(v8::Isolate*)",93957346917856,93957346917869],["v8::platform::DefaultPlatform::GetTracingController()",93957346918016,93957346918026],["std::__1::__tree<std::__1::__value_type<v8::Isolate*, std::__1::shared_ptr<v8::platform::DefaultForegroundTaskRunner> >, std::__1::__map_value_compare<v8::Isolate*, std::__1::__value_type<v8::Isolate*, std::__1::shared_ptr<v8::platform::DefaultForegroundTaskRunner> >, std::__1::less<v8::Isolate*>, true>, std::__1::allocator<std::__1::__value_type<v8::Isolate*, std::__1::shared_ptr<v8::platform::DefaultForegroundTaskRunner> > > >::destroy(std::__1::__tree_node<std::__1::__value_type<v8::Isolate*, std::__1::shared_ptr<v8::platform::DefaultForegroundTaskRunner> >, void*>*)",93957346918128,93957346918223],["v8::base::debug::EnableInProcessStackDumping()",93957346918320,93957346918731],["v8::base::debug::StackTrace::Print() const",93957346919888,93957346919929],["v8::platform::DefaultJobState::DefaultJobState(v8::Platform*, std::__1::unique_ptr<v8::JobTask, std::__1::default_delete<v8::JobTask> >, v8::TaskPriority, unsigned long)",93957346921408,93957346921523],["v8::platform::DefaultJobState::Join()",93957346922192,93957346922696],["v8::platform::DefaultJobHandle::~DefaultJobHandle()",93957346923296,93957346923372],["v8::platform::DefaultJobHandle::IsActive()",93957346923744,93957346923823],["v8::JobHandle::IsCompleted()",93957346923920,93957346923934],["v8::platform::DefaultJobWorker::~DefaultJobWorker()",93957346924000,93957346924047],["v8::platform::DefaultForegroundTaskRunner::DefaultForegroundTaskRunner(v8::platform::IdleTaskSupport, double (*)())",93957346924560,93957346924703],["v8::platform::DefaultForegroundTaskRunner::PostDelayedTaskLocked(std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> >, double, v8::platform::DefaultForegroundTaskRunner::Nestability, v8::base::LockGuard<v8::base::Mutex, (v8::base::NullBehavior)0> const&)",93957346925936,93957346926426],["v8::platform::DefaultForegroundTaskRunner::IdleTasksEnabled()",93957346926864,93957346926880],["std::__1::deque<std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >, std::__1::allocator<std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > > > >::erase(std::__1::__deque_iterator<std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > > const*, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > > const&, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > > const* const*, long, 0l>)",93957346928224,93957346929132],["std::__1::__deque_base<std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >, std::__1::allocator<std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > > > >::clear()",93957346929792,93957346930064],["_ZNSt3__113move_backwardIPNS_4pairIN2v88platform27DefaultForegroundTaskRunner11NestabilityENS_10unique_ptrINS2_4TaskENS_14default_deleteIS7_EEEEEESB_SC_RSB_PSC_lLl0EEENS_16__deque_iteratorIT0_T1_T2_T3_T4_XT5_EEET_SM_SL_PNS_9enable_ifIXsr33__is_cpp17_random_access_iteratorISM_EE5valueEvE4typeE",93957346931472,93957346931978],["v8::platform::DefaultWorkerThreadsTaskRunner::Terminate()",93957346932704,93957346932834],["v8::platform::DefaultWorkerThreadsTaskRunner::WorkerThread::~WorkerThread()",93957346933136,93957346933182],["v8::platform::DelayedTaskQueue::Append(std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> >)",93957346933552,93957346933723],["std::__1::__tree<std::__1::__value_type<double, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >, std::__1::__map_value_compare<double, std::__1::__value_type<double, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >, std::__1::less<double>, true>, std::__1::allocator<std::__1::__value_type<double, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > > > >::destroy(std::__1::__tree_node<std::__1::__value_type<double, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >, void*>*)",93957346935008,93957346935082],["v8::platform::tracing::TraceBufferChunk::TraceBufferChunk(unsigned int)",93957346935760,93957346937568],["std::__1::vector<std::__1::unique_ptr<v8::platform::tracing::TraceBufferChunk, std::__1::default_delete<v8::platform::tracing::TraceBufferChunk> >, std::__1::allocator<std::__1::unique_ptr<v8::platform::tracing::TraceBufferChunk, std::__1::default_delete<v8::platform::tracing::TraceBufferChunk> > > >::__append(unsigned long)",93957346938016,93957346938867],["v8::platform::tracing::TraceConfig::AddIncludedCategory(char const*)",93957346941168,93957346941401],["v8::platform::tracing::JSONTraceWriter::AppendArgValue(unsigned char, v8::platform::tracing::TraceObject::ArgValue)",93957346942416,93957346943688],["v8::platform::tracing::TraceWriter::CreateJSONTraceWriter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)",93957346945152,93957346945310],["v8::platform::tracing::TracingController::~TracingController()",93957346946224,93957346946252],["v8::platform::tracing::TracingController::AddTraceEventWithTimestamp(char, unsigned char const*, char const*, char const*, unsigned long, unsigned long, int, char const**, unsigned char const*, unsigned long const*, std::__1::unique_ptr<v8::ConvertableToTraceFormat, std::__1::default_delete<v8::ConvertableToTraceFormat> >*, unsigned int, long)",93957346946448,93957346946634],["v8::platform::tracing::TracingController::GetCategoryGroupEnabled(char const*)",93957346947280,93957346947641],["icu_68::SharedCalendar::~SharedCalendar()",93957346948272,93957346948320],["icu_68::BasicCalendarFactory::~BasicCalendarFactory()",93957346949536,93957346949546],["icu_68::CalendarService::~CalendarService()",93957346949632,93957346949642],["icu_68::Calendar::clear()",93957346950192,93957346950279],["icu_68::Calendar::~Calendar()",93957346952112,93957346952163],["icu_68::Calendar::createInstance(icu_68::Locale const&, UErrorCode&)",93957346953248,93957346953284],["icu_68::Calendar::setTimeInMillis(double, UErrorCode&)",93957346954896,93957346955086],["icu_68::Calendar::operator==(icu_68::Calendar const&) const",93957346955472,93957346955704],["icu_68::Calendar::isLenient() const",93957346956128,93957346956140],["icu_68::Calendar::getRelatedYear(UErrorCode&) const",93957346956768,93957346957267],["icu_68::Calendar::newestStamp(UCalendarDateFields, UCalendarDateFields, int) const",93957346958464,93957346958907],["icu_68::Calendar::computeWeekFields(UErrorCode&)",93957346960256,93957346960987],["icu_68::Calendar::weekNumber(int, int, int)",93957346961104,93957346961235],["icu_68::Calendar::add(UCalendarDateFields, int, UErrorCode&)",93957346964432,93957346968171],["icu_68::Calendar::fieldDifference(double, UCalendarDateFields, UErrorCode&)",93957346968512,93957346970921],["icu_68::Calendar::isWeekend() const",93957346971440,93957346971692],["icu_68::Calendar::getLeastMaximum(UCalendarDateFields) const",93957346971792,93957346971814],["icu_68::Calendar::getFieldResolutionTable() const",93957346972816,93957346972829],["icu_68::Calendar::computeZoneOffset(double, double, UErrorCode&)",93957346974160,93957346974645],["icu_68::Calendar::handleGetYearLength(int) const",93957346977104,93957346977176],["icu_68::BasicCalendarFactory::create(icu_68::ICUServiceKey const&, icu_68::ICUService const*, UErrorCode&) const",93957346981056,93957346982050],["icu_68::CalendarService::cloneInstance(icu_68::UObject*) const",93957346983008,93957346983081],["icu_68::LocaleCacheKey<icu_68::SharedCalendar>::~LocaleCacheKey()",93957346983600,93957346983642],["icu_68::LocaleCacheKey<icu_68::SharedCalendar>::clone() const",93957346983920,93957346984014],["icu_68::BuddhistCalendar::BuddhistCalendar(icu_68::Locale const&, UErrorCode&)",93957346984160,93957346984208],["icu_68::BuddhistCalendar::getType() const",93957346984320,93957346984333],["icu_68::BuddhistCalendar::handleGetLimit(UCalendarDateFields, icu_68::Calendar::ELimitType) const",93957346984496,93957346984514],["icu_68::ChineseCalendar::clone() const",93957346984976,93957346985077],["icu_68::ChineseCalendar::ChineseCalendar(icu_68::ChineseCalendar const&)",93957346985568,93957346985641],["icu_68::ChineseCalendar::handleGetLimit(UCalendarDateFields, icu_68::Calendar::ELimitType) const",93957346985712,93957346985739],["icu_68::ChineseCalendar::getFieldResolutionTable() const",93957346986000,93957346986013],["icu_68::ChineseCalendar::winterSolstice(int) const",93957346986912,93957346987397],["icu_68::ChineseCalendar::majorSolarTerm(int) const",93957346988064,93957346988404],["icu_68::ChineseCalendar::newYear(int) const",93957346989312,93957346989629],["icu_68::ChineseCalendar::defaultCenturyStartYear() const",93957346990000,93957346990056],["icu_68::CalendarAstronomer::setTime(double)",93957346990544,93957346990626],["icu_68::CalendarAstronomer::WINTER_SOLSTICE()",93957346991520,93957346991534],["icu_68::CalendarAstronomer::getMoonPosition()",93957346992368,93957346993094],["icu_68::CalendarCache::put(icu_68::CalendarCache**, int, int, UErrorCode&)",93957346993520,93957346993786],["icu_68::MoonTimeAngleFunc::eval(icu_68::CalendarAstronomer&)",93957346993984,93957346994057],["icu_68::Collator::compare(icu_68::UnicodeString const&, icu_68::UnicodeString const&) const",93957346995952,93957346995983],["icu_68::Collator::compareUTF8(icu_68::StringPiece const&, icu_68::StringPiece const&, UErrorCode&) const",93957346996080,93957346996285],["icu_68::StringEnumeration::operator==(icu_68::StringEnumeration const&) const",93957346997056,93957346997097],["icu_68::Collator::getStrength() const",93957346997248,93957346997287],["icu_68::Collator::setReorderCodes(int const*, int, UErrorCode&)",93957346997392,93957346997411],["icu_68::ICUCollatorService::getKey(icu_68::ICUServiceKey&, icu_68::UnicodeString*, UErrorCode&) const",93957346997680,93957346997807],["collator_cleanup()",93957346998336,93957346998497],["icu_68::CollationCacheEntry::CollationCacheEntry(icu_68::Locale const&, icu_68::CollationTailoring const*)",93957346999104,93957346999176],["icu_68::CollationTailoring::~CollationTailoring()",93957346999696,93957346999887],["icu_68::CollationTailoring::getUCAVersion() const",93957347000192,93957347000220],["icu_68::CollationSettings::copyReorderingFrom(icu_68::CollationSettings const&, UErrorCode&)",93957347000544,93957347000992],["icu_68::CollationSettings::hashCode() const",93957347001216,93957347001885],["icu_68::CollationSettings::reorderEx(unsigned int) const",93957347004416,93957347004465],["icu_68::CollationSettings::setAlternateHandling(UColAttributeValue, int, UErrorCode&)",93957347004704,93957347004759],["icu_68::CollationData::getSingleCE(int, UErrorCode&) const",93957347004976,93957347005548],["icu_68::CollationData::makeReorderRanges(int const*, int, icu_68::UVector32&, UErrorCode&) const",93957347005936,93957347005954],["icu_68::Collation::decTwoBytePrimaryByOneStep(unsigned int, signed char, int)",93957347008336,93957347008396],["icu_68::CollationDataReader::read(icu_68::CollationTailoring const*, unsigned char const*, int, icu_68::CollationTailoring&, UErrorCode&)",93957347008944,93957347011350],["icu_68::CollationFastLatin::compareUTF16(unsigned short const*, unsigned short const*, int, char16_t const*, int, char16_t const*, int)",93957347012400,93957347016405],["icu_68::CopticCalendar::CopticCalendar(icu_68::Locale const&, UErrorCode&)",93957347021680,93957347021711],["icu_68::CopticCalendar::handleComputeFields(int, UErrorCode&)",93957347021920,93957347022117],["icu_68::CopticCalendar::getJDEpochOffset() const",93957347022544,93957347022555],["icu_68::CECalendar::handleGetLimit(UCalendarDateFields, icu_68::Calendar::ELimitType) const",93957347022832,93957347022859],["icu_68::CurrencyUnit::CurrencyUnit(icu_68::MeasureUnit const&, UErrorCode&)",93957347023392,93957347023498],["icu_68::CurrencyUnit::~CurrencyUnit()",93957347023776,93957347023786],["icu_68::DangiCalendar::getDangiCalZoneAstroCalc() const",93957347023920,93957347024748],["calendar_dangi_cleanup()",93957347024848,93957347024893],["icu_68::DateFmtBestPatternKey::~DateFmtBestPatternKey()",93957347025024,93957347025088],["icu_68::DateFormat::operator=(icu_68::DateFormat const&)",93957347025408,93957347025554],["icu_68::DateFormat::format(icu_68::Formattable const&, icu_68::UnicodeString&, icu_68::FieldPositionIterator*, UErrorCode&) const",93957347025984,93957347026179],["icu_68::DateFormat::parse(icu_68::UnicodeString const&, UErrorCode&) const",93957347026592,93957347026825],["icu_68::DateFormat::createDateInstance(icu_68::DateFormat::EStyle, icu_68::Locale const&)",93957347027088,93957347027115],["icu_68::DateFormat::adoptCalendar(icu_68::Calendar*)",93957347028048,93957347028091],["icu_68::DateFormat::setNumberFormat(icu_68::NumberFormat const&)",93957347028256,93957347028310],["icu_68::DateFormat::getTimeZone() const",93957347028400,93957347028429],["icu_68::DateFormat::isCalendarLenient() const",93957347028704,93957347028730],["icu_68::DateFormat::getBooleanAttribute(UDateFormatBooleanAttribute, UErrorCode&) const",93957347028896,93957347028914],["icu_68::DateFmtBestPatternKey::createObject(void const*, UErrorCode&) const",93957347029344,93957347029615],["icu_68::LocaleCacheKey<icu_68::DateFmtBestPattern>::clone() const",93957347029792,93957347029886],["icu_68::DecimalFormat::DecimalFormat(icu_68::UnicodeString const&, icu_68::DecimalFormatSymbols*, UNumberFormatStyle, UErrorCode&)",93957347031808,93957347032107],["icu_68::DecimalFormat::setMaximumSignificantDigits(int)",93957347033088,93957347033159],["icu_68::DecimalFormat::setCurrencyUsage(UCurrencyUsage, UErrorCode*)",93957347033392,93957347033450],["icu_68::DecimalFormat::setFormatFailIfMoreThanMaxDigits(signed char)",93957347033680,93957347033741],["icu_68::DecimalFormat::setParseIntegerOnly(signed char)",93957347034240,93957347034335],["icu_68::DecimalFormat::~DecimalFormat()",93957347035920,93957347036039],["icu_68::DecimalFormat::format(double, icu_68::UnicodeString&, icu_68::FieldPosition&) const",93957347036416,93957347036991],["icu_68::DecimalFormat::format(int, icu_68::UnicodeString&, icu_68::FieldPosition&, UErrorCode&) const",93957347038208,93957347038225],["icu_68::DecimalFormat::format(long, icu_68::UnicodeString&, icu_68::FieldPositionIterator*, UErrorCode&) const",93957347039296,93957347039823],["icu_68::DecimalFormat::parse(icu_68::UnicodeString const&, icu_68::Formattable&, icu_68::ParsePosition&) const",93957347041200,93957347041730],["icu_68::DecimalFormat::setDecimalFormatSymbols(icu_68::DecimalFormatSymbols const&)",93957347042560,93957347042718],["icu_68::DecimalFormat::setPositivePrefix(icu_68::UnicodeString const&)",93957347042976,93957347043161],["icu_68::DecimalFormat::getNegativeSuffix(icu_68::UnicodeString&) const",93957347043632,93957347043710],["icu_68::DecimalFormat::setRoundingIncrement(double)",93957347044096,93957347044162],["icu_68::DecimalFormat::setFormatWidth(int)",93957347044384,93957347044434],["icu_68::DecimalFormat::setPadPosition(icu_68::DecimalFormat::EPadPosition)",93957347044928,93957347045000],["icu_68::DecimalFormat::setMinimumExponentDigits(signed char)",93957347045168,93957347045222],["icu_68::DecimalFormat::setSecondaryGroupingSize(int)",93957347045408,93957347045464],["icu_68::number::impl::DecimalFormatProperties::DecimalFormatProperties(icu_68::number::impl::DecimalFormatProperties const&)",93957347046032,93957347046438],["icu_68::DecimalFormat::applyPattern(icu_68::UnicodeString const&, UErrorCode&)",93957347046864,93957347046942],["icu_68::DecimalFormat::setMinimumIntegerDigits(int)",93957347047232,93957347047303],["icu_68::DecimalFormat::setCurrency(char16_t const*)",93957347047920,93957347048022],["icu_68::DecimalFormat::doFastFormatInt32(int, bool, icu_68::UnicodeString&) const",93957347048864,93957347049187],["icu_68::CurrencyAmount::clone() const",93957347049824,93957347049885],["icu_68::CurrencyPluralInfo::getDynamicClassID() const",93957347049952,93957347049965],["icu_68::CurrencyPluralInfo::operator=(icu_68::CurrencyPluralInfo const&)",93957347050208,93957347050539],["icu_68::CurrencyPluralInfo::~CurrencyPluralInfo()",93957347051280,93957347051308],["icu_68::UnicodeString::findAndReplace(icu_68::UnicodeString const&, icu_68::UnicodeString const&)",93957347054000,93957347054092],["icu_68::DecimalFormatSymbols::initialize(icu_68::Locale const&, UErrorCode&, signed char, icu_68::NumberingSystem const*)",93957347054848,93957347057132],["icu_68::DecimalFormatSymbols::~DecimalFormatSymbols()",93957347059984,93957347060451],["icu_68::DecimalFormatSymbols::operator==(icu_68::DecimalFormatSymbols const&) const",93957347061424,93957347062023],["icu_68::(anonymous namespace)::DecFmtSymDataSink::put(char const*, icu_68::ResourceValue&, signed char, UErrorCode&)",93957347063056,93957347063549],["icu_68::SharedDateFormatSymbols::~SharedDateFormatSymbols()",93957347065136,93957347065243],["icu_68::DateFormatSymbols::DateFormatSymbols(icu_68::Locale const&, UErrorCode&)",93957347066064,93957347066176],["icu_68::DateFormatSymbols::copyData(icu_68::DateFormatSymbols const&)",93957347093536,93957347107625],["icu_68::DateFormatSymbols::~DateFormatSymbols()",93957347110864,93957347110938],["icu_68::UnicodeString::operator!=(icu_68::UnicodeString const&) const",93957347111568,93957347111649],["icu_68::DateFormatSymbols::getQuarters(int&, icu_68::DateFormatSymbols::DtContextType, icu_68::DateFormatSymbols::DtWidthType) const",93957347113904,93957347114041],["icu_68::DateFormatSymbols::getPatternCharIndex(char16_t)",93957347114128,93957347114180],["icu_68::loadDayPeriodStrings(icu_68::(anonymous namespace)::CalendarDataSink&, icu_68::CharString&, int&, UErrorCode&)",93957347114720,93957347115342],["icu_68::(anonymous namespace)::CalendarDataSink::put(char const*, icu_68::ResourceValue&, signed char, UErrorCode&)",93957347116288,93957347119528],["icu_68::LocalArray<icu_68::UnicodeString>::~LocalArray()",93957347120464,93957347120556],["icu_68::Hashtable* icu_68::MemoryPool<icu_68::Hashtable, 8>::create<int, UErrorCode&>(int&&, UErrorCode&)",93957347123344,93957347123671],["icu_68::LocaleCacheKey<icu_68::SharedDateFormatSymbols>::~LocaleCacheKey()",93957347123952,93957347124002],["icu_68::FormattedDateIntervalData::~FormattedDateIntervalData()",93957347124192,93957347124220],["icu_68::FormattedList::toTempString(UErrorCode&) const",93957347124464,93957347124568],["icu_68::DateIntervalFormat::createInstance(icu_68::UnicodeString const&, icu_68::Locale const&, UErrorCode&)",93957347124688,93957347124850],["icu_68::DateIntervalFormat::clone() const",93957347126256,93957347126717],["icu_68::DateIntervalFormat::formatImpl(icu_68::Calendar&, icu_68::Calendar&, icu_68::UnicodeString&, signed char&, icu_68::FieldPositionHandler&, UErrorCode&) const",93957347127888,93957347129611],["icu_68::DateIntervalFormat::adoptTimeZone(icu_68::TimeZone*)",93957347133488,93957347133574],["icu_68::DateIntervalFormat::getContext(UDisplayContextType, UErrorCode&) const",93957347133808,93957347133842],["icu_68::DateIntervalFormat::setSeparateDateTimePtn(icu_68::UnicodeString const&, icu_68::UnicodeString const&)",93957347136992,93957347137771],["icu_68::DateIntervalFormat::setIntervalPattern(UCalendarDateFields, icu_68::UnicodeString const*, icu_68::UnicodeString const*, signed char, icu_68::UnicodeString*, icu_68::UnicodeString*)",93957347138608,93957347139668],["icu_68::DateIntervalFormat::fallbackFormatRange(icu_68::Calendar&, icu_68::Calendar&, icu_68::UnicodeString&, signed char&, icu_68::FieldPositionHandler&, UErrorCode&) const",93957347142400,93957347143461],["icu_68::DateIntervalInfo::DateIntervalInfo(icu_68::Locale const&, UErrorCode&)",93957347144848,93957347144929],["icu_68::DateIntervalInfo::deleteHash(icu_68::Hashtable*)",93957347147056,93957347147250],["icu_68::DateIntervalInfo::~DateIntervalInfo()",93957347148192,93957347148259],["icu_68::DateIntervalInfo::getDefaultOrder() const",93957347148608,93957347148617],["icu_68::DateIntervalInfo::parseSkeleton(icu_68::UnicodeString const&, int*)",93957347148768,93957347148867],["icu_68::DateIntervalInfo::DateIntervalSink::getCalendarTypeFromPath(icu_68::UnicodeString const&, icu_68::UnicodeString&, UErrorCode&)",93957347151696,93957347151911],["icu_68::DateTimePatternGenerator::getDynamicClassID() const",93957347152704,93957347152717],["icu_68::DateTimePatternGenerator::initData(icu_68::Locale const&, UErrorCode&, signed char)",93957347154464,93957347154821],["icu_68::DateTimePatternGenerator::copyHashtable(icu_68::Hashtable*, UErrorCode&)",93957347157760,93957347157980],["allowedHourFormatsCleanup_68",93957347159008,93957347159028],["icu_68::DateTimePatternGenerator::setDateTimeFromCalendar(icu_68::Locale const&, UErrorCode&)",93957347161056,93957347161670],["icu_68::DateTimePatternGenerator::getDefaultHourCycle(UErrorCode&) const",93957347162976,93957347163065],["icu_68::DateTimePatternGenerator::hackTimes(icu_68::UnicodeString const&, UErrorCode&)",93957347165472,93957347166697],["icu_68::DateTimePatternGenerator::AvailableFormatsSink::~AvailableFormatsSink()",93957347167600,93957347167642],["icu_68::DateTimePatternGenerator::initHashtable(UErrorCode&)",93957347168368,93957347168573],["icu_68::DateTimePatternGenerator::mapSkeletonMetacharacters(icu_68::UnicodeString const&, int*, UErrorCode&)",93957347169840,93957347170796],["icu_68::DateTimePatternGenerator::getBestAppending(int, int, UErrorCode&, UDateTimePatternMatchOptions)",93957347174336,93957347175606],["icu_68::PatternMap::add(icu_68::UnicodeString const&, icu_68::PtnSkeleton const&, icu_68::UnicodeString const&, signed char, UErrorCode&)",93957347177360,93957347178370],["icu_68::PatternMap::~PatternMap()",93957347179440,93957347179512],["icu_68::FormatParser::~FormatParser()",93957347180864,93957347181488],["icu_68::PtnElem::~PtnElem()",93957347182000,93957347182079],["icu_68::DateTimePatternGenerator::AvailableFormatsSink::put(char const*, icu_68::ResourceValue&, signed char, UErrorCode&)",93957347183408,93957347184052],["icu_68::EthiopicCalendar::EthiopicCalendar(icu_68::Locale const&, UErrorCode&, icu_68::EthiopicCalendar::EEraType)",93957347186160,93957347186200],["icu_68::EthiopicCalendar::handleComputeFields(int, UErrorCode&)",93957347186464,93957347186673],["icu_68::EthiopicCalendar::defaultCenturyStartYear() const",93957347187072,93957347187154],["icu_68::Formattable::Formattable(double)",93957347187280,93957347187380],["icu_68::Formattable::Formattable(icu_68::Formattable const&)",93957347187808,93957347187898],["icu_68::Formattable::~Formattable()",93957347188832,93957347188887],["icu_68::Formattable::getDouble(UErrorCode&) const",93957347189200,93957347189394],["icu_68::Formattable::setDate(double)",93957347189536,93957347189579],["icu_68::Formattable::getString(UErrorCode&) const",93957347189776,93957347189830],["icu_68::Format::Format()",93957347190112,93957347190139],["icu_68::BreakIterator::getLocale(ULocDataLocaleType, UErrorCode&) const",93957347190448,93957347190498],["icu_68::FormattedValueFieldPositionIteratorImpl::~FormattedValueFieldPositionIteratorImpl()",93957347190656,93957347190707],["icu_68::FormattedValueFieldPositionIteratorImpl::appendTo(icu_68::Appendable&, UErrorCode&) const",93957347190912,93957347190993],["icu_68::FormattedValueFieldPositionIteratorImpl::addOverlapSpans(UFieldCategory, signed char, UErrorCode&)",93957347191472,93957347192510],["icu_68::FormattedValueStringBuilderImpl::~FormattedValueStringBuilderImpl()",93957347193296,93957347193367],["icu_68::FormattedValueStringBuilderImpl::nextPosition(icu_68::ConstrainedFieldPosition&, UErrorCode&) const",93957347193520,93957347193537],["icu_68::FormattedValueStringBuilderImpl::appendSpanInfo(int, int, UErrorCode&)",93957347195312,93957347195527],["icu_68::FormattedStringBuilder::FormattedStringBuilder(icu_68::FormattedStringBuilder const&)",93957347195888,93957347195912],["icu_68::FormattedStringBuilder::getFirstCodePoint() const",93957347196384,93957347196500],["icu_68::FormattedStringBuilder::insertCodePoint(int, int, icu_68::FormattedStringBuilder::Field, UErrorCode&)",93957347197264,93957347197616],["icu_68::FormattedStringBuilder::insert(int, icu_68::FormattedStringBuilder const&, UErrorCode&)",93957347198672,93957347198984],["icu_68::FormattedStringBuilder::toTempUnicodeString() const",93957347199984,93957347200064],["icu_68::ConstrainedFieldPosition::ConstrainedFieldPosition()",93957347200400,93957347200416],["icu_68::ConstrainedFieldPosition::setState(int, int, int, int)",93957347200512,93957347200531],["icu_68::FieldPositionOnlyHandler::shiftLast(int)",93957347200672,93957347200712],["icu_68::FieldPositionIteratorHandler::FieldPositionIteratorHandler(icu_68::UVector32*, UErrorCode&)",93957347200880,93957347200927],["icu_68::FieldPositionIteratorHandler::shiftLast(int)",93957347201424,93957347201547],["icu_68::FieldPositionIterator::FieldPositionIterator()",93957347201712,93957347201743],["icu_68::GregorianCalendar::GregorianCalendar(icu_68::TimeZone const&, UErrorCode&)",93957347202160,93957347202290],["icu_68::GregorianCalendar::isEquivalentTo(icu_68::Calendar const&) const",93957347202736,93957347202793],["icu_68::GregorianCalendar::handleComputeMonthStart(int, int, signed char) const",93957347203952,93957347204246],["icu_68::GregorianCalendar::monthLength(int, int) const",93957347204560,93957347204663],["icu_68::GregorianCalendar::handleGetLimit(UCalendarDateFields, icu_68::Calendar::ELimitType) const",93957347205856,93957347205883],["icu_68::GregorianCalendar::internalGetEra() const",93957347206368,93957347206405],["icu_68::GregorianCalendar::defaultCenturyStartYear() const",93957347206800,93957347206856],["icu_68::ClockMath::floorDivide(double, double, double&)",93957347207056,93957347207190],["icu_68::Grego::dayOfWeek(double)",93957347208192,93957347208263],["icu_68::HebrewCalendar::clone() const",93957347208528,93957347208589],["icu_68::HebrewCalendar::startOfYear(int, UErrorCode&)",93957347209408,93957347209854],["icu_68::HebrewCalendar::handleGetYearLength(int) const",93957347210224,93957347210288],["icu_68::HebrewCalendar::handleComputeMonthStart(int, int, signed char) const",93957347211296,93957347211715],["icu_68::HebrewCalendar::getDynamicClassID() const",93957347212208,93957347212221],["icu_68::IndianCalendar::handleGetLimit(UCalendarDateFields, icu_68::Calendar::ELimitType) const",93957347212384,93957347212411],["icu_68::IndianCalendar::handleComputeFields(int, UErrorCode&)",93957347212944,93957347213568],["icu_68::IndianCalendar::getDynamicClassID() const",93957347214032,93957347214045],["icu_68::IslamicCalendar::handleGetLimit(UCalendarDateFields, icu_68::Calendar::ELimitType) const",93957347214272,93957347214299],["calendar_islamic_cleanup()",93957347215200,93957347215283],["icu_68::IslamicCalendar::handleComputeFields(int, UErrorCode&)",93957347216160,93957347217485],["icu_68::IslamicCalendar::getDynamicClassID() const",93957347217936,93957347217949],["icu_68::JapaneseCalendar::clone() const",93957347218224,93957347218309],["icu_68::JapaneseCalendar::internalGetEra() const",93957347218544,93957347218574],["icu_68::JapaneseCalendar::getActualMaximum(UCalendarDateFields, UErrorCode&) const",93957347219008,93957347219252],["icu_68::EraRules::createInstance(char const*, signed char, UErrorCode&)",93957347219648,93957347220643],["icu_68::FormattedListData::~FormattedListData()",93957347221072,93957347221082],["icu_68::ListFormatInternal::~ListFormatInternal()",93957347221248,93957347221302],["icu_68::ListFormatter::getListFormatInternal(icu_68::Locale const&, char const*, UErrorCode&)",93957347221648,93957347222233],["icu_68::ListFormatInternal::ListFormatInternal(icu_68::UnicodeString const&, icu_68::UnicodeString const&, icu_68::UnicodeString const&, icu_68::UnicodeString const&, icu_68::Locale const&, UErrorCode&)",93957347223104,93957347223286],["icu_68::ListFormatter::format(icu_68::UnicodeString const*, int, icu_68::UnicodeString&, UErrorCode&) const",93957347223648,93957347223696],["icu_68::(anonymous namespace)::FormattedListBuilder::append(icu_68::SimpleFormatter const&, icu_68::UnicodeString const&, int, UErrorCode&)",93957347224960,93957347225736],["icu_68::(anonymous namespace)::shouldChangeToU(icu_68::UnicodeString const&)",93957347229136,93957347229460],["icu_68::(anonymous namespace)::ContextualHandler::clone() const",93957347229728,93957347229989],["icu_68::(anonymous namespace)::PatternHandler::~PatternHandler()",93957347230160,93957347230219],["icu_68::MeasureUnit::getDynamicClassID() const",93957347230848,93957347230861],["icu_68::MeasureUnit::MeasureUnit(icu_68::MeasureUnit const&)",93957347231008,93957347231036],["icu_68::MeasureUnit::findBySubType(icu_68::StringPiece, icu_68::MeasureUnit*)",93957347231920,93957347232240],["icu_68::MeasureUnit::~MeasureUnit()",93957347232768,93957347232918],["icu_68::MeasureUnit::operator==(icu_68::UObject const&) const",93957347233152,93957347233357],["icu_68::MeasureUnit::initCurrency(icu_68::StringPiece)",93957347234016,93957347234737],["icu_68::Measure::Measure(icu_68::Measure const&)",93957347235072,93957347235169],["icu_68::number::impl::AffixUtils::estimateLength(icu_68::UnicodeString const&, UErrorCode&)",93957347235472,93957347235771],["icu_68::number::impl::AffixUtils::unescapedCodePointCount(icu_68::UnicodeString const&, icu_68::number::impl::SymbolProvider const&, UErrorCode&)",93957347237472,93957347237926],["icu_68::number::impl::AffixUtils::iterateWithConsumer(icu_68::UnicodeString const&, icu_68::number::impl::TokenConsumer&, UErrorCode&)",93957347238928,93957347239257],["icu_68::number::impl::DecimalQuantity::DecimalQuantity(icu_68::number::impl::DecimalQuantity const&)",93957347239456,93957347239501],["icu_68::number::impl::DecimalQuantity::setMinInteger(int)",93957347240096,93957347240113],["icu_68::number::impl::DecimalQuantity::compact()",93957347240384,93957347241107],["icu_68::number::impl::DecimalQuantity::multiplyBy(icu_68::number::impl::DecNum const&, UErrorCode&)",93957347241616,93957347241828],["icu_68::number::impl::DecimalQuantity::adjustMagnitude(int)",93957347242384,93957347242485],["icu_68::number::impl::DecimalQuantity::toDouble() const",93957347243584,93957347243903],["icu_68::number::impl::DecimalQuantity::getLowerDisplayMagnitude() const",93957347243968,93957347243985],["icu_68::number::impl::DecimalQuantity::isNaN() const",93957347244160,93957347244174],["icu_68::number::impl::DecimalQuantity::_setToLong(long)",93957347245008,93957347245357],["icu_68::number::impl::DecimalQuantity::convertToAccurateDouble()",93957347246432,93957347246653],["icu_68::number::impl::DecimalQuantity::toScientificString() const",93957347248144,93957347248815],["icu_68::number::impl::DecimalQuantity::setDigitPos(int, signed char)",93957347251728,93957347252248],["icu_68::number::impl::DecimalQuantity::toPlainString() const",93957347252992,93957347253478],["icu_68::double_conversion::Bignum::AssignUInt16(unsigned short)",93957347255760,93957347255788],["icu_68::double_conversion::Bignum::MultiplyByPowerOfTen(int)",93957347256640,93957347257915],["icu_68::double_conversion::Bignum::MultiplyByUInt32(unsigned int)",93957347259904,93957347260147],["icu_68::double_conversion::Bignum::DivideModuloIntBignum(icu_68::double_conversion::Bignum const&)",93957347262992,93957347264061],["icu_68::double_conversion::FastDtoa(double, icu_68::double_conversion::FastDtoaMode, int, icu_68::double_conversion::Vector<char>, int*, int*)",93957347264896,93957347268010],["double icu_68::double_conversion::StringToDoubleConverter::StringToIeee<unsigned short const*>(unsigned short const*, int, bool, int*) const",93957347271664,93957347275245],["double icu_68::double_conversion::RadixStringToIeee<3, char*>(char**, char*, bool, unsigned short, bool, bool, double, bool, bool*)",93957347278304,93957347279441],["double icu_68::double_conversion::RadixStringToIeee<4, unsigned short const*>(unsigned short const**, unsigned short const*, bool, unsigned short, bool, bool, double, bool, bool*)",93957347280752,93957347282631],["icu_68::double_conversion::Strtod(icu_68::double_conversion::Vector<char const>, int)",93957347284720,93957347284980],["icu_68::number::impl::DecimalFormatProperties::_equals(icu_68::number::impl::DecimalFormatProperties const&, bool) const",93957347286496,93957347287465],["icu_68::number::NumberFormatterSettings<icu_68::number::UnlocalizedNumberFormatter>::macros(icu_68::number::impl::MacroProps&&) &&",93957347288624,93957347289120],["icu_68::number::NumberFormatterSettings<icu_68::number::LocalizedNumberFormatter>::precision(icu_68::number::Precision const&) const &",93957347290112,93957347290429],["icu_68::number::NumberFormatterSettings<icu_68::number::LocalizedNumberFormatter>::adoptSymbols(icu_68::NumberingSystem*) const &",93957347291376,93957347291699],["icu_68::number::NumberFormatterSettings<icu_68::number::LocalizedNumberFormatter>::clone() &&",93957347292656,93957347292958],["icu_68::number::LocalizedNumberFormatter::LocalizedNumberFormatter(icu_68::number::LocalizedNumberFormatter const&)",93957347293696,93957347293973],["icu_68::number::LocalizedNumberFormatter::operator=(icu_68::number::LocalizedNumberFormatter&&)",93957347295744,93957347295983],["icu_68::number::LocalizedNumberFormatter::LocalizedNumberFormatter(icu_68::number::impl::MacroProps&&, icu_68::Locale const&)",93957347297056,93957347297576],["icu_68::number::LocalizedNumberFormatter::formatDecimalQuantity(icu_68::number::impl::DecimalQuantity const&, UErrorCode&) const",93957347298448,93957347298754],["icu_68::number::impl::MicroProps::processQuantity(icu_68::number::impl::DecimalQuantity&, icu_68::number::impl::MicroProps&, UErrorCode&) const",93957347299744,93957347299775],["icu_68::number::impl::NumberFormatterImpl::writeNumber(icu_68::number::impl::MicroProps const&, icu_68::number::impl::DecimalQuantity&, icu_68::FormattedStringBuilder&, int, UErrorCode&)",93957347301488,93957347301905],["icu_68::number::impl::NumberFormatterImpl::macrosToMicroGenerator(icu_68::number::impl::MacroProps const&, bool, UErrorCode&)",93957347303456,93957347307602],["icu_68::number::impl::MixedUnitLongNameHandler::MixedUnitLongNameHandler()",93957347307904,93957347308204],["icu_68::number::impl::EmptyModifier::getParameters(icu_68::number::impl::Modifier::Parameters&) const",93957347308960,93957347308973],["icu_68::MeasureUnitImpl::append(icu_68::SingleUnitImpl const&, UErrorCode&)",93957347310064,93957347310255],["icu_68::MeasureUnitImpl::forIdentifier(icu_68::StringPiece, UErrorCode&)",93957347311024,93957347311289],["icu_68::MeasureUnit::getComplexity(UErrorCode&) const",93957347313328,93957347313649],["icu_68::(anonymous namespace)::cleanupUnitExtras()",93957347316640,93957347316702],["icu_68::(anonymous namespace)::serializeSingle(icu_68::SingleUnitImpl const&, bool, icu_68::CharString&, UErrorCode&)",93957347317376,93957347317906],["(anonymous namespace)::getResourceBundleKey(char const*, UNumberCompactStyle, icu_68::number::impl::CompactType, icu_68::CharString&, UErrorCode&)",93957347319072,93957347319292],["icu_68::number::impl::CompactHandler::precomputeAllModifiers(icu_68::number::impl::MutablePatternModifier&, UErrorCode&)",93957347320848,93957347322133],["icu_68::number::impl::Grouper::forStrategy(UNumberGroupingStrategy)",93957347323072,93957347323125],["icu_68::number::impl::Grouper::getPrimary() const",93957347323664,93957347323673],["icu_68::number::IntegerWidth::truncateAt(int)",93957347323776,93957347323893],["icu_68::number::impl::LongNameHandler::forCompoundUnit(icu_68::Locale const&, icu_68::MeasureUnit const&, icu_68::MeasureUnit const&, UNumberUnitWidth const&, icu_68::PluralRules const*, icu_68::number::impl::MicroPropsGenerator const*, icu_68::number::impl::LongNameHandler*, UErrorCode&)",93957347324832,93957347326717],["icu_68::SimpleFormatter::getTextWithNoArguments() const",93957347328416,93957347328504],["icu_68::number::impl::LongNameHandler::getModifier(icu_68::number::impl::Signum, icu_68::StandardPlural::Form) const",93957347330832,93957347330851],["icu_68::number::impl::MixedUnitLongNameHandler::getMixedUnitModifier(icu_68::number::impl::DecimalQuantity&, icu_68::number::impl::MicroProps&, UErrorCode&) const",93957347332064,93957347334438],["icu_68::number::impl::LongNameHandler::~LongNameHandler()",93957347335808,93957347335836],["icu_68::number::impl::MixedUnitLongNameHandler::~MixedUnitLongNameHandler()",93957347336528,93957347336693],["icu_68::number::impl::LongNameMultiplexer::~LongNameMultiplexer()",93957347337328,93957347337356],["icu_68::number::impl::NumberPropertyMapper::oldToNew(icu_68::number::impl::DecimalFormatProperties const&, icu_68::DecimalFormatSymbols const&, icu_68::number::impl::DecimalFormatWarehouse&, icu_68::number::impl::DecimalFormatProperties*, UErrorCode&)",93957347338688,93957347341542],["icu_68::number::impl::PropertiesAffixPatternProvider::length(int) const",93957347342976,93957347343057],["icu_68::number::impl::PropertiesAffixPatternProvider::negativeHasMinusSign() const",93957347343680,93957347343842],["icu_68::number::impl::CurrencyPluralInfoAffixProvider::charAt(int, int) const",93957347344368,93957347344406],["icu_68::number::impl::CurrencyPluralInfoAffixProvider::hasNegativeSubpattern() const",93957347344544,93957347344566],["icu_68::number::impl::CurrencyPluralInfoAffixProvider::hasBody() const",93957347344672,93957347344694],["icu_68::number::impl::CurrencySymbols::CurrencySymbols(icu_68::CurrencyUnit, icu_68::Locale const&, icu_68::DecimalFormatSymbols const&, UErrorCode&)",93957347344912,93957347345202],["icu_68::number::impl::CurrencySymbols::getVariantCurrencySymbol(UErrorCode&) const",93957347345488,93957347345609],["icu_68::number::impl::resolveCurrency(icu_68::number::impl::DecimalFormatProperties const&, icu_68::Locale const&, UErrorCode&)",93957347345968,93957347346104],["icu_68::number::impl::AdoptingModifierStore::~AdoptingModifierStore()",93957347346224,93957347346298],["icu_68::number::impl::SimpleModifier::apply(icu_68::FormattedStringBuilder&, int, int, UErrorCode&) const",93957347346848,93957347346858],["icu_68::number::impl::SimpleModifier::isStrong() const",93957347347168,93957347347177],["icu_68::number::impl::ConstantMultiFieldModifier::getPrefixLength() const",93957347347632,93957347347646],["icu_68::number::impl::ConstantMultiFieldModifier::getParameters(icu_68::number::impl::Modifier::Parameters&) const",93957347347776,93957347347792],["icu_68::number::impl::CurrencySpacingEnabledModifier::apply(icu_68::FormattedStringBuilder&, int, int, UErrorCode&) const",93957347349664,93957347350086],["icu_68::number::impl::ConstantMultiFieldModifier::~ConstantMultiFieldModifier()",93957347351040,93957347351094],["icu_68::number::impl::CurrencySpacingEnabledModifier::~CurrencySpacingEnabledModifier()",93957347351232,93957347351339],["icu_68::number::Scale::Scale(icu_68::number::Scale const&)",93957347351696,93957347351798],["icu_68::number::Scale::~Scale()",93957347352048,93957347352098],["icu_68::number::Scale::byDoubleAndPowerOfTen(double, int)",93957347352352,93957347352529],["icu_68::number::impl::MultiplierFormatHandler::~MultiplierFormatHandler()",93957347352832,93957347352892],["icu_68::number::ScientificNotation::ScientificNotation(signed char, bool, short, UNumberSignDisplay)",93957347353024,93957347353070],["icu_68::number::ScientificNotation::withMinExponentDigits(int) const",93957347353200,93957347353277],["icu_68::number::FormattedNumber::operator=(icu_68::number::FormattedNumber&&)",93957347353472,93957347353539],["icu_68::number::impl::Padder::forProperties(icu_68::number::impl::DecimalFormatProperties const&)",93957347353744,93957347353842],["icu_68::number::impl::MutablePatternModifier::setPatternAttributes(UNumberSignDisplay, bool)",93957347354576,93957347354588],["icu_68::number::impl::MutablePatternModifier::createImmutable(UErrorCode&)",93957347355008,93957347355704],["icu_68::number::impl::ImmutablePatternModifier::getModifier(icu_68::number::impl::Signum, icu_68::StandardPlural::Form) const",93957347356832,93957347356870],["non-virtual thunk to icu_68::number::impl::MutablePatternModifier::apply(icu_68::FormattedStringBuilder&, int, int, UErrorCode&) const",93957347357776,93957347357790],["non-virtual thunk to icu_68::number::impl::MutablePatternModifier::getCodePointCount() const",93957347358208,93957347358385],["icu_68::number::impl::MutablePatternModifier::~MutablePatternModifier()",93957347358736,93957347358878],["non-virtual thunk to icu_68::number::impl::MutablePatternModifier::~MutablePatternModifier()",93957347358976,93957347358990],["icu_68::number::impl::PatternParser::parseToPatternInfo(icu_68::UnicodeString const&, icu_68::number::impl::ParsedPatternInfo&, UErrorCode&)",93957347359120,93957347359139],["icu_68::number::impl::ParsedPatternInfo::charAt(int, int) const",93957347360064,93957347360271],["icu_68::number::impl::ParsedPatternInfo::hasNegativeSubpattern() const",93957347360592,93957347360604],["icu_68::number::impl::ParsedPatternInfo::hasBody() const",93957347360688,93957347360701],["icu_68::number::impl::ParsedPatternInfo::consumeFormat(UErrorCode&)",93957347361408,93957347361592],["icu_68::number::impl::ParsedPatternInfo::consumeFractionFormat(UErrorCode&)",93957347363152,93957347363571],["icu_68::number::impl::PatternStringUtils::propertiesToPatternString(icu_68::number::impl::DecimalFormatProperties const&, UErrorCode&)",93957347365072,93957347368742],["icu_68::number::impl::PatternStringUtils::patternInfoToStringBuilder(icu_68::number::impl::AffixPatternProvider const&, bool, icu_68::number::impl::PatternSignType, icu_68::StandardPlural::Form, bool, icu_68::UnicodeString&)",93957347373920,93957347374315],["icu_68::number::impl::roundingutils::doubleFractionLength(double, signed char*)",93957347375760,93957347375914],["icu_68::number::Precision::minFraction(int)",93957347376048,93957347376117],["icu_68::number::Precision::minSignificantDigits(int)",93957347376336,93957347376408],["icu_68::number::FractionPrecision::withMinDigits(int) const",93957347376768,93957347376860],["icu_68::number::impl::RoundingImpl::RoundingImpl(icu_68::number::Precision const&, UNumberFormatRoundingMode, icu_68::CurrencyUnit const&, UErrorCode&)",93957347377456,93957347377531],["icu_68::number::impl::RoundingImpl::apply(icu_68::number::impl::DecimalQuantity&, UErrorCode&) const",93957347377792,93957347378303],["icu_68::number::impl::ScientificModifier::ScientificModifier()",93957347378448,93957347378479],["icu_68::number::impl::ScientificHandler::ScientificHandler(icu_68::number::Notation const*, icu_68::DecimalFormatSymbols const*, icu_68::number::impl::MicroPropsGenerator const*)",93957347379088,93957347379131],["icu_68::number::impl::ScientificHandler::~ScientificHandler()",93957347379536,93957347379550],["icu_68::number::impl::stem_to_object::unit(icu_68::number::impl::skeleton::StemEnum)",93957347379680,93957347379747],["icu_68::number::impl::enum_to_stem_string::groupingStrategy(UNumberGroupingStrategy, icu_68::UnicodeString&)",93957347380208,93957347380409],["(anonymous namespace)::initNumberSkeletons(UErrorCode&)",93957347382064,93957347385603],["icu_68::number::impl::skeleton::parseOption(icu_68::number::impl::skeleton::ParseState, icu_68::StringSegment const&, icu_68::number::impl::MacroProps&, UErrorCode&)",93957347388816,93957347389264],["icu_68::number::impl::blueprint_helpers::parseCurrencyOption(icu_68::StringSegment const&, icu_68::number::impl::MacroProps&, UErrorCode&)",93957347390272,93957347390499],["icu_68::number::impl::blueprint_helpers::parseIntegerWidthOption(icu_68::StringSegment const&, icu_68::number::impl::MacroProps&, UErrorCode&)",93957347393904,93957347394368],["icu_68::number::impl::blueprint_helpers::parseExponentSignOption(icu_68::StringSegment const&, icu_68::number::impl::MacroProps&, UErrorCode&)",93957347395456,93957347395838],["icu_68::number::impl::GeneratorHelpers::precision(icu_68::number::impl::MacroProps const&, icu_68::UnicodeString&, UErrorCode&)",93957347397376,93957347397921],["icu_68::number::impl::GeneratorHelpers::decimal(icu_68::number::impl::MacroProps const&, icu_68::UnicodeString&, UErrorCode&)",93957347398544,93957347398615],["icu_68::number::impl::blueprint_helpers::generateIncrementOption(double, int, icu_68::UnicodeString&, UErrorCode&)",93957347399040,93957347399311],["(anonymous namespace)::cleanupNumberSkeletons()",93957347399968,93957347400007],["icu_68::number::impl::SymbolsWrapper::operator=(icu_68::number::impl::SymbolsWrapper const&)",93957347400224,93957347400288],["icu_68::number::impl::SymbolsWrapper::setTo(icu_68::NumberingSystem const*)",93957347400544,93957347400599],["icu_68::number::impl::Usage::operator=(icu_68::number::impl::Usage const&)",93957347400768,93957347400889],["icu_68::number::impl::Usage::set(icu_68::StringPiece)",93957347401072,93957347401199],["icu_68::number::impl::UnitConversionHandler::UnitConversionHandler(icu_68::MeasureUnit const&, icu_68::MeasureUnit const&, icu_68::number::impl::MicroPropsGenerator const*, UErrorCode&)",93957347402736,93957347403819],["icu_68::number::impl::UnitConversionHandler::~UnitConversionHandler()",93957347404176,93957347404237],["icu_68::units::ConversionRate::~ConversionRate()",93957347405072,93957347405277],["icu_68::number::impl::DecNum::DecNum(icu_68::number::impl::DecNum const&, UErrorCode&)",93957347405968,93957347406166],["icu_68::number::impl::DecNum::setTo(unsigned char const*, int, int, bool, UErrorCode&)",93957347407024,93957347407257],["icu_68::number::impl::DecNum::isNegative() const",93957347407424,93957347407439],["uprv_decContextSetRounding_68",93957347407600,93957347407612],["uprv_decNumberCopy_68",93957347410864,93957347411369],["decNaNs(decNumber*, decNumber const*, decNumber const*, decContext*, unsigned int*)",93957347417776,93957347419020],["uprv_decNumberReduce_68",93957347419872,93957347420091],["decUnitAddSub(unsigned char const*, int, unsigned char const*, int, int, unsigned char*, int)",93957347421456,93957347421991],["decSetSubnormal(decNumber*, decContext*, int*, unsigned int*)",93957347423440,93957347423710],["icu_68::NumberFormat::NumberFormat(icu_68::NumberFormat const&)",93957347423904,93957347424094],["icu_68::NumberFormat::format(double, icu_68::UnicodeString&, icu_68::FieldPosition&, UErrorCode&) const",93957347424512,93957347424536],["icu_68::NumberFormat::format(icu_68::number::impl::DecimalQuantity const&, icu_68::UnicodeString&, icu_68::FieldPositionIterator*, UErrorCode&) const",93957347424832,93957347424900],["icu_68::NumberFormat::parseObject(icu_68::UnicodeString const&, icu_68::Formattable&, icu_68::ParsePosition&) const",93957347425984,93957347426001],["icu_68::NumberFormat::setParseIntegerOnly(signed char)",93957347426624,93957347426637],["icu_68::NumberFormat::createInstance(icu_68::Locale const&, UErrorCode&)",93957347426864,93957347426952],["icu_68::NumberFormat::createSharedInstance(icu_68::Locale const&, UNumberFormatStyle, UErrorCode&)",93957347427344,93957347427588],["icu_68::NumberFormat::setMaximumIntegerDigits(int)",93957347427648,93957347427705],["icu_68::NumberFormat::setMaximumFractionDigits(int)",93957347427808,93957347427865],["icu_68::NumberFormat::getEffectiveCurrency(char16_t*, UErrorCode&) const",93957347428016,93957347428119],["icu_68::NumberFormat::makeInstance(icu_68::Locale const&, UNumberFormatStyle, signed char, UErrorCode&)",93957347428448,93957347430719],["icu_68::ICUNumberFormatFactory::handleCreate(icu_68::Locale const&, int, icu_68::ICUService const*, UErrorCode&) const",93957347431056,93957347431076],["icu_68::ICUNumberFormatService::ICUNumberFormatService()",93957347431440,93957347431674],["icu_68::LocaleCacheKey<icu_68::SharedNumberFormat>::clone() const",93957347431856,93957347431950],["icu_68::numparse::impl::DecimalMatcher::operator=(icu_68::numparse::impl::DecimalMatcher&&)",93957347433504,93957347433811],["icu_68::numparse::impl::NumberParserImpl::{unnamed type#1}::NumberParserImpl()",93957347437888,93957347439006],["icu_68::numparse::impl::NumberParserImpl::addMatcher(icu_68::numparse::impl::NumberParseMatcher&)",93957347439680,93957347439834],["icu_68::numparse::impl::AffixPatternMatcher::~AffixPatternMatcher()",93957347441168,93957347441244],["icu_68::numparse::impl::DecimalMatcher::match(icu_68::StringSegment&, icu_68::numparse::impl::ParsedNumber&, UErrorCode&) const",93957347442992,93957347443004],["icu_68::numparse::impl::DecimalMatcher::~DecimalMatcher()",93957347446384,93957347446412],["icu_68::numparse::impl::ArraySeriesMatcher::ArraySeriesMatcher()",93957347447200,93957347447242],["icu_68::numparse::impl::ArraySeriesMatcher::~ArraySeriesMatcher()",93957347447424,93957347447472],["icu_68::numparse::impl::AffixPatternMatcherBuilder::addMatcher(icu_68::numparse::impl::NumberParseMatcher&)",93957347448704,93957347448859],["icu_68::numparse::impl::CodePointMatcher::match(icu_68::StringSegment&, icu_68::numparse::impl::ParsedNumber&, UErrorCode&) const",93957347449664,93957347449718],["icu_68::numparse::impl::AffixPatternMatcherBuilder::~AffixPatternMatcherBuilder()",93957347450128,93957347450187],["icu_68::numparse::impl::AffixMatcherWarehouse::isInteresting(icu_68::number::impl::AffixPatternProvider const&, icu_68::numparse::impl::IgnorablesMatcher const&, int, UErrorCode&)",93957347451184,93957347451858],["icu_68::numparse::impl::AffixMatcher::smokeTest(icu_68::StringSegment const&) const",93957347455616,93957347455687],["non-virtual thunk to icu_68::numparse::impl::AffixPatternMatcherBuilder::~AffixPatternMatcherBuilder()",93957347456912,93957347456972],["icu_68::numparse::impl::CombinedCurrencyMatcher::matchCurrency(icu_68::StringSegment&, icu_68::numparse::impl::ParsedNumber&, UErrorCode&) const",93957347458160,93957347459334],["icu_68::numparse::impl::ParsedNumber::setCharsConsumed(icu_68::StringSegment const&)",93957347459520,93957347459547],["icu_68::numparse::impl::ParsedNumber::populateFormattable(icu_68::Formattable&, int) const",93957347459648,93957347459817],["icu_68::numparse::impl::ScientificMatcher::smokeTest(icu_68::StringSegment const&) const",93957347460736,93957347460756],["icu_68::numparse::impl::SymbolMatcher::getSet() const",93957347461056,93957347461066],["icu_68::numparse::impl::IgnorablesMatcher::IgnorablesMatcher(int)",93957347461376,93957347461558],["icu_68::numparse::impl::InfinityMatcher::accept(icu_68::StringSegment&, icu_68::numparse::impl::ParsedNumber&) const",93957347461744,93957347461761],["icu_68::numparse::impl::NanMatcher::NanMatcher(icu_68::DecimalFormatSymbols const&)",93957347461984,93957347462107],["icu_68::numparse::impl::PercentMatcher::PercentMatcher(icu_68::DecimalFormatSymbols const&)",93957347462288,93957347462414],["icu_68::numparse::impl::PermilleMatcher::isDisabled(icu_68::numparse::impl::ParsedNumber const&) const",93957347462592,93957347462606],["icu_68::numparse::impl::NanMatcher::~NanMatcher()",93957347462800,93957347462850],["icu_68::numparse::impl::RequireCurrencyValidator::postProcess(icu_68::numparse::impl::ParsedNumber&) const",93957347462976,93957347462998],["icu_68::numparse::impl::RequireDecimalSeparatorValidator::toString() const",93957347463120,93957347463151],["icu_68::numparse::impl::MultiplierParseHandler::postProcess(icu_68::numparse::impl::ParsedNumber&) const",93957347463248,93957347463270],["icu_68::NumberingSystem::getDynamicClassID() const",93957347463424,93957347463437],["icu_68::NumberingSystem::createInstanceByName(char const*, UErrorCode&)",93957347464944,93957347465455],["icu_68::NumberingSystem::getName() const",93957347465584,93957347465594],["icu_68::OlsonTimeZone::deleteTransitionRules()",93957347467424,93957347467685],["icu_68::OlsonTimeZone::getOffset(unsigned char, int, int, int, unsigned char, int, UErrorCode&) const",93957347468176,93957347468327],["icu_68::OlsonTimeZone::getOffsetFromLocal(double, int, int, int&, int&, UErrorCode&) const",93957347469568,93957347469653],["icu_68::OlsonTimeZone::getDSTSavings() const",93957347470352,93957347470387],["icu_68::OlsonTimeZone::initTransitionRules(UErrorCode&)",93957347470976,93957347472969],["icu_68::OlsonTimeZone::getTimeZoneRules(icu_68::InitialTimeZoneRule const*&, icu_68::TimeZoneRule const**, int&, UErrorCode&) const",93957347475552,93957347475914],["icu_68::BasicTimeZone::hasEquivalentTransitions(icu_68::BasicTimeZone const&, double, double, signed char, UErrorCode&) const",93957347476000,93957347477271],["icu_68::DateTimeRule::DateTimeRule(int, int, int, icu_68::DateTimeRule::TimeRuleType)",93957347480064,93957347480108],["icu_68::DateTimeRule::operator==(icu_68::DateTimeRule const&) const",93957347480288,93957347480398],["icu_68::PersianCalendar::PersianCalendar(icu_68::Locale const&, UErrorCode&)",93957347480496,93957347480576],["icu_68::PersianCalendar::handleComputeMonthStart(int, int, signed char) const",93957347480800,93957347480906],["icu_68::PersianCalendar::defaultCenturyStartYear() const",93957347481568,93957347481624],["icu_68::PluralRules::PluralRules(icu_68::PluralRules const&)",93957347481680,93957347481714],["icu_68::SharedPluralRules::~SharedPluralRules()",93957347482224,93957347482272],["icu_68::PluralRuleParser::parse(icu_68::UnicodeString const&, icu_68::PluralRules*, UErrorCode&)",93957347482640,93957347485581],["icu_68::PluralRules::forLocale(icu_68::Locale const&, UErrorCode&)",93957347486720,93957347486735],["icu_68::PluralRules::select(double) const",93957347488560,93957347488702],["icu_68::PluralRules::isKeyword(icu_68::UnicodeString const&) const",93957347489376,93957347489617],["icu_68::AndConstraint::AndConstraint(icu_68::AndConstraint const&)",93957347491280,93957347491589],["icu_68::OrConstraint::OrConstraint(icu_68::OrConstraint const&)",93957347492080,93957347492279],["icu_68::RuleChain::~RuleChain()",93957347492736,93957347492824],["icu_68::PluralRuleParser::getKeyType(icu_68::UnicodeString const&, icu_68::tokenType)",93957347493008,93957347493941],["icu_68::PluralKeywordEnumeration::count(UErrorCode&) const",93957347494416,93957347494428],["icu_68::FixedDecimal::~FixedDecimal()",93957347495488,93957347495520],["icu_68::FixedDecimal::getPluralOperand(icu_68::PluralOperand) const",93957347495648,93957347495725],["icu_68::PluralAvailableLocalesEnumeration::~PluralAvailableLocalesEnumeration()",93957347495776,93957347495837],["icu_68::PluralAvailableLocalesEnumeration::count(UErrorCode&) const",93957347496080,93957347496112],["icu_68::LocaleCacheKey<icu_68::SharedPluralRules>::clone() const",93957347496288,93957347496382],["icu_68::(anonymous namespace)::PluralRangesDataSink::put(char const*, icu_68::ResourceValue&, signed char, UErrorCode&)",93957347497200,93957347498112],["icu_68::RuleBasedNumberFormat::operator=(icu_68::RuleBasedNumberFormat const&)",93957347501744,93957347502136],["icu_68::RuleBasedNumberFormat::~RuleBasedNumberFormat()",93957347502656,93957347502726],["icu_68::RuleBasedNumberFormat::getRuleSetName(int) const",93957347503360,93957347503685],["icu_68::RuleBasedNumberFormat::getRuleSetDisplayName(int, icu_68::Locale const&)",93957347504560,93957347505255],["icu_68::RuleBasedNumberFormat::format(long, icu_68::UnicodeString&, icu_68::FieldPosition&) const",93957347506272,93957347506322],["icu_68::RuleBasedNumberFormat::format(int, icu_68::UnicodeString const&, icu_68::UnicodeString&, icu_68::FieldPosition&, UErrorCode&) const",93957347507264,93957347507284],["icu_68::RuleBasedNumberFormat::adjustForCapitalizationContext(int, icu_68::UnicodeString&, UErrorCode&) const",93957347508048,93957347508269],["icu_68::RuleBasedNumberFormat::initDefaultRuleSet()",93957347509920,93957347510816],["icu_68::RuleBasedNumberFormat::stripWhitespace(icu_68::UnicodeString&)",93957347511664,93957347512175],["icu_68::RuleBasedNumberFormat::getDefaultInfinityRule() const",93957347513136,93957347513149],["icu_68::RuleBasedNumberFormat::createPluralFormat(UPluralType, icu_68::UnicodeString const&, UErrorCode&) const",93957347513552,93957347513652],["icu_68::PluralFormat::getDynamicClassID() const",93957347513712,93957347513725],["icu_68::PluralFormat::~PluralFormat()",93957347514304,93957347514419],["icu_68::PluralFormat::findSubMessage(icu_68::MessagePattern const&, int, icu_68::PluralFormat::PluralSelector const&, void*, double, UErrorCode&)",93957347515984,93957347517202],["icu_68::PluralFormat::parseType(icu_68::UnicodeString const&, icu_68::NFRule const*, icu_68::Formattable&, icu_68::FieldPosition&) const",93957347517488,93957347518632],["icu_68::NFRule::NFRule(icu_68::RuleBasedNumberFormat const*, icu_68::UnicodeString const&, UErrorCode&)",93957347518752,93957347518859],["icu_68::NFRule::extractSubstitutions(icu_68::NFRuleSet const*, icu_68::UnicodeString const&, icu_68::NFRule const*, UErrorCode&)",93957347521920,93957347522812],["icu_68::NFRule::operator==(icu_68::NFRule const&) const",93957347523776,93957347524001],["icu_68::NFRule::doFormat(double, icu_68::UnicodeString&, int, int, UErrorCode&) const",93957347526352,93957347527214],["icu_68::NFRule::prefixLength(icu_68::UnicodeString const&, icu_68::UnicodeString const&, UErrorCode&) const",93957347530224,93957347530949],["icu_68::NFRule::setDecimalFormatSymbols(icu_68::DecimalFormatSymbols const&, UErrorCode&)",93957347532976,93957347533056],["icu_68::NFRuleSet::setNonNumericalRule(icu_68::NFRule*)",93957347534816,93957347535024],["icu_68::NFRuleSet::setDecimalFormatSymbols(icu_68::DecimalFormatSymbols const&, UErrorCode&)",93957347536096,93957347536618],["icu_68::NFRuleSet::findDoubleRule(double) const",93957347537104,93957347537369],["icu_68::NFRuleSet::appendRules(icu_68::UnicodeString&) const",93957347539472,93957347539875],["icu_68::ModulusSubstitution::~ModulusSubstitution()",93957347540336,93957347540400],["icu_68::NFSubstitution::NFSubstitution(int, icu_68::NFRuleSet const*, icu_68::UnicodeString const&, UErrorCode&)",93957347541520,93957347542155],["icu_68::NFSubstitution::toString(icu_68::UnicodeString&) const",93957347542320,93957347542601],["icu_68::SameValueSubstitution::getDynamicClassID() const",93957347543792,93957347543805],["icu_68::ModulusSubstitution::getDynamicClassID() const",93957347544144,93957347544157],["icu_68::ModulusSubstitution::doParse(icu_68::UnicodeString const&, icu_68::ParsePosition&, double, double, signed char, unsigned int, icu_68::Formattable&) const",93957347544576,93957347544715],["icu_68::FractionalPartSubstitution::doSubstitution(double, icu_68::UnicodeString&, int, int, UErrorCode&) const",93957347545200,93957347545591],["icu_68::AbsoluteValueSubstitution::getDynamicClassID() const",93957347546848,93957347546861],["icu_68::NumeratorSubstitution::getDynamicClassID() const",93957347548656,93957347548669],["icu_68::MultiplierSubstitution::transformNumber(double) const",93957347548784,93957347548813],["icu_68::ModulusSubstitution::transformNumber(long) const",93957347548864,93957347548905],["icu_68::IntegralPartSubstitution::transformNumber(double) const",93957347549008,93957347549018],["icu_68::AbsoluteValueSubstitution::transformNumber(long) const",93957347549104,93957347549120],["icu_68::NumeratorSubstitution::transformNumber(double) const",93957347549168,93957347549183],["icu_68::CollationElementIterator::~CollationElementIterator()",93957347549296,93957347549376],["icu_68::CollationElementIterator::setText(icu_68::UnicodeString const&, UErrorCode&)",93957347550240,93957347550841],["icu_68::(anonymous namespace)::MaxExpSink::handleExpansion(long const*, int)",93957347551424,93957347551744],["icu_68::CollationIterator::reset()",93957347552224,93957347552293],["icu_68::CollationIterator::getCE32FromBuilderData(unsigned int, UErrorCode&)",93957347552720,93957347552739],["icu_68::CollationIterator::nextCE32FromContraction(icu_68::CollationData const*, unsigned int, char16_t const*, unsigned int, int, UErrorCode&)",93957347557536,93957347559063],["icu_68::CollationData::isUnsafeBackward(int, signed char) const",93957347564640,93957347564883],["icu_68::TailoredSet::handleCE32(int, int, unsigned int)",93957347565056,93957347565486],["icu_68::TailoredSet::compareContractions(int, char16_t const*, char16_t const*)",93957347567808,93957347568789],["icu_68::ContractionsAndExpansions::forData(icu_68::CollationData const*, UErrorCode&)",93957347569616,93957347569758],["icu_68::ContractionsAndExpansions::handleContractions(int, int, unsigned int)",93957347571568,93957347571963],["icu_68::CollationBuilder::parseAndBuild(icu_68::UnicodeString const&, unsigned char const*, icu_68::CollationRuleParser::Importer*, UParseError*, UErrorCode&)",93957347573040,93957347573747],["icu_68::CollationBuilder::makeTailoredCEs(UErrorCode&)",93957347574256,93957347575956],["icu_68::CollationBuilder::getSpecialResetPosition(icu_68::UnicodeString const&, char const*&, UErrorCode&)",93957347578352,93957347580523],["icu_68::CollationBuilder::getWeight16Before(int, long, int)",93957347581488,93957347581701],["icu_68::CollationBuilder::insertTailoredNodeAfter(int, int, UErrorCode&)",93957347584176,93957347584621],["icu_68::CollationBuilder::addWithClosure(icu_68::UnicodeString const&, icu_68::UnicodeString const&, long const*, int, unsigned int, UErrorCode&)",93957347586064,93957347586461],["icu_68::CollationBuilder::addTailComposites(icu_68::UnicodeString const&, icu_68::UnicodeString const&, UErrorCode&)",93957347589056,93957347590344],["icu_68::(anonymous namespace)::BundleImporter::getRules(char const*, char const*, icu_68::UnicodeString&, char const*&, UErrorCode&)",93957347591280,93957347591302],["icu_68::CollationWeights::initForTertiary()",93957347591488,93957347591522],["icu_68::CollationWeights::allocWeights(unsigned int, unsigned int, int)",93957347593952,93957347594383],["icu_68::CollationRuleParser::parse(icu_68::UnicodeString const&, UErrorCode&)",93957347594848,93957347595349],["icu_68::CollationRuleParser::parseRelationOperator(UErrorCode&)",93957347601920,93957347602706],["icu_68::CollationRuleParser::parseSpecialPosition(int, icu_68::UnicodeString&, UErrorCode&)",93957347604880,93957347605770],["icu_68::CollationRuleParser::readWords(int, icu_68::UnicodeString&) const",93957347607504,93957347608224],["icu_68::CollationRuleParser::parseUnicodeSet(int, icu_68::UnicodeSet&, UErrorCode&)",93957347609360,93957347609952],["icu_68::UTF8CollationIterator::~UTF8CollationIterator()",93957347610208,93957347610236],["icu_68::DataBuilderCollationIterator::getOffset() const",93957347611024,93957347611036],["icu_68::DataBuilderCollationIterator::backwardNumCodePoints(int, UErrorCode&)",93957347611264,93957347611308],["icu_68::CollationDataBuilder::clearContexts()",93957347613440,93957347613616],["icu_68::CollationDataBuilder::initForTailoring(icu_68::CollationData const*, UErrorCode&)",93957347614048,93957347614261],["icu_68::CollationDataBuilder::copyFromBaseCE32(int, unsigned int, signed char, UErrorCode&)",93957347615856,93957347617407],["icu_68::CollationDataBuilder::encodeExpansion(long const*, int, UErrorCode&)",93957347618576,93957347619026],["icu_68::CollationDataBuilder::optimize(icu_68::UnicodeSet const&, UErrorCode&)",93957347620608,93957347621023],["icu_68::enumRangeLeadValue(void const*, int, int, unsigned int)",93957347622784,93957347622840],["icu_68::CollationDataBuilder::buildContexts(UErrorCode&)",93957347624272,93957347624524],["icu_68::CollationDataBuilder::getCEs(icu_68::UnicodeString const&, icu_68::UnicodeString const&, long*, int)",93957347625536,93957347625712],["icu_68::CollationFastLatinBuilder::~CollationFastLatinBuilder()",93957347627904,93957347627993],["icu_68::CollationFastLatinBuilder::encodeUniqueCEs(UErrorCode&)",93957347629680,93957347630539],["icu_68::CollationFastLatinBuilder::getCEsFromCE32(icu_68::CollationData const&, int, unsigned int, UErrorCode&)",93957347631792,93957347632531],["icu_68::CollationFastLatinBuilder::encodeTwoCEs(long, long) const",93957347633936,93957347634334],["icu_68::CollationRootElements::findPrimary(unsigned int) const",93957347635088,93957347635234],["icu_68::CollationRootElements::getSecondaryAfter(int, unsigned int) const",93957347635904,93957347636021],["icu_68::RuleBasedTimeZone::copyRules(icu_68::UVector*)",93957347636288,93957347636551],["icu_68::RuleBasedTimeZone::~RuleBasedTimeZone()",93957347639280,93957347639402],["icu_68::RuleBasedTimeZone::getOffset(unsigned char, int, int, int, unsigned char, int, UErrorCode&) const",93957347640336,93957347640492],["icu_68::RuleBasedTimeZone::getOffsetFromLocal(double, int, int, int&, int&, UErrorCode&) const",93957347641152,93957347641193],["icu_68::RuleBasedTimeZone::findNext(double, signed char, double&, icu_68::TimeZoneRule*&, icu_68::TimeZoneRule*&) const",93957347642464,93957347643165],["icu_68::RuleBasedTimeZone::getPreviousTransition(double, signed char, icu_68::TimeZoneTransition&) const",93957347643920,93957347644115],["icu_68::RegionNameEnumeration::getDynamicClassID() const",93957347645088,93957347645101],["icu_68::Region::~Region()",93957347652528,93957347652600],["icu_68::RegionNameEnumeration::RegionNameEnumeration(icu_68::UVector*, UErrorCode&)",93957347653232,93957347653480],["icu_68::RegionNameEnumeration::~RegionNameEnumeration()",93957347653632,93957347653688],["icu_68::FormattedRelativeDateTime::~FormattedRelativeDateTime()",93957347656352,93957347656408],["void icu_68::SharedObject::copyPtr<icu_68::SharedNumberFormat>(icu_68::SharedNumberFormat const*, icu_68::SharedNumberFormat const*&)",93957347657312,93957347657368],["icu_68::RelativeDateTimeFormatter::formatNumericToValue(double, URelativeDateTimeUnit, UErrorCode&) const",93957347657968,93957347658007],["icu_68::(anonymous namespace)::RelDateTimeFmtDataSink::put(char const*, icu_68::ResourceValue&, signed char, UErrorCode&)",93957347659008,93957347662712],["icu_68::LocaleCacheKey<icu_68::RelativeDateTimeCacheData>::clone() const",93957347662896,93957347662990],["icu_68::RelativeDateFormat::RelativeDateFormat(UDateFormatStyle, UDateFormatStyle, icu_68::Locale const&, UErrorCode&)",93957347664112,93957347664733],["icu_68::RelativeDateFormat::clone() const",93957347665600,93957347665651],["icu_68::RelativeDateFormat::parse(icu_68::UnicodeString const&, icu_68::Calendar&, icu_68::ParsePosition&) const",93957347667520,93957347668911],["icu_68::RelativeDateFormat::toPatternTime(icu_68::UnicodeString&, UErrorCode&) const",93957347669136,93957347669203],["icu_68::RelativeDateFormat::initCapitalizationContextInfo(icu_68::Locale const&)",93957347669520,93957347669815],["icu_68::RuleBasedCollator::adoptTailoring(icu_68::CollationTailoring*, UErrorCode&)",93957347670336,93957347670562],["icu_68::RuleBasedCollator::clone() const",93957347670896,93957347671049],["icu_68::RuleBasedCollator::setLocales(icu_68::Locale const&, icu_68::Locale const&, icu_68::Locale const&)",93957347671776,93957347671833],["icu_68::RuleBasedCollator::getTailoredSet(UErrorCode&) const",93957347671984,93957347672222],["icu_68::RuleBasedCollator::getMaxVariable() const",93957347673312,93957347673336],["icu_68::RuleBasedCollator::setVariableTop(unsigned int, UErrorCode&)",93957347674256,93957347674560],["icu_68::RuleBasedCollator::doCompare(char16_t const*, int, char16_t const*, int, UErrorCode&) const",93957347675184,93957347677456],["icu_68::RuleBasedCollator::doCompare(unsigned char const*, int, unsigned char const*, int, UErrorCode&) const",93957347677888,93957347681065],["icu_68::(anonymous namespace)::FCDUTF16NFDIterator::~FCDUTF16NFDIterator()",93957347682336,93957347682378],["icu_68::RuleBasedCollator::getCollationKey(icu_68::UnicodeString const&, icu_68::CollationKey&, UErrorCode&) const",93957347684592,93957347684669],["icu_68::RuleBasedCollator::getSortKey(char16_t const*, int, unsigned char*, int) const",93957347685808,93957347686006],["icu_68::RuleBasedCollator::createCollationElementIterator(icu_68::UnicodeString const&) const",93957347690064,93957347690256],["icu_68::(anonymous namespace)::UTF8NFDIterator::nextRawCodePoint()",93957347690640,93957347690948],["icu_68::(anonymous namespace)::FCDUIterNFDIterator::~FCDUIterNFDIterator()",93957347691088,93957347691138],["icu_68::SortKeyByteSink::Append(char const*, int)",93957347691280,93957347691379],["icu_68::CollationCompare::compareUpToQuaternary(icu_68::CollationIterator&, icu_68::CollationIterator&, icu_68::CollationSettings const&, UErrorCode&)",93957347702304,93957347704176],["icu_68::SharedBreakIterator::~SharedBreakIterator()",93957347705408,93957347705456],["icu_68::SimpleTimeZone::SimpleTimeZone(int, icu_68::UnicodeString const&, signed char, signed char, signed char, int, icu_68::SimpleTimeZone::TimeMode, signed char, signed char, signed char, int, icu_68::SimpleTimeZone::TimeMode, int, UErrorCode&)",93957347705664,93957347705871],["icu_68::SimpleTimeZone::SimpleTimeZone(icu_68::SimpleTimeZone const&)",93957347706256,93957347706442],["icu_68::SimpleTimeZone::decodeEndRule(UErrorCode&)",93957347706720,93957347706915],["icu_68::SimpleTimeZone::compareToRule(signed char, signed char, signed char, signed char, signed char, int, int, icu_68::SimpleTimeZone::EMode, signed char, signed char, signed char, int)",93957347707888,93957347708555],["icu_68::SimpleTimeZone::getDSTSavings() const",93957347709264,93957347709273],["icu_68::SimpleTimeZone::getNextTransition(double, signed char, icu_68::TimeZoneTransition&) const",93957347709632,93957347710096],["icu_68::SimpleTimeZone::getTimeZoneRules(icu_68::InitialTimeZoneRule const*&, icu_68::TimeZoneRule const**, int&, UErrorCode&) const",93957347712464,93957347712641],["icu_68::freeSharedNumberFormatters(icu_68::SharedNumberFormat const**)",93957347712928,93957347712990],["icu_68::SimpleDateFormat::initialize(icu_68::Locale const&, UErrorCode&)",93957347716384,93957347716933],["icu_68::SimpleDateFormat::SimpleDateFormat(icu_68::Locale const&, UErrorCode&)",93957347719968,93957347720563],["icu_68::SimpleDateFormat::operator==(icu_68::Format const&) const",93957347721840,93957347722061],["icu_68::SimpleDateFormat::format(icu_68::Calendar&, icu_68::UnicodeString&, icu_68::FieldPositionIterator*, UErrorCode&) const",93957347723216,93957347723338],["icu_68::SimpleDateFormat::zeroPaddingNumber(icu_68::NumberFormat const*, icu_68::UnicodeString&, int, int, int) const",93957347730432,93957347731177],["icu_68::UnicodeString::replaceBetween(int, int, icu_68::UnicodeString const&)",93957347731536,93957347731572],["icu_68::SimpleDateFormat::subParse(icu_68::UnicodeString const&, int&, char16_t, int, signed char, signed char, signed char*, int&, icu_68::Calendar&, int, icu_68::MessageFormat*, UTimeZoneFormatTimeType*, int*) const",93957347735872,93957347744060],["icu_68::SimpleDateFormat::matchDayPeriodStrings(icu_68::UnicodeString const&, int, icu_68::UnicodeString const*, int, int&) const",93957347746560,93957347746699],["icu_68::SimpleDateFormat::countDigits(icu_68::UnicodeString const&, int, int) const",93957347748016,93957347748110],["icu_68::SimpleDateFormat::toLocalizedPattern(icu_68::UnicodeString&, UErrorCode&) const",93957347749104,93957347749245],["icu_68::SimpleDateFormat::adoptDateFormatSymbols(icu_68::DateFormatSymbols*)",93957347750368,93957347750430],["icu_68::SimpleDateFormat::setTimeZoneFormat(icu_68::TimeZoneFormat const&)",93957347750688,93957347750773],["icu_68::SimpleDateFormat::isFieldUnitIgnored(icu_68::UnicodeString const&, UCalendarDateFields)",93957347751408,93957347751778],["icu_68::MessageFormat::MessageFormat(icu_68::UnicodeString const&, icu_68::Locale const&, UErrorCode&)",93957347752576,93957347752817],["icu_68::MessageFormat::~MessageFormat()",93957347754016,93957347754044],["icu_68::MessageFormat::getLocale() const",93957347754640,93957347754653],["icu_68::MessageFormat::applyPattern(icu_68::UnicodeString const&, UMessagePatternApostropheMode, UParseError*, UErrorCode&)",93957347755904,93957347755995],["icu_68::MessageFormat::setFormats(icu_68::Format const**, int)",93957347756752,93957347757205],["icu_68::MessageFormat::getFormat(icu_68::UnicodeString const&, UErrorCode&)",93957347758368,93957347758811],["icu_68::MessageFormat::format(icu_68::Formattable const&, icu_68::UnicodeString&, icu_68::FieldPosition&, UErrorCode&) const",93957347760144,93957347760355],["icu_68::AppendableWrapper::append(icu_68::UnicodeString const&)",93957347764752,93957347764845],["icu_68::MessageFormat::getLiteralStringUntilNextArgument(int) const",93957347766560,93957347766799],["icu_68::MessageFormat::parse(icu_68::UnicodeString const&, icu_68::ParsePosition&, int&) const",93957347769712,93957347769753],["icu_68::MessageFormat::findKeyword(icu_68::UnicodeString const&, char16_t const* const*)",93957347771200,93957347771590],["icu_68::FormatNameEnumeration::snext(UErrorCode&)",93957347771824,93957347771864],["icu_68::MessageFormat::PluralSelectorProvider::~PluralSelectorProvider()",93957347772032,93957347772088],["icu_68::ChoiceFormat::parseArgument(icu_68::MessagePattern const&, int, icu_68::UnicodeString const&, icu_68::ParsePosition&)",93957347773312,93957347773611],["icu_68::number::impl::LocalizedNumberFormatterAsFormat::~LocalizedNumberFormatterAsFormat()",93957347774528,93957347774585],["icu_68::number::impl::LocalizedNumberFormatterAsFormat::format(icu_68::Formattable const&, icu_68::UnicodeString&, icu_68::FieldPosition&, UErrorCode&) const",93957347775088,93957347775503],["dayPeriodRulesCleanup_68",93957347776112,93957347776184],["icu_68::DayPeriodRules::getStartHourForDayPeriod(icu_68::DayPeriodRules::DayPeriod, UErrorCode&) const",93957347777200,93957347777864],["icu_68::DayPeriodRulesDataSink::put(char const*, icu_68::ResourceValue&, signed char, UErrorCode&)",93957347779120,93957347780654],["icu_68::DayPeriodRulesDataSink::parseHour(icu_68::UnicodeString const&, UErrorCode&)",93957347783344,93957347783540],["icu_68::smpdtfmt_cleanup()",93957347784464,93957347784526],["icu_68::CollationKey::reset()",93957347784720,93957347784743],["icu_68::StandardPlural::indexFromString(char const*, UErrorCode&)",93957347785456,93957347785502],["icu_68::StringSegment::adjustOffsetByCodePoint()",93957347785616,93957347785753],["icu_68::StringSegment::length() const",93957347785920,93957347785932],["icu_68::StringSegment::startsWith(int) const",93957347786144,93957347786315],["icu_68::StringSegment::getPrefixLengthInternal(icu_68::UnicodeString const&, bool)",93957347786736,93957347787098],["icu_68::TaiwanCalendar::clone() const",93957347787184,93957347787245],["icu_68::TaiwanCalendar::handleGetLimit(UCalendarDateFields, icu_68::Calendar::ELimitType) const",93957347787504,93957347787528],["icu_68::TimeZone::loadRule(UResourceBundle const*, icu_68::UnicodeString const&, UResourceBundle*, UErrorCode&)",93957347787968,93957347788130],["icu_68::TimeZone::TimeZone(icu_68::TimeZone const&)",93957347788496,93957347788524],["icu_68::TimeZone::createCustomTimeZone(icu_68::UnicodeString const&)",93957347788784,93957347789064],["icu_68::TimeZone::adoptDefault(icu_68::TimeZone*)",93957347789936,93957347790023],["icu_68::TZEnumeration::~TZEnumeration()",93957347790784,93957347790842],["icu_68::TimeZone::createEnumeration()",93957347791904,93957347792097],["icu_68::TimeZone::dereferOlsonLink(icu_68::UnicodeString const&)",93957347792976,93957347793211],["icu_68::TimeZone::getDisplayName(signed char, icu_68::TimeZone::EDisplayType, icu_68::Locale const&, icu_68::UnicodeString&) const",93957347793664,93957347794795],["icu_68::TimeZone::formatCustomID(int, int, int, signed char, icu_68::UnicodeString&)",93957347796304,93957347796859],["icu_68::TZEnumeration::clone() const",93957347797328,93957347797575],["icu_68::(anonymous namespace)::createSystemTimeZone(icu_68::UnicodeString const&, UErrorCode&)",93957347797712,93957347798028],["icu_68::GMTOffsetField::~GMTOffsetField()",93957347799680,93957347799711],["icu_68::TimeZoneFormat::TimeZoneFormat(icu_68::Locale const&, UErrorCode&)",93957347800016,93957347802094],["icu_68::TimeZoneFormat::initGMTOffsetPatterns(UErrorCode&)",93957347803312,93957347803633],["icu_68::TimeZoneFormat::~TimeZoneFormat()",93957347804896,93957347804924],["icu_68::TimeZoneFormat::parseOffsetPattern(icu_68::UnicodeString const&, icu_68::TimeZoneFormat::OffsetFields, UErrorCode&)",93957347805856,93957347807502],["icu_68::TimeZoneFormat::formatExemplarLocation(icu_68::TimeZone const&, icu_68::UnicodeString&) const",93957347809008,93957347809567],["icu_68::TimeZoneFormat::format(icu_68::Formattable const&, icu_68::UnicodeString&, icu_68::FieldPosition&, UErrorCode&) const",93957347809680,93957347810271],["icu_68::TimeZoneFormat::createTimeZoneForOffset(int) const",93957347815792,93957347815940],["icu_68::TimeZoneFormat::getTZDBTimeZoneNames(UErrorCode&) const",93957347816640,93957347816765],["icu_68::TimeZoneFormat::parseExemplarLocation(icu_68::UnicodeString const&, icu_68::ParsePosition&, icu_68::UnicodeString&) const",93957347817984,93957347818488],["icu_68::TimeZoneFormat::parseAsciiOffsetFields(icu_68::UnicodeString const&, icu_68::ParsePosition&, char16_t, icu_68::TimeZoneFormat::OffsetFields, icu_68::TimeZoneFormat::OffsetFields)",93957347820112,93957347820651],["icu_68::TimeZoneFormat::parseOffsetFields(icu_68::UnicodeString const&, int, signed char, int&) const",93957347822064,93957347822963],["icu_68::TimeZoneFormat::parseDefaultOffsetFields(icu_68::UnicodeString const&, int, char16_t, int&) const",93957347825760,93957347826642],["icu_68::GNameSearchHandler::~GNameSearchHandler()",93957347827136,93957347827184],["icu_68::TZGNCore::~TZGNCore()",93957347828928,93957347829073],["icu_68::comparePartialLocationKey(UElement, UElement)",93957347829440,93957347829498],["icu_68::TZGNCore::formatGenericNonLocationName(icu_68::TimeZone const&, UTimeZoneGenericNameType, double, icu_68::UnicodeString&) const",93957347830576,93957347832827],["icu_68::TZGNCore::getPartialLocationName(icu_68::UnicodeString const&, icu_68::UnicodeString const&, signed char, icu_68::UnicodeString const&)",93957347834080,93957347835131],["icu_68::TimeZoneGenericNames::~TimeZoneGenericNames()",93957347837024,93957347837087],["icu_68::TimeZoneGenericNames::operator==(icu_68::TimeZoneGenericNames const&) const",93957347838080,93957347838097],["icu_68::TimeZoneGenericNames::findBestMatch(icu_68::UnicodeString const&, int, unsigned int, icu_68::UnicodeString&, UTimeZoneFormatTimeType&, UErrorCode&) const",93957347838288,93957347838305],["icu_68::TimeZoneNamesDelegate::~TimeZoneNamesDelegate()",93957347839040,93957347839110],["icu_68::TimeZoneNamesDelegate::getAvailableMetaZoneIDs(UErrorCode&) const",93957347839408,93957347839429],["icu_68::TimeZoneNamesDelegate::getMetaZoneDisplayName(icu_68::UnicodeString const&, UTimeZoneNameType, icu_68::UnicodeString&) const",93957347839536,93957347839557],["icu_68::TimeZoneNamesDelegate::getDisplayNames(icu_68::UnicodeString const&, UTimeZoneNameType const*, int, double, icu_68::UnicodeString*, UErrorCode&) const",93957347839664,93957347839685],["icu_68::TimeZoneNames::getDisplayName(icu_68::UnicodeString const&, UTimeZoneNameType, double, icu_68::UnicodeString&) const",93957347839840,93957347840068],["icu_68::TimeZoneNames::MatchInfoCollection::~MatchInfoCollection()",93957347840416,93957347840464],["icu_68::TimeZoneNames::MatchInfoCollection::getNameTypeAt(int) const",93957347841184,93957347841210],["icu_68::CharacterNode::addValue(void*, void (*)(void*), UErrorCode&)",93957347841440,93957347841662],["icu_68::ZNStringPool::get(icu_68::UnicodeString const&, UErrorCode&)",93957347841968,93957347842007],["icu_68::TextTrieMap::buildTrie(UErrorCode&)",93957347843040,93957347843291],["icu_68::ZNStringPool::~ZNStringPool()",93957347844176,93957347844248],["(anonymous namespace)::AvailableLocalesStringEnumeration::reset(UErrorCode&)",93957347844656,93957347844669],["icu_68::ZNameSearchHandler::~ZNameSearchHandler()",93957347844832,93957347844880],["icu_68::deleteZNames(void*)",93957347846032,93957347846093],["icu_68::TimeZoneNamesImpl::~TimeZoneNamesImpl()",93957347847712,93957347847740],["icu_68::TimeZoneNamesImpl::getAvailableMetaZoneIDs(icu_68::UnicodeString const&, UErrorCode&) const",93957347848096,93957347848112],["icu_68::TimeZoneNamesImpl::getMetaZoneDisplayName(icu_68::UnicodeString const&, UTimeZoneNameType, icu_68::UnicodeString&) const",93957347848624,93957347848803],["icu_68::ZNames::createTimeZoneAndPutInCache(UHashtable*, char16_t const**, icu_68::UnicodeString const&, UErrorCode&)",93957347849552,93957347849957],["icu_68::TimeZoneNamesImpl::internalLoadAllDisplayNames(UErrorCode&)",93957347851104,93957347851668],["icu_68::TimeZoneNamesImpl::getDisplayNames(icu_68::UnicodeString const&, UTimeZoneNameType const*, int, double, icu_68::UnicodeString*, UErrorCode&) const",93957347851872,93957347852497],["icu_68::TZDBNames::~TZDBNames()",93957347854304,93957347854417],["icu_68::TZDBNameSearchHandler::handleMatch(int, icu_68::CharacterNode const*, UErrorCode&)",93957347855168,93957347855834],["icu_68::TZDBTimeZoneNames::clone() const",93957347856256,93957347856311],["icu_68::TZDBTimeZoneNames::find(icu_68::UnicodeString const&, int, unsigned int, UErrorCode&) const",93957347857328,93957347858237],["icu_68::deleteZNamesLoader(void*)",93957347859504,93957347859534],["icu_68::TimeZoneNamesImpl::ZoneStringsLoader::consumeNamesTable(char const*, icu_68::ResourceValue&, signed char, UErrorCode&)",93957347859696,93957347860484],["icu_68::TimeZoneRule::isEquivalentTo(icu_68::TimeZoneRule const&) const",93957347860752,93957347860822],["icu_68::InitialTimeZoneRule::clone() const",93957347860992,93957347861082],["icu_68::AnnualTimeZoneRule::AnnualTimeZoneRule(icu_68::UnicodeString const&, int, int, icu_68::DateTimeRule*, int, int)",93957347861248,93957347861343],["icu_68::AnnualTimeZoneRule::operator==(icu_68::TimeZoneRule const&) const",93957347861664,93957347861765],["icu_68::AnnualTimeZoneRule::getFirstStart(int, int, double&) const",93957347862608,93957347862628],["icu_68::TimeArrayTimeZoneRule::getDynamicClassID() const",93957347863184,93957347863197],["icu_68::TimeArrayTimeZoneRule::~TimeArrayTimeZoneRule()",93957347863648,93957347863731],["icu_68::TimeArrayTimeZoneRule::getFirstStart(int, int, double&) const",93957347864176,93957347864242],["compareDates(void const*, void const*, void const*)",93957347864592,93957347864635],["icu_68::TimeZoneTransition::~TimeZoneTransition()",93957347864752,93957347864815],["icu_68::TimeZoneTransition::setTo(icu_68::TimeZoneRule const&)",93957347865056,93957347865102],["icu_68::TimeZoneTransition::getTime() const",93957347865216,93957347865227],["i18n_cleanup()",93957347866016,93957347866089],["icu_68::CollationLoader::getCacheEntry(UErrorCode&)",93957347867056,93957347867358],["icu_68::CollationLoader::loadFromCollations(UErrorCode&)",93957347869296,93957347870389],["icu_68::LocaleCacheKey<icu_68::CollationCacheEntry>::~LocaleCacheKey()",93957347871776,93957347871818],["(anonymous namespace)::KeywordsSink::~KeywordsSink()",93957347872256,93957347872306],["icu_68::LocaleCacheKey<icu_68::CollationCacheEntry>::clone() const",93957347873200,93957347873294],["icu_68::UIterCollationIterator::handleGetTrailSurrogate()",93957347873456,93957347873513],["icu_68::UIterCollationIterator::backwardNumCodePoints(int, UErrorCode&)",93957347873632,93957347873679],["icu_68::FCDUIterCollationIterator::getOffset() const",93957347873856,93957347873921],["icu_68::FCDUIterCollationIterator::nextCodePoint(UErrorCode&)",93957347875488,93957347876098],["icu_68::FCDUIterCollationIterator::backwardNumCodePoints(int, UErrorCode&)",93957347877664,93957347877732],["icu_68::units::ComplexUnitsConverter::ComplexUnitsConverter(icu_68::MeasureUnitImpl const&, icu_68::MeasureUnitImpl const&, icu_68::units::ConversionRates const&, UErrorCode&)::$_0::__invoke(void const*, void const*, void const*)",93957347880864,93957347881301],["icu_68::units::Factor::substituteConstants()",93957347882048,93957347882407],["icu_68::units::extractConvertibility(icu_68::MeasureUnitImpl const&, icu_68::MeasureUnitImpl const&, icu_68::units::ConversionRates const&, UErrorCode&)",93957347884544,93957347885628],["icu_68::units::UnitConverter::convert(double) const",93957347887312,93957347887395],["icu_68::units::getUnitCategory(char const*, UErrorCode&)",93957347889584,93957347889870],["icu_68::units::UnitPreferences::getPreferencesFor(icu_68::StringPiece, icu_68::StringPiece, icu_68::StringPiece, icu_68::units::UnitPreference const* const*&, int&, UErrorCode&) const",93957347890320,93957347891919],["icu_68::units::UnitPreferenceMetadata* icu_68::MemoryPool<icu_68::units::UnitPreferenceMetadata, 8>::create<char const*&, char const*&, char const*&, int&, int&, UErrorCode&>(char const*&, char const*&, char const*&, int&, int&, UErrorCode&)",93957347895744,93957347896313],["icu_68::units::UnitsRouter::route(double, icu_68::number::impl::RoundingImpl*, UErrorCode&) const",93957347899072,93957347899976],["icu_68::UTF16CollationIterator::resetToOffset(int)",93957347900656,93957347900699],["icu_68::UTF16CollationIterator::foundNULTerminator()",93957347900896,93957347900943],["icu_68::UTF16CollationIterator::backwardNumCodePoints(int, UErrorCode&)",93957347901328,93957347901445],["icu_68::FCDUTF16CollationIterator::resetToOffset(int)",93957347901760,93957347901838],["icu_68::FCDUTF16CollationIterator::foundNULTerminator()",93957347903072,93957347903126],["icu_68::FCDUTF16CollationIterator::forwardNumCodePoints(int, UErrorCode&)",93957347904800,93957347904868],["icu_68::UTF8CollationIterator::handleNextCE32(int&, UErrorCode&)",93957347905008,93957347905537],["icu_68::UTF8CollationIterator::forwardNumCodePoints(int, UErrorCode&)",93957347906032,93957347906420],["icu_68::FCDUTF8CollationIterator::resetToOffset(int)",93957347906640,93957347906687],["icu_68::FCDUTF8CollationIterator::nextSegment(UErrorCode&)",93957347908288,93957347909643],["icu_68::FCDUTF8CollationIterator::previousCodePoint(UErrorCode&)",93957347911008,93957347911760],["icu_68::ZoneMeta::getCanonicalCLDRID(icu_68::UnicodeString const&, UErrorCode&)",93957347912752,93957347913875],["icu_68::ZoneMeta::getCanonicalCLDRID(icu_68::TimeZone const&)",93957347914096,93957347914291],["icu_68::ZoneMeta::createMetazoneMappings(icu_68::UnicodeString const&)",93957347916192,93957347917233],["icu_68::initAvailableMetaZoneIDs()",93957347918592,93957347919462],["icu_68::ZoneMeta::getShortID(icu_68::TimeZone const&)",93957347920368,93957347920440],["icu_68::BreakIterator::buildInstance(icu_68::Locale const&, char const*, UErrorCode&)",93957347921056,93957347922193],["icu_68::BreakIterator::createCharacterInstance(icu_68::Locale const&, UErrorCode&)",93957347922752,93957347922767],["icu_68::BreakIterator::operator=(icu_68::BreakIterator const&)",93957347922912,93957347922983],["icu_68::ICUBreakIteratorFactory::handleCreate(icu_68::Locale const&, int, icu_68::ICUService const*, UErrorCode&) const",93957347923920,93957347923938],["icu_68::ByteSinkUtil::appendChange(int, char16_t const*, int, icu_68::ByteSink&, icu_68::Edits*, UErrorCode&)",93957347924480,93957347925243],["icu_68::CharStringByteSink::CharStringByteSink(icu_68::CharString*)",93957347925648,93957347925668],["icu_68::CheckedArrayByteSink::CheckedArrayByteSink(char*, int)",93957347925872,93957347925914],["icu_68::BytesTrieBuilder::BytesTrieBuilder(UErrorCode&)",93957347926144,93957347926270],["icu_68::BytesTrieBuilder::buildBytes(UStringTrieBuildOption, UErrorCode&)",93957347926832,93957347927339],["icu_68::BytesTrieBuilder::getElementUnit(int, int) const",93957347927632,93957347927675],["icu_68::BytesTrieBuilder::skipElementsBySomeUnits(int, int, int) const",93957347928016,93957347928121],["icu_68::BytesTrieBuilder::write(char const*, int)",93957347928352,93957347928565],["icu_68::BytesTrieBuilder::writeValueAndFinal(int, signed char)",93957347929056,93957347929274],["icu_68::BytesTrie::branchNext(unsigned char const*, int, int)",93957347929680,93957347930344],["icu_68::CanonicalIterator::CanonicalIterator(icu_68::UnicodeString const&, UErrorCode&)",93957347930832,93957347931010],["icu_68::CanonicalIterator::~CanonicalIterator()",93957347932640,93957347932704],["icu_68::CanonicalIterator::permute(icu_68::UnicodeString&, signed char, icu_68::Hashtable*, UErrorCode&)",93957347935040,93957347935986],["icu_68::CharString::operator=(icu_68::CharString&&)",93957347938816,93957347938926],["icu_68::CharString::lastIndexOf(char) const",93957347939440,93957347939481],["icu_68::CharString::append(icu_68::CharString const&, UErrorCode&)",93957347939968,93957347939990],["icu_68::CharString::appendInvariantChars(char16_t const*, int, UErrorCode&)",93957347940352,93957347940489],["uprv_free_68",93957347940800,93957347940852],["T_CString_toLowerCase_68",93957347940960,93957347941010],["uprv_strnicmp_68",93957347941424,93957347941561],["icu_68::Edits::addUnchanged(int)",93957347941696,93957347942276],["icu_68::Edits::Iterator::Iterator(unsigned short const*, int, signed char, signed char)",93957347943440,93957347943488],["icu_68::SimpleFilteredSentenceBreakData::~SimpleFilteredSentenceBreakData()",93957347944512,93957347944591],["icu_68::SimpleFilteredSentenceBreakIterator::~SimpleFilteredSentenceBreakIterator()",93957347945072,93957347945191],["icu_68::SimpleFilteredSentenceBreakIterator::first()",93957347946176,93957347946194],["icu_68::SimpleFilteredSentenceBreakIterator::next(int)",93957347946800,93957347946841],["icu_68::SimpleFilteredBreakIteratorBuilder::~SimpleFilteredBreakIteratorBuilder()",93957347946976,93957347947026],["icu_68::SimpleFilteredBreakIteratorBuilder::build(icu_68::BreakIterator*, UErrorCode&)",93957347947856,93957347949783],["icu_68::SimpleFilteredSentenceBreakIterator::getUText(UText*, UErrorCode&) const",93957347950048,93957347950069],["icu_68::SimpleFilteredSentenceBreakIterator::current() const",93957347950176,93957347950194],["icu_68::LoadedNormalizer2Impl::~LoadedNormalizer2Impl()",93957347950352,93957347950411],["icu_68::Norm2AllModes::getNFKCInstance(UErrorCode&)",93957347950800,93957347950908],["icu_68::Normalizer2::getInstance(char const*, char const*, UNormalization2Mode, UErrorCode&)",93957347951472,93957347952128],["icu_68::Normalizer2Factory::getInstance(UNormalizationMode, UErrorCode&)",93957347952368,93957347952667],["icu_68::LocaleBuilder::LocaleBuilder()",93957347953008,93957347953043],["icu_68::LocaleBuilder::setLanguage(icu_68::StringPiece)",93957347953744,93957347953846],["icu_68::LocaleBuilder::setLanguageTag(icu_68::StringPiece)",93957347954448,93957347954642],["icu_68::LocaleBuilder::build(UErrorCode&)",93957347955776,93957347956720],["icu_68::LocaleMatcher::Builder::build(UErrorCode&) const",93957347957072,93957347957112],["icu_68::(anonymous namespace)::compareLSRs(UElement, UElement)",93957347960000,93957347960010],["icu_68::LocaleMatcher::getBestSuppIndex(icu_68::LSR, icu_68::LocaleLsrIterator*, UErrorCode&) const",93957347960592,93957347961368],["(anonymous namespace)::uloc_cleanup()",93957347962144,93957347962226],["(anonymous namespace)::AvailableLocalesStringEnumeration::next(int*, UErrorCode&)",93957347962912,93957347963030],["icu_68::LocaleBased::setLocaleIDs(icu_68::Locale const&, icu_68::Locale const&)",93957347963264,93957347963306],["uloc_getDisplayName_68",93957347964176,93957347968259],["icu_68::(anonymous namespace)::cleanup()",93957347969440,93957347969503],["icu_68::LocaleDistance::getDesSuppScriptDistance(icu_68::BytesTrie&, unsigned long, char const*, char const*)",93957347971440,93957347971777],["icu_68::LocaleDisplayNamesImpl::LocaleDisplayNamesImpl(icu_68::Locale const&, UDialectHandling)",93957347972768,93957347973157],["icu_68::LocaleDisplayNamesImpl::~LocaleDisplayNamesImpl()",93957347976096,93957347976124],["icu_68::LocaleDisplayNamesImpl::localeDisplayName(icu_68::Locale const&, icu_68::UnicodeString&) const",93957347976384,93957347980081],["icu_68::LocaleDisplayNamesImpl::regionDisplayName(char const*, icu_68::UnicodeString&, signed char) const",93957347981184,93957347981591],["icu_68::LocaleDisplayNamesImpl::keyValueDisplayName(char const*, char const*, icu_68::UnicodeString&, signed char) const",93957347982224,93957347982926],["icu_68::LocaleDisplayNamesImpl::scriptDisplayName(UScriptCode, icu_68::UnicodeString&) const",93957347983584,93957347983624],["icu_68::LocaleDisplayNamesImpl::keyValueDisplayName(char const*, char const*, icu_68::UnicodeString&) const",93957347983680,93957347983693],["icu_68::locale_set_default_internal(char const*, UErrorCode&)",93957347984384,93957347984935],["icu_68::Locale::getDefault()",93957347986784,93957347986863],["icu_68::Locale::Locale()",93957347987072,93957347987115],["icu_68::Locale::operator=(icu_68::Locale const&)",93957347988240,93957347988530],["icu_68::Locale::operator==(icu_68::Locale const&) const",93957347988880,93957347988907],["icu_68::Locale::setDefault(icu_68::Locale const&, UErrorCode&)",93957347999680,93957347999701],["icu_68::Locale::forLanguageTag(icu_68::StringPiece, UErrorCode&)",93957348000384,93957348000830],["icu_68::Locale::getRoot()",93957348001280,93957348001306],["icu_68::Locale::createKeywords(UErrorCode&) const",93957348004928,93957348005260],["icu_68::Locale::getUnicodeKeywordValue(icu_68::StringPiece, icu_68::ByteSink&, UErrorCode&) const",93957348005728,93957348006340],["icu_68::KeywordEnumeration::clone() const",93957348007008,93957348007257],["icu_68::KeywordEnumeration::reset(UErrorCode&)",93957348007504,93957348007521],["icu_68::(anonymous namespace)::AliasReplacer::outputToString(icu_68::CharString&, UErrorCode)::$_12::__invoke(UElement, UElement)",93957348009936,93957348009947],["_ulocimp_addLikelySubtags(char const*, icu_68::ByteSink&, UErrorCode*)",93957348010064,93957348010617],["createLikelySubtagsString(char const*, int, char const*, int, char const*, int, char const*, int, icu_68::ByteSink&, UErrorCode*)",93957348014864,93957348017045],["icu_68::XLikelySubtagsData::load(UErrorCode&)",93957348018816,93957348022083],["icu_68::XLikelySubtags::XLikelySubtags(icu_68::XLikelySubtagsData&)",93957348022576,93957348023026],["icu_68::XLikelySubtags::maximize(char const*, char const*, char const*) const",93957348023984,93957348024959],["icu_68::XLikelySubtagsData::readStrings(icu_68::ResourceTable const&, char const*, icu_68::ResourceValue&, icu_68::LocalMemory<int>&, int&, UErrorCode&)",93957348025952,93957348026454],["icu_68::LocaleUtility::initNameFromLocale(icu_68::Locale const&, icu_68::UnicodeString&)",93957348028448,93957348028587],["icu_68::LSR::indexForRegion(char const*)",93957348030128,93957348030245],["icu_68::LSR::operator==(icu_68::LSR const&) const",93957348030496,93957348030590],["icu_68::MessagePattern::MessagePattern(icu_68::MessagePattern const&)",93957348031056,93957348031227],["icu_68::MessagePattern::~MessagePattern()",93957348032016,93957348032044],["icu_68::MessagePattern::parsePluralOrSelectStyle(UMessagePatternArgType, int, int, UParseError*, UErrorCode&)",93957348034528,93957348036402],["icu_68::MessagePattern::getPluralOffset(int) const",93957348037056,93957348037138],["icu_68::MessagePattern::skipWhiteSpace(int)",93957348039664,93957348039753],["icu_68::MessagePattern::isOrdinal(int)",93957348040912,93957348041352],["icu_68::MessageImpl::appendReducedApostrophes(icu_68::UnicodeString const&, int, int, icu_68::UnicodeString&)",93957348043056,93957348043312],["icu_68::Norm2AllModes::~Norm2AllModes()",93957348043888,93957348043956],["icu_68::Normalizer2::getNFCInstance(UErrorCode&)",93957348044464,93957348044600],["u_getCombiningClass_68",93957348045040,93957348045209],["icu_68::Normalizer2WithImpl::append(icu_68::UnicodeString&, icu_68::UnicodeString const&, UErrorCode&) const",93957348045776,93957348045791],["icu_68::Normalizer2WithImpl::getCombiningClass(int) const",93957348046160,93957348046322],["icu_68::FCDNormalizer2::hasBoundaryBefore(int) const",93957348046704,93957348046718],["icu_68::DecomposeNormalizer2::normalizeAndAppend(char16_t const*, char16_t const*, signed char, icu_68::UnicodeString&, icu_68::ReorderingBuffer&, UErrorCode&) const",93957348046912,93957348046926],["icu_68::ComposeNormalizer2::isNormalized(icu_68::UnicodeString const&, UErrorCode&) const",93957348047264,93957348047643],["icu_68::ComposeNormalizer2::hasBoundaryAfter(int) const",93957348048016,93957348048208],["icu_68::ComposeNormalizer2::spanQuickCheckYes(char16_t const*, char16_t const*, UErrorCode&) const",93957348048496,93957348048520],["icu_68::FCDNormalizer2::normalizeAndAppend(char16_t const*, char16_t const*, signed char, icu_68::UnicodeString&, icu_68::ReorderingBuffer&, UErrorCode&) const",93957348048784,93957348048798],["icu_68::NoopNormalizer2::normalizeSecondAndAppend(icu_68::UnicodeString&, icu_68::UnicodeString const&, UErrorCode&) const",93957348049024,93957348049091],["icu_68::uprv_normalizer2_cleanup()",93957348049168,93957348049310],["icu_68::ReorderingBuffer::equals(unsigned char const*, unsigned char const*) const",93957348050240,93957348050566],["icu_68::ReorderingBuffer::appendZeroCC(char16_t const*, char16_t const*, UErrorCode&)",93957348052736,93957348053016],["icu_68::Normalizer2Impl::addPropertyStarts(USetAdder const*, UErrorCode&) const",93957348053344,93957348053851],["icu_68::Normalizer2Impl::decompose(icu_68::UnicodeString const&, icu_68::UnicodeString&, UErrorCode&) const",93957348054240,93957348054518],["icu_68::Normalizer2Impl::decomposeShort(char16_t const*, char16_t const*, signed char, signed char, icu_68::ReorderingBuffer&, UErrorCode&) const",93957348056096,93957348056588],["icu_68::Normalizer2Impl::decomposeAndAppend(char16_t const*, char16_t const*, signed char, icu_68::UnicodeString&, icu_68::ReorderingBuffer&, UErrorCode&) const",93957348059728,93957348060343],["icu_68::Normalizer2Impl::recompose(icu_68::ReorderingBuffer&, int, signed char) const",93957348061168,93957348063582],["icu_68::Normalizer2Impl::hasCompBoundaryAfter(char16_t const*, char16_t const*, signed char) const",93957348067328,93957348067568],["icu_68::Normalizer2Impl::findNextCompBoundary(char16_t const*, char16_t const*, signed char) const",93957348069872,93957348070219],["icu_68::Normalizer2Impl::getFCD16FromNormData(int) const",93957348075552,93957348075906],["icu_68::Normalizer2Impl::findPreviousFCDBoundary(char16_t const*, char16_t const*) const",93957348078112,93957348078615],["icu_68::Normalizer2Impl::isCanonSegmentStarter(int) const",93957348080128,93957348080152],["icu_68::PatternProps::skipWhiteSpace(char16_t const*, int)",93957348080624,93957348080732],["icu_68::PatternProps::skipIdentifier(char16_t const*, int)",93957348081472,93957348081650],["u_getPropertyName_68",93957348082672,93957348082939],["uscript_getName_68",93957348083168,93957348083190],["uprv_isInfinite_68",93957348083376,93957348083416],["uprv_floor_68",93957348083520,93957348083530],["uprv_pow10_68",93957348083600,93957348083622],["uprv_log_68",93957348083760,93957348083770],["uprv_tzname_68",93957348083840,93957348084473],["putil_cleanup()",93957348086192,93957348086391],["TimeZoneDataDirInitFn(UErrorCode&)",93957348086656,93957348086838],["icu_68::RuleBasedBreakIterator::init(UErrorCode&)",93957348087696,93957348087954],["icu_68::RuleBasedBreakIterator::~RuleBasedBreakIterator()",93957348088912,93957348088940],["icu_68::RuleBasedBreakIterator::setText(UText*, UErrorCode&)",93957348089360,93957348089578],["icu_68::RuleBasedBreakIterator::setText(icu_68::UnicodeString const&)",93957348089808,93957348089946],["icu_68::RuleBasedBreakIterator::next(int)",93957348090208,93957348090296],["icu_68::RuleBasedBreakIterator::preceding(int)",93957348090608,93957348090740],["icu_68::RuleBasedBreakIterator::handleSafePrevious(int)",93957348094512,93957348096509],["icu_68::RuleBasedBreakIterator::createBufferClone(void*, int&, UErrorCode&)",93957348096816,93957348096878],["icu_68::LanguageBreakEngine::LanguageBreakEngine()",93957348097728,93957348097744],["icu_68::UnhandledEngine::handles(int) const",93957348097920,93957348097949],["icu_68::ICULanguageBreakFactory::~ICULanguageBreakFactory()",93957348098224,93957348098256],["icu_68::ICULanguageBreakFactory::loadDictionaryMatcherFor(UScriptCode)",93957348098928,93957348099741],["icu_68::DictionaryBreakEngine::setCharacters(icu_68::UnicodeSet const&)",93957348100016,93957348100051],["icu_68::ThaiBreakEngine::~ThaiBreakEngine()",93957348101040,93957348101068],["icu_68::LaoBreakEngine::~LaoBreakEngine()",93957348103792,93957348103918],["icu_68::BurmeseBreakEngine::~BurmeseBreakEngine()",93957348106080,93957348106206],["icu_68::KhmerBreakEngine::divideUpDictionaryRange(UText*, int, int, icu_68::UVector32&) const",93957348107024,93957348108478],["icu_68::CjkBreakEngine::divideUpDictionaryRange(UText*, int, int, icu_68::UVector32&) const",93957348109632,93957348114141],["icu_68::BytesDictionaryMatcher::~BytesDictionaryMatcher()",93957348114736,93957348114760],["icu_68::RuleBasedBreakIterator::DictionaryCache::~DictionaryCache()",93957348115408,93957348115422],["icu_68::RuleBasedBreakIterator::BreakCache::BreakCache(icu_68::RuleBasedBreakIterator*, UErrorCode&)",93957348116288,93957348116356],["icu_68::RuleBasedBreakIterator::BreakCache::current()",93957348116496,93957348116551],["icu_68::RuleBasedBreakIterator::BreakCache::preceding(int, UErrorCode&)",93957348117760,93957348118136],["icu_68::RuleBasedBreakIterator::BreakCache::populatePreceding(UErrorCode&)",93957348119072,93957348120608],["icu_68::RBBIDataWrapper::hashCode()",93957348121120,93957348121132],["icu_68::FileTracer::traceOpen(char const*, char const*, char const*)",93957348121280,93957348121353],["icu_68::StringCharacterIterator::~StringCharacterIterator()",93957348121952,93957348121994],["icu_68::StringCharacterIterator::clone() const",93957348122336,93957348122446],["icu_68::ICUServiceKey::~ICUServiceKey()",93957348122624,93957348122666],["icu_68::ICUServiceKey::currentDescriptor(icu_68::UnicodeString&) const",93957348122800,93957348122869],["icu_68::SimpleFactory::~SimpleFactory()",93957348123104,93957348123161],["icu_68::SimpleFactory::getDisplayName(icu_68::UnicodeString const&, icu_68::Locale const&, icu_68::UnicodeString&) const",93957348123616,93957348123746],["icu_68::ICUService::getKey(icu_68::ICUServiceKey&, UErrorCode&) const",93957348123952,93957348123971],["icu_68::ICUService::getVisibleIDs(icu_68::UVector&, UErrorCode&) const",93957348126160,93957348126175],["icu_68::ICUService::createSimpleFactory(icu_68::UObject*, icu_68::UnicodeString const&, signed char, UErrorCode&)",93957348127056,93957348127167],["icu_68::ICUService::reInitializeFactories()",93957348127648,93957348127669],["icu_68::ICUService::clearCaches()",93957348127824,93957348127967],["icu_68::LocaleKeyFactory::~LocaleKeyFactory()",93957348128128,93957348128170],["icu_68::LocaleKeyFactory::handlesKey(icu_68::ICUServiceKey const&, UErrorCode&) const",93957348128528,93957348128696],["icu_68::LocaleKeyFactory::getDisplayName(icu_68::UnicodeString const&, icu_68::Locale const&, icu_68::UnicodeString&) const",93957348128928,93957348129168],["icu_68::ICULocaleService::ICULocaleService(icu_68::UnicodeString const&)",93957348129184,93957348129261],["icu_68::ICULocaleService::get(icu_68::Locale const&, int, icu_68::Locale*, UErrorCode&) const",93957348129328,93957348129695],["icu_68::ICULocaleService::get(icu_68::Locale const&, icu_68::Locale*, UErrorCode&) const",93957348129904,93957348129925],["icu_68::ICULocaleService::registerInstance(icu_68::UObject*, icu_68::Locale const&, UErrorCode&)",93957348130208,93957348130236],["icu_68::ICULocaleService::registerInstance(icu_68::UObject*, icu_68::Locale const&, int, int, UErrorCode&)",93957348130272,93957348130412],["icu_68::ServiceEnumeration::~ServiceEnumeration()",93957348130464,93957348130517],["icu_68::ICULocaleService::getAvailableLocales() const",93957348130544,93957348130554],["icu_68::ICULocaleService::validateFallbackLocale() const",93957348130736,93957348130855],["icu_68::ICULocaleService::createKey(icu_68::UnicodeString const*, int, UErrorCode&) const",93957348130912,93957348130963],["icu_68::ServiceEnumeration::count(UErrorCode&) const",93957348131072,93957348131145],["icu_68::ServiceEnumeration::reset(UErrorCode&)",93957348131264,93957348131349],["icu_68::LocaleKey::createWithCanonicalFallback(icu_68::UnicodeString const*, icu_68::UnicodeString const*, UErrorCode&)",93957348131600,93957348131786],["icu_68::LocaleKey::LocaleKey(icu_68::UnicodeString const&, icu_68::UnicodeString const&, icu_68::UnicodeString const*, int)",93957348131984,93957348132256],["icu_68::LocaleKey::~LocaleKey()",93957348132336,93957348132410],["icu_68::LocaleKey::canonicalID(icu_68::UnicodeString&) const",93957348132672,93957348132711],["icu_68::LocaleKey::currentDescriptor(icu_68::UnicodeString&) const",93957348132784,93957348132918],["icu_68::LocaleKey::currentLocale(icu_68::Locale&) const",93957348132944,93957348132961],["icu_68::LocaleKey::isFallbackOf(icu_68::UnicodeString const&) const",93957348133200,93957348133483],["icu_68::ICUNotifier::ICUNotifier()",93957348133504,93957348133528],["icu_68::ICUNotifier::addListener(icu_68::EventListener const*, UErrorCode&)",93957348133616,93957348133870],["icu_68::ICUNotifier::notifyChanged()",93957348134080,93957348134224],["icu_68::ICUResourceBundleFactory::ICUResourceBundleFactory(icu_68::UnicodeString const&)",93957348134288,93957348134337],["icu_68::ICUResourceBundleFactory::~ICUResourceBundleFactory()",93957348134400,93957348134450],["icu_68::ICUResourceBundleFactory::handleCreate(icu_68::Locale const&, int, icu_68::ICUService const*, UErrorCode&) const",93957348134496,93957348134662],["icu_68::ResourceBundle::getDynamicClassID() const",93957348134688,93957348134701],["icu_68::ResourceBundle::~ResourceBundle()",93957348134768,93957348134830],["icu_68::SimpleLocaleKeyFactory::SimpleLocaleKeyFactory(icu_68::UObject*, icu_68::Locale const&, int, int)",93957348134912,93957348135005],["icu_68::SimpleLocaleKeyFactory::~SimpleLocaleKeyFactory()",93957348135088,93957348135161],["icu_68::SimpleLocaleKeyFactory::updateVisibleIDs(icu_68::Hashtable&, UErrorCode&) const",93957348135472,93957348135590],["icu_68::SharedObject::addRef() const",93957348135616,93957348135627],["icu_68::SharedObject::deleteIfZeroRefCount() const",93957348135680,93957348135712],["icu_68::SimpleFormatter::applyPatternMinMaxArguments(icu_68::UnicodeString const&, int, int, UErrorCode&)",93957348135728,93957348136613],["icu_68::SimpleFormatter::format(icu_68::UnicodeString const&, icu_68::UnicodeString const&, icu_68::UnicodeString&, UErrorCode&) const",93957348137008,93957348137384],["icu_68::SimpleFormatter::formatAndReplace(icu_68::UnicodeString const* const*, int, icu_68::UnicodeString&, int*, int, UErrorCode&) const",93957348137792,93957348138305],["icu_68::unisets::get(icu_68::unisets::Key)",93957348138608,93957348140051],["(anonymous namespace)::cleanupNumberParseUniSets()",93957348140208,93957348140341],["(anonymous namespace)::ParseDataSink::put(char const*, icu_68::ResourceValue&, signed char, UErrorCode&)",93957348140512,93957348142473],["icu_68::StringPiece::StringPiece(char const*)",93957348142560,93957348142599],["icu_68::StringPiece::compare(icu_68::StringPiece)",93957348142672,93957348142761],["icu_68::StringTrieBuilder::StringTrieBuilder()",93957348142832,93957348142856],["icu_68::StringTrieBuilder::build(UStringTrieBuildOption, int, UErrorCode&)",93957348142928,93957348143126],["icu_68::StringTrieBuilder::makeNode(int, int, int, UErrorCode&)",93957348143648,93957348144686],["icu_68::StringTrieBuilder::registerFinalValue(int, UErrorCode&)",93957348145488,93957348145757],["icu_68::StringTrieBuilder::Node::markRightEdgesFirst(int)",93957348147136,93957348147155],["icu_68::StringTrieBuilder::FinalValueNode::write(icu_68::StringTrieBuilder&)",93957348147248,93957348147290],["icu_68::StringTrieBuilder::IntermediateValueNode::markRightEdgesFirst(int)",93957348147392,93957348147431],["icu_68::StringTrieBuilder::BranchHeadNode::operator==(icu_68::StringTrieBuilder::Node const&) const",93957348147504,93957348147604],["icu_68::StringTrieBuilder::ListBranchNode::operator==(icu_68::StringTrieBuilder::Node const&) const",93957348147664,93957348147782],["icu_68::StringTrieBuilder::ListBranchNode::write(icu_68::StringTrieBuilder&)",93957348147904,93957348148206],["icu_68::StringTrieBuilder::SplitBranchNode::markRightEdgesFirst(int)",93957348148304,93957348148359],["icu_68::StringTrieBuilder::BranchHeadNode::write(icu_68::StringTrieBuilder&)",93957348148480,93957348148602],["subQuickSort(char*, int, int, int, int (*)(void const*, void const*, void const*), void const*, void*, void*)",93957348149552,93957348150699],["_enumPropertyStartsRange(void const*, int, int, unsigned int)",93957348150752,93957348150769],["ucase_addCaseClosure_68",93957348150800,93957348151807],["ucase_getType_68",93957348152176,93957348152327],["ucase_getCaseLocale_68",93957348152496,93957348152821],["isFollowedByCasedLetter(int (*)(void*, signed char), void*, signed char)",93957348154544,93957348154761],["toUpperOrTitle(int, int (*)(void*, signed char), void*, char16_t const**, int, signed char)",93957348154784,93957348155825],["ucase_fold_68",93957348155856,93957348156294],["u_foldCase_68",93957348156912,93957348156922],["u_charType_68",93957348158336,93957348158463],["u_isupper_68",93957348158608,93957348158744],["u_isxdigit_68",93957348158896,93957348159073],["u_isalnumPOSIX_68",93957348159248,93957348159526],["u_isblank_68",93957348159728,93957348159887],["u_isprintPOSIX_68",93957348160032,93957348160365],["u_charDigitValue_68",93957348160512,93957348160659],["u_digit_68",93957348161296,93957348161554],["uprv_getMaxValues_68",93957348161696,93957348161725],["uscript_getScript_68",93957348161904,93957348162136],["uchar_addPropertyStarts_68",93957348162400,93957348162883],["icu_68::UCharsTrieElement::compareStringTo(icu_68::UCharsTrieElement const&, icu_68::UnicodeString const&) const",93957348162944,93957348163271],["icu_68::UCharsTrieBuilder::UCharsTrieBuilder(UErrorCode&)",93957348163376,93957348163439],["icu_68::UCharsTrieBuilder::~UCharsTrieBuilder()",93957348163520,93957348163593],["icu_68::UCharsTrieBuilder::build(UStringTrieBuildOption, UErrorCode&)",93957348163984,93957348164092],["icu_68::UCharsTrieBuilder::buildUnicodeString(UStringTrieBuildOption, icu_68::UnicodeString&, UErrorCode&)",93957348164800,93957348164893],["icu_68::UCharsTrieBuilder::getElementStringLength(int) const",93957348164928,93957348164992],["icu_68::UCharsTrieBuilder::getElementValue(int) const",93957348165072,93957348165089],["icu_68::UCharsTrieBuilder::countElementUnits(int, int, int) const",93957348165360,93957348165569],["icu_68::UCharsTrieBuilder::indexOfElementWithNextUnit(int, int, char16_t) const",93957348165776,93957348165891],["icu_68::UCharsTrieBuilder::UCTLinearMatchNode::write(icu_68::StringTrieBuilder&)",93957348165968,93957348166121],["icu_68::UCharsTrieBuilder::ensureCapacity(int)",93957348166464,93957348166641],["icu_68::UCharsTrieBuilder::writeElementUnits(int, int, int)",93957348166736,93957348167003],["icu_68::UCharsTrieBuilder::writeValueAndType(signed char, int, int)",93957348167200,93957348167397],["icu_68::UCharsTrieBuilder::getMinLinearMatch() const",93957348167600,93957348167611],["icu_68::UCharsTrie::firstForCodePoint(int)",93957348167664,93957348168030],["icu_68::UCharsTrie::nextForCodePoint(int)",93957348168224,93957348168302],["icu_68::UCharsTrie::nextImpl(char16_t const*, int)",93957348168768,93957348168914],["icu_68::UCharsTrie::Iterator::Iterator(icu_68::ConstChar16Ptr, int, UErrorCode&)",93957348169440,93957348169587],["icu_68::UCharsTrie::Iterator::next(UErrorCode&)",93957348169648,93957348170533],["icu_68::UCharCharacterIterator::getDynamicClassID() const",93957348171248,93957348171261],["icu_68::UCharCharacterIterator::UCharCharacterIterator(icu_68::UCharCharacterIterator const&)",93957348171344,93957348171385],["icu_68::UCharCharacterIterator::operator==(icu_68::ForwardCharacterIterator const&) const",93957348171440,93957348171536],["icu_68::UCharCharacterIterator::clone() const",93957348171584,93957348171653],["icu_68::UCharCharacterIterator::firstPostInc()",93957348171696,93957348171732],["icu_68::UCharCharacterIterator::setIndex(int)",93957348171792,93957348171853],["icu_68::UCharCharacterIterator::next()",93957348171888,93957348171929],["icu_68::UCharCharacterIterator::hasNext()",93957348171984,93957348171999],["icu_68::UCharCharacterIterator::hasPrevious()",93957348172048,93957348172063],["icu_68::UCharCharacterIterator::first32PostInc()",93957348172160,93957348172258],["icu_68::UCharCharacterIterator::setIndex32(int)",93957348172384,93957348172554],["icu_68::UCharCharacterIterator::next32()",93957348172704,93957348172866],["icu_68::UCharCharacterIterator::previous32()",93957348172976,93957348173073],["icu_68::UCharCharacterIterator::move32(int, icu_68::CharacterIterator::EOrigin)",93957348173152,93957348173714],["icu_68::UCharCharacterIterator::getText(icu_68::UnicodeString&)",93957348173776,93957348173870],["icu_68::CharacterIterator::CharacterIterator(icu_68::CharacterIterator const&)",93957348173936,93957348173976],["icu_68::CharacterIterator::firstPostInc()",93957348174032,93957348174069],["ucln_common_registerCleanup_68",93957348174128,93957348174192],["ucptrie_openFromBinary_68",93957348174224,93957348174826],["ucptrie_internalSmallIndex_68",93957348174848,93957348174998],["ucptrie_internalU8PrevIndex_68",93957348175200,93957348175495],["ucptrie_getRange_68",93957348175792,93957348176035],["ucurr_forLocale_68",93957348177584,93957348178543],["ucurr_getPluralName_68",93957348179536,93957348180104],["getCacheEntry(char const*, UErrorCode&)",93957348180800,93957348185405],["uprv_getStaticCurrencyName_68",93957348186096,93957348186213],["ucurr_getDefaultFractionDigitsForUsage_68",93957348186256,93957348186311],["ucurr_getRoundingIncrementForUsage_68",93957348186688,93957348186813],["deleteCacheEntry(CurrencyNameCacheEntry*)",93957348187248,93957348187429],["currencyNameComparator(void const*, void const*)",93957348189744,93957348189851],["icu_68::UDataPathIterator::next(UErrorCode*)",93957348190272,93957348190846],["setCommonICUData(UDataMemory*, signed char, UErrorCode*)",93957348190992,93957348191671],["udata_open_68",93957348192016,93957348192065],["udata_openChoice_68",93957348194400,93957348194447],["udata_cleanup()",93957348194464,93957348194827],["DataCacheElement_deleter(void*)",93957348195008,93957348195048],["doLoadFromCommonData(signed char, char const*, char const*, char const*, char const*, char const*, char const*, char const*, signed char (*)(void*, char const*, char const*, UDataInfo const*), void*, UErrorCode*, UErrorCode*)",93957348195632,93957348196516],["openCommonData(char const*, int, UErrorCode*)",93957348196608,93957348197449],["udata_checkCommonData_68",93957348197488,93957348197662],["offsetTOCEntryCount(UDataMemory const*)",93957348198048,93957348198069],["UDataMemory_init_68",93957348198448,93957348198483],["UDataMemory_createNewInstance_68",93957348198544,93957348198625],["UDataMemory_setData_68",93957348198688,93957348198723],["udata_getMemory_68",93957348198816,93957348198861],["uenum_close_68",93957348198928,93957348199000],["uenum_unextDefault_68",93957348199056,93957348199311],["uenum_next_68",93957348199360,93957348199430],["uhash_open_68",93957348199488,93957348199982],["uhash_init_68",93957348200944,93957348201335],["uhash_nextElement_68",93957348201568,93957348201640],["uhash_setKeyDeleter_68",93957348201664,93957348201678],["_uhash_rehash(UHashtable*, UErrorCode*)",93957348201696,93957348202556],["uhash_iget_68",93957348202832,93957348203108],["uhash_igeti_68",93957348203392,93957348203667],["_uhash_put(UHashtable*, UElement, UElement, signed char, UErrorCode*)",93957348203712,93957348204696],["uhash_puti_68",93957348204752,93957348204785],["uhash_remove_68",93957348204848,93957348205225],["uhash_removeElement_68",93957348205424,93957348205532],["uhash_hashUChars_68",93957348205824,93957348205862],["uhash_hashIChars_68",93957348205920,93957348205958],["uhash_compareUChars_68",93957348206512,93957348206594],["uhash_compareIChars_68",93957348206672,93957348206788],["uhash_deleteHashtable_68",93957348206816,93957348206858],["u_UCharsToChars_68",93957348207152,93957348207235],["uprv_isInvariantUString_68",93957348207344,93957348207418],["uiter_setUTF8_68",93957348207680,93957348207904],["uiter_previous32_68",93957348208000,93957348208093],["utf8IteratorGetIndex(UCharIterator*, UCharIteratorOrigin)",93957348208112,93957348209119],["utf8IteratorHasNext(UCharIterator*)",93957348210240,93957348210263],["utf8IteratorCurrent(UCharIterator*)",93957348210288,93957348210606],["utf8IteratorPrevious(UCharIterator*)",93957348211024,93957348211195],["utf8IteratorSetState(UCharIterator*, unsigned int, UErrorCode*)",93957348211232,93957348211422],["ulist_addItemEndList_68",93957348211488,93957348211670],["ulist_containsString_68",93957348211856,93957348211968],["ulist_resetList_68",93957348212144,93957348212162],["ulist_close_keyword_values_iterator_68",93957348212272,93957348212373],["ulist_next_keyword_value_68",93957348212416,93957348212491],["locale_getKeywordsStart_68",93957348212528,93957348212543],["compareKeywordStructs(void const*, void const*, void const*)",93957348213488,93957348213504],["ulocimp_getKeywordValue_68",93957348213664,93957348214593],["uloc_setKeywordValue_68",93957348214816,93957348216666],["uloc_getCurrentLanguageID_68",93957348217232,93957348217384],["ulocimp_getScript_68(char const*, char const**, UErrorCode&)",93957348217936,93957348218228],["uloc_openKeywordList_68",93957348218672,93957348218928],["uloc_getDefault_68",93957348219968,93957348219978],["uloc_getLanguage_68",93957348220208,93957348220362],["uloc_getCountry_68",93957348220640,93957348221043],["_getVariant(char const*, char, icu_68::ByteSink&, signed char)",93957348222128,93957348222460],["ulocimp_getName_68",93957348222624,93957348222639],["uloc_getBaseName_68",93957348225024,93957348225174],["ulocimp_canonicalize_68",93957348225344,93957348225362],["uloc_toUnicodeLocaleType_68",93957348225440,93957348225495],["uloc_toLegacyType_68",93957348225616,93957348225778],["uloc_kw_countKeywords(UEnumeration*, UErrorCode*)",93957348225840,93957348225909],["uloc_kw_resetKeywords(UEnumeration*, UErrorCode*)",93957348226000,93957348226017],["init()",93957348226096,93957348230240],["ulocimp_toBcpType_68",93957348230304,93957348230627],["isSpecialTypeRgKeyValue(char const*)",93957348230752,93957348230836],["uloc_key_type_cleanup()",93957348231184,93957348231565],["icu_68::CharString* icu_68::MemoryPool<icu_68::CharString, 8>::create<char const*&, UErrorCode&>(char const*&, UErrorCode&)",93957348231792,93957348232088],["LocExtKeyData* icu_68::MemoryPool<LocExtKeyData, 8>::create<>()",93957348232304,93957348232503],["ultag_isScriptSubtag_68",93957348232608,93957348232707],["ultag_isVariantSubtags_68",93957348232832,93957348233004],["ultag_isExtensionSubtags_68",93957348233200,93957348233543],["ultag_isUnicodeLocaleAttributes_68",93957348233904,93957348234247],["ultag_getTKeyStart",93957348234352,93957348234513],["_isTransformedExtensionSubtag(int&, char const*, int)",93957348234704,93957348235439],["_isUnicodeExtensionSubtag(int&, char const*, int)",93957348235616,93957348236152],["uloc_forLanguageTag_68",93957348243920,93957348244077],["icu_68::CharString* icu_68::MemoryPool<icu_68::CharString, 8>::create<char (&) [100], int&, UErrorCode&>(char (&) [100], int&, UErrorCode&)",93957348254304,93957348254586],["icu_68::CharString* icu_68::MemoryPool<icu_68::CharString, 8>::create<char*, int&, UErrorCode&>(char*&&, int&, UErrorCode&)",93957348254880,93957348255167],["uprv_mapFile_68",93957348255568,93957348255806],["uprv_max_68",93957348255872,93957348255885],["umutablecptrie_open_68",93957348255904,93957348256170],["umutablecptrie_get_68",93957348256240,93957348256318],["umutablecptrie_buildImmutable_68",93957348256608,93957348269231],["void icu_68::(anonymous namespace)::MixedBlocks::extend<unsigned int>(unsigned int const*, int, int, int)",93957348269744,93957348270058],["icu_68::umtx_init()",93957348270384,93957348270483],["umtx_unlock_68",93957348270704,93957348270732],["icu_68::umtx_initImplPostInit(icu_68::UInitOnce&)",93957348270976,93957348271032],["icu_68::UnifiedCache::getInstance(UErrorCode&)",93957348271136,93957348271611],["icu_68::UnifiedCache::handleUnreferencedObject() const",93957348271920,93957348271969],["icu_68::UnifiedCache::~UnifiedCache()",93957348272336,93957348272494],["icu_68::UnifiedCache::_putIfAbsentAndGet(icu_68::CacheKeyBase const&, icu_68::SharedObject const*&, UErrorCode&) const",93957348272528,93957348272982],["icu_68::UnifiedCache::_get(icu_68::CacheKeyBase const&, icu_68::SharedObject const*&, void const*, UErrorCode&) const",93957348273456,93957348273605],["icu_68::UnicodeSet::closeOver(int)",93957348273696,93957348275462],["(anonymous namespace)::_set_addRange(USet*, int, int)",93957348275488,93957348275498],["icu_68::RuleCharacterIterator::RuleCharacterIterator(icu_68::UnicodeString const&, icu_68::SymbolTable const*, icu_68::ParsePosition&)",93957348275616,93957348275648],["icu_68::RuleCharacterIterator::next(int, signed char&, UErrorCode&)",93957348275712,93957348276539],["icu_68::RuleCharacterIterator::jumpahead(int)",93957348276640,93957348276741],["icu_68::RuleCharacterIterator::setPos(icu_68::RuleCharacterIterator::Pos const&)",93957348276784,93957348276813],["icu_68::UnicodeSet::getDynamicClassID() const",93957348277072,93957348277085],["icu_68::UnicodeSet::stringsSize() const",93957348277120,93957348277142],["icu_68::UnicodeSet::UnicodeSet(int, int)",93957348277248,93957348277345],["icu_68::UnicodeSet::UnicodeSet(icu_68::UnicodeSet const&)",93957348277680,93957348277772],["icu_68::UnicodeSet::UnicodeSet(icu_68::UnicodeSet const&, signed char)",93957348277792,93957348278286],["icu_68::UnicodeSet::allocateStrings(UErrorCode&)",93957348278560,93957348278690],["icu_68::UnicodeSet::setToBogus()",93957348278768,93957348278862],["icu_68::UnicodeSet::~UnicodeSet()",93957348278992,93957348279151],["icu_68::UnicodeSet::~UnicodeSet()",93957348279168,93957348279196],["icu_68::UnicodeSet::copyFrom(icu_68::UnicodeSet const&, signed char)",93957348279248,93957348279742],["icu_68::UnicodeSet::cloneAsThawed() const",93957348279888,93957348279941],["icu_68::UnicodeSet::hashCode() const",93957348280080,93957348280212],["icu_68::UnicodeSet::getRangeCount() const",93957348280368,93957348280386],["icu_68::UnicodeSet::getRangeStart(int) const",93957348280432,93957348280450],["icu_68::UnicodeSet::contains(int) const",93957348280512,93957348280643],["icu_68::UnicodeSet::contains(icu_68::UnicodeString const&) const",93957348280752,93957348281027],["icu_68::UnicodeSet::span(char16_t const*, int, USetSpanCondition) const",93957348281248,93957348281853],["icu_68::UnicodeSet::matchesIndexValue(unsigned char) const",93957348281968,93957348282149],["icu_68::UnicodeSet::matches(icu_68::Replaceable const&, int&, int, signed char)",93957348282176,93957348282862],["non-virtual thunk to icu_68::UnicodeSet::matches(icu_68::Replaceable const&, int&, int, signed char)",93957348283248,93957348283262],["icu_68::UnicodeSet::addAll(icu_68::UnicodeSet const&)",93957348283296,93957348283430],["icu_68::UnicodeSet::set(int, int)",93957348283472,93957348283765],["icu_68::UnicodeSet::complement(int, int)",93957348283888,93957348284065],["icu_68::UnicodeSet::add(int)",93957348284864,93957348285578],["icu_68::UnicodeSet::_add(icu_68::UnicodeString const&)",93957348285824,93957348286234],["icu_68::UnicodeSet::retainAll(icu_68::UnicodeSet const&)",93957348286368,93957348286469],["icu_68::UnicodeSet::removeAll(icu_68::UnicodeSet const&)",93957348286640,93957348286737],["icu_68::UnicodeSet::retain(int, int)",93957348286848,93957348287052],["icu_68::UnicodeSet::remove(int, int)",93957348287664,93957348287787],["icu_68::UnicodeSet::exclusiveOr(int const*, int, signed char)",93957348287920,93957348288303],["icu_68::UnicodeSet::compact()",93957348288480,93957348288693],["icu_68::UnicodeSet::ensureBufferCapacity(int)",93957348289344,93957348289569],["icu_68::UnicodeSet::_appendToPat(icu_68::UnicodeString&, int, signed char)",93957348289744,93957348289880],["icu_68::UnicodeSet::_generatePattern(icu_68::UnicodeString&, signed char) const",93957348290272,93957348290964],["non-virtual thunk to icu_68::UnicodeSet::toPattern(icu_68::UnicodeString&, signed char) const",93957348291072,93957348291170],["icu_68::UnicodeSet::spanBack(char16_t const*, int, USetSpanCondition) const",93957348291488,93957348292093],["icu_68::UnicodeSet::spanBackUTF8(char const*, int, USetSpanCondition) const",93957348292912,93957348293485],["icu_68::UnicodeFilter::matches(icu_68::Replaceable const&, int&, int, signed char)",93957348293520,93957348293721],["icu_68::BMPSet::findCodePoint(int, int, int) const",93957348295104,93957348295176],["icu_68::BMPSet::BMPSet(icu_68::BMPSet const&, int const*, int)",93957348295856,93957348296049],["icu_68::BMPSet::contains(int) const",93957348297232,93957348297499],["icu_68::BMPSet::spanBack(char16_t const*, char16_t const*, USetSpanCondition) const",93957348298576,93957348299620],["icu_68::BMPSet::spanBackUTF8(unsigned char const*, int, USetSpanCondition) const",93957348300528,93957348301027],["icu_68::UnicodeSet::applyPattern(icu_68::UnicodeString const&, UErrorCode&)",93957348301280,93957348301432],["icu_68::UnicodeSet::applyPattern(icu_68::RuleCharacterIterator&, icu_68::SymbolTable const*, icu_68::UnicodeString&, unsigned int, icu_68::UnicodeSet& (icu_68::UnicodeSet::*)(int), int, UErrorCode&)",93957348301792,93957348304783],["icu_68::UnicodeSet::applyPropertyPattern(icu_68::RuleCharacterIterator&, icu_68::UnicodeString&, UErrorCode&)",93957348305008,93957348305268],["icu_68::UnicodeSet::applyIntPropertyValue(UProperty, int, UErrorCode&)",93957348305568,93957348306097],["icu_68::(anonymous namespace)::intPropertyFilter(int, void*)",93957348306144,93957348306173],["icu_68::(anonymous namespace)::numericValueFilter(int, void*)",93957348307760,93957348307794],["icu_68::(anonymous namespace)::versionFilter(int, void*)",93957348307920,93957348307989],["icu_68::CharacterProperties::getInclusionsForProperty(UProperty, UErrorCode&)",93957348309216,93957348309725],["u_getBinaryPropertySet_68",93957348310352,93957348310787],["ubidi_addPropertyStarts_68",93957348311008,93957348311288],["ubidi_isMirrored_68",93957348311360,93957348311491],["ubidi_isJoinControl_68",93957348311648,93957348311779],["ubidi_getJoiningGroup_68",93957348311936,93957348311997],["u_charDirection_68",93957348312144,93957348312273],["icu_68::getExtName(unsigned int, char*, unsigned short)",93957348312480,93957348312894],["icu_68::getCharCat(int)",93957348315168,93957348315268],["icu_68::isAcceptable(void*, char const*, char const*, UDataInfo const*)",93957348317040,93957348317099],["icu_68::expandName(icu_68::UCharNames*, unsigned char const*, unsigned short, UCharNameChoice, char*, unsigned short)",93957348317184,93957348317749],["icu_68::UnicodeSetStringSpan::UnicodeSetStringSpan(icu_68::UnicodeSet const&, icu_68::UVector const&, unsigned int)",93957348319008,93957348321060],["icu_68::UnicodeSetStringSpan::~UnicodeSetStringSpan()",93957348321392,93957348321489],["icu_68::UnicodeSetStringSpan::spanNot(char16_t const*, int) const",93957348323568,93957348324110],["icu_68::UnicodeSetStringSpan::spanNotBack(char16_t const*, int) const",93957348326192,93957348326746],["icu_68::UnicodeSetStringSpan::spanNotUTF8(unsigned char const*, int) const",93957348328224,93957348328538],["icu_68::UnicodeSetStringSpan::spanBackUTF8(unsigned char const*, int, USetSpanCondition) const",93957348328848,93957348330576],["icu_68::UnicodeString::doCaseCompare(int, int, char16_t const*, int, int, unsigned int) const",93957348330944,93957348331154],["icu_68::UnicodeString::foldCase(unsigned int)",93957348332784,93957348332810],["uhash_compareCaselessUnicodeString_68",93957348332960,93957348333112],["icu_68::UnicodeString::toUpper()",93957348333184,93957348333227],["icu_68::UnicodeString::getDynamicClassID() const",93957348333296,93957348333309],["icu_68::UnicodeString::refCount() const",93957348333760,93957348333773],["icu_68::UnicodeString::UnicodeString(char16_t)",93957348334912,93957348334938],["icu_68::UnicodeString::UnicodeString(char16_t const*)",93957348335040,93957348335073],["icu_68::UnicodeString::UnicodeString(char16_t const*, int)",93957348335808,93957348335838],["icu_68::UnicodeString::setToBogus()",93957348336032,93957348336099],["icu_68::UnicodeString::UnicodeString(char const*, int, icu_68::UnicodeString::EInvariant)",93957348336288,93957348336511],["icu_68::UnicodeString::UnicodeString(char const*)",93957348337472,93957348337536],["icu_68::UnicodeString::UnicodeString(icu_68::UnicodeString const&)",93957348337968,93957348337996],["icu_68::UnicodeString::UnicodeString(icu_68::UnicodeString&&)",93957348338512,93957348338624],["icu_68::UnicodeString::UnicodeString(icu_68::UnicodeString const&, int, int)",93957348338768,93957348338876],["icu_68::UnicodeString::~UnicodeString()",93957348338960,93957348339023],["icu_68::UnicodeString::fromUTF8(icu_68::StringPiece)",93957348339104,93957348339166],["icu_68::UnicodeString::releaseBuffer(int)",93957348339264,93957348339432],["icu_68::UnicodeString::fastCopyFrom(icu_68::UnicodeString const&)",93957348339456,93957348339471],["icu_68::UnicodeString::unescapeAt(int&) const",93957348339632,93957348339669],["UnicodeString_charAt(int, void*)",93957348339792,93957348339847],["icu_68::UnicodeString::doCompare(int, int, char16_t const*, int, int) const",93957348339920,93957348340143],["icu_68::UnicodeString::getCharAt(int) const",93957348340176,93957348340231],["icu_68::UnicodeString::getChar32Start(int) const",93957348340400,93957348340500],["icu_68::UnicodeString::moveIndex32(int, int) const",93957348340608,93957348340890],["icu_68::UnicodeString::extract(icu_68::Char16Ptr, int, UErrorCode&) const",93957348341024,93957348341187],["icu_68::UnicodeString::tempSubString(int, int) const",93957348341360,93957348341571],["icu_68::UnicodeString::toUTF8(icu_68::ByteSink&) const",93957348341776,93957348342254],["icu_68::UnicodeString::doIndexOf(char16_t, int, int) const",93957348342448,93957348342566],["icu_68::UnicodeString::doLastIndexOf(char16_t, int, int) const",93957348342768,93957348342901],["icu_68::UnicodeString::unBogus()",93957348343600,93957348343618],["icu_68::UnicodeString::setTo(signed char, icu_68::ConstChar16Ptr, int)",93957348343856,93957348344131],["icu_68::UnicodeString::replace(int, int, int)",93957348344288,93957348344388],["icu_68::UnicodeString::doReplace(int, int, icu_68::UnicodeString const&, int, int)",93957348345632,93957348345725],["icu_68::UnicodeString::handleReplaceBetween(int, int, icu_68::UnicodeString const&)",93957348345840,93957348345913],["icu_68::UnicodeString::doReverse(int, int)",93957348346208,93957348346590],["icu_68::UnicodeStringAppendable::appendCodeUnit(char16_t)",93957348346656,93957348346701],["icu_68::UnicodeStringAppendable::appendString(char16_t const*, int)",93957348346816,93957348346842],["icu_68::UnicodeStringAppendable::getAppendBuffer(int, int, char16_t*, int, int*)",93957348346912,93957348347096],["uhash_compareUnicodeString_68",93957348347184,93957348347331],["icu_68::UnicodeString::toTitle(icu_68::BreakIterator*, icu_68::Locale const&, unsigned int)",93957348347776,93957348347932],["icu_68::UMemory::operator new[](unsigned long)",93957348347952,93957348347962],["u_getIntPropertyValue_68",93957348348016,93957348348127],["uprops_addPropertyStarts_68",93957348348320,93957348348515],["defaultContains(BinaryProperty const&, int, UProperty)",93957348348928,93957348348961],["isMirrored(BinaryProperty const&, int, UProperty)",93957348348992,93957348349004],["isJoinControl(BinaryProperty const&, int, UProperty)",93957348349184,93957348349196],["isNormInert(BinaryProperty const&, int, UProperty)",93957348349216,93957348349279],["isPOSIX_alnum(BinaryProperty const&, int, UProperty)",93957348349376,93957348349388],["isPOSIX_graph(BinaryProperty const&, int, UProperty)",93957348349408,93957348349420],["isPOSIX_xdigit(BinaryProperty const&, int, UProperty)",93957348349440,93957348349452],["changesWhenNFKC_Casefolded(BinaryProperty const&, int, UProperty)",93957348350016,93957348350555],["getBiDiClass(IntProperty const&, int, UProperty)",93957348350592,93957348350604],["defaultGetValue(IntProperty const&, int, UProperty)",93957348350624,93957348350659],["getCombiningClass(IntProperty const&, int, UProperty)",93957348350704,93957348350720],["getJoiningGroup(IntProperty const&, int, UProperty)",93957348350736,93957348350748],["getNumericType(IntProperty const&, int, UProperty)",93957348350768,93957348350817],["scriptGetMaxValue(IntProperty const&, UProperty)",93957348350864,93957348350890],["getNormQuickCheck(IntProperty const&, int, UProperty)",93957348350944,93957348350962],["getTrailCombiningClass(IntProperty const&, int, UProperty)",93957348351008,93957348351024],["getInPC(IntProperty const&, int, UProperty)",93957348351040,93957348351098],["getInSC(IntProperty const&, int, UProperty)",93957348351200,93957348351258],["(anonymous namespace)::ulayout_isAcceptable(void*, char const*, char const*, UDataInfo const*)",93957348351328,93957348351387],["ures_initStackObject_68",93957348351536,93957348351615],["ures_close_68",93957348351632,93957348351807],["ures_appendResPath(UResourceBundle*, char const*, int, UErrorCode*)",93957348352304,93957348352495],["ures_getBinary_68",93957348352704,93957348352904],["ures_getInt_68",93957348353120,93957348353286],["ures_getKey_68",93957348353328,93957348353345],["ures_resetIterator_68",93957348353392,93957348353413],["ures_getNextString_68",93957348353456,93957348353806],["ures_getNextResource_68",93957348354128,93957348354436],["ures_getByIndex_68",93957348357520,93957348357810],["ures_open_68",93957348358192,93957348358215],["ures_getByKeyWithFallback_68",93957348358640,93957348359916],["ures_getAllItemsWithFallback_68",93957348360160,93957348360533],["ures_getByKey_68",93957348361328,93957348361617],["ures_getStringByKey_68",93957348362016,93957348362522],["ures_getLocaleByType_68",93957348362576,93957348362629],["ures_openNoDefault_68",93957348364912,93957348364938],["ures_openAvailableLocales_68",93957348364976,93957348365241],["entryClose(UResourceDataEntry*)",93957348368080,93957348368146],["init_entry(char const*, char const*, UErrorCode*)",93957348368448,93957348369315],["insertRootBundle(UResourceDataEntry*&, UErrorCode*)",93957348369648,93957348369738],["compareEntries(UElement, UElement)",93957348369792,93957348369853],["free_entry(UResourceDataEntry*)",93957348370208,93957348370318],["ures_loc_closeLocales(UEnumeration*)",93957348370384,93957348370438],["ures_loc_nextLocale(UEnumeration*, int*, UErrorCode*)",93957348370480,93957348370571],["isAcceptable(void*, char const*, char const*, UDataInfo const*)",93957348370608,93957348370683],["res_load_68",93957348371072,93957348371195],["res_getPublicType_68",93957348371248,93957348371271],["res_getAlias_68",93957348371520,93957348371591],["res_getIntVectorNoTrace_68",93957348371680,93957348371751],["icu_68::ResourceDataValue::~ResourceDataValue()",93957348371856,93957348371898],["endrpcent",139871564469328,139871564469550],["svcunixfd_create",139871564476736,139871564476741],["authunix_create",139871564479920,139871564480369],["clnt_create",139871564480752,139871564481310],["ufromfpx",139871565472080,139871565472765],["casinh",139871565476128,139871565476497],["cexp",139871565485824,139871565486780],["cpow",139871565489728,139871565489845],["nextdown",139871565491072,139871565491110],["fmin",139871565491184,139871565491245],["__iseqsig",139871565491264,139871565491325],["significand",139871565491392,139871565491432],["v8::PerIsolateData::RemoveUnhandledPromise(v8::Local<v8::Promise>)",93957335242768,93957335243284],["v8::Shell::PerformanceNow(v8::FunctionCallbackInfo<v8::Value> const&)",93957335245504,93957335245575],["v8::Shell::RealmOwner(v8::FunctionCallbackInfo<v8::Value> const&)",93957335246048,93957335246531],["v8::Shell::CreateRealm(v8::FunctionCallbackInfo<v8::Value> const&, int, v8::MaybeLocal<v8::Value>)",93957335246656,93957335247392],["v8::internal::Protectors::InvalidateStringLengthOverflowLookupChain(v8::internal::Isolate*)",93957336707088,93957336707161],["v8::internal::StackGuard::SetStackLimit(unsigned long)",93957336711056,93957336711143],["v8::internal::StackGuard::HasTerminationRequest()",93957336712048,93957336712140],["v8::internal::ThreadLocalTop::Clear()",93957336715232,93957336715324],["v8::Locker::IsActive()",93957336715520,93957336715537],["v8::internal::ThreadManager::ThreadManager(v8::internal::Isolate*)",93957336715584,93957336715707],["v8::internal::ThreadManager::Iterate(v8::internal::RootVisitor*)",93957336715920,93957336716055],["v8::internal::CpuTraceMarkExtension::GetNativeFunctionTemplate(v8::Isolate*, v8::Local<v8::String>)",93957336716176,93957336716218],["v8::internal::SamplingEventsProcessor::~SamplingEventsProcessor()",93957339608416,93957339608501],["v8::internal::CpuProfiler::StartProfiling(char const*, v8::CpuProfilingOptions, std::__1::unique_ptr<v8::DiscardedSamplesDelegate, std::__1::default_delete<v8::DiscardedSamplesDelegate> >)",93957339614832,93957339615227],["std::__1::__deque_base<v8::internal::CpuProfile::SampleInfo, std::__1::allocator<v8::internal::CpuProfile::SampleInfo> >::~__deque_base()",93957339618224,93957339618431],["v8::internal::HeapProfiler::GetDetachedness(v8::Local<v8::Value>, unsigned short)",93957339619472,93957339619525],["v8::internal::HeapProfiler::PushHeapObjectsStats(v8::OutputStream*, long*)",93957339620592,93957339620606],["v8::internal::HeapProfiler::GetSnapshotObjectId(v8::internal::Handle<v8::internal::Object>)",93957339620848,93957339620879],["v8::internal::HeapProfiler::FindHeapObjectById(unsigned int)",93957339621040,93957339621282],["std::__1::__deque_base<v8::internal::HeapEntry, std::__1::allocator<v8::internal::HeapEntry> >::~__deque_base()",93957339622880,93957339623087],["void std::__1::vector<std::__1::unique_ptr<v8::internal::HeapSnapshot, std::__1::default_delete<v8::internal::HeapSnapshot> >, std::__1::allocator<std::__1::unique_ptr<v8::internal::HeapSnapshot, std::__1::default_delete<v8::internal::HeapSnapshot> > > >::__emplace_back_slow_path<v8::internal::HeapSnapshot*&>(v8::internal::HeapSnapshot*&)",93957339623520,93957339624285],["v8::internal::HeapEntry::SetNamedAutoIndexReference(v8::internal::HeapGraphEdge::Type, char const*, v8::internal::HeapEntry*, v8::internal::StringsStorage*)",93957339624432,93957339624710],["v8::internal::HeapSnapshot::Delete()",93957339624928,93957339624944],["v8::internal::HeapSnapshot::AddGcSubrootEntry(v8::internal::Root, unsigned int)",93957339625904,93957339626221],["v8::internal::HeapObjectsMap::HeapObjectsMap(v8::internal::Heap*)",93957339626704,93957339626957],["v8::internal::HeapObjectsMap::UpdateObjectSize(unsigned long, int)",93957339628192,93957339628204],["v8::internal::HeapObjectsMap::FindEntry(unsigned long)",93957339628816,93957339629008],["v8::internal::HeapObjectsMap::UpdateHeapObjectsMap()",93957339629024,93957339629400],["v8_inspector::String16::String16(std::__1::basic_string<unsigned short, std::__1::char_traits<unsigned short>, std::__1::allocator<unsigned short> >&&)",93957342394896,93957342395494],["v8_inspector::String16Builder::appendNumber(int)",93957342402496,93957342402605],["v8_inspector::String16::fromUTF16LE(unsigned short const*, unsigned long)",93957342406784,93957342406938],["v8_inspector::toV8StringInternalized(v8::Isolate*, char const*)",93957342408368,93957342408414],["v8_inspector::toProtocolStringWithTypeCheck(v8::Isolate*, v8::Local<v8::Value>)",93957342408704,93957342408785],["v8_inspector::toStringView(v8_inspector::String16 const&)",93957342408880,93957342408941],["v8_inspector::StringBufferFrom(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >)",93957342409088,93957342409196],["v8_crdtp::ProtocolTypeTraits<v8_inspector::String16, void>::Deserialize(v8_crdtp::DeserializerState*, v8_inspector::String16*)",93957342409296,93957342409466],["v8::internal::compiler::SourceTextModuleRef::GetCell(int) const",93957344083712,93957344084169],["v8::internal::compiler::KeyedAccessMode::IsLoad() const",93957344104624,93957344104645],["v8::internal::compiler::JSHeapBroker::GetFeedbackForForIn(v8::internal::compiler::FeedbackSource const&)",93957344117216,93957344117320],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::ObjectRef const&)",93957344119712,93957344119981],["v8::internal::compiler::CodeRef::GetInlinedBytecodeSize() const",93957344123696,93957344123902],["std::__1::__tree_iterator<std::__1::__value_type<v8::internal::compiler::JSHeapBroker::SerializedFunction, v8::internal::ZoneVector<v8::internal::compiler::Hints> >, std::__1::__tree_node<std::__1::__value_type<v8::internal::compiler::JSHeapBroker::SerializedFunction, v8::internal::ZoneVector<v8::internal::compiler::Hints> >, void*>*, long> std::__1::__tree<std::__1::__value_type<v8::internal::compiler::JSHeapBroker::SerializedFunction, v8::internal::ZoneVector<v8::internal::compiler::Hints> >, std::__1::__map_value_compare<v8::internal::compiler::JSHeapBroker::SerializedFunction, std::__1::__value_type<v8::internal::compiler::JSHeapBroker::SerializedFunction, v8::internal::ZoneVector<v8::internal::compiler::Hints> >, std::__1::less<v8::internal::compiler::JSHeapBroker::SerializedFunction>, true>, v8::internal::ZoneAllocator<std::__1::__value_type<v8::internal::compiler::JSHeapBroker::SerializedFunction, v8::internal::ZoneVector<v8::internal::compiler::Hints> > > >::__emplace_multi<std::__1::pair<v8::internal::compiler::JSHeapBroker::SerializedFunction const, v8::internal::ZoneVector<v8::internal::compiler::Hints> > >(std::__1::pair<v8::internal::compiler::JSHeapBroker::SerializedFunction const, v8::internal::ZoneVector<v8::internal::compiler::Hints> >&&)",93957344127680,93957344127978],["std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::compiler::FeedbackSource, v8::internal::compiler::MinimorphicLoadPropertyAccessInfo>, void*>*> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::compiler::FeedbackSource, v8::internal::compiler::MinimorphicLoadPropertyAccessInfo>, std::__1::__unordered_map_hasher<v8::internal::compiler::FeedbackSource, std::__1::__hash_value_type<v8::internal::compiler::FeedbackSource, v8::internal::compiler::MinimorphicLoadPropertyAccessInfo>, v8::internal::compiler::FeedbackSource::Hash, v8::internal::compiler::FeedbackSource::Equal, true>, std::__1::__unordered_map_equal<v8::internal::compiler::FeedbackSource, std::__1::__hash_value_type<v8::internal::compiler::FeedbackSource, v8::internal::compiler::MinimorphicLoadPropertyAccessInfo>, v8::internal::compiler::FeedbackSource::Equal, v8::internal::compiler::FeedbackSource::Hash, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<v8::internal::compiler::FeedbackSource, v8::internal::compiler::MinimorphicLoadPropertyAccessInfo> > >::find<v8::internal::compiler::FeedbackSource>(v8::internal::compiler::FeedbackSource const&)",93957344133888,93957344134349],["v8::internal::compiler::(anonymous namespace)::CanConsiderForInlining(v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::SharedFunctionInfoRef const&, v8::internal::compiler::FeedbackVectorRef const&)",93957344140688,93957344142419],["v8::internal::compiler::JSInliningHeuristic::DuplicateStateValuesAndRename(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::JSInliningHeuristic::StateCloneMode)",93957344149760,93957344150296],["v8::internal::compiler::MachineGraph::Dead()",93957344152864,93957344152933],["v8::internal::compiler::JSInliningHeuristic::reducer_name() const",93957344153888,93957344153901],["v8::internal::compiler::JSInliner::InlineCall(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::StartNode, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::ZoneVector<v8::internal::compiler::Node*> const&, int)",93957344154768,93957344162063],["v8::internal::compiler::JSInliner::DetermineCallTarget(v8::internal::compiler::Node*)",93957344164512,93957344165160],["v8::internal::compiler::JSCallAccessor::receiver() const",93957344173632,93957344173702],["v8::internal::compiler::JSIntrinsicLowering::ReduceCopyDataProperties(v8::internal::compiler::Node*)",93957344174608,93957344174791],["v8::internal::compiler::JSIntrinsicLowering::ReduceCreateJSGeneratorObject(v8::internal::compiler::Node*)",93957344176192,93957344176720],["v8::internal::compiler::JSIntrinsicLowering::ReduceAsyncFunctionEnter(v8::internal::compiler::Node*)",93957344177104,93957344177150],["v8::internal::compiler::JSIntrinsicLowering::ReduceAsyncFunctionResolve(v8::internal::compiler::Node*)",93957344177232,93957344177299],["v8::internal::compiler::JSIntrinsicLowering::ReduceAsyncGeneratorAwaitUncaught(v8::internal::compiler::Node*)",93957344177504,93957344177687],["v8::internal::compiler::JSIntrinsicLowering::ReduceAsyncGeneratorResolve(v8::internal::compiler::Node*)",93957344177888,93957344178071],["v8::internal::compiler::JSIntrinsicLowering::ReduceGeneratorGetResumeMode(v8::internal::compiler::Node*)",93957344178272,93957344178685],["v8::internal::compiler::JSIntrinsicLowering::ReduceIsJSReceiver(v8::internal::compiler::Node*)",93957344179760,93957344179849],["v8::internal::compiler::JSIntrinsicLowering::ReduceToLength(v8::internal::compiler::Node*)",93957344179952,93957344179998],["v8::internal::compiler::JSIntrinsicLowering::ReduceToString(v8::internal::compiler::Node*)",93957344180048,93957344180427],["v8::internal::compiler::JSIntrinsicLowering::ReduceIncBlockCounter(v8::internal::compiler::Node*)",93957344180624,93957344180804],["v8::internal::compiler::JSIntrinsicLowering::Change(v8::internal::compiler::Node*, v8::internal::compiler::Operator const*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957344180864,93957344181416],["v8::internal::compiler::JSIntrinsicLowering::reducer_name() const",93957344181872,93957344181885],["v8::internal::compiler::JSNativeContextSpecialization::Reduce(v8::internal::compiler::Node*)",93957344182112,93957344182300],["v8::internal::compiler::JSNativeContextSpecialization::ReduceJSAsyncFunctionEnter(v8::internal::compiler::Node*)",93957344183136,93957344183999],["v8::internal::compiler::JSNativeContextSpecialization::ReduceJSAsyncFunctionResolve(v8::internal::compiler::Node*)",93957344184896,93957344185761],["v8::internal::compiler::JSNativeContextSpecialization::ReduceJSInstanceOf(v8::internal::compiler::Node*)",93957344186816,93957344189978],["v8::internal::compiler::JSNativeContextSpecialization::ReduceJSOrdinaryHasInstance(v8::internal::compiler::Node*)",93957344190496,93957344192291],["std::__1::num_put<char, std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > >::do_put(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, char, long long) const",93957346692256,93957346692868],["std::__1::__num_put<char>::__widen_and_group_float(char*, char*, char*, char*, char*&, char*&, std::__1::locale const&)",93957346695680,93957346697075],["std::__1::num_put<wchar_t, std::__1::ostreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::do_put(std::__1::ostreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, wchar_t, unsigned long) const",93957346702496,93957346703128],["std::__1::time_get<char, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > >::get(std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, unsigned int&, tm*, char const*, char const*) const",93957346708592,93957346709851],["std::__1::time_get<char, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > >::do_get_monthname(std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, unsigned int&, tm*) const",93957346710416,93957346710814],["std::__1::time_get<char, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > >::__get_percent(std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >&, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, unsigned int&, std::__1::ctype<char> const&) const",93957346713184,93957346713508],["std::__1::time_get<wchar_t, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::do_get_date(std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, unsigned int&, tm*) const",93957346715456,93957346715565],["std::__1::time_get<wchar_t, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::do_get_year(std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, unsigned int&, tm*) const",93957346716384,93957346716705],["std::__1::time_get<wchar_t, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::__get_white_space(std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >&, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, unsigned int&, std::__1::ctype<wchar_t> const&) const",93957346718384,93957346718768],["int std::__1::__get_up_to_n_digits<wchar_t, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >(std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >&, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, unsigned int&, std::__1::ctype<wchar_t> const&, int)",93957346719120,93957346719789],["std::__1::time_put<wchar_t, std::__1::ostreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::do_put(std::__1::ostreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, wchar_t, tm const*, char, char) const",93957346720064,93957346720274],["std::__1::moneypunct<char, false>::do_decimal_point() const",93957346720592,93957346720600],["std::__1::moneypunct<char, false>::do_negative_sign() const",93957346720640,93957346720658],["std::__1::moneypunct<wchar_t, false>::do_negative_sign() const",93957346720688,93957346720733],["std::__1::money_get<char, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > >::__do_get(std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >&, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, bool, std::__1::locale const&, unsigned int, unsigned int&, bool&, std::__1::ctype<char> const&, std::__1::unique_ptr<char, void (*)(void*)>&, char*&, char*)",93957346722080,93957346727099],["v8::platform::NotifyIsolateShutdown(v8::Platform*, v8::Isolate*)",93957346916160,93957346916170],["v8::platform::DefaultPlatform::DefaultPlatform(int, v8::platform::IdleTaskSupport, std::__1::unique_ptr<v8::TracingController, std::__1::default_delete<v8::TracingController> >)",93957346916448,93957346916772],["v8::platform::DefaultPlatform::~DefaultPlatform()",93957346917088,93957346917116],["v8::platform::DefaultPlatform::GetForegroundTaskRunner(v8::Isolate*)",93957346917152,93957346917788],["v8::platform::DefaultPlatform::CallDelayedOnWorkerThread(std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> >, double)",93957346917824,93957346917842],["v8::platform::DefaultPlatform::PostJob(v8::TaskPriority, std::__1::unique_ptr<v8::JobTask, std::__1::default_delete<v8::JobTask> >)",93957346917872,93957346917942],["v8::platform::DefaultPlatform::CurrentClockTimeMillis()",93957346918000,93957346918010],["v8::platform::DefaultPlatform::GetStackTracePrinter()",93957346918032,93957346918045],["v8::platform::DefaultPlatform::GetPageAllocator()",93957346918112,93957346918122],["std::__1::__shared_ptr_emplace<v8::platform::DefaultForegroundTaskRunner, std::__1::allocator<v8::platform::DefaultForegroundTaskRunner> >::~__shared_ptr_emplace()",93957346918224,93957346918244],["std::__1::__shared_ptr_emplace<v8::platform::DefaultForegroundTaskRunner, std::__1::allocator<v8::platform::DefaultForegroundTaskRunner> >::__on_zero_shared()",93957346918304,93957346918320],["v8::base::debug::(anonymous namespace)::StackDumpSignalHandler(int, siginfo_t*, void*)",93957346918736,93957346919820],["v8::base::debug::StackTrace::StackTrace()",93957346919840,93957346919875],["v8::base::debug::(anonymous namespace)::ProcessBacktrace(void* const*, unsigned long, v8::base::debug::(anonymous namespace)::BacktraceOutputHandler*)",93957346919936,93957346921268],["v8::platform::DefaultJobState::JobDelegate::GetTaskId()",93957346921328,93957346921407],["v8::platform::DefaultJobState::~DefaultJobState()",93957346921536,93957346921619],["v8::platform::DefaultJobState::NotifyConcurrencyIncrease()",93957346921728,93957346922178],["v8::platform::DefaultJobState::DidRunTask()",93957346922704,93957346923172],["v8::platform::DefaultJobHandle::~DefaultJobHandle()",93957346923216,93957346923289],["v8::platform::DefaultJobHandle::Join()",93957346923376,93957346923464],["v8::platform::DefaultJobHandle::CancelAndDetach()",93957346923648,93957346923735],["v8::platform::DefaultJobHandle::UpdatePriority(v8::TaskPriority)",93957346923824,93957346923875],["v8::platform::DefaultJobState::JobDelegate::NotifyConcurrencyIncrease()",93957346923904,93957346923918],["UDataMemory_isLoaded_68",93957346923936,93957346923950],["v8::platform::DefaultJobWorker::~DefaultJobWorker()",93957346923968,93957346923999],["v8::platform::DefaultJobWorker::Run()",93957346924048,93957346924377],["v8::platform::DefaultForegroundTaskRunner::RunTaskScope::~RunTaskScope()",93957346924480,93957346924550],["v8::platform::DefaultForegroundTaskRunner::Terminate()",93957346924704,93957346925177],["v8::platform::DefaultForegroundTaskRunner::PostTask(std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> >)",93957346925712,93957346925932],["v8::platform::DefaultForegroundTaskRunner::PostDelayedTask(std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> >, double)",93957346926432,93957346926501],["v8::platform::DefaultForegroundTaskRunner::PostIdleTask(std::__1::unique_ptr<v8::IdleTask, std::__1::default_delete<v8::IdleTask> >)",93957346926592,93957346926863],["v8::platform::DefaultForegroundTaskRunner::PostNonNestableTask(std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> >)",93957346926880,93957346927100],["v8::platform::DefaultForegroundTaskRunner::PopTaskFromQueue(v8::platform::MessageLoopBehavior)",93957346927520,93957346928216],["v8::platform::DefaultForegroundTaskRunner::PopTaskFromIdleQueue()",93957346929136,93957346929370],["v8::platform::DefaultForegroundTaskRunner::~DefaultForegroundTaskRunner()",93957346929760,93957346929788],["void std::__1::vector<v8::platform::DefaultForegroundTaskRunner::DelayedEntry, std::__1::allocator<v8::platform::DefaultForegroundTaskRunner::DelayedEntry> >::__push_back_slow_path<v8::platform::DefaultForegroundTaskRunner::DelayedEntry>(v8::platform::DefaultForegroundTaskRunner::DelayedEntry&&)",93957346930064,93957346930456],["std::__1::__deque_iterator<std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >*, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >&, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >**, long, 0l> std::__1::move<std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >*, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >&, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >**, long, 0l, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >*, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >&, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >**, long, 0l>(std::__1::__deque_iterator<std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >*, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >&, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >**, long, 0l>, std::__1::__deque_iterator<std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >*, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >&, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >**, long, 0l>, std::__1::__deque_iterator<std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >*, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >&, std::__1::pair<v8::platform::DefaultForegroundTaskRunner::Nestability, std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > >**, long, 0l>)",93957346930800,93957346931458],["v8::platform::DefaultWorkerThreadsTaskRunner::DefaultWorkerThreadsTaskRunner(unsigned int, double (*)())",93957346931984,93957346932372],["v8::platform::DefaultWorkerThreadsTaskRunner::~DefaultWorkerThreadsTaskRunner()",93957346932544,93957346932697],["v8::platform::DefaultWorkerThreadsTaskRunner::PostTask(std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> >)",93957346932848,93957346932958],["v8::platform::DefaultWorkerThreadsTaskRunner::WorkerThread::~WorkerThread()",93957346933088,93957346933126],["v8::platform::DefaultWorkerThreadsTaskRunner::WorkerThread::Run()",93957346933184,93957346933260],["v8::platform::DelayedTaskQueue::~DelayedTaskQueue()",93957346933360,93957346933551],["v8::platform::DelayedTaskQueue::AppendDelayed(std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> >, double)",93957346933728,93957346933964],["v8::platform::DelayedTaskQueue::Terminate()",93957346934944,93957346934993],["v8::platform::tracing::TraceBufferRingBuffer::AddTraceEvent(unsigned long*)",93957346935088,93957346935391],["v8::platform::tracing::TraceBufferRingBuffer::Flush()",93957346935552,93957346935750],["v8::platform::tracing::TraceBuffer::CreateTraceBufferRingBuffer(unsigned long, v8::platform::tracing::TraceWriter*)",93957346937568,93957346937684],["v8::platform::tracing::TraceBufferRingBuffer::~TraceBufferRingBuffer()",93957346937856,93957346938011],["v8::platform::tracing::TraceBufferChunk::~TraceBufferChunk()",93957346938880,93957346939665],["v8::platform::tracing::TraceConfig::IsCategoryGroupEnabled(char const*) const",93957346939776,93957346941157],["v8::platform::tracing::TraceObject::Initialize(char, unsigned char const*, char const*, char const*, unsigned long, unsigned long, int, char const**, unsigned char const*, unsigned long const*, std::__1::unique_ptr<v8::ConvertableToTraceFormat, std::__1::default_delete<v8::ConvertableToTraceFormat> >*, unsigned int, long, long)",93957346941408,93957346942261],["v8::platform::tracing::TraceObject::UpdateDuration(long, long)",93957346942368,93957346942402],["v8::platform::tracing::JSONTraceWriter::~JSONTraceWriter()",93957346943696,93957346943732],["v8::platform::tracing::JSONTraceWriter::AppendTraceEvent(v8::platform::tracing::TraceObject*)",93957346943808,93957346945138],["v8::platform::tracing::TracingController::TracingController()",93957346945312,93957346945440],["v8::platform::tracing::TracingController::StopTracing()",93957346945792,93957346946217],["v8::platform::tracing::TracingController::Initialize(v8::platform::tracing::TraceBuffer*)",93957346946256,93957346946285],["v8::platform::tracing::TracingController::AddTraceEvent(char, unsigned char const*, char const*, char const*, unsigned long, unsigned long, int, char const**, unsigned char const*, unsigned long const*, std::__1::unique_ptr<v8::ConvertableToTraceFormat, std::__1::default_delete<v8::ConvertableToTraceFormat> >*, unsigned int)",93957346946304,93957346946433],["v8::platform::tracing::TracingController::UpdateTraceEventDuration(unsigned char const*, char const*, unsigned long)",93957346946640,93957346946727],["v8::platform::tracing::TracingController::StartTracing(v8::platform::tracing::TraceConfig*)",93957346946768,93957346947273],["v8::platform::tracing::TracingController::AddTraceStateObserver(v8::TracingController::TraceStateObserver*)",93957346947648,93957346947729],["void std::__1::__hash_table<v8::TracingController::TraceStateObserver*, std::__1::hash<v8::TracingController::TraceStateObserver*>, std::__1::equal_to<v8::TracingController::TraceStateObserver*>, std::__1::allocator<v8::TracingController::TraceStateObserver*> >::__assign_multi<std::__1::__hash_const_iterator<std::__1::__hash_node<v8::TracingController::TraceStateObserver*, void*>*> >(std::__1::__hash_const_iterator<std::__1::__hash_node<v8::TracingController::TraceStateObserver*, void*>*>, std::__1::__hash_const_iterator<std::__1::__hash_node<v8::TracingController::TraceStateObserver*, void*>*>)",93957346947888,93957346948268],["icu_68::SharedCalendar::~SharedCalendar()",93957346948320,93957346948376],["icu_68::Calendar::makeInstance(icu_68::Locale const&, UErrorCode&)",93957346948512,93957346949523],["icu_68::BasicCalendarFactory::~BasicCalendarFactory()",93957346949552,93957346949580],["icu_68::ICUCollatorFactory::~ICUCollatorFactory()",93957346949600,93957346949628],["icu_68::CalendarService::~CalendarService()",93957346949648,93957346949676],["icu_68::Calendar::Calendar(UErrorCode&)",93957346949952,93957346950182],["icu_68::Calendar::setWeekData(icu_68::Locale const&, char const*, UErrorCode&)",93957346950288,93957346951649],["icu_68::Calendar::Calendar(icu_68::TimeZone const&, icu_68::Locale const&, UErrorCode&)",93957346951872,93957346952111],["icu_68::Calendar::Calendar(icu_68::Calendar const&)",93957346952176,93957346952207],["icu_68::Calendar::createInstance(icu_68::TimeZone*, icu_68::Locale const&, UErrorCode&)",93957346952672,93957346953236],["icu_68::createStandardCalendar(ECalType, icu_68::Locale const&, UErrorCode&)",93957346953296,93957346954153],["icu_68::Calendar::adoptTimeZone(icu_68::TimeZone*)",93957346954832,93957346954884],["icu_68::Calendar::getNow()",93957346955088,93957346955098],["icu_68::Calendar::getCalendarTypeFromLocale(icu_68::Locale const&, char*, int, UErrorCode&)",93957346955168,93957346955460],["icu_68::Calendar::getTimeInMillis(UErrorCode&) const",93957346955712,93957346955817],["icu_68::Calendar::getKeywordValuesForLocale(char const*, icu_68::Locale const&, signed char, UErrorCode&)",93957346956032,93957346956126],["icu_68::Calendar::get(UCalendarDateFields, UErrorCode&) const",93957346956144,93957346956311],["icu_68::Calendar::set(UCalendarDateFields, int)",93957346956448,93957346956761],["icu_68::getCalendarType(char const*)",93957346957280,93957346957829],["icu_68::Calendar::isSet(UCalendarDateFields) const",93957346958432,93957346958461],["icu_68::Calendar::pinField(UCalendarDateFields, UErrorCode&)",93957346958912,93957346959542],["icu_68::Calendar::getTimeZone() const",93957346960240,93957346960253],["icu_68::Calendar::computeGregorianFields(int, UErrorCode&)",93957346960992,93957346961063],["icu_68::Calendar::getMinimalDaysInFirstWeek() const",93957346961088,93957346961100],["icu_68::Calendar::handleComputeFields(int, UErrorCode&)",93957346961248,93957346961375],["icu_68::Calendar::add(icu_68::Calendar::EDateFields, int, UErrorCode&)",93957346964416,93957346964426],["icu_68::Calendar::setLenient(signed char)",93957346968176,93957346968189],["icu_68::Calendar::fieldDifference(double, icu_68::Calendar::EDateFields, UErrorCode&)",93957346968496,93957346968510],["icu_68::Calendar::getDayOfWeekType(UCalendarDaysOfWeek, UErrorCode&) const",93957346970928,93957346971047],["icu_68::Calendar::isWeekend(double, UErrorCode&) const",93957346971120,93957346971436],["icu_68::Calendar::getMinimum(UCalendarDateFields) const",93957346971696,93957346971715],["icu_68::Calendar::getGreatestMinimum(UCalendarDateFields) const",93957346971760,93957346971782],["icu_68::Calendar::getLimit(UCalendarDateFields, icu_68::Calendar::ELimitType) const",93957346971824,93957346971995],["icu_68::Calendar::validateField(UCalendarDateFields, UErrorCode&)",93957346972592,93957346972808],["icu_68::Calendar::newerField(UCalendarDateFields, UCalendarDateFields) const",93957346972832,93957346972861],["icu_68::Calendar::computeJulianDay()",93957346973600,93957346974148],["icu_68::Calendar::handleComputeJulianDay(UCalendarDateFields)",93957346974656,93957346976049],["icu_68::Calendar::handleGetMonthLength(int, int) const",93957346977024,93957346977103],["icu_68::Calendar::getActualMaximum(UCalendarDateFields, UErrorCode&) const",93957346977184,93957346977578],["icu_68::Calendar::prepareGetActual(UCalendarDateFields, signed char, UErrorCode&)",93957346978512,93957346981046],["icu_68::BasicCalendarFactory::updateVisibleIDs(icu_68::Hashtable&, UErrorCode&) const",93957346982064,93957346982493],["icu_68::CalendarService::isDefault() const",93957346982976,93957346982993],["icu_68::CalendarService::handleDefault(icu_68::ICUServiceKey const&, icu_68::UnicodeString*, UErrorCode&) const",93957346983088,93957346983333],["icu_68::CalendarService::CalendarService()",93957346983392,93957346983585],["void icu_68::UnifiedCache::get<icu_68::SharedCalendar>(icu_68::CacheKey<icu_68::SharedCalendar> const&, void const*, icu_68::SharedCalendar const*&, UErrorCode&) const",93957346983648,93957346983788],["icu_68::LocaleCacheKey<icu_68::SharedCalendar>::hashCode() const",93957346983856,93957346983910],["icu_68::LocaleCacheKey<icu_68::SharedCalendar>::operator==(icu_68::CacheKeyBase const&) const",93957346984016,93957346984081],["icu_68::BuddhistCalendar::getDynamicClassID() const",93957346984144,93957346984157],["icu_68::DangiCalendar::~DangiCalendar()",93957346984208,93957346984218],["icu_68::BuddhistCalendar::clone() const",93957346984256,93957346984317],["icu_68::BuddhistCalendar::handleGetExtendedYear()",93957346984336,93957346984410],["icu_68::BuddhistCalendar::handleComputeFields(int, UErrorCode&)",93957346984432,93957346984494],["icu_68::BuddhistCalendar::defaultCenturyStart() const",93957346984528,93957346984586],["icu_68::BuddhistCalendar::defaultCenturyStartYear() const",93957346984912,93957346984968],["icu_68::ChineseCalendar::ChineseCalendar(icu_68::Locale const&, UErrorCode&)",93957346985088,93957346985197],["icu_68::ChineseCalendar::ChineseCalendar(icu_68::Locale const&, int, icu_68::TimeZone const*, UErrorCode&)",93957346985440,93957346985555],["icu_68::CECalendar::~CECalendar()",93957346985648,93957346985658],["icu_68::ChineseCalendar::getType() const",93957346985696,93957346985709],["icu_68::ChineseCalendar::handleGetExtendedYear()",93957346985744,93957346985863],["icu_68::ChineseCalendar::handleComputeFields(int, UErrorCode&)",93957346985952,93957346985993],["icu_68::ChineseCalendar::handleComputeMonthStart(int, int, signed char) const",93957346986016,93957346986363],["icu_68::ChineseCalendar::roll(UCalendarDateFields, int, UErrorCode&)",93957346986528,93957346986907],["calendar_chinese_cleanup()",93957346987408,93957346987557],["icu_68::ChineseCalendar::synodicMonthsBetween(int, int) const",93957346988000,93957346988052],["icu_68::ChineseCalendar::hasNoMajorSolarTerm(int) const",93957346988416,93957346988501],["icu_68::ChineseCalendar::computeChineseFields(int, int, int, signed char)",93957346988624,93957346989297],["icu_68::ChineseCalendar::offsetMonth(int, int, int)",93957346989632,93957346989842],["icu_68::ChineseCalendar::defaultCenturyStart() const",93957346989936,93957346989994],["icu_68::initializeSystemDefaultCentury()",93957346990064,93957346990396],["icu_68::CalendarAstronomer::CalendarAstronomer()",93957346990416,93957346990529],["icu_68::CalendarAstronomer::eclipticToEquatorial(icu_68::CalendarAstronomer::Equatorial&, double, double)",93957346990640,93957346991030],["icu_68::CalendarAstronomer::getSunLongitude(double, double&, double&)",93957346991152,93957346991508],["icu_68::PtnSkeleton::~PtnSkeleton()",93957346991536,93957346991546],["icu_68::CalendarAstronomer::timeOfAngle(icu_68::CalendarAstronomer::AngleFunc&, double, double, double, signed char)",93957346991616,93957346992358],["icu_68::CalendarAstronomer::getMoonAge()",93957346993104,93957346993174],["icu_68::CalendarCache::get(icu_68::CalendarCache**, int, UErrorCode&)",93957346993248,93957346993505],["icu_68::CalendarCache::~CalendarCache()",93957346993792,93957346993823],["icu_68::SunTimeAngleFunc::eval(icu_68::CalendarAstronomer&)",93957346993872,93957346993971],["icu_68::ICUCollatorFactory::create(icu_68::ICUServiceKey const&, icu_68::ICUService const*, UErrorCode&) const",93957346994064,93957346994369],["icu_68::Collator::safeClone() const",93957346995936,93957346995947],["icu_68::Collator::compare(icu_68::UnicodeString const&, icu_68::UnicodeString const&, int) const",93957346995984,93957346996015],["icu_68::WholeStringBreakIterator::createBufferClone(void*, int&, UErrorCode&)",93957346996048,93957346996067],["icu_68::Collator::getAvailableLocales(int&)",93957346996288,93957346996349],["icu_68::Collator::Collator(icu_68::Collator const&)",93957346997040,93957346997056],["icu_68::PluralFormat::operator!=(icu_68::Format const&) const",93957346997104,93957346997121],["icu_68::Collator::getKeywordValuesForLocale(char const*, icu_68::Locale const&, signed char, UErrorCode&)",93957346997200,93957346997235],["icu_68::Collator::setStrength(icu_68::Collator::ECollationStrength)",93957346997296,93957346997337],["icu_68::Collator::getMaxVariable() const",93957346997376,93957346997387],["icu_68::Collator::internalGetShortDefinitionString(char const*, char*, int, UErrorCode&) const",93957346997424,93957346997445],["icu_68::Collator::internalNextSortKeyPart(UCharIterator*, unsigned int*, unsigned char*, int, UErrorCode&) const",93957346997648,93957346997669],["icu_68::ICUCollatorService::cloneInstance(icu_68::UObject*) const",93957346997808,93957346997822],["icu_68::(anonymous namespace)::getReorderCode(char const*)",93957346998176,93957346998325],["icu_68::ICUCollatorService::ICUCollatorService()",93957346998512,93957346998746],["icu_68::uprv_collation_root_cleanup()",93957346999056,93957346999100],["icu_68::CollationRoot::getRootCacheEntry(UErrorCode&)",93957346999184,93957346999290],["icu_68::CollationTailoring::CollationTailoring(icu_68::CollationSettings const*)",93957346999424,93957346999685],["icu_68::CollationTailoring::~CollationTailoring()",93957346999888,93957346999916],["icu_68::CollationTailoring::setVersion(unsigned char const*, unsigned char const*)",93957347000112,93957347000191],["icu_68::CollationCacheEntry::~CollationCacheEntry()",93957347000224,93957347000294],["icu_68::CollationSettings::CollationSettings(icu_68::CollationSettings const&)",93957347000384,93957347000532],["icu_68::CollationSettings::~CollationSettings()",93957347000992,93957347001040],["icu_68::CollationSettings::operator==(icu_68::CollationSettings const&) const",93957347001104,93957347001205],["icu_68::CollationSettings::resetReordering()",93957347001888,93957347001923],["icu_68::CollationSettings::setReordering(icu_68::CollationData const&, int const*, int, UErrorCode&)",93957347002288,93957347004410],["icu_68::CollationSettings::setStrength(int, int, UErrorCode&)",93957347004480,93957347004542],["icu_68::CollationSettings::setCaseFirst(UColAttributeValue, int, UErrorCode&)",93957347004608,93957347004696],["icu_68::CollationSettings::setMaxVariable(int, int, UErrorCode&)",93957347004768,93957347004820],["icu_68::CollationData::getFinalCE32(unsigned int) const",93957347004896,93957347004965],["icu_68::CollationData::getFirstPrimaryForGroup(int) const",93957347005552,93957347005625],["icu_68::CollationData::getGroupForPrimary(unsigned int) const",93957347005712,93957347005930],["icu_68::CollationData::makeReorderRanges(int const*, int, signed char, icu_68::UVector32&, UErrorCode&) const",93957347005968,93957347007940],["icu_68::Collation::incThreeBytePrimaryByOffset(unsigned int, signed char, int)",93957347008112,93957347008324],["icu_68::Collation::decThreeBytePrimaryByOneStep(unsigned int, signed char, int)",93957347008400,93957347008507],["icu_68::Collation::unassignedPrimaryFromCodePoint(int)",93957347008752,93957347008931],["icu_68::CollationDataReader::isAcceptable(void*, char const*, char const*, UDataInfo const*)",93957347011360,93957347011430],["icu_68::CollationFastLatin::getOptions(icu_68::CollationData const*, icu_68::CollationSettings const&, unsigned short*, int)",93957347011552,93957347012400],["icu_68::CollationFastLatin::nextPair(unsigned short const*, int, unsigned int, char16_t const*, unsigned char const*, int&, int&)",93957347016416,93957347016876],["icu_68::CopticCalendar::getDynamicClassID() const",93957347021664,93957347021677],["icu_68::CopticCalendar::clone() const",93957347021712,93957347021773],["icu_68::CopticCalendar::handleGetExtendedYear()",93957347021792,93957347021913],["icu_68::CopticCalendar::defaultCenturyStart() const",93957347022128,93957347022186],["icu_68::CopticCalendar::defaultCenturyStartYear() const",93957347022480,93957347022536],["icu_68::CECalendar::CECalendar(icu_68::Locale const&, UErrorCode&)",93957347022560,93957347022640],["icu_68::CECalendar::handleComputeMonthStart(int, int, signed char) const",93957347022672,93957347022822],["icu_68::CECalendar::jdToCE(int, int, int&, int&, int&)",93957347022864,93957347023057],["icu_68::CurrencyUnit::CurrencyUnit(icu_68::CurrencyUnit const&)",93957347023328,93957347023379],["icu_68::CurrencyUnit::CurrencyUnit()",93957347023504,93957347023619],["icu_68::CurrencyUnit::clone() const",93957347023696,93957347023776],["icu_68::MeasureUnit::~MeasureUnit()",93957347023792,93957347023820],["icu_68::DangiCalendar::DangiCalendar(icu_68::Locale const&, UErrorCode&)",93957347023840,93957347023909],["icu_68::DangiCalendar::clone() const",93957347024752,93957347024813],["icu_68::DangiCalendar::getDynamicClassID() const",93957347024832,93957347024845],["icu_68::DateFmtBestPattern::~DateFmtBestPattern()",93957347024896,93957347024938],["icu_68::LocaleCacheKey<icu_68::DateFmtBestPattern>::createObject(void const*, UErrorCode&) const",93957347025008,93957347025022],["icu_68::DateFmtBestPatternKey::~DateFmtBestPatternKey()",93957347025088,93957347025160],["icu_68::DateFormat::DateFormat(icu_68::DateFormat const&)",93957347025232,93957347025393],["icu_68::DateFormat::~DateFormat()",93957347025568,93957347025637],["icu_68::DateFormat::format(icu_68::Formattable const&, icu_68::UnicodeString&, icu_68::FieldPosition&, UErrorCode&) const",93957347025776,93957347025975],["icu_68::DateFormat::format(double, icu_68::UnicodeString&, icu_68::FieldPositionIterator*, UErrorCode&) const",93957347026192,93957347026321],["icu_68::DateFormat::format(double, icu_68::UnicodeString&) const",93957347026368,93957347026588],["icu_68::DateFormat::parseObject(icu_68::UnicodeString const&, icu_68::Formattable&, icu_68::ParsePosition&) const",93957347026832,93957347027019],["icu_68::DateFormat::createDateTimeInstance(icu_68::DateFormat::EStyle, icu_68::DateFormat::EStyle, icu_68::Locale const&)",93957347027056,93957347027079],["icu_68::DateFormat::create(icu_68::DateFormat::EStyle, icu_68::DateFormat::EStyle, icu_68::Locale const&)",93957347027120,93957347027381],["icu_68::DateFormat::createInstanceForSkeleton(icu_68::UnicodeString const&, icu_68::Locale const&, UErrorCode&)",93957347027856,93957347028041],["icu_68::DateFormat::setCalendar(icu_68::Calendar const&)",93957347028096,93957347028150],["icu_68::DateFormat::adoptNumberFormat(icu_68::NumberFormat*)",93957347028176,93957347028252],["icu_68::DateFormat::getNumberFormat() const",93957347028320,93957347028333],["icu_68::DateFormat::setTimeZone(icu_68::TimeZone const&)",93957347028368,93957347028392],["icu_68::DateFormat::setLenient(signed char)",93957347028432,93957347028534],["icu_68::DateFormat::setCalendarLenient(signed char)",93957347028672,93957347028700],["icu_68::DateFormat::setContext(UDisplayContext, UErrorCode&)",93957347028736,93957347028777],["icu_68::DateFormat::setBooleanAttribute(UDateFormatBooleanAttribute, signed char, UErrorCode&)",93957347028832,93957347028887],["icu_68::DateFmtBestPatternKey::hashCode() const",93957347028928,93957347029004],["icu_68::DateFmtBestPatternKey::operator==(icu_68::CacheKeyBase const&) const",93957347029136,93957347029331],["icu_68::LocaleCacheKey<icu_68::DateFmtBestPattern>::~LocaleCacheKey()",93957347029616,93957347029658],["icu_68::LocaleCacheKey<icu_68::DateFmtBestPattern>::hashCode() const",93957347029728,93957347029782],["icu_68::DecimalFormat::getStaticClassID()",93957347029888,93957347029901],["icu_68::DecimalFormat::touch(UErrorCode&)",93957347031152,93957347031799],["icu_68::number::impl::DecimalFormatFields::~DecimalFormatFields()",93957347032112,93957347032291],["icu_68::DecimalFormat::setSignificantDigitsUsed(signed char)",93957347032960,93957347033074],["icu_68::DecimalFormat::setMinimumSignificantDigits(int)",93957347033168,93957347033239],["icu_68::DecimalFormat::setParseNoExponent(signed char)",93957347033312,93957347033379],["icu_68::DecimalFormat::setMinimumGroupingDigits(int)",93957347033456,93957347033506],["icu_68::DecimalFormat::setSignAlwaysShown(signed char)",93957347033600,93957347033667],["icu_68::DecimalFormat::getAttribute(UNumberFormatAttribute, UErrorCode&) const",93957347033744,93957347034065],["icu_68::DecimalFormat::setGroupingUsed(signed char)",93957347034144,93957347034233],["icu_68::DecimalFormat::setLenient(signed char)",93957347034336,93957347034451],["icu_68::DecimalFormat::DecimalFormat(icu_68::DecimalFormat const&)",93957347034752,93957347035913],["icu_68::DecimalFormat::~DecimalFormat()",93957347036048,93957347036175],["icu_68::DecimalFormat::operator==(icu_68::Format const&) const",93957347036256,93957347036411],["icu_68::DecimalFormat::format(double, icu_68::UnicodeString&, icu_68::FieldPosition&, UErrorCode&) const",93957347036992,93957347037564],["icu_68::DecimalFormat::format(int, icu_68::UnicodeString&, icu_68::FieldPosition&) const",93957347038176,93957347038193],["icu_68::DecimalFormat::format(int, icu_68::UnicodeString&, icu_68::FieldPositionIterator*, UErrorCode&) const",93957347038240,93957347038260],["icu_68::DecimalFormat::format(long, icu_68::UnicodeString&, icu_68::FieldPosition&, UErrorCode&) const",93957347038784,93957347039281],["icu_68::DecimalFormat::format(icu_68::StringPiece, icu_68::UnicodeString&, icu_68::FieldPositionIterator*, UErrorCode&) const",93957347039824,93957347040297],["icu_68::DecimalFormat::format(icu_68::number::impl::DecimalQuantity const&, icu_68::UnicodeString&, icu_68::FieldPosition&, UErrorCode&) const",93957347040768,93957347041198],["icu_68::DecimalFormat::parseCurrency(icu_68::UnicodeString const&, icu_68::ParsePosition&) const",93957347041744,93957347042408],["icu_68::DecimalFormat::adoptDecimalFormatSymbols(icu_68::DecimalFormatSymbols*)",93957347042448,93957347042555],["icu_68::DecimalFormat::getCurrencyPluralInfo() const",93957347042720,93957347042746],["icu_68::DecimalFormat::setCurrencyPluralInfo(icu_68::CurrencyPluralInfo const&)",93957347042864,93957347042965],["icu_68::DecimalFormat::setNegativePrefix(icu_68::UnicodeString const&)",93957347043168,93957347043353],["icu_68::DecimalFormat::setPositiveSuffix(icu_68::UnicodeString const&)",93957347043440,93957347043625],["icu_68::DecimalFormat::setNegativeSuffix(icu_68::UnicodeString const&)",93957347043712,93957347043897],["icu_68::DecimalFormat::getRoundingIncrement() const",93957347044048,93957347044089],["icu_68::DecimalFormat::getRoundingMode() const",93957347044176,93957347044215],["icu_68::DecimalFormat::getFormatWidth() const",93957347044336,93957347044371],["icu_68::DecimalFormat::getPadCharacterString() const",93957347044448,93957347044549],["icu_68::DecimalFormat::getPadPosition() const",93957347044880,93957347044917],["icu_68::DecimalFormat::isScientificNotation() const",93957347045008,93957347045047],["icu_68::DecimalFormat::getMinimumExponentDigits() const",93957347045120,93957347045155],["icu_68::DecimalFormat::isExponentSignAlwaysShown() const",93957347045232,93957347045267],["icu_68::DecimalFormat::setGroupingSize(int)",93957347045344,93957347045394],["icu_68::DecimalFormat::setDecimalSeparatorAlwaysShown(signed char)",93957347045472,93957347045533],["icu_68::DecimalFormat::toPattern(icu_68::UnicodeString&) const",93957347045600,93957347046031],["icu_68::number::impl::DecimalFormatProperties::~DecimalFormatProperties()",93957347046448,93957347046598],["icu_68::DecimalFormat::applyPattern(icu_68::UnicodeString const&, UParseError&, UErrorCode&)",93957347046832,93957347046852],["icu_68::DecimalFormat::applyLocalizedPattern(icu_68::UnicodeString const&, UParseError&, UErrorCode&)",93957347046944,93957347046964],["icu_68::DecimalFormat::setMaximumIntegerDigits(int)",93957347047152,93957347047223],["icu_68::DecimalFormat::setMaximumFractionDigits(int)",93957347047312,93957347047397],["icu_68::DecimalFormat::setCurrency(char16_t const*, UErrorCode&)",93957347047488,93957347047916],["icu_68::DecimalFormat::formatToDecimalQuantity(icu_68::Formattable const&, icu_68::number::impl::DecimalQuantity&, UErrorCode&) const",93957347048032,93957347048288],["icu_68::DecimalFormat::setupFastFormat()",93957347048336,93957347048849],["icu_68::NumberFormat::isLenient() const",93957347049200,93957347049212],["icu_68::CurrencyAmount::CurrencyAmount(icu_68::Formattable const&, icu_68::ConstChar16Ptr, UErrorCode&)",93957347049680,93957347049818],["icu_68::CurrencyAmount::~CurrencyAmount()",93957347049888,93957347049898],["icu_68::CurrencyAmount::getDynamicClassID() const",93957347049936,93957347049949],["icu_68::CurrencyPluralInfo::initialize(icu_68::Locale const&, UErrorCode&)",93957347049968,93957347050135],["icu_68::CurrencyPluralInfo::CurrencyPluralInfo(icu_68::CurrencyPluralInfo const&)",93957347050176,93957347050207],["icu_68::CurrencyPluralInfo::initHash(UErrorCode&)",93957347050544,93957347050741],["icu_68::CurrencyPluralInfo::~CurrencyPluralInfo()",93957347051088,93957347051273],["icu_68::CurrencyPluralInfo::clone() const",93957347051312,93957347051397],["icu_68::CurrencyPluralInfo::setupCurrencyPluralPattern(icu_68::Locale const&, UErrorCode&)",93957347051696,93957347053985],["icu_68::ValueComparator(UElement, UElement)",93957347054096,93957347054175],["icu_68::DecimalFormatSymbols::DecimalFormatSymbols(UErrorCode&)",93957347054192,93957347054834],["icu_68::DecimalFormatSymbols::DecimalFormatSymbols(icu_68::Locale const&, UErrorCode&)",93957347057136,93957347057775],["icu_68::DecimalFormatSymbols::initialize()",93957347058432,93957347059969],["icu_68::DecimalFormatSymbols::~DecimalFormatSymbols()",93957347060464,93957347060492],["icu_68::DecimalFormatSymbols::operator=(icu_68::DecimalFormatSymbols const&)",93957347061120,93957347061419],["icu_68::DecimalFormatSymbols::setCurrency(char16_t const*, UErrorCode&)",93957347062032,93957347062945],["(anonymous namespace)::ParseDataSink::~ParseDataSink()",93957347063024,93957347063052],["icu_68::DecimalFormatSymbols::setSymbol(icu_68::DecimalFormatSymbols::ENumberFormatSymbol, icu_68::UnicodeString const&, signed char)",93957347063552,93957347064124],["icu_68::SharedDateFormatSymbols::~SharedDateFormatSymbols()",93957347065024,93957347065123],["icu_68::LocaleCacheKey<icu_68::SharedDateFormatSymbols>::createObject(void const*, UErrorCode&) const",93957347065248,93957347065652],["icu_68::DateFormatSymbols::createForLocale(icu_68::Locale const&, UErrorCode&)",93957347065680,93957347066061],["icu_68::DateFormatSymbols::initializeData(icu_68::Locale const&, char const*, UErrorCode&, signed char)",93957347066176,93957347093296],["icu_68::DateFormatSymbols::DateFormatSymbols(icu_68::DateFormatSymbols const&)",93957347093424,93957347093526],["icu_68::DateFormatSymbols::assignArray(icu_68::UnicodeString*&, int&, icu_68::UnicodeString const*, int)",93957347107632,93957347108061],["icu_68::DateFormatSymbols::dispose()",93957347108784,93957347110855],["icu_68::DateFormatSymbols::~DateFormatSymbols()",93957347110944,93957347111026],["icu_68::DateFormatSymbols::arrayCompare(icu_68::UnicodeString const*, icu_68::UnicodeString const*, int)",93957347111360,93957347111555],["icu_68::DateFormatSymbols::operator==(icu_68::DateFormatSymbols const&) const",93957347111664,93957347113538],["icu_68::DateFormatSymbols::getWeekdays(int&, icu_68::DateFormatSymbols::DtContextType, icu_68::DateFormatSymbols::DtWidthType) const",93957347113696,93957347113895],["icu_68::DateFormatSymbols::getTimeSeparatorString(icu_68::UnicodeString&) const",93957347114048,93957347114071],["icu_68::DateFormatSymbols::getPatternUChars()",93957347114112,93957347114125],["icu_68::DateFormatSymbols::isNumericField(UDateFormatField, int)",93957347114192,93957347114252],["icu_68::initLeapMonthPattern(icu_68::UnicodeString*, int, icu_68::(anonymous namespace)::CalendarDataSink&, icu_68::CharString&, UErrorCode&)",93957347114368,93957347114714],["icu_68::initField(icu_68::UnicodeString**, int&, icu_68::(anonymous namespace)::CalendarDataSink&, icu_68::CharString&, int, UErrorCode&)",93957347115344,93957347115973],["icu_68::(anonymous namespace)::CalendarDataSink::~CalendarDataSink()",93957347116256,93957347116284],["icu_68::(anonymous namespace)::CalendarDataSink::processAliasFromValue(icu_68::UnicodeString&, icu_68::ResourceValue&, UErrorCode&)",93957347119536,93957347120265],["icu_68::Hashtable::puti(icu_68::UnicodeString const&, int, UErrorCode&)",93957347120368,93957347120454],["icu_68::(anonymous namespace)::CalendarDataSink::processResource(icu_68::UnicodeString&, char const*, icu_68::ResourceValue&, UErrorCode&)",93957347120560,93957347123215],["icu_68::UnicodeString::compare(icu_68::ConstChar16Ptr, int) const",93957347123296,93957347123334],["icu_68::UnicodeString::retainBetween(int, int)",93957347123680,93957347123803],["icu_68::LocaleCacheKey<icu_68::SharedDateFormatSymbols>::~LocaleCacheKey()",93957347123904,93957347123946],["icu_68::LocaleCacheKey<icu_68::SharedDateFormatSymbols>::hashCode() const",93957347124016,93957347124070],["icu_68::FormattedDateIntervalData::~FormattedDateIntervalData()",93957347124176,93957347124186],["icu_68::FormattedDateInterval::~FormattedDateInterval()",93957347124224,93957347124280],["icu_68::FormattedList::toString(UErrorCode&) const",93957347124352,93957347124456],["icu_68::FormattedList::appendTo(icu_68::Appendable&, UErrorCode&) const",93957347124576,93957347124619],["icu_68::DateIntervalFormat::getDynamicClassID() const",93957347124672,93957347124685],["icu_68::DateIntervalFormat::operator=(icu_68::DateIntervalFormat const&)",93957347124864,93957347125775],["icu_68::DateIntervalFormat::~DateIntervalFormat()",93957347126224,93957347126252],["icu_68::DateIntervalFormat::operator==(icu_68::Format const&) const",93957347126720,93957347127396],["icu_68::DateIntervalFormat::format(icu_68::DateInterval const*, icu_68::UnicodeString&, icu_68::FieldPosition&, UErrorCode&) const",93957347127568,93957347127886],["icu_68::DateIntervalFormat::formatToValue(icu_68::Calendar&, icu_68::Calendar&, UErrorCode&) const",93957347129616,93957347130209],["icu_68::DateIntervalFormat::initializePattern(UErrorCode&)",93957347131472,93957347133474],["icu_68::DateIntervalFormat::setTimeZone(icu_68::TimeZone const&)",93957347133584,93957347133670],["icu_68::DateIntervalFormat::setContext(UDisplayContext, UErrorCode&)",93957347133760,93957347133801],["icu_68::DateIntervalFormat::DateIntervalFormat(icu_68::Locale const&, icu_68::DateIntervalInfo*, icu_68::UnicodeString const*, UErrorCode&)",93957347133856,93957347134544],["icu_68::DateIntervalFormat::getDateTimeSkeleton(icu_68::UnicodeString const&, icu_68::UnicodeString&, icu_68::UnicodeString&, icu_68::UnicodeString&, icu_68::UnicodeString&)",93957347135952,93957347136987],["icu_68::DateIntervalFormat::setPatternInfo(UCalendarDateFields, icu_68::UnicodeString const*, icu_68::UnicodeString const*, signed char)",93957347137776,93957347137935],["icu_68::DateIntervalFormat::concatSingleDate2TimeInterval(icu_68::UnicodeString&, icu_68::UnicodeString const&, UCalendarDateFields, UErrorCode&)",93957347138160,93957347138599],["icu_68::DateIntervalFormat::setIntervalPattern(UCalendarDateFields, icu_68::UnicodeString const&, signed char)",93957347139680,93957347140336],["icu_68::DateIntervalFormat::adjustFieldWidth(icu_68::UnicodeString const&, icu_68::UnicodeString const&, icu_68::UnicodeString const&, signed char, signed char, icu_68::UnicodeString&)",93957347140704,93957347142386],["icu_68::DateIntervalFormat::findReplaceInPattern(icu_68::UnicodeString&, icu_68::UnicodeString const&, icu_68::UnicodeString const&)",93957347143472,93957347144642],["icu_68::DateIntervalInfo::initHash(UErrorCode&)",93957347144672,93957347144845],["icu_68::DateIntervalInfo::initializeData(icu_68::Locale const&, UErrorCode&)",93957347144944,93957347146417],["icu_68::DateIntervalInfo::setFallbackIntervalPattern(icu_68::UnicodeString const&, UErrorCode&)",93957347146832,93957347147046],["icu_68::DateIntervalInfo::copyHash(icu_68::Hashtable const*, icu_68::Hashtable*, UErrorCode&)",93957347147264,93957347147943],["icu_68::DateIntervalInfo::~DateIntervalInfo()",93957347148128,93957347148187],["icu_68::DateIntervalInfo::operator==(icu_68::DateIntervalInfo const&) const",93957347148272,93957347148413],["icu_68::DateIntervalInfo::calendarFieldToIntervalIndex(UCalendarDateFields, UErrorCode&)",93957347148544,93957347148596],["icu_68::TimeZoneRule::getName(icu_68::UnicodeString&) const",93957347148624,93957347148655],["icu_68::DateIntervalInfo::DateIntervalSink::~DateIntervalSink()",93957347148704,93957347148754],["icu_68::DateIntervalInfo::getBestSkeleton(icu_68::UnicodeString const&, signed char&) const",93957347148880,93957347150794],["icu_68::DateIntervalInfo::DateIntervalSink::put(char const*, icu_68::ResourceValue&, signed char, UErrorCode&)",93957347150976,93957347151682],["icu_68::DateIntervalInfo::DateIntervalSink::processSkeletonTable(char const*, icu_68::ResourceValue&, UErrorCode&)",93957347151920,93957347152209],["icu_68::DateIntervalInfo::DateIntervalSink::setIntervalPatternIfAbsent(char const*, UCalendarDateFields, icu_68::ResourceValue const&, UErrorCode&)",93957347152320,93957347152691],["icu_68::DateTimePatternGenerator::createInstance(icu_68::Locale const&, UErrorCode&)",93957347152720,93957347152834],["icu_68::DateTimePatternGenerator::DateTimePatternGenerator(icu_68::Locale const&, UErrorCode&, signed char)",93957347152976,93957347154450],["icu_68::DateTimePatternGenerator::DateTimePatternGenerator(icu_68::DateTimePatternGenerator const&)",93957347154832,93957347156262],["icu_68::PatternMap::copyFrom(icu_68::PatternMap const&, UErrorCode&)",93957347157136,93957347157750],["icu_68::DateTimePatternGenerator::~DateTimePatternGenerator()",93957347157984,93957347158958],["deleteAllowedHourFormats_68",93957347158992,93957347159002],["icu_68::DateTimePatternGenerator::addCanonicalItems(UErrorCode&)",93957347159040,93957347159281],["icu_68::DateTimePatternGenerator::addCLDRData(icu_68::Locale const&, UErrorCode&)",93957347159840,93957347161049],["icu_68::DateTimePatternGenerator::loadAllowedHourFormatsData(UErrorCode&)",93957347161680,93957347161863],["icu_68::getAllowedHourFormatsLangCountry(char const*, char const*, UErrorCode&)",93957347162720,93957347162974],["icu_68::DateTimeMatcher::set(icu_68::UnicodeString const&, icu_68::FormatParser*, icu_68::PtnSkeleton&)",93957347163072,93957347164018],["icu_68::DateTimePatternGenerator::staticGetSkeleton(icu_68::UnicodeString const&, UErrorCode&)",93957347164304,93957347165471],["icu_68::FormatParser::getQuoteLiteral(icu_68::UnicodeString&, int*)",93957347166704,93957347167204],["icu_68::CEFinalizer::~CEFinalizer()",93957347167584,93957347167594],["icu_68::DateTimePatternGenerator::AvailableFormatsSink::~AvailableFormatsSink()",93957347167648,93957347167698],["icu_68::DateTimePatternGenerator::AppendItemNamesSink::fillInMissing()",93957347167920,93957347168362],["icu_68::DateTimePatternGenerator::getFieldDisplayName(UDateTimePatternField, UDateTimePGDisplayWidth) const",93957347168576,93957347168630],["icu_68::DateTimePatternGenerator::getBestPattern(icu_68::UnicodeString const&, UDateTimePatternMatchOptions, UErrorCode&)",93957347168672,93957347169837],["icu_68::DateTimePatternGenerator::getBestRaw(icu_68::DateTimeMatcher&, int, icu_68::DistanceInfo*, UErrorCode&, icu_68::PtnSkeleton const**)",93957347170800,93957347172331],["icu_68::DateTimeMatcher::getFieldMask() const",93957347174160,93957347174327],["icu_68::DateTimePatternGenerator::addPatternWithSkeleton(icu_68::UnicodeString const&, icu_68::UnicodeString const*, signed char, icu_68::UnicodeString&, UErrorCode&)",93957347175616,93957347176559],["icu_68::PatternMap::getPatternFromSkeleton(icu_68::PtnSkeleton const&, icu_68::PtnSkeleton const**) const",93957347176880,93957347177351],["icu_68::DateTimePatternGenerator::getAppendFormatNumber(char const*) const",93957347178384,93957347178738],["icu_68::DateTimePatternGenerator::clone() const",93957347179376,93957347179427],["icu_68::PatternMap::~PatternMap()",93957347179520,93957347179599],["icu_68::FormatParser::FormatParser()",93957347180016,93957347180851],["icu_68::FormatParser::~FormatParser()",93957347181488,93957347181516],["icu_68::FormatParser::getCanonicalIndex(icu_68::UnicodeString const&, signed char)",93957347181712,93957347181991],["icu_68::PtnElem::~PtnElem()",93957347182080,93957347182164],["icu_68::DateTimePatternGenerator::AppendItemNamesSink::put(char const*, icu_68::ResourceValue&, signed char, UErrorCode&)",93957347182608,93957347183398],["icu_68::(anonymous namespace)::AllowedHourFormatsSink::put(char const*, icu_68::ResourceValue&, signed char, UErrorCode&)",93957347184064,93957347185612],["icu_68::EthiopicCalendar::getDynamicClassID() const",93957347186144,93957347186157],["icu_68::EthiopicCalendar::clone() const",93957347186208,93957347186282],["icu_68::EthiopicCalendar::handleGetExtendedYear()",93957347186320,93957347186464],["icu_68::EthiopicCalendar::handleGetLimit(UCalendarDateFields, icu_68::Calendar::ELimitType) const",93957347186688,93957347186714],["icu_68::initializeSystemDefaultCentury()",93957347186784,93957347187069],["icu_68::EthiopicCalendar::getJDEpochOffset() const",93957347187168,93957347187179],["icu_68::Formattable::Formattable()",93957347187200,93957347187270],["icu_68::Formattable::Formattable(int)",93957347187392,93957347187479],["icu_68::Formattable::setDecimalNumber(icu_68::StringPiece, UErrorCode&)",93957347187584,93957347187798],["icu_68::Formattable::operator=(icu_68::Formattable const&)",93957347187904,93957347188524],["icu_68::Formattable::~Formattable()",93957347188784,93957347188831],["icu_68::(anonymous namespace)::hashLSR(UElement)",93957347188896,93957347188905],["icu_68::Formattable::getLong(UErrorCode&) const",93957347188960,93957347189191],["icu_68::Formattable::getObject() const",93957347189408,93957347189428],["icu_68::Formattable::setLong(int)",93957347189488,93957347189525],["icu_68::Formattable::setString(icu_68::UnicodeString const&)",93957347189584,93957347189661],["icu_68::Formattable::adoptObject(icu_68::UObject*)",93957347189728,93957347189762],["icu_68::Formattable::populateDecimalQuantity(icu_68::number::impl::DecimalQuantity&, UErrorCode&) const",93957347189840,93957347189953],["icu_68::FieldPosition::getDynamicClassID() const",93957347190096,93957347190109],["icu_68::Format::Format(icu_68::Format const&)",93957347190144,93957347190219],["icu_68::Format::format(icu_68::Formattable const&, icu_68::UnicodeString&, UErrorCode&) const",93957347190288,93957347190434],["icu_68::Format::getLocaleID(ULocDataLocaleType, UErrorCode&) const",93957347190512,93957347190554],["icu_68::FormattedValueFieldPositionIteratorImpl::FormattedValueFieldPositionIteratorImpl(int, UErrorCode&)",93957347190608,93957347190656],["icu_68::FormattedValueFieldPositionIteratorImpl::~FormattedValueFieldPositionIteratorImpl()",93957347190720,93957347190779],["icu_68::FormattedValueFieldPositionIteratorImpl::toTempString(UErrorCode&) const",93957347190816,93957347190912],["icu_68::FormattedValueFieldPositionIteratorImpl::nextPosition(icu_68::ConstrainedFieldPosition&, UErrorCode&) const",93957347191008,93957347191350],["icu_68::FormattedValueFieldPositionIteratorImpl::appendString(icu_68::UnicodeString, UErrorCode&)",93957347191392,93957347191466],["icu_68::FormattedValueFieldPositionIteratorImpl::sort()",93957347192512,93957347193141],["icu_68::FormattedValueStringBuilderImpl::~FormattedValueStringBuilderImpl()",93957347193232,93957347193295],["icu_68::FormattedValueStringBuilderImpl::toString(UErrorCode&) const",93957347193376,93957347193404],["icu_68::FormattedValueStringBuilderImpl::appendTo(icu_68::Appendable&, UErrorCode&) const",93957347193440,93957347193507],["icu_68::FormattedValueStringBuilderImpl::nextPositionImpl(icu_68::ConstrainedFieldPosition&, icu_68::FormattedStringBuilder::Field, UErrorCode&) const",93957347193552,93957347194771],["icu_68::FormattedValueStringBuilderImpl::getAllFieldPositions(icu_68::FieldPositionIteratorHandler&, UErrorCode&) const",93957347195152,93957347195307],["icu_68::FormattedValueStringBuilderImpl::prependSpanInfo(int, int, UErrorCode&)",93957347195536,93957347195798],["icu_68::FormattedStringBuilder::~FormattedStringBuilder()",93957347195840,93957347195885],["icu_68::FormattedStringBuilder::operator=(icu_68::FormattedStringBuilder const&)",93957347195920,93957347196319],["icu_68::FormattedStringBuilder::codePointCount() const",93957347196336,93957347196381],["icu_68::FormattedStringBuilder::getLastCodePoint() const",93957347196512,93957347196809],["icu_68::FormattedStringBuilder::codePointBefore(int) const",93957347196992,93957347197260],["icu_68::FormattedStringBuilder::insert(int, icu_68::UnicodeString const&, icu_68::FormattedStringBuilder::Field, UErrorCode&)",93957347197616,93957347197733],["icu_68::FormattedStringBuilder::splice(int, int, icu_68::UnicodeString const&, int, int, icu_68::FormattedStringBuilder::Field, UErrorCode&)",93957347198080,93957347198659],["icu_68::FormattedStringBuilder::writeTerminator(UErrorCode&)",93957347198992,93957347199173],["icu_68::FormattedStringBuilder::toUnicodeString() const",93957347199920,93957347199982],["icu_68::FormattedStringBuilder::chars() const",93957347200064,93957347200096],["icu_68::FormattedStringBuilder::containsField(icu_68::FormattedStringBuilder::Field) const",93957347200304,93957347200395],["icu_68::ConstrainedFieldPosition::constrainCategory(int)",93957347200416,93957347200429],["icu_68::ConstrainedFieldPosition::matchesField(int, int) const",93957347200448,93957347200501],["icu_68::StringSegment::setOffset(int)",93957347200544,93957347200553],["icu_68::FieldPositionOnlyHandler::addAttribute(int, int, int)",93957347200608,93957347200657],["icu_68::FieldPositionOnlyHandler::isRecording() const",93957347200720,93957347200737],["icu_68::FieldPositionIteratorHandler::FieldPositionIteratorHandler(icu_68::FieldPositionIterator*, UErrorCode&)",93957347200768,93957347200872],["icu_68::FieldPositionIteratorHandler::~FieldPositionIteratorHandler()",93957347200928,93957347200984],["icu_68::FieldPositionIteratorHandler::addAttribute(int, int, int)",93957347201056,93957347201419],["icu_68::FieldPositionIteratorHandler::isRecording() const",93957347201552,93957347201565],["icu_68::FieldPositionIterator::~FieldPositionIterator()",93957347201632,93957347201703],["icu_68::FieldPositionIterator::setData(icu_68::UVector32*, UErrorCode&)",93957347201744,93957347201948],["icu_68::GregorianCalendar::getStaticClassID()",93957347202144,93957347202157],["icu_68::GregorianCalendar::GregorianCalendar(icu_68::Locale const&, UErrorCode&)",93957347202304,93957347202437],["icu_68::GregorianCalendar::clone() const",93957347202576,93957347202723],["icu_68::GregorianCalendar::setGregorianChange(double, UErrorCode&)",93957347202800,93957347203244],["icu_68::GregorianCalendar::handleComputeJulianDay(UCalendarDateFields)",93957347203712,93957347203939],["icu_68::GregorianCalendar::handleGetMonthLength(int, int) const",93957347204256,93957347204411],["icu_68::GregorianCalendar::monthLength(int) const",93957347204528,93957347204550],["icu_68::GregorianCalendar::getEpochDay(UErrorCode&)",93957347204672,93957347204757],["icu_68::GregorianCalendar::getActualMinimum(UCalendarDateFields, UErrorCode&) const",93957347205840,93957347205854],["icu_68::GregorianCalendar::getActualMaximum(UCalendarDateFields, UErrorCode&) const",93957347205888,93957347206176],["icu_68::GregorianCalendar::handleGetExtendedYearFromWeekFields(int, int)",93957347206320,93957347206353],["icu_68::GregorianCalendar::getType() const",93957347206416,93957347206429],["icu_68::initializeSystemDefaultCentury()",93957347206496,93957347206791],["icu_68::ClockMath::floorDivide(int, int)",93957347206864,93957347206890],["icu_68::ClockMath::floorDivide(double, int, int&)",93957347206976,93957347207046],["icu_68::Grego::fieldsToDay(int, int, int)",93957347207200,93957347207410],["icu_68::Grego::timeToFields(double, int&, int&, int&, int&, int&, int&)",93957347207984,93957347208185],["icu_68::Grego::dayOfWeekInMonth(int, int, int)",93957347208272,93957347208422],["icu_68::HebrewCalendar::getType() const",93957347208512,93957347208525],["icu_68::HebrewCalendar::add(UCalendarDateFields, int, UErrorCode&)",93957347208592,93957347209009],["icu_68::HebrewCalendar::roll(UCalendarDateFields, int, UErrorCode&)",93957347209088,93957347209393],["calendar_hebrew_cleanup()",93957347209856,93957347209893],["icu_68::HebrewCalendar::handleGetMonthLength(int, int) const",93957347209936,93957347210219],["icu_68::HebrewCalendar::validateField(UCalendarDateFields, UErrorCode&)",93957347210288,93957347210429],["icu_68::HebrewCalendar::handleGetExtendedYear()",93957347211216,93957347211288],["icu_68::HebrewCalendar::defaultCenturyStart() const",93957347211728,93957347211786],["icu_68::HebrewCalendar::defaultCenturyStartYear() const",93957347212144,93957347212200],["icu_68::IndianCalendar::clone() const",93957347212224,93957347212285],["icu_68::IndianCalendar::getType() const",93957347212368,93957347212381],["icu_68::IndianCalendar::handleGetMonthLength(int, int) const",93957347212416,93957347212535],["icu_68::IndianCalendar::handleComputeMonthStart(int, int, signed char) const",93957347212640,93957347212944],["icu_68::IndianCalendar::defaultCenturyStart() const",93957347213568,93957347213626],["icu_68::IndianCalendar::defaultCenturyStartYear() const",93957347213968,93957347214024],["icu_68::IslamicCalendar::getType() const",93957347214048,93957347214083],["icu_68::IslamicCalendar::IslamicCalendar(icu_68::Locale const&, UErrorCode&, icu_68::IslamicCalendar::ECalculationType)",93957347214176,93957347214265],["icu_68::IslamicCalendar::trueMonthStart(int) const",93957347214304,93957347214621],["icu_68::IslamicCalendar::moonAge(double, UErrorCode&)",93957347214960,93957347215192],["icu_68::IslamicCalendar::handleGetMonthLength(int, int) const",93957347215296,93957347215528],["icu_68::IslamicCalendar::handleComputeMonthStart(int, int, signed char) const",93957347216032,93957347216155],["icu_68::IslamicCalendar::defaultCenturyStart() const",93957347217488,93957347217546],["icu_68::IslamicCalendar::defaultCenturyStartYear() const",93957347217872,93957347217928],["icu_68::JapaneseCalendar::getDynamicClassID() const",93957347217952,93957347217965],["icu_68::init(UErrorCode&)",93957347218032,93957347218213],["icu_68::JapaneseCalendar::getType() const",93957347218320,93957347218333],["icu_68::JapaneseCalendar::getDefaultDayInMonth(int, int)",93957347218432,93957347218534],["icu_68::JapaneseCalendar::handleGetExtendedYear()",93957347218576,93957347218732],["icu_68::JapaneseCalendar::handleGetLimit(UCalendarDateFields, icu_68::Calendar::ELimitType) const",93957347218864,93957347219000],["japanese_calendar_cleanup()",93957347219264,93957347219336],["icu_68::UCharsTrie::~UCharsTrie()",93957347219632,93957347219645],["icu_68::EraRules::getStartDate(int, int (&) [3], UErrorCode&) const",93957347220656,93957347220734],["icu_68::EraRules::getEraIndex(int, int, int, UErrorCode&) const",93957347220800,93957347221072],["icu_68::FormattedListData::~FormattedListData()",93957347221088,93957347221116],["icu_68::FormattedList::~FormattedList()",93957347221184,93957347221248],["icu_68::ListFormatter::initializeHash(UErrorCode&)",93957347221312,93957347221494],["icu_68::uprv_listformatter_cleanup()",93957347221584,93957347221643],["icu_68::ListFormatter::loadListFormatInternal(icu_68::Locale const&, char const*, UErrorCode&)",93957347222240,93957347222921],["icu_68::ListFormatter::ListPatternsSink::~ListPatternsSink()",93957347223008,93957347223091],["icu_68::ListFormatter::createInstance(icu_68::Locale const&, UListFormatterType, UListFormatterWidth, UErrorCode&)",93957347223296,93957347223443],["icu_68::ListFormatter::~ListFormatter()",93957347223552,93957347223645],["icu_68::ListFormatter::format(icu_68::UnicodeString const*, int, icu_68::UnicodeString&, int, int&, UErrorCode&) const",93957347223696,93957347224060],["icu_68::(anonymous namespace)::FormattedListBuilder::FormattedListBuilder(icu_68::UnicodeString const&, UErrorCode&)",93957347224784,93957347224955],["icu_68::ListFormatter::ListPatternsSink::put(char const*, icu_68::ResourceValue&, signed char, UErrorCode&)",93957347225744,93957347226280],["icu_68::(anonymous namespace)::shouldChangeToE(icu_68::UnicodeString const&)",93957347228800,93957347229129],["icu_68::(anonymous namespace)::shouldChangeToVavDash(icu_68::UnicodeString const&)",93957347229472,93957347229528],["icu_68::(anonymous namespace)::ContextualHandler::~ContextualHandler()",93957347229632,93957347229725],["icu_68::(anonymous namespace)::ContextualHandler::getTwoPattern(icu_68::UnicodeString const&) const",93957347230000,93957347230045],["icu_68::(anonymous namespace)::PatternHandler::~PatternHandler()",93957347230096,93957347230147],["icu_68::(anonymous namespace)::PatternHandler::clone() const",93957347230224,93957347230306],["icu_68::ListFormatter::ListPatternsSink::handleValueForPattern(icu_68::ResourceValue&, icu_68::UnicodeString&, UErrorCode&)",93957347230528,93957347230841],["icu_68::MeasureUnit::getPercent()",93957347230864,93957347230901],["icu_68::MeasureUnit::MeasureUnit()",93957347230960,93957347230994],["icu_68::MeasureUnit::operator=(icu_68::MeasureUnit const&)",93957347231040,93957347231647],["icu_68::MeasureUnit::MeasureUnit(icu_68::MeasureUnitImpl&&)",93957347231696,93957347231914],["icu_68::MeasureUnitImpl::copy(UErrorCode&) const",93957347232240,93957347232493],["icu_68::MeasureUnit::clone() const",93957347232688,93957347232757],["icu_68::MeasureUnit::getType() const",93957347232928,93957347232965],["icu_68::MeasureUnit::getIdentifier() const",93957347233072,93957347233147],["icu_68::MeasureUnit::getAvailable(icu_68::MeasureUnit*, int, UErrorCode&)",93957347233360,93957347233544],["icu_68::MeasureUnit::getAvailable(char const*, icu_68::MeasureUnit*, int, UErrorCode&)",93957347233696,93957347234016],["icu_68::SingleUnitImpl* icu_68::MemoryPool<icu_68::SingleUnitImpl, 8>::create<icu_68::SingleUnitImpl const&>(icu_68::SingleUnitImpl const&)",93957347234752,93957347234958],["icu_68::Measure::Measure(icu_68::Formattable const&, icu_68::MeasureUnit*, UErrorCode&)",93957347234976,93957347235061],["icu_68::Measure::clone() const",93957347235184,93957347235313],["icu_68::Measure::~Measure()",93957347235392,93957347235457],["icu_68::number::impl::AffixUtils::escape(icu_68::UnicodeString const&)",93957347235776,93957347236210],["icu_68::number::impl::AffixUtils::nextToken(icu_68::number::impl::AffixTag, icu_68::UnicodeString const&, UErrorCode&)",93957347236800,93957347237457],["icu_68::number::impl::AffixUtils::containsType(icu_68::UnicodeString const&, icu_68::number::impl::AffixPatternType, UErrorCode&)",93957347237936,93957347238258],["icu_68::number::impl::AffixUtils::containsOnlySymbolsAndIgnorables(icu_68::UnicodeString const&, icu_68::UnicodeSet const&, UErrorCode&)",93957347238592,93957347238927],["icu_68::number::impl::DecimalQuantity::DecimalQuantity()",93957347239264,93957347239315],["icu_68::number::impl::DecimalQuantity::~DecimalQuantity()",93957347239392,93957347239452],["icu_68::number::impl::DecimalQuantity::operator=(icu_68::number::impl::DecimalQuantity const&)",93957347239504,93957347239762],["icu_68::number::impl::DecimalQuantity::clear()",93957347240000,93957347240089],["icu_68::number::impl::DecimalQuantity::setMinFraction(int)",93957347240128,93957347240139],["icu_68::number::impl::DecimalQuantity::getMagnitude() const",93957347240352,93957347240369],["icu_68::number::impl::DecimalQuantity::roundToIncrement(double, UNumberFormatRoundingMode, UErrorCode&)",93957347241120,93957347241362],["icu_68::number::impl::DecimalQuantity::roundToMagnitude(int, UNumberFormatRoundingMode, UErrorCode&)",93957347241600,93957347241615],["icu_68::number::impl::DecimalQuantity::toDecNum(icu_68::number::impl::DecNum&, UErrorCode&) const",93957347241840,93957347242203],["icu_68::number::impl::DecimalQuantity::negate()",93957347242368,93957347242378],["icu_68::number::impl::DecimalQuantity::getPluralOperand(icu_68::PluralOperand) const",93957347242496,93957347243368],["icu_68::number::impl::DecimalQuantity::toLong(bool) const",93957347243392,93957347243581],["icu_68::number::impl::DecimalQuantity::adjustExponent(int)",93957347243904,93957347243913],["icu_68::number::impl::DecimalQuantity::getUpperDisplayMagnitude() const",93957347243936,93957347243959],["icu_68::number::impl::DecimalQuantity::getDigit(int) const",93957347244000,93957347244058],["icu_68::number::impl::DecimalQuantity::isInfinite() const",93957347244144,93957347244157],["icu_68::number::impl::DecimalQuantity::setToInt(int)",93957347244176,93957347244431],["icu_68::number::impl::DecimalQuantity::setToLong(long)",93957347244864,93957347244996],["icu_68::number::impl::DecimalQuantity::readDecNumberToBcd(icu_68::number::impl::DecNum const&)",93957347245360,93957347245919],["icu_68::number::impl::DecimalQuantity::_setToDoubleFast(double)",93957347246128,93957347246421],["icu_68::number::impl::DecimalQuantity::readDoubleConversionToBcd(char const*, int, int)",93957347246656,93957347247587],["icu_68::number::impl::DecimalQuantity::fitsInLong(bool) const",93957347247904,93957347248139],["icu_68::number::impl::DecimalQuantity::truncate()",93957347248816,93957347248962],["icu_68::number::impl::DecimalQuantity::roundToMagnitude(int, UNumberFormatRoundingMode, bool, UErrorCode&)",93957347249008,93957347251720],["icu_68::number::impl::DecimalQuantity::roundToInfinity()",93957347252256,93957347252274],["icu_68::number::impl::DecimalQuantity::shiftLeft(int)",93957347252576,93957347252980],["icu_68::double_conversion::DoubleToStringConverter::DoubleToAscii(double, icu_68::double_conversion::DoubleToStringConverter::DtoaMode, int, char*, int, bool*, int*, int*)",93957347253488,93957347253704],["icu_68::double_conversion::GenerateCountedDigits(int, int*, icu_68::double_conversion::Bignum*, icu_68::double_conversion::Bignum*, icu_68::double_conversion::Vector<char>, int*)",93957347255504,93957347255749],["icu_68::double_conversion::Bignum::AssignUInt64(unsigned long)",93957347255792,93957347255854],["icu_68::double_conversion::Bignum::AssignDecimalString(icu_68::double_conversion::Vector<char const>)",93957347255920,93957347256630],["icu_68::double_conversion::Bignum::AddBignum(icu_68::double_conversion::Bignum const&)",93957347257920,93957347258809],["icu_68::double_conversion::Bignum::ShiftLeft(int)",93957347259536,93957347259891],["icu_68::double_conversion::Bignum::MultiplyByUInt64(unsigned long)",93957347260160,93957347260505],["icu_68::double_conversion::Bignum::AssignPowerUInt16(unsigned short, int)",93957347261808,93957347262992],["icu_68::double_conversion::Bignum::SubtractTimes(icu_68::double_conversion::Bignum const&, int)",93957347264064,93957347264367],["icu_68::double_conversion::Bignum::PlusCompare(icu_68::double_conversion::Bignum const&, icu_68::double_conversion::Bignum const&, icu_68::double_conversion::Bignum const&)",93957347264560,93957347264895],["icu_68::double_conversion::StringToDoubleConverter::StringToDouble(char const*, int, int*) const",93957347268016,93957347268034],["icu_68::double_conversion::StringToDoubleConverter::StringToDouble(unsigned short const*, int, int*) const",93957347271632,93957347271650],["bool icu_68::double_conversion::Advance<char const*>(char const**, unsigned short, int, char const*&)",93957347275248,93957347275442],["double icu_68::double_conversion::RadixStringToIeee<4, char const*>(char const**, char const*, bool, unsigned short, bool, bool, double, bool, bool*)",93957347276416,93957347278295],["icu_68::double_conversion::isWhitespace(int)",93957347279456,93957347279573],["bool icu_68::double_conversion::IsHexFloatString<unsigned short const*>(unsigned short const*, unsigned short const*, unsigned short, bool)",93957347279792,93957347280742],["icu_68::double_conversion::StrtodTrimmed(icu_68::double_conversion::Vector<char const>, int)",93957347282640,93957347282958],["icu_68::double_conversion::CompareBufferWithDiyFp(icu_68::double_conversion::Vector<char const>, int, icu_68::double_conversion::DiyFp)",93957347284480,93957347284709],["icu_68::double_conversion::Strtof(icu_68::double_conversion::Vector<char const>, int)",93957347284992,93957347285943],["icu_68::number::impl::DecimalFormatProperties::clear()",93957347286192,93957347286481],["icu_68::number::impl::DecimalFormatProperties::equalsDefaultExceptFastFormat() const",93957347287472,93957347287798],["icu_68::number::NumberFormatterSettings<icu_68::number::UnlocalizedNumberFormatter>::macros(icu_68::number::impl::MacroProps const&) &&",93957347288128,93957347288624],["icu_68::number::NumberFormatterSettings<icu_68::number::LocalizedNumberFormatter>::notation(icu_68::number::Notation const&) const &",93957347289120,93957347289435],["icu_68::number::NumberFormatterSettings<icu_68::number::LocalizedNumberFormatter>::perUnit(icu_68::MeasureUnit const&) const &",93957347289776,93957347290099],["icu_68::number::NumberFormatterSettings<icu_68::number::LocalizedNumberFormatter>::roundingMode(UNumberFormatRoundingMode) &&",93957347290432,93957347290726],["icu_68::number::NumberFormatterSettings<icu_68::number::LocalizedNumberFormatter>::integerWidth(icu_68::number::IntegerWidth const&) const &",93957347291056,93957347291371],["icu_68::number::NumberFormatterSettings<icu_68::number::LocalizedNumberFormatter>::unitWidth(UNumberUnitWidth) const &",93957347291712,93957347292020],["icu_68::number::NumberFormatterSettings<icu_68::number::LocalizedNumberFormatter>::scale(icu_68::number::Scale const&) &&",93957347292352,93957347292655],["icu_68::number::NumberFormatter::with()",93957347292960,93957347293207],["icu_68::number::UnlocalizedNumberFormatter::locale(icu_68::Locale const&) &&",93957347293664,93957347293688],["icu_68::number::LocalizedNumberFormatter::lnfCopyHelper(icu_68::number::LocalizedNumberFormatter const&, UErrorCode&)",93957347293984,93957347295191],["icu_68::number::LocalizedNumberFormatter::lnfMoveHelper(icu_68::number::LocalizedNumberFormatter&&)",93957347295456,93957347295734],["icu_68::number::impl::NumberFormatterImpl::~NumberFormatterImpl()",93957347295984,93957347296441],["icu_68::number::LocalizedNumberFormatter::~LocalizedNumberFormatter()",93957347296816,93957347297055],["icu_68::number::LocalizedNumberFormatter::formatImpl(icu_68::number::impl::UFormattedNumberData*, UErrorCode&) const",93957347297584,93957347297796],["icu_68::number::LocalizedNumberFormatter::formatDecimal(icu_68::StringPiece, UErrorCode&) const",93957347298128,93957347298445],["icu_68::number::LocalizedNumberFormatter::getAffixImpl(bool, bool, icu_68::UnicodeString&, UErrorCode&) const",93957347298768,93957347299348],["icu_68::number::impl::MicroProps::~MicroProps()",93957347299552,93957347299740],["icu_68::number::impl::MicroProps::operator=(icu_68::number::impl::MicroProps const&)",93957347299776,93957347300165],["icu_68::number::impl::NumberFormatterImpl::formatStatic(icu_68::number::impl::MacroProps const&, icu_68::number::impl::UFormattedNumberData*, UErrorCode&)",93957347300624,93957347301485],["icu_68::number::impl::NumberFormatterImpl::getPrefixSuffixStatic(icu_68::number::impl::MacroProps const&, icu_68::number::impl::Signum, icu_68::StandardPlural::Form, icu_68::FormattedStringBuilder&, UErrorCode&)",93957347301920,93957347302561],["icu_68::number::impl::NumberFormatterImpl::getPrefixSuffix(icu_68::number::impl::Signum, icu_68::StandardPlural::Form, icu_68::FormattedStringBuilder&, UErrorCode&) const",93957347303360,93957347303453],["icu_68::LocalPointer<icu_68::number::impl::UsagePrefsHandler const>::adoptInsteadAndCheckErrorCode(icu_68::number::impl::UsagePrefsHandler const*, UErrorCode&)",93957347307616,93957347307704],["icu_68::number::impl::NumberFormatterImpl::resolvePluralRules(icu_68::PluralRules const*, icu_68::Locale const&, UErrorCode&)",93957347307824,93957347307901],["icu_68::number::impl::LongNameHandler::LongNameHandler()",93957347308208,93957347308322],["icu_68::number::impl::NumberFormatterImpl::writeFractionDigits(icu_68::number::impl::MicroProps const&, icu_68::number::impl::DecimalQuantity&, icu_68::FormattedStringBuilder&, int, UErrorCode&)",93957347308720,93957347308945],["icu_68::number::impl::EmptyModifier::semanticallyEquivalent(icu_68::number::impl::Modifier const&) const",93957347308976,93957347308996],["icu_68::SingleUnitImpl::build(UErrorCode&) const",93957347309632,93957347310051],["icu_68::MeasureUnitImpl::build(UErrorCode&) &&",93957347310256,93957347310593],["icu_68::MeasureUnitImpl::MeasureUnitImpl(icu_68::MeasureUnitImpl const&, UErrorCode&)",93957347310640,93957347311024],["icu_68::(anonymous namespace)::Parser::parse(UErrorCode&)",93957347311296,93957347312755],["icu_68::MeasureUnitImpl::extractIndividualUnits(UErrorCode&) const",93957347313088,93957347313314],["icu_68::MeasureUnit::reciprocal(UErrorCode&) const",93957347313664,93957347313985],["icu_68::(anonymous namespace)::initUnitExtras(UErrorCode&)",93957347315120,93957347316627],["icu_68::(anonymous namespace)::SimpleUnitIdentifiersSink::put(char const*, icu_68::ResourceValue&, signed char, UErrorCode&)",93957347316704,93957347317061],["icu_68::(anonymous namespace)::compareSingleUnits(void const*, void const*, void const*)",93957347317280,93957347317363],["icu_68::MeasureUnitImpl* icu_68::MemoryPool<icu_68::MeasureUnitImpl, 8>::create<icu_68::MeasureUnitImpl const&, UErrorCode&>(icu_68::MeasureUnitImpl const&, UErrorCode&)",93957347317920,93957347318151],["icu_68::number::impl::CompactData::populate(icu_68::Locale const&, char const*, UNumberCompactStyle, icu_68::number::impl::CompactType, UErrorCode&)",93957347318512,93957347319071],["icu_68::number::impl::CompactData::getMultiplier(int) const",93957347319296,93957347319332],["icu_68::number::impl::CompactHandler::CompactHandler(UNumberCompactStyle, icu_68::Locale const&, char const*, icu_68::number::impl::CompactType, icu_68::PluralRules const*, icu_68::number::impl::MutablePatternModifier*, bool, icu_68::number::impl::MicroPropsGenerator const*, UErrorCode&)",93957347320272,93957347320845],["icu_68::number::impl::CompactHandler::~CompactHandler()",93957347322144,93957347322354],["icu_68::number::impl::CompactHandler::processQuantity(icu_68::number::impl::DecimalQuantity&, icu_68::number::impl::MicroProps&, UErrorCode&) const",93957347322400,93957347323066],["icu_68::number::impl::Grouper::forProperties(icu_68::number::impl::DecimalFormatProperties const&)",93957347323136,93957347323230],["icu_68::number::impl::Grouper::groupAtPosition(int, icu_68::number::impl::DecimalQuantity const&) const",93957347323584,93957347323663],["icu_68::number::impl::Grouper::getSecondary() const",93957347323680,93957347323690],["icu_68::number::IntegerWidth::zeroFillTo(int)",93957347323728,93957347323765],["icu_68::number::IntegerWidth::apply(icu_68::number::impl::DecimalQuantity&, UErrorCode&) const",93957347323904,93957347324040],["icu_68::number::impl::LongNameHandler::forMeasureUnit(icu_68::Locale const&, icu_68::MeasureUnit const&, icu_68::MeasureUnit const&, UNumberUnitWidth const&, icu_68::PluralRules const*, icu_68::number::impl::MicroPropsGenerator const*, icu_68::number::impl::LongNameHandler*, UErrorCode&)",93957347324080,93957347324827],["(anonymous namespace)::getMeasureData(icu_68::Locale const&, icu_68::MeasureUnit const&, UNumberUnitWidth const&, icu_68::UnicodeString*, UErrorCode&)",93957347326720,93957347327710],["(anonymous namespace)::getWithPlural(icu_68::UnicodeString const*, icu_68::StandardPlural::Form, UErrorCode&)",93957347328304,93957347328410],["icu_68::number::impl::LongNameHandler::multiSimpleFormatsToModifiers(icu_68::UnicodeString const*, icu_68::UnicodeString, icu_68::FormattedStringBuilder::Field, UErrorCode&)",93957347328512,93957347329382],["icu_68::number::impl::LongNameHandler::processQuantity(icu_68::number::impl::DecimalQuantity&, icu_68::number::impl::MicroProps&, UErrorCode&) const",93957347330480,93957347330829],["non-virtual thunk to icu_68::number::impl::LongNameHandler::getModifier(icu_68::number::impl::Signum, icu_68::StandardPlural::Form) const",93957347330864,93957347330883],["icu_68::number::impl::MixedUnitLongNameHandler::processQuantity(icu_68::number::impl::DecimalQuantity&, icu_68::number::impl::MicroProps&, UErrorCode&) const",93957347331984,93957347332061],["icu_68::number::impl::LongNameMultiplexer::forMeasureUnits(icu_68::Locale const&, icu_68::MaybeStackVector<icu_68::MeasureUnit, 8> const&, UNumberUnitWidth const&, icu_68::PluralRules const*, icu_68::number::impl::MicroPropsGenerator const*, UErrorCode&)",93957347334448,93957347335328],["icu_68::number::impl::LongNameHandler::~LongNameHandler()",93957347335536,93957347335803],["non-virtual thunk to icu_68::number::impl::LongNameHandler::~LongNameHandler()",93957347335840,93957347336089],["icu_68::number::impl::MixedUnitLongNameHandler::~MixedUnitLongNameHandler()",93957347336368,93957347336519],["non-virtual thunk to icu_68::number::impl::MixedUnitLongNameHandler::~MixedUnitLongNameHandler()",93957347336704,93957347336855],["icu_68::number::impl::LongNameMultiplexer::~LongNameMultiplexer()",93957347337040,93957347337318],["(anonymous namespace)::PluralTableSink::put(char const*, icu_68::ResourceValue&, signed char, UErrorCode&)",93957347337360,93957347337876],["icu_68::number::impl::LongNameHandler* icu_68::MemoryPool<icu_68::number::impl::LongNameHandler, 8>::create<>()",93957347338384,93957347338677],["icu_68::number::impl::NumberPropertyMapper::create(icu_68::number::impl::DecimalFormatProperties const&, icu_68::DecimalFormatSymbols const&, icu_68::number::impl::DecimalFormatWarehouse&, icu_68::number::impl::DecimalFormatProperties&, UErrorCode&)",93957347341552,93957347341857],["icu_68::number::impl::PropertiesAffixPatternProvider::charAt(int, int) const",93957347342848,93957347342961],["icu_68::number::impl::PropertiesAffixPatternProvider::getString(int) const",93957347343072,93957347343157],["icu_68::number::impl::PropertiesAffixPatternProvider::hasNegativeSubpattern() const",93957347343328,93957347343676],["icu_68::number::impl::PropertiesAffixPatternProvider::hasCurrencySign() const",93957347343856,93957347343868],["icu_68::number::impl::CurrencyPluralInfoAffixProvider::setTo(icu_68::CurrencyPluralInfo const&, icu_68::number::impl::DecimalFormatProperties const&, UErrorCode&)",93957347344000,93957347344364],["icu_68::number::impl::CurrencyPluralInfoAffixProvider::length(int) const",93957347344416,93957347344454],["icu_68::number::impl::CurrencyPluralInfoAffixProvider::positiveHasPlusSign() const",93957347344512,93957347344534],["icu_68::number::impl::CurrencyPluralInfoAffixProvider::negativeHasMinusSign() const",93957347344576,93957347344598],["icu_68::number::impl::CurrencyPluralInfoAffixProvider::containsSymbolType(icu_68::number::impl::AffixPatternType, UErrorCode&) const",93957347344640,93957347344665],["icu_68::number::impl::PropertiesAffixPatternProvider::~PropertiesAffixPatternProvider()",93957347344704,93957347344779],["icu_68::number::impl::CurrencyPluralInfoAffixProvider::~CurrencyPluralInfoAffixProvider()",93957347344880,93957347344908],["icu_68::number::impl::CurrencySymbols::getIsoCode() const",93957347345216,93957347345226],["icu_68::number::impl::CurrencySymbols::getFormalCurrencySymbol(UErrorCode&) const",93957347345360,93957347345481],["icu_68::number::impl::CurrencySymbols::getCurrencySymbol(UErrorCode&) const",93957347345616,93957347345757],["icu_68::number::impl::CurrencySymbols::getPluralName(icu_68::StandardPlural::Form, UErrorCode&) const",93957347345824,93957347345964],["icu_68::number::impl::Modifier::Parameters::Parameters()",93957347346112,93957347346125],["icu_68::number::impl::AdoptingModifierStore::~AdoptingModifierStore()",93957347346144,93957347346211],["icu_68::number::impl::SimpleModifier::SimpleModifier(icu_68::SimpleFormatter const&, icu_68::FormattedStringBuilder::Field, bool)",93957347346304,93957347346317],["icu_68::number::impl::SimpleModifier::SimpleModifier()",93957347346768,93957347346840],["icu_68::number::impl::SimpleModifier::formatAsPrefixSuffix(icu_68::FormattedStringBuilder&, int, int, UErrorCode&) const",93957347346864,93957347347059],["icu_68::number::impl::SimpleModifier::getCodePointCount() const",93957347347088,93957347347163],["icu_68::number::impl::SimpleModifier::getParameters(icu_68::number::impl::Modifier::Parameters&) const",93957347347184,93957347347197],["icu_68::number::impl::ConstantMultiFieldModifier::apply(icu_68::FormattedStringBuilder&, int, int, UErrorCode&) const",93957347347408,93957347347632],["icu_68::number::impl::ConstantMultiFieldModifier::getCodePointCount() const",93957347347648,93957347347693],["icu_68::number::impl::ConstantMultiFieldModifier::containsField(icu_68::FormattedStringBuilder::Field) const",93957347347712,93957347347768],["icu_68::number::impl::ConstantMultiFieldModifier::semanticallyEquivalent(icu_68::number::impl::Modifier const&) const",93957347347792,93957347347965],["icu_68::number::impl::CurrencySpacingEnabledModifier::getUnicodeSet(icu_68::DecimalFormatSymbols const&, icu_68::number::impl::CurrencySpacingEnabledModifier::EPosition, icu_68::number::impl::CurrencySpacingEnabledModifier::EAffix, UErrorCode&)",93957347349024,93957347349651],["icu_68::number::impl::CurrencySpacingEnabledModifier::applyCurrencySpacing(icu_68::FormattedStringBuilder&, int, int, int, int, icu_68::DecimalFormatSymbols const&, UErrorCode&)",93957347350096,93957347350228],["icu_68::number::impl::ConstantMultiFieldModifier::~ConstantMultiFieldModifier()",93957347350976,93957347351025],["icu_68::number::impl::AdoptingModifierStore::getModifier(icu_68::number::impl::Signum, icu_68::StandardPlural::Form) const",93957347351104,93957347351141],["icu_68::number::impl::SimpleModifier::~SimpleModifier()",93957347351184,93957347351226],["icu_68::number::impl::CurrencySpacingEnabledModifier::~CurrencySpacingEnabledModifier()",93957347351344,93957347351456],["icu_68::number::Scale::Scale(int, icu_68::number::impl::DecNum*)",93957347351568,93957347351684],["icu_68::number::Scale::operator=(icu_68::number::Scale const&)",93957347351808,93957347351916],["icu_68::number::Scale::operator=(icu_68::number::Scale&&)",93957347351952,93957347352041],["icu_68::number::Scale::none()",93957347352112,93957347352142],["icu_68::number::Scale::byDouble(double)",93957347352176,93957347352345],["icu_68::number::Scale::applyReciprocalTo(icu_68::number::impl::DecimalQuantity&) const",93957347352544,93957347352610],["icu_68::number::impl::MultiplierFormatHandler::processQuantity(icu_68::number::impl::DecimalQuantity&, icu_68::number::impl::MicroProps&, UErrorCode&) const",93957347352752,93957347352827],["icu_68::number::impl::MultiplierFormatHandler::~MultiplierFormatHandler()",93957347352896,93957347352959],["icu_68::number::Notation::engineering()",93957347352992,93957347353019],["icu_68::number::Notation::compactShort()",93957347353072,93957347353108],["icu_68::number::Notation::simple()",93957347353168,93957347353195],["icu_68::number::ScientificNotation::withExponentSignDisplay(UNumberSignDisplay) const",93957347353280,93957347353339],["icu_68::number::FormattedNumber::~FormattedNumber()",93957347353408,93957347353472],["icu_68::number::FormattedNumber::getDecimalQuantity(icu_68::number::impl::DecimalQuantity&, UErrorCode&) const",93957347353552,93957347353598],["icu_68::number::impl::UFormattedNumberData::~UFormattedNumberData()",93957347353664,93957347353729],["icu_68::number::impl::Padder::padAndApply(icu_68::number::impl::Modifier const&, icu_68::number::impl::Modifier const&, icu_68::FormattedStringBuilder&, int, int, UErrorCode&) const",93957347353856,93957347354399],["icu_68::number::impl::MutablePatternModifier::setPatternInfo(icu_68::number::impl::AffixPatternProvider const*, icu_68::FormattedStringBuilder::Field)",93957347354560,93957347354573],["icu_68::number::impl::MutablePatternModifier::setSymbols(icu_68::DecimalFormatSymbols const*, icu_68::CurrencyUnit const&, UNumberUnitWidth, icu_68::PluralRules const*, UErrorCode&)",93957347354592,93957347354922],["icu_68::number::impl::MutablePatternModifier::needsPlurals() const",93957347354960,93957347355000],["icu_68::number::impl::MutablePatternModifier::createConstantModifier(UErrorCode&)",93957347355712,93957347356339],["icu_68::number::impl::ImmutablePatternModifier::applyToMicros(icu_68::number::impl::MicroProps&, icu_68::number::impl::DecimalQuantity const&, UErrorCode&) const",93957347356448,93957347356822],["icu_68::number::impl::MutablePatternModifier::addToChain(icu_68::number::impl::MicroPropsGenerator const*)",93957347356880,93957347356896],["icu_68::number::impl::MutablePatternModifier::apply(icu_68::FormattedStringBuilder&, int, int, UErrorCode&) const",93957347357328,93957347357761],["icu_68::number::impl::MutablePatternModifier::getPrefixLength() const",93957347357792,93957347357893],["icu_68::number::impl::MutablePatternModifier::getCodePointCount() const",93957347358016,93957347358193],["icu_68::number::impl::MutablePatternModifier::isStrong() const",93957347358400,93957347358409],["non-virtual thunk to icu_68::number::impl::MutablePatternModifier::getSymbol(icu_68::number::impl::AffixPatternType) const",93957347358704,93957347358732],["icu_68::number::impl::MutablePatternModifier::~MutablePatternModifier()",93957347358880,93957347358908],["non-virtual thunk to icu_68::number::impl::MutablePatternModifier::~MutablePatternModifier()",93957347358928,93957347358963],["non-virtual thunk to icu_68::number::impl::MutablePatternModifier::~MutablePatternModifier()",93957347358992,93957347359027],["icu_68::number::impl::ImmutablePatternModifier::~ImmutablePatternModifier()",93957347359072,93957347359120],["icu_68::number::impl::ParsedPatternInfo::consumePattern(icu_68::UnicodeString const&, UErrorCode&)",93957347359152,93957347359476],["icu_68::number::impl::PatternParser::parseToExistingProperties(icu_68::UnicodeString const&, icu_68::number::impl::DecimalFormatProperties&, icu_68::number::impl::IgnoreRounding, UErrorCode&)",93957347360048,93957347360058],["icu_68::number::impl::ParsedPatternInfo::length(int) const",93957347360272,93957347360387],["icu_68::number::impl::ParsedPatternInfo::positiveHasPlusSign() const",93957347360576,93957347360588],["icu_68::number::impl::ParsedPatternInfo::negativeHasMinusSign() const",93957347360608,93957347360620],["icu_68::number::impl::ParsedPatternInfo::containsSymbolType(icu_68::number::impl::AffixPatternType, UErrorCode&) const",93957347360672,93957347360686],["icu_68::number::impl::ParsedPatternInfo::consumeSubpattern(UErrorCode&)",93957347360704,93957347360891],["icu_68::number::impl::ParsedPatternInfo::consumeAffix(icu_68::number::impl::Endpoints&, UErrorCode&)",93957347361136,93957347361395],["icu_68::number::impl::ParsedPatternInfo::consumeExponent(UErrorCode&)",93957347361600,93957347362033],["icu_68::number::impl::ParsedPatternInfo::consumeIntegerFormat(UErrorCode&)",93957347362544,93957347363145],["icu_68::number::impl::PatternParser::patternInfoToProperties(icu_68::number::impl::DecimalFormatProperties&, icu_68::number::impl::ParsedPatternInfo&, icu_68::number::impl::IgnoreRounding, UErrorCode&)",93957347363584,93957347364903],["icu_68::number::impl::PatternStringUtils::ignoreRoundingIncrement(double, int)",93957347364992,93957347365066],["icu_68::number::impl::AutoAffixPatternProvider::AutoAffixPatternProvider(icu_68::number::impl::DecimalFormatProperties const&, UErrorCode&)",93957347368752,93957347369411],["icu_68::number::impl::PatternStringUtils::convertLocalized(icu_68::UnicodeString const&, icu_68::DecimalFormatSymbols const&, bool, UErrorCode&)",93957347370048,93957347373907],["icu_68::number::impl::PatternStringUtils::resolveSignDisplay(UNumberSignDisplay, icu_68::number::impl::Signum)",93957347374320,93957347374410],["icu_68::number::impl::parseIncrementOption(icu_68::StringSegment const&, icu_68::number::Precision&, UErrorCode&)",93957347374496,93957347375748],["icu_68::number::Precision::unlimited()",93957347375920,93957347375942],["icu_68::number::Precision::constructFraction(int, int)",93957347376000,93957347376044],["icu_68::number::Precision::maxFraction(int)",93957347376128,93957347376197],["icu_68::number::Precision::constructSignificant(int, int)",93957347376288,93957347376332],["icu_68::number::Precision::minMaxSignificantDigits(int, int)",93957347376416,93957347376491],["icu_68::number::Precision::constructCurrency(UCurrencyUsage)",93957347376720,93957347376758],["icu_68::number::FractionPrecision::withMaxDigits(int) const",93957347376864,93957347376956],["icu_68::number::CurrencyPrecision::withCurrency(icu_68::CurrencyUnit const&) const",93957347377344,93957347377441],["icu_68::number::impl::RoundingImpl::passThrough()",93957347377536,93957347377559],["icu_68::number::impl::RoundingImpl::chooseMultiplierAndApply(icu_68::number::impl::DecimalQuantity&, icu_68::number::impl::MultiplierProducer const&, UErrorCode&)",93957347377584,93957347377778],["(anonymous namespace)::getRoundingMagnitudeSignificant(icu_68::number::impl::DecimalQuantity const&, int)",93957347378304,93957347378358],["icu_68::number::impl::RoundingImpl::apply(icu_68::number::impl::DecimalQuantity&, int, UErrorCode)",93957347378416,93957347378438],["icu_68::number::impl::ScientificModifier::apply(icu_68::FormattedStringBuilder&, int, int, UErrorCode&) const",93957347378480,93957347378979],["icu_68::number::impl::ScientificModifier::semanticallyEquivalent(icu_68::number::impl::Modifier const&) const",93957347379008,93957347379078],["icu_68::number::impl::ScientificHandler::processQuantity(icu_68::number::impl::DecimalQuantity&, icu_68::number::impl::MicroProps&, UErrorCode&) const",93957347379136,93957347379405],["non-virtual thunk to icu_68::number::impl::ScientificHandler::getMultiplier(int) const",93957347379472,93957347379533],["icu_68::number::impl::ScientificHandler::~ScientificHandler()",93957347379552,93957347379584],["icu_68::number::impl::stem_to_object::notation(icu_68::number::impl::skeleton::StemEnum)",93957347379616,93957347379678],["icu_68::number::impl::stem_to_object::precision(icu_68::number::impl::skeleton::StemEnum)",93957347379760,93957347379869],["icu_68::number::impl::enum_to_stem_string::roundingMode(UNumberFormatRoundingMode, icu_68::UnicodeString&)",93957347379904,93957347380207],["icu_68::number::impl::enum_to_stem_string::unitWidth(UNumberUnitWidth, icu_68::UnicodeString&)",93957347380416,93957347380685],["icu_68::number::impl::skeleton::create(icu_68::UnicodeString const&, UParseError*, UErrorCode&)",93957347380960,93957347382064],["icu_68::number::impl::skeleton::parseSkeleton(icu_68::UnicodeString const&, int&, UErrorCode&)",93957347385616,93957347386596],["icu_68::number::impl::skeleton::parseStem(icu_68::StringSegment const&, icu_68::UCharsTrie const&, icu_68::number::impl::SeenMacroProps&, icu_68::number::impl::MacroProps&, UErrorCode&)",93957347387488,93957347388811],["icu_68::number::impl::blueprint_helpers::parseFractionStem(icu_68::StringSegment const&, icu_68::number::impl::MacroProps&, UErrorCode&)",93957347389264,93957347389602],["icu_68::number::impl::blueprint_helpers::parseScientificStem(icu_68::StringSegment const&, icu_68::number::impl::MacroProps&, UErrorCode&)",93957347389904,93957347390265],["icu_68::number::impl::blueprint_helpers::parseMeasureUnitOption(icu_68::StringSegment const&, icu_68::number::impl::MacroProps&, UErrorCode&)",93957347390512,93957347392384],["icu_68::number::impl::blueprint_helpers::parseUnitUsageOption(icu_68::StringSegment const&, icu_68::number::impl::MacroProps&, UErrorCode&)",93957347393536,93957347393895],["icu_68::number::impl::blueprint_helpers::parseNumberingSystemOption(icu_68::StringSegment const&, icu_68::number::impl::MacroProps&, UErrorCode&)",93957347394368,93957347394743],["icu_68::number::impl::blueprint_helpers::parseExponentWidthOption(icu_68::StringSegment const&, icu_68::number::impl::MacroProps&, UErrorCode&)",93957347395296,93957347395449],["icu_68::number::impl::blueprint_helpers::parseFracSigOption(icu_68::StringSegment const&, icu_68::number::impl::MacroProps&, UErrorCode&)",93957347395840,93957347396173],["icu_68::number::impl::GeneratorHelpers::unit(icu_68::number::impl::MacroProps const&, icu_68::UnicodeString&, UErrorCode&)",93957347396576,93957347397375],["icu_68::number::impl::GeneratorHelpers::grouping(icu_68::number::impl::MacroProps const&, icu_68::UnicodeString&, UErrorCode&)",93957347397936,93957347397979],["icu_68::number::impl::GeneratorHelpers::symbols(icu_68::number::impl::MacroProps const&, icu_68::UnicodeString&, UErrorCode&)",93957347398272,93957347398542],["icu_68::number::impl::GeneratorHelpers::scale(icu_68::number::impl::MacroProps const&, icu_68::UnicodeString&, UErrorCode&)",93957347398624,93957347398739],["icu_68::number::impl::blueprint_helpers::generateFractionStem(int, int, icu_68::UnicodeString&, UErrorCode&)",93957347398848,93957347399034],["icu_68::number::impl::blueprint_helpers::generateScaleOption(int, icu_68::number::impl::DecNum const*, icu_68::UnicodeString&, UErrorCode&)",93957347399312,93957347399588],["icu_68::number::NumberFormatter::forSkeleton(icu_68::UnicodeString const&, UErrorCode&)",93957347399936,93957347399965],["icu_68::number::impl::SymbolsWrapper::SymbolsWrapper(icu_68::number::impl::SymbolsWrapper const&)",93957347400016,93957347400026],["icu_68::number::impl::SymbolsWrapper::SymbolsWrapper(icu_68::number::impl::SymbolsWrapper&&)",93957347400176,93957347400212],["icu_68::number::impl::SymbolsWrapper::operator=(icu_68::number::impl::SymbolsWrapper&&)",93957347400288,93957347400372],["icu_68::number::impl::SymbolsWrapper::setTo(icu_68::DecimalFormatSymbols const&)",93957347400432,93957347400530],["icu_68::number::impl::SymbolsWrapper::isDecimalFormatSymbols() const",93957347400608,93957347400620],["icu_68::number::impl::Usage::Usage(icu_68::number::impl::Usage const&)",93957347400640,93957347400753],["icu_68::number::impl::Usage::Usage(icu_68::number::impl::Usage&&)",93957347400896,93957347400929],["icu_68::number::impl::Usage::~Usage()",93957347401024,93957347401060],["mixedMeasuresToMicros(icu_68::MaybeStackVector<icu_68::Measure, 8> const&, icu_68::number::impl::DecimalQuantity*, icu_68::number::impl::MicroProps*, UErrorCode)",93957347401200,93957347401880],["icu_68::number::impl::UsagePrefsHandler::processQuantity(icu_68::number::impl::DecimalQuantity&, icu_68::number::impl::MicroProps&, UErrorCode&) const",93957347402080,93957347402725],["icu_68::number::impl::UnitConversionHandler::processQuantity(icu_68::number::impl::DecimalQuantity&, icu_68::number::impl::MicroProps&, UErrorCode&) const",93957347403824,93957347404082],["icu_68::number::impl::UsagePrefsHandler::~UsagePrefsHandler()",93957347404128,93957347404170],["icu_68::number::impl::UnitConversionHandler::~UnitConversionHandler()",93957347404240,93957347404306],["icu_68::units::ComplexUnitsConverter::~ComplexUnitsConverter()",93957347404656,93957347405057],["icu_68::number::impl::utils::getPatternForStyle(icu_68::Locale const&, char const*, icu_68::number::impl::CldrPatternStyle, UErrorCode&)",93957347405280,93957347405512],["icu_68::number::impl::DecNum::DecNum()",93957347405888,93957347405955],["icu_68::number::impl::DecNum::setTo(icu_68::StringPiece, UErrorCode&)",93957347406176,93957347406468],["icu_68::number::impl::DecNum::setTo(double, UErrorCode&)",93957347406656,93957347407009],["icu_68::number::impl::DecNum::normalize()",93957347407264,93957347407284],["icu_68::number::impl::DecNum::divideBy(icu_68::number::impl::DecNum const&, UErrorCode&)",93957347407360,93957347407415],["icu_68::number::impl::DecNum::isZero() const",93957347407440,93957347407471],["uprv_decContextSetStatus_68",93957347407584,93957347407596],["uprv_decNumberFromString_68",93957347407616,93957347408921],["decFinalize(decNumber*, decContext*, int*, unsigned int*)",93957347410528,93957347410854],["uprv_decNumberDivide_68",93957347411376,93957347411477],["decMultiplyOp(decNumber*, decNumber const*, decNumber const*, decContext*, unsigned int*)",93957347415120,93957347417764],["decCompare(decNumber const*, decNumber const*, unsigned char)",93957347419024,93957347419388],["decShiftToMost(unsigned char*, int, int)",93957347419488,93957347419871],["decTrim(decNumber*, decContext*, unsigned char, unsigned char, int*)",93957347420096,93957347420382],["uprv_decNumberSetBCD_68",93957347420992,93957347421453],["decUnitCompare(unsigned char const*, int, unsigned char const*, int, int)",93957347422000,93957347422434],["decSetOverflow(decNumber*, decContext*, unsigned int*)",93957347423168,93957347423438],["icu_68::NumberFormat::NumberFormat()",93957347423712,93957347423784],["icu_68::SharedNumberFormat::~SharedNumberFormat()",93957347423840,93957347423896],["icu_68::NumberFormat::operator=(icu_68::NumberFormat const&)",93957347424096,93957347424271],["icu_68::NumberFormat::format(double, icu_68::UnicodeString&, icu_68::FieldPositionIterator*, UErrorCode&) const",93957347424480,93957347424502],["icu_68::NumberFormat::format(int, icu_68::UnicodeString&, icu_68::FieldPosition&, UErrorCode&) const",93957347424544,93957347424569],["icu_68::NumberFormat::format(icu_68::StringPiece, icu_68::UnicodeString&, icu_68::FieldPositionIterator*, UErrorCode&) const",93957347424608,93957347424819],["icu_68::NumberFormat::format(icu_68::number::impl::DecimalQuantity const&, icu_68::UnicodeString&, icu_68::FieldPosition&, UErrorCode&) const",93957347424912,93957347424980],["icu_68::NumberFormat::format(icu_68::Formattable const&, icu_68::UnicodeString&, icu_68::FieldPositionIterator*, UErrorCode&) const",93957347425488,93957347425974],["icu_68::NumberFormat::format(double, icu_68::UnicodeString&) const",93957347426016,93957347426152],["icu_68::NumberFormat::parseCurrency(icu_68::UnicodeString const&, icu_68::ParsePosition&) const",93957347426256,93957347426610],["icu_68::NumberFormat::setLenient(signed char)",93957347426640,93957347426653],["icu_68::NumberFormat::createInstance(icu_68::Locale const&, UNumberFormatStyle, UErrorCode&)",93957347426752,93957347426862],["icu_68::NumberFormat::createCurrencyInstance(icu_68::Locale const&, UErrorCode&)",93957347426960,93957347426978],["icu_68::NumberFormat::internalCreateInstance(icu_68::Locale const&, UNumberFormatStyle, UErrorCode&)",93957347427024,93957347427329],["icu_68::NumberFormat::isGroupingUsed() const",93957347427600,93957347427612],["icu_68::WholeStringBreakIterator::last()",93957347427632,93957347427644],["icu_68::NumberFormat::getMinimumIntegerDigits() const",93957347427712,93957347427724],["icu_68::NumberFormat::getMaximumFractionDigits() const",93957347427792,93957347427804],["icu_68::NumberFormat::getMinimumFractionDigits() const",93957347427872,93957347427884],["icu_68::NumberFormat::setCurrency(char16_t const*, UErrorCode&)",93957347427952,93957347428010],["icu_68::NumberFormat::setContext(UDisplayContext, UErrorCode&)",93957347428128,93957347428169],["icu_68::LocaleCacheKey<icu_68::SharedNumberFormat>::createObject(void const*, UErrorCode&) const",93957347428224,93957347428434],["icu_68::UnicodeString::setTo(char16_t const*, int)",93957347430720,93957347430790],["icu_68::compareUnicodeString(UElement, UElement)",93957347430944,93957347431051],["icu_68::ICUNumberFormatService::cloneInstance(icu_68::UObject*) const",93957347431088,93957347431102],["numfmt_cleanup()",93957347431344,93957347431432],["icu_68::LocaleCacheKey<icu_68::SharedNumberFormat>::~LocaleCacheKey()",93957347431680,93957347431722],["icu_68::LocaleCacheKey<icu_68::SharedNumberFormat>::hashCode() const",93957347431792,93957347431846],["icu_68::numparse::impl::AffixTokenMatcherWarehouse::operator=(icu_68::numparse::impl::AffixTokenMatcherWarehouse&&)",93957347431952,93957347432502],["icu_68::numparse::impl::AffixMatcherWarehouse::~AffixMatcherWarehouse()",93957347433104,93957347433492],["icu_68::numparse::impl::DecimalMatcher::~DecimalMatcher()",93957347433824,93957347433996],["icu_68::numparse::impl::NumberParserImpl::createParserFromProperties(icu_68::number::impl::DecimalFormatProperties const&, icu_68::DecimalFormatSymbols const&, bool, UErrorCode&)",93957347434176,93957347437887],["icu_68::numparse::impl::NumberParserImpl::~NumberParserImpl()",93957347439008,93957347439101],["icu_68::numparse::impl::NumberParserImpl::~NumberParserImpl()",93957347439584,93957347439678],["hashStringTrieNode(UElement)",93957347439840,93957347439849],["icu_68::numparse::impl::NumberParserImpl::parseLongestRecursive(icu_68::StringSegment&, icu_68::numparse::impl::ParsedNumber&, int, UErrorCode&) const",93957347440272,93957347441155],["icu_68::numparse::impl::AffixPatternMatcher::~AffixPatternMatcher()",93957347441248,93957347441325],["icu_68::numparse::impl::DecimalMatcher::DecimalMatcher(icu_68::DecimalFormatSymbols const&, icu_68::number::impl::Grouper const&, int)",93957347441776,93957347442977],["icu_68::numparse::impl::DecimalMatcher::match(icu_68::StringSegment&, icu_68::numparse::impl::ParsedNumber&, signed char, UErrorCode&) const",93957347443008,93957347445938],["icu_68::numparse::impl::DecimalMatcher::toString() const",93957347446352,93957347446383],["icu_68::numparse::impl::SeriesMatcher::match(icu_68::StringSegment&, icu_68::numparse::impl::ParsedNumber&, UErrorCode&) const",93957347446416,93957347447032],["icu_68::numparse::impl::SeriesMatcher::postProcess(icu_68::numparse::impl::ParsedNumber&) const",93957347447120,93957347447200],["icu_68::numparse::impl::ArraySeriesMatcher::ArraySeriesMatcher(icu_68::MaybeStackArray<icu_68::numparse::impl::NumberParseMatcher const*, 3>&, int)",93957347447248,93957347447351],["icu_68::numparse::impl::ArraySeriesMatcher::toString() const",93957347447392,93957347447423],["icu_68::numparse::impl::ArraySeriesMatcher::~ArraySeriesMatcher()",93957347447472,93957347447528],["icu_68::numparse::impl::AffixTokenMatcherWarehouse::currency(UErrorCode&)",93957347448352,93957347448695],["non-virtual thunk to icu_68::numparse::impl::AffixPatternMatcherBuilder::addMatcher(icu_68::numparse::impl::NumberParseMatcher&)",93957347448864,93957347449024],["icu_68::numparse::impl::CodePointMatcher* icu_68::MemoryPool<icu_68::numparse::impl::CodePointMatcher, 8>::create<int&>(int&)",93957347449440,93957347449649],["icu_68::numparse::impl::CodePointMatcher::smokeTest(icu_68::StringSegment const&) const",93957347449728,93957347449747],["icu_68::numparse::impl::AffixPatternMatcher::fromAffixPattern(icu_68::UnicodeString const&, icu_68::numparse::impl::AffixTokenMatcherWarehouse&, int, bool*, UErrorCode&)",93957347449792,93957347450128],["icu_68::numparse::impl::CompactUnicodeString<4>::CompactUnicodeString(icu_68::UnicodeString const&, UErrorCode&)",93957347450192,93957347450427],["icu_68::numparse::impl::AffixMatcherWarehouse::AffixMatcherWarehouse(icu_68::numparse::impl::AffixTokenMatcherWarehouse*)",93957347450720,93957347451172],["icu_68::numparse::impl::AffixMatcherWarehouse::createAffixMatchers(icu_68::number::impl::AffixPatternProvider const&, icu_68::numparse::impl::MutableMatcherCollection&, icu_68::numparse::impl::IgnorablesMatcher const&, int, UErrorCode&)",93957347451872,93957347454245],["icu_68::numparse::impl::AffixMatcher::match(icu_68::StringSegment&, icu_68::numparse::impl::ParsedNumber&, UErrorCode&) const",93957347455072,93957347455606],["icu_68::numparse::impl::AffixMatcher::postProcess(icu_68::numparse::impl::ParsedNumber&) const",93957347455696,93957347456272],["icu_68::numparse::impl::AffixPatternMatcherBuilder::~AffixPatternMatcherBuilder()",93957347456832,93957347456899],["non-virtual thunk to icu_68::numparse::impl::AffixPatternMatcherBuilder::~AffixPatternMatcherBuilder()",93957347456976,93957347457044],["icu_68::numparse::impl::CombinedCurrencyMatcher::match(icu_68::StringSegment&, icu_68::numparse::impl::ParsedNumber&, UErrorCode&) const",93957347457808,93957347458160],["icu_68::numparse::impl::CombinedCurrencyMatcher::toString() const",93957347459344,93957347459375],["icu_68::numparse::impl::ParsedNumber::ParsedNumber()",93957347459408,93957347459510],["icu_68::numparse::impl::ParsedNumber::postProcess()",93957347459552,93957347459576],["icu_68::numparse::impl::ParsedNumber::seenNumber() const",93957347459616,93957347459643],["icu_68::numparse::impl::ParsedNumber::isBetterThan(icu_68::numparse::impl::ParsedNumber const&)",93957347459824,93957347459839],["icu_68::numparse::impl::ScientificMatcher::match(icu_68::StringSegment&, icu_68::numparse::impl::ParsedNumber&, UErrorCode&) const",93957347460096,93957347460731],["icu_68::numparse::impl::ScientificMatcher::toString() const",93957347460768,93957347460799],["icu_68::numparse::impl::ScientificMatcher::~ScientificMatcher()",93957347460928,93957347461055],["icu_68::numparse::impl::SymbolMatcher::match(icu_68::StringSegment&, icu_68::numparse::impl::ParsedNumber&, UErrorCode&) const",93957347461072,93957347461275],["icu_68::numparse::impl::SymbolMatcher::toString() const",93957347461344,93957347461375],["icu_68::numparse::impl::IgnorablesMatcher::toString() const",93957347461568,93957347461599],["icu_68::numparse::impl::InfinityMatcher::isDisabled(icu_68::numparse::impl::ParsedNumber const&) const",93957347461728,93957347461740],["icu_68::numparse::impl::MinusSignMatcher::MinusSignMatcher(icu_68::DecimalFormatSymbols const&, bool)",93957347461776,93957347461908],["icu_68::numparse::impl::MinusSignMatcher::accept(icu_68::StringSegment&, icu_68::numparse::impl::ParsedNumber&) const",93957347461952,93957347461969],["icu_68::numparse::impl::NanMatcher::isDisabled(icu_68::numparse::impl::ParsedNumber const&) const",93957347462112,93957347462125],["icu_68::numparse::impl::PaddingMatcher::PaddingMatcher(icu_68::UnicodeString const&)",93957347462160,93957347462276],["icu_68::numparse::impl::PercentMatcher::isDisabled(icu_68::numparse::impl::ParsedNumber const&) const",93957347462416,93957347462429],["icu_68::numparse::impl::PermilleMatcher::PermilleMatcher(icu_68::DecimalFormatSymbols const&)",93957347462464,93957347462590],["icu_68::numparse::impl::PermilleMatcher::accept(icu_68::StringSegment&, icu_68::numparse::impl::ParsedNumber&) const",93957347462608,93957347462625],["icu_68::numparse::impl::PlusSignMatcher::accept(icu_68::StringSegment&, icu_68::numparse::impl::ParsedNumber&) const",93957347462784,93957347462797],["icu_68::numparse::impl::SymbolMatcher::~SymbolMatcher()",93957347462864,93957347462906],["icu_68::numparse::impl::RequireAffixValidator::toString() const",93957347462944,93957347462975],["icu_68::numparse::impl::RequireCurrencyValidator::toString() const",93957347463008,93957347463039],["icu_68::numparse::impl::RequireDecimalSeparatorValidator::postProcess(icu_68::numparse::impl::ParsedNumber&) const",93957347463072,93957347463105],["icu_68::numparse::impl::RequireNumberValidator::postProcess(icu_68::numparse::impl::ParsedNumber&) const",93957347463152,93957347463184],["icu_68::numparse::impl::MultiplierParseHandler::MultiplierParseHandler(icu_68::number::Scale)",93957347463216,93957347463240],["icu_68::numparse::impl::MultiplierParseHandler::toString() const",93957347463280,93957347463311],["icu_68::numparse::impl::MultiplierParseHandler::~MultiplierParseHandler()",93957347463360,93957347463410],["icu_68::NumberingSystem::NumberingSystem(icu_68::NumberingSystem const&)",93957347463440,93957347463518],["icu_68::NumberingSystem::createInstance(icu_68::Locale const&, UErrorCode&)",93957347463920,93957347464929],["icu_68::NumberingSystem::~NumberingSystem()",93957347465456,93957347465498],["icu_68::TimeZoneRule::getRawOffset() const",93957347465568,93957347465577],["icu_68::OlsonTimeZone::getDynamicClassID() const",93957347465600,93957347465613],["icu_68::OlsonTimeZone::~OlsonTimeZone()",93957347467360,93957347467416],["icu_68::OlsonTimeZone::~OlsonTimeZone()",93957347467696,93957347467760],["icu_68::OlsonTimeZone::clone() const",93957347467872,93957347468173],["icu_68::OlsonTimeZone::getOffset(unsigned char, int, int, int, unsigned char, int, int, UErrorCode&) const",93957347468336,93957347468603],["icu_68::OlsonTimeZone::getOffset(double, signed char, int&, int&, UErrorCode&) const",93957347469472,93957347469559],["icu_68::OlsonTimeZone::getRawOffset() const",93957347469664,93957347469743],["icu_68::OlsonTimeZone::useDaylightTime() const",93957347469856,93957347470348],["icu_68::OlsonTimeZone::inDaylightTime(double, UErrorCode&) const",93957347470400,93957347470454],["arrayEqual(void const*, void const*, int)",93957347470896,93957347470965],["icu_68::OlsonTimeZone::getNextTransition(double, signed char, icu_68::TimeZoneTransition&) const",93957347472976,93957347474117],["icu_68::OlsonTimeZone::countTransitionRules(UErrorCode&) const",93957347475232,93957347475547],["icu_68::BasicTimeZone::BasicTimeZone(icu_68::UnicodeString const&)",93957347475920,93957347475951],["icu_68::BasicTimeZone::~BasicTimeZone()",93957347475984,93957347475994],["icu_68::BasicTimeZone::getSimpleRulesNear(double, icu_68::InitialTimeZoneRule*&, icu_68::AnnualTimeZoneRule*&, icu_68::AnnualTimeZoneRule*&, UErrorCode&) const",93957347477280,93957347480013],["icu_68::DateTimeRule::getDynamicClassID() const",93957347480048,93957347480061],["icu_68::DateTimeRule::DateTimeRule(int, int, int, int, icu_68::DateTimeRule::TimeRuleType)",93957347480112,93957347480159],["icu_68::DateTimeRule::DateTimeRule(icu_68::DateTimeRule const&)",93957347480224,93957347480282],["icu_68::DateTimeRule::getRuleDayOfMonth() const",93957347480400,93957347480409],["icu_68::PersianCalendar::clone() const",93957347480432,93957347480493],["icu_68::PersianCalendar::handleGetLimit(UCalendarDateFields, icu_68::Calendar::ELimitType) const",93957347480576,93957347480603],["icu_68::PersianCalendar::handleGetYearLength(int) const",93957347480736,93957347480800],["icu_68::PersianCalendar::handleComputeFields(int, UErrorCode&)",93957347480912,93957347481180],["icu_68::initializeSystemDefaultCentury()",93957347481248,93957347481560],["icu_68::PersianCalendar::getDynamicClassID() const",93957347481632,93957347481645],["icu_68::PluralKeywordEnumeration::getDynamicClassID() const",93957347481664,93957347481677],["icu_68::PluralRules::operator=(icu_68::PluralRules const&)",93957347481728,93957347482046],["icu_68::PluralRules::~PluralRules()",93957347482128,93957347482215],["icu_68::SharedPluralRules::~SharedPluralRules()",93957347482272,93957347482328],["icu_68::PluralRules::getAvailableLocales(UErrorCode&)",93957347482432,93957347482638],["icu_68::LocaleCacheKey<icu_68::SharedPluralRules>::createObject(void const*, UErrorCode&) const",93957347485584,93957347485839],["icu_68::PluralRules::createSharedInstance(icu_68::Locale const&, UPluralType, UErrorCode&)",93957347486464,93957347486707],["icu_68::PluralRules::forLocale(icu_68::Locale const&, UPluralType, UErrorCode&)",93957347486736,93957347486927],["icu_68::PluralRules::select(icu_68::IFixedDecimal const&) const",93957347488464,93957347488546],["icu_68::PluralRules::select(icu_68::number::FormattedNumber const&, UErrorCode&) const",93957347488704,93957347489019],["icu_68::PluralRules::getKeywords(UErrorCode&) const",93957347489248,93957347489372],["icu_68::PluralRules::operator==(icu_68::PluralRules const&) const",93957347489632,93957347490061],["icu_68::PluralRuleParser::checkSyntax(UErrorCode&)",93957347491008,93957347491276],["icu_68::AndConstraint::~AndConstraint()",93957347491600,93957347491672],["icu_68::AndConstraint::isFulfilled(icu_68::IFixedDecimal const&)",93957347491760,93957347492071],["icu_68::OrConstraint::~OrConstraint()",93957347492288,93957347492360],["icu_68::RuleChain::RuleChain(icu_68::RuleChain const&)",93957347492448,93957347492734],["icu_68::RuleChain::~RuleChain()",93957347492832,93957347492925],["icu_68::PluralRuleParser::~PluralRuleParser()",93957347492960,93957347493002],["icu_68::PluralKeywordEnumeration::PluralKeywordEnumeration(icu_68::RuleChain*, UErrorCode&)",93957347493952,93957347494343],["icu_68::FormatNameEnumeration::reset(UErrorCode&)",93957347494400,93957347494413],["icu_68::PluralKeywordEnumeration::~PluralKeywordEnumeration()",93957347494432,93957347494474],["icu_68::FixedDecimal::init(double)",93957347494544,93957347495476],["non-virtual thunk to icu_68::FixedDecimal::~FixedDecimal()",93957347495520,93957347495549],["non-virtual thunk to icu_68::FixedDecimal::~FixedDecimal()",93957347495600,93957347495637],["icu_68::FixedDecimal::isNaN() const",93957347495728,93957347495741],["icu_68::FixedDecimal::hasIntegerValue() const",93957347495760,93957347495773],["icu_68::PluralAvailableLocalesEnumeration::~PluralAvailableLocalesEnumeration()",93957347495840,93957347495909],["icu_68::PluralAvailableLocalesEnumeration::reset(UErrorCode&)",93957347496048,93957347496080],["icu_68::LocaleCacheKey<icu_68::SharedPluralRules>::~LocaleCacheKey()",93957347496112,93957347496154],["icu_68::LocaleCacheKey<icu_68::SharedPluralRules>::hashCode() const",93957347496224,93957347496278],["icu_68::StandardPluralRanges::forLocale(icu_68::Locale const&, UErrorCode&)",93957347496384,93957347496832],["icu_68::StandardPluralRanges::toPointer(UErrorCode&) &&",93957347497024,93957347497193],["icu_68::RuleBasedNumberFormat::getDynamicClassID() const",93957347498112,93957347498125],["icu_68::RuleBasedNumberFormat::RuleBasedNumberFormat(icu_68::URBNFRuleSetTag, icu_68::Locale const&, UErrorCode&)",93957347500864,93957347501741],["icu_68::RuleBasedNumberFormat::dispose()",93957347502144,93957347502569],["icu_68::RuleBasedNumberFormat::~RuleBasedNumberFormat()",93957347502592,93957347502654],["icu_68::RuleBasedNumberFormat::clone() const",93957347502736,93957347502963],["icu_68::RuleBasedNumberFormat::getRules() const",93957347503248,93957347503356],["icu_68::RuleBasedNumberFormat::getNumberOfRuleSetNames() const",93957347503696,93957347503784],["icu_68::RuleBasedNumberFormat::getRuleSetDisplayNameLocale(int, UErrorCode&) const",93957347503824,93957347504555],["icu_68::RuleBasedNumberFormat::getRuleSetDisplayName(icu_68::UnicodeString const&, icu_68::Locale const&)",93957347505264,93957347505518],["icu_68::RuleBasedNumberFormat::format(icu_68::number::impl::DecimalQuantity const&, icu_68::UnicodeString&, icu_68::FieldPosition&, UErrorCode&) const",93957347505728,93957347506271],["icu_68::RuleBasedNumberFormat::format(long, icu_68::NFRuleSet*, icu_68::UnicodeString&, UErrorCode&) const",93957347506336,93957347506790],["icu_68::RuleBasedNumberFormat::format(double, icu_68::NFRuleSet&, icu_68::UnicodeString&, UErrorCode&) const",93957347506864,93957347507258],["icu_68::RuleBasedNumberFormat::format(long, icu_68::UnicodeString const&, icu_68::UnicodeString&, icu_68::FieldPosition&, UErrorCode&) const",93957347507296,93957347507621],["icu_68::RuleBasedNumberFormat::format(double, icu_68::UnicodeString const&, icu_68::UnicodeString&, icu_68::FieldPosition&, UErrorCode&) const",93957347507712,93957347508038],["icu_68::RuleBasedNumberFormat::parse(icu_68::UnicodeString const&, icu_68::Formattable&, icu_68::ParsePosition&) const",93957347508272,93957347509121],["icu_68::RuleBasedNumberFormat::setDefaultRuleSet(icu_68::UnicodeString const&, UErrorCode&)",93957347509200,93957347509910],["icu_68::RuleBasedNumberFormat::getDefaultRuleSetName() const",93957347510816,93957347510922],["icu_68::RuleBasedNumberFormat::initializeDefaultNaNRule(UErrorCode&)",93957347511296,93957347511663],["icu_68::RuleBasedNumberFormat::setContext(UDisplayContext, UErrorCode&)",93957347512176,93957347512378],["icu_68::RuleBasedNumberFormat::getCollator() const",93957347512704,93957347513129],["icu_68::RuleBasedNumberFormat::getDefaultNaNRule() const",93957347513152,93957347513165],["icu_68::RuleBasedNumberFormat::setDecimalFormatSymbols(icu_68::DecimalFormatSymbols const&)",93957347513472,93957347513549],["icu_68::RuleBasedNumberFormat::getRoundingMode() const",93957347513664,93957347513676],["icu_68::RuleBasedNumberFormat::isLenient() const",93957347513696,93957347513708],["icu_68::PluralFormat::PluralFormat(icu_68::Locale const&, UPluralType, icu_68::UnicodeString const&, UErrorCode&)",93957347513728,93957347513956],["icu_68::PluralFormat::~PluralFormat()",93957347514192,93957347514299],["icu_68::PluralFormat::format(icu_68::Formattable const&, icu_68::UnicodeString&, icu_68::FieldPosition&, UErrorCode&) const",93957347514432,93957347514546],["icu_68::PluralFormat::format(int, UErrorCode&) const",93957347515696,93957347515981],["icu_68::PluralFormat::clone() const",93957347517216,93957347517267],["icu_68::PluralFormat::parseObject(icu_68::UnicodeString const&, icu_68::Formattable&, icu_68::ParsePosition&) const",93957347517472,93957347517484],["icu_68::PluralFormat::PluralSelectorAdapter::~PluralSelectorAdapter()",93957347518640,93957347518672],["icu_68::PluralFormat::PluralSelectorAdapter::select(void*, double, UErrorCode&) const",93957347518720,93957347518748],["icu_68::NFRule::parseRuleDescriptor(icu_68::UnicodeString&, UErrorCode&)",93957347518864,93957347520598],["icu_68::NFRule::makeRules(icu_68::UnicodeString&, icu_68::NFRuleSet*, icu_68::NFRule const*, icu_68::RuleBasedNumberFormat const*, icu_68::NFRuleList&, UErrorCode&)",93957347520720,93957347521914],["icu_68::NFRuleList::add(icu_68::NFRule*)",93957347522816,93957347522899],["icu_68::NFRule::extractSubstitution(icu_68::NFRuleSet const*, icu_68::NFRule const*, UErrorCode&)",93957347523120,93957347523772],["icu_68::NFRule::_appendRuleText(icu_68::UnicodeString&) const",93957347524016,93957347525511],["icu_68::NFRule::doFormat(long, icu_68::UnicodeString&, int, int, UErrorCode&) const",93957347525552,93957347526347],["icu_68::NFRule::shouldRollBack(long) const",93957347527216,93957347527360],["icu_68::NFRule::matchToDelimiter(icu_68::UnicodeString const&, int, double, icu_68::UnicodeString const&, icu_68::ParsePosition&, icu_68::NFSubstitution const*, unsigned int, double) const",93957347529152,93957347530223],["icu_68::NFRule::allIgnorable(icu_68::UnicodeString const&, UErrorCode&) const",93957347530960,93957347531190],["icu_68::NFRule::findTextLenient(icu_68::UnicodeString const&, icu_68::UnicodeString const&, int, int*) const",93957347532624,93957347532965],["icu_68::NFRuleSet::NFRuleSet(icu_68::RuleBasedNumberFormat*, icu_68::UnicodeString*, int, UErrorCode&)",93957347533056,93957347534018],["icu_68::NFRuleList::deleteAll()",93957347534624,93957347534802],["icu_68::NFRuleSet::setBestFractionRule(int, icu_68::NFRule*, signed char)",93957347535024,93957347535308],["icu_68::NFRuleSet::operator==(icu_68::NFRuleSet const&) const",93957347535616,93957347536082],["icu_68::NFRuleSet::format(long, icu_68::UnicodeString&, int, int, UErrorCode&) const",93957347536624,93957347536733],["icu_68::NFRuleSet::format(double, icu_68::UnicodeString&, int, int, UErrorCode&) const",93957347536992,93957347537099],["icu_68::NFRuleSet::findFractionRuleSetRule(double) const",93957347537376,93957347538216],["icu_68::NFRuleSet::parse(icu_68::UnicodeString const&, icu_68::ParsePosition&, double, unsigned int, icu_68::Formattable&) const",93957347538384,93957347539460],["icu_68::util64_pow(unsigned int, unsigned short)",93957347539888,93957347539956],["icu_68::NFSubstitution::~NFSubstitution()",93957347540272,93957347540328],["icu_68::NFSubstitution::makeSubstitution(int, icu_68::NFRule const*, icu_68::NFRule const*, icu_68::NFRuleSet const*, icu_68::RuleBasedNumberFormat const*, icu_68::UnicodeString const&, UErrorCode&)",93957347540400,93957347541086],["icu_68::MultiplierSubstitution::MultiplierSubstitution(int, icu_68::NFRule const*, icu_68::NFRuleSet const*, icu_68::UnicodeString const&, UErrorCode&)",93957347541440,93957347541518],["icu_68::NFSubstitution::setDecimalFormatSymbols(icu_68::DecimalFormatSymbols const&, UErrorCode&)",93957347542160,93957347542188],["icu_68::NFSubstitution::operator==(icu_68::NFSubstitution const&) const",93957347542208,93957347542319],["icu_68::NFSubstitution::doSubstitution(long, icu_68::UnicodeString&, int, int, UErrorCode&) const",93957347542608,93957347543074],["icu_68::NFSubstitution::doParse(icu_68::UnicodeString const&, icu_68::ParsePosition&, double, double, signed char, unsigned int, icu_68::Formattable&) const",93957347543504,93957347543782],["icu_68::MultiplierSubstitution::getDynamicClassID() const",93957347543808,93957347543821],["icu_68::ModulusSubstitution::ModulusSubstitution(int, icu_68::NFRule const*, icu_68::NFRule const*, icu_68::NFRuleSet const*, icu_68::UnicodeString const&, UErrorCode&)",93957347543968,93957347544130],["icu_68::ModulusSubstitution::operator==(icu_68::NFSubstitution const&) const",93957347544160,93957347544312],["icu_68::ModulusSubstitution::doSubstitution(double, icu_68::UnicodeString&, int, int, UErrorCode&) const",93957347544448,93957347544566],["icu_68::ModulusSubstitution::toString(icu_68::UnicodeString&) const",93957347544720,93957347544897],["icu_68::FractionalPartSubstitution::FractionalPartSubstitution(int, icu_68::NFRuleSet const*, icu_68::UnicodeString const&, UErrorCode&)",93957347544928,93957347545199],["icu_68::FractionalPartSubstitution::doParse(icu_68::UnicodeString const&, icu_68::ParsePosition&, double, double, signed char, unsigned int, icu_68::Formattable&) const",93957347545600,93957347546678],["icu_68::FractionalPartSubstitution::getDynamicClassID() const",93957347546832,93957347546845],["icu_68::NumeratorSubstitution::doSubstitution(double, icu_68::UnicodeString&, int, int, UErrorCode&) const",93957347546864,93957347547507],["icu_68::NumeratorSubstitution::operator==(icu_68::NFSubstitution const&) const",93957347548496,93957347548645],["icu_68::SameValueSubstitution::tokenChar() const",93957347548672,93957347548682],["icu_68::MultiplierSubstitution::transformNumber(long) const",93957347548736,93957347548772],["icu_68::MultiplierSubstitution::composeRuleValue(double, double) const",93957347548816,93957347548832],["icu_68::NumeratorSubstitution::tokenChar() const",93957347548848,93957347548858],["icu_68::ModulusSubstitution::transformNumber(double) const",93957347548912,93957347548928],["icu_68::ModulusSubstitution::tokenChar() const",93957347548992,93957347549002],["icu_68::IntegralPartSubstitution::composeRuleValue(double, double) const",93957347549024,93957347549034],["icu_68::FractionalPartSubstitution::transformNumber(double) const",93957347549056,93957347549093],["icu_68::AbsoluteValueSubstitution::transformNumber(double) const",93957347549120,93957347549130],["icu_68::NumeratorSubstitution::transformNumber(long) const",93957347549152,93957347549166],["icu_68::NumeratorSubstitution::composeRuleValue(double, double) const",93957347549184,93957347549194],["icu_68::CollationElementIterator::~CollationElementIterator()",93957347549216,93957347549288],["icu_68::CollationElementIterator::getOffset() const",93957347549376,93957347549454],["icu_68::CollationIterator::nextCE(UErrorCode&)",93957347549664,93957347550240],["icu_68::CollationElementIterator::CollationElementIterator(icu_68::UnicodeString const&, icu_68::RuleBasedCollator const*, UErrorCode&)",93957347550848,93957347550923],["icu_68::CollationElementIterator::computeMaxExpansions(icu_68::CollationData const*, UErrorCode&)",93957347551072,93957347551423],["icu_68::CollationIterator::CEBuffer::ensureAppendCapacity(int, UErrorCode&)",93957347551744,93957347551953],["icu_68::CollationIterator::operator==(icu_68::CollationIterator const&) const",93957347552064,93957347552219],["icu_68::CollationIterator::fetchCEs(UErrorCode&)",93957347552304,93957347552381],["icu_68::CollationIterator::getDataCE32(int) const",93957347552560,93957347552705],["icu_68::CollationIterator::nextCEFromCE32(icu_68::CollationData const*, int, unsigned int, UErrorCode&)",93957347552752,93957347552823],["icu_68::CollationIterator::getCE32FromPrefix(icu_68::CollationData const*, unsigned int, UErrorCode&)",93957347557168,93957347557530],["icu_68::CollationIterator::appendNumericCEs(unsigned int, signed char, UErrorCode&)",93957347559072,93957347560309],["icu_68::CollationIterator::appendNumericSegmentCEs(char const*, int, UErrorCode&)",93957347562752,93957347564636],["icu_68::UVector32::addElement(int, UErrorCode&)",93957347564896,93957347564960],["icu_68::enumTailoredRange(void const*, int, int, unsigned int)",93957347565024,93957347565046],["icu_68::TailoredSet::compare(int, unsigned int, unsigned int)",93957347565488,93957347566658],["icu_68::TailoredSet::addPrefixes(icu_68::CollationData const*, int, char16_t const*)",93957347567536,93957347567802],["icu_68::TailoredSet::addContractions(int, char16_t const*)",93957347568800,93957347569149],["icu_68::TailoredSet::addPrefix(icu_68::CollationData const*, icu_68::UnicodeString const&, int, unsigned int)",93957347569360,93957347569605],["icu_68::enumCnERange(void const*, int, int, unsigned int)",93957347569760,93957347570020],["icu_68::ContractionsAndExpansions::handlePrefixes(int, int, unsigned int)",93957347571104,93957347571559],["icu_68::ContractionsAndExpansions::addStrings(int, int, icu_68::UnicodeSet*)",93957347571968,93957347572339],["icu_68::RuleBasedCollator::internalBuildTailoring(icu_68::UnicodeString const&, int, UColAttributeValue, UParseError*, icu_68::UnicodeString*, UErrorCode&)",93957347572496,93957347573027],["icu_68::CollationBuilder::CollationBuilder(icu_68::CollationTailoring const*, UErrorCode&)",93957347573760,93957347574058],["icu_68::CollationBuilder::~CollationBuilder()",93957347574160,93957347574249],["icu_68::CollationBuilder::closeOverComposites(UErrorCode&)",93957347575968,93957347576918],["icu_68::CollationBuilder::addReset(int, icu_68::UnicodeString const&, char const*&, UErrorCode&)",93957347577136,93957347578350],["icu_68::CollationBuilder::findOrInsertNodeForCEs(int, char const*&, UErrorCode&)",93957347580528,93957347580936],["icu_68::CollationBuilder::findCommonNode(int, int) const",93957347581296,93957347581484],["icu_68::CollationBuilder::insertNodeBetween(int, int, long, UErrorCode&)",93957347581712,93957347582053],["icu_68::CollationBuilder::addRelation(int, icu_68::UnicodeString const&, icu_68::UnicodeString const&, icu_68::UnicodeString const&, char const*&, UErrorCode&)",93957347582704,93957347584169],["icu_68::CollationBuilder::setCaseBits(icu_68::UnicodeString const&, char const*&, UErrorCode&)",93957347584624,93957347585608],["icu_68::CollationBuilder::addIfDifferent(icu_68::UnicodeString const&, icu_68::UnicodeString const&, long const*, int, unsigned int, UErrorCode&)",93957347585728,93957347586052],["icu_68::CollationBuilder::suppressContractions(icu_68::UnicodeSet const&, char const*&, UErrorCode&)",93957347586464,93957347586514],["icu_68::CollationBuilder::addOnlyClosure(icu_68::UnicodeString const&, icu_68::UnicodeString const&, long const*, int, unsigned int, UErrorCode&)",93957347586560,93957347589055],["icu_68::CollationBuilder::mergeCompositeIntoString(icu_68::UnicodeString const&, int, int, icu_68::UnicodeString const&, icu_68::UnicodeString&, icu_68::UnicodeString&, UErrorCode&) const",93957347590352,93957347591072],["icu_68::CEFinalizer::modifyCE(long) const",93957347591168,93957347591266],["icu_68::CollationWeights::CollationWeights()",93957347591312,93957347591343],["icu_68::CollationWeights::initForSecondary()",93957347591440,93957347591474],["icu_68::CollationWeights::getWeightRanges(unsigned int, unsigned int)",93957347591536,93957347592939],["icu_68::CollationWeights::allocWeightsInMinLengthRanges(int, int)",93957347592976,93957347593947],["icu_68::CollationWeights::nextWeight()",93957347594384,93957347594675],["icu_68::CollationRuleParser::parse(icu_68::UnicodeString const&, icu_68::CollationSettings&, UParseError*, UErrorCode&)",93957347594768,93957347594847],["icu_68::CollationRuleParser::parseRuleChain(UErrorCode&)",93957347595360,93957347595883],["icu_68::CollationRuleParser::parseResetAndPosition(UErrorCode&)",93957347600880,93957347601908],["icu_68::CollationRuleParser::parseRelationStrings(int, int, UErrorCode&)",93957347602720,93957347603388],["icu_68::CollationRuleParser::skipWhiteSpace(int) const",93957347604752,93957347604865],["icu_68::CollationRuleParser::parseTailoringString(int, icu_68::UnicodeString&, UErrorCode&)",93957347605776,93957347606095],["icu_68::CollationRuleParser::parseString(int, icu_68::UnicodeString&, UErrorCode&)",93957347606432,93957347607497],["icu_68::UnicodeString::setTo(char16_t)",93957347608224,93957347608289],["icu_68::CollationRuleParser::getOnOffValue(icu_68::UnicodeString const&)",93957347608992,93957347609349],["icu_68::CollationRuleParser::getReorderCode(char const*)",93957347609952,93957347610141],["icu_68::UTF8CollationIterator::~UTF8CollationIterator()",93957347610192,93957347610202],["icu_68::DataBuilderCollationIterator::fetchCEs(icu_68::UnicodeString const&, int, long*, int)",93957347610240,93957347610844],["icu_68::DataBuilderCollationIterator::resetToOffset(int)",93957347610992,93957347611022],["icu_68::DataBuilderCollationIterator::nextCodePoint(UErrorCode&)",93957347611040,93957347611123],["icu_68::DataBuilderCollationIterator::forwardNumCodePoints(int, UErrorCode&)",93957347611216,93957347611258],["icu_68::DataBuilderCollationIterator::getDataCE32(int) const",93957347611312,93957347611333],["icu_68::CollationDataBuilder::buildContext(icu_68::ConditionalCE32*, UErrorCode&)",93957347611584,93957347613438],["icu_68::CollationDataBuilder::CollationDataBuilder(UErrorCode&)",93957347613616,93957347613857],["icu_68::CollationDataBuilder::~CollationDataBuilder()",93957347614016,93957347614044],["icu_68::CollationDataBuilder::isCompressibleLeadByte(unsigned int) const",93957347614272,93957347614291],["icu_68::CollationDataBuilder::addCE32(icu_68::UnicodeString const&, icu_68::UnicodeString const&, unsigned int, UErrorCode&)",93957347614480,93957347615853],["icu_68::CollationDataBuilder::encodeOneCE(long, UErrorCode&)",93957347617408,93957347617670],["icu_68::CollationDataBuilder::encodeExpansion32(int const*, int, UErrorCode&)",93957347618144,93957347618561],["icu_68::CollationDataBuilder::copyContractionsFromBaseCE32(icu_68::UnicodeString&, int, unsigned int, icu_68::ConditionalCE32*, UErrorCode&)",93957347619040,93957347620145],["icu_68::enumRangeForCopy(void const*, int, int, unsigned int)",93957347620464,93957347620606],["icu_68::CollationDataBuilder::suppressContractions(icu_68::UnicodeSet const&, UErrorCode&)",93957347621024,93957347621579],["icu_68::CollationDataBuilder::setDigitTags(UErrorCode&)",93957347622176,93957347622779],["icu_68::CollationDataBuilder::build(icu_68::CollationData&, UErrorCode&)",93957347622848,93957347622970],["icu_68::CollationDataBuilder::buildFastLatinTable(icu_68::CollationData&, UErrorCode&)",93957347623920,93957347624257],["icu_68::CollationDataBuilder::addContextTrie(unsigned int, icu_68::UCharsTrieBuilder&, UErrorCode&)",93957347624528,93957347625031],["icu_68::CollationDataBuilder::getCEs(icu_68::UnicodeString const&, int, long*, int)",93957347625072,93957347625530],["icu_68::CopyHelper::copyCE32(unsigned int)",93957347625712,93957347627674],["icu_68::CollationFastLatinBuilder::~CollationFastLatinBuilder()",93957347627808,93957347627889],["icu_68::CollationFastLatinBuilder::forData(icu_68::CollationData const&, UErrorCode&)",93957347628000,93957347628399],["icu_68::CollationFastLatinBuilder::getCEs(icu_68::CollationData const&, UErrorCode&)",93957347628768,93957347629668],["icu_68::CollationFastLatinBuilder::encodeCharCEs(UErrorCode&)",93957347630544,93957347630956],["icu_68::CollationFastLatinBuilder::inSameGroup(unsigned int, unsigned int) const",93957347631696,93957347631792],["icu_68::CollationFastLatinBuilder::addContractionEntry(int, long, long, UErrorCode&)",93957347632544,93957347633119],["icu_68::CollationFastLatinBuilder::getCEsFromContractionCE32(icu_68::CollationData const&, unsigned int, UErrorCode&)",93957347633200,93957347633929],["icu_68::CollationRootElements::lastCEWithPrimaryBefore(unsigned int) const",93957347634336,93957347634607],["icu_68::CollationRootElements::getPrimaryBefore(unsigned int, signed char) const",93957347634816,93957347635079],["icu_68::CollationRootElements::getSecondaryBefore(unsigned int, unsigned int) const",93957347635248,93957347635489],["icu_68::CollationRootElements::getPrimaryAfter(unsigned int, int, signed char) const",93957347635808,93957347635892],["icu_68::CollationRootElements::getTertiaryAfter(int, unsigned int, unsigned int) const",93957347636032,93957347636212],["icu_68::RuleBasedTimeZone::RuleBasedTimeZone(icu_68::UnicodeString const&, icu_68::InitialTimeZoneRule*)",93957347636240,93957347636288],["icu_68::RuleBasedTimeZone::complete(UErrorCode&)",93957347636560,93957347638942],["icu_68::RuleBasedTimeZone::deleteRules()",93957347639072,93957347639275],["icu_68::RuleBasedTimeZone::operator==(icu_68::TimeZone const&) const",93957347639408,93957347639892],["icu_68::RuleBasedTimeZone::clone() const",93957347640176,93957347640323],["icu_68::RuleBasedTimeZone::getOffset(unsigned char, int, int, int, unsigned char, int, int, UErrorCode&) const",93957347640496,93957347640643],["icu_68::RuleBasedTimeZone::getOffset(double, signed char, int&, int&, UErrorCode&) const",93957347641104,93957347641146],["icu_68::RuleBasedTimeZone::getTransitionTime(icu_68::Transition*, signed char, int, int) const",93957347641200,93957347641493],["icu_68::RuleBasedTimeZone::useDaylightTime() const",93957347642288,93957347642453],["icu_68::RuleBasedTimeZone::inDaylightTime(double, UErrorCode&) const",93957347643168,93957347643231],["icu_68::RuleBasedTimeZone::getNextTransition(double, signed char, icu_68::TimeZoneTransition&) const",93957347643712,93957347643907],["icu_68::RuleBasedTimeZone::findPrev(double, signed char, double&, icu_68::TimeZoneRule*&, icu_68::TimeZoneRule*&) const",93957347644128,93957347644746],["icu_68::RuleBasedTimeZone::getTimeZoneRules(icu_68::InitialTimeZoneRule const*&, icu_68::TimeZoneRule const**, int&, UErrorCode&) const",93957347644800,93957347645085],["icu_68::Region::loadRegionData(UErrorCode&)",93957347645104,93957347652229],["icu_68::Region::cleanupRegionData()",93957347652256,93957347652526],["icu_68::Region::~Region()",93957347652608,93957347652688],["icu_68::Region::getPreferredValues(UErrorCode&) const",93957347653072,93957347653230],["icu_68::RegionNameEnumeration::snext(UErrorCode&)",93957347653488,93957347653539],["icu_68::RegionNameEnumeration::~RegionNameEnumeration()",93957347653584,93957347653632],["icu_68::RelativeDateTimeCacheData::~RelativeDateTimeCacheData()",93957347653696,93957347654201],["icu_68::LocaleCacheKey<icu_68::RelativeDateTimeCacheData>::createObject(void const*, UErrorCode&) const",93957347654240,93957347656343],["icu_68::FormattedRelativeDateTime::~FormattedRelativeDateTime()",93957347656416,93957347656480],["icu_68::RelativeDateTimeFormatter::RelativeDateTimeFormatter(icu_68::Locale const&, icu_68::NumberFormat*, UDateRelativeDateTimeFormatterStyle, UDisplayContext, UErrorCode&)",93957347657120,93957347657308],["icu_68::RelativeDateTimeFormatter::~RelativeDateTimeFormatter()",93957347657376,93957347657474],["icu_68::RelativeDateTimeFormatter::formatNumericImpl(double, URelativeDateTimeUnit, icu_68::FormattedRelativeDateTimeData&, UErrorCode&) const",93957347657520,93957347657956],["icu_68::FormattedRelativeDateTime icu_68::RelativeDateTimeFormatter::doFormatToValue<void (icu_68::RelativeDateTimeFormatter::*)(double, URelativeDateTimeUnit, icu_68::FormattedRelativeDateTimeData&, UErrorCode&) const, double, URelativeDateTimeUnit>(void (icu_68::RelativeDateTimeFormatter::*)(double, URelativeDateTimeUnit, icu_68::FormattedRelativeDateTimeData&, UErrorCode&) const, UErrorCode&, double, URelativeDateTimeUnit) const",93957347658016,93957347658317],["icu_68::RelativeDateTimeFormatter::formatToValue(double, URelativeDateTimeUnit, UErrorCode&) const",93957347658960,93957347658999],["icu_68::LocaleCacheKey<icu_68::RelativeDateTimeCacheData>::~LocaleCacheKey()",93957347662720,93957347662762],["icu_68::LocaleCacheKey<icu_68::RelativeDateTimeCacheData>::hashCode() const",93957347662832,93957347662886],["icu_68::QuantityFormatter::formatAndSelect(double, icu_68::NumberFormat const&, icu_68::PluralRules const&, icu_68::FormattedStringBuilder&, icu_68::StandardPlural::Form&, UErrorCode&)",93957347662992,93957347663683],["icu_68::RelativeDateFormat::RelativeDateFormat(icu_68::RelativeDateFormat const&)",93957347663712,93957347664098],["icu_68::RelativeDateFormat::loadDates(UErrorCode&)",93957347664736,93957347665421],["icu_68::RelativeDateFormat::~RelativeDateFormat()",93957347665568,93957347665596],["icu_68::RelativeDateFormat::operator==(icu_68::Format const&) const",93957347665664,93957347665979],["icu_68::RelativeDateFormat::format(icu_68::Formattable const&, icu_68::UnicodeString&, icu_68::FieldPosition&, UErrorCode&) const",93957347667504,93957347667514],["icu_68::RelativeDateFormat::parse(icu_68::UnicodeString const&, UErrorCode&) const",93957347668912,93957347668922],["icu_68::RelativeDateFormat::toPatternDate(icu_68::UnicodeString&, UErrorCode&) const",93957347669056,93957347669123],["icu_68::RelativeDateFormat::applyPatterns(icu_68::UnicodeString const&, icu_68::UnicodeString const&, UErrorCode&)",93957347669216,93957347669273],["icu_68::RelativeDateFormat::setContext(UDisplayContext, UErrorCode&)",93957347669312,93957347669514],["icu_68::(anonymous namespace)::RelDateFmtDataSink::put(char const*, icu_68::ResourceValue&, signed char, UErrorCode&)",93957347669824,93957347670156],["icu_68::CollationKeyByteSink::Resize(int, int)",93957347670240,93957347670335],["icu_68::RuleBasedCollator::RuleBasedCollator(icu_68::CollationCacheEntry const*)",93957347670576,93957347670704],["icu_68::RuleBasedCollator::~RuleBasedCollator()",93957347670800,93957347670894],["icu_68::RuleBasedCollator::getDynamicClassID() const",93957347671056,93957347671069],["icu_68::RuleBasedCollator::hashCode() const",93957347671376,93957347671768],["icu_68::RuleBasedCollator::getLocale(ULocDataLocaleType, UErrorCode&) const",93957347671840,93957347671922],["icu_68::RuleBasedCollator::getVersion(unsigned char*) const",93957347671952,93957347671974],["icu_68::RuleBasedCollator::getAttribute(UColAttribute, UErrorCode&) const",93957347672224,93957347672388],["icu_68::RuleBasedCollator::setMaxVariable(UColReorderCode, UErrorCode&)",93957347672928,93957347673308],["icu_68::RuleBasedCollator::getVariableTop(UErrorCode&) const",93957347673344,93957347673357],["icu_68::RuleBasedCollator::setVariableTop(icu_68::UnicodeString const&, UErrorCode&)",93957347674176,93957347674253],["icu_68::RuleBasedCollator::getReorderCodes(int*, int, UErrorCode&) const",93957347674560,93957347674650],["icu_68::RuleBasedCollator::compare(icu_68::UnicodeString const&, icu_68::UnicodeString const&, UErrorCode&) const",93957347675024,93957347675170],["icu_68::RuleBasedCollator::compare(icu_68::UnicodeString const&, icu_68::UnicodeString const&, int, UErrorCode&) const",93957347677456,93957347677622],["icu_68::RuleBasedCollator::compareUTF8(icu_68::StringPiece const&, icu_68::StringPiece const&, UErrorCode&) const",93957347677808,93957347677883],["icu_68::RuleBasedCollator::internalCompareUTF8(char const*, int, char const*, int, UErrorCode&) const",93957347681072,93957347681235],["icu_68::(anonymous namespace)::FCDUTF16NFDIterator::FCDUTF16NFDIterator(icu_68::Normalizer2Impl const&, char16_t const*, char16_t const*)",93957347681920,93957347682333],["icu_68::(anonymous namespace)::FCDUTF8NFDIterator::~FCDUTF8NFDIterator()",93957347682384,93957347682426],["icu_68::(anonymous namespace)::FCDUIterNFDIterator::~FCDUIterNFDIterator()",93957347684544,93957347684586],["icu_68::RuleBasedCollator::getCollationKey(char16_t const*, int, icu_68::CollationKey&, UErrorCode&) const",93957347684672,93957347684914],["icu_68::RuleBasedCollator::getSortKey(icu_68::UnicodeString const&, unsigned char*, int) const",93957347685728,93957347685808],["icu_68::RuleBasedCollator::writeIdenticalLevel(char16_t const*, char16_t const*, icu_68::SortKeyByteSink&, UErrorCode&) const",93957347686016,93957347686415],["icu_68::RuleBasedCollator::internalGetShortDefinitionString(char const*, char*, int, UErrorCode&) const",93957347687792,93957347690057],["icu_68::RuleBasedCollator::createCollationElementIterator(icu_68::CharacterIterator const&) const",93957347690256,93957347690448],["icu_68::(anonymous namespace)::FCDUTF16NFDIterator::~FCDUTF16NFDIterator()",93957347690576,93957347690626],["icu_68::(anonymous namespace)::FCDUTF8NFDIterator::~FCDUTF8NFDIterator()",93957347690960,93957347691010],["icu_68::(anonymous namespace)::UIterNFDIterator::nextRawCodePoint()",93957347691072,93957347691086],["icu_68::(anonymous namespace)::FCDUIterNFDIterator::nextRawCodePoint()",93957347691152,93957347691186],["icu_68::(anonymous namespace)::PartLevelCallback::needToWrite(icu_68::Collation::Level)",93957347691232,93957347691271],["icu_68::SortKeyByteSink::GetAppendBuffer(int, int, char*, int, int*)",93957347691392,93957347691510],["icu_68::SortKeyByteSink::Append(unsigned int)",93957347702224,93957347702301],["icu_68::CollationSettings::reorder(unsigned int) const",93957347704176,93957347704226],["icu_68::SharedBreakIterator::SharedBreakIterator(icu_68::BreakIterator*)",93957347705376,93957347705403],["icu_68::SharedBreakIterator::~SharedBreakIterator()",93957347705456,93957347705512],["icu_68::SimpleTimeZone::SimpleTimeZone(int, icu_68::UnicodeString const&)",93957347705536,93957347705656],["icu_68::SimpleTimeZone::~SimpleTimeZone()",93957347705872,93957347705999],["icu_68::SimpleTimeZone::~SimpleTimeZone()",93957347706112,93957347706247],["icu_68::SimpleTimeZone::clone() const",93957347706448,93957347706499],["icu_68::SimpleTimeZone::decodeStartRule(UErrorCode&)",93957347706528,93957347706714],["icu_68::SimpleTimeZone::getOffset(unsigned char, int, int, int, unsigned char, int, UErrorCode&) const",93957347706928,93957347707073],["icu_68::SimpleTimeZone::getOffset(unsigned char, int, int, int, unsigned char, int, int, int, UErrorCode&) const",93957347707360,93957347707878],["icu_68::SimpleTimeZone::getOffsetFromLocal(double, int, int, int&, int&, UErrorCode&) const",93957347708560,93957347709220],["icu_68::SimpleTimeZone::setRawOffset(int)",93957347709248,93957347709261],["icu_68::SimpleTimeZone::useDaylightTime() const",93957347709280,93957347709289],["icu_68::SimpleTimeZone::hasSameRules(icu_68::TimeZone const&) const",93957347709424,93957347709620],["icu_68::SimpleTimeZone::getPreviousTransition(double, signed char, icu_68::TimeZoneTransition&) const",93957347710096,93957347710544],["icu_68::SimpleTimeZone::countTransitionRules(UErrorCode&) const",93957347712432,93957347712449],["icu_68::SimpleTimeZone::getOffset(double, signed char, int&, int&, UErrorCode&) const",93957347712656,93957347712666],["icu_68::SimpleDateFormat::~SimpleDateFormat()",93957347712688,93957347712920],["icu_68::SimpleDateFormat::freeFastNumberFormatters()",93957347712992,93957347713172],["icu_68::SimpleDateFormat::construct(icu_68::DateFormat::EStyle, icu_68::DateFormat::EStyle, icu_68::Locale const&, UErrorCode&)",93957347713216,93957347716376],["icu_68::SimpleDateFormat::processOverrideString(icu_68::Locale const&, icu_68::UnicodeString const&, signed char, UErrorCode&)",93957347716944,93957347719034],["icu_68::SimpleDateFormat::SimpleDateFormat(icu_68::DateFormat::EStyle, icu_68::DateFormat::EStyle, icu_68::Locale const&, UErrorCode&)",93957347719536,93957347719956],["icu_68::SimpleDateFormat::operator=(icu_68::SimpleDateFormat const&)",93957347720576,93957347721269],["icu_68::SimpleDateFormat::clone() const",93957347721520,93957347721836],["icu_68::SimpleDateFormat::initNumberFormatters(icu_68::Locale const&, UErrorCode&)",93957347722064,93957347722272],["icu_68::SimpleDateFormat::_format(icu_68::Calendar&, icu_68::UnicodeString&, icu_68::FieldPositionHandler&, UErrorCode&) const",93957347722416,93957347723204],["icu_68::SimpleDateFormat::subFormat(icu_68::UnicodeString&, char16_t, int, UDisplayContext, int, char16_t, icu_68::FieldPositionHandler&, icu_68::Calendar&, UErrorCode&) const",93957347723344,93957347729952],["icu_68::createSharedNumberFormat(icu_68::Locale const&, UErrorCode&)",93957347730224,93957347730419],["icu_68::_appendSymbolWithMonthPattern(icu_68::UnicodeString&, int, icu_68::UnicodeString const*, int, icu_68::UnicodeString const*, UErrorCode&)",93957347731184,93957347731407],["icu_68::SimpleDateFormat::getSmpFmtLocale() const",93957347731520,93957347731533],["icu_68::SimpleDateFormat::adoptNumberFormat(icu_68::NumberFormat*)",93957347731584,93957347731835],["icu_68::SimpleDateFormat::parse(icu_68::UnicodeString const&, icu_68::Calendar&, icu_68::ParsePosition&) const",93957347732048,93957347735870],["icu_68::SimpleDateFormat::matchLiterals(icu_68::UnicodeString const&, int&, icu_68::UnicodeString const&, int&, signed char, signed char, signed char)",93957347744064,93957347746019],["icu_68::matchStringWithOptionalDot(icu_68::UnicodeString const&, int, icu_68::UnicodeString const&)",93957347746272,93957347746548],["icu_68::SimpleDateFormat::matchString(icu_68::UnicodeString const&, int, UCalendarDateFields, icu_68::UnicodeString const*, int, icu_68::UnicodeString const*, icu_68::Calendar&) const",93957347746704,93957347747429],["icu_68::SimpleDateFormat::checkIntSuffix(icu_68::UnicodeString const&, int, int, signed char) const",93957347747568,93957347748016],["icu_68::SimpleDateFormat::parseInt(icu_68::UnicodeString const&, icu_68::Formattable&, int, icu_68::ParsePosition&, signed char, icu_68::NumberFormat const*) const",93957347748112,93957347748636],["icu_68::SimpleDateFormat::toPattern(icu_68::UnicodeString&) const",93957347749056,93957347749090],["icu_68::SimpleDateFormat::applyPattern(icu_68::UnicodeString const&)",93957347749248,93957347750204],["icu_68::SimpleDateFormat::getDateFormatSymbols() const",93957347750352,93957347750365],["icu_68::SimpleDateFormat::setDateFormatSymbols(icu_68::DateFormatSymbols const&)",93957347750432,93957347750527],["icu_68::SimpleDateFormat::adoptTimeZoneFormat(icu_68::TimeZoneFormat*)",93957347750640,93957347750683],["icu_68::SimpleDateFormat::adoptCalendar(icu_68::Calendar*)",93957347750784,93957347751233],["icu_68::SimpleDateFormat::isFieldUnitIgnored(UCalendarDateFields) const",93957347751376,93957347751393],["icu_68::SimpleDateFormat::compareSimpleAffix(icu_68::UnicodeString const&, icu_68::UnicodeString const&, int) const",93957347751792,93957347752537],["icu_68::FormatNameEnumeration::getDynamicClassID() const",93957347752560,93957347752573],["icu_68::MessageFormat::MessageFormat(icu_68::MessageFormat const&)",93957347752832,93957347753149],["icu_68::MessageFormat::~MessageFormat()",93957347753776,93957347754012],["icu_68::MessageFormat::operator==(icu_68::Format const&) const",93957347754048,93957347754362],["icu_68::MessageFormat::setLocale(icu_68::Locale const&)",93957347754432,93957347754627],["icu_68::MessageFormat::applyPattern(icu_68::UnicodeString const&, UErrorCode&)",93957347754656,93957347754720],["icu_68::MessageFormat::cacheExplicitFormats(UErrorCode&)",93957347754864,93957347755892],["icu_68::MessageFormat::toPattern(icu_68::UnicodeString&) const",93957347756000,93957347756103],["icu_68::MessageFormat::adoptFormats(icu_68::Format**, int)",93957347756352,93957347756745],["icu_68::MessageFormat::adoptFormat(int, icu_68::Format*)",93957347757216,93957347757469],["icu_68::MessageFormat::setFormat(int, icu_68::Format const&)",93957347758112,93957347758360],["icu_68::MessageFormat::setFormat(icu_68::UnicodeString const&, icu_68::Format const&, UErrorCode&)",93957347758816,93957347759316],["icu_68::MessageFormat::getFormatNames(UErrorCode&)",93957347759744,93957347760136],["icu_68::MessageFormat::format(int, void const*, icu_68::Formattable const*, icu_68::UnicodeString const*, int, icu_68::AppendableWrapper&, icu_68::FieldPosition*, UErrorCode&) const",93957347760368,93957347764191],["icu_68::AppendableWrapper::formatAndAppend(icu_68::Format const*, icu_68::Formattable const&, UErrorCode&)",93957347764528,93957347764738],["icu_68::MessageFormat::getDefaultDateFormat(UErrorCode&) const",93957347764848,93957347764926],["icu_68::(anonymous namespace)::PluralSelectorContext::PluralSelectorContext(int, icu_68::UnicodeString const&, icu_68::Formattable const&, double, UErrorCode&)",93957347766304,93957347766555],["icu_68::MessageFormat::findOtherSubMessage(int) const",93957347766800,93957347767205],["icu_68::MessageFormat::parse(int, icu_68::UnicodeString const&, icu_68::ParsePosition&, int&, UErrorCode&) const",93957347767504,93957347769697],["icu_68::MessageFormat::parse(icu_68::UnicodeString const&, int&, UErrorCode&) const",93957347769760,93957347769937],["icu_68::MessageFormat::createAppropriateFormat(icu_68::UnicodeString&, icu_68::UnicodeString&, icu_68::Formattable::Type&, UParseError&, UErrorCode&)",93957347770016,93957347771188],["icu_68::MessageFormat::createIntegerFormat(icu_68::Locale const&, UErrorCode&) const",93957347771600,93957347771711],["icu_68::MessageFormat::DummyFormat::format(icu_68::Formattable const&, icu_68::UnicodeString&, UErrorCode&) const",93957347771792,93957347771814],["icu_68::FormatNameEnumeration::~FormatNameEnumeration()",93957347771872,93957347771920],["icu_68::MessageFormat::PluralSelectorProvider::~PluralSelectorProvider()",93957347771984,93957347772032],["icu_68::MessageFormat::PluralSelectorProvider::select(void*, double, UErrorCode&) const",93957347772096,93957347772898],["icu_68::ChoiceFormat::findSubMessage(icu_68::MessagePattern const&, int, double)",93957347773008,93957347773306],["icu_68::ChoiceFormat::matchStringUntilLimitPart(icu_68::MessagePattern const&, int, int, icu_68::UnicodeString const&, int)",93957347773616,93957347773943],["icu_68::number::impl::LocalizedNumberFormatterAsFormat::getDynamicClassID() const",93957347774512,93957347774525],["icu_68::number::impl::LocalizedNumberFormatterAsFormat::~LocalizedNumberFormatterAsFormat()",93957347774592,93957347774657],["icu_68::number::impl::LocalizedNumberFormatterAsFormat::clone() const",93957347774976,93957347775081],["icu_68::number::impl::LocalizedNumberFormatterAsFormat::format(icu_68::Formattable const&, icu_68::UnicodeString&, icu_68::FieldPositionIterator*, UErrorCode&) const",93957347775504,93957347775923],["icu_68::number::LocalizedNumberFormatter::toFormat(UErrorCode&) const",93957347775952,93957347776111],["icu_68::DayPeriodRules::load(UErrorCode&)",93957347776192,93957347776550],["icu_68::DayPeriodRules::getMidPointForDayPeriod(icu_68::DayPeriodRules::DayPeriod, UErrorCode&) const",93957347777072,93957347777199],["icu_68::DayPeriodRules::getEndHourForDayPeriod(icu_68::DayPeriodRules::DayPeriod, UErrorCode&) const",93957347777872,93957347778563],["icu_68::DayPeriodRules::allHoursAreSet()",93957347778944,93957347779111],["icu_68::DayPeriodRulesCountSink::put(char const*, icu_68::ResourceValue&, signed char, UErrorCode&)",93957347780656,93957347781004],["icu_68::DayPeriodRulesDataSink::processRules(icu_68::ResourceTable const&, char const*, icu_68::ResourceValue&, UErrorCode&)",93957347781264,93957347783331],["icu_68::SimpleDateFormatStaticSets::SimpleDateFormatStaticSets(UErrorCode&)",93957347783552,93957347784089],["icu_68::SimpleDateFormatStaticSets::getIgnorables(UDateFormatField)",93957347784208,93957347784454],["icu_68::CollationKey::reallocate(int, int)",93957347784528,93957347784654],["icu_68::CollationKey::setLength(int)",93957347784688,93957347784714],["icu_68::StandardPlural::getKeyword(icu_68::StandardPlural::Form)",93957347784752,93957347784771],["icu_68::StandardPlural::indexOrNegativeFromString(icu_68::UnicodeString const&)",93957347785008,93957347785441],["icu_68::StandardPlural::indexFromString(icu_68::UnicodeString const&, UErrorCode&)",93957347785504,93957347785550],["icu_68::StringSegment::adjustOffset(int)",93957347785600,93957347785609],["icu_68::StringSegment::getCodePoint() const",93957347785760,93957347785871],["icu_68::StringSegment::resetLength()",93957347785888,93957347785917],["icu_68::StringSegment::charAt(int) const",93957347785936,93957347786002],["icu_68::StringSegment::toTempUnicodeString() const",93957347786048,93957347786144],["icu_68::StringSegment::startsWith(icu_68::UnicodeSet const&) const",93957347786320,93957347786461],["icu_68::StringSegment::getCommonPrefixLength(icu_68::UnicodeString const&)",93957347786720,93957347786734],["icu_68::StringSegment::getCaseSensitivePrefixLength(icu_68::UnicodeString const&)",93957347787104,93957347787116],["icu_68::TaiwanCalendar::TaiwanCalendar(icu_68::Locale const&, UErrorCode&)",93957347787136,93957347787184],["icu_68::TaiwanCalendar::getType() const",93957347787248,93957347787261],["icu_68::TaiwanCalendar::handleComputeFields(int, UErrorCode&)",93957347787424,93957347787504],["icu_68::TaiwanCalendar::defaultCenturyStart() const",93957347787536,93957347787594],["icu_68::TaiwanCalendar::defaultCenturyStartYear() const",93957347787904,93957347787960],["icu_68::TimeZone::getUnknown()",93957347788144,93957347788411],["icu_68::TimeZone::~TimeZone()",93957347788448,93957347788490],["icu_68::TimeZone::operator=(icu_68::TimeZone const&)",93957347788528,93957347788565],["icu_68::TimeZone::createTimeZone(icu_68::UnicodeString const&)",93957347788704,93957347788776],["icu_68::TimeZone::detectHostTimeZone()",93957347789072,93957347789488],["icu_68::TimeZone::forLocaleOrDefault(icu_68::Locale const&)",93957347789664,93957347789933],["timeZone_cleanup()",93957347790032,93957347790281],["icu_68::TZEnumeration::~TZEnumeration()",93957347790720,93957347790770],["icu_68::TZEnumeration::getDynamicClassID() const",93957347790848,93957347790861],["icu_68::TZEnumeration::create(USystemTimeZoneType, char const*, int const*, UErrorCode&)",93957347790880,93957347791896],["icu_68::openOlsonResource(icu_68::UnicodeString const&, UResourceBundle&, UErrorCode&)",93957347792112,93957347792356],["icu_68::findInStringArray(UResourceBundle*, icu_68::UnicodeString const&, UErrorCode&)",93957347792528,93957347792962],["icu_68::TimeZone::getRegion(icu_68::UnicodeString const&)",93957347793216,93957347793246],["icu_68::TimeZone::getRegion(icu_68::UnicodeString const&, char*, int, UErrorCode&)",93957347793440,93957347793664],["icu_68::TimeZone::getDisplayName(signed char, icu_68::TimeZone::EDisplayType, icu_68::UnicodeString&) const",93957347794800,93957347794856],["icu_68::TimeZone::parseCustomID(icu_68::UnicodeString const&, int&, int&, int&, int&)",93957347794896,93957347796302],["icu_68::TimeZone::hasSameRules(icu_68::TimeZone const&) const",93957347796864,93957347796943],["icu_68::TimeZone::getCanonicalID(icu_68::UnicodeString const&, icu_68::UnicodeString&, signed char&, UErrorCode&)",93957347796992,93957347797321],["icu_68::TZEnumeration::count(UErrorCode&) const",93957347797584,93957347797605],["icu_68::TZEnumeration::reset(UErrorCode&)",93957347797696,93957347797712],["icu_68::TZEnumeration::getMap(USystemTimeZoneType, int&, UErrorCode&)",93957347798032,93957347798386],["icu_68::TZEnumeration::getID(int, UErrorCode&)",93957347799408,93957347799676],["icu_68::GMTOffsetField::~GMTOffsetField()",93957347799712,93957347799759],["icu_68::TimeZoneFormat::getDynamicClassID() const",93957347800000,93957347800013],["icu_68::TimeZoneFormat::initGMTPattern(icu_68::UnicodeString const&, UErrorCode&)",93957347802096,93957347802362],["icu_68::TimeZoneFormat::truncateOffsetPattern(icu_68::UnicodeString const&, icu_68::UnicodeString&, UErrorCode&)",93957347802912,93957347803311],["icu_68::TimeZoneFormat::TimeZoneFormat(icu_68::TimeZoneFormat const&)",93957347803648,93957347803916],["icu_68::TimeZoneFormat::~TimeZoneFormat()",93957347804560,93957347804889],["icu_68::TimeZoneFormat::operator==(icu_68::Format const&) const",93957347804928,93957347805465],["icu_68::TimeZoneFormat::createInstance(icu_68::Locale const&, UErrorCode&)",93957347805776,93957347805855],["icu_68::TimeZoneFormat::format(UTimeZoneFormatStyle, icu_68::TimeZone const&, double, icu_68::UnicodeString&, UTimeZoneFormatTimeType*) const",93957347807504,93957347808311],["icu_68::TimeZoneFormat::formatSpecific(icu_68::TimeZone const&, UTimeZoneNameType, UTimeZoneNameType, double, icu_68::UnicodeString&, UTimeZoneFormatTimeType*) const",93957347808608,93957347809008],["icu_68::TimeZoneFormat::formatOffsetLocalizedGMT(int, icu_68::UnicodeString&, UErrorCode&) const",93957347809568,93957347809586],["icu_68::TimeZoneFormat::formatOffsetISO8601Basic(int, signed char, signed char, signed char, icu_68::UnicodeString&, UErrorCode&) const",93957347809632,93957347809677],["icu_68::TimeZoneFormat::parse(UTimeZoneFormatStyle, icu_68::UnicodeString const&, icu_68::ParsePosition&, UTimeZoneFormatTimeType*) const",93957347810272,93957347810296],["icu_68::TimeZoneFormat::parseOffsetLocalizedGMT(icu_68::UnicodeString const&, icu_68::ParsePosition&, signed char, signed char*) const",93957347815248,93957347815786],["icu_68::TimeZoneFormat::parseOffsetISO8601(icu_68::UnicodeString const&, icu_68::ParsePosition&, signed char, signed char*) const",93957347815952,93957347816346],["icu_68::TimeZoneFormat::getTimeZoneID(icu_68::TimeZoneNames::MatchInfoCollection const*, int, icu_68::UnicodeString&) const",93957347816400,93957347816638],["icu_68::TimeZoneFormat::getTimeZoneGenericNames(UErrorCode&) const",93957347816768,93957347816858],["icu_68::TimeZoneFormat::parseShortZoneID(icu_68::UnicodeString const&, icu_68::ParsePosition&, icu_68::UnicodeString&) const",93957347817392,93957347817984],["icu_68::TimeZoneFormat::parseObject(icu_68::UnicodeString const&, icu_68::Formattable&, icu_68::ParsePosition&) const",93957347818496,93957347818542],["icu_68::TimeZoneFormat::formatOffsetLocalizedGMT(int, signed char, icu_68::UnicodeString&, UErrorCode&) const",93957347819184,93957347820105],["icu_68::TimeZoneFormat::parseAbuttingAsciiOffsetFields(icu_68::UnicodeString const&, icu_68::ParsePosition&, icu_68::TimeZoneFormat::OffsetFields, icu_68::TimeZoneFormat::OffsetFields, signed char)",93957347820656,93957347821198],["icu_68::TimeZoneFormat::parseOffsetDefaultLocalizedGMT(icu_68::UnicodeString const&, int, int&) const",93957347821600,93957347822052],["icu_68::TimeZoneFormat::parseOffsetFieldsWithPattern(icu_68::UnicodeString const&, int, icu_68::UVector*, signed char, int&, int&, int&) const",93957347822976,93957347824187],["icu_68::TimeZoneFormat::parseSingleLocalizedDigit(icu_68::UnicodeString const&, int, int&) const",93957347825472,93957347825745],["icu_68::TimeZoneFormat::unquote(icu_68::UnicodeString const&, icu_68::UnicodeString&)",93957347826656,93957347826931],["icu_68::tzfmt_cleanup()",93957347827040,93957347827129],["icu_68::GNameSearchHandler::~GNameSearchHandler()",93957347827184,93957347827240],["icu_68::TZGNCore::initialize(icu_68::Locale const&, UErrorCode&)",93957347827696,93957347828919],["icu_68::TZGNCore::cleanup()",93957347829088,93957347829163],["icu_68::hashPartialLocationKey(UElement)",93957347829200,93957347829434],["icu_68::TZGNCore::loadStrings(icu_68::UnicodeString const&)",93957347829504,93957347830102],["icu_68::TZGNCore::getGenericLocationName(icu_68::UnicodeString const&, icu_68::UnicodeString&) const",93957347830416,93957347830566],["icu_68::TZGNCore::getGenericLocationName(icu_68::UnicodeString const&)",93957347832832,93957347833746],["icu_68::TZGNCore::getPartialLocationName(icu_68::UnicodeString const&, icu_68::UnicodeString const&, signed char, icu_68::UnicodeString const&, icu_68::UnicodeString&) const",93957347833888,93957347834069],["icu_68::TZGNCore::findBestMatch(icu_68::UnicodeString const&, int, unsigned int, icu_68::UnicodeString&, UTimeZoneFormatTimeType&, UErrorCode&) const",93957347835136,93957347836336],["icu_68::TimeZoneGenericNames::~TimeZoneGenericNames()",93957347836960,93957347837015],["icu_68::TimeZoneGenericNames::createInstance(icu_68::Locale const&, UErrorCode&)",93957347837088,93957347837980],["icu_68::tzgnCore_cleanup()",93957347838032,93957347838075],["icu_68::TimeZoneGenericNames::clone() const",93957347838112,93957347838218],["icu_68::TimeZoneGenericNames::getGenericLocationName(icu_68::UnicodeString const&, icu_68::UnicodeString&) const",93957347838256,93957347838273],["icu_68::TimeZoneGenericNames::operator!=(icu_68::TimeZoneGenericNames const&) const",93957347838320,93957347838337],["icu_68::timeZoneNames_cleanup()",93957347838992,93957347839035],["icu_68::TimeZoneNamesDelegate::~TimeZoneNamesDelegate()",93957347839120,93957347839198],["icu_68::TimeZoneNamesDelegate::clone() const",93957347839296,93957347839402],["icu_68::TimeZoneNamesDelegate::getAvailableMetaZoneIDs(icu_68::UnicodeString const&, UErrorCode&) const",93957347839440,93957347839461],["icu_68::TimeZoneNamesDelegate::getReferenceZoneID(icu_68::UnicodeString const&, char const*, icu_68::UnicodeString&) const",93957347839504,93957347839525],["icu_68::TimeZoneNamesDelegate::getTimeZoneDisplayName(icu_68::UnicodeString const&, UTimeZoneNameType, icu_68::UnicodeString&) const",93957347839568,93957347839589],["icu_68::TimeZoneNamesDelegate::loadAllDisplayNames(UErrorCode&)",93957347839632,93957347839653],["icu_68::TimeZoneNamesDelegate::find(icu_68::UnicodeString const&, int, unsigned int, UErrorCode&) const",93957347839696,93957347839717],["icu_68::TimeZoneNames::getExemplarLocationName(icu_68::UnicodeString const&, icu_68::UnicodeString&) const",93957347839824,93957347839840],["icu_68::TimeZoneNames::getDisplayNames(icu_68::UnicodeString const&, UTimeZoneNameType const*, int, double, icu_68::UnicodeString*, UErrorCode&) const",93957347840080,93957347840345],["icu_68::TimeZoneNames::MatchInfoCollection::~MatchInfoCollection()",93957347840384,93957347840416],["icu_68::TimeZoneNames::MatchInfoCollection::addZone(UTimeZoneNameType, int, icu_68::UnicodeString const&, UErrorCode&)",93957347840464,93957347840804],["icu_68::TimeZoneNames::MatchInfoCollection::size() const",93957347841152,93957347841174],["icu_68::TimeZoneNames::MatchInfoCollection::getMatchLengthAt(int) const",93957347841216,93957347841243],["icu_68::TimeZoneNames::MatchInfoCollection::getMetaZoneIDAt(int, icu_68::UnicodeString&) const",93957347841344,93957347841426],["icu_68::TextTrieMap::TextTrieMap(signed char, void (*)(void*))",93957347841664,93957347841707],["icu_68::TextTrieMap::~TextTrieMap()",93957347841936,93957347841964],["icu_68::TextTrieMap::put(char16_t const*, void*, UErrorCode&)",93957347842016,93957347842208],["icu_68::TextTrieMap::addChildNode(icu_68::CharacterNode*, char16_t, UErrorCode&)",93957347842640,93957347843030],["icu_68::TextTrieMap::search(icu_68::UnicodeString const&, int, icu_68::TextTrieMapSearchResultHandler*, UErrorCode&) const",93957347843296,93957347843415],["icu_68::ZNStringPool::ZNStringPool(UErrorCode&)",93957347844064,93957347844170],["icu_68::ZNStringPool::get(char16_t const*, UErrorCode&)",93957347844256,93957347844499],["icu_68::MetaZoneIDsEnumeration::snext(UErrorCode&)",93957347844528,93957347844650],["icu_68::MetaZoneIDsEnumeration::~MetaZoneIDsEnumeration()",93957347844672,93957347844723],["icu_68::ZNameSearchHandler::~ZNameSearchHandler()",93957347844800,93957347844832],["icu_68::ZNameSearchHandler::handleMatch(int, icu_68::CharacterNode const*, UErrorCode&)",93957347844880,93957347845375],["icu_68::TimeZoneNamesImpl::initialize(icu_68::Locale const&, UErrorCode&)",93957347845520,93957347846025],["icu_68::TimeZoneNamesImpl::loadTimeZoneNames(icu_68::UnicodeString const&, UErrorCode&)",93957347846096,93957347846511],["icu_68::TimeZoneNamesImpl::~TimeZoneNamesImpl()",93957347847568,93957347847706],["icu_68::TimeZoneNamesImpl::clone() const",93957347847744,93957347847920],["icu_68::TimeZoneNamesImpl::_getAvailableMetaZoneIDs(UErrorCode&)",93957347847936,93957347848087],["icu_68::TimeZoneNamesImpl::_getAvailableMetaZoneIDs(icu_68::UnicodeString const&, UErrorCode&)",93957347848112,93957347848471],["icu_68::TimeZoneNamesImpl::getReferenceZoneID(icu_68::UnicodeString const&, char const*, icu_68::UnicodeString&) const",93957347848512,93957347848622],["icu_68::TimeZoneNamesImpl::getTimeZoneDisplayName(icu_68::UnicodeString const&, UTimeZoneNameType, icu_68::UnicodeString&) const",93957347848816,93957347848995],["icu_68::ZNames::ZNamesLoader::loadTimeZone(UResourceBundle const*, icu_68::UnicodeString const&, UErrorCode&)",93957347849168,93957347849552],["icu_68::TimeZoneNamesImpl::find(icu_68::UnicodeString const&, int, unsigned int, UErrorCode&) const",93957347849968,93957347850252],["icu_68::TimeZoneNamesImpl::addAllNamesIntoTrie(UErrorCode&)",93957347850496,93957347851091],["icu_68::TimeZoneNamesImpl::ZoneStringsLoader::~ZoneStringsLoader()",93957347851680,93957347851722],["icu_68::TimeZoneNamesImpl::loadAllDisplayNames(UErrorCode&)",93957347851792,93957347851868],["icu_68::TimeZoneNamesImpl::ZoneStringsLoader::load(UErrorCode&)",93957347852512,93957347853559],["icu_68::TZDBNames::~TZDBNames()",93957347854176,93957347854292],["icu_68::TZDBNames::createInstance(UResourceBundle*, char const*)",93957347854432,93957347855085],["icu_68::TZDBNameSearchHandler::~TZDBNameSearchHandler()",93957347855120,93957347855168],["icu_68::TZDBTimeZoneNames::TZDBTimeZoneNames(icu_68::Locale const&)",93957347855840,93957347856139],["icu_68::TZDBTimeZoneNames::~TZDBTimeZoneNames()",93957347856192,93957347856242],["icu_68::TZDBTimeZoneNames::getMetaZoneDisplayName(icu_68::UnicodeString const&, UTimeZoneNameType, icu_68::UnicodeString&) const",93957347856320,93957347856468],["icu_68::TZDBTimeZoneNames::getTimeZoneDisplayName(icu_68::UnicodeString const&, UTimeZoneNameType, icu_68::UnicodeString&) const",93957347857296,93957347857323],["icu_68::ZNames::ZNamesLoader::put(char const*, icu_68::ResourceValue&, signed char, UErrorCode&)",93957347858240,93957347859124],["icu_68::ZNames::getTZNameTypeIndex(UTimeZoneNameType)",93957347859440,93957347859504],["icu_68::UMemory::operator delete[](void*)",93957347859536,93957347859553],["icu_68::deleteTZDBNames(void*)",93957347859664,93957347859694],["icu_68::TimeZoneRule::~TimeZoneRule()",93957347860496,93957347860538],["icu_68::TimeZoneRule::operator!=(icu_68::TimeZoneRule const&) const",93957347860720,93957347860737],["icu_68::InitialTimeZoneRule::getDynamicClassID() const",93957347860832,93957347860845],["icu_68::InitialTimeZoneRule::~InitialTimeZoneRule()",93957347860928,93957347860978],["icu_68::InitialTimeZoneRule::operator==(icu_68::TimeZoneRule const&) const",93957347861088,93957347861151],["icu_68::AnnualTimeZoneRule::getDynamicClassID() const",93957347861232,93957347861245],["icu_68::AnnualTimeZoneRule::~AnnualTimeZoneRule()",93957347861344,93957347861411],["icu_68::AnnualTimeZoneRule::clone() const",93957347861504,93957347861656],["icu_68::AnnualTimeZoneRule::getEndYear() const",93957347861776,93957347861785],["icu_68::AnnualTimeZoneRule::isEquivalentTo(icu_68::TimeZoneRule const&) const",93957347862480,93957347862599],["icu_68::AnnualTimeZoneRule::getFinalStart(int, int, double&) const",93957347862640,93957347862672],["icu_68::AnnualTimeZoneRule::getPreviousStart(double, int, int, signed char, double&) const",93957347862928,93957347863174],["icu_68::TimeArrayTimeZoneRule::TimeArrayTimeZoneRule(icu_68::UnicodeString const&, int, int, double const*, int, icu_68::DateTimeRule::TimeRuleType)",93957347863200,93957347863320],["icu_68::TimeArrayTimeZoneRule::~TimeArrayTimeZoneRule()",93957347863568,93957347863643],["icu_68::TimeArrayTimeZoneRule::clone() const",93957347863744,93957347863884],["icu_68::TimeArrayTimeZoneRule::isEquivalentTo(icu_68::TimeZoneRule const&) const",93957347864048,93957347864168],["icu_68::TimeArrayTimeZoneRule::getFinalStart(int, int, double&) const",93957347864256,93957347864328],["icu_68::TimeArrayTimeZoneRule::getPreviousStart(double, int, int, signed char, double&) const",93957347864480,93957347864578],["icu_68::TimeZoneTransition::getDynamicClassID() const",93957347864640,93957347864653],["icu_68::TimeZoneTransition::TimeZoneTransition()",93957347864720,93957347864751],["icu_68::TimeZoneTransition::~TimeZoneTransition()",93957347864816,93957347864887],["icu_68::TimeZoneTransition::setFrom(icu_68::TimeZoneRule const&)",93957347865008,93957347865054],["icu_68::TimeZoneTransition::setTime(double)",93957347865104,93957347865115],["icu_68::TimeZoneTransition::adoptTo(icu_68::TimeZoneRule*)",93957347865168,93957347865205],["ucal_getNow_68",93957347865232,93957347865242],["ucln_i18n_registerCleanup_68",93957347865936,93957347866001],["icu_68::CollationLoader::loadRules(char const*, char const*, icu_68::UnicodeString&, UErrorCode&)",93957347866096,93957347866459],["icu_68::CollationLoader::loadTailoring(icu_68::Locale const&, UErrorCode&)",93957347866560,93957347867046],["icu_68::CollationLoader::CollationLoader(icu_68::CollationCacheEntry const*, icu_68::Locale const&, UErrorCode&)",93957347867360,93957347867797],["icu_68::CollationLoader::loadFromBundle(UErrorCode&)",93957347868496,93957347869284],["icu_68::CollationLoader::loadFromData(UErrorCode&)",93957347870400,93957347871535],["icu_68::CollationLoader::makeCacheEntry(icu_68::Locale const&, icu_68::CollationCacheEntry const*, UErrorCode&)",93957347871600,93957347871775],["ucol_getKeywordValuesForLocale_68",93957347871824,93957347872132],["ucol_getFunctionalEquivalent_68",93957347872192,93957347872242],["(anonymous namespace)::KeywordsSink::put(char const*, icu_68::ResourceValue&, signed char, UErrorCode&)",93957347872320,93957347873059],["icu_68::LocaleCacheKey<icu_68::CollationCacheEntry>::hashCode() const",93957347873136,93957347873200],["icu_68::UIterCollationIterator::resetToOffset(int)",93957347873296,93957347873336],["icu_68::UIterCollationIterator::handleNextCE32(int&, UErrorCode&)",93957347873376,93957347873448],["icu_68::UIterCollationIterator::nextCodePoint(UErrorCode&)",93957347873520,93957347873537],["icu_68::UIterCollationIterator::forwardNumCodePoints(int, UErrorCode&)",93957347873584,93957347873631],["icu_68::FCDUIterCollationIterator::~FCDUIterCollationIterator()",93957347873680,93957347873725],["icu_68::FCDUIterCollationIterator::resetToOffset(int)",93957347873792,93957347873847],["icu_68::FCDUIterCollationIterator::handleNextCE32(int&, UErrorCode&)",93957347873936,93957347874549],["icu_68::FCDUIterCollationIterator::handleGetTrailSurrogate()",93957347875296,93957347875476],["icu_68::FCDUIterCollationIterator::previousCodePoint(UErrorCode&)",93957347876112,93957347876740],["icu_68::FCDUIterCollationIterator::forwardNumCodePoints(int, UErrorCode&)",93957347877584,93957347877652],["icu_68::units::ComplexUnitsConverter::ComplexUnitsConverter(icu_68::MeasureUnitImpl const&, icu_68::MeasureUnitImpl const&, icu_68::units::ConversionRates const&, UErrorCode&)",93957347877744,93957347878427],["icu_68::units::ComplexUnitsConverter::convert(double, icu_68::number::impl::RoundingImpl*, UErrorCode&) const",93957347878480,93957347880862],["icu_68::MeasureUnit* icu_68::MemoryPool<icu_68::MeasureUnit, 8>::create<icu_68::MeasureUnit&>(icu_68::MeasureUnit&)",93957347881312,93957347881530],["icu_68::Measure* icu_68::MemoryPool<icu_68::Measure, 8>::create<icu_68::Formattable&, icu_68::MeasureUnit*&, UErrorCode&>(icu_68::Formattable&, icu_68::MeasureUnit*&, UErrorCode&)",93957347881792,93957347882039],["icu_68::units::addSingleFactorConstant(icu_68::StringPiece, int, icu_68::units::Signum, icu_68::units::Factor&, UErrorCode&)",93957347882416,93957347883082],["icu_68::units::extractCompoundBaseUnit(icu_68::MeasureUnitImpl const&, icu_68::units::ConversionRates const&, UErrorCode&)",93957347883264,93957347884530],["icu_68::units::(anonymous namespace)::mergeUnitsAndDimensions(icu_68::MaybeStackVector<icu_68::units::(anonymous namespace)::UnitIndexAndDimension, 8>&, icu_68::MeasureUnitImpl const&, int)",93957347885632,93957347885981],["icu_68::units::ConversionRate::ConversionRate(icu_68::MeasureUnitImpl&&, icu_68::MeasureUnitImpl&&)",93957347886992,93957347887301],["icu_68::units::UnitConverter::convertInverse(double) const",93957347887408,93957347887491],["icu_68::units::(anonymous namespace)::addFactorElement(icu_68::units::Factor&, icu_68::StringPiece, icu_68::units::Signum, UErrorCode&)",93957347889248,93957347889571],["icu_68::units::getAllConversionRates(icu_68::MaybeStackVector<icu_68::units::ConversionRateInfo, 8>&, UErrorCode&)",93957347889872,93957347889983],["icu_68::units::UnitPreferences::UnitPreferences(UErrorCode&)",93957347890144,93957347890318],["icu_68::units::(anonymous namespace)::ConversionRateDataSink::put(char const*, icu_68::ResourceValue&, signed char, UErrorCode&)",93957347891920,93957347893445],["icu_68::units::(anonymous namespace)::UnitPreferencesSink::put(char const*, icu_68::ResourceValue&, signed char, UErrorCode&)",93957347893808,93957347895741],["icu_68::units::UnitPreference* icu_68::MemoryPool<icu_68::units::UnitPreference, 8>::create<>()",93957347896320,93957347896583],["icu_68::units::UnitsRouter::UnitsRouter(icu_68::MeasureUnit, icu_68::StringPiece, icu_68::StringPiece, UErrorCode&)",93957347896992,93957347899071],["icu_68::MemoryPool<icu_68::units::UnitPreferenceMetadata, 8>::~MemoryPool()",93957347899984,93957347900145],["icu_68::UTF16CollationIterator::operator==(icu_68::CollationIterator const&) const",93957347900576,93957347900641],["icu_68::UTF16CollationIterator::getOffset() const",93957347900704,93957347900727],["icu_68::UTF16CollationIterator::handleGetTrailSurrogate()",93957347900832,93957347900888],["icu_68::UTF16CollationIterator::nextCodePoint(UErrorCode&)",93957347900944,93957347901071],["icu_68::UTF16CollationIterator::forwardNumCodePoints(int, UErrorCode&)",93957347901184,93957347901318],["icu_68::FCDUTF16CollationIterator::~FCDUTF16CollationIterator()",93957347901456,93957347901501],["icu_68::FCDUTF16CollationIterator::operator==(icu_68::CollationIterator const&) const",93957347901568,93957347901750],["icu_68::FCDUTF16CollationIterator::getOffset() const",93957347901840,93957347901919],["icu_68::FCDUTF16CollationIterator::nextSegment(UErrorCode&)",93957347902368,93957347903068],["icu_68::FCDUTF16CollationIterator::nextCodePoint(UErrorCode&)",93957347903136,93957347903649],["icu_68::FCDUTF16CollationIterator::previousSegment(UErrorCode&)",93957347904128,93957347904796],["icu_68::FCDUTF16CollationIterator::backwardNumCodePoints(int, UErrorCode&)",93957347904880,93957347904948],["icu_68::UTF8CollationIterator::getOffset() const",93957347904992,93957347905004],["icu_68::UTF8CollationIterator::foundNULTerminator()",93957347905552,93957347905594],["icu_68::UTF8CollationIterator::previousCodePoint(UErrorCode&)",93957347905952,93957347906029],["icu_68::UTF8CollationIterator::backwardNumCodePoints(int, UErrorCode&)",93957347906432,93957347906522],["icu_68::FCDUTF8CollationIterator::~FCDUTF8CollationIterator()",93957347906576,93957347906629],["icu_68::FCDUTF8CollationIterator::getOffset() const",93957347906688,93957347906736],["icu_68::FCDUTF8CollationIterator::nextHasLccc() const",93957347907920,93957347908279],["icu_68::FCDUTF8CollationIterator::handleGetTrailSurrogate()",93957347909648,93957347909757],["icu_68::FCDUTF8CollationIterator::nextCodePoint(UErrorCode&)",93957347909824,93957347910993],["icu_68::FCDUTF8CollationIterator::previousSegment(UErrorCode&)",93957347911760,93957347912586],["icu_68::FCDUTF8CollationIterator::backwardNumCodePoints(int, UErrorCode&)",93957347912672,93957347912740],["icu_68::initCanonicalIDCache(UErrorCode&)",93957347913888,93957347913980],["icu_68::ZoneMeta::getCanonicalCLDRID(icu_68::UnicodeString const&, icu_68::UnicodeString&, UErrorCode&)",93957347914000,93957347914091],["icu_68::ZoneMeta::getCanonicalCountry(icu_68::UnicodeString const&, icu_68::UnicodeString&, signed char*)",93957347914304,93957347915427],["icu_68::ZoneMeta::getMetazoneMappings(icu_68::UnicodeString const&)",93957347915616,93957347916180],["icu_68::parseDate(char16_t const*, UErrorCode&)",93957347917248,93957347917911],["icu_68::ZoneMeta::getAvailableMetazoneIDs()",93957347918528,93957347918585],["icu_68::ZoneMeta::findMetaZoneID(icu_68::UnicodeString const&)",93957347919472,93957347919560],["icu_68::ZoneMeta::formatCustomID(unsigned char, unsigned char, unsigned char, signed char, icu_68::UnicodeString&)",93957347919824,93957347920362],["icu_68::ZoneMeta::getShortIDFromCanonical(char16_t const*)",93957347920448,93957347920760],["zoneMeta_cleanup()",93957347920832,93957347921050],["icu_68::BreakIterator::createWordInstance(icu_68::Locale const&, UErrorCode&)",93957347922208,93957347922226],["icu_68::BreakIterator::createLineInstance(icu_68::Locale const&, UErrorCode&)",93957347922720,93957347922738],["icu_68::BreakIterator::createSentenceInstance(icu_68::Locale const&, UErrorCode&)",93957347922768,93957347922786],["icu_68::BreakIterator::BreakIterator(icu_68::BreakIterator const&)",93957347922832,93957347922907],["icu_68::BreakIterator::makeInstance(icu_68::Locale const&, int, UErrorCode&)",93957347922992,93957347923807],["icu_68::BreakIterator::BreakIterator(icu_68::Locale const&, icu_68::Locale const&)",93957347923856,93957347923908],["icu_68::ICUBreakIteratorService::handleDefault(icu_68::ICUServiceKey const&, icu_68::UnicodeString*, UErrorCode&) const",93957347923952,93957347924182],["breakiterator_cleanup()",93957347924432,93957347924477],["icu_68::ByteSinkUtil::appendChange(unsigned char const*, unsigned char const*, char16_t const*, int, icu_68::ByteSink&, icu_68::Edits*, UErrorCode&)",93957347925248,93957347925306],["icu_68::ByteSinkUtil::appendUnchanged(unsigned char const*, unsigned char const*, icu_68::ByteSink&, unsigned int, icu_68::Edits*, UErrorCode&)",93957347925520,93957347925645],["icu_68::CharStringByteSink::Append(char const*, int)",93957347925680,93957347925714],["icu_68::ByteSink::GetAppendBuffer(int, int, char*, int, int*)",93957347925824,93957347925858],["icu_68::CheckedArrayByteSink::Reset()",93957347925920,93957347925941],["icu_68::CheckedArrayByteSink::GetAppendBuffer(int, int, char*, int, int*)",93957347926080,93957347926135],["icu_68::BytesTrieBuilder::~BytesTrieBuilder()",93957347926272,93957347926359],["icu_68::BytesTrieBuilder::add(icu_68::StringPiece, int, UErrorCode&)",93957347926464,93957347926826],["icu_68::BytesTrieBuilder::buildStringPiece(UStringTrieBuildOption, UErrorCode&)",93957347927344,93957347927393],["icu_68::BytesTrieBuilder::getElementStringLength(int) const",93957347927568,93957347927628],["icu_68::BytesTrieBuilder::getElementValue(int) const",93957347927680,93957347927697],["icu_68::BytesTrieBuilder::countElementUnits(int, int, int) const",93957347927904,93957347928010],["icu_68::BytesTrieBuilder::indexOfElementWithNextUnit(int, int, char16_t) const",93957347928128,93957347928193],["icu_68::BytesTrieBuilder::BTLinearMatchNode::write(icu_68::StringTrieBuilder&)",93957347928272,93957347928348],["icu_68::BytesTrieBuilder::createLinearMatchNode(int, int, int, icu_68::StringTrieBuilder::Node*) const",93957347928576,93957347928789],["icu_68::BytesTrieBuilder::writeElementUnits(int, int, int)",93957347929008,93957347929056],["icu_68::BytesTrieBuilder::writeValueAndType(signed char, int, int)",93957347929280,93957347929353],["icu_68::BytesTrie::readValue(unsigned char const*, int)",93957347929552,93957347929674],["icu_68::BytesTrie::nextImpl(unsigned char const*, int)",93957347930352,93957347930532],["icu_68::CanonicalIterator::getDynamicClassID() const",93957347930816,93957347930829],["icu_68::CanonicalIterator::setSource(icu_68::UnicodeString const&, UErrorCode&)",93957347931024,93957347932347],["icu_68::CanonicalIterator::cleanPieces()",93957347932416,93957347932633],["icu_68::CanonicalIterator::reset()",93957347932704,93957347932746],["icu_68::CanonicalIterator::getEquivalents(icu_68::UnicodeString const&, int&, UErrorCode&)",93957347933008,93957347935031],["icu_68::CanonicalIterator::getEquivalents2(icu_68::Hashtable*, char16_t const*, int, UErrorCode&)",93957347936000,93957347937524],["icu_68::CharString::CharString(icu_68::CharString&&)",93957347938720,93957347938814],["icu_68::CharString::cloneData(UErrorCode&) const",93957347938928,93957347939016],["icu_68::CharString::ensureCapacity(int, int, UErrorCode&)",93957347939152,93957347939439],["icu_68::CharString::truncate(int)",93957347939488,93957347939521],["icu_68::CharString::append(char const*, int, UErrorCode&)",93957347939616,93957347939957],["icu_68::CharString::CharString(char const*, int, UErrorCode&)",93957347940000,93957347940037],["icu_68::CharString::appendInvariantChars(icu_68::UnicodeString const&, UErrorCode&)",93957347940160,93957347940343],["icu_68::CharString::ensureEndsWithFileSeparator(UErrorCode&)",93957347940496,93957347940589],["uprv_realloc_68",93957347940656,93957347940796],["uprv_isASCIILetter_68",93957347940864,93957347940885],["uprv_asciitolower_68",93957347940928,93957347940948],["T_CString_toUpperCase_68",93957347941024,93957347941074],["uprv_stricmp_68",93957347941280,93957347941409],["uprv_strdup_68",93957347941568,93957347941637],["icu_68::Edits::~Edits()",93957347941664,93957347941691],["icu_68::Edits::addReplace(int, int)",93957347942288,93957347943229],["icu_68::Edits::copyErrorTo(UErrorCode&) const",93957347943408,93957347943436],["icu_68::Edits::Iterator::next(signed char, UErrorCode&)",93957347943488,93957347944462],["icu_68::UStringSet::~UStringSet()",93957347944480,93957347944508],["icu_68::SimpleFilteredSentenceBreakData::~SimpleFilteredSentenceBreakData()",93957347944592,93957347944674],["icu_68::SimpleFilteredSentenceBreakIterator::~SimpleFilteredSentenceBreakIterator()",93957347944960,93957347945071],["icu_68::SimpleFilteredSentenceBreakIterator::breakExceptionAt(int)",93957347945200,93957347945898],["icu_68::SimpleFilteredSentenceBreakIterator::next()",93957347946128,93957347946166],["icu_68::SimpleFilteredSentenceBreakIterator::preceding(int)",93957347946208,93957347946423],["icu_68::SimpleFilteredSentenceBreakIterator::isBoundary(int)",93957347946640,93957347946795],["icu_68::SimpleFilteredSentenceBreakIterator::following(int)",93957347946848,93957347946886],["icu_68::SimpleFilteredBreakIteratorBuilder::~SimpleFilteredBreakIteratorBuilder()",93957347946928,93957347946970],["icu_68::SimpleFilteredBreakIteratorBuilder::SimpleFilteredBreakIteratorBuilder(icu_68::Locale const&, UErrorCode&)",93957347947040,93957347947679],["icu_68::SimpleFilteredBreakIteratorBuilder::unsuppressBreakAfter(icu_68::UnicodeString const&, UErrorCode&)",93957347947824,93957347947847],["icu_68::FilteredBreakIteratorBuilder::createInstance(icu_68::Locale const&, UErrorCode&)",93957347949792,93957347949904],["icu_68::SimpleFilteredSentenceBreakIterator::getText() const",93957347950016,93957347950034],["icu_68::SimpleFilteredSentenceBreakIterator::setText(icu_68::UnicodeString const&)",93957347950080,93957347950101],["icu_68::SimpleFilteredSentenceBreakIterator::adoptText(icu_68::CharacterIterator*)",93957347950144,93957347950165],["icu_68::SimpleFilteredSentenceBreakIterator::createBufferClone(void*, int&, UErrorCode&)",93957347950208,93957347950225],["icu_68::LoadedNormalizer2Impl::~LoadedNormalizer2Impl()",93957347950288,93957347950339],["icu_68::LoadedNormalizer2Impl::isAcceptable(void*, char const*, char const*, UDataInfo const*)",93957347950416,93957347950474],["icu_68::Norm2AllModes::createInstance(char const*, char const*, UErrorCode&)",93957347950656,93957347950785],["icu_68::initSingletons(char const*, UErrorCode&)",93957347950912,93957347951227],["icu_68::Normalizer2::getNFKCInstance(UErrorCode&)",93957347951344,93957347951463],["icu_68::uprv_loaded_normalizer2_cleanup()",93957347952128,93957347952261],["icu_68::LocalPointer<icu_68::Norm2AllModes>::~LocalPointer()",93957347952320,93957347952363],["icu_68::Normalizer2Factory::getNFKCImpl(UErrorCode&)",93957347952672,93957347952788],["unorm_getQuickCheck_68",93957347952928,93957347953002],["icu_68::LocaleBuilder::~LocaleBuilder()",93957347953056,93957347953134],["icu_68::LocaleBuilder::setLocale(icu_68::Locale const&)",93957347953232,93957347953730],["icu_68::LocaleBuilder::setScript(icu_68::StringPiece)",93957347953856,93957347953958],["icu_68::LocaleBuilder::setVariant(icu_68::StringPiece)",93957347954080,93957347954446],["icu_68::LocaleBuilder::setUnicodeLocaleKeyword(icu_68::StringPiece, icu_68::StringPiece)",93957347954656,93957347954855],["icu_68::_copyExtensions(icu_68::Locale const&, icu_68::StringEnumeration*, icu_68::Locale&, bool, UErrorCode&)",93957347954912,93957347955776],["icu_68::LocaleMatcher::Builder::~Builder()",93957347956720,93957347956802],["icu_68::LocaleMatcher::Builder::setDefaultLocale(icu_68::Locale const*)",93957347956992,93957347957070],["icu_68::LocaleMatcher::putIfAbsent(icu_68::LSR const&, int, int, UErrorCode&)",93957347957120,93957347957233],["icu_68::(anonymous namespace)::getMaximalLsrOrUnd(icu_68::XLikelySubtags const&, icu_68::Locale const&, UErrorCode&)",93957347959888,93957347959989],["icu_68::MaybeStackArray<signed char, 100>::MaybeStackArray(int, UErrorCode)",93957347960016,93957347960110],["icu_68::LocaleMatcher::getBestMatch(icu_68::Locale const&, UErrorCode&) const",93957347960352,93957347960584],["icu_68::LocaleMatcher::getBestMatch(icu_68::Locale::Iterator&, UErrorCode&) const",93957347961376,93957347961775],["uloc_openAvailableByType_68",93957347961968,93957347962139],["(anonymous namespace)::AvailableLocalesSink::put(char const*, icu_68::ResourceValue&, signed char, UErrorCode&)",93957347962240,93957347962823],["(anonymous namespace)::AvailableLocalesStringEnumeration::count(UErrorCode&) const",93957347962864,93957347962903],["icu_68::LocaleBased::getLocale(ULocDataLocaleType, UErrorCode&) const",93957347963040,93957347963123],["icu_68::LocaleBased::setLocaleIDs(char const*, char const*)",93957347963184,93957347963263],["uloc_getDisplayCountry_68",93957347963312,93957347963598],["icu_68::Locale::getDisplayName(icu_68::Locale const&, icu_68::UnicodeString&) const",93957347963888,93957347964163],["uloc_getDisplayKeywordValue_68",93957347968272,93957347968895],["icu_68::LocaleDistance::initLocaleDistance(UErrorCode&)",93957347969264,93957347969439],["icu_68::LocaleDistance::getSingleton(UErrorCode&)",93957347969504,93957347969605],["icu_68::LocaleDistance::getBestIndexAndDistance(icu_68::LSR const&, icu_68::LSR const**, int, int, ULocMatchFavorSubtag, ULocMatchDirection) const",93957347970016,93957347971430],["icu_68::LocaleDistance::getRegionPartitionsDistance(icu_68::BytesTrie&, unsigned long, char const*, char const*, int)",93957347971792,93957347972421],["icu_68::ICUDataTable::get(char const*, char const*, char const*, icu_68::UnicodeString&) const",93957347972528,93957347972763],["icu_68::LocaleDisplayNamesImpl::initialize()",93957347973168,93957347975139],["icu_68::LocaleDisplayNamesImpl::~LocaleDisplayNamesImpl()",93957347975872,93957347976096],["icu_68::LocaleDisplayNamesImpl::getDialectHandling() const",93957347976128,93957347976140],["icu_68::LocaleDisplayNamesImpl::adjustForUsageAndContext(icu_68::LocaleDisplayNamesImpl::CapContextUsage, icu_68::UnicodeString&) const",93957347976208,93957347976374],["ncat(char*, unsigned int, ...)",93957347980096,93957347980375],["icu_68::LocaleDisplayNamesImpl::scriptDisplayName(char const*, icu_68::UnicodeString&, signed char) const",93957347980768,93957347981175],["icu_68::LocaleDisplayNamesImpl::appendWithSep(icu_68::UnicodeString&, icu_68::UnicodeString const&) const",93957347981600,93957347981697],["icu_68::LocaleDisplayNamesImpl::keyDisplayName(char const*, icu_68::UnicodeString&, signed char) const",93957347981968,93957347982210],["icu_68::LocaleDisplayNamesImpl::localeDisplayName(char const*, icu_68::UnicodeString&) const",93957347982928,93957347983048],["icu_68::LocaleDisplayNamesImpl::scriptDisplayName(char const*, icu_68::UnicodeString&) const",93957347983568,93957347983580],["icu_68::LocaleDisplayNamesImpl::regionDisplayName(char const*, icu_68::UnicodeString&) const",93957347983632,93957347983644],["icu_68::LocaleDisplayNamesImpl::keyDisplayName(char const*, icu_68::UnicodeString&) const",93957347983664,93957347983676],["icu_68::LocaleDisplayNames::createInstance(icu_68::Locale const&, UDialectHandling)",93957347983696,93957347983762],["icu_68::LocaleDisplayNamesImpl::CapitalizationContextSink::put(char const*, icu_68::ResourceValue&, signed char, UErrorCode&)",93957347983856,93957347984378],["locale_cleanup()",93957347984944,93957347985185],["locale_get_default_68",93957347986704,93957347986784],["icu_68::Locale::getDynamicClassID() const",93957347986864,93957347986877],["icu_68::Locale::~Locale()",93957347986976,93957347987072],["icu_68::Locale::setToBogus()",93957347987120,93957347987216],["icu_68::Locale::Locale(icu_68::Locale const&)",93957347988192,93957347988231],["icu_68::Locale::Locale(icu_68::Locale&&)",93957347988544,93957347988579],["icu_68::Locale::clone() const",93957347988784,93957347988867],["icu_68::(anonymous namespace)::canonicalizeLocale(icu_68::Locale const&, icu_68::CharString&, UErrorCode&)",93957347988912,93957347999431],["icu_68::Locale::hashCode() const",93957347999632,93957347999666],["icu_68::Locale::addLikelySubtags(UErrorCode&)",93957347999712,93957347999928],["icu_68::Locale::canonicalize(UErrorCode&)",93957348000160,93957348000384],["icu_68::Locale::toLanguageTag(icu_68::ByteSink&, UErrorCode&) const",93957348000832,93957348000875],["icu_68::Locale::createCanonical(char const*)",93957348001136,93957348001272],["icu_68::Locale::getLocaleCache()",93957348001312,93957348004795],["icu_68::KeywordEnumeration::~KeywordEnumeration()",93957348004864,93957348004926],["icu_68::KeywordEnumeration::KeywordEnumeration(char const*, int, int, UErrorCode&)",93957348005264,93957348005491],["icu_68::Locale::getKeywordValue(icu_68::StringPiece, icu_68::ByteSink&, UErrorCode&) const",93957348005520,93957348005715],["icu_68::Locale::setKeywordValue(char const*, char const*, UErrorCode&)",93957348006352,93957348006609],["icu_68::KeywordEnumeration::getDynamicClassID() const",93957348006992,93957348007005],["icu_68::KeywordEnumeration::count(UErrorCode&) const",93957348007264,93957348007333],["icu_68::KeywordEnumeration::snext(UErrorCode&)",93957348007440,93957348007503],["icu_68::(anonymous namespace)::AliasReplacer::replaceLanguage(bool, bool, bool, icu_68::UVector&, UErrorCode&)",93957348007536,93957348009633],["icu_68::UniqueCharStrings::add(icu_68::UnicodeString const&, UErrorCode&)",93957348009776,93957348009935],["icu_68::(anonymous namespace)::AliasReplacer::replace(icu_68::Locale const&, icu_68::CharString&, UErrorCode&)::$_1::__invoke(void*)",93957348009952,93957348009995],["ulocimp_addLikelySubtags_68",93957348010048,93957348010058],["ulocimp_minimizeSubtags_68",93957348010624,93957348013771],["parseTagString(char const*, char*, int*, char*, int*, char*, int*, UErrorCode*)",93957348014256,93957348014856],["findLikelySubtags(char const*, char*, int, UErrorCode*)",93957348017056,93957348017581],["icu_68::XLikelySubtags::initLikelySubtags(UErrorCode&)",93957348018448,93957348018812],["icu_68::(anonymous namespace)::cleanup()",93957348022096,93957348022158],["icu_68::XLikelySubtags::getSingleton(UErrorCode&)",93957348022464,93957348022565],["icu_68::XLikelySubtags::~XLikelySubtags()",93957348023040,93957348023334],["icu_68::XLikelySubtags::makeMaximizedLsr(char const*, char const*, char const*, char const*, UErrorCode&) const",93957348023472,93957348023978],["icu_68::XLikelySubtags::trieNext(icu_68::BytesTrie&, char const*, int)",93957348024960,93957348025121],["icu_68::XLikelySubtags::getLikelyIndex(char const*, char const*) const",93957348025440,93957348025940],["uloc_getTableStringWithFallback_68",93957348026464,93957348027569],["icu_68::LocaleUtility::initLocaleFromName(icu_68::UnicodeString const&, icu_68::Locale&)",93957348028016,93957348028447],["icu_68::LocaleUtility::getAvailableLocaleNames(icu_68::UnicodeString const&)",93957348028592,93957348029553],["icu_68::LSR::LSR(char, char const*, char const*, char const*, int, UErrorCode&)",93957348029632,93957348030117],["icu_68::LSR::deleteOwned()",93957348030256,93957348030270],["icu_68::LSR::isEquivalentTo(icu_68::LSR const&) const",93957348030400,93957348030487],["icu_68::LSR::setHashCode()",93957348030592,93957348030699],["icu_68::MessagePattern::parse(icu_68::UnicodeString const&, UParseError*, UErrorCode&)",93957348030896,93957348031046],["icu_68::MessagePattern::copyStorage(icu_68::MessagePattern const&, UErrorCode&)",93957348031232,93957348031828],["icu_68::MessagePattern::~MessagePattern()",93957348031904,93957348032007],["icu_68::MessagePattern::parseMessage(int, int, int, UMessagePatternArgType, UParseError*, UErrorCode&)",93957348032048,93957348033185],["icu_68::MessagePattern::parsePluralStyle(icu_68::UnicodeString const&, UParseError*, UErrorCode&)",93957348034368,93957348034517],["icu_68::MessagePattern::operator==(icu_68::MessagePattern const&) const",93957348036416,93957348036694],["icu_68::MessagePattern::getNumericValue(icu_68::MessagePattern::Part const&) const",93957348036992,93957348037044],["icu_68::MessagePattern::addPart(UMessagePatternPartType, int, int, int, UErrorCode&)",93957348037152,93957348037409],["icu_68::MessagePattern::setParseError(UParseError*, int)",93957348039344,93957348039655],["icu_68::MessagePattern::isChoice(int)",93957348039760,93957348040136],["icu_68::MessagePattern::isSelect(int)",93957348040528,93957348040904],["icu_68::MessagePattern::parseSimpleStyle(int, UParseError*, UErrorCode&)",93957348041360,93957348041893],["icu_68::MessagePattern::addArgDoublePart(double, int, int, UErrorCode&)",93957348042672,93957348043056],["icu_68::Normalizer2::normalizeUTF8(unsigned int, icu_68::StringPiece, icu_68::ByteSink&, icu_68::Edits*, UErrorCode&) const",93957348043312,93957348043571],["icu_68::Normalizer2Factory::getNoopInstance(UErrorCode&)",93957348043712,93957348043887],["icu_68::Norm2AllModes::createInstance(icu_68::Normalizer2Impl*, UErrorCode&)",93957348043968,93957348044102],["icu_68::Norm2AllModes::getNFCInstance(UErrorCode&)",93957348044336,93957348044461],["icu_68::Normalizer2::getNFDInstance(UErrorCode&)",93957348044608,93957348044744],["icu_68::Normalizer2Factory::getNFCImpl(UErrorCode&)",93957348044896,93957348045029],["unorm_getFCD16_68",93957348045216,93957348045432],["icu_68::Normalizer2WithImpl::normalizeSecondAndAppend(icu_68::UnicodeString&, icu_68::UnicodeString const&, UErrorCode&) const",93957348045744,93957348045762],["icu_68::Normalizer2WithImpl::getDecomposition(int, icu_68::UnicodeString&) const",93957348045792,93957348045958],["icu_68::Normalizer2WithImpl::composePair(int, int) const",93957348046144,93957348046158],["icu_68::Normalizer2WithImpl::isNormalized(icu_68::UnicodeString const&, UErrorCode&) const",93957348046336,93957348046451],["icu_68::Normalizer2WithImpl::spanQuickCheckYes(icu_68::UnicodeString const&, UErrorCode&) const",93957348046592,93957348046699],["icu_68::FCDNormalizer2::hasBoundaryAfter(int) const",93957348046720,93957348046734],["icu_68::DecomposeNormalizer2::normalize(char16_t const*, char16_t const*, icu_68::ReorderingBuffer&, UErrorCode&) const",93957348046896,93957348046910],["icu_68::DecomposeNormalizer2::spanQuickCheckYes(char16_t const*, char16_t const*, UErrorCode&) const",93957348046928,93957348046947],["icu_68::ComposeNormalizer2::normalizeUTF8(unsigned int, icu_68::StringPiece, icu_68::ByteSink&, icu_68::Edits*, UErrorCode&) const",93957348047104,93957348047254],["icu_68::ComposeNormalizer2::isNormalizedUTF8(icu_68::StringPiece, UErrorCode&) const",93957348047648,93957348047707],["icu_68::ComposeNormalizer2::hasBoundaryBefore(int) const",93957348047840,93957348048003],["icu_68::ComposeNormalizer2::isInert(int) const",93957348048208,93957348048387],["icu_68::ComposeNormalizer2::normalizeAndAppend(char16_t const*, char16_t const*, signed char, icu_68::UnicodeString&, icu_68::ReorderingBuffer&, UErrorCode&) const",93957348048448,93957348048486],["icu_68::ComposeNormalizer2::getQuickCheck(int) const",93957348048528,93957348048674],["icu_68::FCDNormalizer2::normalize(char16_t const*, char16_t const*, icu_68::ReorderingBuffer&, UErrorCode&) const",93957348048768,93957348048782],["icu_68::FCDNormalizer2::spanQuickCheckYes(char16_t const*, char16_t const*, UErrorCode&) const",93957348048800,93957348048819],["icu_68::NoopNormalizer2::normalizeUTF8(unsigned int, icu_68::StringPiece, icu_68::ByteSink&, icu_68::Edits*, UErrorCode&) const",93957348048880,93957348049015],["icu_68::NoopNormalizer2::isNormalized(icu_68::UnicodeString const&, UErrorCode&) const",93957348049104,93957348049116],["icu_68::NoopNormalizer2::spanQuickCheckYes(icu_68::UnicodeString const&, UErrorCode&) const",93957348049136,93957348049159],["icu_68::Normalizer2WithImpl::normalizeSecondAndAppend(icu_68::UnicodeString&, icu_68::UnicodeString const&, signed char, UErrorCode&) const",93957348049312,93957348049797],["icu_68::ReorderingBuffer::previousCC()",93957348050000,93957348050230],["icu_68::ReorderingBuffer::appendSupplementary(int, unsigned char, UErrorCode&)",93957348050576,93957348051100],["icu_68::ReorderingBuffer::appendZeroCC(int, UErrorCode&)",93957348052400,93957348052728],["icu_68::Normalizer2Impl::~Normalizer2Impl()",93957348053024,93957348053099],["icu_68::Normalizer2Impl::init(int const*, UCPTrie const*, unsigned short const*, unsigned char const*)",93957348053200,93957348053338],["icu_68::Normalizer2Impl::addCanonIterPropertyStarts(USetAdder const*, UErrorCode&) const",93957348053856,93957348054102],["icu_68::segmentStarterMapper(void const*, unsigned int)",93957348054224,93957348054237],["icu_68::Normalizer2Impl::decompose(char16_t const*, char16_t const*, icu_68::UnicodeString&, int, UErrorCode&) const",93957348054528,93957348054721],["icu_68::Normalizer2Impl::decompose(int, unsigned short, icu_68::ReorderingBuffer&, UErrorCode&) const",93957348055536,93957348056093],["icu_68::Normalizer2Impl::decomposeShort(unsigned char const*, unsigned char const*, signed char, signed char, icu_68::ReorderingBuffer&, UErrorCode&) const",93957348056592,93957348058558],["icu_68::Normalizer2Impl::getRawDecomposition(int, char16_t*, int&) const",93957348059152,93957348059716],["icu_68::Normalizer2Impl::hasDecompBoundaryBefore(int) const",93957348060352,93957348060596],["icu_68::Normalizer2Impl::addComposites(unsigned short const*, icu_68::UnicodeSet&) const",93957348060912,93957348061168],["icu_68::Normalizer2Impl::composePair(int, int) const",93957348063584,93957348064128],["icu_68::Normalizer2Impl::hasCompBoundaryBefore(char16_t const*, char16_t const*) const",93957348067120,93957348067327],["icu_68::ReorderingBuffer::appendBMP(char16_t, unsigned char, UErrorCode&)",93957348067568,93957348067984],["icu_68::Normalizer2Impl::composeAndAppend(char16_t const*, char16_t const*, signed char, signed char, icu_68::UnicodeString&, icu_68::ReorderingBuffer&, UErrorCode&) const",93957348069264,93957348069866],["icu_68::Normalizer2Impl::findPreviousCompBoundary(char16_t const*, char16_t const*, signed char) const",93957348070224,93957348070595],["icu_68::Normalizer2Impl::hasCompBoundaryBefore(unsigned char const*, unsigned char const*) const",93957348075152,93957348075544],["icu_68::Normalizer2Impl::makeFCD(char16_t const*, char16_t const*, icu_68::ReorderingBuffer*, UErrorCode&) const",93957348075920,93957348077027],["icu_68::Normalizer2Impl::makeFCDAndAppend(char16_t const*, char16_t const*, signed char, icu_68::UnicodeString&, icu_68::ReorderingBuffer&, UErrorCode&) const",93957348077552,93957348078097],["icu_68::CanonIterData::addToStartSet(int, int, UErrorCode&)",93957348078624,93957348078890],["icu_68::Normalizer2Impl::makeCanonIterDataFromNorm16(int, int, unsigned short, icu_68::CanonIterData&, UErrorCode&) const",93957348079312,93957348080127],["icu_68::Normalizer2Impl::getCanonStartSet(int, icu_68::UnicodeSet&) const",93957348080160,93957348080538],["icu_68::PatternProps::isWhiteSpace(int)",93957348080560,93957348080622],["icu_68::PatternProps::skipWhiteSpace(icu_68::UnicodeString const&, int)",93957348080736,93957348080915],["icu_68::PatternProps::isIdentifier(char16_t const*, int)",93957348081296,93957348081460],["uprv_compareASCIIPropertyNames_68",93957348081664,93957348081923],["icu_68::PropNameData::getPropertyOrValueEnum(int, char const*)",93957348082368,93957348082658],["u_getPropertyEnum_68",93957348082944,93957348082959],["u_getPropertyValueEnum_68",93957348082976,93957348083165],["uscript_getShortName_68",93957348083200,93957348083219],["uprv_isNaN_68",93957348083328,93957348083368],["uprv_isPositiveInfinity_68",93957348083424,93957348083477],["uprv_getInfinity_68",93957348083504,93957348083518],["uprv_ceil_68",93957348083536,93957348083546],["uprv_fabs_68",93957348083584,93957348083597],["uprv_add32_overflow_68",93957348083632,93957348083645],["uprv_maxMantissa_68",93957348083744,93957348083758],["uprv_tzset_68",93957348083776,93957348083786],["uprv_tzname_clear_cache_68",93957348083808,93957348083825],["isValidOlsonID(char const*)",93957348084480,93957348084621],["u_setDataDirectory_68",93957348086064,93957348086184],["uprv_pathIsAbsolute_68",93957348086400,93957348086420],["u_getTimeZoneFilesDirectory_68",93957348086528,93957348086644],["uprv_getDefaultLocaleID_68",93957348086848,93957348087466],["icu_68::RuleBasedBreakIterator::getDynamicClassID() const",93957348087680,93957348087693],["icu_68::RuleBasedBreakIterator::RuleBasedBreakIterator(UDataMemory*, UErrorCode&)",93957348087968,93957348088221],["icu_68::RuleBasedBreakIterator::~RuleBasedBreakIterator()",93957348088624,93957348088903],["icu_68::RuleBasedBreakIterator::clone() const",93957348088944,93957348089131],["icu_68::RuleBasedBreakIterator::hashCode() const",93957348089328,93957348089354],["icu_68::RuleBasedBreakIterator::getUText(UText*, UErrorCode&) const",93957348089584,93957348089617],["icu_68::RuleBasedBreakIterator::adoptText(icu_68::CharacterIterator*)",93957348089648,93957348089808],["icu_68::RuleBasedBreakIterator::refreshInputText(UText*, UErrorCode&)",93957348089952,93957348090077],["icu_68::RuleBasedBreakIterator::last()",93957348090160,93957348090208],["icu_68::RuleBasedBreakIterator::next()",93957348090304,93957348090410],["icu_68::RuleBasedBreakIterator::following(int)",93957348090480,93957348090594],["icu_68::RuleBasedBreakIterator::isBoundary(int)",93957348090752,93957348090941],["icu_68::RuleBasedBreakIterator::handleNext()",93957348090960,93957348094501],["icu_68::RuleBasedBreakIterator::getRuleStatus() const",93957348096512,93957348096546],["icu_68::RuleBasedBreakIterator::getBinaryRules(unsigned int&)",93957348096768,93957348096804],["rbbi_cleanup_68",93957348096880,93957348096962],["icu_68::RuleBasedBreakIterator::getRules() const",93957348097584,93957348097717],["icu_68::UnhandledEngine::UnhandledEngine(UErrorCode&)",93957348097744,93957348097768],["icu_68::UnhandledEngine::~UnhandledEngine()",93957348097840,93957348097905],["icu_68::UnhandledEngine::findBreaks(UText*, int, int, icu_68::UVector32&) const",93957348097952,93957348098043],["icu_68::ICULanguageBreakFactory::ICULanguageBreakFactory(UErrorCode&)",93957348098192,93957348098216],["icu_68::ICULanguageBreakFactory::~ICULanguageBreakFactory()",93957348098256,93957348098304],["icu_68::ICULanguageBreakFactory::loadEngineFor(int)",93957348098560,93957348098924],["icu_68::DictionaryBreakEngine::~DictionaryBreakEngine()",93957348099744,93957348099786],["icu_68::DictionaryBreakEngine::findBreaks(UText*, int, int, icu_68::UVector32&) const",93957348099808,93957348100008],["icu_68::PossibleWord::candidates(UText*, icu_68::DictionaryMatcher*, int)",93957348100064,93957348100226],["icu_68::ThaiBreakEngine::~ThaiBreakEngine()",93957348100896,93957348101026],["icu_68::ThaiBreakEngine::divideUpDictionaryRange(UText*, int, int, icu_68::UVector32&) const",93957348101072,93957348103061],["icu_68::LaoBreakEngine::~LaoBreakEngine()",93957348103664,93957348103782],["icu_68::LaoBreakEngine::divideUpDictionaryRange(UText*, int, int, icu_68::UVector32&) const",93957348103920,93957348105393],["icu_68::BurmeseBreakEngine::~BurmeseBreakEngine()",93957348105952,93957348106070],["icu_68::KhmerBreakEngine::KhmerBreakEngine(icu_68::DictionaryMatcher*, UErrorCode&)",93957348106208,93957348106758],["icu_68::KhmerBreakEngine::~KhmerBreakEngine()",93957348106896,93957348107022],["icu_68::CjkBreakEngine::CjkBreakEngine(icu_68::DictionaryMatcher*, icu_68::LanguageType, UErrorCode&)",93957348108480,93957348109373],["icu_68::CjkBreakEngine::~CjkBreakEngine()",93957348109504,93957348109630],["icu_68::UCharsDictionaryMatcher::~UCharsDictionaryMatcher()",93957348114144,93957348114168],["icu_68::UCharsDictionaryMatcher::matches(UText*, int, int, int*, int*, int*, int*) const",93957348114224,93957348114724],["icu_68::BytesDictionaryMatcher::~BytesDictionaryMatcher()",93957348114768,93957348114810],["icu_68::RuleBasedBreakIterator::DictionaryCache::DictionaryCache(icu_68::RuleBasedBreakIterator*, UErrorCode&)",93957348115360,93957348115405],["icu_68::RuleBasedBreakIterator::DictionaryCache::reset()",93957348115424,93957348115452],["icu_68::RuleBasedBreakIterator::DictionaryCache::populateDictionary(int, int, int, int)",93957348115696,93957348116278],["icu_68::RuleBasedBreakIterator::BreakCache::reset(int, int)",93957348116368,93957348116402],["icu_68::RuleBasedBreakIterator::BreakCache::~BreakCache()",93957348116448,93957348116493],["icu_68::RuleBasedBreakIterator::BreakCache::following(int, UErrorCode&)",93957348116560,93957348116852],["icu_68::RuleBasedBreakIterator::BreakCache::populateNear(int, UErrorCode&)",93957348117024,93957348117755],["icu_68::RuleBasedBreakIterator::BreakCache::previous(UErrorCode&)",93957348118144,93957348118253],["icu_68::RuleBasedBreakIterator::BreakCache::populateFollowing()",93957348118336,93957348119071],["icu_68::RBBIDataWrapper::init(icu_68::RBBIDataHeader const*, UErrorCode&)",93957348120608,93957348120887],["icu_68::RBBIDataWrapper::operator==(icu_68::RBBIDataWrapper const&) const",93957348121072,93957348121115],["icu_68::RBBIDataWrapper::removeReference()",93957348121136,93957348121245],["icu_68::RBBIDataWrapper::getRuleSourceString() const",93957348121264,93957348121274],["icu_68::FileTracer::traceOpenDataFile(char const*, char const*, char const*)",93957348121360,93957348121768],["icu_68::StringCharacterIterator::StringCharacterIterator(icu_68::UnicodeString const&)",93957348121792,93957348121944],["icu_68::StringCharacterIterator::~StringCharacterIterator()",93957348122000,93957348122050],["icu_68::StringCharacterIterator::operator==(icu_68::ForwardCharacterIterator const&) const",93957348122144,93957348122329],["icu_68::StringCharacterIterator::setText(icu_68::UnicodeString const&)",93957348122448,93957348122545],["icu_68::ICUServiceKey::ICUServiceKey(icu_68::UnicodeString const&)",93957348122592,93957348122616],["icu_68::ICUServiceKey::~ICUServiceKey()",93957348122672,93957348122722],["icu_68::ICUServiceKey::currentID(icu_68::UnicodeString&) const",93957348122784,93957348122798],["icu_68::ICUServiceKey::isFallbackOf(icu_68::UnicodeString const&) const",93957348122880,93957348122973],["icu_68::ICUServiceKey::getDynamicClassID() const",93957348123088,93957348123101],["icu_68::SimpleFactory::~SimpleFactory()",93957348123168,93957348123233],["icu_68::SimpleFactory::updateVisibleIDs(icu_68::Hashtable&, UErrorCode&) const",93957348123504,93957348123608],["icu_68::SimpleFactory::getDynamicClassID() const",93957348123760,93957348123773],["icu_68::ICUService::~ICUService()",93957348123840,93957348123941],["icu_68::ICUService::getKey(icu_68::ICUServiceKey&, icu_68::UnicodeString*, UErrorCode&) const",93957348123984,93957348123999],["icu_68::cacheDeleter(void*)",93957348126080,93957348126150],["icu_68::ICUService::getVisibleIDs(icu_68::UVector&, icu_68::UnicodeString const*, UErrorCode&) const",93957348126176,93957348126478],["icu_68::ICUService::registerInstance(icu_68::UObject*, icu_68::UnicodeString const&, signed char, UErrorCode&)",93957348126800,93957348127054],["icu_68::ICUService::registerFactory(icu_68::ICUServiceFactory*, UErrorCode&)",93957348127168,93957348127410],["icu_68::ICUService::reset()",93957348127568,93957348127638],["icu_68::ICUService::isDefault() const",93957348127680,93957348127706],["icu_68::ICUService::createKey(icu_68::UnicodeString const*, UErrorCode&) const",93957348127744,93957348127821],["icu_68::ICUService::clearServiceCache()",93957348127968,93957348128021],["icu_68::LocaleKeyFactory::LocaleKeyFactory(int)",93957348128080,93957348128120],["icu_68::LocaleKeyFactory::~LocaleKeyFactory()",93957348128176,93957348128226],["getrpcent",139871564468016,139871564468202],["getrpcbyname_r",139871564469840,139871564470673],["svcunix_create",139871564476144,139871564476736],["authdes_pk_create",139871564478208,139871564478895],["totalordermag",139871565469552,139871565469585],["creal",139871565472832,139871565472833],["casin",139871565474816,139871565474981],["catanh",139871565481168,139871565482500],["ctanh",139871565484848,139871565485811],["clog",139871565486784,139871565487934],["csqrt",139871565488016,139871565489716],["__clog10",139871565489856,139871565490966],["v8::Shell::ExecuteModule(v8::Isolate*, char const*)",93957335239920,93957335240939],["v8::PerIsolateData::HandleUnhandledPromiseRejections()",93957335243680,93957335244076],["v8::PerIsolateData::RealmIndexOrThrow(v8::FunctionCallbackInfo<v8::Value> const&, int)",93957335245232,93957335245504],["v8::Shell::PerformanceMeasureMemory(v8::FunctionCallbackInfo<v8::Value> const&)",93957335245584,93957335245861],["v8::internal::Protectors::InvalidateMapIteratorLookupChain(v8::internal::Isolate*)",93957336706448,93957336706521],["v8::internal::JSFunction::MarkForOptimization(v8::internal::ConcurrencyMode)",93957336708000,93957336708380],["v8::internal::RuntimeProfiler::MarkCandidatesForOptimization(v8::internal::JavaScriptFrame*)",93957336710624,93957336710944],["v8::internal::StackGuard::PopInterruptsScope()",93957336711360,93957336711748],["v8::internal::StackGuard::ClearInterrupt(v8::internal::StackGuard::InterruptFlag)",93957336711936,93957336712037],["v8::internal::StackGuard::InitThread(v8::internal::ExecutionAccess const&)",93957336712144,93957336712301],["v8::internal::ThreadId::GetCurrentThreadId()",93957336715152,93957336715229],["v8::internal::ThreadLocalTop::Initialize(v8::internal::Isolate*)",93957336715328,93957336715454],["v8::internal::Utf16CharacterStream::Back()",93957339602592,93957339602659],["v8::internal::ProfilerCodeObserver::CodeEventHandlerInternal(v8::internal::CodeEventsContainer const&)",93957339609872,93957339610480],["v8::internal::CpuProfiler::CpuProfiler(v8::internal::Isolate*, v8::CpuProfilingNamingMode, v8::CpuProfilingLoggingMode, v8::internal::CpuProfilesCollection*, v8::internal::Symbolizer*, v8::internal::ProfilerEventsProcessor*, v8::internal::ProfilerCodeObserver*)",93957339613536,93957339613912],["v8::internal::CpuProfiler::StopProfiling(v8::internal::String)",93957339616032,93957339616141],["std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::Isolate*, v8::internal::CpuProfiler*>, std::__1::__unordered_map_hasher<v8::internal::Isolate*, std::__1::__hash_value_type<v8::internal::Isolate*, v8::internal::CpuProfiler*>, std::__1::hash<v8::internal::Isolate*>, std::__1::equal_to<v8::internal::Isolate*>, true>, std::__1::__unordered_map_equal<v8::internal::Isolate*, std::__1::__hash_value_type<v8::internal::Isolate*, v8::internal::CpuProfiler*>, std::__1::equal_to<v8::internal::Isolate*>, std::__1::hash<v8::internal::Isolate*>, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::Isolate*, v8::internal::CpuProfiler*> > >::__node_insert_multi_prepare(unsigned long, std::__1::__hash_value_type<v8::internal::Isolate*, v8::internal::CpuProfiler*>&)",93957339617232,93957339617928],["v8::internal::HeapProfiler::~HeapProfiler()",93957339618592,93957339618871],["v8::internal::HeapProfiler::RemoveBuildEmbedderGraphCallback(void (*)(v8::Isolate*, v8::EmbedderGraph*, void*), void*)",93957339619296,93957339619406],["v8::internal::HeapProfiler::StartSamplingHeapProfiler(unsigned long, int, v8::HeapProfiler::SamplingFlags)",93957339620096,93957339620228],["v8::internal::HeapProfiler::StartHeapObjectsTracking(bool)",93957339620432,93957339620590],["v8::internal::HeapProfiler::StopHeapObjectsTracking()",93957339620608,93957339620785],["v8::internal::HeapProfiler::IsTakingSnapshot() const",93957339620832,93957339620841],["v8::internal::HeapProfiler::ObjectMoveEvent(unsigned long, unsigned long, int)",93957339620880,93957339620992],["v8::internal::HeapProfiler::UpdateObjectSizeEvent(unsigned long, int)",93957339621024,93957339621038],["v8::internal::HeapProfiler::isolate() const",93957339621296,93957339621317],["v8::internal::HeapProfiler::QueryObjects(v8::internal::Handle<v8::internal::Context>, v8::debug::QueryObjectPredicate*, v8::PersistentValueVector<v8::Object, v8::DefaultPersistentValueVectorTraits>*)",93957339621424,93957339622876],["v8::internal::V8HeapExplorer::~V8HeapExplorer()",93957339623088,93957339623329],["std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Debugger::SearchMatch, std::__1::default_delete<v8_inspector::protocol::Debugger::SearchMatch> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Debugger::SearchMatch, std::__1::default_delete<v8_inspector::protocol::Debugger::SearchMatch> > > >::reserve(unsigned long)",93957342390672,93957342391327],["v8_inspector::String16::fromDouble(double)",93957342396688,93957342397060],["_ZNSt3__16vectorItNS_9allocatorItEEE6insertIPKtEENS_9enable_ifIXaasr27__is_cpp17_forward_iteratorIT_EE5valuesr16is_constructibleItNS_15iterator_traitsIS8_E9referenceEEE5valueENS_11__wrap_iterIPtEEE4typeENSC_IS6_EES8_S8_",93957342399664,93957342402226],["v8_inspector::String16Builder::appendNumber(unsigned long)",93957342405232,93957342405342],["v8_inspector::String16::fromUTF8(char const*, unsigned long)",93957342406144,93957342406776],["v8_inspector::String16::utf8() const",93957342406944,93957342406994],["v8_inspector::toV8String(v8::Isolate*, v8_inspector::String16 const&)",93957342408288,93957342408355],["v8_inspector::toV8String(v8::Isolate*, v8_inspector::StringView const&)",93957342408416,93957342408494],["v8::internal::compiler::MapRef::SerializeRootMap()",93957344073392,93957344073656],["v8::internal::compiler::JSBoundFunctionRef::serialized() const",93957344095792,93957344095955],["v8::internal::compiler::GlobalAccessFeedback::IsPropertyCell() const",93957344103760,93957344103784],["v8::internal::compiler::JSHeapBroker::ReadFeedbackForPropertyAccess(v8::internal::compiler::FeedbackSource const&, v8::internal::compiler::AccessMode, v8::base::Optional<v8::internal::compiler::NameRef>)",93957344105600,93957344109039],["v8::internal::compiler::JSHeapBroker::GetFeedbackForBinaryOperation(v8::internal::compiler::FeedbackSource const&)",93957344116512,93957344116616],["v8::internal::compiler::JSHeapBroker::GetFeedbackForInstanceOf(v8::internal::compiler::FeedbackSource const&)",93957344117888,93957344117948],["v8::internal::compiler::JSHeapBroker::GetFeedbackForRegExpLiteral(v8::internal::compiler::FeedbackSource const&)",93957344119104,93957344119164],["v8::internal::compiler::ProcessedFeedback::AsElementAccess() const",93957344123312,93957344123347],["v8::internal::compiler::ProcessedFeedback::AsRegExpLiteral() const",93957344123600,93957344123635],["v8::internal::compiler::(anonymous namespace)::IsFastLiteralHelper(v8::internal::Handle<v8::internal::JSObject>, int, int*)",93957344124368,93957344125713],["std::__1::__hash_table<v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::JSObject>::hash, v8::internal::Handle<v8::internal::JSObject>::equal_to, v8::internal::ZoneAllocator<v8::internal::Handle<v8::internal::JSObject> > >::__node_insert_unique(std::__1::__hash_node<v8::internal::Handle<v8::internal::JSObject>, void*>*)",93957344127056,93957344127420],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<v8::internal::Handle<v8::internal::Map>, void*>*>, bool> std::__1::__hash_table<v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Map>::hash, v8::internal::Handle<v8::internal::Map>::equal_to, v8::internal::ZoneAllocator<v8::internal::Handle<v8::internal::Map> > >::__emplace_unique_key_args<v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Map> const&>(v8::internal::Handle<v8::internal::Map> const&, v8::internal::Handle<v8::internal::Map> const&)",93957344128672,93957344129596],["std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::compiler::PropertyAccessTarget, v8::internal::compiler::PropertyAccessInfo>, void*>*> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::compiler::PropertyAccessTarget, v8::internal::compiler::PropertyAccessInfo>, std::__1::__unordered_map_hasher<v8::internal::compiler::PropertyAccessTarget, std::__1::__hash_value_type<v8::internal::compiler::PropertyAccessTarget, v8::internal::compiler::PropertyAccessInfo>, v8::internal::compiler::PropertyAccessTarget::Hash, v8::internal::compiler::PropertyAccessTarget::Equal, true>, std::__1::__unordered_map_equal<v8::internal::compiler::PropertyAccessTarget, std::__1::__hash_value_type<v8::internal::compiler::PropertyAccessTarget, v8::internal::compiler::PropertyAccessInfo>, v8::internal::compiler::PropertyAccessTarget::Equal, v8::internal::compiler::PropertyAccessTarget::Hash, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<v8::internal::compiler::PropertyAccessTarget, v8::internal::compiler::PropertyAccessInfo> > >::find<v8::internal::compiler::PropertyAccessTarget>(v8::internal::compiler::PropertyAccessTarget const&)",93957344132112,93957344132623],["v8::internal::compiler::JSHeapCopyReducer::JSHeapCopyReducer(v8::internal::compiler::JSHeapBroker*)",93957344135376,93957344135396],["v8::internal::compiler::JSInliningHeuristic::CollectFunctions(v8::internal::compiler::Node*, int)",93957344137920,93957344139494],["v8::internal::compiler::NodeProperties::GetFrameStateInput(v8::internal::compiler::Node*)",93957344144320,93957344144417],["v8::internal::compiler::JSInliningHeuristic::PrintCandidates()",93957344146304,93957344149759],["v8::internal::compiler::JSInliningHeuristic::DuplicateFrameStateAndRename(v8::internal::compiler::FrameState, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::JSInliningHeuristic::StateCloneMode)",93957344150304,93957344150787],["v8::internal::compiler::(anonymous namespace)::CollectFrameStateUniqueUses(v8::internal::compiler::Node*, v8::internal::compiler::FrameState, v8::internal::compiler::(anonymous namespace)::NodeAndIndex*, unsigned long*, unsigned long)",93957344152672,93957344152863],["v8::internal::compiler::JSInliningHeuristic::CreateOrReuseDispatch(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::JSInliningHeuristic::Candidate const&, v8::internal::compiler::Node**, v8::internal::compiler::Node**, v8::internal::compiler::Node**, int)",93957344152944,93957344153750],["v8::internal::compiler::JSInliningHeuristic::~JSInliningHeuristic()",93957344153824,93957344153883],["v8::internal::compiler::(anonymous namespace)::CollectStateValuesOwnedUses(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::(anonymous namespace)::NodeAndIndex*, unsigned long*, unsigned long)",93957344153904,93957344154116],["std::__1::pair<std::__1::__tree_iterator<v8::internal::compiler::JSInliningHeuristic::Candidate, std::__1::__tree_node<v8::internal::compiler::JSInliningHeuristic::Candidate, void*>*, long>, bool> std::__1::__tree<v8::internal::compiler::JSInliningHeuristic::Candidate, v8::internal::compiler::JSInliningHeuristic::CandidateCompare, v8::internal::ZoneAllocator<v8::internal::compiler::JSInliningHeuristic::Candidate> >::__emplace_unique_key_args<v8::internal::compiler::JSInliningHeuristic::Candidate, v8::internal::compiler::JSInliningHeuristic::Candidate const&>(v8::internal::compiler::JSInliningHeuristic::Candidate const&, v8::internal::compiler::JSInliningHeuristic::Candidate const&)",93957344154384,93957344154761],["v8::internal::compiler::NodeProperties::GetEffectInput(v8::internal::compiler::Node*, int)",93957344162064,93957344162212],["v8::internal::compiler::JSInliner::CreateArtificialFrameState(v8::internal::compiler::Node*, v8::internal::compiler::FrameState, int, v8::internal::BytecodeOffset, v8::internal::compiler::FrameStateType, v8::internal::compiler::SharedFunctionInfoRef, v8::internal::compiler::Node*)",93957344162896,93957344164505],["v8::internal::compiler::JSInliner::DetermineCallContext(v8::internal::compiler::Node*, v8::internal::compiler::Node**)",93957344165168,93957344166286],["v8::internal::compiler::JSInliner::ReduceJSCall(v8::internal::compiler::Node*)",93957344167920,93957344173630],["v8::internal::compiler::JSIntrinsicLowering::JSIntrinsicLowering(v8::internal::compiler::AdvancedReducer::Editor*, v8::internal::compiler::JSGraph*, v8::internal::compiler::JSHeapBroker*)",93957344173712,93957344173740],["v8::internal::compiler::JSIntrinsicLowering::ReduceTurbofanStaticAssert(v8::internal::compiler::Node*)",93957344174288,93957344174608],["v8::internal::compiler::JSIntrinsicLowering::ReduceCreateIterResultObject(v8::internal::compiler::Node*)",93957344174800,93957344175155],["v8::internal::compiler::JSIntrinsicLowering::ReduceGeneratorClose(v8::internal::compiler::Node*)",93957344175696,93957344176191],["v8::internal::compiler::JSIntrinsicLowering::ReduceAsyncFunctionAwaitCaught(v8::internal::compiler::Node*)",93957344176720,93957344176903],["std::__1::num_put<char, std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > >::do_put(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, char, double) const",93957346694144,93957346695480],["std::__1::num_put<char, std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > >::do_put(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, char, void const*) const",93957346698464,93957346699165],["std::__1::ostreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > std::__1::__pad_and_output<wchar_t, std::__1::char_traits<wchar_t> >(std::__1::ostreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, wchar_t const*, wchar_t const*, wchar_t const*, std::__1::ios_base&, wchar_t)",93957346701408,93957346701858],["std::__1::num_put<wchar_t, std::__1::ostreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::do_put(std::__1::ostreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, wchar_t, double) const",93957346703776,93957346705075],["std::__1::num_put<wchar_t, std::__1::ostreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::do_put(std::__1::ostreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, wchar_t, void const*) const",93957346707872,93957346708591],["std::__1::time_get<char, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > >::do_get_time(std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, unsigned int&, tm*) const",93957346709856,93957346709888],["std::__1::time_get<char, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > >::do_get_weekday(std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, unsigned int&, tm*) const",93957346710000,93957346710401],["std::__1::time_get<char, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > >::do_get_year(std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, unsigned int&, tm*) const",93957346710816,93957346711137],["std::__1::time_get<char, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > >::__get_white_space(std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >&, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, unsigned int&, std::__1::ctype<char> const&) const",93957346712816,93957346713177],["int std::__1::__get_up_to_n_digits<char, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> > >(std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >&, std::__1::istreambuf_iterator<char, std::__1::char_traits<char> >, unsigned int&, std::__1::ctype<char> const&, int)",93957346713520,93957346714172],["std::__1::time_get<wchar_t, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::do_get_time(std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, unsigned int&, tm*) const",93957346715424,93957346715456],["std::__1::time_get<wchar_t, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::do_get_weekday(std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::istreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, unsigned int&, tm*) const",93957346715568,93957346715969],["xdr_key_netstarg",139871564464352,139871564464441],["getrpcbynumber",139871564468656,139871564469094],["getrpcent_r",139871564469552,139871564469829],["getrpcbynumber_r",139871564470688,139871564471521],["modf",139871565465520,139871565465705],["roundeven",139871565469904,139871565470085],["conj",139871565472800,139871565472809],["cacos",139871565472864,139871565473159],["ccosh",139871565473744,139871565474802],["csin",139871565474992,139871565476120],["csinh",139871565480112,139871565481154],["catan",139871565482512,139871565483910],["v8::Shell::DoHostImportModuleDynamically(void*)",93957335236128,93957335238469],["v8::Shell::ReadChars(char const*, int*)",93957335242016,93957335242310],["v8::PerIsolateData::AddUnhandledPromise(v8::Local<v8::Promise>, v8::Local<v8::Message>, v8::Local<v8::Value>)",93957335243296,93957335243675],["v8::Shell::ReportException(v8::Isolate*, v8::Local<v8::Message>, v8::Local<v8::Value>)",93957335244080,93957335244891],["v8::internal::MicrotaskQueue::RemoveMicrotasksCompletedCallback(void (*)(v8::Isolate*, void*), void*)",93957336705584,93957336705694],["v8::internal::Protectors::InvalidatePromiseResolveLookupChain(v8::internal::Isolate*)",93957336706768,93957336706841],["v8::internal::RuntimeProfiler::RuntimeProfiler(v8::internal::Isolate*)",93957336707248,93957336707268],["v8::internal::RuntimeProfiler::MaybeOptimizeFrame(v8::internal::JSFunction, v8::internal::JavaScriptFrame*, v8::internal::CodeKind)",93957336708800,93957336709304],["v8::internal::RuntimeProfiler::MarkCandidatesForOptimizationScope::MarkCandidatesForOptimizationScope(v8::internal::RuntimeProfiler*)",93957336710224,93957336710623],["v8::internal::RuntimeProfiler::MarkCandidatesForOptimizationFromCode()",93957336710944,93957336711050],["v8::internal::StackGuard::PushInterruptsScope(v8::internal::InterruptsScope*)",93957336711152,93957336711346],["v8::internal::StackGuard::CheckInterrupt(v8::internal::StackGuard::InterruptFlag)",93957336711760,93957336711822],["v8::internal::Scanner::ScanHexDigits()",93957339595200,93957339595698],["v8::internal::AddressToTraceMap::MoveObject(unsigned long, unsigned long, int)",93957339604832,93957339605158],["non-virtual thunk to v8::internal::SamplingEventsProcessor::~SamplingEventsProcessor()",93957339608928,93957339609024],["v8::internal::SamplingEventsProcessor::Run()",93957339611664,93957339612291],["v8::internal::CpuProfiler::DeleteProfile(v8::internal::CpuProfile*)",93957339613344,93957339613403],["v8::internal::CpuProfiler::~CpuProfiler()",93957339614224,93957339614805],["v8::internal::CpuProfiler::StartProfiling(v8::internal::String, v8::CpuProfilingOptions, std::__1::unique_ptr<v8::DiscardedSamplesDelegate, std::__1::default_delete<v8::DiscardedSamplesDelegate> >)",93957339615856,93957339615916],["v8::internal::ProfilerCodeObserver::~ProfilerCodeObserver()",93957339616240,93957339616327],["std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::Isolate*, v8::internal::CpuProfiler*>, std::__1::__unordered_map_hasher<v8::internal::Isolate*, std::__1::__hash_value_type<v8::internal::Isolate*, v8::internal::CpuProfiler*>, std::__1::hash<v8::internal::Isolate*>, std::__1::equal_to<v8::internal::Isolate*>, true>, std::__1::__unordered_map_equal<v8::internal::Isolate*, std::__1::__hash_value_type<v8::internal::Isolate*, v8::internal::CpuProfiler*>, std::__1::equal_to<v8::internal::Isolate*>, std::__1::hash<v8::internal::Isolate*>, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::Isolate*, v8::internal::CpuProfiler*> > >::__node_insert_multi(std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::Isolate*, v8::internal::CpuProfiler*>, void*>*)",93957339616752,93957339617218],["v8::internal::CpuProfilesCollection::~CpuProfilesCollection()",93957339617936,93957339618220],["v8::internal::HeapProfiler::HeapProfiler(v8::internal::Heap*)",93957339618432,93957339618578],["v8::internal::HeapProfiler::~HeapProfiler()",93957339618880,93957339618908],["v8::internal::HeapProfiler::RemoveSnapshot(v8::internal::HeapSnapshot*)",93957339619120,93957339619291],["v8::internal::HeapProfiler::BuildEmbedderGraph(v8::internal::Isolate*, v8::EmbedderGraph*)",93957339619408,93957339619470],["v8::internal::HeapProfiler::TakeSnapshot(v8::ActivityControl*, v8::HeapProfiler::ObjectNameResolver*, bool)",93957339619536,93957339620083],["v8::internal::HeapProfiler::StopSamplingHeapProfiler()",93957339620240,93957339620388],["v8_inspector::(anonymous namespace)::serializeId(unsigned long, int, int)",93957342380448,93957342380621],["void std::__1::vector<std::__1::pair<int, v8_inspector::String16>, std::__1::allocator<std::__1::pair<int, v8_inspector::String16> > >::__push_back_slow_path<std::__1::pair<int, v8_inspector::String16> >(std::__1::pair<int, v8_inspector::String16>&&)",93957342393248,93957342393667],["v8_inspector::String16::fromInteger(unsigned long)",93957342395888,93957342396275],["v8_inspector::String16::toInteger64(bool*) const",93957342397408,93957342398064],["v8_inspector::String16Builder::append(v8_inspector::String16 const&)",93957342399616,93957342399652],["v8_inspector::String16Builder::append(char)",93957342402240,93957342402482],["_ZNSt3__16vectorItNS_9allocatorItEEE6insertIPcEENS_9enable_ifIXaasr27__is_cpp17_forward_iteratorIT_EE5valuesr16is_constructibleItNS_15iterator_traitsIS7_E9referenceEEE5valueENS_11__wrap_iterIPtEEE4typeENSB_IPKtEES7_S7_",93957342402608,93957342405222],["v8_inspector::String16Builder::appendUnsignedAsHex(unsigned int)",93957342405344,93957342405453],["v8::internal::compiler::FunctionTemplateInfoRef::is_signature_undefined() const",93957344061856,93957344062041],["v8::internal::compiler::StringRef::IsSeqString() const",93957344078080,93957344078298],["v8::internal::compiler::FeedbackVectorRef::serialized() const",93957344085840,93957344085995],["v8::internal::compiler::SharedFunctionInfoRef::scope_info() const",93957344097696,93957344098037],["v8::internal::compiler::JSGlobalObjectRef::GetPropertyCell(v8::internal::compiler::NameRef const&, v8::internal::compiler::SerializationPolicy) const",93957344100400,93957344100777],["v8::internal::compiler::GlobalAccessFeedback::slot_index() const",93957344103984,93957344104001],["v8::internal::compiler::ElementAccessFeedback::HasOnlyStringMaps(v8::internal::compiler::JSHeapBroker*) const",93957344104784,93957344105310],["v8::internal::compiler::JSHeapBroker::ReadFeedbackForBinaryOperation(v8::internal::compiler::FeedbackSource const&) const",93957344113216,93957344113422],["v8::internal::compiler::JSHeapBroker::ReadFeedbackForTemplateObject(v8::internal::compiler::FeedbackSource const&)",93957344115424,93957344115939],["v8::internal::compiler::JSHeapBroker::GetFeedbackForCompareOperation(v8::internal::compiler::FeedbackSource const&)",93957344116864,93957344116968],["v8::internal::compiler::JSHeapBroker::GetFeedbackForPropertyAccess(v8::internal::compiler::FeedbackSource const&, v8::internal::compiler::AccessMode, v8::base::Optional<v8::internal::compiler::NameRef>)",93957344117568,93957344117628],["v8::internal::compiler::JSHeapBroker::GetFeedbackForCall(v8::internal::compiler::FeedbackSource const&)",93957344118192,93957344118252],["v8::internal::compiler::JSHeapBroker::GetFeedbackForArrayOrObjectLiteral(v8::internal::compiler::FeedbackSource const&)",93957344118800,93957344118860],["v8::internal::compiler::JSHeapBroker::GetFeedbackForTemplateObject(v8::internal::compiler::FeedbackSource const&)",93957344119408,93957344119468],["v8::internal::compiler::JSHeapBroker::GetPropertyAccessInfo(v8::internal::compiler::MinimorphicLoadPropertyAccessFeedback const&, v8::internal::compiler::FeedbackSource const&, v8::internal::compiler::SerializationPolicy)",93957344121664,93957344123262],["v8::internal::compiler::ProcessedFeedback::AsInstanceOf() const",93957344123408,93957344123443],["v8::internal::compiler::ProcessedFeedback::AsLiteral() const",93957344123552,93957344123587],["v8::internal::compiler::ProcessedFeedback::AsTemplateObject() const",93957344123648,93957344123683],["v8::internal::compiler::TraceScope::TraceScope(v8::internal::compiler::JSHeapBroker*, void*, char const*)",93957344123904,93957344124353],["std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::compiler::PropertyAccessTarget, v8::internal::compiler::PropertyAccessInfo>, std::__1::__unordered_map_hasher<v8::internal::compiler::PropertyAccessTarget, std::__1::__hash_value_type<v8::internal::compiler::PropertyAccessTarget, v8::internal::compiler::PropertyAccessInfo>, v8::internal::compiler::PropertyAccessTarget::Hash, v8::internal::compiler::PropertyAccessTarget::Equal, true>, std::__1::__unordered_map_equal<v8::internal::compiler::PropertyAccessTarget, std::__1::__hash_value_type<v8::internal::compiler::PropertyAccessTarget, v8::internal::compiler::PropertyAccessInfo>, v8::internal::compiler::PropertyAccessTarget::Equal, v8::internal::compiler::PropertyAccessTarget::Hash, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<v8::internal::compiler::PropertyAccessTarget, v8::internal::compiler::PropertyAccessInfo> > >::rehash(unsigned long)",93957344125728,93957344126099],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<v8::internal::Handle<v8::internal::JSObject>, void*>*>, bool> std::__1::__hash_table<v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::JSObject>::hash, v8::internal::Handle<v8::internal::JSObject>::equal_to, v8::internal::ZoneAllocator<v8::internal::Handle<v8::internal::JSObject> > >::__emplace_unique<v8::internal::JSObject, v8::internal::Isolate*>(v8::internal::JSObject&&, v8::internal::Isolate*&&)",93957344126880,93957344127056],["std::__1::pair<std::__1::__tree_const_iterator<std::__1::__value_type<v8::internal::compiler::JSHeapBroker::SerializedFunction, v8::internal::ZoneVector<v8::internal::compiler::Hints> >, std::__1::__tree_node<std::__1::__value_type<v8::internal::compiler::JSHeapBroker::SerializedFunction, v8::internal::ZoneVector<v8::internal::compiler::Hints> >, void*>*, long>, std::__1::__tree_const_iterator<std::__1::__value_type<v8::internal::compiler::JSHeapBroker::SerializedFunction, v8::internal::ZoneVector<v8::internal::compiler::Hints> >, std::__1::__tree_node<std::__1::__value_type<v8::internal::compiler::JSHeapBroker::SerializedFunction, v8::internal::ZoneVector<v8::internal::compiler::Hints> >, void*>*, long> > std::__1::__tree<std::__1::__value_type<v8::internal::compiler::JSHeapBroker::SerializedFunction, v8::internal::ZoneVector<v8::internal::compiler::Hints> >, std::__1::__map_value_compare<v8::internal::compiler::JSHeapBroker::SerializedFunction, std::__1::__value_type<v8::internal::compiler::JSHeapBroker::SerializedFunction, v8::internal::ZoneVector<v8::internal::compiler::Hints> >, std::__1::less<v8::internal::compiler::JSHeapBroker::SerializedFunction>, true>, v8::internal::ZoneAllocator<std::__1::__value_type<v8::internal::compiler::JSHeapBroker::SerializedFunction, v8::internal::ZoneVector<v8::internal::compiler::Hints> > > >::__equal_range_multi<v8::internal::compiler::JSHeapBroker::SerializedFunction>(v8::internal::compiler::JSHeapBroker::SerializedFunction const&) const",93957344127424,93957344127673],["v8::internal::compiler::ObjectData::ObjectData(v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::Object>, v8::internal::compiler::ObjectDataKind)",93957344127984,93957344128661],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::compiler::FeedbackSource, v8::internal::compiler::ProcessedFeedback const*>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::compiler::FeedbackSource, v8::internal::compiler::ProcessedFeedback const*>, std::__1::__unordered_map_hasher<v8::internal::compiler::FeedbackSource, std::__1::__hash_value_type<v8::internal::compiler::FeedbackSource, v8::internal::compiler::ProcessedFeedback const*>, v8::internal::compiler::FeedbackSource::Hash, v8::internal::compiler::FeedbackSource::Equal, true>, std::__1::__unordered_map_equal<v8::internal::compiler::FeedbackSource, std::__1::__hash_value_type<v8::internal::compiler::FeedbackSource, v8::internal::compiler::ProcessedFeedback const*>, v8::internal::compiler::FeedbackSource::Equal, v8::internal::compiler::FeedbackSource::Hash, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<v8::internal::compiler::FeedbackSource, v8::internal::compiler::ProcessedFeedback const*> > >::__emplace_unique_key_args<v8::internal::compiler::FeedbackSource, std::__1::pair<v8::internal::compiler::FeedbackSource const, v8::internal::compiler::ProcessedFeedback const*> >(v8::internal::compiler::FeedbackSource const&, std::__1::pair<v8::internal::compiler::FeedbackSource const, v8::internal::compiler::ProcessedFeedback const*>&&)",93957344129600,93957344130604],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::Handle<v8::internal::Map>, v8::internal::ZoneVector<v8::internal::Handle<v8::internal::Map> > >, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::Handle<v8::internal::Map>, v8::internal::ZoneVector<v8::internal::Handle<v8::internal::Map> > >, std::__1::__unordered_map_hasher<v8::internal::Handle<v8::internal::Map>, std::__1::__hash_value_type<v8::internal::Handle<v8::internal::Map>, v8::internal::ZoneVector<v8::internal::Handle<v8::internal::Map> > >, v8::internal::Handle<v8::internal::Map>::hash, v8::internal::Handle<v8::internal::Map>::equal_to, true>, std::__1::__unordered_map_equal<v8::internal::Handle<v8::internal::Map>, std::__1::__hash_value_type<v8::internal::Handle<v8::internal::Map>, v8::internal::ZoneVector<v8::internal::Handle<v8::internal::Map> > >, v8::internal::Handle<v8::internal::Map>::equal_to, v8::internal::Handle<v8::internal::Map>::hash, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<v8::internal::Handle<v8::internal::Map>, v8::internal::ZoneVector<v8::internal::Handle<v8::internal::Map> > > > >::__emplace_unique_key_args<v8::internal::Handle<v8::internal::Map>, std::__1::pair<v8::internal::Handle<v8::internal::Map> const, v8::internal::ZoneVector<v8::internal::Handle<v8::internal::Map> > > >(v8::internal::Handle<v8::internal::Map> const&, std::__1::pair<v8::internal::Handle<v8::internal::Map> const, v8::internal::ZoneVector<v8::internal::Handle<v8::internal::Map> > >&&)",93957344131072,93957344132097],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::compiler::PropertyAccessTarget, v8::internal::compiler::PropertyAccessInfo>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::compiler::PropertyAccessTarget, v8::internal::compiler::PropertyAccessInfo>, std::__1::__unordered_map_hasher<v8::internal::compiler::PropertyAccessTarget, std::__1::__hash_value_type<v8::internal::compiler::PropertyAccessTarget, v8::internal::compiler::PropertyAccessInfo>, v8::internal::compiler::PropertyAccessTarget::Hash, v8::internal::compiler::PropertyAccessTarget::Equal, true>, std::__1::__unordered_map_equal<v8::internal::compiler::PropertyAccessTarget, std::__1::__hash_value_type<v8::internal::compiler::PropertyAccessTarget, v8::internal::compiler::PropertyAccessInfo>, v8::internal::compiler::PropertyAccessTarget::Equal, v8::internal::compiler::PropertyAccessTarget::Hash, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<v8::internal::compiler::PropertyAccessTarget, v8::internal::compiler::PropertyAccessInfo> > >::__emplace_unique_key_args<v8::internal::compiler::PropertyAccessTarget, std::__1::pair<v8::internal::compiler::PropertyAccessTarget const, v8::internal::compiler::PropertyAccessInfo> >(v8::internal::compiler::PropertyAccessTarget const&, std::__1::pair<v8::internal::compiler::PropertyAccessTarget const, v8::internal::compiler::PropertyAccessInfo>&&)",93957344132624,93957344133881],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::compiler::FeedbackSource, v8::internal::compiler::MinimorphicLoadPropertyAccessInfo>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::compiler::FeedbackSource, v8::internal::compiler::MinimorphicLoadPropertyAccessInfo>, std::__1::__unordered_map_hasher<v8::internal::compiler::FeedbackSource, std::__1::__hash_value_type<v8::internal::compiler::FeedbackSource, v8::internal::compiler::MinimorphicLoadPropertyAccessInfo>, v8::internal::compiler::FeedbackSource::Hash, v8::internal::compiler::FeedbackSource::Equal, true>, std::__1::__unordered_map_equal<v8::internal::compiler::FeedbackSource, std::__1::__hash_value_type<v8::internal::compiler::FeedbackSource, v8::internal::compiler::MinimorphicLoadPropertyAccessInfo>, v8::internal::compiler::FeedbackSource::Equal, v8::internal::compiler::FeedbackSource::Hash, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<v8::internal::compiler::FeedbackSource, v8::internal::compiler::MinimorphicLoadPropertyAccessInfo> > >::__emplace_unique_key_args<v8::internal::compiler::FeedbackSource, std::__1::pair<v8::internal::compiler::FeedbackSource const, v8::internal::compiler::MinimorphicLoadPropertyAccessInfo> >(v8::internal::compiler::FeedbackSource const&, std::__1::pair<v8::internal::compiler::FeedbackSource const, v8::internal::compiler::MinimorphicLoadPropertyAccessInfo>&&)",93957344134352,93957344135364],["v8::internal::compiler::JSHeapCopyReducer::Reduce(v8::internal::compiler::Node*)",93957344135408,93957344137839],["v8::internal::compiler::JSHeapCopyReducer::reducer_name() const",93957344137904,93957344137917],["v8::internal::compiler::(anonymous namespace)::CanConsiderForInlining(v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::JSFunctionRef const&)",93957344139504,93957344140685],["v8::internal::compiler::JSInliningHeuristic::Reduce(v8::internal::compiler::Node*)",93957344142432,93957344144306],["v8::internal::compiler::JSInliningHeuristic::InlineCandidate(v8::internal::compiler::JSInliningHeuristic::Candidate const&, bool)",93957344144432,93957344145877],["std::__1::num_put<char, std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > >::do_put(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, char, unsigned long long) const",93957346693520,93957346694142],["std::__1::__libcpp_asprintf_l(char**, __locale_struct*, char const*, ...)",93957346695488,93957346695679],["std::__1::num_put<char, std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > >::do_put(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, char, long double) const",93957346697088,93957346698458],["std::__1::num_put<wchar_t, std::__1::ostreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::do_put(std::__1::ostreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, wchar_t, bool) const",93957346699168,93957346699696],["std::__1::__num_put<wchar_t>::__widen_and_group_int(char*, char*, char*, wchar_t*, wchar_t*&, wchar_t*&, std::__1::locale const&)",93957346700336,93957346701404],["std::__1::num_put<wchar_t, std::__1::ostreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::do_put(std::__1::ostreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, wchar_t, long long) const",93957346701872,93957346702495],["std::__1::num_put<wchar_t, std::__1::ostreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> > >::do_put(std::__1::ostreambuf_iterator<wchar_t, std::__1::char_traits<wchar_t> >, std::__1::ios_base&, wchar_t, unsigned long long) const",93957346703136,93957346703765],["std::__1::__num_put<wchar_t>::__widen_and_group_float(char*, char*, char*, wchar_t*, wchar_t*&, wchar_t*&, std::__1::locale const&)",93957346705088,93957346706514],["xdr_cryptkeyarg2",139871564463984,139871564464067],["rtime",139871564464912,139871564465458],["getrpcbyname",139871564468208,139871564468646],["setrpcent",139871564469104,139871564469322],["round",139871565459248,139871565459398],["nextup",139871565469264,139871565469421],["setpayload",139871565469632,139871565469773],["ufromfp",139871565470720,139871565471398],["carg",139871565472768,139871565472785],["cimag",139871565472816,139871565472821],["cabs",139871565472848,139871565472853],["cacosh",139871565473168,139871565473701],["v8::Shell::ModuleResolutionSuccessCallback(v8::FunctionCallbackInfo<v8::Value> const&)",93957335235200,93957335235458],["std::__1::map<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::ModuleType>, v8::Global<v8::Module>, std::__1::less<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::ModuleType> >, std::__1::allocator<std::__1::pair<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::ModuleType> const, v8::Global<v8::Module> > > >::find(std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::ModuleType> const&)",93957335238784,93957335239209],["v8::Shell::ExecuteWebSnapshot(v8::Isolate*, char const*)",93957335240944,93957335242010],["v8::PerIsolateData::~PerIsolateData()",93957335242320,93957335242765],["v8::internal::MicrotaskQueue::EnqueueMicrotask(v8::internal::Microtask)",93957336702128,93957336702515],["v8::internal::Protectors::InvalidateArrayIteratorLookupChain(v8::internal::Isolate*)",93957336706128,93957336706201],["v8::internal::Protectors::InvalidatePromiseHook(v8::internal::Isolate*)",93957336706608,93957336706681],["v8::internal::Protectors::InvalidateSetIteratorLookupChain(v8::internal::Isolate*)",93957336706928,93957336707001],["v8::internal::Protectors::InvalidateTypedArraySpeciesLookupChain(v8::internal::Isolate*)",93957336707168,93957336707241],["v8::internal::RuntimeProfiler::Optimize(v8::internal::JSFunction, v8::internal::OptimizationReason, v8::internal::CodeKind)",93957336707280,93957336707996],["v8::internal::RuntimeProfiler::AttemptOnStackReplacement(v8::internal::UnoptimizedFrame*, int)",93957336708384,93957336708799],["v8::internal::RuntimeProfiler::MaybeOSR(v8::internal::JSFunction, v8::internal::UnoptimizedFrame*)",93957336709312,93957336709788],["void v8::internal::Scanner::Advance<false>()",93957339579616,93957339579701],["v8::internal::Scanner::ScanRegExpFlags()",93957339601552,93957339601957],["v8::internal::AllocationTraceNode::~AllocationTraceNode()",93957339603712,93957339603829],["v8::internal::AllocationTracker::AllocationEvent(unsigned long, int)",93957339606112,93957339606949],["non-virtual thunk to v8::internal::SamplingEventsProcessor::~SamplingEventsProcessor()",93957339608736,93957339608824],["v8::internal::ProfilerEventsProcessor::AddDeoptStack(unsigned long, int)",93957339609040,93957339609414],["non-virtual thunk to v8::internal::ProfilerEventsProcessor::CodeEventHandler(v8::internal::CodeEventsContainer const&)",93957339611008,93957339611022],["v8::internal::ProfilerCodeObserver::ProfilerCodeObserver(v8::internal::Isolate*)",93957339612496,93957339612914],["v8::internal::CpuProfiler::ResetProfiles()",93957339613168,93957339613343],["v8::internal::CpuProfiler::CpuProfiler(v8::internal::Isolate*, v8::CpuProfilingNamingMode, v8::CpuProfilingLoggingMode)",93957339613408,93957339613524],["v8::internal::CpuProfiler::EnableLogging()",93957339613920,93957339614221],["v8::internal::CpuProfiler::set_sampling_interval(v8::base::TimeDelta)",93957339614816,93957339614826],["v8::internal::CpuProfiler::StartProcessorIfNotStarted()",93957339615232,93957339615842],["v8::internal::CpuProfiler::StopProfiling(char const*)",93957339615920,93957339616017],["v8::internal::ProfilerCodeObserver::~ProfilerCodeObserver()",93957339616144,93957339616226],["v8::internal::CpuSampler::~CpuSampler()",93957339616336,93957339616364],["std::__1::unordered_map<int, std::__1::unique_ptr<v8_inspector::InjectedScript, std::__1::default_delete<v8_inspector::InjectedScript> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::unique_ptr<v8_inspector::InjectedScript, std::__1::default_delete<v8_inspector::InjectedScript> > > > >::erase(int const&)",93957342378032,93957342378557],["void v8_inspector::String16Builder::appendAll<char const*, v8_inspector::String16, char const*, v8_inspector::String16>(char const*, v8_inspector::String16, char const*, v8_inspector::String16)",93957342384240,93957342385670],["v8_inspector::(anonymous namespace)::findMagicComment(v8_inspector::String16 const&, v8_inspector::String16 const&, bool)",93957342391424,93957342393139],["v8_inspector::String16::String16(char const*)",93957342394288,93957342394607],["v8_inspector::String16::fromInteger(int)",93957342395504,93957342395876],["v8_inspector::String16::fromInteger64(long)",93957342396288,93957342396675],["v8_inspector::String16::fromDouble(double, int)",93957342397072,93957342397407],["v8_inspector::String16::toInteger(bool*) const",93957342398064,93957342398104],["v8::internal::compiler::NativeContextRef::js_array_holey_elements_map() const",93957344051712,93957344052027],["v8::internal::compiler::SharedFunctionInfoRef::kind() const",93957344068208,93957344068387],["v8::internal::compiler::MapRef::CanBeDeprecated() const",93957344076320,93957344076651],["v8::internal::compiler::ObjectRef::OddballToNumber() const",93957344080032,93957344080259],["v8::internal::compiler::AllocationSiteRef::boilerplate() const",93957344085040,93957344085364],["v8::internal::compiler::NativeContextData::Serialize(v8::internal::compiler::JSHeapBroker*)",93957344086960,93957344092935],["v8::internal::compiler::SharedFunctionInfoRef::SerializeFunctionTemplateInfo()",93957344096752,93957344096945],["v8::internal::compiler::MapRef::SerializeBackPointer()",93957344098800,93957344099089],["v8::internal::compiler::PropertyCellRef::Serialize() const",93957344099888,93957344100036],["v8::internal::compiler::ElementAccessFeedback::transition_groups() const",93957344100896,93957344100906],["v8::internal::compiler::GlobalAccessFeedback::property_cell() const",93957344103824,93957344103890],["v8::internal::compiler::GlobalAccessFeedback::GetConstantHint() const",93957344104032,93957344104485],["v8::internal::compiler::KeyedAccessMode::load_mode() const",93957344104688,93957344104729],["v8::internal::compiler::JSHeapBroker::GetFeedbackSlotKind(v8::internal::compiler::FeedbackSource const&) const",93957344105360,93957344105471],["v8::internal::compiler::JSHeapBroker::ReadFeedbackForGlobalAccess(v8::internal::compiler::FeedbackSource const&)",93957344111792,93957344113027],["v8::internal::compiler::JSHeapBroker::ReadFeedbackForForIn(v8::internal::compiler::FeedbackSource const&) const",93957344113632,93957344113838],["v8::internal::compiler::JSHeapBroker::ReadFeedbackForRegExpLiteral(v8::internal::compiler::FeedbackSource const&)",93957344114896,93957344115420],["v8::internal::compiler::JSHeapBroker::ReadFeedbackForCall(v8::internal::compiler::FeedbackSource const&)",93957344115952,93957344116506],["v8::internal::compiler::JSHeapBroker::ProcessFeedbackForBinaryOperation(v8::internal::compiler::FeedbackSource const&)",93957344116624,93957344116852],["v8::internal::compiler::JSHeapBroker::ProcessFeedbackForCompareOperation(v8::internal::compiler::FeedbackSource const&)",93957344116976,93957344117204],["v8::internal::compiler::JSHeapBroker::ProcessFeedbackForForIn(v8::internal::compiler::FeedbackSource const&)",93957344117328,93957344117556],["v8::internal::compiler::JSHeapBroker::ProcessFeedbackForPropertyAccess(v8::internal::compiler::FeedbackSource const&, v8::internal::compiler::AccessMode, v8::base::Optional<v8::internal::compiler::NameRef>)",93957344117632,93957344117884],["v8::internal::compiler::JSHeapBroker::ProcessFeedbackForInstanceOf(v8::internal::compiler::FeedbackSource const&)",93957344117952,93957344118180],["v8::internal::compiler::JSHeapBroker::ProcessFeedbackForCall(v8::internal::compiler::FeedbackSource const&)",93957344118256,93957344118484],["v8::internal::compiler::JSHeapBroker::ProcessFeedbackForGlobalAccess(v8::internal::compiler::FeedbackSource const&)",93957344118560,93957344118788],["v8::internal::compiler::JSHeapBroker::ProcessFeedbackForArrayOrObjectLiteral(v8::internal::compiler::FeedbackSource const&)",93957344118864,93957344119092],["v8::internal::compiler::JSHeapBroker::ProcessFeedbackForRegExpLiteral(v8::internal::compiler::FeedbackSource const&)",93957344119168,93957344119396],["v8::internal::compiler::JSHeapBroker::ProcessFeedbackForTemplateObject(v8::internal::compiler::FeedbackSource const&)",93957344119472,93957344119700],["v8::internal::compiler::JSHeapBroker::GetPropertyAccessInfo(v8::internal::compiler::MapRef, v8::internal::compiler::NameRef, v8::internal::compiler::AccessMode, v8::internal::compiler::CompilationDependencies*, v8::internal::compiler::SerializationPolicy)",93957344119984,93957344121658],["v8::internal::compiler::ProcessedFeedback::AsCall() const",93957344123264,93957344123299],["v8::internal::compiler::ProcessedFeedback::AsGlobalAccess() const",93957344123360,93957344123395],["v8::internal::compiler::ProcessedFeedback::AsNamedAccess() const",93957344123456,93957344123491],["xdr_keystatus",139871564463824,139871564463846],["xdr_unixcred",139871564464160,139871564464257],["xdr_key_netstres",139871564464448,139871564464523],["authdes_getucred",139871564467376,139871564468006],["fabs",139871565429392,139871565429401],["__exp10_finite",139871565465072,139871565465309],["__signbit",139871565466176,139871565466186],["totalorder",139871565469472,139871565469505],["getpayload",139871565469600,139871565469623],["setpayloadsig",139871565469776,139871565469901],["fromfp",139871565470096,139871565470716],["fromfpx",139871565471408,139871565472068],["v8::MaybeLocal<v8::Module> v8::Shell::CompileString<v8::Module>(v8::Isolate*, v8::Local<v8::Context>, v8::Local<v8::String>, v8::ScriptOrigin const&)",93957335230240,93957335230783],["v8::Shell::HostImportModuleDynamically(v8::Local<v8::Context>, v8::Local<v8::ScriptOrModule>, v8::Local<v8::String>, v8::Local<v8::FixedArray>)",93957335235744,93957335235898],["v8::Shell::HostInitializeImportMetaObject(v8::Local<v8::Context>, v8::Local<v8::Module>, v8::Local<v8::Object>)",93957335238480,93957335238784],["v8::(anonymous namespace)::ResolveModuleCallback(v8::Local<v8::Context>, v8::Local<v8::String>, v8::Local<v8::FixedArray>, v8::Local<v8::Module>)",93957335239216,93957335239916],["v8::internal::ErrorUtils::NewCalledNonCallableError(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)",93957336699872,93957336699971],["v8::internal::MicrotaskQueue::IsRunningMicrotasks() const",93957336703760,93957336703769],["v8::internal::(anonymous namespace)::TraceProtectorInvalidation(char const*)",93957336705776,93957336706034],["v8::internal::Protectors::InvalidateIsConcatSpreadableLookupChain(v8::internal::Isolate*)",93957336706288,93957336706361],["v8::internal::Protectors::InvalidateRegExpSpeciesLookupChain(v8::internal::Isolate*)",93957336706528,93957336706601],["v8::internal::Protectors::InvalidatePromiseThenLookupChain(v8::internal::Isolate*)",93957336706688,93957336706761],["v8::internal::Protectors::InvalidatePromiseSpeciesLookupChain(v8::internal::Isolate*)",93957336706848,93957336706921],["v8::internal::Protectors::InvalidateStringIteratorLookupChain(v8::internal::Isolate*)",93957336707008,93957336707081],["v8::internal::UnbufferedCharacterStream<v8::internal::ChunkedStream>::ReadBlock()",93957339552272,93957339552376],["v8::internal::Scanner::ScanTemplateSpan()",93957339590368,93957339591899],["unsigned int v8::internal::Scanner::ScanUnicodeEscape<false>()",93957339598384,93957339599267],["v8::internal::Scanner::DoubleValue()",93957339602160,93957339602190],["unsigned int v8::internal::Scanner::ScanUnicodeEscape<true>()",93957339602848,93957339603438],["v8::internal::AddressToTraceMap::RemoveRange(unsigned long, unsigned long)",93957339604208,93957339604747],["v8::internal::AllocationTracker::~AllocationTracker()",93957339605536,93957339605772],["v8::internal::AllocationTracker::UnresolvedLocation::HandleWeakScript(v8::WeakCallbackInfo<void> const&)",93957339608000,93957339608032],["v8::internal::ProfilerEventsProcessor::~ProfilerEventsProcessor()",93957339608512,93957339608723],["v8::internal::SamplingEventsProcessor::~SamplingEventsProcessor()",93957339608832,93957339608925],["non-virtual thunk to v8::internal::ProfilerEventsProcessor::~ProfilerEventsProcessor()",93957339609024,93957339609038],["v8::internal::ProfilerEventsProcessor::AddCurrentStack(bool)",93957339609424,93957339609867],["v8::internal::ProfilerEventsProcessor::CodeEventHandler(v8::internal::CodeEventsContainer const&)",93957339610480,93957339611008],["v8::internal::SamplingEventsProcessor::ProcessOneSample()",93957339611024,93957339611662],["v8::internal::SamplingEventsProcessor::SetSamplingInterval(v8::base::TimeDelta)",93957339612304,93957339612487],["v8::internal::ProfilerCodeObserver::CodeEventHandler(v8::internal::CodeEventsContainer const&)",93957339612928,93957339612966],["v8_inspector::InspectedContext::contextId(v8::Local<v8::Context>)",93957342375712,93957342375722],["v8_inspector::RemoteObjectIdBase::parseId(v8_inspector::String16 const&)",93957342378992,93957342379486],["v8_inspector::String16 v8_inspector::String16::concat<v8_inspector::String16, char const*, v8_inspector::String16, char const*, v8_inspector::String16>(v8_inspector::String16, char const*, v8_inspector::String16, char const*, v8_inspector::String16)",93957342380816,93957342382838],["void v8_inspector::String16Builder::appendAll<char const*, v8_inspector::String16>(char const*, v8_inspector::String16)",93957342386352,93957342387042],["v8_inspector::findSourceURL(v8_inspector::String16 const&, bool)",93957342391328,93957342391419],["v8_inspector::findSourceMapURL(v8_inspector::String16 const&, bool)",93957342393152,93957342393243],["v8_inspector::String16::String16(unsigned short const*, unsigned long)",93957342393680,93957342394283],["v8_inspector::String16::String16(char const*, unsigned long)",93957342394608,93957342394887],["v8::internal::compiler::MapRef::is_deprecated() const",93957344042912,93957344043095],["v8::internal::compiler::NativeContextRef::slow_object_with_null_prototype_map() const",93957344056928,93957344057243],["v8::internal::compiler::ScopeInfoRef::HasOuterScopeInfo() const",93957344066336,93957344066515],["v8::internal::compiler::SharedFunctionInfoRef::IsUserJavaScript() const",93957344069808,93957344070080],["v8::internal::compiler::JSTypedArrayRef::buffer() const",93957344075232,93957344075624],["v8::internal::compiler::StringRef::IsExternalString() const",93957344077216,93957344077415],["v8::internal::compiler::NativeContextRef::GetInitialJSArrayMap(v8::internal::ElementsKind) const",93957344079408,93957344079486],["v8::internal::compiler::JSObjectRef::GetOwnDictionaryProperty(v8::internal::InternalIndex, v8::internal::compiler::SerializationPolicy) const",93957344082128,93957344082521],["v8::internal::compiler::ObjectRef::ObjectRef(v8::internal::compiler::JSHeapBroker*, v8::internal::Handle<v8::internal::Object>, v8::internal::compiler::ObjectRef::BackgroundSerialization, bool)",93957344084560,93957344084694],["v8::internal::compiler::NameRef::NameRef(v8::internal::compiler::JSHeapBroker*, v8::internal::Handle<v8::internal::Object>, v8::internal::compiler::ObjectRef::BackgroundSerialization, bool)",93957344085552,93957344085728],["v8::internal::compiler::RegExpBoilerplateDescriptionRef::Serialize()",93957344086144,93957344086352],["v8::internal::compiler::JSFunctionRef::Serialize()",93957344095504,93957344095645],["v8::internal::compiler::JSFunctionRef::serialized_code_and_feedback() const",93957344096144,93957344096307],["v8::internal::compiler::SharedFunctionInfoRef::function_template_info() const",93957344097104,93957344097452],["v8::internal::compiler::MapRef::SerializeOwnDescriptor(v8::internal::InternalIndex)",93957344098192,93957344098385],["v8::internal::compiler::JSTypedArrayRef::Serialize()",93957344099248,93957344099477],["v8::internal::compiler::JSBoundFunctionRef::Serialize()",93957344099744,93957344099887],["v8::internal::compiler::FunctionTemplateInfoRef::SerializeCallCode()",93957344100048,93957344100388],["v8::internal::compiler::CanInlineElementAccess(v8::internal::compiler::MapRef const&)",93957344100784,93957344100884],["v8::internal::compiler::ElementAccessFeedback::Refine(v8::internal::ZoneVector<v8::internal::Handle<v8::internal::Map> > const&, v8::internal::Zone*) const",93957344100912,93957344103752],["v8::internal::compiler::GlobalAccessFeedback::IsScriptContextSlot() const",93957344103792,93957344103816],["v8::internal::compiler::GlobalAccessFeedback::script_context() const",93957344103904,93957344103970],["v8::internal::compiler::GlobalAccessFeedback::immutable() const",93957344104016,93957344104030],["v8::internal::compiler::KeyedAccessMode::FromNexus(v8::internal::FeedbackNexus const&)",93957344104496,93957344104615],["v8::internal::compiler::KeyedAccessMode::IsStore() const",93957344104656,93957344104673],["v8::internal::compiler::KeyedAccessMode::store_mode() const",93957344104736,93957344104776],["v8::internal::compiler::JSHeapBroker::GetFeedback(v8::internal::compiler::FeedbackSource const&) const",93957344105312,93957344105360],["v8::internal::compiler::JSHeapBroker::FeedbackIsInsufficient(v8::internal::compiler::FeedbackSource const&) const",93957344105472,93957344105595],["v8::internal::compiler::JSHeapBroker::ProcessFeedbackMapsForElementAccess(std::__1::vector<v8::internal::Handle<v8::internal::Map>, std::__1::allocator<v8::internal::Handle<v8::internal::Map> > > const&, v8::internal::compiler::KeyedAccessMode const&, v8::internal::FeedbackSlotKind)",93957344109040,93957344111783],["v8::internal::compiler::PropertyCellRef::PropertyCellRef(v8::internal::compiler::JSHeapBroker*, v8::internal::Handle<v8::internal::Object>, v8::internal::compiler::ObjectRef::BackgroundSerialization, bool)",93957344113040,93957344113216],["v8::internal::compiler::JSHeapBroker::ReadFeedbackForCompareOperation(v8::internal::compiler::FeedbackSource const&) const",93957344113424,93957344113630],["v8::internal::compiler::JSHeapBroker::ReadFeedbackForInstanceOf(v8::internal::compiler::FeedbackSource const&)",93957344113840,93957344114248],["xdr_authdes_verf",139871564460752,139871564460810],["xdr_netnamestr",139871564463888,139871564463915],["xdr_cryptkeyres",139871564464080,139871564464155],["xdr_getcredres",139871564464272,139871564464347],["__sinh_finite",139871565413072,139871565413532],["tanh",139871565457504,139871565457819],["llrint",139871565464880,139871565464886],["__finite",139871565465456,139871565465488],["frexp",139871565466016,139871565466164],["ldexp",139871565466192,139871565466318],["totalorder",139871565469424,139871565469461],["totalordermag",139871565469520,139871565469549],["v8::Shell::Stringify(v8::Isolate*, v8::Local<v8::Value>)",93957335222976,93957335223433],["v8::(anonymous namespace)::NormalizePath(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)",93957335231856,93957335234361],["v8::Shell::ModuleResolutionFailureCallback(v8::FunctionCallbackInfo<v8::Value> const&)",93957335235472,93957335235737],["v8::DynamicImportData::DynamicImportData(v8::Isolate*, v8::Local<v8::String>, v8::Local<v8::String>, v8::Local<v8::FixedArray>, v8::Local<v8::Promise::Resolver>)",93957335235904,93957335236117],["v8::internal::ErrorUtils::Construct(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSFunction>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::FrameSkipMode, v8::internal::Handle<v8::internal::Object>, v8::internal::ErrorUtils::StackTraceCollection)",93957336695232,93957336695728],["v8::internal::MicrotaskQueue::SetUpDefaultMicrotaskQueue(v8::internal::Isolate*)",93957336701440,93957336701533],["v8::internal::MicrotaskQueue::EnqueueMicrotask(v8::Isolate*, void (*)(void*), void*)",93957336703152,93957336703688],["v8::internal::MicrotaskQueue::IterateMicrotasks(v8::internal::RootVisitor*)",93957336705008,93957336705471],["v8::internal::Protectors::InvalidateArrayBufferDetaching(v8::internal::Isolate*)",93957336705696,93957336705769],["v8::internal::Protectors::InvalidateArrayConstructor(v8::internal::Isolate*)",93957336706048,93957336706121],["v8::internal::Protectors::InvalidateArraySpeciesLookupChain(v8::internal::Isolate*)",93957336706208,93957336706281],["v8::internal::Protectors::InvalidateNoElements(v8::internal::Isolate*)",93957336706368,93957336706441],["v8::internal::BufferedCharacterStream<v8::internal::ExternalStringStream>::~BufferedCharacterStream()",93957339550768,93957339550796],["v8::internal::Handle<v8::internal::String> v8::internal::Scanner::SourceMappingUrl<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*) const",93957339553088,93957339553130],["v8::internal::Scanner::SeekForward(int)",93957339580944,93957339587321],["v8::internal::Scanner::ScanDecimalAsSmi(unsigned long*, bool)",93957339593744,93957339594015],["v8::internal::Scanner::ScanNumber(bool)",93957339595920,93957339598179],["v8::internal::Scanner::CombineSurrogatePair()",93957339600528,93957339600735],["v8::internal::Scanner::NextSymbol(v8::internal::AstValueFactory*) const",93957339602032,93957339602087],["v8::internal::Scanner::Select(v8::internal::Token::Value)",93957339602304,93957339602394],["void v8::internal::Scanner::Advance<true>()",93957339602672,93957339602837],["unsigned int v8::internal::Scanner::ScanUnlimitedLengthHexNumber<false>(unsigned int, int)",93957339603440,93957339603709],["v8::internal::AllocationTraceNode::FindOrAddChild(unsigned int)",93957339603840,93957339604207],["v8::internal::AddressToTraceMap::GetTraceNodeId(unsigned long)",93957339604752,93957339604823],["v8::internal::AllocationTracker::AllocationTracker(v8::internal::HeapObjectsMap*, v8::internal::StringsStorage*)",93957339605168,93957339605530],["v8::internal::AllocationTracker::PrepareForSerialization()",93957339605776,93957339606104],["v8::internal::AllocationTracker::AddFunctionInfo(v8::internal::SharedFunctionInfo, unsigned int)",93957339606960,93957339607989],["v8::internal::ProfilerEventsProcessor::ProfilerEventsProcessor(v8::internal::Isolate*, v8::internal::Symbolizer*, v8::internal::ProfilerCodeObserver*)",93957339608032,93957339608416],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<v8_inspector::String16, void*>*>, bool> std::__1::__hash_table<v8_inspector::String16, std::__1::hash<v8_inspector::String16>, std::__1::equal_to<v8_inspector::String16>, std::__1::allocator<v8_inspector::String16> >::__emplace_unique_key_args<v8_inspector::String16, v8_inspector::String16 const&>(v8_inspector::String16 const&, v8_inspector::String16 const&)",93957342368160,93957342370141],["v8_inspector::InspectedContext::setReported(int, bool)",93957342376192,93957342376667],["v8_inspector::InspectedContext::getInternalType(v8::Local<v8::Object>)",93957342378784,93957342378923],["v8_inspector::RemoteObjectId::parse(v8_inspector::String16 const&, std::__1::unique_ptr<v8_inspector::RemoteObjectId, std::__1::default_delete<v8_inspector::RemoteObjectId> >*)",93957342380208,93957342380408],["v8_inspector::RemoteCallFrameId::parse(v8_inspector::String16 const&, std::__1::unique_ptr<v8_inspector::RemoteCallFrameId, std::__1::default_delete<v8_inspector::RemoteCallFrameId> >*)",93957342380624,93957342380804],["void v8_inspector::String16Builder::appendAll<v8_inspector::String16, char const*, v8_inspector::String16, char const*, v8_inspector::String16>(v8_inspector::String16, char const*, v8_inspector::String16, char const*, v8_inspector::String16)",93957342382848,93957342384227],["void v8_inspector::String16Builder::appendAll<v8_inspector::String16, char const*, v8_inspector::String16>(v8_inspector::String16, char const*, v8_inspector::String16)",93957342385680,93957342386342],["v8_inspector::searchInTextByLinesImpl(v8_inspector::V8InspectorSession*, v8_inspector::String16 const&, v8_inspector::String16 const&, bool, bool)",93957342387056,93957342390665],["v8::internal::compiler::BytecodeArrayRef::SourcePositionTable() const",93957344035024,93957344035104],["v8::internal::compiler::JSFunctionRef::JSFunctionRef(v8::internal::compiler::JSHeapBroker*, v8::internal::Handle<v8::internal::Object>, v8::internal::compiler::ObjectRef::BackgroundSerialization, bool)",93957344046544,93957344046720],["v8::internal::compiler::NativeContextRef::catch_context_map() const",93957344054368,93957344054683],["v8::internal::compiler::NativeContextRef::set_value_iterator_map() const",93957344059488,93957344059803],["v8::internal::compiler::MapRef::serialized_prototype() const",93957344065472,93957344065631],["v8::internal::compiler::SharedFunctionInfoRef::GetBytecodeArray() const",93957344067168,93957344067631],["v8::internal::compiler::SharedFunctionInfoRef::HasBuiltinId() const",93957344068976,93957344069162],["v8::internal::SharedFunctionInfo::Inlineability v8::internal::SharedFunctionInfo::GetInlineability<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*) const",93957344070960,93957344071352],["v8::internal::compiler::JSTypedArrayRef::is_on_heap() const",93957344074816,93957344075003],["v8::internal::compiler::MapRef::IsInobjectSlackTrackingInProgress() const",93957344075872,93957344076057],["v8::internal::compiler::MapRef::GetInObjectProperties() const",93957344076848,93957344077065],["v8::internal::compiler::FunctionTemplateInfoRef::c_function() const",93957344077632,93957344077851],["v8::internal::compiler::FeedbackVectorRef::shared_function_info() const",93957344078640,93957344078967],["v8::internal::compiler::ObjectRef::IsNullOrUndefined() const",93957344079696,93957344079869],["v8::internal::compiler::JSObjectRef::GetElementsKind() const",93957344081680,93957344081716],["v8::internal::compiler::JSArrayRef::length_unsafe() const",93957344082544,93957344082926],["v8::internal::compiler::SourceTextModuleRef::import_meta() const",93957344084176,93957344084545],["v8::internal::compiler::HeapObjectRef::GetHeapObjectType() const",93957344084704,93957344085037],["v8::internal::compiler::FixedArrayBaseRef::length() const",93957344085376,93957344085548],["v8::internal::compiler::FeedbackCellRef::shared_function_info() const",93957344085728,93957344085837],["v8::internal::compiler::FeedbackVectorRef::Serialize()",93957344086000,93957344086136],["v8::internal::compiler::NoChangeBecauseOfMissingData(v8::internal::compiler::JSHeapBroker*, char const*, int)",93957344086352,93957344086950],["v8::internal::compiler::NativeContextData::SerializeOnBackground(v8::internal::compiler::JSHeapBroker*)",93957344092944,93957344095492],["v8::internal::compiler::JSFunctionRef::SerializeCodeAndFeedback()",93957344095648,93957344095789],["v8::internal::compiler::JSFunctionRef::serialized() const",93957344095968,93957344096131],["v8::internal::compiler::JSFunctionRef::code() const",93957344096320,93957344096741],["v8::internal::compiler::SharedFunctionInfoRef::SerializeScopeInfoChain()",93957344096960,93957344097096],["v8::internal::compiler::SharedFunctionInfoRef::context_header_size() const",93957344097456,93957344097687],["v8::internal::compiler::JSObjectRef::SerializeObjectCreateMap()",93957344098048,93957344098189],["v8::internal::compiler::MapRef::serialized_own_descriptor(v8::internal::InternalIndex) const",93957344098400,93957344098792],["v8::internal::compiler::SourceTextModuleRef::Serialize()",93957344099104,93957344099245],["v8::internal::compiler::JSTypedArrayRef::serialized() const",93957344099488,93957344099660],["xdrrec_endofrecord",139871564459904,139871564459993],["ecb_crypt",139871564461152,139871564461292],["xdr_keybuf",139871564463856,139871564463883],["xdr_cryptkeyarg",139871564463920,139871564463973],["__j1_finite",139871565401392,139871565402210],["cbrt",139871565424896,139871565425263],["nextafter",139871565430464,139871565430793],["remquo",139871565457936,139871565458449],["sincos",139871565459440,139871565462080],["llround",139871565464896,139871565465062],["__issignaling",139871565465312,139871565465347],["copysign",139871565465488,139871565465509],["v8::MaybeLocal<v8::Script> v8::Shell::CompileString<v8::Script>(v8::Isolate*, v8::Local<v8::Context>, v8::Local<v8::String>, v8::ScriptOrigin const&)",93957335221312,93957335221842],["v8::Shell::ReadFile(v8::Isolate*, char const*)",93957335229120,93957335229592],["v8::Shell::JSONModuleEvaluationSteps(v8::Local<v8::Context>, v8::Local<v8::Module>)",93957335230784,93957335231850],["v8::(anonymous namespace)::ModuleEmbedderData::ModuleTypeFromImportAssertions(v8::Local<v8::Context>, v8::Local<v8::FixedArray>, bool)",93957335234368,93957335235200],["v8::internal::MessageFormatter::Format(v8::internal::Isolate*, v8::internal::MessageTemplate, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957336688992,93957336689207],["v8::internal::(anonymous namespace)::RenderCallSite(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::MessageLocation*, v8::internal::CallPrinter::ErrorHint*)",93957336696560,93957336697198],["v8::internal::ErrorUtils::ThrowLoadFromNullOrUndefined(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::MaybeHandle<v8::internal::Object>)",93957336700080,93957336701281],["v8::internal::MicrotaskQueue::~MicrotaskQueue()",93957336701632,93957336701726],["v8::internal::MicrotaskQueue::EnqueueMicrotask(v8::Isolate*, v8::Local<v8::Function>)",93957336702528,93957336703143],["v8::internal::MicrotaskQueue::PerformCheckpoint(v8::Isolate*)",93957336703696,93957336703749],["v8::internal::MicrotaskQueue::RunMicrotasks(v8::internal::Isolate*)",93957336703776,93957336705007],["v8::internal::MicrotaskQueue::AddMicrotasksCompletedCallback(void (*)(v8::Isolate*, void*), void*)",93957336705472,93957336705581],["v8::internal::Utf8ExternalStreamingStream::SearchPosition(unsigned long)",93957339546736,93957339547213],["v8::internal::UnbufferedCharacterStream<v8::internal::ExternalStringStream>::ReadBlock()",93957339551472,93957339551535],["v8::internal::BufferedCharacterStream<v8::internal::ChunkedStream>::ReadBlock()",93957339552768,93957339552942],["v8::internal::Scanner::Initialize()",93957339559904,93957339566035],["v8::internal::Scanner::ScanHtmlComment()",93957339580336,93957339580879],["bool v8::internal::Scanner::ScanEscape<false>()",93957339588048,93957339589228],["v8::internal::Scanner::ScanDecimalDigits(bool)",93957339592592,93957339593257],["v8::internal::Scanner::ScanOctalDigits()",93957339594448,93957339594872],["v8::internal::Scanner::ScanSignedInteger()",93957339595712,93957339595914],["v8::internal::Scanner::ScanIdentifierUnicodeEscape()",93957339598192,93957339598372],["v8::internal::Scanner::ScanIdentifierOrKeywordInnerSlow(bool, bool)",93957339599280,93957339600515],["v8::internal::Scanner::ScanRegExpPattern()",93957339600736,93957339601544],["v8::internal::Scanner::CurrentSymbol(v8::internal::AstValueFactory*) const",93957339601968,93957339602023],["v8::internal::Scanner::CurrentRawSymbol(v8::internal::AstValueFactory*) const",93957339602096,93957339602151],["v8::internal::Scanner::CurrentLiteralAsCString(v8::internal::Zone*) const",93957339602192,93957339602294],["v8::internal::Scanner::Select(unsigned int, v8::internal::Token::Value, v8::internal::Token::Value)",93957339602400,93957339602591],["v8_inspector::InjectedScript::ProtocolPromiseHandler::ProtocolPromiseHandler(v8_inspector::V8InspectorSessionImpl*, int, v8_inspector::String16 const&, v8_inspector::WrapMode, bool, v8_inspector::EvaluateCallback*, v8::MaybeLocal<v8::Promise>)",93957342361728,93957342362560],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8_inspector::String16, std::__1::vector<int, std::__1::allocator<int> > >, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8_inspector::String16, std::__1::vector<int, std::__1::allocator<int> > >, std::__1::__unordered_map_hasher<v8_inspector::String16, std::__1::__hash_value_type<v8_inspector::String16, std::__1::vector<int, std::__1::allocator<int> > >, std::__1::hash<v8_inspector::String16>, std::__1::equal_to<v8_inspector::String16>, true>, std::__1::__unordered_map_equal<v8_inspector::String16, std::__1::__hash_value_type<v8_inspector::String16, std::__1::vector<int, std::__1::allocator<int> > >, std::__1::equal_to<v8_inspector::String16>, std::__1::hash<v8_inspector::String16>, true>, std::__1::allocator<std::__1::__hash_value_type<v8_inspector::String16, std::__1::vector<int, std::__1::allocator<int> > > > >::__emplace_unique_key_args<v8_inspector::String16, std::__1::piecewise_construct_t const&, std::__1::tuple<v8_inspector::String16 const&>, std::__1::tuple<> >(v8_inspector::String16 const&, std::__1::piecewise_construct_t const&, std::__1::tuple<v8_inspector::String16 const&>&&, std::__1::tuple<>&&)",93957342372784,93957342374773],["v8_inspector::InspectedContext::isolate() const",93957342375776,93957342375789],["v8_inspector::InspectedContext::createInjectedScript(int)",93957342377088,93957342377984],["v8_inspector::InspectedContext::addInternalObject(v8::Local<v8::Object>, v8_inspector::V8InternalValueType)",93957342378560,93957342378784],["v8_inspector::InspectedContext::WeakCallbackData::callContextCollected(v8::WeakCallbackInfo<v8_inspector::InspectedContext::WeakCallbackData> const&)",93957342378928,93957342378979],["v8_inspector::String16::substring(unsigned long, unsigned long) const",93957342379488,93957342380207],["v8_inspector::RemoteObjectId::serialize(unsigned long, int, int)",93957342380416,93957342380440],["v8::internal::compiler::MapRef::is_stable() const",93957344023888,93957344024061],["v8::internal::compiler::FixedArrayRef::FixedArrayRef(v8::internal::compiler::JSHeapBroker*, v8::internal::Handle<v8::internal::Object>, v8::internal::compiler::ObjectRef::BackgroundSerialization, bool)",93957344038320,93957344038496],["v8::internal::compiler::MapRef::instance_size() const",93957344044448,93957344044624],["v8::internal::compiler::NativeContextRef::string_function() const",93957344048960,93957344049275],["v8::internal::compiler::NativeContextRef::js_array_packed_smi_elements_map() const",93957344052992,93957344053307],["v8::internal::compiler::NativeContextRef::initial_array_iterator_map() const",93957344055648,93957344055963],["v8::internal::compiler::NativeContextRef::map_key_iterator_map() const",93957344058208,93957344058523],["v8::internal::compiler::RegExpBoilerplateDescriptionRef::data() const",93957344060544,93957344060871],["v8::internal::compiler::FunctionTemplateInfoRef::accept_any_receiver() const",93957344062240,93957344062414],["v8::internal::compiler::ScopeInfoRef::ContextLength() const",93957344065968,93957344066143],["v8::internal::compiler::ScopeInfoRef::ScopeInfoRef(v8::internal::compiler::JSHeapBroker*, v8::internal::Handle<v8::internal::Object>, v8::internal::compiler::ObjectRef::BackgroundSerialization, bool)",93957344066816,93957344066992],["v8::internal::compiler::SharedFunctionInfoRef::has_duplicate_parameters() const",93957344067824,93957344068011],["v8::internal::compiler::SharedFunctionInfoRef::native() const",93957344068592,93957344068779],["v8::internal::compiler::SharedFunctionInfoRef::StartPosition() const",93957344069360,93957344069547],["v8::internal::compiler::SharedFunctionInfoRef::wasm_function_signature() const",93957344070384,93957344070724],["v8::internal::compiler::MapRef::GetStrongValue(v8::internal::InternalIndex) const",93957344072336,93957344072437],["v8::internal::compiler::MapRef::FindRootMap() const",93957344073664,93957344074815],["v8::internal::compiler::JSTypedArrayRef::length() const",93957344075008,93957344075229],["v8::internal::compiler::JSTypedArrayRef::data_ptr() const",93957344075632,93957344075858],["v8::internal::compiler::MapRef::constructor_function_index() const",93957344076064,93957344076310],["v8::internal::compiler::MapRef::CanTransition() const",93957344076656,93957344076842],["v8::internal::compiler::ScopeInfoRef::SerializeScopeInfoChain()",93957344077072,93957344077208],["v8::internal::compiler::CallHandlerInfoRef::callback() const",93957344077424,93957344077625],["v8::internal::compiler::FunctionTemplateInfoRef::c_signature() const",93957344077856,93957344078075],["v8::internal::compiler::NativeContextRef::scope_info() const",93957344078304,93957344078640],["v8::internal::compiler::NativeContextRef::GetFunctionMapFromIndex(int) const",93957344078976,93957344079398],["v8::internal::compiler::NativeContextRef::GetConstructorFunction(v8::internal::compiler::MapRef const&) const",93957344079488,93957344079691],["v8::internal::compiler::ObjectRef::BooleanValue() const",93957344079872,93957344080031],["v8::internal::compiler::JSObjectRef::GetOwnConstantElement(unsigned int, v8::internal::compiler::SerializationPolicy) const",93957344080272,93957344081668],["v8::internal::compiler::JSObjectRef::GetOwnFastDataProperty(v8::internal::Representation, v8::internal::FieldIndex, v8::internal::compiler::SerializationPolicy) const",93957344081728,93957344082128],["v8::internal::compiler::JSArrayRef::GetBoilerplateLength() const",93957344082528,93957344082538],["v8::internal::compiler::JSArrayRef::GetOwnCowElement(v8::internal::compiler::FixedArrayBaseRef, unsigned int, v8::internal::compiler::SerializationPolicy) const",93957344082928,93957344083697],["xdr_double",139871564457040,139871564457261],["getsecretkey",139871564460304,139871564460614],["cbc_crypt",139871564460816,139871564461146],["des_setparity",139871564463776,139871564463815],["__exp2l_finite",139871565368640,139871565368731],["__lgamma_r_finite",139871565405760,139871565408433],["__gamma_r_finite",139871565414608,139871565415831],["erfc",139871565426768,139871565428317],["logb",139871565430336,139871565430453],["nexttoward",139871565430800,139871565431202],["__fpclassify",139871565457824,139871565457901],["log2",139871565458464,139871565459234],["v8::ShellOptions::~ShellOptions()",93957335218192,93957335218357],["v8::(anonymous namespace)::Throw(v8::Isolate*, char const*)",93957335222848,93957335222908],["v8::Shell::FetchModuleTree(v8::Local<v8::Module>, v8::Local<v8::Context>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, v8::ModuleType)",93957335223440,93957335229115],["std::__1::unordered_map<v8::Global<v8::Module>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::(anonymous namespace)::ModuleEmbedderData::ModuleGlobalHash, std::__1::equal_to<v8::Global<v8::Module> >, std::__1::allocator<std::__1::pair<v8::Global<v8::Module> const, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > >::find(v8::Global<v8::Module> const&)",93957335229600,93957335230237],["v8::internal::MessageLocation::MessageLocation(v8::internal::Handle<v8::internal::Script>, v8::internal::Handle<v8::internal::SharedFunctionInfo>, int)",93957336686240,93957336686264],["v8::internal::ErrorUtils::ToString(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)",93957336694208,93957336694700],["v8::internal::ErrorUtils::MakeGenericError(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSFunction>, v8::internal::MessageTemplate, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::FrameSkipMode)",93957336696032,93957336696397],["v8::internal::(anonymous namespace)::ComputeLocation(v8::internal::Isolate*, v8::internal::MessageLocation*)",93957336697888,93957336698579],["v8::internal::ErrorUtils::NewConstructedNonConstructable(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)",93957336699984,93957336700074],["v8::internal::Handle<v8::internal::Object>* v8::internal::NewArray<v8::internal::Handle<v8::internal::Object> >(unsigned long)",93957336701296,93957336701438],["v8::internal::MicrotaskQueue::~MicrotaskQueue()",93957336701536,93957336701629],["v8::internal::MicrotaskQueue::CallEnqueueMicrotask(v8::internal::Isolate*, long, unsigned long)",93957336701728,93957336702118],["v8::internal::ParserBase<v8::internal::PreParser>::ParseAsyncFunctionBody(v8::internal::Scope*, v8::internal::PreParserScopedStatementList*)",93957339539424,93957339539787],["v8::internal::Windows1252CharacterStream::~Windows1252CharacterStream()",93957339549008,93957339549142],["v8::internal::ExternalStringStream<unsigned short>::ExternalStringStream(v8::internal::ExternalTwoByteString, unsigned long, unsigned long)",93957339551104,93957339551285],["v8::internal::RelocatingCharacterStream::~RelocatingCharacterStream()",93957339551840,93957339551897],["v8::internal::BufferedCharacterStream<v8::internal::ChunkedStream>::~BufferedCharacterStream()",93957339552480,93957339552623],["v8::internal::Handle<v8::internal::String> v8::internal::Scanner::SourceUrl<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*) const",93957339552992,93957339553034],["v8::internal::Scanner::SeekNext(unsigned long)",93957339553248,93957339559609],["v8::internal::Scanner::PeekAhead()",93957339572288,93957339578345],["v8::internal::Scanner::SkipMultiLineComment()",93957339579712,93957339580327],["v8::internal::Scanner::Peek() const",93957339580880,93957339580944],["v8::internal::Scanner::ScanString()",93957339587328,93957339588035],["v8::internal::Scanner::ScanPrivateName()",93957339589232,93957339590354],["bool v8::internal::Scanner::ScanEscape<true>()",93957339591904,93957339592590],["v8::internal::Scanner::ScanDecimalAsSmiWithNumericSeparators(unsigned long*)",93957339593264,93957339593735],["v8::internal::Scanner::ScanBinaryDigits()",93957339594016,93957339594440],["v8::internal::Scanner::ScanImplicitOctalDigits(int, v8::internal::Scanner::NumberKind*)",93957339594880,93957339595194],["v8_inspector::InjectedScript::CallFrameScope::CallFrameScope(v8_inspector::V8InspectorSessionImpl*, v8_inspector::String16 const&)",93957342358464,93957342359193],["v8_inspector::InjectedScript::ProtocolPromiseHandler::sendPromiseCollected()",93957342363056,93957342363581],["v8_crdtp::DeserializableProtocolObject<v8_inspector::protocol::Runtime::PropertyPreview>::ReadFrom(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >)",93957342371504,93957342371850],["v8_inspector::InspectedContext::WeakCallbackData::resetContext(v8::WeakCallbackInfo<v8_inspector::InspectedContext::WeakCallbackData> const&)",93957342375280,93957342375356],["v8_inspector::InspectedContext::context() const",93957342375728,93957342375761],["v8_inspector::InspectedContext::isReported(int) const",93957342375792,93957342376184],["v8_inspector::InspectedContext::getInjectedScript(int)",93957342376672,93957342377085],["v8_inspector::InspectedContext::discardInjectedScript(int)",93957342377984,93957342378017],["v8::internal::compiler::ObjectRef::IsCell() const",93957344018320,93957344018427],["v8::internal::compiler::MapRef::instance_descriptors() const",93957344029024,93957344029429],["v8::internal::compiler::BigIntRef::AsUint64() const",93957344036272,93957344036455],["v8::internal::compiler::JSFunctionRef::initial_map() const",93957344040336,93957344040648],["v8::internal::compiler::MapRef::is_callable() const",93957344043680,93957344043861],["v8::internal::compiler::MapRef::GetConstructor() const",93957344045184,93957344045616],["v8::internal::compiler::NativeContextRef::object_function() const",93957344047680,93957344047992],["v8::internal::compiler::NativeContextRef::promise_prototype() const",93957344050432,93957344050747],["v8::internal::compiler::NativeContextRef::js_array_packed_double_elements_map() const",93957344052352,93957344052667],["v8::internal::compiler::NativeContextRef::regexp_exec_function() const",93957344053728,93957344054043],["v8::internal::compiler::NativeContextRef::fast_aliased_arguments_map() const",93957344055008,93957344055323],["v8::internal::compiler::NativeContextRef::iterator_result_map() const",93957344056288,93957344056603],["v8::internal::compiler::NativeContextRef::with_context_map() const",93957344057568,93957344057883],["v8::internal::compiler::NativeContextRef::map_value_iterator_map() const",93957344058848,93957344059163],["v8::internal::compiler::PropertyCellRef::value() const",93957344060000,93957344060334],["v8::internal::compiler::RegExpBoilerplateDescriptionRef::flags() const",93957344061216,93957344061410],["v8::internal::compiler::FunctionTemplateInfoRef::has_call_code() const",93957344062048,93957344062231],["v8::internal::compiler::FunctionTemplateInfoRef::LookupHolderOfExpectedType(v8::internal::compiler::MapRef, v8::internal::compiler::SerializationPolicy)",93957344062416,93957344065457],["v8::internal::compiler::CallHandlerInfoRef::data() const",93957344065632,93957344065961],["v8::internal::compiler::ScopeInfoRef::HasContextExtensionSlot() const",93957344066144,93957344066323],["v8::internal::compiler::ScopeInfoRef::OuterScopeInfo() const",93957344066528,93957344066804],["v8::internal::compiler::SharedFunctionInfoRef::builtin_id() const",93957344066992,93957344067159],["v8::internal::compiler::SharedFunctionInfoRef::internal_formal_parameter_count() const",93957344067632,93957344067810],["v8::internal::compiler::SharedFunctionInfoRef::function_map_index() const",93957344068016,93957344068204],["v8::internal::compiler::SharedFunctionInfoRef::language_mode() const",93957344068400,93957344068587],["v8::internal::compiler::SharedFunctionInfoRef::HasBreakInfo() const",93957344068784,93957344068975],["v8::internal::compiler::SharedFunctionInfoRef::construct_as_builtin() const",93957344069168,93957344069355],["v8::internal::compiler::SharedFunctionInfoRef::is_compiled() const",93957344069552,93957344069802],["v8::internal::compiler::SharedFunctionInfoRef::wasm_module() const",93957344070080,93957344070380],["v8::internal::compiler::SharedFunctionInfoRef::GetInlineability() const",93957344070736,93957344070958],["v8::internal::compiler::FeedbackCellRef::value() const",93957344071360,93957344072331],["v8::internal::compiler::DescriptorArrayRef::GetStrongValue(v8::internal::InternalIndex) const",93957344072448,93957344073384],["_authenticate",139871564454720,139871564454786],["xdrrec_skiprecord",139871564459280,139871564459594],["getpublickey",139871564460000,139871564460294],["xdr_authdes_cred",139871564460624,139871564460752],["canonicalizef64x",139871565367760,139871565367848],["__fmod_finite",139871565395824,139871565396336],["__jn_finite",139871565403088,139871565404742],["__remainder_finite",139871565411456,139871565412785],["__sqrt_finite",139871565413536,139871565413541],["asinh",139871565416016,139871565416411],["erf",139871565425296,139871565426758],["expm1",139871565428320,139871565429386],["std::__1::unordered_set<std::__1::shared_ptr<v8::Worker>, std::__1::hash<std::__1::shared_ptr<v8::Worker> >, std::__1::equal_to<std::__1::shared_ptr<v8::Worker> >, std::__1::allocator<std::__1::shared_ptr<v8::Worker> > >::~unordered_set()",93957335216976,93957335217111],["v8::Shell::StoreInCodeCache(v8::Isolate*, v8::Local<v8::Value>, v8::ScriptCompiler::CachedData const*)",93957335218928,93957335219479],["v8::Shell::ReadLines(char const*, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >&)",93957335221856,93957335222846],["v8::Shell::ReportException(v8::Isolate*, v8::TryCatch*)",93957335222912,93957335222971],["std::__1::__hash_table<std::__1::__hash_value_type<unsigned long, v8::Persistent<v8::Context, v8::CopyablePersistentTraits<v8::Context> > >, std::__1::__unordered_map_hasher<unsigned long, std::__1::__hash_value_type<unsigned long, v8::Persistent<v8::Context, v8::CopyablePersistentTraits<v8::Context> > >, std::__1::hash<unsigned long>, std::__1::equal_to<unsigned long>, true>, std::__1::__unordered_map_equal<unsigned long, std::__1::__hash_value_type<unsigned long, v8::Persistent<v8::Context, v8::CopyablePersistentTraits<v8::Context> > >, std::__1::equal_to<unsigned long>, std::__1::hash<unsigned long>, true>, std::__1::allocator<std::__1::__hash_value_type<unsigned long, v8::Persistent<v8::Context, v8::CopyablePersistentTraits<v8::Context> > > > >::__node_insert_unique_prepare(unsigned long, std::__1::__hash_value_type<unsigned long, v8::Persistent<v8::Context, v8::CopyablePersistentTraits<v8::Context> > >&)",93957336684848,93957336685388],["v8::internal::MessageHandler::MakeMessageObject(v8::internal::Isolate*, v8::internal::MessageTemplate, v8::internal::MessageLocation const*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::FixedArray>)",93957336687088,93957336687215],["v8::internal::(anonymous namespace)::GetStackFrames(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FixedArray>)",93957336693360,93957336693932],["v8::internal::MessageFormatter::TemplateString(v8::internal::MessageTemplate)",93957336695104,93957336695135],["v8::internal::(anonymous namespace)::GetStringPropertyOrDefault(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String>)",93957336695728,93957336696026],["v8::internal::ErrorUtils::NewIteratorError(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)",93957336696400,93957336696548],["v8::internal::ErrorUtils::ThrowSpreadArgError(v8::internal::Isolate*, v8::internal::MessageTemplate, v8::internal::Handle<v8::internal::Object>)",93957336697200,93957336697880],["v8::internal::(anonymous namespace)::BuildDefaultCallSite(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)",93957336698592,93957336699860],["v8::internal::ParserBase<v8::internal::PreParser>::ParseBreakStatement(v8::internal::ZoneList<v8::internal::AstRawString const*>*)",93957339528080,93957339528812],["v8::internal::Rewriter::Rewrite(v8::internal::ParseInfo*)",93957339542864,93957339543042],["v8::internal::ScannerStream::For(v8::ScriptCompiler::ExternalSourceStream*, v8::ScriptCompiler::StreamedSource::Encoding)",93957339548256,93957339548597],["void std::__1::vector<v8::internal::ChunkedStream<unsigned char>::Chunk, std::__1::allocator<v8::internal::ChunkedStream<unsigned char>::Chunk> >::__emplace_back_slow_path<unsigned char const*, unsigned long&, unsigned long>(unsigned char const*&&, unsigned long&, unsigned long&&)",93957339549600,93957339549906],["v8::internal::BufferedCharacterStream<v8::internal::ExternalStringStream>::Clone() const",93957339550848,93957339550952],["v8::internal::UnbufferedCharacterStream<v8::internal::ExternalStringStream>::~UnbufferedCharacterStream()",93957339551328,93957339551371],["v8::internal::RelocatingCharacterStream::UpdateBufferPointersCallback(v8::Isolate*, v8::GCType, v8::GCCallbackFlags, void*)",93957339551696,93957339551781],["v8::internal::UnbufferedCharacterStream<v8::internal::ChunkedStream>::~UnbufferedCharacterStream()",93957339552000,93957339552124],["v8::internal::ChunkedStream<unsigned short>::ProcessChunk(unsigned char const*, unsigned long, unsigned long)",93957339552384,93957339552469],["v8::internal::BufferedCharacterStream<v8::internal::ChunkedStream>::~BufferedCharacterStream()",93957339552624,93957339552758],["v8::internal::Handle<v8::internal::String> v8::internal::Scanner::SourceUrl<v8::internal::Isolate>(v8::internal::Isolate*) const",93957339552944,93957339552986],["v8::internal::Handle<v8::internal::String> v8::internal::Scanner::SourceMappingUrl<v8::internal::Isolate>(v8::internal::Isolate*) const",93957339553040,93957339553082],["v8::internal::Scanner::BookmarkScope::Apply()",93957339553136,93957339553234],["v8::internal::Scanner::Scanner(v8::internal::Utf16CharacterStream*, v8::internal::UnoptimizedCompileFlags)",93957339559616,93957339559897],["v8::internal::Scanner::Next()",93957339566048,93957339572284],["v8::internal::Scanner::TryToParseSourceURLComment()",93957339578352,93957339579610],["v8_inspector::InjectedScript::ContextScope::~ContextScope()",93957342356560,93957342356820],["v8_inspector::InjectedScript::bindObject(v8::Local<v8::Value>, v8_inspector::String16 const&)",93957342359504,93957342360115],["v8_inspector::InjectedScript::ProtocolPromiseHandler::catchCallback(v8::FunctionCallbackInfo<v8::Value> const&)",93957342362720,93957342362870],["v8_inspector::InjectedScript::ProtocolPromiseHandler::catchCallback(v8::Local<v8::Value>)",93957342364768,93957342366822],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8_inspector::String16, v8_inspector::protocol::Runtime::PropertyPreview*>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8_inspector::String16, v8_inspector::protocol::Runtime::PropertyPreview*>, std::__1::__unordered_map_hasher<v8_inspector::String16, std::__1::__hash_value_type<v8_inspector::String16, v8_inspector::protocol::Runtime::PropertyPreview*>, std::__1::hash<v8_inspector::String16>, std::__1::equal_to<v8_inspector::String16>, true>, std::__1::__unordered_map_equal<v8_inspector::String16, std::__1::__hash_value_type<v8_inspector::String16, v8_inspector::protocol::Runtime::PropertyPreview*>, std::__1::equal_to<v8_inspector::String16>, std::__1::hash<v8_inspector::String16>, true>, std::__1::allocator<std::__1::__hash_value_type<v8_inspector::String16, v8_inspector::protocol::Runtime::PropertyPreview*> > >::__emplace_unique_key_args<v8_inspector::String16, std::__1::piecewise_construct_t const&, std::__1::tuple<v8_inspector::String16&&>, std::__1::tuple<> >(v8_inspector::String16 const&, std::__1::piecewise_construct_t const&, std::__1::tuple<v8_inspector::String16&&>&&, std::__1::tuple<>&&)",93957342370144,93957342371497],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<int, v8_inspector::String16>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<int, v8_inspector::String16>, std::__1::__unordered_map_hasher<int, std::__1::__hash_value_type<int, v8_inspector::String16>, std::__1::hash<int>, std::__1::equal_to<int>, true>, std::__1::__unordered_map_equal<int, std::__1::__hash_value_type<int, v8_inspector::String16>, std::__1::equal_to<int>, std::__1::hash<int>, true>, std::__1::allocator<std::__1::__hash_value_type<int, v8_inspector::String16> > >::__emplace_unique_key_args<int, std::__1::piecewise_construct_t const&, std::__1::tuple<int const&>, std::__1::tuple<> >(int const&, std::__1::piecewise_construct_t const&, std::__1::tuple<int const&>&&, std::__1::tuple<>&&)",93957342371856,93957342372776],["v8_inspector::InspectedContext::InspectedContext(v8_inspector::V8InspectorImpl*, v8_inspector::V8ContextInfo const&, int)",93957342374784,93957342375271],["v8_inspector::InspectedContext::~InspectedContext()",93957342375360,93957342375698],["v8::internal::compiler::ObjectRef::AsContext() const",93957344013632,93957344013824],["v8::internal::compiler::JSObjectRef::GetObjectCreateMap() const",93957344020336,93957344020712],["v8::internal::compiler::JSObjectRef::SerializeElements()",93957344026448,93957344026589],["v8::internal::compiler::DescriptorArrayRef::GetFieldType(v8::internal::InternalIndex) const",93957344030944,93957344031376],["v8::internal::compiler::AllocationSiteRef::CanInlineCall() const",93957344035536,93957344035714],["v8::internal::compiler::HeapNumberRef::value() const",93957344037008,93957344037179],["v8::internal::compiler::JSFunctionRef::has_prototype() const",93957344039200,93957344039431],["v8::internal::compiler::JSFunctionRef::raw_feedback_cell() const",93957344041616,93957344042027],["v8::internal::compiler::MapRef::has_prototype_slot() const",93957344043296,93957344043476],["v8::internal::compiler::MapRef::is_constructor() const",93957344044064,93957344044246],["v8::internal::compiler::MapRef::UnusedPropertyFields() const",93957344044816,93957344045003],["v8::internal::compiler::MapRef::is_abandoned_prototype_map() const",93957344046016,93957344046218],["v8::internal::compiler::NativeContextRef::bigint_function() const",93957344047040,93957344047349],["v8::internal::compiler::NativeContextRef::promise_then() const",93957344048320,93957344048629],["v8::internal::compiler::NativeContextRef::global_object() const",93957344049600,93957344050008],["v8::internal::compiler::NativeContextRef::bound_function_without_constructor_map() const",93957344051072,93957344051387],["v8::internal::compiler::NativeContextRef::js_array_holey_smi_elements_map() const",93957344052032,93957344052347],["v8::internal::compiler::NativeContextRef::js_array_packed_elements_map() const",93957344052672,93957344052987],["v8::internal::compiler::NativeContextRef::script_context_table() const",93957344053312,93957344053726],["v8::internal::compiler::NativeContextRef::block_context_map() const",93957344054048,93957344054363],["v8::internal::compiler::NativeContextRef::eval_context_map() const",93957344054688,93957344055003],["v8::internal::compiler::NativeContextRef::function_context_map() const",93957344055328,93957344055643],["v8::internal::compiler::NativeContextRef::initial_string_iterator_map() const",93957344055968,93957344056283],["v8::internal::compiler::NativeContextRef::sloppy_arguments_map() const",93957344056608,93957344056923],["v8::internal::compiler::NativeContextRef::strict_arguments_map() const",93957344057248,93957344057563],["v8::internal::compiler::NativeContextRef::async_function_object_map() const",93957344057888,93957344058200],["v8::internal::compiler::NativeContextRef::map_key_value_iterator_map() const",93957344058528,93957344058843],["v8::internal::compiler::NativeContextRef::set_key_value_iterator_map() const",93957344059168,93957344059483],["v8::internal::compiler::ObjectBoilerplateDescriptionRef::size() const",93957344059808,93957344059990],["v8::internal::compiler::PropertyCellRef::property_details() const",93957344060336,93957344060540],["v8::internal::compiler::RegExpBoilerplateDescriptionRef::source() const",93957344060880,93957344061207],["v8::internal::compiler::FunctionTemplateInfoRef::call_code() const",93957344061424,93957344061842],["xdr_replymsg",139871564453264,139871564453350],["registerrpc",139871564456416,139871564456902],["xdrrec_create",139871564458912,139871564459272],["xdrrec_eof",139871564459600,139871564459893],["cpowf64x",139871565366080,139871565366223],["log1pf64x",139871565368064,139871565368137],["__atanh_finite",139871565394512,139871565394822],["__j0_finite",139871565398496,139871565399256],["__y1_finite",139871565402224,139871565403074],["__yn_finite",139871565404752,139871565405752],["__log10_finite",139871565409264,139871565409537],["__scalb_finite",139871565412928,139871565413069],["v8::DelayedTasksPlatform::DelayedJob::Run(v8::JobDelegate*)",93957335216816,93957335216858],["std::__1::map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<v8::ScriptCompiler::CachedData, std::__1::default_delete<v8::ScriptCompiler::CachedData> >, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::unique_ptr<v8::ScriptCompiler::CachedData, std::__1::default_delete<v8::ScriptCompiler::CachedData> > > > >::~map()",93957335217136,93957335217150],["v8::Shell::LookupCodeCache(v8::Isolate*, v8::Local<v8::Value>)",93957335218368,93957335218914],["v8::Shell::ExecuteString(v8::Isolate*, v8::Local<v8::String>, v8::Local<v8::Value>, v8::Shell::PrintResult, v8::Shell::ReportExceptions, v8::Shell::ProcessMessageQueue)",93957335219488,93957335221312],["std::__1::shared_ptr<v8::internal::metrics::Recorder> std::__1::allocate_shared<v8::internal::metrics::Recorder, std::__1::allocator<v8::internal::metrics::Recorder>, , void>(std::__1::allocator<v8::internal::metrics::Recorder> const&)",93957336682512,93957336682756],["v8::internal::LocalIsolate::is_collecting_type_profile() const",93957336686112,93957336686135],["v8::internal::MessageHandler::DefaultMessageReport(v8::internal::Isolate*, v8::internal::MessageLocation const*, v8::internal::Handle<v8::internal::Object>)",93957336686320,93957336686723],["v8::internal::MessageHandler::ReportMessageNoExceptions(v8::internal::Isolate*, v8::internal::MessageLocation const*, v8::internal::Handle<v8::internal::Object>, v8::Local<v8::Value>)",93957336688160,93957336688837],["v8::internal::ErrorUtils::FormatStackTrace(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>)",93957336689216,93957336693355],["v8::internal::JSReceiver::GetProperty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, char const*)",93957336693936,93957336694198],["v8::internal::MessageFormatter::Format(v8::internal::Isolate*, v8::internal::MessageTemplate, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String>)",93957336694704,93957336695089],["v8::internal::ErrorUtils::Construct(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSFunction>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957336695136,93957336695222],["v8::internal::ParserBase<v8::internal::PreParser>::NewScope(v8::internal::ScopeType) const",93957339511728,93957339511831],["v8::internal::ExpressionParsingScope<v8::internal::ParserTypes<v8::internal::PreParser> >::ValidateAndRewriteReference(v8::internal::PreParserExpression, int, int)",93957339533920,93957339534101],["v8::internal::Processor::VisitTryCatchStatement(v8::internal::TryCatchStatement*)",93957339540848,93957339541033],["v8::internal::Utf8ExternalStreamingStream::SkipToPosition(unsigned long)",93957339544656,93957339545214],["v8::internal::ScannerStream::For(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>)",93957339547440,93957339547458],["v8::internal::Utf8ExternalStreamingStream::~Utf8ExternalStreamingStream()",93957339548736,93957339548854],["v8::internal::Windows1252CharacterStream::ReadBlock()",93957339549184,93957339549492],["v8::internal::ChunkedStream<unsigned char>::FetchChunk(unsigned long, v8::internal::RuntimeCallStats*)",93957339550416,93957339550575],["v8::internal::BufferedCharacterStream<v8::internal::ExternalStringStream>::~BufferedCharacterStream()",93957339550800,93957339550846],["v8::internal::BufferedCharacterStream<v8::internal::ExternalStringStream>::ReadBlock()",93957339550960,93957339551090],["v8::internal::UnbufferedCharacterStream<v8::internal::ExternalStringStream>::~UnbufferedCharacterStream()",93957339551296,93957339551321],["v8::internal::UnbufferedCharacterStream<v8::internal::ExternalStringStream>::Clone() const",93957339551376,93957339551462],["v8::internal::BufferedCharacterStream<v8::internal::OnHeapStream>::ReadBlock()",93957339551536,93957339551692],["v8::internal::RelocatingCharacterStream::~RelocatingCharacterStream()",93957339551792,93957339551831],["v8::internal::UnbufferedCharacterStream<v8::internal::OnHeapStream>::ReadBlock()",93957339551904,93957339551988],["v8::internal::UnbufferedCharacterStream<v8::internal::ChunkedStream>::~UnbufferedCharacterStream()",93957339552128,93957339552259],["v8_inspector::protocol::Runtime::ExceptionDetails::setScriptId(v8_inspector::String16 const&)",93957342353920,93957342354576],["v8_inspector::InjectedScript::ObjectScope::ObjectScope(v8_inspector::V8InspectorSessionImpl*, v8_inspector::String16 const&)",93957342357056,93957342357815],["v8_inspector::InjectedScript::CallFrameScope::~CallFrameScope()",93957342359264,93957342359326],["v8_inspector::(anonymous namespace)::PropertyAccumulator::Add(v8_inspector::PropertyMirror)",93957342360800,93957342360971],["v8_inspector::InjectedScript::ProtocolPromiseHandler::thenCallback(v8::FunctionCallbackInfo<v8::Value> const&)",93957342362560,93957342362710],["v8_inspector::InjectedScript::ProtocolPromiseHandler::cleanup(v8::WeakCallbackInfo<v8_inspector::InjectedScript::ProtocolPromiseHandler> const&)",93957342362880,93957342363049],["v8_inspector::InjectedScript::ProtocolPromiseHandler::thenCallback(v8::Local<v8::Value>)",93957342363584,93957342364767],["std::__1::basic_string<unsigned short, std::__1::char_traits<unsigned short>, std::__1::allocator<unsigned short> > std::__1::operator+<unsigned short, std::__1::char_traits<unsigned short>, std::__1::allocator<unsigned short> >(std::__1::basic_string<unsigned short, std::__1::char_traits<unsigned short>, std::__1::allocator<unsigned short> > const&, std::__1::basic_string<unsigned short, std::__1::char_traits<unsigned short>, std::__1::allocator<unsigned short> > const&)",93957342366832,93957342368145],["v8::internal::compiler::BigIntData* v8::internal::Zone::New<v8::internal::compiler::BigIntData, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::BigInt> const, v8::internal::compiler::ObjectDataKind&>(v8::internal::compiler::JSHeapBroker*&&, v8::internal::compiler::ObjectData**&&, v8::internal::Handle<v8::internal::BigInt> const&&, v8::internal::compiler::ObjectDataKind&)",93957344006848,93957344006979],["v8::internal::compiler::ObjectRef::IsBigInt() const",93957344016128,93957344016235],["v8::internal::compiler::ObjectRef::IsFunctionTemplateInfo() const",93957344019456,93957344019563],["v8::internal::compiler::MapRef::AsElementsKind(v8::internal::ElementsKind) const",93957344021472,93957344021966],["v8::internal::compiler::JSFunctionRef::InitialMapInstanceSizeWithMinSlack() const",93957344025040,93957344025264],["v8::internal::compiler::MapRef::NumberOfOwnDescriptors() const",93957344028448,93957344028633],["v8::internal::compiler::MapRef::IsFixedCowArrayMap() const",93957344030240,93957344030298],["v8::internal::compiler::StringRef::ToNumber()",93957344033408,93957344034180],["v8::internal::compiler::BytecodeArrayRef::handler_table_size() const",93957344035152,93957344035189],["v8::internal::compiler::AllocationSiteRef::GetElementsKind() const",93957344035904,93957344036078],["v8::internal::compiler::BytecodeArrayRef::parameter_count() const",93957344036640,93957344036808],["v8::internal::compiler::JSBoundFunctionRef::bound_this() const",93957344037616,93957344037973],["v8::internal::compiler::JSFunctionRef::has_feedback_vector() const",93957344038672,93957344038965],["v8::internal::compiler::JSFunctionRef::context() const",93957344039696,93957344040008],["v8::internal::compiler::JSFunctionRef::shared() const",93957344041120,93957344041432],["v8::internal::compiler::JSGlobalObjectRef::IsDetached() const",93957344042448,93957344042718],["v8::internal::compiler::MapRef::is_migration_target() const",93957344043104,93957344043287],["v8::internal::compiler::MapRef::is_access_check_needed() const",93957344043488,93957344043670],["v8::internal::compiler::MapRef::has_indexed_interceptor() const",93957344043872,93957344044054],["v8::internal::compiler::MapRef::is_undetectable() const",93957344044256,93957344044438],["v8::internal::compiler::MapRef::NextFreePropertyIndex() const",93957344044624,93957344044804],["v8::internal::compiler::HeapObjectRef::HeapObjectRef(v8::internal::compiler::JSHeapBroker*, v8::internal::Handle<v8::internal::Object>, v8::internal::compiler::ObjectRef::BackgroundSerialization, bool)",93957344045008,93957344045184],["v8::internal::compiler::MapRef::GetBackPointer() const",93957344045616,93957344046012],["v8::internal::compiler::NativeContextRef::array_function() const",93957344046224,93957344046533],["v8::internal::compiler::NativeContextRef::boolean_function() const",93957344046720,93957344047029],["v8::internal::compiler::NativeContextRef::number_function() const",93957344047360,93957344047672],["v8::internal::compiler::NativeContextRef::promise_function() const",93957344048000,93957344048312],["v8::internal::compiler::NativeContextRef::regexp_function() const",93957344048640,93957344048955],["v8::internal::compiler::NativeContextRef::symbol_function() const",93957344049280,93957344049595],["v8::internal::compiler::NativeContextRef::global_proxy_object() const",93957344050016,93957344050427],["v8::internal::compiler::NativeContextRef::bound_function_with_constructor_map() const",93957344050752,93957344051067],["v8::internal::compiler::NativeContextRef::js_array_holey_double_elements_map() const",93957344051392,93957344051707],["xdr_rejected_reply",139871564452896,139871564453002],["_seterr_reply",139871564453504,139871564453770],["svcraw_create",139871564455776,139871564455913],["xdr_float",139871564456912,139871564457040],["catanhf64x",139871565356608,139871565358009],["fmaxf64x",139871565367536,139871565367586],["ilogbf64x",139871565367872,139871565367939],["fmaxmagf64x",139871565368256,139871565368451],["__acosh_finite",139871565368736,139871565368982],["__cosh_finite",139871565394832,139871565395170],["__hypot_finite",139871565396336,139871565397155],["__y0_finite",139871565399264,139871565400060],["v8::DelayedTasksPlatform::DelayedIdleTask::~DelayedIdleTask()",93957335216592,93957335216648],["std::__1::unique_ptr<v8::Platform, std::__1::default_delete<v8::Platform> >::~unique_ptr()",93957335216896,93957335216927],["std::__1::map<v8::Isolate*, bool, std::__1::less<v8::Isolate*>, std::__1::allocator<std::__1::pair<v8::Isolate* const, bool> > >::~map()",93957335217120,93957335217134],["v8::ShellOptions::ShellOptions()",93957335217152,93957335218181],["v8::internal::Deserializer::~Deserializer()",93957336681152,93957336681180],["v8::internal::metrics::Recorder::~Recorder()",93957336682864,93957336683113],["v8::internal::LocalIsolate::LocalIsolate(v8::internal::Isolate*, v8::internal::ThreadKind, v8::internal::RuntimeCallStats*)",93957336685872,93957336686035],["v8::internal::MessageLocation::MessageLocation(v8::internal::Handle<v8::internal::Script>, int, int)",93957336686176,93957336686206],["v8::internal::MessageLocation::MessageLocation()",93957336686272,93957336686308],["v8::internal::MessageHandler::GetLocalizedMessage(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)",93957336686736,93957336687084],["v8::internal::MessageHandler::ReportMessage(v8::internal::Isolate*, v8::internal::MessageLocation const*, v8::internal::Handle<v8::internal::JSMessageObject>)",93957336687216,93957336688155],["v8::internal::MessageHandler::GetMessage(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)",93957336688848,93957336688983],["v8::internal::ParserBase<v8::internal::PreParser>::ParseArrowFunctionLiteral(v8::internal::PreParserFormalParameters const&)",93957339501120,93957339502172],["v8::internal::ParserBase<v8::internal::PreParser>::ParseVariableDeclarations(v8::internal::ParserBase<v8::internal::PreParser>::VariableDeclarationContext, v8::internal::ParserBase<v8::internal::PreParser>::DeclarationParsingResult*, v8::internal::ZoneList<v8::internal::AstRawString const*>*)",93957339517856,93957339520445],["v8::internal::ParserBase<v8::internal::PreParser>::ParseSwitchStatement(v8::internal::ZoneList<v8::internal::AstRawString const*>*)",93957339531072,93957339532523],["v8::internal::ParserBase<v8::internal::PreParser>::ParseStandardForLoop(int, v8::internal::ZoneList<v8::internal::AstRawString const*>*, v8::internal::ZoneList<v8::internal::AstRawString const*>*, v8::internal::PreParserExpression*, v8::internal::PreParserStatement*, v8::internal::PreParserStatement*)",93957339536864,93957339538006],["v8::internal::Processor::SetResult(v8::internal::Expression*)",93957339540416,93957339540644],["v8::internal::ZoneList<v8::internal::Statement*>::InsertAt(int, v8::internal::Statement* const&, v8::internal::Zone*)",93957339542240,93957339542614],["v8::internal::Processor::VisitNoStackOverflowCheck(v8::internal::AstNode*)",93957339543920,93957339544563],["v8::internal::Utf8ExternalStreamingStream::FillBufferFromCurrentChunk()",93957339545376,93957339546472],["v8::internal::Utf8ExternalStreamingStream::FillBuffer(unsigned long)",93957339547216,93957339547432],["v8::internal::ScannerStream::For(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, int, int)",93957339547472,93957339548252],["v8::internal::Utf8ExternalStreamingStream::~Utf8ExternalStreamingStream()",93957339548608,93957339548735],["v8::internal::Windows1252CharacterStream::~Windows1252CharacterStream()",93957339548864,93957339549007],["v8::internal::BufferedCharacterStream<v8::internal::OnHeapStream>::Clone() const",93957339549152,93957339549177],["v8::internal::ChunkedStream<unsigned char>::ProcessChunk(unsigned char const*, unsigned long, unsigned long)",93957339549504,93957339549586],["v8::internal::ChunkedStream<unsigned char>::FindChunk(unsigned long, v8::internal::RuntimeCallStats*)",93957339549920,93957339550401],["v8::internal::ExternalStringStream<unsigned char>::ExternalStringStream(v8::internal::ExternalOneByteString, unsigned long, unsigned long)",93957339550576,93957339550756],["v8_inspector::InjectedScript::objectGroupName(v8_inspector::RemoteObjectId const&) const",93957342346320,93957342347252],["v8_inspector::InjectedScript::Scope::installCommandLineAPI()",93957342356208,93957342356323],["v8_inspector::InjectedScript::ContextScope::~ContextScope()",93957342356976,93957342357004],["v8_inspector::InjectedScript::ObjectScope::~ObjectScope()",93957342357920,93957342358014],["v8_inspector::InjectedScript::CallFrameScope::~CallFrameScope()",93957342359200,93957342359254],["v8_inspector::InjectedScript::CallFrameScope::findInjectedScript(v8_inspector::V8InspectorSessionImpl*)",93957342359328,93957342359492],["v8_inspector::protocol::Runtime::RemoteObject::setObjectId(v8_inspector::String16 const&)",93957342360128,93957342360793],["void std::__1::vector<v8_inspector::PropertyMirror, std::__1::allocator<v8_inspector::PropertyMirror> >::__push_back_slow_path<v8_inspector::PropertyMirror>(v8_inspector::PropertyMirror&&)",93957342360976,93957342361713],["v8::internal::compiler::MapRef::instance_type() const",93957343995840,93957343996024],["v8::internal::compiler::FixedArrayBaseData* v8::internal::Zone::New<v8::internal::compiler::FixedArrayBaseData, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::FixedArrayBase> const>(v8::internal::compiler::JSHeapBroker*&&, v8::internal::compiler::ObjectData**&&, v8::internal::Handle<v8::internal::FixedArrayBase> const&&)",93957344011136,93957344011367],["v8::internal::compiler::ObjectRef::IsAllocationSite() const",93957344014848,93957344014955],["v8::internal::compiler::ObjectRef::IsScopeInfo() const",93957344017344,93957344017451],["v8::internal::compiler::ObjectRef::IsFeedbackCell() const",93957344018848,93957344018955],["v8::internal::compiler::ObjectRef::IsSharedFunctionInfo() const",93957344019984,93957344020091],["v8::internal::compiler::MapRef::IsJSPromiseMap() const",93957344021344,93957344021366],["v8::internal::compiler::MapData::SerializeForElementStore(v8::internal::compiler::JSHeapBroker*)",93957344022672,93957344022952],["v8::internal::compiler::MapRef::supports_fast_array_iteration() const",93957344024560,93957344024851],["v8::internal::compiler::JSObjectRef::RawFastPropertyAt(v8::internal::FieldIndex) const",93957344025616,93957344026097],["v8::internal::compiler::JSObjectRef::elements() const",93957344027008,93957344027852],["v8::internal::compiler::MapRef::GetInObjectPropertiesStartInWords() const",93957344028704,93957344028913],["v8::internal::compiler::MapRef::GetPropertyKey(v8::internal::InternalIndex) const",93957344029696,93957344029781],["v8::internal::compiler::MapRef::FindFieldOwner(v8::internal::InternalIndex) const",93957344030336,93957344030845],["v8::internal::compiler::StringRef::length() const",93957344031680,93957344032438],["v8::internal::compiler::FixedArrayRef::get(int) const",93957344034384,93957344034782],["v8::internal::compiler::BytecodeArrayRef::handler_table_address() const",93957344035104,93957344035142],["v8::internal::compiler::AllocationSiteRef::nested_site() const",93957344035200,93957344035534],["v8::internal::compiler::AllocationSiteRef::PointsToLiteral() const",93957344035728,93957344035904],["v8::internal::compiler::AllocationSiteRef::GetAllocationType() const",93957344036080,93957344036260],["v8::internal::compiler::BytecodeArrayRef::register_count() const",93957344036464,93957344036640],["v8::internal::compiler::BytecodeArrayRef::incoming_new_target_or_generator_register() const",93957344036816,93957344036998],["v8::internal::compiler::JSBoundFunctionRef::bound_target_function() const",93957344037184,93957344037605],["v8::internal::compiler::JSBoundFunctionRef::bound_arguments() const",93957344037984,93957344038318],["v8::internal::compiler::JSDataViewRef::byte_length() const",93957344038496,93957344038669],["v8::internal::compiler::JSFunctionRef::has_initial_map() const",93957344038976,93957344039186],["v8::internal::compiler::JSFunctionRef::PrototypeRequiresRuntimeLookup() const",93957344039440,93957344039687],["v8::internal::compiler::JSFunctionRef::native_context() const",93957344040016,93957344040336],["v8::internal::compiler::JSFunctionRef::prototype() const",93957344040656,93957344041115],["v8::internal::compiler::SharedFunctionInfoRef::SharedFunctionInfoRef(v8::internal::compiler::JSHeapBroker*, v8::internal::Handle<v8::internal::Object>, v8::internal::compiler::ObjectRef::BackgroundSerialization, bool)",93957344041440,93957344041616],["v8::internal::compiler::JSFunctionRef::feedback_vector() const",93957344042032,93957344042447],["v8::internal::compiler::MapRef::is_dictionary_map() const",93957344042720,93957344042903],["xdr_rmtcallres",139871564450448,139871564450578],["xdr_opaque_auth",139871564453184,139871564453243],["xdr_callhdr",139871564453360,139871564453490],["xdr_callmsg",139871564453776,139871564454699],["cacosf64x",139871565349088,139871565349456],["cexpf64x",139871565361536,139871565362863],["fdimf64x",139871565367408,139871565367503],["nanf64x",139871565367664,139871565367673],["significandl",139871565367856,139871565367865],["llogbf64x",139871565367952,139871565368060],["scalblnf64x",139871565368144,139871565368253],["fminmagf64x",139871565368464,139871565368637],["v8::DelayedTasksPlatform::DelayedTask::~DelayedTask()",93957335216384,93957335216427],["v8::DelayedTasksPlatform::DelayedJob::~DelayedJob()",93957335216704,93957335216747],["v8::(anonymous namespace)::ArrayBufferAllocatorBase::AllocateUninitialized(unsigned long)",93957335216864,93957335216882],["v8::Global<v8::Context>::~Global()",93957335216928,93957335216964],["void std::__1::__function::__policy_invoker<void (v8::internal::CodeEventListener*)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::CodeEventDispatcher::RegExpCodeCreateEvent(v8::internal::Handle<v8::internal::AbstractCode>, v8::internal::Handle<v8::internal::String>)::{lambda(v8::internal::CodeEventListener*)#1}, void (v8::internal::CodeEventListener*)> >(std::__1::__function::__policy_storage const*, v8::internal::CodeEventListener*)",93957336680880,93957336680907],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::ThreadId, v8::internal::Isolate::PerIsolateThreadData*>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::ThreadId, v8::internal::Isolate::PerIsolateThreadData*>, std::__1::__unordered_map_hasher<v8::internal::ThreadId, std::__1::__hash_value_type<v8::internal::ThreadId, v8::internal::Isolate::PerIsolateThreadData*>, v8::internal::Isolate::ThreadDataTable::Hasher, std::__1::equal_to<v8::internal::ThreadId>, true>, std::__1::__unordered_map_equal<v8::internal::ThreadId, std::__1::__hash_value_type<v8::internal::ThreadId, v8::internal::Isolate::PerIsolateThreadData*>, std::__1::equal_to<v8::internal::ThreadId>, v8::internal::Isolate::ThreadDataTable::Hasher, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::ThreadId, v8::internal::Isolate::PerIsolateThreadData*> > >::__emplace_unique_key_args<v8::internal::ThreadId, std::__1::pair<v8::internal::ThreadId, v8::internal::Isolate::PerIsolateThreadData*> >(v8::internal::ThreadId const&, std::__1::pair<v8::internal::ThreadId, v8::internal::Isolate::PerIsolateThreadData*>&&)",93957336681440,93957336682346],["std::__1::__shared_ptr_emplace<v8::internal::metrics::Recorder, std::__1::allocator<v8::internal::metrics::Recorder> >::~__shared_ptr_emplace()",93957336682800,93957336682838],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::Isolate::ICUObjectCacheType, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::shared_ptr<icu_68::UMemory> > >, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::Isolate::ICUObjectCacheType, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::shared_ptr<icu_68::UMemory> > >, std::__1::__unordered_map_hasher<v8::internal::Isolate::ICUObjectCacheType, std::__1::__hash_value_type<v8::internal::Isolate::ICUObjectCacheType, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::shared_ptr<icu_68::UMemory> > >, v8::internal::Isolate::ICUObjectCacheTypeHash, std::__1::equal_to<v8::internal::Isolate::ICUObjectCacheType>, true>, std::__1::__unordered_map_equal<v8::internal::Isolate::ICUObjectCacheType, std::__1::__hash_value_type<v8::internal::Isolate::ICUObjectCacheType, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::shared_ptr<icu_68::UMemory> > >, std::__1::equal_to<v8::internal::Isolate::ICUObjectCacheType>, v8::internal::Isolate::ICUObjectCacheTypeHash, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::Isolate::ICUObjectCacheType, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::shared_ptr<icu_68::UMemory> > > > >::__emplace_unique_key_args<v8::internal::Isolate::ICUObjectCacheType, std::__1::pair<v8::internal::Isolate::ICUObjectCacheType const, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::shared_ptr<icu_68::UMemory> > > >(v8::internal::Isolate::ICUObjectCacheType const&, std::__1::pair<v8::internal::Isolate::ICUObjectCacheType const, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::shared_ptr<icu_68::UMemory> > >&&)",93957336683424,93957336684381],["std::__1::pair<std::__1::__tree_iterator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::pair<unsigned long, unsigned long> >, std::__1::__tree_node<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::pair<unsigned long, unsigned long> >, void*>*, long>, bool> std::__1::__tree<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::pair<unsigned long, unsigned long> >, std::__1::__map_value_compare<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::pair<unsigned long, unsigned long> >, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::allocator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::pair<unsigned long, unsigned long> > > >::__emplace_unique_key_args<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::piecewise_construct_t const&, std::__1::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&>, std::__1::tuple<> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::piecewise_construct_t const&, std::__1::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&>&&, std::__1::tuple<>&&)",93957336685392,93957336685869],["v8::internal::LocalIsolate::~LocalIsolate()",93957336686048,93957336686103],["v8::internal::StackLimitCheck::HasOverflowed(v8::internal::LocalIsolate*)",93957336686144,93957336686175],["v8::internal::MessageLocation::MessageLocation(v8::internal::Handle<v8::internal::Script>, int, int, v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957336686208,93957336686234],["v8::internal::ParserBase<v8::internal::PreParser>::ParseArrayLiteral()",93957339491664,93957339492587],["v8::internal::PreParser::ExpressionFromPrivateName(v8::internal::PrivateNameScopeIterator*, v8::internal::PreParserIdentifier const&, int)",93957339506192,93957339506308],["v8::internal::ParserBase<v8::internal::PreParser>::DoParseMemberExpressionContinuation(v8::internal::PreParserExpression)",93957339516144,93957339516431],["v8::internal::ParserBase<v8::internal::PreParser>::ParseWhileStatement(v8::internal::ZoneList<v8::internal::AstRawString const*>*, v8::internal::ZoneList<v8::internal::AstRawString const*>*)",93957339522304,93957339522899],["v8::internal::ParserBase<v8::internal::PreParser>::ParseThrowStatement()",93957339529920,93957339530388],["v8::internal::ParserBase<v8::internal::PreParser>::ParseScopedStatement(v8::internal::ZoneList<v8::internal::AstRawString const*>*)",93957339533504,93957339533733],["v8::internal::ParserBase<v8::internal::PreParser>::ParseStandardForLoopWithLexicalDeclarations(int, v8::internal::PreParserStatement, v8::internal::ParserBase<v8::internal::PreParser>::ForInfo*, v8::internal::ZoneList<v8::internal::AstRawString const*>*, v8::internal::ZoneList<v8::internal::AstRawString const*>*)",93957339535536,93957339535963],["v8::internal::ParserBase<v8::internal::PreParser>::ParseNonRestrictedIdentifier()",93957339538144,93957339538605],["v8::internal::Processor::AssignUndefinedBefore(v8::internal::Statement*)",93957339539792,93957339540403],["v8::internal::Processor::VisitIfStatement(v8::internal::IfStatement*)",93957339540656,93957339540841],["v8::internal::Processor::VisitTryFinallyStatement(v8::internal::TryFinallyStatement*)",93957339541040,93957339542232],["v8::internal::Processor::VisitSwitchStatement(v8::internal::SwitchStatement*)",93957339542624,93957339542853],["v8::internal::Rewriter::RewriteBody(v8::internal::ParseInfo*, v8::internal::Scope*, v8::internal::ZoneList<v8::internal::Statement*>*)",93957339543056,93957339543917],["v8::internal::BufferedUtf16CharacterStream::ReadBlock()",93957339544576,93957339544644],["unibrow::Utf8::ValueOfIncremental(unsigned char const**, Utf8DfaDecoder::State*, unsigned int*)",93957339545216,93957339545365],["v8::internal::Utf8ExternalStreamingStream::FetchChunk()",93957339546480,93957339546736],["v8_inspector::InjectedScript::releaseObject(v8_inspector::String16 const&)",93957342339648,93957342339771],["v8_inspector::InjectedScript::resolveCallArgument(v8_inspector::protocol::Runtime::CallArgument*, v8::Local<v8::Value>*)",93957342347776,93957342352031],["v8_inspector::InjectedScript::commandLineAPI()",93957342355744,93957342355949],["v8_inspector::InjectedScript::Scope::pretendUserGesture()",93957342356464,93957342356487],["v8_inspector::InjectedScript::ContextScope::ContextScope(v8_inspector::V8InspectorSessionImpl*, int)",93957342356832,93957342356976],["v8_inspector::InjectedScript::ContextScope::findInjectedScript(v8_inspector::V8InspectorSessionImpl*)",93957342357008,93957342357047],["v8_inspector::InjectedScript::ObjectScope::~ObjectScope()",93957342357824,93957342357910],["v8_inspector::InjectedScript::ObjectScope::findInjectedScript(v8_inspector::V8InspectorSessionImpl*)",93957342358016,93957342358463],["v8::internal::compiler::ObjectData::IsPropertyCell() const",93957343986112,93957343986289],["v8::internal::compiler::JSHeapBroker::InitializeAndStartSerializing(v8::internal::Handle<v8::internal::NativeContext>)",93957344001792,93957344003519],["v8::internal::compiler::JSFunctionData* v8::internal::Zone::New<v8::internal::compiler::JSFunctionData, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::JSFunction> const>(v8::internal::compiler::JSHeapBroker*&&, v8::internal::compiler::ObjectData**&&, v8::internal::Handle<v8::internal::JSFunction> const&&)",93957344008800,93957344008895],["v8::internal::compiler::ObjectRef::IsJSFunction() const",93957344012576,93957344012683],["v8::internal::compiler::ObjectRef::IsFixedDoubleArray() const",93957344014240,93957344014347],["v8::internal::compiler::ObjectRef::AsJSReceiver() const",93957344015376,93957344015568],["v8::internal::compiler::ObjectRef::IsMap() const",93957344016736,93957344016843],["v8::internal::compiler::ObjectRef::AsString() const",93957344017792,93957344017984],["v8::internal::compiler::ObjectRef::IsCode() const",93957344018624,93957344018731],["v8::internal::compiler::ObjectRef::IsFeedbackVector() const",93957344019152,93957344019259],["v8::internal::compiler::ObjectRef::IsName() const",93957344019760,93957344019867],["v8::internal::compiler::ObjectRef::IsSmi() const",93957344020208,93957344020320],["v8::internal::compiler::MapRef::IsHeapNumberMap() const",93957344021280,93957344021298],["v8::internal::compiler::MapRef::IsJSObjectMap() const",93957344021408,93957344021430],["v8::internal::compiler::MapData::SerializeForElementLoad(v8::internal::compiler::JSHeapBroker*)",93957344022224,93957344022407],["v8::internal::compiler::MapRef::prototype() const",93957344023232,93957344023604],["v8::internal::compiler::MapRef::HasOnlyStablePrototypesWithFastElements(v8::internal::ZoneVector<v8::internal::compiler::MapRef>*)",93957344024064,93957344024558],["v8::internal::compiler::MapRef::supports_fast_array_resize() const",93957344024864,93957344025035],["v8::internal::compiler::FeedbackVectorRef::GetClosureFeedbackCell(int) const",93957344025264,93957344025610],["v8::internal::compiler::AllocationSiteRef::IsFastLiteral() const",93957344026112,93957344026440],["v8::internal::compiler::JSObjectRef::EnsureElementsTenured()",93957344026592,93957344026997],["v8::internal::compiler::MapRef::GetFieldIndexFor(v8::internal::InternalIndex) const",93957344027856,93957344028442],["v8::internal::compiler::MapRef::GetInObjectPropertyOffset(int) const",93957344028640,93957344028693],["v8::internal::compiler::MapRef::GetPropertyDetails(v8::internal::InternalIndex) const",93957344028928,93957344029013],["v8::internal::compiler::DescriptorArrayRef::GetPropertyDetails(v8::internal::InternalIndex) const",93957344029440,93957344029687],["v8::internal::compiler::DescriptorArrayRef::GetPropertyKey(v8::internal::InternalIndex) const",93957344029792,93957344030234],["v8::internal::compiler::MapRef::IsPrimitiveMap() const",93957344030304,93957344030322],["v8::internal::compiler::MapRef::GetFieldType(v8::internal::InternalIndex) const",93957344030848,93957344030933],["v8::internal::compiler::StringRef::GetCharAsStringOrUndefined(unsigned int, v8::internal::compiler::SerializationPolicy) const",93957344031376,93957344031671],["v8::internal::compiler::StringRef::GetFirstChar()",93957344032448,93957344033400],["v8::internal::compiler::ArrayBoilerplateDescriptionRef::constants_elements_length() const",93957344034192,93957344034376],["v8::internal::compiler::FixedDoubleArrayRef::get(int) const",93957344034784,93957344035010],["pmap_unset",139871564449408,139871564449665],["pmap_rmtcall",139871564450864,139871564451205],["xdr_accepted_reply",139871564453008,139871564453173],["xdr_des_block",139871564453248,139871564453258],["ufromfpf64x",139871565347136,139871565347735],["casinf64x",139871565351312,139871565351503],["ctanf64x",139871565359648,139871565360525],["cprojf64x",139871565364048,139871565364158],["clog10f64x",139871565366224,139871565367406],["nextdownf64x",139871565367504,139871565367529],["fminf64x",139871565367600,139871565367650],["__iseqsigl",139871565367680,139871565367749],["v8::DelayedTasksPlatform::DelayedTaskRunner::PostIdleTask(std::__1::unique_ptr<v8::IdleTask, std::__1::default_delete<v8::IdleTask> >)",93957335216080,93957335216200],["v8::DelayedTasksPlatform::DelayedTask::Run()",93957335216496,93957335216530],["v8::DelayedTasksPlatform::DelayedIdleTask::Run(double)",93957335216656,93957335216703],["v8::DelayedTasksPlatform::DelayedJob::~DelayedJob()",93957335216752,93957335216808],["void* std::__1::__function::__policy::__large_clone<std::__1::__function::__default_alloc_func<v8_inspector::V8Debugger::ScriptCompiled(v8::Local<v8::debug::Script>, bool, bool)::$_6, void (v8_inspector::V8InspectorSessionImpl*)> >(void const*)",93957336680512,93957336680552],["void std::__1::__function::__policy_invoker<void (v8::internal::CodeEventListener*)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::CodeEventDispatcher::CodeDisableOptEvent(v8::internal::Handle<v8::internal::AbstractCode>, v8::internal::Handle<v8::internal::SharedFunctionInfo>)::{lambda(v8::internal::CodeEventListener*)#1}, void (v8::internal::CodeEventListener*)> >(std::__1::__function::__policy_storage const*, v8::internal::CodeEventListener*)",93957336680992,93957336681019],["std::__1::__tree<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::internal::CompilationStatistics::PhaseStats>, std::__1::__map_value_compare<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::internal::CompilationStatistics::PhaseStats>, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::allocator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::internal::CompilationStatistics::PhaseStats> > >::destroy(std::__1::__tree_node<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::internal::CompilationStatistics::PhaseStats>, void*>*)",93957336681216,93957336681329],["std::__1::__shared_ptr_emplace<v8::internal::Counters, std::__1::allocator<v8::internal::Counters> >::~__shared_ptr_emplace()",93957336682384,93957336682422],["std::__1::__shared_ptr_emplace<v8::internal::metrics::Recorder, std::__1::allocator<v8::internal::metrics::Recorder> >::~__shared_ptr_emplace()",93957336682768,93957336682788],["std::__1::__shared_ptr_emplace<v8::internal::metrics::Recorder, std::__1::allocator<v8::internal::metrics::Recorder> >::__on_zero_shared()",93957336682848,93957336682862],["std::__1::__deque_base<std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> >, std::__1::allocator<std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> > > >::clear()",93957336683120,93957336683412],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<unsigned long, v8::Persistent<v8::Context, v8::CopyablePersistentTraits<v8::Context> > >, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<unsigned long, v8::Persistent<v8::Context, v8::CopyablePersistentTraits<v8::Context> > >, std::__1::__unordered_map_hasher<unsigned long, std::__1::__hash_value_type<unsigned long, v8::Persistent<v8::Context, v8::CopyablePersistentTraits<v8::Context> > >, std::__1::hash<unsigned long>, std::__1::equal_to<unsigned long>, true>, std::__1::__unordered_map_equal<unsigned long, std::__1::__hash_value_type<unsigned long, v8::Persistent<v8::Context, v8::CopyablePersistentTraits<v8::Context> > >, std::__1::equal_to<unsigned long>, std::__1::hash<unsigned long>, true>, std::__1::allocator<std::__1::__hash_value_type<unsigned long, v8::Persistent<v8::Context, v8::CopyablePersistentTraits<v8::Context> > > > >::__emplace_unique_impl<std::__1::piecewise_construct_t const&, std::__1::tuple<unsigned long&>, std::__1::tuple<v8::Isolate*&&, v8::Local<v8::Context>&&> >(std::__1::piecewise_construct_t const&, std::__1::tuple<unsigned long&>&&, std::__1::tuple<v8::Isolate*&&, v8::Local<v8::Context>&&>&&)",93957336684384,93957336684843],["v8::internal::ParserBase<v8::internal::PreParser>::ParseClassLiteral(v8::internal::PreParserIdentifier, v8::internal::Scanner::Location, bool, int)",93957339478544,93957339480843],["v8::internal::VariableDeclarationParsingScope<v8::internal::ParserTypes<v8::internal::PreParser> >::Declare(v8::internal::AstRawString const*, int)",93957339496416,93957339496865],["v8::internal::ParserBase<v8::internal::PreParser>::ParseConditionalContinuation(v8::internal::PreParserExpression, int)",93957339503136,93957339503881],["v8::internal::ExpressionParsingScope<v8::internal::ParserTypes<v8::internal::PreParser> >::ValidatePattern(v8::internal::PreParserExpression, int, int)",93957339508320,93957339508654],["v8::internal::ParserBase<v8::internal::PreParser>::ParseArrowParametersWithRest(v8::internal::PreParserExpressionList*, v8::internal::AccumulationScope<v8::internal::ParserTypes<v8::internal::PreParser> >*, int)",93957339514800,93957339515242],["v8::internal::ParserBase<v8::internal::PreParser>::ParseMemberInitializer(v8::internal::ParserBase<v8::internal::PreParser>::ClassInfo*, int, bool)",93957339516784,93957339517674],["v8::internal::ParserBase<v8::internal::PreParser>::ParseIfStatement(v8::internal::ZoneList<v8::internal::AstRawString const*>*)",93957339520576,93957339521513],["v8::internal::ParserBase<v8::internal::PreParser>::ParseForStatement(v8::internal::ZoneList<v8::internal::AstRawString const*>*, v8::internal::ZoneList<v8::internal::AstRawString const*>*)",93957339525120,93957339527260],["v8::internal::ParserBase<v8::internal::PreParser>::ParseReturnStatement()",93957339528816,93957339529919],["v8::internal::ParserBase<v8::internal::PreParser>::ParseWithStatement(v8::internal::ZoneList<v8::internal::AstRawString const*>*)",93957339530400,93957339531063],["v8::internal::ParserBase<v8::internal::PreParser>::ParseExpressionOrLabelledStatement(v8::internal::ZoneList<v8::internal::AstRawString const*>*, v8::internal::ZoneList<v8::internal::AstRawString const*>*, v8::internal::AllowLabelledFunctionStatement)",93957339532528,93957339533496],["v8::internal::ParserBase<v8::internal::PreParser>::ParseFunctionDeclaration()",93957339533744,93957339533918],["v8::internal::ParserBase<v8::internal::PreParser>::ParseForEachStatementWithDeclarations(int, v8::internal::ParserBase<v8::internal::PreParser>::ForInfo*, v8::internal::ZoneList<v8::internal::AstRawString const*>*, v8::internal::ZoneList<v8::internal::AstRawString const*>*, v8::internal::Scope*)",93957339534112,93957339535534],["v8::internal::ParserBase<v8::internal::PreParser>::ParseForEachStatementWithoutDeclarations(int, v8::internal::PreParserExpression, int, int, v8::internal::ParserBase<v8::internal::PreParser>::ForInfo*, v8::internal::ZoneList<v8::internal::AstRawString const*>*, v8::internal::ZoneList<v8::internal::AstRawString const*>*)",93957339535968,93957339536856],["void v8::internal::ParserBase<v8::internal::PreParser>::ReportMessage<v8::internal::PreParserIdentifier>(v8::internal::MessageTemplate, v8::internal::PreParserIdentifier)",93957339538016,93957339538131],["v8::internal::ParserBase<v8::internal::PreParser>::DeclareLabel(v8::internal::ZoneList<v8::internal::AstRawString const*>**, v8::internal::ZoneList<v8::internal::AstRawString const*>**, v8::internal::AstRawString const*)",93957339538608,93957339539421],["v8_inspector::InjectedScript::InjectedScript(v8_inspector::InspectedContext*, int)",93957342332576,93957342332684],["v8_inspector::InjectedScript::wrapTable(v8::Local<v8::Object>, v8::MaybeLocal<v8::Array>)",93957342341008,93957342345058],["v8_inspector::InjectedScript::setCustomObjectFormatterEnabled(bool)",93957342347680,93957342347693],["v8_inspector::InjectedScript::addExceptionToDetails(v8::Local<v8::Value>, v8_inspector::protocol::Runtime::ExceptionDetails*, v8_inspector::String16 const&)",93957342352160,93957342352483],["v8_inspector::InjectedScript::wrapEvaluateResult(v8::MaybeLocal<v8::Value>, v8::TryCatch const&, v8_inspector::String16 const&, v8_inspector::WrapMode, std::__1::unique_ptr<v8_inspector::protocol::Runtime::RemoteObject, std::__1::default_delete<v8_inspector::protocol::Runtime::RemoteObject> >*, v8_crdtp::detail::PtrMaybe<v8_inspector::protocol::Runtime::ExceptionDetails>*)",93957342354576,93957342355737],["v8_inspector::InjectedScript::Scope::initialize()",93957342355952,93957342356203],["v8_inspector::InjectedScript::Scope::ignoreExceptionsAndMuteConsole()",93957342356336,93957342356455],["v8_inspector::InjectedScript::Scope::allowCodeGenerationFromStrings()",93957342356496,93957342356549],["v8::internal::compiler::JSBoundFunctionData::Serialize(v8::internal::compiler::JSHeapBroker*)",93957343968816,93957343969397],["v8::internal::compiler::ObjectData::IsName() const",93957343989056,93957343989229],["v8::internal::compiler::JSHeapBroker::SetTargetNativeContextRef(v8::internal::Handle<v8::internal::NativeContext>)",93957343998656,93957343998731],["v8::internal::compiler::CallHandlerInfoData* v8::internal::Zone::New<v8::internal::compiler::CallHandlerInfoData, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::CallHandlerInfo> const>(v8::internal::compiler::JSHeapBroker*&&, v8::internal::compiler::ObjectData**&&, v8::internal::Handle<v8::internal::CallHandlerInfo> const&&)",93957344005040,93957344005298],["v8::internal::compiler::PropertyCellData* v8::internal::Zone::New<v8::internal::compiler::PropertyCellData, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::PropertyCell> const>(v8::internal::compiler::JSHeapBroker*&&, v8::internal::compiler::ObjectData**&&, v8::internal::Handle<v8::internal::PropertyCell> const&&)",93957344007360,93957344007594],["v8::internal::compiler::NativeContextData* v8::internal::Zone::New<v8::internal::compiler::NativeContextData, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::NativeContext> const>(v8::internal::compiler::JSHeapBroker*&&, v8::internal::compiler::ObjectData**&&, v8::internal::Handle<v8::internal::NativeContext> const&&)",93957344010176,93957344010501],["v8::internal::compiler::ObjectRef::IsJSBoundFunction() const",93957344011968,93957344012075],["v8::internal::compiler::ObjectRef::IsJSTypedArray() const",93957344013104,93957344013211],["v8::internal::compiler::ObjectRef::IsFixedArray() const",93957344013936,93957344014043],["v8::internal::compiler::ObjectRef::IsJSObject() const",93957344014544,93957344014651],["v8::internal::compiler::ObjectRef::IsFixedArrayBase() const",93957344015152,93957344015259],["v8::internal::compiler::ObjectRef::IsHeapObject() const",93957344015680,93957344015923],["v8::internal::compiler::ObjectRef::IsHeapNumber() const",93957344016432,93957344016539],["v8::internal::compiler::ObjectRef::IsPropertyCell() const",93957344017040,93957344017147],["v8::internal::compiler::ObjectRef::IsBytecodeArray() const",93957344017568,93957344017675],["v8::internal::compiler::ObjectRef::IsAccessorInfo() const",93957344018096,93957344018203],["v8::internal::compiler::ObjectRef::AsCell() const",93957344018432,93957344018624],["v8::internal::compiler::ObjectRef::IsDescriptorArray() const",93957344018736,93957344018843],["v8::internal::compiler::ObjectRef::AsFeedbackCell() const",93957344018960,93957344019152],["v8::internal::compiler::ObjectRef::AsFeedbackVector() const",93957344019264,93957344019456],["v8::internal::compiler::ObjectRef::AsFunctionTemplateInfo() const",93957344019568,93957344019760],["v8::internal::compiler::ObjectRef::IsRegExpBoilerplateDescription() const",93957344019872,93957344019979],["v8::internal::compiler::ObjectRef::IsTemplateObjectDescription() const",93957344020096,93957344020203],["v8::internal::compiler::ObjectRef::AsSmi() const",93957344020320,93957344020336],["v8::internal::compiler::JSObjectData::object_create_map(v8::internal::compiler::JSHeapBroker*) const",93957344020720,93957344021278],["v8::internal::compiler::MapRef::IsJSArrayMap() const",93957344021312,93957344021334],["v8::internal::compiler::MapRef::IsStringMap() const",93957344021376,93957344021394],["v8::internal::compiler::MapRef::IsJSReceiverMap() const",93957344021440,93957344021462],["v8::internal::compiler::MapRef::SerializeForElementLoad()",93957344021968,93957344022220],["v8::internal::compiler::MapRef::SerializeForElementStore()",93957344022416,93957344022668],["v8::internal::compiler::MapRef::SerializePrototype()",93957344022960,93957344023224],["v8::internal::compiler::MapRef::oddball_type() const",93957344023616,93957344023878],["callrpc",139871564448112,139871564448650],["xdr_pmap",139871564450112,139871564450194],["xdr_rmtcall_args",139871564450592,139871564450856],["clnt_broadcast",139871564451216,139871564452885],["totalorderf64x",139871565345552,139871565345576],["conjf64x",139871565349024,139871565349035],["ccosf64x",139871565350144,139871565350167],["casinhf64x",139871565352752,139871565353385],["catanf64x",139871565358016,139871565359633],["ctanhf64x",139871565360528,139871565361525],["clogf64x",139871565362864,139871565364044],["csqrtf64x",139871565364160,139871565366065],["v8::DelayedTasksPlatform::DelayedTaskRunner::PostTask(std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> >)",93957335215648,93957335215767],["v8::DelayedTasksPlatform::DelayedTaskRunner::~DelayedTaskRunner()",93957335216224,93957335216297],["v8::DelayedTasksPlatform::DelayedTask::~DelayedTask()",93957335216432,93957335216488],["v8::DelayedTasksPlatform::DelayedIdleTask::~DelayedIdleTask()",93957335216544,93957335216587],["v8::internal::CodeEventDispatcher::CodeDisableOptEvent(v8::internal::Handle<v8::internal::AbstractCode>, v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957336679472,93957336679660],["void* std::__1::__function::__policy::__large_clone<std::__1::__function::__default_alloc_func<v8::internal::CodeEventDispatcher::CodeCreateEvent(v8::internal::CodeEventListener::LogEventsAndTags, v8::internal::wasm::WasmCode const*, v8::internal::Vector<char const>, char const*, int, int)::{lambda(v8::internal::CodeEventListener*)#1}, void (v8::internal::CodeEventListener*)> >(void const*)",93957336680736,93957336680784],["void std::__1::__function::__policy_invoker<void (v8::internal::CodeEventListener*)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::CodeEventDispatcher::SharedFunctionInfoMoveEvent(unsigned long, unsigned long)::{lambda(v8::internal::CodeEventListener*)#1}, void (v8::internal::CodeEventListener*)> >(std::__1::__function::__policy_storage const*, v8::internal::CodeEventListener*)",93957336680944,93957336680971],["void std::__1::__function::__policy_invoker<void (v8::internal::CodeEventListener*)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::CodeEventDispatcher::CodeDependencyChangeEvent(v8::internal::Handle<v8::internal::Code>, v8::internal::Handle<v8::internal::SharedFunctionInfo>, char const*)::{lambda(v8::internal::CodeEventListener*)#1}, void (v8::internal::CodeEventListener*)> >(std::__1::__function::__policy_storage const*, v8::internal::CodeEventListener*)",93957336681072,93957336681110],["v8::internal::RootVisitor::VisitRootPointer(v8::internal::Root, char const*, v8::internal::FullObjectSlot)",93957336681184,93957336681202],["std::__1::__tree<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::internal::CompilationStatistics::OrderedStats>, std::__1::__map_value_compare<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::internal::CompilationStatistics::OrderedStats>, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::allocator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::internal::CompilationStatistics::OrderedStats> > >::destroy(std::__1::__tree_node<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::internal::CompilationStatistics::OrderedStats>, void*>*)",93957336681344,93957336681433],["std::__1::__shared_ptr_emplace<v8::internal::Counters, std::__1::allocator<v8::internal::Counters> >::~__shared_ptr_emplace()",93957336682352,93957336682372],["std::__1::__shared_ptr_emplace<v8::internal::Counters, std::__1::allocator<v8::internal::Counters> >::__on_zero_shared()",93957336682432,93957336682512],["v8::internal::ParserBase<v8::internal::PreParser>::Expect(v8::internal::Token::Value)",93957339467680,93957339467728],["v8::internal::ParserBase<v8::internal::PreParser>::ClassifyParameter(v8::internal::PreParserIdentifier, int, int)",93957339488176,93957339488369],["v8::internal::ParserBase<v8::internal::PreParser>::ParseTemplateLiteral(v8::internal::PreParserExpression, int, bool)",93957339494480,93957339495278],["v8::internal::ParserBase<v8::internal::PreParser>::ExpectContextualKeyword(v8::internal::AstRawString const*, char const*, int)",93957339498272,93957339498473],["v8::internal::ParserBase<v8::internal::PreParser>::RewriteInvalidReferenceExpression(v8::internal::PreParserExpression, int, int, v8::internal::MessageTemplate, bool)",93957339502320,93957339502624],["v8::internal::ParserBase<v8::internal::PreParser>::ParseCoalesceExpression(v8::internal::PreParserExpression)",93957339505440,93957339505974],["v8::internal::ParserBase<v8::internal::PreParser>::ParseAwaitExpression()",93957339507232,93957339508067],["v8::internal::ParserBase<v8::internal::PreParser>::ParsePossibleDestructuringSubPattern(v8::internal::AccumulationScope<v8::internal::ParserTypes<v8::internal::PreParser> >*)",93957339508768,93957339509774],["v8::internal::ParserBase<v8::internal::PreParser>::ParseProperty(v8::internal::ParserBase<v8::internal::PreParser>::ParsePropertyInfo*)",93957339511840,93957339514795],["v8::internal::ParserBase<v8::internal::PreParser>::ParseBindingPattern()",93957339515248,93957339516133],["v8::internal::ParserBase<v8::internal::PreParser>::ParseBlock(v8::internal::ZoneList<v8::internal::AstRawString const*>*, v8::internal::Scope*)",93957339516432,93957339516775],["v8::internal::ParserBase<v8::internal::PreParser>::ExpectSemicolon()",93957339517680,93957339517844],["v8::internal::ParserBase<v8::internal::PreParser>::ParseBlock(v8::internal::ZoneList<v8::internal::AstRawString const*>*)",93957339520448,93957339520571],["v8::internal::ParserBase<v8::internal::PreParser>::ParseDoWhileStatement(v8::internal::ZoneList<v8::internal::AstRawString const*>*, v8::internal::ZoneList<v8::internal::AstRawString const*>*)",93957339521520,93957339522292],["v8::internal::ParserBase<v8::internal::PreParser>::ParseForAwaitStatement(v8::internal::ZoneList<v8::internal::AstRawString const*>*, v8::internal::ZoneList<v8::internal::AstRawString const*>*)",93957339522912,93957339525106],["v8::internal::ParserBase<v8::internal::PreParser>::ParseContinueStatement()",93957339527264,93957339528069],["non-virtual thunk to v8_inspector::protocol::Schema::Domain::~Domain()",93957342326896,93957342326979],["v8_inspector::InjectedScript::createExceptionDetails(v8::TryCatch const&, v8_inspector::String16 const&, v8_crdtp::detail::PtrMaybe<v8_inspector::protocol::Runtime::ExceptionDetails>*)",93957342335696,93957342335812],["v8_inspector::InjectedScript::wrapObject(v8::Local<v8::Value>, v8_inspector::String16 const&, v8_inspector::WrapMode, std::__1::unique_ptr<v8_inspector::protocol::Runtime::RemoteObject, std::__1::default_delete<v8_inspector::protocol::Runtime::RemoteObject> >*)",93957342340688,93957342340842],["v8_inspector::InjectedScript::ProtocolPromiseHandler::add(v8_inspector::V8InspectorSessionImpl*, v8::Local<v8::Context>, v8::Local<v8::Value>, int, v8_inspector::String16 const&, v8_inspector::WrapMode, bool, v8_inspector::EvaluateCallback*)",93957342345344,93957342345785],["v8_inspector::InjectedScript::releaseObjectGroup(v8_inspector::String16 const&)",93957342347264,93957342347669],["v8_inspector::InjectedScript::lastEvaluationResult() const",93957342347696,93957342347765],["v8_inspector::operator+(char const*, v8_inspector::String16 const&)",93957342352032,93957342352148],["v8_inspector::InjectedScript::createExceptionDetails(v8::Local<v8::Message>, v8::Local<v8::Value>, v8_inspector::String16 const&, v8_crdtp::detail::PtrMaybe<v8_inspector::protocol::Runtime::ExceptionDetails>*)",93957342352496,93957342353916],["v8::internal::compiler::FunctionTemplateInfoData::FunctionTemplateInfoData(v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::FunctionTemplateInfo>)",93957343945520,93957343945876],["v8::internal::compiler::ObjectData::IsJSDataView() const",93957343983104,93957343983281],["v8::internal::compiler::ObjectData::IsArrayBoilerplateDescription() const",93957343987584,93957343987757],["v8::internal::compiler::operator==(v8::internal::compiler::ConstFieldInfo const&, v8::internal::compiler::ConstFieldInfo const&)",93957343994000,93957343994015],["v8::internal::compiler::JSHeapBroker::AttachLocalIsolate(v8::internal::OptimizedCompilationInfo*, v8::internal::LocalIsolate*)",93957343997360,93957343997649],["v8::internal::compiler::JSHeapBroker::ShouldBeSerializedForCompilation(v8::internal::compiler::SharedFunctionInfoRef const&, v8::internal::compiler::FeedbackVectorRef const&, v8::internal::ZoneVector<v8::internal::compiler::Hints> const&) const",93957343999328,93957344000107],["v8::internal::compiler::StringData* v8::internal::Zone::New<v8::internal::compiler::StringData, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::String> const>(v8::internal::compiler::JSHeapBroker*&&, v8::internal::compiler::ObjectData**&&, v8::internal::Handle<v8::internal::String> const&&)",93957344004176,93957344004266],["v8::internal::compiler::FeedbackVectorData* v8::internal::Zone::New<v8::internal::compiler::FeedbackVectorData, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::FeedbackVector> const>(v8::internal::compiler::JSHeapBroker*&&, v8::internal::compiler::ObjectData**&&, v8::internal::Handle<v8::internal::FeedbackVector> const&&)",93957344006144,93957344006405],["v8::internal::compiler::MapData* v8::internal::Zone::New<v8::internal::compiler::MapData, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::Map> const, v8::internal::compiler::ObjectDataKind&>(v8::internal::compiler::JSHeapBroker*&&, v8::internal::compiler::ObjectData**&&, v8::internal::Handle<v8::internal::Map> const&&, v8::internal::compiler::ObjectDataKind&)",93957344007120,93957344007231],["v8::internal::compiler::JSBoundFunctionData* v8::internal::Zone::New<v8::internal::compiler::JSBoundFunctionData, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::JSBoundFunction> const>(v8::internal::compiler::JSHeapBroker*&&, v8::internal::compiler::ObjectData**&&, v8::internal::Handle<v8::internal::JSBoundFunction> const&&)",93957344008016,93957344008410],["v8::internal::compiler::JSObjectData* v8::internal::Zone::New<v8::internal::compiler::JSObjectData, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::JSObject> const>(v8::internal::compiler::JSHeapBroker*&&, v8::internal::compiler::ObjectData**&&, v8::internal::Handle<v8::internal::JSObject> const&&)",93957344009408,93957344009774],["v8::internal::compiler::FixedArrayData* v8::internal::Zone::New<v8::internal::compiler::FixedArrayData, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::FixedArray> const>(v8::internal::compiler::JSHeapBroker*&&, v8::internal::compiler::ObjectData**&&, v8::internal::Handle<v8::internal::FixedArray> const&&)",93957344010768,93957344011025],["v8::internal::compiler::ObjectRef::IsJSArray() const",93957344011664,93957344011771],["v8::internal::compiler::ObjectRef::IsJSDataView() const",93957344012272,93957344012379],["v8::internal::compiler::ObjectRef::IsJSGlobalObject() const",93957344012880,93957344012987],["v8::internal::compiler::ObjectRef::IsNativeContext() const",93957344013408,93957344013515],["v8::internal::compiler::ObjectRef::IsScriptContextTable() const",93957344013824,93957344013931],["v8::internal::compiler::ObjectRef::AsFixedArray() const",93957344014048,93957344014240],["v8::internal::compiler::ObjectRef::AsFixedDoubleArray() const",93957344014352,93957344014544],["v8::internal::compiler::ObjectRef::AsJSObject() const",93957344014656,93957344014848],["v8::internal::compiler::ObjectRef::AsAllocationSite() const",93957344014960,93957344015152],["v8::internal::compiler::ObjectRef::IsJSReceiver() const",93957344015264,93957344015371],["v8::internal::compiler::ObjectRef::IsSourceTextModule() const",93957344015568,93957344015675],["v8::internal::compiler::ObjectRef::AsHeapObject() const",93957344015936,93957344016128],["v8::internal::compiler::ObjectRef::AsBigInt() const",93957344016240,93957344016432],["v8::internal::compiler::ObjectRef::AsHeapNumber() const",93957344016544,93957344016736],["v8::internal::compiler::ObjectRef::AsMap() const",93957344016848,93957344017040],["v8::internal::compiler::ObjectRef::AsPropertyCell() const",93957344017152,93957344017344],["v8::internal::compiler::ObjectRef::IsInternalizedString() const",93957344017456,93957344017563],["v8::internal::compiler::ObjectRef::IsString() const",93957344017680,93957344017787],["v8::internal::compiler::ObjectRef::IsSymbol() const",93957344017984,93957344018091],["v8::internal::compiler::ObjectRef::IsCallHandlerInfo() const",93957344018208,93957344018315],["authnone_create",139871564445632,139871564445730],["getrpcport",139871564448768,139871564448878],["pmap_getmaps",139871564449680,139871564450097],["xdr_pmaplist",139871564450208,139871564450444],["__finitel",139871565341360,139871565341375],["setpayloadf64x",139871565345760,139871565345978],["ufromfpxf64x",139871565348352,139871565348990],["crealf64x",139871565349056,139871565349061],["cacoshf64x",139871565349456,139871565350133],["ccoshf64x",139871565350176,139871565351298],["csinf64x",139871565351504,139871565352751],["csinhf64x",139871565355440,139871565356604],["std::__1::__hash_iterator<std::__1::__hash_node<std::__1::shared_ptr<v8::Worker>, void*>*> std::__1::__hash_table<std::__1::shared_ptr<v8::Worker>, std::__1::hash<std::__1::shared_ptr<v8::Worker> >, std::__1::equal_to<std::__1::shared_ptr<v8::Worker> >, std::__1::allocator<std::__1::shared_ptr<v8::Worker> > >::find<std::__1::shared_ptr<v8::Worker> >(std::__1::shared_ptr<v8::Worker> const&)",93957335214736,93957335215110],["v8::DelayedTasksPlatform::DelayedTaskRunner::PostDelayedTask(std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> >, double)",93957335215904,93957335216042],["v8::internal::RegExpGroup::IsAnchoredAtEnd()",93957335216208,93957335216223],["v8::DelayedTasksPlatform::DelayedTaskRunner::~DelayedTaskRunner()",93957335216304,93957335216380],["v8::internal::CodeEventDispatcher::CodeCreateEvent(v8::internal::CodeEventListener::LogEventsAndTags, v8::internal::wasm::WasmCode const*, v8::internal::Vector<char const>, char const*, int, int)",93957336677872,93957336678128],["void std::__1::__function::__policy_invoker<void (v8::internal::CodeEventListener*)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::CodeEventDispatcher::CodeCreateEvent(v8::internal::CodeEventListener::LogEventsAndTags, v8::internal::Handle<v8::internal::AbstractCode>, char const*)::{lambda(v8::internal::CodeEventListener*)#1}, void (v8::internal::CodeEventListener*)> >(std::__1::__function::__policy_storage const*, v8::internal::CodeEventListener*)",93957336680320,93957336680354],["void* std::__1::__function::__policy::__large_clone<std::__1::__function::__default_alloc_func<v8_inspector::V8Debugger::IsFunctionBlackboxed(v8::Local<v8::debug::Script>, v8::debug::Location const&, v8::debug::Location const&)::$_7, void (v8_inspector::V8InspectorSessionImpl*)> >(void const*)",93957336680624,93957336680672],["void std::__1::__function::__policy_invoker<void (v8::internal::CodeEventListener*)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::CodeEventDispatcher::GetterCallbackEvent(v8::internal::Handle<v8::internal::Name>, unsigned long)::{lambda(v8::internal::CodeEventListener*)#1}, void (v8::internal::CodeEventListener*)> >(std::__1::__function::__policy_storage const*, v8::internal::CodeEventListener*)",93957336680816,93957336680843],["void std::__1::__function::__policy_invoker<void (v8::internal::CodeEventListener*)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::CodeEventDispatcher::CodeMoveEvent(v8::internal::AbstractCode, v8::internal::AbstractCode)::{lambda(v8::internal::CodeEventListener*)#1}, void (v8::internal::CodeEventListener*)> >(std::__1::__function::__policy_storage const*, v8::internal::CodeEventListener*)",93957336680912,93957336680939],["void std::__1::__function::__policy_invoker<void (v8::internal::CodeEventListener*)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::CodeEventDispatcher::CodeMovingGCEvent()::{lambda(v8::internal::CodeEventListener*)#1}, void (v8::internal::CodeEventListener*)> >(std::__1::__function::__policy_storage const*, v8::internal::CodeEventListener*)",93957336680976,93957336680990],["void std::__1::__function::__policy_invoker<void (v8::internal::CodeEventListener*)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::CodeEventDispatcher::CodeDeoptEvent(v8::internal::Handle<v8::internal::Code>, v8::internal::DeoptimizeKind, unsigned long, int, bool)::{lambda(v8::internal::CodeEventListener*)#1}, void (v8::internal::CodeEventListener*)> >(std::__1::__function::__policy_storage const*, v8::internal::CodeEventListener*)",93957336681024,93957336681068],["void std::__1::__function::__policy_invoker<void (v8::internal::CodeEventListener*)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::CodeEventDispatcher::WeakCodeClearEvent()::{lambda(v8::internal::CodeEventListener*)#1}, void (v8::internal::CodeEventListener*)> >(std::__1::__function::__policy_storage const*, v8::internal::CodeEventListener*)",93957336681120,93957336681137],["v8::internal::BaseConsumedPreparseData<v8::internal::ZoneVectorWrapper>::~BaseConsumedPreparseData()",93957339460800,93957339460842],["v8::internal::PreParser::ReportMessageAt(v8::internal::Scanner::Location, v8::internal::MessageTemplate, char const*)",93957339473504,93957339473605],["v8::internal::ParserBase<v8::internal::PreParser>::ParseLeftHandSideContinuation(v8::internal::PreParserExpression)",93957339482688,93957339484175],["v8::internal::ParserBase<v8::internal::PreParser>::ParseRegExpLiteral()",93957339489776,93957339489879],["v8::internal::ParserBase<v8::internal::PreParser>::ParseExpressionCoverGrammar()",93957339493504,93957339494208],["v8::internal::ExpressionScope<v8::internal::ParserTypes<v8::internal::PreParser> >::RecordStrictModeParameterError(v8::internal::Scanner::Location const&, v8::internal::MessageTemplate)",93957339495584,93957339495754],["v8::internal::ParserBase<v8::internal::PreParser>::ParseNewTargetExpression()",93957339497008,93957339497202],["v8::internal::ParserBase<v8::internal::PreParser>::ClassifyArrowParameter(v8::internal::AccumulationScope<v8::internal::ParserTypes<v8::internal::PreParser> >*, int, v8::internal::PreParserExpression)",93957339500064,93957339500547],["v8::internal::ExpressionScope<v8::internal::ParserTypes<v8::internal::PreParser> >::RecordDeclarationError(v8::internal::Scanner::Location const&, v8::internal::MessageTemplate)",93957339502176,93957339502314],["v8::internal::ParserBase<v8::internal::PreParser>::ParseLogicalExpression()",93957339502624,93957339503134],["v8::internal::ParserBase<v8::internal::PreParser>::ParseBinaryContinuation(v8::internal::PreParserExpression, int, int)",93957339503888,93957339505432],["v8::internal::ParserBase<v8::internal::PreParser>::ParsePropertyOrPrivatePropertyName()",93957339505984,93957339506190],["v8::internal::ParserBase<v8::internal::PreParser>::ParseUnaryOrPrefixExpression()",93957339506320,93957339507225],["v8::internal::ParserBase<v8::internal::PreParser>::ParsePostfixContinuation(v8::internal::PreParserExpression, int)",93957339508080,93957339508307],["v8::internal::ParserBase<v8::internal::PreParser>::ReportMessageAt(v8::internal::Scanner::Location, v8::internal::MessageTemplate)",93957339508656,93957339508757],["v8::internal::ParserBase<v8::internal::PreParser>::ParseObjectPropertyDefinition(v8::internal::ParserBase<v8::internal::PreParser>::ParsePropertyInfo*, bool*)",93957339509776,93957339511715],["v8_inspector::protocol::Schema::Domain::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342325264,93957342325399],["v8_inspector::(anonymous namespace)::substituteObjectTags(int, v8_inspector::String16 const&, v8::Local<v8::Context>, v8::Local<v8::Array>, int)",93957342329312,93957342330737],["v8_inspector::InjectedScript::discardEvaluateCallbacks()",93957342333088,93957342333555],["v8_inspector::InjectedScript::bindRemoteObjectIfNeeded(int, v8::Local<v8::Context>, v8::Local<v8::Value>, v8_inspector::String16 const&, v8_inspector::protocol::Runtime::RemoteObject*)",93957342336304,93957342337426],["v8_inspector::InjectedScript::unbindObject(int)",93957342339776,93957342340684],["v8_inspector::InjectedScript::wrapObject(v8::Local<v8::Value>, v8_inspector::String16 const&, v8_inspector::WrapMode, v8::MaybeLocal<v8::Value>, int, std::__1::unique_ptr<v8_inspector::protocol::Runtime::RemoteObject, std::__1::default_delete<v8_inspector::protocol::Runtime::RemoteObject> >*)",93957342340848,93957342341005],["v8_inspector::InjectedScript::addPromiseCallback(v8_inspector::V8InspectorSessionImpl*, v8::MaybeLocal<v8::Value>, v8_inspector::String16 const&, v8_inspector::WrapMode, bool, std::__1::unique_ptr<v8_inspector::EvaluateCallback, std::__1::default_delete<v8_inspector::EvaluateCallback> >)",93957342345072,93957342345337],["v8_inspector::InjectedScript::findObject(v8_inspector::RemoteObjectId const&, v8::Local<v8::Value>*) const",93957342345792,93957342346318],["v8::internal::compiler::JSGraph::HeapConstant(v8::internal::Handle<v8::internal::HeapObject>)",93957343918432,93957343918517],["v8::internal::compiler::StringData::GetCharAsStringOrUndefined(v8::internal::compiler::JSHeapBroker*, unsigned int, v8::internal::compiler::SerializationPolicy)",93957343957824,93957343958896],["v8::internal::compiler::SharedFunctionInfoData::SharedFunctionInfoData(v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957343974640,93957343975672],["v8::internal::compiler::ObjectData::IsFixedDoubleArray() const",93957343984624,93957343984801],["v8::internal::compiler::ObjectData::IsBytecodeArray() const",93957343986864,93957343987041],["v8::internal::compiler::ObjectData::IsDescriptorArray() const",93957343988320,93957343988498],["v8::internal::compiler::ObjectData::AsHeapObject()",93957343989776,93957343989945],["v8::internal::compiler::ContextRef::ContextRef(v8::internal::compiler::JSHeapBroker*, v8::internal::Handle<v8::internal::Object>, v8::internal::compiler::ObjectRef::BackgroundSerialization, bool)",93957343994688,93957343994864],["v8::internal::compiler::JSHeapBroker::JSHeapBroker(v8::internal::Isolate*, v8::internal::Zone*, bool, bool, v8::internal::CodeKind)",93957343996224,93957343997127],["v8::internal::compiler::JSHeapBroker::StopSerializing()",93957343997824,93957343998226],["v8::internal::compiler::JSHeapBroker::CollectArrayAndObjectPrototypes()",93957343998912,93957343999218],["v8::internal::compiler::JSHeapBroker::IsSerializedForCompilation(v8::internal::compiler::SharedFunctionInfoRef const&, v8::internal::compiler::FeedbackVectorRef const&) const",93957344001104,93957344001243],["v8::internal::compiler::ObjectBoilerplateDescriptionData* v8::internal::Zone::New<v8::internal::compiler::ObjectBoilerplateDescriptionData, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::ObjectBoilerplateDescription> const>(v8::internal::compiler::JSHeapBroker*&&, v8::internal::compiler::ObjectData**&&, v8::internal::Handle<v8::internal::ObjectBoilerplateDescription> const&&)",93957344003632,93957344003878],["v8::internal::compiler::SymbolData* v8::internal::Zone::New<v8::internal::compiler::SymbolData, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::Symbol> const>(v8::internal::compiler::JSHeapBroker*&&, v8::internal::compiler::ObjectData**&&, v8::internal::Handle<v8::internal::Symbol> const&&)",93957344004560,93957344004782],["v8::internal::compiler::DescriptorArrayData* v8::internal::Zone::New<v8::internal::compiler::DescriptorArrayData, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::DescriptorArray> const>(v8::internal::compiler::JSHeapBroker*&&, v8::internal::compiler::ObjectData**&&, v8::internal::Handle<v8::internal::DescriptorArray> const&&)",93957344005584,93957344005835],["v8::internal::compiler::RegExpBoilerplateDescriptionData* v8::internal::Zone::New<v8::internal::compiler::RegExpBoilerplateDescriptionData, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::RegExpBoilerplateDescription> const>(v8::internal::compiler::JSHeapBroker*&&, v8::internal::compiler::ObjectData**&&, v8::internal::Handle<v8::internal::RegExpBoilerplateDescription> const&&)",93957344006512,93957344006742],["v8::internal::compiler::HeapNumberData* v8::internal::Zone::New<v8::internal::compiler::HeapNumberData, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::HeapNumber> const, v8::internal::compiler::ObjectDataKind&>(v8::internal::compiler::JSHeapBroker*&&, v8::internal::compiler::ObjectData**&&, v8::internal::Handle<v8::internal::HeapNumber> const&&, v8::internal::compiler::ObjectDataKind&)",93957344006992,93957344007114],["v8::internal::compiler::PropertyCellData* v8::internal::Zone::New<v8::internal::compiler::PropertyCellData, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::PropertyCell> const, v8::internal::compiler::ObjectDataKind>(v8::internal::compiler::JSHeapBroker*&&, v8::internal::compiler::ObjectData**&&, v8::internal::Handle<v8::internal::PropertyCell> const&&, v8::internal::compiler::ObjectDataKind&&)",93957344007232,93957344007353],["v8::internal::compiler::JSArrayData* v8::internal::Zone::New<v8::internal::compiler::JSArrayData, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::JSArray> const>(v8::internal::compiler::JSHeapBroker*&&, v8::internal::compiler::ObjectData**&&, v8::internal::Handle<v8::internal::JSArray> const&&)",93957344007600,93957344008016],["v8::internal::compiler::JSDataViewData* v8::internal::Zone::New<v8::internal::compiler::JSDataViewData, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::JSDataView> const>(v8::internal::compiler::JSHeapBroker*&&, v8::internal::compiler::ObjectData**&&, v8::internal::Handle<v8::internal::JSDataView> const&&)",93957344008416,93957344008796],["v8::internal::compiler::JSGlobalObjectData* v8::internal::Zone::New<v8::internal::compiler::JSGlobalObjectData, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::JSGlobalObject> const>(v8::internal::compiler::JSHeapBroker*&&, v8::internal::compiler::ObjectData**&&, v8::internal::Handle<v8::internal::JSGlobalObject> const&&)",93957344008896,93957344009398],["v8::internal::compiler::JSTypedArrayData* v8::internal::Zone::New<v8::internal::compiler::JSTypedArrayData, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::JSTypedArray> const>(v8::internal::compiler::JSHeapBroker*&&, v8::internal::compiler::ObjectData**&&, v8::internal::Handle<v8::internal::JSTypedArray> const&&)",93957344009776,93957344010172],["v8::internal::compiler::ContextData* v8::internal::Zone::New<v8::internal::compiler::ContextData, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::Context> const>(v8::internal::compiler::JSHeapBroker*&&, v8::internal::compiler::ObjectData**&&, v8::internal::Handle<v8::internal::Context> const&&)",93957344010512,93957344010762],["v8::internal::compiler::AllocationSiteData* v8::internal::Zone::New<v8::internal::compiler::AllocationSiteData, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::AllocationSite> const>(v8::internal::compiler::JSHeapBroker*&&, v8::internal::compiler::ObjectData**&&, v8::internal::Handle<v8::internal::AllocationSite> const&&)",93957344011040,93957344011130],["v8::internal::compiler::SourceTextModuleData* v8::internal::Zone::New<v8::internal::compiler::SourceTextModuleData, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::SourceTextModule> const>(v8::internal::compiler::JSHeapBroker*&&, v8::internal::compiler::ObjectData**&&, v8::internal::Handle<v8::internal::SourceTextModule> const&&)",93957344011376,93957344011650],["v8::internal::compiler::ObjectRef::AsJSArray() const",93957344011776,93957344011968],["v8::internal::compiler::ObjectRef::AsJSBoundFunction() const",93957344012080,93957344012272],["v8::internal::compiler::ObjectRef::AsJSDataView() const",93957344012384,93957344012576],["v8::internal::compiler::ObjectRef::AsJSFunction() const",93957344012688,93957344012880],["v8::internal::compiler::ObjectRef::IsJSGlobalProxy() const",93957344012992,93957344013099],["v8::internal::compiler::ObjectRef::AsJSTypedArray() const",93957344013216,93957344013408],["v8::internal::compiler::ObjectRef::IsContext() const",93957344013520,93957344013627],["__nss_hosts_lookup2",139871564443536,139871564443666],["bindresvport",139871564445888,139871564447069],["_rpc_dtablesize",139871564448720,139871564448756],["pmap_set",139871564449088,139871564449402],["nearbyintf64x",139871565336832,139871565336856],["__signbitl",139871565341920,139871565341936],["totalordermagf64x",139871565345696,139871565345720],["roundevenf64x",139871565346192,139871565346599],["fromfpxf64x",139871565347744,139871565348340],["cargf64x",139871565348992,139871565349013],["cimagf64x",139871565349040,139871565349045],["cabsf64x",139871565349072,139871565349077],["v8::DelayedTasksPlatform::DelayedTaskRunnerDeleter::operator()(v8::DelayedTasksPlatform::DelayedTaskRunner*) const",93957335214544,93957335214721],["std::__1::__hash_table<int, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<int> >::remove(std::__1::__hash_const_iterator<std::__1::__hash_node<int, void*>*>)",93957335215120,93957335215633],["v8::DelayedTasksPlatform::DelayedTaskRunner::PostNonNestableTask(std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> >)",93957335215776,93957335215896],["v8::TaskRunner::PostNonNestableTask(std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> >)",93957335216048,93957335216069],["v8::internal::TracingAccountingAllocator::UpdateMemoryTrafficAndReportMemoryUsage(unsigned long)",93957336675424,93957336675896],["v8::internal::CodeEventDispatcher::RegExpCodeCreateEvent(v8::internal::Handle<v8::internal::AbstractCode>, v8::internal::Handle<v8::internal::String>)",93957336678704,93957336678892],["v8::internal::CodeEventDispatcher::CodeDependencyChangeEvent(v8::internal::Handle<v8::internal::Code>, v8::internal::Handle<v8::internal::SharedFunctionInfo>, char const*)",93957336679904,93957336680126],["void std::__1::__function::__policy_invoker<void (v8::internal::CodeEventListener*)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::CodeEventDispatcher::CodeCreateEvent(v8::internal::CodeEventListener::LogEventsAndTags, v8::internal::Handle<v8::internal::AbstractCode>, v8::internal::Handle<v8::internal::Name>)::{lambda(v8::internal::CodeEventListener*)#1}, void (v8::internal::CodeEventListener*)> >(std::__1::__function::__policy_storage const*, v8::internal::CodeEventListener*)",93957336680416,93957336680450],["void std::__1::__function::__policy_invoker<void (v8::internal::CodeEventListener*)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::CodeEventDispatcher::CodeCreateEvent(v8::internal::CodeEventListener::LogEventsAndTags, v8::internal::Handle<v8::internal::AbstractCode>, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::Name>, int, int)::{lambda(v8::internal::CodeEventListener*)#1}, void (v8::internal::CodeEventListener*)> >(std::__1::__function::__policy_storage const*, v8::internal::CodeEventListener*)",93957336680560,93957336680614],["void std::__1::__function::__policy_invoker<void (v8::internal::CodeEventListener*)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::CodeEventDispatcher::CodeCreateEvent(v8::internal::CodeEventListener::LogEventsAndTags, v8::internal::wasm::WasmCode const*, v8::internal::Vector<char const>, char const*, int, int)::{lambda(v8::internal::CodeEventListener*)#1}, void (v8::internal::CodeEventListener*)> >(std::__1::__function::__policy_storage const*, v8::internal::CodeEventListener*)",93957336680672,93957336680730],["void std::__1::__function::__policy_invoker<void (v8::internal::CodeEventListener*)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::CodeEventDispatcher::CallbackEvent(v8::internal::Handle<v8::internal::Name>, unsigned long)::{lambda(v8::internal::CodeEventListener*)#1}, void (v8::internal::CodeEventListener*)> >(std::__1::__function::__policy_storage const*, v8::internal::CodeEventListener*)",93957336680784,93957336680811],["void std::__1::__function::__policy_invoker<void (v8::internal::CodeEventListener*)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::CodeEventDispatcher::SetterCallbackEvent(v8::internal::Handle<v8::internal::Name>, unsigned long)::{lambda(v8::internal::CodeEventListener*)#1}, void (v8::internal::CodeEventListener*)> >(std::__1::__function::__policy_storage const*, v8::internal::CodeEventListener*)",93957336680848,93957336680875],["v8::internal::PreparseDataBuilder::Serialize(v8::internal::Isolate*)",93957339457248,93957339457564],["v8::internal::ZoneProducedPreparseData::Serialize(v8::internal::LocalIsolate*)",93957339461824,93957339461838],["v8::internal::PreParser::ParseFunctionLiteral(v8::internal::PreParserIdentifier, v8::internal::Scanner::Location, v8::internal::FunctionNameValidity, v8::internal::FunctionKind, int, v8::internal::FunctionSyntaxKind, v8::internal::LanguageMode, v8::internal::ZoneList<v8::internal::AstRawString const*>*)",93957339468512,93957339470270],["v8::internal::ParserBase<v8::internal::PreParser>::ParseHoistableDeclaration(int, v8::base::Flags<v8::internal::ParseFunctionFlag, int>, v8::internal::ZoneList<v8::internal::AstRawString const*>*, bool)",93957339477184,93957339478031],["v8::internal::ParserBase<v8::internal::PreParser>::ParseClassPropertyDefinition(v8::internal::ParserBase<v8::internal::PreParser>::ClassInfo*, v8::internal::ParserBase<v8::internal::PreParser>::ParsePropertyInfo*, bool)",93957339481360,93957339482573],["v8::internal::ParserBase<v8::internal::PreParser>::ParseAsyncFunctionLiteral()",93957339487408,93957339487975],["v8::internal::ExpressionParsingScope<v8::internal::ParserTypes<v8::internal::PreParser> >::~ExpressionParsingScope()",93957339489168,93957339489256],["v8::internal::ParserBase<v8::internal::PreParser>::ParseSuperExpression()",93957339490384,93957339491168],["v8::internal::ParserBase<v8::internal::PreParser>::ParseObjectLiteral()",93957339492592,93957339493498],["v8::internal::ArrowHeadParsingScope<v8::internal::ParserTypes<v8::internal::PreParser> >::ValidateExpression()",93957339494208,93957339494479],["v8::internal::ParserBase<v8::internal::PreParser>::ParseV8Intrinsic()",93957339495280,93957339495577],["v8::internal::ExpressionScope<v8::internal::ParserTypes<v8::internal::PreParser> >::NewVariable(v8::internal::AstRawString const*, int)",93957339495760,93957339496408],["v8::internal::ExpressionParsingScope<v8::internal::ParserTypes<v8::internal::PreParser> >::Validate(int)",93957339496880,93957339497001],["v8::internal::ParserBase<v8::internal::PreParser>::ParseArguments(v8::internal::PreParserExpressionList*, bool*, v8::internal::ParsingArrowHeadFlag)",93957339497216,93957339498269],["v8::internal::ParserBase<v8::internal::PreParser>::ParseAssignmentExpressionCoverGrammar()",93957339498480,93957339500051],["v8::internal::ParserBase<v8::internal::PreParser>::ParseYieldExpression()",93957339500560,93957339501109],["v8_inspector::protocol::Runtime::(anonymous namespace)::evaluateParams::deserializer_descriptor()::$_94::__invoke(v8_crdtp::DeserializerState*, void*)",93957342324880,93957342324919],["v8_inspector::protocol::Schema::Dispatcher::wire(v8_crdtp::UberDispatcher*, v8_inspector::protocol::Schema::Backend*)",93957342326464,93957342326632],["v8_inspector::(anonymous namespace)::reportError(v8::Local<v8::Context>, v8::TryCatch const&)",93957342328880,93957342329219],["v8_inspector::(anonymous namespace)::getInjectedScript(v8::Local<v8::Context>, int)",93957342331824,93957342331913],["v8_inspector::InjectedScript::~InjectedScript()",93957342332688,93957342333087],["v8_inspector::InjectedScript::getProperties(v8::Local<v8::Object>, v8_inspector::String16 const&, bool, bool, v8_inspector::WrapMode, std::__1::unique_ptr<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::PropertyDescriptor, std::__1::default_delete<v8_inspector::protocol::Runtime::PropertyDescriptor> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::PropertyDescriptor, std::__1::default_delete<v8_inspector::protocol::Runtime::PropertyDescriptor> > > >, std::__1::default_delete<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::PropertyDescriptor, std::__1::default_delete<v8_inspector::protocol::Runtime::PropertyDescriptor> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::PropertyDescriptor, std::__1::default_delete<v8_inspector::protocol::Runtime::PropertyDescriptor> > > > > >*, v8_crdtp::detail::PtrMaybe<v8_inspector::protocol::Runtime::ExceptionDetails>*)",93957342333568,93957342335686],["v8_inspector::InjectedScript::wrapObjectMirror(v8_inspector::ValueMirror const&, v8_inspector::String16 const&, v8_inspector::WrapMode, v8::MaybeLocal<v8::Value>, int, std::__1::unique_ptr<v8_inspector::protocol::Runtime::RemoteObject, std::__1::default_delete<v8_inspector::protocol::Runtime::RemoteObject> >*)",93957342335824,93957342336289],["v8_inspector::InjectedScript::getInternalAndPrivateProperties(v8::Local<v8::Value>, v8_inspector::String16 const&, std::__1::unique_ptr<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::InternalPropertyDescriptor, std::__1::default_delete<v8_inspector::protocol::Runtime::InternalPropertyDescriptor> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::InternalPropertyDescriptor, std::__1::default_delete<v8_inspector::protocol::Runtime::InternalPropertyDescriptor> > > >, std::__1::default_delete<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::InternalPropertyDescriptor, std::__1::default_delete<v8_inspector::protocol::Runtime::InternalPropertyDescriptor> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::InternalPropertyDescriptor, std::__1::default_delete<v8_inspector::protocol::Runtime::InternalPropertyDescriptor> > > > > >*, std::__1::unique_ptr<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::PrivatePropertyDescriptor, std::__1::default_delete<v8_inspector::protocol::Runtime::PrivatePropertyDescriptor> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::PrivatePropertyDescriptor, std::__1::default_delete<v8_inspector::protocol::Runtime::PrivatePropertyDescriptor> > > >, std::__1::default_delete<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::PrivatePropertyDescriptor, std::__1::default_delete<v8_inspector::protocol::Runtime::PrivatePropertyDescriptor> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::PrivatePropertyDescriptor, std::__1::default_delete<v8_inspector::protocol::Runtime::PrivatePropertyDescriptor> > > > > >*)",93957342337440,93957342339644],["v8::internal::compiler::JSGenericLowering::LowerJSLoadNamedFromSuper(v8::internal::compiler::Node*)",93957343903968,93957343904773],["v8::internal::compiler::JSGraph::BigIntMapConstant()",93957343943376,93957343943492],["v8::internal::compiler::JSObjectData::GetOwnConstantElement(v8::internal::compiler::JSHeapBroker*, unsigned int, v8::internal::compiler::SerializationPolicy)",93957343952112,93957343953168],["v8::internal::compiler::MapData::SerializeElementsKindGeneralizations(v8::internal::compiler::JSHeapBroker*)",93957343962368,93957343963307],["v8::internal::compiler::FixedArrayData::SerializeContents(v8::internal::compiler::JSHeapBroker*)",93957343969856,93957343971628],["v8::internal::compiler::SourceTextModuleData::Serialize(v8::internal::compiler::JSHeapBroker*)",93957343977088,93957343981245],["v8::internal::compiler::ObjectData::IsNativeContext() const",93957343983872,93957343984049],["v8::internal::compiler::ObjectData::IsSourceTextModule() const",93957343985376,93957343985553],["v8::internal::compiler::ObjectData::IsScopeInfo() const",93957343986496,93957343986673],["v8::internal::compiler::ObjectData::IsSymbol() const",93957343987232,93957343987405],["v8::internal::compiler::ObjectData::IsCell() const",93957343987936,93957343988113],["v8::internal::compiler::ObjectData::IsFeedbackVector() const",93957343988688,93957343988865],["v8::internal::compiler::ObjectData::IsSharedFunctionInfo() const",93957343989408,93957343989585],["v8::internal::compiler::JSObjectData::SerializeElements(v8::internal::compiler::JSHeapBroker*)",93957343993600,93957343993796],["v8::internal::compiler::ObjectRef::isolate() const",93957343994080,93957343994093],["v8::internal::compiler::ContextRef::GetModule(v8::internal::compiler::SerializationPolicy) const",93957343995360,93957343995600],["v8::internal::compiler::ObjectRef::AsSourceTextModule() const",93957343996032,93957343996224],["v8::internal::compiler::JSHeapBroker::~JSHeapBroker()",93957343997136,93957343997355],["v8::internal::compiler::JSHeapBroker::DetachLocalIsolate(v8::internal::OptimizedCompilationInfo*)",93957343997664,93957343997810],["v8::internal::compiler::JSHeapBroker::Retire()",93957343998240,93957343998642],["v8::internal::compiler::NativeContextRef::NativeContextRef(v8::internal::compiler::JSHeapBroker*, v8::internal::Handle<v8::internal::Object>, v8::internal::compiler::ObjectRef::BackgroundSerialization, bool)",93957343998736,93957343998912],["v8::internal::compiler::JSHeapBroker::GetTypedArrayStringTag(v8::internal::ElementsKind)",93957343999232,93957343999319],["v8::internal::compiler::JSHeapBroker::SetSerializedForCompilation(v8::internal::compiler::SharedFunctionInfoRef const&, v8::internal::compiler::FeedbackVectorRef const&, v8::internal::ZoneVector<v8::internal::compiler::Hints> const&)",93957344000112,93957344001094],["v8::internal::compiler::JSHeapBroker::IsArrayOrObjectPrototype(v8::internal::compiler::JSObjectRef const&) const",93957344001248,93957344001783],["v8::internal::compiler::ObjectData* v8::internal::Zone::New<v8::internal::compiler::ObjectData, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::Object>&, v8::internal::compiler::ObjectDataKind>(v8::internal::compiler::JSHeapBroker*&&, v8::internal::compiler::ObjectData**&&, v8::internal::Handle<v8::internal::Object>&, v8::internal::compiler::ObjectDataKind&&)",93957344003520,93957344003626],["v8::internal::compiler::ScopeInfoData* v8::internal::Zone::New<v8::internal::compiler::ScopeInfoData, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::ScopeInfo> const>(v8::internal::compiler::JSHeapBroker*&&, v8::internal::compiler::ObjectData**&&, v8::internal::Handle<v8::internal::ScopeInfo> const&&)",93957344003888,93957344004172],["v8::internal::compiler::BytecodeArrayData* v8::internal::Zone::New<v8::internal::compiler::BytecodeArrayData, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::BytecodeArray> const>(v8::internal::compiler::JSHeapBroker*&&, v8::internal::compiler::ObjectData**&&, v8::internal::Handle<v8::internal::BytecodeArray> const&&)",93957344004272,93957344004560],["v8::internal::compiler::ArrayBoilerplateDescriptionData* v8::internal::Zone::New<v8::internal::compiler::ArrayBoilerplateDescriptionData, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::ArrayBoilerplateDescription> const>(v8::internal::compiler::JSHeapBroker*&&, v8::internal::compiler::ObjectData**&&, v8::internal::Handle<v8::internal::ArrayBoilerplateDescription> const&&)",93957344004784,93957344005028],["v8::internal::compiler::CodeData* v8::internal::Zone::New<v8::internal::compiler::CodeData, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::Code> const>(v8::internal::compiler::JSHeapBroker*&&, v8::internal::compiler::ObjectData**&&, v8::internal::Handle<v8::internal::Code> const&&)",93957344005312,93957344005575],["v8::internal::compiler::FeedbackCellData* v8::internal::Zone::New<v8::internal::compiler::FeedbackCellData, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::FeedbackCell> const>(v8::internal::compiler::JSHeapBroker*&&, v8::internal::compiler::ObjectData**&&, v8::internal::Handle<v8::internal::FeedbackCell> const&&)",93957344005840,93957344006130],["v8::internal::compiler::FunctionTemplateInfoData* v8::internal::Zone::New<v8::internal::compiler::FunctionTemplateInfoData, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::FunctionTemplateInfo> const>(v8::internal::compiler::JSHeapBroker*&&, v8::internal::compiler::ObjectData**&&, v8::internal::Handle<v8::internal::FunctionTemplateInfo> const&&)",93957344006416,93957344006506],["v8::internal::compiler::SharedFunctionInfoData* v8::internal::Zone::New<v8::internal::compiler::SharedFunctionInfoData, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::SharedFunctionInfo> const>(v8::internal::compiler::JSHeapBroker*&&, v8::internal::compiler::ObjectData**&&, v8::internal::Handle<v8::internal::SharedFunctionInfo> const&&)",93957344006752,93957344006847],["__nss_next2",139871564439072,139871564439326],["__nss_passwd_lookup2",139871564443968,139871564444098],["xdr_authunix_parms",139871564445744,139871564445873],["clntraw_create",139871564447776,139871564448104],["sinf64x",139871565334672,139871565335029],["lroundf64x",139871565340416,139871565340686],["modff64x",139871565341408,139871565341738],["nextupf64x",139871565345088,139871565345399],["totalordermagf64x",139871565345584,139871565345682],["getpayloadf64x",139871565345728,139871565345751],["setpayloadsigf64x",139871565345984,139871565346183],["fromfpf64x",139871565346608,139871565347132],["std::__1::__shared_ptr_emplace<v8::internal::wasm::GlobalWasmCodeRef, std::__1::allocator<v8::internal::wasm::GlobalWasmCodeRef> >::__on_zero_shared()",93957336673808,93957336673888],["v8::internal::CodeEventDispatcher::CodeCreateEvent(v8::internal::CodeEventListener::LogEventsAndTags, v8::internal::Handle<v8::internal::AbstractCode>, char const*)",93957336676960,93957336677182],["v8::internal::CodeEventDispatcher::GetterCallbackEvent(v8::internal::Handle<v8::internal::Name>, unsigned long)",93957336678320,93957336678508],["v8::internal::CodeEventDispatcher::SharedFunctionInfoMoveEvent(unsigned long, unsigned long)",93957336679088,93957336679276],["v8::internal::CodeEventDispatcher::CodeDeoptEvent(v8::internal::Handle<v8::internal::Code>, v8::internal::DeoptimizeKind, unsigned long, int, bool)",93957336679664,93957336679904],["v8::internal::CodeEventDispatcher::WeakCodeClearEvent()",93957336680128,93957336680316],["void* std::__1::__function::__policy::__large_clone<std::__1::__function::__default_alloc_func<v8_inspector::V8RuntimeAgentImpl::addBinding(v8_inspector::String16 const&, v8_crdtp::detail::ValueMaybe<int>, v8_crdtp::detail::ValueMaybe<v8_inspector::String16>)::$_0, void (v8_inspector::InspectedContext*)> >(void const*)",93957336680368,93957336680408],["void std::__1::__function::__policy_invoker<void (v8::internal::CodeEventListener*)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::CodeEventDispatcher::CodeCreateEvent(v8::internal::CodeEventListener::LogEventsAndTags, v8::internal::Handle<v8::internal::AbstractCode>, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::Name>)::{lambda(v8::internal::CodeEventListener*)#1}, void (v8::internal::CodeEventListener*)> >(std::__1::__function::__policy_storage const*, v8::internal::CodeEventListener*)",93957336680464,93957336680502],["v8::internal::PendingCompilationErrorHandler::ReportWarningAt(int, int, v8::internal::MessageTemplate, char const*)",93957339452016,93957339452116],["v8::internal::ZonePreparseData::Serialize(v8::internal::LocalIsolate*)",93957339459264,93957339459561],["v8::internal::BuilderProducedPreparseData::Serialize(v8::internal::Isolate*)",93957339461760,93957339461774],["v8::internal::ParserBase<v8::internal::PreParser>::CheckStrictOctalLiteral(int, int)",93957339464336,93957339464536],["v8::internal::ParserBase<v8::internal::PreParser>::NewVarblockScope() const",93957339467984,93957339468088],["v8::internal::ParserBase<v8::internal::PreParser>::ParseFunctionBody(v8::internal::PreParserScopedStatementList*, v8::internal::PreParserIdentifier, int, v8::internal::PreParserFormalParameters const&, v8::internal::FunctionKind, v8::internal::FunctionSyntaxKind, v8::internal::ParserBase<v8::internal::PreParser>::FunctionBodyType)",93957339470448,93957339473057],["v8::internal::ParserBase<v8::internal::PreParser>::IsNextLetKeyword()",93957339474416,93957339474497],["v8::internal::ParserBase<v8::internal::PreParser>::ReportUnexpectedToken(v8::internal::Token::Value)",93957339478160,93957339478236],["v8::internal::ParserBase<v8::internal::PreParser>::ParseClassStaticBlock(v8::internal::ParserBase<v8::internal::PreParser>::ClassInfo*)",93957339480848,93957339481351],["v8::internal::PreParser::ReportMessageAt(v8::internal::Scanner::Location, v8::internal::MessageTemplate, v8::internal::AstRawString const*)",93957339482576,93957339482677],["v8::internal::ParserBase<v8::internal::PreParser>::ParsePrimaryExpression()",93957339484176,93957339487404],["v8::internal::ArrowHeadParsingScope<v8::internal::ParserTypes<v8::internal::PreParser> >::ArrowHeadParsingScope(v8::internal::PreParser*, v8::internal::FunctionKind)",93957339487984,93957339488165],["v8::internal::ArrowHeadParsingScope<v8::internal::ParserTypes<v8::internal::PreParser> >::ValidateAndCreateScope()",93957339488384,93957339489160],["v8::internal::ParserBase<v8::internal::PreParser>::ParseMemberWithPresentNewPrefixesExpression()",93957339489264,93957339489765],["v8::internal::ParserBase<v8::internal::PreParser>::ParseFunctionExpression()",93957339489888,93957339490375],["v8::internal::ParserBase<v8::internal::PreParser>::ParseImportExpressions()",93957339491168,93957339491650],["v8_inspector::protocol::Runtime::(anonymous namespace)::runScriptParams::deserializer_descriptor()::$_115::__invoke(v8_crdtp::DeserializerState*, void*)",93957342324528,93957342324567],["v8_inspector::protocol::Runtime::(anonymous namespace)::evaluateParams::deserializer_descriptor()::$_100::__invoke(v8_crdtp::DeserializerState*, void*)",93957342325072,93957342325115],["v8_inspector::protocol::Schema::DomainDispatcherImpl::Dispatch(v8_crdtp::span<unsigned char>)",93957342325552,93957342325954],["v8_inspector::protocol::Schema::Domain::~Domain()",93957342326720,93957342326802],["v8_inspector::generateCustomPreview(int, v8_inspector::String16 const&, v8::Local<v8::Object>, v8::MaybeLocal<v8::Value>, int, std::__1::unique_ptr<v8_inspector::protocol::Runtime::CustomPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::CustomPreview> >*)",93957342326992,93957342328876],["v8_inspector::(anonymous namespace)::reportError(v8::Local<v8::Context>, v8::TryCatch const&, v8_inspector::String16 const&)",93957342329232,93957342329301],["v8_inspector::(anonymous namespace)::bodyCallback(v8::FunctionCallbackInfo<v8::Value> const&)",93957342330752,93957342331822],["v8_inspector::protocol::Runtime::CustomPreview::setBodyGetterId(v8_inspector::String16 const&)",93957342331920,93957342332576],["v8::internal::compiler::JSGenericLowering::Reduce(v8::internal::compiler::Node*)",93957343896848,93957343898124],["v8::internal::compiler::JSGenericLowering::LowerJSCallWithArrayLike(v8::internal::compiler::Node*)",93957343910080,93957343911458],["v8::internal::compiler::JSGraph::ZeroConstant()",93957343920368,93957343920506],["v8::internal::compiler::JSGraph::HeapNumberMapConstant()",93957343944416,93957343944532],["v8::internal::compiler::JSHeapBroker::ObjectMayBeUninitialized(v8::internal::Handle<v8::internal::Object>) const",93957343946384,93957343946682],["v8::internal::compiler::JSObjectData::GetOwnDictionaryProperty(v8::internal::compiler::JSHeapBroker*, v8::internal::InternalIndex, v8::internal::compiler::SerializationPolicy)",93957343955200,93957343956420],["v8::internal::compiler::MapData::MapData(v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::Map>, v8::internal::compiler::ObjectDataKind)",93957343959824,93957343960465],["v8::internal::compiler::DescriptorArrayData::SerializeDescriptor(v8::internal::compiler::JSHeapBroker*, v8::internal::Handle<v8::internal::Map>, v8::internal::InternalIndex)",93957343963968,93957343965568],["v8::internal::compiler::ObjectData::IsJSBoundFunction() const",93957343969472,93957343969649],["v8::internal::compiler::JSArrayData::GetOwnElement(v8::internal::compiler::JSHeapBroker*, unsigned int, v8::internal::compiler::SerializationPolicy)",93957343973360,93957343974444],["v8::internal::compiler::SharedFunctionInfoData::SerializeScopeInfoChain(v8::internal::compiler::JSHeapBroker*)",93957343976080,93957343976309],["v8::internal::compiler::(anonymous namespace)::GetPropertyCellFromHeap(v8::internal::compiler::JSHeapBroker*, v8::internal::Handle<v8::internal::Name>)",93957343982432,93957343982908],["v8::internal::compiler::ObjectData::IsJSGlobalProxy() const",93957343983488,93957343983665],["v8::internal::compiler::ObjectData::IsScriptContextTable() const",93957343984256,93957343984433],["v8::internal::compiler::ObjectData::IsFixedArrayBase() const",93957343985008,93957343985184],["v8::internal::compiler::ObjectData::IsHeapNumber() const",93957343985744,93957343985917],["v8::internal::compiler::ObjectData::IsObjectBoilerplateDescription() const",93957343986304,93957343986481],["v8::internal::compiler::ObjectData::IsInternalizedString() const",93957343986688,93957343986861],["v8::internal::compiler::ObjectData::IsString() const",93957343987056,93957343987229],["v8::internal::compiler::ObjectData::IsAccessorInfo() const",93957343987408,93957343987581],["v8::internal::compiler::ObjectData::IsCallHandlerInfo() const",93957343987760,93957343987933],["v8::internal::compiler::ObjectData::IsCode() const",93957343988128,93957343988305],["v8::internal::compiler::ObjectData::IsFeedbackCell() const",93957343988512,93957343988685],["v8::internal::compiler::ObjectData::IsFunctionTemplateInfo() const",93957343988880,93957343989053],["v8::internal::compiler::ObjectData::IsRegExpBoilerplateDescription() const",93957343989232,93957343989405],["v8::internal::compiler::ObjectData::IsTemplateObjectDescription() const",93957343989600,93957343989773],["v8::internal::compiler::JSObjectData::SerializeRecursiveAsBoilerplate(v8::internal::compiler::JSHeapBroker*, int)",93957343989952,93957343993598],["v8::internal::compiler::RegExpBoilerplateDescriptionData::Serialize(v8::internal::compiler::JSHeapBroker*)",93957343993808,93957343993994],["v8::internal::compiler::ObjectRef::ShouldHaveBeenSerialized() const",93957343994016,93957343994074],["v8::internal::compiler::ContextRef::previous(unsigned long*, v8::internal::compiler::SerializationPolicy) const",93957343994096,93957343994688],["v8::internal::compiler::ContextRef::get(int, v8::internal::compiler::SerializationPolicy) const",93957343994864,93957343995360],["v8::internal::compiler::HeapObjectRef::map() const",93957343995600,93957343995835],["__nss_database_lookup2",139871564436896,139871564438033],["__nss_hostname_digits_dots",139871564442800,139871564442982],["__nss_group_lookup2",139871564443824,139871564443954],["__nss_hash",139871564445056,139871564445305],["erff64x",139871565330736,139871565331886],["truncf64x",139871565335648,139871565335689],["fmaf64x",139871565337408,139871565340396],["__exp10l_finite",139871565340944,139871565341142],["copysignf64x",139871565341376,139871565341406],["frexpf64x",139871565341776,139871565341919],["ldexpf64x",139871565341936,139871565342045],["totalorderf64x",139871565345408,139871565345550],["v8::internal::(anonymous namespace)::IsBuiltinFunction(v8::internal::Isolate*, v8::internal::HeapObject, v8::internal::Builtins::Name)",93957336670192,93957336670268],["v8::internal::TracingAccountingAllocator::~TracingAccountingAllocator()",93957336675072,93957336675100],["v8::internal::CodeEventDispatcher::~CodeEventDispatcher()",93957336676752,93957336676847],["v8::internal::CodeEventDispatcher::CodeCreateEvent(v8::internal::CodeEventListener::LogEventsAndTags, v8::internal::Handle<v8::internal::AbstractCode>, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::Name>)",93957336677408,93957336677632],["v8::internal::CodeEventDispatcher::CallbackEvent(v8::internal::Handle<v8::internal::Name>, unsigned long)",93957336678128,93957336678316],["v8::internal::CodeEventDispatcher::SetterCallbackEvent(v8::internal::Handle<v8::internal::Name>, unsigned long)",93957336678512,93957336678700],["v8::internal::CodeEventDispatcher::CodeMoveEvent(v8::internal::AbstractCode, v8::internal::AbstractCode)",93957336678896,93957336679084],["v8::internal::CodeEventDispatcher::CodeMovingGCEvent()",93957336679280,93957336679468],["v8::internal::ParserBase<v8::internal::Parser>::LookupContinueTarget(v8::internal::AstRawString const*)",93957339446816,93957339446970],["std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >::insert(std::__1::__wrap_iter<unsigned char const*>, unsigned long, unsigned char const&)",93957339453472,93957339455487],["v8::internal::OnHeapConsumedPreparseData::GetScopeData()",93957339458176,93957339458189],["v8::internal::BaseConsumedPreparseData<v8::internal::PreparseData>::~BaseConsumedPreparseData()",93957339459904,93957339459946],["v8::internal::BaseConsumedPreparseData<v8::internal::ZoneVectorWrapper>::GetDataForSkippableFunction(v8::internal::Zone*, int, int*, int*, int*, int*, bool*, v8::internal::LanguageMode*)",93957339460912,93957339461678],["v8::internal::BuilderProducedPreparseData::Serialize(v8::internal::Zone*)",93957339461792,93957339461806],["v8::internal::BaseConsumedPreparseData<v8::internal::ZoneVectorWrapper>::RestoreDataForScope(v8::internal::Scope*, v8::internal::AstValueFactory*, v8::internal::Zone*)",93957339462960,93957339464123],["v8::internal::ParserBase<v8::internal::PreParser>::ParseFormalParameterList(v8::internal::PreParserFormalParameters*)",93957339466368,93957339467590],["v8::internal::ParserBase<v8::internal::PreParser>::CheckArityRestrictions(int, v8::internal::FunctionKind, bool, int, int)",93957339467728,93957339467977],["v8::internal::PreParser::ParseStatementListAndLogFunction(v8::internal::PreParserFormalParameters*)",93957339468096,93957339468500],["v8::internal::ParserBase<v8::internal::PreParser>::NewFunctionScope(v8::internal::FunctionKind, v8::internal::Zone*) const",93957339470272,93957339470433],["v8::internal::ParserBase<v8::internal::PreParser>::ParseStatementListItem()",93957339473072,93957339473491],["v8::internal::ParserBase<v8::internal::PreParser>::ParseClassDeclaration(v8::internal::ZoneList<v8::internal::AstRawString const*>*, bool)",93957339473616,93957339474414],["v8::internal::ParserBase<v8::internal::PreParser>::ParseStatement(v8::internal::ZoneList<v8::internal::AstRawString const*>*, v8::internal::ZoneList<v8::internal::AstRawString const*>*, v8::internal::AllowLabelledFunctionStatement)",93957339474512,93957339477175],["v8::internal::ParserBase<v8::internal::PreParser>::ReportMessage(v8::internal::MessageTemplate)",93957339478032,93957339478147],["v8::internal::PreParser::DeclareVariableName(v8::internal::AstRawString const*, v8::internal::VariableMode, v8::internal::Scope*, bool*, int, v8::internal::VariableKind)",93957339478240,93957339478536],["v8_inspector::protocol::Runtime::EvaluateCallbackImpl::sendSuccess(std::__1::unique_ptr<v8_inspector::protocol::Runtime::RemoteObject, std::__1::default_delete<v8_inspector::protocol::Runtime::RemoteObject> >, v8_crdtp::detail::PtrMaybe<v8_inspector::protocol::Runtime::ExceptionDetails>)",93957342323168,93957342323384],["v8_inspector::protocol::Runtime::(anonymous namespace)::compileScriptParams::deserializer_descriptor()::$_86::__invoke(v8_crdtp::DeserializerState*, void*)",93957342324720,93957342324734],["v8_inspector::protocol::Runtime::(anonymous namespace)::evaluateParams::deserializer_descriptor()::$_98::__invoke(v8_crdtp::DeserializerState*, void*)",93957342324976,93957342325015],["v8_inspector::protocol::Runtime::(anonymous namespace)::globalLexicalScopeNamesParams::deserializer_descriptor()::$_107::__invoke(v8_crdtp::DeserializerState*, void*)",93957342325168,93957342325206],["non-virtual thunk to v8_inspector::protocol::Schema::Domain::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342325408,93957342325543],["v8_inspector::protocol::Schema::DomainDispatcherImpl::getDomains(v8_crdtp::Dispatchable const&)",93957342325968,93957342326456],["v8_inspector::protocol::Schema::Domain::~Domain()",93957342326640,93957342326719],["non-virtual thunk to v8_inspector::protocol::Schema::Domain::~Domain()",93957342326816,93957342326895],["v8::internal::compiler::JSCreateLowering::ReduceJSCreateStringIterator(v8::internal::compiler::Node*)",93957343862336,93957343863458],["v8::internal::compiler::JSGenericLowering::LowerJSDivide(v8::internal::compiler::Node*)",93957343900272,93957343900396],["v8::internal::compiler::JSGenericLowering::LowerJSHasProperty(v8::internal::compiler::Node*)",93957343907280,93957343907409],["v8::internal::compiler::JSGenericLowering::LowerJSForInPrepare(v8::internal::compiler::Node*)",93957343914864,93957343915829],["v8::internal::compiler::JSGraph::NullConstant()",93957343919856,93957343919972],["v8::internal::compiler::JSGraph::AllocateRegularInYoungGenerationStubConstant()",93957343942800,93957343942929],["v8::internal::compiler::JSGraph::EmptyStringConstant()",93957343943904,93957343944020],["v8::internal::compiler::JSGraph::MinusOneConstant()",93957343944960,93957343945109],["v8::internal::compiler::JSHeapBroker::DecrementTracingIndentation()",93957343946080,93957343946093],["v8::internal::compiler::FunctionTemplateInfoData::SerializeCallCode(v8::internal::compiler::JSHeapBroker*)",93957343951440,93957343951777],["v8::internal::compiler::(anonymous namespace)::GetOwnElementFromHeap(v8::internal::compiler::JSHeapBroker*, v8::internal::Handle<v8::internal::Object>, unsigned int, bool)",93957343953680,93957343953907],["v8::internal::compiler::ContextData::GetSlot(v8::internal::compiler::JSHeapBroker*, int, v8::internal::compiler::SerializationPolicy)",93957343956624,93957343957450],["v8::internal::compiler::AllocationSiteData::SerializeBoilerplate(v8::internal::compiler::JSHeapBroker*)",93957343959248,93957343959643],["v8::internal::compiler::JSFunctionData::JSFunctionData(v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::JSFunction>)",93957343960800,93957343961462],["v8::internal::compiler::JSFunctionData::SerializeCodeAndFeedback(v8::internal::compiler::JSHeapBroker*)",93957343963488,93957343963761],["v8::internal::compiler::FeedbackVectorData::GetClosureFeedbackCell(v8::internal::compiler::JSHeapBroker*, int) const",93957343966144,93957343966781],["v8::internal::compiler::JSHeapBroker::StackHasOverflowed() const",93957343969408,93957343969462],["v8::internal::compiler::ObjectData::IsJSFunction() const",93957343969664,93957343969842],["v8::internal::compiler::FixedDoubleArrayData::SerializeContents(v8::internal::compiler::JSHeapBroker*)",93957343971632,93957343973347],["v8::internal::compiler::ScopeInfoData::SerializeScopeInfoChain(v8::internal::compiler::JSHeapBroker*)",93957343974448,93957343974628],["v8::internal::SharedFunctionInfo::Inlineability v8::internal::SharedFunctionInfo::GetInlineability<v8::internal::Isolate>(v8::internal::Isolate*) const",93957343975680,93957343976072],["v8::internal::compiler::SourceTextModuleData::GetCell(v8::internal::compiler::JSHeapBroker*, int) const",93957343976320,93957343977088],["v8::internal::compiler::JSGlobalObjectData::GetPropertyCell(v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData*, v8::internal::compiler::SerializationPolicy)",93957343981248,93957343982427],["v8::internal::compiler::ObjectData::IsJSArray() const",93957343982912,93957343983089],["v8::internal::compiler::ObjectData::IsJSGlobalObject() const",93957343983296,93957343983473],["v8::internal::compiler::ObjectData::IsJSTypedArray() const",93957343983680,93957343983857],["v8::internal::compiler::ObjectData::IsContext() const",93957343984064,93957343984242],["v8::internal::compiler::ObjectData::IsFixedArray() const",93957343984448,93957343984624],["v8::internal::compiler::ObjectData::IsJSObject() const",93957343984816,93957343984993],["v8::internal::compiler::ObjectData::IsJSReceiver() const",93957343985184,93957343985361],["v8::internal::compiler::ObjectData::IsBigInt() const",93957343985568,93957343985741],["v8::internal::compiler::ObjectData::IsMap() const",93957343985920,93957343986097],["__resolv_context_get_preinit",139871564429872,139871564430081],["__nss_lookup_function",139871564438352,139871564438887],["__nss_disable_nscd",139871564439328,139871564439739],["__nss_services_lookup2",139871564443408,139871564443533],["__sinhl_finite",139871565326528,139871565327084],["floorf64x",139871565333440,139871565333487],["tanhf64x",139871565335248,139871565335540],["__log2l_finite",139871565336432,139871565336482],["sincosf64x",139871565336864,139871565337402],["llrintf64x",139871565340400,139871565340415],["llroundf64x",139871565340688,139871565340942],["__issignalingl",139871565341152,139871565341212],["v8::internal::Isolate::AddCodeMemoryRange(v8::MemoryRange)",93957336667328,93957336667840],["v8::internal::StackTraceBuilder::IsNotHidden(v8::internal::Handle<v8::internal::JSFunction>)",93957336673280,93957336673484],["v8::internal::StackTraceBuilder::AppendPromiseCombinatorFrame(v8::internal::Handle<v8::internal::JSFunction>, v8::internal::Handle<v8::internal::JSFunction>)",93957336674512,93957336674825],["v8::internal::TracingAccountingAllocator::TraceZoneDestructionImpl(v8::internal::Zone const*)",93957336675184,93957336675353],["v8::internal::TracingAccountingAllocator::Dump(std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, bool)",93957336675904,93957336676739],["v8::internal::CodeEventDispatcher::~CodeEventDispatcher()",93957336676848,93957336676946],["v8::internal::CodeEventDispatcher::CodeCreateEvent(v8::internal::CodeEventListener::LogEventsAndTags, v8::internal::Handle<v8::internal::AbstractCode>, v8::internal::Handle<v8::internal::Name>)",93957336677184,93957336677406],["v8::internal::CodeEventDispatcher::CodeCreateEvent(v8::internal::CodeEventListener::LogEventsAndTags, v8::internal::Handle<v8::internal::AbstractCode>, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::Name>, int, int)",93957336677632,93957336677872],["v8::internal::ParserBase<v8::internal::Parser>::ParseExpressionOrLabelledStatement(v8::internal::ZoneList<v8::internal::AstRawString const*>*, v8::internal::ZoneList<v8::internal::AstRawString const*>*, v8::internal::AllowLabelledFunctionStatement)",93957339434288,93957339435498],["v8::internal::parsing::ParseFunction(v8::internal::ParseInfo*, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Isolate*, v8::internal::parsing::ReportStatisticsMode)",93957339450480,93957339451075],["v8::internal::PreparseDataBuilder::DataGatheringScope::Start(v8::internal::DeclarationScope*)",93957339452688,93957339452891],["v8::internal::PreparseDataBuilder::ScopeNeedsData(v8::internal::Scope*)",93957339455568,93957339455728],["v8::internal::PreparseDataBuilder::Serialize(v8::internal::Zone*)",93957339457888,93957339458089],["v8::internal::ZonePreparseData::ZonePreparseData(v8::internal::Zone*, v8::internal::Vector<unsigned char>*, int)",93957339458384,93957339458956],["v8::internal::ConsumedPreparseData::For(v8::internal::Isolate*, v8::internal::Handle<v8::internal::PreparseData>)",93957339459712,93957339459800],["v8::internal::BaseConsumedPreparseData<v8::internal::PreparseData>::GetDataForSkippableFunction(v8::internal::Zone*, int, int*, int*, int*, int*, bool*, v8::internal::LanguageMode*)",93957339460016,93957339460709],["v8::internal::ZoneConsumedPreparseData::~ZoneConsumedPreparseData()",93957339460848,93957339460903],["v8::internal::BaseConsumedPreparseData<v8::internal::ZoneVectorWrapper>::RestoreScopeAllocationData(v8::internal::DeclarationScope*, v8::internal::AstValueFactory*, v8::internal::Zone*)",93957339461680,93957339461751],["v8::internal::BuilderProducedPreparseData::Serialize(v8::internal::LocalIsolate*)",93957339461776,93957339461790],["v8::internal::ZoneProducedPreparseData::Serialize(v8::internal::Isolate*)",93957339461808,93957339461822],["v8::internal::BaseConsumedPreparseData<v8::internal::PreparseData>::RestoreDataForScope(v8::internal::Scope*, v8::internal::AstValueFactory*, v8::internal::Zone*)",93957339461840,93957339462950],["v8::internal::PreParser::GetIdentifier() const",93957339464128,93957339464324],["v8::internal::PreParser::PreParseFunction(v8::internal::AstRawString const*, v8::internal::FunctionKind, v8::internal::FunctionSyntaxKind, v8::internal::DeclarationScope*, int*, v8::internal::ProducedPreparseData**)",93957339464544,93957339466357],["v8::internal::PreParser::BuildParameterInitializationBlock(v8::internal::PreParserFormalParameters const&)",93957339467600,93957339467667],["v8_inspector::protocol::Runtime::EntryPreview::deserializer_descriptor()::$_22::__invoke(v8_crdtp::DeserializerState*, void*)",93957342322304,93957342322463],["v8_inspector::protocol::Runtime::(anonymous namespace)::evaluateParams::deserializer_descriptor()::$_102::__invoke(v8_crdtp::DeserializerState*, void*)",93957342324224,93957342324263],["v8_inspector::protocol::Runtime::(anonymous namespace)::evaluateParams::deserializer_descriptor()::$_93::__invoke(v8_crdtp::DeserializerState*, void*)",93957342324624,93957342324663],["v8_inspector::protocol::Runtime::(anonymous namespace)::evaluateParams::deserializer_descriptor()::$_89::__invoke(v8_crdtp::DeserializerState*, void*)",93957342324784,93957342324823],["v8_inspector::protocol::Runtime::(anonymous namespace)::evaluateParams::deserializer_descriptor()::$_96::__invoke(v8_crdtp::DeserializerState*, void*)",93957342324928,93957342324967],["v8_inspector::protocol::Runtime::(anonymous namespace)::evaluateParams::deserializer_descriptor()::$_99::__invoke(v8_crdtp::DeserializerState*, void*)",93957342325024,93957342325063],["v8_inspector::protocol::Runtime::(anonymous namespace)::getPropertiesParams::deserializer_descriptor()::$_104::__invoke(v8_crdtp::DeserializerState*, void*)",93957342325120,93957342325159],["v8_inspector::protocol::Runtime::(anonymous namespace)::runScriptParams::deserializer_descriptor()::$_113::__invoke(v8_crdtp::DeserializerState*, void*)",93957342325216,93957342325255],["void* std::__1::__function::__policy::__large_clone<std::__1::__function::__default_alloc_func<v8::internal::compiler::IteratingArrayBuiltinReducerAssembler::ReduceArrayPrototypeFind(v8::internal::compiler::MapInference*, bool, v8::internal::ElementsKind, v8::internal::compiler::SharedFunctionInfoRef const&, v8::internal::compiler::NativeContextRef const&, v8::internal::compiler::ArrayFindVariant)::$_22, void (v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)> >(void const*)",93957343833664,93957343833736],["v8::internal::compiler::JSCreateLowering::TryAllocateAliasedArguments(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::FrameState, v8::internal::compiler::Node*, v8::internal::compiler::SharedFunctionInfoRef const&, bool*)",93957343879904,93957343881760],["v8::internal::compiler::JSGenericLowering::LowerJSBitwiseXor(v8::internal::compiler::Node*)",93957343899248,93957343899372],["v8::internal::compiler::JSGenericLowering::LowerJSCreateEmptyLiteralArray(v8::internal::compiler::Node*)",93957343901504,93957343901614],["v8::internal::compiler::JSGenericLowering::LowerJSStoreNamedOwn(v8::internal::compiler::Node*)",93957343906128,93957343906680],["v8::internal::compiler::JSGenericLowering::LowerJSCreateWithContext(v8::internal::compiler::Node*)",93957343908800,93957343908892],["v8::internal::compiler::JSGenericLowering::LowerJSConstructWithArrayLike(v8::internal::compiler::Node*)",93957343913280,93957343913902],["v8::internal::compiler::JSGenericLowering::ReplaceWithRuntimeCall(v8::internal::compiler::Node*, v8::internal::Runtime::FunctionId, int)",93957343917392,93957343917672],["v8::internal::compiler::JSGraph::Constant(double)",93957343919328,93957343919723],["v8::internal::compiler::JSGraph::TrueConstant()",93957343920112,93957343920228],["v8::internal::compiler::JSGraph::GetCachedNodes(v8::internal::ZoneVector<v8::internal::compiler::Node*>*)",93957343920672,93957343942651],["v8::internal::compiler::JSGraph::AllocateRegularInOldGenerationStubConstant()",93957343943088,93957343943217],["v8::internal::compiler::JSGraph::PlainPrimitiveToNumberBuiltinConstant()",93957343943632,93957343943761],["v8::internal::compiler::JSGraph::PropertyArrayMapConstant()",93957343944160,93957343944276],["v8::internal::compiler::JSGraph::StaleRegisterConstant()",93957343944672,93957343944788],["v8::internal::compiler::JSGraph::EmptyStateValues()",93957343945280,93957343945353],["v8::internal::compiler::HeapObjectData::HeapObjectData(v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::compiler::ObjectDataKind)",93957343945888,93957343946077],["v8::internal::compiler::PropertyCellData::Serialize(v8::internal::compiler::JSHeapBroker*)",93957343946096,93957343946372],["v8::internal::compiler::JSHeapBroker::TryGetOrCreateData(v8::internal::Handle<v8::internal::Object>, bool, v8::internal::compiler::ObjectRef::BackgroundSerialization)",93957343946688,93957343951432],["v8::internal::compiler::JSObjectData::SerializeObjectCreateMap(v8::internal::compiler::JSHeapBroker*)",93957343951792,93957343952098],["v8::internal::compiler::JSHeapBroker::Trace() const",93957343953168,93957343953680],["v8::internal::compiler::JSObjectData::GetOwnFastDataProperty(v8::internal::compiler::JSHeapBroker*, v8::internal::Representation, v8::internal::FieldIndex, v8::internal::compiler::SerializationPolicy)",93957343953920,93957343955193],["v8::internal::compiler::JSTypedArrayData::Serialize(v8::internal::compiler::JSHeapBroker*)",93957343956432,93957343956616],["v8::internal::compiler::StringData::StringData(v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::String>)",93957343957456,93957343957809],["v8::internal::compiler::AllocationSiteData::AllocationSiteData(v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::ObjectData**, v8::internal::Handle<v8::internal::AllocationSite>)",93957343958896,93957343959244],["v8::internal::compiler::ObjectData::IsAllocationSite() const",93957343959648,93957343959821],["v8::internal::compiler::(anonymous namespace)::SupportsFastArrayResize(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>)",93957343960480,93957343960787],["v8::internal::compiler::JSFunctionData::Serialize(v8::internal::compiler::JSHeapBroker*)",93957343961472,93957343962363],["v8::internal::compiler::MapData::SerializeConstructor(v8::internal::compiler::JSHeapBroker*)",93957343963312,93957343963482],["v8::internal::compiler::MapRef::elements_kind() const",93957343963776,93957343963956],["v8::internal::compiler::MapData::SerializeOwnDescriptor(v8::internal::compiler::JSHeapBroker*, v8::internal::InternalIndex)",93957343965568,93957343966138],["v8::internal::compiler::FeedbackVectorData::Serialize(v8::internal::compiler::JSHeapBroker*)",93957343966784,93957343968812],["__res_randomid",139871564428864,139871564428881],["__resolv_context_put",139871564430192,139871564430351],["__nss_configure_lookup",139871564438048,139871564438346],["__nss_lookup",139871564438896,139871564439061],["__jnl_finite",139871565320416,139871565322008],["atanf64x",139871565329968,139871565329977],["expm1f64x",139871565333216,139871565333415],["nextafterf64x",139871565333584,139871565334277],["tanf64x",139871565335040,139871565335235],["__fpclassifyl",139871565335552,139871565335641],["remquof64x",139871565335696,139871565336343],["roundf64x",139871565336496,139871565336819],["v8::internal::Isolate::get_cached_icu_object(v8::internal::Isolate::ICUObjectCacheType, v8::internal::Handle<v8::internal::Object>)",93957336664912,93957336665658],["v8::internal::Isolate::load_from_stack_count_address(char const*)",93957336668640,93957336668909],["v8::internal::StackTraceBuilder::IsVisibleInStackTrace(v8::internal::Handle<v8::internal::JSFunction>)",93957336672784,93957336672969],["std::__1::__shared_ptr_emplace<v8::internal::wasm::GlobalWasmCodeRef, std::__1::allocator<v8::internal::wasm::GlobalWasmCodeRef> >::~__shared_ptr_emplace()",93957336673728,93957336673748],["v8::internal::StackTraceBuilder::AppendAsyncFrame(v8::internal::Handle<v8::internal::JSGeneratorObject>)",93957336673888,93957336674506],["v8::internal::TracingAccountingAllocator::~TracingAccountingAllocator()",93957336674832,93957336675061],["v8::internal::TracingAccountingAllocator::TraceZoneCreationImpl(v8::internal::Zone const*)",93957336675104,93957336675173],["v8::internal::TracingAccountingAllocator::TraceAllocateSegmentImpl(v8::internal::Segment*)",93957336675360,93957336675418],["std::__1::vector<v8::internal::FuncNameInferrer::Name, std::__1::allocator<v8::internal::FuncNameInferrer::Name> >::__append(unsigned long)",93957339412688,93957339412901],["v8::internal::IterationStatementSourceRanges::GetRange(v8::internal::SourceRangeKind)",93957339437216,93957339437290],["std::__1::pair<std::__1::__tree_iterator<std::__1::__value_type<v8::internal::AstRawString const*, std::__1::pair<v8::internal::AstRawString const*, v8::internal::Scanner::Location> >, std::__1::__tree_node<std::__1::__value_type<v8::internal::AstRawString const*, std::__1::pair<v8::internal::AstRawString const*, v8::internal::Scanner::Location> >, void*>*, long>, bool> std::__1::__tree<std::__1::__value_type<v8::internal::AstRawString const*, std::__1::pair<v8::internal::AstRawString const*, v8::internal::Scanner::Location> >, std::__1::__map_value_compare<v8::internal::AstRawString const*, std::__1::__value_type<v8::internal::AstRawString const*, std::__1::pair<v8::internal::AstRawString const*, v8::internal::Scanner::Location> >, v8::internal::ImportAssertionsKeyComparer, true>, v8::internal::ZoneAllocator<std::__1::__value_type<v8::internal::AstRawString const*, std::__1::pair<v8::internal::AstRawString const*, v8::internal::Scanner::Location> > > >::__emplace_unique_key_args<v8::internal::AstRawString const*, std::__1::pair<v8::internal::AstRawString const*, std::__1::pair<v8::internal::AstRawString const*, v8::internal::Scanner::Location> > >(v8::internal::AstRawString const* const&, std::__1::pair<v8::internal::AstRawString const*, std::__1::pair<v8::internal::AstRawString const*, v8::internal::Scanner::Location> >&&)",93957339448704,93957339449004],["void v8::internal::PendingCompilationErrorHandler::PrepareErrors<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::AstValueFactory*)",93957339451744,93957339451805],["v8::internal::PendingCompilationErrorHandler::ReportErrors(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Script>) const",93957339452416,93957339452441],["v8::internal::PreparseDataBuilder::FinalizeChildren(v8::internal::Zone*)",93957339452992,93957339453198],["v8::internal::PreparseDataBuilder::HasInnerFunctions() const",93957339455536,93957339455550],["v8::internal::PreparseDataBuilder::SaveScopeAllocationData(v8::internal::DeclarationScope*, v8::internal::Parser*)",93957339456160,93957339456491],["v8::internal::PreparseDataBuilder::Serialize(v8::internal::LocalIsolate*)",93957339457568,93957339457884],["v8::internal::ProducedPreparseData::For(v8::internal::PreparseDataBuilder*, v8::internal::Zone*)",93957339458096,93957339458169],["v8::internal::OnHeapConsumedPreparseData::GetChildData(v8::internal::Zone*, int)",93957339458192,93957339458382],["v8::internal::ZonePreparseData::Serialize(v8::internal::Isolate*)",93957339458960,93957339459257],["v8::internal::ZoneConsumedPreparseData::GetChildData(v8::internal::Zone*, int)",93957339459568,93957339459703],["v8::internal::ConsumedPreparseData::For(v8::internal::Zone*, v8::internal::ZonePreparseData*)",93957339459808,93957339459893],["v8::internal::OnHeapConsumedPreparseData::~OnHeapConsumedPreparseData()",93957339459952,93957339460007],["v8::internal::BaseConsumedPreparseData<v8::internal::PreparseData>::RestoreScopeAllocationData(v8::internal::DeclarationScope*, v8::internal::AstValueFactory*, v8::internal::Zone*)",93957339460720,93957339460791],["v8_inspector::protocol::Runtime::ObjectPreview::deserializer_descriptor()::$_14::__invoke(v8_crdtp::DeserializerState*, void*)",93957342321040,93957342321054],["v8_inspector::protocol::Runtime::CallArgument::deserializer_descriptor()::$_42::__invoke(v8_crdtp::DeserializerState*, void*)",93957342322944,93957342323046],["v8_crdtp::ProtocolTypeTraits<std::__1::unique_ptr<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::CallArgument, std::__1::default_delete<v8_inspector::protocol::Runtime::CallArgument> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::CallArgument, std::__1::default_delete<v8_inspector::protocol::Runtime::CallArgument> > > >, std::__1::default_delete<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::CallArgument, std::__1::default_delete<v8_inspector::protocol::Runtime::CallArgument> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::CallArgument, std::__1::default_delete<v8_inspector::protocol::Runtime::CallArgument> > > > > >, void>::Deserialize(v8_crdtp::DeserializerState*, std::__1::unique_ptr<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::CallArgument, std::__1::default_delete<v8_inspector::protocol::Runtime::CallArgument> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::CallArgument, std::__1::default_delete<v8_inspector::protocol::Runtime::CallArgument> > > >, std::__1::default_delete<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::CallArgument, std::__1::default_delete<v8_inspector::protocol::Runtime::CallArgument> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::CallArgument, std::__1::default_delete<v8_inspector::protocol::Runtime::CallArgument> > > > > >*)",93957342323664,93957342323864],["v8_inspector::protocol::Runtime::(anonymous namespace)::evaluateParams::deserializer_descriptor()::$_97::__invoke(v8_crdtp::DeserializerState*, void*)",93957342324320,93957342324359],["v8_inspector::protocol::Runtime::(anonymous namespace)::runScriptParams::deserializer_descriptor()::$_119::__invoke(v8_crdtp::DeserializerState*, void*)",93957342324576,93957342324615],["v8_inspector::protocol::Runtime::(anonymous namespace)::compileScriptParams::deserializer_descriptor()::$_84::__invoke(v8_crdtp::DeserializerState*, void*)",93957342324672,93957342324711],["v8_inspector::protocol::Runtime::(anonymous namespace)::evaluateParams::deserializer_descriptor()::$_88::__invoke(v8_crdtp::DeserializerState*, void*)",93957342324736,93957342324775],["v8_inspector::protocol::Runtime::(anonymous namespace)::evaluateParams::deserializer_descriptor()::$_90::__invoke(v8_crdtp::DeserializerState*, void*)",93957342324832,93957342324871],["v8::internal::TNode<v8::internal::Oddball> std::__1::__function::__policy_invoker<v8::internal::TNode<v8::internal::Oddball> (v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::JSCallReducerAssembler::ForZeroUntil(v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)::{lambda(v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)#1}, v8::internal::TNode<v8::internal::Oddball> (v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)> >(std::__1::__function::__policy_storage const*, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >&&)",93957343823568,93957343823591],["v8::internal::compiler::JSContextSpecialization::SimplifyJSLoadContext(v8::internal::compiler::Node*, v8::internal::compiler::Node*, unsigned long)",93957343838896,93957343839091],["v8::internal::compiler::JSCreateLowering::ReduceJSCreateWithContext(v8::internal::compiler::Node*)",93957343869552,93957343870537],["v8::internal::compiler::JSCreateLowering::AllocateElements(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::ElementsKind, std::__1::vector<v8::internal::compiler::Node*, std::__1::allocator<v8::internal::compiler::Node*> > const&, v8::internal::AllocationType)",93957343889328,93957343889787],["v8::internal::compiler::JSGenericLowering::LowerJSGreaterThan(v8::internal::compiler::Node*)",93957343898736,93957343898860],["v8::internal::compiler::JSGenericLowering::LowerJSShiftRightLogical(v8::internal::compiler::Node*)",93957343899760,93957343899884],["v8::internal::compiler::JSGenericLowering::LowerJSCloneObject(v8::internal::compiler::Node*)",93957343900784,93957343900933],["v8::internal::compiler::JSGenericLowering::LowerJSCreateLiteralRegExp(v8::internal::compiler::Node*)",93957343902176,93957343902363],["v8::internal::compiler::JSGenericLowering::LowerJSStoreProperty(v8::internal::compiler::Node*)",93957343905344,93957343905607],["v8::internal::compiler::JSGenericLowering::LowerJSStoreDataPropertyInLiteral(v8::internal::compiler::Node*)",93957343906992,93957343907129],["v8::internal::compiler::JSGenericLowering::LowerJSCreateFunctionContext(v8::internal::compiler::Node*)",93957343908304,93957343908693],["v8::internal::compiler::JSGenericLowering::LowerJSCall(v8::internal::compiler::Node*)",93957343908992,93957343909731],["v8::internal::compiler::JSGenericLowering::LowerJSConstructForwardVarargs(v8::internal::compiler::Node*)",93957343912224,93957343912564],["v8::internal::compiler::JSGenericLowering::LowerJSCallRuntime(v8::internal::compiler::Node*)",93957343914720,93957343914761],["v8::internal::compiler::JSGenericLowering::LowerJSStackCheck(v8::internal::compiler::Node*)",93957343915984,93957343917176],["v8::internal::compiler::JSGenericLowering::reducer_name() const",93957343918016,93957343918029],["v8::internal::compiler::JSGraph::Constant(v8::internal::compiler::ObjectRef const&)",93957343918528,93957343919322],["v8::internal::compiler::JSGraph::UndefinedConstant()",93957343919728,93957343919844],["v8::internal::compiler::JSGraph::TheHoleConstant()",93957343919984,93957343920100],["v8::internal::compiler::JSGraph::FalseConstant()",93957343920240,93957343920356],["v8::internal::compiler::JSGraph::OneConstant()",93957343920512,93957343920661],["v8::internal::compiler::JSGraph::AllocateInYoungGenerationStubConstant()",93957343942656,93957343942785],["v8::internal::compiler::JSGraph::AllocateInOldGenerationStubConstant()",93957343942944,93957343943073],["v8::internal::compiler::JSGraph::ArrayConstructorStubConstant()",93957343943232,93957343943361],["v8::internal::compiler::JSGraph::BooleanMapConstant()",93957343943504,93957343943620],["v8::internal::compiler::JSGraph::EmptyFixedArrayConstant()",93957343943776,93957343943892],["v8::internal::compiler::JSGraph::FixedArrayMapConstant()",93957343944032,93957343944148],["v8::internal::compiler::JSGraph::FixedDoubleArrayMapConstant()",93957343944288,93957343944404],["v8::internal::compiler::JSGraph::OptimizedOutConstant()",93957343944544,93957343944660],["v8::internal::compiler::JSGraph::MinusZeroConstant()",93957343944800,93957343944949],["v8::internal::compiler::JSGraph::NaNConstant()",93957343945120,93957343945269],["v8::internal::compiler::JSGraph::SingleDeadTypedStateValues()",93957343945360,93957343945507],["inet_nsap_ntoa",139871564421552,139871564421707],["__res_nclose",139871564429152,139871564429162],["__resolv_context_get_override",139871564430096,139871564430186],["__gai_sigqueue",139871564434848,139871564435008],["__coshl_finite",139871565313424,139871565313819],["__log10l_finite",139871565325456,139871565325506],["__gammal_r_finite",139871565328112,139871565329183],["ceilf64x",139871565330336,139871565330383],["erfcf64x",139871565331888,139871565333202],["fabsf64x",139871565333424,139871565333431],["logbf64x",139871565333568,139871565333577],["rintf64x",139871565334288,139871565334295],["v8::internal::Isolate::ReportPromiseReject(v8::internal::Handle<v8::internal::JSPromise>, v8::internal::Handle<v8::internal::Object>, v8::PromiseRejectEvent)",93957336662592,93957336662648],["v8::internal::StackLimitCheck::JsHasOverflowed(unsigned long) const",93957336666960,93957336666993],["v8::internal::Isolate::GetOrRegisterRecorderContextId(v8::internal::Handle<v8::internal::NativeContext>)",93957336667856,93957336668144],["v8::internal::StackTraceBuilder::AppendWasmFrame(v8::internal::FrameSummary::WasmFrameSummary const&)",93957336669184,93957336669528],["v8::internal::(anonymous namespace)::CaptureAsyncStackTrace(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSPromise>, v8::internal::StackTraceBuilder*)",93957336670272,93957336672781],["v8::internal::StackTraceBuilder::AppendFrame(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::HeapObject>, int, int, v8::internal::Handle<v8::internal::FixedArray>)",93957336672976,93957336673271],["v8::internal::Managed<v8::internal::wasm::GlobalWasmCodeRef>::FromSharedPtr(v8::internal::Isolate*, unsigned long, std::__1::shared_ptr<v8::internal::wasm::GlobalWasmCodeRef>)",93957336673488,93957336673713],["std::__1::__shared_ptr_emplace<v8::internal::wasm::GlobalWasmCodeRef, std::__1::allocator<v8::internal::wasm::GlobalWasmCodeRef> >::~__shared_ptr_emplace()",93957336673760,93957336673798],["v8::internal::ParserBase<v8::internal::Parser>::ClassInfo::ClassInfo(v8::internal::ParserBase<v8::internal::Parser>*)",93957339400192,93957339400774],["v8::internal::ParserBase<v8::internal::Parser>::ParseForAwaitStatement(v8::internal::ZoneList<v8::internal::AstRawString const*>*, v8::internal::ZoneList<v8::internal::AstRawString const*>*)",93957339421184,93957339424442],["v8::internal::ParserBase<v8::internal::Parser>::ParseHoistableDeclaration(int, v8::base::Flags<v8::internal::ParseFunctionFlag, int>, v8::internal::ZoneList<v8::internal::AstRawString const*>*, bool)",93957339436336,93957339437052],["v8::internal::ParserBase<v8::internal::Parser>::ParseForEachStatementWithDeclarations(int, v8::internal::ParserBase<v8::internal::Parser>::ForInfo*, v8::internal::ZoneList<v8::internal::AstRawString const*>*, v8::internal::ZoneList<v8::internal::AstRawString const*>*, v8::internal::Scope*)",93957339440288,93957339442679],["v8::internal::ParserBase<v8::internal::Parser>::DeclareLabel(v8::internal::ZoneList<v8::internal::AstRawString const*>**, v8::internal::ZoneList<v8::internal::AstRawString const*>**, v8::internal::AstRawString const*)",93957339447312,93957339448125],["v8::internal::parsing::ParseProgram(v8::internal::ParseInfo*, v8::internal::Handle<v8::internal::Script>, v8::internal::MaybeHandle<v8::internal::ScopeInfo>, v8::internal::Isolate*, v8::internal::parsing::ReportStatisticsMode)",93957339449968,93957339450438],["void v8::internal::PendingCompilationErrorHandler::PrepareWarnings<v8::internal::Isolate>(v8::internal::Isolate*)",93957339451568,93957339451620],["v8::internal::PendingCompilationErrorHandler::ReportMessageAt(int, int, v8::internal::MessageTemplate, char const*)",93957339451920,93957339451962],["v8::internal::PendingCompilationErrorHandler::ReportWarnings(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Script>) const",93957339452128,93957339452403],["v8::internal::PendingCompilationErrorHandler::ThrowPendingError(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Script>) const",93957339452448,93957339452675],["v8::internal::PreparseDataBuilder::DataGatheringScope::Close()",93957339452896,93957339452988],["v8::internal::PreparseDataBuilder::AddChild(v8::internal::PreparseDataBuilder*)",93957339453200,93957339453468],["v8::internal::PreparseDataBuilder::DataGatheringScope::SetSkippableFunction(v8::internal::DeclarationScope*, int, int)",93957339455488,93957339455527],["v8::internal::PreparseDataBuilder::HasData() const",93957339455552,93957339455568],["v8::internal::PreparseDataBuilder::SaveDataForSkippableFunction(v8::internal::PreparseDataBuilder*)",93957339455728,93957339456152],["v8::internal::PreparseDataBuilder::SaveDataForScope(v8::internal::Scope*)",93957339456496,93957339457241],["non-virtual thunk to v8_inspector::protocol::Runtime::StackTraceId::~StackTraceId()",93957342319632,93957342319711],["v8_inspector::protocol::Runtime::(anonymous namespace)::evaluateParams::deserializer_descriptor()::$_101::__invoke(v8_crdtp::DeserializerState*, void*)",93957342321808,93957342321960],["v8_inspector::protocol::Runtime::CallArgument::deserializer_descriptor()::$_40::__invoke(v8_crdtp::DeserializerState*, void*)",93957342322624,93957342322770],["v8_inspector::protocol::Runtime::(anonymous namespace)::awaitPromiseParams::deserializer_descriptor()::$_71::__invoke(v8_crdtp::DeserializerState*, void*)",93957342323072,93957342323111],["v8_inspector::protocol::Runtime::(anonymous namespace)::callFunctionOnParams::deserializer_descriptor()::$_74::__invoke(v8_crdtp::DeserializerState*, void*)",93957342323392,93957342323654],["v8_crdtp::ProtocolTypeTraits<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::CallArgument, std::__1::default_delete<v8_inspector::protocol::Runtime::CallArgument> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::CallArgument, std::__1::default_delete<v8_inspector::protocol::Runtime::CallArgument> > > >, void>::Deserialize(v8_crdtp::DeserializerState*, std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::CallArgument, std::__1::default_delete<v8_inspector::protocol::Runtime::CallArgument> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::CallArgument, std::__1::default_delete<v8_inspector::protocol::Runtime::CallArgument> > > >*)",93957342323872,93957342324221],["v8_inspector::protocol::Runtime::(anonymous namespace)::callFunctionOnParams::deserializer_descriptor()::$_76::__invoke(v8_crdtp::DeserializerState*, void*)",93957342324272,93957342324311],["v8_inspector::protocol::Runtime::(anonymous namespace)::callFunctionOnParams::deserializer_descriptor()::$_79::__invoke(v8_crdtp::DeserializerState*, void*)",93957342324368,93957342324517],["v8::internal::compiler::JSCallReducer::ReduceStringPrototypeIterator(v8::internal::compiler::Node*)",93957343791344,93957343791865],["v8::internal::TNode<v8::internal::String> std::__1::__function::__policy_invoker<v8::internal::TNode<v8::internal::String> ()>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::JSCallReducerAssembler::ReduceStringPrototypeSlice()::$_11, v8::internal::TNode<v8::internal::String> ()> >(std::__1::__function::__policy_storage const*)",93957343827168,93957343827205],["v8::internal::compiler::PromiseBuiltinReducerAssembler::CallPromiseReject(v8::internal::TNode<v8::internal::JSFunction>, v8::internal::TNode<v8::internal::Object>, v8::internal::compiler::FrameState)",93957343835504,93957343835754],["v8::internal::compiler::JSCreateLowering::ReduceJSCreateArguments(v8::internal::compiler::Node*)",93957343842320,93957343849251],["v8::internal::compiler::JSCreateLowering::ReduceJSCreateLiteralRegExp(v8::internal::compiler::Node*)",93957343866560,93957343866898],["v8::internal::compiler::JSCreateLowering::ReduceJSCreateObject(v8::internal::compiler::Node*)",93957343875504,93957343878446],["v8::internal::compiler::JSCreateLowering::ReduceNewArray(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::MapRef, v8::internal::ElementsKind, v8::internal::AllocationType, v8::internal::compiler::SlackTrackingPrediction const&)",93957343883792,93957343885494],["v8::internal::compiler::AllocationBuilder::AllocateSloppyArgumentElements(int, v8::internal::compiler::MapRef, v8::internal::AllocationType)",93957343895152,93957343895597],["v8::internal::compiler::JSGenericLowering::LowerJSStrictEqual(v8::internal::compiler::Node*)",93957343898256,93957343898602],["v8::internal::compiler::JSGenericLowering::LowerJSGreaterThanOrEqual(v8::internal::compiler::Node*)",93957343898992,93957343899116],["v8::internal::compiler::JSGenericLowering::LowerJSShiftLeft(v8::internal::compiler::Node*)",93957343899504,93957343899628],["v8::internal::compiler::JSGenericLowering::LowerJSSubtract(v8::internal::compiler::Node*)",93957343900016,93957343900140],["v8::internal::compiler::JSGenericLowering::LowerJSExponentiate(v8::internal::compiler::Node*)",93957343900528,93957343900652],["v8::internal::compiler::JSGenericLowering::LowerJSCreateArray(v8::internal::compiler::Node*)",93957343901024,93957343901345],["v8::internal::compiler::JSGenericLowering::LowerJSCreateLiteralArray(v8::internal::compiler::Node*)",93957343901664,93957343901906],["v8::internal::compiler::JSGenericLowering::LowerJSLoadProperty(v8::internal::compiler::Node*)",93957343902736,93957343903255],["v8::internal::compiler::JSGenericLowering::LowerJSLoadGlobal(v8::internal::compiler::Node*)",93957343904784,93957343905339],["v8::internal::compiler::JSGenericLowering::LowerJSStoreNamed(v8::internal::compiler::Node*)",93957343905616,93957343906117],["v8::internal::compiler::JSGenericLowering::LowerJSStoreGlobal(v8::internal::compiler::Node*)",93957343906688,93957343906986],["v8::internal::compiler::JSGenericLowering::LowerJSStoreInArrayLiteral(v8::internal::compiler::Node*)",93957343907136,93957343907268],["v8::internal::compiler::JSGenericLowering::LowerJSGetSuperConstructor(v8::internal::compiler::Node*)",93957343907424,93957343908294],["v8::internal::compiler::JSGenericLowering::LowerJSCreateCatchContext(v8::internal::compiler::Node*)",93957343908704,93957343908796],["v8::internal::compiler::JSGenericLowering::LowerJSCreateBlockContext(v8::internal::compiler::Node*)",93957343908896,93957343908985],["v8::internal::compiler::JSGenericLowering::LowerJSCallForwardVarargs(v8::internal::compiler::Node*)",93957343909744,93957343910065],["v8::internal::compiler::JSGenericLowering::LowerJSCallWithSpread(v8::internal::compiler::Node*)",93957343911472,93957343912218],["v8::internal::compiler::JSGenericLowering::LowerJSConstruct(v8::internal::compiler::Node*)",93957343912576,93957343913271],["v8::internal::compiler::JSGenericLowering::LowerJSConstructWithSpread(v8::internal::compiler::Node*)",93957343913904,93957343914710],["v8::internal::compiler::JSGenericLowering::LowerJSForInNext(v8::internal::compiler::Node*)",93957343914768,93957343914855],["v8::internal::compiler::JSGenericLowering::LowerJSGetIterator(v8::internal::compiler::Node*)",93957343915840,93957343915976],["v8::internal::compiler::JSGenericLowering::ReplaceWithBuiltinCall(v8::internal::compiler::Node*, v8::internal::Builtins::Name)",93957343917184,93957343917382],["v8::internal::compiler::JSGenericLowering::ReplaceUnaryOpWithBuiltinCall(v8::internal::compiler::Node*, v8::internal::Builtins::Name, v8::internal::Builtins::Name)",93957343917680,93957343918010],["v8::internal::compiler::JSGraph::CEntryStubConstant(int, v8::internal::SaveFPRegsMode, v8::internal::ArgvMode, bool)",93957343918032,93957343918423],["inet_ntop",139871564419536,139871564420361],["__res_init",139871564428704,139871564428836],["__res_iclose",139871564428896,139871564429082],["__resolv_context_get",139871564429664,139871564429865],["lgammaf",139871565311584,139871565311783],["__j0l_finite",139871565316240,139871565316907],["__lgammal_r_finite",139871565322992,139871565325216],["__remainderl_finite",139871565326368,139871565326391],["__sqrtl_finite",139871565327088,139871565327095],["asinhf64x",139871565329696,139871565329963],["cbrtf64x",139871565329984,139871565330334],["cosf64x",139871565330384,139871565330732],["v8::internal::Isolate::RunPrepareStackTraceCallback(v8::internal::Handle<v8::internal::Context>, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::JSArray>)",93957336660960,93957336661033],["v8::internal::Isolate::LoadStartTimeMs()",93957336663824,93957336663888],["v8::internal::Isolate::set_icu_object_in_cache(v8::internal::Isolate::ICUObjectCacheType, v8::internal::Handle<v8::internal::Object>, std::__1::shared_ptr<icu_68::UMemory>)",93957336665888,93957336666752],["v8::internal::SaveContext::~SaveContext()",93957336667136,93957336667175],["v8::internal::Isolate::AddCodeRange(unsigned long, unsigned long)",93957336667840,93957336667850],["v8::internal::Isolate::RemoveContextIdCallback(v8::WeakCallbackInfo<void> const&)",93957336668144,93957336668633],["v8::internal::Isolate::store_to_stack_count_address(char const*)",93957336668912,93957336669181],["v8::internal::StackTraceBuilder::AppendBuiltinExitFrame(v8::internal::BuiltinExitFrame*)",93957336669536,93957336670182],["v8::internal::ParserBase<v8::internal::Parser>::ParseSuperExpression()",93957339389808,93957339390438],["v8::internal::ParserBase<v8::internal::Parser>::ReportMessageAt(v8::internal::Scanner::Location, v8::internal::MessageTemplate)",93957339408224,93957339408327],["v8::internal::ParserBase<v8::internal::Parser>::ParseBlock(v8::internal::ZoneList<v8::internal::AstRawString const*>*)",93957339417280,93957339417403],["v8::internal::ParserBase<v8::internal::Parser>::ParseReturnStatement()",93957339428496,93957339429848],["v8::internal::ParserBase<v8::internal::Parser>::BlockState::BlockState(v8::internal::Zone*, v8::internal::Scope**)",93957339436048,93957339436156],["v8::internal::IfStatementSourceRanges::HasRange(v8::internal::SourceRangeKind)",93957339437168,93957339437194],["v8::internal::ParserBase<v8::internal::Parser>::ParseVariableDeclarations(v8::internal::ParserBase<v8::internal::Parser>::VariableDeclarationContext, v8::internal::ParserBase<v8::internal::Parser>::DeclarationParsingResult*, v8::internal::ZoneList<v8::internal::AstRawString const*>*)",93957339437312,93957339440054],["v8::internal::ParserBase<v8::internal::Parser>::ParseForEachStatementWithoutDeclarations(int, v8::internal::Expression*, int, int, v8::internal::ParserBase<v8::internal::Parser>::ForInfo*, v8::internal::ZoneList<v8::internal::AstRawString const*>*, v8::internal::ZoneList<v8::internal::AstRawString const*>*)",93957339443680,93957339445220],["v8::internal::ParserBase<v8::internal::Parser>::BuildReturnStatement(v8::internal::Expression*, int, int)",93957339446976,93957339447301],["v8::internal::ParserBase<v8::internal::Parser>::ParseNativeDeclaration()",93957339448128,93957339448693],["v8::internal::ParserBase<v8::internal::Parser>::ParseAsyncFunctionBody(v8::internal::Scope*, v8::internal::ScopedList<v8::internal::Statement*, void*>*)",93957339449008,93957339449964],["v8::internal::parsing::ParseProgram(v8::internal::ParseInfo*, v8::internal::Handle<v8::internal::Script>, v8::internal::Isolate*, v8::internal::parsing::ReportStatisticsMode)",93957339450448,93957339450466],["v8::internal::parsing::ParseAny(v8::internal::ParseInfo*, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Isolate*, v8::internal::parsing::ReportStatisticsMode)",93957339451088,93957339451560],["void v8::internal::PendingCompilationErrorHandler::PrepareWarnings<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*)",93957339451632,93957339451739],["void v8::internal::PendingCompilationErrorHandler::PrepareErrors<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*, v8::internal::AstValueFactory*)",93957339451808,93957339451906],["v8::internal::PendingCompilationErrorHandler::ReportMessageAt(int, int, v8::internal::MessageTemplate, v8::internal::AstRawString const*)",93957339451968,93957339452008],["v8_inspector::protocol::Runtime::CallFrame::~CallFrame()",93957342318944,93957342319033],["v8_crdtp::ProtocolTypeTraits<std::__1::unique_ptr<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::EntryPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::EntryPreview> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::EntryPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::EntryPreview> > > >, std::__1::default_delete<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::EntryPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::EntryPreview> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::EntryPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::EntryPreview> > > > > >, void>::Deserialize(v8_crdtp::DeserializerState*, std::__1::unique_ptr<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::EntryPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::EntryPreview> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::EntryPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::EntryPreview> > > >, std::__1::default_delete<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::EntryPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::EntryPreview> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::EntryPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::EntryPreview> > > > > >*)",93957342320256,93957342320456],["v8_crdtp::ProtocolTypeTraits<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::PropertyPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::PropertyPreview> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::PropertyPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::PropertyPreview> > > >, void>::Deserialize(v8_crdtp::DeserializerState*, std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::PropertyPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::PropertyPreview> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::PropertyPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::PropertyPreview> > > >*)",93957342321264,93957342321634],["v8_inspector::protocol::Runtime::PropertyPreview::deserializer_descriptor()::$_20::__invoke(v8_crdtp::DeserializerState*, void*)",93957342321984,93957342322130],["v8_inspector::protocol::Runtime::EntryPreview::deserializer_descriptor()::$_23::__invoke(v8_crdtp::DeserializerState*, void*)",93957342322464,93957342322623],["v8_inspector::protocol::Runtime::CallArgument::deserializer_descriptor()::$_41::__invoke(v8_crdtp::DeserializerState*, void*)",93957342322784,93957342322930],["v8_inspector::protocol::Runtime::StackTraceId::deserializer_descriptor()::$_67::__invoke(v8_crdtp::DeserializerState*, void*)",93957342323056,93957342323070],["v8_inspector::protocol::Runtime::(anonymous namespace)::awaitPromiseParams::deserializer_descriptor()::$_73::__invoke(v8_crdtp::DeserializerState*, void*)",93957342323120,93957342323159],["v8::internal::compiler::JSCallReducer::ReduceArrayPrototypePop(v8::internal::compiler::Node*)",93957343720272,93957343723146],["v8::internal::compiler::JSCallReducer::ReduceTypedArrayConstructor(v8::internal::compiler::Node*, v8::internal::compiler::SharedFunctionInfoRef const&)",93957343812352,93957343813417],["v8::internal::TNode<v8::internal::Object> std::__1::__function::__policy_invoker<v8::internal::TNode<v8::internal::Object> ()>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::JSCallReducerAssembler::JSCall3(v8::internal::TNode<v8::internal::Object>, v8::internal::TNode<v8::internal::Object>, v8::internal::TNode<v8::internal::Object>, v8::internal::TNode<v8::internal::Object>, v8::internal::TNode<v8::internal::Object>, v8::internal::compiler::FrameState)::$_0, v8::internal::TNode<v8::internal::Object> ()> >(std::__1::__function::__policy_storage const*)",93957343825520,93957343826012],["v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> > std::__1::__function::__policy_invoker<v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> > (v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::IteratingArrayBuiltinReducerAssembler::ReduceArrayPrototypeReduce(v8::internal::compiler::MapInference*, bool, v8::internal::ElementsKind, v8::internal::compiler::ArrayReduceDirection, v8::internal::compiler::SharedFunctionInfoRef const&)::$_16, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> > (v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)> >(std::__1::__function::__policy_storage const*, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >&&)",93957343828736,93957343828762],["v8::internal::compiler::PromiseBuiltinReducerAssembler::CallPromiseExecutor(v8::internal::TNode<v8::internal::Object>, v8::internal::TNode<v8::internal::JSFunction>, v8::internal::TNode<v8::internal::JSFunction>, v8::internal::compiler::FrameState)",93957343834816,93957343835078],["v8::internal::compiler::JSContextSpecialization::Reduce(v8::internal::compiler::Node*)",93957343836256,93957343836477],["v8::internal::compiler::GetModuleContext(v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::Node*, v8::Maybe<v8::internal::compiler::OuterContext>)::$_0::operator()(v8::internal::compiler::ContextRef) const",93957343840064,93957343840236],["v8::internal::compiler::JSCreateLowering::ReduceJSCreateBoundFunction(v8::internal::compiler::Node*)",93957343855600,93957343857529],["v8::internal::compiler::JSCreateLowering::ReduceJSCreatePromise(v8::internal::compiler::Node*)",93957343864976,93957343866088],["v8::internal::compiler::JSCreateLowering::ReduceJSCreateEmptyLiteralObject(v8::internal::compiler::Node*)",93957343867216,93957343868426],["v8::internal::compiler::JSCreateLowering::ReduceJSCreateBlockContext(v8::internal::compiler::Node*)",93957343871536,93957343872548],["v8::internal::compiler::JSCreateLowering::TryAllocateAliasedArguments(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::SharedFunctionInfoRef const&, bool*)",93957343878752,93957343879841],["v8::internal::compiler::JSCreateLowering::TryAllocateRestArguments(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::FrameState, int)",93957343882496,93957343883306],["v8::internal::compiler::JSCreateLowering::AllocateElements(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::ElementsKind, int, v8::internal::AllocationType)",93957343886960,93957343887402],["v8::internal::compiler::JSCreateLowering::AllocateLiteralRegExp(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::RegExpBoilerplateDescriptionRef)",93957343893472,93957343894693],["v8::internal::compiler::JSCreateLowering::reducer_name() const",93957343896800,93957343896813],["v8::internal::compiler::JSGenericLowering::LowerJSEqual(v8::internal::compiler::Node*)",93957343898128,93957343898252],["v8::internal::compiler::JSGenericLowering::LowerJSLessThan(v8::internal::compiler::Node*)",93957343898608,93957343898732],["v8::internal::compiler::JSGenericLowering::LowerJSLessThanOrEqual(v8::internal::compiler::Node*)",93957343898864,93957343898988],["v8::internal::compiler::JSGenericLowering::LowerJSBitwiseOr(v8::internal::compiler::Node*)",93957343899120,93957343899244],["v8::internal::compiler::JSGenericLowering::LowerJSBitwiseAnd(v8::internal::compiler::Node*)",93957343899376,93957343899500],["v8::internal::compiler::JSGenericLowering::LowerJSShiftRight(v8::internal::compiler::Node*)",93957343899632,93957343899756],["v8::internal::compiler::JSGenericLowering::LowerJSAdd(v8::internal::compiler::Node*)",93957343899888,93957343900012],["v8::internal::compiler::JSGenericLowering::LowerJSMultiply(v8::internal::compiler::Node*)",93957343900144,93957343900268],["v8::internal::compiler::JSGenericLowering::LowerJSModulus(v8::internal::compiler::Node*)",93957343900400,93957343900524],["v8::internal::compiler::JSGenericLowering::LowerJSInstanceOf(v8::internal::compiler::Node*)",93957343900656,93957343900780],["v8::internal::compiler::JSGenericLowering::LowerJSCreateArguments(v8::internal::compiler::Node*)",93957343900944,93957343901010],["v8::internal::compiler::JSGenericLowering::LowerJSCreateClosure(v8::internal::compiler::Node*)",93957343901360,93957343901495],["v8::internal::compiler::JSGenericLowering::LowerJSCreateGeneratorObject(v8::internal::compiler::Node*)",93957343901616,93957343901662],["v8::internal::compiler::JSGenericLowering::LowerJSCreateLiteralObject(v8::internal::compiler::Node*)",93957343901920,93957343902164],["v8::internal::compiler::JSGenericLowering::LowerJSGetTemplateObject(v8::internal::compiler::Node*)",93957343902368,93957343902729],["v8::internal::compiler::JSGenericLowering::LowerJSLoadNamed(v8::internal::compiler::Node*)",93957343903264,93957343903959],["herror",139871564418736,139871564418933],["inet_pton",139871564421216,139871564421324],["__res_ninit",139871564422464,139871564422525],["__res_state",139871564428848,139871564428860],["logf",139871565309824,139871565309905],["__acoshl_finite",139871565312272,139871565312518],["__fmodl_finite",139871565314032,139871565314053],["__j1l_finite",139871565318928,139871565319639],["__ynl_finite",139871565322016,139871565322983],["__logl_finite",139871565325312,139871565325362],["__powl_finite",139871565325520,139871565326363],["__scalbl_finite",139871565326400,139871565326527],["v8::internal::Isolate::FireCallCompletedCallback(v8::internal::MicrotaskQueue*)",93957336658176,93957336658452],["v8::internal::Isolate::RunPromiseHook(v8::PromiseHookType, v8::internal::Handle<v8::internal::JSPromise>, v8::internal::Handle<v8::internal::Object>)",93957336661408,93957336661476],["v8::internal::Isolate::AddDetachedContext(v8::internal::Handle<v8::internal::Context>)",93957336662720,93957336662935],["v8::internal::Isolate::SetIdle(bool)",93957336664096,93957336664150],["v8::internal::(anonymous namespace)::GetStringFromLocale(v8::internal::Handle<v8::internal::Object>)",93957336665664,93957336665886],["std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::shared_ptr<icu_68::UMemory> >::operator=(std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::shared_ptr<icu_68::UMemory> > const&)",93957336666752,93957336666950],["v8::internal::SaveContext::SaveContext(v8::internal::Isolate*)",93957336667008,93957336667133],["v8::internal::SaveAndSwitchContext::SaveAndSwitchContext(v8::internal::Isolate*, v8::internal::Context)",93957336667184,93957336667318],["v8::internal::ParserBase<v8::internal::Parser>::ParseBinaryContinuation(v8::internal::Expression*, int, int)",93957339375728,93957339377112],["v8::internal::ParserBase<v8::internal::Parser>::ParseTemplateLiteral(v8::internal::Expression*, int, bool)",93957339394864,93957339396172],["v8::internal::ParserBase<v8::internal::Parser>::ParseBlock(v8::internal::ZoneList<v8::internal::AstRawString const*>*, v8::internal::Scope*)",93957339403568,93957339404568],["v8::internal::ConditionalSourceRanges::HasRange(v8::internal::SourceRangeKind)",93957339408944,93957339408964],["v8::internal::ParserBase<v8::internal::Parser>::IsNextLetKeyword()",93957339413168,93957339413249],["v8::internal::ParserBase<v8::internal::Parser>::ParseDoWhileStatement(v8::internal::ZoneList<v8::internal::AstRawString const*>*, v8::internal::ZoneList<v8::internal::AstRawString const*>*)",93957339418912,93957339420151],["v8::internal::ParserBase<v8::internal::Parser>::ParseContinueStatement()",93957339426784,93957339427573],["v8::internal::ParserBase<v8::internal::Parser>::ParseWithStatement(v8::internal::ZoneList<v8::internal::AstRawString const*>*)",93957339430768,93957339431539],["v8::internal::ParserBase<v8::internal::Parser>::ParseScopedStatement(v8::internal::ZoneList<v8::internal::AstRawString const*>*)",93957339435504,93957339436045],["v8::internal::ParserBase<v8::internal::Parser>::ParseFunctionDeclaration()",93957339436160,93957339436336],["v8::internal::IfStatementSourceRanges::GetRange(v8::internal::SourceRangeKind)",93957339437056,93957339437157],["v8::internal::IfStatementSourceRanges::RemoveContinuationRange()",93957339437200,93957339437210],["v8::internal::IterationStatementSourceRanges::HasRange(v8::internal::SourceRangeKind)",93957339437296,93957339437311],["v8::internal::ExpressionParsingScope<v8::internal::ParserTypes<v8::internal::Parser> >::ValidateAndRewriteReference(v8::internal::Expression*, int, int)",93957339440064,93957339440277],["v8::internal::ParserBase<v8::internal::Parser>::ParseStandardForLoopWithLexicalDeclarations(int, v8::internal::Statement*, v8::internal::ParserBase<v8::internal::Parser>::ForInfo*, v8::internal::ZoneList<v8::internal::AstRawString const*>*, v8::internal::ZoneList<v8::internal::AstRawString const*>*)",93957339442688,93957339443665],["v8::internal::ParserBase<v8::internal::Parser>::ParseStandardForLoop(int, v8::internal::ZoneList<v8::internal::AstRawString const*>*, v8::internal::ZoneList<v8::internal::AstRawString const*>*, v8::internal::Expression**, v8::internal::Statement**, v8::internal::Statement**)",93957339445232,93957339446801],["v8_inspector::protocol::Runtime::PrivatePropertyDescriptor::~PrivatePropertyDescriptor()",93957342317904,93957342318020],["non-virtual thunk to v8_inspector::protocol::Runtime::StackTrace::~StackTrace()",93957342319392,93957342319406],["v8_inspector::protocol::Runtime::ObjectPreview::deserializer_descriptor()::$_11::__invoke(v8_crdtp::DeserializerState*, void*)",93957342319808,93957342319954],["v8_crdtp::DeserializableProtocolObject<v8_inspector::protocol::Runtime::EntryPreview>::Deserialize(v8_crdtp::DeserializerState*, v8_inspector::protocol::Runtime::EntryPreview*)",93957342320768,93957342321013],["v8_crdtp::ProtocolTypeTraits<std::__1::unique_ptr<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::PropertyPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::PropertyPreview> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::PropertyPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::PropertyPreview> > > >, std::__1::default_delete<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::PropertyPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::PropertyPreview> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::PropertyPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::PropertyPreview> > > > > >, void>::Deserialize(v8_crdtp::DeserializerState*, std::__1::unique_ptr<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::PropertyPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::PropertyPreview> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::PropertyPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::PropertyPreview> > > >, std::__1::default_delete<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::PropertyPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::PropertyPreview> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::PropertyPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::PropertyPreview> > > > > >*)",93957342321056,93957342321256],["v8_inspector::protocol::Runtime::(anonymous namespace)::runScriptParams::deserializer_descriptor()::$_116::__invoke(v8_crdtp::DeserializerState*, void*)",93957342321648,93957342321794],["v8_inspector::protocol::Runtime::PropertyPreview::deserializer_descriptor()::$_19::__invoke(v8_crdtp::DeserializerState*, void*)",93957342321968,93957342321982],["v8_inspector::protocol::Runtime::PropertyPreview::deserializer_descriptor()::$_21::__invoke(v8_crdtp::DeserializerState*, void*)",93957342322144,93957342322303],["v8::internal::compiler::JSCallReducer::ReduceObjectPrototypeGetProto(v8::internal::compiler::Node*)",93957343688176,93957343688247],["v8::internal::compiler::JSCallReducer::ReduceGlobalIsNaN(v8::internal::compiler::Node*)",93957343775488,93957343776029],["v8::internal::compiler::JSCallReducer::ReduceCollectionPrototypeSize(v8::internal::compiler::Node*, v8::internal::CollectionKind)",93957343802624,93957343803370],["v8::internal::compiler::(anonymous namespace)::CreateArtificialFrameState(v8::internal::compiler::Node*, v8::internal::compiler::Node*, int, v8::internal::BytecodeOffset, v8::internal::compiler::FrameStateType, v8::internal::compiler::SharedFunctionInfoRef const&, v8::internal::compiler::Node*, v8::internal::compiler::CommonOperatorBuilder*, v8::internal::compiler::Graph*)",93957343821984,93957343822524],["v8::internal::compiler::GraphAssembler::LoopScope<(v8::internal::MachineRepresentation)8, (v8::internal::MachineRepresentation)8>::LoopScope(v8::internal::compiler::GraphAssembler*)",93957343824384,93957343825101],["v8::internal::TNode<v8::internal::Object> std::__1::__function::__policy_invoker<v8::internal::TNode<v8::internal::Object> ()>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::JSCallReducerAssembler::JSCallRuntime2(v8::internal::Runtime::FunctionId, v8::internal::TNode<v8::internal::Object>, v8::internal::TNode<v8::internal::Object>, v8::internal::compiler::FrameState)::$_2, v8::internal::TNode<v8::internal::Object> ()> >(std::__1::__function::__policy_storage const*)",93957343826672,93957343826920],["v8::internal::TNode<v8::internal::Object> v8::internal::compiler::IteratingArrayBuiltinReducerAssembler::MaybeSkipHole<>(v8::internal::TNode<v8::internal::Object>, v8::internal::ElementsKind, v8::internal::compiler::GraphAssemblerLabel<0>*)",93957343828368,93957343828593],["v8::internal::TNode<v8::internal::Object> v8::internal::compiler::IteratingArrayBuiltinReducerAssembler::MaybeSkipHole<v8::internal::Object>(v8::internal::TNode<v8::internal::Object>, v8::internal::ElementsKind, v8::internal::compiler::GraphAssemblerLabel<1>*, v8::internal::TNode<v8::internal::Object>)",93957343830192,93957343830427],["v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> > std::__1::__function::__policy_invoker<v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> > ()>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::IteratingArrayBuiltinReducerAssembler::ReduceArrayPrototypeIndexOfIncludes(v8::internal::ElementsKind, v8::internal::compiler::ArrayIndexOfIncludesVariant)::$_24, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> > ()> >(std::__1::__function::__policy_storage const*)",93957343834704,93957343834768],["v8::internal::compiler::PromiseBuiltinReducerAssembler::CallPromiseExecutor(v8::internal::TNode<v8::internal::Object>, v8::internal::TNode<v8::internal::JSFunction>, v8::internal::TNode<v8::internal::JSFunction>, v8::internal::compiler::FrameState)::{lambda()#1}::operator()() const",93957343835104,93957343835445],["v8::internal::compiler::PromiseBuiltinReducerAssembler::CallPromiseReject(v8::internal::TNode<v8::internal::JSFunction>, v8::internal::TNode<v8::internal::Object>, v8::internal::compiler::FrameState)::{lambda()#1}::operator()() const",93957343835776,93957343836096],["v8::internal::compiler::JSContextSpecialization::ReduceJSStoreContext(v8::internal::compiler::Node*)",93957343837936,93957343838668],["v8::internal::compiler::(anonymous namespace)::GetSpecializationContext(v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::Node*, unsigned long*, v8::Maybe<v8::internal::compiler::OuterContext>)",93957343839296,93957343839668],["v8::internal::compiler::JSCreateLowering::Reduce(v8::internal::compiler::Node*)",93957343840256,93957343840826],["v8::internal::compiler::JSCreateLowering::ReduceJSCreateArrayIterator(v8::internal::compiler::Node*)",93957343851680,93957343853081],["v8::internal::compiler::JSCreateLowering::ReduceJSCreateCollectionIterator(v8::internal::compiler::Node*)",93957343859680,93957343861212],["v8::internal::compiler::JSCreateLowering::ReduceJSCreateKeyValueArray(v8::internal::compiler::Node*)",93957343863472,93957343864970],["v8::internal::compiler::JSCreateLowering::ReduceJSCreateLiteralArrayOrObject(v8::internal::compiler::Node*)",93957343866096,93957343866552],["v8::internal::compiler::JSCreateLowering::ReduceJSCreateEmptyLiteralArray(v8::internal::compiler::Node*)",93957343866912,93957343867208],["v8::internal::compiler::JSCreateLowering::ReduceJSCreateFunctionContext(v8::internal::compiler::Node*)",93957343868432,93957343869544],["v8::internal::compiler::JSCreateLowering::ReduceJSCreateCatchContext(v8::internal::compiler::Node*)",93957343870544,93957343871529],["v8::internal::compiler::JSCreateLowering::ReduceJSCreateGeneratorObject(v8::internal::compiler::Node*)",93957343872560,93957343875491],["v8::internal::compiler::AllocationBuilder::FinishAndChange(v8::internal::compiler::Node*)",93957343878448,93957343878746],["v8::internal::compiler::JSCreateLowering::native_context() const",93957343879856,93957343879901],["v8::internal::compiler::JSCreateLowering::TryAllocateArguments(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::FrameState)",93957343881760,93957343882494],["v8::internal::compiler::AllocationBuilder::AllocateArray(int, v8::internal::compiler::MapRef, v8::internal::AllocationType)",93957343883312,93957343883786],["v8::internal::compiler::JSCreateLowering::ReduceNewArray(v8::internal::compiler::Node*, v8::internal::compiler::Node*, int, v8::internal::compiler::MapRef, v8::internal::ElementsKind, v8::internal::AllocationType, v8::internal::compiler::SlackTrackingPrediction const&)",93957343885504,93957343886945],["v8::internal::compiler::JSCreateLowering::ReduceNewArray(v8::internal::compiler::Node*, std::__1::vector<v8::internal::compiler::Node*, std::__1::allocator<v8::internal::compiler::Node*> >, v8::internal::compiler::MapRef, v8::internal::ElementsKind, v8::internal::AllocationType, v8::internal::compiler::SlackTrackingPrediction const&)",93957343887408,93957343889318],["v8::internal::compiler::JSCreateLowering::AllocateFastLiteral(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::JSObjectRef, v8::internal::AllocationType)",93957343889792,93957343893459],["v8::internal::compiler::AllocationBuilder::AllocateContext(int, v8::internal::compiler::MapRef)",93957343894704,93957343895145],["v8::internal::compiler::JSCreateLowering::AllocateFastLiteralElements(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::JSObjectRef, v8::internal::AllocationType)",93957343895600,93957343896787],["v8::internal::compiler::JSGenericLowering::JSGenericLowering(v8::internal::compiler::JSGraph*, v8::internal::compiler::AdvancedReducer::Editor*, v8::internal::compiler::JSHeapBroker*)",93957343896816,93957343896844],["__idna_to_dns_encoding",139871564413936,139871564414225],["inet_aton",139871564419392,139871564419446],["__inet_pton_length",139871564421136,139871564421214],["inet_nsap_addr",139871564421328,139871564421543],["j0f",139871565309008,139871565309072],["sinhf",139871565310736,139871565310829],["gammaf",139871565311920,139871565312204],["__atan2l_finite",139871565313120,139871565313131],["__expl_finite",139871565313824,139871565314022],["__hypotl_finite",139871565314064,139871565314950],["__y0l_finite",139871565316912,139871565317638],["__y1l_finite",139871565319648,139871565320414],["v8::internal::Isolate::random_number_generator()",93957336656608,93957336656700],["v8::internal::Isolate::ClearKeptObjects()",93957336660656,93957336660673],["v8::internal::Isolate::RunAtomicsWaitCallback(v8::Isolate::AtomicsWaitEvent, v8::internal::Handle<v8::internal::JSArrayBuffer>, unsigned long, long, double, v8::internal::AtomicsWaitWakeHandle*)",93957336661072,93957336661208],["v8::internal::Isolate::OnAsyncFunctionStateChanged(v8::internal::Handle<v8::internal::JSPromise>, v8::debug::DebugAsyncActionType)",93957336662432,93957336662563],["v8::internal::Isolate::GetNextScriptId()",93957336662656,93957336662717],["v8::internal::Isolate::CheckDetachedContextsAfterGC()",93957336662944,93957336663813],["v8::internal::Isolate::PrintWithTimestamp(char const*, ...)",93957336663888,93957336664091],["v8::internal::Isolate::CollectSourcePositionsForAllBytecodeArrays()",93957336664160,93957336664910],["v8::internal::VariableDeclarationParsingScope<v8::internal::ParserTypes<v8::internal::Parser> >::Declare(v8::internal::AstRawString const*, int)",93957339363744,93957339364218],["v8::internal::ParserBase<v8::internal::Parser>::ParseAsyncFunctionLiteral()",93957339386448,93957339386891],["v8::internal::ParserBase<v8::internal::Parser>::ParseExpressionCoverGrammar()",93957339391296,93957339392116],["v8::internal::ParserBase<v8::internal::Parser>::ParseNewTargetExpression()",93957339397472,93957339397776],["v8::internal::ParserBase<v8::internal::Parser>::ParseClassStaticBlock(v8::internal::ParserBase<v8::internal::Parser>::ClassInfo*)",93957339400880,93957339401383],["v8::internal::ParserBase<v8::internal::Parser>::ParseProperty(v8::internal::ParserBase<v8::internal::Parser>::ParsePropertyInfo*)",93957339404688,93957339407199],["v8::internal::ExpressionSourceRanges::HasRange(v8::internal::SourceRangeKind)",93957339408880,93957339408892],["v8::internal::ParserBase<v8::internal::Parser>::ParseObjectPropertyDefinition(v8::internal::ParserBase<v8::internal::Parser>::ParsePropertyInfo*, bool*)",93957339409312,93957339412563],["v8::internal::ParserBase<v8::internal::Parser>::ValidateFormalParameters(v8::internal::LanguageMode, v8::internal::ParserFormalParameters const&, bool)",93957339412912,93957339413166],["v8::internal::ParserBase<v8::internal::Parser>::ParseStatement(v8::internal::ZoneList<v8::internal::AstRawString const*>*, v8::internal::ZoneList<v8::internal::AstRawString const*>*, v8::internal::AllowLabelledFunctionStatement)",93957339413264,93957339417266],["v8::internal::ParserBase<v8::internal::Parser>::ParseIfStatement(v8::internal::ZoneList<v8::internal::AstRawString const*>*)",93957339417408,93957339418905],["v8::internal::ParserBase<v8::internal::Parser>::ParseWhileStatement(v8::internal::ZoneList<v8::internal::AstRawString const*>*, v8::internal::ZoneList<v8::internal::AstRawString const*>*)",93957339420160,93957339421183],["v8::internal::ParserBase<v8::internal::Parser>::ParseForStatement(v8::internal::ZoneList<v8::internal::AstRawString const*>*, v8::internal::ZoneList<v8::internal::AstRawString const*>*)",93957339424448,93957339426777],["v8::internal::ParserBase<v8::internal::Parser>::ParseBreakStatement(v8::internal::ZoneList<v8::internal::AstRawString const*>*)",93957339427584,93957339428481],["v8::internal::ParserBase<v8::internal::Parser>::ParseThrowStatement()",93957339429856,93957339430765],["v8::internal::ParserBase<v8::internal::Parser>::ParseSwitchStatement(v8::internal::ZoneList<v8::internal::AstRawString const*>*)",93957339431552,93957339434288],["v8_inspector::protocol::Runtime::PropertyPreview::~PropertyPreview()",93957342316976,93957342317128],["v8_inspector::protocol::Runtime::ExecutionContextDescription::~ExecutionContextDescription()",93957342318384,93957342318496],["v8_inspector::protocol::Runtime::StackTrace::~StackTrace()",93957342319136,93957342319351],["v8_inspector::protocol::Runtime::StackTraceId::~StackTraceId()",93957342319456,93957342319535],["non-virtual thunk to v8_inspector::protocol::Runtime::StackTraceId::~StackTraceId()",93957342319712,93957342319795],["v8_inspector::protocol::Runtime::ObjectPreview::deserializer_descriptor()::$_12::__invoke(v8_crdtp::DeserializerState*, void*)",93957342319968,93957342320246],["v8_crdtp::ProtocolTypeTraits<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::EntryPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::EntryPreview> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::EntryPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::EntryPreview> > > >, void>::Deserialize(v8_crdtp::DeserializerState*, std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::EntryPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::EntryPreview> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::EntryPreview, std::__1::default_delete<v8_inspector::protocol::Runtime::EntryPreview> > > >*)",93957342320464,93957342320760],["v8_inspector::protocol::Runtime::ObjectPreview::deserializer_descriptor()::$_13::__invoke(v8_crdtp::DeserializerState*, void*)",93957342321024,93957342321038],["v8::internal::compiler::PromiseBuiltinReducerAssembler::ReducePromiseConstructor(v8::internal::compiler::NativeContextRef const&)",93957343657888,93957343660044],["v8::internal::compiler::JSCallReducer::ReduceArrayFindIndex(v8::internal::compiler::Node*, v8::internal::compiler::SharedFunctionInfoRef const&)",93957343699072,93957343699553],["v8::internal::compiler::JSCallReducer::ReduceDataViewAccess(v8::internal::compiler::Node*, v8::internal::compiler::JSCallReducer::DataViewAccess, v8::internal::ExternalArrayType)",93957343738752,93957343741723],["v8::internal::compiler::JSCallReducer::ReduceStringPrototypeSubstring(v8::internal::compiler::Node*)",93957343784064,93957343784426],["v8::internal::compiler::JSCallReducer::ReducePromisePrototypeFinally(v8::internal::compiler::Node*)",93957343795600,93957343798884],["v8::internal::compiler::JSCallReducer::ReduceNumberConstructor(v8::internal::compiler::Node*)",93957343810432,93957343810978],["v8::internal::compiler::(anonymous namespace)::CanInlineArrayIteratingBuiltin(v8::internal::compiler::JSHeapBroker*, std::__1::vector<v8::internal::Handle<v8::internal::Map>, std::__1::allocator<v8::internal::Handle<v8::internal::Map> > > const&, v8::internal::ElementsKind*)",93957343815328,93957343815562],["v8::internal::compiler::JSCallReducer::reducer_name() const",93957343822672,93957343822685],["v8::internal::compiler::GraphAssembler::LoopScope<(v8::internal::MachineRepresentation)8>::LoopScope(v8::internal::compiler::GraphAssembler*)",93957343823648,93957343824365],["v8::internal::compiler::JSCallReducerAssembler::~JSCallReducerAssembler()",93957343825392,93957343825473],["v8::internal::TNode<v8::internal::Object> std::__1::__function::__policy_invoker<v8::internal::TNode<v8::internal::Object> ()>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::JSCallReducerAssembler::JSCall4(v8::internal::TNode<v8::internal::Object>, v8::internal::TNode<v8::internal::Object>, v8::internal::TNode<v8::internal::Object>, v8::internal::TNode<v8::internal::Object>, v8::internal::TNode<v8::internal::Object>, v8::internal::TNode<v8::internal::Object>, v8::internal::compiler::FrameState)::$_1, v8::internal::TNode<v8::internal::Object> ()> >(std::__1::__function::__policy_storage const*)",93957343826080,93957343826598],["v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> > std::__1::__function::__policy_invoker<v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> > ()>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::JSCallReducerAssembler::ReduceStringPrototypeSlice()::$_7, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> > ()> >(std::__1::__function::__policy_storage const*)",93957343827072,93957343827129],["void std::__1::__function::__policy_invoker<void (v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::IteratingArrayBuiltinReducerAssembler::ReduceArrayPrototypeForEach(v8::internal::compiler::MapInference*, bool, v8::internal::ElementsKind, v8::internal::compiler::SharedFunctionInfoRef const&)::$_13, void (v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)> >(std::__1::__function::__policy_storage const*, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >&&)",93957343827232,93957343828076],["v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> > std::__1::__function::__policy_invoker<v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> > (v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::IteratingArrayBuiltinReducerAssembler::ReduceArrayPrototypeReduce(v8::internal::compiler::MapInference*, bool, v8::internal::ElementsKind, v8::internal::compiler::ArrayReduceDirection, v8::internal::compiler::SharedFunctionInfoRef const&)::$_14, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> > (v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)> >(std::__1::__function::__policy_storage const*, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >&&)",93957343828672,93957343828698],["void std::__1::__function::__policy_invoker<void (v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::IteratingArrayBuiltinReducerAssembler::ReduceArrayPrototypeReduce(v8::internal::compiler::MapInference*, bool, v8::internal::ElementsKind, v8::internal::compiler::ArrayReduceDirection, v8::internal::compiler::SharedFunctionInfoRef const&)::$_18, void (v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)> >(std::__1::__function::__policy_storage const*, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >&&)",93957343828800,93957343829212],["void std::__1::__function::__policy_invoker<void (v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >, v8::internal::TNode<v8::internal::Object>*)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::IteratingArrayBuiltinReducerAssembler::ReduceArrayPrototypeFilter(v8::internal::compiler::MapInference*, bool, v8::internal::ElementsKind, v8::internal::compiler::SharedFunctionInfoRef const&, v8::internal::compiler::NativeContextRef const&)::$_21, void (v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >, v8::internal::TNode<v8::internal::Object>*)> >(std::__1::__function::__policy_storage const*, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >&&, v8::internal::TNode<v8::internal::Object>*)",93957343831344,93957343832708],["void std::__1::__function::__policy_invoker<void (v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::IteratingArrayBuiltinReducerAssembler::ReduceArrayPrototypeEverySome(v8::internal::compiler::MapInference*, bool, v8::internal::ElementsKind, v8::internal::compiler::SharedFunctionInfoRef const&, v8::internal::compiler::NativeContextRef const&, v8::internal::compiler::ArrayEverySomeVariant)::$_23, void (v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)> >(std::__1::__function::__policy_storage const*, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >&&)",93957343833744,93957343834702],["void std::__1::__function::__policy_invoker<void ()>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::PromiseBuiltinReducerAssembler::ReducePromiseConstructor(v8::internal::compiler::NativeContextRef const&)::$_26, void ()> >(std::__1::__function::__policy_storage const*)",93957343834768,93957343834812],["v8::internal::TNode<v8::internal::Object> std::__1::__function::__policy_invoker<v8::internal::TNode<v8::internal::Object> ()>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::PromiseBuiltinReducerAssembler::CallPromiseExecutor(v8::internal::TNode<v8::internal::Object>, v8::internal::TNode<v8::internal::JSFunction>, v8::internal::TNode<v8::internal::JSFunction>, v8::internal::compiler::FrameState)::{lambda()#1}, v8::internal::TNode<v8::internal::Object> ()> >(std::__1::__function::__policy_storage const*)",93957343835088,93957343835101],["void std::__1::__function::__policy_invoker<void (v8::internal::TNode<v8::internal::Object>)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::PromiseBuiltinReducerAssembler::ReducePromiseConstructor(v8::internal::compiler::NativeContextRef const&)::$_27, void (v8::internal::TNode<v8::internal::Object>)> >(std::__1::__function::__policy_storage const*, v8::internal::TNode<v8::internal::Object>&&)",93957343835456,93957343835489],["v8::internal::TNode<v8::internal::Object> std::__1::__function::__policy_invoker<v8::internal::TNode<v8::internal::Object> ()>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::PromiseBuiltinReducerAssembler::CallPromiseReject(v8::internal::TNode<v8::internal::JSFunction>, v8::internal::TNode<v8::internal::Object>, v8::internal::compiler::FrameState)::{lambda()#1}, v8::internal::TNode<v8::internal::Object> ()> >(std::__1::__function::__policy_storage const*)",93957343835760,93957343835773],["v8::internal::compiler::SkipValueIdentities(v8::internal::compiler::Node*)",93957343836096,93957343836242],["v8::internal::compiler::JSContextSpecialization::ReduceJSLoadContext(v8::internal::compiler::Node*)",93957343836480,93957343837923],["v8::internal::compiler::JSContextSpecialization::ReduceJSGetImportMeta(v8::internal::compiler::Node*)",93957343838672,93957343838888],["v8::internal::compiler::JSContextSpecialization::SimplifyJSStoreContext(v8::internal::compiler::Node*, v8::internal::compiler::Node*, unsigned long)",93957343839104,93957343839294],["v8::internal::compiler::GetModuleContext(v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::Node*, v8::Maybe<v8::internal::compiler::OuterContext>)",93957343839680,93957343840064],["v8::internal::compiler::JSContextSpecialization::reducer_name() const",93957343840240,93957343840253],["v8::internal::compiler::JSCreateLowering::ReduceJSCreate(v8::internal::compiler::Node*)",93957343840832,93957343842320],["v8::internal::compiler::JSCreateLowering::ReduceJSCreateArray(v8::internal::compiler::Node*)",93957343849264,93957343851670],["v8::internal::compiler::JSCreateLowering::ReduceJSCreateAsyncFunctionObject(v8::internal::compiler::Node*)",93957343853088,93957343855592],["v8::internal::compiler::JSCreateLowering::ReduceJSCreateClosure(v8::internal::compiler::Node*)",93957343857536,93957343859678],["v8::internal::compiler::JSCreateLowering::ReduceJSCreateIterResultObject(v8::internal::compiler::Node*)",93957343861216,93957343862333],["inet6_rth_reverse",139871564412832,139871564412971],["__netlink_assert_response",139871564418208,139871564418616],["__inet_aton_exact",139871564419280,139871564419378],["inet_addr",139871564419456,139871564419529],["asinf",139871565308080,139871565308145],["jnf",139871565309392,139871565309467],["dremf",139871565310224,139871565310306],["tgammaf",139871565310880,139871565311366],["expf",139871565311792,139871565311905],["__acosl_finite",139871565312240,139871565312265],["__asinl_finite",139871565312528,139871565313113],["__atanhl_finite",139871565313136,139871565313416],["v8::internal::Isolate::use_optimizer()",93957336655200,93957336655243],["v8::internal::Isolate::SymbolFor(v8::internal::RootIndex, v8::internal::Handle<v8::internal::String>, bool)",93957336657056,93957336657694],["v8::internal::Isolate::RunHostImportModuleDynamicallyCallback(v8::internal::Handle<v8::internal::Script>, v8::internal::Handle<v8::internal::Object>, v8::internal::MaybeHandle<v8::internal::Object>)",93957336658656,93957336659323],["v8::internal::Isolate::RunHostInitializeImportMetaObjectCallback(v8::internal::Handle<v8::internal::SourceTextModule>)",93957336660704,93957336660944],["v8::internal::Isolate::HasPrepareStackTraceCallback() const",93957336661040,93957336661057],["v8::internal::Isolate::SetPromiseHook(void (*)(v8::PromiseHookType, v8::Local<v8::Promise>, v8::Local<v8::Value>))",93957336661216,93957336661408],["v8::internal::Isolate::RunPromiseHookForAsyncEventDelegate(v8::PromiseHookType, v8::internal::Handle<v8::internal::JSPromise>)",93957336661488,93957336662421],["v8::internal::Isolate::SetPromiseRejectCallback(void (*)(v8::PromiseRejectMessage))",93957336662576,93957336662589],["v8::internal::Parser::CloseTemplateLiteral(v8::internal::Parser::TemplateLiteral**, int, v8::internal::Expression*)",93957339360240,93957339360787],["v8::internal::ParserBase<v8::internal::Parser>::ParseAssignmentExpressionCoverGrammar()",93957339369664,93957339372077],["v8::internal::ParserBase<v8::internal::Parser>::ParseAwaitExpression()",93957339379632,93957339380863],["v8::internal::ParserBase<v8::internal::Parser>::ParseMemberWithPresentNewPrefixesExpression()",93957339388064,93957339389030],["v8::internal::AstNodeFactory::NewEmptyParentheses(int)",93957339391136,93957339391200],["v8::internal::Scope::Snapshot::~Snapshot()",93957339392400,93957339392588],["v8::internal::ExpressionParsingScope<v8::internal::ParserTypes<v8::internal::Parser> >::Validate(int)",93957339396608,93957339396731],["v8::internal::ParserBase<v8::internal::Parser>::ClassifyArrowParameter(v8::internal::AccumulationScope<v8::internal::ParserTypes<v8::internal::Parser> >*, int, v8::internal::Expression*)",93957339398992,93957339399569],["v8::internal::ExpressionParsingScope<v8::internal::ParserTypes<v8::internal::Parser> >::~ExpressionParsingScope()",93957339400784,93957339400872],["v8::internal::ParserBase<v8::internal::Parser>::ParseClassPropertyDefinition(v8::internal::ParserBase<v8::internal::Parser>::ClassInfo*, v8::internal::ParserBase<v8::internal::Parser>::ParsePropertyInfo*, bool)",93957339401392,93957339403567],["v8::internal::ParserBase<v8::internal::Parser>::NewVarblockScope() const",93957339404576,93957339404680],["v8::internal::ParserBase<v8::internal::Parser>::ParseMemberInitializer(v8::internal::ParserBase<v8::internal::Parser>::ClassInfo*, int, bool)",93957339407200,93957339408209],["v8::internal::ParserBase<v8::internal::Parser>::DoParseMemberExpressionContinuation(v8::internal::Expression*)",93957339408336,93957339408879],["v8::internal::ConditionalSourceRanges::GetRange(v8::internal::SourceRangeKind)",93957339408896,93957339408942],["v8::internal::ExpressionParsingScope<v8::internal::ParserTypes<v8::internal::Parser> >::ValidatePattern(v8::internal::Expression*, int, int)",93957339408976,93957339409310],["v8::internal::ParserBase<v8::internal::Parser>::NewScope(v8::internal::ScopeType) const",93957339412576,93957339412679],["v8_inspector::protocol::Runtime::RemoteObject::~RemoteObject()",93957342316048,93957342316341],["v8_inspector::protocol::Runtime::PropertyDescriptor::~PropertyDescriptor()",93957342317456,93957342317595],["v8_inspector::protocol::Runtime::CallArgument::~CallArgument()",93957342318160,93957342318268],["v8_inspector::protocol::Runtime::ExceptionDetails::~ExceptionDetails()",93957342318624,93957342318771],["v8_inspector::protocol::Runtime::CallFrame::~CallFrame()",93957342319040,93957342319132],["v8_inspector::protocol::Runtime::StackTrace::~StackTrace()",93957342319360,93957342319388],["non-virtual thunk to v8_inspector::protocol::Runtime::StackTrace::~StackTrace()",93957342319408,93957342319443],["v8_inspector::protocol::Runtime::StackTraceId::~StackTraceId()",93957342319536,93957342319618],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::InstructionAsJSON const&)",93957343628128,93957343631668],["v8::internal::compiler::JSCallReducer::ReduceArrayConstructor(v8::internal::compiler::Node*)",93957343674496,93957343674695],["v8::internal::compiler::JSCallReducer::ReduceReflectHas(v8::internal::compiler::Node*)",93957343693952,93957343695699],["v8::internal::compiler::FastApiCallReducerAssembler::ReduceFastApiCall()",93957343707136,93957343708761],["v8::internal::compiler::JSCallReducer::ReduceArrayIteratorPrototypeNext(v8::internal::compiler::Node*)",93957343731712,93957343736165],["v8::internal::compiler::JSCallReducer::ReduceNumberIsSafeInteger(v8::internal::compiler::Node*)",93957343773168,93957343773368],["v8::internal::compiler::JSCallReducer::ReduceReturnReceiver(v8::internal::compiler::Node*)",93957343781232,93957343781327],["v8::internal::compiler::JSCallReducer::ReduceStringPrototypeToLowerCaseIntl(v8::internal::compiler::Node*)",93957343789040,93957343789662],["v8::internal::compiler::JSCallReducer::ReduceStringPrototypeConcat(v8::internal::compiler::Node*)",93957343793808,93957343794757],["v8::internal::compiler::JSCallReducer::ReducePromiseResolveTrampoline(v8::internal::compiler::Node*)",93957343800528,93957343801939],["v8::internal::compiler::JSCallReducer::ReduceDatePrototypeGetTime(v8::internal::compiler::Node*)",93957343809520,93957343810089],["v8::internal::compiler::JSConstructNodeBase<817>::ArgumentCount() const",93957343811760,93957343811783],["v8::internal::compiler::JSCallReducer::CheckIfElementsKind(v8::internal::compiler::Node*, v8::internal::ElementsKind, v8::internal::compiler::Node*, v8::internal::compiler::Node**, v8::internal::compiler::Node**)",93957343813872,93957343814610],["v8::internal::compiler::JSCallReducer::DoPromiseChecks(v8::internal::compiler::MapInference*)",93957343815632,93957343816473],["v8::internal::compiler::JSCallReducer::~JSCallReducer()",93957343822592,93957343822620],["void std::__1::__function::__policy_invoker<void ()>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::JSCallReducerAssembler::ThrowIfNotCallable(v8::internal::TNode<v8::internal::Object>, v8::internal::compiler::FrameState)::{lambda()#1}, void ()> >(std::__1::__function::__policy_storage const*)",93957343823328,93957343823341],["v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> > std::__1::__function::__policy_invoker<v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> > (v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::JSCallReducerAssembler::ForZeroUntil(v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)::{lambda(v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)#2}, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> > (v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)> >(std::__1::__function::__policy_storage const*, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >&&)",93957343823600,93957343823639],["v8::internal::TNode<v8::internal::Oddball> std::__1::__function::__policy_invoker<v8::internal::TNode<v8::internal::Oddball> (v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::JSCallReducerAssembler::Forever(v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >, std::__1::function<v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> > (v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)> const&)::{lambda(v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)#1}, v8::internal::TNode<v8::internal::Oddball> (v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)> >(std::__1::__function::__policy_storage const*, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >&&)",93957343824368,93957343824381],["void v8::internal::compiler::GraphAssembler::BranchImpl<v8::internal::TNode<v8::internal::Object> >(v8::internal::compiler::Node*, v8::internal::compiler::GraphAssemblerLabel<1>*, v8::internal::compiler::GraphAssemblerLabel<1>*, v8::internal::compiler::BranchHint, v8::internal::compiler::IsSafetyCheck, v8::internal::TNode<v8::internal::Object>)",93957343825104,93957343825390],["void std::__1::__function::__policy_invoker<void (v8::internal::compiler::Node*)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::JSCallReducerAssembler::JSCallReducerAssembler(v8::internal::compiler::JSCallReducer*, v8::internal::compiler::Node*)::{lambda(v8::internal::compiler::Node*)#1}, void (v8::internal::compiler::Node*)> >(std::__1::__function::__policy_storage const*, v8::internal::compiler::Node*)",93957343825488,93957343825509],["void* std::__1::__function::__policy::__large_clone<std::__1::__function::__default_alloc_func<v8::internal::compiler::JSCallReducerAssembler::JSCall3(v8::internal::TNode<v8::internal::Object>, v8::internal::TNode<v8::internal::Object>, v8::internal::TNode<v8::internal::Object>, v8::internal::TNode<v8::internal::Object>, v8::internal::TNode<v8::internal::Object>, v8::internal::compiler::FrameState)::$_0, v8::internal::TNode<v8::internal::Object> ()> >(void const*)",93957343826016,93957343826080],["void* std::__1::__function::__policy::__large_clone<std::__1::__function::__default_alloc_func<v8::internal::compiler::JSCallReducerAssembler::JSCall4(v8::internal::TNode<v8::internal::Object>, v8::internal::TNode<v8::internal::Object>, v8::internal::TNode<v8::internal::Object>, v8::internal::TNode<v8::internal::Object>, v8::internal::TNode<v8::internal::Object>, v8::internal::TNode<v8::internal::Object>, v8::internal::compiler::FrameState)::$_1, v8::internal::TNode<v8::internal::Object> ()> >(void const*)",93957343826608,93957343826672],["v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> > std::__1::__function::__policy_invoker<v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> > ()>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::JSCallReducerAssembler::ReduceStringPrototypeSlice()::$_6, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> > ()> >(std::__1::__function::__policy_storage const*)",93957343826928,93957343827060],["v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> > std::__1::__function::__policy_invoker<v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> > ()>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::JSCallReducerAssembler::ReduceStringPrototypeSlice()::$_8, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> > ()> >(std::__1::__function::__policy_storage const*)",93957343827136,93957343827166],["v8::internal::TNode<v8::internal::String> std::__1::__function::__policy_invoker<v8::internal::TNode<v8::internal::String> ()>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::JSCallReducerAssembler::ReduceStringPrototypeSlice()::$_12, v8::internal::TNode<v8::internal::String> ()> >(std::__1::__function::__policy_storage const*)",93957343827216,93957343827229],["v8::internal::compiler::IteratingArrayBuiltinReducerAssembler::SafeLoadElement(v8::internal::ElementsKind, v8::internal::TNode<v8::internal::JSArray>, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)",93957343828080,93957343828363],["void* std::__1::__function::__policy::__large_clone<std::__1::__function::__default_alloc_func<v8::internal::compiler::PromiseBuiltinReducerAssembler::CallPromiseReject(v8::internal::TNode<v8::internal::JSFunction>, v8::internal::TNode<v8::internal::Object>, v8::internal::compiler::FrameState)::{lambda()#1}, v8::internal::TNode<v8::internal::Object> ()> >(void const*)",93957343828608,93957343828664],["v8::internal::TNode<v8::internal::Oddball> std::__1::__function::__policy_invoker<v8::internal::TNode<v8::internal::Oddball> (v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::IteratingArrayBuiltinReducerAssembler::ReduceArrayPrototypeReduce(v8::internal::compiler::MapInference*, bool, v8::internal::ElementsKind, v8::internal::compiler::ArrayReduceDirection, v8::internal::compiler::SharedFunctionInfoRef const&)::$_15, v8::internal::TNode<v8::internal::Oddball> (v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)> >(std::__1::__function::__policy_storage const*, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >&&)",93957343828704,93957343828730],["v8::internal::TNode<v8::internal::Oddball> std::__1::__function::__policy_invoker<v8::internal::TNode<v8::internal::Oddball> (v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::IteratingArrayBuiltinReducerAssembler::ReduceArrayPrototypeReduce(v8::internal::compiler::MapInference*, bool, v8::internal::ElementsKind, v8::internal::compiler::ArrayReduceDirection, v8::internal::compiler::SharedFunctionInfoRef const&)::$_17, v8::internal::TNode<v8::internal::Oddball> (v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)> >(std::__1::__function::__policy_storage const*, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >&&)",93957343828768,93957343828794],["void std::__1::__function::__policy_invoker<void (v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >, v8::internal::TNode<v8::internal::Object>*)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::IteratingArrayBuiltinReducerAssembler::ReduceArrayPrototypeReduce(v8::internal::compiler::MapInference*, bool, v8::internal::ElementsKind, v8::internal::compiler::ArrayReduceDirection, v8::internal::compiler::SharedFunctionInfoRef const&)::$_19, void (v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >, v8::internal::TNode<v8::internal::Object>*)> >(std::__1::__function::__policy_storage const*, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >&&, v8::internal::TNode<v8::internal::Object>*)",93957343829216,93957343830192],["void std::__1::__function::__policy_invoker<void (v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::IteratingArrayBuiltinReducerAssembler::ReduceArrayPrototypeMap(v8::internal::compiler::MapInference*, bool, v8::internal::ElementsKind, v8::internal::compiler::SharedFunctionInfoRef const&, v8::internal::compiler::NativeContextRef const&)::$_20, void (v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)> >(std::__1::__function::__policy_storage const*, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >&&)",93957343830432,93957343831340],["void std::__1::__function::__policy_invoker<void (v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::IteratingArrayBuiltinReducerAssembler::ReduceArrayPrototypeFind(v8::internal::compiler::MapInference*, bool, v8::internal::ElementsKind, v8::internal::compiler::SharedFunctionInfoRef const&, v8::internal::compiler::NativeContextRef const&, v8::internal::compiler::ArrayFindVariant)::$_22, void (v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)> >(std::__1::__function::__policy_storage const*, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >&&)",93957343832720,93957343833653],["inet6_opt_get_val",139871564412592,139871564412633],["inet6_rth_getaddr",139871564413008,139871564413051],["__idna_from_dns_encoding",139871564414240,139871564414438],["hstrerror",139871564418624,139871564418728],["sqrt",139871565296592,139871565296634],["exp2f",139871565308544,139871565308660],["j1f",139871565309200,139871565309264],["log2f",139871565309632,139871565309713],["powf",139871565309920,139871565310219],["scalbf",139871565310512,139871565310725],["sqrtf",139871565310832,139871565310873],["lgammaf32_r",139871565311376,139871565311575],["v8::internal::Isolate::GetTurboCfgFileName(v8::internal::Isolate*)",93957336653712,93957336654404],["v8::internal::Isolate::SetFeedbackVectorsForProfilingTools(v8::internal::Object)",93957336655584,93957336655597],["v8::internal::Isolate::GenerateIdentityHash(unsigned int)",93957336656864,93957336657016],["v8::internal::Isolate::AddCallCompletedCallback(void (*)(v8::Isolate*))",93957336657984,93957336658065],["v8::internal::Isolate::PromiseHookStateUpdated()",93957336658464,93957336658654],["v8::internal::Isolate::GetImportAssertionsFromArgument(v8::internal::MaybeHandle<v8::internal::Object>)",93957336659328,93957336660656],["v8::internal::Isolate::SetHostImportModuleDynamicallyCallback(v8::MaybeLocal<v8::Promise> (*)(v8::Local<v8::Context>, v8::Local<v8::ScriptOrModule>, v8::Local<v8::String>, v8::Local<v8::FixedArray>))",93957336660688,93957336660701],["v8::internal::Isolate::SetHostInitializeImportMetaObjectCallback(void (*)(v8::Local<v8::Context>, v8::Local<v8::Module>, v8::Local<v8::Object>))",93957336660944,93957336660957],["v8::internal::ParserBase<v8::internal::Parser>::CheckArityRestrictions(int, v8::internal::FunctionKind, bool, int, int)",93957339350096,93957339350396],["v8::internal::CaseClauseSourceRanges::HasRange(v8::internal::SourceRangeKind)",93957339362160,93957339362171],["v8::internal::ParserBase<v8::internal::Parser>::ParseArrayLiteral()",93957339365376,93957339367143],["v8::internal::ContinuationSourceRanges::HasRange(v8::internal::SourceRangeKind)",93957339373904,93957339373916],["v8::internal::ParserBase<v8::internal::Parser>::ParsePropertyOrPrivatePropertyName()",93957339378160,93957339378517],["v8::internal::ParserBase<v8::internal::Parser>::ParseLeftHandSideContinuation(v8::internal::Expression*)",93957339381232,93957339383885],["v8::internal::ExpressionParsingScope<v8::internal::ParserTypes<v8::internal::Parser> >::SetInitializers(int, int)",93957339387088,93957339387223],["v8::internal::ParserBase<v8::internal::Parser>::ParseRegExpLiteral()",93957339389216,93957339389413],["v8::internal::ParserBase<v8::internal::Parser>::ParseImportExpressions()",93957339390448,93957339391132],["v8::internal::Scope::Snapshot::Snapshot(v8::internal::Scope*)",93957339391200,93957339391287],["v8::internal::ArrowHeadParsingScope<v8::internal::ParserTypes<v8::internal::Parser> >::ValidateExpression()",93957339392128,93957339392389],["v8::internal::ParserBase<v8::internal::Parser>::ParseClassLiteral(v8::internal::AstRawString const*, v8::internal::Scanner::Location, bool, int)",93957339392592,93957339394861],["v8::internal::ParserBase<v8::internal::Parser>::ParseV8Intrinsic()",93957339396176,93957339396599],["std::__1::vector<std::__1::pair<v8::internal::VariableProxy*, int>, std::__1::allocator<std::__1::pair<v8::internal::VariableProxy*, int> > >::__append(unsigned long)",93957339396736,93957339397462],["v8::internal::ParserBase<v8::internal::Parser>::ParseArguments(v8::internal::ScopedList<v8::internal::Expression*, void*>*, bool*, v8::internal::ParsingArrowHeadFlag)",93957339397776,93957339398982],["v8::internal::ParserBase<v8::internal::Parser>::ParseArrowParametersWithRest(v8::internal::ScopedList<v8::internal::Expression*, void*>*, v8::internal::AccumulationScope<v8::internal::ParserTypes<v8::internal::Parser> >*, int)",93957339399584,93957339400179],["v8_inspector::protocol::Runtime::DomainDispatcherImpl::runIfWaitingForDebugger(v8_crdtp::Dispatchable const&)",93957342311808,93957342311963],["v8_inspector::protocol::Runtime::CustomPreview::~CustomPreview()",93957342316448,93957342316516],["v8_inspector::protocol::Runtime::EntryPreview::~EntryPreview()",93957342317296,93957342317374],["v8_inspector::protocol::Runtime::InternalPropertyDescriptor::~InternalPropertyDescriptor()",93957342317744,93957342317814],["v8_inspector::protocol::Runtime::PrivatePropertyDescriptor::~PrivatePropertyDescriptor()",93957342318032,93957342318149],["v8_inspector::protocol::Runtime::CallArgument::~CallArgument()",93957342318272,93957342318383],["v8_inspector::protocol::Runtime::ExecutionContextDescription::~ExecutionContextDescription()",93957342318496,93957342318611],["v8_inspector::protocol::Runtime::ExceptionDetails::~ExceptionDetails()",93957342318784,93957342318934],["v8::internal::compiler::GraphTrimmer::TrimGraph()",93957343573312,93957343577141],["v8::internal::compiler::JSCallReducerAssembler::CreateArrayNoThrow(v8::internal::TNode<v8::internal::Object>, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >, v8::internal::compiler::FrameState)",93957343640752,93957343640983],["v8::internal::compiler::JSNodeWrapperBase::effect() const",93957343663616,93957343663736],["v8::internal::compiler::StringRef::StringRef(v8::internal::compiler::JSHeapBroker*, v8::internal::Handle<v8::internal::Object>, v8::internal::compiler::ObjectRef::BackgroundSerialization, bool)",93957343682736,93957343682800],["v8::internal::compiler::JSCallReducer::ReduceReflectApply(v8::internal::compiler::Node*)",93957343689776,93957343690075],["v8::internal::compiler::JSCallReducer::ReduceArrayReduceRight(v8::internal::compiler::Node*, v8::internal::compiler::SharedFunctionInfoRef const&)",93957343697104,93957343697545],["v8::internal::compiler::JSCallReducer::ReduceArraySome(v8::internal::compiler::Node*, v8::internal::compiler::SharedFunctionInfoRef const&)",93957343700896,93957343701377],["v8::internal::compiler::FeedbackCellRef::FeedbackCellRef(v8::internal::compiler::JSHeapBroker*, v8::internal::Handle<v8::internal::Object>, v8::internal::compiler::ObjectRef::BackgroundSerialization, bool)",93957343715760,93957343715824],["v8::internal::compiler::JSCallReducer::ReduceArrayPrototypeSlice(v8::internal::compiler::Node*)",93957343728464,93957343730019],["v8::internal::compiler::JSCallReducer::ReduceArrayBufferIsView(v8::internal::compiler::Node*)",93957343737344,93957343737639],["v8::internal::compiler::JSCallReducer::ReduceNumberIsFinite(v8::internal::compiler::Node*)",93957343772752,93957343772952],["v8::internal::compiler::JSCallReducer::ReduceNumberParseInt(v8::internal::compiler::Node*)",93957343773584,93957343774941],["v8::internal::compiler::JSCallReducer::ReduceMapPrototypeHas(v8::internal::compiler::Node*)",93957343777424,93957343778272],["v8::internal::compiler::JSCallReducer::ReduceStringPrototypeCharAt(v8::internal::compiler::Node*)",93957343782464,93957343783295],["v8::internal::compiler::JSCallReducer::ReduceStringPrototypeSubstr(v8::internal::compiler::Node*)",93957343784800,93957343787183],["v8::internal::compiler::JSCallReducer::ReduceStringFromCharCode(v8::internal::compiler::Node*)",93957343790288,93957343790799],["v8::internal::compiler::JSCallReducer::ReduceStringIteratorPrototypeNext(v8::internal::compiler::Node*)",93957343791872,93957343793803],["v8::internal::compiler::JSCallReducer::ReducePromisePrototypeCatch(v8::internal::compiler::Node*)",93957343794768,93957343795592],["v8::internal::compiler::JSCallReducer::ReducePromisePrototypeThen(v8::internal::compiler::Node*)",93957343798896,93957343800525],["v8::internal::compiler::JSCallReducer::ReduceCollectionIteration(v8::internal::compiler::Node*, v8::internal::CollectionKind, v8::internal::IterationKind)",93957343801952,93957343802616],["v8::internal::compiler::JSCallReducer::ReduceCollectionIteratorPrototypeNext(v8::internal::compiler::Node*, int, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::InstanceType, v8::internal::InstanceType)",93957343803376,93957343809508],["v8::internal::compiler::JSCallReducer::ReduceDateNow(v8::internal::compiler::Node*)",93957343810096,93957343810428],["v8::internal::compiler::JSCallReducer::ReduceBigIntAsUintN(v8::internal::compiler::Node*)",93957343810992,93957343811750],["v8::internal::compiler::JSCallReducer::ReducePromiseConstructor(v8::internal::compiler::Node*)",93957343811792,93957343812342],["v8::internal::compiler::JSCallReducer::LoadReceiverElementsKind(v8::internal::compiler::Node*, v8::internal::compiler::Effect*, v8::internal::compiler::Control)",93957343813424,93957343813858],["v8::internal::compiler::(anonymous namespace)::CanInlineArrayResizingBuiltin(v8::internal::compiler::JSHeapBroker*, std::__1::vector<v8::internal::Handle<v8::internal::Map>, std::__1::allocator<v8::internal::Handle<v8::internal::Map> > > const&, std::__1::vector<v8::internal::ElementsKind, std::__1::allocator<v8::internal::ElementsKind> >*, bool)",93957343814624,93957343815319],["v8::internal::compiler::JSCallReducerAssembler::~JSCallReducerAssembler()",93957343815568,93957343815628],["v8::internal::ZoneHandleSet<v8::internal::Map>::insert(v8::internal::Handle<v8::internal::Map>, v8::internal::Zone*)",93957343816480,93957343821971],["v8::internal::compiler::JSObjectRef::JSObjectRef(v8::internal::compiler::JSHeapBroker*, v8::internal::Handle<v8::internal::Object>, v8::internal::compiler::ObjectRef::BackgroundSerialization, bool)",93957343822528,93957343822592],["v8::internal::compiler::JSCallReducer::~JSCallReducer()",93957343822624,93957343822670],["v8::internal::compiler::JSCallReducerAssembler::IfBuilder0::~IfBuilder0()",93957343822688,93957343823328],["void std::__1::__invoke_void_return_wrapper<void, true>::__call<v8::internal::compiler::JSCallReducerAssembler::ThrowIfNotCallable(v8::internal::TNode<v8::internal::Object>, v8::internal::compiler::FrameState)::{lambda()#1}&>(v8::internal::compiler::JSCallReducerAssembler::ThrowIfNotCallable(v8::internal::TNode<v8::internal::Object>, v8::internal::compiler::FrameState)::{lambda()#1}&)",93957343823344,93957343823564],["inet6_opt_finish",139871564412048,139871564412247],["inet6_rth_init",139871564412672,139871564412766],["inet6_rth_segments",139871564412976,139871564413006],["__inet6_scopeid_pton",139871564413056,139871564413242],["yn",139871565295184,139871565295358],["exp",139871565297616,139871565297735],["atanhf",139871565308368,139871565308439],["fmodf",139871565308800,139871565308875],["y0f",139871565309072,139871565309196],["y1f",139871565309264,139871565309388],["ynf",139871565309472,139871565309626],["log10f",139871565309728,139871565309809],["v8::internal::Isolate::InitializeCounters()",93957336648000,93957336648267],["v8::internal::Isolate::AbortConcurrentOptimization(v8::internal::BlockingBehavior)",93957336654736,93957336654760],["v8::internal::Isolate::NeedsDetailedOptimizedCodeLineInfo() const",93957336655312,93957336655448],["v8::internal::Isolate::IsInAnyContext(v8::internal::Object, unsigned int)",93957336656128,93957336656206],["v8::internal::Isolate::fuzzer_rng()",93957336656704,93957336656856],["v8::internal::Isolate::FindCodeObject(unsigned long)",93957336657024,93957336657041],["std::__1::vector<unsigned long, std::__1::allocator<unsigned long> >::push_back(unsigned long const&)",93957336657696,93957336657974],["v8::internal::Isolate::RemoveCallCompletedCallback(void (*)(v8::Isolate*))",93957336658080,93957336658174],["v8::internal::Parser::RewriteTryStatement(v8::internal::Block*, v8::internal::Block*, v8::internal::SourceRange const&, v8::internal::Block*, v8::internal::SourceRange const&, v8::internal::ParserBase<v8::internal::Parser>::CatchInfo const&, int)",93957339328000,93957339329625],["v8::internal::Parser::AddClassStaticBlock(v8::internal::Block*, v8::internal::ParserBase<v8::internal::Parser>::ClassInfo*)",93957339356384,93957339356604],["v8::internal::ZoneList<v8::internal::Expression*>::ZoneList(v8::internal::Vector<v8::internal::Expression* const> const&, v8::internal::Zone*)",93957339361760,93957339362063],["v8::internal::TryFinallyStatementSourceRanges::GetRange(v8::internal::SourceRangeKind)",93957339362288,93957339362363],["v8::internal::ParserBase<v8::internal::Parser>::ParseBindingPattern()",93957339364272,93957339365123],["v8::internal::ExpressionScope<v8::internal::ParserTypes<v8::internal::Parser> >::RecordStrictModeParameterError(v8::internal::Scanner::Location const&, v8::internal::MessageTemplate)",93957339368384,93957339368557],["v8::internal::ParserBase<v8::internal::Parser>::RewriteInvalidReferenceExpression(v8::internal::Expression*, int, int, v8::internal::MessageTemplate, bool)",93957339373472,93957339373867],["v8::internal::ParserBase<v8::internal::Parser>::ParseLogicalExpression()",93957339373936,93957339374457],["v8::internal::ParserBase<v8::internal::Parser>::ParseCoalesceExpression(v8::internal::Expression*)",93957339377120,93957339378150],["v8::internal::ParserBase<v8::internal::Parser>::ParseUnaryOrPrefixExpression()",93957339378528,93957339379632],["v8::internal::ParserBase<v8::internal::Parser>::ParsePostfixContinuation(v8::internal::Expression*, int)",93957339380864,93957339381218],["v8::internal::ParserBase<v8::internal::Parser>::ParsePrimaryExpression()",93957339383888,93957339386438],["v8::internal::ArrowHeadParsingScope<v8::internal::ParserTypes<v8::internal::Parser> >::ArrowHeadParsingScope(v8::internal::Parser*, v8::internal::FunctionKind)",93957339386896,93957339387077],["v8::internal::ArrowHeadParsingScope<v8::internal::ParserTypes<v8::internal::Parser> >::ValidateAndCreateScope()",93957339387232,93957339388049],["v8::internal::Parser::NewThisExpression(int)",93957339389040,93957339389207],["v8::internal::ParserBase<v8::internal::Parser>::ParseFunctionExpression()",93957339389424,93957339389800],["v8_inspector::protocol::Runtime::DomainDispatcherImpl::evaluate(v8_crdtp::Dispatchable const&)",93957342304656,93957342306548],["v8_inspector::protocol::Runtime::DomainDispatcherImpl::terminateExecution(v8_crdtp::Dispatchable const&)",93957342314288,93957342314447],["non-virtual thunk to v8_inspector::protocol::Runtime::RemoteObject::~RemoteObject()",93957342316384,93957342316398],["v8_inspector::protocol::Runtime::ObjectPreview::~ObjectPreview()",93957342316608,93957342316933],["v8_inspector::protocol::Runtime::PropertyPreview::~PropertyPreview()",93957342317136,93957342317291],["v8_inspector::protocol::Runtime::EntryPreview::~EntryPreview()",93957342317376,93957342317455],["v8_inspector::protocol::Runtime::PropertyDescriptor::~PropertyDescriptor()",93957342317600,93957342317740],["v8_inspector::protocol::Runtime::InternalPropertyDescriptor::~InternalPropertyDescriptor()",93957342317824,93957342317895],["v8::internal::compiler::GraphAssembler::BitcastTaggedToWord(v8::internal::compiler::Node*)",93957343562352,93957343562557],["v8::internal::compiler::GraphC1Visualizer::PrintCompilation(v8::internal::OptimizedCompilationInfo const*)",93957343586080,93957343586613],["v8::internal::compiler::JSONGraphNodeWriter::PrintNode(v8::internal::compiler::Node*)",93957343635408,93957343638453],["v8::internal::compiler::JSCallReducerAssembler::ForBuilder0::Do(std::__1::function<void (v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)> const&)",93957343646880,93957343647349],["v8::internal::compiler::JSCallNodeBase<811>::ArgumentCount() const",93957343661808,93957343661838],["v8::internal::compiler::JSCallReducer::Reduce(v8::internal::compiler::Node*)",93957343665296,93957343665513],["v8::internal::compiler::JSNodeWrapperBase::context() const",93957343678800,93957343678887],["v8::internal::compiler::JSCallReducer::ReduceFunctionPrototypeHasInstance(v8::internal::compiler::Node*)",93957343684848,93957343686129],["v8::internal::compiler::NodeProperties::GetValueInput(v8::internal::compiler::Node*, int)",93957343689216,93957343689308],["v8::internal::compiler::JSCallReducer::ReduceObjectCreate(v8::internal::compiler::Node*)",93957343690976,93957343692226],["v8::internal::compiler::(anonymous namespace)::IteratingArrayBuiltinHelper::IteratingArrayBuiltinHelper(v8::internal::compiler::Node*, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::JSGraph*, v8::internal::compiler::CompilationDependencies*)",93957343696160,93957343696644],["v8::internal::compiler::JSCallReducer::ReduceArrayFilter(v8::internal::compiler::Node*, v8::internal::compiler::SharedFunctionInfoRef const&)",93957343698064,93957343698575],["v8::internal::compiler::JSCallReducer::ReduceArrayIncludes(v8::internal::compiler::Node*)",93957343700064,93957343700475],["v8::internal::compiler::JSCallReducer::ReduceCallApiFunction(v8::internal::compiler::Node*, v8::internal::compiler::SharedFunctionInfoRef const&)",93957343701728,93957343706826],["v8::internal::compiler::JSCallReducer::IsBuiltinOrApiFunction(v8::internal::compiler::JSFunctionRef) const",93957343712016,93957343712678],["v8::internal::compiler::JSCallReducer::ReduceForInsufficientFeedback(v8::internal::compiler::Node*, v8::internal::DeoptimizeReason)",93957343716288,93957343716851],["v8::internal::compiler::JSCallReducer::ReduceArrayPrototypeShift(v8::internal::compiler::Node*)",93957343723152,93957343728461],["v8::internal::compiler::JSCallReducer::ReduceArrayIterator(v8::internal::compiler::Node*, v8::internal::compiler::JSCallReducer::ArrayIteratorKind, v8::internal::IterationKind)",93957343730032,93957343731711],["v8::internal::compiler::JSCallReducer::ReduceArrayIsArray(v8::internal::compiler::Node*)",93957343736176,93957343737330],["v8::internal::compiler::JSCallReducer::ReduceArrayBufferViewAccessor(v8::internal::compiler::Node*, v8::internal::InstanceType, v8::internal::compiler::FieldAccess const&)",93957343737648,93957343738747],["v8::internal::compiler::JSCallReducer::ReduceTypedArrayPrototypeToStringTag(v8::internal::compiler::Node*)",93957343741728,93957343772744],["v8::internal::compiler::JSCallReducer::ReduceNumberIsInteger(v8::internal::compiler::Node*)",93957343772960,93957343773160],["v8::internal::compiler::JSCallReducer::ReduceNumberIsNaN(v8::internal::compiler::Node*)",93957343773376,93957343773576],["v8::internal::compiler::JSCallReducer::ReduceGlobalIsFinite(v8::internal::compiler::Node*)",93957343774944,93957343775485],["v8::internal::compiler::JSCallReducer::ReduceMapPrototypeGet(v8::internal::compiler::Node*)",93957343776032,93957343777412],["v8::internal::compiler::JSCallReducer::ReduceRegExpPrototypeTest(v8::internal::compiler::Node*)",93957343778272,93957343781219],["v8::internal::compiler::JSCallReducer::ReduceStringPrototypeIndexOf(v8::internal::compiler::Node*)",93957343781328,93957343782452],["v8::internal::compiler::JSCallReducer::ReduceStringPrototypeStringAt(v8::internal::compiler::Operator const*, v8::internal::compiler::Node*)",93957343783296,93957343784058],["v8::internal::compiler::JSCallReducer::ReduceStringPrototypeSlice(v8::internal::compiler::Node*)",93957343784432,93957343784794],["v8::internal::compiler::JSCallReducer::ReduceStringPrototypeStartsWith(v8::internal::compiler::Node*)",93957343787184,93957343789037],["v8::internal::compiler::JSCallReducer::ReduceStringPrototypeToUpperCaseIntl(v8::internal::compiler::Node*)",93957343789664,93957343790286],["v8::internal::compiler::JSCallReducer::ReduceStringFromCodePoint(v8::internal::compiler::Node*)",93957343790800,93957343791333],["getsourcefilter",139871564410864,139871564411279],["inet6_opt_next",139871564412304,139871564412425],["inet6_rth_space",139871564412640,139871564412664],["inet6_rth_add",139871564412768,139871564412830],["exp10",139871565294320,139871565294439],["pow",139871565295648,139871565295978],["lgammaf32x_r",139871565297168,139871565297391],["acosf",139871565307936,139871565308001],["atan2f",139871565308160,139871565308356],["coshf",139871565308448,139871565308541],["exp10f",139871565308672,139871565308788],["hypotf",139871565308880,139871565309000],["v8::internal::Isolate::Isolate(std::__1::unique_ptr<v8::internal::IsolateAllocator, std::__1::default_delete<v8::internal::IsolateAllocator> >)",93957336640656,93957336642712],["v8::internal::Isolate::Init(v8::internal::SnapshotData*, v8::internal::SnapshotData*, bool)",93957336649360,93957336653437],["v8::internal::Isolate::Exit()",93957336654576,93957336654678],["v8::internal::Isolate::GetCodeTracer()",93957336654896,93957336654961],["v8::internal::Isolate::IncreaseTotalRegexpCodeGenerated(v8::internal::Handle<v8::internal::HeapObject>)",93957336655248,93957336655308],["v8::internal::Isolate::NeedsSourcePositionsForProfiling() const",93957336655456,93957336655584],["v8::internal::Isolate::MaybeInitializeVectorListFromHeap()",93957336655600,93957336656121],["v8::internal::Isolate::UpdateNoElementsProtectorOnSetElement(v8::internal::Handle<v8::internal::JSObject>)",93957336656208,93957336656593],["v8::internal::Parser::ParseExportDefault()",93957339318672,93957339320495],["v8::internal::Parser::DeclareArrowFunctionFormalParameters(v8::internal::ParserFormalParameters*, v8::internal::Expression*, v8::internal::Scanner::Location const&)",93957339343328,93957339343878],["v8::internal::Parser::DeclarePublicClassField(v8::internal::ClassScope*, v8::internal::ClassLiteralProperty*, bool, bool, v8::internal::ParserBase<v8::internal::Parser>::ClassInfo*)",93957339354480,93957339355193],["v8::internal::Parser::UpdateStatistics(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Script>)",93957339358848,93957339359083],["v8::internal::Parser::ExpressionListToExpression(v8::internal::ScopedList<v8::internal::Expression*, void*> const&)",93957339361088,93957339361550],["v8::internal::NaryOperationSourceRanges::~NaryOperationSourceRanges()",93957339362096,93957339362137],["v8::internal::TryCatchStatementSourceRanges::HasRange(v8::internal::SourceRangeKind)",93957339362256,93957339362271],["v8::internal::PreParser::PreParser(v8::internal::Zone*, v8::internal::Scanner*, unsigned long, v8::internal::AstValueFactory*, v8::internal::PendingCompilationErrorHandler*, v8::internal::RuntimeCallStats*, v8::internal::Logger*, v8::internal::UnoptimizedCompileFlags, bool)",93957339362400,93957339363075],["std::__1::vector<void*, std::__1::allocator<void*> >::resize(unsigned long)",93957339364224,93957339364268],["v8::internal::ParserBase<v8::internal::Parser>::ClassifyParameter(v8::internal::AstRawString const*, int, int)",93957339365136,93957339365371],["v8::internal::ParserBase<v8::internal::Parser>::ParseObjectLiteral()",93957339367152,93957339368383],["v8::internal::ParserBase<v8::internal::Parser>::ParsePossibleDestructuringSubPattern(v8::internal::AccumulationScope<v8::internal::ParserTypes<v8::internal::Parser> >*)",93957339368560,93957339369664],["v8::internal::ParserBase<v8::internal::Parser>::ParseYieldExpression()",93957339372080,93957339373464],["v8::internal::ContinuationSourceRanges::GetRange(v8::internal::SourceRangeKind)",93957339373872,93957339373894],["v8::internal::ContinuationSourceRanges::RemoveContinuationRange()",93957339373920,93957339373933],["v8::internal::ParserBase<v8::internal::Parser>::ParseConditionalContinuation(v8::internal::Expression*, int)",93957339374464,93957339375717],["v8_inspector::protocol::Runtime::Frontend::inspectRequested(std::__1::unique_ptr<v8_inspector::protocol::Runtime::RemoteObject, std::__1::default_delete<v8_inspector::protocol::Runtime::RemoteObject> >, std::__1::unique_ptr<v8_inspector::protocol::DictionaryValue, std::__1::default_delete<v8_inspector::protocol::DictionaryValue> >)",93957342299888,93957342300103],["v8_inspector::protocol::Runtime::DomainDispatcherImpl::globalLexicalScopeNames(v8_crdtp::Dispatchable const&)",93957342308896,93957342309766],["v8_inspector::protocol::Runtime::DomainDispatcherImpl::setCustomObjectFormatterEnabled(v8_crdtp::Dispatchable const&)",93957342313232,93957342313751],["v8_inspector::protocol::Runtime::DomainDispatcherImpl::removeBinding(v8_crdtp::Dispatchable const&)",93957342315280,93957342315825],["v8_inspector::protocol::Runtime::RemoteObject::~RemoteObject()",93957342316352,93957342316380],["non-virtual thunk to v8_inspector::protocol::Runtime::RemoteObject::~RemoteObject()",93957342316400,93957342316435],["v8_inspector::protocol::Runtime::CustomPreview::~CustomPreview()",93957342316528,93957342316599],["v8_inspector::protocol::Runtime::ObjectPreview::~ObjectPreview()",93957342316944,93957342316972],["v8::internal::compiler::JSGraphAssembler::NumberMax(v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)",93957343555696,93957343555909],["v8::internal::compiler::GraphAssembler::Reset(v8::internal::compiler::BasicBlock*)",93957343565920,93957343566003],["v8::internal::compiler::JsonPrintFunctionSource(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, int, std::__1::unique_ptr<char [], std::__1::default_delete<char []> >, v8::internal::Handle<v8::internal::Script>, v8::internal::Isolate*, v8::internal::Handle<v8::internal::SharedFunctionInfo>, bool)",93957343581136,93957343582516],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::AsC1V const&)",93957343614672,93957343614842],["std::__1::basic_ofstream<char, std::__1::char_traits<char> >::~basic_ofstream()",93957343634864,93957343634947],["v8::internal::compiler::Graph::RemoveDecorator(v8::internal::compiler::GraphDecorator*)",93957343639616,93957343639703],["v8::internal::compiler::JSCallReducerAssembler::ReduceStringPrototypeSubstring()",93957343642640,93957343643413],["v8::internal::compiler::IteratingArrayBuiltinReducerAssembler::ReduceArrayPrototypeFilter(v8::internal::compiler::MapInference*, bool, v8::internal::ElementsKind, v8::internal::compiler::SharedFunctionInfoRef const&, v8::internal::compiler::NativeContextRef const&)",93957343651920,93957343653487],["v8::internal::compiler::JSCallReducerAssembler::CatchScope::MergeExceptionalPaths(v8::internal::TNode<v8::internal::Object>*, v8::internal::compiler::Effect*, v8::internal::compiler::Control*)",93957343660464,93957343661362],["v8::internal::compiler::JSCallReducer::ReduceMathBinary(v8::internal::compiler::Node*, v8::internal::compiler::Operator const*)",93957343662352,93957343662771],["v8::internal::compiler::JSCallReducer::ReduceMathClz32(v8::internal::compiler::Node*)",93957343663872,93957343664478],["v8::internal::compiler::JSCallReducer::ReduceJSCall(v8::internal::compiler::Node*)",93957343670400,93957343674167],["v8::internal::compiler::JSCallReducer::ReduceObjectConstructor(v8::internal::compiler::Node*)",93957343674912,93957343675236],["v8::internal::compiler::JSCallReducer::ReduceFunctionPrototypeBind(v8::internal::compiler::Node*)",93957343679008,93957343682609],["v8::internal::compiler::JSCallReducer::ReduceFunctionPrototypeCall(v8::internal::compiler::Node*)",93957343682848,93957343684730],["v8::internal::compiler::JSCallReducer::ReduceObjectGetPrototypeOf(v8::internal::compiler::Node*)",93957343687744,93957343687873],["v8::internal::compiler::JSCallReducer::ReduceObjectPrototypeHasOwnProperty(v8::internal::compiler::Node*)",93957343688256,93957343689203],["v8::internal::compiler::JSCallReducer::ReduceObjectPrototypeIsPrototypeOf(v8::internal::compiler::Node*)",93957343689312,93957343689774],["v8::internal::compiler::JSCallReducer::ReduceReflectConstruct(v8::internal::compiler::Node*)",93957343690080,93957343690970],["v8::internal::compiler::JSCallReducer::ReduceReflectGet(v8::internal::compiler::Node*)",93957343692240,93957343693943],["v8::internal::compiler::JSCallReducer::ReduceArrayForEach(v8::internal::compiler::Node*, v8::internal::compiler::SharedFunctionInfoRef const&)",93957343695712,93957343696147],["v8::internal::compiler::JSCallReducer::ReduceArrayReduce(v8::internal::compiler::Node*, v8::internal::compiler::SharedFunctionInfoRef const&)",93957343696656,93957343697094],["v8::internal::compiler::JSCallReducer::ReduceArrayMap(v8::internal::compiler::Node*, v8::internal::compiler::SharedFunctionInfoRef const&)",93957343697552,93957343698063],["v8::internal::compiler::JSCallReducer::ReduceArrayFind(v8::internal::compiler::Node*, v8::internal::compiler::SharedFunctionInfoRef const&)",93957343698576,93957343699057],["v8::internal::compiler::JSCallReducer::ReduceArrayEvery(v8::internal::compiler::Node*, v8::internal::compiler::SharedFunctionInfoRef const&)",93957343699568,93957343700049],["v8::internal::compiler::JSCallReducer::ReduceArrayIndexOf(v8::internal::compiler::Node*)",93957343700480,93957343700894],["v8::internal::compiler::JSCallReducer::ReduceCallWasmFunction(v8::internal::compiler::Node*, v8::internal::compiler::SharedFunctionInfoRef const&)",93957343701392,93957343701722],["v8::internal::compiler::FastApiCallReducerAssembler::FastApiCallReducerAssembler(v8::internal::compiler::JSCallReducer*, v8::internal::compiler::Node*, v8::internal::compiler::FunctionTemplateInfoRef, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::SharedFunctionInfoRef, v8::internal::compiler::Node*, int, v8::internal::compiler::Node*)",93957343706832,93957343707136],["v8::internal::compiler::JSCallReducer::ReduceCallOrConstructWithArrayLikeOrSpread(v8::internal::compiler::Node*, int, v8::internal::compiler::CallFrequency const&, v8::internal::compiler::FeedbackSource const&, v8::internal::SpeculationMode, v8::internal::compiler::CallFeedbackRelation)",93957343708768,93957343712007],["v8::internal::compiler::JSCallReducer::ReduceJSCall(v8::internal::compiler::Node*, v8::internal::compiler::SharedFunctionInfoRef const&)",93957343712688,93957343715747],["v8::internal::compiler::(anonymous namespace)::ShouldUseCallICFeedback(v8::internal::compiler::Node*)",93957343715824,93957343716284],["v8::internal::compiler::JSCallReducer::ReduceArrayPrototypePush(v8::internal::compiler::Node*)",93957343716864,93957343720257],["inet6_option_next",139871564409728,139871564409894],["inet6_opt_init",139871564411632,139871564411686],["inet6_opt_set_val",139871564412256,139871564412294],["inet6_opt_find",139871564412432,139871564412586],["gammal",139871565292672,139871565292942],["y0",139871565294736,139871565294870],["log10",139871565295456,139871565295550],["scalb",139871565296272,139871565296478],["tgamma",139871565296640,139871565297159],["lgamma",139871565297392,139871565297615],["gamma",139871565297744,139871565298052],["acoshf",139871565308016,139871565308065],["v8::internal::Isolate::RegisterManagedPtrDestructor(v8::internal::ManagedPtrDestructor*)",93957336638208,93957336638295],["v8::internal::Isolate::DumpAndResetStats()",93957336643312,93957336645435],["v8::internal::Isolate::RequiresCodeRange() const",93957336649312,93957336649328],["v8::internal::Isolate::main_thread_local_heap()",93957336653456,93957336653473],["v8::internal::Isolate::Enter()",93957336654416,93957336654572],["v8::internal::Isolate::NewPersistentHandles()",93957336654688,93957336654730],["v8::internal::Isolate::GetTurboStatistics()",93957336654768,93957336654895],["v8::internal::CodeTracer::CodeTracer(int)",93957336654976,93957336655193],["v8::internal::ParserBase<v8::internal::Parser>::Expect(v8::internal::Token::Value)",93957339308672,93957339308720],["v8::internal::Parser::InitializeVariables(v8::internal::ScopedList<v8::internal::Statement*, void*>*, v8::internal::VariableKind, v8::internal::ParserBase<v8::internal::Parser>::DeclarationParsingResult::Declaration const*)",93957339323520,93957339323753],["v8::internal::Parser::DesugarBindingInForEachStatement(v8::internal::ParserBase<v8::internal::Parser>::ForInfo*, v8::internal::Block**, v8::internal::Expression**)",93957339333984,93957339334782],["v8::internal::FuncNameInferrer::AddFunction(v8::internal::FunctionLiteral*)",93957339347296,93957339347577],["v8::internal::Parser::CreateSyntheticContextVariable(v8::internal::AstRawString const*)",93957339353808,93957339354239],["v8::internal::Parser::DeclarePrivateClassMember(v8::internal::ClassScope*, v8::internal::AstRawString const*, v8::internal::ClassLiteralProperty*, v8::internal::ClassLiteralProperty::Kind, bool, v8::internal::ParserBase<v8::internal::Parser>::ClassInfo*)",93957339355376,93957339356158],["v8::internal::Parser::RewriteClassLiteral(v8::internal::ClassScope*, v8::internal::AstRawString const*, v8::internal::ParserBase<v8::internal::Parser>::ClassInfo*, int, int)",93957339357280,93957339357954],["v8::internal::Parser::OpenTemplateLiteral(int)",93957339359600,93957339359875],["v8::internal::ScopedList<v8::internal::Expression*, void*>::AddAll(v8::internal::Vector<v8::internal::Expression* const> const&)",93957339360800,93957339361073],["v8::internal::Parser::SetFunctionNameFromPropertyName(v8::internal::LiteralProperty*, v8::internal::AstRawString const*, v8::internal::AstRawString const*)",93957339361552,93957339361748],["v8::internal::NaryOperationSourceRanges::~NaryOperationSourceRanges()",93957339362064,93957339362093],["v8::internal::FunctionLiteralSourceRanges::GetRange(v8::internal::SourceRangeKind)",93957339362144,93957339362160],["v8::internal::TryCatchStatementSourceRanges::GetRange(v8::internal::SourceRangeKind)",93957339362176,93957339362251],["v8::internal::TryCatchStatementSourceRanges::RemoveContinuationRange()",93957339362272,93957339362282],["v8::internal::TryFinallyStatementSourceRanges::HasRange(v8::internal::SourceRangeKind)",93957339362368,93957339362386],["v8::internal::ExpressionScope<v8::internal::ParserTypes<v8::internal::Parser> >::NewVariable(v8::internal::AstRawString const*, int)",93957339363088,93957339363736],["non-virtual thunk to v8_inspector::protocol::Runtime::StackTraceId::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342298432,93957342298446],["v8_inspector::protocol::Runtime::DomainDispatcherImpl::compileScript(v8_crdtp::Dispatchable const&)",93957342302976,93957342304165],["v8_inspector::protocol::Runtime::DomainDispatcherImpl::getHeapUsage(v8_crdtp::Dispatchable const&)",93957342306896,93957342307233],["v8_inspector::protocol::Runtime::DomainDispatcherImpl::releaseObject(v8_crdtp::Dispatchable const&)",93957342310720,93957342311262],["v8_inspector::protocol::Runtime::DomainDispatcherImpl::runScript(v8_crdtp::Dispatchable const&)",93957342311968,93957342313219],["v8_inspector::protocol::Runtime::DomainDispatcherImpl::setMaxCallStackSizeToCapture(v8_crdtp::Dispatchable const&)",93957342313760,93957342314278],["v8_inspector::protocol::Runtime::DomainDispatcherImpl::addBinding(v8_crdtp::Dispatchable const&)",93957342314448,93957342315276],["v8_inspector::protocol::Runtime::Dispatcher::wire(v8_crdtp::UberDispatcher*, v8_inspector::protocol::Runtime::Backend*)",93957342315840,93957342316046],["v8::internal::compiler::GraphAssembler::WordAnd(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343549296,93957343549512],["v8::internal::compiler::GraphAssembler::UnreachableWithoutConnectToEnd()",93957343559120,93957343559318],["v8::internal::compiler::GraphAssembler::TailCall(v8::internal::compiler::CallDescriptor const*, int, v8::internal::compiler::Node**)",93957343563872,93957343564134],["v8::internal::compiler::GraphReducer::ReduceGraph()",93957343569376,93957343569394],["virtual thunk to v8::internal::compiler::TurboCfgFile::~TurboCfgFile()",93957343580432,93957343580569],["v8::internal::compiler::GraphC1Visualizer::PrintStringProperty(char const*, char const*)",93957343585344,93957343585523],["v8::internal::compiler::GraphC1Visualizer::PrintLiveRanges(char const*, v8::internal::compiler::TopTierRegisterAllocationData const*)",93957343612848,93957343613446],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::InstructionOperandAsJSON const&)",93957343619936,93957343622387],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::InstructionSequenceAsJSON const&)",93957343634560,93957343634778],["virtual thunk to std::__1::basic_ofstream<char, std::__1::char_traits<char> >::~basic_ofstream()",93957343635072,93957343635182],["v8::internal::compiler::(anonymous namespace)::PrintScheduledNode(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, int, v8::internal::compiler::Node*)",93957343638912,93957343639569],["v8::internal::compiler::Graph::CloneNode(v8::internal::compiler::Node const*)",93957343639824,93957343639923],["v8::internal::compiler::JSCallReducerAssembler::ReduceMathUnary(v8::internal::compiler::Operator const*)",93957343641968,93957343642198],["v8::internal::compiler::JSCallReducerAssembler::ReduceStringPrototypeSlice()",93957343643936,93957343645446],["v8::internal::compiler::JSCallReducerAssembler::ForBuilder1::Value()",93957343649584,93957343650101],["v8::internal::compiler::IteratingArrayBuiltinReducerAssembler::ReduceArrayPrototypeEverySome(v8::internal::compiler::MapInference*, bool, v8::internal::ElementsKind, v8::internal::compiler::SharedFunctionInfoRef const&, v8::internal::compiler::NativeContextRef const&, v8::internal::compiler::ArrayEverySomeVariant)",93957343655104,93957343656683],["v8::internal::compiler::JSCallReducerAssembler::TryCatchBuilder0::Catch(std::__1::function<void (v8::internal::TNode<v8::internal::Object>)> const&)",93957343660048,93957343660459],["v8::internal::compiler::JSCallReducer::ReduceMathUnary(v8::internal::compiler::Node*, v8::internal::compiler::Operator const*)",93957343661376,93957343661795],["v8::internal::compiler::JSCallReducerAssembler::JSCallReducerAssembler(v8::internal::compiler::JSCallReducer*, v8::internal::compiler::Node*)",93957343661840,93957343662342],["v8::internal::compiler::JSCallReducer::ReduceMathImul(v8::internal::compiler::Node*)",93957343662784,93957343663603],["v8::internal::compiler::JSNodeWrapperBase::control() const",93957343663744,93957343663872],["v8::internal::compiler::JSCallReducer::ReduceMathMinMax(v8::internal::compiler::Node*, v8::internal::compiler::Operator const*, v8::internal::compiler::Node*)",93957343664480,93957343665286],["v8::internal::compiler::JSCallReducer::ReduceJSConstruct(v8::internal::compiler::Node*)",93957343665520,93957343670387],["v8::internal::compiler::JSCallReducer::Finalize()",93957343674176,93957343674489],["v8::internal::compiler::JSCallReducer::ReduceBooleanConstructor(v8::internal::compiler::Node*)",93957343674704,93957343674901],["v8::internal::compiler::JSCallReducer::ReduceFunctionPrototypeApply(v8::internal::compiler::Node*)",93957343675248,93957343678788],["v8::internal::compiler::JSNodeWrapperBase::frame_state() const",93957343678896,93957343678993],["std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::endl<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)",93957343682624,93957343682733],["v8::internal::compiler::JSCallReducer::native_context() const",93957343682800,93957343682845],["v8::internal::compiler::HeapObjectMatcherImpl<(v8::internal::compiler::IrOpcode::Value)30>::Ref(v8::internal::compiler::JSHeapBroker*) const",93957343684736,93957343684841],["v8::internal::compiler::JSCallReducer::ReduceObjectGetPrototype(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343686144,93957343687729],["v8::internal::compiler::JSCallReducer::ReduceObjectIs(v8::internal::compiler::Node*)",93957343687888,93957343688174],["inet6_option_space",139871564409472,139871564409482],["getipv4sourcefilter",139871564410096,139871564410413],["setsourcefilter",139871564411280,139871564411626],["inet6_opt_append",139871564411696,139871564412043],["dreml",139871565290640,139871565290770],["atan2",139871565293792,139871565293990],["hypot",139871565294528,139871565294654],["y1",139871565294960,139871565295094],["log2",139871565295360,139871565295454],["log",139871565295552,139871565295646],["drem",139871565295984,139871565296074],["sinh",139871565296480,139871565296584],["v8::internal::Isolate::PopPromise()",93957336635312,93957336635385],["v8::internal::Isolate::Delete(v8::internal::Isolate*)",93957336638608,93957336638779],["v8::internal::Isolate::ClearSerializerData()",93957336643136,93957336643195],["v8::internal::Isolate::~Isolate()",93957336645840,93957336647921],["v8::internal::Isolate::CreateAndSetEmbeddedBlob()",93957336648272,93957336649297],["v8::internal::Isolate::InitWithoutSnapshot()",93957336649328,93957336649347],["v8::internal::Isolate::InitWithSnapshot(v8::internal::SnapshotData*, v8::internal::SnapshotData*, bool)",93957336653440,93957336653453],["v8::internal::OptimizingCompileDispatcher::OptimizingCompileDispatcher(v8::internal::Isolate*)",93957336653488,93957336653704],["v8::internal::Parser::DoParseProgram(v8::internal::Isolate*, v8::internal::ParseInfo*)",93957339291248,93957339294630],["v8::internal::ParserBase<v8::internal::Parser>::ReportUnexpectedToken(v8::internal::Token::Value)",93957339315840,93957339315871],["v8::internal::Parser::ParseExportStar()",93957339321712,93957339322579],["v8::internal::Parser::RewriteReturn(v8::internal::Expression*, int)",93957339325568,93957339326165],["v8::internal::Parser::ParseAndRewriteAsyncGeneratorFunctionBody(int, v8::internal::FunctionKind, v8::internal::ScopedList<v8::internal::Statement*, void*>*)",93957339330368,93957339333231],["v8::internal::Parser::DesugarLexicalBindingsInForStatement(v8::internal::ForStatement*, v8::internal::Statement*, v8::internal::Expression*, v8::internal::Statement*, v8::internal::Statement*, v8::internal::Scope*, v8::internal::ParserBase<v8::internal::Parser>::ForInfo const&)",93957339335488,93957339342898],["v8::internal::Parser::ParseFunction(v8::internal::ScopedList<v8::internal::Statement*, void*>*, v8::internal::AstRawString const*, int, v8::internal::FunctionKind, v8::internal::FunctionSyntaxKind, v8::internal::DeclarationScope*, int*, int*, bool*, int*, int*, v8::internal::ZoneList<v8::internal::AstRawString const*>*)",93957339345456,93957339347120],["v8::internal::Parser::BuildParameterInitializationBlock(v8::internal::ParserFormalParameters const&)",93957339347904,93957339348794],["v8::internal::ParserBase<v8::internal::Parser>::ParseFunctionBody(v8::internal::ScopedList<v8::internal::Statement*, void*>*, v8::internal::AstRawString const*, int, v8::internal::ParserFormalParameters const&, v8::internal::FunctionKind, v8::internal::FunctionSyntaxKind, v8::internal::ParserBase<v8::internal::Parser>::FunctionBodyType)",93957339350400,93957339353803],["v8::internal::Parser::CreatePrivateNameVariable(v8::internal::ClassScope*, v8::internal::VariableMode, v8::internal::IsStaticFlag, v8::internal::AstRawString const*)",93957339354240,93957339354465],["v8::internal::ParserBase<v8::internal::Parser>::ClassFieldVariableName(v8::internal::AstValueFactory*, int)",93957339355200,93957339355363],["v8::internal::Parser::DeclarePublicClassMethod(v8::internal::AstRawString const*, v8::internal::ClassLiteralProperty*, bool, v8::internal::ParserBase<v8::internal::Parser>::ClassInfo*)",93957339356160,93957339356373],["v8::internal::Parser::CreateInitializerFunction(char const*, v8::internal::DeclarationScope*, v8::internal::Statement*)",93957339356608,93957339357274],["v8::internal::Parser::InsertShadowingVarBindingInitializers(v8::internal::Block*)",93957339357968,93957339358835],["v8::internal::Parser::ParseOnBackground(v8::internal::ParseInfo*, int, int, int)",93957339359088,93957339359591],["v8::internal::Parser::TemplateLiteral::AddTemplateSpan(v8::internal::AstRawString const*, v8::internal::AstRawString const*, int, v8::internal::Zone*)",93957339359888,93957339360238],["v8_inspector::protocol::Runtime::CallArgument::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342296608,93957342296793],["v8_inspector::protocol::Runtime::Frontend::exceptionThrown(double, std::__1::unique_ptr<v8_inspector::protocol::Runtime::ExceptionDetails, std::__1::default_delete<v8_inspector::protocol::Runtime::ExceptionDetails> >)",93957342299360,93957342299551],["v8_inspector::protocol::Runtime::DomainDispatcherImpl::awaitPromise(v8_crdtp::Dispatchable const&)",93957342300528,93957342301281],["v8_inspector::protocol::Runtime::DomainDispatcherImpl::discardConsoleEntries(v8_crdtp::Dispatchable const&)",93957342304336,93957342304488],["v8_inspector::protocol::Runtime::DomainDispatcherImpl::getIsolateId(v8_crdtp::Dispatchable const&)",93957342306560,93957342306891],["v8_inspector::protocol::Runtime::DomainDispatcherImpl::getProperties(v8_crdtp::Dispatchable const&)",93957342307248,93957342308890],["v8_inspector::protocol::Runtime::DomainDispatcherImpl::queryObjects(v8_crdtp::Dispatchable const&)",93957342309776,93957342310714],["v8_inspector::protocol::Runtime::DomainDispatcherImpl::releaseObjectGroup(v8_crdtp::Dispatchable const&)",93957342311264,93957342311806],["v8::internal::compiler::GraphAssembler::Float64InsertHighWord32(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343542560,93957343542763],["v8::internal::compiler::GraphAssembler::IntPtrEqual(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343552896,93957343552906],["v8::internal::compiler::JSGraphAssembler::CheckIf(v8::internal::compiler::Node*, v8::internal::DeoptimizeReason)",93957343557472,93957343557744],["v8::internal::compiler::GraphAssembler::StoreUnaligned(v8::internal::MachineRepresentation, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343560320,93957343560604],["v8::internal::compiler::GraphAssembler::DeoptimizeIfNot(v8::internal::DeoptimizeReason, v8::internal::compiler::FeedbackSource const&, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::IsSafetyCheck)",93957343563216,93957343563255],["v8::internal::compiler::GraphAssembler::NewBasicBlock(bool)",93957343564864,93957343564920],["v8::internal::compiler::GraphReducer::~GraphReducer()",93957343566400,93957343566454],["v8::internal::compiler::GraphReducer::Replace(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343571920,93957343571935],["v8::internal::compiler::TurboJsonFile::TurboJsonFile(v8::internal::OptimizedCompilationInfo*, unsigned int)",93957343580016,93957343580307],["virtual thunk to v8::internal::compiler::TurboCfgFile::~TurboCfgFile()",93957343580704,93957343580849],["v8::internal::compiler::JsonPrintAllSourceWithPositions(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::OptimizedCompilationInfo*, v8::internal::Isolate*)",93957343583328,93957343584722],["v8::internal::compiler::GraphC1Visualizer::PrintBlockProperty(char const*, int)",93957343585728,93957343585893],["v8::internal::compiler::GraphC1Visualizer::PrintInputs(v8::internal::compiler::Node*)",93957343586768,93957343587524],["std::__1::basic_ostream<char, std::__1::char_traits<char> >& v8::internal::operator<< <v8::internal::Register, char const*>(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::Register)",93957343614448,93957343614512],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::AsRPO const&)",93957343615024,93957343619286],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::RegisterAllocationDataAsJSON const&)",93957343622736,93957343624991],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::InstructionBlockAsJSON const&)",93957343631680,93957343634549],["std::__1::basic_ofstream<char, std::__1::char_traits<char> >::~basic_ofstream()",93957343634784,93957343634862],["virtual thunk to std::__1::basic_ofstream<char, std::__1::char_traits<char> >::~basic_ofstream()",93957343634960,93957343635062],["v8::internal::compiler::JSONEscaped::PipeCharacter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char)",93957343635184,93957343635402],["v8::internal::compiler::JSONGraphEdgeWriter::PrintEdge(v8::internal::compiler::Node*, int, v8::internal::compiler::Node*)",93957343638464,93957343638910],["v8::internal::compiler::Graph::Graph(v8::internal::Zone*)",93957343639584,93957343639612],["v8::internal::compiler::Graph::NewNode(v8::internal::compiler::Operator const*, int, v8::internal::compiler::Node* const*, bool)",93957343639712,93957343639811],["v8::internal::compiler::JSCallReducerAssembler::MayThrow(std::__1::function<v8::internal::TNode<v8::internal::Object> ()> const&)",93957343639936,93957343640742],["v8::internal::compiler::JSCallReducerAssembler::AllocateEmptyJSArray(v8::internal::ElementsKind, v8::internal::compiler::NativeContextRef const&)",93957343640992,93957343641967],["v8::internal::compiler::JSCallReducerAssembler::ReduceMathBinary(v8::internal::compiler::Operator const*)",93957343642208,93957343642640],["v8::internal::compiler::JSCallReducerAssembler::IfBuilder1<v8::internal::String>::Value()",93957343643424,93957343643933],["v8::internal::compiler::IteratingArrayBuiltinReducerAssembler::ReduceArrayPrototypeForEach(v8::internal::compiler::MapInference*, bool, v8::internal::ElementsKind, v8::internal::compiler::SharedFunctionInfoRef const&)",93957343645456,93957343646872],["v8::internal::compiler::IteratingArrayBuiltinReducerAssembler::ReduceArrayPrototypeReduce(v8::internal::compiler::MapInference*, bool, v8::internal::ElementsKind, v8::internal::compiler::ArrayReduceDirection, v8::internal::compiler::SharedFunctionInfoRef const&)",93957343647360,93957343649573],["v8::internal::compiler::IteratingArrayBuiltinReducerAssembler::ReduceArrayPrototypeMap(v8::internal::compiler::MapInference*, bool, v8::internal::ElementsKind, v8::internal::compiler::SharedFunctionInfoRef const&, v8::internal::compiler::NativeContextRef const&)",93957343650112,93957343651914],["v8::internal::compiler::IteratingArrayBuiltinReducerAssembler::ReduceArrayPrototypeFind(v8::internal::compiler::MapInference*, bool, v8::internal::ElementsKind, v8::internal::compiler::SharedFunctionInfoRef const&, v8::internal::compiler::NativeContextRef const&, v8::internal::compiler::ArrayFindVariant)",93957343653488,93957343655099],["v8::internal::compiler::IteratingArrayBuiltinReducerAssembler::ReduceArrayPrototypeIndexOfIncludes(v8::internal::ElementsKind, v8::internal::compiler::ArrayIndexOfIncludesVariant)",93957343656688,93957343657873],["if_nameindex",139871564403776,139871564404509],["inet6_option_append",139871564409536,139871564409710],["inet6_option_find",139871564409904,139871564410084],["setipv4sourcefilter",139871564410416,139871564410726],["j1f64x",139871565288912,139871565289007],["tgammaf64x",139871565291520,139871565292101],["acosh",139871565293648,139871565293698],["cosh",139871565294080,139871565294184],["fmod",139871565294448,139871565294524],["j0",139871565294656,139871565294721],["j1",139871565294880,139871565294945],["jn",139871565295104,139871565295181],["v8::internal::Isolate::RestorePendingMessageFromTryCatch(v8::TryCatch*)",93957336632272,93957336632289],["v8::internal::Isolate::get_capture_stack_trace_for_uncaught_exceptions() const",93957336637792,93957336637804],["v8::internal::Isolate::AddSharedWasmMemory(v8::internal::Handle<v8::internal::WasmMemoryObject>)",93957336638416,93957336638544],["v8::internal::Isolate::SetUpFromReadOnlyArtifacts(std::__1::shared_ptr<v8::internal::ReadOnlyArtifacts>, v8::internal::ReadOnlyHeap*)",93957336640528,93957336640612],["v8::internal::Isolate::InitializeDefaultEmbeddedBlob()",93957336642720,93957336643136],["v8::internal::Isolate::LogObjectRelocation()",93957336643200,93957336643303],["v8::internal::Isolate::TearDownEmbeddedBlob()",93957336645440,93957336645840],["v8::internal::Isolate::SetTerminationOnExternalTryCatch()",93957336647936,93957336647987],["v8::internal::Parser::CollapseNaryExpression(v8::internal::Expression**, v8::internal::Expression*, v8::internal::Token::Value, int, v8::internal::SourceRange const&)",93957339282848,93957339284764],["v8::internal::Parser::PrepareWrappedArguments(v8::internal::Isolate*, v8::internal::ParseInfo*, v8::internal::Zone*)",93957339297344,93957339297904],["v8::internal::ParserBase<v8::internal::Parser>::ParseStatementListItem()",93957339314320,93957339314754],["v8::internal::Parser::ReportMessageAt(v8::internal::Scanner::Location, v8::internal::MessageTemplate, v8::internal::AstRawString const*)",93957339317920,93957339318023],["v8::internal::Parser::IgnoreCompletion(v8::internal::Statement*)",93957339321200,93957339321503],["v8::internal::Parser::Declare(v8::internal::Declaration*, v8::internal::AstRawString const*, v8::internal::VariableKind, v8::internal::VariableMode, v8::internal::InitializationFlag, v8::internal::Scope*, bool*, int, int)",93957339322912,93957339323176],["v8::internal::Parser::DeclareClass(v8::internal::AstRawString const*, v8::internal::Expression*, v8::internal::ZoneList<v8::internal::AstRawString const*>*, int, int)",93957339324304,93957339325081],["v8::internal::Parser::RewriteCatchPattern(v8::internal::ParserBase<v8::internal::Parser>::CatchInfo*)",93957339327392,93957339327800],["v8::internal::Parser::ParseAndRewriteGeneratorFunctionBody(int, v8::internal::FunctionKind, v8::internal::ScopedList<v8::internal::Statement*, void*>*)",93957339329632,93957339330354],["v8::internal::Parser::RewriteForVarInLegacy(v8::internal::ParserBase<v8::internal::Parser>::ForInfo const&)",93957339333232,93957339333972],["v8::internal::Parser::CreateForEachStatementTDZ(v8::internal::Block*, v8::internal::ParserBase<v8::internal::Parser>::ForInfo const&)",93957339334784,93957339335477],["v8::internal::Parser::AddArrowFunctionFormalParameters(v8::internal::ParserFormalParameters*, v8::internal::Expression*, int)",93957339342912,93957339343318],["v8::internal::Parser::SkipFunction(v8::internal::AstRawString const*, v8::internal::FunctionKind, v8::internal::FunctionSyntaxKind, v8::internal::DeclarationScope*, int*, int*, v8::internal::ProducedPreparseData**)",93957339343888,93957339345442],["v8::internal::ParserBase<v8::internal::Parser>::CheckFunctionName(v8::internal::LanguageMode, v8::internal::AstRawString const*, v8::internal::FunctionNameValidity, v8::internal::Scanner::Location const&)",93957339347120,93957339347295],["v8::internal::Parser::reusable_preparser()",93957339347584,93957339347898],["v8::internal::Parser::BuildRejectPromiseOnException(v8::internal::Block*, v8::internal::REPLMode)",93957339348800,93957339350085],["v8_inspector::protocol::Runtime::ObjectPreview::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342294256,93957342294691],["v8_inspector::protocol::Runtime::StackTrace::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342297728,93957342298023],["v8_inspector::protocol::Runtime::Frontend::consoleAPICalled(v8_inspector::String16 const&, std::__1::unique_ptr<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::RemoteObject, std::__1::default_delete<v8_inspector::protocol::Runtime::RemoteObject> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::RemoteObject, std::__1::default_delete<v8_inspector::protocol::Runtime::RemoteObject> > > >, std::__1::default_delete<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::RemoteObject, std::__1::default_delete<v8_inspector::protocol::Runtime::RemoteObject> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::RemoteObject, std::__1::default_delete<v8_inspector::protocol::Runtime::RemoteObject> > > > > >, int, double, v8_crdtp::detail::PtrMaybe<v8_inspector::protocol::Runtime::StackTrace>, v8_crdtp::detail::ValueMaybe<v8_inspector::String16>)",93957342298672,93957342299174],["v8_inspector::protocol::Runtime::Frontend::executionContextDestroyed(int)",93957342299696,93957342299823],["v8_inspector::protocol::Runtime::DomainDispatcherImpl::Dispatch(v8_crdtp::span<unsigned char>)",93957342300112,93957342300516],["v8_inspector::protocol::Runtime::DomainDispatcherImpl::callFunctionOn(v8_crdtp::Dispatchable const&)",93957342301296,93957342302969],["v8_inspector::protocol::Runtime::DomainDispatcherImpl::disable(v8_crdtp::Dispatchable const&)",93957342304176,93957342304328],["v8_inspector::protocol::Runtime::DomainDispatcherImpl::enable(v8_crdtp::Dispatchable const&)",93957342304496,93957342304648],["v8::internal::compiler::JSGraphAssembler::TrueConstant()",93957343536368,93957343536439],["v8::internal::compiler::GraphAssembler::Uint32LessThan(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343545952,93957343546155],["v8::internal::compiler::GraphAssembler::Int32Mod(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343551104,93957343551315],["v8::internal::compiler::JSGraphAssembler::Allocate(v8::internal::AllocationType, v8::internal::compiler::Node*)",93957343553856,93957343554080],["v8::internal::compiler::JSGraphAssembler::NumberLessThanOrEqual(v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)",93957343556592,93957343556805],["v8::internal::compiler::JSGraphAssembler::MaybeGrowFastElements(v8::internal::ElementsKind, v8::internal::compiler::FeedbackSource const&, v8::internal::TNode<v8::internal::JSArray>, v8::internal::TNode<v8::internal::FixedArrayBase>, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)",93957343558368,93957343558624],["v8::internal::compiler::GraphAssembler::StackSlot(int, int)",93957343559696,93957343559872],["v8::internal::compiler::GraphAssembler::Retain(v8::internal::compiler::Node*)",93957343561328,93957343561532],["v8::internal::compiler::GraphAssembler::DeoptimizeIf(v8::internal::DeoptimizeReason, v8::internal::compiler::FeedbackSource const&, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::IsSafetyCheck)",93957343562768,93957343562990],["v8::internal::compiler::GraphAssembler::Call(v8::internal::compiler::CallDescriptor const*, int, v8::internal::compiler::Node**)",93957343563520,93957343563703],["v8::internal::compiler::GraphAssembler::RecordBranchInBlockUpdater(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::BasicBlock*, v8::internal::compiler::BasicBlock*)",93957343564208,93957343564780],["v8::internal::compiler::GraphAssembler::GotoIfBasicBlock(v8::internal::compiler::BasicBlock*, v8::internal::compiler::Node*, v8::internal::compiler::IrOpcode::Value)",93957343565056,93957343565566],["v8::internal::compiler::GraphReducer::GraphReducer(v8::internal::Zone*, v8::internal::compiler::Graph*, v8::internal::TickCounter*, v8::internal::compiler::JSHeapBroker*, v8::internal::compiler::Node*, v8::internal::compiler::ObserveNodeManager*)",93957343566096,93957343566335],["v8::internal::compiler::GraphReducer::ReduceNode(v8::internal::compiler::Node*)",93957343567136,93957343567764],["v8::internal::compiler::GraphReducer::Revisit(v8::internal::compiler::Node*)",93957343570672,93957343570822],["v8::internal::compiler::GraphTrimmer::GraphTrimmer(v8::internal::Zone*, v8::internal::compiler::Graph*)",93957343572832,93957343573277],["v8::internal::compiler::GetVisualizerLogFileName(v8::internal::OptimizedCompilationInfo*, char const*, char const*, char const*)",93957343577152,93957343580012],["v8::internal::compiler::TurboCfgFile::~TurboCfgFile()",93957343580320,93957343580426],["v8::internal::compiler::TurboCfgFile::~TurboCfgFile()",93957343580576,93957343580690],["v8::internal::compiler::TurboCfgFile::TurboCfgFile(v8::internal::Isolate*)",93957343580864,93957343581125],["v8::internal::compiler::SourceIdAssigner::GetIdFor(v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957343582528,93957343583316],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::GraphAsJSON const&)",93957343584736,93957343585335],["v8::internal::compiler::GraphC1Visualizer::PrintLongProperty(char const*, long)",93957343585536,93957343585728],["v8::internal::compiler::GraphC1Visualizer::PrintIntProperty(char const*, int)",93957343585904,93957343586069],["v8::internal::compiler::GraphC1Visualizer::PrintNode(v8::internal::compiler::Node*)",93957343586624,93957343586759],["v8::internal::compiler::GraphC1Visualizer::PrintSchedule(char const*, v8::internal::compiler::Schedule const*, v8::internal::compiler::SourcePositionTable const*, v8::internal::compiler::InstructionSequence const*)",93957343587536,93957343612844],["v8::internal::compiler::GraphC1Visualizer::PrintLiveRange(v8::internal::compiler::LiveRange const*, char const*, int)",93957343613456,93957343614446],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::AsC1VCompilation const&)",93957343614512,93957343614670],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::AsC1VRegisterAllocationData const&)",93957343614848,93957343615019],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::LiveRangeAsJSON const&)",93957343619296,93957343619925],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::TopLevelLiveRangeAsJSON const&)",93957343622400,93957343622723],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::AsScheduledGraph const&)",93957343624992,93957343628128],["getaliasbyname_r",139871564398992,139871564399825],["getifaddrs",139871564409088,139871564409111],["inet6_option_init",139871564409488,139871564409534],["inet6_option_alloc",139871564409712,139871564409717],["atanhf64x",139871565287792,139871565287899],["log2f64x",139871565289616,139871565289781],["sinhf64x",139871565291328,139871565291436],["lgammaf64x",139871565292320,139871565292519],["acos",139871565293568,139871565293634],["asin",139871565293712,139871565293778],["atanh",139871565294000,139871565294070],["exp2",139871565294192,139871565294311],["std::__1::unique_ptr<char [], std::__1::default_delete<char []> >::~unique_ptr()",93957336627536,93957336627566],["v8::internal::Isolate::ComputeLocationFromStackTrace(v8::internal::MessageLocation*, v8::internal::Handle<v8::internal::Object>)",93957336633376,93957336633907],["v8::internal::Isolate::GetPromiseOnStackOnThrow()",93957336637120,93957336637748],["v8::internal::Isolate::AreWasmExceptionsEnabled(v8::internal::Handle<v8::internal::Context>)",93957336637856,93957336637889],["v8::internal::Isolate::UnregisterManagedPtrDestructor(v8::internal::ManagedPtrDestructor*)",93957336638304,93957336638408],["v8::internal::Isolate::New()",93957336638544,93957336638594],["v8::internal::Isolate::Deinit()",93957336638784,93957336640524],["v8::internal::Isolate::page_allocator()",93957336640624,93957336640641],["v8::internal::ParseInfo::~ParseInfo()",93957339276128,93957339276264],["void v8::internal::ParserBase<v8::internal::Parser>::ReportMessage<v8::internal::AstRawString const*>(v8::internal::MessageTemplate, v8::internal::AstRawString const*)",93957339287680,93957339287797],["v8::internal::AstNodeFactory::NewBlock(bool, v8::internal::ScopedList<v8::internal::Statement*, void*> const&)",93957339295344,93957339295538],["v8::internal::Parser::ParseFunction(v8::internal::Isolate*, v8::internal::ParseInfo*, v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957339300752,93957339302912],["v8::internal::Parser::ParseExportDeclaration()",93957339311312,93957339312804],["v8::internal::Parser::ParseExportSpecifierName()",93957339315360,93957339315522],["v8::internal::Parser::ParseNamedImports(int)",93957339315984,93957339317205],["v8::internal::ParserBase<v8::internal::Parser>::ParseNonRestrictedIdentifier()",93957339318208,93957339318455],["v8::internal::ParserBase<v8::internal::Parser>::ParseClassDeclaration(v8::internal::ZoneList<v8::internal::AstRawString const*>*, bool)",93957339320496,93957339321194],["v8::internal::Parser::NextInternalNamespaceExportName()",93957339321504,93957339321701],["v8::internal::Parser::DeclareVariable(v8::internal::AstRawString const*, v8::internal::VariableKind, v8::internal::VariableMode, v8::internal::InitializationFlag, v8::internal::Scope*, bool*, int, int)",93957339322592,93957339322901],["v8::internal::Parser::BuildInitializationBlock(v8::internal::ParserBase<v8::internal::Parser>::DeclarationParsingResult*)",93957339323184,93957339323514],["v8::internal::Parser::DeclareFunction(v8::internal::AstRawString const*, v8::internal::FunctionLiteral*, v8::internal::VariableMode, v8::internal::VariableKind, int, int, v8::internal::ZoneList<v8::internal::AstRawString const*>*)",93957339323760,93957339324295],["v8::internal::Parser::DeclareNative(v8::internal::AstRawString const*, int)",93957339325088,93957339325557],["v8::internal::Parser::RewriteSwitchStatement(v8::internal::SwitchStatement*, v8::internal::Scope*)",93957339326176,93957339327382],["v8::internal::Parser::ReportVarRedeclarationIn(v8::internal::AstRawString const*, v8::internal::Scope*)",93957339327808,93957339327998],["v8_inspector::protocol::Profiler::CounterInfo::~CounterInfo()",93957342293024,93957342293072],["v8_inspector::protocol::Runtime::PropertyDescriptor::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342295488,93957342295944],["v8_inspector::protocol::Runtime::ExceptionDetails::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342297056,93957342297475],["v8_inspector::protocol::Runtime::StackTraceId::deserializer_descriptor()",93957342298048,93957342298275],["v8_inspector::protocol::Runtime::Frontend::bindingCalled(v8_inspector::String16 const&, v8_inspector::String16 const&, int)",93957342298448,93957342298660],["v8_inspector::protocol::Runtime::Frontend::exceptionRevoked(v8_inspector::String16 const&, int)",93957342299184,93957342299355],["v8_inspector::protocol::Runtime::Frontend::executionContextCreated(std::__1::unique_ptr<v8_inspector::protocol::Runtime::ExecutionContextDescription, std::__1::default_delete<v8_inspector::protocol::Runtime::ExecutionContextDescription> >)",93957342299552,93957342299693],["v8_inspector::protocol::Runtime::Frontend::executionContextsCleared()",93957342299824,93957342299880],["v8::internal::compiler::GraphAssembler::~GraphAssembler()",93957343533360,93957343533453],["v8::internal::compiler::GraphAssembler::ChangeInt64ToFloat64(v8::internal::compiler::Node*)",93957343539232,93957343539428],["v8::internal::compiler::GraphAssembler::Int32LessThanOrEqual(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343544224,93957343544427],["v8::internal::compiler::GraphAssembler::Word32Sar(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343547632,93957343547837],["v8::internal::compiler::GraphAssembler::WordShl(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343550208,93957343550424],["v8::internal::compiler::GraphAssembler::Uint32Div(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343552000,93957343552211],["v8::internal::compiler::GraphAssembler::Float64RoundDown(v8::internal::compiler::Node*)",93957343552960,93957343553198],["v8::internal::compiler::JSGraphAssembler::StoreElement(v8::internal::compiler::ElementAccess const&, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343554752,93957343554985],["v8::internal::compiler::JSGraphAssembler::NumberSubtract(v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)",93957343556144,93957343556357],["v8::internal::compiler::JSGraphAssembler::ObjectIsCallable(v8::internal::TNode<v8::internal::Object>)",93957343557056,93957343557262],["v8::internal::compiler::JSGraphAssembler::ToBoolean(v8::internal::TNode<v8::internal::Object>)",93957343557952,93957343558158],["v8::internal::compiler::GraphAssembler::Checkpoint(v8::internal::compiler::FrameState)",93957343558832,93957343559037],["v8::internal::compiler::GraphAssembler::InitializeEffectControl(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343559520,93957343559534],["v8::internal::compiler::GraphAssembler::Store(v8::internal::compiler::StoreRepresentation, v8::internal::compiler::Node*, int, v8::internal::compiler::Node*)",93957343560096,93957343560201],["v8::internal::compiler::GraphAssembler::ProtectedStore(v8::internal::MachineRepresentation, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343560880,93957343561103],["v8::internal::compiler::JSGraphAssembler::PlainPrimitiveToNumber(v8::internal::TNode<v8::internal::Object>)",93957343561760,93957343562138],["v8::internal::compiler::GraphAssembler::Word32PoisonOnSpeculation(v8::internal::compiler::Node*)",93957343562560,93957343562765],["v8::internal::compiler::GraphAssembler::DeoptimizeIfNot(v8::internal::DeoptimizeKind, v8::internal::DeoptimizeReason, v8::internal::compiler::FeedbackSource const&, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::IsSafetyCheck)",93957343562992,93957343563209],["v8::internal::compiler::GraphAssembler::DynamicCheckMapsWithDeoptUnless(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343563264,93957343563514],["v8::internal::compiler::GraphAssembler::Call(v8::internal::compiler::Operator const*, int, v8::internal::compiler::Node**)",93957343563712,93957343563869],["v8::internal::compiler::GraphAssembler::BranchWithCriticalSafetyCheck(v8::internal::compiler::Node*, v8::internal::compiler::GraphAssemblerLabel<0ul>*, v8::internal::compiler::GraphAssemblerLabel<0ul>*)",93957343564144,93957343564198],["v8::internal::compiler::GraphAssembler::BindBasicBlock(v8::internal::compiler::BasicBlock*)",93957343564784,93957343564864],["v8::internal::compiler::GraphAssembler::GotoBasicBlock(v8::internal::compiler::BasicBlock*)",93957343564928,93957343565052],["v8::internal::compiler::GraphAssembler::FinalizeCurrentBlock(v8::internal::compiler::BasicBlock*)",93957343565568,93957343565916],["v8::internal::compiler::Reducer::Reduce(v8::internal::compiler::Node*, v8::internal::compiler::ObserveNodeManager*)",93957343566016,93957343566095],["v8::internal::compiler::GraphReducer::~GraphReducer()",93957343566336,93957343566396],["v8::internal::compiler::GraphReducer::AddReducer(v8::internal::compiler::Reducer*)",93957343566464,93957343567123],["v8::internal::compiler::GraphReducer::ReduceTop()",93957343567776,93957343569370],["v8::internal::compiler::GraphReducer::Reduce(v8::internal::compiler::Node*)",93957343569408,93957343570668],["v8::internal::compiler::GraphReducer::Replace(v8::internal::compiler::Node*, v8::internal::compiler::Node*, unsigned int)",93957343570832,93957343571919],["v8::internal::compiler::GraphReducer::ReplaceWithValue(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343571936,93957343572828],["v8::internal::compiler::GraphTrimmer::~GraphTrimmer()",93957343573280,93957343573299],["endaliasent",139871564397856,139871564398078],["if_nametoindex",139871564403472,139871564403701],["if_indextoname",139871564404512,139871564404678],["freeifaddrs",139871564409120,139871564409125],["fesetexcept",139871565285600,139871565285665],["fmodf64x",139871565288304,139871565288402],["jnf64x",139871565289216,139871565289353],["logf64x",139871565289968,139871565290133],["scalbl",139871565291008,139871565291327],["sqrtf64x",139871565291440,139871565291512],["lgammaf64x_r",139871565292112,139871565292311],["expf64x",139871565292528,139871565292665],["v8::internal::Isolate::ThrowInternal(v8::internal::Object, v8::internal::MessageLocation*)",93957336624032,93957336625267],["v8::internal::Isolate::UnwindAndFindHandler()",93957336628432,93957336631146],["v8::internal::Isolate::PromoteScheduledException()",93957336632400,93957336632441],["v8::internal::Isolate::OptionalRescheduleException(bool)",93957336634800,93957336635228],["v8::internal::Isolate::PromiseHasUserDefinedRejectHandler(v8::internal::Handle<v8::internal::JSPromise>)",93957336635392,93957336637108],["v8::internal::Isolate::SetCaptureStackTraceForUncaughtExceptions(bool, int, v8::StackTrace::StackTraceOptions)",93957336637760,93957336637785],["v8::internal::Isolate::IsWasmSimdEnabled(v8::internal::Handle<v8::internal::Context>)",93957336637808,93957336637841],["v8::internal::Isolate::GetIncumbentContext()",93957336637904,93957336638204],["v8::internal::Handle<v8::internal::String> v8::internal::LiteralBuffer::Internalize<v8::internal::Isolate>(v8::internal::Isolate*) const",93957339271552,93957339271643],["v8::internal::ParserBase<v8::internal::Parser>::NewFunctionScope(v8::internal::FunctionKind, v8::internal::Zone*) const",93957339278144,93957339278305],["v8::internal::Parser::NewSuperPropertyReference(int)",93957339286144,93957339286381],["v8::internal::ParserBase<v8::internal::Parser>::ParserBase(v8::internal::Zone*, v8::internal::Scanner*, unsigned long, v8::Extension*, v8::internal::AstValueFactory*, v8::internal::PendingCompilationErrorHandler*, v8::internal::RuntimeCallStats*, v8::internal::Logger*, v8::internal::UnoptimizedCompileFlags, bool)",93957339289056,93957339289593],["v8::internal::Parser::BuildInitialYield(int, v8::internal::FunctionKind)",93957339294880,93957339295134],["v8::internal::Parser::ParseWrapped(v8::internal::Isolate*, v8::internal::ParseInfo*, v8::internal::ScopedList<v8::internal::Statement*, void*>*, v8::internal::DeclarationScope*, v8::internal::Zone*)",93957339295888,93957339296227],["v8::internal::Parser::WrapREPLResult(v8::internal::Expression*)",93957339299920,93957339300258],["v8::internal::Parser::DoParseFunction(v8::internal::Isolate*, v8::internal::ParseInfo*, int, int, int, v8::internal::AstRawString const*)",93957339303200,93957339306479],["v8::internal::ParserBase<v8::internal::Parser>::ParseArrowFunctionLiteral(v8::internal::ParserFormalParameters const&)",93957339308720,93957339311309],["v8::internal::Parser::ParseImportDeclaration()",93957339312816,93957339314311],["v8::internal::Parser::ParseExportClause(v8::internal::Scanner::Location*, v8::internal::Scanner::Location*)",93957339314768,93957339315353],["v8::internal::ZoneChunkList<v8::internal::Parser::ExportClauseData>::push_back(v8::internal::Parser::ExportClauseData const&)",93957339315536,93957339315834],["unibrow::Utf16::HasUnpairedSurrogate(unsigned short const*, unsigned long)",93957339315872,93957339315983],["v8::internal::Parser::ParseImportAssertClause()",93957339317216,93957339317915],["v8::internal::ParserBase<v8::internal::Parser>::ExpectSemicolon()",93957339318032,93957339318196],["v8::internal::ParserBase<v8::internal::Parser>::ExpectContextualKeyword(v8::internal::AstRawString const*, char const*, int)",93957339318464,93957339318665],["v8_inspector::protocol::Profiler::ScriptCoverage::~ScriptCoverage()",93957342292384,93957342292412],["v8_inspector::protocol::Runtime::RemoteObject::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342293200,93957342293665],["v8_inspector::protocol::Runtime::PropertyPreview::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342295072,93957342295331],["v8_inspector::protocol::Runtime::PrivatePropertyDescriptor::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342296096,93957342296314],["v8_inspector::protocol::Runtime::ExecutionContextDescription::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342296800,93957342297041],["v8_inspector::protocol::Runtime::CallFrame::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342297488,93957342297728],["non-virtual thunk to v8_inspector::protocol::Runtime::StackTrace::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342298032,93957342298046],["v8_inspector::protocol::Runtime::StackTraceId::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342298288,93957342298423],["v8::internal::compiler::EscapeAnalysisTracker::Scope::InitVirtualObject(int)",93957343523360,93957343524571],["v8::internal::compiler::JSGraphAssembler::AllocateInYoungGenerationStubConstant()",93957343535088,93957343535159],["v8::internal::compiler::GraphAssembler::BitcastWord32ToWord64(v8::internal::compiler::Node*)",93957343537568,93957343537764],["v8::internal::compiler::GraphAssembler::RoundInt32ToFloat32(v8::internal::compiler::Node*)",93957343540896,93957343541092],["v8::internal::compiler::GraphAssembler::Float64Mod(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343543392,93957343543595],["v8::internal::compiler::GraphAssembler::IntAdd(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343545056,93957343545272],["v8::internal::compiler::GraphAssembler::UintLessThan(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343546784,93957343547000],["v8::internal::compiler::GraphAssembler::Word32Xor(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343548464,93957343548667],["v8::internal::compiler::GraphAssembler::WordSar(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343549744,93957343549964],["v8::internal::compiler::GraphAssembler::Int32AddWithOverflow(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343550656,93957343550867],["v8::internal::compiler::GraphAssembler::Int32SubWithOverflow(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343551552,93957343551763],["v8::internal::compiler::GraphAssembler::Uint64Div(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343552448,93957343552659],["v8::internal::compiler::GraphAssembler::SmiSub(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343552928,93957343552938],["v8::internal::compiler::GraphAssembler::TruncateFloat64ToInt64(v8::internal::compiler::Node*, v8::internal::compiler::TruncateKind)",93957343553440,93957343553638],["v8::internal::compiler::JSGraphAssembler::LoadElement(v8::internal::compiler::ElementAccess const&, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343554304,93957343554526],["v8::internal::compiler::JSGraphAssembler::StringLength(v8::internal::TNode<v8::internal::String>)",93957343555264,93957343555470],["v8::internal::compiler::JSGraphAssembler::NumberAdd(v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)",93957343555920,93957343556133],["v8::internal::compiler::JSGraphAssembler::NumberLessThan(v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)",93957343556368,93957343556581],["v8::internal::compiler::JSGraphAssembler::StringSubstring(v8::internal::TNode<v8::internal::String>, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)",93957343556816,93957343557049],["v8::internal::compiler::JSGraphAssembler::ObjectIsUndetectable(v8::internal::TNode<v8::internal::Object>)",93957343557264,93957343557470],["v8::internal::compiler::JSGraphAssembler::NumberIsFloat64Hole(v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)",93957343557744,93957343557950],["v8::internal::compiler::JSGraphAssembler::ConvertTaggedHoleToUndefined(v8::internal::TNode<v8::internal::Object>)",93957343558160,93957343558366],["v8::internal::compiler::GraphAssembler::TypeGuard(v8::internal::compiler::Type, v8::internal::compiler::Node*)",93957343558624,93957343558829],["v8::internal::compiler::GraphAssembler::Unreachable(v8::internal::compiler::GraphAssemblerLabel<0ul>*)",93957343559040,93957343559113],["v8::internal::compiler::GraphAssembler::ConnectUnreachableToEnd()",93957343559328,93957343559517],["void v8::internal::compiler::GraphAssembler::Goto<>(v8::internal::compiler::GraphAssemblerLabel<0>*)",93957343559536,93957343559691],["v8::internal::compiler::GraphAssembler::Store(v8::internal::compiler::StoreRepresentation, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343559872,93957343560095],["v8::internal::compiler::GraphAssembler::Load(v8::internal::MachineType, v8::internal::compiler::Node*, int)",93957343560208,93957343560308],["v8::internal::compiler::GraphAssembler::LoadUnaligned(v8::internal::MachineType, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343560608,93957343560873],["v8::internal::compiler::GraphAssembler::ProtectedLoad(v8::internal::MachineType, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343561104,93957343561316],["v8::internal::compiler::GraphAssembler::UnsafePointerAdd(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343561536,93957343561748],["v8::internal::compiler::GraphAssembler::BitcastWordToTagged(v8::internal::compiler::Node*)",93957343562144,93957343562349],["getnetgrent_r",139871564396000,139871564396237],["getaliasent",139871564398352,139871564398538],["getnameinfo",139871564400816,139871564403462],["if_freenameindex",139871564403712,139871564403766],["fesetround",139871565284656,139871565284781],["acosf64x",139871565287344,139871565287432],["exp2f64x",139871565288016,139871565288153],["j0f64x",139871565288608,139871565288703],["y1f64x",139871565289008,139871565289214],["ynf64x",139871565289360,139871565289609],["log10f64x",139871565289792,139871565289957],["powf64x",139871565290144,139871565290638],["v8::internal::Isolate::GetAbstractPC(int*, int*)",93957336621008,93957336621596],["v8::internal::Isolate::InvokeApiInterruptCallbacks()",93957336625616,93957336626238],["v8::internal::Isolate::ComputeLocation(v8::internal::MessageLocation*)",93957336627872,93957336628399],["v8::internal::(anonymous namespace)::PredictException(v8::internal::JavaScriptFrame*)",93957336631616,93957336632182],["v8::internal::Isolate::CancelScheduledExceptionFromTryCatch(v8::TryCatch*)",93957336632304,93957336632396],["v8::internal::Isolate::ComputeLocationFromException(v8::internal::MessageLocation*, v8::internal::Handle<v8::internal::Object>)",93957336632448,93957336633364],["v8::internal::Isolate::ReportPendingMessages()",93957336633920,93957336634786],["v8::internal::Isolate::PushPromise(v8::internal::Handle<v8::internal::JSObject>)",93957336635232,93957336635305],["v8::internal::ValueDeserializer::AddObjectWithID(unsigned int, v8::internal::Handle<v8::internal::JSReceiver>)",93957339265760,93957339265848],["v8::internal::UnoptimizedCompileFlags::ForScriptCompile(v8::internal::Isolate*, v8::internal::Script)",93957339273984,93957339274460],["v8::internal::UnoptimizedCompileState::ParallelTasks::Enqueue(v8::internal::ParseInfo*, v8::internal::AstRawString const*, v8::internal::FunctionLiteral*)",93957339276368,93957339276439],["v8::internal::ScopedList<v8::internal::Expression*, void*>::Rewind()",93957339279184,93957339279254],["v8::internal::Parser::BuildUnaryExpression(v8::internal::Expression*, v8::internal::Token::Value, int)",93957339285072,93957339285636],["v8::internal::Parser::ExpressionFromLiteral(v8::internal::Token::Value, int)",93957339286640,93957339287183],["v8::internal::ParserBase<v8::internal::Parser>::ReportMessage(v8::internal::MessageTemplate)",93957339288496,93957339288613],["v8::internal::Parser::DeserializeScopeChain(v8::internal::Isolate*, v8::internal::ParseInfo*, v8::internal::MaybeHandle<v8::internal::ScopeInfo>, v8::internal::Scope::DeserializationMode)",93957339289744,93957339290006],["v8::internal::Parser::PostProcessParseResult(v8::internal::Isolate*, v8::internal::ParseInfo*, v8::internal::FunctionLiteral*)",93957339294640,93957339294880],["v8::internal::Parser::ParseModuleItemList(v8::internal::ScopedList<v8::internal::Statement*, void*>*)",93957339295136,93957339295335],["v8::internal::Parser::RewriteAsyncFunctionBody(v8::internal::ScopedList<v8::internal::Statement*, void*>*, v8::internal::Block*, v8::internal::Expression*, v8::internal::REPLMode)",93957339295552,93957339295882],["v8::internal::Parser::ParseREPLProgram(v8::internal::ParseInfo*, v8::internal::ScopedList<v8::internal::Statement*, void*>*, v8::internal::DeclarationScope*)",93957339296240,93957339297342],["v8::internal::Parser::ParseFunctionLiteral(v8::internal::AstRawString const*, v8::internal::Scanner::Location, v8::internal::FunctionNameValidity, v8::internal::FunctionKind, int, v8::internal::FunctionSyntaxKind, v8::internal::LanguageMode, v8::internal::ZoneList<v8::internal::AstRawString const*>*)",93957339297904,93957339299920],["v8::internal::AstNodeFactory::NewObjectLiteral(v8::internal::ScopedList<v8::internal::ObjectLiteralProperty*, void*> const&, unsigned int, int, bool, v8::internal::Variable*)",93957339300272,93957339300747],["v8::internal::SharedFunctionInfo::HasOuterScopeInfo() const",93957339302912,93957339303189],["v8::internal::ParserBase<v8::internal::Parser>::ParseFormalParameterList(v8::internal::ParserFormalParameters*)",93957339306480,93957339308669],["v8_inspector::protocol::Profiler::Dispatcher::wire(v8_crdtp::UberDispatcher*, v8_inspector::protocol::Profiler::Backend*)",93957342291184,93957342291352],["v8_inspector::protocol::Profiler::TypeProfileEntry::~TypeProfileEntry()",93957342292640,93957342292774],["v8_inspector::protocol::Profiler::RuntimeCallCounterInfo::~RuntimeCallCounterInfo()",93957342293104,93957342293152],["v8_inspector::protocol::Runtime::CustomPreview::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342293696,93957342293831],["v8_inspector::protocol::Runtime::PropertyPreview::deserializer_descriptor()",93957342294704,93957342295069],["v8_inspector::protocol::Runtime::EntryPreview::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342295344,93957342295475],["v8_inspector::protocol::Runtime::InternalPropertyDescriptor::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342295952,93957342296086],["v8_inspector::protocol::Runtime::CallArgument::deserializer_descriptor()",93957342296320,93957342296593],["v8::internal::compiler::NodeHashCache::Constructor::Get()",93957343490656,93957343491449],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::FrameStateType)",93957343529824,93957343529970],["v8::internal::compiler::JSGraphAssembler::HeapConstant(v8::internal::Handle<v8::internal::HeapObject>)",93957343534208,93957343534279],["v8::internal::compiler::JSGraphAssembler::FixedDoubleArrayMapConstant()",93957343535728,93957343535799],["v8::internal::compiler::JSGraphAssembler::IsUndefined(v8::internal::TNode<v8::internal::Object>)",93957343536848,93957343536934],["v8::internal::compiler::GraphAssembler::ChangeFloat64ToInt64(v8::internal::compiler::Node*)",93957343538400,93957343538596],["v8::internal::compiler::GraphAssembler::Float64ExtractHighWord32(v8::internal::compiler::Node*)",93957343540064,93957343540260],["v8::internal::compiler::GraphAssembler::Word32ReverseBytes(v8::internal::compiler::Node*)",93957343541728,93957343541924],["v8::internal::compiler::GraphAssembler::Float64LessThan(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343542976,93957343543179],["v8::internal::compiler::GraphAssembler::Int32Add(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343543808,93957343544011],["v8::internal::compiler::GraphAssembler::Int32Sub(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343544640,93957343544843],["v8::internal::compiler::GraphAssembler::IntMul(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343545504,93957343545720],["v8::internal::compiler::GraphAssembler::Uint64LessThan(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343546368,93957343546571],["v8::internal::compiler::GraphAssembler::Word32Equal(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343547216,93957343547419],["v8::internal::compiler::GraphAssembler::Word32Shl(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343548048,93957343548251],["v8::internal::compiler::GraphAssembler::Word64Equal(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343548880,93957343549083],["v8::internal::compiler::GraphAssembler::WordEqual(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343549520,93957343549736],["v8::internal::compiler::GraphAssembler::WordSarShiftOutZeros(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343549968,93957343550194],["v8::internal::compiler::GraphAssembler::WordShr(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343550432,93957343550648],["v8::internal::compiler::GraphAssembler::Int32Div(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343550880,93957343551091],["v8::internal::compiler::GraphAssembler::Int32MulWithOverflow(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343551328,93957343551539],["v8::internal::compiler::GraphAssembler::Int64Div(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343551776,93957343551987],["v8::internal::compiler::GraphAssembler::Uint32Mod(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343552224,93957343552435],["v8::internal::compiler::GraphAssembler::Uint64Mod(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343552672,93957343552883],["v8::internal::compiler::GraphAssembler::TaggedEqual(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343552912,93957343552922],["v8::internal::compiler::GraphAssembler::SmiLessThan(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343552944,93957343552954],["v8::internal::compiler::GraphAssembler::Float64RoundTruncate(v8::internal::compiler::Node*)",93957343553200,93957343553438],["v8::internal::compiler::GraphAssembler::Projection(int, v8::internal::compiler::Node*)",93957343553648,93957343553855],["v8::internal::compiler::JSGraphAssembler::LoadField(v8::internal::compiler::FieldAccess const&, v8::internal::compiler::Node*)",93957343554080,93957343554295],["v8::internal::compiler::JSGraphAssembler::StoreField(v8::internal::compiler::FieldAccess const&, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343554528,93957343554750],["v8::internal::compiler::JSGraphAssembler::TransitionAndStoreElement(v8::internal::compiler::MapRef, v8::internal::compiler::MapRef, v8::internal::TNode<v8::internal::HeapObject>, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >, v8::internal::TNode<v8::internal::Object>)",93957343554992,93957343555262],["v8::internal::compiler::JSGraphAssembler::NumberMin(v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)",93957343555472,93957343555685],["setnetgrent",139871564394656,139871564395009],["getnetgrent",139871564397456,139871564397634],["getaliasent_r",139871564398080,139871564398338],["getaliasbyname",139871564398544,139871564398982],["__emutls_register_common",139871565196080,139871565196125],["feupdateenv",139871565285232,139871565285321],["fegetmode",139871565285696,139871565285705],["asinf64x",139871565287520,139871565287608],["coshf64x",139871565287904,139871565288012],["exp10f64x",139871565288160,139871565288297],["hypotf64x",139871565288416,139871565288604],["y0f64x",139871565288704,139871565288910],["v8::internal::StackTraceFailureMessage::StackTraceFailureMessage(v8::internal::Isolate*, void*, void*, void*, void*)",93957336616688,93957336617002],["v8::internal::Isolate::ScheduleThrow(v8::internal::Object)",93957336622368,93957336622700],["v8::internal::Isolate::CancelTerminateExecution()",93957336625312,93957336625405],["v8::internal::Isolate::CreateMessage(v8::internal::Handle<v8::internal::Object>, v8::internal::MessageLocation*)",93957336626416,93957336626712],["v8::internal::Isolate::PrintCurrentStackTrace(_IO_FILE*)",93957336627568,93957336627872],["v8::internal::Isolate::ReThrow(v8::internal::Object)",93957336628400,93957336628420],["v8::internal::Isolate::is_catchable_by_wasm(v8::internal::Object)",93957336631152,93957336631603],["v8::internal::Isolate::ThrowIllegalOperation()",93957336632192,93957336632259],["v8::internal::ValueDeserializer::ReadJSObject()",93957339256416,93957339257073],["v8::internal::FuncNameInferrer::FuncNameInferrer(v8::internal::AstValueFactory*)",93957339270672,93957339270704],["v8::internal::LiteralBuffer::AddTwoByteChar(unsigned int)",93957339272384,93957339272516],["v8::internal::UnoptimizedCompileState::UnoptimizedCompileState(v8::internal::UnoptimizedCompileState const&)",93957339275248,93957339275332],["v8::internal::ParseInfo::ResetCharacterStream()",93957339276288,93957339276321],["void v8::internal::Parser::HandleSourceURLComments<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*, v8::internal::Handle<v8::internal::Script>)",93957339276752,93957339277047],["v8::internal::AstNodeFactory::NewCall(v8::internal::Expression*, v8::internal::ScopedList<v8::internal::Expression*, void*> const&, int, bool, v8::internal::Call::PossiblyEval, bool)",93957339278640,93957339278850],["v8::internal::Parser::ReportMessageAt(v8::internal::Scanner::Location, v8::internal::MessageTemplate, char const*)",93957339279520,93957339279623],["v8::internal::NaryOperation::AddSubsequent(v8::internal::Expression*, int)",93957339284768,93957339285066],["v8::internal::Parser::NewThrowError(v8::internal::Runtime::FunctionId, v8::internal::MessageTemplate, v8::internal::AstRawString const*, int)",93957339285648,93957339286140],["v8::internal::Parser::ImportMetaExpression(int)",93957339286384,93957339286631],["v8::internal::Parser::NewV8Intrinsic(v8::internal::AstRawString const*, v8::internal::ScopedList<v8::internal::Expression*, void*> const&, int)",93957339287184,93957339287677],["v8::internal::Parser::NewV8RuntimeFunctionForFuzzing(v8::internal::Runtime::Function const*, v8::internal::ScopedList<v8::internal::Expression*, void*> const&, int)",93957339287808,93957339288481],["v8::internal::Parser::Parser(v8::internal::ParseInfo*)",93957339288624,93957339289045],["v8::internal::Parser::InitializeEmptyScopeChain(v8::internal::ParseInfo*)",93957339289600,93957339289741],["v8::internal::Parser::ParseProgram(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Script>, v8::internal::ParseInfo*, v8::internal::MaybeHandle<v8::internal::ScopeInfo>)",93957339290016,93957339291245],["v8_inspector::protocol::Profiler::DomainDispatcherImpl::takePreciseCoverage(v8_crdtp::Dispatchable const&)",93957342288528,93957342289048],["v8_inspector::protocol::Profiler::Profile::~Profile()",93957342291856,93957342291884],["v8_inspector::protocol::Profiler::TypeObject::~TypeObject()",93957342292448,93957342292496],["v8_inspector::protocol::Profiler::ScriptTypeProfile::~ScriptTypeProfile()",93957342292960,93957342292988],["v8_inspector::protocol::Profiler::RuntimeCallCounterInfo::~RuntimeCallCounterInfo()",93957342293072,93957342293104],["v8_inspector::protocol::Profiler::(anonymous namespace)::startPreciseCoverageParams::deserializer_descriptor()::$_37::__invoke(v8_crdtp::DeserializerState*, void*)",93957342293152,93957342293191],["non-virtual thunk to v8_inspector::protocol::Runtime::RemoteObject::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342293680,93957342293694],["v8_inspector::protocol::Runtime::ObjectPreview::deserializer_descriptor()",93957342293840,93957342294251],["v8::internal::compiler::EffectControlLinearizer::TruncateTaggedPointerToBit(v8::internal::compiler::Node*, v8::internal::compiler::GraphAssemblerLabel<1ul>*)",93957343471424,93957343472345],["v8::internal::compiler::SparseSidetable<v8::internal::compiler::VariableTracker::State>::Set(v8::internal::compiler::Node const*, v8::internal::compiler::VariableTracker::State)",93957343506272,93957343506785],["void std::__1::__function::__policy_invoker<void (v8::internal::compiler::Node*, v8::internal::compiler::EffectGraphReducer::Reduction*)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::compiler::EscapeAnalysis::EscapeAnalysis(v8::internal::compiler::JSGraph*, v8::internal::TickCounter*, v8::internal::Zone*)::$_0, void (v8::internal::compiler::Node*, v8::internal::compiler::EffectGraphReducer::Reduction*)> >(std::__1::__function::__policy_storage const*, v8::internal::compiler::Node*, v8::internal::compiler::EffectGraphReducer::Reduction*)",93957343529344,93957343529357],["v8::internal::compiler::FrameAccessState::MarkHasFrame(bool)",93957343531712,93957343531741],["v8::internal::compiler::GraphAssembler::UniqueIntPtrConstant(long)",93957343533696,93957343533889],["v8::internal::compiler::JSGraphAssembler::CEntryStubConstant(int)",93957343534528,93957343534606],["v8::internal::compiler::JSGraphAssembler::BooleanMapConstant()",93957343535408,93957343535479],["v8::internal::compiler::JSGraphAssembler::ZeroConstant()",93957343536048,93957343536119],["v8::internal::compiler::JSGraphAssembler::ReferenceEqual(v8::internal::TNode<v8::internal::Object>, v8::internal::TNode<v8::internal::Object>)",93957343536528,93957343536741],["v8::internal::compiler::GraphAssembler::BitcastFloat64ToInt64(v8::internal::compiler::Node*)",93957343537152,93957343537348],["v8::internal::compiler::GraphAssembler::ChangeFloat32ToFloat64(v8::internal::compiler::Node*)",93957343537984,93957343538180],["v8::internal::compiler::GraphAssembler::ChangeInt32ToFloat64(v8::internal::compiler::Node*)",93957343538816,93957343539012],["v8::internal::compiler::GraphAssembler::ChangeUint32ToUint64(v8::internal::compiler::Node*)",93957343539648,93957343539844],["v8::internal::compiler::GraphAssembler::Float64SilenceNaN(v8::internal::compiler::Node*)",93957343540480,93957343540676],["v8::internal::compiler::GraphAssembler::TruncateFloat64ToWord32(v8::internal::compiler::Node*)",93957343541312,93957343541508],["v8::internal::compiler::GraphAssembler::Float64Add(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343542144,93957343542347],["v8::internal::compiler::GraphAssembler::Float64InsertLowWord32(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343542768,93957343542971],["v8::internal::compiler::GraphAssembler::Float64LessThanOrEqual(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343543184,93957343543387],["v8::internal::compiler::GraphAssembler::Float64Sub(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343543600,93957343543803],["v8::internal::compiler::GraphAssembler::Int32LessThan(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343544016,93957343544219],["v8::internal::compiler::GraphAssembler::Int32Mul(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343544432,93957343544635],["v8::internal::compiler::GraphAssembler::Int64Sub(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343544848,93957343545051],["v8::internal::compiler::GraphAssembler::IntLessThan(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343545280,93957343545496],["v8::internal::compiler::GraphAssembler::IntSub(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343545728,93957343545944],["v8::internal::compiler::GraphAssembler::Uint32LessThanOrEqual(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343546160,93957343546363],["v8::internal::compiler::GraphAssembler::Uint64LessThanOrEqual(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343546576,93957343546779],["v8::internal::compiler::GraphAssembler::Word32And(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343547008,93957343547211],["v8::internal::compiler::GraphAssembler::Word32Or(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343547424,93957343547627],["v8::internal::compiler::GraphAssembler::Word32SarShiftOutZeros(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343547840,93957343548048],["v8::internal::compiler::GraphAssembler::Word32Shr(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343548256,93957343548459],["v8::internal::compiler::GraphAssembler::Word64And(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343548672,93957343548875],["v8::internal::compiler::GraphAssembler::Word64Or(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343549088,93957343549291],["rexec_af",139871564390320,139871564391677],["endnetgrent",139871564395152,139871564395437],["innetgr",139871564396240,139871564397410],["setaliasent",139871564397648,139871564397850],["__register_frame_info_table",139871565193184,139871565193193],["feraiseexcept",139871565284240,139871565284380],["feholdexcept",139871565284800,139871565284878],["feenableexcept",139871565285424,139871565285522],["fetestexceptflag",139871565285680,139871565285689],["fesetmode",139871565285712,139871565285834],["acoshf64x",139871565287440,139871565287512],["atan2f64x",139871565287616,139871565287789],["v8::internal::Isolate::Iterate(v8::internal::RootVisitor*, v8::internal::ThreadLocalTop*)",93957336615664,93957336615994],["v8::internal::Isolate::CaptureAndSetDetailedStackTrace(v8::internal::Handle<v8::internal::JSReceiver>)",93957336620336,93957336620484],["v8::internal::Isolate::InitializeLoggingAndCounters()",93957336621952,93957336622015],["v8::internal::Isolate::StackOverflow()",93957336623248,93957336623688],["v8::internal::Isolate::TerminateExecution()",93957336625280,93957336625299],["v8::internal::Isolate::RequestInterrupt(void (*)(v8::Isolate*, void*), void*)",93957336625408,93957336625615],["v8::internal::Isolate::CreateMessageOrAbort(v8::internal::Handle<v8::internal::Object>, v8::internal::MessageLocation*)",93957336626240,93957336626407],["v8::internal::Isolate::PredictExceptionCatcher()",93957336626720,93957336627529],["v8::internal::ValueDeserializer::ValueDeserializer(v8::internal::Isolate*, unsigned char const*, unsigned long)",93957339253280,93957339253357],["v8::internal::ValueDeserializer::ReadJSArrayBuffer(bool)",93957339262720,93957339263099],["v8::internal::NonAsciiStart(unsigned char const*, int)",93957339270064,93957339270365],["v8::internal::FuncNameInferrer::RemoveAsyncKeywordFromEnd()",93957339270912,93957339271016],["v8::internal::LiteralBuffer::ExpandBuffer()",93957339271744,93957339271919],["v8::internal::Handle<v8::internal::Script> v8::internal::ParseInfo::CreateScript<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*, v8::internal::Handle<v8::internal::String>, v8::internal::MaybeHandle<v8::internal::FixedArray>, v8::ScriptOriginOptions, v8::internal::NativesFlag)",93957339272864,93957339273213],["v8::internal::UnoptimizedCompileFlags::ForToplevelFunction(v8::internal::UnoptimizedCompileFlags, v8::internal::FunctionLiteral const*)",93957339274896,93957339275083],["v8::internal::ParseInfo::ForToplevelFunction(v8::internal::UnoptimizedCompileFlags, v8::internal::UnoptimizedCompileState*, v8::internal::FunctionLiteral const*, v8::internal::AstRawString const*)",93957339275600,93957339275865],["v8::internal::ParseInfo::scope() const",93957339276272,93957339276286],["v8::internal::ParseInfo::set_character_stream(std::__1::unique_ptr<v8::internal::Utf16CharacterStream, std::__1::default_delete<v8::internal::Utf16CharacterStream> >)",93957339276336,93957339276365],["void v8::internal::Parser::HandleSourceURLComments<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Script>)",93957339276448,93957339276743],["v8::internal::Parser::DefaultConstructor(v8::internal::AstRawString const*, bool, int, int)",93957339277056,93957339278142],["v8::internal::Parser::NewSuperCallReference(int)",93957339278320,93957339278626],["v8::internal::AstNodeFactory::NewFunctionLiteral(v8::internal::AstRawString const*, v8::internal::DeclarationScope*, v8::internal::ScopedList<v8::internal::Statement*, void*> const&, int, int, int, v8::internal::FunctionLiteral::ParameterFlag, v8::internal::FunctionSyntaxKind, v8::internal::FunctionLiteral::EagerCompileHint, int, bool, int, v8::internal::ProducedPreparseData*)",93957339278864,93957339279184],["v8::internal::Parser::ReportUnexpectedTokenAt(v8::internal::Scanner::Location, v8::internal::Token::Value, v8::internal::MessageTemplate)",93957339279264,93957339279520],["v8::internal::Parser::ShortcutNumericLiteralBinaryExpression(v8::internal::Expression**, v8::internal::Expression*, v8::internal::Token::Value, int)",93957339279632,93957339282844],["v8_inspector::protocol::Profiler::DomainDispatcherImpl::getBestEffortCoverage(v8_crdtp::Dispatchable const&)",93957342285712,93957342286200],["v8_inspector::protocol::Profiler::DomainDispatcherImpl::getCounters(v8_crdtp::Dispatchable const&)",93957342289872,93957342290360],["v8_inspector::protocol::Profiler::ProfileNode::~ProfileNode()",93957342291584,93957342291612],["v8_inspector::protocol::Profiler::FunctionCoverage::~FunctionCoverage()",93957342292048,93957342292198],["v8_inspector::protocol::Profiler::TypeObject::~TypeObject()",93957342292416,93957342292448],["v8_inspector::protocol::Profiler::TypeProfileEntry::~TypeProfileEntry()",93957342292496,93957342292635],["v8_inspector::protocol::Profiler::ScriptTypeProfile::~ScriptTypeProfile()",93957342292784,93957342292958],["v8_inspector::protocol::Profiler::CounterInfo::~CounterInfo()",93957342292992,93957342293024],["v8::internal::compiler::EffectControlLinearizer::LowerMaybeGrowFastElements(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343449040,93957343449906],["v8::internal::compiler::EffectControlLinearizer::ComputeUnseededHash(v8::internal::compiler::Node*)",93957343480320,93957343480657],["std::__1::__hash_table<v8::internal::compiler::Node*, v8::internal::compiler::NodeHashCache::NodeHashCode, v8::internal::compiler::NodeHashCache::NodeEquals, v8::internal::ZoneAllocator<v8::internal::compiler::Node*> >::rehash(unsigned long)",93957343495680,93957343496051],["v8::internal::compiler::VariableTracker::Get(v8::internal::compiler::Variable, v8::internal::compiler::Node*)",93957343517392,93957343517823],["v8::internal::compiler::EscapeAnalysisTracker::Scope::SetReplacement(v8::internal::compiler::Node*)",93957343526496,93957343526952],["v8::internal::compiler::operator==(v8::internal::compiler::FeedbackSource const&, v8::internal::compiler::FeedbackSource const&)",93957343529488,93957343529514],["v8::internal::compiler::CreateJSWasmCallBuiltinContinuationFrameState(v8::internal::compiler::JSGraph*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::Signature<v8::internal::wasm::ValueType> const*)",93957343530912,93957343531048],["v8::internal::compiler::GraphAssembler::BasicBlockUpdater::AddClonedNode(v8::internal::compiler::Node*)",93957343532512,93957343532703],["v8::internal::compiler::GraphAssembler::Int32Constant(int)",93957343533536,93957343533604],["v8::internal::compiler::JSGraphAssembler::SmiConstant(int)",93957343534048,93957343534123],["v8::internal::compiler::JSGraphAssembler::NumberConstant(double)",93957343534368,93957343534439],["v8::internal::compiler::GraphAssembler::Load(v8::internal::MachineType, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343534784,93957343534996],["v8::internal::compiler::JSGraphAssembler::AllocateRegularInYoungGenerationStubConstant()",93957343535248,93957343535319],["v8::internal::compiler::JSGraphAssembler::FalseConstant()",93957343535568,93957343535639],["v8::internal::compiler::JSGraphAssembler::MinusOneConstant()",93957343535888,93957343535959],["v8::internal::compiler::JSGraphAssembler::OneConstant()",93957343536208,93957343536279],["v8::internal::compiler::JSGraphAssembler::UndefinedConstant()",93957343536448,93957343536519],["v8::internal::compiler::JSGraphAssembler::IsTheHole(v8::internal::TNode<v8::internal::Object>)",93957343536752,93957343536838],["v8::internal::compiler::GraphAssembler::BitcastFloat32ToInt32(v8::internal::compiler::Node*)",93957343536944,93957343537140],["v8::internal::compiler::GraphAssembler::BitcastInt32ToFloat32(v8::internal::compiler::Node*)",93957343537360,93957343537556],["v8::internal::compiler::GraphAssembler::BitcastInt64ToFloat64(v8::internal::compiler::Node*)",93957343537776,93957343537972],["v8::internal::compiler::GraphAssembler::ChangeFloat64ToInt32(v8::internal::compiler::Node*)",93957343538192,93957343538388],["v8::internal::compiler::GraphAssembler::ChangeFloat64ToUint32(v8::internal::compiler::Node*)",93957343538608,93957343538804],["v8::internal::compiler::GraphAssembler::ChangeInt32ToInt64(v8::internal::compiler::Node*)",93957343539024,93957343539220],["v8::internal::compiler::GraphAssembler::ChangeUint32ToFloat64(v8::internal::compiler::Node*)",93957343539440,93957343539636],["v8::internal::compiler::GraphAssembler::Float64Abs(v8::internal::compiler::Node*)",93957343539856,93957343540052],["v8::internal::compiler::GraphAssembler::Float64ExtractLowWord32(v8::internal::compiler::Node*)",93957343540272,93957343540468],["v8::internal::compiler::GraphAssembler::RoundFloat64ToInt32(v8::internal::compiler::Node*)",93957343540688,93957343540884],["v8::internal::compiler::GraphAssembler::TruncateFloat64ToFloat32(v8::internal::compiler::Node*)",93957343541104,93957343541300],["v8::internal::compiler::GraphAssembler::TruncateInt64ToInt32(v8::internal::compiler::Node*)",93957343541520,93957343541716],["v8::internal::compiler::GraphAssembler::Word64ReverseBytes(v8::internal::compiler::Node*)",93957343541936,93957343542132],["v8::internal::compiler::GraphAssembler::Float64Equal(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343542352,93957343542555],["ruserok",139871564389888,139871564389899],["ruserpass",139871564392272,139871564393788],["__internal_endnetgrent",139871564395024,139871564395152],["__internal_getnetgrent_r",139871564395440,139871564395992],["_Unwind_Resume",139871565184960,139871565185359],["__deregister_frame",139871565193552,139871565193589],["feclearexcept",139871565284064,139871565284149],["fetestexcept",139871565284512,139871565284578],["fegetenv",139871565284784,139871565284795],["fesetenv",139871565284880,139871565285219],["fedisableexcept",139871565285328,139871565285422],["fegetexcept",139871565285536,139871565285597],["v8::internal::Isolate::embedded_blob_data_size() const",93957336614192,93957336614204],["v8::internal::Isolate::UnregisterTryCatchHandler(v8::TryCatch*)",93957336616080,93957336616097],["v8::internal::Isolate::CountUsage(v8::Isolate::UseCounterFeature)",93957336617632,93957336617791],["v8::internal::Isolate::CaptureAndSetSimpleStackTrace(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::FrameSkipMode, v8::internal::Handle<v8::internal::Object>)",93957336620560,93957336620710],["v8::internal::Isolate::PrintStack(_IO_FILE*, v8::internal::Isolate::PrintStackMode)",93957336621600,93957336621944],["v8::internal::Isolate::ReportFailedAccessCheck(v8::internal::Handle<v8::internal::JSObject>)",93957336622016,93957336622361],["v8::internal::Isolate::MayAccess(v8::internal::Handle<v8::internal::Context>, v8::internal::Handle<v8::internal::JSObject>)",93957336622704,93957336623233],["v8::internal::Isolate::ThrowAt(v8::internal::Handle<v8::internal::JSObject>, v8::internal::MessageLocation*)",93957336623696,93957336624023],["v8::internal::ValueSerializer::WriteHostObject(v8::internal::Handle<v8::internal::JSObject>)",93957339242752,93957339243170],["v8::internal::ValueDeserializer::ReadJSArrayBufferView(v8::internal::Handle<v8::internal::JSArrayBuffer>)",93957339254896,93957339255393],["v8::internal::ValueDeserializer::ReadJSPrimitiveWrapper(v8::internal::SerializationTag)",93957339259120,93957339260664],["v8::internal::ValueDeserializer::ReadWasmMemory()",93957339264656,93957339264949],["v8::internal::ValueDeserializer::ReadObjectUsingEntireBufferForLegacyFormat()",93957339268400,93957339269801],["v8::internal::ObjectVisitor::VisitRelocInfo(v8::internal::RelocIterator*)",93957339270416,93957339270484],["v8::internal::FuncNameInferrer::PushLiteralName(v8::internal::AstRawString const*)",93957339270784,93957339270842],["v8::internal::FuncNameInferrer::InferFunctionsNames()",93957339271424,93957339271515],["v8::internal::Handle<v8::internal::String> v8::internal::LiteralBuffer::Internalize<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*) const",93957339271648,93957339271739],["v8::internal::LiteralBuffer::ConvertToTwoByte()",93957339271920,93957339272383],["v8::internal::Handle<v8::internal::Script> v8::internal::ParseInfo::CreateScript<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, v8::internal::MaybeHandle<v8::internal::FixedArray>, v8::ScriptOriginOptions, v8::internal::NativesFlag)",93957339272528,93957339272862],["v8::internal::UnoptimizedCompileFlags::ForFunctionCompile(v8::internal::Isolate*, v8::internal::SharedFunctionInfo)",93957339273216,93957339273969],["v8::internal::UnoptimizedCompileFlags::ForToplevelCompile(v8::internal::Isolate*, bool, v8::internal::LanguageMode, v8::internal::REPLMode, v8::ScriptType)",93957339274464,93957339274884],["v8::internal::UnoptimizedCompileState::UnoptimizedCompileState(v8::internal::Isolate*)",93957339275088,93957339275245],["v8::internal::ParseInfo::ParseInfo(v8::internal::Isolate*, v8::internal::UnoptimizedCompileFlags, v8::internal::UnoptimizedCompileState*)",93957339275344,93957339275598],["v8::internal::ParseInfo::GetOrCreateAstValueFactory()",93957339275872,93957339276118],["v8_inspector::protocol::Profiler::CounterInfo::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342283728,93957342283860],["v8_inspector::protocol::Profiler::DomainDispatcherImpl::startTypeProfile(v8_crdtp::Dispatchable const&)",93957342287712,93957342287864],["v8_inspector::protocol::Profiler::DomainDispatcherImpl::enableCounters(v8_crdtp::Dispatchable const&)",93957342289552,93957342289704],["v8_inspector::protocol::Profiler::DomainDispatcherImpl::disableRuntimeCallStats(v8_crdtp::Dispatchable const&)",93957342290528,93957342290683],["v8_inspector::protocol::Profiler::ProfileNode::~ProfileNode()",93957342291360,93957342291576],["v8_inspector::protocol::Profiler::Profile::~Profile()",93957342291616,93957342291851],["v8_inspector::protocol::Profiler::FunctionCoverage::~FunctionCoverage()",93957342291888,93957342292039],["v8_inspector::protocol::Profiler::ScriptCoverage::~ScriptCoverage()",93957342292208,93957342292382],["v8::internal::compiler::EffectControlLinearizer::LowerStringIndexOf(v8::internal::compiler::Node*)",93957343435296,93957343435565],["v8::internal::compiler::EffectControlLinearizer::LowerTransitionAndStoreElement(v8::internal::compiler::Node*)",93957343461392,93957343463434],["v8::internal::compiler::EffectControlLinearizer::BuildCheckedHeapNumberOrOddballToFloat64(v8::internal::compiler::CheckTaggedInputMode, v8::internal::compiler::FeedbackSource const&, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343475328,93957343475970],["void v8::internal::compiler::GraphAssembler::GotoIfNot<v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> > >(v8::internal::compiler::Node*, v8::internal::compiler::GraphAssemblerLabel<1>*, v8::internal::compiler::BranchHint, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >)",93957343484496,93957343484740],["v8::internal::compiler::NodeHashCache::Constructor::MutableNode()",93957343494976,93957343495493],["v8::internal::compiler::EffectGraphReducer::ReduceFrom(v8::internal::compiler::Node*)",93957343498336,93957343499699],["v8::internal::compiler::EscapeAnalysisTracker::Scope::~Scope()",93957343515920,93957343516577],["v8::internal::compiler::PersistentMap<v8::internal::compiler::Variable, v8::internal::compiler::Node*, v8::base::hash<v8::internal::compiler::Variable> >::iterator::begin(v8::internal::compiler::PersistentMap<v8::internal::compiler::Variable, v8::internal::compiler::Node*, v8::base::hash<v8::internal::compiler::Variable> >::FocusedTree const*, v8::internal::compiler::Node*)",93957343520432,93957343520673],["v8::internal::compiler::EscapeAnalysisTracker::Scope::SetEscaped(v8::internal::compiler::Node*)",93957343525616,93957343526290],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<int, v8::internal::compiler::ObjectData*>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<int, v8::internal::compiler::ObjectData*>, std::__1::__unordered_map_hasher<int, std::__1::__hash_value_type<int, v8::internal::compiler::ObjectData*>, v8::base::hash<int>, std::__1::equal_to<int>, true>, std::__1::__unordered_map_equal<int, std::__1::__hash_value_type<int, v8::internal::compiler::ObjectData*>, std::__1::equal_to<int>, v8::base::hash<int>, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<int, v8::internal::compiler::ObjectData*> > >::__emplace_unique_key_args<int, std::__1::pair<int, v8::internal::compiler::ObjectData*> >(int const&, std::__1::pair<int, v8::internal::compiler::ObjectData*>&&)",93957343527408,93957343528359],["v8::internal::compiler::FeedbackSource::FeedbackSource(v8::internal::compiler::FeedbackVectorRef, v8::internal::FeedbackSlot)",93957343529376,93957343529426],["v8::internal::compiler::operator==(v8::internal::compiler::FrameStateInfo const&, v8::internal::compiler::FrameStateInfo const&)",93957343529632,93957343529701],["v8::internal::compiler::CreateStubBuiltinContinuationFrameState(v8::internal::compiler::JSGraph*, v8::internal::Builtins::Name, v8::internal::compiler::Node*, v8::internal::compiler::Node* const*, int, v8::internal::compiler::Node*, v8::internal::compiler::ContinuationFrameStateMode, v8::internal::Signature<v8::internal::wasm::ValueType> const*)",93957343530224,93957343530632],["v8::internal::compiler::CreateGenericLazyDeoptContinuationFrameState(v8::internal::compiler::JSGraph*, v8::internal::compiler::SharedFunctionInfoRef const&, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343531600,93957343531654],["v8::internal::compiler::FrameAccessState::GetFrameOffset(int) const",93957343531776,93957343531836],["v8::internal::compiler::GraphAssembler::GraphAssembler(v8::internal::compiler::MachineGraph*, v8::internal::Zone*, v8::base::Optional<std::__1::function<void (v8::internal::compiler::Node*)> >, v8::internal::compiler::Schedule*, bool)",93957343532944,93957343533264],["v8::internal::compiler::GraphAssembler::IntPtrConstant(long)",93957343533456,93957343533524],["v8::internal::compiler::GraphAssembler::Int64Constant(long)",93957343533616,93957343533684],["v8::internal::compiler::GraphAssembler::AddNode(v8::internal::compiler::Node*)",93957343533904,93957343534046],["v8::internal::compiler::GraphAssembler::Float64Constant(double)",93957343534128,93957343534196],["v8::internal::compiler::JSGraphAssembler::Constant(v8::internal::compiler::ObjectRef const&)",93957343534288,93957343534359],["v8::internal::compiler::GraphAssembler::ExternalConstant(v8::internal::ExternalReference)",93957343534448,93957343534516],["v8::internal::compiler::GraphAssembler::LoadFramePointer()",93957343534608,93957343534784],["v8::internal::compiler::JSGraphAssembler::AllocateInOldGenerationStubConstant()",93957343535008,93957343535079],["v8::internal::compiler::JSGraphAssembler::AllocateRegularInOldGenerationStubConstant()",93957343535168,93957343535239],["v8::internal::compiler::JSGraphAssembler::BigIntMapConstant()",93957343535328,93957343535399],["v8::internal::compiler::JSGraphAssembler::EmptyStringConstant()",93957343535488,93957343535559],["v8::internal::compiler::JSGraphAssembler::FixedArrayMapConstant()",93957343535648,93957343535719],["v8::internal::compiler::JSGraphAssembler::HeapNumberMapConstant()",93957343535808,93957343535879],["v8::internal::compiler::JSGraphAssembler::NaNConstant()",93957343535968,93957343536039],["v8::internal::compiler::JSGraphAssembler::NullConstant()",93957343536128,93957343536199],["v8::internal::compiler::JSGraphAssembler::TheHoleConstant()",93957343536288,93957343536359],["rcmd_af",139871564387008,139871564389602],["iruserok",139871564390080,139871564390196],["rexec",139871564391680,139871564391696],["__internal_setnetgrent",139871564394528,139871564394647],["_Unwind_SetIP",139871565174912,139871565174920],["__register_frame_info_bases",139871565192800,139871565192969],["__deregister_frame_info_bases",139871565193232,139871565193522],["__gcc_personality_v0",139871565194672,139871565195410],["matherr",139871565284048,139871565284051],["fegetexceptflag",139871565284160,139871565284234],["fesetexceptflag",139871565284384,139871565284502],["fegetround",139871565284592,139871565284651],["v8::internal::Isolate::CurrentEmbeddedBlobCode()",93957336613744,93957336613757],["v8::internal::Isolate::FindPerThreadDataForThread(v8::internal::ThreadId)",93957336615136,93957336615583],["v8::internal::Isolate::Iterate(v8::internal::RootVisitor*)",93957336616032,93957336616049],["v8::internal::Isolate::PushStackTraceAndDie(void*, void*, void*, void*)",93957336616560,93957336616615],["v8::internal::GetStackTraceLimit(v8::internal::Isolate*, int*)",93957336617008,93957336617619],["v8::internal::(anonymous namespace)::CaptureStackTrace(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::(anonymous namespace)::CaptureStackTraceOptions)",93957336617792,93957336620321],["v8::internal::Isolate::CaptureCurrentStackTrace(int, v8::StackTrace::StackTraceOptions)",93957336620496,93957336620558],["v8::internal::Isolate::GetDetailedStackTrace(v8::internal::Handle<v8::internal::JSObject>)",93957336620720,93957336621004],["v8::internal::ValueSerializer::WriteOneByteString(v8::internal::Vector<unsigned char const>)",93957339236192,93957339236409],["v8::internal::ValueSerializer::WriteJSArrayBufferView(v8::internal::JSArrayBufferView)",93957339249632,93957339250063],["v8::internal::ValueDeserializer::ReadUint32(unsigned int*)",93957339253696,93957339253783],["v8::internal::ValueDeserializer::ReadUtf8String()",93957339255792,93957339255934],["v8::internal::ValueDeserializer::ReadDenseJSArray()",93957339257648,93957339258650],["v8::internal::ValueDeserializer::ReadJSMap()",93957339260944,93957339261835],["v8::internal::ValueDeserializer::ReadJSError()",93957339263648,93957339264415],["v8::internal::ValueDeserializer::ReadString()",93957339265200,93957339265416],["v8::internal::ValueDeserializer::ReadJSObjectProperties(v8::internal::Handle<v8::internal::JSObject>, v8::internal::SerializationTag, bool)",93957339265856,93957339268394],["v8::internal::SetPropertiesFromKeyValuePairs(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>*, unsigned int)",93957339269808,93957339270062],["v8::internal::RootVisitor::RootName(v8::internal::Root)",93957339270368,93957339270407],["void v8::internal::RelocInfo::Visit<v8::internal::Serializer::ObjectSerializer>(v8::internal::Serializer::ObjectSerializer*)",93957339270496,93957339270665],["v8::internal::FuncNameInferrer::PushEnclosingName(v8::internal::AstRawString const*)",93957339270704,93957339270776],["v8::internal::FuncNameInferrer::PushVariableName(v8::internal::AstRawString const*)",93957339270848,93957339270906],["v8::internal::FuncNameInferrer::MakeNameFromStack()",93957339271024,93957339271421],["v8::internal::ImportAssertionsKeyComparer::operator()(v8::internal::AstRawString const*, v8::internal::AstRawString const*) const",93957339271520,93957339271540],["v8_inspector::protocol::Profiler::Profile::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342281920,93957342282354],["v8_inspector::protocol::Profiler::Frontend::preciseCoverageDeltaUpdate(double, v8_inspector::String16 const&, std::__1::unique_ptr<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Profiler::ScriptCoverage, std::__1::default_delete<v8_inspector::protocol::Profiler::ScriptCoverage> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Profiler::ScriptCoverage, std::__1::default_delete<v8_inspector::protocol::Profiler::ScriptCoverage> > > >, std::__1::default_delete<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Profiler::ScriptCoverage, std::__1::default_delete<v8_inspector::protocol::Profiler::ScriptCoverage> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Profiler::ScriptCoverage, std::__1::default_delete<v8_inspector::protocol::Profiler::ScriptCoverage> > > > > >)",93957342284592,93957342284967],["v8_inspector::protocol::Profiler::DomainDispatcherImpl::start(v8_crdtp::Dispatchable const&)",93957342286736,93957342286888],["v8_inspector::protocol::Profiler::DomainDispatcherImpl::stopPreciseCoverage(v8_crdtp::Dispatchable const&)",93957342288208,93957342288360],["v8_inspector::protocol::Profiler::DomainDispatcherImpl::takeTypeProfile(v8_crdtp::Dispatchable const&)",93957342289056,93957342289544],["v8_inspector::protocol::Profiler::DomainDispatcherImpl::disableCounters(v8_crdtp::Dispatchable const&)",93957342289712,93957342289864],["v8_inspector::protocol::Profiler::DomainDispatcherImpl::enableRuntimeCallStats(v8_crdtp::Dispatchable const&)",93957342290368,93957342290523],["v8_inspector::protocol::Profiler::DomainDispatcherImpl::getRuntimeCallStats(v8_crdtp::Dispatchable const&)",93957342290688,93957342291176],["v8::internal::compiler::EffectControlLinearizer::LowerObjectIsBigInt(v8::internal::compiler::Node*)",93957343418480,93957343418947],["v8::internal::compiler::EffectControlLinearizer::LowerNumberIsFinite(v8::internal::compiler::Node*)",93957343441792,93957343441865],["v8::internal::compiler::EffectControlLinearizer::LowerLoadStackArgument(v8::internal::compiler::Node*)",93957343456112,93957343456220],["v8::internal::compiler::EffectControlLinearizer::LowerDateNow(v8::internal::compiler::Node*)",93957343468048,93957343468256],["v8::internal::compiler::EffectControlLinearizer::BuildCheckedFloat64ToInt32(v8::internal::compiler::CheckForMinusZeroMode, v8::internal::compiler::FeedbackSource const&, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343473808,93957343474344],["v8::internal::compiler::EffectControlLinearizer::LowerStringComparison(v8::internal::Callable const&, v8::internal::compiler::Node*)",93957343477888,93957343478114],["void v8::internal::compiler::GraphAssembler::MergeState<>(v8::internal::compiler::GraphAssemblerLabel<0>*)",93957343481200,93957343482304],["v8::internal::compiler::EscapeAnalysisReducer::ReplaceNode(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343487584,93957343488091],["v8::internal::compiler::EscapeAnalysisReducer::Finalize()",93957343491664,93957343494547],["v8::internal::compiler::EscapeAnalysisReducer::~EscapeAnalysisReducer()",93957343495600,93957343495652],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<v8::internal::compiler::Node*, void*>*>, bool> std::__1::__hash_table<v8::internal::compiler::Node*, v8::internal::compiler::NodeHashCache::NodeHashCode, v8::internal::compiler::NodeHashCache::NodeEquals, v8::internal::ZoneAllocator<v8::internal::compiler::Node*> >::__emplace_unique_key_args<v8::internal::compiler::Node*, v8::internal::compiler::Node* const&>(v8::internal::compiler::Node* const&, v8::internal::compiler::Node* const&)",93957343496960,93957343497902],["v8::internal::compiler::VariableTracker::MergeInputs(v8::internal::compiler::Node*)",93957343500320,93957343505752],["v8::internal::compiler::PersistentMap<v8::internal::compiler::Variable, v8::internal::compiler::Node*, v8::base::hash<v8::internal::compiler::Variable> >::iterator::operator++()",93957343507040,93957343507477],["v8::internal::compiler::EscapeAnalysisResult::GetReplacementOf(v8::internal::compiler::Node*)",93957343517136,93957343517222],["v8::internal::compiler::VirtualObject::VirtualObject(v8::internal::compiler::VariableTracker*, unsigned int, int)",93957343518256,93957343519508],["void std::__1::__tree<std::__1::__value_type<v8::internal::compiler::Variable, v8::internal::compiler::Node*>, std::__1::__map_value_compare<v8::internal::compiler::Variable, std::__1::__value_type<v8::internal::compiler::Variable, v8::internal::compiler::Node*>, std::__1::less<v8::internal::compiler::Variable>, true>, v8::internal::ZoneAllocator<std::__1::__value_type<v8::internal::compiler::Variable, v8::internal::compiler::Node*> > >::__assign_multi<std::__1::__tree_const_iterator<std::__1::__value_type<v8::internal::compiler::Variable, v8::internal::compiler::Node*>, std::__1::__tree_node<std::__1::__value_type<v8::internal::compiler::Variable, v8::internal::compiler::Node*>, void*>*, long> >(std::__1::__tree_const_iterator<std::__1::__value_type<v8::internal::compiler::Variable, v8::internal::compiler::Node*>, std::__1::__tree_node<std::__1::__value_type<v8::internal::compiler::Variable, v8::internal::compiler::Node*>, void*>*, long>, std::__1::__tree_const_iterator<std::__1::__value_type<v8::internal::compiler::Variable, v8::internal::compiler::Node*>, std::__1::__tree_node<std::__1::__value_type<v8::internal::compiler::Variable, v8::internal::compiler::Node*>, void*>*, long>)",93957343522128,93957343523146],["v8::internal::compiler::EscapeAnalysisTracker::Scope::GetVirtualObject(v8::internal::compiler::Node*)",93957343524576,93957343525613],["v8::internal::compiler::(anonymous namespace)::OffsetOfElementsAccess(v8::internal::compiler::Operator const*, v8::internal::compiler::Node*)",93957343526304,93957343526489],["v8::internal::compiler::SparseSidetable<v8::internal::compiler::VirtualObject*>::Set(v8::internal::compiler::Node const*, v8::internal::compiler::VirtualObject*)",93957343526960,93957343527403],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<unsigned int, v8::internal::compiler::VariableTracker::State>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<unsigned int, v8::internal::compiler::VariableTracker::State>, std::__1::__unordered_map_hasher<unsigned int, std::__1::__hash_value_type<unsigned int, v8::internal::compiler::VariableTracker::State>, v8::base::hash<unsigned int>, std::__1::equal_to<unsigned int>, true>, std::__1::__unordered_map_equal<unsigned int, std::__1::__hash_value_type<unsigned int, v8::internal::compiler::VariableTracker::State>, std::__1::equal_to<unsigned int>, v8::base::hash<unsigned int>, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<unsigned int, v8::internal::compiler::VariableTracker::State> > >::__emplace_unique_key_args<unsigned int, std::__1::pair<unsigned int, v8::internal::compiler::VariableTracker::State> >(unsigned int const&, std::__1::pair<unsigned int, v8::internal::compiler::VariableTracker::State>&&)",93957343528368,93957343529333],["v8::internal::compiler::FeedbackSource::FeedbackSource(v8::internal::Handle<v8::internal::FeedbackVector>, v8::internal::FeedbackSlot)",93957343529360,93957343529372],["v8::internal::compiler::FeedbackSource::index() const",93957343529440,93957343529481],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::FeedbackSource const&)",93957343529520,93957343529618],["v8::internal::compiler::hash_value(v8::internal::compiler::FrameStateInfo const&)",93957343529712,93957343529815],["v8::internal::compiler::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::FrameStateInfo const&)",93957343529984,93957343530219],["v8::internal::compiler::(anonymous namespace)::CreateBuiltinContinuationFrameStateCommon(v8::internal::compiler::JSGraph*, v8::internal::compiler::FrameStateType, v8::internal::Builtins::Name, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node**, int, v8::internal::compiler::Node*, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Signature<v8::internal::wasm::ValueType> const*)",93957343530640,93957343530905],["v8::internal::compiler::CreateJavaScriptBuiltinContinuationFrameState(v8::internal::compiler::JSGraph*, v8::internal::compiler::SharedFunctionInfoRef const&, v8::internal::Builtins::Name, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node* const*, int, v8::internal::compiler::Node*, v8::internal::compiler::ContinuationFrameStateMode)",93957343531056,93957343531597],["v8::internal::compiler::Frame::Frame(int)",93957343531664,93957343531709],["v8::internal::compiler::FrameAccessState::SetFrameAccessToDefault()",93957343531744,93957343531775],["v8::internal::compiler::GraphAssembler::BasicBlockUpdater::CopyForChange()",93957343531840,93957343532506],["v8::internal::compiler::GraphAssembler::BasicBlockUpdater::Finalize(v8::internal::compiler::BasicBlock*)",93957343532704,93957343532932],["v8::internal::compiler::GraphAssembler::~GraphAssembler()",93957343533264,93957343533356],["ether_ntoa",139871564383824,139871564383836],["rresvport",139871564389648,139871564389658],["iruserok_af",139871564389904,139871564390070],["__ivaliduser",139871564390208,139871564390305],["__multc3",139871565172016,139871565173976],["_Unwind_GetDataRelBase",139871565174992,139871565175000],["_Unwind_DeleteException",139871565185584,139871565185609],["__register_frame",139871565192992,139871565193034],["__register_frame_table",139871565193200,139871565193226],["__deregister_frame_info",139871565193536,139871565193541],["_Unwind_Find_FDE",139871565193600,139871565194195],["__emutls_get_address",139871565195696,139871565196075],["v8::internal::Object v8::internal::FutexEmulation::WaitAsync<int>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSArrayBuffer>, unsigned long, int, bool, long)",93957336608320,93957336609660],["v8::internal::Isolate::ClearEmbeddedBlob()",93957336613808,93957336614130],["v8::internal::Isolate::FindOrAllocatePerThreadDataForThisThread()",93957336614560,93957336615102],["v8::internal::Isolate::get_address_from_id(v8::internal::IsolateAddressId)",93957336615616,93957336615632],["v8::internal::Isolate::IterateThread(v8::internal::ThreadVisitor*, char*)",93957336616000,93957336616022],["v8::internal::Isolate::RegisterTryCatchHandler(v8::TryCatch*)",93957336616064,93957336616077],["v8::internal::Isolate::PrintStack(v8::internal::StringStream*, v8::internal::Isolate::PrintStackMode)",93957336616112,93957336616556],["v8::internal::StackTraceFailureMessage::Print() volatile",93957336616624,93957336616679],["v8::internal::TransitionsAccessor::PutPrototypeTransition(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Map>)",93957339229648,93957339230470],["v8::internal::ValueSerializer::WriteSmi(v8::internal::Smi)",93957339237616,93957339237808],["v8::internal::ValueSerializer::WriteJSRegExp(v8::internal::Handle<v8::internal::JSRegExp>)",93957339246112,93957339246425],["v8::internal::ValueSerializer::WriteJSObjectSlow(v8::internal::Handle<v8::internal::JSObject>)",93957339252112,93957339252550],["v8::internal::ValueDeserializer::ReadHeader()",93957339253408,93957339253596],["v8::internal::ValueDeserializer::ReadObject()",93957339253968,93957339254315],["v8::internal::Handle<v8::internal::Object> v8::internal::FactoryBase<v8::internal::Factory>::NewNumberFromInt<(v8::internal::AllocationType)0>(int)",93957339255520,93957339255662],["v8::internal::ValueDeserializer::ReadTwoByteString()",93957339256096,93957339256272],["v8::internal::ValueDeserializer::ReadSparseJSArray()",93957339257088,93957339257644],["v8::internal::ValueDeserializer::ReadJSDate()",93957339258656,93957339259110],["v8::internal::ValueDeserializer::ReadJSRegExp()",93957339260672,93957339260938],["v8::internal::ValueDeserializer::ReadJSSet()",93957339261840,93957339262720],["v8::internal::ValueDeserializer::ReadTransferredJSArrayBuffer()",93957339263104,93957339263640],["v8::internal::ValueDeserializer::ReadWasmModuleTransfer()",93957339264416,93957339264647],["v8::internal::ValueDeserializer::ReadHostObject()",93957339264960,93957339265198],["v8::internal::ValueDeserializer::ReadExpectedString(v8::internal::Handle<v8::internal::String>)",93957339265424,93957339265760],["v8_inspector::protocol::HeapProfiler::CollectGarbageCallbackImpl::sendFailure(v8_crdtp::DispatchResponse const&)",93957342281296,93957342281315],["v8_inspector::protocol::Profiler::ScriptCoverage::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342282928,93957342283153],["v8_inspector::protocol::Profiler::Frontend::consoleProfileFinished(v8_inspector::String16 const&, std::__1::unique_ptr<v8_inspector::protocol::Debugger::Location, std::__1::default_delete<v8_inspector::protocol::Debugger::Location> >, std::__1::unique_ptr<v8_inspector::protocol::Profiler::Profile, std::__1::default_delete<v8_inspector::protocol::Profiler::Profile> >, v8_crdtp::detail::ValueMaybe<v8_inspector::String16>)",93957342284048,93957342284337],["v8_inspector::protocol::Profiler::DomainDispatcherImpl::disable(v8_crdtp::Dispatchable const&)",93957342285392,93957342285544],["v8_inspector::protocol::Profiler::DomainDispatcherImpl::setSamplingInterval(v8_crdtp::Dispatchable const&)",93957342286208,93957342286723],["v8_inspector::protocol::Profiler::DomainDispatcherImpl::startPreciseCoverage(v8_crdtp::Dispatchable const&)",93957342286896,93957342287697],["v8_inspector::protocol::Profiler::DomainDispatcherImpl::stop(v8_crdtp::Dispatchable const&)",93957342287872,93957342288196],["v8_inspector::protocol::Profiler::DomainDispatcherImpl::stopTypeProfile(v8_crdtp::Dispatchable const&)",93957342288368,93957342288520],["v8::internal::compiler::EffectControlLinearizer::LowerCheckedInt32Add(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343404736,93957343404923],["v8::internal::compiler::EffectControlLinearizer::LowerRestLength(v8::internal::compiler::Node*)",93957343425584,93957343425982],["v8::internal::compiler::EffectControlLinearizer::LowerStringSubstring(v8::internal::compiler::Node*)",93957343440016,93957343440396],["v8::internal::compiler::EffectControlLinearizer::LowerConvertTaggedHoleToUndefined(v8::internal::compiler::Node*)",93957343444480,93957343444859],["v8::internal::compiler::EffectControlLinearizer::LowerFastApiCall(v8::internal::compiler::Node*)",93957343450976,93957343453582],["v8::internal::compiler::EffectControlLinearizer::LowerFindOrderedHashMapEntry(v8::internal::compiler::Node*)",93957343457760,93957343458072],["v8::internal::compiler::EffectControlLinearizer::LowerFloat64RoundUp(v8::internal::compiler::Node*)",93957343465856,93957343467190],["void v8::internal::compiler::GraphAssembler::Bind<1ul>(v8::internal::compiler::GraphAssemblerLabel<1ul>*)",93957343469792,93957343469970],["v8::internal::compiler::EffectControlLinearizer::TryMigrateInstance(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343472864,93957343473367],["v8::internal::compiler::EffectControlLinearizer::BuildCheckedFloat64ToInt64(v8::internal::compiler::CheckForMinusZeroMode, v8::internal::compiler::FeedbackSource const&, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343474656,93957343475197],["void v8::internal::compiler::GraphAssembler::Bind<2ul>(v8::internal::compiler::GraphAssemblerLabel<2ul>*)",93957343477296,93957343477486],["v8::internal::compiler::EffectControlLinearizer::TransitionElementsTo(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::ElementsKind, v8::internal::ElementsKind)",93957343478544,93957343478988],["v8::internal::compiler::JSGraphAssembler::~JSGraphAssembler()",93957343480928,93957343480956],["void v8::internal::compiler::GraphAssembler::GotoIfNot<>(v8::internal::compiler::Node*, v8::internal::compiler::GraphAssemblerLabel<0>*, v8::internal::compiler::BranchHint)",93957343484000,93957343484234],["void v8::internal::compiler::GraphAssembler::MergeState<v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >, v8::internal::TNode<v8::internal::Object> >(v8::internal::compiler::GraphAssemblerLabel<2>*, v8::internal::TNode<v8::internal::UnionT<v8::internal::Smi, v8::internal::HeapNumber> >, v8::internal::TNode<v8::internal::Object>)",93957343485040,93957343487370],["v8::internal::compiler::EscapeAnalysisReducer::ReduceFrameStateInputs(v8::internal::compiler::Node*)",93957343488656,93957343489034],["v8::internal::compiler::EscapeAnalysisReducer::VerifyReplacement() const",93957343491456,93957343491660],["v8::internal::compiler::NodeHashCache::Constructor::Constructor(v8::internal::compiler::NodeHashCache*, v8::internal::compiler::Operator const*, int, v8::internal::compiler::Node**, v8::internal::compiler::Type)",93957343494560,93957343494966],["v8::internal::compiler::EscapeAnalysisReducer::~EscapeAnalysisReducer()",93957343495504,93957343495589],["v8::internal::compiler::EscapeAnalysisReducer::reducer_name() const",93957343495664,93957343495677],["std::__1::__hash_table<v8::internal::compiler::Node*, v8::internal::compiler::NodeHashCache::NodeHashCode, v8::internal::compiler::NodeHashCache::NodeEquals, v8::internal::ZoneAllocator<v8::internal::compiler::Node*> >::__rehash(unsigned long)",93957343496064,93957343496947],["std::__1::__hash_iterator<std::__1::__hash_node<v8::internal::compiler::Node*, void*>*> std::__1::__hash_table<v8::internal::compiler::Node*, v8::internal::compiler::NodeHashCache::NodeHashCode, v8::internal::compiler::NodeHashCache::NodeEquals, v8::internal::ZoneAllocator<v8::internal::compiler::Node*> >::find<v8::internal::compiler::Node*>(v8::internal::compiler::Node* const&)",93957343497904,93957343498333],["v8::internal::compiler::VariableTracker::Scope::Scope(v8::internal::compiler::VariableTracker*, v8::internal::compiler::Node*, v8::internal::compiler::EffectGraphReducer::Reduction*)",93957343499712,93957343500317],["v8::internal::compiler::VariableTracker::Scope::~Scope()",93957343505760,93957343506272],["v8::internal::compiler::VariableTracker::State::Get(v8::internal::compiler::Variable) const",93957343506800,93957343507038],["v8::internal::compiler::EscapeAnalysis::Reduce(v8::internal::compiler::Node*, v8::internal::compiler::EffectGraphReducer::Reduction*)",93957343507488,93957343515917],["v8::internal::compiler::EscapeAnalysis::EscapeAnalysis(v8::internal::compiler::JSGraph*, v8::internal::TickCounter*, v8::internal::Zone*)",93957343516592,93957343517129],["v8::internal::compiler::EscapeAnalysisResult::GetVirtualObjectField(v8::internal::compiler::VirtualObject const*, int, v8::internal::compiler::Node*)",93957343517232,93957343517387],["v8::internal::compiler::EscapeAnalysisResult::GetVirtualObject(v8::internal::compiler::Node*)",93957343517824,93957343518246],["v8::internal::compiler::PersistentMap<v8::internal::compiler::Variable, v8::internal::compiler::Node*, v8::base::hash<v8::internal::compiler::Variable> >::operator==(v8::internal::compiler::PersistentMap<v8::internal::compiler::Variable, v8::internal::compiler::Node*, v8::base::hash<v8::internal::compiler::Variable> > const&) const",93957343519520,93957343520421],["v8::internal::compiler::PersistentMap<v8::internal::compiler::Variable, v8::internal::compiler::Node*, v8::base::hash<v8::internal::compiler::Variable> >::Set(v8::internal::compiler::Variable, v8::internal::compiler::Node*)",93957343520688,93957343522122],["v8::internal::compiler::EscapeAnalysisTracker::Scope::ValueInput(int)",93957343523152,93957343523357],["ether_aton",139871564382752,139871564382764],["ether_ntohost",139871564383904,139871564384252],["rcmd",139871564389616,139871564389635],["ruserok_af",139871564389664,139871564389887],["__extendxftf2",139871565163696,139871565164172],["_Unwind_GetCFA",139871565174752,139871565174760],["_Unwind_GetRegionStart",139871565174944,139871565174952],["_Unwind_RaiseException",139871565183632,139871565184537],["_Unwind_Resume_or_Rethrow",139871565185360,139871565185572],["_Unwind_Backtrace",139871565185616,139871565185883],["__register_frame_info",139871565192976,139871565192985],["__register_frame_info_table_bases",139871565193040,139871565193180],["v8::internal::FutexEmulation::HandleAsyncWaiterTimeout(v8::internal::FutexWaitListNode*)",93957336602672,93957336603220],["v8::internal::InterruptsScope::InterruptsScope(v8::internal::Isolate*, long, v8::internal::InterruptsScope::Mode)",93957336613024,93957336613083],["v8::internal::Isolate::CurrentEmbeddedBlobCodeSize()",93957336613776,93957336613788],["v8::internal::Isolate::embedded_blob_code_size() const",93957336614160,93957336614172],["v8::internal::Isolate::HashIsolateForEmbeddedBlob()",93957336614208,93957336614545],["v8::internal::Isolate::FindPerThreadDataForThisThread()",93957336615104,93957336615134],["v8::internal::Isolate::InitializeOncePerProcess()",93957336615584,93957336615612],["v8::internal::Isolate::Iterate(v8::internal::RootVisitor*, char*)",93957336615632,93957336615660],["v8::internal::SyntheticModule::FinishInstantiate(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SyntheticModule>)",93957339219680,93957339219717],["v8::internal::TransitionArray::Sort()",93957339233152,93957339234653],["v8::internal::ValueSerializer::WriteUint32(unsigned int)",93957339236992,93957339237002],["v8::internal::ValueSerializer::WriteJSReceiver(v8::internal::Handle<v8::internal::JSReceiver>)",93957339238528,93957339239425],["v8::internal::ValueSerializer::WriteJSDate(v8::internal::JSDate)",93957339244512,93957339244850],["v8::internal::ValueSerializer::WriteJSSet(v8::internal::Handle<v8::internal::JSSet>)",93957339247632,93957339248582],["v8::internal::ValueSerializer::WriteWasmModule(v8::internal::Handle<v8::internal::WasmModuleObject>)",93957339251424,93957339251713],["void v8::internal::ValueSerializer::WriteVarint<unsigned char>(unsigned char)",93957339252960,93957339253185],["v8::internal::ValueDeserializer::~ValueDeserializer()",93957339253360,93957339253401],["v8::Maybe<unsigned int> v8::internal::ValueDeserializer::ReadVarint<unsigned int>()",93957339253600,93957339253686],["v8::internal::ValueDeserializer::TransferArrayBuffer(unsigned int, v8::internal::Handle<v8::internal::JSArrayBuffer>)",93957339253792,93957339253967],["v8::internal::ValueDeserializer::ReadObjectInternal()",93957339254320,93957339254896],["v8::Maybe<int> v8::internal::ValueDeserializer::ReadZigZag<int>()",93957339255408,93957339255509],["v8::internal::ValueDeserializer::ReadBigInt()",93957339255664,93957339255789],["v8::internal::ValueDeserializer::ReadOneByteString()",93957339255936,93957339256094],["v8::internal::ValueDeserializer::GetObjectWithID(unsigned int)",93957339256272,93957339256404],["v8_inspector::protocol::HeapProfiler::DomainDispatcherImpl::stopTrackingHeapObjects(v8_crdtp::Dispatchable const&)",93957342279184,93957342279773],["non-virtual thunk to v8_inspector::protocol::HeapProfiler::CollectGarbageCallbackImpl::~CollectGarbageCallbackImpl()",93957342281392,93957342281402],["v8_inspector::protocol::Profiler::CoverageRange::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342282512,93957342282675],["v8_inspector::protocol::Profiler::TypeProfileEntry::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342283280,93957342283473],["v8_inspector::protocol::Profiler::RuntimeCallCounterInfo::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342283872,93957342284042],["v8_inspector::protocol::Profiler::Frontend::consoleProfileStarted(v8_inspector::String16 const&, std::__1::unique_ptr<v8_inspector::protocol::Debugger::Location, std::__1::default_delete<v8_inspector::protocol::Debugger::Location> >, v8_crdtp::detail::ValueMaybe<v8_inspector::String16>)",93957342284352,93957342284590],["v8_inspector::protocol::Profiler::DomainDispatcherImpl::Dispatch(v8_crdtp::span<unsigned char>)",93957342284976,93957342285380],["v8_inspector::protocol::Profiler::DomainDispatcherImpl::enable(v8_crdtp::Dispatchable const&)",93957342285552,93957342285704],["v8::internal::compiler::(anonymous namespace)::RemoveRenameNode(v8::internal::compiler::Node*)",93957343392944,93957343393317],["v8::internal::compiler::EffectControlLinearizer::LowerCheckedFloat64ToInt32(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343411040,93957343411128],["v8::internal::compiler::EffectControlLinearizer::LowerObjectIsNonCallable(v8::internal::compiler::Node*)",93957343422112,93957343422725],["v8::internal::compiler::EffectControlLinearizer::LowerNewConsString(v8::internal::compiler::Node*)",93957343430048,93957343430968],["v8::internal::compiler::EffectControlLinearizer::LowerStringCharCodeAt(v8::internal::compiler::Node*)",93957343436208,93957343439237],["v8::internal::compiler::EffectControlLinearizer::LowerBigIntAdd(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343440640,93957343441035],["v8::internal::compiler::EffectControlLinearizer::LowerNumberIsSafeInteger(v8::internal::compiler::Node*)",93957343442944,93957343443277],["v8::internal::compiler::EffectControlLinearizer::LowerPlainPrimitiveToNumber(v8::internal::compiler::Node*)",93957343446576,93957343446619],["v8::internal::compiler::EffectControlLinearizer::LowerLoadMessage(v8::internal::compiler::Node*)",93957343450688,93957343450818],["v8::internal::compiler::EffectControlLinearizer::LowerLoadTypedElement(v8::internal::compiler::Node*)",93957343455392,93957343455644],["v8::internal::compiler::EffectControlLinearizer::LowerStoreDataViewElement(v8::internal::compiler::Node*)",93957343456496,93957343456990],["v8::internal::compiler::EffectControlLinearizer::LowerTransitionAndStoreNumberElement(v8::internal::compiler::Node*)",93957343459792,93957343460448],["v8::internal::compiler::EffectControlLinearizer::LowerAssertType(v8::internal::compiler::Node*)",93957343463696,93957343464089],["v8::internal::compiler::EffectControlLinearizer::LowerFloat64RoundTruncate(v8::internal::compiler::Node*)",93957343467296,93957343467379],["v8::internal::compiler::EffectControlLinearizer::ChangeFloat64ToTagged(v8::internal::compiler::Node*, v8::internal::compiler::CheckForMinusZeroMode)",93957343468544,93957343469607],["v8::internal::compiler::EffectControlLinearizer::ChangeInt32ToTagged(v8::internal::compiler::Node*)",93957343470320,93957343470837],["v8::internal::compiler::EffectControlLinearizer::MigrateInstanceOrDeopt(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::FeedbackSource const&, v8::internal::DeoptimizeReason)",93957343472352,93957343472854],["v8::internal::compiler::EffectControlLinearizer::BuildUint32Mod(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343473376,93957343473804],["v8::internal::compiler::EffectControlLinearizer::BuildCheckedFloat64ToIndex(v8::internal::compiler::FeedbackSource const&, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343474352,93957343474655],["v8::internal::compiler::EffectControlLinearizer::ChangeSmiToIntPtr(v8::internal::compiler::Node*)",93957343475200,93957343475323],["v8::internal::compiler::EffectControlLinearizer::BuildFloat64RoundTruncate(v8::internal::compiler::Node*)",93957343475984,93957343477294],["v8::internal::compiler::EffectControlLinearizer::LoadFromSeqString(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343477488,93957343477881],["v8::internal::compiler::EffectControlLinearizer::BuildReverseBytes(v8::internal::ExternalArrayType, v8::internal::compiler::Node*)",93957343478128,93957343478532],["v8::internal::compiler::EffectControlLinearizer::BuildFloat64RoundDown(v8::internal::compiler::Node*)",93957343478992,93957343480319],["v8::internal::compiler::LinearizeEffectControl(v8::internal::compiler::JSGraph*, v8::internal::compiler::Schedule*, v8::internal::Zone*, v8::internal::compiler::SourcePositionTable*, v8::internal::compiler::NodeOriginTable*, v8::internal::compiler::MaskArrayIndexEnable, v8::internal::compiler::MaintainSchedule, v8::internal::compiler::JSHeapBroker*)",93957343480672,93957343480920],["void v8::internal::compiler::GraphAssembler::GotoIf<>(v8::internal::compiler::Node*, v8::internal::compiler::GraphAssemblerLabel<0>*, v8::internal::compiler::BranchHint)",93957343480960,93957343481194],["void v8::internal::compiler::GraphAssembler::MergeState<v8::internal::TNode<v8::internal::HeapObject> >(v8::internal::compiler::GraphAssemblerLabel<1>*, v8::internal::TNode<v8::internal::HeapObject>)",93957343482304,93957343483991],["void v8::internal::compiler::GraphAssembler::GotoIf<v8::internal::TNode<v8::internal::HeapObject> >(v8::internal::compiler::Node*, v8::internal::compiler::GraphAssemblerLabel<1>*, v8::internal::compiler::BranchHint, v8::internal::TNode<v8::internal::HeapObject>)",93957343484240,93957343484484],["void v8::internal::compiler::GraphAssembler::BranchImpl<>(v8::internal::compiler::Node*, v8::internal::compiler::GraphAssemblerLabel<0>*, v8::internal::compiler::GraphAssemblerLabel<0>*, v8::internal::compiler::BranchHint, v8::internal::compiler::IsSafetyCheck)",93957343484752,93957343485030],["v8::internal::compiler::EscapeAnalysisReducer::EscapeAnalysisReducer(v8::internal::compiler::AdvancedReducer::Editor*, v8::internal::compiler::JSGraph*, v8::internal::compiler::EscapeAnalysisResult, v8::internal::Zone*)",93957343487376,93957343487569],["v8::internal::compiler::EscapeAnalysisReducer::Reduce(v8::internal::compiler::Node*)",93957343488096,93957343488652],["v8::internal::compiler::EscapeAnalysisReducer::ReduceDeoptState(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::Deduplicator*)",93957343489040,93957343490655],["getservent",139871564381824,139871564382010],["ether_hostton",139871564383040,139871564383396],["ether_ntoa_r",139871564383840,139871564383897],["rresvport_af",139871564386576,139871564387003],["__floatditf",139871565159680,139871565159915],["__getf2",139871565168304,139871565168923],["__enable_execute_stack",139871565174128,139871565174129],["_Unwind_GetIP",139871565174864,139871565174872],["_Unwind_GetLanguageSpecificData",139871565174928,139871565174936],["_Unwind_FindEnclosingFunction",139871565174960,139871565174990],["_Unwind_GetTextRelBase",139871565175008,139871565175016],["_Unwind_ForcedUnwind",139871565184544,139871565184952],["v8::internal::FutexEmulation::WaitWasm32(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSArrayBuffer>, unsigned long, int, long)",93957336599504,93957336599527],["v8::internal::FutexEmulation::NumUnresolvedAsyncPromisesForTesting(v8::internal::Handle<v8::internal::JSArrayBuffer>, unsigned long)",93957336605552,93957336606202],["v8::internal::Object v8::internal::FutexEmulation::WaitSync<long>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSArrayBuffer>, unsigned long, long, bool, long)",93957336609680,93957336611667],["v8::internal::DisableEmbeddedBlobRefcounting()",93957336613152,93957336613320],["v8::internal::Isolate::CurrentEmbeddedBlobData()",93957336613760,93957336613773],["v8::internal::Isolate::CurrentEmbeddedBlobDataSize()",93957336613792,93957336613804],["v8::internal::Isolate::embedded_blob_code() const",93957336614144,93957336614157],["v8::internal::Isolate::embedded_blob_data() const",93957336614176,93957336614189],["v8::internal::FlatStringReader::PostGarbageCollection()",93957339213664,93957339213727],["v8::internal::TransitionArray::Set(int, v8::internal::Name, v8::internal::MaybeObject)",93957339226976,93957339227292],["v8::internal::TransitionsAccessor::TraverseTransitionTreeInternal(void (*)(v8::internal::Map, void*), void*, v8::internal::CombinationAssertScope<v8::internal::PerThreadAssertScopeDebugOnly<(v8::internal::PerThreadAssertType)0, false>, v8::internal::PerThreadAssertScopeDebugOnly<(v8::internal::PerThreadAssertType)1, false> >*)",93957339231488,93957339232346],["v8::internal::ValueSerializer::~ValueSerializer()",93957339235376,93957339235506],["v8::internal::ValueSerializer::WriteBigIntContents(v8::internal::BigInt)",93957339236656,93957339236858],["v8::internal::ValueSerializer::TransferArrayBuffer(unsigned int, v8::internal::Handle<v8::internal::JSArrayBuffer>)",93957339237040,93957339237072],["v8::internal::ValueSerializer::WriteHeapNumber(v8::internal::HeapNumber)",93957339238032,93957339238343],["v8::internal::ValueSerializer::ThrowDataCloneError(v8::internal::MessageTemplate, v8::internal::Handle<v8::internal::Object>)",93957339240048,93957339240291],["v8::internal::ValueSerializer::WriteJSObject(v8::internal::Handle<v8::internal::JSObject>)",93957339243184,93957339244503],["v8::internal::ValueSerializer::WriteJSPrimitiveWrapper(v8::internal::Handle<v8::internal::JSPrimitiveWrapper>)",93957339244864,93957339246103],["v8::internal::ValueSerializer::WriteJSMap(v8::internal::Handle<v8::internal::JSMap>)",93957339246432,93957339247622],["v8::internal::ValueSerializer::WriteJSArrayBuffer(v8::internal::Handle<v8::internal::JSArrayBuffer>)",93957339248592,93957339249618],["v8::internal::ValueSerializer::WriteJSError(v8::internal::Handle<v8::internal::JSObject>)",93957339250064,93957339251414],["v8::internal::ValueSerializer::WriteWasmMemory(v8::internal::Handle<v8::internal::WasmMemoryObject>)",93957339251728,93957339252111],["v8::internal::ValueSerializer::WriteJSObjectPropertiesSlow(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArray>)",93957339252560,93957339252947],["v8::internal::ValueDeserializer::ValueDeserializer(v8::internal::Isolate*, v8::internal::Vector<unsigned char const>, v8::ValueDeserializer::Delegate*)",93957339253200,93957339253276],["v8_inspector::protocol::HeapProfiler::DomainDispatcherImpl::disable(v8_crdtp::Dispatchable const&)",93957342275408,93957342275560],["v8_inspector::protocol::HeapProfiler::SamplingHeapProfileNode::~SamplingHeapProfileNode()",93957342280704,93957342280861],["v8_inspector::protocol::HeapProfiler::CollectGarbageCallbackImpl::~CollectGarbageCallbackImpl()",93957342281344,93957342281358],["v8_inspector::protocol::HeapProfiler::(anonymous namespace)::takeHeapSnapshotParams::deserializer_descriptor()::$_21::__invoke(v8_crdtp::DeserializerState*, void*)",93957342281440,93957342281479],["v8_inspector::protocol::Profiler::PositionTickInfo::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342282368,93957342282497],["v8_inspector::protocol::Profiler::FunctionCoverage::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342282688,93957342282918],["v8_inspector::protocol::Profiler::TypeObject::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342283168,93957342283266],["v8_inspector::protocol::Profiler::ScriptTypeProfile::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342283488,93957342283713],["v8::internal::compiler::PersistentMap<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*>, v8::internal::compiler::CsaLoadElimination::FieldInfo, v8::base::hash<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*> > >::operator==(v8::internal::compiler::PersistentMap<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*>, v8::internal::compiler::CsaLoadElimination::FieldInfo, v8::base::hash<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*> > > const&) const",93957343362448,93957343362881],["v8::internal::compiler::EffectControlLinearizer::LowerTruncateTaggedToBit(v8::internal::compiler::Node*)",93957343397584,93957343398018],["v8::internal::compiler::EffectControlLinearizer::LowerCheckedInt64ToInt32(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343409120,93957343409270],["v8::internal::compiler::EffectControlLinearizer::LowerCheckedTaggedToTaggedPointer(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343414832,93957343414997],["v8::internal::compiler::EffectControlLinearizer::LowerObjectIsMinusZero(v8::internal::compiler::Node*)",93957343420592,93957343421183],["v8::internal::compiler::EffectControlLinearizer::LowerObjectIsString(v8::internal::compiler::Node*)",93957343423824,93957343424328],["v8::internal::compiler::EffectControlLinearizer::LowerUpdateInterruptBudget(v8::internal::compiler::Node*)",93957343427264,93957343427974],["v8::internal::compiler::EffectControlLinearizer::LowerDeadValue(v8::internal::compiler::Node*)",93957343432016,93957343432140],["v8::internal::compiler::EffectControlLinearizer::LowerStringLength(v8::internal::compiler::Node*)",93957343435824,93957343435943],["v8::internal::compiler::EffectControlLinearizer::LowerStringToLowerCaseIntl(v8::internal::compiler::Node*)",93957343439504,93957343439748],["v8::internal::compiler::EffectControlLinearizer::LowerStringLessThan(v8::internal::compiler::Node*)",93957343440480,93957343440551],["v8::internal::compiler::EffectControlLinearizer::LowerBigIntNegate(v8::internal::compiler::Node*)",93957343441440,93957343441681],["v8::internal::compiler::EffectControlLinearizer::LowerNumberIsInteger(v8::internal::compiler::Node*)",93957343442336,93957343442436],["v8::internal::compiler::EffectControlLinearizer::LowerCheckFloat64Hole(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343443856,93957343444290],["v8::internal::compiler::EffectControlLinearizer::LowerAllocate(v8::internal::compiler::Node*)",93957343446336,93957343446406],["v8::internal::compiler::EffectControlLinearizer::LowerPlainPrimitiveToFloat64(v8::internal::compiler::Node*)",93957343447504,93957343448389],["v8::internal::compiler::EffectControlLinearizer::LowerTransitionElementsKind(v8::internal::compiler::Node*)",93957343449920,93957343450673],["v8::internal::compiler::EffectControlLinearizer::LowerStoreMessage(v8::internal::compiler::Node*)",93957343450832,93957343450973],["v8::internal::compiler::EffectControlLinearizer::LowerLoadFieldByIndex(v8::internal::compiler::Node*)",93957343453584,93957343455389],["v8::internal::compiler::EffectControlLinearizer::LowerLoadDataViewElement(v8::internal::compiler::Node*)",93957343455648,93957343456106],["v8::internal::compiler::EffectControlLinearizer::LowerStoreTypedElement(v8::internal::compiler::Node*)",93957343456224,93957343456490],["v8::internal::compiler::EffectControlLinearizer::LowerStoreSignedSmallElement(v8::internal::compiler::Node*)",93957343456992,93957343457759],["v8::internal::compiler::EffectControlLinearizer::LowerFindOrderedHashMapEntryForInt32Key(v8::internal::compiler::Node*)",93957343458080,93957343459785],["v8::internal::compiler::EffectControlLinearizer::LowerTransitionAndStoreNonNumberElement(v8::internal::compiler::Node*)",93957343460448,93957343461391],["v8::internal::compiler::EffectControlLinearizer::LowerRuntimeAbort(v8::internal::compiler::Node*)",93957343463440,93957343463689],["v8::internal::compiler::EffectControlLinearizer::LowerConvertReceiver(v8::internal::compiler::Node*)",93957343464096,93957343465844],["v8::internal::compiler::EffectControlLinearizer::LowerFloat64RoundDown(v8::internal::compiler::Node*)",93957343467200,93957343467283],["v8::internal::compiler::EffectControlLinearizer::LowerFloat64RoundTiesEven(v8::internal::compiler::Node*)",93957343467392,93957343468036],["v8::internal::compiler::EffectControlLinearizer::LowerFoldConstant(v8::internal::compiler::Node*)",93957343468256,93957343468536],["void v8::internal::compiler::GraphAssembler::Bind<0ul>(v8::internal::compiler::GraphAssemblerLabel<0ul>*)",93957343469616,93957343469782],["v8::internal::compiler::EffectControlLinearizer::ChangeBitToTagged(v8::internal::compiler::Node*)",93957343469984,93957343470313],["v8::internal::compiler::EffectControlLinearizer::ChangeUint32ToTagged(v8::internal::compiler::Node*)",93957343470848,93957343471416],["getservbyname",139871564378784,139871564379238],["endservent",139871564382240,139871564382462],["ether_aton_r",139871564382768,139871564383025],["ether_line",139871564383408,139871564383812],["__subtf3",139871565152912,139871565157661],["__floattitf",139871565161056,139871565161933],["__trunctfdf2",139871565165376,139871565166717],["__eqtf2",139871565169568,139871565170112],["__powitf2",139871565173984,139871565174121],["_Unwind_GetGR",139871565174688,139871565174752],["_Unwind_SetGR",139871565174768,139871565174849],["_Unwind_GetIPInfo",139871565174880,139871565174904],["void std::__1::vector<v8::internal::FrameSummary, std::__1::allocator<v8::internal::FrameSummary> >::__push_back_slow_path<v8::internal::FrameSummary>(v8::internal::FrameSummary&&)",93957336597104,93957336597477],["v8::internal::FutexEmulation::CleanupAsyncWaiterPromise(v8::internal::FutexWaitListNode*)",93957336601344,93957336601682],["v8::internal::FutexEmulation::NumWaitersForTesting(v8::internal::Handle<v8::internal::JSArrayBuffer>, unsigned long)",93957336604544,93957336605128],["v8::internal::ResolveAsyncWaiterPromisesTask::RunInternal()",93957336606240,93957336606254],["v8::internal::AsyncWaiterTimeoutTask::RunInternal()",93957336609664,93957336609678],["v8::internal::Object v8::internal::FutexEmulation::WaitAsync<long>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSArrayBuffer>, unsigned long, long, bool, long)",93957336611680,93957336613023],["v8::internal::InterruptsScope::Intercept(v8::internal::StackGuard::InterruptFlag)",93957336613088,93957336613150],["v8::internal::FreeCurrentEmbeddedBlob()",93957336613328,93957336613731],["int v8::internal::(anonymous namespace)::StringMatchBackwards<unsigned short, unsigned short>(v8::internal::Vector<unsigned short const>, v8::internal::Vector<unsigned short const>, int)",93957339209632,93957339209770],["v8::internal::Handle<v8::internal::SwissNameDictionary> v8::internal::SwissNameDictionary::Rehash<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SwissNameDictionary>, int)",93957339215760,93957339216267],["v8::internal::TransitionsAccessor::HasSimpleTransitionTo(v8::internal::Map)",93957339221520,93957339221573],["v8::internal::TransitionsAccessor::SearchSpecial(v8::internal::Symbol)",93957339228240,93957339228564],["v8::internal::TransitionsAccessor::NumberOfTransitions()",93957339230736,93957339230800],["v8::internal::TransitionArray::SearchDetailsAndGetTarget(int, v8::internal::PropertyKind, v8::internal::PropertyAttributes)",93957339232656,93957339232902],["int v8::internal::BinarySearch<(v8::internal::SearchMode)0, v8::internal::TransitionArray>(v8::internal::TransitionArray*, v8::internal::Name, int, int*)",93957339234848,93957339235140],["void v8::internal::ValueSerializer::WriteVarint<unsigned int>(unsigned int)",93957339235696,93957339235972],["v8::internal::ValueSerializer::WriteTwoByteString(v8::internal::Vector<unsigned short const>)",93957339236416,93957339236642],["v8::internal::ValueSerializer::ExpandBuffer(unsigned long)",93957339236864,93957339236989],["v8::internal::ValueSerializer::Release()",93957339237008,93957339237037],["v8::internal::ValueSerializer::WriteObject(v8::internal::Handle<v8::internal::Object>)",93957339237072,93957339237603],["v8::internal::ValueSerializer::WriteOddball(v8::internal::Oddball)",93957339237808,93957339238025],["v8::internal::ValueSerializer::WriteBigInt(v8::internal::BigInt)",93957339238352,93957339238528],["v8::internal::ValueSerializer::WriteString(v8::internal::Handle<v8::internal::String>)",93957339239440,93957339240039],["v8::internal::ValueSerializer::WriteJSArray(v8::internal::Handle<v8::internal::JSArray>)",93957339240304,93957339242737],["v8_inspector::protocol::HeapProfiler::Frontend::addHeapSnapshotChunk(v8_inspector::String16 const&)",93957342273456,93957342273583],["v8_inspector::protocol::HeapProfiler::DomainDispatcherImpl::getSamplingProfile(v8_crdtp::Dispatchable const&)",93957342277424,93957342277748],["v8_inspector::protocol::HeapProfiler::Dispatcher::wire(v8_crdtp::UberDispatcher*, v8_inspector::protocol::HeapProfiler::Backend*)",93957342280368,93957342280536],["v8_inspector::protocol::HeapProfiler::SamplingHeapProfile::~SamplingHeapProfile()",93957342281024,93957342281181],["v8_inspector::protocol::HeapProfiler::CollectGarbageCallbackImpl::fallThrough()",93957342281328,93957342281342],["v8_inspector::protocol::HeapProfiler::CollectGarbageCallbackImpl::~CollectGarbageCallbackImpl()",93957342281360,93957342281392],["non-virtual thunk to v8_inspector::protocol::HeapProfiler::CollectGarbageCallbackImpl::~CollectGarbageCallbackImpl()",93957342281408,93957342281437],["v8_inspector::protocol::Profiler::ProfileNode::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342281488,93957342281907],["v8::internal::compiler::ControlEquivalence::RunUndirectedDFS(v8::internal::compiler::Node*)",93957343344608,93957343346226],["v8::internal::compiler::DeadCodeElimination::ReduceNode(v8::internal::compiler::Node*)",93957343371696,93957343371910],["v8::internal::compiler::EffectControlLinearizer::LowerChangeFloat64ToTaggedPointer(v8::internal::compiler::Node*)",93957343394928,93957343395123],["v8::internal::compiler::EffectControlLinearizer::LowerCheckNumber(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343402544,93957343403058],["v8::internal::compiler::EffectControlLinearizer::LowerCheckedUint32Div(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343407584,93957343408162],["v8::internal::compiler::EffectControlLinearizer::LowerCheckedUint32ToTaggedSigned(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343410032,93957343410258],["v8::internal::compiler::EffectControlLinearizer::LowerCheckedTaggedToInt32(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343412688,93957343413391],["v8::internal::compiler::EffectControlLinearizer::LowerTruncateTaggedToWord32(v8::internal::compiler::Node*)",93957343416576,93957343417112],["v8::internal::compiler::EffectControlLinearizer::LowerObjectIsConstructor(v8::internal::compiler::Node*)",93957343419504,93957343420038],["v8::internal::compiler::EffectControlLinearizer::LowerObjectIsNaN(v8::internal::compiler::Node*)",93957343421568,93957343422011],["v8::internal::compiler::EffectControlLinearizer::LowerObjectIsReceiver(v8::internal::compiler::Node*)",93957343423200,93957343423704],["v8::internal::compiler::EffectControlLinearizer::LowerObjectIsUndetectable(v8::internal::compiler::Node*)",93957343424848,93957343425406],["v8::internal::compiler::EffectControlLinearizer::LowerTypeOf(v8::internal::compiler::Node*)",93957343426240,93957343426487],["v8::internal::compiler::EffectControlLinearizer::LowerNewSmiOrObjectElements(v8::internal::compiler::Node*)",93957343428848,93957343429670],["v8::internal::compiler::EffectControlLinearizer::LowerSameValueNumbersOnly(v8::internal::compiler::Node*)",93957343431232,93957343431482],["v8::internal::compiler::EffectControlLinearizer::LowerStringFromSingleCharCode(v8::internal::compiler::Node*)",93957343432400,93957343433577],["v8::internal::compiler::EffectControlLinearizer::LowerStringFromCodePointAt(v8::internal::compiler::Node*)",93957343435568,93957343435818],["v8::internal::compiler::EffectControlLinearizer::LowerStringToNumber(v8::internal::compiler::Node*)",93957343435952,93957343436196],["v8::internal::compiler::EffectControlLinearizer::LowerStringCodePointAt(v8::internal::compiler::Node*)",93957343439248,93957343439498],["v8::internal::compiler::EffectControlLinearizer::LowerStringToUpperCaseIntl(v8::internal::compiler::Node*)",93957343439760,93957343440015],["v8::internal::compiler::EffectControlLinearizer::LowerStringEqual(v8::internal::compiler::Node*)",93957343440400,93957343440471],["v8::internal::compiler::EffectControlLinearizer::LowerStringLessThanOrEqual(v8::internal::compiler::Node*)",93957343440560,93957343440631],["v8::internal::compiler::EffectControlLinearizer::LowerBigIntSubtract(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343441040,93957343441435],["v8::internal::compiler::EffectControlLinearizer::LowerNumberIsFloat64Hole(v8::internal::compiler::Node*)",93957343441696,93957343441781],["v8::internal::compiler::EffectControlLinearizer::LowerObjectIsFiniteNumber(v8::internal::compiler::Node*)",93957343441872,93957343442326],["v8::internal::compiler::EffectControlLinearizer::LowerObjectIsInteger(v8::internal::compiler::Node*)",93957343442448,93957343442930],["v8::internal::compiler::EffectControlLinearizer::LowerObjectIsSafeInteger(v8::internal::compiler::Node*)",93957343443280,93957343443842],["v8::internal::compiler::EffectControlLinearizer::LowerCheckNotTaggedHole(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343444304,93957343444469],["v8::internal::compiler::EffectControlLinearizer::LowerCheckEqualsInternalizedString(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343444864,93957343446322],["v8::internal::compiler::EffectControlLinearizer::LowerCheckEqualsSymbol(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343446416,93957343446567],["v8::internal::compiler::EffectControlLinearizer::LowerPlainPrimitiveToWord32(v8::internal::compiler::Node*)",93957343446624,93957343447498],["v8::internal::compiler::EffectControlLinearizer::LowerEnsureWritableFastElements(v8::internal::compiler::Node*)",93957343448400,93957343449026],["endprotoent",139871564376976,139871564377198],["getservbyport",139871564380304,139871564380758],["setservent",139871564382016,139871564382234],["getservent_r",139871564382464,139871564382741],["__divmodti4",139871565140480,139871565140979],["__floatsitf",139871565158672,139871565158824],["__fixtfti",139871565160112,139871565160607],["__extendsftf2",139871565162688,139871565163148],["__trunctfsf2",139871565164176,139871565165364],["__trunctfxf2",139871565166720,139871565168291],["__letf2",139871565168928,139871565169563],["__divtc3",139871565170112,139871565172001],["v8::internal::InternalFrame::type() const",93957336596976,93957336596987],["v8::internal::FutexWaitList::RemoveNode(v8::internal::FutexWaitListNode*)",93957336598544,93957336598797],["v8::internal::FutexWaitListNode::FutexWaitListNode(std::__1::shared_ptr<v8::internal::BackingStore> const&, unsigned long, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Isolate*)",93957336599568,93957336600275],["v8::internal::FutexEmulation::ResolveAsyncWaiterPromises(v8::internal::Isolate*)",93957336601888,93957336602461],["v8::internal::FutexEmulation::IsolateDeinit(v8::internal::Isolate*)",93957336603232,93957336604535],["v8::internal::FutexEmulation::NumAsyncWaitersForTesting(v8::internal::Isolate*)",93957336605136,93957336605543],["v8::base::LazyInstanceImpl<v8::internal::FutexWaitList, v8::base::StaticallyAllocatedInstanceTrait<v8::internal::FutexWaitList>, v8::base::DefaultConstructTrait<v8::internal::FutexWaitList>, v8::base::ThreadSafeInitOnceTrait, v8::base::LeakyInstanceTrait<v8::internal::FutexWaitList> >::InitInstance(void*)",93957336606208,93957336606240],["v8::internal::Object v8::internal::FutexEmulation::WaitSync<int>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSArrayBuffer>, unsigned long, int, bool, long)",93957336606256,93957336608305],["v8::internal::StringCharacterStream::StringCharacterStream(v8::internal::String, int)",93957339200336,93957339200635],["v8::internal::SeqString::Truncate(v8::internal::Handle<v8::internal::SeqString>, int)",93957339212784,93957339212967],["v8::internal::ConsStringIterator::Search(int*)",93957339214192,93957339214468],["v8::internal::SwissNameDictionary::Rehash(v8::internal::Isolate*)",93957339217472,93957339218384],["v8::internal::TemplateObjectDescription::GetTemplateObject(v8::internal::Isolate*, v8::internal::Handle<v8::internal::NativeContext>, v8::internal::Handle<v8::internal::TemplateObjectDescription>, v8::internal::Handle<v8::internal::SharedFunctionInfo>, int)",93957339220224,93957339221241],["v8::internal::Map::SetBackPointer(v8::internal::HeapObject, v8::internal::WriteBarrierMode)",93957339226416,93957339226821],["v8::internal::TransitionsAccessor::SearchTransition(v8::internal::Name, v8::internal::PropertyKind, v8::internal::PropertyAttributes)",93957339227616,93957339227893],["v8::internal::TransitionsAccessor::CanHaveMoreTransitions()",93957339228816,93957339228869],["v8::internal::TransitionsAccessor::GetPrototypeTransition(v8::internal::Handle<v8::internal::Object>)",93957339230480,93957339230723],["v8::internal::TransitionsAccessor::EnsureHasFullTransitionArray()",93957339230800,93957339231477],["v8::internal::TransitionArray::SearchDetails(int, v8::internal::PropertyKind, v8::internal::PropertyAttributes, int*)",93957339232352,93957339232655],["v8::internal::TransitionArray::SearchName(v8::internal::Name, int*)",93957339232912,93957339233148],["v8::internal::TransitionsAccessor::HasIntegrityLevelTransitionTo(v8::internal::Map, v8::internal::Symbol*, v8::internal::PropertyAttributes*)",93957339234656,93957339234846],["v8::internal::ValueSerializer::ValueSerializer(v8::internal::Isolate*, v8::ValueSerializer::Delegate*)",93957339235152,93957339235364],["v8::internal::ValueSerializer::WriteHeader()",93957339235520,93957339235690],["v8::internal::ValueSerializer::WriteRawBytes(void const*, unsigned long)",93957339235984,93957339236183],["v8_inspector::protocol::Debugger::(anonymous namespace)::stepIntoParams::deserializer_descriptor()::$_85::__invoke(v8_crdtp::DeserializerState*, void*)",93957342271952,93957342271966],["v8_inspector::protocol::HeapProfiler::Frontend::resetProfiles()",93957342274224,93957342274280],["v8_inspector::protocol::HeapProfiler::DomainDispatcherImpl::getHeapObjectId(v8_crdtp::Dispatchable const&)",93957342275728,93957342276466],["v8_inspector::protocol::HeapProfiler::DomainDispatcherImpl::startTrackingHeapObjects(v8_crdtp::Dispatchable const&)",93957342278304,93957342278834],["v8_inspector::protocol::HeapProfiler::DomainDispatcherImpl::takeHeapSnapshot(v8_crdtp::Dispatchable const&)",93957342279776,93957342280365],["v8_inspector::protocol::HeapProfiler::SamplingHeapProfileNode::~SamplingHeapProfileNode()",93957342280544,93957342280702],["v8_inspector::protocol::HeapProfiler::SamplingHeapProfile::~SamplingHeapProfile()",93957342280864,93957342281022],["v8_inspector::protocol::HeapProfiler::CollectGarbageCallbackImpl::sendSuccess()",93957342281184,93957342281288],["v8::internal::compiler::ConstantInDictionaryPrototypeChainDependency::GetHolderIfValid() const",93957343337648,93957343338017],["v8::internal::compiler::CsaLoadElimination::ReduceLoadFromObject(v8::internal::compiler::Node*, v8::internal::compiler::ObjectAccess const&)",93957343353632,93957343354479],["v8::internal::compiler::DeadCodeElimination::ReduceEnd(v8::internal::compiler::Node*)",93957343365984,93957343366357],["v8::internal::compiler::DecompressionOptimizer::ChangeLoad(v8::internal::compiler::Node*)",93957343375696,93957343375890],["v8::internal::compiler::EffectControlLinearizer::LowerChangeInt64ToTagged(v8::internal::compiler::Node*)",93957343393568,93957343394178],["v8::internal::compiler::EffectControlLinearizer::LowerChangeTaggedToInt32(v8::internal::compiler::Node*)",93957343395456,93957343395992],["v8::internal::compiler::EffectControlLinearizer::LowerCheckClosure(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343398800,93957343399180],["v8::internal::compiler::EffectControlLinearizer::LowerCheckString(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343403840,93957343404074],["v8::internal::compiler::EffectControlLinearizer::LowerCheckedInt32Div(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343405120,93957343406643],["v8::internal::compiler::EffectControlLinearizer::LowerCheckedInt32Mul(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343408368,93957343408959],["v8::internal::compiler::EffectControlLinearizer::LowerCheckedUint32Bounds(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343409520,93957343409897],["v8::internal::compiler::EffectControlLinearizer::LowerCheckedUint64ToInt32(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343410656,93957343410792],["v8::internal::compiler::EffectControlLinearizer::LowerCheckedTaggedSignedToInt32(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343411232,93957343411502],["v8::internal::compiler::EffectControlLinearizer::LowerCheckedTaggedToFloat64(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343414080,93957343414642],["v8::internal::compiler::EffectControlLinearizer::LowerChangeUint64ToBigInt(v8::internal::compiler::Node*)",93957343415152,93957343415919],["v8::internal::compiler::EffectControlLinearizer::LowerNumberToString(v8::internal::compiler::Node*)",93957343417680,93957343417924],["v8::internal::compiler::EffectControlLinearizer::LowerObjectIsCallable(v8::internal::compiler::Node*)",93957343418960,93957343419494],["v8::internal::compiler::EffectControlLinearizer::LowerObjectIsDetectableCallable(v8::internal::compiler::Node*)",93957343420048,93957343420582],["v8::internal::compiler::EffectControlLinearizer::LowerNumberIsMinusZero(v8::internal::compiler::Node*)",93957343421184,93957343421564],["v8::internal::compiler::EffectControlLinearizer::LowerNumberIsNaN(v8::internal::compiler::Node*)",93957343422016,93957343422101],["v8::internal::compiler::EffectControlLinearizer::LowerObjectIsNumber(v8::internal::compiler::Node*)",93957343422736,93957343423200],["v8::internal::compiler::EffectControlLinearizer::LowerObjectIsSmi(v8::internal::compiler::Node*)",93957343423712,93957343423813],["v8::internal::compiler::EffectControlLinearizer::LowerObjectIsSymbol(v8::internal::compiler::Node*)",93957343424336,93957343424840],["v8::internal::compiler::EffectControlLinearizer::LowerArgumentsLength(v8::internal::compiler::Node*)",93957343425408,93957343425571],["v8::internal::compiler::EffectControlLinearizer::LowerToBoolean(v8::internal::compiler::Node*)",93957343425984,93957343426231],["v8::internal::compiler::EffectControlLinearizer::LowerTierUpCheck(v8::internal::compiler::Node*)",93957343426496,93957343427249],["v8::internal::compiler::EffectControlLinearizer::LowerNewDoubleElements(v8::internal::compiler::Node*)",93957343427984,93957343428839],["v8::internal::compiler::EffectControlLinearizer::LowerNewArgumentsElements(v8::internal::compiler::Node*)",93957343429680,93957343430039],["v8::internal::compiler::EffectControlLinearizer::LowerSameValue(v8::internal::compiler::Node*)",93957343430976,93957343431226],["v8::internal::compiler::EffectControlLinearizer::LowerNumberSameValue(v8::internal::compiler::Node*)",93957343431488,93957343432014],["v8::internal::compiler::EffectControlLinearizer::LowerStringConcat(v8::internal::compiler::Node*)",93957343432144,93957343432392],["v8::internal::compiler::EffectControlLinearizer::LowerStringFromSingleCodePoint(v8::internal::compiler::Node*)",93957343433584,93957343435293],["getprotobynumber",139871564375264,139871564375702],["getprotobyname",139871564377488,139871564377926],["getservbyname_r",139871564379248,139871564380290],["getservbyport_r",139871564380768,139871564381810],["__floattisf",139871565138528,139871565138832],["__addtf3",139871565142128,139871565146957],["__fixtfsi",139871565158192,139871565158442],["__fixtfdi",139871565158976,139871565159349],["__floatunditf",139871565159920,139871565160106],["__fixunstfti",139871565160608,139871565161048],["__floatuntitf",139871565161936,139871565162676],["__extenddftf2",139871565163152,139871565163696],["v8::internal::StoreTransitionDescriptor::MapRegister()",93957336596848,93957336596859],["v8::internal::BuiltinContinuationFrame::type() const",93957336597040,93957336597051],["v8::internal::FutexWaitListNode::NotifyWake()",93957336597648,93957336597832],["v8::internal::FutexEmulation::WaitJs32(v8::internal::Isolate*, v8::internal::FutexEmulation::WaitMode, v8::internal::Handle<v8::internal::JSArrayBuffer>, unsigned long, int, double)",93957336599088,93957336599293],["v8::internal::FutexEmulation::WaitWasm64(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSArrayBuffer>, unsigned long, long, long)",93957336599536,93957336599559],["v8::internal::FutexEmulation::Wake(v8::internal::Handle<v8::internal::JSArrayBuffer>, unsigned long, unsigned int)",93957336600288,93957336601341],["v8::internal::FutexEmulation::ResolveAsyncWaiterPromise(v8::internal::FutexWaitListNode*)",93957336601696,93957336601882],["v8::internal::FutexWaitList::DeleteAsyncWaiterNode(v8::internal::FutexWaitListNode*)",93957336602464,93957336602661],["void v8::internal::CalculateLineEndsImpl<unsigned short>(std::__1::vector<int, std::__1::allocator<int> >*, v8::internal::Vector<unsigned short const>, bool)",93957339193536,93957339193783],["v8::internal::String::Compare(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String>)",93957339205696,93957339206299],["bool v8::internal::StringToIndex<v8::internal::StringCharacterStream, unsigned int, (v8::internal::ToIndexMode)0>(v8::internal::StringCharacterStream*, unsigned int*)",93957339210912,93957339211576],["v8::internal::ThinString::Get(int) const",93957339213296,93957339213372],["v8::internal::ConsStringIterator::Continue(int*)",93957339213776,93957339213866],["v8::internal::ConsString v8::internal::String::VisitFlat<v8::internal::StringCharacterStream>(v8::internal::StringCharacterStream*, v8::internal::String, int, v8::internal::SharedStringAccessGuardIfNeeded const&)",93957339215008,93957339215442],["v8::internal::SwissNameDictionary::ClearDataTableEntry(v8::internal::Isolate*, int)",93957339216576,93957339216873],["v8::internal::SyntheticModule::ResolveExport(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SyntheticModule>, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String>, v8::internal::MessageLocation, bool)",93957339218800,93957339219052],["v8::internal::SyntheticModule::Evaluate(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SyntheticModule>)",93957339219728,93957339220214],["v8::internal::CachedTemplateObject::New(v8::internal::Isolate*, int, v8::internal::Handle<v8::internal::JSArray>, v8::internal::Handle<v8::internal::HeapObject>)",93957339221248,93957339221515],["v8::internal::TransitionsAccessor::Insert(v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Map>, v8::internal::SimpleTransitionFlag)",93957339221584,93957339226406],["v8::internal::TransitionsAccessor::ReplaceTransitions(v8::internal::MaybeObject)",93957339226832,93957339226969],["v8::internal::TransitionArray::Search(v8::internal::PropertyKind, v8::internal::Name, v8::internal::PropertyAttributes, int*)",93957339227296,93957339227601],["v8::internal::TransitionArray::SearchAndGetTarget(v8::internal::PropertyKind, v8::internal::Name, v8::internal::PropertyAttributes)",93957339227904,93957339228230],["v8::internal::TransitionsAccessor::FindTransitionToDataProperty(v8::internal::Handle<v8::internal::Name>, v8::internal::TransitionsAccessor::RequestedLocation)",93957339228576,93957339228813],["v8::internal::TransitionArray::CompactPrototypeTransitionArray(v8::internal::Isolate*, v8::internal::WeakFixedArray)",93957339228880,93957339229645],["v8_inspector::protocol::Debugger::(anonymous namespace)::setBreakpointByUrlParams::deserializer_descriptor()::$_66::__invoke(v8_crdtp::DeserializerState*, void*)",93957342270960,93957342271115],["v8_inspector::protocol::Debugger::(anonymous namespace)::stepOverParams::deserializer_descriptor()::$_86::__invoke(v8_crdtp::DeserializerState*, void*)",93957342272784,93957342272794],["v8_inspector::protocol::HeapProfiler::Frontend::lastSeenObjectId(int, double)",93957342273824,93957342273995],["v8_inspector::protocol::HeapProfiler::DomainDispatcherImpl::addInspectedHeapObject(v8_crdtp::Dispatchable const&)",93957342274704,93957342275246],["v8_inspector::protocol::HeapProfiler::DomainDispatcherImpl::enable(v8_crdtp::Dispatchable const&)",93957342275568,93957342275720],["v8_inspector::protocol::HeapProfiler::DomainDispatcherImpl::getObjectByHeapObjectId(v8_crdtp::Dispatchable const&)",93957342276480,93957342277418],["v8_inspector::protocol::HeapProfiler::DomainDispatcherImpl::startSampling(v8_crdtp::Dispatchable const&)",93957342277760,93957342278304],["v8_inspector::protocol::HeapProfiler::DomainDispatcherImpl::stopSampling(v8_crdtp::Dispatchable const&)",93957342278848,93957342279172],["v8::internal::compiler::CompilationDependencies::CompilationDependencies(v8::internal::compiler::JSHeapBroker*, v8::internal::Zone*)",93957343332464,93957343332489],["v8::internal::compiler::FieldRepresentationDependency::Install(v8::internal::MaybeObjectHandle const&) const",93957343339568,93957343339636],["v8::internal::compiler::ControlFlowOptimizer::ControlFlowOptimizer(v8::internal::compiler::Graph*, v8::internal::compiler::CommonOperatorBuilder*, v8::internal::compiler::MachineOperatorBuilder*, v8::internal::TickCounter*, v8::internal::Zone*)",93957343349376,93957343349478],["v8::internal::compiler::PersistentMap<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*>, v8::internal::compiler::CsaLoadElimination::FieldInfo, v8::base::hash<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*> > >::Get(std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*> const&) const",93957343357536,93957343357846],["void std::__1::__tree<std::__1::__value_type<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*>, v8::internal::compiler::CsaLoadElimination::FieldInfo>, std::__1::__map_value_compare<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*>, std::__1::__value_type<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*>, v8::internal::compiler::CsaLoadElimination::FieldInfo>, std::__1::less<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*> >, true>, v8::internal::ZoneAllocator<std::__1::__value_type<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*>, v8::internal::compiler::CsaLoadElimination::FieldInfo> > >::__assign_multi<std::__1::__tree_const_iterator<std::__1::__value_type<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*>, v8::internal::compiler::CsaLoadElimination::FieldInfo>, std::__1::__tree_node<std::__1::__value_type<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*>, v8::internal::compiler::CsaLoadElimination::FieldInfo>, void*>*, long> >(std::__1::__tree_const_iterator<std::__1::__value_type<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*>, v8::internal::compiler::CsaLoadElimination::FieldInfo>, std::__1::__tree_node<std::__1::__value_type<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*>, v8::internal::compiler::CsaLoadElimination::FieldInfo>, void*>*, long>, std::__1::__tree_const_iterator<std::__1::__value_type<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*>, v8::internal::compiler::CsaLoadElimination::FieldInfo>, std::__1::__tree_node<std::__1::__value_type<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*>, v8::internal::compiler::CsaLoadElimination::FieldInfo>, void*>*, long>)",93957343364176,93957343365258],["v8::internal::compiler::DeadCodeElimination::ReducePhi(v8::internal::compiler::Node*)",93957343369056,93957343369779],["v8::internal::compiler::DeadCodeElimination::reducer_name() const",93957343373280,93957343373293],["v8::internal::compiler::(anonymous namespace)::UpdateBlockControl(v8::internal::compiler::BasicBlock*, v8::internal::compiler::(anonymous namespace)::BlockEffectControlMap*)",93957343389008,93957343389302],["v8::internal::compiler::EffectControlLinearizer::LowerChangeInt31ToTaggedSigned(v8::internal::compiler::Node*)",93957343393376,93957343393505],["v8::internal::compiler::EffectControlLinearizer::LowerChangeUint64ToTagged(v8::internal::compiler::Node*)",93957343394240,93957343394834],["v8::internal::compiler::EffectControlLinearizer::LowerChangeTaggedSignedToInt64(v8::internal::compiler::Node*)",93957343395296,93957343395369],["v8::internal::compiler::EffectControlLinearizer::LowerChangeTaggedToInt64(v8::internal::compiler::Node*)",93957343396544,93957343397034],["v8::internal::compiler::EffectControlLinearizer::LowerTruncateTaggedToFloat64(v8::internal::compiler::Node*)",93957343398192,93957343398728],["v8::internal::compiler::EffectControlLinearizer::LowerDynamicCheckMaps(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343400752,93957343401756],["v8::internal::compiler::EffectControlLinearizer::LowerCheckReceiverOrNullOrUndefined(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343403312,93957343403614],["v8::internal::compiler::EffectControlLinearizer::LowerCheckInternalizedString(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343404368,93957343404631],["v8::internal::compiler::EffectControlLinearizer::LowerCheckedInt32Sub(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343404928,93957343405115],["v8::internal::compiler::EffectControlLinearizer::LowerCheckedInt32Mod(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343406656,93957343407580],["v8::internal::compiler::EffectControlLinearizer::LowerCheckedUint32Mod(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343408176,93957343408367],["v8::internal::compiler::EffectControlLinearizer::LowerCheckedInt32ToTaggedSigned(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343408960,93957343409115],["v8::internal::compiler::EffectControlLinearizer::LowerCheckedInt64ToTaggedSigned(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343409280,93957343409511],["v8::internal::compiler::EffectControlLinearizer::LowerCheckedUint32ToInt32(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343409904,93957343410030],["v8::internal::compiler::EffectControlLinearizer::LowerCheckedUint64Bounds(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343410272,93957343410649],["v8::internal::compiler::EffectControlLinearizer::LowerCheckedUint64ToTaggedSigned(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343410800,93957343411026],["v8::internal::compiler::EffectControlLinearizer::LowerCheckedFloat64ToInt64(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343411136,93957343411224],["v8::internal::compiler::EffectControlLinearizer::LowerCheckedTaggedToArrayIndex(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343411504,93957343412673],["v8::internal::compiler::EffectControlLinearizer::LowerCheckedTaggedToInt64(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343413392,93957343414066],["v8::internal::compiler::EffectControlLinearizer::LowerCheckedTaggedToTaggedSigned(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343414656,93957343414821],["v8::internal::compiler::EffectControlLinearizer::LowerBigIntAsUintN(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343415008,93957343415140],["v8::internal::compiler::EffectControlLinearizer::LowerTruncateBigIntToUint64(v8::internal::compiler::Node*)",93957343415920,93957343416574],["v8::internal::compiler::EffectControlLinearizer::LowerCheckedTruncateTaggedToWord32(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343417120,93957343417672],["v8::internal::compiler::EffectControlLinearizer::LowerObjectIsArrayBufferView(v8::internal::compiler::Node*)",93957343417936,93957343418470],["setnetent",139871564373408,139871564373626],["getprotoent",139871564376560,139871564376746],["getprotoent_r",139871564377200,139871564377477],["getprotobyname_r",139871564377936,139871564378769],["__fixunsdfdi",139871565137472,139871565137519],["__floatuntidf",139871565139408,139871565139624],["__umodti3",139871565141248,139871565141534],["__multf3",139871565150128,139871565152785],["__unordtf2",139871565157664,139871565158189],["__fixunstfsi",139871565158448,139871565158671],["__floatunsitf",139871565158832,139871565158966],["__fixunstfdi",139871565159360,139871565159675],["v8::internal::BuiltinContinuationFrameInfo::BuiltinContinuationFrameInfo(int, v8::internal::CallInterfaceDescriptor const&, v8::internal::RegisterConfiguration const*, bool, v8::internal::DeoptimizeKind, v8::internal::BuiltinContinuationMode, v8::internal::FrameInfoKind)",93957336596528,93957336596729],["v8::internal::StoreDescriptor::SlotRegister()",93957336596912,93957336596923],["v8::internal::JavaScriptFrame::fp_register()",93957336597008,93957336597019],["v8::internal::ConstructFrame::type() const",93957336597072,93957336597083],["v8::internal::FutexWaitListNode::~FutexWaitListNode()",93957336597488,93957336597633],["v8::internal::FutexEmulation::NotifyAsyncWaiter(v8::internal::FutexWaitListNode*)",93957336597840,93957336598531],["v8::internal::FutexWaitList::AddNode(v8::internal::FutexWaitListNode*)",93957336598800,93957336599077],["v8::internal::FutexEmulation::WaitJs64(v8::internal::Isolate*, v8::internal::FutexEmulation::WaitMode, v8::internal::Handle<v8::internal::JSArrayBuffer>, unsigned long, long, double)",93957336599296,93957336599501],["v8::internal::StringTable::Capacity() const",93957339189616,93957339189628],["v8::internal::ExternalTwoByteString::SetResource(v8::internal::Isolate*, v8::String::ExternalStringResource const*)",93957339197552,93957339197701],["v8::internal::String::ToCString(v8::internal::AllowNullsFlag, v8::internal::RobustnessFlag, int, int, int*)",93957339202096,93957339203699],["v8::internal::String::LastIndexOf(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957339208480,93957339209147],["v8::internal::String::ComputeAndSetHash()",93957339209920,93957339210707],["bool v8::internal::StringToIndex<v8::internal::StringCharacterStream, unsigned long, (v8::internal::ToIndexMode)1>(v8::internal::StringCharacterStream*, unsigned long*)",93957339211776,93957339212597],["v8::internal::SeqTwoByteString::clear_padding()",93957339213024,93957339213075],["v8::internal::ExternalString::ExternalPayloadSize() const",93957339213472,93957339213521],["v8::internal::ConsStringIterator::Initialize(v8::internal::ConsString, int)",93957339213728,93957339213764],["v8::internal::ConsStringIterator::NextLeaf(bool*)",93957339213872,93957339214179],["v8::internal::String::AddressOfCharacterAt(int, v8::internal::CombinationAssertScope<v8::internal::PerThreadAssertScopeDebugOnly<(v8::internal::PerThreadAssertType)0, false>, v8::internal::PerThreadAssertScopeDebugOnly<(v8::internal::PerThreadAssertType)1, false> > const&)",93957339214480,93957339214995],["void std::__1::vector<int, std::__1::allocator<int> >::emplace_back<unsigned int>(unsigned int&&)",93957339215456,93957339215748],["v8::internal::SwissNameDictionary::DeleteEntry(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SwissNameDictionary>, v8::internal::InternalIndex)",93957339216272,93957339216575],["v8::internal::SwissNameDictionary::EqualsForTesting(v8::internal::SwissNameDictionary)",93957339216880,93957339217464],["v8::internal::SyntheticModule::SetExport(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SyntheticModule>, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object>)",93957339218384,93957339218793],["v8::internal::SyntheticModule::PrepareInstantiate(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SyntheticModule>, v8::Local<v8::Context>)",93957339219056,93957339219679],["v8_crdtp::ProtocolTypeTraits<std::__1::vector<v8_inspector::String16, std::__1::allocator<v8_inspector::String16> >, void>::Deserialize(v8_crdtp::DeserializerState*, std::__1::vector<v8_inspector::String16, std::__1::allocator<v8_inspector::String16> >*)",93957342268912,93957342269120],["v8_inspector::protocol::Runtime::(anonymous namespace)::setCustomObjectFormatterEnabledParams::deserializer_descriptor()::$_120::__invoke(v8_crdtp::DeserializerState*, void*)",93957342271600,93957342271610],["v8_crdtp::ProtocolTypeTraits<std::__1::unique_ptr<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Debugger::LocationRange, std::__1::default_delete<v8_inspector::protocol::Debugger::LocationRange> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Debugger::LocationRange, std::__1::default_delete<v8_inspector::protocol::Debugger::LocationRange> > > >, std::__1::default_delete<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Debugger::LocationRange, std::__1::default_delete<v8_inspector::protocol::Debugger::LocationRange> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Debugger::LocationRange, std::__1::default_delete<v8_inspector::protocol::Debugger::LocationRange> > > > > >, void>::Deserialize(v8_crdtp::DeserializerState*, std::__1::unique_ptr<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Debugger::LocationRange, std::__1::default_delete<v8_inspector::protocol::Debugger::LocationRange> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Debugger::LocationRange, std::__1::default_delete<v8_inspector::protocol::Debugger::LocationRange> > > >, std::__1::default_delete<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Debugger::LocationRange, std::__1::default_delete<v8_inspector::protocol::Debugger::LocationRange> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Debugger::LocationRange, std::__1::default_delete<v8_inspector::protocol::Debugger::LocationRange> > > > > >*)",93957342272240,93957342272440],["v8_inspector::protocol::HeapProfiler::SamplingHeapProfileSample::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342273072,93957342273239],["v8_inspector::protocol::HeapProfiler::Frontend::heapStatsUpdate(std::__1::unique_ptr<std::__1::vector<int, std::__1::allocator<int> >, std::__1::default_delete<std::__1::vector<int, std::__1::allocator<int> > > >)",93957342273584,93957342273819],["v8_inspector::protocol::HeapProfiler::Frontend::reportHeapSnapshotProgress(int, int, v8_crdtp::detail::ValueMaybe<bool>)",93957342274000,93957342274215],["v8_inspector::protocol::HeapProfiler::DomainDispatcherImpl::Dispatch(v8_crdtp::span<unsigned char>)",93957342274288,93957342274692],["v8_inspector::protocol::HeapProfiler::DomainDispatcherImpl::collectGarbage(v8_crdtp::Dispatchable const&)",93957342275248,93957342275404],["v8::internal::compiler::Operator1<float, v8::internal::compiler::OpEqualTo<float>, v8::internal::compiler::OpHash<float> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957343328624,93957343328695],["v8::internal::compiler::CompilationDependencies::Commit(v8::internal::Handle<v8::internal::Code>)",93957343335072,93957343335374],["v8::internal::compiler::ProtectorDependency::IsValid() const",93957343338896,93957343338921],["v8::internal::compiler::SourcePositionTable::PrintJson(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) const",93957343340208,93957343340505],["v8::internal::compiler::ControlEquivalence::DFSPush(v8::internal::ZoneStack<v8::internal::compiler::ControlEquivalence::DFSStackEntry>&, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::ControlEquivalence::DFSDirection)",93957343347632,93957343347997],["v8::internal::compiler::ControlFlowOptimizer::TryBuildSwitch(v8::internal::compiler::Node*)",93957343350464,93957343352096],["v8::internal::compiler::CsaLoadElimination::ReduceEffectPhi(v8::internal::compiler::Node*)",93957343355648,93957343356677],["v8::internal::compiler::CsaLoadElimination::TruncateAndExtend(v8::internal::compiler::Node*, v8::internal::MachineRepresentation, v8::internal::MachineType)",93957343360192,93957343360722],["v8::internal::compiler::PersistentMap<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*>, v8::internal::compiler::CsaLoadElimination::FieldInfo, v8::base::hash<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*> > >::double_iterator::operator++()",93957343363328,93957343363853],["v8::internal::compiler::DeadCodeElimination::DeadCodeElimination(v8::internal::compiler::AdvancedReducer::Editor*, v8::internal::compiler::Graph*, v8::internal::compiler::CommonOperatorBuilder*, v8::internal::Zone*)",93957343365536,93957343365630],["v8::internal::compiler::DeadCodeElimination::ReduceLoopExit(v8::internal::compiler::Node*)",93957343368512,93957343368788],["v8::internal::compiler::DeadCodeElimination::ReduceDeoptimizeOrReturnOrTerminateOrTailCall(v8::internal::compiler::Node*)",93957343370464,93957343371276],["v8::internal::compiler::DeadCodeElimination::ReducePureNode(v8::internal::compiler::Node*)",93957343372192,93957343372481],["v8::internal::compiler::DecompressionOptimizer::MaybeMarkAndQueueForRevisit(v8::internal::compiler::Node*, v8::internal::compiler::DecompressionOptimizer::State)",93957343373392,93957343374298],["v8::internal::compiler::DecompressionOptimizer::Reduce()",93957343376096,93957343376291],["v8::internal::compiler::EffectControlLinearizer::ProcessNode(v8::internal::compiler::Node*, v8::internal::compiler::Node**)",93957343389600,93957343390310],["v8::internal::compiler::EffectControlLinearizer::LowerChangeBitToTagged(v8::internal::compiler::Node*)",93957343393328,93957343393367],["v8::internal::compiler::EffectControlLinearizer::LowerChangeInt32ToTagged(v8::internal::compiler::Node*)",93957343393520,93957343393559],["v8::internal::compiler::EffectControlLinearizer::LowerChangeUint32ToTagged(v8::internal::compiler::Node*)",93957343394192,93957343394231],["v8::internal::compiler::EffectControlLinearizer::LowerChangeFloat64ToTagged(v8::internal::compiler::Node*)",93957343394848,93957343394914],["v8::internal::compiler::EffectControlLinearizer::LowerChangeTaggedSignedToInt32(v8::internal::compiler::Node*)",93957343395136,93957343395289],["v8::internal::compiler::EffectControlLinearizer::LowerChangeTaggedToBit(v8::internal::compiler::Node*)",93957343395376,93957343395445],["v8::internal::compiler::EffectControlLinearizer::LowerChangeTaggedToUint32(v8::internal::compiler::Node*)",93957343396000,93957343396536],["v8::internal::compiler::EffectControlLinearizer::LowerChangeTaggedToTaggedSigned(v8::internal::compiler::Node*)",93957343397040,93957343397574],["v8::internal::compiler::EffectControlLinearizer::LowerTruncateTaggedPointerToBit(v8::internal::compiler::Node*)",93957343398032,93957343398182],["v8::internal::compiler::EffectControlLinearizer::LowerPoisonIndex(v8::internal::compiler::Node*)",93957343398736,93957343398790],["v8::internal::compiler::EffectControlLinearizer::LowerCheckMaps(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343399184,93957343400750],["v8::internal::compiler::EffectControlLinearizer::LowerCompareMaps(v8::internal::compiler::Node*)",93957343401760,93957343402532],["v8::internal::compiler::EffectControlLinearizer::LowerCheckReceiver(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343403072,93957343403308],["v8::internal::compiler::EffectControlLinearizer::LowerCheckSymbol(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343403616,93957343403835],["v8::internal::compiler::EffectControlLinearizer::LowerCheckBigInt(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343404080,93957343404360],["v8::internal::compiler::EffectControlLinearizer::LowerCheckIf(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343404640,93957343404735],["getnetbyaddr",139871564371040,139871564371542],["getnetent_r",139871564373856,139871564374149],["getprotobynumber_r",139871564375712,139871564376545],["setprotoent",139871564376752,139871564376970],["__divsc3",139871565135136,139871565135775],["__fixxfti",139871565137728,139871565137789],["__floattixf",139871565139136,139871565139181],["__divti3",139871565139712,139871565140075],["__udivti3",139871565140992,139871565141240],["__udivmodti4",139871565141536,139871565141975],["__divtf3",139871565146960,139871565150125],["__negtf2",139871565152800,139871565152897],["v8::internal::JsToWasmFrame::Iterate(v8::internal::RootVisitor*) const",93957336593536,93957336593652],["v8::internal::ApiGetterDescriptor::CallbackRegister()",93957336596784,93957336596795],["v8::internal::BuiltinFrame::type() const",93957336596880,93957336596891],["v8::internal::RegExpBytecodeGenerator::Implementation()",93957336596944,93957336596955],["v8::base::OS::ActivationFrameAlignment()",93957336596992,93957336597003],["v8::internal::WasmExitFrame::type() const",93957336597024,93957336597035],["v8::internal::JavaScriptBuiltinContinuationWithCatchFrame::type() const",93957336597056,93957336597067],["v8::base::LazyInstanceImpl<v8::internal::ICStats, v8::base::StaticallyAllocatedInstanceTrait<v8::internal::ICStats>, v8::base::DefaultConstructTrait<v8::internal::ICStats>, v8::base::ThreadSafeInitOnceTrait, v8::base::LeakyInstanceTrait<v8::internal::ICStats> >::InitInstance(void*)",93957336597088,93957336597098],["v8::internal::InternalIndex v8::internal::StringTable::Data::FindEntry<v8::internal::Isolate, v8::internal::SequentialStringKey<unsigned short> >(v8::internal::Isolate*, v8::internal::SequentialStringKey<unsigned short>*, unsigned int) const",93957339184016,93957339184281],["v8::internal::StringTable::IterateElements(v8::internal::RootVisitor*)",93957339192208,93957339192244],["void v8::internal::String::WriteToFlat<unsigned char>(v8::internal::String, unsigned char*, int, int, v8::internal::SharedStringAccessGuardIfNeeded const&)",93957339194720,93957339195533],["v8::internal::String::StringShortPrint(v8::internal::StringStream*)",93957339198528,93957339199043],["v8::internal::String::ToArrayIndex(unsigned long)",93957339200848,93957339201069],["v8::internal::String::SlowEquals(v8::internal::String) const",93957339203744,93957339204650],["v8::internal::String::IndexOf(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String>, int)",93957339206384,93957339207211],["int v8::internal::(anonymous namespace)::StringMatchBackwards<unsigned short, unsigned char>(v8::internal::Vector<unsigned short const>, v8::internal::Vector<unsigned char const>, int)",93957339209296,93957339209434],["v8::internal::String::HasOneBytePrefix(v8::internal::Vector<char const>)",93957339209776,93957339209905],["v8::internal::String::SlowAsArrayIndex(unsigned int*)",93957339210720,93957339210905],["v8::internal::String::SlowAsIntegerIndex(unsigned long*)",93957339211584,93957339211769],["v8::internal::String::PrintOn(_IO_FILE*)",93957339212608,93957339212772],["v8::internal::SeqOneByteString::clear_padding()",93957339212976,93957339213019],["v8::internal::ConsString::Get(int) const",93957339213088,93957339213294],["v8::internal::SlicedString::Get(int) const",93957339213376,93957339213459],["v8::internal::FlatStringReader::FlatStringReader(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>)",93957339213536,93957339213650],["v8_inspector::protocol::Debugger::(anonymous namespace)::getPossibleBreakpointsParams::deserializer_descriptor()::$_44::__invoke(v8_crdtp::DeserializerState*, void*)",93957342268144,93957342268283],["v8_crdtp::ProtocolTypeTraits<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Debugger::ScriptPosition, std::__1::default_delete<v8_inspector::protocol::Debugger::ScriptPosition> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Debugger::ScriptPosition, std::__1::default_delete<v8_inspector::protocol::Debugger::ScriptPosition> > > >, void>::Deserialize(v8_crdtp::DeserializerState*, std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Debugger::ScriptPosition, std::__1::default_delete<v8_inspector::protocol::Debugger::ScriptPosition> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Debugger::ScriptPosition, std::__1::default_delete<v8_inspector::protocol::Debugger::ScriptPosition> > > >*)",93957342269712,93957342270009],["v8_inspector::protocol::Runtime::StackTraceId::deserializer_descriptor()::$_66::__invoke(v8_crdtp::DeserializerState*, void*)",93957342271280,93957342271426],["v8_inspector::protocol::Debugger::(anonymous namespace)::setVariableValueParams::deserializer_descriptor()::$_80::__invoke(v8_crdtp::DeserializerState*, void*)",93957342271776,93957342271790],["v8_crdtp::ProtocolTypeTraits<v8_crdtp::detail::PtrMaybe<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Debugger::LocationRange, std::__1::default_delete<v8_inspector::protocol::Debugger::LocationRange> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Debugger::LocationRange, std::__1::default_delete<v8_inspector::protocol::Debugger::LocationRange> > > > >, void>::Deserialize(v8_crdtp::DeserializerState*, v8_crdtp::detail::PtrMaybe<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Debugger::LocationRange, std::__1::default_delete<v8_inspector::protocol::Debugger::LocationRange> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Debugger::LocationRange, std::__1::default_delete<v8_inspector::protocol::Debugger::LocationRange> > > > >*)",93957342271968,93957342272230],["v8_crdtp::ProtocolTypeTraits<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Debugger::LocationRange, std::__1::default_delete<v8_inspector::protocol::Debugger::LocationRange> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Debugger::LocationRange, std::__1::default_delete<v8_inspector::protocol::Debugger::LocationRange> > > >, void>::Deserialize(v8_crdtp::DeserializerState*, std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Debugger::LocationRange, std::__1::default_delete<v8_inspector::protocol::Debugger::LocationRange> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Debugger::LocationRange, std::__1::default_delete<v8_inspector::protocol::Debugger::LocationRange> > > >*)",93957342272448,93957342272770],["v8_inspector::protocol::HeapProfiler::SamplingHeapProfileNode::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342272800,93957342273057],["v8_inspector::protocol::HeapProfiler::SamplingHeapProfile::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342273248,93957342273441],["v8::internal::compiler::Operator::Equals(v8::internal::compiler::Operator const*) const",93957343326128,93957343326145],["v8::internal::compiler::Operator1<v8::internal::compiler::TypedStateValueInfo, v8::internal::compiler::OpEqualTo<v8::internal::compiler::TypedStateValueInfo>, v8::internal::compiler::OpHash<v8::internal::compiler::TypedStateValueInfo> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957343329792,93957343329862],["v8::internal::compiler::CompilationDependencies::DependOnArrayBufferDetachingProtector()",93957343334032,93957343334129],["v8::internal::compiler::InitialMapDependency::Install(v8::internal::MaybeObjectHandle const&) const",93957343336544,93957343336613],["v8::internal::compiler::FieldConstnessDependency::IsValid() const",93957343338528,93957343338621],["v8::internal::compiler::InitialMapInstanceSizePredictionDependency::PrepareInstall() const",93957343339216,93957343339338],["v8::internal::compiler::SourcePositionTable::AddDecorator()",93957343339904,93957343339991],["v8::internal::compiler::Node::ReplaceInput(int, v8::internal::compiler::Node*)",93957343341392,93957343341539],["v8::internal::compiler::ControlEquivalence::VisitBackedge(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::ControlEquivalence::DFSDirection)",93957343346912,93957343347170],["v8::internal::compiler::ControlEquivalence::DetermineParticipationEnqueue(v8::internal::ZoneQueue<v8::internal::compiler::Node*>&, v8::internal::compiler::Node*)",93957343348288,93957343348640],["v8::internal::compiler::ControlFlowOptimizer::Enqueue(v8::internal::compiler::Node*)",93957343349936,93957343350114],["v8::internal::compiler::CsaLoadElimination::Reduce(v8::internal::compiler::Node*)",93957343352352,93957343353338],["v8::internal::compiler::CsaLoadElimination::PropagateInputState(v8::internal::compiler::Node*)",93957343355072,93957343355370],["v8::internal::compiler::CsaLoadEliminationHelpers::OffsetMayAlias(v8::internal::compiler::Node*, v8::internal::MachineRepresentation, v8::internal::compiler::Node*, v8::internal::MachineRepresentation)",93957343357008,93957343357211],["v8::internal::compiler::PersistentMap<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*>, v8::internal::compiler::CsaLoadElimination::FieldInfo, v8::base::hash<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*> > >::iterator::operator++()",93957343359248,93957343359683],["v8::internal::compiler::CsaLoadElimination::~CsaLoadElimination()",93957343362400,93957343362429],["v8::internal::compiler::PersistentMap<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*>, v8::internal::compiler::CsaLoadElimination::FieldInfo, v8::base::hash<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*> > >::ZipIterable::begin()",93957343362896,93957343363328],["v8::internal::compiler::PersistentMap<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*>, v8::internal::compiler::CsaLoadElimination::FieldInfo, v8::base::hash<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*> > >::iterator::begin(v8::internal::compiler::PersistentMap<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*>, v8::internal::compiler::CsaLoadElimination::FieldInfo, v8::base::hash<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*> > >::FocusedTree const*, v8::internal::compiler::CsaLoadElimination::FieldInfo)",93957343363856,93957343364166],["std::__1::pair<std::__1::__tree_iterator<std::__1::__value_type<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*>, v8::internal::compiler::CsaLoadElimination::FieldInfo>, std::__1::__tree_node<std::__1::__value_type<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*>, v8::internal::compiler::CsaLoadElimination::FieldInfo>, void*>*, long>, bool> std::__1::__tree<std::__1::__value_type<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*>, v8::internal::compiler::CsaLoadElimination::FieldInfo>, std::__1::__map_value_compare<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*>, std::__1::__value_type<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*>, v8::internal::compiler::CsaLoadElimination::FieldInfo>, std::__1::less<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*> >, true>, v8::internal::ZoneAllocator<std::__1::__value_type<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*>, v8::internal::compiler::CsaLoadElimination::FieldInfo> > >::__emplace_unique_key_args<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*>, std::__1::piecewise_construct_t const&, std::__1::tuple<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*> const&>, std::__1::tuple<> >(std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*> const&, std::__1::piecewise_construct_t const&, std::__1::tuple<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*> const&>&&, std::__1::tuple<>&&)",93957343365264,93957343365533],["v8::internal::compiler::DeadCodeElimination::Reduce(v8::internal::compiler::Node*)",93957343365632,93957343365969],["v8::internal::compiler::DeadCodeElimination::ReduceLoopOrMerge(v8::internal::compiler::Node*)",93957343366368,93957343368501],["v8::internal::compiler::DeadCodeElimination::ReduceUnreachableOrIfException(v8::internal::compiler::Node*)",93957343368800,93957343369047],["v8::internal::compiler::DeadCodeElimination::ReduceEffectPhi(v8::internal::compiler::Node*)",93957343369792,93957343370457],["v8::internal::compiler::DeadCodeElimination::ReduceBranchOrSwitch(v8::internal::compiler::Node*)",93957343371280,93957343371682],["v8::internal::compiler::DeadCodeElimination::RemoveLoopExit(v8::internal::compiler::Node*)",93957343371920,93957343372191],["v8::internal::compiler::DeadCodeElimination::ReduceEffectNode(v8::internal::compiler::Node*)",93957343372496,93957343373273],["v8::internal::compiler::DecompressionOptimizer::DecompressionOptimizer(v8::internal::Zone*, v8::internal::compiler::Graph*, v8::internal::compiler::CommonOperatorBuilder*, v8::internal::compiler::MachineOperatorBuilder*)",93957343373296,93957343373388],["v8::internal::compiler::DecompressionOptimizer::MarkNodeInputs(v8::internal::compiler::Node*)",93957343374304,93957343375689],["v8::internal::compiler::DecompressionOptimizer::ChangeNodes()",93957343375904,93957343376092],["v8::internal::compiler::EffectControlLinearizer::Run()",93957343376304,93957343388998],["v8::internal::compiler::(anonymous namespace)::BlockEffectControlMap::For(v8::internal::compiler::BasicBlock*, v8::internal::compiler::BasicBlock*)",93957343389312,93957343389590],["v8::internal::compiler::EffectControlLinearizer::TryWireInStateEffect(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957343390320,93957343392940],["gethostent",139871564370064,139871564370274],["getnetbyname",139871564372688,139871564373174],["endnetent",139871564373632,139871564373854],["getnetbyname_r",139871564374160,139871564375252],["__paritydi2",139871565132336,139871565132390],["__bswapdi2",139871565137280,139871565137287],["__fixsfti",139871565137632,139871565137679],["__fixunsdfti",139871565137952,139871565138095],["__floattidf",139871565138832,139871565139136],["__floatuntisf",139871565139184,139871565139400],["__floatuntixf",139871565139632,139871565139703],["__modti3",139871565140080,139871565140470],["v8::internal::WasmFrame::position() const",93957336592016,93957336592309],["v8::internal::InternalFrame::Iterate(v8::internal::RootVisitor*) const",93957336596048,93957336596374],["v8_inspector::(anonymous namespace)::HeapStatsStream::WriteAsciiChunk(char*, int)",93957336596752,93957336596763],["v8::internal::StubFrame::type() const",93957336596816,93957336596827],["v8::internal::BaselineFrame::type() const",93957336596864,93957336596875],["v8::internal::FieldType::None()",93957336596896,93957336596907],["v8::internal::JavaScriptFrame::context_register()",93957336596928,93957336596939],["v8::internal::WasmCompileLazyFrame::type() const",93957336596960,93957336596971],["v8::internal::StackFrameInfo::GetMethodName(v8::internal::Handle<v8::internal::StackFrameInfo>)",93957339164432,93957339167561],["v8::internal::Handle<v8::internal::String> v8::internal::StringTable::LookupKey<v8::internal::SequentialStringKey<unsigned char>, v8::internal::LocalIsolate>(v8::internal::LocalIsolate*, v8::internal::SequentialStringKey<unsigned char>*)",93957339186608,93957339187246],["v8::internal::StringTable::TryStringToIndexOrLookupExisting(v8::internal::Isolate*, unsigned long)",93957339190992,93957339191237],["v8::internal::InternalizedStringKey::AsHandle(v8::internal::Isolate*)",93957339192336,93957339192510],["void v8::internal::String::WriteToFlat<unsigned short>(v8::internal::String, unsigned short*, int, int, v8::internal::SharedStringAccessGuardIfNeeded const&)",93957339193840,93957339194661],["v8::internal::String::MakeThin(v8::internal::Isolate*, v8::internal::String)",93957339196352,93957339197070],["v8::internal::ExternalOneByteString::SetResource(v8::internal::Isolate*, v8::String::ExternalOneByteStringResource const*)",93957339198192,93957339198341],["v8::internal::String::PrintUC16(v8::internal::StringStream*, int, int)",93957339199136,93957339199833],["v8::internal::StringCharacterStream::GetNext()",93957339200640,93957339200835],["v8::internal::String::ToNumber(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>)",93957339201072,93957339202088],["v8::internal::String::ToCString(v8::internal::AllowNullsFlag, v8::internal::RobustnessFlag, int*)",93957339203712,93957339203733],["v8::internal::String::SlowEquals(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String>)",93957339204656,93957339205696],["v8::internal::String::ToValidIndex(v8::internal::Object)",93957339206304,93957339206371],["v8::internal::String::GetSubstitution(v8::internal::Isolate*, v8::internal::String::Match*, v8::internal::Handle<v8::internal::String>, int)",93957339207216,93957339208478],["int v8::internal::(anonymous namespace)::StringMatchBackwards<unsigned char, unsigned char>(v8::internal::Vector<unsigned char const>, v8::internal::Vector<unsigned char const>, int)",93957339209152,93957339209289],["int v8::internal::(anonymous namespace)::StringMatchBackwards<unsigned char, unsigned short>(v8::internal::Vector<unsigned char const>, v8::internal::Vector<unsigned short const>, int)",93957339209440,93957339209626],["v8_inspector::protocol::Runtime::(anonymous namespace)::compileScriptParams::deserializer_descriptor()::$_87::__invoke(v8_crdtp::DeserializerState*, void*)",93957342267680,93957342267694],["v8_inspector::protocol::Debugger::(anonymous namespace)::searchInContentParams::deserializer_descriptor()::$_54::__invoke(v8_crdtp::DeserializerState*, void*)",93957342268528,93957342268567],["v8_inspector::protocol::Debugger::(anonymous namespace)::setBlackboxedRangesParams::deserializer_descriptor()::$_60::__invoke(v8_crdtp::DeserializerState*, void*)",93957342269488,93957342269502],["void std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::CallArgument, std::__1::default_delete<v8_inspector::protocol::Runtime::CallArgument> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::CallArgument, std::__1::default_delete<v8_inspector::protocol::Runtime::CallArgument> > > >::__emplace_back_slow_path<>()",93957342270160,93957342270903],["v8_inspector::protocol::Debugger::(anonymous namespace)::setBreakpointByUrlParams::deserializer_descriptor()::$_68::__invoke(v8_crdtp::DeserializerState*, void*)",93957342271120,93957342271266],["v8_inspector::protocol::HeapProfiler::(anonymous namespace)::getObjectByHeapObjectIdParams::deserializer_descriptor()::$_14::__invoke(v8_crdtp::DeserializerState*, void*)",93957342271440,93957342271586],["v8_inspector::protocol::Debugger::(anonymous namespace)::setReturnValueParams::deserializer_descriptor()::$_75::__invoke(v8_crdtp::DeserializerState*, void*)",93957342271616,93957342271762],["v8_inspector::protocol::Debugger::(anonymous namespace)::setVariableValueParams::deserializer_descriptor()::$_81::__invoke(v8_crdtp::DeserializerState*, void*)",93957342271792,93957342271940],["v8::internal::compiler::CommonOperatorBuilder::ExternalConstant(v8::internal::ExternalReference const&)",93957343309696,93957343309839],["v8::internal::compiler::Operator1<v8::internal::compiler::ParameterInfo, v8::internal::compiler::OpEqualTo<v8::internal::compiler::ParameterInfo>, v8::internal::compiler::OpHash<v8::internal::compiler::ParameterInfo> >::Equals(v8::internal::compiler::Operator const*) const",93957343327296,93957343327325],["v8::internal::compiler::Operator1<v8::internal::compiler::RelocatablePtrConstantInfo, v8::internal::compiler::OpEqualTo<v8::internal::compiler::RelocatablePtrConstantInfo>, v8::internal::compiler::OpHash<v8::internal::compiler::RelocatablePtrConstantInfo> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957343329184,93957343329315],["v8::internal::compiler::Operator1<v8::internal::compiler::FrameStateInfo, v8::internal::compiler::OpEqualTo<v8::internal::compiler::FrameStateInfo>, v8::internal::compiler::OpHash<v8::internal::compiler::FrameStateInfo> >::Equals(v8::internal::compiler::Operator const*) const",93957343330496,93957343330528],["v8::internal::compiler::CompilationDependencies::DependOnPretenureMode(v8::internal::compiler::AllocationSiteRef const&)",93957343332976,93957343333143],["v8::internal::compiler::CompilationDependencies::DependOnPromiseHookProtector()",93957343334480,93957343334577],["v8::internal::compiler::CompilationDependencies::TransitionDependencyOffTheRecord(v8::internal::compiler::MapRef const&) const",93957343336064,93957343336159],["v8::internal::compiler::StableMapDependency::IsValid() const",93957343337152,93957343337181],["v8::internal::compiler::PretenureModeDependency::IsValid() const",93957343338400,93957343338446],["v8::internal::compiler::GlobalPropertyDependency::IsValid() const",93957343338704,93957343338802],["v8::internal::compiler::ElementsKindDependency::Install(v8::internal::MaybeObjectHandle const&) const",93957343339008,93957343339076],["v8::internal::compiler::TransitionDependency::Install(v8::internal::MaybeObjectHandle const&) const",93957343339376,93957343339441],["v8::internal::compiler::FieldTypeDependency::Install(v8::internal::MaybeObjectHandle const&) const",93957343339776,93957343339844],["v8::internal::compiler::SourcePositionTable::GetSourcePosition(v8::internal::compiler::Node*) const",93957343340048,93957343340090],["v8::internal::compiler::ConstantFoldingReducer::ConstantFoldingReducer(v8::internal::compiler::AdvancedReducer::Editor*, v8::internal::compiler::JSGraph*, v8::internal::compiler::JSHeapBroker*)",93957343340624,93957343340652],["v8::internal::compiler::ControlEquivalence::Run(v8::internal::compiler::Node*)",93957343341568,93957343341743],["v8::internal::compiler::ControlEquivalence::VisitMid(v8::internal::compiler::Node*, v8::internal::compiler::ControlEquivalence::DFSDirection)",93957343346240,93957343346899],["v8::internal::compiler::ControlEquivalence::VisitPost(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::ControlEquivalence::DFSDirection)",93957343347184,93957343347621],["v8::internal::compiler::ControlEquivalence::DFSPop(v8::internal::ZoneStack<v8::internal::compiler::ControlEquivalence::DFSStackEntry>&, v8::internal::compiler::Node*)",93957343348000,93957343348277],["std::__1::deque<v8::internal::compiler::ControlEquivalence::DFSStackEntry, v8::internal::RecyclingZoneAllocator<v8::internal::compiler::ControlEquivalence::DFSStackEntry> >::__add_back_capacity()",93957343348640,93957343349375],["v8::internal::compiler::ControlFlowOptimizer::Optimize()",93957343349488,93957343349926],["v8::internal::compiler::ControlFlowOptimizer::VisitNode(v8::internal::compiler::Node*)",93957343350128,93957343350456],["std::__1::pair<std::__1::__tree_iterator<int, std::__1::__tree_node<int, void*>*, long>, bool> std::__1::__tree<int, std::__1::less<int>, v8::internal::ZoneAllocator<int> >::__emplace_unique_key_args<int, int const&>(int const&, int const&)",93957343352096,93957343352338],["v8::internal::compiler::CsaLoadElimination::AbstractState::Print() const",93957343353344,93957343353627],["v8::internal::compiler::CsaLoadElimination::ReduceStoreToObject(v8::internal::compiler::Node*, v8::internal::compiler::ObjectAccess const&)",93957343354480,93957343355059],["v8::internal::compiler::CsaLoadElimination::ReduceCall(v8::internal::compiler::Node*)",93957343355376,93957343355639],["v8::internal::compiler::CsaLoadElimination::ReduceOtherNode(v8::internal::compiler::Node*)",93957343356688,93957343357006],["v8::internal::compiler::CsaLoadElimination::AbstractState::Merge(v8::internal::compiler::CsaLoadElimination::AbstractState const*, v8::internal::Zone*)",93957343357216,93957343357531],["v8::internal::compiler::PersistentMap<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*>, v8::internal::compiler::CsaLoadElimination::FieldInfo, v8::base::hash<std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*> > >::Set(std::__1::pair<v8::internal::compiler::Node*, v8::internal::compiler::Node*>, v8::internal::compiler::CsaLoadElimination::FieldInfo)",93957343357856,93957343359241],["v8::internal::compiler::CsaLoadElimination::AbstractState::KillField(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::MachineRepresentation, v8::internal::Zone*) const",93957343359696,93957343360183],["v8::internal::compiler::CsaLoadElimination::ComputeLoopState(v8::internal::compiler::Node*, v8::internal::compiler::CsaLoadElimination::AbstractState const*) const",93957343360736,93957343362396],["v8::internal::compiler::CsaLoadElimination::reducer_name() const",93957343362432,93957343362445],["gethostbyname",139871564366048,139871564366648],["endhostent",139871564370512,139871564370734],["getnetbyaddr_r",139871564371552,139871564372684],["getnetent",139871564373184,139871564373394],["__ffsdi2",139871565131936,139871565131958],["__powixf2",139871565132624,139871565132699],["__divxc3",139871565136464,139871565137260],["__clrsbti2",139871565137344,139871565137413],["__fixunsxfdi",139871565137520,139871565137623],["__fixdfti",139871565137680,139871565137728],["__fixunssfti",139871565137792,139871565137943],["__fixunsxfti",139871565138096,139871565138521],["v8::internal::BaselineFrame::GetPCForBytecodeOffset(int) const",93957336590672,93957336590758],["v8::internal::WasmFrame::Summarize(std::__1::vector<v8::internal::FrameSummary, std::__1::allocator<v8::internal::FrameSummary> >*) const",93957336592528,93957336592984],["v8::internal::JavaScriptFrame::Print(v8::internal::StringStream*, v8::internal::StackFrame::PrintMode, int) const",93957336593744,93957336595483],["v8::internal::UnoptimizedFrameInfo::GetStackSizeForAdditionalArguments(int)",93957336596464,93957336596477],["v8::internal::NativeFrame::type() const",93957336596736,93957336596747],["v8::internal::LoadDescriptor::ReceiverRegister()",93957336596768,93957336596779],["v8::internal::BuiltinExitFrame::type() const",93957336596800,93957336596811],["v8::internal::OptimizedFrame::type() const",93957336596832,93957336596843],["v8::internal::StackFrameInfo::IsPromiseAny() const",93957339154928,93957339154987],["v8::internal::StringComparator::State::Init(v8::internal::String)",93957339181264,93957339181434],["v8::internal::InternalIndex v8::internal::StringTable::Data::FindEntryOrInsertionEntry<v8::internal::Isolate, v8::internal::SeqSubStringKey<v8::internal::SeqOneByteString> >(v8::internal::Isolate*, v8::internal::SeqSubStringKey<v8::internal::SeqOneByteString>*, unsigned int) const",93957339185264,93957339185555],["v8::internal::Handle<v8::internal::String> v8::internal::StringTable::LookupKey<v8::internal::StringTableInsertionKey, v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::StringTableInsertionKey*)",93957339188624,93957339189191],["v8::internal::StringTable::LookupString(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>)",93957339189680,93957339190411],["unsigned long v8::internal::StringTable::Data::TryStringToIndexOrLookupExisting<unsigned short>(v8::internal::Isolate*, v8::internal::String, v8::internal::String, unsigned long)",93957339191696,93957339192151],["v8::internal::StringTable::NotifyElementsRemoved(int)",93957339192272,93957339192287],["v8::internal::String::GetFlatContent(v8::internal::CombinationAssertScope<v8::internal::PerThreadAssertScopeDebugOnly<(v8::internal::PerThreadAssertType)0, false>, v8::internal::PerThreadAssertScopeDebugOnly<(v8::internal::PerThreadAssertType)1, false> > const&)",93957339192880,93957339193307],["void v8::internal::String::WriteToFlat<unsigned short>(v8::internal::String, unsigned short*, int, int)",93957339193792,93957339193837],["void v8::internal::String::WriteToFlat<unsigned char>(v8::internal::String, unsigned char*, int, int)",93957339194672,93957339194717],["v8::internal::String::SlowFlatten(v8::internal::Isolate*, v8::internal::Handle<v8::internal::ConsString>, v8::internal::AllocationType)",93957339195536,93957339196346],["v8::internal::String::MakeExternal(v8::String::ExternalStringResource*)",93957339197072,93957339197538],["v8::internal::String::MakeExternal(v8::String::ExternalOneByteStringResource*)",93957339197712,93957339198178],["v8::internal::String::SupportsExternalization()",93957339198352,93957339198524],["v8::internal::String::LooksValid()",93957339199056,93957339199122],["v8::internal::String::PrintUC16(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, int, int)",93957339199840,93957339200332],["v8_inspector::protocol::Debugger::ScriptPosition::deserializer_descriptor()::$_4::__invoke(v8_crdtp::DeserializerState*, void*)",93957342266816,93957342266830],["v8_inspector::protocol::Debugger::(anonymous namespace)::evaluateOnCallFrameParams::deserializer_descriptor()::$_40::__invoke(v8_crdtp::DeserializerState*, void*)",93957342267952,93957342267991],["v8_inspector::protocol::Debugger::(anonymous namespace)::getStackTraceParams::deserializer_descriptor()::$_49::__invoke(v8_crdtp::DeserializerState*, void*)",93957342268336,93957342268478],["v8_inspector::protocol::Runtime::(anonymous namespace)::setMaxCallStackSizeToCaptureParams::deserializer_descriptor()::$_121::__invoke(v8_crdtp::DeserializerState*, void*)",93957342268624,93957342268634],["void std::__1::vector<v8_inspector::String16, std::__1::allocator<v8_inspector::String16> >::__emplace_back_slow_path<>()",93957342269120,93957342269475],["v8_crdtp::ProtocolTypeTraits<std::__1::unique_ptr<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Debugger::ScriptPosition, std::__1::default_delete<v8_inspector::protocol::Debugger::ScriptPosition> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Debugger::ScriptPosition, std::__1::default_delete<v8_inspector::protocol::Debugger::ScriptPosition> > > >, std::__1::default_delete<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Debugger::ScriptPosition, std::__1::default_delete<v8_inspector::protocol::Debugger::ScriptPosition> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Debugger::ScriptPosition, std::__1::default_delete<v8_inspector::protocol::Debugger::ScriptPosition> > > > > >, void>::Deserialize(v8_crdtp::DeserializerState*, std::__1::unique_ptr<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Debugger::ScriptPosition, std::__1::default_delete<v8_inspector::protocol::Debugger::ScriptPosition> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Debugger::ScriptPosition, std::__1::default_delete<v8_inspector::protocol::Debugger::ScriptPosition> > > >, std::__1::default_delete<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Debugger::ScriptPosition, std::__1::default_delete<v8_inspector::protocol::Debugger::ScriptPosition> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Debugger::ScriptPosition, std::__1::default_delete<v8_inspector::protocol::Debugger::ScriptPosition> > > > > >*)",93957342269504,93957342269704],["std::__1::unique_ptr<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::CallArgument, std::__1::default_delete<v8_inspector::protocol::Runtime::CallArgument> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::CallArgument, std::__1::default_delete<v8_inspector::protocol::Runtime::CallArgument> > > >, std::__1::default_delete<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::CallArgument, std::__1::default_delete<v8_inspector::protocol::Runtime::CallArgument> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::CallArgument, std::__1::default_delete<v8_inspector::protocol::Runtime::CallArgument> > > > > >::operator=(std::__1::unique_ptr<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::CallArgument, std::__1::default_delete<v8_inspector::protocol::Runtime::CallArgument> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::CallArgument, std::__1::default_delete<v8_inspector::protocol::Runtime::CallArgument> > > >, std::__1::default_delete<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Runtime::CallArgument, std::__1::default_delete<v8_inspector::protocol::Runtime::CallArgument> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Runtime::CallArgument, std::__1::default_delete<v8_inspector::protocol::Runtime::CallArgument> > > > > >&&)",93957342270016,93957342270146],["v8_inspector::protocol::Debugger::(anonymous namespace)::setBreakpointByUrlParams::deserializer_descriptor()::$_65::__invoke(v8_crdtp::DeserializerState*, void*)",93957342270912,93957342270957],["v8::internal::compiler::JSOperatorBuilder::ToNumber()",93957343305744,93957343305757],["v8::internal::compiler::CommonOperatorBuilder::TypedStateValues(v8::internal::ZoneVector<v8::internal::MachineType> const*, v8::internal::compiler::SparseInputMask)",93957343312528,93957343312700],["v8::internal::compiler::Operator1<v8::internal::compiler::RegionObservability, v8::internal::compiler::OpEqualTo<v8::internal::compiler::RegionObservability>, v8::internal::compiler::OpHash<v8::internal::compiler::RegionObservability> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957343326512,93957343326630],["v8::internal::compiler::Operator1<v8::internal::StringConstantBase const*, v8::internal::compiler::OpEqualTo<v8::internal::StringConstantBase const*>, v8::internal::compiler::OpHash<v8::internal::StringConstantBase const*> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957343327904,93957343327974],["v8::internal::compiler::Operator1<v8::internal::ExternalReference, v8::internal::compiler::OpEqualTo<v8::internal::ExternalReference>, v8::internal::compiler::OpHash<v8::internal::ExternalReference> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957343328864,93957343328934],["v8::internal::compiler::Operator1<v8::internal::ZoneHandleSet<v8::internal::Map>, v8::internal::compiler::OpEqualTo<v8::internal::ZoneHandleSet<v8::internal::Map> >, v8::internal::compiler::OpHash<v8::internal::ZoneHandleSet<v8::internal::Map> > >::HashCode() const",93957343329552,93957343329570],["v8::internal::compiler::Operator1<v8::internal::compiler::ObjectStateInfo, v8::internal::compiler::OpEqualTo<v8::internal::compiler::ObjectStateInfo>, v8::internal::compiler::OpHash<v8::internal::compiler::ObjectStateInfo> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957343330144,93957343330264],["void v8::internal::compiler::CompilationDependencies::DependOnStablePrototypeChains<v8::internal::ZoneVector<v8::internal::Handle<v8::internal::Map> > >(v8::internal::ZoneVector<v8::internal::Handle<v8::internal::Map> > const&, v8::internal::WhereToStart, v8::base::Optional<v8::internal::compiler::JSObjectRef>)",93957343330736,93957343331345],["v8::internal::compiler::CompilationDependencies::DependOnPrototypeProperty(v8::internal::compiler::JSFunctionRef const&)",93957343332576,93957343332766],["v8::internal::compiler::CompilationDependencies::DependOnGlobalProperty(v8::internal::compiler::PropertyCellRef const&)",93957343333584,93957343333787],["v8::internal::compiler::CompilationDependencies::DependOnArraySpeciesProtector()",93957343334256,93957343334353],["v8::internal::compiler::CompilationDependencies::DependOnPromiseThenProtector()",93957343334704,93957343334801],["v8::internal::compiler::SlackTrackingPrediction::SlackTrackingPrediction(v8::internal::compiler::MapRef, int)",93957343335600,93957343335653],["v8::internal::compiler::CompilationDependencies::FieldTypeDependencyOffTheRecord(v8::internal::compiler::MapRef const&, v8::internal::InternalIndex) const",93957343336304,93957343336446],["v8::internal::compiler::PrototypePropertyDependency::PrepareInstall() const",93957343336912,93957343336975],["v8::internal::compiler::ConstantInDictionaryPrototypeChainDependency::IsValid() const",93957343337264,93957343337281],["v8::internal::compiler::ConstantInDictionaryPrototypeChainDependency::GetHolderIfValid() const::ValidationResult v8::internal::compiler::ConstantInDictionaryPrototypeChainDependency::GetHolderIfValid() const::{lambda(auto:1)#1}::operator()<v8::internal::NameDictionary>(v8::internal::NameDictionary) const",93957343338032,93957343338400],["v8::internal::compiler::PretenureModeDependency::Install(v8::internal::MaybeObjectHandle const&) const",93957343338448,93957343338516],["v8::internal::compiler::FieldConstnessDependency::Install(v8::internal::MaybeObjectHandle const&) const",93957343338624,93957343338692],["v8::internal::compiler::ProtectorDependency::Install(v8::internal::MaybeObjectHandle const&) const",93957343338816,93957343338884],["v8::internal::compiler::ElementsKindDependency::IsValid() const",93957343338928,93957343339002],["v8::internal::compiler::InitialMapInstanceSizePredictionDependency::IsValid() const",93957343339088,93957343339207],["v8::internal::compiler::TransitionDependency::IsValid() const",93957343339344,93957343339373],["v8::internal::compiler::FieldRepresentationDependency::IsValid() const",93957343339456,93957343339555],["v8::internal::compiler::FieldTypeDependency::IsValid() const",93957343339648,93957343339776],["v8::internal::compiler::SourcePositionTable::SourcePositionTable(v8::internal::compiler::Graph*)",93957343339856,93957343339891],["v8::internal::compiler::NodeOriginTable::RemoveDecorator()",93957343340000,93957343340036],["v8::internal::compiler::SourcePositionTable::SetSourcePosition(v8::internal::compiler::Node*, v8::internal::SourcePosition)",93957343340096,93957343340199],["v8::internal::compiler::SourcePositionTable::Decorator::Decorate(v8::internal::compiler::Node*)",93957343340512,93957343340619],["v8::internal::compiler::ConstantFoldingReducer::Reduce(v8::internal::compiler::Node*)",93957343340656,93957343341382],["v8::internal::compiler::ConstantFoldingReducer::reducer_name() const",93957343341552,93957343341565],["v8::internal::compiler::ControlEquivalence::DetermineParticipation(v8::internal::compiler::Node*)",93957343341744,93957343344599],["inet_network",139871564363648,139871564364111],["gethostbyname2_r",139871564367280,139871564368685],["sethostent",139871564370288,139871564370506],["gethostent_r",139871564370736,139871564371029],["__subvsi3",139871565131088,139871565131130],["__ctzdi2",139871565132048,139871565132056],["__powisf2",139871565132464,139871565132539],["__muldc3",139871565133392,139871565134093],["__divdc3",139871565135776,139871565136455],["__bswapsi2",139871565137264,139871565137269],["__clrsbdi2",139871565137296,139871565137330],["__fixunssfdi",139871565137424,139871565137467],["v8::internal::UnoptimizedFrame::ReadInterpreterRegister(int) const",93957336589456,93957336589471],["v8::internal::WasmFrame::Print(v8::internal::StringStream*, v8::internal::StackFrame::PrintMode, int) const",93957336591200,93957336591851],["v8::internal::WasmFrame::is_inspectable() const",93957336592384,93957336592473],["v8::internal::WasmDebugBreakFrame::Iterate(v8::internal::RootVisitor*) const",93957336593120,93957336593378],["v8::internal::WasmCompileLazyFrame::Iterate(v8::internal::RootVisitor*) const",93957336593664,93957336593739],["v8::internal::(anonymous namespace)::PrintFunctionSource(v8::internal::StringStream*, v8::internal::SharedFunctionInfo, v8::internal::Code)",93957336595488,93957336596045],["v8::internal::UnoptimizedFrameInfo::UnoptimizedFrameInfo(int, int, bool, bool, v8::internal::FrameInfoKind)",93957336596384,93957336596456],["v8::internal::ConstructStubFrameInfo::ConstructStubFrameInfo(int, bool, v8::internal::FrameInfoKind)",93957336596480,93957336596518],["v8::internal::SourceTextModule::AddAsyncParentModule(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SourceTextModule>, v8::internal::Handle<v8::internal::SourceTextModule>)",93957339144688,93957339144927],["v8::internal::StackFrameInfo::GetEnclosingLineNumber(v8::internal::Handle<v8::internal::StackFrameInfo>)",93957339156016,93957339156227],["v8::internal::StackFrameInfo::ComputeLocation(v8::internal::Handle<v8::internal::StackFrameInfo>, v8::internal::MessageLocation*)",93957339168384,93957339169326],["v8::internal::InternalIndex v8::internal::StringTable::Data::FindEntry<v8::internal::Isolate, v8::internal::SequentialStringKey<unsigned char> >(v8::internal::Isolate*, v8::internal::SequentialStringKey<unsigned char>*, unsigned int) const",93957339182848,93957339183113],["v8::internal::Handle<v8::internal::String> v8::internal::StringTable::LookupKey<v8::internal::SeqSubStringKey<v8::internal::SeqOneByteString>, v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::SeqSubStringKey<v8::internal::SeqOneByteString>*)",93957339184576,93957339184968],["v8::internal::InternalIndex v8::internal::StringTable::Data::FindEntry<v8::internal::Isolate, v8::internal::SeqSubStringKey<v8::internal::SeqTwoByteString> >(v8::internal::Isolate*, v8::internal::SeqSubStringKey<v8::internal::SeqTwoByteString>*, unsigned int) const",93957339186016,93957339186293],["v8::internal::Handle<v8::internal::String> v8::internal::StringTable::LookupKey<v8::internal::SequentialStringKey<unsigned short>, v8::internal::LocalIsolate>(v8::internal::LocalIsolate*, v8::internal::SequentialStringKey<unsigned short>*)",93957339187600,93957339188258],["v8::internal::StringTable::StringTable(v8::internal::Isolate*)",93957339189456,93957339189551],["v8::internal::StringTable::NumberOfElements() const",93957339189632,93957339189675],["v8::internal::Handle<v8::internal::String> v8::internal::StringTable::LookupKey<v8::internal::InternalizedStringKey, v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::InternalizedStringKey*)",93957339190416,93957339190991],["unsigned long v8::internal::StringTable::Data::TryStringToIndexOrLookupExisting<unsigned char>(v8::internal::Isolate*, v8::internal::String, v8::internal::String, unsigned long)",93957339191248,93957339191688],["v8::internal::StringTable::GetCurrentMemoryUsage() const",93957339192160,93957339192202],["v8::internal::StringTable::DropOldData()",93957339192256,93957339192271],["std::__1::unique_ptr<v8::internal::StringTable::Data, std::__1::default_delete<v8::internal::StringTable::Data> >::reset(v8::internal::StringTable::Data*)",93957339192288,93957339192336],["v8::internal::Handle<v8::internal::FixedArray> v8::internal::String::CalculateLineEnds<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, bool)",93957339192512,93957339192877],["void v8::internal::CalculateLineEndsImpl<unsigned char>(std::__1::vector<int, std::__1::allocator<int> >*, v8::internal::Vector<unsigned char const>, bool)",93957339193312,93957339193526],["v8_inspector::protocol::Debugger::BreakLocation::~BreakLocation()",93957342266400,93957342266468],["v8_inspector::protocol::Debugger::(anonymous namespace)::setBreakpointParams::deserializer_descriptor()::$_63::__invoke(v8_crdtp::DeserializerState*, void*)",93957342267312,93957342267449],["v8_inspector::protocol::Debugger::(anonymous namespace)::evaluateOnCallFrameParams::deserializer_descriptor()::$_38::__invoke(v8_crdtp::DeserializerState*, void*)",93957342267744,93957342267783],["v8_inspector::protocol::Runtime::(anonymous namespace)::evaluateParams::deserializer_descriptor()::$_91::__invoke(v8_crdtp::DeserializerState*, void*)",93957342268048,93957342268087],["v8_inspector::protocol::Debugger::(anonymous namespace)::getPossibleBreakpointsParams::deserializer_descriptor()::$_45::__invoke(v8_crdtp::DeserializerState*, void*)",93957342268288,93957342268327],["v8_inspector::protocol::HeapProfiler::(anonymous namespace)::takeHeapSnapshotParams::deserializer_descriptor()::$_20::__invoke(v8_crdtp::DeserializerState*, void*)",93957342268480,93957342268518],["v8_inspector::protocol::Debugger::(anonymous namespace)::searchInContentParams::deserializer_descriptor()::$_55::__invoke(v8_crdtp::DeserializerState*, void*)",93957342268576,93957342268615],["v8_inspector::protocol::Debugger::(anonymous namespace)::setBlackboxPatternsParams::deserializer_descriptor()::$_59::__invoke(v8_crdtp::DeserializerState*, void*)",93957342268640,93957342268903],["v8::internal::compiler::CommonOperatorBuilder::TrapIf(v8::internal::compiler::TrapId)",93957343306992,93957343307168],["v8::internal::compiler::CommonOperatorBuilder::Phi(v8::internal::MachineRepresentation, int)",93957343310928,93957343311285],["v8::internal::compiler::CommonOperatorBuilder::TailCall(v8::internal::compiler::CallDescriptor const*)",93957343313744,93957343313911],["v8::internal::compiler::Operator1<double, v8::internal::compiler::OpEqualTo<double>, v8::internal::compiler::OpHash<double> >::PrintToImpl(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957343326288,93957343326360],["v8::internal::compiler::Operator1<v8::internal::compiler::DeoptimizeParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::DeoptimizeParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::DeoptimizeParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957343327056,93957343327142],["v8::internal::compiler::Operator1<double, v8::internal::compiler::OpEqualTo<double>, v8::internal::compiler::OpHash<double> >::HashCode() const",93957343327536,93957343327572],["v8::internal::compiler::Operator1<v8::internal::compiler::IfValueParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::IfValueParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::IfValueParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957343328240,93957343328312],["v8::internal::compiler::Operator1<v8::internal::ExternalReference, v8::internal::compiler::OpEqualTo<v8::internal::ExternalReference>, v8::internal::compiler::OpHash<v8::internal::ExternalReference> >::Equals(v8::internal::compiler::Operator const*) const",93957343328784,93957343328816],["v8::internal::compiler::Operator1<v8::internal::compiler::RelocatablePtrConstantInfo, v8::internal::compiler::OpEqualTo<v8::internal::compiler::RelocatablePtrConstantInfo>, v8::internal::compiler::OpHash<v8::internal::compiler::RelocatablePtrConstantInfo> >::Equals(v8::internal::compiler::Operator const*) const",93957343329040,93957343329087],["v8::internal::compiler::Operator1<v8::internal::compiler::SelectParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::SelectParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::SelectParameters> >::HashCode() const",93957343329408,93957343329461],["v8::internal::compiler::Operator1<v8::internal::compiler::TypedStateValueInfo, v8::internal::compiler::OpEqualTo<v8::internal::compiler::TypedStateValueInfo>, v8::internal::compiler::OpHash<v8::internal::compiler::TypedStateValueInfo> >::Equals(v8::internal::compiler::Operator const*) const",93957343329664,93957343329706],["v8::internal::compiler::Operator1<v8::internal::compiler::ObjectStateInfo, v8::internal::compiler::OpEqualTo<v8::internal::compiler::ObjectStateInfo>, v8::internal::compiler::OpHash<v8::internal::compiler::ObjectStateInfo> >::Equals(v8::internal::compiler::Operator const*) const",93957343330016,93957343330053],["v8::internal::compiler::Operator1<v8::internal::compiler::TypedObjectStateInfo, v8::internal::compiler::OpEqualTo<v8::internal::compiler::TypedObjectStateInfo>, v8::internal::compiler::OpHash<v8::internal::compiler::TypedObjectStateInfo> >::HashCode() const",93957343330320,93957343330401],["v8::internal::compiler::Operator1<v8::internal::compiler::FrameStateInfo, v8::internal::compiler::OpEqualTo<v8::internal::compiler::FrameStateInfo>, v8::internal::compiler::OpHash<v8::internal::compiler::FrameStateInfo> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957343330576,93957343330646],["v8::internal::compiler::(anonymous namespace)::DependOnStablePrototypeChain(v8::internal::compiler::CompilationDependencies*, v8::internal::compiler::MapRef, v8::base::Optional<v8::internal::compiler::JSObjectRef>)",93957343331536,93957343331898],["v8::internal::compiler::CompilationDependencies::RecordDependency(v8::internal::compiler::CompilationDependency const*)",93957343332496,93957343332575],["v8::internal::compiler::CompilationDependencies::DependOnConstantInDictionaryPrototypeChain(v8::internal::compiler::MapRef const&, v8::internal::compiler::NameRef const&, v8::internal::compiler::ObjectRef const&, v8::internal::PropertyKind)",93957343332768,93957343332973],["v8::internal::compiler::CompilationDependencies::DependOnFieldConstness(v8::internal::compiler::MapRef const&, v8::internal::InternalIndex)",93957343333152,93957343333579],["v8::internal::compiler::CompilationDependencies::DependOnProtector(v8::internal::compiler::PropertyCellRef const&)",93957343333792,93957343334026],["v8::internal::compiler::CompilationDependencies::DependOnArrayIteratorProtector()",93957343334144,93957343334241],["v8::internal::compiler::CompilationDependencies::DependOnNoElementsProtector()",93957343334368,93957343334465],["v8::internal::compiler::CompilationDependencies::DependOnPromiseSpeciesProtector()",93957343334592,93957343334689],["v8::internal::compiler::CompilationDependencies::DependOnElementsKind(v8::internal::compiler::AllocationSiteRef const&)",93957343334816,93957343335064],["v8::internal::compiler::CompilationDependencies::DependOnElementsKinds(v8::internal::compiler::AllocationSiteRef const&)",93957343335376,93957343335589],["v8::internal::compiler::CompilationDependencies::DependOnInitialMapInstanceSizePrediction(v8::internal::compiler::JSFunctionRef const&)",93957343335664,93957343336059],["v8::internal::compiler::CompilationDependencies::FieldRepresentationDependencyOffTheRecord(v8::internal::compiler::MapRef const&, v8::internal::InternalIndex) const",93957343336160,93957343336294],["v8::internal::compiler::InitialMapDependency::IsValid() const",93957343336448,93957343336537],["v8::internal::compiler::PrototypePropertyDependency::IsValid() const",93957343336624,93957343336906],["v8::internal::compiler::PrototypePropertyDependency::Install(v8::internal::MaybeObjectHandle const&) const",93957343336976,93957343337151],["v8::internal::compiler::StableMapDependency::Install(v8::internal::MaybeObjectHandle const&) const",93957343337184,93957343337252],["v8::internal::compiler::ConstantInDictionaryPrototypeChainDependency::Install(v8::internal::MaybeObjectHandle const&) const",93957343337296,93957343337645],["inet_lnaof",139871564363392,139871564363432],["gethostbyaddr",139871564364144,139871564364662],["gethostbyname2",139871564366656,139871564367272],["gethostbyname_r",139871564368688,139871564370056],["__clear_cache",139871565130672,139871565130673],["__mulvti3",139871565131296,139871565131730],["__clzdi2",139871565132000,139871565132009],["__popcountdi2",139871565132096,139871565132186],["__parityti2",139871565132400,139871565132460],["__powidf2",139871565132544,139871565132621],["__mulsc3",139871565132704,139871565133388],["__mulxc3",139871565134096,139871565135134],["v8::internal::OptimizedFrame::Summarize(std::__1::vector<v8::internal::FrameSummary, std::__1::allocator<v8::internal::FrameSummary> >*) const",93957336586496,93957336588216],["v8::internal::InterpretedFrame::PatchBytecodeOffset(int)",93957336590016,93957336590054],["v8::internal::BaselineFrame::PatchContext(v8::internal::Context)",93957336591168,93957336591182],["v8::internal::WasmFrame::wasm_code() const",93957336591936,93957336591964],["v8::internal::WasmFrame::byte_offset() const",93957336592320,93957336592375],["v8::internal::WasmFrame::context() const",93957336592480,93957336592513],["v8::internal::WasmFrame::LookupExceptionHandlerInTable()",93957336592992,93957336593107],["v8::internal::WasmDebugBreakFrame::Print(v8::internal::StringStream*, v8::internal::StackFrame::PrintMode, int) const",93957336593392,93957336593527],["v8::internal::SourceTextModule::PrepareInstantiate(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SourceTextModule>, v8::Local<v8::Context>, v8::MaybeLocal<v8::Module> (*)(v8::Local<v8::Context>, v8::Local<v8::String>, v8::Local<v8::FixedArray>, v8::Local<v8::Module>), v8::MaybeLocal<v8::Module> (*)(v8::Local<v8::Context>, v8::Local<v8::String>, v8::Local<v8::Module>))",93957339129184,93957339131046],["std::__1::__hash_table<v8::internal::Handle<v8::internal::String>, v8::internal::StringHandleHash, v8::internal::StringHandleEqual, v8::internal::ZoneAllocator<v8::internal::Handle<v8::internal::String> > >::__rehash(unsigned long)",93957339149200,93957339149995],["v8::internal::StackFrameInfo::GetLineNumber(v8::internal::Handle<v8::internal::StackFrameInfo>)",93957339155392,93957339155527],["v8::internal::StackFrameInfo::GetScriptNameOrSourceURL() const",93957339156832,93957339157013],["v8::internal::StackFrameInfo::GetTypeName(v8::internal::Handle<v8::internal::StackFrameInfo>)",93957339167776,93957339168098],["v8::internal::SerializeStackFrameInfo(v8::internal::Isolate*, v8::internal::Handle<v8::internal::StackFrameInfo>)",93957339178752,93957339178819],["v8::internal::ConsString v8::internal::String::VisitFlat<v8::internal::StringComparator::State>(v8::internal::StringComparator::State*, v8::internal::String, int, v8::internal::SharedStringAccessGuardIfNeeded const&)",93957339182096,93957339182449],["v8::internal::InternalIndex v8::internal::StringTable::Data::FindEntryOrInsertionEntry<v8::internal::Isolate, v8::internal::SequentialStringKey<unsigned char> >(v8::internal::Isolate*, v8::internal::SequentialStringKey<unsigned char>*, unsigned int) const",93957339183328,93957339183607],["v8::internal::InternalIndex v8::internal::StringTable::Data::FindEntryOrInsertionEntry<v8::internal::Isolate, v8::internal::SequentialStringKey<unsigned short> >(v8::internal::Isolate*, v8::internal::SequentialStringKey<unsigned short>*, unsigned int) const",93957339184288,93957339184567],["v8::internal::InternalIndex v8::internal::StringTable::Data::FindEntry<v8::internal::Isolate, v8::internal::SeqSubStringKey<v8::internal::SeqOneByteString> >(v8::internal::Isolate*, v8::internal::SeqSubStringKey<v8::internal::SeqOneByteString>*, unsigned int) const",93957339184976,93957339185253],["v8::internal::Handle<v8::internal::String> v8::internal::StringTable::LookupKey<v8::internal::SeqSubStringKey<v8::internal::SeqTwoByteString>, v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::SeqSubStringKey<v8::internal::SeqTwoByteString>*)",93957339185568,93957339186014],["v8::internal::InternalIndex v8::internal::StringTable::Data::FindEntryOrInsertionEntry<v8::internal::Isolate, v8::internal::SeqSubStringKey<v8::internal::SeqTwoByteString> >(v8::internal::Isolate*, v8::internal::SeqSubStringKey<v8::internal::SeqTwoByteString>*, unsigned int) const",93957339186304,93957339186595],["v8::internal::InternalIndex v8::internal::StringTable::Data::FindEntryOrInsertionEntry<v8::internal::LocalIsolate, v8::internal::SequentialStringKey<unsigned char> >(v8::internal::LocalIsolate*, v8::internal::SequentialStringKey<unsigned char>*, unsigned int) const",93957339187248,93957339187593],["v8::internal::InternalIndex v8::internal::StringTable::Data::FindEntryOrInsertionEntry<v8::internal::LocalIsolate, v8::internal::SequentialStringKey<unsigned short> >(v8::internal::LocalIsolate*, v8::internal::SequentialStringKey<unsigned short>*, unsigned int) const",93957339188272,93957339188617],["v8::internal::StringTable::Data::Resize(v8::internal::IsolateRoot, std::__1::unique_ptr<v8::internal::StringTable::Data, std::__1::default_delete<v8::internal::StringTable::Data> >, int)",93957339189200,93957339189445],["v8::internal::StringTable::~StringTable()",93957339189552,93957339189604],["v8_inspector::protocol::Debugger::CallFrame::~CallFrame()",93957342265520,93957342265820],["v8_inspector::protocol::Debugger::Location::deserializer_descriptor()::$_0::__invoke(v8_crdtp::DeserializerState*, void*)",93957342266720,93957342266759],["v8_crdtp::DeserializableProtocolObject<v8_inspector::protocol::Debugger::ScriptPosition>::Deserialize(v8_crdtp::DeserializerState*, v8_inspector::protocol::Debugger::ScriptPosition*)",93957342266944,93957342267189],["v8_inspector::protocol::HeapProfiler::(anonymous namespace)::startSamplingParams::deserializer_descriptor()::$_16::__invoke(v8_crdtp::DeserializerState*, void*)",93957342267616,93957342267658],["v8_inspector::protocol::Debugger::(anonymous namespace)::evaluateOnCallFrameParams::deserializer_descriptor()::$_37::__invoke(v8_crdtp::DeserializerState*, void*)",93957342267696,93957342267735],["v8_inspector::protocol::Debugger::(anonymous namespace)::evaluateOnCallFrameParams::deserializer_descriptor()::$_39::__invoke(v8_crdtp::DeserializerState*, void*)",93957342267792,93957342267938],["v8_inspector::protocol::Debugger::(anonymous namespace)::evaluateOnCallFrameParams::deserializer_descriptor()::$_41::__invoke(v8_crdtp::DeserializerState*, void*)",93957342268000,93957342268039],["v8_inspector::protocol::Debugger::(anonymous namespace)::evaluateOnCallFrameParams::deserializer_descriptor()::$_43::__invoke(v8_crdtp::DeserializerState*, void*)",93957342268096,93957342268142],["v8::internal::compiler::JSOperatorBuilder::CreateKeyValueArray()",93957343305872,93957343305886],["v8::internal::compiler::CommonOperatorBuilder::LoopExitValue(v8::internal::MachineRepresentation)",93957343308368,93957343308527],["v8::internal::compiler::CommonOperatorBuilder::CompressedHeapConstant(v8::internal::Handle<v8::internal::HeapObject> const&)",93957343310288,93957343310431],["v8::internal::compiler::CommonOperatorBuilder::EffectPhi(int)",93957343311744,93957343311919],["v8::internal::compiler::CommonOperatorBuilder::TypedObjectState(unsigned int, v8::internal::ZoneVector<v8::internal::MachineType> const*)",93957343313136,93957343313308],["v8::internal::compiler::CommonOperatorBuilder::CreateJSToWasmFrameStateFunctionInfo(v8::internal::compiler::FrameStateType, int, int, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Signature<v8::internal::wasm::ValueType> const*)",93957343314832,93957343314934],["v8::internal::compiler::Operator1<v8::internal::compiler::SelectParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::SelectParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::SelectParameters> >::Equals(v8::internal::compiler::Operator const*) const",93957343326176,93957343326213],["v8::internal::compiler::Operator1<v8::internal::AllocationType, v8::internal::compiler::OpEqualTo<v8::internal::AllocationType>, v8::internal::compiler::OpHash<v8::internal::AllocationType> >::Equals(v8::internal::compiler::Operator const*) const",93957343326448,93957343326477],["v8::internal::compiler::Operator1<v8::internal::compiler::DeoptimizeParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::DeoptimizeParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::DeoptimizeParameters> >::Equals(v8::internal::compiler::Operator const*) const",93957343326720,93957343326876],["v8::internal::compiler::Operator1<v8::internal::ConvertReceiverMode, v8::internal::compiler::OpEqualTo<v8::internal::ConvertReceiverMode>, v8::internal::compiler::OpHash<v8::internal::ConvertReceiverMode> >::HashCode() const",93957343327184,93957343327201],["v8::internal::compiler::Operator1<v8::internal::compiler::ParameterInfo, v8::internal::compiler::OpEqualTo<v8::internal::compiler::ParameterInfo>, v8::internal::compiler::OpHash<v8::internal::compiler::ParameterInfo> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957343327360,93957343327496],["v8::internal::compiler::Operator1<float, v8::internal::compiler::OpEqualTo<float>, v8::internal::compiler::OpHash<float> >::HashCode() const",93957343327664,93957343327699],["v8::internal::compiler::Operator1<v8::internal::compiler::IfValueParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::IfValueParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::IfValueParameters> >::Equals(v8::internal::compiler::Operator const*) const",93957343328080,93957343328125],["v8::internal::compiler::Operator1<int, v8::internal::compiler::OpEqualTo<int>, v8::internal::compiler::OpHash<int> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957343328464,93957343328533],["v8::internal::compiler::Operator1<double, v8::internal::compiler::OpEqualTo<double>, v8::internal::compiler::OpHash<double> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957343328704,93957343328775],["v8::internal::compiler::Operator1<v8::internal::ExternalReference, v8::internal::compiler::OpEqualTo<v8::internal::ExternalReference>, v8::internal::compiler::OpHash<v8::internal::ExternalReference> >::HashCode() const",93957343328816,93957343328852],["v8::internal::compiler::Operator1<v8::internal::Handle<v8::internal::HeapObject>, v8::internal::compiler::OpEqualTo<v8::internal::Handle<v8::internal::HeapObject> >, v8::internal::compiler::OpHash<v8::internal::Handle<v8::internal::HeapObject> > >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957343328944,93957343329026],["v8::internal::compiler::Operator1<v8::internal::compiler::RelocatablePtrConstantInfo, v8::internal::compiler::OpEqualTo<v8::internal::compiler::RelocatablePtrConstantInfo>, v8::internal::compiler::OpHash<v8::internal::compiler::RelocatablePtrConstantInfo> >::HashCode() const",93957343329088,93957343329183],["v8::internal::compiler::Operator1<unsigned int, v8::internal::compiler::OpEqualTo<unsigned int>, v8::internal::compiler::OpHash<unsigned int> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957343329328,93957343329397],["v8::internal::compiler::Operator1<v8::internal::compiler::SelectParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::SelectParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::SelectParameters> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957343329472,93957343329542],["v8::internal::compiler::Operator1<v8::internal::compiler::Type, v8::internal::compiler::OpEqualTo<v8::internal::compiler::Type>, v8::internal::compiler::OpHash<v8::internal::compiler::Type> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957343329584,93957343329654],["v8::internal::compiler::Operator1<v8::internal::compiler::TypedStateValueInfo, v8::internal::compiler::OpEqualTo<v8::internal::compiler::TypedStateValueInfo>, v8::internal::compiler::OpHash<v8::internal::compiler::TypedStateValueInfo> >::HashCode() const",93957343329712,93957343329792],["v8::internal::compiler::Operator1<v8::internal::CreateArgumentsType, v8::internal::compiler::OpEqualTo<v8::internal::CreateArgumentsType>, v8::internal::compiler::OpHash<v8::internal::CreateArgumentsType> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957343329872,93957343330009],["v8::internal::compiler::Operator1<v8::internal::compiler::ObjectStateInfo, v8::internal::compiler::OpEqualTo<v8::internal::compiler::ObjectStateInfo>, v8::internal::compiler::OpHash<v8::internal::compiler::ObjectStateInfo> >::HashCode() const",93957343330064,93957343330144],["v8::internal::compiler::Operator1<v8::internal::compiler::TypedObjectStateInfo, v8::internal::compiler::OpEqualTo<v8::internal::compiler::TypedObjectStateInfo>, v8::internal::compiler::OpHash<v8::internal::compiler::TypedObjectStateInfo> >::Equals(v8::internal::compiler::Operator const*) const",93957343330272,93957343330314],["v8::internal::compiler::Operator1<v8::internal::compiler::TypedObjectStateInfo, v8::internal::compiler::OpEqualTo<v8::internal::compiler::TypedObjectStateInfo>, v8::internal::compiler::OpHash<v8::internal::compiler::TypedObjectStateInfo> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957343330416,93957343330486],["v8::internal::compiler::Operator1<v8::internal::compiler::FrameStateInfo, v8::internal::compiler::OpEqualTo<v8::internal::compiler::FrameStateInfo>, v8::internal::compiler::OpHash<v8::internal::compiler::FrameStateInfo> >::HashCode() const",93957343330528,93957343330564],["v8::internal::compiler::CommonOperatorBuilder::Call(v8::internal::compiler::CallDescriptor const*)::CallOperator::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957343330656,93957343330726],["v8::internal::compiler::CompilationDependencies::DependOnStableMap(v8::internal::compiler::MapRef const&)",93957343331360,93957343331521],["void v8::internal::compiler::CompilationDependencies::DependOnStablePrototypeChains<v8::internal::ZoneHandleSet<v8::internal::Map> >(v8::internal::ZoneHandleSet<v8::internal::Map> const&, v8::internal::WhereToStart, v8::base::Optional<v8::internal::compiler::JSObjectRef>)",93957343331904,93957343332459],["__stack_chk_fail",139871564363296,139871564363312],["inet_netof",139871564363520,139871564363558],["__h_errno_location",139871564364112,139871564364129],["gethostbyaddr_r",139871564364672,139871564366037],["__cpu_indicator_init",139871565129280,139871565130072],["__addvdi3",139871565130832,139871565130883],["__mulvdi3",139871565131216,139871565131247],["__negvsi2",139871565131808,139871565131850],["__ffsti2",139871565131968,139871565131998],["__clzti2",139871565132016,139871565132042],["__ctzti2",139871565132064,139871565132090],["__popcountti2",139871565132192,139871565132331],["v8::internal::FrameSummary::receiver() const",93957336585312,93957336585458],["v8::internal::OptimizedFrame::StackSlotOffsetRelativeToFp(int)",93957336589248,93957336589264],["v8::internal::InterpretedFrame::GetBytecodeOffset() const",93957336589968,93957336589992],["v8::internal::BaselineFrame::GetBytecodeOffset() const",93957336590096,93957336590186],["v8::internal::Code::GetBaselinePCForBytecodeOffset(int, v8::internal::BytecodeArray)",93957336590768,93957336591160],["v8::internal::BuiltinFrame::ComputeParametersCount() const",93957336591184,93957336591199],["v8::internal::WasmFrame::function_index() const",93957336591856,93957336591927],["v8::internal::WasmFrame::native_module() const",93957336591968,93957336592014],["v8::internal::SharedFunctionInfo::SetPosition(int, int)",93957339122784,93957339123182],["v8::internal::SourceTextModule::EvaluateMaybeAsync(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SourceTextModule>)",93957339139328,93957339139747],["std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object> >, std::__1::__unordered_map_hasher<v8::internal::Handle<v8::internal::String>, std::__1::__hash_value_type<v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object> >, v8::internal::StringHandleHash, v8::internal::StringHandleEqual, true>, std::__1::__unordered_map_equal<v8::internal::Handle<v8::internal::String>, std::__1::__hash_value_type<v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object> >, v8::internal::StringHandleEqual, v8::internal::StringHandleHash, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object> > > >::rehash(unsigned long)",93957339146672,93957339147043],["std::__1::__hash_table<v8::internal::Handle<v8::internal::Module>, v8::internal::ModuleHandleHash, v8::internal::ModuleHandleEqual, v8::internal::ZoneAllocator<v8::internal::Handle<v8::internal::Module> > >::rehash(unsigned long)",93957339152608,93957339152979],["v8::internal::StackFrameInfo::IsEval() const",93957339155152,93957339155300],["v8::internal::StackFrameInfo::GetSourcePosition(v8::internal::Handle<v8::internal::StackFrameInfo>)",93957339155760,93957339155827],["v8::internal::StackFrameInfo::GetScriptId() const",93957339156496,93957339156642],["v8::internal::(anonymous namespace)::FormatEvalOrigin(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Script>)",93957339157136,93957339164000],["v8::internal::SharedFunctionInfo::inferred_name()",93957339167568,93957339167765],["v8::internal::StackFrameInfo::ComputeSourcePosition(v8::internal::Handle<v8::internal::StackFrameInfo>, int)",93957339168112,93957339168376],["v8::internal::SerializeStackFrameInfo(v8::internal::Isolate*, v8::internal::Handle<v8::internal::StackFrameInfo>, v8::internal::IncrementalStringBuilder*)",93957339169328,93957339178740],["v8::internal::(anonymous namespace)::AppendFileLocation(v8::internal::Isolate*, v8::internal::Handle<v8::internal::StackFrameInfo>, v8::internal::IncrementalStringBuilder*)",93957339178832,93957339181250],["v8::internal::StringComparator::Equals(v8::internal::String, v8::internal::String)",93957339181440,93957339182092],["v8::internal::Handle<v8::internal::String> v8::internal::StringTable::LookupKey<v8::internal::SequentialStringKey<unsigned char>, v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::SequentialStringKey<unsigned char>*)",93957339182464,93957339182833],["v8::internal::StringTable::EnsureCapacity(v8::internal::IsolateRoot, int)",93957339183120,93957339183320],["v8::internal::Handle<v8::internal::String> v8::internal::StringTable::LookupKey<v8::internal::SequentialStringKey<unsigned short>, v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::SequentialStringKey<unsigned short>*)",93957339183616,93957339184003],["v8_inspector::protocol::Debugger::DomainDispatcherImpl::stepInto(v8_crdtp::Dispatchable const&)",93957342263312,93957342264134],["v8_inspector::protocol::Debugger::SearchMatch::~SearchMatch()",93957342266176,93957342266219],["v8_inspector::protocol::Debugger::DebugSymbols::~DebugSymbols()",93957342266560,93957342266628],["v8_inspector::protocol::Runtime::ObjectPreview::deserializer_descriptor()::$_16::__invoke(v8_crdtp::DeserializerState*, void*)",93957342266784,93957342266798],["v8_inspector::protocol::Debugger::LocationRange::deserializer_descriptor()::$_5::__invoke(v8_crdtp::DeserializerState*, void*)",93957342266832,93957342266941],["v8_inspector::protocol::Debugger::LocationRange::deserializer_descriptor()::$_7::__invoke(v8_crdtp::DeserializerState*, void*)",93957342267200,93957342267309],["v8_inspector::protocol::Debugger::(anonymous namespace)::setBreakpointParams::deserializer_descriptor()::$_62::__invoke(v8_crdtp::DeserializerState*, void*)",93957342267456,93957342267602],["v8_inspector::protocol::HeapProfiler::(anonymous namespace)::getHeapObjectIdParams::deserializer_descriptor()::$_13::__invoke(v8_crdtp::DeserializerState*, void*)",93957342267664,93957342267674],["v8::internal::compiler::JSOperatorBuilder::ToString()",93957343305808,93957343305822],["v8::internal::compiler::CommonOperatorBuilder::Return(int)",93957343306144,93957343306333],["v8::internal::compiler::CommonOperatorBuilder::IfDefault(v8::internal::compiler::BranchHint)",93957343307728,93957343307868],["v8::internal::compiler::CommonOperatorBuilder::Int64Constant(long)",93957343309088,93957343309228],["v8::internal::compiler::CommonOperatorBuilder::PointerConstant(long)",93957343310000,93957343310140],["v8::internal::compiler::CommonOperatorBuilder::ObjectId(unsigned int)",93957343310608,93957343310748],["v8::internal::compiler::CommonOperatorBuilder::TypeGuard(v8::internal::compiler::Type)",93957343311488,93957343311613],["v8::internal::compiler::CommonOperatorBuilder::BeginRegion(v8::internal::compiler::RegionObservability)",93957343312112,93957343312161],["v8::internal::compiler::CommonOperatorBuilder::ArgumentsLengthState()",93957343312848,93957343312967],["v8::internal::compiler::CommonOperatorBuilder::FrameState(v8::internal::BytecodeOffset, v8::internal::compiler::OutputFrameStateCombine, v8::internal::compiler::FrameStateFunctionInfo const*)",93957343313376,93957343313541],["v8::internal::compiler::CommonOperatorBuilder::ResizeMergeOrPhi(v8::internal::compiler::Operator const*, int)",93957343314096,93957343314736],["v8::internal::compiler::CombineSafetyChecks(v8::internal::compiler::IsSafetyCheck, v8::internal::compiler::IsSafetyCheck)",93957343315088,93957343315128],["v8::internal::compiler::Operator::HashCode() const",93957343326160,93957343326170],["v8::internal::compiler::Operator1<v8::internal::compiler::BranchOperatorInfo, v8::internal::compiler::OpEqualTo<v8::internal::compiler::BranchOperatorInfo>, v8::internal::compiler::OpHash<v8::internal::compiler::BranchOperatorInfo> >::HashCode() const",93957343326224,93957343326277],["v8::internal::compiler::Operator1<v8::internal::compiler::BranchOperatorInfo, v8::internal::compiler::OpEqualTo<v8::internal::compiler::BranchOperatorInfo>, v8::internal::compiler::OpHash<v8::internal::compiler::BranchOperatorInfo> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957343326368,93957343326438],["v8::internal::compiler::Operator1<v8::internal::AllocationType, v8::internal::compiler::OpEqualTo<v8::internal::AllocationType>, v8::internal::compiler::OpHash<v8::internal::AllocationType> >::HashCode() const",93957343326480,93957343326498],["v8::internal::compiler::Operator1<v8::internal::MachineRepresentation, v8::internal::compiler::OpEqualTo<v8::internal::MachineRepresentation>, v8::internal::compiler::OpHash<v8::internal::MachineRepresentation> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957343326640,93957343326710],["v8::internal::compiler::Operator1<v8::internal::compiler::DeoptimizeParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::DeoptimizeParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::DeoptimizeParameters> >::HashCode() const",93957343326880,93957343327048],["v8::internal::compiler::Operator1<float, v8::internal::compiler::OpEqualTo<float>, v8::internal::compiler::OpHash<float> >::Equals(v8::internal::compiler::Operator const*) const",93957343327152,93957343327181],["v8::internal::compiler::Operator1<v8::internal::compiler::TrapId, v8::internal::compiler::OpEqualTo<v8::internal::compiler::TrapId>, v8::internal::compiler::OpHash<v8::internal::compiler::TrapId> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957343327216,93957343327285],["v8::internal::compiler::Operator1<v8::internal::compiler::ParameterInfo, v8::internal::compiler::OpEqualTo<v8::internal::compiler::ParameterInfo>, v8::internal::compiler::OpHash<v8::internal::compiler::ParameterInfo> >::HashCode() const",93957343327328,93957343327346],["v8::internal::compiler::Operator1<double, v8::internal::compiler::OpEqualTo<double>, v8::internal::compiler::OpHash<double> >::Equals(v8::internal::compiler::Operator const*) const",93957343327504,93957343327535],["v8::internal::compiler::Operator1<unsigned long, v8::internal::compiler::OpEqualTo<unsigned long>, v8::internal::compiler::OpHash<unsigned long> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957343327584,93957343327654],["v8::internal::compiler::Operator1<v8::internal::compiler::SparseInputMask, v8::internal::compiler::OpEqualTo<v8::internal::compiler::SparseInputMask>, v8::internal::compiler::OpHash<v8::internal::compiler::SparseInputMask> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957343327712,93957343327891],["v8::internal::compiler::Operator1<char const*, v8::internal::compiler::OpEqualTo<char const*>, v8::internal::compiler::OpHash<char const*> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957343327984,93957343328079],["v8::internal::compiler::Operator1<v8::internal::compiler::IfValueParameters, v8::internal::compiler::OpEqualTo<v8::internal::compiler::IfValueParameters>, v8::internal::compiler::OpHash<v8::internal::compiler::IfValueParameters> >::HashCode() const",93957343328128,93957343328226],["v8::internal::compiler::Operator1<v8::internal::compiler::BranchHint, v8::internal::compiler::OpEqualTo<v8::internal::compiler::BranchHint>, v8::internal::compiler::OpHash<v8::internal::compiler::BranchHint> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957343328320,93957343328452],["v8::internal::compiler::Operator1<long, v8::internal::compiler::OpEqualTo<long>, v8::internal::compiler::OpHash<long> >::PrintParameter(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::compiler::Operator::PrintVerbosity) const",93957343328544,93957343328614],["__fdelt_chk",139871564363152,139871564363175],["htonl",139871564363360,139871564363365],["inet_makeaddr",139871564363440,139871564363514],["inet_ntoa",139871564363568,139871564363647],["__ashlti3",139871565130416,139871565130487],["__absvsi2",139871565130736,139871565130771],["__addvti3",139871565130944,139871565131014],["__subvti3",139871565131136,139871565131209],["__mulvsi3",139871565131248,139871565131287],["__negvdi2",139871565131744,139871565131795],["__negvti2",139871565131856,139871565131923],["v8::internal::JavaScriptBuiltinContinuationWithCatchFrame::SetException(v8::internal::Object)",93957336584208,93957336584290],["v8::internal::FrameSummary::script() const",93957336585744,93957336585950],["v8::internal::OptimizedFrame::LookupExceptionHandlerInTable(int*, v8::internal::HandlerTable::CatchPrediction*)",93957336588528,93957336588735],["v8::internal::UnoptimizedFrame::GetBytecodeArray() const",93957336589328,93957336589348],["v8::internal::UnoptimizedFrame::Summarize(std::__1::vector<v8::internal::FrameSummary, std::__1::allocator<v8::internal::FrameSummary> >*) const",93957336589472,93957336589960],["v8::internal::InterpretedFrame::GetBytecodeOffset(unsigned long)",93957336590000,93957336590014],["v8::internal::InterpretedFrame::PatchBytecodeArray(v8::internal::BytecodeArray)",93957336590064,93957336590094],["v8::internal::Code::GetBytecodeOffsetForBaselinePC(unsigned long, v8::internal::BytecodeArray)",93957336590192,93957336590669],["v8::internal::SharedFunctionInfo::HasBreakInfo() const",93957339114960,93957339115041],["v8::internal::SourceTextModule::CreateIndirectExport(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SourceTextModule>, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::SourceTextModuleInfoEntry>)",93957339124928,93957339125183],["v8::internal::SourceTextModule::FetchStarExports(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SourceTextModule>, v8::internal::Zone*, v8::internal::UnorderedModuleSet*)",93957339135312,93957339137336],["v8::internal::SourceTextModule::ExecuteAsyncModule(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SourceTextModule>)",93957339142400,93957339143272],["std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::Handle<v8::internal::Module>, v8::internal::UnorderedStringSet*>, std::__1::__unordered_map_hasher<v8::internal::Handle<v8::internal::Module>, std::__1::__hash_value_type<v8::internal::Handle<v8::internal::Module>, v8::internal::UnorderedStringSet*>, v8::internal::ModuleHandleHash, v8::internal::ModuleHandleEqual, true>, std::__1::__unordered_map_equal<v8::internal::Handle<v8::internal::Module>, std::__1::__hash_value_type<v8::internal::Handle<v8::internal::Module>, v8::internal::UnorderedStringSet*>, v8::internal::ModuleHandleEqual, v8::internal::ModuleHandleHash, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<v8::internal::Handle<v8::internal::Module>, v8::internal::UnorderedStringSet*> > >::rehash(unsigned long)",93957339145536,93957339145907],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::Handle<v8::internal::Module>, v8::internal::UnorderedStringSet*>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::Handle<v8::internal::Module>, v8::internal::UnorderedStringSet*>, std::__1::__unordered_map_hasher<v8::internal::Handle<v8::internal::Module>, std::__1::__hash_value_type<v8::internal::Handle<v8::internal::Module>, v8::internal::UnorderedStringSet*>, v8::internal::ModuleHandleHash, v8::internal::ModuleHandleEqual, true>, std::__1::__unordered_map_equal<v8::internal::Handle<v8::internal::Module>, std::__1::__hash_value_type<v8::internal::Handle<v8::internal::Module>, v8::internal::UnorderedStringSet*>, v8::internal::ModuleHandleEqual, v8::internal::ModuleHandleHash, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<v8::internal::Handle<v8::internal::Module>, v8::internal::UnorderedStringSet*> > >::__emplace_unique_key_args<v8::internal::Handle<v8::internal::Module>, std::__1::pair<v8::internal::Handle<v8::internal::Module> const, v8::internal::UnorderedStringSet*> >(v8::internal::Handle<v8::internal::Module> const&, std::__1::pair<v8::internal::Handle<v8::internal::Module> const, v8::internal::UnorderedStringSet*>&&)",93957339147856,93957339148813],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<v8::internal::Handle<v8::internal::String>, void*>*>, bool> std::__1::__hash_table<v8::internal::Handle<v8::internal::String>, v8::internal::StringHandleHash, v8::internal::StringHandleEqual, v8::internal::ZoneAllocator<v8::internal::Handle<v8::internal::String> > >::__emplace_unique_key_args<v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String> const&>(v8::internal::Handle<v8::internal::String> const&, v8::internal::Handle<v8::internal::String> const&)",93957339150592,93957339151675],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object> >, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object> >, std::__1::__unordered_map_hasher<v8::internal::Handle<v8::internal::String>, std::__1::__hash_value_type<v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object> >, v8::internal::StringHandleHash, v8::internal::StringHandleEqual, true>, std::__1::__unordered_map_equal<v8::internal::Handle<v8::internal::String>, std::__1::__hash_value_type<v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object> >, v8::internal::StringHandleEqual, v8::internal::StringHandleHash, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object> > > >::__emplace_unique_key_args<v8::internal::Handle<v8::internal::String>, std::__1::pair<v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Cell> > >(v8::internal::Handle<v8::internal::String> const&, std::__1::pair<v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Cell> >&&)",93957339153728,93957339154863],["v8::internal::StackFrameInfo::IsNative() const",93957339154992,93957339155140],["v8::internal::StackFrameInfo::IsToplevel() const",93957339155312,93957339155391],["v8::internal::StackFrameInfo::GetScript(v8::internal::Isolate*, v8::internal::Handle<v8::internal::StackFrameInfo>)",93957339155536,93957339155751],["v8::internal::StackFrameInfo::GetColumnNumber(v8::internal::Handle<v8::internal::StackFrameInfo>)",93957339155840,93957339156005],["v8::internal::StackFrameInfo::GetEnclosingColumnNumber(v8::internal::Handle<v8::internal::StackFrameInfo>)",93957339156240,93957339156485],["v8::internal::StackFrameInfo::GetScriptName() const",93957339156656,93957339156817],["v8::internal::StackFrameInfo::GetEvalOrigin(v8::internal::Handle<v8::internal::StackFrameInfo>)",93957339157024,93957339157121],["v8::internal::StackFrameInfo::GetFunctionName(v8::internal::Handle<v8::internal::StackFrameInfo>)",93957339164000,93957339164421],["v8_inspector::protocol::Debugger::DomainDispatcherImpl::setBreakpointByUrl(v8_crdtp::Dispatchable const&)",93957342255952,93957342257838],["v8_inspector::protocol::Debugger::Location::~Location()",93957342265248,93957342265280],["v8_inspector::protocol::Debugger::Scope::~Scope()",93957342265856,93957342266006],["non-virtual thunk to v8_inspector::protocol::Debugger::SearchMatch::~SearchMatch()",93957342266288,93957342266331],["v8_inspector::protocol::Debugger::BreakLocation::~BreakLocation()",93957342266480,93957342266551],["v8_inspector::protocol::Debugger::DebugSymbols::~DebugSymbols()",93957342266640,93957342266711],["v8_inspector::protocol::Debugger::Location::deserializer_descriptor()::$_1::__invoke(v8_crdtp::DeserializerState*, void*)",93957342266768,93957342266782],["v8_inspector::protocol::Debugger::ScriptPosition::deserializer_descriptor()::$_3::__invoke(v8_crdtp::DeserializerState*, void*)",93957342266800,93957342266814],["v8::internal::compiler::JSOperatorBuilder::ToNumeric()",93957343305776,93957343305790],["v8::internal::compiler::JSOperatorBuilder::CreateIterResultObject()",93957343305840,93957343305854],["v8::internal::compiler::JSOperatorBuilder::CreateTypedArray()",93957343305904,93957343305918],["v8::internal::compiler::CommonOperatorBuilder::Deoptimize(v8::internal::DeoptimizeKind, v8::internal::DeoptimizeReason, v8::internal::compiler::FeedbackSource const&)",93957343306496,93957343306973],["v8::internal::compiler::CommonOperatorBuilder::Switch(unsigned long)",93957343307424,93957343307549],["v8::internal::compiler::CommonOperatorBuilder::Loop(int)",93957343307984,93957343308139],["v8::internal::compiler::CommonOperatorBuilder::OsrValue(int)",93957343308800,93957343308937],["v8::internal::compiler::CommonOperatorBuilder::Float32Constant(float)",93957343309376,93957343309530],["v8::internal::compiler::CommonOperatorBuilder::NumberConstant(double)",93957343309840,93957343309994],["v8::internal::compiler::CommonOperatorBuilder::HeapConstant(v8::internal::Handle<v8::internal::HeapObject> const&)",93957343310144,93957343310287],["v8::internal::compiler::CommonOperatorBuilder::RelocatableInt64Constant(long, v8::internal::RelocInfo::Mode)",93957343310432,93957343310604],["v8::internal::compiler::CommonOperatorBuilder::Select(v8::internal::MachineRepresentation, v8::internal::compiler::BranchHint)",93957343310752,93957343310917],["v8::internal::compiler::Operator1<v8::internal::MachineRepresentation, v8::internal::compiler::OpEqualTo<v8::internal::MachineRepresentation>, v8::internal::compiler::OpHash<v8::internal::MachineRepresentation> >* v8::internal::Zone::New<v8::internal::compiler::Operator1<v8::internal::MachineRepresentation, v8::internal::compiler::OpEqualTo<v8::internal::MachineRepresentation>, v8::internal::compiler::OpHash<v8::internal::MachineRepresentation> >, v8::internal::compiler::IrOpcode::Value, v8::internal::compiler::Operator::Property, char const (&) [4], int&, int, int, int, int, int, v8::internal::MachineRepresentation&>(v8::internal::compiler::IrOpcode::Value&&, v8::internal::compiler::Operator::Property&&, char const (&) [4], int&, int&&, int&&, int&&, int&&, int&&, v8::internal::MachineRepresentation&)",93957343311296,93957343311477],["v8::internal::compiler::CommonOperatorBuilder::FoldConstant()",93957343311616,93957343311738],["v8::internal::compiler::CommonOperatorBuilder::InductionVariablePhi(int)",93957343311920,93957343312102],["v8::internal::compiler::CommonOperatorBuilder::StateValues(int, v8::internal::compiler::SparseInputMask)",93957343312176,93957343312517],["v8::internal::compiler::CommonOperatorBuilder::ArgumentsElementsState(v8::internal::CreateArgumentsType)",93957343312704,93957343312844],["v8::internal::compiler::CommonOperatorBuilder::ObjectState(unsigned int, int)",93957343312976,93957343313136],["v8::internal::compiler::ObjectIdOf(v8::internal::compiler::Operator const*)",93957343313312,93957343313368],["v8::internal::compiler::CommonOperatorBuilder::Call(v8::internal::compiler::CallDescriptor const*)",93957343313552,93957343313740],["v8::internal::compiler::CommonOperatorBuilder::Projection(unsigned long)",93957343313920,93957343314094],["v8::internal::compiler::CommonOperatorBuilder::CreateFrameStateFunctionInfo(v8::internal::compiler::FrameStateType, int, int, v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957343314736,93957343314822],["v8::internal::compiler::CommonOperatorBuilder::DeadValue(v8::internal::MachineRepresentation)",93957343314944,93957343315087],["v8::internal::compiler::CommonOperatorGlobalCache::CommonOperatorGlobalCache()",93957343315136,93957343326124],["__vdprintf_chk",139871564362656,139871564362680],["__ppoll_chk",139871564363216,139871564363236],["__fortify_fail",139871564363312,139871564363348],["htons",139871564363376,139871564363383],["__negti2",139871565130304,139871565130325],["__cmpti2",139871565130576,139871565130612],["__absvdi2",139871565130688,139871565130725],["__absvti2",139871565130784,139871565130828],["__addvsi3",139871565130896,139871565130938],["__subvdi3",139871565131024,139871565131075],["v8::internal::JavaScriptFrame::PrintTop(v8::internal::Isolate*, _IO_FILE*, bool, bool)",93957336580960,93957336583505],["v8::internal::FrameSummary::WasmFrameSummary::function_index() const",93957336584944,93957336584957],["v8::internal::FrameSummary::is_constructor() const",93957336585504,93957336585547],["v8::internal::FrameSummary::SourceStatementPosition() const",93957336586128,93957336586290],["v8::internal::OptimizedFrame::GetDeoptimizationData(int*) const",93957336588224,93957336588525],["v8::internal::OptimizedFrame::GetFunctions(std::__1::vector<v8::internal::SharedFunctionInfo, std::__1::allocator<v8::internal::SharedFunctionInfo> >*) const",93957336588736,93957336589239],["v8::internal::UnoptimizedFrame::position() const",93957336589264,93957336589321],["v8::internal::UnoptimizedFrame::LookupExceptionHandlerInTable(int*, v8::internal::HandlerTable::CatchPrediction*)",93957336589360,93957336589451],["v8::internal::SourceTextModuleInfo::RegularExportCount() const",93957339109504,93957339109557],["v8::internal::SharedFunctionInfo::DiscardCompiled(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957339117232,93957339117974],["v8::internal::SharedFunctionInfo::UninstallDebugBytecode(v8::internal::SharedFunctionInfo, v8::internal::Isolate*)",93957339124304,93957339124620],["v8::internal::SourceTextModule::StoreVariable(v8::internal::Handle<v8::internal::SourceTextModule>, int, v8::internal::Handle<v8::internal::Object>)",93957339126112,93957339126370],["v8::internal::SourceTextModule::MaybeTransitionComponent(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SourceTextModule>, v8::internal::ZoneForwardList<v8::internal::Handle<v8::internal::SourceTextModule> >*, v8::internal::Module::Status)",93957339131664,93957339132074],["v8::internal::SourceTextModule::GetModuleNamespace(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SourceTextModule>, int)",93957339138928,93957339139051],["v8::internal::SourceTextModule::InnerModuleEvaluation(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SourceTextModule>, v8::internal::ZoneForwardList<v8::internal::Handle<v8::internal::SourceTextModule> >*, unsigned int*)",93957339140048,93957339141445],["v8::internal::SourceTextModule::AsyncModuleExecutionRejected(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SourceTextModule>, v8::internal::Handle<v8::internal::Object>)",93957339143760,93957339144253],["v8::internal::SourceTextModule::Reset(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SourceTextModule>)",93957339144928,93957339145523],["std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::Handle<v8::internal::Module>, v8::internal::UnorderedStringSet*>, std::__1::__unordered_map_hasher<v8::internal::Handle<v8::internal::Module>, std::__1::__hash_value_type<v8::internal::Handle<v8::internal::Module>, v8::internal::UnorderedStringSet*>, v8::internal::ModuleHandleHash, v8::internal::ModuleHandleEqual, true>, std::__1::__unordered_map_equal<v8::internal::Handle<v8::internal::Module>, std::__1::__hash_value_type<v8::internal::Handle<v8::internal::Module>, v8::internal::UnorderedStringSet*>, v8::internal::ModuleHandleEqual, v8::internal::ModuleHandleHash, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<v8::internal::Handle<v8::internal::Module>, v8::internal::UnorderedStringSet*> > >::__rehash(unsigned long)",93957339145920,93957339146662],["std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object> >, std::__1::__unordered_map_hasher<v8::internal::Handle<v8::internal::String>, std::__1::__hash_value_type<v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object> >, v8::internal::StringHandleHash, v8::internal::StringHandleEqual, true>, std::__1::__unordered_map_equal<v8::internal::Handle<v8::internal::String>, std::__1::__hash_value_type<v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object> >, v8::internal::StringHandleEqual, v8::internal::StringHandleHash, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object> > > >::__rehash(unsigned long)",93957339147056,93957339147856],["std::__1::__hash_table<v8::internal::Handle<v8::internal::String>, v8::internal::StringHandleHash, v8::internal::StringHandleEqual, v8::internal::ZoneAllocator<v8::internal::Handle<v8::internal::String> > >::rehash(unsigned long)",93957339148816,93957339149187],["std::__1::__hash_const_iterator<std::__1::__hash_node<v8::internal::Handle<v8::internal::String>, void*>*> std::__1::__hash_table<v8::internal::Handle<v8::internal::String>, v8::internal::StringHandleHash, v8::internal::StringHandleEqual, v8::internal::ZoneAllocator<v8::internal::Handle<v8::internal::String> > >::find<v8::internal::Handle<v8::internal::String> >(v8::internal::Handle<v8::internal::String> const&) const",93957339150000,93957339150581],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<v8::internal::Handle<v8::internal::Module>, void*>*>, bool> std::__1::__hash_table<v8::internal::Handle<v8::internal::Module>, v8::internal::ModuleHandleHash, v8::internal::ModuleHandleEqual, v8::internal::ZoneAllocator<v8::internal::Handle<v8::internal::Module> > >::__emplace_unique_key_args<v8::internal::Handle<v8::internal::Module>, v8::internal::Handle<v8::internal::Module> >(v8::internal::Handle<v8::internal::Module> const&, v8::internal::Handle<v8::internal::Module>&&)",93957339151680,93957339152608],["std::__1::__hash_table<v8::internal::Handle<v8::internal::Module>, v8::internal::ModuleHandleHash, v8::internal::ModuleHandleEqual, v8::internal::ZoneAllocator<v8::internal::Handle<v8::internal::Module> > >::__rehash(unsigned long)",93957339152992,93957339153728],["v8::internal::StackFrameInfo::IsPromiseAll() const",93957339154864,93957339154923],["v8_inspector::protocol::Debugger::DomainDispatcherImpl::restartFrame(v8_crdtp::Dispatchable const&)",93957342249424,93957342250496],["v8_inspector::protocol::Debugger::DomainDispatcherImpl::setReturnValue(v8_crdtp::Dispatchable const&)",93957342259904,93957342260462],["v8_inspector::protocol::Debugger::DomainDispatcherImpl::stepOver(v8_crdtp::Dispatchable const&)",93957342264304,93957342265061],["v8_inspector::protocol::Debugger::LocationRange::~LocationRange()",93957342265328,93957342265421],["v8_inspector::protocol::Debugger::CallFrame::~CallFrame()",93957342265824,93957342265852],["v8_inspector::protocol::Debugger::Scope::~Scope()",93957342266016,93957342266167],["v8_inspector::protocol::Debugger::SearchMatch::~SearchMatch()",93957342266224,93957342266283],["non-virtual thunk to v8_inspector::protocol::Debugger::SearchMatch::~SearchMatch()",93957342266336,93957342266396],["v8::internal::compiler::JSOperatorBuilder::ToNumberConvertBigInt()",93957343305760,93957343305774],["v8::internal::compiler::JSOperatorBuilder::ToObject()",93957343305792,93957343305806],["v8::internal::compiler::JSOperatorBuilder::Create()",93957343305824,93957343305838],["v8::internal::compiler::JSOperatorBuilder::CreateStringIterator()",93957343305856,93957343305870],["v8::internal::compiler::JSOperatorBuilder::CreatePromise()",93957343305888,93957343305902],["v8::internal::compiler::CommonOperatorBuilder::End(unsigned long)",93957343305920,93957343306133],["v8::internal::compiler::CommonOperatorBuilder::StaticAssert(char const*)",93957343306336,93957343306482],["v8::internal::compiler::CommonOperatorBuilder::DynamicCheckMapsWithDeoptUnless()",93957343306976,93957343306990],["v8::internal::compiler::CommonOperatorBuilder::TrapUnless(v8::internal::compiler::TrapId)",93957343307168,93957343307410],["v8::internal::compiler::CommonOperatorBuilder::IfValue(int, int, v8::internal::compiler::BranchHint)",93957343307552,93957343307728],["v8::internal::compiler::CommonOperatorBuilder::Start(int)",93957343307872,93957343307976],["v8::internal::compiler::CommonOperatorBuilder::Merge(int)",93957343308144,93957343308359],["v8::internal::compiler::CommonOperatorBuilder::Parameter(int, char const*)",93957343308528,93957343308793],["v8::internal::compiler::CommonOperatorBuilder::Int32Constant(int)",93957343308944,93957343309084],["v8::internal::compiler::CommonOperatorBuilder::TaggedIndexConstant(int)",93957343309232,93957343309372],["v8::internal::compiler::CommonOperatorBuilder::Float64Constant(double)",93957343309536,93957343309690],["__wcstombs_chk",139871564362144,139871564362234],["__obstack_vprintf_chk",139871564362880,139871564362904],["__poll_chk",139871564363184,139871564363204],["__explicit_bzero_chk",139871564363248,139871564363285],["__multi3",139871565130272,139871565130300],["__lshrti3",139871565130336,139871565130407],["__ashrti3",139871565130496,139871565130567],["__ucmpti2",139871565130624,139871565130660],["v8::internal::CommonFrameWithJSLinkage::ComputeParametersCount() const",93957336579296,93957336579329],["v8::internal::FixedArray::set(int, v8::internal::Object)",93957336583984,93957336584141],["v8::internal::FrameSummary::EnsureSourcePositionsAvailable()",93957336584656,93957336584800],["v8::internal::FrameSummary::GetTop(v8::internal::CommonFrame const*)",93957336584992,93957336585136],["v8::internal::FrameSummary::code_offset() const",93957336585472,93957336585501],["v8::internal::FrameSummary::is_subject_to_debugging() const",93957336585552,93957336585737],["v8::internal::FrameSummary::SourcePosition() const",93957336585952,93957336586114],["v8::internal::FrameSummary::FunctionName() const",93957336586304,93957336586487],["v8::internal::ScopeInfo::ContextLocalName(int) const",93957339107056,93957339107088],["v8::internal::SharedFunctionInfo::StartPosition() const",93957339112400,93957339112717],["v8::internal::SharedFunctionInfo::DebugName(v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957339115728,93957339116315],["v8::internal::SharedFunctionInfo::SourceSize()",93957339121344,93957339121378],["v8::internal::SharedFunctionInfo::InstallDebugBytecode(v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Isolate*)",93957339123376,93957339123787],["v8::internal::SourceTextModule::GetScript() const",93957339124752,93957339124901],["v8::internal::SourceTextModule::GetCell(int)",93957339125776,93957339125902],["v8::internal::SourceTextModule::ResolveImport(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SourceTextModule>, v8::internal::Handle<v8::internal::String>, int, v8::internal::MessageLocation, bool, v8::internal::Module::ResolveSet*)",93957339127456,93957339127964],["v8::internal::SourceTextModule::RunInitializationCode(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SourceTextModule>)",93957339131056,93957339131664],["v8::internal::SourceTextModule::FinishInstantiate(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SourceTextModule>, v8::internal::ZoneForwardList<v8::internal::Handle<v8::internal::SourceTextModule> >*, unsigned int*, v8::internal::Zone*)",93957339132080,93957339135307],["v8::internal::SourceTextModule::GatherAsyncParentCompletions(v8::internal::Isolate*, v8::internal::Zone*, v8::internal::Handle<v8::internal::SourceTextModule>, v8::internal::ZoneSet<v8::internal::Handle<v8::internal::SourceTextModule>, v8::internal::SourceTextModule::AsyncEvaluatingOrdinalCompare>*)",93957339137344,93957339138916],["v8::internal::SourceTextModule::GetImportMeta(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SourceTextModule>)",93957339139056,93957339139326],["v8::internal::SourceTextModule::Evaluate(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SourceTextModule>)",93957339139760,93957339140035],["v8::internal::SourceTextModule::AsyncModuleExecutionFulfilled(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SourceTextModule>)",93957339141456,93957339142388],["v8::internal::SourceTextModule::ExecuteModule(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SourceTextModule>)",93957339143280,93957339143760],["v8::internal::SourceTextModule::InnerExecuteAsyncModule(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SourceTextModule>, v8::internal::Handle<v8::internal::JSPromise>)",93957339144256,93957339144673],["v8_inspector::protocol::Debugger::DomainDispatcherImpl::evaluateOnCallFrame(v8_crdtp::Dispatchable const&)",93957342243024,93957342244649],["v8_inspector::protocol::Debugger::DomainDispatcherImpl::setBlackboxPatterns(v8_crdtp::Dispatchable const&)",93957342252800,93957342253438],["v8_inspector::protocol::Debugger::DomainDispatcherImpl::setBreakpointsActive(v8_crdtp::Dispatchable const&)",93957342258816,93957342259335],["v8_inspector::protocol::Debugger::DomainDispatcherImpl::setSkipAllPauses(v8_crdtp::Dispatchable const&)",93957342262000,93957342262519],["v8_inspector::protocol::Debugger::DomainDispatcherImpl::stepOut(v8_crdtp::Dispatchable const&)",93957342264144,93957342264299],["v8_inspector::protocol::Debugger::Dispatcher::wire(v8_crdtp::UberDispatcher*, v8_inspector::protocol::Debugger::Backend*)",93957342265072,93957342265240],["v8_inspector::protocol::Debugger::Location::~Location()",93957342265280,93957342265328],["v8_inspector::protocol::Debugger::LocationRange::~LocationRange()",93957342265424,93957342265518],["__wcsnrtombs_chk",139871564361952,139871564361977],["__vasprintf_chk",139871564362432,139871564362456],["__obstack_printf_chk",139871564362688,139871564362876],["__longjmp_chk",139871564362912,139871564362979],["v8::internal::InnerPointerToCodeCache::GetCacheEntry(unsigned long)",93957336578560,93957336578883],["v8::internal::BuiltinFrame::function() const",93957336580464,93957336580478],["v8::internal::CommonFrameWithJSLinkage::GetParameter(int) const",93957336583920,93957336583953],["v8::internal::JavaScriptBuiltinContinuationFrame::GetSPToFPDelta() const",93957336584160,93957336584177],["v8::internal::FrameSummary::JavaScriptFrameSummary::JavaScriptFrameSummary(v8::internal::Isolate*, v8::internal::Object, v8::internal::JSFunction, v8::internal::AbstractCode, int, bool, v8::internal::FixedArray)",93957336584304,93957336584651],["v8::internal::FrameSummary::AreSourcePositionsAvailable() const",93957336584800,93957336584929],["v8::internal::FrameSummary::~FrameSummary()",93957336584960,93957336584986],["v8::internal::FrameSummary::Get(v8::internal::CommonFrame const*, int)",93957336585136,93957336585298],["v8::internal::ScopeInfo::HasSharedFunctionName() const",93957339105296,93957339105362],["v8::internal::ScopeInfo::ModuleVariableCount() const",93957339107632,93957339107810],["v8::internal::SharedFunctionInfo::SetFunctionTokenPosition(int, int)",93957339110880,93957339110916],["v8::internal::SharedFunctionInfo::InterpreterTrampoline() const",93957339113488,93957339113561],["v8::internal::SharedFunctionInfo::HasCoverageInfo() const",93957339115152,93957339115233],["v8::internal::SharedFunctionInfo::HasSourceCode() const",93957339116416,93957339116595],["v8::internal::SharedFunctionInfo::GetSourceCode(v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957339118320,93957339118693],["v8::internal::SharedFunctionInfo::TryGetCachedCode(v8::internal::Isolate*)",93957339122096,93957339122204],["v8::internal::SharedFunctionInfo::EnsureSourcePositionsAvailable(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957339123184,93957339123375],["v8::internal::SharedFunctionInfo::SetActiveBytecodeArray(v8::internal::BytecodeArray)",93957339123792,93957339124297],["v8::internal::SourceTextModule::GetSharedFunctionInfo() const",93957339124624,93957339124743],["v8::internal::SourceTextModule::ImportIndex(int)",93957339124912,93957339124922],["v8::internal::SourceTextModule::CreateExport(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SourceTextModule>, int, v8::internal::Handle<v8::internal::FixedArray>)",93957339125184,93957339125776],["v8::internal::SourceTextModule::LoadVariable(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SourceTextModule>, int)",93957339125904,93957339126105],["v8::internal::SourceTextModule::ResolveExport(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SourceTextModule>, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String>, v8::internal::MessageLocation, bool, v8::internal::Module::ResolveSet*)",93957339126384,93957339127454],["v8::internal::SourceTextModule::ResolveExportUsingStarExports(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SourceTextModule>, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String>, v8::internal::MessageLocation, bool, v8::internal::Module::ResolveSet*)",93957339127968,93957339129182],["v8_inspector::protocol::Debugger::Frontend::paused(std::__1::unique_ptr<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Debugger::CallFrame, std::__1::default_delete<v8_inspector::protocol::Debugger::CallFrame> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Debugger::CallFrame, std::__1::default_delete<v8_inspector::protocol::Debugger::CallFrame> > > >, std::__1::default_delete<std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::Debugger::CallFrame, std::__1::default_delete<v8_inspector::protocol::Debugger::CallFrame> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::Debugger::CallFrame, std::__1::default_delete<v8_inspector::protocol::Debugger::CallFrame> > > > > >, v8_inspector::String16 const&, v8_crdtp::detail::PtrMaybe<v8_inspector::protocol::DictionaryValue>, v8_crdtp::detail::PtrMaybe<std::__1::vector<v8_inspector::String16, std::__1::allocator<v8_inspector::String16> > >, v8_crdtp::detail::PtrMaybe<v8_inspector::protocol::Runtime::StackTrace>, v8_crdtp::detail::PtrMaybe<v8_inspector::protocol::Runtime::StackTraceId>, v8_crdtp::detail::PtrMaybe<v8_inspector::protocol::Runtime::StackTraceId>)",93957342238576,93957342239207],["v8_inspector::protocol::Debugger::DomainDispatcherImpl::getStackTrace(v8_crdtp::Dispatchable const&)",93957342247424,93957342248151],["v8_inspector::protocol::Debugger::DomainDispatcherImpl::searchInContent(v8_crdtp::Dispatchable const&)",93957342251040,93957342252258],["v8_inspector::protocol::Debugger::DomainDispatcherImpl::setBreakpoint(v8_crdtp::Dispatchable const&)",93957342254160,93957342255193],["v8_inspector::protocol::Debugger::DomainDispatcherImpl::setBreakpointOnFunctionCall(v8_crdtp::Dispatchable const&)",93957342257840,93957342258815],["v8_inspector::protocol::Debugger::DomainDispatcherImpl::setPauseOnExceptions(v8_crdtp::Dispatchable const&)",93957342259344,93957342259889],["v8_inspector::protocol::Debugger::DomainDispatcherImpl::setScriptSource(v8_crdtp::Dispatchable const&)",93957342260464,93957342261988],["v8_inspector::protocol::Debugger::DomainDispatcherImpl::setVariableValue(v8_crdtp::Dispatchable const&)",93957342262528,93957342263305],["__gethostname_chk",139871564361840,139871564361856],["__wcsrtombs_chk",139871564362016,139871564362041],["__asprintf_chk",139871564362240,139871564362428],["__dprintf_chk",139871564362464,139871564362652],["v8::internal::StackFrame::Print(v8::internal::StringStream*, v8::internal::StackFrame::PrintMode, int) const",93957336576768,93957336576960],["v8::internal::JavaScriptFrame::SetParameterValue(int, v8::internal::Object) const",93957336579072,93957336579107],["v8::internal::JavaScriptFrame::GetFunctions(std::__1::vector<v8::internal::Handle<v8::internal::SharedFunctionInfo>, std::__1::allocator<v8::internal::Handle<v8::internal::SharedFunctionInfo> > >*) const",93957336579408,93957336579904],["v8::internal::JavaScriptFrame::context() const",93957336580512,93957336580526],["v8::internal::JavaScriptFrame::CollectFunctionAndOffsetForICStats(v8::internal::JSFunction, v8::internal::AbstractCode, int)",93957336583520,93957336583905],["v8::internal::JavaScriptFrame::GetActualArgumentCount() const",93957336583968,93957336583981],["v8::internal::JavaScriptBuiltinContinuationFrame::ComputeParametersCount() const",93957336584144,93957336584159],["v8::internal::JavaScriptBuiltinContinuationFrame::context() const",93957336584192,93957336584206],["v8::internal::Handle<v8::internal::SourceTextModuleInfoEntry> v8::internal::SourceTextModuleInfoEntry::New<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*, v8::internal::Handle<v8::internal::PrimitiveHeapObject>, v8::internal::Handle<v8::internal::PrimitiveHeapObject>, v8::internal::Handle<v8::internal::PrimitiveHeapObject>, int, int, int, int)",93957339104096,93957339104533],["v8::internal::ScopeInfo::IsReplModeScope() const",93957339106016,93957339106033],["v8::internal::ScopeInfo::ContextLocalIsParameter(int) const",93957339107232,93957339107276],["v8::internal::ScopeInfo::SavedClassVariableContextLocalIndex() const",93957339109248,93957339109293],["v8::internal::SourceTextModuleInfo::RegularExportExportNames(int) const",93957339109616,93957339109664],["void v8::internal::SharedFunctionInfo::InitFromFunctionLiteral<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::FunctionLiteral*, bool)",93957339111040,93957339112202],["v8::internal::SharedFunctionInfo::GetCode() const",93957339113088,93957339113450],["v8::internal::SharedFunctionInfo::ScriptIterator::Next()",93957339113728,93957339113862],["v8::internal::SharedFunctionInfo::BreakAtEntry() const",93957339115056,93957339115137],["v8::internal::SharedFunctionInfo::DebugNameCStr()",93957339115248,93957339115715],["v8::internal::SharedFunctionInfo::PassesFilter(char const*)",93957339116320,93957339116413],["v8::internal::SharedFunctionInfo::DiscardCompiledMetadata(v8::internal::Isolate*, std::__1::function<void (v8::internal::HeapObject, v8::internal::CompressedObjectSlot, v8::internal::HeapObject)>)",93957339116608,93957339117222],["v8::internal::SharedFunctionInfo::EndPosition() const",93957339117984,93957339118305],["v8::internal::SharedFunctionInfo::GetSourceCodeHarmony(v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957339118704,93957339121338],["v8::internal::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::SourceCodeOf const&)",93957339121392,93957339122091],["v8::internal::SharedFunctionInfo::DisableOptimization(v8::internal::BailoutReason)",93957339122208,93957339122774],["v8_inspector::protocol::Debugger::LocationRange::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342236864,93957342237030],["v8_inspector::protocol::Debugger::DomainDispatcherImpl::Dispatch(v8_crdtp::span<unsigned char>)",93957342240976,93957342241380],["v8_inspector::protocol::Debugger::DomainDispatcherImpl::getScriptSource(v8_crdtp::Dispatchable const&)",93957342245760,93957342246642],["v8_inspector::protocol::Debugger::DomainDispatcherImpl::pauseOnAsyncCall(v8_crdtp::Dispatchable const&)",93957342248320,93957342248875],["v8_inspector::protocol::Debugger::DomainDispatcherImpl::resume(v8_crdtp::Dispatchable const&)",93957342250496,93957342251026],["v8_inspector::protocol::Debugger::DomainDispatcherImpl::setAsyncCallStackDepth(v8_crdtp::Dispatchable const&)",93957342252272,93957342252790],["v8_inspector::protocol::Debugger::DomainDispatcherImpl::setBlackboxedRanges(v8_crdtp::Dispatchable const&)",93957342253440,93957342254147],["v8_inspector::protocol::Debugger::DomainDispatcherImpl::setInstrumentationBreakpoint(v8_crdtp::Dispatchable const&)",93957342255200,93957342255941],["__fgetws_unlocked_chk",139871564361552,139871564361719],["__wcrtomb_chk",139871564361872,139871564361908],["__mbsrtowcs_chk",139871564361984,139871564362009],["__mbstowcs_chk",139871564362048,139871564362138],["v8::internal::ConstructEntryFrame::unchecked_code() const",93957336576320,93957336576347],["v8::internal::CommonFrame::context() const",93957336577472,93957336577489],["v8::internal::StubFrame::LookupExceptionHandlerInTable()",93957336578928,93957336579051],["v8::internal::CommonFrameWithJSLinkage::unchecked_code() const",93957336579152,93957336579183],["v8::internal::JavaScriptFrame::GetFunctions(std::__1::vector<v8::internal::SharedFunctionInfo, std::__1::allocator<v8::internal::SharedFunctionInfo> >*) const",93957336579344,93957336579401],["v8::internal::CommonFrameWithJSLinkage::Summarize(std::__1::vector<v8::internal::FrameSummary, std::__1::allocator<v8::internal::FrameSummary> >*) const",93957336579904,93957336580460],["v8::internal::CommonFrameWithJSLinkage::receiver() const",93957336580480,93957336580499],["v8::internal::JavaScriptFrame::PrintFunctionAndOffset(v8::internal::JSFunction, v8::internal::AbstractCode, int, _IO_FILE*, bool)",93957336580528,93957336580945],["v8::internal::Descriptor::Descriptor()",93957339091056,93957339091091],["v8::internal::ScopeInfo::is_declaration_scope() const",93957339104944,93957339104959],["v8::internal::ScopeInfo::HasOuterScopeInfo() const",93957339105888,93957339105903],["v8::internal::ScopeInfo::EndPosition() const",93957339106416,93957339106512],["v8::internal::ScopeInfo::ContextLocalIsStaticFlag(int) const",93957339107136,93957339107171],["v8::internal::ScopeInfo::ContextLocalMaybeAssignedFlag(int) const",93957339107328,93957339107363],["v8::internal::ScopeInfo::ModuleVariable(int, v8::internal::String*, int*, v8::internal::VariableMode*, v8::internal::InitializationFlag*, v8::internal::MaybeAssignedFlag*)",93957339108416,93957339109007],["v8::internal::ScopeInfo::FunctionContextSlotIndex(v8::internal::String) const",93957339109360,93957339109472],["v8::internal::SourceTextModuleInfo::RegularExportCellIndex(int) const",93957339109568,93957339109615],["void v8::internal::SharedFunctionInfo::InitFromFunctionLiteral<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::FunctionLiteral*, bool)",93957339109664,93957339110873],["v8::internal::SharedFunctionInfo::UpdateAndFinalizeExpectedNofPropertiesFromEstimate(v8::internal::FunctionLiteral*)",93957339110928,93957339111031],["v8::internal::SharedFunctionInfo::Hash()",93957339112208,93957339112391],["v8::internal::SharedFunctionInfo::Init(v8::internal::ReadOnlyRoots, int)",93957339112720,93957339113077],["v8::internal::StackFrameInfo::GetWasmInstance() const",93957339113456,93957339113484],["v8::internal::SharedFunctionInfo::ScriptIterator::ScriptIterator(v8::internal::Isolate*, v8::internal::Script)",93957339113568,93957339113718],["v8::internal::SharedFunctionInfo::SetScript(v8::internal::ReadOnlyRoots, v8::internal::HeapObject, int, bool)",93957339113872,93957339114957],["v8_inspector::protocol::Console::ConsoleMessage::~ConsoleMessage()",93957342235632,93957342235745],["non-virtual thunk to v8_inspector::protocol::Debugger::SearchMatch::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342237888,93957342238021],["v8_inspector::protocol::Debugger::Frontend::scriptFailedToParse(v8_inspector::String16 const&, v8_inspector::String16 const&, int, int, int, int, int, v8_inspector::String16 const&, v8_crdtp::detail::PtrMaybe<v8_inspector::protocol::DictionaryValue>, v8_crdtp::detail::ValueMaybe<v8_inspector::String16>, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<int>, v8_crdtp::detail::PtrMaybe<v8_inspector::protocol::Runtime::StackTrace>, v8_crdtp::detail::ValueMaybe<int>, v8_crdtp::detail::ValueMaybe<v8_inspector::String16>, v8_crdtp::detail::ValueMaybe<v8_inspector::String16>)",93957342239280,93957342240073],["v8_inspector::protocol::Debugger::DomainDispatcherImpl::disable(v8_crdtp::Dispatchable const&)",93957342242128,93957342242280],["v8_inspector::protocol::Debugger::DomainDispatcherImpl::getPossibleBreakpoints(v8_crdtp::Dispatchable const&)",93957342244656,93957342245757],["v8_inspector::protocol::Debugger::DomainDispatcherImpl::getWasmBytecode(v8_crdtp::Dispatchable const&)",93957342246656,93957342247419],["v8_inspector::protocol::Debugger::DomainDispatcherImpl::pause(v8_crdtp::Dispatchable const&)",93957342248160,93957342248312],["v8_inspector::protocol::Debugger::DomainDispatcherImpl::removeBreakpoint(v8_crdtp::Dispatchable const&)",93957342248880,93957342249422],["__fwprintf_chk",139871564360912,139871564361100],["__getgroups_chk",139871564361760,139871564361817],["__getdomainname_chk",139871564361856,139871564361872],["__mbsnrtowcs_chk",139871564361920,139871564361945],["v8::internal::SafeStackFrameIterator::IsValidCaller(v8::internal::StackFrame*)",93957336575392,93957336575860],["v8::internal::BuiltinExitFrame::receiver() const",93957336576656,93957336576670],["v8::internal::CommonFrame::GetExpressionAddress(int) const",93957336577408,93957336577431],["v8::internal::CommonFrame::ComputeCallerState(v8::internal::StackFrame::State*) const",93957336577616,93957336577707],["v8::internal::StubFrame::unchecked_code() const",93957336578896,93957336578920],["v8::internal::TypedFrame::Iterate(v8::internal::RootVisitor*) const",93957336579056,93957336579066],["v8::internal::JavaScriptFrame::IsConstructor() const",93957336579120,93957336579141],["v8::internal::OptimizedFrame::ComputeParametersCount() const",93957336579184,93957336579282],["v8::internal::OSROptimizedCodeCache::InitializeEntry(int, v8::internal::SharedFunctionInfo, v8::internal::Code, v8::internal::BytecodeOffset)",93957339083200,93957339083558],["v8::internal::Handle<v8::internal::SourceTextModuleInfo> v8::internal::SourceTextModuleInfo::New<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Zone*, v8::internal::SourceTextModuleDescriptor*)",93957339095776,93957339097442],["v8::internal::ScopeInfo::scope_type() const",93957339104832,93957339104848],["v8::internal::ScopeInfo::HasSavedClassVariableIndex() const",93957339105184,93957339105201],["v8::internal::ScopeInfo::SetFunctionName(v8::internal::Object)",93957339105456,93957339105654],["v8::internal::ScopeInfo::SetIsDebugEvaluateScope()",93957339105920,93957339105976],["v8::internal::ScopeInfo::FunctionDebugName() const",93957339106144,93957339106319],["v8::internal::ScopeInfo::OuterScopeInfo() const",93957339106720,93957339106875],["v8::internal::ScopeInfo::ContextLocalMode(int) const",93957339107088,93957339107122],["v8::internal::ScopeInfo::ContextLocalInitFlag(int) const",93957339107184,93957339107219],["v8::internal::ScopeInfo::ContextLocalParameterNumber(int) const",93957339107280,93957339107316],["v8::internal::ScopeInfo::VariableIsSynthetic(v8::internal::String)",93957339107376,93957339107619],["v8::internal::ScopeInfo::ModuleIndex(v8::internal::String, v8::internal::VariableMode*, v8::internal::InitializationFlag*, v8::internal::MaybeAssignedFlag*)",93957339107824,93957339108414],["v8::internal::ScopeInfo::ContextSlotIndex(v8::internal::ScopeInfo, v8::internal::String, v8::internal::VariableMode*, v8::internal::InitializationFlag*, v8::internal::MaybeAssignedFlag*, v8::internal::IsStaticFlag*)",93957339109008,93957339109245],["v8::internal::ScopeInfo::ReceiverContextSlotIndex() const",93957339109296,93957339109359],["v8::internal::ScopeInfo::function_kind() const",93957339109472,93957339109489],["v8_inspector::protocol::Console::ConsoleMessage::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342234064,93957342234363],["v8_inspector::protocol::Debugger::Location::deserializer_descriptor()",93957342235968,93957342236241],["v8_inspector::protocol::Debugger::Scope::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342237488,93957342237742],["v8_inspector::protocol::Debugger::DebugSymbols::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342238240,93957342238375],["v8_inspector::protocol::Debugger::Frontend::resumed()",93957342239216,93957342239272],["v8_inspector::protocol::Debugger::Frontend::scriptParsed(v8_inspector::String16 const&, v8_inspector::String16 const&, int, int, int, int, int, v8_inspector::String16 const&, v8_crdtp::detail::PtrMaybe<v8_inspector::protocol::DictionaryValue>, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<v8_inspector::String16>, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<bool>, v8_crdtp::detail::ValueMaybe<int>, v8_crdtp::detail::PtrMaybe<v8_inspector::protocol::Runtime::StackTrace>, v8_crdtp::detail::ValueMaybe<int>, v8_crdtp::detail::ValueMaybe<v8_inspector::String16>, v8_crdtp::detail::PtrMaybe<v8_inspector::protocol::Debugger::DebugSymbols>, v8_crdtp::detail::ValueMaybe<v8_inspector::String16>)",93957342240080,93957342240963],["v8_inspector::protocol::Debugger::DomainDispatcherImpl::continueToLocation(v8_crdtp::Dispatchable const&)",93957342241392,93957342242116],["v8_inspector::protocol::Debugger::DomainDispatcherImpl::enable(v8_crdtp::Dispatchable const&)",93957342242288,93957342243020],["__wcpncpy_chk",139871564360416,139871564360441],["__vfwprintf_chk",139871564361136,139871564361160],["__confstr_chk",139871564361728,139871564361753],["__ttyname_r_chk",139871564361824,139871564361840],["v8::internal::StackTraceFrameIterator::Advance()",93957336571328,93957336571380],["v8::internal::EntryFrame::unchecked_code() const",93957336576016,93957336576043],["v8::internal::EntryFrame::Iterate(v8::internal::RootVisitor*) const",93957336576432,93957336576632],["v8::internal::BuiltinExitFrame::GetParameter(int) const",93957336576704,93957336576722],["v8::internal::BuiltinExitFrame::Print(v8::internal::StringStream*, v8::internal::StackFrame::PrintMode, int) const",93957336576960,93957336577403],["v8::internal::UnoptimizedFrame::GetExpressionAddress(int) const",93957336577440,93957336577463],["v8::internal::CommonFrame::position() const",93957336577504,93957336577614],["v8::internal::CommonFrame::IterateCompiledFrame(v8::internal::RootVisitor*) const",93957336577712,93957336578556],["v8::internal::MaybeHandle<v8::internal::OrderedHashMap> v8::internal::OrderedHashTable<v8::internal::OrderedHashMap, 2>::EnsureGrowable<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::OrderedHashMap>)",93957339076880,93957339076950],["v8::internal::(anonymous namespace)::CreateDataProperty(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object>)",93957339087712,93957339087970],["v8::internal::Descriptor::DataConstant(v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes)",93957339091296,93957339091460],["v8::internal::Handle<v8::internal::SourceTextModuleInfo> v8::internal::SourceTextModuleInfo::New<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*, v8::internal::Zone*, v8::internal::SourceTextModuleDescriptor*)",93957339101392,93957339103058],["v8::internal::ScopeInfo::ContextHeaderLength() const",93957339104768,93957339104792],["v8::internal::ScopeInfo::SloppyEvalCanExtendVars() const",93957339104880,93957339104897],["v8::internal::ScopeInfo::HasContextExtensionSlot() const",93957339105120,93957339105137],["v8::internal::ScopeInfo::HasInferredFunctionName() const",93957339105232,93957339105248],["v8::internal::ScopeInfo::FunctionName() const",93957339105376,93957339105455],["v8::internal::ScopeInfo::SetInferredFunctionName(v8::internal::String)",93957339105664,93957339105879],["v8::internal::ScopeInfo::IsDebugEvaluateScope() const",93957339105904,93957339105918],["v8::internal::ScopeInfo::PrivateNameLookupSkipsOuterClass() const",93957339105984,93957339106001],["v8::internal::ScopeInfo::InferredFunctionName() const",93957339106048,93957339106143],["v8::internal::ScopeInfo::StartPosition() const",93957339106320,93957339106410],["v8::internal::ScopeInfo::SetPositionInfo(int, int)",93957339106512,93957339106709],["v8::internal::ScopeInfo::ModuleDescriptorInfo() const",93957339106880,93957339107056],["std::__1::basic_string<unsigned short, std::__1::char_traits<unsigned short>, std::__1::allocator<unsigned short> >::__grow_by_and_replace(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned short const*)",93957342226176,93957342227531],["v8_inspector::protocol::Console::DomainDispatcherImpl::clearMessages(v8_crdtp::Dispatchable const&)",93957342234976,93957342235128],["v8_inspector::protocol::HeapProfiler::DomainDispatcherImpl::~DomainDispatcherImpl()",93957342235888,93957342235916],["v8_inspector::protocol::Debugger::ScriptPosition::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342236432,93957342236561],["v8_inspector::protocol::Debugger::CallFrame::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342237040,93957342237477],["v8_inspector::protocol::Debugger::SearchMatch::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342237744,93957342237877],["v8_inspector::protocol::Debugger::BreakLocation::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342238032,93957342238239],["v8_inspector::protocol::Debugger::Frontend::breakpointResolved(v8_inspector::String16 const&, std::__1::unique_ptr<v8_inspector::protocol::Debugger::Location, std::__1::default_delete<v8_inspector::protocol::Debugger::Location> >)",93957342238384,93957342238575],["__wcpcpy_chk",139871564359840,139871564359889],["__vswprintf_chk",139871564360656,139871564360697],["__vwprintf_chk",139871564361104,139871564361128],["__fgetws_chk",139871564361168,139871564361539],["v8::internal::StackFrameIterator::Advance()",93957336569104,93957336569678],["v8::internal::SafeStackFrameIterator::SafeStackFrameIterator(v8::internal::Isolate*, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long)",93957336573104,93957336574154],["v8::internal::CommonFrame::GetCallerStackPointer() const",93957336575920,93957336575934],["v8::internal::EntryFrame::GetCallerState(v8::internal::StackFrame::State*) const",93957336576064,93957336576185],["v8::internal::ExitFrame::ComputeCallerState(v8::internal::StackFrame::State*) const",93957336576352,93957336576427],["v8::internal::BuiltinExitFrame::function() const",93957336576640,93957336576654],["v8::internal::BuiltinExitFrame::IsConstructor() const",93957336576672,93957336576698],["v8::internal::BuiltinExitFrame::ComputeParametersCount() const",93957336576736,93957336576754],["v8::internal::FunctionTemplateInfo::TryGetCachedPropertyName(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)",93957339071264,93957339071396],["v8::internal::OrderedHashSet::ConvertToKeysArray(v8::internal::Isolate*, v8::internal::Handle<v8::internal::OrderedHashSet>, v8::internal::GetKeysConversion)",93957339079376,93957339080011],["v8::internal::OSROptimizedCodeCache::GetOptimizedCode(v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::BytecodeOffset, v8::internal::Isolate*)",93957339084944,93957339085184],["v8::internal::PropertyDescriptor::ToPropertyDescriptorObject(v8::internal::Isolate*)",93957339090144,93957339090596],["v8::internal::Descriptor::DataField(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Name>, int, v8::internal::PropertyAttributes, v8::internal::Representation)",93957339091136,93957339091229],["v8::internal::PropertyDetails::PrintAsFastTo(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::PropertyDetails::PrintMode)",93957339091520,93957339092043],["v8::internal::ScopeInfo::set(int, v8::internal::Smi)",93957339097632,93957339097651],["v8::internal::Handle<v8::internal::ModuleRequest> v8::internal::ModuleRequest::New<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::FixedArray>, int)",93957339103360,93957339103646],["v8::internal::ScopeInfo::CreateForWithScope(v8::internal::Isolate*, v8::internal::MaybeHandle<v8::internal::ScopeInfo>)",93957339104544,93957339104756],["v8::internal::ScopeInfo::IsEmpty() const",93957339104800,93957339104817],["v8::internal::ScopeInfo::is_script_scope() const",93957339104848,93957339104871],["v8::internal::ScopeInfo::language_mode() const",93957339104912,93957339104929],["v8::internal::ScopeInfo::ContextLength() const",93957339104960,93957339105115],["v8::internal::ScopeInfo::HasClassBrand() const",93957339105152,93957339105169],["v8::internal::ScopeInfo::HasFunctionName() const",93957339105216,93957339105232],["v8::internal::ScopeInfo::HasPositionInfo() const",93957339105248,93957339105281],["v8_inspector::protocol::(anonymous namespace)::ValueParserHandler::HandleNull()",93957342222528,93957342222743],["std::__1::__hash_table<v8_inspector::String16, std::__1::hash<v8_inspector::String16>, std::__1::equal_to<v8_inspector::String16>, std::__1::allocator<v8_inspector::String16> >::__rehash(unsigned long)",93957342230672,93957342231531],["v8_inspector::protocol::HeapProfiler::Frontend::flush()",93957342234512,93957342234526],["v8_inspector::protocol::Console::DomainDispatcherImpl::enable(v8_crdtp::Dispatchable const&)",93957342235296,93957342235448],["v8_inspector::protocol::Console::ConsoleMessage::~ConsoleMessage()",93957342235760,93957342235876],["void std::__1::__function::__policy_invoker<void (v8_crdtp::Dispatchable const&)>::__call_impl<std::__1::__function::__default_alloc_func<v8_inspector::protocol::HeapProfiler::DomainDispatcherImpl::Dispatch(v8_crdtp::span<unsigned char>)::$_9, void (v8_crdtp::Dispatchable const&)> >(std::__1::__function::__policy_storage const*, v8_crdtp::Dispatchable const&)",93957342235920,93957342235953],["v8_inspector::protocol::Debugger::Location::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342236256,93957342236423],["v8_inspector::protocol::Debugger::LocationRange::deserializer_descriptor()",93957342236576,93957342236849],["__wcscpy_chk",139871564359680,139871564359732],["__wcscat_chk",139871564359936,139871564360036],["__swprintf_chk",139871564360448,139871564360650],["__wprintf_chk",139871564360704,139871564360900],["v8::internal::Execution::New(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, int, v8::internal::Handle<v8::internal::Object>*)",93957336566496,93957336566616],["v8::internal::StackFrame::LookupCode() const",93957336570880,93957336570913],["v8::internal::StackTraceFrameIterator::FrameFunctionCount() const",93957336572736,93957336572847],["v8::internal::SafeStackFrameIterator::Advance()",93957336574704,93957336574940],["v8::internal::StackFrame::GetCallerState(v8::internal::StackFrame::State*) const",93957336575872,93957336575907],["v8::internal::NativeFrame::ComputeCallerState(v8::internal::StackFrame::State*) const",93957336575936,93957336576011],["v8::internal::RegExpMacroAssembler::BindJumpTarget(v8::internal::Label*)",93957336576048,93957336576062],["v8::internal::CWasmEntryFrame::GetCallerState(v8::internal::StackFrame::State*) const",93957336576192,93957336576313],["v8::internal::NumberDictionary::Set(v8::internal::Isolate*, v8::internal::Handle<v8::internal::NumberDictionary>, unsigned int, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::JSObject>, v8::internal::PropertyDetails)",93957339066384,93957339066525],["v8::internal::JSDataView::BodyDescriptor::IsValidSlot(v8::internal::Map, v8::internal::HeapObject, int)",93957339075056,93957339075165],["v8::internal::OrderedHashTableIterator<v8::internal::JSSetIterator, v8::internal::OrderedHashSet>::HasMore()",93957339077712,93957339078050],["v8::internal::MaybeHandle<v8::internal::OrderedHashMap> v8::internal::OrderedHashTable<v8::internal::OrderedHashMap, 2>::Rehash<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::OrderedHashMap>, int)",93957339081152,93957339082539],["v8::internal::OSROptimizedCodeCache::Compact(v8::internal::Handle<v8::internal::NativeContext>)",93957339083728,93957339084301],["v8::internal::OSROptimizedCodeCache::EvictMarkedCode(v8::internal::Isolate*)",93957339085648,93957339085815],["v8::internal::(anonymous namespace)::GetPropertyIfPresent(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object>*)",93957339089728,93957339090000],["v8::internal::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::PropertyAttributes const&)",93957339090832,93957339090990],["v8::internal::Descriptor::Descriptor(v8::internal::Handle<v8::internal::Name>, v8::internal::MaybeObjectHandle const&, v8::internal::PropertyDetails)",93957339091104,93957339091123],["v8::internal::Descriptor::DataField(v8::internal::Handle<v8::internal::Name>, int, v8::internal::PropertyAttributes, v8::internal::PropertyConstness, v8::internal::Representation, v8::internal::MaybeObjectHandle const&)",93957339091232,93957339091283],["v8::internal::Descriptor::AccessorConstant(v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes)",93957339091472,93957339091507],["v8::internal::Handle<v8::internal::ScopeInfo> v8::internal::ScopeInfo::Create<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Zone*, v8::internal::Scope*, v8::internal::MaybeHandle<v8::internal::ScopeInfo>)",93957339092048,93957339095764],["v8::internal::ScopeInfo::set(int, v8::internal::Object, v8::internal::WriteBarrierMode)",93957339097456,93957339097618],["v8::internal::Handle<v8::internal::ScopeInfo> v8::internal::ScopeInfo::Create<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*, v8::internal::Zone*, v8::internal::Scope*, v8::internal::MaybeHandle<v8::internal::ScopeInfo>)",93957339097664,93957339101380],["v8::internal::Handle<v8::internal::ModuleRequest> v8::internal::ModuleRequest::New<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::FixedArray>, int)",93957339103072,93957339103358],["v8::internal::Handle<v8::internal::SourceTextModuleInfoEntry> v8::internal::SourceTextModuleInfoEntry::New<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::PrimitiveHeapObject>, v8::internal::Handle<v8::internal::PrimitiveHeapObject>, v8::internal::Handle<v8::internal::PrimitiveHeapObject>, int, int, int, int)",93957339103648,93957339104085],["v8_inspector::protocol::(anonymous namespace)::ValueParserHandler::HandleMapEnd()",93957342220960,93957342220979],["std::__1::__shared_ptr_emplace<std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >, std::__1::allocator<std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > > >::~__shared_ptr_emplace()",93957342225072,93957342225092],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8_inspector::String16, std::__1::unique_ptr<v8::Global<v8::Script>, std::__1::default_delete<v8::Global<v8::Script> > > >, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8_inspector::String16, std::__1::unique_ptr<v8::Global<v8::Script>, std::__1::default_delete<v8::Global<v8::Script> > > >, std::__1::__unordered_map_hasher<v8_inspector::String16, std::__1::__hash_value_type<v8_inspector::String16, std::__1::unique_ptr<v8::Global<v8::Script>, std::__1::default_delete<v8::Global<v8::Script> > > >, std::__1::hash<v8_inspector::String16>, std::__1::equal_to<v8_inspector::String16>, true>, std::__1::__unordered_map_equal<v8_inspector::String16, std::__1::__hash_value_type<v8_inspector::String16, std::__1::unique_ptr<v8::Global<v8::Script>, std::__1::default_delete<v8::Global<v8::Script> > > >, std::__1::equal_to<v8_inspector::String16>, std::__1::hash<v8_inspector::String16>, true>, std::__1::allocator<std::__1::__hash_value_type<v8_inspector::String16, std::__1::unique_ptr<v8::Global<v8::Script>, std::__1::default_delete<v8::Global<v8::Script> > > > > >::__emplace_unique_key_args<v8_inspector::String16, std::__1::piecewise_construct_t const&, std::__1::tuple<v8_inspector::String16 const&>, std::__1::tuple<> >(v8_inspector::String16 const&, std::__1::piecewise_construct_t const&, std::__1::tuple<v8_inspector::String16 const&>&&, std::__1::tuple<>&&)",93957342228304,93957342230285],["std::__1::__hash_const_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8_inspector::String16, std::__1::unique_ptr<v8_inspector::protocol::Value, std::__1::default_delete<v8_inspector::protocol::Value> > >, void*>*> std::__1::__hash_table<std::__1::__hash_value_type<v8_inspector::String16, std::__1::unique_ptr<v8_inspector::protocol::Value, std::__1::default_delete<v8_inspector::protocol::Value> > >, std::__1::__unordered_map_hasher<v8_inspector::String16, std::__1::__hash_value_type<v8_inspector::String16, std::__1::unique_ptr<v8_inspector::protocol::Value, std::__1::default_delete<v8_inspector::protocol::Value> > >, std::__1::hash<v8_inspector::String16>, std::__1::equal_to<v8_inspector::String16>, true>, std::__1::__unordered_map_equal<v8_inspector::String16, std::__1::__hash_value_type<v8_inspector::String16, std::__1::unique_ptr<v8_inspector::protocol::Value, std::__1::default_delete<v8_inspector::protocol::Value> > >, std::__1::equal_to<v8_inspector::String16>, std::__1::hash<v8_inspector::String16>, true>, std::__1::allocator<std::__1::__hash_value_type<v8_inspector::String16, std::__1::unique_ptr<v8_inspector::protocol::Value, std::__1::default_delete<v8_inspector::protocol::Value> > > > >::find<v8_inspector::String16>(v8_inspector::String16 const&) const",93957342232544,93957342233312],["v8_inspector::protocol::Console::Frontend::messageAdded(std::__1::unique_ptr<v8_inspector::protocol::Console::ConsoleMessage, std::__1::default_delete<v8_inspector::protocol::Console::ConsoleMessage> >)",93957342234368,93957342234509],["v8_inspector::protocol::Console::DomainDispatcherImpl::Dispatch(v8_crdtp::span<unsigned char>)",93957342234528,93957342234974],["v8_inspector::protocol::Console::DomainDispatcherImpl::disable(v8_crdtp::Dispatchable const&)",93957342235136,93957342235288],["v8_inspector::protocol::Console::Dispatcher::wire(v8_crdtp::UberDispatcher*, v8_inspector::protocol::Console::Backend*)",93957342235456,93957342235624],["__realpath_chk",139871564359072,139871564359092],["__wmemmove_chk",139871564359776,139871564359801],["__wcsncpy_chk",139871564359904,139871564359929],["__wcsncat_chk",139871564360048,139871564360317],["v8::internal::PerfJitLogger::LogRecordedBuffer(v8::internal::wasm::WasmCode const*, char const*, int)",93957336560800,93957336561220],["v8::internal::StackFrameIteratorBase::StackFrameIteratorBase(v8::internal::Isolate*, bool)",93957336567312,93957336568385],["v8::internal::StackFrame::ComputeType(v8::internal::StackFrameIteratorBase const*, v8::internal::StackFrame::State*)",93957336570176,93957336570619],["v8::internal::StackTraceFrameIterator::StackTraceFrameIterator(v8::internal::Isolate*)",93957336570992,93957336571090],["v8::internal::StackTraceFrameIterator::StackTraceFrameIterator(v8::internal::Isolate*, v8::internal::StackFrameId)",93957336571392,93957336572721],["v8::internal::SafeStackFrameIterator::IsNoFrameBytecodeHandlerPc(v8::internal::Isolate*, unsigned long, unsigned long) const",93957336572848,93957336573094],["v8::internal::(anonymous namespace)::IsInterpreterFramePc(v8::internal::Isolate*, unsigned long, v8::internal::StackFrame::State*)",93957336574160,93957336574690],["v8::internal::SafeStackFrameIterator::AdvanceOneFrame()",93957336574944,93957336575382],["v8::internal::FixedArrayBase::IsCowArray() const",93957339060208,93957339060242],["v8::internal::JSWeakCollection::GetEntries(v8::internal::Handle<v8::internal::JSWeakCollection>, int)",93957339068592,93957339069559],["void v8::internal::CallIterateBody::apply<v8::internal::DataHandler::BodyDescriptor, v8::internal::ObjectVisitor>(v8::internal::Map, v8::internal::HeapObject, int, v8::internal::ObjectVisitor*)",93957339074592,93957339074669],["v8::internal::OrderedHashTable<v8::internal::OrderedHashSet, 1>::Clear(v8::internal::Isolate*, v8::internal::Handle<v8::internal::OrderedHashSet>)",93957339075456,93957339075868],["v8::internal::OrderedHashTable<v8::internal::OrderedHashMap, 2>::Clear(v8::internal::Isolate*, v8::internal::Handle<v8::internal::OrderedHashMap>)",93957339077040,93957339077468],["v8::internal::OrderedHashTableIterator<v8::internal::JSMapIterator, v8::internal::OrderedHashMap>::HasMore()",93957339078384,93957339078744],["v8::internal::OrderedHashSet::Rehash(v8::internal::Isolate*, v8::internal::Handle<v8::internal::OrderedHashSet>)",93957339081088,93957339081107],["v8::internal::OSROptimizedCodeCache::AddOptimizedCode(v8::internal::Handle<v8::internal::NativeContext>, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::Code>, v8::internal::BytecodeOffset)",93957339082624,93957339082909],["v8::internal::OSROptimizedCodeCache::Clear(v8::internal::NativeContext)",93957339083568,93957339083721],["v8::internal::OSROptimizedCodeCache::MoveEntry(int, int, v8::internal::Isolate*)",93957339084304,93957339084929],["v8::internal::OSROptimizedCodeCache::ClearEntry(int, v8::internal::Isolate*)",93957339085184,93957339085636],["v8::internal::PropertyDescriptor::ToObject(v8::internal::Isolate*)",93957339085824,93957339087709],["v8::internal::PropertyDescriptor::ToPropertyDescriptor(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyDescriptor*)",93957339087984,93957339089720],["v8::internal::PropertyDescriptor::CompletePropertyDescriptor(v8::internal::Isolate*, v8::internal::PropertyDescriptor*)",93957339090000,93957339090135],["v8::internal::FieldIndex::ForDescriptor(v8::internal::IsolateRoot, v8::internal::Map, v8::internal::InternalIndex)",93957339090608,93957339090827],["v8::internal::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::PropertyConstness)",93957339090992,93957339091053],["v8_crdtp::ProtocolTypeTraits<std::__1::unique_ptr<v8_inspector::protocol::Value, std::__1::default_delete<v8_inspector::protocol::Value> >, void>::Deserialize(v8_crdtp::DeserializerState*, std::__1::unique_ptr<v8_inspector::protocol::Value, std::__1::default_delete<v8_inspector::protocol::Value> >*)",93957342218208,93957342220107],["v8_inspector::protocol::(anonymous namespace)::ValueParserHandler::HandleBinary(v8_crdtp::span<unsigned char>)",93957342221584,93957342221859],["v8_inspector::protocol::(anonymous namespace)::ValueParserHandler::AddStringToParent(v8_inspector::String16)",93957342222768,93957342224859],["std::__1::__shared_ptr_emplace<std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >, std::__1::allocator<std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > > >::__on_zero_shared()",93957342225152,93957342225180],["std::__1::__hash_iterator<std::__1::__hash_node<v8_inspector::String16, void*>*> std::__1::__hash_table<v8_inspector::String16, std::__1::hash<v8_inspector::String16>, std::__1::equal_to<v8_inspector::String16>, std::__1::allocator<v8_inspector::String16> >::find<v8_inspector::String16>(v8_inspector::String16 const&)",93957342227536,93957342228304],["std::__1::__hash_table<v8_inspector::String16, std::__1::hash<v8_inspector::String16>, std::__1::equal_to<v8_inspector::String16>, std::__1::allocator<v8_inspector::String16> >::rehash(unsigned long)",93957342230288,93957342230659],["void std::__1::vector<v8_inspector::String16, std::__1::allocator<v8_inspector::String16> >::__push_back_slow_path<v8_inspector::String16 const&>(v8_inspector::String16 const&)",93957342231536,93957342232542],["void std::__1::vector<std::__1::unique_ptr<v8_inspector::protocol::HeapProfiler::SamplingHeapProfileNode, std::__1::default_delete<v8_inspector::protocol::HeapProfiler::SamplingHeapProfileNode> >, std::__1::allocator<std::__1::unique_ptr<v8_inspector::protocol::HeapProfiler::SamplingHeapProfileNode, std::__1::default_delete<v8_inspector::protocol::HeapProfiler::SamplingHeapProfileNode> > > >::__emplace_back_slow_path<std::__1::unique_ptr<v8_inspector::protocol::HeapProfiler::SamplingHeapProfileNode, std::__1::default_delete<v8_inspector::protocol::HeapProfiler::SamplingHeapProfileNode> > >(std::__1::unique_ptr<v8_inspector::protocol::HeapProfiler::SamplingHeapProfileNode, std::__1::default_delete<v8_inspector::protocol::HeapProfiler::SamplingHeapProfileNode> >&&)",93957342233312,93957342234055],["__readlink_chk",139871564358976,139871564358992],["__fread_unlocked_chk",139871564359472,139871564359603],["__wmemcpy_chk",139871564359744,139871564359769],["__wmempcpy_chk",139871564359808,139871564359833],["v8::internal::DescriptorArray::PrintDescriptorDetails(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::InternalIndex, v8::internal::PropertyDetails::PrintMode)",93957336556096,93957336556426],["v8::internal::Execution::Call(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, int, v8::internal::Handle<v8::internal::Object>*)",93957336562208,93957336562487],["v8::internal::(anonymous namespace)::InvokeWithTryCatch(v8::internal::Isolate*, v8::internal::(anonymous namespace)::InvokeParams const&)",93957336566928,93957336567173],["v8::internal::StackFrameIterator::StackFrameIterator(v8::internal::Isolate*, v8::internal::ThreadLocalTop*)",93957336568448,93957336568486],["v8::internal::StackFrameIterator::Reframe()",93957336569680,93957336570166],["v8::internal::JavaScriptFrame::Iterate(v8::internal::RootVisitor*) const",93957336570624,93957336570877],["v8::internal::JavaScriptFrameIterator::Advance()",93957336570928,93957336570984],["v8::internal::StackTraceFrameIterator::IsValidFrame(v8::internal::StackFrame*) const",93957336571104,93957336571318],["v8::internal::Script::GetColumnNumber(v8::internal::Handle<v8::internal::Script>, int)",93957339058256,93957339058357],["v8::internal::JSPromise::Reject(v8::internal::Handle<v8::internal::JSPromise>, v8::internal::Handle<v8::internal::Object>, bool)",93957339063184,93957339063743],["v8::internal::JSMap::Clear(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSMap>)",93957339067056,93957339067284],["v8::internal::PropertyCell::InvalidateProtector()",93957339070672,93957339070742],["v8::internal::JSFinalizationRegistry::RemoveCellFromUnregisterTokenMap(v8::internal::Isolate*, unsigned long, unsigned long)",93957339071776,93957339072893],["v8::internal::JSWeakCollection::BodyDescriptorImpl::IsValidSlot(v8::internal::Map, v8::internal::HeapObject, int)",93957339074848,93957339074933],["v8::internal::MaybeHandle<v8::internal::OrderedHashSet> v8::internal::OrderedHashTable<v8::internal::OrderedHashSet, 1>::EnsureGrowable<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::OrderedHashSet>)",93957339075296,93957339075366],["v8::internal::OrderedHashTable<v8::internal::OrderedHashSet, 1>::FindEntry(v8::internal::Isolate*, v8::internal::Object)",93957339076112,93957339076611],["v8::internal::OrderedHashTable<v8::internal::OrderedHashMap, 2>::Shrink(v8::internal::Isolate*, v8::internal::Handle<v8::internal::OrderedHashMap>)",93957339076960,93957339077025],["v8::internal::MaybeHandle<v8::internal::OrderedHashMap> v8::internal::OrderedHashMap::Allocate<v8::internal::Isolate>(v8::internal::Isolate*, int, v8::internal::AllocationType)",93957339077472,93957339077701],["v8::internal::OrderedHashTableIterator<v8::internal::JSMapIterator, v8::internal::OrderedHashMap>::Transition()",93957339078064,93957339078372],["v8::internal::OrderedHashSet::Add(v8::internal::Isolate*, v8::internal::Handle<v8::internal::OrderedHashSet>, v8::internal::Handle<v8::internal::Object>)",93957339078752,93957339079364],["v8::internal::MaybeHandle<v8::internal::OrderedHashSet> v8::internal::OrderedHashTable<v8::internal::OrderedHashSet, 1>::Rehash<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::OrderedHashSet>, int)",93957339080016,93957339081079],["v8::internal::OrderedHashMap::Rehash(v8::internal::Isolate*, v8::internal::Handle<v8::internal::OrderedHashMap>)",93957339081120,93957339081139],["v8::internal::OrderedHashMap::GetHash(v8::internal::Isolate*, unsigned long)",93957339082544,93957339082616],["v8::internal::OSROptimizedCodeCache::GrowOSRCache(v8::internal::Handle<v8::internal::NativeContext>, v8::internal::Handle<v8::internal::OSROptimizedCodeCache>*)",93957339082912,93957339083196],["v8_inspector::protocol::DictionaryValue::clone() const",93957342216096,93957342216983],["v8_inspector::protocol::BinaryValue::~BinaryValue()",93957342220208,93957342220281],["v8_inspector::protocol::(anonymous namespace)::ValueParserHandler::HandleString8(v8_crdtp::span<unsigned char>)",93957342221456,93957342221517],["v8_inspector::protocol::(anonymous namespace)::ValueParserHandler::HandleInt32(int)",93957342222112,93957342222320],["v8_inspector::protocol::(anonymous namespace)::ValueParserHandler::HandleError(v8_crdtp::Status)",93957342222752,93957342222765],["v8_inspector::protocol::Binary::fromSpan(unsigned char const*, unsigned long)",93957342224864,93957342225059],["std::__1::__shared_ptr_emplace<std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >, std::__1::allocator<std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > > >::~__shared_ptr_emplace()",93957342225104,93957342225142],["std::__1::basic_string<unsigned short, std::__1::char_traits<unsigned short>, std::__1::allocator<unsigned short> >::operator=(std::__1::basic_string<unsigned short, std::__1::char_traits<unsigned short>, std::__1::allocator<unsigned short> > const&)",93957342225184,93957342226166],["__pread_chk",139871564358864,139871564358880],["__getwd_chk",139871564359008,139871564359050],["__fread_chk",139871564359104,139871564359472],["__wctomb_chk",139871564359616,139871564359667],["bool std::__1::__insertion_sort_incomplete<bool (*&)(v8::internal::GDBJITInterface::LineInfo::PCInfo const&, v8::internal::GDBJITInterface::LineInfo::PCInfo const&), v8::internal::GDBJITInterface::LineInfo::PCInfo*>(v8::internal::GDBJITInterface::LineInfo::PCInfo*, v8::internal::GDBJITInterface::LineInfo::PCInfo*, bool (*&)(v8::internal::GDBJITInterface::LineInfo::PCInfo const&, v8::internal::GDBJITInterface::LineInfo::PCInfo const&))",93957336550512,93957336551895],["v8::internal::PerfJitLogger::~PerfJitLogger()",93957336557408,93957336557436],["v8::internal::PerfJitLogger::CodeMoveEvent(v8::internal::AbstractCode, v8::internal::AbstractCode)",93957336562128,93957336562186],["v8::internal::Execution::CallBuiltin(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSFunction>, v8::internal::Handle<v8::internal::Object>, int, v8::internal::Handle<v8::internal::Object>*)",93957336566048,93957336566359],["v8::internal::Execution::TryCall(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, int, v8::internal::Handle<v8::internal::Object>*, v8::internal::Execution::MessageHandling, v8::internal::MaybeHandle<v8::internal::Object>*, bool)",93957336566624,93957336566924],["v8::internal::Execution::TryRunMicrotasks(v8::internal::Isolate*, v8::internal::MicrotaskQueue*, v8::internal::MaybeHandle<v8::internal::Object>*)",93957336567184,93957336567304],["v8::internal::StackFrameIterator::StackFrameIterator(v8::internal::Isolate*)",93957336568400,93957336568442],["v8::internal::StackFrameIterator::Reset(v8::internal::ThreadLocalTop*)",93957336568496,93957336569095],["v8::internal::DescriptorArray::UpdateNumberOfMarkedDescriptors(unsigned int, short)",93957339053504,93957339053610],["v8::internal::JSArray::SetLengthWouldNormalize(unsigned int)",93957339058816,93957339059002],["v8::internal::JSPromise::async_task_id() const",93957339060944,93957339060964],["v8::internal::StringSet::Has(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>)",93957339065392,93957339065742],["v8::internal::JSSet::Clear(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSSet>)",93957339066672,93957339066900],["v8::internal::JSWeakCollection::Set(v8::internal::Handle<v8::internal::JSWeakCollection>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, int)",93957339067536,93957339068076],["v8::internal::PropertyCell::InitialType(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)",93957339069968,93957339069994],["v8::internal::JSGeneratorObject::source_position() const",93957339070912,93957339071017],["v8::internal::Smi::LexicographicCompare(v8::internal::Isolate*, v8::internal::Smi, v8::internal::Smi)",93957339071408,93957339071772],["void v8::internal::BodyDescriptorApply<v8::internal::CallIterateBody, void, v8::internal::Map, v8::internal::HeapObject, int, v8::internal::ObjectVisitor*>(v8::internal::InstanceType, v8::internal::Map, v8::internal::HeapObject, int, v8::internal::ObjectVisitor*)",93957339072896,93957339074580],["v8::internal::WasmInstanceObject::BodyDescriptor::IsValidSlot(v8::internal::Map, v8::internal::HeapObject, int)",93957339074672,93957339074841],["v8::internal::JSArrayBuffer::BodyDescriptor::IsValidSlot(v8::internal::Map, v8::internal::HeapObject, int)",93957339074944,93957339075053],["v8::internal::JSTypedArray::BodyDescriptor::IsValidSlot(v8::internal::Map, v8::internal::HeapObject, int)",93957339075168,93957339075282],["v8::internal::OrderedHashTable<v8::internal::OrderedHashSet, 1>::Shrink(v8::internal::Isolate*, v8::internal::Handle<v8::internal::OrderedHashSet>)",93957339075376,93957339075441],["v8::internal::MaybeHandle<v8::internal::OrderedHashSet> v8::internal::OrderedHashSet::Allocate<v8::internal::Isolate>(v8::internal::Isolate*, int, v8::internal::AllocationType)",93957339075872,93957339076101],["v8::internal::OrderedHashTable<v8::internal::OrderedHashSet, 1>::Delete(v8::internal::Isolate*, v8::internal::OrderedHashSet, v8::internal::Object)",93957339076624,93957339076871],["v8_inspector::protocol::DictionaryValue::getObject(v8_inspector::String16 const&) const",93957342213200,93957342213243],["v8_inspector::protocol::ListValue::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342217312,93957342217807],["v8_inspector::protocol::StringValue::~StringValue()",93957342220128,93957342220160],["v8_inspector::protocol::(anonymous namespace)::ValueParserHandler::~ValueParserHandler()",93957342220368,93957342220468],["v8_inspector::protocol::(anonymous namespace)::ValueParserHandler::HandleArrayBegin()",93957342220992,93957342221453],["v8_inspector::protocol::(anonymous namespace)::ValueParserHandler::HandleString16(v8_crdtp::span<unsigned short>)",93957342221520,93957342221581],["v8_inspector::protocol::(anonymous namespace)::ValueParserHandler::HandleDouble(double)",93957342221872,93957342222105],["v8_inspector::protocol::(anonymous namespace)::ValueParserHandler::HandleBool(bool)",93957342222320,93957342222528],["__chk_fail",139871564357696,139871564357712],["__recv_chk",139871564358896,139871564358915],["__readlinkat_chk",139871564358992,139871564359008],["__getcwd_chk",139871564359056,139871564359072],["v8::internal::GDBJITInterface::DebugAbbrevSection::WriteBodyInternal(v8::internal::GDBJITInterface::Writer*)",93957336538928,93957336541802],["v8::internal::HeapNumber::HeapNumberShortPrint(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)",93957336553376,93957336553589],["v8::internal::PerfJitLogger::PerfJitLogger(v8::internal::Isolate*)",93957336556816,93957336557180],["v8::internal::PerfJitLogger::LogWriteDebugInfo(v8::internal::Handle<v8::internal::Code>, v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957336558288,93957336559770],["v8::internal::PerfJitLogger::LogWriteDebugInfo(v8::internal::wasm::WasmCode const*)",93957336561232,93957336562125],["v8::base::LazyInstanceImpl<v8::base::RecursiveMutex, v8::base::StaticallyAllocatedInstanceTrait<v8::base::RecursiveMutex>, v8::base::DefaultConstructTrait<v8::base::RecursiveMutex>, v8::base::ThreadSafeInitOnceTrait, v8::base::LeakyInstanceTrait<v8::base::RecursiveMutex> >::InitInstance(void*)",93957336562192,93957336562202],["v8::internal::(anonymous namespace)::Invoke(v8::internal::Isolate*, v8::internal::(anonymous namespace)::InvokeParams const&)",93957336562496,93957336566047],["v8::internal::Execution::New(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, int, v8::internal::Handle<v8::internal::Object>*)",93957336566368,93957336566488],["v8::internal::ArrayList::Elements(v8::internal::Isolate*, v8::internal::Handle<v8::internal::ArrayList>)",93957339048640,93957339048724],["v8::internal::JSArray::ArrayJoinConcatToSequentialString(v8::internal::Isolate*, unsigned long, long, unsigned long, unsigned long)",93957339054912,93957339056015],["v8::internal::Script::GetNameOrSourceURL()",93957339058576,93957339058617],["v8::internal::AllocationSite::IsNested()",93957339059728,93957339059826],["v8::internal::JSPromise::status() const",93957339060864,93957339060881],["v8::internal::JSPromise::Fulfill(v8::internal::Handle<v8::internal::JSPromise>, v8::internal::Handle<v8::internal::Object>)",93957339061008,93957339061323],["v8::internal::StringSet::New(v8::internal::Isolate*)",93957339064896,93957339065007],["v8::internal::SimpleNumberDictionary::Set(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SimpleNumberDictionary>, unsigned int, v8::internal::Handle<v8::internal::Object>)",93957339066240,93957339066253],["v8::internal::JSSet::Initialize(v8::internal::Handle<v8::internal::JSSet>, v8::internal::Isolate*)",93957339066528,93957339066665],["v8::internal::JSMap::Initialize(v8::internal::Handle<v8::internal::JSMap>, v8::internal::Isolate*)",93957339066912,93957339067049],["v8::internal::JSWeakCollection::Initialize(v8::internal::Handle<v8::internal::JSWeakCollection>, v8::internal::Isolate*)",93957339067296,93957339067533],["v8::internal::JSWeakCollection::Delete(v8::internal::Handle<v8::internal::JSWeakCollection>, v8::internal::Handle<v8::internal::Object>, int)",93957339068080,93957339068591],["v8::internal::PropertyCell::InvalidateAndReplaceEntry(v8::internal::Isolate*, v8::internal::Handle<v8::internal::GlobalDictionary>, v8::internal::InternalIndex, v8::internal::PropertyDetails, v8::internal::Handle<v8::internal::Object>)",93957339069568,93957339069965],["v8::internal::PropertyCell::PrepareForAndSetValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::GlobalDictionary>, v8::internal::InternalIndex, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyDetails)",93957339070000,93957339070664],["v8::internal::PropertyCell::CheckDataIsCompatible(v8::internal::PropertyDetails, v8::internal::Object)",93957339070752,93957339070899],["v8::internal::AccessCheckInfo::Get(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>)",93957339071024,93957339071256],["v8_inspector::protocol::DictionaryValue::setArray(v8_inspector::String16 const&, std::__1::unique_ptr<v8_inspector::protocol::ListValue, std::__1::default_delete<v8_inspector::protocol::ListValue> >)",93957342211344,93957342212079],["v8_inspector::protocol::DictionaryValue::doubleProperty(v8_inspector::String16 const&, double) const",93957342214656,93957342214734],["v8_inspector::protocol::ListValue::~ListValue()",93957342217056,93957342217172],["v8_inspector::protocol::ListValue::pushValue(std::__1::unique_ptr<v8_inspector::protocol::Value, std::__1::default_delete<v8_inspector::protocol::Value> >)",93957342218048,93957342218150],["v8_crdtp::ProtocolTypeTraits<std::__1::unique_ptr<v8_inspector::protocol::DictionaryValue, std::__1::default_delete<v8_inspector::protocol::DictionaryValue> >, void>::Serialize(std::__1::unique_ptr<v8_inspector::protocol::DictionaryValue, std::__1::default_delete<v8_inspector::protocol::DictionaryValue> > const&, std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*)",93957342220112,93957342220128],["v8_inspector::protocol::StringValue::~StringValue()",93957342220160,93957342220208],["v8_inspector::protocol::BinaryValue::~BinaryValue()",93957342220288,93957342220364],["v8_inspector::protocol::(anonymous namespace)::ValueParserHandler::HandleMapBegin()",93957342220480,93957342220959],["__fprintf_chk",139871564357008,139871564357196],["__fgets_unlocked_chk",139871564358624,139871564358791],["__pread64_chk",139871564358880,139871564358896],["__recvfrom_chk",139871564358928,139871564358965],["v8::internal::GDBJITInterface::ELF::Write(v8::internal::GDBJITInterface::Writer*)",93957336526912,93957336527153],["v8::internal::GDBJITInterface::DebugLineSection::ComparePCInfo(v8::internal::GDBJITInterface::LineInfo::PCInfo const&, v8::internal::GDBJITInterface::LineInfo::PCInfo const&)",93957336547024,93957336547059],["v8::internal::GDBJITInterface::ELF::WriteSectionTable(v8::internal::GDBJITInterface::Writer*)",93957336552240,93957336552956],["v8::internal::Map::MapPrint(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)",93957336553680,93957336555811],["v8::internal::PerfJitLogger::OpenJitDumpFile()",93957336556432,93957336556801],["v8::internal::PerfJitLogger::~PerfJitLogger()",93957336557184,93957336557405],["v8::internal::PerfJitLogger::LogRecordedBuffer(v8::internal::Handle<v8::internal::AbstractCode>, v8::internal::MaybeHandle<v8::internal::SharedFunctionInfo>, char const*, int)",93957336557440,93957336558279],["v8::internal::PerfJitLogger::LogWriteUnwindingInfo(v8::internal::Code)",93957336559776,93957336560790],["v8::internal::JSArray::ArraySetLength(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSArray>, v8::internal::PropertyDescriptor*, v8::Maybe<v8::internal::ShouldThrow>)",93957339041952,93957339042879],["v8::internal::PrototypeUsers::Add(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WeakArrayList>, v8::internal::Handle<v8::internal::Map>, int*)",93957339050896,93957339051851],["v8::internal::Name::ToFunctionName(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::String>)",93957339054528,93957339054690],["v8::internal::Script::GetPositionInfo(v8::internal::Handle<v8::internal::Script>, int, v8::internal::Script::PositionInfo*, v8::internal::Script::OffsetFlag)",93957339057072,93957339057172],["v8::internal::Script::GetLineNumber(v8::internal::Handle<v8::internal::Script>, int)",93957339058416,93957339058517],["v8::internal::Script::Iterator::Next()",93957339058656,93957339058770],["v8::internal::AllocationSite::ResetPretenureDecision()",93957339059648,93957339059684],["v8::internal::JSArray::MayHaveReadOnlyLength(v8::internal::Map)",93957339059888,93957339059933],["v8::internal::Symbol::PrivateSymbolToName() const",93957339060256,93957339060863],["v8::internal::JSPromise::Status(v8::Promise::PromiseState)",93957339060896,93957339060935],["v8::internal::JSPromise::set_async_task_id(int)",93957339060976,93957339061001],["v8::internal::JSPromise::TriggerPromiseReactions(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::PromiseReaction::Type)",93957339061328,93957339063174],["v8::internal::JSPromise::Resolve(v8::internal::Handle<v8::internal::JSPromise>, v8::internal::Handle<v8::internal::Object>)",93957339063744,93957339064881],["v8::internal::StringSet::Add(v8::internal::Isolate*, v8::internal::Handle<v8::internal::StringSet>, v8::internal::Handle<v8::internal::String>)",93957339065008,93957339065377],["v8::internal::ObjectHashSet::Add(v8::internal::Isolate*, v8::internal::Handle<v8::internal::ObjectHashSet>, v8::internal::Handle<v8::internal::Object>)",93957339065744,93957339066237],["v8::internal::NumberDictionary::UpdateMaxNumberKey(unsigned int, v8::internal::Handle<v8::internal::JSObject>)",93957339066256,93957339066372],["v8_inspector::protocol::StringValue::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342210080,93957342210141],["v8_inspector::protocol::DictionaryValue::getBoolean(v8_inspector::String16 const&, bool*) const",93957342212976,93957342213035],["v8_inspector::protocol::DictionaryValue::booleanProperty(v8_inspector::String16 const&, bool) const",93957342214528,93957342214584],["std::__1::__wrap_iter<v8_inspector::String16*> std::__1::remove<std::__1::__wrap_iter<v8_inspector::String16*>, v8_inspector::String16>(std::__1::__wrap_iter<v8_inspector::String16*>, std::__1::__wrap_iter<v8_inspector::String16*>, v8_inspector::String16 const&)",93957342214992,93957342215443],["v8_inspector::protocol::DictionaryValue::DictionaryValue()",93957342216992,93957342217045],["v8_inspector::protocol::ListValue::~ListValue()",93957342217184,93957342217297],["v8_inspector::protocol::ListValue::clone() const",93957342217808,93957342218038],["v8_inspector::protocol::ListValue::ListValue()",93957342218160,93957342218198],["__vsprintf_chk",139871564356496,139871564356540],["__vfprintf_chk",139871564357232,139871564357256],["__fgets_chk",139871564358240,139871564358611],["__read_chk",139871564358800,139871564358850],["v8::internal::GDBJITInterface::UnwindInfoSection::WriteFDEStateAfterRBPPush(v8::internal::GDBJITInterface::Writer*)",93957336520432,93957336520913],["v8::internal::GDBJITInterface::ELFSymbolTable::WriteBody(v8::internal::GDBJITInterface::Writer::Slot<v8::internal::GDBJITInterface::ELFSectionHeader>, v8::internal::GDBJITInterface::Writer*)",93957336527648,93957336528197],["v8::internal::GDBJITInterface::DebugLineSection::WriteBodyInternal(v8::internal::GDBJITInterface::Writer*)",93957336542640,93957336546710],["unsigned int std::__1::__sort4<bool (*&)(v8::internal::GDBJITInterface::LineInfo::PCInfo const&, v8::internal::GDBJITInterface::LineInfo::PCInfo const&), v8::internal::GDBJITInterface::LineInfo::PCInfo*>(v8::internal::GDBJITInterface::LineInfo::PCInfo*, v8::internal::GDBJITInterface::LineInfo::PCInfo*, v8::internal::GDBJITInterface::LineInfo::PCInfo*, v8::internal::GDBJITInterface::LineInfo::PCInfo*, bool (*&)(v8::internal::GDBJITInterface::LineInfo::PCInfo const&, v8::internal::GDBJITInterface::LineInfo::PCInfo const&))",93957336549376,93957336549981],["v8::internal::GDBJITInterface::ELF::WriteHeader(v8::internal::GDBJITInterface::Writer*)",93957336551904,93957336552233],["v8::base::TemplateHashMapImpl<void*, void*, v8::base::KeyEqualityMatcher<void*>, v8::base::DefaultAllocationPolicy>::Resize()",93957336552960,93957336553368],["v8::internal::Map::PrintMapDetails(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)",93957336553600,93957336553669],["v8::internal::DescriptorArray::PrintDescriptors(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)",93957336555824,93957336556085],["v8::internal::Object::WriteToReadOnlyProperty(v8::internal::LookupIterator*, v8::internal::Handle<v8::internal::Object>, v8::Maybe<v8::internal::ShouldThrow>)",93957339034176,93957339034375],["v8::internal::DescriptorArray::CopyUpToAddAttributes(v8::internal::Isolate*, v8::internal::Handle<v8::internal::DescriptorArray>, int, v8::internal::PropertyAttributes, int)",93957339046544,93957339046999],["v8::internal::WeakArrayList::Append(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WeakArrayList>, v8::internal::MaybeObjectHandle const&, v8::internal::AllocationType)",93957339049664,93957339050340],["v8::internal::DescriptorArray::Initialize(v8::internal::EnumCache, v8::internal::HeapObject, int, int)",93957339052944,93957339053017],["v8::internal::AccessorPair::GetComponent(v8::internal::Isolate*, v8::internal::Handle<v8::internal::NativeContext>, v8::internal::Handle<v8::internal::AccessorPair>, v8::internal::AccessorComponent)",93957339053920,93957339054181],["v8::internal::Relocatable::Iterate(v8::internal::RootVisitor*, char*)",93957339054768,93957339054839],["v8::internal::CacheInitialJSArrayMaps(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Context>, v8::internal::Handle<v8::internal::Map>)",93957339056032,93957339056719],["v8::internal::Script::IsUserJavaScript() const",93957339058064,93957339058085],["v8::internal::Script::GetColumnNumber(int) const",93957339058368,93957339058408],["v8::internal::Script::GetLineNumber(int) const",93957339058528,93957339058568],["v8::internal::Script::Iterator::Iterator(v8::internal::Isolate*)",93957339058624,93957339058647],["v8::internal::JSArray::Initialize(v8::internal::Handle<v8::internal::JSArray>, int, int)",93957339058784,93957339058812],["v8::internal::JSProxy::SetPrototype(v8::internal::Handle<v8::internal::JSProxy>, v8::internal::Handle<v8::internal::Object>, bool, v8::internal::ShouldThrow)",93957339059008,93957339059648],["v8::internal::AllocationSite::GetAllocationType() const",93957339059696,93957339059722],["v8::internal::AllocationSite::PretenureDecisionName(v8::internal::AllocationSite::PretenureDecision)",93957339059840,93957339059879],["v8::internal::JSArray::HasReadOnlyLength(v8::internal::Handle<v8::internal::JSArray>)",93957339059936,93957339060200],["v8_inspector::protocol::Value::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342209104,93957342209346],["v8_inspector::protocol::BinaryValue::clone() const",93957342210928,93957342210998],["v8_inspector::protocol::DictionaryValue::setDouble(v8_inspector::String16 const&, double)",93957342212160,93957342212241],["v8_inspector::protocol::DictionaryValue::getInteger(v8_inspector::String16 const&, int*) const",93957342213072,93957342213131],["v8_inspector::protocol::DictionaryValue::at(unsigned long) const",93957342213248,93957342214517],["v8_inspector::protocol::DictionaryValue::integerProperty(v8_inspector::String16 const&, int) const",93957342214592,93957342214648],["v8_inspector::protocol::DictionaryValue::remove(v8_inspector::String16 const&)",93957342214736,93957342214979],["v8_inspector::protocol::DictionaryValue::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342215456,93957342216094],["__strncat_chk",139871564355936,139871564356220],["__vsnprintf_chk",139871564356752,139871564356793],["__vprintf_chk",139871564357200,139871564357224],["__gets_chk",139871564357264,139871564357686],["v8::internal::EhFrameWriter::SetBaseAddressRegisterAndOffset(v8::internal::Register, int)",93957336514112,93957336514706],["v8::internal::GDBJITInterface::EventHandler(v8::JitCodeEvent const*)",93957336521936,93957336526476],["v8::internal::GDBJITInterface::ELFStringTable::WriteBody(v8::internal::GDBJITInterface::Writer::Slot<v8::internal::GDBJITInterface::ELFSectionHeader>, v8::internal::GDBJITInterface::Writer*)",93957336527456,93957336527488],["v8::internal::GDBJITInterface::ELFSymbolTable::WriteSymbolsList(v8::internal::ZoneChunkList<v8::internal::GDBJITInterface::ELFSymbol> const*, v8::internal::GDBJITInterface::Writer::Slot<v8::internal::GDBJITInterface::ELFSymbol::SerializedLayout>, v8::internal::GDBJITInterface::ELFStringTable*)",93957336528352,93957336528821],["v8::internal::GDBJITInterface::DebugAbbrevSection::WriteVariableAbbreviation(v8::internal::GDBJITInterface::Writer*, int, bool, bool)",93957336541808,93957336542633],["v8::internal::GDBJITInterface::DebugLineSection::WriteExtendedOpcode(v8::internal::GDBJITInterface::Writer*, v8::internal::GDBJITInterface::DebugLineSection::DWARF2ExtendedOpcode, unsigned long)",93957336546720,93957336547019],["void std::__1::__sort<bool (*&)(v8::internal::GDBJITInterface::LineInfo::PCInfo const&, v8::internal::GDBJITInterface::LineInfo::PCInfo const&), v8::internal::GDBJITInterface::LineInfo::PCInfo*>(v8::internal::GDBJITInterface::LineInfo::PCInfo*, v8::internal::GDBJITInterface::LineInfo::PCInfo*, bool (*&)(v8::internal::GDBJITInterface::LineInfo::PCInfo const&, v8::internal::GDBJITInterface::LineInfo::PCInfo const&))",93957336547072,93957336549361],["void std::__1::__insertion_sort_3<bool (*&)(v8::internal::GDBJITInterface::LineInfo::PCInfo const&, v8::internal::GDBJITInterface::LineInfo::PCInfo const&), v8::internal::GDBJITInterface::LineInfo::PCInfo*>(v8::internal::GDBJITInterface::LineInfo::PCInfo*, v8::internal::GDBJITInterface::LineInfo::PCInfo*, bool (*&)(v8::internal::GDBJITInterface::LineInfo::PCInfo const&, v8::internal::GDBJITInterface::LineInfo::PCInfo const&))",93957336549984,93957336550499],["bool v8::internal::BodyDescriptorApply<v8::internal::CallIsValidSlot, bool, v8::internal::Map, v8::internal::HeapObject, int, int>(v8::internal::InstanceType, v8::internal::Map, v8::internal::HeapObject, int, int)",93957339027696,93957339028430],["v8::internal::JSProxy::CheckHasTrap(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::JSReceiver>)",93957339038880,93957339039052],["v8::internal::JSProxy::SetPrivateSymbol(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSProxy>, v8::internal::Handle<v8::internal::Symbol>, v8::internal::PropertyDescriptor*, v8::Maybe<v8::internal::ShouldThrow>)",93957339044784,93957339045384],["v8::internal::FixedArray::Shrink(v8::internal::Isolate*, int)",93957339047792,93957339047831],["v8::internal::WeakArrayList::EnsureSpace(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WeakArrayList>, int, v8::internal::AllocationType)",93957339049056,93957339049120],["v8::internal::WeakArrayList::IsFull()",93957339050672,93957339050693],["v8::internal::PrototypeUsers::Compact(v8::internal::Handle<v8::internal::WeakArrayList>, v8::internal::Heap*, void (*)(v8::internal::HeapObject, int, int), v8::internal::AllocationType)",93957339052128,93957339052848],["v8::internal::DescriptorArray::Replace(v8::internal::InternalIndex, v8::internal::Descriptor*)",93957339053056,93957339053193],["v8::internal::AccessorPair::Copy(v8::internal::Isolate*, v8::internal::Handle<v8::internal::AccessorPair>)",93957339053616,93957339053907],["v8::internal::Name::ToFunctionName(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Name>)",93957339054192,93957339054519],["v8::internal::Relocatable::PostGarbageCollectionProcessing(v8::internal::Isolate*)",93957339054704,93957339054761],["v8::internal::Relocatable::Iterate(v8::internal::Isolate*, v8::internal::RootVisitor*)",93957339054848,93957339054906],["v8::internal::StringHasher::MakeArrayIndexHash(unsigned int, int)",93957339056016,93957339056032],["v8::internal::Script::GetEvalPosition(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Script>)",93957339056720,93957339057063],["v8::internal::Script::GetPositionInfo(int, v8::internal::Script::PositionInfo*, v8::internal::Script::OffsetFlag) const",93957339057184,93957339058064],["v8::internal::Script::ContainsAsmModule()",93957339058096,93957339058252],["v8::internal::TorqueGeneratedFactory<v8::internal::Factory>::NewUncompiledDataWithoutPreparseData(v8::internal::Handle<v8::internal::String>, int, int, v8::internal::AllocationType)",93957342206432,93957342206712],["v8_inspector::protocol::FundamentalValue::asInteger(int*) const",93957342209488,93957342209513],["v8_inspector::protocol::BinaryValue::asBinary(v8_inspector::protocol::Binary*) const",93957342210800,93957342210885],["v8_inspector::protocol::DictionaryValue::~DictionaryValue()",93957342211232,93957342211260],["v8_inspector::protocol::DictionaryValue::setInteger(v8_inspector::String16 const&, int)",93957342212080,93957342212154],["v8_inspector::protocol::DictionaryValue::setString(v8_inspector::String16 const&, v8_inspector::String16 const&)",93957342212256,93957342212973],["v8_inspector::protocol::DictionaryValue::get(v8_inspector::String16 const&) const",93957342213040,93957342213068],["v8_inspector::protocol::DictionaryValue::getString(v8_inspector::String16 const&, v8_inspector::String16*) const",93957342213136,93957342213195],["__cyg_profile_func_enter",139871564354912,139871564354913],["__stpncpy_chk",139871564356256,139871564356281],["__snprintf_chk",139871564356544,139871564356746],["__printf_chk",139871564356800,139871564356996],["v8::internal::EhFrameWriter::WriteCie()",93957336504176,93957336505985],["_ZNSt3__16vectorIhN2v88internal13ZoneAllocatorIhEEE6insertIPhEENS_9enable_ifIXaasr27__is_cpp17_forward_iteratorIT_EE5valuesr16is_constructibleIhNS_15iterator_traitsIS9_E9referenceEEE5valueENS_11__wrap_iterIS7_EEE4typeENSD_IPKhEES9_S9_",93957336516144,93957336518308],["v8::internal::GDBJITInterface::UnwindInfoSection::WriteFDEStateAfterRBPPop(v8::internal::GDBJITInterface::Writer*)",93957336521296,93957336521886],["v8::internal::GDBJITInterface::ELFSection::PopulateHeader(v8::internal::GDBJITInterface::Writer::Slot<v8::internal::GDBJITInterface::ELFSectionHeader>)",93957336526560,93957336526655],["v8::internal::ZoneChunkList<v8::internal::GDBJITInterface::ELFSection*>::push_back(v8::internal::GDBJITInterface::ELFSection* const&)",93957336527168,93957336527443],["v8::internal::GDBJITInterface::FullHeaderELFSection::PopulateHeader(v8::internal::GDBJITInterface::Writer::Slot<v8::internal::GDBJITInterface::ELFSectionHeader>)",93957336527488,93957336527635],["v8::internal::GDBJITInterface::ELFSymbolTable::PopulateHeader(v8::internal::GDBJITInterface::Writer::Slot<v8::internal::GDBJITInterface::ELFSectionHeader>)",93957336528208,93957336528345],["v8::internal::GDBJITInterface::DebugInfoSection::WriteBodyInternal(v8::internal::GDBJITInterface::Writer*)",93957336528832,93957336538928],["v8::internal::Object::IsCodeLike(v8::internal::Isolate*) const",93957339021040,93957339021114],["v8::internal::JSMap::Rehash(v8::internal::Isolate*)",93957339030672,93957339030952],["v8::internal::Object::SetSuperProperty(v8::internal::LookupIterator*, v8::internal::Handle<v8::internal::Object>, v8::internal::StoreOrigin, v8::Maybe<v8::internal::ShouldThrow>)",93957339036464,93957339037844],["v8::internal::JSProxy::GetPropertyAttributes(v8::internal::LookupIterator*)",93957339039968,93957339040151],["v8::internal::JSArray::SetLength(v8::internal::Handle<v8::internal::JSArray>, unsigned int)",93957339043584,93957339043697],["v8::internal::JSProxy::IsExtensible(v8::internal::Handle<v8::internal::JSProxy>)",93957339045968,93957339046520],["v8::internal::DescriptorArray::IsEqualUpTo(v8::internal::DescriptorArray, int)",93957339047344,93957339047469],["v8::internal::ArrayList::Add(v8::internal::Isolate*, v8::internal::Handle<v8::internal::ArrayList>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957339048144,93957339048577],["v8::internal::WeakArrayList::AddToEnd(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WeakArrayList>, v8::internal::MaybeObjectHandle const&)",93957339048736,93957339049041],["v8::internal::WeakArrayList::AddToEnd(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WeakArrayList>, v8::internal::MaybeObjectHandle const&, v8::internal::MaybeObjectHandle const&)",93957339049120,93957339049653],["v8::internal::WeakArrayList::Compact(v8::internal::Isolate*)",93957339050352,93957339050666],["v8::internal::WeakArrayList::CountLiveWeakReferences() const",93957339050704,93957339050889],["v8::internal::PrototypeUsers::ScanForEmptySlots(v8::internal::WeakArrayList)",93957339051856,93957339052119],["v8::internal::RegExpMatchInfo::ReserveCaptures(v8::internal::Isolate*, v8::internal::Handle<v8::internal::RegExpMatchInfo>, int)",93957339052848,93957339052931],["v8::internal::DescriptorArray::ClearEnumCache()",93957339053024,93957339053055],["v8::internal::DescriptorArray::InitializeOrChangeEnumCache(v8::internal::Handle<v8::internal::DescriptorArray>, v8::internal::Isolate*, v8::internal::Handle<v8::internal::FixedArray>, v8::internal::Handle<v8::internal::FixedArray>)",93957339053200,93957339053501],["cppgc::internal::Sweeper::FinishIfRunning()",93957342203280,93957342203294],["v8::internal::TorqueGeneratedFactory<v8::internal::Factory>::NewOnHeapBasicBlockProfilerData(v8::internal::Handle<v8::internal::ByteArray>, v8::internal::Handle<v8::internal::ByteArray>, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String>, int, v8::internal::AllocationType)",93957342207824,93957342208596],["v8_inspector::protocol::FundamentalValue::asBoolean(bool*) const",93957342209408,93957342209433],["v8_inspector::protocol::FundamentalValue::clone() const",93957342209856,93957342210027],["v8_inspector::protocol::StringValue::clone() const",93957342210144,93957342210793],["v8_inspector::protocol::BinaryValue::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342210896,93957342210923],["v8_inspector::protocol::DictionaryValue::~DictionaryValue()",93957342211008,93957342211218],["v8_inspector::protocol::DictionaryValue::setBoolean(v8_inspector::String16 const&, bool)",93957342211264,93957342211338],["argp_usage",139871564352736,139871564352756],["__strcat_chk",139871564355744,139871564355860],["__strncpy_chk",139871564356224,139871564356249],["__sprintf_chk",139871564356288,139871564356493],["v8::internal::CompilationStatistics::RecordTotalStats(v8::internal::CompilationStatistics::BasicStats const&)",93957336500560,93957336500723],["v8::internal::EhFrameWriter::WriteEhFrameHdr(int)",93957336507920,93957336510163],["v8::internal::EhFrameWriter::Finish(int)",93957336515856,93957336516100],["v8::internal::GDBJITInterface::UnwindInfoSection::WriteFDE(v8::internal::GDBJITInterface::Writer*, int)",93957336519008,93957336519737],["v8::internal::GDBJITInterface::UnwindInfoSection::WriteFDEStateAfterRBPSet(v8::internal::GDBJITInterface::Writer*)",93957336520928,93957336521281],["v8::internal::GDBJITInterface::UnwindInfoSection::WriteBodyInternal(v8::internal::GDBJITInterface::Writer*)",93957336521888,93957336521926],["v8::internal::GDBJITInterface::ELFSection::WriteBody(v8::internal::GDBJITInterface::Writer::Slot<v8::internal::GDBJITInterface::ELFSectionHeader>, v8::internal::GDBJITInterface::Writer*)",93957336526480,93957336526551],["v8::internal::GDBJITInterface::ELF::ELF(v8::internal::Zone*)",93957336526656,93957336526906],["v8::internal::FunctionTemplateInfo::IsTemplateFor(v8::internal::Map)",93957339014528,93957339014953],["v8::internal::ClassPositions::BriefPrintDetails(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)",93957339026032,93957339026122],["v8::internal::HeapObject::NeedsRehashing(v8::internal::InstanceType) const",93957339028912,93957339029026],["v8::internal::Object::SetProperty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>, v8::internal::StoreOrigin, v8::Maybe<v8::internal::ShouldThrow>)",93957339031712,93957339031955],["v8::internal::PropertyCell::ClearAndInvalidate(v8::internal::ReadOnlyRoots)",93957339034656,93957339034846],["v8::internal::AccessorInfo::AppendUnique(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::FixedArray>, int)",93957339037952,93957339038512],["v8::internal::JSProxy::CheckDeleteTrap(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::JSReceiver>)",93957339039616,93957339039788],["v8::internal::PropertyKeyToArrayLength(v8::internal::Handle<v8::internal::Object>, unsigned int*)",93957339041072,93957339041295],["v8::internal::JSArray::AnythingToArrayLength(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, unsigned int*)",93957339042880,93957339043582],["v8::internal::JSProxy::DefineOwnProperty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSProxy>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyDescriptor*, v8::Maybe<v8::internal::ShouldThrow>)",93957339043712,93957339044769],["v8::internal::JSProxy::PreventExtensions(v8::internal::Handle<v8::internal::JSProxy>, v8::internal::ShouldThrow)",93957339045392,93957339045954],["v8::internal::DescriptorArray::CopyUpTo(v8::internal::Isolate*, v8::internal::Handle<v8::internal::DescriptorArray>, int, int)",93957339046528,93957339046543],["v8::internal::DescriptorArray::CopyForFastObjectClone(v8::internal::Isolate*, v8::internal::Handle<v8::internal::DescriptorArray>, int, int)",93957339047008,93957339047330],["v8::internal::FixedArray::CopyTo(int, v8::internal::FixedArray, int, int) const",93957339047472,93957339047780],["v8::internal::ArrayList::Add(v8::internal::Isolate*, v8::internal::Handle<v8::internal::ArrayList>, v8::internal::Handle<v8::internal::Object>)",93957339047840,93957339048140],["v8::internal::ArrayList::New(v8::internal::Isolate*, int)",93957339048592,93957339048640],["cppgc::internal::PersistentRegion::Trace(cppgc::Visitor*)",93957342200912,93957342201332],["cppgc::internal::(anonymous namespace)::ThreadSafeStack<cppgc::internal::(anonymous namespace)::SpaceState::SweptPageState>::Pop()",93957342204848,93957342205338],["v8::internal::TorqueGeneratedFactory<v8::internal::Factory>::NewUncompiledDataWithPreparseData(v8::internal::Handle<v8::internal::String>, int, int, v8::internal::Handle<v8::internal::PreparseData>, v8::internal::AllocationType)",93957342207008,93957342207406],["v8_inspector::protocol::Value::parseBinary(unsigned char const*, unsigned long)",93957342208816,93957342208989],["v8_inspector::protocol::Value::clone() const",93957342209360,93957342209393],["v8_inspector::protocol::FundamentalValue::asDouble(double*) const",93957342209440,93957342209487],["v8_inspector::protocol::FundamentalValue::AppendSerialized(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*) const",93957342209520,93957342209849],["v8_inspector::protocol::StringValue::asString(v8_inspector::String16*) const",93957342210032,93957342210072],["argp_help",139871564346464,139871564346479],["__backtrace_symbols",139871564353392,139871564354118],["__stpcpy_chk",139871564355664,139871564355733],["__strcpy_chk",139871564355872,139871564355922],["v8::internal::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::BasicBlockProfilerData const&)",93957336493328,93957336494646],["std::__1::pair<std::__1::__tree_iterator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::internal::CompilationStatistics::OrderedStats>, std::__1::__tree_node<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::internal::CompilationStatistics::OrderedStats>, void*>*, long>, bool> std::__1::__tree<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::internal::CompilationStatistics::OrderedStats>, std::__1::__map_value_compare<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::internal::CompilationStatistics::OrderedStats>, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::allocator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::internal::CompilationStatistics::OrderedStats> > >::__emplace_unique_key_args<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::internal::CompilationStatistics::OrderedStats> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::internal::CompilationStatistics::OrderedStats>&&)",93957336503040,93957336503533],["v8::internal::EhFrameWriter::WriteSLeb128(int)",93957336506624,93957336507267],["v8::internal::EhFrameWriter::SetBaseAddressOffset(int)",93957336512976,93957336513516],["v8::internal::EhFrameWriter::RecordRegisterSavedToStack(int, int)",93957336514720,93957336515844],["v8::internal::EhFrameWriter::GetEhFrame(v8::internal::CodeDesc*)",93957336516112,93957336516135],["v8::internal::GDBJITInterface::UnwindInfoSection::WriteCIE(v8::internal::GDBJITInterface::Writer*)",93957336518320,93957336519006],["v8::internal::GDBJITInterface::UnwindInfoSection::WriteFDEStateOnEntry(v8::internal::GDBJITInterface::Writer*)",93957336519744,93957336520417],["v8::internal::Object::StrictEquals(v8::internal::Object)",93957339005328,93957339005653],["v8::internal::AccessorInfo::redirected_getter() const",93957339017056,93957339017133],["v8::internal::Object::ShortPrint(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) const",93957339021904,93957339021940],["v8::internal::HeapObject::Iterate(v8::internal::ObjectVisitor*)",93957339026704,93957339026816],["v8::internal::WasmArray::GcSafeSizeFor(v8::internal::Map, int)",93957339028688,93957339028759],["v8::internal::HeapObject::RehashBasedOnMap(v8::internal::Isolate*)",93957339029152,93957339029476],["v8::internal::HeapObject::IsExternal(v8::internal::Isolate*) const",93957339031248,93957339031308],["v8::internal::Object::SetPropertyInternal(v8::internal::LookupIterator*, v8::internal::Handle<v8::internal::Object>, v8::Maybe<v8::internal::ShouldThrow>, v8::internal::StoreOrigin, bool*)",93957339032256,93957339033280],["v8::internal::Object::SetDataProperty(v8::internal::LookupIterator*, v8::internal::Handle<v8::internal::Object>)",93957339034384,93957339034646],["v8::internal::Object::AddDataProperty(v8::internal::LookupIterator*, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes, v8::Maybe<v8::internal::ShouldThrow>, v8::internal::StoreOrigin)",93957339034848,93957339036457],["v8::internal::Object::RedefineIncompatibleProperty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::Maybe<v8::internal::ShouldThrow>)",93957339037856,93957339037941],["v8::internal::JSProxy::IsArray(v8::internal::Handle<v8::internal::JSProxy>)",93957339038512,93957339038871],["v8::internal::JSProxy::DeletePropertyOrElement(v8::internal::Handle<v8::internal::JSProxy>, v8::internal::Handle<v8::internal::Name>, v8::internal::LanguageMode)",93957339039056,93957339039608],["v8::internal::JSProxy::GetFunctionRealm(v8::internal::Handle<v8::internal::JSProxy>)",93957339039792,93957339039967],["v8::internal::JSProxy::GetOwnPropertyDescriptor(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSProxy>, v8::internal::Handle<v8::internal::Name>, v8::internal::PropertyDescriptor*)",93957339040160,93957339041070],["v8::internal::JSArray::DefineOwnProperty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSArray>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyDescriptor*, v8::Maybe<v8::internal::ShouldThrow>)",93957339041296,93957339041952],["cppgc::internal::NormalPage::PayloadStart()",93957342199488,93957342199505],["cppgc::SourceLocation::ToString() const",93957342201824,93957342202368],["cppgc::internal::Sweeper::SweeperImpl::Finish()",93957342203600,93957342203922],["heap::base::internal::SegmentBase::GetSentinelSegmentAddress()",93957342205952,93957342206022],["v8::internal::TorqueGeneratedFactory<v8::internal::LocalFactory>::NewUncompiledDataWithoutPreparseData(v8::internal::Handle<v8::internal::String>, int, int, v8::internal::AllocationType)",93957342206720,93957342207002],["v8::internal::TorqueGeneratedFactory<v8::internal::LocalFactory>::NewUncompiledDataWithPreparseData(v8::internal::Handle<v8::internal::String>, int, int, v8::internal::Handle<v8::internal::PreparseData>, v8::internal::AllocationType)",93957342207408,93957342207809],["v8::bigint::Compare(v8::bigint::Digits, v8::bigint::Digits)",93957342208608,93957342208809],["v8_inspector::protocol::(anonymous namespace)::ValueParserHandler::~ValueParserHandler()",93957342208992,93957342209091],["_nss_files_parse_sgent",139871564328800,139871564329656],["argp_error",139871564346896,139871564347075],["__backtrace",139871564353152,139871564353382],["__backtrace_symbols_fd",139871564354128,139871564354903],["v8::internal::BasicBlockProfilerData::SetSchedule(std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)",93957336489568,93957336489638],["unsigned int std::__1::__sort5<v8::internal::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::BasicBlockProfilerData const&)::$_1&, std::__1::pair<unsigned long, unsigned int>*>(std::__1::pair<unsigned long, unsigned int>*, std::__1::pair<unsigned long, unsigned int>*, std::__1::pair<unsigned long, unsigned int>*, std::__1::pair<unsigned long, unsigned int>*, std::__1::pair<unsigned long, unsigned int>*, v8::internal::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::BasicBlockProfilerData const&)::$_1&)",93957336497808,93957336498328],["v8::internal::WriteLine(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, bool, char const*, v8::internal::CompilationStatistics::BasicStats const&, v8::internal::CompilationStatistics::BasicStats const&)",93957336502000,93957336502496],["v8::internal::EhFrameWriter::EhFrameWriter(v8::internal::Zone*)",93957336503664,93957336503706],["v8::internal::EhFrameWriter::WriteFdeHeader()",93957336506000,93957336506622],["v8::internal::EhFrameWriter::WriteULeb128(unsigned int)",93957336507280,93957336507905],["v8::internal::EhFrameWriter::AdvanceLocation(int)",93957336510176,93957336512962],["v8::internal::EhFrameWriter::SetBaseAddressRegister(v8::internal::Register)",93957336513520,93957336514105],["v8::internal::Object::ConvertToUint32(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)",93957338994448,93957338994890],["v8::internal::Object::GetProperty(v8::internal::LookupIterator*, bool)",93957339010000,93957339010493],["v8::internal::FixedArray::SetAndGrow(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FixedArray>, int, v8::internal::Handle<v8::internal::Object>)",93957339015216,93957339015698],["v8::internal::Object::GetPrototypeChainRootMap(v8::internal::Isolate*) const",93957339018544,93957339018652],["v8::internal::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::Brief const&)",93957339021264,93957339021407],["v8::internal::HeapObject::HeapObjectShortPrint(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)",93957339022000,93957339025939],["v8::internal::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::ScopeType)",93957339026272,93957339026462],["v8::internal::HeapObject::IterateBody(v8::internal::Map, int, v8::internal::ObjectVisitor*)",93957339027632,93957339027657],["v8::internal::TorqueGeneratedScopeInfo<v8::internal::ScopeInfo, v8::internal::HeapObject>::AllocatedSize() const",93957339028432,93957339028686],["v8::internal::HeapObject::NeedsRehashing() const",93957339028768,93957339028900],["v8::internal::HeapObject::CanBeRehashed() const",93957339029040,93957339029148],["v8::internal::DescriptorArray::Sort()",93957339029488,93957339030663],["v8::internal::JSSet::Rehash(v8::internal::Isolate*)",93957339030960,93957339031240],["v8::internal::DescriptorArray::GeneralizeAllFields()",93957339031312,93957339031699],["v8::internal::Object::SetProperty(v8::internal::LookupIterator*, v8::internal::Handle<v8::internal::Object>, v8::internal::StoreOrigin, v8::Maybe<v8::internal::ShouldThrow>)",93957339031968,93957339032253],["v8::internal::JSProxy::SetProperty(v8::internal::Handle<v8::internal::JSProxy>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::Maybe<v8::internal::ShouldThrow>)",93957339033280,93957339034170],["cppgc::internal::FreeList::FreeList(cppgc::internal::FreeList&&)",93957342198736,93957342198816],["cppgc::internal::BaseSpace::AddPage(cppgc::internal::BasePage*)",93957342199632,93957342199913],["cppgc::internal::PersistentRegionLock::~PersistentRegionLock()",93957342201504,93957342201650],["cppgc::internal::StatsCollector::NotifyFreedMemory(long)",93957342203104,93957342203168],["cppgc::internal::Sweeper::SweeperImpl::FinishIfRunning()",93957342203296,93957342203595],["cppgc::internal::(anonymous namespace)::SweepFinalizer::FinalizeHeap(std::__1::vector<cppgc::internal::(anonymous namespace)::SpaceState, std::__1::allocator<cppgc::internal::(anonymous namespace)::SpaceState> >*)",93957342203936,93957342204845],["cppgc::internal::HeapVisitor<cppgc::internal::(anonymous namespace)::MutatorThreadSweeper>::Traverse(cppgc::internal::BasePage*)",93957342205344,93957342205951],["v8::internal::TorqueGeneratedFactory<v8::internal::Factory>::NewSloppyArgumentsElements(int, v8::internal::Handle<v8::internal::Context>, v8::internal::Handle<v8::internal::FixedArray>, v8::internal::AllocationType)",93957342206032,93957342206425],["setsgent",139871564327248,139871564327450],["fgetsgent_r",139871564329840,139871564330500],["argp_state_help",139871564346480,139871564346629],["argp_parse",139871564348544,139871564352669],["v8::internal::TranslationArrayBuilder::StoreLiteral(int)",93957336484048,93957336485318],["v8::internal::BasicBlockProfilerData::CopyToJSHeap(v8::internal::Isolate*)",93957336490944,93957336491496],["void std::__1::__sort<v8::internal::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::BasicBlockProfilerData const&)::$_1&, std::__1::pair<unsigned long, unsigned int>*>(std::__1::pair<unsigned long, unsigned int>*, std::__1::pair<unsigned long, unsigned int>*, v8::internal::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::BasicBlockProfilerData const&)::$_1&)",93957336495952,93957336497532],["v8::internal::CompilationStatistics::RecordPhaseStats(char const*, char const*, v8::internal::CompilationStatistics::BasicStats const&)",93957336498960,93957336499915],["v8::internal::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::AsPrintableStatistics const&)",93957336500736,93957336502000],["std::__1::pair<std::__1::__tree_iterator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::internal::CompilationStatistics::PhaseStats>, std::__1::__tree_node<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::internal::CompilationStatistics::PhaseStats>, void*>*, long>, bool> std::__1::__tree<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::internal::CompilationStatistics::PhaseStats>, std::__1::__map_value_compare<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::internal::CompilationStatistics::PhaseStats>, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::allocator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::internal::CompilationStatistics::PhaseStats> > >::__emplace_unique_key_args<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::internal::CompilationStatistics::PhaseStats> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::internal::CompilationStatistics::PhaseStats>&&)",93957336502496,93957336503025],["v8::internal::EhFrameWriter::WriteEmptyEhFrame(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)",93957336503536,93957336503661],["v8::internal::EhFrameWriter::Initialize()",93957336503712,93957336504165],["v8::internal::Handle<v8::internal::GlobalDictionary> v8::internal::Dictionary<v8::internal::GlobalDictionary, v8::internal::GlobalDictionaryShape>::Add<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::GlobalDictionary>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyDetails, v8::internal::InternalIndex*)",93957338987712,93957338987961],["v8::internal::Isolate::error_to_string()",93957339000288,93957339000402],["v8::internal::Object::InstanceOf(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957339007504,93957339007792],["v8::internal::JSProxy::CheckGetSetTrapResult(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::Object>, v8::internal::JSProxy::AccessKind)",93957339013216,93957339013551],["v8::internal::TemplateList::New(v8::internal::Isolate*, int)",93957339015136,93957339015159],["v8::internal::JSReceiver::GetPrototype(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>)",93957339016512,93957339016691],["v8::internal::AccessorInfo::IsCompatibleReceiverMap(v8::internal::Handle<v8::internal::AccessorInfo>, v8::internal::Handle<v8::internal::Map>)",93957339017216,93957339017321],["v8::internal::Object::ArraySpeciesConstructor(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)",93957339019040,93957339020406],["v8::internal::Object::ShortPrint(_IO_FILE*) const",93957339021120,93957339021253],["v8::internal::Object::ShortPrint(v8::internal::StringStream*) const",93957339021408,93957339021889],["v8::internal::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::Object const&)",93957339021952,93957339021987],["v8::internal::CallableTask::BriefPrintDetails(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)",93957339025952,93957339026029],["v8::internal::Tuple2::BriefPrintDetails(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)",93957339026128,93957339026267],["v8::internal::Symbol::SymbolShortPrint(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)",93957339026464,93957339026698],["v8::internal::HeapObject::SizeFromMap(v8::internal::Map) const",93957339026816,93957339027621],["v8::internal::HeapObject::IsValidSlot(v8::internal::Map, int)",93957339027664,93957339027689],["v8::internal::trap_handler::RegisterDefaultTrapHandler()",93957342197776,93957342197899],["cppgc::internal::HeapObjectHeader::GetName() const",93957342199184,93957342199220],["cppgc::internal::NormalPage::begin()",93957342199552,93957342199612],["cppgc::internal::PageBackend::FreeNormalPageMemory(unsigned long, unsigned char*)",93957342200176,93957342200423],["cppgc::internal::PersistentRegionLock::PersistentRegionLock()",93957342201344,93957342201490],["cppgc::internal::CrossThreadPersistentRegion::Trace(cppgc::Visitor*)",93957342201664,93957342201816],["cppgc::internal::StatsCollector::NotifySweepingCompleted()",93957342202368,93957342203092],["cppgc::internal::StatsCollector::RecordHistogramSample(cppgc::internal::StatsCollector::ScopeId, v8::base::TimeDelta)",93957342203168,93957342203268],["getsgnam",139871564325072,139871564325510],["getsgent_r",139871564327680,139871564327938],["sgetsgent_r",139871564329664,139871564329832],["argp_failure",139871564341120,139871564341290],["v8::internal::TranslationArrayBuilder::StoreDoubleRegister(v8::internal::XMMRegister)",93957336473808,93957336475078],["void std::__1::__function::__policy_invoker<void (unsigned char)>::__call_impl<std::__1::__function::__default_alloc_func<v8::base::VLQEncode<v8::internal::ZoneAllocator<unsigned char> >(std::__1::vector<unsigned char, v8::internal::ZoneAllocator<unsigned char> >*, int)::{lambda(unsigned char)#1}, void (unsigned char)> >(std::__1::__function::__policy_storage const*, unsigned char)",93957336488512,93957336489026],["v8::internal::BasicBlockProfiler::NewData(unsigned long)",93957336489664,93957336489937],["v8::internal::BasicBlockProfiler::HasData(v8::internal::Isolate*)",93957336492016,93957336492059],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, void*>*>, bool> std::__1::__hash_table<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::__emplace_unique_key_args<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)",93957336494656,93957336495952],["unsigned int std::__1::__sort3<v8::internal::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::BasicBlockProfilerData const&)::$_1&, std::__1::pair<unsigned long, unsigned int>*>(std::__1::pair<unsigned long, unsigned int>*, std::__1::pair<unsigned long, unsigned int>*, std::__1::pair<unsigned long, unsigned int>*, v8::internal::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::BasicBlockProfilerData const&)::$_1&)",93957336497536,93957336497799],["bool std::__1::__insertion_sort_incomplete<v8::internal::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::BasicBlockProfilerData const&)::$_1&, std::__1::pair<unsigned long, unsigned int>*>(std::__1::pair<unsigned long, unsigned int>*, std::__1::pair<unsigned long, unsigned int>*, v8::internal::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::BasicBlockProfilerData const&)::$_1&)",93957336498336,93957336498951],["v8::internal::CompilationStatistics::RecordPhaseKindStats(char const*, v8::internal::CompilationStatistics::BasicStats const&)",93957336499920,93957336500557],["v8::internal::BaseNameDictionary<v8::internal::NameDictionary, v8::internal::NameDictionaryShape>::IterationIndices(v8::internal::Isolate*, v8::internal::Handle<v8::internal::NameDictionary>)",93957338983776,93957338984033],["v8::internal::Object::NewStorageFor(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Representation)",93957338992176,93957338992321],["v8::internal::Object::NoSideEffectsToString(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)",93957338995792,93957338999887],["v8::internal::Object::ConvertToIndex(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::MessageTemplate)",93957339002032,93957339002558],["v8::internal::Object::Add(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957339005952,93957339006835],["v8::internal::Object::CreateListFromArrayLike(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::ElementTypes)",93957339008176,93957339009660],["v8::internal::JSProxy::GetProperty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSProxy>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>, bool*)",93957339011024,93957339011830],["v8::internal::Object::ToInt32(int*)",93957339013952,93957339014057],["v8::internal::FunctionTemplateInfo::AllocateFunctionTemplateRareData(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FunctionTemplateInfo>)",93957339014960,93957339015124],["v8::internal::TemplateList::Add(v8::internal::Isolate*, v8::internal::Handle<v8::internal::TemplateList>, v8::internal::Handle<v8::internal::Object>)",93957339015168,93957339015212],["v8::internal::JSProxy::GetPrototype(v8::internal::Handle<v8::internal::JSProxy>)",93957339015712,93957339016508],["v8::internal::PropertyCallbackArguments::CallAccessorGetter(v8::internal::Handle<v8::internal::AccessorInfo>, v8::internal::Handle<v8::internal::Name>)",93957339016704,93957339017049],["v8::internal::CallHandlerInfo::redirected_callback() const",93957339017136,93957339017204],["v8::internal::Object::SetPropertyWithAccessor(v8::internal::LookupIterator*, v8::internal::Handle<v8::internal::Object>, v8::Maybe<v8::internal::ShouldThrow>)",93957339017328,93957339018529],["v8::internal::Object::SameValueZero(v8::internal::Object)",93957339018656,93957339019029],["v8::internal::Object::SpeciesConstructor(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::JSFunction>)",93957339020416,93957339021038],["v8::internal::RegExpMacroAssemblerX64::WriteCurrentPositionToRegister(int, int)",93957342195600,93957342195938],["v8::internal::BuildSpecialAddSet()",93957342198384,93957342198559],["cppgc::internal::FreeList::Add(cppgc::internal::FreeList::Block)",93957342198976,93957342199128],["cppgc::internal::LargePage::Destroy(cppgc::internal::LargePage*)",93957342199360,93957342199409],["cppgc::internal::NormalPage::PayloadEnd()",93957342199520,93957342199543],["cppgc::internal::LargePage::ObjectHeader()",93957342199616,93957342199630],["cppgc::internal::NormalPageMemoryRegion::Free(unsigned char*)",93957342199920,93957342200171],["cppgc::internal::PageBackend::FreeLargePageMemory(unsigned char*)",93957342200432,93957342200910],["fgetspent_r",139871564323264,139871564323908],["fgetsgent",139871564326016,139871564326537],["endsgent",139871564327456,139871564327678],["getsgnam_r",139871564327952,139871564328785],["v8::internal::TranslationArrayBuilder::BeginCapturedObject(int)",93957336463568,93957336464838],["v8::internal::TranslationArrayBuilder::StoreUint32StackSlot(int)",93957336478928,93957336480198],["v8::internal::TranslationArrayBuilder::StoreJSFrameFunction()",93957336487872,93957336487887],["v8::internal::BasicBlockProfiler::Get()",93957336489376,93957336489508],["v8::internal::BasicBlockProfilerData::SetBlockId(unsigned long, int)",93957336489648,93957336489660],["v8::internal::BasicBlockProfilerData::CopyFromJSHeap(v8::internal::OnHeapBasicBlockProfilerData)",93957336489952,93957336490935],["v8::internal::BasicBlockProfiler::ResetCounts(v8::internal::Isolate*)",93957336491504,93957336492016],["v8::internal::BasicBlockProfiler::Print(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::Isolate*)",93957336492064,93957336493314],["v8::internal::Handle<v8::internal::NumberDictionary> v8::internal::Dictionary<v8::internal::NumberDictionary, v8::internal::NumberDictionaryShape>::Add<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::NumberDictionary>, unsigned int, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyDetails, v8::internal::InternalIndex*)",93957338976720,93957338977185],["v8::internal::HashTable<v8::internal::GlobalDictionary, v8::internal::GlobalDictionaryShape>::Shrink(v8::internal::Isolate*, v8::internal::Handle<v8::internal::GlobalDictionary>, int)",93957338985536,93957338985782],["v8::internal::GetShouldThrow(v8::internal::Isolate*, v8::Maybe<v8::internal::ShouldThrow>)",93957338988672,93957338988985],["v8::internal::Object::ConvertToNumberOrNumeric(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Object::Conversion)",93957338993136,93957338993488],["v8::internal::Object::ConvertToPropertyKey(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)",93957338995040,93957338995420],["v8::internal::JSReceiver::GetDataProperty(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::Name>)",93957338999952,93957339000190],["v8::internal::Isolate::object_to_string()",93957339001440,93957339001554],["v8::internal::Object::Compare(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957339002752,93957339003566],["v8::internal::Object::TypeOf(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)",93957339005664,93957339005946],["v8::internal::Object::OrdinaryHasInstance(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957339006848,93957339007501],["v8::internal::Object::GetMethod(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::Name>)",93957339007792,93957339008164],["v8::internal::Object::GetLengthFromArrayLike(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>)",93957339009664,93957339010000],["v8::internal::JSProxy::HasProperty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSProxy>, v8::internal::Handle<v8::internal::Name>)",93957339010496,93957339011018],["v8::internal::Object::GetPropertyWithAccessor(v8::internal::LookupIterator*)",93957339011840,93957339013206],["v8::internal::Object::SameValue(v8::internal::Object)",93957339013552,93957339013947],["v8::internal::FunctionTemplateInfo::GetOrCreateSharedFunctionInfo(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FunctionTemplateInfo>, v8::internal::MaybeHandle<v8::internal::Name>)",93957339014064,93957339014513],["v8::internal::RegExpMacroAssemblerX64::PushBacktrack(v8::internal::Label*)",93957342194336,93957342194555],["v8::internal::RegExpMacroAssemblerX64::CheckPosition(int, v8::internal::Label*)",93957342196480,93957342196755],["v8::internal::BuildIgnoreSet()",93957342197952,93957342198233],["v8::base::LazyInstanceImpl<v8::internal::IgnoreSetData, v8::base::StaticallyAllocatedInstanceTrait<v8::internal::IgnoreSetData>, v8::base::DefaultConstructTrait<v8::internal::IgnoreSetData>, v8::base::ThreadSafeInitOnceTrait, v8::base::LeakyInstanceTrait<v8::internal::IgnoreSetData> >::InitInstance(void*)",93957342198704,93957342198715],["cppgc::internal::FreeList::Append(cppgc::internal::FreeList&&)",93957342198816,93957342198965],["cppgc::internal::HeapObjectHeader::Finalize()",93957342199136,93957342199181],["cppgc::internal::BasePage::Destroy(cppgc::internal::BasePage*)",93957342199232,93957342199346],["cppgc::internal::NormalPage::Destroy(cppgc::internal::NormalPage*)",93957342199424,93957342199487],["getspent_r",139871564320960,139871564321218],["ulckpwdf",139871564324688,139871564324868],["sgetsgent",139871564325520,139871564326011],["putsgent",139871564326544,139871564327240],["v8::internal::TranslationArrayBuilder::BeginJSToWasmBuiltinContinuationFrame(v8::internal::BytecodeOffset, int, unsigned int, v8::base::Optional<v8::internal::wasm::ValueKind>)",93957336436848,93957336441960],["v8::internal::TranslationArrayBuilder::StoreInt64Register(v8::internal::Register)",93957336468688,93957336469958],["v8::internal::TranslationArrayBuilder::StoreInt32StackSlot(int)",93957336476368,93957336477638],["v8::internal::TranslationArrayBuilder::StoreFloatStackSlot(int)",93957336481488,93957336482758],["v8::internal::TranslationArrayBuilder::AddUpdateFeedback(int, int)",93957336485328,93957336487869],["void std::__1::vector<int, v8::internal::ZoneAllocator<int> >::__push_back_slow_path<int const&>(int const&)",93957336487888,93957336488508],["std::__1::vector<unsigned char, v8::internal::ZoneAllocator<unsigned char> >::vector(unsigned long, unsigned char const&, v8::internal::ZoneAllocator<unsigned char> const&)",93957336489040,93957336489375],["v8::internal::BasicBlockProfilerData::SetFunctionName(std::__1::unique_ptr<char [], std::__1::default_delete<char []> >)",93957336489520,93957336489564],["v8::internal::Dictionary<v8::internal::SimpleNumberDictionary, v8::internal::SimpleNumberDictionaryShape>::SetEntry(v8::internal::InternalIndex, v8::internal::Object, v8::internal::Object, v8::internal::PropertyDetails)",93957338969520,93957338969849],["v8::internal::Dictionary<v8::internal::NameDictionary, v8::internal::NameDictionaryShape>::DeleteEntry(v8::internal::Isolate*, v8::internal::Handle<v8::internal::NameDictionary>, v8::internal::InternalIndex)",93957338982016,93957338982127],["v8::internal::Handle<v8::internal::NameDictionary> v8::internal::BaseNameDictionary<v8::internal::NameDictionary, v8::internal::NameDictionaryShape>::New<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*, int, v8::internal::AllocationType, v8::internal::MinimumCapacity)",93957338984304,93957338984457],["v8::internal::Dictionary<v8::internal::GlobalDictionary, v8::internal::GlobalDictionaryShape>::NumberOfEnumerableProperties()",93957338987056,93957338987198],["v8::internal::BaseNameDictionary<v8::internal::GlobalDictionary, v8::internal::GlobalDictionaryShape>::IterationIndices(v8::internal::Isolate*, v8::internal::Handle<v8::internal::GlobalDictionary>)",93957338988272,93957338988509],["v8::internal::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::InstanceType)",93957338989072,93957338991952],["v8::internal::Object::ToObjectImpl(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, char const*)",93957338992384,93957338992905],["v8::internal::Handle<v8::internal::Object> v8::internal::FactoryBase<v8::internal::Factory>::NewNumber<(v8::internal::AllocationType)0>(double)",93957338993808,93957338993994],["v8::internal::Object::ConvertToName(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)",93957338994896,93957338995037],["v8::internal::Object::ConvertToString(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)",93957338995424,93957338995777],["v8::internal::Handle<v8::internal::String> v8::internal::Factory::NewStringFromStaticChars<22ul>(char const (&) [22ul], v8::internal::AllocationType)",93957338999888,93957338999949],["v8::internal::(anonymous namespace)::IsErrorObject(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)",93957339000192,93957339000280],["v8::internal::(anonymous namespace)::NoSideEffectsErrorToString(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>)",93957339000416,93957339001439],["v8::internal::Object::ConvertToLength(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)",93957339001568,93957339002022],["v8::internal::Object::BooleanValue(v8::internal::Isolate*)",93957339002560,93957339002741],["v8::internal::Object::Equals(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957339003568,93957339005315],["v8::internal::RegExpMacroAssemblerX64::GetCode(v8::internal::Handle<v8::internal::String>)",93957342189072,93957342193197],["v8::internal::RegExpMacroAssemblerX64::ReadStackPointerFromRegister(int)",93957342195088,93957342195248],["v8::internal::RegExpMacroAssemblerX64::WriteStackPointerToRegister(int)",93957342196208,93957342196412],["v8::internal::trap_handler::TryHandleSignal(int, siginfo_t*, void*)",93957342197360,93957342197710],["v8::internal::trap_handler::RemoveTrapHandler()",93957342197904,93957342197951],["v8::internal::RegExpCaseFolding::IgnoreSet()",93957342198240,93957342198383],["v8::internal::RegExpCaseFolding::SpecialAddSet()",93957342198560,93957342198703],["v8::base::LazyInstanceImpl<v8::internal::SpecialAddSetData, v8::base::StaticallyAllocatedInstanceTrait<v8::internal::SpecialAddSetData>, v8::base::DefaultConstructTrait<v8::internal::SpecialAddSetData>, v8::base::ThreadSafeInitOnceTrait, v8::base::LeakyInstanceTrait<v8::internal::SpecialAddSetData> >::InitInstance(void*)",93957342198720,93957342198731],["fgetspent",139871564318720,139871564319241],["_nss_files_parse_spent",139871564322080,139871564323108],["lckpwdf",139871564323936,139871564324684],["getsgent",139871564324880,139871564325066],["v8::internal::TranslationArrayIterator::TranslationArrayIterator(v8::internal::ByteArray, int)",93957336428320,93957336428473],["v8::internal::TranslationArrayBuilder::BeginArgumentsAdaptorFrame(int, unsigned int)",93957336453488,93957336456029],["v8::internal::TranslationArrayBuilder::StoreRegister(v8::internal::Register)",93957336466128,93957336467398],["v8::internal::TranslationArrayBuilder::StoreBoolRegister(v8::internal::Register)",93957336471248,93957336472518],["v8::internal::TranslationArrayBuilder::StoreStackSlot(int)",93957336475088,93957336476358],["v8::internal::TranslationArrayBuilder::StoreInt64StackSlot(int)",93957336477648,93957336478918],["v8::internal::TranslationArrayBuilder::StoreBoolStackSlot(int)",93957336480208,93957336481478],["v8::internal::TranslationArrayBuilder::StoreDoubleStackSlot(int)",93957336482768,93957336484038],["v8::internal::HashTable<v8::internal::EphemeronHashTable, v8::internal::ObjectHashTableShape>::Swap(v8::internal::InternalIndex, v8::internal::InternalIndex, v8::internal::WriteBarrierMode)",93957338963088,93957338964065],["v8::internal::Handle<v8::internal::NumberDictionary> v8::internal::HashTable<v8::internal::NumberDictionary, v8::internal::NumberDictionaryShape>::New<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*, int, v8::internal::AllocationType, v8::internal::MinimumCapacity)",93957338974736,93957338974869],["v8::internal::HashTable<v8::internal::NameDictionary, v8::internal::NameDictionaryShape>::Shrink(v8::internal::Isolate*, v8::internal::Handle<v8::internal::NameDictionary>, int)",93957338979936,93957338980185],["v8::internal::Dictionary<v8::internal::NameDictionary, v8::internal::NameDictionaryShape>::ShallowCopy(v8::internal::Isolate*, v8::internal::Handle<v8::internal::NameDictionary>)",93957338982912,93957338982929],["v8::internal::Handle<v8::internal::NameDictionary> v8::internal::BaseNameDictionary<v8::internal::NameDictionary, v8::internal::NameDictionaryShape>::AddNoUpdateNextEnumerationIndex<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::NameDictionary>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyDetails, v8::internal::InternalIndex*)",93957338984128,93957338984138],["v8::internal::HashTable<v8::internal::GlobalDictionary, v8::internal::GlobalDictionaryShape>::Rehash(v8::internal::IsolateRoot)",93957338984480,93957338985141],["v8::internal::Handle<v8::internal::GlobalDictionary> v8::internal::HashTable<v8::internal::GlobalDictionary, v8::internal::GlobalDictionaryShape>::EnsureCapacity<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::GlobalDictionary>, int, v8::internal::AllocationType)",93957338986544,93957338986823],["v8::internal::GlobalDictionary::SetEntry(v8::internal::InternalIndex, v8::internal::Object, v8::internal::Object, v8::internal::PropertyDetails)",93957338987328,93957338987585],["v8::internal::BaseNameDictionary<v8::internal::GlobalDictionary, v8::internal::GlobalDictionaryShape>::NextEnumerationIndex(v8::internal::Isolate*, v8::internal::Handle<v8::internal::GlobalDictionary>)",93957338987968,93957338988268],["v8::internal::Handle<v8::internal::GlobalDictionary> v8::internal::BaseNameDictionary<v8::internal::GlobalDictionary, v8::internal::GlobalDictionaryShape>::New<v8::internal::Isolate>(v8::internal::Isolate*, int, v8::internal::AllocationType, v8::internal::MinimumCapacity)",93957338988512,93957338988669],["v8::internal::ComparisonResultToBool(v8::internal::Operation, v8::internal::ComparisonResult)",93957338988992,93957338989060],["v8::internal::Object::OptimalType(v8::internal::Isolate*, v8::internal::Representation)",93957338991952,93957338992166],["v8::internal::Object::WrapForRead(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Representation)",93957338992336,93957338992376],["v8::internal::Object::ConvertReceiver(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)",93957338992912,93957338993135],["v8::internal::Object::ConvertToInteger(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)",93957338993488,93957338993806],["v8::internal::Object::ConvertToInt32(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)",93957338994000,93957338994439],["v8::internal::RegExpMacroAssemblerX64::CheckCharacterAfterAnd(unsigned int, unsigned int, v8::internal::Label*)",93957342186256,93957342186428],["v8::internal::RegExpMacroAssemblerX64::IfRegisterLT(int, int, v8::internal::Label*)",93957342193680,93957342193870],["v8::internal::RegExpMacroAssemblerX64::PushRegister(int, v8::internal::RegExpMacroAssembler::StackCheckFlag)",93957342194640,93957342194946],["v8::internal::RegExpMacroAssemblerX64::SetRegister(int, int)",93957342195424,93957342195545],["v8::internal::RegExpMacroAssemblerX64::ClearRegisters(int, int)",93957342195952,93957342196200],["v8::internal::RegExpMacroAssemblerX64::CheckStackGuardState(unsigned long*, unsigned long, unsigned long)",93957342196416,93957342196465],["v8::internal::RegExpMacroAssemblerX64::LoadCurrentCharacterUnchecked(int, int)",93957342196768,93957342197355],["v8::internal::trap_handler::HandleSignal(int, siginfo_t*, void*)",93957342197712,93957342197762],["__towctrans_l",139871564317520,139871564317589],["setspent",139871564320528,139871564320730],["getspnam_r",139871564321232,139871564322065],["sgetspent_r",139871564323120,139871564323250],["v8::internal::TranslatedState::GetResolvedSlot(v8::internal::TranslatedFrame*, int)",93957336425264,93957336425486],["v8::internal::TranslationArrayBuilder::Add(int)",93957336431168,93957336431410],["v8::internal::TranslationArrayBuilder::BeginJavaScriptBuiltinContinuationWithCatchFrame(v8::internal::BytecodeOffset, int, unsigned int)",93957336445808,93957336449648],["v8::internal::TranslationArrayBuilder::ArgumentsElements(v8::internal::CreateArgumentsType)",93957336462304,93957336463547],["v8::internal::TranslationArrayBuilder::DuplicateObject(int)",93957336464848,93957336466118],["v8::internal::TranslationArrayBuilder::StoreInt32Register(v8::internal::Register)",93957336467408,93957336468678],["v8::internal::TranslationArrayBuilder::StoreUint32Register(v8::internal::Register)",93957336469968,93957336471238],["v8::internal::TranslationArrayBuilder::StoreFloatRegister(v8::internal::XMMRegister)",93957336472528,93957336473798],["v8::internal::HashTable<v8::internal::ObjectHashTable, v8::internal::ObjectHashTableShape>::Rehash(v8::internal::IsolateRoot)",93957338957232,93957338957926],["v8::internal::ObjectHashTableBase<v8::internal::EphemeronHashTable, v8::internal::ObjectHashTableShape>::Remove(v8::internal::Isolate*, v8::internal::Handle<v8::internal::EphemeronHashTable>, v8::internal::Handle<v8::internal::Object>, bool*, int)",93957338966736,93957338967046],["v8::internal::HashTable<v8::internal::NumberDictionary, v8::internal::NumberDictionaryShape>::Swap(v8::internal::InternalIndex, v8::internal::InternalIndex, v8::internal::WriteBarrierMode)",93957338971616,93957338973140],["v8::internal::Dictionary<v8::internal::NumberDictionary, v8::internal::NumberDictionaryShape>::NumberOfEnumerableProperties()",93957338975568,93957338975745],["v8::internal::HashTable<v8::internal::NameDictionary, v8::internal::NameDictionaryShape>::Rehash(v8::internal::IsolateRoot)",93957338977680,93957338978398],["v8::internal::Handle<v8::internal::NameDictionary> v8::internal::HashTable<v8::internal::NameDictionary, v8::internal::NameDictionaryShape>::EnsureCapacity<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::NameDictionary>, int, v8::internal::AllocationType)",93957338981440,93957338981721],["v8::internal::Dictionary<v8::internal::NameDictionary, v8::internal::NameDictionaryShape>::SlowReverseLookup(v8::internal::Object)",93957338982320,93957338982473],["v8::internal::Handle<v8::internal::NameDictionary> v8::internal::Dictionary<v8::internal::NameDictionary, v8::internal::NameDictionaryShape>::Add<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::NameDictionary>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyDetails, v8::internal::InternalIndex*)",93957338983216,93957338983475],["v8::internal::FixedArray::ShrinkOrEmpty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FixedArray>, int)",93957338984048,93957338984122],["v8::internal::Handle<v8::internal::NameDictionary> v8::internal::BaseNameDictionary<v8::internal::NameDictionary, v8::internal::NameDictionaryShape>::New<v8::internal::Isolate>(v8::internal::Isolate*, int, v8::internal::AllocationType, v8::internal::MinimumCapacity)",93957338984144,93957338984304],["v8::internal::Handle<v8::internal::NameDictionary> v8::internal::BaseNameDictionary<v8::internal::NameDictionary, v8::internal::NameDictionaryShape>::AddNoUpdateNextEnumerationIndex<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*, v8::internal::Handle<v8::internal::NameDictionary>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyDetails, v8::internal::InternalIndex*)",93957338984464,93957338984474],["v8::internal::HashTable<v8::internal::GlobalDictionary, v8::internal::GlobalDictionaryShape>::Swap(v8::internal::InternalIndex, v8::internal::InternalIndex, v8::internal::WriteBarrierMode)",93957338985152,93957338985522],["v8::internal::HashTable<v8::internal::GlobalDictionary, v8::internal::GlobalDictionaryShape>::Rehash(v8::internal::IsolateRoot, v8::internal::GlobalDictionary)",93957338985792,93957338986535],["v8::internal::Dictionary<v8::internal::GlobalDictionary, v8::internal::GlobalDictionaryShape>::DeleteEntry(v8::internal::Isolate*, v8::internal::Handle<v8::internal::GlobalDictionary>, v8::internal::InternalIndex)",93957338986832,93957338987049],["v8::internal::Dictionary<v8::internal::GlobalDictionary, v8::internal::GlobalDictionaryShape>::SlowReverseLookup(v8::internal::Object)",93957338987200,93957338987328],["v8::internal::BaseNameDictionary<v8::internal::GlobalDictionary, v8::internal::GlobalDictionaryShape>::Add(v8::internal::Isolate*, v8::internal::Handle<v8::internal::GlobalDictionary>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyDetails, v8::internal::InternalIndex*)",93957338987600,93957338987709],["v8::internal::RegExpMacroAssemblerX64::CheckCharacterGT(unsigned short, v8::internal::Label*)",93957342182016,93957342182118],["v8::internal::RegExpMacroAssemblerX64::CheckCharacterNotInRange(unsigned short, unsigned short, v8::internal::Label*)",93957342187072,93957342187285],["v8::internal::RegExpMacroAssemblerX64::GoTo(v8::internal::Label*)",93957342193456,93957342193487],["v8::internal::RegExpMacroAssemblerX64::PopCurrentPosition()",93957342194064,93957342194132],["v8::internal::RegExpMacroAssemblerX64::PushCurrentPosition()",93957342194560,93957342194637],["v8::internal::RegExpMacroAssemblerX64::ReadCurrentPositionFromRegister(int)",93957342194960,93957342195077],["v8::internal::RegExpMacroAssemblerX64::SetCurrentPositionFromEnd(int)",93957342195248,93957342195412],["v8::internal::RegExpMacroAssemblerX64::Succeed()",93957342195552,93957342195596],["__towupper_l",139871564317072,139871564317149],["getspnam",139871564317792,139871564318230],["putspent",139871564319248,139871564320516],["endspent",139871564320736,139871564320958],["v8::internal::TranslatedState::InitializeJSObjectAt(v8::internal::TranslatedFrame*, int*, v8::internal::TranslatedValue*, v8::internal::Handle<v8::internal::Map>, v8::internal::CombinationAssertScope<v8::internal::PerThreadAssertScopeDebugOnly<(v8::internal::PerThreadAssertType)0, false>, v8::internal::PerThreadAssertScopeDebugOnly<(v8::internal::PerThreadAssertType)1, false> > const&)",93957336420176,93957336421031],["v8::internal::TranslatedState::DoUpdateFeedback()",93957336427184,93957336427295],["v8::internal::TranslationArrayIterator::Next()",93957336430976,93957336431093],["v8::internal::TranslationArrayBuilder::BeginBuiltinContinuationFrame(v8::internal::BytecodeOffset, int, unsigned int)",93957336431728,93957336435568],["v8::internal::TranslationArrayBuilder::BeginJavaScriptBuiltinContinuationFrame(v8::internal::BytecodeOffset, int, unsigned int)",93957336441968,93957336445808],["v8::internal::TranslationArrayBuilder::BeginConstructStubFrame(v8::internal::BytecodeOffset, int, unsigned int)",93957336449648,93957336453488],["v8::internal::TranslationArrayBuilder::BeginInterpretedFrame(v8::internal::BytecodeOffset, int, unsigned int, int, int)",93957336456032,93957336462298],["v8::internal::TranslationArrayBuilder::ArgumentsLength()",93957336463552,93957336463567],["bool std::__1::__insertion_sort_incomplete<v8::internal::Module::GetModuleNamespace(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Module>)::$_0&, v8::internal::Handle<v8::internal::String>*>(v8::internal::Handle<v8::internal::String>*, v8::internal::Handle<v8::internal::String>*, v8::internal::Module::GetModuleNamespace(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Module>)::$_0&)",93957338952144,93957338952578],["v8::internal::ObjectHashTableBase<v8::internal::ObjectHashTable, v8::internal::ObjectHashTableShape>::ValueAt(v8::internal::InternalIndex)",93957338960720,93957338960758],["v8::internal::Handle<v8::internal::EphemeronHashTable> v8::internal::HashTable<v8::internal::EphemeronHashTable, v8::internal::ObjectHashTableShape>::EnsureCapacity<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::EphemeronHashTable>, int, v8::internal::AllocationType)",93957338965184,93957338965465],["v8::internal::Handle<v8::internal::SimpleNumberDictionary> v8::internal::HashTable<v8::internal::SimpleNumberDictionary, v8::internal::SimpleNumberDictionaryShape>::New<v8::internal::Isolate>(v8::internal::Isolate*, int, v8::internal::AllocationType, v8::internal::MinimumCapacity)",93957338968240,93957338968382],["v8::internal::Handle<v8::internal::SimpleNumberDictionary> v8::internal::Dictionary<v8::internal::SimpleNumberDictionary, v8::internal::SimpleNumberDictionaryShape>::Add<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SimpleNumberDictionary>, unsigned int, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyDetails, v8::internal::InternalIndex*)",93957338970240,93957338970689],["v8::internal::Handle<v8::internal::NumberDictionary> v8::internal::HashTable<v8::internal::NumberDictionary, v8::internal::NumberDictionaryShape>::New<v8::internal::Isolate>(v8::internal::Isolate*, int, v8::internal::AllocationType, v8::internal::MinimumCapacity)",93957338973408,93957338973548],["v8::internal::Handle<v8::internal::NumberDictionary> v8::internal::HashTable<v8::internal::NumberDictionary, v8::internal::NumberDictionaryShape>::EnsureCapacity<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*, v8::internal::Handle<v8::internal::NumberDictionary>, int, v8::internal::AllocationType)",93957338975168,93957338975446],["v8::internal::Dictionary<v8::internal::NumberDictionary, v8::internal::NumberDictionaryShape>::ShallowCopy(v8::internal::Isolate*, v8::internal::Handle<v8::internal::NumberDictionary>)",93957338976192,93957338976209],["v8::internal::Handle<v8::internal::NumberDictionary> v8::internal::Dictionary<v8::internal::NumberDictionary, v8::internal::NumberDictionaryShape>::Add<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*, v8::internal::Handle<v8::internal::NumberDictionary>, unsigned int, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyDetails, v8::internal::InternalIndex*)",93957338977200,93957338977673],["v8::internal::HashTable<v8::internal::NameDictionary, v8::internal::NameDictionaryShape>::Swap(v8::internal::InternalIndex, v8::internal::InternalIndex, v8::internal::WriteBarrierMode)",93957338978400,93957338979924],["v8::internal::HashTable<v8::internal::NameDictionary, v8::internal::NameDictionaryShape>::Rehash(v8::internal::IsolateRoot, v8::internal::NameDictionary)",93957338980192,93957338981434],["v8::internal::Handle<v8::internal::NameDictionary> v8::internal::HashTable<v8::internal::NameDictionary, v8::internal::NameDictionaryShape>::EnsureCapacity<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*, v8::internal::Handle<v8::internal::NameDictionary>, int, v8::internal::AllocationType)",93957338981728,93957338982006],["v8::internal::Dictionary<v8::internal::NameDictionary, v8::internal::NameDictionaryShape>::NumberOfEnumerableProperties()",93957338982128,93957338982305],["v8::internal::Dictionary<v8::internal::NameDictionary, v8::internal::NameDictionaryShape>::SetEntry(v8::internal::InternalIndex, v8::internal::Object, v8::internal::Object, v8::internal::PropertyDetails)",93957338982480,93957338982909],["v8::internal::BaseNameDictionary<v8::internal::NameDictionary, v8::internal::NameDictionaryShape>::Add(v8::internal::Isolate*, v8::internal::Handle<v8::internal::NameDictionary>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyDetails, v8::internal::InternalIndex*)",93957338982944,93957338983211],["v8::internal::Handle<v8::internal::NameDictionary> v8::internal::Dictionary<v8::internal::NameDictionary, v8::internal::NameDictionaryShape>::Add<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*, v8::internal::Handle<v8::internal::NameDictionary>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyDetails, v8::internal::InternalIndex*)",93957338983488,93957338983767],["v8::internal::RegExpMacroAssemblerX64::~RegExpMacroAssemblerX64()",93957342180864,93957342181080],["v8::internal::RegExpMacroAssemblerX64::CheckGreedyLoop(v8::internal::Label*)",93957342182656,93957342182822],["v8::internal::RegExpMacroAssemblerX64::CheckNotCharacterAfterMinusAnd(unsigned short, unsigned short, unsigned short, v8::internal::Label*)",93957342186608,93957342186843],["v8::internal::RegExpMacroAssemblerX64::CheckSpecialCharacterClass(unsigned short, v8::internal::Label*)",93957342187472,93957342188999],["v8::internal::RegExpMacroAssemblerX64::FixupCodeRelativePositions()",93957342193200,93957342193453],["v8::internal::RegExpMacroAssemblerX64::IfRegisterGE(int, int, v8::internal::Label*)",93957342193488,93957342193678],["v8::internal::RegExpMacroAssemblerX64::IfRegisterEqPos(int, v8::internal::Label*)",93957342193872,93957342194059],["v8::internal::RegExpMacroAssemblerX64::PopRegister(int)",93957342194144,93957342194326],["__iswspace_l",139871564316624,139871564316744],["__iswctype_l",139871564317312,139871564317389],["getspent",139871564317600,139871564317786],["sgetspent",139871564318240,139871564318710],["v8::internal::TranslatedState::CreateNextTranslatedValue(int, v8::internal::TranslationArrayIterator*, v8::internal::FixedArray, unsigned long, v8::internal::RegisterValues*, _IO_FILE*)",93957336410272,93957336415091],["v8::internal::TranslatedState::EnsureChildrenAllocated(int, v8::internal::TranslatedFrame*, int*, std::__1::stack<int, std::__1::deque<int, std::__1::allocator<int> > >*)",93957336423376,93957336423944],["v8::internal::TranslatedState::GetArgumentsInfoFromJSFrameIndex(int, int*)",93957336425584,93957336425833],["void std::__1::vector<v8::internal::TranslatedFrame, std::__1::allocator<v8::internal::TranslatedFrame> >::__push_back_slow_path<v8::internal::TranslatedFrame>(v8::internal::TranslatedFrame&&)",93957336427344,93957336427888],["std::__1::vector<int, std::__1::allocator<int> >::insert(std::__1::__wrap_iter<int const*>, unsigned long, int const&)",93957336428480,93957336430968],["v8::internal::TranslationArrayIterator::HasNext() const",93957336431104,93957336431157],["v8::internal::TranslationArrayBuilder::ToTranslationArray(v8::internal::Factory*)",93957336431424,93957336431714],["v8::internal::TranslationArrayBuilder::Add(v8::internal::TranslationOpcode)",93957336435568,93957336436838],["v8::internal::Module::RecordError(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Module>, v8::internal::Handle<v8::internal::Object>)",93957338944112,93957338944527],["v8::internal::HashTable<v8::internal::CompilationCacheTable, v8::internal::CompilationCacheShape>::FindInsertionEntry(v8::internal::Isolate*, unsigned int)",93957338954352,93957338954490],["v8::internal::HashTable<v8::internal::ObjectHashTable, v8::internal::ObjectHashTableShape>::Rehash(v8::internal::IsolateRoot, v8::internal::ObjectHashTable)",93957338959248,93957338959952],["v8::internal::ObjectHashTableBase<v8::internal::ObjectHashTable, v8::internal::ObjectHashTableShape>::AddEntry(v8::internal::InternalIndex, v8::internal::Object, v8::internal::Object)",93957338961616,93957338961908],["v8::internal::Handle<v8::internal::EphemeronHashTable> v8::internal::HashTable<v8::internal::EphemeronHashTable, v8::internal::ObjectHashTableShape>::New<v8::internal::Isolate>(v8::internal::Isolate*, int, v8::internal::AllocationType, v8::internal::MinimumCapacity)",93957338964336,93957338964478],["v8::internal::ObjectHashTableBase<v8::internal::EphemeronHashTable, v8::internal::ObjectHashTableShape>::Put(v8::internal::Isolate*, v8::internal::Handle<v8::internal::EphemeronHashTable>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, int)",93957338965696,93957338966360],["v8::internal::HashTable<v8::internal::SimpleNumberDictionary, v8::internal::SimpleNumberDictionaryShape>::Rehash(v8::internal::IsolateRoot)",93957338967168,93957338967973],["v8::internal::Handle<v8::internal::SimpleNumberDictionary> v8::internal::HashTable<v8::internal::SimpleNumberDictionary, v8::internal::SimpleNumberDictionaryShape>::EnsureCapacity<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SimpleNumberDictionary>, int, v8::internal::AllocationType)",93957338969120,93957338969401],["v8::internal::Dictionary<v8::internal::SimpleNumberDictionary, v8::internal::SimpleNumberDictionaryShape>::AtPut(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SimpleNumberDictionary>, unsigned int, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyDetails)",93957338969856,93957338970240],["v8::internal::HashTable<v8::internal::NumberDictionary, v8::internal::NumberDictionaryShape>::Rehash(v8::internal::IsolateRoot)",93957338970704,93957338971614],["v8::internal::HashTable<v8::internal::NumberDictionary, v8::internal::NumberDictionaryShape>::Shrink(v8::internal::Isolate*, v8::internal::Handle<v8::internal::NumberDictionary>, int)",93957338973152,93957338973401],["v8::internal::HashTable<v8::internal::NumberDictionary, v8::internal::NumberDictionaryShape>::Rehash(v8::internal::IsolateRoot, v8::internal::NumberDictionary)",93957338973552,93957338974731],["v8::internal::Handle<v8::internal::NumberDictionary> v8::internal::HashTable<v8::internal::NumberDictionary, v8::internal::NumberDictionaryShape>::EnsureCapacity<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::NumberDictionary>, int, v8::internal::AllocationType)",93957338974880,93957338975161],["v8::internal::Dictionary<v8::internal::NumberDictionary, v8::internal::NumberDictionaryShape>::DeleteEntry(v8::internal::Isolate*, v8::internal::Handle<v8::internal::NumberDictionary>, v8::internal::InternalIndex)",93957338975456,93957338975567],["v8::internal::Dictionary<v8::internal::NumberDictionary, v8::internal::NumberDictionaryShape>::SetEntry(v8::internal::InternalIndex, v8::internal::Object, v8::internal::Object, v8::internal::PropertyDetails)",93957338975760,93957338976189],["v8::internal::Dictionary<v8::internal::NumberDictionary, v8::internal::NumberDictionaryShape>::AtPut(v8::internal::Isolate*, v8::internal::Handle<v8::internal::NumberDictionary>, unsigned int, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyDetails)",93957338976224,93957338976710],["ucache_compareKeys_68",93957342180336,93957342180350],["v8::internal::RegExpMacroAssemblerX64::AdvanceRegister(int, int)",93957342181376,93957342181500],["v8::internal::RegExpMacroAssemblerX64::CheckNotAtStart(int, v8::internal::Label*)",93957342182336,93957342182541],["v8::internal::RegExpMacroAssemblerX64::CheckNotBackReference(int, bool, v8::internal::Label*)",93957342184848,93957342186129],["v8::internal::RegExpMacroAssemblerX64::CheckNotCharacterAfterAnd(unsigned int, unsigned int, v8::internal::Label*)",93957342186432,93957342186604],["v8::internal::RegExpMacroAssemblerX64::CheckCharacterInRange(unsigned short, unsigned short, v8::internal::Label*)",93957342186848,93957342187061],["v8::internal::RegExpMacroAssemblerX64::CheckBitInTable(v8::internal::Handle<v8::internal::ByteArray>, v8::internal::Label*)",93957342187296,93957342187468],["v8::internal::RegExpMacroAssemblerX64::Fail()",93957342189008,93957342189066],["__iswlower_l",139871564316112,139871564316232],["__iswxdigit_l",139871564316864,139871564316984],["__wctype_l",139871564317152,139871564317297],["__wctrans_l",139871564317392,139871564317509],["v8::internal::TranslatedState::InitializeObjectAt(v8::internal::TranslatedValue*)",93957336406224,93957336406860],["v8::internal::TranslatedState::Prepare(unsigned long)",93957336417744,93957336417924],["v8::internal::TranslatedState::MaterializeFixedDoubleArray(v8::internal::TranslatedFrame*, int*, v8::internal::TranslatedValue*, v8::internal::Handle<v8::internal::Map>)",93957336422624,93957336423159],["v8::internal::TranslatedState::EnsurePropertiesAllocatedAndMarked(v8::internal::TranslatedValue*, v8::internal::Handle<v8::internal::Map>)",93957336424560,93957336425127],["v8::internal::TranslatedState::GetFrameFromJSFrameIndex(int)",93957336425488,93957336425575],["v8::internal::TranslatedState::StoreMaterializedValuesAndDeopt(v8::internal::JavaScriptFrame*)",93957336425840,93957336427184],["v8::internal::Representation::Mnemonic() const",93957336427296,93957336427337],["std::__1::deque<int, std::__1::allocator<int> >::__add_back_capacity()",93957336427888,93957336428309],["v8::internal::Map::ReconfigureExistingProperty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::InternalIndex, v8::internal::PropertyKind, v8::internal::PropertyAttributes, v8::internal::PropertyConstness)",93957338938400,93957338938678],["v8::internal::Module::EvaluateMaybeAsync(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Module>)",93957338946144,93957338946709],["v8::internal::MaybeHandle<v8::internal::SharedFunctionInfo> v8::internal::Script::FindSharedFunctionInfo<v8::internal::Isolate>(v8::internal::Isolate*, int)",93957338953056,93957338953310],["v8::internal::Handle<v8::internal::CompilationCacheTable> v8::internal::HashTable<v8::internal::CompilationCacheTable, v8::internal::CompilationCacheShape>::EnsureCapacity<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::CompilationCacheTable>, int, v8::internal::AllocationType)",93957338956016,93957338956297],["v8::internal::HashTable<v8::internal::ObjectHashTable, v8::internal::ObjectHashTableShape>::Shrink(v8::internal::Isolate*, v8::internal::Handle<v8::internal::ObjectHashTable>, int)",93957338958848,93957338959099],["v8::internal::ObjectHashTableBase<v8::internal::ObjectHashTable, v8::internal::ObjectHashTableShape>::Lookup(v8::internal::Handle<v8::internal::Object>)",93957338960240,93957338960493],["v8::internal::Object::GetOrCreateHash(v8::internal::Isolate*)",93957338960880,93957338960937],["v8::internal::ObjectHashTableBase<v8::internal::ObjectHashTable, v8::internal::ObjectHashTableShape>::Remove(v8::internal::Isolate*, v8::internal::Handle<v8::internal::ObjectHashTable>, v8::internal::Handle<v8::internal::Object>, bool*, int)",93957338962064,93957338962374],["v8::internal::HashTable<v8::internal::EphemeronHashTable, v8::internal::ObjectHashTableShape>::Shrink(v8::internal::Isolate*, v8::internal::Handle<v8::internal::EphemeronHashTable>, int)",93957338964080,93957338964331],["v8::internal::HashTable<v8::internal::EphemeronHashTable, v8::internal::ObjectHashTableShape>::Rehash(v8::internal::IsolateRoot, v8::internal::EphemeronHashTable)",93957338964480,93957338965184],["v8::internal::ObjectHashTableBase<v8::internal::EphemeronHashTable, v8::internal::ObjectHashTableShape>::Lookup(v8::internal::Handle<v8::internal::Object>, int)",93957338965472,93957338965693],["v8::internal::ObjectHashTableBase<v8::internal::EphemeronHashTable, v8::internal::ObjectHashTableShape>::AddEntry(v8::internal::InternalIndex, v8::internal::Object, v8::internal::Object)",93957338966368,93957338966735],["v8::internal::ObjectHashTableBase<v8::internal::EphemeronHashTable, v8::internal::ObjectHashTableShape>::RemoveEntry(v8::internal::InternalIndex)",93957338967056,93957338967158],["v8::internal::HashTable<v8::internal::SimpleNumberDictionary, v8::internal::SimpleNumberDictionaryShape>::Shrink(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SimpleNumberDictionary>, int)",93957338967984,93957338968235],["v8::internal::HashTable<v8::internal::SimpleNumberDictionary, v8::internal::SimpleNumberDictionaryShape>::Rehash(v8::internal::IsolateRoot, v8::internal::SimpleNumberDictionary)",93957338968384,93957338969117],["v8::internal::Dictionary<v8::internal::SimpleNumberDictionary, v8::internal::SimpleNumberDictionaryShape>::DeleteEntry(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SimpleNumberDictionary>, v8::internal::InternalIndex)",93957338969408,93957338969519],["v8::internal::compiler::UnwindingInfoWriter::BeginInstructionBlock(int, v8::internal::compiler::InstructionBlock const*)",93957342179632,93957342179789],["v8::internal::EhFrameWriter::WriteReturnAddressRegisterCode()",93957342180448,93957342180463],["v8::internal::RegExpMacroAssemblerX64::stack_limit_slack()",93957342181312,93957342181323],["v8::internal::RegExpMacroAssemblerX64::Bind(v8::internal::Label*)",93957342181888,93957342181902],["v8::internal::RegExpMacroAssemblerX64::CheckAtStart(int, v8::internal::Label*)",93957342182128,93957342182333],["v8::internal::RegExpMacroAssemblerX64::CheckCharacterLT(unsigned short, v8::internal::Label*)",93957342182544,93957342182646],["v8::internal::RegExpMacroAssemblerX64::CheckNotBackReferenceIgnoreCase(int, bool, bool, v8::internal::Label*)",93957342182832,93957342184845],["v8::internal::RegExpMacroAssemblerX64::CheckNotCharacter(unsigned int, v8::internal::Label*)",93957342186144,93957342186246],["__iswalpha_l",139871564315600,139871564315720],["__iswprint_l",139871564316368,139871564316488],["__iswupper_l",139871564316752,139871564316864],["__towlower_l",139871564316992,139871564317069],["v8::internal::TranslatedValue::NewDouble(v8::internal::TranslatedState*, v8::internal::Float64)",93957336404544,93957336404574],["v8::internal::TranslatedState::CreateNextTranslatedFrame(v8::internal::TranslationArrayIterator*, v8::internal::FixedArray, unsigned long, _IO_FILE*)",93957336407264,93957336408680],["v8::internal::TranslatedState::Init(v8::internal::Isolate*, unsigned long, unsigned long, v8::internal::TranslationArrayIterator*, v8::internal::FixedArray, v8::internal::RegisterValues*, _IO_FILE*, int, int)",93957336415440,93957336417391],["v8::internal::TranslatedState::InitializeCapturedObjectAt(int, std::__1::stack<int, std::__1::deque<int, std::__1::allocator<int> > >*, v8::internal::CombinationAssertScope<v8::internal::PerThreadAssertScopeDebugOnly<(v8::internal::PerThreadAssertType)0, false>, v8::internal::PerThreadAssertScopeDebugOnly<(v8::internal::PerThreadAssertType)1, false> > const&)",93957336418448,93957336419448],["v8::internal::TranslatedState::EnsureCapturedObjectAllocatedAt(int, std::__1::stack<int, std::__1::deque<int, std::__1::allocator<int> > >*)",93957336421040,93957336422613],["v8::internal::TranslatedState::MaterializeHeapNumber(v8::internal::TranslatedFrame*, int*, v8::internal::TranslatedValue*)",93957336423168,93957336423364],["v8::internal::TranslatedState::EnsureJSObjectAllocated(v8::internal::TranslatedValue*, v8::internal::Handle<v8::internal::Map>)",93957336423952,93957336424554],["v8::internal::TranslatedValue::ReplaceElementsArrayWithCopy()",93957336425136,93957336425257],["v8::internal::Map::CopyInitialMap(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, int, int, int)",93957338929408,93957338929641],["v8::internal::StopSlackTracking(v8::internal::Map, void*)",93957338942688,93957338942701],["v8::internal::Module::Instantiate(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Module>, v8::Local<v8::Context>, v8::MaybeLocal<v8::Module> (*)(v8::Local<v8::Context>, v8::Local<v8::String>, v8::Local<v8::FixedArray>, v8::Local<v8::Module>), v8::MaybeLocal<v8::Module> (*)(v8::Local<v8::Context>, v8::Local<v8::String>, v8::Local<v8::Module>))",93957338945280,93957338945467],["void std::__1::__sort<v8::internal::Module::GetModuleNamespace(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Module>)::$_0&, v8::internal::Handle<v8::internal::String>*>(v8::internal::Handle<v8::internal::String>*, v8::internal::Handle<v8::internal::String>*, v8::internal::Module::GetModuleNamespace(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Module>)::$_0&)",93957338950096,93957338951439],["v8::internal::Handle<v8::internal::DescriptorArray> v8::internal::DescriptorArray::Allocate<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*, int, int, v8::internal::AllocationType)",93957338952624,93957338952652],["v8::internal::HashTable<v8::internal::StringSet, v8::internal::StringSetShape>::Rehash(v8::internal::IsolateRoot, v8::internal::StringSet)",93957338953568,93957338954061],["v8::internal::HashTable<v8::internal::CompilationCacheTable, v8::internal::CompilationCacheShape>::Rehash(v8::internal::IsolateRoot, v8::internal::CompilationCacheTable)",93957338954640,93957338955662],["v8::internal::HashTable<v8::internal::ObjectHashSet, v8::internal::ObjectHashSetShape>::Rehash(v8::internal::IsolateRoot, v8::internal::ObjectHashSet)",93957338956448,93957338956932],["v8::internal::HashTable<v8::internal::ObjectHashTable, v8::internal::ObjectHashTableShape>::Swap(v8::internal::InternalIndex, v8::internal::InternalIndex, v8::internal::WriteBarrierMode)",93957338957936,93957338958843],["v8::internal::Handle<v8::internal::ObjectHashTable> v8::internal::HashTable<v8::internal::ObjectHashTable, v8::internal::ObjectHashTableShape>::New<v8::internal::Isolate>(v8::internal::Isolate*, int, v8::internal::AllocationType, v8::internal::MinimumCapacity)",93957338959104,93957338959246],["v8::internal::Handle<v8::internal::ObjectHashTable> v8::internal::HashTable<v8::internal::ObjectHashTable, v8::internal::ObjectHashTableShape>::EnsureCapacity<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::ObjectHashTable>, int, v8::internal::AllocationType)",93957338959952,93957338960233],["v8::internal::ObjectHashTableBase<v8::internal::ObjectHashTable, v8::internal::ObjectHashTableShape>::Lookup(v8::internal::IsolateRoot, v8::internal::Handle<v8::internal::Object>, int)",93957338960496,93957338960715],["v8::internal::ObjectHashTableBase<v8::internal::ObjectHashTable, v8::internal::ObjectHashTableShape>::Put(v8::internal::Handle<v8::internal::ObjectHashTable>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957338960768,93957338960880],["v8::internal::ObjectHashTableBase<v8::internal::ObjectHashTable, v8::internal::ObjectHashTableShape>::Put(v8::internal::Isolate*, v8::internal::Handle<v8::internal::ObjectHashTable>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, int)",93957338960944,93957338961608],["v8::internal::ObjectHashTableBase<v8::internal::ObjectHashTable, v8::internal::ObjectHashTableShape>::Remove(v8::internal::Isolate*, v8::internal::Handle<v8::internal::ObjectHashTable>, v8::internal::Handle<v8::internal::Object>, bool*)",93957338961920,93957338962051],["v8::internal::HashTable<v8::internal::EphemeronHashTable, v8::internal::ObjectHashTableShape>::Rehash(v8::internal::IsolateRoot)",93957338962384,93957338963078],["bool v8::internal::compiler::(anonymous namespace)::TryVisitWordShift<v8::internal::compiler::BinopMatcher<v8::internal::compiler::IntMatcher<int, (v8::internal::compiler::IrOpcode::Value)22>, v8::internal::compiler::IntMatcher<int, (v8::internal::compiler::IrOpcode::Value)22> >, 32>(v8::internal::compiler::InstructionSelector*, v8::internal::compiler::Node*, v8::internal::compiler::ArchOpcode, v8::internal::compiler::FlagsContinuation*)",93957342174896,93957342175254],["v8::internal::RegisterValues::GetFloatRegister(unsigned int) const",93957342180240,93957342180255],["disasm::NameConverter::NameOfByteCPURegister(int) const",93957342180384,93957342180416],["v8::internal::EhFrameWriter::RegisterToDwarfCode(v8::internal::Register)",93957342180512,93957342180558],["v8::internal::RegExpMacroAssemblerX64::~RegExpMacroAssemblerX64()",93957342181088,93957342181312],["v8::internal::RegExpMacroAssemblerX64::AdvanceCurrentPosition(int)",93957342181328,93957342181369],["v8::internal::RegExpMacroAssemblerX64::Backtrack()",93957342181504,93957342181884],["v8::internal::RegExpMacroAssemblerX64::CheckCharacter(unsigned int, v8::internal::Label*)",93957342181904,93957342182006],["__iswctype",139871564315168,139871564315245],["__iswcntrl_l",139871564315856,139871564315974],["__iswgraph_l",139871564316240,139871564316360],["__iswpunct_l",139871564316496,139871564316614],["v8::internal::FrameWriter::DebugPrintOutputObject(v8::internal::Object, unsigned int, char const*)",93957336401152,93957336401328],["v8::internal::TranslatedValue::GetRawValue() const",93957336404672,93957336405171],["v8::internal::TranslatedValue::IsMaterializableByDebugger() const",93957336406896,93957336406908],["v8::internal::TranslatedState::CreateArgumentsElementsTranslatedValues(int, unsigned long, v8::internal::CreateArgumentsType, _IO_FILE*)",93957336408800,93957336410122],["v8::internal::TranslatedState::TranslatedState(v8::internal::JavaScriptFrame const*)",93957336415104,93957336415426],["std::__1::vector<v8::internal::TranslatedFrame, std::__1::allocator<v8::internal::TranslatedFrame> >::reserve(unsigned long)",93957336417392,93957336417736],["v8::internal::TranslatedState::UpdateFromPreviouslyMaterializedObjects()",93957336417936,93957336418444],["v8::internal::TranslatedState::InitializeObjectWithTaggedFieldsAt(v8::internal::TranslatedFrame*, int*, v8::internal::TranslatedValue*, v8::internal::Handle<v8::internal::Map>, v8::internal::CombinationAssertScope<v8::internal::PerThreadAssertScopeDebugOnly<(v8::internal::PerThreadAssertType)0, false>, v8::internal::PerThreadAssertScopeDebugOnly<(v8::internal::PerThreadAssertType)1, false> > const&)",93957336419456,93957336420168],["v8::internal::Map::FindElementsKindTransitionedMap(v8::internal::Isolate*, std::__1::vector<v8::internal::Handle<v8::internal::Map>, std::__1::allocator<v8::internal::Handle<v8::internal::Map> > > const&)",93957338923280,93957338924400],["v8::internal::Map::CopyForElementsTransition(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>)",93957338932944,93957338933296],["v8::internal::Map::ComputeMinObjectSlack(v8::internal::Isolate*)",93957338942064,93957338942301],["v8::internal::Map::StartInobjectSlackTracking()",93957338943904,93957338943952],["v8::internal::Module::Reset(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Module>)",93957338944976,93957338945206],["v8::internal::Module::FinishInstantiate(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Module>, v8::internal::ZoneForwardList<v8::internal::Handle<v8::internal::SourceTextModule> >*, unsigned int*, v8::internal::Zone*)",93957338945680,93957338945883],["v8::internal::JSModuleNamespace::GetExport(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>)",93957338949392,93957338949704],["unsigned int std::__1::__sort4<v8::internal::Module::GetModuleNamespace(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Module>)::$_0&, v8::internal::Handle<v8::internal::String>*>(v8::internal::Handle<v8::internal::String>*, v8::internal::Handle<v8::internal::String>*, v8::internal::Handle<v8::internal::String>*, v8::internal::Handle<v8::internal::String>*, v8::internal::Module::GetModuleNamespace(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Module>)::$_0&)",93957338951680,93957338951861],["v8::internal::Handle<v8::internal::DescriptorArray> v8::internal::DescriptorArray::Allocate<v8::internal::Isolate>(v8::internal::Isolate*, int, int, v8::internal::AllocationType)",93957338952592,93957338952623],["void v8::internal::Script::InitLineEnds<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Script>)",93957338952656,93957338953043],["v8::internal::MaybeHandle<v8::internal::SharedFunctionInfo> v8::internal::Script::FindSharedFunctionInfo<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*, int)",93957338953312,93957338953562],["v8::internal::Handle<v8::internal::StringSet> v8::internal::HashTable<v8::internal::StringSet, v8::internal::StringSetShape>::EnsureCapacity<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::StringSet>, int, v8::internal::AllocationType)",93957338954064,93957338954343],["v8::internal::Handle<v8::internal::CompilationCacheTable> v8::internal::HashTable<v8::internal::CompilationCacheTable, v8::internal::CompilationCacheShape>::New<v8::internal::Isolate>(v8::internal::Isolate*, int, v8::internal::AllocationType, v8::internal::MinimumCapacity)",93957338954496,93957338954636],["v8::internal::CompilationCacheShape::HashForObject(v8::internal::ReadOnlyRoots, v8::internal::Object)",93957338955664,93957338956014],["v8::internal::Handle<v8::internal::ObjectHashSet> v8::internal::HashTable<v8::internal::ObjectHashSet, v8::internal::ObjectHashSetShape>::New<v8::internal::Isolate>(v8::internal::Isolate*, int, v8::internal::AllocationType, v8::internal::MinimumCapacity)",93957338956304,93957338956441],["v8::internal::Handle<v8::internal::ObjectHashSet> v8::internal::HashTable<v8::internal::ObjectHashSet, v8::internal::ObjectHashSetShape>::EnsureCapacity<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::ObjectHashSet>, int, v8::internal::AllocationType)",93957338956944,93957338957223],["v8::internal::compiler::AddMatcher<v8::internal::compiler::BinopMatcher<v8::internal::compiler::IntMatcher<long, (v8::internal::compiler::IrOpcode::Value)23>, v8::internal::compiler::IntMatcher<long, (v8::internal::compiler::IrOpcode::Value)23> >, (v8::internal::compiler::IrOpcode::Value)330, (v8::internal::compiler::IrOpcode::Value)332, (v8::internal::compiler::IrOpcode::Value)334, (v8::internal::compiler::IrOpcode::Value)325>::AddMatcher(v8::internal::compiler::Node*, bool)",93957342172832,93957342172997],["v8::internal::compiler::BaseWithIndexAndDisplacementMatcher<v8::internal::compiler::AddMatcher<v8::internal::compiler::BinopMatcher<v8::internal::compiler::IntMatcher<int, (v8::internal::compiler::IrOpcode::Value)22>, v8::internal::compiler::IntMatcher<int, (v8::internal::compiler::IrOpcode::Value)22> >, (v8::internal::compiler::IrOpcode::Value)310, (v8::internal::compiler::IrOpcode::Value)312, (v8::internal::compiler::IrOpcode::Value)314, (v8::internal::compiler::IrOpcode::Value)305> >::Initialize(v8::internal::compiler::Node*, v8::base::Flags<v8::internal::compiler::AddressOption, unsigned char>)",93957342176336,93957342178666],["v8::internal::compiler::UnwindingInfoWriter::MarkFrameConstructed(int)",93957342179984,93957342180114],["v8::internal::FrameDescription::SetPc(long)",93957342180272,93957342180285],["disasm::NameConverter::NameOfCPURegister(int) const",93957342180352,93957342180384],["disasm::NameConverter::NameOfXMMRegister(int) const",93957342180416,93957342180448],["v8::internal::EhFrameWriter::WriteInitialStateInCie()",93957342180464,93957342180512],["v8::internal::RegExpMacroAssemblerX64::RegExpMacroAssemblerX64(v8::internal::Isolate*, v8::internal::Zone*, v8::internal::NativeRegExpMacroAssembler::Mode, int)",93957342180560,93957342180863],["iswxdigit",139871564314656,139871564314799],["__towctrans",139871564315392,139871564315461],["__iswblank_l",139871564315728,139871564315846],["__iswdigit_l",139871564315984,139871564316105],["v8::internal::Deoptimizer::DoComputeUnoptimizedFrame(v8::internal::TranslatedFrame*, int, bool)",93957336388496,93957336392291],["v8::internal::MaterializedObjectStore::Set(unsigned long, v8::internal::Handle<v8::internal::FixedArray>)",93957336402784,93957336403247],["v8::internal::TranslatedValue::NewInt64ToBigInt(v8::internal::TranslatedState*, long)",93957336404608,93957336404638],["v8::internal::Handle<v8::internal::HeapNumber> v8::internal::FactoryBase<v8::internal::Factory>::NewHeapNumber<(v8::internal::AllocationType)0>(double)",93957336405552,93957336405589],["v8::internal::TranslatedValue::IsMaterializedObject() const",93957336406864,93957336406882],["v8::internal::TranslatedFrame::Handlify()",93957336406912,93957336407260],["v8::internal::TranslatedFrame::AdvanceIterator(std::__1::__deque_iterator<v8::internal::TranslatedValue, v8::internal::TranslatedValue*, v8::internal::TranslatedValue&, v8::internal::TranslatedValue**, long, 0l>*)",93957336408688,93957336408787],["v8::internal::TranslatedFrame::Add(v8::internal::TranslatedValue const&)",93957336410128,93957336410264],["v8::internal::Map::UpdateFieldType(v8::internal::Isolate*, v8::internal::InternalIndex, v8::internal::Handle<v8::internal::Name>, v8::internal::PropertyConstness, v8::internal::Representation, v8::internal::MaybeObjectHandle const&)",93957338913776,93957338915536],["v8::internal::Map::RawCopy(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, int, int)",93957338927312,93957338927716],["v8::internal::Map::CopyReplaceDescriptors(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::DescriptorArray>, v8::internal::TransitionFlag, v8::internal::MaybeHandle<v8::internal::Name>, char const*, v8::internal::SimpleTransitionFlag)",93957338930944,93957338931619],["v8::internal::Map::PrepareForDataProperty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::InternalIndex, v8::internal::PropertyConstness, v8::internal::Handle<v8::internal::Object>)",93957338935728,93957338935844],["v8::internal::Map::CopyInsertDescriptor(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Descriptor*, v8::internal::TransitionFlag)",93957338941008,93957338941527],["v8::internal::Map::CompleteInobjectSlackTracking(v8::internal::Isolate*)",93957338942352,93957338942614],["v8::internal::Map::SetShouldBeFastPrototypeMap(v8::internal::Handle<v8::internal::Map>, bool, v8::internal::Isolate*)",93957338942992,93957338943080],["v8::internal::Module::SetStatus(v8::internal::Module::Status)",93957338943984,93957338943998],["v8::internal::Module::ResetGraph(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Module>)",93957338944528,93957338944965],["v8::internal::Module::ResolveExport(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Module>, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String>, v8::internal::MessageLocation, bool, v8::internal::Module::ResolveSet*)",93957338945216,93957338945272],["v8::internal::Module::PrepareInstantiate(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Module>, v8::Local<v8::Context>, v8::MaybeLocal<v8::Module> (*)(v8::Local<v8::Context>, v8::Local<v8::String>, v8::Local<v8::FixedArray>, v8::Local<v8::Module>), v8::MaybeLocal<v8::Module> (*)(v8::Local<v8::Context>, v8::Local<v8::String>, v8::Local<v8::Module>))",93957338945472,93957338945679],["v8::internal::Module::Evaluate(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Module>)",93957338945888,93957338946143],["v8::internal::Module::GetModuleNamespace(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Module>)",93957338946720,93957338949379],["v8::internal::JSModuleNamespace::GetPropertyAttributes(v8::internal::LookupIterator*)",93957338949712,93957338950087],["unsigned int std::__1::__sort3<v8::internal::Module::GetModuleNamespace(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Module>)::$_0&, v8::internal::Handle<v8::internal::String>*>(v8::internal::Handle<v8::internal::String>*, v8::internal::Handle<v8::internal::String>*, v8::internal::Handle<v8::internal::String>*, v8::internal::Module::GetModuleNamespace(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Module>)::$_0&)",93957338951440,93957338951674],["unsigned int std::__1::__sort5<v8::internal::Module::GetModuleNamespace(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Module>)::$_0&, v8::internal::Handle<v8::internal::String>*>(v8::internal::Handle<v8::internal::String>*, v8::internal::Handle<v8::internal::String>*, v8::internal::Handle<v8::internal::String>*, v8::internal::Handle<v8::internal::String>*, v8::internal::Handle<v8::internal::String>*, v8::internal::Module::GetModuleNamespace(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Module>)::$_0&)",93957338951872,93957338952133],["v8::internal::compiler::InstructionSelector::VisitI64x2GtS(v8::internal::compiler::Node*)",93957342167536,93957342168235],["v8::internal::compiler::OperandGenerator::ToConstant(v8::internal::compiler::Node const*)",93957342173696,93957342174026],["v8::internal::compiler::BinopMatcher<v8::internal::compiler::IntMatcher<int, (v8::internal::compiler::IrOpcode::Value)22>, v8::internal::compiler::IntMatcher<int, (v8::internal::compiler::IrOpcode::Value)22> >::SwapInputs()",93957342175808,93957342176120],["v8::internal::compiler::BinopMatcher<v8::internal::compiler::IntMatcher<int, (v8::internal::compiler::IrOpcode::Value)22>, v8::internal::compiler::IntMatcher<int, (v8::internal::compiler::IrOpcode::Value)22> >::BinopMatcher(v8::internal::compiler::Node*, bool)",93957342178736,93957342179177],["v8::internal::compiler::UnwindingInfoWriter::EndInstructionBlock(v8::internal::compiler::InstructionBlock const*)",93957342179792,93957342179972],["v8::internal::compiler::UnwindingInfoWriter::MarkFrameDeconstructed(int)",93957342180128,93957342180227],["v8::internal::FrameDescription::SetCallerFp(unsigned int, long)",93957342180256,93957342180272],["disasm::NameConverter::NameOfAddress(unsigned char*) const",93957342180288,93957342180333],["iswprint",139871564314080,139871564314223],["towupper",139871564314912,139871564315005],["wctrans",139871564315248,139871564315381],["__iswalnum_l",139871564315472,139871564315590],["v8::internal::Deoptimizer::compiled_code() const",93957336386288,93957336386369],["v8::internal::FrameWriter::PushStackJSArguments(v8::internal::TranslatedFrame::iterator&, int)",93957336399840,93957336400096],["std::__1::vector<v8::internal::TranslatedFrame::iterator, std::__1::allocator<v8::internal::TranslatedFrame::iterator> >::__append(unsigned long, v8::internal::TranslatedFrame::iterator const&)",93957336401760,93957336402418],["v8::internal::MaterializedObjectStore::Remove(unsigned long)",93957336403952,93957336404509],["v8::internal::TranslatedValue::NewInt32(v8::internal::TranslatedState*, int)",93957336404576,93957336404605],["v8::internal::TranslatedValue::NewTagged(v8::internal::TranslatedState*, v8::internal::Object)",93957336404640,93957336404670],["v8::internal::TranslatedValue::GetValue()",93957336405184,93957336405547],["v8::internal::TranslatedState::EnsureObjectAllocatedAt(v8::internal::TranslatedValue*)",93957336405600,93957336406212],["v8::internal::Map::GetConstructorFunction(v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Context>)",93957338907376,93957338907504],["v8::internal::Map::TryReplayPropertyTransitions(v8::internal::Isolate*, v8::internal::Map)",93957338919232,93957338920007],["v8::internal::Map::AsElementsKind(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::ElementsKind)",93957338926128,93957338926718],["v8::internal::NormalizedMapCache::Set(v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Map>)",93957338928832,93957338929039],["v8::internal::Map::ShareDescriptor(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::DescriptorArray>, v8::internal::Descriptor*)",93957338929824,93957338930345],["v8::internal::Map::InstallDescriptors(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Map>, v8::internal::InternalIndex, v8::internal::Handle<v8::internal::DescriptorArray>)",93957338932304,93957338932701],["v8::internal::Map::Create(v8::internal::Isolate*, int)",93957338934592,93957338935249],["v8::internal::Map::TransitionToDataProperty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes, v8::internal::PropertyConstness, v8::internal::StoreOrigin)",93957338936416,93957338937932],["v8::internal::Map::TransitionToAccessorProperty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Name>, v8::internal::InternalIndex, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes)",93957338938688,93957338940993],["v8::internal::Map::EquivalentToForNormalization(v8::internal::Map, v8::internal::ElementsKind, v8::internal::PropertyNormalizationMode) const",93957338941536,93957338942060],["v8::internal::GetMinInobjectSlack(v8::internal::Map, void*)",93957338942304,93957338942342],["v8::internal::ShrinkInstanceSize(v8::internal::Map, void*)",93957338942624,93957338942687],["v8::internal::Map::GetOrCreatePrototypeInfo(v8::internal::Handle<v8::internal::Map>, v8::internal::Isolate*)",93957338942704,93957338942977],["v8::internal::Map::GetOrCreatePrototypeChainValidityCell(v8::internal::Handle<v8::internal::Map>, v8::internal::Isolate*)",93957338943088,93957338943903],["v8::internal::NormalizedMapCache::New(v8::internal::Isolate*)",93957338943952,93957338943972],["v8::internal::Module::RecordErrorUsingPendingException(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Module>)",93957338944000,93957338944110],["v8::internal::compiler::InstructionSelector::VisitI32x4ExtAddPairwiseI16x8S(v8::internal::compiler::Node*)",93957342166032,93957342166211],["v8::internal::compiler::InstructionSelector::AlignmentRequirements()",93957342169152,93957342169165],["v8::internal::compiler::AddMatcher<v8::internal::compiler::BinopMatcher<v8::internal::compiler::IntMatcher<long, (v8::internal::compiler::IrOpcode::Value)23>, v8::internal::compiler::IntMatcher<long, (v8::internal::compiler::IrOpcode::Value)23> >, (v8::internal::compiler::IrOpcode::Value)330, (v8::internal::compiler::IrOpcode::Value)332, (v8::internal::compiler::IrOpcode::Value)334, (v8::internal::compiler::IrOpcode::Value)325>::Initialize(v8::internal::compiler::Node*, bool)",93957342173200,93957342173369],["v8::internal::compiler::BinopMatcher<v8::internal::compiler::HeapObjectMatcherImpl<(v8::internal::compiler::IrOpcode::Value)30>, v8::internal::compiler::HeapObjectMatcherImpl<(v8::internal::compiler::IrOpcode::Value)30> >::BinopMatcher(v8::internal::compiler::Node*)",93957342174144,93957342174608],["bool v8::internal::compiler::(anonymous namespace)::TryVisitWordShift<v8::internal::compiler::BinopMatcher<v8::internal::compiler::IntMatcher<long, (v8::internal::compiler::IrOpcode::Value)23>, v8::internal::compiler::IntMatcher<long, (v8::internal::compiler::IrOpcode::Value)23> >, 64>(v8::internal::compiler::InstructionSelector*, v8::internal::compiler::Node*, v8::internal::compiler::ArchOpcode, v8::internal::compiler::FlagsContinuation*)",93957342175264,93957342175799],["v8::internal::compiler::ValueMatcher<unsigned long, (v8::internal::compiler::IrOpcode::Value)23>::ValueMatcher(v8::internal::compiler::Node*)",93957342176128,93957342176329],["v8::internal::compiler::AddMatcher<v8::internal::compiler::BinopMatcher<v8::internal::compiler::IntMatcher<int, (v8::internal::compiler::IrOpcode::Value)22>, v8::internal::compiler::IntMatcher<int, (v8::internal::compiler::IrOpcode::Value)22> >, (v8::internal::compiler::IrOpcode::Value)310, (v8::internal::compiler::IrOpcode::Value)312, (v8::internal::compiler::IrOpcode::Value)314, (v8::internal::compiler::IrOpcode::Value)305>::AddMatcher(v8::internal::compiler::Node*)",93957342178672,93957342178736],["v8::internal::compiler::AddMatcher<v8::internal::compiler::BinopMatcher<v8::internal::compiler::IntMatcher<int, (v8::internal::compiler::IrOpcode::Value)22>, v8::internal::compiler::IntMatcher<int, (v8::internal::compiler::IrOpcode::Value)22> >, (v8::internal::compiler::IrOpcode::Value)310, (v8::internal::compiler::IrOpcode::Value)312, (v8::internal::compiler::IrOpcode::Value)314, (v8::internal::compiler::IrOpcode::Value)305>::Initialize(v8::internal::compiler::Node*, bool)",93957342179184,93957342179620],["iswcntrl",139871564313504,139871564313645],["iswspace",139871564314368,139871564314511],["towlower",139871564314800,139871564314903],["wctype",139871564315008,139871564315161],["v8::internal::Deoptimizer::TraceDeoptMarked(v8::internal::Isolate*)",93957336382208,93957336382380],["v8::internal::Deoptimizer::TraceDeoptBegin(int, v8::internal::BytecodeOffset)",93957336386720,93957336387254],["v8::internal::Deoptimizer::DoComputeConstructStubFrame(v8::internal::TranslatedFrame*, int)",93957336393200,93957336395184],["v8::internal::Deoptimizer::TranslatedValueForWasmReturnKind(v8::base::Optional<v8::internal::wasm::ValueKind>)",93957336400368,93957336400586],["std::__1::deque<v8_inspector::String16, std::__1::allocator<v8_inspector::String16> >::__add_back_capacity()",93957336401328,93957336401749],["v8::internal::MaterializedObjectStore::Get(unsigned long)",93957336402432,93957336402776],["v8::internal::MaterializedObjectStore::EnsureStackEntries(int)",93957336403248,93957336403951],["v8::internal::TranslatedValue::NewFloat(v8::internal::TranslatedState*, v8::internal::Float32)",93957336404512,93957336404541],["v8::internal::ManagedObjectFinalizer(v8::WeakCallbackInfo<void> const&)",93957338894976,93957338895019],["v8::internal::Map::NextFreePropertyIndex() const",93957338911424,93957338911545],["v8::internal::Map::TryUpdate(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>)",93957338917216,93957338917332],["v8::internal::Map::GetOrCreatePrototypeInfo(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Isolate*)",93957338921552,93957338921842],["v8::internal::Map::TransitionElementsTo(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::ElementsKind)",93957338924672,93957338925388],["v8::internal::Map::OnlyHasSimpleProperties() const",93957338926848,93957338926906],["v8::internal::NormalizedMapCache::Get(v8::internal::Handle<v8::internal::Map>, v8::internal::ElementsKind, v8::internal::PropertyNormalizationMode)",93957338928432,93957338928632],["v8::internal::Map::Copy(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, char const*)",93957338929216,93957338929388],["v8::internal::Map::CopyDropDescriptors(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>)",93957338929648,93957338929813],["v8::internal::Map::ConnectTransition(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Name>, v8::internal::SimpleTransitionFlag)",93957338930352,93957338930943],["v8::internal::Map::AddMissingTransitions(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::DescriptorArray>)",93957338931632,93957338932294],["v8::internal::Map::SetInstanceDescriptors(v8::internal::Isolate*, v8::internal::DescriptorArray, int)",93957338932704,93957338932930],["v8::internal::Map::AsLanguageMode(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957338933296,93957338934582],["v8::internal::Map::CopyForPreventExtensions(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::PropertyAttributes, v8::internal::Handle<v8::internal::Symbol>, char const*, bool)",93957338935264,93957338935718],["v8::internal::(anonymous namespace)::UpdateDescriptorForValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::InternalIndex, v8::internal::PropertyConstness, v8::internal::Handle<v8::internal::Object>)",93957338935856,93957338936406],["v8::internal::Map::TooManyFastProperties(v8::internal::StoreOrigin) const",93957338937936,93957338938400],["v8::internal::compiler::InstructionSelector::VisitI8x16Shuffle(v8::internal::compiler::Node*)",93957342162704,93957342165017],["v8::internal::compiler::InstructionSelector::VisitI8x16Popcnt(v8::internal::compiler::Node*)",93957342166752,93957342166959],["v8::internal::compiler::InstructionSelector::VisitI64x2Abs(v8::internal::compiler::Node*)",93957342168896,93957342169092],["v8::internal::compiler::ValueMatcher<long, (v8::internal::compiler::IrOpcode::Value)23>::ValueMatcher(v8::internal::compiler::Node*)",93957342170288,93957342170490],["v8::internal::compiler::AddMatcher<v8::internal::compiler::BinopMatcher<v8::internal::compiler::IntMatcher<long, (v8::internal::compiler::IrOpcode::Value)23>, v8::internal::compiler::IntMatcher<long, (v8::internal::compiler::IrOpcode::Value)23> >, (v8::internal::compiler::IrOpcode::Value)330, (v8::internal::compiler::IrOpcode::Value)332, (v8::internal::compiler::IrOpcode::Value)334, (v8::internal::compiler::IrOpcode::Value)325>::AddMatcher(v8::internal::compiler::Node*)",93957342173008,93957342173190],["v8::internal::compiler::BinopMatcher<v8::internal::compiler::IntMatcher<long, (v8::internal::compiler::IrOpcode::Value)23>, v8::internal::compiler::IntMatcher<long, (v8::internal::compiler::IrOpcode::Value)23> >::SwapInputs()",93957342173376,93957342173692],["v8::internal::compiler::(anonymous namespace)::AddDisplacementToAddressingMode(v8::internal::compiler::AddressingMode)",93957342174032,93957342174134],["v8::internal::compiler::(anonymous namespace)::MachineTypeForNarrow(v8::internal::compiler::Node*, v8::internal::compiler::Node*)",93957342174608,93957342174894],["__fentry__",139871564312976,139871564313068],["iswlower",139871564313792,139871564313935],["iswpunct",139871564314224,139871564314365],["iswupper",139871564314512,139871564314647],["v8::internal::Deoptimizer::New(unsigned long, v8::internal::DeoptimizeKind, unsigned int, unsigned long, int, v8::internal::Isolate*)",93957336378464,93957336378567],["v8::internal::Deoptimizer::MessageFor(v8::internal::DeoptimizeKind, bool)",93957336384688,93957336384767],["v8::internal::Deoptimizer::GetDeoptWithResumeBuiltin(v8::internal::DeoptimizeReason)",93957336386624,93957336386654],["v8::internal::Deoptimizer::TraceMarkForDeoptimization(v8::internal::Code, char const*)",93957336387648,93957336388245],["v8::internal::Deoptimizer::DoComputeArgumentsAdaptorFrame(v8::internal::TranslatedFrame*, int)",93957336392304,93957336393193],["v8::internal::Deoptimizer::DoComputeBuiltinContinuation(v8::internal::TranslatedFrame*, int, v8::internal::BuiltinContinuationMode)",93957336395184,93957336399838],["v8::internal::FrameWriter::PushTranslatedValue(v8::internal::TranslatedFrame::iterator const&, char const*)",93957336400096,93957336400368],["v8::internal::Deoptimizer::MaterializeHeapObjects()",93957336400592,93957336401137],["v8::internal::LookupIterator::HolderIsReceiver() const",93957338890784,93957338890812],["v8::internal::MapUpdater::ConstructNewMapWithIntegrityLevelTransition()",93957338901440,93957338901751],["v8::internal::Map::PrintGeneralization(v8::internal::Isolate*, _IO_FILE*, char const*, v8::internal::InternalIndex, int, int, bool, v8::internal::Representation, v8::internal::Representation, v8::internal::PropertyConstness, v8::internal::PropertyConstness, v8::internal::MaybeHandle<v8::internal::FieldType>, v8::internal::MaybeHandle<v8::internal::Object>, v8::internal::MaybeHandle<v8::internal::FieldType>, v8::internal::MaybeHandle<v8::internal::Object>)",93957338909664,93957338910623],["v8::internal::Map::DeprecateTransitionTree(v8::internal::Isolate*)",93957338912656,93957338913258],["v8::internal::Map::GeneralizeField(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::InternalIndex, v8::internal::PropertyConstness, v8::internal::Representation, v8::internal::Handle<v8::internal::FieldType>)",93957338915712,93957338917151],["v8::internal::Map::EquivalentToForTransition(v8::internal::Map) const",93957338918592,93957338918913],["v8::internal::Map::EnsureDescriptorSlack(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, int)",93957338920096,93957338920704],["v8::internal::Map::TransitionToPrototype(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::HeapObject>)",93957338922160,93957338922746],["v8::internal::Map::IsMapInArrayPrototypeChain(v8::internal::Isolate*) const",93957338924400,93957338924658],["v8::internal::Map::CopyAsElementsKind(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::ElementsKind, v8::internal::TransitionFlag)",93957338925392,93957338926115],["v8::internal::Map::NumberOfEnumerableProperties() const",93957338926720,93957338926835],["v8::internal::Map::MayHaveReadOnlyElementsInPrototypeChain(v8::internal::Isolate*)",93957338926912,93957338927312],["v8::internal::Map::Normalize(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::ElementsKind, v8::internal::PropertyNormalizationMode, char const*)",93957338927728,93957338928425],["v8::internal::Map::CopyNormalized(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::PropertyNormalizationMode)",93957338928640,93957338928817],["v8::internal::Map::TransitionToImmutableProto(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>)",93957338929040,93957338929210],["v8::internal::Map::CopyInitialMapNormalized(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::PropertyNormalizationMode)",93957338929392,93957338929402],["v8::internal::compiler::InstructionSelector::VisitF64x2Qfms(v8::internal::compiler::Node*)",93957342160032,93957342160346],["v8::internal::compiler::(anonymous namespace)::VisitPminOrPmax(v8::internal::compiler::InstructionSelector*, v8::internal::compiler::Node*, v8::internal::compiler::ArchOpcode)",93957342165712,93957342165981],["v8::internal::compiler::InstructionSelector::VisitI16x8ExtAddPairwiseI8x16S(v8::internal::compiler::Node*)",93957342166416,93957342166559],["v8::internal::compiler::InstructionSelector::VisitI32x4TruncSatF64x2SZero(v8::internal::compiler::Node*)",93957342167136,93957342167332],["v8::internal::compiler::InstructionSelector::VisitI64x2GeS(v8::internal::compiler::Node*)",93957342168240,93957342168890],["v8::internal::compiler::InstructionSelector::SupportedMachineOperatorFlags()",93957342169104,93957342169150],["v8::internal::compiler::X64OperandGenerator::GenerateMemoryOperandInputs(v8::internal::compiler::Node*, int, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::DisplacementMode, v8::internal::compiler::InstructionOperand*, unsigned long*)",93957342169168,93957342170286],["v8::internal::compiler::BaseWithIndexAndDisplacementMatcher<v8::internal::compiler::AddMatcher<v8::internal::compiler::BinopMatcher<v8::internal::compiler::IntMatcher<long, (v8::internal::compiler::IrOpcode::Value)23>, v8::internal::compiler::IntMatcher<long, (v8::internal::compiler::IrOpcode::Value)23> >, (v8::internal::compiler::IrOpcode::Value)330, (v8::internal::compiler::IrOpcode::Value)332, (v8::internal::compiler::IrOpcode::Value)334, (v8::internal::compiler::IrOpcode::Value)325> >::Initialize(v8::internal::compiler::Node*, v8::base::Flags<v8::internal::compiler::AddressOption, unsigned char>)",93957342170496,93957342172821],["profil",139871564310496,139871564310960],["iswalpha",139871564313216,139871564313359],["iswdigit",139871564313648,139871564313785],["iswgraph",139871564313936,139871564314079],["v8::internal::(anonymous namespace)::TokensCompareOutput::AddChunk(int, int, int, int)",93957336376032,93957336376116],["v8::internal::(anonymous namespace)::ActivationsFinder::VisitThread(v8::internal::Isolate*, v8::internal::ThreadLocalTop*)",93957336380336,93957336380817],["v8::internal::Deoptimizer::ComputeOutputFrames(v8::internal::Deoptimizer*)",93957336383264,93957336383274],["v8::internal::Deoptimizer::should_reuse_code() const",93957336386128,93957336386185],["v8::internal::Deoptimizer::~Deoptimizer()",93957336386384,93957336386610],["v8::internal::Deoptimizer::GetDeoptimizationEntry(v8::internal::DeoptimizeKind)",93957336386656,93957336386718],["v8::internal::Deoptimizer::GetDeoptInfo(v8::internal::Code, unsigned long)",93957336387264,93957336387638],["v8::internal::Deoptimizer::TraceEvictFromOptimizedCodeCache(v8::internal::SharedFunctionInfo, char const*)",93957336388256,93957336388496],["v8::internal::LookupIterator::State v8::internal::LookupIterator::LookupInSpecialHolder<false>(v8::internal::Map, v8::internal::JSReceiver)",93957338879744,93957338880263],["v8::internal::LookupIterator::GetInterceptorForFailedAccessCheck() const",93957338892816,93957338892965],["v8::internal::MapUpdater::TryReconfigureToDataFieldInplace()",93957338896128,93957338896639],["v8::internal::MapUpdater::GetOrComputeFieldType(v8::internal::InternalIndex, v8::internal::PropertyLocation, v8::internal::Representation) const",93957338902864,93957338903147],["v8::internal::Map::GetInstanceTypeMap(v8::internal::ReadOnlyRoots, v8::internal::InstanceType)",93957338907984,93957338908688],["v8::internal::Map::UnwrapFieldType(v8::internal::MaybeObject)",93957338910768,93957338910803],["v8::internal::Map::NumberOfFields() const",93957338912080,93957338912260],["v8::internal::Map::FindRootMap(v8::internal::Isolate*) const",93957338913616,93957338913665],["v8::internal::Map::GeneralizeFieldType(v8::internal::Representation, v8::internal::Handle<v8::internal::FieldType>, v8::internal::Representation, v8::internal::Handle<v8::internal::FieldType>, v8::internal::Isolate*)",93957338915536,93957338915709],["v8::internal::Map::ReconfigureElementsKind(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::ElementsKind)",93957338917152,93957338917211],["v8::internal::Map::TryUpdateSlow(v8::internal::Isolate*, v8::internal::Map)",93957338917344,93957338918591],["v8::internal::Map::LookupElementsTransitionMap(v8::internal::Isolate*, v8::internal::ElementsKind)",93957338918928,93957338919225],["v8::internal::Map::Update(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>)",93957338920016,93957338920084],["v8::internal::Map::GetObjectCreateMap(v8::internal::Isolate*, v8::internal::Handle<v8::internal::HeapObject>)",93957338920704,93957338921538],["v8::internal::Map::SetPrototype(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::HeapObject>, bool)",93957338921856,93957338922147],["v8::internal::Map::TryGetObjectCreateMap(v8::internal::Isolate*, v8::internal::Handle<v8::internal::HeapObject>)",93957338922752,93957338923272],["v8::internal::compiler::InstructionSelector::VisitS128Xor(v8::internal::compiler::Node*)",93957342158208,93957342158487],["v8::internal::compiler::InstructionSelector::VisitI64x2Mul(v8::internal::compiler::Node*)",93957342161296,93957342161594],["v8::internal::compiler::InstructionSelector::VisitI8x16Swizzle(v8::internal::compiler::Node*)",93957342165216,93957342165692],["v8::internal::compiler::InstructionSelector::VisitF64x2Pmin(v8::internal::compiler::Node*)",93957342166000,93957342166015],["v8::internal::compiler::InstructionSelector::VisitI32x4ExtAddPairwiseI16x8U(v8::internal::compiler::Node*)",93957342166224,93957342166403],["v8::internal::compiler::InstructionSelector::VisitI16x8ExtAddPairwiseI8x16U(v8::internal::compiler::Node*)",93957342166560,93957342166739],["v8::internal::compiler::InstructionSelector::VisitF64x2ConvertLowI32x4U(v8::internal::compiler::Node*)",93957342166960,93957342167133],["v8::internal::compiler::InstructionSelector::VisitI32x4TruncSatF64x2UZero(v8::internal::compiler::Node*)",93957342167344,93957342167523],["shmctl",139871564307904,139871564307938],["__profile_frequency",139871564312864,139871564312875],["iswalnum",139871564313072,139871564313213],["iswblank",139871564313360,139871564313501],["v8::internal::(anonymous namespace)::LineArrayCompareInput::SetSubrange1(int, int)",93957336375248,93957336375260],["v8::internal::DeoptimizeReasonToString(v8::internal::DeoptimizeReason)",93957336377168,93957336377187],["v8::internal::Deoptimizer::DebuggerInspectableFrame(v8::internal::JavaScriptFrame*, int, v8::internal::Isolate*)",93957336378752,93957336379331],["v8::internal::Deoptimizer::TraceDeoptAll(v8::internal::Isolate*)",93957336381504,93957336381676],["v8::internal::Deoptimizer::DeoptimizeFunction(v8::internal::JSFunction, v8::internal::Code)",93957336382384,93957336383253],["v8::internal::Deoptimizer::DoComputeOutputFrames()",93957336383280,93957336384673],["v8::internal::Deoptimizer::Deoptimizer(v8::internal::Isolate*, v8::internal::JSFunction, v8::internal::DeoptimizeKind, unsigned int, unsigned long, int)",93957336384768,93957336386126],["v8::internal::Deoptimizer::function() const",93957336386192,93957336386273],["v8::internal::ArrayBoilerplateDescription::BriefPrintDetails(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)",93957338874928,93957338875077],["v8::internal::LookupIterator::PrepareTransitionToDataProperty(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes, v8::internal::StoreOrigin)",93957338885680,93957338886140],["v8::internal::LookupIterator::GetFieldIndex() const",93957338891664,93957338891926],["v8::internal::ConcurrentLookupIterator::TryGetOwnCowElement(v8::internal::Isolate*, v8::internal::FixedArray, v8::internal::ElementsKind, int, unsigned long)",93957338893280,93957338893369],["v8::internal::MapUpdater::MapUpdater(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>)",93957338895104,93957338895324],["v8::internal::MapUpdater::FindTargetMap()",93957338897536,93957338899889],["v8::internal::MapUpdater::Update()",93957338901856,93957338901920],["v8::internal::MapUpdater::FindSplitMap(v8::internal::Handle<v8::internal::DescriptorArray>)",93957338906592,93957338907262],["v8::internal::Map::PrintReconfiguration(v8::internal::Isolate*, _IO_FILE*, v8::internal::InternalIndex, v8::internal::PropertyKind, v8::internal::PropertyAttributes)",93957338907504,93957338907980],["v8::internal::Map::GetVisitorId(v8::internal::Map)",93957338908688,93957338909661],["v8::internal::Map::WrapFieldType(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FieldType>)",93957338910624,93957338910768],["v8::internal::Map::CopyWithField(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::FieldType>, v8::internal::PropertyAttributes, v8::internal::PropertyConstness, v8::internal::Representation, v8::internal::TransitionFlag)",93957338910816,93957338911422],["v8::internal::Map::CopyAddDescriptor(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Descriptor*, v8::internal::TransitionFlag)",93957338911552,93957338912067],["v8::internal::Map::InstancesNeedRewriting(v8::internal::Map, int, int, int, int*) const",93957338912272,93957338912656],["v8::internal::Map::ReplaceDescriptors(v8::internal::Isolate*, v8::internal::DescriptorArray)",93957338913264,93957338913611],["v8::internal::Map::FindFieldOwner(v8::internal::Isolate*, v8::internal::InternalIndex) const",93957338913680,93957338913776],["v8::internal::compiler::InstructionSelector::VisitI8x16GtS(v8::internal::compiler::Node*)",93957342155904,93957342156183],["v8::internal::compiler::InstructionSelector::VisitF64x2Abs(v8::internal::compiler::Node*)",93957342159232,93957342159385],["v8::internal::compiler::InstructionSelector::VisitF32x4Qfms(v8::internal::compiler::Node*)",93957342160672,93957342160986],["v8::internal::compiler::InstructionSelector::VisitI32x4UConvertF32x4(v8::internal::compiler::Node*)",93957342161760,93957342162023],["v8::internal::compiler::(anonymous namespace)::TryMatch16x8HalfShuffle(unsigned char*, unsigned char*)",93957342165024,93957342165201],["v8::internal::compiler::InstructionSelector::VisitF32x4Pmin(v8::internal::compiler::Node*)",93957342165696,93957342165711],["v8::internal::compiler::InstructionSelector::VisitF32x4Pmax(v8::internal::compiler::Node*)",93957342165984,93957342165999],["v8::internal::compiler::InstructionSelector::VisitF64x2Pmax(v8::internal::compiler::Node*)",93957342166016,93957342166031],["semtimedop",139871564307712,139871564307754],["__monstartup",139871564309424,139871564309905],["sprofil",139871564311664,139871564312863],["_mcount",139871564312880,139871564312971],["v8::internal::(anonymous namespace)::FunctionDataMap::VisitThread(v8::internal::Isolate*, v8::internal::ThreadLocalTop*)",93957336373264,93957336373866],["v8::internal::(anonymous namespace)::TokenizingLineArrayCompareOutput::SetSubrange2(int, int)",93957336375808,93957336375817],["v8::internal::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::DeoptimizeReason)",93957336376352,93957336377148],["std::__1::vector<unsigned long, std::__1::allocator<unsigned long> >::__append(unsigned long)",93957336377856,93957336378164],["v8::internal::Deoptimizer::Grab(v8::internal::Isolate*)",93957336378576,93957336378741],["v8::internal::Deoptimizer::DeoptimizeMarkedCodeForContext(v8::internal::NativeContext)",93957336379344,93957336380324],["v8::internal::Deoptimizer::DeoptimizeAll(v8::internal::Isolate*)",93957336380832,93957336381499],["v8::internal::Deoptimizer::DeoptimizeMarkedCode(v8::internal::Isolate*)",93957336381680,93957336382203],["v8::base::TemplateHashMapEntry<v8::internal::Handle<v8::internal::Name>, int>* v8::base::TemplateHashMapImpl<v8::internal::Handle<v8::internal::Name>, int, v8::internal::(anonymous namespace)::NameComparator, v8::internal::ZoneAllocationPolicy>::Probe<v8::internal::Handle<v8::internal::Name> >(v8::internal::Handle<v8::internal::Name> const&, unsigned int) const",93957338861184,93957338861488],["void v8::internal::LookupIterator::NextInternal<true>(v8::internal::Map, v8::internal::JSReceiver)",93957338877392,93957338877779],["v8::internal::LookupIterator::PrepareForDataProperty(v8::internal::Handle<v8::internal::Object>)",93957338882416,93957338883423],["v8::internal::LookupIterator::State v8::internal::LookupIterator::LookupInRegularHolder<false>(v8::internal::Map, v8::internal::JSReceiver)",93957338888768,93957338889510],["v8::internal::LookupIterator::FetchValue(v8::internal::AllocationPolicy) const",93957338890896,93957338891642],["v8::internal::LookupIterator::GetDataValue(v8::internal::AllocationPolicy) const",93957338892048,93957338892058],["v8::internal::LookupIterator::LookupCachedProperty(v8::internal::Handle<v8::internal::AccessorPair>)",93957338892992,93957338893194],["v8::internal::LookupIterator::State v8::internal::LookupIterator::LookupInRegularHolder<true>(v8::internal::Map, v8::internal::JSReceiver)",93957338893760,93957338894748],["v8::internal::(anonymous namespace)::ManagedObjectFinalizerSecondPass(v8::WeakCallbackInfo<void> const&)",93957338895024,93957338895099],["v8::internal::MapUpdater::ReconfigureToDataField(v8::internal::InternalIndex, v8::internal::PropertyAttributes, v8::internal::PropertyConstness, v8::internal::Representation, v8::internal::Handle<v8::internal::FieldType>)",93957338895328,93957338896122],["v8::internal::MapUpdater::FindRootMap()",93957338896640,93957338897524],["v8::internal::MapUpdater::ConstructNewMap()",93957338899904,93957338901440],["v8::internal::MapUpdater::ReconfigureElementsKind(v8::internal::ElementsKind)",93957338901760,93957338901847],["v8::internal::MapUpdater::TrySaveIntegrityLevelTransitions()",93957338901920,93957338902860],["v8::internal::MapUpdater::BuildDescriptorArray()",93957338903152,93957338906581],["v8::internal::Map::GetPrototypeChainRootMap(v8::internal::Isolate*) const",93957338907264,93957338907375],["v8::internal::compiler::InstructionSelector::VisitI8x16UConvertI16x8(v8::internal::compiler::Node*)",93957342153600,93957342153879],["v8::internal::compiler::InstructionSelector::VisitI8x16MaxU(v8::internal::compiler::Node*)",93957342157056,93957342157335],["v8::internal::compiler::InstructionSelector::VisitS128Select(v8::internal::compiler::Node*)",93957342158640,93957342158976],["v8::internal::compiler::InstructionSelector::VisitF32x4UConvertI32x4(v8::internal::compiler::Node*)",93957342159552,93957342159705],["v8::internal::compiler::InstructionSelector::VisitF32x4Qfma(v8::internal::compiler::Node*)",93957342160352,93957342160666],["v8::internal::compiler::InstructionSelector::VisitI64x2ShrS(v8::internal::compiler::Node*)",93957342160992,93957342161284],["v8::internal::compiler::InstructionSelector::VisitI32x4SConvertF32x4(v8::internal::compiler::Node*)",93957342161600,93957342161753],["v8::internal::compiler::InstructionSelector::VisitI8x16ShrS(v8::internal::compiler::Node*)",93957342162032,93957342162690],["msgctl",139871564307424,139871564307458],["shmdt",139871564307808,139871564307842],["moncontrol",139871564309312,139871564309409],["_mcleanup",139871564309984,139871564310060],["void std::__1::vector<v8::internal::(anonymous namespace)::SourcePositionEvent, std::__1::allocator<v8::internal::(anonymous namespace)::SourcePositionEvent> >::emplace_back<v8::internal::FunctionLiteral*&, bool>(v8::internal::FunctionLiteral*&, bool&&)",93957336366224,93957336366601],["std::__1::__tree<std::__1::__value_type<std::__1::pair<int, int>, v8::internal::(anonymous namespace)::FunctionData>, std::__1::__map_value_compare<std::__1::pair<int, int>, std::__1::__value_type<std::__1::pair<int, int>, v8::internal::(anonymous namespace)::FunctionData>, std::__1::less<std::__1::pair<int, int> >, true>, std::__1::allocator<std::__1::__value_type<std::__1::pair<int, int>, v8::internal::(anonymous namespace)::FunctionData> > >::destroy(std::__1::__tree_node<std::__1::__value_type<std::__1::pair<int, int>, v8::internal::(anonymous namespace)::FunctionData>, void*>*)",93957336374656,93957336374743],["v8::internal::(anonymous namespace)::TokenizingLineArrayCompareOutput::AddChunk(int, int, int, int)",93957336375280,93957336375784],["v8::internal::(anonymous namespace)::TokensCompareInput::GetLength2()",93957336375840,93957336375849],["v8::internal::(anonymous namespace)::Differencer::CompareUpToTail(int, int)",93957336376128,93957336376340],["v8::internal::hash_value(v8::internal::DeoptimizeReason)",93957336377152,93957336377160],["v8::internal::DeoptimizedFrameInfo::DeoptimizedFrameInfo(v8::internal::TranslatedState*, std::__1::__wrap_iter<v8::internal::TranslatedFrame*>, v8::internal::Isolate*)",93957336377200,93957336377850],["v8::internal::Deoptimizer::FindDeoptimizingCode(unsigned long)",93957336378176,93957336378460],["v8::internal::KeyAccumulator::CollectPrivateNames(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::JSObject>)",93957338852592,93957338853021],["v8::internal::Handle<v8::internal::ClassBoilerplate> v8::internal::ClassBoilerplate::BuildClassBoilerplate<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::ClassLiteral*)",93957338867824,93957338869926],["v8::internal::Handle<v8::internal::SwissNameDictionary> v8::internal::SwissNameDictionary::Add<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SwissNameDictionary>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyDetails, v8::internal::InternalIndex*)",93957338875600,93957338876009],["void v8::internal::LookupIterator::RestartInternal<false>(v8::internal::LookupIterator::InterceptorState)",93957338878400,93957338878428],["v8::internal::LookupIterator::HasAccess() const",93957338880720,93957338880832],["v8::internal::LookupIterator::ReconfigureDataProperty(v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes)",93957338884176,93957338885262],["v8::internal::LookupIterator::Delete()",93957338887264,93957338887698],["v8::internal::AccessorPair::SetComponents(v8::internal::Object, v8::internal::Object)",93957338889536,93957338889842],["v8::internal::LookupIterator::HolderIsReceiverOrHiddenPrototype() const",93957338890816,93957338890892],["v8::internal::LookupIterator::GetAccessorIndex() const",93957338891648,93957338891657],["v8::internal::LookupIterator::GetPropertyCell() const",93957338891936,93957338892048],["v8::internal::JSObject::WriteToField(v8::internal::InternalIndex, v8::internal::PropertyDetails, v8::internal::Object)",93957338892064,93957338892807],["v8::internal::LookupIterator::TryLookupCachedProperty(v8::internal::Handle<v8::internal::AccessorPair>)",93957338892976,93957338892986],["v8::internal::LookupIterator::TryLookupCachedProperty()",93957338893200,93957338893274],["v8::internal::ConcurrentLookupIterator::TryGetOwnConstantElement(v8::internal::Object*, v8::internal::Isolate*, v8::internal::LocalIsolate*, v8::internal::JSObject, v8::internal::FixedArrayBase, v8::internal::ElementsKind, unsigned long)",93957338893376,93957338893757],["bool v8::internal::LookupIterator::SkipInterceptor<false>(v8::internal::JSObject)",93957338894752,93957338894969],["v8::internal::compiler::InstructionSelector::VisitI16x8MaxU(v8::internal::compiler::Node*)",93957342151296,93957342151575],["v8::internal::compiler::InstructionSelector::VisitI8x16SubSatS(v8::internal::compiler::Node*)",93957342154752,93957342155031],["v8::internal::compiler::InstructionSelector::VisitI8x16SubSatU(v8::internal::compiler::Node*)",93957342156480,93957342156759],["v8::internal::compiler::InstructionSelector::VisitS128And(v8::internal::compiler::Node*)",93957342157632,93957342157911],["v8::internal::compiler::InstructionSelector::VisitV128AnyTrue(v8::internal::compiler::Node*)",93957342158496,93957342158639],["v8::internal::compiler::InstructionSelector::VisitS128AndNot(v8::internal::compiler::Node*)",93957342158976,93957342159227],["v8::internal::compiler::InstructionSelector::VisitF64x2Neg(v8::internal::compiler::Node*)",93957342159392,93957342159545],["v8::internal::compiler::InstructionSelector::VisitF64x2Qfma(v8::internal::compiler::Node*)",93957342159712,93957342160026],["ftok",139871564306896,139871564307008],["semget",139871564307488,139871564307522],["shmat",139871564307760,139871564307796],["shmget",139871564307856,139871564307898],["v8::internal::AstTraversalVisitor<v8::internal::(anonymous namespace)::CollectFunctionLiterals>::VisitProperty(v8::internal::Property*)",93957336364624,93957336364694],["unsigned int std::__1::__sort5<bool (*&)(v8::internal::(anonymous namespace)::SourcePositionEvent const&, v8::internal::(anonymous namespace)::SourcePositionEvent const&), v8::internal::(anonymous namespace)::SourcePositionEvent*>(v8::internal::(anonymous namespace)::SourcePositionEvent*, v8::internal::(anonymous namespace)::SourcePositionEvent*, v8::internal::(anonymous namespace)::SourcePositionEvent*, v8::internal::(anonymous namespace)::SourcePositionEvent*, v8::internal::(anonymous namespace)::SourcePositionEvent*, bool (*&)(v8::internal::(anonymous namespace)::SourcePositionEvent const&, v8::internal::(anonymous namespace)::SourcePositionEvent const&))",93957336369440,93957336370046],["void std::__1::vector<v8::internal::Handle<v8::internal::JSFunction>, std::__1::allocator<v8::internal::Handle<v8::internal::JSFunction> > >::__emplace_back_slow_path<v8::internal::JSFunction&, v8::internal::Isolate*&>(v8::internal::JSFunction&, v8::internal::Isolate*&)",93957336373920,93957336374261],["v8::internal::(anonymous namespace)::LineArrayCompareInput::GetLength2()",93957336374768,93957336374777],["v8::internal::(anonymous namespace)::LineArrayCompareInput::SetSubrange2(int, int)",93957336375264,93957336375276],["v8::internal::(anonymous namespace)::TokenizingLineArrayCompareOutput::SetSubrange1(int, int)",93957336375792,93957336375801],["v8::internal::RegExpGroup::max_match()",93957336375824,93957336375833],["v8::internal::(anonymous namespace)::TokensCompareInput::Equals(int, int)",93957336375856,93957336376018],["v8::internal::FastKeyAccumulator::GetKeysFast(v8::internal::GetKeysConversion)",93957338837712,93957338838103],["bool std::__1::__insertion_sort_incomplete<v8::internal::EnumIndexComparator<v8::internal::GlobalDictionary>&, v8::internal::AtomicSlot>(v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::EnumIndexComparator<v8::internal::GlobalDictionary>&)",93957338856944,93957338857522],["void v8::internal::(anonymous namespace)::AddToDictionaryTemplate<v8::internal::LocalIsolate, v8::internal::NameDictionary, v8::internal::Handle<v8::internal::Name> >(v8::internal::LocalIsolate*, v8::internal::Handle<v8::internal::NameDictionary>, v8::internal::Handle<v8::internal::Name>, int, v8::internal::ClassBoilerplate::ValueKind, v8::internal::Smi)",93957338863296,93957338864712],["v8::internal::Handle<v8::internal::ClassBoilerplate> v8::internal::ClassBoilerplate::BuildClassBoilerplate<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*, v8::internal::ClassLiteral*)",93957338871328,93957338873523],["v8::internal::AccessorPair::set(v8::internal::AccessorComponent, v8::internal::Object)",93957338875264,93957338875451],["v8::internal::DescriptorLookupCache::Clear()",93957338876528,93957338877213],["void v8::internal::LookupIterator::NextInternal<false>(v8::internal::Map, v8::internal::JSReceiver)",93957338877968,93957338878355],["v8::internal::LookupIterator::Next()",93957338878816,93957338878984],["v8::internal::LookupIterator::GetRootForNonJSReceiver(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, unsigned long)",93957338880272,93957338880719],["v8::internal::LookupIterator::InternalUpdateProtector(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Name>)",93957338880832,93957338882401],["v8::internal::LookupIterator::IsConstFieldValueEqualTo(v8::internal::Object) const",93957338883424,93957338884176],["v8::internal::LookupIterator::WriteDataValue(v8::internal::Handle<v8::internal::Object>, bool)",93957338885264,93957338885678],["v8::internal::LookupIterator::ApplyTransitionToDataProperty(v8::internal::Handle<v8::internal::JSReceiver>)",93957338886144,93957338887252],["v8::internal::LookupIterator::TransitionToAccessorProperty(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes)",93957338887712,93957338888768],["v8::internal::LookupIterator::GetAccessors() const",93957338889520,93957338889532],["v8::internal::LookupIterator::TransitionToAccessorPair(v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes)",93957338889856,93957338890775],["v8::internal::compiler::InstructionSelector::VisitI16x8Mul(v8::internal::compiler::Node*)",93957342148992,93957342149271],["v8::internal::compiler::InstructionSelector::VisitI16x8ExtMulLowI8x16U(v8::internal::compiler::Node*)",93957342152448,93957342152727],["v8::internal::compiler::InstructionSelector::VisitI8x16AddSatS(v8::internal::compiler::Node*)",93957342154176,93957342154455],["v8::internal::compiler::InstructionSelector::VisitI8x16MaxS(v8::internal::compiler::Node*)",93957342155328,93957342155607],["v8::internal::compiler::InstructionSelector::VisitI8x16AddSatU(v8::internal::compiler::Node*)",93957342156192,93957342156471],["v8::internal::compiler::InstructionSelector::VisitI8x16MinU(v8::internal::compiler::Node*)",93957342156768,93957342157047],["v8::internal::compiler::InstructionSelector::VisitI8x16RoundingAverageU(v8::internal::compiler::Node*)",93957342157344,93957342157623],["v8::internal::compiler::InstructionSelector::VisitS128Or(v8::internal::compiler::Node*)",93957342157920,93957342158199],["recvmmsg",139871564306432,139871564306603],["__libc_msgrcv",139871564307184,139871564307365],["semop",139871564307472,139871564307479],["semctl",139871564307536,139871564307704],["v8::internal::AstTraversalVisitor<v8::internal::(anonymous namespace)::CollectFunctionLiterals>::VisitSwitchStatement(v8::internal::SwitchStatement*)",93957336363680,93957336363847],["v8::internal::AstTraversalVisitor<v8::internal::(anonymous namespace)::CollectFunctionLiterals>::VisitConditional(v8::internal::Conditional*)",93957336365456,93957336365556],["v8::internal::(anonymous namespace)::SourcePositionEvent::LessThan(v8::internal::(anonymous namespace)::SourcePositionEvent const&, v8::internal::(anonymous namespace)::SourcePositionEvent const&)",93957336366992,93957336367180],["std::__1::unordered_map<v8::internal::FunctionLiteral*, v8::internal::(anonymous namespace)::ChangeState, std::__1::hash<v8::internal::FunctionLiteral*>, std::__1::equal_to<v8::internal::FunctionLiteral*>, std::__1::allocator<std::__1::pair<v8::internal::FunctionLiteral* const, v8::internal::(anonymous namespace)::ChangeState> > >::operator[](v8::internal::FunctionLiteral* const&)",93957336371280,93957336372345],["v8::internal::(anonymous namespace)::FunctionDataMap::~FunctionDataMap()",93957336373872,93957336373918],["std::__1::__hash_const_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::wasm::WasmCode const*, std::__1::unique_ptr<v8::internal::wasm::DebugSideTable, std::__1::default_delete<v8::internal::wasm::DebugSideTable> > >, void*>*> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::wasm::WasmCode const*, std::__1::unique_ptr<v8::internal::wasm::DebugSideTable, std::__1::default_delete<v8::internal::wasm::DebugSideTable> > >, std::__1::__unordered_map_hasher<v8::internal::wasm::WasmCode const*, std::__1::__hash_value_type<v8::internal::wasm::WasmCode const*, std::__1::unique_ptr<v8::internal::wasm::DebugSideTable, std::__1::default_delete<v8::internal::wasm::DebugSideTable> > >, std::__1::hash<v8::internal::wasm::WasmCode const*>, std::__1::equal_to<v8::internal::wasm::WasmCode const*>, true>, std::__1::__unordered_map_equal<v8::internal::wasm::WasmCode const*, std::__1::__hash_value_type<v8::internal::wasm::WasmCode const*, std::__1::unique_ptr<v8::internal::wasm::DebugSideTable, std::__1::default_delete<v8::internal::wasm::DebugSideTable> > >, std::__1::equal_to<v8::internal::wasm::WasmCode const*>, std::__1::hash<v8::internal::wasm::WasmCode const*>, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::wasm::WasmCode const*, std::__1::unique_ptr<v8::internal::wasm::DebugSideTable, std::__1::default_delete<v8::internal::wasm::DebugSideTable> > > > >::find<v8::internal::wasm::WasmCode const*>(v8::internal::wasm::WasmCode const* const&) const",93957336374272,93957336374646],["v8::internal::(anonymous namespace)::LineArrayCompareInput::GetLength1()",93957336374752,93957336374761],["v8::internal::(anonymous namespace)::LineArrayCompareInput::Equals(int, int)",93957336374784,93957336375241],["v8::internal::JSSegments::CreateSegmentDataObject(v8::internal::Isolate*, v8::internal::JSSegmenter::Granularity, icu_68::BreakIterator*, icu_68::UnicodeString const&, int, int)",93957338828944,93957338829497],["v8::internal::KeyAccumulator::CollectInterceptorKeys(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::JSObject>, v8::internal::KeyAccumulator::IndexedOrNamed)",93957338843280,93957338843799],["unsigned int std::__1::__sort3<v8::internal::EnumIndexComparator<v8::internal::GlobalDictionary>&, v8::internal::AtomicSlot>(v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::EnumIndexComparator<v8::internal::GlobalDictionary>&)",93957338855520,93957338855887],["unsigned int std::__1::__sort5<v8::internal::EnumIndexComparator<v8::internal::NameDictionary>&, v8::internal::AtomicSlot>(v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::EnumIndexComparator<v8::internal::NameDictionary>&)",93957338859744,93957338860140],["void v8::internal::ClassBoilerplate::AddToPropertiesTemplate<v8::internal::Isolate, v8::internal::NameDictionary>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::NameDictionary>, v8::internal::Handle<v8::internal::Name>, int, v8::internal::ClassBoilerplate::ValueKind, v8::internal::Smi)",93957338861856,93957338861866],["void v8::internal::(anonymous namespace)::AddToDictionaryTemplate<v8::internal::Isolate, v8::internal::NumberDictionary, unsigned int>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::NumberDictionary>, unsigned int, int, v8::internal::ClassBoilerplate::ValueKind, v8::internal::Smi)",93957338864736,93957338866249],["v8::internal::ObjectDescriptor<v8::internal::Isolate>::AddConstant(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes)",93957338870224,93957338870455],["v8::internal::ObjectDescriptor<v8::internal::LocalIsolate>::AddConstant(v8::internal::LocalIsolate*, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes)",93957338873824,93957338874055],["v8::internal::RegExpBoilerplateDescription::BriefPrintDetails(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)",93957338875088,93957338875259],["v8::internal::TorqueGeneratedAccessorPair<v8::internal::AccessorPair, v8::internal::Struct>::set_setter(v8::internal::Object, v8::internal::WriteBarrierMode)",93957338875456,93957338875587],["v8::internal::SwissNameDictionary::AddInternal(v8::internal::Name, v8::internal::Object, v8::internal::PropertyDetails)",93957338876016,93957338876522],["void v8::internal::LookupIterator::Start<true>()",93957338877216,93957338877391],["void v8::internal::LookupIterator::Start<false>()",93957338877792,93957338877967],["void v8::internal::LookupIterator::RestartInternal<true>(v8::internal::LookupIterator::InterceptorState)",93957338878368,93957338878396],["v8::internal::LookupIterator::Key::Key(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, bool*)",93957338878432,93957338878801],["v8::internal::LookupIterator::State v8::internal::LookupIterator::LookupInSpecialHolder<true>(v8::internal::Map, v8::internal::JSReceiver)",93957338878992,93957338879737],["v8::internal::compiler::InstructionSelector::VisitI32x4ExtMulLowI16x8U(v8::internal::compiler::Node*)",93957342146688,93957342146967],["v8::internal::compiler::InstructionSelector::VisitI16x8GtS(v8::internal::compiler::Node*)",93957342150144,93957342150423],["v8::internal::compiler::InstructionSelector::VisitI16x8ExtMulLowI8x16S(v8::internal::compiler::Node*)",93957342151872,93957342152151],["v8::internal::compiler::InstructionSelector::VisitI16x8Q15MulRSatS(v8::internal::compiler::Node*)",93957342153024,93957342153303],["v8::internal::compiler::InstructionSelector::VisitI8x16Add(v8::internal::compiler::Node*)",93957342153888,93957342154167],["v8::internal::compiler::InstructionSelector::VisitI8x16Sub(v8::internal::compiler::Node*)",93957342154464,93957342154743],["v8::internal::compiler::InstructionSelector::VisitI8x16MinS(v8::internal::compiler::Node*)",93957342155040,93957342155319],["v8::internal::compiler::InstructionSelector::VisitI8x16Eq(v8::internal::compiler::Node*)",93957342155616,93957342155895],["socketpair",139871564305568,139871564305604],["__libc_sa_len",139871564306784,139871564306809],["__libc_msgsnd",139871564307008,139871564307171],["msgget",139871564307376,139871564307410],["v8::internal::LiveEdit::RestartFrame(v8::internal::JavaScriptFrame*)",93957336361200,93957336361686],["v8::internal::AstTraversalVisitor<v8::internal::(anonymous namespace)::CollectFunctionLiterals>::VisitInitializeClassMembersStatement(v8::internal::InitializeClassMembersStatement*)",93957336364064,93957336364179],["v8::internal::AstTraversalVisitor<v8::internal::(anonymous namespace)::CollectFunctionLiterals>::VisitCallNew(v8::internal::CallNew*)",93957336364864,93957336365000],["v8::internal::AstTraversalVisitor<v8::internal::(anonymous namespace)::CollectFunctionLiterals>::VisitImportCallExpression(v8::internal::ImportCallExpression*)",93957336366032,93957336366109],["void std::__1::vector<v8::internal::(anonymous namespace)::SourcePositionEvent, std::__1::allocator<v8::internal::(anonymous namespace)::SourcePositionEvent> >::emplace_back<v8::internal::SourceChangeRange const&, bool>(v8::internal::SourceChangeRange const&, bool&&)",93957336366608,93957336366980],["void std::__1::__sort<bool (*&)(v8::internal::(anonymous namespace)::SourcePositionEvent const&, v8::internal::(anonymous namespace)::SourcePositionEvent const&), v8::internal::(anonymous namespace)::SourcePositionEvent*>(v8::internal::(anonymous namespace)::SourcePositionEvent*, v8::internal::(anonymous namespace)::SourcePositionEvent*, bool (*&)(v8::internal::(anonymous namespace)::SourcePositionEvent const&, v8::internal::(anonymous namespace)::SourcePositionEvent const&))",93957336367184,93957336369428],["bool std::__1::__insertion_sort_incomplete<bool (*&)(v8::internal::(anonymous namespace)::SourcePositionEvent const&, v8::internal::(anonymous namespace)::SourcePositionEvent const&), v8::internal::(anonymous namespace)::SourcePositionEvent*>(v8::internal::(anonymous namespace)::SourcePositionEvent*, v8::internal::(anonymous namespace)::SourcePositionEvent*, bool (*&)(v8::internal::(anonymous namespace)::SourcePositionEvent const&, v8::internal::(anonymous namespace)::SourcePositionEvent const&))",93957336370048,93957336371273],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<int, v8::Global<v8::Value> >, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<int, v8::Global<v8::Value> >, std::__1::__unordered_map_hasher<int, std::__1::__hash_value_type<int, v8::Global<v8::Value> >, std::__1::hash<int>, std::__1::equal_to<int>, true>, std::__1::__unordered_map_equal<int, std::__1::__hash_value_type<int, v8::Global<v8::Value> >, std::__1::equal_to<int>, std::__1::hash<int>, true>, std::__1::allocator<std::__1::__hash_value_type<int, v8::Global<v8::Value> > > >::__emplace_unique_key_args<int, std::__1::piecewise_construct_t const&, std::__1::tuple<int const&>, std::__1::tuple<> >(int const&, std::__1::piecewise_construct_t const&, std::__1::tuple<int const&>&&, std::__1::tuple<>&&)",93957336372352,93957336373263],["v8::internal::JSRegExp::MarkedForTierUp()",93957338816528,93957338816613],["v8::internal::FilterProxyKeys(v8::internal::KeyAccumulator*, v8::internal::Handle<v8::internal::JSProxy>, v8::internal::Handle<v8::internal::FixedArray>, v8::internal::PropertyFilter)",93957338831328,93957338832086],["v8::internal::MaybeHandle<v8::internal::FixedArray> v8::internal::(anonymous namespace)::GetOwnKeysWithElements<true>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::GetKeysConversion, bool)",93957338839952,93957338840240],["v8::internal::Handle<v8::internal::FixedArray> v8::internal::(anonymous namespace)::GetOwnEnumPropertyDictionaryKeys<v8::internal::NameDictionary>(v8::internal::Isolate*, v8::internal::KeyCollectionMode, v8::internal::KeyAccumulator*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::NameDictionary)",93957338847696,93957338849119],["v8::internal::PropertyCallbackArguments::CallPropertyEnumerator(v8::internal::Handle<v8::internal::InterceptorInfo>)",93957338853328,93957338853981],["unsigned int std::__1::__sort5<v8::internal::EnumIndexComparator<v8::internal::GlobalDictionary>&, v8::internal::AtomicSlot>(v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::EnumIndexComparator<v8::internal::GlobalDictionary>&)",93957338856208,93957338856618],["unsigned int std::__1::__sort3<v8::internal::EnumIndexComparator<v8::internal::NameDictionary>&, v8::internal::AtomicSlot>(v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::EnumIndexComparator<v8::internal::NameDictionary>&)",93957338859056,93957338859414],["bool std::__1::__insertion_sort_incomplete<v8::internal::EnumIndexComparator<v8::internal::NameDictionary>&, v8::internal::AtomicSlot>(v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::EnumIndexComparator<v8::internal::NameDictionary>&)",93957338860448,93957338861015],["v8::base::TemplateHashMapImpl<v8::internal::Handle<v8::internal::Name>, int, v8::internal::(anonymous namespace)::NameComparator, v8::internal::ZoneAllocationPolicy>::FillEmptyEntry(v8::base::TemplateHashMapEntry<v8::internal::Handle<v8::internal::Name>, int>*, v8::internal::Handle<v8::internal::Name> const&, int const&, unsigned int)",93957338861488,93957338861845],["void v8::internal::(anonymous namespace)::AddToDictionaryTemplate<v8::internal::Isolate, v8::internal::NameDictionary, v8::internal::Handle<v8::internal::Name> >(v8::internal::Isolate*, v8::internal::Handle<v8::internal::NameDictionary>, v8::internal::Handle<v8::internal::Name>, int, v8::internal::ClassBoilerplate::ValueKind, v8::internal::Smi)",93957338861872,93957338863289],["void v8::internal::ClassBoilerplate::AddToElementsTemplate<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::NumberDictionary>, unsigned int, int, v8::internal::ClassBoilerplate::ValueKind, v8::internal::Smi)",93957338864720,93957338864730],["void v8::internal::(anonymous namespace)::AddToDictionaryTemplate<v8::internal::LocalIsolate, v8::internal::NumberDictionary, unsigned int>(v8::internal::LocalIsolate*, v8::internal::Handle<v8::internal::NumberDictionary>, unsigned int, int, v8::internal::ClassBoilerplate::ValueKind, v8::internal::Smi)",93957338866256,93957338867818],["v8::internal::ObjectDescriptor<v8::internal::Isolate>::CreateTemplates(v8::internal::Isolate*)",93957338869936,93957338870218],["v8::internal::ObjectDescriptor<v8::internal::Isolate>::AddNamedProperty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Name>, v8::internal::ClassBoilerplate::ValueKind, int)",93957338870464,93957338871324],["v8::internal::ObjectDescriptor<v8::internal::LocalIsolate>::CreateTemplates(v8::internal::LocalIsolate*)",93957338873536,93957338873818],["v8::internal::ObjectDescriptor<v8::internal::LocalIsolate>::AddNamedProperty(v8::internal::LocalIsolate*, v8::internal::Handle<v8::internal::Name>, v8::internal::ClassBoilerplate::ValueKind, int)",93957338874064,93957338874924],["v8::internal::compiler::InstructionSelector::VisitI32x4MaxS(v8::internal::compiler::Node*)",93957342144384,93957342144663],["v8::internal::compiler::InstructionSelector::VisitI16x8Add(v8::internal::compiler::Node*)",93957342147840,93957342148119],["v8::internal::compiler::InstructionSelector::VisitI16x8MaxS(v8::internal::compiler::Node*)",93957342149568,93957342149847],["v8::internal::compiler::InstructionSelector::VisitI16x8SubSatU(v8::internal::compiler::Node*)",93957342150720,93957342150999],["v8::internal::compiler::InstructionSelector::VisitI16x8RoundingAverageU(v8::internal::compiler::Node*)",93957342151584,93957342151863],["v8::internal::compiler::InstructionSelector::VisitI16x8ExtMulHighI8x16S(v8::internal::compiler::Node*)",93957342152160,93957342152439],["v8::internal::compiler::InstructionSelector::VisitI16x8ExtMulHighI8x16U(v8::internal::compiler::Node*)",93957342152736,93957342153015],["v8::internal::compiler::InstructionSelector::VisitI8x16SConvertI16x8(v8::internal::compiler::Node*)",93957342153312,93957342153591],["sendto",139871564305232,139871564305421],["sockatmark",139871564306176,139871564306246],["__sendmmsg",139871564306608,139871564306771],["__cmsg_nxthdr",139871564306816,139871564306883],["void std::__1::__function::__policy_invoker<void (v8::internal::Handle<v8::internal::DebugInfo>)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::Debug::ClearAllDebuggerHints()::$_2, void (v8::internal::Handle<v8::internal::DebugInfo>)> >(std::__1::__function::__policy_storage const*, v8::internal::Handle<v8::internal::DebugInfo>&&)",93957336341008,93957336341027],["v8::internal::AstTraversalVisitor<v8::internal::(anonymous namespace)::CollectFunctionLiterals>::VisitWhileStatement(v8::internal::WhileStatement*)",93957336363232,93957336363281],["v8::internal::AstTraversalVisitor<v8::internal::(anonymous namespace)::CollectFunctionLiterals>::VisitWithStatement(v8::internal::WithStatement*)",93957336363936,93957336363985],["v8::internal::AstTraversalVisitor<v8::internal::(anonymous namespace)::CollectFunctionLiterals>::VisitObjectLiteral(v8::internal::ObjectLiteral*)",93957336364368,93957336364498],["v8::internal::AstTraversalVisitor<v8::internal::(anonymous namespace)::CollectFunctionLiterals>::VisitNaryOperation(v8::internal::NaryOperation*)",93957336364704,93957336364852],["v8::internal::AstTraversalVisitor<v8::internal::(anonymous namespace)::CollectFunctionLiterals>::VisitClassLiteral(v8::internal::ClassLiteral*)",93957336365008,93957336365443],["v8::internal::(anonymous namespace)::CollectFunctionLiterals::VisitFunctionLiteral(v8::internal::FunctionLiteral*)",93957336365568,93957336366017],["v8::internal::AstTraversalVisitor<v8::internal::(anonymous namespace)::CollectFunctionLiterals>::VisitTemplateLiteral(v8::internal::TemplateLiteral*)",93957336366112,93957336366219],["v8::internal::Handle<v8::internal::HeapNumber> v8::internal::FactoryBase<v8::internal::Factory>::NewHeapNumberFromBits<(v8::internal::AllocationType)0>(unsigned long)",93957338804960,93957338804988],["v8::internal::JSRelativeTimeFormat::FormatToParts(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::JSRelativeTimeFormat>)",93957338821536,93957338823854],["v8::internal::KeyAccumulator::AddKey(v8::internal::Object, v8::internal::AddKeyConversion)",93957338830384,93957338830492],["v8::internal::KeyAccumulator::CollectOwnKeys(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::JSObject>)",93957338835392,93957338835967],["v8::internal::FastKeyAccumulator::GetKeysSlow(v8::internal::GetKeysConversion)",93957338839376,93957338839512],["v8::internal::KeyAccumulator::FilterForEnumerableProperties(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::InterceptorInfo>, v8::internal::Handle<v8::internal::JSObject>, v8::internal::KeyAccumulator::IndexedOrNamed)",93957338841920,93957338842617],["v8::internal::KeyAccumulator::CollectOwnPropertyNames(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::JSObject>)",93957338844080,93957338846719],["v8::internal::ExceptionStatus v8::internal::(anonymous namespace)::CollectKeysFromDictionary<v8::internal::GlobalDictionary>(v8::internal::Handle<v8::internal::GlobalDictionary>, v8::internal::KeyAccumulator*)",93957338850064,93957338851261],["v8::internal::KeyAccumulator::CollectAccessCheckInterceptorKeys(v8::internal::Handle<v8::internal::AccessCheckInfo>, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::JSObject>)",93957338853024,93957338853325],["void std::__1::__sort<v8::internal::EnumIndexComparator<v8::internal::GlobalDictionary>&, v8::internal::AtomicSlot>(v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::EnumIndexComparator<v8::internal::GlobalDictionary>&)",93957338853984,93957338855517],["unsigned int std::__1::__sort4<v8::internal::EnumIndexComparator<v8::internal::GlobalDictionary>&, v8::internal::AtomicSlot>(v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::EnumIndexComparator<v8::internal::GlobalDictionary>&)",93957338855888,93957338856206],["void std::__1::__insertion_sort_3<v8::internal::EnumIndexComparator<v8::internal::GlobalDictionary>&, v8::internal::AtomicSlot>(v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::EnumIndexComparator<v8::internal::GlobalDictionary>&)",93957338856624,93957338856929],["void std::__1::__sort<v8::internal::EnumIndexComparator<v8::internal::NameDictionary>&, v8::internal::AtomicSlot>(v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::EnumIndexComparator<v8::internal::NameDictionary>&)",93957338857536,93957338859049],["unsigned int std::__1::__sort4<v8::internal::EnumIndexComparator<v8::internal::NameDictionary>&, v8::internal::AtomicSlot>(v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::EnumIndexComparator<v8::internal::NameDictionary>&)",93957338859424,93957338859739],["void std::__1::__insertion_sort_3<v8::internal::EnumIndexComparator<v8::internal::NameDictionary>&, v8::internal::AtomicSlot>(v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::EnumIndexComparator<v8::internal::NameDictionary>&)",93957338860144,93957338860436],["v8::base::TemplateHashMapImpl<v8::internal::Handle<v8::internal::Name>, int, v8::internal::(anonymous namespace)::NameComparator, v8::internal::ZoneAllocationPolicy>::Initialize(unsigned int)",93957338861024,93957338861184],["v8::internal::compiler::InstructionSelector::VisitI64x2ExtMulLowI32x4S(v8::internal::compiler::Node*)",93957342142080,93957342142359],["v8::internal::compiler::InstructionSelector::VisitI32x4MaxU(v8::internal::compiler::Node*)",93957342145536,93957342145815],["v8::internal::compiler::InstructionSelector::VisitI16x8SConvertI32x4(v8::internal::compiler::Node*)",93957342147264,93957342147543],["v8::internal::compiler::InstructionSelector::VisitI16x8Sub(v8::internal::compiler::Node*)",93957342148416,93957342148695],["v8::internal::compiler::InstructionSelector::VisitI16x8MinS(v8::internal::compiler::Node*)",93957342149280,93957342149559],["v8::internal::compiler::InstructionSelector::VisitI16x8Eq(v8::internal::compiler::Node*)",93957342149856,93957342150135],["v8::internal::compiler::InstructionSelector::VisitI16x8AddSatU(v8::internal::compiler::Node*)",93957342150432,93957342150711],["v8::internal::compiler::InstructionSelector::VisitI16x8MinU(v8::internal::compiler::Node*)",93957342151008,93957342151287],["recvfrom",139871564304528,139871564304717],["shutdown",139871564305472,139871564305505],["isfdtype",139871564305616,139871564305737],["accept4",139871564306256,139871564306419],["v8::internal::SharedFunctionInfoFinder::NewCandidate(v8::internal::SharedFunctionInfo, v8::internal::JSFunction)",93957336338480,93957336338857],["v8::internal::(anonymous namespace)::FunctionDataMap::AddInterestingLiteral(int, v8::internal::FunctionLiteral*, bool)",93957336360560,93957336360826],["v8::internal::AstTraversalVisitor<v8::internal::(anonymous namespace)::CollectFunctionLiterals>::Visit(v8::internal::AstNode*)",93957336362400,93957336363155],["v8::internal::AstTraversalVisitor<v8::internal::(anonymous namespace)::CollectFunctionLiterals>::VisitForInStatement(v8::internal::ForInStatement*)",93957336363408,93957336363475],["v8::internal::AstTraversalVisitor<v8::internal::(anonymous namespace)::CollectFunctionLiterals>::VisitIfStatement(v8::internal::IfStatement*)",93957336363856,93957336363923],["v8::internal::AstTraversalVisitor<v8::internal::(anonymous namespace)::CollectFunctionLiterals>::VisitTryCatchStatement(v8::internal::TryCatchStatement*)",93957336364000,93957336364049],["v8::internal::AstTraversalVisitor<v8::internal::(anonymous namespace)::CollectFunctionLiterals>::VisitInitializeClassStaticElementsStatement(v8::internal::InitializeClassStaticElementsStatement*)",93957336364192,93957336364355],["v8::internal::AstTraversalVisitor<v8::internal::(anonymous namespace)::CollectFunctionLiterals>::VisitCallRuntime(v8::internal::CallRuntime*)",93957336364512,93957336364609],["v8::internal::JSDate::DoGetField(v8::internal::Isolate*, v8::internal::JSDate::FieldIndex)",93957338797568,93957338798092],["v8::internal::JSArray::SetContent(v8::internal::Handle<v8::internal::JSArray>, v8::internal::Handle<v8::internal::FixedArrayBase>)",93957338812912,93957338813396],["v8::internal::JSRegExp::Initialize(v8::internal::Handle<v8::internal::JSRegExp>, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String>)",93957338816768,93957338816900],["v8::internal::JSSegmenter::New(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957338825536,93957338827578],["v8::internal::FastKeyAccumulator::GetKeys(v8::internal::GetKeysConversion)",93957338829776,93957338829986],["v8::internal::KeyAccumulator::IsShadowed(v8::internal::Handle<v8::internal::Object>)",93957338830944,93957338831169],["v8::internal::KeyAccumulator::CollectKeys(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::JSReceiver>)",93957338832448,93957338832854],["v8::internal::FastKeyAccumulator::Prepare()",93957338836144,93957338836994],["v8::internal::FastKeyAccumulator::GetKeysWithPrototypeInfoCache(v8::internal::GetKeysConversion)",93957338838112,93957338839368],["v8::internal::MaybeHandle<v8::internal::FixedArray> v8::internal::(anonymous namespace)::GetOwnKeysWithElements<false>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::GetKeysConversion, bool)",93957338839520,93957338839943],["v8::internal::(anonymous namespace)::GetFastEnumPropertyKeys(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>)",93957338840240,93957338841905],["v8::internal::KeyAccumulator::CollectInterceptorKeysInternal(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::InterceptorInfo>, v8::internal::KeyAccumulator::IndexedOrNamed)",93957338842624,93957338843278],["v8::internal::KeyAccumulator::CollectOwnElementIndices(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::JSObject>)",93957338843808,93957338844066],["v8::internal::Handle<v8::internal::FixedArray> v8::internal::(anonymous namespace)::GetOwnEnumPropertyDictionaryKeys<v8::internal::GlobalDictionary>(v8::internal::Isolate*, v8::internal::KeyCollectionMode, v8::internal::KeyAccumulator*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::GlobalDictionary)",93957338846720,93957338847688],["v8::base::Optional<int> v8::internal::(anonymous namespace)::CollectOwnPropertyNamesInternal<false>(v8::internal::Handle<v8::internal::JSObject>, v8::internal::KeyAccumulator*, v8::internal::Handle<v8::internal::DescriptorArray>, int, int)",93957338849120,93957338850060],["v8::internal::ExceptionStatus v8::internal::(anonymous namespace)::CollectKeysFromDictionary<v8::internal::NameDictionary>(v8::internal::Handle<v8::internal::NameDictionary>, v8::internal::KeyAccumulator*)",93957338851264,93957338852590],["v8::internal::compiler::InstructionSelector::VisitF32x4Div(v8::internal::compiler::Node*)",93957342139776,93957342140055],["v8::internal::compiler::InstructionSelector::VisitI32x4Add(v8::internal::compiler::Node*)",93957342143232,93957342143511],["v8::internal::compiler::InstructionSelector::VisitI32x4GtS(v8::internal::compiler::Node*)",93957342144960,93957342145239],["v8::internal::compiler::InstructionSelector::VisitI32x4ExtMulLowI16x8S(v8::internal::compiler::Node*)",93957342146112,93957342146391],["v8::internal::compiler::InstructionSelector::VisitI32x4ExtMulHighI16x8U(v8::internal::compiler::Node*)",93957342146976,93957342147255],["v8::internal::compiler::InstructionSelector::VisitI16x8UConvertI32x4(v8::internal::compiler::Node*)",93957342147552,93957342147831],["v8::internal::compiler::InstructionSelector::VisitI16x8AddSatS(v8::internal::compiler::Node*)",93957342148128,93957342148407],["v8::internal::compiler::InstructionSelector::VisitI16x8SubSatS(v8::internal::compiler::Node*)",93957342148704,93957342148983],["getsockname",139871564304192,139871564304225],["__send",139871564304880,139871564305061],["setsockopt",139871564305424,139871564305460],["__socket",139871564305520,139871564305553],["v8::internal::Debug::StopSideEffectCheckMode()",93957336335456,93957336335863],["v8::internal::Debug::TemporaryObjectsTracker::~TemporaryObjectsTracker()",93957336339872,93957336339970],["v8::internal::LiveEdit::CompareStrings(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String>, std::__1::vector<v8::internal::SourceChangeRange, std::__1::allocator<v8::internal::SourceChangeRange> >*)",93957336359488,93957336360182],["v8::internal::(anonymous namespace)::FunctionDataMap::~FunctionDataMap()",93957336361152,93957336361180],["v8::internal::(anonymous namespace)::Comparator::CalculateDifference(v8::internal::(anonymous namespace)::Comparator::Input*, v8::internal::(anonymous namespace)::Comparator::Output*)",93957336361696,93957336362394],["v8::internal::AstTraversalVisitor<v8::internal::(anonymous namespace)::CollectFunctionLiterals>::VisitDoWhileStatement(v8::internal::DoWhileStatement*)",93957336363168,93957336363217],["v8::internal::AstTraversalVisitor<v8::internal::(anonymous namespace)::CollectFunctionLiterals>::VisitForStatement(v8::internal::ForStatement*)",93957336363296,93957336363399],["v8::internal::AstTraversalVisitor<v8::internal::(anonymous namespace)::CollectFunctionLiterals>::VisitBlock(v8::internal::Block*)",93957336363488,93957336363677],["v8::internal::JSObject::ReoptimizeIfPrototype(v8::internal::Handle<v8::internal::JSObject>)",93957338792288,93957338792386],["v8::internal::PropertyCallbackArguments::CallIndexedDefiner(v8::internal::Handle<v8::internal::InterceptorInfo>, unsigned int, v8::PropertyDescriptor const&)",93957338800432,93957338801215],["v8::internal::JSPluralRules::ResolvedOptions(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSPluralRules>)",93957338808064,93957338810064],["v8::internal::JSRegExp::Initialize(v8::internal::Handle<v8::internal::JSRegExp>, v8::internal::Handle<v8::internal::String>, v8::base::Flags<v8::internal::JSRegExp::Flag, int>, unsigned int)",93957338814496,93957338816305],["v8::internal::JSRegExp::TierUpTick()",93957338816672,93957338816719],["v8::internal::JSRelativeTimeFormat::ResolvedOptions(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSRelativeTimeFormat>)",93957338820160,93957338820707],["v8::internal::JSSegmentIterator::Create(v8::internal::Isolate*, icu_68::BreakIterator*, v8::internal::JSSegmenter::Granularity)",93957338824320,93957338825240],["v8::internal::JSSegments::Create(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSSegmenter>, v8::internal::Handle<v8::internal::String>)",93957338827936,93957338828635],["v8::internal::KeyAccumulator::GetKeys(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::KeyCollectionMode, v8::internal::PropertyFilter, v8::internal::GetKeysConversion, bool, bool)",93957338829504,93957338829776],["v8::internal::KeyAccumulator::GetKeys(v8::internal::GetKeysConversion)",93957338830000,93957338830369],["v8::internal::KeyAccumulator::AddKey(v8::internal::Handle<v8::internal::Object>, v8::internal::AddKeyConversion)",93957338830496,93957338830932],["v8::internal::Handle<v8::internal::Object> v8::internal::FactoryBase<v8::internal::Factory>::NewNumberFromUint<(v8::internal::AllocationType)0>(unsigned int)",93957338831184,93957338831322],["v8::internal::KeyAccumulator::AddKeysFromJSProxy(v8::internal::Handle<v8::internal::JSProxy>, v8::internal::Handle<v8::internal::FixedArray>)",93957338832096,93957338832436],["v8::internal::KeyAccumulator::CollectOwnJSProxyKeys(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::JSProxy>)",93957338832864,93957338835388],["v8::internal::KeyAccumulator::AddShadowingKey(v8::internal::Object, v8::internal::CombinationAssertScope<v8::internal::PerThreadAssertScopeDebugOnly<(v8::internal::PerThreadAssertType)0, true>, v8::internal::PerThreadAssertScopeDebugOnly<(v8::internal::PerThreadAssertType)1, true> >*)",93957338835968,93957338836137],["v8::internal::FastKeyAccumulator::TryPrototypeInfoCache(v8::internal::Handle<v8::internal::JSReceiver>)",93957338837008,93957338837711],["v8::internal::compiler::InstructionSelector::VisitF64x2Div(v8::internal::compiler::Node*)",93957342137472,93957342137751],["v8::internal::compiler::InstructionSelector::VisitF32x4Le(v8::internal::compiler::Node*)",93957342140928,93957342141207],["v8::internal::compiler::InstructionSelector::VisitI64x2ExtMulLowI32x4U(v8::internal::compiler::Node*)",93957342142656,93957342142935],["v8::internal::compiler::InstructionSelector::VisitI32x4Mul(v8::internal::compiler::Node*)",93957342143808,93957342144087],["v8::internal::compiler::InstructionSelector::VisitI32x4Eq(v8::internal::compiler::Node*)",93957342144672,93957342144951],["v8::internal::compiler::InstructionSelector::VisitI32x4MinU(v8::internal::compiler::Node*)",93957342145248,93957342145527],["v8::internal::compiler::InstructionSelector::VisitI32x4DotI16x8S(v8::internal::compiler::Node*)",93957342145824,93957342146103],["v8::internal::compiler::InstructionSelector::VisitI32x4ExtMulHighI16x8S(v8::internal::compiler::Node*)",93957342146400,93957342146679],["accept",139871564303776,139871564303931],["listen",139871564304288,139871564304321],["recvmsg",139871564304720,139871564304877],["sendmsg",139871564305072,139871564305229],["v8::internal::DebugScope::~DebugScope()",93957336333920,93957336334041],["v8::internal::Debug::PerformSideEffectCheckAtBytecode(v8::internal::InterpretedFrame*)",93957336337440,93957336337882],["v8::internal::Debug::TemporaryObjectsTracker::MoveEvent(unsigned long, unsigned long, int)",93957336338912,93957336339764],["void std::__1::__function::__policy_invoker<void (v8::internal::Handle<v8::internal::DebugInfo>)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::Debug::ClearAllBreakPoints()::$_0, void (v8::internal::Handle<v8::internal::DebugInfo>)> >(std::__1::__function::__policy_storage const*, v8::internal::Handle<v8::internal::DebugInfo>&&)",93957336340896,93957336340953],["v8::internal::LiveEdit::PatchScript(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Script>, v8::internal::Handle<v8::internal::String>, bool, v8::debug::LiveEditResult*)",93957336341040,93957336359478],["v8::internal::(anonymous namespace)::ParseScript(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Script>, v8::internal::ParseInfo*, bool, std::__1::vector<v8::internal::FunctionLiteral*, std::__1::allocator<v8::internal::FunctionLiteral*> >*, v8::debug::LiveEditResult*)",93957336360192,93957336360550],["v8::internal::(anonymous namespace)::FunctionDataMap::Lookup(v8::internal::SharedFunctionInfo, v8::internal::(anonymous namespace)::FunctionData**)",93957336360832,93957336361148],["v8::internal::LiveEdit::InitializeThreadLocal(v8::internal::Debug*)",93957336361184,93957336361198],["v8::internal::JSObject::SetOwnElementIgnoreAttributes(v8::internal::Handle<v8::internal::JSObject>, unsigned long, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes)",93957338781952,93957338782059],["v8::internal::JSObject::HasRealNamedProperty(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Name>)",93957338795632,93957338795905],["v8::internal::JSMessageObject::EnsureSourcePositionsAvailable(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSMessageObject>)",93957338799344,93957338799735],["v8::internal::(anonymous namespace)::TestPropertiesIntegrityLevel(v8::internal::JSObject, v8::internal::PropertyAttributes)",93957338803584,93957338804128],["v8::internal::JSPluralRules::GetAvailableLocales()",93957338807712,93957338807855],["std::__1::pair<std::__1::__tree_iterator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__tree_node<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, void*>*, long>, bool> std::__1::__tree<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::__emplace_unique_key_args<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&)",93957338811024,93957338811481],["v8::internal::JSRegExp::FlagsFromString(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, bool*)",93957338813504,93957338814311],["v8::internal::JSRegExp::Bytecode(bool) const",93957338816368,93957338816412],["v8::internal::JSRegExp::ResetLastTierUpTick()",93957338816624,93957338816663],["v8::internal::JSRegExp::MarkTierUpForNextExec()",93957338816720,93957338816753],["v8::internal::JSRelativeTimeFormat::New(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957338816912,93957338820154],["v8::internal::JSRelativeTimeFormat::Format(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::JSRelativeTimeFormat>)",93957338820720,93957338821532],["v8::internal::(anonymous namespace)::GetURelativeDateTimeUnit(v8::internal::Handle<v8::internal::String>, URelativeDateTimeUnit*)",93957338823856,93957338824316],["v8::internal::JSSegmentIterator::Next(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSSegmentIterator>)",93957338825248,93957338825531],["v8::internal::JSSegmenter::ResolvedOptions(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSSegmenter>)",93957338827584,93957338827934],["v8::internal::JSSegments::Containing(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSSegments>, double)",93957338828640,93957338828931],["v8::internal::compiler::InstructionSelector::VisitI16x8GeU(v8::internal::compiler::Node*)",93957342135328,93957342135579],["v8::internal::compiler::InstructionSelector::VisitF64x2Le(v8::internal::compiler::Node*)",93957342138624,93957342138903],["v8::internal::compiler::InstructionSelector::VisitF32x4Ne(v8::internal::compiler::Node*)",93957342140352,93957342140631],["v8::internal::compiler::InstructionSelector::VisitI64x2Sub(v8::internal::compiler::Node*)",93957342141504,93957342141783],["v8::internal::compiler::InstructionSelector::VisitI64x2ExtMulHighI32x4S(v8::internal::compiler::Node*)",93957342142368,93957342142647],["v8::internal::compiler::InstructionSelector::VisitI64x2ExtMulHighI32x4U(v8::internal::compiler::Node*)",93957342142944,93957342143223],["v8::internal::compiler::InstructionSelector::VisitI32x4Sub(v8::internal::compiler::Node*)",93957342143520,93957342143799],["v8::internal::compiler::InstructionSelector::VisitI32x4MinS(v8::internal::compiler::Node*)",93957342144096,93957342144375],["pkey_free",139871564303632,139871564303665],["__connect",139871564303984,139871564304139],["getsockopt",139871564304240,139871564304276],["__recv",139871564304336,139871564304517],["v8::internal::Debug::SetScriptSource(v8::internal::Handle<v8::internal::Script>, v8::internal::Handle<v8::internal::String>, bool, v8::debug::LiveEditResult*)",93957336331056,93957336331497],["v8::internal::Debug::UpdateDebugInfosForExecutionMode()",93957336334288,93957336334604],["v8::internal::Debug::PerformSideEffectCheckForObject(v8::internal::Handle<v8::internal::Object>)",93957336336752,93957336336880],["v8::internal::Debug::SetTemporaryObjectTrackingDisabled(bool)",93957336338416,93957336338435],["v8::internal::Debug::TemporaryObjectsTracker::AllocationEvent(unsigned long, int)",93957336338864,93957336338910],["v8::internal::Debug::TemporaryObjectsTracker::~TemporaryObjectsTracker()",93957336339776,93957336339871],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<unsigned long, void*>*>, bool> std::__1::__hash_table<unsigned long, std::__1::hash<unsigned long>, std::__1::equal_to<unsigned long>, std::__1::allocator<unsigned long> >::__emplace_unique_key_args<unsigned long, unsigned long>(unsigned long const&, unsigned long&&)",93957336339984,93957336340883],["void std::__1::__function::__policy_invoker<void (v8::internal::Handle<v8::internal::DebugInfo>)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::Debug::RemoveAllCoverageInfos()::$_1, void (v8::internal::Handle<v8::internal::DebugInfo>)> >(std::__1::__function::__policy_storage const*, v8::internal::Handle<v8::internal::DebugInfo>&&)",93957336340960,93957336341003],["v8::internal::JSObject::UnregisterPrototypeUser(v8::internal::Handle<v8::internal::Map>, v8::internal::Isolate*)",93957338771024,93957338771664],["v8::internal::JSObject::DictionaryPropertyAt(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338788672,93957338788818],["void v8::internal::JSObject::EnsureCanContainElements<v8::internal::FullObjectSlot>(v8::internal::Handle<v8::internal::JSObject>, v8::internal::FullObjectSlot, unsigned int, v8::internal::EnsureElementsMode)",93957338793008,93957338793321],["v8::internal::JSDate::New(v8::internal::Handle<v8::internal::JSFunction>, v8::internal::Handle<v8::internal::JSReceiver>, double)",93957338796656,93957338797095],["v8::internal::JSDate::GetUTCField(v8::internal::JSDate::FieldIndex, double, v8::internal::DateCache*)",93957338798592,93957338799079],["v8::internal::JSMessageObject::GetColumnNumber() const",93957338799920,93957338800096],["v8::internal::PropertyCallbackArguments::CallNamedQuery(v8::internal::Handle<v8::internal::InterceptorInfo>, v8::internal::Handle<v8::internal::Name>)",93957338802000,93957338802795],["void v8::internal::JSObject::ApplyAttributesToDictionary<v8::internal::GlobalDictionary>(v8::internal::Isolate*, v8::internal::ReadOnlyRoots, v8::internal::Handle<v8::internal::GlobalDictionary>, v8::internal::PropertyAttributes)",93957338804192,93957338804629],["v8::internal::JSPluralRules::New(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957338804992,93957338807704],["v8::internal::JSPluralRules::ResolvePlural(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSPluralRules>, double)",93957338807856,93957338808059],["v8::base::LazyInstanceImpl<v8::internal::(anonymous namespace)::PluralRulesAvailableLocales, v8::base::StaticallyAllocatedInstanceTrait<v8::internal::(anonymous namespace)::PluralRulesAvailableLocales>, v8::base::DefaultConstructTrait<v8::internal::(anonymous namespace)::PluralRulesAvailableLocales>, v8::base::ThreadSafeInitOnceTrait, v8::base::LeakyInstanceTrait<v8::internal::(anonymous namespace)::PluralRulesAvailableLocales> >::InitInstance(void*)",93957338810064,93957338811017],["v8::internal::JSRegExpResultIndices::BuildIndices(v8::internal::Isolate*, v8::internal::Handle<v8::internal::RegExpMatchInfo>, v8::internal::Handle<v8::internal::Object>)",93957338811488,93957338812905],["v8::internal::JSRegExp::BacktrackLimit() const",93957338813408,93957338813494],["v8::internal::JSRegExp::New(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, v8::base::Flags<v8::internal::JSRegExp::Flag, int>, unsigned int)",93957338814320,93957338814490],["v8::internal::JSRegExp::Code(bool) const",93957338816320,93957338816364],["v8::internal::JSRegExp::ShouldProduceBytecode()",93957338816416,93957338816517],["v8::internal::compiler::InstructionSelector::VisitI64x2Ne(v8::internal::compiler::Node*)",93957342133280,93957342133531],["v8::internal::compiler::InstructionSelector::VisitI8x16GeU(v8::internal::compiler::Node*)",93957342136352,93957342136603],["v8::internal::compiler::InstructionSelector::VisitF64x2Ne(v8::internal::compiler::Node*)",93957342138048,93957342138327],["v8::internal::compiler::InstructionSelector::VisitF32x4Sub(v8::internal::compiler::Node*)",93957342139200,93957342139479],["v8::internal::compiler::InstructionSelector::VisitF32x4Eq(v8::internal::compiler::Node*)",93957342140064,93957342140343],["v8::internal::compiler::InstructionSelector::VisitF32x4Lt(v8::internal::compiler::Node*)",93957342140640,93957342140919],["v8::internal::compiler::InstructionSelector::VisitI64x2Add(v8::internal::compiler::Node*)",93957342141216,93957342141495],["v8::internal::compiler::InstructionSelector::VisitI64x2Eq(v8::internal::compiler::Node*)",93957342141792,93957342142071],["name_to_handle_at",139871564303440,139871564303476],["tgkill",139871564303696,139871564303729],["bind",139871564303936,139871564303969],["getpeername",139871564304144,139871564304177],["v8::internal::Debug::ScheduleFrameRestart(v8::internal::StackFrame*)",93957336327408,93957336327593],["v8::internal::Debug::SetDebugDelegate(v8::debug::DebugDelegate*)",93957336332448,93957336332461],["v8::internal::Debug::return_value_handle()",93957336334160,93957336334245],["v8::internal::Debug::SetTerminateOnResume()",93957336335008,93957336335048],["v8::internal::Debug::PerformSideEffectCheck(v8::internal::Handle<v8::internal::JSFunction>, v8::internal::Handle<v8::internal::Object>)",93957336335872,93957336336745],["v8::internal::Debug::PerformSideEffectCheckForCallback(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::Debug::AccessorKind)",93957336336880,93957336337426],["v8::internal::Debug::TemporaryObjectsTracker::HasObject(v8::internal::Handle<v8::internal::HeapObject>) const",93957336337888,93957336338416],["v8::internal::Debug::GetTemporaryObjectTrackingDisabled() const",93957336338448,93957336338474],["v8::internal::JSObject::AllCanRead(v8::internal::LookupIterator*)",93957338763888,93957338764023],["v8::internal::JSObject::NormalizeElements(v8::internal::Handle<v8::internal::JSObject>)",93957338779376,93957338780138],["v8::internal::PropertyCallbackArguments::CallIndexedDeleter(v8::internal::Handle<v8::internal::InterceptorInfo>, unsigned int)",93957338785184,93957338785971],["v8::internal::JSObject::SlowReverseLookup(v8::internal::Object)",93957338790112,93957338790962],["v8::internal::JSObject::SetImmutableProto(v8::internal::Handle<v8::internal::JSObject>)",93957338792768,93957338792971],["v8::internal::JSObject::AddDataElement(v8::internal::Handle<v8::internal::JSObject>, unsigned int, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes)",93957338793520,93957338795114],["v8::internal::JSGlobalProxy::IsDetached() const",93957338796000,93957338796034],["v8::internal::JSDate::CurrentTimeValue(v8::internal::Isolate*)",93957338797344,93957338797426],["v8::internal::JSDate::SetCachedFields(long, v8::internal::DateCache*)",93957338798096,93957338798588],["v8::internal::JSDate::SetValue(v8::internal::Handle<v8::internal::JSDate>, double)",93957338799088,93957338799335],["v8::internal::JSMessageObject::GetLineNumber() const",93957338799744,93957338799918],["v8::internal::JSMessageObject::GetSourceLine() const",93957338800096,93957338800418],["v8::internal::PropertyCallbackArguments::CallNamedDefiner(v8::internal::Handle<v8::internal::InterceptorInfo>, v8::internal::Handle<v8::internal::Name>, v8::PropertyDescriptor const&)",93957338801216,93957338801999],["v8::internal::PropertyCallbackArguments::CallIndexedSetter(v8::internal::Handle<v8::internal::InterceptorInfo>, unsigned int, v8::internal::Handle<v8::internal::Object>)",93957338802800,93957338803583],["v8::internal::Map::set_elements_kind(v8::internal::ElementsKind)",93957338804128,93957338804183],["void v8::internal::JSObject::ApplyAttributesToDictionary<v8::internal::NameDictionary>(v8::internal::Isolate*, v8::internal::ReadOnlyRoots, v8::internal::Handle<v8::internal::NameDictionary>, v8::internal::PropertyAttributes)",93957338804640,93957338804959],["v8::internal::compiler::InstructionSelector::VisitI32x4AllTrue(v8::internal::compiler::Node*)",93957342131616,93957342131769],["v8::internal::compiler::InstructionSelector::VisitI32x4GeU(v8::internal::compiler::Node*)",93957342134304,93957342134555],["v8::internal::compiler::InstructionSelector::VisitI8x16GtU(v8::internal::compiler::Node*)",93957342135840,93957342136091],["v8::internal::compiler::InstructionSelector::VisitF64x2Sub(v8::internal::compiler::Node*)",93957342136896,93957342137175],["v8::internal::compiler::InstructionSelector::VisitF64x2Eq(v8::internal::compiler::Node*)",93957342137760,93957342138039],["v8::internal::compiler::InstructionSelector::VisitF64x2Lt(v8::internal::compiler::Node*)",93957342138336,93957342138615],["v8::internal::compiler::InstructionSelector::VisitF32x4Add(v8::internal::compiler::Node*)",93957342138912,93957342139191],["v8::internal::compiler::InstructionSelector::VisitF32x4Mul(v8::internal::compiler::Node*)",93957342139488,93957342139767],["timerfd_create",139871564303248,139871564303281],["memfd_create",139871564303536,139871564303569],["gettid",139871564303680,139871564303688],["bdflush",139871564303744,139871564303766],["v8::internal::Debug::GetPossibleBreakpoints(v8::internal::Handle<v8::internal::Script>, int, int, bool, std::__1::vector<v8::internal::BreakLocation, std::__1::allocator<v8::internal::BreakLocation> >*)",93957336322640,93957336323253],["v8::internal::Debug::OnPromiseReject(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957336329696,93957336330168],["v8::internal::Debug::ProcessCompileEvent(bool, v8::internal::Handle<v8::internal::Script>)",93957336331536,93957336332430],["v8::internal::Debug::HandleDebugBreak(v8::internal::IgnoreBreakMode)",93957336332608,93957336333717],["v8::internal::ReturnValueScope::ReturnValueScope(v8::internal::Debug*)",93957336334048,93957336334158],["v8::internal::ReturnValueScope::~ReturnValueScope()",93957336334256,93957336334276],["v8::internal::Debug::ClearSideEffectChecks(v8::internal::Handle<v8::internal::DebugInfo>)",93957336334608,93957336335006],["v8::internal::Debug::StartSideEffectCheckMode()",93957336335056,93957336335456],["v8::internal::JSReceiver::ToPrimitive(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::ToPrimitiveHint)",93957338756800,93957338757034],["v8::internal::JSObject::JSObjectShortPrint(v8::internal::StringStream*)",93957338767952,93957338769357],["v8::internal::JSObject::ForceSetPrototype(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::HeapObject>)",93957338777712,93957338777879],["v8::internal::JSObject::TryMigrateInstance(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>)",93957338781088,93957338781312],["v8::internal::JSObject::MigrateSlowToFast(v8::internal::Handle<v8::internal::JSObject>, int, char const*)",93957338782384,93957338785100],["v8::Maybe<bool> v8::internal::JSObject::PreventExtensionsWithTransition<(v8::internal::PropertyAttributes)0>(v8::internal::Handle<v8::internal::JSObject>, v8::internal::ShouldThrow)",93957338786784,93957338788447],["v8::internal::JSObject::DefineAccessor(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes)",93957338789344,93957338789647],["v8::internal::JSObject::MakePrototypesFast(v8::internal::Handle<v8::internal::Object>, v8::internal::WhereToStart, v8::internal::Isolate*)",93957338791008,93957338791435],["v8::internal::(anonymous namespace)::InvalidatePrototypeChainsInternal(v8::internal::Map)",93957338792400,93957338792764],["v8::internal::JSObject::EnsureCanContainElements(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Arguments<(v8::internal::ArgumentsType)1>*, unsigned int, v8::internal::EnsureElementsMode)",93957338792976,93957338793007],["v8::internal::JSObject::WouldConvertToSlowElements(unsigned int)",93957338793328,93957338793508],["v8::internal::JSObject::GetFastElementsUsage()",93957338795120,93957338795625],["v8::internal::JSObject::IsApiWrapper()",93957338795920,93957338795999],["v8::internal::JSGlobalObject::InvalidatePropertyCell(v8::internal::Handle<v8::internal::JSGlobalObject>, v8::internal::Handle<v8::internal::Name>)",93957338796048,93957338796649],["v8::internal::JSDate::SetValue(v8::internal::Object, bool)",93957338797104,93957338797329],["v8::internal::JSDate::GetField(v8::internal::Isolate*, unsigned long, unsigned long)",93957338797440,93957338797559],["v8::internal::compiler::InstructionSelector::VisitI16x8UConvertI8x16Low(v8::internal::compiler::Node*)",93957342130336,93957342130489],["v8::internal::compiler::InstructionSelector::VisitF64x2Min(v8::internal::compiler::Node*)",93957342132256,93957342132507],["v8::internal::compiler::InstructionSelector::VisitI32x4GtU(v8::internal::compiler::Node*)",93957342133792,93957342134043],["v8::internal::compiler::InstructionSelector::VisitI16x8GtU(v8::internal::compiler::Node*)",93957342134816,93957342135067],["v8::internal::compiler::InstructionSelector::VisitI8x16Ne(v8::internal::compiler::Node*)",93957342135584,93957342135835],["v8::internal::compiler::InstructionSelector::VisitI8x16GeS(v8::internal::compiler::Node*)",93957342136096,93957342136347],["v8::internal::compiler::InstructionSelector::VisitF64x2Add(v8::internal::compiler::Node*)",93957342136608,93957342136887],["v8::internal::compiler::InstructionSelector::VisitF64x2Mul(v8::internal::compiler::Node*)",93957342137184,93957342137463],["quotactl",139871564303056,139871564303092],["timerfd_gettime",139871564303344,139871564303377],["setns",139871564303488,139871564303521],["pkey_alloc",139871564303584,139871564303617],["v8::internal::Debug::PrepareStepInSuspendedGenerator()",93957336317760,93957336318057],["v8::internal::Debug::CreateBreakInfo(v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957336326240,93957336326616],["v8::internal::Debug::OnThrow(v8::internal::Handle<v8::internal::Object>)",93957336328096,93957336328574],["v8::internal::Debug::AllFramesOnStackAreBlackboxed()",93957336330432,93957336330685],["v8::internal::Debug::OnCompileError(v8::internal::Handle<v8::internal::Script>)",93957336331504,93957336331522],["v8::internal::Debug::OnAfterCompile(v8::internal::Handle<v8::internal::Script>)",93957336332432,93957336332447],["v8::internal::Debug::UpdateState()",93957336332464,93957336332594],["v8::internal::DebugScope::DebugScope(v8::internal::Debug*)",93957336333728,93957336333910],["v8::internal::JSReceiver::ValidateAndApplyPropertyDescriptor(v8::internal::Isolate*, v8::internal::LookupIterator*, bool, v8::internal::PropertyDescriptor*, v8::internal::PropertyDescriptor*, v8::Maybe<v8::internal::ShouldThrow>, v8::internal::Handle<v8::internal::Name>)",93957338745904,93957338747589],["v8::internal::JSObject::SetPrototype(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, bool, v8::internal::ShouldThrow)",93957338761472,93957338762569],["v8::internal::(anonymous namespace)::GetPropertyAttributesWithInterceptorInternal(v8::internal::LookupIterator*, v8::internal::Handle<v8::internal::InterceptorInfo>)",93957338765376,93957338766398],["void v8::internal::StringStream::Add<char const*>(char const*, char const*)",93957338769680,93957338769746],["v8::internal::JSObject::NotifyMapChange(v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Map>, v8::internal::Isolate*)",93957338772528,93957338772603],["v8::internal::JSObject::GetElementsTransitionMap(v8::internal::Handle<v8::internal::JSObject>, v8::internal::ElementsKind)",93957338777952,93957338778090],["v8::internal::JSObject::FastPropertyAtPut(v8::internal::FieldIndex, v8::internal::Object, v8::internal::WriteBarrierMode)",93957338780512,93957338780859],["v8::internal::JSObject::AddProperty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, char const*, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes)",93957338781584,93957338781679],["v8::internal::JSObject::DefinePropertyOrElementIgnoreAttributes(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes)",93957338782064,93957338782374],["v8::internal::JSObject::RequireSlowElements(v8::internal::NumberDictionary)",93957338785104,93957338785180],["v8::internal::PropertyCallbackArguments::CallNamedDeleter(v8::internal::Handle<v8::internal::InterceptorInfo>, v8::internal::Handle<v8::internal::Name>)",93957338785984,93957338786775],["v8::internal::CreateElementDictionary(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>)",93957338788448,93957338788669],["v8::internal::JSObject::HasEnumerableElements()",93957338788832,93957338789337],["v8::internal::JSObject::SetAccessor(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::AccessorInfo>, v8::internal::PropertyAttributes)",93957338789648,93957338790112],["v8::internal::JSObject::PrototypeRegistryCompactionCallback(v8::internal::HeapObject, int, int)",93957338790976,93957338791004],["v8::internal::JSObject::OptimizeAsPrototype(v8::internal::Handle<v8::internal::JSObject>, bool)",93957338791440,93957338792286],["v8::internal::compiler::InstructionSelector::VisitI32x4Neg(v8::internal::compiler::Node*)",93957342129056,93957342129209],["v8::internal::compiler::InstructionSelector::VisitI8x16Neg(v8::internal::compiler::Node*)",93957342130976,93957342131129],["v8::internal::compiler::InstructionSelector::VisitI8x16AllTrue(v8::internal::compiler::Node*)",93957342131936,93957342132089],["v8::internal::compiler::InstructionSelector::VisitF32x4Min(v8::internal::compiler::Node*)",93957342132768,93957342133019],["v8::internal::compiler::InstructionSelector::VisitI32x4Ne(v8::internal::compiler::Node*)",93957342133536,93957342133787],["v8::internal::compiler::InstructionSelector::VisitI32x4GeS(v8::internal::compiler::Node*)",93957342134048,93957342134299],["v8::internal::compiler::InstructionSelector::VisitI16x8Ne(v8::internal::compiler::Node*)",93957342134560,93957342134811],["v8::internal::compiler::InstructionSelector::VisitI16x8GeS(v8::internal::compiler::Node*)",93957342135072,93957342135323],["mremap",139871564302864,139871564302900],["unshare",139871564303152,139871564303185],["timerfd_settime",139871564303296,139871564303332],["fanotify_init",139871564303392,139871564303425],["v8::internal::Debug::RemoveBreakpointForWasmScript(v8::internal::Handle<v8::internal::Script>, int)",93957336315648,93957336315679],["v8::internal::(anonymous namespace)::DiscardBaselineCodeVisitor::VisitThread(v8::internal::Isolate*, v8::internal::ThreadLocalTop*)",93957336320288,93957336320754],["v8::internal::Debug::FindSharedFunctionInfosIntersectingRange(v8::internal::Handle<v8::internal::Script>, int, int, std::__1::vector<v8::internal::Handle<v8::internal::SharedFunctionInfo>, std::__1::allocator<v8::internal::Handle<v8::internal::SharedFunctionInfo> > >*)",93957336323696,93957336325916],["v8::internal::Debug::FreeDebugInfoListNode(v8::internal::DebugInfoListNode*, v8::internal::DebugInfoListNode*)",93957336326784,93957336326997],["v8::internal::Debug::GetLoadedScripts()",93957336327600,93957336328081],["v8::internal::Debug::OnException(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::debug::ExceptionType)",93957336328576,93957336329696],["v8::internal::Debug::IsFrameBlackboxed(v8::internal::JavaScriptFrame*)",93957336330176,93957336330423],["v8::internal::Debug::ShouldBeSkipped()",93957336330688,93957336331044],["v8::internal::JSReceiver::CreateIdentityHash(v8::internal::Isolate*, v8::internal::JSReceiver)",93957338738224,93957338738270],["v8::internal::JSObject::TestIntegrityLevel(v8::internal::Handle<v8::internal::JSObject>, v8::internal::PropertyAttributes)",93957338750576,93957338751146],["v8::internal::GetOwnValuesOrEntries(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::PropertyFilter, bool, bool)",93957338760304,93957338761338],["v8::internal::JSObject::ObjectCreate(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)",93957338763152,93957338763222],["v8::internal::JSObject::GetPropertyWithInterceptor(v8::internal::LookupIterator*, bool*)",93957338764336,93957338764372],["v8::internal::(anonymous namespace)::SetPropertyWithInterceptorInternal(v8::internal::LookupIterator*, v8::internal::Handle<v8::internal::InterceptorInfo>, v8::Maybe<v8::internal::ShouldThrow>, v8::internal::Handle<v8::internal::Object>)",93957338766656,93957338767010],["v8::internal::SharedFunctionInfo::Name() const",93957338769408,93957338769593],["v8::internal::JSObject::IsUnmodifiedApiObject(v8::internal::FullObjectSlot)",93957338770320,93957338770671],["v8::internal::JSObject::LazyRegisterPrototypeUser(v8::internal::Handle<v8::internal::Map>, v8::internal::Isolate*)",93957338771664,93957338772525],["v8::internal::JSObject::MigrateToMap(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Map>, int)",93957338772608,93957338777705],["v8::internal::JSObject::SetPropertyWithInterceptor(v8::internal::LookupIterator*, v8::Maybe<v8::internal::ShouldThrow>, v8::internal::Handle<v8::internal::Object>)",93957338777888,93957338777939],["v8::internal::JSObject::AllocateStorageForMap(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Map>)",93957338778096,93957338779370],["v8::internal::JSObject::TransitionElementsKind(v8::internal::Handle<v8::internal::JSObject>, v8::internal::ElementsKind)",93957338780144,93957338780499],["v8::internal::JSObject::MigrateInstance(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>)",93957338780864,93957338781073],["v8::internal::JSObject::AddProperty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes)",93957338781312,93957338781576],["v8::internal::JSObject::SetOwnPropertyIgnoreAttributes(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes)",93957338781680,93957338781939],["v8::internal::compiler::InstructionSelector::VisitI64x2Neg(v8::internal::compiler::Node*)",93957342127776,93957342127929],["v8::internal::compiler::InstructionSelector::VisitI32x4BitMask(v8::internal::compiler::Node*)",93957342129696,93957342129849],["v8::internal::compiler::InstructionSelector::VisitI16x8Abs(v8::internal::compiler::Node*)",93957342130656,93957342130809],["v8::internal::compiler::InstructionSelector::VisitI8x16BitMask(v8::internal::compiler::Node*)",93957342131296,93957342131449],["v8::internal::compiler::InstructionSelector::VisitI16x8AllTrue(v8::internal::compiler::Node*)",93957342131776,93957342131929],["v8::internal::compiler::InstructionSelector::VisitS128Not(v8::internal::compiler::Node*)",93957342132096,93957342132249],["v8::internal::compiler::InstructionSelector::VisitF64x2Max(v8::internal::compiler::Node*)",93957342132512,93957342132763],["v8::internal::compiler::InstructionSelector::VisitF32x4Max(v8::internal::compiler::Node*)",93957342133024,93957342133275],["inotify_init1",139871564302672,139871564302705],["pivot_root",139871564302960,139871564302993],["sysinfo",139871564303104,139871564303137],["uselib",139871564303200,139871564303233],["v8::internal::Debug::FindInnermostContainingFunctionInfo(v8::internal::Handle<v8::internal::Script>, int)",93957336312576,93957336313212],["v8::internal::Debug::IsBreakOnException(v8::internal::ExceptionBreakType)",93957336317280,93957336317298],["v8::internal::Debug::GetSourceBreakLocations(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957336319344,93957336319871],["v8::internal::Debug::DeoptimizeFunction(v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957336321088,93957336321326],["v8::internal::(anonymous namespace)::FindBreakablePositions(v8::internal::Handle<v8::internal::DebugInfo>, int, int, std::__1::vector<v8::internal::BreakLocation, std::__1::allocator<v8::internal::BreakLocation> >*)",93957336323264,93957336323693],["v8::internal::(anonymous namespace)::CompileTopLevel(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Script>)",93957336325920,93957336326234],["v8::internal::Debug::InstallCoverageInfo(v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::CoverageInfo>)",93957336326624,93957336326778],["v8::internal::Debug::IsBreakAtReturn(v8::internal::JavaScriptFrame*)",93957336327008,93957336327405],["v8::internal::JSReceiver::GetDataProperty(v8::internal::LookupIterator*, v8::internal::AllocationPolicy)",93957338728480,93957338728629],["v8::internal::JSReceiver::DefineProperty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957338740752,93957338741077],["v8::internal::JSObject::DefineOwnPropertyIgnoreAttributes(v8::internal::LookupIterator*, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes, v8::Maybe<v8::internal::ShouldThrow>, v8::internal::JSObject::AccessorInfoHandling)",93957338748176,93957338749026],["v8::internal::JSReceiver::TestIntegrityLevel(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::PropertyAttributes)",93957338755216,93957338755266],["v8::internal::FastGetOwnValuesOrEntries(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, bool, v8::internal::Handle<v8::internal::FixedArray>*)",93957338757888,93957338760092],["v8::internal::JSReceiver::GetOwnEntries(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::PropertyFilter, bool)",93957338761376,93957338761406],["v8::internal::JSReceiver::IsCodeLike(v8::internal::Isolate*) const",93957338762688,93957338762892],["v8::internal::JSObject::set_elements(v8::internal::FixedArrayBase, v8::internal::WriteBarrierMode)",93957338763568,93957338763692],["v8::internal::JSObject::GetPropertyWithFailedAccessCheck(v8::internal::LookupIterator*)",93957338764032,93957338764335],["v8::internal::(anonymous namespace)::GetPropertyWithInterceptorInternal(v8::internal::LookupIterator*, v8::internal::Handle<v8::internal::InterceptorInfo>, bool*)",93957338764384,93957338765373],["v8::internal::JSObject::SetPropertyWithFailedAccessCheck(v8::internal::LookupIterator*, v8::internal::Handle<v8::internal::Object>, v8::Maybe<v8::internal::ShouldThrow>)",93957338766400,93957338766653],["v8::internal::JSObject::SetNormalizedProperty(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyDetails)",93957338767024,93957338767947],["v8::internal::StringStream::Add(char const*)",93957338769360,93957338769404],["void v8::internal::StringStream::Add<char const*, v8::internal::Map>(char const*, char const*, v8::internal::Map)",93957338769600,93957338769680],["v8::internal::JSObject::PrintInstanceMigration(_IO_FILE*, v8::internal::Map, v8::internal::Map)",93957338769760,93957338770306],["v8::internal::JSObject::UpdatePrototypeUserRegistration(v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Map>, v8::internal::Isolate*)",93957338770672,93957338771018],["v8::internal::compiler::InstructionSelector::VisitF64x2PromoteLowF32x4(v8::internal::compiler::Node*)",93957342126496,93957342126649],["v8::internal::compiler::InstructionSelector::VisitI64x2UConvertI32x4Low(v8::internal::compiler::Node*)",93957342128416,93957342128569],["v8::internal::compiler::InstructionSelector::VisitI32x4UConvertI16x8High(v8::internal::compiler::Node*)",93957342129376,93957342129529],["v8::internal::compiler::InstructionSelector::VisitI16x8SConvertI8x16High(v8::internal::compiler::Node*)",93957342130016,93957342130169],["v8::internal::compiler::InstructionSelector::VisitI16x8UConvertI8x16High(v8::internal::compiler::Node*)",93957342130496,93957342130649],["v8::internal::compiler::InstructionSelector::VisitI16x8BitMask(v8::internal::compiler::Node*)",93957342130816,93957342130969],["v8::internal::compiler::InstructionSelector::VisitI8x16Abs(v8::internal::compiler::Node*)",93957342131136,93957342131289],["v8::internal::compiler::InstructionSelector::VisitI64x2AllTrue(v8::internal::compiler::Node*)",93957342131456,93957342131609],["get_kernel_syms",139871564302480,139871564302513],["klogctl",139871564302768,139871564302801],["nfsservctl",139871564302912,139871564302945],["query_module",139871564303008,139871564303044],["v8::internal::Debug::GetHitBreakPoints(v8::internal::Handle<v8::internal::DebugInfo>, int)",93957336308288,93957336309083],["v8::internal::Debug::GetFunctionDebuggingId(v8::internal::Handle<v8::internal::JSFunction>)",93957336314752,93957336314963],["v8::internal::Debug::IsBlackboxed(v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957336316176,93957336317235],["v8::internal::Debug::ClearBreakOnNextFunctionCall()",93957336317344,93957336317385],["v8::internal::Debug::PrepareStepOnThrow()",93957336318064,93957336319338],["v8::internal::Debug::DiscardBaselineCode(v8::internal::SharedFunctionInfo)",93957336319872,93957336320285],["v8::internal::Debug::DiscardAllBaselineCode()",93957336320768,93957336321088],["v8::internal::Debug::InstallDebugBreakTrampoline()",93957336321328,93957336322640],["v8::internal::(anonymous namespace)::UnitFactory::~UnitFactory()",93957338722928,93957338722956],["v8::internal::JSReceiver::GetConstructorName(v8::internal::Handle<v8::internal::JSReceiver>)",93957338736288,93957338736302],["v8::internal::JSReceiver::DeleteProperty(v8::internal::LookupIterator*, v8::internal::LanguageMode)",93957338739056,93957338739829],["v8::internal::JSReceiver::OrdinaryDefineOwnProperty(v8::internal::LookupIterator*, v8::internal::PropertyDescriptor*, v8::Maybe<v8::internal::ShouldThrow>)",93957338742432,93957338743375],["v8::internal::JSObject::DefineOwnPropertyIgnoreAttributes(v8::internal::LookupIterator*, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes, v8::internal::JSObject::AccessorInfoHandling)",93957338747648,93957338747688],["v8::internal::JSReceiver::CreateDataProperty(v8::internal::LookupIterator*, v8::internal::Handle<v8::internal::Object>, v8::Maybe<v8::internal::ShouldThrow>)",93957338749456,93957338749630],["v8::Maybe<bool> v8::internal::JSObject::PreventExtensionsWithTransition<(v8::internal::PropertyAttributes)5>(v8::internal::Handle<v8::internal::JSObject>, v8::internal::ShouldThrow)",93957338753184,93957338755146],["v8::internal::JSObject::PreventExtensions(v8::internal::Handle<v8::internal::JSObject>, v8::internal::ShouldThrow)",93957338755808,93957338756726],["v8::internal::JSReceiver::OrdinaryToPrimitive(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::OrdinaryToPrimitiveHint)",93957338757040,93957338757876],["v8::internal::JSObject::FastPropertyAt(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Representation, v8::internal::FieldIndex)",93957338760096,93957338760289],["v8::internal::JSReceiver::GetOwnValues(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::PropertyFilter, bool)",93957338761344,93957338761371],["v8::internal::JSReceiver::SetPrototype(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::Object>, bool, v8::internal::ShouldThrow)",93957338761408,93957338761463],["v8::internal::JSReceiver::HasProxyInPrototype(v8::internal::Isolate*)",93957338762576,93957338762679],["v8::internal::JSObject::New(v8::internal::Handle<v8::internal::JSFunction>, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::AllocationSite>)",93957338762896,93957338763150],["v8::internal::JSObject::EnsureWritableFastElements(v8::internal::Handle<v8::internal::JSObject>)",93957338763232,93957338763556],["v8::internal::JSObject::GetHeaderSize(v8::internal::InstanceType, bool)",93957338763696,93957338763873],["v8::internal::compiler::InstructionSelector::VisitI32x4ShrU(v8::internal::compiler::Node*)",93957342122656,93957342123197],["v8::internal::compiler::InstructionSelector::VisitF32x4Sqrt(v8::internal::compiler::Node*)",93957342127136,93957342127289],["v8::internal::compiler::InstructionSelector::VisitI64x2SConvertI32x4Low(v8::internal::compiler::Node*)",93957342128096,93957342128249],["v8::internal::compiler::InstructionSelector::VisitI32x4SConvertI16x8Low(v8::internal::compiler::Node*)",93957342128736,93957342128889],["v8::internal::compiler::InstructionSelector::VisitI32x4UConvertI16x8Low(v8::internal::compiler::Node*)",93957342129216,93957342129369],["v8::internal::compiler::InstructionSelector::VisitI32x4Abs(v8::internal::compiler::Node*)",93957342129536,93957342129689],["v8::internal::compiler::InstructionSelector::VisitI16x8SConvertI8x16Low(v8::internal::compiler::Node*)",93957342129856,93957342130009],["v8::internal::compiler::InstructionSelector::VisitI16x8Neg(v8::internal::compiler::Node*)",93957342130176,93957342130329],["delete_module",139871564302288,139871564302321],["inotify_add_watch",139871564302576,139871564302609],["inotify_rm_watch",139871564302720,139871564302753],["mount",139871564302816,139871564302852],["v8::internal::Debug::Unload()",93957336304208,93957336304707],["v8::internal::Debug::ClearBreakPoints(v8::internal::Handle<v8::internal::DebugInfo>)",93957336311024,93957336311494],["v8::internal::Debug::ClearBreakPoint(v8::internal::Handle<v8::internal::BreakPoint>)",93957336314176,93957336314489],["v8::internal::Debug::SetBreakpointForFunction(v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::String>, int*)",93957336315216,93957336315591],["v8::internal::Debug::FloodWithOneShot(v8::internal::Handle<v8::internal::SharedFunctionInfo>, bool)",93957336315680,93957336316173],["v8::internal::Debug::ChangeBreakOnException(v8::internal::ExceptionBreakType, bool)",93957336317248,93957336317267],["v8::internal::Debug::SetBreakOnNextFunctionCall()",93957336317312,93957336317329],["v8::internal::Debug::PrepareStepIn(v8::internal::Handle<v8::internal::JSFunction>)",93957336317392,93957336317746],["v8::Maybe<v8::internal::(anonymous namespace)::CurrencySign> v8::internal::Intl::GetStringOption<v8::internal::(anonymous namespace)::CurrencySign>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, char const*, char const*, std::__1::vector<char const*, std::__1::allocator<char const*> > const&, std::__1::vector<v8::internal::(anonymous namespace)::CurrencySign, std::__1::allocator<v8::internal::(anonymous namespace)::CurrencySign> > const&, v8::internal::(anonymous namespace)::CurrencySign)",93957338712688,93957338713103],["bool v8::internal::AllocationSite::DigestTransitionFeedback<(v8::internal::AllocationSiteUpdateMode)1>(v8::internal::Handle<v8::internal::AllocationSite>, v8::internal::ElementsKind)",93957338725696,93957338726149],["v8::internal::JSObject::CreateDataProperty(v8::internal::LookupIterator*, v8::internal::Handle<v8::internal::Object>, v8::Maybe<v8::internal::ShouldThrow>)",93957338733024,93957338733331],["v8::internal::JSReceiver::GetPropertyAttributes(v8::internal::LookupIterator*)",93957338737200,93957338737518],["v8::internal::JSReceiver::DeleteNormalizedProperty(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::InternalIndex)",93957338738432,93957338739018],["v8::internal::JSReceiver::DeleteProperty(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::Name>, v8::internal::LanguageMode)",93957338740224,93957338740452],["v8::internal::JSReceiver::DefineProperties(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957338741200,93957338742225],["v8::internal::LookupIterator::GetInterceptor() const",93957338744896,93957338745477],["v8::internal::JSReceiver::IsCompatiblePropertyDescriptor(v8::internal::Isolate*, bool, v8::internal::PropertyDescriptor*, v8::internal::PropertyDescriptor*, v8::internal::Handle<v8::internal::Name>, v8::Maybe<v8::internal::ShouldThrow>)",93957338747600,93957338747636],["v8::internal::JSObject::DefineAccessor(v8::internal::LookupIterator*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes)",93957338747696,93957338748165],["v8::internal::JSReceiver::CreateDataProperty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>, v8::Maybe<v8::internal::ShouldThrow>)",93957338749040,93957338749441],["v8::internal::JSReceiver::SetIntegrityLevel(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::PropertyAttributes, v8::internal::ShouldThrow)",93957338749632,93957338750561],["v8::Maybe<bool> v8::internal::JSObject::PreventExtensionsWithTransition<(v8::internal::PropertyAttributes)4>(v8::internal::Handle<v8::internal::JSObject>, v8::internal::ShouldThrow)",93957338751152,93957338753178],["v8::internal::JSReceiver::PreventExtensions(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::ShouldThrow)",93957338755152,93957338755202],["v8::internal::(anonymous namespace)::GenericTestIntegrityLevel(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::PropertyAttributes)",93957338755280,93957338755794],["v8::internal::JSReceiver::IsExtensible(v8::internal::Handle<v8::internal::JSReceiver>)",93957338756736,93957338756796],["v8::internal::compiler::InstructionSelector::VisitF64x2ReplaceLane(v8::internal::compiler::Node*)",93957342119264,93957342119560],["v8::internal::compiler::InstructionSelector::VisitI8x16Shl(v8::internal::compiler::Node*)",93957342124832,93957342125497],["v8::internal::compiler::InstructionSelector::VisitF32x4Abs(v8::internal::compiler::Node*)",93957342126816,93957342126969],["v8::internal::compiler::InstructionSelector::VisitF32x4RecipSqrtApprox(v8::internal::compiler::Node*)",93957342127456,93957342127609],["v8::internal::compiler::InstructionSelector::VisitI64x2BitMask(v8::internal::compiler::Node*)",93957342127936,93957342128089],["v8::internal::compiler::InstructionSelector::VisitI64x2SConvertI32x4High(v8::internal::compiler::Node*)",93957342128256,93957342128409],["v8::internal::compiler::InstructionSelector::VisitI64x2UConvertI32x4High(v8::internal::compiler::Node*)",93957342128576,93957342128729],["v8::internal::compiler::InstructionSelector::VisitI32x4SConvertI16x8High(v8::internal::compiler::Node*)",93957342128896,93957342129049],["capget",139871564302096,139871564302129],["epoll_create1",139871564302384,139871564302417],["init_module",139871564302528,139871564302564],["inotify_init",139871564302624,139871564302657],["v8::internal::BreakLocation::type() const",93957336301120,93957336301156],["v8::internal::Debug::Break(v8::internal::JavaScriptFrame*, v8::internal::Handle<v8::internal::JSFunction>)",93957336305504,93957336306851],["v8::internal::Debug::CheckBreakPoint(v8::internal::Handle<v8::internal::BreakPoint>, bool)",93957336310080,93957336310467],["v8::internal::Debug::SetBreakPointForScript(v8::internal::Handle<v8::internal::Script>, v8::internal::Handle<v8::internal::String>, int*, int*)",93957336311968,93957336312301],["v8::internal::Debug::FindClosestSharedFunctionInfoFromPosition(int, v8::internal::Handle<v8::internal::Script>, v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957336313216,93957336314170],["v8::internal::Debug::RemoveBreakInfoAndMaybeFree(v8::internal::Handle<v8::internal::DebugInfo>)",93957336314496,93957336314747],["v8::internal::Debug::GetOrCreateDebugInfo(v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957336314976,93957336315205],["v8::internal::Debug::RemoveBreakpoint(int)",93957336315600,93957336315645],["v8::internal::JSLocale::Numeric(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSLocale>)",93957338695088,93957338695338],["v8::internal::Managed<icu_68::number::LocalizedNumberFormatter>::FromRawPtr(v8::internal::Isolate*, unsigned long, icu_68::number::LocalizedNumberFormatter*)",93957338716272,93957338716486],["std::__1::__shared_ptr_pointer<icu_68::number::LocalizedNumberFormatter*, std::__1::shared_ptr<icu_68::number::LocalizedNumberFormatter>::__shared_ptr_default_delete<icu_68::number::LocalizedNumberFormatter, icu_68::number::LocalizedNumberFormatter>, std::__1::allocator<icu_68::number::LocalizedNumberFormatter> >::__on_zero_shared()",93957338723584,93957338723628],["v8::internal::JSObject::GetPropertyAttributesWithInterceptor(v8::internal::LookupIterator*)",93957338727584,93957338727615],["v8::internal::JSReceiver::SetOrCopyDataProperties(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertiesEnumerationMode, v8::internal::ScopedVector<v8::internal::Handle<v8::internal::Object> > const*, bool)",93957338728928,93957338732787],["v8::internal::JSReceiver::GetConstructor(v8::internal::Handle<v8::internal::JSReceiver>)",93957338734560,93957338734570],["v8::internal::JSReceiver::GetFunctionRealm(v8::internal::Handle<v8::internal::JSReceiver>)",93957338736608,93957338736741],["v8::internal::JSReceiver::SetProperties(v8::internal::HeapObject)",93957338737760,93957338738082],["v8::internal::JSReceiver::GetOrCreateIdentityHash(v8::internal::Isolate*)",93957338738272,93957338738423],["v8::internal::JSObject::InvalidatePrototypeChains(v8::internal::Map)",93957338739024,93957338739048],["v8::internal::JSObject::DeletePropertyWithInterceptor(v8::internal::LookupIterator*, v8::internal::ShouldThrow)",93957338739840,93957338740220],["v8::internal::JSReceiver::DeletePropertyOrElement(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::Name>, v8::internal::LanguageMode)",93957338740464,93957338740748],["v8::internal::JSReceiver::DefineOwnProperty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyDescriptor*, v8::Maybe<v8::internal::ShouldThrow>)",93957338741088,93957338741194],["v8::internal::JSReceiver::OrdinaryDefineOwnProperty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyDescriptor*, v8::Maybe<v8::internal::ShouldThrow>)",93957338742240,93957338742429],["v8::internal::JSReceiver::GetOwnPropertyDescriptor(v8::internal::LookupIterator*, v8::internal::PropertyDescriptor*)",93957338743376,93957338744889],["v8::internal::JSObject::IsExtensible(v8::internal::Handle<v8::internal::JSObject>)",93957338745488,93957338745900],["v8::internal::compiler::InstructionSelector::VisitF32x4ExtractLane(v8::internal::compiler::Node*)",93957342117392,93957342117606],["v8::internal::compiler::InstructionSelector::VisitI64x2Shl(v8::internal::compiler::Node*)",93957342120480,93957342121021],["v8::internal::compiler::InstructionSelector::VisitI16x8ShrS(v8::internal::compiler::Node*)",93957342123744,93957342124285],["v8::internal::compiler::InstructionSelector::VisitF64x2Sqrt(v8::internal::compiler::Node*)",93957342126176,93957342126329],["v8::internal::compiler::InstructionSelector::VisitF32x4SConvertI32x4(v8::internal::compiler::Node*)",93957342126656,93957342126809],["v8::internal::compiler::InstructionSelector::VisitF32x4Neg(v8::internal::compiler::Node*)",93957342126976,93957342127129],["v8::internal::compiler::InstructionSelector::VisitF32x4RecipApprox(v8::internal::compiler::Node*)",93957342127296,93957342127449],["v8::internal::compiler::InstructionSelector::VisitF32x4DemoteF64x2Zero(v8::internal::compiler::Node*)",93957342127616,93957342127769],["process_vm_writev",139871564301888,139871564301932],["clock_adjtime",139871564302192,139871564302225],["epoll_create",139871564302336,139871564302369],["epoll_ctl",139871564302432,139871564302468],["v8::internal::Debug::Debug(v8::internal::Isolate*)",93957336298928,93957336299072],["v8::internal::DebugFeatureTracker::Track(v8::internal::DebugFeatureTracker::Feature)",93957336302128,93957336302189],["v8::internal::Debug::ClearStepping()",93957336305136,93957336305271],["v8::internal::Debug::PrepareFunctionForDebugExecution(v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957336307168,93957336307485],["v8::internal::Debug::IsMutedAtCurrentLocation(v8::internal::JavaScriptFrame*)",93957336309088,93957336310071],["v8::internal::Debug::SetBreakpoint(v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::BreakPoint>, int*)",93957336310480,93957336311010],["v8::internal::Debug::ApplyBreakPoints(v8::internal::Handle<v8::internal::DebugInfo>)",93957336311504,93957336311968],["v8::internal::Debug::RecordWasmScriptWithBreakpoints(v8::internal::Handle<v8::internal::Script>)",93957336312304,93957336312573],["v8::internal::JSLocale::Is3Alpha(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)",93957338686000,93957338686125],["v8::internal::JSNumberFormat::ResolvedOptions(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSNumberFormat>)",93957338697504,93957338704297],["v8::Maybe<v8::internal::(anonymous namespace)::Notation> v8::internal::Intl::GetStringOption<v8::internal::(anonymous namespace)::Notation>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, char const*, char const*, std::__1::vector<char const*, std::__1::allocator<char const*> > const&, std::__1::vector<v8::internal::(anonymous namespace)::Notation, std::__1::allocator<v8::internal::(anonymous namespace)::Notation> > const&, v8::internal::(anonymous namespace)::Notation)",93957338714960,93957338715375],["v8::internal::(anonymous namespace)::cmp_NumberFormatSpan(v8::internal::NumberFormatSpan const&, v8::internal::NumberFormatSpan const&)",93957338718080,93957338718129],["std::__1::pair<std::__1::__tree_iterator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, icu_68::MeasureUnit>, std::__1::__tree_node<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, icu_68::MeasureUnit>, void*>*, long>, bool> std::__1::__tree<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, icu_68::MeasureUnit>, std::__1::__map_value_compare<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, icu_68::MeasureUnit>, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const>, true>, std::__1::allocator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, icu_68::MeasureUnit> > >::__emplace_unique_key_args<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::piecewise_construct_t const&, std::__1::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&&>, std::__1::tuple<> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::piecewise_construct_t const&, std::__1::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&&>&&, std::__1::tuple<>&&)",93957338723008,93957338723489],["void v8::internal::JSObject::ApplyAttributesToDictionary<v8::internal::NumberDictionary>(v8::internal::Isolate*, v8::internal::ReadOnlyRoots, v8::internal::Handle<v8::internal::NumberDictionary>, v8::internal::PropertyAttributes)",93957338724976,93957338725295],["bool v8::internal::AllocationSite::DigestTransitionFeedback<(v8::internal::AllocationSiteUpdateMode)0>(v8::internal::Handle<v8::internal::AllocationSite>, v8::internal::ElementsKind)",93957338726560,93957338727316],["v8::internal::JSReceiver::HasOwnProperty(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::Name>)",93957338727904,93957338728359],["v8::internal::JSReceiver::HasInPrototypeChain(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::Object>)",93957338728640,93957338728923],["v8::internal::JSObject::NormalizeProperties(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::PropertyNormalizationMode, int, char const*)",93957338732800,93957338733012],["v8::internal::JSReceiver::class_name()",93957338733344,93957338734558],["v8::internal::(anonymous namespace)::GetConstructorHelper(v8::internal::Handle<v8::internal::JSReceiver>)",93957338734576,93957338736277],["v8::internal::JSReceiver::GetCreationContext()",93957338736304,93957338736601],["v8::internal::JSReceiver::GetContextForMicrotask(v8::internal::Handle<v8::internal::JSReceiver>)",93957338736752,93957338737195],["v8::internal::JSReceiver::SetIdentityHash(int)",93957338737520,93957338737758],["v8::internal::JSReceiver::GetIdentityHash()",93957338738096,93957338738222],["v8::internal::compiler::InstructionSelector::VisitS128Zero(v8::internal::compiler::Node*)",93957342115424,93957342115503],["v8::internal::compiler::InstructionSelector::VisitI16x8ExtractLaneU(v8::internal::compiler::Node*)",93957342118288,93957342118502],["v8::internal::compiler::InstructionSelector::VisitI16x8ReplaceLane(v8::internal::compiler::Node*)",93957342119872,93957342120168],["v8::internal::compiler::InstructionSelector::VisitI32x4Shl(v8::internal::compiler::Node*)",93957342121568,93957342122109],["v8::internal::compiler::InstructionSelector::VisitI16x8Shl(v8::internal::compiler::Node*)",93957342123200,93957342123741],["v8::internal::compiler::InstructionSelector::VisitI16x8ShrU(v8::internal::compiler::Node*)",93957342124288,93957342124829],["v8::internal::compiler::InstructionSelector::VisitI8x16ShrU(v8::internal::compiler::Node*)",93957342125504,93957342126169],["v8::internal::compiler::InstructionSelector::VisitF64x2ConvertLowI32x4S(v8::internal::compiler::Node*)",93957342126336,93957342126489],["pkey_set",139871564301568,139871564301644],["modify_ldt",139871564301984,139871564302017],["capset",139871564302144,139871564302177],["create_module",139871564302240,139871564302273],["v8::internal::DebugStackTraceIterator::GetFunction() const",93957336296032,93957336296084],["v8::internal::BreakLocation::BreakIndexFromCodeOffset(v8::internal::Handle<v8::internal::DebugInfo>, v8::internal::Handle<v8::internal::AbstractCode>, int)",93957336299552,93957336299921],["v8::internal::BreakIterator::BreakIndexFromPosition(int)",93957336301472,93957336301815],["v8::internal::Debug::Iterate(v8::internal::RootVisitor*)",93957336304048,93957336304128],["v8::internal::Debug::ClearAllBreakPoints()",93957336304720,93957336305136],["v8::internal::Debug::RemoveAllCoverageInfos()",93957336305280,93957336305495],["v8::internal::Debug::EnsureBreakInfo(v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957336306864,93957336307165],["v8::internal::Debug::OnDebugBreak(v8::internal::Handle<v8::internal::FixedArray>, v8::internal::StepAction)",93957336307488,93957336308277],["v8::internal::JSFunction::ComputeInstanceSizeWithMinSlack(v8::internal::Isolate*)",93957338675024,93957338675193],["v8::internal::JSLocale::Script(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSLocale>)",93957338693728,93957338693863],["v8::internal::JSNumberFormat::MinimumIntegerDigitsFromSkeleton(icu_68::UnicodeString const&)",93957338695776,93957338696196],["v8::internal::JSNumberFormat::GetAvailableLocales()",93957338711920,93957338712063],["v8::Maybe<v8::internal::(anonymous namespace)::UnitDisplay> v8::internal::Intl::GetStringOption<v8::internal::(anonymous namespace)::UnitDisplay>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, char const*, char const*, std::__1::vector<char const*, std::__1::allocator<char const*> > const&, std::__1::vector<v8::internal::(anonymous namespace)::UnitDisplay, std::__1::allocator<v8::internal::(anonymous namespace)::UnitDisplay> > const&, v8::internal::(anonymous namespace)::UnitDisplay)",93957338714464,93957338714879],["v8::internal::(anonymous namespace)::ToICUNotation(v8::internal::(anonymous namespace)::Notation, v8::internal::(anonymous namespace)::CompactDisplay)",93957338715792,93957338715848],["v8::internal::(anonymous namespace)::IcuFormatNumber(v8::internal::Isolate*, icu_68::number::LocalizedNumberFormatter const&, v8::internal::Handle<v8::internal::Object>, icu_68::number::FormattedNumber*)",93957338716704,93957338717115],["v8::Maybe<std::__1::pair<icu_68::MeasureUnit, icu_68::MeasureUnit> > v8::Just<std::__1::pair<icu_68::MeasureUnit, icu_68::MeasureUnit> >(std::__1::pair<icu_68::MeasureUnit, icu_68::MeasureUnit> const&)",93957338719488,93957338719540],["v8::internal::(anonymous namespace)::UnitFactory::~UnitFactory()",93957338722960,93957338723006],["std::__1::__tree<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, icu_68::MeasureUnit>, std::__1::__map_value_compare<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, icu_68::MeasureUnit>, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const>, true>, std::__1::allocator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, icu_68::MeasureUnit> > >::destroy(std::__1::__tree_node<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, icu_68::MeasureUnit>, void*>*)",93957338723504,93957338723579],["v8::base::LazyInstanceImpl<v8::internal::Intl::AvailableLocales<v8::internal::(anonymous namespace)::CheckNumberElements>, v8::base::StaticallyAllocatedInstanceTrait<v8::internal::Intl::AvailableLocales<v8::internal::(anonymous namespace)::CheckNumberElements> >, v8::base::DefaultConstructTrait<v8::internal::Intl::AvailableLocales<v8::internal::(anonymous namespace)::CheckNumberElements> >, v8::base::ThreadSafeInitOnceTrait, v8::base::LeakyInstanceTrait<v8::internal::Intl::AvailableLocales<v8::internal::(anonymous namespace)::CheckNumberElements> > >::InitInstance(void*)",93957338723632,93957338724962],["bool v8::internal::JSObject::UpdateAllocationSite<(v8::internal::AllocationSiteUpdateMode)1>(v8::internal::Handle<v8::internal::JSObject>, v8::internal::ElementsKind)",93957338725296,93957338725695],["bool v8::internal::JSObject::UpdateAllocationSite<(v8::internal::AllocationSiteUpdateMode)0>(v8::internal::Handle<v8::internal::JSObject>, v8::internal::ElementsKind)",93957338726160,93957338726559],["v8::internal::JSReceiver::HasProperty(v8::internal::LookupIterator*)",93957338727328,93957338727574],["v8::internal::JSObject::GetPropertyAttributesWithFailedAccessCheck(v8::internal::LookupIterator*)",93957338727616,93957338727890],["v8::internal::JSReceiver::GetOwnPropertyDescriptor(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyDescriptor*)",93957338728368,93957338728467],["v8::internal::compiler::InstructionSelector::VisitWord32AtomicOr(v8::internal::compiler::Node*)",93957342114224,93957342114348],["v8::internal::compiler::InstructionSelector::VisitI8x16Splat(v8::internal::compiler::Node*)",93957342116512,93957342116839],["v8::internal::compiler::InstructionSelector::VisitI32x4ExtractLane(v8::internal::compiler::Node*)",93957342117840,93957342118054],["v8::internal::compiler::InstructionSelector::VisitI8x16ExtractLaneU(v8::internal::compiler::Node*)",93957342118736,93957342118950],["v8::internal::compiler::InstructionSelector::VisitI32x4ReplaceLane(v8::internal::compiler::Node*)",93957342119568,93957342119864],["v8::internal::compiler::InstructionSelector::VisitI8x16ReplaceLane(v8::internal::compiler::Node*)",93957342120176,93957342120472],["v8::internal::compiler::InstructionSelector::VisitI64x2ShrU(v8::internal::compiler::Node*)",93957342121024,93957342121565],["v8::internal::compiler::InstructionSelector::VisitI32x4ShrS(v8::internal::compiler::Node*)",93957342122112,93957342122653],["splice",139871564301008,139871564301197],["prctl",139871564301696,139871564301832],["__arch_prctl",139871564301936,139871564301969],["fanotify_mark",139871564302048,139871564302084],["v8::internal::DebugStackTraceIterator::~DebugStackTraceIterator()",93957336294816,93957336294884],["v8::internal::TypeProfile::Collect(v8::internal::Isolate*)",93957336296464,93957336297752],["v8::internal::BreakLocation::FromFrame(v8::internal::Handle<v8::internal::DebugInfo>, v8::internal::JavaScriptFrame*)",93957336299120,93957336299308],["v8::internal::BreakLocation::AllAtCurrentStatement(v8::internal::Handle<v8::internal::DebugInfo>, v8::internal::JavaScriptFrame*, std::__1::vector<v8::internal::BreakLocation, std::__1::allocator<v8::internal::BreakLocation> >*)",93957336300368,93957336300870],["v8::internal::BreakIterator::BreakIterator(v8::internal::Handle<v8::internal::DebugInfo>)",93957336301168,93957336301470],["v8::internal::BreakIterator::SetDebugBreak()",93957336301824,93957336302113],["v8::internal::Debug::PrepareStep(v8::internal::StepAction)",93957336302192,93957336304037],["v8::internal::Debug::Iterate(v8::internal::RootVisitor*, char*)",93957336304128,93957336304207],["v8::internal::JSBoundFunction::GetName(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSBoundFunction>)",93957338665568,93957338666039],["v8::internal::JSListFormat::GetAvailableLocales()",93957338681056,93957338681199],["v8::internal::JSLocale::Maximize(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSLocale>)",93957338691824,93957338692408],["v8::internal::(anonymous namespace)::UnicodeKeywordValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSLocale>, char const*)",93957338694448,93957338694983],["v8::internal::JSLocale::ToString(v8::internal::Handle<v8::internal::JSLocale>)",93957338695376,93957338695512],["v8::internal::JSNumberFormat::SignificantDigitsFromSkeleton(icu_68::UnicodeString const&, int*, int*)",93957338696688,93957338697184],["v8::internal::JSNumberFormat::UnwrapNumberFormat(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>)",93957338704896,93957338705290],["v8::internal::Handle<v8::internal::String> v8::internal::Factory::NewStringFromStaticChars<14ul>(char const (&) [14ul], v8::internal::AllocationType)",93957338712176,93957338712237],["v8::internal::(anonymous namespace)::IsWellFormedUnitIdentifier(v8::internal::Isolate*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)",93957338713104,93957338714456],["v8::internal::(anonymous namespace)::CurrencyDigits(icu_68::UnicodeString const&)",93957338714880,93957338714952],["v8::Maybe<v8::internal::(anonymous namespace)::CompactDisplay> v8::internal::Intl::GetStringOption<v8::internal::(anonymous namespace)::CompactDisplay>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, char const*, char const*, std::__1::vector<char const*, std::__1::allocator<char const*> > const&, std::__1::vector<v8::internal::(anonymous namespace)::CompactDisplay, std::__1::allocator<v8::internal::(anonymous namespace)::CompactDisplay> > const&, v8::internal::(anonymous namespace)::CompactDisplay)",93957338715376,93957338715791],["v8::Maybe<v8::internal::(anonymous namespace)::SignDisplay> v8::internal::Intl::GetStringOption<v8::internal::(anonymous namespace)::SignDisplay>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, char const*, char const*, std::__1::vector<char const*, std::__1::allocator<char const*> > const&, std::__1::vector<v8::internal::(anonymous namespace)::SignDisplay, std::__1::allocator<v8::internal::(anonymous namespace)::SignDisplay> > const&, v8::internal::(anonymous namespace)::SignDisplay)",93957338715856,93957338716271],["v8::internal::JSNumberFormat::FormatNumeric(v8::internal::Isolate*, icu_68::number::LocalizedNumberFormatter const&, v8::internal::Handle<v8::internal::Object>)",93957338716496,93957338716704],["v8::internal::FlattenRegionsToParts(std::__1::vector<v8::internal::NumberFormatSpan, std::__1::allocator<v8::internal::NumberFormatSpan> >*)",93957338717120,93957338718070],["v8::internal::JSNumberFormat::FormatToParts(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSNumberFormat>, v8::internal::Handle<v8::internal::Object>)",93957338718144,93957338719488],["v8::base::LazyInstanceImpl<v8::internal::(anonymous namespace)::UnitFactory, v8::base::StaticallyAllocatedInstanceTrait<v8::internal::(anonymous namespace)::UnitFactory>, v8::base::DefaultConstructTrait<v8::internal::(anonymous namespace)::UnitFactory>, v8::base::ThreadSafeInitOnceTrait, v8::base::LeakyInstanceTrait<v8::internal::(anonymous namespace)::UnitFactory> >::InitInstance(void*)",93957338719552,93957338722920],["v8::internal::compiler::InstructionSelector::VisitWord64AtomicExchange(v8::internal::compiler::Node*)",93957342112848,93957342112960],["v8::internal::compiler::InstructionSelector::VisitWord64AtomicAnd(v8::internal::compiler::Node*)",93957342114704,93957342114816],["v8::internal::compiler::InstructionSelector::VisitI32x4Splat(v8::internal::compiler::Node*)",93957342115840,93957342116167],["v8::internal::compiler::InstructionSelector::VisitF32x4Splat(v8::internal::compiler::Node*)",93957342117008,93957342117161],["v8::internal::compiler::InstructionSelector::VisitI64x2ExtractLane(v8::internal::compiler::Node*)",93957342117616,93957342117830],["v8::internal::compiler::InstructionSelector::VisitI16x8ExtractLaneS(v8::internal::compiler::Node*)",93957342118064,93957342118278],["v8::internal::compiler::InstructionSelector::VisitI8x16ExtractLaneS(v8::internal::compiler::Node*)",93957342118512,93957342118726],["v8::internal::compiler::InstructionSelector::VisitF32x4ReplaceLane(v8::internal::compiler::Node*)",93957342118960,93957342119256],["personality",139871564300432,139871564300465],["mlock2",139871564301360,139871564301500],["pkey_get",139871564301648,139871564301692],["process_vm_readv",139871564301840,139871564301884],["v8::internal::ScopeIterator::VisitLocals(std::__1::function<bool (v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object>, v8::internal::ScopeIterator::ScopeType)> const&, v8::internal::ScopeIterator::Mode, v8::internal::ScopeIterator::ScopeType) const",93957336292432,93957336293792],["v8::internal::DebugStackTraceIterator::GetReturnValue() const",93957336295632,93957336295808],["v8::internal::DebugStackTraceIterator::Restart()",93957336296208,93957336296261],["void std::__1::vector<v8::internal::TypeProfileScript, std::__1::allocator<v8::internal::TypeProfileScript> >::__emplace_back_slow_path<v8::internal::TypeProfileScript&>(v8::internal::TypeProfileScript&)",93957336298144,93957336298624],["v8::internal::Debug::~Debug()",93957336299072,93957336299105],["v8::internal::BreakIterator::SkipTo(int)",93957336299312,93957336299539],["v8::internal::BreakIterator::GetBreakLocation()",93957336299936,93957336300357],["v8::internal::BreakLocation::HasBreakPoint(v8::internal::Isolate*, v8::internal::Handle<v8::internal::DebugInfo>) const",93957336300880,93957336301120],["v8::internal::(anonymous namespace)::DateFormatSymbolsNames::~DateFormatSymbolsNames()",93957338663568,93957338663626],["v8::internal::JSFunction::InitializeFeedbackCell(v8::internal::Handle<v8::internal::JSFunction>, v8::internal::IsCompiledScope*, bool)",93957338668624,93957338669075],["v8::internal::JSFunction::ToString(v8::internal::Handle<v8::internal::JSFunction>)",93957338675984,93957338677045],["v8::internal::(anonymous namespace)::ToUnicodeStringArray(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSArray>)",93957338683136,93957338683749],["v8::internal::JSLocale::StartsWithUnicodeLanguageId(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)",93957338686256,93957338688321],["v8::internal::JSLocale::Minimize(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSLocale>)",93957338692992,93957338693576],["v8::internal::JSLocale::BaseName(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSLocale>)",93957338694016,93957338694403],["v8::internal::JSLocale::Collation(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSLocale>)",93957338695024,93957338695041],["v8::internal::JSLocale::NumberingSystem(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSLocale>)",93957338695344,93957338695361],["v8::internal::JSLocale::ToString(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSLocale>)",93957338695520,93957338695764],["v8::internal::JSNumberFormat::FractionDigitsFromSkeleton(icu_68::UnicodeString const&, int*, int*)",93957338696208,93957338696685],["v8::internal::JSNumberFormat::SetDigitOptionsToFormatter(icu_68::number::LocalizedNumberFormatter const&, v8::internal::Intl::NumberFormatDigitOptions const&)",93957338697184,93957338697497],["v8::internal::(anonymous namespace)::StyleFromSkeleton(icu_68::UnicodeString const&)",93957338704304,93957338704894],["v8::internal::JSNumberFormat::New(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, char const*)",93957338705296,93957338711906],["v8::internal::(anonymous namespace)::IsWellFormedCurrencyCode(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)",93957338712064,93957338712171],["v8::Maybe<v8::internal::(anonymous namespace)::CurrencyDisplay> v8::internal::Intl::GetStringOption<v8::internal::(anonymous namespace)::CurrencyDisplay>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, char const*, char const*, std::__1::vector<char const*, std::__1::allocator<char const*> > const&, std::__1::vector<v8::internal::(anonymous namespace)::CurrencyDisplay, std::__1::allocator<v8::internal::(anonymous namespace)::CurrencyDisplay> > const&, v8::internal::(anonymous namespace)::CurrencyDisplay)",93957338712240,93957338712684],["v8::internal::compiler::InstructionSelector::VisitFloat64InsertHighWord32(v8::internal::compiler::Node*)",93957342111664,93957342111888],["v8::internal::compiler::(anonymous namespace)::VisitAtomicBinop(v8::internal::compiler::InstructionSelector*, v8::internal::compiler::Node*, v8::internal::compiler::ArchOpcode)",93957342113520,93957342113827],["v8::internal::compiler::InstructionSelector::VisitWord64AtomicAdd(v8::internal::compiler::Node*)",93957342114480,93957342114592],["v8::internal::compiler::InstructionSelector::VisitWord64AtomicXor(v8::internal::compiler::Node*)",93957342114928,93957342115040],["v8::internal::compiler::InstructionSelector::VisitI64x2Splat(v8::internal::compiler::Node*)",93957342115504,93957342115831],["v8::internal::compiler::InstructionSelector::VisitI16x8Splat(v8::internal::compiler::Node*)",93957342116176,93957342116503],["v8::internal::compiler::InstructionSelector::VisitF64x2Splat(v8::internal::compiler::Node*)",93957342116848,93957342117001],["v8::internal::compiler::InstructionSelector::VisitF64x2ExtractLane(v8::internal::compiler::Node*)",93957342117168,93957342117382],["eventfd",139871564300256,139871564300289],["tee",139871564300656,139871564300821],["open_by_handle_at",139871564301200,139871564301355],["pkey_mprotect",139871564301504,139871564301565],["v8::internal::ScopeIterator::SetVariableValue(v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object>)",93957336288864,93957336289257],["v8::debug::StackTraceIterator::Create(v8::Isolate*, int)",93957336294032,93957336294089],["v8::internal::DebugStackTraceIterator::GetContextId() const",93957336294976,93957336295073],["v8::internal::DebugStackTraceIterator::GetScript() const",93957336295840,93957336295899],["v8::internal::DebugStackTraceIterator::GetScopeIterator() const",93957336296096,93957336296197],["v8::internal::DebugStackTraceIterator::Evaluate(v8::Local<v8::String>, bool)",93957336296272,93957336296452],["v8::internal::TypeProfile::SelectMode(v8::internal::Isolate*, v8::debug::TypeProfileMode)",93957336297760,93957336298130],["void std::__1::allocator_traits<std::__1::allocator<v8::internal::TypeProfileScript> >::construct<v8::internal::TypeProfileScript, v8::internal::TypeProfileScript&, void>(std::__1::allocator<v8::internal::TypeProfileScript>&, v8::internal::TypeProfileScript*, v8::internal::TypeProfileScript&)",93957336298624,93957336298921],["v8::internal::(anonymous namespace)::ScriptNames::type() const",93957338661344,93957338661357],["v8::internal::JSFunction::GetActiveTier() const",93957338664832,93957338664892],["v8::internal::JSFunction::GetFunctionRealm(v8::internal::Handle<v8::internal::JSFunction>)",93957338666704,93957338666809],["v8::internal::JSFunction::EnsureHasInitialMap(v8::internal::Handle<v8::internal::JSFunction>)",93957338671184,93957338671725],["v8::internal::JSFunction::GetDebugName(v8::internal::Handle<v8::internal::JSFunction>)",93957338675296,93957338675737],["v8::internal::JSFunction::ClearTypeFeedbackInfo()",93957338678320,93957338678569],["v8::internal::JSListFormat::FormatList(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSListFormat>, v8::internal::Handle<v8::internal::JSArray>)",93957338681648,93957338682166],["v8::base::LazyInstanceImpl<v8::internal::Intl::AvailableLocales<v8::internal::(anonymous namespace)::CheckListPattern>, v8::base::StaticallyAllocatedInstanceTrait<v8::internal::Intl::AvailableLocales<v8::internal::(anonymous namespace)::CheckListPattern> >, v8::base::DefaultConstructTrait<v8::internal::Intl::AvailableLocales<v8::internal::(anonymous namespace)::CheckListPattern> >, v8::base::ThreadSafeInitOnceTrait, v8::base::LeakyInstanceTrait<v8::internal::Intl::AvailableLocales<v8::internal::(anonymous namespace)::CheckListPattern> > >::InitInstance(void*)",93957338684112,93957338685442],["v8::internal::(anonymous namespace)::IsAlpha(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned long, unsigned long)",93957338686128,93957338686253],["v8::internal::JSLocale::New(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::JSReceiver>)",93957338688336,93957338691817],["v8::internal::(anonymous namespace)::Construct(v8::internal::Isolate*, icu_68::Locale const&)",93957338692416,93957338692980],["v8::internal::JSLocale::Language(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSLocale>)",93957338693584,93957338693719],["v8::internal::JSLocale::Region(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSLocale>)",93957338693872,93957338694007],["v8::internal::JSLocale::Calendar(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSLocale>)",93957338694416,93957338694433],["v8::internal::JSLocale::CaseFirst(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSLocale>)",93957338694992,93957338695009],["v8::internal::JSLocale::HourCycle(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSLocale>)",93957338695056,93957338695073],["v8::internal::compiler::InstructionSelector::VisitUint64LessThanOrEqual(v8::internal::compiler::Node*)",93957342109680,93957342109774],["v8::internal::compiler::InstructionSelector::VisitWord32AtomicStore(v8::internal::compiler::Node*)",93957342112272,93957342112337],["v8::internal::compiler::(anonymous namespace)::VisitAtomicCompareExchange(v8::internal::compiler::InstructionSelector*, v8::internal::compiler::Node*, v8::internal::compiler::ArchOpcode)",93957342113088,93957342113408],["v8::internal::compiler::InstructionSelector::VisitWord32AtomicSub(v8::internal::compiler::Node*)",93957342113968,93957342114092],["v8::internal::compiler::InstructionSelector::VisitWord32AtomicXor(v8::internal::compiler::Node*)",93957342114352,93957342114476],["v8::internal::compiler::InstructionSelector::VisitWord64AtomicSub(v8::internal::compiler::Node*)",93957342114592,93957342114704],["v8::internal::compiler::InstructionSelector::VisitWord64AtomicOr(v8::internal::compiler::Node*)",93957342114816,93957342114928],["v8::internal::compiler::InstructionSelector::VisitS128Const(v8::internal::compiler::Node*)",93957342115040,93957342115424],["setfsuid",139871564299904,139871564299937],["eventfd_write",139871564300336,139871564300377],["epoll_wait",139871564300480,139871564300643],["vmsplice",139871564300832,139871564300997],["v8::internal::ScopeIterator::VisitScope(std::__1::function<bool (v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object>, v8::internal::ScopeIterator::ScopeType)> const&, v8::internal::ScopeIterator::Mode) const",93957336285184,93957336285339],["v8::internal::ScopeIterator::SetContextExtensionValue(v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object>)",93957336291008,93957336291544],["bool std::__1::__function::__policy_invoker<bool (v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object>, v8::internal::ScopeIterator::ScopeType)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::ScopeIterator::DeclaresLocals(v8::internal::ScopeIterator::Mode) const::$_0, bool (v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object>, v8::internal::ScopeIterator::ScopeType)> >(std::__1::__function::__policy_storage const*, v8::internal::Handle<v8::internal::String>&&, v8::internal::Handle<v8::internal::Object>&&, v8::internal::ScopeIterator::ScopeType)",93957336293904,93957336293918],["v8::internal::DebugStackTraceIterator::Advance()",93957336294368,93957336294784],["v8::internal::DebugStackTraceIterator::~DebugStackTraceIterator()",93957336294896,93957336294967],["v8::internal::DebugStackTraceIterator::GetReceiver() const",93957336295088,93957336295629],["v8::internal::DebugStackTraceIterator::GetFunctionDebugName() const",93957336295808,93957336295825],["v8::internal::DebugStackTraceIterator::GetSourceLocation() const",93957336295904,93957336296020],["v8::base::LazyInstanceImpl<v8::internal::(anonymous namespace)::Pattern, v8::base::StaticallyAllocatedInstanceTrait<v8::internal::(anonymous namespace)::Pattern>, v8::internal::(anonymous namespace)::H24Trait, v8::base::ThreadSafeInitOnceTrait, v8::base::LeakyInstanceTrait<v8::internal::(anonymous namespace)::Pattern> >::InitInstance(void*)",93957338651984,93957338652008],["v8::internal::(anonymous namespace)::DateTimeFieldNames::locale() const",93957338662640,93957338662668],["v8::internal::JSFunction::HasAvailableOptimizedCode() const",93957338664448,93957338664467],["v8::internal::JSFunction::ActiveTierIsMidtierTurboprop() const",93957338665184,93957338665321],["v8::internal::JSBoundFunction::GetLength(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSBoundFunction>)",93957338666336,93957338666666],["v8::internal::JSFunction::SetInterruptBudget()",93957338667712,93957338667934],["v8::internal::JSFunction::SetInitialMap(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSFunction>, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::HeapObject>)",93957338670624,93957338670637],["v8::internal::JSFunction::CalculateInstanceSizeHelper(v8::internal::InstanceType, bool, int, int, int*, int*)",93957338672208,93957338672403],["v8::internal::JSFunction::PrintName(_IO_FILE*)",93957338675200,93957338675294],["v8::internal::JSFunction::SetName(v8::internal::Handle<v8::internal::JSFunction>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::String>)",93957338675744,93957338675974],["v8::internal::(anonymous namespace)::NativeCodeFunctionSourceString(v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957338677056,93957338678310],["v8::internal::JSListFormat::New(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957338678576,93957338681048],["v8::internal::JSListFormat::ResolvedOptions(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSListFormat>)",93957338681200,93957338681642],["v8::internal::JSListFormat::FormatListToParts(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSListFormat>, v8::internal::Handle<v8::internal::JSArray>)",93957338682176,93957338683133],["void std::__1::vector<icu_68::UnicodeString, std::__1::allocator<icu_68::UnicodeString> >::__push_back_slow_path<icu_68::UnicodeString>(icu_68::UnicodeString&&)",93957338683760,93957338684105],["v8::internal::JSLocale::Is38AlphaNumList(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)",93957338685456,93957338685996],["v8::internal::compiler::InstructionSelector::VisitUint32LessThan(v8::internal::compiler::Node*)",93957342108464,93957342108558],["v8::internal::compiler::InstructionSelector::VisitFloat64Equal(v8::internal::compiler::Node*)",93957342110544,93957342110633],["v8::internal::compiler::InstructionSelector::VisitMemoryBarrier(v8::internal::compiler::Node*)",93957342112048,93957342112070],["v8::internal::compiler::InstructionSelector::VisitWord64AtomicStore(v8::internal::compiler::Node*)",93957342112640,93957342112705],["v8::internal::compiler::InstructionSelector::VisitWord32AtomicCompareExchange(v8::internal::compiler::Node*)",93957342112960,93957342113084],["v8::internal::compiler::InstructionSelector::VisitWord64AtomicCompareExchange(v8::internal::compiler::Node*)",93957342113408,93957342113520],["v8::internal::compiler::InstructionSelector::VisitWord32AtomicAdd(v8::internal::compiler::Node*)",93957342113840,93957342113964],["v8::internal::compiler::InstructionSelector::VisitWord32AtomicAnd(v8::internal::compiler::Node*)",93957342114096,93957342114220],["__clone",139871564299696,139871564299786],["epoll_pwait",139871564300000,139871564300187],["eventfd_read",139871564300304,139871564300335],["prlimit",139871564300384,139871564300420],["v8::internal::ScopeIterator::MaterializeScopeDetails()",93957336283200,93957336284013],["v8::internal::ScopeIterator::WithContextExtension()",93957336286240,93957336286410],["v8::internal::ScopeIterator::SetModuleVariableValue(v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object>)",93957336290560,93957336290782],["v8::internal::ScopeIterator::ClosureScopeHasThisReference() const",93957336291984,93957336292008],["v8::internal::(anonymous namespace)::ScopeChainRetriever::RetrieveScopeChainDefaultConstructor(v8::internal::Scope*)",93957336293792,93957336293892],["bool std::__1::__function::__policy_invoker<bool (v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object>, v8::internal::ScopeIterator::ScopeType)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::ScopeIterator::ScopeObject(v8::internal::ScopeIterator::Mode)::$_1, bool (v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object>, v8::internal::ScopeIterator::ScopeType)> >(std::__1::__function::__policy_storage const*, v8::internal::Handle<v8::internal::String>&&, v8::internal::Handle<v8::internal::Object>&&, v8::internal::ScopeIterator::ScopeType)",93957336293920,93957336294030],["v8::internal::DebugStackTraceIterator::DebugStackTraceIterator(v8::internal::Isolate*, int)",93957336294096,93957336294364],["v8::internal::DebugStackTraceIterator::Done() const",93957336294784,93957336294801],["v8::internal::(anonymous namespace)::SpecialTimeZoneMap::Add(char const*)",93957338642304,93957338643298],["v8::internal::JSDisplayNames::ResolvedOptions(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSDisplayNames>)",93957338658768,93957338659721],["v8::internal::(anonymous namespace)::CurrencyNames::of(v8::internal::Isolate*, char const*) const",93957338662016,93957338662450],["v8::internal::(anonymous namespace)::DateFormatSymbolsNames::of(v8::internal::Isolate*, char const*) const",93957338663248,93957338663395],["v8::internal::JSFunction::GetAvailableCodeKinds() const",93957338663712,93957338664333],["v8::internal::JSFunction::HasAvailableCodeKind(v8::internal::CodeKind) const",93957338664656,93957338664714],["v8::internal::JSFunction::ActiveTierIsBaseline() const",93957338665008,93957338665036],["v8::internal::JSFunction::CanDiscardCompiled() const",93957338665392,93957338665447],["v8::internal::JSFunction::GetName(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSFunction>)",93957338666048,93957338666327],["v8::internal::JSBoundFunction::ToString(v8::internal::Handle<v8::internal::JSBoundFunction>)",93957338666672,93957338666691],["v8::internal::JSFunction::EnsureClosureFeedbackCellArray(v8::internal::Handle<v8::internal::JSFunction>, bool)",93957338666816,93957338667708],["v8::internal::JSFunction::EnsureFeedbackVector(v8::internal::Handle<v8::internal::JSFunction>, v8::internal::IsCompiledScope*)",93957338667936,93957338668621],["v8::internal::JSFunction::SetPrototype(v8::internal::Handle<v8::internal::JSFunction>, v8::internal::Handle<v8::internal::Object>)",93957338669088,93957338670611],["v8::internal::JSFunction::SetInitialMap(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSFunction>, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::JSFunction>)",93957338670640,93957338671173],["v8::internal::JSFunction::CalculateExpectedNofProperties(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSFunction>)",93957338671728,93957338672198],["v8::internal::JSFunction::GetDerivedMap(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSFunction>, v8::internal::Handle<v8::internal::JSReceiver>)",93957338672416,93957338675017],["v8::internal::compiler::(anonymous namespace)::VisitWord64EqualImpl(v8::internal::compiler::InstructionSelector*, v8::internal::compiler::Node*, v8::internal::compiler::FlagsContinuation*)",93957342106544,93957342106817],["v8::internal::compiler::InstructionSelector::VisitInt32SubWithOverflow(v8::internal::compiler::Node*)",93957342109232,93957342109386],["v8::internal::compiler::InstructionSelector::VisitFloat32LessThan(v8::internal::compiler::Node*)",93957342110032,93957342110282],["v8::internal::compiler::InstructionSelector::VisitFloat64LessThanOrEqual(v8::internal::compiler::Node*)",93957342111056,93957342111145],["v8::internal::compiler::InstructionSelector::VisitFloat64SilenceNaN(v8::internal::compiler::Node*)",93957342111888,93957342112041],["v8::internal::compiler::InstructionSelector::VisitWord32AtomicLoad(v8::internal::compiler::Node*)",93957342112080,93957342112262],["v8::internal::compiler::(anonymous namespace)::VisitAtomicExchange(v8::internal::compiler::InstructionSelector*, v8::internal::compiler::Node*, v8::internal::compiler::ArchOpcode)",93957342112352,93957342112626],["v8::internal::compiler::InstructionSelector::VisitWord32AtomicExchange(v8::internal::compiler::Node*)",93957342112720,93957342112844],["ioperm",139871564299440,139871564299473],["umount2",139871564299808,139871564299841],["setfsgid",139871564299952,139871564299985],["signalfd",139871564300192,139871564300242],["v8::internal::ScopeIterator::TryParseAndRetrieveScopes(v8::internal::ScopeIterator::ReparseStrategy)",93957336279344,93957336281494],["v8::internal::ScopeIterator::start_position()",93957336284688,93957336284802],["v8::internal::ScopeIterator::AdvanceContext()",93957336285552,93957336285854],["v8::internal::ScopeIterator::VisitModuleScope(std::__1::function<bool (v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object>, v8::internal::ScopeIterator::ScopeType)> const&) const",93957336287728,93957336288282],["v8::internal::ScopeIterator::SetLocalVariableValue(v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object>)",93957336289264,93957336290558],["v8::internal::ScopeIterator::SetContextVariableValue(v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object>)",93957336290784,93957336290995],["v8::internal::ScopeIterator::SetScriptVariableValue(v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object>)",93957336291552,93957336291970],["v8::internal::ScopeIterator::VisitContextLocals(std::__1::function<bool (v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object>, v8::internal::ScopeIterator::ScopeType)> const&, v8::internal::Handle<v8::internal::ScopeInfo>, v8::internal::Handle<v8::internal::Context>, v8::internal::ScopeIterator::ScopeType) const",93957336292016,93957336292426],["v8::internal::JSDateTimeFormat::FormatRange(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSDateTimeFormat>, double, double)",93957338623440,93957338624316],["v8::internal::(anonymous namespace)::Pattern::Get() const",93957338650416,93957338650426],["v8::internal::JSDisplayNames::New(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957338653168,93957338656317],["v8::internal::(anonymous namespace)::LocaleDisplayNamesCommon::locale() const",93957338660160,93957338660200],["v8::internal::(anonymous namespace)::LocaleDisplayNamesCommon::~LocaleDisplayNamesCommon()",93957338661952,93957338661995],["v8::internal::(anonymous namespace)::DateTimeFieldNames::~DateTimeFieldNames()",93957338662544,93957338662615],["v8::internal::(anonymous namespace)::MonthNames::~MonthNames()",93957338663152,93957338663215],["v8::internal::(anonymous namespace)::MonthNames::ComputeIndex(char const*) const",93957338663472,93957338663496],["v8::internal::(anonymous namespace)::DayPeriodNames::ComputeIndex(char const*) const",93957338663632,93957338663701],["v8::internal::JSFunction::HasAttachedOptimizedCode() const",93957338664336,93957338664442],["v8::internal::JSFunction::HasAttachedCodeKind(v8::internal::CodeKind) const",93957338664480,93957338664648],["v8::internal::JSFunction::ActiveTierIsIgnition() const",93957338664720,93957338664832],["v8::internal::JSFunction::ActiveTierIsTurbofan() const",93957338664896,93957338664999],["v8::internal::JSFunction::ActiveTierIsToptierTurboprop() const",93957338665040,93957338665176],["v8::internal::JSFunction::NextTier() const",93957338665328,93957338665383],["v8::internal::JSBoundFunction::GetFunctionRealm(v8::internal::Handle<v8::internal::JSBoundFunction>)",93957338665456,93957338665568],["v8::internal::compiler::InstructionSelector::VisitFloat64Ieee754Binop(v8::internal::compiler::Node*, unsigned int)",93957342100000,93957342100248],["v8::internal::compiler::InstructionSelector::VisitSwitch(v8::internal::compiler::Node*, v8::internal::compiler::SwitchInfo const&)",93957342107696,93957342108092],["v8::internal::compiler::InstructionSelector::VisitWord64Equal(v8::internal::compiler::Node*)",93957342108656,93957342109057],["v8::internal::compiler::InstructionSelector::VisitInt64LessThanOrEqual(v8::internal::compiler::Node*)",93957342109488,93957342109582],["v8::internal::compiler::InstructionSelector::VisitFloat32Equal(v8::internal::compiler::Node*)",93957342109776,93957342110026],["v8::internal::compiler::InstructionSelector::VisitFloat32LessThanOrEqual(v8::internal::compiler::Node*)",93957342110288,93957342110538],["v8::internal::compiler::InstructionSelector::VisitFloat64LessThan(v8::internal::compiler::Node*)",93957342110640,93957342111048],["v8::internal::compiler::InstructionSelector::VisitFloat64InsertLowWord32(v8::internal::compiler::Node*)",93957342111152,93957342111650],["gnu_dev_major",139871564299104,139871564299134],["__sysctl",139871564299536,139871564299680],["umount",139871564299792,139871564299799],["readahead",139871564299856,139871564299892],["v8::internal::DebugScopeIterator::GetFunctionDebugName()",93957336278944,93957336278958],["v8::internal::ScopeIterator::UnwrapEvaluationContext()",93957336282208,93957336282435],["v8::internal::ScopeIterator::ScopeObject(v8::internal::ScopeIterator::Mode)",93957336284304,93957336284616],["v8::internal::ScopeIterator::HasPositionInfo()",93957336284944,93957336285000],["v8::internal::ScopeIterator::AdvanceToNonHiddenScope()",93957336285344,93957336285539],["v8::internal::ScopeIterator::Next()",93957336285856,93957336286239],["v8::internal::ScopeIterator::VisitLocalScope(std::__1::function<bool (v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object>, v8::internal::ScopeIterator::ScopeType)> const&, v8::internal::ScopeIterator::Mode, v8::internal::ScopeIterator::ScopeType) const",93957336286416,93957336287720],["v8::internal::ScopeIterator::VisitScriptScope(std::__1::function<bool (v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object>, v8::internal::ScopeIterator::ScopeType)> const&) const",93957336288288,93957336288850],["v8::base::LazyInstanceImpl<v8::internal::(anonymous namespace)::DateTimePatternGeneratorCache, v8::base::StaticallyAllocatedInstanceTrait<v8::internal::(anonymous namespace)::DateTimePatternGeneratorCache>, v8::base::DefaultConstructTrait<v8::internal::(anonymous namespace)::DateTimePatternGeneratorCache>, v8::base::ThreadSafeInitOnceTrait, v8::base::LeakyInstanceTrait<v8::internal::(anonymous namespace)::DateTimePatternGeneratorCache> >::Pointer()",93957338611280,93957338611416],["v8::internal::(anonymous namespace)::PatternMap::~PatternMap()",93957338639504,93957338639575],["v8::base::LazyInstanceImpl<v8::internal::(anonymous namespace)::Pattern, v8::base::StaticallyAllocatedInstanceTrait<v8::internal::(anonymous namespace)::Pattern>, v8::internal::(anonymous namespace)::H11Trait, v8::base::ThreadSafeInitOnceTrait, v8::base::LeakyInstanceTrait<v8::internal::(anonymous namespace)::Pattern> >::InitInstance(void*)",93957338643968,93957338643992],["v8::internal::(anonymous namespace)::PatternData::~PatternData()",93957338651296,93957338651375],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::operator=(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)",93957338652048,93957338652123],["v8::Maybe<v8::internal::(anonymous namespace)::Type> v8::internal::Intl::GetStringOption<v8::internal::(anonymous namespace)::Type>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, char const*, char const*, std::__1::vector<char const*, std::__1::allocator<char const*> > const&, std::__1::vector<v8::internal::(anonymous namespace)::Type, std::__1::allocator<v8::internal::(anonymous namespace)::Type> > const&, v8::internal::(anonymous namespace)::Type)",93957338656464,93957338656879],["v8::internal::(anonymous namespace)::RegionNames::~RegionNames()",93957338660080,93957338660136],["v8::internal::(anonymous namespace)::RegionNames::type() const",93957338660736,93957338660749],["v8::internal::(anonymous namespace)::ScriptNames::of(v8::internal::Isolate*, char const*) const",93957338661360,93957338661941],["v8::internal::(anonymous namespace)::CurrencyNames::type() const",93957338662000,93957338662013],["v8::internal::(anonymous namespace)::DateTimeFieldNames::~DateTimeFieldNames()",93957338662464,93957338662530],["v8::internal::(anonymous namespace)::DateTimeFieldNames::type() const",93957338662624,93957338662637],["v8::internal::(anonymous namespace)::DateTimeFieldNames::of(v8::internal::Isolate*, char const*) const",93957338662672,93957338663138],["v8::internal::(anonymous namespace)::DateFormatSymbolsNames::locale() const",93957338663216,93957338663244],["v8::internal::(anonymous namespace)::DateFormatSymbolsNames::calendar() const",93957338663408,93957338663458],["v8::internal::(anonymous namespace)::WeekdayNames::ComputeIndex(char const*) const",93957338663504,93957338663556],["v8::internal::compiler::InstructionSelector::VisitFloat64Mul(v8::internal::compiler::Node*)",93957342099440,93957342099460],["v8::internal::compiler::InstructionSelector::VisitWordCompareZero(v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::FlagsContinuation*)",93957342101808,93957342103438],["v8::internal::compiler::BinopMatcher<v8::internal::compiler::FloatMatcher<double, (v8::internal::compiler::IrOpcode::Value)26>, v8::internal::compiler::FloatMatcher<double, (v8::internal::compiler::IrOpcode::Value)26> >::BinopMatcher(v8::internal::compiler::Node*)",93957342107024,93957342107490],["v8::internal::compiler::InstructionSelector::VisitInt32LessThan(v8::internal::compiler::Node*)",93957342108272,93957342108366],["v8::internal::compiler::InstructionSelector::VisitUint32LessThanOrEqual(v8::internal::compiler::Node*)",93957342108560,93957342108654],["v8::internal::compiler::InstructionSelector::VisitInt32AddWithOverflow(v8::internal::compiler::Node*)",93957342109072,93957342109226],["v8::internal::compiler::InstructionSelector::VisitInt64LessThan(v8::internal::compiler::Node*)",93957342109392,93957342109486],["v8::internal::compiler::InstructionSelector::VisitUint64LessThan(v8::internal::compiler::Node*)",93957342109584,93957342109678],["removexattr",139871564291168,139871564291201],["gnu_dev_makedev",139871564299152,139871564299221],["iopl",139871564299488,139871564299521],["__adjtimex",139871564299680,139871564299690],["v8::internal::DebugScopeIterator::DebugScopeIterator(v8::internal::Isolate*, v8::internal::FrameInspector*)",93957336278480,93957336278574],["v8::internal::DebugScopeIterator::SetVariableValue(v8::Local<v8::String>, v8::Local<v8::Value>)",93957336279072,93957336279086],["v8::internal::ScopeIterator::GetFunctionDebugName() const",93957336281568,93957336281788],["v8::internal::ScopeIterator::Restart()",93957336282960,93957336283012],["v8::internal::ScopeIterator::Type() const",93957336284016,93957336284299],["v8::internal::ScopeIterator::HasContext() const",93957336284624,93957336284684],["v8::internal::ScopeIterator::end_position()",93957336284816,93957336284930],["v8::internal::ScopeIterator::DeclaresLocals(v8::internal::ScopeIterator::Mode) const",93957336285008,93957336285178],["v8::internal::JSDateTimeFormat::set_icu_simple_date_format(v8::internal::Managed<icu_68::SimpleDateFormat>, v8::internal::WriteBarrierMode)",93957338595840,93957338595964],["std::__1::vector<v8::internal::JSDateTimeFormat::DateTimeStyle, std::__1::allocator<v8::internal::JSDateTimeFormat::DateTimeStyle> >::vector(std::initializer_list<v8::internal::JSDateTimeFormat::DateTimeStyle>)",93957338617440,93957338617554],["v8::internal::(anonymous namespace)::PatternItems::~PatternItems()",93957338638768,93957338638870],["std::__1::pair<std::__1::__tree_iterator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<icu_68::SimpleDateFormat, std::__1::default_delete<icu_68::SimpleDateFormat> > >, std::__1::__tree_node<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<icu_68::SimpleDateFormat, std::__1::default_delete<icu_68::SimpleDateFormat> > >, void*>*, long>, bool> std::__1::__tree<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<icu_68::SimpleDateFormat, std::__1::default_delete<icu_68::SimpleDateFormat> > >, std::__1::__map_value_compare<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<icu_68::SimpleDateFormat, std::__1::default_delete<icu_68::SimpleDateFormat> > >, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::allocator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<icu_68::SimpleDateFormat, std::__1::default_delete<icu_68::SimpleDateFormat> > > > >::__emplace_unique_key_args<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::piecewise_construct_t const&, std::__1::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&>, std::__1::tuple<> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::piecewise_construct_t const&, std::__1::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&>&&, std::__1::tuple<>&&)",93957338640256,93957338640736],["v8::base::LazyInstanceImpl<v8::internal::(anonymous namespace)::CalendarCache, v8::base::StaticallyAllocatedInstanceTrait<v8::internal::(anonymous namespace)::CalendarCache>, v8::base::DefaultConstructTrait<v8::internal::(anonymous namespace)::CalendarCache>, v8::base::ThreadSafeInitOnceTrait, v8::base::LeakyInstanceTrait<v8::internal::(anonymous namespace)::CalendarCache> >::InitInstance(void*)",93957338643824,93957338643868],["v8::internal::(anonymous namespace)::Pattern::~Pattern()",93957338650192,93957338650297],["v8::internal::(anonymous namespace)::PatternData::~PatternData()",93957338650864,93957338650942],["v8::base::LazyInstanceImpl<v8::internal::(anonymous namespace)::Pattern, v8::base::StaticallyAllocatedInstanceTrait<v8::internal::(anonymous namespace)::Pattern>, v8::internal::(anonymous namespace)::H12Trait, v8::base::ThreadSafeInitOnceTrait, v8::base::LeakyInstanceTrait<v8::internal::(anonymous namespace)::Pattern> >::InitInstance(void*)",93957338651920,93957338651944],["v8::base::LazyInstanceImpl<v8::internal::(anonymous namespace)::Pattern, v8::base::StaticallyAllocatedInstanceTrait<v8::internal::(anonymous namespace)::Pattern>, v8::internal::(anonymous namespace)::HDefaultTrait, v8::base::ThreadSafeInitOnceTrait, v8::base::LeakyInstanceTrait<v8::internal::(anonymous namespace)::Pattern> >::InitInstance(void*)",93957338652016,93957338652040],["v8::internal::(anonymous namespace)::LazyCreateDateIntervalFormat(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSDateTimeFormat>)",93957338652128,93957338653166],["v8::internal::JSDisplayNames::GetAvailableLocales()",93957338656320,93957338656463],["v8::internal::(anonymous namespace)::CreateInternal(icu_68::Locale const&, v8::internal::JSDisplayNames::Style, v8::internal::(anonymous namespace)::Type, bool)",93957338656880,93957338658767],["v8::internal::JSDisplayNames::Of(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSDisplayNames>, v8::internal::Handle<v8::internal::Object>)",93957338659728,93957338660066],["v8::internal::(anonymous namespace)::LanguageNames::type() const",93957338660144,93957338660157],["v8::internal::(anonymous namespace)::LanguageNames::of(v8::internal::Isolate*, char const*) const",93957338660208,93957338660731],["v8::internal::(anonymous namespace)::RegionNames::of(v8::internal::Isolate*, char const*) const",93957338660752,93957338661333],["v8::internal::compiler::InstructionSelector::VisitFloat32Div(v8::internal::compiler::Node*)",93957342098736,93957342098756],["v8::internal::compiler::InstructionSelector::VisitFloat64Min(v8::internal::compiler::Node*)",93957342099792,93957342099807],["v8::internal::compiler::InstructionSelector::EmitPrepareArguments(v8::internal::ZoneVector<v8::internal::compiler::PushParameter>*, v8::internal::compiler::CallDescriptor const*, v8::internal::compiler::Node*)",93957342100432,93957342101468],["v8::internal::compiler::(anonymous namespace)::VisitWordCompare(v8::internal::compiler::InstructionSelector*, v8::internal::compiler::Node*, unsigned int, v8::internal::compiler::FlagsContinuation*)",93957342104224,93957342105559],["v8::internal::compiler::(anonymous namespace)::VisitFloat64Compare(v8::internal::compiler::InstructionSelector*, v8::internal::compiler::Node*, v8::internal::compiler::FlagsContinuation*)",93957342106832,93957342107016],["v8::internal::compiler::(anonymous namespace)::VisitCompare(v8::internal::compiler::InstructionSelector*, unsigned int, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::FlagsContinuation*, bool)",93957342107504,93957342107691],["v8::internal::compiler::InstructionSelector::VisitWord32Equal(v8::internal::compiler::Node*)",93957342108096,93957342108268],["v8::internal::compiler::InstructionSelector::VisitInt32LessThanOrEqual(v8::internal::compiler::Node*)",93957342108368,93957342108462],["lgetxattr",139871564290976,139871564291012],["__getauxval",139871564291264,139871564291368],["gnu_dev_minor",139871564299136,139871564299152],["__libc_allocate_once_slow",139871564299232,139871564299330],["v8::internal::DebugPropertyIterator::has_native_setter()",93957336277472,93957336277515],["v8::internal::DebugScopeIterator::DebugScopeIterator(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSGeneratorObject>)",93957336278768,93957336278857],["v8::internal::DebugScopeIterator::GetStartLocation()",93957336278976,93957336279011],["v8::internal::DebugScopeIterator::~DebugScopeIterator()",93957336279120,93957336279162],["v8::internal::ScopeIterator::~ScopeIterator()",93957336281504,93957336281556],["v8::internal::ScopeIterator::ScopeIterator(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSFunction>)",93957336281792,93957336282208],["v8::internal::ScopeIterator::ScopeIterator(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSGeneratorObject>)",93957336282448,93957336282950],["v8::internal::ScopeIterator::GetSourcePosition()",93957336283024,93957336283193],["v8::internal::Managed<icu_68::PluralRules>::FromUniquePtr(v8::internal::Isolate*, unsigned long, std::__1::unique_ptr<icu_68::PluralRules, std::__1::default_delete<icu_68::PluralRules> >)",93957338586224,93957338586448],["v8::internal::JSDateTimeFormat::ToLocaleDateTime(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::JSDateTimeFormat::RequiredOption, v8::internal::JSDateTimeFormat::DefaultsOption, char const*)",93957338600832,93957338601573],["v8::internal::(anonymous namespace)::CreateCalendar(v8::internal::Isolate*, icu_68::Locale const&, icu_68::TimeZone*)",93957338615232,93957338615958],["v8::internal::Managed<icu_68::DateIntervalFormat>::FromRawPtr(v8::internal::Isolate*, unsigned long, icu_68::DateIntervalFormat*)",93957338621408,93957338621622],["v8::base::LazyInstanceImpl<v8::internal::(anonymous namespace)::PatternItems, v8::base::StaticallyAllocatedInstanceTrait<v8::internal::(anonymous namespace)::PatternItems>, v8::base::DefaultConstructTrait<v8::internal::(anonymous namespace)::PatternItems>, v8::base::ThreadSafeInitOnceTrait, v8::base::LeakyInstanceTrait<v8::internal::(anonymous namespace)::PatternItems> >::InitInstance(void*)",93957338626640,93957338638655],["v8::internal::(anonymous namespace)::PatternMap::~PatternMap()",93957338639024,93957338639092],["std::__1::vector<v8::internal::(anonymous namespace)::PatternMap, std::__1::allocator<v8::internal::(anonymous namespace)::PatternMap> >::vector(std::__1::vector<v8::internal::(anonymous namespace)::PatternMap, std::__1::allocator<v8::internal::(anonymous namespace)::PatternMap> > const&)",93957338639728,93957338640035],["v8::internal::(anonymous namespace)::ToTitleCaseTimezoneLocation(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)",93957338641424,93957338642029],["std::__1::pair<std::__1::__tree_iterator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::__tree_node<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, void*>*, long>, bool> std::__1::__tree<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::__map_value_compare<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::allocator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > >::__emplace_unique_key_args<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >&&)",93957338643312,93957338643822],["std::__1::__tree<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<icu_68::SimpleDateFormat, std::__1::default_delete<icu_68::SimpleDateFormat> > >, std::__1::__map_value_compare<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<icu_68::SimpleDateFormat, std::__1::default_delete<icu_68::SimpleDateFormat> > >, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::allocator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<icu_68::SimpleDateFormat, std::__1::default_delete<icu_68::SimpleDateFormat> > > > >::destroy(std::__1::__tree_node<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<icu_68::SimpleDateFormat, std::__1::default_delete<icu_68::SimpleDateFormat> > >, void*>*)",93957338643872,93957338643961],["v8::internal::(anonymous namespace)::Pattern::Pattern(char const*, char const*)",93957338644000,93957338650192],["v8::internal::(anonymous namespace)::Pattern::~Pattern()",93957338650304,93957338650406],["v8::internal::(anonymous namespace)::PatternData::PatternData(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::vector<v8::internal::(anonymous namespace)::PatternMap, std::__1::allocator<v8::internal::(anonymous namespace)::PatternMap> >, std::__1::vector<char const*, std::__1::allocator<char const*> >)",93957338650432,93957338650853],["void std::__1::allocator_traits<std::__1::allocator<v8::internal::(anonymous namespace)::PatternData> >::construct<v8::internal::(anonymous namespace)::PatternData, v8::internal::(anonymous namespace)::PatternData const&, void>(std::__1::allocator<v8::internal::(anonymous namespace)::PatternData>&, v8::internal::(anonymous namespace)::PatternData*, v8::internal::(anonymous namespace)::PatternData const&)",93957338650944,93957338651281],["std::__1::pair<std::__1::__tree_iterator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const>, std::__1::__tree_node<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const>, void*>*, long>, bool> std::__1::__tree<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const>, std::__1::__map_value_compare<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const>, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const>, true>, std::__1::allocator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const> > >::__emplace_unique_impl<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >(std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >&&)",93957338651376,93957338651917],["v8::base::LazyInstanceImpl<v8::internal::(anonymous namespace)::Pattern, v8::base::StaticallyAllocatedInstanceTrait<v8::internal::(anonymous namespace)::Pattern>, v8::internal::(anonymous namespace)::H23Trait, v8::base::ThreadSafeInitOnceTrait, v8::base::LeakyInstanceTrait<v8::internal::(anonymous namespace)::Pattern> >::InitInstance(void*)",93957338651952,93957338651976],["v8::internal::compiler::InstructionSelector::VisitF64x2Trunc(v8::internal::compiler::Node*)",93957342096416,93957342096569],["v8::internal::compiler::(anonymous namespace)::VisitRRO(v8::internal::compiler::InstructionSelector*, v8::internal::compiler::Node*, unsigned int)",93957342099104,93957342099358],["v8::internal::compiler::InstructionSelector::VisitFloat64Mod(v8::internal::compiler::Node*)",93957342099504,93957342099773],["v8::internal::compiler::InstructionSelector::VisitFloat32Neg(v8::internal::compiler::Node*)",93957342099872,93957342099923],["v8::internal::compiler::InstructionSelector::VisitFloat64Ieee754Unop(v8::internal::compiler::Node*, unsigned int)",93957342100256,93957342100422],["v8::internal::compiler::InstructionSelector::EmitPrepareResults(v8::internal::ZoneVector<v8::internal::compiler::PushParameter>*, v8::internal::compiler::CallDescriptor const*, v8::internal::compiler::Node*)",93957342101472,93957342101803],["v8::internal::compiler::(anonymous namespace)::VisitWord32EqualImpl(v8::internal::compiler::InstructionSelector*, v8::internal::compiler::Node*, v8::internal::compiler::FlagsContinuation*)",93957342103440,93957342104217],["v8::internal::compiler::(anonymous namespace)::VisitCompareZero(v8::internal::compiler::InstructionSelector*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, unsigned int, v8::internal::compiler::FlagsContinuation*)",93957342105568,93957342106532],["fremovexattr",139871564290784,139871564290817],["lremovexattr",139871564291072,139871564291105],["setxattr",139871564291216,139871564291252],["__libc_ifunc_impl_list",139871564291376,139871564299102],["void std::__1::vector<v8::debug::TypeProfile::Entry, std::__1::allocator<v8::debug::TypeProfile::Entry> >::__push_back_slow_path<v8::debug::TypeProfile::Entry>(v8::debug::TypeProfile::Entry&&)",93957336274816,93957336275230],["v8::internal::DebugPropertyIterator::is_own()",93957336278080,93957336278089],["v8::internal::DebugScopeIterator::Advance()",93957336278592,93957336278658],["v8::internal::DebugScopeIterator::GetObject()",93957336278880,93957336278899],["v8::internal::DebugScopeIterator::HasLocationInfo()",93957336278960,93957336278974],["v8::internal::DebugScopeIterator::GetEndLocation()",93957336279024,93957336279059],["v8::internal::DebugScopeIterator::~DebugScopeIterator()",93957336279088,93957336279112],["v8::internal::ScopeIterator::ScopeIterator(v8::internal::Isolate*, v8::internal::FrameInspector*, v8::internal::ScopeIterator::ReparseStrategy)",93957336279168,93957336279340],["v8::base::LazyInstanceImpl<v8::internal::Intl::AvailableLocales<v8::internal::(anonymous namespace)::CheckCalendar>, v8::base::StaticallyAllocatedInstanceTrait<v8::internal::Intl::AvailableLocales<v8::internal::(anonymous namespace)::CheckCalendar> >, v8::base::DefaultConstructTrait<v8::internal::Intl::AvailableLocales<v8::internal::(anonymous namespace)::CheckCalendar> >, v8::base::ThreadSafeInitOnceTrait, v8::base::LeakyInstanceTrait<v8::internal::Intl::AvailableLocales<v8::internal::(anonymous namespace)::CheckCalendar> > >::InitInstance(void*)",93957338579232,93957338580562],["bool std::__1::operator==<char, std::__1::char_traits<char>, std::__1::allocator<char> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const*)",93957338590272,93957338590350],["v8::internal::(anonymous namespace)::CollatorAvailableLocales::~CollatorAvailableLocales()",93957338596656,93957338596702],["v8::internal::JSDateTimeFormat::UnwrapDateTimeFormat(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>)",93957338610656,93957338611051],["v8::internal::(anonymous namespace)::ToHourCycle(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)",93957338612016,93957338612319],["v8::Maybe<v8::internal::JSDateTimeFormat::New(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, char const*)::FormatMatcherOption> v8::internal::Intl::GetStringOption<v8::internal::JSDateTimeFormat::New(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, char const*)::FormatMatcherOption>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, char const*, char const*, std::__1::vector<char const*, std::__1::allocator<char const*> > const&, std::__1::vector<v8::internal::JSDateTimeFormat::New(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, char const*)::FormatMatcherOption, std::__1::allocator<v8::internal::JSDateTimeFormat::New(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, char const*)::FormatMatcherOption> > const&, v8::internal::JSDateTimeFormat::New(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, char const*)::FormatMatcherOption)",93957338616592,93957338617007],["v8::internal::(anonymous namespace)::DateTimeStylePattern(v8::internal::JSDateTimeFormat::DateTimeStyle, v8::internal::JSDateTimeFormat::DateTimeStyle, icu_68::Locale&, v8::internal::JSDateTimeFormat::HourCycle, icu_68::DateTimePatternGenerator*)",93957338617792,93957338620086],["v8::internal::JSFunction::set_code(v8::internal::Code, v8::ReleaseStoreTag, v8::internal::WriteBarrierMode)",93957338621760,93957338621884],["v8::internal::JSDateTimeFormat::FormatRangeToParts(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSDateTimeFormat>, double, double)",93957338624320,93957338626628],["v8::internal::(anonymous namespace)::PatternItems::~PatternItems()",93957338638656,93957338638761],["v8::internal::(anonymous namespace)::PatternItem::~PatternItem()",93957338638880,93957338639017],["std::__1::vector<v8::internal::(anonymous namespace)::PatternItem, std::__1::allocator<v8::internal::(anonymous namespace)::PatternItem> >::push_back(v8::internal::(anonymous namespace)::PatternItem&&)",93957338639104,93957338639497],["v8::internal::(anonymous namespace)::PatternItem::~PatternItem()",93957338639584,93957338639718],["void std::__1::allocator_traits<std::__1::allocator<v8::internal::(anonymous namespace)::PatternItem> >::construct<v8::internal::(anonymous namespace)::PatternItem, v8::internal::(anonymous namespace)::PatternItem, void>(std::__1::allocator<v8::internal::(anonymous namespace)::PatternItem>&, v8::internal::(anonymous namespace)::PatternItem*, v8::internal::(anonymous namespace)::PatternItem&&)",93957338640048,93957338640248],["v8::internal::(anonymous namespace)::GetGMTTzID(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)",93957338640736,93957338641409],["v8::base::LazyInstanceImpl<v8::internal::(anonymous namespace)::SpecialTimeZoneMap, v8::base::StaticallyAllocatedInstanceTrait<v8::internal::(anonymous namespace)::SpecialTimeZoneMap>, v8::base::DefaultConstructTrait<v8::internal::(anonymous namespace)::SpecialTimeZoneMap>, v8::base::ThreadSafeInitOnceTrait, v8::base::LeakyInstanceTrait<v8::internal::(anonymous namespace)::SpecialTimeZoneMap> >::InitInstance(void*)",93957338642032,93957338642298],["v8::internal::compiler::InstructionSelector::VisitFloat32RoundTiesEven(v8::internal::compiler::Node*)",93957342095136,93957342095289],["v8::internal::compiler::InstructionSelector::VisitFloat32Add(v8::internal::compiler::Node*)",93957342097872,93957342097892],["v8::internal::compiler::(anonymous namespace)::VisitFloatUnop(v8::internal::compiler::InstructionSelector*, v8::internal::compiler::Node*, v8::internal::compiler::Node*, v8::internal::compiler::ArchOpcode, v8::internal::compiler::ArchOpcode)",93957342098832,93957342099081],["v8::internal::compiler::InstructionSelector::VisitFloat64Add(v8::internal::compiler::Node*)",93957342099376,93957342099396],["v8::internal::compiler::InstructionSelector::VisitFloat64Div(v8::internal::compiler::Node*)",93957342099472,93957342099492],["v8::internal::compiler::InstructionSelector::VisitFloat64Max(v8::internal::compiler::Node*)",93957342099776,93957342099791],["v8::internal::compiler::InstructionSelector::VisitFloat64Abs(v8::internal::compiler::Node*)",93957342099808,93957342099859],["v8::internal::compiler::InstructionSelector::VisitFloat64Neg(v8::internal::compiler::Node*)",93957342099936,93957342099987],["dirname",139871564290224,139871564290415],["getxattr",139871564290880,139871564290916],["llistxattr",139871564291024,139871564291057],["lsetxattr",139871564291120,139871564291156],["v8::internal::DebugPropertyIterator::Advance()",93957336268528,93957336268847],["v8::internal::compiler::AbortReasonOf(v8::internal::compiler::Operator const*)",93957336276608,93957336276617],["v8::internal::DebugPropertyIterator::attributes()",93957336277648,93957336277833],["v8::debug::ScopeIterator::CreateForFunction(v8::Isolate*, v8::Local<v8::Function>)",93957336278288,93957336278411],["v8::internal::DebugScopeIterator::Done()",93957336278576,93957336278590],["v8::internal::DebugScopeIterator::DebugScopeIterator(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSFunction>)",93957336278672,93957336278761],["v8::internal::DebugScopeIterator::GetType()",93957336278864,93957336278878],["v8::internal::DebugScopeIterator::GetScriptId()",93957336278912,93957336278930],["std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::pair<char const*&, char const*&, false>(char const*&, char const*&)",93957338573568,93957338573845],["v8::internal::JSArrayBuffer::YoungMarkExtensionPromoted()",93957338581920,93957338581968],["v8::internal::JSV8BreakIterator::First(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSV8BreakIterator>)",93957338587376,93957338587556],["v8::internal::(anonymous namespace)::SetCaseFirstOption(icu_68::Collator*, v8::internal::(anonymous namespace)::CaseFirst)",93957338595168,93957338595220],["v8::base::LazyInstanceImpl<v8::internal::(anonymous namespace)::CollatorAvailableLocales, v8::base::StaticallyAllocatedInstanceTrait<v8::internal::(anonymous namespace)::CollatorAvailableLocales>, v8::base::DefaultConstructTrait<v8::internal::(anonymous namespace)::CollatorAvailableLocales>, v8::base::ThreadSafeInitOnceTrait, v8::base::LeakyInstanceTrait<v8::internal::(anonymous namespace)::CollatorAvailableLocales> >::InitInstance(void*)",93957338596032,93957338596620],["v8::internal::(anonymous namespace)::GetPatternItems()",93957338600336,93957338600472],["v8::internal::JSDateTimeFormat::New(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, char const*)",93957338603616,93957338610543],["v8::internal::JSDateTimeFormat::GetAvailableLocales()",93957338611184,93957338611194],["v8::internal::(anonymous namespace)::DateTimePatternGeneratorCache::CreateGenerator(icu_68::Locale const&)",93957338611424,93957338612011],["v8::internal::(anonymous namespace)::CreateTimeZone(char const*)",93957338612320,93957338615220],["v8::internal::(anonymous namespace)::GetPatternData(v8::internal::JSDateTimeFormat::HourCycle)",93957338615968,93957338616591],["v8::Maybe<v8::internal::JSSegmenter::Granularity> v8::internal::Intl::GetStringOption<v8::internal::JSSegmenter::Granularity>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, char const*, char const*, std::__1::vector<char const*, std::__1::allocator<char const*> > const&, std::__1::vector<v8::internal::JSSegmenter::Granularity, std::__1::allocator<v8::internal::JSSegmenter::Granularity> > const&, v8::internal::JSSegmenter::Granularity)",93957338617008,93957338617434],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::find(char const*, unsigned long) const",93957338617568,93957338617787],["v8::internal::(anonymous namespace)::CreateICUDateFormatFromCache(icu_68::Locale const&, icu_68::UnicodeString const&, icu_68::DateTimePatternGenerator*, v8::internal::JSDateTimeFormat::HourCycle)",93957338620096,93957338621395],["v8::internal::JSNumberFormat::set_icu_number_formatter(v8::internal::Managed<icu_68::number::LocalizedNumberFormatter>, v8::internal::WriteBarrierMode)",93957338621632,93957338621756],["v8::internal::JSDateTimeFormat::FormatToParts(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSDateTimeFormat>, double, bool)",93957338621888,93957338623433],["v8::internal::compiler::InstructionSelector::VisitSignExtendWord16ToInt64(v8::internal::compiler::Node*)",93957342093856,93957342094009],["v8::internal::compiler::InstructionSelector::VisitF32x4Trunc(v8::internal::compiler::Node*)",93957342095776,93957342095929],["v8::internal::compiler::InstructionSelector::VisitTruncateFloat64ToWord32(v8::internal::compiler::Node*)",93957342096736,93957342096889],["v8::internal::compiler::InstructionSelector::VisitFloat32Sub(v8::internal::compiler::Node*)",93957342098672,93957342098692],["v8::internal::compiler::InstructionSelector::VisitFloat32Abs(v8::internal::compiler::Node*)",93957342098768,93957342098819],["v8::internal::compiler::InstructionSelector::VisitFloat32Max(v8::internal::compiler::Node*)",93957342099088,93957342099103],["v8::internal::compiler::InstructionSelector::VisitFloat32Min(v8::internal::compiler::Node*)",93957342099360,93957342099375],["v8::internal::compiler::InstructionSelector::VisitFloat64Sub(v8::internal::compiler::Node*)",93957342099408,93957342099428],["get_nprocs",139871564288880,139871564289675],["fgetxattr",139871564290688,139871564290724],["fsetxattr",139871564290832,139871564290868],["listxattr",139871564290928,139871564290961],["v8::debug::TypeProfile::Collect(v8::Isolate*)",93957336266176,93957336266243],["bool std::__1::__insertion_sort_incomplete<bool (*&)(v8::internal::BreakLocation const&, v8::internal::BreakLocation const&), v8::internal::BreakLocation*>(v8::internal::BreakLocation*, v8::internal::BreakLocation*, bool (*&)(v8::internal::BreakLocation const&, v8::internal::BreakLocation const&))",93957336272640,93957336274023],["v8::internal::DebugPropertyIterator::Create(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>)",93957336275440,93957336275991],["v8::internal::DebugPropertyIterator::CalculateNativeAccessorFlags()",93957336276672,93957336277409],["v8::internal::DebugPropertyIterator::name() const",93957336277520,93957336277648],["v8::internal::DebugPropertyIterator::descriptor()",93957336277840,93957336278080],["v8::internal::DebugPropertyIterator::is_array_index()",93957336278096,93957336278288],["v8::debug::ScopeIterator::CreateForGeneratorObject(v8::Isolate*, v8::Local<v8::Object>)",93957336278416,93957336278473],["v8::internal::Intl::GetAvailableLocales()",93957338569792,93957338569935],["std::__1::__tree_node_base<void*>*& std::__1::__tree<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::__find_equal<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::__tree_const_iterator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__tree_node<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, void*>*, long>, std::__1::__tree_end_node<std::__1::__tree_node_base<void*>*>*&, std::__1::__tree_node_base<void*>*&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)",93957338576656,93957338577429],["v8::internal::JSArrayBuffer::Detach(bool)",93957338581392,93957338581673],["v8::internal::JSTypedArray::type()",93957338583424,93957338583490],["v8::internal::JSV8BreakIterator::AdoptText(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSV8BreakIterator>, v8::internal::Handle<v8::internal::String>)",93957338587008,93957338587184],["v8::internal::JSV8BreakIterator::BreakType(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSV8BreakIterator>)",93957338587760,93957338587916],["std::__1::vector<char const*, std::__1::allocator<char const*> >::vector(std::initializer_list<char const*>)",93957338594896,93957338595010],["v8::Maybe<v8::internal::(anonymous namespace)::Sensitivity> v8::internal::Intl::GetStringOption<v8::internal::(anonymous namespace)::Sensitivity>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, char const*, char const*, std::__1::vector<char const*, std::__1::allocator<char const*> > const&, std::__1::vector<v8::internal::(anonymous namespace)::Sensitivity, std::__1::allocator<v8::internal::(anonymous namespace)::Sensitivity> > const&, v8::internal::(anonymous namespace)::Sensitivity)",93957338595344,93957338595788],["v8::internal::Intl::ResolvedLocale::~ResolvedLocale()",93957338595968,93957338596032],["v8::internal::(anonymous namespace)::CollatorAvailableLocales::~CollatorAvailableLocales()",93957338596624,93957338596652],["v8::internal::JSDateTimeFormat::ResolvedOptions(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSDateTimeFormat>)",93957338596704,93957338600329],["v8::internal::JSDateTimeFormat::DateTimeFormat(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSDateTimeFormat>, v8::internal::Handle<v8::internal::Object>)",93957338600480,93957338600818],["v8::internal::JSDateTimeFormat::ToDateTimeOptions(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::JSDateTimeFormat::RequiredOption, v8::internal::JSDateTimeFormat::DefaultsOption)",93957338601584,93957338603611],["std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::~vector()",93957338610544,93957338610654],["std::__1::vector<char const*, std::__1::allocator<char const*> >::vector(std::__1::vector<char const*, std::__1::allocator<char const*> > const&)",93957338611056,93957338611183],["bool std::__1::operator!=<char, std::__1::char_traits<char>, std::__1::allocator<char> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const*)",93957338611200,93957338611275],["v8::internal::compiler::InstructionSelector::VisitBitcastFloat64ToInt64(v8::internal::compiler::Node*)",93957342092576,93957342092729],["v8::internal::compiler::InstructionSelector::VisitFloat32RoundUp(v8::internal::compiler::Node*)",93957342094496,93957342094649],["v8::internal::compiler::InstructionSelector::VisitF32x4Ceil(v8::internal::compiler::Node*)",93957342095456,93957342095609],["v8::internal::compiler::InstructionSelector::VisitF64x2Ceil(v8::internal::compiler::Node*)",93957342096096,93957342096249],["v8::internal::compiler::InstructionSelector::VisitF64x2NearestInt(v8::internal::compiler::Node*)",93957342096576,93957342096729],["v8::internal::compiler::InstructionSelector::VisitTruncateInt64ToInt32(v8::internal::compiler::Node*)",93957342096896,93957342097869],["v8::internal::compiler::(anonymous namespace)::VisitFloatBinop(v8::internal::compiler::InstructionSelector*, v8::internal::compiler::Node*, unsigned int, unsigned int)",93957342097904,93957342098669],["v8::internal::compiler::InstructionSelector::VisitFloat32Mul(v8::internal::compiler::Node*)",93957342098704,93957342098724],["errx",139871564286944,139871564287092],["get_phys_pages",139871564289936,139871564290078],["getloadavg",139871564290416,139871564290650],["flistxattr",139871564290736,139871564290769],["v8::debug::Coverage::ScriptData::GetFunctionData(unsigned long) const",93957336265136,93957336265231],["v8::debug::WeakMap::New(v8::Isolate*)",93957336267728,93957336267920],["unsigned int std::__1::__sort4<bool (*&)(v8::internal::BreakLocation const&, v8::internal::BreakLocation const&), v8::internal::BreakLocation*>(v8::internal::BreakLocation*, v8::internal::BreakLocation*, v8::internal::BreakLocation*, v8::internal::BreakLocation*, bool (*&)(v8::internal::BreakLocation const&, v8::internal::BreakLocation const&))",93957336271424,93957336272070],["v8::DefaultPersistentValueVectorTraits::Append(std::__1::vector<unsigned long, std::__1::allocator<unsigned long> >*, unsigned long)",93957336274336,93957336274608],["std::__1::__shared_ptr_pointer<v8::internal::TypeProfile*, std::__1::default_delete<v8::internal::TypeProfile>, std::__1::allocator<v8::internal::TypeProfile> >::__on_zero_shared()",93957336275232,93957336275434],["v8::internal::DebugPropertyIterator::AdvanceInternal()",93957336276000,93957336276597],["v8::internal::DebugPropertyIterator::is_native_accessor()",93957336276624,93957336276667],["v8::internal::DebugPropertyIterator::has_native_getter()",93957336277424,93957336277465],["v8::internal::Intl::IsWellFormedCalendar(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)",93957338560128,93957338560138],["v8::internal::(anonymous namespace)::BuildLocaleMatcher(v8::internal::Isolate*, std::__1::set<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, UErrorCode*)",93957338571312,93957338571801],["v8::Maybe<std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > >::Maybe(std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&)",93957338575104,93957338575337],["icu_68::DateTimeRule::~DateTimeRule()",93957338577824,93957338577852],["v8::internal::JSArrayBuffer::Attach(std::__1::shared_ptr<v8::internal::BackingStore>)",93957338580992,93957338581201],["v8::internal::JSArrayBuffer::MarkExtension()",93957338581824,93957338581871],["v8::internal::JSTypedArray::DefineOwnProperty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSTypedArray>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyDescriptor*, v8::Maybe<v8::internal::ShouldThrow>)",93957338582480,93957338583352],["v8::internal::JSV8BreakIterator::New(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, char const*)",93957338583584,93957338586206],["v8::internal::JSV8BreakIterator::ResolvedOptions(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSV8BreakIterator>)",93957338586448,93957338586995],["v8::internal::JSV8BreakIterator::Current(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSV8BreakIterator>)",93957338587184,93957338587364],["v8::internal::JSV8BreakIterator::Next(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSV8BreakIterator>)",93957338587568,93957338587748],["v8::internal::JSCollator::ResolvedOptions(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSCollator>)",93957338587920,93957338590265],["v8::internal::JSCollator::New(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, char const*)",93957338590352,93957338594886],["v8::internal::JSCollator::GetAvailableLocales()",93957338595024,93957338595167],["v8::internal::(anonymous namespace)::ToCaseFirst(char const*)",93957338595232,93957338595332],["v8::internal::Factory::NewFastOrSlowJSObjectFromMap(v8::internal::Handle<v8::internal::Map>, int, v8::internal::AllocationType, v8::internal::Handle<v8::internal::AllocationSite>)",93957338595792,93957338595830],["v8::internal::compiler::InstructionSelector::VisitRoundInt64ToFloat64(v8::internal::compiler::Node*)",93957342091296,93957342091449],["v8::internal::compiler::InstructionSelector::VisitFloat64ExtractHighWord32(v8::internal::compiler::Node*)",93957342093216,93957342093369],["v8::internal::compiler::InstructionSelector::VisitFloat32RoundDown(v8::internal::compiler::Node*)",93957342094176,93957342094329],["v8::internal::compiler::InstructionSelector::VisitFloat32RoundTruncate(v8::internal::compiler::Node*)",93957342094816,93957342094969],["v8::internal::compiler::InstructionSelector::VisitFloat64RoundTiesEven(v8::internal::compiler::Node*)",93957342095296,93957342095449],["v8::internal::compiler::InstructionSelector::VisitF32x4Floor(v8::internal::compiler::Node*)",93957342095616,93957342095769],["v8::internal::compiler::InstructionSelector::VisitF32x4NearestInt(v8::internal::compiler::Node*)",93957342095936,93957342096089],["v8::internal::compiler::InstructionSelector::VisitF64x2Floor(v8::internal::compiler::Node*)",93957342096256,93957342096409],["warnx",139871564286528,139871564286712],["error_at_line",139871564288224,139871564288396],["get_nprocs_conf",139871564289680,139871564289924],["get_avphys_pages",139871564290080,139871564290222],["v8::debug::Coverage::FunctionData::EndOffset() const",93957336264864,93957336264876],["v8::debug::Coverage::CollectBestEffort(v8::Isolate*)",93957336265424,93957336265491],["v8::debug::WeakMap::Get(v8::Local<v8::Context>, v8::Local<v8::Value>)",93957336266272,93957336266986],["v8::debug::GetMessageFromPromise(v8::Local<v8::Promise>)",93957336267968,93957336268242],["void std::__1::__sort<bool (*&)(v8::internal::BreakLocation const&, v8::internal::BreakLocation const&), v8::internal::BreakLocation*>(v8::internal::BreakLocation*, v8::internal::BreakLocation*, bool (*&)(v8::internal::BreakLocation const&, v8::internal::BreakLocation const&))",93957336268848,93957336271414],["void std::__1::__insertion_sort_3<bool (*&)(v8::internal::BreakLocation const&, v8::internal::BreakLocation const&), v8::internal::BreakLocation*>(v8::internal::BreakLocation*, v8::internal::BreakLocation*, bool (*&)(v8::internal::BreakLocation const&, v8::internal::BreakLocation const&))",93957336272080,93957336272628],["void std::__1::vector<v8::debug::BreakLocation, std::__1::allocator<v8::debug::BreakLocation> >::__emplace_back_slow_path<int, int, v8::debug::BreakLocationType>(int&&, int&&, v8::debug::BreakLocationType&&)",93957336274032,93957336274333],["std::__1::__shared_ptr_pointer<v8::internal::Coverage*, std::__1::default_delete<v8::internal::Coverage>, std::__1::allocator<v8::internal::Coverage> >::__on_zero_shared()",93957336274608,93957336274810],["v8::internal::Intl::GetBoolOption(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, char const*, char const*, bool*)",93957338543600,93957338543759],["v8::internal::ICUTimezoneCache::LocalTimezone(double)",93957338567920,93957338568219],["v8::internal::Intl::GetOptionsObject(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, char const*)",93957338570752,93957338570867],["v8::internal::(anonymous namespace)::Iterator::~Iterator()",93957338573248,93957338573290],["std::__1::__tree_node_base<void*>*& std::__1::__tree<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::__find_equal<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::__tree_end_node<std::__1::__tree_node_base<void*>*>*&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)",93957338574320,93957338574623],["_ZNSt3__16vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEE6assignIPS6_EENS_9enable_ifIXaasr27__is_cpp17_forward_iteratorIT_EE5valuesr16is_constructibleIS6_NS_15iterator_traitsISC_E9referenceEEE5valueEvE4typeESC_SC_",93957338575744,93957338576460],["std::__1::pair<std::__1::__tree_iterator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const>, std::__1::__tree_node<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const>, void*>*, long>, bool> std::__1::__tree<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const>, std::__1::__map_value_compare<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const>, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const>, true>, std::__1::allocator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const> > >::__emplace_hint_unique_key_args<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const> const&>(std::__1::__tree_const_iterator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const>, std::__1::__tree_node<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const>, void*>*, long>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const> const&)",93957338577536,93957338577786],["v8::base::LazyInstanceImpl<v8::internal::Intl::AvailableLocales<v8::internal::Intl::SkipResourceCheck>, v8::base::StaticallyAllocatedInstanceTrait<v8::internal::Intl::AvailableLocales<v8::internal::Intl::SkipResourceCheck> >, v8::base::DefaultConstructTrait<v8::internal::Intl::AvailableLocales<v8::internal::Intl::SkipResourceCheck> >, v8::base::ThreadSafeInitOnceTrait, v8::base::LeakyInstanceTrait<v8::internal::Intl::AvailableLocales<v8::internal::Intl::SkipResourceCheck> > >::InitInstance(void*)",93957338577888,93957338577898],["v8::internal::JSArrayBuffer::Setup(v8::internal::SharedFlag, std::__1::shared_ptr<v8::internal::BackingStore>)",93957338580576,93957338580982],["v8::internal::JSArrayBuffer::EnsureExtension()",93957338581216,93957338581382],["v8::internal::JSArrayBuffer::GetBackingStore()",93957338581680,93957338581813],["v8::internal::JSArrayBuffer::YoungMarkExtension()",93957338581872,93957338581920],["v8::internal::JSTypedArray::GetBuffer()",93957338581968,93957338582472],["v8::internal::PropertyDescriptor::ToAttributes()",93957338583360,93957338583414],["v8::internal::JSTypedArray::element_size()",93957338583504,93957338583571],["v8::internal::JSSegmenter::GetAvailableLocales()",93957338586208,93957338586218],["v8::internal::compiler::InstructionSelector::VisitChangeFloat64ToUint32(v8::internal::compiler::Node*)",93957342090016,93957342090169],["v8::internal::compiler::InstructionSelector::VisitRoundUint64ToFloat32(v8::internal::compiler::Node*)",93957342091936,93957342092089],["v8::internal::compiler::InstructionSelector::VisitBitcastInt64ToFloat64(v8::internal::compiler::Node*)",93957342092896,93957342093049],["v8::internal::compiler::InstructionSelector::VisitSignExtendWord16ToInt32(v8::internal::compiler::Node*)",93957342093536,93957342093689],["v8::internal::compiler::InstructionSelector::VisitSignExtendWord32ToInt64(v8::internal::compiler::Node*)",93957342094016,93957342094169],["v8::internal::compiler::InstructionSelector::VisitFloat64RoundDown(v8::internal::compiler::Node*)",93957342094336,93957342094489],["v8::internal::compiler::InstructionSelector::VisitFloat64RoundUp(v8::internal::compiler::Node*)",93957342094656,93957342094809],["v8::internal::compiler::InstructionSelector::VisitFloat64RoundTruncate(v8::internal::compiler::Node*)",93957342094976,93957342095129],["lfind",139871564285920,139871564286029],["verrx",139871564286752,139871564286775],["error",139871564287616,139871564287791],["ustat",139871564288400,139871564288476],["v8::debug::SetReturnValue(v8::Isolate*, v8::Local<v8::Value>)",93957336264288,93957336264308],["v8::debug::Coverage::FunctionData::HasBlockCoverage() const",93957336264960,93957336264972],["v8::debug::TypeProfile::GetScriptData(unsigned long) const",93957336265264,93957336265336],["v8::debug::TypeProfile::Entry::Types() const",93957336265520,93957336265939],["v8::debug::TypeProfile::SelectMode(v8::Isolate*, v8::debug::TypeProfileMode)",93957336266256,93957336266266],["v8::debug::WeakMap::Set(v8::Local<v8::Context>, v8::Local<v8::Value>, v8::Local<v8::Value>)",93957336266992,93957336267726],["v8::debug::AccessorPair::IsAccessorPair(v8::Local<v8::Value>)",93957336267920,93957336267965],["v8::debug::PropertyIterator::Create(v8::Local<v8::Context>, v8::Local<v8::Object>)",93957336268256,93957336268516],["v8::internal::(anonymous namespace)::GetUCharBufferFromFlat(v8::internal::String::FlatContent const&, std::__1::unique_ptr<unsigned short [], std::__1::default_delete<unsigned short []> >*, int)",93957338535888,93957338536060],["v8::internal::Intl::NumberToLocaleString(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, char const*)",93957338553376,93957338553909],["v8::internal::Intl::ResolveLocale(v8::internal::Isolate*, std::__1::set<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, v8::internal::Intl::MatcherOption, std::__1::set<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&)",93957338560864,93957338566416],["v8::internal::Intl::CreateTimeZoneCache()",93957338568656,93957338568723],["v8::internal::Intl::NumberFieldToType(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, int)",93957338570080,93957338570517],["v8::internal::ICUTimezoneCache::~ICUTimezoneCache()",93957338570960,93957338571123],["v8::internal::(anonymous namespace)::BestAvailableLocale(std::__1::set<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)",93957338572672,93957338572965],["v8::internal::(anonymous namespace)::Iterator::hasNext() const",93957338573360,93957338573377],["std::__1::pair<std::__1::__tree_iterator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::__tree_node<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, void*>*, long>, bool> std::__1::__tree<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::__map_value_compare<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::allocator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > >::__emplace_unique_key_args<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >&&)",93957338573856,93957338574318],["std::__1::pair<std::__1::__tree_iterator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__tree_node<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, void*>*, long>, bool> std::__1::__tree<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::__emplace_unique_key_args<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)",93957338574624,93957338575099],["void std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::__push_back_slow_path<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&)",93957338575344,93957338575731],["std::__1::pair<std::__1::__tree_iterator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__tree_node<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, void*>*, long>, bool> std::__1::__tree<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::__emplace_hint_unique_key_args<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&>(std::__1::__tree_const_iterator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__tree_node<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, void*>*, long>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)",93957338576464,93957338576648],["std::__1::__tree<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const>, std::__1::__map_value_compare<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const>, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const>, true>, std::__1::allocator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const> > >::destroy(std::__1::__tree_node<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const>, void*>*)",93957338577440,93957338577529],["std::__1::__shared_ptr_pointer<v8::internal::DisplayNamesInternal*, std::__1::shared_ptr<v8::internal::DisplayNamesInternal>::__shared_ptr_default_delete<v8::internal::DisplayNamesInternal, v8::internal::DisplayNamesInternal>, std::__1::allocator<v8::internal::DisplayNamesInternal> >::__on_zero_shared()",93957338577792,93957338577814],["icu_68::StringByteSink<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::Append(char const*, int)",93957338577856,93957338577873],["v8::internal::Intl::AvailableLocales<v8::internal::Intl::SkipResourceCheck>::AvailableLocales()",93957338577904,93957338579218],["v8::internal::compiler::InstructionSelector::VisitWord64Ctz(v8::internal::compiler::Node*)",93957342088736,93957342088889],["v8::internal::compiler::InstructionSelector::VisitChangeFloat32ToFloat64(v8::internal::compiler::Node*)",93957342090656,93957342090809],["v8::internal::compiler::InstructionSelector::VisitRoundInt32ToFloat32(v8::internal::compiler::Node*)",93957342091616,93957342091769],["v8::internal::compiler::InstructionSelector::VisitRoundUint32ToFloat32(v8::internal::compiler::Node*)",93957342092256,93957342092409],["v8::internal::compiler::InstructionSelector::VisitBitcastInt32ToFloat32(v8::internal::compiler::Node*)",93957342092736,93957342092889],["v8::internal::compiler::InstructionSelector::VisitFloat64ExtractLowWord32(v8::internal::compiler::Node*)",93957342093056,93957342093209],["v8::internal::compiler::InstructionSelector::VisitSignExtendWord8ToInt32(v8::internal::compiler::Node*)",93957342093376,93957342093529],["v8::internal::compiler::InstructionSelector::VisitSignExtendWord8ToInt64(v8::internal::compiler::Node*)",93957342093696,93957342093849],["__twalk",139871564285680,139871564285703],["vwarnx",139871564286320,139871564286327],["verr",139871564286720,139871564286743],["err",139871564286784,139871564286932],["v8::debug::GetDetailedStackTrace(v8::Isolate*, v8::Local<v8::Object>)",93957336262192,93957336262240],["v8::debug::SetFunctionBreakpoint(v8::Local<v8::Function>, v8::Local<v8::String>, int*)",93957336264560,93957336264752],["v8::debug::Coverage::FunctionData::Name() const",93957336264896,93957336264909],["v8::debug::TypeProfile::ScriptData::GetScript() const",93957336265072,93957336265084],["v8::debug::TypeProfile::ScriptCount() const",93957336265232,93957336265252],["v8::debug::Coverage::CollectPrecise(v8::Isolate*)",93957336265344,93957336265411],["v8::debug::Coverage::SelectMode(v8::Isolate*, v8::debug::CoverageMode)",93957336265504,93957336265514],["v8::debug::TypeProfile::ScriptData::Entries() const",93957336265952,93957336266173],["v8::internal::FeedbackNexus::Collect(v8::internal::Handle<v8::internal::String>, int)",93957338531504,93957338532426],["v8::internal::Intl::ToString(v8::internal::Isolate*, icu_68::UnicodeString const&, int, int)",93957338539792,93957338539945],["v8::internal::(anonymous namespace)::DefaultLocale(v8::internal::Isolate*)",93957338550720,93957338551686],["v8::internal::Intl::GetCanonicalLocales(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)",93957338556320,93957338556757],["v8::internal::Intl::IsValidCalendar(icu_68::Locale const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)",93957338560160,93957338560497],["v8::internal::Intl::Normalize(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object>)",93957338566720,93957338567850],["v8::internal::ICUTimezoneCache::LocalTimeOffset(double, bool)",93957338568336,93957338568511],["v8::Maybe<v8::internal::Intl::MatcherOption> v8::internal::Intl::GetStringOption<v8::internal::Intl::MatcherOption>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, char const*, char const*, std::__1::vector<char const*, std::__1::allocator<char const*> > const&, std::__1::vector<v8::internal::Intl::MatcherOption, std::__1::allocator<v8::internal::Intl::MatcherOption> > const&, v8::internal::Intl::MatcherOption)",93957338568928,93957338569346],["v8::internal::Intl::GetAvailableLocalesForDateFormat()",93957338569936,93957338570079],["v8::internal::Intl::FormattedToString(v8::internal::Isolate*, icu_68::FormattedValue const&)",93957338570528,93957338570738],["v8::internal::Intl::CoerceOptionsToObject(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, char const*)",93957338570880,93957338570947],["v8::internal::ICUTimezoneCache::~ICUTimezoneCache()",93957338571136,93957338571302],["v8::internal::(anonymous namespace)::ParseBCP47Locale(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)",93957338571808,93957338572670],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > std::__1::operator+<char, std::__1::char_traits<char>, std::__1::allocator<char> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)",93957338572976,93957338573234],["v8::internal::(anonymous namespace)::Iterator::~Iterator()",93957338573296,93957338573346],["v8::internal::(anonymous namespace)::Iterator::next()",93957338573392,93957338573559],["v8::internal::compiler::InstructionSelector::VisitTryTruncateFloat32ToUint64(v8::internal::compiler::Node*)",93957342086768,93957342087039],["v8::internal::compiler::InstructionSelector::VisitFloat64Sqrt(v8::internal::compiler::Node*)",93957342089376,93957342089529],["v8::internal::compiler::InstructionSelector::VisitChangeFloat64ToUint64(v8::internal::compiler::Node*)",93957342090336,93957342090489],["v8::internal::compiler::InstructionSelector::VisitTruncateFloat32ToUint32(v8::internal::compiler::Node*)",93957342090976,93957342091129],["v8::internal::compiler::InstructionSelector::VisitChangeUint32ToFloat64(v8::internal::compiler::Node*)",93957342091456,93957342091609],["v8::internal::compiler::InstructionSelector::VisitRoundInt64ToFloat32(v8::internal::compiler::Node*)",93957342091776,93957342091929],["v8::internal::compiler::InstructionSelector::VisitRoundUint64ToFloat64(v8::internal::compiler::Node*)",93957342092096,93957342092249],["v8::internal::compiler::InstructionSelector::VisitBitcastFloat32ToInt32(v8::internal::compiler::Node*)",93957342092416,93957342092569],["hsearch_r",139871564282448,139871564282986],["tdestroy",139871564285744,139871564285761],["vwarn",139871564286304,139871564286311],["warn",139871564286336,139871564286520],["v8::debug::SetAsyncEventDelegate(v8::Isolate*, v8::debug::AsyncEventDelegate*)",93957336260864,93957336260881],["v8::debug::GeneratorObject::Cast(v8::Local<v8::Value>)",93957336262848,93957336262897],["v8::debug::EnumerateRuntimeCallCounters(v8::Isolate*, std::__1::function<void (char const*, long, v8::base::TimeDelta)>)",93957336264352,93957336264491],["v8::debug::DisableBreakScope::~DisableBreakScope()",93957336264800,93957336264839],["v8::debug::Coverage::FunctionData::Count() const",93957336264880,93957336264892],["v8::debug::Coverage::FunctionData::BlockCount() const",93957336264912,93957336264947],["v8::debug::Coverage::FunctionData::GetBlockData(unsigned long) const",93957336264976,93957336265072],["v8::debug::Coverage::ScriptData::FunctionCount() const",93957336265088,93957336265123],["v8::internal::FeedbackNexus::ConfigureCloneObject(v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Map>)",93957338523760,93957338526057],["v8::internal::FieldType::IsClass() const",93957338535232,93957338535281],["v8::internal::Intl::ConvertToUpper(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>)",93957338537760,93957338539292],["v8::internal::(anonymous namespace)::ValidateResource(icu_68::Locale, char const*, char const*)",93957338541648,93957338542592],["v8::internal::(anonymous namespace)::CanonicalizeLanguageTag(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)",93957338546224,93957338549874],["v8::internal::Intl::CompareStrings(v8::internal::Isolate*, icu_68::Collator const&, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String>)",93957338552144,93957338553000],["v8::internal::(anonymous namespace)::DefaultNumberOption(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, int, int, int, v8::internal::Handle<v8::internal::String>)",93957338554208,93957338554476],["v8::internal::Intl::SupportedLocalesOf(v8::internal::Isolate*, char const*, std::__1::set<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957338557040,93957338559537],["v8::internal::Intl::IsWellFormedCurrency(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)",93957338560144,93957338560154],["v8::internal::Intl::IsValidNumberingSystem(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)",93957338560512,93957338560858],["v8::internal::Intl::SetTextToBreakIterator(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, icu_68::BreakIterator*)",93957338566416,93957338566720],["v8::internal::Handle<v8::internal::String> v8::internal::Factory::NewStringFromStaticChars<21ul>(char const (&) [21ul], v8::internal::AllocationType)",93957338567856,93957338567917],["v8::internal::ICUTimezoneCache::DaylightSavingsOffset(double)",93957338568224,93957338568325],["v8::internal::ICUTimezoneCache::Clear(v8::base::TimezoneCache::TimeZoneDetection)",93957338568512,93957338568646],["v8::internal::Intl::GetLocaleMatcher(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, char const*)",93957338568736,93957338568922],["v8::internal::Intl::GetNumberingSystem(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, char const*, std::__1::unique_ptr<char [], std::__1::default_delete<char []> >*)",93957338569360,93957338569782],["v8::internal::compiler::InstructionSelector::VisitInt32Mod(v8::internal::compiler::Node*)",93957342085872,93957342085887],["v8::internal::compiler::InstructionSelector::ZeroExtendsWord32ToWord64NoPhis(v8::internal::compiler::Node*)",93957342088032,93957342088216],["v8::internal::compiler::InstructionSelector::VisitWord64Popcnt(v8::internal::compiler::Node*)",93957342089056,93957342089209],["v8::internal::compiler::InstructionSelector::VisitRoundFloat64ToInt32(v8::internal::compiler::Node*)",93957342089696,93957342089849],["v8::internal::compiler::InstructionSelector::VisitTruncateFloat64ToUint32(v8::internal::compiler::Node*)",93957342090176,93957342090329],["v8::internal::compiler::InstructionSelector::VisitTruncateFloat64ToFloat32(v8::internal::compiler::Node*)",93957342090496,93957342090649],["v8::internal::compiler::InstructionSelector::VisitTruncateFloat32ToInt32(v8::internal::compiler::Node*)",93957342090816,93957342090969],["v8::internal::compiler::InstructionSelector::VisitChangeInt32ToFloat64(v8::internal::compiler::Node*)",93957342091136,93957342091289],["hsearch",139871564282096,139871564282161],["__tfind",139871564284144,139871564284249],["__twalk_r",139871564285712,139871564285733],["lsearch",139871564285776,139871564285918],["v8::debug::WasmScript::CodeOffset() const",93957336259776,93957336259823],["v8::debug::GetBuiltin(v8::Isolate*, v8::debug::Builtin)",93957336261248,93957336262080],["v8::debug::GeneratorObject::SuspendedLocation()",93957336262416,93957336262820],["v8::debug::QueryObjects(v8::Local<v8::Context>, v8::debug::QueryObjectPredicate*, v8::PersistentValueVector<v8::Object, v8::DefaultPersistentValueVectorTraits>*)",93957336263264,93957336263355],["v8::debug::GetNextRandomInt64(v8::Isolate*)",93957336264320,93957336264338],["v8::debug::GetDebuggingId(v8::Local<v8::Function>)",93957336264496,93957336264556],["v8::debug::DisableBreakScope::DisableBreakScope(v8::Isolate*)",93957336264752,93957336264800],["v8::debug::TypeProfile::Entry::SourcePosition() const",93957336264848,93957336264859],["v8::internal::NexusConfig::SetFeedbackPair(v8::internal::FeedbackVector, v8::internal::FeedbackSlot, v8::internal::MaybeObject, v8::internal::WriteBarrierMode, v8::internal::MaybeObject, v8::internal::WriteBarrierMode) const",93957338519776,93957338520252],["v8::internal::FeedbackNexus::ExtractMapsAndFeedback(std::__1::vector<std::__1::pair<v8::internal::Handle<v8::internal::Map>, v8::internal::MaybeObjectHandle>, std::__1::allocator<std::__1::pair<v8::internal::Handle<v8::internal::Map>, v8::internal::MaybeObjectHandle> > >*) const",93957338528416,93957338528897],["v8::internal::FeedbackIterator::FeedbackIterator(v8::internal::FeedbackNexus const*)",93957338534224,93957338534762],["v8::internal::FieldType::PrintTo(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) const",93957338535520,93957338535630],["v8::internal::Intl::ConvertToLower(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>)",93957338536688,93957338537364],["std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_string<decltype(nullptr)>(char const*)",93957338539552,93957338539685],["v8::internal::Intl::AddElement(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSArray>, int, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String>)",93957338540176,93957338540439],["v8::internal::Intl::LegacyUnwrapReceiver(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::JSFunction>, bool)",93957338542800,93957338543101],["v8::internal::Intl::CanonicalizeLocaleList(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, bool)",93957338543760,93957338546215],["v8::internal::Intl::StringLocaleConvertCase(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, bool, v8::internal::Handle<v8::internal::Object>)",93957338549888,93957338550716],["v8::internal::Intl::StringLocaleCompare(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, char const*)",93957338551696,93957338552132],["v8::internal::(anonymous namespace)::ToICUStringPiece(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>)",93957338553008,93957338553364],["v8::internal::Intl::GetNumberOption(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::String>, int, int, int)",93957338553920,93957338554206],["v8::internal::Intl::SetNumberFormatDigitOptions(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, int, int, bool)",93957338554480,93957338556316],["v8::internal::(anonymous namespace)::CreateArrayFromList(v8::internal::Isolate*, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >, v8::internal::PropertyAttributes)",93957338556768,93957338557036],["v8::internal::Intl::IsValidCollation(icu_68::Locale const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)",93957338559552,93957338560121],["v8::internal::compiler::InstructionSelector::VisitInt64Mul(v8::internal::compiler::Node*)",93957342085168,93957342085183],["v8::internal::compiler::InstructionSelector::VisitUint64Mod(v8::internal::compiler::Node*)",93957342086192,93957342086207],["v8::internal::compiler::InstructionSelector::VisitBitcastWord32ToWord64(v8::internal::compiler::Node*)",93957342087312,93957342087322],["v8::internal::compiler::InstructionSelector::VisitWord64Clz(v8::internal::compiler::Node*)",93957342088416,93957342088569],["v8::internal::compiler::InstructionSelector::VisitWord32Ctz(v8::internal::compiler::Node*)",93957342088896,93957342089049],["v8::internal::compiler::InstructionSelector::VisitWord32Popcnt(v8::internal::compiler::Node*)",93957342089216,93957342089369],["v8::internal::compiler::InstructionSelector::VisitFloat32Sqrt(v8::internal::compiler::Node*)",93957342089536,93957342089689],["v8::internal::compiler::InstructionSelector::VisitChangeFloat64ToInt64(v8::internal::compiler::Node*)",93957342089856,93957342090009],["qgcvt",139871564280928,139871564280977],["hcreate_r",139871564282192,139871564282396],["__tsearch",139871564283728,139871564284139],["__tdelete",139871564284256,139871564285677],["v8::debug::RemoveBreakpoint(v8::Isolate*, int)",93957336259040,93957336259150],["v8::debug::CompileInspectorScript(v8::Isolate*, v8::Local<v8::String>)",93957336260320,93957336260763],["v8::debug::EstimatedValueSize(v8::Isolate*, v8::Local<v8::Value>)",93957336261088,93957336261180],["v8::debug::ConsoleCallArguments::ConsoleCallArguments(v8::FunctionCallbackInfo<v8::Value> const&)",93957336262096,93957336262123],["v8::debug::GeneratorObject::Script()",93957336262240,93957336262408],["v8::debug::GeneratorObject::IsSuspended()",93957336262832,93957336262848],["v8::debug::EvaluateGlobal(v8::Isolate*, v8::Local<v8::String>, v8::debug::EvaluateGlobalMode, bool)",93957336262912,93957336263257],["v8::debug::GlobalLexicalScopeNames(v8::Local<v8::Context>, v8::PersistentValueVector<v8::String, v8::DefaultPersistentValueVectorTraits>*)",93957336263360,93957336264279],["v8::internal::FeedbackVectorSpec::AddTypeProfileSlot()",93957338516416,93957338516953],["v8::internal::FeedbackNexus::GetFirstMap() const",93957338521968,93957338522041],["v8::internal::FeedbackNexus::ConfigureMonomorphic(v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Map>, v8::internal::MaybeObjectHandle const&)",93957338526448,93957338527017],["v8::internal::FeedbackNexus::GetKeyedAccessLoadMode() const",93957338529808,93957338530250],["v8::internal::FeedbackNexus::GetTypesForSourcePositions(unsigned int) const",93957338533008,93957338534019],["v8::internal::FieldType::Any(v8::internal::Isolate*)",93957338535056,93957338535142],["v8::internal::FieldType::Equals(v8::internal::FieldType) const",93957338535344,93957338535462],["v8::internal::Intl::ToLatin1LowerTable()",93957338535680,93957338535693],["v8::internal::Intl::ConvertOneByteToLower(v8::internal::String, v8::internal::String)",93957338536064,93957338536685],["v8::internal::(anonymous namespace)::LocaleConvertCase(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, bool, char const*)",93957338537376,93957338537759],["v8::internal::Intl::GetNumberingSystem(icu_68::Locale const&)",93957338539296,93957338539548],["v8::internal::Intl::ToString(v8::internal::Isolate*, icu_68::UnicodeString const&)",93957338539696,93957338539782],["v8::internal::Intl::AddElement(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSArray>, int, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String>)",93957338539952,93957338540176],["v8::internal::Intl::BuildLocaleSet(std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, char const*, char const*)",93957338540448,93957338541644],["v8::internal::Intl::ToLanguageTag(icu_68::Locale const&)",93957338542592,93957338542789],["v8::internal::Intl::GetStringOption(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, char const*, std::__1::vector<char const*, std::__1::allocator<char const*> >, char const*, std::__1::unique_ptr<char [], std::__1::default_delete<char []> >*)",93957338543104,93957338543594],["v8::internal::compiler::VisitBinop(v8::internal::compiler::InstructionSelector*, v8::internal::compiler::Node*, unsigned int, v8::internal::compiler::FlagsContinuation*)",93957342081136,93957342082147],["v8::internal::compiler::(anonymous namespace)::VisitDiv(v8::internal::compiler::InstructionSelector*, v8::internal::compiler::Node*, v8::internal::compiler::ArchOpcode)",93957342085552,93957342085813],["v8::internal::compiler::InstructionSelector::VisitInt64Mod(v8::internal::compiler::Node*)",93957342086160,93957342086175],["v8::internal::compiler::InstructionSelector::VisitTryTruncateFloat32ToInt64(v8::internal::compiler::Node*)",93957342086224,93957342086495],["v8::internal::compiler::InstructionSelector::VisitTryTruncateFloat64ToUint64(v8::internal::compiler::Node*)",93957342087040,93957342087311],["v8::internal::compiler::InstructionSelector::VisitChangeInt32ToInt64(v8::internal::compiler::Node*)",93957342087328,93957342088017],["v8::internal::compiler::InstructionSelector::VisitChangeUint32ToUint64(v8::internal::compiler::Node*)",93957342088224,93957342088416],["v8::internal::compiler::InstructionSelector::VisitWord32Clz(v8::internal::compiler::Node*)",93957342088576,93957342088729],["fcvt_r",139871564279632,139871564280289],["qecvt_r",139871564281680,139871564282079],["hcreate",139871564282176,139871564282188],["hdestroy_r",139871564282400,139871564282447],["v8::debug::Script::GetSourceOffset(v8::debug::Location const&) const",93957336258048,93957336258406],["v8::debug::WasmScript::GetDebugSymbolType() const",93957336259264,93957336259314],["v8::debug::Location::Location()",93957336259840,93957336259864],["v8::debug::TierUpAllModulesPerIsolate(v8::Isolate*)",93957336260800,93957336260820],["v8::debug::ResetBlackboxedStateCache(v8::Isolate*, v8::Local<v8::debug::Script>)",93957336260896,93957336261086],["v8::debug::WasmValueObject::IsWasmValueObject(v8::Local<v8::Value>)",93957336261184,93957336261233],["v8::debug::SetConsoleDelegate(v8::Isolate*, v8::debug::ConsoleDelegate*)",93957336262080,93957336262093],["v8::debug::ConsoleCallArguments::ConsoleCallArguments(v8::internal::BuiltinArguments const&)",93957336262128,93957336262182],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)26, unsigned long>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)26> >::CreateListFromArrayLike(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338511344,93957338511603],["v8::internal::FeedbackVector::SetOptimizedCode(v8::internal::Handle<v8::internal::FeedbackVector>, v8::internal::Handle<v8::internal::Code>, v8::internal::FeedbackCell)",93957338518128,93957338518448],["v8::internal::FeedbackNexus::ConfigureUninitialized()",93957338520688,93957338521068],["v8::internal::FeedbackNexus::GetForInFeedback() const",93957338523232,93957338523268],["v8::internal::FeedbackNexus::GetSpeculationMode()",93957338526288,93957338526332],["v8::internal::FeedbackNexus::ExtractMaps(std::__1::vector<v8::internal::Handle<v8::internal::Map>, std::__1::allocator<v8::internal::Handle<v8::internal::Map> > >*) const",93957338527728,93957338528324],["v8::internal::FeedbackNexus::FindHandlerForMap(v8::internal::Handle<v8::internal::Map>) const",93957338529408,93957338529593],["v8::internal::FeedbackNexus::GetKeyedAccessStoreMode() const",93957338530416,93957338531310],["v8::internal::FeedbackNexus::GetSourcePositions() const",93957338532432,93957338532995],["v8::internal::FeedbackNexus::ResetTypeProfile()",93957338534032,93957338534211],["v8::internal::FeedbackIterator::AdvancePolymorphic()",93957338534768,93957338535055],["v8::internal::FieldType::Class(v8::internal::Handle<v8::internal::Map>, v8::internal::Isolate*)",93957338535152,93957338535232],["v8::internal::FieldType::NowIs(v8::internal::FieldType) const",93957338535296,93957338535338],["v8::internal::FieldType::NowIs(v8::internal::Handle<v8::internal::FieldType>) const",93957338535472,93957338535517],["v8::internal::FieldType::NowContains(v8::internal::Object) const",93957338535632,93957338535672],["v8::internal::Intl::ToICUUnicodeString(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>)",93957338535696,93957338535873],["v8::internal::compiler::InstructionSelector::VisitWord64Rol(v8::internal::compiler::Node*)",93957342079248,93957342079263],["v8::internal::compiler::InstructionSelector::VisitInt64SubWithOverflow(v8::internal::compiler::Node*)",93957342083920,93957342084074],["v8::internal::compiler::(anonymous namespace)::VisitMulHigh(v8::internal::compiler::InstructionSelector*, v8::internal::compiler::Node*, v8::internal::compiler::ArchOpcode)",93957342085200,93957342085523],["v8::internal::compiler::InstructionSelector::VisitUint32Div(v8::internal::compiler::Node*)",93957342085840,93957342085855],["v8::internal::compiler::(anonymous namespace)::VisitMod(v8::internal::compiler::InstructionSelector*, v8::internal::compiler::Node*, v8::internal::compiler::ArchOpcode)",93957342085888,93957342086159],["v8::internal::compiler::InstructionSelector::VisitUint32Mod(v8::internal::compiler::Node*)",93957342086176,93957342086191],["v8::internal::compiler::InstructionSelector::VisitUint32MulHigh(v8::internal::compiler::Node*)",93957342086208,93957342086223],["v8::internal::compiler::InstructionSelector::VisitTryTruncateFloat64ToInt64(v8::internal::compiler::Node*)",93957342086496,93957342086767],["munlockall",139871564279312,139871564279345],["qfcvt",139871564280720,139871564280875],["qfcvt_r",139871564280992,139871564281671],["hdestroy",139871564282080,139871564282092],["v8::debug::Script::SourceURL() const",93957336256000,93957336256350],["v8::debug::Script::SetScriptSource(v8::Local<v8::String>, bool, v8::debug::LiveEditResult*) const",93957336258496,93957336258531],["v8::debug::ForceGarbageCollection(v8::Isolate*, cppgc::EmbedderStackState)",93957336259168,93957336259203],["v8::debug::WasmScript::Bytecode() const",93957336259552,93957336259713],["v8::debug::Location::Location(int, int)",93957336259824,93957336259839],["v8::debug::GetLoadedScripts(v8::Isolate*, v8::PersistentValueVector<v8::debug::Script, v8::DefaultPersistentValueVectorTraits>&)",93957336259872,93957336260308],["v8::debug::TierDownAllModulesPerIsolate(v8::Isolate*)",93957336260768,93957336260788],["v8::debug::SetDebugDelegate(v8::Isolate*, v8::debug::DebugDelegate*)",93957336260832,93957336260849],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)24, double>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)24> >::CopyTypedArrayElementsSlice(v8::internal::JSTypedArray, v8::internal::JSTypedArray, unsigned long, unsigned long)",93957338501568,93957338503607],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)27, long>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)27> >::IndexOfValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338513504,93957338513688],["v8::internal::ClosureFeedbackCellArray::New(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957338517152,93957338517403],["v8::internal::FeedbackVector::InitializeOptimizationState()",93957338518592,93957338518617],["v8::internal::FeedbackNexus::FeedbackNexus(v8::internal::FeedbackVector, v8::internal::FeedbackSlot)",93957338520416,93957338520556],["v8::internal::FeedbackNexus::ConfigureMegamorphic(v8::internal::IcCheckType)",93957338521200,93957338521411],["v8::internal::FeedbackNexus::GetBinaryOperationFeedback() const",93957338523024,93957338523089],["v8::internal::FeedbackNexus::ConfigureLexicalVarMode(int, int, bool)",93957338523376,93957338523624],["v8::internal::FeedbackNexus::SetSpeculationMode(v8::internal::SpeculationMode)",93957338526064,93957338526276],["v8::internal::FeedbackNexus::ComputeCallFrequency()",93957338526336,93957338526437],["v8::internal::FeedbackNexus::ConfigurePolymorphic(v8::internal::Handle<v8::internal::Name>, std::__1::vector<std::__1::pair<v8::internal::Handle<v8::internal::Map>, v8::internal::MaybeObjectHandle>, std::__1::allocator<std::__1::pair<v8::internal::Handle<v8::internal::Map>, v8::internal::MaybeObjectHandle> > > const&)",93957338527024,93957338527720],["v8::internal::FeedbackIterator::Advance()",93957338528336,93957338528412],["v8::internal::FeedbackNexus::ExtractMapsAndHandlers(std::__1::vector<std::__1::pair<v8::internal::Handle<v8::internal::Map>, v8::internal::MaybeObjectHandle>, std::__1::allocator<std::__1::pair<v8::internal::Handle<v8::internal::Map>, v8::internal::MaybeObjectHandle> > >*, std::__1::function<v8::internal::MaybeHandle<v8::internal::Map> (v8::internal::Handle<v8::internal::Map>)>) const",93957338528912,93957338529403],["v8::internal::FeedbackNexus::GetName() const",93957338529600,93957338529805],["v8::internal::FeedbackNexus::GetKeyType() const",93957338530256,93957338530409],["v8::internal::FeedbackNexus::GetConstructorFeedback() const",93957338531312,93957338531495],["v8::internal::compiler::ScaleMatcher<v8::internal::compiler::BinopMatcher<v8::internal::compiler::IntMatcher<long, (v8::internal::compiler::IrOpcode::Value)23>, v8::internal::compiler::IntMatcher<long, (v8::internal::compiler::IrOpcode::Value)23> >, (v8::internal::compiler::IrOpcode::Value)334, (v8::internal::compiler::IrOpcode::Value)325>::ScaleMatcher(v8::internal::compiler::Node*, bool)",93957342076688,93957342077123],["v8::internal::compiler::InstructionSelector::VisitWord32ReverseBytes(v8::internal::compiler::Node*)",93957342079456,93957342079609],["v8::internal::compiler::OperandGenerator::TempImmediate(int)",93957342083120,93957342083170],["v8::internal::compiler::(anonymous namespace)::VisitMul(v8::internal::compiler::InstructionSelector*, v8::internal::compiler::Node*, v8::internal::compiler::ArchOpcode)",93957342084512,93957342084999],["v8::internal::compiler::InstructionSelector::VisitInt32MulHigh(v8::internal::compiler::Node*)",93957342085184,93957342085199],["v8::internal::compiler::InstructionSelector::VisitInt32Div(v8::internal::compiler::Node*)",93957342085536,93957342085551],["v8::internal::compiler::InstructionSelector::VisitInt64Div(v8::internal::compiler::Node*)",93957342085824,93957342085839],["v8::internal::compiler::InstructionSelector::VisitUint64Div(v8::internal::compiler::Node*)",93957342085856,93957342085871],["remap_file_pages",139871564279120,139871564279156],["ecvt",139871564279536,139871564279570],["ecvt_r",139871564280304,139871564280706],["qecvt",139871564280880,139871564280922],["v8::debug::CanBreakProgram(v8::Isolate*)",93957336254896,93957336254967],["v8::debug::Script::IsWasm() const",93957336257136,93957336257157],["v8::debug::Location::GetColumnNumber() const",93957336258432,93957336258441],["v8::debug::Script::SetBreakpointOnScriptEntry(int*) const",93957336258688,93957336258994],["v8::debug::GetCurrentPlatform()",93957336259152,93957336259162],["v8::debug::WasmScript::Cast(v8::debug::Script*)",93957336259216,93957336259260],["v8::debug::WasmScript::ExternalSymbolsURL() const",93957336259328,93957336259543],["v8::debug::WasmScript::GetContainingFunction(int) const",93957336259728,93957336259776],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)23, float>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)23> >::Reverse(v8::internal::JSObject)",93957338492928,93957338493012],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)26, unsigned long>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)26> >::AddElementsToKeyAccumulator(v8::internal::Handle<v8::internal::JSObject>, v8::internal::KeyAccumulator*, v8::internal::AddKeyConversion)",93957338509504,93957338509803],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)27, long>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)27> >::AddElementsToKeyAccumulator(v8::internal::Handle<v8::internal::JSObject>, v8::internal::KeyAccumulator*, v8::internal::AddKeyConversion)",93957338512720,93957338513019],["v8::internal::EmbedderDataArray::EnsureCapacity(v8::internal::Isolate*, v8::internal::Handle<v8::internal::EmbedderDataArray>, int)",93957338514752,93957338514829],["v8::internal::FeedbackMetadata::HasTypeProfileSlot() const",93957338517024,93957338517055],["v8::internal::FeedbackVector::AddToVectorsForProfilingTools(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FeedbackVector>)",93957338517904,93957338518082],["v8::internal::FeedbackVector::ClearOptimizationMarker()",93957338518544,93957338518557],["v8::internal::FeedbackVector::ClearSlots(v8::internal::Isolate*)",93957338518912,93957338519417],["v8::internal::FeedbackNexus::FeedbackNexus(v8::internal::Handle<v8::internal::FeedbackVector>, v8::internal::FeedbackSlot)",93957338520256,93957338520403],["v8::internal::FeedbackNexus::FeedbackNexus(v8::internal::Handle<v8::internal::FeedbackVector>, v8::internal::FeedbackSlot, v8::internal::NexusConfig const&)",93957338520560,93957338520684],["v8::internal::FeedbackNexus::ConfigureMegamorphic()",93957338521072,93957338521198],["v8::internal::FeedbackNexus::GetFeedbackPair() const",93957338521424,93957338521959],["v8::internal::FeedbackNexus::ic_state() const",93957338522048,93957338523023],["v8::internal::FeedbackNexus::GetCompareOperationFeedback() const",93957338523104,93957338523227],["v8::internal::FeedbackNexus::ConfigurePropertyCellMode(v8::internal::Handle<v8::internal::PropertyCell>)",93957338523280,93957338523363],["v8::internal::FeedbackNexus::ConfigureHandlerMode(v8::internal::MaybeObjectHandle const&)",93957338523632,93957338523760],["v8::internal::compiler::InstructionSelector::VisitWord64Or(v8::internal::compiler::Node*)",93957342073712,93957342073795],["v8::internal::compiler::(anonymous namespace)::TryMatchLoadWord64AndShiftRight(v8::internal::compiler::InstructionSelector*, v8::internal::compiler::Node*, unsigned int)",93957342078032,93957342078778],["v8::internal::compiler::InstructionSelector::VisitWord64Ror(v8::internal::compiler::Node*)",93957342079280,93957342079295],["v8::internal::compiler::InstructionSelector::VisitInt64Add(v8::internal::compiler::Node*)",93957342080464,93957342080970],["v8::internal::compiler::InstructionSelector::VisitInt32Sub(v8::internal::compiler::Node*)",93957342082160,93957342083120],["v8::internal::compiler::InstructionSelector::VisitInt64Sub(v8::internal::compiler::Node*)",93957342083184,93957342083905],["v8::internal::compiler::InstructionSelector::VisitInt32Mul(v8::internal::compiler::Node*)",93957342084080,93957342084509],["v8::internal::compiler::InstructionSelector::VisitInt32MulWithOverflow(v8::internal::compiler::Node*)",93957342085008,93957342085162],["__mprotect",139871564278816,139871564278849],["munlock",139871564279216,139871564279249],["fcvt",139871564279360,139871564279531],["gcvt",139871564279584,139871564279626],["v8::debug::(anonymous namespace)::CollectPrivateMethodsAndAccessorsFromContext(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Context>, v8::internal::IsStaticFlag, std::__1::vector<v8::Local<v8::Value>, std::__1::allocator<v8::Local<v8::Value> > >*, std::__1::vector<v8::Local<v8::Value>, std::__1::allocator<v8::Local<v8::Value> > >*)",93957336253888,93957336254424],["v8::debug::Script::LineOffset() const",93957336255072,93957336255086],["v8::debug::Script::ContextId() const",93957336256704,93957336256770],["v8::debug::Script::GetPossibleBreakpoints(v8::debug::Location const&, v8::debug::Location const&, bool, std::__1::vector<v8::debug::BreakLocation, std::__1::allocator<v8::debug::BreakLocation> >*) const",93957336257184,93957336258028],["v8::debug::(anonymous namespace)::CompareBreakLocation(v8::internal::BreakLocation const&, v8::internal::BreakLocation const&)",93957336258416,93957336258431],["v8::debug::Script::GetSourceLocation(int) const",93957336258448,93957336258491],["v8::debug::Script::SetBreakpoint(v8::Local<v8::String>, v8::debug::Location*, int*) const",93957336258544,93957336258682],["v8::debug::Script::RemoveWasmBreakpoint(int)",93957336259008,93957336259037],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)22, int>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)22> >::Get(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338488224,93957338488240],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)24, double>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)24> >::Set(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex, v8::internal::Object)",93957338499296,93957338499372],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)25, unsigned char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)25> >::CopyElements(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::JSObject>, unsigned long, unsigned long)",93957338504160,93957338505121],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)26, unsigned long>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)26> >::IndexOfValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338510288,93957338510472],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)27, long>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)27> >::Get(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338512144,93957338512181],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)27, long>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)27> >::Fill(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338513088,93957338513276],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)27, long>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)27> >::CopyElements(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::JSObject>, unsigned long, unsigned long)",93957338513840,93957338514477],["v8::internal::Handle<v8::internal::FeedbackMetadata> v8::internal::FeedbackMetadata::New<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*, v8::internal::FeedbackVectorSpec const*)",93957338515072,93957338515289],["v8::internal::FeedbackMetadata::GetKind(v8::internal::FeedbackSlot) const",93957338516960,93957338517013],["v8::internal::FeedbackVector::GetKind(v8::internal::FeedbackSlot) const",93957338517056,93957338517139],["v8::internal::FeedbackVector::New(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::ClosureFeedbackCellArray>, v8::internal::IsCompiledScope*)",93957338517408,93957338517894],["v8::internal::FeedbackVector::SaturatingIncrementProfilerTicks()",93957338518096,93957338518122],["v8::internal::FeedbackVector::SetInterruptBudget(v8::internal::FeedbackCell)",93957338518448,93957338518535],["v8::internal::FeedbackVector::SetOptimizationMarker(v8::internal::OptimizationMarker)",93957338518560,93957338518580],["v8::internal::FeedbackVector::EvictOptimizedCodeMarkedForDeoptimization(v8::internal::FeedbackCell, v8::internal::SharedFunctionInfo, char const*)",93957338518624,93957338518903],["v8::internal::NexusConfig::NewHandle(v8::internal::MaybeObject) const",93957338519424,93957338519766],["v8::internal::compiler::InstructionSelector::VisitStore(v8::internal::compiler::Node*)",93957342070912,93957342071689],["v8::internal::compiler::X64OperandGenerator::CanBeMemoryOperand(unsigned int, v8::internal::compiler::Node*, v8::internal::compiler::Node*, int)",93957342074848,93957342075028],["v8::internal::compiler::InstructionSelector::VisitWord32Shr(v8::internal::compiler::Node*)",93957342077952,93957342077967],["v8::internal::compiler::InstructionSelector::VisitWord64Sar(v8::internal::compiler::Node*)",93957342079168,93957342079220],["v8::internal::compiler::InstructionSelector::VisitWord32Ror(v8::internal::compiler::Node*)",93957342079264,93957342079279],["v8::internal::compiler::InstructionSelector::VisitWord64ReverseBytes(v8::internal::compiler::Node*)",93957342079296,93957342079449],["v8::internal::compiler::InstructionSelector::VisitInt32Add(v8::internal::compiler::Node*)",93957342079616,93957342080460],["v8::internal::compiler::InstructionSelector::VisitInt64AddWithOverflow(v8::internal::compiler::Node*)",93957342080976,93957342081130],["syscall",139871564278176,139871564278227],["__madvise",139871564279024,139871564279057],["mlock",139871564279168,139871564279201],["mlockall",139871564279264,139871564279297],["v8::debug::SetContextId(v8::Local<v8::Context>, int)",93957336250400,93957336250417],["v8::debug::PrepareStep(v8::Isolate*, v8::debug::StepAction)",93957336254592,93957336254698],["v8::debug::Script::IsEmbedded() const",93957336255008,93957336255042],["v8::debug::Script::LineEnds() const",93957336255104,93957336255643],["v8::debug::Script::SourceMappingURL() const",93957336256352,93957336256702],["v8::debug::Script::Source() const",93957336256784,93957336257134],["v8::debug::Script::IsModule() const",93957336257168,93957336257183],["v8::debug::Location::IsEmpty() const",93957336258032,93957336258041],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)20, short>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)20> >::IndexOfValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338479504,93957338479726],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)23, float>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)23> >::Get(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338490320,93957338490336],["v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)23, float>::GetInternalImpl(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338498128,93957338498343],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)24, double>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)24> >::LastIndexOfValue(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long)",93957338500128,93957338500359],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)25, unsigned char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)25> >::Set(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex, v8::internal::Object)",93957338503840,93957338503973],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)26, unsigned long>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)26> >::Get(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338508928,93957338508965],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)26, unsigned long>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)26> >::Fill(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338509872,93957338510060],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)26, unsigned long>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)26> >::Reverse(v8::internal::JSObject)",93957338510624,93957338510699],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)26, unsigned long>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)26> >::CopyTypedArrayElementsSlice(v8::internal::JSTypedArray, v8::internal::JSTypedArray, unsigned long, unsigned long)",93957338511616,93957338512142],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)27, long>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)27> >::CollectValuesOrEntries(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArray>, bool, int*, v8::internal::PropertyFilter)",93957338512192,93957338512718],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)27, long>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)27> >::Set(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex, v8::internal::Object)",93957338513024,93957338513076],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)27, long>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)27> >::IncludesValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338513280,93957338513504],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)27, long>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)27> >::LastIndexOfValue(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long)",93957338513696,93957338513831],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)27, long>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)27> >::CreateListFromArrayLike(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338514480,93957338514739],["v8::internal::Handle<v8::internal::FeedbackMetadata> v8::internal::FeedbackMetadata::New<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::FeedbackVectorSpec const*)",93957338514832,93957338515067],["v8::internal::FeedbackVectorSpec::AddSlot(v8::internal::FeedbackSlotKind)",93957338515296,93957338516412],["v8::internal::compiler::InstructionSelector::VisitStackSlot(v8::internal::compiler::Node*)",93957342068224,93957342068483],["v8::internal::compiler::InstructionSelector::VisitWord32And(v8::internal::compiler::Node*)",93957342072672,93957342073053],["v8::internal::compiler::InstructionSelector::VisitWord64Xor(v8::internal::compiler::Node*)",93957342074080,93957342074500],["v8::internal::compiler::(anonymous namespace)::VisitWord32Shift(v8::internal::compiler::InstructionSelector*, v8::internal::compiler::Node*, v8::internal::compiler::ArchOpcode)",93957342075472,93957342075958],["v8::internal::compiler::(anonymous namespace)::VisitWord64Shift(v8::internal::compiler::InstructionSelector*, v8::internal::compiler::Node*, v8::internal::compiler::ArchOpcode)",93957342077136,93957342077946],["v8::internal::compiler::InstructionSelector::VisitWord64Shr(v8::internal::compiler::Node*)",93957342077968,93957342078020],["v8::internal::compiler::InstructionSelector::VisitWord32Sar(v8::internal::compiler::Node*)",93957342078784,93957342079154],["v8::internal::compiler::InstructionSelector::VisitWord32Rol(v8::internal::compiler::Node*)",93957342079232,93957342079247],["__vsyslog_chk",139871564277712,139871564277736],["__mmap",139871564278592,139871564278757],["msync",139871564278864,139871564279019],["mincore",139871564279072,139871564279105],["v8::internal::FrameInspector::~FrameInspector()",93957336249600,93957336249680],["v8::debug::SetBreakOnNextFunctionCall(v8::Isolate*)",93957336250496,93957336250513],["v8::debug::ChangeBreakOnException(v8::Isolate*, v8::debug::ExceptionBreakState)",93957336254496,93957336254560],["v8::debug::BreakRightNow(v8::Isolate*)",93957336254768,93957336254821],["v8::debug::Script::WasCompiled() const",93957336254976,93957336254993],["v8::debug::Script::Id() const",93957336255056,93957336255070],["v8::debug::Script::ColumnOffset() const",93957336255088,93957336255102],["v8::debug::Script::Name() const",93957336255648,93957336255998],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)19, unsigned short>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)19> >::Get(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338469984,93957338470089],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)21, unsigned int>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)21> >::IncludesValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338482240,93957338482520],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)22, int>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)22> >::IndexOfValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338489456,93957338489677],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)23, float>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)23> >::Fill(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338491520,93957338492074],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)23, float>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)23> >::CreateListFromArrayLike(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338494000,93957338494244],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)24, double>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)24> >::CollectValuesOrEntries(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArray>, bool, int*, v8::internal::PropertyFilter)",93957338498368,93957338499023],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)24, double>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)24> >::IncludesValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338499568,93957338499880],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)24, double>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)24> >::CopyElements(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::JSObject>, unsigned long, unsigned long)",93957338500448,93957338501303],["v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)24, double>::GetInternalImpl(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338503616,93957338503827],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)25, unsigned char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)25> >::Fill(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338503984,93957338504149],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)25, unsigned char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)25> >::CopyTypedArrayElementsSlice(v8::internal::JSTypedArray, v8::internal::JSTypedArray, unsigned long, unsigned long)",93957338505136,93957338508919],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)26, unsigned long>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)26> >::CollectValuesOrEntries(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArray>, bool, int*, v8::internal::PropertyFilter)",93957338508976,93957338509502],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)26, unsigned long>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)26> >::Set(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex, v8::internal::Object)",93957338509808,93957338509860],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)26, unsigned long>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)26> >::IncludesValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338510064,93957338510288],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)26, unsigned long>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)26> >::LastIndexOfValue(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long)",93957338510480,93957338510615],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)26, unsigned long>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)26> >::CopyElements(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::JSObject>, unsigned long, unsigned long)",93957338510704,93957338511341],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::Operand>::emit<&v8::internal::Assembler::vpmovsxbw, &v8::internal::Assembler::pmovsxbw>(v8::internal::XMMRegister, v8::internal::Operand)",93957342067296,93957342067384],["v8::internal::compiler::X64OperandGenerator::GetEffectiveAddressMemoryOperand(v8::internal::compiler::Node*, v8::internal::compiler::InstructionOperand*, unsigned long*)",93957342069392,93957342070390],["v8::internal::compiler::InstructionSelector::VisitProtectedStore(v8::internal::compiler::Node*)",93957342071904,93957342072335],["v8::internal::compiler::InstructionSelector::VisitWord64And(v8::internal::compiler::Node*)",93957342073520,93957342073603],["v8::internal::compiler::InstructionSelector::VisitWord32Xor(v8::internal::compiler::Node*)",93957342073808,93957342074078],["v8::internal::compiler::InstructionSelector::VisitStackPointerGreaterThan(v8::internal::compiler::Node*, v8::internal::compiler::FlagsContinuation*)",93957342074512,93957342074836],["v8::internal::compiler::InstructionSelector::VisitWord32Shl(v8::internal::compiler::Node*)",93957342075040,93957342075469],["v8::internal::compiler::InstructionSelector::VisitWord64Shl(v8::internal::compiler::Node*)",93957342075968,93957342076673],["ttyslot",139871564275136,139871564275372],["closelog",139871564277920,139871564278141],["daemon",139871564278240,139871564278590],["__munmap",139871564278768,139871564278801],["v8::internal::DebugEvaluate::Local(v8::internal::Isolate*, v8::internal::StackFrameId, int, v8::internal::Handle<v8::internal::String>, bool)",93957336244288,93957336245532],["v8::internal::FrameInspector::IsWasm()",93957336250048,93957336250068],["v8::debug::SetInspector(v8::Isolate*, v8_inspector::V8Inspector*)",93957336250464,93957336250477],["v8::debug::GetInternalProperties(v8::Isolate*, v8::Local<v8::Value>)",93957336250560,93957336250604],["v8::debug::GetCreationContext(v8::Local<v8::Object>)",93957336254432,93957336254484],["v8::debug::SetBreakPointsActive(v8::Isolate*, bool)",93957336254560,93957336254589],["v8::debug::ClearStepping(v8::Isolate*)",93957336254704,93957336254755],["v8::debug::SetTerminateOnResume(v8::Isolate*)",93957336254832,93957336254883],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)17, unsigned char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)17> >::Fill(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338461280,93957338461605],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)19, unsigned short>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)19> >::Reverse(v8::internal::JSObject)",93957338472800,93957338472880],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)21, unsigned int>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)21> >::CollectValuesOrEntries(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArray>, bool, int*, v8::internal::PropertyFilter)",93957338480320,93957338480975],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)21, unsigned int>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)21> >::CopyElements(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::JSObject>, unsigned long, unsigned long)",93957338483040,93957338484154],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)22, int>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)22> >::AddElementsToKeyAccumulator(v8::internal::Handle<v8::internal::JSObject>, v8::internal::KeyAccumulator*, v8::internal::AddKeyConversion)",93957338488896,93957338489154],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)22, int>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)22> >::CreateListFromArrayLike(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338489888,93957338490132],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)23, float>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)23> >::AddElementsToKeyAccumulator(v8::internal::Handle<v8::internal::JSObject>, v8::internal::KeyAccumulator*, v8::internal::AddKeyConversion)",93957338490992,93957338491250],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)23, float>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)23> >::IndexOfValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338492432,93957338492676],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)23, float>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)23> >::CopyElements(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::JSObject>, unsigned long, unsigned long)",93957338493024,93957338493990],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)23, float>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)23> >::CopyTypedArrayElementsSlice(v8::internal::JSTypedArray, v8::internal::JSTypedArray, unsigned long, unsigned long)",93957338494256,93957338498117],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)24, double>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)24> >::Get(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338498352,93957338498368],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)24, double>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)24> >::AddElementsToKeyAccumulator(v8::internal::Handle<v8::internal::JSObject>, v8::internal::KeyAccumulator*, v8::internal::AddKeyConversion)",93957338499024,93957338499282],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)24, double>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)24> >::Fill(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338499376,93957338499562],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)24, double>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)24> >::IndexOfValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338499888,93957338500117],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)24, double>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)24> >::Reverse(v8::internal::JSObject)",93957338500368,93957338500447],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)24, double>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)24> >::CreateListFromArrayLike(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338501312,93957338501556],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vpsignb, &v8::internal::Assembler::psignb>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342066480,93957342066577],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::Operand, unsigned char>::emit<&v8::internal::Assembler::vpshufhw, &v8::internal::Assembler::pshufhw>(v8::internal::XMMRegister, v8::internal::Operand, unsigned char)",93957342067680,93957342067787],["v8::internal::compiler::InstructionSelector::VisitAbortCSAAssert(v8::internal::compiler::Node*)",93957342068816,93957342068930],["v8::internal::compiler::InstructionSelector::VisitLoad(v8::internal::compiler::Node*, v8::internal::compiler::Node*, unsigned int)",93957342070496,93957342070733],["v8::internal::compiler::X64OperandGenerator::GetEffectiveIndexOperand(v8::internal::compiler::Node*, v8::internal::compiler::AddressingMode*)",93957342071696,93957342071890],["v8::internal::compiler::InstructionSelector::VisitStoreLane(v8::internal::compiler::Node*)",93957342072336,93957342072665],["v8::internal::compiler::BinopMatcher<v8::internal::compiler::IntMatcher<int, (v8::internal::compiler::IrOpcode::Value)22>, v8::internal::compiler::IntMatcher<int, (v8::internal::compiler::IrOpcode::Value)22> >::BinopMatcher(v8::internal::compiler::Node*)",93957342073056,93957342073518],["v8::internal::compiler::InstructionSelector::VisitWord32Or(v8::internal::compiler::Node*)",93957342073616,93957342073699],["getusershell",139871564274432,139871564274515],["vsyslog",139871564277504,139871564277511],["openlog",139871564277744,139871564277906],["setlogmask",139871564278144,139871564278161],["void std::__1::vector<v8::internal::CoverageScript, std::__1::allocator<v8::internal::CoverageScript> >::__emplace_back_slow_path<v8::internal::Handle<v8::internal::Script>&>(v8::internal::Handle<v8::internal::Script>&)",93957336237344,93957336237804],["v8::internal::DebugEvaluate::FunctionGetSideEffectState(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957336247712,93957336248755],["v8::internal::FrameInspector::GetExpression(int)",93957336249808,93957336249927],["v8::internal::RedirectActiveFunctions::RedirectActiveFunctions(v8::internal::SharedFunctionInfo, v8::internal::RedirectActiveFunctions::Mode)",93957336250112,93957336250135],["v8::debug::GetContextId(v8::Local<v8::Context>)",93957336250432,93957336250459],["v8::debug::GetInspector(v8::Isolate*)",93957336250480,93957336250493],["v8::debug::ClearBreakOnNextFunctionCall(v8::Isolate*)",93957336250528,93957336250545],["v8::debug::GetPrivateMembers(v8::Local<v8::Context>, v8::Local<v8::Object>, std::__1::vector<v8::Local<v8::Value>, std::__1::allocator<v8::Local<v8::Value> > >*, std::__1::vector<v8::Local<v8::Value>, std::__1::allocator<v8::Local<v8::Value> > >*)",93957336250608,93957336253880],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::SlowStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)16> >::AddElementsToKeyAccumulator(v8::internal::Handle<v8::internal::JSObject>, v8::internal::KeyAccumulator*, v8::internal::AddKeyConversion)",93957338456288,93957338456584],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)17, unsigned char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)17> >::GetEntryForIndex(v8::internal::Isolate*, v8::internal::JSObject, v8::internal::FixedArrayBase, unsigned long)",93957338467728,93957338467775],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)19, unsigned short>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)19> >::Fill(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338471424,93957338472092],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)20, short>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)20> >::Get(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338478096,93957338478201],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)20, short>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)20> >::CreateListFromArrayLike(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338479952,93957338480290],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)21, unsigned int>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)21> >::Set(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex, v8::internal::Object)",93957338481248,93957338481560],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)21, unsigned int>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)21> >::LastIndexOfValue(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long)",93957338482752,93957338482959],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)21, unsigned int>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)21> >::CopyTypedArrayElementsSlice(v8::internal::JSTypedArray, v8::internal::JSTypedArray, unsigned long, unsigned long)",93957338484416,93957338488059],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)22, int>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)22> >::CollectValuesOrEntries(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArray>, bool, int*, v8::internal::PropertyFilter)",93957338488240,93957338488895],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)22, int>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)22> >::IncludesValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338489168,93957338489448],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)22, int>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)22> >::LastIndexOfValue(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long)",93957338489680,93957338489887],["v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)22, int>::GetInternalImpl(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338490144,93957338490308],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)23, float>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)23> >::CollectValuesOrEntries(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArray>, bool, int*, v8::internal::PropertyFilter)",93957338490336,93957338490991],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)23, float>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)23> >::Set(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex, v8::internal::Object)",93957338491264,93957338491517],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)23, float>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)23> >::IncludesValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338492080,93957338492425],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)23, float>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)23> >::LastIndexOfValue(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long)",93957338492688,93957338492923],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vpsubw, &v8::internal::Assembler::psubw>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342065584,93957342065670],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vpmaxub, &v8::internal::Assembler::pmaxub>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342066896,93957342066982],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::Operand>::emit<&v8::internal::Assembler::vpmovsxwd, &v8::internal::Assembler::pmovsxwd>(v8::internal::XMMRegister, v8::internal::Operand)",93957342067488,93957342067576],["v8::internal::compiler::InstructionScheduler::GetTargetInstructionFlags(v8::internal::compiler::Instruction const*) const",93957342067904,93957342068086],["v8::internal::compiler::InstructionSequence::AddImmediate(v8::internal::compiler::Constant const&)",93957342068496,93957342068816],["v8::internal::compiler::InstructionSelector::VisitLoadLane(v8::internal::compiler::Node*)",93957342068944,93957342069386],["v8::internal::compiler::InstructionSelector::VisitLoadTransform(v8::internal::compiler::Node*)",93957342070400,93957342070487],["v8::internal::compiler::InstructionSelector::VisitPoisonedLoad(v8::internal::compiler::Node*)",93957342070736,93957342070910],["getttyent",139871564273424,139871564273503],["setusershell",139871564274608,139871564274629],["syslog",139871564277312,139871564277491],["__syslog_chk",139871564277520,139871564277708],["void std::__1::vector<v8::HeapStatsUpdate, std::__1::allocator<v8::HeapStatsUpdate> >::__emplace_back_slow_path<unsigned int, unsigned int&, unsigned int&>(unsigned int&&, unsigned int&, unsigned int&)",93957336231216,93957336231519],["unsigned int std::__1::__sort5<std::__1::__less<v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount, v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount>&, v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount*>(v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount*, v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount*, v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount*, v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount*, v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount*, std::__1::__less<v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount, v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount>&)",93957336241664,93957336242357],["v8::internal::DebugEvaluate::WithTopmostArguments(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>)",93957336246160,93957336246937],["void std::__1::vector<v8::JitCodeEvent::line_info_t, std::__1::allocator<v8::JitCodeEvent::line_info_t> >::__push_back_slow_path<v8::JitCodeEvent::line_info_t>(v8::JitCodeEvent::line_info_t&&)",93957336248992,93957336249284],["v8::internal::FrameInspector::GetParameter(int)",93957336249680,93957336249799],["v8::internal::FrameInspector::GetContext()",93957336249936,93957336250046],["v8::internal::FrameInspector::IsJavaScript()",93957336250080,93957336250103],["v8::internal::RedirectActiveFunctions::VisitThread(v8::internal::Isolate*, v8::internal::ThreadLocalTop*)",93957336250144,93957336250394],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)15> >::IndexOfValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338449536,93957338449714],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)17, unsigned char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)17> >::HasElement(v8::internal::JSObject, unsigned int, v8::internal::FixedArrayBase, v8::internal::PropertyFilter)",93957338458048,93957338458094],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)17, unsigned char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)17> >::Reverse(v8::internal::JSObject)",93957338462320,93957338462399],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)18, signed char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)18> >::IncludesValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338468896,93957338469176],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)19, unsigned short>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)19> >::AddElementsToKeyAccumulator(v8::internal::Handle<v8::internal::JSObject>, v8::internal::KeyAccumulator*, v8::internal::AddKeyConversion)",93957338470736,93957338471089],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)19, unsigned short>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)19> >::IndexOfValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338472384,93957338472590],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)19, unsigned short>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)19> >::CreateListFromArrayLike(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338474000,93957338474338],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)20, short>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)20> >::AddElementsToKeyAccumulator(v8::internal::Handle<v8::internal::JSObject>, v8::internal::KeyAccumulator*, v8::internal::AddKeyConversion)",93957338478848,93957338479201],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)20, short>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)20> >::LastIndexOfValue(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long)",93957338479728,93957338479952],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)21, unsigned int>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)21> >::Get(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338480304,93957338480320],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)21, unsigned int>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)21> >::AddElementsToKeyAccumulator(v8::internal::Handle<v8::internal::JSObject>, v8::internal::KeyAccumulator*, v8::internal::AddKeyConversion)",93957338480976,93957338481234],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)21, unsigned int>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)21> >::Fill(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338481568,93957338482235],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)21, unsigned int>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)21> >::IndexOfValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338482528,93957338482749],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)21, unsigned int>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)21> >::Reverse(v8::internal::JSObject)",93957338482960,93957338483036],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)21, unsigned int>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)21> >::CreateListFromArrayLike(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338484160,93957338484404],["v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)21, unsigned int>::GetInternalImpl(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338488064,93957338488222],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vpmaxsd, &v8::internal::Assembler::pmaxsd>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342064704,93957342064801],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vpminuw, &v8::internal::Assembler::pminuw>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342066000,93957342066097],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vpsllw, &v8::internal::Assembler::psllw>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342066688,93957342066774],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vpabsb, &v8::internal::Assembler::pabsb>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342067088,93957342067185],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::Operand>::emit<&v8::internal::Assembler::vpmovzxbw, &v8::internal::Assembler::pmovzxbw>(v8::internal::XMMRegister, v8::internal::Operand)",93957342067392,93957342067480],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::Operand>::emit<&v8::internal::Assembler::vpmovzxwd, &v8::internal::Assembler::pmovzxwd>(v8::internal::XMMRegister, v8::internal::Operand)",93957342067584,93957342067672],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::Operand, unsigned char>::emit<&v8::internal::Assembler::vpblendw, &v8::internal::Assembler::pblendw>(v8::internal::XMMRegister, v8::internal::Operand, unsigned char)",93957342067792,93957342067899],["v8::internal::compiler::InstructionScheduler::GetInstructionLatency(v8::internal::compiler::Instruction const*)",93957342068096,93957342068216],["chflags",139871564272240,139871564272268],["getttynam",139871564273600,139871564273748],["endusershell",139871564274528,139871564274594],["getpass",139871564274640,139871564275134],["v8::internal::DateParser::ReadMilliseconds(v8::internal::DateParser::DateToken)",93957336201008,93957336201396],["void std::__1::__sort<bool (*&)(v8::internal::CoverageBlock const&, v8::internal::CoverageBlock const&), v8::internal::CoverageBlock*>(v8::internal::CoverageBlock*, v8::internal::CoverageBlock*, bool (*&)(v8::internal::CoverageBlock const&, v8::internal::CoverageBlock const&))",93957336232464,93957336234906],["unsigned int std::__1::__sort3<std::__1::__less<v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount, v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount>&, v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount*>(v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount*, v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount*, v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount*, std::__1::__less<v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount, v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount>&)",93957336240288,93957336241105],["void std::__1::vector<v8::internal::CoverageFunction, std::__1::allocator<v8::internal::CoverageFunction> >::__emplace_back_slow_path<v8::internal::CoverageFunction&>(v8::internal::CoverageFunction&)",93957336243152,93957336243816],["v8::internal::DebugEvaluate::ContextBuilder::UpdateValues()",93957336245536,93957336246156],["v8::internal::DebugEvaluate::ContextBuilder::ContextBuilder(v8::internal::Isolate*, v8::internal::JavaScriptFrame*, int)",93957336246944,93957336247709],["v8::internal::DebugEvaluate::ApplySideEffectChecks(v8::internal::Handle<v8::internal::BytecodeArray>)",93957336248768,93957336248985],["v8::internal::FrameInspector::FrameInspector(v8::internal::CommonFrame*, int, v8::internal::Isolate*)",93957336249296,93957336249599],["v8::internal::(anonymous namespace)::SloppyArgumentsElementsAccessor<v8::internal::(anonymous namespace)::SlowSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::DictionaryElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)14> >::DirectCollectElementIndicesImpl(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::GetKeysConversion, v8::internal::PropertyFilter, v8::internal::Handle<v8::internal::FixedArray>, unsigned int*, unsigned int)",93957338442176,93957338442715],["v8::internal::(anonymous namespace)::StringWrapperElementsAccessor<v8::internal::(anonymous namespace)::FastStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)15> >::GrowCapacityAndConvertImpl(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338451104,93957338451436],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::SlowStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)16> >::GetDetails(v8::internal::JSObject, v8::internal::InternalIndex)",93957338457504,93957338457582],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)17, unsigned char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)17> >::CollectValuesOrEntries(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArray>, bool, int*, v8::internal::PropertyFilter)",93957338458688,93957338459324],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)17, unsigned char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)17> >::IndexOfValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338461904,93957338462109],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)17, unsigned char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)17> >::CreateListFromArrayLike(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338463520,93957338463858],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)18, signed char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)18> >::CollectValuesOrEntries(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArray>, bool, int*, v8::internal::PropertyFilter)",93957338467888,93957338468524],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)18, signed char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)18> >::LastIndexOfValue(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long)",93957338469408,93957338469632],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)19, unsigned short>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)19> >::CollectValuesOrEntries(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArray>, bool, int*, v8::internal::PropertyFilter)",93957338470096,93957338470732],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)19, unsigned short>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)19> >::Set(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex, v8::internal::Object)",93957338471104,93957338471420],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)19, unsigned short>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)19> >::IncludesValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338472096,93957338472377],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)19, unsigned short>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)19> >::LastIndexOfValue(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long)",93957338472592,93957338472800],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)19, unsigned short>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)19> >::CopyElements(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::JSObject>, unsigned long, unsigned long)",93957338472880,93957338473994],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)19, unsigned short>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)19> >::CopyTypedArrayElementsSlice(v8::internal::JSTypedArray, v8::internal::JSTypedArray, unsigned long, unsigned long)",93957338474352,93957338478093],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)20, short>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)20> >::CollectValuesOrEntries(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArray>, bool, int*, v8::internal::PropertyFilter)",93957338478208,93957338478844],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)20, short>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)20> >::IncludesValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338479216,93957338479497],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vpmovsxdq, &v8::internal::Assembler::pmovsxdq>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342063824,93957342063921],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vpminud, &v8::internal::Assembler::pminud>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342065136,93957342065233],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vpmovzxbw, &v8::internal::Assembler::pmovzxbw>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342065776,93957342065873],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::Operand, v8::internal::XMMRegister, unsigned char>::emit<&v8::internal::Assembler::vpextrb, &v8::internal::Assembler::pextrb>(v8::internal::Operand, v8::internal::XMMRegister, unsigned char)",93957342066224,93957342066352],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vpsubb, &v8::internal::Assembler::psubb>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342066592,93957342066678],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vpminsb, &v8::internal::Assembler::pminsb>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342066784,93957342066881],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vpminub, &v8::internal::Assembler::pminub>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342066992,93957342067078],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vpunpcklqdq, &v8::internal::Assembler::punpcklqdq>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342067200,93957342067286],["futimes",139871564271872,139871564272074],["insque",139871564272304,139871564272352],["setttyent",139871564273504,139871564273598],["endttyent",139871564273760,139871564273818],["v8::internal::DateCache::ProbeDST(int)",93957336199600,93957336200018],["v8::internal::Coverage::SelectMode(v8::internal::Isolate*, v8::debug::CoverageMode)",93957336229056,93957336230122],["std::__1::vector<v8::internal::CoverageBlock, std::__1::allocator<v8::internal::CoverageBlock> >::__append(unsigned long)",93957336231824,93957336232430],["void std::__1::__insertion_sort_3<bool (*&)(v8::internal::CoverageBlock const&, v8::internal::CoverageBlock const&), v8::internal::CoverageBlock*>(v8::internal::CoverageBlock*, v8::internal::CoverageBlock*, bool (*&)(v8::internal::CoverageBlock const&, v8::internal::CoverageBlock const&))",93957336235520,93957336236031],["void std::__1::__sort<std::__1::__less<v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount, v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount>&, v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount*>(v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount*, v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount*, std::__1::__less<v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount, v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount>&)",93957336237808,93957336240285],["unsigned int std::__1::__sort4<std::__1::__less<v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount, v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount>&, v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount*>(v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount*, v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount*, v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount*, v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount*, std::__1::__less<v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount, v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount>&)",93957336241120,93957336241651],["bool std::__1::__insertion_sort_incomplete<std::__1::__less<v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount, v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount>&, v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount*>(v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount*, v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount*, std::__1::__less<v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount, v8::internal::(anonymous namespace)::SharedFunctionInfoAndCount>&)",93957336242368,93957336243138],["v8::internal::DebugEvaluate::Global(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, v8::debug::EvaluateGlobalMode, v8::internal::REPLMode)",93957336243824,93957336244283],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::SlowSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)14> >::NumberOfElements(v8::internal::JSObject)",93957338435024,93957338435205],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)15> >::PrependElementIndices(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::Handle<v8::internal::FixedArray>, v8::internal::GetKeysConversion, v8::internal::PropertyFilter)",93957338446528,93957338447827],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)15> >::Reconfigure(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::InternalIndex, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes)",93957338450080,93957338450469],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::SlowStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)16> >::NumberOfElements(v8::internal::JSObject)",93957338452128,93957338452163],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::SlowStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)16> >::Set(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex, v8::internal::Object)",93957338456976,93957338457169],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::SlowStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)16> >::Delete(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338457648,93957338457696],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)17, unsigned char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)17> >::GetCapacity(v8::internal::JSObject, v8::internal::FixedArrayBase)",93957338458208,93957338458246],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)17, unsigned char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)17> >::AddElementsToKeyAccumulator(v8::internal::Handle<v8::internal::JSObject>, v8::internal::KeyAccumulator*, v8::internal::AddKeyConversion)",93957338460592,93957338460945],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)17, unsigned char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)17> >::IncludesValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338461616,93957338461896],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)17, unsigned char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)17> >::LastIndexOfValue(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long)",93957338462112,93957338462320],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)17, unsigned char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)17> >::CopyElements(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::JSObject>, unsigned long, unsigned long)",93957338462400,93957338463514],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)17, unsigned char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)17> >::CopyTypedArrayElementsSlice(v8::internal::JSTypedArray, v8::internal::JSTypedArray, unsigned long, unsigned long)",93957338463872,93957338467719],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)18, signed char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)18> >::Get(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338467776,93957338467881],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)18, signed char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)18> >::AddElementsToKeyAccumulator(v8::internal::Handle<v8::internal::JSObject>, v8::internal::KeyAccumulator*, v8::internal::AddKeyConversion)",93957338468528,93957338468881],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)18, signed char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)18> >::IndexOfValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338469184,93957338469405],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)18, signed char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)18> >::CreateListFromArrayLike(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338469632,93957338469970],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister, unsigned char>::emit<&v8::internal::Assembler::vinsertps, &v8::internal::Assembler::insertps>(v8::internal::XMMRegister, v8::internal::XMMRegister, unsigned char)",93957342063088,93957342063194],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vpmovsxwd, &v8::internal::Assembler::pmovsxwd>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342064272,93957342064369],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vpmovzxwd, &v8::internal::Assembler::pmovzxwd>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342064912,93957342065009],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vpmovsxbw, &v8::internal::Assembler::pmovsxbw>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342065360,93957342065457],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vpminsw, &v8::internal::Assembler::pminsw>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342065680,93957342065766],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vpmaxuw, &v8::internal::Assembler::pmaxuw>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342065888,93957342065985],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vpabsw, &v8::internal::Assembler::pabsw>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342066112,93957342066209],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::Operand, v8::internal::XMMRegister, unsigned char>::emit<&v8::internal::Assembler::vpextrw, &v8::internal::Assembler::pextrw>(v8::internal::Operand, v8::internal::XMMRegister, unsigned char)",93957342066352,93957342066480],["hasmntopt",139871564271328,139871564271456],["truncate",139871564272144,139871564272178],["fchflags",139871564272272,139871564272297],["remque",139871564272352,139871564272377],["non-virtual thunk to v8::internal::ScavengeJob::Task::~Task()",93957336195936,93957336195971],["v8::internal::DateParser::DayComposer::Write(double*)",93957336200208,93957336200524],["v8::internal::Coverage::Collect(v8::internal::Isolate*, v8::debug::CoverageMode)",93957336201504,93957336229026],["v8::base::TemplateHashMapImpl<v8::internal::SharedFunctionInfo, unsigned int, v8::base::KeyEqualityMatcher<v8::internal::Object>, v8::base::DefaultAllocationPolicy>::Resize()",93957336230368,93957336230756],["void std::__1::vector<v8::internal::ParserBase<v8::internal::PreParser>::DeclarationParsingResult::Declaration, std::__1::allocator<v8::internal::ParserBase<v8::internal::PreParser>::DeclarationParsingResult::Declaration> >::__push_back_slow_path<v8::internal::ParserBase<v8::internal::PreParser>::DeclarationParsingResult::Declaration const&>(v8::internal::ParserBase<v8::internal::PreParser>::DeclarationParsingResult::Declaration const&)",93957336231520,93957336231810],["v8::internal::(anonymous namespace)::CompareCoverageBlock(v8::internal::CoverageBlock const&, v8::internal::CoverageBlock const&)",93957336232432,93957336232461],["unsigned int std::__1::__sort4<bool (*&)(v8::internal::CoverageBlock const&, v8::internal::CoverageBlock const&), v8::internal::CoverageBlock*>(v8::internal::CoverageBlock*, v8::internal::CoverageBlock*, v8::internal::CoverageBlock*, v8::internal::CoverageBlock*, bool (*&)(v8::internal::CoverageBlock const&, v8::internal::CoverageBlock const&))",93957336234912,93957336235510],["bool std::__1::__insertion_sort_incomplete<bool (*&)(v8::internal::CoverageBlock const&, v8::internal::CoverageBlock const&), v8::internal::CoverageBlock*>(v8::internal::CoverageBlock*, v8::internal::CoverageBlock*, bool (*&)(v8::internal::CoverageBlock const&, v8::internal::CoverageBlock const&))",93957336236032,93957336237333],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)13> >::GetDetails(v8::internal::JSObject, v8::internal::InternalIndex)",93957338430400,93957338430432],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::SlowSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)14> >::IndexOfValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338439824,93957338440490],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)15> >::NumberOfElements(v8::internal::JSObject)",93957338442912,93957338443105],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)15> >::GrowCapacity(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338448752,93957338449186],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)15> >::GetEntryForIndex(v8::internal::Isolate*, v8::internal::JSObject, v8::internal::FixedArrayBase, unsigned long)",93957338449904,93957338450024],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)15> >::CopyElements(v8::internal::JSObject, unsigned int, v8::internal::ElementsKind, v8::internal::Handle<v8::internal::FixedArrayBase>, unsigned int, int)",93957338450528,93957338450763],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::SlowStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)16> >::HasElement(v8::internal::JSObject, unsigned int, v8::internal::FixedArrayBase, v8::internal::PropertyFilter)",93957338451712,93957338452097],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::SlowStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)16> >::CollectValuesOrEntries(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArray>, bool, int*, v8::internal::PropertyFilter)",93957338452464,93957338454855],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::SlowStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)16> >::GrowCapacity(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338456592,93957338456964],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::SlowStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)16> >::GetEntryForIndex(v8::internal::Isolate*, v8::internal::JSObject, v8::internal::FixedArrayBase, unsigned long)",93957338457184,93957338457493],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::SlowStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)16> >::Reconfigure(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::InternalIndex, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes)",93957338457584,93957338457641],["v8::internal::(anonymous namespace)::StringWrapperElementsAccessor<v8::internal::(anonymous namespace)::SlowStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::DictionaryElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)16> >::GetInternalImpl(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338457696,93957338458045],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)17, unsigned char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)17> >::Get(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338458096,93957338458201],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)17, unsigned char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)17> >::CollectElementIndices(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::KeyAccumulator*)",93957338458256,93957338458673],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)17, unsigned char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)17> >::PrependElementIndices(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::Handle<v8::internal::FixedArray>, v8::internal::GetKeysConversion, v8::internal::PropertyFilter)",93957338459328,93957338460591],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)17, unsigned char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)17> >::Set(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex, v8::internal::Object)",93957338460960,93957338461273],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::Operand>::emit<&v8::internal::Assembler::vmovups, &v8::internal::Assembler::movups>(v8::internal::XMMRegister, v8::internal::Operand)",93957342062512,93957342062566],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vrsqrtps, &v8::internal::Assembler::rsqrtps>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342063440,93957342063499],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vcmpeqps, &v8::internal::Assembler::cmpeqps>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342064048,93957342064132],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vpminsd, &v8::internal::Assembler::pminsd>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342064496,93957342064593],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vpaddd, &v8::internal::Assembler::paddd>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342064816,93957342064902],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vpmaxud, &v8::internal::Assembler::pmaxud>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342065024,93957342065121],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vpabsd, &v8::internal::Assembler::pabsd>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342065248,93957342065345],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vpsignw, &v8::internal::Assembler::psignw>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342065472,93957342065569],["getmntent",139871564269008,139871564269088],["utimes",139871564271600,139871564271634],["futimesat",139871564272080,139871564272136],["ftruncate",139871564272192,139871564272226],["v8::internal::OptimizingCompileDispatcher::Stop()",93957336194192,93957336194206],["v8::internal::DateCache::DaysFromYearMonth(int, int)",93957336197168,93957336197378],["v8::internal::DateCache::~DateCache()",93957336200096,93957336200147],["v8::internal::DateParser::TimeZoneComposer::Write(double*)",93957336200736,93957336200851],["v8::internal::Coverage::CollectPrecise(v8::internal::Isolate*)",93957336201408,93957336201492],["v8::internal::Coverage::CollectBestEffort(v8::internal::Isolate*)",93957336229040,93957336229052],["v8::base::TemplateHashMapEntry<v8::internal::SharedFunctionInfo, unsigned int> v8::base::TemplateHashMapImpl<v8::internal::SharedFunctionInfo, unsigned int, v8::base::KeyEqualityMatcher<v8::internal::Object>, v8::base::DefaultAllocationPolicy>::LookupOrInsert<v8::internal::SharedFunctionInfo, v8::base::TemplateHashMapImpl<v8::internal::SharedFunctionInfo, unsigned int, v8::base::KeyEqualityMatcher<v8::internal::Object>, v8::base::DefaultAllocationPolicy>::LookupOrInsert<v8::internal::SharedToCounterMap::Add(v8::internal::SharedFunctionInfo, unsigned int)::{lambda()#1}>(v8::internal::SharedFunctionInfo const&, unsigned int, v8::internal::SharedToCounterMap::Add(v8::internal::SharedFunctionInfo, unsigned int)::{lambda()#1} const&)::{lambda()#1}, {lambda()#1}>(v8::internal::SharedFunctionInfo const, unsigned int, v8::base::TemplateHashMapImpl<v8::internal::SharedFunctionInfo, unsigned int, v8::base::KeyEqualityMatcher<v8::internal::Object>, v8::base::DefaultAllocationPolicy>::LookupOrInsert<v8::internal::SharedToCounterMap::Add(v8::internal::SharedFunctionInfo, unsigned int)::{lambda()#1}>(v8::internal::SharedFunctionInfo const&, unsigned int, v8::internal::SharedToCounterMap::Add(v8::internal::SharedFunctionInfo, unsigned int)::{lambda()#1} const&)::{lambda()#1} const&, {lambda()#1} const&)",93957336230128,93957336230356],["v8::internal::(anonymous namespace)::CoverageBlockIterator::Next()",93957336230768,93957336231205],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)13> >::Get(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338423328,93957338423360],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)13> >::ConvertElementsWithCapacity(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::ElementsKind, unsigned int)",93957338432720,93957338432977],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::SlowSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)14> >::AddElementsToKeyAccumulator(v8::internal::Handle<v8::internal::JSObject>, v8::internal::KeyAccumulator*, v8::internal::AddKeyConversion)",93957338437920,93957338438352],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::SlowSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)14> >::Delete(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338440656,93957338440963],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)17, unsigned char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)17> >::HasEntry(v8::internal::JSObject, v8::internal::InternalIndex)",93957338442864,93957338442882],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)15> >::CollectElementIndices(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::KeyAccumulator*)",93957338444112,93957338444400],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)15> >::TransitionElementsKind(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Map>)",93957338448144,93957338448728],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)15> >::Add(v8::internal::Handle<v8::internal::JSObject>, unsigned int, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes, unsigned int)",93957338449376,93957338449489],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)15> >::CopyElements(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::ElementsKind, v8::internal::Handle<v8::internal::FixedArrayBase>, int)",93957338449728,93957338449891],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)15> >::GetDetails(v8::internal::JSObject, v8::internal::InternalIndex)",93957338450032,93957338450068],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)15> >::Delete(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338450480,93957338450528],["v8::internal::(anonymous namespace)::StringWrapperElementsAccessor<v8::internal::(anonymous namespace)::FastStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)15> >::GetInternalImpl(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338450768,93957338451099],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)15> >::ConvertElementsWithCapacity(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::ElementsKind, unsigned int)",93957338451440,93957338451697],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::SlowStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)16> >::Get(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338452112,93957338452128],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::SlowStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)16> >::CollectElementIndices(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::KeyAccumulator*)",93957338452176,93957338452464],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::SlowStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)16> >::PrependElementIndices(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::Handle<v8::internal::FixedArray>, v8::internal::GetKeysConversion, v8::internal::PropertyFilter)",93957338454864,93957338456273],["v8::internal::compiler::(anonymous namespace)::OutOfLineRecordWrite::Generate()",93957342061312,93957342061642],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vcvtps2pd, &v8::internal::Assembler::cvtps2pd>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342062832,93957342062891],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vsqrtps, &v8::internal::Assembler::sqrtps>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342063312,93957342063371],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::RoundingMode>::emit<&v8::internal::Assembler::vroundpd, &v8::internal::Assembler::roundpd>(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::RoundingMode)",93957342063616,93957342063725],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vpmovzxdq, &v8::internal::Assembler::pmovzxdq>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342063936,93957342064033],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, unsigned char>::emit<&v8::internal::Assembler::vpsrad, &v8::internal::Assembler::psrad>(v8::internal::XMMRegister, unsigned char)",93957342064144,93957342064266],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vpsignd, &v8::internal::Assembler::psignd>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342064384,93957342064481],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vcmpleps, &v8::internal::Assembler::cmpleps>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342064608,93957342064695],["getfsent",139871564268656,139871564268716],["__endmntent",139871564270048,139871564270086],["__getmntent_r",139871564271456,139871564271591],["lutimes",139871564271648,139871564271866],["std::__1::__tree<std::__1::__value_type<unsigned long, std::__1::unique_ptr<v8::internal::CompilerDispatcher::Job, std::__1::default_delete<v8::internal::CompilerDispatcher::Job> > >, std::__1::__map_value_compare<unsigned long, std::__1::__value_type<unsigned long, std::__1::unique_ptr<v8::internal::CompilerDispatcher::Job, std::__1::default_delete<v8::internal::CompilerDispatcher::Job> > >, std::__1::less<unsigned long>, true>, std::__1::allocator<std::__1::__value_type<unsigned long, std::__1::unique_ptr<v8::internal::CompilerDispatcher::Job, std::__1::default_delete<v8::internal::CompilerDispatcher::Job> > > > >::erase(std::__1::__tree_const_iterator<std::__1::__value_type<unsigned long, std::__1::unique_ptr<v8::internal::CompilerDispatcher::Job, std::__1::default_delete<v8::internal::CompilerDispatcher::Job> > >, std::__1::__tree_node<std::__1::__value_type<unsigned long, std::__1::unique_ptr<v8::internal::CompilerDispatcher::Job, std::__1::default_delete<v8::internal::CompilerDispatcher::Job> > >, void*>*, long>)",93957336192576,93957336192757],["v8::internal::CancelableTask::~CancelableTask()",93957336195184,93957336195194],["v8::internal::DateCache::TimeClip(double)",93957336196368,93957336196492],["v8::internal::DateCache::GetLocalOffsetFromOS(long, bool)",93957336197728,93957336197917],["v8::internal::DateCache::~DateCache()",93957336200032,93957336200087],["v8::internal::DateCache::GetDaylightSavingsOffsetFromOS(long)",93957336200160,93957336200195],["v8::internal::DateParser::TimeComposer::Write(double*)",93957336200528,93957336200723],["v8::internal::DateParser::KeywordTable::Lookup(unsigned int const*, int)",93957336200864,93957336200998],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::DictionaryElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)12> >::Add(v8::internal::Handle<v8::internal::JSObject>, unsigned int, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes, unsigned int)",93957338416784,93957338416805],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)13> >::Set(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex, v8::internal::Object)",93957338427328,93957338427727],["v8::internal::(anonymous namespace)::SloppyArgumentsElementsAccessor<v8::internal::(anonymous namespace)::FastSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)13> >::GetImpl(v8::internal::Isolate*, v8::internal::FixedArrayBase, v8::internal::InternalIndex)",93957338431168,93957338431427],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::SlowSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)14> >::HasElement(v8::internal::JSObject, unsigned int, v8::internal::FixedArrayBase, v8::internal::PropertyFilter)",93957338434672,93957338434711],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::SlowSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)14> >::CollectValuesOrEntries(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArray>, bool, int*, v8::internal::PropertyFilter)",93957338435248,93957338437173],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::SlowSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)14> >::Add(v8::internal::Handle<v8::internal::JSObject>, unsigned int, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes, unsigned int)",93957338438784,93957338439207],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::SlowSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)14> >::GetDetails(v8::internal::JSObject, v8::internal::InternalIndex)",93957338440528,93957338440610],["v8::internal::(anonymous namespace)::SloppyArgumentsElementsAccessor<v8::internal::(anonymous namespace)::SlowSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::DictionaryElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)14> >::GetImpl(v8::internal::Isolate*, v8::internal::FixedArrayBase, v8::internal::InternalIndex)",93957338441392,93957338441832],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)15> >::HasElement(v8::internal::JSObject, unsigned int, v8::internal::FixedArrayBase, v8::internal::PropertyFilter)",93957338442720,93957338442855],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)15> >::Get(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338442896,93957338442912],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)15> >::SetLength(v8::internal::Handle<v8::internal::JSArray>, unsigned int)",93957338443120,93957338444099],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)15> >::CollectValuesOrEntries(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArray>, bool, int*, v8::internal::PropertyFilter)",93957338444400,93957338446523],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)15> >::AddElementsToKeyAccumulator(v8::internal::Handle<v8::internal::JSObject>, v8::internal::KeyAccumulator*, v8::internal::AddKeyConversion)",93957338447840,93957338448136],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)15> >::GrowCapacityAndConvert(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338448736,93957338448751],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)15> >::Set(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex, v8::internal::Object)",93957338449200,93957338449370],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastStringWrapperElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)15> >::IncludesValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338449504,93957338449529],["v8::internal::compiler::InstructionOperandConverter::ToExternalReference(v8::internal::compiler::InstructionOperand*)",93957342059568,93957342059733],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vsqrtsd, &v8::internal::Assembler::sqrtsd>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342062112,93957342062198],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vaddpd, &v8::internal::Assembler::addpd>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342062656,93957342062742],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vmovshdup, &v8::internal::Assembler::movshdup>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342062976,93957342063007],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::Operand, unsigned char>::emit<&v8::internal::Assembler::vinsertps, &v8::internal::Assembler::insertps>(v8::internal::XMMRegister, v8::internal::Operand, unsigned char)",93957342063200,93957342063307],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vrcpps, &v8::internal::Assembler::rcpps>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342063376,93957342063435],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::RoundingMode>::emit<&v8::internal::Assembler::vroundps, &v8::internal::Assembler::roundps>(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::RoundingMode)",93957342063504,93957342063613],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vpsubq, &v8::internal::Assembler::psubq>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342063728,93957342063814],["gtty",139871564267840,139871564267868],["getfsfile",139871564268816,139871564268916],["__setmntent",139871564269904,139871564270034],["addmntent",139871564270096,139871564271325],["v8::internal::CompilerDispatcher::AbortJob(unsigned long)",93957336189152,93957336189457],["v8::internal::(anonymous namespace)::DisposeCompilationJob(v8::internal::OptimizedCompilationJob*, bool)",93957336193264,93957336193624],["v8::internal::OptimizingCompileDispatcher::QueueForOptimization(v8::internal::OptimizedCompilationJob*)",93957336194736,93957336194975],["v8::internal::OptimizingCompileDispatcher::CompileTask::RunInternal()",93957336195232,93957336195913],["v8::internal::DateCache::DateCache()",93957336195984,93957336196356],["v8::internal::DateCache::YearMonthDayFromDays(int, int*, int*, int*)",93957336196496,93957336197161],["v8::internal::DateCache::BreakDownTime(long, int*, int*, int*, int*, int*, int*, int*, int*)",93957336197392,93957336197719],["v8::internal::DateCache::DaylightSavingsOffsetInMs(long)",93957336197920,93957336199595],["v8::internal::(anonymous namespace)::FastSmiOrObjectElementsAccessor<v8::internal::(anonymous namespace)::FastHoleyFrozenObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)11> >::CopyElementsImpl(v8::internal::Isolate*, v8::internal::FixedArrayBase, unsigned int, v8::internal::FixedArrayBase, v8::internal::ElementsKind, unsigned int, int, int)",93957338411040,93957338411280],["v8::internal::(anonymous namespace)::DictionaryElementsAccessor::CollectElementIndicesImpl(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::KeyAccumulator*)",93957338420288,93957338421027],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)13> >::PrependElementIndices(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::Handle<v8::internal::FixedArray>, v8::internal::GetKeysConversion, v8::internal::PropertyFilter)",93957338425712,93957338426469],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)13> >::IncludesValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338428384,93957338429206],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)13> >::Delete(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338430592,93957338430918],["v8::internal::(anonymous namespace)::SloppyArgumentsElementsAccessor<v8::internal::(anonymous namespace)::FastSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)13> >::DirectCollectElementIndicesImpl(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::GetKeysConversion, v8::internal::PropertyFilter, v8::internal::Handle<v8::internal::FixedArray>, unsigned int*, unsigned int)",93957338431776,93957338432334],["v8::internal::(anonymous namespace)::SlowSloppyArgumentsElementsAccessor::ReconfigureImpl(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::InternalIndex, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes)",93957338433504,93957338434393],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::SlowSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)14> >::Get(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338434832,93957338434864],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::SlowSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)14> >::CollectElementIndices(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::KeyAccumulator*)",93957338435216,93957338435245],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::SlowSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)14> >::PrependElementIndices(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::Handle<v8::internal::FixedArray>, v8::internal::GetKeysConversion, v8::internal::PropertyFilter)",93957338437184,93957338437909],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::SlowSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)14> >::Set(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex, v8::internal::Object)",93957338438352,93957338438776],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::SlowSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)14> >::IncludesValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338439216,93957338439815],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::SlowSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)14> >::GetEntryForIndex(v8::internal::Isolate*, v8::internal::JSObject, v8::internal::FixedArrayBase, unsigned long)",93957338440496,93957338440517],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::SlowSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)14> >::Reconfigure(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::InternalIndex, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes)",93957338440624,93957338440649],["v8::internal::(anonymous namespace)::SloppyArgumentsElementsAccessor<v8::internal::(anonymous namespace)::SlowSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::DictionaryElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)14> >::GetEntryForIndexImpl(v8::internal::Isolate*, v8::internal::JSObject, v8::internal::FixedArrayBase, unsigned long, v8::internal::PropertyFilter)",93957338440976,93957338441390],["v8::internal::(anonymous namespace)::SloppyArgumentsElementsAccessor<v8::internal::(anonymous namespace)::SlowSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::DictionaryElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)14> >::CollectElementIndicesImpl(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::KeyAccumulator*)",93957338441840,93957338442166],["v8::internal::compiler::CodeGenerator::FinishCode()",93957342053696,93957342053713],["v8::internal::compiler::(anonymous namespace)::WasmOutOfLineTrap::Generate()",93957342060000,93957342060176],["v8::internal::compiler::(anonymous namespace)::OutOfLineLoadFloat32NaN::Generate()",93957342061760,93957342061917],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::RoundingMode>::emit<&v8::internal::Assembler::vroundsd, &v8::internal::Assembler::roundsd>(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::RoundingMode)",93957342062304,93957342062413],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vsqrtpd, &v8::internal::Assembler::sqrtpd>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342062576,93957342062641],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vcvtdq2pd, &v8::internal::Assembler::cvtdq2pd>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342062752,93957342062821],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vcvtpd2ps, &v8::internal::Assembler::cvtpd2ps>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342062896,93957342062961],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vmovhlps, &v8::internal::Assembler::movhlps>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342063008,93957342063085],["mkstemps",139871564267520,139871564267556],["ptrace",139871564267904,139871564268090],["getfsspec",139871564268720,139871564268812],["endfsent",139871564268928,139871564268969],["v8::internal::CompilerDispatcher::~CompilerDispatcher()",93957336185456,93957336185819],["std::__1::__tree<std::__1::__value_type<unsigned long, std::__1::unique_ptr<v8::internal::CompilerDispatcher::Job, std::__1::default_delete<v8::internal::CompilerDispatcher::Job> > >, std::__1::__map_value_compare<unsigned long, std::__1::__value_type<unsigned long, std::__1::unique_ptr<v8::internal::CompilerDispatcher::Job, std::__1::default_delete<v8::internal::CompilerDispatcher::Job> > >, std::__1::less<unsigned long>, true>, std::__1::allocator<std::__1::__value_type<unsigned long, std::__1::unique_ptr<v8::internal::CompilerDispatcher::Job, std::__1::default_delete<v8::internal::CompilerDispatcher::Job> > > > >::destroy(std::__1::__tree_node<std::__1::__value_type<unsigned long, std::__1::unique_ptr<v8::internal::CompilerDispatcher::Job, std::__1::default_delete<v8::internal::CompilerDispatcher::Job> > >, void*>*)",93957336191536,93957336191652],["v8::internal::OptimizingCompileDispatcher::CompileNext(v8::internal::OptimizedCompilationJob*, v8::internal::RuntimeCallStats*, v8::internal::LocalIsolate*)",93957336192864,93957336193059],["v8::internal::OptimizingCompileDispatcher::Unblock()",93957336193872,93957336194099],["v8::internal::OptimizingCompileDispatcher::InstallOptimizedFunctions()",93957336194208,93957336194722],["std::__1::__deque_base<unsigned long, std::__1::allocator<unsigned long> >::~__deque_base()",93957336194976,93957336195183],["v8::internal::ScavengeJob::Task::~Task()",93957336195200,93957336195228],["non-virtual thunk to v8::internal::ScavengeJob::Task::~Task()",93957336195920,93957336195934],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)17, unsigned char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)17> >::Normalize(v8::internal::Handle<v8::internal::JSObject>)",93957338406704,93957338406820],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::DictionaryElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)12> >::CollectElementIndices(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::KeyAccumulator*)",93957338412624,93957338412653],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::DictionaryElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)12> >::GetDetails(v8::internal::JSObject, v8::internal::InternalIndex)",93957338420112,93957338420171],["v8::internal::(anonymous namespace)::IncludesValueSlowPath(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338422448,93957338422800],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)13> >::CollectElementIndices(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::KeyAccumulator*)",93957338423728,93957338423757],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)13> >::GrowCapacityAndConvert(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338426864,93957338426879],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)13> >::Normalize(v8::internal::Handle<v8::internal::JSObject>)",93957338428128,93957338428327],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)13> >::CopyElements(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::ElementsKind, v8::internal::Handle<v8::internal::FixedArrayBase>, int)",93957338430080,93957338430243],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)13> >::Reconfigure(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::InternalIndex, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes)",93957338430432,93957338430591],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)13> >::CopyElements(v8::internal::JSObject, unsigned int, v8::internal::ElementsKind, v8::internal::Handle<v8::internal::FixedArrayBase>, unsigned int, int)",93957338430928,93957338431163],["v8::internal::(anonymous namespace)::SloppyArgumentsElementsAccessor<v8::internal::(anonymous namespace)::FastSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)13> >::CollectElementIndicesImpl(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::KeyAccumulator*)",93957338431440,93957338431766],["v8::internal::(anonymous namespace)::FastSloppyArgumentsElementsAccessor::GrowCapacityAndConvertImpl(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338432336,93957338432717],["v8::internal::(anonymous namespace)::FastSloppyArgumentsElementsAccessor::NormalizeArgumentsElements(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::SloppyArgumentsElements>, v8::internal::InternalIndex*)",93957338432992,93957338433504],["v8::internal::(anonymous namespace)::SlowSloppyArgumentsElementsAccessor::SloppyDeleteImpl(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::SloppyArgumentsElements>, v8::internal::InternalIndex)",93957338434400,93957338434662],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::SlowSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)14> >::HasEntry(v8::internal::JSObject, v8::internal::InternalIndex)",93957338434720,93957338434822],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::SlowSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)14> >::HasAccessors(v8::internal::JSObject)",93957338434864,93957338435022],["void v8::internal::TurboAssembler::Ptest<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342049696,93957342049790],["v8::internal::compiler::CodeGenerator::AssembleSwap(v8::internal::compiler::InstructionOperand*, v8::internal::compiler::InstructionOperand*)",93957342056832,93957342059152],["v8::internal::compiler::(anonymous namespace)::WasmOutOfLineTrap::~WasmOutOfLineTrap()",93957342059904,93957342059927],["std::__1::__deque_base<v8::internal::compiler::DeoptimizationLiteral, v8::internal::RecyclingZoneAllocator<v8::internal::compiler::DeoptimizationLiteral> >::~__deque_base()",93957342060528,93957342060853],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::RoundingMode>::emit<&v8::internal::Assembler::vroundss, &v8::internal::Assembler::roundss>(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::RoundingMode)",93957342061648,93957342061757],["v8::internal::compiler::(anonymous namespace)::OutOfLineLoadFloat64NaN::Generate()",93957342061920,93957342062103],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::Operand>::emit<&v8::internal::Assembler::vsqrtsd, &v8::internal::Assembler::sqrtsd>(v8::internal::XMMRegister, v8::internal::Operand)",93957342062208,93957342062298],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::XMMRegister>::emit<&v8::internal::Assembler::vsubsd, &v8::internal::Assembler::subsd>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342062416,93957342062502],["__mktemp",139871564267408,139871564267442],["ualarm",139871564267616,139871564267740],["stty",139871564267872,139871564267900],["setfsent",139871564268512,139871564268652],["v8::internal::PerIsolateAssertScope<(v8::internal::PerIsolateAssertType)1, false>::Close(v8::internal::Isolate*, bool)",93957336184864,93957336184888],["v8::internal::CompilerDispatcher::IsEnqueued(v8::internal::Handle<v8::internal::SharedFunctionInfo>) const",93957336187296,93957336187419],["v8::internal::CompilerDispatcher::DoBackgroundWork()",93957336189744,93957336190628],["void std::__1::__function::__policy_invoker<void (double)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::CompilerDispatcher::ScheduleIdleTaskFromAnyThread(v8::base::LockGuard<v8::base::Mutex, (v8::base::NullBehavior)0> const&)::$_0, void (double)> >(std::__1::__function::__policy_storage const*, double)",93957336192544,93957336192557],["v8::internal::OptimizingCompileDispatcher::~OptimizingCompileDispatcher()",93957336192768,93957336192851],["v8::internal::OptimizingCompileDispatcher::FlushOutputQueue(bool)",93957336193072,93957336193251],["v8::internal::OptimizingCompileDispatcher::FlushQueues(v8::internal::BlockingBehavior, bool)",93957336193632,93957336193863],["v8::internal::OptimizingCompileDispatcher::Flush(v8::internal::BlockingBehavior)",93957336194112,93957336194189],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedSealedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)8> >::GrowCapacityAndConvert(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338401568,93957338401583],["v8::internal::(anonymous namespace)::FastSmiOrObjectElementsAccessor<v8::internal::(anonymous namespace)::FastPackedFrozenObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)10> >::CopyElementsImpl(v8::internal::Isolate*, v8::internal::FixedArrayBase, unsigned int, v8::internal::FixedArrayBase, v8::internal::ElementsKind, unsigned int, int, int)",93957338408960,93957338409200],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::DictionaryElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)12> >::Get(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338412160,93957338412289],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)17, unsigned char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)17> >::TransitionElementsKind(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Map>)",93957338415664,93957338416172],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::DictionaryElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)12> >::IndexOfValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338418576,93957338419820],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::DictionaryElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)12> >::Delete(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338420208,93957338420224],["v8::internal::(anonymous namespace)::DictionaryElementsAccessor::AddElementsToKeyAccumulatorImpl(v8::internal::Handle<v8::internal::JSObject>, v8::internal::KeyAccumulator*, v8::internal::AddKeyConversion)",93957338421696,93957338422004],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)13> >::HasElement(v8::internal::JSObject, unsigned int, v8::internal::FixedArrayBase, v8::internal::PropertyFilter)",93957338423056,93957338423224],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)13> >::NumberOfElements(v8::internal::JSObject)",93957338423360,93957338423716],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)13> >::CollectValuesOrEntries(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArray>, bool, int*, v8::internal::PropertyFilter)",93957338423760,93957338425697],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)13> >::AddElementsToKeyAccumulator(v8::internal::Handle<v8::internal::JSObject>, v8::internal::KeyAccumulator*, v8::internal::AddKeyConversion)",93957338426480,93957338426863],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)13> >::GrowCapacity(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338426880,93957338427314],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)13> >::Add(v8::internal::Handle<v8::internal::JSObject>, unsigned int, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes, unsigned int)",93957338427728,93957338428125],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)13> >::GetCapacity(v8::internal::JSObject, v8::internal::FixedArrayBase)",93957338428336,93957338428371],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)13> >::IndexOfValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338429216,93957338430072],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)13> >::GetEntryForIndex(v8::internal::Isolate*, v8::internal::JSObject, v8::internal::FixedArrayBase, unsigned long)",93957338430256,93957338430399],["void v8::internal::TurboAssembler::Psraw<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342048848,93957342048931],["v8::internal::compiler::CodeGenerator::AssembleArchTrap(v8::internal::compiler::Instruction*, v8::internal::compiler::FlagsCondition)",93957342050576,93957342050938],["v8::internal::compiler::CodeGenerator::AssembleMove(v8::internal::compiler::InstructionOperand*, v8::internal::compiler::InstructionOperand*)",93957342053952,93957342056313],["v8::internal::compiler::CodeGenerator::~CodeGenerator()",93957342059232,93957342059534],["v8::internal::compiler::InstructionOperandConverter::ToRpoNumber(v8::internal::compiler::InstructionOperand*)",93957342059744,93957342059899],["v8::internal::compiler::(anonymous namespace)::WasmProtectedInstructionTrap::Generate()",93957342059936,93957342059986],["v8::internal::compiler::(anonymous namespace)::WasmOutOfLineTrap::GenerateWithTrapId(v8::internal::compiler::TrapId)",93957342060176,93957342060524],["v8::internal::compiler::(anonymous namespace)::OutOfLineTruncateDoubleToI::Generate()",93957342060864,93957342061300],["revoke",139871564267232,139871564267252],["mkdtemp",139871564267472,139871564267503],["mkostemps",139871564267568,139871564267604],["usleep",139871564267744,139871564267839],["v8::internal::PerIsolateAssertScope<(v8::internal::PerIsolateAssertType)0, false>::~PerIsolateAssertScope()",93957336184640,93957336184658],["v8::internal::PerIsolateAssertScope<(v8::internal::PerIsolateAssertType)2, false>::Close(v8::internal::Isolate*, bool)",93957336184992,93957336185016],["v8::internal::CompilerDispatcher::InsertJob(std::__1::unique_ptr<v8::internal::CompilerDispatcher::Job, std::__1::default_delete<v8::internal::CompilerDispatcher::Job> >)",93957336186528,93957336186798],["v8::internal::CompilerDispatcher::WaitForJobIfRunningOnBackground(v8::internal::CompilerDispatcher::Job*)",93957336187824,93957336188453],["v8::internal::CompilerDispatcher::AbortAll()",93957336189472,93957336189729],["v8::internal::CompilerDispatcher::DoIdleWork(double)",93957336190640,93957336191533],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<v8::internal::Zone const*, void*>*>, bool> std::__1::__hash_table<v8::internal::Zone const*, std::__1::hash<v8::internal::Zone const*>, std::__1::equal_to<v8::internal::Zone const*>, std::__1::allocator<v8::internal::Zone const*> >::__emplace_unique_key_args<v8::internal::Zone const*, v8::internal::Zone const* const&>(v8::internal::Zone const* const&, v8::internal::Zone const* const&)",93957336191664,93957336192532],["void std::__1::__function::__policy_invoker<void ()>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::CompilerDispatcher::ScheduleMoreWorkerTasksIfNeeded()::$_1, void ()> >(std::__1::__function::__policy_storage const*)",93957336192560,93957336192573],["v8::internal::(anonymous namespace)::FastNonextensibleObjectElementsAccessor<v8::internal::(anonymous namespace)::FastHoleyNonextensibleObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)7> >::SetLengthImpl(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSArray>, unsigned int, v8::internal::Handle<v8::internal::FixedArrayBase>)",93957338394480,93957338395246],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySealedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)9> >::TransitionElementsKind(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Map>)",93957338404384,93957338405064],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyFrozenObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)11> >::Unshift(v8::internal::Handle<v8::internal::JSArray>, v8::internal::BuiltinArguments*, unsigned int)",93957338407968,93957338408683],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyFrozenObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)11> >::GrowCapacity(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338410336,93957338410767],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::DictionaryElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)12> >::HasElement(v8::internal::JSObject, unsigned int, v8::internal::FixedArrayBase, v8::internal::PropertyFilter)",93957338411712,93957338412075],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::DictionaryElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)12> >::NumberOfElements(v8::internal::JSObject)",93957338412464,93957338412492],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::DictionaryElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)12> >::PrependElementIndices(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::Handle<v8::internal::FixedArray>, v8::internal::GetKeysConversion, v8::internal::PropertyFilter)",93957338414912,93957338415621],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)17, unsigned char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)17> >::GrowCapacity(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338416384,93957338416584],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::DictionaryElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)12> >::IncludesValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338416816,93957338418561],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::DictionaryElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)12> >::GetEntryForIndex(v8::internal::Isolate*, v8::internal::JSObject, v8::internal::FixedArrayBase, unsigned long)",93957338419824,93957338420106],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::DictionaryElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)12> >::Reconfigure(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::InternalIndex, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes)",93957338420176,93957338420201],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)17, unsigned char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)17> >::CopyElements(v8::internal::JSObject, unsigned int, v8::internal::ElementsKind, v8::internal::Handle<v8::internal::FixedArrayBase>, unsigned int, int)",93957338420224,93957338420284],["v8::internal::(anonymous namespace)::DictionaryElementsAccessor::DirectCollectElementIndicesImpl(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::GetKeysConversion, v8::internal::PropertyFilter, v8::internal::Handle<v8::internal::FixedArray>, unsigned int*, unsigned int)",93957338421040,93957338421693],["v8::internal::(anonymous namespace)::DictionaryElementsAccessor::AddImpl(v8::internal::Handle<v8::internal::JSObject>, unsigned int, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes, unsigned int)",93957338422016,93957338422439],["v8::internal::(anonymous namespace)::DictionaryElementsAccessor::DeleteImpl(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338422800,93957338423052],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastSloppyArgumentsElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)13> >::HasEntry(v8::internal::JSObject, v8::internal::InternalIndex)",93957338423232,93957338423314],["void v8::internal::TurboAssembler::Pextrb<v8::internal::Register, v8::internal::XMMRegister, unsigned char>(v8::internal::Register, v8::internal::XMMRegister, unsigned char)",93957342047904,93957342048031],["void v8::internal::TurboAssembler::Pshufd<v8::internal::XMMRegister, v8::internal::Operand, unsigned char>(v8::internal::XMMRegister, v8::internal::Operand, unsigned char)",93957342049264,93957342049371],["v8::internal::compiler::CodeGenerator::AssembleBranchPoisoning(v8::internal::compiler::FlagsCondition, v8::internal::compiler::Instruction*)",93957342050016,93957342050137],["v8::internal::compiler::CodeGenerator::FinishFrame(v8::internal::compiler::Frame*)",93957342051392,93957342051698],["v8::internal::compiler::CodeGenerator::IncrementStackAccessCounter(v8::internal::compiler::InstructionOperand*, v8::internal::compiler::InstructionOperand*)",93957342053728,93957342053942],["v8::internal::compiler::CodeGenerator::AssembleMove(v8::internal::compiler::InstructionOperand*, v8::internal::compiler::InstructionOperand*)::$_1::operator()(v8::internal::Register, v8::internal::compiler::Constant) const",93957342056320,93957342056822],["v8::internal::compiler::CodeGenerator::AssembleJumpTable(v8::internal::Label**, unsigned long)",93957342059152,93957342059230],["v8::internal::compiler::CodeGenerator::~CodeGenerator()",93957342059536,93957342059564],["syncfs",139871564266448,139871564266481],["swapon",139871564267312,139871564267345],["mkstemp",139871564267456,139871564267467],["mkostemp",139871564267504,139871564267515],["v8::internal::TurboAssemblerBase::RootRegisterOffsetForRootIndex(v8::internal::RootIndex)",93957336183248,93957336183261],["v8::internal::PerIsolateAssertScope<(v8::internal::PerIsolateAssertType)0, true>::IsAllowed(v8::internal::Isolate*)",93957336184768,93957336184782],["v8::internal::PerIsolateAssertScope<(v8::internal::PerIsolateAssertType)2, false>::IsAllowed(v8::internal::Isolate*)",93957336184928,93957336184945],["v8::internal::CompilerDispatcher::CompilerDispatcher(v8::internal::Isolate*, v8::Platform*, unsigned long)",93957336185056,93957336185430],["v8::internal::CompilerDispatcher::Enqueue(v8::internal::ParseInfo const*, v8::internal::AstRawString const*, v8::internal::FunctionLiteral const*)",93957336185824,93957336186517],["v8::internal::CompilerDispatcher::ScheduleMoreWorkerTasksIfNeeded()",93957336186800,93957336187295],["v8::internal::CompilerDispatcher::RegisterSharedFunctionInfo(unsigned long, v8::internal::SharedFunctionInfo)",93957336187424,93957336187820],["v8::internal::CompilerDispatcher::FinishNow(v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957336188464,93957336189147],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::SetLengthImpl(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSArray>, unsigned int, v8::internal::Handle<v8::internal::FixedArrayBase>)",93957338387984,93957338388867],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyFrozenObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)11> >::Normalize(v8::internal::Handle<v8::internal::JSObject>)",93957338398416,93957338398843],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedSealedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)8> >::CopyElements(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::ElementsKind, v8::internal::Handle<v8::internal::FixedArrayBase>, int)",93957338403584,93957338403626],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySealedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)9> >::CopyElements(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::ElementsKind, v8::internal::Handle<v8::internal::FixedArrayBase>, int)",93957338405904,93957338405946],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedFrozenObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)10> >::GrowCapacityAndConvert(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338407520,93957338407535],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedFrozenObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)10> >::CopyElements(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::ElementsKind, v8::internal::Handle<v8::internal::FixedArrayBase>, int)",93957338408832,93957338408874],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyFrozenObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)11> >::TransitionElementsKind(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Map>)",93957338409632,93957338410312],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyFrozenObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)11> >::CopyElements(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::ElementsKind, v8::internal::Handle<v8::internal::FixedArrayBase>, int)",93957338410912,93957338410954],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyFrozenObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)11> >::GrowCapacityAndConvertImpl(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338411280,93957338411702],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::DictionaryElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)12> >::HasEntry(v8::internal::JSObject, v8::internal::InternalIndex)",93957338412080,93957338412147],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::DictionaryElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)12> >::HasAccessors(v8::internal::JSObject)",93957338412304,93957338412462],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::DictionaryElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)12> >::SetLength(v8::internal::Handle<v8::internal::JSArray>, unsigned int)",93957338412496,93957338412624],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::DictionaryElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)12> >::CollectValuesOrEntries(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArray>, bool, int*, v8::internal::PropertyFilter)",93957338412656,93957338414902],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::DictionaryElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)12> >::AddElementsToKeyAccumulator(v8::internal::Handle<v8::internal::JSObject>, v8::internal::KeyAccumulator*, v8::internal::AddKeyConversion)",93957338415632,93957338415650],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)17, unsigned char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)17> >::GrowCapacityAndConvert(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338416176,93957338416380],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::DictionaryElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)12> >::Set(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex, v8::internal::Object)",93957338416592,93957338416771],["void v8::internal::TurboAssembler::Cvttps2dq<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342047088,93957342047154],["void v8::internal::TurboAssembler::Packuswb<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342048432,93957342048515],["void v8::internal::TurboAssembler::Psrlw<v8::internal::XMMRegister, unsigned char>(v8::internal::XMMRegister, unsigned char)",93957342049040,93957342049162],["void v8::internal::TurboAssembler::Pshufhw<v8::internal::XMMRegister, v8::internal::XMMRegister, unsigned char>(v8::internal::XMMRegister, v8::internal::XMMRegister, unsigned char)",93957342049488,93957342049594],["v8::internal::compiler::CodeGenerator::AssembleArchBranch(v8::internal::compiler::Instruction*, v8::internal::compiler::BranchInfo*)",93957342049792,93957342050001],["v8::internal::compiler::CodeGenerator::AssembleArchDeoptBranch(v8::internal::compiler::Instruction*, v8::internal::compiler::BranchInfo*)",93957342050144,93957342050563],["v8::internal::compiler::CodeGenerator::AssembleArchBoolean(v8::internal::compiler::Instruction*, v8::internal::compiler::FlagsCondition)",93957342050944,93957342051379],["v8::internal::compiler::CodeGenerator::AssembleConstructFrame()",93957342051712,93957342053689],["chroot",139871564266064,139871564266097],["gethostid",139871564266560,139871564267017],["vhangup",139871564267264,139871564267297],["swapoff",139871564267360,139871564267393],["v8::internal::TickCounter::AttachLocalHeap(v8::internal::LocalHeap*)",93957336182432,93957336182442],["v8::internal::UnoptimizedCompilationInfo::scope() const",93957336184512,93957336184526],["v8::internal::PerIsolateAssertScope<(v8::internal::PerIsolateAssertType)0, false>::Close(v8::internal::Isolate*, bool)",93957336184704,93957336184727],["v8::internal::PerIsolateAssertScope<(v8::internal::PerIsolateAssertType)1, false>::IsAllowed(v8::internal::Isolate*)",93957336184816,93957336184832],["v8::internal::PerIsolateAssertScope<(v8::internal::PerIsolateAssertType)1, true>::Open(v8::internal::Isolate*, bool*)",93957336184896,93957336184926],["v8::internal::PerIsolateAssertScope<(v8::internal::PerIsolateAssertType)2, false>::Open(v8::internal::Isolate*, bool*)",93957336184960,93957336184991],["v8::internal::PerIsolateAssertScope<(v8::internal::PerIsolateAssertType)2, true>::Open(v8::internal::Isolate*, bool*)",93957336185024,93957336185055],["v8::internal::CompilerDispatcher::IsEnabled() const",93957336185440,93957336185455],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::NumberOfElements(v8::internal::JSObject)",93957338382336,93957338382515],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyNonextensibleObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)7> >::Unshift(v8::internal::Handle<v8::internal::JSArray>, v8::internal::BuiltinArguments*, unsigned int)",93957338391888,93957338392796],["v8::internal::(anonymous namespace)::FastElementsAccessor<v8::internal::(anonymous namespace)::FastHoleyNonextensibleObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)7> >::RemoveElement(v8::internal::Handle<v8::internal::JSArray>, v8::internal::(anonymous namespace)::Where)",93957338396960,93957338397270],["v8::internal::(anonymous namespace)::FastSmiOrObjectElementsAccessor<v8::internal::(anonymous namespace)::FastHoleyNonextensibleObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)7> >::CopyElementsImpl(v8::internal::Isolate*, v8::internal::FixedArrayBase, unsigned int, v8::internal::FixedArrayBase, v8::internal::ElementsKind, unsigned int, int, int)",93957338399360,93957338399600],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySealedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)9> >::Unshift(v8::internal::Handle<v8::internal::JSArray>, v8::internal::BuiltinArguments*, unsigned int)",93957338402016,93957338403194],["v8::internal::(anonymous namespace)::FastSmiOrObjectElementsAccessor<v8::internal::(anonymous namespace)::FastPackedSealedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)8> >::CopyElementsImpl(v8::internal::Isolate*, v8::internal::FixedArrayBase, unsigned int, v8::internal::FixedArrayBase, v8::internal::ElementsKind, unsigned int, int, int)",93957338403712,93957338403952],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySealedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)9> >::GrowCapacity(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338405088,93957338405519],["v8::internal::(anonymous namespace)::FastSmiOrObjectElementsAccessor<v8::internal::(anonymous namespace)::FastHoleySealedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)9> >::CopyElementsImpl(v8::internal::Isolate*, v8::internal::FixedArrayBase, unsigned int, v8::internal::FixedArrayBase, v8::internal::ElementsKind, unsigned int, int, int)",93957338406032,93957338406272],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedFrozenObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)10> >::TransitionElementsKind(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Map>)",93957338406832,93957338407512],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedFrozenObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)10> >::GrowCapacity(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338407536,93957338407967],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedFrozenObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)10> >::Fill(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338408688,93957338408825],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedFrozenObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)10> >::CopyElements(v8::internal::JSObject, unsigned int, v8::internal::ElementsKind, v8::internal::Handle<v8::internal::FixedArrayBase>, unsigned int, int)",93957338408880,93957338408954],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedFrozenObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)10> >::GrowCapacityAndConvertImpl(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338409200,93957338409622],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyFrozenObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)11> >::GrowCapacityAndConvert(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338410320,93957338410335],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyFrozenObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)11> >::Fill(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338410768,93957338410905],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyFrozenObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)11> >::CopyElements(v8::internal::JSObject, unsigned int, v8::internal::ElementsKind, v8::internal::Handle<v8::internal::FixedArrayBase>, unsigned int, int)",93957338410960,93957338411034],["void v8::internal::TurboAssembler::Subps<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342046352,93957342046408],["void v8::internal::TurboAssembler::Pcmpeqw<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342047584,93957342047667],["void v8::internal::TurboAssembler::Psllw<v8::internal::XMMRegister, unsigned char>(v8::internal::XMMRegister, unsigned char)",93957342048208,93957342048330],["void v8::internal::TurboAssembler::Punpcklbw<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342048624,93957342048707],["void v8::internal::TurboAssembler::Pcmpeqb<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342048944,93957342049027],["void v8::internal::TurboAssembler::Por<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342049168,93957342049251],["void v8::internal::TurboAssembler::Pshuflw<v8::internal::XMMRegister, v8::internal::Operand, unsigned char>(v8::internal::XMMRegister, v8::internal::Operand, unsigned char)",93957342049376,93957342049483],["void v8::internal::TurboAssembler::Packusdw<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342049600,93957342049694],["setdomainname",139871564265504,139871564265537],["sync",139871564266256,139871564266289],["reboot",139871564266496,139871564266546],["sethostid",139871564267024,139871564267226],["v8::internal::SourcePosition::InliningStack(v8::internal::Handle<v8::internal::Code>) const",93957336180032,93957336180657],["v8::internal::TurboAssemblerBase::IndirectLoadExternalReference(v8::internal::Register, v8::internal::ExternalReference)",93957336182912,93957336183092],["v8_inspector::InjectedScript::Scope::~Scope()",93957336184048,93957336184054],["v8::internal::UnoptimizedCompilationInfo::SourcePositionRecordingMode() const",93957336184560,93957336184596],["v8::internal::PerIsolateAssertScope<(v8::internal::PerIsolateAssertType)0, false>::Open(v8::internal::Isolate*, bool*)",93957336184672,93957336184700],["v8::internal::PerIsolateAssertScope<(v8::internal::PerIsolateAssertType)0, true>::PerIsolateAssertScope(v8::internal::Isolate*)",93957336184736,93957336184763],["v8::internal::PerIsolateAssertScope<(v8::internal::PerIsolateAssertType)0, true>::Open(v8::internal::Isolate*, bool*)",93957336184784,93957336184812],["v8::internal::PerIsolateAssertScope<(v8::internal::PerIsolateAssertType)1, false>::Open(v8::internal::Isolate*, bool*)",93957336184832,93957336184862],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::CreateListFromArrayLike(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338375232,93957338375757],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::Push(v8::internal::Handle<v8::internal::JSArray>, v8::internal::BuiltinArguments*, unsigned int)",93957338386176,93957338386322],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyNonextensibleObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)7> >::SetLength(v8::internal::Handle<v8::internal::JSArray>, unsigned int)",93957338390624,93957338390746],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedNonextensibleObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)6> >::Fill(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338393232,93957338393603],["v8::internal::(anonymous namespace)::FastSmiOrObjectElementsAccessor<v8::internal::(anonymous namespace)::FastPackedNonextensibleObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)6> >::CopyElementsImpl(v8::internal::Isolate*, v8::internal::FixedArrayBase, unsigned int, v8::internal::FixedArrayBase, v8::internal::ElementsKind, unsigned int, int, int)",93957338396272,93957338396512],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyNonextensibleObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)7> >::GrowCapacityAndConvert(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338397968,93957338397983],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyNonextensibleObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)7> >::CopyElements(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::ElementsKind, v8::internal::Handle<v8::internal::FixedArrayBase>, int)",93957338399232,93957338399274],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySealedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)9> >::SetLength(v8::internal::Handle<v8::internal::JSArray>, unsigned int)",93957338400032,93957338400871],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedSealedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)8> >::GrowCapacity(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338401584,93957338402015],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedSealedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)8> >::Fill(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338403200,93957338403571],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedSealedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)8> >::CopyElements(v8::internal::JSObject, unsigned int, v8::internal::ElementsKind, v8::internal::Handle<v8::internal::FixedArrayBase>, unsigned int, int)",93957338403632,93957338403706],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedSealedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)8> >::GrowCapacityAndConvertImpl(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338403952,93957338404374],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySealedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)9> >::GrowCapacityAndConvert(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338405072,93957338405087],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySealedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)9> >::Fill(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338405520,93957338405891],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySealedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)9> >::CopyElements(v8::internal::JSObject, unsigned int, v8::internal::ElementsKind, v8::internal::Handle<v8::internal::FixedArrayBase>, unsigned int, int)",93957338405952,93957338406026],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySealedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)9> >::GrowCapacityAndConvertImpl(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338406272,93957338406694],["void v8::internal::TurboAssembler::Pblendw<v8::internal::XMMRegister, v8::internal::XMMRegister, unsigned char>(v8::internal::XMMRegister, v8::internal::XMMRegister, unsigned char)",93957342045728,93957342045834],["void v8::internal::TurboAssembler::Pmuludq<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342046704,93957342046787],["void v8::internal::TurboAssembler::Pextrw<v8::internal::Register, v8::internal::XMMRegister, unsigned char>(v8::internal::Register, v8::internal::XMMRegister, unsigned char)",93957342047280,93957342047407],["void v8::internal::TurboAssembler::Pmovmskb<v8::internal::Register, v8::internal::XMMRegister>(v8::internal::Register, v8::internal::XMMRegister)",93957342047776,93957342047804],["v8::internal::compiler::InstructionOperandConverter::InputInt3(unsigned long)",93957342048032,93957342048207],["void v8::internal::TurboAssembler::Psrlw<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342048336,93957342048419],["void v8::internal::TurboAssembler::Punpckhbw<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342048528,93957342048611],["void v8::internal::TurboAssembler::Psraw<v8::internal::XMMRegister, unsigned char>(v8::internal::XMMRegister, unsigned char)",93957342048720,93957342048842],["getdtablesize",139871564264816,139871564264886],["pselect",139871564265728,139871564266008],["fsync",139871564266112,139871564266251],["fdatasync",139871564266304,139871564266443],["v8::internal::SourcePositionTableIterator::Advance()",93957336178400,93957336178792],["v8::internal::SourcePositionInfo::SourcePositionInfo(v8::internal::SourcePosition, v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957336181568,93957336181910],["v8::internal::TurboAssemblerBase::TurboAssemblerBase(v8::internal::Isolate*, v8::internal::AssemblerOptions const&, v8::internal::CodeObjectRequired, std::__1::unique_ptr<v8::internal::AssemblerBuffer, std::__1::default_delete<v8::internal::AssemblerBuffer> >)",93957336182464,93957336182624],["v8::internal::TurboAssemblerBase::RootRegisterOffsetForExternalReference(v8::internal::Isolate*, v8::internal::ExternalReference const&)",93957336183136,93957336183148],["v8::internal::TurboAssemblerBase::RecordCommentForOffHeapTrampoline(int)",93957336183264,93957336184039],["v8::internal::UnoptimizedCompilationInfo::UnoptimizedCompilationInfo(v8::internal::Zone*, v8::internal::ParseInfo*, v8::internal::FunctionLiteral*)",93957336184064,93957336184512],["v8::internal::UnoptimizedCompilationInfo::num_parameters_including_this() const",93957336184528,93957336184551],["v8::internal::PerIsolateAssertScope<(v8::internal::PerIsolateAssertType)0, false>::PerIsolateAssertScope(v8::internal::Isolate*)",93957336184608,93957336184635],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::CollectValuesOrEntries(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArray>, bool, int*, v8::internal::PropertyFilter)",93957338370768,93957338371310],["v8::internal::(anonymous namespace)::CopyDoubleToDoubleElements(v8::internal::FixedArrayBase, unsigned int, v8::internal::FixedArrayBase, unsigned int, int)",93957338378800,93957338379358],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::AddElementsToKeyAccumulator(v8::internal::Handle<v8::internal::JSObject>, v8::internal::KeyAccumulator*, v8::internal::AddKeyConversion)",93957338384768,93957338385082],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::Normalize(v8::internal::Handle<v8::internal::JSObject>)",93957338386528,93957338386882],["v8::internal::(anonymous namespace)::FastElementsAccessor<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::AddArguments(v8::internal::Handle<v8::internal::JSArray>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::BuiltinArguments*, unsigned int, v8::internal::(anonymous namespace)::Where)",93957338389312,93957338390365],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedNonextensibleObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)6> >::GrowCapacityAndConvert(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338391440,93957338391455],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyNonextensibleObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)7> >::Shift(v8::internal::Handle<v8::internal::JSArray>)",93957338392832,93957338392847],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedNonextensibleObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)6> >::Delete(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338393664,93957338394386],["v8::internal::(anonymous namespace)::DictionaryElementsAccessor::SetLengthImpl(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSArray>, unsigned int, v8::internal::Handle<v8::internal::FixedArrayBase>)",93957338395248,93957338396259],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedNonextensibleObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)6> >::GrowCapacityAndConvertImpl(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338396512,93957338396954],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyNonextensibleObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)7> >::TransitionElementsKind(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Map>)",93957338397280,93957338397960],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyNonextensibleObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)7> >::GrowCapacity(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338397984,93957338398415],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyNonextensibleObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)7> >::Fill(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338398848,93957338399219],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyNonextensibleObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)7> >::CopyElements(v8::internal::JSObject, unsigned int, v8::internal::ElementsKind, v8::internal::Handle<v8::internal::FixedArrayBase>, unsigned int, int)",93957338399280,93957338399354],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyNonextensibleObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)7> >::GrowCapacityAndConvertImpl(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338399600,93957338400022],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedSealedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)8> >::TransitionElementsKind(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Map>)",93957338400880,93957338401560],["void v8::internal::TurboAssembler::Cmppd<v8::internal::XMMRegister, v8::internal::XMMRegister, signed char>(v8::internal::XMMRegister, v8::internal::XMMRegister, signed char)",93957342044976,93957342045062],["void v8::internal::TurboAssembler::Orps<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342046064,93957342046120],["void v8::internal::TurboAssembler::Pextrq<v8::internal::Register, v8::internal::XMMRegister, signed char>(v8::internal::Register, v8::internal::XMMRegister, signed char)",93957342046480,93957342046585],["void v8::internal::TurboAssembler::Pcmpeqq<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342046896,93957342046990],["void v8::internal::TurboAssembler::Pshuflw<v8::internal::XMMRegister, v8::internal::XMMRegister, unsigned char>(v8::internal::XMMRegister, v8::internal::XMMRegister, unsigned char)",93957342047168,93957342047274],["v8::internal::compiler::InstructionOperandConverter::InputInt4(unsigned long)",93957342047408,93957342047583],["void v8::internal::TurboAssembler::Packsswb<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342047680,93957342047763],["void v8::internal::TurboAssembler::Pshufb<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342047808,93957342047899],["setregid",139871564264176,139871564264328],["sethostname",139871564265184,139871564265217],["__select",139871564265552,139871564265723],["acct",139871564266016,139871564266049],["v8::internal::SafepointTableBuilder::Emit(v8::internal::Assembler*, int)",93957336175152,93957336176172],["v8::internal::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::SourcePositionInfo const&)",93957336179120,93957336179398],["v8::internal::SourcePosition::PrintJson(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) const",93957336181104,93957336181340],["v8::internal::StringConstantBase::GetMaxStringConstantLength() const",93957336182288,93957336182384],["v8::internal::TickCounter::DetachLocalHeap()",93957336182448,93957336182462],["v8::internal::TurboAssemblerBase::IndirectLoadConstant(v8::internal::Register, v8::internal::Handle<v8::internal::HeapObject>)",93957336182624,93957336182902],["v8::internal::TurboAssemblerBase::IsAddressableThroughRootRegister(v8::internal::Isolate*, v8::internal::ExternalReference const&)",93957336183104,93957336183125],["v8::internal::TurboAssemblerBase::RootRegisterOffsetForExternalReferenceTableEntry(v8::internal::Isolate*, v8::internal::ExternalReference const&)",93957336183152,93957336183233],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)3> >::Delete(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338364240,93957338364256],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)4> >::Unshift(v8::internal::Handle<v8::internal::JSArray>, v8::internal::BuiltinArguments*, unsigned int)",93957338373696,93957338373839],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)4> >::SetLengthImpl(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSArray>, unsigned int, v8::internal::Handle<v8::internal::FixedArrayBase>)",93957338376832,93957338377715],["v8::internal::(anonymous namespace)::FastElementsAccessor<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::MoveElements(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSArray>, v8::internal::Handle<v8::internal::FixedArrayBase>, int, int, int, int, int)",93957338381408,93957338381688],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::CollectElementIndices(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::KeyAccumulator*)",93957338382656,93957338383125],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::GrowCapacity(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338385104,93957338385954],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::Pop(v8::internal::Handle<v8::internal::JSArray>)",93957338386480,93957338386498],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::GetEntryForIndex(v8::internal::Isolate*, v8::internal::JSObject, v8::internal::FixedArrayBase, unsigned long)",93957338387184,93957338387281],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::GrowCapacityAndConvertImpl(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338388880,93957338389307],["v8::internal::(anonymous namespace)::FastElementsAccessor<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::RemoveElement(v8::internal::Handle<v8::internal::JSArray>, v8::internal::(anonymous namespace)::Where)",93957338390368,93957338390624],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedNonextensibleObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)6> >::TransitionElementsKind(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Map>)",93957338390752,93957338391432],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedNonextensibleObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)6> >::GrowCapacity(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338391456,93957338391887],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyNonextensibleObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)7> >::Pop(v8::internal::Handle<v8::internal::JSArray>)",93957338392800,93957338392818],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedFrozenObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)10> >::Normalize(v8::internal::Handle<v8::internal::JSObject>)",93957338392848,93957338393222],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedNonextensibleObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)6> >::CopyElements(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::ElementsKind, v8::internal::Handle<v8::internal::FixedArrayBase>, int)",93957338393616,93957338393658],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedNonextensibleObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)6> >::CopyElements(v8::internal::JSObject, unsigned int, v8::internal::ElementsKind, v8::internal::Handle<v8::internal::FixedArrayBase>, unsigned int, int)",93957338394400,93957338394474],["void v8::internal::TurboAssembler::Movss<v8::internal::Operand, v8::internal::XMMRegister>(v8::internal::Operand, v8::internal::XMMRegister)",93957342044528,93957342044577],["void v8::internal::TurboAssembler::Mulpd<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342045360,93957342045443],["void v8::internal::TurboAssembler::Addps<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342045936,93957342045992],["void v8::internal::TurboAssembler::Andnps<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342046224,93957342046280],["void v8::internal::TurboAssembler::Mulps<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342046416,93957342046472],["void v8::internal::TurboAssembler::Pinsrq<v8::internal::XMMRegister, v8::internal::Register, unsigned char>(v8::internal::XMMRegister, v8::internal::Register, unsigned char)",93957342046592,93957342046701],["void v8::internal::TurboAssembler::Paddq<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342046800,93957342046883],["void v8::internal::TurboAssembler::Pand<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342046992,93957342047075],["pwritev",139871564263136,139871564263309],["setegid",139871564264544,139871564264752],["gethostname",139871564264896,139871564265182],["getdomainname",139871564265232,139871564265500],["v8::internal::SafepointTable::SafepointTable(v8::internal::Isolate*, unsigned long, v8::internal::Code)",93957336173776,93957336173888],["v8::internal::SourcePositionTableBuilder::SourcePositionTableBuilder(v8::internal::Zone*, v8::internal::SourcePositionTableBuilder::RecordingMode)",93957336176928,93957336176974],["v8::internal::SourcePositionTableIterator::SourcePositionTableIterator(v8::internal::Handle<v8::internal::ByteArray>, v8::internal::SourcePositionTableIterator::IterationFilter, v8::internal::SourcePositionTableIterator::FunctionEntryFilter)",93957336178912,93957336179007],["v8::internal::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::SourcePosition const&)",93957336179520,93957336179741],["v8::internal::SourcePosition::Print(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::SharedFunctionInfo) const",93957336180672,93957336181091],["v8::internal::SourcePosition::Print(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::Code) const",93957336181344,93957336181557],["v8::internal::StringConstantBase::AllocateStringConstant(v8::internal::Isolate*) const",93957336181920,93957336182283],["v8::internal::TickCounter::TickAndMaybeEnterSafepoint()",93957336182384,93957336182417],["v8::internal::(anonymous namespace)::FastElementsAccessor<v8::internal::(anonymous namespace)::FastPackedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)2> >::RemoveElement(v8::internal::Handle<v8::internal::JSArray>, v8::internal::(anonymous namespace)::Where)",93957338360976,93957338361370],["v8::internal::(anonymous namespace)::FastElementsAccessor<v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)3> >::AddImpl(v8::internal::Handle<v8::internal::JSObject>, unsigned int, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes, unsigned int)",93957338368000,93957338368307],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)4> >::GrowCapacity(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338372336,93957338373218],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)4> >::Fill(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338374320,93957338374603],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::CopyElements(v8::internal::JSObject, unsigned int, v8::internal::ElementsKind, v8::internal::Handle<v8::internal::FixedArrayBase>, unsigned int, int)",93957338376464,93957338376589],["v8::internal::(anonymous namespace)::FastDoubleElementsAccessor<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::CopyElementsImpl(v8::internal::Isolate*, v8::internal::FixedArrayBase, unsigned int, v8::internal::FixedArrayBase, v8::internal::ElementsKind, unsigned int, int, int)",93957338378192,93957338378575],["v8::internal::(anonymous namespace)::CopyDictionaryToDoubleElements(v8::internal::Isolate*, v8::internal::FixedArrayBase, unsigned int, v8::internal::FixedArrayBase, unsigned int, int)",93957338379648,93957338380287],["v8::internal::(anonymous namespace)::FastElementsAccessor<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::DeleteAtEnd(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedDoubleArray>, unsigned int)",93957338381936,93957338382217],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::SetLength(v8::internal::Handle<v8::internal::JSArray>, unsigned int)",93957338382528,93957338382656],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::PrependElementIndices(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::Handle<v8::internal::FixedArray>, v8::internal::GetKeysConversion, v8::internal::PropertyFilter)",93957338383136,93957338384759],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::GrowCapacityAndConvert(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338385088,93957338385103],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::Add(v8::internal::Handle<v8::internal::JSObject>, unsigned int, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes, unsigned int)",93957338385968,93957338386174],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::Unshift(v8::internal::Handle<v8::internal::JSArray>, v8::internal::BuiltinArguments*, unsigned int)",93957338386336,93957338386479],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::Shift(v8::internal::Handle<v8::internal::JSArray>)",93957338386512,93957338386527],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::Fill(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338386896,93957338387179],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::Delete(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338387296,93957338387975],["void v8::internal::TurboAssembler::Movmskpd<v8::internal::Register, v8::internal::XMMRegister>(v8::internal::Register, v8::internal::XMMRegister)",93957342044032,93957342044077],["void v8::internal::TurboAssembler::Movddup<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342044720,93957342044748],["void v8::internal::TurboAssembler::Maxpd<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342045168,93957342045251],["void v8::internal::TurboAssembler::Cvtdq2ps<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342045568,93957342045624],["void v8::internal::TurboAssembler::Psubd<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342045840,93957342045923],["void v8::internal::TurboAssembler::Minps<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342046000,93957342046056],["void v8::internal::TurboAssembler::Cmpps<v8::internal::XMMRegister, v8::internal::XMMRegister, signed char>(v8::internal::XMMRegister, v8::internal::XMMRegister, signed char)",93957342046128,93957342046214],["void v8::internal::TurboAssembler::Maxps<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342046288,93957342046344],["ioctl",139871564262592,139871564262625],["pwritev2",139871564263664,139871564264010],["seteuid",139871564264336,139871564264544],["__getpagesize",139871564264752,139871564264801],["v8::internal::RelocIterator::next()",93957336172368,93957336172838],["v8::internal::SafepointTableBuilder::DefineSafepoint(v8::internal::Assembler*)",93957336174256,93957336174540],["v8::internal::Handle<v8::internal::ByteArray> v8::internal::SourcePositionTableBuilder::ToSourcePositionTable<v8::internal::Isolate>(v8::internal::Isolate*)",93957336176736,93957336176820],["v8::internal::SourcePositionTableBuilder::AddEntry(v8::internal::PositionTableEntry const&)",93957336177056,93957336178305],["v8::internal::SourcePositionTableIterator::SourcePositionTableIterator(v8::internal::ByteArray, v8::internal::SourcePositionTableIterator::IterationFilter, v8::internal::SourcePositionTableIterator::FunctionEntryFilter)",93957336178800,93957336178911],["v8::internal::SourcePositionTableIterator::SourcePositionTableIterator(v8::internal::Vector<unsigned char const>, v8::internal::SourcePositionTableIterator::IterationFilter, v8::internal::SourcePositionTableIterator::FunctionEntryFilter)",93957336179008,93957336179109],["v8::internal::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, std::__1::vector<v8::internal::SourcePositionInfo, std::__1::allocator<v8::internal::SourcePositionInfo> > const&)",93957336179408,93957336179520],["v8::internal::SourcePosition::InliningStack(v8::internal::OptimizedCompilationInfo*) const",93957336179744,93957336180022],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)2> >::Add(v8::internal::Handle<v8::internal::JSObject>, unsigned int, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes, unsigned int)",93957338355440,93957338355749],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)3> >::Add(v8::internal::Handle<v8::internal::JSObject>, unsigned int, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes, unsigned int)",93957338363296,93957338363317],["v8::internal::(anonymous namespace)::FastSmiOrObjectElementsAccessor<v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)3> >::CopyElementsImpl(v8::internal::Isolate*, v8::internal::FixedArrayBase, unsigned int, v8::internal::FixedArrayBase, v8::internal::ElementsKind, unsigned int, int, int)",93957338365792,93957338366043],["v8::internal::(anonymous namespace)::FastElementsAccessor<v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)3> >::DeleteImpl(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338369824,93957338370530],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::TransitionElementsKind(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Map>)",93957338371616,93957338372320],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)4> >::Add(v8::internal::Handle<v8::internal::JSObject>, unsigned int, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes, unsigned int)",93957338373328,93957338373534],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)4> >::Shift(v8::internal::Handle<v8::internal::JSArray>)",93957338374032,93957338374047],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::IndexOfValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338374976,93957338375173],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)4> >::Delete(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338375760,93957338376455],["v8::internal::(anonymous namespace)::FastDoubleElementsAccessor<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::GetImpl(v8::internal::Isolate*, v8::internal::FixedArrayBase, v8::internal::InternalIndex)",93957338376592,93957338376825],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)4> >::GrowCapacityAndConvertImpl(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338377728,93957338378190],["v8::internal::(anonymous namespace)::CopySmiToDoubleElements(v8::internal::FixedArrayBase, unsigned int, v8::internal::FixedArrayBase, unsigned int, int)",93957338378576,93957338378796],["v8::internal::(anonymous namespace)::CopyObjectToDoubleElements(v8::internal::FixedArrayBase, unsigned int, v8::internal::FixedArrayBase, unsigned int, int)",93957338379360,93957338379645],["v8::internal::(anonymous namespace)::FastElementsAccessor<v8::internal::(anonymous namespace)::FastPackedDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)4> >::AddArguments(v8::internal::Handle<v8::internal::JSArray>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::BuiltinArguments*, unsigned int, v8::internal::(anonymous namespace)::Where)",93957338380288,93957338381402],["v8::internal::(anonymous namespace)::FastElementsAccessor<v8::internal::(anonymous namespace)::FastPackedDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)4> >::RemoveElement(v8::internal::Handle<v8::internal::JSArray>, v8::internal::(anonymous namespace)::Where)",93957338381696,93957338381931],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::HasElement(v8::internal::JSObject, unsigned int, v8::internal::FixedArrayBase, v8::internal::PropertyFilter)",93957338382224,93957338382332],["v8::internal::compiler::UnwindingInfoWriter::MaybeIncreaseBaseOffsetAt(int, int)",93957342043424,93957342043506],["void v8::internal::TurboAssembler::Movd<v8::internal::XMMRegister, v8::internal::Operand>(v8::internal::XMMRegister, v8::internal::Operand)",93957342044224,93957342044252],["void v8::internal::TurboAssembler::Movq<v8::internal::Register, v8::internal::XMMRegister>(v8::internal::Register, v8::internal::XMMRegister)",93957342044624,93957342044652],["void v8::internal::TurboAssembler::Minpd<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342044784,93957342044867],["void v8::internal::TurboAssembler::Andnpd<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342045072,93957342045155],["void v8::internal::TurboAssembler::Subpd<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342045264,93957342045347],["void v8::internal::TurboAssembler::Pshufd<v8::internal::XMMRegister, v8::internal::XMMRegister, unsigned char>(v8::internal::XMMRegister, v8::internal::XMMRegister, unsigned char)",93957342045456,93957342045562],["void v8::internal::TurboAssembler::Pxor<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342045632,93957342045715],["nice",139871564262208,139871564262311],["writev",139871564262800,139871564262957],["preadv2",139871564263312,139871564263658],["setreuid",139871564264016,139871564264168],["v8::internal::PendingOptimizationTable::MarkedForOptimization(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSFunction>)",93957336168896,93957336169483],["v8::internal::RelocIterator::RelocIterator(v8::internal::Vector<unsigned char>, v8::internal::Vector<unsigned char const>, unsigned long, int)",93957336173456,93957336173522],["v8::internal::SafepointTable::find_return_pc(unsigned int)",93957336173936,93957336174020],["v8::internal::SafepointTableBuilder::GetCodeOffset() const",93957336174848,93957336174857],["v8::internal::SafepointTableBuilder::RemoveDuplicates()",93957336176176,93957336176729],["v8::internal::Handle<v8::internal::ByteArray> v8::internal::SourcePositionTableBuilder::ToSourcePositionTable<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*)",93957336176832,93957336176917],["v8::internal::SourcePositionTableBuilder::AddPosition(unsigned long, v8::internal::SourcePosition, bool)",93957336176976,93957336177047],["v8::internal::SourcePositionTableBuilder::ToSourcePositionTableVector()",93957336178320,93957336178397],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::Shift(v8::internal::Handle<v8::internal::JSArray>)",93957338349488,93957338349503],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)2> >::CopyElements(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::ElementsKind, v8::internal::Handle<v8::internal::FixedArrayBase>, int)",93957338357280,93957338357322],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)3> >::AddElementsToKeyAccumulator(v8::internal::Handle<v8::internal::JSObject>, v8::internal::KeyAccumulator*, v8::internal::AddKeyConversion)",93957338362112,93957338362130],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)3> >::Shift(v8::internal::Handle<v8::internal::JSArray>)",93957338363664,93957338363679],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)3> >::SetLengthImpl(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSArray>, unsigned int, v8::internal::Handle<v8::internal::FixedArrayBase>)",93957338364336,93957338365347],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)3> >::DirectCollectElementIndicesImpl(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::GetKeysConversion, v8::internal::PropertyFilter, v8::internal::Handle<v8::internal::FixedArray>, unsigned int*, unsigned int)",93957338366544,93957338367584],["v8::internal::(anonymous namespace)::FastElementsAccessor<v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)3> >::RemoveElement(v8::internal::Handle<v8::internal::JSArray>, v8::internal::(anonymous namespace)::Where)",93957338369072,93957338369486],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::Get(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338370608,93957338370640],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)4> >::AddElementsToKeyAccumulator(v8::internal::Handle<v8::internal::JSObject>, v8::internal::KeyAccumulator*, v8::internal::AddKeyConversion)",93957338371312,93957338371610],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)4> >::GrowCapacityAndConvert(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338372320,93957338372335],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::Set(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex, v8::internal::Object)",93957338373232,93957338373325],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)4> >::Push(v8::internal::Handle<v8::internal::JSArray>, v8::internal::BuiltinArguments*, unsigned int)",93957338373536,93957338373682],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)4> >::Pop(v8::internal::Handle<v8::internal::JSArray>)",93957338373840,93957338374017],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)4> >::Normalize(v8::internal::Handle<v8::internal::JSObject>)",93957338374048,93957338374305],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::IncludesValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338374608,93957338374966],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::CopyElements(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::ElementsKind, v8::internal::Handle<v8::internal::FixedArrayBase>, int)",93957338375184,93957338375225],["v8::internal::compiler::InstructionOperandConverter::InputInt6(unsigned long)",93957342042800,93957342042975],["void v8::internal::TurboAssembler::Movmskps<v8::internal::Register, v8::internal::XMMRegister>(v8::internal::Register, v8::internal::XMMRegister)",93957342043760,93957342043805],["void v8::internal::TurboAssembler::Movd<v8::internal::Register, v8::internal::XMMRegister>(v8::internal::Register, v8::internal::XMMRegister)",93957342044160,93957342044188],["void v8::internal::TurboAssembler::Xorpd<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342044304,93957342044387],["void v8::internal::TurboAssembler::Movq<v8::internal::XMMRegister, v8::internal::Register>(v8::internal::XMMRegister, v8::internal::Register)",93957342044592,93957342044620],["void v8::internal::TurboAssembler::Movups<v8::internal::Operand, v8::internal::XMMRegister>(v8::internal::Operand, v8::internal::XMMRegister)",93957342044656,93957342044705],["void v8::internal::TurboAssembler::Movddup<v8::internal::XMMRegister, v8::internal::Operand>(v8::internal::XMMRegister, v8::internal::Operand)",93957342044752,93957342044780],["void v8::internal::TurboAssembler::Orpd<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342044880,93957342044963],["vlimit",139871564261632,139871564261770],["__sbrk",139871564262416,139871564262552],["readv",139871564262640,139871564262797],["preadv",139871564262960,139871564263133],["v8::internal::OptimizedCompilationInfo::SetWasmCompilationResult(std::__1::unique_ptr<v8::internal::wasm::WasmCompilationResult, std::__1::default_delete<v8::internal::wasm::WasmCompilationResult> >)",93957336167376,93957336167482],["v8::internal::RegisterConfiguration::RestrictGeneralRegisters(unsigned int)",93957336170592,93957336171620],["v8::internal::RelocIterator::RelocIterator(v8::internal::Code, v8::internal::ByteArray, int)",93957336173056,93957336173241],["v8::internal::RelocInfo::set_wasm_call_address(unsigned long, v8::internal::ICacheFlushMode)",93957336173568,93957336173599],["v8::internal::SafepointTable::SafepointTable(v8::internal::wasm::WasmCode const*)",93957336173888,93957336173936],["v8::internal::SafepointTable::FindEntry(unsigned long) const",93957336174032,93957336174255],["v8::internal::ZoneChunkList<v8::internal::GDBJITInterface::ELFSymbol>::push_back(v8::internal::GDBJITInterface::ELFSymbol const&)",93957336174544,93957336174835],["v8::internal::SafepointTableBuilder::UpdateDeoptimizationInfo(int, int, int, unsigned int)",93957336174864,93957336175143],["v8::internal::(anonymous namespace)::FastElementsAccessor<v8::internal::(anonymous namespace)::FastPackedSmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)0> >::RemoveElement(v8::internal::Handle<v8::internal::JSArray>, v8::internal::(anonymous namespace)::Where)",93957338343840,93957338344234],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::GrowCapacityAndConvertImpl(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338352304,93957338352726],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)2> >::Shift(v8::internal::Handle<v8::internal::JSArray>)",93957338356096,93957338356111],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)2> >::GrowCapacityAndConvertImpl(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338359168,93957338359610],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)3> >::CollectElementIndices(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::KeyAccumulator*)",93957338361504,93957338361533],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)3> >::GrowCapacityAndConvert(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338362832,93957338362847],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)3> >::Unshift(v8::internal::Handle<v8::internal::JSArray>, v8::internal::BuiltinArguments*, unsigned int)",93957338363488,93957338363631],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)3> >::Fill(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338363808,93957338364192],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)3> >::CopyElements(v8::internal::JSObject, unsigned int, v8::internal::ElementsKind, v8::internal::Handle<v8::internal::FixedArrayBase>, unsigned int, int)",93957338364256,93957338364330],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)3> >::GrowCapacityAndConvertImpl(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338365360,93957338365782],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)3> >::CollectElementIndicesImpl(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::KeyAccumulator*)",93957338366048,93957338366536],["v8::internal::(anonymous namespace)::FastElementsAccessor<v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)3> >::AddElementsToKeyAccumulatorImpl(v8::internal::Handle<v8::internal::JSObject>, v8::internal::KeyAccumulator*, v8::internal::AddKeyConversion)",93957338367584,93957338368000],["v8::internal::(anonymous namespace)::FastElementsAccessor<v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)3> >::AddArguments(v8::internal::Handle<v8::internal::JSArray>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::BuiltinArguments*, unsigned int, v8::internal::(anonymous namespace)::Where)",93957338368320,93957338369067],["v8::internal::(anonymous namespace)::FastElementsAccessor<v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)3> >::NormalizeImpl(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>)",93957338369488,93957338369819],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)5> >::HasEntry(v8::internal::JSObject, v8::internal::InternalIndex)",93957338370544,93957338370596],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedDoubleElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)4> >::SetLength(v8::internal::Handle<v8::internal::JSArray>, unsigned int)",93957338370640,93957338370768],["v8::internal::compiler::CodeGenerator::AssembleReturn(v8::internal::compiler::InstructionOperand*)",93957342038048,93957342039872],["void v8::internal::TurboAssembler::Andps<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342043136,93957342043192],["void v8::internal::TurboAssembler::Movsd<v8::internal::XMMRegister, v8::internal::Operand>(v8::internal::XMMRegister, v8::internal::Operand)",93957342043584,93957342043648],["void v8::internal::TurboAssembler::Movss<v8::internal::XMMRegister, v8::internal::Operand>(v8::internal::XMMRegister, v8::internal::Operand)",93957342043856,93957342043907],["void v8::internal::TurboAssembler::Movsd<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342044080,93957342044146],["void v8::internal::TurboAssembler::Movd<v8::internal::XMMRegister, v8::internal::Register>(v8::internal::XMMRegister, v8::internal::Register)",93957342044192,93957342044220],["void v8::internal::TurboAssembler::Movaps<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342044256,93957342044301],["v8::internal::compiler::(anonymous namespace)::EmitOOLTrapIfNeeded(v8::internal::Zone*, v8::internal::compiler::CodeGenerator*, unsigned int, v8::internal::compiler::Instruction*, int)",93957342044400,93957342044516],["__getrlimit",139871564261136,139871564261186],["getpriority",139871564262096,139871564262146],["brk",139871564262320,139871564262412],["sstk",139871564262560,139871564262582],["v8::internal::OptimizedCompilationInfo::OptimizedCompilationInfo(v8::internal::Vector<char const>, v8::internal::Zone*, v8::internal::CodeKind)",93957336166304,93957336166592],["v8::internal::OptimizedCompilationInfo::AddInlinedFunction(v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::BytecodeArray>, v8::internal::SourcePosition)",93957336167600,93957336167733],["v8::internal::RegisterConfiguration::Default()",93957336169952,93957336170233],["v8::internal::(anonymous namespace)::RestrictedRegisterConfiguration::~RestrictedRegisterConfiguration()",93957336171728,93957336171817],["v8::internal::RelocIterator::RelocIterator(v8::internal::Code, int)",93957336172848,93957336173048],["v8::internal::RelocIterator::RelocIterator(v8::internal::EmbeddedData*, v8::internal::Code, int)",93957336173248,93957336173456],["v8::internal::RelocInfo::wasm_call_address() const",93957336173536,93957336173555],["v8::internal::RelocInfo::set_target_address(unsigned long, v8::internal::WriteBarrierMode, v8::internal::ICacheFlushMode)",93957336173600,93957336173766],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedSmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)0> >::GetEntryForIndex(v8::internal::Isolate*, v8::internal::JSObject, v8::internal::FixedArrayBase, unsigned long)",93957338332656,93957338332717],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::AddElementsToKeyAccumulator(v8::internal::Handle<v8::internal::JSObject>, v8::internal::KeyAccumulator*, v8::internal::AddKeyConversion)",93957338347280,93957338347696],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::GetEntryForIndex(v8::internal::Isolate*, v8::internal::JSObject, v8::internal::FixedArrayBase, unsigned long)",93957338350384,93957338350472],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)2> >::SetLength(v8::internal::Handle<v8::internal::JSArray>, unsigned int)",93957338354144,93957338354272],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)2> >::Unshift(v8::internal::Handle<v8::internal::JSArray>, v8::internal::BuiltinArguments*, unsigned int)",93957338355920,93957338356063],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)3> >::IncludesValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338356496,93957338357041],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)2> >::CopyElements(v8::internal::JSObject, unsigned int, v8::internal::ElementsKind, v8::internal::Handle<v8::internal::FixedArrayBase>, unsigned int, int)",93957338358064,93957338358138],["v8::internal::(anonymous namespace)::FastElementsAccessor<v8::internal::(anonymous namespace)::FastPackedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)2> >::AddArguments(v8::internal::Handle<v8::internal::JSArray>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::BuiltinArguments*, unsigned int, v8::internal::(anonymous namespace)::Where)",93957338359872,93957338360651],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)3> >::SetLength(v8::internal::Handle<v8::internal::JSArray>, unsigned int)",93957338361376,93957338361504],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)3> >::PrependElementIndices(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::Handle<v8::internal::FixedArray>, v8::internal::GetKeysConversion, v8::internal::PropertyFilter)",93957338361536,93957338362099],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)3> >::TransitionElementsKind(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Map>)",93957338362144,93957338362824],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)3> >::GrowCapacity(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338362848,93957338363282],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)3> >::Push(v8::internal::Handle<v8::internal::JSArray>, v8::internal::BuiltinArguments*, unsigned int)",93957338363328,93957338363474],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)3> >::Pop(v8::internal::Handle<v8::internal::JSArray>)",93957338363632,93957338363650],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)3> >::Normalize(v8::internal::Handle<v8::internal::JSObject>)",93957338363680,93957338363800],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)3> >::CopyElements(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::ElementsKind, v8::internal::Handle<v8::internal::FixedArrayBase>, int)",93957338364192,93957338364234],["v8::internal::compiler::CodeGenerator::AssembleRegisterArgumentPoisoning()",93957341957328,93957341957437],["v8::internal::compiler::InstructionOperandConverter::InputInt32(unsigned long)",93957342042032,93957342042203],["void v8::internal::TurboAssembler::Ucomiss<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342043008,93957342043036],["void v8::internal::TurboAssembler::Ucomisd<v8::internal::XMMRegister, v8::internal::Operand>(v8::internal::XMMRegister, v8::internal::Operand)",93957342043264,93957342043347],["void v8::internal::TurboAssembler::Movsd<v8::internal::Operand, v8::internal::XMMRegister>(v8::internal::Operand, v8::internal::XMMRegister)",93957342043520,93957342043582],["v8::internal::compiler::(anonymous namespace)::OutOfLineLoadFloat32NaN* v8::internal::Zone::New<v8::internal::compiler::(anonymous namespace)::OutOfLineLoadFloat32NaN, v8::internal::compiler::CodeGenerator*, v8::internal::XMMRegister>(v8::internal::compiler::CodeGenerator*&&, v8::internal::XMMRegister&&)",93957342043648,93957342043746],["void v8::internal::TurboAssembler::Movss<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342043808,93957342043853],["v8::internal::compiler::(anonymous namespace)::OutOfLineLoadFloat64NaN* v8::internal::Zone::New<v8::internal::compiler::(anonymous namespace)::OutOfLineLoadFloat64NaN, v8::internal::compiler::CodeGenerator*, v8::internal::XMMRegister>(v8::internal::compiler::CodeGenerator*&&, v8::internal::XMMRegister&&)",93957342043920,93957342044018],["tcflush",139871564260816,139871564260830],["getrusage",139871564261264,139871564261297],["vtimes",139871564262032,139871564262084],["setpriority",139871564262160,139871564262193],["v8::internal::WasmI64AtomicWait64Descriptor::ParameterTypes()",93957336165104,93957336165120],["v8::internal::OptimizedCompilationInfo::RetryOptimization(v8::internal::BailoutReason)",93957336167152,93957336167167],["v8::internal::OptimizedCompilationInfo::context() const",93957336167520,93957336167552],["v8::internal::PendingOptimizationTable::PreparedForOptimization(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSFunction>, bool)",93957336168032,93957336168501],["v8::internal::PendingOptimizationTable::FunctionWasOptimized(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSFunction>)",93957336169488,93957336169948],["v8::internal::RegisterConfiguration::Poisoning()",93957336170240,93957336170582],["v8::internal::(anonymous namespace)::RestrictedRegisterConfiguration::~RestrictedRegisterConfiguration()",93957336171632,93957336171716],["v8::internal::RelocInfoWriter::Write(v8::internal::RelocInfo const*)",93957336171824,93957336172366],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedSmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)0> >::TransitionElementsKind(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Map>)",93957338328592,93957338329272],["v8::internal::(anonymous namespace)::CopyDictionaryToObjectElements(v8::internal::Isolate*, v8::internal::FixedArrayBase, unsigned int, v8::internal::FixedArrayBase, v8::internal::ElementsKind, unsigned int, int)",93957338336656,93957338337404],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::NumberOfElements(v8::internal::JSObject)",93957338344880,93957338345072],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::Add(v8::internal::Handle<v8::internal::JSObject>, unsigned int, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes, unsigned int)",93957338348832,93957338349141],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::Fill(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338349952,93957338350336],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::CopyElements(v8::internal::JSObject, unsigned int, v8::internal::ElementsKind, v8::internal::Handle<v8::internal::FixedArrayBase>, unsigned int, int)",93957338351200,93957338351274],["v8::internal::(anonymous namespace)::FastElementsAccessor<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::AddArguments(v8::internal::Handle<v8::internal::JSArray>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::BuiltinArguments*, unsigned int, v8::internal::(anonymous namespace)::Where)",93957338352976,93957338353723],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)2> >::GrowCapacityAndConvert(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338354960,93957338354975],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)2> >::Push(v8::internal::Handle<v8::internal::JSArray>, v8::internal::BuiltinArguments*, unsigned int)",93957338355760,93957338355906],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)2> >::Pop(v8::internal::Handle<v8::internal::JSArray>)",93957338356064,93957338356082],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)2> >::Fill(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338356112,93957338356496],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)3> >::IndexOfValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338357056,93957338357280],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)2> >::Delete(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338357328,93957338358050],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)2> >::SetLengthImpl(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSArray>, unsigned int, v8::internal::Handle<v8::internal::FixedArrayBase>)",93957338358144,93957338359155],["v8::internal::(anonymous namespace)::FastSmiOrObjectElementsAccessor<v8::internal::(anonymous namespace)::FastPackedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)2> >::CopyElementsImpl(v8::internal::Isolate*, v8::internal::FixedArrayBase, unsigned int, v8::internal::FixedArrayBase, v8::internal::ElementsKind, unsigned int, int, int)",93957338359616,93957338359867],["v8::internal::(anonymous namespace)::FastElementsAccessor<v8::internal::(anonymous namespace)::FastHoleyObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)3> >::MoveElements(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSArray>, v8::internal::Handle<v8::internal::FixedArrayBase>, int, int, int, int, int)",93957338360656,93957338360963],["v8::internal::compiler::CodeGenerator::AssemblePrepareTailCall()",93957341955456,93957341955523],["v8::internal::compiler::CodeGenerator::AssembleArchJump(v8::internal::compiler::RpoNumber)",93957342036368,93957342036433],["v8::internal::compiler::X64OperandConverter::MemoryOperand(unsigned long*)",93957342040048,93957342041761],["v8::internal::compiler::X64OperandConverter::OutputOperand()",93957342042432,93957342042616],["void v8::internal::TurboAssembler::Ucomiss<v8::internal::XMMRegister, v8::internal::Operand>(v8::internal::XMMRegister, v8::internal::Operand)",93957342042976,93957342043004],["void v8::internal::TurboAssembler::Pcmpeqd<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342043040,93957342043123],["void v8::internal::TurboAssembler::Xorps<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342043200,93957342043256],["void v8::internal::TurboAssembler::Ucomisd<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957342043360,93957342043422],["tcgetpgrp",139871564260512,139871564260588],["cfmakeraw",139871564260880,139871564260924],["setrlimit",139871564261200,139871564261250],["ulimit",139871564261312,139871564261618],["v8::internal::WasmRefFuncDescriptor::ParameterTypes()",93957336164928,93957336164938],["v8::internal::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::MachineSemantic)",93957336165264,93957336165454],["v8::internal::OptimizedCompilationInfo::ReopenHandlesInNewHandleScope(v8::internal::Isolate*)",93957336166864,93957336167119],["v8::internal::OptimizedCompilationInfo::GetOutputStackFrameType() const",93957336167296,93957336167346],["v8::internal::OptimizedCompilationInfo::ReleaseWasmCompilationResult()",93957336167488,93957336167506],["v8::internal::OptimizedCompilationInfo::native_context() const",93957336167552,93957336167592],["void std::__1::vector<v8_inspector::V8StackTraceId, std::__1::allocator<v8_inspector::V8StackTraceId> >::__push_back_slow_path<v8_inspector::V8StackTraceId const&>(v8_inspector::V8StackTraceId const&)",93957336167744,93957336168022],["v8::internal::PendingOptimizationTable::IsHeuristicOptimizationAllowed(v8::internal::Isolate*, v8::internal::JSFunction)",93957336168512,93957336168888],["v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)25, unsigned char>::CopyElementsFromTypedArray(v8::internal::JSTypedArray, v8::internal::JSTypedArray, unsigned long, unsigned long)",93957338317984,93957338321982],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedSmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)0> >::Shift(v8::internal::Handle<v8::internal::JSArray>)",93957338330576,93957338330591],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedSmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)0> >::SetLengthImpl(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSArray>, unsigned int, v8::internal::Handle<v8::internal::FixedArrayBase>)",93957338333888,93957338334899],["unsigned int std::__1::__sort5<v8::internal::(anonymous namespace)::SortIndices(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FixedArray>, unsigned int)::$_0&, v8::internal::AtomicSlot>(v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::(anonymous namespace)::SortIndices(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FixedArray>, unsigned int)::$_0&)",93957338341360,93957338341971],["v8::internal::(anonymous namespace)::FastElementsAccessor<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::DeleteAtEnd(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArray>, unsigned int)",93957338344496,93957338344765],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::CollectElementIndices(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::KeyAccumulator*)",93957338345200,93957338345659],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::GrowCapacityAndConvert(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338348384,93957338348399],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::Unshift(v8::internal::Handle<v8::internal::JSArray>, v8::internal::BuiltinArguments*, unsigned int)",93957338349312,93957338349455],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::Normalize(v8::internal::Handle<v8::internal::JSObject>)",93957338349504,93957338349947],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::CopyElements(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::ElementsKind, v8::internal::Handle<v8::internal::FixedArrayBase>, int)",93957338350336,93957338350378],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::Delete(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338350480,93957338351186],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::SetLengthImpl(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSArray>, unsigned int, v8::internal::Handle<v8::internal::FixedArrayBase>)",93957338351280,93957338352291],["v8::internal::(anonymous namespace)::FastSmiOrObjectElementsAccessor<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::CopyElementsImpl(v8::internal::Isolate*, v8::internal::FixedArrayBase, unsigned int, v8::internal::FixedArrayBase, v8::internal::ElementsKind, unsigned int, int, int)",93957338352736,93957338352976],["v8::internal::(anonymous namespace)::FastElementsAccessor<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::RemoveElement(v8::internal::Handle<v8::internal::JSArray>, v8::internal::(anonymous namespace)::Where)",93957338353728,93957338354142],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)2> >::TransitionElementsKind(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Map>)",93957338354272,93957338354952],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)2> >::GrowCapacity(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338354976,93957338355434],["v8::internal::MacroAssembler::LoadNativeContextSlot(v8::internal::Register, int)",93957341953792,93957341954323],["v8::internal::compiler::CodeGenerator::AssembleCodeStartRegisterCheck()",93957341956736,93957341956818],["v8::internal::compiler::InstructionOperandConverter::InputCode(unsigned long)",93957342036000,93957342036180],["v8::internal::compiler::CodeGenerator::AssembleArchTableSwitch(v8::internal::compiler::Instruction*)",93957342037168,93957342037853],["v8::internal::compiler::(anonymous namespace)::OutOfLineTruncateDoubleToI* v8::internal::Zone::New<v8::internal::compiler::(anonymous namespace)::OutOfLineTruncateDoubleToI, v8::internal::compiler::CodeGenerator*, v8::internal::Register&, v8::internal::XMMRegister&, v8::internal::StubCallMode, v8::internal::compiler::UnwindingInfoWriter*>(v8::internal::compiler::CodeGenerator*&&, v8::internal::Register&, v8::internal::XMMRegister&, v8::internal::StubCallMode&&, v8::internal::compiler::UnwindingInfoWriter*&&)",93957342039872,93957342040040],["v8::internal::compiler::(anonymous namespace)::OutOfLineRecordWrite* v8::internal::Zone::New<v8::internal::compiler::(anonymous namespace)::OutOfLineRecordWrite, v8::internal::compiler::CodeGenerator*, v8::internal::Register&, v8::internal::Operand&, v8::internal::Register&, v8::internal::Register&, v8::internal::Register&, v8::internal::compiler::RecordWriteMode&, v8::internal::StubCallMode>(v8::internal::compiler::CodeGenerator*&&, v8::internal::Register&, v8::internal::Operand&, v8::internal::Register&, v8::internal::Register&, v8::internal::Register&, v8::internal::compiler::RecordWriteMode&, v8::internal::StubCallMode&&)",93957342041776,93957342042017],["v8::internal::compiler::X64OperandConverter::InputImmediate(unsigned long)",93957342042208,93957342042423],["v8::internal::compiler::InstructionOperandConverter::InputInt5(unsigned long)",93957342042624,93957342042799],["cfsetispeed",139871564259616,139871564259703],["tcdrain",139871564260624,139871564260787],["tcsendbreak",139871564260832,139871564260878],["tcgetsid",139871564260928,139871564261134],["v8::internal::TorqueInterfaceDescriptor<1, 5, false>::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336164400,93957336164535],["v8::internal::UintPtr53ToNumberDescriptor::ParameterTypes()",93957336164992,93957336165002],["v8::internal::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::MachineRepresentation)",93957336165136,93957336165207],["v8::internal::OptimizedCompilationInfo::OptimizedCompilationInfo(v8::internal::Zone*, v8::internal::Isolate*, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::JSFunction>, v8::internal::CodeKind)",93957336165664,93957336166099],["v8::internal::OptimizedCompilationInfo::~OptimizedCompilationInfo()",93957336166592,93957336166854],["v8::internal::OptimizedCompilationInfo::AbortOptimization(v8::internal::BailoutReason)",93957336167120,93957336167144],["v8::internal::OptimizedCompilationInfo::GetDebugName() const",93957336167168,93957336167294],["v8::internal::OptimizedCompilationInfo::SetCode(v8::internal::Handle<v8::internal::Code>)",93957336167360,93957336167370],["v8::internal::IsMoreGeneralElementsKindTransition(v8::internal::ElementsKind, v8::internal::ElementsKind)",93957338287760,93957338287868],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::HasEntry(v8::internal::JSObject, v8::internal::InternalIndex)",93957338325280,93957338325327],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedSmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)0> >::Add(v8::internal::Handle<v8::internal::JSObject>, unsigned int, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes, unsigned int)",93957338329920,93957338330226],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::IncludesValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338331392,93957338331748],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedSmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)0> >::Delete(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338333072,93957338333794],["v8::internal::(anonymous namespace)::FastSmiOrObjectElementsAccessor<v8::internal::(anonymous namespace)::FastPackedSmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)0> >::CopyElementsImpl(v8::internal::Isolate*, v8::internal::FixedArrayBase, unsigned int, v8::internal::FixedArrayBase, v8::internal::ElementsKind, unsigned int, int, int)",93957338335344,93957338335581],["unsigned int std::__1::__sort3<v8::internal::(anonymous namespace)::SortIndices(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FixedArray>, unsigned int)::$_0&, v8::internal::AtomicSlot>(v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::(anonymous namespace)::SortIndices(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FixedArray>, unsigned int)::$_0&)",93957338340064,93957338340889],["v8::internal::(anonymous namespace)::FastElementsAccessor<v8::internal::(anonymous namespace)::FastPackedSmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)0> >::AddArguments(v8::internal::Handle<v8::internal::JSArray>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::BuiltinArguments*, unsigned int, v8::internal::(anonymous namespace)::Where)",93957338342752,93957338343531],["v8::internal::(anonymous namespace)::DictionaryElementsAccessor::ReconfigureImpl(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::InternalIndex, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes)",93957338344240,93957338344484],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::HasElement(v8::internal::JSObject, unsigned int, v8::internal::FixedArrayBase, v8::internal::PropertyFilter)",93957338344768,93957338344866],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::SetLength(v8::internal::Handle<v8::internal::JSArray>, unsigned int)",93957338345072,93957338345200],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::PrependElementIndices(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::Handle<v8::internal::FixedArray>, v8::internal::GetKeysConversion, v8::internal::PropertyFilter)",93957338345664,93957338347272],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::TransitionElementsKind(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Map>)",93957338347696,93957338348376],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::GrowCapacity(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338348400,93957338348831],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::Push(v8::internal::Handle<v8::internal::JSArray>, v8::internal::BuiltinArguments*, unsigned int)",93957338349152,93957338349298],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::Pop(v8::internal::Handle<v8::internal::JSArray>)",93957338349456,93957338349474],["v8::internal::TurboAssembler::Popcntq(v8::internal::Register, v8::internal::Operand)",93957341952912,93957341952949],["v8::internal::TurboAssembler::ResetSpeculationPoisonRegister()",93957341955152,93957341955177],["v8::internal::compiler::X64OperandConverter::SlotToOperand(int, int)",93957341956384,93957341956562],["v8::internal::FieldOperand(v8::internal::Register, int)",93957341956960,93957341957172],["v8::internal::compiler::CodeGenerator::AssembleArchInstruction(v8::internal::compiler::Instruction*)",93957341957440,93957342035985],["v8::internal::compiler::InstructionOperandConverter::ToConstant(v8::internal::compiler::InstructionOperand*) const",93957342036192,93957342036355],["v8::internal::compiler::CodeGenerator::AssembleArchBinarySearchSwitch(v8::internal::compiler::Instruction*)",93957342036448,93957342037156],["v8::internal::compiler::InstructionOperandConverter::InputInt64(unsigned long)",93957342037856,93957342038040],["__write_nocancel",139871564259456,139871564259492],["tcsetattr",139871564259840,139871564260302],["tcsetpgrp",139871564260592,139871564260622],["tcflow",139871564260800,139871564260814],["v8::internal::ReturnTwoValuesDescriptor::ReturnType()",93957336164096,93957336164146],["v8::internal::WasmTableGrowDescriptor::ParameterTypes()",93957336164736,93957336164752],["v8::internal::WasmAllocateRttDescriptor::ParameterTypes()",93957336164960,93957336164971],["v8::internal::WasmAtomicNotifyDescriptor::ParameterTypes()",93957336165072,93957336165083],["v8::internal::StoreTypedElementJSAny_Int32Elements_0Descriptor::ParameterTypes()",93957336165120,93957336165136],["v8::internal::MachineReprToString(v8::internal::MachineRepresentation)",93957336165216,93957336165257],["v8::internal::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::MachineType)",93957336165456,93957336165663],["v8::internal::OptimizedCompilationInfo::ConfigureFlags()",93957336166112,93957336166296],["v8::internal::DebugInfo::GetBreakPoints(v8::internal::Isolate*, int)",93957338285360,93957338285579],["v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)24, double>::TryCopyElementsFastNumber(v8::internal::Context, v8::internal::JSArray, v8::internal::JSTypedArray, unsigned long, unsigned long)",93957338296848,93957338297848],["v8::internal::ElementsAccessor::TearDown()",93957338323680,93957338324357],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedSmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)0> >::CollectElementIndices(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::KeyAccumulator*)",93957338325632,93957338326084],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedSmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)0> >::GrowCapacity(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338329296,93957338329748],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedSmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)0> >::Unshift(v8::internal::Handle<v8::internal::JSArray>, v8::internal::BuiltinArguments*, unsigned int)",93957338330400,93957338330543],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::DictionaryElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)12> >::GetCapacity(v8::internal::JSObject, v8::internal::FixedArrayBase)",93957338330992,93957338331003],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedSmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)0> >::CopyElements(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::ElementsKind, v8::internal::Handle<v8::internal::FixedArrayBase>, int)",93957338331984,93957338332026],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::Reconfigure(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::InternalIndex, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes)",93957338332720,93957338333061],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedSmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)0> >::CopyElements(v8::internal::JSObject, unsigned int, v8::internal::ElementsKind, v8::internal::Handle<v8::internal::FixedArrayBase>, unsigned int, int)",93957338333808,93957338333882],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedSmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)0> >::GrowCapacityAndConvertImpl(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338334912,93957338335332],["v8::internal::(anonymous namespace)::CopyDoubleToObjectElements(v8::internal::Isolate*, v8::internal::FixedArrayBase, unsigned int, v8::internal::FixedArrayBase, unsigned int, int)",93957338335584,93957338336641],["void std::__1::__sort<v8::internal::(anonymous namespace)::SortIndices(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FixedArray>, unsigned int)::$_0&, v8::internal::AtomicSlot>(v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::(anonymous namespace)::SortIndices(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FixedArray>, unsigned int)::$_0&)",93957338337408,93957338340060],["unsigned int std::__1::__sort4<v8::internal::(anonymous namespace)::SortIndices(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FixedArray>, unsigned int)::$_0&, v8::internal::AtomicSlot>(v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::(anonymous namespace)::SortIndices(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FixedArray>, unsigned int)::$_0&)",93957338340896,93957338341354],["bool std::__1::__insertion_sort_incomplete<v8::internal::(anonymous namespace)::SortIndices(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FixedArray>, unsigned int)::$_0&, v8::internal::AtomicSlot>(v8::internal::AtomicSlot, v8::internal::AtomicSlot, v8::internal::(anonymous namespace)::SortIndices(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FixedArray>, unsigned int)::$_0&)",93957338341984,93957338342744],["v8::internal::(anonymous namespace)::FastElementsAccessor<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::MoveElements(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSArray>, v8::internal::Handle<v8::internal::FixedArrayBase>, int, int, int, int, int)",93957338343536,93957338343840],["v8::internal::TurboAssembler::Lzcntq(v8::internal::Register, v8::internal::Operand)",93957341952016,93957341952177],["v8::internal::TurboAssembler::StubPrologue(v8::internal::StackFrame::Type)",93957341953376,93957341953440],["v8::internal::TurboAssembler::CallCFunction(v8::internal::Register, int)",93957341954384,93957341955002],["v8::internal::TurboAssembler::DebugBreak()",93957341955360,93957341955370],["v8::internal::compiler::CodeGenerator::AssembleTailCallBeforeGap(v8::internal::compiler::Instruction*, int)",93957341955536,93957341956371],["v8::internal::compiler::CodeGenerator::AssembleTailCallAfterGap(v8::internal::compiler::Instruction*, int)",93957341956576,93957341956723],["v8::internal::compiler::CodeGenerator::BailoutIfDeoptimized()",93957341956832,93957341956945],["v8::internal::compiler::CodeGenerator::GenerateSpeculationPoisonFromCodeStartRegister()",93957341957184,93957341957323],["__close_nocancel",139871564258672,139871564258706],["cfgetispeed",139871564259520,139871564259537],["cfsetspeed",139871564259712,139871564259827],["tcgetattr",139871564260304,139871564260505],["v8::internal::CreateHTMLDescriptor::ParameterTypes()",93957336163632,93957336163652],["v8::internal::GallopLeftDescriptor::ParameterTypes()",93957336164224,93957336164245],["v8::internal::TorqueInterfaceDescriptor<1, 4, false>::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336164576,93957336164707],["v8::internal::WasmTableGetDescriptor::ParameterTypes()",93957336164896,93957336164907],["v8::internal::WasmAllocateFixedArrayDescriptor::ParameterTypes()",93957336164944,93957336164954],["v8::internal::WasmAllocateArrayWithRttDescriptor::ParameterTypes()",93957336164976,93957336164992],["v8::internal::WasmAtomicNotifyDescriptor::ReturnType()",93957336165008,93957336165057],["v8::internal::WasmI32AtomicWait64Descriptor::ParameterTypes()",93957336165088,93957336165104],["v8::internal::NativeContext::GetErrorsThrown()",93957338281136,93957338281153],["v8::internal::CoverageInfo::ResetBlockCount(int)",93957338286896,93957338286919],["v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)17, unsigned char>::TryCopyElementsFastNumber(v8::internal::Context, v8::internal::JSArray, v8::internal::JSTypedArray, unsigned long, unsigned long)",93957338289872,93957338291720],["v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)19, unsigned short>::CopyElementsFromTypedArray(v8::internal::JSTypedArray, v8::internal::JSTypedArray, unsigned long, unsigned long)",93957338303552,93957338307521],["v8::internal::CopyTypedArrayElementsSlice(unsigned long, unsigned long, unsigned long, unsigned long)",93957338322768,93957338322836],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)17, unsigned char>, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)17> >::Validate(v8::internal::JSObject)",93957338325136,93957338325214],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedSmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)0> >::NumberOfElements(v8::internal::JSObject)",93957338325440,93957338325497],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedSmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)0> >::PrependElementIndices(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::Handle<v8::internal::FixedArray>, v8::internal::GetKeysConversion, v8::internal::PropertyFilter)",93957338326944,93957338328170],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedSmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)0> >::GrowCapacityAndConvert(v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338329280,93957338329295],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::Set(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex, v8::internal::Object)",93957338329760,93957338329917],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedSmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)0> >::Push(v8::internal::Handle<v8::internal::JSArray>, v8::internal::BuiltinArguments*, unsigned int)",93957338330240,93957338330386],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedSmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)0> >::Pop(v8::internal::Handle<v8::internal::JSArray>)",93957338330544,93957338330562],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedSmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)0> >::Normalize(v8::internal::Handle<v8::internal::JSObject>)",93957338330592,93957338330982],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedSmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)0> >::Fill(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338331008,93957338331392],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::IndexOfValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, unsigned long, unsigned long)",93957338331760,93957338331984],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::CreateListFromArrayLike(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, unsigned int)",93957338332032,93957338332650],["v8::internal::TurboAssembler::I32x4ExtAddPairwiseI16x8U(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341950112,93957341950653],["v8::internal::TurboAssembler::Tzcntl(v8::internal::Register, v8::internal::Operand)",93957341952624,93957341952758],["v8::internal::MacroAssembler::CmpObjectType(v8::internal::Register, v8::internal::InstanceType, v8::internal::Register)",93957341953056,93957341953223],["v8::internal::TurboAssembler::EnterFrame(v8::internal::StackFrame::Type)",93957341953536,93957341953614],["v8::internal::TurboAssembler::CallCFunction(v8::internal::ExternalReference, int)",93957341954336,93957341954376],["v8::internal::TurboAssembler::ComputeCodeStartAddress(v8::internal::Register)",93957341955008,93957341955138],["v8::internal::TurboAssembler::CallForDeoptimization(v8::internal::Builtins::Name, int, v8::internal::Label*, v8::internal::DeoptimizeKind, v8::internal::Label*, v8::internal::Label*)",93957341955184,93957341955345],["v8::internal::compiler::CodeGenerator::AssembleDeconstructFrame()",93957341955376,93957341955455],["utimensat",139871564258080,139871564258150],["__read_nocancel",139871564259360,139871564259396],["cfgetospeed",139871564259504,139871564259513],["cfsetospeed",139871564259552,139871564259610],["v8::internal::PerformPromiseThenDescriptor::ParameterTypes()",93957336163376,93957336163392],["v8::internal::NewRestArgumentsElementsDescriptor::ParameterTypes()",93957336163872,93957336163888],["v8::internal::Store_FastSmiElements_0Descriptor::ParameterTypes()",93957336164176,93957336164192],["v8::internal::WasmMemoryGrowDescriptor::ReturnType()",93957336164272,93957336164321],["v8::internal::WasmTableCopyDescriptor::ParameterTypes()",93957336164544,93957336164564],["v8::internal::WasmTableFillDescriptor::ParameterTypes()",93957336164720,93957336164736],["v8::internal::TorqueInterfaceDescriptor<1, 2, false>::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336164752,93957336164882],["v8::internal::WasmTableSetDescriptor::ParameterTypes()",93957336164912,93957336164928],["v8::internal::Context::extension_object()",93957338276000,93957338276041],["v8::internal::DebugInfo::BreakAtEntry() const",93957338281664,93957338281681],["v8::internal::DebugInfo::ClearCoverageInfo(v8::internal::Isolate*)",93957338286256,93957338286397],["v8::internal::ElementsKindToString(v8::internal::ElementsKind)",93957338287584,93957338287605],["v8::internal::ArrayConstructInitializeElements(v8::internal::Handle<v8::internal::JSArray>, v8::internal::Arguments<(v8::internal::ArgumentsType)1>*)",93957338288016,93957338289454],["v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)21, unsigned int>::TryCopyElementsFastNumber(v8::internal::Context, v8::internal::JSArray, v8::internal::JSTypedArray, unsigned long, unsigned long)",93957338293600,93957338295448],["v8::internal::CopyTypedArrayElementsToTypedArray(unsigned long, unsigned long, unsigned long, unsigned long)",93957338299328,93957338299461],["v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)23, float>::CopyElementsFromTypedArray(v8::internal::JSTypedArray, v8::internal::JSTypedArray, unsigned long, unsigned long)",93957338311424,93957338315575],["v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)26, unsigned long>::CopyElementsFromTypedArray(v8::internal::JSTypedArray, v8::internal::JSTypedArray, unsigned long, unsigned long)",93957338321984,93957338322766],["v8::internal::ElementsAccessor::InitializeOncePerProcess()",93957338322848,93957338323678],["v8::internal::ElementsAccessor::Concat(v8::internal::Isolate*, v8::internal::BuiltinArguments*, unsigned int, unsigned int)",93957338324368,93957338325121],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedSmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)0> >::HasElement(v8::internal::JSObject, unsigned int, v8::internal::FixedArrayBase, v8::internal::PropertyFilter)",93957338325216,93957338325268],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::Get(v8::internal::Handle<v8::internal::JSObject>, v8::internal::InternalIndex)",93957338325328,93957338325438],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedSmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)0> >::SetLength(v8::internal::Handle<v8::internal::JSArray>, unsigned int)",93957338325504,93957338325632],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastHoleySmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)1> >::CollectValuesOrEntries(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArray>, bool, int*, v8::internal::PropertyFilter)",93957338326096,93957338326941],["v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedSmiElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)0> >::AddElementsToKeyAccumulator(v8::internal::Handle<v8::internal::JSObject>, v8::internal::KeyAccumulator*, v8::internal::AddKeyConversion)",93957338328176,93957338328583],["v8::internal::TurboAssembler::I8x16Popcnt(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341945840,93957341947144],["v8::internal::TurboAssembler::S128Select(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341951200,93957341951484],["v8::internal::TurboAssembler::Tzcntq(v8::internal::Register, v8::internal::Operand)",93957341952336,93957341952470],["v8::internal::TurboAssembler::Popcntl(v8::internal::Register, v8::internal::Operand)",93957341952816,93957341952853],["v8::internal::TurboAssembler::Ret(int, v8::internal::Register)",93957341952960,93957341953052],["v8::internal::TurboAssembler::AssertZeroExtended(v8::internal::Register)",93957341953232,93957341953376],["v8::internal::TurboAssembler::Prologue()",93957341953440,93957341953524],["v8::internal::TurboAssembler::LeaveFrame(v8::internal::StackFrame::Type)",93957341953616,93957341953782],["posix_fallocate",139871564257136,139871564257195],["sync_file_range",139871564258320,139871564258483],["__open64_nocancel",139871564259024,139871564259192],["__pread64_nocancel",139871564259408,139871564259452],["v8::internal::TorqueInterfaceDescriptor<1, 0, true>::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336162928,93957336163022],["v8::internal::ProxyGetPropertyDescriptor::ParameterTypes()",93957336163440,93957336163456],["v8::internal::TypedArrayMergeSortDescriptor::ParameterTypes()",93957336163696,93957336163717],["v8::internal::WasmTrapDescriptor::ParameterTypes()",93957336163952,93957336163962],["v8::internal::ReturnTwoValuesDescriptor::ParameterTypes()",93957336164160,93957336164171],["v8::internal::CopyDescriptor::ParameterTypes()",93957336164192,93957336164212],["v8::internal::WasmMemoryGrowDescriptor::ParameterTypes()",93957336164256,93957336164266],["v8::internal::WasmTaggedToFloat64Descriptor::ReturnType()",93957336164336,93957336164385],["v8::internal::(anonymous namespace)::StringSharedKey::AsHandle(v8::internal::Isolate*)",93957338269776,93957338270149],["v8::internal::NativeContext::OptimizedCodeListHead()",93957338280192,93957338280223],["v8::internal::DebugInfo::SetDebugExecutionMode(v8::internal::DebugInfo::ExecutionMode)",93957338281248,93957338281279],["v8::internal::DebugInfo::ClearBreakPoint(v8::internal::Isolate*, v8::internal::Handle<v8::internal::DebugInfo>, v8::internal::Handle<v8::internal::BreakPoint>)",93957338282000,93957338282399],["v8::internal::DebugInfo::FindBreakPointInfo(v8::internal::Isolate*, v8::internal::Handle<v8::internal::DebugInfo>, v8::internal::Handle<v8::internal::BreakPoint>)",93957338285824,93957338286212],["v8::internal::BreakPointInfo::GetBreakPointById(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BreakPointInfo>, int)",93957338286560,93957338286832],["v8::internal::ElementsKindToShiftSize(v8::internal::ElementsKind)",93957338287424,93957338287489],["v8::internal::GetSequenceIndexFromFastElementsKind(v8::internal::ElementsKind)",93957338287648,93957338287688],["v8::internal::UnionElementsKindUptoSize(v8::internal::ElementsKind*, v8::internal::ElementsKind)",93957338287872,93957338288011],["v8::internal::CopyFastNumberJSArrayElementsToTypedArray(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long)",93957338289456,93957338289857],["v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)19, unsigned short>::TryCopyElementsFastNumber(v8::internal::Context, v8::internal::JSArray, v8::internal::JSTypedArray, unsigned long, unsigned long)",93957338291728,93957338293594],["v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)23, float>::TryCopyElementsFastNumber(v8::internal::Context, v8::internal::JSArray, v8::internal::JSTypedArray, unsigned long, unsigned long)",93957338295456,93957338296837],["v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)25, unsigned char>::TryCopyElementsFastNumber(v8::internal::Context, v8::internal::JSArray, v8::internal::JSTypedArray, unsigned long, unsigned long)",93957338297856,93957338299316],["v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)17, unsigned char>::CopyElementsFromTypedArray(v8::internal::JSTypedArray, v8::internal::JSTypedArray, unsigned long, unsigned long)",93957338299472,93957338303541],["v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)21, unsigned int>::CopyElementsFromTypedArray(v8::internal::JSTypedArray, v8::internal::JSTypedArray, unsigned long, unsigned long)",93957338307536,93957338311409],["v8::internal::(anonymous namespace)::TypedElementsAccessor<(v8::internal::ElementsKind)24, double>::CopyElementsFromTypedArray(v8::internal::JSTypedArray, v8::internal::JSTypedArray, unsigned long, unsigned long)",93957338315584,93957338317975],["v8::internal::TurboAssembler::I64x2ExtMul(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister, bool, bool)",93957341942512,93957341942883],["v8::internal::TurboAssembler::I64x2Abs(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341948528,93957341948871],["v8::internal::TurboAssembler::Abspd(v8::internal::XMMRegister)",93957341950976,93957341951084],["v8::internal::TurboAssembler::Lzcntl(v8::internal::Register, v8::internal::Operand)",93957341951664,93957341951825],["v8::internal::TurboAssembler::Tzcntq(v8::internal::Register, v8::internal::Register)",93957341952192,93957341952326],["v8::internal::TurboAssembler::Tzcntl(v8::internal::Register, v8::internal::Register)",93957341952480,93957341952614],["v8::internal::TurboAssembler::Popcntl(v8::internal::Register, v8::internal::Register)",93957341952768,93957341952805],["v8::internal::TurboAssembler::Popcntq(v8::internal::Register, v8::internal::Register)",93957341952864,93957341952901],["fts64_children",139871564255856,139871564256165],["sendfile",139871564257792,139871564257828],["futimens",139871564258160,139871564258196],["fallocate",139871564258496,139871564258659],["v8::internal::ArrayTimSortDescriptor::ParameterTypes()",93957336162800,93957336162810],["v8::internal::TorqueInterfaceDescriptor<1, 0, false>::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336163088,93957336163185],["v8::internal::RegExpSplitDescriptor::ParameterTypes()",93957336163408,93957336163424],["v8::internal::ProxySetPrototypeOfDescriptor::ParameterTypes()",93957336163472,93957336163488],["v8::internal::CreateTypedArrayDescriptor::ParameterTypes()",93957336163664,93957336163684],["v8::internal::TorqueInterfaceDescriptor<1, 3, false>::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336163728,93957336163866],["v8::internal::MergeAtDescriptor::ReturnType()",93957336163888,93957336163937],["v8::internal::TorqueInterfaceDescriptor<2, 2, true>::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336163968,93957336164095],["v8::internal::DependentCode::InstallDependency(v8::internal::Isolate*, v8::internal::MaybeObjectHandle const&, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::DependentCode::DependencyGroup)",93957338263200,93957338263700],["v8::internal::(anonymous namespace)::CodeKey::IsMatch(v8::internal::Object)",93957338274624,93957338274639],["v8::internal::Context::global_proxy()",93957338276240,93957338276276],["v8::internal::String::IsOneByteEqualTo(v8::internal::Vector<char const>)",93957338280528,93957338280657],["v8::internal::DebugInfo::HasBreakInfo() const",93957338281200,93957338281216],["v8::internal::DebugInfo::SetBreakAtEntry()",93957338281600,93957338281621],["v8::internal::DebugInfo::HasBreakPoint(v8::internal::Isolate*, int)",93957338281728,93957338281912],["v8::internal::DebugInfo::SetBreakPoint(v8::internal::Isolate*, v8::internal::Handle<v8::internal::DebugInfo>, int, v8::internal::Handle<v8::internal::BreakPoint>)",93957338283184,93957338284208],["v8::internal::DebugInfo::GetBreakPointCount(v8::internal::Isolate*)",93957338285584,93957338285812],["v8::internal::DebugInfo::HasCoverageInfo() const",93957338286224,93957338286241],["v8::internal::DebugInfo::GetSideEffectState(v8::internal::Isolate*)",93957338286400,93957338286560],["v8::internal::CoverageInfo::InitializeSlot(int, int, int)",93957338286832,93957338286885],["v8::internal::CoverageInfo::CoverageInfoPrint(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, std::__1::unique_ptr<char [], std::__1::default_delete<char []> >)",93957338286928,93957338287422],["v8::internal::ElementsKindToByteSize(v8::internal::ElementsKind)",93957338287504,93957338287574],["v8::internal::GetFastElementsKindFromSequenceIndex(int)",93957338287616,93957338287635],["v8::internal::GetNextTransitionElementsKind(v8::internal::ElementsKind)",93957338287696,93957338287747],["v8::internal::TurboAssembler::Pinsrq(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::Operand, unsigned char)",93957341940832,93957341940990],["v8::internal::TurboAssembler::I16x8ExtMulHighU(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341944320,93957341944999],["v8::internal::TurboAssembler::I32x4TruncSatF64x2SZero(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341947408,93957341947930],["v8::internal::TurboAssembler::I64x2GeS(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341949248,93957341949779],["v8::internal::TurboAssembler::I8x16Swizzle(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister, bool)",93957341950656,93957341950962],["v8::internal::TurboAssembler::Negpd(v8::internal::XMMRegister)",93957341951088,93957341951196],["v8::internal::TurboAssembler::Lzcntl(v8::internal::Register, v8::internal::Register)",93957341951488,93957341951649],["v8::internal::TurboAssembler::Lzcntq(v8::internal::Register, v8::internal::Register)",93957341951840,93957341952001],["fts64_open",139871564253376,139871564254181],["ppoll",139871564256336,139871564256576],["posix_fallocate64",139871564257728,139871564257787],["copy_file_range",139871564257840,139871564258029],["v8::internal::TorqueInterfaceDescriptor<1, 7, true>::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336162304,93957336162443],["v8::internal::CreateRegExpLiteralDescriptor::ParameterTypes()",93957336162864,93957336162880],["v8::internal::GetTemplateObjectDescriptor::ParameterTypes()",93957336163040,93957336163056],["v8::internal::TorqueInterfaceDescriptor<1, 1, false>::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336163216,93957336163347],["v8::internal::PromiseRejectReactionJobDescriptor::ParameterTypes()",93957336163392,93957336163408],["v8::internal::StringIndexOfDescriptor::ParameterTypes()",93957336163424,93957336163440],["v8::internal::ProxySetPropertyDescriptor::ParameterTypes()",93957336163456,93957336163472],["v8::internal::TorqueInterfaceDescriptor<1, 5, true>::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336163488,93957336163620],["v8::internal::AbstractCode::SourcePosition(int)",93957338257024,93957338257371],["v8::internal::Code::SetMarkedForDeoptimization(char const*)",93957338266416,93957338266456],["v8::internal::CompilationCacheTable::Age(v8::internal::Isolate*)",93957338273664,93957338274065],["v8::internal::ScriptContextTable::Lookup(v8::internal::Isolate*, v8::internal::ScriptContextTable, v8::internal::String, v8::internal::ScriptContextTable::LookupResult*)",93957338275328,93957338275518],["v8::internal::Context::module()",93957338276112,93957338276192],["v8::internal::NativeContext::AddOptimizedCode(v8::internal::Code)",93957338279840,93957338280110],["v8::internal::NativeContext::DeoptimizedCodeListHead()",93957338280304,93957338280335],["v8::internal::NativeContext::ResetErrorsThrown()",93957338281072,93957338281091],["v8::internal::DebugInfo::IsEmpty() const",93957338281168,93957338281194],["v8::internal::DebugInfo::DebugExecutionMode() const",93957338281216,93957338281233],["v8::internal::DebugInfo::ClearBreakInfo(v8::internal::Isolate*)",93957338281280,93957338281585],["v8::internal::DebugInfo::ClearBreakAtEntry()",93957338281632,93957338281650],["v8::internal::DebugInfo::CanBreakAtEntry() const",93957338281696,93957338281713],["v8::internal::BreakPointInfo::GetBreakPointCount(v8::internal::Isolate*)",93957338281920,93957338281988],["v8::internal::BreakPointInfo::ClearBreakPoint(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BreakPointInfo>, v8::internal::Handle<v8::internal::BreakPoint>)",93957338282400,93957338283173],["v8::internal::BreakPointInfo::SetBreakPoint(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BreakPointInfo>, v8::internal::Handle<v8::internal::BreakPoint>)",93957338284208,93957338285348],["v8::internal::TurboAssembler::Pinsrb(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::Operand, unsigned char)",93957341939456,93957341939611],["v8::internal::TurboAssembler::I16x8SConvertI8x16High(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341941616,93957341941824],["v8::internal::TurboAssembler::I16x8ExtMulLow(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister, bool)",93957341943296,93957341943789],["v8::internal::TurboAssembler::S128Store32Lane(v8::internal::Operand, v8::internal::XMMRegister, unsigned char)",93957341945600,93957341945771],["v8::internal::TurboAssembler::F64x2ConvertLowI32x4U(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341947152,93957341947405],["v8::internal::TurboAssembler::I32x4TruncSatF64x2UZero(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341947936,93957341948519],["v8::internal::TurboAssembler::I64x2GtS(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341948880,93957341949241],["v8::internal::TurboAssembler::I16x8ExtAddPairwiseI8x16S(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341949792,93957341950104],["unlinkat",139871564245888,139871564245921],["fts64_read",139871564254448,139871564255805],["__poll",139871564256176,139871564256331],["posix_fadvise",139871564256576,139871564256604],["v8::internal::TorqueInterfaceDescriptor<1, 6, true>::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336161744,93957336161875],["v8::internal::FastCreateDataPropertyDescriptor::ParameterTypes()",93957336162624,93957336162640],["v8::internal::FulfillPromiseDescriptor::ParameterTypes()",93957336162832,93957336162843],["v8::internal::CreateShallowObjectLiteralDescriptor::ParameterTypes()",93957336162896,93957336162912],["v8::internal::MergeAtDescriptor::ParameterTypes()",93957336163024,93957336163035],["v8::internal::ForInNextDescriptor::ParameterTypes()",93957336163056,93957336163077],["v8::internal::GetIteratorWithFeedbackDescriptor::ParameterTypes()",93957336163200,93957336163216],["v8::internal::CallIteratorWithFeedbackDescriptor::ParameterTypes()",93957336163360,93957336163376],["v8::internal::Code::SafepointTableAddress() const",93957338253632,93957338253801],["v8::internal::DeoptimizationData::New(v8::internal::Isolate*, int, v8::internal::AllocationType)",93957338258896,93957338258912],["v8::internal::DependentCode::InsertWeakCode(v8::internal::Isolate*, v8::internal::Handle<v8::internal::DependentCode>, v8::internal::DependentCode::DependencyGroup, v8::internal::MaybeObjectHandle const&)",93957338263920,93957338264796],["v8::internal::CompilationCacheTable::LookupEval(v8::internal::Handle<v8::internal::CompilationCacheTable>, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::Context>, v8::internal::LanguageMode, int)",93957338267344,93957338268261],["v8::internal::CompilationCacheTable::PutRegExp(v8::internal::Isolate*, v8::internal::Handle<v8::internal::CompilationCacheTable>, v8::internal::Handle<v8::internal::String>, v8::base::Flags<v8::internal::JSRegExp::Flag, int>, v8::internal::Handle<v8::internal::FixedArray>)",93957338272368,93957338272773],["v8::internal::(anonymous namespace)::StringSharedKey::IsMatch(v8::internal::Object)",93957338274272,93957338274486],["v8::internal::Context::Initialize(v8::internal::Isolate*)",93957338274992,93957338275285],["v8::internal::Context::declaration_context()",93957338275728,93957338275815],["v8::internal::Context::extension_receiver()",93957338276048,93957338276108],["v8::internal::Context::global_object()",93957338276192,93957338276228],["v8::internal::Context::Lookup(v8::internal::Handle<v8::internal::Context>, v8::internal::Handle<v8::internal::String>, v8::internal::ContextLookupFlags, int*, v8::internal::PropertyAttributes*, v8::internal::InitializationFlag*, v8::internal::VariableMode*, bool*)",93957338276288,93957338279834],["v8::internal::NativeContext::SetOptimizedCodeListHead(v8::internal::Object)",93957338280112,93957338280181],["v8::internal::NativeContext::SetDeoptimizedCodeListHead(v8::internal::Object)",93957338280224,93957338280293],["v8::internal::Context::ErrorMessageForCodeGenerationFromStrings()",93957338280336,93957338280522],["v8::internal::Context::IntrinsicIndexForName(unsigned char const*, int)",93957338280672,93957338281065],["v8::internal::NativeContext::IncrementErrorsThrown()",93957338281104,93957338281131],["v8::internal::TurboAssembler::RetpolineCall(v8::internal::Register)",93957341938208,93957341938432],["v8::internal::TurboAssembler::Pinsrd(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::Operand, unsigned char)",93957341940256,93957341940600],["v8::internal::TurboAssembler::I32x4SConvertI16x8High(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341941136,93957341941344],["v8::internal::TurboAssembler::I64x2SConvertI32x4High(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341942096,93957341942286],["v8::internal::TurboAssembler::I32x4ExtMul(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister, bool, bool)",93957341942896,93957341943282],["v8::internal::TurboAssembler::I16x8ExtMulHighS(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341943792,93957341944320],["v8::internal::TurboAssembler::I16x8Q15MulRSatS(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341945008,93957341945586],["v8::internal::TurboAssembler::S128Store64Lane(v8::internal::Operand, v8::internal::XMMRegister, unsigned char)",93957341945776,93957341945826],["symlinkat",139871564245696,139871564245729],["ftw",139871564249952,139871564249967],["fts64_close",139871564254192,139871564254434],["fts64_set",139871564255808,139871564255844],["v8::internal::GetPropertyDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336158512,93957336158627],["v8::internal::TorqueInterfaceDescriptor<1, 3, true>::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336162064,93957336162199],["v8::internal::TorqueInterfaceDescriptor<1, 1, true>::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336162480,93957336162608],["v8::internal::CheckNumberInRangeDescriptor::ParameterTypes()",93957336162768,93957336162784],["v8::internal::WasmThrowDescriptor::ParameterTypes()",93957336162816,93957336162827],["v8::internal::FastNewFunctionContextEvalDescriptor::ParameterTypes()",93957336162848,93957336162859],["v8::internal::RejectPromiseDescriptor::ParameterTypes()",93957336162880,93957336162896],["v8::internal::TorqueInterfaceDescriptor<1, 0, false>::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957336162912,93957336162927],["v8::internal::MutableBigInt::TruncateToNBits(v8::internal::Isolate*, int, v8::internal::Handle<v8::internal::BigInt>)",93957338250640,93957338251204],["v8::internal::Code::GetSafepointEntry(v8::internal::Isolate*, unsigned long)",93957338255424,93957338255492],["v8::internal::Code::IsNativeContextIndependent(v8::internal::Isolate*)",93957338258144,93957338258570],["v8::internal::BytecodeArray::CopyBytecodesTo(v8::internal::BytecodeArray)",93957338262656,93957338262869],["v8::internal::MaybeObjectHandle::operator->() const",93957338263808,93957338263866],["v8::internal::DependentCode::Compact()",93957338265216,93957338265840],["v8::internal::StdoutStream::~StdoutStream()",93957338266512,93957338266599],["v8::internal::CompilationCacheTable::LookupCode(v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957338268704,93957338269054],["v8::internal::CompilationCacheTable::PutEval(v8::internal::Handle<v8::internal::CompilationCacheTable>, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::Context>, v8::internal::Handle<v8::internal::FeedbackCell>, int)",93957338270160,93957338272366],["v8::internal::CompilationCacheTable::PutCode(v8::internal::Isolate*, v8::internal::Handle<v8::internal::CompilationCacheTable>, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::Code>)",93957338272784,93957338273662],["v8::internal::CompilationCacheTable::Remove(v8::internal::Object)",93957338274080,93957338274257],["v8::internal::(anonymous namespace)::RegExpKey::IsMatch(v8::internal::Object)",93957338274496,93957338274623],["v8::internal::ScriptContextTable::Extend(v8::internal::Handle<v8::internal::ScriptContextTable>, v8::internal::Handle<v8::internal::Context>)",93957338274640,93957338274991],["v8::internal::Context::scope_info()",93957338275296,93957338275324],["v8::internal::Context::is_declaration_context()",93957338275520,93957338275715],["v8::internal::Context::closure_context()",93957338275824,93957338275987],["v8::internal::TurboAssembler::Call(v8::internal::Operand)",93957341937136,93957341937220],["v8::internal::TurboAssembler::Pmaddubsw(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::Operand)",93957341938800,93957341938932],["v8::internal::TurboAssembler::Pinsrw(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::Operand, unsigned char)",93957341939760,93957341939915],["v8::internal::TurboAssembler::Pinsrd(v8::internal::XMMRegister, v8::internal::Operand, unsigned char)",93957341940640,93957341940661],["v8::internal::TurboAssembler::Pshufb(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341940992,93957341941124],["v8::internal::TurboAssembler::I32x4UConvertI16x8High(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341941344,93957341941613],["v8::internal::TurboAssembler::I16x8UConvertI8x16High(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341941824,93957341942093],["v8::internal::TurboAssembler::I64x2UConvertI32x4High(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341942288,93957341942507],["isatty",139871564245488,139871564245550],["readlinkat",139871564245792,139871564245828],["rmdir",139871564245936,139871564245969],["nftw",139871564249968,139871564250020],["v8::internal::CloneObjectWithVectorDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336157424,93957336157559],["v8::internal::AddDescriptor::ReturnType()",93957336159040,93957336159089],["v8::internal::TorqueInterfaceDescriptor<1, 2, true>::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336161920,93957336162047],["v8::internal::SortCompareUserFnDescriptor::ParameterTypes()",93957336162272,93957336162288],["v8::internal::ArrayMapLoopContinuationDescriptor::ParameterTypes()",93957336162448,93957336162474],["v8::internal::NegateDescriptor::ParameterTypes()",93957336162608,93957336162618],["v8::internal::TorqueInterfaceDescriptor<1, 4, true>::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336162640,93957336162768],["v8::internal::AddDescriptor::ParameterTypes()",93957336162784,93957336162795],["v8::internal::BigInt::FromNumber(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)",93957338246592,93957338246782],["v8::internal::MutableBigInt_AbsoluteCompare(unsigned long, unsigned long)",93957338253216,93957338253257],["v8::internal::Code::ClearEmbeddedObjects(v8::internal::Heap*)",93957338254048,93957338254189],["v8::internal::Code::OffHeapInstructionStart(v8::internal::Isolate*, unsigned long) const",93957338256128,93957338256378],["v8::internal::Code::CanDeoptAt(v8::internal::Isolate*, unsigned long)",93957338257696,93957338257878],["v8::internal::Code::OptimizedCodeIterator::OptimizedCodeIterator(v8::internal::Isolate*)",93957338258688,93957338258726],["v8::internal::DeoptimizationData::GetInlinedFunction(int)",93957338258928,93957338258986],["v8::internal::BytecodeArray::IsOld() const",93957338262912,93957338262929],["v8::internal::StdoutStream::StdoutStream()",93957338263712,93957338263802],["v8::internal::DependentCode::DependencyGroupName(v8::internal::DependentCode::DependencyGroup)",93957338263872,93957338263911],["v8::internal::DependentCode::New(v8::internal::Isolate*, v8::internal::DependentCode::DependencyGroup, v8::internal::MaybeObjectHandle const&, v8::internal::Handle<v8::internal::DependentCode>)",93957338264800,93957338265201],["v8::internal::DependentCode::MarkCodeForDeoptimization(v8::internal::DependentCode::DependencyGroup)",93957338265840,93957338266405],["v8::internal::DependentCode::DeoptimizeDependentCodeGroup(v8::internal::DependentCode::DependencyGroup)",93957338266464,93957338266507],["v8::internal::CompilationCacheTable::LookupScript(v8::internal::Handle<v8::internal::CompilationCacheTable>, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Context>, v8::internal::LanguageMode)",93957338266608,93957338267330],["v8::internal::CompilationCacheTable::LookupRegExp(v8::internal::Handle<v8::internal::String>, v8::base::Flags<v8::internal::JSRegExp::Flag, int>)",93957338268272,93957338268691],["v8::internal::CompilationCacheTable::PutScript(v8::internal::Handle<v8::internal::CompilationCacheTable>, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Context>, v8::internal::LanguageMode, v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957338269056,93957338269774],["v8::internal::TurboAssembler::Move(v8::internal::Register, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::RelocInfo::Mode)",93957341936384,93957341936505],["v8::internal::TurboAssembler::LoadCodeObjectEntry(v8::internal::Register, v8::internal::Register)",93957341937520,93957341938028],["v8::internal::TurboAssembler::RetpolineJump(v8::internal::Register)",93957341938496,93957341938645],["v8::internal::TurboAssembler::Pextrd(v8::internal::Register, v8::internal::XMMRegister, unsigned char)",93957341939056,93957341939297],["v8::internal::TurboAssembler::Pinsrw(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::Register, unsigned char)",93957341939616,93957341939760],["v8::internal::TurboAssembler::Pinsrd(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::Register, unsigned char)",93957341939920,93957341940250],["v8::internal::TurboAssembler::Pinsrd(v8::internal::XMMRegister, v8::internal::Register, unsigned char)",93957341940608,93957341940625],["v8::internal::TurboAssembler::Pinsrq(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::Register, unsigned char)",93957341940672,93957341940819],["lchown",139871564243504,139871564243537],["linkat",139871564245600,139871564245636],["readlink",139871564245744,139871564245777],["unlink",139871564245840,139871564245873],["v8::internal::InterpreterCEntry2Descriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336156368,93957336156503],["v8::internal::ArrayConstructorDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957336157968,93957336158076],["v8::internal::JSTrampolineDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336158768,93957336158891],["_ZNSt3__16vectorIN2v88internal11MachineTypeENS_9allocatorIS3_EEE6insertIPS3_EENS_9enable_ifIXaasr27__is_cpp17_forward_iteratorIT_EE5valuesr16is_constructibleIS3_NS_15iterator_traitsISA_E9referenceEEE5valueENS_11__wrap_iterIS8_EEE4typeENSE_IPKS3_EESA_SA_",93957336159136,93957336161698],["v8::internal::ArrayFindLoopContinuationDescriptor::ParameterTypes()",93957336161888,93957336161909],["v8::internal::StringCharAtDescriptor::ParameterTypes()",93957336162048,93957336162059],["v8::internal::ToNameDescriptor::ReturnType()",93957336162208,93957336162257],["v8::internal::JoinStackPopDescriptor::ParameterTypes()",93957336162288,93957336162299],["v8::internal::BigInt::BitwiseAnd(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigInt>, v8::internal::Handle<v8::internal::BigInt>)",93957338240752,93957338240966],["v8::internal::MutableBigInt::InternalMultiplyAdd(v8::internal::BigIntBase, unsigned long, unsigned long, int, v8::internal::MutableBigInt)",93957338249136,93957338249386],["v8::internal::BigInt::FromUint64(v8::internal::Isolate*, unsigned long)",93957338252544,93957338252788],["unsigned long std::__1::__function::__policy_invoker<unsigned long (unsigned long, unsigned long)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::MutableBigInt::AbsoluteOr(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigIntBase>, v8::internal::Handle<v8::internal::BigIntBase>, v8::internal::MutableBigInt)::$_2, unsigned long (unsigned long, unsigned long)> >(std::__1::__function::__policy_storage const*, unsigned long, unsigned long)",93957338253504,93957338253516],["v8::internal::Code::handler_table_size() const",93957338254000,93957338254015],["v8::internal::Code::FlushICache() const",93957338254336,93957338254357],["v8::internal::Code::OffHeapInstructionStart() const",93957338255664,93957338255876],["v8::internal::Code::OffHeapMetadataStart() const",93957338256672,93957338256827],["v8::internal::AbstractCode::SourceStatementPosition(int)",93957338257376,93957338257686],["v8::internal::Code::IsIsolateIndependent(v8::internal::Isolate*)",93957338257888,93957338258142],["v8::internal::Code::Inlines(v8::internal::SharedFunctionInfo)",93957338258576,93957338258686],["v8::internal::Code::OptimizedCodeIterator::Next()",93957338258736,93957338258883],["v8::internal::DeoptimizationData::Empty(v8::internal::Isolate*)",93957338258912,93957338258925],["v8::internal::BytecodeArray::Disassemble(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)",93957338258992,93957338262641],["v8::internal::BytecodeArray::MakeOlder()",93957338262880,93957338262904],["v8::internal::DependentCode::SetDependentCode(v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::DependentCode>)",93957338262944,93957338263194],["v8::internal::TurboAssembler::MoveNumber(v8::internal::Register, double)",93957341934256,93957341934342],["v8::internal::TurboAssembler::Jump(v8::internal::ExternalReference const&)",93957341936640,93957341936739],["v8::internal::TurboAssembler::EntryFromBuiltinIndexAsOperand(v8::internal::Builtins::Name)",93957341937296,93957341937381],["v8::internal::TurboAssembler::JumpCodeObject(v8::internal::Register, v8::internal::JumpMode)",93957341938080,93957341938181],["v8::internal::TurboAssembler::RetpolineCall(unsigned long, v8::internal::RelocInfo::Mode)",93957341938432,93957341938481],["v8::internal::TurboAssembler::Pmaddwd(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::Operand)",93957341938656,93957341938793],["v8::internal::TurboAssembler::Shufps(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister, unsigned char)",93957341938944,93957341939051],["v8::internal::TurboAssembler::Pinsrb(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::Register, unsigned char)",93957341939312,93957341939456],["getwd",139871564243040,139871564243206],["ttyname",139871564243600,139871564244522],["link",139871564245552,139871564245585],["symlink",139871564245648,139871564245681],["v8::internal::ArrayNArgumentsConstructorDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336155280,93957336155403],["v8::internal::I64ToBigIntDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336156912,93957336157027],["v8::internal::CallTrampoline_BaselineDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336157696,93957336157819],["v8::internal::Construct_BaselineDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336158224,93957336158359],["v8::internal::JSTrampolineDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957336158640,93957336158758],["v8::internal::TorqueInterfaceDescriptor<1, 8, true>::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336158896,93957336159028],["v8::internal::ArraySomeLoopContinuationDescriptor::ParameterTypes()",93957336159104,93957336159130],["v8::internal::ArrayFilterLoopContinuationDescriptor::ParameterTypes()",93957336161712,93957336161738],["v8::internal::MutableBigInt::MultiplyAccumulate(v8::internal::Handle<v8::internal::BigIntBase>, unsigned long, v8::internal::Handle<v8::internal::MutableBigInt>, int)",93957338233664,93957338233961],["v8::internal::BigInt::CompareToString(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigInt>, v8::internal::Handle<v8::internal::String>)",93957338243792,93957338243946],["v8::internal::BigInt::BigIntShortPrint(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)",93957338247840,93957338247972],["v8::internal::BigInt::DigitsByteLengthForBitfield(unsigned int)",93957338250016,93957338250031],["v8::internal::BigInt::AsUintN(v8::internal::Isolate*, unsigned long, v8::internal::Handle<v8::internal::BigInt>)",93957338252000,93957338252264],["v8::internal::BigInt::AsUint64(bool*)",93957338252912,93957338253007],["unsigned long std::__1::__function::__policy_invoker<unsigned long (unsigned long, unsigned long)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::MutableBigInt::AbsoluteAnd(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigIntBase>, v8::internal::Handle<v8::internal::BigIntBase>, v8::internal::MutableBigInt)::$_0, unsigned long (unsigned long, unsigned long)> >(std::__1::__function::__policy_storage const*, unsigned long, unsigned long)",93957338253472,93957338253484],["v8::internal::CodeKindToString(v8::internal::CodeKind)",93957338253536,93957338253575],["v8::internal::Code::HandlerTableAddress() const",93957338253808,93957338253986],["v8::internal::Code::has_handler_table() const",93957338254016,93957338254034],["v8::internal::Code::Relocate(long)",93957338254192,93957338254329],["v8::internal::Code::CopyFromNoFlush(v8::internal::Heap*, v8::internal::CodeDesc const&)",93957338254368,93957338255409],["v8::internal::Code::OffHeapInstructionSize() const",93957338255504,93957338255658],["v8::internal::Code::OffHeapInstructionEnd() const",93957338255888,93957338256125],["v8::internal::Code::OffHeapInstructionEnd(v8::internal::Isolate*, unsigned long) const",93957338256384,93957338256662],["v8::internal::Code::OffHeapMetadataEnd() const",93957338256832,93957338257012],["v8::internal::TurboAssembler::Set(v8::internal::Operand, long)",93957341933648,93957341933787],["v8::internal::TurboAssembler::Move(v8::internal::XMMRegister, unsigned long)",93957341935232,93957341935948],["v8::internal::TurboAssembler::MoveStringConstant(v8::internal::Register, v8::internal::StringConstantBase const*, v8::internal::RelocInfo::Mode)",93957341936608,93957341936618],["v8::internal::TurboAssembler::TailCallBuiltin(int)",93957341936768,93957341937062],["v8::internal::TurboAssembler::Call(unsigned long, v8::internal::RelocInfo::Mode)",93957341937232,93957341937281],["v8::internal::TurboAssembler::CallBuiltinByIndex(v8::internal::Register)",93957341937392,93957341937514],["v8::internal::TurboAssembler::CallCodeObject(v8::internal::Register)",93957341938032,93957341938068],["v8::internal::TurboAssembler::Ret()",93957341938192,93957341938204],["creat",139871564240944,139871564241083],["chown",139871564243408,139871564243441],["fchownat",139871564243552,139871564243588],["ttyname_r",139871564244528,139871564245488],["v8::internal::TypeConversionDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336154160,93957336154275],["v8::internal::ApiGetterDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336155840,93957336155963],["v8::internal::WasmFloat32ToNumberDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336156656,93957336156771],["v8::internal::BigIntToI64Descriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336157168,93957336157283],["v8::internal::CloneObjectBaselineDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336157568,93957336157691],["v8::internal::CallTrampoline_WithFeedbackDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336157824,93957336157959],["v8::internal::ArrayConstructorDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336158080,93957336158215],["v8::internal::CppBuiltinAdaptorDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336158368,93957336158503],["v8::internal::Handle<v8::internal::BigInt> v8::internal::BigInt::Zero<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*, v8::internal::AllocationType)",93957338228672,93957338228923],["v8::internal::BigInt::Subtract(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigInt>, v8::internal::Handle<v8::internal::BigInt>)",93957338238208,93957338238363],["v8::internal::BigInt::BitwiseOr(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigInt>, v8::internal::Handle<v8::internal::BigInt>)",93957338242256,93957338242470],["v8::internal::BigInt::CompareToNumber(v8::internal::Handle<v8::internal::BigInt>, v8::internal::Handle<v8::internal::Object>)",93957338244656,93957338244770],["v8::internal::BigInt::ToNumber(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigInt>)",93957338247120,93957338247364],["v8::internal::MutableBigInt::AbsoluteSub(v8::internal::MutableBigInt, v8::internal::BigInt, v8::internal::BigInt)",93957338248208,93957338248403],["v8::internal::MutableBigInt::SpecialLeftShift(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigIntBase>, int, v8::internal::MutableBigInt::SpecialLeftShiftMode)",93957338249424,93957338249969],["v8::internal::BigInt::FromSerializedDigits(v8::internal::Isolate*, unsigned int, v8::internal::Vector<unsigned char const>)",93957338250080,93957338250381],["v8::internal::MutableBigInt::TruncateAndSubFromPowerOfTwo(v8::internal::Isolate*, int, v8::internal::Handle<v8::internal::BigInt>, bool)",93957338251216,93957338251996],["v8::internal::BigInt::FromInt64(v8::internal::Isolate*, long)",93957338252272,93957338252532],["v8::internal::BigInt::AsInt64(bool*)",93957338252800,93957338252904],["v8::internal::MutableBigInt_AbsoluteAddAndCanonicalize(unsigned long, unsigned long, unsigned long)",93957338253008,93957338253202],["v8::internal::MutableBigInt_AbsoluteSubAndCanonicalize(unsigned long, unsigned long, unsigned long)",93957338253264,93957338253458],["unsigned long std::__1::__function::__policy_invoker<unsigned long (unsigned long, unsigned long)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::MutableBigInt::AbsoluteAndNot(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigIntBase>, v8::internal::Handle<v8::internal::BigIntBase>, v8::internal::MutableBigInt)::$_1, unsigned long (unsigned long, unsigned long)> >(std::__1::__function::__policy_storage const*, unsigned long, unsigned long)",93957338253488,93957338253503],["unsigned long std::__1::__function::__policy_invoker<unsigned long (unsigned long, unsigned long)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::MutableBigInt::AbsoluteXor(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigIntBase>, v8::internal::Handle<v8::internal::BigIntBase>, v8::internal::MutableBigInt)::$_3, unsigned long (unsigned long, unsigned long)> >(std::__1::__function::__policy_storage const*, unsigned long, unsigned long)",93957338253520,93957338253532],["v8::internal::CodeKindToMarker(v8::internal::CodeKind)",93957338253584,93957338253620],["v8::internal::TurboAssembler::Cvttss2siq(v8::internal::Register, v8::internal::XMMRegister)",93957341931088,93957341931157],["v8::internal::TurboAssembler::Push(v8::internal::Immediate)",93957341934144,93957341934154],["v8::internal::TurboAssembler::Pslld(v8::internal::XMMRegister, unsigned char)",93957341934976,93957341935098],["v8::internal::TurboAssembler::Psrlq(v8::internal::XMMRegister, unsigned char)",93957341936080,93957341936202],["v8::internal::TurboAssembler::Push(v8::internal::Handle<v8::internal::HeapObject>)",93957341936512,93957341936600],["v8::internal::MacroAssembler::Pop(v8::internal::Register)",93957341936624,93957341936634],["v8::internal::TurboAssembler::Jump(v8::internal::Operand)",93957341936752,93957341936762],["v8::internal::MacroAssembler::JumpToInstructionStream(unsigned long)",93957341937072,93957341937124],["__dup2",139871564240752,139871564240785],["fchdir",139871564241136,139871564241169],["get_current_dir_name",139871564243216,139871564243397],["fchown",139871564243456,139871564243489],["v8::internal::ForInPrepareDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957336153424,93957336153442],["v8::internal::Compare_WithFeedbackDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336154704,93957336154839],["v8::internal::ArraySingleArgumentConstructorDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336155552,93957336155689],["v8::internal::BaselineLeaveFrameDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336156112,93957336156239],["v8::internal::ForInPrepareDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336156512,93957336156647],["v8::internal::WasmFloat64ToNumberDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336156784,93957336156899],["v8::internal::I32PairToBigIntDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336157040,93957336157167],["v8::internal::BigIntToI32PairDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336157296,93957336157423],["v8::internal::BackingStore::AttachSharedWasmMemoryObject(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmMemoryObject>)",93957338224112,93957338224131],["v8::internal::MutableBigInt::Copy(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigIntBase>)",93957338230752,93957338230939],["v8::internal::BigInt::Remainder(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigInt>, v8::internal::Handle<v8::internal::BigInt>)",93957338236448,93957338237041],["v8::internal::BigInt::SignedRightShift(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigInt>, v8::internal::Handle<v8::internal::BigInt>)",93957338240416,93957338240472],["v8::internal::BigInt::BitwiseXor(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigInt>, v8::internal::Handle<v8::internal::BigInt>)",93957338241504,93957338241718],["v8::internal::BigInt::Increment(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigInt>)",93957338242976,93957338243457],["v8::internal::BigInt::EqualToNumber(v8::internal::Handle<v8::internal::BigInt>, v8::internal::Handle<v8::internal::Object>)",93957338244128,93957338244222],["v8::internal::MutableBigInt::ToStringBasePowerOfTwo(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigIntBase>, int, v8::internal::ShouldThrow)",93957338244912,93957338245508],["v8::internal::BigInt::FromObject(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)",93957338246784,93957338247111],["v8::internal::MutableBigInt::ToDouble(v8::internal::Handle<v8::internal::BigIntBase>)",93957338247376,93957338247833],["v8::internal::MutableBigInt::AbsoluteAdd(v8::internal::MutableBigInt, v8::internal::BigInt, v8::internal::BigInt)",93957338247984,93957338248205],["v8::internal::MutableBigInt::AbsoluteBitwiseOp(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigIntBase>, v8::internal::Handle<v8::internal::BigIntBase>, v8::internal::MutableBigInt, v8::internal::MutableBigInt::ExtraDigitsHandling, v8::internal::MutableBigInt::SymmetricOp, std::__1::function<unsigned long (unsigned long, unsigned long)> const&)",93957338248416,93957338249128],["v8::internal::BigInt::InplaceMultiplyAdd(v8::internal::FreshlyAllocatedBigInt, unsigned long, unsigned long)",93957338249392,93957338249416],["v8::internal::BigInt::GetBitfieldForSerialization() const",93957338249984,93957338250008],["v8::internal::BigInt::SerializeDigits(unsigned char*)",93957338250032,93957338250068],["v8::internal::BigInt::AsIntN(v8::internal::Isolate*, unsigned long, v8::internal::Handle<v8::internal::BigInt>)",93957338250384,93957338250634],["v8::internal::TurboAssembler::Cvtqui2ss(v8::internal::XMMRegister, v8::internal::Register)",93957341929632,93957341930142],["v8::internal::TurboAssembler::Cvttsd2uiq(v8::internal::Register, v8::internal::Operand, v8::internal::Label*)",93957341931408,93957341931985],["v8::internal::TurboAssembler::SmiUntag(v8::internal::Register, v8::internal::Register)",93957341933856,93957341933905],["v8::internal::TurboAssembler::Move(v8::internal::Register, v8::internal::Immediate)",93957341934176,93957341934191],["v8::internal::TurboAssembler::Move(v8::internal::XMMRegister, unsigned int)",93957341934352,93957341934972],["v8::internal::TurboAssembler::Psrld(v8::internal::XMMRegister, unsigned char)",93957341935104,93957341935226],["v8::internal::TurboAssembler::Psllq(v8::internal::XMMRegister, unsigned char)",93957341935952,93957341936074],["v8::internal::TurboAssembler::Move(v8::internal::XMMRegister, unsigned long, unsigned long)",93957341936208,93957341936376],["lockf",139871564239952,139871564240243],["__pipe",139871564240848,139871564240881],["chdir",139871564241088,139871564241121],["getcwd",139871564241184,139871564243029],["v8::internal::LoadWithVectorDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957336152576,93957336152737],["v8::internal::NoContextDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336153648,93957336153761],["v8::internal::CallWithSpread_BaselineDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336154416,93957336154551],["v8::internal::ConstructWithSpread_WithFeedbackDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336154992,93957336155136],["v8::internal::ArrayNoArgumentConstructorDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336155408,93957336155543],["v8::internal::CEntry1ArgvOnStackDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336155696,93957336155840],["v8::internal::BaselineOutOfLinePrologueDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336155968,93957336156112],["v8::internal::InterpreterCEntry1Descriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336156240,93957336156363],["v8::internal::FillDigits64(unsigned long, v8::internal::Vector<char>, int*)",93957338216048,93957338217182],["v8::internal::BackingStore::WrapAllocation(void*, unsigned long, void (*)(void*, unsigned long, void*), void*, v8::internal::SharedFlag)",93957338226432,93957338226543],["v8::internal::Handle<v8::internal::BigInt> v8::internal::BigInt::Finalize<v8::internal::Isolate>(v8::internal::Handle<v8::internal::FreshlyAllocatedBigInt>, bool)",93957338229520,93957338229734],["v8::internal::MutableBigInt::AbsoluteAddOne(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigIntBase>, bool, v8::internal::MutableBigInt)",93957338231824,93957338232358],["v8::internal::MutableBigInt::AbsoluteDivSmall(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigIntBase>, unsigned long, v8::internal::Handle<v8::internal::MutableBigInt>*, unsigned long*)",93957338234496,93957338234895],["v8::internal::MutableBigInt::AbsoluteAdd(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigInt>, v8::internal::Handle<v8::internal::BigInt>, bool)",93957338237216,93957338237728],["v8::internal::MutableBigInt::RightShiftByAbsolute(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigIntBase>, v8::internal::Handle<v8::internal::BigIntBase>)",93957338238432,93957338239401],["v8::internal::BigInt::CompareToBigInt(v8::internal::Handle<v8::internal::BigInt>, v8::internal::Handle<v8::internal::BigInt>)",93957338240528,93957338240627],["v8::internal::MutableBigInt::BitwiseAnd(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigInt>, v8::internal::Handle<v8::internal::BigInt>)",93957338240976,93957338241493],["v8::internal::MutableBigInt::BitwiseXor(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigInt>, v8::internal::Handle<v8::internal::BigInt>)",93957338241728,93957338242242],["v8::internal::MutableBigInt::BitwiseOr(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigInt>, v8::internal::Handle<v8::internal::BigInt>)",93957338242480,93957338242973],["v8::internal::BigInt::Decrement(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigInt>)",93957338243472,93957338243787],["v8::internal::BigInt::EqualToString(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigInt>, v8::internal::Handle<v8::internal::String>)",93957338243952,93957338244125],["v8::internal::BigInt::CompareToDouble(v8::internal::Handle<v8::internal::BigInt>, double)",93957338244224,93957338244655],["v8::internal::BigInt::ToString(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigInt>, int, v8::internal::ShouldThrow)",93957338244784,93957338244900],["v8::internal::MutableBigInt::ToStringGeneric(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigIntBase>, int, v8::internal::ShouldThrow)",93957338245520,93957338246581],["v8::internal::TurboAssembler::Cvtqsi2ss(v8::internal::XMMRegister, v8::internal::Register)",93957341928448,93957341928577],["v8::internal::TurboAssembler::Cvttss2si(v8::internal::Register, v8::internal::XMMRegister)",93957341930800,93957341930866],["v8::internal::TurboAssembler::Cvttsd2siq(v8::internal::Register, v8::internal::XMMRegister)",93957341931248,93957341931317],["v8::internal::TurboAssembler::Cvttss2uiq(v8::internal::Register, v8::internal::Operand, v8::internal::Label*)",93957341932544,93957341933113],["v8::internal::TurboAssembler::SmiUntag(v8::internal::Register)",93957341933792,93957341933841],["v8::internal::TurboAssembler::Push(v8::internal::Smi)",93957341933920,93957341934139],["v8::internal::TurboAssembler::Move(v8::internal::Register, v8::internal::Operand)",93957341934160,93957341934176],["v8::internal::TurboAssembler::Move(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341934192,93957341934241],["eaccess",139871564238880,139871564239208],["__close",139871564240560,139871564240699],["dup3",139871564240800,139871564240833],["pipe2",139871564240896,139871564240929],["v8::internal::LoadWithReceiverBaselineDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957336151328,93957336151489],["v8::internal::GrowArrayElementsDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957336153088,93957336153217],["v8::internal::TorqueInterfaceDescriptor<1, 5, false>::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957336153488,93957336153506],["v8::internal::LoadGlobalBaselineDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336153904,93957336154031],["v8::internal::TypeConversionNoContextDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336154288,93957336154403],["v8::internal::CallWithSpread_WithFeedbackDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336154560,93957336154697],["v8::internal::Construct_WithFeedbackDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336154848,93957336154985],["v8::internal::ConstructWithArrayLike_WithFeedbackDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336155136,93957336155273],["double v8::internal::InternalStringToIntDouble<4, unsigned short const*, unsigned short const*>(unsigned short const*, unsigned short const*, bool, bool)",93957338205920,93957338206766],["v8::internal::GlobalBackingStoreRegistry::Unregister(v8::internal::BackingStore*)",93957338221264,93957338221836],["v8::internal::BackingStore::RemoveSharedWasmMemoryObjects(v8::internal::Isolate*)",93957338225152,93957338225162],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<void const*, std::__1::weak_ptr<v8::internal::BackingStore> >, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<void const*, std::__1::weak_ptr<v8::internal::BackingStore> >, std::__1::__unordered_map_hasher<void const*, std::__1::__hash_value_type<void const*, std::__1::weak_ptr<v8::internal::BackingStore> >, std::__1::hash<void const*>, std::__1::equal_to<void const*>, true>, std::__1::__unordered_map_equal<void const*, std::__1::__hash_value_type<void const*, std::__1::weak_ptr<v8::internal::BackingStore> >, std::__1::equal_to<void const*>, std::__1::hash<void const*>, true>, std::__1::allocator<std::__1::__hash_value_type<void const*, std::__1::weak_ptr<v8::internal::BackingStore> > > >::__emplace_unique_key_args<void const*, std::__1::pair<void const* const, std::__1::weak_ptr<v8::internal::BackingStore> > >(void const* const&, std::__1::pair<void const* const, std::__1::weak_ptr<v8::internal::BackingStore> >&&)",93957338227104,93957338228001],["v8::internal::MaybeHandle<v8::internal::MutableBigInt> v8::internal::MutableBigInt::New<v8::internal::Isolate>(v8::internal::Isolate*, int, v8::internal::AllocationType)",93957338229184,93957338229307],["v8::internal::MutableBigInt::NewFromInt(v8::internal::Isolate*, int)",93957338229952,93957338230230],["v8::internal::BigInt::BitwiseNot(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigInt>)",93957338231200,93957338231462],["v8::internal::MaybeHandle<v8::internal::BigInt> v8::internal::ThrowBigIntTooBig<v8::internal::BigInt, v8::internal::Isolate>(v8::internal::Isolate*)",93957338232944,93957338233018],["v8::internal::BigInt::Divide(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigInt>, v8::internal::Handle<v8::internal::BigInt>)",93957338233968,93957338234495],["v8::internal::MutableBigInt::AbsoluteDivLarge(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigIntBase>, v8::internal::Handle<v8::internal::BigIntBase>, v8::internal::Handle<v8::internal::MutableBigInt>*, v8::internal::Handle<v8::internal::MutableBigInt>*)",93957338234896,93957338236448],["v8::internal::BigInt::Add(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigInt>, v8::internal::Handle<v8::internal::BigInt>)",93957338237056,93957338237206],["v8::internal::MutableBigInt::AbsoluteSub(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigInt>, v8::internal::Handle<v8::internal::BigInt>, bool)",93957338237728,93957338238197],["v8::internal::BigInt::LeftShift(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigInt>, v8::internal::Handle<v8::internal::BigInt>)",93957338238368,93957338238424],["v8::internal::MutableBigInt::LeftShiftByAbsolute(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigIntBase>, v8::internal::Handle<v8::internal::BigIntBase>)",93957338239408,93957338240405],["v8::internal::BigInt::UnsignedRightShift(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigInt>, v8::internal::Handle<v8::internal::BigInt>)",93957338240480,93957338240528],["v8::internal::BigInt::EqualToBigInt(v8::internal::BigInt, v8::internal::BigInt)",93957338240640,93957338240749],["v8::internal::TurboAssembler::Cvtss2sd(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341927568,93957341927633],["v8::internal::TurboAssembler::Cvtlui2ss(v8::internal::XMMRegister, v8::internal::Register)",93957341929024,93957341929164],["v8::internal::TurboAssembler::Cvtqui2sd(v8::internal::XMMRegister, v8::internal::Register)",93957341930208,93957341930730],["v8::internal::TurboAssembler::Cvttsd2si(v8::internal::Register, v8::internal::XMMRegister)",93957341930944,93957341931010],["v8::internal::TurboAssembler::Cvttss2siq(v8::internal::Register, v8::internal::Operand)",93957341931168,93957341931235],["v8::internal::TurboAssembler::Cvttsd2siq(v8::internal::Register, v8::internal::Operand)",93957341931328,93957341931395],["v8::internal::TurboAssembler::Cvttsd2uiq(v8::internal::Register, v8::internal::XMMRegister, v8::internal::Label*)",93957341932000,93957341932530],["v8::internal::TurboAssembler::Cvttss2uiq(v8::internal::Register, v8::internal::XMMRegister, v8::internal::Label*)",93957341933120,93957341933642],["access",139871564238832,139871564238866],["__fcntl",139871564239664,139871564239898],["lockf64",139871564240256,139871564240547],["dup",139871564240704,139871564240737],["v8::internal::CEntry1ArgvOnStackDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957336150256,93957336150367],["v8::internal::StoreTransitionDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957336152000,93957336152189],["v8::internal::ApiGetterDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957336152928,93957336153068],["v8::internal::BigIntToI64Descriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957336153360,93957336153378],["v8::internal::GetPropertyDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957336153456,93957336153474],["v8::internal::AllocateDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336153520,93957336153635],["v8::internal::LoadGlobalDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336153776,93957336153903],["v8::internal::FastNewObjectDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957336154032,93957336154159],["v8::internal::DoubleToRadixCString(double, int)",93957338197536,93957338198487],["v8::internal::StringToBigIntHelper<v8::internal::Isolate>::AllocateResult()",93957338210848,93957338210929],["v8::internal::MathRandom::RefillCache(v8::internal::Isolate*, unsigned long)",93957338218272,93957338218641],["v8::internal::BackingStore::TryAllocateWasmMemory(v8::internal::Isolate*, unsigned long, unsigned long, v8::internal::SharedFlag)",93957338222496,93957338223567],["v8::internal::BackingStore::BroadcastSharedWasmMemoryGrow(v8::internal::Isolate*, std::__1::shared_ptr<v8::internal::BackingStore>)",93957338224688,93957338224774],["v8::internal::BackingStore::UpdateSharedWasmMemoryObjects(v8::internal::Isolate*)",93957338225968,93957338225978],["v8::internal::GlobalBackingStoreRegistry::Register(std::__1::shared_ptr<v8::internal::BackingStore>)",93957338226592,93957338227070],["v8::internal::Handle<v8::internal::BigInt> v8::internal::BigInt::Zero<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::AllocationType)",93957338228400,93957338228410],["v8::internal::MaybeHandle<v8::internal::FreshlyAllocatedBigInt> v8::internal::BigInt::AllocateFor<v8::internal::Isolate>(v8::internal::Isolate*, int, int, v8::internal::ShouldThrow, v8::internal::AllocationType)",93957338228928,93957338229172],["v8::internal::MaybeHandle<v8::internal::FreshlyAllocatedBigInt> v8::internal::BigInt::AllocateFor<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*, int, int, v8::internal::ShouldThrow, v8::internal::AllocationType)",93957338229312,93957338229517],["v8::internal::Handle<v8::internal::BigInt> v8::internal::MutableBigInt::MakeImmutable<v8::internal::Isolate>(v8::internal::Handle<v8::internal::MutableBigInt>)",93957338229744,93957338229942],["v8::internal::MutableBigInt::NewFromDouble(v8::internal::Isolate*, double)",93957338230240,93957338230748],["v8::internal::BigInt::UnaryMinus(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigInt>)",93957338230944,93957338231195],["v8::internal::MutableBigInt::AbsoluteSubOne(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigIntBase>, int)",93957338231472,93957338231814],["v8::internal::BigInt::Exponentiate(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigInt>, v8::internal::Handle<v8::internal::BigInt>)",93957338232368,93957338232939],["v8::internal::BigInt::Multiply(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BigInt>, v8::internal::Handle<v8::internal::BigInt>)",93957338233024,93957338233653],["v8::internal::MacroAssembler::CallRuntime(v8::internal::Runtime::Function const*, int, v8::internal::SaveFPRegsMode)",93957341925344,93957341925599],["v8::internal::TurboAssembler::Cvtlsi2sd(v8::internal::XMMRegister, v8::internal::Register)",93957341927904,93957341928036],["v8::internal::TurboAssembler::Cvtqsi2sd(v8::internal::XMMRegister, v8::internal::Register)",93957341928736,93957341928871],["v8::internal::TurboAssembler::Cvtlui2sd(v8::internal::XMMRegister, v8::internal::Register)",93957341929312,93957341929458],["v8::internal::TurboAssembler::Cvtqui2ss(v8::internal::XMMRegister, v8::internal::Operand)",93957341930144,93957341930193],["v8::internal::TurboAssembler::Cvtqui2sd(v8::internal::XMMRegister, v8::internal::Operand)",93957341930736,93957341930785],["v8::internal::TurboAssembler::Cvttss2si(v8::internal::Register, v8::internal::Operand)",93957341930880,93957341930944],["v8::internal::TurboAssembler::Cvttsd2si(v8::internal::Register, v8::internal::Operand)",93957341931024,93957341931088],["faccessat",139871564239216,139871564239662],["flock",139871564239904,139871564239937],["v8::internal::HandlerTable::LookupRange(int, int*, v8::internal::HandlerTable::CatchPrediction*)",93957336099888,93957336100237],["v8::internal::LoadDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957336150720,93957336150860],["v8::internal::StoreGlobalWithVectorDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957336151648,93957336151809],["v8::internal::BaselineLeaveFrameDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957336152320,93957336152449],["v8::internal::StoreWithVectorDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957336152752,93957336152927],["v8::internal::NoContextDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957336153072,93957336153084],["v8::internal::ArrayNArgumentsConstructorDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957336153232,93957336153350],["v8::internal::TorqueInterfaceDescriptor<1, 4, false>::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957336153392,93957336153410],["v8::internal::MaybeHandle<v8::internal::BigInt> v8::internal::BigIntLiteral<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*, char const*)",93957338190048,93957338190201],["double v8::internal::InternalStringToIntDouble<1, unsigned char const*, unsigned char const*>(unsigned char const*, unsigned char const*, bool, bool)",93957338200672,93957338201260],["void v8::internal::StringToIntHelper<v8::internal::LocalIsolate>::DetectRadixInternal<unsigned short const*>(unsigned short const*, int)",93957338208592,93957338209241],["v8::internal::DoubleToAscii(double, v8::internal::DtoaMode, int, v8::internal::Vector<char>, int*, int*, int*)",93957338211184,93957338211497],["v8::internal::MathRandom::InitializeContext(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Context>)",93957338217792,93957338218206],["v8::internal::BignumStrtod(v8::internal::Vector<char const>, int, double)",93957338220304,93957338220807],["v8::internal::BackingStore::Allocate(v8::internal::Isolate*, unsigned long, v8::internal::SharedFlag, v8::internal::InitializedFlag)",93957338221856,93957338222373],["v8::internal::BackingStore::CopyWasmMemory(v8::internal::Isolate*, unsigned long)",93957338223776,93957338223893],["v8::internal::GlobalBackingStoreRegistry::AddSharedWasmMemoryObject(v8::internal::Isolate*, v8::internal::BackingStore*, v8::internal::Handle<v8::internal::WasmMemoryObject>)",93957338224144,93957338224678],["v8::internal::GlobalBackingStoreRegistry::BroadcastSharedWasmMemoryGrow(v8::internal::Isolate*, std::__1::shared_ptr<v8::internal::BackingStore>)",93957338224784,93957338225141],["v8::internal::GlobalBackingStoreRegistry::Purge(v8::internal::Isolate*)",93957338225168,93957338225958],["v8::internal::GlobalBackingStoreRegistry::UpdateSharedWasmMemoryObjects(v8::internal::Isolate*)",93957338225984,93957338226427],["v8::internal::BackingStore::EmptyBackingStore(v8::internal::SharedFlag)",93957338226544,93957338226591],["void* std::__1::__function::__policy_invoker<void* (unsigned long)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::BackingStore::Allocate(v8::internal::Isolate*, unsigned long, v8::internal::SharedFlag, v8::internal::InitializedFlag)::$_0, void* (unsigned long)> >(std::__1::__function::__policy_storage const*, unsigned long)",93957338227072,93957338227102],["void std::__1::vector<std::__1::shared_ptr<v8_inspector::AsyncStackTrace>, std::__1::allocator<std::__1::shared_ptr<v8_inspector::AsyncStackTrace> > >::__push_back_slow_path<std::__1::shared_ptr<v8_inspector::AsyncStackTrace> const&>(std::__1::shared_ptr<v8_inspector::AsyncStackTrace> const&)",93957338228016,93957338228398],["v8::internal::Handle<v8::internal::BigInt> v8::internal::MutableBigInt::Zero<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::AllocationType)",93957338228416,93957338228667],["v8::internal::TurboAssembler::CallRecordWriteStub(v8::internal::Register, v8::internal::Register, v8::internal::RememberedSetAction, v8::internal::SaveFPRegsMode, unsigned long)",93957341923632,93957341923661],["v8::internal::TurboAssembler::PushCallerSaved(v8::internal::SaveFPRegsMode, v8::internal::Register, v8::internal::Register, v8::internal::Register)",93957341926144,93957341926813],["v8::internal::TurboAssembler::Cvtsd2ss(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341927712,93957341927794],["v8::internal::TurboAssembler::Cvtlsi2ss(v8::internal::XMMRegister, v8::internal::Register)",93957341928192,93957341928318],["v8::internal::TurboAssembler::Cvtqsi2ss(v8::internal::XMMRegister, v8::internal::Operand)",93957341928592,93957341928723],["v8::internal::TurboAssembler::Cvtqsi2sd(v8::internal::XMMRegister, v8::internal::Operand)",93957341928880,93957341929017],["v8::internal::TurboAssembler::Cvtlui2ss(v8::internal::XMMRegister, v8::internal::Operand)",93957341929168,93957341929309],["v8::internal::TurboAssembler::Cvtlui2sd(v8::internal::XMMRegister, v8::internal::Operand)",93957341929472,93957341929619],["v8::internal::HandlerTable::SetRangeStart(int, int)",93957336099536,93957336099555],["v8::internal::CallDescriptors::InitializeOncePerProcess()",93957336101440,93957336149948],["v8::internal::FastNewObjectDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957336150496,93957336150607],["v8::internal::LoadGlobalWithVectorDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957336151008,93957336151148],["v8::internal::StoreGlobalDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957336151504,93957336151644],["v8::internal::StoreDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957336151824,93957336151985],["v8::internal::BaselineOutOfLinePrologueDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957336152192,93957336152314],["v8::internal::TypeConversionDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957336152464,93957336152572],["v8::internal::Bignum::MultiplyByPowerOfTen(int)",93957338182496,93957338183313],["v8::internal::StringToBigIntHelper<v8::internal::Isolate>::CheckTermination()",93957338194384,93957338194450],["v8::internal::NumberParseIntHelper::ResultMultiplyAdd(unsigned int, unsigned int)",93957338199824,93957338199858],["double v8::internal::InternalStringToIntDouble<5, unsigned char const*, unsigned char const*>(unsigned char const*, unsigned char const*, bool, bool)",93957338203024,93957338203663],["v8::internal::StringToIntHelper<v8::internal::LocalIsolate>::ParseInt()",93957338207664,93957338208095],["bool v8::internal::StringToIntHelper<v8::internal::LocalIsolate>::ParseChunkInternal<unsigned short const*>(unsigned short const*)",93957338209648,93957338210110],["v8::internal::StringToBigIntHelper<v8::internal::LocalIsolate>::AllocateResult()",93957338210976,93957338211057],["v8::internal::BiggestPowerTen(unsigned int, int, unsigned int*, int*)",93957338213840,93957338214137],["v8::internal::FillFractionals(unsigned long, int, int, v8::internal::Vector<char>, int*, int*)",93957338217184,93957338217792],["v8::internal::MathRandom::ResetContext(v8::internal::Context)",93957338218208,93957338218259],["v8::internal::Strtod(v8::internal::Vector<char const>, int)",93957338218656,93957338220299],["v8::internal::BackingStore::~BackingStore()",93957338220816,93957338221254],["v8::internal::BackingStore::ReleaseReservation(unsigned long)",93957338221840,93957338221854],["v8::internal::BackingStore::ReserveAddressSpace(unsigned long)",93957338222384,93957338222495],["v8::internal::BackingStore::AllocateWasmMemory(v8::internal::Isolate*, unsigned long, unsigned long, v8::internal::SharedFlag)",93957338223568,93957338223762],["v8::internal::BackingStore::GrowWasmMemoryInPlace(v8::internal::Isolate*, unsigned long, unsigned long)",93957338223904,93957338224104],["v8::internal::TurboAssembler::SaveRegisters(unsigned int)",93957341921424,93957341921969],["v8::internal::TurboAssembler::Assert(v8::internal::Condition, v8::internal::AbortReason)",93957341924448,93957341924529],["v8::internal::TurboAssembler::Jump(v8::internal::Handle<v8::internal::Code>, v8::internal::RelocInfo::Mode, v8::internal::Condition)",93957341925696,93957341925864],["v8::internal::TurboAssembler::Movdqa(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341927488,93957341927516],["v8::internal::TurboAssembler::Cvtss2sd(v8::internal::XMMRegister, v8::internal::Operand)",93957341927648,93957341927712],["v8::internal::TurboAssembler::Cvtsd2ss(v8::internal::XMMRegister, v8::internal::Operand)",93957341927808,93957341927895],["v8::internal::TurboAssembler::Cvtlsi2sd(v8::internal::XMMRegister, v8::internal::Operand)",93957341928048,93957341928182],["v8::internal::TurboAssembler::Cvtlsi2ss(v8::internal::XMMRegister, v8::internal::Operand)",93957341928320,93957341928448],["v8::internal::HandlerTable::HandlerTable(unsigned long, int, v8::internal::HandlerTable::EncodingMode)",93957336099184,93957336099240],["v8::internal::HandlerTable::LengthForRange(int)",93957336099664,93957336099675],["v8::internal::CallInterfaceDescriptorData::InitializePlatformSpecific(int, v8::internal::Register const*)",93957336100384,93957336100706],["v8::internal::CallInterfaceDescriptor::DebugName() const",93957336150064,93957336150131],["v8::internal::InterpreterCEntry1Descriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957336150368,93957336150486],["v8::internal::TailCallOptimizedCodeSlotDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957336150608,93957336150712],["v8::internal::LoadGlobalDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957336150864,93957336150993],["v8::internal::LoadWithReceiverAndVectorDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957336151152,93957336151327],["v8::internal::Ticker::~Ticker()",93957338176880,93957338176951],["v8::internal::Bignum::DivideModuloIntBignum(v8::internal::Bignum const&)",93957338187536,93957338188582],["double v8::internal::InternalStringToDouble<unsigned char const*, unsigned char const*>(unsigned char const*, unsigned char const*, int, double)",93957338190448,93957338192128],["v8::internal::DoubleToFixedCString(double, int)",93957338195776,93957338196336],["v8::internal::TryStringToDouble(v8::internal::LocalIsolate*, v8::internal::Handle<v8::internal::String>, int)",93957338198624,93957338198870],["double v8::internal::NumberParseIntHelper::HandlePowerOfTwoCase<unsigned char const*>(unsigned char const*)",93957338200384,93957338200514],["double v8::internal::InternalStringToIntDouble<3, unsigned char const*, unsigned char const*>(unsigned char const*, unsigned char const*, bool, bool)",93957338201824,93957338202382],["double v8::internal::InternalStringToIntDouble<2, unsigned short const*, unsigned short const*>(unsigned short const*, unsigned short const*, bool, bool)",93957338204416,93957338205167],["double v8::internal::InternalStringToIntDouble<5, unsigned short const*, unsigned short const*>(unsigned short const*, unsigned short const*, bool, bool)",93957338206768,93957338207651],["void v8::internal::StringToIntHelper<v8::internal::LocalIsolate>::DetectRadixInternal<unsigned char const*>(unsigned char const*, int)",93957338208096,93957338208583],["bool v8::internal::StringToIntHelper<v8::internal::LocalIsolate>::ParseChunkInternal<unsigned char const*>(unsigned char const*)",93957338209248,93957338209638],["double v8::internal::InternalStringToIntDouble<3, char*, char*>(char*, char*, bool, bool)",93957338210112,93957338210839],["v8::internal::StringToBigIntHelper<v8::internal::LocalIsolate>::ResultMultiplyAdd(unsigned int, unsigned int)",93957338210944,93957338210965],["v8::internal::DiyFp::Multiply(v8::internal::DiyFp const&)",93957338211072,93957338211176],["v8::internal::FastDtoa(double, v8::internal::FastDtoaMode, int, v8::internal::Vector<char>, int*, int*)",93957338211504,93957338213839],["v8::internal::FastFixedDtoa(double, int, v8::internal::Vector<char>, int*, int*)",93957338214144,93957338216047],["v8::internal::TurboAssembler::LoadAnyTaggedField(v8::internal::Register, v8::internal::Operand)",93957341919904,93957341920012],["v8::internal::TurboAssembler::Move(v8::internal::Register, v8::internal::Smi)",93957341922960,93957341923139],["v8::internal::MacroAssembler::AssertNotSmi(v8::internal::Register)",93957341923968,93957341924064],["v8::internal::TurboAssembler::Abort(v8::internal::AbortReason)",93957341924576,93957341925091],["v8::internal::TurboAssembler::Set(v8::internal::Register, long)",93957341925600,93957341925691],["v8::internal::TurboAssembler::RequiredStackSizeForCallerSaved(v8::internal::SaveFPRegsMode, v8::internal::Register, v8::internal::Register, v8::internal::Register) const",93957341925872,93957341926137],["v8::internal::TurboAssembler::PopCallerSaved(v8::internal::SaveFPRegsMode, v8::internal::Register, v8::internal::Register, v8::internal::Register)",93957341926816,93957341927487],["v8::internal::TurboAssembler::Movapd(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341927520,93957341927565],["v8::internal::StringSearch<unsigned char, unsigned short>::BoyerMooreSearch(v8::internal::StringSearch<unsigned char, unsigned short>*, v8::internal::Vector<unsigned short const>, int)",93957336096176,93957336096598],["v8::internal::HandlerTable::GetRangeStart(int) const",93957336099408,93957336099427],["v8::internal::HandlerTable::SetRangeHandler(int, int, v8::internal::HandlerTable::CatchPrediction)",93957336099600,93957336099627],["v8::internal::HandlerTable::EmitReturnEntry(v8::internal::Assembler*, int, int)",93957336099824,93957336099866],["v8::internal::HandlerTable::LookupReturn(int)",93957336100240,93957336100374],["v8::internal::CallInterfaceDescriptorData::InitializePlatformIndependent(v8::base::Flags<v8::internal::CallInterfaceDescriptorData::Flag, int>, int, int, v8::internal::MachineType const*, int, v8::internal::StackArgumentOrder)",93957336100720,93957336101440],["v8::internal::CallDescriptors::TearDown()",93957336149952,93957336150050],["v8::internal::AllocateDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957336150144,93957336150248],["v8::internal::ExistingCodeLogger::LogExistingFunction(v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::AbstractCode>, v8::internal::CodeEventListener::LogEventsAndTags)",93957338170480,93957338171686],["v8::internal::metrics::Recorder::Task::Run()",93957338177920,93957338178327],["v8::internal::Bignum::MultiplyByUInt32(unsigned int)",93957338184832,93957338185058],["v8::internal::PowersOfTenCache::GetCachedPowerForBinaryExponentRange(int, int, v8::internal::DiyFp*, int*)",93957338189552,93957338189650],["v8::internal::StringToDouble(char const*, int, double)",93957338190368,93957338190423],["double v8::internal::InternalStringToDouble<unsigned short const*, unsigned short const*>(unsigned short const*, unsigned short const*, int, double)",93957338192160,93957338194179],["v8::internal::DoubleToCString(double, v8::internal::Vector<char>)",93957338194608,93957338195547],["v8::internal::CreateExponentialRepresentation(char*, int, bool, int)",93957338196592,93957338196890],["v8::internal::StringToDouble(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, int, double)",93957338198496,93957338198610],["v8::internal::IsSpecialIndex(v8::internal::String)",93957338198880,93957338199810],["v8::internal::NumberParseIntHelper::HandleSpecialCases()",93957338199872,93957338200379],["double v8::internal::NumberParseIntHelper::HandlePowerOfTwoCase<unsigned short const*>(unsigned short const*)",93957338200528,93957338200657],["double v8::internal::InternalStringToIntDouble<2, unsigned char const*, unsigned char const*>(unsigned char const*, unsigned char const*, bool, bool)",93957338201264,93957338201822],["double v8::internal::InternalStringToIntDouble<4, unsigned char const*, unsigned char const*>(unsigned char const*, unsigned char const*, bool, bool)",93957338202384,93957338203023],["double v8::internal::InternalStringToIntDouble<1, unsigned short const*, unsigned short const*>(unsigned short const*, unsigned short const*, bool, bool)",93957338203664,93957338204415],["double v8::internal::InternalStringToIntDouble<3, unsigned short const*, unsigned short const*>(unsigned short const*, unsigned short const*, bool, bool)",93957338205168,93957338205919],["v8::internal::TurboAssembler::Move(v8::internal::Register, v8::internal::ExternalReference)",93957341919072,93957341919117],["v8::internal::TurboAssembler::DecompressTaggedPointer(v8::internal::Register, v8::internal::Register)",93957341920080,93957341920182],["v8::internal::TurboAssembler::CallEphemeronKeyBarrier(v8::internal::Register, v8::internal::Register, v8::internal::SaveFPRegsMode)",93957341922544,93957341922766],["v8::internal::TurboAssembler::CallRecordWriteStub(v8::internal::Register, v8::internal::Register, v8::internal::RememberedSetAction, v8::internal::SaveFPRegsMode)",93957341923264,93957341923294],["v8::internal::TurboAssembler::CallBuiltin(int)",93957341923664,93957341923958],["v8::internal::TurboAssembler::CheckPageFlag(v8::internal::Register, v8::internal::Register, int, v8::internal::Condition, v8::internal::Label*, v8::internal::Label::Distance)",93957341924064,93957341924448],["v8::internal::TurboAssembler::AssertUnreachable(v8::internal::AbortReason)",93957341924544,93957341924569],["v8::internal::TurboAssembler::PrepareCallCFunction(int)",93957341925104,93957341925342],["v8::internal::StringSearch<unsigned short, unsigned char>::InitialSearch(v8::internal::StringSearch<unsigned short, unsigned char>*, v8::internal::Vector<unsigned char const>, int)",93957336090896,93957336091989],["v8::internal::StringSearch<unsigned short, unsigned short>::BoyerMooreHorspoolSearch(v8::internal::StringSearch<unsigned short, unsigned short>*, v8::internal::Vector<unsigned short const>, int)",93957336098352,93957336098698],["v8::internal::HandlerTable::HandlerTable(v8::internal::BytecodeArray)",93957336099312,93957336099364],["v8::internal::HandlerTable::GetRangeHandler(int) const",93957336099472,93957336099497],["v8::internal::HandlerTable::SetRangeEnd(int, int)",93957336099568,93957336099590],["v8::internal::HandlerTable::SetRangeData(int, int)",93957336099632,93957336099654],["v8::internal::HandlerTable::EmitReturnTableStart(v8::internal::Assembler*)",93957336099680,93957336099824],["v8::internal::wasm::SimdShuffle::Pack4Lanes(unsigned char const*)",93957336099872,93957336099880],["v8::internal::Logger::CodeLinePosInfoRecordEvent(unsigned long, v8::internal::Vector<unsigned char const>)",93957338165456,93957338165564],["v8::internal::Logger::TearDownAndGetLogFile()",93957338175184,93957338175913],["v8::internal::metrics::Recorder::NotifyIsolateDisposal()",93957338177424,93957338177446],["v8::internal::Bignum::AssignUInt16(unsigned short)",93957338180880,93957338180966],["v8::internal::Bignum::SubtractBignum(v8::internal::Bignum const&)",93957338184000,93957338184627],["v8::internal::Bignum::Square()",93957338185344,93957338186294],["v8::internal::Bignum::Compare(v8::internal::Bignum const&, v8::internal::Bignum const&)",93957338188960,93957338189178],["v8::internal::MaybeHandle<v8::internal::BigInt> v8::internal::BigIntLiteral<v8::internal::Isolate>(v8::internal::Isolate*, char const*)",93957338189728,93957338189881],["v8::internal::StringToBigIntHelper<v8::internal::LocalIsolate>::GetResult()",93957338190208,93957338190354],["v8::internal::StringToDouble(v8::internal::Vector<unsigned char const>, int, double)",93957338190432,93957338190445],["v8::internal::StringToDouble(v8::internal::Vector<unsigned short const>, int, double)",93957338192128,93957338192145],["v8::internal::StringToInt(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, int)",93957338194192,93957338194381],["v8::internal::StringToBigInt(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>)",93957338194464,93957338194604],["v8::internal::IntToCString(int, v8::internal::Vector<char>)",93957338195552,93957338195769],["v8::internal::DoubleToExponentialCString(double, int)",93957338196336,93957338196580],["v8::internal::DoubleToPrecisionCString(double, int)",93957338196896,93957338197527],["void v8::internal::TurboAssembler::Movdqu<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341917632,93957341917660],["v8::internal::TurboAssembler::Push(v8::internal::Operand)",93957341919344,93957341919354],["v8::internal::TurboAssembler::StoreTaggedField(v8::internal::Operand, v8::internal::Register)",93957341920032,93957341920048],["v8::internal::TurboAssembler::JumpIfSmi(v8::internal::Register, v8::internal::Label*, v8::internal::Label::Distance)",93957341920720,93957341920778],["v8::internal::TurboAssembler::RestoreRegisters(unsigned int)",93957341921984,93957341922529],["v8::internal::TurboAssembler::MovePair(v8::internal::Register, v8::internal::Register, v8::internal::Register, v8::internal::Register)",93957341922768,93957341922952],["v8::internal::TurboAssembler::Call(v8::internal::Handle<v8::internal::Code>, v8::internal::RelocInfo::Mode)",93957341923152,93957341923254],["v8::internal::TurboAssembler::CallRecordWriteStub(v8::internal::Register, v8::internal::Register, v8::internal::RememberedSetAction, v8::internal::SaveFPRegsMode, int, unsigned long)",93957341923296,93957341923627],["v8::internal::StringSearch<unsigned char, unsigned char>::LinearSearch(v8::internal::StringSearch<unsigned char, unsigned char>*, v8::internal::Vector<unsigned char const>, int)",93957336087024,93957336087254],["v8::internal::StringSearch<unsigned char, unsigned short>::SingleCharSearch(v8::internal::StringSearch<unsigned char, unsigned short>*, v8::internal::Vector<unsigned short const>, int)",93957336094048,93957336094227],["v8::internal::StringSearch<unsigned short, unsigned short>::LinearSearch(v8::internal::StringSearch<unsigned short, unsigned short>*, v8::internal::Vector<unsigned short const>, int)",93957336096816,93957336097164],["v8::internal::FlushInstructionCache(void*, unsigned long)",93957336099072,93957336099100],["v8::internal::HandlerTable::HandlerTable(v8::internal::wasm::WasmCode const*)",93957336099248,93957336099311],["v8::internal::HandlerTable::HandlerTable(v8::internal::ByteArray)",93957336099376,93957336099408],["v8::internal::HandlerTable::GetRangeEnd(int) const",93957336099440,93957336099462],["v8::internal::HandlerTable::GetRangeData(int) const",93957336099504,93957336099526],["v8::internal::(anonymous namespace)::AppendCodeCreateHeader(v8::internal::Log::MessageBuilder&, v8::internal::CodeEventListener::LogEventsAndTags, v8::internal::CodeKind, unsigned char*, int, unsigned long)",93957338161792,93957338161992],["v8::internal::Logger::ScriptEvent(v8::internal::Logger::ScriptEventType, int)",93957338167456,93957338167711],["v8::internal::Logger::SetUp(v8::internal::Isolate*)",93957338172400,93957338174578],["v8::internal::Profiler::~Profiler()",93957338176560,93957338176605],["v8::internal::Ticker::SampleStack(v8::RegisterState const&)",93957338177040,93957338177342],["v8::internal::metrics::Recorder::Task::~Task()",93957338177760,93957338177833],["v8::internal::GenerateCountedDigits(int, int*, v8::internal::Bignum*, v8::internal::Bignum*, v8::internal::Vector<char>, int*)",93957338180480,93957338180744],["v8::internal::Bignum::AssignBignum(v8::internal::Bignum const&)",93957338181168,93957338181292],["v8::internal::Bignum::AddBignum(v8::internal::Bignum const&)",93957338183328,93957338183988],["v8::internal::Bignum::ShiftLeft(int)",93957338184640,93957338184828],["v8::internal::Bignum::MultiplyByUInt64(unsigned long)",93957338185072,93957338185335],["v8::internal::Bignum::AssignPowerUInt16(unsigned short, int)",93957338186304,93957338187526],["v8::internal::Bignum::SubtractTimes(v8::internal::Bignum const&, int)",93957338188592,93957338188950],["v8::internal::Bignum::PlusCompare(v8::internal::Bignum const&, v8::internal::Bignum const&, v8::internal::Bignum const&)",93957338189184,93957338189537],["v8::internal::PowersOfTenCache::GetCachedPowerForDecimalExponent(int, v8::internal::DiyFp*, int*)",93957338189664,93957338189728],["v8::internal::StringToBigIntHelper<v8::internal::Isolate>::GetResult()",93957338189888,93957338190034],["v8::internal::ApiCallbackDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957341917104,93957341917178],["v8::internal::TurboAssembler::LoadRootRegisterOffset(v8::internal::Register, long)",93957341918592,93957341918702],["v8::internal::TurboAssembler::LoadRoot(v8::internal::Register, v8::internal::RootIndex)",93957341919136,93957341919248],["v8::internal::TurboAssembler::LoadMap(v8::internal::Register, v8::internal::Register)",93957341919568,93957341919793],["v8::internal::TurboAssembler::StoreTaggedField(v8::internal::Operand, v8::internal::Immediate)",93957341920016,93957341920032],["v8::internal::TurboAssembler::StoreTaggedSignedField(v8::internal::Operand, v8::internal::Smi)",93957341920048,93957341920066],["v8::internal::MacroAssembler::RecordWriteField(v8::internal::Register, int, v8::internal::Register, v8::internal::Register, v8::internal::SaveFPRegsMode, v8::internal::RememberedSetAction, v8::internal::SmiCheck)",93957341920192,93957341920720],["v8::internal::MacroAssembler::RecordWrite(v8::internal::Register, v8::internal::Register, v8::internal::Register, v8::internal::SaveFPRegsMode, v8::internal::RememberedSetAction, v8::internal::SmiCheck)",93957341920784,93957341921409],["v8::internal::ExternalReference::call_enter_context_function()",93957336086368,93957336086381],["v8::internal::StringSearch<unsigned char, unsigned char>::BoyerMooreSearch(v8::internal::StringSearch<unsigned char, unsigned char>*, v8::internal::Vector<unsigned char const>, int)",93957336090112,93957336090447],["v8::internal::StringSearch<unsigned short, unsigned char>::PopulateBoyerMooreTable()",93957336092640,93957336093678],["v8::internal::StringSearch<unsigned char, unsigned short>::InitialSearch(v8::internal::StringSearch<unsigned char, unsigned short>*, v8::internal::Vector<unsigned short const>, int)",93957336094528,93957336095764],["v8::internal::StringSearch<unsigned short, unsigned short>::SingleCharSearch(v8::internal::StringSearch<unsigned short, unsigned short>*, v8::internal::Vector<unsigned short const>, int)",93957336096608,93957336096809],["v8::internal::StringSearch<unsigned short, unsigned short>::InitialSearch(v8::internal::StringSearch<unsigned short, unsigned short>*, v8::internal::Vector<unsigned short const>, int)",93957336097168,93957336098345],["v8::internal::StringSearch<unsigned short, unsigned short>::BoyerMooreSearch(v8::internal::StringSearch<unsigned short, unsigned short>*, v8::internal::Vector<unsigned short const>, int)",93957336098704,93957336099065],["v8::internal::HandlerTable::HandlerTable(v8::internal::Code)",93957336099104,93957336099171],["v8::internal::Logger::BuiltinHashEvent(char const*, int)",93957338154800,93957338154978],["v8::internal::Logger::SharedFunctionInfoMoveEvent(unsigned long, unsigned long)",93957338163280,93957338163352],["v8::internal::Logger::FunctionEvent(char const*, int, double, int, int, v8::internal::String)",93957338166272,93957338166479],["v8::internal::Logger::MapEvent(char const*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Map>, char const*, v8::internal::Handle<v8::internal::HeapObject>)",93957338168832,93957338169527],["v8::internal::Logger::LogAccessorCallbacks()",93957338171712,93957338172213],["v8::internal::Logger::file_name() const",93957338175088,93957338175116],["v8::internal::JitLogger::~JitLogger()",93957338176400,93957338176469],["v8::internal::Logger::is_listening_to_code_events()",93957338176672,93957338176710],["v8::internal::Ticker::~Ticker()",93957338176960,93957338177039],["v8::internal::SamplingThread::Run()",93957338177344,93957338177409],["v8::internal::metrics::Recorder::Delay(std::__1::unique_ptr<v8::internal::metrics::Recorder::DelayedEventBase, std::__1::default_delete<v8::internal::metrics::Recorder::DelayedEventBase> >&&)",93957338177456,93957338177759],["v8::internal::metrics::Recorder::Task::~Task()",93957338177840,93957338177916],["v8::internal::BignumDtoa(double, v8::internal::BignumDtoaMode, int, v8::internal::Vector<char>, int*, int*)",93957338178336,93957338180469],["v8::internal::Bignum::Bignum()",93957338180752,93957338180874],["v8::internal::Bignum::AssignUInt64(unsigned long)",93957338180976,93957338181159],["v8::internal::Bignum::AssignDecimalString(v8::internal::Vector<char const>)",93957338181296,93957338182482],["v8::internal::CallWithSpreadDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957341916496,93957341916564],["v8::internal::FrameDropperTrampolineDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957341917424,93957341917482],["v8::internal::TurboAssembler::LoadFromConstantsTable(v8::internal::Register, int)",93957341918176,93957341918476],["v8::internal::TurboAssembler::LoadRootRelative(v8::internal::Register, int)",93957341918736,93957341918820],["v8::internal::TurboAssembler::Push(v8::internal::Register)",93957341919120,93957341919130],["v8::internal::MacroAssembler::PushRoot(v8::internal::RootIndex)",93957341919248,93957341919339],["v8::internal::TurboAssembler::CompareRoot(v8::internal::Register, v8::internal::RootIndex)",93957341919360,93957341919566],["v8::internal::TurboAssembler::DecompressTaggedSigned(v8::internal::Register, v8::internal::Operand)",93957341919808,93957341919889],["v8::internal::ExternalReference::atomic_pair_and_function()",93957336086176,93957336086189],["v8::internal::hash_value(v8::internal::ExternalReference)",93957336086432,93957336086464],["v8::internal::StringSearch<unsigned char, unsigned char>::BoyerMooreHorspoolSearch(v8::internal::StringSearch<unsigned char, unsigned char>*, v8::internal::Vector<unsigned char const>, int)",93957336088416,93957336089056],["v8::internal::StringSearch<unsigned short, unsigned char>::SingleCharSearch(v8::internal::StringSearch<unsigned short, unsigned char>*, v8::internal::Vector<unsigned char const>, int)",93957336090464,93957336090614],["v8::internal::StringSearch<unsigned short, unsigned char>::BoyerMooreHorspoolSearch(v8::internal::StringSearch<unsigned short, unsigned char>*, v8::internal::Vector<unsigned char const>, int)",93957336092000,93957336092631],["v8::internal::StringSearch<unsigned short, unsigned char>::BoyerMooreSearch(v8::internal::StringSearch<unsigned short, unsigned char>*, v8::internal::Vector<unsigned char const>, int)",93957336093680,93957336094040],["v8::internal::StringSearch<unsigned char, unsigned short>::LinearSearch(v8::internal::StringSearch<unsigned char, unsigned short>*, v8::internal::Vector<unsigned short const>, int)",93957336094240,93957336094528],["v8::internal::StringSearch<unsigned char, unsigned short>::BoyerMooreHorspoolSearch(v8::internal::StringSearch<unsigned char, unsigned short>*, v8::internal::Vector<unsigned short const>, int)",93957336095776,93957336096170],["v8::internal::Logger::ProfilerBeginEvent()",93957338151776,93957338151930],["v8::internal::Logger::LogSourceCodeInformation(v8::internal::Handle<v8::internal::AbstractCode>, v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957338156160,93957338157565],["v8::internal::Logger::SetterCallbackEvent(v8::internal::Handle<v8::internal::Name>, unsigned long)",93957338162416,93957338162439],["v8::internal::Logger::CodeDeoptEvent(v8::internal::Handle<v8::internal::Code>, v8::internal::DeoptimizeKind, unsigned long, int, bool)",93957338164688,93957338164840],["v8::internal::Logger::ResourceEvent(char const*, char const*)",93957338165760,93957338166015],["v8::internal::Logger::FunctionEvent(char const*, int, double, int, int, char const*, unsigned long, bool)",93957338166752,93957338166972],["v8::internal::Logger::RuntimeCallTimerEvent()",93957338168096,93957338168235],["v8::internal::Logger::MapCreate(v8::internal::Map)",93957338170224,93957338170449],["v8::internal::Logger::LogCompiledFunctions()",93957338171696,93957338171710],["v8::internal::Logger::LogAllMaps()",93957338172224,93957338172398],["v8::internal::Logger::SetCodeEventHandler(unsigned int, void (*)(v8::JitCodeEvent const*))",93957338174592,93957338175086],["v8::internal::Logger::StopProfilerThread()",93957338175120,93957338175179],["v8::internal::ExistingCodeLogger::LogCodeObject(v8::internal::Object)",93957338175920,93957338176390],["v8::internal::JitLogger::~JitLogger()",93957338176480,93957338176554],["v8::internal::Profiler::~Profiler()",93957338176608,93957338176661],["std::__1::default_delete<v8::internal::Log>::operator()(v8::internal::Log*) const",93957338176720,93957338176878],["v8::internal::DynamicCheckMapsDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957341915872,93957341915937],["v8::internal::ConstructStubDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957341916800,93957341916874],["v8::internal::InterpreterPushArgsThenCallDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957341917264,93957341917329],["void v8::internal::TurboAssembler::Movdqu<v8::internal::XMMRegister, v8::internal::Operand>(v8::internal::XMMRegister, v8::internal::Operand)",93957341917568,93957341917596],["v8::internal::TurboAssembler::ExternalReferenceAsOperand(v8::internal::ExternalReference, v8::internal::Register)",93957341917664,93957341918176],["v8::internal::TurboAssembler::LoadTaggedPointerField(v8::internal::Register, v8::internal::Operand)",93957341918480,93957341918588],["v8::internal::TurboAssembler::Move(v8::internal::Register, v8::internal::Register)",93957341918704,93957341918725],["v8::internal::TurboAssembler::LoadAddress(v8::internal::Register, v8::internal::ExternalReference)",93957341918832,93957341919069],["v8::internal::ExternalReference::call_enqueue_microtask_function()",93957336086000,93957336086013],["v8::internal::ExternalReference::atomic_pair_xor_function()",93957336086272,93957336086285],["v8::internal::ExternalReference::js_finalization_registry_remove_cell_from_unregister_token_map()",93957336086400,93957336086413],["v8::internal::HandleScopeImplementer::EnterMicrotaskContext(v8::internal::Context)",93957336086592,93957336086881],["v8::internal::StringSearch<unsigned char, unsigned char>::InitialSearch(v8::internal::StringSearch<unsigned char, unsigned char>*, v8::internal::Vector<unsigned char const>, int)",93957336087264,93957336088408],["v8::internal::StringSearch<unsigned char, unsigned char>::PopulateBoyerMooreTable()",93957336089056,93957336090103],["noopCurrent(UCharIterator*)",93957336090448,93957336090459],["v8::internal::StringSearch<unsigned short, unsigned char>::LinearSearch(v8::internal::StringSearch<unsigned short, unsigned char>*, v8::internal::Vector<unsigned char const>, int)",93957336090624,93957336090887],["v8::internal::PerfBasicLogger::LogRecordedBuffer(v8::internal::Handle<v8::internal::AbstractCode>, v8::internal::MaybeHandle<v8::internal::SharedFunctionInfo>, char const*, int)",93957338144672,93957338144959],["v8::internal::Logger::AddCodeEventListener(v8::internal::CodeEventListener*)",93957338153600,93957338153702],["v8::internal::Logger::ApiObjectAccess(char const*, v8::internal::JSReceiver)",93957338155456,93957338155632],["v8::internal::Logger::CodeCreateEvent(v8::internal::CodeEventListener::LogEventsAndTags, v8::internal::Handle<v8::internal::AbstractCode>, v8::internal::Handle<v8::internal::Name>)",93957338159408,93957338159860],["v8::internal::Logger::CallbackEvent(v8::internal::Handle<v8::internal::Name>, unsigned long)",93957338162352,93957338162375],["v8::internal::Logger::CodeMoveEvent(v8::internal::AbstractCode, v8::internal::AbstractCode)",93957338162864,93957338163077],["v8::internal::Logger::CodeDisableOptEvent(v8::internal::Handle<v8::internal::AbstractCode>, v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957338163408,93957338163675],["v8::internal::Logger::CodeLinePosInfoRecordEvent(unsigned long, v8::internal::ByteArray)",93957338164976,93957338165080],["v8::internal::Logger::CodeNameEvent(unsigned long, int, char const*)",93957338165568,93957338165759],["v8::internal::Logger::SuspectReadEvent(v8::internal::Name, v8::internal::Object)",93957338166016,93957338166264],["v8::internal::(anonymous namespace)::AppendFunctionMessage(v8::internal::Log::MessageBuilder&, char const*, int, double, int, int, unsigned long)",93957338166480,93957338166741],["v8::internal::Logger::CompilationCacheEvent(char const*, char const*, v8::internal::SharedFunctionInfo)",93957338166976,93957338167447],["v8::internal::Logger::ScriptDetails(v8::internal::Script)",93957338167712,93957338168081],["v8::internal::Logger::ICEvent(char const*, bool, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Object>, char, char, char const*, char const*)",93957338168240,93957338168825],["v8::internal::Logger::MapDetails(v8::internal::Map)",93957338169536,93957338170223],["v8::internal::Logger::LogCodeObjects()",93957338170464,93957338170478],["v8::internal::CompareDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957341915456,93957341915495],["v8::internal::CallTrampolineDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957341916176,93957341916243],["v8::internal::ConstructVarargsDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957341916640,93957341916715],["v8::internal::AbortDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957341916960,93957341917021],["v8::internal::InterpreterDispatchDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957341917184,93957341917255],["v8::internal::InterpreterPushArgsThenConstructDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957341917344,93957341917416],["v8::internal::RunMicrotasksEntryDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957341917488,93957341917555],["void v8::internal::TurboAssembler::Movdqu<v8::internal::Operand, v8::internal::XMMRegister>(v8::internal::Operand, v8::internal::XMMRegister)",93957341917600,93957341917628],["uprv_fmod_68",93957336085840,93957336085850],["v8::internal::ExternalReference::atomic_pair_add_function()",93957336086080,93957336086093],["v8::internal::ExternalReference::atomic_pair_or_function()",93957336086224,93957336086237],["v8::internal::ExternalReference::atomic_pair_compare_exchange_function()",93957336086320,93957336086333],["v8::internal::EnterMicrotaskContextWrapper(v8::internal::HandleScopeImplementer*, unsigned long)",93957336086384,93957336086397],["v8::internal::operator==(v8::internal::ExternalReference, v8::internal::ExternalReference)",93957336086416,93957336086428],["v8::internal::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::ExternalReference)",93957336086464,93957336086584],["v8::internal::StringSearch<unsigned char, unsigned char>::SingleCharSearch(v8::internal::StringSearch<unsigned char, unsigned char>*, v8::internal::Vector<unsigned char const>, int)",93957336086896,93957336087013],["v8::internal::Log::MessageBuilder& v8::internal::Log::MessageBuilder::operator<< <v8::internal::Name>(v8::internal::Name)",93957338140784,93957338140844],["v8::internal::LowLevelLogger::LogRecordedBuffer(v8::internal::wasm::WasmCode const*, char const*, int)",93957338149072,93957338149207],["v8::internal::Logger::TickEvent(v8::internal::TickSample*, bool)",93957338152816,93957338153251],["v8::internal::Logger::ApiSecurityCheck()",93957338154064,93957338154199],["v8::internal::Logger::ApiNamedPropertyAccess(char const*, v8::internal::JSObject, v8::internal::Object)",93957338155024,93957338155229],["v8::internal::Logger::NewEvent(char const*, void*, unsigned long)",93957338155776,93957338155979],["v8::internal::Logger::LogCodeDisassemble(v8::internal::Handle<v8::internal::AbstractCode>)",93957338158128,93957338158939],["v8::internal::Logger::CodeCreateEvent(v8::internal::CodeEventListener::LogEventsAndTags, v8::internal::Handle<v8::internal::AbstractCode>, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::Name>, int, int)",93957338160624,93957338161471],["v8::internal::Logger::CallbackEventInternal(char const*, v8::internal::Handle<v8::internal::Name>, unsigned long)",93957338162000,93957338162345],["v8::internal::Logger::GetterCallbackEvent(v8::internal::Handle<v8::internal::Name>, unsigned long)",93957338162384,93957338162407],["v8::internal::Logger::RegExpCodeCreateEvent(v8::internal::Handle<v8::internal::AbstractCode>, v8::internal::Handle<v8::internal::String>)",93957338162448,93957338162853],["v8::internal::Logger::MoveEventInternal(v8::internal::CodeEventListener::LogEventsAndTags, unsigned long, unsigned long)",93957338163088,93957338163269],["v8::internal::Logger::CodeMovingGCEvent()",93957338163360,93957338163397],["v8::internal::Logger::ProcessDeoptEvent(v8::internal::Handle<v8::internal::Code>, v8::internal::SourcePosition, char const*, char const*)",93957338163680,93957338164683],["v8::internal::Logger::CodeDependencyChangeEvent(v8::internal::Handle<v8::internal::Code>, v8::internal::Handle<v8::internal::SharedFunctionInfo>, char const*)",93957338164848,93957338164970],["v8::internal::(anonymous namespace)::CodeLinePosEvent(v8::internal::JitLogger&, unsigned long, v8::internal::SourcePositionTableIterator&)",93957338165088,93957338165456],["v8::internal::CallFunctionTemplateDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957341915040,93957341915085],["v8::internal::InterpreterPushArgsThenCallDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957341915648,93957341915700],["v8::internal::EphemeronKeyBarrierDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957341916032,93957341916100],["v8::internal::CallForwardVarargsDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957341916336,93957341916404],["v8::internal::ResumeGeneratorDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957341916576,93957341916640],["v8::internal::ConstructForwardVarargsDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957341916720,93957341916794],["v8::internal::ConstructWithArrayLikeDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957341916880,93957341916945],["v8::internal::Compare_BaselineDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957341917024,93957341917092],["v8::internal::ExternalReference::async_event_delegate_address(v8::internal::Isolate*)",93957336085680,93957336085693],["v8::internal::ExternalReference::fast_c_call_caller_fp_address(v8::internal::Isolate*)",93957336085936,93957336085946],["v8::internal::ExternalReference::atomic_pair_store_function()",93957336086032,93957336086045],["v8::internal::ExternalReference::atomic_pair_sub_function()",93957336086128,93957336086141],["v8::internal::atomic_pair_and(long, int, int)",93957336086192,93957336086223],["v8::internal::atomic_pair_or(long, int, int)",93957336086240,93957336086271],["v8::internal::atomic_pair_xor(long, int, int)",93957336086288,93957336086319],["v8::internal::atomic_pair_compare_exchange(long, int, int, int, int)",93957336086336,93957336086365],["v8::internal::Log::MessageBuilder::AppendTwoByteCharacter(char, char)",93957338139696,93957338139845],["v8::internal::CodeEventLogger::NameBuffer::AppendName(v8::internal::Name)",93957338141600,93957338142185],["v8::internal::LowLevelLogger::LowLevelLogger(v8::internal::Isolate*, char const*)",93957338148160,93957338148422],["v8::internal::JitLogger::LogRecordedBuffer(v8::internal::wasm::WasmCode const*, char const*, int)",93957338149904,93957338150779],["v8::internal::Logger::UncheckedStringEvent(char const*, char const*)",93957338152320,93957338152453],["v8::internal::Logger::~Logger()",93957338153344,93957338153553],["v8::internal::Logger::StringEvent(char const*, char const*)",93957338153872,93957338153896],["v8::internal::Logger::TimerEvent(v8::internal::Logger::StartEnd, char const*)",93957338154368,93957338154575],["v8::internal::Logger::is_logging()",93957338154992,93957338155021],["v8::internal::Logger::ApiIndexedPropertyAccess(char const*, v8::internal::JSObject, unsigned int)",93957338155232,93957338155441],["v8::internal::Logger::ApiEntryCall(char const*)",93957338155632,93957338155763],["v8::internal::Logger::DeleteEvent(char const*, void*)",93957338155984,93957338156158],["v8::internal::Logger::EnsureLogScriptSource(v8::internal::Script)",93957338157568,93957338158121],["v8::internal::Logger::CodeCreateEvent(v8::internal::CodeEventListener::LogEventsAndTags, v8::internal::Handle<v8::internal::AbstractCode>, char const*)",93957338158944,93957338159393],["v8::internal::Logger::CodeCreateEvent(v8::internal::CodeEventListener::LogEventsAndTags, v8::internal::Handle<v8::internal::AbstractCode>, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::Name>)",93957338159872,93957338160612],["v8::internal::Logger::CodeCreateEvent(v8::internal::CodeEventListener::LogEventsAndTags, v8::internal::wasm::WasmCode const*, v8::internal::Vector<char const>, char const*, int, int)",93957338161472,93957338161789],["v8::internal::CallInterfaceDescriptor::DefaultInitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*, int)",93957341914576,93957341914645],["v8::internal::ConstructForwardVarargsDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957341915248,93957341915290],["v8::internal::ApiCallbackDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957341915552,93957341915594],["v8::internal::ResumeGeneratorDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957341915776,93957341915821],["v8::internal::RecordWriteDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957341915952,93957341916026],["v8::internal::TypeofDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957341916112,93957341916170],["v8::internal::CallVarargsDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957341916256,93957341916330],["v8::internal::CallFunctionTemplateDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957341916416,93957341916483],["v8::internal::ExternalReference::mutable_big_int_absolute_compare_function()",93957336085552,93957336085565],["v8::internal::ExternalReference::debug_is_active_address(v8::internal::Isolate*)",93957336085744,93957336085761],["v8::internal::ExternalReference::debug_suspended_generator_address(v8::internal::Isolate*)",93957336085872,93957336085889],["v8::internal::ExternalReference::fast_api_call_target_address(v8::internal::Isolate*)",93957336085968,93957336085978],["v8::internal::ExternalReference::atomic_pair_load_function()",93957336086016,93957336086029],["v8::internal::atomic_pair_store(long, int, int)",93957336086048,93957336086066],["v8::internal::atomic_pair_add(long, int, int)",93957336086096,93957336086116],["v8::internal::atomic_pair_sub(long, int, int)",93957336086144,93957336086167],["v8::internal::Log::MessageBuilder::AppendSymbolName(v8::internal::Symbol)",93957338140224,93957338140485],["v8::internal::CodeEventLogger::CodeEventLogger(v8::internal::Isolate*)",93957338141088,93957338141138],["v8::internal::CodeEventLogger::RegExpCodeCreateEvent(v8::internal::Handle<v8::internal::AbstractCode>, v8::internal::Handle<v8::internal::String>)",93957338143984,93957338144214],["v8::internal::ExistingCodeLogger::LogCodeObjects()",93957338145008,93957338145199],["v8::internal::LowLevelLogger::~LowLevelLogger()",93957338148512,93957338148594],["v8::internal::LowLevelLogger::CodeMovingGCEvent()",93957338149440,93957338149459],["v8::internal::Profiler::Engage()",93957338151136,93957338151516],["v8::internal::Profiler::Disengage()",93957338151936,93957338152318],["v8::internal::Profiler::Run()",93957338152464,93957338152814],["v8::internal::Logger::Logger(v8::internal::Isolate*)",93957338153264,93957338153342],["v8::internal::Logger::~Logger()",93957338153568,93957338153596],["v8::internal::Logger::RemoveCodeEventListener(v8::internal::CodeEventListener*)",93957338153712,93957338153858],["v8::internal::Logger::IntPtrTEvent(char const*, long)",93957338153904,93957338154058],["v8::internal::Logger::CurrentTimeEvent()",93957338154208,93957338154364],["v8::internal::Logger::BasicBlockCounterEvent(char const*, int, unsigned int)",93957338154576,93957338154786],["v8::internal::Assembler::pshufd(v8::internal::XMMRegister, v8::internal::XMMRegister, unsigned char)",93957341912416,93957341912597],["v8::internal::TypeofDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957341914848,93957341914886],["v8::internal::CallWithArrayLikeDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957341915136,93957341915181],["v8::internal::ConstructWithArrayLikeDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957341915344,93957341915396],["v8::internal::Compare_BaselineDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957341915504,93957341915550],["v8::internal::InterpreterDispatchDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957341915600,93957341915642],["v8::internal::InterpreterPushArgsThenConstructDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957341915712,93957341915763],["v8::internal::RunMicrotasksEntryDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957341915824,93957341915869],["v8::internal::ExternalReference::copy_fast_number_jsarray_elements_to_typed_array()",93957336085424,93957336085437],["v8::internal::ConvertOneByteToLower(unsigned long, unsigned long)",93957336085616,93957336085626],["v8::internal::ExternalReference::promise_hook_or_debug_is_active_or_async_event_delegate_address(v8::internal::Isolate*)",93957336085712,93957336085725],["v8::internal::ExternalReference::invalidate_prototype_chains_function()",93957336085808,93957336085821],["v8::internal::ExternalReference::mod_two_doubles_operation()",93957336085856,93957336085869],["v8::internal::ExternalReference::debug_restart_fp_address(v8::internal::Isolate*)",93957336085904,93957336085921],["v8::internal::ExternalReference::fast_c_call_caller_pc_address(v8::internal::Isolate*)",93957336085952,93957336085962],["v8::internal::ExternalReference::stack_is_iterable_address(v8::internal::Isolate*)",93957336085984,93957336085997],["v8::internal::Log::MessageBuilder::AppendFormatString(char const*, ...)",93957338139856,93957338140217],["v8::internal::Log::MessageBuilder& v8::internal::Log::MessageBuilder::operator<< <char>(char)",93957338140608,93957338140737],["v8::internal::TimerEventScope<v8::internal::TimerEventDeoptimizeCode>::LogTimerEvent(v8::internal::Logger::StartEnd)",93957338140928,93957338141003],["v8::internal::CodeEventLogger::CodeCreateEvent(v8::internal::CodeEventListener::LogEventsAndTags, v8::internal::Handle<v8::internal::AbstractCode>, char const*)",93957338141200,93957338141424],["v8::internal::CodeEventLogger::CodeCreateEvent(v8::internal::CodeEventListener::LogEventsAndTags, v8::internal::Handle<v8::internal::AbstractCode>, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::Name>, int, int)",93957338142624,93957338143520],["v8::internal::PerfBasicLogger::~PerfBasicLogger()",93957338144496,93957338144573],["v8::internal::PerfBasicLogger::LogRecordedBuffer(v8::internal::wasm::WasmCode const*, char const*, int)",93957338144960,93957338144996],["v8::internal::ExistingCodeLogger::LogCompiledFunctions()",93957338145200,93957338148155],["v8::internal::LowLevelLogger::~LowLevelLogger()",93957338148432,93957338148509],["v8::internal::LowLevelLogger::LogRecordedBuffer(v8::internal::Handle<v8::internal::AbstractCode>, v8::internal::MaybeHandle<v8::internal::SharedFunctionInfo>, char const*, int)",93957338148608,93957338149057],["v8::internal::LowLevelLogger::CodeMoveEvent(v8::internal::AbstractCode, v8::internal::AbstractCode)",93957338149216,93957338149427],["v8::internal::JitLogger::LogRecordedBuffer(v8::internal::Handle<v8::internal::AbstractCode>, v8::internal::MaybeHandle<v8::internal::SharedFunctionInfo>, char const*, int)",93957338149472,93957338149899],["v8::internal::JitLogger::CodeMoveEvent(v8::internal::AbstractCode, v8::internal::AbstractCode)",93957338150784,93957338151134],["v8::internal::Logger::SharedLibraryEvent(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned long, unsigned long, long)",93957338151520,93957338151771],["v8::internal::Assembler::sse4_instr(v8::internal::Operand, v8::internal::XMMRegister, unsigned char, unsigned char, unsigned char, unsigned char, signed char)",93957341910912,93957341911130],["v8::internal::Assembler::dq(unsigned long, v8::internal::RelocInfo::Mode)",93957341913024,93957341913181],["v8::internal::DynamicCheckMapsDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957341914720,93957341914777],["v8::internal::CallVarargsDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957341914944,93957341914986],["v8::internal::CallWithSpreadDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957341915088,93957341915134],["v8::internal::ConstructVarargsDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957341915184,93957341915235],["v8::internal::ConstructStubDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957341915296,93957341915338],["v8::internal::AbortDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957341915408,93957341915446],["v8::internal::(anonymous namespace)::ExternalTwoByteStringGetChars(unsigned long)",93957336085040,93957336085198],["v8::internal::ExternalReference::string_to_array_index_function()",93957336085488,93957336085501],["v8::internal::ExternalReference::check_object_type()",93957336085584,93957336085597],["v8::internal::ExternalReference::cpu_features()",93957336085648,93957336085661],["v8::internal::ExternalReference::promise_hook_or_async_event_delegate_address(v8::internal::Isolate*)",93957336085696,93957336085709],["v8::internal::ExternalReference::debug_execution_mode_address(v8::internal::Isolate*)",93957336085728,93957336085741],["v8::internal::ExternalReference::debug_hook_on_function_call_address(v8::internal::Isolate*)",93957336085776,93957336085793],["v8::internal::InvalidatePrototypeChainsWrapper(unsigned long)",93957336085824,93957336085834],["v8::internal::Log::MessageBuilder& v8::internal::Log::MessageBuilder::operator<< <void*>(void*)",93957338140496,93957338140594],["v8::internal::Log::MessageBuilder& v8::internal::Log::MessageBuilder::operator<< <v8::internal::String>(v8::internal::String)",93957338140752,93957338140778],["v8::internal::TimerEventScope<v8::internal::TimerEventRecompileConcurrent>::LogTimerEvent(v8::internal::Logger::StartEnd)",93957338140848,93957338140923],["v8::internal::TimerEventScope<v8::internal::TimerEventExecute>::LogTimerEvent(v8::internal::Logger::StartEnd)",93957338141008,93957338141083],["v8::internal::CodeEventLogger::~CodeEventLogger()",93957338141152,93957338141194],["v8::internal::CodeEventLogger::CodeCreateEvent(v8::internal::CodeEventListener::LogEventsAndTags, v8::internal::Handle<v8::internal::AbstractCode>, v8::internal::Handle<v8::internal::Name>)",93957338141424,93957338141598],["v8::internal::CodeEventLogger::CodeCreateEvent(v8::internal::CodeEventListener::LogEventsAndTags, v8::internal::Handle<v8::internal::AbstractCode>, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::Name>)",93957338142192,93957338142621],["v8::internal::CodeEventLogger::CodeCreateEvent(v8::internal::CodeEventListener::LogEventsAndTags, v8::internal::wasm::WasmCode const*, v8::internal::Vector<char const>, char const*, int, int)",93957338143520,93957338143975],["v8::internal::PerfBasicLogger::PerfBasicLogger(v8::internal::Isolate*)",93957338144224,93957338144490],["v8::internal::PerfBasicLogger::~PerfBasicLogger()",93957338144576,93957338144658],["v8::internal::Assembler::pause()",93957341909600,93957341909636],["v8::internal::Assembler::pshufhw(v8::internal::XMMRegister, v8::internal::XMMRegister, unsigned char)",93957341911648,93957341911829],["v8::internal::Assembler::db(unsigned char)",93957341912800,93957341912861],["v8::internal::RelocInfo::IsCodedSpecially()",93957341913648,93957341913668],["v8::internal::RecordWriteDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957341914656,93957341914711],["v8::internal::EphemeronKeyBarrierDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957341914784,93957341914839],["v8::internal::CallTrampolineDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957341914896,93957341914935],["v8::internal::CallForwardVarargsDescriptor::InitializePlatformSpecific(v8::internal::CallInterfaceDescriptorData*)",93957341914992,93957341915038],["v8::internal::ExternalReference::search_string_raw_two_two()",93957336084768,93957336084781],["v8::internal::ExternalReference::jsreceiver_create_identity_hash()",93957336085280,93957336085293],["v8::internal::ExternalReference::copy_typed_array_elements_slice()",93957336085456,93957336085469],["v8::internal::LexicographicCompareWrapper(v8::internal::Isolate*, unsigned long, unsigned long)",93957336085520,93957336085530],["v8::internal::ExternalReference::mutable_big_int_absolute_sub_and_canonicalize_function()",93957336085568,93957336085581],["v8::internal::ExternalReference::intl_convert_one_byte_to_lower()",93957336085600,93957336085613],["v8::internal::ExternalReference::intl_to_latin1_lower_table()",93957336085632,93957336085642],["v8::internal::ExternalReference::promise_hook_address(v8::internal::Isolate*)",93957336085664,93957336085677],["v8::internal::Assembler::lzcntq(v8::internal::Register, v8::internal::Register)",93957341908256,93957341908418],["v8::internal::Assembler::sse_instr(v8::internal::XMMRegister, v8::internal::XMMRegister, unsigned char, unsigned char)",93957341910176,93957341910336],["v8::internal::Assembler::movddup(v8::internal::XMMRegister, v8::internal::Operand)",93957341911312,93957341911465],["v8::internal::Assembler::pshuflw(v8::internal::XMMRegister, v8::internal::XMMRegister, unsigned char)",93957341912032,93957341912213],["v8::internal::Assembler::pshufd(v8::internal::XMMRegister, v8::internal::Operand, unsigned char)",93957341912608,93957341912789],["v8::internal::Assembler::dd(unsigned int, v8::internal::RelocInfo::Mode)",93957341912864,93957341913021],["v8::internal::Assembler::dq(v8::internal::Label*)",93957341913184,93957341913648],["std::__1::vector<unsigned int, std::__1::allocator<unsigned int> >::__append(unsigned long, unsigned int const&)",93957341913680,93957341914567],["v8::internal::libc_memset(void*, int, unsigned long)",93957336084624,93957336084648],["v8::internal::(anonymous namespace)::StringWriteToFlatTwoByte(unsigned long, unsigned short*, int, int)",93957336084832,93957336084842],["v8::internal::GetOrCreateHash(v8::internal::Isolate*, unsigned long)",93957336085216,93957336085249],["v8::internal::ExternalReference::compute_integer_hash()",93957336085312,93957336085325],["v8::internal::ExternalReference::copy_typed_array_elements_to_typed_array()",93957336085440,93957336085453],["v8::internal::ExternalReference::try_string_to_index_or_lookup_existing()",93957336085472,93957336085485],["v8::internal::ExternalReference::smi_lexicographic_compare_function()",93957336085504,93957336085517],["v8::internal::ExternalReference::mutable_big_int_absolute_add_and_canonicalize_function()",93957336085536,93957336085549],["v8::internal::Assembler::vucomiss(v8::internal::XMMRegister, v8::internal::Operand)",93957341906736,93957341906923],["v8::internal::Assembler::popcntq(v8::internal::Register, v8::internal::Register)",93957341908928,93957341909090],["v8::internal::Assembler::movups(v8::internal::XMMRegister, v8::internal::Operand)",93957341909888,93957341910023],["v8::internal::Assembler::sse2_instr(v8::internal::XMMRegister, v8::internal::Operand, unsigned char, unsigned char, unsigned char)",93957341910496,93957341910677],["v8::internal::Assembler::movddup(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341911136,93957341911300],["v8::internal::Assembler::movshdup(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341911472,93957341911636],["v8::internal::Assembler::pshufhw(v8::internal::XMMRegister, v8::internal::Operand, unsigned char)",93957341911840,93957341912021],["v8::internal::Assembler::pshuflw(v8::internal::XMMRegister, v8::internal::Operand, unsigned char)",93957341912224,93957341912405],["v8::internal::ExternalReference::ieee754_tanh_function()",93957336084464,93957336084477],["v8::internal::ExternalReference::jsarray_array_join_concat_to_sequential_string()",93957336084704,93957336084717],["v8::internal::(anonymous namespace)::StringWriteToFlatOneByte(unsigned long, unsigned char*, int, int)",93957336084800,93957336084810],["v8::internal::(anonymous namespace)::ExternalOneByteStringGetChars(unsigned long)",93957336084864,93957336085022],["v8::internal::ExternalReference::orderedhashmap_gethash_raw()",93957336085200,93957336085213],["v8::internal::ExternalReference::get_or_create_hash_raw()",93957336085264,93957336085277],["v8::internal::JSReceiverCreateIdentityHash(v8::internal::Isolate*, unsigned long)",93957336085296,93957336085306],["v8::internal::ComputeSeededIntegerHash(v8::internal::Isolate*, int)",93957336085328,93957336085412],["v8::internal::Assembler::vinstr(unsigned char, v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::Assembler::SIMDPrefix, v8::internal::Assembler::LeadingOpcode, v8::internal::Assembler::VexW, v8::internal::CpuFeature)",93957341904848,93957341905105],["v8::internal::Assembler::tzcntq(v8::internal::Register, v8::internal::Register)",93957341907584,93957341907746],["v8::internal::Assembler::lzcntl(v8::internal::Register, v8::internal::Register)",93957341908592,93957341908755],["v8::internal::Assembler::popcntl(v8::internal::Register, v8::internal::Register)",93957341909264,93957341909427],["v8::internal::Assembler::movups(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341909648,93957341909881],["v8::internal::Assembler::movups(v8::internal::Operand, v8::internal::XMMRegister)",93957341910032,93957341910167],["v8::internal::Assembler::sse_instr(v8::internal::XMMRegister, v8::internal::Operand, unsigned char, unsigned char)",93957341910336,93957341910491],["v8::internal::Assembler::sse4_instr(v8::internal::Register, v8::internal::XMMRegister, unsigned char, unsigned char, unsigned char, unsigned char, signed char)",93957341910688,93957341910912],["v8::internal::ExternalReference::ieee754_expm1_function()",93957336084336,93957336084349],["v8::internal::libc_memcpy(void*, void const*, unsigned long)",93957336084528,93957336084552],["v8::internal::ExternalReference::printf_function()",93957336084672,93957336084685],["v8::internal::ExternalReference::search_string_raw_one_two()",93957336084736,93957336084749],["v8::internal::ExternalReference::string_write_to_flat_one_byte()",93957336084784,93957336084797],["v8::internal::ExternalReference::string_write_to_flat_two_byte()",93957336084816,93957336084829],["v8::internal::ExternalReference::external_one_byte_string_get_chars()",93957336084848,93957336084861],["v8::internal::ExternalReference::external_two_byte_string_get_chars()",93957336085024,93957336085037],["v8::internal::Assembler::vmovq(v8::internal::Register, v8::internal::XMMRegister)",93957341903296,93957341903460],["v8::internal::Assembler::vps(unsigned char, v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister, unsigned char)",93957341905840,93957341906078],["v8::internal::Assembler::vss(unsigned char, v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341907136,93957341907354],["v8::internal::Assembler::tzcntl(v8::internal::Register, v8::internal::Register)",93957341907920,93957341908083],["v8::internal::Assembler::lzcntq(v8::internal::Register, v8::internal::Operand)",93957341908432,93957341908583],["v8::internal::Assembler::lzcntl(v8::internal::Register, v8::internal::Operand)",93957341908768,93957341908921],["v8::internal::Assembler::popcntq(v8::internal::Register, v8::internal::Operand)",93957341909104,93957341909255],["v8::internal::Assembler::popcntl(v8::internal::Register, v8::internal::Operand)",93957341909440,93957341909593],["v8::internal::ExternalReference::ieee754_asinh_function()",93957336084208,93957336084221],["v8::internal::ExternalReference::ieee754_log2_function()",93957336084400,93957336084413],["v8::internal::libc_memchr(void*, int, unsigned long)",93957336084496,93957336084506],["v8::internal::libc_memmove(void*, void const*, unsigned long)",93957336084576,93957336084600],["v8::internal::ExternalReference::libc_memset_function()",93957336084656,93957336084669],["v8::internal::ExternalReference::refill_math_random()",93957336084688,93957336084701],["v8::internal::ExternalReference::search_string_raw_one_one()",93957336084720,93957336084733],["v8::internal::ExternalReference::search_string_raw_two_one()",93957336084752,93957336084765],["v8::internal::Assembler::vmovshdup(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341901696,93957341901892],["v8::internal::Assembler::vmovdqu(v8::internal::Operand, v8::internal::XMMRegister)",93957341904064,93957341904251],["v8::internal::Assembler::vps(unsigned char, v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341905392,93957341905609],["v8::internal::Assembler::vpd(unsigned char, v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::Operand)",93957341906304,93957341906525],["v8::internal::Assembler::vpmovmskb(v8::internal::Register, v8::internal::XMMRegister)",93957341906928,93957341907124],["v8::internal::Assembler::vss(unsigned char, v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::Operand)",93957341907360,93957341907581],["v8::internal::Assembler::tzcntq(v8::internal::Register, v8::internal::Operand)",93957341907760,93957341907911],["v8::internal::Assembler::tzcntl(v8::internal::Register, v8::internal::Operand)",93957341908096,93957341908249],["v8::internal::ExternalReference::re_case_insensitive_compare_non_unicode(v8::internal::Isolate*)",93957336084048,93957336084061],["v8::internal::ExternalReference::ieee754_cbrt_function()",93957336084272,93957336084285],["v8::internal::ExternalReference::ieee754_log1p_function()",93957336084368,93957336084381],["v8::internal::ExternalReference::ieee754_sinh_function()",93957336084432,93957336084445],["v8::internal::ExternalReference::ieee754_pow_function()",93957336084480,93957336084493],["v8::internal::ExternalReference::libc_memchr_function()",93957336084512,93957336084525],["v8::internal::ExternalReference::libc_memcpy_function()",93957336084560,93957336084573],["v8::internal::ExternalReference::libc_memmove_function()",93957336084608,93957336084621],["v8::internal::Assembler::roundsd(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::RoundingMode)",93957341900160,93957341900360],["v8::internal::Assembler::vmovd(v8::internal::XMMRegister, v8::internal::Register)",93957341902512,93957341902708],["v8::internal::Assembler::vmovdqa(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341903664,93957341903860],["v8::internal::Assembler::vmovlps(v8::internal::Operand, v8::internal::XMMRegister)",93957341904464,93957341904651],["v8::internal::Assembler::vinstr(unsigned char, v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::Operand, v8::internal::Assembler::SIMDPrefix, v8::internal::Assembler::LeadingOpcode, v8::internal::Assembler::VexW, v8::internal::CpuFeature)",93957341905120,93957341905386],["v8::internal::Assembler::vps(unsigned char, v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::Operand)",93957341905616,93957341905836],["v8::internal::Assembler::vpd(unsigned char, v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341906080,93957341906298],["v8::internal::Assembler::vucomiss(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341906528,93957341906724],["v8::internal::ExternalReference::is_profiling_address(v8::internal::Isolate*)",93957336083920,93957336083933],["v8::internal::ExternalReference::address_of_regexp_stack_memory_top_address(v8::internal::Isolate*)",93957336084128,93957336084146],["v8::internal::ExternalReference::ieee754_atanh_function()",93957336084240,93957336084253],["v8::internal::ExternalReference::ieee754_cosh_function()",93957336084304,93957336084317],["v8::internal::ExternalReference::ieee754_log_function()",93957336084352,93957336084365],["v8::internal::ExternalReference::ieee754_log10_function()",93957336084384,93957336084397],["v8::internal::ExternalReference::ieee754_sin_function()",93957336084416,93957336084429],["v8::internal::ExternalReference::ieee754_tan_function()",93957336084448,93957336084461],["v8::internal::Assembler::cvtlsi2ss(v8::internal::XMMRegister, v8::internal::Register)",93957341898800,93957341898964],["v8::internal::Assembler::movmskps(v8::internal::Register, v8::internal::XMMRegister)",93957341900960,93957341901106],["v8::internal::Assembler::vbroadcastss(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341902064,93957341902228],["v8::internal::Assembler::vmovd(v8::internal::Register, v8::internal::XMMRegister)",93957341902912,93957341903108],["v8::internal::Assembler::vmovdqa(v8::internal::XMMRegister, v8::internal::Operand)",93957341903472,93957341903659],["v8::internal::Assembler::vmovdqu(v8::internal::XMMRegister, v8::internal::Operand)",93957341903872,93957341904059],["v8::internal::Assembler::vmovdqu(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341904256,93957341904452],["v8::internal::Assembler::vmovhps(v8::internal::Operand, v8::internal::XMMRegister)",93957341904656,93957341904843],["v8::internal::ExternalReference::address_of_wasm_i16x8_splat_0x0001()",93957336083792,93957336083805],["v8::internal::ExternalReference::re_grow_stack(v8::internal::Isolate*)",93957336083984,93957336083997],["v8::internal::ExternalReference::address_of_static_offsets_vector(v8::internal::Isolate*)",93957336084080,93957336084093],["v8::internal::ExternalReference::ieee754_acosh_function()",93957336084176,93957336084189],["v8::internal::ExternalReference::ieee754_atan_function()",93957336084224,93957336084237],["v8::internal::ExternalReference::ieee754_atan2_function()",93957336084256,93957336084269],["v8::internal::ExternalReference::ieee754_cos_function()",93957336084288,93957336084301],["v8::internal::ExternalReference::ieee754_exp_function()",93957336084320,93957336084333],["v8::internal::Assembler::cvttss2siq(v8::internal::Register, v8::internal::XMMRegister)",93957341897504,93957341897664],["v8::internal::Assembler::cvtqsi2sd(v8::internal::XMMRegister, v8::internal::Register)",93957341899456,93957341899616],["v8::internal::Assembler::roundpd(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::RoundingMode)",93957341900576,93957341900776],["v8::internal::Assembler::vmovddup(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341901296,93957341901492],["v8::internal::Assembler::vbroadcastss(v8::internal::XMMRegister, v8::internal::Operand)",93957341901904,93957341902060],["v8::internal::Assembler::fma_instr(unsigned char, v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::Assembler::VectorLength, v8::internal::Assembler::SIMDPrefix, v8::internal::Assembler::LeadingOpcode, v8::internal::Assembler::VexW)",93957341902240,93957341902505],["v8::internal::Assembler::vmovd(v8::internal::XMMRegister, v8::internal::Operand)",93957341902720,93957341902907],["v8::internal::Assembler::vmovq(v8::internal::XMMRegister, v8::internal::Register)",93957341903120,93957341903284],["v8::internal::ExternalReference::address_of_double_abs_constant()",93957336083664,93957336083677],["v8::internal::ExternalReference::address_of_wasm_int32_max_as_double()",93957336083856,93957336083869],["v8::internal::ExternalReference::invoke_accessor_getter_callback()",93957336083952,93957336083965],["v8::internal::ExternalReference::re_experimental_match_for_call_from_js()",93957336084016,93957336084029],["v8::internal::ExternalReference::re_word_character_map(v8::internal::Isolate*)",93957336084064,93957336084077],["v8::internal::ExternalReference::address_of_regexp_stack_limit_address(v8::internal::Isolate*)",93957336084096,93957336084114],["v8::internal::ExternalReference::ieee754_acos_function()",93957336084160,93957336084173],["v8::internal::ExternalReference::ieee754_asin_function()",93957336084192,93957336084205],["v8::internal::Assembler::cmpps(v8::internal::XMMRegister, v8::internal::XMMRegister, signed char)",93957341896096,93957341896259],["v8::internal::Assembler::cvttps2dq(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341898144,93957341898304],["v8::internal::Assembler::cvtqsi2ss(v8::internal::XMMRegister, v8::internal::Register)",93957341899136,93957341899296],["v8::internal::Assembler::cvtss2sd(v8::internal::XMMRegister, v8::internal::Operand)",93957341899792,93957341899945],["v8::internal::Assembler::roundps(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::RoundingMode)",93957341900368,93957341900568],["v8::internal::Assembler::movmskpd(v8::internal::Register, v8::internal::XMMRegister)",93957341900784,93957341900948],["v8::internal::Assembler::pmovmskb(v8::internal::Register, v8::internal::XMMRegister)",93957341901120,93957341901284],["v8::internal::Assembler::vmovddup(v8::internal::XMMRegister, v8::internal::Operand)",93957341901504,93957341901691],["v8::internal::ExternalReference::address_of_runtime_stats_flag()",93957336083536,93957336083549],["v8::internal::ExternalReference::address_of_wasm_i8x16_splat_0x01()",93957336083728,93957336083741],["v8::internal::ExternalReference::supports_wasm_simd_128_address()",93957336083824,93957336083837],["v8::internal::ExternalReference::address_of_enable_experimental_regexp_engine()",93957336083888,93957336083901],["v8::internal::ExternalReference::invoke_function_callback()",93957336083936,93957336083949],["v8::internal::ExternalReference::re_check_stack_guard_state(v8::internal::Isolate*)",93957336083968,93957336083981],["v8::internal::ExternalReference::re_match_for_call_from_js()",93957336084000,93957336084013],["v8::internal::ExternalReference::re_case_insensitive_compare_unicode(v8::internal::Isolate*)",93957336084032,93957336084045],["v8::internal::Assembler::shufps(v8::internal::XMMRegister, v8::internal::XMMRegister, unsigned char)",93957341894832,93957341894995],["v8::internal::Assembler::cvttss2si(v8::internal::Register, v8::internal::Operand)",93957341896832,93957341896985],["v8::internal::Assembler::cvttsd2siq(v8::internal::Register, v8::internal::XMMRegister)",93957341897824,93957341897984],["v8::internal::Assembler::cvtlsi2sd(v8::internal::XMMRegister, v8::internal::Register)",93957341898464,93957341898628],["v8::internal::Assembler::cvtqsi2ss(v8::internal::XMMRegister, v8::internal::Operand)",93957341898976,93957341899127],["v8::internal::Assembler::cvtqsi2sd(v8::internal::XMMRegister, v8::internal::Operand)",93957341899296,93957341899447],["v8::internal::Assembler::cvtss2sd(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341899616,93957341899780],["v8::internal::Assembler::roundss(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::RoundingMode)",93957341899952,93957341900152],["v8::internal::ExternalReference::scheduled_exception_address(v8::internal::Isolate*)",93957336083344,93957336083357],["v8::internal::ExternalReference::address_of_the_hole_nan()",93957336083600,93957336083613],["v8::internal::ExternalReference::address_of_wasm_i8x16_swizzle_mask()",93957336083696,93957336083709],["v8::internal::ExternalReference::address_of_wasm_i8x16_splat_0x33()",93957336083760,93957336083773],["v8::internal::ExternalReference::address_of_wasm_f64x2_convert_low_i32x4_u_int_mask()",93957336083808,93957336083821],["v8::internal::ExternalReference::address_of_wasm_double_2_power_52()",93957336083840,93957336083853],["v8::internal::ExternalReference::address_of_wasm_uint32_max_as_double()",93957336083872,93957336083885],["v8::internal::ExternalReference::thread_in_wasm_flag_address_address(v8::internal::Isolate*)",93957336083904,93957336083917],["v8::internal::Assembler::pinsrb(v8::internal::XMMRegister, v8::internal::Operand, unsigned char)",93957341893328,93957341893524],["v8::internal::Assembler::movss(v8::internal::XMMRegister, v8::internal::Operand)",93957341895488,93957341895641],["v8::internal::Assembler::cvtdq2pd(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341896464,93957341896628],["v8::internal::Assembler::cvttsd2si(v8::internal::Register, v8::internal::Operand)",93957341897168,93957341897321],["v8::internal::Assembler::cvttss2siq(v8::internal::Register, v8::internal::Operand)",93957341897664,93957341897815],["v8::internal::Assembler::cvttsd2siq(v8::internal::Register, v8::internal::Operand)",93957341897984,93957341898135],["v8::internal::Assembler::cvtlsi2sd(v8::internal::XMMRegister, v8::internal::Operand)",93957341898304,93957341898457],["v8::internal::Assembler::cvtlsi2ss(v8::internal::XMMRegister, v8::internal::Operand)",93957341898640,93957341898793],["v8::internal::ExternalReference::heap_is_marking_flag_address(v8::internal::Isolate*)",93957336083152,93957336083165],["v8::internal::ExternalReference::address_of_min_int()",93957336083472,93957336083485],["v8::internal::ExternalReference::address_of_store_to_stack_count(char const*)",93957336083568,93957336083578],["v8::internal::ExternalReference::address_of_float_abs_constant()",93957336083632,93957336083645],["v8::internal::ExternalReference::address_of_double_neg_constant()",93957336083680,93957336083693],["v8::internal::ExternalReference::address_of_wasm_i8x16_popcnt_mask()",93957336083712,93957336083725],["v8::internal::ExternalReference::address_of_wasm_i8x16_splat_0x0f()",93957336083744,93957336083757],["v8::internal::ExternalReference::address_of_wasm_i8x16_splat_0x55()",93957336083776,93957336083789],["v8::internal::Assembler::pinsrw(v8::internal::XMMRegister, v8::internal::Register, unsigned char)",93957341891728,93957341891909],["v8::internal::Assembler::movsd(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341894112,93957341894276],["v8::internal::Assembler::ucomiss(v8::internal::XMMRegister, v8::internal::Operand)",93957341895168,93957341895303],["v8::internal::Assembler::movlps(v8::internal::Operand, v8::internal::XMMRegister)",93957341895808,93957341895943],["v8::internal::Assembler::cmppd(v8::internal::XMMRegister, v8::internal::XMMRegister, signed char)",93957341896272,93957341896453],["v8::internal::Assembler::sse2_instr(v8::internal::XMMRegister, v8::internal::XMMRegister, unsigned char, unsigned char, unsigned char)",93957341896640,93957341896825],["v8::internal::Assembler::cvttss2si(v8::internal::Register, v8::internal::XMMRegister)",93957341896992,93957341897156],["v8::internal::Assembler::cvttsd2si(v8::internal::Register, v8::internal::XMMRegister)",93957341897328,93957341897492],["v8::internal::f64_acos_wrapper(unsigned long)",93957336082960,93957336082989],["v8::internal::ExternalReference::old_space_allocation_limit_address(v8::internal::Isolate*)",93957336083264,93957336083282],["v8::internal::ExternalReference::abort_with_reason()",93957336083376,93957336083389],["v8::internal::ExternalReference::address_of_builtin_subclassing_flag()",93957336083504,93957336083517],["v8::internal::ExternalReference::address_of_load_from_stack_count(char const*)",93957336083552,93957336083562],["v8::internal::ExternalReference::address_of_one_half()",93957336083584,93957336083597],["v8::internal::ExternalReference::address_of_uint32_bias()",93957336083616,93957336083629],["v8::internal::ExternalReference::address_of_float_neg_constant()",93957336083648,93957336083661],["v8::internal::Assembler::fprem()",93957341890672,93957341890746],["v8::internal::Assembler::pinsrq(v8::internal::XMMRegister, v8::internal::Operand, unsigned char)",93957341892496,93957341892690],["v8::internal::Assembler::insertps(v8::internal::XMMRegister, v8::internal::Operand, unsigned char)",93957341893744,93957341893940],["v8::internal::Assembler::movaps(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341894448,93957341894681],["v8::internal::Assembler::ucomiss(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341895008,93957341895154],["v8::internal::Assembler::movss(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341895312,93957341895476],["v8::internal::Assembler::movss(v8::internal::Operand, v8::internal::XMMRegister)",93957341895648,93957341895801],["v8::internal::Assembler::movhps(v8::internal::Operand, v8::internal::XMMRegister)",93957341895952,93957341896087],["v8::internal::ExternalReference::wasm_f32x4_trunc()",93957336082832,93957336082845],["v8::internal::f64_mod_wrapper(unsigned long)",93957336083056,93957336083090],["v8::internal::ExternalReference::new_space_allocation_limit_address(v8::internal::Isolate*)",93957336083200,93957336083218],["v8::internal::ExternalReference::handle_scope_next_address(v8::internal::Isolate*)",93957336083312,93957336083322],["v8::internal::ExternalReference::address_of_pending_message_obj(v8::internal::Isolate*)",93957336083360,93957336083373],["v8::internal::abort_with_reason(int)",93957336083392,93957336083460],["v8::internal::ExternalReference::address_of_mock_arraybuffer_allocator_flag()",93957336083488,93957336083501],["v8::internal::ExternalReference::address_of_harmony_regexp_match_indices_flag()",93957336083520,93957336083533],["v8::internal::Assembler::emit_test(v8::internal::Operand, v8::internal::Register, int)",93957341889760,93957341890005],["v8::internal::Assembler::movd(v8::internal::XMMRegister, v8::internal::Operand)",93957341891072,93957341891225],["v8::internal::Assembler::pextrq(v8::internal::Register, v8::internal::XMMRegister, signed char)",93957341892112,93957341892304],["v8::internal::Assembler::pinsrd(v8::internal::XMMRegister, v8::internal::Operand, unsigned char)",93957341892912,93957341893108],["v8::internal::Assembler::insertps(v8::internal::XMMRegister, v8::internal::XMMRegister, unsigned char)",93957341893536,93957341893732],["v8::internal::Assembler::movsd(v8::internal::Operand, v8::internal::XMMRegister)",93957341893952,93957341894105],["v8::internal::Assembler::movsd(v8::internal::XMMRegister, v8::internal::Operand)",93957341894288,93957341894441],["v8::internal::Assembler::movaps(v8::internal::XMMRegister, v8::internal::Operand)",93957341894688,93957341894823],["v8::internal::ExternalReference::wasm_word64_rol()",93957336082704,93957336082717],["v8::internal::ExternalReference::wasm_memory_fill()",93957336082896,93957336082909],["v8::internal::f64_asin_wrapper(unsigned long)",93957336083008,93957336083037],["v8::internal::ExternalReference::address_of_jslimit(v8::internal::Isolate*)",93957336083120,93957336083130],["v8::internal::ExternalReference::new_space_allocation_top_address(v8::internal::Isolate*)",93957336083168,93957336083186],["v8::internal::ExternalReference::old_space_allocation_top_address(v8::internal::Isolate*)",93957336083232,93957336083250],["v8::internal::ExternalReference::handle_scope_level_address(v8::internal::Isolate*)",93957336083296,93957336083306],["v8::internal::ExternalReference::handle_scope_limit_address(v8::internal::Isolate*)",93957336083328,93957336083338],["v8::internal::Assembler::sub_sp_32(unsigned int)",93957341888192,93957341888254],["v8::internal::Assembler::testw(v8::internal::Operand, v8::internal::Register)",93957341890224,93957341890362],["v8::internal::Assembler::sahf()",93957341890832,93957341890891],["v8::internal::Assembler::movq(v8::internal::XMMRegister, v8::internal::Register)",93957341891408,93957341891568],["v8::internal::Assembler::pinsrw(v8::internal::XMMRegister, v8::internal::Operand, unsigned char)",93957341891920,93957341892101],["v8::internal::Assembler::pinsrq(v8::internal::XMMRegister, v8::internal::Register, unsigned char)",93957341892304,93957341892496],["v8::internal::Assembler::pinsrd(v8::internal::XMMRegister, v8::internal::Register, unsigned char)",93957341892704,93957341892900],["v8::internal::Assembler::pinsrb(v8::internal::XMMRegister, v8::internal::Register, unsigned char)",93957341893120,93957341893316],["v8::internal::ExternalReference::wasm_uint64_div()",93957336082576,93957336082589],["v8::internal::ExternalReference::wasm_f64x2_trunc()",93957336082768,93957336082781],["v8::internal::ExternalReference::wasm_memory_init()",93957336082864,93957336082877],["v8::internal::ExternalReference::wasm_call_trap_callback_for_testing()",93957336082928,93957336082941],["v8::internal::ExternalReference::f64_asin_wrapper_function()",93957336082992,93957336083005],["v8::internal::ExternalReference::f64_mod_wrapper_function()",93957336083040,93957336083053],["v8::internal::ExternalReference::allocation_sites_list_address(v8::internal::Isolate*)",93957336083104,93957336083117],["v8::internal::ExternalReference::address_of_real_jslimit(v8::internal::Isolate*)",93957336083136,93957336083146],["v8::internal::Assembler::pushfq()",93957341886768,93957341886827],["v8::internal::Assembler::emit_test(v8::internal::Register, v8::internal::Immediate, int)",93957341888752,93957341889203],["v8::internal::Assembler::testw(v8::internal::Register, v8::internal::Immediate)",93957341890192,93957341890207],["v8::internal::Assembler::fstp_d(v8::internal::Operand)",93957341890480,93957341890592],["v8::internal::Assembler::fnstsw_ax()",93957341890752,93957341890826],["v8::internal::Assembler::movd(v8::internal::XMMRegister, v8::internal::Register)",93957341890896,93957341891060],["v8::internal::Assembler::movd(v8::internal::Register, v8::internal::XMMRegister)",93957341891232,93957341891396],["v8::internal::Assembler::movq(v8::internal::Register, v8::internal::XMMRegister)",93957341891568,93957341891728],["v8::internal::ExternalReference::wasm_float64_to_int64()",93957336082448,93957336082461],["v8::internal::ExternalReference::wasm_word32_popcnt()",93957336082640,93957336082653],["v8::internal::ExternalReference::wasm_f64x2_ceil()",93957336082736,93957336082749],["v8::internal::ExternalReference::wasm_f32x4_ceil()",93957336082800,93957336082813],["v8::internal::ExternalReference::wasm_f32x4_nearest_int()",93957336082848,93957336082861],["v8::internal::ExternalReference::wasm_memory_copy()",93957336082880,93957336082893],["v8::internal::ExternalReference::wasm_float64_pow()",93957336082912,93957336082925],["v8::internal::ExternalReference::f64_acos_wrapper_function()",93957336082944,93957336082957],["v8::internal::Assembler::emit_not(v8::internal::Operand, int)",93957341885952,93957341886079],["v8::internal::Assembler::xchgw(v8::internal::Register, v8::internal::Operand)",93957341887344,93957341887482],["v8::internal::Assembler::emit_test(v8::internal::Register, v8::internal::Register, int)",93957341888448,93957341888733],["v8::internal::Assembler::emit_test(v8::internal::Operand, v8::internal::Immediate, int)",93957341889232,93957341889606],["v8::internal::Assembler::testw(v8::internal::Register, v8::internal::Register)",93957341890016,93957341890183],["v8::internal::Assembler::testw(v8::internal::Operand, v8::internal::Immediate)",93957341890208,93957341890224],["v8::internal::Assembler::fld_d(v8::internal::Operand)",93957341890368,93957341890477],["v8::internal::Assembler::fstp(int)",93957341890592,93957341890672],["v8::internal::ExternalReference::wasm_f64_ceil()",93957336082320,93957336082333],["v8::internal::ExternalReference::wasm_float64_to_int64_sat()",93957336082512,93957336082525],["v8::internal::ExternalReference::wasm_word32_ctz()",93957336082608,93957336082621],["v8::internal::ExternalReference::wasm_word32_rol()",93957336082672,93957336082685],["v8::internal::ExternalReference::wasm_word64_ror()",93957336082720,93957336082733],["v8::internal::ExternalReference::wasm_f64x2_floor()",93957336082752,93957336082765],["v8::internal::ExternalReference::wasm_f64x2_nearest_int()",93957336082784,93957336082797],["v8::internal::ExternalReference::wasm_f32x4_floor()",93957336082816,93957336082829],["v8::internal::Assembler::negb(v8::internal::Register)",93957341885056,93957341885165],["v8::internal::Assembler::pushq(v8::internal::Register)",93957341886352,93957341886434],["v8::internal::Assembler::setcc(v8::internal::Condition, v8::internal::Register)",93957341886944,93957341887186],["v8::internal::Assembler::emit_xchg(v8::internal::Register, v8::internal::Operand, int)",93957341887856,93957341888003],["v8::internal::Assembler::testb(v8::internal::Register, v8::internal::Register)",93957341888256,93957341888446],["v8::internal::Assembler::testb(v8::internal::Register, v8::internal::Immediate)",93957341888736,93957341888751],["v8::internal::Assembler::testb(v8::internal::Operand, v8::internal::Immediate)",93957341889216,93957341889232],["v8::internal::Assembler::testb(v8::internal::Operand, v8::internal::Register)",93957341889616,93957341889749],["v8::internal::ExternalReference::new_deoptimizer_function()",93957336082192,93957336082205],["v8::internal::ExternalReference::wasm_int64_to_float64()",93957336082384,93957336082397],["v8::internal::ExternalReference::wasm_float32_to_int64_sat()",93957336082480,93957336082493],["v8::internal::ExternalReference::wasm_int64_div()",93957336082544,93957336082557],["v8::internal::ExternalReference::wasm_uint64_mod()",93957336082592,93957336082605],["v8::internal::ExternalReference::wasm_word64_ctz()",93957336082624,93957336082637],["v8::internal::ExternalReference::wasm_word64_popcnt()",93957336082656,93957336082669],["v8::internal::ExternalReference::wasm_word32_ror()",93957336082688,93957336082701],["v8::internal::Assembler::movsxlq(v8::internal::Register, v8::internal::Operand)",93957341883984,93957341884107],["v8::internal::Assembler::negl(v8::internal::Operand)",93957341885520,93957341885632],["v8::internal::Assembler::popq(v8::internal::Operand)",93957341886176,93957341886285],["v8::internal::Assembler::pushq(v8::internal::Immediate)",93957341886560,93957341886677],["v8::internal::Assembler::ret(int)",93957341886832,93957341886935],["v8::internal::Assembler::xchgb(v8::internal::Register, v8::internal::Operand)",93957341887200,93957341887333],["v8::internal::Assembler::emit_xchg(v8::internal::Register, v8::internal::Register, int)",93957341887488,93957341887847],["v8::internal::Assembler::store_rax(v8::internal::ExternalReference)",93957341888016,93957341888182],["v8::internal::ExternalReference::insert_remembered_set_function()",93957336082048,93957336082061],["v8::internal::ExternalReference::wasm_f32_ceil()",93957336082256,93957336082269],["v8::internal::ExternalReference::wasm_int64_to_float32()",93957336082352,93957336082365],["v8::internal::ExternalReference::wasm_float32_to_int64()",93957336082416,93957336082429],["v8::internal::ExternalReference::wasm_float64_to_uint64()",93957336082464,93957336082477],["v8::internal::ExternalReference::wasm_float32_to_uint64_sat()",93957336082496,93957336082509],["v8::internal::ExternalReference::wasm_float64_to_uint64_sat()",93957336082528,93957336082541],["v8::internal::ExternalReference::wasm_int64_mod()",93957336082560,93957336082573],["v8::internal::Assembler::movsxbl(v8::internal::Register, v8::internal::Operand)",93957341882784,93957341882919],["v8::internal::Assembler::emit_movzxw(v8::internal::Register, v8::internal::Register, int)",93957341884592,93957341884737],["v8::internal::Assembler::negl(v8::internal::Register)",93957341885296,93957341885398],["v8::internal::Assembler::nop()",93957341885744,93957341885803],["v8::internal::Assembler::popq(v8::internal::Register)",93957341886080,93957341886162],["v8::internal::Assembler::popfq()",93957341886288,93957341886347],["v8::internal::Assembler::pushq(v8::internal::Operand)",93957341886448,93957341886560],["v8::internal::Assembler::pushq_imm32(int)",93957341886688,93957341886761],["v8::internal::ExternalReference::Create(v8::internal::Runtime::Function const*)",93957336081824,93957336081860],["v8::internal::ExternalReference::date_cache_stamp(v8::internal::Isolate*)",93957336082112,93957336082129],["v8::internal::ExternalReference::wasm_f32_trunc()",93957336082224,93957336082237],["v8::internal::ExternalReference::wasm_f64_trunc()",93957336082288,93957336082301],["v8::internal::ExternalReference::wasm_f64_nearest_int()",93957336082336,93957336082349],["v8::internal::ExternalReference::wasm_uint64_to_float32()",93957336082368,93957336082381],["v8::internal::ExternalReference::wasm_uint64_to_float64()",93957336082400,93957336082413],["v8::internal::ExternalReference::wasm_float32_to_uint64()",93957336082432,93957336082445],["v8::internal::Assembler::emit_mov(v8::internal::Operand, v8::internal::Register, int)",93957341880656,93957341880803],["v8::internal::Assembler::movsxwl(v8::internal::Register, v8::internal::Operand)",93957341883392,93957341883527],["v8::internal::Assembler::emit_movzxb(v8::internal::Register, v8::internal::Register, int)",93957341884256,93957341884444],["v8::internal::Assembler::mull(v8::internal::Register)",93957341884832,93957341884934],["v8::internal::Assembler::negw(v8::internal::Register)",93957341885168,93957341885288],["v8::internal::Assembler::negq(v8::internal::Register)",93957341885408,93957341885515],["v8::internal::Assembler::negq(v8::internal::Operand)",93957341885632,93957341885743],["v8::internal::Assembler::emit_not(v8::internal::Register, int)",93957341885808,93957341885952],["v8::internal::ExternalReferenceTable::AddIsolateAddresses(v8::internal::Isolate*, int*)",93957336079248,93957336079637],["v8::internal::ExternalReference::interpreter_dispatch_counters(v8::internal::Isolate*)",93957336081952,93957336081972],["v8::internal::ExternalReference::ephemeron_key_write_barrier_function()",93957336082080,93957336082093],["v8::internal::ExternalReference::stress_deopt_count(v8::internal::Isolate*)",93957336082160,93957336082173],["v8::internal::ExternalReference::compute_output_frames_function()",93957336082208,93957336082221],["v8::internal::ExternalReference::wasm_f32_floor()",93957336082240,93957336082253],["v8::internal::ExternalReference::wasm_f32_nearest_int()",93957336082272,93957336082285],["v8::internal::ExternalReference::wasm_f64_floor()",93957336082304,93957336082317],["v8::internal::Assembler::movb(v8::internal::Register, v8::internal::Immediate)",93957341879344,93957341879465],["v8::internal::Assembler::movq_heap_number(v8::internal::Register, double)",93957341881872,93957341882122],["v8::internal::Assembler::movsxbq(v8::internal::Register, v8::internal::Register)",93957341883072,93957341883220],["v8::internal::Assembler::movsxwq(v8::internal::Register, v8::internal::Register)",93957341883680,93957341883828],["v8::internal::Assembler::emit_movzxb(v8::internal::Register, v8::internal::Operand, int)",93957341884112,93957341884247],["v8::internal::Assembler::emit_movzxw(v8::internal::Register, v8::internal::Operand, int)",93957341884448,93957341884583],["v8::internal::Assembler::repstosl()",93957341884752,93957341884826],["v8::internal::Assembler::mull(v8::internal::Operand)",93957341884944,93957341885056],["v8::internal::Scanner::~Scanner()",93957336073152,93957336073402],["long v8::internal::SearchStringRaw<unsigned char const, unsigned short const>(v8::internal::Isolate*, unsigned char const*, int, unsigned short const*, int, int)",93957336081120,93957336081480],["v8::internal::ExternalReference::handle_scope_implementer_address(v8::internal::Isolate*)",93957336081904,93957336081917],["v8::internal::ExternalReference::bytecode_size_table_address()",93957336082016,93957336082029],["v8::internal::ExternalReference::delete_handle_scope_extensions()",93957336082064,93957336082077],["v8::internal::ExternalReference::get_date_field_function()",93957336082096,93957336082109],["v8::internal::ExternalReference::runtime_function_table_address(v8::internal::Isolate*)",93957336082144,93957336082154],["v8::internal::ExternalReference::force_slow_path(v8::internal::Isolate*)",93957336082176,93957336082189],["v8::internal::Assembler::j(v8::internal::Condition, v8::internal::Handle<v8::internal::Code>, v8::internal::RelocInfo::Mode)",93957341877984,93957341878244],["v8::internal::Assembler::movw(v8::internal::Operand, v8::internal::Register)",93957341879888,93957341880026],["v8::internal::Assembler::emit_mov(v8::internal::Operand, v8::internal::Immediate, int)",93957341881088,93957341881328],["v8::internal::Assembler::movl(v8::internal::Operand, v8::internal::Label*)",93957341882384,93957341882584],["v8::internal::Assembler::movsxbq(v8::internal::Register, v8::internal::Operand)",93957341882928,93957341883066],["v8::internal::Assembler::movsxwl(v8::internal::Register, v8::internal::Register)",93957341883232,93957341883377],["v8::internal::Assembler::movsxwq(v8::internal::Register, v8::internal::Operand)",93957341883536,93957341883674],["v8::internal::Assembler::movsxlq(v8::internal::Register, v8::internal::Register)",93957341883840,93957341883973],["v8::internal::(anonymous namespace)::GetOptimizedCodeNow(v8::internal::OptimizedCompilationJob*, v8::internal::Isolate*, v8::internal::OptimizedCompilationInfo*)",93957336070320,93957336071378],["v8::base::TemplateHashMapEntry<unsigned long, unsigned int> v8::base::TemplateHashMapImpl<unsigned long, unsigned int, v8::base::KeyEqualityMatcher<long>, v8::base::DefaultAllocationPolicy>::LookupOrInsert<unsigned long, v8::base::TemplateHashMapImpl<unsigned long, unsigned int, v8::base::KeyEqualityMatcher<long>, v8::base::DefaultAllocationPolicy>::LookupOrInsert<v8::base::TemplateHashMapImpl<unsigned long, unsigned int, v8::base::KeyEqualityMatcher<long>, v8::base::DefaultAllocationPolicy>::LookupOrInsert(unsigned long const&, unsigned int)::{lambda()#1}>(unsigned long const&, unsigned int, v8::base::TemplateHashMapImpl<unsigned long, unsigned int, v8::base::KeyEqualityMatcher<long>, v8::base::DefaultAllocationPolicy>::LookupOrInsert(unsigned long const&, unsigned int)::{lambda()#1} const&)::{lambda()#1}, {lambda()#1}>(unsigned long const, unsigned int, v8::base::TemplateHashMapImpl<unsigned long, unsigned int, v8::base::KeyEqualityMatcher<long>, v8::base::DefaultAllocationPolicy>::LookupOrInsert<v8::base::TemplateHashMapImpl<unsigned long, unsigned int, v8::base::KeyEqualityMatcher<long>, v8::base::DefaultAllocationPolicy>::LookupOrInsert(unsigned long const&, unsigned int)::{lambda()#1}>(unsigned long const&, unsigned int, v8::base::TemplateHashMapImpl<unsigned long, unsigned int, v8::base::KeyEqualityMatcher<long>, v8::base::DefaultAllocationPolicy>::LookupOrInsert(unsigned long const&, unsigned int)::{lambda()#1} const&)::{lambda()#1} const&, {lambda()#1} const&)",93957336074208,93957336074436],["v8::internal::ExternalReferenceTable::ResolveSymbol(void*)",93957336080960,93957336080973],["long v8::internal::SearchStringRaw<unsigned short const, unsigned short const>(v8::internal::Isolate*, unsigned short const*, int, unsigned short const*, int, int)",93957336081632,93957336081771],["v8::internal::ExternalReference::builtins_address(v8::internal::Isolate*)",93957336081872,93957336081891],["v8::internal::ExternalReference::interpreter_dispatch_table_address(v8::internal::Isolate*)",93957336081920,93957336081937],["v8::internal::ExternalReference::address_of_interpreter_entry_trampoline_instruction_start(v8::internal::Isolate*)",93957336081984,93957336082002],["v8::internal::ExternalReference::write_barrier_marking_from_code_function()",93957336082032,93957336082045],["v8::internal::Assembler::emit_imul(v8::internal::Register, v8::internal::Operand, int)",93957341875744,93957341875906],["v8::internal::Assembler::jmp(v8::internal::Operand)",93957341878752,93957341878864],["v8::internal::Assembler::movb(v8::internal::Operand, v8::internal::Immediate)",93957341879616,93957341879743],["v8::internal::Assembler::emit_mov(v8::internal::Register, v8::internal::Operand, int)",93957341880208,93957341880355],["v8::internal::Assembler::emit_mov(v8::internal::Register, v8::internal::Immediate, int)",93957341880816,93957341881078],["v8::internal::Assembler::emit_mov(v8::internal::Register, v8::internal::Immediate64, int)",93957341881328,93957341881870],["v8::internal::Assembler::movq_string(v8::internal::Register, v8::internal::StringConstantBase const*)",93957341882128,93957341882378],["v8::internal::Assembler::movsxbl(v8::internal::Register, v8::internal::Register)",93957341882592,93957341882780],["v8::internal::SharedFunctionInfo::SetScopeInfo(v8::internal::ScopeInfo, v8::internal::WriteBarrierMode)",93957336066512,93957336067195],["v8::internal::(anonymous namespace)::StressBackgroundCompileThread::~StressBackgroundCompileThread()",93957336072752,93957336072794],["v8::internal::ExternalReferenceEncoder::TryEncode(unsigned long)",93957336073952,93957336074052],["v8::internal::ExternalReferenceTable::Init(v8::internal::Isolate*)",93957336074848,93957336075606],["v8::internal::ExternalReferenceTable::AddNativeCodeStatsCounters(v8::internal::Isolate*, int*)",93957336079648,93957336080955],["long v8::internal::SearchStringRaw<unsigned char const, unsigned char const>(v8::internal::Isolate*, unsigned char const*, int, unsigned char const*, int, int)",93957336080976,93957336081115],["long v8::internal::SearchStringRaw<unsigned short const, unsigned char const>(v8::internal::Isolate*, unsigned short const*, int, unsigned char const*, int, int)",93957336081488,93957336081627],["v8::internal::ExternalReference::Create(v8::internal::Runtime::FunctionId)",93957336081776,93957336081817],["v8::internal::Assembler::lfence()",93957341874672,93957341874761],["v8::internal::Assembler::emit_inc(v8::internal::Operand, int)",93957341876576,93957341876700],["v8::internal::Assembler::jmp(unsigned long, v8::internal::RelocInfo::Mode)",93957341878448,93957341878625],["v8::internal::Assembler::load_rax(v8::internal::ExternalReference)",93957341879024,93957341879190],["v8::internal::Assembler::movb(v8::internal::Operand, v8::internal::Register)",93957341879472,93957341879605],["v8::internal::Assembler::movw(v8::internal::Register, v8::internal::Operand)",93957341879744,93957341879882],["v8::internal::Assembler::movw(v8::internal::Operand, v8::internal::Immediate)",93957341880032,93957341880193],["v8::internal::Assembler::emit_mov(v8::internal::Register, v8::internal::Register, int)",93957341880368,93957341880641],["v8::internal::(anonymous namespace)::CompilerTracer::TraceAbortedJob(v8::internal::Isolate*, v8::internal::OptimizedCompilationInfo*)",93957336064080,93957336064409],["v8::internal::IsCompiledScope::IsCompiledScope(v8::internal::SharedFunctionInfo, v8::internal::Isolate*)",93957336068400,93957336068654],["v8::internal::CompilationJob::Status v8::internal::(anonymous namespace)::FinalizeSingleUnoptimizedCompilationJob<v8::internal::Isolate>(v8::internal::UnoptimizedCompilationJob*, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Isolate*, std::__1::vector<v8::internal::FinalizeUnoptimizedCompilationData, std::__1::allocator<v8::internal::FinalizeUnoptimizedCompilationData> >*)",93957336071568,93957336072419],["v8::internal::(anonymous namespace)::StressBackgroundCompileThread::Run()",93957336072864,93957336072882],["v8::internal::ExternalReferenceEncoder::ExternalReferenceEncoder(v8::internal::Isolate*)",93957336073408,93957336073944],["v8::internal::ExternalReferenceEncoder::Encode(unsigned long)",93957336074064,93957336074205],["v8::base::TemplateHashMapImpl<unsigned long, unsigned int, v8::base::KeyEqualityMatcher<long>, v8::base::DefaultAllocationPolicy>::Resize()",93957336074448,93957336074837],["v8::internal::ExternalReferenceTable::AddReferences(v8::internal::Isolate*, int*)",93957336075616,93957336079246],["v8::internal::Assembler::xaddb(v8::internal::Operand, v8::internal::Register)",93957341873472,93957341873620],["v8::internal::Assembler::emit_div(v8::internal::Register, int)",93957341875136,93957341875280],["v8::internal::Assembler::emit_imul(v8::internal::Register, v8::internal::Operand, v8::internal::Immediate, int)",93957341876192,93957341876420],["v8::internal::Assembler::j(v8::internal::Condition, v8::internal::Label*, v8::internal::Label::Distance)",93957341876768,93957341877371],["v8::internal::Assembler::jmp(v8::internal::Handle<v8::internal::Code>, v8::internal::RelocInfo::Mode)",93957341878256,93957341878436],["v8::internal::Assembler::jmp(v8::internal::Register)",93957341878640,93957341878742],["v8::internal::Assembler::emit_lea(v8::internal::Register, v8::internal::Operand, int)",93957341878864,93957341879011],["v8::internal::Assembler::movb(v8::internal::Register, v8::internal::Operand)",93957341879200,93957341879333],["v8::internal::Compiler::GetSharedFunctionInfoForStreamedScript(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, v8::internal::Compiler::ScriptDetails const&, v8::ScriptOriginOptions, v8::internal::ScriptStreamingData*)",93957336057648,93957336060714],["v8::internal::(anonymous namespace)::RecursivelyExecuteUnoptimizedCompilationJobs(v8::internal::ParseInfo*, v8::internal::FunctionLiteral*, v8::internal::AccountingAllocator*, std::__1::forward_list<std::__1::unique_ptr<v8::internal::UnoptimizedCompilationJob, std::__1::default_delete<v8::internal::UnoptimizedCompilationJob> >, std::__1::allocator<std::__1::unique_ptr<v8::internal::UnoptimizedCompilationJob, std::__1::default_delete<v8::internal::UnoptimizedCompilationJob> > > >*)",93957336065552,93957336065752],["v8::internal::BytecodeArray v8::internal::SharedFunctionInfo::GetBytecodeArray<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*) const",93957336067632,93957336067951],["v8::internal::(anonymous namespace)::CompilerTracer::TraceOptimizedCodeCacheHit(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSFunction>, v8::internal::BytecodeOffset, v8::internal::CodeKind)",93957336068976,93957336069302],["v8::internal::(anonymous namespace)::PrepareJobWithHandleScope(v8::internal::OptimizedCompilationJob*, v8::internal::Isolate*, v8::internal::OptimizedCompilationInfo*)",93957336071392,93957336071564],["void std::__1::vector<v8::internal::FinalizeUnoptimizedCompilationData, std::__1::allocator<v8::internal::FinalizeUnoptimizedCompilationData> >::__emplace_back_slow_path<v8::internal::Isolate*&, v8::internal::Handle<v8::internal::SharedFunctionInfo>&, v8::internal::MaybeHandle<v8::internal::CoverageInfo>&, v8::base::TimeDelta, v8::base::TimeDelta>(v8::internal::Isolate*&, v8::internal::Handle<v8::internal::SharedFunctionInfo>&, v8::internal::MaybeHandle<v8::internal::CoverageInfo>&, v8::base::TimeDelta&&, v8::base::TimeDelta&&)",93957336072432,93957336072740],["v8::internal::(anonymous namespace)::StressBackgroundCompileThread::~StressBackgroundCompileThread()",93957336072800,93957336072850],["v8::internal::Parser::~Parser()",93957336072896,93957336073150],["v8::internal::Assembler::near_call(long, v8::internal::RelocInfo::Mode)",93957341872064,93957341872234],["v8::internal::Assembler::cmpxchgb(v8::internal::Operand, v8::internal::Register)",93957341874080,93957341874228],["v8::internal::Assembler::emit_dec(v8::internal::Register, int)",93957341874848,93957341874992],["v8::internal::Assembler::emit_imul(v8::internal::Operand, int)",93957341875424,93957341875551],["v8::internal::Assembler::emit_imul(v8::internal::Register, v8::internal::Register, v8::internal::Immediate, int)",93957341875920,93957341876187],["v8::internal::Assembler::emit_inc(v8::internal::Register, int)",93957341876432,93957341876576],["v8::internal::Assembler::int3()",93957341876704,93957341876763],["v8::internal::Assembler::jmp(v8::internal::Label*, v8::internal::Label::Distance)",93957341877376,93957341877976],["v8::internal::Compiler::CompileForLiveEdit(v8::internal::ParseInfo*, v8::internal::Handle<v8::internal::Script>, v8::internal::Isolate*)",93957336050240,93957336050313],["v8::internal::Compiler::GetOptimizedCodeForOSR(v8::internal::Handle<v8::internal::JSFunction>, v8::internal::BytecodeOffset, v8::internal::JavaScriptFrame*)",93957336061600,93957336061647],["v8::internal::ScriptStreamingData::ScriptStreamingData(std::__1::unique_ptr<v8::ScriptCompiler::ExternalSourceStream, std::__1::default_delete<v8::ScriptCompiler::ExternalSourceStream> >, v8::ScriptCompiler::StreamedSource::Encoding)",93957336065440,93957336065460],["v8::internal::(anonymous namespace)::UpdateSharedFunctionFlagsAfterCompilation(v8::internal::FunctionLiteral*, v8::internal::SharedFunctionInfo)",93957336066080,93957336066269],["void std::__1::vector<v8::internal::FinalizeUnoptimizedCompilationData, std::__1::allocator<v8::internal::FinalizeUnoptimizedCompilationData> >::__emplace_back_slow_path<v8::internal::LocalIsolate*&, v8::internal::Handle<v8::internal::SharedFunctionInfo>&, v8::internal::MaybeHandle<v8::internal::CoverageInfo>&, v8::base::TimeDelta, v8::base::TimeDelta>(v8::internal::LocalIsolate*&, v8::internal::Handle<v8::internal::SharedFunctionInfo>&, v8::internal::MaybeHandle<v8::internal::CoverageInfo>&, v8::base::TimeDelta&&, v8::base::TimeDelta&&)",93957336067200,93957336067619],["void std::__1::vector<v8::internal::DeferredFinalizationJobData, std::__1::allocator<v8::internal::DeferredFinalizationJobData> >::__emplace_back_slow_path<v8::internal::LocalIsolate*&, v8::internal::Handle<v8::internal::SharedFunctionInfo>&, std::__1::unique_ptr<v8::internal::UnoptimizedCompilationJob, std::__1::default_delete<v8::internal::UnoptimizedCompilationJob> > >(v8::internal::LocalIsolate*&, v8::internal::Handle<v8::internal::SharedFunctionInfo>&, std::__1::unique_ptr<v8::internal::UnoptimizedCompilationJob, std::__1::default_delete<v8::internal::UnoptimizedCompilationJob> >&&)",93957336067952,93957336068398],["v8::internal::FeedbackCell::reset_feedback_vector(v8::base::Optional<std::__1::function<void (v8::internal::HeapObject, v8::internal::CompressedObjectSlot, v8::internal::HeapObject)> >)",93957336068656,93957336068970],["v8::internal::(anonymous namespace)::GetOptimizedCodeLater(std::__1::unique_ptr<v8::internal::OptimizedCompilationJob, std::__1::default_delete<v8::internal::OptimizedCompilationJob> >, v8::internal::Isolate*, v8::internal::OptimizedCompilationInfo*, v8::internal::CodeKind, v8::internal::Handle<v8::internal::JSFunction>)",93957336069312,93957336070308],["v8::internal::Assembler::pblendw(v8::internal::XMMRegister, v8::internal::XMMRegister, unsigned char)",93957341870576,93957341870772],["v8::internal::Assembler::cdq()",93957341872640,93957341872699],["v8::internal::Assembler::xaddl(v8::internal::Operand, v8::internal::Register)",93957341873792,93957341873927],["v8::internal::Assembler::emit_cmpxchg(v8::internal::Operand, v8::internal::Register, int)",93957341874400,93957341874562],["v8::internal::Assembler::cqo()",93957341874768,93957341874842],["v8::internal::Assembler::emit_idiv(v8::internal::Register, int)",93957341874992,93957341875132],["v8::internal::Assembler::emit_imul(v8::internal::Register, int)",93957341875280,93957341875424],["v8::internal::Assembler::emit_imul(v8::internal::Register, v8::internal::Register, int)",93957341875552,93957341875742],["v8::internal::Compiler::CompileBaseline(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSFunction>, v8::internal::Compiler::ClearExceptionFlag, v8::internal::IsCompiledScope*)",93957336044960,93957336045197],["v8::internal::Compiler::GetFunctionFromString(v8::internal::Handle<v8::internal::Context>, v8::internal::Handle<v8::internal::Object>, v8::internal::ParseRestriction, int, bool)",93957336053488,93957336053555],["v8::internal::(anonymous namespace)::SetScriptFieldsFromDetails(v8::internal::Isolate*, v8::internal::Script, v8::internal::Compiler::ScriptDetails, v8::internal::CombinationAssertScope<v8::internal::PerThreadAssertScopeDebugOnly<(v8::internal::PerThreadAssertType)0, false>, v8::internal::PerThreadAssertScopeDebugOnly<(v8::internal::PerThreadAssertType)1, false> >*)",93957336060976,93957336061389],["v8::internal::(anonymous namespace)::InsertCodeIntoOptimizedCodeCache(v8::internal::OptimizedCompilationInfo*)",93957336063440,93957336063999],["v8::internal::Compiler::PostInstantiation(v8::internal::Handle<v8::internal::JSFunction>)",93957336064416,93957336065438],["v8::internal::ScriptStreamingData::~ScriptStreamingData()",93957336065472,93957336065545],["v8::internal::(anonymous namespace)::ExecuteSingleUnoptimizedCompilationJob(v8::internal::ParseInfo*, v8::internal::FunctionLiteral*, v8::internal::AccountingAllocator*, std::__1::vector<v8::internal::FunctionLiteral*, std::__1::allocator<v8::internal::FunctionLiteral*> >*, v8::internal::LocalIsolate*)",93957336065760,93957336066079],["v8::internal::IsCompiledScope v8::internal::SharedFunctionInfo::is_compiled_scope<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*) const",93957336066272,93957336066498],["v8::internal::Assembler::bsrq(v8::internal::Register, v8::internal::Register)",93957341869232,93957341869380],["v8::internal::Assembler::call(v8::internal::Label*)",93957341871408,93957341871563],["v8::internal::Assembler::call(v8::internal::Register)",93957341872416,93957341872518],["v8::internal::Assembler::cmovl(v8::internal::Condition, v8::internal::Register, v8::internal::Register)",93957341873056,93957341873396],["v8::internal::Assembler::xaddw(v8::internal::Operand, v8::internal::Register)",93957341873632,93957341873785],["v8::internal::Assembler::xaddq(v8::internal::Operand, v8::internal::Register)",93957341873936,93957341874074],["v8::internal::Assembler::cmpxchgw(v8::internal::Operand, v8::internal::Register)",93957341874240,93957341874393],["v8::internal::Assembler::mfence()",93957341874576,93957341874665],["v8::internal::BytecodeArray::set_source_position_table(v8::internal::Object, v8::ReleaseStoreTag, v8::internal::WriteBarrierMode)",93957336035680,93957336035811],["v8::internal::Compiler::FinalizeBackgroundCompileTask(v8::internal::BackgroundCompileTask*, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Isolate*, v8::internal::Compiler::ClearExceptionFlag)",93957336048208,93957336049126],["v8::internal::Compiler::ValidateDynamicCompilationSource(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Context>, v8::internal::Handle<v8::internal::Object>, bool)",93957336052464,93957336053151],["v8::internal::(anonymous namespace)::CompileScriptOnMainThread(v8::internal::UnoptimizedCompileFlags, v8::internal::Handle<v8::internal::String>, v8::internal::Compiler::ScriptDetails const&, v8::ScriptOriginOptions, v8::internal::NativesFlag, v8::Extension*, v8::internal::Isolate*, v8::internal::IsCompiledScope*)",93957336056656,93957336057081],["v8::internal::Handle<v8::internal::SharedFunctionInfo> v8::internal::(anonymous namespace)::CreateTopLevelSharedFunctionInfo<v8::internal::Isolate>(v8::internal::ParseInfo*, v8::internal::Handle<v8::internal::Script>, v8::internal::Isolate*)",93957336060720,93957336060971],["v8::internal::(anonymous namespace)::FinalizeUnoptimizedScriptCompilation(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Script>, v8::internal::UnoptimizedCompileFlags const&, v8::internal::UnoptimizedCompileState const*, std::__1::vector<v8::internal::FinalizeUnoptimizedCompilationData, std::__1::allocator<v8::internal::FinalizeUnoptimizedCompilationData> > const&)",93957336061392,93957336061590],["v8::internal::Compiler::FinalizeOptimizedCompilationJob(v8::internal::OptimizedCompilationJob*, v8::internal::Isolate*)",93957336061648,93957336063429],["v8::internal::(anonymous namespace)::InsertCodeIntoCompilationCache(v8::internal::Isolate*, v8::internal::OptimizedCompilationInfo*)",93957336064000,93957336064078],["v8::internal::Assembler::shift(v8::internal::Operand, v8::internal::Immediate, int, int)",93957341867984,93957341868240],["v8::internal::Assembler::bsfq(v8::internal::Register, v8::internal::Register)",93957341869840,93957341869988],["v8::internal::Assembler::palignr(v8::internal::XMMRegister, v8::internal::Operand, unsigned char)",93957341870992,93957341871188],["v8::internal::Assembler::call(v8::internal::Handle<v8::internal::Code>, v8::internal::RelocInfo::Mode)",93957341871760,93957341871940],["v8::internal::Assembler::near_jmp(long, v8::internal::RelocInfo::Mode)",93957341872240,93957341872415],["v8::internal::Assembler::call(v8::internal::Operand)",93957341872528,93957341872640],["v8::internal::Assembler::cmovq(v8::internal::Condition, v8::internal::Register, v8::internal::Register)",93957341872704,93957341873045],["v8::internal::Assembler::lock()",93957341873408,93957341873467],["v8::internal::OptimizedCompilationJob::RecordFunctionCompilation(v8::internal::CodeEventListener::LogEventsAndTags, v8::internal::Isolate*) const",93957336027216,93957336027473],["v8::internal::(anonymous namespace)::CompileAllWithBaseline(v8::internal::Isolate*, std::__1::vector<v8::internal::FinalizeUnoptimizedCompilationData, std::__1::allocator<v8::internal::FinalizeUnoptimizedCompilationData> > const&, v8::internal::Compiler::ClearExceptionFlag)",93957336040944,93957336041282],["v8::internal::Compiler::CompileToplevel(v8::internal::ParseInfo*, v8::internal::Handle<v8::internal::Script>, v8::internal::Isolate*, v8::internal::IsCompiledScope*)",93957336046544,93957336046562],["v8::internal::Compiler::CompileOptimized(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSFunction>, v8::internal::ConcurrencyMode, v8::internal::CodeKind)",93957336049376,93957336049555],["v8::internal::Compiler::GetFunctionFromEval(v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::Context>, v8::internal::LanguageMode, v8::internal::ParseRestriction, int, int, int)",93957336050320,93957336052450],["v8::internal::Compiler::GetFunctionFromValidatedString(v8::internal::Handle<v8::internal::Context>, v8::internal::MaybeHandle<v8::internal::String>, v8::internal::ParseRestriction, int)",93957336053152,93957336053476],["v8::internal::Compiler::GetSharedFunctionInfoForScript(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, v8::internal::Compiler::ScriptDetails const&, v8::ScriptOriginOptions, v8::Extension*, v8::internal::ScriptData*, v8::ScriptCompiler::CompileOptions, v8::ScriptCompiler::NoCacheReason, v8::internal::NativesFlag)",93957336053568,93957336056651],["v8::internal::(anonymous namespace)::ScriptCompileTimerScope::~ScriptCompileTimerScope()",93957336057088,93957336057646],["v8::internal::Assembler::arithmetic_op_8(unsigned char, v8::internal::Register, v8::internal::Register)",93957341865968,93957341866196],["v8::internal::Assembler::bswapq(v8::internal::Register)",93957341868656,93957341868763],["v8::internal::Assembler::bsfl(v8::internal::Register, v8::internal::Register)",93957341869536,93957341869681],["v8::internal::Assembler::pblendw(v8::internal::XMMRegister, v8::internal::Operand, unsigned char)",93957341870144,93957341870340],["v8::internal::Assembler::sse4_instr(v8::internal::XMMRegister, v8::internal::XMMRegister, unsigned char, unsigned char, unsigned char, unsigned char)",93957341870784,93957341870987],["v8::internal::Assembler::palignr(v8::internal::XMMRegister, v8::internal::XMMRegister, unsigned char)",93957341871200,93957341871396],["v8::internal::Assembler::call(unsigned long, v8::internal::RelocInfo::Mode)",93957341871568,93957341871745],["v8::internal::Assembler::RecordRelocInfo(v8::internal::RelocInfo::Mode, long)",93957341871952,93957341872050],["v8::internal::Handle<v8::internal::SharedFunctionInfo> v8::internal::Compiler::GetSharedFunctionInfo<v8::internal::LocalIsolate>(v8::internal::FunctionLiteral*, v8::internal::Handle<v8::internal::Script>, v8::internal::LocalIsolate*)",93957336023984,93957336024454],["v8::internal::BackgroundCompileTask::Run()",93957336028720,93957336033430],["bool v8::internal::(anonymous namespace)::IterativelyExecuteAndFinalizeUnoptimizedCompilationJobs<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::Script>, v8::internal::ParseInfo*, v8::internal::AccountingAllocator*, v8::internal::IsCompiledScope*, std::__1::vector<v8::internal::FinalizeUnoptimizedCompilationData, std::__1::allocator<v8::internal::FinalizeUnoptimizedCompilationData> >*, std::__1::vector<v8::internal::DeferredFinalizationJobData, std::__1::allocator<v8::internal::DeferredFinalizationJobData> >*)",93957336037952,93957336038616],["v8::internal::JSFunction::ResetIfBytecodeFlushed(v8::base::Optional<std::__1::function<void (v8::internal::HeapObject, v8::internal::CompressedObjectSlot, v8::internal::HeapObject)> >)",93957336042304,93957336042729],["v8::internal::(anonymous namespace)::CompileSharedWithBaseline(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Compiler::ClearExceptionFlag, v8::internal::IsCompiledScope*)",93957336045200,93957336046531],["v8::internal::(anonymous namespace)::CompileToplevel(v8::internal::ParseInfo*, v8::internal::Handle<v8::internal::Script>, v8::internal::MaybeHandle<v8::internal::ScopeInfo>, v8::internal::Isolate*, v8::internal::IsCompiledScope*)",93957336046576,93957336048208],["v8::internal::(anonymous namespace)::FinalizeAllUnoptimizedCompilationJobs(v8::internal::ParseInfo*, v8::internal::Isolate*, v8::internal::Handle<v8::internal::Script>, std::__1::forward_list<std::__1::unique_ptr<v8::internal::UnoptimizedCompilationJob, std::__1::default_delete<v8::internal::UnoptimizedCompilationJob> >, std::__1::allocator<std::__1::unique_ptr<v8::internal::UnoptimizedCompilationJob, std::__1::default_delete<v8::internal::UnoptimizedCompilationJob> > > >*, std::__1::vector<v8::internal::FinalizeUnoptimizedCompilationData, std::__1::allocator<v8::internal::FinalizeUnoptimizedCompilationData> >*)",93957336049136,93957336049363],["v8::internal::(anonymous namespace)::ContinuationForConcurrentOptimization(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSFunction>)",93957336049568,93957336050237],["v8::internal::Assembler::is_optimizable_farjmp(int)",93957341864016,93957341864131],["v8::internal::Assembler::immediate_arithmetic_op_16(unsigned char, v8::internal::Operand, v8::internal::Immediate)",93957341867216,93957341867423],["v8::internal::Assembler::shift(v8::internal::Operand, int, int)",93957341868400,93957341868537],["v8::internal::Assembler::bsrl(v8::internal::Register, v8::internal::Register)",93957341868928,93957341869073],["v8::internal::Assembler::bsrq(v8::internal::Register, v8::internal::Operand)",93957341869392,93957341869530],["v8::internal::Assembler::bsfl(v8::internal::Register, v8::internal::Operand)",93957341869696,93957341869831],["v8::internal::Assembler::bsfq(v8::internal::Register, v8::internal::Operand)",93957341870000,93957341870138],["v8::internal::Assembler::sse4_instr(v8::internal::XMMRegister, v8::internal::Operand, unsigned char, unsigned char, unsigned char, unsigned char)",93957341870352,93957341870563],["v8::internal::CompilationCache::PutRegExp(v8::internal::Handle<v8::internal::String>, v8::base::Flags<v8::internal::JSRegExp::Flag, int>, v8::internal::Handle<v8::internal::FixedArray>)",93957336022816,93957336022830],["v8::internal::OptimizedCompilationJob::FinalizeJob(v8::internal::Isolate*)",93957336025872,93957336026024],["v8::internal::BackgroundCompileTask::BackgroundCompileTask(v8::internal::ParseInfo const*, v8::internal::AstRawString const*, v8::internal::FunctionLiteral const*, v8::internal::WorkerThreadRuntimeCallStats*, v8::internal::TimedHistogram*, int)",93957336027840,93957336028277],["v8::internal::BytecodeArray::SourcePositionTable() const",93957336035472,93957336035536],["v8::internal::Compiler::Compile(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Compiler::ClearExceptionFlag, v8::internal::IsCompiledScope*)",93957336035824,93957336037943],["v8::internal::(anonymous namespace)::FinalizeUnoptimizedCompilation(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Script>, v8::internal::UnoptimizedCompileFlags const&, v8::internal::UnoptimizedCompileState const*, std::__1::vector<v8::internal::FinalizeUnoptimizedCompilationData, std::__1::allocator<v8::internal::FinalizeUnoptimizedCompilationData> > const&)",93957336038624,93957336040930],["v8::internal::Compiler::Compile(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSFunction>, v8::internal::Compiler::ClearExceptionFlag, v8::internal::IsCompiledScope*)",93957336041296,93957336042291],["v8::internal::(anonymous namespace)::GetOptimizedCode(v8::internal::Handle<v8::internal::JSFunction>, v8::internal::ConcurrencyMode, v8::internal::CodeKind, v8::internal::BytecodeOffset, v8::internal::JavaScriptFrame*)",93957336042736,93957336044952],["v8::internal::Assembler::FinalizeJumpOptimizationInfo()",93957341861696,93957341861954],["v8::internal::Assembler::arithmetic_op(unsigned char, v8::internal::Register, v8::internal::Register, int)",93957341865120,93957341865409],["v8::internal::Assembler::immediate_arithmetic_op(unsigned char, v8::internal::Operand, v8::internal::Immediate, int)",93957341866608,93957341866919],["v8::internal::Assembler::immediate_arithmetic_op_8(unsigned char, v8::internal::Register, v8::internal::Immediate)",93957341867568,93957341867711],["v8::internal::Assembler::shift(v8::internal::Register, int, int)",93957341868240,93957341868387],["v8::internal::Assembler::bswapl(v8::internal::Register)",93957341868544,93957341868651],["v8::internal::Assembler::btrq(v8::internal::Register, v8::internal::Immediate)",93957341868768,93957341868917],["v8::internal::Assembler::bsrl(v8::internal::Register, v8::internal::Operand)",93957341869088,93957341869223],["v8::internal::CompilationCacheCode::TraceHit(v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::Code>)",93957336021184,93957336021590],["v8::internal::CompilationCache::MarkCompactPrologue()",93957336023248,93957336023323],["v8::internal::OptimizedCompilationJob::PrepareJob(v8::internal::Isolate*)",93957336025280,93957336025775],["v8::internal::OptimizedCompilationJob::AbortOptimization(v8::internal::BailoutReason)",93957336026080,93957336026117],["v8::internal::BackgroundCompileTask::BackgroundCompileTask(v8::internal::ScriptStreamingData*, v8::internal::Isolate*, v8::ScriptType)",93957336027488,93957336027831],["v8::internal::BackgroundCompileTask::~BackgroundCompileTask()",93957336028288,93957336028720],["v8::internal::Compiler::CollectSourcePositions(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957336033440,93957336035464],["v8::internal::SharedFunctionInfo::GetActiveBytecodeArray() const",93957336035536,93957336035679],["v8::internal::CpuFeatures::ProbeImpl(bool)",93957341859408,93957341860036],["v8::internal::Assembler::bind_to(v8::internal::Label*, int)",93957341862416,93957341863375],["v8::internal::Assembler::emit_operand(int, v8::internal::Operand)",93957341864496,93957341864952],["v8::internal::Assembler::arithmetic_op_16(unsigned char, v8::internal::Register, v8::internal::Operand)",93957341865648,93957341865798],["v8::internal::Assembler::immediate_arithmetic_op(unsigned char, v8::internal::Register, v8::internal::Immediate, int)",93957341866208,93957341866604],["v8::internal::Assembler::immediate_arithmetic_op_16(unsigned char, v8::internal::Register, v8::internal::Immediate)",93957341866928,93957341867204],["v8::internal::Assembler::immediate_arithmetic_op_8(unsigned char, v8::internal::Operand, v8::internal::Immediate)",93957341867424,93957341867565],["v8::internal::Assembler::shift(v8::internal::Register, v8::internal::Immediate, int, int)",93957341867712,93957341867984],["v8::internal::CompilationCacheScript::Put(v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Context>, v8::internal::LanguageMode, v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957336017264,93957336017611],["v8::internal::CompilationCache::LookupRegExp(v8::internal::Handle<v8::internal::String>, v8::base::Flags<v8::internal::JSRegExp::Flag, int>)",93957336022128,93957336022142],["v8::internal::CompilationCache::Clear()",93957336022864,93957336023023],["v8::internal::CompilationCache::DisableScriptAndEval()",93957336023344,93957336023510],["v8::internal::Compiler::LogFunctionCompilation(v8::internal::Isolate*, v8::internal::CodeEventListener::LogEventsAndTags, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::Script>, v8::internal::Handle<v8::internal::AbstractCode>, v8::internal::CodeKind, double)",93957336024464,93957336025279],["v8::internal::OptimizedCompilationJob::ExecuteJob(v8::internal::RuntimeCallStats*, v8::internal::LocalIsolate*)",93957336025776,93957336025871],["v8::internal::OptimizedCompilationJob::RetryOptimization(v8::internal::BailoutReason)",93957336026032,93957336026069],["v8::internal::OptimizedCompilationJob::RecordCompilationStats(v8::internal::OptimizedCompilationJob::CompilationMode, v8::internal::Isolate*) const",93957336026128,93957336027201],["v8::internal::wasm::(anonymous namespace)::FunctionEquivalentIndices(unsigned int, unsigned int, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmModule const*)",93957341855008,93957341855681],["v8::internal::ConstPool::PatchEntries()",93957341860784,93957341861236],["v8::internal::Assembler::Nop(int)",93957341862128,93957341862269],["v8::internal::Assembler::bind(v8::internal::Label*)",93957341863504,93957341863520],["v8::internal::Assembler::GrowBuffer()",93957341864144,93957341864492],["v8::internal::Assembler::arithmetic_op(unsigned char, v8::internal::Register, v8::internal::Operand, int)",93957341864960,93957341865119],["v8::internal::Assembler::arithmetic_op_16(unsigned char, v8::internal::Register, v8::internal::Register)",93957341865424,93957341865646],["v8::internal::Assembler::arithmetic_op_8(unsigned char, v8::internal::Register, v8::internal::Operand)",93957341865808,93957341865953],["v8::internal::CompilationCacheEval::Age()",93957336014432,93957336014475],["v8::internal::CompilationCacheRegExp::Put(v8::internal::Handle<v8::internal::String>, v8::base::Flags<v8::internal::JSRegExp::Flag, int>, v8::internal::Handle<v8::internal::FixedArray>)",93957336019440,93957336019765],["v8::internal::CompilationCache::LookupScript(v8::internal::Handle<v8::internal::String>, v8::internal::MaybeHandle<v8::internal::Object>, int, int, v8::ScriptOriginOptions, v8::internal::Handle<v8::internal::Context>, v8::internal::LanguageMode)",93957336021680,93957336021719],["v8::internal::CompilationCache::PutScript(v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Context>, v8::internal::LanguageMode, v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957336022176,93957336022325],["v8::internal::CompilationCache::PutCode(v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::Code>)",93957336022832,93957336022849],["v8::internal::CompilationCache::Iterate(v8::internal::RootVisitor*)",93957336023024,93957336023236],["v8::internal::CompilationCache::EnableScriptAndEval()",93957336023328,93957336023341],["v8::internal::Handle<v8::internal::SharedFunctionInfo> v8::internal::Compiler::GetSharedFunctionInfo<v8::internal::Isolate>(v8::internal::FunctionLiteral*, v8::internal::Handle<v8::internal::Script>, v8::internal::Isolate*)",93957336023520,93957336023978],["v8::internal::wasm::IsSubtypeOfImpl(v8::internal::wasm::ValueType, v8::internal::wasm::ValueType, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmModule const*)",93957341850080,93957341851916],["std::__1::__hash_table<std::__1::tuple<unsigned int, unsigned int, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmModule const*>, v8::internal::wasm::(anonymous namespace)::CacheKeyHasher, std::__1::equal_to<std::__1::tuple<unsigned int, unsigned int, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmModule const*> >, v8::internal::ZoneAllocator<std::__1::tuple<unsigned int, unsigned int, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmModule const*> > >::__rehash(unsigned long)",93957341857584,93957341858361],["v8::internal::Assembler::AllocateAndInstallRequestedHeapObjects(v8::internal::Isolate*)",93957341860256,93957341860423],["v8::internal::Assembler::Assembler(v8::internal::AssemblerOptions const&, std::__1::unique_ptr<v8::internal::AssemblerBuffer, std::__1::default_delete<v8::internal::AssemblerBuffer> >)",93957341861280,93957341861498],["v8::internal::Assembler::Align(int)",93957341861968,93957341862125],["v8::internal::Assembler::CodeTargetAlign()",93957341862272,93957341862413],["std::__1::deque<int, std::__1::allocator<int> >::push_back(int&&)",93957341863376,93957341863503],["v8::internal::Assembler::record_farjmp_position(v8::internal::Label*, int)",93957341863520,93957341864007],["v8::internal::CodeFactory::CallFunction(v8::internal::Isolate*, v8::internal::ConvertReceiverMode)",93957336013904,93957336013967],["v8::internal::CompilationSubCache::Remove(v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957336015744,93957336016032],["v8::internal::CompilationCacheEval::Put(v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::Context>, v8::internal::Handle<v8::internal::FeedbackCell>, int)",93957336018208,93957336018606],["v8::internal::CompilationCacheCode::Put(v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::Code>)",93957336020464,93957336020763],["v8::internal::CompilationCache::Remove(v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957336021600,93957336021679],["v8::internal::CompilationCache::LookupEval(v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::Context>, v8::internal::LanguageMode, int)",93957336021728,93957336022113],["v8::internal::CompilationCache::LookupCode(v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957336022144,93957336022161],["v8::internal::CompilationCache::PutEval(v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::Context>, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::FeedbackCell>, int)",93957336022336,93957336022812],["_ZNSt3__16vectorIN2v88internal4wasm19DeserializationUnitENS_9allocatorIS4_EEE6insertINS_13move_iteratorINS_11__wrap_iterIPS4_EEEEEENS_9enable_ifIXaasr27__is_cpp17_forward_iteratorIT_EE5valuesr16is_constructibleIS4_NS_15iterator_traitsISF_E9referenceEEE5valueESC_E4typeENSA_IPKS4_EESF_SF_",93957341847056,93957341848251],["v8::internal::wasm::EquivalentTypes(v8::internal::wasm::ValueType, v8::internal::wasm::ValueType, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmModule const*)",93957341853312,93957341853895],["std::__1::pair<std::__1::__hash_const_iterator<std::__1::__hash_node<std::__1::tuple<unsigned int, unsigned int, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmModule const*>, void*>*>, bool> std::__1::unordered_set<std::__1::tuple<unsigned int, unsigned int, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmModule const*>, v8::internal::wasm::(anonymous namespace)::CacheKeyHasher, std::__1::equal_to<std::__1::tuple<unsigned int, unsigned int, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmModule const*> >, v8::internal::ZoneAllocator<std::__1::tuple<unsigned int, unsigned int, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmModule const*> > >::emplace<unsigned int&, unsigned int&, v8::internal::wasm::WasmModule const*&, v8::internal::wasm::WasmModule const*&>(unsigned int&, unsigned int&, v8::internal::wasm::WasmModule const*&, v8::internal::wasm::WasmModule const*&)",93957341856176,93957341857186],["v8::base::LazyInstanceImpl<v8::internal::wasm::(anonymous namespace)::TypeJudgementCache, v8::base::StaticallyAllocatedInstanceTrait<v8::internal::wasm::(anonymous namespace)::TypeJudgementCache>, v8::base::DefaultConstructTrait<v8::internal::wasm::(anonymous namespace)::TypeJudgementCache>, v8::base::ThreadSafeInitOnceTrait, v8::base::LeakyInstanceTrait<v8::internal::wasm::(anonymous namespace)::TypeJudgementCache> >::InitInstance(void*)",93957341859168,93957341859357],["v8::internal::CpuFeatures::PrintFeatures()",93957341860048,93957341860246],["v8::internal::ConstPool::AddSharedEntry(unsigned long, int)",93957341860432,93957341860782],["v8::internal::Assembler::PatchConstPool()",93957341861248,93957341861277],["v8::internal::Assembler::GetCode(v8::internal::Isolate*, v8::internal::CodeDesc*, v8::internal::SafepointTableBuilder*, int)",93957341861504,93957341861691],["v8::internal::CodeFactory::ElementsTransitionAndStore(v8::internal::Isolate*, v8::internal::KeyedAccessStoreMode)",93957336013472,93957336013521],["v8::internal::CodeFactory::ConstructForwardVarargs(v8::internal::Isolate*)",93957336014064,93957336014093],["v8::internal::CompilationCacheCode::Age()",93957336014928,93957336015378],["v8::internal::String::Equals(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String>)",93957336016464,93957336016554],["v8::internal::CompilationCacheEval::Lookup(v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::Context>, v8::internal::LanguageMode, int)",93957336017616,93957336018205],["v8::internal::CompilationCacheRegExp::Lookup(v8::internal::Handle<v8::internal::String>, v8::base::Flags<v8::internal::JSRegExp::Flag, int>)",93957336018608,93957336019427],["v8::internal::CompilationCacheCode::Lookup(v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957336019776,93957336020453],["v8::internal::CompilationCacheCode::TraceInsertion(v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::Code>)",93957336020768,93957336021174],["v8::internal::Version::Hash()",93957341832448,93957341832568],["v8::internal::wasm::CopyAndRelocTask::Run(v8::JobDelegate*)",93957341848672,93957341849159],["v8::internal::wasm::(anonymous namespace)::StructIsSubtypeOf(unsigned int, unsigned int, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmModule const*)",93957341852064,93957341852810],["v8::internal::wasm::(anonymous namespace)::StructEquivalentIndices(unsigned int, unsigned int, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmModule const*)",93957341853984,93957341854523],["std::__1::unordered_set<std::__1::tuple<unsigned int, unsigned int, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmModule const*>, v8::internal::wasm::(anonymous namespace)::CacheKeyHasher, std::__1::equal_to<std::__1::tuple<unsigned int, unsigned int, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmModule const*> >, v8::internal::ZoneAllocator<std::__1::tuple<unsigned int, unsigned int, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmModule const*> > >::count(std::__1::tuple<unsigned int, unsigned int, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmModule const*> const&) const",93957341855696,93957341856162],["std::__1::__hash_table<std::__1::tuple<unsigned int, unsigned int, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmModule const*>, v8::internal::wasm::(anonymous namespace)::CacheKeyHasher, std::__1::equal_to<std::__1::tuple<unsigned int, unsigned int, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmModule const*> >, v8::internal::ZoneAllocator<std::__1::tuple<unsigned int, unsigned int, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmModule const*> > >::rehash(unsigned long)",93957341857200,93957341857571],["std::__1::unordered_set<std::__1::tuple<unsigned int, unsigned int, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmModule const*>, v8::internal::wasm::(anonymous namespace)::CacheKeyHasher, std::__1::equal_to<std::__1::tuple<unsigned int, unsigned int, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmModule const*> >, v8::internal::ZoneAllocator<std::__1::tuple<unsigned int, unsigned int, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmModule const*> > >::erase(std::__1::tuple<unsigned int, unsigned int, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmModule const*> const&)",93957341858368,93957341859158],["v8::internal::CpuFeatures::SupportsWasmSimd128()",93957341859360,93957341859401],["v8::internal::CodeDesc::Initialize(v8::internal::CodeDesc*, v8::internal::Assembler*, int, int, int, int, int)",93957336012816,93957336012975],["v8::internal::CodeFactory::Call(v8::internal::Isolate*, v8::internal::ConvertReceiverMode)",93957336013728,93957336013791],["v8::internal::CodeFactory::CallFunctionForwardVarargs(v8::internal::Isolate*)",93957336014000,93957336014029],["v8::internal::CompilationCache::CompilationCache(v8::internal::Isolate*)",93957336014128,93957336014355],["v8::internal::CompilationCacheRegExp::Age()",93957336014480,93957336014914],["v8::internal::CompilationCacheCode::TraceAgeing()",93957336015392,93957336015733],["v8::internal::CompilationCacheScript::HasOrigin(v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::MaybeHandle<v8::internal::Object>, int, int, v8::ScriptOriginOptions)",93957336016032,93957336016457],["v8::internal::CompilationCacheScript::Lookup(v8::internal::Handle<v8::internal::String>, v8::internal::MaybeHandle<v8::internal::Object>, int, int, v8::ScriptOriginOptions, v8::internal::Handle<v8::internal::Context>, v8::internal::LanguageMode)",93957336016560,93957336017256],["v8::internal::wasm::ScheduledErrorThrower::~ScheduledErrorThrower()",93957341825888,93957341826114],["bool std::__1::__insertion_sort_incomplete<v8::internal::wasm::(anonymous namespace)::ExternalReferenceList::ExternalReferenceList()::{lambda(unsigned int, unsigned int)#1}&, unsigned int*>(unsigned int*, unsigned int*, v8::internal::wasm::(anonymous namespace)::ExternalReferenceList::ExternalReferenceList()::{lambda(unsigned int, unsigned int)#1}&)",93957341845488,93957341846242],["v8::internal::wasm::CopyAndRelocTask::~CopyAndRelocTask()",93957341848512,93957341848585],["void std::__1::vector<v8::internal::wasm::DeserializationUnit, std::__1::allocator<v8::internal::wasm::DeserializationUnit> >::__emplace_back_slow_path<v8::internal::wasm::DeserializationUnit>(v8::internal::wasm::DeserializationUnit&&)",93957341849216,93957341849620],["v8::internal::wasm::(anonymous namespace)::TypeJudgementCache::instance()",93957341851920,93957341852056],["v8::internal::wasm::(anonymous namespace)::ArrayIsSubtypeOf(unsigned int, unsigned int, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmModule const*)",93957341852816,93957341853300],["v8::internal::wasm::CommonSubtype(v8::internal::wasm::ValueType, v8::internal::wasm::ValueType, v8::internal::wasm::WasmModule const*)",93957341853904,93957341853982],["v8::internal::wasm::(anonymous namespace)::ArrayEquivalentIndices(unsigned int, unsigned int, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmModule const*)",93957341854528,93957341854994],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::Handle<v8::internal::HeapObject>, unsigned long>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::Handle<v8::internal::HeapObject>, unsigned long>, std::__1::__unordered_map_hasher<v8::internal::Handle<v8::internal::HeapObject>, std::__1::__hash_value_type<v8::internal::Handle<v8::internal::HeapObject>, unsigned long>, v8::internal::Handle<v8::internal::HeapObject>::hash, v8::internal::Handle<v8::internal::HeapObject>::equal_to, true>, std::__1::__unordered_map_equal<v8::internal::Handle<v8::internal::HeapObject>, std::__1::__hash_value_type<v8::internal::Handle<v8::internal::HeapObject>, unsigned long>, v8::internal::Handle<v8::internal::HeapObject>::equal_to, v8::internal::Handle<v8::internal::HeapObject>::hash, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::Handle<v8::internal::HeapObject>, unsigned long> > >::__emplace_unique_key_args<v8::internal::Handle<v8::internal::HeapObject>, std::__1::piecewise_construct_t const&, std::__1::tuple<v8::internal::Handle<v8::internal::HeapObject> const&>, std::__1::tuple<> >(v8::internal::Handle<v8::internal::HeapObject> const&, std::__1::piecewise_construct_t const&, std::__1::tuple<v8::internal::Handle<v8::internal::HeapObject> const&>&&, std::__1::tuple<>&&)",93957336010960,93957336011883],["v8::internal::CodeFactory::LoadGlobalICInOptimizedCode(v8::internal::Isolate*, v8::internal::TypeofMode)",93957336013312,93957336013351],["v8::internal::CodeFactory::StringAdd(v8::internal::Isolate*, v8::internal::StringAddFlags)",93957336013600,93957336013656],["v8::internal::CodeFactory::CallWithArrayLike(v8::internal::Isolate*)",93957336013840,93957336013869],["v8::internal::CodeFactory::CallForwardVarargs(v8::internal::Isolate*)",93957336013968,93957336013997],["v8::internal::CodeFactory::ConstructWithSpread(v8::internal::Isolate*)",93957336014032,93957336014061],["v8::internal::CodeFactory::ConstructFunctionForwardVarargs(v8::internal::Isolate*)",93957336014096,93957336014125],["v8::internal::CompilationCacheScript::Age()",93957336014368,93957336014423],["v8::internal::wasm::ErrorThrower::TypeError(char const*, ...)",93957341824480,93957341824623],["v8::internal::wasm::(anonymous namespace)::WriteHeader(v8::internal::wasm::(anonymous namespace)::Writer*)",93957341827792,93957341827904],["void std::__1::__sort<v8::internal::wasm::(anonymous namespace)::ExternalReferenceList::ExternalReferenceList()::{lambda(unsigned int, unsigned int)#1}&, unsigned int*>(unsigned int*, unsigned int*, v8::internal::wasm::(anonymous namespace)::ExternalReferenceList::ExternalReferenceList()::{lambda(unsigned int, unsigned int)#1}&)",93957341843520,93957341845224],["v8::internal::wasm::PublishTask::GetMaxConcurrency(unsigned long) const",93957341846624,93957341846678],["std::__1::deque<std::__1::vector<v8::internal::wasm::DeserializationUnit, std::__1::allocator<v8::internal::wasm::DeserializationUnit> >, std::__1::allocator<std::__1::vector<v8::internal::wasm::DeserializationUnit, std::__1::allocator<v8::internal::wasm::DeserializationUnit> > > >::pop_front()",93957341848256,93957341848499],["v8::internal::wasm::CopyAndRelocTask::~CopyAndRelocTask()",93957341848592,93957341848668],["v8::internal::wasm::CopyAndRelocTask::GetMaxConcurrency(unsigned long) const",93957341849168,93957341849207],["std::__1::__deque_base<std::__1::vector<v8::internal::wasm::DeserializationUnit, std::__1::allocator<v8::internal::wasm::DeserializationUnit> >, std::__1::allocator<std::__1::vector<v8::internal::wasm::DeserializationUnit, std::__1::allocator<v8::internal::wasm::DeserializationUnit> > > >::clear()",93957341849632,93957341850080],["v8::internal::StdoutStream::~StdoutStream()",93957336010272,93957336010381],["v8::internal::CodeCommentsWriter::Emit(v8::internal::Assembler*)",93957336011968,93957336012233],["v8::internal::CodeFactory::CallApiCallback(v8::internal::Isolate*)",93957336013232,93957336013261],["v8::internal::CodeFactory::StoreOwnICInOptimizedCode(v8::internal::Isolate*)",93957336013392,93957336013421],["v8::internal::CodeFactory::StoreFastElementIC(v8::internal::Isolate*, v8::internal::KeyedAccessStoreMode)",93957336013536,93957336013585],["v8::internal::CodeFactory::FastNewFunctionContext(v8::internal::Isolate*, v8::internal::ScopeType)",93957336013664,93957336013725],["v8::internal::CodeFactory::Call_WithFeedback(v8::internal::Isolate*, v8::internal::ConvertReceiverMode)",93957336013792,93957336013838],["v8::internal::CodeFactory::CallWithSpread(v8::internal::Isolate*)",93957336013872,93957336013901],["std::__1::__shared_ptr_emplace<v8::internal::(anonymous namespace)::WasmInstanceNativeAllocations, std::__1::allocator<v8::internal::(anonymous namespace)::WasmInstanceNativeAllocations> >::~__shared_ptr_emplace()",93957341823040,93957341823060],["v8::internal::wasm::ErrorThrower::RuntimeError(char const*, ...)",93957341825056,93957341825199],["v8::internal::wasm::WasmSerializer::GetSerializedNativeModuleSize() const",93957341826176,93957341826400],["v8::internal::wasm::NativeModuleDeserializer::Publish(std::__1::vector<v8::internal::wasm::DeserializationUnit, std::__1::allocator<v8::internal::wasm::DeserializationUnit> >)",93957341828320,93957341828678],["v8::internal::wasm::(anonymous namespace)::ExternalReferenceList::ExternalReferenceList()",93957341832576,93957341843511],["unsigned int std::__1::__sort4<v8::internal::wasm::(anonymous namespace)::ExternalReferenceList::ExternalReferenceList()::{lambda(unsigned int, unsigned int)#1}&, unsigned int*>(unsigned int*, unsigned int*, unsigned int*, unsigned int*, v8::internal::wasm::(anonymous namespace)::ExternalReferenceList::ExternalReferenceList()::{lambda(unsigned int, unsigned int)#1}&)",93957341845232,93957341845488],["v8::internal::wasm::PublishTask::Run(v8::JobDelegate*)",93957341846256,93957341846617],["v8::internal::wasm::DeserializationQueue::PopAll()",93957341846688,93957341847041],["v8::internal::AssemblerBase::GetCodeTarget(long) const",93957336009008,93957336009022],["v8::internal::(anonymous namespace)::DefaultAssemblerBuffer::~DefaultAssemblerBuffer()",93957336010720,93957336010775],["v8::internal::GetAbortReason(v8::internal::AbortReason)",93957336011920,93957336011939],["v8::internal::CodeCommentsWriter::entry_count() const",93957336012384,93957336012402],["v8::internal::CodeFactory::CEntry(v8::internal::Isolate*, int, v8::internal::SaveFPRegsMode, v8::internal::ArgvMode, bool)",93957336012976,93957336013229],["v8::internal::CodeFactory::LoadGlobalIC(v8::internal::Isolate*, v8::internal::TypeofMode)",93957336013264,93957336013305],["v8::internal::CodeFactory::StoreOwnIC(v8::internal::Isolate*)",93957336013360,93957336013389],["v8::internal::CodeFactory::KeyedStoreIC_SloppyArguments(v8::internal::Isolate*, v8::internal::KeyedAccessStoreMode)",93957336013424,93957336013470],["v8::internal::WasmJSFunction::New(v8::internal::Isolate*, v8::internal::Signature<v8::internal::wasm::ValueType> const*, v8::internal::Handle<v8::internal::JSReceiver>)",93957341820672,93957341821936],["v8::internal::wasm::IsJSCompatibleSignature(v8::internal::Signature<v8::internal::wasm::ValueType> const*, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmFeatures const&)",93957341823584,93957341823766],["v8::internal::wasm::ErrorThrower::CompileError(char const*, ...)",93957341824768,93957341824911],["v8::internal::wasm::ErrorThrower::Reset()",93957341825760,93957341825804],["v8::internal::wasm::WasmSerializer::WasmSerializer(v8::internal::wasm::NativeModule*)",93957341826128,93957341826173],["v8::internal::wasm::WasmSerializer::SerializeNativeModule(v8::internal::Vector<unsigned char>) const",93957341826400,93957341827787],["v8::internal::wasm::NativeModuleDeserializer::CopyAndRelocate(v8::internal::wasm::DeserializationUnit const&)",93957341827904,93957341828313],["v8::internal::wasm::DeserializeNativeModule(v8::internal::Isolate*, v8::internal::Vector<unsigned char const>, v8::internal::Vector<unsigned char const>, v8::internal::Vector<char const>)",93957341828688,93957341832442],["v8::internal::AssemblerBase::~AssemblerBase()",93957336008240,93957336008268],["v8::internal::OFStream::~OFStream()",93957336009920,93957336009991],["virtual thunk to v8::internal::StdoutStream::~StdoutStream()",93957336010528,93957336010666],["v8::internal::(anonymous namespace)::ExternalAssemblerBufferImpl::~ExternalAssemblerBufferImpl()",93957336010864,93957336010928],["v8::internal::GetBailoutReason(v8::internal::BailoutReason)",93957336011888,93957336011907],["v8::internal::IsValidAbortReason(int)",93957336011952,93957336011964],["v8::internal::CodeCommentsWriter::Add(unsigned int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)",93957336012240,93957336012379],["void std::__1::vector<v8::internal::CodeCommentEntry, std::__1::allocator<v8::internal::CodeCommentEntry> >::__push_back_slow_path<v8::internal::CodeCommentEntry>(v8::internal::CodeCommentEntry&&)",93957336012416,93957336012803],["v8::internal::WasmCapiFunction::MatchesSignature(v8::internal::Signature<v8::internal::wasm::ValueType> const*) const",93957341818864,93957341819174],["v8::internal::AsmWasmData::New(v8::internal::Isolate*, std::__1::shared_ptr<v8::internal::wasm::NativeModule>, v8::internal::Handle<v8::internal::FixedArray>, v8::internal::Handle<v8::internal::HeapNumber>)",93957341822320,93957341822881],["std::__1::__shared_ptr_emplace<v8::internal::(anonymous namespace)::WasmInstanceNativeAllocations, std::__1::allocator<v8::internal::(anonymous namespace)::WasmInstanceNativeAllocations> >::__on_zero_shared()",93957341823120,93957341823292],["v8::internal::wasm::ErrorThrower::Format(v8::internal::wasm::ErrorThrower::ErrorType, char const*, __va_list_tag*)",93957341823952,93957341824194],["v8::internal::wasm::ErrorThrower::RangeError(char const*, ...)",93957341824624,93957341824767],["v8::internal::wasm::ErrorThrower::LinkError(char const*, ...)",93957341824912,93957341825055],["v8::internal::wasm::ErrorThrower::Reify()",93957341825200,93957341825749],["v8::internal::wasm::ErrorThrower::~ErrorThrower()",93957341825808,93957341825888],["v8::internal::AlignedSlotAllocator::AllocateUnaligned(int)",93957336007056,93957336007151],["v8::internal::Assembler::RecordDeoptReason(v8::internal::DeoptimizeReason, v8::internal::SourcePosition, int)",93957336008448,93957336008590],["v8::internal::AssemblerBase::GetEmbeddedObject(unsigned long) const",93957336009776,93957336009790],["virtual thunk to v8::internal::OFStream::~OFStream()",93957336010080,93957336010165],["virtual thunk to v8::internal::StdoutStream::~StdoutStream()",93957336010384,93957336010514],["v8::internal::(anonymous namespace)::DefaultAssemblerBuffer::~DefaultAssemblerBuffer()",93957336010672,93957336010714],["v8::internal::(anonymous namespace)::DefaultAssemblerBuffer::Grow(int)",93957336010784,93957336010853],["v8::internal::(anonymous namespace)::ExternalAssemblerBufferImpl::Grow(int)",93957336010928,93957336010946],["v8::internal::WasmJSFunction::GetSignature(v8::internal::Zone*)",93957341816272,93957341816534],["v8::internal::WasmExportedFunction::GetWasmCallTarget()",93957341819824,93957341819983],["v8::internal::WasmExternalFunction::IsWasmExternalFunction(v8::internal::Object)",93957341822112,93957341822260],["std::__1::__shared_ptr_emplace<v8::internal::(anonymous namespace)::IftNativeAllocations, std::__1::allocator<v8::internal::(anonymous namespace)::IftNativeAllocations> >::~__shared_ptr_emplace()",93957341822928,93957341822966],["std::__1::__shared_ptr_emplace<v8::internal::(anonymous namespace)::WasmInstanceNativeAllocations, std::__1::allocator<v8::internal::(anonymous namespace)::WasmInstanceNativeAllocations> >::~__shared_ptr_emplace()",93957341823072,93957341823110],["v8::internal::wasm::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::Signature<v8::internal::wasm::ValueType> const&)",93957341823296,93957341823576],["v8::internal::wasm::WasmError::FormatError(char const*, __va_list_tag*)",93957341823776,93957341823948],["v8::internal::wasm::(anonymous namespace)::PrintFToString(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*, unsigned long, char const*, ...)",93957341824208,93957341824475],["v8::internal::BuiltinsConstantsTableBuilder::PatchSelfReference(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Code>)",93957336005984,93957336006052],["v8::internal::ExternalAssemblerBuffer(void*, int)",93957336007520,93957336007609],["v8::internal::HeapObjectRequest::HeapObjectRequest(double, int)",93957336008384,93957336008404],["v8::internal::AssemblerBase::RequestHeapObject(v8::internal::HeapObjectRequest)",93957336008656,93957336008718],["v8::internal::AssemblerBase::AddEmbeddedObject(v8::internal::Handle<v8::internal::HeapObject>)",93957336009024,93957336009769],["v8::internal::Assembler::WriteCodeComments()",93957336009792,93957336009908],["v8::internal::OFStream::~OFStream()",93957336010000,93957336010079],["virtual thunk to v8::internal::OFStream::~OFStream()",93957336010176,93957336010269],["v8::internal::WasmInstanceObject::SetRawMemory(unsigned char*, unsigned long)",93957341810480,93957341810580],["v8::internal::WasmStruct::GetFieldValue(unsigned int)",93957341817232,93957341817671],["v8::internal::WasmExceptionPackage::GetExceptionValues(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmExceptionPackage>)",93957341819440,93957341819686],["v8::internal::WasmExportedFunction::MatchesSignature(v8::internal::wasm::WasmModule const*, v8::internal::Signature<v8::internal::wasm::ValueType> const*)",93957341820128,93957341820525],["v8::internal::WasmJSFunction::MatchesSignature(v8::internal::Signature<v8::internal::wasm::ValueType> const*)",93957341821936,93957341822110],["v8::internal::WasmExceptionTag::New(v8::internal::Isolate*, int)",93957341822272,93957341822310],["std::__1::__shared_ptr_emplace<v8::internal::(anonymous namespace)::IftNativeAllocations, std::__1::allocator<v8::internal::(anonymous namespace)::IftNativeAllocations> >::~__shared_ptr_emplace()",93957341822896,93957341822916],["std::__1::__shared_ptr_emplace<v8::internal::(anonymous namespace)::IftNativeAllocations, std::__1::allocator<v8::internal::(anonymous namespace)::IftNativeAllocations> >::__on_zero_shared()",93957341822976,93957341823034],["v8::internal::Builtins::InitializeBuiltinEntryTable(v8::internal::Isolate*)",93957336003888,93957336004105],["v8::internal::IdentityMap<unsigned int, v8::internal::FreeStoreAllocationPolicy>::~IdentityMap()",93957336006816,93957336006862],["v8::internal::AssemblerOptions::Default(v8::internal::Isolate*)",93957336007264,93957336007387],["v8::internal::AssemblerBase::AssemblerBase(v8::internal::AssemblerOptions const&, std::__1::unique_ptr<v8::internal::AssemblerBuffer, std::__1::default_delete<v8::internal::AssemblerBuffer> >)",93957336007696,93957336007932],["v8::internal::StdoutStream::~StdoutStream()",93957336008272,93957336008373],["v8::internal::HeapObjectRequest::HeapObjectRequest(v8::internal::StringConstantBase const*, int)",93957336008416,93957336008435],["v8::internal::Assembler::DataAlign(int)",93957336008592,93957336008653],["v8::internal::AssemblerBase::AddCodeTarget(v8::internal::Handle<v8::internal::Code>)",93957336008720,93957336009003],["v8::internal::(anonymous namespace)::SetInstanceMemory(v8::internal::Handle<v8::internal::WasmInstanceObject>, v8::internal::Handle<v8::internal::JSArrayBuffer>)",93957341807200,93957341807411],["v8::internal::WasmInstanceObject::InitTableEntries(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmInstanceObject>, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int)",93957341813952,93957341813962],["v8::internal::WasmInstanceObject::GetGlobalBufferAndIndex(v8::internal::Handle<v8::internal::WasmInstanceObject>, v8::internal::wasm::WasmGlobal const&)",93957341816608,93957341816840],["v8::internal::WasmExceptionObject::New(v8::internal::Isolate*, v8::internal::Signature<v8::internal::wasm::ValueType> const*, v8::internal::Handle<v8::internal::HeapObject>)",93957341818096,93957341818715],["v8::internal::WasmExceptionPackage::GetExceptionTag(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmExceptionPackage>)",93957341819184,93957341819430],["v8::internal::WasmExceptionPackage::GetEncodedSize(v8::internal::wasm::WasmException const*)",93957341819696,93957341819820],["v8::internal::WasmExportedFunction::sig()",93957341819984,93957341820123],["v8::internal::WasmExportedFunction::GetDebugName(v8::internal::Signature<v8::internal::wasm::ValueType> const*)",93957341820528,93957341820663],["v8::internal::Builtins::builtin(int)",93957335998720,93957335998741],["v8::internal::Builtins::AllowDynamicFunction(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSFunction>, v8::internal::Handle<v8::internal::JSObject>)",93957336005552,93957336005744],["v8::internal::BuiltinsConstantsTableBuilder::Finalize()",93957336006144,93957336006754],["v8::internal::IdentityMap<unsigned int, v8::internal::FreeStoreAllocationPolicy>::DeletePointerArray(unsigned long*, unsigned long)",93957336006896,93957336006909],["v8::internal::AlignedSlotAllocator::Align(int)",93957336007152,93957336007260],["v8::internal::AssemblerOptions::DefaultForOffHeapTrampoline(v8::internal::Isolate*)",93957336007392,93957336007507],["v8::internal::NewAssemblerBuffer(int)",93957336007616,93957336007685],["v8::internal::AssemblerBase::~AssemblerBase()",93957336007936,93957336008228],["v8::internal::IndirectFunctionTableEntry::clear()",93957341803520,93957341803803],["v8::internal::ImportedFunctionEntry::SetWasmToJs(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::wasm::WasmCode const*)",93957341809904,93957341810126],["v8::internal::WasmInstanceObject::InitDataSegmentArrays(v8::internal::Handle<v8::internal::WasmInstanceObject>, v8::internal::Handle<v8::internal::WasmModuleObject>)",93957341813120,93957341813396],["v8::internal::WasmExportedFunction::New(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmInstanceObject>, int, int, v8::internal::Handle<v8::internal::Code>)",93957341814112,93957341815784],["v8::internal::WasmJSFunction::GetCallable() const",93957341816544,93957341816601],["v8::internal::WasmInstanceObject::GetGlobalValue(v8::internal::Handle<v8::internal::WasmInstanceObject>, v8::internal::wasm::WasmGlobal const&)",93957341816848,93957341817227],["v8::internal::WasmArray::GetElement(unsigned int)",93957341817680,93957341818090],["v8::internal::WasmExceptionObject::MatchesSignature(v8::internal::Signature<v8::internal::wasm::ValueType> const*)",93957341818720,93957341818861],["v8::internal::Builtins::GetContinuationBytecodeOffset(v8::internal::Builtins::Name)",93957335998480,93957335998489],["v8::internal::Builtins::CallableFor(v8::internal::Isolate*, v8::internal::Builtins::Name)",93957336003632,93957336003721],["v8::internal::Builtins::GenerateOffHeapTrampolineFor(v8::internal::Isolate*, unsigned long, int, bool)",93957336004640,93957336005507],["v8::internal::BuiltinsConstantsTableBuilder::BuiltinsConstantsTableBuilder(v8::internal::Isolate*)",93957336005872,93957336005929],["v8::internal::BuiltinsConstantsTableBuilder::PatchBasicBlockCountersReference(v8::internal::Handle<v8::internal::ByteArray>)",93957336006064,93957336006139],["v8::internal::IdentityMap<unsigned int, v8::internal::FreeStoreAllocationPolicy>::~IdentityMap()",93957336006768,93957336006806],["v8::internal::IdentityMap<unsigned int, v8::internal::FreeStoreAllocationPolicy>::NewPointerArray(unsigned long)",93957336006864,93957336006882],["v8::internal::AlignedSlotAllocator::Allocate(int)",93957336006912,93957336007041],["v8::internal::WasmTableObject::Get(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmTableObject>, unsigned int)",93957341799984,93957341800913],["v8::internal::WasmIndirectFunctionTable::Resize(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmIndirectFunctionTable>, unsigned int)",93957341805504,93957341806020],["v8::internal::WasmMemoryObject::Grow(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmMemoryObject>, unsigned int)",93957341807872,93957341809122],["v8::internal::ImportedFunctionEntry::maybe_callable()",93957341810336,93957341810413],["v8::internal::WasmInstanceObject::New(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmModuleObject>)",93957341810592,93957341813113],["v8::internal::WasmInstanceObject::CopyTableEntries(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmInstanceObject>, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int)",93957341813408,93957341813951],["v8::internal::WasmInstanceObject::GetWasmExternalFunction(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmInstanceObject>, int)",93957341813968,93957341814106],["v8::internal::WasmInstanceObject::SetWasmExternalFunction(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmInstanceObject>, int, v8::internal::Handle<v8::internal::WasmExternalFunction>)",93957341815792,93957341816260],["v8::internal::Builtin_Impl_TypedArrayPrototypeReverse(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335994336,93957335994711],["v8::internal::Builtins::CallFunction(v8::internal::ConvertReceiverMode)",93957335998560,93957335998603],["v8::internal::Builtins::CallInterfaceDescriptorFor(v8::internal::Builtins::Name)",93957335998784,93957336003594],["v8::internal::Builtins::IsBuiltinHandle(v8::internal::Handle<v8::internal::HeapObject>, int*) const",93957336003760,93957336003856],["v8::internal::Builtins::EmitCodeCreateEvents(v8::internal::Isolate*)",93957336004112,93957336004633],["v8::internal::Builtins::IsCpp(int)",93957336005520,93957336005548],["v8::internal::Builtins::CodeObjectIsExecutable(int)",93957336005744,93957336005872],["v8::internal::BuiltinsConstantsTableBuilder::AddObject(v8::internal::Handle<v8::internal::Object>)",93957336005936,93957336005983],["v8::internal::WasmTableObject::ClearDispatchTables(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmTableObject>, int)",93957341796688,93957341797214],["v8::internal::IndirectFunctionTableEntry::Set(int, v8::internal::Handle<v8::internal::WasmInstanceObject>, int)",93957341801936,93957341802086],["v8::internal::WasmTableObject::GetFunctionTableEntry(v8::internal::Isolate*, v8::internal::wasm::WasmModule const*, v8::internal::Handle<v8::internal::WasmTableObject>, int, bool*, bool*, v8::internal::MaybeHandle<v8::internal::WasmInstanceObject>*, int*, v8::internal::MaybeHandle<v8::internal::WasmJSFunction>*)",93957341804080,93957341804726],["v8::internal::WasmMemoryObject::New(v8::internal::Isolate*, int, int, v8::internal::SharedFlag)",93957341806624,93957341806777],["v8::internal::WasmMemoryObject::update_instances(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSArrayBuffer>)",93957341807424,93957341807871],["v8::internal::WasmGlobalObject::New(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmInstanceObject>, v8::internal::MaybeHandle<v8::internal::JSArrayBuffer>, v8::internal::MaybeHandle<v8::internal::FixedArray>, v8::internal::wasm::ValueType, int, bool)",93957341809136,93957341809898],["v8::internal::ImportedFunctionEntry::SetWasmToWasm(v8::internal::WasmInstanceObject, unsigned long)",93957341810128,93957341810329],["v8::internal::ImportedFunctionEntry::callable()",93957341810416,93957341810465],["v8::internal::Builtin_TypedArrayPrototypeIndexOf(int, unsigned long*, v8::internal::Isolate*)",93957335991040,93957335991072],["v8::internal::Builtin_Impl_FinalizationRegistryUnregister(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335995408,93957335995788],["v8::internal::Builtins::TearDown()",93957335998512,93957335998522],["v8::internal::Builtins::Call(v8::internal::ConvertReceiverMode)",93957335998640,93957335998683],["v8::internal::Builtins::GetStackParameterCount(v8::internal::Builtins::Name)",93957335998752,93957335998777],["v8::internal::Builtins::KindOf(int)",93957336003600,93957336003624],["v8::internal::Builtins::CppEntryOf(int)",93957336003728,93957336003753],["v8::internal::Builtins::IsIsolateIndependentBuiltin(v8::internal::Code)",93957336003856,93957336003873],["v8::internal::WasmTableObject::AddDispatchTable(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmTableObject>, v8::internal::Handle<v8::internal::WasmInstanceObject>, int)",93957341791904,93957341792352],["v8::internal::WasmTableObject::UpdateDispatchTables(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmTableObject>, int, v8::internal::Signature<v8::internal::wasm::ValueType> const*, v8::internal::Handle<v8::internal::WasmInstanceObject>, int)",93957341797440,93957341798318],["v8::internal::WasmInstanceObject::GetOrCreateWasmExternalFunction(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmInstanceObject>, int)",93957341801024,93957341801836],["v8::internal::WasmCapiFunction::GetHostCallTarget() const",93957341803184,93957341803237],["v8::internal::WasmTableObject::SetFunctionTablePlaceholder(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmTableObject>, int, v8::internal::Handle<v8::internal::WasmInstanceObject>, int)",93957341803808,93957341804077],["v8::internal::WasmIndirectFunctionTable::New(v8::internal::Isolate*, unsigned int)",93957341804736,93957341805493],["v8::internal::WasmMemoryObject::New(v8::internal::Isolate*, v8::internal::MaybeHandle<v8::internal::JSArrayBuffer>, int)",93957341806032,93957341806614],["v8::internal::WasmMemoryObject::AddInstance(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmMemoryObject>, v8::internal::Handle<v8::internal::WasmInstanceObject>)",93957341806784,93957341807185],["v8::internal::Builtin_Impl_Stats_TypedArrayPrototypeCopyWithin(int, unsigned long*, v8::internal::Isolate*)",93957335986544,93957335987016],["v8::internal::Builtin_Impl_Stats_TypedArrayPrototypeLastIndexOf(int, unsigned long*, v8::internal::Isolate*)",93957335992448,93957335992920],["v8::internal::Builtin_FinalizationRegistryUnregister(int, unsigned long*, v8::internal::Isolate*)",93957335994896,93957335994928],["v8::internal::Object::GetSimpleHash(v8::internal::Object)",93957335997216,93957335997784],["v8::internal::SourceTextModule::ExportIndex(int)",93957335998496,93957335998505],["v8::internal::Builtins::name(int)",93957335998528,93957335998552],["v8::internal::Builtins::builtin_handle(int)",93957335998608,93957335998629],["v8::internal::Builtins::set_builtin(int, v8::internal::Code)",93957335998688,93957335998709],["v8::internal::WasmModuleObject::ExtractUtf8StringFromModuleBytes(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmModuleObject>, v8::internal::wasm::WireBytesRef, v8::internal::InternalizeString)",93957341789248,93957341789520],["v8::internal::WasmTableObject::IsInBounds(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmTableObject>, unsigned int)",93957341794720,93957341794739],["v8::internal::WasmExportedFunction::instance()",93957341797312,93957341797369],["v8::internal::WasmTableObject::UpdateDispatchTables(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmTableObject>, int, v8::internal::Handle<v8::internal::WasmJSFunction>)",93957341798416,93957341798785],["v8::internal::WasmCapiFunction::IsWasmCapiFunction(v8::internal::Object)",93957341800928,93957341801018],["v8::internal::WasmTableObject::Fill(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmTableObject>, unsigned int, v8::internal::Handle<v8::internal::Object>, unsigned int)",93957341801840,93957341801928],["v8::internal::WasmInstanceObject::ImportWasmJSFunctionIntoTable(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmInstanceObject>, int, int, v8::internal::Handle<v8::internal::WasmJSFunction>)",93957341802096,93957341803179],["v8::internal::IndirectFunctionTableEntry::Set(int, unsigned long, v8::internal::Object)",93957341803248,93957341803511],["v8::internal::(anonymous namespace)::JsonTraceValue::JsonTraceValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>)",93957335985440,93957335985573],["v8::internal::Builtin_Impl_TypedArrayPrototypeFill(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335988752,93957335989773],["v8::internal::Builtin_Impl_TypedArrayPrototypeIndexOf(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335991552,93957335992410],["v8::internal::Builtin_TypedArrayPrototypeReverse(int, unsigned long*, v8::internal::Isolate*)",93957335993824,93957335993856],["v8::internal::(anonymous namespace)::CapRelativeIndex(v8::internal::Handle<v8::internal::Object>, long, long)",93957335994720,93957335994893],["v8::internal::Builtin_Impl_Stats_FinalizationRegistryUnregister(int, unsigned long*, v8::internal::Isolate*)",93957335994928,93957335995400],["bool v8::internal::JSFinalizationRegistry::RemoveUnregisterToken<v8::internal::JSFinalizationRegistry::Unregister(v8::internal::Handle<v8::internal::JSFinalizationRegistry>, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Isolate*)::{lambda(v8::internal::WeakCell)#1}, v8::internal::JSFinalizationRegistry::Unregister(v8::internal::Handle<v8::internal::JSFinalizationRegistry>, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Isolate*)::{lambda(v8::internal::HeapObject, v8::internal::CompressedObjectSlot, v8::internal::Object)#1}>(v8::internal::JSReceiver, v8::internal::Isolate*, v8::internal::JSFinalizationRegistry::Unregister(v8::internal::Handle<v8::internal::JSFinalizationRegistry>, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Isolate*)::{lambda(v8::internal::WeakCell)#1}, v8::internal::JSFinalizationRegistry::Unregister(v8::internal::Handle<v8::internal::JSFinalizationRegistry>, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Isolate*)::{lambda(v8::internal::HeapObject, v8::internal::CompressedObjectSlot, v8::internal::Object)#1})",93957335995792,93957335997215],["v8::internal::WeakCell::RemoveFromFinalizationRegistryCells(v8::internal::Isolate*)",93957335997792,93957335998473],["v8::internal::wasm::GetImports(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmModuleObject>)",93957341783328,93957341784890],["v8::internal::WasmModuleObject::GetFunctionName(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmModuleObject>, unsigned int)",93957341790000,93957341790159],["v8::internal::WasmInstanceObject::EnsureIndirectFunctionTableWithMinimumSize(v8::internal::Handle<v8::internal::WasmInstanceObject>, int, unsigned int)",93957341793248,93957341794272],["v8::internal::wasm::TypecheckJSObject(v8::internal::Isolate*, v8::internal::wasm::WasmModule const*, v8::internal::Handle<v8::internal::Object>, v8::internal::wasm::ValueType, char const**)",93957341794864,93957341795945],["v8::internal::WasmExportedFunction::IsWasmExportedFunction(v8::internal::Object)",93957341797216,93957341797305],["v8::internal::WasmExportedFunction::function_index()",93957341797376,93957341797430],["v8::internal::WasmJSFunction::IsWasmJSFunction(v8::internal::Object)",93957341798320,93957341798406],["v8::internal::WasmTableObject::UpdateDispatchTables(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmTableObject>, int, v8::internal::Handle<v8::internal::WasmCapiFunction>)",93957341798800,93957341799971],["v8::internal::Builtin_IsTraceCategoryEnabled(int, unsigned long*, v8::internal::Isolate*)",93957335982016,93957335982048],["v8::internal::Builtin_TypedArrayPrototypeBuffer(int, unsigned long*, v8::internal::Isolate*)",93957335985728,93957335985760],["v8::internal::Builtin_TypedArrayPrototypeFill(int, unsigned long*, v8::internal::Isolate*)",93957335988240,93957335988272],["v8::internal::Builtin_Impl_Stats_TypedArrayPrototypeIncludes(int, unsigned long*, v8::internal::Isolate*)",93957335989808,93957335990280],["v8::internal::Builtin_Impl_Stats_TypedArrayPrototypeIndexOf(int, unsigned long*, v8::internal::Isolate*)",93957335991072,93957335991544],["v8::internal::Builtin_TypedArrayPrototypeLastIndexOf(int, unsigned long*, v8::internal::Isolate*)",93957335992416,93957335992448],["v8::internal::Builtin_Impl_TypedArrayPrototypeLastIndexOf(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335992928,93957335993818],["v8::internal::Builtin_Impl_Stats_TypedArrayPrototypeReverse(int, unsigned long*, v8::internal::Isolate*)",93957335993856,93957335994328],["v8::internal::wasm::ModuleWireBytes::GetNameOrNull(v8::internal::wasm::WasmFunction const*, v8::internal::wasm::WasmModule const*) const",93957341780096,93957341780188],["v8::internal::wasm::EstimateStoredSize(v8::internal::wasm::WasmModule const*)",93957341787616,93957341787830],["v8::internal::WasmModuleObject::GetModuleNameOrNull(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmModuleObject>)",93957341789632,93957341789696],["v8::internal::WasmTableObject::New(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmInstanceObject>, v8::internal::wasm::ValueType, unsigned int, bool, unsigned int, v8::internal::Handle<v8::internal::FixedArray>*)",93957341790432,93957341791853],["v8::internal::WasmTableObject::Grow(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmTableObject>, unsigned int, v8::internal::Handle<v8::internal::Object>)",93957341792352,93957341793248],["v8::internal::WasmTableObject::Set(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmTableObject>, unsigned int, v8::internal::Handle<v8::internal::Object>)",93957341794272,93957341794715],["v8::internal::WasmTableObject::IsValidElement(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmTableObject>, v8::internal::Handle<v8::internal::Object>)",93957341794752,93957341794855],["v8::internal::WasmTableObject::SetFunctionTableEntry(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmTableObject>, v8::internal::Handle<v8::internal::FixedArray>, int, v8::internal::Handle<v8::internal::Object>)",93957341795952,93957341796685],["v8::internal::Builtin_Impl_Stats_SymbolConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335979632,93957335980104],["v8::internal::Builtin_Impl_Stats_Trace(int, unsigned long*, v8::internal::Isolate*)",93957335982880,93957335983352],["v8::internal::(anonymous namespace)::JsonTraceValue::~JsonTraceValue()",93957335985616,93957335985664],["v8::internal::Builtin_Impl_TypedArrayPrototypeBuffer(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335986240,93957335986512],["v8::internal::Builtin_Impl_TypedArrayPrototypeCopyWithin(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335987024,93957335988238],["v8::internal::Builtin_Impl_Stats_TypedArrayPrototypeFill(int, unsigned long*, v8::internal::Isolate*)",93957335988272,93957335988744],["v8::internal::Builtin_TypedArrayPrototypeIncludes(int, unsigned long*, v8::internal::Isolate*)",93957335989776,93957335989808],["v8::internal::Builtin_Impl_TypedArrayPrototypeIncludes(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335990288,93957335991040],["v8::internal::wasm::GetWasmFunctionOffset(v8::internal::wasm::WasmModule const*, unsigned int)",93957341779184,93957341779231],["v8::internal::wasm::GetTypeForFunction(v8::internal::Isolate*, v8::internal::Signature<v8::internal::wasm::ValueType> const*)",93957341780528,93957341781600],["v8::internal::wasm::GetCustomSections(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmModuleObject>, v8::internal::Handle<v8::internal::String>, v8::internal::wasm::ErrorThrower*)",93957341786304,93957341787378],["v8::internal::WasmModuleObject::New(v8::internal::Isolate*, std::__1::shared_ptr<v8::internal::wasm::NativeModule>, v8::internal::Handle<v8::internal::Script>)",93957341788352,93957341788412],["v8::internal::WasmModuleObject::ExtractUtf8StringFromModuleBytes(v8::internal::Isolate*, v8::internal::Vector<unsigned char const>, v8::internal::wasm::WireBytesRef, v8::internal::InternalizeString)",93957341789520,93957341789620],["v8::internal::WasmModuleObject::GetFunctionNameOrNull(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmModuleObject>, unsigned int)",93957341789696,93957341789992],["v8::internal::WasmModuleObject::GetRawFunctionName(unsigned int)",93957341790160,93957341790426],["v8::internal::WasmInstanceObject::module()",93957341791856,93957341791904],["v8::internal::Builtin_Impl_StringPrototypeLocaleCompare(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335976080,93957335976564],["v8::internal::Builtin_Impl_SymbolFor(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335981072,93957335981279],["v8::internal::Builtin_Impl_IsTraceCategoryEnabled(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335982528,93957335982848],["v8::internal::(anonymous namespace)::MaybeUtf8::MaybeUtf8(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>)",93957335984928,93957335985201],["v8::internal::(anonymous namespace)::JsonTraceValue::~JsonTraceValue()",93957335985584,93957335985616],["v8::internal::(anonymous namespace)::JsonTraceValue::AppendAsTraceFormat(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*) const",93957335985664,93957335985715],["v8::internal::Builtin_Impl_Stats_TypedArrayPrototypeBuffer(int, unsigned long*, v8::internal::Isolate*)",93957335985760,93957335986232],["v8::internal::Builtin_TypedArrayPrototypeCopyWithin(int, unsigned long*, v8::internal::Isolate*)",93957335986512,93957335986544],["v8::internal::wasm::WasmModuleSourceMap::GetSourceLine(unsigned long) const",93957341777616,93957341777731],["v8::internal::wasm::AsmJsOffsetInformation::~AsmJsOffsetInformation()",93957341779584,93957341779738],["v8::internal::wasm::WasmModule::WasmModule(std::__1::unique_ptr<v8::internal::Zone, std::__1::default_delete<v8::internal::Zone> >)",93957341780320,93957341780455],["v8::internal::wasm::GetTypeForMemory(v8::internal::Isolate*, unsigned int, v8::base::Optional<unsigned int>)",93957341782016,93957341782572],["v8::internal::wasm::GetExports(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmModuleObject>)",93957341784896,93957341786304],["v8::internal::wasm::GetSourcePosition(v8::internal::wasm::WasmModule const*, unsigned int, unsigned int, bool)",93957341787392,93957341787603],["v8::internal::wasm::PrintSignature(v8::internal::Vector<char>, v8::internal::Signature<v8::internal::wasm::ValueType> const*, char)",93957341787840,93957341788337],["v8::internal::WasmModuleObject::New(v8::internal::Isolate*, std::__1::shared_ptr<v8::internal::wasm::NativeModule>, v8::internal::Handle<v8::internal::Script>, v8::internal::Handle<v8::internal::FixedArray>)",93957341788416,93957341789241],["v8::internal::Builtin_Impl_Stats_AtomicsWaitAsync(int, unsigned long*, v8::internal::Isolate*)",93957335972560,93957335973242],["v8::internal::(anonymous namespace)::NextCodePoint(v8::internal::Isolate*, v8::internal::BuiltinArguments, int)",93957335978640,93957335979263],["v8::internal::Builtin_SymbolFor(int, unsigned long*, v8::internal::Isolate*)",93957335980560,93957335980592],["v8::internal::Builtin_Impl_Stats_SymbolKeyFor(int, unsigned long*, v8::internal::Isolate*)",93957335981312,93957335981784],["v8::internal::Builtin_Impl_Stats_IsTraceCategoryEnabled(int, unsigned long*, v8::internal::Isolate*)",93957335982048,93957335982520],["v8::internal::Builtin_Trace(int, unsigned long*, v8::internal::Isolate*)",93957335982848,93957335982880],["v8::internal::Builtin_Impl_Trace(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335983360,93957335984923],["v8::internal::DoubleToInt32(double)",93957335985216,93957335985427],["v8::internal::wasm::WasmModuleBuilder::WriteAsmJsOffsetTable(v8::internal::wasm::ZoneBuffer*) const",93957341772272,93957341772624],["void std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::__emplace_back_slow_path<char*>(char*&&)",93957341778064,93957341778593],["v8::internal::wasm::GetContainingWasmFunction(v8::internal::wasm::WasmModule const*, unsigned int)",93957341779344,93957341779478],["v8::internal::wasm::AsmJsOffsetInformation::GetFunctionOffsets(int)",93957341780016,93957341780057],["v8::internal::wasm::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::wasm::WasmFunctionName const&)",93957341780192,93957341780316],["v8::internal::wasm::IsWasmCodegenAllowed(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Context>)",93957341780464,93957341780514],["v8::internal::wasm::GetTypeForGlobal(v8::internal::Isolate*, bool, v8::internal::wasm::ValueType)",93957341781600,93957341782004],["v8::internal::wasm::GetTypeForTable(v8::internal::Isolate*, v8::internal::wasm::ValueType, unsigned int, v8::base::Optional<unsigned int>)",93957341782576,93957341783323],["v8::internal::ValidateIntegerTypedArray(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, char const*, bool)",93957335968720,93957335969082],["v8::internal::Builtin_StringPrototypeLastIndexOf(int, unsigned long*, v8::internal::Isolate*)",93957335974736,93957335974943],["v8::internal::Builtin_Impl_Stats_StringRaw(int, unsigned long*, v8::internal::Isolate*)",93957335976608,93957335977080],["v8::internal::Object::ToString(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)",93957335979536,93957335979585],["v8::internal::Builtin_Impl_SymbolConstructor(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335980112,93957335980554],["v8::internal::Builtin_Impl_Stats_SymbolFor(int, unsigned long*, v8::internal::Isolate*)",93957335980592,93957335981064],["v8::internal::Builtin_SymbolKeyFor(int, unsigned long*, v8::internal::Isolate*)",93957335981280,93957335981312],["v8::internal::Builtin_Impl_SymbolKeyFor(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335981792,93957335982012],["v8::internal::wasm::WasmModuleBuilder::AddExport(v8::internal::Vector<char const>, v8::internal::wasm::ImportExportKindCode, unsigned int)",93957341746080,93957341746480],["void std::__1::vector<v8::internal::wasm::WasmModuleBuilder::WasmTable, v8::internal::ZoneAllocator<v8::internal::wasm::WasmModuleBuilder::WasmTable> >::__push_back_slow_path<v8::internal::wasm::WasmModuleBuilder::WasmTable>(v8::internal::wasm::WasmModuleBuilder::WasmTable&&)",93957341775312,93957341775725],["v8::internal::wasm::WasmModuleSourceMap::HasSource(unsigned long, unsigned long) const",93957341777936,93957341777965],["v8::internal::wasm::MaxNumExportWrappers(v8::internal::wasm::WasmModule const*)",93957341779088,93957341779102],["v8::internal::wasm::GetNearestWasmFunction(v8::internal::wasm::WasmModule const*, unsigned int)",93957341779232,93957341779329],["v8::internal::wasm::AsmJsOffsetInformation::AsmJsOffsetInformation(v8::internal::Vector<unsigned char const>)",93957341779488,93957341779573],["v8::internal::wasm::AsmJsOffsetInformation::EnsureDecodedOffsets()",93957341779744,93957341780015],["v8::internal::wasm::ModuleWireBytes::GetNameOrNull(v8::internal::wasm::WireBytesRef) const",93957341780064,93957341780096],["v8::internal::Builtin_Impl_Stats_RegExpLeftContextGetter(int, unsigned long*, v8::internal::Isolate*)",93957335966304,93957335966738],["v8::internal::DoWait(v8::internal::Isolate*, v8::internal::FutexEmulation::WaitMode, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>)",93957335970320,93957335971414],["v8::internal::Builtin_Impl_Stats_StringFromCodePoint(int, unsigned long*, v8::internal::Isolate*)",93957335973280,93957335973752],["v8::internal::Builtin_StringPrototypeLocaleCompare(int, unsigned long*, v8::internal::Isolate*)",93957335975568,93957335975600],["v8::internal::Builtin_StringRaw(int, unsigned long*, v8::internal::Isolate*)",93957335976576,93957335976608],["v8::internal::Builtin_Impl_StringRaw(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335977088,93957335978635],["std::__1::vector<unsigned short, std::__1::allocator<unsigned short> >::push_back(unsigned short&&)",93957335979264,93957335979536],["v8::internal::Builtin_SymbolConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335979600,93957335979632],["v8::internal::wasm::WasmFunctionBuilder::WriteAsmWasmOffsetTable(v8::internal::wasm::ZoneBuffer*) const",93957341742192,93957341743278],["v8::internal::wasm::ZoneBuffer::write_u32(unsigned int)",93957341768080,93957341768236],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int>, std::__1::__unordered_map_hasher<v8::internal::Signature<v8::internal::wasm::ValueType>, std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int>, v8::base::hash<v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::equal_to<v8::internal::Signature<v8::internal::wasm::ValueType> >, true>, std::__1::__unordered_map_equal<v8::internal::Signature<v8::internal::wasm::ValueType>, std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int>, std::__1::equal_to<v8::internal::Signature<v8::internal::wasm::ValueType> >, v8::base::hash<v8::internal::Signature<v8::internal::wasm::ValueType> >, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int> > >::__emplace_unique_key_args<v8::internal::Signature<v8::internal::wasm::ValueType>, v8::internal::Signature<v8::internal::wasm::ValueType>&, unsigned int&>(v8::internal::Signature<v8::internal::wasm::ValueType> const&, v8::internal::Signature<v8::internal::wasm::ValueType>&, unsigned int&)",93957341772784,93957341774056],["v8::internal::wasm::WasmModuleSourceMap::WasmModuleSourceMap(v8::Isolate*, v8::Local<v8::String>)",93957341776144,93957341777156],["v8::internal::wasm::WasmModuleSourceMap::GetFilename(unsigned long) const",93957341777744,93957341777933],["v8::internal::wasm::WasmModuleSourceMap::HasValidEntry(unsigned long, unsigned long) const",93957341777968,93957341778061],["v8::internal::wasm::LazilyGeneratedNames::LookupFunctionName(v8::internal::wasm::ModuleWireBytes const&, unsigned int, v8::internal::Vector<v8::internal::wasm::WasmExport const>) const",93957341778608,93957341779085],["v8::internal::wasm::GetExportWrapperIndex(v8::internal::wasm::WasmModule const*, v8::internal::Signature<v8::internal::wasm::ValueType> const*, bool)",93957341779104,93957341779176],["v8::internal::Builtin_Impl_RegExpInputSetter(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335964400,93957335964858],["v8::internal::Builtin_Impl_RegExpRightContextGetter(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335967568,93957335967887],["v8::internal::Builtin_Impl_Stats_AtomicsNotify(int, unsigned long*, v8::internal::Isolate*)",93957335969120,93957335969592],["v8::internal::Builtin_Impl_Stats_AtomicsWait(int, unsigned long*, v8::internal::Isolate*)",93957335971648,93957335972327],["v8::internal::Builtin_StringFromCodePoint(int, unsigned long*, v8::internal::Isolate*)",93957335973248,93957335973280],["v8::internal::Builtin_Impl_StringFromCodePoint(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335973760,93957335974722],["v8::internal::Builtin_Impl_Stats_StringPrototypeLastIndexOf(int, unsigned long*, v8::internal::Isolate*)",93957335974944,93957335975564],["v8::internal::Builtin_Impl_Stats_StringPrototypeLocaleCompare(int, unsigned long*, v8::internal::Isolate*)",93957335975600,93957335976072],["v8::internal::wasm::WasmFunctionBuilder::EmitF64Const(double)",93957341740176,93957341740363],["v8::internal::wasm::WasmModuleBuilder::SetIndirectFunction(unsigned int, unsigned int)",93957341744784,93957341744802],["v8::internal::wasm::WasmModuleBuilder::SetMinMemorySize(unsigned int)",93957341746736,93957341746748],["v8::internal::wasm::ZoneBuffer::write_string(v8::internal::Vector<char const>)",93957341769056,93957341769340],["v8::internal::wasm::ZoneBuffer::write_u64(unsigned long)",93957341772624,93957341772780],["std::__1::vector<int, v8::internal::ZoneAllocator<int> >::__append(unsigned long, int const&)",93957341774064,93957341775312],["void std::__1::vector<v8::internal::wasm::WasmModuleBuilder::WasmGlobal, v8::internal::ZoneAllocator<v8::internal::wasm::WasmModuleBuilder::WasmGlobal> >::__push_back_slow_path<v8::internal::wasm::WasmModuleBuilder::WasmGlobal>(v8::internal::wasm::WasmModuleBuilder::WasmGlobal&&)",93957341775728,93957341776141],["v8::internal::wasm::WasmModuleSourceMap::DecodeMapping(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)",93957341777168,93957341777607],["v8::internal::Builtin_RegExpCapture9Getter(int, unsigned long*, v8::internal::Isolate*)",93957335962416,93957335962448],["v8::internal::Builtin_RegExpLastParenGetter(int, unsigned long*, v8::internal::Isolate*)",93957335965552,93957335965584],["v8::internal::Builtin_RegExpRightContextGetter(int, unsigned long*, v8::internal::Isolate*)",93957335967088,93957335967120],["v8::internal::Builtin_Impl_Stats_AtomicsIsLockFree(int, unsigned long*, v8::internal::Isolate*)",93957335967920,93957335968392],["v8::internal::Builtin_AtomicsNotify(int, unsigned long*, v8::internal::Isolate*)",93957335969088,93957335969120],["v8::internal::Builtin_Impl_AtomicsNotify(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335969600,93957335970311],["v8::internal::Builtin_AtomicsWait(int, unsigned long*, v8::internal::Isolate*)",93957335971424,93957335971641],["v8::internal::Builtin_AtomicsWaitAsync(int, unsigned long*, v8::internal::Isolate*)",93957335972336,93957335972556],["v8::internal::wasm::WasmFunctionBuilder::EmitTeeLocal(unsigned int)",93957341738544,93957341738561],["v8::internal::wasm::WasmFunctionBuilder::SetAsmFunctionStartPosition(unsigned long)",93957341741280,93957341741298],["v8::internal::wasm::WasmModuleBuilder::AddFunction(v8::internal::Signature<v8::internal::wasm::ValueType>*)",93957341743616,93957341744427],["v8::internal::wasm::WasmModuleBuilder::AddGlobalImport(v8::internal::Vector<char const>, v8::internal::wasm::ValueType, bool, v8::internal::Vector<char const>)",93957341745248,93957341746060],["v8::internal::wasm::WasmModuleBuilder::AddGlobal(v8::internal::wasm::ValueType, bool, v8::internal::wasm::WasmInitExpr)",93957341746480,93957341746722],["v8::internal::wasm::WasmModuleBuilder::WriteTo(v8::internal::wasm::ZoneBuffer*) const",93957341746752,93957341768078],["v8::internal::wasm::(anonymous namespace)::WriteValueType(v8::internal::wasm::ZoneBuffer*, v8::internal::wasm::ValueType const&)",93957341768240,93957341769055],["v8::internal::wasm::(anonymous namespace)::WriteInitializerExpression(v8::internal::wasm::ZoneBuffer*, v8::internal::wasm::WasmInitExpr const&, v8::internal::wasm::ValueType)",93957341769344,93957341772259],["v8::internal::Builtin_Impl_Stats_RegExpCapture6Getter(int, unsigned long*, v8::internal::Isolate*)",93957335960384,93957335960818],["v8::internal::Builtin_Impl_Stats_RegExpInputGetter(int, unsigned long*, v8::internal::Isolate*)",93957335963136,93957335963570],["v8::internal::Builtin_Impl_Stats_RegExpLastMatchGetter(int, unsigned long*, v8::internal::Isolate*)",93957335964896,93957335965330],["v8::internal::Builtin_Impl_RegExpLastParenGetter(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335966032,93957335966270],["v8::internal::Builtin_Impl_RegExpLeftContextGetter(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335966752,93957335967087],["v8::internal::Builtin_Impl_Stats_RegExpRightContextGetter(int, unsigned long*, v8::internal::Isolate*)",93957335967120,93957335967554],["v8::internal::Builtin_AtomicsIsLockFree(int, unsigned long*, v8::internal::Isolate*)",93957335967888,93957335967920],["v8::internal::Builtin_Impl_AtomicsIsLockFree(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335968400,93957335968709],["v8::internal::wasm::ZoneBuffer::write_i32v(int)",93957341737088,93957341737402],["v8::internal::wasm::WasmFunctionBuilder::EmitWithI32V(v8::internal::wasm::WasmOpcode, int)",93957341739248,93957341739432],["v8::internal::wasm::WasmFunctionBuilder::SetName(v8::internal::Vector<char const>)",93957341740864,93957341740878],["v8::internal::wasm::WasmFunctionBuilder::WriteSignature(v8::internal::wasm::ZoneBuffer*) const",93957341741328,93957341741575],["v8::internal::wasm::WasmModuleBuilder::WasmModuleBuilder(v8::internal::Zone*)",93957341743280,93957341743612],["v8::internal::wasm::WasmModuleBuilder::AllocateIndirectFunctions(unsigned int)",93957341744432,93957341744770],["v8::internal::wasm::WasmModuleBuilder::AddImport(v8::internal::Vector<char const>, v8::internal::Signature<v8::internal::wasm::ValueType>*, v8::internal::Vector<char const>)",93957341744816,93957341745242],["v8::internal::wasm::WasmModuleBuilder::MarkStartFunction(v8::internal::wasm::WasmFunctionBuilder*)",93957341746064,93957341746079],["v8::internal::Builtin_Impl_RegExpCapture3Getter(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335958768,93957335958972],["v8::internal::Builtin_Impl_RegExpCapture7Getter(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335961520,93957335961724],["v8::internal::Builtin_Impl_RegExpCapture9Getter(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335962896,93957335963100],["v8::internal::Builtin_RegExpInputSetter(int, unsigned long*, v8::internal::Isolate*)",93957335963888,93957335963920],["v8::internal::Builtin_RegExpLastMatchGetter(int, unsigned long*, v8::internal::Isolate*)",93957335964864,93957335964896],["v8::internal::Builtin_Impl_RegExpLastMatchGetter(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335965344,93957335965545],["v8::internal::Builtin_Impl_Stats_RegExpLastParenGetter(int, unsigned long*, v8::internal::Isolate*)",93957335965584,93957335966018],["v8::internal::Builtin_RegExpLeftContextGetter(int, unsigned long*, v8::internal::Isolate*)",93957335966272,93957335966304],["v8::internal::WasmGlobalObject::SetFuncRef(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)",93957341735424,93957341735639],["v8::internal::wasm::WasmFunctionBuilder::AddLocal(v8::internal::wasm::ValueType)",93957341738048,93957341738069],["v8::internal::wasm::WasmFunctionBuilder::Emit(v8::internal::wasm::WasmOpcode)",93957341738768,93957341738924],["v8::internal::wasm::ZoneBuffer::write_i64v(long)",93957341739632,93957341739981],["v8::internal::wasm::WasmFunctionBuilder::EmitDirectCallIndex(unsigned int)",93957341740368,93957341740861],["v8::internal::wasm::WasmFunctionBuilder::AddAsmWasmOffset(unsigned long, unsigned long)",93957341740880,93957341741278],["v8::internal::wasm::WasmFunctionBuilder::DeleteCodeAfter(unsigned long)",93957341741312,93957341741326],["v8::internal::wasm::WasmFunctionBuilder::WriteBody(v8::internal::wasm::ZoneBuffer*) const",93957341741584,93957341742184],["v8::internal::Builtin_RegExpCapture1Getter(int, unsigned long*, v8::internal::Isolate*)",93957335956912,93957335956944],["v8::internal::Builtin_RegExpCapture5Getter(int, unsigned long*, v8::internal::Isolate*)",93957335959664,93957335959696],["v8::internal::Builtin_RegExpCapture7Getter(int, unsigned long*, v8::internal::Isolate*)",93957335961040,93957335961072],["v8::internal::Builtin_Impl_Stats_RegExpCapture8Getter(int, unsigned long*, v8::internal::Isolate*)",93957335961760,93957335962194],["v8::internal::Builtin_Impl_Stats_RegExpCapture9Getter(int, unsigned long*, v8::internal::Isolate*)",93957335962448,93957335962882],["v8::internal::Builtin_RegExpInputGetter(int, unsigned long*, v8::internal::Isolate*)",93957335963104,93957335963136],["v8::internal::Builtin_Impl_RegExpInputGetter(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335963584,93957335963888],["v8::internal::Builtin_Impl_Stats_RegExpInputSetter(int, unsigned long*, v8::internal::Isolate*)",93957335963920,93957335964392],["v8::(anonymous namespace)::(anonymous namespace)::ToString(v8::internal::Handle<v8::internal::String>)",93957341734048,93957341734263],["v8::internal::wasm::ValueType* v8::internal::Zone::NewArray<v8::internal::wasm::ValueType, v8::internal::wasm::ValueType []>(unsigned long)",93957341736464,93957341736512],["v8::internal::wasm::WasmFunctionBuilder::SetSignature(v8::internal::Signature<v8::internal::wasm::ValueType>*)",93957341737664,93957341737695],["v8::internal::wasm::WasmFunctionBuilder::EmitWithU32V(v8::internal::wasm::WasmOpcode, unsigned int)",93957341738112,93957341738506],["v8::internal::wasm::ZoneBuffer::write(unsigned char const*, unsigned long)",93957341738576,93957341738756],["v8::internal::wasm::WasmFunctionBuilder::EmitWithU8(v8::internal::wasm::WasmOpcode, unsigned char)",93957341738928,93957341739233],["v8::internal::wasm::WasmFunctionBuilder::EmitI32Const(int)",93957341739440,93957341739619],["v8::internal::wasm::WasmFunctionBuilder::EmitF32Const(float)",93957341739984,93957341740170],["v8::internal::Builtin_Impl_Stats_ReflectOwnKeys(int, unsigned long*, v8::internal::Isolate*)",93957335952896,93957335953368],["v8::internal::Builtin_Impl_Stats_RegExpCapture2Getter(int, unsigned long*, v8::internal::Isolate*)",93957335957632,93957335958066],["v8::internal::Builtin_Impl_Stats_RegExpCapture4Getter(int, unsigned long*, v8::internal::Isolate*)",93957335959008,93957335959442],["v8::internal::Builtin_Impl_RegExpCapture5Getter(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335960144,93957335960348],["v8::internal::Builtin_Impl_RegExpCapture6Getter(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335960832,93957335961036],["v8::internal::Builtin_Impl_Stats_RegExpCapture7Getter(int, unsigned long*, v8::internal::Isolate*)",93957335961072,93957335961506],["v8::internal::Builtin_RegExpCapture8Getter(int, unsigned long*, v8::internal::Isolate*)",93957335961728,93957335961760],["v8::internal::Builtin_Impl_RegExpCapture8Getter(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335962208,93957335962412],["std::__1::__shared_ptr_emplace<v8::(anonymous namespace)::(anonymous namespace)::AsyncCompilationResolver, std::__1::allocator<v8::(anonymous namespace)::(anonymous namespace)::AsyncCompilationResolver> >::~__shared_ptr_emplace()",93957341732640,93957341732678],["v8::internal::WasmGlobalObject::SetI64(long)",93957341735104,93957341735145],["v8::(anonymous namespace)::(anonymous namespace)::GetIterableLength(v8::internal::Isolate*, v8::Local<v8::Context>, v8::Local<v8::Object>)",93957341736288,93957341736362],["v8::internal::wasm::ZoneBuffer::write_u8(unsigned char)",93957341736912,93957341737067],["v8::internal::wasm::WasmFunctionBuilder::EmitU32V(unsigned int)",93957341737408,93957341737655],["v8::internal::wasm::WasmModuleBuilder::AddSignature(v8::internal::Signature<v8::internal::wasm::ValueType>*)",93957341737696,93957341738040],["v8::internal::wasm::WasmFunctionBuilder::EmitGetLocal(unsigned int)",93957341738080,93957341738097],["v8::internal::wasm::WasmFunctionBuilder::EmitSetLocal(unsigned int)",93957341738512,93957341738529],["v8::internal::PrototypeIterator::AdvanceFollowingProxiesIgnoringAccessChecks()",93957335950640,93957335950972],["v8::internal::Builtin_Impl_ReflectSet(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335954224,93957335954994],["v8::internal::Builtin_Impl_RegExpCapture1Getter(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335957392,93957335957596],["v8::internal::Builtin_RegExpCapture3Getter(int, unsigned long*, v8::internal::Isolate*)",93957335958288,93957335958320],["v8::internal::Builtin_RegExpCapture4Getter(int, unsigned long*, v8::internal::Isolate*)",93957335958976,93957335959008],["v8::internal::Builtin_Impl_RegExpCapture4Getter(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335959456,93957335959660],["v8::internal::Builtin_Impl_Stats_RegExpCapture5Getter(int, unsigned long*, v8::internal::Isolate*)",93957335959696,93957335960130],["v8::internal::Builtin_RegExpCapture6Getter(int, unsigned long*, v8::internal::Isolate*)",93957335960352,93957335960384],["v8::(anonymous namespace)::(anonymous namespace)::AsyncInstantiateCompileResultResolver::~AsyncInstantiateCompileResultResolver()",93957341731776,93957341731827],["std::__1::__shared_ptr_emplace<v8::WasmStreaming, std::__1::allocator<v8::WasmStreaming> >::__on_zero_shared()",93957341732784,93957341732913],["v8::(anonymous namespace)::GetValueType(v8::Isolate*, v8::MaybeLocal<v8::Value>, v8::Local<v8::Context>, v8::internal::wasm::ValueType*, v8::internal::wasm::WasmFeatures)",93957341734544,93957341735047],["v8::internal::WasmGlobalObject::SetF64(double)",93957341735200,93957341735242],["v8::(anonymous namespace)::WebAssemblyGlobalGetValueCommon(v8::FunctionCallbackInfo<v8::Value> const&, char const*)",93957341735648,93957341736275],["v8::internal::Signature<v8::internal::wasm::ValueType>::operator==(v8::internal::Signature<v8::internal::wasm::ValueType> const&) const",93957341736368,93957341736458],["v8::internal::wasm::WasmFunctionBuilder::WasmFunctionBuilder(v8::internal::wasm::WasmModuleBuilder*)",93957341736512,93957341736906],["v8::internal::wasm::WasmFunctionBuilder::EmitI32V(int)",93957341737072,93957341737086],["v8::internal::Builtin_Impl_Stats_ObjectGetOwnPropertyDescriptors(int, unsigned long*, v8::internal::Isolate*)",93957335946928,93957335947400],["v8::internal::Builtin_ReflectGetOwnPropertyDescriptor(int, unsigned long*, v8::internal::Isolate*)",93957335951936,93957335951968],["v8::internal::Builtin_ReflectSet(int, unsigned long*, v8::internal::Isolate*)",93957335953712,93957335953744],["v8::internal::Builtin_Impl_Stats_RegExpPrototypeToString(int, unsigned long*, v8::internal::Isolate*)",93957335955040,93957335955512],["v8::internal::Builtin_Impl_Stats_RegExpCapture1Getter(int, unsigned long*, v8::internal::Isolate*)",93957335956944,93957335957378],["v8::internal::Builtin_RegExpCapture2Getter(int, unsigned long*, v8::internal::Isolate*)",93957335957600,93957335957632],["v8::internal::Builtin_Impl_RegExpCapture2Getter(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335958080,93957335958284],["v8::internal::Builtin_Impl_Stats_RegExpCapture3Getter(int, unsigned long*, v8::internal::Isolate*)",93957335958320,93957335958754],["v8::(anonymous namespace)::(anonymous namespace)::AsyncCompilationResolver::~AsyncCompilationResolver()",93957341731104,93957341731146],["v8::(anonymous namespace)::(anonymous namespace)::InstantiateBytesResultResolver::~InstantiateBytesResultResolver()",93957341732368,93957341732411],["std::__1::__shared_ptr_emplace<v8::WasmStreaming, std::__1::allocator<v8::WasmStreaming> >::~__shared_ptr_emplace()",93957341732704,93957341732724],["v8::(anonymous namespace)::GetInitialOrMinimumProperty(v8::Isolate*, v8::internal::wasm::ErrorThrower*, v8::Local<v8::Context>, v8::Local<v8::Object>, long*, long, unsigned long)",93957341733184,93957341733497],["bool v8::(anonymous namespace)::(anonymous namespace)::EnforceUint32<char const*>(char const*, v8::Local<v8::Value>, v8::Local<v8::Context>, v8::internal::wasm::ErrorThrower*, unsigned int*)",93957341734272,93957341734541],["v8::internal::WasmGlobalObject::SetI32(int)",93957341735056,93957341735096],["v8::internal::WasmGlobalObject::SetF32(float)",93957341735152,93957341735194],["v8::internal::WasmGlobalObject::SetExternRef(v8::internal::Handle<v8::internal::Object>)",93957341735248,93957341735410],["v8::internal::Builtin_ObjectGetOwnPropertySymbols(int, unsigned long*, v8::internal::Isolate*)",93957335944272,93957335944304],["v8::internal::JSReceiver::GetOwnPropertyAttributes(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::Name>)",93957335948992,93957335949265],["v8::internal::Builtin_Impl_Stats_ReflectDefineProperty(int, unsigned long*, v8::internal::Isolate*)",93957335951008,93957335951480],["v8::internal::Builtin_Impl_ReflectGetOwnPropertyDescriptor(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335952448,93957335952857],["v8::internal::Builtin_Impl_ReflectOwnKeys(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335953376,93957335953700],["v8::internal::Builtin_Impl_Stats_ReflectSet(int, unsigned long*, v8::internal::Isolate*)",93957335953744,93957335954216],["v8::internal::Builtin_RegExpPrototypeToString(int, unsigned long*, v8::internal::Isolate*)",93957335955008,93957335955040],["v8::internal::Builtin_Impl_RegExpPrototypeToString(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335955520,93957335956899],["v8::(anonymous namespace)::WebAssemblyGlobalType(v8::FunctionCallbackInfo<v8::Value> const&)",93957341728208,93957341728504],["v8::(anonymous namespace)::(anonymous namespace)::InstantiateModuleResultResolver::~InstantiateModuleResultResolver()",93957341731376,93957341731400],["v8::(anonymous namespace)::(anonymous namespace)::InstantiateBytesResultResolver::OnInstantiationSucceeded(v8::internal::Handle<v8::internal::WasmInstanceObject>)",93957341731904,93957341732283],["v8::(anonymous namespace)::WasmStreamingPromiseFailedCallback(v8::FunctionCallbackInfo<v8::Value> const&)",93957341732480,93957341732603],["std::__1::__shared_ptr_emplace<v8::(anonymous namespace)::(anonymous namespace)::AsyncCompilationResolver, std::__1::allocator<v8::(anonymous namespace)::(anonymous namespace)::AsyncCompilationResolver> >::__on_zero_shared()",93957341732688,93957341732704],["std::__1::__shared_ptr_emplace<v8::WasmStreaming, std::__1::allocator<v8::WasmStreaming> >::~__shared_ptr_emplace()",93957341732736,93957341732774],["v8::WasmStreaming::WasmStreamingImpl::WasmStreamingImpl(v8::Isolate*, char const*, std::__1::shared_ptr<v8::internal::wasm::CompilationResultResolver>)",93957341732928,93957341733183],["v8::(anonymous namespace)::GetOptionalIntegerProperty(v8::Isolate*, v8::internal::wasm::ErrorThrower*, v8::Local<v8::Context>, v8::Local<v8::Object>, v8::Local<v8::String>, bool*, long*, long, unsigned long)",93957341733504,93957341734041],["v8::internal::Builtin_ObjectFreeze(int, unsigned long*, v8::internal::Isolate*)",93957335941664,93957335941902],["v8::internal::Builtin_Impl_Stats_ObjectIsFrozen(int, unsigned long*, v8::internal::Isolate*)",93957335945296,93957335945957],["v8::internal::Builtin_ObjectSeal(int, unsigned long*, v8::internal::Isolate*)",93957335948128,93957335948366],["v8::internal::LookupIterator::Key::Key(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)",93957335949952,93957335950351],["v8::internal::Builtin_ReflectDefineProperty(int, unsigned long*, v8::internal::Isolate*)",93957335950976,93957335951008],["v8::internal::Builtin_Impl_ReflectDefineProperty(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335951488,93957335951928],["v8::internal::Builtin_Impl_Stats_ReflectGetOwnPropertyDescriptor(int, unsigned long*, v8::internal::Isolate*)",93957335951968,93957335952440],["v8::internal::Builtin_ReflectOwnKeys(int, unsigned long*, v8::internal::Isolate*)",93957335952864,93957335952896],["v8::(anonymous namespace)::WebAssemblyMemory(v8::FunctionCallbackInfo<v8::Value> const&)",93957341723536,93957341724347],["v8::(anonymous namespace)::GetFirstArgumentAsBytes(v8::FunctionCallbackInfo<v8::Value> const&, v8::internal::wasm::ErrorThrower*, bool*)",93957341730384,93957341730858],["v8::(anonymous namespace)::(anonymous namespace)::InstantiateModuleResultResolver::OnInstantiationSucceeded(v8::internal::Handle<v8::internal::WasmInstanceObject>)",93957341731184,93957341731266],["v8::(anonymous namespace)::(anonymous namespace)::AsyncInstantiateCompileResultResolver::OnCompilationSucceeded(v8::internal::Handle<v8::internal::WasmModuleObject>)",93957341731456,93957341731669],["v8::(anonymous namespace)::(anonymous namespace)::AsyncInstantiateCompileResultResolver::~AsyncInstantiateCompileResultResolver()",93957341731840,93957341731896],["v8::(anonymous namespace)::(anonymous namespace)::InstantiateBytesResultResolver::OnInstantiationFailed(v8::internal::Handle<v8::internal::Object>)",93957341732288,93957341732368],["v8::(anonymous namespace)::(anonymous namespace)::InstantiateBytesResultResolver::~InstantiateBytesResultResolver()",93957341732416,93957341732467],["std::__1::__shared_ptr_emplace<v8::(anonymous namespace)::(anonymous namespace)::AsyncCompilationResolver, std::__1::allocator<v8::(anonymous namespace)::(anonymous namespace)::AsyncCompilationResolver> >::~__shared_ptr_emplace()",93957341732608,93957341732628],["v8::internal::Builtin_Impl_ObjectDefineGetter(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335938816,93957335939249],["v8::internal::Builtin_Impl_ObjectPrototypeGetProto(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335943040,93957335943345],["v8::internal::Builtin_Impl_ObjectGetOwnPropertySymbols(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335944784,93957335945035],["v8::internal::Builtin_Impl_Stats_ObjectIsSealed(int, unsigned long*, v8::internal::Isolate*)",93957335946224,93957335946885],["v8::internal::Builtin_Impl_ObjectGetOwnPropertyDescriptors(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335947408,93957335948114],["v8::internal::Builtin_Impl_Stats_ObjectSeal(int, unsigned long*, v8::internal::Isolate*)",93957335948368,93957335948990],["v8::internal::(anonymous namespace)::ObjectLookupAccessor(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::AccessorComponent)",93957335949280,93957335949948],["v8::internal::PrototypeIterator::HasAccess() const",93957335950352,93957335950639],["v8::(anonymous namespace)::WebAssemblyInstance(v8::FunctionCallbackInfo<v8::Value> const&)",93957341720048,93957341720684],["v8::(anonymous namespace)::WebAssemblyGlobal(v8::FunctionCallbackInfo<v8::Value> const&)",93957341725728,93957341727143],["v8::(anonymous namespace)::WebAssemblyFunction(v8::FunctionCallbackInfo<v8::Value> const&)",93957341728640,93957341730032],["v8::(anonymous namespace)::(anonymous namespace)::AsyncCompilationResolver::OnCompilationFailed(v8::internal::Handle<v8::internal::Object>)",93957341730960,93957341731057],["std::__1::__shared_ptr_pointer<v8::(anonymous namespace)::(anonymous namespace)::AsyncCompilationResolver*, std::__1::shared_ptr<v8::internal::wasm::CompilationResultResolver>::__shared_ptr_default_delete<v8::internal::wasm::CompilationResultResolver, v8::(anonymous namespace)::(anonymous namespace)::AsyncCompilationResolver>, std::__1::allocator<v8::(anonymous namespace)::(anonymous namespace)::AsyncCompilationResolver> >::__on_zero_shared()",93957341731152,93957341731174],["v8::(anonymous namespace)::(anonymous namespace)::InstantiateModuleResultResolver::OnInstantiationFailed(v8::internal::Handle<v8::internal::Object>)",93957341731280,93957341731367],["v8::(anonymous namespace)::(anonymous namespace)::InstantiateModuleResultResolver::~InstantiateModuleResultResolver()",93957341731408,93957341731450],["v8::(anonymous namespace)::(anonymous namespace)::AsyncInstantiateCompileResultResolver::OnCompilationFailed(v8::internal::Handle<v8::internal::Object>)",93957341731680,93957341731770],["v8::internal::Builtin_Impl_Stats_ObjectPrototypePropertyIsEnumerable(int, unsigned long*, v8::internal::Isolate*)",93957335936016,93957335936488],["v8::internal::Builtin_ObjectLookupGetter(int, unsigned long*, v8::internal::Isolate*)",93957335940224,93957335940380],["v8::internal::Builtin_ObjectPrototypeGetProto(int, unsigned long*, v8::internal::Isolate*)",93957335942528,93957335942560],["v8::internal::Builtin_Impl_Stats_ObjectPrototypeSetProto(int, unsigned long*, v8::internal::Isolate*)",93957335943392,93957335943864],["v8::internal::Builtin_Impl_Stats_ObjectGetOwnPropertySymbols(int, unsigned long*, v8::internal::Isolate*)",93957335944304,93957335944776],["v8::internal::Builtin_ObjectIsFrozen(int, unsigned long*, v8::internal::Isolate*)",93957335945040,93957335945294],["v8::internal::Builtin_ObjectIsSealed(int, unsigned long*, v8::internal::Isolate*)",93957335945968,93957335946222],["v8::internal::Builtin_ObjectGetOwnPropertyDescriptors(int, unsigned long*, v8::internal::Isolate*)",93957335946896,93957335946928],["v8::(anonymous namespace)::WebAssemblyInstantiate(v8::FunctionCallbackInfo<v8::Value> const&)",93957341714912,93957341715997],["v8::(anonymous namespace)::WebAssemblyTableGrow(v8::FunctionCallbackInfo<v8::Value> const&)",93957341721952,93957341722415],["v8::(anonymous namespace)::WebAssemblyMemoryGetBuffer(v8::FunctionCallbackInfo<v8::Value> const&)",93957341724848,93957341725292],["v8::(anonymous namespace)::WebAssemblyGlobalGetValue(v8::FunctionCallbackInfo<v8::Value> const&)",93957341727184,93957341727201],["v8::(anonymous namespace)::WebAssemblyException(v8::FunctionCallbackInfo<v8::Value> const&)",93957341728512,93957341728628],["v8::(anonymous namespace)::WebAssemblyFunctionType(v8::FunctionCallbackInfo<v8::Value> const&)",93957341730032,93957341730376],["v8::(anonymous namespace)::(anonymous namespace)::AsyncCompilationResolver::OnCompilationSucceeded(v8::internal::Handle<v8::internal::WasmModuleObject>)",93957341730864,93957341730956],["v8::(anonymous namespace)::(anonymous namespace)::AsyncCompilationResolver::~AsyncCompilationResolver()",93957341731072,93957341731096],["v8::internal::Builtin_Impl_NumberPrototypeToFixed(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335932832,93957335933583],["v8::internal::Builtin_ObjectDefineProperty(int, unsigned long*, v8::internal::Isolate*)",93957335937584,93957335937742],["v8::internal::Builtin_Impl_Stats_ObjectDefineSetter(int, unsigned long*, v8::internal::Isolate*)",93957335939296,93957335939768],["v8::internal::Builtin_ObjectLookupSetter(int, unsigned long*, v8::internal::Isolate*)",93957335940944,93957335941103],["v8::internal::Builtin_Impl_Stats_ObjectFreeze(int, unsigned long*, v8::internal::Isolate*)",93957335941904,93957335942526],["v8::internal::Builtin_Impl_Stats_ObjectPrototypeGetProto(int, unsigned long*, v8::internal::Isolate*)",93957335942560,93957335943032],["v8::internal::Builtin_ObjectPrototypeSetProto(int, unsigned long*, v8::internal::Isolate*)",93957335943360,93957335943392],["v8::internal::Builtin_Impl_ObjectPrototypeSetProto(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335943872,93957335944258],["v8::internal::InstallFunc(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, char const*, void (*)(v8::FunctionCallbackInfo<v8::Value> const&), int, bool, v8::internal::PropertyAttributes, v8::SideEffectType)",93957341706832,93957341707068],["v8::(anonymous namespace)::WebAssemblyModule(v8::FunctionCallbackInfo<v8::Value> const&)",93957341718432,93957341718992],["v8::(anonymous namespace)::WebAssemblyTable(v8::FunctionCallbackInfo<v8::Value> const&)",93957341720960,93957341721720],["v8::(anonymous namespace)::WebAssemblyTableSet(v8::FunctionCallbackInfo<v8::Value> const&)",93957341722736,93957341723097],["v8::(anonymous namespace)::WebAssemblyMemoryGrow(v8::FunctionCallbackInfo<v8::Value> const&)",93957341724352,93957341724837],["v8::(anonymous namespace)::WebAssemblyMemoryType(v8::FunctionCallbackInfo<v8::Value> const&)",93957341725296,93957341725714],["v8::(anonymous namespace)::WebAssemblyGlobalValueOf(v8::FunctionCallbackInfo<v8::Value> const&)",93957341727152,93957341727169],["v8::(anonymous namespace)::WebAssemblyGlobalSetValue(v8::FunctionCallbackInfo<v8::Value> const&)",93957341727216,93957341728194],["v8::internal::Builtin_Impl_JsonParse(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335929696,93957335930145],["v8::internal::Builtin_NumberPrototypeToPrecision(int, unsigned long*, v8::internal::Isolate*)",93957335934672,93957335934704],["v8::internal::Builtin_ObjectDefineProperties(int, unsigned long*, v8::internal::Isolate*)",93957335936848,93957335937016],["v8::internal::Builtin_ObjectDefineGetter(int, unsigned long*, v8::internal::Isolate*)",93957335938304,93957335938336],["v8::internal::Builtin_ObjectDefineSetter(int, unsigned long*, v8::internal::Isolate*)",93957335939264,93957335939296],["v8::internal::Builtin_Impl_ObjectDefineSetter(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335939776,93957335940209],["v8::internal::Builtin_Impl_Stats_ObjectLookupGetter(int, unsigned long*, v8::internal::Isolate*)",93957335940384,93957335940929],["v8::internal::Builtin_Impl_Stats_ObjectLookupSetter(int, unsigned long*, v8::internal::Isolate*)",93957335941104,93957335941652],["v8::internal::wasm::WasmImportWrapperCache::~WasmImportWrapperCache()",93957341702880,93957341703386],["v8::internal::SetDummyInstanceTemplate(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSFunction>)",93957341707696,93957341707984],["v8::(anonymous namespace)::WebAssemblyCompileStreaming(v8::FunctionCallbackInfo<v8::Value> const&)",93957341716272,93957341717175],["v8::(anonymous namespace)::WebAssemblyModuleExports(v8::FunctionCallbackInfo<v8::Value> const&)",93957341719264,93957341719533],["v8::(anonymous namespace)::WebAssemblyInstanceGetExports(v8::FunctionCallbackInfo<v8::Value> const&)",93957341720688,93957341720954],["v8::(anonymous namespace)::WebAssemblyTableGetLength(v8::FunctionCallbackInfo<v8::Value> const&)",93957341721728,93957341721939],["v8::(anonymous namespace)::WebAssemblyTableGet(v8::FunctionCallbackInfo<v8::Value> const&)",93957341722416,93957341722731],["v8::(anonymous namespace)::WebAssemblyTableType(v8::FunctionCallbackInfo<v8::Value> const&)",93957341723104,93957341723530],["v8::internal::Builtin_Impl_V8BreakIteratorPrototypeBreakType(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335926896,93957335927393],["v8::internal::Builtin_Impl_Stats_NumberPrototypeToExponential(int, unsigned long*, v8::internal::Isolate*)",93957335931040,93957335931512],["v8::internal::Builtin_Impl_Stats_NumberPrototypeToLocaleString(int, unsigned long*, v8::internal::Isolate*)",93957335933616,93957335934088],["v8::internal::Builtin_Impl_NumberPrototypeToPrecision(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335935184,93957335935981],["v8::internal::Builtin_Impl_ObjectPrototypePropertyIsEnumerable(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335936496,93957335936843],["v8::internal::Builtin_Impl_Stats_ObjectDefineProperties(int, unsigned long*, v8::internal::Isolate*)",93957335937024,93957335937580],["v8::internal::Builtin_Impl_Stats_ObjectDefineProperty(int, unsigned long*, v8::internal::Isolate*)",93957335937744,93957335938292],["v8::internal::Builtin_Impl_Stats_ObjectDefineGetter(int, unsigned long*, v8::internal::Isolate*)",93957335938336,93957335938808],["v8::internal::wasm::memory_copy_wrapper(unsigned long)",93957341701840,93957341701905],["v8::WasmStreaming::OnBytesReceived(unsigned char const*, unsigned long)",93957341705248,93957341705605],["v8::internal::InstallGetter(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, char const*, void (*)(v8::FunctionCallbackInfo<v8::Value> const&))",93957341707168,93957341707367],["v8::(anonymous namespace)::WebAssemblyCompile(v8::FunctionCallbackInfo<v8::Value> const&)",93957341713936,93957341714538],["v8::(anonymous namespace)::WasmStreamingCallbackForTesting(v8::FunctionCallbackInfo<v8::Value> const&)",93957341716000,93957341716265],["v8::(anonymous namespace)::WebAssemblyInstantiateStreaming(v8::FunctionCallbackInfo<v8::Value> const&)",93957341717184,93957341718422],["v8::(anonymous namespace)::WebAssemblyModuleImports(v8::FunctionCallbackInfo<v8::Value> const&)",93957341718992,93957341719261],["v8::(anonymous namespace)::WebAssemblyModuleCustomSections(v8::FunctionCallbackInfo<v8::Value> const&)",93957341719536,93957341720036],["v8::internal::Builtin_V8BreakIteratorPrototypeCurrent(int, unsigned long*, v8::internal::Isolate*)",93957335924624,93957335924656],["v8::internal::Object v8::internal::DateTimeFormatRange<v8::internal::String>(v8::internal::BuiltinArguments, v8::internal::Isolate*, char const*, v8::internal::MaybeHandle<v8::internal::String> (*)(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSDateTimeFormat>, double, double))",93957335928144,93957335928698],["v8::internal::Builtin_Impl_Stats_JsonStringify(int, unsigned long*, v8::internal::Isolate*)",93957335930384,93957335930994],["v8::internal::Builtin_NumberPrototypeToFixed(int, unsigned long*, v8::internal::Isolate*)",93957335932320,93957335932352],["v8::internal::Builtin_NumberPrototypeToLocaleString(int, unsigned long*, v8::internal::Isolate*)",93957335933584,93957335933616],["v8::internal::Builtin_Impl_NumberPrototypeToLocaleString(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335934096,93957335934662],["v8::internal::Builtin_Impl_Stats_NumberPrototypeToPrecision(int, unsigned long*, v8::internal::Isolate*)",93957335934704,93957335935176],["v8::internal::Builtin_ObjectPrototypePropertyIsEnumerable(int, unsigned long*, v8::internal::Isolate*)",93957335935984,93957335936016],["v8::internal::wasm::f64x2_floor_wrapper(unsigned long)",93957341701168,93957341701222],["v8::internal::wasm::WasmFeatures::FromIsolate(v8::internal::Isolate*)",93957341702256,93957341702621],["std::__1::__hash_const_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::wasm::WasmImportWrapperCache::CacheKey, v8::internal::wasm::WasmCode*>, void*>*> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::wasm::WasmImportWrapperCache::CacheKey, v8::internal::wasm::WasmCode*>, std::__1::__unordered_map_hasher<v8::internal::wasm::WasmImportWrapperCache::CacheKey, std::__1::__hash_value_type<v8::internal::wasm::WasmImportWrapperCache::CacheKey, v8::internal::wasm::WasmCode*>, v8::internal::wasm::WasmImportWrapperCache::CacheKeyHash, std::__1::equal_to<v8::internal::wasm::WasmImportWrapperCache::CacheKey>, true>, std::__1::__unordered_map_equal<v8::internal::wasm::WasmImportWrapperCache::CacheKey, std::__1::__hash_value_type<v8::internal::wasm::WasmImportWrapperCache::CacheKey, v8::internal::wasm::WasmCode*>, std::__1::equal_to<v8::internal::wasm::WasmImportWrapperCache::CacheKey>, v8::internal::wasm::WasmImportWrapperCache::CacheKeyHash, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::wasm::WasmImportWrapperCache::CacheKey, v8::internal::wasm::WasmCode*> > >::find<v8::internal::wasm::WasmImportWrapperCache::CacheKey>(v8::internal::wasm::WasmImportWrapperCache::CacheKey const&) const",93957341704432,93957341704925],["v8::WasmStreaming::Abort(v8::MaybeLocal<v8::Value>)",93957341705952,93957341706377],["v8::(anonymous namespace)::v8_str(v8::internal::Isolate*, char const*)",93957341707072,93957341707154],["v8::internal::InstallGetterSetter(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, char const*, void (*)(v8::FunctionCallbackInfo<v8::Value> const&), void (*)(v8::FunctionCallbackInfo<v8::Value> const&))",93957341707376,93957341707693],["v8::internal::WasmJs::Install(v8::internal::Isolate*, bool)",93957341707984,93957341713925],["v8::(anonymous namespace)::WebAssemblyValidate(v8::FunctionCallbackInfo<v8::Value> const&)",93957341714544,93957341714903],["v8::internal::Builtin_Impl_Stats_V8BreakIteratorInternalFirst(int, unsigned long*, v8::internal::Isolate*)",93957335922160,93957335922594],["v8::internal::Builtin_Impl_Stats_V8BreakIteratorInternalCurrent(int, unsigned long*, v8::internal::Isolate*)",93957335925680,93957335926114],["v8::internal::Builtin_Impl_Stats_V8BreakIteratorInternalBreakType(int, unsigned long*, v8::internal::Isolate*)",93957335927440,93957335927874],["v8::internal::Builtin_JsonParse(int, unsigned long*, v8::internal::Isolate*)",93957335929184,93957335929216],["v8::internal::Builtin_JsonStringify(int, unsigned long*, v8::internal::Isolate*)",93957335930160,93957335930373],["v8::internal::Builtin_NumberPrototypeToExponential(int, unsigned long*, v8::internal::Isolate*)",93957335931008,93957335931040],["v8::internal::Builtin_Impl_NumberPrototypeToExponential(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335931520,93957335932308],["v8::internal::Builtin_Impl_Stats_NumberPrototypeToFixed(int, unsigned long*, v8::internal::Isolate*)",93957335932352,93957335932824],["v8::internal::wasm::word32_popcnt_wrapper(unsigned long)",93957341700816,93957341700876],["v8::internal::wasm::f32x4_floor_wrapper(unsigned long)",93957341701456,93957341701540],["v8::internal::wasm::call_trap_callback_for_testing()",93957341701984,93957341702005],["v8::internal::wasm::WasmImportWrapperCache::operator[](v8::internal::wasm::WasmImportWrapperCache::CacheKey const&)",93957341702688,93957341702734],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::wasm::WasmImportWrapperCache::CacheKey, v8::internal::wasm::WasmCode*>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::wasm::WasmImportWrapperCache::CacheKey, v8::internal::wasm::WasmCode*>, std::__1::__unordered_map_hasher<v8::internal::wasm::WasmImportWrapperCache::CacheKey, std::__1::__hash_value_type<v8::internal::wasm::WasmImportWrapperCache::CacheKey, v8::internal::wasm::WasmCode*>, v8::internal::wasm::WasmImportWrapperCache::CacheKeyHash, std::__1::equal_to<v8::internal::wasm::WasmImportWrapperCache::CacheKey>, true>, std::__1::__unordered_map_equal<v8::internal::wasm::WasmImportWrapperCache::CacheKey, std::__1::__hash_value_type<v8::internal::wasm::WasmImportWrapperCache::CacheKey, v8::internal::wasm::WasmCode*>, std::__1::equal_to<v8::internal::wasm::WasmImportWrapperCache::CacheKey>, v8::internal::wasm::WasmImportWrapperCache::CacheKeyHash, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::wasm::WasmImportWrapperCache::CacheKey, v8::internal::wasm::WasmCode*> > >::__emplace_unique_key_args<v8::internal::wasm::WasmImportWrapperCache::CacheKey, std::__1::piecewise_construct_t const&, std::__1::tuple<v8::internal::wasm::WasmImportWrapperCache::CacheKey const&>, std::__1::tuple<> >(v8::internal::wasm::WasmImportWrapperCache::CacheKey const&, std::__1::piecewise_construct_t const&, std::__1::tuple<v8::internal::wasm::WasmImportWrapperCache::CacheKey const&>&&, std::__1::tuple<>&&)",93957341703392,93957341704430],["v8::WasmStreaming::WasmStreaming(std::__1::unique_ptr<v8::WasmStreaming::WasmStreamingImpl, std::__1::default_delete<v8::WasmStreaming::WasmStreamingImpl> >)",93957341704928,93957341705237],["v8::WasmStreaming::Finish()",93957341705616,93957341705948],["v8::WasmStreaming::Unpack(v8::Isolate*, v8::Local<v8::Value>)",93957341706384,93957341706821],["v8::internal::Builtin_Impl_V8BreakIteratorPrototypeAdoptText(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335919680,93957335920180],["v8::internal::Builtin_Impl_V8BreakIteratorPrototypeNext(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335923376,93957335923873],["v8::internal::Builtin_Impl_V8BreakIteratorPrototypeCurrent(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335925136,93957335925633],["v8::internal::Builtin_V8BreakIteratorPrototypeBreakType(int, unsigned long*, v8::internal::Isolate*)",93957335926384,93957335926416],["v8::internal::Builtin_V8BreakIteratorInternalBreakType(int, unsigned long*, v8::internal::Isolate*)",93957335927408,93957335927440],["v8::internal::Builtin_Impl_V8BreakIteratorInternalBreakType(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335927888,93957335928137],["v8::internal::(anonymous namespace)::CreateBoundFunction(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Builtins::Name, int)",93957335928704,93957335929172],["v8::internal::Builtin_Impl_Stats_JsonParse(int, unsigned long*, v8::internal::Isolate*)",93957335929216,93957335929688],["v8::internal::wasm::float64_to_int64_sat_wrapper(unsigned long)",93957341700224,93957341700310],["v8::internal::wasm::word64_rol_wrapper(unsigned long)",93957341701024,93957341701036],["v8::internal::wasm::f64x2_nearest_int_wrapper(unsigned long)",93957341701296,93957341701350],["v8::internal::wasm::f32x4_nearest_int_wrapper(unsigned long)",93957341701648,93957341701732],["v8::internal::wasm::memory_fill_wrapper(unsigned long)",93957341701920,93957341701971],["v8::internal::wasm::WasmFeatures::FromFlags()",93957341702016,93957341702244],["v8::internal::wasm::WasmImportWrapperCache::ModificationScope::operator[](v8::internal::wasm::WasmImportWrapperCache::CacheKey const&)",93957341702624,93957341702673],["v8::internal::wasm::WasmImportWrapperCache::Get(v8::internal::compiler::WasmImportCallKind, v8::internal::Signature<v8::internal::wasm::ValueType> const*, int) const",93957341702736,93957341702866],["v8::internal::Builtin_Impl_SegmentsPrototypeIterator(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335917072,93957335917389],["v8::internal::Builtin_V8BreakIteratorPrototypeFirst(int, unsigned long*, v8::internal::Isolate*)",93957335921104,93957335921136],["v8::internal::Builtin_V8BreakIteratorPrototypeNext(int, unsigned long*, v8::internal::Isolate*)",93957335922864,93957335922896],["v8::internal::Builtin_Impl_Stats_V8BreakIteratorInternalNext(int, unsigned long*, v8::internal::Isolate*)",93957335923920,93957335924354],["v8::internal::Builtin_Impl_Stats_V8BreakIteratorPrototypeCurrent(int, unsigned long*, v8::internal::Isolate*)",93957335924656,93957335925128],["v8::internal::Builtin_V8BreakIteratorInternalCurrent(int, unsigned long*, v8::internal::Isolate*)",93957335925648,93957335925680],["v8::internal::Builtin_Impl_V8BreakIteratorInternalCurrent(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335926128,93957335926377],["v8::internal::Builtin_Impl_Stats_V8BreakIteratorPrototypeBreakType(int, unsigned long*, v8::internal::Isolate*)",93957335926416,93957335926888],["v8::internal::wasm::int64_to_float64_wrapper(unsigned long)",93957341699648,93957341699663],["v8::internal::wasm::uint64_div_wrapper(unsigned long)",93957341700624,93957341700685],["v8::internal::wasm::word32_rol_wrapper(unsigned long)",93957341700992,93957341701005],["v8::internal::wasm::float64_pow_wrapper(unsigned long)",93957341701056,93957341701090],["v8::internal::wasm::f64x2_trunc_wrapper(unsigned long)",93957341701232,93957341701286],["v8::internal::wasm::f32x4_ceil_wrapper(unsigned long)",93957341701360,93957341701444],["v8::internal::wasm::f32x4_trunc_wrapper(unsigned long)",93957341701552,93957341701636],["v8::internal::wasm::memory_init_wrapper(unsigned long)",93957341701744,93957341701831],["v8::internal::Builtin_SegmenterPrototypeSegment(int, unsigned long*, v8::internal::Isolate*)",93957335914784,93957335914816],["v8::internal::Builtin_Impl_Stats_V8BreakIteratorPrototypeResolvedOptions(int, unsigned long*, v8::internal::Isolate*)",93957335918416,93957335918888],["v8::internal::Builtin_Impl_Stats_V8BreakIteratorInternalAdoptText(int, unsigned long*, v8::internal::Isolate*)",93957335920224,93957335920696],["v8::internal::Builtin_Impl_V8BreakIteratorPrototypeFirst(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335921616,93957335922113],["v8::internal::Builtin_Impl_V8BreakIteratorInternalFirst(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335922608,93957335922857],["v8::internal::Builtin_Impl_Stats_V8BreakIteratorPrototypeNext(int, unsigned long*, v8::internal::Isolate*)",93957335922896,93957335923368],["v8::internal::Builtin_V8BreakIteratorInternalNext(int, unsigned long*, v8::internal::Isolate*)",93957335923888,93957335923920],["v8::internal::Builtin_Impl_V8BreakIteratorInternalNext(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335924368,93957335924617],["v8::internal::wasm::f32_ceil_wrapper(unsigned long)",93957341699376,93957341699405],["v8::internal::wasm::float64_to_int64_wrapper(unsigned long)",93957341699856,93957341699905],["v8::internal::wasm::int64_div_wrapper(unsigned long)",93957341700432,93957341700515],["v8::internal::wasm::word32_ctz_wrapper(unsigned long)",93957341700752,93957341700774],["v8::internal::wasm::word64_popcnt_wrapper(unsigned long)",93957341700880,93957341700978],["v8::internal::wasm::word32_ror_wrapper(unsigned long)",93957341701008,93957341701021],["v8::internal::wasm::word64_ror_wrapper(unsigned long)",93957341701040,93957341701052],["v8::internal::wasm::f64x2_ceil_wrapper(unsigned long)",93957341701104,93957341701158],["v8::internal::Builtin_SegmenterConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335912240,93957335912272],["v8::internal::Builtin_Impl_Stats_SegmentsPrototypeContaining(int, unsigned long*, v8::internal::Isolate*)",93957335915712,93957335916184],["v8::internal::Builtin_Impl_Stats_V8BreakIteratorConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335917680,93957335918371],["v8::internal::Builtin_V8BreakIteratorPrototypeAdoptText(int, unsigned long*, v8::internal::Isolate*)",93957335919168,93957335919200],["v8::internal::Builtin_V8BreakIteratorInternalAdoptText(int, unsigned long*, v8::internal::Isolate*)",93957335920192,93957335920224],["v8::internal::Builtin_Impl_V8BreakIteratorInternalAdoptText(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335920704,93957335921093],["v8::internal::Builtin_Impl_Stats_V8BreakIteratorPrototypeFirst(int, unsigned long*, v8::internal::Isolate*)",93957335921136,93957335921608],["v8::internal::Builtin_V8BreakIteratorInternalFirst(int, unsigned long*, v8::internal::Isolate*)",93957335922128,93957335922160],["non-virtual thunk to v8::internal::wasm::(anonymous namespace)::SampleTopTierCodeSizeTask::~SampleTopTierCodeSizeTask()",93957341699040,93957341699099],["v8::internal::wasm::f64_ceil_wrapper(unsigned long)",93957341699504,93957341699533],["v8::internal::wasm::float32_to_int64_wrapper(unsigned long)",93957341699712,93957341699759],["v8::internal::wasm::float32_to_int64_sat_wrapper(unsigned long)",93957341700016,93957341700097],["v8::internal::wasm::float64_to_uint64_sat_wrapper(unsigned long)",93957341700320,93957341700432],["v8::internal::wasm::int64_mod_wrapper(unsigned long)",93957341700528,93957341700622],["v8::internal::wasm::uint64_mod_wrapper(unsigned long)",93957341700688,93957341700749],["v8::internal::wasm::word64_ctz_wrapper(unsigned long)",93957341700784,93957341700809],["v8::internal::Builtin_Impl_Stats_CollatorPrototypeCompare(int, unsigned long*, v8::internal::Isolate*)",93957335909376,93957335909848],["v8::internal::Builtin_Impl_Stats_SegmenterSupportedLocalesOf(int, unsigned long*, v8::internal::Isolate*)",93957335913360,93957335913988],["v8::internal::Builtin_Impl_SegmenterPrototypeSegment(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335915296,93957335915672],["v8::internal::Builtin_SegmentsPrototypeIterator(int, unsigned long*, v8::internal::Isolate*)",93957335916560,93957335916592],["v8::internal::Builtin_V8BreakIteratorConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335917392,93957335917668],["v8::internal::Builtin_V8BreakIteratorPrototypeResolvedOptions(int, unsigned long*, v8::internal::Isolate*)",93957335918384,93957335918416],["v8::internal::Builtin_Impl_V8BreakIteratorPrototypeResolvedOptions(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335918896,93957335919166],["v8::internal::Builtin_Impl_Stats_V8BreakIteratorPrototypeAdoptText(int, unsigned long*, v8::internal::Isolate*)",93957335919200,93957335919672],["std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::wasm::NativeModule*, v8::internal::wasm::(anonymous namespace)::WeakScriptHandle>, void*>*> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::wasm::NativeModule*, v8::internal::wasm::(anonymous namespace)::WeakScriptHandle>, std::__1::__unordered_map_hasher<v8::internal::wasm::NativeModule*, std::__1::__hash_value_type<v8::internal::wasm::NativeModule*, v8::internal::wasm::(anonymous namespace)::WeakScriptHandle>, std::__1::hash<v8::internal::wasm::NativeModule*>, std::__1::equal_to<v8::internal::wasm::NativeModule*>, true>, std::__1::__unordered_map_equal<v8::internal::wasm::NativeModule*, std::__1::__hash_value_type<v8::internal::wasm::NativeModule*, v8::internal::wasm::(anonymous namespace)::WeakScriptHandle>, std::__1::equal_to<v8::internal::wasm::NativeModule*>, std::__1::hash<v8::internal::wasm::NativeModule*>, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::wasm::NativeModule*, v8::internal::wasm::(anonymous namespace)::WeakScriptHandle> > >::find<v8::internal::wasm::NativeModule*>(v8::internal::wasm::NativeModule* const&)",93957341695776,93957341696150],["std::__1::__shared_ptr_emplace<v8::internal::wasm::WasmEngine, std::__1::allocator<v8::internal::wasm::WasmEngine> >::~__shared_ptr_emplace()",93957341699248,93957341699286],["v8::internal::wasm::f64_trunc_wrapper(unsigned long)",93957341699440,93957341699469],["v8::internal::wasm::int64_to_float32_wrapper(unsigned long)",93957341699568,93957341699583],["v8::internal::wasm::uint64_to_float64_wrapper(unsigned long)",93957341699664,93957341699705],["v8::internal::wasm::float32_to_uint64_wrapper(unsigned long)",93957341699760,93957341699847],["v8::internal::wasm::float64_to_uint64_wrapper(unsigned long)",93957341699920,93957341700011],["v8::internal::wasm::float32_to_uint64_sat_wrapper(unsigned long)",93957341700112,93957341700219],["v8::internal::Builtin_Impl_Stats_CollatorConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335906880,93957335907352],["v8::internal::Builtin_Impl_CollatorInternalCompare(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335910880,93957335911415],["v8::internal::Builtin_Impl_SegmenterConstructor(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335912752,93957335913095],["v8::internal::Builtin_Impl_Stats_SegmenterPrototypeResolvedOptions(int, unsigned long*, v8::internal::Isolate*)",93957335914032,93957335914504],["v8::internal::Builtin_Impl_Stats_SegmenterPrototypeSegment(int, unsigned long*, v8::internal::Isolate*)",93957335914816,93957335915288],["v8::internal::Builtin_SegmentsPrototypeContaining(int, unsigned long*, v8::internal::Isolate*)",93957335915680,93957335915712],["v8::internal::Builtin_Impl_SegmentsPrototypeContaining(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335916192,93957335916554],["v8::internal::Builtin_Impl_Stats_SegmentsPrototypeIterator(int, unsigned long*, v8::internal::Isolate*)",93957335916592,93957335917064],["std::__1::pair<std::__1::__tree_iterator<std::__1::__value_type<v8::internal::wasm::NativeModuleCache::Key, v8::base::Optional<std::__1::weak_ptr<v8::internal::wasm::NativeModule> > >, std::__1::__tree_node<std::__1::__value_type<v8::internal::wasm::NativeModuleCache::Key, v8::base::Optional<std::__1::weak_ptr<v8::internal::wasm::NativeModule> > >, void*>*, long>, bool> std::__1::__tree<std::__1::__value_type<v8::internal::wasm::NativeModuleCache::Key, v8::base::Optional<std::__1::weak_ptr<v8::internal::wasm::NativeModule> > >, std::__1::__map_value_compare<v8::internal::wasm::NativeModuleCache::Key, std::__1::__value_type<v8::internal::wasm::NativeModuleCache::Key, v8::base::Optional<std::__1::weak_ptr<v8::internal::wasm::NativeModule> > >, std::__1::less<v8::internal::wasm::NativeModuleCache::Key>, true>, std::__1::allocator<std::__1::__value_type<v8::internal::wasm::NativeModuleCache::Key, v8::base::Optional<std::__1::weak_ptr<v8::internal::wasm::NativeModule> > > > >::__emplace_unique_key_args<v8::internal::wasm::NativeModuleCache::Key, v8::internal::wasm::NativeModuleCache::Key&, v8::base::nullopt_t const&>(v8::internal::wasm::NativeModuleCache::Key const&, v8::internal::wasm::NativeModuleCache::Key&, v8::base::nullopt_t const&)",93957341692976,93957341693340],["std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::wasm::NativeModule*, v8::internal::wasm::(anonymous namespace)::WeakScriptHandle>, std::__1::__unordered_map_hasher<v8::internal::wasm::NativeModule*, std::__1::__hash_value_type<v8::internal::wasm::NativeModule*, v8::internal::wasm::(anonymous namespace)::WeakScriptHandle>, std::__1::hash<v8::internal::wasm::NativeModule*>, std::__1::equal_to<v8::internal::wasm::NativeModule*>, true>, std::__1::__unordered_map_equal<v8::internal::wasm::NativeModule*, std::__1::__hash_value_type<v8::internal::wasm::NativeModule*, v8::internal::wasm::(anonymous namespace)::WeakScriptHandle>, std::__1::equal_to<v8::internal::wasm::NativeModule*>, std::__1::hash<v8::internal::wasm::NativeModule*>, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::wasm::NativeModule*, v8::internal::wasm::(anonymous namespace)::WeakScriptHandle> > >::erase(std::__1::__hash_const_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::wasm::NativeModule*, v8::internal::wasm::(anonymous namespace)::WeakScriptHandle>, void*>*>)",93957341698176,93957341698783],["v8::internal::wasm::(anonymous namespace)::WasmGCForegroundTask::RunInternal()",93957341699184,93957341699205],["v8::internal::wasm::f32_trunc_wrapper(unsigned long)",93957341699312,93957341699341],["v8::internal::wasm::f32_nearest_int_wrapper(unsigned long)",93957341699408,93957341699437],["v8::internal::wasm::f64_floor_wrapper(unsigned long)",93957341699472,93957341699501],["v8::internal::wasm::f64_nearest_int_wrapper(unsigned long)",93957341699536,93957341699565],["v8::internal::wasm::uint64_to_float32_wrapper(unsigned long)",93957341699584,93957341699634],["v8::internal::Builtin_Impl_Stats_PluralRulesPrototypeResolvedOptions(int, unsigned long*, v8::internal::Isolate*)",93957335904288,93957335904760],["v8::internal::Builtin_Impl_CollatorPrototypeResolvedOptions(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335908176,93957335908446],["v8::internal::Builtin_CollatorInternalCompare(int, unsigned long*, v8::internal::Isolate*)",93957335910368,93957335910400],["v8::internal::Builtin_Impl_Stats_SegmentIteratorPrototypeNext(int, unsigned long*, v8::internal::Isolate*)",93957335911456,93957335911928],["v8::internal::Builtin_Impl_Stats_SegmenterConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335912272,93957335912744],["v8::internal::Builtin_SegmenterSupportedLocalesOf(int, unsigned long*, v8::internal::Isolate*)",93957335913104,93957335913346],["v8::internal::Builtin_SegmenterPrototypeResolvedOptions(int, unsigned long*, v8::internal::Isolate*)",93957335914000,93957335914032],["v8::internal::Builtin_Impl_SegmenterPrototypeResolvedOptions(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335914512,93957335914782],["std::__1::__tree<std::__1::__value_type<v8::internal::wasm::NativeModuleCache::Key, v8::base::Optional<std::__1::weak_ptr<v8::internal::wasm::NativeModule> > >, std::__1::__map_value_compare<v8::internal::wasm::NativeModuleCache::Key, std::__1::__value_type<v8::internal::wasm::NativeModuleCache::Key, v8::base::Optional<std::__1::weak_ptr<v8::internal::wasm::NativeModule> > >, std::__1::less<v8::internal::wasm::NativeModuleCache::Key>, true>, std::__1::allocator<std::__1::__value_type<v8::internal::wasm::NativeModuleCache::Key, v8::base::Optional<std::__1::weak_ptr<v8::internal::wasm::NativeModule> > > > >::destroy(std::__1::__tree_node<std::__1::__value_type<v8::internal::wasm::NativeModuleCache::Key, v8::base::Optional<std::__1::weak_ptr<v8::internal::wasm::NativeModule> > >, void*>*)",93957341692304,93957341692375],["v8::internal::wasm::WasmEngine::IsolateInfo::~IsolateInfo()",93957341694992,93957341695485],["v8::internal::wasm::WasmEngine::NativeModuleInfo::~NativeModuleInfo()",93957341697088,93957341697277],["v8::internal::wasm::(anonymous namespace)::SampleTopTierCodeSizeTask::~SampleTopTierCodeSizeTask()",93957341698848,93957341698914],["non-virtual thunk to v8::internal::wasm::(anonymous namespace)::SampleTopTierCodeSizeTask::~SampleTopTierCodeSizeTask()",93957341699104,93957341699171],["std::__1::__shared_ptr_emplace<v8::internal::wasm::WasmEngine, std::__1::allocator<v8::internal::wasm::WasmEngine> >::~__shared_ptr_emplace()",93957341699216,93957341699236],["std::__1::__shared_ptr_emplace<v8::internal::wasm::WasmEngine, std::__1::allocator<v8::internal::wasm::WasmEngine> >::__on_zero_shared()",93957341699296,93957341699310],["v8::internal::wasm::f32_floor_wrapper(unsigned long)",93957341699344,93957341699373],["v8::internal::Builtin_Impl_StringPrototypeToLocaleLowerCase(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335902112,93957335902488],["v8::internal::Builtin_Impl_PluralRulesPrototypeSelect(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335905552,93957335905940],["v8::internal::Builtin_CollatorPrototypeResolvedOptions(int, unsigned long*, v8::internal::Isolate*)",93957335907664,93957335907696],["v8::internal::Builtin_Impl_Stats_CollatorSupportedLocalesOf(int, unsigned long*, v8::internal::Isolate*)",93957335908704,93957335909332],["v8::internal::Builtin_Impl_CollatorPrototypeCompare(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335909856,93957335910356],["v8::internal::Builtin_Impl_Stats_CollatorInternalCompare(int, unsigned long*, v8::internal::Isolate*)",93957335910400,93957335910872],["v8::internal::Builtin_SegmentIteratorPrototypeNext(int, unsigned long*, v8::internal::Isolate*)",93957335911424,93957335911456],["v8::internal::Builtin_Impl_SegmentIteratorPrototypeNext(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335911936,93957335912229],["v8::internal::wasm::WasmEngine::SampleCatchEvent(v8::internal::Isolate*)",93957341691104,93957341691328],["std::__1::__shared_ptr_emplace<v8::internal::OperationsBarrier, std::__1::allocator<v8::internal::OperationsBarrier> >::~__shared_ptr_emplace()",93957341692608,93957341692628],["void std::__1::vector<std::__1::pair<std::__1::shared_ptr<v8::internal::wasm::NativeModule>, bool>, std::__1::allocator<std::__1::pair<std::__1::shared_ptr<v8::internal::wasm::NativeModule>, bool> > >::__emplace_back_slow_path<std::__1::shared_ptr<v8::internal::wasm::NativeModule>, bool&>(std::__1::shared_ptr<v8::internal::wasm::NativeModule>&&, bool&)",93957341693760,93957341694196],["v8::internal::wasm::(anonymous namespace)::LogCodesTask::~LogCodesTask()",93957341695584,93957341695669],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<int, v8::internal::wasm::WasmEngine::IsolateInfo::CodeToLogPerScript>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<int, v8::internal::wasm::WasmEngine::IsolateInfo::CodeToLogPerScript>, std::__1::__unordered_map_hasher<int, std::__1::__hash_value_type<int, v8::internal::wasm::WasmEngine::IsolateInfo::CodeToLogPerScript>, std::__1::hash<int>, std::__1::equal_to<int>, true>, std::__1::__unordered_map_equal<int, std::__1::__hash_value_type<int, v8::internal::wasm::WasmEngine::IsolateInfo::CodeToLogPerScript>, std::__1::equal_to<int>, std::__1::hash<int>, true>, std::__1::allocator<std::__1::__hash_value_type<int, v8::internal::wasm::WasmEngine::IsolateInfo::CodeToLogPerScript> > >::__emplace_unique_key_args<int, std::__1::piecewise_construct_t const&, std::__1::tuple<int&&>, std::__1::tuple<> >(int const&, std::__1::piecewise_construct_t const&, std::__1::tuple<int&&>&&, std::__1::tuple<>&&)",93957341696160,93957341697088],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::wasm::NativeModule*, std::__1::unique_ptr<v8::internal::wasm::WasmEngine::NativeModuleInfo, std::__1::default_delete<v8::internal::wasm::WasmEngine::NativeModuleInfo> > >, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::wasm::NativeModule*, std::__1::unique_ptr<v8::internal::wasm::WasmEngine::NativeModuleInfo, std::__1::default_delete<v8::internal::wasm::WasmEngine::NativeModuleInfo> > >, std::__1::__unordered_map_hasher<v8::internal::wasm::NativeModule*, std::__1::__hash_value_type<v8::internal::wasm::NativeModule*, std::__1::unique_ptr<v8::internal::wasm::WasmEngine::NativeModuleInfo, std::__1::default_delete<v8::internal::wasm::WasmEngine::NativeModuleInfo> > >, std::__1::hash<v8::internal::wasm::NativeModule*>, std::__1::equal_to<v8::internal::wasm::NativeModule*>, true>, std::__1::__unordered_map_equal<v8::internal::wasm::NativeModule*, std::__1::__hash_value_type<v8::internal::wasm::NativeModule*, std::__1::unique_ptr<v8::internal::wasm::WasmEngine::NativeModuleInfo, std::__1::default_delete<v8::internal::wasm::WasmEngine::NativeModuleInfo> > >, std::__1::equal_to<v8::internal::wasm::NativeModule*>, std::__1::hash<v8::internal::wasm::NativeModule*>, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::wasm::NativeModule*, std::__1::unique_ptr<v8::internal::wasm::WasmEngine::NativeModuleInfo, std::__1::default_delete<v8::internal::wasm::WasmEngine::NativeModuleInfo> > > > >::__emplace_unique_key_args<v8::internal::wasm::NativeModule*, std::__1::pair<v8::internal::wasm::NativeModule*, std::__1::unique_ptr<v8::internal::wasm::WasmEngine::NativeModuleInfo, std::__1::default_delete<v8::internal::wasm::WasmEngine::NativeModuleInfo> > > >(v8::internal::wasm::NativeModule* const&, std::__1::pair<v8::internal::wasm::NativeModule*, std::__1::unique_ptr<v8::internal::wasm::WasmEngine::NativeModuleInfo, std::__1::default_delete<v8::internal::wasm::WasmEngine::NativeModuleInfo> > >&&)",93957341697280,93957341698164],["v8::internal::wasm::(anonymous namespace)::SampleTopTierCodeSizeTask::~SampleTopTierCodeSizeTask()",93957341698784,93957341698842],["v8::internal::wasm::(anonymous namespace)::SampleTopTierCodeSizeTask::RunInternal()",93957341698928,93957341699034],["v8::internal::Builtin_RelativeTimeFormatConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335899952,93957335899984],["v8::internal::Builtin_PluralRulesConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335903392,93957335903424],["v8::internal::Builtin_PluralRulesPrototypeSelect(int, unsigned long*, v8::internal::Isolate*)",93957335905040,93957335905072],["v8::internal::Builtin_Impl_Stats_PluralRulesSupportedLocalesOf(int, unsigned long*, v8::internal::Isolate*)",93957335906208,93957335906836],["v8::internal::Builtin_Impl_CollatorConstructor(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335907360,93957335907660],["v8::internal::Builtin_Impl_Stats_CollatorPrototypeResolvedOptions(int, unsigned long*, v8::internal::Isolate*)",93957335907696,93957335908168],["v8::internal::Builtin_CollatorSupportedLocalesOf(int, unsigned long*, v8::internal::Isolate*)",93957335908448,93957335908690],["v8::internal::Builtin_CollatorPrototypeCompare(int, unsigned long*, v8::internal::Isolate*)",93957335909344,93957335909376],["v8::internal::wasm::WasmEngine::ReportLiveCodeFromStackForGC(v8::internal::Isolate*)",93957341686576,93957341687032],["v8::internal::wasm::WasmEngine::GetWasmEngine()",93957341692112,93957341692193],["v8::internal::wasm::(anonymous namespace)::CheckNoArchivedThreads(v8::internal::Isolate*)::ArchivedThreadsVisitor::VisitThread(v8::internal::Isolate*, v8::internal::ThreadLocalTop*)",93957341692544,93957341692562],["std::__1::__shared_ptr_emplace<v8::internal::OperationsBarrier, std::__1::allocator<v8::internal::OperationsBarrier> >::__on_zero_shared()",93957341692688,93957341692721],["std::__1::pair<std::__1::__tree_iterator<std::__1::__value_type<v8::internal::wasm::NativeModuleCache::Key, v8::base::Optional<std::__1::weak_ptr<v8::internal::wasm::NativeModule> > >, std::__1::__tree_node<std::__1::__value_type<v8::internal::wasm::NativeModuleCache::Key, v8::base::Optional<std::__1::weak_ptr<v8::internal::wasm::NativeModule> > >, void*>*, long>, bool> std::__1::__tree<std::__1::__value_type<v8::internal::wasm::NativeModuleCache::Key, v8::base::Optional<std::__1::weak_ptr<v8::internal::wasm::NativeModule> > >, std::__1::__map_value_compare<v8::internal::wasm::NativeModuleCache::Key, std::__1::__value_type<v8::internal::wasm::NativeModuleCache::Key, v8::base::Optional<std::__1::weak_ptr<v8::internal::wasm::NativeModule> > >, std::__1::less<v8::internal::wasm::NativeModuleCache::Key>, true>, std::__1::allocator<std::__1::__value_type<v8::internal::wasm::NativeModuleCache::Key, v8::base::Optional<std::__1::weak_ptr<v8::internal::wasm::NativeModule> > > > >::__emplace_unique_key_args<v8::internal::wasm::NativeModuleCache::Key, v8::internal::wasm::NativeModuleCache::Key const&, v8::base::Optional<std::__1::weak_ptr<v8::internal::wasm::NativeModule> > >(v8::internal::wasm::NativeModuleCache::Key const&, v8::internal::wasm::NativeModuleCache::Key const&, v8::base::Optional<std::__1::weak_ptr<v8::internal::wasm::NativeModule> >&&)",93957341693344,93957341693759],["void std::__1::vector<std::__1::unique_ptr<v8::internal::wasm::AsyncCompileJob, std::__1::default_delete<v8::internal::wasm::AsyncCompileJob> >, std::__1::allocator<std::__1::unique_ptr<v8::internal::wasm::AsyncCompileJob, std::__1::default_delete<v8::internal::wasm::AsyncCompileJob> > > >::__push_back_slow_path<std::__1::unique_ptr<v8::internal::wasm::AsyncCompileJob, std::__1::default_delete<v8::internal::wasm::AsyncCompileJob> > >(std::__1::unique_ptr<v8::internal::wasm::AsyncCompileJob, std::__1::default_delete<v8::internal::wasm::AsyncCompileJob> >&&)",93957341694208,93957341694979],["v8::internal::wasm::(anonymous namespace)::LogCodesTask::~LogCodesTask()",93957341695488,93957341695570],["v8::internal::wasm::(anonymous namespace)::LogCodesTask::Run()",93957341695680,93957341695767],["v8::internal::Builtin_Impl_Stats_LocalePrototypeNumeric(int, unsigned long*, v8::internal::Isolate*)",93957335897632,93957335898104],["v8::internal::Builtin_Impl_Stats_RelativeTimeFormatPrototypeResolvedOptions(int, unsigned long*, v8::internal::Isolate*)",93957335900848,93957335901320],["v8::internal::Builtin_Impl_Stats_StringPrototypeToLocaleUpperCase(int, unsigned long*, v8::internal::Isolate*)",93957335902528,93957335903000],["v8::internal::Builtin_Impl_PluralRulesConstructor(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335903904,93957335904247],["v8::internal::Builtin_Impl_PluralRulesPrototypeResolvedOptions(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335904768,93957335905038],["v8::internal::Builtin_Impl_Stats_PluralRulesPrototypeSelect(int, unsigned long*, v8::internal::Isolate*)",93957335905072,93957335905544],["v8::internal::Builtin_PluralRulesSupportedLocalesOf(int, unsigned long*, v8::internal::Isolate*)",93957335905952,93957335906194],["v8::internal::Builtin_CollatorConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335906848,93957335906880],["v8::internal::wasm::WasmEngine::NewNativeModule(v8::internal::Isolate*, v8::internal::wasm::WasmFeatures const&, std::__1::shared_ptr<v8::internal::wasm::WasmModule const>, unsigned long)",93957341682640,93957341683099],["v8::internal::wasm::WasmEngine::FreeDeadCodeLocked(std::__1::unordered_map<v8::internal::wasm::NativeModule*, std::__1::vector<v8::internal::wasm::WasmCode*, std::__1::allocator<v8::internal::wasm::WasmCode*> >, std::__1::hash<v8::internal::wasm::NativeModule*>, std::__1::equal_to<v8::internal::wasm::NativeModule*>, std::__1::allocator<std::__1::pair<v8::internal::wasm::NativeModule* const, std::__1::vector<v8::internal::wasm::WasmCode*, std::__1::allocator<v8::internal::wasm::WasmCode*> > > > > const&)",93957341689296,93957341690615],["v8::internal::wasm::WasmEngine::InitializeOncePerProcess()",93957341691472,93957341691955],["v8::internal::wasm::max_table_init_entries()",93957341692240,93957341692269],["v8::internal::wasm::WasmEngine::AddIsolate(v8::internal::Isolate*)::$_1::__invoke(v8::Isolate*, v8::GCType, v8::GCCallbackFlags, void*)",93957341692384,93957341692542],["std::__1::__shared_ptr_pointer<char*, std::__1::default_delete<char []>, std::__1::allocator<char> >::__on_zero_shared()",93957341692576,93957341692597],["std::__1::__shared_ptr_emplace<v8::internal::OperationsBarrier, std::__1::allocator<v8::internal::OperationsBarrier> >::~__shared_ptr_emplace()",93957341692640,93957341692678],["std::__1::__tree_iterator<std::__1::__value_type<v8::internal::wasm::NativeModuleCache::Key, v8::base::Optional<std::__1::weak_ptr<v8::internal::wasm::NativeModule> > >, std::__1::__tree_node<std::__1::__value_type<v8::internal::wasm::NativeModuleCache::Key, v8::base::Optional<std::__1::weak_ptr<v8::internal::wasm::NativeModule> > >, void*>*, long> std::__1::__tree<std::__1::__value_type<v8::internal::wasm::NativeModuleCache::Key, v8::base::Optional<std::__1::weak_ptr<v8::internal::wasm::NativeModule> > >, std::__1::__map_value_compare<v8::internal::wasm::NativeModuleCache::Key, std::__1::__value_type<v8::internal::wasm::NativeModuleCache::Key, v8::base::Optional<std::__1::weak_ptr<v8::internal::wasm::NativeModule> > >, std::__1::less<v8::internal::wasm::NativeModuleCache::Key>, true>, std::__1::allocator<std::__1::__value_type<v8::internal::wasm::NativeModuleCache::Key, v8::base::Optional<std::__1::weak_ptr<v8::internal::wasm::NativeModule> > > > >::find<v8::internal::wasm::NativeModuleCache::Key>(v8::internal::wasm::NativeModuleCache::Key const&)",93957341692736,93957341692967],["v8::internal::Builtin_Impl_LocalePrototypeCaseFirst(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335895760,93957335896030],["v8::internal::Builtin_Impl_LocalePrototypeNumberingSystem(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335898896,93957335899166],["v8::internal::Builtin_Impl_RelativeTimeFormatConstructor(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335900464,93957335900807],["v8::internal::Builtin_StringPrototypeToLocaleLowerCase(int, unsigned long*, v8::internal::Isolate*)",93957335901600,93957335901632],["v8::internal::Builtin_StringPrototypeToLocaleUpperCase(int, unsigned long*, v8::internal::Isolate*)",93957335902496,93957335902528],["v8::internal::Builtin_Impl_StringPrototypeToLocaleUpperCase(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335903008,93957335903387],["v8::internal::Builtin_Impl_Stats_PluralRulesConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335903424,93957335903896],["v8::internal::Builtin_PluralRulesPrototypeResolvedOptions(int, unsigned long*, v8::internal::Isolate*)",93957335904256,93957335904288],["v8::internal::wasm::WasmEngine::AddIsolate(v8::internal::Isolate*)",93957341674816,93957341675156],["v8::internal::wasm::WasmEngine::StreamingCompilationFailed(unsigned long)",93957341684128,93957341684230],["v8::internal::wasm::WasmEngine::TriggerGC(signed char)",93957341687472,93957341689220],["v8::internal::wasm::WasmEngine::SampleThrowEvent(v8::internal::Isolate*)",93957341690656,93957341690880],["std::__1::unique_ptr<v8::internal::wasm::WasmEngine::CurrentGCInfo, std::__1::default_delete<v8::internal::wasm::WasmEngine::CurrentGCInfo> >::reset(v8::internal::wasm::WasmEngine::CurrentGCInfo*)",93957341691328,93957341691461],["v8::internal::wasm::WasmEngine::GlobalTearDown()",93957341691968,93957341692106],["v8::internal::wasm::max_mem_pages()",93957341692208,93957341692237],["v8::internal::wasm::max_module_size()",93957341692272,93957341692302],["v8::internal::Builtin_LocalePrototypeBaseName(int, unsigned long*, v8::internal::Isolate*)",93957335893680,93957335893712],["v8::internal::Builtin_LocalePrototypeHourCycle(int, unsigned long*, v8::internal::Isolate*)",93957335896816,93957335896848],["v8::internal::Builtin_LocalePrototypeNumberingSystem(int, unsigned long*, v8::internal::Isolate*)",93957335898384,93957335898416],["v8::internal::Builtin_Impl_Stats_LocalePrototypeToString(int, unsigned long*, v8::internal::Isolate*)",93957335899200,93957335899672],["v8::internal::Builtin_Impl_Stats_RelativeTimeFormatConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335899984,93957335900456],["v8::internal::Builtin_RelativeTimeFormatPrototypeResolvedOptions(int, unsigned long*, v8::internal::Isolate*)",93957335900816,93957335900848],["v8::internal::Builtin_Impl_RelativeTimeFormatPrototypeResolvedOptions(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335901328,93957335901598],["v8::internal::Builtin_Impl_Stats_StringPrototypeToLocaleLowerCase(int, unsigned long*, v8::internal::Isolate*)",93957335901632,93957335902104],["v8::internal::wasm::WasmEngine::ImportNativeModule(v8::internal::Isolate*, std::__1::shared_ptr<v8::internal::wasm::NativeModule>, v8::internal::Vector<char const>)",93957341672064,93957341672467],["v8::internal::wasm::WasmEngine::LogCode(v8::internal::Vector<v8::internal::wasm::WasmCode*>)",93957341678384,93957341679137],["v8::internal::wasm::WasmEngine::UpdateNativeModuleCache(bool, std::__1::shared_ptr<v8::internal::wasm::NativeModule>*, v8::internal::Isolate*)",93957341683536,93957341683936],["v8::internal::wasm::WasmEngine::SampleTopTierCodeSizeInAllIsolates(std::__1::shared_ptr<v8::internal::wasm::NativeModule> const&)",93957341685632,93957341685968],["v8::internal::wasm::WasmEngine::AddPotentiallyDeadCode(v8::internal::wasm::WasmCode*)",93957341687040,93957341687465],["v8::internal::wasm::WasmEngine::FreeDeadCode(std::__1::unordered_map<v8::internal::wasm::NativeModule*, std::__1::vector<v8::internal::wasm::WasmCode*, std::__1::allocator<v8::internal::wasm::WasmCode*> >, std::__1::hash<v8::internal::wasm::NativeModule*>, std::__1::equal_to<v8::internal::wasm::NativeModule*>, std::__1::allocator<std::__1::pair<v8::internal::wasm::NativeModule* const, std::__1::vector<v8::internal::wasm::WasmCode*, std::__1::allocator<v8::internal::wasm::WasmCode*> > > > > const&)",93957341689232,93957341689292],["v8::internal::wasm::WasmEngine::GetBarrierForBackgroundCompile()",93957341690624,93957341690655],["v8::internal::wasm::WasmEngine::SampleRethrowEvent(v8::internal::Isolate*)",93957341690880,93957341691104],["v8::internal::Builtin_Impl_Stats_LocalePrototypeLanguage(int, unsigned long*, v8::internal::Isolate*)",93957335891360,93957335891832],["v8::internal::Builtin_Impl_Stats_LocalePrototypeCalendar(int, unsigned long*, v8::internal::Isolate*)",93957335894496,93957335894968],["v8::internal::Builtin_Impl_Stats_LocalePrototypeCollation(int, unsigned long*, v8::internal::Isolate*)",93957335896064,93957335896536],["v8::internal::Builtin_Impl_LocalePrototypeHourCycle(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335897328,93957335897598],["v8::internal::Builtin_Impl_LocalePrototypeNumeric(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335898112,93957335898382],["v8::internal::Builtin_Impl_Stats_LocalePrototypeNumberingSystem(int, unsigned long*, v8::internal::Isolate*)",93957335898416,93957335898888],["v8::internal::Builtin_LocalePrototypeToString(int, unsigned long*, v8::internal::Isolate*)",93957335899168,93957335899200],["v8::internal::Builtin_Impl_LocalePrototypeToString(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335899680,93957335899950],["v8::internal::wasm::WasmEngine::SyncInstantiate(v8::internal::Isolate*, v8::internal::wasm::ErrorThrower*, v8::internal::Handle<v8::internal::WasmModuleObject>, v8::internal::MaybeHandle<v8::internal::JSReceiver>, v8::internal::MaybeHandle<v8::internal::JSArrayBuffer>)",93957341667264,93957341667655],["v8::internal::wasm::WasmEngine::RemoveCompileJob(v8::internal::wasm::AsyncCompileJob*)",93957341673552,93957341673756],["v8::internal::wasm::WasmEngine::RemoveIsolateFromCurrentGC(v8::internal::Isolate*)",93957341676832,93957341677495],["v8::internal::wasm::WasmEngine::EnableCodeLogging(v8::internal::Isolate*)",93957341681792,93957341681869],["v8::internal::wasm::WasmEngine::MaybeGetNativeModule(v8::internal::wasm::ModuleOrigin, v8::internal::Vector<unsigned char const>, v8::internal::Isolate*)",93957341683104,93957341683524],["v8::internal::wasm::WasmEngine::GetStreamingCompilationOwnership(unsigned long)",93957341683936,93957341684115],["v8::internal::wasm::WasmEngine::FreeNativeModule(v8::internal::wasm::NativeModule*)",93957341684240,93957341685631],["v8::internal::wasm::WasmEngine::ReportLiveCodeForGC(v8::internal::Isolate*, v8::internal::Vector<v8::internal::wasm::WasmCode*>)",93957341685968,93957341686576],["v8::internal::Builtin_Impl_Stats_RelativeTimeFormatSupportedLocalesOf(int, unsigned long*, v8::internal::Isolate*)",93957335888928,93957335889556],["v8::internal::Builtin_Impl_LocalePrototypeScript(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335892624,93957335892894],["v8::internal::Builtin_Impl_LocalePrototypeBaseName(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335894192,93957335894462],["v8::internal::Builtin_LocalePrototypeCaseFirst(int, unsigned long*, v8::internal::Isolate*)",93957335895248,93957335895280],["v8::internal::Builtin_LocalePrototypeCollation(int, unsigned long*, v8::internal::Isolate*)",93957335896032,93957335896064],["v8::internal::Builtin_Impl_LocalePrototypeCollation(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335896544,93957335896814],["v8::internal::Builtin_Impl_Stats_LocalePrototypeHourCycle(int, unsigned long*, v8::internal::Isolate*)",93957335896848,93957335897320],["v8::internal::Builtin_LocalePrototypeNumeric(int, unsigned long*, v8::internal::Isolate*)",93957335897600,93957335897632],["v8::internal::wasm::NativeModuleCache::WireBytesHash(v8::internal::Vector<unsigned char const>)",93957341660048,93957341660063],["v8::internal::wasm::WasmEngine::CreateAsyncCompileJob(v8::internal::Isolate*, v8::internal::wasm::WasmFeatures const&, std::__1::unique_ptr<unsigned char [], std::__1::default_delete<unsigned char []> >, unsigned long, v8::internal::Handle<v8::internal::Context>, char const*, std::__1::shared_ptr<v8::internal::wasm::CompilationResultResolver>, int)",93957341670240,93957341670536],["v8::internal::wasm::WasmEngine::DumpAndResetTurboStatistics()",93957341672736,93957341673262],["v8::internal::wasm::WasmEngine::DeleteCompileJobsOnContext(v8::internal::Handle<v8::internal::Context>)",93957341673856,93957341674428],["v8::internal::wasm::WasmEngine::RemoveIsolate(v8::internal::Isolate*)",93957341675168,93957341676817],["v8::internal::wasm::WasmEngine::PotentiallyFinishCurrentGC()",93957341677504,93957341678377],["_ZNSt3__16vectorIPN2v88internal4wasm8WasmCodeENS_9allocatorIS5_EEE6insertIPS5_EENS_9enable_ifIXaasr27__is_cpp17_forward_iteratorIT_EE5valuesr16is_constructibleIS5_NS_15iterator_traitsISC_E9referenceEEE5valueENS_11__wrap_iterISA_EEE4typeENSG_IPKS5_EESC_SC_",93957341679152,93957341681782],["v8::internal::wasm::WasmEngine::LogOutstandingCodesForIsolate(v8::internal::Isolate*)",93957341681872,93957341682636],["v8::internal::Builtin_Impl_LocaleConstructor(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335886416,93957335887029],["v8::internal::Builtin_RelativeTimeFormatPrototypeFormatToParts(int, unsigned long*, v8::internal::Isolate*)",93957335890448,93957335890480],["v8::internal::Builtin_LocalePrototypeScript(int, unsigned long*, v8::internal::Isolate*)",93957335892112,93957335892144],["v8::internal::Builtin_Impl_Stats_LocalePrototypeRegion(int, unsigned long*, v8::internal::Isolate*)",93957335892928,93957335893400],["v8::internal::Builtin_Impl_Stats_LocalePrototypeBaseName(int, unsigned long*, v8::internal::Isolate*)",93957335893712,93957335894184],["v8::internal::Builtin_LocalePrototypeCalendar(int, unsigned long*, v8::internal::Isolate*)",93957335894464,93957335894496],["v8::internal::Builtin_Impl_LocalePrototypeCalendar(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335894976,93957335895246],["v8::internal::Builtin_Impl_Stats_LocalePrototypeCaseFirst(int, unsigned long*, v8::internal::Isolate*)",93957335895280,93957335895752],["std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::Isolate*, v8::internal::wasm::DebugInfoImpl::PerIsolateDebugData>, std::__1::__unordered_map_hasher<v8::internal::Isolate*, std::__1::__hash_value_type<v8::internal::Isolate*, v8::internal::wasm::DebugInfoImpl::PerIsolateDebugData>, std::__1::hash<v8::internal::Isolate*>, std::__1::equal_to<v8::internal::Isolate*>, true>, std::__1::__unordered_map_equal<v8::internal::Isolate*, std::__1::__hash_value_type<v8::internal::Isolate*, v8::internal::wasm::DebugInfoImpl::PerIsolateDebugData>, std::__1::equal_to<v8::internal::Isolate*>, std::__1::hash<v8::internal::Isolate*>, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::Isolate*, v8::internal::wasm::DebugInfoImpl::PerIsolateDebugData> > >::~__hash_table()",93957341656624,93957341656802],["std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::operator<< <char, std::__1::char_traits<char>, std::__1::allocator<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)",93957341662512,93957341662537],["v8::internal::wasm::WasmEngine::AsyncCompile(v8::internal::Isolate*, v8::internal::wasm::WasmFeatures const&, std::__1::shared_ptr<v8::internal::wasm::CompilationResultResolver>, v8::internal::wasm::ModuleWireBytes const&, bool, char const*)",93957341668400,93957341669620],["v8::internal::wasm::WasmEngine::TierDownAllModulesPerIsolate(v8::internal::Isolate*)",93957341670608,93957341671219],["v8::internal::wasm::WasmEngine::GetOrCreateTurboStatistics()",93957341672480,93957341672727],["v8::internal::wasm::WasmEngine::GetCodeTracer()",93957341673264,93957341673542],["v8::internal::wasm::WasmEngine::HasRunningCompileJob(v8::internal::Isolate*)",93957341673760,93957341673853],["v8::internal::wasm::WasmEngine::DeleteCompileJobsOnIsolate(v8::internal::Isolate*)",93957341674432,93957341674812],["v8::internal::Builtin_Impl_ListFormatConstructor(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335883872,93957335884215],["v8::internal::Builtin_LocalePrototypeMinimize(int, unsigned long*, v8::internal::Isolate*)",93957335887856,93957335887888],["v8::internal::Builtin_Impl_Stats_RelativeTimeFormatPrototypeFormat(int, unsigned long*, v8::internal::Isolate*)",93957335889600,93957335890072],["v8::internal::Builtin_Impl_RelativeTimeFormatPrototypeFormatToParts(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335890960,93957335891314],["v8::internal::Builtin_Impl_LocalePrototypeLanguage(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335891840,93957335892110],["v8::internal::Builtin_Impl_Stats_LocalePrototypeScript(int, unsigned long*, v8::internal::Isolate*)",93957335892144,93957335892616],["v8::internal::Builtin_LocalePrototypeRegion(int, unsigned long*, v8::internal::Isolate*)",93957335892896,93957335892928],["v8::internal::Builtin_Impl_LocalePrototypeRegion(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335893408,93957335893678],["std::__1::vector<v8::internal::wasm::DebugInfoImpl::CachedDebuggingCode, std::__1::allocator<v8::internal::wasm::DebugInfoImpl::CachedDebuggingCode> >::insert(std::__1::__wrap_iter<v8::internal::wasm::DebugInfoImpl::CachedDebuggingCode const*>, v8::internal::wasm::DebugInfoImpl::CachedDebuggingCode&&)",93957341652944,93957341653857],["v8::internal::wasm::NativeModuleCache::PrefixHash(v8::internal::Vector<unsigned char const>)",93957341657856,93957341658490],["v8::internal::wasm::WasmEngine::SyncValidate(v8::internal::Isolate*, v8::internal::wasm::WasmFeatures const&, v8::internal::wasm::ModuleWireBytes const&)",93957341660704,93957341661399],["v8::internal::wasm::WasmEngine::SyncCompile(v8::internal::Isolate*, v8::internal::wasm::WasmFeatures const&, v8::internal::wasm::ErrorThrower*, v8::internal::wasm::ModuleWireBytes const&)",93957341662736,93957341663825],["v8::internal::wasm::WasmEngine::AsyncInstantiate(v8::internal::Isolate*, std::__1::unique_ptr<v8::internal::wasm::InstantiationResultResolver, std::__1::default_delete<v8::internal::wasm::InstantiationResultResolver> >, v8::internal::Handle<v8::internal::WasmModuleObject>, v8::internal::MaybeHandle<v8::internal::JSReceiver>)",93957341667664,93957341668395],["v8::internal::wasm::WasmEngine::StartStreamingCompilation(v8::internal::Isolate*, v8::internal::wasm::WasmFeatures const&, v8::internal::Handle<v8::internal::Context>, char const*, std::__1::shared_ptr<v8::internal::wasm::CompilationResultResolver>)",93957341669632,93957341670226],["v8::internal::wasm::WasmEngine::CompileFunction(v8::internal::Isolate*, v8::internal::wasm::NativeModule*, unsigned int, v8::internal::wasm::ExecutionTier)",93957341670544,93957341670603],["v8::internal::wasm::WasmEngine::TierUpAllModulesPerIsolate(v8::internal::Isolate*)",93957341671232,93957341672051],["v8::internal::Builtin_Impl_DateTimeFormatPrototypeFormat(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335881200,93957335881754],["v8::internal::Builtin_ListFormatSupportedLocalesOf(int, unsigned long*, v8::internal::Isolate*)",93957335885008,93957335885250],["v8::internal::Builtin_Impl_Stats_LocalePrototypeMaximize(int, unsigned long*, v8::internal::Isolate*)",93957335887072,93957335887544],["v8::internal::Builtin_Impl_LocalePrototypeMinimize(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335888368,93957335888661],["v8::internal::Builtin_RelativeTimeFormatPrototypeFormat(int, unsigned long*, v8::internal::Isolate*)",93957335889568,93957335889600],["v8::internal::Builtin_Impl_RelativeTimeFormatPrototypeFormat(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335890080,93957335890434],["v8::internal::Builtin_Impl_Stats_RelativeTimeFormatPrototypeFormatToParts(int, unsigned long*, v8::internal::Isolate*)",93957335890480,93957335890952],["v8::internal::Builtin_LocalePrototypeLanguage(int, unsigned long*, v8::internal::Isolate*)",93957335891328,93957335891360],["v8::internal::wasm::DebugInfoImpl::FindAllBreakpoints(int)",93957341645984,93957341647128],["v8::internal::wasm::DebugInfoImpl::IsAtReturn(v8::internal::WasmFrame*)",93957341655408,93957341655665],["void std::__1::vector<v8::debug::BreakLocation, std::__1::allocator<v8::debug::BreakLocation> >::__emplace_back_slow_path<int, unsigned int&, v8::debug::BreakLocationType>(int&&, unsigned int&, v8::debug::BreakLocationType&&)",93957341657040,93957341657345],["v8::internal::wasm::NativeModuleCache::Update(std::__1::shared_ptr<v8::internal::wasm::NativeModule>, bool)",93957341658672,93957341659579],["v8::internal::wasm::WasmEngine::~WasmEngine()",93957341660064,93957341660698],["v8::internal::wasm::WasmEngine::SyncCompileTranslatedAsmJs(v8::internal::Isolate*, v8::internal::wasm::ErrorThrower*, v8::internal::wasm::ModuleWireBytes const&, v8::internal::Vector<unsigned char const>, v8::internal::Handle<v8::internal::HeapNumber>, v8::internal::LanguageMode)",93957341661408,93957341662509],["v8::internal::wasm::WasmEngine::FinalizeTranslatedAsmJs(v8::internal::Isolate*, v8::internal::Handle<v8::internal::AsmWasmData>, v8::internal::Handle<v8::internal::Script>)",93957341662544,93957341662726],["v8::internal::wasm::WasmEngine::GetOrCreateScript(v8::internal::Isolate*, std::__1::shared_ptr<v8::internal::wasm::NativeModule> const&, v8::internal::Vector<char const>)",93957341663840,93957341667253],["v8::internal::Builtin_NumberFormatInternalFormatNumber(int, unsigned long*, v8::internal::Isolate*)",93957335878416,93957335878448],["v8::internal::Builtin_IntlGetCanonicalLocales(int, unsigned long*, v8::internal::Isolate*)",93957335882592,93957335882771],["v8::internal::Builtin_Impl_Stats_ListFormatPrototypeResolvedOptions(int, unsigned long*, v8::internal::Isolate*)",93957335884256,93957335884728],["v8::internal::Builtin_LocaleConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335885904,93957335885936],["v8::internal::Builtin_LocalePrototypeMaximize(int, unsigned long*, v8::internal::Isolate*)",93957335887040,93957335887072],["v8::internal::Builtin_Impl_LocalePrototypeMaximize(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335887552,93957335887845],["v8::internal::Builtin_Impl_Stats_LocalePrototypeMinimize(int, unsigned long*, v8::internal::Isolate*)",93957335887888,93957335888360],["v8::internal::Builtin_RelativeTimeFormatSupportedLocalesOf(int, unsigned long*, v8::internal::Isolate*)",93957335888672,93957335888914],["v8::internal::WasmScript::ClearBreakPointById(v8::internal::Handle<v8::internal::Script>, int)",93957341641568,93957341641965],["v8::internal::wasm::DebugInfoImpl::UpdateReturnAddresses(v8::internal::Isolate*, v8::internal::wasm::WasmCode*, v8::internal::StackFrameId)",93957341650448,93957341650785],["std::__1::__split_buffer<v8::internal::wasm::DebugInfoImpl::CachedDebuggingCode, std::__1::allocator<v8::internal::wasm::DebugInfoImpl::CachedDebuggingCode>&>::push_back(v8::internal::wasm::DebugInfoImpl::CachedDebuggingCode&&)",93957341654176,93957341654902],["std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::Isolate*, v8::internal::wasm::DebugInfoImpl::PerIsolateDebugData>, std::__1::__unordered_map_hasher<v8::internal::Isolate*, std::__1::__hash_value_type<v8::internal::Isolate*, v8::internal::wasm::DebugInfoImpl::PerIsolateDebugData>, std::__1::hash<v8::internal::Isolate*>, std::__1::equal_to<v8::internal::Isolate*>, true>, std::__1::__unordered_map_equal<v8::internal::Isolate*, std::__1::__hash_value_type<v8::internal::Isolate*, v8::internal::wasm::DebugInfoImpl::PerIsolateDebugData>, std::__1::equal_to<v8::internal::Isolate*>, std::__1::hash<v8::internal::Isolate*>, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::Isolate*, v8::internal::wasm::DebugInfoImpl::PerIsolateDebugData> > >::erase(std::__1::__hash_const_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::Isolate*, v8::internal::wasm::DebugInfoImpl::PerIsolateDebugData>, void*>*>)",93957341655920,93957341656108],["std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::wasm::WasmCode const*, std::__1::unique_ptr<v8::internal::wasm::DebugSideTable, std::__1::default_delete<v8::internal::wasm::DebugSideTable> > >, std::__1::__unordered_map_hasher<v8::internal::wasm::WasmCode const*, std::__1::__hash_value_type<v8::internal::wasm::WasmCode const*, std::__1::unique_ptr<v8::internal::wasm::DebugSideTable, std::__1::default_delete<v8::internal::wasm::DebugSideTable> > >, std::__1::hash<v8::internal::wasm::WasmCode const*>, std::__1::equal_to<v8::internal::wasm::WasmCode const*>, true>, std::__1::__unordered_map_equal<v8::internal::wasm::WasmCode const*, std::__1::__hash_value_type<v8::internal::wasm::WasmCode const*, std::__1::unique_ptr<v8::internal::wasm::DebugSideTable, std::__1::default_delete<v8::internal::wasm::DebugSideTable> > >, std::__1::equal_to<v8::internal::wasm::WasmCode const*>, std::__1::hash<v8::internal::wasm::WasmCode const*>, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::wasm::WasmCode const*, std::__1::unique_ptr<v8::internal::wasm::DebugSideTable, std::__1::default_delete<v8::internal::wasm::DebugSideTable> > > > >::~__hash_table()",93957341656816,93957341657035],["v8::internal::wasm::NativeModuleCache::MaybeGetNativeModule(v8::internal::wasm::ModuleOrigin, v8::internal::Vector<unsigned char const>)",93957341657360,93957341657845],["std::__1::map<v8::internal::wasm::NativeModuleCache::Key, v8::base::Optional<std::__1::weak_ptr<v8::internal::wasm::NativeModule> >, std::__1::less<v8::internal::wasm::NativeModuleCache::Key>, std::__1::allocator<std::__1::pair<v8::internal::wasm::NativeModuleCache::Key const, v8::base::Optional<std::__1::weak_ptr<v8::internal::wasm::NativeModule> > > > >::erase(v8::internal::wasm::NativeModuleCache::Key const&)",93957341658496,93957341658671],["v8::internal::wasm::NativeModuleCache::Erase(v8::internal::wasm::NativeModule*)",93957341659584,93957341660038],["v8::internal::Builtin_Impl_Stats_NumberFormatConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335875264,93957335875736],["v8::internal::Builtin_Impl_Stats_DateTimeFormatConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335879424,93957335879896],["v8::internal::Builtin_Impl_Stats_DateTimeFormatInternalFormat(int, unsigned long*, v8::internal::Isolate*)",93957335881792,93957335882264],["v8::internal::Builtin_ListFormatConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335883360,93957335883392],["v8::internal::Builtin_ListFormatPrototypeResolvedOptions(int, unsigned long*, v8::internal::Isolate*)",93957335884224,93957335884256],["v8::internal::Builtin_Impl_ListFormatPrototypeResolvedOptions(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335884736,93957335885006],["v8::internal::Builtin_Impl_Stats_ListFormatSupportedLocalesOf(int, unsigned long*, v8::internal::Isolate*)",93957335885264,93957335885892],["v8::internal::Builtin_Impl_Stats_LocaleConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335885936,93957335886408],["v8::internal::wasm::DebugInfo::GetDebugSideTableIfExists(v8::internal::wasm::WasmCode const*) const",93957341637184,93957341637265],["v8::internal::(anonymous namespace)::CheckBreakPoint(v8::internal::Isolate*, v8::internal::Handle<v8::internal::BreakPoint>, v8::internal::StackFrameId)",93957341644304,93957341644578],["v8::internal::wasm::DebugInfoImpl::DeadBreakpoint(int, v8::internal::Vector<int const>, v8::internal::Isolate*)",93957341648448,93957341648751],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::Isolate*, v8::internal::wasm::DebugInfoImpl::PerIsolateDebugData>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::Isolate*, v8::internal::wasm::DebugInfoImpl::PerIsolateDebugData>, std::__1::__unordered_map_hasher<v8::internal::Isolate*, std::__1::__hash_value_type<v8::internal::Isolate*, v8::internal::wasm::DebugInfoImpl::PerIsolateDebugData>, std::__1::hash<v8::internal::Isolate*>, std::__1::equal_to<v8::internal::Isolate*>, true>, std::__1::__unordered_map_equal<v8::internal::Isolate*, std::__1::__hash_value_type<v8::internal::Isolate*, v8::internal::wasm::DebugInfoImpl::PerIsolateDebugData>, std::__1::equal_to<v8::internal::Isolate*>, std::__1::hash<v8::internal::Isolate*>, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::Isolate*, v8::internal::wasm::DebugInfoImpl::PerIsolateDebugData> > >::__emplace_unique_key_args<v8::internal::Isolate*, std::__1::piecewise_construct_t const&, std::__1::tuple<v8::internal::Isolate*&&>, std::__1::tuple<> >(v8::internal::Isolate* const&, std::__1::piecewise_construct_t const&, std::__1::tuple<v8::internal::Isolate*&&>&&, std::__1::tuple<>&&)",93957341651104,93957341652013],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::wasm::WasmCode const*, std::__1::unique_ptr<v8::internal::wasm::DebugSideTable, std::__1::default_delete<v8::internal::wasm::DebugSideTable> > >, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::wasm::WasmCode const*, std::__1::unique_ptr<v8::internal::wasm::DebugSideTable, std::__1::default_delete<v8::internal::wasm::DebugSideTable> > >, std::__1::__unordered_map_hasher<v8::internal::wasm::WasmCode const*, std::__1::__hash_value_type<v8::internal::wasm::WasmCode const*, std::__1::unique_ptr<v8::internal::wasm::DebugSideTable, std::__1::default_delete<v8::internal::wasm::DebugSideTable> > >, std::__1::hash<v8::internal::wasm::WasmCode const*>, std::__1::equal_to<v8::internal::wasm::WasmCode const*>, true>, std::__1::__unordered_map_equal<v8::internal::wasm::WasmCode const*, std::__1::__hash_value_type<v8::internal::wasm::WasmCode const*, std::__1::unique_ptr<v8::internal::wasm::DebugSideTable, std::__1::default_delete<v8::internal::wasm::DebugSideTable> > >, std::__1::equal_to<v8::internal::wasm::WasmCode const*>, std::__1::hash<v8::internal::wasm::WasmCode const*>, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::wasm::WasmCode const*, std::__1::unique_ptr<v8::internal::wasm::DebugSideTable, std::__1::default_delete<v8::internal::wasm::DebugSideTable> > > > >::__emplace_unique_impl<v8::internal::wasm::WasmCode*&, std::__1::unique_ptr<v8::internal::wasm::DebugSideTable, std::__1::default_delete<v8::internal::wasm::DebugSideTable> > >(v8::internal::wasm::WasmCode*&, std::__1::unique_ptr<v8::internal::wasm::DebugSideTable, std::__1::default_delete<v8::internal::wasm::DebugSideTable> >&&)",93957341653872,93957341654173],["v8::internal::wasm::DebugInfoImpl::UpdateReturnAddress(v8::internal::WasmFrame*, v8::internal::wasm::WasmCode*, v8::internal::wasm::(anonymous namespace)::ReturnLocation)",93957341654912,93957341655408],["std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::wasm::WasmCode const*, std::__1::unique_ptr<v8::internal::wasm::DebugSideTable, std::__1::default_delete<v8::internal::wasm::DebugSideTable> > >, std::__1::__unordered_map_hasher<v8::internal::wasm::WasmCode const*, std::__1::__hash_value_type<v8::internal::wasm::WasmCode const*, std::__1::unique_ptr<v8::internal::wasm::DebugSideTable, std::__1::default_delete<v8::internal::wasm::DebugSideTable> > >, std::__1::hash<v8::internal::wasm::WasmCode const*>, std::__1::equal_to<v8::internal::wasm::WasmCode const*>, true>, std::__1::__unordered_map_equal<v8::internal::wasm::WasmCode const*, std::__1::__hash_value_type<v8::internal::wasm::WasmCode const*, std::__1::unique_ptr<v8::internal::wasm::DebugSideTable, std::__1::default_delete<v8::internal::wasm::DebugSideTable> > >, std::__1::equal_to<v8::internal::wasm::WasmCode const*>, std::__1::hash<v8::internal::wasm::WasmCode const*>, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::wasm::WasmCode const*, std::__1::unique_ptr<v8::internal::wasm::DebugSideTable, std::__1::default_delete<v8::internal::wasm::DebugSideTable> > > > >::erase(std::__1::__hash_const_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::wasm::WasmCode const*, std::__1::unique_ptr<v8::internal::wasm::DebugSideTable, std::__1::default_delete<v8::internal::wasm::DebugSideTable> > >, void*>*>)",93957341655680,93957341655907],["v8::internal::wasm::DebugInfoImpl::~DebugInfoImpl()",93957341656112,93957341656618],["v8::internal::Builtin_Impl_Stats_DisplayNamesPrototypeResolvedOptions(int, unsigned long*, v8::internal::Isolate*)",93957335872736,93957335873208],["v8::internal::Builtin_Impl_NumberFormatPrototypeResolvedOptions(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335877040,93957335877344],["v8::internal::Builtin_Impl_NumberFormatInternalFormatNumber(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335878928,93957335879386],["v8::internal::Builtin_DateTimeFormatPrototypeFormat(int, unsigned long*, v8::internal::Isolate*)",93957335880688,93957335880720],["v8::internal::Builtin_DateTimeFormatInternalFormat(int, unsigned long*, v8::internal::Isolate*)",93957335881760,93957335881792],["v8::internal::Builtin_Impl_DateTimeFormatInternalFormat(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335882272,93957335882588],["v8::internal::Builtin_Impl_Stats_IntlGetCanonicalLocales(int, unsigned long*, v8::internal::Isolate*)",93957335882784,93957335883352],["v8::internal::Builtin_Impl_Stats_ListFormatConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335883392,93957335883864],["v8::internal::wasm::DebugInfo::PrepareStep(v8::internal::WasmFrame*)",93957341635488,93957341635711],["v8::internal::WasmScript::AddBreakpointToInfo(v8::internal::Handle<v8::internal::Script>, int, v8::internal::Handle<v8::internal::BreakPoint>)",93957341638368,93957341639940],["v8::internal::WasmScript::GetPossibleBreakpoints(v8::internal::wasm::NativeModule*, v8::debug::Location const&, v8::debug::Location const&, std::__1::vector<v8::debug::BreakLocation, std::__1::allocator<v8::debug::BreakLocation> >*)",93957341642128,93957341643201],["v8::internal::wasm::DebugInfoImpl::GetDebugSideTable(v8::internal::wasm::WasmCode*)",93957341644800,93957341645081],["std::__1::vector<int, std::__1::allocator<int> >::insert(std::__1::__wrap_iter<int const*>, int const&)",93957341647136,93957341648439],["v8::internal::wasm::DebugInfoImpl::RecompileLiftoffWithBreakpoints(int, v8::internal::Vector<int const>, int)",93957341648752,93957341650437],["_ZNSt3__16vectorIiNS_9allocatorIiEEEC2INS_21__tree_const_iteratorIiPNS_11__tree_nodeIiPvEElEEEET_NS_9enable_ifIXaasr27__is_cpp17_forward_iteratorISB_EE5valuesr16is_constructibleIiNS_15iterator_traitsISB_E9referenceEEE5valueESB_E4typeE",93957341650800,93957341651095],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<int, std::__1::vector<int, std::__1::allocator<int> > >, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<int, std::__1::vector<int, std::__1::allocator<int> > >, std::__1::__unordered_map_hasher<int, std::__1::__hash_value_type<int, std::__1::vector<int, std::__1::allocator<int> > >, std::__1::hash<int>, std::__1::equal_to<int>, true>, std::__1::__unordered_map_equal<int, std::__1::__hash_value_type<int, std::__1::vector<int, std::__1::allocator<int> > >, std::__1::equal_to<int>, std::__1::hash<int>, true>, std::__1::allocator<std::__1::__hash_value_type<int, std::__1::vector<int, std::__1::allocator<int> > > > >::__emplace_unique_key_args<int, std::__1::piecewise_construct_t const&, std::__1::tuple<int const&>, std::__1::tuple<> >(int const&, std::__1::piecewise_construct_t const&, std::__1::tuple<int const&>&&, std::__1::tuple<>&&)",93957341652016,93957341652940],["v8::internal::Builtin_DateTimeFormatPrototypeFormatRange(int, unsigned long*, v8::internal::Isolate*)",93957335870400,93957335870547],["v8::internal::Builtin_DisplayNamesPrototypeOf(int, unsigned long*, v8::internal::Isolate*)",93957335874384,93957335874416],["v8::internal::Builtin_NumberFormatPrototypeResolvedOptions(int, unsigned long*, v8::internal::Isolate*)",93957335876528,93957335876560],["v8::internal::Builtin_Impl_Stats_NumberFormatPrototypeFormatNumber(int, unsigned long*, v8::internal::Isolate*)",93957335877376,93957335877848],["v8::internal::Builtin_Impl_Stats_NumberFormatInternalFormatNumber(int, unsigned long*, v8::internal::Isolate*)",93957335878448,93957335878920],["v8::internal::Builtin_DateTimeFormatConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335879392,93957335879424],["v8::internal::Builtin_Impl_DateTimeFormatConstructor(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335879904,93957335880682],["v8::internal::Builtin_Impl_Stats_DateTimeFormatPrototypeFormat(int, unsigned long*, v8::internal::Isolate*)",93957335880720,93957335881192],["v8::internal::wasm::DebugInfoImpl::GetImportName(v8::internal::wasm::ImportExportKindCode, unsigned int)",93957341632576,93957341633106],["v8::internal::wasm::DebugInfoImpl::ClearStepping(v8::internal::WasmFrame*)",93957341636016,93957341636339],["v8::internal::wasm::DebugInfoImpl::RemoveIsolate(v8::internal::Isolate*)",93957341637296,93957341637916],["v8::internal::WasmScript::SetBreakPointOnFirstBreakableForFunction(v8::internal::Handle<v8::internal::Script>, int, v8::internal::Handle<v8::internal::BreakPoint>)",93957341640448,93957341640637],["v8::internal::WasmScript::ClearAllBreakpoints(v8::internal::Script)",93957341641968,93957341642116],["v8::internal::WasmScript::CheckBreakPoints(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Script>, int, v8::internal::StackFrameId)",93957341643216,93957341644291],["v8::internal::wasm::DebugInfoImpl::FrameInspectionScope::FrameInspectionScope(v8::internal::wasm::DebugInfoImpl*, unsigned long)",93957341644592,93957341644798],["v8::internal::wasm::DebugInfoImpl::GetValue(v8::internal::wasm::DebugSideTable const*, v8::internal::wasm::DebugSideTable::Entry const*, int, unsigned long, unsigned long, v8::internal::Isolate*) const",93957341645088,93957341645977],["v8::internal::Builtin_DateTimeFormatPrototypeResolvedOptions(int, unsigned long*, v8::internal::Isolate*)",93957335867456,93957335867488],["v8::internal::Builtin_DisplayNamesConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335871840,93957335871872],["v8::internal::Builtin_DisplayNamesSupportedLocalesOf(int, unsigned long*, v8::internal::Isolate*)",93957335873488,93957335873730],["v8::internal::Builtin_Impl_DisplayNamesPrototypeOf(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335874896,93957335875217],["v8::internal::Builtin_Impl_NumberFormatConstructor(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335875744,93957335876522],["v8::internal::Builtin_Impl_Stats_NumberFormatPrototypeResolvedOptions(int, unsigned long*, v8::internal::Isolate*)",93957335876560,93957335877032],["v8::internal::Builtin_NumberFormatPrototypeFormatNumber(int, unsigned long*, v8::internal::Isolate*)",93957335877344,93957335877376],["v8::internal::Builtin_Impl_NumberFormatPrototypeFormatNumber(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335877856,93957335878410],["v8::internal::wasm::DebugInfo::GetNumLocals(unsigned long)",93957341631408,93957341631467],["v8::internal::wasm::DebugInfoImpl::GetLocalName(int, int)",93957341633616,93957341634293],["v8::internal::wasm::DebugInfo::ClearStepping(v8::internal::Isolate*)",93957341635920,93957341635998],["v8::internal::wasm::DebugInfoImpl::RemoveBreakpoint(int, int, v8::internal::Isolate*)",93957341636512,93957341637038],["v8::internal::wasm::DebugInfo::RemoveIsolate(v8::internal::Isolate*)",93957341637280,93957341637293],["v8::internal::WasmScript::SetBreakPoint(v8::internal::Handle<v8::internal::Script>, int*, v8::internal::Handle<v8::internal::BreakPoint>)",93957341637920,93957341638363],["v8::internal::(anonymous namespace)::FindNextBreakablePosition(v8::internal::wasm::NativeModule*, int, int)",93957341639952,93957341640446],["v8::internal::WasmScript::ClearBreakPoint(v8::internal::Handle<v8::internal::Script>, int, v8::internal::Handle<v8::internal::BreakPoint>)",93957341640640,93957341641566],["v8::internal::Builtin_Impl_StringPrototypeNormalizeIntl(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335864368,93957335864742],["v8::internal::Builtin_Impl_Stats_DateTimeFormatSupportedLocalesOf(int, unsigned long*, v8::internal::Isolate*)",93957335868544,93957335869172],["v8::internal::Builtin_DateTimeFormatPrototypeFormatRangeToParts(int, unsigned long*, v8::internal::Isolate*)",93957335871120,93957335871267],["v8::internal::Builtin_Impl_DisplayNamesConstructor(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335872352,93957335872695],["v8::internal::Builtin_Impl_DisplayNamesPrototypeResolvedOptions(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335873216,93957335873486],["v8::internal::Builtin_Impl_Stats_DisplayNamesSupportedLocalesOf(int, unsigned long*, v8::internal::Isolate*)",93957335873744,93957335874372],["v8::internal::Builtin_Impl_Stats_DisplayNamesPrototypeOf(int, unsigned long*, v8::internal::Isolate*)",93957335874416,93957335874888],["v8::internal::Builtin_NumberFormatConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335875232,93957335875264],["unsigned int std::__1::__sort4<v8::internal::wasm::NativeModule::TransferNewOwnedCodeLocked() const::$_0&, std::__1::unique_ptr<v8::internal::wasm::WasmCode, std::__1::default_delete<v8::internal::wasm::WasmCode> >*>(std::__1::unique_ptr<v8::internal::wasm::WasmCode, std::__1::default_delete<v8::internal::wasm::WasmCode> >*, std::__1::unique_ptr<v8::internal::wasm::WasmCode, std::__1::default_delete<v8::internal::wasm::WasmCode> >*, std::__1::unique_ptr<v8::internal::wasm::WasmCode, std::__1::default_delete<v8::internal::wasm::WasmCode> >*, std::__1::unique_ptr<v8::internal::wasm::WasmCode, std::__1::default_delete<v8::internal::wasm::WasmCode> >*, v8::internal::wasm::NativeModule::TransferNewOwnedCodeLocked() const::$_0&)",93957341628960,93957341629210],["v8::internal::wasm::DebugInfo::GetFunctionAtAddress(unsigned long)",93957341631792,93957341631872],["v8::internal::wasm::DebugInfoImpl::GetTypeName(int)",93957341633136,93957341633587],["v8::internal::wasm::DebugInfoImpl::GetFieldName(int, int)",93957341634320,93957341634997],["v8::internal::wasm::DebugInfo::PrepareStepOutTo(v8::internal::WasmFrame*)",93957341635712,93957341635916],["v8::internal::wasm::DebugInfo::ClearStepping(v8::internal::WasmFrame*)",93957341636000,93957341636013],["v8::internal::wasm::DebugInfo::IsStepping(v8::internal::WasmFrame*)",93957341636352,93957341636497],["v8::internal::wasm::DebugInfo::RemoveDebugSideTables(v8::internal::Vector<v8::internal::wasm::WasmCode* const>)",93957341637040,93957341637174],["v8::internal::Builtin_Impl_Stats_UnsupportedThrower(int, unsigned long*, v8::internal::Isolate*)",93957335861792,93957335862316],["v8::internal::Builtin_Impl_Stats_NumberFormatSupportedLocalesOf(int, unsigned long*, v8::internal::Isolate*)",93957335865904,93957335866532],["v8::internal::Builtin_Impl_DateTimeFormatPrototypeResolvedOptions(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335867968,93957335868281],["v8::internal::Builtin_Impl_Stats_DateTimeFormatPrototypeFormatToParts(int, unsigned long*, v8::internal::Isolate*)",93957335869216,93957335869688],["v8::internal::Builtin_Impl_Stats_DateTimeFormatPrototypeFormatRange(int, unsigned long*, v8::internal::Isolate*)",93957335870560,93957335871111],["v8::internal::Builtin_Impl_Stats_DateTimeFormatPrototypeFormatRangeToParts(int, unsigned long*, v8::internal::Isolate*)",93957335871280,93957335871831],["v8::internal::Builtin_Impl_Stats_DisplayNamesConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335871872,93957335872344],["v8::internal::Builtin_DisplayNamesPrototypeResolvedOptions(int, unsigned long*, v8::internal::Isolate*)",93957335872704,93957335872736],["std::__1::__shared_ptr_emplace<v8::internal::OwnedVector<unsigned char const>, std::__1::allocator<v8::internal::OwnedVector<unsigned char const> > >::__on_zero_shared()",93957341626640,93957341626672],["v8::internal::wasm::DebugSideTable::Print(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) const",93957341630576,93957341630754],["v8::internal::wasm::DebugInfo::GetStackDepth(unsigned long)",93957341631584,93957341631648],["v8::internal::wasm::DebugInfoImpl::GetExportName(v8::internal::wasm::ImportExportKindCode, unsigned int)",93957341631888,93957341632552],["v8::internal::wasm::DebugInfo::GetTypeName(int)",93957341633120,93957341633133],["v8::internal::wasm::DebugInfo::GetLocalName(int, int)",93957341633600,93957341633613],["v8::internal::wasm::DebugInfo::GetFieldName(int, int)",93957341634304,93957341634317],["v8::internal::wasm::DebugInfoImpl::SetBreakpoint(int, int, v8::internal::Isolate*)",93957341635008,93957341635486],["v8::internal::Builtin_GlobalEval(int, unsigned long*, v8::internal::Isolate*)",93957335859552,93957335859584],["v8::internal::Builtin_Impl_Stats_StringPrototypeToUpperCaseIntl(int, unsigned long*, v8::internal::Isolate*)",93957335863040,93957335863512],["v8::internal::Builtin_Impl_Stats_V8BreakIteratorSupportedLocalesOf(int, unsigned long*, v8::internal::Isolate*)",93957335865008,93957335865636],["v8::internal::Builtin_Impl_Stats_NumberFormatPrototypeFormatToParts(int, unsigned long*, v8::internal::Isolate*)",93957335866576,93957335867048],["v8::internal::Builtin_Impl_Stats_DateTimeFormatPrototypeResolvedOptions(int, unsigned long*, v8::internal::Isolate*)",93957335867488,93957335867960],["v8::internal::Builtin_DateTimeFormatSupportedLocalesOf(int, unsigned long*, v8::internal::Isolate*)",93957335868288,93957335868530],["v8::internal::Builtin_DateTimeFormatPrototypeFormatToParts(int, unsigned long*, v8::internal::Isolate*)",93957335869184,93957335869216],["v8::internal::Builtin_Impl_DateTimeFormatPrototypeFormatToParts(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335869696,93957335870391],["std::__1::__tree_node_base<void*>*& std::__1::__tree<v8::base::AddressRegion, v8::base::AddressRegion::StartAddressLess, std::__1::allocator<v8::base::AddressRegion> >::__find_equal<v8::base::AddressRegion>(std::__1::__tree_const_iterator<v8::base::AddressRegion, std::__1::__tree_node<v8::base::AddressRegion, void*>*, long>, std::__1::__tree_end_node<std::__1::__tree_node_base<void*>*>*&, std::__1::__tree_node_base<void*>*&, v8::base::AddressRegion const&)",93957341624448,93957341624882],["v8::internal::wasm::(anonymous namespace)::NativeModuleWireBytesStorage::~NativeModuleWireBytesStorage()",93957341626832,93957341626905],["std::__1::pair<std::__1::__tree_iterator<std::__1::__value_type<std::__1::pair<v8::internal::wasm::ExecutionTier, int>, v8::internal::wasm::WasmCode*>, std::__1::__tree_node<std::__1::__value_type<std::__1::pair<v8::internal::wasm::ExecutionTier, int>, v8::internal::wasm::WasmCode*>, void*>*, long>, bool> std::__1::__tree<std::__1::__value_type<std::__1::pair<v8::internal::wasm::ExecutionTier, int>, v8::internal::wasm::WasmCode*>, std::__1::__map_value_compare<std::__1::pair<v8::internal::wasm::ExecutionTier, int>, std::__1::__value_type<std::__1::pair<v8::internal::wasm::ExecutionTier, int>, v8::internal::wasm::WasmCode*>, std::__1::less<std::__1::pair<v8::internal::wasm::ExecutionTier, int> >, true>, std::__1::allocator<std::__1::__value_type<std::__1::pair<v8::internal::wasm::ExecutionTier, int>, v8::internal::wasm::WasmCode*> > >::__emplace_unique_impl<std::__1::pair<std::__1::pair<v8::internal::wasm::ExecutionTier, unsigned int>, v8::internal::wasm::WasmCode*> >(std::__1::pair<std::__1::pair<v8::internal::wasm::ExecutionTier, unsigned int>, v8::internal::wasm::WasmCode*>&&)",93957341630160,93957341630383],["v8::internal::wasm::DebugInfo::DebugInfo(v8::internal::wasm::NativeModule*)",93957341631200,93957341631337],["v8::internal::wasm::DebugInfo::GetLocalValue(int, unsigned long, unsigned long, unsigned long, v8::internal::Isolate*)",93957341631472,93957341631580],["v8::internal::wasm::DebugInfo::GetStackValue(int, unsigned long, unsigned long, unsigned long, v8::internal::Isolate*)",93957341631648,93957341631781],["v8::internal::wasm::DebugInfo::GetExportName(v8::internal::wasm::ImportExportKindCode, unsigned int)",93957341631872,93957341631885],["v8::internal::wasm::DebugInfo::GetImportName(v8::internal::wasm::ImportExportKindCode, unsigned int)",93957341632560,93957341632573],["v8::internal::Builtin_Impl_Stats_GlobalEncodeURIComponent(int, unsigned long*, v8::internal::Isolate*)",93957335857376,93957335857848],["v8::internal::Builtin_Impl_Stats_Illegal(int, unsigned long*, v8::internal::Isolate*)",93957335860768,93957335861122],["v8::internal::Builtin_Impl_Stats_StrictPoisonPillThrower(int, unsigned long*, v8::internal::Isolate*)",93957335862480,93957335863004],["v8::internal::Builtin_StringPrototypeNormalizeIntl(int, unsigned long*, v8::internal::Isolate*)",93957335863856,93957335863888],["v8::internal::Builtin_V8BreakIteratorSupportedLocalesOf(int, unsigned long*, v8::internal::Isolate*)",93957335864752,93957335864994],["v8::internal::Builtin_NumberFormatSupportedLocalesOf(int, unsigned long*, v8::internal::Isolate*)",93957335865648,93957335865890],["v8::internal::Builtin_NumberFormatPrototypeFormatToParts(int, unsigned long*, v8::internal::Isolate*)",93957335866544,93957335866576],["v8::internal::Builtin_Impl_NumberFormatPrototypeFormatToParts(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335867056,93957335867452],["v8::internal::wasm::NativeModule::FreeCode(v8::internal::Vector<v8::internal::wasm::WasmCode* const>)",93957341623104,93957341623366],["std::__1::__tree<std::__1::__value_type<unsigned long, std::__1::unique_ptr<v8::internal::wasm::WasmCode, std::__1::default_delete<v8::internal::wasm::WasmCode> > >, std::__1::__map_value_compare<unsigned long, std::__1::__value_type<unsigned long, std::__1::unique_ptr<v8::internal::wasm::WasmCode, std::__1::default_delete<v8::internal::wasm::WasmCode> > >, std::__1::less<unsigned long>, true>, std::__1::allocator<std::__1::__value_type<unsigned long, std::__1::unique_ptr<v8::internal::wasm::WasmCode, std::__1::default_delete<v8::internal::wasm::WasmCode> > > > >::destroy(std::__1::__tree_node<std::__1::__value_type<unsigned long, std::__1::unique_ptr<v8::internal::wasm::WasmCode, std::__1::default_delete<v8::internal::wasm::WasmCode> > >, void*>*)",93957341626400,93957341626511],["std::__1::__shared_ptr_emplace<v8::internal::wasm::(anonymous namespace)::NativeModuleWireBytesStorage, std::__1::allocator<v8::internal::wasm::(anonymous namespace)::NativeModuleWireBytesStorage> >::~__shared_ptr_emplace()",93957341626704,93957341626742],["v8::internal::wasm::(anonymous namespace)::NativeModuleWireBytesStorage::GetCode(v8::internal::wasm::WireBytesRef) const",93957341626992,93957341627131],["bool std::__1::__insertion_sort_incomplete<v8::internal::wasm::NativeModule::TransferNewOwnedCodeLocked() const::$_0&, std::__1::unique_ptr<v8::internal::wasm::WasmCode, std::__1::default_delete<v8::internal::wasm::WasmCode> >*>(std::__1::unique_ptr<v8::internal::wasm::WasmCode, std::__1::default_delete<v8::internal::wasm::WasmCode> >*, std::__1::unique_ptr<v8::internal::wasm::WasmCode, std::__1::default_delete<v8::internal::wasm::WasmCode> >*, v8::internal::wasm::NativeModule::TransferNewOwnedCodeLocked() const::$_0&)",93957341629216,93957341630158],["std::__1::__tree<std::__1::__value_type<unsigned long, std::__1::unique_ptr<v8::internal::wasm::WasmCode, std::__1::default_delete<v8::internal::wasm::WasmCode> > >, std::__1::__map_value_compare<unsigned long, std::__1::__value_type<unsigned long, std::__1::unique_ptr<v8::internal::wasm::WasmCode, std::__1::default_delete<v8::internal::wasm::WasmCode> > >, std::__1::less<unsigned long>, true>, std::__1::allocator<std::__1::__value_type<unsigned long, std::__1::unique_ptr<v8::internal::wasm::WasmCode, std::__1::default_delete<v8::internal::wasm::WasmCode> > > > >::erase(std::__1::__tree_const_iterator<std::__1::__value_type<unsigned long, std::__1::unique_ptr<v8::internal::wasm::WasmCode, std::__1::default_delete<v8::internal::wasm::WasmCode> > >, std::__1::__tree_node<std::__1::__value_type<unsigned long, std::__1::unique_ptr<v8::internal::wasm::WasmCode, std::__1::default_delete<v8::internal::wasm::WasmCode> > >, void*>*, long>)",93957341630384,93957341630571],["v8::internal::wasm::DebugSideTable::Entry::Print(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) const",93957341630768,93957341631194],["v8::internal::wasm::DebugInfo::~DebugInfo()",93957341631344,93957341631394],["v8::internal::Builtin_Impl_GlobalDecodeURI(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335855648,93957335855866],["v8::internal::Builtin_Impl_GlobalEscape(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335858592,93957335858805],["v8::internal::Builtin_Impl_GlobalEval(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335860064,93957335860713],["v8::internal::Builtin_Impl_Stats_EmptyFunction(int, unsigned long*, v8::internal::Isolate*)",93957335861168,93957335861624],["v8::internal::Builtin_StrictPoisonPillThrower(int, unsigned long*, v8::internal::Isolate*)",93957335862320,93957335862475],["v8::internal::Builtin_StringPrototypeToUpperCaseIntl(int, unsigned long*, v8::internal::Isolate*)",93957335863008,93957335863040],["v8::internal::Builtin_Impl_StringPrototypeToUpperCaseIntl(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335863520,93957335863846],["v8::internal::Builtin_Impl_Stats_StringPrototypeNormalizeIntl(int, unsigned long*, v8::internal::Isolate*)",93957335863888,93957335864360],["v8::internal::wasm::WasmCodeManager::NewNativeModule(v8::internal::wasm::WasmEngine*, v8::internal::Isolate*, v8::internal::wasm::WasmFeatures const&, unsigned long, std::__1::shared_ptr<v8::internal::wasm::WasmModule const>)",93957341619200,93957341620017],["v8::internal::wasm::NativeModuleModificationScope::~NativeModuleModificationScope()",93957341623792,93957341623880],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::wasm::NativeModule*, std::__1::vector<v8::internal::wasm::WasmCode*, std::__1::allocator<v8::internal::wasm::WasmCode*> > >, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::wasm::NativeModule*, std::__1::vector<v8::internal::wasm::WasmCode*, std::__1::allocator<v8::internal::wasm::WasmCode*> > >, std::__1::__unordered_map_hasher<v8::internal::wasm::NativeModule*, std::__1::__hash_value_type<v8::internal::wasm::NativeModule*, std::__1::vector<v8::internal::wasm::WasmCode*, std::__1::allocator<v8::internal::wasm::WasmCode*> > >, std::__1::hash<v8::internal::wasm::NativeModule*>, std::__1::equal_to<v8::internal::wasm::NativeModule*>, true>, std::__1::__unordered_map_equal<v8::internal::wasm::NativeModule*, std::__1::__hash_value_type<v8::internal::wasm::NativeModule*, std::__1::vector<v8::internal::wasm::WasmCode*, std::__1::allocator<v8::internal::wasm::WasmCode*> > >, std::__1::equal_to<v8::internal::wasm::NativeModule*>, std::__1::hash<v8::internal::wasm::NativeModule*>, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::wasm::NativeModule*, std::__1::vector<v8::internal::wasm::WasmCode*, std::__1::allocator<v8::internal::wasm::WasmCode*> > > > >::__emplace_unique_key_args<v8::internal::wasm::NativeModule*, std::__1::piecewise_construct_t const&, std::__1::tuple<v8::internal::wasm::NativeModule*&&>, std::__1::tuple<> >(v8::internal::wasm::NativeModule* const&, std::__1::piecewise_construct_t const&, std::__1::tuple<v8::internal::wasm::NativeModule*&&>&&, std::__1::tuple<>&&)",93957341625056,93957341625951],["std::__1::__shared_ptr_emplace<v8::internal::OwnedVector<unsigned char const>, std::__1::allocator<v8::internal::OwnedVector<unsigned char const> > >::~__shared_ptr_emplace()",93957341626560,93957341626580],["std::__1::__shared_ptr_emplace<v8::internal::wasm::(anonymous namespace)::NativeModuleWireBytesStorage, std::__1::allocator<v8::internal::wasm::(anonymous namespace)::NativeModuleWireBytesStorage> >::~__shared_ptr_emplace()",93957341626672,93957341626692],["std::__1::__shared_ptr_emplace<v8::internal::wasm::(anonymous namespace)::NativeModuleWireBytesStorage, std::__1::allocator<v8::internal::wasm::(anonymous namespace)::NativeModuleWireBytesStorage> >::__on_zero_shared()",93957341626752,93957341626826],["v8::internal::wasm::(anonymous namespace)::NativeModuleWireBytesStorage::~NativeModuleWireBytesStorage()",93957341626912,93957341626988],["void std::__1::__sort<v8::internal::wasm::NativeModule::TransferNewOwnedCodeLocked() const::$_0&, std::__1::unique_ptr<v8::internal::wasm::WasmCode, std::__1::default_delete<v8::internal::wasm::WasmCode> >*>(std::__1::unique_ptr<v8::internal::wasm::WasmCode, std::__1::default_delete<v8::internal::wasm::WasmCode> >*, std::__1::unique_ptr<v8::internal::wasm::WasmCode, std::__1::default_delete<v8::internal::wasm::WasmCode> >*, v8::internal::wasm::NativeModule::TransferNewOwnedCodeLocked() const::$_0&)",93957341627136,93957341628954],["v8::internal::Builtin_Impl_Stats_FunctionPrototypeBind(int, unsigned long*, v8::internal::Isolate*)",93957335847952,93957335848424],["v8::internal::Builtin_GlobalEncodeURI(int, unsigned long*, v8::internal::Isolate*)",93957335856608,93957335856640],["v8::internal::Builtin_GlobalEscape(int, unsigned long*, v8::internal::Isolate*)",93957335858080,93957335858112],["v8::internal::Builtin_Impl_Stats_GlobalUnescape(int, unsigned long*, v8::internal::Isolate*)",93957335858848,93957335859320],["v8::internal::Builtin_Impl_Stats_GlobalEval(int, unsigned long*, v8::internal::Isolate*)",93957335859584,93957335860056],["v8::internal::Builtin_Illegal(int, unsigned long*, v8::internal::Isolate*)",93957335860720,93957335860757],["v8::internal::Builtin_EmptyFunction(int, unsigned long*, v8::internal::Isolate*)",93957335861136,93957335861168],["v8::internal::Builtin_UnsupportedThrower(int, unsigned long*, v8::internal::Isolate*)",93957335861632,93957335861787],["v8::internal::wasm::NativeModule::GetFunctionIndexFromJumpTableSlot(unsigned long) const",93957341617760,93957341617943],["v8::internal::wasm::NativeModule::SetTieringState(v8::internal::wasm::TieringState)",93957341621584,93957341621667],["v8::internal::wasm::WasmCodeManager::LookupCode(unsigned long) const",93957341623456,93957341623690],["v8::internal::wasm::WasmCodeRefScope::~WasmCodeRefScope()",93957341623952,93957341624031],["std::__1::default_delete<v8::internal::wasm::WasmModuleSourceMap>::operator()(v8::internal::wasm::WasmModuleSourceMap*) const",93957341624896,93957341625054],["void std::__1::vector<v8::internal::VirtualMemory, std::__1::allocator<v8::internal::VirtualMemory> >::__emplace_back_slow_path<v8::internal::VirtualMemory>(v8::internal::VirtualMemory&&)",93957341625952,93957341626389],["std::__1::__shared_ptr_pointer<v8::internal::wasm::NativeModule*, std::__1::shared_ptr<v8::internal::wasm::NativeModule>::__shared_ptr_default_delete<v8::internal::wasm::NativeModule, v8::internal::wasm::NativeModule>, std::__1::allocator<v8::internal::wasm::NativeModule> >::__on_zero_shared()",93957341626512,93957341626556],["std::__1::__shared_ptr_emplace<v8::internal::OwnedVector<unsigned char const>, std::__1::allocator<v8::internal::OwnedVector<unsigned char const> > >::~__shared_ptr_emplace()",93957341626592,93957341626630],["v8::internal::Builtin_Impl_Stats_GeneratorFunctionConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335845696,93957335846254],["v8::internal::Builtin_Impl_FunctionPrototypeToString(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335851440,93957335851810],["v8::internal::Builtin_Impl_Stats_GlobalDecodeURIComponent(int, unsigned long*, v8::internal::Isolate*)",93957335855904,93957335856376],["v8::internal::Builtin_Impl_GlobalEncodeURI(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335857120,93957335857338],["v8::internal::Builtin_Impl_GlobalEncodeURIComponent(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335857856,93957335858071],["v8::internal::Builtin_Impl_Stats_GlobalEscape(int, unsigned long*, v8::internal::Isolate*)",93957335858112,93957335858584],["v8::internal::Builtin_GlobalUnescape(int, unsigned long*, v8::internal::Isolate*)",93957335858816,93957335858848],["v8::internal::Builtin_Impl_GlobalUnescape(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335859328,93957335859541],["v8::internal::wasm::NativeModule::GetCode(unsigned int) const",93957341614880,93957341615008],["v8::internal::wasm::WasmCodeManager::EstimateLiftoffCodeSize(int)",93957341618848,93957341618865],["v8::internal::wasm::NativeModule::AddCompiledCode(v8::internal::wasm::WasmCompilationResult)",93957341620224,93957341620471],["v8::internal::wasm::NativeModule::RecompileForTiering()",93957341621744,93957341622086],["v8::internal::wasm::NativeModule::GetNumberOfCodeSpacesForTesting() const",93957341623376,93957341623446],["v8::internal::wasm::NativeModuleModificationScope::NativeModuleModificationScope(v8::internal::wasm::NativeModule*)",93957341623696,93957341623780],["v8::internal::wasm::WasmCodeRefScope::WasmCodeRefScope()",93957341623888,93957341623948],["void std::__1::set<v8::base::AddressRegion, v8::base::AddressRegion::StartAddressLess, std::__1::allocator<v8::base::AddressRegion> >::insert<v8::base::AddressRegion const*>(v8::base::AddressRegion const*, v8::base::AddressRegion const*)",93957341624032,93957341624439],["v8::internal::Builtin_ErrorCaptureStackTrace(int, unsigned long*, v8::internal::Isolate*)",93957335843008,93957335843040],["v8::internal::Builtin_AsyncGeneratorFunctionConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335847088,93957335847120],["v8::internal::Builtin_FunctionPrototypeToString(int, unsigned long*, v8::internal::Isolate*)",93957335850928,93957335850960],["v8::internal::Builtin_GlobalDecodeURI(int, unsigned long*, v8::internal::Isolate*)",93957335855136,93957335855168],["v8::internal::Builtin_GlobalDecodeURIComponent(int, unsigned long*, v8::internal::Isolate*)",93957335855872,93957335855904],["v8::internal::Builtin_Impl_GlobalDecodeURIComponent(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335856384,93957335856599],["v8::internal::Builtin_Impl_Stats_GlobalEncodeURI(int, unsigned long*, v8::internal::Isolate*)",93957335856640,93957335857112],["v8::internal::Builtin_GlobalEncodeURIComponent(int, unsigned long*, v8::internal::Isolate*)",93957335857344,93957335857376],["v8::internal::wasm::NativeModule::PublishCode(v8::internal::Vector<std::__1::unique_ptr<v8::internal::wasm::WasmCode, std::__1::default_delete<v8::internal::wasm::WasmCode> > >)",93957341612784,93957341613602],["v8::internal::wasm::NativeModule::TransferNewOwnedCodeLocked() const",93957341616944,93957341617334],["v8::internal::wasm::NativeModule::~NativeModule()",93957341618112,93957341618781],["v8::internal::wasm::WasmCodeManager::EstimateNativeModuleCodeSize(int, int, int, bool)",93957341619040,93957341619144],["v8::internal::wasm::NativeModule::SampleCodeSize(v8::internal::Counters*, v8::internal::wasm::NativeModule::CodeSamplingTime) const",93957341620032,93957341620212],["v8::internal::wasm::NativeModule::AddCompiledCode(v8::internal::Vector<v8::internal::wasm::WasmCompilationResult>)",93957341620480,93957341621584],["v8::internal::wasm::NativeModule::IsTieredDown()",93957341621680,93957341621730],["v8::internal::wasm::NativeModule::FindFunctionsToRecompile(v8::internal::wasm::TieringState)",93957341622096,93957341623091],["v8::internal::DateParser::DateToken v8::internal::DateParser::ParseES5DateTime<unsigned short const>(v8::internal::DateParser::DateStringTokenizer<unsigned short const>*, v8::internal::DateParser::DayComposer*, v8::internal::DateParser::TimeComposer*, v8::internal::DateParser::TimeZoneComposer*)",93957335839744,93957335841123],["v8::internal::Builtin_Impl_Stats_ErrorPrototypeToString(int, unsigned long*, v8::internal::Isolate*)",93957335844256,93957335844808],["v8::internal::Builtin_Impl_Stats_AsyncFunctionConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335846288,93957335846760],["v8::internal::Builtin_Impl_AsyncGeneratorFunctionConstructor(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335847600,93957335847908],["v8::internal::Builtin_Impl_FunctionPrototypeBind(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335848432,93957335850914],["v8::internal::Builtin_Impl_Stats_FunctionPrototypeToString(int, unsigned long*, v8::internal::Isolate*)",93957335850960,93957335851432],["v8::internal::(anonymous namespace)::CreateDynamicFunction(v8::internal::Isolate*, v8::internal::BuiltinArguments, char const*)",93957335851824,93957335855135],["v8::internal::Builtin_Impl_Stats_GlobalDecodeURI(int, unsigned long*, v8::internal::Isolate*)",93957335855168,93957335855640],["v8::internal::wasm::NativeModule::GetNearRuntimeStubEntry(v8::internal::wasm::WasmCode::RuntimeStubId, v8::internal::wasm::NativeModule::JumpTablesRef const&) const",93957341609184,93957341609199],["v8::internal::wasm::NativeModule::ReinstallDebugCode(v8::internal::wasm::WasmCode*)",93957341613840,93957341614150],["v8::internal::wasm::JumpTableAssembler::GenerateFarJumpTable(unsigned long, unsigned long*, int, int)",93957341615792,93957341616589],["v8::internal::wasm::NativeModule::GetJumpTableOffset(unsigned int) const",93957341617632,93957341617681],["v8::internal::wasm::NativeModule::GetRuntimeStubId(unsigned long) const",93957341617952,93957341618102],["v8::internal::wasm::WasmCodeManager::WasmCodeManager(unsigned long)",93957341618784,93957341618842],["v8::internal::wasm::WasmCodeManager::EstimateNativeModuleCodeSize(v8::internal::wasm::WasmModule const*, bool)",93957341618880,93957341619034],["v8::internal::wasm::WasmCodeManager::EstimateNativeModuleMetaDataSize(v8::internal::wasm::WasmModule const*)",93957341619152,93957341619193],["bool v8::internal::DateParser::Parse<unsigned char const>(v8::internal::Isolate*, v8::internal::Vector<unsigned char const>, double*)",93957335834096,93957335835679],["v8::internal::DateParser::InputReader<unsigned short const>::SkipWhiteSpace()",93957335841984,93957335842086],["v8::internal::Builtin_Impl_ErrorCaptureStackTrace(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335843520,93957335844087],["v8::internal::Builtin_Impl_Stats_FunctionConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335844976,93957335845534],["v8::internal::Builtin_AsyncFunctionConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335846256,93957335846288],["v8::internal::Builtin_Impl_AsyncFunctionConstructor(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335846768,93957335847076],["v8::internal::Builtin_Impl_Stats_AsyncGeneratorFunctionConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335847120,93957335847592],["v8::internal::Builtin_FunctionPrototypeBind(int, unsigned long*, v8::internal::Isolate*)",93957335847920,93957335847952],["v8::internal::wasm::WasmCodeManager::AssignRange(v8::base::AddressRegion, v8::internal::wasm::NativeModule*)",93957341605136,93957341605372],["v8::internal::wasm::NativeModule::AddCode(int, v8::internal::CodeDesc const&, int, int, v8::internal::Vector<unsigned char const>, v8::internal::Vector<unsigned char const>, v8::internal::wasm::WasmCode::Kind, v8::internal::wasm::ExecutionTier, v8::internal::wasm::ForDebugging)",93957341610832,93957341611044],["v8::internal::wasm::WasmCodeRefScope::AddRef(v8::internal::wasm::WasmCode*)",93957341613664,93957341613723],["v8::internal::wasm::NativeModule::AddDeserializedCode(int, v8::internal::Vector<unsigned char>, int, int, int, int, int, int, int, v8::internal::Vector<unsigned char const>, v8::internal::Vector<unsigned char const>, v8::internal::Vector<unsigned char const>, v8::internal::wasm::WasmCode::Kind, v8::internal::wasm::ExecutionTier)",93957341614224,93957341614603],["v8::internal::wasm::JumpTableAssembler::PatchJumpTableSlot(unsigned long, unsigned long, unsigned long)",93957341615008,93957341615792],["v8::internal::wasm::NativeModule::SetWireBytes(v8::internal::OwnedVector<unsigned char const>)",93957341616592,93957341616935],["v8::internal::wasm::NativeModule::Lookup(unsigned long) const",93957341617344,93957341617620],["v8::internal::wasm::NativeModule::GetCallTargetForFunction(unsigned int) const",93957341617696,93957341617756],["v8::internal::Builtin_Impl_DatePrototypeToJson(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335830176,93957335830954],["v8::internal::DateParser::DateStringTokenizer<unsigned char const>::Scan()",93957335838720,93957335839331],["v8::internal::DateParser::DateStringTokenizer<unsigned short const>::Scan()",93957335841200,93957335841828],["v8::internal::Builtin_ErrorConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335842240,93957335842427],["v8::internal::Builtin_Impl_Stats_ErrorCaptureStackTrace(int, unsigned long*, v8::internal::Isolate*)",93957335843040,93957335843512],["v8::internal::Builtin_ErrorPrototypeToString(int, unsigned long*, v8::internal::Isolate*)",93957335844096,93957335844254],["v8::internal::Builtin_FunctionConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335844816,93957335844976],["v8::internal::Builtin_GeneratorFunctionConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335845536,93957335845696],["std::__1::vector<v8::internal::VirtualMemory, std::__1::allocator<v8::internal::VirtualMemory> >::reserve(unsigned long)",93957341601904,93957341602208],["v8::internal::wasm::NativeModule::CreateEmptyJumpTableInRegion(int, v8::base::AddressRegion, v8::internal::wasm::WasmCodeAllocator::OptionalLock const&)",93957341607712,93957341607911],["v8::internal::wasm::NativeModule::UseLazyStub(unsigned int)",93957341609568,93957341610070],["v8::internal::wasm::NativeModule::GetNearCallTargetForFunction(unsigned int, v8::internal::wasm::NativeModule::JumpTablesRef const&) const",93957341611968,93957341612020],["v8::internal::wasm::GetCodeKind(v8::internal::wasm::WasmCompilationResult const&)",93957341613616,93957341613659],["v8::internal::wasm::NativeModule::InsertToCodeCache(v8::internal::wasm::WasmCode*)",93957341613728,93957341613832],["v8::internal::wasm::NativeModule::AllocateForDeserializedCode(unsigned long)",93957341614160,93957341614210],["v8::internal::wasm::NativeModule::SnapshotCodeTable() const",93957341614608,93957341614876],["v8::internal::Builtin_DatePrototypeGetYear(int, unsigned long*, v8::internal::Isolate*)",93957335826912,93957335826944],["v8::internal::SmallStringOptimizedAllocator<128ul>::allocate(unsigned int)",93957335833408,93957335833482],["v8::internal::DateParser::DateToken v8::internal::DateParser::ParseES5DateTime<unsigned char const>(v8::internal::DateParser::DateStringTokenizer<unsigned char const>*, v8::internal::DateParser::DayComposer*, v8::internal::DateParser::TimeComposer*, v8::internal::DateParser::TimeZoneComposer*)",93957335837264,93957335838643],["v8::internal::DateParser::InputReader<unsigned char const>::SkipWhiteSpace()",93957335839488,93957335839590],["v8::internal::DateParser::DateStringTokenizer<unsigned short const>::SkipSymbol(char)",93957335841136,93957335841190],["v8::internal::DateParser::InputReader<unsigned short const>::ReadWord(unsigned int*, int)",93957335841840,93957335841978],["v8::internal::DateParser::InputReader<unsigned short const>::SkipParentheses()",93957335842096,93957335842225],["v8::internal::Builtin_Impl_Stats_ErrorConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335842432,93957335843008],["v8::internal::wasm::WasmCode::Disassemble(char const*, std::__1::basic_ostream<char, std::__1::char_traits<char> >&, unsigned long) const",93957341600304,93957341600773],["v8::internal::wasm::NativeModule::AddCodeSpace(v8::base::AddressRegion, v8::internal::wasm::WasmCodeAllocator::OptionalLock const&)",93957341602864,93957341603903],["v8::internal::wasm::WasmCodeAllocator::FreeCode(v8::internal::Vector<v8::internal::wasm::WasmCode* const>)",93957341605680,93957341606494],["v8::internal::wasm::NativeModule::CreateCompilationEnv() const",93957341608656,93957341608799],["v8::internal::wasm::NativeModule::PublishCode(std::__1::unique_ptr<v8::internal::wasm::WasmCode, std::__1::default_delete<v8::internal::wasm::WasmCode> >)",93957341609200,93957341609566],["v8::internal::wasm::JumpTableAssembler::GenerateLazyCompileTable(unsigned long, unsigned int, unsigned int, unsigned long)",93957341610080,93957341610829],["v8::internal::wasm::NativeModule::AddCodeWithCodeSpace(int, v8::internal::CodeDesc const&, int, int, v8::internal::Vector<unsigned char const>, v8::internal::Vector<unsigned char const>, v8::internal::wasm::WasmCode::Kind, v8::internal::wasm::ExecutionTier, v8::internal::wasm::ForDebugging, v8::internal::Vector<unsigned char>, v8::internal::wasm::NativeModule::JumpTablesRef const&)",93957341611056,93957341611965],["v8::internal::wasm::NativeModule::PublishCodeLocked(std::__1::unique_ptr<v8::internal::wasm::WasmCode, std::__1::default_delete<v8::internal::wasm::WasmCode> >)",93957341612032,93957341612781],["v8::internal::Builtin_Impl_Stats_DatePrototypeToLocaleString(int, unsigned long*, v8::internal::Isolate*)",93957335823904,93957335824376],["v8::internal::Builtin_Impl_Stats_DatePrototypeSetYear(int, unsigned long*, v8::internal::Isolate*)",93957335827872,93957335828344],["v8::internal::(anonymous namespace)::ParseDateTimeString(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>)",93957335832160,93957335833344],["v8::base::SmallVector<char, 128ul>::Grow(unsigned long)",93957335833600,93957335833732],["bool v8::internal::DateParser::Parse<unsigned short const>(v8::internal::Isolate*, v8::internal::Vector<unsigned short const>, double*)",93957335835680,93957335837263],["v8::internal::DateParser::DateStringTokenizer<unsigned char const>::SkipSymbol(char)",93957335838656,93957335838710],["v8::internal::DateParser::InputReader<unsigned char const>::ReadWord(unsigned int*, int)",93957335839344,93957335839482],["v8::internal::DateParser::InputReader<unsigned char const>::SkipParentheses()",93957335839600,93957335839729],["v8::internal::wasm::DisjointAllocationPool::AllocateInRegion(unsigned long, v8::base::AddressRegion)",93957341597552,93957341598398],["v8::internal::wasm::WasmCode::DecRefOnPotentiallyDeadCode()",93957341601040,93957341601091],["v8::internal::wasm::WasmCodeAllocator::~WasmCodeAllocator()",93957341602304,93957341602543],["v8::internal::wasm::(anonymous namespace)::ReservationSize(unsigned long, int, unsigned long)",93957341604768,93957341604866],["v8::internal::wasm::WasmCodeAllocator::SetExecutable(bool)",93957341605376,93957341605673],["v8::internal::wasm::NativeModule::NativeModule(v8::internal::wasm::WasmEngine*, v8::internal::wasm::WasmFeatures const&, v8::internal::VirtualMemory, std::__1::shared_ptr<v8::internal::wasm::WasmModule const>, std::__1::shared_ptr<v8::internal::Counters>, std::__1::shared_ptr<v8::internal::wasm::NativeModule>*)",93957341606496,93957341607709],["v8::internal::wasm::NativeModule::LogWasmCodes(v8::internal::Isolate*, v8::internal::Script)",93957341607920,93957341608643],["v8::internal::wasm::NativeModule::FindJumpTablesForRegion(v8::base::AddressRegion) const",93957341608800,93957341609171],["v8::internal::Builtin_Impl_DatePrototypeToString(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335821504,93957335821965],["v8::internal::Builtin_Impl_DatePrototypeToLocaleTimeString(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335825312,93957335825727],["v8::internal::Builtin_Impl_DatePrototypeGetYear(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335827424,93957335827827],["v8::internal::Builtin_DatePrototypeToJson(int, unsigned long*, v8::internal::Isolate*)",93957335829664,93957335829696],["v8::internal::(anonymous namespace)::ToDateString(double, v8::internal::DateCache*, v8::internal::(anonymous namespace)::ToDateStringMode)",93957335830960,93957335832148],["v8::internal::Object::ToNumber(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)",93957335833344,93957335833395],["v8::internal::SmallStringOptimizedAllocator<128ul>::grow(unsigned int*)",93957335833488,93957335833587],["v8::internal::DateCache::EquivalentTime(long)",93957335833744,93957335834095],["v8::internal::wasm::SyncStreamingDecoder::~SyncStreamingDecoder()",93957341594560,93957341594785],["v8::internal::wasm::WasmCode::LogCode(v8::internal::Isolate*, char const*, int) const",93957341598560,93957341599699],["v8::internal::wasm::NativeModule::GetDebugInfo()",93957341600848,93957341600975],["v8::internal::wasm::WasmCode::GetSourcePositionBefore(int)",93957341601440,93957341601604],["void std::__1::vector<v8::internal::VirtualMemory, std::__1::allocator<v8::internal::VirtualMemory> >::emplace_back<v8::internal::VirtualMemory>(v8::internal::VirtualMemory&&)",93957341602208,93957341602289],["v8::internal::wasm::WasmCodeManager::FreeNativeModule(v8::internal::Vector<v8::internal::VirtualMemory>, unsigned long)",93957341602544,93957341602850],["v8::internal::wasm::WasmCodeAllocator::AllocateForCodeInRegion(v8::internal::wasm::NativeModule*, unsigned long, v8::base::AddressRegion, v8::internal::wasm::WasmCodeAllocator::OptionalLock const&)",93957341603904,93957341604767],["v8::internal::wasm::WasmCodeManager::TryAllocate(unsigned long, void*)",93957341604880,93957341605124],["v8::internal::Builtin_DatePrototypeToDateString(int, unsigned long*, v8::internal::Isolate*)",93957335818768,93957335818800],["v8::internal::Builtin_DatePrototypeToLocaleDateString(int, unsigned long*, v8::internal::Isolate*)",93957335822944,93957335822976],["v8::internal::Builtin_DatePrototypeToLocaleTimeString(int, unsigned long*, v8::internal::Isolate*)",93957335824800,93957335824832],["v8::internal::Builtin_Impl_Stats_DatePrototypeToUTCString(int, unsigned long*, v8::internal::Isolate*)",93957335825760,93957335826232],["v8::internal::Builtin_Impl_Stats_DatePrototypeGetYear(int, unsigned long*, v8::internal::Isolate*)",93957335826944,93957335827416],["v8::internal::Builtin_DatePrototypeSetYear(int, unsigned long*, v8::internal::Isolate*)",93957335827840,93957335827872],["v8::internal::Builtin_Impl_DatePrototypeSetYear(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335828352,93957335829650],["v8::internal::Builtin_Impl_Stats_DatePrototypeToJson(int, unsigned long*, v8::internal::Isolate*)",93957335829696,93957335830168],["void std::__1::__function::__policy::__large_destroy<std::__1::__function::__default_alloc_func<v8::internal::wasm::(anonymous namespace)::TopTierCompiledCallback, void (v8::internal::wasm::CompilationEvent)> >(void*)",93957341594016,93957341594072],["v8::internal::wasm::SyncStreamingDecoder::NotifyCompilationEnded()",93957341595936,93957341596032],["v8::internal::wasm::WasmCode::handler_table_size() const",93957341598416,93957341598428],["v8::internal::wasm::WasmCode::MaybePrint(char const*) const",93957341599728,93957341599795],["v8::internal::wasm::NativeModule::HasDebugInfo() const",93957341600784,93957341600835],["v8::internal::wasm::WasmCode::~WasmCode()",93957341600976,93957341601028],["v8::internal::wasm::WasmCode::DecrementRefCount(v8::internal::Vector<v8::internal::wasm::WasmCode* const>)",93957341601104,93957341601436],["v8::internal::wasm::WasmCodeAllocator::WasmCodeAllocator(v8::internal::wasm::WasmCodeManager*, v8::internal::VirtualMemory, std::__1::shared_ptr<v8::internal::Counters>)",93957341601616,93957341601897],["v8::internal::Builtin_Impl_Stats_DatePrototypeSetUTCMinutes(int, unsigned long*, v8::internal::Isolate*)",93957335813488,93957335813960],["v8::internal::Builtin_Impl_Stats_DatePrototypeToISOString(int, unsigned long*, v8::internal::Isolate*)",93957335819776,93957335820248],["v8::internal::Builtin_Impl_Stats_DatePrototypeToTimeString(int, unsigned long*, v8::internal::Isolate*)",93957335822000,93957335822472],["v8::internal::Builtin_Impl_DatePrototypeToLocaleDateString(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335823456,93957335823862],["v8::internal::Builtin_Impl_DatePrototypeToLocaleString(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335824384,93957335824799],["v8::internal::Builtin_Impl_Stats_DatePrototypeToLocaleTimeString(int, unsigned long*, v8::internal::Isolate*)",93957335824832,93957335825304],["v8::internal::Builtin_DatePrototypeToUTCString(int, unsigned long*, v8::internal::Isolate*)",93957335825728,93957335825760],["v8::internal::Builtin_Impl_DatePrototypeToUTCString(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335826240,93957335826900],["v8::internal::wasm::AsyncStreamingDecoder::DecodeVarInt32::buffer()",93957341593568,93957341593583],["v8::internal::wasm::AsyncStreamingDecoder::SectionBuffer::~SectionBuffer()",93957341594176,93957341594218],["v8::internal::wasm::SyncStreamingDecoder::OnBytesReceived(v8::internal::Vector<unsigned char const>)",93957341595024,93957341595242],["v8::internal::wasm::WasmReturnTypeFromSignature(v8::internal::Signature<v8::internal::wasm::ValueType> const*)",93957341596544,93957341596612],["v8::internal::wasm::WasmCode::handler_table() const",93957341598400,93957341598414],["v8::internal::wasm::WasmCode::ShouldBeLogged(v8::internal::Isolate*)",93957341598432,93957341598546],["v8::internal::wasm::NativeModule::GetWasmSourceMap() const",93957341599712,93957341599725],["v8::internal::wasm::WasmCode::Print(char const*) const",93957341599808,93957341600303],["v8::internal::Builtin_Impl_DatePrototypeSetUTCFullYear(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335808544,93957335809918],["v8::internal::Builtin_Impl_DatePrototypeSetUTCMonth(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335815872,93957335817032],["v8::internal::Builtin_Impl_DatePrototypeToDateString(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335819280,93957335819738],["v8::internal::Builtin_DatePrototypeToString(int, unsigned long*, v8::internal::Isolate*)",93957335820992,93957335821024],["v8::internal::Builtin_DatePrototypeToTimeString(int, unsigned long*, v8::internal::Isolate*)",93957335821968,93957335822000],["v8::internal::Builtin_Impl_DatePrototypeToTimeString(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335822480,93957335822941],["v8::internal::Builtin_Impl_Stats_DatePrototypeToLocaleDateString(int, unsigned long*, v8::internal::Isolate*)",93957335822976,93957335823448],["v8::internal::Builtin_DatePrototypeToLocaleString(int, unsigned long*, v8::internal::Isolate*)",93957335823872,93957335823904],["v8::internal::wasm::AsyncStreamingDecoder::DecodeSectionPayload::Next(v8::internal::wasm::AsyncStreamingDecoder*)",93957341591376,93957341591520],["v8::internal::wasm::AsyncStreamingDecoder::DecodeModuleHeader::buffer()",93957341593664,93957341593679],["std::__1::__shared_ptr_emplace<v8::internal::wasm::AsyncStreamingDecoder::SectionBuffer, std::__1::allocator<v8::internal::wasm::AsyncStreamingDecoder::SectionBuffer> >::~__shared_ptr_emplace()",93957341594112,93957341594150],["v8::internal::wasm::AsyncStreamingDecoder::SectionBuffer::GetCode(v8::internal::wasm::WireBytesRef) const",93957341594288,93957341594320],["v8::internal::wasm::SyncStreamingDecoder::~SyncStreamingDecoder()",93957341594800,93957341595022],["v8::internal::wasm::SyncStreamingDecoder::Finish()",93957341595248,93957341595930],["void std::__1::vector<std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >, std::__1::allocator<std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > > >::__emplace_back_slow_path<unsigned long>(unsigned long&&)",93957341596032,93957341596529],["v8::internal::wasm::DisjointAllocationPool::Merge(v8::base::AddressRegion)",93957341596624,93957341597547],["v8::internal::Builtin_DatePrototypeSetTime(int, unsigned long*, v8::internal::Isolate*)",93957335805600,93957335805632],["v8::internal::Builtin_DatePrototypeSetUTCMilliseconds(int, unsigned long*, v8::internal::Isolate*)",93957335811952,93957335811984],["v8::internal::Builtin_DatePrototypeSetUTCMonth(int, unsigned long*, v8::internal::Isolate*)",93957335815360,93957335815392],["v8::internal::Builtin_Impl_Stats_DatePrototypeSetUTCSeconds(int, unsigned long*, v8::internal::Isolate*)",93957335817072,93957335817544],["v8::internal::Builtin_Impl_Stats_DatePrototypeToDateString(int, unsigned long*, v8::internal::Isolate*)",93957335818800,93957335819272],["v8::internal::Builtin_DatePrototypeToISOString(int, unsigned long*, v8::internal::Isolate*)",93957335819744,93957335819776],["v8::internal::Builtin_Impl_DatePrototypeToISOString(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335820256,93957335820984],["v8::internal::Builtin_Impl_Stats_DatePrototypeToString(int, unsigned long*, v8::internal::Isolate*)",93957335821024,93957335821496],["v8::internal::wasm::AsyncStreamingDecoder::Abort()",93957341588464,93957341588540],["v8::internal::wasm::StreamingDecoder::CreateAsyncStreamingDecoder(std::__1::unique_ptr<v8::internal::wasm::StreamingProcessor, std::__1::default_delete<v8::internal::wasm::StreamingProcessor> >)",93957341593040,93957341593215],["v8::internal::wasm::AsyncStreamingDecoder::DecodeSectionPayload::buffer()",93957341593600,93957341593628],["void std::__1::__function::__policy_invoker<void (v8::internal::wasm::CompilationEvent)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::wasm::(anonymous namespace)::TopTierCompiledCallback, void (v8::internal::wasm::CompilationEvent)> >(std::__1::__function::__policy_storage const*, v8::internal::wasm::CompilationEvent)",93957341593760,93957341593882],["std::__1::__shared_ptr_emplace<v8::internal::wasm::AsyncStreamingDecoder::SectionBuffer, std::__1::allocator<v8::internal::wasm::AsyncStreamingDecoder::SectionBuffer> >::~__shared_ptr_emplace()",93957341594080,93957341594100],["std::__1::__shared_ptr_emplace<v8::internal::wasm::AsyncStreamingDecoder::SectionBuffer, std::__1::allocator<v8::internal::wasm::AsyncStreamingDecoder::SectionBuffer> >::__on_zero_shared()",93957341594160,93957341594175],["v8::internal::wasm::AsyncStreamingDecoder::SectionBuffer::~SectionBuffer()",93957341594224,93957341594279],["v8::internal::wasm::StreamingDecoder::CreateSyncStreamingDecoder(v8::internal::Isolate*, v8::internal::wasm::WasmFeatures const&, v8::internal::Handle<v8::internal::Context>, char const*, std::__1::shared_ptr<v8::internal::wasm::CompilationResultResolver>)",93957341594320,93957341594549],["v8::internal::Builtin_Impl_Stats_DatePrototypeSetMinutes(int, unsigned long*, v8::internal::Isolate*)",93957335799968,93957335800440],["v8::internal::Builtin_Impl_Stats_DatePrototypeSetUTCDate(int, unsigned long*, v8::internal::Isolate*)",93957335806544,93957335807016],["v8::internal::Builtin_Impl_Stats_DatePrototypeSetUTCHours(int, unsigned long*, v8::internal::Isolate*)",93957335809952,93957335810424],["v8::internal::Builtin_Impl_DatePrototypeSetUTCMilliseconds(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335812464,93957335813456],["v8::internal::Builtin_Impl_DatePrototypeSetUTCMinutes(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335813968,93957335815351],["v8::internal::Builtin_Impl_Stats_DatePrototypeSetUTCMonth(int, unsigned long*, v8::internal::Isolate*)",93957335815392,93957335815864],["v8::internal::Builtin_DatePrototypeSetUTCSeconds(int, unsigned long*, v8::internal::Isolate*)",93957335817040,93957335817072],["v8::internal::Builtin_Impl_DatePrototypeSetUTCSeconds(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335817552,93957335818762],["v8::internal::wasm::SimdShuffle::PackShuffle4(unsigned char*)",93957341587344,93957341587384],["v8::internal::wasm::AsyncStreamingDecoder::DecodeModuleHeader::Next(v8::internal::wasm::AsyncStreamingDecoder*)",93957341590144,93957341590273],["v8::internal::wasm::AsyncStreamingDecoder::DecodeFunctionLength::NextWithValue(v8::internal::wasm::AsyncStreamingDecoder*)",93957341592192,93957341592636],["v8::internal::wasm::AsyncStreamingDecoder::~AsyncStreamingDecoder()",93957341593488,93957341593516],["v8::internal::wasm::AsyncStreamingDecoder::DecodeSectionID::buffer()",93957341593584,93957341593599],["v8::internal::wasm::AsyncStreamingDecoder::DecodeFunctionBody::buffer()",93957341593632,93957341593654],["v8::internal::wasm::StreamingDecoder::~StreamingDecoder()",93957341593680,93957341593746],["void* std::__1::__function::__policy::__large_clone<std::__1::__function::__default_alloc_func<v8::internal::wasm::(anonymous namespace)::TopTierCompiledCallback, void (v8::internal::wasm::CompilationEvent)> >(void const*)",93957341593888,93957341594005],["v8::internal::Builtin_Impl_DatePrototypeSetFullYear(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335794688,93957335796152],["v8::internal::Builtin_Impl_DatePrototypeSetMonth(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335802496,93957335803754],["v8::internal::Builtin_Impl_DatePrototypeSetTime(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335806112,93957335806497],["v8::internal::Builtin_DatePrototypeSetUTCFullYear(int, unsigned long*, v8::internal::Isolate*)",93957335808032,93957335808064],["v8::internal::Builtin_DatePrototypeSetUTCHours(int, unsigned long*, v8::internal::Isolate*)",93957335809920,93957335809952],["v8::internal::Builtin_Impl_DatePrototypeSetUTCHours(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335810432,93957335811942],["v8::internal::Builtin_Impl_Stats_DatePrototypeSetUTCMilliseconds(int, unsigned long*, v8::internal::Isolate*)",93957335811984,93957335812456],["v8::internal::Builtin_DatePrototypeSetUTCMinutes(int, unsigned long*, v8::internal::Isolate*)",93957335813456,93957335813488],["std::__1::__hash_const_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int>, void*>*> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int>, std::__1::__unordered_map_hasher<v8::internal::Signature<v8::internal::wasm::ValueType>, std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int>, v8::base::hash<v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::equal_to<v8::internal::Signature<v8::internal::wasm::ValueType> >, true>, std::__1::__unordered_map_equal<v8::internal::Signature<v8::internal::wasm::ValueType>, std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int>, std::__1::equal_to<v8::internal::Signature<v8::internal::wasm::ValueType> >, v8::base::hash<v8::internal::Signature<v8::internal::wasm::ValueType> >, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int> > >::find<v8::internal::Signature<v8::internal::wasm::ValueType> >(v8::internal::Signature<v8::internal::wasm::ValueType> const&) const",93957341585072,93957341585792],["v8::internal::wasm::SimdSwizzle::AllInRangeOrTopBitSet(std::__1::array<unsigned char, 16ul>)",93957341587584,93957341587685],["v8::internal::wasm::AsyncStreamingDecoder::DecodeVarInt32::ReadBytes(v8::internal::wasm::AsyncStreamingDecoder*, v8::internal::Vector<unsigned char const>)",93957341588944,93957341589371],["v8::internal::wasm::AsyncStreamingDecoder::DecodeSectionLength::NextWithValue(v8::internal::wasm::AsyncStreamingDecoder*)",93957341590576,93957341591062],["v8::internal::wasm::AsyncStreamingDecoder::DecodeNumberOfFunctions::NextWithValue(v8::internal::wasm::AsyncStreamingDecoder*)",93957341591520,93957341592179],["v8::internal::wasm::AsyncStreamingDecoder::DecodeFunctionBody::Next(v8::internal::wasm::AsyncStreamingDecoder*)",93957341592640,93957341593035],["v8::internal::wasm::AsyncStreamingDecoder::~AsyncStreamingDecoder()",93957341593216,93957341593473],["v8::internal::wasm::AsyncStreamingDecoder::NotifyCompilationEnded()",93957341593520,93957341593553],["v8::internal::Builtin_DateUTC(int, unsigned long*, v8::internal::Isolate*)",93957335789520,93957335789552],["v8::internal::Builtin_DatePrototypeSetMilliseconds(int, unsigned long*, v8::internal::Isolate*)",93957335798304,93957335798336],["v8::internal::Builtin_DatePrototypeSetMonth(int, unsigned long*, v8::internal::Isolate*)",93957335801984,93957335802016],["v8::internal::Builtin_Impl_Stats_DatePrototypeSetSeconds(int, unsigned long*, v8::internal::Isolate*)",93957335803792,93957335804264],["v8::internal::Builtin_Impl_Stats_DatePrototypeSetTime(int, unsigned long*, v8::internal::Isolate*)",93957335805632,93957335806104],["v8::internal::Builtin_DatePrototypeSetUTCDate(int, unsigned long*, v8::internal::Isolate*)",93957335806512,93957335806544],["v8::internal::Builtin_Impl_DatePrototypeSetUTCDate(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335807024,93957335808028],["v8::internal::Builtin_Impl_Stats_DatePrototypeSetUTCFullYear(int, unsigned long*, v8::internal::Isolate*)",93957335808064,93957335808536],["v8::internal::metrics::Recorder::DelayedEvent<v8::metrics::WasmModuleInstantiated>::Run(std::__1::shared_ptr<v8::internal::metrics::Recorder> const&)",93957341582064,93957341582106],["v8::internal::wasm::SimdShuffle::TryMatchConcat(unsigned char const*, unsigned char*)",93957341586192,93957341586677],["v8::internal::wasm::SimdShuffle::PackBlend4(unsigned char const*)",93957341587488,93957341587552],["v8::internal::wasm::AsyncStreamingDecoder::DecodingState::ReadBytes(v8::internal::wasm::AsyncStreamingDecoder*, v8::internal::Vector<unsigned char const>)",93957341587952,93957341588028],["v8::internal::wasm::AsyncStreamingDecoder::NotifyNativeModuleCreated(std::__1::shared_ptr<v8::internal::wasm::NativeModule> const&)",93957341588544,93957341588939],["v8::internal::wasm::AsyncStreamingDecoder::DecodeVarInt32::Next(v8::internal::wasm::AsyncStreamingDecoder*)",93957341589376,93957341590134],["v8::internal::wasm::AsyncStreamingDecoder::DecodeSectionID::Next(v8::internal::wasm::AsyncStreamingDecoder*)",93957341590288,93957341590574],["v8::internal::wasm::AsyncStreamingDecoder::CreateNewBuffer(unsigned int, unsigned char, unsigned long, v8::internal::Vector<unsigned char const>)",93957341591072,93957341591367],["v8::internal::Builtin_DateConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335784064,93957335784096],["v8::internal::Builtin_Impl_Stats_DatePrototypeSetDate(int, unsigned long*, v8::internal::Isolate*)",93957335792592,93957335793064],["v8::internal::Builtin_Impl_Stats_DatePrototypeSetHours(int, unsigned long*, v8::internal::Isolate*)",93957335796192,93957335796664],["v8::internal::Builtin_Impl_DatePrototypeSetMilliseconds(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335798816,93957335799931],["v8::internal::Builtin_Impl_DatePrototypeSetMinutes(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335800448,93957335801975],["v8::internal::Builtin_Impl_Stats_DatePrototypeSetMonth(int, unsigned long*, v8::internal::Isolate*)",93957335802016,93957335802488],["v8::internal::Builtin_DatePrototypeSetSeconds(int, unsigned long*, v8::internal::Isolate*)",93957335803760,93957335803792],["v8::internal::Builtin_Impl_DatePrototypeSetSeconds(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335804272,93957335805589],["v8::internal::wasm::InstanceBuilder::ProcessImportedTable(v8::internal::Handle<v8::internal::WasmInstanceObject>, int, int, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object>)",93957341575904,93957341576749],["v8::internal::wasm::SignatureMap::Find(v8::internal::Signature<v8::internal::wasm::ValueType> const&) const",93957341582624,93957341582654],["v8::internal::wasm::SimdShuffle::TryMatchIdentity(unsigned char const*)",93957341585968,93957341586074],["v8::internal::wasm::SimdShuffle::TryMatch16x8Shuffle(unsigned char const*, unsigned char*)",93957341586944,93957341587170],["v8::internal::wasm::SimdShuffle::PackBlend8(unsigned char const*)",93957341587392,93957341587487],["v8::internal::wasm::SimdShuffle::Pack16Lanes(unsigned int*, unsigned char const*)",93957341587552,93957341587580],["v8::internal::wasm::AsyncStreamingDecoder::OnBytesReceived(v8::internal::Vector<unsigned char const>)",93957341587696,93957341587942],["v8::internal::wasm::AsyncStreamingDecoder::Finish()",93957341588032,93957341588462],["v8::internal::Builtin_Impl_ConsoleContext(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335778240,93957335779653],["v8::internal::Builtin_Impl_Stats_DateNow(int, unsigned long*, v8::internal::Isolate*)",93957335787920,93957335788614],["v8::internal::Builtin_Impl_DateUTC(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335790032,93957335792560],["v8::internal::Builtin_DatePrototypeSetFullYear(int, unsigned long*, v8::internal::Isolate*)",93957335794176,93957335794208],["v8::internal::Builtin_DatePrototypeSetHours(int, unsigned long*, v8::internal::Isolate*)",93957335796160,93957335796192],["v8::internal::Builtin_Impl_DatePrototypeSetHours(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335796672,93957335798289],["v8::internal::Builtin_Impl_Stats_DatePrototypeSetMilliseconds(int, unsigned long*, v8::internal::Isolate*)",93957335798336,93957335798808],["v8::internal::Builtin_DatePrototypeSetMinutes(int, unsigned long*, v8::internal::Isolate*)",93957335799936,93957335799968],["v8::internal::JSFunction::set_context(v8::internal::HeapObject)",93957341571936,93957341572059],["v8::internal::wasm::InstanceBuilder::CompileImportWrappers(v8::internal::Handle<v8::internal::WasmInstanceObject>)",93957341579504,93957341580209],["v8::internal::wasm::(anonymous namespace)::CompileImportWrapperJob::GetMaxConcurrency(unsigned long) const",93957341582336,93957341582413],["std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int>, std::__1::__unordered_map_hasher<v8::internal::Signature<v8::internal::wasm::ValueType>, std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int>, v8::base::hash<v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::equal_to<v8::internal::Signature<v8::internal::wasm::ValueType> >, true>, std::__1::__unordered_map_equal<v8::internal::Signature<v8::internal::wasm::ValueType>, std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int>, std::__1::equal_to<v8::internal::Signature<v8::internal::wasm::ValueType> >, v8::base::hash<v8::internal::Signature<v8::internal::wasm::ValueType> >, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int> > >::rehash(unsigned long)",93957341583904,93957341584275],["v8::internal::wasm::SimdShuffle::CanonicalizeShuffle(bool, unsigned char*, bool*, bool*)",93957341585792,93957341585961],["v8::internal::wasm::SimdShuffle::TryMatch32x4Rotate(unsigned char const*, unsigned char*, bool)",93957341586080,93957341586178],["v8::internal::wasm::SimdShuffle::TryMatch32x4Shuffle(unsigned char const*, unsigned char*)",93957341586688,93957341586942],["v8::internal::wasm::SimdShuffle::TryMatchBlend(unsigned char const*)",93957341587184,93957341587343],["v8::internal::Builtin_ConsoleTime(int, unsigned long*, v8::internal::Isolate*)",93957335775680,93957335775806],["v8::internal::Builtin_DataViewConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335782304,93957335782336],["v8::internal::Builtin_Impl_DateConstructor(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335784576,93957335787596],["v8::internal::Builtin_Impl_Stats_DateParse(int, unsigned long*, v8::internal::Isolate*)",93957335788656,93957335789128],["v8::internal::Builtin_Impl_Stats_DateUTC(int, unsigned long*, v8::internal::Isolate*)",93957335789552,93957335790024],["v8::internal::Builtin_DatePrototypeSetDate(int, unsigned long*, v8::internal::Isolate*)",93957335792560,93957335792592],["v8::internal::Builtin_Impl_DatePrototypeSetDate(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335793072,93957335794171],["v8::internal::Builtin_Impl_Stats_DatePrototypeSetFullYear(int, unsigned long*, v8::internal::Isolate*)",93957335794208,93957335794680],["v8::internal::wasm::InstanceBuilder::AllocateMemory()",93957341563600,93957341563853],["v8::internal::wasm::InstanceBuilder::WriteGlobalValue(v8::internal::wasm::WasmGlobal const&, long)",93957341573552,93957341573603],["v8::internal::wasm::InstanceBuilder::ProcessImportedWasmGlobalObject(v8::internal::Handle<v8::internal::WasmInstanceObject>, int, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String>, v8::internal::wasm::WasmGlobal const&, v8::internal::Handle<v8::internal::WasmGlobalObject>)",93957341577280,93957341578229],["v8::internal::wasm::LoadElemSegmentImpl(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmInstanceObject>, v8::internal::Handle<v8::internal::WasmTableObject>, unsigned int, unsigned int, unsigned int, unsigned int, unsigned long)",93957341580496,93957341581818],["v8::internal::wasm::(anonymous namespace)::CompileImportWrapperJob::Run(v8::JobDelegate*)",93957341582112,93957341582330],["v8::internal::wasm::SignatureMap::FindOrInsert(v8::internal::Signature<v8::internal::wasm::ValueType> const&)",93957341582416,93957341582623],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int>, std::__1::__unordered_map_hasher<v8::internal::Signature<v8::internal::wasm::ValueType>, std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int>, v8::base::hash<v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::equal_to<v8::internal::Signature<v8::internal::wasm::ValueType> >, true>, std::__1::__unordered_map_equal<v8::internal::Signature<v8::internal::wasm::ValueType>, std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int>, std::__1::equal_to<v8::internal::Signature<v8::internal::wasm::ValueType> >, v8::base::hash<v8::internal::Signature<v8::internal::wasm::ValueType> >, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int> > >::__emplace_unique_key_args<v8::internal::Signature<v8::internal::wasm::ValueType>, std::__1::pair<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int> >(v8::internal::Signature<v8::internal::wasm::ValueType> const&, std::__1::pair<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int>&&)",93957341582656,93957341583890],["std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int>, std::__1::__unordered_map_hasher<v8::internal::Signature<v8::internal::wasm::ValueType>, std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int>, v8::base::hash<v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::equal_to<v8::internal::Signature<v8::internal::wasm::ValueType> >, true>, std::__1::__unordered_map_equal<v8::internal::Signature<v8::internal::wasm::ValueType>, std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int>, std::__1::equal_to<v8::internal::Signature<v8::internal::wasm::ValueType> >, v8::base::hash<v8::internal::Signature<v8::internal::wasm::ValueType> >, true>, std::__1::allocator<std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int> > >::__rehash(unsigned long)",93957341584288,93957341585064],["v8::internal::Builtin_ConsoleAssert(int, unsigned long*, v8::internal::Isolate*)",93957335773120,93957335773230],["v8::internal::Builtin_ConsoleTimeStamp(int, unsigned long*, v8::internal::Isolate*)",93957335777040,93957335777169],["v8::internal::(anonymous namespace)::LogTimerEvent(v8::internal::Isolate*, v8::internal::BuiltinArguments, v8::internal::Logger::StartEnd)",93957335781088,93957335781376],["v8::internal::Builtin_Impl_DataViewConstructor(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335782816,93957335783932],["v8::internal::Builtin_Impl_Stats_DateConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335784096,93957335784568],["v8::internal::Builtin_DateNow(int, unsigned long*, v8::internal::Isolate*)",93957335787600,93957335787919],["v8::internal::Builtin_DateParse(int, unsigned long*, v8::internal::Isolate*)",93957335788624,93957335788656],["v8::internal::Builtin_Impl_DateParse(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335789136,93957335789520],["v8::internal::wasm::CreateStructMap(v8::internal::Isolate*, v8::internal::wasm::WasmModule const*, int, v8::internal::Handle<v8::internal::Map>)",93957341556400,93957341556602],["v8::internal::wasm::InstanceBuilder::InitializeExceptions(v8::internal::Handle<v8::internal::WasmInstanceObject>)",93957341566832,93957341567193],["v8::internal::wasm::InstanceBuilder::LookupImportAsm(unsigned int, v8::internal::Handle<v8::internal::String>)",93957341572496,93957341573025],["v8::internal::wasm::InstanceBuilder::ProcessImportedFunction(v8::internal::Handle<v8::internal::WasmInstanceObject>, int, int, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object>)",93957341574240,93957341575217],["v8::internal::wasm::InstanceBuilder::ProcessImportedMemory(v8::internal::Handle<v8::internal::WasmInstanceObject>, int, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object>)",93957341576752,93957341577269],["v8::internal::wasm::InstanceBuilder::ProcessImportedGlobal(v8::internal::Handle<v8::internal::WasmInstanceObject>, int, int, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object>)",93957341578240,93957341579498],["v8::internal::wasm::InstanceBuilder::RecursivelyEvaluateGlobalInitializer(v8::internal::wasm::WasmInitExpr const&, v8::internal::Handle<v8::internal::WasmInstanceObject>)",93957341580224,93957341580493],["v8::internal::wasm::LoadElemSegment(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmInstanceObject>, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int)",93957341581824,93957341582054],["v8::internal::Builtin_ConsoleGroupEnd(int, unsigned long*, v8::internal::Isolate*)",93957335770560,93957335770670],["v8::internal::Builtin_ConsoleProfileEnd(int, unsigned long*, v8::internal::Isolate*)",93957335774400,93957335774510],["v8::internal::Builtin_ConsoleTimeEnd(int, unsigned long*, v8::internal::Isolate*)",93957335776352,93957335776481],["v8::internal::Builtin_ConsoleContext(int, unsigned long*, v8::internal::Isolate*)",93957335777728,93957335777760],["v8::internal::(anonymous namespace)::ConsoleCall(v8::internal::Isolate*, v8::internal::BuiltinArguments const&, void (v8::debug::ConsoleDelegate::*)(v8::debug::ConsoleCallArguments const&, v8::debug::ConsoleContext const&))",93957335779664,93957335781081],["v8::internal::(anonymous namespace)::InstallContextFunction(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, char const*, v8::internal::Builtins::Name, int, v8::internal::Handle<v8::internal::Object>)",93957335781376,93957335782300],["v8::internal::Builtin_Impl_Stats_DataViewConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335782336,93957335782808],["v8::internal::JSCollator::set_icu_collator(v8::internal::Managed<icu_68::Collator>, v8::internal::WriteBarrierMode)",93957335783936,93957335784060],["void std::__1::__stable_sort_move<v8::internal::wasm::IndirectNameMapEntry::IndexLess&, std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*> >(std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*>, std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*>, v8::internal::wasm::IndirectNameMapEntry::IndexLess&, std::__1::iterator_traits<std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*> >::difference_type, std::__1::iterator_traits<std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*> >::value_type*)",93957341552064,93957341552900],["v8::internal::wasm::InstanceBuilder::Build()",93957341558080,93957341562198],["v8::internal::wasm::InstanceBuilder::InitGlobals(v8::internal::Handle<v8::internal::WasmInstanceObject>)",93957341564864,93957341565830],["v8::internal::wasm::InstanceBuilder::LoadTableSegments(v8::internal::Handle<v8::internal::WasmInstanceObject>)",93957341570480,93957341571394],["v8::internal::wasm::InstanceBuilder::LookupImport(unsigned int, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::String>)",93957341572064,93957341572490],["v8::internal::wasm::InstanceBuilder::WriteGlobalValue(v8::internal::wasm::WasmGlobal const&, double)",93957341573040,93957341573545],["v8::internal::wasm::InstanceBuilder::WriteGlobalValue(v8::internal::wasm::WasmGlobal const&, v8::internal::Handle<v8::internal::WasmGlobalObject>)",93957341573616,93957341574230],["v8::internal::wasm::InstanceBuilder::InitializeImportedIndirectFunctionTable(v8::internal::Handle<v8::internal::WasmInstanceObject>, int, int, v8::internal::Handle<v8::internal::WasmTableObject>)",93957341575232,93957341575904],["v8::internal::Builtin_ConsoleTable(int, unsigned long*, v8::internal::Isolate*)",93957335768000,93957335768110],["v8::internal::Builtin_ConsoleCount(int, unsigned long*, v8::internal::Isolate*)",93957335771840,93957335771950],["v8::internal::Builtin_ConsoleProfile(int, unsigned long*, v8::internal::Isolate*)",93957335773760,93957335773870],["v8::internal::Builtin_ConsoleTimeLog(int, unsigned long*, v8::internal::Isolate*)",93957335775040,93957335775150],["v8::internal::Builtin_Impl_Stats_ConsoleTime(int, unsigned long*, v8::internal::Isolate*)",93957335775808,93957335776341],["v8::internal::Builtin_Impl_Stats_ConsoleTimeEnd(int, unsigned long*, v8::internal::Isolate*)",93957335776496,93957335777032],["v8::internal::Builtin_Impl_Stats_ConsoleTimeStamp(int, unsigned long*, v8::internal::Isolate*)",93957335777184,93957335777720],["v8::internal::Builtin_Impl_Stats_ConsoleContext(int, unsigned long*, v8::internal::Isolate*)",93957335777760,93957335778232],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<unsigned int, v8::internal::wasm::WireBytesRef>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<unsigned int, v8::internal::wasm::WireBytesRef>, std::__1::__unordered_map_hasher<unsigned int, std::__1::__hash_value_type<unsigned int, v8::internal::wasm::WireBytesRef>, std::__1::hash<unsigned int>, std::__1::equal_to<unsigned int>, true>, std::__1::__unordered_map_equal<unsigned int, std::__1::__hash_value_type<unsigned int, v8::internal::wasm::WireBytesRef>, std::__1::equal_to<unsigned int>, std::__1::hash<unsigned int>, true>, std::__1::allocator<std::__1::__hash_value_type<unsigned int, v8::internal::wasm::WireBytesRef> > >::__emplace_unique_key_args<unsigned int, std::__1::pair<unsigned int, v8::internal::wasm::WireBytesRef> >(unsigned int const&, std::__1::pair<unsigned int, v8::internal::wasm::WireBytesRef>&&)",93957341546864,93957341547678],["void std::__1::__buffered_inplace_merge<v8::internal::wasm::IndirectNameMapEntry::IndexLess&, std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*> >(std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*>, std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*>, std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*>, v8::internal::wasm::IndirectNameMapEntry::IndexLess&, std::__1::iterator_traits<std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*> >::difference_type, std::__1::iterator_traits<std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*> >::difference_type, std::__1::iterator_traits<std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*> >::value_type*)",93957341554784,93957341555163],["v8::internal::wasm::AllocateSubRtt(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmInstanceObject>, unsigned int, v8::internal::Handle<v8::internal::Map>)",93957341556784,93957341557574],["v8::internal::wasm::InstanceBuilder::SanitizeImports()",93957341562736,93957341563338],["v8::internal::wasm::InstanceBuilder::ProcessImports(v8::internal::Handle<v8::internal::WasmInstanceObject>)",93957341563856,93957341564853],["v8::internal::wasm::InstanceBuilder::InitializeIndirectFunctionTables(v8::internal::Handle<v8::internal::WasmInstanceObject>)",93957341565840,93957341566820],["v8::internal::wasm::InstanceBuilder::ProcessExports(v8::internal::Handle<v8::internal::WasmInstanceObject>)",93957341567200,93957341570468],["v8::internal::wasm::InstanceBuilder::LoadDataSegments(v8::internal::Handle<v8::internal::WasmInstanceObject>)",93957341571408,93957341571925],["v8::internal::Builtin_ConsoleLog(int, unsigned long*, v8::internal::Isolate*)",93957335765440,93957335765550],["v8::internal::Builtin_ConsoleGroup(int, unsigned long*, v8::internal::Isolate*)",93957335769280,93957335769390],["v8::internal::Builtin_ConsoleClear(int, unsigned long*, v8::internal::Isolate*)",93957335771200,93957335771310],["v8::internal::Builtin_ConsoleCountReset(int, unsigned long*, v8::internal::Isolate*)",93957335772480,93957335772590],["v8::internal::Builtin_Impl_Stats_ConsoleAssert(int, unsigned long*, v8::internal::Isolate*)",93957335773232,93957335773755],["v8::internal::Builtin_Impl_Stats_ConsoleProfile(int, unsigned long*, v8::internal::Isolate*)",93957335773872,93957335774395],["v8::internal::Builtin_Impl_Stats_ConsoleProfileEnd(int, unsigned long*, v8::internal::Isolate*)",93957335774512,93957335775035],["v8::internal::Builtin_Impl_Stats_ConsoleTimeLog(int, unsigned long*, v8::internal::Isolate*)",93957335775152,93957335775675],["void std::__1::vector<v8::internal::wasm::WasmElemSegment, std::__1::allocator<v8::internal::wasm::WasmElemSegment> >::__emplace_back_slow_path<bool>(bool&&)",93957341543008,93957341543506],["void std::__1::__inplace_merge<v8::internal::wasm::NameAssoc::IndexLess&, std::__1::__wrap_iter<v8::internal::wasm::NameAssoc*> >(std::__1::__wrap_iter<v8::internal::wasm::NameAssoc*>, std::__1::__wrap_iter<v8::internal::wasm::NameAssoc*>, std::__1::__wrap_iter<v8::internal::wasm::NameAssoc*>, v8::internal::wasm::NameAssoc::IndexLess&, std::__1::iterator_traits<std::__1::__wrap_iter<v8::internal::wasm::NameAssoc*> >::difference_type, std::__1::iterator_traits<std::__1::__wrap_iter<v8::internal::wasm::NameAssoc*> >::difference_type, std::__1::iterator_traits<std::__1::__wrap_iter<v8::internal::wasm::NameAssoc*> >::value_type*, long)",93957341549216,93957341550342],["void std::__1::__inplace_merge<v8::internal::wasm::IndirectNameMapEntry::IndexLess&, std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*> >(std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*>, std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*>, std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*>, v8::internal::wasm::IndirectNameMapEntry::IndexLess&, std::__1::iterator_traits<std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*> >::difference_type, std::__1::iterator_traits<std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*> >::difference_type, std::__1::iterator_traits<std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*> >::value_type*, long)",93957341553472,93957341554256],["void std::__1::__half_inplace_merge<std::__1::__invert<v8::internal::wasm::IndirectNameMapEntry::IndexLess&>, std::__1::reverse_iterator<v8::internal::wasm::IndirectNameMapEntry*>, std::__1::reverse_iterator<std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*> >, std::__1::reverse_iterator<std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*> > >(std::__1::reverse_iterator<v8::internal::wasm::IndirectNameMapEntry*>, std::__1::reverse_iterator<v8::internal::wasm::IndirectNameMapEntry*>, std::__1::reverse_iterator<std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*> >, std::__1::reverse_iterator<std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*> >, std::__1::reverse_iterator<std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*> >, std::__1::__invert<v8::internal::wasm::IndirectNameMapEntry::IndexLess&>)",93957341555584,93957341555986],["v8::internal::wasm::CreateArrayMap(v8::internal::Isolate*, v8::internal::wasm::WasmModule const*, int, v8::internal::Handle<v8::internal::Map>)",93957341556608,93957341556781],["v8::internal::wasm::InstantiateToInstanceObject(v8::internal::Isolate*, v8::internal::wasm::ErrorThrower*, v8::internal::Handle<v8::internal::WasmModuleObject>, v8::internal::MaybeHandle<v8::internal::JSReceiver>, v8::internal::MaybeHandle<v8::internal::JSArrayBuffer>)",93957341557584,93957341558065],["v8::internal::wasm::InstanceBuilder::ExecuteStartFunction()",93957341562208,93957341562727],["v8::internal::wasm::InstanceBuilder::FindImportedMemory()",93957341563344,93957341563590],["v8::internal::Builtin_Impl_Stats_SetPrototypeClear(int, unsigned long*, v8::internal::Isolate*)",93957335762752,93957335763224],["v8::internal::Builtin_ConsoleDir(int, unsigned long*, v8::internal::Isolate*)",93957335766720,93957335766830],["v8::internal::Builtin_ConsoleTrace(int, unsigned long*, v8::internal::Isolate*)",93957335768640,93957335768750],["v8::internal::Builtin_ConsoleGroupCollapsed(int, unsigned long*, v8::internal::Isolate*)",93957335769920,93957335770030],["v8::internal::Builtin_Impl_Stats_ConsoleGroupEnd(int, unsigned long*, v8::internal::Isolate*)",93957335770672,93957335771195],["v8::internal::Builtin_Impl_Stats_ConsoleClear(int, unsigned long*, v8::internal::Isolate*)",93957335771312,93957335771835],["v8::internal::Builtin_Impl_Stats_ConsoleCount(int, unsigned long*, v8::internal::Isolate*)",93957335771952,93957335772475],["v8::internal::Builtin_Impl_Stats_ConsoleCountReset(int, unsigned long*, v8::internal::Isolate*)",93957335772592,93957335773115],["void std::__1::__stable_sort_move<v8::internal::wasm::ModuleDecoderImpl::DecodeExportSection()::{lambda(v8::internal::wasm::WasmExport const&, v8::internal::wasm::WasmExport const&)#1}&, std::__1::__wrap_iter<v8::internal::wasm::WasmExport*> >(std::__1::__wrap_iter<v8::internal::wasm::WasmExport*>, std::__1::__wrap_iter<v8::internal::wasm::WasmExport*>, v8::internal::wasm::ModuleDecoderImpl::DecodeExportSection()::{lambda(v8::internal::wasm::WasmExport const&, v8::internal::wasm::WasmExport const&)#1}&, std::__1::iterator_traits<std::__1::__wrap_iter<v8::internal::wasm::WasmExport*> >::difference_type, std::__1::iterator_traits::value_type*)",93957341538016,93957341538531],["void std::__1::vector<v8::internal::wasm::WasmDataSegment, std::__1::allocator<v8::internal::wasm::WasmDataSegment> >::__emplace_back_slow_path<>()",93957341544784,93957341545184],["void std::__1::__stable_sort<v8::internal::wasm::NameAssoc::IndexLess&, std::__1::__wrap_iter<v8::internal::wasm::NameAssoc*> >(std::__1::__wrap_iter<v8::internal::wasm::NameAssoc*>, std::__1::__wrap_iter<v8::internal::wasm::NameAssoc*>, v8::internal::wasm::NameAssoc::IndexLess&, std::__1::iterator_traits<std::__1::__wrap_iter<v8::internal::wasm::NameAssoc*> >::difference_type, std::__1::iterator_traits<std::__1::__wrap_iter<v8::internal::wasm::NameAssoc*> >::value_type*, long)",93957341547984,93957341548584],["void std::__1::vector<v8::internal::wasm::IndirectNameMapEntry, std::__1::allocator<v8::internal::wasm::IndirectNameMapEntry> >::__emplace_back_slow_path<int, std::__1::vector<v8::internal::wasm::NameAssoc, std::__1::allocator<v8::internal::wasm::NameAssoc> > >(int&&, std::__1::vector<v8::internal::wasm::NameAssoc, std::__1::allocator<v8::internal::wasm::NameAssoc> >&&)",93957341550864,93957341551292],["void std::__1::__merge_move_assign<v8::internal::wasm::IndirectNameMapEntry::IndexLess&, v8::internal::wasm::IndirectNameMapEntry*, v8::internal::wasm::IndirectNameMapEntry*, std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*> >(v8::internal::wasm::IndirectNameMapEntry*, v8::internal::wasm::IndirectNameMapEntry*, v8::internal::wasm::IndirectNameMapEntry*, v8::internal::wasm::IndirectNameMapEntry*, std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*>, v8::internal::wasm::IndirectNameMapEntry::IndexLess&)",93957341552912,93957341553468],["void std::__1::__insertion_sort_move<v8::internal::wasm::IndirectNameMapEntry::IndexLess&, std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*> >(std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*>, std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*>, std::__1::iterator_traits<std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*> >::value_type*, v8::internal::wasm::IndirectNameMapEntry::IndexLess&)",93957341554256,93957341554771],["void std::__1::__half_inplace_merge<v8::internal::wasm::IndirectNameMapEntry::IndexLess&, v8::internal::wasm::IndirectNameMapEntry*, std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*>, std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*> >(v8::internal::wasm::IndirectNameMapEntry*, v8::internal::wasm::IndirectNameMapEntry*, std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*>, std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*>, std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*>, v8::internal::wasm::IndirectNameMapEntry::IndexLess&)",93957341555168,93957341555578],["std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*> std::__1::__rotate_forward<std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*> >(std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*>, std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*>, std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*>)",93957341556000,93957341556398],["v8::internal::Builtin_Impl_CallSitePrototypeIsToplevel(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335760304,93957335760859],["v8::internal::Builtin_ConsoleError(int, unsigned long*, v8::internal::Isolate*)",93957335764160,93957335764270],["v8::internal::Builtin_ConsoleWarn(int, unsigned long*, v8::internal::Isolate*)",93957335766080,93957335766190],["v8::internal::Builtin_ConsoleDirXml(int, unsigned long*, v8::internal::Isolate*)",93957335767360,93957335767470],["v8::internal::Builtin_Impl_Stats_ConsoleTable(int, unsigned long*, v8::internal::Isolate*)",93957335768112,93957335768635],["v8::internal::Builtin_Impl_Stats_ConsoleTrace(int, unsigned long*, v8::internal::Isolate*)",93957335768752,93957335769275],["v8::internal::Builtin_Impl_Stats_ConsoleGroup(int, unsigned long*, v8::internal::Isolate*)",93957335769392,93957335769915],["v8::internal::Builtin_Impl_Stats_ConsoleGroupCollapsed(int, unsigned long*, v8::internal::Isolate*)",93957335770032,93957335770555],["void std::__1::vector<v8::internal::wasm::WasmInitExpr, std::__1::allocator<v8::internal::wasm::WasmInitExpr> >::__push_back_slow_path<v8::internal::wasm::WasmInitExpr>(v8::internal::wasm::WasmInitExpr&&)",93957341534784,93957341535148],["std::__1::__wrap_iter<v8::internal::wasm::WasmExport*> std::__1::__rotate<std::__1::__wrap_iter<v8::internal::wasm::WasmExport*> >(std::__1::__wrap_iter<v8::internal::wasm::WasmExport*>, std::__1::__wrap_iter<v8::internal::wasm::WasmExport*>, std::__1::__wrap_iter<v8::internal::wasm::WasmExport*>, std::__1::random_access_iterator_tag)",93957341540560,93957341540964],["v8::internal::wasm::ModuleDecoderImpl::consume_data_segment_header(bool*, unsigned int*, v8::internal::wasm::WasmInitExpr*)",93957341543824,93957341544267],["v8::internal::wasm::ModuleDecoderImpl::VerifyFunctionBody(v8::internal::AccountingAllocator*, unsigned int, v8::internal::wasm::ModuleWireBytes const&, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmFunction*)",93957341545456,93957341546460],["void std::__1::vector<v8::internal::wasm::NameAssoc, std::__1::allocator<v8::internal::wasm::NameAssoc> >::__emplace_back_slow_path<int, v8::internal::wasm::WireBytesRef&>(int&&, v8::internal::wasm::WireBytesRef&)",93957341547680,93957341547971],["void std::__1::__stable_sort_move<v8::internal::wasm::NameAssoc::IndexLess&, std::__1::__wrap_iter<v8::internal::wasm::NameAssoc*> >(std::__1::__wrap_iter<v8::internal::wasm::NameAssoc*>, std::__1::__wrap_iter<v8::internal::wasm::NameAssoc*>, v8::internal::wasm::NameAssoc::IndexLess&, std::__1::iterator_traits<std::__1::__wrap_iter<v8::internal::wasm::NameAssoc*> >::difference_type, std::__1::iterator_traits<std::__1::__wrap_iter<v8::internal::wasm::NameAssoc*> >::value_type*)",93957341548592,93957341549209],["std::__1::__wrap_iter<v8::internal::wasm::NameAssoc*> std::__1::__rotate<std::__1::__wrap_iter<v8::internal::wasm::NameAssoc*> >(std::__1::__wrap_iter<v8::internal::wasm::NameAssoc*>, std::__1::__wrap_iter<v8::internal::wasm::NameAssoc*>, std::__1::__wrap_iter<v8::internal::wasm::NameAssoc*>, std::__1::random_access_iterator_tag)",93957341550352,93957341550851],["void std::__1::__stable_sort<v8::internal::wasm::IndirectNameMapEntry::IndexLess&, std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*> >(std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*>, std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*>, v8::internal::wasm::IndirectNameMapEntry::IndexLess&, std::__1::iterator_traits<std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*> >::difference_type, std::__1::iterator_traits<std::__1::__wrap_iter<v8::internal::wasm::IndirectNameMapEntry*> >::value_type*, long)",93957341551296,93957341552049],["v8::internal::Builtin_CallSitePrototypeIsNative(int, unsigned long*, v8::internal::Isolate*)",93957335757648,93957335757680],["v8::internal::Builtin_MapPrototypeClear(int, unsigned long*, v8::internal::Isolate*)",93957335761920,93957335761952],["v8::internal::Builtin_ConsoleDebug(int, unsigned long*, v8::internal::Isolate*)",93957335763520,93957335763630],["v8::internal::Builtin_ConsoleInfo(int, unsigned long*, v8::internal::Isolate*)",93957335764800,93957335764910],["v8::internal::Builtin_Impl_Stats_ConsoleLog(int, unsigned long*, v8::internal::Isolate*)",93957335765552,93957335766075],["v8::internal::Builtin_Impl_Stats_ConsoleWarn(int, unsigned long*, v8::internal::Isolate*)",93957335766192,93957335766715],["v8::internal::Builtin_Impl_Stats_ConsoleDir(int, unsigned long*, v8::internal::Isolate*)",93957335766832,93957335767355],["v8::internal::Builtin_Impl_Stats_ConsoleDirXml(int, unsigned long*, v8::internal::Isolate*)",93957335767472,93957335767995],["v8::internal::wasm::ModuleDecoderImpl::consume_reference_type()",93957341528608,93957341528860],["void std::__1::vector<v8::internal::wasm::WasmInitExpr, std::__1::allocator<v8::internal::wasm::WasmInitExpr> >::__emplace_back_slow_path<double&>(double&)",93957341536208,93957341536556],["void std::__1::__insertion_sort_move<v8::internal::wasm::ModuleDecoderImpl::DecodeExportSection()::{lambda(v8::internal::wasm::WasmExport const&, v8::internal::wasm::WasmExport const&)#1}&, std::__1::__wrap_iter<v8::internal::wasm::WasmExport*> >(std::__1::__wrap_iter<v8::internal::wasm::WasmExport*>, std::__1::__wrap_iter<v8::internal::wasm::WasmExport*>, std::__1::iterator_traits<std::__1::__wrap_iter<v8::internal::wasm::WasmExport*> >::value_type*, v8::internal::wasm::ModuleDecoderImpl::DecodeExportSection()::{lambda(v8::internal::wasm::WasmExport const&, v8::internal::wasm::WasmExport const&)#1}&)",93957341539648,93957341540001],["v8::internal::wasm::ModuleDecoderImpl::consume_element_expr()",93957341541712,93957341542377],["std::__1::vector<v8::internal::wasm::WasmDataSegment, std::__1::allocator<v8::internal::wasm::WasmDataSegment> >::reserve(unsigned long)",93957341543520,93957341543812],["void std::__1::vector<v8::internal::wasm::WasmDataSegment, std::__1::allocator<v8::internal::wasm::WasmDataSegment> >::__emplace_back_slow_path<v8::internal::wasm::WasmInitExpr>(v8::internal::wasm::WasmInitExpr&&)",93957341544272,93957341544781],["void std::__1::vector<v8::internal::wasm::WasmCompilationHint, std::__1::allocator<v8::internal::wasm::WasmCompilationHint> >::__push_back_slow_path<v8::internal::wasm::WasmCompilationHint>(v8::internal::wasm::WasmCompilationHint&&)",93957341545184,93957341545443],["void std::__1::vector<v8::internal::wasm::AsmJsOffsetFunctionEntries, std::__1::allocator<v8::internal::wasm::AsmJsOffsetFunctionEntries> >::__emplace_back_slow_path<>()",93957341546464,93957341546854],["v8::internal::Builtin_Impl_Stats_CallSitePrototypeIsAsync(int, unsigned long*, v8::internal::Isolate*)",93957335754496,93957335754968],["v8::internal::Builtin_Impl_Stats_CallSitePrototypeIsPromiseAll(int, unsigned long*, v8::internal::Isolate*)",93957335758752,93957335759224],["v8::internal::Builtin_Impl_Stats_CallSitePrototypeToString(int, unsigned long*, v8::internal::Isolate*)",93957335760896,93957335761368],["v8::internal::Builtin_Impl_MapPrototypeClear(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335762432,93957335762705],["v8::internal::Builtin_Impl_SetPrototypeClear(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335763232,93957335763505],["v8::internal::Builtin_Impl_Stats_ConsoleDebug(int, unsigned long*, v8::internal::Isolate*)",93957335763632,93957335764155],["v8::internal::Builtin_Impl_Stats_ConsoleError(int, unsigned long*, v8::internal::Isolate*)",93957335764272,93957335764795],["v8::internal::Builtin_Impl_Stats_ConsoleInfo(int, unsigned long*, v8::internal::Isolate*)",93957335764912,93957335765435],["v8::internal::wasm::ModuleDecoderImpl::DecodeExternalDebugInfoSection()",93957341524464,93957341524702],["void std::__1::vector<v8::internal::wasm::WasmTable, std::__1::allocator<v8::internal::wasm::WasmTable> >::__emplace_back_slow_path<>()",93957341530032,93957341530420],["void std::__1::vector<v8::internal::wasm::WasmInitExpr, std::__1::allocator<v8::internal::wasm::WasmInitExpr> >::__emplace_back_slow_path<float&>(float&)",93957341535504,93957341535852],["std::__1::vector<v8::internal::wasm::WasmGlobal, std::__1::allocator<v8::internal::wasm::WasmGlobal> >::reserve(unsigned long)",93957341536912,93957341537208],["void std::__1::__inplace_merge<v8::internal::wasm::ModuleDecoderImpl::DecodeExportSection()::{lambda(v8::internal::wasm::WasmExport const&, v8::internal::wasm::WasmExport const&)#1}&, std::__1::__wrap_iter<v8::internal::wasm::WasmExport*> >(std::__1::__wrap_iter<v8::internal::wasm::WasmExport*>, std::__1::__wrap_iter<v8::internal::wasm::WasmExport*>, std::__1::__wrap_iter<v8::internal::wasm::WasmExport*>, v8::internal::wasm::ModuleDecoderImpl::DecodeExportSection()::{lambda(v8::internal::wasm::WasmExport const&, v8::internal::wasm::WasmExport const&)#1}&, std::__1::iterator_traits<std::__1::__wrap_iter<v8::internal::wasm::WasmExport*> >::difference_type, std::__1::iterator_traits<std::__1::__wrap_iter<v8::internal::wasm::WasmExport*> >, std::__1::iterator_traits::value_type*, long)",93957341538544,93957341539634],["void std::__1::__buffered_inplace_merge<v8::internal::wasm::ModuleDecoderImpl::DecodeExportSection()::{lambda(v8::internal::wasm::WasmExport const&, v8::internal::wasm::WasmExport const&)#1}&, std::__1::__wrap_iter<v8::internal::wasm::WasmExport*> >(std::__1::__wrap_iter<v8::internal::wasm::WasmExport*>, std::__1::__wrap_iter<v8::internal::wasm::WasmExport*>, std::__1::__wrap_iter<v8::internal::wasm::WasmExport*>, v8::internal::wasm::ModuleDecoderImpl::DecodeExportSection()::{lambda(v8::internal::wasm::WasmExport const&, v8::internal::wasm::WasmExport const&)#1}&, std::__1::iterator_traits<std::__1::__wrap_iter<v8::internal::wasm::WasmExport*> >::difference_type, std::__1::iterator_traits<std::__1::__wrap_iter<v8::internal::wasm::WasmExport*> >, std::__1::iterator_traits::value_type*)",93957341540016,93957341540553],["v8::internal::wasm::ModuleDecoderImpl::consume_element_segment_header(v8::internal::wasm::WasmElemSegment::Status*, bool*, v8::internal::wasm::ValueType*, unsigned int*, v8::internal::wasm::WasmInitExpr*)",93957341540976,93957341541704],["void std::__1::vector<v8::internal::wasm::WasmElemSegment, std::__1::allocator<v8::internal::wasm::WasmElemSegment> >::__emplace_back_slow_path<unsigned int&, v8::internal::wasm::WasmInitExpr>(unsigned int&, v8::internal::wasm::WasmInitExpr&&)",93957341542384,93957341543000],["v8::internal::Builtin_Impl_CallSitePrototypeGetScriptNameOrSourceURL(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335751712,93957335752257],["v8::internal::Builtin_Impl_CallSitePrototypeIsConstructor(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335756032,93957335756566],["v8::internal::Builtin_Impl_CallSitePrototypeIsNative(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335758160,93957335758715],["v8::internal::Builtin_CallSitePrototypeIsToplevel(int, unsigned long*, v8::internal::Isolate*)",93957335759792,93957335759824],["v8::internal::Builtin_CallSitePrototypeToString(int, unsigned long*, v8::internal::Isolate*)",93957335760864,93957335760896],["v8::internal::Builtin_Impl_CallSitePrototypeToString(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335761376,93957335761912],["v8::internal::Builtin_Impl_Stats_MapPrototypeClear(int, unsigned long*, v8::internal::Isolate*)",93957335761952,93957335762424],["v8::internal::Builtin_SetPrototypeClear(int, unsigned long*, v8::internal::Isolate*)",93957335762720,93957335762752],["v8::internal::wasm::ModuleDecoderImpl::DecodeGlobalSection()",93957341516384,93957341517368],["v8::internal::wasm::ModuleDecoderImpl::consume_sig(v8::internal::Zone*)",93957341526032,93957341527384],["v8::internal::wasm::ModuleDecoderImpl::validate_memory_flags(bool*, bool*)",93957341529504,93957341529788],["v8::internal::wasm::ModuleDecoderImpl::consume_init_expr(v8::internal::wasm::WasmModule*, v8::internal::wasm::ValueType, unsigned long)",93957341530880,93957341534470],["void std::__1::vector<v8::internal::wasm::WasmInitExpr, std::__1::allocator<v8::internal::wasm::WasmInitExpr> >::__emplace_back_slow_path<int&>(int&)",93957341535152,93957341535500],["void std::__1::vector<v8::internal::wasm::WasmInitExpr, std::__1::allocator<v8::internal::wasm::WasmInitExpr> >::__emplace_back_slow_path<long&>(long&)",93957341535856,93957341536204],["void std::__1::vector<v8::internal::wasm::WasmInitExpr, std::__1::allocator<v8::internal::wasm::WasmInitExpr> >::__emplace_back_slow_path<unsigned char (&) [16]>(unsigned char (&) [16])",93957341536560,93957341536908],["void std::__1::__stable_sort<v8::internal::wasm::ModuleDecoderImpl::DecodeExportSection()::{lambda(v8::internal::wasm::WasmExport const&, v8::internal::wasm::WasmExport const&)#1}&, std::__1::__wrap_iter<v8::internal::wasm::WasmExport*> >(std::__1::__wrap_iter<v8::internal::wasm::WasmExport*>, std::__1::__wrap_iter<v8::internal::wasm::WasmExport*>, v8::internal::wasm::ModuleDecoderImpl::DecodeExportSection()::{lambda(v8::internal::wasm::WasmExport const&, v8::internal::wasm::WasmExport const&)#1}&, std::__1::iterator_traits<std::__1::__wrap_iter<v8::internal::wasm::WasmExport*> >::difference_type, std::__1::iterator_traits::value_type*, long)",93957341537216,93957341538008],["v8::internal::Builtin_CallSitePrototypeGetPosition(int, unsigned long*, v8::internal::Isolate*)",93957335749040,93957335749072],["v8::internal::Builtin_CallSitePrototypeGetTypeName(int, unsigned long*, v8::internal::Isolate*)",93957335753424,93957335753456],["v8::internal::Builtin_CallSitePrototypeIsConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335755520,93957335755552],["v8::internal::Builtin_Impl_Stats_CallSitePrototypeIsEval(int, unsigned long*, v8::internal::Isolate*)",93957335756608,93957335757080],["v8::internal::Builtin_Impl_Stats_CallSitePrototypeIsNative(int, unsigned long*, v8::internal::Isolate*)",93957335757680,93957335758152],["v8::internal::Builtin_CallSitePrototypeIsPromiseAll(int, unsigned long*, v8::internal::Isolate*)",93957335758720,93957335758752],["v8::internal::Builtin_Impl_CallSitePrototypeIsPromiseAll(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335759232,93957335759787],["v8::internal::Builtin_Impl_Stats_CallSitePrototypeIsToplevel(int, unsigned long*, v8::internal::Isolate*)",93957335759824,93957335760296],["v8::internal::wasm::WasmModule::~WasmModule()",93957341509440,93957341510215],["v8::internal::wasm::ModuleDecoderImpl::DecodeElementSection()",93957341520928,93957341522645],["v8::internal::wasm::ModuleDecoderImpl::DecodeDataCountSection()",93957341525488,93957341525637],["v8::internal::wasm::ModuleDecoderImpl::consume_array(v8::internal::Zone*)",93957341528192,93957341528407],["v8::internal::wasm::ModuleDecoderImpl::consume_resizable_limits(char const*, char const*, unsigned int, unsigned int*, bool*, unsigned int, unsigned int*, unsigned char)",93957341528864,93957341529504],["v8::internal::wasm::ModuleDecoderImpl::consume_exception_sig_index(v8::internal::wasm::WasmModule*, v8::internal::Signature<v8::internal::wasm::ValueType> const**)",93957341529792,93957341530020],["void std::__1::vector<v8::internal::wasm::WasmGlobal, std::__1::allocator<v8::internal::wasm::WasmGlobal> >::__push_back_slow_path<v8::internal::wasm::WasmGlobal>(v8::internal::wasm::WasmGlobal&&)",93957341530432,93957341530880],["v8::internal::wasm::ModuleDecoderImpl::TypeOf(v8::internal::wasm::WasmInitExpr const&)",93957341534480,93957341534770],["v8::internal::Builtin_Impl_Stats_CallSitePrototypeGetFunctionName(int, unsigned long*, v8::internal::Isolate*)",93957335745760,93957335746232],["v8::internal::Builtin_Impl_Stats_CallSitePrototypeGetPromiseIndex(int, unsigned long*, v8::internal::Isolate*)",93957335750112,93957335750584],["v8::internal::Builtin_Impl_Stats_CallSitePrototypeGetThis(int, unsigned long*, v8::internal::Isolate*)",93957335752304,93957335752776],["v8::internal::Builtin_Impl_CallSitePrototypeGetTypeName(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335753936,93957335754461],["v8::internal::Builtin_Impl_CallSitePrototypeIsAsync(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335754976,93957335755510],["v8::internal::Builtin_Impl_Stats_CallSitePrototypeIsConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335755552,93957335756024],["v8::internal::Builtin_CallSitePrototypeIsEval(int, unsigned long*, v8::internal::Isolate*)",93957335756576,93957335756608],["v8::internal::Builtin_Impl_CallSitePrototypeIsEval(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335757088,93957335757643],["v8::internal::wasm::DecodeFunctionNames(unsigned char const*, unsigned char const*, std::__1::unordered_map<unsigned int, v8::internal::wasm::WireBytesRef, std::__1::hash<unsigned int>, std::__1::equal_to<unsigned int>, std::__1::allocator<std::__1::pair<unsigned int const, v8::internal::wasm::WireBytesRef> > >*, v8::internal::Vector<v8::internal::wasm::WasmExport const>)",93957341503440,93957341504708],["v8::internal::wasm::ModuleDecoderImpl::DecodeImportSection()",93957341512064,93957341514396],["v8::internal::wasm::ModuleDecoderImpl::DecodeStartSection()",93957341519856,93957341520112],["v8::internal::wasm::ModuleDecoderImpl::DecodeNameSection()",93957341523648,93957341524221],["v8::internal::wasm::ModuleDecoderImpl::DecodeCompilationHintsSection()",93957341524704,93957341525481],["v8::internal::wasm::ModuleDecoderImpl::DecodeExceptionSection()",93957341525648,93957341526019],["v8::internal::wasm::ModuleDecoderImpl::consume_struct(v8::internal::Zone*)",93957341527392,93957341528178],["v8::internal::wasm::ModuleDecoderImpl::consume_storage_type()",93957341528416,93957341528606],["v8::internal::Builtin_Impl_CallSitePrototypeGetEvalOrigin(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335742992,93957335743517],["v8::internal::Builtin_Impl_CallSitePrototypeGetLineNumber(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335747280,93957335747985],["v8::internal::Builtin_Impl_CallSitePrototypeGetPosition(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335749552,93957335750080],["v8::internal::Builtin_CallSitePrototypeGetScriptNameOrSourceURL(int, unsigned long*, v8::internal::Isolate*)",93957335751200,93957335751232],["v8::internal::Builtin_CallSitePrototypeGetThis(int, unsigned long*, v8::internal::Isolate*)",93957335752272,93957335752304],["v8::internal::Builtin_Impl_CallSitePrototypeGetThis(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335752784,93957335753409],["v8::internal::Builtin_Impl_Stats_CallSitePrototypeGetTypeName(int, unsigned long*, v8::internal::Isolate*)",93957335753456,93957335753928],["v8::internal::Builtin_CallSitePrototypeIsAsync(int, unsigned long*, v8::internal::Isolate*)",93957335754464,93957335754496],["v8::internal::wasm::ModuleDecoder::FinishDecoding(bool)",93957341498416,93957341498488],["v8::internal::wasm::DecodeIndirectNameMap(v8::internal::Vector<unsigned char const>, unsigned char)",93957341506736,93957341508741],["v8::internal::wasm::ModuleDecoderImpl::CheckSectionOrder(v8::internal::wasm::SectionCode, v8::internal::wasm::SectionCode, v8::internal::wasm::SectionCode)",93957341510272,93957341510387],["v8::internal::wasm::ModuleDecoderImpl::DecodeTableSection()",93957341515152,93957341515978],["v8::internal::wasm::ModuleDecoderImpl::DecodeExportSection()",93957341517376,93957341519849],["v8::internal::wasm::ModuleDecoderImpl::DecodeCodeSection(bool)",93957341520112,93957341520922],["v8::internal::wasm::ModuleDecoderImpl::DecodeDataSection()",93957341522656,93957341523635],["v8::internal::wasm::ModuleDecoderImpl::DecodeSourceMappingURLSection()",93957341524224,93957341524462],["v8::internal::Builtin_CallSitePrototypeGetEnclosingColumnNumber(int, unsigned long*, v8::internal::Isolate*)",93957335740016,93957335740048],["v8::internal::Builtin_CallSitePrototypeGetFunction(int, unsigned long*, v8::internal::Isolate*)",93957335744592,93957335744624],["v8::internal::Builtin_CallSitePrototypeGetLineNumber(int, unsigned long*, v8::internal::Isolate*)",93957335746768,93957335746800],["v8::internal::Builtin_Impl_Stats_CallSitePrototypeGetMethodName(int, unsigned long*, v8::internal::Isolate*)",93957335748032,93957335748504],["v8::internal::Builtin_Impl_Stats_CallSitePrototypeGetPosition(int, unsigned long*, v8::internal::Isolate*)",93957335749072,93957335749544],["v8::internal::Builtin_CallSitePrototypeGetPromiseIndex(int, unsigned long*, v8::internal::Isolate*)",93957335750080,93957335750112],["v8::internal::Builtin_Impl_CallSitePrototypeGetPromiseIndex(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335750592,93957335751187],["v8::internal::Builtin_Impl_Stats_CallSitePrototypeGetScriptNameOrSourceURL(int, unsigned long*, v8::internal::Isolate*)",93957335751232,93957335751704],["v8::internal::wasm::ModuleDecoderImpl::StartDecoding(v8::internal::Counters*, v8::internal::AccountingAllocator*)",93957341496176,93957341496424],["v8::internal::wasm::ModuleDecoder::ok()",93957341499632,93957341499668],["v8::internal::wasm::(anonymous namespace)::consume_string(v8::internal::wasm::Decoder*, bool, char const*)",93957341505280,93957341505610],["v8::internal::wasm::ModuleDecoderImpl::onFirstError()",93957341508912,93957341508926],["std::__1::__shared_ptr_pointer<v8::internal::wasm::WasmModule*, std::__1::shared_ptr<v8::internal::wasm::WasmModule>::__shared_ptr_default_delete<v8::internal::wasm::WasmModule, v8::internal::wasm::WasmModule>, std::__1::allocator<v8::internal::wasm::WasmModule> >::__on_zero_shared()",93957341510224,93957341510268],["v8::internal::wasm::ModuleDecoderImpl::DecodeTypeSection()",93957341510400,93957341512056],["v8::internal::wasm::ModuleDecoderImpl::DecodeFunctionSection()",93957341514400,93957341515146],["v8::internal::wasm::ModuleDecoderImpl::DecodeMemorySection()",93957341515984,93957341516384],["v8::internal::Builtin_Impl_Stats_BigIntPrototypeToString(int, unsigned long*, v8::internal::Isolate*)",93957335736912,93957335737384],["v8::internal::Builtin_Impl_Stats_CallSitePrototypeGetEnclosingLineNumber(int, unsigned long*, v8::internal::Isolate*)",93957335741280,93957335741752],["v8::internal::Builtin_Impl_Stats_CallSitePrototypeGetFileName(int, unsigned long*, v8::internal::Isolate*)",93957335743552,93957335744024],["v8::internal::Builtin_Impl_CallSitePrototypeGetFunction(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335745104,93957335745726],["v8::internal::Builtin_Impl_CallSitePrototypeGetFunctionName(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335746240,93957335746765],["v8::internal::Builtin_Impl_Stats_CallSitePrototypeGetLineNumber(int, unsigned long*, v8::internal::Isolate*)",93957335746800,93957335747272],["v8::internal::Builtin_CallSitePrototypeGetMethodName(int, unsigned long*, v8::internal::Isolate*)",93957335748000,93957335748032],["v8::internal::Builtin_Impl_CallSitePrototypeGetMethodName(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335748512,93957335749037],["v8::internal::wasm::SectionName(v8::internal::wasm::SectionCode)",93957341493472,93957341493507],["v8::internal::wasm::ModuleDecoderImpl::DecodeSection(v8::internal::wasm::SectionCode, v8::internal::Vector<unsigned char const>, unsigned int, bool)",93957341496976,93957341498061],["v8::internal::wasm::ModuleDecoder::set_code_section(unsigned int, unsigned int)",93957341499360,93957341499387],["v8::internal::wasm::DecodeAsmJsOffsets(v8::internal::Vector<unsigned char const>)",93957341500016,93957341502398],["v8::internal::wasm::(anonymous namespace)::FindNameSection(v8::internal::wasm::Decoder*)",93957341504720,93957341505271],["v8::internal::wasm::DecodeNameMap(v8::internal::Vector<unsigned char const>, unsigned char)",93957341505616,93957341506723],["v8::internal::wasm::ModuleDecoderImpl::~ModuleDecoderImpl()",93957341508752,93957341508903],["v8::internal::wasm::(anonymous namespace)::WasmSectionIterator::next()",93957341508928,93957341509435],["v8::internal::Builtin_Impl_Stats_BigIntAsUintN(int, unsigned long*, v8::internal::Isolate*)",93957335734240,93957335734712],["v8::internal::(anonymous namespace)::ThisBigIntValue(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, char const*)",93957335738480,93957335738777],["v8::internal::Builtin_Impl_CallSitePrototypeGetEnclosingColumnNumber(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335740528,93957335741233],["v8::internal::Builtin_CallSitePrototypeGetEvalOrigin(int, unsigned long*, v8::internal::Isolate*)",93957335742480,93957335742512],["v8::internal::Builtin_CallSitePrototypeGetFileName(int, unsigned long*, v8::internal::Isolate*)",93957335743520,93957335743552],["v8::internal::Builtin_Impl_CallSitePrototypeGetFileName(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335744032,93957335744577],["v8::internal::Builtin_Impl_Stats_CallSitePrototypeGetFunction(int, unsigned long*, v8::internal::Isolate*)",93957335744624,93957335745096],["v8::internal::Builtin_CallSitePrototypeGetFunctionName(int, unsigned long*, v8::internal::Isolate*)",93957335745728,93957335745760],["v8::internal::wasm::AsyncCompileJob::CompileFinished::RunInForeground(v8::internal::wasm::AsyncCompileJob*)",93957341491632,93957341491957],["v8::internal::wasm::ModuleDecoder::ModuleDecoder(v8::internal::wasm::WasmFeatures const&)",93957341495824,93957341495842],["v8::internal::wasm::ModuleDecoderImpl::DecodeModuleHeader(v8::internal::Vector<unsigned char const>, unsigned char)",93957341496464,93957341496956],["v8::internal::wasm::ModuleDecoder::StartCodeSection()",93957341498176,93957341498352],["v8::internal::wasm::ModuleDecoderImpl::FinishDecoding(bool)",93957341498496,93957341499360],["v8::internal::wasm::ModuleDecoder::IdentifyUnknownSection(v8::internal::wasm::ModuleDecoder*, v8::internal::Vector<unsigned char const>, unsigned int, v8::internal::wasm::SectionCode*)",93957341499392,93957341499623],["v8::internal::wasm::(anonymous namespace)::(anonymous namespace)::IdentifyUnknownSectionInternal(v8::internal::wasm::Decoder*)",93957341499680,93957341500005],["v8::internal::wasm::DecodeCustomSections(unsigned char const*, unsigned char const*)",93957341502400,93957341503439],["v8::internal::Builtin_CallAsyncModuleFulfilled(int, unsigned long*, v8::internal::Isolate*)",93957335731936,93957335732084],["v8::internal::Builtin_Impl_BigIntAsIntN(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335735584,93957335735912],["v8::internal::Builtin_BigIntPrototypeValueOf(int, unsigned long*, v8::internal::Isolate*)",93957335737744,93957335737909],["v8::internal::Builtin_Impl_Stats_CallSitePrototypeGetColumnNumber(int, unsigned long*, v8::internal::Isolate*)",93957335738816,93957335739288],["v8::internal::Builtin_Impl_Stats_CallSitePrototypeGetEnclosingColumnNumber(int, unsigned long*, v8::internal::Isolate*)",93957335740048,93957335740520],["v8::internal::Builtin_CallSitePrototypeGetEnclosingLineNumber(int, unsigned long*, v8::internal::Isolate*)",93957335741248,93957335741280],["v8::internal::Builtin_Impl_CallSitePrototypeGetEnclosingLineNumber(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335741760,93957335742465],["v8::internal::Builtin_Impl_Stats_CallSitePrototypeGetEvalOrigin(int, unsigned long*, v8::internal::Isolate*)",93957335742512,93957335742984],["non-virtual thunk to v8::internal::wasm::AsyncCompileJob::CompileTask::~CompileTask()",93957341490096,93957341490175],["v8::internal::wasm::AsyncCompileJob::CompileFailed::RunInForeground(v8::internal::wasm::AsyncCompileJob*)",93957341492208,93957341492221],["v8::internal::wasm::ModuleDecoderImpl::DecodeModule(v8::internal::Counters*, v8::internal::AccountingAllocator*, bool)",93957341494736,93957341495651],["v8::internal::wasm::ModuleDecoder::shared_module() const",93957341495904,93957341495918],["v8::internal::wasm::ModuleDecoder::DecodeModuleHeader(v8::internal::Vector<unsigned char const>, unsigned int)",93957341496432,93957341496449],["v8::internal::wasm::ModuleDecoder::DecodeSection(v8::internal::wasm::SectionCode, v8::internal::Vector<unsigned char const>, unsigned int, bool)",93957341496960,93957341496974],["v8::internal::wasm::ModuleDecoder::DecodeFunctionBody(unsigned int, unsigned int, unsigned int, bool)",93957341498064,93957341498175],["v8::internal::wasm::ModuleDecoder::CheckFunctionsCount(unsigned int, unsigned int)",93957341498352,93957341498413],["v8::internal::Builtin_SharedArrayBufferPrototypeSlice(int, unsigned long*, v8::internal::Isolate*)",93957335727952,93957335727997],["v8::internal::Builtin_BigIntConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335733360,93957335733392],["v8::internal::Builtin_BigIntAsIntN(int, unsigned long*, v8::internal::Isolate*)",93957335735072,93957335735104],["v8::internal::Builtin_Impl_Stats_BigIntPrototypeToLocaleString(int, unsigned long*, v8::internal::Isolate*)",93957335736208,93957335736880],["v8::internal::Builtin_Impl_BigIntPrototypeToString(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335737392,93957335737739],["v8::internal::Builtin_Impl_Stats_BigIntPrototypeValueOf(int, unsigned long*, v8::internal::Isolate*)",93957335737920,93957335738479],["v8::internal::Builtin_CallSitePrototypeGetColumnNumber(int, unsigned long*, v8::internal::Isolate*)",93957335738784,93957335738816],["v8::internal::Builtin_Impl_CallSitePrototypeGetColumnNumber(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335739296,93957335740001],["v8::internal::wasm::AsyncCompileJob::DecodeFail::~DecodeFail()",93957341489472,93957341489504],["void std::__1::__function::__policy_invoker<void (v8::internal::wasm::CompilationEvent)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::wasm::AsyncCompileJob::CompilationStateCallback, void (v8::internal::wasm::CompilationEvent)> >(std::__1::__function::__policy_storage const*, v8::internal::wasm::CompilationEvent)",93957341490992,93957341491002],["void* std::__1::__function::__policy::__large_clone<std::__1::__function::__default_alloc_func<v8::internal::wasm::(anonymous namespace)::SampleTopTierCodeSizeCallback, void (v8::internal::wasm::CompilationEvent)> >(void const*)",93957341492096,93957341492147],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::unique_ptr<v8::internal::wasm::JSToWasmWrapperCompilationUnit, std::__1::default_delete<v8::internal::wasm::JSToWasmWrapperCompilationUnit> > >, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::unique_ptr<v8::internal::wasm::JSToWasmWrapperCompilationUnit, std::__1::default_delete<v8::internal::wasm::JSToWasmWrapperCompilationUnit> > >, std::__1::__unordered_map_hasher<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::__hash_value_type<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::unique_ptr<v8::internal::wasm::JSToWasmWrapperCompilationUnit, std::__1::default_delete<v8::internal::wasm::JSToWasmWrapperCompilationUnit> > >, v8::base::hash<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> > >, std::__1::equal_to<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> > >, true>, std::__1::__unordered_map_equal<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::__hash_value_type<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::unique_ptr<v8::internal::wasm::JSToWasmWrapperCompilationUnit, std::__1::default_delete<v8::internal::wasm::JSToWasmWrapperCompilationUnit> > >, std::__1::equal_to<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> > >, v8::base::hash<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> > >, true>, std::__1::allocator<std::__1::__hash_value_type<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::unique_ptr<v8::internal::wasm::JSToWasmWrapperCompilationUnit, std::__1::default_delete<v8::internal::wasm::JSToWasmWrapperCompilationUnit> > > > >::__emplace_unique_key_args<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >&, std::__1::unique_ptr<v8::internal::wasm::JSToWasmWrapperCompilationUnit, std::__1::default_delete<v8::internal::wasm::JSToWasmWrapperCompilationUnit> > >(std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> > const&, std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >&, std::__1::unique_ptr<v8::internal::wasm::JSToWasmWrapperCompilationUnit, std::__1::default_delete<v8::internal::wasm::JSToWasmWrapperCompilationUnit> >&&)",93957341492272,93957341493427],["v8::internal::wasm::DecodeWasmModule(v8::internal::wasm::WasmFeatures const&, unsigned char const*, unsigned char const*, bool, v8::internal::wasm::ModuleOrigin, v8::internal::Counters*, std::__1::shared_ptr<v8::internal::metrics::Recorder>, v8::metrics::Recorder::ContextId, v8::internal::wasm::DecodingMethod, v8::internal::AccountingAllocator*)",93957341493520,93957341494723],["v8::internal::wasm::ModuleDecoderImpl::~ModuleDecoderImpl()",93957341495664,93957341495810],["v8::internal::wasm::ModuleDecoder::~ModuleDecoder()",93957341495856,93957341495889],["v8::internal::wasm::ModuleDecoder::StartDecoding(v8::internal::Counters*, std::__1::shared_ptr<v8::internal::metrics::Recorder>, v8::metrics::Recorder::ContextId, v8::internal::AccountingAllocator*, v8::internal::wasm::ModuleOrigin)",93957341495920,93957341496166],["std::__1::vector<int, std::__1::allocator<int> >::push_back(int const&)",93957335724960,93957335725236],["v8::internal::(anonymous namespace)::ConstructBuffer(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSFunction>, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::Object>, v8::internal::InitializedFlag)",93957335729040,93957335729413],["v8::internal::Builtin_CallAsyncModuleRejected(int, unsigned long*, v8::internal::Isolate*)",93957335732640,93957335732798],["v8::internal::Builtin_Impl_BigIntConstructor(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335733872,93957335734195],["v8::internal::Builtin_Impl_BigIntAsUintN(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335734720,93957335735062],["v8::internal::Builtin_Impl_Stats_BigIntAsIntN(int, unsigned long*, v8::internal::Isolate*)",93957335735104,93957335735576],["v8::internal::Builtin_BigIntPrototypeToLocaleString(int, unsigned long*, v8::internal::Isolate*)",93957335735920,93957335736204],["v8::internal::Builtin_BigIntPrototypeToString(int, unsigned long*, v8::internal::Isolate*)",93957335736880,93957335736912],["std::__1::__shared_ptr_emplace<v8::base::Semaphore, std::__1::allocator<v8::base::Semaphore> >::~__shared_ptr_emplace()",93957341486944,93957341486982],["v8::internal::wasm::AsyncCompileJob::CompileTask::~CompileTask()",93957341489632,93957341489689],["v8::internal::wasm::AsyncCompileJob::PrepareAndStartCompile::~PrepareAndStartCompile()",93957341490256,93957341490332],["v8::internal::wasm::AsyncCompileJob::CompileFinished::~CompileFinished()",93957341491472,93957341491545],["void std::__1::__function::__policy_invoker<void (v8::internal::wasm::CompilationEvent)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::wasm::(anonymous namespace)::SampleTopTierCodeSizeCallback, void (v8::internal::wasm::CompilationEvent)> >(std::__1::__function::__policy_storage const*, v8::internal::wasm::CompilationEvent)",93957341491968,93957341492091],["void std::__1::__function::__policy::__large_destroy<std::__1::__function::__default_alloc_func<v8::internal::wasm::(anonymous namespace)::SampleTopTierCodeSizeCallback, void (v8::internal::wasm::CompilationEvent)> >(void*)",93957341492160,93957341492197],["v8::internal::metrics::Recorder::DelayedEvent<v8::metrics::WasmModuleDecoded>::Run(std::__1::shared_ptr<v8::internal::metrics::Recorder> const&)",93957341492224,93957341492266],["v8::internal::wasm::(anonymous namespace)::CompileJSToWasmWrapperJob::GetMaxConcurrency(unsigned long) const",93957341493440,93957341493467],["v8::internal::JSReceiver::GetElement(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, unsigned int)",93957335720496,93957335720572],["v8::internal::Builtin_Impl_ArrayBufferConstructor(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335726464,93957335727088],["v8::internal::Builtin_ArrayBufferPrototypeSlice(int, unsigned long*, v8::internal::Isolate*)",93957335728496,93957335728538],["v8::internal::Factory::NewStringFromAsciiChecked(char const*, v8::internal::AllocationType)",93957335731648,93957335731738],["v8::internal::Builtin_Impl_Stats_CallAsyncModuleFulfilled(int, unsigned long*, v8::internal::Isolate*)",93957335732096,93957335732638],["v8::internal::Builtin_Impl_Stats_CallAsyncModuleRejected(int, unsigned long*, v8::internal::Isolate*)",93957335732800,93957335733346],["v8::internal::Builtin_Impl_Stats_BigIntConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335733392,93957335733864],["v8::internal::Builtin_BigIntAsUintN(int, unsigned long*, v8::internal::Isolate*)",93957335734208,93957335734240],["void std::__1::__function::__policy_invoker<void (v8::internal::wasm::CompilationEvent)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::wasm::(anonymous namespace)::CompilationStateImpl::WaitForCompilationEvent(v8::internal::wasm::CompilationEvent)::$_1, void (v8::internal::wasm::CompilationEvent)> >(std::__1::__function::__policy_storage const*, v8::internal::wasm::CompilationEvent)",93957341485248,93957341485281],["void std::__1::__function::__policy::__large_destroy<std::__1::__function::__default_alloc_func<v8::internal::wasm::RecompileNativeModule(v8::internal::wasm::NativeModule*, v8::internal::wasm::TieringState)::$_0, void (v8::internal::wasm::CompilationEvent)> >(void*)",93957341487104,93957341487170],["v8::internal::wasm::AsyncCompileJob::DecodeFail::RunInForeground(v8::internal::wasm::AsyncCompileJob*)",93957341489552,93957341489572],["v8::internal::wasm::AsyncCompileJob::CompileTask::RunInternal()",93957341489776,93957341490029],["v8::internal::wasm::AsyncCompileJob::PrepareAndStartCompile::~PrepareAndStartCompile()",93957341490176,93957341490249],["v8::internal::wasm::AsyncCompileJob::PrepareAndStartCompile::RunInForeground(v8::internal::wasm::AsyncCompileJob*)",93957341490336,93957341490981],["v8::internal::wasm::AsyncCompileJob::CompilationStateCallback::operator()(v8::internal::wasm::CompilationEvent)",93957341491008,93957341491468],["v8::internal::wasm::AsyncCompileJob::CompileFinished::~CompileFinished()",93957341491552,93957341491628],["v8::internal::Builtin_Impl_ArrayConcat(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335708992,93957335717617],["v8::internal::(anonymous namespace)::ArrayConcatVisitor::visit(unsigned int, v8::internal::Handle<v8::internal::Object>)",93957335722096,93957335722555],["v8::internal::Builtin_ArrayBufferConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335725952,93957335725984],["v8::internal::Builtin_Impl_Stats_ArrayBufferConstructor_DoNotInitialize(int, unsigned long*, v8::internal::Isolate*)",93957335727120,93957335727592],["v8::internal::Builtin_Impl_Stats_SharedArrayBufferPrototypeSlice(int, unsigned long*, v8::internal::Isolate*)",93957335728000,93957335728485],["v8::internal::Builtin_Impl_Stats_ArrayBufferPrototypeSlice(int, unsigned long*, v8::internal::Isolate*)",93957335728544,93957335729026],["v8::internal::SliceHelper(v8::internal::BuiltinArguments, v8::internal::Isolate*, char const*, bool)",93957335729424,93957335731643],["void v8::internal::CopyImpl<8ul, unsigned char>(unsigned char*, unsigned char const*, unsigned long)",93957335731744,93957335731927],["v8::internal::wasm::(anonymous namespace)::BackgroundCompileJob::~BackgroundCompileJob()",93957341483360,93957341483505],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::unique_ptr<v8::internal::wasm::JSToWasmWrapperCompilationUnit, std::__1::default_delete<v8::internal::wasm::JSToWasmWrapperCompilationUnit> > >, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::unique_ptr<v8::internal::wasm::JSToWasmWrapperCompilationUnit, std::__1::default_delete<v8::internal::wasm::JSToWasmWrapperCompilationUnit> > >, std::__1::__unordered_map_hasher<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::__hash_value_type<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::unique_ptr<v8::internal::wasm::JSToWasmWrapperCompilationUnit, std::__1::default_delete<v8::internal::wasm::JSToWasmWrapperCompilationUnit> > >, v8::base::hash<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> > >, std::__1::equal_to<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> > >, true>, std::__1::__unordered_map_equal<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::__hash_value_type<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::unique_ptr<v8::internal::wasm::JSToWasmWrapperCompilationUnit, std::__1::default_delete<v8::internal::wasm::JSToWasmWrapperCompilationUnit> > >, std::__1::equal_to<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> > >, v8::base::hash<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> > >, true>, std::__1::allocator<std::__1::__hash_value_type<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::unique_ptr<v8::internal::wasm::JSToWasmWrapperCompilationUnit, std::__1::default_delete<v8::internal::wasm::JSToWasmWrapperCompilationUnit> > > > >::__emplace_unique_key_args<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::piecewise_construct_t const&, std::__1::tuple<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> > const&>, std::__1::tuple<> >(std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> > const&, std::__1::piecewise_construct_t const&, std::__1::tuple<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> > const&>&&, std::__1::tuple<>&&)",93957341485536,93957341486684],["void std::__1::__function::__policy_invoker<void (v8::internal::wasm::CompilationEvent)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::wasm::RecompileNativeModule(v8::internal::wasm::NativeModule*, v8::internal::wasm::TieringState)::$_0, void (v8::internal::wasm::CompilationEvent)> >(std::__1::__function::__policy_storage const*, v8::internal::wasm::CompilationEvent)",93957341487008,93957341487031],["v8::internal::wasm::AsyncCompileJob::DecodeModule::~DecodeModule()",93957341487264,93957341487340],["v8::internal::wasm::AsyncCompileJob::DecodeFail::~DecodeFail()",93957341489504,93957341489552],["std::__1::__shared_ptr_pointer<v8::internal::wasm::AsyncCompileJob*, std::__1::default_delete<v8::internal::wasm::AsyncCompileJob>, std::__1::allocator<v8::internal::wasm::AsyncCompileJob> >::__on_zero_shared()",93957341489584,93957341489628],["v8::internal::wasm::AsyncCompileJob::CompileTask::~CompileTask()",93957341489696,93957341489774],["non-virtual thunk to v8::internal::wasm::AsyncCompileJob::CompileTask::~CompileTask()",93957341490032,93957341490096],["v8::internal::Builtin_ArrayShift(int, unsigned long*, v8::internal::Isolate*)",93957335705456,93957335705488],["v8::internal::(anonymous namespace)::MatchArrayElementsKindToArguments(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSArray>, v8::internal::BuiltinArguments*, int, int)",93957335718336,93957335718631],["v8::internal::(anonymous namespace)::SetLengthProperty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, double)",93957335720848,93957335721155],["std::__1::vector<unsigned int, std::__1::allocator<unsigned int> >::reserve(unsigned long)",93957335723200,93957335723367],["v8::internal::(anonymous namespace)::ArrayConcatVisitor::SetDictionaryMode()",93957335725248,93957335725937],["v8::internal::Builtin_Impl_Stats_ArrayBufferConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335725984,93957335726456],["v8::internal::Builtin_ArrayBufferConstructor_DoNotInitialize(int, unsigned long*, v8::internal::Isolate*)",93957335727088,93957335727120],["v8::internal::Builtin_Impl_ArrayBufferConstructor_DoNotInitialize(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335727600,93957335727945],["std::__1::__hash_table<std::__1::__hash_value_type<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::unique_ptr<v8::internal::wasm::JSToWasmWrapperCompilationUnit, std::__1::default_delete<v8::internal::wasm::JSToWasmWrapperCompilationUnit> > >, std::__1::__unordered_map_hasher<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::__hash_value_type<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::unique_ptr<v8::internal::wasm::JSToWasmWrapperCompilationUnit, std::__1::default_delete<v8::internal::wasm::JSToWasmWrapperCompilationUnit> > >, v8::base::hash<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> > >, std::__1::equal_to<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> > >, true>, std::__1::__unordered_map_equal<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::__hash_value_type<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::unique_ptr<v8::internal::wasm::JSToWasmWrapperCompilationUnit, std::__1::default_delete<v8::internal::wasm::JSToWasmWrapperCompilationUnit> > >, std::__1::equal_to<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> > >, v8::base::hash<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> > >, true>, std::__1::allocator<std::__1::__hash_value_type<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::unique_ptr<v8::internal::wasm::JSToWasmWrapperCompilationUnit, std::__1::default_delete<v8::internal::wasm::JSToWasmWrapperCompilationUnit> > > > >::rehash(unsigned long)",93957341479440,93957341479811],["void std::__1::vector<std::__1::function<void (v8::internal::wasm::CompilationEvent)>, std::__1::allocator<std::__1::function<void (v8::internal::wasm::CompilationEvent)> > >::emplace_back<std::__1::function<void (v8::internal::wasm::CompilationEvent)> >(std::__1::function<void (v8::internal::wasm::CompilationEvent)>&&)",93957341484640,93957341484721],["void std::__1::__function::__policy::__large_destroy<std::__1::__function::__default_alloc_func<v8::internal::wasm::(anonymous namespace)::CompilationStateImpl::WaitForCompilationEvent(v8::internal::wasm::CompilationEvent)::$_1, void (v8::internal::wasm::CompilationEvent)> >(void*)",93957341485392,93957341485513],["v8::internal::metrics::Recorder::DelayedEvent<v8::metrics::WasmModuleCompiled>::Run(std::__1::shared_ptr<v8::internal::metrics::Recorder> const&)",93957341486864,93957341486906],["std::__1::__shared_ptr_emplace<v8::base::Semaphore, std::__1::allocator<v8::base::Semaphore> >::__on_zero_shared()",93957341486992,93957341487006],["void* std::__1::__function::__policy::__large_clone<std::__1::__function::__default_alloc_func<v8::internal::wasm::RecompileNativeModule(v8::internal::wasm::NativeModule*, v8::internal::wasm::TieringState)::$_0, void (v8::internal::wasm::CompilationEvent)> >(void const*)",93957341487040,93957341487091],["v8::internal::wasm::AsyncCompileJob::DecodeModule::~DecodeModule()",93957341487184,93957341487257],["v8::internal::wasm::AsyncCompileJob::DecodeModule::RunInBackground(v8::internal::wasm::AsyncCompileJob*)",93957341487344,93957341489468],["v8::internal::Builtin_Impl_Stats_ArrayPrototypeFill(int, unsigned long*, v8::internal::Isolate*)",93957335701344,93957335701816],["v8::internal::Builtin_Impl_Stats_ArrayUnshift(int, unsigned long*, v8::internal::Isolate*)",93957335707712,93957335708184],["v8::internal::HandleScope::~HandleScope()",93957335717968,93957335718029],["v8::internal::(anonymous namespace)::GenericArrayPush(v8::internal::Isolate*, v8::internal::BuiltinArguments*)",93957335718960,93957335719856],["v8::internal::Object::GetPropertyOrElement(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Name>)",93957335720576,93957335720846],["v8::internal::(anonymous namespace)::Fast_ArrayConcat(v8::internal::Isolate*, v8::internal::BuiltinArguments*)",93957335721168,93957335722082],["v8::internal::(anonymous namespace)::IterateElementsSlow(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, unsigned int, v8::internal::(anonymous namespace)::ArrayConcatVisitor*)",93957335722560,93957335723195],["v8::internal::(anonymous namespace)::CollectElementIndices(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, unsigned int, std::__1::vector<unsigned int, std::__1::allocator<unsigned int> >*)",93957335723376,93957335724947],["_ZNSt3__16vectorIN2v88internal4wasm19WasmCompilationUnitENS_9allocatorIS4_EEE6insertINS_11__wrap_iterIPS4_EEEENS_9enable_ifIXaasr27__is_cpp17_forward_iteratorIT_EE5valuesr16is_constructibleIS4_NS_15iterator_traitsISD_E9referenceEEE5valueESB_E4typeENS9_IPKS4_EESD_SD_",93957341470672,93957341473818],["std::__1::__shared_ptr_emplace<v8::internal::wasm::JSToWasmWrapperCompilationUnit, std::__1::allocator<v8::internal::wasm::JSToWasmWrapperCompilationUnit> >::__on_zero_shared()",93957341480752,93957341480766],["v8::internal::wasm::(anonymous namespace)::BackgroundCompileJob::GetMaxConcurrency(unsigned long) const",93957341483616,93957341483814],["std::__1::__shared_ptr_emplace<std::__1::atomic<bool>, std::__1::allocator<std::__1::atomic<bool> > >::~__shared_ptr_emplace()",93957341485168,93957341485188],["void* std::__1::__function::__policy::__large_clone<std::__1::__function::__default_alloc_func<v8::internal::wasm::(anonymous namespace)::CompilationStateImpl::WaitForCompilationEvent(v8::internal::wasm::CompilationEvent)::$_1, void (v8::internal::wasm::CompilationEvent)> >(void const*)",93957341485296,93957341485380],["v8::internal::wasm::(anonymous namespace)::CompilationStateImpl::WaitForCompilationEvent(v8::internal::wasm::CompilationEvent)::WaitForEventDelegate::ShouldYield()",93957341485520,93957341485534],["std::__1::__unordered_map_hasher<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::__hash_value_type<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::unique_ptr<v8::internal::wasm::JSToWasmWrapperCompilationUnit, std::__1::default_delete<v8::internal::wasm::JSToWasmWrapperCompilationUnit> > >, v8::base::hash<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> > >, std::__1::equal_to<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> > >, true>::operator()(std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> > const&) const",93957341486688,93957341486855],["std::__1::__shared_ptr_emplace<v8::base::Semaphore, std::__1::allocator<v8::base::Semaphore> >::~__shared_ptr_emplace()",93957341486912,93957341486932],["v8::internal::Builtin_HandleApiCallAsFunction(int, unsigned long*, v8::internal::Isolate*)",93957335698672,93957335698718],["v8::internal::Builtin_Impl_ArrayPush(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335703632,93957335704257],["v8::internal::Builtin_Impl_ArrayShift(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335705968,93957335707669],["v8::internal::Builtin_ArrayConcat(int, unsigned long*, v8::internal::Isolate*)",93957335708480,93957335708512],["v8::internal::(anonymous namespace)::GenericArrayFill(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::Object>, double, double)",93957335717632,93957335717961],["v8::internal::(anonymous namespace)::EnsureJSArrayWithWritableFastElements(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::BuiltinArguments*, int, int)",93957335718032,93957335718331],["v8::internal::Object::SetPropertyOrElement(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>, v8::Maybe<v8::internal::ShouldThrow>, v8::internal::StoreOrigin)",93957335718640,93957335718949],["v8::internal::(anonymous namespace)::GenericArrayPop(v8::internal::Isolate*, v8::internal::BuiltinArguments*)",93957335719856,93957335720481],["void* std::__1::__function::__policy::__large_clone<std::__1::__function::__default_alloc_func<v8::internal::wasm::(anonymous namespace)::CompilationTimeCallback, void (v8::internal::wasm::CompilationEvent)> >(void const*)",93957341463568,93957341463695],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<v8::internal::wasm::WasmImportWrapperCache::CacheKey, void*>*>, bool> std::__1::__hash_table<v8::internal::wasm::WasmImportWrapperCache::CacheKey, v8::internal::wasm::WasmImportWrapperCache::CacheKeyHash, std::__1::equal_to<v8::internal::wasm::WasmImportWrapperCache::CacheKey>, std::__1::allocator<v8::internal::wasm::WasmImportWrapperCache::CacheKey> >::__emplace_unique_key_args<v8::internal::wasm::WasmImportWrapperCache::CacheKey, v8::internal::wasm::WasmImportWrapperCache::CacheKey const&>(v8::internal::wasm::WasmImportWrapperCache::CacheKey const&, v8::internal::wasm::WasmImportWrapperCache::CacheKey const&)",93957341475984,93957341477011],["std::__1::__shared_ptr_emplace<v8::internal::wasm::JSToWasmWrapperCompilationUnit, std::__1::allocator<v8::internal::wasm::JSToWasmWrapperCompilationUnit> >::~__shared_ptr_emplace()",93957341480672,93957341480692],["_ZNSt3__16vectorINS_10shared_ptrIN2v88internal4wasm30JSToWasmWrapperCompilationUnitEEENS_9allocatorIS6_EEE6insertIPS6_EENS_9enable_ifIXaasr27__is_cpp17_forward_iteratorIT_EE5valuesr16is_constructibleIS6_NS_15iterator_traitsISD_E9referenceEEE5valueENS_11__wrap_iterISB_EEE4typeENSH_IPKS6_EESD_SD_",93957341482112,93957341483201],["v8::internal::wasm::(anonymous namespace)::BackgroundCompileJob::Run(v8::JobDelegate*)",93957341483520,93957341483614],["std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >::assign(unsigned long, unsigned char const&)",93957341483824,93957341484637],["void std::__1::vector<std::__1::function<void (v8::internal::wasm::CompilationEvent)>, std::__1::allocator<std::__1::function<void (v8::internal::wasm::CompilationEvent)> > >::__emplace_back_slow_path<std::__1::function<void (v8::internal::wasm::CompilationEvent)> >(std::__1::function<void (v8::internal::wasm::CompilationEvent)>&&)",93957341484736,93957341485159],["std::__1::__shared_ptr_emplace<std::__1::atomic<bool>, std::__1::allocator<std::__1::atomic<bool> > >::~__shared_ptr_emplace()",93957341485200,93957341485238],["std::__1::__deque_base<v8::internal::TranslatedValue, std::__1::allocator<v8::internal::TranslatedValue> >::~__deque_base()",93957335694160,93957335694367],["v8::internal::(anonymous namespace)::RelocatableArguments::IterateInstance(v8::internal::RootVisitor*)",93957335699744,93957335699833],["v8::internal::Builtin_ArrayPush(int, unsigned long*, v8::internal::Isolate*)",93957335703120,93957335703152],["v8::internal::Builtin_Impl_Stats_ArrayPop(int, unsigned long*, v8::internal::Isolate*)",93957335704304,93957335704776],["v8::internal::Builtin_Impl_Stats_ArrayShift(int, unsigned long*, v8::internal::Isolate*)",93957335705488,93957335705960],["v8::internal::Builtin_ArrayUnshift(int, unsigned long*, v8::internal::Isolate*)",93957335707680,93957335707712],["v8::internal::Builtin_Impl_ArrayUnshift(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335708192,93957335708468],["v8::internal::Builtin_Impl_Stats_ArrayConcat(int, unsigned long*, v8::internal::Isolate*)",93957335708512,93957335708984],["v8::internal::wasm::AsyncStreamingProcessor::OnAbort()",93957341459312,93957341459374],["v8::internal::wasm::(anonymous namespace)::CompilationStateImpl::TriggerCallbacks(v8::base::EnumSet<v8::internal::wasm::CompilationEvent, int>)",93957341467776,93957341468495],["std::__1::vector<std::__1::unique_ptr<v8::internal::wasm::WasmCode, std::__1::default_delete<v8::internal::wasm::WasmCode> >, std::__1::allocator<std::__1::unique_ptr<v8::internal::wasm::WasmCode, std::__1::default_delete<v8::internal::wasm::WasmCode> > > >::reserve(unsigned long)",93957341474528,93957341475193],["std::__1::__hash_table<v8::internal::wasm::WasmImportWrapperCache::CacheKey, v8::internal::wasm::WasmImportWrapperCache::CacheKeyHash, std::__1::equal_to<v8::internal::wasm::WasmImportWrapperCache::CacheKey>, std::__1::allocator<v8::internal::wasm::WasmImportWrapperCache::CacheKey> >::__rehash(unsigned long)",93957341477408,93957341478158],["std::__1::__hash_table<std::__1::__hash_value_type<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::unique_ptr<v8::internal::wasm::JSToWasmWrapperCompilationUnit, std::__1::default_delete<v8::internal::wasm::JSToWasmWrapperCompilationUnit> > >, std::__1::__unordered_map_hasher<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::__hash_value_type<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::unique_ptr<v8::internal::wasm::JSToWasmWrapperCompilationUnit, std::__1::default_delete<v8::internal::wasm::JSToWasmWrapperCompilationUnit> > >, v8::base::hash<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> > >, std::__1::equal_to<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> > >, true>, std::__1::__unordered_map_equal<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::__hash_value_type<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::unique_ptr<v8::internal::wasm::JSToWasmWrapperCompilationUnit, std::__1::default_delete<v8::internal::wasm::JSToWasmWrapperCompilationUnit> > >, std::__1::equal_to<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> > >, v8::base::hash<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> > >, true>, std::__1::allocator<std::__1::__hash_value_type<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::unique_ptr<v8::internal::wasm::JSToWasmWrapperCompilationUnit, std::__1::default_delete<v8::internal::wasm::JSToWasmWrapperCompilationUnit> > > > >::__rehash(unsigned long)",93957341479824,93957341480661],["std::__1::__shared_ptr_emplace<v8::internal::wasm::JSToWasmWrapperCompilationUnit, std::__1::allocator<v8::internal::wasm::JSToWasmWrapperCompilationUnit> >::~__shared_ptr_emplace()",93957341480704,93957341480742],["v8::internal::wasm::(anonymous namespace)::CompilationStateImpl::AddCompilationUnits(v8::internal::Vector<v8::internal::wasm::WasmCompilationUnit>, v8::internal::Vector<v8::internal::wasm::WasmCompilationUnit>, v8::internal::Vector<std::__1::shared_ptr<v8::internal::wasm::JSToWasmWrapperCompilationUnit> >)",93957341480768,93957341482107],["v8::internal::wasm::(anonymous namespace)::BackgroundCompileJob::~BackgroundCompileJob()",93957341483216,93957341483358],["v8::internal::FindCaller(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSFunction>)",93957335691216,93957335691874],["v8::internal::Builtin_Impl_HandleApiCall(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335695248,93957335695620],["v8::internal::Builtin_HandleApiCallAsConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335699200,93957335699249],["v8::internal::FunctionCallbackArguments::Call(v8::internal::CallHandlerInfo)",93957335700368,93957335701304],["v8::internal::Builtin_Impl_ArrayPrototypeFill(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335701824,93957335703113],["v8::internal::Builtin_Impl_Stats_ArrayPush(int, unsigned long*, v8::internal::Isolate*)",93957335703152,93957335703624],["v8::internal::Builtin_ArrayPop(int, unsigned long*, v8::internal::Isolate*)",93957335704272,93957335704304],["v8::internal::Builtin_Impl_ArrayPop(v8::internal::BuiltinArguments, v8::internal::Isolate*)",93957335704784,93957335705447],["v8::internal::wasm::(anonymous namespace)::AddImportWrapperUnits(v8::internal::wasm::NativeModule*, v8::internal::wasm::(anonymous namespace)::CompilationUnitBuilder*)",93957341454256,93957341454626],["v8::internal::wasm::(anonymous namespace)::ApplyHintToExecutionTier(v8::internal::wasm::WasmCompilationHintTier, v8::internal::wasm::ExecutionTier)",93957341461168,93957341461211],["v8::internal::wasm::(anonymous namespace)::CompilationStateImpl::GetNextCompilationUnit(v8::internal::wasm::(anonymous namespace)::CompilationUnitQueues::Queue*, v8::internal::wasm::(anonymous namespace)::CompileBaselineOnly)",93957341463840,93957341465880],["v8::internal::wasm::(anonymous namespace)::CompilationUnitQueues::GetBigUnitOfTier(int)",93957341469360,93957341469804],["void std::__1::vector<v8::internal::wasm::WasmCompilationResult, std::__1::allocator<v8::internal::wasm::WasmCompilationResult> >::__emplace_back_slow_path<v8::internal::wasm::WasmCompilationResult>(v8::internal::wasm::WasmCompilationResult&&)",93957341473824,93957341474521],["void std::__1::vector<std::__1::unique_ptr<v8::internal::wasm::WasmCode, std::__1::default_delete<v8::internal::wasm::WasmCode> >, std::__1::allocator<std::__1::unique_ptr<v8::internal::wasm::WasmCode, std::__1::default_delete<v8::internal::wasm::WasmCode> > > >::__emplace_back_slow_path<std::__1::unique_ptr<v8::internal::wasm::WasmCode, std::__1::default_delete<v8::internal::wasm::WasmCode> > >(std::__1::unique_ptr<v8::internal::wasm::WasmCode, std::__1::default_delete<v8::internal::wasm::WasmCode> >&&)",93957341475200,93957341475971],["std::__1::__hash_table<v8::internal::wasm::WasmImportWrapperCache::CacheKey, v8::internal::wasm::WasmImportWrapperCache::CacheKeyHash, std::__1::equal_to<v8::internal::wasm::WasmImportWrapperCache::CacheKey>, std::__1::allocator<v8::internal::wasm::WasmImportWrapperCache::CacheKey> >::rehash(unsigned long)",93957341477024,93957341477395],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >, void*>*>, bool> std::__1::__hash_table<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >, v8::base::hash<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> > >, std::__1::equal_to<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> > >, std::__1::allocator<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> > > >::__emplace_unique_key_args<std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> > const&>(std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> > const&, std::__1::pair<bool, v8::internal::Signature<v8::internal::wasm::ValueType> > const&)",93957341478160,93957341479429],["v8::internal::Accessors::StringLengthGetter(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&)",93957335687152,93957335687501],["v8::internal::Accessors::BoundFunctionLengthGetter(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&)",93957335692816,93957335693176],["v8::internal::Builtin_HandleApiCall(int, unsigned long*, v8::internal::Isolate*)",93957335694736,93957335694768],["v8::internal::MaybeHandle<v8::internal::Object> v8::internal::(anonymous namespace)::HandleApiCallHelper<true>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::FunctionTemplateInfo>, v8::internal::Handle<v8::internal::Object>, v8::internal::BuiltinArguments)",93957335696560,93957335697316],["v8::internal::Builtin_Impl_Stats_HandleApiCallAsFunction(int, unsigned long*, v8::internal::Isolate*)",93957335698720,93957335699194],["v8::internal::Builtin_Impl_Stats_HandleApiCallAsConstructor(int, unsigned long*, v8::internal::Isolate*)",93957335699264,93957335699741],["v8::internal::HandleApiCallAsFunctionOrConstructor(v8::internal::Isolate*, bool, v8::internal::BuiltinArguments)",93957335699840,93957335700361],["v8::internal::Builtin_ArrayPrototypeFill(int, unsigned long*, v8::internal::Isolate*)",93957335701312,93957335701344],["v8::internal::wasm::AsyncStreamingProcessor::~AsyncStreamingProcessor()",93957341451248,93957341451276],["v8::internal::wasm::(anonymous namespace)::CompilationUnitBuilder::AddUnits(unsigned int)",93957341457408,93957341458302],["v8::internal::wasm::(anonymous namespace)::CompileJSToWasmWrapperJob::Run(v8::JobDelegate*)",93957341460240,93957341460668],["void std::__1::__function::__policy_invoker<void (v8::internal::wasm::CompilationEvent)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::wasm::(anonymous namespace)::CompilationTimeCallback, void (v8::internal::wasm::CompilationEvent)> >(std::__1::__function::__policy_storage const*, v8::internal::wasm::CompilationEvent)",93957341462816,93957341463519],["void std::__1::__function::__policy::__large_destroy<std::__1::__function::__default_alloc_func<v8::internal::wasm::(anonymous namespace)::CompilationTimeCallback, void (v8::internal::wasm::CompilationEvent)> >(void*)",93957341463696,93957341463831],["v8::internal::wasm::(anonymous namespace)::CompilationStateImpl::SchedulePublishCompilationResults(std::__1::vector<std::__1::unique_ptr<v8::internal::wasm::WasmCode, std::__1::default_delete<v8::internal::wasm::WasmCode> >, std::__1::allocator<std::__1::unique_ptr<v8::internal::wasm::WasmCode, std::__1::default_delete<v8::internal::wasm::WasmCode> > > >)",93957341465888,93957341467765],["void std::__1::vector<std::__1::unique_ptr<v8::internal::wasm::(anonymous namespace)::CompilationUnitQueues::QueueImpl, std::__1::default_delete<v8::internal::wasm::(anonymous namespace)::CompilationUnitQueues::QueueImpl> >, std::__1::allocator<std::__1::unique_ptr<v8::internal::wasm::(anonymous namespace)::CompilationUnitQueues::QueueImpl, std::__1::default_delete<v8::internal::wasm::(anonymous namespace)::CompilationUnitQueues::QueueImpl> > > >::emplace_back<std::__1::unique_ptr<v8::internal::wasm::(anonymous namespace)::CompilationUnitQueues::QueueImpl, std::__1::default_delete<v8::internal::wasm::(anonymous namespace)::CompilationUnitQueues::QueueImpl> > >(std::__1::unique_ptr<v8::internal::wasm::(anonymous namespace)::CompilationUnitQueues::QueueImpl, std::__1::default_delete<v8::internal::wasm::(anonymous namespace)::CompilationUnitQueues::QueueImpl> >&&)",93957341468496,93957341469354],["_ZNSt3__16vectorIN2v88internal4wasm19WasmCompilationUnitENS_9allocatorIS4_EEE6assignINS_11__wrap_iterIPS4_EEEENS_9enable_ifIXaasr27__is_cpp17_forward_iteratorIT_EE5valuesr16is_constructibleIS4_NS_15iterator_traitsISD_E9referenceEEE5valueEvE4typeESD_SD_",93957341469808,93957341470670],["v8::internal::Accessors::IsJSObjectFieldAccessor(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Name>, v8::internal::FieldIndex*)",93957335684336,93957335684736],["v8::internal::Accessors::FunctionNameGetter(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&)",93957335688704,93957335688852],["v8::internal::FrameFunctionIterator::MaterializeFunction()",93957335692144,93957335692628],["v8::internal::Accessors::ErrorStackGetter(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&)",93957335693424,93957335693999],["v8::internal::FrameFunctionIterator::next()",93957335694368,93957335694724],["v8::internal::Builtin_Impl_Stats_HandleApiCall(int, unsigned long*, v8::internal::Isolate*)",93957335694768,93957335695240],["v8::internal::Builtins::InvokeApiFunction(v8::internal::Isolate*, bool, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::Object>, int, v8::internal::Handle<v8::internal::Object>*, v8::internal::Handle<v8::internal::HeapObject>)",93957335695632,93957335696554],["v8::internal::MaybeHandle<v8::internal::Object> v8::internal::(anonymous namespace)::HandleApiCallHelper<false>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::FunctionTemplateInfo>, v8::internal::Handle<v8::internal::Object>, v8::internal::BuiltinArguments)",93957335697328,93957335698665],["v8::internal::wasm::AsyncCompileJob::FinishCompile(bool)",93957341445776,93957341447768],["v8::internal::wasm::AsyncStreamingProcessor::ProcessSection(v8::internal::wasm::SectionCode, v8::internal::Vector<unsigned char const>, unsigned int)",93957341452608,93957341452934],["v8::internal::wasm::(anonymous namespace)::CompilationStateImpl::InitializeCompilationProgress(bool, int, int)",93957341455248,93957341456458],["v8::internal::wasm::AsyncStreamingProcessor::OnFinishedStream(v8::internal::OwnedVector<unsigned char>)",93957341458336,93957341459292],["v8::internal::wasm::AsyncStreamingProcessor::Deserialize(v8::internal::Vector<unsigned char const>, v8::internal::Vector<unsigned char const>)",93957341459376,93957341460233],["v8::internal::wasm::CompileImportWrapper(v8::internal::wasm::WasmEngine*, v8::internal::wasm::NativeModule*, v8::internal::Counters*, v8::internal::compiler::WasmImportCallKind, v8::internal::Signature<v8::internal::wasm::ValueType> const*, int, v8::internal::wasm::WasmImportWrapperCache::ModificationScope*)",93957341460672,93957341461158],["v8::internal::wasm::(anonymous namespace)::InitializeCompilationUnits(v8::internal::Isolate*, v8::internal::wasm::NativeModule*)",93957341461216,93957341462814],["v8::internal::metrics::Recorder::DelayedEvent<v8::metrics::WasmModuleTieredUp>::Run(std::__1::shared_ptr<v8::internal::metrics::Recorder> const&)",93957341463520,93957341463562],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::Operand, v8::internal::Smi>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::Operand, v8::internal::Smi)",93957335681632,93957335681843],["v8::internal::Accessors::ArrayLengthSetter(v8::Local<v8::Name>, v8::Local<v8::Value>, v8::PropertyCallbackInfo<v8::Boolean> const&)",93957335685808,93957335686704],["v8::internal::Accessors::FunctionPrototypeSetter(v8::Local<v8::Name>, v8::Local<v8::Value>, v8::PropertyCallbackInfo<v8::Boolean> const&)",93957335688128,93957335688357],["v8::internal::(anonymous namespace)::GetFrameArguments(v8::internal::Isolate*, v8::internal::JavaScriptFrameIterator*, int)",93957335689056,93957335690584],["v8::internal::FrameFunctionIterator::FindFirstNativeOrUserJavaScript()",93957335691888,93957335692138],["v8::internal::Accessors::FunctionCallerGetter(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&)",93957335692640,93957335692802],["v8::internal::Accessors::BoundFunctionNameGetter(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&)",93957335693184,93957335693424],["v8::internal::Accessors::ErrorStackSetter(v8::Local<v8::Name>, v8::Local<v8::Value>, v8::PropertyCallbackInfo<v8::Boolean> const&)",93957335694000,93957335694158],["v8::internal::wasm::RecompileNativeModule(v8::internal::wasm::NativeModule*, v8::internal::wasm::TieringState)",93957341435696,93957341437632],["v8::internal::wasm::AsyncCompileJob::AsyncCompileFailed()",93957341449248,93957341449487],["void v8::internal::wasm::AsyncCompileJob::DoSync<v8::internal::wasm::AsyncCompileJob::DecodeFail, (v8::internal::wasm::AsyncCompileJob::UseExistingForegroundTask)0, v8::internal::wasm::WasmError const&>(v8::internal::wasm::WasmError const&)",93957341452048,93957341452323],["std::__1::unique_ptr<v8::internal::wasm::(anonymous namespace)::CompilationUnitBuilder, std::__1::default_delete<v8::internal::wasm::(anonymous namespace)::CompilationUnitBuilder> >::reset(v8::internal::wasm::(anonymous namespace)::CompilationUnitBuilder*)",93957341453168,93957341453346],["v8::internal::wasm::(anonymous namespace)::AddExportWrapperUnits(v8::internal::Isolate*, v8::internal::wasm::WasmEngine*, v8::internal::wasm::NativeModule*, v8::internal::wasm::(anonymous namespace)::CompilationUnitBuilder*, v8::internal::wasm::WasmFeatures const&)",93957341454640,93957341455237],["v8::internal::wasm::AsyncStreamingProcessor::ProcessFunctionBody(v8::internal::Vector<unsigned char const>, unsigned int)",93957341456464,93957341457395],["v8::internal::wasm::AsyncStreamingProcessor::OnFinishedChunk()",93957341458304,93957341458323],["v8::internal::wasm::AsyncStreamingProcessor::OnError(v8::internal::wasm::WasmError const&)",93957341459296,93957341459306],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::Operand>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::Operand)",93957335678384,93957335678874],["v8::internal::baseline::BytecodeOffsetIterator::BytecodeOffsetIterator(v8::internal::ByteArray, v8::internal::BytecodeArray)",93957335683008,93957335683175],["v8::internal::Accessors::ArgumentsIteratorGetter(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&)",93957335685152,93957335685480],["v8::internal::Accessors::ModuleNamespaceEntrySetter(v8::Local<v8::Name>, v8::Local<v8::Value>, v8::PropertyCallbackInfo<v8::Boolean> const&)",93957335686864,93957335687113],["v8::internal::Accessors::FunctionPrototypeGetter(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&)",93957335687504,93957335688125],["v8::internal::Accessors::FunctionLengthGetter(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&)",93957335688368,93957335688690],["v8::internal::Accessors::FunctionGetArguments(v8::internal::JavaScriptFrame*, int)",93957335688864,93957335689051],["v8::internal::Accessors::FunctionArgumentsGetter(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&)",93957335690592,93957335691209],["v8::internal::wasm::CompilationState::failed() const",93957341428016,93957341428027],["v8::internal::wasm::AsyncCompileJob::CreateStreamingDecoder()",93957341444400,93957341444752],["v8::internal::wasm::(anonymous namespace)::CompilationStateImpl::PublishDetectedFeatures(v8::internal::Isolate*)",93957341448800,93957341449004],["v8::internal::wasm::AsyncCompileJob::AsyncCompileSucceeded(v8::internal::Handle<v8::internal::WasmModuleObject>)",93957341450592,93957341450954],["v8::internal::wasm::AsyncStreamingProcessor::FinishAsyncCompileJobWithError(v8::internal::wasm::WasmError const&)",93957341451280,93957341452036],["v8::internal::wasm::AsyncStreamingProcessor::ProcessModuleHeader(v8::internal::Vector<unsigned char const>, unsigned int)",93957341452336,93957341452599],["v8::internal::wasm::AsyncStreamingProcessor::CommitCompilationUnits()",93957341452944,93957341453160],["v8::internal::wasm::AsyncStreamingProcessor::ProcessCodeSectionHeader(int, unsigned int, std::__1::shared_ptr<v8::internal::wasm::WireBytesStorage>, int, int)",93957341453360,93957341454255],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::Handle<v8::internal::HeapObject>, unsigned int, v8::internal::Operand>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::Handle<v8::internal::HeapObject>, unsigned int, v8::internal::Operand)",93957335676256,93957335676510],["v8::internal::baseline::detail::PushAllHelper<v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::Operand>::Push(v8::internal::baseline::BaselineAssembler*, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::Operand)",93957335680288,93957335680638],["v8::internal::baseline::BytecodeOffsetIterator::BytecodeOffsetIterator(v8::internal::Handle<v8::internal::ByteArray>, v8::internal::Handle<v8::internal::BytecodeArray>)",93957335682752,93957335682962],["v8::internal::Accessors::MakeAccessor(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Name>, void (*)(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&), void (*)(v8::Local<v8::Name>, v8::Local<v8::Value>, v8::PropertyCallbackInfo<v8::Boolean> const&))",93957335683248,93957335684037],["v8::internal::Accessors::ReplaceAccessorWithDataProperty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>)",93957335684736,93957335685138],["v8::internal::Accessors::ArrayLengthGetter(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&)",93957335685488,93957335685797],["v8::internal::Accessors::ModuleNamespaceEntryGetter(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&)",93957335686704,93957335686864],["v8::internal::Accessors::MakeModuleNamespaceEntryInfo(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>)",93957335687120,93957335687144],["v8::internal::wasm::CompilationState::SetError()",93957341426064,93957341426202],["v8::internal::wasm::(anonymous namespace)::GetRequestedExecutionTiers(v8::internal::wasm::WasmModule const*, v8::internal::wasm::(anonymous namespace)::CompileMode, v8::internal::wasm::WasmFeatures const&, unsigned int)",93957341431472,93957341431672],["v8::internal::wasm::AsyncCompileJob::AsyncCompileJob(v8::internal::Isolate*, v8::internal::wasm::WasmFeatures const&, std::__1::unique_ptr<unsigned char [], std::__1::default_delete<unsigned char []> >, unsigned long, v8::internal::Handle<v8::internal::Context>, v8::internal::Handle<v8::internal::Context>, char const*, std::__1::shared_ptr<v8::internal::wasm::CompilationResultResolver>, int)",93957341443376,93957341444155],["v8::internal::wasm::AsyncCompileJob::CreateNativeModule(std::__1::shared_ptr<v8::internal::wasm::WasmModule const>, unsigned long)",93957341445344,93957341445538],["v8::internal::wasm::(anonymous namespace)::CompilationStateImpl::FinalizeJSToWasmWrappers(v8::internal::Isolate*, v8::internal::wasm::WasmModule const*, v8::internal::Handle<v8::internal::FixedArray>*)",93957341447776,93957341448792],["v8::internal::wasm::AsyncCompileJob::DecodeFailed(v8::internal::wasm::WasmError const&)",93957341449008,93957341449237],["v8::internal::wasm::(anonymous namespace)::ValidateSequentially(v8::internal::wasm::WasmModule const*, v8::internal::wasm::NativeModule*, v8::internal::Counters*, v8::internal::AccountingAllocator*, v8::internal::wasm::ErrorThrower*, bool, v8::internal::wasm::(anonymous namespace)::OnlyLazyFunctions)",93957341449488,93957341450581],["v8::internal::wasm::AsyncStreamingProcessor::~AsyncStreamingProcessor()",93957341450960,93957341451235],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::TaggedIndex, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Smi>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::TaggedIndex, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Smi)",93957335674208,93957335674442],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::Register, v8::internal::TaggedIndex, v8::internal::Operand>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::Register, v8::internal::TaggedIndex, v8::internal::Operand)",93957335677120,93957335677367],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::Operand>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::Operand)",93957335679168,93957335679860],["v8::internal::baseline::detail::ArgumentSettingHelper<int, int>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, int, int)",93957335680992,93957335681156],["v8::internal::GenerateBaselineCode(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SharedFunctionInfo>)",93957335681856,93957335682751],["v8::internal::baseline::BytecodeOffsetIterator::UpdatePointersCallback(void*)",93957335682976,93957335682996],["v8::internal::baseline::BytecodeOffsetIterator::~BytecodeOffsetIterator()",93957335683184,93957335683235],["v8::internal::Accessors::ReconfigureToDataProperty(v8::Local<v8::Name>, v8::Local<v8::Value>, v8::PropertyCallbackInfo<v8::Boolean> const&)",93957335684048,93957335684324],["v8::internal::wasm::JumpTableAssembler::NopBytes(int)",93957341422528,93957341422538],["v8::internal::wasm::(anonymous namespace)::CompilationStateImpl::AddCallback(std::__1::function<void (v8::internal::wasm::CompilationEvent)>)",93957341426608,93957341426788],["v8::internal::wasm::CompilationState::New(std::__1::shared_ptr<v8::internal::wasm::NativeModule> const&, std::__1::shared_ptr<v8::internal::Counters>)",93957341428048,93957341428833],["v8::internal::wasm::CompileToNativeModule(v8::internal::Isolate*, v8::internal::wasm::WasmFeatures const&, v8::internal::wasm::ErrorThrower*, std::__1::shared_ptr<v8::internal::wasm::WasmModule const>, v8::internal::wasm::ModuleWireBytes const&, v8::internal::Handle<v8::internal::FixedArray>*, int)",93957341432368,93957341434113],["v8::internal::wasm::(anonymous namespace)::ExecuteCompilationUnits(std::__1::weak_ptr<v8::internal::wasm::NativeModule>, v8::internal::Counters*, v8::JobDelegate*, v8::internal::wasm::(anonymous namespace)::CompileBaselineOnly)",93957341437632,93957341443368],["v8::internal::wasm::AsyncCompileJob::Start()",93957341444160,93957341444396],["v8::internal::wasm::AsyncCompileJob::~AsyncCompileJob()",93957341444752,93957341445340],["v8::internal::wasm::AsyncCompileJob::GetOrCreateNativeModule(std::__1::shared_ptr<v8::internal::wasm::WasmModule const>, unsigned long)",93957341445552,93957341445771],["v8::internal::baseline::detail::ArgumentSettingHelper<unsigned int, unsigned int, v8::internal::interpreter::Register, v8::internal::RootIndex, v8::internal::interpreter::RegisterList>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, unsigned int, unsigned int, v8::internal::interpreter::Register, v8::internal::RootIndex, v8::internal::interpreter::RegisterList)",93957335671856,93957335672120],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::Operand, v8::internal::TaggedIndex>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::Operand, v8::internal::TaggedIndex)",93957335675088,93957335675302],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Register>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Register)",93957335676736,93957335676922],["void std::__1::__function::__policy_invoker<void (v8::internal::Label*, v8::internal::Label::Distance)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::baseline::BaselineCompiler::VisitForInContinue()::$_8, void (v8::internal::Label*, v8::internal::Label::Distance)> >(std::__1::__function::__policy_storage const*, v8::internal::Label*, v8::internal::Label::Distance)",93957335677600,93957335677912],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::Operand>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::Operand)",93957335678880,93957335679158],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::interpreter::Register, v8::internal::Operand>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::interpreter::Register, v8::internal::Operand)",93957335679872,93957335680280],["v8::internal::baseline::detail::PushAllHelper<v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::Operand>::PushReverse(v8::internal::baseline::BaselineAssembler*, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::Operand)",93957335680640,93957335680977],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::interpreter::Register, v8::internal::TaggedIndex, v8::internal::TaggedIndex>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::interpreter::Register, v8::internal::TaggedIndex, v8::internal::TaggedIndex)",93957335681168,93957335681618],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::SimdReplaceLane(v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueType, unsigned int)",93957341417616,93957341418627],["v8::internal::wasm::TraceMemoryOperation(v8::base::Optional<v8::internal::wasm::ExecutionTier>, v8::internal::wasm::MemoryTracingInfo const*, int, int, unsigned char*)",93957341424336,93957341424877],["v8::internal::wasm::CompilationState::GetWireBytesStorage() const",93957341426400,93957341426478],["v8::internal::wasm::(anonymous namespace)::CompilationStateImpl::WaitForCompilationEvent(v8::internal::wasm::CompilationEvent)",93957341426816,93957341427914],["v8::internal::wasm::CompilationState::set_compilation_id(int)",93957341428032,93957341428044],["v8::internal::wasm::CompileLazy(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmModuleObject>, int)",93957341428848,93957341431459],["v8::internal::wasm::TriggerTierUp(v8::internal::Isolate*, v8::internal::wasm::NativeModule*, int)",93957341431680,93957341432359],["v8::internal::wasm::CompileJsToWasmWrappers(v8::internal::Isolate*, v8::internal::wasm::WasmModule const*, v8::internal::Handle<v8::internal::FixedArray>*)",93957341434128,93957341435684],["void std::__1::__function::__policy_invoker<void (v8::internal::Label*, v8::internal::Label::Distance)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::baseline::BaselineCompiler::VisitIntrinsicIsJSReceiver(v8::internal::interpreter::RegisterList)::$_2, void (v8::internal::Label*, v8::internal::Label::Distance)> >(std::__1::__function::__policy_storage const*, v8::internal::Label*, v8::internal::Label::Distance)",93957335668720,93957335669057],["v8::internal::baseline::detail::PushAllHelper<v8::internal::interpreter::Register, v8::internal::RootIndex, v8::internal::interpreter::RegisterList>::PushReverse(v8::internal::baseline::BaselineAssembler*, v8::internal::interpreter::Register, v8::internal::RootIndex, v8::internal::interpreter::RegisterList)",93957335672880,93957335673151],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::Operand, v8::internal::TaggedIndex, v8::internal::Handle<v8::internal::HeapObject> >::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::Operand, v8::internal::TaggedIndex, v8::internal::Handle<v8::internal::HeapObject>)",93957335674640,93957335674881],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::Smi, v8::internal::TaggedIndex>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::Smi, v8::internal::TaggedIndex)",93957335675776,93957335675962],["v8::internal::baseline::detail::ArgumentSettingHelper<unsigned int, v8::internal::Operand>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, unsigned int, v8::internal::Operand)",93957335676512,93957335676724],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::Handle<v8::internal::ScopeInfo>, unsigned int>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::Handle<v8::internal::ScopeInfo>, unsigned int)",93957335676928,93957335677114],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::TaggedIndex, v8::internal::Operand>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::TaggedIndex, v8::internal::Operand)",93957335677376,93957335677593],["v8::internal::baseline::detail::ArgumentSettingHelper<unsigned int, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::Operand>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, unsigned int, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::Operand)",93957335677920,93957335678373],["v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::RefTest(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value const&, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value const&, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value*)",93957341414688,93957341414894],["v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::SimdOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode, v8::internal::Vector<v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value>, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value*)",93957341421904,93957341422261],["v8::internal::wasm::LocalDeclEncoder::Emit(unsigned char*) const",93957341422896,93957341423540],["v8::internal::wasm::CompilationState::InitCompileJob(v8::internal::wasm::WasmEngine*)",93957341425712,93957341425926],["v8::internal::wasm::CompilationState::SetWireBytesStorage(std::__1::shared_ptr<v8::internal::wasm::WireBytesStorage>)",93957341426208,93957341426395],["v8::internal::wasm::CompilationState::AddCallback(std::__1::function<void (v8::internal::wasm::CompilationEvent)>)",93957341426480,93957341426607],["v8::internal::wasm::CompilationState::WaitForTopTierFinished()",93957341426800,93957341426815],["v8::internal::wasm::CompilationState::InitializeAfterDeserialization()",93957341427920,93957341428011],["v8::internal::baseline::detail::PushAllHelper<unsigned int, v8::internal::RootIndex, v8::internal::interpreter::Register, v8::internal::interpreter::Register>::Push(v8::internal::baseline::BaselineAssembler*, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::Register, v8::internal::interpreter::Register)",93957335666160,93957335666425],["v8::internal::baseline::detail::PushAllHelper<v8::internal::Register, unsigned int, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::RegisterList>::Push(v8::internal::baseline::BaselineAssembler*, v8::internal::Register, unsigned int, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::RegisterList)",93957335670512,93957335670726],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::interpreter::Register, v8::internal::RootIndex, v8::internal::interpreter::RegisterList>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::interpreter::Register, v8::internal::RootIndex, v8::internal::interpreter::RegisterList)",93957335672368,93957335672640],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::interpreter::Register, v8::internal::TaggedIndex>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::interpreter::Register, v8::internal::TaggedIndex)",93957335673520,93957335673918],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Smi>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Smi)",93957335674448,93957335674634],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::TaggedIndex, v8::internal::Handle<v8::internal::HeapObject> >::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::TaggedIndex, v8::internal::Handle<v8::internal::HeapObject>)",93957335674896,93957335675087],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::interpreter::Register, v8::internal::Smi, v8::internal::TaggedIndex>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::interpreter::Register, v8::internal::Smi, v8::internal::TaggedIndex)",93957335675312,93957335675764],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::HeapObject>, unsigned int, v8::internal::Operand>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::HeapObject>, unsigned int, v8::internal::Operand)",93957335675968,93957335676255],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeLoadMem(v8::internal::wasm::LoadType, int)",93957341391808,93957341392713],["v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::BrOnFunc(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value const&, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value*, unsigned int)",93957341415792,93957341416136],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeLoadLane(v8::internal::wasm::WasmOpcode, v8::internal::wasm::LoadType, unsigned int)",93957341419552,93957341420732],["v8::internal::wasm::JumpTableAssembler::EmitJumpSlot(unsigned long)",93957341422336,93957341422383],["v8::internal::wasm::LocalDeclEncoder::Size() const",93957341422544,93957341422891],["v8::internal::wasm::LocalDeclEncoder::AddLocals(unsigned int, v8::internal::wasm::ValueType)",93957341423552,93957341424321],["v8::internal::wasm::CompilationState::~CompilationState()",93957341424880,93957341425712],["v8::internal::wasm::CompilationState::CancelCompilation()",93957341425936,93957341426049],["v8::internal::baseline::detail::ArgumentSettingHelper<unsigned int, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::Register>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, unsigned int, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::Register)",93957335662896,93957335663293],["v8::internal::baseline::detail::PushAllHelper<v8::internal::interpreter::Register, unsigned int, v8::internal::interpreter::RegisterList>::PushReverse(v8::internal::baseline::BaselineAssembler*, v8::internal::interpreter::Register, unsigned int, v8::internal::interpreter::RegisterList)",93957335667216,93957335667486],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::Register, unsigned int, v8::internal::interpreter::RegisterList>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::Register, unsigned int, v8::internal::interpreter::RegisterList)",93957335669424,93957335669862],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::interpreter::Register, v8::internal::Register, unsigned int, unsigned int, v8::internal::interpreter::Register, v8::internal::RootIndex, v8::internal::interpreter::RegisterList>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::interpreter::Register, v8::internal::Register, unsigned int, unsigned int, v8::internal::interpreter::Register, v8::internal::RootIndex, v8::internal::interpreter::RegisterList)",93957335670976,93957335671551],["v8::internal::baseline::detail::ArgumentSettingHelper<unsigned int, v8::internal::interpreter::Register, v8::internal::RootIndex, v8::internal::interpreter::RegisterList>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, unsigned int, v8::internal::interpreter::Register, v8::internal::RootIndex, v8::internal::interpreter::RegisterList)",93957335672128,93957335672356],["v8::internal::baseline::detail::PushAllHelper<v8::internal::interpreter::Register, v8::internal::RootIndex, v8::internal::interpreter::RegisterList>::Push(v8::internal::baseline::BaselineAssembler*, v8::internal::interpreter::Register, v8::internal::RootIndex, v8::internal::interpreter::RegisterList)",93957335672640,93957335672880],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::Register, v8::internal::interpreter::Register, v8::internal::TaggedIndex>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::Register, v8::internal::interpreter::Register, v8::internal::TaggedIndex)",93957335673152,93957335673515],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::Operand, v8::internal::TaggedIndex, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Smi>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::Operand, v8::internal::TaggedIndex, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Smi)",93957335673920,93957335674200],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::TypeCheckBranch(v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Control*, bool, unsigned int)",93957341383648,93957341383827],["v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::StructNewWithRtt(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::StructIndexImmediate<(v8::internal::wasm::Decoder::ValidateFlag)2> const&, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value const&, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value const*, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value*)",93957341413728,93957341414170],["v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::AssertNull(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value const&, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value*)",93957341415136,93957341415243],["v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::BrOnI31(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value const&, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value*, unsigned int)",93957341416496,93957341416840],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeLoadTransformMem(v8::internal::wasm::LoadType, v8::internal::wasm::LoadTransformationKind, unsigned int)",93957341418640,93957341419545],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeStoreLane(v8::internal::wasm::WasmOpcode, v8::internal::wasm::StoreType, unsigned int)",93957341420736,93957341421891],["v8::internal::wasm::JumpTableAssembler::EmitLazyCompileJumpSlot(unsigned int, unsigned long)",93957341422272,93957341422333],["v8::internal::wasm::JumpTableAssembler::EmitFarJumpSlot(unsigned long)",93957341422384,93957341422524],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::RootIndex, v8::internal::interpreter::RegisterList>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::RootIndex, v8::internal::interpreter::RegisterList)",93957335659968,93957335660390],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::Register, v8::internal::interpreter::Register>(v8::internal::Builtins::Name, v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::Register, v8::internal::interpreter::Register)",93957335664288,93957335664652],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::interpreter::Register, unsigned int, v8::internal::interpreter::RegisterList>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::interpreter::Register, unsigned int, v8::internal::interpreter::RegisterList)",93957335666704,93957335666973],["v8::internal::baseline::detail::ArgumentSettingHelper<unsigned int, v8::internal::interpreter::Register, unsigned int, v8::internal::interpreter::RegisterList>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, unsigned int, v8::internal::interpreter::Register, unsigned int, v8::internal::interpreter::RegisterList)",93957335668000,93957335668226],["void std::__1::__function::__policy_invoker<void (v8::internal::Label*, v8::internal::Label::Distance)>::__call_impl<std::__1::__function::__default_alloc_func<v8::internal::baseline::BaselineCompiler::VisitIntrinsicIsArray(v8::internal::interpreter::RegisterList)::$_3, void (v8::internal::Label*, v8::internal::Label::Distance)> >(std::__1::__function::__policy_storage const*, v8::internal::Label*, v8::internal::Label::Distance)",93957335669072,93957335669409],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::interpreter::Register, v8::internal::Register, unsigned int, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::RegisterList>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::interpreter::Register, v8::internal::Register, unsigned int, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::RegisterList)",93957335669872,93957335670501],["v8::internal::baseline::detail::PushAllHelper<v8::internal::Register, unsigned int, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::RegisterList>::PushReverse(v8::internal::baseline::BaselineAssembler*, v8::internal::Register, unsigned int, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::RegisterList)",93957335670736,93957335670973],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::Register, unsigned int, unsigned int, v8::internal::interpreter::Register, v8::internal::RootIndex, v8::internal::interpreter::RegisterList>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::Register, unsigned int, unsigned int, v8::internal::interpreter::Register, v8::internal::RootIndex, v8::internal::interpreter::RegisterList)",93957335671552,93957335671849],["v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::MergeValuesInto(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Control*, v8::internal::wasm::Merge<v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value>*, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value*)",93957341377520,93957341377767],["v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::DoReturnCall(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::CallMode, unsigned int, v8::internal::compiler::WasmGraphBuilder::CheckForNull, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value, v8::internal::Signature<v8::internal::wasm::ValueType> const*, unsigned int, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value const*)",93957341386368,93957341387244],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeGCOpcode(v8::internal::wasm::WasmOpcode, unsigned int)",93957341393936,93957341413651],["v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::ArrayNewDefault(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::ArrayIndexImmediate<(v8::internal::wasm::Decoder::ValidateFlag)2> const&, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value const&, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value const&, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value*)",93957341414480,93957341414588],["v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::RefCast(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value const&, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value const&, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value*)",93957341414896,93957341415125],["v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::BrOnCast(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value const&, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value const&, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value*, unsigned int)",93957341415248,93957341415779],["v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::BrOnData(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value const&, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value*, unsigned int)",93957341416144,93957341416488],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::SimdExtractLane(v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueType, unsigned int)",93957341416848,93957341417603],["v8::internal::baseline::detail::ArgumentSettingHelper<unsigned int, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::Register>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, unsigned int, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::Register)",93957335656960,93957335657185],["v8::internal::baseline::detail::ArgumentSettingHelper<unsigned int, unsigned int, v8::internal::RootIndex>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, unsigned int, unsigned int, v8::internal::RootIndex)",93957335661568,93957335661803],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::RootIndex, v8::internal::interpreter::Register>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::RootIndex, v8::internal::interpreter::Register)",93957335663664,93957335663996],["v8::internal::baseline::detail::ArgumentSettingHelper<unsigned int, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::Register, v8::internal::interpreter::Register>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, unsigned int, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::Register, v8::internal::interpreter::Register)",93957335665200,93957335665445],["v8::internal::baseline::detail::PushAllHelper<unsigned int, v8::internal::RootIndex, v8::internal::interpreter::Register, v8::internal::interpreter::Register>::PushReverse(v8::internal::baseline::BaselineAssembler*, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::Register, v8::internal::interpreter::Register)",93957335666432,93957335666698],["v8::internal::baseline::detail::PushAllHelper<v8::internal::interpreter::Register, unsigned int, v8::internal::interpreter::RegisterList>::Push(v8::internal::baseline::BaselineAssembler*, v8::internal::interpreter::Register, unsigned int, v8::internal::interpreter::RegisterList)",93957335666976,93957335667216],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::interpreter::Register, unsigned int, v8::internal::interpreter::Register, unsigned int, v8::internal::interpreter::RegisterList>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::interpreter::Register, unsigned int, v8::internal::interpreter::Register, unsigned int, v8::internal::interpreter::RegisterList)",93957335667488,93957335667993],["void v8::internal::baseline::detail::MoveArgumentsForDescriptor<v8::internal::Register, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::RegisterList>(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, v8::internal::Register, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::RegisterList)",93957335668240,93957335668710],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::PopTypeError(int, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value, v8::internal::wasm::ValueType)",93957341373856,93957341374049],["v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::CheckForExceptionImpl(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::compiler::Node*)",93957341380256,93957341380847],["v8::base::SmallVector<v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value, 2ul>::SmallVector(v8::base::SmallVector<v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value, 2ul> const&)",93957341385200,93957341385339],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::BuildSimpleOperator(v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueType, v8::internal::wasm::ValueType)",93957341390176,93957341390849],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeStoreMem(v8::internal::wasm::StoreType, int)",93957341392720,93957341393934],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::PopTypeError(int, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)",93957341413664,93957341413725],["v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::StructNewDefault(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::StructIndexImmediate<(v8::internal::wasm::Decoder::ValidateFlag)2> const&, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value const&, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value*)",93957341414176,93957341414475],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::ObjectRelatedWithRtt(v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value)",93957341414592,93957341414687],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::interpreter::Register, v8::internal::interpreter::Register>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::interpreter::Register, v8::internal::interpreter::Register)",93957335653488,93957335653967],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::RegisterList>(v8::internal::Builtins::Name, v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::RegisterList)",93957335658128,93957335658483],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::RootIndex>(v8::internal::Builtins::Name, v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::RootIndex)",93957335660720,93957335661070],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::Register>(v8::internal::Builtins::Name, v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::Register)",93957335662000,93957335662356],["v8::internal::baseline::detail::ArgumentSettingHelper<unsigned int, v8::internal::RootIndex, v8::internal::interpreter::Register>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::Register)",93957335663296,93957335663662],["v8::internal::baseline::detail::PushAllHelper<v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::Register>::PushReverse(v8::internal::baseline::BaselineAssembler*, v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::Register)",93957335664000,93957335664284],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::Register, v8::internal::interpreter::Register>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::Register, v8::internal::interpreter::Register)",93957335664656,93957335665187],["v8::internal::baseline::detail::ArgumentSettingHelper<unsigned int, v8::internal::RootIndex, v8::internal::interpreter::Register, v8::internal::interpreter::Register>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::Register, v8::internal::interpreter::Register)",93957335665456,93957335666160],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeAtomic(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341367968,93957341370944],["void std::__1::vector<v8::internal::compiler::WasmLoopInfo, std::__1::allocator<v8::internal::compiler::WasmLoopInfo> >::__emplace_back_slow_path<v8::internal::compiler::Node*&, unsigned int&, bool>(v8::internal::compiler::Node*&, unsigned int&, bool&&)",93957341375424,93957341375721],["_ZNSt3__16vectorIN2v88internal6HandleINS2_3MapEEENS2_13ZoneAllocatorIS5_EEE6assignIPS5_EENS_9enable_ifIXaasr27__is_cpp17_forward_iteratorIT_EE5valuesr16is_constructibleIS5_NS_15iterator_traitsISC_E9referenceEEE5valueEvE4typeESC_SC_",93957341378656,93957341379822],["v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::DoReturn(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, unsigned int)",93957341382240,93957341383486],["v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::BrOrRet(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, unsigned int, unsigned int)",93957341383840,93957341385194],["v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::DoCall(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::CallMode, unsigned int, v8::internal::compiler::WasmGraphBuilder::CheckForNull, v8::internal::compiler::Node*, v8::internal::Signature<v8::internal::wasm::ValueType> const*, unsigned int, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value const*, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value*)",93957341385344,93957341386357],["std::__1::vector<v8::internal::compiler::Node*, v8::internal::ZoneAllocator<v8::internal::compiler::Node*> >::insert(std::__1::__wrap_iter<v8::internal::compiler::Node* const*>, unsigned long, v8::internal::compiler::Node* const&)",93957341387248,93957341390173],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::BuildSimpleOperator(v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueType, v8::internal::wasm::ValueType, v8::internal::wasm::ValueType)",93957341390864,93957341391802],["v8::internal::baseline::detail::PushAllHelper<v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::interpreter::RegisterList>::PushReverse(v8::internal::baseline::BaselineAssembler*, v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::interpreter::RegisterList)",93957335650784,93957335651078],["v8::internal::baseline::detail::PushAllHelper<unsigned int, unsigned int, v8::internal::interpreter::Register, v8::internal::interpreter::Register>::PushReverse(v8::internal::baseline::BaselineAssembler*, unsigned int, unsigned int, v8::internal::interpreter::Register, v8::internal::interpreter::Register)",93957335655504,93957335655769],["v8::internal::baseline::detail::PushAllHelper<v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::Register>::Push(v8::internal::baseline::BaselineAssembler*, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::Register)",93957335657472,93957335657793],["v8::internal::baseline::detail::ArgumentSettingHelper<unsigned int, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::RegisterList>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, unsigned int, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::RegisterList)",93957335659024,93957335659511],["v8::internal::baseline::detail::PushAllHelper<v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::RegisterList>::PushReverse(v8::internal::baseline::BaselineAssembler*, v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::RegisterList)",93957335660400,93957335660706],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::RootIndex>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::RootIndex)",93957335661072,93957335661562],["v8::internal::baseline::detail::ArgumentSettingHelper<unsigned int, v8::internal::RootIndex>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, unsigned int, v8::internal::RootIndex)",93957335661808,93957335662000],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::Register>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::Register)",93957335662368,93957335662887],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeRefIsNull(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341352688,93957341353365],["v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::WrapLocalsAtLoopExit(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Control*)",93957341371616,93957341371985],["v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Steal(v8::internal::Zone*, v8::internal::wasm::(anonymous namespace)::SsaEnv*)",93957341374512,93957341374787],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::TypeCheckMergeValues(v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Control*, unsigned int, v8::internal::wasm::Merge<v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value>*)",93957341375888,93957341376216],["v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Goto(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::(anonymous namespace)::SsaEnv*)",93957341377776,93957341378650],["v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::TerminateThrow(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*)",93957341379824,93957341380254],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::PopControl(v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Control*)",93957341380848,93957341382233],["v8::base::SmallVector<v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value, 2ul>::Grow(unsigned long)",93957341383488,93957341383646],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::Smi, unsigned int>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::Smi, unsigned int)",93957335647744,93957335647925],["v8::internal::baseline::detail::ArgumentSettingHelper<unsigned int, v8::internal::interpreter::Register>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, unsigned int, v8::internal::interpreter::Register)",93957335652304,93957335652629],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::interpreter::Register, v8::internal::interpreter::Register>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::interpreter::Register, v8::internal::interpreter::Register)",93957335654672,93957335655217],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::Register>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::Register)",93957335656144,93957335656674],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::Register>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::Register)",93957335657200,93957335657467],["v8::internal::baseline::detail::PushAllHelper<v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::Register>::PushReverse(v8::internal::baseline::BaselineAssembler*, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::Register)",93957335657808,93957335658126],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::RegisterList>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::RegisterList)",93957335658496,93957335659015],["v8::internal::baseline::detail::ArgumentSettingHelper<unsigned int, v8::internal::RootIndex, v8::internal::interpreter::RegisterList>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::RegisterList)",93957335659520,93957335659958],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF32ReinterpretI32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341352240,93957341352271],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeRefEq(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341355600,93957341355887],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::EndControl()",93957341371152,93957341371298],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::SetBlockType(v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Control*, v8::internal::wasm::BlockTypeImmediate<(v8::internal::wasm::Decoder::ValidateFlag)2>&, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value*)",93957341372720,93957341373395],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::PopTypeError(int, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value, char const*)",93957341374064,93957341374499],["v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Split(v8::internal::Zone*, v8::internal::wasm::(anonymous namespace)::SsaEnv*)",93957341374800,93957341375413],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::TypeCheckFallThru()",93957341375728,93957341375875],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::TypeCheckUnreachableMerge(v8::internal::wasm::Merge<v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value>&, bool, unsigned int)",93957341376224,93957341377516],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::Register, v8::internal::Handle<v8::internal::Name>, v8::internal::TaggedIndex>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::Register, v8::internal::Handle<v8::internal::Name>, v8::internal::TaggedIndex)",93957335644896,93957335645125],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::interpreter::RegisterList>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::interpreter::RegisterList)",93957335648944,93957335649431],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::interpreter::Register>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::interpreter::Register)",93957335651440,93957335651928],["v8::internal::baseline::detail::PushAllHelper<v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::interpreter::Register>::PushReverse(v8::internal::baseline::BaselineAssembler*, v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::interpreter::Register)",93957335652848,93957335653116],["v8::internal::baseline::detail::ArgumentSettingHelper<unsigned int, unsigned int, v8::internal::interpreter::Register, v8::internal::interpreter::Register>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, unsigned int, unsigned int, v8::internal::interpreter::Register, v8::internal::interpreter::Register)",93957335653968,93957335654667],["v8::internal::baseline::detail::PushAllHelper<unsigned int, unsigned int, v8::internal::interpreter::Register, v8::internal::interpreter::Register>::Push(v8::internal::baseline::BaselineAssembler*, unsigned int, unsigned int, v8::internal::interpreter::Register, v8::internal::interpreter::Register)",93957335655232,93957335655497],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::Register>(v8::internal::Builtins::Name, v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::Register)",93957335655776,93957335656140],["v8::internal::baseline::detail::ArgumentSettingHelper<unsigned int, unsigned int, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::Register>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, unsigned int, unsigned int, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::Register)",93957335656688,93957335656949],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF32ConvertF64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341351984,93957341352015],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64SExtendI8(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341352368,93957341352399],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeRefAsNonNull(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341353696,93957341354199],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeNumeric(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341356112,93957341364588],["v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Trap(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::TrapReason)",93957341370944,93957341371149],["v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::BuildNestedLoopExits(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, unsigned int, bool, v8::base::SmallVector<v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::Value, 8ul>&, v8::internal::compiler::Node**)",93957341371312,93957341371615],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::PushControl(v8::internal::wasm::ControlKind, unsigned int, unsigned int)",93957341372000,93957341372710],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::EnsureStackArguments_Slow(int, unsigned int)",93957341373408,93957341373841],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::Handle<v8::internal::Name>, v8::internal::TaggedIndex>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::Handle<v8::internal::Name>, v8::internal::TaggedIndex)",93957335642496,93957335642687],["v8::internal::baseline::detail::PushAllHelper<v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::Register, v8::internal::TaggedIndex>::PushReverse(v8::internal::baseline::BaselineAssembler*, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::Register, v8::internal::TaggedIndex)",93957335646592,93957335646858],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::Register, v8::internal::Smi>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::Register, v8::internal::Smi)",93957335648400,93957335648581],["v8::internal::baseline::detail::ArgumentSettingHelper<unsigned int, v8::internal::interpreter::RegisterList>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, unsigned int, v8::internal::interpreter::RegisterList)",93957335649888,93957335650310],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::interpreter::Register>(v8::internal::Builtins::Name, v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::interpreter::Register)",93957335651088,93957335651438],["v8::internal::baseline::detail::ArgumentSettingHelper<unsigned int, unsigned int, v8::internal::interpreter::Register>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, unsigned int, unsigned int, v8::internal::interpreter::Register)",93957335651936,93957335652299],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::interpreter::Register>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::interpreter::Register)",93957335652640,93957335652838],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::interpreter::Register, v8::internal::interpreter::Register>(v8::internal::Builtins::Name, v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::interpreter::Register, v8::internal::interpreter::Register)",93957335653120,93957335653476],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64SConvertF32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341351728,93957341351759],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF64UConvertI64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341352112,93957341352143],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32SExtendI8(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341352304,93957341352335],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64SExtendI32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341352432,93957341352463],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeRefFunc(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341353376,93957341353684],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeBrOnNull(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341354208,93957341355594],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeGC(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341355888,93957341356110],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeSimd(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341364592,93957341367955],["void std::__1::__function::__policy_invoker<void (unsigned char)>::__call_impl<std::__1::__function::__default_alloc_func<v8::base::VLQEncodeUnsigned<std::__1::allocator<unsigned char> >(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*, unsigned int)::{lambda(unsigned char)#1}, void (unsigned char)> >(std::__1::__function::__policy_storage const*, unsigned char)",93957335640848,93957335640875],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::TaggedIndex, v8::internal::TaggedIndex>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::TaggedIndex, v8::internal::TaggedIndex)",93957335643360,93957335643534],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::interpreter::Register, v8::internal::Handle<v8::internal::Name>, v8::internal::Register, v8::internal::TaggedIndex>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::interpreter::Register, v8::internal::Handle<v8::internal::Name>, v8::internal::Register, v8::internal::TaggedIndex)",93957335645600,93957335646087],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::Register, unsigned int>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::Register, unsigned int)",93957335647312,93957335647493],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::interpreter::Register, v8::internal::Register, v8::internal::Smi>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::interpreter::Register, v8::internal::Register, v8::internal::Smi)",93957335647936,93957335648386],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::interpreter::RegisterList>(v8::internal::Builtins::Name, v8::internal::interpreter::Register, unsigned int, unsigned int, v8::internal::interpreter::RegisterList)",93957335648592,93957335648942],["v8::internal::baseline::detail::ArgumentSettingHelper<unsigned int, unsigned int, v8::internal::interpreter::RegisterList>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, unsigned int, unsigned int, v8::internal::interpreter::RegisterList)",93957335649440,93957335649878],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::interpreter::RegisterList>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::interpreter::RegisterList)",93957335650320,93957335650773],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF64CopySign(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341351456,93957341351493],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF32SConvertI32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341351856,93957341351887],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF64UConvertI32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341352048,93957341352079],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32ReinterpretF32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341352176,93957341352207],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF64ReinterpretI64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341352272,93957341352303],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32SExtendI16(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341352336,93957341352367],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64SExtendI16(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341352400,93957341352431],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeRefNull(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341352464,93957341352683],["void v8::internal::baseline::BaselineCompiler::CallRuntime<v8::internal::Register, v8::internal::Operand>(v8::internal::Runtime::FunctionId, v8::internal::Register, v8::internal::Operand)",93957335639232,93957335639438],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::Register, int, v8::internal::Register, v8::internal::Handle<v8::internal::BytecodeArray> >::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::Register, int, v8::internal::Register, v8::internal::Handle<v8::internal::BytecodeArray>)",93957335641744,93957335642001],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::Register, v8::internal::TaggedIndex>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::Register, v8::internal::TaggedIndex)",93957335642928,93957335643114],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::interpreter::Register, v8::internal::Handle<v8::internal::Name> >::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::interpreter::Register, v8::internal::Handle<v8::internal::Name>)",93957335644000,93957335644398],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::interpreter::Register, v8::internal::Register, v8::internal::TaggedIndex>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::interpreter::Register, v8::internal::Register, v8::internal::TaggedIndex)",93957335645136,93957335645585],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::Register, v8::internal::TaggedIndex>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::Register, v8::internal::TaggedIndex)",93957335646096,93957335646583],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::interpreter::Register, v8::internal::Register, unsigned int>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::interpreter::Register, v8::internal::Register, unsigned int)",93957335646864,93957335647312],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::Register, v8::internal::Smi, unsigned int>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::Register, v8::internal::Smi, unsigned int)",93957335647504,93957335647733],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF64NearestInt(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341351104,93957341351135],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32SConvertF64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341351600,93957341351631],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64SConvertF64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341351792,93957341351823],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF32SConvertI64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341351920,93957341351951],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF64SConvertI32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341352016,93957341352047],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF64SConvertI64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341352080,93957341352111],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF64ConvertF32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341352144,93957341352175],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64ReinterpretF64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341352208,93957341352239],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Register>(v8::internal::Builtins::Name, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Register)",93957335636272,93957335636599],["v8::internal::MacroAssembler::~MacroAssembler()",93957335640352,93957335640455],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::Register, v8::internal::Register, v8::internal::Register, int, v8::internal::Register, v8::internal::Handle<v8::internal::BytecodeArray> >::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::Register, v8::internal::Register, v8::internal::Register, int, v8::internal::Register, v8::internal::Handle<v8::internal::BytecodeArray>)",93957335641120,93957335641446],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::Register, v8::internal::Handle<v8::internal::BytecodeArray> >::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::Register, v8::internal::Handle<v8::internal::BytecodeArray>)",93957335642256,93957335642442],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::Handle<v8::internal::Name>, v8::internal::Register, v8::internal::TaggedIndex>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::Handle<v8::internal::Name>, v8::internal::Register, v8::internal::TaggedIndex)",93957335642688,93957335642921],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::Handle<v8::internal::Name>, v8::internal::TaggedIndex, v8::internal::TaggedIndex>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::Handle<v8::internal::Name>, v8::internal::TaggedIndex, v8::internal::TaggedIndex)",93957335643120,93957335643354],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::interpreter::Register, v8::internal::Handle<v8::internal::Name>, v8::internal::TaggedIndex>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::interpreter::Register, v8::internal::Handle<v8::internal::Name>, v8::internal::TaggedIndex)",93957335643536,93957335643988],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::interpreter::Register, v8::internal::Register, v8::internal::Handle<v8::internal::Name>, v8::internal::TaggedIndex>::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::interpreter::Register, v8::internal::Register, v8::internal::Handle<v8::internal::Name>, v8::internal::TaggedIndex)",93957335644400,93957335644888],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF32Min(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341350800,93957341350837],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF64Mul(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341351264,93957341351301],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32SConvertF32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341351536,93957341351567],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64SConvertI32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341351664,93957341351695],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64UConvertF32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341351760,93957341351791],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64UConvertF64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341351824,93957341351855],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF32UConvertI32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341351888,93957341351919],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF32UConvertI64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341351952,93957341351983],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::interpreter::Register, v8::internal::Register, unsigned int, unsigned int, v8::internal::interpreter::Register, v8::internal::RootIndex, v8::internal::interpreter::RegisterList>(v8::internal::Builtins::Name, v8::internal::interpreter::Register, v8::internal::Register, unsigned int, unsigned int, v8::internal::interpreter::Register, v8::internal::RootIndex, v8::internal::interpreter::RegisterList)",93957335633568,93957335633936],["v8::internal::baseline::BaselineAssembler::Switch(v8::internal::Register, int, v8::internal::Label**, int)",93957335637664,93957335638146],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::Operand, v8::internal::Smi>(v8::internal::Builtins::Name, v8::internal::Operand, v8::internal::Smi)",93957335639776,93957335640111],["v8::internal::Assembler::~Assembler()",93957335640672,93957335640767],["void std::__1::__invoke_void_return_wrapper<void, true>::__call<v8::base::VLQEncodeUnsigned<std::__1::allocator<unsigned char> >(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*, unsigned int)::{lambda(unsigned char)#1}&, unsigned char>(v8::base::VLQEncodeUnsigned<std::__1::allocator<unsigned char> >(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*, unsigned int)::{lambda(unsigned char)#1}&, unsigned char&&)",93957335640880,93957335641113],["v8::internal::baseline::detail::ArgumentSettingHelper<v8::internal::Register, v8::internal::Register, int, v8::internal::Register, v8::internal::Handle<v8::internal::BytecodeArray> >::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, v8::internal::Register, v8::internal::Register, int, v8::internal::Register, v8::internal::Handle<v8::internal::BytecodeArray>)",93957335641456,93957335641743],["v8::internal::baseline::detail::ArgumentSettingHelper<int, v8::internal::Register, v8::internal::Handle<v8::internal::BytecodeArray> >::Set(v8::internal::baseline::BaselineAssembler*, v8::internal::CallInterfaceDescriptor, int, int, v8::internal::Register, v8::internal::Handle<v8::internal::BytecodeArray>)",93957335642016,93957335642245],["v8::internal::CallInterfaceDescriptor::InitializePlatformIndependent(v8::internal::CallInterfaceDescriptorData*)",93957335642448,93957335642492],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF32Floor(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341350480,93957341350511],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF64Neg(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341350976,93957341351007],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF64Add(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341351168,93957341351205],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF64Min(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341351360,93957341351397],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32ConvertI64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341351504,93957341351535],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32UConvertF32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341351568,93957341351599],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32UConvertF64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341351632,93957341351663],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64UConvertI32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341351696,93957341351727],["void v8::internal::baseline::BaselineCompiler::CallRuntime<v8::internal::interpreter::RegisterList>(v8::internal::Runtime::FunctionId, v8::internal::interpreter::RegisterList)",93957335631024,93957335631315],["void v8::internal::baseline::BaselineCompiler::CallRuntime<v8::internal::Operand, v8::internal::TaggedIndex, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Smi>(v8::internal::Runtime::FunctionId, v8::internal::Operand, v8::internal::TaggedIndex, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Smi)",93957335634992,93957335635240],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::Handle<v8::internal::ScopeInfo>, unsigned int>(v8::internal::Builtins::Name, v8::internal::Handle<v8::internal::ScopeInfo>, unsigned int)",93957335636928,93957335637255],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<unsigned int, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::Operand>(v8::internal::Builtins::Name, unsigned int, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::Operand)",93957335638560,93957335638919],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::interpreter::Register, v8::internal::TaggedIndex, v8::internal::TaggedIndex>(v8::internal::Builtins::Name, v8::internal::interpreter::Register, v8::internal::TaggedIndex, v8::internal::TaggedIndex)",93957335639440,93957335639775],["v8::internal::AssemblerBase::RecordComment(char const*)",93957335640112,93957335640338],["std::__1::__deque_base<int, std::__1::allocator<int> >::~__deque_base()",93957335640464,93957335640671],["std::__1::__tree<std::__1::__value_type<int, std::__1::vector<v8::internal::HeapObject, std::__1::allocator<v8::internal::HeapObject> > >, std::__1::__map_value_compare<int, std::__1::__value_type<int, std::__1::vector<v8::internal::HeapObject, std::__1::allocator<v8::internal::HeapObject> > >, std::__1::less<int>, true>, std::__1::allocator<std::__1::__value_type<int, std::__1::vector<v8::internal::HeapObject, std::__1::allocator<v8::internal::HeapObject> > > > >::destroy(std::__1::__tree_node<std::__1::__value_type<int, std::__1::vector<v8::internal::HeapObject, std::__1::allocator<v8::internal::HeapObject> > >, void*>*)",93957335640768,93957335640837],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64Shl(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341350144,93957341350181],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF32Add(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341350608,93957341350645],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF32CopySign(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341350896,93957341350933],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF64Floor(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341351040,93957341351071],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF64Sqrt(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341351136,93957341351167],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF64Sub(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341351216,93957341351253],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF64Div(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341351312,93957341351349],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF64Max(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341351408,93957341351445],["void v8::internal::baseline::BaselineCompiler::CallRuntime<v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::Register, v8::internal::Smi, v8::internal::Operand, v8::internal::TaggedIndex>(v8::internal::Runtime::FunctionId, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::Register, v8::internal::Smi, v8::internal::Operand, v8::internal::TaggedIndex)",93957335628272,93957335628750],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::Register, unsigned int, v8::internal::interpreter::RegisterList>(v8::internal::Builtins::Name, v8::internal::Register, unsigned int, v8::internal::interpreter::RegisterList)",93957335632256,93957335632591],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::Operand, v8::internal::TaggedIndex, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Smi>(v8::internal::Builtins::Name, v8::internal::Operand, v8::internal::TaggedIndex, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Smi)",93957335634272,93957335634627],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::interpreter::Register, v8::internal::Smi, v8::internal::TaggedIndex>(v8::internal::Builtins::Name, v8::internal::interpreter::Register, v8::internal::Smi, v8::internal::TaggedIndex)",93957335635584,93957335635919],["void v8::internal::baseline::BaselineCompiler::CallRuntime<v8::internal::interpreter::Register, v8::internal::Handle<v8::internal::ScopeInfo> >(v8::internal::Runtime::FunctionId, v8::internal::interpreter::Register, v8::internal::Handle<v8::internal::ScopeInfo>)",93957335636608,93957335636916],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::Operand>(v8::internal::Builtins::Name, v8::internal::Operand)",93957335637264,93957335637653],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::Register, v8::internal::TaggedIndex, v8::internal::Operand>(v8::internal::Builtins::Name, v8::internal::Register, v8::internal::TaggedIndex, v8::internal::Operand)",93957335638160,93957335638549],["void v8::internal::baseline::BaselineCompiler::TailCallBuiltin<int, int>(v8::internal::Builtins::Name, int, int)",93957335638928,93957335639218],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64Mul(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341349760,93957341349797],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64Ror(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341350336,93957341350373],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF32NearestInt(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341350544,93957341350575],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF32Mul(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341350704,93957341350741],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF32Max(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341350848,93957341350885],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF64Abs(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341350944,93957341350975],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF64Ceil(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341351008,93957341351039],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF64Trunc(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341351072,93957341351103],["void v8::internal::baseline::BaselineCompiler::CallRuntime<v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Register>(v8::internal::Runtime::FunctionId, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Register)",93957335625680,93957335625871],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::Register, unsigned int>(v8::internal::Builtins::Name, v8::internal::Register, unsigned int)",93957335629648,93957335629975],["v8::internal::baseline::BaselineCompiler::VisitIntrinsicIsSmi(v8::internal::interpreter::RegisterList)",93957335631680,93957335631926],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<>(v8::internal::Builtins::Name)",93957335632912,93957335633199],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::Register, v8::internal::interpreter::Register, v8::internal::TaggedIndex>(v8::internal::Builtins::Name, v8::internal::Register, v8::internal::interpreter::Register, v8::internal::TaggedIndex)",93957335633936,93957335634271],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::Operand, v8::internal::TaggedIndex, v8::internal::Handle<v8::internal::HeapObject> >(v8::internal::Builtins::Name, v8::internal::Operand, v8::internal::TaggedIndex, v8::internal::Handle<v8::internal::HeapObject>)",93957335634640,93957335634990],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::Operand, v8::internal::TaggedIndex>(v8::internal::Builtins::Name, v8::internal::Operand, v8::internal::TaggedIndex)",93957335635248,93957335635583],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::HeapObject>, unsigned int, v8::internal::Operand>(v8::internal::Builtins::Name, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::HeapObject>, unsigned int, v8::internal::Operand)",93957335635920,93957335636268],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32ShrU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341349424,93957341349461],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64RemU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341349952,93957341349989],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64ShrU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341350240,93957341350277],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF32Neg(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341350416,93957341350447],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF32Trunc(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341350512,93957341350543],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF32Sqrt(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341350576,93957341350607],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF32Sub(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341350656,93957341350693],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF32Div(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341350752,93957341350789],["v8::internal::baseline::BaselineAssembler::AddToInterruptBudget(int)",93957335622880,93957335623288],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::interpreter::Register, v8::internal::Register, v8::internal::TaggedIndex>(v8::internal::Builtins::Name, v8::internal::interpreter::Register, v8::internal::Register, v8::internal::TaggedIndex)",93957335626896,93957335627231],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::interpreter::Register, v8::internal::Register, unsigned int>(v8::internal::Builtins::Name, v8::internal::interpreter::Register, v8::internal::Register, unsigned int)",93957335628976,93957335629311],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::interpreter::Register, unsigned int, v8::internal::interpreter::RegisterList>(v8::internal::Builtins::Name, v8::internal::interpreter::Register, unsigned int, v8::internal::interpreter::RegisterList)",93957335630320,93957335630655],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::Register, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::RegisterList>(v8::internal::Builtins::Name, v8::internal::Register, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::RegisterList)",93957335631328,93957335631675],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::interpreter::RegisterList>(v8::internal::Builtins::Name, v8::internal::interpreter::RegisterList)",93957335631936,93957335632253],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::interpreter::Register>(v8::internal::Builtins::Name, v8::internal::interpreter::Register)",93957335632592,93957335632909],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::interpreter::Register, v8::internal::Register, unsigned int, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::RegisterList>(v8::internal::Builtins::Name, v8::internal::interpreter::Register, v8::internal::Register, unsigned int, unsigned int, v8::internal::RootIndex, v8::internal::interpreter::RegisterList)",93957335633200,93957335633568],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32DivU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341349040,93957341349077],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64Ctz(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341349600,93957341349631],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64DivU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341349856,93957341349893],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64Ior(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341350048,93957341350085],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64ShrS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341350192,93957341350229],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64Rol(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341350288,93957341350325],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF32Abs(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341350384,93957341350415],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF32Ceil(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341350448,93957341350479],["v8::internal::baseline::BaselineCompiler::VisitThrowIfNotSuperConstructor()",93957335617904,93957335618428],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::Handle<v8::internal::Name>, v8::internal::TaggedIndex>(v8::internal::Builtins::Name, v8::internal::Handle<v8::internal::Name>, v8::internal::TaggedIndex)",93957335624304,93957335624631],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::interpreter::Register, v8::internal::Handle<v8::internal::Name> >(v8::internal::Builtins::Name, v8::internal::interpreter::Register, v8::internal::Handle<v8::internal::Name>)",93957335626208,93957335626535],["void v8::internal::baseline::BaselineCompiler::CallRuntime<v8::internal::interpreter::Register, v8::internal::Handle<v8::internal::Name>, v8::internal::Register>(v8::internal::Runtime::FunctionId, v8::internal::interpreter::Register, v8::internal::Handle<v8::internal::Name>, v8::internal::Register)",93957335627584,93957335627907],["void v8::internal::baseline::BaselineCompiler::CallRuntime<v8::internal::Smi, v8::internal::Register, v8::internal::Operand>(v8::internal::Runtime::FunctionId, v8::internal::Smi, v8::internal::Register, v8::internal::Operand)",93957335628752,93957335628976],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::Register, v8::internal::Smi, unsigned int>(v8::internal::Builtins::Name, v8::internal::Register, v8::internal::Smi, unsigned int)",93957335629312,93957335629647],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::interpreter::Register, v8::internal::Register, v8::internal::Smi>(v8::internal::Builtins::Name, v8::internal::interpreter::Register, v8::internal::Register, v8::internal::Smi)",93957335629984,93957335630319],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::interpreter::Register, unsigned int, v8::internal::interpreter::Register, unsigned int, v8::internal::interpreter::RegisterList>(v8::internal::Builtins::Name, v8::internal::interpreter::Register, unsigned int, v8::internal::interpreter::Register, unsigned int, v8::internal::interpreter::RegisterList)",93957335630656,93957335631011],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF64Ge(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341348704,93957341348741],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32Ior(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341349232,93957341349269],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32Ror(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341349520,93957341349557],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64Add(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341349664,93957341349701],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64DivS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341349808,93957341349845],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64RemS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341349904,93957341349941],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64And(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341350000,93957341350037],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64Xor(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341350096,93957341350133],["v8::internal::baseline::BaselineCompiler::VisitForInStep()",93957335616032,93957335616176],["v8::internal::baseline::BaselineCompiler::VisitGetIterator()",93957335621936,93957335622034],["v8::internal::baseline::BaselineCompiler::JumpIfToBoolean(bool, v8::internal::Register, v8::internal::Label*, v8::internal::Label::Distance)",93957335623552,93957335623908],["v8::internal::baseline::BaselineAssembler::StoreTaggedFieldWithWriteBarrier(v8::internal::Register, int, v8::internal::Register)",93957335624976,93957335625341],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::interpreter::Register, v8::internal::Handle<v8::internal::Name>, v8::internal::TaggedIndex>(v8::internal::Builtins::Name, v8::internal::interpreter::Register, v8::internal::Handle<v8::internal::Name>, v8::internal::TaggedIndex)",93957335625872,93957335626207],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::interpreter::Register, v8::internal::Register, v8::internal::Handle<v8::internal::Name>, v8::internal::TaggedIndex>(v8::internal::Builtins::Name, v8::internal::interpreter::Register, v8::internal::Register, v8::internal::Handle<v8::internal::Name>, v8::internal::TaggedIndex)",93957335626544,93957335626894],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::interpreter::Register, v8::internal::Handle<v8::internal::Name>, v8::internal::Register, v8::internal::TaggedIndex>(v8::internal::Builtins::Name, v8::internal::interpreter::Register, v8::internal::Handle<v8::internal::Name>, v8::internal::Register, v8::internal::TaggedIndex)",93957335627232,93957335627582],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::Register, v8::internal::TaggedIndex>(v8::internal::Builtins::Name, v8::internal::interpreter::Register, v8::internal::interpreter::Register, v8::internal::Register, v8::internal::TaggedIndex)",93957335627920,93957335628270],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF32Gt(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341348320,93957341348357],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32Add(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341348848,93957341348885],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32RemU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341349136,93957341349173],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32Shl(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341349328,93957341349365],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32Rol(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341349472,93957341349509],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64Clz(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341349568,93957341349599],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64Popcnt(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341349632,93957341349663],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64Sub(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341349712,93957341349749],["v8::internal::baseline::BaselineCompiler::VisitJumpIfToBooleanFalse()",93957335613808,93957335613936],["v8::internal::baseline::BaselineCompiler::VisitReturn()",93957335616992,93957335617124],["v8::internal::baseline::BaselineCompiler::VisitSuspendGenerator()",93957335619600,93957335621080],["v8::internal::baseline::BaselineCompiler::VisitAbort()",93957335622192,93957335622395],["v8::internal::baseline::BaselineCompiler::BuildForwardJumpLabel()",93957335623296,93957335623547],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::Register>(v8::internal::Builtins::Name, v8::internal::Register)",93957335623920,93957335624297],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::Handle<v8::internal::Name>, v8::internal::Register, v8::internal::TaggedIndex>(v8::internal::Builtins::Name, v8::internal::Handle<v8::internal::Name>, v8::internal::Register, v8::internal::TaggedIndex)",93957335624640,93957335624975],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::Handle<v8::internal::Name>, v8::internal::TaggedIndex, v8::internal::TaggedIndex>(v8::internal::Builtins::Name, v8::internal::Handle<v8::internal::Name>, v8::internal::TaggedIndex, v8::internal::TaggedIndex)",93957335625344,93957335625679],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64GtU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341347936,93957341347973],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF64Ne(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341348512,93957341348549],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32Ctz(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341348784,93957341348815],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32Mul(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341348944,93957341348981],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32RemS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341349088,93957341349125],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32And(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341349184,93957341349221],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32Xor(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341349280,93957341349317],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32ShrS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341349376,93957341349413],["v8::internal::baseline::BaselineCompiler::VisitJumpConstant()",93957335612640,93957335612713],["v8::internal::baseline::BaselineCompiler::VisitForInEnumerate()",93957335615136,93957335615180],["v8::internal::baseline::BaselineCompiler::VisitThrow()",93957335616640,93957335616809],["v8::internal::baseline::BaselineCompiler::VisitThrowSuperNotCalledIfHole()",93957335617424,93957335617656],["v8::internal::baseline::BaselineCompiler::VisitSwitchOnGeneratorState()",93957335618432,93957335619590],["v8::internal::baseline::BaselineCompiler::VisitResumeGenerator()",93957335621088,93957335621931],["v8::internal::baseline::BaselineCompiler::VisitIncBlockCounter()",93957335622048,93957335622186],["v8::internal::baseline::BaselineCompiler::UpdateInterruptBudgetAndJumpToLabel(int, v8::internal::Label*, v8::internal::Label*)",93957335622400,93957335622867],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32GeS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341347568,93957341347605],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64GeU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341348128,93957341348165],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF32Ge(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341348416,93957341348453],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF64Gt(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341348608,93957341348645],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32Clz(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341348752,93957341348783],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32Popcnt(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341348816,93957341348847],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32Sub(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341348896,93957341348933],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32DivS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341348992,93957341349029],["v8::internal::baseline::BaselineCompiler::VisitCreateCatchContext()",93957335610752,93957335610830],["v8::internal::baseline::BaselineCompiler::VisitJumpIfNotUndefined()",93957335613200,93957335613350],["v8::internal::baseline::BaselineCompiler::VisitJumpIfJSReceiver()",93957335614160,93957335614496],["v8::internal::baseline::BaselineCompiler::VisitForInContinue()",93957335615600,93957335615811],["v8::internal::baseline::BaselineCompiler::VisitSetPendingMessage()",93957335616176,93957335616639],["v8::internal::baseline::BaselineCompiler::VisitReThrow()",93957335616816,93957335616985],["v8::internal::baseline::BaselineCompiler::VisitThrowReferenceErrorIfHole()",93957335617136,93957335617413],["v8::internal::baseline::BaselineCompiler::VisitThrowSuperAlreadyCalledIfNotHole()",93957335617664,93957335617896],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32Eq(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341347184,93957341347221],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64Ne(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341347744,93957341347781],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64LeU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341348032,93957341348069],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF32Ne(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341348224,93957341348261],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF32Le(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341348368,93957341348405],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF64Eq(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341348464,93957341348501],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF64Lt(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341348560,93957341348597],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF64Le(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341348656,93957341348693],["v8::internal::baseline::BaselineCompiler::VisitCreateRegExpLiteral()",93957335609296,93957335609420],["v8::internal::baseline::BaselineCompiler::VisitCreateMappedArguments()",93957335611456,93957335611851],["v8::internal::baseline::BaselineCompiler::VisitJumpIfNotNull()",93957335612880,93957335613030],["v8::internal::baseline::BaselineCompiler::VisitJumpIfFalse()",93957335613520,93957335613670],["v8::internal::baseline::BaselineCompiler::VisitJumpIfUndefinedOrNull()",93957335613936,93957335614158],["v8::internal::baseline::BaselineCompiler::VisitSwitchOnSmiNoFeedback()",93957335614496,93957335615122],["v8::internal::baseline::BaselineCompiler::VisitForInPrepare()",93957335615184,93957335615594],["v8::internal::baseline::BaselineCompiler::VisitForInNext()",93957335615824,93957335616023],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeLoadMem(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341345744,93957341345774],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32GtS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341347376,93957341347413],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64Eqz(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341347664,93957341347695],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64LtU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341347840,93957341347877],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64LeS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341347984,93957341348021],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64GeS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341348080,93957341348117],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF32Eq(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341348176,93957341348213],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF32Lt(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341348272,93957341348309],["v8::internal::baseline::BaselineCompiler::VisitTestUndetectable()",93957335606560,93957335606829],["v8::internal::baseline::BaselineCompiler::VisitCloneObject()",93957335609840,93957335609952],["v8::internal::baseline::BaselineCompiler::VisitCreateEvalContext()",93957335611104,93957335611376],["v8::internal::baseline::BaselineCompiler::VisitCreateRestParameter()",93957335611968,93957335612069],["v8::internal::baseline::BaselineCompiler::VisitJumpIfNull()",93957335612720,93957335612870],["v8::internal::baseline::BaselineCompiler::VisitJumpIfUndefined()",93957335613040,93957335613190],["v8::internal::baseline::BaselineCompiler::VisitJumpIfTrue()",93957335613360,93957335613510],["v8::internal::baseline::BaselineCompiler::VisitJumpIfToBooleanTrue()",93957335613680,93957335613805],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeSelectWithType(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341340528,93957341341831],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64Const(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341346656,93957341346852],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32LtS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341347280,93957341347317],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32LeS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341347472,93957341347509],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32GeU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341347616,93957341347653],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64Eq(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341347696,93957341347733],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64LtS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341347792,93957341347829],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI64GtS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341347888,93957341347925],["v8::internal::baseline::BaselineCompiler::VisitTestEqualStrict()",93957335605648,93957335605725],["v8::internal::baseline::BaselineCompiler::VisitToName()",93957335608848,93957335609014],["v8::internal::baseline::BaselineCompiler::VisitCreateEmptyArrayLiteral()",93957335609600,93957335609658],["v8::internal::baseline::BaselineCompiler::VisitCreateClosure()",93957335610176,93957335610551],["v8::internal::baseline::BaselineCompiler::VisitCreateFunctionContext()",93957335610832,93957335611104],["v8::internal::baseline::BaselineCompiler::VisitCreateWithContext()",93957335611376,93957335611454],["v8::internal::baseline::BaselineCompiler::VisitCreateUnmappedArguments()",93957335611856,93957335611957],["v8::internal::baseline::BaselineCompiler::VisitJumpLoop()",93957335612080,93957335612630],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeReturnCallIndirect(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341330688,93957341332361],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeGlobalGet(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341343168,93957341343458],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeMemorySize(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341345808,93957341346024],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF64Const(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341347008,93957341347141],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32Ne(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341347232,93957341347269],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32LtU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341347328,93957341347365],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32GtU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341347424,93957341347461],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32LeU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341347520,93957341347557],["v8::internal::baseline::BaselineCompiler::VisitCallWithSpread()",93957335603184,93957335603329],["v8::internal::baseline::BaselineCompiler::VisitTestGreaterThanOrEqual()",93957335605968,93957335606045],["v8::internal::baseline::BaselineCompiler::VisitTestUndefined()",93957335607024,93957335607202],["v8::internal::baseline::BaselineCompiler::VisitToNumeric()",93957335609072,93957335609118],["v8::internal::baseline::BaselineCompiler::VisitCreateArrayLiteral()",93957335609424,93957335609597],["v8::internal::baseline::BaselineCompiler::VisitCreateObjectLiteral()",93957335609664,93957335609832],["v8::internal::baseline::BaselineCompiler::VisitGetTemplateObject()",93957335609952,93957335610169],["v8::internal::baseline::BaselineCompiler::VisitCreateBlockContext()",93957335610560,93957335610750],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeEnd(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341317536,93957341319339],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeDelegate(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341337648,93957341338805],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeLocalSet(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341341984,93957341342550],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeTableGet(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341344160,93957341344839],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeStoreMem(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341345776,93957341345806],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeMemoryGrow(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341346032,93957341346645],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeF32Const(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341346864,93957341346997],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32Eqz(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341347152,93957341347183],["v8::internal::baseline::BaselineCompiler::VisitCallProperty0()",93957335602224,93957335602318],["v8::internal::baseline::BaselineCompiler::VisitInvokeIntrinsic()",93957335603968,93957335605218],["v8::internal::baseline::BaselineCompiler::VisitTestGreaterThan()",93957335605808,93957335605885],["v8::internal::baseline::BaselineCompiler::VisitTestInstanceOf()",93957335606336,93957335606465],["v8::internal::baseline::BaselineCompiler::VisitTestNull()",93957335606832,93957335607010],["v8::internal::baseline::BaselineCompiler::VisitTestTypeOf()",93957335607216,93957335608839],["v8::internal::baseline::BaselineCompiler::VisitToNumber()",93957335609024,93957335609070],["v8::internal::baseline::BaselineCompiler::VisitToObject()",93957335609120,93957335609286],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeLoop(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341306288,93957341308833],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeReturn(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341324960,93957341326067],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeReturnCallRef(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341334128,93957341335396],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeDrop(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341339344,93957341339572],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeUnknownOrAsmJs(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341341840,93957341341984],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeLocalTee(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341342560,93957341343163],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeGlobalSet(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341343472,93957341344149],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeTableSet(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341344848,93957341345739],["v8::internal::baseline::BaselineCompiler::VisitBitwiseNot()",93957335600848,93957335600894],["v8::internal::baseline::BaselineCompiler::VisitCallUndefinedReceiver0()",93957335602720,93957335602802],["v8::internal::baseline::BaselineCompiler::VisitCallRuntimeForPair()",93957335603424,93957335603747],["v8::internal::baseline::BaselineCompiler::VisitConstructWithSpread()",93957335605360,93957335605559],["v8::internal::baseline::BaselineCompiler::VisitTestLessThan()",93957335605728,93957335605805],["v8::internal::baseline::BaselineCompiler::VisitTestLessThanOrEqual()",93957335605888,93957335605965],["v8::internal::baseline::BaselineCompiler::VisitTestReferenceEqual()",93957335606048,93957335606322],["v8::internal::baseline::BaselineCompiler::VisitTestIn()",93957335606480,93957335606560],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::~WasmFullDecoder()",93957341303696,93957341303810],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeCatch(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341313200,93957341314882],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeBrIf(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341319856,93957341320946],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeCallIndirect(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341327504,93957341329499],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeCallRef(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341332368,93957341334118],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeLet(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341335408,93957341337635],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeCatchAll(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341338816,93957341339338],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeSelect(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341339584,93957341340526],["v8::internal::baseline::BaselineCompiler::VisitBitwiseXorSmi()",93957335600304,93957335600384],["v8::internal::baseline::BaselineCompiler::VisitDeletePropertySloppy()",93957335601440,93957335601624],["v8::internal::baseline::BaselineCompiler::VisitCallProperty2()",93957335602448,93957335602592],["v8::internal::baseline::BaselineCompiler::VisitCallUndefinedReceiver2()",93957335602944,93957335603074],["v8::internal::baseline::BaselineCompiler::VisitCallRuntime()",93957335603344,93957335603414],["v8::internal::baseline::BaselineCompiler::VisitCallJSRuntime()",93957335603760,93957335603965],["v8::internal::baseline::BaselineCompiler::VisitConstruct()",93957335605232,93957335605348],["v8::internal::baseline::BaselineCompiler::VisitTestEqual()",93957335605568,93957335605645],["v8::internal::wasm::JSToWasmWrapperCompilationUnit::CompileJSToWasmWrapper(v8::internal::Isolate*, v8::internal::Signature<v8::internal::wasm::ValueType> const*, v8::internal::wasm::WasmModule const*, bool)",93957341299504,93957341299761],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeI32Const(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341304176,93957341304334],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeElse(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341310768,93957341311629],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeRethrow(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341316320,93957341316794],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeBr(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341319344,93957341319849],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeBrTable(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341320960,93957341324947],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeCallFunction(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341326080,93957341327493],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeReturnCall(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341329504,93957341330678],["v8::internal::baseline::BaselineCompiler::VisitShiftRightLogical()",93957335599664,93957335599741],["v8::internal::baseline::BaselineCompiler::VisitShiftRightLogicalSmi()",93957335600624,93957335600704],["v8::internal::baseline::BaselineCompiler::VisitLogicalNot()",93957335601056,93957335601234],["v8::internal::baseline::BaselineCompiler::VisitCallAnyReceiver()",93957335602000,93957335602112],["v8::internal::baseline::BaselineCompiler::VisitCallProperty1()",93957335602320,93957335602447],["v8::internal::baseline::BaselineCompiler::VisitCallUndefinedReceiver()",93957335602592,93957335602711],["v8::internal::baseline::BaselineCompiler::VisitCallUndefinedReceiver1()",93957335602816,93957335602929],["v8::internal::baseline::BaselineCompiler::VisitCallNoFeedback()",93957335603088,93957335603171],["v8::internal::wasm::WasmCompilationUnit::ExecuteCompilation(v8::internal::wasm::WasmEngine*, v8::internal::wasm::CompilationEnv*, std::__1::shared_ptr<v8::internal::wasm::WireBytesStorage> const&, v8::internal::Counters*, v8::internal::wasm::WasmFeatures*)",93957341296064,93957341296560],["v8::internal::wasm::(anonymous namespace)::WasmInstructionBufferImpl::View::Grow(int)",93957341300080,93957341300237],["v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface::DefaultValue(v8::internal::wasm::ValueType)",93957341303856,93957341303963],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeUnreachable(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341304560,93957341304910],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeIf(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341308848,93957341310765],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeTry(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341311632,93957341313192],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeThrow(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341314896,93957341316310],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeUnwind(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341316800,93957341317528],["v8::internal::baseline::BaselineCompiler::VisitDiv()",93957335599024,93957335599101],["v8::internal::baseline::BaselineCompiler::VisitDivSmi()",93957335599984,93957335600064],["v8::internal::baseline::BaselineCompiler::VisitShiftLeftSmi()",93957335600464,93957335600544],["v8::internal::baseline::BaselineCompiler::VisitDec()",93957335600752,93957335600798],["v8::internal::baseline::BaselineCompiler::VisitToBooleanLogicalNot()",93957335600896,93957335601049],["v8::internal::baseline::BaselineCompiler::VisitDeletePropertyStrict()",93957335601248,93957335601435],["v8::internal::baseline::BaselineCompiler::VisitGetSuperConstructor()",93957335601632,93957335601994],["v8::internal::baseline::BaselineCompiler::VisitCallProperty()",93957335602112,93957335602224],["unsigned long v8::internal::wasm::Decoder::read_leb_slowpath<unsigned long, (v8::internal::wasm::Decoder::ValidateFlag)0, (v8::internal::wasm::Decoder::TraceFlag)0, 64ul>(unsigned char const*, unsigned int*, char const*)",93957341293280,93957341293550],["v8::internal::wasm::JSToWasmWrapperCompilationUnit::~JSToWasmWrapperCompilationUnit()",93957341298480,93957341298513],["v8::internal::wasm::(anonymous namespace)::WasmInstructionBufferImpl::View::~View()",93957341299920,93957341299993],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::Decode()",93957341301264,93957341303559],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::onFirstError()",93957341303824,93957341303845],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeLocalGet(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341303968,93957341304164],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::GrowStackSpace(int)",93957341304336,93957341304549],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeBlock(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341304912,93957341306275],["v8::internal::baseline::BaselineCompiler::VisitStaNamedPropertyNoFeedback()",93957335598192,93957335598273],["v8::internal::baseline::BaselineCompiler::VisitBitwiseXor()",93957335599344,93957335599421],["v8::internal::baseline::BaselineCompiler::VisitSubSmi()",93957335599824,93957335599904],["v8::internal::baseline::BaselineCompiler::VisitExpSmi()",93957335600144,93957335600224],["v8::internal::baseline::BaselineCompiler::VisitBitwiseAndSmi()",93957335600384,93957335600464],["v8::internal::baseline::BaselineCompiler::VisitShiftRightSmi()",93957335600544,93957335600624],["v8::internal::baseline::BaselineCompiler::VisitInc()",93957335600704,93957335600750],["v8::internal::baseline::BaselineCompiler::VisitNegate()",93957335600800,93957335600846],["v8::internal::wasm::TableCopyImmediate<(v8::internal::wasm::Decoder::ValidateFlag)0>::TableCopyImmediate(v8::internal::wasm::Decoder*, unsigned char const*)",93957341291904,93957341292094],["v8::internal::wasm::WasmInstructionBuffer::CreateView()",93957341295840,93957341295898],["v8::internal::wasm::WasmCompilationUnit::CompileWasmFunction(v8::internal::Isolate*, v8::internal::wasm::NativeModule*, v8::internal::wasm::WasmFeatures*, v8::internal::wasm::WasmFunction const*, v8::internal::wasm::ExecutionTier)",93957341297552,93957341298276],["v8::internal::wasm::JSToWasmWrapperCompilationUnit::Finalize(v8::internal::Isolate*)",93957341298928,93957341299123],["v8::internal::wasm::JSToWasmWrapperCompilationUnit::CompileSpecificJSToWasmWrapper(v8::internal::Isolate*, v8::internal::Signature<v8::internal::wasm::ValueType> const*, v8::internal::wasm::WasmModule const*)",93957341299776,93957341299907],["v8::internal::wasm::(anonymous namespace)::WasmInstructionBufferImpl::View::~View()",93957341300000,93957341300072],["v8::internal::wasm::BuildTFGraph(v8::internal::AccountingAllocator*, v8::internal::wasm::WasmFeatures const&, v8::internal::wasm::WasmModule const*, v8::internal::compiler::WasmGraphBuilder*, v8::internal::wasm::WasmFeatures*, v8::internal::wasm::FunctionBody const&, std::__1::vector<v8::internal::compiler::WasmLoopInfo, std::__1::allocator<v8::internal::compiler::WasmLoopInfo> >*, v8::internal::compiler::NodeOriginTable*)",93957341300240,93957341301260],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::~WasmFullDecoder()",93957341303568,93957341303681],["v8::internal::baseline::BaselineCompiler::VisitMov()",93957335594976,93957335595352],["v8::internal::baseline::BaselineCompiler::VisitCollectTypeProfile()",93957335598720,93957335598782],["v8::internal::baseline::BaselineCompiler::VisitExp()",93957335599184,93957335599261],["v8::internal::baseline::BaselineCompiler::VisitShiftLeft()",93957335599504,93957335599581],["v8::internal::baseline::BaselineCompiler::VisitAddSmi()",93957335599744,93957335599824],["v8::internal::baseline::BaselineCompiler::VisitMulSmi()",93957335599904,93957335599984],["v8::internal::baseline::BaselineCompiler::VisitModSmi()",93957335600064,93957335600144],["v8::internal::baseline::BaselineCompiler::VisitBitwiseOrSmi()",93957335600224,93957335600304],["v8::internal::wasm::SelectTypeImmediate<(v8::internal::wasm::Decoder::ValidateFlag)0>::SelectTypeImmediate(v8::internal::wasm::WasmFeatures const&, v8::internal::wasm::Decoder*, unsigned char const*, v8::internal::wasm::WasmModule const*)",93957341290928,93957341291059],["int v8::internal::wasm::Decoder::read_leb_slowpath<int, (v8::internal::wasm::Decoder::ValidateFlag)0, (v8::internal::wasm::Decoder::TraceFlag)0, 32ul>(unsigned char const*, unsigned int*, char const*)",93957341292432,93957341292582],["v8::internal::wasm::MemoryAccessImmediate<(v8::internal::wasm::Decoder::ValidateFlag)2>::MemoryAccessImmediate(v8::internal::wasm::Decoder*, unsigned char const*, unsigned int, bool)",93957341295504,93957341295762],["v8::internal::wasm::WasmInstructionBuffer::New(unsigned long)",93957341295936,93957341296015],["v8::internal::wasm::WasmCompilationUnit::ExecuteFunctionCompilation(v8::internal::wasm::WasmEngine*, v8::internal::wasm::CompilationEnv*, std::__1::shared_ptr<v8::internal::wasm::WireBytesStorage> const&, v8::internal::Counters*, v8::internal::wasm::WasmFeatures*)",93957341296560,93957341297538],["v8::internal::wasm::JSToWasmWrapperCompilationUnit::JSToWasmWrapperCompilationUnit(v8::internal::Isolate*, v8::internal::wasm::WasmEngine*, v8::internal::Signature<v8::internal::wasm::ValueType> const*, v8::internal::wasm::WasmModule const*, bool, v8::internal::wasm::WasmFeatures const&, v8::internal::wasm::JSToWasmWrapperCompilationUnit::AllowGeneric)",93957341298288,93957341298476],["v8::internal::wasm::JSToWasmWrapperCompilationUnit::Execute()",93957341298528,93957341298913],["v8::internal::wasm::(anonymous namespace)::RecordWasmHeapStubCompilation(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Code>, char const*, ...)",93957341299136,93957341299494],["v8::internal::baseline::BaselineCompiler::VisitLdaLookupContextSlot()",93957335593968,93957335594069],["v8::internal::baseline::BaselineCompiler::VisitLdaKeyedProperty()",93957335595840,93957335595920],["v8::internal::baseline::BaselineCompiler::VisitStaInArrayLiteral()",93957335598400,93957335598499],["v8::internal::baseline::BaselineCompiler::VisitSub()",93957335598864,93957335598941],["v8::internal::baseline::BaselineCompiler::VisitMod()",93957335599104,93957335599181],["v8::internal::baseline::BaselineCompiler::VisitBitwiseOr()",93957335599264,93957335599341],["v8::internal::baseline::BaselineCompiler::VisitBitwiseAnd()",93957335599424,93957335599501],["v8::internal::baseline::BaselineCompiler::VisitShiftRight()",93957335599584,93957335599661],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::Simd8x16ShuffleOp(unsigned int)",93957341285648,93957341286282],["v8::internal::wasm::FunctionIndexImmediate<(v8::internal::wasm::Decoder::ValidateFlag)0>::FunctionIndexImmediate(v8::internal::wasm::Decoder*, unsigned char const*)",93957341291312,93957341291384],["v8::internal::wasm::TypeIndexImmediate<(v8::internal::wasm::Decoder::ValidateFlag)0>::TypeIndexImmediate(v8::internal::wasm::Decoder*, unsigned char const*)",93957341292272,93957341292344],["v8::internal::wasm::HeapType v8::internal::wasm::value_type_reader::read_heap_type<(v8::internal::wasm::Decoder::ValidateFlag)0>(v8::internal::wasm::Decoder*, unsigned char const*, unsigned int*, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmFeatures const&)",93957341292960,93957341293089],["v8::internal::wasm::WasmDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2>::OpcodeLength(v8::internal::wasm::WasmDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2>*, unsigned char const*)",93957341293552,93957341295503],["v8::internal::wasm::WasmInstructionBuffer::~WasmInstructionBuffer()",93957341295776,93957341295836],["v8::internal::wasm::WasmInstructionBuffer::ReleaseBuffer()",93957341295904,93957341295928],["v8::internal::wasm::WasmCompilationUnit::GetBaselineExecutionTier(v8::internal::wasm::WasmModule const*)",93957341296016,93957341296054],["v8::internal::baseline::BaselineCompiler::VisitStaGlobal()",93957335590896,93957335590979],["v8::internal::baseline::BaselineCompiler::VisitLdaLookupGlobalSlotInsideTypeof()",93957335594496,93957335594597],["v8::internal::baseline::BaselineCompiler::VisitLdaNamedPropertyNoFeedback()",93957335595472,93957335595550],["v8::internal::baseline::BaselineCompiler::VisitStaModuleVariable()",93957335596864,93957335598072],["v8::internal::baseline::BaselineCompiler::VisitStaKeyedProperty()",93957335598288,93957335598387],["v8::internal::baseline::BaselineCompiler::VisitStaDataPropertyInLiteral()",93957335598512,93957335598712],["v8::internal::baseline::BaselineCompiler::VisitAdd()",93957335598784,93957335598861],["v8::internal::baseline::BaselineCompiler::VisitMul()",93957335598944,93957335599021],["v8::internal::wasm::MemoryCopyImmediate<(v8::internal::wasm::Decoder::ValidateFlag)2>::MemoryCopyImmediate(v8::internal::wasm::Decoder*, unsigned char const*)",93957341281248,93957341281495],["v8::internal::wasm::WasmDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2>::Validate(unsigned char const*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::SimdLaneImmediate<(v8::internal::wasm::Decoder::ValidateFlag)2>&)",93957341288832,93957341288955],["v8::internal::wasm::ImmI32Immediate<(v8::internal::wasm::Decoder::ValidateFlag)0>::ImmI32Immediate(v8::internal::wasm::Decoder*, unsigned char const*)",93957341291152,93957341291217],["v8::internal::wasm::MemoryInitImmediate<(v8::internal::wasm::Decoder::ValidateFlag)0>::MemoryInitImmediate(v8::internal::wasm::Decoder*, unsigned char const*)",93957341291584,93957341291698],["v8::internal::wasm::FieldIndexImmediate<(v8::internal::wasm::Decoder::ValidateFlag)0>::FieldIndexImmediate(v8::internal::wasm::Decoder*, unsigned char const*)",93957341292096,93957341292266],["v8::internal::wasm::BranchTableIterator<(v8::internal::wasm::Decoder::ValidateFlag)0>::next()",93957341292352,93957341292427],["long v8::internal::wasm::Decoder::read_leb_slowpath<long, (v8::internal::wasm::Decoder::ValidateFlag)0, (v8::internal::wasm::Decoder::TraceFlag)0, 64ul>(unsigned char const*, unsigned int*, char const*)",93957341292592,93957341292952],["long v8::internal::wasm::Decoder::read_leb_slowpath<long, (v8::internal::wasm::Decoder::ValidateFlag)0, (v8::internal::wasm::Decoder::TraceFlag)0, 33ul>(unsigned char const*, unsigned int*, char const*)",93957341293104,93957341293280],["v8::internal::baseline::BaselineCompiler::VisitSingleBytecode()",93957335586272,93957335589645],["v8::internal::baseline::BaselineCompiler::VisitLdaCurrentContextSlot()",93957335592480,93957335592890],["v8::internal::baseline::BaselineCompiler::VisitLdaLookupSlotInsideTypeof()",93957335594192,93957335594382],["v8::internal::baseline::BaselineCompiler::VisitLdar()",93957335594720,93957335594835],["v8::internal::baseline::BaselineCompiler::VisitLdaNamedProperty()",93957335595360,93957335595459],["v8::internal::baseline::BaselineCompiler::VisitLdaNamedPropertyFromSuper()",93957335595552,93957335595826],["v8::internal::baseline::BaselineCompiler::VisitLdaModuleVariable()",93957335595920,93957335596850],["v8::internal::baseline::BaselineCompiler::VisitStaNamedProperty()",93957335598080,93957335598182],["long v8::internal::wasm::Decoder::read_leb_slowpath<long, (v8::internal::wasm::Decoder::ValidateFlag)2, (v8::internal::wasm::Decoder::TraceFlag)0, 64ul>(unsigned char const*, unsigned int*, char const*)",93957341258736,93957341259524],["v8::internal::wasm::WasmDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2>::Validate(unsigned char const*, v8::internal::wasm::TableCopyImmediate<(v8::internal::wasm::Decoder::ValidateFlag)2>&)",93957341282240,93957341282518],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeLoadLane(v8::internal::wasm::WasmOpcode, v8::internal::wasm::LoadType, unsigned int)",93957341286976,93957341287910],["v8::internal::wasm::BranchTableIterator<(v8::internal::wasm::Decoder::ValidateFlag)0>::length()",93957341290320,93957341290381],["v8::internal::wasm::TableIndexImmediate<(v8::internal::wasm::Decoder::ValidateFlag)0>::TableIndexImmediate(v8::internal::wasm::Decoder*, unsigned char const*)",93957341291072,93957341291144],["v8::internal::wasm::ImmI64Immediate<(v8::internal::wasm::Decoder::ValidateFlag)0>::ImmI64Immediate(v8::internal::wasm::Decoder*, unsigned char const*)",93957341291232,93957341291300],["v8::internal::wasm::MemoryAccessImmediate<(v8::internal::wasm::Decoder::ValidateFlag)0>::MemoryAccessImmediate(v8::internal::wasm::Decoder*, unsigned char const*, unsigned int, bool)",93957341291392,93957341291581],["v8::internal::wasm::TableInitImmediate<(v8::internal::wasm::Decoder::ValidateFlag)0>::TableInitImmediate(v8::internal::wasm::Decoder*, unsigned char const*)",93957341291712,93957341291893],["v8::internal::Variable::Variable(v8::internal::Variable*)",93957335583152,93957335583199],["v8::internal::baseline::BaselineCompiler::VisitLdaSmi()",93957335590608,93957335590657],["v8::internal::baseline::BaselineCompiler::VisitPopContext()",93957335591472,93957335591835],["v8::internal::baseline::BaselineCompiler::VisitStaCurrentContextSlot()",93957335593456,93957335593765],["v8::internal::baseline::BaselineCompiler::VisitLdaLookupGlobalSlot()",93957335594080,93957335594181],["v8::internal::baseline::BaselineCompiler::VisitLdaLookupContextSlotInsideTypeof()",93957335594384,93957335594485],["v8::internal::baseline::BaselineCompiler::VisitStaLookupSlot()",93957335594608,93957335594705],["v8::internal::baseline::BaselineCompiler::VisitStar()",93957335594848,93957335594969],["v8::internal::wasm::SelectTypeImmediate<(v8::internal::wasm::Decoder::ValidateFlag)2>::SelectTypeImmediate(v8::internal::wasm::WasmFeatures const&, v8::internal::wasm::Decoder*, unsigned char const*, v8::internal::wasm::WasmModule const*)",93957341254992,93957341255166],["v8::internal::wasm::FieldIndexImmediate<(v8::internal::wasm::Decoder::ValidateFlag)2>::FieldIndexImmediate(v8::internal::wasm::Decoder*, unsigned char const*)",93957341274224,93957341274408],["v8::internal::wasm::WasmDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2>::Validate(unsigned char const*, v8::internal::wasm::TableInitImmediate<(v8::internal::wasm::Decoder::ValidateFlag)2>&)",93957341281696,93957341282017],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::SimdExtractLane(v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueType, unsigned int)",93957341284512,93957341284966],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeLoadTransformMem(v8::internal::wasm::LoadType, v8::internal::wasm::LoadTransformationKind, unsigned int)",93957341286288,93957341286968],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeStoreLane(v8::internal::wasm::WasmOpcode, v8::internal::wasm::StoreType, unsigned int)",93957341287920,93957341288827],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeAtomicOpcode(v8::internal::wasm::WasmOpcode, unsigned int)",93957341288960,93957341290310],["v8::internal::wasm::WasmDecoder<(v8::internal::wasm::Decoder::ValidateFlag)0>::DecodeLocals(unsigned char const*, unsigned int*, v8::base::Optional<unsigned int>)",93957341290384,93957341290924],["v8::internal::AstTraversalVisitor<v8::internal::SourceRangeAstVisitor>::VisitConditional(v8::internal::Conditional*)",93957335580384,93957335580567],["v8::internal::baseline::BaselineCompiler::PrologueFillFrame()",93957335583664,93957335584280],["v8::internal::baseline::BaselineCompiler::LoadClosureFeedbackArray(v8::internal::Register)",93957335589856,93957335590079],["v8::internal::baseline::BaselineCompiler::VisitLdaGlobal()",93957335590736,93957335590816],["v8::internal::baseline::BaselineCompiler::VisitPushContext()",93957335590992,93957335591460],["v8::internal::baseline::BaselineCompiler::VisitLdaContextSlot()",93957335591840,93957335592477],["v8::internal::baseline::BaselineCompiler::VisitStaContextSlot()",93957335592896,93957335593451],["v8::internal::baseline::BaselineCompiler::VisitLdaLookupSlot()",93957335593776,93957335593966],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::TypeCheckBrTable(std::__1::vector<v8::internal::wasm::ValueType, std::__1::allocator<v8::internal::wasm::ValueType> > const&, unsigned int)",93957341252608,93957341253477],["unsigned long v8::internal::wasm::Decoder::read_leb_slowpath<unsigned long, (v8::internal::wasm::Decoder::ValidateFlag)2, (v8::internal::wasm::Decoder::TraceFlag)0, 64ul>(unsigned char const*, unsigned int*, char const*)",93957341257040,93957341257709],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeGCOpcode(v8::internal::wasm::WasmOpcode, unsigned int)",93957341259808,93957341274180],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeNumericOpcode(v8::internal::wasm::WasmOpcode, unsigned int)",93957341274528,93957341281040],["v8::internal::wasm::TableInitImmediate<(v8::internal::wasm::Decoder::ValidateFlag)2>::TableInitImmediate(v8::internal::wasm::Decoder*, unsigned char const*)",93957341281504,93957341281696],["v8::internal::wasm::TableCopyImmediate<(v8::internal::wasm::Decoder::ValidateFlag)2>::TableCopyImmediate(v8::internal::wasm::Decoder*, unsigned char const*)",93957341282032,93957341282234],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeSimdOpcode(v8::internal::wasm::WasmOpcode, unsigned int)",93957341282528,93957341284498],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::SimdReplaceLane(v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueType, unsigned int)",93957341284976,93957341285634],["v8::internal::AstTraversalVisitor<v8::internal::SourceRangeAstVisitor>::VisitInitializeClassStaticElementsStatement(v8::internal::InitializeClassStaticElementsStatement*)",93957335578512,93957335578749],["v8::internal::AstTraversalVisitor<v8::internal::SourceRangeAstVisitor>::VisitTemplateLiteral(v8::internal::TemplateLiteral*)",93957335580896,93957335581137],["v8::internal::Variable::RewriteLocationForRepl()",93957335583264,93957335583294],["v8::internal::baseline::BaselineCompiler::GenerateCode()",93957335584640,93957335585956],["v8::internal::baseline::BaselineCompiler::Build(v8::internal::Isolate*)",93957335589648,93957335589856],["v8::internal::baseline::BaselineCompiler::VerifyFrame()",93957335590080,93957335590604],["v8::internal::baseline::BaselineCompiler::VisitLdaConstant()",93957335590672,93957335590726],["v8::internal::baseline::BaselineCompiler::VisitLdaGlobalInsideTypeof()",93957335590816,93957335590896],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::PopTypeError(int, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)2>, char const*)",93957341249088,93957341249573],["v8::base::SmallVector<v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)2>, 2ul>::operator=(v8::base::SmallVector<v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)2>, 2ul> const&)",93957341254160,93957341254301],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::BuildSimpleOperator(v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueType, v8::internal::wasm::ValueType, v8::internal::wasm::ValueType)",93957341255664,93957341256337],["v8::internal::wasm::MemoryIndexImmediate<(v8::internal::wasm::Decoder::ValidateFlag)2>::MemoryIndexImmediate(v8::internal::wasm::Decoder*, unsigned char const*)",93957341258576,93957341258683],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::BuildSimplePrototypeOperator(v8::internal::wasm::WasmOpcode)",93957341259536,93957341259797],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::PopTypeError(int, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)2>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)",93957341274192,93957341274218],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::ObjectRelatedWithRtt(v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)2>, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)2>)",93957341274416,93957341274514],["v8::internal::wasm::MemoryInitImmediate<(v8::internal::wasm::Decoder::ValidateFlag)2>::MemoryInitImmediate(v8::internal::wasm::Decoder*, unsigned char const*)",93957341281040,93957341281244],["v8::internal::AstTraversalVisitor<v8::internal::SourceRangeAstVisitor>::VisitWhileStatement(v8::internal::WhileStatement*)",93957335577424,93957335577534],["v8::internal::AstTraversalVisitor<v8::internal::SourceRangeAstVisitor>::VisitAwait(v8::internal::Await*)",93957335579312,93957335579380],["v8::internal::AstTraversalVisitor<v8::internal::SourceRangeAstVisitor>::VisitSpread(v8::internal::Spread*)",93957335580736,93957335580804],["std::__1::__hash_table<int, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<int> >::rehash(unsigned long)",93957335582064,93957335582435],["v8::internal::Variable::IsGlobalObjectProperty() const",93957335583200,93957335583251],["void v8::internal::baseline::BaselineCompiler::CallBuiltin<v8::internal::Register, v8::internal::Register, v8::internal::Register, int, v8::internal::Register, v8::internal::Handle<v8::internal::BytecodeArray> >(v8::internal::Builtins::Name, v8::internal::Register, v8::internal::Register, v8::internal::Register, int, v8::internal::Register, v8::internal::Handle<v8::internal::BytecodeArray>)",93957335583296,93957335583659],["v8::internal::baseline::BaselineCompiler::BaselineCompiler(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::BytecodeArray>)",93957335584288,93957335584625],["v8::internal::baseline::BaselineCompiler::PreVisitSingleBytecode()",93957335585968,93957335586260],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeAtomic(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341246896,93957341247121],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::TypeCheckOneArmedIf(v8::internal::wasm::ControlBase<v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)2>, (v8::internal::wasm::Decoder::ValidateFlag)2>*)",93957341251312,93957341251663],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::TypeCheckReturn()",93957341253648,93957341254009],["v8::internal::wasm::WasmDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2>::Validate(unsigned char const*, v8::internal::wasm::CallIndirectImmediate<(v8::internal::wasm::Decoder::ValidateFlag)2>&)",93957341254560,93957341254905],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::BuildSimpleOperator(v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueType, v8::internal::wasm::ValueType)",93957341255168,93957341255658],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeLoadMem(v8::internal::wasm::LoadType, int)",93957341256352,93957341257030],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeStoreMem(v8::internal::wasm::StoreType, int)",93957341257712,93957341258569],["long v8::internal::wasm::Decoder::read_i64v<(v8::internal::wasm::Decoder::ValidateFlag)2>(unsigned char const*, unsigned int*, char const*)",93957341258688,93957341258728],["v8::internal::AstTraversalVisitor<v8::internal::SourceRangeAstVisitor>::VisitFunctionLiteral(v8::internal::FunctionLiteral*)",93957335574832,93957335575124],["v8::internal::AstTraversalVisitor<v8::internal::SourceRangeAstVisitor>::VisitSloppyBlockFunctionStatement(v8::internal::SloppyBlockFunctionStatement*)",93957335577968,93957335578035],["v8::internal::AstTraversalVisitor<v8::internal::SourceRangeAstVisitor>::VisitCallRuntime(v8::internal::CallRuntime*)",93957335579008,93957335579157],["v8::internal::AstTraversalVisitor<v8::internal::SourceRangeAstVisitor>::VisitCallNew(v8::internal::CallNew*)",93957335579616,93957335579803],["v8::internal::AstTraversalVisitor<v8::internal::SourceRangeAstVisitor>::VisitImportCallExpression(v8::internal::ImportCallExpression*)",93957335580576,93957335580723],["v8::internal::AstTraversalVisitor<v8::internal::SourceRangeAstVisitor>::VisitSuperCallReference(v8::internal::SuperCallReference*)",93957335580816,93957335580894],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<int, void*>*>, bool> std::__1::__hash_table<int, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<int> >::__emplace_unique_key_args<int, int>(int const&, int&&)",93957335581152,93957335582050],["std::__1::__hash_table<int, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<int> >::__rehash(unsigned long)",93957335582448,93957335583141],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeRefIsNull(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341244432,93957341244778],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::EnsureStackArguments_Slow(int, unsigned int)",93957341248192,93957341248548],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::TypeCheckMergeValues(v8::internal::wasm::ControlBase<v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)2>, (v8::internal::wasm::Decoder::ValidateFlag)2>*, unsigned int, v8::internal::wasm::Merge<v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)2> >*)",93957341249728,93957341250053],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::TypeCheckBranch(v8::internal::wasm::ControlBase<v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)2>, (v8::internal::wasm::Decoder::ValidateFlag)2>*, bool, unsigned int)",93957341251968,93957341252126],["v8::internal::wasm::BranchTableIterator<(v8::internal::wasm::Decoder::ValidateFlag)2>::length()",93957341253488,93957341253645],["v8::base::SmallVector<v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)2>, 2ul>::Grow(unsigned long)",93957341254016,93957341254153],["v8::internal::wasm::CallIndirectImmediate<(v8::internal::wasm::Decoder::ValidateFlag)2>::CallIndirectImmediate(v8::internal::wasm::WasmFeatures, v8::internal::wasm::Decoder*, unsigned char const*)",93957341254304,93957341254554],["v8::internal::wasm::TableIndexImmediate<(v8::internal::wasm::Decoder::ValidateFlag)2>::TableIndexImmediate(v8::internal::wasm::Decoder*, unsigned char const*)",93957341254912,93957341254990],["v8::internal::Scope::RecordEvalCall()",93957335573024,93957335573348],["v8::internal::SourceRangeAstVisitor::VisitNode(v8::internal::AstNode*)",93957335576032,93957335576510],["v8::internal::AstTraversalVisitor<v8::internal::SourceRangeAstVisitor>::VisitForInStatement(v8::internal::ForInStatement*)",93957335577744,93957335577885],["v8::internal::AstTraversalVisitor<v8::internal::SourceRangeAstVisitor>::VisitWithStatement(v8::internal::WithStatement*)",93957335578192,93957335578302],["v8::internal::AstTraversalVisitor<v8::internal::SourceRangeAstVisitor>::VisitObjectLiteral(v8::internal::ObjectLiteral*)",93957335578752,93957335578994],["v8::internal::AstTraversalVisitor<v8::internal::SourceRangeAstVisitor>::VisitProperty(v8::internal::Property*)",93957335579168,93957335579308],["v8::internal::AstTraversalVisitor<v8::internal::SourceRangeAstVisitor>::VisitNaryOperation(v8::internal::NaryOperation*)",93957335579392,93957335579613],["v8::internal::AstTraversalVisitor<v8::internal::SourceRangeAstVisitor>::VisitClassLiteral(v8::internal::ClassLiteral*)",93957335579808,93957335580376],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF32ReinterpretI32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341244016,93957341244041],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeRefEq(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341246000,93957341246010],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::PushControl(v8::internal::wasm::ControlKind, unsigned int, unsigned int)",93957341247376,93957341247633],["v8::internal::wasm::WasmOpcode v8::internal::wasm::Decoder::read_prefixed_opcode<(v8::internal::wasm::Decoder::ValidateFlag)2>(unsigned char const*, unsigned int*, char const*)",93957341248752,93957341248886],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::TypeCheckFallThru()",93957341249584,93957341249715],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::TypeCheckUnreachableMerge(v8::internal::wasm::Merge<v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)2> >&, bool, unsigned int)",93957341250064,93957341251304],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::PopControl(v8::internal::wasm::ControlBase<v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)2>, (v8::internal::wasm::Decoder::ValidateFlag)2>*)",93957341251664,93957341251953],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::UpdateBrTableResultTypes(std::__1::vector<v8::internal::wasm::ValueType, std::__1::allocator<v8::internal::wasm::ValueType> >*, unsigned int, unsigned char const*, int)",93957341252128,93957341252600],["v8::internal::ClassScope::ResetUnresolvedPrivateNameTail(v8::base::ThreadedListBase<v8::internal::VariableProxy, v8::base::EmptyBase, v8::internal::VariableProxy::UnresolvedNext>::Iterator)",93957335570368,93957335570422],["v8::internal::AstTraversalVisitor<v8::internal::SourceRangeAstVisitor>::VisitBlock(v8::internal::Block*)",93957335573968,93957335574235],["v8::internal::SourceRangeAstVisitor::MaybeRemoveContinuationRangeOfAsyncReturn(v8::internal::TryCatchStatement*)",93957335575440,93957335575715],["v8::internal::AstTraversalVisitor<v8::internal::SourceRangeAstVisitor>::VisitFunctionDeclaration(v8::internal::FunctionDeclaration*)",93957335577232,93957335577299],["v8::internal::AstTraversalVisitor<v8::internal::SourceRangeAstVisitor>::VisitForStatement(v8::internal::ForStatement*)",93957335577536,93957335577744],["v8::internal::AstTraversalVisitor<v8::internal::SourceRangeAstVisitor>::VisitReturnStatement(v8::internal::ReturnStatement*)",93957335577888,93957335577955],["v8::internal::AstTraversalVisitor<v8::internal::SourceRangeAstVisitor>::VisitIfStatement(v8::internal::IfStatement*)",93957335578048,93957335578189],["v8::internal::AstTraversalVisitor<v8::internal::SourceRangeAstVisitor>::VisitInitializeClassMembersStatement(v8::internal::InitializeClassMembersStatement*)",93957335578304,93957335578499],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF32ConvertF64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341243760,93957341243785],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64SExtendI8(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341244144,93957341244169],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeRefAsNonNull(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341245056,93957341245259],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeNumeric(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341246240,93957341246483],["v8::internal::wasm::BlockTypeImmediate<(v8::internal::wasm::Decoder::ValidateFlag)2>::BlockTypeImmediate(v8::internal::wasm::WasmFeatures const&, v8::internal::wasm::Decoder*, unsigned char const*, v8::internal::wasm::WasmModule const*)",93957341247136,93957341247365],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::SetBlockType(v8::internal::wasm::ControlBase<v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)2>, (v8::internal::wasm::Decoder::ValidateFlag)2>*, v8::internal::wasm::BlockTypeImmediate<(v8::internal::wasm::Decoder::ValidateFlag)2>&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)2>*)",93957341247648,93957341248187],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::NotEnoughArgumentsError(int)",93957341248560,93957341248751],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::PopTypeError(int, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)2>, v8::internal::wasm::ValueType)",93957341248896,93957341249077],["v8::internal::DeclarationScope::ResetAfterPreparsing(v8::internal::AstValueFactory*, bool)",93957335568512,93957335568898],["v8::internal::PrivateNameScopeIterator::AddUnresolvedPrivateName(v8::internal::VariableProxy*)",93957335572256,93957335572448],["v8::internal::SourceRangeAstVisitor::SourceRangeAstVisitor(unsigned long, v8::internal::Expression*, v8::internal::SourceRangeMap*)",93957335573760,93957335573806],["v8::internal::SourceRangeAstVisitor::VisitSwitchStatement(v8::internal::SwitchStatement*)",93957335574480,93957335574562],["v8::internal::SourceRangeAstVisitor::VisitTryCatchStatement(v8::internal::TryCatchStatement*)",93957335575136,93957335575435],["v8::internal::SourceRangeAstVisitor::VisitTryFinallyStatement(v8::internal::TryFinallyStatement*)",93957335575728,93957335576027],["v8::internal::AstTraversalVisitor<v8::internal::SourceRangeAstVisitor>::VisitNoStackOverflowCheck(v8::internal::AstNode*)",93957335576512,93957335577225],["v8::internal::AstTraversalVisitor<v8::internal::SourceRangeAstVisitor>::VisitDoWhileStatement(v8::internal::DoWhileStatement*)",93957335577312,93957335577422],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64SConvertF32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341243504,93957341243529],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF64UConvertI64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341243888,93957341243913],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32SExtendI8(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341244080,93957341244105],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64SExtendI32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341244208,93957341244233],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeRefFunc(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341244784,93957341245055],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeBrOnNull(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341245264,93957341245999],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeGC(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341246016,93957341246238],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeSimd(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341246496,93957341246893],["v8::internal::DeclarationScope::AllowsLazyCompilation() const",93957335567680,93957335567706],["v8::internal::Scope::AllocateNonParameterLocal(v8::internal::Variable*)",93957335569696,93957335569962],["v8::internal::ClassScope::LookupPrivateName(v8::internal::VariableProxy*)",93957335570896,93957335571399],["v8::internal::PrivateNameScopeIterator::PrivateNameScopeIterator(v8::internal::Scope*)",93957335572672,93957335572759],["v8::base::TemplateHashMapImpl<void*, void*, v8::base::KeyEqualityMatcher<void*>, v8::internal::ZoneAllocationPolicy>::Resize()",93957335573360,93957335573757],["v8::internal::SourceRangeAstVisitor::VisitBlock(v8::internal::Block*)",93957335573808,93957335573967],["v8::internal::SourceRangeAstVisitor::MaybeRemoveLastContinuationRange(v8::internal::ZoneList<v8::internal::Statement*>*)",93957335574240,93957335574467],["v8::internal::AstTraversalVisitor<v8::internal::SourceRangeAstVisitor>::VisitSwitchStatement(v8::internal::SwitchStatement*)",93957335574576,93957335574832],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF64CopySign(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341243248,93957341243279],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF32SConvertI32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341243632,93957341243657],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF64UConvertI32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341243824,93957341243849],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32ReinterpretF32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341243952,93957341243977],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF64ReinterpretI64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341244048,93957341244073],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32SExtendI16(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341244112,93957341244137],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64SExtendI16(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341244176,93957341244201],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeRefNull(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341244240,93957341244417],["v8::internal::Scope::FindVariableDeclaredIn(v8::internal::Scope*, v8::internal::VariableMode)",93957335563248,93957335563466],["v8::internal::Scope::GetReceiverScope()",93957335567888,93957335567927],["v8::internal::DeclarationScope::AnalyzePartially(v8::internal::Parser*, v8::internal::AstNodeFactory*, bool)",93957335568960,93957335569441],["v8::internal::ClassScope::DeclarePrivateName(v8::internal::AstRawString const*, v8::internal::VariableMode, v8::internal::IsStaticFlag, bool*)",93957335570064,93957335570334],["v8::internal::ClassScope::MigrateUnresolvedPrivateNameTail(v8::internal::AstNodeFactory*, v8::base::ThreadedListBase<v8::internal::VariableProxy, v8::base::EmptyBase, v8::internal::VariableProxy::UnresolvedNext>::Iterator)",93957335570432,93957335570890],["v8::internal::ClassScope::ResolvePrivateNamesPartially()",93957335571408,93957335572248],["v8::internal::ClassScope::DeclareBrandVariable(v8::internal::AstValueFactory*, v8::internal::IsStaticFlag, int)",93957335572448,93957335572658],["v8::internal::ClassScope::RareData* v8::internal::Zone::New<v8::internal::ClassScope::RareData, v8::internal::Zone*>(v8::internal::Zone*&&)",93957335572768,93957335573013],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF64NearestInt(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341242992,93957341243017],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32SConvertF64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341243376,93957341243401],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64SConvertF64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341243568,93957341243593],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF32SConvertI64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341243696,93957341243721],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF64SConvertI32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341243792,93957341243817],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF64SConvertI64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341243856,93957341243881],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF64ConvertF32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341243920,93957341243945],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64ReinterpretF64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341243984,93957341244009],["v8::internal::DeclarationScope::RecordParameter(bool)",93957335561872,93957335561903],["v8::internal::Scope::ResolveVariablesRecursively(v8::internal::Scope*)",93957335564656,93957335565304],["v8::internal::Scope::ContextChainLengthUntilOutermostSloppyEval() const",93957335567760,93957335567817],["v8::internal::Scope::GetOuterScopeWithContext()",93957335568080,93957335568112],["v8::internal::Scope::IsSkippableFunctionScope()",93957335568912,93957335568948],["v8::internal::Scope::ResolveTo(v8::internal::VariableProxy*, v8::internal::Variable*)",93957335569456,93957335569683],["v8::internal::DeclarationScope::RecordNeedsPrivateNameContextChainRecalc()",93957335569968,93957335570057],["v8::internal::ClassScope::GetUnresolvedPrivateNameTail()",93957335570336,93957335570363],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF32Min(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341242736,93957341242767],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF64Mul(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341243120,93957341243151],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32SConvertF32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341243312,93957341243337],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64SConvertI32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341243440,93957341243465],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64UConvertF32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341243536,93957341243561],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64UConvertF64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341243600,93957341243625],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF32UConvertI32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341243664,93957341243689],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF32UConvertI64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341243728,93957341243753],["v8::internal::DeclarationScope::DeclareArguments(v8::internal::AstValueFactory*)",93957335559424,93957335559545],["v8::internal::Scope::AddUnresolved(v8::internal::VariableProxy*)",93957335562160,93957335562220],["v8::internal::ModuleScope::AllocateModuleVariables()",93957335563712,93957335564296],["v8::internal::Scope::HasThisReference() const",93957335567520,93957335567605],["v8::internal::Scope::ContextChainLength(v8::internal::Scope*) const",93957335567712,93957335567749],["v8::internal::Scope::ShouldBanArguments()",93957335567824,93957335567873],["v8::internal::Scope::GetHomeObjectScope()",93957335567936,93957335568066],["v8::internal::Scope::AnalyzePartially(v8::internal::DeclarationScope*, v8::internal::AstNodeFactory*, v8::base::ThreadedListBase<v8::internal::VariableProxy, v8::base::EmptyBase, v8::internal::VariableProxy::UnresolvedNext>*, bool)",93957335568112,93957335568500],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF32Floor(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341242480,93957341242505],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF64Neg(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341242864,93957341242889],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF64Add(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341243056,93957341243087],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF64Min(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341243184,93957341243215],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32ConvertI64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341243280,93957341243305],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32UConvertF32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341243344,93957341243369],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32UConvertF64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341243408,93957341243433],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64UConvertI32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341243472,93957341243497],["v8::internal::DeclarationScope::DeclareSloppyBlockFunction(v8::internal::SloppyBlockFunctionStatement*)",93957335556256,93957335556283],["v8::internal::Scope::FinalizeBlockScope()",93957335560480,93957335560712],["v8::internal::Scope::GetDeclarationScope()",93957335562032,93957335562059],["v8::internal::Scope::DeleteUnresolved(v8::internal::VariableProxy*)",93957335562784,93957335562794],["v8::internal::DeclarationScope::DeserializeReceiver(v8::internal::AstValueFactory*)",93957335563472,93957335563707],["v8::internal::ClassScope::ResolvePrivateNames(v8::internal::ParseInfo*)",93957335564304,93957335564656],["v8::internal::Scope::AllocateVariablesRecursively()",93957335565312,93957335567516],["v8::internal::Scope::AllowsLazyParsingWithoutUnresolvedVariables(v8::internal::Scope const*) const",93957335567616,93957335567672],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64Shl(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341242224,93957341242255],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF32Add(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341242608,93957341242639],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF32CopySign(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341242800,93957341242831],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF64Floor(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341242928,93957341242953],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF64Sqrt(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341243024,93957341243049],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF64Sub(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341243088,93957341243119],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF64Div(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341243152,93957341243183],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF64Max(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341243216,93957341243247],["v8::internal::Scope::HasSimpleParameters()",93957335553376,93957335553428],["v8::internal::AstNodeFactory::NewAssignment(v8::internal::Token::Value, v8::internal::Expression*, v8::internal::Expression*, int)",93957335557872,93957335558267],["v8::internal::DeclarationScope::DeclareFunctionVar(v8::internal::AstRawString const*, v8::internal::Scope*)",93957335559968,93957335560212],["v8::internal::DeclarationScope::DeclareParameter(v8::internal::AstRawString const*, v8::internal::VariableMode, bool, bool, v8::internal::AstValueFactory*, int)",93957335561104,93957335561691],["v8::internal::Scope::DeclareLocal(v8::internal::AstRawString const*, v8::internal::VariableMode, v8::internal::VariableKind, bool*, v8::internal::InitializationFlag)",93957335561904,93957335562031],["v8::internal::Scope::DeclareCatchVariableName(v8::internal::AstRawString const*)",93957335562064,93957335562147],["v8::base::ThreadedListBase<v8::internal::VariableProxy, v8::base::EmptyBase, v8::internal::VariableProxy::UnresolvedNext>::Remove(v8::internal::VariableProxy*)",93957335562224,93957335562770],["v8::internal::DeclarationScope::CheckConflictingVarDeclarations(bool*)",93957335562800,93957335563245],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64Mul(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341241968,93957341241999],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64Ror(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341242352,93957341242383],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF32NearestInt(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341242544,93957341242569],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF32Mul(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341242672,93957341242703],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF32Max(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341242768,93957341242799],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF64Abs(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341242832,93957341242857],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF64Ceil(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341242896,93957341242921],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF64Trunc(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341242960,93957341242985],["v8::internal::DeclarationScope::DeclarationScope(v8::internal::Zone*, v8::internal::Scope*, v8::internal::ScopeType, v8::internal::FunctionKind)",93957335550720,93957335550956],["v8::internal::Scope::IsAsmModule() const",93957335553536,93957335553559],["v8::internal::Scope::LookupInScopeOrScopeInfo(v8::internal::AstRawString const*, v8::internal::Scope*)",93957335557280,93957335557410],["v8::internal::DeclarationScope::Analyze(v8::internal::ParseInfo*)",93957335558592,93957335559233],["v8::internal::DeclarationScope::DeclareDefaultFunctionVariables(v8::internal::AstValueFactory*)",93957335559552,93957335559961],["v8::internal::DeclarationScope::DeclareGeneratorObjectVar(v8::internal::AstRawString const*)",93957335560224,93957335560468],["v8::internal::Scope::Snapshot::Reparent(v8::internal::DeclarationScope*)",93957335560720,93957335561104],["v8::internal::Scope::NewTemporary(v8::internal::AstRawString const*)",93957335561696,93957335561860],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32ShrU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341241712,93957341241743],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64RemU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341242096,93957341242127],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64ShrU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341242288,93957341242319],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF32Neg(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341242416,93957341242441],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF32Trunc(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341242512,93957341242537],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF32Sqrt(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341242576,93957341242601],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF32Sub(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341242640,93957341242671],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF32Div(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341242704,93957341242735],["v8::internal::VariableMap::VariableMap(v8::internal::VariableMap const&, v8::internal::Zone*)",93957335548416,93957335548524],["v8::internal::ClassScope::ClassScope(v8::internal::Isolate*, v8::internal::Zone*, v8::internal::AstValueFactory*, v8::internal::Handle<v8::internal::ScopeInfo>)",93957335551840,93957335552291],["v8::internal::DeclarationScope::set_should_eager_compile()",93957335553488,93957335553517],["v8::internal::Scope::DeserializeScopeChain(v8::internal::Isolate*, v8::internal::Zone*, v8::internal::ScopeInfo, v8::internal::DeclarationScope*, v8::internal::AstValueFactory*, v8::internal::Scope::DeserializationMode)",93957335553664,93957335555955],["v8::internal::DeclarationScope::HoistSloppyBlockFunctions(v8::internal::AstNodeFactory*)",93957335556288,93957335557275],["v8::internal::Scope::DeclareVariable(v8::internal::Declaration*, v8::internal::AstRawString const*, int, v8::internal::VariableMode, v8::internal::VariableKind, v8::internal::InitializationFlag, bool*, bool*, bool*)",93957335557424,93957335557862],["v8::internal::Scope::DeclareVariableName(v8::internal::AstRawString const*, v8::internal::VariableMode, bool*, v8::internal::VariableKind)",93957335558272,93957335558580],["v8::internal::DeclarationScope::AllocateVariables(v8::internal::ParseInfo*)",93957335559248,93957335559415],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32DivU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341241456,93957341241487],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64Ctz(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341241840,93957341241865],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64DivU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341242032,93957341242063],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64Ior(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341242160,93957341242191],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64ShrS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341242256,93957341242287],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64Rol(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341242320,93957341242351],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF32Abs(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341242384,93957341242409],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF32Ceil(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341242448,93957341242473],["v8::internal::Variable* v8::internal::Scope::Lookup<(v8::internal::Scope::ScopeLookupMode)1>(v8::internal::VariableProxy*, v8::internal::Scope*, v8::internal::Scope*, v8::internal::Scope*, bool)",93957335546288,93957335547030],["v8::internal::Scope::Scope(v8::internal::Zone*, v8::internal::Scope*, v8::internal::ScopeType)",93957335549488,93957335549886],["v8::internal::ModuleScope::ModuleScope(v8::internal::Isolate*, v8::internal::Handle<v8::internal::ScopeInfo>, v8::internal::AstValueFactory*)",93957335551536,93957335551771],["v8::internal::ClassScope::DeclareClassVariable(v8::internal::AstValueFactory*, v8::internal::AstRawString const*, int)",93957335552800,93957335552930],["v8::internal::Scope::GetClosureScope()",93957335553440,93957335553480],["v8::internal::DeclarationScope::set_is_asm_module()",93957335553520,93957335553530],["v8::internal::Scope::ContainsAsmModule() const",93957335553568,93957335553653],["v8::internal::DeclarationScope* v8::internal::Zone::New<v8::internal::DeclarationScope, v8::internal::Zone*&, v8::internal::ScopeType, v8::internal::AstValueFactory*&, v8::internal::Handle<v8::internal::ScopeInfo> >(v8::internal::Zone*&, v8::internal::ScopeType&&, v8::internal::AstValueFactory*&, v8::internal::Handle<v8::internal::ScopeInfo>&&)",93957335555968,93957335556255],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF64Ge(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341241200,93957341241231],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32Ior(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341241584,93957341241615],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32Ror(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341241776,93957341241807],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64Add(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341241904,93957341241935],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64DivS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341242000,93957341242031],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64RemS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341242064,93957341242095],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64And(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341242128,93957341242159],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64Xor(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341242192,93957341242223],["v8::internal::CallPrinter::VisitNaryOperation(v8::internal::NaryOperation*)",93957335542320,93957335542762],["void v8::internal::Scope::AllocateScopeInfosRecursively<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::MaybeHandle<v8::internal::ScopeInfo>)",93957335547616,93957335547744],["v8::internal::VariableMap::Remove(v8::internal::Variable*)",93957335549008,93957335549231],["v8::internal::Scope::DeclareStaticHomeObjectVariable(v8::internal::AstValueFactory*)",93957335550000,93957335550099],["v8::internal::ModuleScope::ModuleScope(v8::internal::DeclarationScope*, v8::internal::AstValueFactory*)",93957335550960,93957335551531],["v8::internal::ClassScope::ClassScope(v8::internal::Zone*, v8::internal::Scope*, bool)",93957335551776,93957335551838],["v8::internal::Scope::Scope(v8::internal::Zone*, v8::internal::ScopeType, v8::internal::AstValueFactory*, v8::internal::Handle<v8::internal::ScopeInfo>)",93957335552304,93957335552786],["v8::internal::Scope::Scope(v8::internal::Zone*, v8::internal::AstRawString const*, v8::internal::MaybeAssignedFlag, v8::internal::Handle<v8::internal::ScopeInfo>)",93957335552944,93957335553361],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF32Gt(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341240944,93957341240975],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32Add(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341241328,93957341241359],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32RemU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341241520,93957341241551],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32Shl(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341241648,93957341241679],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32Rol(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341241744,93957341241775],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64Clz(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341241808,93957341241833],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64Popcnt(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341241872,93957341241897],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64Sub(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341241936,93957341241967],["v8::internal::CallPrinter::VisitArrayLiteral(v8::internal::ArrayLiteral*)",93957335538240,93957335538718],["v8::internal::CallPrinter::VisitNoStackOverflowCheck(v8::internal::AstNode*)",93957335543456,93957335545123],["v8::internal::Scope::NonLocal(v8::internal::AstRawString const*, v8::internal::VariableMode)",93957335547152,93957335547231],["void v8::internal::DeclarationScope::AllocateScopeInfos<v8::internal::Isolate>(v8::internal::ParseInfo*, v8::internal::Isolate*)",93957335547872,93957335548139],["v8::internal::VariableMap::Declare(v8::internal::Zone*, v8::internal::Scope*, v8::internal::AstRawString const*, v8::internal::VariableMode, v8::internal::VariableKind, v8::internal::InitializationFlag, v8::internal::MaybeAssignedFlag, v8::internal::IsStaticFlag, bool*)",93957335548528,93957335549007],["v8::internal::VariableMap::Add(v8::internal::Variable*)",93957335549232,93957335549480],["v8::internal::Scope::DeclareHomeObjectVariable(v8::internal::AstValueFactory*)",93957335549888,93957335549987],["v8::internal::DeclarationScope::DeclarationScope(v8::internal::Zone*, v8::internal::AstValueFactory*, v8::internal::REPLMode)",93957335550112,93957335550719],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64GtU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341240688,93957341240719],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF64Ne(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341241072,93957341241103],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32Ctz(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341241264,93957341241289],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32Mul(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341241392,93957341241423],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32RemS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341241488,93957341241519],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32And(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341241552,93957341241583],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32Xor(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341241616,93957341241647],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32ShrS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341241680,93957341241711],["v8::internal::CallPrinter::VisitForOfStatement(v8::internal::ForOfStatement*)",93957335535856,93957335536379],["v8::internal::CallPrinter::VisitCallNew(v8::internal::CallNew*)",93957335540672,93957335541453],["v8::internal::CallPrinter::VisitTemplateLiteral(v8::internal::TemplateLiteral*)",93957335542944,93957335543162],["v8::internal::Scope::LookupWith(v8::internal::VariableProxy*, v8::internal::Scope*, v8::internal::Scope*, v8::internal::Scope*, bool)",93957335545616,93957335545901],["v8::internal::VariableMap::Lookup(v8::internal::AstRawString const*)",93957335547040,93957335547150],["v8::internal::Scope::LookupInScopeInfo(v8::internal::AstRawString const*, v8::internal::Scope*)",93957335547232,93957335547615],["void v8::internal::Scope::AllocateScopeInfosRecursively<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*, v8::internal::MaybeHandle<v8::internal::ScopeInfo>)",93957335547744,93957335547872],["void v8::internal::DeclarationScope::AllocateScopeInfos<v8::internal::LocalIsolate>(v8::internal::ParseInfo*, v8::internal::LocalIsolate*)",93957335548144,93957335548412],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32GeS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341240432,93957341240463],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64GeU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341240816,93957341240847],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF32Ge(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341241008,93957341241039],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF64Gt(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341241136,93957341241167],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32Clz(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341241232,93957341241257],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32Popcnt(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341241296,93957341241321],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32Sub(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341241360,93957341241391],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32DivS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341241424,93957341241455],["v8::internal::CallPrinter::Print(v8::internal::Handle<v8::internal::String>)",93957335533824,93957335533856],["v8::internal::CallPrinter::VisitConditional(v8::internal::Conditional*)",93957335537088,93957335537334],["v8::internal::CallPrinter::VisitProperty(v8::internal::Property*)",93957335539344,93957335539955],["v8::internal::CallPrinter::VisitCountOperation(v8::internal::CountOperation*)",93957335541728,93957335541973],["v8::internal::CallPrinter::VisitSpread(v8::internal::Spread*)",93957335542768,93957335542932],["v8::internal::CallPrinter::VisitImportCallExpression(v8::internal::ImportCallExpression*)",93957335543168,93957335543447],["v8::internal::Variable* v8::internal::Scope::Lookup<(v8::internal::Scope::ScopeLookupMode)0>(v8::internal::VariableProxy*, v8::internal::Scope*, v8::internal::Scope*, v8::internal::Scope*, bool)",93957335545136,93957335545615],["v8::internal::Scope::LookupSloppyEval(v8::internal::VariableProxy*, v8::internal::Scope*, v8::internal::Scope*, v8::internal::Scope*, bool)",93957335545904,93957335546285],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32Eq(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341240176,93957341240207],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64Ne(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341240560,93957341240591],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64LeU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341240752,93957341240783],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF32Ne(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341240880,93957341240911],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF32Le(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341240976,93957341241007],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF64Eq(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341241040,93957341241071],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF64Lt(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341241104,93957341241135],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF64Le(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341241168,93957341241199],["std::__1::__tree_iterator<std::__1::__value_type<v8::internal::AstRawString const*, v8::internal::SourceTextModuleDescriptor::Entry*>, std::__1::__tree_node<std::__1::__value_type<v8::internal::AstRawString const*, v8::internal::SourceTextModuleDescriptor::Entry*>, void*>*, long> std::__1::__tree<std::__1::__value_type<v8::internal::AstRawString const*, v8::internal::SourceTextModuleDescriptor::Entry*>, std::__1::__map_value_compare<v8::internal::AstRawString const*, std::__1::__value_type<v8::internal::AstRawString const*, v8::internal::SourceTextModuleDescriptor::Entry*>, v8::internal::SourceTextModuleDescriptor::AstRawStringComparer, true>, v8::internal::ZoneAllocator<std::__1::__value_type<v8::internal::AstRawString const*, v8::internal::SourceTextModuleDescriptor::Entry*> > >::__emplace_multi<std::__1::pair<v8::internal::AstRawString const*, v8::internal::SourceTextModuleDescriptor::Entry*> >(std::__1::pair<v8::internal::AstRawString const*, v8::internal::SourceTextModuleDescriptor::Entry*>&&)",93957335532272,93957335532492],["v8::internal::CallPrinter::VisitDoWhileStatement(v8::internal::DoWhileStatement*)",93957335534928,93957335535103],["v8::internal::CallPrinter::VisitClassLiteral(v8::internal::ClassLiteral*)",93957335536560,93957335536883],["v8::internal::CallPrinter::VisitRegExpLiteral(v8::internal::RegExpLiteral*)",93957335537776,93957335538057],["v8::internal::CallPrinter::VisitAssignment(v8::internal::Assignment*)",93957335538720,93957335539333],["v8::internal::CallPrinter::VisitCall(v8::internal::Call*)",93957335539968,93957335540669],["v8::internal::CallPrinter::VisitUnaryOperation(v8::internal::UnaryOperation*)",93957335541456,93957335541719],["v8::internal::CallPrinter::VisitBinaryOperation(v8::internal::BinaryOperation*)",93957335541984,93957335542319],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeLoadMem(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341239104,93957341239134],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32GtS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341240304,93957341240335],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64Eqz(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341240496,93957341240521],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64LtU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341240624,93957341240655],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64LeS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341240720,93957341240751],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64GeS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341240784,93957341240815],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF32Eq(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341240848,93957341240879],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF32Lt(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341240912,93957341240943],["v8::internal::SourceTextModuleDescriptor::AddExport(v8::internal::AstRawString const*, v8::internal::AstRawString const*, v8::internal::AstRawString const*, v8::internal::ImportAssertions const*, v8::internal::Scanner::Location, v8::internal::Scanner::Location, v8::internal::Zone*)",93957335527600,93957335528475],["v8::internal::CallPrinter::~CallPrinter()",93957335533392,93957335533424],["v8::internal::CallPrinter::VisitWithStatement(v8::internal::WithStatement*)",93957335534112,93957335534287],["v8::internal::CallPrinter::VisitForStatement(v8::internal::ForStatement*)",93957335535280,93957335535592],["v8::internal::CallPrinter::VisitTryCatchStatement(v8::internal::TryCatchStatement*)",93957335536384,93957335536559],["v8::internal::CallPrinter::VisitInitializeClassStaticElementsStatement(v8::internal::InitializeClassStaticElementsStatement*)",93957335536896,93957335537081],["v8::internal::CallPrinter::PrintLiteral(v8::internal::Handle<v8::internal::Object>, bool)",93957335537344,93957335537766],["v8::internal::CallPrinter::VisitObjectLiteral(v8::internal::ObjectLiteral*)",93957335538064,93957335538238],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeSelectWithType(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341234912,93957341235863],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64Const(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341239808,93957341239942],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32LtS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341240240,93957341240271],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32LeS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341240368,93957341240399],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32GeU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341240464,93957341240495],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64Eq(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341240528,93957341240559],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64LtS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341240592,93957341240623],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI64GtS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341240656,93957341240687],["v8::internal::Handle<v8::internal::SourceTextModuleInfoEntry> v8::internal::SourceTextModuleDescriptor::Entry::Serialize<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*) const",93957335523488,93957335523639],["v8::internal::SourceTextModuleDescriptor::FindDuplicateExport(v8::internal::Zone*) const",93957335530448,93957335531207],["std::__1::vector<v8::internal::Handle<v8::internal::Object>, v8::internal::ZoneAllocator<v8::internal::Handle<v8::internal::Object> > >::__append(unsigned long)",93957335532560,93957335533246],["v8::internal::CallPrinter::Print(v8::internal::FunctionLiteral*, int)",93957335533488,93957335533608],["v8::internal::CallPrinter::VisitIfStatement(v8::internal::IfStatement*)",93957335533856,93957335534106],["v8::internal::CallPrinter::VisitSwitchStatement(v8::internal::SwitchStatement*)",93957335534288,93957335534916],["v8::internal::CallPrinter::VisitWhileStatement(v8::internal::WhileStatement*)",93957335535104,93957335535279],["v8::internal::CallPrinter::VisitForInStatement(v8::internal::ForInStatement*)",93957335535600,93957335535846],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeCallRef(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341229600,93957341231022],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeGlobalGet(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341236944,93957341237193],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeMemorySize(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341239168,93957341239334],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF64Const(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341240048,93957341240139],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32Ne(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341240208,93957341240239],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32LtU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341240272,93957341240303],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32GtU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341240336,93957341240367],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32LeU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341240400,93957341240431],["v8::internal::CaseClause::CaseClause(v8::internal::Zone*, v8::internal::Expression*, v8::internal::ScopedList<v8::internal::Statement*, void*> const&)",93957335520544,93957335520882],["v8::internal::SourceTextModuleDescriptor::AddImport(v8::internal::AstRawString const*, v8::internal::AstRawString const*, v8::internal::AstRawString const*, v8::internal::ImportAssertions const*, v8::internal::Scanner::Location, v8::internal::Scanner::Location, v8::internal::Zone*)",93957335526144,93957335526437],["v8::internal::SourceTextModuleDescriptor::MakeIndirectExportsExplicit(v8::internal::Zone*)",93957335529328,93957335530414],["std::__1::pair<std::__1::__tree_iterator<v8::internal::SourceTextModuleDescriptor::AstModuleRequest const*, std::__1::__tree_node<v8::internal::SourceTextModuleDescriptor::AstModuleRequest const*, void*>*, long>, bool> std::__1::__tree<v8::internal::SourceTextModuleDescriptor::AstModuleRequest const*, v8::internal::SourceTextModuleDescriptor::ModuleRequestComparer, v8::internal::ZoneAllocator<v8::internal::SourceTextModuleDescriptor::AstModuleRequest const*> >::__emplace_unique_key_args<v8::internal::SourceTextModuleDescriptor::AstModuleRequest const*, v8::internal::SourceTextModuleDescriptor::AstModuleRequest const*>(v8::internal::SourceTextModuleDescriptor::AstModuleRequest const* const&, v8::internal::SourceTextModuleDescriptor::AstModuleRequest const*&&)",93957335531712,93957335531977],["std::__1::__tree<int, std::__1::less<int>, v8::internal::ZoneAllocator<int> >::destroy(std::__1::__tree_node<int, void*>*)",93957335532496,93957335532553],["v8::internal::CallPrinter::CallPrinter(v8::internal::Isolate*, bool, v8::internal::CallPrinter::SpreadErrorInArgsHint)",93957335533248,93957335533390],["v8::internal::CallPrinter::GetErrorHint() const",93957335533424,93957335533485],["v8::internal::CallPrinter::Print(char const*)",93957335533616,93957335533817],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeBr(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341221280,93957341221643],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeDelegate(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341233408,93957341233819],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeLocalSet(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341236016,93957341236464],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeTableGet(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341237808,93957341238359],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeStoreMem(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341239136,93957341239166],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeMemoryGrow(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341239344,93957341239804],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeF32Const(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341239952,93957341240043],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32Eqz(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341240144,93957341240169],["v8::internal::ArrayLiteral::InitDepthAndFlags()",93957335518640,93957335519175],["v8::base::TemplateHashMapImpl<void*, void*, v8::base::HashEqualityThenKeyMatcher<void*, bool (*)(void*, void*)>, v8::internal::ZoneAllocationPolicy>::Resize()",93957335521616,93957335522137],["v8::internal::Handle<v8::internal::FixedArray> v8::internal::SourceTextModuleDescriptor::SerializeRegularExports<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*, v8::internal::Zone*) const",93957335524736,93957335525840],["v8::internal::SourceTextModuleDescriptor::AddEmptyImport(v8::internal::AstRawString const*, v8::internal::ImportAssertions const*, v8::internal::Scanner::Location, v8::internal::Zone*)",93957335527328,93957335527447],["v8::internal::SourceTextModuleDescriptor::AddStarExport(v8::internal::AstRawString const*, v8::internal::ImportAssertions const*, v8::internal::Scanner::Location, v8::internal::Scanner::Location, v8::internal::Zone*)",93957335528480,93957335529328],["v8::internal::SourceTextModuleDescriptor::GetCellIndexKind(int)",93957335530416,93957335530441],["v8::internal::SourceTextModuleDescriptor::Validate(v8::internal::ModuleScope*, v8::internal::PendingCompilationErrorHandler*, v8::internal::Zone*)",93957335531216,93957335531707],["std::__1::pair<std::__1::__tree_iterator<std::__1::__value_type<v8::internal::AstRawString const*, v8::internal::SourceTextModuleDescriptor::Entry*>, std::__1::__tree_node<std::__1::__value_type<v8::internal::AstRawString const*, v8::internal::SourceTextModuleDescriptor::Entry*>, void*>*, long>, bool> std::__1::__tree<std::__1::__value_type<v8::internal::AstRawString const*, v8::internal::SourceTextModuleDescriptor::Entry*>, std::__1::__map_value_compare<v8::internal::AstRawString const*, std::__1::__value_type<v8::internal::AstRawString const*, v8::internal::SourceTextModuleDescriptor::Entry*>, v8::internal::SourceTextModuleDescriptor::AstRawStringComparer, true>, v8::internal::ZoneAllocator<std::__1::__value_type<v8::internal::AstRawString const*, v8::internal::SourceTextModuleDescriptor::Entry*> > >::__emplace_unique_key_args<v8::internal::AstRawString const*, std::__1::pair<v8::internal::AstRawString const*, v8::internal::SourceTextModuleDescriptor::Entry*> >(v8::internal::AstRawString const* const&, std::__1::pair<v8::internal::AstRawString const*, v8::internal::SourceTextModuleDescriptor::Entry*>&&)",93957335531984,93957335532258],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeIf(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341216096,93957341217456],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeCallFunction(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341224544,93957341225766],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>::DecodeNopForTestingUnsupportedInLiftoff(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::(anonymous namespace)::WasmGraphBuildingInterface>*, v8::internal::wasm::WasmOpcode)",93957341231872,93957341231896],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeDrop(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341234064,93957341234261],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeUnknownOrAsmJs(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341235872,93957341236005],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeLocalTee(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341236464,93957341236934],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeGlobalSet(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341237200,93957341237799],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeTableSet(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341238368,93957341239090],["v8::internal::ClassLiteralProperty::ClassLiteralProperty(v8::internal::Expression*, v8::internal::Expression*, v8::internal::ClassLiteralProperty::Kind, bool, bool, bool)",93957335516656,93957335516698],["v8::internal::CompareOperation::IsLiteralCompareUndefined(v8::internal::Expression**)",93957335519600,93957335519977],["v8::internal::MemCopy(void*, void const*, unsigned long)",93957335521104,93957335521313],["v8::internal::Handle<v8::internal::ModuleRequest> v8::internal::SourceTextModuleDescriptor::AstModuleRequest::Serialize<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*) const",93957335522736,93957335523325],["v8::internal::Handle<v8::internal::FixedArray> v8::internal::SourceTextModuleDescriptor::SerializeRegularExports<v8::internal::Isolate>(v8::internal::Isolate*, v8::internal::Zone*) const",93957335523648,93957335524736],["v8::internal::SourceTextModuleDescriptor::ModuleRequestComparer::operator()(v8::internal::SourceTextModuleDescriptor::AstModuleRequest const*, v8::internal::SourceTextModuleDescriptor::AstModuleRequest const*) const",93957335525840,93957335526137],["v8::internal::SourceTextModuleDescriptor::AddStarImport(v8::internal::AstRawString const*, v8::internal::AstRawString const*, v8::internal::ImportAssertions const*, v8::internal::Scanner::Location, v8::internal::Scanner::Location, v8::internal::Zone*)",93957335526448,93957335527326],["v8::internal::SourceTextModuleDescriptor::AddExport(v8::internal::AstRawString const*, v8::internal::AstRawString const*, v8::internal::Scanner::Location, v8::internal::Zone*)",93957335527456,93957335527588],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeI32Const(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341212720,93957341212818],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeThrow(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341219584,93957341220262],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeBrTable(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341222192,93957341223978],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeReturnCall(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341227456,93957341228323],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeReturnCallRef(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341231024,93957341231865],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeLet(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341231904,93957341233395],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeCatchAll(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341233824,93957341234049],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeSelect(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341234272,93957341234906],["v8::internal::FunctionLiteral::AllowsLazyCompilation()",93957335515728,93957335515742],["v8::internal::Literal::Match(void*, void*)",93957335517376,93957335517547],["v8::internal::BinaryOperation::IsSmiLiteralOperation(v8::internal::Expression**, v8::internal::Smi*)",93957335519216,93957335519363],["v8::internal::CallBase::ComputeSpreadPosition()",93957335520064,93957335520147],["v8::internal::AstNodeFactory::NewNumberLiteral(double, int)",93957335520896,93957335521101],["v8::base::TemplateHashMapEntry<void*, void*> v8::base::TemplateHashMapImpl<void*, void*, v8::base::HashEqualityThenKeyMatcher<void*, bool (*)(void*, void*)>, v8::internal::ZoneAllocationPolicy>::LookupOrInsert<void*, v8::base::TemplateHashMapImpl<void*, void*, v8::base::HashEqualityThenKeyMatcher<void*, bool (*)(void*, void*)>, v8::internal::ZoneAllocationPolicy>::LookupOrInsert<v8::base::TemplateHashMapImpl<void*, void*, v8::base::HashEqualityThenKeyMatcher<void*, bool (*)(void*, void*)>, v8::internal::ZoneAllocationPolicy>::LookupOrInsert(void* const&, unsigned int)::{lambda()#1}>(void* const&, unsigned int, v8::base::TemplateHashMapImpl<void*, void*, v8::base::HashEqualityThenKeyMatcher<void*, bool (*)(void*, void*)>, v8::internal::ZoneAllocationPolicy>::LookupOrInsert(void* const&, unsigned int)::{lambda()#1} const&)::{lambda()#1}, {lambda()#1}>(void* const, unsigned int, v8::base::TemplateHashMapImpl<void*, void*, v8::base::HashEqualityThenKeyMatcher<void*, bool (*)(void*, void*)>, v8::internal::ZoneAllocationPolicy>::LookupOrInsert<v8::base::TemplateHashMapImpl<void*, void*, v8::base::HashEqualityThenKeyMatcher<void*, bool (*)(void*, void*)>, v8::internal::ZoneAllocationPolicy>::LookupOrInsert(void* const&, unsigned int)::{lambda()#1}>(void* const&, unsigned int, v8::base::TemplateHashMapImpl<void*, void*, v8::base::HashEqualityThenKeyMatcher<void*, bool (*)(void*, void*)>, v8::internal::ZoneAllocationPolicy>::LookupOrInsert(void* const&, unsigned int)::{lambda()#1} const&)::{lambda()#1} const&, {lambda()#1} const&)",93957335521328,93957335521605],["v8::internal::Handle<v8::internal::ModuleRequest> v8::internal::SourceTextModuleDescriptor::AstModuleRequest::Serialize<v8::internal::Isolate>(v8::internal::Isolate*) const",93957335522144,93957335522733],["v8::internal::Handle<v8::internal::SourceTextModuleInfoEntry> v8::internal::SourceTextModuleDescriptor::Entry::Serialize<v8::internal::Isolate>(v8::internal::Isolate*) const",93957335523328,93957335523479],["v8::internal::wasm::WasmOpcode v8::internal::wasm::Decoder::read_prefixed_opcode<(v8::internal::wasm::Decoder::ValidateFlag)0>(unsigned char const*, unsigned int*, char const*)",93957341208960,93957341209039],["int v8::internal::wasm::Decoder::read_leb_slowpath<int, (v8::internal::wasm::Decoder::ValidateFlag)2, (v8::internal::wasm::Decoder::TraceFlag)0, 32ul>(unsigned char const*, unsigned int*, char const*)",93957341213520,93957341213974],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeTry(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341217792,93957341218862],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeUnwind(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341220544,93957341220766],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeBrIf(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341221648,93957341222180],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeReturn(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341223984,93957341224530],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeCallIndirect(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341225776,93957341227445],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeReturnCallIndirect(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341228336,93957341229591],["v8::internal::VariableProxy::BindTo(v8::internal::Variable*)",93957335515376,93957335515409],["v8::internal::FunctionLiteral::GetDebugName() const",93957335515792,93957335516396],["v8::internal::ObjectLiteralProperty::emit_store() const",93957335516784,93957335516793],["v8::internal::ObjectLiteral::InitDepthAndFlags()",93957335517712,93957335518592],["v8::internal::ArrayLiteral::IsFastCloningSupported() const",93957335519184,93957335519214],["v8::internal::CompareOperation::IsLiteralCompareTypeof(v8::internal::Expression**, v8::internal::Literal**)",93957335519376,93957335519587],["v8::internal::CompareOperation::IsLiteralCompareNull(v8::internal::Expression**)",93957335519984,93957335520064],["v8::internal::Call::GetCallType() const",93957335520160,93957335520542],["v8::internal::wasm::PrintRawWasmCode(v8::internal::AccountingAllocator*, v8::internal::wasm::FunctionBody const&, v8::internal::wasm::WasmModule const*, v8::internal::wasm::PrintLocals)",93957341187936,93957341188216],["long v8::internal::wasm::Decoder::read_leb_slowpath<long, (v8::internal::wasm::Decoder::ValidateFlag)2, (v8::internal::wasm::Decoder::TraceFlag)0, 33ul>(unsigned char const*, unsigned int*, char const*)",93957341210976,93957341211459],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::GrowStackSpace(int)",93957341213264,93957341213461],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeBlock(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341214048,93957341215070],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeElse(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341217456,93957341217784],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeCatch(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341218864,93957341219577],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeRethrow(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341220272,93957341220543],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeEnd(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341220768,93957341221276],["v8::internal::Literal::ToBooleanIsTrue() const",93957335514832,93957335515030],["v8::internal::FunctionLiteral::set_inferred_name(v8::internal::Handle<v8::internal::String>)",93957335515616,93957335515644],["v8::internal::FunctionLiteral::end_position() const",93957335515760,93957335515773],["v8::internal::ObjectLiteralProperty::ObjectLiteralProperty(v8::internal::AstValueFactory*, v8::internal::Expression*, v8::internal::Expression*, bool)",93957335516432,93957335516560],["v8::internal::ObjectLiteralProperty::IsCompileTimeValue() const",93957335516704,93957335516783],["v8::internal::ObjectLiteral::CalculateEmitStore(v8::internal::Zone*)",93957335516800,93957335517370],["v8::internal::Literal::Hash()",93957335517552,93957335517700],["v8::internal::ObjectLiteral::IsFastCloningSupported() const",93957335518592,93957335518631],["v8::internal::wasm::WasmDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2>::DecodeLocals(unsigned char const*, unsigned int*, v8::base::Optional<unsigned int>)",93957341183808,93957341184446],["v8::internal::wasm::WasmDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2>::AnalyzeLoopAssignment(v8::internal::wasm::WasmDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2>*, unsigned char const*, unsigned int, v8::internal::Zone*)",93957341206032,93957341207346],["v8::internal::wasm::ValueType v8::internal::wasm::value_type_reader::read_value_type<(v8::internal::wasm::Decoder::ValidateFlag)2>(v8::internal::wasm::Decoder*, unsigned char const*, unsigned int*, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmFeatures const&)",93957341209168,93957341210263],["v8::internal::wasm::Decoder::errorf(char const*, ...)",93957341212384,93957341212531],["void std::__1::vector<v8::internal::wasm::ControlBase<v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)2>, (v8::internal::wasm::Decoder::ValidateFlag)2>, v8::internal::ZoneAllocator<v8::internal::wasm::ControlBase<v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)2>, (v8::internal::wasm::Decoder::ValidateFlag)2> > >::__emplace_back_slow_path<v8::internal::wasm::ControlKind, int, int, unsigned char const*&, v8::internal::wasm::Reachability>(v8::internal::wasm::ControlKind&&, int&&, int&&, unsigned char const*&, v8::internal::wasm::Reachability&&)",93957341212832,93957341213251],["int v8::internal::wasm::Decoder::read_i32v<(v8::internal::wasm::Decoder::ValidateFlag)2>(unsigned char const*, unsigned int*, char const*)",93957341213472,93957341213510],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeUnreachable(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341213984,93957341214034],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeLoop(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341215072,93957341216094],["v8::internal::Expression::IsNumberLiteral() const",93957335514432,93957335514452],["v8::internal::Expression::IsConciseMethodDefinition() const",93957335515216,93957335515262],["v8::internal::Variable::SetMaybeAssigned()",93957335515472,93957335515570],["v8::internal::FunctionLiteral::ShouldEagerCompile() const",93957335515680,93957335515697],["v8::internal::FunctionLiteral::start_position() const",93957335515744,93957335515757],["v8::internal::FunctionLiteral::language_mode() const",93957335515776,93957335515791],["v8::internal::ObjectLiteralProperty::ObjectLiteralProperty(v8::internal::Expression*, v8::internal::Expression*, v8::internal::ObjectLiteralProperty::Kind, bool)",93957335516400,93957335516426],["v8::internal::LiteralProperty::NeedsSetFunctionName() const",93957335516560,93957335516656],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::AtomicWait(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::ValueKind, v8::internal::wasm::MemoryAccessImmediate<(v8::internal::wasm::Decoder::ValidateFlag)1> const&)",93957341179136,93957341180169],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::~WasmFullDecoder()",93957341185744,93957341185808],["v8::internal::wasm::ValueType v8::internal::wasm::value_type_reader::read_value_type<(v8::internal::wasm::Decoder::ValidateFlag)0>(v8::internal::wasm::Decoder*, unsigned char const*, unsigned int*, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmFeatures const&)",93957341205168,93957341205842],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::~WasmFullDecoder()",93957341208848,93957341208928],["unsigned int v8::internal::wasm::Decoder::read_leb_slowpath<unsigned int, (v8::internal::wasm::Decoder::ValidateFlag)0, (v8::internal::wasm::Decoder::TraceFlag)0, 32ul>(unsigned char const*, unsigned int*, char const*)",93957341209040,93957341209156],["v8::internal::wasm::HeapType v8::internal::wasm::value_type_reader::read_heap_type<(v8::internal::wasm::Decoder::ValidateFlag)2>(v8::internal::wasm::Decoder*, unsigned char const*, unsigned int*, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmFeatures const&)",93957341210272,93957341210972],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeFunctionBody()",93957341211472,93957341212373],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::DecodeLocalGet(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>*, v8::internal::wasm::WasmOpcode)",93957341212544,93957341212708],["void v8::internal::ArrayLiteral::BuildBoilerplateDescription<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*)",93957335511088,93957335512215],["v8::internal::Expression::IsTheHoleLiteral() const",93957335514592,93957335514614],["v8::internal::Expression::IsPrivateName() const",93957335515072,93957335515168],["v8::internal::Expression::IsAccessorFunctionDefinition() const",93957335515280,93957335515315],["v8::internal::VariableProxy::VariableProxy(v8::internal::VariableProxy const*)",93957335515424,93957335515463],["v8::internal::Assignment::Assignment(v8::internal::AstNode::NodeType, v8::internal::Token::Value, v8::internal::Expression*, v8::internal::Expression*, int)",93957335515584,93957335515609],["v8::internal::FunctionLiteral::set_raw_inferred_name(v8::internal::AstConsString*)",93957335515648,93957335515676],["v8::internal::FunctionLiteral::SetShouldEagerCompile()",93957335515712,93957335515726],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::AtomicBinop(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::StoreType, v8::internal::wasm::MemoryAccessImmediate<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::Register, v8::internal::Register, unsigned long, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::StoreType))",93957341175392,93957341176507],["v8::internal::wasm::liftoff::AtomicBinop(v8::internal::wasm::LiftoffAssembler*, void (v8::internal::Assembler::*)(v8::internal::Register, v8::internal::Register), void (v8::internal::Assembler::*)(v8::internal::Register, v8::internal::Register), v8::internal::Register, v8::internal::Register, unsigned long, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::StoreType)",93957341181584,93957341182380],["v8::internal::wasm::VerifyWasmCode(v8::internal::AccountingAllocator*, v8::internal::wasm::WasmFeatures const&, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmFeatures*, v8::internal::wasm::FunctionBody const&)",93957341184592,93957341185245],["v8::internal::wasm::WasmDecoder<(v8::internal::wasm::Decoder::ValidateFlag)0>::OpcodeLength(v8::internal::wasm::WasmDecoder<(v8::internal::wasm::Decoder::ValidateFlag)0>*, unsigned char const*)",93957341186016,93957341187919],["v8::internal::wasm::PrintRawWasmCode(v8::internal::AccountingAllocator*, v8::internal::wasm::FunctionBody const&, v8::internal::wasm::WasmModule const*, v8::internal::wasm::PrintLocals, std::__1::basic_ostream<char, std::__1::char_traits<char> >&, std::__1::vector<int, std::__1::allocator<int> >*)",93957341188224,93957341205163],["v8::internal::wasm::BlockTypeImmediate<(v8::internal::wasm::Decoder::ValidateFlag)0>::BlockTypeImmediate(v8::internal::wasm::WasmFeatures const&, v8::internal::wasm::Decoder*, unsigned char const*, v8::internal::wasm::WasmModule const*)",93957341205856,93957341206020],["_ZNSt3__16vectorIN2v88internal4wasm9ValueTypeENS2_13ZoneAllocatorIS4_EEE6assignINS_13move_iteratorINS_11__wrap_iterIPS4_EEEEEENS_9enable_ifIXaasr27__is_cpp17_forward_iteratorIT_EE5valuesr16is_constructibleIS4_NS_15iterator_traitsISF_E9referenceEEE5valueEvE4typeESF_SF_",93957341207360,93957341208844],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::onFirstError()",93957341208928,93957341208949],["v8::internal::AstValueFactory::NewConsString(v8::internal::AstRawString const*, v8::internal::AstRawString const*)",93957335506816,93957335507084],["v8::internal::Handle<v8::internal::TemplateObjectDescription> v8::internal::GetTemplateObject::GetOrBuildDescription<v8::internal::Isolate>(v8::internal::Isolate*)",93957335513072,93957335513701],["v8::internal::Expression::IsPropertyName() const",93957335514496,93957335514548],["v8::internal::Expression::IsLiteralButNotNullOrUndefined() const",93957335514736,93957335514788],["v8::internal::Expression::ToBooleanIsFalse() const",93957335515040,93957335515068],["v8::internal::Expression::IsAnonymousFunctionDefinition() const",93957335515168,93957335515212],["v8::internal::FunctionLiteral::kind() const",93957335515264,93957335515277],["v8::internal::VariableProxy::VariableProxy(v8::internal::Variable*, int)",93957335515328,93957335515374],["void v8::internal::wasm::liftoff::EmitSimdNonCommutativeBinOp<&v8::internal::Assembler::vpackssdw, &v8::internal::Assembler::packssdw>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341171440,93957341171661],["v8::internal::wasm::LiftoffAssembler::AtomicOr(v8::internal::Register, v8::internal::Register, unsigned long, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::StoreType)",93957341177424,93957341177494],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::AlignmentCheckMem(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, unsigned int, unsigned long, v8::internal::Register, v8::internal::wasm::LiftoffRegList)",93957341181056,93957341181339],["v8::internal::wasm::LiftoffAssembler::PatchPrepareStackFrame(int)",93957341182816,93957341183447],["v8::internal::wasm::BytecodeIterator::BytecodeIterator(unsigned char const*, unsigned char const*, v8::internal::wasm::BodyLocalDecls*)",93957341184448,93957341184583],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)2, v8::internal::wasm::EmptyInterface>::Decode()",93957341185248,93957341185731],["v8::internal::wasm::OpcodeLength(unsigned char const*, unsigned char const*)",93957341185808,93957341186011],["v8::internal::wasm::CheckHardwareSupportsSimd()",93957341187920,93957341187930],["v8::internal::AstValueFactory::GetOneByteStringInternal(v8::internal::Vector<unsigned char const>)",93957335504848,93957335504995],["v8::internal::Literal::AsArrayIndex(unsigned int*) const",93957335508736,93957335508876],["v8::internal::Expression::IsCompileTimeValue()",93957335512624,93957335512687],["v8::internal::AstNode::AsIterationStatement()",93957335514352,93957335514398],["v8::internal::Expression::IsStringLiteral() const",93957335514464,93957335514486],["v8::internal::Expression::IsNullLiteral() const",93957335514560,93957335514582],["v8::internal::Expression::IsUndefinedLiteral() const",93957335514624,93957335514724],["v8::internal::Expression::ToBooleanIsTrue() const",93957335514800,93957335514825],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vaddpd, &v8::internal::Assembler::addpd>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341169712,93957341169896],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vpavgw, &v8::internal::Assembler::pavgw>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341172320,93957341172504],["v8::internal::wasm::LiftoffAssembler::AtomicSub(v8::internal::Register, v8::internal::Register, unsigned long, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::StoreType)",93957341176896,93957341177331],["v8::internal::wasm::LiftoffAssembler::AtomicExchange(v8::internal::Register, v8::internal::Register, unsigned long, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::StoreType)",93957341177584,93957341177942],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::AtomicNotify(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::MemoryAccessImmediate<(v8::internal::wasm::Decoder::ValidateFlag)1> const&)",93957341180176,93957341181056],["v8::internal::wasm::LiftoffAssembler::AtomicStore(v8::internal::Register, v8::internal::Register, unsigned long, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::StoreType, v8::internal::wasm::LiftoffRegList)",93957341181344,93957341181575],["v8::internal::wasm::LiftoffAssembler::AtomicCompareExchange(v8::internal::Register, v8::internal::Register, unsigned long, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::StoreType)",93957341182384,93957341182801],["v8::internal::wasm::DecodeLocalDecls(v8::internal::wasm::WasmFeatures const&, v8::internal::wasm::BodyLocalDecls*, v8::internal::wasm::WasmModule const*, unsigned char const*, unsigned char const*)",93957341183456,93957341183793],["v8::internal::AstRawString::IsOneByteEqualTo(char const*) const",93957335495136,93957335495210],["v8::internal::AstValueFactory::GetString(v8::internal::Handle<v8::internal::String>)",93957335506240,93957335506535],["void v8::internal::ObjectLiteral::BuildBoilerplateDescription<v8::internal::Isolate>(v8::internal::Isolate*)",93957335507808,93957335508659],["void v8::internal::ObjectLiteral::BuildBoilerplateDescription<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*)",93957335509184,93957335510016],["v8::internal::Handle<v8::internal::Object> v8::internal::Literal::BuildValue<v8::internal::Isolate>(v8::internal::Isolate*) const",93957335512224,93957335512612],["v8::internal::Handle<v8::internal::Object> v8::internal::Literal::BuildValue<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*) const",93957335512688,93957335513061],["v8::internal::Handle<v8::internal::TemplateObjectDescription> v8::internal::GetTemplateObject::GetOrBuildDescription<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*)",93957335513712,93957335514341],["v8::internal::Expression::IsSmiLiteral() const",93957335514400,93957335514420],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vpaddq, &v8::internal::Assembler::paddq>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341168112,93957341168296],["void v8::internal::wasm::liftoff::EmitSimdNonCommutativeBinOp<&v8::internal::Assembler::vminpd, &v8::internal::Assembler::minpd>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341170544,93957341170765],["void v8::internal::wasm::liftoff::EmitSimdNonCommutativeBinOp<&v8::internal::Assembler::vandnps, &v8::internal::Assembler::andnps>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341171920,93957341172114],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::AtomicStoreMem(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::StoreType, v8::internal::wasm::MemoryAccessImmediate<(v8::internal::wasm::Decoder::ValidateFlag)1> const&)",93957341173488,93957341174310],["v8::internal::wasm::LiftoffAssembler::AtomicAdd(v8::internal::Register, v8::internal::Register, unsigned long, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::StoreType)",93957341176512,93957341176882],["v8::internal::wasm::LiftoffAssembler::AtomicAnd(v8::internal::Register, v8::internal::Register, unsigned long, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::StoreType)",93957341177344,93957341177414],["v8::internal::wasm::LiftoffAssembler::AtomicXor(v8::internal::Register, v8::internal::Register, unsigned long, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::StoreType)",93957341177504,93957341177574],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::AtomicCompareExchange(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::StoreType, v8::internal::wasm::MemoryAccessImmediate<(v8::internal::wasm::Decoder::ValidateFlag)1> const&)",93957341177952,93957341179124],["v8::internal::Handle<v8::internal::String> v8::internal::AstConsString::AllocateFlat<v8::internal::Isolate>(v8::internal::Isolate*) const",93957335491472,93957335491927],["v8::internal::AstConsString::ToRawStrings() const",93957335495792,93957335495919],["v8::internal::AstValueFactory::GetTwoByteStringInternal(v8::internal::Vector<unsigned short const>)",93957335505568,93957335505633],["v8::internal::AstValueFactory::NewConsString()",93957335506576,93957335506640],["v8::base::TemplateHashMapImpl<v8::internal::AstRawString const*, v8::base::NoHashMapValue, v8::internal::AstRawStringMapMatcher, v8::base::DefaultAllocationPolicy>::Resize()",93957335507088,93957335507807],["v8::internal::Literal::IsPropertyName() const",93957335508672,93957335508724],["v8::internal::ObjectBoilerplateDescription::set_key_value(int, v8::internal::Object, v8::internal::Object)",93957335508880,93957335509172],["void v8::internal::ArrayLiteral::BuildBoilerplateDescription<v8::internal::Isolate>(v8::internal::Isolate*)",93957335510016,93957335511076],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vpmulld, &v8::internal::Assembler::pmulld>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341165296,93957341165502],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vmulps, &v8::internal::Assembler::mulps>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341168912,93957341169073],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vmulpd, &v8::internal::Assembler::mulpd>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341170128,93957341170312],["void v8::internal::wasm::liftoff::EmitSimdNonCommutativeBinOp<&v8::internal::Assembler::vpacksswb, &v8::internal::Assembler::packsswb>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341170992,93957341171213],["void v8::internal::wasm::liftoff::EmitSimdNonCommutativeBinOp<&v8::internal::Assembler::vpackusdw, &v8::internal::Assembler::packusdw>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341171664,93957341171910],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vpavgb, &v8::internal::Assembler::pavgb>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341172128,93957341172312],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::AtomicOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::Vector<v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> >, v8::internal::wasm::MemoryAccessImmediate<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)",93957341172512,93957341173486],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::AtomicLoadMem(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::LoadType, v8::internal::wasm::MemoryAccessImmediate<(v8::internal::wasm::Decoder::ValidateFlag)1> const&)",93957341174320,93957341175380],["v8::internal::AstTraversalVisitor<v8::internal::AstFunctionLiteralIdReindexer>::VisitObjectLiteral(v8::internal::ObjectLiteral*)",93957335490112,93957335490338],["v8::internal::Handle<v8::internal::String> v8::internal::AstConsString::AllocateFlat<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*) const",93957335493872,93957335494325],["v8::internal::AstRawString::Equal(v8::internal::AstRawString const*, v8::internal::AstRawString const*)",93957335495248,93957335495497],["unsigned int v8::internal::StringHasher::HashSequentialString<char>(char const*, int, unsigned long)",93957335503968,93957335504513],["v8::internal::AstValueFactory::GetString(unsigned int, bool, v8::internal::Vector<unsigned char const>)",93957335505008,93957335505563],["unsigned int v8::internal::StringHasher::HashSequentialString<unsigned short>(unsigned short const*, int, unsigned long)",93957335505648,93957335506225],["v8::internal::AstValueFactory::CloneFromOtherFactory(v8::internal::AstRawString const*)",93957335506544,93957335506571],["v8::internal::AstValueFactory::NewConsString(v8::internal::AstRawString const*)",93957335506640,93957335506808],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vpmullw, &v8::internal::Assembler::pmullw>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341163216,93957341163400],["void v8::internal::wasm::liftoff::EmitSimdShiftOp<&v8::internal::Assembler::vpsllq, &v8::internal::Assembler::psllq, (unsigned char)6>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341166320,93957341166595],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vaddps, &v8::internal::Assembler::addps>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341168528,93957341168689],["void v8::internal::wasm::liftoff::EmitSimdNonCommutativeBinOp<&v8::internal::Assembler::vminps, &v8::internal::Assembler::minps>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341169296,93957341169490],["void v8::internal::wasm::liftoff::EmitSimdNonCommutativeBinOp<&v8::internal::Assembler::vsubpd, &v8::internal::Assembler::subpd>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341169904,93957341170125],["void v8::internal::wasm::liftoff::EmitSimdNonCommutativeBinOp<&v8::internal::Assembler::vdivpd, &v8::internal::Assembler::divpd>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341170320,93957341170541],["void v8::internal::wasm::liftoff::EmitSimdNonCommutativeBinOp<&v8::internal::Assembler::vmaxpd, &v8::internal::Assembler::maxpd>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341170768,93957341170989],["void v8::internal::wasm::liftoff::EmitSimdNonCommutativeBinOp<&v8::internal::Assembler::vpackuswb, &v8::internal::Assembler::packuswb>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341171216,93957341171437],["v8::internal::AstTraversalVisitor<v8::internal::AstFunctionLiteralIdReindexer>::VisitNoStackOverflowCheck(v8::internal::AstNode*)",93957335487040,93957335488635],["v8::internal::AstTraversalVisitor<v8::internal::AstFunctionLiteralIdReindexer>::VisitConditional(v8::internal::Conditional*)",93957335490912,93957335491090],["void v8::internal::CopyChars<unsigned char, char16_t>(char16_t*, unsigned char const*, unsigned long)",93957335492208,93957335493584],["void v8::internal::AstValueFactory::Internalize<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*)",93957335494640,93957335494933],["v8::internal::AstRawString::FirstCharacter() const",93957335495216,93957335495244],["v8::internal::AstRawString::Compare(v8::internal::AstRawString const*, v8::internal::AstRawString const*)",93957335495504,93957335495784],["v8::internal::AstStringConstants::AstStringConstants(v8::internal::Isolate*, unsigned long)",93957335495920,93957335503962],["v8::base::TemplateHashMapImpl<v8::internal::AstRawString const*, v8::base::NoHashMapValue, v8::internal::AstRawStringMapMatcher, v8::base::DefaultAllocationPolicy>::InsertNew(v8::internal::AstRawString const* const&, unsigned int)",93957335504528,93957335504840],["void v8::internal::wasm::liftoff::EmitSimdShiftOp<&v8::internal::Assembler::vpsraw, &v8::internal::Assembler::psraw, (unsigned char)4>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341161392,93957341161667],["void v8::internal::wasm::liftoff::EmitSimdShiftOp<&v8::internal::Assembler::vpsrad, &v8::internal::Assembler::psrad, (unsigned char)5>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341164304,93957341164579],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vpmaddwd, &v8::internal::Assembler::pmaddwd>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341165712,93957341165896],["void v8::internal::wasm::liftoff::EmitI64x2ShrS<v8::internal::Immediate>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::Immediate, bool)",93957341167216,93957341167821],["void v8::internal::wasm::liftoff::EmitSimdNonCommutativeBinOp<&v8::internal::Assembler::vpsubq, &v8::internal::Assembler::psubq>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341168304,93957341168525],["void v8::internal::wasm::liftoff::EmitSimdNonCommutativeBinOp<&v8::internal::Assembler::vsubps, &v8::internal::Assembler::subps>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341168704,93957341168898],["void v8::internal::wasm::liftoff::EmitSimdNonCommutativeBinOp<&v8::internal::Assembler::vdivps, &v8::internal::Assembler::divps>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341169088,93957341169282],["void v8::internal::wasm::liftoff::EmitSimdNonCommutativeBinOp<&v8::internal::Assembler::vmaxps, &v8::internal::Assembler::maxps>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341169504,93957341169698],["v8::internal::Handle<v8::internal::AccessorInfo> v8::(anonymous namespace)::MakeAccessorInfo<void (*)(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&), void (*)(v8::Local<v8::Name>, v8::Local<v8::Value>, v8::PropertyCallbackInfo<void> const&)>(v8::internal::Isolate*, v8::Local<v8::Name>, void (*)(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&), void (*)(v8::Local<v8::Name>, v8::Local<v8::Value>, v8::PropertyCallbackInfo<void> const&), v8::Local<v8::Value>, v8::AccessControl, v8::Local<v8::AccessorSignature>, bool, bool)",93957335484880,93957335486021],["v8::internal::AstTraversalVisitor<v8::internal::AstFunctionLiteralIdReindexer>::VisitSwitchStatement(v8::internal::SwitchStatement*)",93957335489264,93957335489520],["v8::internal::AstTraversalVisitor<v8::internal::AstFunctionLiteralIdReindexer>::VisitNaryOperation(v8::internal::NaryOperation*)",93957335490496,93957335490717],["v8::internal::Handle<v8::internal::String> v8::internal::AstConsString::Allocate<v8::internal::Isolate>(v8::internal::Isolate*) const",93957335491248,93957335491357],["void v8::internal::CopyChars<unsigned char, unsigned char>(unsigned char*, unsigned char const*, unsigned long)",93957335491936,93957335492201],["void v8::internal::CopyChars<unsigned short, unsigned short>(unsigned short*, unsigned short const*, unsigned long)",93957335493584,93957335493866],["void v8::internal::AstValueFactory::Internalize<v8::internal::Isolate>(v8::internal::Isolate*)",93957335494336,93957335494637],["v8::internal::AstRawString::AsArrayIndex(unsigned int*) const",93957335494944,93957335495128],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vpaddsb, &v8::internal::Assembler::paddsb>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341159424,93957341159608],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vpaddusw, &v8::internal::Assembler::paddusw>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341162352,93957341162536],["void v8::internal::wasm::liftoff::EmitAllTrue<&(void v8::internal::TurboAssembler::Pcmpeqd<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister))>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341163600,93957341164001],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vpaddd, &v8::internal::Assembler::paddd>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341164880,93957341165064],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vpmaxsd, &v8::internal::Assembler::pmaxsd>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341165504,93957341165710],["void v8::internal::wasm::liftoff::EmitAllTrue<&(void v8::internal::TurboAssembler::Pcmpeqq<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister))>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341165904,93957341166315],["void v8::internal::wasm::liftoff::EmitI64x2ShrS<v8::internal::Register>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::Register, bool)",93957341166608,93957341167213],["void v8::internal::wasm::liftoff::EmitSimdShiftOp<&v8::internal::Assembler::vpsrlq, &v8::internal::Assembler::psrlq, (unsigned char)6>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341167824,93957341168099],["v8::internal::EmbedderNode::WrapperNode()",93957335483008,93957335483018],["v8::internal::AstFunctionLiteralIdReindexer::AstFunctionLiteralIdReindexer(unsigned long, int)",93957335486160,93957335486191],["v8::internal::AstTraversalVisitor<v8::internal::AstFunctionLiteralIdReindexer>::VisitForInStatement(v8::internal::ForInStatement*)",93957335488848,93957335488984],["v8::internal::AstTraversalVisitor<v8::internal::AstFunctionLiteralIdReindexer>::VisitInitializeClassMembersStatement(v8::internal::InitializeClassMembersStatement*)",93957335489664,93957335489859],["v8::internal::AstTraversalVisitor<v8::internal::AstFunctionLiteralIdReindexer>::VisitProperty(v8::internal::Property*)",93957335490352,93957335490487],["v8::internal::AstTraversalVisitor<v8::internal::AstFunctionLiteralIdReindexer>::VisitCallNew(v8::internal::CallNew*)",93957335490720,93957335490907],["v8::internal::AstTraversalVisitor<v8::internal::AstFunctionLiteralIdReindexer>::VisitImportCallExpression(v8::internal::ImportCallExpression*)",93957335491104,93957335491246],["v8::internal::Handle<v8::internal::String> v8::internal::AstConsString::Allocate<v8::internal::LocalIsolate>(v8::internal::LocalIsolate*) const",93957335491360,93957335491466],["void v8::internal::wasm::liftoff::EmitSimdNonCommutativeBinOp<&v8::internal::Assembler::vcmpltpd, &v8::internal::Assembler::cmpltpd>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341156640,93957341156848],["void v8::internal::wasm::liftoff::EmitSimdNonCommutativeBinOp<&v8::internal::Assembler::vpsubusb, &v8::internal::Assembler::psubusb>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341160256,93957341160477],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vpaddw, &v8::internal::Assembler::paddw>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341161968,93957341162152],["void v8::internal::wasm::liftoff::EmitSimdNonCommutativeBinOp<&v8::internal::Assembler::vpsubsw, &v8::internal::Assembler::psubsw>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341162768,93957341162989],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vpmaxsw, &v8::internal::Assembler::pmaxsw>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341163408,93957341163592],["void v8::internal::wasm::liftoff::EmitSimdShiftOp<&v8::internal::Assembler::vpslld, &v8::internal::Assembler::pslld, (unsigned char)5>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341164016,93957341164291],["void v8::internal::wasm::liftoff::EmitSimdShiftOp<&v8::internal::Assembler::vpsrld, &v8::internal::Assembler::psrld, (unsigned char)5>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341164592,93957341164867],["void v8::internal::wasm::liftoff::EmitSimdNonCommutativeBinOp<&v8::internal::Assembler::vpsubd, &v8::internal::Assembler::psubd>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341165072,93957341165293],["v8::internal::HandleScopeImplementer::DetachPersistent(unsigned long*)",93957335480528,93957335481007],["v8::(anonymous namespace)::ArrayBufferAllocator::Reallocate(void*, unsigned long, unsigned long)",93957335483392,93957335483457],["v8::internal::InterruptsScope::~InterruptsScope()",93957335486064,93957335486112],["v8::internal::AstTraversalVisitor<v8::internal::AstFunctionLiteralIdReindexer>::VisitFunctionLiteral(v8::internal::FunctionLiteral*)",93957335486256,93957335486520],["v8::internal::AstTraversalVisitor<v8::internal::AstFunctionLiteralIdReindexer>::VisitForStatement(v8::internal::ForStatement*)",93957335488640,93957335488843],["v8::internal::AstTraversalVisitor<v8::internal::AstFunctionLiteralIdReindexer>::VisitBlock(v8::internal::Block*)",93957335488992,93957335489259],["v8::internal::AstTraversalVisitor<v8::internal::AstFunctionLiteralIdReindexer>::VisitIfStatement(v8::internal::IfStatement*)",93957335489520,93957335489656],["v8::internal::AstTraversalVisitor<v8::internal::AstFunctionLiteralIdReindexer>::VisitInitializeClassStaticElementsStatement(v8::internal::InitializeClassStaticElementsStatement*)",93957335489872,93957335490109],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vpminud, &v8::internal::Assembler::pminud>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341155104,93957341155310],["void v8::internal::wasm::liftoff::EmitAllTrue<&(void v8::internal::TurboAssembler::Pcmpeqb<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister))>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341157440,93957341157841],["void v8::internal::wasm::liftoff::EmitSimdNonCommutativeBinOp<&v8::internal::Assembler::vpsubb, &v8::internal::Assembler::psubb>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341159808,93957341160029],["void v8::internal::wasm::liftoff::EmitAllTrue<&(void v8::internal::TurboAssembler::Pcmpeqw<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister))>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341160688,93957341161089],["void v8::internal::wasm::liftoff::EmitSimdShiftOp<&v8::internal::Assembler::vpsrlw, &v8::internal::Assembler::psrlw, (unsigned char)4>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341161680,93957341161955],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vpaddsw, &v8::internal::Assembler::paddsw>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341162160,93957341162344],["void v8::internal::wasm::liftoff::EmitSimdNonCommutativeBinOp<&v8::internal::Assembler::vpsubw, &v8::internal::Assembler::psubw>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341162544,93957341162765],["void v8::internal::wasm::liftoff::EmitSimdNonCommutativeBinOp<&v8::internal::Assembler::vpsubusw, &v8::internal::Assembler::psubusw>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341162992,93957341163213],["v8::EmbedderHeapTracer::FinalizeTracing()",93957335479680,93957335479727],["v8::internal::InvokeFinalizationRegistryCleanupFromTask(v8::internal::Handle<v8::internal::Context>, v8::internal::Handle<v8::internal::JSFinalizationRegistry>, v8::internal::Handle<v8::internal::Object>)",93957335482288,93957335482900],["v8::(anonymous namespace)::ArrayBufferAllocator::Allocate(unsigned long)",93957335483344,93957335483362],["void std::__1::vector<v8::MemoryRange, std::__1::allocator<v8::MemoryRange> >::__push_back_slow_path<v8::MemoryRange const&>(v8::MemoryRange const&)",93957335483488,93957335483755],["v8::internal::InterruptsScope::~InterruptsScope()",93957335486032,93957335486064],["std::__1::__shared_ptr_pointer<v8::internal::BackingStore*, std::__1::default_delete<v8::internal::BackingStore>, std::__1::allocator<v8::internal::BackingStore> >::__on_zero_shared()",93957335486112,93957335486156],["v8::internal::AstFunctionLiteralIdReindexer::Reindex(v8::internal::Expression*)",93957335486192,93957335486250],["v8::internal::AstFunctionLiteralIdReindexer::VisitClassLiteral(v8::internal::ClassLiteral*)",93957335486528,93957335487032],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vpcmpeqw, &v8::internal::Assembler::pcmpeqw>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341153440,93957341153624],["void v8::internal::wasm::liftoff::EmitSimdNonCommutativeBinOp<&v8::internal::Assembler::vcmpltps, &v8::internal::Assembler::cmpltps>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341155872,93957341156080],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vpand, &v8::internal::Assembler::pand>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341157056,93957341157240],["void v8::internal::wasm::liftoff::EmitI8x16Shr<false>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341158544,93957341159224],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vpaddusb, &v8::internal::Assembler::paddusb>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341159616,93957341159800],["void v8::internal::wasm::liftoff::EmitSimdNonCommutativeBinOp<&v8::internal::Assembler::vpsubsb, &v8::internal::Assembler::psubsb>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341160032,93957341160253],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vpmaxsb, &v8::internal::Assembler::pmaxsb>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341160480,93957341160686],["void v8::internal::wasm::liftoff::EmitSimdShiftOp<&v8::internal::Assembler::vpsllw, &v8::internal::Assembler::psllw, (unsigned char)4>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341161104,93957341161379],["v8::HeapProfiler::TakeHeapSnapshot(v8::ActivityControl*, v8::HeapProfiler::ObjectNameResolver*, bool)",93957335479520,93957335479530],["v8::internal::HandleScopeImplementer::ArchiveSpacePerThread()",93957335479872,93957335479883],["v8::internal::InvokeAccessorGetterCallback(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&, void (*)(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&))",93957335481040,93957335481669],["v8::internal::GCExtension::~GCExtension()",93957335482944,93957335482992],["_ZN2v88internal11StringShape33DispatchToSpecificTypeWithoutCastIZNS1_22DispatchToSpecificTypeIZNKS0_6String7GetImplEiE19StringGetDispatchertJRiEEET0_S4_DpOT1_E17CastingDispatchertJRS4_S6_EEES7_SA_",93957335483024,93957335483333],["v8::(anonymous namespace)::ArrayBufferAllocator::AllocateUninitialized(unsigned long)",93957335483376,93957335483389],["v8::internal::StringsStorage::StringsMatch(void*, void*)",93957335483472,93957335483488],["v8::internal::Handle<v8::internal::AccessorInfo> v8::(anonymous namespace)::MakeAccessorInfo<void (*)(v8::Local<v8::String>, v8::PropertyCallbackInfo<v8::Value> const&), void (*)(v8::Local<v8::String>, v8::Local<v8::Value>, v8::PropertyCallbackInfo<void> const&)>(v8::internal::Isolate*, v8::Local<v8::Name>, void (*)(v8::Local<v8::String>, v8::PropertyCallbackInfo<v8::Value> const&), void (*)(v8::Local<v8::String>, v8::Local<v8::Value>, v8::PropertyCallbackInfo<void> const&), v8::Local<v8::Value>, v8::AccessControl, v8::Local<v8::AccessorSignature>, bool, bool)",93957335483760,93957335484880],["v8::internal::wasm::LiftoffAssembler::emit_f32x4_demote_f64x2_zero(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341152288,93957341152362],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vpminuw, &v8::internal::Assembler::pminuw>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341154256,93957341154462],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vcmpeqps, &v8::internal::Assembler::cmpeqps>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341155520,93957341155688],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vcmpeqpd, &v8::internal::Assembler::cmpeqpd>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341156288,93957341156456],["void v8::internal::wasm::liftoff::EmitSimdNonCommutativeBinOp<&v8::internal::Assembler::vcmplepd, &v8::internal::Assembler::cmplepd>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341156848,93957341157056],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vpor, &v8::internal::Assembler::por>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341157248,93957341157432],["void v8::internal::wasm::liftoff::EmitI8x16Shr<true>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341157856,93957341158536],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vpaddb, &v8::internal::Assembler::paddb>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341159232,93957341159416],["v8::CpuProfiler::StartProfiling(v8::Local<v8::String>, v8::CpuProfilingOptions, std::__1::unique_ptr<v8::DiscardedSamplesDelegate, std::__1::default_delete<v8::DiscardedSamplesDelegate> >)",93957335478832,93957335478845],["v8::HeapProfiler::StartSamplingHeapProfiler(unsigned long, int, v8::HeapProfiler::SamplingFlags)",93957335479584,93957335479594],["v8::RegisterState::~RegisterState()",93957335479744,93957335479776],["v8::internal::HandleScopeImplementer::Iterate(v8::internal::RootVisitor*)",93957335480432,93957335480470],["v8::internal::HandleScopeImplementer::BeginDeferredScope()",93957335481008,93957335481028],["v8::internal::InvokeFunctionCallback(v8::FunctionCallbackInfo<v8::Value> const&, void (*)(v8::FunctionCallbackInfo<v8::Value> const&))",93957335481680,93957335482288],["v8::Extension::~Extension()",93957335482912,93957335482944],["v8::base::PageAllocator::CommitPageSize()",93957335482992,93957335483002],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_rounding_average_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341151712,93957341151725],["void v8::internal::wasm::liftoff::EmitSimdNonCommutativeBinOp<&v8::internal::Assembler::vpcmpgtb, &v8::internal::Assembler::pcmpgtb>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341152624,93957341152845],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vpmaxuw, &v8::internal::Assembler::pmaxuw>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341153856,93957341154062],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vpmaxud, &v8::internal::Assembler::pmaxud>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341154688,93957341154894],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vpcmpeqq, &v8::internal::Assembler::pcmpeqq>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341155312,93957341155518],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vcmpneqps, &v8::internal::Assembler::cmpneqps>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341155696,93957341155867],["void v8::internal::wasm::liftoff::EmitSimdNonCommutativeBinOp<&v8::internal::Assembler::vcmpleps, &v8::internal::Assembler::cmpleps>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341156080,93957341156288],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vcmpneqpd, &v8::internal::Assembler::cmpneqpd>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341156464,93957341156635],["v8::CpuProfile::GetSampleTimestamp(int) const",93957335478512,93957335478593],["v8::HeapSnapshot::Serialize(v8::OutputStream*, v8::HeapSnapshot::SerializationFormat) const",93957335479008,93957335479460],["v8::HeapProfiler::StopTrackingHeapObjects()",93957335479552,93957335479562],["v8::HeapProfiler::GetAllocationProfile()",93957335479616,93957335479626],["v8::CFunctionInfo::ArgumentInfo(unsigned int) const",93957335479728,93957335479743],["v8::RegisterState::RegisterState(v8::RegisterState const&)",93957335479776,93957335479871],["v8::internal::HandleScopeImplementer::IterateThis(v8::internal::RootVisitor*)",93957335479888,93957335480425],["v8::internal::HandleScopeImplementer::Iterate(v8::internal::RootVisitor*, char*)",93957335480480,93957335480514],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_uconvert_i8x16_low(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341151232,93957341151338],["v8::internal::wasm::LiftoffAssembler::emit_i64x2_abs(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341152064,93957341152087],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_trunc_sat_f64x2_u_zero(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341152400,93957341152423],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vpminsb, &v8::internal::Assembler::pminsb>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341153040,93957341153246],["void v8::internal::wasm::liftoff::EmitSimdNonCommutativeBinOp<&v8::internal::Assembler::vpcmpgtw, &v8::internal::Assembler::pcmpgtw>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341153632,93957341153853],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vpminsw, &v8::internal::Assembler::pminsw>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341154064,93957341154248],["void v8::internal::wasm::liftoff::EmitSimdNonCommutativeBinOp<&v8::internal::Assembler::vpcmpgtd, &v8::internal::Assembler::pcmpgtd>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341154464,93957341154685],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vpminsd, &v8::internal::Assembler::pminsd>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341154896,93957341155102],["v8::CpuProfileNode::GetBailoutReason() const",93957335478240,93957335478278],["v8::CpuProfiler::New(v8::Isolate*, v8::CpuProfilingNamingMode, v8::CpuProfilingLoggingMode)",93957335478688,93957335478750],["v8::CpuProfiler::StopProfiling(v8::Local<v8::String>)",93957335478896,93957335478909],["v8::HeapProfiler::FindObjectById(unsigned int)",93957335479488,93957335479498],["v8::HeapProfiler::StartTrackingHeapObjects(bool)",93957335479536,93957335479546],["v8::HeapProfiler::GetHeapStats(v8::OutputStream*, long*)",93957335479568,93957335479578],["v8::HeapProfiler::StopSamplingHeapProfiler()",93957335479600,93957335479610],["v8::EmbedderHeapTracer::NotifyEmptyEmbedderStack()",93957335479632,93957335479679],["v8::internal::wasm::LiftoffAssembler::emit_f32x4_sconvert_i32x4(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341150304,93957341150372],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_uconvert_i16x8_low(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341151520,93957341151626],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_abs(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341151840,93957341151946],["v8::internal::wasm::LiftoffAssembler::emit_f64x2_convert_low_i32x4_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341152176,93957341152199],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_trunc_sat_f64x2_s_zero(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341152368,93957341152391],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vpcmpeqb, &v8::internal::Assembler::pcmpeqb>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341152432,93957341152616],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vpmaxub, &v8::internal::Assembler::pmaxub>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341152848,93957341153032],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vpminub, &v8::internal::Assembler::pminub>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341153248,93957341153432],["v8::Object::PreviewEntries(bool*)",93957335477584,93957335478013],["v8::CpuProfileNode::GetChild(int) const",93957335478352,93957335478394],["v8::CpuProfile::GetEndTime() const",93957335478640,93957335478671],["v8::CpuProfiler::Dispose()",93957335478768,93957335478802],["v8::CpuProfiler::StartProfiling(v8::Local<v8::String>, bool)",93957335478848,93957335478889],["v8::HeapSnapshot::Delete()",93957335478912,93957335478994],["v8::HeapProfiler::GetObjectId(v8::Local<v8::Value>)",93957335479472,93957335479482],["v8::HeapProfiler::ClearObjectIds()",93957335479504,93957335479514],["v8::internal::wasm::LiftoffAssembler::emit_f64x2_mul(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341146528,93957341146541],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_sconvert_i32x4(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341151040,93957341151053],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_sconvert_i16x8_low(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341151376,93957341151482],["v8::internal::wasm::LiftoffAssembler::emit_s128_and_not(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341151664,93957341151683],["v8::internal::wasm::LiftoffAssembler::emit_i8x16_abs(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341151728,93957341151834],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_abs(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341151952,93957341152058],["v8::internal::wasm::LiftoffAssembler::emit_f64x2_convert_low_i32x4_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341152096,93957341152174],["v8::internal::wasm::LiftoffAssembler::emit_f64x2_promote_low_f32x4(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341152208,93957341152276],["v8::Isolate::IsInUse()",93957335475744,93957335475761],["v8::CpuProfileNode::GetLineNumber() const",93957335478160,93957335478182],["v8::CpuProfileNode::GetNodeId() const",93957335478304,93957335478313],["v8::CpuProfile::GetTopDownRoot() const",93957335478432,93957335478445],["v8::CpuProfile::GetStartTime() const",93957335478608,93957335478639],["v8::CpuProfile::GetSamplesCount() const",93957335478672,93957335478681],["v8::CpuProfilingOptions::CpuProfilingOptions(v8::CpuProfilingMode, unsigned int, int, v8::MaybeLocal<v8::Context>)",93957335478752,93957335478766],["v8::CpuProfiler::SetSamplingInterval(int)",93957335478816,93957335478829],["v8::internal::wasm::LiftoffAssembler::emit_f64x2_neg(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341145520,93957341145899],["v8::internal::wasm::LiftoffAssembler::emit_f64x2_pmin(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341148256,93957341148275],["v8::internal::wasm::LiftoffAssembler::emit_i8x16_sconvert_i16x8(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341151008,93957341151021],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_sconvert_i8x16_low(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341151088,93957341151194],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_uconvert_i8x16_high(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341151344,93957341151367],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_sconvert_i16x8_high(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341151488,93957341151511],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_uconvert_i16x8_high(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341151632,93957341151655],["v8::internal::wasm::LiftoffAssembler::emit_i8x16_rounding_average_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341151696,93957341151709],["v8::Isolate::SetAllowWasmCodeGenerationCallback(bool (*)(v8::Local<v8::Context>, v8::Local<v8::String>))",93957335475120,93957335475133],["v8::String::Utf8Value::~Utf8Value()",93957335476416,93957335476436],["v8::CpuProfileNode::GetScriptId() const",93957335478080,93957335478093],["v8::CpuProfileNode::GetHitLineCount() const",93957335478208,93957335478220],["v8::internal::RegExpAtom::max_match()",93957335478288,93957335478297],["v8::CpuProfileNode::GetChildrenCount() const",93957335478320,93957335478338],["v8::CpuProfile::Delete()",93957335478400,93957335478420],["v8::CpuProfile::GetSample(int) const",93957335478448,93957335478507],["v8::internal::wasm::LiftoffAssembler::emit_f32x4_sub(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341143648,93957341143661],["v8::internal::wasm::LiftoffAssembler::emit_f64x2_trunc(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341146240,93957341146357],["v8::internal::wasm::LiftoffAssembler::emit_f64x2_min(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341146560,93957341147351],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_sconvert_f32x4(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341148320,93957341149055],["v8::internal::wasm::LiftoffAssembler::emit_f32x4_uconvert_i32x4(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341150384,93957341151002],["v8::internal::wasm::LiftoffAssembler::emit_i8x16_uconvert_i16x8(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341151024,93957341151037],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_uconvert_i32x4(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341151056,93957341151076],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_sconvert_i8x16_high(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341151200,93957341151223],["v8::Isolate::EnqueueMicrotask(void (*)(void*), void*)",93957335474160,93957335474186],["v8::Isolate::AddNearHeapLimitCallback(unsigned long (*)(void*, unsigned long, unsigned long), void*)",93957335475184,93957335475201],["v8::MicrotasksScope::~MicrotasksScope()",93957335475824,93957335475880],["v8::Exception::Error(v8::Local<v8::String>)",93957335476912,93957335477373],["v8::CpuProfileNode::GetFunctionName() const",93957335478016,93957335478079],["v8::CpuProfileNode::GetScriptResourceName() const",93957335478096,93957335478159],["v8::CpuProfileNode::GetColumnNumber() const",93957335478192,93957335478205],["v8::CpuProfileNode::GetLineTicks(v8::CpuProfileNode::LineTick*, unsigned int) const",93957335478224,93957335478234],["v8::internal::wasm::LiftoffAssembler::emit_f32x4_neg(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341141936,93957341142284],["v8::internal::wasm::LiftoffAssembler::emit_f32x4_max(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341144352,93957341145066],["v8::internal::wasm::LiftoffAssembler::emit_f64x2_ceil(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341145984,93957341146101],["v8::internal::wasm::LiftoffAssembler::emit_f64x2_add(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341146496,93957341146509],["v8::internal::wasm::LiftoffAssembler::emit_f64x2_div(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341146544,93957341146557],["v8::internal::wasm::LiftoffAssembler::emit_f64x2_max(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341147360,93957341148247],["v8::internal::wasm::LiftoffAssembler::emit_f64x2_pmax(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341148288,93957341148307],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_uconvert_f32x4(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341149056,93957341150292],["v8::Isolate::MeasureMemory(std::__1::unique_ptr<v8::MeasureMemoryDelegate, std::__1::default_delete<v8::MeasureMemoryDelegate> >, v8::MeasureMemoryExecution)",93957335473696,93957335473713],["v8::Isolate::LowMemoryNotification()",93957335474304,93957335474724],["v8::Isolate::SetWasmInstanceCallback(bool (*)(v8::FunctionCallbackInfo<v8::Value> const&))",93957335475152,93957335475165],["v8::Isolate::AddMessageListenerWithErrorLevel(void (*)(v8::Local<v8::Message>, v8::Local<v8::Value>), int, v8::Local<v8::Value>)",93957335475248,93957335475724],["v8::MicrotasksScope::MicrotasksScope(v8::Isolate*, v8::MicrotasksScope::Type)",93957335475776,93957335475810],["v8::String::Utf8Value::Utf8Value(v8::Isolate*, v8::Local<v8::Value>)",93957335475888,93957335476413],["v8::Exception::RangeError(v8::Local<v8::String>)",93957335476448,93957335476909],["v8::Exception::CreateMessage(v8::Isolate*, v8::Local<v8::Value>)",93957335477376,93957335477572],["v8::internal::wasm::LiftoffAssembler::emit_i64x2_extmul_high_i32x4_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341141136,93957341141174],["v8::internal::wasm::LiftoffAssembler::emit_f32x4_floor(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341143248,93957341143365],["v8::internal::wasm::LiftoffAssembler::emit_f32x4_div(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341143680,93957341143693],["v8::internal::wasm::LiftoffAssembler::emit_f32x4_pmax(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341145104,93957341145123],["v8::internal::wasm::LiftoffAssembler::emit_f64x2_sqrt(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341145904,93957341145978],["v8::internal::wasm::LiftoffAssembler::emit_f64x2_floor(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341146112,93957341146229],["v8::internal::wasm::LiftoffAssembler::emit_f64x2_nearest_int(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341146368,93957341146482],["v8::internal::wasm::LiftoffAssembler::emit_f64x2_sub(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341146512,93957341146525],["v8::Isolate::AllowJavascriptExecutionScope::AllowJavascriptExecutionScope(v8::Isolate*)",93957335472912,93957335472968],["v8::Isolate::RemoveCallCompletedCallback(void (*)(v8::Isolate*))",93957335474064,93957335474074],["v8::Isolate::RemoveMicrotasksCompletedCallback(void (*)(v8::Isolate*, void*), void*)",93957335474224,93957335474241],["v8::Isolate::MemoryPressureNotification(v8::MemoryPressureLevel)",93957335475008,93957335475101],["v8::Isolate::SetWasmModuleCallback(bool (*)(v8::FunctionCallbackInfo<v8::Value> const&))",93957335475136,93957335475149],["v8::Isolate::SetWasmLoadSourceMapCallback(v8::Local<v8::String> (*)(v8::Isolate*, char const*))",93957335475168,93957335475181],["v8::Isolate::RemoveNearHeapLimitCallback(unsigned long (*)(void*, unsigned long, unsigned long), unsigned long)",93957335475216,93957335475233],["v8::Isolate::SetCaptureStackTraceForUncaughtExceptions(bool, int, v8::StackTrace::StackTraceOptions)",93957335475728,93957335475738],["v8::internal::wasm::LiftoffAssembler::emit_i64x2_shri_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, int)",93957341139824,93957341139839],["v8::internal::wasm::LiftoffAssembler::emit_i64x2_sconvert_i32x4_high(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341141408,93957341141431],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitSimdFloatRoundingOpWithCFallback(bool (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister), v8::internal::ExternalReference (*)())",93957341142368,93957341143108],["v8::internal::wasm::LiftoffAssembler::emit_f32x4_nearest_int(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341143504,93957341143618],["v8::internal::wasm::LiftoffAssembler::emit_f32x4_mul(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341143664,93957341143677],["v8::internal::wasm::LiftoffAssembler::emit_f32x4_min(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341143696,93957341144340],["v8::internal::wasm::LiftoffAssembler::emit_f32x4_pmin(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341145072,93957341145091],["v8::internal::wasm::LiftoffAssembler::emit_f64x2_abs(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341145136,93957341145515],["v8::Isolate::SetCounterFunction(int* (*)(char const*))",93957335472560,93957335472577],["v8::Isolate::SafeForTerminationScope::SafeForTerminationScope(v8::Isolate*)",93957335473136,93957335473161],["v8::Isolate::AdjustAmountOfExternalAllocatedMemory(long)",93957335473872,93957335474031],["v8::Isolate::SetPromiseRejectCallback(void (*)(v8::PromiseRejectMessage))",93957335474096,93957335474113],["v8::Isolate::AddMicrotasksCompletedCallback(void (*)(v8::Isolate*, void*), void*)",93957335474192,93957335474209],["v8::Isolate::IdleNotificationDeadline(double)",93957335474256,93957335474289],["v8::Isolate::ContextDisposedNotification(bool)",93957335474736,93957335475006],["v8::Isolate::SetModifyCodeGenerationFromStringsCallback(v8::ModifyCodeGenerationFromStringsResult (*)(v8::Local<v8::Context>, v8::Local<v8::Value>, bool))",93957335475104,93957335475117],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_extmul_low_i16x8_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341138864,93957341139005],["v8::internal::wasm::LiftoffAssembler::emit_i64x2_sub(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341140048,93957341140061],["v8::internal::wasm::LiftoffAssembler::emit_i64x2_bitmask(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341141232,93957341141286],["v8::internal::wasm::LiftoffAssembler::emit_i64x2_uconvert_i32x4_high(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341141552,93957341141575],["v8::internal::wasm::LiftoffAssembler::emit_f32x4_sqrt(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341142288,93957341142356],["v8::internal::wasm::LiftoffAssembler::emit_f32x4_ceil(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341143120,93957341143237],["v8::internal::wasm::LiftoffAssembler::emit_f32x4_trunc(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341143376,93957341143493],["v8::internal::wasm::LiftoffAssembler::emit_f32x4_add(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341143632,93957341143645],["v8::Isolate::CancelTerminateExecution()",93957335471200,93957335471237],["v8::Isolate::SetHostImportModuleDynamicallyCallback(v8::MaybeLocal<v8::Promise> (*)(v8::Local<v8::Context>, v8::Local<v8::ScriptOrModule>, v8::Local<v8::String>, v8::Local<v8::FixedArray>))",93957335472704,93957335472714],["v8::Isolate::SuppressMicrotaskExecutionScope::SuppressMicrotaskExecutionScope(v8::Isolate*, v8::MicrotaskQueue*)",93957335473040,93957335473091],["v8::Isolate::GetHeapStatistics(v8::HeapStatistics*)",93957335473200,93957335473506],["v8::MeasureMemoryDelegate::Default(v8::Isolate*, v8::Local<v8::Context>, v8::Local<v8::Promise::Resolver>, v8::MeasureMemoryMode)",93957335473728,93957335473870],["v8::Isolate::AddCallCompletedCallback(void (*)(v8::Isolate*))",93957335474032,93957335474049],["v8::Isolate::SetPromiseHook(void (*)(v8::PromiseHookType, v8::Local<v8::Promise>, v8::Local<v8::Value>))",93957335474080,93957335474090],["v8::MicrotasksScope::PerformCheckpoint(v8::Isolate*)",93957335474128,93957335474148],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_min_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341138464,93957341138484],["v8::internal::wasm::LiftoffAssembler::emit_i64x2_alltrue(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341139568,93957341139588],["v8::internal::wasm::LiftoffAssembler::emit_i64x2_shri_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, int)",93957341139856,93957341140032],["v8::internal::wasm::LiftoffAssembler::emit_i64x2_extmul_low_i32x4_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341141040,93957341141081],["v8::internal::wasm::LiftoffAssembler::emit_i64x2_extmul_high_i32x4_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341141184,93957341141219],["v8::internal::wasm::LiftoffAssembler::emit_i64x2_sconvert_i32x4_low(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341141296,93957341141402],["v8::internal::wasm::LiftoffAssembler::emit_i64x2_uconvert_i32x4_low(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341141440,93957341141546],["v8::internal::wasm::LiftoffAssembler::emit_f32x4_abs(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341141584,93957341141932],["v8::BigInt::Int64Value(bool*) const",93957335470896,93957335470926],["v8::Isolate::GetCurrent()",93957335471504,93957335471523],["v8::Isolate::SetAddHistogramSampleFunction(void (*)(void*, int))",93957335472624,93957335472641],["v8::Isolate::DisallowJavascriptExecutionScope::DisallowJavascriptExecutionScope(v8::Isolate*, v8::Isolate::DisallowJavascriptExecutionScope::OnFailure)",93957335472736,93957335472825],["v8::Isolate::AllowJavascriptExecutionScope::~AllowJavascriptExecutionScope()",93957335472976,93957335473029],["v8::Isolate::SuppressMicrotaskExecutionScope::~SuppressMicrotaskExecutionScope()",93957335473104,93957335473132],["v8::Isolate::SafeForTerminationScope::~SafeForTerminationScope()",93957335473168,93957335473186],["v8::Isolate::GetHeapSpaceStatistics(v8::HeapSpaceStatistics*, unsigned long)",93957335473520,93957335473690],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_shli(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, int)",93957341137840,93957341138016],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_dot_i16x8_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341138592,93957341138605],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_extmul_high_i16x8_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341139152,93957341139290],["v8::internal::wasm::LiftoffAssembler::emit_i64x2_shli(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, int)",93957341139616,93957341139792],["v8::internal::wasm::LiftoffAssembler::emit_i64x2_shr_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341139840,93957341139850],["v8::internal::wasm::LiftoffAssembler::emit_i64x2_add(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341140032,93957341140045],["v8::internal::wasm::LiftoffAssembler::emit_i64x2_mul(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341140064,93957341141037],["v8::internal::wasm::LiftoffAssembler::emit_i64x2_extmul_low_i32x4_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341141088,93957341141126],["v8::ArrayBufferView::ByteLength()",93957335469344,93957335469386],["v8::Isolate::GetEnteredOrMicrotaskContext()",93957335470976,93957335471085],["v8::Isolate::HasPendingBackgroundTasks()",93957335471264,93957335471284],["v8::Isolate::CreateParams::~CreateParams()",93957335471616,93957335471777],["v8::Isolate::SetCreateHistogramFunction(void* (*)(char const*, int, int, unsigned long))",93957335472592,93957335472609],["v8::Isolate::New(v8::Isolate::CreateParams const&)",93957335472656,93957335472693],["v8::Isolate::SetHostInitializeImportMetaObjectCallback(void (*)(v8::Local<v8::Context>, v8::Local<v8::Module>, v8::Local<v8::Object>))",93957335472720,93957335472730],["v8::Isolate::DisallowJavascriptExecutionScope::~DisallowJavascriptExecutionScope()",93957335472832,93957335472903],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_extmul_low_i8x16_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341137184,93957341137216],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_shri_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, int)",93957341138224,93957341138400],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_max_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341138528,93957341138548],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_extadd_pairwise_i16x8_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341138688,93957341138711],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_extmul_high_i16x8_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341139008,93957341139149],["v8::internal::wasm::LiftoffAssembler::emit_i64x2_neg(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341139296,93957341139562],["v8::internal::wasm::LiftoffAssembler::emit_i64x2_shl(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341139600,93957341139610],["v8::internal::wasm::LiftoffAssembler::emit_i64x2_shr_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341139792,93957341139815],["v8::ArrayBuffer::IsDetachable() const",93957335467968,93957335467985],["v8::Private::New(v8::Isolate*, v8::Local<v8::String>)",93957335470000,93957335470335],["v8::Isolate::SetIdle(bool)",93957335470944,93957335470954],["v8::Isolate::TerminateExecution()",93957335471120,93957335471139],["v8::Isolate::RequestInterrupt(void (*)(v8::Isolate*, void*), void*)",93957335471248,93957335471258],["v8::Isolate::RequestGarbageCollectionForTesting(v8::Isolate::GarbageCollectionType)",93957335471296,93957335471504],["v8::Isolate::CreateParams::CreateParams()",93957335471536,93957335471612],["v8::Isolate::Initialize(v8::Isolate*, v8::Isolate::CreateParams const&)",93957335471792,93957335472545],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_mul(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341136912,93957341136925],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_neg(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341137312,93957341137740],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_shri_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, int)",93957341138032,93957341138208],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_sub(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341138416,93957341138429],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_min_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341138496,93957341138516],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_max_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341138560,93957341138580],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_extadd_pairwise_i16x8_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341138608,93957341138686],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_extmul_low_i16x8_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341138720,93957341138864],["v8::Promise::Then(v8::Local<v8::Context>, v8::Local<v8::Function>, v8::Local<v8::Function>)",93957335465504,93957335466580],["v8::ArrayBuffer::New(v8::Isolate*, std::__1::shared_ptr<v8::BackingStore>)",93957335468576,93957335469011],["v8::SharedArrayBuffer::New(v8::Isolate*, std::__1::shared_ptr<v8::BackingStore>)",93957335469440,93957335469977],["v8::Integer::New(v8::Isolate*, int)",93957335470576,93957335470839],["v8::Isolate::GetHeapProfiler()",93957335470928,93957335470941],["v8::Isolate::InContext()",93957335470960,93957335470976],["v8::Isolate::SetEmbedderHeapTracer(v8::EmbedderHeapTracer*)",93957335471088,93957335471105],["v8::Isolate::IsExecutionTerminating()",93957335471152,93957335471185],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_shr_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341136624,93957341136634],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_max_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341136992,93957341137012],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_extmul_high_i8x16_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341137248,93957341137277],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_bitmask(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341137760,93957341137814],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_shr_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341138016,93957341138026],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_shr_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341138208,93957341138218],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_add(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341138400,93957341138413],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_mul(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341138432,93957341138452],["v8::Set::Has(v8::Local<v8::Context>, v8::Local<v8::Value>)",93957335460512,93957335461332],["v8::WasmModuleObject::GetCompiledModule()",93957335467328,93957335467687],["v8::ArrayBuffer::ByteLength() const",93957335468320,93957335468333],["v8::ArrayBufferView::Buffer()",93957335469072,93957335469290],["v8::TypedArray::Length()",93957335469392,93957335469434],["v8::Symbol::GetToStringTag(v8::Isolate*)",93957335469984,93957335469997],["v8::Number::New(v8::Isolate*, double)",93957335470336,93957335470573],["v8::BigInt::New(v8::Isolate*, long)",93957335470848,93957335470892],["v8::internal::wasm::LiftoffAssembler::emit_i8x16_max_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341135568,93957341135581],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_add_sat_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341136848,93957341136861],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_min_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341136944,93957341136964],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_extadd_pairwise_i8x16_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341137056,93957341137134],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_extmul_high_i8x16_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341137216,93957341137245],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_q15mulr_sat_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341137280,93957341137309],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_alltrue(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341137744,93957341137756],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_shl(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341137824,93957341137834],["v8::RegExp::GetFlags() const",93957335457504,93957335457535],["v8::Promise::Resolver::New(v8::Local<v8::Context>)",93957335463184,93957335464113],["v8::Promise::State()",93957335466992,93957335467169],["v8::ArrayBuffer::Allocator::Reallocate(void*, unsigned long, unsigned long)",93957335467776,93957335467921],["v8::ArrayBuffer::Detach()",93957335468000,93957335468318],["v8::ArrayBuffer::New(v8::Isolate*, unsigned long)",93957335468336,93957335468565],["v8::ArrayBuffer::NewBackingStore(void*, unsigned long, void (*)(void*, unsigned long, void*), void*)",93957335469024,93957335469066],["v8::ArrayBufferView::ByteOffset()",93957335469296,93957335469338],["v8::internal::wasm::LiftoffAssembler::emit_i8x16_add_sat_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341135408,93957341135421],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_shl(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341136240,93957341136250],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_add(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341136816,93957341136829],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_sub_sat_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341136880,93957341136893],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_min_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341136928,93957341136941],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_max_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341136976,93957341136989],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_extadd_pairwise_i8x16_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341137024,93957341137047],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_extmul_low_i8x16_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341137136,93957341137171],["v8::Object::New(v8::Isolate*)",93957335454832,93957335455141],["v8::Map::AsArray() const",93957335458112,93957335458361],["v8::Set::AsArray() const",93957335462176,93957335462425],["v8::Promise::Resolver::Resolve(v8::Local<v8::Context>, v8::Local<v8::Value>)",93957335464144,93957335464813],["v8::Promise::Result()",93957335466592,93957335466981],["v8::CompiledWasmModule::GetWireBytesRef()",93957335467184,93957335467317],["v8::WasmModuleObject::FromCompiledModule(v8::Isolate*, v8::CompiledWasmModule const&)",93957335467696,93957335467765],["v8::ArrayBuffer::Allocator::NewDefaultAllocator()",93957335467936,93957335467962],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitSimdShiftOp<void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister), void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, int)>(void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister), void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, int))",93957341131984,93957341132890],["v8::internal::wasm::LiftoffAssembler::emit_i8x16_sub_sat_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341135472,93957341135485],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_alltrue(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341136016,93957341136028],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_shr_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341136432,93957341136442],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_shri_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, int)",93957341136640,93957341136816],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_add_sat_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341136832,93957341136845],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_sub(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341136864,93957341136877],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_sub_sat_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341136896,93957341136909],["v8::String::NewFromUtf8(v8::Isolate*, char const*, v8::NewStringType, int)",93957335452560,93957335452922],["v8::StringObject::ValueOf() const",93957335455856,93957335456142],["v8::Array::Length() const",93957335458016,93957335458059],["v8::Set::New(v8::Isolate*)",93957335459232,93957335459424],["v8::Set::Delete(v8::Local<v8::Context>, v8::Local<v8::Value>)",93957335461344,93957335462164],["v8::(anonymous namespace)::SetAsArray(v8::internal::Isolate*, v8::internal::Object, int, v8::(anonymous namespace)::SetAsArrayKind)",93957335462432,93957335463182],["uhash_hashLong_68",93957335464128,93957335464137],["v8::Promise::Resolver::Reject(v8::Local<v8::Context>, v8::Local<v8::Value>)",93957335464816,93957335465490],["v8::internal::wasm::LiftoffAssembler::emit_s128_and(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341130176,93957341130189],["v8::internal::wasm::LiftoffAssembler::emit_i8x16_shri_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, int)",93957341134304,93957341134896],["v8::internal::wasm::LiftoffAssembler::emit_i8x16_sub(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341135440,93957341135453],["v8::internal::wasm::LiftoffAssembler::emit_i8x16_min_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341135520,93957341135533],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_neg(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341135584,93957341136012],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_bitmask(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341136032,93957341136235],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_shli(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, int)",93957341136256,93957341136432],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_shri_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, int)",93957341136448,93957341136624],["v8::Context::DetachGlobal()",93957335450480,93957335450538],["v8::String::NewExternalOneByte(v8::Isolate*, v8::String::ExternalOneByteStringResource*)",93957335453968,93957335454340],["v8::BigIntObject::ValueOf() const",93957335455376,93957335455662],["v8::RegExp::New(v8::Local<v8::Context>, v8::Local<v8::String>, v8::RegExp::Flags)",93957335456432,93957335457391],["v8::Array::New(v8::Isolate*, int)",93957335457536,93957335458002],["v8::Map::Size() const",93957335458064,93957335458097],["v8::(anonymous namespace)::MapAsArray(v8::internal::Isolate*, v8::internal::Object, int, v8::(anonymous namespace)::MapAsArrayKind)",93957335458368,93957335459222],["v8::Set::Add(v8::Local<v8::Context>, v8::Local<v8::Value>)",93957335459424,93957335460508],["v8::internal::wasm::LiftoffAssembler::emit_f32x4_ne(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341129680,93957341129693],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitUnOp<(v8::internal::wasm::ValueKind)5, (v8::internal::wasm::ValueKind)1, void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)>(void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister))",93957341131344,93957341131738],["v8::internal::wasm::LiftoffAssembler::emit_i8x16_shli(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, int)",93957341133792,93957341134276],["v8::internal::wasm::LiftoffAssembler::emit_i8x16_shri_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, int)",93957341134912,93957341135386],["v8::internal::wasm::LiftoffAssembler::emit_i8x16_add_sat_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341135424,93957341135437],["v8::internal::wasm::LiftoffAssembler::emit_i8x16_sub_sat_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341135456,93957341135469],["v8::internal::wasm::LiftoffAssembler::emit_i8x16_min_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341135488,93957341135508],["v8::internal::wasm::LiftoffAssembler::emit_i8x16_max_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341135536,93957341135556],["v8::V8::InitializeExternalStartupData(char const*)",93957335446944,93957335446954],["v8::FunctionTemplate::HasInstance(v8::Local<v8::Value>)",93957335451728,93957335451942],["v8::String::NewFromTwoByte(v8::Isolate*, unsigned short const*, v8::NewStringType, int)",93957335453296,93957335453665],["v8::String::MakeExternal(v8::String::ExternalOneByteStringResource*)",93957335454544,93957335454732],["v8::NumberObject::ValueOf() const",93957335455152,93957335455362],["v8::BooleanObject::ValueOf() const",93957335455664,93957335455844],["v8::SymbolObject::ValueOf() const",93957335456144,93957335456430],["v8::RegExp::GetSource() const",93957335457392,93957335457493],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_gt_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341128048,93957341128491],["v8::internal::wasm::LiftoffAssembler::emit_f64x2_ne(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341129744,93957341129757],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitTerOp<(v8::internal::wasm::ValueKind)5, (v8::internal::wasm::ValueKind)5, void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)>(void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister))",93957341130208,93957341130905],["v8::internal::wasm::LiftoffAssembler::emit_i8x16_alltrue(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341131920,93957341131932],["v8::internal::wasm::LiftoffAssembler::emit_i8x16_shl(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341132896,93957341133786],["v8::internal::wasm::LiftoffAssembler::emit_i8x16_shr_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341134288,93957341134298],["v8::internal::wasm::LiftoffAssembler::emit_i8x16_shr_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341134896,93957341134906],["v8::internal::wasm::LiftoffAssembler::emit_i8x16_add(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341135392,93957341135405],["v8::V8::InitializePlatform(v8::Platform*)",93957335446688,93957335446698],["v8::Context::New(v8::Isolate*, v8::ExtensionConfiguration*, v8::MaybeLocal<v8::ObjectTemplate>, v8::MaybeLocal<v8::Value>, v8::DeserializeInternalFieldsCallback, v8::MicrotaskQueue*)",93957335449808,93957335449853],["v8::Context::IsCodeGenerationFromStringsAllowed() const",93957335450736,93957335450770],["v8::External::Value() const",93957335452160,93957335452271],["v8::String::NewFromOneByte(v8::Isolate*, unsigned char const*, v8::NewStringType, int)",93957335452928,93957335453290],["v8::String::Concat(v8::Isolate*, v8::Local<v8::String>, v8::Local<v8::String>)",93957335453680,93957335453954],["v8::String::MakeExternal(v8::String::ExternalStringResource*)",93957335454352,93957335454540],["v8::String::StringEquals(v8::Local<v8::String>) const",93957335454736,93957335454830],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_eq(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341126592,93957341126605],["v8::internal::wasm::LiftoffAssembler::emit_i64x2_ne(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341129008,93957341129262],["v8::internal::wasm::LiftoffAssembler::emit_f32x4_le(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341129712,93957341129725],["v8::internal::wasm::LiftoffAssembler::emit_f64x2_le(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341129776,93957341129789],["v8::internal::wasm::LiftoffAssembler::emit_s128_or(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341130192,93957341130205],["v8::internal::wasm::LiftoffAssembler::emit_i8x16_neg(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341130912,93957341131340],["v8::internal::wasm::LiftoffAssembler::emit_v128_anytrue(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341131744,93957341131905],["v8::internal::wasm::LiftoffAssembler::emit_i8x16_bitmask(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341131936,93957341131974],["v8::Number::Value() const",93957335445472,93957335445498],["v8::V8::Dispose()",93957335446848,93957335446861],["v8::V8::GetVersion()",93957335446976,93957335446992],["v8::Context::GetSecurityToken()",93957335450000,93957335450100],["v8::Context::AllowCodeGenerationFromStrings(bool)",93957335450544,93957335450731],["v8::ObjectTemplate::NewInstance(v8::Local<v8::Context>)",93957335450784,93957335451721],["v8::External::New(v8::Isolate*, void*)",93957335451952,93957335452150],["v8::String::NewFromUtf8Literal(v8::Isolate*, char const*, v8::NewStringType, int)",93957335452272,93957335452549],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitUnOp<(v8::internal::wasm::ValueKind)4, (v8::internal::wasm::ValueKind)5, void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)>(void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister))",93957341124448,93957341124856],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_ge_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341127312,93957341127541],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_ge_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341128736,93957341128972],["v8::internal::wasm::LiftoffAssembler::emit_i64x2_ge_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341129456,93957341129651],["v8::internal::wasm::LiftoffAssembler::emit_f32x4_lt(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341129696,93957341129709],["v8::internal::wasm::LiftoffAssembler::emit_f64x2_eq(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341129728,93957341129741],["v8::internal::wasm::LiftoffAssembler::emit_f64x2_lt(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341129760,93957341129773],["v8::internal::wasm::LiftoffAssembler::emit_s128_not(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341129792,93957341130176],["v8::Function::GetBoundFunction() const",93957335439712,93957335439844],["v8::Uint32::Value() const",93957335445616,93957335445639],["v8::V8::Initialize(int)",93957335446720,93957335446831],["v8::RegisterState::RegisterState()",93957335446896,93957335446920],["v8::V8::InitializeExternalStartupDataFromFile(char const*)",93957335446960,93957335446970],["v8::NewContext(v8::Isolate*, v8::ExtensionConfiguration*, v8::MaybeLocal<v8::ObjectTemplate>, v8::MaybeLocal<v8::Value>, unsigned long, v8::DeserializeInternalFieldsCallback, v8::MicrotaskQueue*)",93957335446992,93957335449805],["v8::Context::SetSecurityToken(v8::Local<v8::Value>)",93957335449856,93957335449988],["v8::Context::Global()",93957335450112,93957335450465],["v8::internal::wasm::LiftoffAssembler::emit_i8x16_swizzle(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341122192,93957341122224],["v8::internal::wasm::LiftoffAssembler::emit_i8x16_gt_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341125648,93957341125661],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_gt_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341126848,93957341126861],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_ne(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341127792,93957341128029],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_ge_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341128496,93957341128732],["v8::internal::wasm::LiftoffAssembler::emit_i64x2_eq(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341128976,93957341128996],["v8::internal::wasm::LiftoffAssembler::emit_i64x2_gt_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341129264,93957341129450],["v8::internal::wasm::LiftoffAssembler::emit_f32x4_eq(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341129664,93957341129677],["v8::Function::NewInstanceWithSideEffectType(v8::Local<v8::Context>, int, v8::Local<v8::Value>*, v8::SideEffectType) const",93957335434960,93957335436542],["v8::String::WriteUtf8(v8::Isolate*, char*, int, int*, int) const",93957335442016,93957335444991],["v8::Integer::Value() const",93957335445552,93957335445577],["v8::Object::SlowGetInternalField(int)",93957335445792,93957335446222],["v8::V8::ShutdownPlatform()",93957335446704,93957335446714],["v8::V8::EnableWebAssemblyTrapHandler(bool)",93957335446832,93957335446842],["v8::HeapStatistics::HeapStatistics()",93957335446864,93957335446896],["v8::V8::InitializeICUDefaultLocation(char const*, char const*)",93957335446928,93957335446938],["v8::internal::wasm::LiftoffAssembler::LoadTransform(v8::internal::wasm::LiftoffRegister, v8::internal::Register, v8::internal::Register, unsigned long, v8::internal::wasm::LoadType, v8::internal::wasm::LoadTransformationKind, unsigned int*)",93957341119152,93957341120586],["v8::internal::wasm::LiftoffAssembler::emit_i8x16_splat(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341123088,93957341123343],["v8::internal::wasm::LiftoffAssembler::emit_i8x16_ne(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341124880,93957341125117],["v8::internal::wasm::LiftoffAssembler::emit_i8x16_ge_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341126112,93957341126348],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_ne(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341126608,93957341126845],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_gt_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341126864,93957341127300],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_ge_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341127552,93957341127788],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_gt_s(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341128032,93957341128045],["v8::Maybe<bool> v8::ObjectSetAccessor<void (*)(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&), void (*)(v8::Local<v8::Name>, v8::Local<v8::Value>, v8::PropertyCallbackInfo<void> const&), v8::Local<v8::Value> >(v8::Local<v8::Context>, v8::Object*, v8::Local<v8::Name>, void (*)(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&), void (*)(v8::Local<v8::Name>, v8::Local<v8::Value>, v8::PropertyCallbackInfo<void> const&), v8::Local<v8::Value>, v8::AccessControl, v8::PropertyAttribute, bool, bool, v8::SideEffectType, v8::SideEffectType)",93957335430624,93957335431627],["v8::Function::GetInferredName() const",93957335438576,93957335438902],["v8::String::Length() const",93957335440896,93957335440908],["v8::String::ExternalStringResource::UpdateDataCache()",93957335445328,93957335445354],["v8::Boolean::Value() const",93957335445504,93957335445543],["v8::Int32::Value() const",93957335445584,93957335445606],["v8::Object::InternalFieldCount() const",93957335445648,93957335445787],["v8::Object::SetInternalField(int, v8::Local<v8::Value>)",93957335446224,93957335446683],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeLoadLane(v8::internal::wasm::WasmOpcode, v8::internal::wasm::LoadType, unsigned int)",93957341103808,93957341105795],["v8::internal::wasm::LiftoffAssembler::StoreLane(v8::internal::Register, v8::internal::Register, unsigned long, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::StoreType, unsigned char, unsigned int*)",93957341121088,93957341121446],["v8::internal::wasm::LiftoffAssembler::emit_i8x16_popcnt(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341122656,93957341122684],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitUnOp<(v8::internal::wasm::ValueKind)2, (v8::internal::wasm::ValueKind)5, void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)>(void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister))",93957341123600,93957341124033],["v8::internal::wasm::LiftoffAssembler::emit_i8x16_eq(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341124864,93957341124877],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitBinOp<(v8::internal::wasm::ValueKind)5, (v8::internal::wasm::ValueKind)5, true, void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)>(void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister))",93957341125120,93957341125634],["v8::internal::wasm::LiftoffAssembler::emit_i8x16_gt_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341125664,93957341126107],["v8::internal::wasm::LiftoffAssembler::emit_i8x16_ge_u(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341126352,93957341126581],["v8::Object::GetOwnPropertyNames(v8::Local<v8::Context>)",93957335426656,93957335426682],["v8::Object::GetCreationContext()",93957335433648,93957335433678],["v8::Function::SetName(v8::Local<v8::String>)",93957335437776,93957335438242],["v8::Function::GetScriptColumnNumber() const",93957335439232,93957335439541],["v8::Function::FunctionProtoToString(v8::Local<v8::Context>)",93957335439856,93957335440893],["v8::String::Utf8Length(v8::Isolate*) const",93957335440912,93957335442001],["v8::String::Write(v8::Isolate*, unsigned short*, int, int, int) const",93957335444992,93957335445323],["v8::WasmMemoryObject::Buffer()",93957335445360,93957335445457],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vpxor, &v8::internal::Assembler::pxor>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341095408,93957341095592],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::SimdLaneOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::SimdLaneImmediate<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::Vector<v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> >, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)",93957341110416,93957341116942],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::Operand>::emit<&v8::internal::Assembler::vpmovzxdq, &v8::internal::Assembler::pmovzxdq>(v8::internal::XMMRegister, v8::internal::Operand)",93957341120688,93957341120776],["void v8::internal::wasm::liftoff::EmitSimdCommutativeBinOp<&v8::internal::Assembler::vpcmpeqd, &v8::internal::Assembler::pcmpeqd>(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::base::Optional<v8::internal::CpuFeature>)",93957341121472,93957341121656],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitUnOp<(v8::internal::wasm::ValueKind)5, (v8::internal::wasm::ValueKind)5, void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)>(void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister))",93957341122224,93957341122642],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitUnOp<(v8::internal::wasm::ValueKind)1, (v8::internal::wasm::ValueKind)5, void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)>(void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister))",93957341122688,93957341123082],["v8::internal::wasm::LiftoffAssembler::emit_i16x8_splat(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341123344,93957341123595],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitUnOp<(v8::internal::wasm::ValueKind)3, (v8::internal::wasm::ValueKind)5, void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)>(void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister))",93957341124048,93957341124437],["v8::Object::GetPrivate(v8::Local<v8::Context>, v8::Local<v8::Private>)",93957335422896,93957335422906],["v8::Object::Has(v8::Local<v8::Context>, v8::Local<v8::Value>)",93957335428992,93957335429847],["v8::Object::HasRealNamedProperty(v8::Local<v8::Context>, v8::Local<v8::Name>)",93957335431808,93957335432449],["v8::FunctionTemplate::GetFunction(v8::Local<v8::Context>)",93957335434000,93957335434934],["v8::Function::Call(v8::Local<v8::Context>, v8::Local<v8::Value>, int, v8::Local<v8::Value>*)",93957335436544,93957335437765],["v8::Function::GetName() const",93957335438256,93957335438567],["v8::Function::GetScriptLineNumber() const",93957335438912,93957335439221],["v8::Function::ScriptId() const",93957335439552,93957335439701],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::RefAsFunc(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)",93957341091856,93957341092058],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::FuncCheck(v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::Label*, v8::internal::wasm::LiftoffRegList, v8::internal::Register)",93957341100432,93957341100941],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::SimdOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::Vector<v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> >, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)",93957341107504,93957341110288],["v8::internal::wasm::Simd128Immediate<(v8::internal::wasm::Decoder::ValidateFlag)1>::Simd128Immediate(v8::internal::wasm::Decoder*, unsigned char const*)",93957341117184,93957341118069],["void v8::internal::TurboAssembler::AvxHelper<v8::internal::XMMRegister, v8::internal::Operand>::emit<&v8::internal::Assembler::vpmovsxdq, &v8::internal::Assembler::pmovsxdq>(v8::internal::XMMRegister, v8::internal::Operand)",93957341120592,93957341120680],["v8::internal::wasm::LiftoffAssembler::LoadLane(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::Register, v8::internal::Register, unsigned long, v8::internal::wasm::LoadType, unsigned char, unsigned int*)",93957341120784,93957341121079],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_eq(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341121456,93957341121469],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitBinOp<(v8::internal::wasm::ValueKind)5, (v8::internal::wasm::ValueKind)5, false, void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)>(void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister))",93957341121664,93957341122182],["v8::PropertyDescriptor::PropertyDescriptor(v8::Local<v8::Value>, v8::Local<v8::Value>)",93957335418608,93957335418673],["v8::Object::SetPrototype(v8::Local<v8::Context>, v8::Local<v8::Value>)",93957335424384,93957335425155],["v8::Object::GetConstructorName()",93957335427728,93957335427738],["v8::Object::HasOwnProperty(v8::Local<v8::Context>, v8::Local<v8::Name>)",93957335429872,93957335430531],["v8::Object::SetAccessorProperty(v8::Local<v8::Name>, v8::Local<v8::Function>, v8::Local<v8::Function>, v8::PropertyAttribute, v8::AccessControl)",93957335431632,93957335431805],["v8::Object::GetRealNamedProperty(v8::Local<v8::Context>, v8::Local<v8::Name>)",93957335432464,93957335433648],["v8::Function::New(v8::Local<v8::Context>, void (*)(v8::FunctionCallbackInfo<v8::Value> const&), v8::Local<v8::Value>, int, v8::ConstructorBehavior, v8::SideEffectType)",93957335433680,93957335433992],["v8::Function::NewInstance(v8::Local<v8::Context>, int, v8::Local<v8::Value>*) const",93957335434944,93957335434957],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::RttCanon(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, unsigned int, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)",93957341088640,93957341089226],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BrOnI31(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*, unsigned int)",93957341093472,93957341094099],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::SubtypeCheck(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::Label*, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::NullSucceeds, v8::internal::wasm::LiftoffRegList, v8::internal::Register)",93957341097200,93957341099657],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::SimdReplaceLane(v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueType, unsigned int)",93957341101440,93957341102132],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeStoreLane(v8::internal::wasm::WasmOpcode, v8::internal::wasm::StoreType, unsigned int)",93957341105808,93957341107504],["v8::internal::wasm::WasmDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1>::Validate(unsigned char const*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::SimdLaneImmediate<(v8::internal::wasm::Decoder::ValidateFlag)1>&)",93957341110288,93957341110404],["v8::internal::wasm::LiftoffAssembler::emit_f64x2_replace_lane(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, unsigned char)",93957341116944,93957341117171],["v8::internal::wasm::LiftoffAssembler::emit_i8x16_shuffle(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, unsigned char const*, bool)",93957341118080,93957341119152],["v8::Value::InstanceOf(v8::Local<v8::Context>, v8::Local<v8::Object>)",93957335414880,93957335415562],["v8::Object::DefineOwnProperty(v8::Local<v8::Context>, v8::Local<v8::Name>, v8::Local<v8::Value>, v8::PropertyAttribute)",93957335418784,93957335419951],["v8::Object::GetOwnPropertyDescriptor(v8::Local<v8::Context>, v8::Local<v8::Name>)",93957335423200,93957335424255],["v8::Object::GetPropertyNames(v8::Local<v8::Context>)",93957335425488,93957335425517],["v8::Object::ObjectProtoToString(v8::Local<v8::Context>)",93957335426688,93957335427725],["v8::Object::Delete(v8::Local<v8::Context>, v8::Local<v8::Value>)",93957335427744,93957335428982],["v8::Object::HasPrivate(v8::Local<v8::Context>, v8::Local<v8::Private>)",93957335429856,93957335429866],["v8::Object::SetAccessor(v8::Local<v8::Context>, v8::Local<v8::Name>, void (*)(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&), void (*)(v8::Local<v8::Name>, v8::Local<v8::Value>, v8::PropertyCallbackInfo<void> const&), v8::MaybeLocal<v8::Value>, v8::AccessControl, v8::PropertyAttribute, v8::SideEffectType, v8::SideEffectType)",93957335430544,93957335430616],["long v8::internal::wasm::Decoder::read_leb_slowpath<long, (v8::internal::wasm::Decoder::ValidateFlag)1, (v8::internal::wasm::Decoder::TraceFlag)0, 64ul>(unsigned char const*, unsigned int*, char const*)",93957341066288,93957341066999],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::RefCast(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)",93957341090352,93957341090597],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BrOnFunc(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*, unsigned int)",93957341092384,93957341092916],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::SetDefaultValue(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::ValueKind, v8::internal::wasm::LiftoffRegList)",93957341095248,93957341095385],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::ArrayNew(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::ArrayIndexImmediate<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueKind, bool)",93957341095600,93957341097186],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::DataCheck(v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::Label*, v8::internal::wasm::LiftoffRegList, v8::internal::Register)",93957341099664,93957341100432],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::SimdExtractLane(v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueType, unsigned int)",93957341100944,93957341101432],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeLoadTransformMem(v8::internal::wasm::LoadType, v8::internal::wasm::LoadTransformationKind, unsigned int)",93957341102144,93957341103803],["v8::base::PageAllocator::AllocatePageSize()",93957335410112,93957335410122],["v8::Object::CreateDataProperty(v8::Local<v8::Context>, unsigned int, v8::Local<v8::Value>)",93957335417696,93957335418412],["v8::PropertyDescriptor::set_enumerable(bool)",93957335418720,93957335418742],["v8::Object::Get(v8::Local<v8::Context>, v8::Local<v8::Value>)",93957335420896,93957335421858],["v8::internal::JSReceiver::GetPropertyAttributes(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::Name>)",93957335422912,93957335423185],["v8::Object::GetPrototype()",93957335424256,93957335424383],["v8::internal::PrototypeIterator::Advance()",93957335425168,93957335425478],["v8::Object::GetPropertyNames(v8::Local<v8::Context>, v8::KeyCollectionMode, v8::PropertyFilter, v8::IndexFilter, v8::KeyConversionMode)",93957335425520,93957335426643],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::GetBaseAndOffsetForImportedMutableExternRefGlobal(v8::internal::wasm::WasmGlobal const*, v8::internal::wasm::LiftoffRegList*, v8::internal::Register*, v8::internal::Register*)",93957341057984,93957341058855],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::StructSet(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::FieldIndexImmediate<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&)",93957341084928,93957341085530],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::ObjectRelatedWithRtt(v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>)",93957341089824,93957341089919],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BrOnCast(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*, unsigned int)",93957341091056,93957341091638],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::RefAsI31(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)",93957341092064,93957341092373],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BrOnData(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*, unsigned int)",93957341092928,93957341093460],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::StructNew(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::StructIndexImmediate<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, bool)",93957341094112,93957341095237],["v8::internal::wasm::LiftoffAssembler::emit_s128_xor(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341095392,93957341095405],["v8::Value::BooleanValue(v8::Isolate*) const",93957335407968,93957335407998],["v8::Value::Int32Value(v8::Local<v8::Context>) const",93957335411456,93957335412467],["v8::Object::Set(v8::Local<v8::Context>, unsigned int, v8::Local<v8::Value>)",93957335416272,93957335417000],["v8::PropertyDescriptor::PropertyDescriptor(v8::Local<v8::Value>)",93957335418464,93957335418517],["v8::PropertyDescriptor::~PropertyDescriptor()",93957335418688,93957335418708],["v8::PropertyDescriptor::set_configurable(bool)",93957335418752,93957335418780],["v8::Object::SetPrivate(v8::Local<v8::Context>, v8::Local<v8::Private>, v8::Local<v8::Value>)",93957335419952,93957335420881],["v8::Object::Get(v8::Local<v8::Context>, unsigned int)",93957335421872,93957335422887],["void v8::internal::wasm::liftoff::EmitIntDivOrRem<unsigned int, (v8::internal::wasm::liftoff::DivOrRem)0>(v8::internal::wasm::LiftoffAssembler*, v8::internal::Register, v8::internal::Register, v8::internal::Register, v8::internal::Label*, v8::internal::Label*)",93957341054016,93957341054428],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BoundsCheckMem(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, unsigned int, unsigned long, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegList, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::ForceCheck)",93957341061952,93957341062928],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::PopTypeError(int, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)",93957341083952,93957341083962],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::ArraySet(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ArrayIndexImmediate<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&)",93957341086912,93957341087907],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::RttSub(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, unsigned int, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)",93957341089232,93957341089813],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::RefTest(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)",93957341089920,93957341090345],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::AssertNull(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)",93957341090608,93957341091046],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::RefAsData(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)",93957341091648,93957341091850],["v8::Value::IsMapIterator() const",93957335403776,93957335403826],["v8::internal::IsolateFromNeverReadOnlySpaceObject(unsigned long)",93957335410016,93957335410035],["v8::SharedArrayBuffer::GetBackingStore()",93957335410400,93957335410674],["v8::Value::ToArrayIndex(v8::Local<v8::Context>) const",93957335413584,93957335414822],["v8::Object::Set(v8::Local<v8::Context>, v8::Local<v8::Value>, v8::Local<v8::Value>)",93957335415568,93957335416259],["v8::Object::CreateDataProperty(v8::Local<v8::Context>, v8::Local<v8::Name>, v8::Local<v8::Value>)",93957335417008,93957335417694],["v8::PropertyDescriptor::PropertyDescriptor()",93957335418416,93957335418459],["v8::PropertyDescriptor::PropertyDescriptor(v8::Local<v8::Value>, bool)",93957335418528,93957335418597],["void v8::internal::wasm::liftoff::EmitFloatSetCond<&(void v8::internal::TurboAssembler::Ucomiss<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister))>(v8::internal::wasm::LiftoffAssembler*, v8::internal::Condition, v8::internal::Register, v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341050688,93957341050927],["void v8::internal::wasm::liftoff::EmitIntDivOrRem<unsigned long, (v8::internal::wasm::liftoff::DivOrRem)0>(v8::internal::wasm::LiftoffAssembler*, v8::internal::Register, v8::internal::Register, v8::internal::Register, v8::internal::Label*, v8::internal::Label*)",93957341055888,93957341056300],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeLoadMem(v8::internal::wasm::LoadType, int)",93957341059616,93957341061357],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::TraceMemoryOperation(bool, v8::internal::MachineRepresentation, v8::internal::Register, unsigned long, int)",93957341063680,93957341064528],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeGCOpcode(v8::internal::wasm::WasmOpcode, unsigned int)",93957341067008,93957341083943],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::StructGet(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::FieldIndexImmediate<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, bool, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)",93957341083968,93957341084926],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::ArrayGet(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ArrayIndexImmediate<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, bool, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)",93957341085536,93957341086911],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::ArrayLen(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)",93957341087920,93957341088637],["v8::Value::IsWeakSet() const",93957335403008,93957335403057],["v8::Value::ToString(v8::Local<v8::Context>) const",93957335404032,93957335405042],["v8::Value::ToNumber(v8::Local<v8::Context>) const",93957335408048,93957335409054],["v8::BackingStore::~BackingStore()",93957335410080,93957335410090],["v8::ArrayBuffer::GetBackingStore()",93957335410128,93957335410400],["v8::Value::NumberValue(v8::Local<v8::Context>) const",93957335410688,93957335411441],["v8::Value::Uint32Value(v8::Local<v8::Context>) const",93957335412480,93957335413581],["v8::Value::StrictEquals(v8::Local<v8::Value>) const",93957335414832,93957335414865],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitBinOp<(v8::internal::wasm::ValueKind)2, (v8::internal::wasm::ValueKind)2, false, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BinOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)::{lambda(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)#12}>(v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BinOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)::{lambda(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)#12})",93957341048064,93957341048623],["v8::internal::wasm::LiftoffAssembler::emit_i64_shr(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::Register)",93957341051808,93957341052110],["void v8::internal::wasm::liftoff::EmitIntDivOrRem<unsigned int, (v8::internal::wasm::liftoff::DivOrRem)1>(v8::internal::wasm::LiftoffAssembler*, v8::internal::Register, v8::internal::Register, v8::internal::Register, v8::internal::Label*, v8::internal::Label*)",93957341054960,93957341055376],["void v8::internal::wasm::liftoff::EmitIntDivOrRem<unsigned long, (v8::internal::wasm::liftoff::DivOrRem)1>(v8::internal::wasm::LiftoffAssembler*, v8::internal::Register, v8::internal::Register, v8::internal::Register, v8::internal::Label*, v8::internal::Label*)",93957341056832,93957341057248],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::GetGlobalBaseAndOffset(v8::internal::wasm::WasmGlobal const*, v8::internal::wasm::LiftoffRegList*, unsigned int*)",93957341058864,93957341059612],["unsigned long v8::internal::wasm::Decoder::read_leb_slowpath<unsigned long, (v8::internal::wasm::Decoder::ValidateFlag)1, (v8::internal::wasm::Decoder::TraceFlag)0, 64ul>(unsigned char const*, unsigned int*, char const*)",93957341061360,93957341061938],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::AddMemoryMasking(v8::internal::Register, unsigned long*, v8::internal::wasm::LiftoffRegList*)",93957341062928,93957341063674],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeStoreMem(v8::internal::wasm::StoreType, int)",93957341064528,93957341066273],["v8::Value::IsStringObject() const",93957335402464,93957335402541],["v8::Value::IsNativeError() const",93957335403504,93957335403553],["v8::Value::IsPromise() const",93957335403904,93957335403953],["v8::Value::ToObject(v8::Local<v8::Context>) const",93957335405968,93957335406988],["v8::Value::ToBoolean(v8::Isolate*) const",93957335408000,93957335408047],["v8::Value::ToInt32(v8::Local<v8::Context>) const",93957335409056,93957335410010],["v8::internal::ShouldThrowOnError(v8::internal::Isolate*)",93957335410048,93957335410066],["__cxxabiv1::__getExceptionClass(_Unwind_Exception const*)",93957335410096,93957335410105],["v8::internal::wasm::LiftoffAssembler::emit_f64_div(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341045376,93957341045561],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitBinOp<(v8::internal::wasm::ValueKind)1, (v8::internal::wasm::ValueKind)1, false, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitFnWithFirstArg<void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffCondition, v8::internal::Register, v8::internal::Register, v8::internal::Register), v8::internal::wasm::LiftoffCondition> >(v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitFnWithFirstArg<void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffCondition, v8::internal::Register, v8::internal::Register, v8::internal::Register), v8::internal::wasm::LiftoffCondition>)",93957341050256,93957341050505],["v8::internal::wasm::LiftoffAssembler::emit_i64_shl(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::Register)",93957341051200,93957341051502],["void v8::internal::wasm::liftoff::EmitFloatMinOrMax<double>(v8::internal::wasm::LiftoffAssembler*, v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::wasm::liftoff::MinOrMax)",93957341052768,93957341053503],["void v8::internal::wasm::liftoff::EmitIntDivOrRem<int, (v8::internal::wasm::liftoff::DivOrRem)1>(v8::internal::wasm::LiftoffAssembler*, v8::internal::Register, v8::internal::Register, v8::internal::Register, v8::internal::Label*, v8::internal::Label*)",93957341054432,93957341054949],["void v8::internal::wasm::liftoff::EmitIntDivOrRem<long, (v8::internal::wasm::liftoff::DivOrRem)0>(v8::internal::wasm::LiftoffAssembler*, v8::internal::Register, v8::internal::Register, v8::internal::Register, v8::internal::Label*, v8::internal::Label*)",93957341055376,93957341055877],["void v8::internal::wasm::liftoff::EmitIntDivOrRem<long, (v8::internal::wasm::liftoff::DivOrRem)1>(v8::internal::wasm::LiftoffAssembler*, v8::internal::Register, v8::internal::Register, v8::internal::Register, v8::internal::Label*, v8::internal::Label*)",93957341056304,93957341056821],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::LocalSet(unsigned int, bool)",93957341057248,93957341057971],["v8::Value::IsObject() const",93957335401920,93957335401969],["v8::Value::IsSet() const",93957335402752,93957335402801],["v8::Value::IsInt32() const",93957335403136,93957335403255],["v8::Value::IsGeneratorFunction() const",93957335403632,93957335403701],["v8::Value::IsSetIterator() const",93957335403840,93957335403890],["v8::Value::IsModuleNamespaceObject() const",93957335403968,93957335404017],["v8::Value::ToDetailString(v8::Local<v8::Context>) const",93957335405056,93957335405961],["v8::Value::ToBigInt(v8::Local<v8::Context>) const",93957335406992,93957335407962],["v8::internal::wasm::LiftoffAssembler::emit_f32_div(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341043856,93957341044041],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitBinOp<(v8::internal::wasm::ValueKind)1, (v8::internal::wasm::ValueKind)1, false, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BinOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)::{lambda(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)#8}>(v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BinOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)::{lambda(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)#8})",93957341045872,93957341046431],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitBinOp<(v8::internal::wasm::ValueKind)2, (v8::internal::wasm::ValueKind)2, false, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BinOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)::{lambda(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)#14}>(v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BinOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)::{lambda(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)#14})",93957341049168,93957341049699],["void v8::internal::Assembler::andq<v8::internal::Register, v8::internal::Register>(v8::internal::Register, v8::internal::Register)",93957341050608,93957341050633],["void v8::internal::wasm::liftoff::EmitFloatSetCond<&(void v8::internal::TurboAssembler::Ucomisd<v8::internal::XMMRegister, v8::internal::XMMRegister>(v8::internal::XMMRegister, v8::internal::XMMRegister))>(v8::internal::wasm::LiftoffAssembler*, v8::internal::Condition, v8::internal::Register, v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341050928,93957341051188],["v8::internal::wasm::LiftoffAssembler::emit_i64_sar(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::Register)",93957341051504,93957341051806],["void v8::internal::wasm::liftoff::EmitFloatMinOrMax<float>(v8::internal::wasm::LiftoffAssembler*, v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::wasm::liftoff::MinOrMax)",93957341052112,93957341052757],["void v8::internal::wasm::liftoff::EmitIntDivOrRem<int, (v8::internal::wasm::liftoff::DivOrRem)0>(v8::internal::wasm::LiftoffAssembler*, v8::internal::Register, v8::internal::Register, v8::internal::Register, v8::internal::Label*, v8::internal::Label*)",93957341053504,93957341054005],["v8::Value::IsName() const",93957335401424,93957335401469],["v8::Value::IsArgumentsObject() const",93957335402144,93957335402193],["v8::Value::IsDate() const",93957335402624,93957335402673],["v8::Value::IsWasmModuleObject() const",93957335402880,93957335402929],["v8::Value::IsBoolean() const",93957335403072,93957335403126],["v8::Value::IsUint32() const",93957335403264,93957335403493],["v8::Value::IsRegExp() const",93957335403568,93957335403617],["v8::Value::IsGeneratorObject() const",93957335403712,93957335403762],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitBinOpImm<(v8::internal::wasm::ValueKind)2, (v8::internal::wasm::ValueKind)2, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BinOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)::{lambda(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)#4}, void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, int)>(v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BinOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)::{lambda(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)#4}, void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, int))",93957341039760,93957341040666],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitBinOp<(v8::internal::wasm::ValueKind)4, (v8::internal::wasm::ValueKind)4, false, void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister)>(void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister))",93957341044336,93957341044864],["v8::internal::wasm::LiftoffAssembler::emit_f64_max(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341045584,93957341045600],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitBinOp<(v8::internal::wasm::ValueKind)1, (v8::internal::wasm::ValueKind)1, false, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BinOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)::{lambda(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)#10}>(v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BinOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)::{lambda(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)#10})",93957341046976,93957341047507],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitBinOp<(v8::internal::wasm::ValueKind)2, (v8::internal::wasm::ValueKind)2, false, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BinOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)::{lambda(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)#13}>(v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BinOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)::{lambda(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)#13})",93957341048624,93957341049155],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitBinOp<(v8::internal::wasm::ValueKind)2, (v8::internal::wasm::ValueKind)2, false, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BinOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)::{lambda(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)#15}>(v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BinOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)::{lambda(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)#15})",93957341049712,93957341050243],["v8::internal::wasm::LiftoffAssembler::emit_i32_set_cond(v8::internal::wasm::LiftoffCondition, v8::internal::Register, v8::internal::Register, v8::internal::Register)",93957341050512,93957341050606],["void v8::internal::Assembler::xorq<v8::internal::Register, v8::internal::Register>(v8::internal::Register, v8::internal::Register)",93957341050640,93957341050688],["v8::ValueDeserializer::Delegate::ReadHostObject(v8::Isolate*)",93957335399264,93957335399416],["v8::Value::IsArrayBufferView() const",93957335401664,93957335401714],["v8::Value::IsBigInt() const",93957335402032,93957335402077],["v8::Value::IsBooleanObject() const",93957335402288,93957335402376],["v8::Value::IsSymbolObject() const",93957335402544,93957335402621],["v8::Value::IsMap() const",93957335402688,93957335402737],["v8::Value::IsWasmMemoryObject() const",93957335402816,93957335402865],["v8::Value::IsWeakMap() const",93957335402944,93957335402993],["v8::internal::wasm::LiftoffAssembler::emit_f32_set_cond(v8::internal::wasm::LiftoffCondition, v8::internal::Register, v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341036608,93957341036631],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitBinOp<(v8::internal::wasm::ValueKind)3, (v8::internal::wasm::ValueKind)3, false, void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister)>(void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister))",93957341042816,93957341043344],["v8::internal::wasm::LiftoffAssembler::emit_f32_max(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341044064,93957341044080],["v8::internal::wasm::LiftoffAssembler::emit_f64_sub(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341045024,93957341045209],["v8::internal::wasm::LiftoffAssembler::emit_f64_min(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341045568,93957341045581],["v8::internal::wasm::LiftoffAssembler::emit_f64_copysign(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341045600,93957341045867],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitBinOp<(v8::internal::wasm::ValueKind)1, (v8::internal::wasm::ValueKind)1, false, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BinOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)::{lambda(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)#9}>(v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BinOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)::{lambda(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)#9})",93957341046432,93957341046963],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitBinOp<(v8::internal::wasm::ValueKind)1, (v8::internal::wasm::ValueKind)1, false, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BinOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)::{lambda(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)#11}>(v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BinOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)::{lambda(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)#11})",93957341047520,93957341048051],["v8::JSON::Stringify(v8::Local<v8::Context>, v8::Local<v8::Value>, v8::Local<v8::String>)",93957335397184,93957335398197],["v8::ValueDeserializer::SetSupportsLegacyWireFormat(bool)",93957335400304,93957335400317],["v8::Value::IsArray() const",93957335401536,93957335401585],["v8::Value::IsDataView() const",93957335401792,93957335401841],["v8::Value::IsNumber() const",93957335401984,93957335402028],["v8::Value::IsProxy() const",93957335402080,93957335402129],["v8::Value::IsBigIntObject() const",93957335402208,93957335402285],["v8::Value::IsNumberObject() const",93957335402384,93957335402462],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitBinOpImm<(v8::internal::wasm::ValueKind)2, (v8::internal::wasm::ValueKind)2, void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister), void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, int)>(void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister), void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, int))",93957341034640,93957341035109],["v8::internal::wasm::LiftoffAssembler::emit_i32_shr(v8::internal::Register, v8::internal::Register, v8::internal::Register)",93957341037312,93957341037628],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitBinOp<(v8::internal::wasm::ValueKind)2, (v8::internal::wasm::ValueKind)2, false, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BinOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)::{lambda(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)#6}>(v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BinOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)::{lambda(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)#6})",93957341041600,93957341042201],["v8::internal::wasm::LiftoffAssembler::emit_f32_sub(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341043504,93957341043689],["v8::internal::wasm::LiftoffAssembler::emit_f32_min(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341044048,93957341044061],["v8::internal::wasm::LiftoffAssembler::emit_f32_copysign(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341044080,93957341044325],["v8::internal::wasm::LiftoffAssembler::emit_f64_add(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341044864,93957341045011],["v8::internal::wasm::LiftoffAssembler::emit_f64_mul(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341045216,93957341045363],["v8::StackFrame::GetLineNumber() const",93957335395280,93957335395290],["v8::ValueSerializer::WriteHeader()",93957335398496,93957335398513],["v8::ValueDeserializer::~ValueDeserializer()",93957335399552,93957335399596],["v8::ValueDeserializer::TransferArrayBuffer(unsigned int, v8::Local<v8::ArrayBuffer>)",93957335401328,93957335401372],["v8::Value::IsSymbol() const",93957335401472,93957335401523],["v8::Value::IsArrayBuffer() const",93957335401600,93957335401657],["v8::Value::IsTypedArray() const",93957335401728,93957335401777],["v8::Value::IsSharedArrayBuffer() const",93957335401856,93957335401914],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitI32CmpOp<(v8::internal::wasm::WasmOpcode)76>(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*)",93957341033008,93957341033118],["v8::internal::wasm::LiftoffAssembler::emit_i64_xor(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341035376,93957341035496],["v8::internal::wasm::LiftoffAssembler::emit_i32_shl(v8::internal::Register, v8::internal::Register, v8::internal::Register)",93957341036672,93957341036988],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitBinOp<(v8::internal::wasm::ValueKind)1, (v8::internal::wasm::ValueKind)1, false, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BinOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)::{lambda(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)#2}>(v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BinOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)::{lambda(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)#2})",93957341038240,93957341038833],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitBinOpImm<(v8::internal::wasm::ValueKind)2, (v8::internal::wasm::ValueKind)2, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BinOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)::{lambda(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)#5}, void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, int)>(v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BinOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)::{lambda(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)#5}, void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, int))",93957341040672,93957341041590],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitBinOp<(v8::internal::wasm::ValueKind)2, (v8::internal::wasm::ValueKind)2, false, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BinOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)::{lambda(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)#7}>(v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BinOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)::{lambda(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)#7})",93957341042208,93957341042809],["v8::internal::wasm::LiftoffAssembler::emit_f32_add(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341043344,93957341043491],["v8::internal::wasm::LiftoffAssembler::emit_f32_mul(v8::internal::XMMRegister, v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341043696,93957341043843],["v8::Message::GetStartColumn() const",93957335393280,93957335393618],["v8::StackFrame::GetScriptNameOrSourceURL() const",93957335395504,93957335395663],["v8::ValueSerializer::ValueSerializer(v8::Isolate*, v8::ValueSerializer::Delegate*)",93957335398384,93957335398447],["v8::ValueSerializer::Release()",93957335399200,93957335399217],["v8::ValueDeserializer::ValueDeserializer(v8::Isolate*, unsigned char const*, unsigned long, v8::ValueDeserializer::Delegate*)",93957335399424,93957335399550],["v8::ValueDeserializer::ReadHeader(v8::Local<v8::Context>)",93957335399600,93957335400300],["v8::ValueDeserializer::ReadValue(v8::Local<v8::Context>)",93957335400320,93957335401327],["v8::Value::IsFunction() const",93957335401376,93957335401417],["v8::internal::wasm::LiftoffAssembler::emit_i32_ori(v8::internal::Register, v8::internal::Register, int)",93957341032176,93957341032247],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitBinOpImm<(v8::internal::wasm::ValueKind)2, (v8::internal::wasm::ValueKind)2, void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister), void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, long)>(void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister), void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, long))",93957341033456,93957341033893],["v8::internal::wasm::LiftoffAssembler::emit_i64_andi(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, int)",93957341035216,93957341035292],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitBinOp<(v8::internal::wasm::ValueKind)11, (v8::internal::wasm::ValueKind)1, false, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitFnWithFirstArg<void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffCondition, v8::internal::Register, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister), v8::internal::wasm::LiftoffCondition> >(v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitFnWithFirstArg<void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffCondition, v8::internal::Register, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister), v8::internal::wasm::LiftoffCondition>)",93957341035584,93957341036100],["v8::internal::wasm::LiftoffAssembler::emit_f64_set_cond(v8::internal::wasm::LiftoffCondition, v8::internal::Register, v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341036640,93957341036663],["v8::internal::wasm::LiftoffAssembler::emit_i32_sar(v8::internal::Register, v8::internal::Register, v8::internal::Register)",93957341036992,93957341037308],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitBinOp<(v8::internal::wasm::ValueKind)1, (v8::internal::wasm::ValueKind)1, false, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BinOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)::{lambda(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)#1}>(v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BinOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)::{lambda(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)#1})",93957341037632,93957341038225],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitBinOpImm<(v8::internal::wasm::ValueKind)2, (v8::internal::wasm::ValueKind)2, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BinOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)::{lambda(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)#3}, void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, int)>(v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BinOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)::{lambda(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)#3}, void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, int))",93957341038848,93957341039754],["v8::TryCatch::SetVerbose(bool)",93957335391088,93957335391105],["v8::Message::GetEndColumn(v8::Local<v8::Context>) const",93957335394592,93957335394611],["v8::StackFrame::GetScriptId() const",93957335395312,93957335395342],["v8::JSON::Parse(v8::Local<v8::Context>, v8::Local<v8::String>)",93957335395728,93957335396833],["v8::ValueSerializer::Delegate::WriteHostObject(v8::Isolate*, v8::Local<v8::Object>)",93957335398208,93957335398373],["v8::ValueSerializer::~ValueSerializer()",93957335398448,93957335398492],["v8::ValueSerializer::WriteValue(v8::Local<v8::Context>, v8::Local<v8::Value>)",93957335398528,93957335399191],["v8::ValueSerializer::TransferArrayBuffer(unsigned int, v8::Local<v8::ArrayBuffer>)",93957335399232,93957335399249],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitUnOp<(v8::internal::wasm::ValueKind)2, (v8::internal::wasm::ValueKind)2, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::UnOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)::{lambda(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)#2}>(v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::UnOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)::{lambda(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)#2})",93957341027456,93957341028228],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitI32CmpOp<(v8::internal::wasm::WasmOpcode)72>(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*)",93957341032560,93957341032670],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitI32CmpOp<(v8::internal::wasm::WasmOpcode)78>(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*)",93957341033232,93957341033342],["v8::internal::wasm::LiftoffAssembler::emit_i64_sub(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341034432,93957341034543],["v8::internal::wasm::LiftoffAssembler::emit_i64_and(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341035120,93957341035209],["v8::internal::wasm::LiftoffAssembler::emit_i64_ori(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, int)",93957341035296,93957341035372],["v8::internal::wasm::LiftoffAssembler::emit_i64_xori(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, int)",93957341035504,93957341035580],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitBinOp<(v8::internal::wasm::ValueKind)3, (v8::internal::wasm::ValueKind)1, false, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitFnWithFirstArg<void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffCondition, v8::internal::Register, v8::internal::XMMRegister, v8::internal::XMMRegister), v8::internal::wasm::LiftoffCondition> >(v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitFnWithFirstArg<void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffCondition, v8::internal::Register, v8::internal::XMMRegister, v8::internal::XMMRegister), v8::internal::wasm::LiftoffCondition>)",93957341036112,93957341036607],["v8::Isolate::ThrowException(v8::Local<v8::Value>)",93957335389168,93957335389241],["v8::GetScriptOriginForScript(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Script>)",93957335391792,93957335392181],["v8::Message::GetStartColumn(v8::Local<v8::Context>) const",93957335394144,93957335394163],["v8::StackTrace::GetFrame(v8::Isolate*, unsigned int) const",93957335395120,93957335395223],["v8::StackFrame::GetColumn() const",93957335395296,93957335395306],["v8::StackFrame::GetScriptName() const",93957335395344,93957335395503],["v8::StackFrame::GetFunctionName() const",93957335395664,93957335395721],["v8::internal::String::Flatten(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, v8::internal::AllocationType)",93957335396848,93957335397175],["v8::internal::wasm::LiftoffAssembler::emit_i64_signextend_i32(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341025168,93957341025185],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BinOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)",93957341028848,93957341031078],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitI32CmpOp<(v8::internal::wasm::WasmOpcode)70>(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*)",93957341032336,93957341032446],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitI32CmpOp<(v8::internal::wasm::WasmOpcode)74>(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*)",93957341032784,93957341032894],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitI32CmpOp<(v8::internal::wasm::WasmOpcode)77>(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*)",93957341033120,93957341033230],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitI32CmpOp<(v8::internal::wasm::WasmOpcode)79>(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*)",93957341033344,93957341033454],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitBinOp<(v8::internal::wasm::ValueKind)2, (v8::internal::wasm::ValueKind)2, false, void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)>(void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister))",93957341033904,93957341034422],["v8::internal::wasm::LiftoffAssembler::emit_i64_mul(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341034544,93957341034627],["v8::ScriptCompiler::Compile(v8::Local<v8::Context>, v8::ScriptCompiler::StreamedSource*, v8::Local<v8::String>, v8::ScriptOrigin const&)",93957335384816,93957335386586],["v8::TryCatch::StackTrace(v8::Local<v8::Context>, v8::Local<v8::Value>)",93957335389328,93957335390603],["v8::Message::Get() const",93957335391152,93957335391629],["v8::Message::GetLineNumber(v8::Local<v8::Context>) const",93957335392912,93957335393258],["v8::Message::GetWasmFunctionIndex() const",93957335393632,93957335394134],["v8::Message::GetEndColumn() const",93957335394176,93957335394578],["v8::Message::GetSourceLine(v8::Local<v8::Context>) const",93957335394624,93957335395117],["v8::StackTrace::CurrentStackTrace(v8::Isolate*, int, v8::StackTrace::StackTraceOptions)",93957335395232,93957335395276],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitTypeConversion<(v8::internal::wasm::ValueKind)4, (v8::internal::wasm::ValueKind)1, (v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::TypeConversionTrapping)0>(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::ExternalReference (*)())",93957341023280,93957341023758],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitTypeConversion<(v8::internal::wasm::ValueKind)2, (v8::internal::wasm::ValueKind)3, (v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::TypeConversionTrapping)0>(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::ExternalReference (*)())",93957341025744,93957341026235],["v8::internal::wasm::LiftoffAssembler::CallC(v8::internal::Signature<v8::internal::wasm::ValueKind> const*, v8::internal::wasm::LiftoffRegister const*, v8::internal::wasm::LiftoffRegister const*, v8::internal::wasm::ValueKind, int, v8::internal::ExternalReference)",93957341028256,93957341028745],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitBinOp<(v8::internal::wasm::ValueKind)1, (v8::internal::wasm::ValueKind)1, false, void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::Register, v8::internal::Register, v8::internal::Register)>(void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::Register, v8::internal::Register, v8::internal::Register))",93957341031568,93957341032087],["v8::internal::wasm::LiftoffAssembler::emit_i32_xori(v8::internal::Register, v8::internal::Register, int)",93957341032256,93957341032327],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitI32CmpOp<(v8::internal::wasm::WasmOpcode)71>(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*)",93957341032448,93957341032558],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitI32CmpOp<(v8::internal::wasm::WasmOpcode)73>(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*)",93957341032672,93957341032782],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitI32CmpOp<(v8::internal::wasm::WasmOpcode)75>(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*)",93957341032896,93957341033006],["v8::Isolate::GetCurrentContext()",93957335381504,93957335381628],["v8::TryCatch::TryCatch(v8::Isolate*)",93957335388352,93957335388426],["v8::TryCatch::HasTerminated() const",93957335389264,93957335389278],["v8::TryCatch::Message() const",93957335390896,93957335390996],["v8::TryCatch::SetCaptureMessage(bool)",93957335391120,93957335391141],["v8::Message::GetScriptOrigin() const",93957335391632,93957335391789],["v8::Message::GetStackTrace() const",93957335392192,93957335392901],["v8::Message::ErrorLevel() const",93957335393264,93957335393278],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitTypeConversion<(v8::internal::wasm::ValueKind)1, (v8::internal::wasm::ValueKind)3, (v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::TypeConversionTrapping)0>(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::ExternalReference (*)())",93957341018576,93957341019054],["v8::internal::wasm::LiftoffAssembler::emit_i32_signextend_i16(v8::internal::Register, v8::internal::Register)",93957341024656,93957341024666],["v8::internal::wasm::LiftoffAssembler::emit_i64_ctz(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341025232,93957341025249],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitUnOp<(v8::internal::wasm::ValueKind)2, (v8::internal::wasm::ValueKind)1, void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::Register, v8::internal::wasm::LiftoffRegister)>(void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::Register, v8::internal::wasm::LiftoffRegister))",93957341026304,93957341026720],["v8::internal::wasm::LiftoffAssembler::emit_ptrsize_set_cond(v8::internal::wasm::LiftoffCondition, v8::internal::Register, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341028240,93957341028250],["v8::internal::wasm::LiftoffAssembler::emit_i64_set_cond(v8::internal::wasm::LiftoffCondition, v8::internal::Register, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341028752,93957341028848],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitBinOpImm<(v8::internal::wasm::ValueKind)1, (v8::internal::wasm::ValueKind)1, void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::Register, v8::internal::Register, v8::internal::Register), void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::Register, v8::internal::Register, int)>(void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::Register, v8::internal::Register, v8::internal::Register), void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::Register, v8::internal::Register, int))",93957341031088,93957341031557],["v8::internal::wasm::LiftoffAssembler::emit_i32_mul(v8::internal::Register, v8::internal::Register, v8::internal::Register)",93957341032096,93957341032170],["v8::debug::AccessorPair::setter()",93957335377664,93957335377761],["v8::ScriptCompiler::Compile(v8::Local<v8::Context>, v8::ScriptCompiler::Source*, v8::ScriptCompiler::CompileOptions, v8::ScriptCompiler::NoCacheReason)",93957335383952,93957335384353],["v8::ScriptCompiler::CreateCodeCache(v8::Local<v8::UnboundScript>)",93957335388208,93957335388218],["v8::TryCatch::Exception() const",93957335389024,93957335389122],["v8::TryCatch::CanContinue() const",93957335389248,93957335389261],["v8::TryCatch::ReThrow()",93957335389280,93957335389314],["v8::internal::JSReceiver::HasProperty(v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::Name>)",93957335390608,93957335390881],["v8::TryCatch::Reset()",93957335391008,93957335391078],["v8::internal::wasm::LiftoffAssembler::emit_f64_ceil(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341015760,93957341015876],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitTypeConversion<(v8::internal::wasm::ValueKind)2, (v8::internal::wasm::ValueKind)4, (v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::TypeConversionTrapping)0>(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::ExternalReference (*)())",93957341021424,93957341021915],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitTypeConversion<(v8::internal::wasm::ValueKind)4, (v8::internal::wasm::ValueKind)3, (v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::TypeConversionTrapping)0>(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::ExternalReference (*)())",93957341024256,93957341024639],["v8::internal::wasm::LiftoffAssembler::emit_i64_signextend_i8(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341025104,93957341025121],["v8::internal::wasm::LiftoffAssembler::emit_i64_clz(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341025200,93957341025217],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitTypeConversion<(v8::internal::wasm::ValueKind)1, (v8::internal::wasm::ValueKind)4, (v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::TypeConversionTrapping)0>(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::ExternalReference (*)())",93957341025264,93957341025742],["v8::internal::wasm::LiftoffAssembler::emit_i32_eqz(v8::internal::Register, v8::internal::Register)",93957341026240,93957341026304],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitUnOp<(v8::internal::wasm::ValueKind)1, (v8::internal::wasm::ValueKind)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::UnOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)::{lambda(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)#1}>(v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::UnOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)::{lambda(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)#1})",93957341026720,93957341027447],["v8::Script::Run(v8::Local<v8::Context>)",93957335375264,93957335376621],["v8::Module::InstantiateModule(v8::Local<v8::Context>, v8::MaybeLocal<v8::Module> (*)(v8::Local<v8::Context>, v8::Local<v8::String>, v8::Local<v8::FixedArray>, v8::Local<v8::Module>))",93957335378192,93957335378872],["v8::ScriptCompiler::CompileUnboundInternal(v8::Isolate*, v8::ScriptCompiler::Source*, v8::ScriptCompiler::CompileOptions, v8::ScriptCompiler::NoCacheReason)",93957335382032,93957335383789],["v8::ScriptCompiler::ScriptStreamingTask::Run()",93957335384656,93957335384673],["v8::ScriptCompiler::CompileModule(v8::Local<v8::Context>, v8::ScriptCompiler::StreamedSource*, v8::Local<v8::String>, v8::ScriptOrigin const&)",93957335386592,93957335388200],["v8::Script::Compile(v8::Local<v8::Context>, v8::Local<v8::String>, v8::ScriptOrigin*)",93957335388224,93957335388338],["v8::TryCatch::~TryCatch()",93957335388432,93957335389012],["v8::TryCatch::HasCaught() const",93957335389136,93957335389157],["v8::internal::wasm::LiftoffAssembler::emit_f32_floor(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341013632,93957341013748],["v8::internal::wasm::LiftoffAssembler::emit_f64_sqrt(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341016272,93957341016355],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitTypeConversion<(v8::internal::wasm::ValueKind)2, (v8::internal::wasm::ValueKind)3, (v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::TypeConversionTrapping)1>(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::ExternalReference (*)())",93957341019568,93957341020496],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitTypeConversion<(v8::internal::wasm::ValueKind)3, (v8::internal::wasm::ValueKind)2, (v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::TypeConversionTrapping)0>(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::ExternalReference (*)())",93957341022400,93957341022891],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitTypeConversion<(v8::internal::wasm::ValueKind)4, (v8::internal::wasm::ValueKind)2, (v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::TypeConversionTrapping)0>(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::ExternalReference (*)())",93957341023760,93957341024251],["v8::internal::wasm::LiftoffAssembler::emit_i32_signextend_i8(v8::internal::Register, v8::internal::Register)",93957341024640,93957341024650],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitUnOp<(v8::internal::wasm::ValueKind)2, (v8::internal::wasm::ValueKind)2, void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)>(void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister))",93957341024672,93957341025090],["v8::internal::wasm::LiftoffAssembler::emit_i64_signextend_i16(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341025136,93957341025153],["v8::ObjectTemplate::SetInternalFieldCount(int)",93957335374400,93957335374601],["v8::Script::GetUnboundScript()",93957335377280,93957335377377],["v8::Module::GetModuleNamespace()",93957335378000,93957335378164],["v8::Module::CreateSyntheticModule(v8::Isolate*, v8::Local<v8::String>, std::__1::vector<v8::Local<v8::String>, std::__1::allocator<v8::Local<v8::String> > > const&, v8::MaybeLocal<v8::Value> (*)(v8::Local<v8::Context>, v8::Local<v8::Module>))",93957335380272,93957335380653],["v8::CallDepthScope<false>::CallDepthScope(v8::internal::Isolate*, v8::Local<v8::Context>)",93957335381632,93957335382021],["v8::ScriptCompiler::CompileUnboundScript(v8::Isolate*, v8::ScriptCompiler::Source*, v8::ScriptCompiler::CompileOptions, v8::ScriptCompiler::NoCacheReason)",93957335383792,93957335383946],["v8::ScriptCompiler::CompileModule(v8::Isolate*, v8::ScriptCompiler::Source*, v8::ScriptCompiler::CompileOptions, v8::ScriptCompiler::NoCacheReason)",93957335384368,93957335384648],["v8::ScriptCompiler::StartStreaming(v8::Isolate*, v8::ScriptCompiler::StreamedSource*, v8::ScriptType)",93957335384688,93957335384816],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitUnOp<(v8::internal::wasm::ValueKind)1, (v8::internal::wasm::ValueKind)1, void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::Register, v8::internal::Register)>(void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::Register, v8::internal::Register))",93957341011456,93957341011874],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitUnOp<(v8::internal::wasm::ValueKind)4, (v8::internal::wasm::ValueKind)4, void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::XMMRegister, v8::internal::XMMRegister)>(void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::XMMRegister, v8::internal::XMMRegister))",93957341014112,93957341014535],["v8::internal::wasm::LiftoffAssembler::emit_f64_trunc(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341016016,93957341016132],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitTypeConversion<(v8::internal::wasm::ValueKind)1, (v8::internal::wasm::ValueKind)3, (v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::TypeConversionTrapping)1>(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::ExternalReference (*)())",93957341016752,93957341017655],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitTypeConversion<(v8::internal::wasm::ValueKind)2, (v8::internal::wasm::ValueKind)1, (v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::TypeConversionTrapping)0>(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::ExternalReference (*)())",93957341019056,93957341019557],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitTypeConversion<(v8::internal::wasm::ValueKind)2, (v8::internal::wasm::ValueKind)4, (v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::TypeConversionTrapping)1>(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::ExternalReference (*)())",93957341020496,93957341021424],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitTypeConversion<(v8::internal::wasm::ValueKind)3, (v8::internal::wasm::ValueKind)1, (v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::TypeConversionTrapping)0>(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::ExternalReference (*)())",93957341021920,93957341022398],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitTypeConversion<(v8::internal::wasm::ValueKind)3, (v8::internal::wasm::ValueKind)4, (v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::TypeConversionTrapping)0>(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::ExternalReference (*)())",93957341022896,93957341023279],["v8::ObjectTemplate::SetHandler(v8::NamedPropertyHandlerConfiguration const&)",93957335369056,93957335369636],["v8::ScriptCompiler::StreamedSource::StreamedSource(std::__1::unique_ptr<v8::ScriptCompiler::ExternalSourceStream, std::__1::default_delete<v8::ScriptCompiler::ExternalSourceStream> >, v8::ScriptCompiler::StreamedSource::Encoding)",93957335374704,93957335374763],["v8::HandleScope::~HandleScope()",93957335377072,93957335377128],["v8::FixedArray::Get(v8::Local<v8::Context>, int) const",93957335377408,93957335377546],["v8::Module::GetModuleRequests() const",93957335377776,93957335377995],["v8::Module::GetIdentityHash() const",93957335378176,93957335378190],["v8::Module::Evaluate(v8::Local<v8::Context>)",93957335378880,93957335380259],["v8::Module::SetSyntheticModuleExport(v8::Isolate*, v8::Local<v8::String>, v8::Local<v8::Value>)",93957335380656,93957335381503],["v8::internal::wasm::LiftoffAssembler::emit_i64_add(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957341006944,93957341007078],["v8::internal::wasm::LiftoffAssembler::emit_f32_abs(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341012352,93957341012527],["v8::internal::wasm::LiftoffAssembler::emit_f32_nearest_int(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341013888,93957341014001],["v8::internal::wasm::LiftoffAssembler::emit_f64_neg(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341014752,93957341014949],["v8::internal::wasm::LiftoffAssembler::emit_f64_floor(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341015888,93957341016004],["v8::internal::wasm::LiftoffAssembler::emit_f64_nearest_int(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341016144,93957341016257],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitTypeConversion<(v8::internal::wasm::ValueKind)1, (v8::internal::wasm::ValueKind)2, (v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::TypeConversionTrapping)0>(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::ExternalReference (*)())",93957341016368,93957341016751],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitTypeConversion<(v8::internal::wasm::ValueKind)1, (v8::internal::wasm::ValueKind)4, (v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::TypeConversionTrapping)1>(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::ExternalReference (*)())",93957341017664,93957341018567],["v8::FunctionTemplateNew(v8::internal::Isolate*, void (*)(v8::FunctionCallbackInfo<v8::Value> const&), v8::Local<v8::Value>, v8::Local<v8::Signature>, int, v8::ConstructorBehavior, bool, v8::Local<v8::Private>, v8::SideEffectType, v8::CFunction const*)",93957335365760,93957335366239],["v8::internal::Handle<v8::internal::InterceptorInfo> v8::CreateIndexedInterceptorInfo<void (*)(unsigned int, v8::PropertyCallbackInfo<v8::Value> const&), void (*)(unsigned int, v8::Local<v8::Value>, v8::PropertyCallbackInfo<v8::Value> const&), void (*)(unsigned int, v8::PropertyCallbackInfo<v8::Integer> const&), void (*)(unsigned int, v8::PropertyCallbackInfo<v8::Value> const&), void (*)(unsigned int, v8::PropertyCallbackInfo<v8::Boolean> const&), void (*)(v8::PropertyCallbackInfo<v8::Array> const&), void (*)(unsigned int, v8::PropertyDescriptor const&, v8::PropertyCallbackInfo<v8::Value> const&)>(v8::internal::Isolate*, void (*)(unsigned int, v8::PropertyCallbackInfo<v8::Value> const&), void (*)(unsigned int, v8::Local<v8::Value>, v8::PropertyCallbackInfo<v8::Value> const&), void (*)(unsigned int, v8::PropertyCallbackInfo<v8::Integer> const&), void (*)(unsigned int, v8::PropertyCallbackInfo<v8::Value> const&), void (*)(unsigned int, v8::PropertyCallbackInfo<v8::Boolean> const&), void (*)(v8::PropertyCallbackInfo<v8::Array> const&), void (*)(unsigned int, v8::PropertyDescriptor const&, v8::PropertyCallbackInfo<v8::Value> const&), v8::Local<v8::Value>, v8::PropertyHandlerFlags)",93957335371728,93957335372922],["v8::ScriptCompiler::CachedData::~CachedData()",93957335374640,93957335374666],["v8::UnboundScript::BindToCurrentContext()",93957335374832,93957335375050],["v8::CallDepthScope<true>::CallDepthScope(v8::internal::Isolate*, v8::Local<v8::Context>)",93957335376624,93957335377069],["v8::ScriptOrModule::GetResourceName()",93957335377136,93957335377271],["v8::FixedArray::Length() const",93957335377392,93957335377406],["v8::debug::AccessorPair::getter()",93957335377552,93957335377649],["v8::base::SmallVector<v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>, 2ul>::operator=(v8::base::SmallVector<v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>, 2ul> const&)",93957340997456,93957340997591],["v8::internal::wasm::LiftoffAssembler::emit_select(v8::internal::wasm::LiftoffRegister, v8::internal::Register, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::ValueKind)",93957341008512,93957341008733],["v8::internal::wasm::LiftoffAssembler::emit_i32_ctz(v8::internal::Register, v8::internal::Register)",93957341011904,93957341011914],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitFloatUnOpWithCFallback<(v8::internal::wasm::ValueKind)3>(bool (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::XMMRegister, v8::internal::XMMRegister), v8::internal::ExternalReference (*)())",93957341012704,93957341013491],["v8::internal::wasm::LiftoffAssembler::emit_f32_trunc(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341013760,93957341013876],["v8::internal::wasm::LiftoffAssembler::emit_f32_sqrt(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341014016,93957341014099],["v8::internal::wasm::LiftoffAssembler::emit_f64_abs(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341014544,93957341014741],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitFloatUnOpWithCFallback<(v8::internal::wasm::ValueKind)4>(bool (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::XMMRegister, v8::internal::XMMRegister), v8::internal::ExternalReference (*)())",93957341014960,93957341015747],["v8::Context::BackupIncumbentScope::BackupIncumbentScope(v8::Local<v8::Context>)",93957335363376,93957335363436],["v8::FunctionTemplate::SetClassName(v8::Local<v8::String>)",93957335368272,93957335368559],["v8::EnsureConstructor(v8::internal::Isolate*, v8::ObjectTemplate*)",93957335369920,93957335370519],["v8::ObjectTemplate::SetCallAsFunctionHandler(void (*)(v8::FunctionCallbackInfo<v8::Value> const&), v8::Local<v8::Value>)",93957335373392,93957335374358],["v8::ScriptCompiler::CachedData::CachedData(unsigned char const*, int, v8::ScriptCompiler::CachedData::BufferPolicy)",93957335374608,93957335374627],["v8_inspector::V8InspectorSessionImpl::FallThrough(int, v8_crdtp::span<unsigned char>, v8_crdtp::span<unsigned char>)",93957335374672,93957335374690],["v8::ScriptCompiler::StreamedSource::~StreamedSource()",93957335374768,93957335374818],["v8::UnboundScript::GetId() const",93957335375056,93957335375262],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::DoReturn(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, unsigned int)",93957340992992,93957340993612],["v8::internal::wasm::LiftoffAssembler::emit_i32_sub(v8::internal::Register, v8::internal::Register, v8::internal::Register)",93957341002160,93957341002285],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::Select(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)",93957341007504,93957341008329],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::BuildSimpleOperator(v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueType, v8::internal::wasm::ValueType, v8::internal::wasm::ValueType)",93957341009264,93957341009994],["v8::internal::wasm::LiftoffAssembler::emit_i32_clz(v8::internal::Register, v8::internal::Register)",93957341011888,93957341011898],["void v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitUnOp<(v8::internal::wasm::ValueKind)3, (v8::internal::wasm::ValueKind)3, void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::XMMRegister, v8::internal::XMMRegister)>(void (v8::internal::wasm::LiftoffAssembler::*)(v8::internal::XMMRegister, v8::internal::XMMRegister))",93957341011920,93957341012343],["v8::internal::wasm::LiftoffAssembler::emit_f32_neg(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341012528,93957341012703],["v8::internal::wasm::LiftoffAssembler::emit_f32_ceil(v8::internal::XMMRegister, v8::internal::XMMRegister)",93957341013504,93957341013620],["v8::HandleScope::CreateHandle(v8::internal::Isolate*, unsigned long)",93957335362128,93957335362184],["v8::Template::Set(v8::Local<v8::Name>, v8::Local<v8::Data>, v8::PropertyAttribute)",93957335364256,93957335364682],["v8::FunctionTemplate::SetCallHandler(void (*)(v8::FunctionCallbackInfo<v8::Value> const&), v8::Local<v8::Value>, v8::SideEffectType, v8::CFunction const*)",93957335366256,93957335367766],["v8::ObjectTemplate::New(v8::Isolate*, v8::Local<v8::FunctionTemplate>)",93957335368736,93957335368748],["v8::ObjectTemplate::MarkAsUndetectable()",93957335369648,93957335369917],["v8::internal::Handle<v8::internal::InterceptorInfo> v8::CreateNamedInterceptorInfo<void (*)(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&), void (*)(v8::Local<v8::Name>, v8::Local<v8::Value>, v8::PropertyCallbackInfo<v8::Value> const&), void (*)(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Integer> const&), void (*)(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&), void (*)(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Boolean> const&), void (*)(v8::PropertyCallbackInfo<v8::Array> const&), void (*)(v8::Local<v8::Name>, v8::PropertyDescriptor const&, v8::PropertyCallbackInfo<v8::Value> const&)>(v8::internal::Isolate*, void (*)(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&), void (*)(v8::Local<v8::Name>, v8::Local<v8::Value>, v8::PropertyCallbackInfo<v8::Value> const&), void (*)(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Integer> const&), void (*)(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&), void (*)(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Boolean> const&), void (*)(v8::PropertyCallbackInfo<v8::Array> const&), void (*)(v8::Local<v8::Name>, v8::PropertyDescriptor const&, v8::PropertyCallbackInfo<v8::Value> const&), v8::Local<v8::Value>, v8::PropertyHandlerFlags)",93957335370528,93957335371725],["v8::ObjectTemplate::SetHandler(v8::IndexedPropertyHandlerConfiguration const&)",93957335372928,93957335373385],["v8::ObjectTemplate::InternalFieldCount() const",93957335374368,93957335374388],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitLandingPad(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*)",93957340989824,93957340990605],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::GenerateBrCase(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, unsigned int, std::__1::map<unsigned int, v8::internal::wasm::(anonymous namespace)::MovableLabel, std::__1::less<unsigned int>, std::__1::allocator<std::__1::pair<unsigned int const, v8::internal::wasm::(anonymous namespace)::MovableLabel> > >*)",93957340994400,93957340994682],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::CallIndirect(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::CallIndirectImmediate<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::TailCall)",93957340997856,93957341001866],["v8::internal::wasm::LiftoffAssembler::emit_i32_add(v8::internal::Register, v8::internal::Register, v8::internal::Register)",93957341002368,93957341002488],["v8::internal::wasm::LiftoffAssembler::emit_i64_addi(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, long)",93957341007088,93957341007490],["v8::internal::wasm::LiftoffAssembler::GetUnusedRegister(v8::internal::wasm::RegClass, std::initializer_list<v8::internal::wasm::LiftoffRegister>, v8::internal::wasm::LiftoffRegList)",93957341008336,93957341008509],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::BuildSimpleOperator(v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueType, v8::internal::wasm::ValueType)",93957341008736,93957341009261],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::UnOp(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)",93957341010000,93957341011449],["v8::V8::MakeWeak(unsigned long**)",93957335361632,93957335361642],["v8::SealHandleScope::~SealHandleScope()",93957335362528,93957335362557],["v8::EmbedderDataFor(v8::Context*, int, bool, char const*)",93957335363472,93957335364072],["v8::ObjectTemplateNew(v8::internal::Isolate*, v8::Local<v8::FunctionTemplate>, bool)",93957335365056,93957335365467],["v8::Signature::New(v8::Isolate*, v8::Local<v8::FunctionTemplate>)",93957335366240,93957335366249],["v8::FunctionTemplate::InstanceTemplate()",93957335367776,93957335368268],["v8::FunctionTemplate::ReadOnlyPrototype()",93957335368560,93957335368728],["v8::ObjectTemplate::SetAccessor(v8::Local<v8::String>, void (*)(v8::Local<v8::String>, v8::PropertyCallbackInfo<v8::Value> const&), void (*)(v8::Local<v8::String>, v8::Local<v8::Value>, v8::PropertyCallbackInfo<void> const&), v8::Local<v8::Value>, v8::AccessControl, v8::PropertyAttribute, v8::Local<v8::AccessorSignature>, v8::SideEffectType, v8::SideEffectType)",93957335368752,93957335369050],["bool v8::internal::wasm::liftoff::EmitTruncateFloatToInt<long, float>(v8::internal::wasm::LiftoffAssembler*, v8::internal::Register, v8::internal::XMMRegister, v8::internal::Label*)",93957340987040,93957340987332],["v8::internal::wasm::LiftoffAssembler::emit_i32_shri(v8::internal::Register, v8::internal::Register, int)",93957340991536,93957340991612],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::BrOrRet(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, unsigned int, unsigned int)",93957340993760,93957340993987],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::CallDirect(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::CallFunctionImmediate<(v8::internal::wasm::Decoder::ValidateFlag)1> const&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> const*, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::TailCall)",93957340994752,93957340996925],["v8::internal::wasm::WasmDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1>::Validate(unsigned char const*, v8::internal::wasm::CallIndirectImmediate<(v8::internal::wasm::Decoder::ValidateFlag)1>&)",93957340997600,93957340997847],["v8::internal::wasm::LiftoffAssembler::PopToModifiableRegister(v8::internal::wasm::LiftoffRegList)",93957341001872,93957341002155],["v8::internal::wasm::LiftoffAssembler::emit_i32_xor(v8::internal::Register, v8::internal::Register, v8::internal::Register)",93957341002288,93957341002368],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::CallRef(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::ValueType, v8::internal::Signature<v8::internal::wasm::ValueType> const*, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::TailCall)",93957341002496,93957341006939],["v8::V8::SetFlagsFromString(char const*)",93957335360944,93957335360980],["v8::V8::FromJustIsNothing()",93957335361696,93957335361799],["v8::EscapableHandleScope::Escape(unsigned long*)",93957335362288,93957335362462],["v8::internal::HandleScopeImplementer::EnterContext(v8::internal::Context)",93957335362848,93957335363137],["v8::Context::BackupIncumbentScope::~BackupIncumbentScope()",93957335363440,93957335363467],["v8::Context::SetAlignedPointerInEmbedderData(int, void*)",93957335364080,93957335364241],["v8::FunctionTemplate::PrototypeTemplate()",93957335364688,93957335365050],["v8::FunctionTemplate::New(v8::Isolate*, void (*)(v8::FunctionCallbackInfo<v8::Value> const&), v8::Local<v8::Value>, v8::Local<v8::Signature>, int, v8::ConstructorBehavior, v8::SideEffectType, v8::CFunction const*)",93957335365472,93957335365759],["bool v8::internal::wasm::liftoff::EmitTruncateFloatToInt<int, float>(v8::internal::wasm::LiftoffAssembler*, v8::internal::Register, v8::internal::XMMRegister, v8::internal::Label*)",93957340983264,93957340983556],["bool v8::internal::wasm::liftoff::EmitSatTruncateFloatToInt<long, double>(v8::internal::wasm::LiftoffAssembler*, v8::internal::Register, v8::internal::XMMRegister)",93957340988640,93957340989282],["v8::internal::wasm::LiftoffAssembler::StoreTaggedPointer(v8::internal::Register, v8::internal::Register, int, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegList, v8::internal::wasm::LiftoffAssembler::SkipWriteBarrier)",93957340991024,93957340991454],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::Rethrow(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::Control*)",93957340991648,93957340992032],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::TypeCheckBranch(v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::Control*, bool, unsigned int)",93957340993616,93957340993750],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::GenerateBrTable(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, unsigned int, unsigned int, v8::internal::wasm::BranchTableIterator<(v8::internal::wasm::Decoder::ValidateFlag)1>*, std::__1::map<unsigned int, v8::internal::wasm::(anonymous namespace)::MovableLabel, std::__1::less<unsigned int>, std::__1::allocator<std::__1::pair<unsigned int const, v8::internal::wasm::(anonymous namespace)::MovableLabel> > >*)",93957340994000,93957340994385],["std::__1::__tree<std::__1::__value_type<unsigned int, v8::internal::wasm::(anonymous namespace)::MovableLabel>, std::__1::__map_value_compare<unsigned int, std::__1::__value_type<unsigned int, v8::internal::wasm::(anonymous namespace)::MovableLabel>, std::__1::less<unsigned int>, true>, std::__1::allocator<std::__1::__value_type<unsigned int, v8::internal::wasm::(anonymous namespace)::MovableLabel> > >::destroy(std::__1::__tree_node<std::__1::__value_type<unsigned int, v8::internal::wasm::(anonymous namespace)::MovableLabel>, void*>*)",93957340994688,93957340994739],["v8::internal::wasm::LiftoffAssembler::PrepareTailCall(int, int)",93957340996928,93957340997454],["v8::SnapshotCreator::~SnapshotCreator()",93957335357296,93957335357666],["v8::ResourceConstraints::ConfigureDefaults(unsigned long, unsigned long)",93957335361328,93957335361422],["v8::V8::AnnotateStrongRetainer(unsigned long*, char const*)",93957335361664,93957335361674],["v8::HandleScope::HandleScope(v8::Isolate*)",93957335361920,93957335361930],["v8::EscapableHandleScope::EscapableHandleScope(v8::Isolate*)",93957335362192,93957335362278],["v8::SealHandleScope::SealHandleScope(v8::Isolate*)",93957335362464,93957335362519],["v8::Context::Enter()",93957335362560,93957335362843],["v8::Context::Exit()",93957335363152,93957335363366],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::Load32BitExceptionValue(v8::internal::Register, v8::internal::wasm::LiftoffRegister, unsigned int*, v8::internal::wasm::LiftoffRegList)",93957340980560,93957340980932],["bool v8::internal::wasm::liftoff::EmitSatTruncateFloatToInt<int, float>(v8::internal::wasm::LiftoffAssembler*, v8::internal::Register, v8::internal::XMMRegister)",93957340984544,93957340985122],["bool v8::internal::wasm::liftoff::EmitSatTruncateFloatToInt<long, float>(v8::internal::wasm::LiftoffAssembler*, v8::internal::Register, v8::internal::XMMRegister)",93957340987664,93957340988256],["v8::internal::wasm::LiftoffAssembler::emit_i64_or(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957340989696,93957340989785],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::Store32BitExceptionValue(v8::internal::Register, int*, v8::internal::Register, v8::internal::wasm::LiftoffRegList)",93957340990608,93957340991019],["v8::internal::wasm::LiftoffAssembler::emit_i32_andi(v8::internal::Register, v8::internal::Register, int)",93957340991456,93957340991527],["v8::internal::wasm::Decoder::error(char const*)",93957340991616,93957340991647],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::PopControl(v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::Control*)",93957340992032,93957340992988],["v8::internal::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*)",93957335356144,93957335356155],["v8::Object::GetIsolate()",93957335358112,93957335358125],["v8::RegisterExtension(std::__1::unique_ptr<v8::Extension, std::__1::default_delete<v8::Extension> >)",93957335361088,93957335361135],["v8::V8::MoveGlobalReference(unsigned long**, unsigned long**)",93957335361600,93957335361610],["v8::V8::ClearWeak(unsigned long*)",93957335361648,93957335361658],["v8::V8::DisposeGlobal(unsigned long*)",93957335361680,93957335361690],["v8::V8::ToLocalEmpty()",93957335361808,93957335361911],["v8::HandleScope::Initialize(v8::Isolate*)",93957335361936,93957335362125],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::PopTypeError(int, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>, v8::internal::wasm::ValueType)",93957340977408,93957340977554],["v8::internal::wasm::LiftoffAssembler::emit_i32_shli(v8::internal::Register, v8::internal::Register, int)",93957340982992,93957340983068],["bool v8::internal::wasm::liftoff::EmitTruncateFloatToInt<int, double>(v8::internal::wasm::LiftoffAssembler*, v8::internal::Register, v8::internal::XMMRegister, v8::internal::Label*)",93957340983888,93957340984205],["bool v8::internal::wasm::liftoff::EmitSatTruncateFloatToInt<int, double>(v8::internal::wasm::LiftoffAssembler*, v8::internal::Register, v8::internal::XMMRegister)",93957340985744,93957340986372],["bool v8::internal::wasm::liftoff::EmitTruncateFloatToInt<long, double>(v8::internal::wasm::LiftoffAssembler*, v8::internal::Register, v8::internal::XMMRegister, v8::internal::Label*)",93957340987344,93957340987661],["bool v8::internal::wasm::liftoff::EmitSatTruncateFloatToUInt64<float>(v8::internal::wasm::LiftoffAssembler*, v8::internal::Register, v8::internal::XMMRegister)",93957340988256,93957340988630],["bool v8::internal::wasm::liftoff::EmitSatTruncateFloatToUInt64<double>(v8::internal::wasm::LiftoffAssembler*, v8::internal::Register, v8::internal::XMMRegister)",93957340989296,93957340989695],["void v8::internal::Assembler::orq<v8::internal::Register, v8::internal::Register>(v8::internal::Register, v8::internal::Register)",93957340989792,93957340989817],["v8::internal::(anonymous namespace)::(anonymous namespace)::GetInstancePrototype(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>)",93957335352736,93957335353379],["v8::V8::SetSnapshotDataBlob(v8::StartupData*)",93957335357056,93957335357066],["v8::Isolate::Dispose()",93957335357696,93957335357820],["v8::(anonymous namespace)::ConvertSerializedObjectsToFixedArray(v8::Local<v8::Context>)",93957335360256,93957335360634],["v8::RegisteredExtension::UnregisterAll()",93957335360992,93957335361083],["v8::Extension::Extension(char const*, char const*, int, char const**, int)",93957335361136,93957335361313],["v8::V8::GlobalizeReference(v8::internal::Isolate*, unsigned long*)",93957335361424,93957335361598],["v8::V8::MakeWeak(unsigned long*, void*, void (*)(v8::WeakCallbackInfo<void> const&), v8::WeakCallbackType)",93957335361616,93957335361626],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::AddOutOfLineTrap(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmCode::RuntimeStubId, unsigned int)",93957340968112,93957340968875],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::TypeCheckMergeValues(v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::Control*, unsigned int, v8::internal::wasm::Merge<v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> >*)",93957340977952,93957340978183],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::Load64BitExceptionValue(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, unsigned int*, v8::internal::wasm::LiftoffRegList)",93957340982192,93957340982821],["v8::internal::wasm::LiftoffAssembler::emit_i32_sari(v8::internal::Register, v8::internal::Register, int)",93957340983152,93957340983228],["bool v8::internal::wasm::liftoff::EmitTruncateFloatToInt<unsigned int, float>(v8::internal::wasm::LiftoffAssembler*, v8::internal::Register, v8::internal::XMMRegister, v8::internal::Label*)",93957340983568,93957340983879],["bool v8::internal::wasm::liftoff::EmitTruncateFloatToInt<unsigned int, double>(v8::internal::wasm::LiftoffAssembler*, v8::internal::Register, v8::internal::XMMRegister, v8::internal::Label*)",93957340984208,93957340984544],["bool v8::internal::wasm::liftoff::EmitSatTruncateFloatToInt<unsigned int, float>(v8::internal::wasm::LiftoffAssembler*, v8::internal::Register, v8::internal::XMMRegister)",93957340985136,93957340985730],["bool v8::internal::wasm::liftoff::EmitSatTruncateFloatToInt<unsigned int, double>(v8::internal::wasm::LiftoffAssembler*, v8::internal::Register, v8::internal::XMMRegister)",93957340986384,93957340987028],["v8::internal::ApiNatives::InstantiateFunction(v8::internal::Handle<v8::internal::FunctionTemplateInfo>, v8::internal::MaybeHandle<v8::internal::Name>)",93957335346240,93957335346462],["v8::internal::(anonymous namespace)::DefineDataProperty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes)",93957335354544,93957335355092],["v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool)",93957335356816,93957335356943],["v8::Isolate::Enter()",93957335357264,93957335357274],["v8::Isolate::Exit()",93957335357680,93957335357690],["v8::SnapshotCreator::SetDefaultContext(v8::Local<v8::Context>, v8::SerializeInternalFieldsCallback)",93957335357824,93957335358098],["v8::SnapshotCreator::CreateBlob(v8::SnapshotCreator::FunctionCodeHandling)",93957335358128,93957335360244],["std::__1::vector<unsigned long, std::__1::allocator<unsigned long> >::push_back(unsigned long&&)",93957335360640,93957335360933],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeRefAsNonNull(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340944016,93957340944828],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::NotEnoughArgumentsError(int)",93957340971296,93957340971446],["v8::internal::wasm::LiftoffAssembler::PopToRegister(v8::internal::wasm::LiftoffRegList)",93957340977760,93957340977840],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::FallThruTo(v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::Control*)",93957340979312,93957340979500],["v8::internal::wasm::LiftoffAssembler::emit_type_conversion(v8::internal::wasm::WasmOpcode, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::Label*)",93957340980944,93957340982182],["v8::internal::wasm::LiftoffAssembler::emit_i32x4_splat(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister)",93957340982832,93957340982990],["v8::internal::wasm::LiftoffAssembler::emit_i32_or(v8::internal::Register, v8::internal::Register, v8::internal::Register)",93957340983072,93957340983152],["void v8::internal::Assembler::orl<v8::internal::Register, v8::internal::Register>(v8::internal::Register, v8::internal::Register)",93957340983232,93957340983257],["v8::internal::CustomArguments<v8::PropertyCallbackInfo<v8::Value> >::~CustomArguments()",93957335342144,93957335342189],["v8::internal::(anonymous namespace)::AddPropertyToPropertyList(v8::internal::Isolate*, v8::internal::Handle<v8::internal::TemplateInfo>, int, v8::internal::Handle<v8::internal::Object>*)",93957335350432,93957335350772],["v8::internal::LookupIterator::LookupIterator(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Name>, unsigned long, v8::internal::Handle<v8::internal::Object>, v8::internal::LookupIterator::Configuration)",93957335353920,93957335354336],["v8::internal::(anonymous namespace)::GetIntrinsic(v8::internal::Isolate*, v8::Intrinsic)",93957335355712,93957335355967],["v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool)",93957335356160,93957335356803],["v8::Utils::ReportApiFailure(char const*, char const*)",93957335356944,93957335357045],["v8::SnapshotCreator::SnapshotCreator(v8::Isolate*, long const*, v8::StartupData*)",93957335357072,93957335357259],["v8::Isolate::Allocate()",93957335357280,93957335357290],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32SExtendI8(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340941856,93957340941887],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeNumeric(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340946688,93957340962109],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::SetBlockType(v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::Control*, v8::internal::wasm::BlockTypeImmediate<(v8::internal::wasm::Decoder::ValidateFlag)1>&, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>*)",93957340970336,93957340970939],["v8::internal::wasm::WasmOpcodes::OpcodeName(v8::internal::wasm::WasmOpcode)",93957340971632,93957340976994],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::PopTypeError(int, v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1>, char const*)",93957340977568,93957340977749],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::TypeCheckFallThru()",93957340977840,93957340977943],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::TypeCheckUnreachableMerge(v8::internal::wasm::Merge<v8::internal::wasm::ValueBase<(v8::internal::wasm::Decoder::ValidateFlag)1> >&, bool, unsigned int)",93957340978192,93957340979300],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::GetExceptionProperty(v8::internal::wasm::LiftoffAssembler::VarState&, v8::internal::RootIndex)",93957340979504,93957340980549],["v8::Shell::RemoveDirectory(v8::FunctionCallbackInfo<v8::Value> const&)",93957335339712,93957335339897],["v8::internal::Relocatable::~Relocatable()",93957335342288,93957335342319],["v8::internal::(anonymous namespace)::InstantiateObject(v8::internal::Isolate*, v8::internal::Handle<v8::internal::ObjectTemplateInfo>, v8::internal::Handle<v8::internal::JSReceiver>, bool)",93957335346592,93957335350262],["v8::internal::ApiNatives::CreateApiFunction(v8::internal::Isolate*, v8::internal::Handle<v8::internal::NativeContext>, v8::internal::Handle<v8::internal::FunctionTemplateInfo>, v8::internal::Handle<v8::internal::Object>, v8::internal::InstanceType, v8::internal::MaybeHandle<v8::internal::Name>)",93957335351056,93957335352199],["v8::internal::(anonymous namespace)::CacheTemplateInstantiation(v8::internal::Isolate*, v8::internal::Handle<v8::internal::NativeContext>, int, v8::internal::(anonymous namespace)::CachingMode, v8::internal::Handle<v8::internal::JSObject>)",93957335353392,93957335353911],["v8::internal::(anonymous namespace)::AccessCheckDisableScope::AccessCheckDisableScope(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>)",93957335354336,93957335354535],["v8::internal::(anonymous namespace)::DefineAccessorProperty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes)",93957335355104,93957335355707],["v8::internal::(anonymous namespace)::AccessCheckDisableScope::~AccessCheckDisableScope()",93957335355968,93957335356136],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF64UConvertI32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340941600,93957340941631],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64SExtendI32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340941984,93957340942015],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeRefEq(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340946192,93957340946465],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeAtomic(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340966432,93957340968022],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::PushControl(v8::internal::wasm::ControlKind, unsigned int, unsigned int)",93957340968880,93957340970328],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::EnsureStackArguments_Slow(int, unsigned int)",93957340970944,93957340971295],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::SafeOpcodeNameAt(unsigned char const*)",93957340971456,93957340971626],["unsigned int v8::internal::wasm::Decoder::read_leb_slowpath<unsigned int, (v8::internal::wasm::Decoder::ValidateFlag)2, (v8::internal::wasm::Decoder::TraceFlag)0, 32ul>(unsigned char const*, unsigned int*, char const*)",93957340977008,93957340977393],["v8::ExecSubprocess(int*, int*, v8::ExecArgs const&)",93957335336144,93957335336311],["v8::Shell::AddOSMethods(v8::Isolate*, v8::Local<v8::ObjectTemplate>)",93957335341056,93957335341804],["v8::internal::CustomArguments<v8::PropertyCallbackInfo<v8::Value> >::IterateInstance(v8::internal::RootVisitor*)",93957335342224,93957335342256],["v8::internal::ApiNatives::InstantiateFunction(v8::internal::Isolate*, v8::internal::Handle<v8::internal::NativeContext>, v8::internal::Handle<v8::internal::FunctionTemplateInfo>, v8::internal::MaybeHandle<v8::internal::Name>)",93957335342368,93957335342495],["v8::internal::ApiNatives::InstantiateObject(v8::internal::Isolate*, v8::internal::Handle<v8::internal::ObjectTemplateInfo>, v8::internal::Handle<v8::internal::JSReceiver>)",93957335346464,93957335346583],["v8::internal::ApiNatives::AddDataProperty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::TemplateInfo>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes)",93957335350272,93957335350421],["v8::internal::ApiNatives::AddNativeDataProperty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::TemplateInfo>, v8::internal::Handle<v8::internal::AccessorInfo>)",93957335350784,93957335351050],["v8::internal::(anonymous namespace)::ProbeInstantiationsCache(v8::internal::Isolate*, v8::internal::Handle<v8::internal::NativeContext>, int, v8::internal::(anonymous namespace)::CachingMode)",93957335352208,93957335352721],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64SConvertF64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340941344,93957340941375],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32ReinterpretF32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340941728,93957340941759],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64SExtendI8(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340941920,93957340941951],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeRefIsNull(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340942576,93957340943214],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeBrOnNull(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340944832,93957340946188],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeGC(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340946480,93957340946677],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeSimd(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340962112,93957340966420],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::Trap(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::TrapReason)",93957340968032,93957340968102],["v8::SerializationData::~SerializationData()",93957335331984,93957335332378],["v8::Shell::ChangeDirectory(v8::FunctionCallbackInfo<v8::Value> const&)",93957335338560,93957335338810],["v8::Shell::UnsetEnvironment(v8::FunctionCallbackInfo<v8::Value> const&)",93957335340192,93957335340377],["v8::internal::PropertyCallbackArguments::PropertyCallbackArguments(v8::internal::Isolate*, v8::internal::Object, v8::internal::Object, v8::internal::JSObject, v8::Maybe<v8::internal::ShouldThrow>)",93957335341936,93957335342042],["v8::internal::Relocatable::~Relocatable()",93957335342192,93957335342217],["v8::internal::CustomArguments<v8::FunctionCallbackInfo<v8::Value> >::IterateInstance(v8::internal::RootVisitor*)",93957335342256,93957335342288],["v8::internal::CustomArguments<v8::FunctionCallbackInfo<v8::Value> >::~CustomArguments()",93957335342320,93957335342365],["v8::internal::(anonymous namespace)::InstantiateFunction(v8::internal::Isolate*, v8::internal::Handle<v8::internal::NativeContext>, v8::internal::Handle<v8::internal::FunctionTemplateInfo>, v8::internal::MaybeHandle<v8::internal::Name>)",93957335342496,93957335346236],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32SConvertF32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340941088,93957340941119],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF32SConvertI64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340941472,93957340941503],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF64UConvertI64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340941664,93957340941695],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF32ReinterpretI32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340941792,93957340941823],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32SExtendI16(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340941888,93957340941919],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64SExtendI16(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340941952,93957340941983],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeRefNull(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340942016,93957340942565],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeRefFunc(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340943216,93957340944011],["void std::__1::__sort<std::__1::__less<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*> >&, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>*>(std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>*, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>*, std::__1::__less<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*> >&)",93957335322480,93957335325958],["std::__1::__hash_table<std::__1::shared_ptr<v8::Worker>, std::__1::hash<std::__1::shared_ptr<v8::Worker> >, std::__1::equal_to<std::__1::shared_ptr<v8::Worker> >, std::__1::allocator<std::__1::shared_ptr<v8::Worker> > >::swap(std::__1::__hash_table<std::__1::shared_ptr<v8::Worker>, std::__1::hash<std::__1::shared_ptr<v8::Worker> >, std::__1::equal_to<std::__1::shared_ptr<v8::Worker> >, std::__1::allocator<std::__1::shared_ptr<v8::Worker> > >&)",93957335333936,93957335334239],["v8::GetStdout(v8::Isolate*, int, timeval const&, int, int)",93957335336464,93957335337697],["v8::Shell::MakeDirectory(v8::FunctionCallbackInfo<v8::Value> const&)",93957335339072,93957335339445],["v8::Shell::SetEnvironment(v8::FunctionCallbackInfo<v8::Value> const&)",93957335339904,93957335340177],["v8::Shell::ReadCharsFromTcpPort(char const*, int*)",93957335340384,93957335341041],["v8::CheckItsADirectory(v8::Isolate*, char*)",93957335341808,93957335341934],["v8::internal::FunctionCallbackArguments::FunctionCallbackArguments(v8::internal::Isolate*, v8::internal::Object, v8::internal::HeapObject, v8::internal::Object, v8::internal::HeapObject, unsigned long*, int)",93957335342048,93957335342143],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF64Add(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340940720,93957340940757],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64SConvertI32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340941216,93957340941247],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF32SConvertI32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340941408,93957340941439],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF32ConvertF64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340941536,93957340941567],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF64SConvertI64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340941632,93957340941663],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF64ConvertF32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340941696,93957340941727],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64ReinterpretF64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340941760,93957340941791],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF64ReinterpretI64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340941824,93957340941855],["std::__1::__shared_ptr_emplace<v8::Worker, std::__1::allocator<v8::Worker> >::~__shared_ptr_emplace()",93957335318784,93957335318804],["void std::__1::__insertion_sort_3<std::__1::__less<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*> >&, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>*>(std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>*, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>*, std::__1::__less<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*> >&)",93957335329248,93957335329981],["v8::platform::MessageLoopBehavior std::__1::__function::__policy_invoker<v8::platform::MessageLoopBehavior ()>::__call_impl<std::__1::__function::__default_alloc_func<v8::Shell::CompleteMessageLoop(v8::Isolate*)::$_2, v8::platform::MessageLoopBehavior ()> >(std::__1::__function::__policy_storage const*)",93957335332400,93957335333029],["v8::Shell::System(v8::FunctionCallbackInfo<v8::Value> const&)",93957335334592,93957335335627],["v8::ChildLaunchedOK(v8::Isolate*, int*)",93957335336320,93957335336459],["v8::WaitForChild(v8::Isolate*, int, v8::ZombieProtector&, timeval const&, int, int)",93957335337712,93957335338560],["v8::Shell::SetUMask(v8::FunctionCallbackInfo<v8::Value> const&)",93957335338816,93957335339058],["v8::mkdirp(v8::Isolate*, char*, unsigned int)",93957335339456,93957335339709],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF32CopySign(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340940448,93957340940485],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF64Min(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340940912,93957340940949],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32SConvertF64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340941152,93957340941183],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64SConvertF32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340941280,93957340941311],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64UConvertF64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340941376,93957340941407],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF32UConvertI32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340941440,93957340941471],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF32UConvertI64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340941504,93957340941535],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF64SConvertI32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340941568,93957340941599],["v8::StreamingCompileTask::~StreamingCompileTask()",93957335316800,93957335316842],["std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, int>, void*>*> std::__1::__hash_table<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, int>, std::__1::__unordered_map_hasher<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, int>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::__unordered_map_equal<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, int>, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::allocator<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, int> > >::find<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)",93957335318960,93957335319667],["unsigned int std::__1::__sort4<std::__1::__less<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*> >&, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>*>(std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>*, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>*, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>*, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>*, std::__1::__less<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*> >&)",93957335327360,93957335328162],["std::__1::__shared_ptr_pointer<v8::BackingStore*, std::__1::default_delete<v8::BackingStore>, std::__1::allocator<v8::BackingStore> >::__on_zero_shared()",93957335331152,93957335331196],["icu_68::WholeStringBreakIterator::adoptText(icu_68::CharacterIterator*)",93957335332384,93957335332393],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::shared_ptr<v8::Worker>, void*>*>, bool> std::__1::__hash_table<std::__1::shared_ptr<v8::Worker>, std::__1::hash<std::__1::shared_ptr<v8::Worker> >, std::__1::equal_to<std::__1::shared_ptr<v8::Worker> >, std::__1::allocator<std::__1::shared_ptr<v8::Worker> > >::__emplace_unique_key_args<std::__1::shared_ptr<v8::Worker>, std::__1::shared_ptr<v8::Worker> const&>(std::__1::shared_ptr<v8::Worker> const&, std::__1::shared_ptr<v8::Worker> const&)",93957335333040,93957335333926],["_GLOBAL__sub_I_d8.cc",93957335334240,93957335334592],["v8::ExecArgs::Init(v8::Isolate*, v8::Local<v8::Value>, v8::Local<v8::Array>)",93957335335632,93957335336134],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF32NearestInt(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340940096,93957340940127],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF64Floor(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340940592,93957340940623],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF64Mul(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340940816,93957340940853],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF64CopySign(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340941008,93957340941045],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32UConvertF32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340941120,93957340941151],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32UConvertF64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340941184,93957340941215],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64UConvertI32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340941248,93957340941279],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64UConvertF32(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340941312,93957340941343],["std::__1::__tree<int, std::__1::less<int>, std::__1::allocator<int> >::destroy(std::__1::__tree_node<int, void*>*)",93957335315968,93957335316019],["std::__1::pair<std::__1::__tree_iterator<std::__1::__value_type<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::ModuleType>, v8::Global<v8::Module> >, std::__1::__tree_node<std::__1::__value_type<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::ModuleType>, v8::Global<v8::Module> >, void*>*, long>, bool> std::__1::__tree<std::__1::__value_type<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::ModuleType>, v8::Global<v8::Module> >, std::__1::__map_value_compare<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::ModuleType>, std::__1::__value_type<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::ModuleType>, v8::Global<v8::Module> >, std::__1::less<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::ModuleType> >, true>, std::__1::allocator<std::__1::__value_type<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::ModuleType>, v8::Global<v8::Module> > > >::__emplace_unique_key_args<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::ModuleType>, std::__1::pair<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::ModuleType>, v8::Global<v8::Module> > >(std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::ModuleType> const&, std::__1::pair<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::ModuleType>, v8::Global<v8::Module> >&&)",93957335317072,93957335317291],["std::__1::__shared_ptr_emplace<v8::Worker, std::__1::allocator<v8::Worker> >::__on_zero_shared()",93957335318864,93957335318878],["std::__1::__hash_table<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::rehash(unsigned long)",93957335320896,93957335321267],["unsigned int std::__1::__sort3<std::__1::__less<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*> >&, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>*>(std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>*, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>*, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>*, std::__1::__less<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*> >&)",93957335325968,93957335327352],["unsigned int std::__1::__sort5<std::__1::__less<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*> >&, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>*>(std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>*, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>*, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>*, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>*, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>*, std::__1::__less<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*> >&)",93957335328176,93957335329242],["bool std::__1::__insertion_sort_incomplete<std::__1::__less<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*> >&, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>*>(std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>*, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>*, std::__1::__less<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*> >&)",93957335329984,93957335331147],["void std::__1::vector<std::__1::unique_ptr<v8::SerializationData, std::__1::default_delete<v8::SerializationData> >, std::__1::allocator<std::__1::unique_ptr<v8::SerializationData, std::__1::default_delete<v8::SerializationData> > > >::__push_back_slow_path<std::__1::unique_ptr<v8::SerializationData, std::__1::default_delete<v8::SerializationData> > >(std::__1::unique_ptr<v8::SerializationData, std::__1::default_delete<v8::SerializationData> >&&)",93957335331200,93957335331971],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64ShrU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340939792,93957340939829],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF32Mul(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340940256,93957340940293],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF64Neg(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340940528,93957340940559],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF64NearestInt(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340940656,93957340940687],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF64Sub(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340940768,93957340940805],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF64Div(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340940864,93957340940901],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF64Max(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340940960,93957340940997],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32ConvertI64(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340941056,93957340941087],["std::__1::pair<std::__1::__tree_iterator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<v8::ScriptCompiler::CachedData, std::__1::default_delete<v8::ScriptCompiler::CachedData> > >, std::__1::__tree_node<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<v8::ScriptCompiler::CachedData, std::__1::default_delete<v8::ScriptCompiler::CachedData> > >, void*>*, long>, bool> std::__1::__tree<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<v8::ScriptCompiler::CachedData, std::__1::default_delete<v8::ScriptCompiler::CachedData> > >, std::__1::__map_value_compare<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<v8::ScriptCompiler::CachedData, std::__1::default_delete<v8::ScriptCompiler::CachedData> > >, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::allocator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<v8::ScriptCompiler::CachedData, std::__1::default_delete<v8::ScriptCompiler::CachedData> > > > >::__emplace_unique_key_args<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::piecewise_construct_t const&, std::__1::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&>, std::__1::tuple<> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::piecewise_construct_t const&, std::__1::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&>&&, std::__1::tuple<>&&)",93957335316176,93957335316639],["v8::StreamingCompileTask::Run()",93957335316912,93957335317041],["void std::__1::vector<std::__1::tuple<v8::Global<v8::Promise>, v8::Global<v8::Message>, v8::Global<v8::Value> >, std::__1::allocator<std::__1::tuple<v8::Global<v8::Promise>, v8::Global<v8::Message>, v8::Global<v8::Value> > > >::__emplace_back_slow_path<v8::Global<v8::Promise>, v8::Global<v8::Message>, v8::Global<v8::Value> >(v8::Global<v8::Promise>&&, v8::Global<v8::Message>&&, v8::Global<v8::Value>&&)",93957335317776,93957335318493],["std::__1::__shared_ptr_emplace<v8::Worker, std::__1::allocator<v8::Worker> >::~__shared_ptr_emplace()",93957335318816,93957335318854],["v8::internal::Managed<icu_68::PluralRules>::Destructor(void*)",93957335318880,93957335318952],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>, std::__1::__unordered_map_hasher<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::__unordered_map_equal<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*>, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::allocator<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Counter*> > >::__emplace_unique_key_args<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::piecewise_construct_t const&, std::__1::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&>, std::__1::tuple<> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::piecewise_construct_t const&, std::__1::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&>&&, std::__1::tuple<>&&)",93957335319680,93957335320896],["std::__1::__hash_table<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::__rehash(unsigned long)",93957335321280,93957335322469],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64DivU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340939408,93957340939445],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF32Neg(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340939968,93957340939999],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF32Add(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340940160,93957340940197],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF32Min(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340940352,93957340940389],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF64Abs(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340940496,93957340940527],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF64Ceil(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340940560,93957340940591],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF64Trunc(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340940624,93957340940655],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF64Sqrt(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340940688,93957340940719],["v8::base::LazyInstanceImpl<v8::base::Mutex, v8::base::StaticallyAllocatedInstanceTrait<v8::base::Mutex>, v8::base::DefaultConstructTrait<v8::base::Mutex>, v8::base::ThreadSafeInitOnceTrait, v8::base::LeakyInstanceTrait<v8::base::Mutex> >::InitInstance(void*)",93957335316144,93957335316154],["v8::DummySourceStream::~DummySourceStream()",93957335316688,93957335316743],["v8::StreamingCompileTask::~StreamingCompileTask()",93957335316848,93957335316903],["v8::StreamingCompileTask::FinishTask::Run()",93957335317056,93957335317070],["std::__1::__tree_node_base<void*>*& std::__1::__tree<std::__1::__value_type<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::ModuleType>, v8::Global<v8::Module> >, std::__1::__map_value_compare<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::ModuleType>, std::__1::__value_type<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::ModuleType>, v8::Global<v8::Module> >, std::__1::less<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::ModuleType> >, true>, std::__1::allocator<std::__1::__value_type<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::ModuleType>, v8::Global<v8::Module> > > >::__find_equal<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::ModuleType> >(std::__1::__tree_end_node<std::__1::__tree_node_base<void*>*>*&, std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::ModuleType> const&)",93957335317296,93957335317764],["std::__1::shared_ptr<v8::Worker> std::__1::allocate_shared<v8::Worker, std::__1::allocator<v8::Worker>, char*, void>(std::__1::allocator<v8::Worker> const&, char*&&)",93957335318496,93957335318780],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32Ror(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340939072,93957340939109],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64Ior(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340939600,93957340939637],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64Ror(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340939888,93957340939925],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF32Floor(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340940032,93957340940063],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF32Sqrt(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340940128,93957340940159],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF32Sub(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340940208,93957340940245],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF32Div(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340940304,93957340940341],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF32Max(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340940400,93957340940437],["std::__1::__tree<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<v8::ScriptCompiler::CachedData, std::__1::default_delete<v8::ScriptCompiler::CachedData> > >, std::__1::__map_value_compare<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<v8::ScriptCompiler::CachedData, std::__1::default_delete<v8::ScriptCompiler::CachedData> > >, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::allocator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<v8::ScriptCompiler::CachedData, std::__1::default_delete<v8::ScriptCompiler::CachedData> > > > >::destroy(std::__1::__tree_node<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<v8::ScriptCompiler::CachedData, std::__1::default_delete<v8::ScriptCompiler::CachedData> > >, void*>*)",93957335316032,93957335316131],["void std::__1::__function::__policy_invoker<void ()>::__call_impl<std::__1::__function::__default_alloc_func<v8::base::CallOnce<v8::StartupData>(std::__1::atomic<unsigned char>*, v8::base::OneArgFunction<v8::StartupData*>::type, v8::StartupData*)::{lambda()#1}, void ()> >(std::__1::__function::__policy_storage const*)",93957335316160,93957335316174],["v8::DummySourceStream::~DummySourceStream()",93957335316640,93957335316682],["v8::DummySourceStream::GetMoreData(unsigned char const**)",93957335316752,93957335316791],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32RemU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340938688,93957340938725],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64Add(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340939216,93957340939253],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64RemU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340939504,93957340939541],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64Shl(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340939696,93957340939733],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64Rol(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340939840,93957340939877],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF32Abs(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340939936,93957340939967],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF32Ceil(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340940000,93957340940031],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF32Trunc(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340940064,93957340940095],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32Ctz(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340938336,93957340938367],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32Shl(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340938880,93957340938917],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64Ctz(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340939152,93957340939183],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64Mul(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340939312,93957340939349],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64RemS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340939456,93957340939493],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64And(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340939552,93957340939589],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64Xor(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340939648,93957340939685],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64ShrS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340939744,93957340939781],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF32Ge(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340937968,93957340938005],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32Mul(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340938496,93957340938533],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32Ior(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340938784,93957340938821],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32ShrU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340938976,93957340939013],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64Clz(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340939120,93957340939151],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64Popcnt(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340939184,93957340939215],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64Sub(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340939264,93957340939301],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64DivS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340939360,93957340939397],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64LeU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340937584,93957340937621],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF64Gt(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340938160,93957340938197],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32Add(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340938400,93957340938437],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32DivU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340938592,93957340938629],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32And(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340938736,93957340938773],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32Xor(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340938832,93957340938869],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32ShrS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340938928,93957340938965],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32Rol(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340939024,93957340939061],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64Eqz(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340937216,93957340937247],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF32Ne(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340937776,93957340937813],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF64Ne(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340938064,93957340938101],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF64Ge(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340938256,93957340938293],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32Popcnt(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340938368,93957340938399],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32Sub(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340938448,93957340938485],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32DivS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340938544,93957340938581],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32RemS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340938640,93957340938677],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32LtS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340936832,93957340936869],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64LtU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340937392,93957340937429],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64GeU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340937680,93957340937717],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF32Gt(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340937872,93957340937909],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF64Eq(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340938016,93957340938053],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF64Lt(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340938112,93957340938149],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF64Le(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340938208,93957340938245],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32Clz(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340938304,93957340938335],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeMemorySize(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340933088,93957340933871],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32LeS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340937024,93957340937061],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64Ne(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340937296,93957340937333],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64GtU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340937488,93957340937525],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64GeS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340937632,93957340937669],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF32Eq(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340937728,93957340937765],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF32Lt(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340937824,93957340937861],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF32Le(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340937920,93957340937957],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeLocalSet(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340926016,93957340926457],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF64Const(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340936304,93957340936700],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32GtS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340936928,93957340936965],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32GeS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340937120,93957340937157],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64Eq(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340937248,93957340937285],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64LtS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340937344,93957340937381],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64GtS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340937440,93957340937477],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64LeS(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340937536,93957340937573],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeNopForTestingUnsupportedInLiftoff(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340921200,93957340921213],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeTableGet(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340930496,93957340931763],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI64Const(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340935360,93957340935900],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32Eq(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340936736,93957340936773],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32LtU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340936880,93957340936917],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32GtU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340936976,93957340937013],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32LeU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340937072,93957340937109],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32GeU(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340937168,93957340937205],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeBrTable(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340910096,93957340913336],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeDrop(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340924112,93957340924334],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeGlobalGet(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340926928,93957340928875],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeLoadMem(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340933024,93957340933054],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeMemoryGrow(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340933872,93957340935349],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeF32Const(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340935904,93957340936300],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32Eqz(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340936704,93957340936735],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32Ne(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340936784,93957340936821],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeTry(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340899120,93957340900355],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeReturnCall(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340916928,93957340917695],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeDelegate(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340922688,93957340923703],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeSelectWithType(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340924976,93957340925883],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeLocalTee(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340926464,93957340926920],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeGlobalSet(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340928880,93957340930484],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeTableSet(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340931776,93957340933017],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeStoreMem(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340933056,93957340933086],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::EmitDebuggingInfo(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340892432,93957340894066],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeUnwind(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340906912,93957340907288],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeCallFunction(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340914224,93957340915352],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeCallRef(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340918944,93957340920311],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeLet(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340921216,93957340922682],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeCatchAll(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340923712,93957340924099],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeSelect(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340924336,93957340924965],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeUnknownOrAsmJs(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340925888,93957340926013],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::OutOfLineSafepointInfo* v8::internal::Zone::New<v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::OutOfLineSafepointInfo, v8::internal::Zone*&>(v8::internal::Zone*&)",93957340888864,93957340888945],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeBlock(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340895136,93957340896030],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeThrow(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340903552,93957340906611],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeBr(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340908464,93957340908834],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeReturn(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340913344,93957340914222],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeCallIndirect(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340915360,93957340916928],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeReturnCallIndirect(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340917696,93957340918929],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeReturnCallRef(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340920320,93957340921187],["v8::internal::wasm::LiftoffAssembler::Store(v8::internal::Register, v8::internal::Register, unsigned long, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::StoreType, v8::internal::wasm::LiftoffRegList, unsigned int*, bool)",93957340887072,93957340887434],["v8::internal::wasm::(anonymous namespace)::DebugSideTableBuilder::GetChangedStackValues(std::__1::vector<v8::internal::wasm::DebugSideTable::Entry::Value, std::__1::allocator<v8::internal::wasm::DebugSideTable::Entry::Value> >&, v8::internal::Vector<v8::internal::wasm::DebugSideTable::Entry::Value>)",93957340891520,93957340891857],["int v8::internal::wasm::Decoder::read_leb_slowpath<int, (v8::internal::wasm::Decoder::ValidateFlag)1, (v8::internal::wasm::Decoder::TraceFlag)0, 32ul>(unsigned char const*, unsigned int*, char const*)",93957340894608,93957340894999],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeIf(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340897024,93957340898570],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeCatch(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340900368,93957340903540],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeRethrow(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340906624,93957340906900],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeEnd(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340907296,93957340908457],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeBrIf(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340908848,93957340910096],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeLocalGet(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340882992,93957340883630],["v8::internal::wasm::LiftoffAssembler::PushRegister(v8::internal::wasm::ValueKind, v8::internal::wasm::LiftoffRegister)",93957340888096,93957340888278],["v8::internal::wasm::(anonymous namespace)::DebugSideTableBuilder::NewOOLEntry(v8::internal::Vector<v8::internal::wasm::DebugSideTable::Entry::Value>)",93957340889984,93957340890105],["void v8::internal::Assembler::andl<v8::internal::Register, v8::internal::Register>(v8::internal::Register, v8::internal::Register)",93957340892192,93957340892217],["v8::internal::wasm::(anonymous namespace)::DebugSideTableBuilder::NewEntry(int, v8::internal::Vector<v8::internal::wasm::DebugSideTable::Entry::Value>)",93957340894080,93957340894599],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeUnreachable(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340895008,93957340895133],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeLoop(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340896032,93957340897022],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeElse(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340898576,93957340899111],["v8::internal::wasm::Decoder::MarkError()",93957340880960,93957340881084],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::LoadNullValue(v8::internal::Register, v8::internal::wasm::LiftoffRegList)",93957340884528,93957340884894],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::MaybeBailoutForUnsupportedType(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::ValueKind, char const*)",93957340887520,93957340887938],["void v8::internal::Assembler::xorl<v8::internal::Register, v8::internal::Register>(v8::internal::Register, v8::internal::Register)",93957340888384,93957340888409],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::GetSpilledRegistersForInspection()",93957340888960,93957340889979],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::GetCurrentDebugSideTableEntries(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::(anonymous namespace)::DebugSideTableBuilder::AssumeSpilling)",93957340890112,93957340891506],["std::__1::vector<v8::internal::wasm::DebugSideTable::Entry::Value, std::__1::allocator<v8::internal::wasm::DebugSideTable::Entry::Value> >::__append(unsigned long)",93957340891872,93957340892185],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::GrowStackSpace(int)",93957340892224,93957340892427],["v8::internal::wasm::Decoder::~Decoder()",93957340873616,93957340873648],["v8::internal::wasm::Decoder::errorf(unsigned int, char const*, ...)",93957340881824,93957340881949],["v8::internal::wasm::LiftoffAssembler::FillStackSlotsWithZero(int, int)",93957340883872,93957340884360],["v8::internal::wasm::LiftoffAssembler::Load(v8::internal::wasm::LiftoffRegister, v8::internal::Register, v8::internal::Register, unsigned long, v8::internal::wasm::LoadType, v8::internal::wasm::LiftoffRegList, unsigned int*, bool)",93957340886288,93957340886802],["v8::internal::wasm::LiftoffAssembler::emit_i32_and(v8::internal::Register, v8::internal::Register, v8::internal::Register)",93957340887440,93957340887520],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::unsupported(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::LiftoffBailoutReason, char const*)",93957340887952,93957340888094],["v8::internal::wasm::LiftoffAssembler::GetUnusedRegister(v8::internal::wasm::LiftoffRegList)",93957340888288,93957340888384],["v8::internal::wasm::liftoff::GetMemOp(v8::internal::wasm::LiftoffAssembler*, v8::internal::Register, v8::internal::Register, unsigned long)",93957340888416,93957340888855],["v8::internal::wasm::(anonymous namespace)::DebugSideTableBuilder::~DebugSideTableBuilder()",93957340872096,93957340872336],["_ZNSt3__16vectorIN2v88internal4wasm9ValueTypeENS2_13ZoneAllocatorIS4_EEE6assignIPKS4_EENS_9enable_ifIXaasr27__is_cpp17_forward_iteratorIT_EE5valuesr16is_constructibleIS4_NS_15iterator_traitsISC_E9referenceEEE5valueEvE4typeESC_SC_",93957340875776,93957340876941],["v8::internal::wasm::HeapType v8::internal::wasm::value_type_reader::read_heap_type<(v8::internal::wasm::Decoder::ValidateFlag)1>(v8::internal::wasm::Decoder*, unsigned char const*, unsigned int*, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmFeatures const&)",93957340881296,93957340881777],["long v8::internal::wasm::Decoder::read_leb_slowpath<long, (v8::internal::wasm::Decoder::ValidateFlag)1, (v8::internal::wasm::Decoder::TraceFlag)0, 33ul>(unsigned char const*, unsigned int*, char const*)",93957340882432,93957340882847],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::DecodeI32Const(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, v8::internal::wasm::WasmOpcode)",93957340883632,93957340883857],["v8::internal::wasm::LiftoffAssembler::PushConstant(v8::internal::wasm::ValueKind, int)",93957340884368,93957340884519],["v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::StackCheck(v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>*, int)",93957340884896,93957340886282],["v8::internal::wasm::LiftoffAssembler::emit_i32_addi(v8::internal::Register, v8::internal::Register, int)",93957340886816,93957340887060],["v8::base::SmallVector<v8::internal::wasm::LiftoffAssembler::VarState, 8ul>::Grow()",93957340857360,93957340857372],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::onFirstError()",93957340873264,93957340873303],["v8::internal::wasm::WasmDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1>::DecodeLocals(unsigned char const*, unsigned int*, v8::base::Optional<unsigned int>)",93957340873696,93957340874268],["std::__1::vector<v8::internal::wasm::ValueType, v8::internal::ZoneAllocator<v8::internal::wasm::ValueType> >::insert(std::__1::__wrap_iter<v8::internal::wasm::ValueType const*>, unsigned long, v8::internal::wasm::ValueType const&)",93957340877776,93957340880653],["v8::internal::wasm::WasmError::WasmError(unsigned int, char const*, ...)",93957340881088,93957340881292],["v8::internal::wasm::Decoder::error(unsigned char const*, char const*)",93957340881792,93957340881820],["v8::internal::wasm::Decoder::verrorf(unsigned int, char const*, __va_list_tag*)",93957340881952,93957340882422],["v8::internal::wasm::Decoder::errorf(unsigned char const*, char const*, ...)",93957340882848,93957340882979],["v8::internal::wasm::LiftoffAssembler::set_num_locals(unsigned int)",93957340851680,93957340851721],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::Decode()",93957340860288,93957340869697],["void std::__1::vector<v8::internal::wasm::DebugSideTable::Entry, std::__1::allocator<v8::internal::wasm::DebugSideTable::Entry> >::__push_back_slow_path<v8::internal::wasm::DebugSideTable::Entry>(v8::internal::wasm::DebugSideTable::Entry&&)",93957340872624,93957340873062],["v8::internal::wasm::WasmDecoder<(v8::internal::wasm::Decoder::ValidateFlag)0>::~WasmDecoder()",93957340873504,93957340873549],["v8::internal::wasm::BytecodeIterator::~BytecodeIterator()",93957340873648,93957340873696],["v8::internal::wasm::ValueType::name() const",93957340874272,93957340875772],["v8::internal::wasm::ValueType v8::internal::wasm::value_type_reader::read_value_type<(v8::internal::wasm::Decoder::ValidateFlag)1>(v8::internal::wasm::Decoder*, unsigned char const*, unsigned int*, v8::internal::wasm::WasmModule const*, v8::internal::wasm::WasmFeatures const&)",93957340876944,93957340877775],["unsigned int v8::internal::wasm::Decoder::read_leb_slowpath<unsigned int, (v8::internal::wasm::Decoder::ValidateFlag)1, (v8::internal::wasm::Decoder::TraceFlag)0, 32ul>(unsigned char const*, unsigned int*, char const*)",93957340880656,93957340880949],["v8::internal::wasm::LiftoffAssembler::PrepareBuiltinCall(v8::internal::Signature<v8::internal::wasm::ValueKind> const*, v8::internal::compiler::CallDescriptor*, std::initializer_list<v8::internal::wasm::LiftoffAssembler::VarState>)",93957340845152,93957340845706],["v8::internal::wasm::liftoff::push(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::ValueKind, int)",93957340852272,93957340852658],["v8::internal::wasm::liftoff::Store(v8::internal::wasm::LiftoffAssembler*, v8::internal::Operand, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::ValueKind)",93957340857552,93957340857794],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::~WasmFullDecoder()",93957340870368,93957340870548],["std::__1::vector<v8::internal::wasm::DebugSideTable::Entry, std::__1::allocator<v8::internal::wasm::DebugSideTable::Entry> >::reserve(unsigned long)",93957340872336,93957340872622],["v8::internal::wasm::WasmFullDecoder<(v8::internal::wasm::Decoder::ValidateFlag)1, v8::internal::wasm::(anonymous namespace)::LiftoffCompiler>::~WasmFullDecoder()",93957340873072,93957340873253],["std::__1::__vector_base<v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::Control, v8::internal::ZoneAllocator<v8::internal::wasm::(anonymous namespace)::LiftoffCompiler::Control> >::clear()",93957340873312,93957340873503],["v8::internal::wasm::WasmDecoder<(v8::internal::wasm::Decoder::ValidateFlag)0>::~WasmDecoder()",93957340873552,93957340873613],["v8::internal::wasm::LiftoffAssembler::Spill(int, v8::internal::wasm::WasmValue)",93957340840256,93957340840526],["v8::internal::wasm::LiftoffAssembler::PrepareCall(v8::internal::Signature<v8::internal::wasm::ValueKind> const*, v8::internal::compiler::CallDescriptor*, v8::internal::Register*, v8::internal::Register*)",93957340848256,93957340849217],["v8::internal::ZoneChunkList<int>::push_back(int const&)",93957340851744,93957340852018],["unsigned int std::__1::__sort4<v8::internal::wasm::LiftoffStackSlots::SortInPushOrder()::{lambda(v8::internal::wasm::LiftoffStackSlots::Slot const&, v8::internal::wasm::LiftoffStackSlots::Slot const&)#1}&, v8::internal::wasm::LiftoffStackSlots::Slot*>(v8::internal::wasm::LiftoffStackSlots::Slot*, v8::internal::wasm::LiftoffStackSlots::Slot*, v8::internal::wasm::LiftoffStackSlots::Slot*, v8::internal::wasm::LiftoffStackSlots::Slot*, v8::internal::wasm::LiftoffStackSlots::SortInPushOrder()::{lambda(v8::internal::wasm::LiftoffStackSlots::Slot const&, v8::internal::wasm::LiftoffStackSlots::Slot const&)#1}&)",93957340855648,93957340856134],["v8::base::SmallVector<v8::internal::wasm::LiftoffAssembler::VarState, 8ul>::Grow(unsigned long)",93957340857376,93957340857537],["v8::internal::wasm::ExecuteLiftoffCompilation(v8::internal::AccountingAllocator*, v8::internal::wasm::CompilationEnv*, v8::internal::wasm::FunctionBody const&, int, v8::internal::wasm::ForDebugging, v8::internal::Counters*, v8::internal::wasm::WasmFeatures*, v8::internal::Vector<int const>, std::__1::unique_ptr<v8::internal::wasm::DebugSideTable, std::__1::default_delete<v8::internal::wasm::DebugSideTable> >*, int)",93957340857808,93957340860280],["v8::internal::wasm::(anonymous namespace)::DebugSideTableBuilder::GenerateDebugSideTable()",93957340869712,93957340870365],["v8::internal::wasm::GenerateLiftoffDebugSideTable(v8::internal::wasm::WasmCode const*)",93957340870560,93957340872088],["v8::internal::wasm::LiftoffAssembler::~LiftoffAssembler()",93957340837664,93957340837692],["v8::internal::wasm::LiftoffAssembler::SpillLocals()",93957340843824,93957340844133],["v8::internal::wasm::LiftoffStackSlots::Construct(int)",93957340846352,93957340847061],["v8::internal::wasm::LiftoffAssembler::MoveToReturnLocations(v8::internal::Signature<v8::internal::wasm::ValueType> const*, v8::internal::compiler::CallDescriptor*)",93957340849968,93957340851419],["v8::base::SmallVector<v8::internal::wasm::LiftoffRegister, 8ul>::Grow()",93957340851728,93957340851740],["v8::internal::wasm::liftoff::Load(v8::internal::wasm::LiftoffAssembler*, v8::internal::wasm::LiftoffRegister, v8::internal::Operand, v8::internal::wasm::ValueKind)",93957340852032,93957340852264],["void std::__1::__sort<v8::internal::wasm::LiftoffStackSlots::SortInPushOrder()::{lambda(v8::internal::wasm::LiftoffStackSlots::Slot const&, v8::internal::wasm::LiftoffStackSlots::Slot const&)#1}&, v8::internal::wasm::LiftoffStackSlots::Slot*>(v8::internal::wasm::LiftoffStackSlots::Slot*, v8::internal::wasm::LiftoffStackSlots::Slot*, v8::internal::wasm::LiftoffStackSlots::SortInPushOrder()::{lambda(v8::internal::wasm::LiftoffStackSlots::Slot const&, v8::internal::wasm::LiftoffStackSlots::Slot const&)#1}&)",93957340852672,93957340855645],["bool std::__1::__insertion_sort_incomplete<v8::internal::wasm::LiftoffStackSlots::SortInPushOrder()::{lambda(v8::internal::wasm::LiftoffStackSlots::Slot const&, v8::internal::wasm::LiftoffStackSlots::Slot const&)#1}&, v8::internal::wasm::LiftoffStackSlots::Slot*>(v8::internal::wasm::LiftoffStackSlots::Slot*, v8::internal::wasm::LiftoffStackSlots::Slot*, v8::internal::wasm::LiftoffStackSlots::SortInPushOrder()::{lambda(v8::internal::wasm::LiftoffStackSlots::Slot const&, v8::internal::wasm::LiftoffStackSlots::Slot const&)#1}&)",93957340856144,93957340857352],["v8::internal::wasm::(anonymous namespace)::InitMergeRegion(v8::internal::wasm::LiftoffAssembler::CacheState*, v8::internal::wasm::LiftoffAssembler::VarState const*, v8::internal::wasm::LiftoffAssembler::VarState*, unsigned int, v8::internal::wasm::(anonymous namespace)::MergeKeepStackSlots, v8::internal::wasm::(anonymous namespace)::MergeAllowConstants, v8::internal::wasm::(anonymous namespace)::ReuseRegisters, v8::internal::wasm::LiftoffRegList)",93957340835216,93957340835872],["v8::internal::wasm::LiftoffAssembler::DropValue(int)",93957340838304,93957340838414],["v8::internal::wasm::LiftoffAssembler::MergeStackWith(v8::internal::wasm::LiftoffAssembler::CacheState&, unsigned int, v8::internal::wasm::LiftoffAssembler::JumpDirection)",93957340841552,93957340843511],["v8::internal::wasm::LiftoffAssembler::ClearRegister(v8::internal::Register, std::initializer_list<v8::internal::Register*>, v8::internal::wasm::LiftoffRegList)",93957340844400,93957340844927],["v8::internal::wasm::(anonymous namespace)::PrepareStackTransfers(v8::internal::Signature<v8::internal::wasm::ValueKind> const*, v8::internal::compiler::CallDescriptor*, v8::internal::wasm::LiftoffAssembler::VarState const*, v8::internal::wasm::LiftoffStackSlots*, v8::internal::wasm::(anonymous namespace)::StackTransferRecipe*, v8::internal::wasm::LiftoffRegList*)",93957340845712,93957340846343],["v8::internal::wasm::(anonymous namespace)::StackTransferRecipe::Execute()",93957340847072,93957340848249],["v8::internal::wasm::LiftoffAssembler::FinishCall(v8::internal::Signature<v8::internal::wasm::ValueKind> const*, v8::internal::compiler::CallDescriptor*)",93957340849232,93957340849958],["v8::internal::wasm::LiftoffAssembler::SpillOneRegister(v8::internal::wasm::LiftoffRegList)",93957340851424,93957340851668],["v8::internal::Runtime_WasmTableFill(int, unsigned long*, v8::internal::Isolate*)",93957340826848,93957340828055],["v8::internal::wasm::LiftoffAssembler::CacheState::DefineSafepointWithCalleeSavedRegisters(v8::internal::Safepoint&)",93957340837056,93957340837191],["v8::internal::wasm::LiftoffAssembler::PeekToRegister(int, v8::internal::wasm::LiftoffRegList)",93957340838096,93957340838207],["v8::internal::wasm::LiftoffAssembler::Move(v8::internal::wasm::LiftoffRegister, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::ValueKind)",93957340839120,93957340839295],["v8::internal::wasm::LiftoffAssembler::MergeFullStackWith(v8::internal::wasm::LiftoffAssembler::CacheState&, v8::internal::wasm::LiftoffAssembler::CacheState const&)",93957340840528,93957340841543],["v8::internal::wasm::LiftoffAssembler::Spill(int, v8::internal::wasm::LiftoffRegister, v8::internal::wasm::ValueKind)",93957340843520,93957340843816],["v8::internal::wasm::LiftoffAssembler::SpillAllRegisters()",93957340844144,93957340844387],["v8::internal::wasm::LiftoffAssembler::SpillRegister(v8::internal::wasm::LiftoffRegister)",93957340844928,93957340845139],["v8::internal::Runtime_WasmFunctionTableSet(int, unsigned long*, v8::internal::Isolate*)",93957340815840,93957340816950],["v8::internal::Runtime_WasmAllocateRtt(int, unsigned long*, v8::internal::Isolate*)",93957340832368,93957340833073],["v8::internal::wasm::LiftoffAssembler::CacheState::GetTaggedSlotsForOOLCode(v8::internal::ZoneVector<int>*, v8::internal::wasm::LiftoffRegList*, v8::internal::wasm::LiftoffAssembler::CacheState::SpillLocation)",93957340836112,93957340836926],["v8::internal::wasm::LiftoffAssembler::LiftoffAssembler(std::__1::unique_ptr<v8::internal::AssemblerBuffer, std::__1::default_delete<v8::internal::AssemblerBuffer> >)",93957340837248,93957340837498],["v8::internal::wasm::LiftoffAssembler::LoadToRegister(v8::internal::wasm::LiftoffAssembler::VarState, v8::internal::wasm::LiftoffRegList)",93957340837696,93957340838083],["v8::internal::wasm::LiftoffAssembler::DropValues(int)",93957340838208,93957340838295],["v8::internal::wasm::LiftoffAssembler::PrepareLoopArgs(int)",93957340838416,93957340839105],["v8::internal::wasm::LiftoffAssembler::MaterializeMergedConstants(unsigned int)",93957340839296,93957340840255],["v8::internal::Runtime_WasmI32AtomicWait(int, unsigned long*, v8::internal::Isolate*)",93957340806960,93957340808108],["v8::internal::Runtime_WasmTableCopy(int, unsigned long*, v8::internal::Isolate*)",93957340821520,93957340822816],["v8::internal::Runtime_WasmDebugBreak(int, unsigned long*, v8::internal::Isolate*)",93957340829680,93957340830791],["v8::internal::(anonymous namespace)::ReplaceWrapper(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmInstanceObject>, int, v8::internal::Handle<v8::internal::Code>)",93957340834272,93957340834514],["v8::internal::wasm::LiftoffAssembler::CacheState::Split(v8::internal::wasm::LiftoffAssembler::CacheState const&)",93957340835872,93957340836105],["v8::internal::wasm::LiftoffAssembler::CacheState::DefineSafepoint(v8::internal::Safepoint&)",93957340836928,93957340837041],["v8::internal::wasm::LiftoffAssembler::GetTotalFrameSlotCountForGC() const",93957340837200,93957340837237],["v8::internal::wasm::LiftoffAssembler::~LiftoffAssembler()",93957340837504,93957340837654],["v8::internal::Runtime_WasmCompileLazy(int, unsigned long*, v8::internal::Isolate*)",93957340800656,93957340801194],["v8::internal::Runtime_WasmRefFunc(int, unsigned long*, v8::internal::Isolate*)",93957340811968,93957340812483],["v8::internal::Runtime_WasmTableInit(int, unsigned long*, v8::internal::Isolate*)",93957340818496,93957340819792],["v8::internal::Runtime_WasmTableGrow(int, unsigned long*, v8::internal::Isolate*)",93957340824544,93957340825474],["v8::internal::Stats_Runtime_WasmTableFill(int, unsigned long*, v8::internal::Isolate*)",93957340828064,93957340829673],["v8::internal::Stats_Runtime_WasmDebugBreak(int, unsigned long*, v8::internal::Isolate*)",93957340830800,93957340832353],["v8::internal::Stats_Runtime_WasmAllocateRtt(int, unsigned long*, v8::internal::Isolate*)",93957340833088,93957340834268],["v8::internal::wasm::LiftoffAssembler::CacheState::InitMerge(v8::internal::wasm::LiftoffAssembler::CacheState const&, unsigned int, unsigned int, unsigned int)",93957340834528,93957340835208],["v8::internal::Runtime_WasmThrowJSTypeError(int, unsigned long*, v8::internal::Isolate*)",93957340795728,93957340795972],["v8::internal::Runtime_WasmTriggerTierUp(int, unsigned long*, v8::internal::Isolate*)",93957340803616,93957340803981],["v8::internal::Runtime_WasmI64AtomicWait(int, unsigned long*, v8::internal::Isolate*)",93957340809680,93957340810609],["v8::internal::Runtime_WasmFunctionTableGet(int, unsigned long*, v8::internal::Isolate*)",93957340813440,93957340814415],["v8::internal::Stats_Runtime_WasmFunctionTableSet(int, unsigned long*, v8::internal::Isolate*)",93957340816960,93957340818488],["v8::internal::Stats_Runtime_WasmTableInit(int, unsigned long*, v8::internal::Isolate*)",93957340819792,93957340821511],["v8::internal::Stats_Runtime_WasmTableCopy(int, unsigned long*, v8::internal::Isolate*)",93957340822816,93957340824535],["v8::internal::Stats_Runtime_WasmTableGrow(int, unsigned long*, v8::internal::Isolate*)",93957340825488,93957340826837],["v8::internal::Runtime_WasmIsValidRefValue(int, unsigned long*, v8::internal::Isolate*)",93957340791200,93957340791491],["v8::internal::Runtime_WasmReThrow(int, unsigned long*, v8::internal::Isolate*)",93957340798768,93957340799052],["v8::internal::Runtime_WasmCompileWrapper(int, unsigned long*, v8::internal::Isolate*)",93957340802160,93957340802693],["v8::internal::Runtime_WasmAtomicNotify(int, unsigned long*, v8::internal::Isolate*)",93957340804784,93957340805655],["v8::internal::Stats_Runtime_WasmI32AtomicWait(int, unsigned long*, v8::internal::Isolate*)",93957340808112,93957340809680],["v8::internal::Stats_Runtime_WasmI64AtomicWait(int, unsigned long*, v8::internal::Isolate*)",93957340810624,93957340811965],["v8::internal::Stats_Runtime_WasmRefFunc(int, unsigned long*, v8::internal::Isolate*)",93957340812496,93957340813432],["v8::internal::Stats_Runtime_WasmFunctionTableGet(int, unsigned long*, v8::internal::Isolate*)",93957340814416,93957340815829],["v8::internal::Stats_Runtime_WasmTierUp(int, unsigned long*, v8::internal::Isolate*)",93957340787632,93957340788142],["v8::internal::Runtime_ThrowWasmError(int, unsigned long*, v8::internal::Isolate*)",93957340793792,93957340794145],["v8::internal::Runtime_WasmThrow(int, unsigned long*, v8::internal::Isolate*)",93957340796640,93957340797462],["v8::internal::Runtime_WasmStackGuard(int, unsigned long*, v8::internal::Isolate*)",93957340799760,93957340799997],["v8::internal::Stats_Runtime_WasmCompileLazy(int, unsigned long*, v8::internal::Isolate*)",93957340801200,93957340802153],["v8::internal::Stats_Runtime_WasmCompileWrapper(int, unsigned long*, v8::internal::Isolate*)",93957340802704,93957340803615],["v8::internal::Stats_Runtime_WasmTriggerTierUp(int, unsigned long*, v8::internal::Isolate*)",93957340803984,93957340804781],["v8::internal::Stats_Runtime_WasmAtomicNotify(int, unsigned long*, v8::internal::Isolate*)",93957340805664,93957340806948],["v8::internal::Stats_Runtime_WasmNumCodeSpaces(int, unsigned long*, v8::internal::Isolate*)",93957340783504,93957340784394],["v8::internal::Stats_Runtime_FreezeWasmLazyCompilation(int, unsigned long*, v8::internal::Isolate*)",93957340789488,93957340790064],["v8::internal::Runtime_WasmMemoryGrow(int, unsigned long*, v8::internal::Isolate*)",93957340792176,93957340792766],["v8::internal::Runtime_ThrowWasmStackOverflow(int, unsigned long*, v8::internal::Isolate*)",93957340794944,93957340795122],["v8::internal::Stats_Runtime_WasmThrowJSTypeError(int, unsigned long*, v8::internal::Isolate*)",93957340795984,93957340796633],["v8::internal::Stats_Runtime_WasmThrow(int, unsigned long*, v8::internal::Isolate*)",93957340797472,93957340798768],["v8::internal::Stats_Runtime_WasmReThrow(int, unsigned long*, v8::internal::Isolate*)",93957340799056,93957340799747],["v8::internal::Stats_Runtime_WasmStackGuard(int, unsigned long*, v8::internal::Isolate*)",93957340800000,93957340800652],["v8::internal::Stats_Runtime_GetWasmExceptionValues(int, unsigned long*, v8::internal::Isolate*)",93957340778864,93957340779540],["v8::internal::Stats_Runtime_WasmTierUpFunction(int, unsigned long*, v8::internal::Isolate*)",93957340786112,93957340786828],["v8::internal::Stats_Runtime_IsLiftoffFunction(int, unsigned long*, v8::internal::Isolate*)",93957340788576,93957340789352],["v8::internal::(anonymous namespace)::IsWasmCompileAllowed(v8::Isolate*, v8::Local<v8::Value>, bool)",93957340790208,93957340790588],["v8::internal::Stats_Runtime_WasmIsValidRefValue(int, unsigned long*, v8::internal::Isolate*)",93957340791504,93957340792161],["v8::internal::Stats_Runtime_WasmMemoryGrow(int, unsigned long*, v8::internal::Isolate*)",93957340792768,93957340793782],["v8::internal::Stats_Runtime_ThrowWasmError(int, unsigned long*, v8::internal::Isolate*)",93957340794160,93957340794941],["v8::internal::Stats_Runtime_ThrowWasmStackOverflow(int, unsigned long*, v8::internal::Isolate*)",93957340795136,93957340795715],["v8::internal::Stats_Runtime_IsWasmTrapHandlerEnabled(int, unsigned long*, v8::internal::Isolate*)",93957340775088,93957340775592],["v8::internal::Stats_Runtime_DeserializeWasmModule(int, unsigned long*, v8::internal::Isolate*)",93957340781184,93957340781988],["v8::internal::Stats_Runtime_WasmTraceMemory(int, unsigned long*, v8::internal::Isolate*)",93957340784864,93957340785764],["v8::internal::Stats_Runtime_WasmTierDown(int, unsigned long*, v8::internal::Isolate*)",93957340786976,93957340787486],["v8::internal::Runtime_IsLiftoffFunction(int, unsigned long*, v8::internal::Isolate*)",93957340788144,93957340788561],["v8::internal::Runtime_FreezeWasmLazyCompilation(int, unsigned long*, v8::internal::Isolate*)",93957340789360,93957340789488],["v8::internal::(anonymous namespace)::WasmModuleOverride(v8::FunctionCallbackInfo<v8::Value> const&)",93957340790064,93957340790208],["v8::internal::(anonymous namespace)::WasmInstanceOverride(v8::FunctionCallbackInfo<v8::Value> const&)",93957340790592,93957340791185],["v8::internal::Stats_Runtime_WasmTraceExit(int, unsigned long*, v8::internal::Isolate*)",93957340771664,93957340772718],["v8::internal::Stats_Runtime_GetWasmRecoveredTrapCount(int, unsigned long*, v8::internal::Isolate*)",93957340776464,93957340777120],["v8::internal::Stats_Runtime_SerializeWasmModule(int, unsigned long*, v8::internal::Isolate*)",93957340779952,93957340780727],["v8::internal::Stats_Runtime_WasmGetNumberOfInstances(int, unsigned long*, v8::internal::Isolate*)",93957340782288,93957340782988],["v8::internal::Runtime_WasmTraceMemory(int, unsigned long*, v8::internal::Isolate*)",93957340784400,93957340784858],["v8::internal::Runtime_WasmTierUpFunction(int, unsigned long*, v8::internal::Isolate*)",93957340785776,93957340786100],["v8::internal::Runtime_WasmTierDown(int, unsigned long*, v8::internal::Isolate*)",93957340786832,93957340786973],["v8::internal::Runtime_WasmTierUp(int, unsigned long*, v8::internal::Isolate*)",93957340787488,93957340787629],["v8::internal::(anonymous namespace)::DebugWasmScopeIterator::GetEndLocation()",93957340766368,93957340766398],["v8::internal::Stats_Runtime_DisallowWasmCodegen(int, unsigned long*, v8::internal::Isolate*)",93957340773648,93957340774197],["v8::internal::Stats_Runtime_IsThreadInWasm(int, unsigned long*, v8::internal::Isolate*)",93957340775680,93957340776152],["v8::internal::Stats_Runtime_GetWasmExceptionId(int, unsigned long*, v8::internal::Isolate*)",93957340777664,93957340778558],["v8::internal::Runtime_SerializeWasmModule(int, unsigned long*, v8::internal::Isolate*)",93957340779552,93957340779945],["v8::internal::Runtime_DeserializeWasmModule(int, unsigned long*, v8::internal::Isolate*)",93957340780736,93957340781170],["v8::internal::Runtime_WasmGetNumberOfInstances(int, unsigned long*, v8::internal::Isolate*)",93957340782000,93957340782279],["v8::internal::Runtime_WasmNumCodeSpaces(int, unsigned long*, v8::internal::Isolate*)",93957340782992,93957340783496],["v8::internal::(anonymous namespace)::IndexedDebugProxy<v8::internal::(anonymous namespace)::FunctionsProxy, (v8::internal::(anonymous namespace)::DebugProxyId)0, v8::internal::WasmInstanceObject>::IndexedQuery(unsigned int, v8::PropertyCallbackInfo<v8::Integer> const&)",93957340763456,93957340763720],["v8::internal::Stats_Runtime_SetWasmInstantiateControls(int, unsigned long*, v8::internal::Isolate*)",93957340768560,93957340769122],["v8::internal::Stats_Runtime_IsAsmWasmCode(int, unsigned long*, v8::internal::Isolate*)",93957340772896,93957340773503],["v8::internal::Stats_Runtime_IsWasmCode(int, unsigned long*, v8::internal::Isolate*)",93957340774384,93957340775000],["v8::internal::Runtime_IsThreadInWasm(int, unsigned long*, v8::internal::Isolate*)",93957340775600,93957340775675],["v8::internal::Runtime_GetWasmRecoveredTrapCount(int, unsigned long*, v8::internal::Isolate*)",93957340776160,93957340776456],["v8::internal::Runtime_GetWasmExceptionId(int, unsigned long*, v8::internal::Isolate*)",93957340777120,93957340777649],["v8::internal::Runtime_GetWasmExceptionValues(int, unsigned long*, v8::internal::Isolate*)",93957340778560,93957340778858],["v8::base::Optional<unsigned int> v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::GlobalsProxy, (v8::internal::(anonymous namespace)::DebugProxyId)1, v8::internal::WasmInstanceObject>::FindName<v8::Value>(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&)",93957340760544,93957340760894],["v8::internal::(anonymous namespace)::DebugWasmScopeIterator::Done()",93957340765600,93957340765613],["v8::internal::Stats_Runtime_SetWasmCompileControls(int, unsigned long*, v8::internal::Isolate*)",93957340767184,93957340768381],["v8::internal::Stats_Runtime_WasmTraceEnter(int, unsigned long*, v8::internal::Isolate*)",93957340769872,93957340771027],["v8::internal::Runtime_IsAsmWasmCode(int, unsigned long*, v8::internal::Isolate*)",93957340772720,93957340772896],["v8::internal::Runtime_DisallowWasmCodegen(int, unsigned long*, v8::internal::Isolate*)",93957340773504,93957340773646],["v8::internal::Runtime_IsWasmCode(int, unsigned long*, v8::internal::Isolate*)",93957340774208,93957340774369],["v8::internal::Runtime_IsWasmTrapHandlerEnabled(int, unsigned long*, v8::internal::Isolate*)",93957340775008,93957340775073],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::GlobalsProxy, (v8::internal::(anonymous namespace)::DebugProxyId)1, v8::internal::WasmInstanceObject>::NamedGetter(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&)",93957340758576,93957340758621],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::FunctionsProxy, (v8::internal::(anonymous namespace)::DebugProxyId)0, v8::internal::WasmInstanceObject>::NamedQuery(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Integer> const&)",93957340762368,93957340762707],["v8::base::Optional<unsigned int> v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::FunctionsProxy, (v8::internal::(anonymous namespace)::DebugProxyId)0, v8::internal::WasmInstanceObject>::FindName<v8::Value>(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&)",93957340764048,93957340764398],["v8::internal::(anonymous namespace)::DebugWasmScopeIterator::GetObject()",93957340765696,93957340766331],["v8::internal::Runtime_SetWasmCompileControls(int, unsigned long*, v8::internal::Isolate*)",93957340766400,93957340767173],["v8::internal::Runtime_SetWasmInstantiateControls(int, unsigned long*, v8::internal::Isolate*)",93957340768384,93957340768550],["v8::internal::Runtime_WasmTraceEnter(int, unsigned long*, v8::internal::Isolate*)",93957340769136,93957340769867],["v8::internal::Runtime_WasmTraceExit(int, unsigned long*, v8::internal::Isolate*)",93957340771040,93957340771652],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::TablesProxy, (v8::internal::(anonymous namespace)::DebugProxyId)3, v8::internal::WasmInstanceObject>::NamedEnumerator(v8::PropertyCallbackInfo<v8::Array> const&)",93957340755392,93957340755787],["v8::internal::(anonymous namespace)::IndexedDebugProxy<v8::internal::(anonymous namespace)::GlobalsProxy, (v8::internal::(anonymous namespace)::DebugProxyId)1, v8::internal::WasmInstanceObject>::IndexedGetter(unsigned int, v8::PropertyCallbackInfo<v8::Value> const&)",93957340759424,93957340759700],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::FunctionsProxy, (v8::internal::(anonymous namespace)::DebugProxyId)0, v8::internal::WasmInstanceObject>::CreateTemplate(v8::Isolate*)",93957340761936,93957340762308],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::FunctionsProxy, (v8::internal::(anonymous namespace)::DebugProxyId)0, v8::internal::WasmInstanceObject>::NamedDescriptor(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&)",93957340763120,93957340763165],["v8::internal::(anonymous namespace)::IndexedDebugProxy<v8::internal::(anonymous namespace)::FunctionsProxy, (v8::internal::(anonymous namespace)::DebugProxyId)0, v8::internal::WasmInstanceObject>::IndexedDescriptor(unsigned int, v8::PropertyCallbackInfo<v8::Value> const&)",93957340763728,93957340764035],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::FunctionsProxy, (v8::internal::(anonymous namespace)::DebugProxyId)0, v8::internal::WasmInstanceObject>::GetNameTable(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Isolate*)",93957340764400,93957340765600],["v8::internal::(anonymous namespace)::DebugWasmScopeIterator::Advance()",93957340765616,93957340765682],["v8::internal::(anonymous namespace)::DebugWasmScopeIterator::GetFunctionDebugName()",93957340766336,93957340766355],["v8::internal::(anonymous namespace)::IndexedDebugProxy<v8::internal::(anonymous namespace)::MemoriesProxy, (v8::internal::(anonymous namespace)::DebugProxyId)2, v8::internal::WasmInstanceObject>::IndexedQuery(unsigned int, v8::PropertyCallbackInfo<v8::Integer> const&)",93957340752128,93957340752376],["v8::internal::(anonymous namespace)::IndexedDebugProxy<v8::internal::(anonymous namespace)::TablesProxy, (v8::internal::(anonymous namespace)::DebugProxyId)3, v8::internal::WasmInstanceObject>::IndexedDescriptor(unsigned int, v8::PropertyCallbackInfo<v8::Value> const&)",93957340756432,93957340756802],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::GlobalsProxy, (v8::internal::(anonymous namespace)::DebugProxyId)1, v8::internal::WasmInstanceObject>::NamedEnumerator(v8::PropertyCallbackInfo<v8::Array> const&)",93957340758976,93957340759371],["v8::internal::(anonymous namespace)::IndexedDebugProxy<v8::internal::(anonymous namespace)::GlobalsProxy, (v8::internal::(anonymous namespace)::DebugProxyId)1, v8::internal::WasmInstanceObject>::IndexedDescriptor(unsigned int, v8::PropertyCallbackInfo<v8::Value> const&)",93957340759984,93957340760291],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::GlobalsProxy, (v8::internal::(anonymous namespace)::DebugProxyId)1, v8::internal::WasmInstanceObject>::GetNameTable(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Isolate*)",93957340760896,93957340761934],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::FunctionsProxy, (v8::internal::(anonymous namespace)::DebugProxyId)0, v8::internal::WasmInstanceObject>::NamedGetter(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&)",93957340762320,93957340762365],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::FunctionsProxy, (v8::internal::(anonymous namespace)::DebugProxyId)0, v8::internal::WasmInstanceObject>::NamedEnumerator(v8::PropertyCallbackInfo<v8::Array> const&)",93957340762720,93957340763115],["v8::internal::(anonymous namespace)::IndexedDebugProxy<v8::internal::(anonymous namespace)::FunctionsProxy, (v8::internal::(anonymous namespace)::DebugProxyId)0, v8::internal::WasmInstanceObject>::IndexedGetter(unsigned int, v8::PropertyCallbackInfo<v8::Value> const&)",93957340763168,93957340763444],["v8::internal::(anonymous namespace)::ContextProxyPrototype::NamedGetter(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&)",93957340749616,93957340750216],["v8::internal::(anonymous namespace)::GetNameFromImportsAndExportsOrNull(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmInstanceObject>, v8::internal::wasm::ImportExportKindCode, unsigned int)",93957340754064,93957340754602],["v8::internal::(anonymous namespace)::IndexedDebugProxy<v8::internal::(anonymous namespace)::TablesProxy, (v8::internal::(anonymous namespace)::DebugProxyId)3, v8::internal::WasmInstanceObject>::IndexedGetter(unsigned int, v8::PropertyCallbackInfo<v8::Value> const&)",93957340755840,93957340756173],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::TablesProxy, (v8::internal::(anonymous namespace)::DebugProxyId)3, v8::internal::WasmInstanceObject>::GetNameTable(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Isolate*)",93957340757168,93957340758190],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::GlobalsProxy, (v8::internal::(anonymous namespace)::DebugProxyId)1, v8::internal::WasmInstanceObject>::NamedQuery(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Integer> const&)",93957340758624,93957340758963],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::GlobalsProxy, (v8::internal::(anonymous namespace)::DebugProxyId)1, v8::internal::WasmInstanceObject>::NamedDescriptor(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&)",93957340759376,93957340759421],["v8::internal::(anonymous namespace)::IndexedDebugProxy<v8::internal::(anonymous namespace)::GlobalsProxy, (v8::internal::(anonymous namespace)::DebugProxyId)1, v8::internal::WasmInstanceObject>::IndexedQuery(unsigned int, v8::PropertyCallbackInfo<v8::Integer> const&)",93957340759712,93957340759976],["v8::internal::(anonymous namespace)::GlobalsProxy::Get(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmInstanceObject>, unsigned int)",93957340760304,93957340760530],["v8::base::Optional<unsigned int> v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::LocalsProxy, (v8::internal::(anonymous namespace)::DebugProxyId)5, v8::internal::FixedArray>::FindName<v8::Value>(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&)",93957340746192,93957340746542],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::MemoriesProxy, (v8::internal::(anonymous namespace)::DebugProxyId)2, v8::internal::WasmInstanceObject>::NamedQuery(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Integer> const&)",93957340751008,93957340751347],["v8::base::Optional<unsigned int> v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::MemoriesProxy, (v8::internal::(anonymous namespace)::DebugProxyId)2, v8::internal::WasmInstanceObject>::FindName<v8::Value>(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&)",93957340752736,93957340753086],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::TablesProxy, (v8::internal::(anonymous namespace)::DebugProxyId)3, v8::internal::WasmInstanceObject>::NamedGetter(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&)",93957340754992,93957340755037],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::TablesProxy, (v8::internal::(anonymous namespace)::DebugProxyId)3, v8::internal::WasmInstanceObject>::NamedDescriptor(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&)",93957340755792,93957340755837],["v8::internal::(anonymous namespace)::IndexedDebugProxy<v8::internal::(anonymous namespace)::TablesProxy, (v8::internal::(anonymous namespace)::DebugProxyId)3, v8::internal::WasmInstanceObject>::IndexedQuery(unsigned int, v8::PropertyCallbackInfo<v8::Integer> const&)",93957340756176,93957340756426],["v8::base::Optional<unsigned int> v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::TablesProxy, (v8::internal::(anonymous namespace)::DebugProxyId)3, v8::internal::WasmInstanceObject>::FindName<v8::Value>(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&)",93957340756816,93957340757166],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::GlobalsProxy, (v8::internal::(anonymous namespace)::DebugProxyId)1, v8::internal::WasmInstanceObject>::CreateTemplate(v8::Isolate*)",93957340758192,93957340758564],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::LocalsProxy, (v8::internal::(anonymous namespace)::DebugProxyId)5, v8::internal::FixedArray>::CreateTemplate(v8::Isolate*)",93957340744048,93957340744420],["v8::internal::(anonymous namespace)::IndexedDebugProxy<v8::internal::(anonymous namespace)::StackProxy, (v8::internal::(anonymous namespace)::DebugProxyId)6, v8::internal::FixedArray>::IndexedQuery(unsigned int, v8::PropertyCallbackInfo<v8::Integer> const&)",93957340748496,93957340748741],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::MemoriesProxy, (v8::internal::(anonymous namespace)::DebugProxyId)2, v8::internal::WasmInstanceObject>::CreateTemplate(v8::Isolate*)",93957340750576,93957340750948],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::MemoriesProxy, (v8::internal::(anonymous namespace)::DebugProxyId)2, v8::internal::WasmInstanceObject>::NamedDescriptor(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&)",93957340751760,93957340751805],["v8::internal::(anonymous namespace)::IndexedDebugProxy<v8::internal::(anonymous namespace)::MemoriesProxy, (v8::internal::(anonymous namespace)::DebugProxyId)2, v8::internal::WasmInstanceObject>::IndexedDescriptor(unsigned int, v8::PropertyCallbackInfo<v8::Value> const&)",93957340752384,93957340752732],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::MemoriesProxy, (v8::internal::(anonymous namespace)::DebugProxyId)2, v8::internal::WasmInstanceObject>::GetNameTable(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Isolate*)",93957340753088,93957340754049],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::TablesProxy, (v8::internal::(anonymous namespace)::DebugProxyId)3, v8::internal::WasmInstanceObject>::CreateTemplate(v8::Isolate*)",93957340754608,93957340754980],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::TablesProxy, (v8::internal::(anonymous namespace)::DebugProxyId)3, v8::internal::WasmInstanceObject>::NamedQuery(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Integer> const&)",93957340755040,93957340755379],["v8::internal::ArrayProxy::CreateTemplate(v8::Isolate*)",93957340740512,93957340740874],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::LocalsProxy, (v8::internal::(anonymous namespace)::DebugProxyId)5, v8::internal::FixedArray>::NamedDescriptor(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&)",93957340745232,93957340745277],["v8::internal::(anonymous namespace)::IndexedDebugProxy<v8::internal::(anonymous namespace)::StackProxy, (v8::internal::(anonymous namespace)::DebugProxyId)6, v8::internal::FixedArray>::CreateTemplate(v8::Isolate*)",93957340747888,93957340748157],["v8::internal::(anonymous namespace)::IndexedDebugProxy<v8::internal::(anonymous namespace)::StackProxy, (v8::internal::(anonymous namespace)::DebugProxyId)6, v8::internal::FixedArray>::IndexedDescriptor(unsigned int, v8::PropertyCallbackInfo<v8::Value> const&)",93957340749104,93957340749461],["v8::internal::(anonymous namespace)::GetOrCreateInstanceProxyCache(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmInstanceObject>)",93957340750224,93957340750570],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::MemoriesProxy, (v8::internal::(anonymous namespace)::DebugProxyId)2, v8::internal::WasmInstanceObject>::NamedGetter(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&)",93957340750960,93957340751005],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::MemoriesProxy, (v8::internal::(anonymous namespace)::DebugProxyId)2, v8::internal::WasmInstanceObject>::NamedEnumerator(v8::PropertyCallbackInfo<v8::Array> const&)",93957340751360,93957340751755],["v8::internal::(anonymous namespace)::IndexedDebugProxy<v8::internal::(anonymous namespace)::MemoriesProxy, (v8::internal::(anonymous namespace)::DebugProxyId)2, v8::internal::WasmInstanceObject>::IndexedGetter(unsigned int, v8::PropertyCallbackInfo<v8::Value> const&)",93957340751808,93957340752116],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::StructProxy, (v8::internal::(anonymous namespace)::DebugProxyId)7, v8::internal::FixedArray>::IndexedEnumerator(v8::PropertyCallbackInfo<v8::Array> const&)",93957340737760,93957340737805],["v8::internal::(anonymous namespace)::IndexedDebugProxy<v8::internal::ArrayProxy, (v8::internal::(anonymous namespace)::DebugProxyId)8, v8::internal::FixedArray>::IndexedDescriptor(unsigned int, v8::PropertyCallbackInfo<v8::Value> const&)",93957340741760,93957340742045],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::LocalsProxy, (v8::internal::(anonymous namespace)::DebugProxyId)5, v8::internal::FixedArray>::NamedQuery(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Integer> const&)",93957340744480,93957340744819],["v8::internal::(anonymous namespace)::IndexedDebugProxy<v8::internal::(anonymous namespace)::LocalsProxy, (v8::internal::(anonymous namespace)::DebugProxyId)5, v8::internal::FixedArray>::IndexedQuery(unsigned int, v8::PropertyCallbackInfo<v8::Integer> const&)",93957340745600,93957340745838],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::LocalsProxy, (v8::internal::(anonymous namespace)::DebugProxyId)5, v8::internal::FixedArray>::GetNameTable(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Isolate*)",93957340746544,93957340747876],["v8::internal::(anonymous namespace)::IndexedDebugProxy<v8::internal::(anonymous namespace)::StackProxy, (v8::internal::(anonymous namespace)::DebugProxyId)6, v8::internal::FixedArray>::IndexedGetter(unsigned int, v8::PropertyCallbackInfo<v8::Value> const&)",93957340748160,93957340748483],["v8::internal::(anonymous namespace)::IndexedDebugProxy<v8::internal::(anonymous namespace)::StackProxy, (v8::internal::(anonymous namespace)::DebugProxyId)6, v8::internal::FixedArray>::IndexedEnumerator(v8::PropertyCallbackInfo<v8::Array> const&)",93957340748752,93957340749094],["v8::internal::(anonymous namespace)::ContextProxyPrototype::CreateTemplate(v8::Isolate*)",93957340749472,93957340749616],["v8::internal::(anonymous namespace)::GetOrCreateDebugProxyMap(v8::internal::Isolate*, v8::internal::(anonymous namespace)::DebugProxyId, v8::Local<v8::FunctionTemplate> (*)(v8::Isolate*), bool)",93957340735456,93957340735892],["v8::base::Optional<unsigned int> v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::StructProxy, (v8::internal::(anonymous namespace)::DebugProxyId)7, v8::internal::FixedArray>::FindName<v8::Value>(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&)",93957340738576,93957340738926],["v8::internal::(anonymous namespace)::IndexedDebugProxy<v8::internal::ArrayProxy, (v8::internal::(anonymous namespace)::DebugProxyId)8, v8::internal::FixedArray>::IndexedQuery(unsigned int, v8::PropertyCallbackInfo<v8::Integer> const&)",93957340741136,93957340741381],["v8::internal::(anonymous namespace)::LocalsProxy::Create(v8::internal::WasmFrame*)",93957340742336,93957340743283],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::LocalsProxy, (v8::internal::(anonymous namespace)::DebugProxyId)5, v8::internal::FixedArray>::NamedGetter(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&)",93957340744432,93957340744477],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::(anonymous namespace)::LocalsProxy, (v8::internal::(anonymous namespace)::DebugProxyId)5, v8::internal::FixedArray>::NamedEnumerator(v8::PropertyCallbackInfo<v8::Array> const&)",93957340744832,93957340745227],["v8::internal::(anonymous namespace)::IndexedDebugProxy<v8::internal::(anonymous namespace)::LocalsProxy, (v8::internal::(anonymous namespace)::DebugProxyId)5, v8::internal::FixedArray>::IndexedGetter(unsigned int, v8::PropertyCallbackInfo<v8::Value> const&)",93957340745280,93957340745596],["v8::internal::(anonymous namespace)::IndexedDebugProxy<v8::internal::(anonymous namespace)::LocalsProxy, (v8::internal::(anonymous namespace)::DebugProxyId)5, v8::internal::FixedArray>::IndexedDescriptor(unsigned int, v8::PropertyCallbackInfo<v8::Value> const&)",93957340745840,93957340746187],["v8::internal::GetWasmDebugProxy(v8::internal::WasmFrame*)",93957340730288,93957340730846],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::StructProxy, (v8::internal::(anonymous namespace)::DebugProxyId)7, v8::internal::FixedArray>::NamedEnumerator(v8::PropertyCallbackInfo<v8::Array> const&)",93957340736928,93957340737323],["v8::internal::Handle<v8::internal::FixedArray> v8::internal::(anonymous namespace)::IndexedDebugProxy<v8::internal::StructProxy, (v8::internal::(anonymous namespace)::DebugProxyId)7, v8::internal::FixedArray>::GetProvider<v8::Value>(v8::PropertyCallbackInfo<v8::Value> const&)",93957340738112,93957340738282],["v8::internal::StructProxy::GetName(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FixedArray>, unsigned int)",93957340739936,93957340740226],["v8::internal::(anonymous namespace)::IndexedDebugProxy<v8::internal::ArrayProxy, (v8::internal::(anonymous namespace)::DebugProxyId)8, v8::internal::FixedArray>::IndexedGetter(unsigned int, v8::PropertyCallbackInfo<v8::Value> const&)",93957340740880,93957340741127],["v8::internal::(anonymous namespace)::IndexedDebugProxy<v8::internal::ArrayProxy, (v8::internal::(anonymous namespace)::DebugProxyId)8, v8::internal::FixedArray>::IndexedEnumerator(v8::PropertyCallbackInfo<v8::Array> const&)",93957340741392,93957340741750],["v8::internal::ArrayProxy::Get(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FixedArray>, unsigned int)",93957340742048,93957340742331],["v8::internal::(anonymous namespace)::StackProxy::Create(v8::internal::WasmFrame*)",93957340743296,93957340744038],["v8::internal::wasm::(anonymous namespace)::AsmFroundType::CanBeInvokedWith(v8::internal::wasm::AsmType*, v8::internal::ZoneVector<v8::internal::wasm::AsmType*> const&)",93957340724944,93957340725143],["v8::internal::Handle<v8::internal::JSObject> v8::internal::(anonymous namespace)::GetOrCreateInstanceProxy<v8::internal::(anonymous namespace)::GlobalsProxy>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmInstanceObject>)",93957340733280,93957340733767],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::StructProxy, (v8::internal::(anonymous namespace)::DebugProxyId)7, v8::internal::FixedArray>::NamedGetter(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&)",93957340736288,93957340736570],["v8::internal::(anonymous namespace)::IndexedDebugProxy<v8::internal::StructProxy, (v8::internal::(anonymous namespace)::DebugProxyId)7, v8::internal::FixedArray>::IndexedGetter(unsigned int, v8::PropertyCallbackInfo<v8::Value> const&)",93957340737376,93957340737484],["v8::internal::(anonymous namespace)::IndexedDebugProxy<v8::internal::StructProxy, (v8::internal::(anonymous namespace)::DebugProxyId)7, v8::internal::FixedArray>::IndexedDescriptor(unsigned int, v8::PropertyCallbackInfo<v8::Value> const&)",93957340737808,93957340738111],["v8::internal::StructProxy::Get(v8::internal::Isolate*, v8::internal::Handle<v8::internal::FixedArray>, unsigned int)",93957340738288,93957340738571],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::StructProxy, (v8::internal::(anonymous namespace)::DebugProxyId)7, v8::internal::FixedArray>::GetNameTable(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Isolate*)",93957340738928,93957340739934],["v8::internal::(anonymous namespace)::GetNameOrDefault(v8::internal::Isolate*, v8::internal::MaybeHandle<v8::internal::String>, char const*, unsigned int)",93957340740240,93957340740511],["v8::internal::wasm::AsmOverloadedFunctionType::Name()",93957340723664,93957340723949],["v8::internal::(anonymous namespace)::GetOrCreateDebugMaps(v8::internal::Isolate*)",93957340726704,93957340727100],["v8::internal::GetWasmInstanceObjectInternalProperties(v8::internal::Handle<v8::internal::WasmInstanceObject>)",93957340730928,93957340732781],["v8::internal::Handle<v8::internal::JSObject> v8::internal::(anonymous namespace)::GetOrCreateInstanceProxy<v8::internal::(anonymous namespace)::TablesProxy>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmInstanceObject>)",93957340734272,93957340734759],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::StructProxy, (v8::internal::(anonymous namespace)::DebugProxyId)7, v8::internal::FixedArray>::CreateTemplate(v8::Isolate*)",93957340735904,93957340736276],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::StructProxy, (v8::internal::(anonymous namespace)::DebugProxyId)7, v8::internal::FixedArray>::NamedQuery(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Integer> const&)",93957340736576,93957340736915],["v8::internal::(anonymous namespace)::NamedDebugProxy<v8::internal::StructProxy, (v8::internal::(anonymous namespace)::DebugProxyId)7, v8::internal::FixedArray>::NamedDescriptor(v8::Local<v8::Name>, v8::PropertyCallbackInfo<v8::Value> const&)",93957340737328,93957340737373],["v8::internal::(anonymous namespace)::IndexedDebugProxy<v8::internal::StructProxy, (v8::internal::(anonymous namespace)::DebugProxyId)7, v8::internal::FixedArray>::IndexedQuery(unsigned int, v8::PropertyCallbackInfo<v8::Integer> const&)",93957340737488,93957340737750],["v8::internal::wasm::AsmType::LoadType()",93957340722352,93957340722485],["v8::internal::wasm::AsmFunctionType::~AsmFunctionType()",93957340724784,93957340724825],["v8::internal::wasm::(anonymous namespace)::AsmMinMaxType::CanBeInvokedWith(v8::internal::wasm::AsmType*, v8::internal::ZoneVector<v8::internal::wasm::AsmType*> const&)",93957340725696,93957340725924],["v8::internal::StructProxy::Create(v8::internal::Isolate*, v8::internal::wasm::WasmValue const&, v8::internal::Handle<v8::internal::WasmModuleObject>)",93957340729024,93957340729572],["v8::internal::GetWasmScopeIterator(v8::internal::WasmFrame*)",93957340730848,93957340730919],["v8::internal::Handle<v8::internal::JSObject> v8::internal::(anonymous namespace)::GetOrCreateInstanceProxy<v8::internal::(anonymous namespace)::FunctionsProxy>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmInstanceObject>)",93957340732784,93957340733268],["v8::internal::Handle<v8::internal::JSObject> v8::internal::(anonymous namespace)::GetOrCreateInstanceProxy<v8::internal::(anonymous namespace)::MemoriesProxy>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::WasmInstanceObject>)",93957340733776,93957340734263],["v8::internal::GetWasmModuleObjectInternalProperties(v8::internal::Handle<v8::internal::WasmModuleObject>)",93957340734768,93957340735444],["v8::internal::AsmJsScanner::Seek(unsigned long)",93957340718512,93957340718632],["v8::internal::wasm::AsmType::FroundType(v8::internal::Zone*)",93957340722960,93957340723023],["v8::internal::wasm::AsmOverloadedFunctionType::AddOverload(v8::internal::wasm::AsmType*)",93957340724080,93957340724739],["v8::internal::wasm::AsmOverloadedFunctionType::~AsmOverloadedFunctionType()",93957340724864,93957340724905],["v8::internal::wasm::(anonymous namespace)::AsmMinMaxType::Name()",93957340725152,93957340725683],["v8::internal::WasmValueObject::New(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object>)",93957340725936,93957340726703],["v8::internal::WasmValueObject::New(v8::internal::Isolate*, v8::internal::wasm::WasmValue const&, v8::internal::Handle<v8::internal::WasmModuleObject>)",93957340727104,93957340729012],["v8::internal::ArrayProxy::Create(v8::internal::Isolate*, v8::internal::wasm::WasmValue const&, v8::internal::Handle<v8::internal::WasmModuleObject>)",93957340729584,93957340730286],["v8::internal::AsmJsScanner::AsmJsScanner(v8::internal::Utf16CharacterStream*)",93957340710816,93957340714820],["v8::internal::wasm::AsmType::Name()",93957340721104,93957340722047],["v8::internal::wasm::AsmCallableType::IsA(v8::internal::wasm::AsmType*)",93957340722640,93957340722662],["v8::internal::wasm::AsmFunctionType::IsA(v8::internal::wasm::AsmType*)",93957340723104,93957340723390],["v8::internal::wasm::AsmOverloadedFunctionType::CanBeInvokedWith(v8::internal::wasm::AsmType*, v8::internal::ZoneVector<v8::internal::wasm::AsmType*> const&)",93957340723952,93957340724071],["v8::internal::wasm::AsmFunctionType::~AsmFunctionType()",93957340724752,93957340724781],["v8::internal::wasm::AsmOverloadedFunctionType::~AsmOverloadedFunctionType()",93957340724832,93957340724861],["v8::internal::wasm::(anonymous namespace)::AsmFroundType::Name()",93957340724912,93957340724941],["v8::internal::wasm::AsmJsParser::BitwiseORExpression()",93957340705968,93957340706468],["v8::internal::AsmJsScanner::ConsumeIdentifier(unsigned int)",93957340716720,93957340717367],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, int>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, int>, std::__1::__unordered_map_hasher<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, int>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::__unordered_map_equal<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, int>, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::allocator<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, int> > >::__emplace_unique_key_args<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::piecewise_construct_t const&, std::__1::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&>, std::__1::tuple<> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::piecewise_construct_t const&, std::__1::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&>&&, std::__1::tuple<>&&)",93957340719856,93957340721083],["v8::internal::wasm::AsmType::IsA(v8::internal::wasm::AsmType*)",93957340722112,93957340722179],["v8::internal::wasm::AsmType::StoreType()",93957340722496,93957340722629],["v8::internal::wasm::AsmFunctionType::Name()",93957340722672,93957340722958],["v8::internal::wasm::AsmType::MinMaxType(v8::internal::Zone*, v8::internal::wasm::AsmType*, v8::internal::wasm::AsmType*)",93957340723024,93957340723097],["v8::internal::wasm::AsmFunctionType::CanBeInvokedWith(v8::internal::wasm::AsmType*, v8::internal::ZoneVector<v8::internal::wasm::AsmType*> const&)",93957340723392,93957340723662],["v8::internal::wasm::AsmJsParser::UnaryExpression()",93957340699536,93957340700759],["void std::__1::vector<v8::internal::ZoneVector<int>, v8::internal::ZoneAllocator<v8::internal::ZoneVector<int> > >::__emplace_back_slow_path<v8::internal::ZoneVector<int> >(v8::internal::ZoneVector<int>&&)",93957340707744,93957340708161],["v8::internal::AsmJsScanner::ConsumeString(unsigned int)",93957340715600,93957340716228],["v8::internal::AsmJsScanner::Rewind()",93957340718160,93957340718244],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, int>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, int>, std::__1::__unordered_map_hasher<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, int>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::__unordered_map_equal<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, int>, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::allocator<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, int> > >::__emplace_unique_key_args<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::piecewise_construct_t const&, std::__1::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&>, std::__1::tuple<> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::piecewise_construct_t const&, std::__1::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&>&&, std::__1::tuple<>&&)",93957340718640,93957340719855],["v8::internal::wasm::AsmType::AsCallableType()",93957340721088,93957340721104],["v8::internal::wasm::AsmType::IsExactly(v8::internal::wasm::AsmType*, v8::internal::wasm::AsmType*)",93957340722048,93957340722099],["v8::internal::wasm::AsmType::ElementSizeInBytes()",93957340722192,93957340722337],["v8::internal::wasm::AsmJsParser::CallExpression()",93957340689008,93957340689320],["v8::internal::wasm::AsmJsParser::RelationalExpression()",93957340703600,93957340704794],["std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int>, std::__1::__unordered_map_hasher<v8::internal::Signature<v8::internal::wasm::ValueType>, std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int>, v8::base::hash<v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::equal_to<v8::internal::Signature<v8::internal::wasm::ValueType> >, true>, std::__1::__unordered_map_equal<v8::internal::Signature<v8::internal::wasm::ValueType>, std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int>, std::__1::equal_to<v8::internal::Signature<v8::internal::wasm::ValueType> >, v8::base::hash<v8::internal::Signature<v8::internal::wasm::ValueType> >, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int> > >::rehash(unsigned long)",93957340706592,93957340706963],["std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int>, void*>*> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int>, std::__1::__unordered_map_hasher<v8::internal::Signature<v8::internal::wasm::ValueType>, std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int>, v8::base::hash<v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::equal_to<v8::internal::Signature<v8::internal::wasm::ValueType> >, true>, std::__1::__unordered_map_equal<v8::internal::Signature<v8::internal::wasm::ValueType>, std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int>, std::__1::equal_to<v8::internal::Signature<v8::internal::wasm::ValueType> >, v8::base::hash<v8::internal::Signature<v8::internal::wasm::ValueType> >, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int> > >::find<v8::internal::Signature<v8::internal::wasm::ValueType> >(v8::internal::Signature<v8::internal::wasm::ValueType> const&)",93957340708800,93957340709520],["v8::internal::AsmJsScanner::Next()",93957340714832,93957340715594],["v8::internal::AsmJsScanner::ConsumeCompareOrShift(unsigned int)",93957340716240,93957340716707],["v8::internal::AsmJsScanner::ConsumeNumber(unsigned int)",93957340717376,93957340718156],["v8::internal::AsmJsScanner::ResetLocals()",93957340718256,93957340718505],["v8::internal::wasm::AsmJsParser::DoStatement()",93957340683696,93957340684818],["v8::internal::wasm::AsmJsParser::PeekCall()",93957340690288,93957340690437],["v8::internal::wasm::AsmJsParser::AdditiveExpression()",93957340702128,93957340702848],["v8::internal::wasm::AsmJsParser::BitwiseANDExpression()",93957340705456,93957340705697],["v8::internal::wasm::AsmFunctionType* v8::internal::Zone::New<v8::internal::wasm::AsmFunctionType, v8::internal::Zone*&, v8::internal::wasm::AsmType*&>(v8::internal::Zone*&, v8::internal::wasm::AsmType*&)",93957340706480,93957340706578],["std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int>, std::__1::__unordered_map_hasher<v8::internal::Signature<v8::internal::wasm::ValueType>, std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int>, v8::base::hash<v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::equal_to<v8::internal::Signature<v8::internal::wasm::ValueType> >, true>, std::__1::__unordered_map_equal<v8::internal::Signature<v8::internal::wasm::ValueType>, std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int>, std::__1::equal_to<v8::internal::Signature<v8::internal::wasm::ValueType> >, v8::base::hash<v8::internal::Signature<v8::internal::wasm::ValueType> >, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int> > >::__rehash(unsigned long)",93957340706976,93957340707740],["void std::__1::vector<v8::internal::wasm::AsmType*, v8::internal::ZoneAllocator<v8::internal::wasm::AsmType*> >::__push_back_slow_path<v8::internal::wasm::AsmType*>(v8::internal::wasm::AsmType*&&)",93957340708176,93957340708798],["std::__1::pair<std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int>, void*>*>, bool> std::__1::__hash_table<std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int>, std::__1::__unordered_map_hasher<v8::internal::Signature<v8::internal::wasm::ValueType>, std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int>, v8::base::hash<v8::internal::Signature<v8::internal::wasm::ValueType> >, std::__1::equal_to<v8::internal::Signature<v8::internal::wasm::ValueType> >, true>, std::__1::__unordered_map_equal<v8::internal::Signature<v8::internal::wasm::ValueType>, std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int>, std::__1::equal_to<v8::internal::Signature<v8::internal::wasm::ValueType> >, v8::base::hash<v8::internal::Signature<v8::internal::wasm::ValueType> >, true>, v8::internal::ZoneAllocator<std::__1::__hash_value_type<v8::internal::Signature<v8::internal::wasm::ValueType>, unsigned int> > >::__emplace_unique_key_args<v8::internal::Signature<v8::internal::wasm::ValueType>, std::__1::piecewise_construct_t const&, std::__1::tuple<v8::internal::Signature<v8::internal::wasm::ValueType> const&>, std::__1::tuple<> >(v8::internal::Signature<v8::internal::wasm::ValueType> const&, std::__1::piecewise_construct_t const&, std::__1::tuple<v8::internal::Signature<v8::internal::wasm::ValueType> const&>&&, std::__1::tuple<>&&)",93957340709520,93957340710802],["v8::internal::wasm::AsmJsParser::IfStatement()",93957340678992,93957340679935],["v8::internal::wasm::AsmJsParser::ValidateDefault()",93957340687424,93957340687571],["v8::internal::wasm::AsmJsParser::MemberExpression()",93957340689680,93957340690112],["v8::internal::wasm::AsmJsParser::ValidateHeapAccess()",93957340698384,93957340698969],["v8::internal::wasm::AsmJsParser::MultiplicativeExpression()",93957340700768,93957340702125],["v8::internal::wasm::AsmJsParser::ShiftExpression()",93957340702848,93957340703591],["v8::internal::wasm::AsmJsParser::EqualityExpression()",93957340704800,93957340705444],["v8::internal::wasm::AsmJsParser::BitwiseXORExpression()",93957340705712,93957340705953],["v8::internal::wasm::AsmJsParser::ValidateModuleVarImport(v8::internal::wasm::AsmJsParser::VarInfo*, bool)",93957340667424,93957340668614],["v8::internal::wasm::AsmJsParser::SwitchStatement()",93957340680976,93957340682577],["v8::internal::wasm::AsmJsParser::GatherCases(v8::internal::ZoneVector<int>*)",93957340686224,93957340687136],["v8::internal::wasm::AsmJsParser::NumericLiteral()",93957340688608,93957340688783],["v8::internal::wasm::AsmJsParser::ValidateFloatCoercion()",93957340689328,93957340689679],["v8::internal::wasm::AsmJsParser::ParenthesizedExpression()",93957340690112,93957340690274],["v8::internal::wasm::AsmJsParser::ValidateCall()",93957340690448,93957340698378],["v8::internal::wasm::AsmJsParser::ConditionalExpression()",93957340698976,93957340699535],["v8::internal::wasm::AsmJsParser::ValidateModuleParameters()",93957340658992,93957340659305],["v8::internal::wasm::AsmJsParser::ValidateStatement()",93957340677504,93957340677913],["v8::internal::wasm::AsmJsParser::BreakStatement()",93957340680336,93957340680672],["v8::internal::wasm::AsmJsParser::Expression(v8::internal::wasm::AsmType*)",93957340682976,93957340683281],["v8::internal::wasm::AsmJsParser::ForStatement()",93957340684832,93957340686210],["v8::internal::wasm::AsmJsParser::ValidateCase()",93957340687136,93957340687422],["v8::internal::wasm::AsmJsParser::AssignmentExpression()",93957340687584,93957340688608],["v8::internal::wasm::AsmJsParser::Identifier()",93957340688784,93957340688999],["v8::internal::wasm::AsmJsParser::Run()",93957340655840,93957340655871],["v8::internal::wasm::AsmJsParser::ValidateExport()",93957340662736,93957340663386],["v8::internal::wasm::AsmJsParser::ValidateFunctionParams(v8::internal::ZoneVector<v8::internal::wasm::AsmType*>*)",93957340669440,93957340671294],["std::__1::vector<v8::internal::wasm::ValueType, v8::internal::ZoneAllocator<v8::internal::wasm::ValueType> >::push_back(v8::internal::wasm::ValueType const&)",93957340678048,93957340678707],["v8::internal::wasm::AsmJsParser::ReturnStatement()",93957340679936,93957340680332],["v8::internal::wasm::AsmJsParser::ContinueStatement()",93957340680672,93957340680964],["v8::internal::wasm::AsmJsParser::ExpressionStatement()",93957340682592,93957340682964],["v8::internal::wasm::AsmJsParser::WhileStatement()",93957340683296,93957340683686],["v8::internal::Isolate::int32_array_fun()",93957340648080,93957340648194],["v8::internal::wasm::WasmInitExpr::~WasmInitExpr()",93957340657424,93957340657476],["v8::internal::wasm::AsmJsParser::ValidateFunction()",93957340659536,93957340662162],["v8::internal::wasm::AsmJsParser::ValidateModuleVarNewStdlib(v8::internal::wasm::AsmJsParser::VarInfo*)",93957340664544,93957340664905],["v8::internal::wasm::AsmJsParser::ValidateModuleVarFromGlobal(v8::internal::wasm::AsmJsParser::VarInfo*, bool)",93957340668624,93957340669434],["v8::internal::wasm::AsmJsParser::ValidateFunctionLocals(unsigned long, v8::internal::ZoneVector<v8::internal::wasm::ValueType>*)",93957340671296,93957340677493],["v8::internal::wasm::AsmJsParser::CachedVector<int>::~CachedVector()",93957340677920,93957340678043],["v8::internal::wasm::AsmJsParser::Block()",93957340678720,93957340678984],["v8::internal::AsmJsCompilationJob::~AsmJsCompilationJob()",93957340646512,93957340646573],["v8::internal::wasm::AsmJsParser::AsmJsParser(v8::internal::Zone*, unsigned long, v8::internal::Utf16CharacterStream*)",93957340648592,93957340649002],["v8::internal::wasm::AsmJsParser::GetVarInfo(int)",93957340656784,93957340657251],["v8::internal::wasm::AsmJsParser::Begin(int)",93957340657568,93957340658270],["v8::internal::wasm::AsmJsParser::ValidateModuleVars()",93957340659312,93957340659535],["v8::internal::wasm::AsmJsParser::ValidateFunctionTable()",93957340662176,93957340662721],["v8::internal::wasm::AsmJsParser::ValidateModuleVar(bool)",93957340663392,93957340664529],["v8::internal::wasm::AsmJsParser::ValidateModuleVarStdlib(v8::internal::wasm::AsmJsParser::VarInfo*)",93957340664912,93957340667411],["v8::internal::Zone::NewExpand(unsigned long)",93957340634544,93957340634828],["v8::internal::Isolate::int8_array_fun()",93957340647568,93957340647682],["v8::internal::Isolate::float32_array_fun()",93957340648336,93957340648450],["v8::internal::wasm::AsmJsParser::ConvertSignature(v8::internal::wasm::AsmType*, v8::internal::ZoneVector<v8::internal::wasm::AsmType*> const&)",93957340655296,93957340655759],["v8::internal::wasm::AsmJsParser::ValidateModule()",93957340655872,93957340656775],["v8::internal::wasm::AsmJsParser::DeclareGlobal(v8::internal::wasm::AsmJsParser::VarInfo*, bool, v8::internal::wasm::AsmType*, v8::internal::wasm::ValueType, v8::internal::wasm::WasmInitExpr)",93957340657264,93957340657416],["v8::internal::wasm::AsmJsParser::SkipSemicolon()",93957340657488,93957340657558],["v8::internal::wasm::AsmJsParser::BareBegin(v8::internal::wasm::AsmJsParser::BlockKind, int)",93957340658272,93957340658982],["v8::internal::WebSnapshotDeserializer::ReadValue(v8::internal::ValueDeserializer&, v8::internal::Handle<v8::internal::Object>&, v8::internal::Representation&)",93957340633520,93957340633919],["v8::internal::AsmJsCompilationJob::FinalizeJobImpl(v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Isolate*)",93957340636080,93957340636865],["v8::internal::(anonymous namespace)::Report(v8::internal::Handle<v8::internal::Script>, int, v8::internal::Vector<char const>, v8::internal::MessageTemplate, v8::Isolate::MessageErrorLevel)",93957340646896,93957340647022],["v8::internal::Isolate::int16_array_fun()",93957340647824,93957340647938],["v8::internal::Isolate::uint32_array_fun()",93957340648208,93957340648322],["v8::internal::Isolate::float64_array_fun()",93957340648464,93957340648578],["v8::internal::wasm::AsmJsParser::InitializeStdlibTypes()",93957340649008,93957340655284],["v8::internal::Signature<v8::internal::wasm::ValueType>::Builder::Build()",93957340655760,93957340655831],["v8::internal::WebSnapshotDeserializer::DeserializeStrings(unsigned char const*, unsigned long&, unsigned long)",93957340625088,93957340625675],["v8::internal::AccountingAllocator::AllocateSegment(unsigned long, bool)",93957340634144,93957340634227],["v8::internal::AsmJsCompilationJob::ExecuteJobImpl()",93957340635024,93957340635704],["v8::internal::AsmJs::InstantiateAsmWasm(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Handle<v8::internal::AsmWasmData>, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::JSArrayBuffer>)",93957340637088,93957340646449],["v8::internal::AsmJsScanner::~AsmJsScanner()",93957340646576,93957340646891],["v8::internal::(anonymous namespace)::StdlibMathMember(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::Handle<v8::internal::Name>)",93957340647024,93957340647564],["v8::internal::Isolate::uint8_array_fun()",93957340647696,93957340647810],["v8::internal::Isolate::uint16_array_fun()",93957340647952,93957340648066],["v8::internal::WebSnapshotSerializer::InsertIntoIndexMap(v8::internal::ObjectCacheIndexMap&, v8::internal::Handle<v8::internal::HeapObject>, unsigned int&)",93957340621312,93957340621488],["v8::internal::WebSnapshotDeserializer::DeserializeObjects(unsigned char const*, unsigned long&, unsigned long)",93957340631024,93957340632400],["v8::internal::AccountingAllocator::~AccountingAllocator()",93957340633952,93957340634037],["v8::internal::Zone::Zone(v8::internal::AccountingAllocator*, char const*, bool)",93957340634304,93957340634375],["v8::internal::Zone::ReleaseMemory()",93957340634832,93957340635017],["v8::internal::wasm::AsmJsParser::~AsmJsParser()",93957340635712,93957340636079],["v8::internal::AsmJs::NewCompilationJob(v8::internal::ParseInfo*, v8::internal::FunctionLiteral*, v8::internal::AccountingAllocator*)",93957340636880,93957340637082],["v8::internal::AsmJsCompilationJob::~AsmJsCompilationJob()",93957340646464,93957340646507],["v8::internal::PassesFilter(v8::internal::Vector<char const>, v8::internal::Vector<char const>)",93957340617952,93957340618208],["v8::internal::WebSnapshotSerializer::SerializeContext(v8::internal::Handle<v8::internal::Context>, unsigned int&)",93957340623184,93957340623935],["v8::internal::WebSnapshotDeserializer::DeserializeContexts(unsigned char const*, unsigned long&, unsigned long)",93957340627648,93957340628893],["v8::internal::WebSnapshotDeserializer::ReadString(v8::internal::ValueDeserializer&, bool)",93957340632976,93957340633245],["v8::internal::AccountingAllocator::AccountingAllocator()",93957340633920,93957340633947],["v8::internal::AccountingAllocator::~AccountingAllocator()",93957340634048,93957340634136],["v8::internal::AccountingAllocator::ReturnSegment(v8::internal::Segment*, bool)",93957340634240,93957340634290],["v8::internal::Zone::~Zone()",93957340634384,93957340634540],["v8::internal::VSNPrintF(v8::internal::Vector<char>, char const*, __va_list_tag*)",93957340616848,93957340616858],["v8::internal::WebSnapshotSerializer::TakeSnapshot(v8::Local<v8::Context>, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, v8::internal::WebSnapshotData&)",93957340619088,93957340619654],["v8::internal::WebSnapshotSerializer::SerializeMap(v8::internal::Handle<v8::internal::Map>, unsigned int&)",93957340621648,93957340622538],["v8::internal::WebSnapshotDeserializer::WebSnapshotDeserializer(v8::Isolate*)",93957340624464,93957340624508],["v8::internal::WebSnapshotDeserializer::DeserializeMaps(unsigned char const*, unsigned long&, unsigned long)",93957340625680,93957340627636],["v8::internal::WebSnapshotDeserializer::DeserializeFunctions(unsigned char const*, unsigned long&, unsigned long)",93957340628896,93957340631010],["v8::internal::WebSnapshotDeserializer::DeserializeExports(unsigned char const*, unsigned long&, unsigned long)",93957340632400,93957340632975],["v8::internal::TorqueGeneratedScopeInfo<v8::internal::ScopeInfo, v8::internal::HeapObject>::set_outer_scope_info(v8::internal::HeapObject, v8::internal::WriteBarrierMode)",93957340633248,93957340633518],["v8::internal::SimpleStringBuilder::Finalize()",93957340616064,93957340616162],["v8::internal::WriteChars(char const*, char const*, int, bool)",93957340617504,93957340617656],["v8::internal::WebSnapshotSerializer::WebSnapshotSerializer(v8::Isolate*)",93957340618336,93957340618803],["v8::internal::WebSnapshotSerializer::WriteSnapshot(unsigned char*&, unsigned long&)",93957340620000,93957340620686],["v8::internal::WebSnapshotSerializer::SerializeString(v8::internal::Handle<v8::internal::String>, unsigned int&)",93957340621488,93957340621641],["v8::internal::WebSnapshotSerializer::SerializeFunction(v8::internal::Handle<v8::internal::JSFunction>, unsigned int&)",93957340622544,93957340623181],["v8::internal::WebSnapshotSerializer::WriteValue(v8::internal::Handle<v8::internal::Object>, v8::internal::ValueSerializer&)",93957340623936,93957340624457],["v8::internal::WebSnapshotDeserializer::UseWebSnapshot(unsigned char const*, unsigned long)",93957340624512,93957340625074],["v8::internal::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::AsUC32 const&)",93957340615152,93957340615325],["v8::internal::PrintF(char const*, ...)",93957340616256,93957340616395],["v8::internal::ReadFile(_IO_FILE*, bool*, bool)",93957340616880,93957340617080],["v8::internal::DoubleToBoolean(double)",93957340617856,93957340617930],["v8::internal::Version::GetString(v8::internal::Vector<char>)",93957340618208,93957340618331],["v8::internal::WebSnapshotSerializer::~WebSnapshotSerializer()",93957340618816,93957340619080],["v8::internal::WebSnapshotSerializer::SerializeExport(v8::internal::Handle<v8::internal::JSObject>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)",93957340619664,93957340619992],["v8::internal::WebSnapshotSerializer::SerializePendingObject(v8::internal::Handle<v8::internal::JSObject>)",93957340620688,93957340621300],["v8::internal::OFStreamBase::overflow(int)",93957340614128,93957340614158],["v8::internal::SimpleStringBuilder::AddString(char const*)",93957340615616,93957340615676],["v8::internal::hash_value(v8::internal::BytecodeOffset)",93957340616224,93957340616234],["v8::internal::PrintIsolate(void*, char const*, ...)",93957340616544,93957340616718],["v8::internal::StrNCpy(v8::internal::Vector<char>, char const*, unsigned long)",93957340616864,93957340616874],["v8::internal::(anonymous namespace)::ReadCharsFromFile(_IO_FILE*, bool*, bool, char const*)",93957340617088,93957340617501],["v8::internal::StringBuilder::AddFormatted(char const*, ...)",93957340617664,93957340617843],["v8::base::Stack::GetCurrentStackPosition()",93957340617936,93957340617945],["v8::internal::IdentityMapBase::FindOrInsertEntry(unsigned long)",93957340613152,93957340613247],["v8::internal::StdoutStream::GetStdoutMutex()",93957340614512,93957340614584],["v8::internal::OFStreamBase::~OFStreamBase()",93957340615472,93957340615500],["v8::internal::SimpleStringBuilder::AddPadding(char, int)",93957340615728,93957340615825],["v8::internal::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::FeedbackSlot)",93957340616176,93957340616217],["v8::internal::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::BytecodeOffset)",93957340616240,93957340616250],["v8::internal::PrintF(_IO_FILE*, char const*, ...)",93957340616400,93957340616532],["v8::internal::SNPrintF(v8::internal::Vector<char>, char const*, ...)",93957340616720,93957340616845],["v8::internal::IdentityMapBase::Clear()",93957340610736,93957340610824],["v8::internal::IdentityMapBase::KeyAtIndex(int) const",93957340613888,93957340613932],["v8::internal::OFStream::OFStream(_IO_FILE*)",93957340614192,93957340614348],["v8::internal::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::AsEscapedUC16ForJSON const&)",93957340614768,93957340615002],["v8::internal::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::AsHex const&)",93957340615328,93957340615462],["v8::internal::SimpleStringBuilder::SimpleStringBuilder(int)",93957340615504,93957340615610],["v8::internal::SimpleStringBuilder::AddSubstring(char const*, int)",93957340615680,93957340615717],["v8::internal::SimpleStringBuilder::AddDecimalInteger(int)",93957340615840,93957340616056],["v8::internal::VirtualMemory::VirtualMemory(v8::PageAllocator*, unsigned long, void*, unsigned long, v8::internal::VirtualMemory::JitPermission)",93957340610064,93957340610190],["v8::internal::IdentityMapBase::DeleteIndex(int, unsigned long*)",93957340611504,93957340611844],["v8::internal::IdentityMapBase::FindEntry(unsigned long) const",93957340613696,93957340613776],["v8::internal::IdentityMapBase::NextIndex(int) const",93957340613984,93957340614089],["v8::internal::OFStreamBase::xsputn(char const*, long)",93957340614160,93957340614185],["v8::internal::OFStream::OFStream(_IO_FILE*)",93957340614352,93957340614502],["v8::internal::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::AsReversiblyEscapedUC16 const&)",93957340614592,93957340614755],["v8::internal::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, v8::internal::AsUC16 const&)",93957340615008,93957340615150],["v8::internal::AlignedAlloc(unsigned long, unsigned long)",93957340609456,93957340609626],["v8::internal::VirtualMemory::SetPermissions(unsigned long, unsigned long, v8::PageAllocator::Permission)",93957340610448,93957340610510],["v8::internal::IdentityMapBase::DisableIteration()",93957340610880,93957340610917],["v8::internal::IdentityMapBase::Rehash()",93957340612256,93957340612795],["v8::internal::IdentityMapBase::InsertEntry(unsigned long)",93957340613248,93957340613681],["v8::internal::IdentityMapBase::DeleteEntry(unsigned long, unsigned long*)",93957340613776,93957340613875],["v8::internal::IdentityMapBase::EntryAtIndex(int) const",93957340613936,93957340613980],["v8::internal::OFStreamBase::sync()",93957340614096,93957340614113],["v8::internal::StrDup(char const*)",93957340609312,93957340609443],["v8::internal::GetRandomMmapAddr()",93957340609744,93957340609763],["v8::internal::VirtualMemory::Free()",93957340610304,93957340610410],["v8::internal::VirtualMemory::FreeReadOnly()",93957340610624,93957340610716],["v8::internal::IdentityMapBase::EnableIteration()",93957340610832,93957340610869],["v8::internal::IdentityMapBase::Resize(int)",93957340610928,93957340611489],["v8::internal::IdentityMapBase::Lookup(unsigned long) const",93957340611856,93957340612241],["v8::internal::IdentityMapBase::LookupOrInsert(unsigned long)",93957340612800,93957340613146],["v8::internal::CommitPageSize()",93957340609664,93957340609683],["v8::internal::SetPermissions(v8::PageAllocator*, void*, unsigned long, v8::PageAllocator::Permission)",93957340610016,93957340610030],["v8::internal::VirtualMemory::~VirtualMemory()",93957340610192,93957340610303],["v8::internal::VirtualMemory::Reset()",93957340610416,93957340610436],["v8::internal::VirtualMemory::Release(unsigned long)",93957340610512,93957340610609],["v8::internal::IdentityMapBase::~IdentityMapBase()",93957340610720,93957340610736],["v8::internal::AllocatePageSize()",93957340609632,93957340609651],["v8::internal::SetRandomMmapSeed(long)",93957340609696,93957340609731],["v8::internal::AllocatePages(v8::PageAllocator*, void*, unsigned long, unsigned long, v8::PageAllocator::Permission)",93957340609776,93957340610016],["v8_inspector::String16Builder::String16Builder()",93957340610032,93957340610052]] diff --git a/deps/v8/test/mjsunit/tools/tickprocessor-test.log.symbols.json b/deps/v8/test/mjsunit/tools/tickprocessor-test.log.symbols.json new file mode 100644 index 0000000000..eccc52c346 --- /dev/null +++ b/deps/v8/test/mjsunit/tools/tickprocessor-test.log.symbols.json @@ -0,0 +1,7 @@ +[ + ["exp",4158389888,4158390051], + ["fegetexcept",4158374368,4158374389], + ["v8::internal::Runtime_Math_exp(v8::internal::Arguments)",135412512,135412608], + ["v8::internal::JSObject::LookupOwnRealNamedProperty(v8::internal::String*, v8::internal::LookupResult*)",135235584,135237008], + ["v8::internal::HashTable<v8::internal::StringDictionaryShape, v8::internal::String*>::FindEntry(v8::internal::String*)",135234064,135235584] +]
\ No newline at end of file diff --git a/deps/v8/test/mjsunit/tools/tickprocessor-test.separate-baseline-handlers b/deps/v8/test/mjsunit/tools/tickprocessor-test.separate-baseline-handlers new file mode 100644 index 0000000000..73d005a058 --- /dev/null +++ b/deps/v8/test/mjsunit/tools/tickprocessor-test.separate-baseline-handlers @@ -0,0 +1,61 @@ +Statistical profiling result from v8.log, (13 ticks, 2 unaccounted, 0 excluded). + + [Shared libraries]: + ticks total nonlib name + 3 23.1% /lib32/libm-2.7.so + 1 7.7% ffffe000-fffff000 + + [JavaScript]: + ticks total nonlib name + + [C++]: + ticks total nonlib name + 2 15.4% 22.2% v8::internal::Runtime_Math_exp(v8::internal::Arguments) + 1 7.7% 11.1% v8::internal::JSObject::LookupOwnRealNamedProperty(v8::internal::String*, v8::internal::LookupResult*) + 1 7.7% 11.1% v8::internal::HashTable<v8::internal::StringDictionaryShape, v8::internal::String*>::FindEntry(v8::internal::String*) + 1 7.7% 11.1% exp + + [Summary]: + ticks total nonlib name + 0 0.0% 0.0% JavaScript + 5 38.5% 55.6% C++ + 0 0.0% 0.0% GC + 4 30.8% Shared libraries + 2 15.4% Unaccounted + + [C++ entry points]: + ticks cpp total name + 2 40.0% 15.4% v8::internal::Runtime_Math_exp(v8::internal::Arguments) + 1 20.0% 7.7% v8::internal::JSObject::LookupOwnRealNamedProperty(v8::internal::String*, v8::internal::LookupResult*) + 1 20.0% 7.7% v8::internal::HashTable<v8::internal::StringDictionaryShape, v8::internal::String*>::FindEntry(v8::internal::String*) + 1 20.0% 7.7% exp + + [Bottom up (heavy) profile]: + Note: percentage shows a share of a particular caller in the total + amount of its parent calls. + Callers occupying less than 1.0% are not shown. + + ticks parent name + 3 23.1% /lib32/libm-2.7.so + 3 100.0% LazyCompile: exp native math.js:41 + 3 100.0% Script: exp.js + + 2 15.4% v8::internal::Runtime_Math_exp(v8::internal::Arguments) + 2 100.0% LazyCompile: exp native math.js:41 + 2 100.0% Script: exp.js + + 2 15.4% UNKNOWN + 1 50.0% LazyCompile: exp native math.js:41 + 1 100.0% Script: exp.js + + 1 7.7% v8::internal::JSObject::LookupOwnRealNamedProperty(v8::internal::String*, v8::internal::LookupResult*) + 1 100.0% Script: exp.js + + 1 7.7% v8::internal::HashTable<v8::internal::StringDictionaryShape, v8::internal::String*>::FindEntry(v8::internal::String*) + 1 100.0% Script: exp.js + + 1 7.7% ffffe000-fffff000 + + 1 7.7% exp + 1 100.0% LazyCompile: exp native math.js:41 + 1 100.0% Script: exp.js diff --git a/deps/v8/test/mjsunit/tools/tickprocessor-test.separate-bytecodes b/deps/v8/test/mjsunit/tools/tickprocessor-test.separate-bytecodes new file mode 100644 index 0000000000..73d005a058 --- /dev/null +++ b/deps/v8/test/mjsunit/tools/tickprocessor-test.separate-bytecodes @@ -0,0 +1,61 @@ +Statistical profiling result from v8.log, (13 ticks, 2 unaccounted, 0 excluded). + + [Shared libraries]: + ticks total nonlib name + 3 23.1% /lib32/libm-2.7.so + 1 7.7% ffffe000-fffff000 + + [JavaScript]: + ticks total nonlib name + + [C++]: + ticks total nonlib name + 2 15.4% 22.2% v8::internal::Runtime_Math_exp(v8::internal::Arguments) + 1 7.7% 11.1% v8::internal::JSObject::LookupOwnRealNamedProperty(v8::internal::String*, v8::internal::LookupResult*) + 1 7.7% 11.1% v8::internal::HashTable<v8::internal::StringDictionaryShape, v8::internal::String*>::FindEntry(v8::internal::String*) + 1 7.7% 11.1% exp + + [Summary]: + ticks total nonlib name + 0 0.0% 0.0% JavaScript + 5 38.5% 55.6% C++ + 0 0.0% 0.0% GC + 4 30.8% Shared libraries + 2 15.4% Unaccounted + + [C++ entry points]: + ticks cpp total name + 2 40.0% 15.4% v8::internal::Runtime_Math_exp(v8::internal::Arguments) + 1 20.0% 7.7% v8::internal::JSObject::LookupOwnRealNamedProperty(v8::internal::String*, v8::internal::LookupResult*) + 1 20.0% 7.7% v8::internal::HashTable<v8::internal::StringDictionaryShape, v8::internal::String*>::FindEntry(v8::internal::String*) + 1 20.0% 7.7% exp + + [Bottom up (heavy) profile]: + Note: percentage shows a share of a particular caller in the total + amount of its parent calls. + Callers occupying less than 1.0% are not shown. + + ticks parent name + 3 23.1% /lib32/libm-2.7.so + 3 100.0% LazyCompile: exp native math.js:41 + 3 100.0% Script: exp.js + + 2 15.4% v8::internal::Runtime_Math_exp(v8::internal::Arguments) + 2 100.0% LazyCompile: exp native math.js:41 + 2 100.0% Script: exp.js + + 2 15.4% UNKNOWN + 1 50.0% LazyCompile: exp native math.js:41 + 1 100.0% Script: exp.js + + 1 7.7% v8::internal::JSObject::LookupOwnRealNamedProperty(v8::internal::String*, v8::internal::LookupResult*) + 1 100.0% Script: exp.js + + 1 7.7% v8::internal::HashTable<v8::internal::StringDictionaryShape, v8::internal::String*>::FindEntry(v8::internal::String*) + 1 100.0% Script: exp.js + + 1 7.7% ffffe000-fffff000 + + 1 7.7% exp + 1 100.0% LazyCompile: exp native math.js:41 + 1 100.0% Script: exp.js diff --git a/deps/v8/test/mjsunit/tools/tickprocessor.mjs b/deps/v8/test/mjsunit/tools/tickprocessor.mjs index 5ba23f51fc..29dc82dbaf 100644 --- a/deps/v8/test/mjsunit/tools/tickprocessor.mjs +++ b/deps/v8/test/mjsunit/tools/tickprocessor.mjs @@ -26,12 +26,19 @@ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // Resources: test/mjsunit/tools/tickprocessor-test-func-info.log +// Resources: test/mjsunit/tools/tickprocessor-test-func-info.log.symbols.json +// Resources: test/mjsunit/tools/tickprocessor-test-large.default +// Resources: test/mjsunit/tools/tickprocessor-test-large.log +// Resources: test/mjsunit/tools/tickprocessor-test-large.log.symbols.json // Resources: test/mjsunit/tools/tickprocessor-test.default // Resources: test/mjsunit/tools/tickprocessor-test.func-info // Resources: test/mjsunit/tools/tickprocessor-test.gc-state // Resources: test/mjsunit/tools/tickprocessor-test.ignore-unknown // Resources: test/mjsunit/tools/tickprocessor-test.log +// Resources: test/mjsunit/tools/tickprocessor-test.log.symbols.json // Resources: test/mjsunit/tools/tickprocessor-test.only-summary +// Resources: test/mjsunit/tools/tickprocessor-test.separate-baseline-handlers +// Resources: test/mjsunit/tools/tickprocessor-test.separate-bytecodes // Resources: test/mjsunit/tools/tickprocessor-test.separate-ic // Env: TEST_FILE_NAME @@ -353,87 +360,83 @@ import { })(); -function CppEntriesProviderMock() { -}; - - -CppEntriesProviderMock.prototype.parseVmSymbols = function( - name, startAddr, endAddr, slideAddr, symbolAdder) { - var symbols = { - 'shell': - [['v8::internal::JSObject::LookupOwnRealNamedProperty(v8::internal::String*, v8::internal::LookupResult*)', 0x080f8800, 0x080f8d90], - ['v8::internal::HashTable<v8::internal::StringDictionaryShape, v8::internal::String*>::FindEntry(v8::internal::String*)', 0x080f8210, 0x080f8800], - ['v8::internal::Runtime_Math_exp(v8::internal::Arguments)', 0x08123b20, 0x08123b80]], - '/lib32/libm-2.7.so': - [['exp', startAddr + 0x00009e80, startAddr + 0x00009e80 + 0xa3], - ['fegetexcept', startAddr + 0x000061e0, startAddr + 0x000061e0 + 0x15]], - 'ffffe000-fffff000': []}; - assertTrue(name in symbols); - var syms = symbols[name]; - for (var i = 0; i < syms.length; ++i) { - symbolAdder.apply(null, syms[i]); +class CppEntriesProviderMock { + constructor(filename) { + this.isLoaded = false; + this.symbols = JSON.parse(readFile(filename)); } -}; + parseVmSymbols(name, startAddr, endAddr, slideAddr, symbolAdder) { + if (this.isLoaded) return; + this.isLoaded = true; + for (let symbol of this.symbols) { + symbolAdder.apply(null, symbol); + } + } +} -function PrintMonitor(outputOrFileName) { - this.expectedOut = outputOrFileName; - this.outputFile = undefined; - if (typeof outputOrFileName == 'string') { - this.expectedOut = this.loadExpectedOutput(outputOrFileName) - this.outputFile = outputOrFileName; - } - var expectedOut = this.expectedOut; - var outputPos = 0; - var diffs = this.diffs = []; - var realOut = this.realOut = []; - var unexpectedOut = this.unexpectedOut = null; - - this.oldPrint = print; - print = function(str) { - var strSplit = str.split('\n'); - for (var i = 0; i < strSplit.length; ++i) { - var s = strSplit[i]; - realOut.push(s); - if (outputPos < expectedOut.length) { - if (expectedOut[outputPos] != s) { - diffs.push('line ' + outputPos + ': expected <' + - expectedOut[outputPos] + '> found <' + s + '>\n'); +class PrintMonitor { + constructor(outputOrFileName) { + this.expectedOut = outputOrFileName; + this.outputFile = undefined; + if (typeof outputOrFileName == 'string') { + this.expectedOut = this.loadExpectedOutput(outputOrFileName) + this.outputFile = outputOrFileName; + } + var expectedOut = this.expectedOut; + var outputPos = 0; + var diffs = this.diffs = []; + var realOut = this.realOut = []; + var unexpectedOut = this.unexpectedOut = null; + + this.oldPrint = print; + print = function(str) { + var strSplit = str.split('\n'); + for (var i = 0; i < strSplit.length; ++i) { + var s = strSplit[i]; + realOut.push(s); + if (outputPos < expectedOut.length) { + if (expectedOut[outputPos] != s) { + diffs.push('line ' + outputPos + ': expected <' + + expectedOut[outputPos] + '> found <' + s + '>\n'); + } + outputPos++; + } else { + unexpectedOut = true; } - outputPos++; - } else { - unexpectedOut = true; } - } - }; -}; - - -PrintMonitor.prototype.loadExpectedOutput = function(fileName) { - var output = readFile(fileName); - return output.split('\n'); -}; + }; + } + loadExpectedOutput(fileName) { + var output = readFile(fileName); + return output.split('\n'); + } -PrintMonitor.prototype.finish = function() { - print = this.oldPrint; - if (this.diffs.length > 0 || this.unexpectedOut != null) { - print("===== actual output: ====="); - print(this.realOut.join('\n')); - print("===== expected output: ====="); - if (this.outputFile) { - print("===== File: " + this.outputFile + " ====="); + finish() { + print = this.oldPrint; + if (this.diffs.length > 0 || this.unexpectedOut != null) { + console.log("===== actual output: ====="); + console.log(this.realOut.join('\n')); + console.log("===== expected output: ====="); + if (this.outputFile) { + console.log("===== File: " + this.outputFile + " ====="); + } + console.log(this.expectedOut.join('\n')); + if (this.diffs.length > 0) { + this.diffs.forEach(line => console.log(line)) + assertEquals([], this.diffs); + } + assertNull(this.unexpectedOut); } - print(this.expectedOut.join('\n')); - assertEquals([], this.diffs); - assertNull(this.unexpectedOut); } -}; +} function driveTickProcessorTest( separateIc, separateBytecodes, separateBuiltins, separateStubs, - ignoreUnknown, stateFilter, logInput, refOutput, onlySummary) { + separateBaselineHandlers, ignoreUnknown, stateFilter, logInput, + refOutput, onlySummary) { // TEST_FILE_NAME must be provided by test runner. assertEquals('string', typeof TEST_FILE_NAME); var pathLen = TEST_FILE_NAME.lastIndexOf('/'); @@ -441,22 +444,24 @@ function driveTickProcessorTest( pathLen = TEST_FILE_NAME.lastIndexOf('\\'); } assertTrue(pathLen != -1); - var testsPath = TEST_FILE_NAME.substr(0, pathLen + 1); - var tp = new TickProcessor(new CppEntriesProviderMock(), + const testsPath = TEST_FILE_NAME.substr(0, pathLen + 1); + const symbolsFile = testsPath + logInput + '.symbols.json'; + const tp = new TickProcessor(new CppEntriesProviderMock(symbolsFile), separateIc, separateBytecodes, separateBuiltins, separateStubs, + separateBaselineHandlers, TickProcessor.CALL_GRAPH_SIZE, ignoreUnknown, stateFilter, "0", "auto,auto", - false, + null, false, false, onlySummary); - var pm = new PrintMonitor(testsPath + refOutput); + const pm = new PrintMonitor(testsPath + refOutput); tp.processLogFileInTest(testsPath + logInput); tp.printStatistics(); pm.finish(); @@ -466,27 +471,36 @@ function driveTickProcessorTest( (function testProcessing() { var testData = { 'Default': [ - false, false, true, true, false, null, + false, false, true, true, false, false, null, 'tickprocessor-test.log', 'tickprocessor-test.default', false], + 'SeparateBytecodes': [ + false, true, true, true, false, false, null, + 'tickprocessor-test.log', 'tickprocessor-test.separate-bytecodes', false], + 'SeparateBaselineHandlers': [ + false, false, true, true, true, false, null, + 'tickprocessor-test.log', 'tickprocessor-test.separate-baseline-handlers', false], 'SeparateIc': [ - true, false, true, true, false, null, + true, false, true, true, false, false, null, 'tickprocessor-test.log', 'tickprocessor-test.separate-ic', false], 'IgnoreUnknown': [ - false, false, true, true, true, null, + false, false, true, true, false, true, null, 'tickprocessor-test.log', 'tickprocessor-test.ignore-unknown', false], 'GcState': [ - false, false, true, true, false, TickProcessor.VmStates.GC, + false, false, true, true, false, false, TickProcessor.VmStates.GC, 'tickprocessor-test.log', 'tickprocessor-test.gc-state', false], + 'OnlySummary': [ + false, false, true, true, false, false, null, + 'tickprocessor-test.log', 'tickprocessor-test.only-summary', true], 'FunctionInfo': [ - false, false, true, true, false, null, + false, false, true, true, false, false, null, 'tickprocessor-test-func-info.log', 'tickprocessor-test.func-info', false], - 'OnlySummary': [ - false, false, true, true, false, null, - 'tickprocessor-test.log', 'tickprocessor-test.only-summary', true] + 'DefaultLarge': [ + false, false, true, true, false, false, null, + 'tickprocessor-test-large.log', 'tickprocessor-test-large.default', false], }; for (var testName in testData) { - print('=== testProcessing-' + testName + ' ==='); - driveTickProcessorTest.apply(null, testData[testName]); + console.log('=== testProcessing-' + testName + ' ==='); + driveTickProcessorTest(...testData[testName]); } })(); diff --git a/deps/v8/test/mjsunit/typedarray-growablesharedarraybuffer.js b/deps/v8/test/mjsunit/typedarray-growablesharedarraybuffer.js new file mode 100644 index 0000000000..d4d76bf83b --- /dev/null +++ b/deps/v8/test/mjsunit/typedarray-growablesharedarraybuffer.js @@ -0,0 +1,354 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --harmony-rab-gsab --allow-natives-syntax + +"use strict"; + +class MyUint8Array extends Uint8Array {}; + +const ctors = [ + Uint8Array, + Int8Array, + Uint16Array, + Int16Array, + Int32Array, + Float32Array, + Float64Array, + Uint8ClampedArray, + BigUint64Array, + BigInt64Array, + MyUint8Array +]; + +(function TypedArrayPrototype() { + const gsab = new GrowableSharedArrayBuffer(40, 80); + const sab = new SharedArrayBuffer(80); + + for (let ctor of ctors) { + const ta_gsab = new ctor(gsab, 0, 3); + const ta_sab = new ctor(sab, 0, 3); + assertEquals(ta_gsab.__proto__, ta_sab.__proto__); + } +})(); + +(function TypedArrayLengthAndByteLength() { + const gsab = new GrowableSharedArrayBuffer(40, 80); + + for (let ctor of ctors) { + const ta = new ctor(gsab, 0, 3); + assertEquals(gsab, ta.buffer); + assertEquals(3, ta.length); + assertEquals(3 * ctor.BYTES_PER_ELEMENT, ta.byteLength); + + const empty_ta = new ctor(gsab, 0, 0); + assertEquals(gsab, empty_ta.buffer); + assertEquals(0, empty_ta.length); + assertEquals(0, empty_ta.byteLength); + + const ta_with_offset = new ctor(gsab, 2 * ctor.BYTES_PER_ELEMENT, 3); + assertEquals(gsab, ta_with_offset.buffer); + assertEquals(3, ta_with_offset.length); + assertEquals(3 * ctor.BYTES_PER_ELEMENT, ta_with_offset.byteLength); + + const empty_ta_with_offset = new ctor(gsab, 2 * ctor.BYTES_PER_ELEMENT, 0); + assertEquals(gsab, empty_ta_with_offset.buffer); + assertEquals(0, empty_ta_with_offset.length); + assertEquals(0, empty_ta_with_offset.byteLength); + + const length_tracking_ta = new ctor(gsab); + assertEquals(gsab, length_tracking_ta.buffer); + assertEquals(40 / ctor.BYTES_PER_ELEMENT, length_tracking_ta.length); + assertEquals(40, length_tracking_ta.byteLength); + + const offset = 8; + const length_tracking_ta_with_offset = new ctor(gsab, offset); + assertEquals(gsab, length_tracking_ta_with_offset.buffer); + assertEquals((40 - offset) / ctor.BYTES_PER_ELEMENT, + length_tracking_ta_with_offset.length); + assertEquals(40 - offset, length_tracking_ta_with_offset.byteLength); + + const length_tracking_ta_zero = new ctor(gsab, 40); + assertEquals(gsab, length_tracking_ta_zero.buffer); + assertEquals(0, length_tracking_ta_zero.length); + assertEquals(0, length_tracking_ta_zero.byteLength); + } +})(); + +(function ConstructInvalid() { + const gsab = new GrowableSharedArrayBuffer(40, 80); + + for (let ctor of ctors) { + // Length too big. + assertThrows(() => { new ctor(gsab, 0, 40 / ctor.BYTES_PER_ELEMENT + 1); }, + RangeError); + + // Offset too close to the end. + assertThrows(() => { new ctor(gsab, 40 - ctor.BYTES_PER_ELEMENT, 2); }, + RangeError); + + // Offset beyond end. + assertThrows(() => { new ctor(gsab, 40, 1); }, RangeError); + + if (ctor.BYTES_PER_ELEMENT > 1) { + // Offset not a multiple of ctor.BYTES_PER_ELEMENT. + assertThrows(() => { new ctor(gsab, 1, 1); }, RangeError); + assertThrows(() => { new ctor(gsab, 1); }, RangeError); + } + } + + // Verify the error messages. + assertThrows(() => { new Int16Array(gsab, 1, 1); }, RangeError, + /start offset of Int16Array should be a multiple of 2/); + + assertThrows(() => { new Int16Array(gsab, 38, 2); }, RangeError, + /Invalid typed array length: 2/); +})(); + +(function TypedArrayLengthWhenGrown1() { + const gsab = new GrowableSharedArrayBuffer(16, 40); + + // Create TAs which cover the bytes 0-7. + let tas_and_lengths = []; + for (let ctor of ctors) { + const length = 8 / ctor.BYTES_PER_ELEMENT; + tas_and_lengths.push([new ctor(gsab, 0, length), length]); + } + + for (let [ta, length] of tas_and_lengths) { + assertEquals(length, ta.length); + assertEquals(length * ta.BYTES_PER_ELEMENT, ta.byteLength); + } + + gsab.grow(20); + + for (let [ta, length] of tas_and_lengths) { + assertEquals(length, ta.length); + assertEquals(length * ta.BYTES_PER_ELEMENT, ta.byteLength); + } + + gsab.grow(40); + + for (let [ta, length] of tas_and_lengths) { + assertEquals(length, ta.length); + assertEquals(length * ta.BYTES_PER_ELEMENT, ta.byteLength); + } +})(); + +// The previous test with offsets. +(function TypedArrayLengthWhenGrown2() { + const gsab = new GrowableSharedArrayBuffer(20, 40); + + // Create TAs which cover the bytes 8-15. + let tas_and_lengths = []; + for (let ctor of ctors) { + const length = 8 / ctor.BYTES_PER_ELEMENT; + tas_and_lengths.push([new ctor(gsab, 8, length), length]); + } + + for (let [ta, length] of tas_and_lengths) { + assertEquals(length, ta.length); + assertEquals(length * ta.BYTES_PER_ELEMENT, ta.byteLength); + } + + gsab.grow(20); + + for (let [ta, length] of tas_and_lengths) { + assertEquals(length, ta.length); + assertEquals(length * ta.BYTES_PER_ELEMENT, ta.byteLength); + } + + gsab.grow(40); + + for (let [ta, length] of tas_and_lengths) { + assertEquals(length, ta.length); + assertEquals(length * ta.BYTES_PER_ELEMENT, ta.byteLength); + } +})(); + +(function LengthTracking1() { + const gsab = new GrowableSharedArrayBuffer(16, 40); + + let tas = []; + for (let ctor of ctors) { + tas.push(new ctor(gsab)); + } + + for (let ta of tas) { + assertEquals(16 / ta.BYTES_PER_ELEMENT, ta.length); + assertEquals(16, ta.byteLength); + } + + gsab.grow(24); + for (let ta of tas) { + assertEquals(24 / ta.BYTES_PER_ELEMENT, ta.length); + assertEquals(24, ta.byteLength); + } + + // Grow to a number which is not a multiple of all byte_lengths. + gsab.grow(26); + for (let ta of tas) { + const expected_length = Math.floor(26 / ta.BYTES_PER_ELEMENT); + assertEquals(expected_length, ta.length); + assertEquals(expected_length * ta.BYTES_PER_ELEMENT, ta.byteLength); + } + + gsab.grow(40); + + for (let ta of tas) { + assertEquals(40 / ta.BYTES_PER_ELEMENT, ta.length); + assertEquals(40, ta.byteLength); + } +})(); + +// The previous test with offsets. +(function LengthTracking2() { + const gsab = new GrowableSharedArrayBuffer(16, 40); + + const offset = 8; + let tas = []; + for (let ctor of ctors) { + tas.push(new ctor(gsab, offset)); + } + + for (let ta of tas) { + assertEquals((16 - offset) / ta.BYTES_PER_ELEMENT, ta.length); + assertEquals(16 - offset, ta.byteLength); + } + + gsab.grow(24); + for (let ta of tas) { + assertEquals((24 - offset) / ta.BYTES_PER_ELEMENT, ta.length); + assertEquals(24 - offset, ta.byteLength); + } + + // Grow to a number which is not a multiple of all byte_lengths. + gsab.grow(26); + for (let ta of tas) { + const expected_length = Math.floor((26 - offset)/ ta.BYTES_PER_ELEMENT); + assertEquals(expected_length, ta.length); + assertEquals(expected_length * ta.BYTES_PER_ELEMENT, ta.byteLength); + } + + gsab.grow(40); + + for (let ta of tas) { + assertEquals((40 - offset) / ta.BYTES_PER_ELEMENT, ta.length); + assertEquals(40 - offset, ta.byteLength); + } +})(); + +(function LoadWithFeedback() { + function ReadElement2(ta) { + return ta[2]; + } + %EnsureFeedbackVectorForFunction(ReadElement2); + + const gsab = new GrowableSharedArrayBuffer(16, 40); + + const i8a = new Int8Array(gsab, 0, 4); + for (let i = 0; i < 3; ++i) { + assertEquals(0, ReadElement2(i8a)); + } + + // Within-bounds write + for (let i = 0; i < 4; ++i) { + i8a[i] = i; + } + + // Within-bounds read + for (let i = 0; i < 3; ++i) { + assertEquals(2, ReadElement2(i8a)); + } + + gsab.grow(20); + + // Within-bounds read + for (let i = 0; i < 3; ++i) { + assertEquals(2, ReadElement2(i8a)); + } + + gsab.grow(40); + + // Within-bounds read + for (let i = 0; i < 3; ++i) { + assertEquals(2, ReadElement2(i8a)); + } +})(); + +(function LoadAndStoreWithFeedback() { + function ReadElement(ta, i) { + return ta[i]; + } + + function HasElement(ta, i) { + return i in ta; + } + + function WriteElement(ta, i, v) { + ta[i] = v; + } + + %EnsureFeedbackVectorForFunction(ReadElement); + %EnsureFeedbackVectorForFunction(HasElement); + %EnsureFeedbackVectorForFunction(WriteElement); + + const gsab = new GrowableSharedArrayBuffer(16, 40); + + const i8a = new Int8Array(gsab); // length-tracking + assertEquals(16, i8a.length); + + // Within-bounds read + for (let i = 0; i < i8a.length; ++i) { + assertEquals(0, ReadElement(i8a, i)); + assertTrue(HasElement(i8a, i)); + } + assertFalse(HasElement(i8a, 17)); + + // Within-bounds write + for (let i = 0; i < i8a.length; ++i) { + WriteElement(i8a, i, i); + } + + // Within-bounds read + for (let i = 0; i < i8a.length; ++i) { + assertEquals(i, ReadElement(i8a, i)); + } + + let old_length = i8a.length; + gsab.grow(20); + assertEquals(20, i8a.length); + + for (let i = 0; i < i8a.length; ++i) { + if (i < old_length) { + assertEquals(i, ReadElement(i8a, i)); + } else { + assertEquals(0, ReadElement(i8a, i)); + } + assertTrue(HasElement(i8a, i)); + } + assertFalse(HasElement(i8a, 21)); + + // Within-bounds write + for (let i = 0; i < i8a.length; ++i) { + WriteElement(i8a, i, i + 1); + } + + // Within-bounds read + for (let i = 0; i < i8a.length; ++i) { + assertEquals(i + 1, ReadElement(i8a, i)); + } +})(); + +(function EnumerateElements() { + let gsab = new GrowableSharedArrayBuffer(100, 200); + for (let ctor of ctors) { + const ta = new ctor(gsab, 0, 3); + let keys = ''; + for (const key in ta) { + keys += key; + } + assertEquals('012', keys); + } +}()); diff --git a/deps/v8/test/mjsunit/typedarray-resizablearraybuffer-detach.js b/deps/v8/test/mjsunit/typedarray-resizablearraybuffer-detach.js new file mode 100644 index 0000000000..95e2a99ecd --- /dev/null +++ b/deps/v8/test/mjsunit/typedarray-resizablearraybuffer-detach.js @@ -0,0 +1,138 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --harmony-rab-gsab --allow-natives-syntax + +"use strict"; + +class MyUint8Array extends Uint8Array {}; + +const ctors = [ + Uint8Array, + Int8Array, + Uint16Array, + Int16Array, + Int32Array, + Float32Array, + Float64Array, + Uint8ClampedArray, + BigUint64Array, + BigInt64Array, + MyUint8Array +]; + +(function ConstructorThrowsIfBufferDetached() { + const rab = new ResizableArrayBuffer(40, 80); + %ArrayBufferDetach(rab); + + for (let ctor of ctors) { + assertThrows(() => { ctor(rab); }, TypeError); + assertThrows(() => { ctor(rab, 8); }, TypeError); + assertThrows(() => { ctor(rab, 8, 1); }, TypeError); + } +})(); + +(function TypedArrayLengthAndByteLength() { + const rab = new ResizableArrayBuffer(40, 80); + + let tas = []; + for (let ctor of ctors) { + tas.push(new ctor(rab, 0, 3)); + tas.push(new ctor(rab, 8, 3)); + tas.push(new ctor(rab)); + tas.push(new ctor(rab, 8)); + } + + %ArrayBufferDetach(rab); + + for (let ta of tas) { + assertEquals(0, ta.length); + assertEquals(0, ta.byteLength); + } +})(); + +(function AccessDetachedTypedArray() { + const rab = new ResizableArrayBuffer(16, 40); + + const i8a = new Int8Array(rab, 0, 4); + + // Initial values + for (let i = 0; i < 4; ++i) { + assertEquals(0, i8a[i]); + } + + // Within-bounds write + for (let i = 0; i < 4; ++i) { + i8a[i] = i; + } + + %ArrayBufferDetach(rab); + + // OOB read + for (let i = 0; i < 4; ++i) { + assertEquals(undefined, i8a[i]); + } + + // OOB write (has no effect) + for (let i = 0; i < 4; ++i) { + i8a[i] = 10; + } + + for (let i = 0; i < 4; ++i) { + assertEquals(undefined, i8a[i]); + } +})(); + +(function LoadFromOutOfScopeTypedArrayWithFeedback() { + function ReadElement2(ta) { + return ta[2]; + } + %EnsureFeedbackVectorForFunction(ReadElement2); + + const rab = new ResizableArrayBuffer(16, 40); + + const i8a = new Int8Array(rab, 0, 4); + assertEquals(0, ReadElement2(i8a)); + + // Within-bounds write + for (let i = 0; i < 4; ++i) { + i8a[i] = i; + } + + %ArrayBufferDetach(rab); + + // OOB read + for (let i = 0; i < 3; ++i) { + assertEquals(undefined, ReadElement2(i8a)); + } +})(); + +(function StoreToOutOfScopeTypedArrayWithFeedback() { + function WriteElement2(ta, i) { + ta[2] = i; + } + %EnsureFeedbackVectorForFunction(WriteElement2); + + const rab = new ResizableArrayBuffer(16, 40); + + const i8a = new Int8Array(rab, 0, 4); + assertEquals(0, i8a[2]); + + // Within-bounds write + for (let i = 0; i < 3; ++i) { + WriteElement2(i8a, 3); + } + + %ArrayBufferDetach(rab); + + // OOB write (has no effect) + for (let i = 0; i < 3; ++i) { + WriteElement2(i8a, 4); + } + + // OOB read + for (let i = 0; i < 3; ++i) { + assertEquals(undefined, i8a[2]); + } +})(); diff --git a/deps/v8/test/mjsunit/typedarray-resizablearraybuffer.js b/deps/v8/test/mjsunit/typedarray-resizablearraybuffer.js new file mode 100644 index 0000000000..6e6b1b1e3a --- /dev/null +++ b/deps/v8/test/mjsunit/typedarray-resizablearraybuffer.js @@ -0,0 +1,605 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --harmony-rab-gsab --allow-natives-syntax + +"use strict"; + +class MyUint8Array extends Uint8Array {}; + +const ctors = [ + Uint8Array, + Int8Array, + Uint16Array, + Int16Array, + Int32Array, + Float32Array, + Float64Array, + Uint8ClampedArray, + BigUint64Array, + BigInt64Array, + MyUint8Array +]; + +(function TypedArrayPrototype() { + const rab = new ResizableArrayBuffer(40, 80); + const ab = new ArrayBuffer(80); + + for (let ctor of ctors) { + const ta_rab = new ctor(rab, 0, 3); + const ta_ab = new ctor(ab, 0, 3); + assertEquals(ta_rab.__proto__, ta_ab.__proto__); + } +})(); + +(function TypedArrayLengthAndByteLength() { + const rab = new ResizableArrayBuffer(40, 80); + + for (let ctor of ctors) { + const ta = new ctor(rab, 0, 3); + assertEquals(rab, ta.buffer); + assertEquals(3, ta.length); + assertEquals(3 * ctor.BYTES_PER_ELEMENT, ta.byteLength); + + const empty_ta = new ctor(rab, 0, 0); + assertEquals(rab, empty_ta.buffer); + assertEquals(0, empty_ta.length); + assertEquals(0, empty_ta.byteLength); + + const ta_with_offset = new ctor(rab, 2 * ctor.BYTES_PER_ELEMENT, 3); + assertEquals(rab, ta_with_offset.buffer); + assertEquals(3, ta_with_offset.length); + assertEquals(3 * ctor.BYTES_PER_ELEMENT, ta_with_offset.byteLength); + + const empty_ta_with_offset = new ctor(rab, 2 * ctor.BYTES_PER_ELEMENT, 0); + assertEquals(rab, empty_ta_with_offset.buffer); + assertEquals(0, empty_ta_with_offset.length); + assertEquals(0, empty_ta_with_offset.byteLength); + + const length_tracking_ta = new ctor(rab); + assertEquals(rab, length_tracking_ta.buffer); + assertEquals(40 / ctor.BYTES_PER_ELEMENT, length_tracking_ta.length); + assertEquals(40, length_tracking_ta.byteLength); + + const offset = 8; + const length_tracking_ta_with_offset = new ctor(rab, offset); + assertEquals(rab, length_tracking_ta_with_offset.buffer); + assertEquals((40 - offset) / ctor.BYTES_PER_ELEMENT, + length_tracking_ta_with_offset.length); + assertEquals(40 - offset, length_tracking_ta_with_offset.byteLength); + + const empty_length_tracking_ta_with_offset = new ctor(rab, 40); + assertEquals(rab, empty_length_tracking_ta_with_offset.buffer); + assertEquals(0, empty_length_tracking_ta_with_offset.length); + assertEquals(0, empty_length_tracking_ta_with_offset.byteLength); + } +})(); + +(function ConstructInvalid() { + const rab = new ResizableArrayBuffer(40, 80); + + for (let ctor of ctors) { + // Length too big. + assertThrows(() => { new ctor(rab, 0, 40 / ctor.BYTES_PER_ELEMENT + 1); }, + RangeError); + + // Offset too close to the end. + assertThrows(() => { new ctor(rab, 40 - ctor.BYTES_PER_ELEMENT, 2); }, + RangeError); + + // Offset beyond end. + assertThrows(() => { new ctor(rab, 40, 1); }, RangeError); + + if (ctor.BYTES_PER_ELEMENT > 1) { + // Offset not a multiple of the byte size. + assertThrows(() => { new ctor(rab, 1, 1); }, RangeError); + assertThrows(() => { new ctor(rab, 1); }, RangeError); + } + } + + // Verify the error messages. + assertThrows(() => { new Int16Array(rab, 1, 1); }, RangeError, + /start offset of Int16Array should be a multiple of 2/); + + assertThrows(() => { new Int16Array(rab, 38, 2); }, RangeError, + /Invalid typed array length: 2/); +})(); + +(function TypedArrayLengthWhenResizedOutOfBounds1() { + const rab = new ResizableArrayBuffer(16, 40); + + // Create TAs which cover the bytes 0-7. + let tas_and_lengths = []; + for (let ctor of ctors) { + const length = 8 / ctor.BYTES_PER_ELEMENT; + tas_and_lengths.push([new ctor(rab, 0, length), length]); + } + + for (let [ta, length] of tas_and_lengths) { + assertEquals(length, ta.length); + assertEquals(length * ta.BYTES_PER_ELEMENT, ta.byteLength); + } + + rab.resize(2); + + for (let [ta, length] of tas_and_lengths) { + assertEquals(0, ta.length); + assertEquals(0, ta.byteLength); + } + + // Resize the rab so that it just barely covers the needed 8 bytes. + rab.resize(8); + + for (let [ta, length] of tas_and_lengths) { + assertEquals(length, ta.length); + assertEquals(length * ta.BYTES_PER_ELEMENT, ta.byteLength); + } + + rab.resize(40); + + for (let [ta, length] of tas_and_lengths) { + assertEquals(length, ta.length); + assertEquals(length * ta.BYTES_PER_ELEMENT, ta.byteLength); + } +})(); + +// The previous test with offsets. +(function TypedArrayLengthWhenResizedOutOfBounds2() { + const rab = new ResizableArrayBuffer(20, 40); + + // Create TAs which cover the bytes 8-15. + let tas_and_lengths = []; + for (let ctor of ctors) { + const length = 8 / ctor.BYTES_PER_ELEMENT; + tas_and_lengths.push([new ctor(rab, 8, length), length]); + } + + for (let [ta, length] of tas_and_lengths) { + assertEquals(length, ta.length); + assertEquals(length * ta.BYTES_PER_ELEMENT, ta.byteLength); + } + + rab.resize(10); + + for (let [ta, length] of tas_and_lengths) { + assertEquals(0, ta.length); + assertEquals(0, ta.byteLength); + } + + // Resize the rab so that it just barely covers the needed 8 bytes. + rab.resize(16); + + for (let [ta, length] of tas_and_lengths) { + assertEquals(length, ta.length); + assertEquals(length * ta.BYTES_PER_ELEMENT, ta.byteLength); + } + + rab.resize(40); + + for (let [ta, length] of tas_and_lengths) { + assertEquals(length, ta.length); + assertEquals(length * ta.BYTES_PER_ELEMENT, ta.byteLength); + } +})(); + +(function LengthTracking1() { + const rab = new ResizableArrayBuffer(16, 40); + + let tas = []; + for (let ctor of ctors) { + tas.push(new ctor(rab)); + } + + for (let ta of tas) { + assertEquals(16 / ta.BYTES_PER_ELEMENT, ta.length); + assertEquals(16, ta.byteLength); + } + + rab.resize(40); + for (let ta of tas) { + assertEquals(40 / ta.BYTES_PER_ELEMENT, ta.length); + assertEquals(40, ta.byteLength); + } + + // Resize to a number which is not a multiple of all byte_lengths. + rab.resize(19); + for (let ta of tas) { + const expected_length = Math.floor(19 / ta.BYTES_PER_ELEMENT); + assertEquals(expected_length, ta.length); + assertEquals(expected_length * ta.BYTES_PER_ELEMENT, ta.byteLength); + } + + rab.resize(1); + + for (let ta of tas) { + if (ta.BYTES_PER_ELEMENT == 1) { + assertEquals(1, ta.length); + assertEquals(1, ta.byteLength); + } else { + assertEquals(0, ta.length); + assertEquals(0, ta.byteLength); + } + } + + rab.resize(0); + + for (let ta of tas) { + assertEquals(0, ta.length); + assertEquals(0, ta.byteLength); + } + + rab.resize(8); + + for (let ta of tas) { + assertEquals(8 / ta.BYTES_PER_ELEMENT, ta.length); + assertEquals(8, ta.byteLength); + } + + rab.resize(40); + + for (let ta of tas) { + assertEquals(40 / ta.BYTES_PER_ELEMENT, ta.length); + assertEquals(40, ta.byteLength); + } +})(); + +// The previous test with offsets. +(function LengthTracking2() { + const rab = new ResizableArrayBuffer(16, 40); + + const offset = 8; + let tas = []; + for (let ctor of ctors) { + tas.push(new ctor(rab, offset)); + } + + for (let ta of tas) { + assertEquals((16 - offset) / ta.BYTES_PER_ELEMENT, ta.length); + assertEquals(16 - offset, ta.byteLength); + } + + rab.resize(40); + for (let ta of tas) { + assertEquals((40 - offset) / ta.BYTES_PER_ELEMENT, ta.length); + assertEquals(40 - offset, ta.byteLength); + } + + // Resize to a number which is not a multiple of all byte_lengths. + rab.resize(20); + for (let ta of tas) { + const expected_length = Math.floor((20 - offset)/ ta.BYTES_PER_ELEMENT); + assertEquals(expected_length, ta.length); + assertEquals(expected_length * ta.BYTES_PER_ELEMENT, ta.byteLength); + } + + // Resize so that all TypedArrays go out of bounds (because of the offset). + rab.resize(7); + + for (let ta of tas) { + assertEquals(0, ta.length); + assertEquals(0, ta.byteLength); + } + + rab.resize(0); + + for (let ta of tas) { + assertEquals(0, ta.length); + assertEquals(0, ta.byteLength); + } + + rab.resize(8); + + for (let ta of tas) { + assertEquals(0, ta.length); + assertEquals(0, ta.byteLength); + } + + // Resize so that the TypedArrays which have element size > 1 go out of bounds + // (because less than 1 full element would fit). + rab.resize(offset + 1); + + for (let ta of tas) { + if (ta.BYTES_PER_ELEMENT == 1) { + assertEquals(1, ta.length); + assertEquals(1, ta.byteLength); + } else { + assertEquals(0, ta.length); + assertEquals(0, ta.byteLength); + } + } + + rab.resize(40); + + for (let ta of tas) { + assertEquals((40 - offset) / ta.BYTES_PER_ELEMENT, ta.length); + assertEquals(40 - offset, ta.byteLength); + } +})(); + +(function AccessOutOfBoundsTypedArray() { + for (let ctor of ctors) { + if (ctor.BYTES_PER_ELEMENT != 1) { + continue; + } + const rab = new ResizableArrayBuffer(16, 40); + const array = new ctor(rab, 0, 4); + + // Initial values + for (let i = 0; i < 4; ++i) { + assertEquals(0, array[i]); + } + + // Within-bounds write + for (let i = 0; i < 4; ++i) { + array[i] = i; + } + + // Within-bounds read + for (let i = 0; i < 4; ++i) { + assertEquals(i, array[i]); + } + + rab.resize(2); + + // OOB read. If the RAB isn't large enough to fit the entire TypedArray, + // the length of the TypedArray is treated as 0. + for (let i = 0; i < 4; ++i) { + assertEquals(undefined, array[i]); + } + + // OOB write (has no effect) + for (let i = 0; i < 4; ++i) { + array[i] = 10; + } + + rab.resize(4); + + // Within-bounds read + for (let i = 0; i < 2; ++i) { + assertEquals(i, array[i]); + } + // The shrunk-and-regrown part got zeroed. + for (let i = 2; i < 4; ++i) { + assertEquals(0, array[i]); + } + + rab.resize(40); + + // Within-bounds read + for (let i = 0; i < 2; ++i) { + assertEquals(i, array[i]); + } + for (let i = 2; i < 4; ++i) { + assertEquals(0, array[i]); + } + } +})(); + +(function OutOfBoundsTypedArrayAndHas() { + for (let ctor of ctors) { + if (ctor.BYTES_PER_ELEMENT != 1) { + continue; + } + const rab = new ResizableArrayBuffer(16, 40); + const array = new ctor(rab, 0, 4); + + // Within-bounds read + for (let i = 0; i < 4; ++i) { + assertTrue(i in array); + } + + rab.resize(2); + + // OOB read. If the RAB isn't large enough to fit the entire TypedArray, + // the length of the TypedArray is treated as 0. + for (let i = 0; i < 4; ++i) { + assertFalse(i in array); + } + + rab.resize(4); + + // Within-bounds read + for (let i = 0; i < 4; ++i) { + assertTrue(i in array); + } + + rab.resize(40); + + // Within-bounds read + for (let i = 0; i < 4; ++i) { + assertTrue(i in array); + } + } +})(); + +(function LoadFromOutOfBoundsTypedArrayWithFeedback() { + function ReadElement2(ta) { + return ta[2]; + } + %EnsureFeedbackVectorForFunction(ReadElement2); + + const rab = new ResizableArrayBuffer(16, 40); + + const i8a = new Int8Array(rab, 0, 4); + for (let i = 0; i < 3; ++i) { + assertEquals(0, ReadElement2(i8a)); + } + + // Within-bounds write + for (let i = 0; i < 4; ++i) { + i8a[i] = i; + } + + // Within-bounds read + for (let i = 0; i < 3; ++i) { + assertEquals(2, ReadElement2(i8a)); + } + + rab.resize(2); + + // OOB read + for (let i = 0; i < 3; ++i) { + assertEquals(undefined, ReadElement2(i8a)); + } + + rab.resize(4); + + // Within-bounds read (the memory got zeroed) + for (let i = 0; i < 3; ++i) { + assertEquals(0, ReadElement2(i8a)); + } + + i8a[2] = 3; + for (let i = 0; i < 3; ++i) { + assertEquals(3, ReadElement2(i8a)); + } + + rab.resize(40); + + // Within-bounds read + for (let i = 0; i < 3; ++i) { + assertEquals(3, ReadElement2(i8a)); + } +})(); + +(function HasAndOutOfBoundsTypedArrayWithFeedback() { + function HasElement2(ta) { + return 2 in ta; + } + %EnsureFeedbackVectorForFunction(HasElement2); + + const rab = new ResizableArrayBuffer(16, 40); + + const i8a = new Int8Array(rab, 0, 4); + + // Within-bounds read + for (let i = 0; i < 3; ++i) { + assertTrue(HasElement2(i8a)); + } + + rab.resize(2); + + // OOB read + for (let i = 0; i < 3; ++i) { + assertFalse(HasElement2(i8a)); + } + rab.resize(4); + + // Within-bounds read + for (let i = 0; i < 3; ++i) { + assertTrue(HasElement2(i8a)); + } + + rab.resize(40); + + // Within-bounds read + for (let i = 0; i < 3; ++i) { + assertTrue(HasElement2(i8a)); + } +})(); + +(function StoreToOutOfBoundsTypedArrayWithFeedback() { + function WriteElement2(ta, i) { + ta[2] = i; + } + %EnsureFeedbackVectorForFunction(WriteElement2); + + const rab = new ResizableArrayBuffer(16, 40); + + const i8a = new Int8Array(rab, 0, 4); + assertEquals(0, i8a[2]); + + // Within-bounds write + for (let i = 0; i < 3; ++i) { + WriteElement2(i8a, 3); + } + // Within-bounds read + for (let i = 0; i < 3; ++i) { + assertEquals(3, i8a[2]); + } + + rab.resize(2); + + // OOB write (has no effect) + for (let i = 0; i < 3; ++i) { + WriteElement2(i8a, 4); + } + + rab.resize(4); + + // Within-bounds read (the memory got zeroed) + for (let i = 0; i < 3; ++i) { + assertEquals(0, i8a[2]); + } + + // Within-bounds write + for (let i = 0; i < 3; ++i) { + WriteElement2(i8a, 5); + } + + rab.resize(40); + + // Within-bounds read + for (let i = 0; i < 3; ++i) { + assertEquals(5, i8a[2]); + } +})(); + +(function OOBBehavesLikeDetached() { + function ReadElement2(ta) { + return ta[2]; + } + function HasElement2(ta) { + return 2 in ta; + } + + const rab = new ResizableArrayBuffer(16, 40); + const i8a = new Int8Array(rab, 0, 4); + i8a.__proto__ = {2: 'wrong value'}; + i8a[2] = 10; + assertEquals(10, ReadElement2(i8a)); + assertTrue(HasElement2(i8a)); + + rab.resize(0); + assertEquals(undefined, ReadElement2(i8a)); + assertFalse(HasElement2(i8a)); +})(); + +(function OOBBehavesLikeDetachedWithFeedback() { + function ReadElement2(ta) { + return ta[2]; + } + function HasElement2(ta) { + return 2 in ta; + } + %EnsureFeedbackVectorForFunction(ReadElement2); + %EnsureFeedbackVectorForFunction(HasElement2); + + const rab = new ResizableArrayBuffer(16, 40); + const i8a = new Int8Array(rab, 0, 4); + i8a.__proto__ = {2: 'wrong value'}; + i8a[2] = 10; + for (let i = 0; i < 3; ++i) { + assertEquals(10, ReadElement2(i8a)); + assertTrue(HasElement2(i8a)); + } + rab.resize(0); + + for (let i = 0; i < 3; ++i) { + assertEquals(undefined, ReadElement2(i8a)); + assertFalse(HasElement2(i8a)); + } +})(); + +(function EnumerateElements() { + let rab = new ResizableArrayBuffer(100, 200); + for (let ctor of ctors) { + const ta = new ctor(rab, 0, 3); + let keys = ''; + for (const key in ta) { + keys += key; + } + assertEquals('012', keys); + } +}()); diff --git a/deps/v8/test/mjsunit/wasm/async-compile.js b/deps/v8/test/mjsunit/wasm/async-compile.js index 4660ec7986..6da5184a1b 100644 --- a/deps/v8/test/mjsunit/wasm/async-compile.js +++ b/deps/v8/test/mjsunit/wasm/async-compile.js @@ -67,7 +67,7 @@ assertPromiseResult(async function badFunctionInTheMiddle() { await assertCompileError( buffer, 'Compiling function #10:\"bad\" failed: ' + - 'expected 1 elements on the stack for fallthru to @1, found 0 @+94'); + 'expected 1 elements on the stack for fallthru, found 0 @+94'); }()); assertPromiseResult(async function importWithoutCode() { diff --git a/deps/v8/test/mjsunit/wasm/bulk-memory.js b/deps/v8/test/mjsunit/wasm/bulk-memory.js index 2e41fa9ee0..d4ad5ce0bd 100644 --- a/deps/v8/test/mjsunit/wasm/bulk-memory.js +++ b/deps/v8/test/mjsunit/wasm/bulk-memory.js @@ -2,9 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Flags: --experimental-wasm-bulk-memory - -load("test/mjsunit/wasm/wasm-module-builder.js"); +load('test/mjsunit/wasm/wasm-module-builder.js'); (function TestPassiveDataSegment() { const builder = new WasmModuleBuilder(); @@ -29,7 +27,7 @@ load("test/mjsunit/wasm/wasm-module-builder.js"); function getMemoryInit(mem, segment_data) { const builder = new WasmModuleBuilder(); - builder.addImportedMemory("", "mem", 0); + builder.addImportedMemory('', 'mem', 0); builder.addPassiveDataSegment(segment_data); builder.addFunction('init', kSig_v_iii) .addBody([ @@ -160,7 +158,7 @@ function getMemoryFill(mem) { (function TestElemDropActive() { const builder = new WasmModuleBuilder(); builder.setTableBounds(5, 5); - builder.addElementSegment(0, 0, false, [0, 0, 0]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(0), [0, 0, 0]); builder.addFunction('drop', kSig_v_v) .addBody([ kNumericPrefix, kExprElemDrop, @@ -185,7 +183,8 @@ function getMemoryFill(mem) { assertEquals(0, view[kPageSize - 1]); // Instantiation fails, memory remains unmodified. - assertThrows(() => builder.instantiate({m: {memory}}), WebAssembly.RuntimeError); + assertThrows( + () => builder.instantiate({m: {memory}}), WebAssembly.RuntimeError); assertEquals(0, view[kPageSize - 1]); // The second segment is not initialized. @@ -203,14 +202,17 @@ function getMemoryFill(mem) { const f = builder.addFunction('f', kSig_i_v).addBody([kExprI32Const, 42]); const tableIndex = 0; - const isGlobal = false; - builder.addElementSegment(tableIndex, 0, isGlobal, [f.index, f.index]); + builder.addActiveElementSegment( + tableIndex, + WasmInitExpr.I32Const(0), + [f.index, f.index]); builder.addDataSegment(0, [42]); // Instantiation fails, but still modifies the table. The memory is not // modified, since data segments are initialized after element segments. assertThrows( - () => builder.instantiate({m: {memory, table}}), WebAssembly.RuntimeError); + () => builder.instantiate({m: {memory, table}}), + WebAssembly.RuntimeError); assertEquals(0, view[0]); })(); diff --git a/deps/v8/test/mjsunit/wasm/call-ref.js b/deps/v8/test/mjsunit/wasm/call-ref.js index 7ad056c1a3..26836e89cb 100644 --- a/deps/v8/test/mjsunit/wasm/call-ref.js +++ b/deps/v8/test/mjsunit/wasm/call-ref.js @@ -115,3 +115,20 @@ load("test/mjsunit/wasm/wasm-module-builder.js"); function(a) { return a * a; }), 10, 15)); })(); + +(function TestFromJSSlowPath() { + var builder = new WasmModuleBuilder(); + var sig_index = builder.addType(kSig_i_i); + + builder.addFunction("main", makeSig( + [wasmRefType(sig_index), kWasmI32], [kWasmI32])) + .addBody([kExprLocalGet, 1, kExprLocalGet, 0, kExprCallRef]) + .exportFunc(); + + var instance = builder.instantiate({}); + + var fun = new WebAssembly.Function( + { parameters: ['i32'], results: ['i32'] }, (a) => undefined); + // {undefined} is converted to 0. + assertEquals(0, instance.exports.main(fun, 1000)); +})(); diff --git a/deps/v8/test/mjsunit/wasm/compilation-hints-async-compilation.js b/deps/v8/test/mjsunit/wasm/compilation-hints-async-compilation.js index b01d0e55b7..de8a6e70e2 100644 --- a/deps/v8/test/mjsunit/wasm/compilation-hints-async-compilation.js +++ b/deps/v8/test/mjsunit/wasm/compilation-hints-async-compilation.js @@ -35,7 +35,7 @@ load('test/mjsunit/wasm/wasm-module-builder.js'); assertPromiseResult(WebAssembly.compile(bytes) .then(assertUnreachable, error => assertEquals("WebAssembly.compile(): type error in " + - "merge[0] (expected i32, got i64) @+56", error.message))); + "fallthru[0] (expected i32, got i64) @+56", error.message))); })(); (function testCompileEmptyModule() { diff --git a/deps/v8/test/mjsunit/wasm/compilation-hints-sync-compilation.js b/deps/v8/test/mjsunit/wasm/compilation-hints-sync-compilation.js index 1f9c00a1f7..94d7fb04c8 100644 --- a/deps/v8/test/mjsunit/wasm/compilation-hints-sync-compilation.js +++ b/deps/v8/test/mjsunit/wasm/compilation-hints-sync-compilation.js @@ -33,7 +33,7 @@ load('test/mjsunit/wasm/wasm-module-builder.js'); assertThrows(() => builder.toModule(), WebAssembly.CompileError, "WebAssembly.Module(): Compiling function #0:\"id\" failed: type error " + - "in merge[0] (expected i32, got i64) @+56"); + "in fallthru[0] (expected i32, got i64) @+56"); })(); (function testCompileEmptyModule() { diff --git a/deps/v8/test/mjsunit/wasm/compiled-module-serialization.js b/deps/v8/test/mjsunit/wasm/compiled-module-serialization.js index d527a72ca6..a90e3b03ae 100644 --- a/deps/v8/test/mjsunit/wasm/compiled-module-serialization.js +++ b/deps/v8/test/mjsunit/wasm/compiled-module-serialization.js @@ -220,7 +220,7 @@ load("test/mjsunit/wasm/wasm-module-builder.js"); .exportAs("main"); builder.setTableBounds(kTableSize, kTableSize); - builder.addElementSegment(0, 0, false, [f1.index]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(0), [f1.index]); builder.addExportOfKind("table", kExternalTable, 0); return new WebAssembly.Module(builder.toBuffer()); @@ -241,7 +241,7 @@ load("test/mjsunit/wasm/wasm-module-builder.js"); .exportAs("main"); builder.addImportedTable("z", "table", kTableSize, kTableSize); - builder.addElementSegment(0, 1, false, [f2.index]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(1), [f2.index]); var m2_bytes = builder.toBuffer(); var m2 = new WebAssembly.Module(m2_bytes); diff --git a/deps/v8/test/mjsunit/wasm/data-segments.js b/deps/v8/test/mjsunit/wasm/data-segments.js index 38fd5ee06b..005122c00d 100644 --- a/deps/v8/test/mjsunit/wasm/data-segments.js +++ b/deps/v8/test/mjsunit/wasm/data-segments.js @@ -38,7 +38,7 @@ function GlobalImportedInitTest(pad) { var g = builder.addImportedGlobal("mod", "offset", kWasmI32); - while (pad-- > 0) builder.addGlobal(kWasmI32); // pad + while (pad-- > 0) builder.addGlobal(kWasmI32, false); // pad builder.addFunction("load", kSig_i_i) .addBody([kExprLocalGet, 0, kExprI32LoadMem, 0, 0]) diff --git a/deps/v8/test/mjsunit/wasm/element-segments-with-reftypes.js b/deps/v8/test/mjsunit/wasm/element-segments-with-reftypes.js new file mode 100644 index 0000000000..7d2cc006b7 --- /dev/null +++ b/deps/v8/test/mjsunit/wasm/element-segments-with-reftypes.js @@ -0,0 +1,99 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --experimental-wasm-typed-funcref + +load('test/mjsunit/wasm/wasm-module-builder.js'); + +(function TestGlobalGetElement() { + print(arguments.callee.name); + let builder = new WasmModuleBuilder(); + let table = builder.addTable(kWasmFuncRef, 10, 10).exportAs('table'); + let f0 = builder.addFunction('double', kSig_i_i).addBody([ + kExprLocalGet, 0, kExprLocalGet, 0, kExprI32Add + ]); + let f1 = builder.addFunction('inc', kSig_i_i).addBody([ + kExprLocalGet, 0, kExprI32Const, 1, kExprI32Add + ]); + let global0 = + builder.addGlobal(kWasmFuncRef, false, WasmInitExpr.RefFunc(f0.index)); + let global1 = + builder.addGlobal(kWasmFuncRef, false, WasmInitExpr.RefFunc(f1.index)); + // At instantiation, table[0] = global0, table[1] = global1. + builder.addActiveElementSegment( + table.index, WasmInitExpr.I32Const(0), + [ + WasmInitExpr.GlobalGet(global0.index), + WasmInitExpr.GlobalGet(global1.index) + ], + kWasmFuncRef); + + let passive = builder.addPassiveElementSegment( + [ + WasmInitExpr.GlobalGet(global0.index), + WasmInitExpr.GlobalGet(global1.index) + ], + kWasmFuncRef); + + // table[2] = global0, table[3] = global1. + builder.addFunction('init', kSig_v_v) + .addBody([ + kExprI32Const, 2, // table index + kExprI32Const, 0, // element index + kExprI32Const, 2, // length + kNumericPrefix, kExprTableInit, passive, table.index + ]) + .exportFunc(); + + let instance = builder.instantiate({}); + + instance.exports.init(); + assertEquals(instance.exports.table.get(0)(10), 20); + assertEquals(instance.exports.table.get(1)(10), 11); + assertEquals(instance.exports.table.get(2)(10), 20); + assertEquals(instance.exports.table.get(3)(10), 11); +})(); + +(function TestTypedFunctionElementSegment() { + print(arguments.callee.name); + let builder = new WasmModuleBuilder(); + let sig = builder.addType(kSig_i_i); + + let f0 = builder.addFunction('double', sig).addBody([ + kExprLocalGet, 0, kExprLocalGet, 0, kExprI32Add + ]); + let f1 = builder.addFunction('inc', sig).addBody([ + kExprLocalGet, 0, kExprI32Const, 1, kExprI32Add + ]); + + let table = + builder.addTable(wasmRefType(sig), 10, 10, WasmInitExpr.RefFunc(f0.index)) + .exportAs('table'); + + builder.addActiveElementSegment( + table.index, WasmInitExpr.I32Const(0), + [WasmInitExpr.RefFunc(f0.index), WasmInitExpr.RefFunc(f1.index)], + wasmRefType(sig)); + + let passive = builder.addPassiveElementSegment( + [WasmInitExpr.RefFunc(f0.index), WasmInitExpr.RefFunc(f1.index)], + wasmRefType(sig)); + + builder.addFunction('init', kSig_v_v) + .addBody([ + kExprI32Const, 2, // table index + kExprI32Const, 0, // element index + kExprI32Const, 2, // length + kNumericPrefix, kExprTableInit, passive, table.index + ]) + .exportFunc(); + + let instance = builder.instantiate({}); + + instance.exports.init(); + assertEquals(instance.exports.table.get(0)(10), 20); + assertEquals(instance.exports.table.get(1)(10), 11); + assertEquals(instance.exports.table.get(2)(10), 20); + assertEquals(instance.exports.table.get(3)(10), 11); +})(); diff --git a/deps/v8/test/mjsunit/wasm/exceptions.js b/deps/v8/test/mjsunit/wasm/exceptions.js index 88e92fa3bb..bc64d83ee2 100644 --- a/deps/v8/test/mjsunit/wasm/exceptions.js +++ b/deps/v8/test/mjsunit/wasm/exceptions.js @@ -263,6 +263,27 @@ load("test/mjsunit/wasm/exceptions-utils.js"); assertInstanceof(caught.__proto__, WebAssembly.RuntimeError); })(); +(function TestStackOverflowNotCaught() { + print(arguments.callee.name); + function stack_overflow() { + %ThrowStackOverflow(); + } + let builder = new WasmModuleBuilder(); + let sig_v_v = builder.addType(kSig_v_v); + let kStackOverflow = builder.addImport('', 'stack_overflow', sig_v_v); + builder.addFunction('try_stack_overflow', kSig_v_v) + .addBody([ + kExprTry, kWasmVoid, + kExprCallFunction, 0, + kExprCatchAll, + kExprEnd + ]).exportFunc(); + let instance = builder.instantiate({'': {'stack_overflow': stack_overflow}}); + + assertThrows(() => instance.exports.try_stack_overflow(), + RangeError, 'Maximum call stack size exceeded'); +})(); + // Test that we can distinguish which exception was thrown by using a cascaded // sequence of nested try blocks with a single catch block each. (function TestCatchComplex1() { diff --git a/deps/v8/test/mjsunit/wasm/export-mutable-global.js b/deps/v8/test/mjsunit/wasm/export-mutable-global.js index 90238f3cf9..09a7aed457 100644 --- a/deps/v8/test/mjsunit/wasm/export-mutable-global.js +++ b/deps/v8/test/mjsunit/wasm/export-mutable-global.js @@ -7,16 +7,12 @@ load("test/mjsunit/wasm/wasm-module-builder.js"); (function exportImmutableGlobal() { var builder = new WasmModuleBuilder(); let globals = [ - [kWasmI32, 'i32_noinit'], - [kWasmI32, 'i32', 4711], - [kWasmF32, 'f32_noinit'], - [kWasmF32, 'f32', Math.fround(3.14)], - [kWasmF64, 'f64_noinit'], - [kWasmF64, 'f64', 1 / 7] + [kWasmI32, 'i32', WasmInitExpr.I32Const(4711)], + [kWasmF32, 'f32', WasmInitExpr.F32Const(Math.fround(3.14))], + [kWasmF64, 'f64', WasmInitExpr.F64Const(1 / 7)] ]; for (let [type, name, value] of globals) { - let global_builder = builder.addGlobal(type, false).exportAs(name); - if (value) global_builder.init = value; + builder.addGlobal(type, false, value).exportAs(name); } var instance = builder.instantiate(); @@ -24,7 +20,7 @@ load("test/mjsunit/wasm/wasm-module-builder.js"); let obj = instance.exports[name]; assertEquals("object", typeof obj, name); assertTrue(obj instanceof WebAssembly.Global, name); - assertEquals(value || 0, obj.value, name); + assertEquals(value.value || 0, obj.value, name); assertThrows(() => obj.value = 0); } })(); @@ -48,16 +44,12 @@ load("test/mjsunit/wasm/wasm-module-builder.js"); (function exportMutableGlobal() { var builder = new WasmModuleBuilder(); let globals = [ - [kWasmI32, 'i32_noinit'], // - - [kWasmI32, 'i32', 4711], // - - [kWasmF32, 'f32_noinit'], // - - [kWasmF32, 'f32', Math.fround(3.14)], // - - [kWasmF64, 'f64_noinit'], // - - [kWasmF64, 'f64', 1 / 7] // - + [kWasmI32, 'i32', WasmInitExpr.I32Const(4711)], // - + [kWasmF32, 'f32', WasmInitExpr.F32Const(Math.fround(3.14))], // - + [kWasmF64, 'f64', WasmInitExpr.F64Const(1 / 7)] // - ]; for (let [index, [type, name, value]] of globals.entries()) { - let global_builder = builder.addGlobal(type, true).exportAs(name); - if (value) global_builder.init = value; + builder.addGlobal(type, true, value).exportAs(name); builder.addFunction("get " + name, makeSig([], [type])) .addBody([kExprGlobalGet, index]) .exportFunc(); @@ -70,7 +62,7 @@ load("test/mjsunit/wasm/wasm-module-builder.js"); for (let [type, name, value] of globals) { let obj = instance.exports[name]; - assertEquals(value || 0, obj.value, name); + assertEquals(value.value || 0, obj.value, name); // Changing the exported global should change the instance's global. obj.value = 1001; diff --git a/deps/v8/test/mjsunit/wasm/externref-globals.js b/deps/v8/test/mjsunit/wasm/externref-globals.js index 278d1ab27b..d685b5c93b 100644 --- a/deps/v8/test/mjsunit/wasm/externref-globals.js +++ b/deps/v8/test/mjsunit/wasm/externref-globals.js @@ -546,12 +546,13 @@ function dummy_func() { (function TestRefFuncGlobalInit() { print(arguments.callee.name); let builder = new WasmModuleBuilder(); - const g_func = builder.addGlobal(kWasmAnyFunc, true); const f_func = builder.addFunction('get_anyfunc_global', kSig_a_v) - .addBody([kExprGlobalGet, g_func.index]) - .exportAs('get_anyfunc_global'); builder.addDeclarativeElementSegment([f_func.index]); - g_func.function_index = f_func.index; + const g_func = builder.addGlobal(kWasmAnyFunc, true, + WasmInitExpr.RefFunc(f_func.index)); + // Doing this here to break the cyclic dependency with g_func. + f_func.addBody([kExprGlobalGet, g_func.index]) + .exportAs('get_anyfunc_global'); const instance = builder.instantiate(); assertEquals( @@ -565,11 +566,11 @@ function dummy_func() { const sig_index = builder.addType(kSig_i_v); const import_wasm = builder.addImport('m', 'wasm', sig_index); const import_js = builder.addImport('m', 'js', sig_index); - const g_wasm = builder.addGlobal(kWasmAnyFunc, true); - const g_js = builder.addGlobal(kWasmAnyFunc, true); + const g_wasm = builder.addGlobal(kWasmAnyFunc, true, + WasmInitExpr.RefFunc(import_wasm)); + const g_js = builder.addGlobal(kWasmAnyFunc, true, + WasmInitExpr.RefFunc(import_js)); builder.addDeclarativeElementSegment([import_wasm, import_js]); - g_wasm.function_index = import_wasm; - g_js.function_index = import_js; builder.addFunction('get_global_wasm', kSig_a_v) .addBody([kExprGlobalGet, g_wasm.index]) .exportFunc(); diff --git a/deps/v8/test/mjsunit/wasm/externref-table.js b/deps/v8/test/mjsunit/wasm/externref-table.js index 69c00279ca..9415fd2acb 100644 --- a/deps/v8/test/mjsunit/wasm/externref-table.js +++ b/deps/v8/test/mjsunit/wasm/externref-table.js @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Flags: --experimental-wasm-reftypes --experimental-wasm-bulk-memory +// Flags: --experimental-wasm-reftypes load("test/mjsunit/wasm/wasm-module-builder.js"); @@ -50,7 +50,8 @@ load("test/mjsunit/wasm/wasm-module-builder.js"); print(arguments.callee.name); const builder = new WasmModuleBuilder(); - builder.addDeclarativeElementSegment([null]); + builder.addDeclarativeElementSegment([WasmInitExpr.RefNull(kWasmFuncRef)], + kWasmFuncRef); builder.addFunction('drop', kSig_v_v) .addBody([kNumericPrefix, kExprElemDrop, 0]) .exportFunc(); @@ -66,7 +67,8 @@ load("test/mjsunit/wasm/wasm-module-builder.js"); const builder = new WasmModuleBuilder(); const table = builder.addTable(kWasmAnyFunc, 10); - builder.addDeclarativeElementSegment([null]); + builder.addDeclarativeElementSegment([WasmInitExpr.RefNull(kWasmFuncRef)], + kWasmFuncRef); builder.addFunction('init', kSig_v_v) .addBody([ kExprI32Const, 0, kExprI32Const, 0, kExprI32Const, 1, kNumericPrefix, diff --git a/deps/v8/test/mjsunit/wasm/globals.js b/deps/v8/test/mjsunit/wasm/globals.js index 8a9bb2517e..1ad04a37c6 100644 --- a/deps/v8/test/mjsunit/wasm/globals.js +++ b/deps/v8/test/mjsunit/wasm/globals.js @@ -93,28 +93,24 @@ TestImported(kWasmF64, 77777.88888, 77777.88888); function TestExported(type, val, expected) { print("TestExported " + type + "(" + val +")" + " = " + expected); var builder = new WasmModuleBuilder(); - var sig = makeSig([type], []); builder.addGlobal(kWasmI32); // pad - var g = builder.addGlobal(type, false) - .exportAs("foo"); - g.init = val; + builder.addGlobal(type, false, val).exportAs("foo"); builder.addGlobal(kWasmI32); // pad var instance = builder.instantiate(); assertEquals(expected, instance.exports.foo.value); } -TestExported(kWasmI32, 455.5, 455); -TestExported(kWasmF32, -999.34343, Math.fround(-999.34343)); -TestExported(kWasmF64, 87347.66666, 87347.66666); +TestExported(kWasmI32, WasmInitExpr.I32Const(455.5), 455); +TestExported(kWasmF32, WasmInitExpr.F32Const(-999.34343), + Math.fround(-999.34343)); +TestExported(kWasmF64, WasmInitExpr.F64Const(87347.66666), 87347.66666); (function TestI64Exported() { var builder = new WasmModuleBuilder(); - var sig = makeSig([kWasmI64], []); builder.addGlobal(kWasmI32); // pad - var g = builder.addGlobal(kWasmI64, false) + builder.addGlobal(kWasmI64, false, WasmInitExpr.I64Const(1234)) .exportAs("foo"); - g.init = 1234; builder.addGlobal(kWasmI32); // pad var instance = builder.instantiate(); @@ -123,14 +119,12 @@ TestExported(kWasmF64, 87347.66666, 87347.66666); })(); function TestImportedExported(type, val, expected) { - print("TestImportedExported " + type + "(" + val +")" + " = " + expected); + print("TestImportedExported " + type + "(" + val + ")" + " = " + expected); var builder = new WasmModuleBuilder(); - var sig = makeSig([type], []); var i = builder.addImportedGlobal("ttt", "foo", type); builder.addGlobal(kWasmI32); // pad - var o = builder.addGlobal(type, false) + builder.addGlobal(type, false, WasmInitExpr.GlobalGet(i)) .exportAs("bar"); - o.init_index = i; builder.addGlobal(kWasmI32); // pad var instance = builder.instantiate({ttt: {foo: val}}); @@ -146,9 +140,8 @@ function TestGlobalIndexSpace(type, val) { var builder = new WasmModuleBuilder(); var im = builder.addImportedGlobal("nnn", "foo", type); assertEquals(0, im); - var def = builder.addGlobal(type, false); + var def = builder.addGlobal(type, false, WasmInitExpr.GlobalGet(im)); assertEquals(1, def.index); - def.init_index = im; var sig = makeSig([], [type]); builder.addFunction("main", sig) diff --git a/deps/v8/test/mjsunit/wasm/import-table.js b/deps/v8/test/mjsunit/wasm/import-table.js index 6693559c8f..1fa98eaa8a 100644 --- a/deps/v8/test/mjsunit/wasm/import-table.js +++ b/deps/v8/test/mjsunit/wasm/import-table.js @@ -41,8 +41,8 @@ let kTableSize = 50; let f17 = addConstFunc(builder, 17); builder.addExport("f15", f15); builder.addExport("f17", f17); - builder.addElementSegment(0, 15, false, [f15]); - builder.addElementSegment(0, 1, false, [call.index]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(15), [f15]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(1), [call.index]); var mod1 = builder.toModule(); } @@ -62,10 +62,10 @@ let kTableSize = 50; ]) .exportAs("call"); let f26 = addConstFunc(builder, 26); - builder.addElementSegment(0, 17, false, [f17]); - builder.addElementSegment(0, 21, false, [f21]); - builder.addElementSegment(0, 26, false, [f26]); - builder.addElementSegment(0, 5, false, [call.index]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(17), [f17]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(21), [f21]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(26), [f26]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(5), [call.index]); var mod2 = builder.toModule(); } @@ -89,8 +89,7 @@ let kTableSize = 50; })(); function addConstFuncUsingGlobal(builder, val) { - let g = builder.addGlobal(kWasmI32, false); - g.init = val; + let g = builder.addGlobal(kWasmI32, false, WasmInitExpr.I32Const(val)); return builder.addFunction("global" + val, kSig_i_v) .addBody([kExprGlobalGet, g.index]).index; } @@ -113,8 +112,8 @@ function addConstFuncUsingGlobal(builder, val) { let f18 = addConstFuncUsingGlobal(builder, 18); builder.addExport("f14", f14); builder.addExport("f18", f18); - builder.addElementSegment(0, 14, false, [f14]); - builder.addElementSegment(0, 1, false, [call.index]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(14), [f14]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(1), [call.index]); var mod1 = builder.toModule(); } @@ -134,10 +133,10 @@ function addConstFuncUsingGlobal(builder, val) { ]) .exportAs("call"); let f28 = addConstFuncUsingGlobal(builder, 28); - builder.addElementSegment(0, 18, false, [f18]); - builder.addElementSegment(0, 22, false, [f22]); - builder.addElementSegment(0, 28, false, [f28]); - builder.addElementSegment(0, 5, false, [call.index]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(18), [f18]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(22), [f22]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(28), [f28]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(5), [call.index]); var mod2 = builder.toModule(); } @@ -193,8 +192,8 @@ function addConstFuncUsingMemory(builder, val) { let f19 = addConstFuncUsingMemory(builder, 19); builder.addExport("f13", f13); builder.addExport("f19", f19); - builder.addElementSegment(0, 13, false, [f13]); - builder.addElementSegment(0, 1, false, [call.index]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(13), [f13]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(1), [call.index]); var mod1 = builder.toModule(); } @@ -216,10 +215,10 @@ function addConstFuncUsingMemory(builder, val) { ]) .exportAs("call"); let f29 = addConstFuncUsingMemory(builder, 29); - builder.addElementSegment(0, 19, false, [f19]); - builder.addElementSegment(0, 23, false, [f23]); - builder.addElementSegment(0, 29, false, [f29]); - builder.addElementSegment(0, 5, false, [call.index]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(19), [f19]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(23), [f23]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(29), [f29]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(5), [call.index]); var mod2 = builder.toModule(); } diff --git a/deps/v8/test/mjsunit/wasm/indirect-call-non-zero-table.js b/deps/v8/test/mjsunit/wasm/indirect-call-non-zero-table.js index 821bc47c46..dfc04dd3bf 100644 --- a/deps/v8/test/mjsunit/wasm/indirect-call-non-zero-table.js +++ b/deps/v8/test/mjsunit/wasm/indirect-call-non-zero-table.js @@ -67,11 +67,12 @@ load("test/mjsunit/wasm/wasm-module-builder.js"); .exportAs('return_call_invalid_sig'); // We want to crash if we call through the table with index 0. - builder.addElementSegment(placeholder, 0, false, + builder.addActiveElementSegment(placeholder, WasmInitExpr.I32Const(0), [f_unreachable, f_unreachable, f_unreachable]); - builder.addElementSegment(table1, 0, false, [f1, f2, f3]); + builder.addActiveElementSegment(table1, WasmInitExpr.I32Const(0), + [f1, f2, f3]); // Keep one slot in table2 uninitialized. We should trap if we call it. - builder.addElementSegment(table2, 1, false, + builder.addActiveElementSegment(table2, WasmInitExpr.I32Const(1), [f_unreachable, f_unreachable, f4, f5]); const instance = builder.instantiate(); @@ -126,7 +127,7 @@ load("test/mjsunit/wasm/wasm-module-builder.js"); kExprCallIndirect, sig_index, t1]) .exportAs('call'); - builder.addElementSegment(t1, g, true, [f1.index]); + builder.addActiveElementSegment(t1, WasmInitExpr.GlobalGet(g), [f1.index]); const base1 = 3; const base2 = 5; @@ -162,14 +163,16 @@ function js_div(a, b) { return (a / b) | 0; } let div = builder.addImport("q", "js_div", kSig_i_ii); builder.addImportedTable("q", "placeholder", kTableSize, kTableSize); - let table_index = builder.addImportedTable("q", "table", kTableSize, kTableSize); + let table_index = builder.addImportedTable("q", "table", kTableSize, + kTableSize); let g = builder.addImportedGlobal("q", "base", kWasmI32); let sig_index = builder.addType(kSig_i_ii); builder.addFunction("placeholder", sig_index) .addBody([kExprLocalGet, 0]); - builder.addElementSegment(table_index, g, true, [div]); + builder.addActiveElementSegment(table_index, WasmInitExpr.GlobalGet(g), + [div]); builder.addFunction("main", kSig_i_ii) .addBody([ kExprI32Const, 55, // -- diff --git a/deps/v8/test/mjsunit/wasm/indirect-calls.js b/deps/v8/test/mjsunit/wasm/indirect-calls.js index f866b41d10..b5786174ed 100644 --- a/deps/v8/test/mjsunit/wasm/indirect-calls.js +++ b/deps/v8/test/mjsunit/wasm/indirect-calls.js @@ -169,7 +169,8 @@ function AddFunctions(builder) { .exportAs("main"); builder.setTableBounds(length, length); - builder.addElementSegment(0, base, false, [f.add.index, f.sub.index, f.mul.index]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(base), + [f.add.index, f.sub.index, f.mul.index]); return builder.instantiate(); } @@ -207,7 +208,8 @@ function AddFunctions(builder) { builder.setTableBounds(10, 10); var g = builder.addImportedGlobal("fff", "base", kWasmI32); - builder.addElementSegment(0, g, true, [f.mul.index, f.add.index, f.sub.index]); + builder.addActiveElementSegment(0, WasmInitExpr.GlobalGet(g), + [f.mul.index, f.add.index, f.sub.index]); var module = new WebAssembly.Module(builder.toBuffer()); diff --git a/deps/v8/test/mjsunit/wasm/indirect-tables.js b/deps/v8/test/mjsunit/wasm/indirect-tables.js index 8296e97b8e..e0c619b0f5 100644 --- a/deps/v8/test/mjsunit/wasm/indirect-tables.js +++ b/deps/v8/test/mjsunit/wasm/indirect-tables.js @@ -50,8 +50,8 @@ function js_div(a, b) { return (a / b) | 0; } builder.setTableBounds(10, 10); let g = builder.addImportedGlobal("q", "base", kWasmI32); - builder.addElementSegment( - 0, g, true, [f.mul.index, f.add.index, f.sub.index, d]); + builder.addActiveElementSegment(0, WasmInitExpr.GlobalGet(g), + [f.mul.index, f.add.index, f.sub.index, d]); builder.addExportOfKind("table", kExternalTable, 0); let module = new WebAssembly.Module(builder.toBuffer()); @@ -109,8 +109,8 @@ function js_div(a, b) { return (a / b) | 0; } let f = AddFunctions(builder); builder.setTableBounds(kTableSize, kTableSize); let g = builder.addImportedGlobal("q", "base", kWasmI32); - builder.addElementSegment( - 0, g, true, [f.mul.index, f.add.index, f.sub.index, d]); + builder.addActiveElementSegment(0, WasmInitExpr.GlobalGet(g), + [f.mul.index, f.add.index, f.sub.index, d]); builder.addExportOfKind("table", kExternalTable, 0); let m1 = new WebAssembly.Module(builder.toBuffer()); @@ -179,8 +179,8 @@ function js_div(a, b) { return (a / b) | 0; } builder.addImportedTable("q", "table", kTableSize, kTableSize); let g = builder.addImportedGlobal("q", "base", kWasmI32); let f = AddFunctions(builder); - builder.addElementSegment( - 0, g, true, [f.mul.index, f.add.index, f.sub.index, d]); + builder.addActiveElementSegment(0, WasmInitExpr.GlobalGet(g), + [f.mul.index, f.add.index, f.sub.index, d]); builder.addFunction("main", kSig_i_ii) .addBody([ kExprI32Const, 55, // -- @@ -256,7 +256,7 @@ function js_div(a, b) { return (a / b) | 0; } kExprLocalGet, 0, kExprCallIndirect, sig_index, kTableZero]) // -- .exportAs("main"); - builder.addElementSegment(0, g, true, [f.index]); + builder.addActiveElementSegment(0, WasmInitExpr.GlobalGet(g), [f.index]); let module = new WebAssembly.Module(builder.toBuffer()); @@ -297,7 +297,7 @@ function js_div(a, b) { return (a / b) | 0; } .exportAs("main"); builder.setTableBounds(kTableSize, kTableSize); - builder.addElementSegment(0, 0, false, [f1.index]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(0), [f1.index]); builder.addExportOfKind("table", kExternalTable, 0); var m1 = new WebAssembly.Module(builder.toBuffer()); @@ -316,7 +316,7 @@ function js_div(a, b) { return (a / b) | 0; } .exportAs("main"); builder.addImportedTable("z", "table", kTableSize, kTableSize); - builder.addElementSegment(0, 1, false, [f2.index]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(1), [f2.index]); var m2 = new WebAssembly.Module(builder.toBuffer()); @@ -411,7 +411,7 @@ function js_div(a, b) { return (a / b) | 0; } kExprLocalGet, 0, kExprCallIndirect, sig_index, kTableZero]) // -- .exportAs("main"); - builder.addElementSegment(0, g, true, [g]); + builder.addActiveElementSegment(0, WasmInitExpr.GlobalGet(g), [g]); let module = new WebAssembly.Module(builder.toBuffer()); var instances = []; @@ -542,7 +542,8 @@ function js_div(a, b) { return (a / b) | 0; } let offset = i + 1; let len = i + 2; let index = indexes[i]; - builder.addElementSegment(0, offset, false, new Array(len).fill(index)); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(offset), + new Array(len).fill(index)); } let instance = builder.instantiate(); @@ -586,7 +587,7 @@ function js_div(a, b) { return (a / b) | 0; } builder1.setName('module_1'); builder1.addFunction('f', kSig_i_i).addBody([kExprLocalGet, 0]); builder1.addImportedTable('z', 'table'); - builder1.addElementSegment(0, 0, false, [0]); + builder1.addActiveElementSegment(0, WasmInitExpr.I32Const(0), [0]); let module1 = new WebAssembly.Module(builder1.toBuffer()); let instance1 = new WebAssembly.Instance(module1, {z: {table: instance0.exports.table}}); @@ -622,9 +623,10 @@ function js_div(a, b) { return (a / b) | 0; } let instance1 = new WebAssembly.Instance(module1, {'':{memory:mem_1}}); builder = new WasmModuleBuilder(); - builder.addFunction('main', kSig_i_v).addBody([kExprI32Const, 0, kExprI32LoadMem, 0, 0]); + builder.addFunction('main', kSig_i_v) + .addBody([kExprI32Const, 0, kExprI32LoadMem, 0, 0]); builder.addImportedTable('', 'table'); - builder.addElementSegment(0, 0, false, [0]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(0), [0]); builder.addImportedMemory('', 'memory', 1); @@ -732,7 +734,7 @@ function js_div(a, b) { return (a / b) | 0; } builder.setTableBounds(10, 10); let g = builder.addImportedGlobal("q", "base", kWasmI32); - builder.addElementSegment(0, g, true, [j, w]); + builder.addActiveElementSegment(0, WasmInitExpr.GlobalGet(g), [j, w]); let module = new WebAssembly.Module(builder.toBuffer()); for (var i = 0; i < 5; i++) { @@ -781,11 +783,12 @@ function js_div(a, b) { return (a / b) | 0; } .exportAs("main"); let g = builder.addImportedGlobal("q", "base", kWasmI32); - builder.addElementSegment(0, g, true, [j, w]); + builder.addActiveElementSegment(0, WasmInitExpr.GlobalGet(g), [j, w]); let module = new WebAssembly.Module(builder.toBuffer()); for (var i = 0; i < 5; i++) { - let instance = new WebAssembly.Instance(module, {q: {base: i, js_div: js_div, wasm_mul: wasm_mul, table: table}}); + let instance = new WebAssembly.Instance( + module, {q: {base: i, js_div: js_div, wasm_mul: wasm_mul, table: table}}); let j = i + 1; assertEquals((44/j)|0, instance.exports.main(j, i+0)); @@ -821,7 +824,7 @@ function js_div(a, b) { return (a / b) | 0; } kExprCallIndirect, 0, kTableZero ]) .exportFunc(); - builder.addElementSegment(0, 0, false, [0, 1, 1, 0]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(0), [0, 1, 1, 0]); return builder.instantiate({q: {f2: i1.exports.f2, f1: i1.exports.f1}}); })(); @@ -884,7 +887,7 @@ function js_div(a, b) { return (a / b) | 0; } ]) .exportFunc(); builder.exportMemoryAs("memory"); - builder.addElementSegment(0, 0, false, [0, 1, 2, 3]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(0), [0, 1, 2, 3]); var instance = builder.instantiate({q: {f1: f100, f2: f200, f3: f300}}); setMemI32(instance, 0, 5000000); setMemI32(instance, 4, 6000000); diff --git a/deps/v8/test/mjsunit/wasm/loop-unrolling.js b/deps/v8/test/mjsunit/wasm/loop-unrolling.js index 43852dec26..c281d30945 100644 --- a/deps/v8/test/mjsunit/wasm/loop-unrolling.js +++ b/deps/v8/test/mjsunit/wasm/loop-unrolling.js @@ -10,6 +10,29 @@ load("test/mjsunit/wasm/wasm-module-builder.js"); load("test/mjsunit/wasm/exceptions-utils.js"); +// Test that lowering a ror operator with int64-lowering does not produce +// floating control, which is incompatible with loop unrolling. +(function I64RorLoweringTest() { + let builder = new WasmModuleBuilder(); + builder.addMemory(1000, 1000); + + builder.addFunction("main", makeSig([kWasmI32, kWasmI64], [])) + .addBody([ + kExprLoop, kWasmVoid, + kExprLocalGet, 0x00, + kExprI32LoadMem, 0x00, 0x00, + kExprI64UConvertI32, + kExprLocalGet, 0x01, + kExprI64Ror, + kExprI32ConvertI64, + kExprBrIf, 0x00, + kExprEnd]) + .exportFunc(); + + let module = new WebAssembly.Module(builder.toBuffer()); + let instance = new WebAssembly.Instance(module); +})(); + // Test the interaction between multireturn and loop unrolling. (function MultiBlockResultTest() { let builder = new WasmModuleBuilder(); diff --git a/deps/v8/test/mjsunit/wasm/memory64.js b/deps/v8/test/mjsunit/wasm/memory64.js index 5376ba87db..f9af2dc94d 100644 --- a/deps/v8/test/mjsunit/wasm/memory64.js +++ b/deps/v8/test/mjsunit/wasm/memory64.js @@ -50,11 +50,16 @@ function BasicMemory64Tests(num_pages) { store(kStoreOffset, 11); assertEquals(11, load(kStoreOffset)); - // Now check 100 random positions. All except for kStoreOffset should be zero. + // Now check 100 random positions. for (let i = 0; i < 100; ++i) { let position = Math.floor(Math.random() * num_bytes); - if (position == kStoreOffset) continue; - assertEquals(0, array[position]); + let expected = 0; + if (position == kStoreOffset) { + expected = 11; + } else if (num_bytes - position <= 4) { + expected = [0x12, 0x34, 0x56, 0x78][num_bytes - position - 1]; + } + assertEquals(expected, array[position]); } } diff --git a/deps/v8/test/mjsunit/wasm/multi-table-element-section.js b/deps/v8/test/mjsunit/wasm/multi-table-element-section.js index 8e099c4ed3..68587f02d5 100644 --- a/deps/v8/test/mjsunit/wasm/multi-table-element-section.js +++ b/deps/v8/test/mjsunit/wasm/multi-table-element-section.js @@ -32,7 +32,8 @@ load("test/mjsunit/wasm/wasm-module-builder.js"); const f2 = builder_for_import.addFunction('f2', kSig_i_v) .addBody([kExprI32Const, value2]).index; - builder_for_import.addElementSegment(t1, offset1, false, [f1, f2]); + builder_for_import.addActiveElementSegment(t1, WasmInitExpr.I32Const(offset1), + [f1, f2]); const instance_for_import = builder_for_import.instantiate(); const table1 = instance_for_import.exports.table; assertEquals(value1, table1.get(offset1)()); @@ -55,11 +56,12 @@ load("test/mjsunit/wasm/wasm-module-builder.js"); .addBody([kExprI32Const, value5]).index; - builder.addElementSegment(t2, offset2, false, [f3, f4]); - builder.addElementSegment(t3, offset3, false, [f5, f4]); - builder.addElementSegment(t4, offset4, false, [f3, f5]); + builder.addActiveElementSegment(t2, WasmInitExpr.I32Const(offset2), [f3, f4]); + builder.addActiveElementSegment(t3, WasmInitExpr.I32Const(offset3), [f5, f4]); + builder.addActiveElementSegment(t4, WasmInitExpr.I32Const(offset4), [f3, f5]); // Add one more overlapping offset - builder.addElementSegment(t4, offset4 + 1, false, [f4, f3]); + builder.addActiveElementSegment(t4, WasmInitExpr.I32Const(offset4 + 1), + [f4, f3]); const instance = builder.instantiate(instance_for_import); // table2 == table1 diff --git a/deps/v8/test/mjsunit/wasm/reference-globals.js b/deps/v8/test/mjsunit/wasm/reference-globals.js index 57f23ffb83..6edca3461b 100644 --- a/deps/v8/test/mjsunit/wasm/reference-globals.js +++ b/deps/v8/test/mjsunit/wasm/reference-globals.js @@ -17,9 +17,9 @@ load("test/mjsunit/wasm/wasm-module-builder.js"); .addBody([kExprLocalGet, 0, kExprLocalGet, 1, kExprI32Add]) .exportFunc(); - var global = builder.addGlobal(wasmRefType(sig_index), false); - global.function_index = addition_index; - global.exportAs("global"); + builder.addGlobal(wasmRefType(sig_index), false, + WasmInitExpr.RefFunc(addition_index)) + .exportAs("global"); builder.addGlobal(wasmOptRefType(wrong_sig_index), false) .exportAs("mistyped_global"); diff --git a/deps/v8/test/mjsunit/wasm/reference-tables.js b/deps/v8/test/mjsunit/wasm/reference-tables.js index cfbe238e6b..7788a80668 100644 --- a/deps/v8/test/mjsunit/wasm/reference-tables.js +++ b/deps/v8/test/mjsunit/wasm/reference-tables.js @@ -115,7 +115,8 @@ load('test/mjsunit/wasm/wasm-module-builder.js'); .addBody([kExprLocalGet, 0, kExprLocalGet, 1, kExprI32Sub]) .exportFunc(); - var table = builder.addTable(wasmRefType(binary_type), 3, 3, addition.index); + var table = builder.addTable(wasmRefType(binary_type), 3, 3, + WasmInitExpr.RefFunc(addition.index)); builder.addFunction('init', kSig_v_v) .addBody([ diff --git a/deps/v8/test/mjsunit/wasm/return-calls.js b/deps/v8/test/mjsunit/wasm/return-calls.js index 0cf2639d5b..9613b638db 100644 --- a/deps/v8/test/mjsunit/wasm/return-calls.js +++ b/deps/v8/test/mjsunit/wasm/return-calls.js @@ -140,7 +140,7 @@ load("test/mjsunit/wasm/wasm-module-builder.js"); // Arbitrary location in the table. const tableIndex = 3; - builder.addElementSegment(0, tableIndex,false,[pick]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(tableIndex),[pick]); let main = builder.addFunction("main", kSig_i_iii) .addBody([ diff --git a/deps/v8/test/mjsunit/wasm/simd-globals.js b/deps/v8/test/mjsunit/wasm/simd-globals.js index f678b59f65..ea87d9f09b 100644 --- a/deps/v8/test/mjsunit/wasm/simd-globals.js +++ b/deps/v8/test/mjsunit/wasm/simd-globals.js @@ -11,8 +11,9 @@ load("test/mjsunit/wasm/wasm-module-builder.js"); // initialization expression into the globals area of the module. (function TestS128GlobalInitialization() { var builder = new WasmModuleBuilder(); - var g = builder.addGlobal(kWasmS128); - g.init = [1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0]; + var g = builder.addGlobal( + kWasmS128, false, WasmInitExpr.S128Const( + [1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0])); // Check that all lanes have the right values by creating 4 functions that // extract each lane. diff --git a/deps/v8/test/mjsunit/wasm/stack.js b/deps/v8/test/mjsunit/wasm/stack.js index be9d54a064..9f377a376b 100644 --- a/deps/v8/test/mjsunit/wasm/stack.js +++ b/deps/v8/test/mjsunit/wasm/stack.js @@ -56,8 +56,7 @@ builder.addFunction("exec_unreachable", kSig_v_v) // Make this function unnamed, just to test also this case. var mem_oob_func = builder.addFunction(undefined, kSig_i_v) // Access the memory at offset -1, to provoke a trap. - .addBody([kExprI32Const, 0x7f, kExprI32LoadMem8S, 0, 0]) - .exportAs("mem_out_of_bounds"); + .addBody([kExprI32Const, 0x7f, kExprI32LoadMem8S, 0, 0]); // Call the mem_out_of_bounds function, in order to have two wasm stack frames. builder.addFunction("call_mem_out_of_bounds", kSig_i_v) @@ -70,9 +69,9 @@ var module = builder.instantiate({mod: {func: STACK}}); var expected_string = 'Error\n' + // The line numbers below will change as this test gains / loses lines.. ' at STACK (stack.js:38:11)\n' + // -- - ' at main (<anonymous>:wasm-function[1]:0x86)\n' + // -- - ' at testSimpleStack (stack.js:77:18)\n' + // -- - ' at stack.js:79:3'; // -- + ' at main (<anonymous>:wasm-function[1]:0x72)\n' + // -- + ' at testSimpleStack (stack.js:76:18)\n' + // -- + ' at stack.js:78:3'; // -- module.exports.main(); assertEquals(expected_string, stripPath(stack)); @@ -90,9 +89,9 @@ Error.prepareStackTrace = function(error, frames) { verifyStack(stack, [ // isWasm function line pos file offset funcIndex [ false, "STACK", 38, 0, "stack.js"], - [ true, "main", 1, 0x86, "wasm://wasm/7168ab72", '0x86', 1], - [ false, "testStackFrames", 88, 0, "stack.js"], - [ false, null, 97, 0, "stack.js"] + [ true, "main", 1, 0x72, "wasm://wasm/862e1cf6", '0x72', 1], + [ false, "testStackFrames", 87, 0, "stack.js"], + [ false, null, 96, 0, "stack.js"] ]); })(); @@ -104,9 +103,9 @@ Error.prepareStackTrace = function(error, frames) { assertContains("unreachable", e.message); verifyStack(e.stack, [ // isWasm function line pos file offset funcIndex - [ true, "exec_unreachable", 1, 0x8b, "wasm://wasm/7168ab72", '0x8b', 2], - [ false, "testWasmUnreachable", 101, 0, "stack.js"], - [ false, null, 112, 0, "stack.js"] + [ true, "exec_unreachable", 1, 0x77, "wasm://wasm/862e1cf6", '0x77', 2], + [ false, "testWasmUnreachable", 100, 0, "stack.js"], + [ false, null, 111, 0, "stack.js"] ]); } })(); @@ -119,10 +118,10 @@ Error.prepareStackTrace = function(error, frames) { assertContains("out of bounds", e.message); verifyStack(e.stack, [ // isWasm function line pos file offset funcIndex - [ true, "mem_out_of_bounds", 1, 0x91, "wasm://wasm/7168ab72", '0x91', 3], - [ true, "call_mem_out_of_bounds", 1, 0x97, "wasm://wasm/7168ab72", '0x97', 4], - [ false, "testWasmMemOutOfBounds", 116, 0, "stack.js"], - [ false, null, 128, 0, "stack.js"] + [ true, null, 1, 0x7d, "wasm://wasm/862e1cf6", '0x7d', 3], + [ true, "call_mem_out_of_bounds", 1, 0x83, "wasm://wasm/862e1cf6", '0x83', 4], + [ false, "testWasmMemOutOfBounds", 115, 0, "stack.js"], + [ false, null, 127, 0, "stack.js"] ]); } })(); @@ -177,8 +176,8 @@ Error.prepareStackTrace = function(error, frames) { verifyStack(e.stack, [ // isWasm function line pos file offset funcIndex [ true, 'main', 1, unreachable_pos + 0x25, 'wasm://wasm/000600e6', hexOffset, 0], - [ false, 'testBigOffset', 172, 0, 'stack.js'], - [ false, null, 184, 0, 'stack.js'] + [ false, 'testBigOffset', 171, 0, 'stack.js'], + [ false, null, 183, 0, 'stack.js'] ]); } })(); diff --git a/deps/v8/test/mjsunit/wasm/table-access.js b/deps/v8/test/mjsunit/wasm/table-access.js index 1f070d01f9..febdd41c38 100644 --- a/deps/v8/test/mjsunit/wasm/table-access.js +++ b/deps/v8/test/mjsunit/wasm/table-access.js @@ -117,8 +117,10 @@ const dummy_func = exports.set_table_func1; const offset1 = 3; const offset2 = 9; - builder.addElementSegment(t1, offset1, false, [f1.index, f2.index]); - builder.addElementSegment(t2, offset2, false, [f3.index, f1.index]); + builder.addActiveElementSegment(t1, WasmInitExpr.I32Const(offset1), + [f1.index, f2.index]); + builder.addActiveElementSegment(t2, WasmInitExpr.I32Const(offset2), + [f3.index, f1.index]); const instance = builder.instantiate(); diff --git a/deps/v8/test/mjsunit/wasm/table-copy-externref.js b/deps/v8/test/mjsunit/wasm/table-copy-externref.js index 391fb606bd..c3579c83ae 100644 --- a/deps/v8/test/mjsunit/wasm/table-copy-externref.js +++ b/deps/v8/test/mjsunit/wasm/table-copy-externref.js @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Flags: --experimental-wasm-bulk-memory --experimental-wasm-reftypes +// Flags: --experimental-wasm-reftypes load('test/mjsunit/wasm/wasm-module-builder.js'); diff --git a/deps/v8/test/mjsunit/wasm/table-copy.js b/deps/v8/test/mjsunit/wasm/table-copy.js index ead06f4f23..754c7dfd52 100644 --- a/deps/v8/test/mjsunit/wasm/table-copy.js +++ b/deps/v8/test/mjsunit/wasm/table-copy.js @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Flags: --experimental-wasm-bulk-memory - load("test/mjsunit/wasm/wasm-module-builder.js"); function addFunction(builder, k) { diff --git a/deps/v8/test/mjsunit/wasm/table-get.js b/deps/v8/test/mjsunit/wasm/table-get.js index 9ec0667dbc..534c5a109f 100644 --- a/deps/v8/test/mjsunit/wasm/table-get.js +++ b/deps/v8/test/mjsunit/wasm/table-get.js @@ -11,7 +11,8 @@ load("test/mjsunit/wasm/wasm-module-builder.js"); const f1 = builder.addFunction('f', kSig_i_v).addBody([kExprI32Const, 11]); const f2 = builder.addFunction('f', kSig_i_v).addBody([kExprI32Const, 22]); const offset = 3; - builder.addElementSegment(0, offset, false, [f1.index, f2.index]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(offset), + [f1.index, f2.index]); const instance = builder.instantiate(); @@ -27,7 +28,8 @@ load("test/mjsunit/wasm/wasm-module-builder.js"); const f2 = builder.addFunction('f', kSig_i_v).addBody([kExprI32Const, 22]) .exportAs("f2"); const offset = 3; - builder.addElementSegment(0, offset, false, [f1.index, f2.index]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(offset), + [f1.index, f2.index]); const instance = builder.instantiate(); @@ -42,8 +44,10 @@ load("test/mjsunit/wasm/wasm-module-builder.js"); const f1 = builder.addFunction('f', kSig_i_v).addBody([kExprI32Const, 11]); const f2 = builder.addFunction('f', kSig_i_v).addBody([kExprI32Const, 22]); const offset = 3; - builder.addElementSegment(0, offset, false, [f1.index, f2.index]); - builder.addElementSegment(0, offset + 1, false, [f1.index, f2.index]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(offset), + [f1.index, f2.index]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(offset + 1), + [f1.index, f2.index]); const instance = builder.instantiate(); @@ -55,10 +59,12 @@ load("test/mjsunit/wasm/wasm-module-builder.js"); print(arguments.callee.name); const builder = new WasmModuleBuilder(); const table = builder.addTable(kWasmAnyFunc, 20).exportAs("table"); - const f1 = builder.addFunction('f', kSig_i_v).addBody([kExprI32Const, 11]).exportAs("f1"); + const f1 = builder.addFunction('f', kSig_i_v) + .addBody([kExprI32Const, 11]).exportAs("f1"); const f2 = builder.addFunction('f', kSig_i_v).addBody([kExprI32Const, 22]); const offset = 3; - builder.addElementSegment(0, offset, false, [f1.index, f1.index, f1.index]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(offset), + [f1.index, f1.index, f1.index]); const instance = builder.instantiate(); @@ -78,7 +84,8 @@ load("test/mjsunit/wasm/wasm-module-builder.js"); const f1 = builder.addFunction('f', kSig_i_v).addBody([kExprI32Const, 11]); const f2 = builder.addFunction('f', kSig_i_v).addBody([kExprI32Const, 22]); const offset = 3; - builder.addElementSegment(0, offset, false, [f1.index, f1.index, f1.index]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(offset), + [f1.index, f1.index, f1.index]); const instance = builder.instantiate(); @@ -97,7 +104,8 @@ load("test/mjsunit/wasm/wasm-module-builder.js"); const f1 = builder.addFunction('f', kSig_i_v).addBody([kExprI32Const, 11]); const f2 = builder.addFunction('f', kSig_i_v).addBody([kExprI32Const, 22]); const offset = 3; - builder.addElementSegment(0, offset, false, [f1.index, f1.index, f1.index]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(offset), + [f1.index, f1.index, f1.index]); const instance = builder.instantiate(); assertEquals(null, instance.exports.table.get(offset - 1)); @@ -111,7 +119,8 @@ load("test/mjsunit/wasm/wasm-module-builder.js"); const f1 = builder.addFunction('f', kSig_i_v).addBody([kExprI32Const, 11]); const f2 = builder.addFunction('f', kSig_i_v).addBody([kExprI32Const, 22]); const offset = 3; - builder.addElementSegment(0, offset, false, [f1.index, f1.index, f1.index]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(offset), + [f1.index, f1.index, f1.index]); const instance = builder.instantiate(); assertThrows(() => instance.exports.table.get(size + 3), RangeError); @@ -125,7 +134,8 @@ load("test/mjsunit/wasm/wasm-module-builder.js"); const import1 = builder.addImport("q", "fun", kSig_i_ii); const f1 = builder.addFunction('f', kSig_i_v).addBody([kExprI32Const, 11]); const offset = 3; - builder.addElementSegment(0, offset, false, [f1.index, import1]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(offset), + [f1.index, import1]); const instance = builder.instantiate({q: {fun: () => 33}}); assertEquals(33, instance.exports.table.get(offset + 1)()); diff --git a/deps/v8/test/mjsunit/wasm/table-grow.js b/deps/v8/test/mjsunit/wasm/table-grow.js index 2ed529463c..a8f7fd3418 100644 --- a/deps/v8/test/mjsunit/wasm/table-grow.js +++ b/deps/v8/test/mjsunit/wasm/table-grow.js @@ -132,7 +132,7 @@ let id = (() => { // identity exported function builder.addImportedTable("q", "table", 5, 32); let g = builder.addImportedGlobal("q", "base", kWasmI32); - builder.addElementSegment(0, g, true, + builder.addActiveElementSegment(0, WasmInitExpr.GlobalGet(g), [funcs.mul.index, funcs.add.index, funcs.sub.index]); builder.addExportOfKind("table", kExternalTable, 0); let module = new WebAssembly.Module(builder.toBuffer()); @@ -179,7 +179,7 @@ let id = (() => { // identity exported function let t = builder.addImport("q", "exp_ten", sig_i_v); builder.setTableBounds(7, 35); - builder.addElementSegment(0, g1, true, [a, i, t]); + builder.addActiveElementSegment(0, WasmInitExpr.GlobalGet(g1), [a, i, t]); builder.addExportOfKind("table", kExternalTable, 0); let module = new WebAssembly.Module(builder.toBuffer()); @@ -212,7 +212,8 @@ let id = (() => { // identity exported function let funcs = addFunctions(builder1); builder1.addImportedTable("q", "table", 6, 36); - builder1.addElementSegment(0, g, true, + builder1.addActiveElementSegment( + 0, WasmInitExpr.GlobalGet(g), [funcs.mul.index, funcs.add.index, funcs.sub.index]); let module1 = new WebAssembly.Module(builder1.toBuffer()); @@ -228,7 +229,7 @@ let id = (() => { // identity exported function } for (let i = 3; i < 10; i++) { - let instance1 = new WebAssembly.Instance(module1, {q: {base: i, table: table}}); + new WebAssembly.Instance(module1, {q: {base: i, table: table}}); verifyTableFuncs(i); var prev = table.length; assertEquals(prev, table.grow(3)); @@ -264,7 +265,7 @@ let id = (() => { // identity exported function kExprLocalGet, 0, kExprCallIndirect, index_i_ii, kTableZero]) .exportAs("main"); - builder.addElementSegment(0, 0, false, [0]); + builder.addActiveElementSegment(0, WasmInitExpr.I32Const(0), [0]); return new WebAssembly.Module(builder.toBuffer()); } diff --git a/deps/v8/test/mjsunit/wasm/unreachable-validation.js b/deps/v8/test/mjsunit/wasm/unreachable-validation.js index a9165639ab..f463379367 100644 --- a/deps/v8/test/mjsunit/wasm/unreachable-validation.js +++ b/deps/v8/test/mjsunit/wasm/unreachable-validation.js @@ -125,7 +125,7 @@ run(I, "U (iblock 0 (block br1)) drop", [unr, ...iblock, ...zero, ...block, ...b run(I, "U (iblock 0 (block 0 brt1)) drop", [unr, ...iblock, ...zero, ...block, ...zero, ...brt1, end, end, drop]); run(I, "U (block (iblock 0 0 brt01) drop)", [unr, ...block, ...iblock, ...zero, ...zero, ...brt01, end, drop, end]); run(V, "(iblock (iblock U 0 brt01)) drop", [...iblock, ...iblock, unr, ...zero, ...brt01, end, end, drop]); -run(I, "(block (fblock U 0 brt01) drop)", [...iblock, ...fblock, unr, ...zero, ...brt01, end, drop, end]); -run(I, "(iblock (fblock U 0 brt01) drop 0) drop", [...iblock, ...fblock, unr, ...zero, ...brt01, end, drop, ...zero, end, drop]); +run(I, "(block (fblock U 0 brt01) drop)", [...block, ...fblock, unr, ...zero, ...brt01, end, drop, end]); +run(V, "(iblock (fblock U 0 brt01) drop 0) drop", [...iblock, ...fblock, unr, ...zero, ...brt01, end, drop, ...zero, end, drop]); run(I, "(iblock (block (U brif 1))", [...iblock, ...block, unr, kExprBrIf, 0, end, end, kExprDrop]); diff --git a/deps/v8/test/mjsunit/wasm/wasm-module-builder.js b/deps/v8/test/mjsunit/wasm/wasm-module-builder.js index d3ae3a9b4a..ca813a8a87 100644 --- a/deps/v8/test/mjsunit/wasm/wasm-module-builder.js +++ b/deps/v8/test/mjsunit/wasm/wasm-module-builder.js @@ -24,7 +24,9 @@ function bytes(...input) { for (let i = 0; i < input.length; i++) { let val = input[i]; if (typeof val == 'string') { - assertEquals(1, val.length, 'string inputs must have length 1'); + if (val.length != 1) { + throw new Error('string inputs must have length 1'); + } val = val.charCodeAt(0); } view[i] = val | 0; @@ -122,11 +124,11 @@ function wasmRefType(index) { let kWasmI31Ref = 0x6a; let kWasmRttWithDepth = 0x69; function wasmRtt(index, depth) { - return { opcode: kWasmRttWithDepth, index: index, depth: depth }; + return {opcode: kWasmRttWithDepth, index: index, depth: depth}; } let kWasmRtt = 0x68; function wasmRttNoDepth(index) { - return { opcode: kWasmRtt, index: index }; + return {opcode: kWasmRtt, index: index}; } let kWasmDataRef = 0x67; @@ -413,6 +415,7 @@ const kWasmOpcodes = { 'RefAsNonNull': 0xd3, 'BrOnNull': 0xd4, 'RefEq': 0xd5, + 'BrOnNonNull': 0xd6 }; function defineWasmOpcode(name, value) { @@ -463,6 +466,7 @@ let kExprRttSub = 0x31; let kExprRefTest = 0x40; let kExprRefCast = 0x41; let kExprBrOnCast = 0x42; +let kExprBrOnCastFail = 0x43; let kExprRefIsFunc = 0x50; let kExprRefIsData = 0x51; let kExprRefIsI31 = 0x52; @@ -824,20 +828,21 @@ let kTrapElemSegmentDropped = 10; let kTrapRethrowNull = 11; let kTrapMsgs = [ - 'unreachable', - 'memory access out of bounds', - 'divide by zero', - 'divide result unrepresentable', - 'remainder by zero', - 'float unrepresentable in integer range', - 'table index is out of bounds', - 'function signature mismatch', - 'operation does not support unaligned accesses', - 'data segment has been dropped', - 'element segment has been dropped', - 'rethrowing null value' + 'unreachable', // -- + 'memory access out of bounds', // -- + 'divide by zero', // -- + 'divide result unrepresentable', // -- + 'remainder by zero', // -- + 'float unrepresentable in integer range', // -- + 'table index is out of bounds', // -- + 'null function or function signature mismatch', // -- + 'operation does not support unaligned accesses', // -- + 'data segment has been dropped', // -- + 'element segment has been dropped', // -- + 'rethrowing null value' // -- ]; +// This requires test/mjsunit/mjsunit.js. function assertTraps(trap, code) { assertThrows(code, WebAssembly.RuntimeError, kTrapMsgs[trap]); } @@ -939,6 +944,39 @@ class Binary { } } + emit_init_expr(expr) { + switch (expr.kind) { + case kExprGlobalGet: + this.emit_u8(kExprGlobalGet); + this.emit_u32v(expr.value); + break; + case kExprI32Const: + this.emit_bytes(wasmI32Const(expr.value)); + break; + case kExprI64Const: + this.emit_bytes(wasmI64Const(expr.value)); + break; + case kExprF32Const: + this.emit_bytes(wasmF32Const(expr.value)); + break; + case kExprF64Const: + this.emit_bytes(wasmF64Const(expr.value)); + break; + case kSimdPrefix: + this.emit_bytes(wasmS128Const(expr.value)); + break; + case kExprRefFunc: + this.emit_u8(kExprRefFunc); + this.emit_u32v(expr.value); + break; + case kExprRefNull: + this.emit_u8(kExprRefNull); + this.emit_u32v(expr.value); + break; + } + this.emit_u8(kExprEnd); // end of init expression + } + emit_header() { this.emit_bytes([ kWasmH0, kWasmH1, kWasmH2, kWasmH3, kWasmV0, kWasmV1, kWasmV2, kWasmV3 @@ -1035,12 +1073,58 @@ class WasmFunctionBuilder { } } +class WasmInitExpr { + static I32Const(value) { + return {kind: kExprI32Const, value: value}; + } + static I64Const(value) { + return {kind: kExprI64Const, value: value}; + } + static F32Const(value) { + return {kind: kExprF32Const, value: value}; + } + static F64Const(value) { + return {kind: kExprF64Const, value: value}; + } + static S128Const(value) { + return {kind: kSimdPrefix, value: value}; + } + static GlobalGet(index) { + return {kind: kExprGlobalGet, value: index}; + } + static RefFunc(index) { + return {kind: kExprRefFunc, value: index}; + } + static RefNull(type) { + return {kind: kExprRefNull, value: type}; + } + + static defaultFor(type) { + switch (type) { + case kWasmI32: + return this.I32Const(0); + case kWasmI64: + return this.I64Const(0); + case kWasmF32: + return this.F32Const(0); + case kWasmF64: + return this.F64Const(0); + case kWasmS128: + return this.S128Const(new Array(16).fill(0)); + default: + let heap_type = (typeof type) == 'number' ? type : type.index; + return this.RefNull(heap_type); + } + } +} + class WasmGlobalBuilder { - constructor(module, type, mutable) { + // {init} a pair {type, immediate}. Construct it with WasmInitExpr. + constructor(module, type, mutable, init) { this.module = module; this.type = type; this.mutable = mutable; - this.init = 0; + this.init = init; } exportAs(name) { @@ -1051,14 +1135,14 @@ class WasmGlobalBuilder { } class WasmTableBuilder { - constructor(module, type, initial_size, max_size, init_func_index) { + constructor(module, type, initial_size, max_size, init_expr) { this.module = module; this.type = type; this.initial_size = initial_size; - this.has_max = max_size != undefined; + this.has_max = max_size !== undefined; this.max_size = max_size; - this.init_func_index = init_func_index; - this.has_init = init_func_index != undefined; + this.init_expr = init_expr; + this.has_init = init_expr !== undefined; } exportAs(name) { @@ -1069,14 +1153,17 @@ class WasmTableBuilder { } function makeField(type, mutability) { - assertEquals( - 'boolean', typeof mutability, 'field mutability must be boolean'); + if ((typeof mutability) != 'boolean') { + throw new Error('field mutability must be boolean'); + } return {type: type, mutability: mutability}; } class WasmStruct { constructor(fields) { - assertTrue(Array.isArray(fields), 'struct fields must be an array'); + if (!Array.isArray(fields)) { + throw new Error('struct fields must be an array'); + } this.fields = fields; } } @@ -1087,6 +1174,41 @@ class WasmArray { } } +class WasmElemSegment { + constructor(table, offset, type, elements, is_decl) { + this.table = table; + this.offset = offset; + this.type = type; + this.elements = elements; + this.is_decl = is_decl; + // Invariant checks. + if ((table === undefined) != (offset === undefined)) { + throw new Error("invalid element segment"); + } + for (let elem of elements) { + if (((typeof elem) == 'number') != (type === undefined)) { + throw new Error("invalid element"); + } + } + } + + is_active() { + return this.table !== undefined; + } + + is_passive() { + return this.table === undefined && !this.is_decl; + } + + is_declarative() { + return this.table === undefined && this.is_decl; + } + + expressions_as_elements() { + return this.type !== undefined; + } +} + class WasmModuleBuilder { constructor() { this.types = []; @@ -1179,21 +1301,22 @@ class WasmModuleBuilder { return this.types.length - 1; } - addGlobal(type, mutable) { - let glob = new WasmGlobalBuilder(this, type, mutable); + addGlobal(type, mutable, init) { + if (init === undefined) init = WasmInitExpr.defaultFor(type); + let glob = new WasmGlobalBuilder(this, type, mutable, init); glob.index = this.globals.length + this.num_imported_globals; this.globals.push(glob); return glob; } addTable( - type, initial_size, max_size = undefined, init_func_index = undefined) { + type, initial_size, max_size = undefined, init_expr = undefined) { if (type == kWasmI32 || type == kWasmI64 || type == kWasmF32 || type == kWasmF64 || type == kWasmS128 || type == kWasmVoid) { throw new Error('Tables must be of a reference type'); } let table = new WasmTableBuilder( - this, type, initial_size, max_size, init_func_index); + this, type, initial_size, max_size, init_expr); table.index = this.tables.length + this.num_imported_tables; this.tables.push(table); return table; @@ -1299,7 +1422,7 @@ class WasmModuleBuilder { } addExportOfKind(name, kind, index) { - if (index == undefined && kind != kExternalTable && + if (index === undefined && kind != kExternalTable && kind != kExternalMemory) { throw new Error( 'Index for exports other than tables/memories must be provided'); @@ -1335,28 +1458,29 @@ class WasmModuleBuilder { this.exports.push({name: name, kind: kExternalMemory, index: 0}); } - addElementSegment(table, base, is_global, array) { - this.element_segments.push({ - table: table, - base: base, - is_global: is_global, - array: array, - is_active: true, - is_declarative: false - }); - return this; + // {offset} is an initializer expression. + // If {type} is undefined, then {elements} are function indices. Otherwise, + // they are initializer expressions. + addActiveElementSegment(table, offset, elements, type) { + this.element_segments.push( + new WasmElemSegment(table, offset, type, elements, false)); + return this.element_segments.length - 1; } - addPassiveElementSegment(array) { + // If {type} is undefined, then {elements} are function indices. Otherwise, + // they are initializer expressions. + addPassiveElementSegment(elements, type) { this.element_segments.push( - {array: array, is_active: false, is_declarative: false}); - return this; + new WasmElemSegment(undefined, undefined, type, elements, false)); + return this.element_segments.length - 1; } - addDeclarativeElementSegment(array) { + // If {type} is undefined, then {elements} are function indices. Otherwise, + // they are initializer expressions. + addDeclarativeElementSegment(elements, type) { this.element_segments.push( - {array: array, is_active: false, is_declarative: true}); - return this; + new WasmElemSegment(undefined, undefined, type, elements, true)); + return this.element_segments.length - 1; } appendToTable(array) { @@ -1375,7 +1499,7 @@ class WasmModuleBuilder { if (table.has_max && table_size > table.max_size) { table.max_size = table_size; } - return this.addElementSegment(0, base, false, array); + return this.addActiveElementSegment(0, WasmInitExpr.I32Const(base), array); } setTableBounds(min, max = undefined) { @@ -1492,9 +1616,7 @@ class WasmModuleBuilder { section.emit_u32v(table.initial_size); if (table.has_max) section.emit_u32v(table.max_size); if (table.has_init) { - section.emit_u8(kExprRefFunc); - section.emit_u32v(table.init_func_index); - section.emit_u8(kExprEnd); + section.emit_init_expr(table.init_expr); } } }); @@ -1507,8 +1629,9 @@ class WasmModuleBuilder { section.emit_u8(1); // one memory entry const has_max = wasm.memory.max !== undefined; if (wasm.memory.is_memory64) { - assertFalse( - wasm.memory.shared, 'sharing memory64 is not supported (yet)'); + if (wasm.memory.shared) { + throw new Error('sharing memory64 is not supported (yet)'); + } section.emit_u8( has_max ? kLimitsMemory64WithMaximum : kLimitsMemory64NoMaximum); section.emit_u64v(wasm.memory.min); @@ -1545,56 +1668,7 @@ class WasmModuleBuilder { for (let global of wasm.globals) { section.emit_type(global.type); section.emit_u8(global.mutable); - if ((typeof global.init_index) == 'undefined') { - // Emit a constant initializer. - switch (global.type) { - case kWasmI32: - section.emit_u8(kExprI32Const); - section.emit_u32v(global.init); - break; - case kWasmI64: - section.emit_u8(kExprI64Const); - section.emit_u64v(global.init); - break; - case kWasmF32: - section.emit_bytes(wasmF32Const(global.init)); - break; - case kWasmF64: - section.emit_bytes(wasmF64Const(global.init)); - break; - case kWasmS128: - section.emit_bytes(wasmS128Const(global.init)); - break; - case kWasmExternRef: - section.emit_u8(kExprRefNull); - section.emit_u8(kWasmExternRef); - assertEquals(global.function_index, undefined); - break; - case kWasmAnyFunc: - if (global.function_index !== undefined) { - section.emit_u8(kExprRefFunc); - section.emit_u32v(global.function_index); - } else { - section.emit_u8(kExprRefNull); - section.emit_u8(kWasmAnyFunc); - } - break; - default: - if (global.function_index !== undefined) { - section.emit_u8(kExprRefFunc); - section.emit_u32v(global.function_index); - } else { - section.emit_u8(kExprRefNull); - section.emit_u32v(global.type.index); - } - break; - } - } else { - // Emit a global-index initializer. - section.emit_u8(kExprGlobalGet); - section.emit_u32v(global.init_index); - } - section.emit_u8(kExprEnd); // end of init expression + section.emit_init_expr(global.init); } }); } @@ -1631,62 +1705,65 @@ class WasmModuleBuilder { if (wasm.element_segments.length > 0) { if (debug) print('emitting element segments @ ' + binary.length); binary.emit_section(kElementSectionCode, section => { - var inits = wasm.element_segments; - section.emit_u32v(inits.length); - - for (let init of inits) { - if (init.is_active) { - // Active segment. - if (init.table == 0) { - section.emit_u32v(kActiveNoIndex); - } else { - section.emit_u32v(kActiveWithIndex); - section.emit_u32v(init.table); - } - if (init.is_global) { - section.emit_u8(kExprGlobalGet); + var segments = wasm.element_segments; + section.emit_u32v(segments.length); + + for (let segment of segments) { + // Emit flag and header. + // Each case below corresponds to a flag from + // https://webassembly.github.io/spec/core/binary/modules.html#element-section + // (not in increasing order). + if (segment.is_active()) { + if (segment.table == 0 && segment.type === undefined) { + if (segment.expressions_as_elements()) { + section.emit_u8(0x04); + section.emit_init_expr(segment.offset); + } else { + section.emit_u8(0x00) + section.emit_init_expr(segment.offset); + } } else { - section.emit_u8(kExprI32Const); - } - section.emit_u32v(init.base); - section.emit_u8(kExprEnd); - if (init.table != 0) { - section.emit_u8(kExternalFunction); - } - section.emit_u32v(init.array.length); - for (let index of init.array) { - section.emit_u32v(index); - } - } else if ( - init.is_declarative && - init.array.every(index => index !== null)) { - section.emit_u8(kDeclarative); - section.emit_u8(kExternalFunction); - section.emit_u32v(init.array.length); - for (let index of init.array) { - section.emit_u32v(index); + if (segment.expressions_as_elements()) { + section.emit_u8(0x06); + section.emit_u32v(segment.table); + section.emit_init_expr(segment.offset); + section.emit_type(segment.type); + } else { + section.emit_u8(0x02); + section.emit_u32v(segment.table); + section.emit_init_expr(segment.offset); + section.emit_u8(kExternalFunction); + } } } else { - // Passive or declarative segment with elements. - section.emit_u8( - init.is_declarative ? kDeclarativeWithElements : - kPassiveWithElements); // flags - section.emit_u8(kWasmAnyFunc); - section.emit_u32v(init.array.length); - for (let index of init.array) { - if (index === null) { - section.emit_u8(kExprRefNull); - section.emit_u8(kWasmAnyFunc); - section.emit_u8(kExprEnd); + if (segment.expressions_as_elements()) { + if (segment.is_passive()) { + section.emit_u8(0x05); + } else { + section.emit_u8(0x07); + } + section.emit_type(segment.type); + } else { + if (segment.is_passive()) { + section.emit_u8(0x01); } else { - section.emit_u8(kExprRefFunc); - section.emit_u32v(index); - section.emit_u8(kExprEnd); + section.emit_u8(0x03); } + section.emit_u8(kExternalFunction); + } + } + + // Emit elements. + section.emit_u32v(segment.elements.length); + for (let element of segment.elements) { + if (segment.expressions_as_elements()) { + section.emit_init_expr(element); + } else { + section.emit_u32v(element); } } } - }); + }) } // If there are any passive data segments, add the DataCount section. @@ -1889,6 +1966,12 @@ function wasmI32Const(val) { return [kExprI32Const, ...wasmSignedLeb(val, 5)]; } +// Note: Since {val} is a JS number, the generated constant only has 53 bits of +// precision. +function wasmI64Const(val) { + return [kExprI64Const, ...wasmSignedLeb(val, 10)]; +} + function wasmF32Const(f) { // Write in little-endian order at offset 0. data_view.setFloat32(0, f, true); diff --git a/deps/v8/test/test262/test262.status b/deps/v8/test/test262/test262.status index 8cae693b58..189ccc382c 100644 --- a/deps/v8/test/test262/test262.status +++ b/deps/v8/test/test262/test262.status @@ -71,14 +71,15 @@ 'language/expressions/prefix-increment/S11.4.4_A5_*': [FAIL], 'language/statements/variable/binding-resolution': [FAIL], + # https://code.google.com/p/v8/issues/detail?id=10958 + 'language/module-code/eval-gtbndng-indirect-faux-assertion': [FAIL], + # https://code.google.com/p/v8/issues/detail?id=8771 'language/computed-property-names/class/static/method-number': [FAIL], 'language/computed-property-names/class/static/method-string': [FAIL], 'language/computed-property-names/class/static/method-symbol': [FAIL], # https://bugs.chromium.org/p/v8/issues/detail?id=4895 - 'built-ins/TypedArrayConstructors/internals/DefineOwnProperty/tonumber-value-detached-buffer': [FAIL], - 'built-ins/TypedArrayConstructors/internals/DefineOwnProperty/BigInt/tonumber-value-detached-buffer': [FAIL], # Some TypedArray methods throw due to the same bug, from Get 'built-ins/TypedArray/prototype/every/callbackfn-detachbuffer': [FAIL], 'built-ins/TypedArray/prototype/every/BigInt/callbackfn-detachbuffer': [FAIL], @@ -573,11 +574,6 @@ # http://crbug/v8/10905 'language/identifier-resolution/assign-to-global-undefined': [FAIL], - # https://bugs.chromium.org/p/chromium/issues/detail?id=1159764 - 'built-ins/Array/prototype/at/*': [FAIL], - 'built-ins/String/prototype/at/*': [FAIL], - 'built-ins/TypedArray/prototype/at/*': [FAIL], - # http://crbug/v8/11530 'built-ins/Function/internals/Call/class-ctor-realm': [FAIL], @@ -590,6 +586,12 @@ # http://crbug/v8/11533 'language/statements/class/subclass/default-constructor-spread-override': [FAIL], + # https://bugs.chromium.org/p/v8/issues/detail?id=11689 + 'built-ins/BigInt/wrapper-object-ordinary-toprimitive': [FAIL], + + # https://bugs.chromium.org/p/v8/issues/detail?id=11690 + 'language/module-code/export-expname-binding-index': [FAIL], + ######################## NEEDS INVESTIGATION ########################### # https://bugs.chromium.org/p/v8/issues/detail?id=7833 diff --git a/deps/v8/test/test262/testcfg.py b/deps/v8/test/test262/testcfg.py index 42aeac4723..68c0b99cc7 100644 --- a/deps/v8/test/test262/testcfg.py +++ b/deps/v8/test/test262/testcfg.py @@ -45,6 +45,7 @@ from testrunner.outproc import test262 # TODO(littledan): move the flag mapping into the status file FEATURE_FLAGS = { 'Intl.DateTimeFormat-dayPeriod': '--harmony-intl-dateformat-day-period', + 'Intl.Locale-info': '--harmony_intl_locale_info', 'Symbol.prototype.description': '--harmony-symbol-description', 'FinalizationRegistry': '--harmony-weak-refs-with-cleanup-some', 'WeakRef': '--harmony-weak-refs-with-cleanup-some', @@ -54,6 +55,8 @@ FEATURE_FLAGS = { 'regexp-match-indices': '--harmony-regexp-match-indices', # https://github.com/tc39/test262/pull/2395 'regexp-named-groups': '--harmony-regexp-match-indices', + 'error-cause': '--harmony-error-cause', + 'import-assertions': '--harmony-import-assertions', } SKIPPED_FEATURES = set([]) diff --git a/deps/v8/test/unittests/BUILD.gn b/deps/v8/test/unittests/BUILD.gn index 43858603dc..f47b499413 100644 --- a/deps/v8/test/unittests/BUILD.gn +++ b/deps/v8/test/unittests/BUILD.gn @@ -86,6 +86,7 @@ v8_source_set("cppgc_unittests_sources") { testonly = true sources = [ + "heap/cppgc/allocation-unittest.cc", "heap/cppgc/compactor-unittest.cc", "heap/cppgc/concurrent-marking-unittest.cc", "heap/cppgc/concurrent-sweeper-unittest.cc", @@ -101,6 +102,7 @@ v8_source_set("cppgc_unittests_sources") { "heap/cppgc/heap-growing-unittest.cc", "heap/cppgc/heap-object-header-unittest.cc", "heap/cppgc/heap-page-unittest.cc", + "heap/cppgc/heap-registry-unittest.cc", "heap/cppgc/heap-statistics-collector-unittest.cc", "heap/cppgc/heap-unittest.cc", "heap/cppgc/incremental-marking-schedule-unittest.cc", @@ -117,6 +119,7 @@ v8_source_set("cppgc_unittests_sources") { "heap/cppgc/page-memory-unittest.cc", "heap/cppgc/persistent-family-unittest.cc", "heap/cppgc/prefinalizer-unittest.cc", + "heap/cppgc/sanitizer-unittest.cc", "heap/cppgc/source-location-unittest.cc", "heap/cppgc/stack-unittest.cc", "heap/cppgc/stats-collector-scopes-unittest.cc", @@ -129,6 +132,7 @@ v8_source_set("cppgc_unittests_sources") { "heap/cppgc/tests.h", "heap/cppgc/visitor-unittest.cc", "heap/cppgc/weak-container-unittest.cc", + "heap/cppgc/workloads-unittest.cc", "heap/cppgc/write-barrier-unittest.cc", ] @@ -359,6 +363,7 @@ v8_source_set("unittests_sources") { "parser/ast-value-unittest.cc", "parser/preparser-unittest.cc", "profiler/strings-storage-unittest.cc", + "regexp/regexp-unittest.cc", "regress/regress-crbug-1041240-unittest.cc", "regress/regress-crbug-1056054-unittest.cc", "regress/regress-crbug-938251-unittest.cc", @@ -387,6 +392,10 @@ v8_source_set("unittests_sources") { "zone/zone-unittest.cc", ] + if (v8_enable_runtime_call_stats) { + sources += [ "logging/runtime-call-stats-unittest.cc" ] + } + if (v8_enable_webassembly) { sources += [ "../../test/common/wasm/wasm-macro-gen.h", diff --git a/deps/v8/test/unittests/base/division-by-constant-unittest.cc b/deps/v8/test/unittests/base/division-by-constant-unittest.cc index 19a084c5de..8fe57c21bd 100644 --- a/deps/v8/test/unittests/base/division-by-constant-unittest.cc +++ b/deps/v8/test/unittests/base/division-by-constant-unittest.cc @@ -8,7 +8,7 @@ #include <stdint.h> -#include <ostream> // NOLINT +#include <ostream> #include "testing/gtest-support.h" diff --git a/deps/v8/test/unittests/base/platform/platform-unittest.cc b/deps/v8/test/unittests/base/platform/platform-unittest.cc index 192b51cf9c..c3a2874864 100644 --- a/deps/v8/test/unittests/base/platform/platform-unittest.cc +++ b/deps/v8/test/unittests/base/platform/platform-unittest.cc @@ -89,6 +89,7 @@ TEST(StackTest, GetCurrentStackPosition) { EXPECT_NE(nullptr, Stack::GetCurrentStackPosition()); } +#if !V8_OS_FUCHSIA TEST(StackTest, StackVariableInBounds) { void* dummy; ASSERT_GT(static_cast<void*>(Stack::GetStackStart()), @@ -98,6 +99,7 @@ TEST(StackTest, StackVariableInBounds) { EXPECT_LT(static_cast<void*>(Stack::GetCurrentStackPosition()), Stack::GetRealStackAddressForSlot(&dummy)); } +#endif // !V8_OS_FUCHSIA } // namespace base } // namespace v8 diff --git a/deps/v8/test/unittests/codegen/code-stub-assembler-unittest.cc b/deps/v8/test/unittests/codegen/code-stub-assembler-unittest.cc index 6137b3425a..121190bdb8 100644 --- a/deps/v8/test/unittests/codegen/code-stub-assembler-unittest.cc +++ b/deps/v8/test/unittests/codegen/code-stub-assembler-unittest.cc @@ -5,7 +5,7 @@ #include "test/unittests/codegen/code-stub-assembler-unittest.h" #include "src/codegen/code-factory.h" -#include "src/codegen/interface-descriptors.h" +#include "src/codegen/interface-descriptors-inl.h" #include "src/compiler/node.h" #include "src/execution/isolate.h" #include "src/objects/objects-inl.h" diff --git a/deps/v8/test/unittests/compiler/arm64/instruction-selector-arm64-unittest.cc b/deps/v8/test/unittests/compiler/arm64/instruction-selector-arm64-unittest.cc index 7a865c6d7f..f14f6a962e 100644 --- a/deps/v8/test/unittests/compiler/arm64/instruction-selector-arm64-unittest.cc +++ b/deps/v8/test/unittests/compiler/arm64/instruction-selector-arm64-unittest.cc @@ -642,6 +642,21 @@ TEST_P(InstructionSelectorAddSubTest, SignedExtendHalfword) { ASSERT_EQ(1U, s[0]->OutputCount()); } +TEST_P(InstructionSelectorAddSubTest, SignedExtendWord) { + const AddSub dpi = GetParam(); + const MachineType type = dpi.mi.machine_type; + if (type != MachineType::Int64()) return; + StreamBuilder m(this, type, type, type); + m.Return((m.*dpi.mi.constructor)(m.Parameter(0), + m.ChangeInt32ToInt64(m.Parameter(1)))); + Stream s = m.Build(); + ASSERT_EQ(1U, s.size()); + EXPECT_EQ(dpi.mi.arch_opcode, s[0]->arch_opcode()); + EXPECT_EQ(kMode_Operand2_R_SXTW, s[0]->addressing_mode()); + ASSERT_EQ(2U, s[0]->InputCount()); + ASSERT_EQ(1U, s[0]->OutputCount()); +} + INSTANTIATE_TEST_SUITE_P(InstructionSelectorTest, InstructionSelectorAddSubTest, ::testing::ValuesIn(kAddSubInstructions)); @@ -5103,11 +5118,9 @@ namespace { // Builds a call with the specified signature and nodes as arguments. // Then checks that the correct number of kArm64Poke and kArm64PokePair were // generated. -void TestPokePair( - InstructionSelectorTest::StreamBuilder* m, // NOLINT(runtime/references) - Zone* zone, - MachineSignature::Builder* builder, // NOLINT(runtime/references) - Node* nodes[], int num_nodes, int expected_poke_pair, int expected_poke) { +void TestPokePair(InstructionSelectorTest::StreamBuilder* m, Zone* zone, + MachineSignature::Builder* builder, Node* nodes[], + int num_nodes, int expected_poke_pair, int expected_poke) { auto call_descriptor = InstructionSelectorTest::StreamBuilder::MakeSimpleCallDescriptor( zone, builder->Build()); diff --git a/deps/v8/test/unittests/compiler/backend/instruction-selector-unittest.cc b/deps/v8/test/unittests/compiler/backend/instruction-selector-unittest.cc index 60ba115713..11ee5d2075 100644 --- a/deps/v8/test/unittests/compiler/backend/instruction-selector-unittest.cc +++ b/deps/v8/test/unittests/compiler/backend/instruction-selector-unittest.cc @@ -138,6 +138,14 @@ bool InstructionSelectorTest::Stream::IsSameAsFirst( return unallocated->HasSameAsInputPolicy(); } +bool InstructionSelectorTest::Stream::IsSameAsInput( + const InstructionOperand* operand, int input_index) const { + if (!operand->IsUnallocated()) return false; + const UnallocatedOperand* unallocated = UnallocatedOperand::cast(operand); + return unallocated->HasSameAsInputPolicy() && + unallocated->input_index() == input_index; +} + bool InstructionSelectorTest::Stream::IsUsedAtStart( const InstructionOperand* operand) const { if (!operand->IsUnallocated()) return false; diff --git a/deps/v8/test/unittests/compiler/backend/instruction-selector-unittest.h b/deps/v8/test/unittests/compiler/backend/instruction-selector-unittest.h index 203daca69f..3af4f7b587 100644 --- a/deps/v8/test/unittests/compiler/backend/instruction-selector-unittest.h +++ b/deps/v8/test/unittests/compiler/backend/instruction-selector-unittest.h @@ -234,6 +234,8 @@ class InstructionSelectorTest : public TestWithNativeContextAndZone { bool IsFixed(const InstructionOperand* operand, Register reg) const; bool IsSameAsFirst(const InstructionOperand* operand) const; + bool IsSameAsInput(const InstructionOperand* operand, + int input_index) const; bool IsUsedAtStart(const InstructionOperand* operand) const; FrameStateDescriptor* GetFrameStateDescriptor(int deoptimization_id) { diff --git a/deps/v8/test/unittests/compiler/backend/instruction-sequence-unittest.cc b/deps/v8/test/unittests/compiler/backend/instruction-sequence-unittest.cc index 3cfb050c79..d644906f1c 100644 --- a/deps/v8/test/unittests/compiler/backend/instruction-sequence-unittest.cc +++ b/deps/v8/test/unittests/compiler/backend/instruction-sequence-unittest.cc @@ -394,8 +394,8 @@ InstructionOperand InstructionSequenceTest::ConvertOutputOp(VReg vreg, CHECK_EQ(op.vreg_.value_, kNoValue); op.vreg_ = vreg; switch (op.type_) { - case kSameAsFirst: - return Unallocated(op, UnallocatedOperand::SAME_AS_FIRST_INPUT); + case kSameAsInput: + return Unallocated(op, UnallocatedOperand::SAME_AS_INPUT); case kRegister: return Unallocated(op, UnallocatedOperand::MUST_HAVE_REGISTER); case kFixedSlot: diff --git a/deps/v8/test/unittests/compiler/backend/instruction-sequence-unittest.h b/deps/v8/test/unittests/compiler/backend/instruction-sequence-unittest.h index 988bc37281..0a8768d063 100644 --- a/deps/v8/test/unittests/compiler/backend/instruction-sequence-unittest.h +++ b/deps/v8/test/unittests/compiler/backend/instruction-sequence-unittest.h @@ -42,7 +42,7 @@ class InstructionSequenceTest : public TestWithIsolateAndZone { enum TestOperandType { kInvalid, - kSameAsFirst, + kSameAsInput, kRegister, kFixedRegister, kSlot, @@ -73,7 +73,7 @@ class InstructionSequenceTest : public TestWithIsolateAndZone { MachineRepresentation rep_; }; - static TestOperand Same() { return TestOperand(kSameAsFirst); } + static TestOperand Same() { return TestOperand(kSameAsInput); } static TestOperand Reg(VReg vreg, int index = kNoValue) { TestOperandType type = (index == kNoValue) ? kRegister : kFixedRegister; diff --git a/deps/v8/test/unittests/compiler/dead-code-elimination-unittest.cc b/deps/v8/test/unittests/compiler/dead-code-elimination-unittest.cc index 72e02e1416..8f30e54839 100644 --- a/deps/v8/test/unittests/compiler/dead-code-elimination-unittest.cc +++ b/deps/v8/test/unittests/compiler/dead-code-elimination-unittest.cc @@ -24,7 +24,8 @@ class DeadCodeEliminationTest : public GraphTest { protected: Reduction Reduce(AdvancedReducer::Editor* editor, Node* node) { - DeadCodeElimination reducer(editor, graph(), common(), zone()); + DeadCodeElimination reducer(editor, graph(), common(), zone(), + FLAG_concurrent_inlining); return reducer.Reduce(node); } diff --git a/deps/v8/test/unittests/compiler/effect-control-linearizer-unittest.cc b/deps/v8/test/unittests/compiler/effect-control-linearizer-unittest.cc index f01b1adddc..2b76e5289f 100644 --- a/deps/v8/test/unittests/compiler/effect-control-linearizer-unittest.cc +++ b/deps/v8/test/unittests/compiler/effect-control-linearizer-unittest.cc @@ -86,9 +86,8 @@ TEST_F(EffectControlLinearizerTest, SimpleLoad) { // Run the state effect introducer. LinearizeEffectControl(jsgraph(), &schedule, zone(), source_positions(), - node_origins(), - MaskArrayIndexEnable::kDoNotMaskArrayIndex, - MaintainSchedule::kDiscard, broker()); + node_origins(), PoisoningMitigationLevel::kDontPoison, + broker()); EXPECT_THAT(load, IsLoadField(AccessBuilder::ForHeapNumberValue(), heap_number, @@ -149,9 +148,8 @@ TEST_F(EffectControlLinearizerTest, DiamondLoad) { // Run the state effect introducer. LinearizeEffectControl(jsgraph(), &schedule, zone(), source_positions(), - node_origins(), - MaskArrayIndexEnable::kDoNotMaskArrayIndex, - MaintainSchedule::kDiscard, broker()); + node_origins(), PoisoningMitigationLevel::kDontPoison, + broker()); // The effect input to the return should be an effect phi with the // newly introduced effectful change operators. @@ -217,9 +215,8 @@ TEST_F(EffectControlLinearizerTest, LoopLoad) { // Run the state effect introducer. LinearizeEffectControl(jsgraph(), &schedule, zone(), source_positions(), - node_origins(), - MaskArrayIndexEnable::kDoNotMaskArrayIndex, - MaintainSchedule::kDiscard, broker()); + node_origins(), PoisoningMitigationLevel::kDontPoison, + broker()); ASSERT_THAT(ret, IsReturn(load, load, if_true)); EXPECT_THAT(load, IsLoadField(AccessBuilder::ForHeapNumberValue(), @@ -281,9 +278,8 @@ TEST_F(EffectControlLinearizerTest, CloneBranch) { schedule.AddNode(mblock, graph()->end()); LinearizeEffectControl(jsgraph(), &schedule, zone(), source_positions(), - node_origins(), - MaskArrayIndexEnable::kDoNotMaskArrayIndex, - MaintainSchedule::kDiscard, broker()); + node_origins(), PoisoningMitigationLevel::kDontPoison, + broker()); Capture<Node *> branch1_capture, branch2_capture; EXPECT_THAT( @@ -338,11 +334,11 @@ TEST_F(EffectControlLinearizerTest, UnreachableThenBranch) { ASSERT_THAT(end(), IsEnd(IsThrow(), IsThrow())); ASSERT_THAT(end()->op()->ControlInputCount(), 2); - // Run the state effect linearizer, maintaining the schedule. - LinearizeEffectControl(jsgraph(), &schedule, zone(), source_positions(), - node_origins(), - MaskArrayIndexEnable::kDoNotMaskArrayIndex, - MaintainSchedule::kMaintain, broker()); + // Run the state effect linearizer and machine lowering, maintaining the + // schedule. + LowerToMachineSchedule(jsgraph(), &schedule, zone(), source_positions(), + node_origins(), PoisoningMitigationLevel::kDontPoison, + broker()); ASSERT_THAT(end(), IsEnd(IsThrow())); } @@ -391,11 +387,11 @@ TEST_F(EffectControlLinearizerTest, UnreachableThenDiamond) { ASSERT_THAT(end(), IsEnd(IsThrow())); ASSERT_THAT(end()->op()->ControlInputCount(), 1); - // Run the state effect linearizer, maintaining the schedule. - LinearizeEffectControl(jsgraph(), &schedule, zone(), source_positions(), - node_origins(), - MaskArrayIndexEnable::kDoNotMaskArrayIndex, - MaintainSchedule::kMaintain, broker()); + // Run the state effect linearizer and machine lowering, maintaining the + // schedule. + LowerToMachineSchedule(jsgraph(), &schedule, zone(), source_positions(), + node_origins(), PoisoningMitigationLevel::kDontPoison, + broker()); ASSERT_THAT(end(), IsEnd(IsThrow())); } @@ -449,11 +445,11 @@ TEST_F(EffectControlLinearizerTest, UnreachableThenLoop) { ASSERT_THAT(end(), IsEnd(IsThrow())); ASSERT_THAT(end()->op()->ControlInputCount(), 1); - // Run the state effect linearizer, maintaining the schedule. - LinearizeEffectControl(jsgraph(), &schedule, zone(), source_positions(), - node_origins(), - MaskArrayIndexEnable::kDoNotMaskArrayIndex, - MaintainSchedule::kMaintain, broker()); + // Run the state effect linearizer and machine lowering, maintaining the + // schedule. + LowerToMachineSchedule(jsgraph(), &schedule, zone(), source_positions(), + node_origins(), PoisoningMitigationLevel::kDontPoison, + broker()); ASSERT_THAT(end(), IsEnd(IsThrow())); } @@ -503,11 +499,11 @@ TEST_F(EffectControlLinearizerTest, UnreachableInChangedBlockThenBranch) { ASSERT_THAT(end(), IsEnd(IsThrow(), IsThrow())); ASSERT_THAT(end()->op()->ControlInputCount(), 2); - // Run the state effect linearizer, maintaining the schedule. - LinearizeEffectControl(jsgraph(), &schedule, zone(), source_positions(), - node_origins(), - MaskArrayIndexEnable::kDoNotMaskArrayIndex, - MaintainSchedule::kMaintain, broker()); + // Run the state effect linearizer and machine lowering, maintaining the + // schedule. + LowerToMachineSchedule(jsgraph(), &schedule, zone(), source_positions(), + node_origins(), PoisoningMitigationLevel::kDontPoison, + broker()); ASSERT_THAT(end(), IsEnd(IsThrow())); } diff --git a/deps/v8/test/unittests/compiler/ia32/instruction-selector-ia32-unittest.cc b/deps/v8/test/unittests/compiler/ia32/instruction-selector-ia32-unittest.cc index 4478b36047..f3942b776e 100644 --- a/deps/v8/test/unittests/compiler/ia32/instruction-selector-ia32-unittest.cc +++ b/deps/v8/test/unittests/compiler/ia32/instruction-selector-ia32-unittest.cc @@ -658,6 +658,21 @@ TEST_F(InstructionSelectorTest, LoadAnd32) { EXPECT_EQ(s.ToVreg(p1), s.ToVreg(s[0]->InputAt(1))); } +TEST_F(InstructionSelectorTest, LoadImmutableAnd32) { + StreamBuilder m(this, MachineType::Int32(), MachineType::Int32(), + MachineType::Int32()); + Node* const p0 = m.Parameter(0); + Node* const p1 = m.Parameter(1); + m.Return(m.Word32And( + p0, m.LoadImmutable(MachineType::Int32(), p1, m.Int32Constant(127)))); + Stream s = m.Build(); + ASSERT_EQ(1U, s.size()); + EXPECT_EQ(kIA32And, s[0]->arch_opcode()); + ASSERT_EQ(3U, s[0]->InputCount()); + EXPECT_EQ(s.ToVreg(p0), s.ToVreg(s[0]->InputAt(0))); + EXPECT_EQ(s.ToVreg(p1), s.ToVreg(s[0]->InputAt(1))); +} + TEST_F(InstructionSelectorTest, LoadOr32) { StreamBuilder m(this, MachineType::Int32(), MachineType::Int32(), MachineType::Int32()); diff --git a/deps/v8/test/unittests/compiler/int64-lowering-unittest.cc b/deps/v8/test/unittests/compiler/int64-lowering-unittest.cc index 8eafd4fe15..da23e61b93 100644 --- a/deps/v8/test/unittests/compiler/int64-lowering-unittest.cc +++ b/deps/v8/test/unittests/compiler/int64-lowering-unittest.cc @@ -4,7 +4,7 @@ #include "src/compiler/int64-lowering.h" -#include "src/codegen/interface-descriptors.h" +#include "src/codegen/interface-descriptors-inl.h" #include "src/codegen/machine-type.h" #include "src/codegen/signature.h" #include "src/compiler/common-operator.h" @@ -429,9 +429,10 @@ TEST_F(Int64LoweringTest, ParameterWithJSClosureParam) { IsReturn(js_closure, start(), start())); } -// The following tests assume that pointers are 32 bit and therefore pointers do -// not get lowered. This assumption does not hold on 64 bit platforms, which -// invalidates these tests. +// The following tests are only valid in 32-bit platforms, due to one of these +// two assumptions: +// - Pointers are 32 bit and therefore pointers do not get lowered. +// - 64-bit rol/ror/clz/ctz instructions have a control input. // TODO(wasm): We can find an alternative to re-activate these tests. #if V8_TARGET_ARCH_32_BIT TEST_F(Int64LoweringTest, CallI64Return) { @@ -514,6 +515,154 @@ TEST_F(Int64LoweringTest, Int64Add) { IsProjection(1, AllOf(CaptureEq(&add), add_matcher)), start(), start())); } + +TEST_F(Int64LoweringTest, I64Clz) { + LowerGraph(graph()->NewNode(machine()->Word64ClzLowerable(), + Int64Constant(value(0)), graph()->start()), + MachineRepresentation::kWord64); + + Capture<Node*> branch_capture; + Matcher<Node*> branch_matcher = IsBranch( + IsWord32Equal(IsInt32Constant(high_word_value(0)), IsInt32Constant(0)), + start()); + + EXPECT_THAT( + graph()->end()->InputAt(1), + IsReturn2( + IsPhi(MachineRepresentation::kWord32, + IsInt32Add(IsWord32Clz(IsInt32Constant(low_word_value(0))), + IsInt32Constant(32)), + IsWord32Clz(IsInt32Constant(high_word_value(0))), + IsMerge( + IsIfTrue(AllOf(CaptureEq(&branch_capture), branch_matcher)), + IsIfFalse( + AllOf(CaptureEq(&branch_capture), branch_matcher)))), + IsInt32Constant(0), start(), start())); +} + +TEST_F(Int64LoweringTest, I64Ctz) { + LowerGraph(graph()->NewNode(machine()->Word64CtzLowerable().placeholder(), + Int64Constant(value(0)), graph()->start()), + MachineRepresentation::kWord64); + Capture<Node*> branch_capture; + Matcher<Node*> branch_matcher = IsBranch( + IsWord32Equal(IsInt32Constant(low_word_value(0)), IsInt32Constant(0)), + start()); + EXPECT_THAT( + graph()->end()->InputAt(1), + IsReturn2( + IsPhi(MachineRepresentation::kWord32, + IsInt32Add(IsWord32Ctz(IsInt32Constant(high_word_value(0))), + IsInt32Constant(32)), + IsWord32Ctz(IsInt32Constant(low_word_value(0))), + IsMerge( + IsIfTrue(AllOf(CaptureEq(&branch_capture), branch_matcher)), + IsIfFalse( + AllOf(CaptureEq(&branch_capture), branch_matcher)))), + IsInt32Constant(0), start(), start())); +} + +TEST_F(Int64LoweringTest, I64Ror) { + LowerGraph( + graph()->NewNode(machine()->Word64RorLowerable(), Int64Constant(value(0)), + Parameter(0), graph()->start()), + MachineRepresentation::kWord64, MachineRepresentation::kWord64, 1); + + Matcher<Node*> branch_lt32_matcher = + IsBranch(IsInt32LessThan(IsParameter(0), IsInt32Constant(32)), start()); + + Matcher<Node*> low_input_matcher = IsPhi( + MachineRepresentation::kWord32, IsInt32Constant(low_word_value(0)), + IsInt32Constant(high_word_value(0)), + IsMerge(IsIfTrue(branch_lt32_matcher), IsIfFalse(branch_lt32_matcher))); + + Matcher<Node*> high_input_matcher = IsPhi( + MachineRepresentation::kWord32, IsInt32Constant(high_word_value(0)), + IsInt32Constant(low_word_value(0)), + IsMerge(IsIfTrue(branch_lt32_matcher), IsIfFalse(branch_lt32_matcher))); + + Matcher<Node*> shift_matcher = + IsWord32And(IsParameter(0), IsInt32Constant(0x1F)); + + Matcher<Node*> bit_mask_matcher = IsWord32Xor( + IsWord32Shr(IsInt32Constant(-1), shift_matcher), IsInt32Constant(-1)); + + Matcher<Node*> inv_mask_matcher = + IsWord32Xor(bit_mask_matcher, IsInt32Constant(-1)); + + EXPECT_THAT( + graph()->end()->InputAt(1), + IsReturn2( + IsWord32Or(IsWord32And(IsWord32Ror(low_input_matcher, shift_matcher), + inv_mask_matcher), + IsWord32And(IsWord32Ror(high_input_matcher, shift_matcher), + bit_mask_matcher)), + IsWord32Or(IsWord32And(IsWord32Ror(high_input_matcher, shift_matcher), + inv_mask_matcher), + IsWord32And(IsWord32Ror(low_input_matcher, shift_matcher), + bit_mask_matcher)), + start(), start())); +} + +TEST_F(Int64LoweringTest, I64Ror_0) { + LowerGraph( + graph()->NewNode(machine()->Word64RorLowerable(), Int64Constant(value(0)), + Int32Constant(0), graph()->start()), + MachineRepresentation::kWord64); + + EXPECT_THAT(graph()->end()->InputAt(1), + IsReturn2(IsInt32Constant(low_word_value(0)), + IsInt32Constant(high_word_value(0)), start(), start())); +} + +TEST_F(Int64LoweringTest, I64Ror_32) { + LowerGraph( + graph()->NewNode(machine()->Word64RorLowerable(), Int64Constant(value(0)), + Int32Constant(32), graph()->start()), + MachineRepresentation::kWord64); + + EXPECT_THAT(graph()->end()->InputAt(1), + IsReturn2(IsInt32Constant(high_word_value(0)), + IsInt32Constant(low_word_value(0)), start(), start())); +} + +TEST_F(Int64LoweringTest, I64Ror_11) { + LowerGraph( + graph()->NewNode(machine()->Word64RorLowerable(), Int64Constant(value(0)), + Int32Constant(11), graph()->start()), + MachineRepresentation::kWord64); + + EXPECT_THAT( + graph()->end()->InputAt(1), + IsReturn2(IsWord32Or(IsWord32Shr(IsInt32Constant(low_word_value(0)), + IsInt32Constant(11)), + IsWord32Shl(IsInt32Constant(high_word_value(0)), + IsInt32Constant(21))), + IsWord32Or(IsWord32Shr(IsInt32Constant(high_word_value(0)), + IsInt32Constant(11)), + IsWord32Shl(IsInt32Constant(low_word_value(0)), + IsInt32Constant(21))), + start(), start())); +} + +TEST_F(Int64LoweringTest, I64Ror_43) { + LowerGraph( + graph()->NewNode(machine()->Word64RorLowerable(), Int64Constant(value(0)), + Int32Constant(43), graph()->start()), + MachineRepresentation::kWord64); + + EXPECT_THAT( + graph()->end()->InputAt(1), + IsReturn2(IsWord32Or(IsWord32Shr(IsInt32Constant(high_word_value(0)), + IsInt32Constant(11)), + IsWord32Shl(IsInt32Constant(low_word_value(0)), + IsInt32Constant(21))), + IsWord32Or(IsWord32Shr(IsInt32Constant(low_word_value(0)), + IsInt32Constant(11)), + IsWord32Shl(IsInt32Constant(high_word_value(0)), + IsInt32Constant(21))), + start(), start())); +} #endif TEST_F(Int64LoweringTest, Int64Sub) { @@ -772,51 +921,6 @@ TEST_F(Int64LoweringTest, I64ReinterpretF64) { start(), start())); } -TEST_F(Int64LoweringTest, I64Clz) { - LowerGraph(graph()->NewNode(machine()->Word64Clz(), Int64Constant(value(0))), - MachineRepresentation::kWord64); - - Capture<Node*> branch_capture; - Matcher<Node*> branch_matcher = IsBranch( - IsWord32Equal(IsInt32Constant(high_word_value(0)), IsInt32Constant(0)), - start()); - - EXPECT_THAT( - graph()->end()->InputAt(1), - IsReturn2( - IsPhi(MachineRepresentation::kWord32, - IsInt32Add(IsWord32Clz(IsInt32Constant(low_word_value(0))), - IsInt32Constant(32)), - IsWord32Clz(IsInt32Constant(high_word_value(0))), - IsMerge( - IsIfTrue(AllOf(CaptureEq(&branch_capture), branch_matcher)), - IsIfFalse( - AllOf(CaptureEq(&branch_capture), branch_matcher)))), - IsInt32Constant(0), start(), start())); -} - -TEST_F(Int64LoweringTest, I64Ctz) { - LowerGraph(graph()->NewNode(machine()->Word64Ctz().placeholder(), - Int64Constant(value(0))), - MachineRepresentation::kWord64); - Capture<Node*> branch_capture; - Matcher<Node*> branch_matcher = IsBranch( - IsWord32Equal(IsInt32Constant(low_word_value(0)), IsInt32Constant(0)), - start()); - EXPECT_THAT( - graph()->end()->InputAt(1), - IsReturn2( - IsPhi(MachineRepresentation::kWord32, - IsInt32Add(IsWord32Ctz(IsInt32Constant(high_word_value(0))), - IsInt32Constant(32)), - IsWord32Ctz(IsInt32Constant(low_word_value(0))), - IsMerge( - IsIfTrue(AllOf(CaptureEq(&branch_capture), branch_matcher)), - IsIfFalse( - AllOf(CaptureEq(&branch_capture), branch_matcher)))), - IsInt32Constant(0), start(), start())); -} - TEST_F(Int64LoweringTest, Dfs) { Node* common = Int64Constant(value(0)); LowerGraph(graph()->NewNode(machine()->Word64And(), common, @@ -847,103 +951,6 @@ TEST_F(Int64LoweringTest, I64Popcnt) { IsInt32Constant(0), start(), start())); } -TEST_F(Int64LoweringTest, I64Ror) { - LowerGraph(graph()->NewNode(machine()->Word64Ror(), Int64Constant(value(0)), - Parameter(0)), - MachineRepresentation::kWord64, MachineRepresentation::kWord64, 1); - - Matcher<Node*> branch_lt32_matcher = - IsBranch(IsInt32LessThan(IsParameter(0), IsInt32Constant(32)), start()); - - Matcher<Node*> low_input_matcher = IsPhi( - MachineRepresentation::kWord32, IsInt32Constant(low_word_value(0)), - IsInt32Constant(high_word_value(0)), - IsMerge(IsIfTrue(branch_lt32_matcher), IsIfFalse(branch_lt32_matcher))); - - Matcher<Node*> high_input_matcher = IsPhi( - MachineRepresentation::kWord32, IsInt32Constant(high_word_value(0)), - IsInt32Constant(low_word_value(0)), - IsMerge(IsIfTrue(branch_lt32_matcher), IsIfFalse(branch_lt32_matcher))); - - Matcher<Node*> shift_matcher = - IsWord32And(IsParameter(0), IsInt32Constant(0x1F)); - - Matcher<Node*> bit_mask_matcher = IsWord32Xor( - IsWord32Shr(IsInt32Constant(-1), shift_matcher), IsInt32Constant(-1)); - - Matcher<Node*> inv_mask_matcher = - IsWord32Xor(bit_mask_matcher, IsInt32Constant(-1)); - - EXPECT_THAT( - graph()->end()->InputAt(1), - IsReturn2( - IsWord32Or(IsWord32And(IsWord32Ror(low_input_matcher, shift_matcher), - inv_mask_matcher), - IsWord32And(IsWord32Ror(high_input_matcher, shift_matcher), - bit_mask_matcher)), - IsWord32Or(IsWord32And(IsWord32Ror(high_input_matcher, shift_matcher), - inv_mask_matcher), - IsWord32And(IsWord32Ror(low_input_matcher, shift_matcher), - bit_mask_matcher)), - start(), start())); -} - -TEST_F(Int64LoweringTest, I64Ror_0) { - LowerGraph(graph()->NewNode(machine()->Word64Ror(), Int64Constant(value(0)), - Int32Constant(0)), - MachineRepresentation::kWord64); - - EXPECT_THAT(graph()->end()->InputAt(1), - IsReturn2(IsInt32Constant(low_word_value(0)), - IsInt32Constant(high_word_value(0)), start(), start())); -} - -TEST_F(Int64LoweringTest, I64Ror_32) { - LowerGraph(graph()->NewNode(machine()->Word64Ror(), Int64Constant(value(0)), - Int32Constant(32)), - MachineRepresentation::kWord64); - - EXPECT_THAT(graph()->end()->InputAt(1), - IsReturn2(IsInt32Constant(high_word_value(0)), - IsInt32Constant(low_word_value(0)), start(), start())); -} - -TEST_F(Int64LoweringTest, I64Ror_11) { - LowerGraph(graph()->NewNode(machine()->Word64Ror(), Int64Constant(value(0)), - Int32Constant(11)), - MachineRepresentation::kWord64); - - EXPECT_THAT( - graph()->end()->InputAt(1), - IsReturn2(IsWord32Or(IsWord32Shr(IsInt32Constant(low_word_value(0)), - IsInt32Constant(11)), - IsWord32Shl(IsInt32Constant(high_word_value(0)), - IsInt32Constant(21))), - IsWord32Or(IsWord32Shr(IsInt32Constant(high_word_value(0)), - IsInt32Constant(11)), - IsWord32Shl(IsInt32Constant(low_word_value(0)), - IsInt32Constant(21))), - start(), start())); -} - -TEST_F(Int64LoweringTest, I64Ror_43) { - LowerGraph(graph()->NewNode(machine()->Word64Ror(), Int64Constant(value(0)), - Int32Constant(43)), - MachineRepresentation::kWord64); - - EXPECT_THAT( - graph()->end()->InputAt(1), - IsReturn2(IsWord32Or(IsWord32Shr(IsInt32Constant(high_word_value(0)), - IsInt32Constant(11)), - IsWord32Shl(IsInt32Constant(low_word_value(0)), - IsInt32Constant(21))), - IsWord32Or(IsWord32Shr(IsInt32Constant(low_word_value(0)), - IsInt32Constant(11)), - IsWord32Shl(IsInt32Constant(high_word_value(0)), - IsInt32Constant(21))), - start(), start())); -} - TEST_F(Int64LoweringTest, I64PhiWord64) { LowerGraph(graph()->NewNode(common()->Phi(MachineRepresentation::kWord64, 2), Int64Constant(value(0)), Int64Constant(value(1)), @@ -1063,20 +1070,20 @@ TEST_F(Int64LoweringTest, WasmBigIntSpecialCaseBigIntToI64) { CallDescriptor* bigint_to_i64_call_descriptor = Linkage::GetStubCallDescriptor( - zone(), // zone - BigIntToI64Descriptor(), // descriptor - BigIntToI64Descriptor() - .GetStackParameterCount(), // stack parameter count - CallDescriptor::kNoFlags, // flags - Operator::kNoProperties, // properties - StubCallMode::kCallCodeObject); // stub call mode + zone(), // zone + BigIntToI64Descriptor(), // descriptor + BigIntToI64Descriptor::GetStackParameterCount(), // stack parameter + // count + CallDescriptor::kNoFlags, // flags + Operator::kNoProperties, // properties + StubCallMode::kCallCodeObject); // stub call mode CallDescriptor* bigint_to_i32_pair_call_descriptor = Linkage::GetStubCallDescriptor( zone(), // zone BigIntToI32PairDescriptor(), // descriptor - BigIntToI32PairDescriptor() - .GetStackParameterCount(), // stack parameter count + BigIntToI32PairDescriptor:: + GetStackParameterCount(), // stack parameter count CallDescriptor::kNoFlags, // flags Operator::kNoProperties, // properties StubCallMode::kCallCodeObject); // stub call mode @@ -1109,20 +1116,20 @@ TEST_F(Int64LoweringTest, WasmBigIntSpecialCaseI64ToBigInt) { CallDescriptor* i64_to_bigint_call_descriptor = Linkage::GetStubCallDescriptor( - zone(), // zone - I64ToBigIntDescriptor(), // descriptor - I64ToBigIntDescriptor() - .GetStackParameterCount(), // stack parameter count - CallDescriptor::kNoFlags, // flags - Operator::kNoProperties, // properties - StubCallMode::kCallCodeObject); // stub call mode + zone(), // zone + I64ToBigIntDescriptor(), // descriptor + I64ToBigIntDescriptor::GetStackParameterCount(), // stack parameter + // count + CallDescriptor::kNoFlags, // flags + Operator::kNoProperties, // properties + StubCallMode::kCallCodeObject); // stub call mode CallDescriptor* i32_pair_to_bigint_call_descriptor = Linkage::GetStubCallDescriptor( zone(), // zone I32PairToBigIntDescriptor(), // descriptor - I32PairToBigIntDescriptor() - .GetStackParameterCount(), // stack parameter count + I32PairToBigIntDescriptor:: + GetStackParameterCount(), // stack parameter count CallDescriptor::kNoFlags, // flags Operator::kNoProperties, // properties StubCallMode::kCallCodeObject); // stub call mode diff --git a/deps/v8/test/unittests/compiler/js-call-reducer-unittest.cc b/deps/v8/test/unittests/compiler/js-call-reducer-unittest.cc index a8020b6244..435495169a 100644 --- a/deps/v8/test/unittests/compiler/js-call-reducer-unittest.cc +++ b/deps/v8/test/unittests/compiler/js-call-reducer-unittest.cc @@ -117,7 +117,7 @@ class JSCallReducerTest : public TypedGraphTest { return javascript()->Call(JSCallNode::ArityForArgc(arity), CallFrequency(), feedback, ConvertReceiverMode::kAny, SpeculationMode::kAllowSpeculation, - CallFeedbackRelation::kRelated); + CallFeedbackRelation::kTarget); } private: diff --git a/deps/v8/test/unittests/compiler/js-native-context-specialization-unittest.cc b/deps/v8/test/unittests/compiler/js-native-context-specialization-unittest.cc index db11bd28ca..ca4d2a4f9a 100644 --- a/deps/v8/test/unittests/compiler/js-native-context-specialization-unittest.cc +++ b/deps/v8/test/unittests/compiler/js-native-context-specialization-unittest.cc @@ -8,7 +8,6 @@ #include "src/compiler/js-operator.h" #include "src/compiler/machine-operator.h" #include "src/compiler/simplified-operator.h" -#include "src/numbers/dtoa.h" namespace v8 { namespace internal { @@ -30,7 +29,7 @@ class JSNativeContextSpecializationTest : public GraphTest { TEST_F(JSNativeContextSpecializationTest, GetMaxStringLengthOfString) { const size_t str_len = 3; - const size_t num_len = kBase10MaximalLength + 1; + const size_t num_len = kMaxDoubleStringLength; Node* const str_node = graph()->NewNode( common()->HeapConstant(factory()->InternalizeUtf8String("str"))); diff --git a/deps/v8/test/unittests/compiler/machine-operator-unittest.cc b/deps/v8/test/unittests/compiler/machine-operator-unittest.cc index edb2942084..faa04e8a7a 100644 --- a/deps/v8/test/unittests/compiler/machine-operator-unittest.cc +++ b/deps/v8/test/unittests/compiler/machine-operator-unittest.cc @@ -191,6 +191,7 @@ const PureOperator kPureOperators[] = { PURE(Word64Shr, 2, 0, 1), // -- PURE(Word64Sar, 2, 0, 1), // -- PURE(Word64Ror, 2, 0, 1), // -- + PURE(Word64RorLowerable, 2, 1, 1), // -- PURE(Word64Equal, 2, 0, 1), // -- PURE(Int32Add, 2, 0, 1), // -- PURE(Int32Sub, 2, 0, 1), // -- @@ -253,7 +254,6 @@ const PureOperator kPureOperators[] = { #undef PURE }; - class MachinePureOperatorTest : public TestWithZone { protected: MachineRepresentation word_type() { @@ -308,6 +308,8 @@ const OptionalOperatorEntry kOptionalOperators[] = { OPTIONAL_ENTRY(Float64RoundTiesAway, 1, 0, 1), // -- OPTIONAL_ENTRY(Float64Select, 3, 0, 1), // -- OPTIONAL_ENTRY(Float32Select, 3, 0, 1), // -- + OPTIONAL_ENTRY(Word32Select, 3, 0, 1), // -- + OPTIONAL_ENTRY(Word64Select, 3, 0, 1), // -- #undef OPTIONAL_ENTRY }; diff --git a/deps/v8/test/unittests/compiler/node-test-utils.h b/deps/v8/test/unittests/compiler/node-test-utils.h index d9afb36963..0e5e99679c 100644 --- a/deps/v8/test/unittests/compiler/node-test-utils.h +++ b/deps/v8/test/unittests/compiler/node-test-utils.h @@ -21,7 +21,7 @@ template <typename T> class Handle; class HeapObject; class Type; -enum TypeofMode : int; +enum class TypeofMode; namespace compiler { diff --git a/deps/v8/test/unittests/compiler/ppc/OWNERS b/deps/v8/test/unittests/compiler/ppc/OWNERS deleted file mode 100644 index 02c2cd757c..0000000000 --- a/deps/v8/test/unittests/compiler/ppc/OWNERS +++ /dev/null @@ -1,5 +0,0 @@ -junyan@redhat.com -joransiu@ca.ibm.com -midawson@redhat.com -mfarazma@redhat.com -vasili.skurydzin@ibm.com diff --git a/deps/v8/test/unittests/compiler/riscv64/instruction-selector-riscv64-unittest.cc b/deps/v8/test/unittests/compiler/riscv64/instruction-selector-riscv64-unittest.cc index 9df179139e..81dc2d3be9 100644 --- a/deps/v8/test/unittests/compiler/riscv64/instruction-selector-riscv64-unittest.cc +++ b/deps/v8/test/unittests/compiler/riscv64/instruction-selector-riscv64-unittest.cc @@ -1396,9 +1396,9 @@ TEST_F(InstructionSelectorTest, Word32EqualWithZero) { m.Return(m.Word32Equal(m.Parameter(0), m.Int32Constant(0))); Stream s = m.Build(); ASSERT_EQ(1U, s.size()); - EXPECT_EQ(kRiscvCmp, s[0]->arch_opcode()); + EXPECT_EQ(kRiscvCmpZero, s[0]->arch_opcode()); EXPECT_EQ(kMode_None, s[0]->addressing_mode()); - ASSERT_EQ(2U, s[0]->InputCount()); + ASSERT_EQ(1U, s[0]->InputCount()); EXPECT_EQ(1U, s[0]->OutputCount()); EXPECT_EQ(kFlags_set, s[0]->flags_mode()); EXPECT_EQ(kEqual, s[0]->flags_condition()); @@ -1408,9 +1408,9 @@ TEST_F(InstructionSelectorTest, Word32EqualWithZero) { m.Return(m.Word32Equal(m.Int32Constant(0), m.Parameter(0))); Stream s = m.Build(); ASSERT_EQ(1U, s.size()); - EXPECT_EQ(kRiscvCmp, s[0]->arch_opcode()); + EXPECT_EQ(kRiscvCmpZero, s[0]->arch_opcode()); EXPECT_EQ(kMode_None, s[0]->addressing_mode()); - ASSERT_EQ(2U, s[0]->InputCount()); + ASSERT_EQ(1U, s[0]->InputCount()); EXPECT_EQ(1U, s[0]->OutputCount()); EXPECT_EQ(kFlags_set, s[0]->flags_mode()); EXPECT_EQ(kEqual, s[0]->flags_condition()); @@ -1423,9 +1423,9 @@ TEST_F(InstructionSelectorTest, Word64EqualWithZero) { m.Return(m.Word64Equal(m.Parameter(0), m.Int64Constant(0))); Stream s = m.Build(); ASSERT_EQ(1U, s.size()); - EXPECT_EQ(kRiscvCmp, s[0]->arch_opcode()); + EXPECT_EQ(kRiscvCmpZero, s[0]->arch_opcode()); EXPECT_EQ(kMode_None, s[0]->addressing_mode()); - ASSERT_EQ(2U, s[0]->InputCount()); + ASSERT_EQ(1U, s[0]->InputCount()); EXPECT_EQ(1U, s[0]->OutputCount()); EXPECT_EQ(kFlags_set, s[0]->flags_mode()); EXPECT_EQ(kEqual, s[0]->flags_condition()); @@ -1435,9 +1435,9 @@ TEST_F(InstructionSelectorTest, Word64EqualWithZero) { m.Return(m.Word64Equal(m.Int32Constant(0), m.Parameter(0))); Stream s = m.Build(); ASSERT_EQ(1U, s.size()); - EXPECT_EQ(kRiscvCmp, s[0]->arch_opcode()); + EXPECT_EQ(kRiscvCmpZero, s[0]->arch_opcode()); EXPECT_EQ(kMode_None, s[0]->addressing_mode()); - ASSERT_EQ(2U, s[0]->InputCount()); + ASSERT_EQ(1U, s[0]->InputCount()); EXPECT_EQ(1U, s[0]->OutputCount()); EXPECT_EQ(kFlags_set, s[0]->flags_mode()); EXPECT_EQ(kEqual, s[0]->flags_condition()); diff --git a/deps/v8/test/unittests/compiler/x64/instruction-selector-x64-unittest.cc b/deps/v8/test/unittests/compiler/x64/instruction-selector-x64-unittest.cc index 4dcbbf2eb8..d2591a52ef 100644 --- a/deps/v8/test/unittests/compiler/x64/instruction-selector-x64-unittest.cc +++ b/deps/v8/test/unittests/compiler/x64/instruction-selector-x64-unittest.cc @@ -77,6 +77,34 @@ TEST_F(InstructionSelectorTest, TruncateInt64ToInt32WithParameter) { EXPECT_EQ(kX64Movl, s[0]->arch_opcode()); } +TEST_F(InstructionSelectorTest, SelectWord32) { + StreamBuilder m(this, MachineType::Int32(), MachineType::Int32(), + MachineType::Int32()); + Node* cond = m.Int32Constant(1); + m.Return(m.Word32Select(cond, m.Parameter(0), m.Parameter(1))); + Stream s = m.Build(); + EXPECT_EQ(kX64Cmp32, s[0]->arch_opcode()); + EXPECT_EQ(4U, s[0]->InputCount()); + EXPECT_EQ(1U, s[0]->OutputCount()); + EXPECT_EQ(kFlags_select, s[0]->flags_mode()); + EXPECT_EQ(kNotEqual, s[0]->flags_condition()); + EXPECT_TRUE(s.IsSameAsInput(s[0]->Output(), 2)); +} + +TEST_F(InstructionSelectorTest, SelectWord64) { + StreamBuilder m(this, MachineType::Int64(), MachineType::Int64(), + MachineType::Int64()); + Node* cond = m.Int32Constant(1); + m.Return(m.Word64Select(cond, m.Parameter(0), m.Parameter(1))); + Stream s = m.Build(); + EXPECT_EQ(kX64Cmp32, s[0]->arch_opcode()); + EXPECT_EQ(4U, s[0]->InputCount()); + EXPECT_EQ(1U, s[0]->OutputCount()); + EXPECT_EQ(kFlags_select, s[0]->flags_mode()); + EXPECT_EQ(kNotEqual, s[0]->flags_condition()); + EXPECT_TRUE(s.IsSameAsInput(s[0]->Output(), 2)); +} + namespace { struct LoadWithToInt64Extension { MachineType type; @@ -1288,6 +1316,24 @@ TEST_F(InstructionSelectorTest, LoadCmp32) { EXPECT_TRUE(s[0]->InputAt(2)->IsImmediate()); } { + // Word32Equal(LoadImmutable[Int8](p0, p1), Int32Constant(0)) -> + // cmpb [p0,p1], 0 + StreamBuilder m(this, MachineType::Int32(), MachineType::Int64(), + MachineType::Int64()); + Node* const p0 = m.Parameter(0); + Node* const p1 = m.Parameter(1); + m.Return(m.Word32Equal(m.LoadImmutable(MachineType::Int8(), p0, p1), + m.Int32Constant(0))); + Stream s = m.Build(); + ASSERT_EQ(1U, s.size()); + EXPECT_EQ(kX64Cmp8, s[0]->arch_opcode()); + EXPECT_EQ(kMode_MR1, s[0]->addressing_mode()); + ASSERT_EQ(3U, s[0]->InputCount()); + EXPECT_EQ(s.ToVreg(p0), s.ToVreg(s[0]->InputAt(0))); + EXPECT_EQ(s.ToVreg(p1), s.ToVreg(s[0]->InputAt(1))); + EXPECT_TRUE(s[0]->InputAt(2)->IsImmediate()); + } + { // Word32Equal(Load[Uint8](p0, p1), Int32Constant(0)) -> cmpb [p0,p1], 0 StreamBuilder m(this, MachineType::Int32(), MachineType::Int64(), MachineType::Int64()); diff --git a/deps/v8/test/unittests/execution/microtask-queue-unittest.cc b/deps/v8/test/unittests/execution/microtask-queue-unittest.cc index 84e29f2596..6c136b7b33 100644 --- a/deps/v8/test/unittests/execution/microtask-queue-unittest.cc +++ b/deps/v8/test/unittests/execution/microtask-queue-unittest.cc @@ -248,6 +248,7 @@ TEST_P(MicrotaskQueueTest, VisitRoot) { } TEST_P(MicrotaskQueueTest, PromiseHandlerContext) { + microtask_queue()->set_microtasks_policy(MicrotasksPolicy::kExplicit); Local<v8::Context> v8_context2 = v8::Context::New(v8_isolate()); Local<v8::Context> v8_context3 = v8::Context::New(v8_isolate()); Local<v8::Context> v8_context4 = v8::Context::New(v8_isolate()); @@ -354,6 +355,7 @@ TEST_P(MicrotaskQueueTest, DetachGlobal_Enqueue) { } TEST_P(MicrotaskQueueTest, DetachGlobal_Run) { + microtask_queue()->set_microtasks_policy(MicrotasksPolicy::kExplicit); EXPECT_EQ(0, microtask_queue()->size()); // Enqueue microtasks to the current context. @@ -392,6 +394,7 @@ TEST_P(MicrotaskQueueTest, DetachGlobal_Run) { } TEST_P(MicrotaskQueueTest, DetachGlobal_PromiseResolveThenableJobTask) { + microtask_queue()->set_microtasks_policy(MicrotasksPolicy::kExplicit); RunJS( "var resolve;" "var promise = new Promise(r => { resolve = r; });" @@ -414,6 +417,7 @@ TEST_P(MicrotaskQueueTest, DetachGlobal_PromiseResolveThenableJobTask) { } TEST_P(MicrotaskQueueTest, DetachGlobal_ResolveThenableForeignThen) { + microtask_queue()->set_microtasks_policy(MicrotasksPolicy::kExplicit); Handle<JSArray> result = RunJS<JSArray>( "let result = [false];" "result"); @@ -425,6 +429,7 @@ TEST_P(MicrotaskQueueTest, DetachGlobal_ResolveThenableForeignThen) { // Create a context with its own microtask queue. std::unique_ptr<MicrotaskQueue> sub_microtask_queue = MicrotaskQueue::New(isolate()); + sub_microtask_queue->set_microtasks_policy(MicrotasksPolicy::kExplicit); Local<v8::Context> sub_context = v8::Context::New( v8_isolate(), /* extensions= */ nullptr, diff --git a/deps/v8/test/unittests/heap/cppgc/allocation-unittest.cc b/deps/v8/test/unittests/heap/cppgc/allocation-unittest.cc new file mode 100644 index 0000000000..bf21d5ce6e --- /dev/null +++ b/deps/v8/test/unittests/heap/cppgc/allocation-unittest.cc @@ -0,0 +1,134 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "include/cppgc/allocation.h" + +#include "include/cppgc/visitor.h" +#include "src/heap/cppgc/heap-object-header.h" +#include "test/unittests/heap/cppgc/tests.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace cppgc { +namespace internal { + +namespace { + +class CppgcAllocationTest : public testing::TestWithHeap {}; + +struct GCed final : GarbageCollected<GCed> { + void Trace(cppgc::Visitor*) const {} +}; + +class HeapAllocatedArray final : public GarbageCollected<HeapAllocatedArray> { + public: + HeapAllocatedArray() { + for (int i = 0; i < kArraySize; ++i) { + array_[i] = i % 128; + } + } + + int8_t at(size_t i) { return array_[i]; } + void Trace(Visitor* visitor) const {} + + private: + static const int kArraySize = 1000; + int8_t array_[kArraySize]; +}; + +} // namespace + +TEST_F(CppgcAllocationTest, MakeGarbageCollectedPreservesPayload) { + // Allocate an object in the heap. + HeapAllocatedArray* array = + MakeGarbageCollected<HeapAllocatedArray>(GetAllocationHandle()); + + // Sanity check of the contents in the heap. + EXPECT_EQ(0, array->at(0)); + EXPECT_EQ(42, array->at(42)); + EXPECT_EQ(0, array->at(128)); + EXPECT_EQ(999 % 128, array->at(999)); +} + +TEST_F(CppgcAllocationTest, ReuseMemoryFromFreelist) { + // Allocate 3 objects so that the address we look for below is not at the + // start of the page. + MakeGarbageCollected<GCed>(GetAllocationHandle()); + MakeGarbageCollected<GCed>(GetAllocationHandle()); + GCed* p1 = MakeGarbageCollected<GCed>(GetAllocationHandle()); + // GC reclaims all objects. LABs are reset during the GC. + PreciseGC(); + // Now the freed memory in the first GC should be reused. Allocating 3 + // objects again should suffice but allocating 5 to give the test some slack. + bool reused_memory_found = false; + for (int i = 0; i < 5; i++) { + GCed* p2 = MakeGarbageCollected<GCed>(GetAllocationHandle()); + if (p1 == p2) { + reused_memory_found = true; + break; + } + } + EXPECT_TRUE(reused_memory_found); +} + +namespace { +class CallbackInCtor final : public GarbageCollected<CallbackInCtor> { + public: + template <typename Callback> + explicit CallbackInCtor(Callback callback) { + callback(); + } + + void Trace(Visitor*) const {} +}; +} // namespace + +TEST_F(CppgcAllocationTest, + ConservativeGCDuringAllocationDoesNotReclaimObject) { + CallbackInCtor* obj = MakeGarbageCollected<CallbackInCtor>( + GetAllocationHandle(), [this]() { ConservativeGC(); }); + EXPECT_FALSE(HeapObjectHeader::FromObject(obj).IsFree()); +} + +namespace { +class LargeObject : public GarbageCollected<LargeObject> { + public: + static constexpr size_t kDataSize = kLargeObjectSizeThreshold + 1; + static size_t destructor_calls; + + explicit LargeObject(bool check) { + if (!check) return; + for (size_t i = 0; i < LargeObject::kDataSize; ++i) { + EXPECT_EQ(0, data[i]); + } + } + ~LargeObject() { ++destructor_calls; } + void Trace(Visitor*) const {} + + char data[kDataSize]; +}; +size_t LargeObject::destructor_calls = 0u; +} // namespace + +TEST_F(CppgcAllocationTest, LargePagesAreZeroedOut) { + static constexpr size_t kNumObjects = 1u; + LargeObject::destructor_calls = 0u; + std::vector<void*> pages; + for (size_t i = 0; i < kNumObjects; ++i) { + auto* obj = MakeGarbageCollected<LargeObject>(GetAllocationHandle(), false); + pages.push_back(obj); + memset(obj->data, 0xff, LargeObject::kDataSize); + } + PreciseGC(); + EXPECT_EQ(kNumObjects, LargeObject::destructor_calls); + bool reused_page = false; + for (size_t i = 0; i < kNumObjects; ++i) { + auto* obj = MakeGarbageCollected<LargeObject>(GetAllocationHandle(), true); + if (std::find(pages.begin(), pages.end(), obj) != pages.end()) + reused_page = true; + } + EXPECT_TRUE(reused_page); +} + +} // namespace internal +} // namespace cppgc diff --git a/deps/v8/test/unittests/heap/cppgc/concurrent-sweeper-unittest.cc b/deps/v8/test/unittests/heap/cppgc/concurrent-sweeper-unittest.cc index b03f3388d5..fb302abbaf 100644 --- a/deps/v8/test/unittests/heap/cppgc/concurrent-sweeper-unittest.cc +++ b/deps/v8/test/unittests/heap/cppgc/concurrent-sweeper-unittest.cc @@ -145,7 +145,7 @@ TEST_F(ConcurrentSweeperTest, BackgroundSweepOfNormalPage) { auto* unmarked_object = MakeGarbageCollected<GCedType>(GetAllocationHandle()); auto* marked_object = MakeGarbageCollected<GCedType>(GetAllocationHandle()); - HeapObjectHeader::FromPayload(marked_object).TryMarkAtomic(); + HeapObjectHeader::FromObject(marked_object).TryMarkAtomic(); auto* page = BasePage::FromPayload(unmarked_object); auto* space = page->space(); @@ -160,10 +160,10 @@ TEST_F(ConcurrentSweeperTest, BackgroundSweepOfNormalPage) { #if !defined(CPPGC_YOUNG_GENERATION) // Check that the marked object was unmarked. - EXPECT_FALSE(HeapObjectHeader::FromPayload(marked_object).IsMarked()); + EXPECT_FALSE(HeapObjectHeader::FromObject(marked_object).IsMarked()); #else // Check that the marked object is still marked. - EXPECT_TRUE(HeapObjectHeader::FromPayload(marked_object).IsMarked()); + EXPECT_TRUE(HeapObjectHeader::FromObject(marked_object).IsMarked()); #endif // Check that free list entries are created right away for non-finalizable @@ -184,7 +184,7 @@ TEST_F(ConcurrentSweeperTest, BackgroundSweepOfLargePage) { auto* unmarked_object = MakeGarbageCollected<GCedType>(GetAllocationHandle()); auto* marked_object = MakeGarbageCollected<GCedType>(GetAllocationHandle()); - HeapObjectHeader::FromPayload(marked_object).TryMarkAtomic(); + HeapObjectHeader::FromObject(marked_object).TryMarkAtomic(); auto* unmarked_page = BasePage::FromPayload(unmarked_object); auto* marked_page = BasePage::FromPayload(marked_object); @@ -199,10 +199,10 @@ TEST_F(ConcurrentSweeperTest, BackgroundSweepOfLargePage) { #if !defined(CPPGC_YOUNG_GENERATION) // Check that the marked object was unmarked. - EXPECT_FALSE(HeapObjectHeader::FromPayload(marked_object).IsMarked()); + EXPECT_FALSE(HeapObjectHeader::FromObject(marked_object).IsMarked()); #else // Check that the marked object is still marked. - EXPECT_TRUE(HeapObjectHeader::FromPayload(marked_object).IsMarked()); + EXPECT_TRUE(HeapObjectHeader::FromObject(marked_object).IsMarked()); #endif // Check that free list entries are created right away for non-finalizable @@ -299,9 +299,8 @@ TEST_F(ConcurrentSweeperTest, IncrementalSweeping) { MakeGarbageCollected<LargeFinalizable>(GetAllocationHandle()); auto& marked_normal_header = - HeapObjectHeader::FromPayload(marked_normal_object); - auto& marked_large_header = - HeapObjectHeader::FromPayload(marked_large_object); + HeapObjectHeader::FromObject(marked_normal_object); + auto& marked_large_header = HeapObjectHeader::FromObject(marked_large_object); marked_normal_header.TryMarkAtomic(); marked_large_header.TryMarkAtomic(); diff --git a/deps/v8/test/unittests/heap/cppgc/custom-spaces-unittest.cc b/deps/v8/test/unittests/heap/cppgc/custom-spaces-unittest.cc index 7e73a73178..ccc642bfcc 100644 --- a/deps/v8/test/unittests/heap/cppgc/custom-spaces-unittest.cc +++ b/deps/v8/test/unittests/heap/cppgc/custom-spaces-unittest.cc @@ -114,6 +114,18 @@ TEST_F(TestWithHeapWithCustomSpaces, AllocateOnCustomSpaces) { NormalPage::FromPayload(regular)->space()->index()); } +TEST_F(TestWithHeapWithCustomSpaces, DifferentSpacesUsesDifferentPages) { + auto* regular = + MakeGarbageCollected<RegularGCed>(GetHeap()->GetAllocationHandle()); + auto* custom1 = + MakeGarbageCollected<CustomGCed1>(GetHeap()->GetAllocationHandle()); + auto* custom2 = + MakeGarbageCollected<CustomGCed2>(GetHeap()->GetAllocationHandle()); + EXPECT_NE(NormalPage::FromPayload(regular), NormalPage::FromPayload(custom1)); + EXPECT_NE(NormalPage::FromPayload(regular), NormalPage::FromPayload(custom2)); + EXPECT_NE(NormalPage::FromPayload(custom1), NormalPage::FromPayload(custom2)); +} + TEST_F(TestWithHeapWithCustomSpaces, AllocateOnCustomSpacesSpecifiedThroughBase) { auto* regular = diff --git a/deps/v8/test/unittests/heap/cppgc/ephemeron-pair-unittest.cc b/deps/v8/test/unittests/heap/cppgc/ephemeron-pair-unittest.cc index 32a5929fe4..c759308723 100644 --- a/deps/v8/test/unittests/heap/cppgc/ephemeron-pair-unittest.cc +++ b/deps/v8/test/unittests/heap/cppgc/ephemeron-pair-unittest.cc @@ -96,10 +96,10 @@ TEST_F(EphemeronPairTest, ValueMarkedWhenKeyIsMarked) { GCed* value = MakeGarbageCollected<GCed>(GetAllocationHandle()); Persistent<EphemeronHolder> holder = MakeGarbageCollected<EphemeronHolder>(GetAllocationHandle(), key, value); - HeapObjectHeader::FromPayload(key).TryMarkAtomic(); + HeapObjectHeader::FromObject(key).TryMarkAtomic(); InitializeMarker(*Heap::From(GetHeap()), GetPlatformHandle().get()); FinishMarking(); - EXPECT_TRUE(HeapObjectHeader::FromPayload(value).IsMarked()); + EXPECT_TRUE(HeapObjectHeader::FromObject(value).IsMarked()); } TEST_F(EphemeronPairTest, ValueNotMarkedWhenKeyIsNotMarked) { @@ -109,8 +109,8 @@ TEST_F(EphemeronPairTest, ValueNotMarkedWhenKeyIsNotMarked) { MakeGarbageCollected<EphemeronHolder>(GetAllocationHandle(), key, value); InitializeMarker(*Heap::From(GetHeap()), GetPlatformHandle().get()); FinishMarking(); - EXPECT_FALSE(HeapObjectHeader::FromPayload(key).IsMarked()); - EXPECT_FALSE(HeapObjectHeader::FromPayload(value).IsMarked()); + EXPECT_FALSE(HeapObjectHeader::FromObject(key).IsMarked()); + EXPECT_FALSE(HeapObjectHeader::FromObject(value).IsMarked()); } TEST_F(EphemeronPairTest, ValueNotMarkedBeforeKey) { @@ -120,10 +120,10 @@ TEST_F(EphemeronPairTest, ValueNotMarkedBeforeKey) { MakeGarbageCollected<EphemeronHolder>(GetAllocationHandle(), key, value); InitializeMarker(*Heap::From(GetHeap()), GetPlatformHandle().get()); FinishSteps(); - EXPECT_FALSE(HeapObjectHeader::FromPayload(value).IsMarked()); - HeapObjectHeader::FromPayload(key).TryMarkAtomic(); + EXPECT_FALSE(HeapObjectHeader::FromObject(value).IsMarked()); + HeapObjectHeader::FromObject(key).TryMarkAtomic(); FinishMarking(); - EXPECT_TRUE(HeapObjectHeader::FromPayload(value).IsMarked()); + EXPECT_TRUE(HeapObjectHeader::FromObject(value).IsMarked()); } TEST_F(EphemeronPairTest, TraceEphemeronDispatch) { @@ -132,10 +132,10 @@ TEST_F(EphemeronPairTest, TraceEphemeronDispatch) { Persistent<EphemeronHolderTraceEphemeron> holder = MakeGarbageCollected<EphemeronHolderTraceEphemeron>(GetAllocationHandle(), key, value); - HeapObjectHeader::FromPayload(key).TryMarkAtomic(); + HeapObjectHeader::FromObject(key).TryMarkAtomic(); InitializeMarker(*Heap::From(GetHeap()), GetPlatformHandle().get()); FinishMarking(); - EXPECT_TRUE(HeapObjectHeader::FromPayload(value).IsMarked()); + EXPECT_TRUE(HeapObjectHeader::FromObject(value).IsMarked()); } TEST_F(EphemeronPairTest, EmptyValue) { @@ -143,7 +143,7 @@ TEST_F(EphemeronPairTest, EmptyValue) { Persistent<EphemeronHolderTraceEphemeron> holder = MakeGarbageCollected<EphemeronHolderTraceEphemeron>(GetAllocationHandle(), key, nullptr); - HeapObjectHeader::FromPayload(key).TryMarkAtomic(); + HeapObjectHeader::FromObject(key).TryMarkAtomic(); InitializeMarker(*Heap::From(GetHeap()), GetPlatformHandle().get()); FinishMarking(); } @@ -156,7 +156,7 @@ TEST_F(EphemeronPairTest, EmptyKey) { InitializeMarker(*Heap::From(GetHeap()), GetPlatformHandle().get()); FinishMarking(); // Key is not alive and value should thus not be held alive. - EXPECT_FALSE(HeapObjectHeader::FromPayload(value).IsMarked()); + EXPECT_FALSE(HeapObjectHeader::FromObject(value).IsMarked()); } using EphemeronPairGCTest = testing::TestWithHeap; @@ -220,10 +220,10 @@ TEST_F(EphemeronPairTest, EphemeronPairWithMixinKey) { EXPECT_NE(static_cast<void*>(value), holder->ephemeron_pair().value.Get()); InitializeMarker(*Heap::From(GetHeap()), GetPlatformHandle().get()); FinishSteps(); - EXPECT_FALSE(HeapObjectHeader::FromPayload(value).IsMarked()); - EXPECT_TRUE(HeapObjectHeader::FromPayload(key).TryMarkAtomic()); + EXPECT_FALSE(HeapObjectHeader::FromObject(value).IsMarked()); + EXPECT_TRUE(HeapObjectHeader::FromObject(key).TryMarkAtomic()); FinishMarking(); - EXPECT_TRUE(HeapObjectHeader::FromPayload(value).IsMarked()); + EXPECT_TRUE(HeapObjectHeader::FromObject(value).IsMarked()); } TEST_F(EphemeronPairTest, EphemeronPairWithEmptyMixinValue) { @@ -233,7 +233,7 @@ TEST_F(EphemeronPairTest, EphemeronPairWithEmptyMixinValue) { MakeGarbageCollected<EphemeronHolderWithMixins>(GetAllocationHandle(), key, nullptr); EXPECT_NE(static_cast<void*>(key), holder->ephemeron_pair().key.Get()); - EXPECT_TRUE(HeapObjectHeader::FromPayload(key).TryMarkAtomic()); + EXPECT_TRUE(HeapObjectHeader::FromObject(key).TryMarkAtomic()); InitializeMarker(*Heap::From(GetHeap()), GetPlatformHandle().get()); FinishSteps(); FinishMarking(); diff --git a/deps/v8/test/unittests/heap/cppgc/explicit-management-unittest.cc b/deps/v8/test/unittests/heap/cppgc/explicit-management-unittest.cc index 6ca8569b3f..ffc23214ff 100644 --- a/deps/v8/test/unittests/heap/cppgc/explicit-management-unittest.cc +++ b/deps/v8/test/unittests/heap/cppgc/explicit-management-unittest.cc @@ -51,14 +51,14 @@ TEST_F(ExplicitManagementTest, FreeRegularObjectToLAB) { MakeGarbageCollected<DynamicallySized>(GetHeap()->GetAllocationHandle()); const auto* space = NormalPageSpace::From(BasePage::FromPayload(o)->space()); const auto& lab = space->linear_allocation_buffer(); - auto& header = HeapObjectHeader::FromPayload(o); - const size_t size = header.GetSize(); + auto& header = HeapObjectHeader::FromObject(o); + const size_t size = header.AllocatedSize(); Address needle = reinterpret_cast<Address>(&header); // Test checks freeing to LAB. - ASSERT_EQ(lab.start(), header.PayloadEnd()); + ASSERT_EQ(lab.start(), header.ObjectEnd()); const size_t lab_size_before_free = lab.size(); const size_t allocated_size_before = AllocatedObjectSize(); - subtle::FreeUnreferencedObject(o); + subtle::FreeUnreferencedObject(GetHeapHandle(), *o); EXPECT_EQ(lab.start(), reinterpret_cast<Address>(needle)); EXPECT_EQ(lab_size_before_free + size, lab.size()); // LAB is included in allocated object size, so no change is expected. @@ -71,14 +71,14 @@ TEST_F(ExplicitManagementTest, FreeRegularObjectToFreeList) { MakeGarbageCollected<DynamicallySized>(GetHeap()->GetAllocationHandle()); const auto* space = NormalPageSpace::From(BasePage::FromPayload(o)->space()); const auto& lab = space->linear_allocation_buffer(); - auto& header = HeapObjectHeader::FromPayload(o); - const size_t size = header.GetSize(); + auto& header = HeapObjectHeader::FromObject(o); + const size_t size = header.AllocatedSize(); Address needle = reinterpret_cast<Address>(&header); // Test checks freeing to free list. ResetLinearAllocationBuffers(); ASSERT_EQ(lab.start(), nullptr); const size_t allocated_size_before = AllocatedObjectSize(); - subtle::FreeUnreferencedObject(o); + subtle::FreeUnreferencedObject(GetHeapHandle(), *o); EXPECT_EQ(lab.start(), nullptr); EXPECT_EQ(allocated_size_before - size, AllocatedObjectSize()); EXPECT_TRUE(space->free_list().ContainsForTesting({needle, size})); @@ -95,7 +95,7 @@ TEST_F(ExplicitManagementTest, FreeLargeObject) { const size_t size = LargePage::From(page)->PayloadSize(); EXPECT_TRUE(heap->page_backend()->Lookup(needle)); const size_t allocated_size_before = AllocatedObjectSize(); - subtle::FreeUnreferencedObject(o); + subtle::FreeUnreferencedObject(GetHeapHandle(), *o); EXPECT_FALSE(heap->page_backend()->Lookup(needle)); EXPECT_EQ(allocated_size_before - size, AllocatedObjectSize()); } @@ -107,24 +107,19 @@ TEST_F(ExplicitManagementTest, FreeBailsOutDuringGC) { auto* heap = BasePage::FromPayload(o)->heap(); heap->SetInAtomicPauseForTesting(true); const size_t allocated_size_before = AllocatedObjectSize(); - subtle::FreeUnreferencedObject(o); + subtle::FreeUnreferencedObject(GetHeapHandle(), *o); EXPECT_EQ(allocated_size_before, AllocatedObjectSize()); heap->SetInAtomicPauseForTesting(false); ResetLinearAllocationBuffers(); - subtle::FreeUnreferencedObject(o); + subtle::FreeUnreferencedObject(GetHeapHandle(), *o); EXPECT_EQ(snapshot_before, AllocatedObjectSize()); } -TEST_F(ExplicitManagementTest, FreeNull) { - DynamicallySized* o = nullptr; - // Noop. - subtle::FreeUnreferencedObject(o); -} - TEST_F(ExplicitManagementTest, GrowAtLAB) { auto* o = MakeGarbageCollected<DynamicallySized>(GetHeap()->GetAllocationHandle()); - auto& header = HeapObjectHeader::FromPayload(o); + auto& header = HeapObjectHeader::FromObject(o); + ASSERT_TRUE(!header.IsLargeObject()); constexpr size_t size_of_o = sizeof(DynamicallySized); constexpr size_t kFirstDelta = 8; EXPECT_TRUE(subtle::Resize(*o, AdditionalBytes(kFirstDelta))); @@ -147,7 +142,8 @@ TEST_F(ExplicitManagementTest, GrowAtLAB) { TEST_F(ExplicitManagementTest, GrowShrinkAtLAB) { auto* o = MakeGarbageCollected<DynamicallySized>(GetHeap()->GetAllocationHandle()); - auto& header = HeapObjectHeader::FromPayload(o); + auto& header = HeapObjectHeader::FromObject(o); + ASSERT_TRUE(!header.IsLargeObject()); constexpr size_t size_of_o = sizeof(DynamicallySized); constexpr size_t kDelta = 27; EXPECT_TRUE(subtle::Resize(*o, AdditionalBytes(kDelta))); @@ -164,12 +160,13 @@ TEST_F(ExplicitManagementTest, ShrinkFreeList) { const auto* space = NormalPageSpace::From(BasePage::FromPayload(o)->space()); // Force returning to free list by removing the LAB. ResetLinearAllocationBuffers(); - auto& header = HeapObjectHeader::FromPayload(o); + auto& header = HeapObjectHeader::FromObject(o); + ASSERT_TRUE(!header.IsLargeObject()); constexpr size_t size_of_o = sizeof(DynamicallySized); EXPECT_TRUE(subtle::Resize(*o, AdditionalBytes(0))); EXPECT_EQ(RoundUp<kAllocationGranularity>(size_of_o), header.ObjectSize()); EXPECT_TRUE(space->free_list().ContainsForTesting( - {header.PayloadEnd(), ObjectAllocator::kSmallestSpaceSize})); + {header.ObjectEnd(), ObjectAllocator::kSmallestSpaceSize})); } TEST_F(ExplicitManagementTest, ShrinkFreeListBailoutAvoidFragmentation) { @@ -179,16 +176,33 @@ TEST_F(ExplicitManagementTest, ShrinkFreeListBailoutAvoidFragmentation) { const auto* space = NormalPageSpace::From(BasePage::FromPayload(o)->space()); // Force returning to free list by removing the LAB. ResetLinearAllocationBuffers(); - auto& header = HeapObjectHeader::FromPayload(o); + auto& header = HeapObjectHeader::FromObject(o); + ASSERT_TRUE(!header.IsLargeObject()); constexpr size_t size_of_o = sizeof(DynamicallySized); EXPECT_TRUE(subtle::Resize(*o, AdditionalBytes(0))); EXPECT_EQ(RoundUp<kAllocationGranularity>( size_of_o + ObjectAllocator::kSmallestSpaceSize - 1), header.ObjectSize()); EXPECT_FALSE(space->free_list().ContainsForTesting( - {header.Payload() + RoundUp<kAllocationGranularity>(size_of_o), + {header.ObjectStart() + RoundUp<kAllocationGranularity>(size_of_o), ObjectAllocator::kSmallestSpaceSize - 1})); } +TEST_F(ExplicitManagementTest, ResizeBailsOutDuringGC) { + auto* o = MakeGarbageCollected<DynamicallySized>( + GetHeap()->GetAllocationHandle(), + AdditionalBytes(ObjectAllocator::kSmallestSpaceSize - 1)); + auto* heap = BasePage::FromPayload(o)->heap(); + heap->SetInAtomicPauseForTesting(true); + const size_t allocated_size_before = AllocatedObjectSize(); + // Grow: + EXPECT_FALSE( + subtle::Resize(*o, AdditionalBytes(ObjectAllocator::kSmallestSpaceSize))); + // Shrink: + EXPECT_FALSE(subtle::Resize(*o, AdditionalBytes(0))); + EXPECT_EQ(allocated_size_before, AllocatedObjectSize()); + heap->SetInAtomicPauseForTesting(false); +} + } // namespace internal } // namespace cppgc diff --git a/deps/v8/test/unittests/heap/cppgc/garbage-collected-unittest.cc b/deps/v8/test/unittests/heap/cppgc/garbage-collected-unittest.cc index 7155aa6914..815aa1e915 100644 --- a/deps/v8/test/unittests/heap/cppgc/garbage-collected-unittest.cc +++ b/deps/v8/test/unittests/heap/cppgc/garbage-collected-unittest.cc @@ -6,6 +6,7 @@ #include "include/cppgc/allocation.h" #include "include/cppgc/type-traits.h" +#include "src/base/platform/mutex.h" #include "src/heap/cppgc/heap-object-header.h" #include "src/heap/cppgc/heap.h" #include "test/unittests/heap/cppgc/tests.h" @@ -83,6 +84,17 @@ TEST(GarbageCollectedTest, GarbageCollectedWithMixinTrait) { STATIC_ASSERT(IsGarbageCollectedWithMixinTypeV<GCWithMergedMixins>); } +namespace { + +class ForwardDeclaredType; + +} // namespace + +TEST(GarbageCollectedTest, CompleteTypeTrait) { + STATIC_ASSERT(IsCompleteV<GCed>); + STATIC_ASSERT(!IsCompleteV<ForwardDeclaredType>); +} + TEST_F(GarbageCollectedTestWithHeap, GetObjectStartReturnsCurrentAddress) { GCed* gced = MakeGarbageCollected<GCed>(GetAllocationHandle()); GCedWithMixin* gced_with_mixin = @@ -123,7 +135,7 @@ struct PostConstructionCallbackTrait< internal::GCedWithPostConstructionCallback> { static void Call(internal::GCedWithPostConstructionCallback* object) { EXPECT_FALSE( - internal::HeapObjectHeader::FromPayload(object).IsInConstruction()); + internal::HeapObjectHeader::FromObject(object).IsInConstruction()); internal::GCedWithPostConstructionCallback::cb_callcount++; } }; @@ -136,7 +148,7 @@ struct PostConstructionCallbackTrait< static void Call( internal::GCedWithMixinWithPostConstructionCallback* object) { EXPECT_FALSE( - internal::HeapObjectHeader::FromPayload(object).IsInConstruction()); + internal::HeapObjectHeader::FromObject(object).IsInConstruction()); internal::GCedWithMixinWithPostConstructionCallback::cb_callcount++; } }; @@ -156,5 +168,85 @@ TEST_F(GarbageCollectedTestWithHeap, PostConstructionCallbackForMixin) { EXPECT_EQ(1u, MixinWithPostConstructionCallback::cb_callcount); } +namespace { + +int GetDummyValue() { + static v8::base::Mutex mutex; + static int ret = 43; + // Global lock access to avoid reordering. + v8::base::MutexGuard guard(&mutex); + return ret; +} + +class CheckObjectInConstructionBeforeInitializerList final + : public GarbageCollected<CheckObjectInConstructionBeforeInitializerList> { + public: + CheckObjectInConstructionBeforeInitializerList() + : in_construction_before_initializer_list_( + HeapObjectHeader::FromObject(this).IsInConstruction()), + unused_int_(GetDummyValue()) { + EXPECT_TRUE(in_construction_before_initializer_list_); + EXPECT_TRUE(HeapObjectHeader::FromObject(this).IsInConstruction()); + } + + void Trace(Visitor*) const {} + + private: + bool in_construction_before_initializer_list_; + int unused_int_; +}; + +class CheckMixinInConstructionBeforeInitializerList + : public GarbageCollectedMixin { + public: + explicit CheckMixinInConstructionBeforeInitializerList(void* payload_start) + : in_construction_before_initializer_list_( + HeapObjectHeader::FromObject(payload_start).IsInConstruction()), + unused_int_(GetDummyValue()) { + EXPECT_TRUE(in_construction_before_initializer_list_); + EXPECT_TRUE(HeapObjectHeader::FromObject(payload_start).IsInConstruction()); + } + + void Trace(Visitor*) const override {} + + private: + bool in_construction_before_initializer_list_; + int unused_int_; +}; + +class UnmanagedMixinForcingVTable { + protected: + virtual void ForceVTable() {} +}; + +class CheckGCedWithMixinInConstructionBeforeInitializerList + : public GarbageCollected< + CheckGCedWithMixinInConstructionBeforeInitializerList>, + public UnmanagedMixinForcingVTable, + public CheckMixinInConstructionBeforeInitializerList { + public: + CheckGCedWithMixinInConstructionBeforeInitializerList() + : CheckMixinInConstructionBeforeInitializerList(this) { + // Ensure that compiler indeed generated an inner object. + CHECK_NE( + this, + static_cast<void*>( + static_cast<CheckMixinInConstructionBeforeInitializerList*>(this))); + } +}; + +} // namespace + +TEST_F(GarbageCollectedTestWithHeap, GarbageCollectedInConstructionDuringCtor) { + MakeGarbageCollected<CheckObjectInConstructionBeforeInitializerList>( + GetAllocationHandle()); +} + +TEST_F(GarbageCollectedTestWithHeap, + GarbageCollectedMixinInConstructionDuringCtor) { + MakeGarbageCollected<CheckGCedWithMixinInConstructionBeforeInitializerList>( + GetAllocationHandle()); +} + } // namespace internal } // namespace cppgc diff --git a/deps/v8/test/unittests/heap/cppgc/gc-info-unittest.cc b/deps/v8/test/unittests/heap/cppgc/gc-info-unittest.cc index da02212176..c5effba8a7 100644 --- a/deps/v8/test/unittests/heap/cppgc/gc-info-unittest.cc +++ b/deps/v8/test/unittests/heap/cppgc/gc-info-unittest.cc @@ -22,18 +22,14 @@ constexpr GCInfo GetEmptyGCInfo() { return {nullptr, nullptr, nullptr, false}; } class GCInfoTableTest : public ::testing::Test { public: + GCInfoTableTest() : table_(std::make_unique<GCInfoTable>(&page_allocator_)) {} + GCInfoIndex RegisterNewGCInfoForTesting(const GCInfo& info) { // Unused registered index will result in registering a new index. std::atomic<GCInfoIndex> registered_index{0}; return table().RegisterNewGCInfo(registered_index, info); } - void SetUp() override { - table_ = std::make_unique<GCInfoTable>(&page_allocator_); - } - - void TearDown() override { table_.reset(); } - GCInfoTable& table() { return *table_; } const GCInfoTable& table() const { return *table_; } diff --git a/deps/v8/test/unittests/heap/cppgc/gc-invoker-unittest.cc b/deps/v8/test/unittests/heap/cppgc/gc-invoker-unittest.cc index c43531494f..a48f27f56c 100644 --- a/deps/v8/test/unittests/heap/cppgc/gc-invoker-unittest.cc +++ b/deps/v8/test/unittests/heap/cppgc/gc-invoker-unittest.cc @@ -36,11 +36,9 @@ class MockTaskRunner : public cppgc::TaskRunner { MOCK_METHOD(void, PostIdleTask, (std::unique_ptr<cppgc::IdleTask>), (override)); - virtual bool IdleTasksEnabled() override { return true; } // NOLINT - bool NonNestableTasksEnabled() const override { return true; } // NOLINT - virtual bool NonNestableDelayedTasksEnabled() const override { // NOLINT - return true; - } + bool IdleTasksEnabled() override { return true; } + bool NonNestableTasksEnabled() const override { return true; } + bool NonNestableDelayedTasksEnabled() const override { return true; } }; class MockPlatform : public cppgc::Platform { diff --git a/deps/v8/test/unittests/heap/cppgc/heap-growing-unittest.cc b/deps/v8/test/unittests/heap/cppgc/heap-growing-unittest.cc index 17ab9680c9..9f63e14c87 100644 --- a/deps/v8/test/unittests/heap/cppgc/heap-growing-unittest.cc +++ b/deps/v8/test/unittests/heap/cppgc/heap-growing-unittest.cc @@ -69,7 +69,10 @@ TEST(HeapGrowingTest, ConservativeGCInvoked) { HeapGrowing growing(&gc, &stats_collector, constraints, cppgc::Heap::MarkingType::kIncrementalAndConcurrent, cppgc::Heap::SweepingType::kIncrementalAndConcurrent); - EXPECT_CALL(gc, CollectGarbage(::testing::_)); + EXPECT_CALL( + gc, CollectGarbage(::testing::Field( + &GarbageCollector::Config::stack_state, + GarbageCollector::Config::StackState::kMayContainHeapPointers))); FakeAllocate(&stats_collector, 100 * kMB); } @@ -85,7 +88,10 @@ TEST(HeapGrowingTest, InitialHeapSize) { cppgc::Heap::MarkingType::kIncrementalAndConcurrent, cppgc::Heap::SweepingType::kIncrementalAndConcurrent); FakeAllocate(&stats_collector, kObjectSize - 1); - EXPECT_CALL(gc, CollectGarbage(::testing::_)); + EXPECT_CALL( + gc, CollectGarbage(::testing::Field( + &GarbageCollector::Config::stack_state, + GarbageCollector::Config::StackState::kMayContainHeapPointers))); FakeAllocate(&stats_collector, kObjectSize); } @@ -135,7 +141,11 @@ TEST(HeapGrowingTest, IncrementalGCStarted) { HeapGrowing growing(&gc, &stats_collector, constraints, cppgc::Heap::MarkingType::kIncrementalAndConcurrent, cppgc::Heap::SweepingType::kIncrementalAndConcurrent); - EXPECT_CALL(gc, CollectGarbage(::testing::_)).Times(0); + EXPECT_CALL( + gc, CollectGarbage(::testing::Field( + &GarbageCollector::Config::stack_state, + GarbageCollector::Config::StackState::kMayContainHeapPointers))) + .Times(0); EXPECT_CALL(gc, StartIncrementalGarbageCollection(::testing::_)); // Allocate 1 byte less the limit for atomic gc to trigger incremental gc. FakeAllocate(&stats_collector, growing.limit_for_atomic_gc() - 1); @@ -149,13 +159,20 @@ TEST(HeapGrowingTest, IncrementalGCFinalized) { HeapGrowing growing(&gc, &stats_collector, constraints, cppgc::Heap::MarkingType::kIncrementalAndConcurrent, cppgc::Heap::SweepingType::kIncrementalAndConcurrent); - EXPECT_CALL(gc, CollectGarbage(::testing::_)).Times(0); + EXPECT_CALL( + gc, CollectGarbage(::testing::Field( + &GarbageCollector::Config::stack_state, + GarbageCollector::Config::StackState::kMayContainHeapPointers))) + .Times(0); EXPECT_CALL(gc, StartIncrementalGarbageCollection(::testing::_)); // Allocate 1 byte less the limit for atomic gc to trigger incremental gc. size_t bytes_for_incremental_gc = growing.limit_for_atomic_gc() - 1; FakeAllocate(&stats_collector, bytes_for_incremental_gc); ::testing::Mock::VerifyAndClearExpectations(&gc); - EXPECT_CALL(gc, CollectGarbage(::testing::_)); + EXPECT_CALL( + gc, CollectGarbage(::testing::Field( + &GarbageCollector::Config::stack_state, + GarbageCollector::Config::StackState::kMayContainHeapPointers))); EXPECT_CALL(gc, StartIncrementalGarbageCollection(::testing::_)).Times(0); // Allocate the rest needed to trigger atomic gc (). FakeAllocate(&stats_collector, StatsCollector::kAllocationThresholdBytes); diff --git a/deps/v8/test/unittests/heap/cppgc/heap-object-header-unittest.cc b/deps/v8/test/unittests/heap/cppgc/heap-object-header-unittest.cc index 11f4498aa0..8c27bacfed 100644 --- a/deps/v8/test/unittests/heap/cppgc/heap-object-header-unittest.cc +++ b/deps/v8/test/unittests/heap/cppgc/heap-object-header-unittest.cc @@ -21,7 +21,7 @@ TEST(HeapObjectHeaderTest, Constructor) { constexpr GCInfoIndex kGCInfoIndex = 17; constexpr size_t kSize = kAllocationGranularity; HeapObjectHeader header(kSize, kGCInfoIndex); - EXPECT_EQ(kSize, header.GetSize()); + EXPECT_EQ(kSize, header.AllocatedSize()); EXPECT_EQ(kGCInfoIndex, header.GetGCInfoIndex()); EXPECT_TRUE(header.IsInConstruction()); EXPECT_FALSE(header.IsMarked()); @@ -32,7 +32,7 @@ TEST(HeapObjectHeaderTest, Payload) { constexpr size_t kSize = kAllocationGranularity; HeapObjectHeader header(kSize, kGCInfoIndex); EXPECT_EQ(reinterpret_cast<ConstAddress>(&header) + sizeof(HeapObjectHeader), - header.Payload()); + header.ObjectStart()); } TEST(HeapObjectHeaderTest, PayloadEnd) { @@ -40,7 +40,7 @@ TEST(HeapObjectHeaderTest, PayloadEnd) { constexpr size_t kSize = kAllocationGranularity; HeapObjectHeader header(kSize, kGCInfoIndex); EXPECT_EQ(reinterpret_cast<ConstAddress>(&header) + kSize, - header.PayloadEnd()); + header.ObjectEnd()); } TEST(HeapObjectHeaderTest, GetGCInfoIndex) { @@ -51,12 +51,12 @@ TEST(HeapObjectHeaderTest, GetGCInfoIndex) { EXPECT_EQ(kGCInfoIndex, header.GetGCInfoIndex<AccessMode::kAtomic>()); } -TEST(HeapObjectHeaderTest, GetSize) { +TEST(HeapObjectHeaderTest, AllocatedSize) { constexpr GCInfoIndex kGCInfoIndex = 17; constexpr size_t kSize = kAllocationGranularity * 23; HeapObjectHeader header(kSize, kGCInfoIndex); - EXPECT_EQ(kSize, header.GetSize()); - EXPECT_EQ(kSize, header.GetSize<AccessMode::kAtomic>()); + EXPECT_EQ(kSize, header.AllocatedSize()); + EXPECT_EQ(kSize, header.AllocatedSize<AccessMode::kAtomic>()); } TEST(HeapObjectHeaderTest, IsLargeObject) { @@ -79,7 +79,7 @@ TEST(HeapObjectHeaderTest, MarkObjectAsFullyConstructed) { EXPECT_FALSE(header.IsInConstruction()); // Size shares the same bitfield and should be unaffected by // MarkObjectAsFullyConstructed. - EXPECT_EQ(kSize, header.GetSize()); + EXPECT_EQ(kSize, header.AllocatedSize()); } TEST(HeapObjectHeaderTest, TryMark) { @@ -156,10 +156,10 @@ TEST(HeapObjectHeaderTest, ConstructionBitProtectsNonAtomicWrites) { ~kAllocationMask; typename std::aligned_storage<kSize, kAllocationGranularity>::type data; HeapObjectHeader* header = new (&data) HeapObjectHeader(kSize, 1); - ConcurrentGCThread gc_thread(header, - reinterpret_cast<Payload*>(header->Payload())); + ConcurrentGCThread gc_thread( + header, reinterpret_cast<Payload*>(header->ObjectStart())); CHECK(gc_thread.Start()); - new (header->Payload()) Payload(); + new (header->ObjectStart()) Payload(); header->MarkAsFullyConstructed(); gc_thread.Join(); } diff --git a/deps/v8/test/unittests/heap/cppgc/heap-page-unittest.cc b/deps/v8/test/unittests/heap/cppgc/heap-page-unittest.cc index acfcd2d401..cff54298e4 100644 --- a/deps/v8/test/unittests/heap/cppgc/heap-page-unittest.cc +++ b/deps/v8/test/unittests/heap/cppgc/heap-page-unittest.cc @@ -161,8 +161,8 @@ TEST_F(PageTest, HeapObjectHeaderOnBasePageIndexing) { size_t num = 0; for (const HeapObjectHeader& header : *page) { EXPECT_EQ(reinterpret_cast<Address>(persistents[num].Get()), - header.Payload()); - size += header.GetSize(); + header.ObjectStart()); + size += header.AllocatedSize(); ++num; } EXPECT_EQ(num, persistents.size()); @@ -180,7 +180,7 @@ TEST_F(PageTest, HeapObjectHeaderOnLargePageIndexing) { EXPECT_EQ(expected_payload_size, page->PayloadSize()); const HeapObjectHeader* header = page->ObjectHeader(); - EXPECT_EQ(reinterpret_cast<Address>(gced), header->Payload()); + EXPECT_EQ(reinterpret_cast<Address>(gced), header->ObjectStart()); } TEST_F(PageTest, NormalPageCreationDestruction) { @@ -253,7 +253,7 @@ TEST_F(PageTest, UnsweptPageDestruction) { TEST_F(PageTest, ObjectHeaderFromInnerAddress) { { auto* object = MakeGarbageCollected<GCed<64>>(GetAllocationHandle()); - const HeapObjectHeader& expected = HeapObjectHeader::FromPayload(object); + const HeapObjectHeader& expected = HeapObjectHeader::FromObject(object); for (auto* inner_ptr = reinterpret_cast<ConstAddress>(object); inner_ptr < reinterpret_cast<ConstAddress>(object + 1); ++inner_ptr) { @@ -266,7 +266,7 @@ TEST_F(PageTest, ObjectHeaderFromInnerAddress) { { auto* object = MakeGarbageCollected<GCed<2 * kLargeObjectSizeThreshold>>( GetAllocationHandle()); - const HeapObjectHeader& expected = HeapObjectHeader::FromPayload(object); + const HeapObjectHeader& expected = HeapObjectHeader::FromObject(object); const HeapObjectHeader& hoh = BasePage::FromPayload(object)->ObjectHeaderFromInnerAddress( diff --git a/deps/v8/test/unittests/heap/cppgc/heap-registry-unittest.cc b/deps/v8/test/unittests/heap/cppgc/heap-registry-unittest.cc new file mode 100644 index 0000000000..3726eab946 --- /dev/null +++ b/deps/v8/test/unittests/heap/cppgc/heap-registry-unittest.cc @@ -0,0 +1,88 @@ +// Copyright 2020 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include <algorithm> + +#include "include/cppgc/allocation.h" +#include "include/cppgc/heap.h" +#include "src/heap/cppgc/heap-base.h" +#include "src/heap/cppgc/process-heap.h" +#include "test/unittests/heap/cppgc/tests.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace cppgc { +namespace internal { + +class HeapRegistryTest : public testing::TestWithPlatform {}; + +TEST_F(HeapRegistryTest, Empty) { + EXPECT_EQ(0u, HeapRegistry::GetRegisteredHeapsForTesting().size()); +} + +namespace { + +bool Contains(const HeapRegistry::Storage& storage, const cppgc::Heap* needle) { + return storage.end() != + std::find(storage.begin(), storage.end(), + &cppgc::internal::Heap::From(needle)->AsBase()); +} + +} // namespace + +TEST_F(HeapRegistryTest, RegisterUnregisterHeaps) { + const auto& storage = HeapRegistry::GetRegisteredHeapsForTesting(); + EXPECT_EQ(0u, storage.size()); + { + const auto heap1 = Heap::Create(platform_); + EXPECT_TRUE(Contains(storage, heap1.get())); + EXPECT_EQ(1u, storage.size()); + { + const auto heap2 = Heap::Create(platform_); + EXPECT_TRUE(Contains(storage, heap1.get())); + EXPECT_TRUE(Contains(storage, heap2.get())); + EXPECT_EQ(2u, storage.size()); + } + EXPECT_TRUE(Contains(storage, heap1.get())); + EXPECT_EQ(1u, storage.size()); + } + EXPECT_EQ(0u, storage.size()); +} + +TEST_F(HeapRegistryTest, DoesNotFindNullptr) { + const auto heap = Heap::Create(platform_); + EXPECT_EQ(nullptr, HeapRegistry::TryFromManagedPointer(nullptr)); +} + +TEST_F(HeapRegistryTest, DoesNotFindStackAddress) { + const auto heap = Heap::Create(platform_); + EXPECT_EQ(nullptr, HeapRegistry::TryFromManagedPointer(&heap)); +} + +TEST_F(HeapRegistryTest, DoesNotFindOffHeap) { + const auto heap = Heap::Create(platform_); + auto dummy = std::make_unique<char>(); + EXPECT_EQ(nullptr, HeapRegistry::TryFromManagedPointer(dummy.get())); +} + +namespace { + +class GCed final : public GarbageCollected<GCed> { + public: + void Trace(Visitor*) const {} +}; + +} // namespace + +TEST_F(HeapRegistryTest, FindsRightHeapForOnHeapAddress) { + const auto heap1 = Heap::Create(platform_); + const auto heap2 = Heap::Create(platform_); + auto* o = MakeGarbageCollected<GCed>(heap1->GetAllocationHandle()); + EXPECT_EQ(&cppgc::internal::Heap::From(heap1.get())->AsBase(), + HeapRegistry::TryFromManagedPointer(o)); + EXPECT_NE(&cppgc::internal::Heap::From(heap2.get())->AsBase(), + HeapRegistry::TryFromManagedPointer(o)); +} + +} // namespace internal +} // namespace cppgc diff --git a/deps/v8/test/unittests/heap/cppgc/heap-unittest.cc b/deps/v8/test/unittests/heap/cppgc/heap-unittest.cc index f664afdd17..e3a1d671df 100644 --- a/deps/v8/test/unittests/heap/cppgc/heap-unittest.cc +++ b/deps/v8/test/unittests/heap/cppgc/heap-unittest.cc @@ -48,7 +48,7 @@ class Foo : public GarbageCollected<Foo> { size_t Foo::destructor_callcount; template <size_t Size> -class GCed : public GarbageCollected<Foo> { +class GCed : public GarbageCollected<GCed<Size>> { public: void Trace(cppgc::Visitor*) const {} char buf[Size]; @@ -89,37 +89,81 @@ TEST_F(GCHeapTest, ConservativeGCRetainsObjectOnStack) { EXPECT_EQ(1u, Foo::destructor_callcount); } +namespace { + +class GCedWithFinalizer final : public GarbageCollected<GCedWithFinalizer> { + public: + static size_t destructor_counter; + + GCedWithFinalizer() { destructor_counter = 0; } + ~GCedWithFinalizer() { destructor_counter++; } + void Trace(Visitor* visitor) const {} +}; +// static +size_t GCedWithFinalizer::destructor_counter = 0; + +class LargeObjectGCDuringCtor final + : public GarbageCollected<LargeObjectGCDuringCtor> { + public: + static constexpr size_t kDataSize = kLargeObjectSizeThreshold + 1; + + explicit LargeObjectGCDuringCtor(cppgc::Heap* heap) + : child_(MakeGarbageCollected<GCedWithFinalizer>( + heap->GetAllocationHandle())) { + internal::Heap::From(heap)->CollectGarbage( + Heap::Config::ConservativeAtomicConfig()); + } + + void Trace(Visitor* visitor) const { visitor->Trace(child_); } + + char data[kDataSize]; + Member<GCedWithFinalizer> child_; +}; + +} // namespace + +TEST_F(GCHeapTest, ConservativeGCFromLargeObjectCtorFindsObject) { + GCedWithFinalizer::destructor_counter = 0; + MakeGarbageCollected<LargeObjectGCDuringCtor>(GetAllocationHandle(), + GetHeap()); + EXPECT_EQ(0u, GCedWithFinalizer::destructor_counter); +} + TEST_F(GCHeapTest, ObjectPayloadSize) { static constexpr size_t kNumberOfObjectsPerArena = 16; static constexpr size_t kObjectSizes[] = {1, 32, 64, 128, 2 * kLargeObjectSizeThreshold}; - Heap::From(GetHeap())->CollectGarbage( - GarbageCollector::Config::ConservativeAtomicConfig()); + EXPECT_EQ(0u, Heap::From(GetHeap())->ObjectPayloadSize()); - subtle::NoGarbageCollectionScope no_gc(*Heap::From(GetHeap())); + { + subtle::NoGarbageCollectionScope no_gc(*Heap::From(GetHeap())); + + for (size_t k = 0; k < kNumberOfObjectsPerArena; ++k) { + MakeGarbageCollected<GCed<kObjectSizes[0]>>(GetAllocationHandle()); + MakeGarbageCollected<GCed<kObjectSizes[1]>>(GetAllocationHandle()); + MakeGarbageCollected<GCed<kObjectSizes[2]>>(GetAllocationHandle()); + MakeGarbageCollected<GCed<kObjectSizes[3]>>(GetAllocationHandle()); + MakeGarbageCollected<GCed<kObjectSizes[4]>>(GetAllocationHandle()); + } - for (size_t k = 0; k < kNumberOfObjectsPerArena; ++k) { - MakeGarbageCollected<GCed<kObjectSizes[0]>>(GetAllocationHandle()); - MakeGarbageCollected<GCed<kObjectSizes[1]>>(GetAllocationHandle()); - MakeGarbageCollected<GCed<kObjectSizes[2]>>(GetAllocationHandle()); - MakeGarbageCollected<GCed<kObjectSizes[3]>>(GetAllocationHandle()); - MakeGarbageCollected<GCed<kObjectSizes[4]>>(GetAllocationHandle()); + size_t aligned_object_sizes[arraysize(kObjectSizes)]; + std::transform(std::cbegin(kObjectSizes), std::cend(kObjectSizes), + std::begin(aligned_object_sizes), [](size_t size) { + return RoundUp(size, kAllocationGranularity); + }); + const size_t expected_size = std::accumulate( + std::cbegin(aligned_object_sizes), std::cend(aligned_object_sizes), 0u, + [](size_t acc, size_t size) { + return acc + kNumberOfObjectsPerArena * size; + }); + // TODO(chromium:1056170): Change to EXPECT_EQ when proper sweeping is + // implemented. + EXPECT_LE(expected_size, Heap::From(GetHeap())->ObjectPayloadSize()); } - size_t aligned_object_sizes[arraysize(kObjectSizes)]; - std::transform(std::cbegin(kObjectSizes), std::cend(kObjectSizes), - std::begin(aligned_object_sizes), [](size_t size) { - return RoundUp(size, kAllocationGranularity); - }); - const size_t expected_size = std::accumulate( - std::cbegin(aligned_object_sizes), std::cend(aligned_object_sizes), 0u, - [](size_t acc, size_t size) { - return acc + kNumberOfObjectsPerArena * size; - }); - // TODO(chromium:1056170): Change to EXPECT_EQ when proper sweeping is - // implemented. - EXPECT_LE(expected_size, Heap::From(GetHeap())->ObjectPayloadSize()); + PreciseGC(); + EXPECT_EQ(0u, Heap::From(GetHeap())->ObjectPayloadSize()); } TEST_F(GCHeapTest, AllocateWithAdditionalBytes) { @@ -127,20 +171,20 @@ TEST_F(GCHeapTest, AllocateWithAdditionalBytes) { static constexpr size_t kAdditionalBytes = 10u * kAllocationGranularity; { Foo* object = MakeGarbageCollected<Foo>(GetAllocationHandle()); - EXPECT_LE(kBaseSize, HeapObjectHeader::FromPayload(object).GetSize()); + EXPECT_LE(kBaseSize, HeapObjectHeader::FromObject(object).AllocatedSize()); } { Foo* object = MakeGarbageCollected<Foo>(GetAllocationHandle(), AdditionalBytes(kAdditionalBytes)); EXPECT_LE(kBaseSize + kAdditionalBytes, - HeapObjectHeader::FromPayload(object).GetSize()); + HeapObjectHeader::FromObject(object).AllocatedSize()); } { Foo* object = MakeGarbageCollected<Foo>( GetAllocationHandle(), AdditionalBytes(kAdditionalBytes * kAdditionalBytes)); EXPECT_LE(kBaseSize + kAdditionalBytes * kAdditionalBytes, - HeapObjectHeader::FromPayload(object).GetSize()); + HeapObjectHeader::FromObject(object).AllocatedSize()); } } @@ -152,10 +196,11 @@ TEST_F(GCHeapTest, AllocatedSizeDependOnAdditionalBytes) { Foo* object_with_more_bytes = MakeGarbageCollected<Foo>( GetAllocationHandle(), AdditionalBytes(kAdditionalBytes * kAdditionalBytes)); - EXPECT_LT(HeapObjectHeader::FromPayload(object).GetSize(), - HeapObjectHeader::FromPayload(object_with_bytes).GetSize()); - EXPECT_LT(HeapObjectHeader::FromPayload(object_with_bytes).GetSize(), - HeapObjectHeader::FromPayload(object_with_more_bytes).GetSize()); + EXPECT_LT(HeapObjectHeader::FromObject(object).AllocatedSize(), + HeapObjectHeader::FromObject(object_with_bytes).AllocatedSize()); + EXPECT_LT( + HeapObjectHeader::FromObject(object_with_bytes).AllocatedSize(), + HeapObjectHeader::FromObject(object_with_more_bytes).AllocatedSize()); } TEST_F(GCHeapTest, Epoch) { @@ -322,5 +367,16 @@ TEST_F(GCHeapDeathTest, LargeChainOfNewStates) { EXPECT_DEATH_IF_SUPPORTED(Heap::From(GetHeap())->Terminate(), ""); } +TEST_F(GCHeapTest, IsHeapObjectAliveForConstPointer) { + // Regression test: http://crbug.com/661363. + GCed<64>* object = MakeGarbageCollected<GCed<64>>(GetAllocationHandle()); + HeapObjectHeader& header = HeapObjectHeader::FromObject(object); + LivenessBroker broker = internal::LivenessBrokerFactory::Create(); + EXPECT_TRUE(header.TryMarkAtomic()); + EXPECT_TRUE(broker.IsHeapObjectAlive(object)); + const GCed<64>* const_object = const_cast<const GCed<64>*>(object); + EXPECT_TRUE(broker.IsHeapObjectAlive(const_object)); +} + } // namespace internal } // namespace cppgc diff --git a/deps/v8/test/unittests/heap/cppgc/logging-unittest.cc b/deps/v8/test/unittests/heap/cppgc/logging-unittest.cc index d9ff910686..8f4bb9fb75 100644 --- a/deps/v8/test/unittests/heap/cppgc/logging-unittest.cc +++ b/deps/v8/test/unittests/heap/cppgc/logging-unittest.cc @@ -63,13 +63,11 @@ TEST(LoggingTest, Message) { TEST(LoggingTest, SourceLocation) { using ::testing::AllOf; using ::testing::HasSubstr; + // clang-format off constexpr auto loc = SourceLocation::Current(); - EXPECT_DEATH_IF_SUPPORTED(CPPGC_DCHECK(false), - AllOf(HasSubstr(loc.FileName()), - HasSubstr(std::to_string(loc.Line() + 3)))); - EXPECT_DEATH_IF_SUPPORTED(CPPGC_CHECK(false), - AllOf(HasSubstr(loc.FileName()), - HasSubstr(std::to_string(loc.Line() + 6)))); + EXPECT_DEATH_IF_SUPPORTED(CPPGC_DCHECK(false), AllOf(HasSubstr(loc.FileName()), HasSubstr(std::to_string(loc.Line() + 1)))); // NOLINT(whitespace/line_length) + EXPECT_DEATH_IF_SUPPORTED(CPPGC_CHECK(false), AllOf(HasSubstr(loc.FileName()), HasSubstr(std::to_string(loc.Line() + 2)))); // NOLINT(whitespace/line_length) + // clang-format on } #endif // CPPGC_SUPPORTS_SOURCE_LOCATION diff --git a/deps/v8/test/unittests/heap/cppgc/marker-unittest.cc b/deps/v8/test/unittests/heap/cppgc/marker-unittest.cc index 8f8191c6d0..f96e5f4a25 100644 --- a/deps/v8/test/unittests/heap/cppgc/marker-unittest.cc +++ b/deps/v8/test/unittests/heap/cppgc/marker-unittest.cc @@ -73,7 +73,7 @@ V8_NOINLINE T access(volatile const T& t) { TEST_F(MarkerTest, PersistentIsMarked) { Persistent<GCed> object = MakeGarbageCollected<GCed>(GetAllocationHandle()); - HeapObjectHeader& header = HeapObjectHeader::FromPayload(object); + HeapObjectHeader& header = HeapObjectHeader::FromObject(object); EXPECT_FALSE(header.IsMarked()); DoMarking(MarkingConfig::StackState::kNoHeapPointers); EXPECT_TRUE(header.IsMarked()); @@ -82,7 +82,7 @@ TEST_F(MarkerTest, PersistentIsMarked) { TEST_F(MarkerTest, ReachableMemberIsMarked) { Persistent<GCed> parent = MakeGarbageCollected<GCed>(GetAllocationHandle()); parent->SetChild(MakeGarbageCollected<GCed>(GetAllocationHandle())); - HeapObjectHeader& header = HeapObjectHeader::FromPayload(parent->child()); + HeapObjectHeader& header = HeapObjectHeader::FromObject(parent->child()); EXPECT_FALSE(header.IsMarked()); DoMarking(MarkingConfig::StackState::kNoHeapPointers); EXPECT_TRUE(header.IsMarked()); @@ -90,7 +90,7 @@ TEST_F(MarkerTest, ReachableMemberIsMarked) { TEST_F(MarkerTest, UnreachableMemberIsNotMarked) { Member<GCed> object = MakeGarbageCollected<GCed>(GetAllocationHandle()); - HeapObjectHeader& header = HeapObjectHeader::FromPayload(object); + HeapObjectHeader& header = HeapObjectHeader::FromObject(object); EXPECT_FALSE(header.IsMarked()); DoMarking(MarkingConfig::StackState::kNoHeapPointers); EXPECT_FALSE(header.IsMarked()); @@ -98,15 +98,15 @@ TEST_F(MarkerTest, UnreachableMemberIsNotMarked) { TEST_F(MarkerTest, ObjectReachableFromStackIsMarked) { GCed* object = MakeGarbageCollected<GCed>(GetAllocationHandle()); - EXPECT_FALSE(HeapObjectHeader::FromPayload(object).IsMarked()); + EXPECT_FALSE(HeapObjectHeader::FromObject(object).IsMarked()); DoMarking(MarkingConfig::StackState::kMayContainHeapPointers); - EXPECT_TRUE(HeapObjectHeader::FromPayload(object).IsMarked()); + EXPECT_TRUE(HeapObjectHeader::FromObject(object).IsMarked()); access(object); } TEST_F(MarkerTest, ObjectReachableOnlyFromStackIsNotMarkedIfStackIsEmpty) { GCed* object = MakeGarbageCollected<GCed>(GetAllocationHandle()); - HeapObjectHeader& header = HeapObjectHeader::FromPayload(object); + HeapObjectHeader& header = HeapObjectHeader::FromObject(object); EXPECT_FALSE(header.IsMarked()); DoMarking(MarkingConfig::StackState::kNoHeapPointers); EXPECT_FALSE(header.IsMarked()); @@ -195,10 +195,10 @@ TEST_F(MarkerTest, DeepHierarchyIsMarked) { parent = parent->child(); } DoMarking(MarkingConfig::StackState::kNoHeapPointers); - EXPECT_TRUE(HeapObjectHeader::FromPayload(root).IsMarked()); + EXPECT_TRUE(HeapObjectHeader::FromObject(root).IsMarked()); parent = root; for (int i = 0; i < kHierarchyDepth; ++i) { - EXPECT_TRUE(HeapObjectHeader::FromPayload(parent->child()).IsMarked()); + EXPECT_TRUE(HeapObjectHeader::FromObject(parent->child()).IsMarked()); EXPECT_TRUE(parent->weak_child()); parent = parent->child(); } @@ -209,9 +209,9 @@ TEST_F(MarkerTest, NestedObjectsOnStackAreMarked) { root->SetChild(MakeGarbageCollected<GCed>(GetAllocationHandle())); root->child()->SetChild(MakeGarbageCollected<GCed>(GetAllocationHandle())); DoMarking(MarkingConfig::StackState::kMayContainHeapPointers); - EXPECT_TRUE(HeapObjectHeader::FromPayload(root).IsMarked()); - EXPECT_TRUE(HeapObjectHeader::FromPayload(root->child()).IsMarked()); - EXPECT_TRUE(HeapObjectHeader::FromPayload(root->child()->child()).IsMarked()); + EXPECT_TRUE(HeapObjectHeader::FromObject(root).IsMarked()); + EXPECT_TRUE(HeapObjectHeader::FromObject(root->child()).IsMarked()); + EXPECT_TRUE(HeapObjectHeader::FromObject(root->child()->child()).IsMarked()); } namespace { @@ -248,9 +248,9 @@ TEST_F(MarkerTest, InConstructionObjectIsEventuallyMarkedEmptyStack) { Member<GCedWithCallback> member(obj); marker->Visitor().Trace(member); }); - EXPECT_FALSE(HeapObjectHeader::FromPayload(object).IsMarked()); + EXPECT_FALSE(HeapObjectHeader::FromObject(object).IsMarked()); marker()->FinishMarking(MarkingConfig::StackState::kMayContainHeapPointers); - EXPECT_TRUE(HeapObjectHeader::FromPayload(object).IsMarked()); + EXPECT_TRUE(HeapObjectHeader::FromObject(object).IsMarked()); } TEST_F(MarkerTest, InConstructionObjectIsEventuallyMarkedNonEmptyStack) { @@ -262,10 +262,10 @@ TEST_F(MarkerTest, InConstructionObjectIsEventuallyMarkedNonEmptyStack) { GetAllocationHandle(), [marker = marker()](GCedWithCallback* obj) { Member<GCedWithCallback> member(obj); marker->Visitor().Trace(member); - EXPECT_FALSE(HeapObjectHeader::FromPayload(obj).IsMarked()); + EXPECT_FALSE(HeapObjectHeader::FromObject(obj).IsMarked()); marker->FinishMarking( MarkingConfig::StackState::kMayContainHeapPointers); - EXPECT_TRUE(HeapObjectHeader::FromPayload(obj).IsMarked()); + EXPECT_TRUE(HeapObjectHeader::FromObject(obj).IsMarked()); }); } @@ -301,7 +301,7 @@ V8_NOINLINE void RegisterInConstructionObject( Member<GCedWithCallback> member(obj); // Adds GCedWithCallback to in-construction objects. visitor.Trace(member); - EXPECT_FALSE(HeapObjectHeader::FromPayload(obj).IsMarked()); + EXPECT_FALSE(HeapObjectHeader::FromObject(obj).IsMarked()); // The inner object GCed is only found if GCedWithCallback is processed. storage.set_object(obj->gced()); }, @@ -321,9 +321,9 @@ TEST_F(MarkerTest, GCObliviousObjectStorage storage; RegisterInConstructionObject(GetAllocationHandle(), marker()->Visitor(), storage); - EXPECT_FALSE(HeapObjectHeader::FromPayload(storage.object()).IsMarked()); + EXPECT_FALSE(HeapObjectHeader::FromObject(storage.object()).IsMarked()); marker()->FinishMarking(MarkingConfig::StackState::kMayContainHeapPointers); - EXPECT_TRUE(HeapObjectHeader::FromPayload(storage.object()).IsMarked()); + EXPECT_TRUE(HeapObjectHeader::FromObject(storage.object()).IsMarked()); } TEST_F(MarkerTest, SentinelNotClearedOnWeakPersistentHandling) { @@ -340,7 +340,7 @@ TEST_F(MarkerTest, SentinelNotClearedOnWeakPersistentHandling) { } // {root} object must be marked at this point because we do not allow // encountering kSentinelPointer in WeakMember on regular Trace() calls. - ASSERT_TRUE(HeapObjectHeader::FromPayload(root.Get()).IsMarked()); + ASSERT_TRUE(HeapObjectHeader::FromObject(root.Get()).IsMarked()); root->SetWeakChild(kSentinelPointer); marker()->FinishMarking(MarkingConfig::StackState::kNoHeapPointers); EXPECT_EQ(kSentinelPointer, root->weak_child()); @@ -356,10 +356,6 @@ class IncrementalMarkingTest : public testing::TestWithHeap { MarkingConfig::CollectionType::kMajor, MarkingConfig::StackState::kNoHeapPointers, MarkingConfig::MarkingType::kIncremental}; - static constexpr MarkingConfig IncrementalConservativeMarkingConfig = { - MarkingConfig::CollectionType::kMajor, - MarkingConfig::StackState::kMayContainHeapPointers, - MarkingConfig::MarkingType::kIncremental}; void FinishSteps(MarkingConfig::StackState stack_state) { while (!SingleStep(stack_state)) { @@ -391,22 +387,20 @@ class IncrementalMarkingTest : public testing::TestWithHeap { constexpr IncrementalMarkingTest::MarkingConfig IncrementalMarkingTest::IncrementalPreciseMarkingConfig; -constexpr IncrementalMarkingTest::MarkingConfig - IncrementalMarkingTest::IncrementalConservativeMarkingConfig; TEST_F(IncrementalMarkingTest, RootIsMarkedAfterMarkingStarted) { Persistent<GCed> root = MakeGarbageCollected<GCed>(GetAllocationHandle()); - EXPECT_FALSE(HeapObjectHeader::FromPayload(root).IsMarked()); + EXPECT_FALSE(HeapObjectHeader::FromObject(root).IsMarked()); InitializeMarker(*Heap::From(GetHeap()), GetPlatformHandle().get(), IncrementalPreciseMarkingConfig); - EXPECT_TRUE(HeapObjectHeader::FromPayload(root).IsMarked()); + EXPECT_TRUE(HeapObjectHeader::FromObject(root).IsMarked()); FinishMarking(); } TEST_F(IncrementalMarkingTest, MemberIsMarkedAfterMarkingSteps) { Persistent<GCed> root = MakeGarbageCollected<GCed>(GetAllocationHandle()); root->SetChild(MakeGarbageCollected<GCed>(GetAllocationHandle())); - HeapObjectHeader& header = HeapObjectHeader::FromPayload(root->child()); + HeapObjectHeader& header = HeapObjectHeader::FromObject(root->child()); EXPECT_FALSE(header.IsMarked()); InitializeMarker(*Heap::From(GetHeap()), GetPlatformHandle().get(), IncrementalPreciseMarkingConfig); @@ -422,7 +416,7 @@ TEST_F(IncrementalMarkingTest, IncrementalPreciseMarkingConfig); root->SetChild(MakeGarbageCollected<GCed>(GetAllocationHandle())); FinishSteps(MarkingConfig::StackState::kNoHeapPointers); - HeapObjectHeader& header = HeapObjectHeader::FromPayload(root->child()); + HeapObjectHeader& header = HeapObjectHeader::FromObject(root->child()); EXPECT_TRUE(header.IsMarked()); FinishMarking(); } @@ -444,7 +438,7 @@ TEST_F(IncrementalMarkingTest, IncrementalStepDuringAllocation) { const HeapObjectHeader* header; MakeGarbageCollected<GCedWithCallback>( GetAllocationHandle(), [this, &holder, &header](GCedWithCallback* obj) { - header = &HeapObjectHeader::FromPayload(obj); + header = &HeapObjectHeader::FromObject(obj); holder->member_ = obj; EXPECT_FALSE(header->IsMarked()); FinishSteps(MarkingConfig::StackState::kMayContainHeapPointers); diff --git a/deps/v8/test/unittests/heap/cppgc/marking-verifier-unittest.cc b/deps/v8/test/unittests/heap/cppgc/marking-verifier-unittest.cc index c4e34655fe..733a6383da 100644 --- a/deps/v8/test/unittests/heap/cppgc/marking-verifier-unittest.cc +++ b/deps/v8/test/unittests/heap/cppgc/marking-verifier-unittest.cc @@ -22,10 +22,12 @@ class MarkingVerifierTest : public testing::TestWithHeap { public: using StackState = Heap::Config::StackState; - void VerifyMarking(HeapBase& heap, StackState stack_state) { + V8_NOINLINE void VerifyMarking(HeapBase& heap, StackState stack_state, + size_t expected_marked_bytes) { Heap::From(GetHeap())->object_allocator().ResetLinearAllocationBuffers(); MarkingVerifier verifier(heap); - verifier.Run(stack_state); + verifier.Run(stack_state, v8::base::Stack::GetCurrentStackPosition(), + expected_marked_bytes); } }; @@ -54,28 +56,35 @@ V8_NOINLINE T access(volatile const T& t) { // Following tests should not crash. -TEST_F(MarkingVerifierTest, DoesntDieOnMarkedOnStackReference) { +TEST_F(MarkingVerifierTest, DoesNotDieOnMarkedOnStackReference) { GCed* object = MakeGarbageCollected<GCed>(GetAllocationHandle()); - HeapObjectHeader::FromPayload(object).TryMarkAtomic(); + auto& header = HeapObjectHeader::FromObject(object); + ASSERT_TRUE(header.TryMarkAtomic()); VerifyMarking(Heap::From(GetHeap())->AsBase(), - StackState::kMayContainHeapPointers); + StackState::kMayContainHeapPointers, header.AllocatedSize()); access(object); } -TEST_F(MarkingVerifierTest, DoesntDieOnMarkedMember) { +TEST_F(MarkingVerifierTest, DoesNotDieOnMarkedMember) { Persistent<GCed> parent = MakeGarbageCollected<GCed>(GetAllocationHandle()); - HeapObjectHeader::FromPayload(parent.Get()).TryMarkAtomic(); + auto& parent_header = HeapObjectHeader::FromObject(parent.Get()); + ASSERT_TRUE(parent_header.TryMarkAtomic()); parent->SetChild(MakeGarbageCollected<GCed>(GetAllocationHandle())); - HeapObjectHeader::FromPayload(parent->child()).TryMarkAtomic(); - VerifyMarking(Heap::From(GetHeap())->AsBase(), StackState::kNoHeapPointers); + auto& child_header = HeapObjectHeader::FromObject(parent->child()); + ASSERT_TRUE(child_header.TryMarkAtomic()); + VerifyMarking(Heap::From(GetHeap())->AsBase(), StackState::kNoHeapPointers, + parent_header.AllocatedSize() + child_header.AllocatedSize()); } -TEST_F(MarkingVerifierTest, DoesntDieOnMarkedWeakMember) { +TEST_F(MarkingVerifierTest, DoesNotDieOnMarkedWeakMember) { Persistent<GCed> parent = MakeGarbageCollected<GCed>(GetAllocationHandle()); - HeapObjectHeader::FromPayload(parent.Get()).TryMarkAtomic(); + auto& parent_header = HeapObjectHeader::FromObject(parent.Get()); + ASSERT_TRUE(parent_header.TryMarkAtomic()); parent->SetWeakChild(MakeGarbageCollected<GCed>(GetAllocationHandle())); - HeapObjectHeader::FromPayload(parent->weak_child()).TryMarkAtomic(); - VerifyMarking(Heap::From(GetHeap())->AsBase(), StackState::kNoHeapPointers); + auto& child_header = HeapObjectHeader::FromObject(parent->weak_child()); + ASSERT_TRUE(child_header.TryMarkAtomic()); + VerifyMarking(Heap::From(GetHeap())->AsBase(), StackState::kNoHeapPointers, + parent_header.AllocatedSize() + child_header.AllocatedSize()); } namespace { @@ -91,12 +100,14 @@ class GCedWithCallback : public GarbageCollected<GCedWithCallback> { } // namespace -TEST_F(MarkingVerifierTest, DoesntDieOnInConstructionOnObject) { +TEST_F(MarkingVerifierTest, DoesNotDieOnInConstructionOnObject) { MakeGarbageCollected<GCedWithCallback>( GetAllocationHandle(), [this](GCedWithCallback* obj) { - HeapObjectHeader::FromPayload(obj).TryMarkAtomic(); + auto& header = HeapObjectHeader::FromObject(obj); + CHECK(header.TryMarkAtomic()); VerifyMarking(Heap::From(GetHeap())->AsBase(), - StackState::kMayContainHeapPointers); + StackState::kMayContainHeapPointers, + header.AllocatedSize()); }); } @@ -123,7 +134,7 @@ struct Holder : public GarbageCollected<Holder<T>> { } // namespace TEST_F(MarkingVerifierTest, DoesntDieOnInConstructionObjectWithWriteBarrier) { - // Regression test: https://crbug.com/v8/10989. + // Regression test: https://crbug.com/v8/10989. // GCedWithCallbackAndChild is marked by write barrier and then discarded by // FlushNotFullyConstructedObjects because it is already marked. Persistent<Holder<GCedWithCallbackAndChild>> persistent = @@ -156,30 +167,51 @@ class MarkingVerifierDeathTest : public MarkingVerifierTest { TEST_F(MarkingVerifierDeathTest, DieOnUnmarkedOnStackReference) { GCed* object = MakeGarbageCollected<GCed>(GetAllocationHandle()); + auto& header = HeapObjectHeader::FromObject(object); + USE(header); EXPECT_DEATH_IF_SUPPORTED(VerifyMarking(Heap::From(GetHeap())->AsBase(), - StackState::kMayContainHeapPointers), + StackState::kMayContainHeapPointers, + header.AllocatedSize()), ""); access(object); } TEST_F(MarkingVerifierDeathTest, DieOnUnmarkedMember) { Persistent<GCed> parent = MakeGarbageCollected<GCed>(GetAllocationHandle()); - HeapObjectHeader::FromPayload(parent.Get()).TryMarkAtomic(); + auto& parent_header = HeapObjectHeader::FromObject(parent); + ASSERT_TRUE(parent_header.TryMarkAtomic()); parent->SetChild(MakeGarbageCollected<GCed>(GetAllocationHandle())); - EXPECT_DEATH_IF_SUPPORTED(VerifyMarking(Heap::From(GetHeap())->AsBase(), - StackState::kNoHeapPointers), - ""); + EXPECT_DEATH_IF_SUPPORTED( + VerifyMarking(Heap::From(GetHeap())->AsBase(), + StackState::kNoHeapPointers, parent_header.AllocatedSize()), + ""); } TEST_F(MarkingVerifierDeathTest, DieOnUnmarkedWeakMember) { Persistent<GCed> parent = MakeGarbageCollected<GCed>(GetAllocationHandle()); - HeapObjectHeader::FromPayload(parent.Get()).TryMarkAtomic(); + auto& parent_header = HeapObjectHeader::FromObject(parent); + ASSERT_TRUE(parent_header.TryMarkAtomic()); parent->SetWeakChild(MakeGarbageCollected<GCed>(GetAllocationHandle())); + EXPECT_DEATH_IF_SUPPORTED( + VerifyMarking(Heap::From(GetHeap())->AsBase(), + StackState::kNoHeapPointers, parent_header.AllocatedSize()), + ""); +} + +#ifdef CPPGC_VERIFY_LIVE_BYTES + +TEST_F(MarkingVerifierDeathTest, DieOnUnexpectedLiveByteCount) { + GCed* object = MakeGarbageCollected<GCed>(GetAllocationHandle()); + auto& header = HeapObjectHeader::FromObject(object); + ASSERT_TRUE(header.TryMarkAtomic()); EXPECT_DEATH_IF_SUPPORTED(VerifyMarking(Heap::From(GetHeap())->AsBase(), - StackState::kNoHeapPointers), + StackState::kMayContainHeapPointers, + header.AllocatedSize() - 1), ""); } +#endif // CPPGC_VERIFY_LIVE_BYTES + namespace { template <template <typename T> class Reference> @@ -223,7 +255,9 @@ void MarkingVerifierDeathTest::TestResurrectingPreFinalizer() { MakeGarbageCollected<GCed>(GetAllocationHandle())); EXPECT_DEATH_IF_SUPPORTED(PreciseGC(), ""); } + #if DEBUG + TEST_F(MarkingVerifierDeathTest, DiesOnResurrectedMember) { TestResurrectingPreFinalizer<Member>(); } @@ -231,6 +265,7 @@ TEST_F(MarkingVerifierDeathTest, DiesOnResurrectedMember) { TEST_F(MarkingVerifierDeathTest, DiesOnResurrectedWeakMember) { TestResurrectingPreFinalizer<WeakMember>(); } + #endif // DEBUG } // namespace internal diff --git a/deps/v8/test/unittests/heap/cppgc/marking-visitor-unittest.cc b/deps/v8/test/unittests/heap/cppgc/marking-visitor-unittest.cc index a411c7e63a..a2768c86e5 100644 --- a/deps/v8/test/unittests/heap/cppgc/marking-visitor-unittest.cc +++ b/deps/v8/test/unittests/heap/cppgc/marking-visitor-unittest.cc @@ -64,7 +64,7 @@ TEST_F(MarkingVisitorTest, MarkedBytesAreInitiallyZero) { TEST_F(MarkingVisitorTest, MarkMember) { Member<GCed> object(MakeGarbageCollected<GCed>(GetAllocationHandle())); - HeapObjectHeader& header = HeapObjectHeader::FromPayload(object); + HeapObjectHeader& header = HeapObjectHeader::FromObject(object); TestMarkingVisitor visitor(GetMarker()); @@ -79,7 +79,7 @@ TEST_F(MarkingVisitorTest, MarkMemberMixin) { GCedWithMixin* object( MakeGarbageCollected<GCedWithMixin>(GetAllocationHandle())); Member<Mixin> mixin(object); - HeapObjectHeader& header = HeapObjectHeader::FromPayload(object); + HeapObjectHeader& header = HeapObjectHeader::FromObject(object); TestMarkingVisitor visitor(GetMarker()); @@ -92,7 +92,7 @@ TEST_F(MarkingVisitorTest, MarkMemberMixin) { TEST_F(MarkingVisitorTest, MarkPersistent) { Persistent<GCed> object(MakeGarbageCollected<GCed>(GetAllocationHandle())); - HeapObjectHeader& header = HeapObjectHeader::FromPayload(object); + HeapObjectHeader& header = HeapObjectHeader::FromObject(object); TestMarkingVisitor visitor(GetMarker()); @@ -107,7 +107,7 @@ TEST_F(MarkingVisitorTest, MarkPersistentMixin) { GCedWithMixin* object( MakeGarbageCollected<GCedWithMixin>(GetAllocationHandle())); Persistent<Mixin> mixin(object); - HeapObjectHeader& header = HeapObjectHeader::FromPayload(object); + HeapObjectHeader& header = HeapObjectHeader::FromObject(object); TestMarkingVisitor visitor(GetMarker()); @@ -122,7 +122,7 @@ TEST_F(MarkingVisitorTest, MarkPersistentMixin) { TEST_F(MarkingVisitorTest, DontMarkWeakMember) { WeakMember<GCed> object(MakeGarbageCollected<GCed>(GetAllocationHandle())); - HeapObjectHeader& header = HeapObjectHeader::FromPayload(object); + HeapObjectHeader& header = HeapObjectHeader::FromObject(object); TestMarkingVisitor visitor(GetMarker()); @@ -137,7 +137,7 @@ TEST_F(MarkingVisitorTest, DontMarkWeakMemberMixin) { GCedWithMixin* object( MakeGarbageCollected<GCedWithMixin>(GetAllocationHandle())); WeakMember<Mixin> mixin(object); - HeapObjectHeader& header = HeapObjectHeader::FromPayload(object); + HeapObjectHeader& header = HeapObjectHeader::FromObject(object); TestMarkingVisitor visitor(GetMarker()); @@ -151,7 +151,7 @@ TEST_F(MarkingVisitorTest, DontMarkWeakMemberMixin) { TEST_F(MarkingVisitorTest, DontMarkWeakPersistent) { WeakPersistent<GCed> object( MakeGarbageCollected<GCed>(GetAllocationHandle())); - HeapObjectHeader& header = HeapObjectHeader::FromPayload(object); + HeapObjectHeader& header = HeapObjectHeader::FromObject(object); TestMarkingVisitor visitor(GetMarker()); @@ -166,7 +166,7 @@ TEST_F(MarkingVisitorTest, DontMarkWeakPersistentMixin) { GCedWithMixin* object( MakeGarbageCollected<GCedWithMixin>(GetAllocationHandle())); WeakPersistent<Mixin> mixin(object); - HeapObjectHeader& header = HeapObjectHeader::FromPayload(object); + HeapObjectHeader& header = HeapObjectHeader::FromObject(object); TestMarkingVisitor visitor(GetMarker()); @@ -219,7 +219,7 @@ TEST_F(MarkingVisitorTest, MarkMemberInConstruction) { Member<GCedWithInConstructionCallback> object(obj); visitor.Trace(object); }); - HeapObjectHeader& header = HeapObjectHeader::FromPayload(gced); + HeapObjectHeader& header = HeapObjectHeader::FromObject(gced); EXPECT_TRUE(visitor.marking_state().not_fully_constructed_worklist().Contains( &header)); EXPECT_FALSE(header.IsMarked()); @@ -234,7 +234,7 @@ TEST_F(MarkingVisitorTest, MarkMemberMixinInConstruction) { Member<MixinWithInConstructionCallback> mixin(obj); visitor.Trace(mixin); }); - HeapObjectHeader& header = HeapObjectHeader::FromPayload(gced); + HeapObjectHeader& header = HeapObjectHeader::FromObject(gced); EXPECT_TRUE(visitor.marking_state().not_fully_constructed_worklist().Contains( &header)); EXPECT_FALSE(header.IsMarked()); @@ -249,7 +249,7 @@ TEST_F(MarkingVisitorTest, DontMarkWeakMemberInConstruction) { WeakMember<GCedWithInConstructionCallback> object(obj); visitor.Trace(object); }); - HeapObjectHeader& header = HeapObjectHeader::FromPayload(gced); + HeapObjectHeader& header = HeapObjectHeader::FromObject(gced); EXPECT_FALSE( visitor.marking_state().not_fully_constructed_worklist().Contains( &header)); @@ -265,7 +265,7 @@ TEST_F(MarkingVisitorTest, DontMarkWeakMemberMixinInConstruction) { WeakMember<MixinWithInConstructionCallback> mixin(obj); visitor.Trace(mixin); }); - HeapObjectHeader& header = HeapObjectHeader::FromPayload(gced); + HeapObjectHeader& header = HeapObjectHeader::FromObject(gced); EXPECT_FALSE( visitor.marking_state().not_fully_constructed_worklist().Contains( &header)); @@ -281,7 +281,7 @@ TEST_F(MarkingVisitorTest, MarkPersistentInConstruction) { Persistent<GCedWithInConstructionCallback> object(obj); visitor.TraceRootForTesting(object, SourceLocation::Current()); }); - HeapObjectHeader& header = HeapObjectHeader::FromPayload(gced); + HeapObjectHeader& header = HeapObjectHeader::FromObject(gced); EXPECT_TRUE(visitor.marking_state().not_fully_constructed_worklist().Contains( &header)); EXPECT_FALSE(header.IsMarked()); @@ -296,7 +296,7 @@ TEST_F(MarkingVisitorTest, MarkPersistentMixinInConstruction) { Persistent<MixinWithInConstructionCallback> mixin(obj); visitor.TraceRootForTesting(mixin, SourceLocation::Current()); }); - HeapObjectHeader& header = HeapObjectHeader::FromPayload(gced); + HeapObjectHeader& header = HeapObjectHeader::FromObject(gced); EXPECT_TRUE(visitor.marking_state().not_fully_constructed_worklist().Contains( &header)); EXPECT_FALSE(header.IsMarked()); @@ -304,7 +304,7 @@ TEST_F(MarkingVisitorTest, MarkPersistentMixinInConstruction) { TEST_F(MarkingVisitorTest, StrongTracingMarksWeakMember) { WeakMember<GCed> object(MakeGarbageCollected<GCed>(GetAllocationHandle())); - HeapObjectHeader& header = HeapObjectHeader::FromPayload(object); + HeapObjectHeader& header = HeapObjectHeader::FromObject(object); TestMarkingVisitor visitor(GetMarker()); diff --git a/deps/v8/test/unittests/heap/cppgc/member-unittest.cc b/deps/v8/test/unittests/heap/cppgc/member-unittest.cc index 67c51f10bd..ff9ee73ceb 100644 --- a/deps/v8/test/unittests/heap/cppgc/member-unittest.cc +++ b/deps/v8/test/unittests/heap/cppgc/member-unittest.cc @@ -10,6 +10,7 @@ #include "include/cppgc/allocation.h" #include "include/cppgc/garbage-collected.h" #include "include/cppgc/persistent.h" +#include "include/cppgc/sentinel-pointer.h" #include "include/cppgc/type-traits.h" #include "test/unittests/heap/cppgc/tests.h" #include "testing/gtest/include/gtest/gtest.h" @@ -113,6 +114,40 @@ TEST_F(MemberTest, Empty) { } template <template <typename> class MemberType> +void AtomicCtorTest(cppgc::Heap* heap) { + { + GCed* gced = MakeGarbageCollected<GCed>(heap->GetAllocationHandle()); + MemberType<GCed> member(gced, + typename MemberType<GCed>::AtomicInitializerTag()); + EXPECT_EQ(gced, member.Get()); + } + { + GCed* gced = MakeGarbageCollected<GCed>(heap->GetAllocationHandle()); + MemberType<GCed> member(*gced, + typename MemberType<GCed>::AtomicInitializerTag()); + EXPECT_EQ(gced, member.Get()); + } + { + MemberType<GCed> member(nullptr, + typename MemberType<GCed>::AtomicInitializerTag()); + EXPECT_FALSE(member.Get()); + } + { + SentinelPointer s; + MemberType<GCed> member(s, + typename MemberType<GCed>::AtomicInitializerTag()); + EXPECT_EQ(s, member.Get()); + } +} + +TEST_F(MemberTest, AtomicCtor) { + cppgc::Heap* heap = GetHeap(); + AtomicCtorTest<Member>(heap); + AtomicCtorTest<WeakMember>(heap); + AtomicCtorTest<UntracedMember>(heap); +} + +template <template <typename> class MemberType> void ClearTest(cppgc::Heap* heap) { MemberType<GCed> member = MakeGarbageCollected<GCed>(heap->GetAllocationHandle()); @@ -371,5 +406,163 @@ TEST_F(MemberTest, CheckingPolicy) { EXPECT_EQ(CustomCheckingPolicy::Cached.size(), CustomCheckingPolicy::ChecksTriggered); } + +namespace { + +class MemberHeapTest : public testing::TestWithHeap {}; + +class GCedWithMembers final : public GarbageCollected<GCedWithMembers> { + public: + static size_t live_count_; + + GCedWithMembers() : GCedWithMembers(nullptr, nullptr) {} + explicit GCedWithMembers(GCedWithMembers* strong, GCedWithMembers* weak) + : strong_nested_(strong), weak_nested_(weak) { + ++live_count_; + } + + ~GCedWithMembers() { --live_count_; } + + void Trace(cppgc::Visitor* visitor) const { + visitor->Trace(strong_nested_); + visitor->Trace(weak_nested_); + } + + bool WasNestedCleared() const { return !weak_nested_; } + + private: + Member<GCedWithMembers> strong_nested_; + WeakMember<GCedWithMembers> weak_nested_; +}; +size_t GCedWithMembers::live_count_ = 0; + +} // namespace + +TEST_F(MemberHeapTest, MemberRetainsObject) { + EXPECT_EQ(0u, GCedWithMembers::live_count_); + { + GCedWithMembers* nested_object = + MakeGarbageCollected<GCedWithMembers>(GetAllocationHandle()); + Persistent<GCedWithMembers> gced_with_members = + MakeGarbageCollected<GCedWithMembers>(GetAllocationHandle(), + nested_object, nested_object); + EXPECT_EQ(2u, GCedWithMembers::live_count_); + PreciseGC(); + EXPECT_EQ(2u, GCedWithMembers::live_count_); + EXPECT_FALSE(gced_with_members->WasNestedCleared()); + } + PreciseGC(); + EXPECT_EQ(0u, GCedWithMembers::live_count_); + { + GCedWithMembers* nested_object = + MakeGarbageCollected<GCedWithMembers>(GetAllocationHandle()); + GCedWithMembers* gced_with_members = MakeGarbageCollected<GCedWithMembers>( + GetAllocationHandle(), nested_object, nested_object); + EXPECT_EQ(2u, GCedWithMembers::live_count_); + ConservativeGC(); + EXPECT_EQ(2u, GCedWithMembers::live_count_); + EXPECT_FALSE(gced_with_members->WasNestedCleared()); + } + PreciseGC(); + EXPECT_EQ(0u, GCedWithMembers::live_count_); +} + +TEST_F(MemberHeapTest, WeakMemberDoesNotRetainObject) { + EXPECT_EQ(0u, GCedWithMembers::live_count_); + auto* weak_nested = + MakeGarbageCollected<GCedWithMembers>(GetAllocationHandle()); + Persistent<GCedWithMembers> gced_with_members( + MakeGarbageCollected<GCedWithMembers>(GetAllocationHandle(), nullptr, + weak_nested)); + PreciseGC(); + EXPECT_EQ(1u, GCedWithMembers::live_count_); + EXPECT_TRUE(gced_with_members->WasNestedCleared()); +} + +namespace { +class GCedWithConstWeakMember + : public GarbageCollected<GCedWithConstWeakMember> { + public: + explicit GCedWithConstWeakMember(const GCedWithMembers* weak) + : weak_member_(weak) {} + + void Trace(Visitor* visitor) const { visitor->Trace(weak_member_); } + + const GCedWithMembers* weak_member() const { return weak_member_; } + + private: + const WeakMember<const GCedWithMembers> weak_member_; +}; +} // namespace + +TEST_F(MemberHeapTest, ConstWeakRefIsClearedOnGC) { + const WeakPersistent<const GCedWithMembers> weak_persistent = + MakeGarbageCollected<GCedWithMembers>(GetAllocationHandle()); + Persistent<GCedWithConstWeakMember> persistent = + MakeGarbageCollected<GCedWithConstWeakMember>(GetAllocationHandle(), + weak_persistent); + PreciseGC(); + EXPECT_FALSE(weak_persistent); + EXPECT_FALSE(persistent->weak_member()); +} + +#if V8_ENABLE_CHECKS + +namespace { +class MemberHeapDeathTest : public testing::TestWithHeap {}; + +class LinkedNode final : public GarbageCollected<LinkedNode> { + public: + explicit LinkedNode(LinkedNode* next) : next_(next) {} + void Trace(Visitor* v) const { v->Trace(next_); } + + void SetNext(LinkedNode* next) { next_ = next; } + + private: + Member<LinkedNode> next_; +}; + +} // namespace + +TEST_F(MemberHeapDeathTest, CheckForOffHeapMemberCrashesOnReassignment) { + std::vector<Member<LinkedNode>> off_heap_member; + // Verification state is constructed on first assignment. + off_heap_member.emplace_back( + MakeGarbageCollected<LinkedNode>(GetAllocationHandle(), nullptr)); + { + auto tmp_heap = cppgc::Heap::Create(platform_); + auto* tmp_obj = MakeGarbageCollected<LinkedNode>( + tmp_heap->GetAllocationHandle(), nullptr); + EXPECT_DEATH_IF_SUPPORTED(off_heap_member[0] = tmp_obj, ""); + } +} + +TEST_F(MemberHeapDeathTest, CheckForOnStackMemberCrashesOnReassignment) { + Member<LinkedNode> stack_member; + // Verification state is constructed on first assignment. + stack_member = + MakeGarbageCollected<LinkedNode>(GetAllocationHandle(), nullptr); + { + auto tmp_heap = cppgc::Heap::Create(platform_); + auto* tmp_obj = MakeGarbageCollected<LinkedNode>( + tmp_heap->GetAllocationHandle(), nullptr); + EXPECT_DEATH_IF_SUPPORTED(stack_member = tmp_obj, ""); + } +} + +TEST_F(MemberHeapDeathTest, CheckForOnHeapMemberCrashesOnInitialAssignment) { + auto* obj = MakeGarbageCollected<LinkedNode>(GetAllocationHandle(), nullptr); + { + auto tmp_heap = cppgc::Heap::Create(platform_); + EXPECT_DEATH_IF_SUPPORTED( + // For regular on-heap Member references the verification state is + // constructed eagerly on creating the reference. + MakeGarbageCollected<LinkedNode>(tmp_heap->GetAllocationHandle(), obj), + ""); + } +} + +#endif // V8_ENABLE_CHECKS + } // namespace internal } // namespace cppgc diff --git a/deps/v8/test/unittests/heap/cppgc/minor-gc-unittest.cc b/deps/v8/test/unittests/heap/cppgc/minor-gc-unittest.cc index eac88b498a..27d2cf7911 100644 --- a/deps/v8/test/unittests/heap/cppgc/minor-gc-unittest.cc +++ b/deps/v8/test/unittests/heap/cppgc/minor-gc-unittest.cc @@ -108,9 +108,9 @@ TYPED_TEST(MinorGCTestForType, StickyBits) { Persistent<Type> p1 = MakeGarbageCollected<Type>(this->GetAllocationHandle()); TestFixture::CollectMinor(); - EXPECT_FALSE(HeapObjectHeader::FromPayload(p1.Get()).IsYoung()); + EXPECT_FALSE(HeapObjectHeader::FromObject(p1.Get()).IsYoung()); TestFixture::CollectMajor(); - EXPECT_FALSE(HeapObjectHeader::FromPayload(p1.Get()).IsYoung()); + EXPECT_FALSE(HeapObjectHeader::FromObject(p1.Get()).IsYoung()); EXPECT_EQ(0u, TestFixture::DestructedObjects()); } @@ -120,14 +120,14 @@ TYPED_TEST(MinorGCTestForType, OldObjectIsNotVisited) { Persistent<Type> p = MakeGarbageCollected<Type>(this->GetAllocationHandle()); TestFixture::CollectMinor(); EXPECT_EQ(0u, TestFixture::DestructedObjects()); - EXPECT_FALSE(HeapObjectHeader::FromPayload(p.Get()).IsYoung()); + EXPECT_FALSE(HeapObjectHeader::FromObject(p.Get()).IsYoung()); // Check that the old deleted object won't be visited during minor GC. Type* raw = p.Release(); TestFixture::CollectMinor(); EXPECT_EQ(0u, TestFixture::DestructedObjects()); - EXPECT_FALSE(HeapObjectHeader::FromPayload(raw).IsYoung()); - EXPECT_FALSE(HeapObjectHeader::FromPayload(raw).IsFree()); + EXPECT_FALSE(HeapObjectHeader::FromObject(raw).IsYoung()); + EXPECT_FALSE(HeapObjectHeader::FromObject(raw).IsFree()); // Check that the old deleted object will be revisited in major GC. TestFixture::CollectMajor(); @@ -139,7 +139,7 @@ void InterGenerationalPointerTest(MinorGCTest* test, cppgc::Heap* heap) { Persistent<Type1> old = MakeGarbageCollected<Type1>(heap->GetAllocationHandle()); test->CollectMinor(); - EXPECT_FALSE(HeapObjectHeader::FromPayload(old.Get()).IsYoung()); + EXPECT_FALSE(HeapObjectHeader::FromObject(old.Get()).IsYoung()); Type2* young = nullptr; @@ -151,7 +151,7 @@ void InterGenerationalPointerTest(MinorGCTest* test, cppgc::Heap* heap) { auto* ptr = MakeGarbageCollected<Type2>(heap->GetAllocationHandle()); ptr->next = young; young = ptr; - EXPECT_TRUE(HeapObjectHeader::FromPayload(young).IsYoung()); + EXPECT_TRUE(HeapObjectHeader::FromObject(young).IsYoung()); } } @@ -170,8 +170,8 @@ void InterGenerationalPointerTest(MinorGCTest* test, cppgc::Heap* heap) { EXPECT_TRUE(set.empty()); for (size_t i = 0; i < 64; ++i) { - EXPECT_FALSE(HeapObjectHeader::FromPayload(young).IsFree()); - EXPECT_FALSE(HeapObjectHeader::FromPayload(young).IsYoung()); + EXPECT_FALSE(HeapObjectHeader::FromObject(young).IsFree()); + EXPECT_FALSE(HeapObjectHeader::FromObject(young).IsYoung()); young = static_cast<Type2*>(young->next.Get()); } @@ -217,7 +217,7 @@ TYPED_TEST(MinorGCTestForType, OmitGenerationalBarrierForSentinels) { MakeGarbageCollected<Type>(this->GetAllocationHandle()); TestFixture::CollectMinor(); - EXPECT_FALSE(HeapObjectHeader::FromPayload(old.Get()).IsYoung()); + EXPECT_FALSE(HeapObjectHeader::FromObject(old.Get()).IsYoung()); const auto& set = Heap::From(this->GetHeap())->remembered_slots(); const size_t set_size_before_barrier = set.size(); diff --git a/deps/v8/test/unittests/heap/cppgc/name-trait-unittest.cc b/deps/v8/test/unittests/heap/cppgc/name-trait-unittest.cc index 57f100379d..7789fd43fa 100644 --- a/deps/v8/test/unittests/heap/cppgc/name-trait-unittest.cc +++ b/deps/v8/test/unittests/heap/cppgc/name-trait-unittest.cc @@ -23,7 +23,7 @@ struct OtherNoName : public GarbageCollected<OtherNoName> { virtual void Trace(Visitor*) const {} }; -class ClassWithName final : public GarbageCollected<OtherNoName>, +class ClassWithName final : public GarbageCollected<ClassWithName>, public NameProvider { public: explicit ClassWithName(const char* name) : name_(name) {} @@ -98,7 +98,7 @@ class HeapObjectHeaderNameTest : public testing::TestWithHeap {}; TEST_F(HeapObjectHeaderNameTest, LookupNameThroughGCInfo) { auto* no_name = MakeGarbageCollected<NoName>(GetAllocationHandle()); - auto no_name_tuple = HeapObjectHeader::FromPayload(no_name).GetName(); + auto no_name_tuple = HeapObjectHeader::FromObject(no_name).GetName(); if (NameProvider::HideInternalNames()) { EXPECT_STREQ(NameProvider::kHiddenName, no_name_tuple.value); EXPECT_TRUE(no_name_tuple.name_was_hidden); @@ -111,7 +111,7 @@ TEST_F(HeapObjectHeaderNameTest, LookupNameThroughGCInfo) { auto* other_no_name = MakeGarbageCollected<OtherNoName>(GetAllocationHandle()); auto other_no_name_tuple = - HeapObjectHeader::FromPayload(other_no_name).GetName(); + HeapObjectHeader::FromObject(other_no_name).GetName(); if (NameProvider::HideInternalNames()) { EXPECT_STREQ(NameProvider::kHiddenName, no_name_tuple.value); EXPECT_TRUE(no_name_tuple.name_was_hidden); @@ -124,7 +124,7 @@ TEST_F(HeapObjectHeaderNameTest, LookupNameThroughGCInfo) { auto* class_with_name = MakeGarbageCollected<ClassWithName>(GetAllocationHandle(), "CustomName"); auto class_with_name_tuple = - HeapObjectHeader::FromPayload(class_with_name).GetName(); + HeapObjectHeader::FromObject(class_with_name).GetName(); EXPECT_STREQ("CustomName", class_with_name_tuple.value); EXPECT_FALSE(class_with_name_tuple.name_was_hidden); } diff --git a/deps/v8/test/unittests/heap/cppgc/persistent-family-unittest.cc b/deps/v8/test/unittests/heap/cppgc/persistent-family-unittest.cc index 1fff7e2c11..4d5bdb6a1d 100644 --- a/deps/v8/test/unittests/heap/cppgc/persistent-family-unittest.cc +++ b/deps/v8/test/unittests/heap/cppgc/persistent-family-unittest.cc @@ -12,6 +12,7 @@ #include "include/cppgc/persistent.h" #include "include/cppgc/source-location.h" #include "include/cppgc/type-traits.h" +#include "src/base/logging.h" #include "src/heap/cppgc/heap.h" #include "src/heap/cppgc/liveness-broker.h" #include "src/heap/cppgc/visitor.h" @@ -73,12 +74,12 @@ template <typename T> using LocalizedPersistent = internal::BasicPersistent<T, internal::StrongPersistentPolicy, internal::KeepLocationPolicy, - internal::DefaultCheckingPolicy>; + internal::DefaultPersistentCheckingPolicy>; template <typename T> using LocalizedCrossThreadPersistent = internal::BasicCrossThreadPersistent< T, internal::StrongCrossThreadPersistentPolicy, - internal::KeepLocationPolicy, internal::DefaultCheckingPolicy>; + internal::KeepLocationPolicy, internal::DisabledCheckingPolicy>; class RootVisitor final : public VisitorBase { public: @@ -108,7 +109,7 @@ class RootVisitor final : public VisitorBase { std::vector<std::pair<WeakCallback, const void*>> weak_callbacks_; }; -class PersistentTest : public testing::TestSupportingAllocationOnly {}; +class PersistentTest : public testing::TestWithHeap {}; } // namespace @@ -339,13 +340,13 @@ void NullStateAssignment(cppgc::Heap* heap) { PersistentType<GCed> p = MakeGarbageCollected<GCed>(heap->GetAllocationHandle()); EXPECT_EQ(1u, GetRegion<PersistentType>(heap).NodesInUse()); - p = static_cast<GCed*>(0); + p = static_cast<GCed*>(nullptr); EXPECT_EQ(nullptr, p.Get()); EXPECT_EQ(0u, GetRegion<PersistentType>(heap).NodesInUse()); } } -TEST_F(PersistentTest, NullStateAssignemnt) { +TEST_F(PersistentTest, NullStateAssignment) { auto* heap = GetHeap(); NullStateAssignment<Persistent>(heap); NullStateAssignment<WeakPersistent>(heap); @@ -683,6 +684,55 @@ TEST_F(PersistentTest, ExplicitDowncast) { ExplicitDowncast<subtle::WeakCrossThreadPersistent>(heap); } +namespace { +template <template <typename> class PersistentType1, + template <typename> class PersistentType2> +void EqualityTest(cppgc::Heap* heap) { + { + GCed* gced = MakeGarbageCollected<GCed>(heap->GetAllocationHandle()); + PersistentType1<GCed> persistent1 = gced; + PersistentType2<GCed> persistent2 = gced; + EXPECT_TRUE(persistent1 == persistent2); + EXPECT_FALSE(persistent1 != persistent2); + persistent2 = persistent1; + EXPECT_TRUE(persistent1 == persistent2); + EXPECT_FALSE(persistent1 != persistent2); + } + { + PersistentType1<GCed> persistent1 = + MakeGarbageCollected<GCed>(heap->GetAllocationHandle()); + PersistentType2<GCed> persistent2 = + MakeGarbageCollected<GCed>(heap->GetAllocationHandle()); + EXPECT_TRUE(persistent1 != persistent2); + EXPECT_FALSE(persistent1 == persistent2); + } +} +} // namespace + +TEST_F(PersistentTest, EqualityTest) { + cppgc::Heap* heap = GetHeap(); + EqualityTest<Persistent, Persistent>(heap); + EqualityTest<Persistent, WeakPersistent>(heap); + EqualityTest<Persistent, subtle::CrossThreadPersistent>(heap); + EqualityTest<Persistent, subtle::WeakCrossThreadPersistent>(heap); + EqualityTest<WeakPersistent, Persistent>(heap); + EqualityTest<WeakPersistent, WeakPersistent>(heap); + EqualityTest<WeakPersistent, subtle::CrossThreadPersistent>(heap); + EqualityTest<WeakPersistent, subtle::WeakCrossThreadPersistent>(heap); + EqualityTest<subtle::CrossThreadPersistent, Persistent>(heap); + EqualityTest<subtle::CrossThreadPersistent, WeakPersistent>(heap); + EqualityTest<subtle::CrossThreadPersistent, subtle::CrossThreadPersistent>( + heap); + EqualityTest<subtle::CrossThreadPersistent, + subtle::WeakCrossThreadPersistent>(heap); + EqualityTest<subtle::WeakCrossThreadPersistent, Persistent>(heap); + EqualityTest<subtle::WeakCrossThreadPersistent, WeakPersistent>(heap); + EqualityTest<subtle::WeakCrossThreadPersistent, + subtle::CrossThreadPersistent>(heap); + EqualityTest<subtle::WeakCrossThreadPersistent, + subtle::WeakCrossThreadPersistent>(heap); +} + TEST_F(PersistentTest, TraceStrong) { auto* heap = GetHeap(); static constexpr size_t kItems = 512; @@ -928,5 +978,69 @@ TEST_F(PersistentTest, Lock) { auto strong = weak.Lock(); } +namespace { + +class TraceCounter final : public GarbageCollected<TraceCounter> { + public: + void Trace(cppgc::Visitor* visitor) const { + trace_calls_++; + } + + size_t trace_calls() const { return trace_calls_; } + + private: + mutable size_t trace_calls_ = 0; +}; + +class DestructionCounter final : public GarbageCollected<DestructionCounter> { + public: + static size_t destructor_calls_; + + ~DestructionCounter() { destructor_calls_++; } + + void Trace(cppgc::Visitor*) const {} +}; +size_t DestructionCounter::destructor_calls_; + +} // namespace + +TEST_F(PersistentTest, PersistentRetainsObject) { + Persistent<TraceCounter> trace_counter = + MakeGarbageCollected<TraceCounter>(GetAllocationHandle()); + WeakPersistent<TraceCounter> weak_trace_counter(trace_counter.Get()); + EXPECT_EQ(0u, trace_counter->trace_calls()); + PreciseGC(); + size_t saved_trace_count = trace_counter->trace_calls(); + EXPECT_LT(0u, saved_trace_count); + PreciseGC(); + EXPECT_LT(saved_trace_count, trace_counter->trace_calls()); + EXPECT_TRUE(weak_trace_counter); +} + +TEST_F(PersistentTest, WeakPersistentDoesNotRetainObject) { + WeakPersistent<TraceCounter> weak_trace_counter = + MakeGarbageCollected<TraceCounter>(GetAllocationHandle()); + PreciseGC(); + EXPECT_FALSE(weak_trace_counter); +} + +TEST_F(PersistentTest, ObjectReclaimedAfterClearedPersistent) { + WeakPersistent<DestructionCounter> weak_finalized; + { + DestructionCounter::destructor_calls_ = 0; + Persistent<DestructionCounter> finalized = + MakeGarbageCollected<DestructionCounter>(GetAllocationHandle()); + weak_finalized = finalized.Get(); + EXPECT_EQ(0u, DestructionCounter::destructor_calls_); + PreciseGC(); + EXPECT_EQ(0u, DestructionCounter::destructor_calls_); + USE(finalized); + EXPECT_TRUE(weak_finalized); + } + PreciseGC(); + EXPECT_EQ(1u, DestructionCounter::destructor_calls_); + EXPECT_FALSE(weak_finalized); +} + } // namespace internal } // namespace cppgc diff --git a/deps/v8/test/unittests/heap/cppgc/sanitizer-unittest.cc b/deps/v8/test/unittests/heap/cppgc/sanitizer-unittest.cc new file mode 100644 index 0000000000..687904b825 --- /dev/null +++ b/deps/v8/test/unittests/heap/cppgc/sanitizer-unittest.cc @@ -0,0 +1,59 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "include/cppgc/allocation.h" +#include "src/base/macros.h" +#include "src/base/sanitizer/asan.h" +#include "test/unittests/heap/cppgc/tests.h" +#include "testing/gtest/include/gtest/gtest.h" + +#if defined(LEAK_SANITIZER) +#include <sanitizer/lsan_interface.h> +#endif // LEAK_SANITIZER + +namespace cppgc { +namespace internal { + +#if defined(LEAK_SANITIZER) + +using LsanTest = testing::TestWithHeap; + +class GCed final : public GarbageCollected<GCed> { + public: + void Trace(cppgc::Visitor*) const {} + std::unique_ptr<int> dummy{std::make_unique<int>(17)}; +}; + +TEST_F(LsanTest, LeakDetectionDoesNotFindMemoryRetainedFromManaged) { + auto* o = MakeGarbageCollected<GCed>(GetAllocationHandle()); + __lsan_do_leak_check(); + USE(o); +} + +#endif // LEAK_SANITIZER + +#ifdef V8_USE_ADDRESS_SANITIZER + +using AsanTest = testing::TestWithHeap; + +class ObjectPoisoningInDestructor final + : public GarbageCollected<ObjectPoisoningInDestructor> { + public: + ~ObjectPoisoningInDestructor() { + ASAN_POISON_MEMORY_REGION(this, sizeof(ObjectPoisoningInDestructor)); + } + void Trace(cppgc::Visitor*) const {} + + void* dummy{0}; +}; + +TEST_F(AsanTest, ObjectPoisoningInDestructor) { + MakeGarbageCollected<ObjectPoisoningInDestructor>(GetAllocationHandle()); + PreciseGC(); +} + +#endif // V8_USE_ADDRESS_SANITIZER + +} // namespace internal +} // namespace cppgc diff --git a/deps/v8/test/unittests/heap/cppgc/stack-unittest.cc b/deps/v8/test/unittests/heap/cppgc/stack-unittest.cc index 0fff908b36..040baa7a82 100644 --- a/deps/v8/test/unittests/heap/cppgc/stack-unittest.cc +++ b/deps/v8/test/unittests/heap/cppgc/stack-unittest.cc @@ -24,12 +24,9 @@ using heap::base::StackVisitor; namespace { class GCStackTest : public ::testing::Test { - protected: - void SetUp() override { - stack_.reset(new Stack(v8::base::Stack::GetStackStart())); - } - - void TearDown() override { stack_.reset(); } + public: + GCStackTest() + : stack_(std::make_unique<Stack>(v8::base::Stack::GetStackStart())) {} Stack* GetStack() const { return stack_.get(); } @@ -39,10 +36,12 @@ class GCStackTest : public ::testing::Test { } // namespace +#if !V8_OS_FUCHSIA TEST_F(GCStackTest, IsOnStackForStackValue) { void* dummy; EXPECT_TRUE(GetStack()->IsOnStack(&dummy)); } +#endif // !V8_OS_FUCHSIA TEST_F(GCStackTest, IsOnStackForHeapValue) { auto dummy = std::make_unique<int>(); @@ -109,7 +108,7 @@ namespace { // Prevent inlining as that would allow the compiler to prove that the parameter // must not actually be materialized. // -// Parameter positiosn are explicit to test various calling conventions. +// Parameter positions are explicit to test various calling conventions. V8_NOINLINE void* RecursivelyPassOnParameterImpl(void* p1, void* p2, void* p3, void* p4, void* p5, void* p6, void* p7, void* p8, @@ -272,8 +271,32 @@ TEST_F(GCStackTest, IteratePointersFindsParameterNesting8) { } #endif // !_MSC_VER || __clang__ -// The following test uses inline assembly and has been checked to work on clang -// to verify that the stack-scanning trampoline pushes callee-saved registers. +namespace { +// We manually call into this function from inline assembly. Therefore we need +// to make sure that: +// 1) there is no .plt indirection (i.e. visibility is hidden); +// 2) stack is realigned in the function prologue. +extern "C" V8_NOINLINE +#if defined(__clang__) + __attribute__((used)) +#if !defined(V8_OS_WIN) + __attribute__((visibility("hidden"))) +#endif // !defined(V8_OS_WIN) +#ifdef __has_attribute +#if __has_attribute(force_align_arg_pointer) + __attribute__((force_align_arg_pointer)) +#endif // __has_attribute(force_align_arg_pointer) +#endif // __has_attribute +#endif // defined(__clang__) + void + IteratePointersNoMangling(Stack* stack, StackVisitor* visitor) { + stack->IteratePointers(visitor); +} +} // namespace + +// The following tests use inline assembly and have been checked to work on +// clang to verify that the stack-scanning trampoline pushes callee-saved +// registers. // // The test uses a macro loop as asm() can only be passed string literals. #ifdef __clang__ @@ -322,27 +345,117 @@ TEST_F(GCStackTest, IteratePointersFindsCalleeSavedRegisters) { auto* local_stack = GetStack(); auto* local_scanner = scanner.get(); +#define MOVE_TO_REG_AND_CALL_IMPL(needle_reg, arg1, arg2) \ + asm volatile("mov %0, %%" needle_reg "\n mov %1, %%" arg1 \ + "\n mov %2, %%" arg2 \ + "\n call %P3" \ + "\n mov $0, %%" needle_reg \ + : \ + : "r"(local_scanner->needle()), "r"(local_stack), \ + "r"(local_scanner), "i"(IteratePointersNoMangling) \ + : "memory", needle_reg, arg1, arg2, "cc"); + +#ifdef V8_OS_WIN +#define MOVE_TO_REG_AND_CALL(reg) MOVE_TO_REG_AND_CALL_IMPL(reg, "rcx", "rdx") +#else // !V8_OS_WIN +#define MOVE_TO_REG_AND_CALL(reg) MOVE_TO_REG_AND_CALL_IMPL(reg, "rdi", "rsi") +#endif // V8_OS_WIN + // Moves |local_scanner->needle()| into a callee-saved register, leaving the // callee-saved register as the only register referencing the needle. // (Ignoring implementation-dependent dirty registers/stack.) -#define KEEP_ALIVE_FROM_CALLEE_SAVED(reg) \ - local_scanner->Reset(); \ - /* This moves the temporary into the calee-saved register. */ \ - asm("mov %0, %%" reg : : "r"(local_scanner->needle()) : reg); \ - /* Register is unprotected from here till the actual invocation. */ \ - local_stack->IteratePointers(local_scanner); \ - EXPECT_TRUE(local_scanner->found()) \ - << "pointer in callee-saved register not found. register: " << reg \ - << std::endl; \ - /* Clear out the register again */ \ - asm("mov $0, %%" reg : : : reg); +#define KEEP_ALIVE_FROM_CALLEE_SAVED(reg) \ + local_scanner->Reset(); \ + /* Wrap the inline assembly in a lambda to rely on the compiler for saving \ + caller-saved registers. */ \ + [local_stack, local_scanner]() V8_NOINLINE { MOVE_TO_REG_AND_CALL(reg) }(); \ + EXPECT_TRUE(local_scanner->found()) \ + << "pointer in callee-saved register not found. register: " << reg \ + << std::endl; FOR_ALL_CALLEE_SAVED_REGS(KEEP_ALIVE_FROM_CALLEE_SAVED) +#undef MOVE_TO_REG_AND_CALL +#undef MOVE_TO_REG_AND_CALL_IMPL #undef KEEP_ALIVE_FROM_CALLEE_SAVED #undef FOR_ALL_CALLEE_SAVED_REGS } #endif // FOR_ALL_CALLEE_SAVED_REGS +#if defined(__clang__) && defined(V8_TARGET_ARCH_X64) && defined(V8_OS_WIN) + +#define FOR_ALL_XMM_CALLEE_SAVED_REGS(V) \ + V("xmm6") \ + V("xmm7") \ + V("xmm8") \ + V("xmm9") \ + V("xmm10") \ + V("xmm11") \ + V("xmm12") \ + V("xmm13") \ + V("xmm14") \ + V("xmm15") + +TEST_F(GCStackTest, IteratePointersFindsCalleeSavedXMMRegisters) { + auto scanner = std::make_unique<StackScanner>(); + + // No check that the needle is initially not found as on some platforms it + // may be part of temporaries after setting it up through StackScanner. + +// First, clear all callee-saved xmm registers. +#define CLEAR_REGISTER(reg) asm("pxor %%" reg ", %%" reg : : : reg); + + FOR_ALL_XMM_CALLEE_SAVED_REGS(CLEAR_REGISTER) +#undef CLEAR_REGISTER + + // Keep local raw pointers to keep instruction sequences small below. + auto* local_stack = GetStack(); + auto* local_scanner = scanner.get(); + +// Moves |local_scanner->needle()| into a callee-saved register, leaving the +// callee-saved register as the only register referencing the needle. +// (Ignoring implementation-dependent dirty registers/stack.) +#define KEEP_ALIVE_FROM_CALLEE_SAVED(reg) \ + local_scanner->Reset(); \ + [local_stack, local_scanner]() V8_NOINLINE { MOVE_TO_REG_AND_CALL(reg) }(); \ + EXPECT_TRUE(local_scanner->found()) \ + << "pointer in callee-saved xmm register not found. register: " << reg \ + << std::endl; + + // First, test the pointer in the low quadword. +#define MOVE_TO_REG_AND_CALL(reg) \ + asm volatile("mov %0, %%rax \n movq %%rax, %%" reg \ + "\n mov %1, %%rcx \n mov %2, %%rdx" \ + "\n call %P3" \ + "\n pxor %%" reg ", %%" reg \ + : \ + : "r"(local_scanner->needle()), "r"(local_stack), \ + "r"(local_scanner), "i"(IteratePointersNoMangling) \ + : "memory", "rax", reg, "rcx", "rdx", "cc"); + + FOR_ALL_XMM_CALLEE_SAVED_REGS(KEEP_ALIVE_FROM_CALLEE_SAVED) + +#undef MOVE_TO_REG_AND_CALL + // Then, test the pointer in the upper quadword. +#define MOVE_TO_REG_AND_CALL(reg) \ + asm volatile("mov %0, %%rax \n movq %%rax, %%" reg \ + "\n pshufd $0b01001110, %%" reg ", %%" reg \ + "\n mov %1, %%rcx \n mov %2, %%rdx" \ + "\n call %P3" \ + "\n pxor %%" reg ", %%" reg \ + : \ + : "r"(local_scanner->needle()), "r"(local_stack), \ + "r"(local_scanner), "i"(IteratePointersNoMangling) \ + : "memory", "rax", reg, "rcx", "rdx", "cc"); + + FOR_ALL_XMM_CALLEE_SAVED_REGS(KEEP_ALIVE_FROM_CALLEE_SAVED) +#undef MOVE_TO_REG_AND_CALL +#undef KEEP_ALIVE_FROM_CALLEE_SAVED +#undef FOR_ALL_XMM_CALLEE_SAVED_REGS +} + +#endif // defined(__clang__) && defined(V8_TARGET_ARCH_X64) && + // defined(V8_OS_WIN) + #if V8_OS_LINUX && (V8_HOST_ARCH_IA32 || V8_HOST_ARCH_X64) class CheckStackAlignmentVisitor final : public StackVisitor { public: diff --git a/deps/v8/test/unittests/heap/cppgc/sweeper-unittest.cc b/deps/v8/test/unittests/heap/cppgc/sweeper-unittest.cc index 932ff9bb96..c7aaa2495b 100644 --- a/deps/v8/test/unittests/heap/cppgc/sweeper-unittest.cc +++ b/deps/v8/test/unittests/heap/cppgc/sweeper-unittest.cc @@ -58,7 +58,7 @@ class SweeperTest : public testing::TestWithHeap { } void MarkObject(void* payload) { - HeapObjectHeader& header = HeapObjectHeader::FromPayload(payload); + HeapObjectHeader& header = HeapObjectHeader::FromObject(payload); header.TryMarkAtomic(); } @@ -196,10 +196,10 @@ TEST_F(SweeperTest, CoalesceFreeListEntries) { MarkObject(object4); Address object2_start = - reinterpret_cast<Address>(&HeapObjectHeader::FromPayload(object2)); + reinterpret_cast<Address>(&HeapObjectHeader::FromObject(object2)); Address object3_end = - reinterpret_cast<Address>(&HeapObjectHeader::FromPayload(object3)) + - HeapObjectHeader::FromPayload(object3).GetSize(); + reinterpret_cast<Address>(&HeapObjectHeader::FromObject(object3)) + + HeapObjectHeader::FromObject(object3).AllocatedSize(); const BasePage* page = BasePage::FromPayload(object2); const FreeList& freelist = NormalPageSpace::From(page->space())->free_list(); @@ -249,8 +249,8 @@ TEST_F(SweeperTest, UnmarkObjects) { MakeGarbageCollected<GCed<kLargeObjectSizeThreshold * 2>>( GetAllocationHandle()); - auto& normal_object_header = HeapObjectHeader::FromPayload(normal_object); - auto& large_object_header = HeapObjectHeader::FromPayload(large_object); + auto& normal_object_header = HeapObjectHeader::FromObject(normal_object); + auto& large_object_header = HeapObjectHeader::FromObject(large_object); normal_object_header.TryMarkAtomic(); large_object_header.TryMarkAtomic(); @@ -326,5 +326,52 @@ TEST_F(SweeperTest, LazySweepingDuringAllocation) { EXPECT_NE(new_object1, new_object2); } +TEST_F(SweeperTest, LazySweepingNormalPages) { + using GCedObject = GCed<sizeof(size_t)>; + EXPECT_EQ(0u, g_destructor_callcount); + PreciseGC(); + EXPECT_EQ(0u, g_destructor_callcount); + MakeGarbageCollected<GCedObject>(GetAllocationHandle()); + static constexpr Heap::Config config = { + Heap::Config::CollectionType::kMajor, + Heap::Config::StackState::kNoHeapPointers, + Heap::Config::MarkingType::kAtomic, + Heap::Config::SweepingType::kIncrementalAndConcurrent}; + Heap::From(GetHeap())->CollectGarbage(config); + EXPECT_EQ(0u, g_destructor_callcount); + MakeGarbageCollected<GCedObject>(GetAllocationHandle()); + EXPECT_EQ(1u, g_destructor_callcount); + PreciseGC(); + EXPECT_EQ(2u, g_destructor_callcount); +} + +namespace { +class AllocatingFinalizer : public GarbageCollected<AllocatingFinalizer> { + public: + static size_t destructor_callcount_; + explicit AllocatingFinalizer(AllocationHandle& allocation_handle) + : allocation_handle_(allocation_handle) {} + ~AllocatingFinalizer() { + MakeGarbageCollected<GCed<sizeof(size_t)>>(allocation_handle_); + ++destructor_callcount_; + } + void Trace(Visitor*) const {} + + private: + AllocationHandle& allocation_handle_; +}; +size_t AllocatingFinalizer::destructor_callcount_ = 0; +} // namespace + +TEST_F(SweeperTest, AllocationDuringFinalizationIsNotSwept) { + AllocatingFinalizer::destructor_callcount_ = 0; + g_destructor_callcount = 0; + MakeGarbageCollected<AllocatingFinalizer>(GetAllocationHandle(), + GetAllocationHandle()); + PreciseGC(); + EXPECT_LT(0u, AllocatingFinalizer::destructor_callcount_); + EXPECT_EQ(0u, g_destructor_callcount); +} + } // namespace internal } // namespace cppgc diff --git a/deps/v8/test/unittests/heap/cppgc/tests.h b/deps/v8/test/unittests/heap/cppgc/tests.h index d367e45dad..9b2db5d04a 100644 --- a/deps/v8/test/unittests/heap/cppgc/tests.h +++ b/deps/v8/test/unittests/heap/cppgc/tests.h @@ -76,12 +76,22 @@ class TestWithHeap : public TestWithPlatform { "Testing", cppgc::Heap::StackState::kNoHeapPointers); } + void ConservativeGC() { + heap_->ForceGarbageCollectionSlow( + ::testing::UnitTest::GetInstance()->current_test_info()->name(), + "Testing", cppgc::Heap::StackState::kMayContainHeapPointers); + } + cppgc::Heap* GetHeap() const { return heap_.get(); } cppgc::AllocationHandle& GetAllocationHandle() const { return allocation_handle_; } + cppgc::HeapHandle& GetHeapHandle() const { + return GetHeap()->GetHeapHandle(); + } + std::unique_ptr<MarkerBase>& GetMarkerRef() { return Heap::From(GetHeap())->marker_; } diff --git a/deps/v8/test/unittests/heap/cppgc/visitor-unittest.cc b/deps/v8/test/unittests/heap/cppgc/visitor-unittest.cc index b57eb8f050..9f716df314 100644 --- a/deps/v8/test/unittests/heap/cppgc/visitor-unittest.cc +++ b/deps/v8/test/unittests/heap/cppgc/visitor-unittest.cc @@ -29,10 +29,17 @@ class GCed : public GarbageCollected<GCed> { virtual void Trace(cppgc::Visitor* visitor) const { trace_callcount++; } }; - size_t GCed::trace_callcount; -class GCedMixin : public GarbageCollectedMixin {}; +class GCedMixin : public GarbageCollectedMixin { + public: + static size_t trace_callcount; + + GCedMixin() { trace_callcount = 0; } + + virtual void Trace(cppgc::Visitor* visitor) const { trace_callcount++; } +}; +size_t GCedMixin::trace_callcount; class OtherPayload { public: @@ -101,6 +108,33 @@ TEST_F(TraceTraitTest, TraceGCedMixinThroughTraceDescriptor) { } namespace { +class MixinInstanceWithoutTrace + : public GarbageCollected<MixinInstanceWithoutTrace>, + public GCedMixin {}; +} // namespace + +TEST_F(TraceTraitTest, MixinInstanceWithoutTrace) { + // Verify that a mixin instance without any traceable + // references inherits the mixin's trace implementation. + auto* mixin_without_trace = + MakeGarbageCollected<MixinInstanceWithoutTrace>(GetAllocationHandle()); + auto* mixin = static_cast<GCedMixin*>(mixin_without_trace); + EXPECT_EQ(0u, GCedMixin::trace_callcount); + TraceDescriptor mixin_without_trace_desc = + TraceTrait<MixinInstanceWithoutTrace>::GetTraceDescriptor( + mixin_without_trace); + TraceDescriptor mixin_desc = TraceTrait<GCedMixin>::GetTraceDescriptor(mixin); + EXPECT_EQ(mixin_without_trace_desc.callback, mixin_desc.callback); + EXPECT_EQ(mixin_without_trace_desc.base_object_payload, + mixin_desc.base_object_payload); + TraceDescriptor desc = + TraceTrait<MixinInstanceWithoutTrace>::GetTraceDescriptor( + mixin_without_trace); + desc.callback(nullptr, desc.base_object_payload); + EXPECT_EQ(1u, GCedMixin::trace_callcount); +} + +namespace { class DispatchingVisitor final : public VisitorBase { public: diff --git a/deps/v8/test/unittests/heap/cppgc/weak-container-unittest.cc b/deps/v8/test/unittests/heap/cppgc/weak-container-unittest.cc index 0aee3287ef..4176a2d618 100644 --- a/deps/v8/test/unittests/heap/cppgc/weak-container-unittest.cc +++ b/deps/v8/test/unittests/heap/cppgc/weak-container-unittest.cc @@ -3,6 +3,7 @@ // found in the LICENSE file. #include "include/cppgc/allocation.h" +#include "src/base/macros.h" #include "src/heap/cppgc/marker.h" #include "src/heap/cppgc/marking-visitor.h" #include "src/heap/cppgc/stats-collector.h" @@ -18,6 +19,8 @@ class WeakContainerTest : public testing::TestWithHeap { using Config = Marker::MarkingConfig; void StartMarking() { + CHECK_EQ(0u, + Heap::From(GetHeap())->AsBase().stats_collector()->marked_bytes()); Config config = {Config::CollectionType::kMajor, Config::StackState::kNoHeapPointers, Config::MarkingType::kIncremental}; @@ -27,11 +30,23 @@ class WeakContainerTest : public testing::TestWithHeap { void FinishMarking(Config::StackState stack_state) { GetMarkerRef()->FinishMarking(stack_state); + marked_bytes_ = + Heap::From(GetHeap())->AsBase().stats_collector()->marked_bytes(); GetMarkerRef().reset(); Heap::From(GetHeap())->stats_collector()->NotifySweepingCompleted(); } + + size_t GetMarkedBytes() const { return marked_bytes_; } + + private: + size_t marked_bytes_ = 0; }; +template <typename T> +constexpr size_t SizeOf() { + return RoundUp<kAllocationGranularity>(sizeof(T) + sizeof(HeapObjectHeader)); +} + class TraceableGCed : public GarbageCollected<TraceableGCed> { public: void Trace(cppgc::Visitor*) const { n_trace_calls++; } @@ -83,6 +98,7 @@ TEST_F(WeakContainerTest, TraceableGCedTraced) { GetMarkerRef()->Visitor().TraceWeakContainer(obj, EmptyWeakCallback, nullptr); FinishMarking(Config::StackState::kNoHeapPointers); EXPECT_NE(0u, TraceableGCed::n_trace_calls); + EXPECT_EQ(SizeOf<TraceableGCed>(), GetMarkedBytes()); access(obj); } @@ -94,6 +110,7 @@ TEST_F(WeakContainerTest, NonTraceableGCedNotTraced) { GetMarkerRef()->Visitor().TraceWeakContainer(obj, EmptyWeakCallback, nullptr); FinishMarking(Config::StackState::kNoHeapPointers); EXPECT_EQ(0u, NonTraceableGCed::n_trace_calls); + EXPECT_EQ(SizeOf<NonTraceableGCed>(), GetMarkedBytes()); access(obj); } @@ -105,33 +122,32 @@ TEST_F(WeakContainerTest, NonTraceableGCedNotTracedConservatively) { GetMarkerRef()->Visitor().TraceWeakContainer(obj, EmptyWeakCallback, nullptr); FinishMarking(Config::StackState::kMayContainHeapPointers); EXPECT_NE(0u, NonTraceableGCed::n_trace_calls); + EXPECT_EQ(SizeOf<NonTraceableGCed>(), GetMarkedBytes()); + access(obj); +} + +TEST_F(WeakContainerTest, PreciseGCTracesWeakContainerWhenTraced) { + TraceableGCed* obj = + MakeGarbageCollected<TraceableGCed>(GetAllocationHandle()); + TraceableGCed::n_trace_calls = 0u; + StartMarking(); + GetMarkerRef()->Visitor().TraceWeakContainer(obj, EmptyWeakCallback, nullptr); + FinishMarking(Config::StackState::kNoHeapPointers); + EXPECT_EQ(1u, TraceableGCed::n_trace_calls); + EXPECT_EQ(SizeOf<TraceableGCed>(), GetMarkedBytes()); access(obj); } TEST_F(WeakContainerTest, ConservativeGCTracesWeakContainer) { - size_t trace_count_without_conservative; - { - TraceableGCed* obj = - MakeGarbageCollected<TraceableGCed>(GetAllocationHandle()); - TraceableGCed::n_trace_calls = 0u; - StartMarking(); - GetMarkerRef()->Visitor().TraceWeakContainer(obj, EmptyWeakCallback, - nullptr); - FinishMarking(Config::StackState::kNoHeapPointers); - trace_count_without_conservative = TraceableGCed::n_trace_calls; - access(obj); - } - { - TraceableGCed* obj = - MakeGarbageCollected<TraceableGCed>(GetAllocationHandle()); - TraceableGCed::n_trace_calls = 0u; - StartMarking(); - GetMarkerRef()->Visitor().TraceWeakContainer(obj, EmptyWeakCallback, - nullptr); - FinishMarking(Config::StackState::kMayContainHeapPointers); - EXPECT_LT(trace_count_without_conservative, TraceableGCed::n_trace_calls); - access(obj); - } + TraceableGCed* obj = + MakeGarbageCollected<TraceableGCed>(GetAllocationHandle()); + TraceableGCed::n_trace_calls = 0u; + StartMarking(); + GetMarkerRef()->Visitor().TraceWeakContainer(obj, EmptyWeakCallback, nullptr); + FinishMarking(Config::StackState::kMayContainHeapPointers); + EXPECT_EQ(2u, TraceableGCed::n_trace_calls); + EXPECT_EQ(SizeOf<TraceableGCed>(), GetMarkedBytes()); + access(obj); } TEST_F(WeakContainerTest, ConservativeGCTracesWeakContainerOnce) { @@ -146,6 +162,7 @@ TEST_F(WeakContainerTest, ConservativeGCTracesWeakContainerOnce) { GetMarkerRef()->Visitor().TraceWeakContainer(obj, EmptyWeakCallback, nullptr); FinishMarking(Config::StackState::kMayContainHeapPointers); EXPECT_EQ(1u, NonTraceableGCed::n_trace_calls); + EXPECT_EQ(SizeOf<NonTraceableGCed>(), GetMarkedBytes()); access(obj); } @@ -174,6 +191,7 @@ TEST_F(WeakContainerTest, WeakContainerWeakCallbackCalled) { obj); FinishMarking(Config::StackState::kMayContainHeapPointers); EXPECT_NE(0u, WeakCallback::n_callback_called); + EXPECT_EQ(SizeOf<TraceableGCed>(), GetMarkedBytes()); EXPECT_EQ(obj, WeakCallback::obj); } diff --git a/deps/v8/test/unittests/heap/cppgc/workloads-unittest.cc b/deps/v8/test/unittests/heap/cppgc/workloads-unittest.cc new file mode 100644 index 0000000000..8ab82f6da8 --- /dev/null +++ b/deps/v8/test/unittests/heap/cppgc/workloads-unittest.cc @@ -0,0 +1,351 @@ +// Copyright 2020 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include <algorithm> +#include <iterator> +#include <numeric> + +#include "include/cppgc/allocation.h" +#include "include/cppgc/heap-consistency.h" +#include "include/cppgc/persistent.h" +#include "include/cppgc/prefinalizer.h" +#include "src/heap/cppgc/globals.h" +#include "src/heap/cppgc/heap-visitor.h" +#include "src/heap/cppgc/heap.h" +#include "src/heap/cppgc/object-view.h" +#include "test/unittests/heap/cppgc/tests.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace cppgc { +namespace internal { + +namespace { + +class WorkloadsTest : public testing::TestWithHeap { + public: + void ConservativeGC() { + internal::Heap::From(GetHeap())->CollectGarbage( + Heap::Config::ConservativeAtomicConfig()); + } + void PreciseGC() { + internal::Heap::From(GetHeap())->CollectGarbage( + Heap::Config::PreciseAtomicConfig()); + } +}; + +class SuperClass; + +class PointsBack final : public GarbageCollected<PointsBack> { + public: + PointsBack() { ++alive_count_; } + ~PointsBack() { --alive_count_; } + + void SetBackPointer(SuperClass* back_pointer) { + back_pointer_ = back_pointer; + } + + SuperClass* BackPointer() const { return back_pointer_; } + + void Trace(Visitor* visitor) const { visitor->Trace(back_pointer_); } + + static int alive_count_; + + private: + WeakMember<SuperClass> back_pointer_; +}; +int PointsBack::alive_count_ = 0; + +class SuperClass : public GarbageCollected<SuperClass> { + public: + explicit SuperClass(PointsBack* points_back) : points_back_(points_back) { + points_back_->SetBackPointer(this); + ++alive_count_; + } + virtual ~SuperClass() { --alive_count_; } + + void InvokeConservativeGCAndExpect(WorkloadsTest* test, SuperClass* target, + PointsBack* points_back, + int super_class_count) { + test->ConservativeGC(); + EXPECT_EQ(points_back, target->GetPointsBack()); + EXPECT_EQ(super_class_count, SuperClass::alive_count_); + } + + virtual void Trace(Visitor* visitor) const { visitor->Trace(points_back_); } + + PointsBack* GetPointsBack() const { return points_back_.Get(); } + + static int alive_count_; + + private: + Member<PointsBack> points_back_; +}; +int SuperClass::alive_count_ = 0; + +class SubData final : public GarbageCollected<SubData> { + public: + SubData() { ++alive_count_; } + ~SubData() { --alive_count_; } + + void Trace(Visitor* visitor) const {} + + static int alive_count_; +}; +int SubData::alive_count_ = 0; + +class SubClass final : public SuperClass { + public: + explicit SubClass(AllocationHandle& allocation_handle, + PointsBack* points_back) + : SuperClass(points_back), + data_(MakeGarbageCollected<SubData>(allocation_handle)) { + ++alive_count_; + } + ~SubClass() final { --alive_count_; } + + void Trace(Visitor* visitor) const final { + visitor->Trace(data_); + SuperClass::Trace(visitor); + } + + static int alive_count_; + + private: + Member<SubData> data_; +}; +int SubClass::alive_count_ = 0; + +} // namespace + +TEST_F(WorkloadsTest, Transition) { + PointsBack::alive_count_ = 0; + SuperClass::alive_count_ = 0; + SubClass::alive_count_ = 0; + SubData::alive_count_ = 0; + + Persistent<PointsBack> points_back1 = + MakeGarbageCollected<PointsBack>(GetAllocationHandle()); + Persistent<PointsBack> points_back2 = + MakeGarbageCollected<PointsBack>(GetAllocationHandle()); + Persistent<SuperClass> super_class = + MakeGarbageCollected<SuperClass>(GetAllocationHandle(), points_back1); + Persistent<SubClass> sub_class = MakeGarbageCollected<SubClass>( + GetAllocationHandle(), GetAllocationHandle(), points_back2); + EXPECT_EQ(2, PointsBack::alive_count_); + EXPECT_EQ(2, SuperClass::alive_count_); + EXPECT_EQ(1, SubClass::alive_count_); + EXPECT_EQ(1, SubData::alive_count_); + + PreciseGC(); + EXPECT_EQ(2, PointsBack::alive_count_); + EXPECT_EQ(2, SuperClass::alive_count_); + EXPECT_EQ(1, SubClass::alive_count_); + EXPECT_EQ(1, SubData::alive_count_); + + super_class->InvokeConservativeGCAndExpect(this, super_class.Release(), + points_back1.Get(), 2); + PreciseGC(); + EXPECT_EQ(2, PointsBack::alive_count_); + EXPECT_EQ(1, SuperClass::alive_count_); + EXPECT_EQ(1, SubClass::alive_count_); + EXPECT_EQ(1, SubData::alive_count_); + EXPECT_EQ(nullptr, points_back1->BackPointer()); + + points_back1.Release(); + PreciseGC(); + EXPECT_EQ(1, PointsBack::alive_count_); + EXPECT_EQ(1, SuperClass::alive_count_); + EXPECT_EQ(1, SubClass::alive_count_); + EXPECT_EQ(1, SubData::alive_count_); + + sub_class->InvokeConservativeGCAndExpect(this, sub_class.Release(), + points_back2.Get(), 1); + PreciseGC(); + EXPECT_EQ(1, PointsBack::alive_count_); + EXPECT_EQ(0, SuperClass::alive_count_); + EXPECT_EQ(0, SubClass::alive_count_); + EXPECT_EQ(0, SubData::alive_count_); + EXPECT_EQ(nullptr, points_back2->BackPointer()); + + points_back2.Release(); + PreciseGC(); + EXPECT_EQ(0, PointsBack::alive_count_); + EXPECT_EQ(0, SuperClass::alive_count_); + EXPECT_EQ(0, SubClass::alive_count_); + EXPECT_EQ(0, SubData::alive_count_); + + EXPECT_EQ(super_class, sub_class); +} + +namespace { + +class DynamicallySizedObject final + : public GarbageCollected<DynamicallySizedObject> { + public: + static DynamicallySizedObject* Create(AllocationHandle& allocation_handle, + size_t size) { + CHECK_GT(size, sizeof(DynamicallySizedObject)); + return MakeGarbageCollected<DynamicallySizedObject>( + allocation_handle, + AdditionalBytes(size - sizeof(DynamicallySizedObject))); + } + + uint8_t Get(int i) { return *(reinterpret_cast<uint8_t*>(this) + i); } + + void Trace(Visitor* visitor) const {} +}; + +class ObjectSizeCounter final : private HeapVisitor<ObjectSizeCounter> { + friend class HeapVisitor<ObjectSizeCounter>; + + public: + size_t GetSize(RawHeap* heap) { + Traverse(heap); + return accumulated_size_; + } + + private: + static size_t ObjectSize(const HeapObjectHeader* header) { + return ObjectView(*header).Size(); + } + + bool VisitHeapObjectHeader(HeapObjectHeader* header) { + if (header->IsFree()) return true; + accumulated_size_ += ObjectSize(header); + return true; + } + + size_t accumulated_size_ = 0; +}; + +} // namespace + +TEST_F(WorkloadsTest, BasicFunctionality) { + static_assert(kAllocationGranularity % 4 == 0, + "Allocation granularity is expected to be a multiple of 4"); + Heap* heap = internal::Heap::From(GetHeap()); + size_t initial_object_payload_size = + ObjectSizeCounter().GetSize(&heap->raw_heap()); + { + // When the test starts there may already have been leaked some memory + // on the heap, so we establish a base line. + size_t base_level = initial_object_payload_size; + bool test_pages_allocated = !base_level; + if (test_pages_allocated) { + EXPECT_EQ(0ul, heap->stats_collector()->allocated_memory_size()); + } + + // This allocates objects on the general heap which should add a page of + // memory. + DynamicallySizedObject* alloc32 = + DynamicallySizedObject::Create(GetAllocationHandle(), 32); + memset(alloc32, 40, 32); + DynamicallySizedObject* alloc64 = + DynamicallySizedObject::Create(GetAllocationHandle(), 64); + memset(alloc64, 27, 64); + + size_t total = 96; + + EXPECT_EQ(base_level + total, + ObjectSizeCounter().GetSize(&heap->raw_heap())); + if (test_pages_allocated) { + EXPECT_EQ(kPageSize * 2, + heap->stats_collector()->allocated_memory_size()); + } + + EXPECT_EQ(alloc32->Get(0), 40); + EXPECT_EQ(alloc32->Get(31), 40); + EXPECT_EQ(alloc64->Get(0), 27); + EXPECT_EQ(alloc64->Get(63), 27); + + ConservativeGC(); + + EXPECT_EQ(alloc32->Get(0), 40); + EXPECT_EQ(alloc32->Get(31), 40); + EXPECT_EQ(alloc64->Get(0), 27); + EXPECT_EQ(alloc64->Get(63), 27); + } + + PreciseGC(); + size_t total = 0; + size_t base_level = ObjectSizeCounter().GetSize(&heap->raw_heap()); + bool test_pages_allocated = !base_level; + if (test_pages_allocated) { + EXPECT_EQ(0ul, heap->stats_collector()->allocated_memory_size()); + } + + size_t big = 1008; + Persistent<DynamicallySizedObject> big_area = + DynamicallySizedObject::Create(GetAllocationHandle(), big); + total += big; + + size_t persistent_count = 0; + const size_t kNumPersistents = 100000; + Persistent<DynamicallySizedObject>* persistents[kNumPersistents]; + + for (int i = 0; i < 1000; i++) { + size_t size = 128 + i * 8; + total += size; + persistents[persistent_count++] = new Persistent<DynamicallySizedObject>( + DynamicallySizedObject::Create(GetAllocationHandle(), size)); + // The allocations in the loop may trigger GC with lazy sweeping. + heap->sweeper().FinishIfRunning(); + EXPECT_EQ(base_level + total, + ObjectSizeCounter().GetSize(&heap->raw_heap())); + if (test_pages_allocated) { + EXPECT_EQ(0ul, heap->stats_collector()->allocated_memory_size() & + (kPageSize - 1)); + } + } + + { + DynamicallySizedObject* alloc32b( + DynamicallySizedObject::Create(GetAllocationHandle(), 32)); + memset(alloc32b, 40, 32); + DynamicallySizedObject* alloc64b( + DynamicallySizedObject::Create(GetAllocationHandle(), 64)); + memset(alloc64b, 27, 64); + EXPECT_TRUE(alloc32b != alloc64b); + + total += 96; + EXPECT_EQ(base_level + total, + ObjectSizeCounter().GetSize(&heap->raw_heap())); + if (test_pages_allocated) { + EXPECT_EQ(0ul, heap->stats_collector()->allocated_memory_size() & + (kPageSize - 1)); + } + } + + PreciseGC(); + total -= 96; + if (test_pages_allocated) { + EXPECT_EQ(0ul, heap->stats_collector()->allocated_memory_size() & + (kPageSize - 1)); + } + + // Clear the persistent, so that the big area will be garbage collected. + big_area.Release(); + PreciseGC(); + + total -= big; + EXPECT_EQ(base_level + total, ObjectSizeCounter().GetSize(&heap->raw_heap())); + if (test_pages_allocated) { + EXPECT_EQ(0ul, heap->stats_collector()->allocated_memory_size() & + (kPageSize - 1)); + } + + EXPECT_EQ(base_level + total, ObjectSizeCounter().GetSize(&heap->raw_heap())); + if (test_pages_allocated) { + EXPECT_EQ(0ul, heap->stats_collector()->allocated_memory_size() & + (kPageSize - 1)); + } + + for (size_t i = 0; i < persistent_count; i++) { + delete persistents[i]; + persistents[i] = nullptr; + } +} + +} // namespace internal +} // namespace cppgc diff --git a/deps/v8/test/unittests/heap/cppgc/write-barrier-unittest.cc b/deps/v8/test/unittests/heap/cppgc/write-barrier-unittest.cc index ba340743ea..605029dee3 100644 --- a/deps/v8/test/unittests/heap/cppgc/write-barrier-unittest.cc +++ b/deps/v8/test/unittests/heap/cppgc/write-barrier-unittest.cc @@ -54,7 +54,7 @@ class V8_NODISCARD ExpectWriteBarrierFires final EXPECT_TRUE(marking_worklist_.IsGlobalEmpty()); EXPECT_TRUE(write_barrier_worklist_.IsGlobalEmpty()); for (void* object : objects) { - headers_.push_back(&HeapObjectHeader::FromPayload(object)); + headers_.push_back(&HeapObjectHeader::FromObject(object)); EXPECT_FALSE(headers_.back()->IsMarked()); } } @@ -71,7 +71,8 @@ class V8_NODISCARD ExpectWriteBarrierFires final { HeapObjectHeader* item; while (write_barrier_worklist_.Pop(&item)) { - auto pos = std::find(objects_.begin(), objects_.end(), item->Payload()); + auto pos = + std::find(objects_.begin(), objects_.end(), item->ObjectStart()); if (pos != objects_.end()) objects_.erase(pos); } } @@ -104,7 +105,7 @@ class V8_NODISCARD ExpectNoWriteBarrierFires final EXPECT_TRUE(marking_worklist_.IsGlobalEmpty()); EXPECT_TRUE(write_barrier_worklist_.IsGlobalEmpty()); for (void* object : objects) { - auto* header = &HeapObjectHeader::FromPayload(object); + auto* header = &HeapObjectHeader::FromObject(object); headers_.emplace_back(header, header->IsMarked()); } } @@ -131,7 +132,7 @@ class GCed : public GarbageCollected<GCed> { void Trace(cppgc::Visitor* v) const { v->Trace(next_); } bool IsMarked() const { - return HeapObjectHeader::FromPayload(this).IsMarked(); + return HeapObjectHeader::FromObject(this).IsMarked(); } void set_next(GCed* next) { next_ = next; } @@ -201,7 +202,7 @@ TEST_F(NoWriteBarrierTest, BailoutWhenMarkingIsOff) { TEST_F(WriteBarrierTest, BailoutIfMarked) { auto* object1 = MakeGarbageCollected<GCed>(GetAllocationHandle()); auto* object2 = MakeGarbageCollected<GCed>(GetAllocationHandle()); - EXPECT_TRUE(HeapObjectHeader::FromPayload(object1).TryMarkAtomic()); + EXPECT_TRUE(HeapObjectHeader::FromObject(object1).TryMarkAtomic()); { ExpectNoWriteBarrierFires scope(marker(), {object1}); object2->set_next(object1); @@ -213,7 +214,7 @@ TEST_F(WriteBarrierTest, MemberInitializingStoreNoBarrier) { { ExpectNoWriteBarrierFires scope(marker(), {object1}); auto* object2 = MakeGarbageCollected<GCed>(GetAllocationHandle(), object1); - HeapObjectHeader& object2_header = HeapObjectHeader::FromPayload(object2); + HeapObjectHeader& object2_header = HeapObjectHeader::FromObject(object2); EXPECT_FALSE(object2_header.IsMarked()); } } @@ -313,7 +314,7 @@ TEST_F(WriteBarrierTest, NoWriteBarrierOnMarkedMixinApplication) { ParentWithMixinPointer* parent = MakeGarbageCollected<ParentWithMixinPointer>(GetAllocationHandle()); auto* child = MakeGarbageCollected<Child>(GetAllocationHandle()); - EXPECT_TRUE(HeapObjectHeader::FromPayload(child).TryMarkAtomic()); + EXPECT_TRUE(HeapObjectHeader::FromObject(child).TryMarkAtomic()); Mixin* mixin = static_cast<Mixin*>(child); EXPECT_NE(static_cast<void*>(child), static_cast<void*>(mixin)); { @@ -367,7 +368,7 @@ TEST_F(WriteBarrierTest, DijkstraWriteBarrierTriggersWhenMarkingIsOn) { TEST_F(WriteBarrierTest, DijkstraWriteBarrierBailoutIfMarked) { auto* object1 = MakeGarbageCollected<GCed>(GetAllocationHandle()); auto* object2 = MakeGarbageCollected<GCed>(GetAllocationHandle(), object1); - EXPECT_TRUE(HeapObjectHeader::FromPayload(object1).TryMarkAtomic()); + EXPECT_TRUE(HeapObjectHeader::FromObject(object1).TryMarkAtomic()); { ExpectNoWriteBarrierFires scope(marker(), {object1}); WriteBarrierParams params; @@ -387,7 +388,7 @@ struct InlinedObject { Member<GCed> ref; }; -class GCedWithInlinedArray : public GarbageCollected<GCed> { +class GCedWithInlinedArray : public GarbageCollected<GCedWithInlinedArray> { public: static constexpr size_t kNumReferences = 4; @@ -430,7 +431,7 @@ TEST_F(WriteBarrierTest, DijkstraWriteBarrierRangeBailoutIfMarked) { auto* object1 = MakeGarbageCollected<GCed>(GetAllocationHandle()); auto* object2 = MakeGarbageCollected<GCedWithInlinedArray>( GetAllocationHandle(), object1); - EXPECT_TRUE(HeapObjectHeader::FromPayload(object1).TryMarkAtomic()); + EXPECT_TRUE(HeapObjectHeader::FromObject(object1).TryMarkAtomic()); { ExpectNoWriteBarrierFires scope(marker(), {object1}); WriteBarrierParams params; @@ -450,7 +451,7 @@ TEST_F(WriteBarrierTest, SteeleWriteBarrierTriggersWhenMarkingIsOn) { auto* object2 = MakeGarbageCollected<GCed>(GetAllocationHandle(), object1); { ExpectWriteBarrierFires scope(marker(), {object1}); - EXPECT_TRUE(HeapObjectHeader::FromPayload(object1).TryMarkAtomic()); + EXPECT_TRUE(HeapObjectHeader::FromObject(object1).TryMarkAtomic()); WriteBarrierParams params; EXPECT_EQ(WriteBarrierType::kMarking, HeapConsistency::GetWriteBarrierType( diff --git a/deps/v8/test/unittests/heap/heap-unittest.cc b/deps/v8/test/unittests/heap/heap-unittest.cc index 2446e14682..9247109930 100644 --- a/deps/v8/test/unittests/heap/heap-unittest.cc +++ b/deps/v8/test/unittests/heap/heap-unittest.cc @@ -145,11 +145,16 @@ TEST_F(HeapTest, HeapLayout) { "}" "ar.push(Array(32 * 1024 * 1024));"); + Address cage_base = i_isolate()->cage_base(); + EXPECT_TRUE(IsAligned(cage_base, size_t{4} * GB)); + +#ifdef V8_COMPRESS_POINTERS_IN_ISOLATE_CAGE Address isolate_root = i_isolate()->isolate_root(); - EXPECT_TRUE(IsAligned(isolate_root, size_t{4} * GB)); + EXPECT_EQ(cage_base, isolate_root); +#endif // Check that all memory chunks belong this region. - base::AddressRegion heap_reservation(isolate_root, size_t{4} * GB); + base::AddressRegion heap_reservation(cage_base, size_t{4} * GB); SafepointScope scope(i_isolate()->heap()); OldGenerationMemoryChunkIterator iter(i_isolate()->heap()); diff --git a/deps/v8/test/unittests/heap/unified-heap-snapshot-unittest.cc b/deps/v8/test/unittests/heap/unified-heap-snapshot-unittest.cc index f58569eb10..88b81eb17e 100644 --- a/deps/v8/test/unittests/heap/unified-heap-snapshot-unittest.cc +++ b/deps/v8/test/unittests/heap/unified-heap-snapshot-unittest.cc @@ -139,11 +139,8 @@ TEST_F(UnifiedHeapSnapshotTest, RetainedByCppRoot) { cppgc::MakeGarbageCollected<GCed>(allocation_handle()); const v8::HeapSnapshot* snapshot = TakeHeapSnapshot(); EXPECT_TRUE(IsValidSnapshot(snapshot)); - EXPECT_TRUE( - ContainsRetainingPath(*snapshot, { - kExpectedCppRootsName, // NOLINT - GetExpectedName<GCed>() // NOLINT - })); + EXPECT_TRUE(ContainsRetainingPath( + *snapshot, {kExpectedCppRootsName, GetExpectedName<GCed>()})); } TEST_F(UnifiedHeapSnapshotTest, RetainedByCppCrossThreadRoot) { @@ -152,10 +149,7 @@ TEST_F(UnifiedHeapSnapshotTest, RetainedByCppCrossThreadRoot) { const v8::HeapSnapshot* snapshot = TakeHeapSnapshot(); EXPECT_TRUE(IsValidSnapshot(snapshot)); EXPECT_TRUE(ContainsRetainingPath( - *snapshot, { - kExpectedCppCrossThreadRootsName, // NOLINT - GetExpectedName<GCed>() // NOLINT - })); + *snapshot, {kExpectedCppCrossThreadRootsName, GetExpectedName<GCed>()})); } TEST_F(UnifiedHeapSnapshotTest, RetainingUnnamedType) { @@ -168,10 +162,8 @@ TEST_F(UnifiedHeapSnapshotTest, RetainingUnnamedType) { *snapshot, {kExpectedCppRootsName, cppgc::NameProvider::kHiddenName})); } else { EXPECT_TRUE(ContainsRetainingPath( - *snapshot, { - kExpectedCppRootsName, // NOLINT - GetExpectedName<BaseWithoutName>() // NOLINT - })); + *snapshot, + {kExpectedCppRootsName, GetExpectedName<BaseWithoutName>()})); } } @@ -183,11 +175,8 @@ TEST_F(UnifiedHeapSnapshotTest, RetainingNamedThroughUnnamed) { const v8::HeapSnapshot* snapshot = TakeHeapSnapshot(); EXPECT_TRUE(IsValidSnapshot(snapshot)); EXPECT_TRUE(ContainsRetainingPath( - *snapshot, { - kExpectedCppRootsName, // NOLINT - GetExpectedName<BaseWithoutName>(), // NOLINT - GetExpectedName<GCed>() // NOLINT - })); + *snapshot, {kExpectedCppRootsName, GetExpectedName<BaseWithoutName>(), + GetExpectedName<GCed>()})); } TEST_F(UnifiedHeapSnapshotTest, PendingCallStack) { @@ -212,14 +201,10 @@ TEST_F(UnifiedHeapSnapshotTest, PendingCallStack) { cppgc::Persistent<BaseWithoutName> holder(second); const v8::HeapSnapshot* snapshot = TakeHeapSnapshot(); EXPECT_TRUE(IsValidSnapshot(snapshot)); - EXPECT_TRUE( - ContainsRetainingPath(*snapshot, - { - kExpectedCppRootsName, // NOLINT - GetExpectedName<BaseWithoutName>(), // NOLINT - GetExpectedName<BaseWithoutName>(), // NOLINT - GetExpectedName<GCed>() // NOLINT - })); + EXPECT_TRUE(ContainsRetainingPath( + *snapshot, + {kExpectedCppRootsName, GetExpectedName<BaseWithoutName>(), + GetExpectedName<BaseWithoutName>(), GetExpectedName<GCed>()})); } TEST_F(UnifiedHeapSnapshotTest, ReferenceToFinishedSCC) { @@ -250,15 +235,11 @@ TEST_F(UnifiedHeapSnapshotTest, ReferenceToFinishedSCC) { cppgc::Persistent<BaseWithoutName> holder(first); const v8::HeapSnapshot* snapshot = TakeHeapSnapshot(); EXPECT_TRUE(IsValidSnapshot(snapshot)); - EXPECT_TRUE( - ContainsRetainingPath(*snapshot, - { - kExpectedCppRootsName, // NOLINT - GetExpectedName<BaseWithoutName>(), // NOLINT - GetExpectedName<BaseWithoutName>(), // NOLINT - GetExpectedName<BaseWithoutName>(), // NOLINT - GetExpectedName<GCed>() // NOLINT - })); + EXPECT_TRUE(ContainsRetainingPath( + *snapshot, + {kExpectedCppRootsName, GetExpectedName<BaseWithoutName>(), + GetExpectedName<BaseWithoutName>(), GetExpectedName<BaseWithoutName>(), + GetExpectedName<GCed>()})); } namespace { @@ -344,13 +325,9 @@ TEST_F(UnifiedHeapSnapshotTest, JSReferenceForcesVisibleObject) { testing_scope, allocation_handle(), "LeafJSObject"); const v8::HeapSnapshot* snapshot = TakeHeapSnapshot(); EXPECT_TRUE(IsValidSnapshot(snapshot)); - EXPECT_TRUE( - ContainsRetainingPath(*snapshot, - { - kExpectedCppRootsName, // NOLINT - GetExpectedName<GCedWithJSRef>(), // NOLINT - "LeafJSObject" // NOLINT - })); + EXPECT_TRUE(ContainsRetainingPath( + *snapshot, {kExpectedCppRootsName, GetExpectedName<GCedWithJSRef>(), + "LeafJSObject"})); } TEST_F(UnifiedHeapSnapshotTest, MergedWrapperNode) { @@ -378,12 +355,9 @@ TEST_F(UnifiedHeapSnapshotTest, MergedWrapperNode) { EXPECT_TRUE(IsValidSnapshot(snapshot)); EXPECT_TRUE(ContainsRetainingPath( *snapshot, - { - kExpectedCppRootsName, // NOLINT - GetExpectedName<GCedWithJSRef>(), // NOLINT - // GCedWithJSRef is merged into MergedObject, replacing its name. - "NextObject" // NOLINT - })); + {kExpectedCppRootsName, GetExpectedName<GCedWithJSRef>(), + // GCedWithJSRef is merged into MergedObject, replacing its name. + "NextObject"})); const size_t js_size = Utils::OpenHandle(*wrapper_object)->Size(); #if CPPGC_SUPPORTS_OBJECT_NAMES const size_t cpp_size = @@ -447,11 +421,10 @@ TEST_F(UnifiedHeapSnapshotTest, NoTriggerForClassIdZero) { EXPECT_EQ(0u, DetachednessHandler::callback_count); EXPECT_TRUE(IsValidSnapshot(snapshot)); EXPECT_TRUE( - ContainsRetainingPath(*snapshot, - { - kExpectedCppRootsName, // NOLINT - GetExpectedName<GCedWithJSRef>(), // NOLINT - })); + ContainsRetainingPath(*snapshot, { + kExpectedCppRootsName, + GetExpectedName<GCedWithJSRef>(), + })); ForEachEntryWithName( snapshot, GetExpectedName<GCedWithJSRef>(), [](const HeapEntry& entry) { EXPECT_EQ(kExpectedDetachedValueForUnknown, entry.detachedness()); @@ -473,11 +446,10 @@ TEST_F(UnifiedHeapSnapshotTest, TriggerDetachednessCallbackSettingAttached) { EXPECT_EQ(1u, DetachednessHandler::callback_count); EXPECT_TRUE(IsValidSnapshot(snapshot)); EXPECT_TRUE( - ContainsRetainingPath(*snapshot, - { - kExpectedCppRootsName, // NOLINT - GetExpectedName<GCedWithJSRef>(), // NOLINT - })); + ContainsRetainingPath(*snapshot, { + kExpectedCppRootsName, + GetExpectedName<GCedWithJSRef>(), + })); ForEachEntryWithName( snapshot, GetExpectedName<GCedWithJSRef>(), [](const HeapEntry& entry) { EXPECT_EQ(kExpectedDetachedValueForAttached, entry.detachedness()); @@ -499,11 +471,10 @@ TEST_F(UnifiedHeapSnapshotTest, TriggerDetachednessCallbackSettingDetached) { EXPECT_EQ(1u, DetachednessHandler::callback_count); EXPECT_TRUE(IsValidSnapshot(snapshot)); EXPECT_TRUE( - ContainsRetainingPath(*snapshot, - { - kExpectedCppRootsName, // NOLINT - GetExpectedName<GCedWithJSRef>(), // NOLINT - })); + ContainsRetainingPath(*snapshot, { + kExpectedCppRootsName, + GetExpectedName<GCedWithJSRef>(), + })); ForEachEntryWithName( snapshot, GetExpectedName<GCedWithJSRef>(), [](const HeapEntry& entry) { EXPECT_EQ(kExpectedDetachedValueForDetached, entry.detachedness()); diff --git a/deps/v8/test/unittests/heap/unified-heap-unittest.cc b/deps/v8/test/unittests/heap/unified-heap-unittest.cc index 404cf2e1a0..82f81cf178 100644 --- a/deps/v8/test/unittests/heap/unified-heap-unittest.cc +++ b/deps/v8/test/unittests/heap/unified-heap-unittest.cc @@ -2,15 +2,20 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include <memory> + #include "include/cppgc/allocation.h" #include "include/cppgc/garbage-collected.h" #include "include/cppgc/persistent.h" #include "include/cppgc/platform.h" #include "include/cppgc/testing.h" +#include "include/libplatform/libplatform.h" #include "include/v8-cppgc.h" #include "include/v8.h" #include "src/api/api-inl.h" +#include "src/base/platform/time.h" #include "src/heap/cppgc-js/cpp-heap.h" +#include "src/heap/cppgc/heap-object-header.h" #include "src/heap/cppgc/sweeper.h" #include "src/objects/objects-inl.h" #include "test/unittests/heap/heap-utils.h" @@ -66,6 +71,7 @@ TEST_F(UnifiedHeapTest, FindingV8ToBlinkReference) { } TEST_F(UnifiedHeapTest, WriteBarrierV8ToCppReference) { + if (!FLAG_incremental_marking) return; v8::HandleScope scope(v8_isolate()); v8::Local<v8::Context> context = v8::Context::New(v8_isolate()); v8::Context::Scope context_scope(context); @@ -92,6 +98,7 @@ TEST_F(UnifiedHeapTest, WriteBarrierV8ToCppReference) { } TEST_F(UnifiedHeapTest, WriteBarrierCppToV8Reference) { + if (!FLAG_incremental_marking) return; v8::HandleScope scope(v8_isolate()); v8::Local<v8::Context> context = v8::Context::New(v8_isolate()); v8::Context::Scope context_scope(context); @@ -189,3 +196,140 @@ TEST_F(UnifiedHeapDetachedTest, StandaloneTestingHeap) { } // namespace internal } // namespace v8 + +namespace cppgc { + +class CustomSpaceForTest : public CustomSpace<CustomSpaceForTest> { + public: + static constexpr size_t kSpaceIndex = 0; +}; + +constexpr size_t CustomSpaceForTest::kSpaceIndex; + +} // namespace cppgc + +namespace v8 { +namespace internal { + +namespace { + +class StatisticsReceiver final : public CustomSpaceStatisticsReceiver { + public: + static size_t num_calls_; + + StatisticsReceiver(cppgc::CustomSpaceIndex space_index, size_t bytes) + : expected_space_index_(space_index), expected_bytes_(bytes) {} + + void AllocatedBytes(cppgc::CustomSpaceIndex space_index, size_t bytes) final { + EXPECT_EQ(expected_space_index_.value, space_index.value); + EXPECT_EQ(expected_bytes_, bytes); + ++num_calls_; + } + + private: + const cppgc::CustomSpaceIndex expected_space_index_; + const size_t expected_bytes_; +}; + +size_t StatisticsReceiver::num_calls_ = 0u; + +class GCed final : public cppgc::GarbageCollected<GCed> { + public: + ~GCed() { + // Force a finalizer to guarantee sweeping can't finish without the main + // thread. + USE(data_); + } + static size_t GetAllocatedSize() { + return sizeof(GCed) + sizeof(cppgc::internal::HeapObjectHeader); + } + void Trace(cppgc::Visitor*) const {} + + private: + char data_[KB]; +}; + +} // namespace +} // namespace internal +} // namespace v8 + +namespace cppgc { +template <> +struct SpaceTrait<v8::internal::GCed> { + using Space = CustomSpaceForTest; +}; + +} // namespace cppgc + +namespace v8 { +namespace internal { + +namespace { + +class UnifiedHeapWithCustomSpaceTest : public UnifiedHeapTest { + public: + static std::vector<std::unique_ptr<cppgc::CustomSpaceBase>> + GetCustomSpaces() { + std::vector<std::unique_ptr<cppgc::CustomSpaceBase>> custom_spaces; + custom_spaces.emplace_back(std::make_unique<cppgc::CustomSpaceForTest>()); + return custom_spaces; + } + UnifiedHeapWithCustomSpaceTest() : UnifiedHeapTest(GetCustomSpaces()) {} +}; + +} // namespace + +TEST_F(UnifiedHeapWithCustomSpaceTest, CollectCustomSpaceStatisticsAtLastGC) { + StatisticsReceiver::num_calls_ = 0; + // Initial state. + cpp_heap().CollectCustomSpaceStatisticsAtLastGC( + {cppgc::CustomSpaceForTest::kSpaceIndex}, + std::make_unique<StatisticsReceiver>( + cppgc::CustomSpaceForTest::kSpaceIndex, 0u)); + EXPECT_EQ(1u, StatisticsReceiver::num_calls_); + // State unpdated only after GC. + cppgc::Persistent<GCed> live_obj = + cppgc::MakeGarbageCollected<GCed>(allocation_handle()); + cppgc::MakeGarbageCollected<GCed>(allocation_handle()); + cpp_heap().CollectCustomSpaceStatisticsAtLastGC( + {cppgc::CustomSpaceForTest::kSpaceIndex}, + std::make_unique<StatisticsReceiver>( + cppgc::CustomSpaceForTest::kSpaceIndex, 0u)); + EXPECT_EQ(2u, StatisticsReceiver::num_calls_); + // Check state after GC. + CollectGarbageWithoutEmbedderStack(cppgc::Heap::SweepingType::kAtomic); + cpp_heap().CollectCustomSpaceStatisticsAtLastGC( + {cppgc::CustomSpaceForTest::kSpaceIndex}, + std::make_unique<StatisticsReceiver>( + cppgc::CustomSpaceForTest::kSpaceIndex, GCed::GetAllocatedSize())); + EXPECT_EQ(3u, StatisticsReceiver::num_calls_); + // State callback delayed during sweeping. + cppgc::Persistent<GCed> another_live_obj = + cppgc::MakeGarbageCollected<GCed>(allocation_handle()); + while (v8::platform::PumpMessageLoop( + V8::GetCurrentPlatform(), v8_isolate(), + v8::platform::MessageLoopBehavior::kDoNotWait)) { + // Empty the message loop to avoid finalizing garbage collections through + // unrelated tasks. + } + CollectGarbageWithoutEmbedderStack( + cppgc::Heap::SweepingType::kIncrementalAndConcurrent); + DCHECK(cpp_heap().sweeper().IsSweepingInProgress()); + cpp_heap().CollectCustomSpaceStatisticsAtLastGC( + {cppgc::CustomSpaceForTest::kSpaceIndex}, + std::make_unique<StatisticsReceiver>( + cppgc::CustomSpaceForTest::kSpaceIndex, + 2 * GCed::GetAllocatedSize())); + while (v8::platform::PumpMessageLoop( + V8::GetCurrentPlatform(), v8_isolate(), + v8::platform::MessageLoopBehavior::kWaitForWork)) { + if (3 < StatisticsReceiver::num_calls_) { + EXPECT_FALSE(cpp_heap().sweeper().IsSweepingInProgress()); + break; + } + } + EXPECT_EQ(4u, StatisticsReceiver::num_calls_); +} + +} // namespace internal +} // namespace v8 diff --git a/deps/v8/test/unittests/heap/unified-heap-utils.cc b/deps/v8/test/unittests/heap/unified-heap-utils.cc index 631695b7a5..01b46c03fb 100644 --- a/deps/v8/test/unittests/heap/unified-heap-utils.cc +++ b/deps/v8/test/unittests/heap/unified-heap-utils.cc @@ -15,9 +15,14 @@ namespace v8 { namespace internal { UnifiedHeapTest::UnifiedHeapTest() + : UnifiedHeapTest(std::vector<std::unique_ptr<cppgc::CustomSpaceBase>>()) {} + +UnifiedHeapTest::UnifiedHeapTest( + std::vector<std::unique_ptr<cppgc::CustomSpaceBase>> custom_spaces) : cpp_heap_(v8::CppHeap::Create( V8::GetCurrentPlatform(), - CppHeapCreateParams{{}, WrapperHelper::DefaultWrapperDescriptor()})) { + CppHeapCreateParams{std::move(custom_spaces), + WrapperHelper::DefaultWrapperDescriptor()})) { isolate()->heap()->AttachCppHeap(cpp_heap_.get()); } diff --git a/deps/v8/test/unittests/heap/unified-heap-utils.h b/deps/v8/test/unittests/heap/unified-heap-utils.h index 8df67aa7a4..c0f7481f77 100644 --- a/deps/v8/test/unittests/heap/unified-heap-utils.h +++ b/deps/v8/test/unittests/heap/unified-heap-utils.h @@ -21,6 +21,8 @@ class CppHeap; class UnifiedHeapTest : public TestWithHeapInternals { public: UnifiedHeapTest(); + explicit UnifiedHeapTest( + std::vector<std::unique_ptr<cppgc::CustomSpaceBase>>); ~UnifiedHeapTest() override = default; void CollectGarbageWithEmbedderStack(cppgc::Heap::SweepingType sweeping_type = diff --git a/deps/v8/test/unittests/heap/unmapper-unittest.cc b/deps/v8/test/unittests/heap/unmapper-unittest.cc index cbabfe4773..115e8bb44f 100644 --- a/deps/v8/test/unittests/heap/unmapper-unittest.cc +++ b/deps/v8/test/unittests/heap/unmapper-unittest.cc @@ -239,11 +239,22 @@ class SequentialUnmapperTest : public TestWithIsolate { SetPlatformPageAllocatorForTesting(tracking_page_allocator_)); old_flag_ = i::FLAG_concurrent_sweeping; i::FLAG_concurrent_sweeping = false; +#ifdef V8_COMPRESS_POINTERS_IN_SHARED_CAGE + // Reinitialize the process-wide pointer cage so it can pick up the + // TrackingPageAllocator. + IsolateAllocator::FreeProcessWidePtrComprCageForTesting(); + IsolateAllocator::InitializeOncePerProcess(); +#endif TestWithIsolate::SetUpTestCase(); } static void TearDownTestCase() { TestWithIsolate::TearDownTestCase(); +#ifdef V8_COMPRESS_POINTERS_IN_SHARED_CAGE + // Free the process-wide cage reservation, otherwise the pages won't be + // freed until process teardown. + IsolateAllocator::FreeProcessWidePtrComprCageForTesting(); +#endif i::FLAG_concurrent_sweeping = old_flag_; CHECK(tracking_page_allocator_->IsEmpty()); @@ -275,6 +286,7 @@ bool SequentialUnmapperTest::old_flag_; // See v8:5945. TEST_F(SequentialUnmapperTest, UnmapOnTeardownAfterAlreadyFreeingPooled) { + if (FLAG_enable_third_party_heap) return; Page* page = allocator()->AllocatePage( MemoryChunkLayout::AllocatableMemoryInDataPage(), static_cast<PagedSpace*>(heap()->old_space()), @@ -303,6 +315,7 @@ TEST_F(SequentialUnmapperTest, UnmapOnTeardownAfterAlreadyFreeingPooled) { // See v8:5945. TEST_F(SequentialUnmapperTest, UnmapOnTeardown) { + if (FLAG_enable_third_party_heap) return; Page* page = allocator()->AllocatePage( MemoryChunkLayout::AllocatableMemoryInDataPage(), static_cast<PagedSpace*>(heap()->old_space()), diff --git a/deps/v8/test/unittests/interpreter/bytecode-array-builder-unittest.cc b/deps/v8/test/unittests/interpreter/bytecode-array-builder-unittest.cc index e027f12b78..c876f3e242 100644 --- a/deps/v8/test/unittests/interpreter/bytecode-array-builder-unittest.cc +++ b/deps/v8/test/unittests/interpreter/bytecode-array-builder-unittest.cc @@ -95,9 +95,9 @@ TEST_F(BytecodeArrayBuilderTest, AllBytecodesGenerated) { builder.MoveRegister(reg, wide); FeedbackSlot load_global_slot = - feedback_spec.AddLoadGlobalICSlot(NOT_INSIDE_TYPEOF); + feedback_spec.AddLoadGlobalICSlot(TypeofMode::kNotInside); FeedbackSlot load_global_typeof_slot = - feedback_spec.AddLoadGlobalICSlot(INSIDE_TYPEOF); + feedback_spec.AddLoadGlobalICSlot(TypeofMode::kInside); FeedbackSlot sloppy_store_global_slot = feedback_spec.AddStoreGlobalICSlot(LanguageMode::kSloppy); FeedbackSlot load_slot = feedback_spec.AddLoadICSlot(); @@ -117,10 +117,8 @@ TEST_F(BytecodeArrayBuilderTest, AllBytecodesGenerated) { // Emit global load / store operations. const AstRawString* name = ast_factory.GetOneByteString("var_name"); - builder - .LoadGlobal(name, load_global_slot.ToInt(), TypeofMode::NOT_INSIDE_TYPEOF) - .LoadGlobal(name, load_global_typeof_slot.ToInt(), - TypeofMode::INSIDE_TYPEOF) + builder.LoadGlobal(name, load_global_slot.ToInt(), TypeofMode::kNotInside) + .LoadGlobal(name, load_global_typeof_slot.ToInt(), TypeofMode::kInside) .StoreGlobal(name, sloppy_store_global_slot.ToInt()); // Emit context operations. @@ -162,8 +160,8 @@ TEST_F(BytecodeArrayBuilderTest, AllBytecodesGenerated) { builder.GetIterator(reg, load_slot.ToInt(), call_slot.ToInt()); // Emit load / store lookup slots. - builder.LoadLookupSlot(name, TypeofMode::NOT_INSIDE_TYPEOF) - .LoadLookupSlot(name, TypeofMode::INSIDE_TYPEOF) + builder.LoadLookupSlot(name, TypeofMode::kNotInside) + .LoadLookupSlot(name, TypeofMode::kInside) .StoreLookupSlot(name, LanguageMode::kSloppy, LookupHoistingMode::kNormal) .StoreLookupSlot(name, LanguageMode::kSloppy, LookupHoistingMode::kLegacySloppy) @@ -171,12 +169,12 @@ TEST_F(BytecodeArrayBuilderTest, AllBytecodesGenerated) { LookupHoistingMode::kNormal); // Emit load / store lookup slots with context fast paths. - builder.LoadLookupContextSlot(name, TypeofMode::NOT_INSIDE_TYPEOF, 1, 0) - .LoadLookupContextSlot(name, TypeofMode::INSIDE_TYPEOF, 1, 0); + builder.LoadLookupContextSlot(name, TypeofMode::kNotInside, 1, 0) + .LoadLookupContextSlot(name, TypeofMode::kInside, 1, 0); // Emit load / store lookup slots with global fast paths. - builder.LoadLookupGlobalSlot(name, TypeofMode::NOT_INSIDE_TYPEOF, 1, 0) - .LoadLookupGlobalSlot(name, TypeofMode::INSIDE_TYPEOF, 1, 0); + builder.LoadLookupGlobalSlot(name, TypeofMode::kNotInside, 1, 0) + .LoadLookupGlobalSlot(name, TypeofMode::kInside, 1, 0); // Emit closure operations. builder.CreateClosure(0, 1, static_cast<int>(AllocationType::kYoung)); @@ -380,8 +378,8 @@ TEST_F(BytecodeArrayBuilderTest, AllBytecodesGenerated) { .StoreContextSlot(reg, 1024, 0); // Emit wide load / store lookup slots. - builder.LoadLookupSlot(wide_name, TypeofMode::NOT_INSIDE_TYPEOF) - .LoadLookupSlot(wide_name, TypeofMode::INSIDE_TYPEOF) + builder.LoadLookupSlot(wide_name, TypeofMode::kNotInside) + .LoadLookupSlot(wide_name, TypeofMode::kInside) .StoreLookupSlot(wide_name, LanguageMode::kSloppy, LookupHoistingMode::kNormal) .StoreLookupSlot(wide_name, LanguageMode::kSloppy, diff --git a/deps/v8/test/unittests/interpreter/bytecode-array-iterator-unittest.cc b/deps/v8/test/unittests/interpreter/bytecode-array-iterator-unittest.cc index 88e87f7e94..1060e4ee95 100644 --- a/deps/v8/test/unittests/interpreter/bytecode-array-iterator-unittest.cc +++ b/deps/v8/test/unittests/interpreter/bytecode-array-iterator-unittest.cc @@ -44,7 +44,7 @@ TEST_F(BytecodeArrayIteratorTest, IteratesBytecodeArray) { uint32_t load_feedback_slot = feedback_spec.AddLoadICSlot().ToInt(); uint32_t forin_feedback_slot = feedback_spec.AddForInSlot().ToInt(); uint32_t load_global_feedback_slot = - feedback_spec.AddLoadGlobalICSlot(TypeofMode::NOT_INSIDE_TYPEOF).ToInt(); + feedback_spec.AddLoadGlobalICSlot(TypeofMode::kNotInside).ToInt(); builder.LoadLiteral(heap_num_0) .StoreAccumulatorInRegister(reg_0) @@ -66,8 +66,7 @@ TEST_F(BytecodeArrayIteratorTest, IteratesBytecodeArray) { .ForInPrepare(triple, forin_feedback_slot) .CallRuntime(Runtime::kLoadIC_Miss, reg_0) .Debugger() - .LoadGlobal(name, load_global_feedback_slot, - TypeofMode::NOT_INSIDE_TYPEOF) + .LoadGlobal(name, load_global_feedback_slot, TypeofMode::kNotInside) .Return(); // Test iterator sees the expected output from the builder. diff --git a/deps/v8/test/unittests/logging/counters-unittest.cc b/deps/v8/test/unittests/logging/counters-unittest.cc index 468ca4fc4e..3558f745f8 100644 --- a/deps/v8/test/unittests/logging/counters-unittest.cc +++ b/deps/v8/test/unittests/logging/counters-unittest.cc @@ -8,7 +8,6 @@ #include "src/base/atomic-utils.h" #include "src/base/platform/time.h" #include "src/handles/handles-inl.h" -#include "src/logging/counters-inl.h" #include "src/logging/counters.h" #include "src/objects/objects-inl.h" #include "src/tracing/tracing-category-observer.h" @@ -46,104 +45,6 @@ class AggregatedMemoryHistogramTest : public ::testing::Test { MockHistogram mock_; }; -static base::TimeTicks runtime_call_stats_test_time_ = base::TimeTicks(); -// Time source used for the RuntimeCallTimer during tests. We cannot rely on -// the native timer since it's too unpredictable on the build bots. -static base::TimeTicks RuntimeCallStatsTestNow() { - return runtime_call_stats_test_time_; -} - -class RuntimeCallStatsTest : public TestWithNativeContext { - public: - RuntimeCallStatsTest() { - TracingFlags::runtime_stats.store( - v8::tracing::TracingCategoryObserver::ENABLED_BY_NATIVE, - std::memory_order_relaxed); - // We need to set {time_} to a non-zero value since it would otherwise - // cause runtime call timers to think they are uninitialized. - Sleep(1); - stats()->Reset(); - } - - ~RuntimeCallStatsTest() override { - // Disable RuntimeCallStats before tearing down the isolate to prevent - // printing the tests table. Comment the following line for debugging - // purposes. - TracingFlags::runtime_stats.store(0, std::memory_order_relaxed); - } - - static void SetUpTestCase() { - TestWithIsolate::SetUpTestCase(); - // Use a custom time source to precisly emulate system time. - RuntimeCallTimer::Now = &RuntimeCallStatsTestNow; - } - - static void TearDownTestCase() { - TestWithIsolate::TearDownTestCase(); - // Restore the original time source. - RuntimeCallTimer::Now = &base::TimeTicks::HighResolutionNow; - } - - RuntimeCallStats* stats() { - return isolate()->counters()->runtime_call_stats(); - } - - RuntimeCallCounterId counter_id() { - return RuntimeCallCounterId::kTestCounter1; - } - - RuntimeCallCounterId counter_id2() { - return RuntimeCallCounterId::kTestCounter2; - } - - RuntimeCallCounterId counter_id3() { - return RuntimeCallCounterId::kTestCounter3; - } - - RuntimeCallCounter* js_counter() { - return stats()->GetCounter(RuntimeCallCounterId::kJS_Execution); - } - RuntimeCallCounter* counter() { return stats()->GetCounter(counter_id()); } - RuntimeCallCounter* counter2() { return stats()->GetCounter(counter_id2()); } - RuntimeCallCounter* counter3() { return stats()->GetCounter(counter_id3()); } - - void Sleep(int64_t microseconds) { - base::TimeDelta delta = base::TimeDelta::FromMicroseconds(microseconds); - time_ += delta; - runtime_call_stats_test_time_ = - base::TimeTicks::FromInternalValue(time_.InMicroseconds()); - } - - private: - base::TimeDelta time_; -}; - -// Temporarily use the native time to modify the test time. -class V8_NODISCARD ElapsedTimeScope { - public: - explicit ElapsedTimeScope(RuntimeCallStatsTest* test) : test_(test) { - timer_.Start(); - } - ~ElapsedTimeScope() { test_->Sleep(timer_.Elapsed().InMicroseconds()); } - - private: - base::ElapsedTimer timer_; - RuntimeCallStatsTest* test_; -}; - -// Temporarily use the default time source. -class V8_NODISCARD NativeTimeScope { - public: - NativeTimeScope() { - CHECK_EQ(RuntimeCallTimer::Now, &RuntimeCallStatsTestNow); - RuntimeCallTimer::Now = &base::TimeTicks::HighResolutionNow; - } - ~NativeTimeScope() { - CHECK_EQ(RuntimeCallTimer::Now, &base::TimeTicks::HighResolutionNow); - RuntimeCallTimer::Now = &RuntimeCallStatsTestNow; - } -}; - class SnapshotNativeCounterTest : public TestWithNativeContextAndCounters { public: SnapshotNativeCounterTest() {} @@ -310,523 +211,6 @@ TEST_F(AggregatedMemoryHistogramTest, ManySamples2) { } } -TEST_F(RuntimeCallStatsTest, RuntimeCallTimer) { - RuntimeCallTimer timer; - - Sleep(50); - stats()->Enter(&timer, counter_id()); - EXPECT_EQ(counter(), timer.counter()); - EXPECT_EQ(nullptr, timer.parent()); - EXPECT_TRUE(timer.IsStarted()); - EXPECT_EQ(&timer, stats()->current_timer()); - - Sleep(100); - - stats()->Leave(&timer); - Sleep(50); - EXPECT_FALSE(timer.IsStarted()); - EXPECT_EQ(1, counter()->count()); - EXPECT_EQ(100, counter()->time().InMicroseconds()); -} - -TEST_F(RuntimeCallStatsTest, RuntimeCallTimerSubTimer) { - RuntimeCallTimer timer; - RuntimeCallTimer timer2; - - stats()->Enter(&timer, counter_id()); - EXPECT_TRUE(timer.IsStarted()); - EXPECT_FALSE(timer2.IsStarted()); - EXPECT_EQ(counter(), timer.counter()); - EXPECT_EQ(nullptr, timer.parent()); - EXPECT_EQ(&timer, stats()->current_timer()); - - Sleep(50); - - stats()->Enter(&timer2, counter_id2()); - // timer 1 is paused, while timer 2 is active. - EXPECT_TRUE(timer2.IsStarted()); - EXPECT_EQ(counter(), timer.counter()); - EXPECT_EQ(counter2(), timer2.counter()); - EXPECT_EQ(nullptr, timer.parent()); - EXPECT_EQ(&timer, timer2.parent()); - EXPECT_EQ(&timer2, stats()->current_timer()); - - Sleep(100); - stats()->Leave(&timer2); - - // The subtimer subtracts its time from the parent timer. - EXPECT_TRUE(timer.IsStarted()); - EXPECT_FALSE(timer2.IsStarted()); - EXPECT_EQ(0, counter()->count()); - EXPECT_EQ(1, counter2()->count()); - EXPECT_EQ(0, counter()->time().InMicroseconds()); - EXPECT_EQ(100, counter2()->time().InMicroseconds()); - EXPECT_EQ(&timer, stats()->current_timer()); - - Sleep(100); - - stats()->Leave(&timer); - EXPECT_FALSE(timer.IsStarted()); - EXPECT_EQ(1, counter()->count()); - EXPECT_EQ(1, counter2()->count()); - EXPECT_EQ(150, counter()->time().InMicroseconds()); - EXPECT_EQ(100, counter2()->time().InMicroseconds()); - EXPECT_EQ(nullptr, stats()->current_timer()); -} - -TEST_F(RuntimeCallStatsTest, RuntimeCallTimerRecursive) { - RuntimeCallTimer timer; - RuntimeCallTimer timer2; - - stats()->Enter(&timer, counter_id()); - EXPECT_EQ(counter(), timer.counter()); - EXPECT_EQ(nullptr, timer.parent()); - EXPECT_TRUE(timer.IsStarted()); - EXPECT_EQ(&timer, stats()->current_timer()); - - stats()->Enter(&timer2, counter_id()); - EXPECT_EQ(counter(), timer2.counter()); - EXPECT_EQ(nullptr, timer.parent()); - EXPECT_EQ(&timer, timer2.parent()); - EXPECT_TRUE(timer2.IsStarted()); - EXPECT_EQ(&timer2, stats()->current_timer()); - - Sleep(50); - - stats()->Leave(&timer2); - EXPECT_EQ(nullptr, timer.parent()); - EXPECT_FALSE(timer2.IsStarted()); - EXPECT_TRUE(timer.IsStarted()); - EXPECT_EQ(1, counter()->count()); - EXPECT_EQ(50, counter()->time().InMicroseconds()); - - Sleep(100); - - stats()->Leave(&timer); - EXPECT_FALSE(timer.IsStarted()); - EXPECT_EQ(2, counter()->count()); - EXPECT_EQ(150, counter()->time().InMicroseconds()); -} - -TEST_F(RuntimeCallStatsTest, RuntimeCallTimerScope) { - { - RuntimeCallTimerScope scope(stats(), counter_id()); - Sleep(50); - } - Sleep(100); - EXPECT_EQ(1, counter()->count()); - EXPECT_EQ(50, counter()->time().InMicroseconds()); - { - RuntimeCallTimerScope scope(stats(), counter_id()); - Sleep(50); - } - EXPECT_EQ(2, counter()->count()); - EXPECT_EQ(100, counter()->time().InMicroseconds()); -} - -TEST_F(RuntimeCallStatsTest, RuntimeCallTimerScopeRecursive) { - { - RuntimeCallTimerScope scope(stats(), counter_id()); - Sleep(50); - EXPECT_EQ(0, counter()->count()); - EXPECT_EQ(0, counter()->time().InMicroseconds()); - { - RuntimeCallTimerScope scope(stats(), counter_id()); - Sleep(50); - } - EXPECT_EQ(1, counter()->count()); - EXPECT_EQ(50, counter()->time().InMicroseconds()); - } - EXPECT_EQ(2, counter()->count()); - EXPECT_EQ(100, counter()->time().InMicroseconds()); -} - -TEST_F(RuntimeCallStatsTest, RenameTimer) { - { - RuntimeCallTimerScope scope(stats(), counter_id()); - Sleep(50); - EXPECT_EQ(0, counter()->count()); - EXPECT_EQ(0, counter2()->count()); - EXPECT_EQ(0, counter()->time().InMicroseconds()); - EXPECT_EQ(0, counter2()->time().InMicroseconds()); - { - RuntimeCallTimerScope scope(stats(), counter_id()); - Sleep(100); - } - CHANGE_CURRENT_RUNTIME_COUNTER(stats(), - RuntimeCallCounterId::kTestCounter2); - EXPECT_EQ(1, counter()->count()); - EXPECT_EQ(0, counter2()->count()); - EXPECT_EQ(100, counter()->time().InMicroseconds()); - EXPECT_EQ(0, counter2()->time().InMicroseconds()); - } - EXPECT_EQ(1, counter()->count()); - EXPECT_EQ(1, counter2()->count()); - EXPECT_EQ(100, counter()->time().InMicroseconds()); - EXPECT_EQ(50, counter2()->time().InMicroseconds()); -} - -TEST_F(RuntimeCallStatsTest, BasicPrintAndSnapshot) { - std::ostringstream out; - stats()->Print(out); - EXPECT_EQ(0, counter()->count()); - EXPECT_EQ(0, counter2()->count()); - EXPECT_EQ(0, counter3()->count()); - EXPECT_EQ(0, counter()->time().InMicroseconds()); - EXPECT_EQ(0, counter2()->time().InMicroseconds()); - EXPECT_EQ(0, counter3()->time().InMicroseconds()); - - { - RuntimeCallTimerScope scope(stats(), counter_id()); - Sleep(50); - stats()->Print(out); - } - stats()->Print(out); - EXPECT_EQ(1, counter()->count()); - EXPECT_EQ(0, counter2()->count()); - EXPECT_EQ(0, counter3()->count()); - EXPECT_EQ(50, counter()->time().InMicroseconds()); - EXPECT_EQ(0, counter2()->time().InMicroseconds()); - EXPECT_EQ(0, counter3()->time().InMicroseconds()); -} - -TEST_F(RuntimeCallStatsTest, PrintAndSnapshot) { - { - RuntimeCallTimerScope scope(stats(), counter_id()); - Sleep(100); - EXPECT_EQ(0, counter()->count()); - EXPECT_EQ(0, counter()->time().InMicroseconds()); - { - RuntimeCallTimerScope scope(stats(), counter_id2()); - EXPECT_EQ(0, counter2()->count()); - EXPECT_EQ(0, counter2()->time().InMicroseconds()); - Sleep(50); - - // This calls Snapshot on the current active timer and sychronizes and - // commits the whole timer stack. - std::ostringstream out; - stats()->Print(out); - EXPECT_EQ(0, counter()->count()); - EXPECT_EQ(0, counter2()->count()); - EXPECT_EQ(100, counter()->time().InMicroseconds()); - EXPECT_EQ(50, counter2()->time().InMicroseconds()); - // Calling Print several times shouldn't have a (big) impact on the - // measured times. - stats()->Print(out); - EXPECT_EQ(0, counter()->count()); - EXPECT_EQ(0, counter2()->count()); - EXPECT_EQ(100, counter()->time().InMicroseconds()); - EXPECT_EQ(50, counter2()->time().InMicroseconds()); - - Sleep(50); - stats()->Print(out); - EXPECT_EQ(0, counter()->count()); - EXPECT_EQ(0, counter2()->count()); - EXPECT_EQ(100, counter()->time().InMicroseconds()); - EXPECT_EQ(100, counter2()->time().InMicroseconds()); - Sleep(50); - } - Sleep(50); - EXPECT_EQ(0, counter()->count()); - EXPECT_EQ(1, counter2()->count()); - EXPECT_EQ(100, counter()->time().InMicroseconds()); - EXPECT_EQ(150, counter2()->time().InMicroseconds()); - Sleep(50); - } - EXPECT_EQ(1, counter()->count()); - EXPECT_EQ(1, counter2()->count()); - EXPECT_EQ(200, counter()->time().InMicroseconds()); - EXPECT_EQ(150, counter2()->time().InMicroseconds()); -} - -TEST_F(RuntimeCallStatsTest, NestedScopes) { - { - RuntimeCallTimerScope scope(stats(), counter_id()); - Sleep(100); - { - RuntimeCallTimerScope scope(stats(), counter_id2()); - Sleep(100); - { - RuntimeCallTimerScope scope(stats(), counter_id3()); - Sleep(50); - } - Sleep(50); - { - RuntimeCallTimerScope scope(stats(), counter_id3()); - Sleep(50); - } - Sleep(50); - } - Sleep(100); - { - RuntimeCallTimerScope scope(stats(), counter_id2()); - Sleep(100); - } - Sleep(50); - } - EXPECT_EQ(1, counter()->count()); - EXPECT_EQ(2, counter2()->count()); - EXPECT_EQ(2, counter3()->count()); - EXPECT_EQ(250, counter()->time().InMicroseconds()); - EXPECT_EQ(300, counter2()->time().InMicroseconds()); - EXPECT_EQ(100, counter3()->time().InMicroseconds()); -} - -TEST_F(RuntimeCallStatsTest, BasicJavaScript) { - RuntimeCallCounter* counter = - stats()->GetCounter(RuntimeCallCounterId::kJS_Execution); - EXPECT_EQ(0, counter->count()); - EXPECT_EQ(0, counter->time().InMicroseconds()); - - { - NativeTimeScope native_timer_scope; - RunJS("function f() { return 1; };"); - } - EXPECT_EQ(1, counter->count()); - int64_t time = counter->time().InMicroseconds(); - EXPECT_LT(0, time); - - { - NativeTimeScope native_timer_scope; - RunJS("f();"); - } - EXPECT_EQ(2, counter->count()); - EXPECT_LE(time, counter->time().InMicroseconds()); -} - -TEST_F(RuntimeCallStatsTest, FunctionLengthGetter) { - RuntimeCallCounter* getter_counter = - stats()->GetCounter(RuntimeCallCounterId::kFunctionLengthGetter); - EXPECT_EQ(0, getter_counter->count()); - EXPECT_EQ(0, js_counter()->count()); - EXPECT_EQ(0, getter_counter->time().InMicroseconds()); - EXPECT_EQ(0, js_counter()->time().InMicroseconds()); - - { - NativeTimeScope native_timer_scope; - RunJS("function f(array) { return array.length; };"); - } - EXPECT_EQ(0, getter_counter->count()); - EXPECT_EQ(1, js_counter()->count()); - EXPECT_EQ(0, getter_counter->time().InMicroseconds()); - int64_t js_time = js_counter()->time().InMicroseconds(); - EXPECT_LT(0, js_time); - - { - NativeTimeScope native_timer_scope; - RunJS("f.length;"); - } - EXPECT_EQ(1, getter_counter->count()); - EXPECT_EQ(2, js_counter()->count()); - EXPECT_LE(0, getter_counter->time().InMicroseconds()); - EXPECT_LE(js_time, js_counter()->time().InMicroseconds()); - - { - NativeTimeScope native_timer_scope; - RunJS("for (let i = 0; i < 50; i++) { f.length };"); - } - EXPECT_EQ(51, getter_counter->count()); - EXPECT_EQ(3, js_counter()->count()); - - { - NativeTimeScope native_timer_scope; - RunJS("for (let i = 0; i < 1000; i++) { f.length; };"); - } - EXPECT_EQ(1051, getter_counter->count()); - EXPECT_EQ(4, js_counter()->count()); -} - -namespace { -static RuntimeCallStatsTest* current_test; -static const int kCustomCallbackTime = 1234; -static void CustomCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - RuntimeCallTimerScope scope(current_test->stats(), - current_test->counter_id2()); - current_test->Sleep(kCustomCallbackTime); -} -} // namespace - -TEST_F(RuntimeCallStatsTest, CallbackFunction) { - FLAG_allow_natives_syntax = true; - FLAG_incremental_marking = false; - - RuntimeCallCounter* callback_counter = - stats()->GetCounter(RuntimeCallCounterId::kFunctionCallback); - - current_test = this; - // Set up a function template with a custom callback. - v8::Isolate* isolate = v8_isolate(); - v8::HandleScope scope(isolate); - - v8::Local<v8::ObjectTemplate> object_template = - v8::ObjectTemplate::New(isolate); - object_template->Set(isolate, "callback", - v8::FunctionTemplate::New(isolate, CustomCallback)); - v8::Local<v8::Object> object = - object_template->NewInstance(v8_context()).ToLocalChecked(); - SetGlobalProperty("custom_object", object); - - EXPECT_EQ(0, js_counter()->count()); - EXPECT_EQ(0, counter()->count()); - EXPECT_EQ(0, callback_counter->count()); - EXPECT_EQ(0, counter2()->count()); - { - RuntimeCallTimerScope scope(stats(), counter_id()); - Sleep(100); - RunJS("custom_object.callback();"); - } - EXPECT_EQ(1, js_counter()->count()); - EXPECT_EQ(1, counter()->count()); - EXPECT_EQ(1, callback_counter->count()); - EXPECT_EQ(1, counter2()->count()); - // Given that no native timers are used, only the two scopes explitly - // mentioned above will track the time. - EXPECT_EQ(0, js_counter()->time().InMicroseconds()); - EXPECT_EQ(0, callback_counter->time().InMicroseconds()); - EXPECT_EQ(100, counter()->time().InMicroseconds()); - EXPECT_EQ(kCustomCallbackTime, counter2()->time().InMicroseconds()); - - RunJS("for (let i = 0; i < 9; i++) { custom_object.callback(); };"); - EXPECT_EQ(2, js_counter()->count()); - EXPECT_EQ(1, counter()->count()); - EXPECT_EQ(10, callback_counter->count()); - EXPECT_EQ(10, counter2()->count()); - EXPECT_EQ(0, js_counter()->time().InMicroseconds()); - EXPECT_EQ(0, callback_counter->time().InMicroseconds()); - EXPECT_EQ(100, counter()->time().InMicroseconds()); - EXPECT_EQ(kCustomCallbackTime * 10, counter2()->time().InMicroseconds()); - - RunJS("for (let i = 0; i < 4000; i++) { custom_object.callback(); };"); - EXPECT_EQ(3, js_counter()->count()); - EXPECT_EQ(1, counter()->count()); - EXPECT_EQ(4010, callback_counter->count()); - EXPECT_EQ(4010, counter2()->count()); - EXPECT_EQ(0, js_counter()->time().InMicroseconds()); - EXPECT_EQ(0, callback_counter->time().InMicroseconds()); - EXPECT_EQ(100, counter()->time().InMicroseconds()); - EXPECT_EQ(kCustomCallbackTime * 4010, counter2()->time().InMicroseconds()); - - // Check that the FunctionCallback tracing also works properly - // when the `callback` is called from optimized code. - RunJS( - "function wrap(o) { return o.callback(); };\n" - "%PrepareFunctionForOptimization(wrap);\n" - "wrap(custom_object);\n" - "wrap(custom_object);\n" - "%OptimizeFunctionOnNextCall(wrap);\n" - "wrap(custom_object);\n"); - EXPECT_EQ(4, js_counter()->count()); - EXPECT_EQ(1, counter()->count()); - EXPECT_EQ(4013, callback_counter->count()); - EXPECT_EQ(4013, counter2()->count()); - EXPECT_EQ(0, js_counter()->time().InMicroseconds()); - EXPECT_EQ(0, callback_counter->time().InMicroseconds()); - EXPECT_EQ(100, counter()->time().InMicroseconds()); - EXPECT_EQ(kCustomCallbackTime * 4013, counter2()->time().InMicroseconds()); -} - -TEST_F(RuntimeCallStatsTest, ApiGetter) { - FLAG_allow_natives_syntax = true; - FLAG_incremental_marking = false; - - RuntimeCallCounter* callback_counter = - stats()->GetCounter(RuntimeCallCounterId::kFunctionCallback); - current_test = this; - // Set up a function template with an api accessor. - v8::Isolate* isolate = v8_isolate(); - v8::HandleScope scope(isolate); - - v8::Local<v8::ObjectTemplate> object_template = - v8::ObjectTemplate::New(isolate); - object_template->SetAccessorProperty( - NewString("apiGetter"), - v8::FunctionTemplate::New(isolate, CustomCallback)); - v8::Local<v8::Object> object = - object_template->NewInstance(v8_context()).ToLocalChecked(); - SetGlobalProperty("custom_object", object); - - // TODO(cbruni): Check api accessor timer (one above the custom callback). - EXPECT_EQ(0, js_counter()->count()); - EXPECT_EQ(0, counter()->count()); - EXPECT_EQ(0, callback_counter->count()); - EXPECT_EQ(0, counter2()->count()); - - { - RuntimeCallTimerScope scope(stats(), counter_id()); - Sleep(100); - RunJS("custom_object.apiGetter;"); - } - - EXPECT_EQ(1, js_counter()->count()); - EXPECT_EQ(1, counter()->count()); - EXPECT_EQ(1, callback_counter->count()); - EXPECT_EQ(1, counter2()->count()); - // Given that no native timers are used, only the two scopes explitly - // mentioned above will track the time. - EXPECT_EQ(0, js_counter()->time().InMicroseconds()); - EXPECT_EQ(100, counter()->time().InMicroseconds()); - EXPECT_EQ(0, callback_counter->time().InMicroseconds()); - EXPECT_EQ(kCustomCallbackTime, counter2()->time().InMicroseconds()); - - RunJS("for (let i = 0; i < 9; i++) { custom_object.apiGetter };"); - - EXPECT_EQ(2, js_counter()->count()); - EXPECT_EQ(1, counter()->count()); - EXPECT_EQ(10, callback_counter->count()); - EXPECT_EQ(10, counter2()->count()); - - EXPECT_EQ(0, js_counter()->time().InMicroseconds()); - EXPECT_EQ(100, counter()->time().InMicroseconds()); - EXPECT_EQ(0, callback_counter->time().InMicroseconds()); - EXPECT_EQ(kCustomCallbackTime * 10, counter2()->time().InMicroseconds()); - - RunJS("for (let i = 0; i < 4000; i++) { custom_object.apiGetter };"); - - EXPECT_EQ(3, js_counter()->count()); - EXPECT_EQ(1, counter()->count()); - EXPECT_EQ(4010, callback_counter->count()); - EXPECT_EQ(4010, counter2()->count()); - - EXPECT_EQ(0, js_counter()->time().InMicroseconds()); - EXPECT_EQ(100, counter()->time().InMicroseconds()); - EXPECT_EQ(0, callback_counter->time().InMicroseconds()); - EXPECT_EQ(kCustomCallbackTime * 4010, counter2()->time().InMicroseconds()); - - // Check that the FunctionCallback tracing also works properly - // when the `apiGetter` is called from optimized code. - RunJS( - "function wrap(o) { return o.apiGetter; };\n" - "%PrepareFunctionForOptimization(wrap);\n" - "wrap(custom_object);\n" - "wrap(custom_object);\n" - "%OptimizeFunctionOnNextCall(wrap);\n" - "wrap(custom_object);\n"); - - EXPECT_EQ(4, js_counter()->count()); - EXPECT_EQ(1, counter()->count()); - EXPECT_EQ(4013, callback_counter->count()); - EXPECT_EQ(4013, counter2()->count()); - - EXPECT_EQ(0, js_counter()->time().InMicroseconds()); - EXPECT_EQ(100, counter()->time().InMicroseconds()); - EXPECT_EQ(0, callback_counter->time().InMicroseconds()); - EXPECT_EQ(kCustomCallbackTime * 4013, counter2()->time().InMicroseconds()); -} - -TEST_F(RuntimeCallStatsTest, GarbageCollection) { - FLAG_expose_gc = true; - v8::Isolate* isolate = v8_isolate(); - RunJS( - "let root = [];" - "for (let i = 0; i < 10; i++) root.push((new Array(1000)).fill(0));" - "root.push((new Array(1000000)).fill(0));" - "((new Array(1000000)).fill(0));"); - isolate->RequestGarbageCollectionForTesting( - v8::Isolate::kFullGarbageCollection); - isolate->RequestGarbageCollectionForTesting( - v8::Isolate::kFullGarbageCollection); -} - TEST_F(SnapshotNativeCounterTest, StringAddNative) { RunJS("let s = 'hello, ' + 'world!'"); diff --git a/deps/v8/test/unittests/logging/runtime-call-stats-unittest.cc b/deps/v8/test/unittests/logging/runtime-call-stats-unittest.cc new file mode 100644 index 0000000000..8d0ea594c3 --- /dev/null +++ b/deps/v8/test/unittests/logging/runtime-call-stats-unittest.cc @@ -0,0 +1,643 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "src/logging/runtime-call-stats.h" + +#include "src/api/api-inl.h" +#include "src/base/atomic-utils.h" +#include "src/base/platform/time.h" +#include "src/handles/handles-inl.h" +#include "src/logging/counters.h" +#include "src/objects/objects-inl.h" +#include "src/tracing/tracing-category-observer.h" +#include "test/unittests/test-utils.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace v8 { +namespace internal { + +namespace { + +static base::TimeTicks runtime_call_stats_test_time_ = base::TimeTicks(); +// Time source used for the RuntimeCallTimer during tests. We cannot rely on +// the native timer since it's too unpredictable on the build bots. +static base::TimeTicks RuntimeCallStatsTestNow() { + return runtime_call_stats_test_time_; +} + +class RuntimeCallStatsTest : public TestWithNativeContext { + public: + RuntimeCallStatsTest() { + TracingFlags::runtime_stats.store( + v8::tracing::TracingCategoryObserver::ENABLED_BY_NATIVE, + std::memory_order_relaxed); + // We need to set {time_} to a non-zero value since it would otherwise + // cause runtime call timers to think they are uninitialized. + Sleep(1); + stats()->Reset(); + } + + ~RuntimeCallStatsTest() override { + // Disable RuntimeCallStats before tearing down the isolate to prevent + // printing the tests table. Comment the following line for debugging + // purposes. + TracingFlags::runtime_stats.store(0, std::memory_order_relaxed); + } + + static void SetUpTestCase() { + TestWithIsolate::SetUpTestCase(); + // Use a custom time source to precisly emulate system time. + RuntimeCallTimer::Now = &RuntimeCallStatsTestNow; + } + + static void TearDownTestCase() { + TestWithIsolate::TearDownTestCase(); + // Restore the original time source. + RuntimeCallTimer::Now = &base::TimeTicks::HighResolutionNow; + } + + RuntimeCallStats* stats() { + return isolate()->counters()->runtime_call_stats(); + } + + RuntimeCallCounterId counter_id() { + return RuntimeCallCounterId::kTestCounter1; + } + + RuntimeCallCounterId counter_id2() { + return RuntimeCallCounterId::kTestCounter2; + } + + RuntimeCallCounterId counter_id3() { + return RuntimeCallCounterId::kTestCounter3; + } + + RuntimeCallCounter* js_counter() { + return stats()->GetCounter(RuntimeCallCounterId::kJS_Execution); + } + RuntimeCallCounter* counter() { return stats()->GetCounter(counter_id()); } + RuntimeCallCounter* counter2() { return stats()->GetCounter(counter_id2()); } + RuntimeCallCounter* counter3() { return stats()->GetCounter(counter_id3()); } + + void Sleep(int64_t microseconds) { + base::TimeDelta delta = base::TimeDelta::FromMicroseconds(microseconds); + time_ += delta; + runtime_call_stats_test_time_ = + base::TimeTicks::FromInternalValue(time_.InMicroseconds()); + } + + private: + base::TimeDelta time_; +}; + +// Temporarily use the native time to modify the test time. +class V8_NODISCARD ElapsedTimeScope { + public: + explicit ElapsedTimeScope(RuntimeCallStatsTest* test) : test_(test) { + timer_.Start(); + } + ~ElapsedTimeScope() { test_->Sleep(timer_.Elapsed().InMicroseconds()); } + + private: + base::ElapsedTimer timer_; + RuntimeCallStatsTest* test_; +}; + +// Temporarily use the default time source. +class V8_NODISCARD NativeTimeScope { + public: + NativeTimeScope() { + CHECK_EQ(RuntimeCallTimer::Now, &RuntimeCallStatsTestNow); + RuntimeCallTimer::Now = &base::TimeTicks::HighResolutionNow; + } + ~NativeTimeScope() { + CHECK_EQ(RuntimeCallTimer::Now, &base::TimeTicks::HighResolutionNow); + RuntimeCallTimer::Now = &RuntimeCallStatsTestNow; + } +}; + +} // namespace + +TEST_F(RuntimeCallStatsTest, RuntimeCallTimer) { + RuntimeCallTimer timer; + + Sleep(50); + stats()->Enter(&timer, counter_id()); + EXPECT_EQ(counter(), timer.counter()); + EXPECT_EQ(nullptr, timer.parent()); + EXPECT_TRUE(timer.IsStarted()); + EXPECT_EQ(&timer, stats()->current_timer()); + + Sleep(100); + + stats()->Leave(&timer); + Sleep(50); + EXPECT_FALSE(timer.IsStarted()); + EXPECT_EQ(1, counter()->count()); + EXPECT_EQ(100, counter()->time().InMicroseconds()); +} + +TEST_F(RuntimeCallStatsTest, RuntimeCallTimerSubTimer) { + RuntimeCallTimer timer; + RuntimeCallTimer timer2; + + stats()->Enter(&timer, counter_id()); + EXPECT_TRUE(timer.IsStarted()); + EXPECT_FALSE(timer2.IsStarted()); + EXPECT_EQ(counter(), timer.counter()); + EXPECT_EQ(nullptr, timer.parent()); + EXPECT_EQ(&timer, stats()->current_timer()); + + Sleep(50); + + stats()->Enter(&timer2, counter_id2()); + // timer 1 is paused, while timer 2 is active. + EXPECT_TRUE(timer2.IsStarted()); + EXPECT_EQ(counter(), timer.counter()); + EXPECT_EQ(counter2(), timer2.counter()); + EXPECT_EQ(nullptr, timer.parent()); + EXPECT_EQ(&timer, timer2.parent()); + EXPECT_EQ(&timer2, stats()->current_timer()); + + Sleep(100); + stats()->Leave(&timer2); + + // The subtimer subtracts its time from the parent timer. + EXPECT_TRUE(timer.IsStarted()); + EXPECT_FALSE(timer2.IsStarted()); + EXPECT_EQ(0, counter()->count()); + EXPECT_EQ(1, counter2()->count()); + EXPECT_EQ(0, counter()->time().InMicroseconds()); + EXPECT_EQ(100, counter2()->time().InMicroseconds()); + EXPECT_EQ(&timer, stats()->current_timer()); + + Sleep(100); + + stats()->Leave(&timer); + EXPECT_FALSE(timer.IsStarted()); + EXPECT_EQ(1, counter()->count()); + EXPECT_EQ(1, counter2()->count()); + EXPECT_EQ(150, counter()->time().InMicroseconds()); + EXPECT_EQ(100, counter2()->time().InMicroseconds()); + EXPECT_EQ(nullptr, stats()->current_timer()); +} + +TEST_F(RuntimeCallStatsTest, RuntimeCallTimerRecursive) { + RuntimeCallTimer timer; + RuntimeCallTimer timer2; + + stats()->Enter(&timer, counter_id()); + EXPECT_EQ(counter(), timer.counter()); + EXPECT_EQ(nullptr, timer.parent()); + EXPECT_TRUE(timer.IsStarted()); + EXPECT_EQ(&timer, stats()->current_timer()); + + stats()->Enter(&timer2, counter_id()); + EXPECT_EQ(counter(), timer2.counter()); + EXPECT_EQ(nullptr, timer.parent()); + EXPECT_EQ(&timer, timer2.parent()); + EXPECT_TRUE(timer2.IsStarted()); + EXPECT_EQ(&timer2, stats()->current_timer()); + + Sleep(50); + + stats()->Leave(&timer2); + EXPECT_EQ(nullptr, timer.parent()); + EXPECT_FALSE(timer2.IsStarted()); + EXPECT_TRUE(timer.IsStarted()); + EXPECT_EQ(1, counter()->count()); + EXPECT_EQ(50, counter()->time().InMicroseconds()); + + Sleep(100); + + stats()->Leave(&timer); + EXPECT_FALSE(timer.IsStarted()); + EXPECT_EQ(2, counter()->count()); + EXPECT_EQ(150, counter()->time().InMicroseconds()); +} + +TEST_F(RuntimeCallStatsTest, RuntimeCallTimerScope) { + { + RCS_SCOPE(stats(), counter_id()); + Sleep(50); + } + Sleep(100); + EXPECT_EQ(1, counter()->count()); + EXPECT_EQ(50, counter()->time().InMicroseconds()); + { + RCS_SCOPE(stats(), counter_id()); + Sleep(50); + } + EXPECT_EQ(2, counter()->count()); + EXPECT_EQ(100, counter()->time().InMicroseconds()); +} + +TEST_F(RuntimeCallStatsTest, RuntimeCallTimerScopeRecursive) { + { + RCS_SCOPE(stats(), counter_id()); + Sleep(50); + EXPECT_EQ(0, counter()->count()); + EXPECT_EQ(0, counter()->time().InMicroseconds()); + { + RCS_SCOPE(stats(), counter_id()); + Sleep(50); + } + EXPECT_EQ(1, counter()->count()); + EXPECT_EQ(50, counter()->time().InMicroseconds()); + } + EXPECT_EQ(2, counter()->count()); + EXPECT_EQ(100, counter()->time().InMicroseconds()); +} + +TEST_F(RuntimeCallStatsTest, RenameTimer) { + { + RCS_SCOPE(stats(), counter_id()); + Sleep(50); + EXPECT_EQ(0, counter()->count()); + EXPECT_EQ(0, counter2()->count()); + EXPECT_EQ(0, counter()->time().InMicroseconds()); + EXPECT_EQ(0, counter2()->time().InMicroseconds()); + { + RCS_SCOPE(stats(), counter_id()); + Sleep(100); + } + CHANGE_CURRENT_RUNTIME_COUNTER(stats(), + RuntimeCallCounterId::kTestCounter2); + EXPECT_EQ(1, counter()->count()); + EXPECT_EQ(0, counter2()->count()); + EXPECT_EQ(100, counter()->time().InMicroseconds()); + EXPECT_EQ(0, counter2()->time().InMicroseconds()); + } + EXPECT_EQ(1, counter()->count()); + EXPECT_EQ(1, counter2()->count()); + EXPECT_EQ(100, counter()->time().InMicroseconds()); + EXPECT_EQ(50, counter2()->time().InMicroseconds()); +} + +TEST_F(RuntimeCallStatsTest, BasicPrintAndSnapshot) { + std::ostringstream out; + stats()->Print(out); + EXPECT_EQ(0, counter()->count()); + EXPECT_EQ(0, counter2()->count()); + EXPECT_EQ(0, counter3()->count()); + EXPECT_EQ(0, counter()->time().InMicroseconds()); + EXPECT_EQ(0, counter2()->time().InMicroseconds()); + EXPECT_EQ(0, counter3()->time().InMicroseconds()); + + { + RCS_SCOPE(stats(), counter_id()); + Sleep(50); + stats()->Print(out); + } + stats()->Print(out); + EXPECT_EQ(1, counter()->count()); + EXPECT_EQ(0, counter2()->count()); + EXPECT_EQ(0, counter3()->count()); + EXPECT_EQ(50, counter()->time().InMicroseconds()); + EXPECT_EQ(0, counter2()->time().InMicroseconds()); + EXPECT_EQ(0, counter3()->time().InMicroseconds()); +} + +TEST_F(RuntimeCallStatsTest, PrintAndSnapshot) { + { + RCS_SCOPE(stats(), counter_id()); + Sleep(100); + EXPECT_EQ(0, counter()->count()); + EXPECT_EQ(0, counter()->time().InMicroseconds()); + { + RCS_SCOPE(stats(), counter_id2()); + EXPECT_EQ(0, counter2()->count()); + EXPECT_EQ(0, counter2()->time().InMicroseconds()); + Sleep(50); + + // This calls Snapshot on the current active timer and sychronizes and + // commits the whole timer stack. + std::ostringstream out; + stats()->Print(out); + EXPECT_EQ(0, counter()->count()); + EXPECT_EQ(0, counter2()->count()); + EXPECT_EQ(100, counter()->time().InMicroseconds()); + EXPECT_EQ(50, counter2()->time().InMicroseconds()); + // Calling Print several times shouldn't have a (big) impact on the + // measured times. + stats()->Print(out); + EXPECT_EQ(0, counter()->count()); + EXPECT_EQ(0, counter2()->count()); + EXPECT_EQ(100, counter()->time().InMicroseconds()); + EXPECT_EQ(50, counter2()->time().InMicroseconds()); + + Sleep(50); + stats()->Print(out); + EXPECT_EQ(0, counter()->count()); + EXPECT_EQ(0, counter2()->count()); + EXPECT_EQ(100, counter()->time().InMicroseconds()); + EXPECT_EQ(100, counter2()->time().InMicroseconds()); + Sleep(50); + } + Sleep(50); + EXPECT_EQ(0, counter()->count()); + EXPECT_EQ(1, counter2()->count()); + EXPECT_EQ(100, counter()->time().InMicroseconds()); + EXPECT_EQ(150, counter2()->time().InMicroseconds()); + Sleep(50); + } + EXPECT_EQ(1, counter()->count()); + EXPECT_EQ(1, counter2()->count()); + EXPECT_EQ(200, counter()->time().InMicroseconds()); + EXPECT_EQ(150, counter2()->time().InMicroseconds()); +} + +TEST_F(RuntimeCallStatsTest, NestedScopes) { + { + RCS_SCOPE(stats(), counter_id()); + Sleep(100); + { + RCS_SCOPE(stats(), counter_id2()); + Sleep(100); + { + RCS_SCOPE(stats(), counter_id3()); + Sleep(50); + } + Sleep(50); + { + RCS_SCOPE(stats(), counter_id3()); + Sleep(50); + } + Sleep(50); + } + Sleep(100); + { + RCS_SCOPE(stats(), counter_id2()); + Sleep(100); + } + Sleep(50); + } + EXPECT_EQ(1, counter()->count()); + EXPECT_EQ(2, counter2()->count()); + EXPECT_EQ(2, counter3()->count()); + EXPECT_EQ(250, counter()->time().InMicroseconds()); + EXPECT_EQ(300, counter2()->time().InMicroseconds()); + EXPECT_EQ(100, counter3()->time().InMicroseconds()); +} + +TEST_F(RuntimeCallStatsTest, BasicJavaScript) { + RuntimeCallCounter* counter = + stats()->GetCounter(RuntimeCallCounterId::kJS_Execution); + EXPECT_EQ(0, counter->count()); + EXPECT_EQ(0, counter->time().InMicroseconds()); + + { + NativeTimeScope native_timer_scope; + RunJS("function f() { return 1; };"); + } + EXPECT_EQ(1, counter->count()); + int64_t time = counter->time().InMicroseconds(); + EXPECT_LT(0, time); + + { + NativeTimeScope native_timer_scope; + RunJS("f();"); + } + EXPECT_EQ(2, counter->count()); + EXPECT_LE(time, counter->time().InMicroseconds()); +} + +TEST_F(RuntimeCallStatsTest, FunctionLengthGetter) { + RuntimeCallCounter* getter_counter = + stats()->GetCounter(RuntimeCallCounterId::kFunctionLengthGetter); + EXPECT_EQ(0, getter_counter->count()); + EXPECT_EQ(0, js_counter()->count()); + EXPECT_EQ(0, getter_counter->time().InMicroseconds()); + EXPECT_EQ(0, js_counter()->time().InMicroseconds()); + + { + NativeTimeScope native_timer_scope; + RunJS("function f(array) { return array.length; };"); + } + EXPECT_EQ(0, getter_counter->count()); + EXPECT_EQ(1, js_counter()->count()); + EXPECT_EQ(0, getter_counter->time().InMicroseconds()); + int64_t js_time = js_counter()->time().InMicroseconds(); + EXPECT_LT(0, js_time); + + { + NativeTimeScope native_timer_scope; + RunJS("f.length;"); + } + EXPECT_EQ(1, getter_counter->count()); + EXPECT_EQ(2, js_counter()->count()); + EXPECT_LE(0, getter_counter->time().InMicroseconds()); + EXPECT_LE(js_time, js_counter()->time().InMicroseconds()); + + { + NativeTimeScope native_timer_scope; + RunJS("for (let i = 0; i < 50; i++) { f.length };"); + } + EXPECT_EQ(51, getter_counter->count()); + EXPECT_EQ(3, js_counter()->count()); + + { + NativeTimeScope native_timer_scope; + RunJS("for (let i = 0; i < 1000; i++) { f.length; };"); + } + EXPECT_EQ(1051, getter_counter->count()); + EXPECT_EQ(4, js_counter()->count()); +} + +namespace { +static RuntimeCallStatsTest* current_test; +static const int kCustomCallbackTime = 1234; +static void CustomCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { + RCS_SCOPE(current_test->stats(), current_test->counter_id2()); + current_test->Sleep(kCustomCallbackTime); +} +} // namespace + +TEST_F(RuntimeCallStatsTest, CallbackFunction) { + FLAG_allow_natives_syntax = true; + FLAG_incremental_marking = false; + + RuntimeCallCounter* callback_counter = + stats()->GetCounter(RuntimeCallCounterId::kFunctionCallback); + + current_test = this; + // Set up a function template with a custom callback. + v8::Isolate* isolate = v8_isolate(); + v8::HandleScope scope(isolate); + + v8::Local<v8::ObjectTemplate> object_template = + v8::ObjectTemplate::New(isolate); + object_template->Set(isolate, "callback", + v8::FunctionTemplate::New(isolate, CustomCallback)); + v8::Local<v8::Object> object = + object_template->NewInstance(v8_context()).ToLocalChecked(); + SetGlobalProperty("custom_object", object); + + EXPECT_EQ(0, js_counter()->count()); + EXPECT_EQ(0, counter()->count()); + EXPECT_EQ(0, callback_counter->count()); + EXPECT_EQ(0, counter2()->count()); + { + RCS_SCOPE(stats(), counter_id()); + Sleep(100); + RunJS("custom_object.callback();"); + } + EXPECT_EQ(1, js_counter()->count()); + EXPECT_EQ(1, counter()->count()); + EXPECT_EQ(1, callback_counter->count()); + EXPECT_EQ(1, counter2()->count()); + // Given that no native timers are used, only the two scopes explitly + // mentioned above will track the time. + EXPECT_EQ(0, js_counter()->time().InMicroseconds()); + EXPECT_EQ(0, callback_counter->time().InMicroseconds()); + EXPECT_EQ(100, counter()->time().InMicroseconds()); + EXPECT_EQ(kCustomCallbackTime, counter2()->time().InMicroseconds()); + + RunJS("for (let i = 0; i < 9; i++) { custom_object.callback(); };"); + EXPECT_EQ(2, js_counter()->count()); + EXPECT_EQ(1, counter()->count()); + EXPECT_EQ(10, callback_counter->count()); + EXPECT_EQ(10, counter2()->count()); + EXPECT_EQ(0, js_counter()->time().InMicroseconds()); + EXPECT_EQ(0, callback_counter->time().InMicroseconds()); + EXPECT_EQ(100, counter()->time().InMicroseconds()); + EXPECT_EQ(kCustomCallbackTime * 10, counter2()->time().InMicroseconds()); + + RunJS("for (let i = 0; i < 4000; i++) { custom_object.callback(); };"); + EXPECT_EQ(3, js_counter()->count()); + EXPECT_EQ(1, counter()->count()); + EXPECT_EQ(4010, callback_counter->count()); + EXPECT_EQ(4010, counter2()->count()); + EXPECT_EQ(0, js_counter()->time().InMicroseconds()); + EXPECT_EQ(0, callback_counter->time().InMicroseconds()); + EXPECT_EQ(100, counter()->time().InMicroseconds()); + EXPECT_EQ(kCustomCallbackTime * 4010, counter2()->time().InMicroseconds()); + + // Check that the FunctionCallback tracing also works properly + // when the `callback` is called from optimized code. + RunJS( + "function wrap(o) { return o.callback(); };\n" + "%PrepareFunctionForOptimization(wrap);\n" + "wrap(custom_object);\n" + "wrap(custom_object);\n" + "%OptimizeFunctionOnNextCall(wrap);\n" + "wrap(custom_object);\n"); + EXPECT_EQ(4, js_counter()->count()); + EXPECT_EQ(1, counter()->count()); + EXPECT_EQ(4013, callback_counter->count()); + EXPECT_EQ(4013, counter2()->count()); + EXPECT_EQ(0, js_counter()->time().InMicroseconds()); + EXPECT_EQ(0, callback_counter->time().InMicroseconds()); + EXPECT_EQ(100, counter()->time().InMicroseconds()); + EXPECT_EQ(kCustomCallbackTime * 4013, counter2()->time().InMicroseconds()); +} + +TEST_F(RuntimeCallStatsTest, ApiGetter) { + FLAG_allow_natives_syntax = true; + FLAG_incremental_marking = false; + + RuntimeCallCounter* callback_counter = + stats()->GetCounter(RuntimeCallCounterId::kFunctionCallback); + current_test = this; + // Set up a function template with an api accessor. + v8::Isolate* isolate = v8_isolate(); + v8::HandleScope scope(isolate); + + v8::Local<v8::ObjectTemplate> object_template = + v8::ObjectTemplate::New(isolate); + object_template->SetAccessorProperty( + NewString("apiGetter"), + v8::FunctionTemplate::New(isolate, CustomCallback)); + v8::Local<v8::Object> object = + object_template->NewInstance(v8_context()).ToLocalChecked(); + SetGlobalProperty("custom_object", object); + + // TODO(cbruni): Check api accessor timer (one above the custom callback). + EXPECT_EQ(0, js_counter()->count()); + EXPECT_EQ(0, counter()->count()); + EXPECT_EQ(0, callback_counter->count()); + EXPECT_EQ(0, counter2()->count()); + + { + RCS_SCOPE(stats(), counter_id()); + Sleep(100); + RunJS("custom_object.apiGetter;"); + } + + EXPECT_EQ(1, js_counter()->count()); + EXPECT_EQ(1, counter()->count()); + EXPECT_EQ(1, callback_counter->count()); + EXPECT_EQ(1, counter2()->count()); + // Given that no native timers are used, only the two scopes explitly + // mentioned above will track the time. + EXPECT_EQ(0, js_counter()->time().InMicroseconds()); + EXPECT_EQ(100, counter()->time().InMicroseconds()); + EXPECT_EQ(0, callback_counter->time().InMicroseconds()); + EXPECT_EQ(kCustomCallbackTime, counter2()->time().InMicroseconds()); + + RunJS("for (let i = 0; i < 9; i++) { custom_object.apiGetter };"); + + EXPECT_EQ(2, js_counter()->count()); + EXPECT_EQ(1, counter()->count()); + EXPECT_EQ(10, callback_counter->count()); + EXPECT_EQ(10, counter2()->count()); + + EXPECT_EQ(0, js_counter()->time().InMicroseconds()); + EXPECT_EQ(100, counter()->time().InMicroseconds()); + EXPECT_EQ(0, callback_counter->time().InMicroseconds()); + EXPECT_EQ(kCustomCallbackTime * 10, counter2()->time().InMicroseconds()); + + RunJS("for (let i = 0; i < 4000; i++) { custom_object.apiGetter };"); + + EXPECT_EQ(3, js_counter()->count()); + EXPECT_EQ(1, counter()->count()); + EXPECT_EQ(4010, callback_counter->count()); + EXPECT_EQ(4010, counter2()->count()); + + EXPECT_EQ(0, js_counter()->time().InMicroseconds()); + EXPECT_EQ(100, counter()->time().InMicroseconds()); + EXPECT_EQ(0, callback_counter->time().InMicroseconds()); + EXPECT_EQ(kCustomCallbackTime * 4010, counter2()->time().InMicroseconds()); + + // Check that the FunctionCallback tracing also works properly + // when the `apiGetter` is called from optimized code. + RunJS( + "function wrap(o) { return o.apiGetter; };\n" + "%PrepareFunctionForOptimization(wrap);\n" + "wrap(custom_object);\n" + "wrap(custom_object);\n" + "%OptimizeFunctionOnNextCall(wrap);\n" + "wrap(custom_object);\n"); + + EXPECT_EQ(4, js_counter()->count()); + EXPECT_EQ(1, counter()->count()); + EXPECT_EQ(4013, callback_counter->count()); + EXPECT_EQ(4013, counter2()->count()); + + EXPECT_EQ(0, js_counter()->time().InMicroseconds()); + EXPECT_EQ(100, counter()->time().InMicroseconds()); + EXPECT_EQ(0, callback_counter->time().InMicroseconds()); + EXPECT_EQ(kCustomCallbackTime * 4013, counter2()->time().InMicroseconds()); +} + +TEST_F(RuntimeCallStatsTest, GarbageCollection) { + FLAG_expose_gc = true; + // Disable concurrent GC threads because otherwise they may continue + // running after this test completes and race with is_runtime_stats_enabled() + // updates. + FLAG_single_threaded_gc = true; + v8::Isolate* isolate = v8_isolate(); + RunJS( + "let root = [];" + "for (let i = 0; i < 10; i++) root.push((new Array(1000)).fill(0));" + "root.push((new Array(1000000)).fill(0));" + "((new Array(1000000)).fill(0));"); + isolate->RequestGarbageCollectionForTesting( + v8::Isolate::kFullGarbageCollection); + isolate->RequestGarbageCollectionForTesting( + v8::Isolate::kFullGarbageCollection); +} + +} // namespace internal +} // namespace v8 diff --git a/deps/v8/test/unittests/regexp/regexp-unittest.cc b/deps/v8/test/unittests/regexp/regexp-unittest.cc new file mode 100644 index 0000000000..32c981b269 --- /dev/null +++ b/deps/v8/test/unittests/regexp/regexp-unittest.cc @@ -0,0 +1,39 @@ +// Copyright 2021 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "src/objects/js-regexp-inl.h" +#include "test/unittests/test-utils.h" + +namespace v8 { +namespace internal { + +TEST_F(TestWithNativeContext, ConvertRegExpFlagsToString) { + RunJS("let regexp = new RegExp(/ab+c/ig);"); + Handle<JSRegExp> regexp = RunJS<JSRegExp>("regexp"); + Handle<String> flags = RunJS<String>("regexp.flags"); + Handle<String> converted_flags = + JSRegExp::StringFromFlags(isolate(), regexp->GetFlags()); + EXPECT_TRUE(String::Equals(isolate(), flags, converted_flags)); +} + +TEST_F(TestWithNativeContext, ConvertRegExpFlagsToStringNoFlags) { + RunJS("let regexp = new RegExp(/ab+c/);"); + Handle<JSRegExp> regexp = RunJS<JSRegExp>("regexp"); + Handle<String> flags = RunJS<String>("regexp.flags"); + Handle<String> converted_flags = + JSRegExp::StringFromFlags(isolate(), regexp->GetFlags()); + EXPECT_TRUE(String::Equals(isolate(), flags, converted_flags)); +} + +TEST_F(TestWithNativeContext, ConvertRegExpFlagsToStringAllFlags) { + RunJS("let regexp = new RegExp(/ab+c/dgimsuy);"); + Handle<JSRegExp> regexp = RunJS<JSRegExp>("regexp"); + Handle<String> flags = RunJS<String>("regexp.flags"); + Handle<String> converted_flags = + JSRegExp::StringFromFlags(isolate(), regexp->GetFlags()); + EXPECT_TRUE(String::Equals(isolate(), flags, converted_flags)); +} + +} // namespace internal +} // namespace v8 diff --git a/deps/v8/test/unittests/regress/regress-crbug-1041240-unittest.cc b/deps/v8/test/unittests/regress/regress-crbug-1041240-unittest.cc index 0f99632df5..e5b35152cf 100644 --- a/deps/v8/test/unittests/regress/regress-crbug-1041240-unittest.cc +++ b/deps/v8/test/unittests/regress/regress-crbug-1041240-unittest.cc @@ -12,8 +12,8 @@ namespace internal { using NewUninitializedFixedArrayTest = TestWithIsolateAndZone; TEST_F(NewUninitializedFixedArrayTest, ThrowOnNegativeLength) { - ASSERT_DEATH_IF_SUPPORTED({ factory()->NewUninitializedFixedArray(-1); }, - "Fatal javascript OOM in invalid array length"); + ASSERT_DEATH_IF_SUPPORTED({ factory()->NewFixedArray(-1); }, + "Fatal JavaScript invalid size error -1"); } } // namespace internal diff --git a/deps/v8/test/unittests/regress/regress-crbug-938251-unittest.cc b/deps/v8/test/unittests/regress/regress-crbug-938251-unittest.cc index c5109d92c5..62bcf89935 100644 --- a/deps/v8/test/unittests/regress/regress-crbug-938251-unittest.cc +++ b/deps/v8/test/unittests/regress/regress-crbug-938251-unittest.cc @@ -13,7 +13,7 @@ using NewFixedDoubleArrayTest = TestWithIsolateAndZone; TEST_F(NewFixedDoubleArrayTest, ThrowOnNegativeLength) { ASSERT_DEATH_IF_SUPPORTED({ factory()->NewFixedDoubleArray(-1); }, - "Fatal javascript OOM in invalid array length"); + "Fatal JavaScript invalid size error -1"); } } // namespace internal diff --git a/deps/v8/test/unittests/test-utils.cc b/deps/v8/test/unittests/test-utils.cc index 80a773ed7e..4aa9628b67 100644 --- a/deps/v8/test/unittests/test-utils.cc +++ b/deps/v8/test/unittests/test-utils.cc @@ -68,7 +68,7 @@ namespace internal { SaveFlags::SaveFlags() { // For each flag, save the current flag value. #define FLAG_MODE_APPLY(ftype, ctype, nam, def, cmt) SAVED_##nam = FLAG_##nam; -#include "src/flags/flag-definitions.h" // NOLINT +#include "src/flags/flag-definitions.h" #undef FLAG_MODE_APPLY } diff --git a/deps/v8/test/unittests/test-utils.h b/deps/v8/test/unittests/test-utils.h index 541574df6d..74eb1bad37 100644 --- a/deps/v8/test/unittests/test-utils.h +++ b/deps/v8/test/unittests/test-utils.h @@ -239,7 +239,7 @@ class V8_NODISCARD SaveFlags { private: #define FLAG_MODE_APPLY(ftype, ctype, nam, def, cmt) ctype SAVED_##nam; -#include "src/flags/flag-definitions.h" // NOLINT +#include "src/flags/flag-definitions.h" #undef FLAG_MODE_APPLY }; diff --git a/deps/v8/test/unittests/unittests.status b/deps/v8/test/unittests/unittests.status index 9acc942ea5..c10f1a2827 100644 --- a/deps/v8/test/unittests/unittests.status +++ b/deps/v8/test/unittests/unittests.status @@ -4,12 +4,6 @@ [ ############################################################################## -[ALWAYS, { - # https://crbug.com/v8/11413 - 'RuntimeCallStatsTest.GarbageCollection': [PASS, ['verify_csa', SKIP]], -}], # ALWAYS - -############################################################################## ['system == macos and asan', { # BUG(820416). 'BitsDeathTest*': [SKIP], @@ -35,9 +29,6 @@ # Test uses fancy signal handling. Needs investigation. 'MemoryAllocationPermissionsTest.DoTest': [SKIP], - # cppgc::internal::kGuardPageSize is smaller than kAppleArmPageSize. - 'PageMemoryRegionTest.PlatformUsesGuardPages': [FAIL], - # Time tick resolution appears to be ~42 microseconds. Tests expect 1 us. 'TimeTicks.NowResolution': [FAIL], 'RuntimeCallStatsTest.BasicJavaScript': [SKIP], @@ -94,4 +85,34 @@ 'LoggingTest.SourceLocation':[SKIP] # issue-174 }], +################################################################################ +['third_party_heap', { + # Tests on OptimizingCompileDispatcher + 'OptimizingCompileDispatcherTest.NonBlockingFlush': [SKIP], + 'OptimizingCompileDispatcherTest.Construct': [SKIP], + # Test V8 stock GC + 'SpacesTest.CompactionSpaceMerge': [SKIP], + # Requires --concurrent_inlining / --finalize_streaming_on_background: + 'LocalFactoryTest.AstConsString_CreatesConsString': [SKIP], + 'LocalFactoryTest.AstRawString_IsInternalized': [SKIP], + 'LocalFactoryTest.EagerFunction': [SKIP], + 'LocalFactoryTest.EmptyScript': [SKIP], + 'LocalFactoryTest.GCDuringPublish': [SKIP], + 'LocalFactoryTest.ImplicitNameFunction': [SKIP], + 'LocalFactoryTest.LazyFunction': [SKIP], + 'LocalFactoryTest.OneByteInternalizedString_DuplicateIsDeduplicated': [SKIP], + 'LocalFactoryTest.OneByteInternalizedString_IsAddedToStringTable': [SKIP], + # Requires write barriers + 'SpacesTest.WriteBarrierFromHeapObject': [SKIP], + 'SpacesTest.WriteBarrierInYoungGenerationToSpace': [SKIP], + 'SpacesTest.WriteBarrierInYoungGenerationFromSpace': [SKIP], + # Requires a second isolate + 'ValueSerializerTest.DecodeArrayBufferOOM': [SKIP], + # Performs GC + 'APIExceptionTest.ExceptionMessageDoesNotKeepContextAlive': [SKIP], + 'LocalHeapTest.GCEpilogue': [SKIP], + 'UnifiedHeapDetachedTest.AllocationBeforeConfigureHeap': [SKIP], + 'UnifiedHeapTest.FindingV8ToBlinkReference': [SKIP], +}], # third_party_heap + ] diff --git a/deps/v8/test/unittests/utils/allocation-unittest.cc b/deps/v8/test/unittests/utils/allocation-unittest.cc index 8110b1f2cd..ac72ab38f1 100644 --- a/deps/v8/test/unittests/utils/allocation-unittest.cc +++ b/deps/v8/test/unittests/utils/allocation-unittest.cc @@ -7,8 +7,8 @@ #if V8_OS_POSIX #include <setjmp.h> #include <signal.h> -#include <unistd.h> // NOLINT -#endif // V8_OS_POSIX +#include <unistd.h> +#endif // V8_OS_POSIX #include "testing/gtest/include/gtest/gtest.h" diff --git a/deps/v8/test/unittests/wasm/function-body-decoder-unittest.cc b/deps/v8/test/unittests/wasm/function-body-decoder-unittest.cc index 5dff8b6b87..7dbb0e91d0 100644 --- a/deps/v8/test/unittests/wasm/function-body-decoder-unittest.cc +++ b/deps/v8/test/unittests/wasm/function-body-decoder-unittest.cc @@ -158,19 +158,20 @@ class TestModuleBuilder { } byte AddPassiveElementSegment(wasm::ValueType type) { - mod.elem_segments.emplace_back(false); + mod.elem_segments.emplace_back(type, false); auto& init = mod.elem_segments.back(); - init.type = type; // Add 5 empty elements. for (uint32_t j = 0; j < 5; j++) { - init.entries.push_back(WasmElemSegment::kNullIndex); + init.entries.push_back( + WasmInitExpr::RefNullConst(type.heap_representation())); } return static_cast<byte>(mod.elem_segments.size() - 1); } byte AddDeclarativeElementSegment() { - mod.elem_segments.emplace_back(true); - mod.elem_segments.back().entries.push_back(WasmElemSegment::kNullIndex); + mod.elem_segments.emplace_back(kWasmFuncRef, true); + mod.elem_segments.back().entries.push_back( + WasmInitExpr::RefNullConst(HeapType::kFunc)); return static_cast<byte>(mod.elem_segments.size() - 1); } @@ -1796,7 +1797,6 @@ TEST_F(FunctionBodyDecoderTest, IncompleteIndirectReturnCall) { } TEST_F(FunctionBodyDecoderTest, MultiReturn) { - WASM_FEATURE_SCOPE(mv); ValueType storage[] = {kWasmI32, kWasmI32}; FunctionSig sig_ii_v(2, 0, storage); FunctionSig sig_v_ii(0, 2, storage); @@ -1810,7 +1810,6 @@ TEST_F(FunctionBodyDecoderTest, MultiReturn) { } TEST_F(FunctionBodyDecoderTest, MultiReturnType) { - WASM_FEATURE_SCOPE(mv); for (size_t a = 0; a < arraysize(kValueTypes); a++) { for (size_t b = 0; b < arraysize(kValueTypes); b++) { for (size_t c = 0; c < arraysize(kValueTypes); c++) { @@ -1916,6 +1915,50 @@ TEST_F(FunctionBodyDecoderTest, IndirectCallsWithMismatchedSigs2) { "call_indirect: immediate table #1 is not of a function type"); } +TEST_F(FunctionBodyDecoderTest, TablesWithFunctionSubtyping) { + WASM_FEATURE_SCOPE(reftypes); + WASM_FEATURE_SCOPE(typed_funcref); + WASM_FEATURE_SCOPE(gc); + EXPERIMENTAL_FLAG_SCOPE(gc); + + byte empty_struct = builder.AddStruct({}); + byte super_struct = builder.AddStruct({F(kWasmI32, false)}); + byte sub_struct = builder.AddStruct({F(kWasmI32, false), F(kWasmF64, false)}); + + byte table_type = builder.AddSignature( + FunctionSig::Build(zone(), {ValueType::Ref(super_struct, kNullable)}, + {ValueType::Ref(sub_struct, kNullable)})); + byte table_supertype = builder.AddSignature( + FunctionSig::Build(zone(), {ValueType::Ref(empty_struct, kNullable)}, + {ValueType::Ref(sub_struct, kNullable)})); + auto function_sig = + FunctionSig::Build(zone(), {ValueType::Ref(sub_struct, kNullable)}, + {ValueType::Ref(super_struct, kNullable)}); + byte function_type = builder.AddSignature(function_sig); + + byte function = builder.AddFunction(function_sig); + + byte table = builder.InitializeTable(ValueType::Ref(table_type, kNullable)); + + // We can call-indirect from a typed function table with an immediate type + // that is a subtype of the table type. + ExpectValidates( + FunctionSig::Build(zone(), {ValueType::Ref(sub_struct, kNullable)}, {}), + {WASM_CALL_INDIRECT_TABLE( + table, function_type, + WASM_STRUCT_NEW_DEFAULT(super_struct, WASM_RTT_CANON(super_struct)), + WASM_ZERO)}); + + // table.set's subtyping works as expected. + ExpectValidates(sigs.v_i(), {WASM_TABLE_SET(0, WASM_LOCAL_GET(0), + WASM_REF_FUNC(function))}); + // table.get's subtyping works as expected. + ExpectValidates( + FunctionSig::Build(zone(), {ValueType::Ref(table_supertype, kNullable)}, + {kWasmI32}), + {WASM_TABLE_GET(0, WASM_LOCAL_GET(0))}); +} + TEST_F(FunctionBodyDecoderTest, IndirectCallsWithoutTableCrash) { const FunctionSig* sig = sigs.i_i(); @@ -2602,6 +2645,29 @@ TEST_F(FunctionBodyDecoderTest, BrTable2b) { WASM_I32V_2(67), 1, BR_TARGET(0), BR_TARGET(1))))}); } +TEST_F(FunctionBodyDecoderTest, BrTableSubtyping) { + WASM_FEATURE_SCOPE(reftypes); + WASM_FEATURE_SCOPE(typed_funcref); + WASM_FEATURE_SCOPE(gc); + + TestModuleBuilder builder; + byte supertype1 = builder.AddStruct({F(kWasmI8, true), F(kWasmI16, false)}); + byte supertype2 = builder.AddStruct({F(kWasmI8, true)}); + byte subtype = builder.AddStruct( + {F(kWasmI8, true), F(kWasmI16, false), F(kWasmI32, true)}); + module = builder.module(); + ExpectValidates( + sigs.v_v(), + {WASM_BLOCK_R( + wasm::ValueType::Ref(supertype1, kNonNullable), + WASM_BLOCK_R( + wasm::ValueType::Ref(supertype2, kNonNullable), + WASM_STRUCT_NEW_DEFAULT(subtype, WASM_RTT_CANON(subtype)), + WASM_BR_TABLE(WASM_I32V(5), 1, BR_TARGET(0), BR_TARGET(1))), + WASM_UNREACHABLE), + WASM_DROP}); +} + TEST_F(FunctionBodyDecoderTest, BrTable_off_end) { static byte code[] = {B1(WASM_BR_TABLE(WASM_LOCAL_GET(0), 0, BR_TARGET(0)))}; for (size_t len = 1; len < sizeof(code); len++) { @@ -2957,7 +3023,6 @@ TEST_F(FunctionBodyDecoderTest, TryDelegate) { #undef WASM_TRY_OP TEST_F(FunctionBodyDecoderTest, MultiValBlock1) { - WASM_FEATURE_SCOPE(mv); byte sig0 = builder.AddSignature(sigs.ii_v()); ExpectValidates( sigs.i_ii(), @@ -2975,7 +3040,6 @@ TEST_F(FunctionBodyDecoderTest, MultiValBlock1) { } TEST_F(FunctionBodyDecoderTest, MultiValBlock2) { - WASM_FEATURE_SCOPE(mv); byte sig0 = builder.AddSignature(sigs.ii_v()); ExpectValidates(sigs.i_ii(), {WASM_BLOCK_X(sig0, WASM_LOCAL_GET(0), WASM_LOCAL_GET(1)), @@ -2994,7 +3058,6 @@ TEST_F(FunctionBodyDecoderTest, MultiValBlock2) { } TEST_F(FunctionBodyDecoderTest, MultiValBlockBr) { - WASM_FEATURE_SCOPE(mv); byte sig0 = builder.AddSignature(sigs.ii_v()); ExpectFailure(sigs.i_ii(), {WASM_BLOCK_X(sig0, WASM_LOCAL_GET(0), WASM_BR(0)), kExprI32Add}); @@ -3004,7 +3067,6 @@ TEST_F(FunctionBodyDecoderTest, MultiValBlockBr) { } TEST_F(FunctionBodyDecoderTest, MultiValLoop1) { - WASM_FEATURE_SCOPE(mv); byte sig0 = builder.AddSignature(sigs.ii_v()); ExpectValidates( sigs.i_ii(), @@ -3021,7 +3083,6 @@ TEST_F(FunctionBodyDecoderTest, MultiValLoop1) { } TEST_F(FunctionBodyDecoderTest, MultiValIf) { - WASM_FEATURE_SCOPE(mv); byte sig0 = builder.AddSignature(sigs.ii_v()); ExpectValidates( sigs.i_ii(), @@ -3081,7 +3142,6 @@ TEST_F(FunctionBodyDecoderTest, MultiValIf) { } TEST_F(FunctionBodyDecoderTest, BlockParam) { - WASM_FEATURE_SCOPE(mv); byte sig1 = builder.AddSignature(sigs.i_i()); byte sig2 = builder.AddSignature(sigs.i_ii()); ExpectValidates( @@ -3108,7 +3168,6 @@ TEST_F(FunctionBodyDecoderTest, BlockParam) { } TEST_F(FunctionBodyDecoderTest, LoopParam) { - WASM_FEATURE_SCOPE(mv); byte sig1 = builder.AddSignature(sigs.i_i()); byte sig2 = builder.AddSignature(sigs.i_ii()); ExpectValidates(sigs.i_ii(), {WASM_LOCAL_GET(0), @@ -3134,7 +3193,6 @@ TEST_F(FunctionBodyDecoderTest, LoopParam) { } TEST_F(FunctionBodyDecoderTest, LoopParamBr) { - WASM_FEATURE_SCOPE(mv); byte sig1 = builder.AddSignature(sigs.i_i()); byte sig2 = builder.AddSignature(sigs.i_ii()); ExpectValidates(sigs.i_ii(), @@ -3156,7 +3214,6 @@ TEST_F(FunctionBodyDecoderTest, LoopParamBr) { } TEST_F(FunctionBodyDecoderTest, IfParam) { - WASM_FEATURE_SCOPE(mv); byte sig1 = builder.AddSignature(sigs.i_i()); byte sig2 = builder.AddSignature(sigs.i_ii()); ExpectValidates(sigs.i_ii(), @@ -3785,7 +3842,32 @@ TEST_F(FunctionBodyDecoderTest, BrOnNull) { WASM_I32V(0), kExprSelectWithType, 1, WASM_REF_TYPE(reps[0]))}, kAppendEnd, - "expected 1 elements on the stack for br to @1, found 0"); + "expected 1 elements on the stack for branch, found 0"); +} + +TEST_F(FunctionBodyDecoderTest, BrOnNonNull) { + WASM_FEATURE_SCOPE(reftypes); + WASM_FEATURE_SCOPE(typed_funcref); + WASM_FEATURE_SCOPE(gc); + + const ValueType reps[] = {ValueType::Ref(HeapType::kFunc, kNonNullable), + ValueType::Ref(HeapType::kFunc, kNullable)}; + const FunctionSig sig(1, 1, reps); + ExpectValidates( + &sig, + {WASM_BLOCK_R(reps[0], WASM_BR_ON_NON_NULL(0, WASM_LOCAL_GET(0)), + WASM_RETURN(WASM_REF_AS_NON_NULL(WASM_LOCAL_GET(0))))}); + + // Wrong branch type. + ExpectFailure( + &sig, + {WASM_BLOCK_I(WASM_BR_ON_NON_NULL(0, WASM_LOCAL_GET(0)), + WASM_RETURN(WASM_REF_AS_NON_NULL(WASM_LOCAL_GET(0))))}, + kAppendEnd, "type error in branch[0] (expected i32, got (ref func))"); + + // br_on_non_null does not leave a value on the stack. + ExpectFailure(&sig, {WASM_BR_ON_NON_NULL(0, WASM_LOCAL_GET(0))}, kAppendEnd, + "expected 1 elements on the stack for fallthru, found 0"); } TEST_F(FunctionBodyDecoderTest, GCStruct) { @@ -3824,8 +3906,7 @@ TEST_F(FunctionBodyDecoderTest, GCStruct) { &sig_r_v, {WASM_STRUCT_NEW_WITH_RTT(struct_type_index, WASM_I32V(0), WASM_I32V(1), WASM_RTT_CANON(struct_type_index))}, - kAppendEnd, - "expected 1 elements on the stack for fallthru to @1, found 2"); + kAppendEnd, "expected 1 elements on the stack for fallthru, found 2"); // Mistyped arguments. ExpectFailure(&sig_v_r, {WASM_STRUCT_NEW_WITH_RTT(struct_type_index, WASM_LOCAL_GET(0), @@ -3871,7 +3952,7 @@ TEST_F(FunctionBodyDecoderTest, GCStruct) { ExpectFailure( &sig_f_r, {WASM_STRUCT_GET(struct_type_index, field_index, WASM_LOCAL_GET(0))}, - kAppendEnd, "type error in merge[0] (expected f32, got i32)"); + kAppendEnd, "type error in fallthru[0] (expected f32, got i32)"); /** struct.set **/ ExpectValidates(&sig_v_r, {WASM_STRUCT_SET(struct_type_index, field_index, @@ -3897,7 +3978,7 @@ TEST_F(FunctionBodyDecoderTest, GCStruct) { {WASM_STRUCT_SET(struct_type_index, field_index, WASM_LOCAL_GET(0), WASM_I32V(0))}, kAppendEnd, - "expected 1 elements on the stack for fallthru to @1, found 0"); + "expected 1 elements on the stack for fallthru, found 0"); // Setting immutable field. ExpectFailure( sigs.v_v(), @@ -4007,7 +4088,7 @@ TEST_F(FunctionBodyDecoderTest, GCArray) { ExpectFailure( &sig_f_r, {WASM_ARRAY_GET(array_type_index, WASM_LOCAL_GET(0), WASM_I32V(5))}, - kAppendEnd, "type error in merge[0] (expected f32, got funcref)"); + kAppendEnd, "type error in fallthru[0] (expected f32, got funcref)"); // array.get_s/u fail. ExpectFailure( @@ -4056,7 +4137,8 @@ TEST_F(FunctionBodyDecoderTest, GCArray) { {WASM_ARRAY_LEN(array_type_index, WASM_LOCAL_GET(0))}); // Wrong return type. ExpectFailure(&sig_f_r, {WASM_ARRAY_LEN(array_type_index, WASM_LOCAL_GET(0))}, - kAppendEnd, "type error in merge[0] (expected f32, got i32)"); + kAppendEnd, + "type error in fallthru[0] (expected f32, got i32)"); // Non-array type index. ExpectFailure(&sig_i_r, {WASM_ARRAY_LEN(struct_type_index, WASM_LOCAL_GET(0))}, @@ -4178,7 +4260,7 @@ TEST_F(FunctionBodyDecoderTest, RttCanon) { ValueType rtt2 = ValueType::Rtt(type_index, 1); FunctionSig sig2(1, 0, &rtt2); ExpectFailure(&sig2, {WASM_RTT_CANON(type_index)}, kAppendEnd, - "type error in merge[0]"); + "type error in fallthru[0]"); } } @@ -4249,7 +4331,6 @@ TEST_F(FunctionBodyDecoderTest, RefTestCast) { WASM_FEATURE_SCOPE(reftypes); WASM_FEATURE_SCOPE(typed_funcref); WASM_FEATURE_SCOPE(gc); - WASM_FEATURE_SCOPE(eh); TestModuleBuilder builder; module = builder.module(); @@ -4342,6 +4423,77 @@ TEST_F(FunctionBodyDecoderTest, RefTestCast) { "found i32.const of type i32"); } +TEST_F(FunctionBodyDecoderTest, BrOnCastOrCastFail) { + WASM_FEATURE_SCOPE(reftypes); + WASM_FEATURE_SCOPE(typed_funcref); + WASM_FEATURE_SCOPE(gc); + + TestModuleBuilder builder; + module = builder.module(); + + byte super_struct = builder.AddStruct({F(kWasmI16, true)}); + byte sub_struct = builder.AddStruct({F(kWasmI16, true), F(kWasmI32, false)}); + + ValueType supertype = ValueType::Ref(super_struct, kNullable); + ValueType subtype = ValueType::Ref(sub_struct, kNullable); + + ExpectValidates( + FunctionSig::Build(this->zone(), {kWasmI32, subtype}, {supertype}), + {WASM_I32V(42), WASM_LOCAL_GET(0), + WASM_BR_ON_CAST(0, WASM_RTT_CANON(sub_struct)), + WASM_RTT_CANON(sub_struct), WASM_GC_OP(kExprRefCast)}); + ExpectValidates( + FunctionSig::Build(this->zone(), {kWasmI32, supertype}, {supertype}), + {WASM_I32V(42), WASM_LOCAL_GET(0), + WASM_BR_ON_CAST_FAIL(0, WASM_RTT_CANON(sub_struct))}); + + // Wrong branch type. + ExpectFailure( + FunctionSig::Build(this->zone(), {}, {supertype}), + {WASM_LOCAL_GET(0), WASM_BR_ON_CAST(0, WASM_RTT_CANON(sub_struct)), + WASM_UNREACHABLE}, + kAppendEnd, "br_on_cast must target a branch of arity at least 1"); + ExpectFailure( + FunctionSig::Build(this->zone(), {subtype}, {supertype}), + {WASM_I32V(42), WASM_LOCAL_GET(0), + WASM_BR_ON_CAST_FAIL(0, WASM_RTT_CANON(sub_struct))}, + kAppendEnd, + "type error in branch[0] (expected (ref null 1), got (ref null 0))"); + + // Wrong fallthrough type. + ExpectFailure( + FunctionSig::Build(this->zone(), {subtype}, {supertype}), + {WASM_LOCAL_GET(0), WASM_BR_ON_CAST(0, WASM_RTT_CANON(sub_struct))}, + kAppendEnd, + "type error in fallthru[0] (expected (ref null 1), got (ref null 0))"); + ExpectFailure( + FunctionSig::Build(this->zone(), {supertype}, {supertype}), + {WASM_BLOCK_I(WASM_LOCAL_GET(0), + WASM_BR_ON_CAST_FAIL(0, WASM_RTT_CANON(sub_struct)))}, + kAppendEnd, "type error in branch[0] (expected i32, got (ref null 0))"); + + // Argument type error. + ExpectFailure( + FunctionSig::Build(this->zone(), {subtype}, {kWasmAnyRef}), + {WASM_LOCAL_GET(0), WASM_BR_ON_CAST(0, WASM_RTT_CANON(sub_struct)), + WASM_RTT_CANON(sub_struct), WASM_GC_OP(kExprRefCast)}, + kAppendEnd, + "br_on_cast[0] expected subtype of (ref null func) or (ref null data), " + "found local.get of type anyref"); + ExpectFailure( + FunctionSig::Build(this->zone(), {supertype}, {kWasmAnyRef}), + {WASM_LOCAL_GET(0), WASM_BR_ON_CAST_FAIL(0, WASM_RTT_CANON(sub_struct))}, + kAppendEnd, + "br_on_cast_fail[0] expected subtype of (ref null func) or (ref null " + "data), found local.get of type anyref"); + + // Trivial rtt type error. + ExpectFailure(FunctionSig::Build(this->zone(), {supertype}, {supertype}), + {WASM_LOCAL_GET(0), WASM_BR_ON_CAST_FAIL(0, WASM_I64V(42))}, + kAppendEnd, + "br_on_cast_fail[1] expected rtt, found i64.const of type i64"); +} + TEST_F(FunctionBodyDecoderTest, LocalTeeTyping) { WASM_FEATURE_SCOPE(reftypes); WASM_FEATURE_SCOPE(typed_funcref); diff --git a/deps/v8/test/unittests/wasm/module-decoder-unittest.cc b/deps/v8/test/unittests/wasm/module-decoder-unittest.cc index 3a9fec0c99..2547fe9a85 100644 --- a/deps/v8/test/unittests/wasm/module-decoder-unittest.cc +++ b/deps/v8/test/unittests/wasm/module-decoder-unittest.cc @@ -6,6 +6,7 @@ #include "src/handles/handles.h" #include "src/objects/objects-inl.h" +#include "src/wasm/branch-hint-map.h" #include "src/wasm/wasm-engine.h" #include "src/wasm/wasm-features.h" #include "src/wasm/wasm-limits.h" @@ -68,6 +69,11 @@ namespace module_decoder_unittest { 'H', 'i', 'n', 't', 's'), \ ADD_COUNT(__VA_ARGS__)) +#define SECTION_BRANCH_HINTS(...) \ + SECTION(Unknown, \ + ADD_COUNT('b', 'r', 'a', 'n', 'c', 'h', 'H', 'i', 'n', 't', 's'), \ + __VA_ARGS__) + #define FAIL_IF_NO_EXPERIMENTAL_EH(data) \ do { \ ModuleResult result = DecodeModule((data), (data) + sizeof((data))); \ @@ -897,6 +903,7 @@ TEST_F(WasmModuleVerifyTest, GlobalRttSubOfGlobalTypeError) { EXPECT_NOT_OK(result, "rtt.sub requires a supertype rtt on stack"); } +#if !V8_OS_FUCHSIA TEST_F(WasmModuleVerifyTest, GlobalRttSubIllegalParent) { WASM_FEATURE_SCOPE(reftypes); WASM_FEATURE_SCOPE(typed_funcref); @@ -910,6 +917,7 @@ TEST_F(WasmModuleVerifyTest, GlobalRttSubIllegalParent) { ModuleResult result = DecodeModule(data, data + sizeof(data)); EXPECT_NOT_OK(result, "rtt.sub requires a supertype rtt on stack"); } +#endif // !V8_OS_FUCHSIA TEST_F(WasmModuleVerifyTest, RttSubGlobalTypeError) { WASM_FEATURE_SCOPE(reftypes); @@ -1846,8 +1854,10 @@ TEST_F(WasmModuleVerifyTest, ElementSectionInitExternRefTableWithFuncRef) { ONE_EMPTY_BODY, }; - EXPECT_FAILURE_WITH_MSG( - data, "Invalid element segment. Table 0 is not a super-type of funcref"); + EXPECT_FAILURE_WITH_MSG(data, + "An active element segment with function indices as " + "elements must reference a table of type funcref. " + "Instead, table 0 of type externref is referenced."); } TEST_F(WasmModuleVerifyTest, ElementSectionDontInitExternRefImportedTable) { @@ -1895,6 +1905,17 @@ TEST_F(WasmModuleVerifyTest, ElementSectionDontInitExternRefImportedTable) { EXPECT_FAILURE(data); } +TEST_F(WasmModuleVerifyTest, ElementSectionGlobalGetOutOfBounds) { + WASM_FEATURE_SCOPE(reftypes); + static const byte data[] = { + SECTION(Element, ENTRY_COUNT(1), + 0x05, // Mode: Passive with expressions-as-elements + kFuncRefCode, // type + ENTRY_COUNT(1), // element count + kExprGlobalGet, 0x00, kExprEnd)}; // init. expression + EXPECT_FAILURE_WITH_MSG(data, "Out-of-bounds global index 0"); +} + TEST_F(WasmModuleVerifyTest, IndirectFunctionNoFunctions) { static const byte data[] = { // sig#0 ------------------------------------------------------- @@ -2094,6 +2115,30 @@ TEST_F(WasmModuleVerifyTest, TieringCompilationHints) { result.value()->compilation_hints[2].top_tier); } +TEST_F(WasmModuleVerifyTest, BranchHinting) { + WASM_FEATURE_SCOPE(branch_hinting); + static const byte data[] = { + TYPE_SECTION(1, SIG_ENTRY_v_v), FUNCTION_SECTION(2, 0, 0), + SECTION_BRANCH_HINTS(ENTRY_COUNT(2), 0 /*func_index*/, 0 /*reserved*/, + ENTRY_COUNT(1), 1 /*likely*/, 2 /* if offset*/, + 1 /*func_index*/, 0 /*reserved*/, ENTRY_COUNT(1), + 0 /*unlikely*/, 4 /* br_if offset*/), + SECTION(Code, ENTRY_COUNT(2), + ADD_COUNT(0, /*no locals*/ + WASM_IF(WASM_I32V_1(1), WASM_NOP), WASM_END), + ADD_COUNT(0, /*no locals*/ + WASM_BLOCK(WASM_BR_IF(0, WASM_I32V_1(1))), WASM_END))}; + + ModuleResult result = DecodeModule(data, data + sizeof(data)); + EXPECT_OK(result); + + EXPECT_EQ(2u, result.value()->branch_hints.size()); + EXPECT_EQ(WasmBranchHint::kLikely, + result.value()->branch_hints[0].GetHintFor(2)); + EXPECT_EQ(WasmBranchHint::kUnlikely, + result.value()->branch_hints[1].GetHintFor(4)); +} + class WasmSignatureDecodeTest : public TestWithZone { public: WasmFeatures enabled_features_ = WasmFeatures::None(); @@ -2162,7 +2207,6 @@ TEST_F(WasmSignatureDecodeTest, Ok_t_t) { TEST_F(WasmSignatureDecodeTest, Ok_i_tt) { WASM_FEATURE_SCOPE(reftypes); - WASM_FEATURE_SCOPE(mv); for (size_t i = 0; i < arraysize(kValueTypes); i++) { ValueTypePair p0_type = kValueTypes[i]; for (size_t j = 0; j < arraysize(kValueTypes); j++) { @@ -2182,7 +2226,6 @@ TEST_F(WasmSignatureDecodeTest, Ok_i_tt) { TEST_F(WasmSignatureDecodeTest, Ok_tt_tt) { WASM_FEATURE_SCOPE(reftypes); - WASM_FEATURE_SCOPE(mv); for (size_t i = 0; i < arraysize(kValueTypes); i++) { ValueTypePair p0_type = kValueTypes[i]; for (size_t j = 0; j < arraysize(kValueTypes); j++) { @@ -2212,12 +2255,8 @@ TEST_F(WasmSignatureDecodeTest, TooManyParams) { TEST_F(WasmSignatureDecodeTest, TooManyReturns) { for (int i = 0; i < 2; i++) { - bool enable_mv = i != 0; - WASM_FEATURE_SCOPE_VAL(mv, enable_mv); - const int max_return_count = static_cast<int>( - enable_mv ? kV8MaxWasmFunctionMultiReturns : kV8MaxWasmFunctionReturns); - byte data[] = {kWasmFunctionTypeCode, 0, WASM_I32V_3(max_return_count + 1), - kI32Code}; + byte data[] = {kWasmFunctionTypeCode, 0, + WASM_I32V_3(kV8MaxWasmFunctionReturns + 1), kI32Code}; const FunctionSig* sig = DecodeSig(data, data + sizeof(data)); EXPECT_EQ(nullptr, sig); } diff --git a/deps/v8/test/unittests/wasm/subtyping-unittest.cc b/deps/v8/test/unittests/wasm/subtyping-unittest.cc index d06b4d675b..c7a5470ca1 100644 --- a/deps/v8/test/unittests/wasm/subtyping-unittest.cc +++ b/deps/v8/test/unittests/wasm/subtyping-unittest.cc @@ -3,6 +3,7 @@ // found in the LICENSE file. #include "src/wasm/wasm-subtyping.h" +#include "test/common/wasm/flag-utils.h" #include "test/unittests/test-utils.h" namespace v8 { @@ -33,6 +34,13 @@ void DefineArray(WasmModule* module, FieldInit element_type) { element_type.first, element_type.second)); } +void DefineSignature(WasmModule* module, + std::initializer_list<ValueType> params, + std::initializer_list<ValueType> returns) { + module->add_signature( + FunctionSig::Build(module->signature_zone.get(), returns, params)); +} + TEST_F(WasmSubtypingTest, Subtyping) { v8::internal::AccountingAllocator allocator; WasmModule module1_(std::make_unique<Zone>(&allocator, ZONE_NAME)); @@ -43,128 +51,168 @@ TEST_F(WasmSubtypingTest, Subtyping) { // Set up two identical modules. for (WasmModule* module : {module1, module2}) { - /* 0 */ DefineStruct(module, {mut(ref(2)), immut(optRef(2))}); - /* 1 */ DefineStruct(module, {mut(ref(2)), immut(ref(2))}); - /* 2 */ DefineArray(module, immut(ref(0))); - /* 3 */ DefineArray(module, immut(ref(1))); - /* 4 */ DefineStruct(module, {mut(ref(2)), immut(ref(3)), immut(kWasmF64)}); - /* 5 */ DefineStruct(module, {mut(optRef(2)), immut(ref(2))}); - /* 6 */ DefineArray(module, mut(kWasmI32)); - /* 7 */ DefineArray(module, immut(kWasmI32)); - /* 8 */ DefineStruct(module, {mut(kWasmI32), immut(optRef(8))}); - /* 9 */ DefineStruct(module, {mut(kWasmI32), immut(optRef(8))}); + /* 0 */ DefineStruct(module, {mut(ref(2)), immut(optRef(2))}); + /* 1 */ DefineStruct(module, {mut(ref(2)), immut(ref(2))}); + /* 2 */ DefineArray(module, immut(ref(0))); + /* 3 */ DefineArray(module, immut(ref(1))); + /* 4 */ DefineStruct(module, + {mut(ref(2)), immut(ref(3)), immut(kWasmF64)}); + /* 5 */ DefineStruct(module, {mut(optRef(2)), immut(ref(2))}); + /* 6 */ DefineArray(module, mut(kWasmI32)); + /* 7 */ DefineArray(module, immut(kWasmI32)); + /* 8 */ DefineStruct(module, {mut(kWasmI32), immut(optRef(8))}); + /* 9 */ DefineStruct(module, {mut(kWasmI32), immut(optRef(8))}); + /* 10 */ DefineSignature(module, {}, {}); + /* 11 */ DefineSignature(module, {kWasmI32}, {kWasmI32}); + /* 12 */ DefineSignature(module, {kWasmI32, kWasmI32}, {kWasmI32}); + /* 13 */ DefineSignature(module, {ref(1)}, {kWasmI32}); + /* 14 */ DefineSignature(module, {ref(0)}, {kWasmI32}); + /* 15 */ DefineSignature(module, {ref(0)}, {ref(4)}); + /* 16 */ DefineSignature(module, {ref(0)}, {ref(0)}); } ValueType numeric_types[] = {kWasmI32, kWasmI64, kWasmF32, kWasmF64, kWasmS128}; - ValueType ref_types[] = { - kWasmExternRef, kWasmFuncRef, kWasmEqRef, kWasmI31Ref, kWasmDataRef, - kWasmAnyRef, optRef(0), ref(0), optRef(2), ref(2)}; + ValueType ref_types[] = {kWasmExternRef, kWasmFuncRef, kWasmEqRef, + kWasmI31Ref, kWasmDataRef, kWasmAnyRef, + optRef(0), ref(0), optRef(2), + ref(2), optRef(11), ref(11)}; + +#define SUBTYPE(type1, type2) \ + EXPECT_TRUE(IsSubtypeOf(type1, type2, module1, module)) +#define NOT_SUBTYPE(type1, type2) \ + EXPECT_FALSE(IsSubtypeOf(type1, type2, module1, module)) +#define SUBTYPE_IFF(type1, type2, condition) \ + EXPECT_EQ(IsSubtypeOf(type1, type2, module1, module), condition) // Type judgements across modules should work the same as within one module. for (WasmModule* module : {module1, module2}) { // Value types are unrelated, except if they are equal. for (ValueType subtype : numeric_types) { for (ValueType supertype : numeric_types) { - EXPECT_EQ(IsSubtypeOf(subtype, supertype, module1, module), - subtype == supertype); + SUBTYPE_IFF(subtype, supertype, subtype == supertype); } } // Value types are unrelated with reference types. for (ValueType value_type : numeric_types) { for (ValueType ref_type : ref_types) { - EXPECT_TRUE(!IsSubtypeOf(value_type, ref_type, module1, module)); - EXPECT_TRUE(!IsSubtypeOf(ref_type, value_type, module1, module)); + NOT_SUBTYPE(value_type, ref_type); + NOT_SUBTYPE(ref_type, value_type); } } for (ValueType ref_type : ref_types) { // Concrete reference types, i31ref and dataref are subtypes of eqref, - // externref/funcref/anyref are not. - EXPECT_EQ(IsSubtypeOf(ref_type, kWasmEqRef, module1, module), - ref_type != kWasmFuncRef && ref_type != kWasmExternRef && - ref_type != kWasmAnyRef); + // externref/funcref/anyref/functions are not. + SUBTYPE_IFF(ref_type, kWasmEqRef, + ref_type != kWasmFuncRef && ref_type != kWasmExternRef && + ref_type != kWasmAnyRef && ref_type != optRef(11) && + ref_type != ref(11)); // Non-nullable struct/array types are subtypes of dataref. - EXPECT_EQ(IsSubtypeOf(ref_type, kWasmDataRef, module1, module), - ref_type == kWasmDataRef || - (ref_type.kind() == kRef && ref_type.has_index())); + SUBTYPE_IFF( + ref_type, kWasmDataRef, + ref_type == kWasmDataRef || ref_type == ref(0) || ref_type == ref(2)); + // Functions are subtypes of funcref. + SUBTYPE_IFF(ref_type, kWasmFuncRef, + ref_type == kWasmFuncRef || ref_type == optRef(11) || + ref_type == ref(11)); // Each reference type is a subtype of itself. - EXPECT_TRUE(IsSubtypeOf(ref_type, ref_type, module1, module)); + SUBTYPE(ref_type, ref_type); // Each reference type is a subtype of anyref. - EXPECT_TRUE(IsSubtypeOf(ref_type, kWasmAnyRef, module1, module)); + SUBTYPE(ref_type, kWasmAnyRef); // Only anyref is a subtype of anyref. - EXPECT_EQ(IsSubtypeOf(kWasmAnyRef, ref_type, module1, module), - ref_type == kWasmAnyRef); + SUBTYPE_IFF(kWasmAnyRef, ref_type, ref_type == kWasmAnyRef); } // The rest of ref. types are unrelated. for (ValueType type_1 : {kWasmExternRef, kWasmFuncRef, kWasmI31Ref}) { for (ValueType type_2 : {kWasmExternRef, kWasmFuncRef, kWasmI31Ref}) { - EXPECT_EQ(IsSubtypeOf(type_1, type_2, module1, module), - type_1 == type_2); + SUBTYPE_IFF(type_1, type_2, type_1 == type_2); } } // Unrelated refs are unrelated. - EXPECT_TRUE(!IsSubtypeOf(ref(0), ref(2), module1, module)); - EXPECT_TRUE(!IsSubtypeOf(optRef(3), optRef(1), module1, module)); + NOT_SUBTYPE(ref(0), ref(2)); + NOT_SUBTYPE(optRef(3), optRef(1)); // ref is a subtype of optref for the same struct/array. - EXPECT_TRUE(IsSubtypeOf(ref(0), optRef(0), module1, module)); - EXPECT_TRUE(IsSubtypeOf(ref(2), optRef(2), module1, module)); + SUBTYPE(ref(0), optRef(0)); + SUBTYPE(ref(2), optRef(2)); // optref is not a subtype of ref for the same struct/array. - EXPECT_TRUE(!IsSubtypeOf(optRef(0), ref(0), module1, module)); - EXPECT_TRUE(!IsSubtypeOf(optRef(2), ref(2), module1, module)); + NOT_SUBTYPE(optRef(0), ref(0)); + NOT_SUBTYPE(optRef(2), ref(2)); // ref is a subtype of optref if the same is true for the underlying // structs/arrays. - EXPECT_TRUE(IsSubtypeOf(ref(3), optRef(2), module1, module)); + SUBTYPE(ref(3), optRef(2)); // Prefix subtyping for structs. - EXPECT_TRUE(IsSubtypeOf(optRef(4), optRef(0), module1, module)); + SUBTYPE(optRef(4), optRef(0)); // Mutable fields are invariant. - EXPECT_TRUE(!IsSubtypeOf(ref(0), ref(5), module1, module)); + NOT_SUBTYPE(ref(0), ref(5)); // Immutable fields are covariant. - EXPECT_TRUE(IsSubtypeOf(ref(1), ref(0), module1, module)); + SUBTYPE(ref(1), ref(0)); // Prefix subtyping + immutable field covariance for structs. - EXPECT_TRUE(IsSubtypeOf(optRef(4), optRef(1), module1, module)); + SUBTYPE(optRef(4), optRef(1)); // No subtyping between mutable/immutable fields. - EXPECT_TRUE(!IsSubtypeOf(ref(7), ref(6), module1, module)); - EXPECT_TRUE(!IsSubtypeOf(ref(6), ref(7), module1, module)); + NOT_SUBTYPE(ref(7), ref(6)); + NOT_SUBTYPE(ref(6), ref(7)); // Recursive types. - EXPECT_TRUE(IsSubtypeOf(ref(9), ref(8), module1, module)); + SUBTYPE(ref(9), ref(8)); // Identical rtts are subtypes of each other. - EXPECT_TRUE(IsSubtypeOf(ValueType::Rtt(5, 3), ValueType::Rtt(5, 3), module1, - module2)); - EXPECT_TRUE( - IsSubtypeOf(ValueType::Rtt(5), ValueType::Rtt(5), module1, module2)); + SUBTYPE(ValueType::Rtt(5, 3), ValueType::Rtt(5, 3)); + SUBTYPE(ValueType::Rtt(5), ValueType::Rtt(5)); // Rtts of unrelated types are unrelated. - EXPECT_TRUE(!IsSubtypeOf(ValueType::Rtt(1, 1), ValueType::Rtt(2, 1), - module1, module2)); - EXPECT_TRUE( - !IsSubtypeOf(ValueType::Rtt(1), ValueType::Rtt(2), module1, module2)); - EXPECT_TRUE(!IsSubtypeOf(ValueType::Rtt(1, 0), ValueType::Rtt(2), module1, - module2)); + NOT_SUBTYPE(ValueType::Rtt(1, 1), ValueType::Rtt(2, 1)); + NOT_SUBTYPE(ValueType::Rtt(1), ValueType::Rtt(2)); + NOT_SUBTYPE(ValueType::Rtt(1, 0), ValueType::Rtt(2)); // Rtts of different depth are unrelated. - EXPECT_TRUE(!IsSubtypeOf(ValueType::Rtt(5, 1), ValueType::Rtt(5, 3), - module1, module2)); - EXPECT_TRUE(!IsSubtypeOf(ValueType::Rtt(5, 8), ValueType::Rtt(5, 3), - module1, module2)); + NOT_SUBTYPE(ValueType::Rtt(5, 1), ValueType::Rtt(5, 3)); + NOT_SUBTYPE(ValueType::Rtt(5, 8), ValueType::Rtt(5, 3)); // Rtts of identical types are subtype-related. - EXPECT_TRUE(IsSubtypeOf(ValueType::Rtt(8, 1), ValueType::Rtt(9, 1), module1, - module)); - EXPECT_TRUE( - IsSubtypeOf(ValueType::Rtt(8), ValueType::Rtt(9), module1, module)); + SUBTYPE(ValueType::Rtt(8, 1), ValueType::Rtt(9, 1)); + SUBTYPE(ValueType::Rtt(8), ValueType::Rtt(9)); // Rtts of subtypes are not related. - EXPECT_TRUE(!IsSubtypeOf(ValueType::Rtt(1, 1), ValueType::Rtt(0, 1), - module1, module)); - EXPECT_TRUE( - !IsSubtypeOf(ValueType::Rtt(1), ValueType::Rtt(0), module1, module)); + NOT_SUBTYPE(ValueType::Rtt(1, 1), ValueType::Rtt(0, 1)); + NOT_SUBTYPE(ValueType::Rtt(1), ValueType::Rtt(0)); // rtt(t, d) <: rtt(t) for (uint8_t depth : {0, 1, 5}) { - EXPECT_TRUE(IsSubtypeOf(ValueType::Rtt(1, depth), ValueType::Rtt(1), - module1, module)); + SUBTYPE(ValueType::Rtt(1, depth), ValueType::Rtt(1)); + } + + // Function subtyping depends on the selected wasm features. + // Without wasm-gc: + + // Unrelated function types are unrelated. + NOT_SUBTYPE(ref(10), ref(11)); + // Function type with different parameter counts are unrelated. + NOT_SUBTYPE(ref(12), ref(11)); + // Parameter contravariance does not hold. + NOT_SUBTYPE(ref(14), ref(13)); + // Return type covariance does not hold. + NOT_SUBTYPE(ref(15), ref(16)); + // Only identical types are subtype-related. + SUBTYPE(ref(10), ref(10)); + SUBTYPE(ref(11), ref(11)); + + { + // With wasm-gc: + EXPERIMENTAL_FLAG_SCOPE(gc); + // Unrelated function types are unrelated. + NOT_SUBTYPE(ref(10), ref(11)); + // Function type with different parameter counts are unrelated. + NOT_SUBTYPE(ref(12), ref(11)); + // Parameter contravariance holds. + SUBTYPE(ref(14), ref(13)); + // Return type covariance holds. + SUBTYPE(ref(15), ref(16)); + // Identical types are subtype-related. + SUBTYPE(ref(10), ref(10)); + SUBTYPE(ref(11), ref(11)); } } +#undef SUBTYPE +#undef NOT_SUBTYPE +#undef SUBTYPE_IFF } } // namespace subtyping_unittest diff --git a/deps/v8/test/unittests/wasm/trap-handler-x64-unittest.cc b/deps/v8/test/unittests/wasm/trap-handler-x64-unittest.cc index 1d8efdae75..9feb50fd4f 100644 --- a/deps/v8/test/unittests/wasm/trap-handler-x64-unittest.cc +++ b/deps/v8/test/unittests/wasm/trap-handler-x64-unittest.cc @@ -246,7 +246,9 @@ class TrapHandlerTest : public TestWithIsolate, .Call(); EXPECT_TRUE(g_test_handler_executed); g_test_handler_executed = false; - if (check_wasm_flag) EXPECT_FALSE(GetThreadInWasmFlag()); + if (check_wasm_flag) { + EXPECT_FALSE(GetThreadInWasmFlag()); + } } bool test_handler_executed() { return g_test_handler_executed; } @@ -468,9 +470,11 @@ TEST_P(TrapHandlerTest, TestCrashInOtherThread) { } #endif +#if !V8_OS_FUCHSIA INSTANTIATE_TEST_SUITE_P(Traps, TrapHandlerTest, ::testing::Values(kDefault, kCallback), PrintTrapHandlerTestParam); +#endif // !V8_OS_FUCHSIA #undef __ } // namespace wasm diff --git a/deps/v8/test/wasm-api-tests/run-all-wasm-api-tests.cc b/deps/v8/test/wasm-api-tests/run-all-wasm-api-tests.cc index 1b1c94923a..35ba5c9e9a 100644 --- a/deps/v8/test/wasm-api-tests/run-all-wasm-api-tests.cc +++ b/deps/v8/test/wasm-api-tests/run-all-wasm-api-tests.cc @@ -3,6 +3,8 @@ // found in the LICENSE file. #include "include/v8.h" +#include "src/flags/flags.h" +#include "src/trap-handler/trap-handler.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -13,5 +15,12 @@ int main(int argc, char** argv) { testing::InitGoogleMock(&argc, argv); v8::V8::SetFlagsFromCommandLine(&argc, argv, true); v8::V8::InitializeExternalStartupData(argv[0]); + if (V8_TRAP_HANDLER_SUPPORTED && i::FLAG_wasm_trap_handler) { + constexpr bool use_default_trap_handler = true; + if (!v8::V8::EnableWebAssemblyTrapHandler(use_default_trap_handler)) { + FATAL("Could not register trap handler"); + } + } + return RUN_ALL_TESTS(); } diff --git a/deps/v8/test/wasm-api-tests/wasm-api-tests.status b/deps/v8/test/wasm-api-tests/wasm-api-tests.status index 6aa0f51011..e4b1703717 100644 --- a/deps/v8/test/wasm-api-tests/wasm-api-tests.status +++ b/deps/v8/test/wasm-api-tests/wasm-api-tests.status @@ -14,4 +14,12 @@ '*': [SKIP], # only relevant for mjsunit tests. }], +################################################################################ +['third_party_heap', { + # Requires a second isolate + 'WasmCapiTest.InstanceFinalization': [SKIP], + 'WasmCapiTest.MultiStoresOneThread': [SKIP], + 'WasmCapiTest.Threads': [SKIP], +}], # third_party_heap + ] diff --git a/deps/v8/test/wasm-js/tests.tar.gz.sha1 b/deps/v8/test/wasm-js/tests.tar.gz.sha1 index 63fbde0778..acb0eea357 100644 --- a/deps/v8/test/wasm-js/tests.tar.gz.sha1 +++ b/deps/v8/test/wasm-js/tests.tar.gz.sha1 @@ -1 +1 @@ -50b01d97338b464df8daa56355f83011930ec678
\ No newline at end of file +a7bba39e6681a1133de75369728aa8bdef23def1
\ No newline at end of file diff --git a/deps/v8/test/wasm-spec-tests/tests.tar.gz.sha1 b/deps/v8/test/wasm-spec-tests/tests.tar.gz.sha1 index 8390796a1a..1c06cef06e 100644 --- a/deps/v8/test/wasm-spec-tests/tests.tar.gz.sha1 +++ b/deps/v8/test/wasm-spec-tests/tests.tar.gz.sha1 @@ -1 +1 @@ -38fd550b9d30afab338b1902dbb78ce86500ad0f
\ No newline at end of file +053a8d8be450a2f85fa455404de33e91477b1586
\ No newline at end of file diff --git a/deps/v8/test/wasm-spec-tests/wasm-spec-tests.status b/deps/v8/test/wasm-spec-tests/wasm-spec-tests.status index 17e2d00c59..26271b058e 100644 --- a/deps/v8/test/wasm-spec-tests/wasm-spec-tests.status +++ b/deps/v8/test/wasm-spec-tests/wasm-spec-tests.status @@ -27,7 +27,6 @@ 'proposals/tail-call/exports': [FAIL], 'proposals/tail-call/func': [FAIL], 'proposals/tail-call/globals': [FAIL], - 'proposals/tail-call/imports': [FAIL], 'proposals/tail-call/linking': [FAIL], 'proposals/tail-call/type': [FAIL], 'proposals/tail-call/unreached-invalid': [FAIL], @@ -37,13 +36,9 @@ # TODO(v8:11401): Fix memory64 spec tests / the v8 implementation (whatever # is broken). - 'proposals/memory64/address64': [FAIL], 'proposals/memory64/data': [FAIL], 'proposals/memory64/elem': [FAIL], - 'proposals/memory64/float_memory64': [FAIL], 'proposals/memory64/imports': [FAIL], - 'proposals/memory64/memory64': [FAIL], - 'proposals/memory64/memory_trap64': [FAIL], }], # ALWAYS ['arch == arm and not simulator_run', { @@ -109,19 +104,6 @@ 'proposals/multi-value/conversions': [SKIP], 'proposals/reference-types/conversions': [SKIP], - 'f32': [SKIP], - 'f64': [SKIP], - 'proposals/multi-value/f64': [SKIP], - 'proposals/JS-BigInt-integration/f64': [SKIP], - 'proposals/JS-BigInt-integration/f32': [SKIP], - 'proposals/bulk-memory-operations/f32': [SKIP], - 'proposals/bulk-memory-operations/f64': [SKIP], - 'proposals/js-types/f32': [SKIP], - 'proposals/js-types/f64': [SKIP], - 'proposals/multi-value/f32': [SKIP], - 'proposals/reference-types/f32': [SKIP], - 'proposals/reference-types/f64': [SKIP], - # the following all fail w/ symptons captured in issue #166 'float_exprs': [SKIP], 'proposals/tail-call/conversions': [SKIP], @@ -198,8 +180,8 @@ }], ############################################################################## -['no_simd_sse == True', { +['no_simd_hardware == True', { 'proposals/simd/*': [SKIP], -}], # no_simd_sse == True +}], # no_simd_hardware == True ] diff --git a/deps/v8/third_party/google_benchmark/BUILD.gn b/deps/v8/third_party/google_benchmark/BUILD.gn new file mode 100644 index 0000000000..e746cc421a --- /dev/null +++ b/deps/v8/third_party/google_benchmark/BUILD.gn @@ -0,0 +1,75 @@ +# Copyright 2020 The V8 project authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("//build/config/gclient_args.gni") +import("../../gni/v8.gni") + +if (v8_enable_google_benchmark) { + config("benchmark_config") { + include_dirs = [ "src/include" ] + } + + source_set("google_benchmark") { + testonly = true + + public = [ "src/include/benchmark/benchmark.h" ] + + sources = [ + "src/src/arraysize.h", + "src/src/benchmark.cc", + "src/src/benchmark_api_internal.cc", + "src/src/benchmark_api_internal.h", + "src/src/benchmark_name.cc", + "src/src/benchmark_register.cc", + "src/src/benchmark_register.h", + "src/src/benchmark_runner.cc", + "src/src/benchmark_runner.h", + "src/src/check.h", + "src/src/colorprint.cc", + "src/src/colorprint.h", + "src/src/commandlineflags.cc", + "src/src/commandlineflags.h", + "src/src/complexity.cc", + "src/src/complexity.h", + "src/src/console_reporter.cc", + "src/src/counter.cc", + "src/src/counter.h", + "src/src/csv_reporter.cc", + "src/src/internal_macros.h", + "src/src/json_reporter.cc", + "src/src/log.h", + "src/src/mutex.h", + "src/src/perf_counters.cc", + "src/src/perf_counters.h", + "src/src/re.h", + "src/src/reporter.cc", + "src/src/sleep.cc", + "src/src/sleep.h", + "src/src/statistics.cc", + "src/src/statistics.h", + "src/src/string_util.cc", + "src/src/string_util.h", + "src/src/sysinfo.cc", + "src/src/thread_manager.h", + "src/src/thread_timer.h", + "src/src/timers.cc", + "src/src/timers.h", + ] + + all_dependent_configs = [ ":benchmark_config" ] + + defines = [ + # Tell google_benchmark to always use standard regular expressions. + "HAVE_GNU_POSIX_REGEX=0", + "HAVE_POSIX_REGEX=0", + "HAVE_STD_REGEX=1", + ] + } + + source_set("benchmark_main") { + testonly = true + sources = [ "src/src/benchmark_main.cc" ] + public_deps = [ ":google_benchmark" ] + } +} diff --git a/deps/v8/third_party/google_benchmark/OWNERS b/deps/v8/third_party/google_benchmark/OWNERS new file mode 100644 index 0000000000..d934f47fe1 --- /dev/null +++ b/deps/v8/third_party/google_benchmark/OWNERS @@ -0,0 +1,3 @@ +file:../../INFRA_OWNERS + +mlippautz@chromium.org diff --git a/deps/v8/third_party/google_benchmark/README.v8 b/deps/v8/third_party/google_benchmark/README.v8 new file mode 100644 index 0000000000..fe2ac187ac --- /dev/null +++ b/deps/v8/third_party/google_benchmark/README.v8 @@ -0,0 +1,21 @@ +Name: Google Benchmark +Short Name: benchmark +URL: https://github.com/google/benchmark +Version: unknown +License: Apache 2.0 +License File: NOT_SHIPPED +Security Critical: no + +Description: +A microbenchmark support library. + +To include this library in the V8 checkout, add the following clause to +your .gclient configuration. + + "custom_vars": { + "checkout_google_benchmark": True, + } + + +Local Additions: +* gn file for building in V8 diff --git a/deps/v8/third_party/googletest/BUILD.gn b/deps/v8/third_party/googletest/BUILD.gn index cfa9205547..4d393efd95 100644 --- a/deps/v8/third_party/googletest/BUILD.gn +++ b/deps/v8/third_party/googletest/BUILD.gn @@ -2,6 +2,8 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import("../../gni/v8.gni") + config("gtest_config") { visibility = [ ":*" ] # gmock also shares this config. @@ -49,8 +51,6 @@ config("gmock_config") { source_set("gtest") { testonly = true sources = [ - # TODO(crbug.com/829773): Remove this after transitioning off <tr1/tuple>. - "custom/gmock/internal/custom/gmock-port.h", "src/googletest/include/gtest/gtest-death-test.h", "src/googletest/include/gtest/gtest-matchers.h", "src/googletest/include/gtest/gtest-message.h", @@ -64,12 +64,9 @@ source_set("gtest") { "src/googletest/include/gtest/internal/gtest-death-test-internal.h", "src/googletest/include/gtest/internal/gtest-filepath.h", "src/googletest/include/gtest/internal/gtest-internal.h", - "src/googletest/include/gtest/internal/gtest-linked_ptr.h", - "src/googletest/include/gtest/internal/gtest-param-util-generated.h", "src/googletest/include/gtest/internal/gtest-param-util.h", "src/googletest/include/gtest/internal/gtest-port.h", "src/googletest/include/gtest/internal/gtest-string.h", - "src/googletest/include/gtest/internal/gtest-tuple.h", "src/googletest/include/gtest/internal/gtest-type-util.h", #"src/googletest/src/gtest-all.cc", # Not needed by our build. @@ -92,6 +89,15 @@ source_set("gtest") { configs -= [ "//build/config/compiler:chromium_code" ] configs += [ "//build/config/compiler:no_chromium_code" ] + # V8-only workaround for http://crbug.com/chromium/1191946. Ensures that + # googletest is compiled with the same visibility such as the rest of V8, see + # https://source.chromium.org/chromium/chromium/src/+/master:v8/gni/v8.gni + if ((is_posix || is_fuchsia) && + (v8_enable_backtrace || v8_monolithic || v8_expose_symbols)) { + configs -= [ "//build/config/gcc:symbol_visibility_hidden" ] + configs += [ "//build/config/gcc:symbol_visibility_default" ] + } + deps = [] if (is_fuchsia) { @@ -118,22 +124,16 @@ source_set("gmock") { "src/googlemock/include/gmock/gmock-actions.h", "src/googlemock/include/gmock/gmock-cardinalities.h", "src/googlemock/include/gmock/gmock-function-mocker.h", - "src/googlemock/include/gmock/gmock-generated-actions.h", - "src/googlemock/include/gmock/gmock-generated-nice-strict.h", "src/googlemock/include/gmock/gmock-matchers.h", "src/googlemock/include/gmock/gmock-more-actions.h", "src/googlemock/include/gmock/gmock-more-matchers.h", "src/googlemock/include/gmock/gmock-nice-strict.h", "src/googlemock/include/gmock/gmock-spec-builders.h", "src/googlemock/include/gmock/gmock.h", - "src/googlemock/include/gmock/internal/gmock-generated-internal-utils.h", "src/googlemock/include/gmock/internal/gmock-internal-utils.h", "src/googlemock/include/gmock/internal/gmock-port.h", "src/googlemock/include/gmock/internal/gmock-pp.h", - # gmock helpers. - "custom/gmock/internal/custom/gmock-port.h", - #"src/googlemock/src/gmock-all.cc", # Not needed by our build. "src/googlemock/src/gmock-cardinalities.cc", "src/googlemock/src/gmock-internal-utils.cc", @@ -142,10 +142,21 @@ source_set("gmock") { "src/googlemock/src/gmock.cc", ] + # V8-only workaround for http://crbug.com/chromium/1191946. Ensures that + # googletest is compiled with the same visibility such as the rest of V8, see + # https://source.chromium.org/chromium/chromium/src/+/master:v8/gni/v8.gni + if ((is_posix || is_fuchsia) && + (v8_enable_backtrace || v8_monolithic || v8_expose_symbols)) { + configs -= [ "//build/config/gcc:symbol_visibility_hidden" ] + configs += [ "//build/config/gcc:symbol_visibility_default" ] + } + public_configs = [ ":gmock_config", ":gtest_config", ] + + deps = [ ":gtest" ] } # Do NOT depend on this directly. Use //testing/gmock:gmock_main instead. @@ -153,5 +164,8 @@ source_set("gmock") { static_library("gmock_main") { testonly = true sources = [ "src/googlemock/src/gmock_main.cc" ] - deps = [ ":gmock" ] + deps = [ + ":gmock", + ":gtest", + ] } diff --git a/deps/v8/third_party/googletest/src/googletest/include/gtest/gtest_prod.h b/deps/v8/third_party/googletest/src/googletest/include/gtest/gtest_prod.h index e651671ebd..38b9d85a51 100644 --- a/deps/v8/third_party/googletest/src/googletest/include/gtest/gtest_prod.h +++ b/deps/v8/third_party/googletest/src/googletest/include/gtest/gtest_prod.h @@ -31,8 +31,8 @@ // Google C++ Testing and Mocking Framework definitions useful in production code. // GOOGLETEST_CM0003 DO NOT DELETE -#ifndef GTEST_INCLUDE_GTEST_GTEST_PROD_H_ -#define GTEST_INCLUDE_GTEST_GTEST_PROD_H_ +#ifndef GOOGLETEST_INCLUDE_GTEST_GTEST_PROD_H_ +#define GOOGLETEST_INCLUDE_GTEST_GTEST_PROD_H_ // When you need to test the private or protected members of a class, // use the FRIEND_TEST macro to declare your tests as friends of the @@ -58,4 +58,4 @@ #define FRIEND_TEST(test_case_name, test_name)\ friend class test_case_name##_##test_name##_Test -#endif // GTEST_INCLUDE_GTEST_GTEST_PROD_H_ +#endif // GOOGLETEST_INCLUDE_GTEST_GTEST_PROD_H_ diff --git a/deps/v8/third_party/inspector_protocol/BUILD.gn b/deps/v8/third_party/inspector_protocol/BUILD.gn index 880b651c09..94b7fe2677 100644 --- a/deps/v8/third_party/inspector_protocol/BUILD.gn +++ b/deps/v8/third_party/inspector_protocol/BUILD.gn @@ -5,7 +5,10 @@ import("../../gni/v8.gni") config("crdtp_config") { - visibility = [ "../../src/inspector:*", ":*" ] + visibility = [ + ":*", + "../../src/inspector:*", + ] configs = [ "../../:internal_config" ] include_dirs = [ "../../include" ] } @@ -46,6 +49,7 @@ v8_source_set("crdtp_platform") { "crdtp/json_platform_v8.cc", ] public_deps = [ "../..:v8_libbase" ] + deps = [ "../../:v8_internal_headers" ] configs = [ ":crdtp_config" ] } diff --git a/deps/v8/third_party/inspector_protocol/README.v8 b/deps/v8/third_party/inspector_protocol/README.v8 index 97bc1c3414..cc5e083c6a 100644 --- a/deps/v8/third_party/inspector_protocol/README.v8 +++ b/deps/v8/third_party/inspector_protocol/README.v8 @@ -2,7 +2,7 @@ Name: inspector protocol Short Name: inspector_protocol URL: https://chromium.googlesource.com/deps/inspector_protocol/ Version: 0 -Revision: 94298cef795ec994106bdaff002c41182911b767 +Revision: 35e8d2d89cb017d72cf905362672de77c978e1e6 License: BSD License File: LICENSE Security Critical: no diff --git a/deps/v8/third_party/inspector_protocol/crdtp/serializable.cc b/deps/v8/third_party/inspector_protocol/crdtp/serializable.cc index 20de53ecc0..7a21ffd35f 100644 --- a/deps/v8/third_party/inspector_protocol/crdtp/serializable.cc +++ b/deps/v8/third_party/inspector_protocol/crdtp/serializable.cc @@ -4,6 +4,8 @@ #include "serializable.h" +#include <utility> + namespace v8_crdtp { // ============================================================================= // Serializable - An object to be emitted as a sequence of bytes. @@ -18,7 +20,8 @@ std::vector<uint8_t> Serializable::Serialize() const { namespace { class PreSerialized : public Serializable { public: - explicit PreSerialized(std::vector<uint8_t> bytes) : bytes_(bytes) {} + explicit PreSerialized(std::vector<uint8_t> bytes) + : bytes_(std::move(bytes)) {} void AppendSerialized(std::vector<uint8_t>* out) const override { out->insert(out->end(), bytes_.begin(), bytes_.end()); diff --git a/deps/v8/third_party/inspector_protocol/crdtp/status.cc b/deps/v8/third_party/inspector_protocol/crdtp/status.cc index 4a8e03d389..7181df97d1 100644 --- a/deps/v8/third_party/inspector_protocol/crdtp/status.cc +++ b/deps/v8/third_party/inspector_protocol/crdtp/status.cc @@ -113,6 +113,8 @@ std::string Status::Message() const { return "BINDINGS: string8 value expected"; case Error::BINDINGS_BINARY_VALUE_EXPECTED: return "BINDINGS: binary value expected"; + case Error::BINDINGS_DICTIONARY_VALUE_EXPECTED: + return "BINDINGS: dictionary value expected"; } // Some compilers can't figure out that we can't get here. return "INVALID ERROR CODE"; diff --git a/deps/v8/third_party/inspector_protocol/crdtp/status.h b/deps/v8/third_party/inspector_protocol/crdtp/status.h index 45e0a57acf..1039156942 100644 --- a/deps/v8/third_party/inspector_protocol/crdtp/status.h +++ b/deps/v8/third_party/inspector_protocol/crdtp/status.h @@ -77,6 +77,7 @@ enum class Error { BINDINGS_STRING_VALUE_EXPECTED = 0x34, BINDINGS_STRING8_VALUE_EXPECTED = 0x35, BINDINGS_BINARY_VALUE_EXPECTED = 0x36, + BINDINGS_DICTIONARY_VALUE_EXPECTED = 0x37, }; // A status value with position that can be copied. The default status diff --git a/deps/v8/third_party/inspector_protocol/lib/ValueConversions_cpp.template b/deps/v8/third_party/inspector_protocol/lib/ValueConversions_cpp.template index 36c8dcc356..a16b522c38 100644 --- a/deps/v8/third_party/inspector_protocol/lib/ValueConversions_cpp.template +++ b/deps/v8/third_party/inspector_protocol/lib/ValueConversions_cpp.template @@ -96,6 +96,10 @@ bool ProtocolTypeTraits<std::unique_ptr<DictionaryValue>>::Deserialize( std::unique_ptr<Value> res; if (!ProtocolTypeTraits<std::unique_ptr<Value>>::Deserialize(state, &res)) return false; + if (res->type() != Value::TypeObject) { + state->RegisterError(Error::BINDINGS_DICTIONARY_VALUE_EXPECTED); + return false; + } *value = DictionaryValue::cast(std::move(res)); return true; } diff --git a/deps/v8/third_party/inspector_protocol/lib/base_string_adapter_cc.template b/deps/v8/third_party/inspector_protocol/lib/base_string_adapter_cc.template index e503f5c23e..10488f2243 100644 --- a/deps/v8/third_party/inspector_protocol/lib/base_string_adapter_cc.template +++ b/deps/v8/third_party/inspector_protocol/lib/base_string_adapter_cc.template @@ -11,7 +11,6 @@ #include "base/base64.h" #include "base/json/json_reader.h" #include "base/memory/ptr_util.h" -#include "base/strings/string16.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "base/values.h" @@ -141,7 +140,7 @@ std::unique_ptr<base::Value> toBaseValue(Value* value, int depth) { // static String StringUtil::fromUTF16LE(const uint16_t* data, size_t length) { std::string utf8; - base::UTF16ToUTF8(reinterpret_cast<const base::char16*>(data), length, &utf8); + base::UTF16ToUTF8(reinterpret_cast<const char16_t*>(data), length, &utf8); return utf8; } @@ -246,4 +245,4 @@ void ProtocolTypeTraits<Binary>::Serialize(const Binary& value, std::vector<uint value.AppendSerialized(bytes); } -} // namespace {{config.crdtp.namespace}}
\ No newline at end of file +} // namespace {{config.crdtp.namespace}} diff --git a/deps/v8/third_party/inspector_protocol/pdl.py b/deps/v8/third_party/inspector_protocol/pdl.py index d7733634e5..9a9fec9898 100644 --- a/deps/v8/third_party/inspector_protocol/pdl.py +++ b/deps/v8/third_party/inspector_protocol/pdl.py @@ -27,6 +27,9 @@ def assignType(item, type, is_array=False, map_binary_to_string=False): type = 'string' if map_binary_to_string and type == 'binary': type = 'string' + if 'description' in item: + item['description'] = (item['description'] + + ' (Encoded as a base64 string when passed over JSON)') if type in primitiveTypes: item['type'] = type else: diff --git a/deps/v8/third_party/jsoncpp/BUILD.gn b/deps/v8/third_party/jsoncpp/BUILD.gn index 411d2d62e7..6324be019c 100644 --- a/deps/v8/third_party/jsoncpp/BUILD.gn +++ b/deps/v8/third_party/jsoncpp/BUILD.gn @@ -21,9 +21,7 @@ source_set("jsoncpp") { sources = [ "generated/version.h", "source/include/json/assertions.h", - "source/include/json/autolink.h", "source/include/json/config.h", - "source/include/json/features.h", "source/include/json/forwards.h", "source/include/json/json.h", "source/include/json/reader.h", diff --git a/deps/v8/third_party/zlib/OWNERS b/deps/v8/third_party/zlib/OWNERS index 632b3f9f43..0bfa9fb9dd 100644 --- a/deps/v8/third_party/zlib/OWNERS +++ b/deps/v8/third_party/zlib/OWNERS @@ -2,4 +2,5 @@ agl@chromium.org cavalcantii@chromium.org cblume@chromium.org mtklein@google.com +noel@chromium.org scroggo@google.com diff --git a/deps/v8/third_party/zlib/google/OWNERS b/deps/v8/third_party/zlib/google/OWNERS index 868af3cc66..411670ca13 100644 --- a/deps/v8/third_party/zlib/google/OWNERS +++ b/deps/v8/third_party/zlib/google/OWNERS @@ -1,3 +1,5 @@ +fdegros@chromium.org +noel@chromium.org satorux@chromium.org # compression_utils* diff --git a/deps/v8/third_party/zlib/google/zip.cc b/deps/v8/third_party/zlib/google/zip.cc index 907e5da72e..20cdd57bdf 100644 --- a/deps/v8/third_party/zlib/google/zip.cc +++ b/deps/v8/third_party/zlib/google/zip.cc @@ -4,7 +4,7 @@ #include "third_party/zlib/google/zip.h" -#include <list> +#include <queue> #include <string> #include <vector> @@ -50,12 +50,12 @@ std::unique_ptr<WriterDelegate> CreateFilePathWriterDelegate( class DirectFileAccessor : public FileAccessor { public: - explicit DirectFileAccessor(base::FilePath src_dir) : src_dir_(src_dir) {} ~DirectFileAccessor() override = default; std::vector<base::File> OpenFilesForReading( const std::vector<base::FilePath>& paths) override { std::vector<base::File> files; + for (const auto& path : paths) { base::File file; if (base::PathExists(path) && !base::DirectoryExists(path)) { @@ -63,6 +63,7 @@ class DirectFileAccessor : public FileAccessor { } files.push_back(std::move(file)); } + return files; } @@ -73,103 +74,91 @@ class DirectFileAccessor : public FileAccessor { std::vector<DirectoryContentEntry> ListDirectoryContent( const base::FilePath& dir) override { std::vector<DirectoryContentEntry> files; + base::FileEnumerator file_enumerator( dir, false /* recursive */, base::FileEnumerator::FILES | base::FileEnumerator::DIRECTORIES); - for (base::FilePath path = file_enumerator.Next(); !path.value().empty(); + for (base::FilePath path = file_enumerator.Next(); !path.empty(); path = file_enumerator.Next()) { - files.push_back(DirectoryContentEntry(path, base::DirectoryExists(path))); + const bool is_directory = base::DirectoryExists(path); + files.push_back({std::move(path), is_directory}); } + return files; } base::Time GetLastModifiedTime(const base::FilePath& path) override { base::File::Info file_info; if (!base::GetFileInfo(path, &file_info)) { - LOG(ERROR) << "Failed to retrieve file modification time for " - << path.value(); + LOG(ERROR) << "Cannot get modification time for '" << path << "'"; } return file_info.last_modified; } - - private: - base::FilePath src_dir_; - - DISALLOW_COPY_AND_ASSIGN(DirectFileAccessor); }; } // namespace -ZipParams::ZipParams(const base::FilePath& src_dir, - const base::FilePath& dest_file) - : src_dir_(src_dir), - dest_file_(dest_file), - file_accessor_(new DirectFileAccessor(src_dir)) {} - -#if defined(OS_POSIX) -// Does not take ownership of |fd|. -ZipParams::ZipParams(const base::FilePath& src_dir, int dest_fd) - : src_dir_(src_dir), - dest_fd_(dest_fd), - file_accessor_(new DirectFileAccessor(src_dir)) {} -#endif +std::ostream& operator<<(std::ostream& out, const Progress& progress) { + return out << progress.bytes << " bytes, " << progress.files << " files, " + << progress.directories << " dirs"; +} bool Zip(const ZipParams& params) { - // Using a pointer to avoid copies of a potentially large array. - const std::vector<base::FilePath>* files_to_add = ¶ms.files_to_zip(); - std::vector<base::FilePath> all_files; - if (files_to_add->empty()) { - // Include all files from the src_dir (modulo the src_dir itself and - // filtered and hidden files). - - files_to_add = &all_files; - // Using a list so we can call push_back while iterating. - std::list<FileAccessor::DirectoryContentEntry> entries; - entries.push_back(FileAccessor::DirectoryContentEntry( - params.src_dir(), true /* is directory*/)); - const FilterCallback& filter_callback = params.filter_callback(); - for (auto iter = entries.begin(); iter != entries.end(); ++iter) { - const base::FilePath& entry_path = iter->path; - if (iter != entries.begin() && // Don't filter the root dir. - ((!params.include_hidden_files() && IsHiddenFile(entry_path)) || - (filter_callback && !filter_callback.Run(entry_path)))) { - continue; - } + DirectFileAccessor default_accessor; + FileAccessor* const file_accessor = params.file_accessor ?: &default_accessor; + + Paths files_to_add = params.src_files; - if (iter != entries.begin()) { // Exclude the root dir from the ZIP file. - // Make the path relative for AddEntryToZip. - base::FilePath relative_path; - bool success = - params.src_dir().AppendRelativePath(entry_path, &relative_path); + std::vector<base::FilePath> all_files; + if (files_to_add.empty()) { + // Perform a Breadth First Search (BFS) of the source tree. Note that the + // BFS order might not be optimal when storing files in a ZIP (either for + // the storing side, or for the program that will extract this ZIP). + for (std::queue<base::FilePath> q({params.src_dir}); !q.empty(); q.pop()) { + for (FileAccessor::DirectoryContentEntry& entry : + file_accessor->ListDirectoryContent(q.front())) { + // Skip hidden and filtered files. + if ((!params.include_hidden_files && IsHiddenFile(entry.path)) || + (params.filter_callback && !params.filter_callback.Run(entry.path))) + continue; + + // Store relative path. + all_files.emplace_back(); + const bool success = + params.src_dir.AppendRelativePath(entry.path, &all_files.back()); DCHECK(success); - all_files.push_back(relative_path); - } - if (iter->is_directory) { - std::vector<FileAccessor::DirectoryContentEntry> subentries = - params.file_accessor()->ListDirectoryContent(entry_path); - entries.insert(entries.end(), subentries.begin(), subentries.end()); + if (entry.is_directory) + q.push(std::move(entry.path)); } } + + files_to_add = all_files; } std::unique_ptr<internal::ZipWriter> zip_writer; + #if defined(OS_POSIX) - if (params.dest_fd() != base::kInvalidPlatformFile) { - DCHECK(params.dest_file().empty()); + if (params.dest_fd != base::kInvalidPlatformFile) { + DCHECK(params.dest_file.empty()); zip_writer = internal::ZipWriter::CreateWithFd( - params.dest_fd(), params.src_dir(), params.file_accessor()); + params.dest_fd, params.src_dir, file_accessor); if (!zip_writer) return false; } #endif + if (!zip_writer) { - zip_writer = internal::ZipWriter::Create( - params.dest_file(), params.src_dir(), params.file_accessor()); + zip_writer = internal::ZipWriter::Create(params.dest_file, params.src_dir, + file_accessor); if (!zip_writer) return false; } - return zip_writer->WriteEntries(*files_to_add); + + zip_writer->SetProgressCallback(params.progress_callback, + params.progress_period); + + return zip_writer->WriteEntries(files_to_add); } bool Unzip(const base::FilePath& src_file, const base::FilePath& dest_dir) { @@ -179,7 +168,7 @@ bool Unzip(const base::FilePath& src_file, const base::FilePath& dest_dir) { bool UnzipWithFilterCallback(const base::FilePath& src_file, const base::FilePath& dest_dir, - const FilterCallback& filter_cb, + FilterCallback filter_cb, bool log_skipped_files) { base::File file(src_file, base::File::FLAG_OPEN | base::File::FLAG_READ); if (!file.IsValid()) { @@ -189,14 +178,14 @@ bool UnzipWithFilterCallback(const base::FilePath& src_file, return UnzipWithFilterAndWriters( file.GetPlatformFile(), base::BindRepeating(&CreateFilePathWriterDelegate, dest_dir), - base::BindRepeating(&CreateDirectory, dest_dir), filter_cb, + base::BindRepeating(&CreateDirectory, dest_dir), std::move(filter_cb), log_skipped_files); } bool UnzipWithFilterAndWriters(const base::PlatformFile& src_file, - const WriterFactory& writer_factory, - const DirectoryCreator& directory_creator, - const FilterCallback& filter_cb, + WriterFactory writer_factory, + DirectoryCreator directory_creator, + FilterCallback filter_cb, bool log_skipped_files) { ZipReader reader; if (!reader.OpenFromPlatformFile(src_file)) { @@ -239,14 +228,15 @@ bool UnzipWithFilterAndWriters(const base::PlatformFile& src_file, bool ZipWithFilterCallback(const base::FilePath& src_dir, const base::FilePath& dest_file, - const FilterCallback& filter_cb) { + FilterCallback filter_cb) { DCHECK(base::DirectoryExists(src_dir)); - ZipParams params(src_dir, dest_file); - params.set_filter_callback(filter_cb); - return Zip(params); + return Zip({.src_dir = src_dir, + .dest_file = dest_file, + .filter_callback = std::move(filter_cb)}); } -bool Zip(const base::FilePath& src_dir, const base::FilePath& dest_file, +bool Zip(const base::FilePath& src_dir, + const base::FilePath& dest_file, bool include_hidden_files) { if (include_hidden_files) { return ZipWithFilterCallback(src_dir, dest_file, @@ -259,12 +249,12 @@ bool Zip(const base::FilePath& src_dir, const base::FilePath& dest_file, #if defined(OS_POSIX) bool ZipFiles(const base::FilePath& src_dir, - const std::vector<base::FilePath>& src_relative_paths, + Paths src_relative_paths, int dest_fd) { DCHECK(base::DirectoryExists(src_dir)); - ZipParams params(src_dir, dest_fd); - params.set_files_to_zip(src_relative_paths); - return Zip(params); + return Zip({.src_dir = src_dir, + .dest_fd = dest_fd, + .src_files = src_relative_paths}); } #endif // defined(OS_POSIX) diff --git a/deps/v8/third_party/zlib/google/zip.h b/deps/v8/third_party/zlib/google/zip.h index 4f64a8aca8..ecd7ba02b4 100644 --- a/deps/v8/third_party/zlib/google/zip.h +++ b/deps/v8/third_party/zlib/google/zip.h @@ -5,9 +5,13 @@ #ifndef THIRD_PARTY_ZLIB_GOOGLE_ZIP_H_ #define THIRD_PARTY_ZLIB_GOOGLE_ZIP_H_ +#include <cstdint> +#include <ostream> +#include <utility> #include <vector> #include "base/callback.h" +#include "base/containers/span.h" #include "base/files/file_path.h" #include "base/files/platform_file.h" #include "base/time/time.h" @@ -31,8 +35,6 @@ class FileAccessor { virtual ~FileAccessor() = default; struct DirectoryContentEntry { - DirectoryContentEntry(const base::FilePath& path, bool is_directory) - : path(path), is_directory(is_directory) {} base::FilePath path; bool is_directory = false; }; @@ -48,72 +50,75 @@ class FileAccessor { virtual base::Time GetLastModifiedTime(const base::FilePath& path) = 0; }; -class ZipParams { - public: - ZipParams(const base::FilePath& src_dir, const base::FilePath& dest_file); -#if defined(OS_POSIX) - // Does not take ownership of |dest_fd|. - ZipParams(const base::FilePath& src_dir, int dest_fd); +// Progress of a ZIP creation operation. +struct Progress { + // Total number of bytes read from files getting zipped so far. + std::int64_t bytes = 0; - int dest_fd() const { return dest_fd_; } -#endif + // Number of file entries added to the ZIP so far. + // A file entry is added after its bytes have been processed. + int files = 0; + + // Number of directory entries added to the ZIP so far. + // A directory entry is added before items in it. + int directories = 0; +}; + +// Prints Progress to output stream. +std::ostream& operator<<(std::ostream& out, const Progress& progress); + +// Callback reporting the progress of a ZIP creation operation. +// +// This callback returns a boolean indicating whether the ZIP creation operation +// should continue. If it returns false once, then the ZIP creation operation is +// immediately cancelled and the callback won't be called again. +using ProgressCallback = base::RepeatingCallback<bool(const Progress&)>; + +using FilterCallback = base::RepeatingCallback<bool(const base::FilePath&)>; + +using Paths = base::span<const base::FilePath>; + +// ZIP creation parameters and options. +struct ZipParams { + // Source directory. + base::FilePath src_dir; + + // Destination file path. + // Either dest_file or dest_fd should be set, but not both. + base::FilePath dest_file; - const base::FilePath& src_dir() const { return src_dir_; } - - const base::FilePath& dest_file() const { return dest_file_; } - - // Restricts the files actually zipped to the paths listed in - // |src_relative_paths|. They must be relative to the |src_dir| passed in the - // constructor and will be used as the file names in the created zip file. All - // source paths must be under |src_dir| in the file system hierarchy. - void set_files_to_zip(const std::vector<base::FilePath>& src_relative_paths) { - src_files_ = src_relative_paths; - } - const std::vector<base::FilePath>& files_to_zip() const { return src_files_; } - - using FilterCallback = base::RepeatingCallback<bool(const base::FilePath&)>; - void set_filter_callback(FilterCallback filter_callback) { - filter_callback_ = filter_callback; - } - const FilterCallback& filter_callback() const { return filter_callback_; } - - void set_include_hidden_files(bool include_hidden_files) { - include_hidden_files_ = include_hidden_files; - } - bool include_hidden_files() const { return include_hidden_files_; } - - // Sets a custom file accessor for file operations. Default is to directly - // access the files (with fopen and the rest). - // Useful in cases where running in a sandbox process and file access has to - // go through IPC, for example. - void set_file_accessor(std::unique_ptr<FileAccessor> file_accessor) { - file_accessor_ = std::move(file_accessor); - } - FileAccessor* file_accessor() const { return file_accessor_.get(); } - - private: - base::FilePath src_dir_; - - base::FilePath dest_file_; #if defined(OS_POSIX) - int dest_fd_ = base::kInvalidPlatformFile; + // Destination file passed a file descriptor. + // Either dest_file or dest_fd should be set, but not both. + int dest_fd = base::kInvalidPlatformFile; #endif - // The relative paths to the files that should be included in the zip file. If - // this is empty, all files in |src_dir_| are included. - std::vector<base::FilePath> src_files_; + // The relative paths to the files that should be included in the ZIP file. If + // this is empty, all files in |src_dir| are included. + // + // These paths must be relative to |src_dir| and will be used as the file + // names in the created zip file. All files must be under |src_dir| in the + // file system hierarchy. + Paths src_files; // Filter used to exclude files from the ZIP file. Only effective when - // |src_files_| is empty. - FilterCallback filter_callback_; + // |src_files| is empty. + FilterCallback filter_callback; + + // Optional progress reporting callback. + ProgressCallback progress_callback; + + // Progress reporting period. The final callback is always called when the ZIP + // creation operation completes. + base::TimeDelta progress_period; // Whether hidden files should be included in the ZIP file. Only effective - // when |src_files_| is empty. - bool include_hidden_files_ = true; + // when |src_files| is empty. + bool include_hidden_files = true; - // Abstraction around file system access used to read files. An implementation - // that accesses files directly is provided by default. - std::unique_ptr<FileAccessor> file_accessor_; + // Abstraction around file system access used to read files. If left null, an + // implementation that accesses files directly is used. + FileAccessor* file_accessor = nullptr; // Not owned }; // Zip files specified into a ZIP archives. The source files and ZIP destination @@ -125,15 +130,15 @@ bool Zip(const ZipParams& params); // of src_dir will be at the root level of the created zip. For each file in // src_dir, include it only if the callback |filter_cb| returns true. Otherwise // omit it. -using FilterCallback = base::RepeatingCallback<bool(const base::FilePath&)>; bool ZipWithFilterCallback(const base::FilePath& src_dir, const base::FilePath& dest_file, - const FilterCallback& filter_cb); + FilterCallback filter_cb); // Convenience method for callers who don't need to set up the filter callback. // If |include_hidden_files| is true, files starting with "." are included. // Otherwise they are omitted. -bool Zip(const base::FilePath& src_dir, const base::FilePath& dest_file, +bool Zip(const base::FilePath& src_dir, + const base::FilePath& dest_file, bool include_hidden_files); #if defined(OS_POSIX) @@ -143,7 +148,7 @@ bool Zip(const base::FilePath& src_dir, const base::FilePath& dest_file, // file names in the created zip file. All source paths must be under |src_dir| // in the file system hierarchy. bool ZipFiles(const base::FilePath& src_dir, - const std::vector<base::FilePath>& src_relative_paths, + Paths src_relative_paths, int dest_fd); #endif // defined(OS_POSIX) @@ -152,10 +157,9 @@ bool ZipFiles(const base::FilePath& src_dir, // returns true. Otherwise omit it. // If |log_skipped_files| is true, files skipped during extraction are printed // to debug log. -using FilterCallback = base::RepeatingCallback<bool(const base::FilePath&)>; bool UnzipWithFilterCallback(const base::FilePath& zip_file, const base::FilePath& dest_dir, - const FilterCallback& filter_cb, + FilterCallback filter_cb, bool log_skipped_files); // Unzip the contents of zip_file, using the writers provided by writer_factory. @@ -168,9 +172,9 @@ typedef base::RepeatingCallback<std::unique_ptr<WriterDelegate>( WriterFactory; typedef base::RepeatingCallback<bool(const base::FilePath&)> DirectoryCreator; bool UnzipWithFilterAndWriters(const base::PlatformFile& zip_file, - const WriterFactory& writer_factory, - const DirectoryCreator& directory_creator, - const FilterCallback& filter_cb, + WriterFactory writer_factory, + DirectoryCreator directory_creator, + FilterCallback filter_cb, bool log_skipped_files); // Unzip the contents of zip_file into dest_dir. diff --git a/deps/v8/third_party/zlib/google/zip_reader_unittest.cc b/deps/v8/third_party/zlib/google/zip_reader_unittest.cc index bba4365298..44134f886e 100644 --- a/deps/v8/third_party/zlib/google/zip_reader_unittest.cc +++ b/deps/v8/third_party/zlib/google/zip_reader_unittest.cc @@ -20,6 +20,7 @@ #include "base/path_service.h" #include "base/run_loop.h" #include "base/stl_util.h" +#include "base/strings/string_piece.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "base/test/task_environment.h" @@ -510,12 +511,12 @@ TEST_F(ZipReaderTest, ExtractCurrentEntryToString) { if (i > 0) { // Exact byte read limit: must pass. EXPECT_TRUE(reader.ExtractCurrentEntryToString(i, &contents)); - EXPECT_EQ(base::StringPiece("0123456", i).as_string(), contents); + EXPECT_EQ(std::string(base::StringPiece("0123456", i)), contents); } // More than necessary byte read limit: must pass. EXPECT_TRUE(reader.ExtractCurrentEntryToString(16, &contents)); - EXPECT_EQ(base::StringPiece("0123456", i).as_string(), contents); + EXPECT_EQ(std::string(base::StringPiece("0123456", i)), contents); } reader.Close(); } diff --git a/deps/v8/third_party/zlib/google/zip_unittest.cc b/deps/v8/third_party/zlib/google/zip_unittest.cc index 10f2ef7a97..cf914d9f06 100644 --- a/deps/v8/third_party/zlib/google/zip_unittest.cc +++ b/deps/v8/third_party/zlib/google/zip_unittest.cc @@ -21,6 +21,7 @@ #include "base/path_service.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" +#include "base/test/bind.h" #include "build/build_config.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/platform_test.h" @@ -78,13 +79,10 @@ class VirtualFileSystem : public zip::FileAccessor { DCHECK(success); files_[bar2_txt_path] = std::move(file); - file_tree_[test_dir] = std::vector<DirectoryContentEntry>{ - DirectoryContentEntry(foo_txt_path, /*is_dir=*/false), - DirectoryContentEntry(bar_dir, /*is_dir=*/true)}; - file_tree_[bar_dir] = std::vector<DirectoryContentEntry>{ - DirectoryContentEntry(bar1_txt_path, /*is_dir=*/false), - DirectoryContentEntry(bar2_txt_path, /*is_dir=*/false)}; + file_tree_[test_dir] = {{foo_txt_path, false}, {bar_dir, true}}; + file_tree_[bar_dir] = {{bar1_txt_path, false}, {bar2_txt_path, false}}; } + ~VirtualFileSystem() override = default; private: @@ -108,7 +106,7 @@ class VirtualFileSystem : public zip::FileAccessor { auto iter = file_tree_.find(dir); if (iter == file_tree_.end()) { NOTREACHED(); - return std::vector<DirectoryContentEntry>(); + return {}; } return iter->second; } @@ -131,10 +129,7 @@ constexpr char VirtualFileSystem::kBar2Content[]; // Make the test a PlatformTest to setup autorelease pools properly on Mac. class ZipTest : public PlatformTest { protected: - enum ValidYearType { - VALID_YEAR, - INVALID_YEAR - }; + enum ValidYearType { VALID_YEAR, INVALID_YEAR }; virtual void SetUp() { PlatformTest::SetUp(); @@ -161,20 +156,17 @@ class ZipTest : public PlatformTest { base::FilePath(FILE_PATH_LITERAL("foo/bar/.hidden"))); } - virtual void TearDown() { - PlatformTest::TearDown(); - } + virtual void TearDown() { PlatformTest::TearDown(); } bool GetTestDataDirectory(base::FilePath* path) { bool success = base::PathService::Get(base::DIR_SOURCE_ROOT, path); EXPECT_TRUE(success); if (!success) return false; - *path = path->AppendASCII("third_party"); - *path = path->AppendASCII("zlib"); - *path = path->AppendASCII("google"); - *path = path->AppendASCII("test"); - *path = path->AppendASCII("data"); + for (const base::StringPiece s : + {"third_party", "zlib", "google", "test", "data"}) { + *path = path->AppendASCII(s); + } return true; } @@ -193,7 +185,8 @@ class ZipTest : public PlatformTest { ASSERT_TRUE(GetTestDataDirectory(&original_dir)); original_dir = original_dir.AppendASCII("test"); - base::FileEnumerator files(test_dir_, true, + base::FileEnumerator files( + test_dir_, true, base::FileEnumerator::FILES | base::FileEnumerator::DIRECTORIES); base::FilePath unzipped_entry_path = files.Next(); size_t count = 0; @@ -211,15 +204,19 @@ class ZipTest : public PlatformTest { bool append_relative_path_success = test_dir_.AppendRelativePath(unzipped_entry_path, &relative_path); if (!append_relative_path_success) { - LOG(ERROR) << "Append relative path failed, params: " - << test_dir_.value() << " and " - << unzipped_entry_path.value(); + LOG(ERROR) << "Append relative path failed, params: " << test_dir_ + << " and " << unzipped_entry_path; } base::FilePath original_path = original_dir.Append(relative_path); - LOG(ERROR) << "Comparing original " << original_path.value() - << " and unzipped file " << unzipped_entry_path.value() - << " result: " - << base::ContentsEqual(original_path, unzipped_entry_path); + const bool equal = + base::ContentsEqual(original_path, unzipped_entry_path); + if (equal) { + LOG(INFO) << "Original and unzipped file '" << relative_path + << "' are equal"; + } else { + LOG(ERROR) << "Original and unzipped file '" << relative_path + << "' are different"; + } // EXPECT_TRUE(base::ContentsEqual(original_path, unzipped_entry_path)) // << "Contents differ between original " << original_path.value() // << " and unzipped file " << unzipped_entry_path.value(); @@ -487,8 +484,8 @@ TEST_F(ZipTest, ZipFiles) { base::File zip_file(zip_name, base::File::FLAG_CREATE | base::File::FLAG_WRITE); ASSERT_TRUE(zip_file.IsValid()); - EXPECT_TRUE(zip::ZipFiles(src_dir, zip_file_list_, - zip_file.GetPlatformFile())); + EXPECT_TRUE( + zip::ZipFiles(src_dir, zip_file_list_, zip_file.GetPlatformFile())); zip_file.Close(); zip::ZipReader reader; @@ -524,8 +521,8 @@ TEST_F(ZipTest, UnzipFilesWithIncorrectSize) { for (int i = 0; i < 8; i++) { SCOPED_TRACE(base::StringPrintf("Processing %d.txt", i)); - base::FilePath file_path = temp_dir.AppendASCII( - base::StringPrintf("%d.txt", i)); + base::FilePath file_path = + temp_dir.AppendASCII(base::StringPrintf("%d.txt", i)); int64_t file_size = -1; EXPECT_TRUE(base::GetFileSize(file_path, &file_size)); EXPECT_EQ(static_cast<int64_t>(i), file_size); @@ -535,8 +532,11 @@ TEST_F(ZipTest, UnzipFilesWithIncorrectSize) { TEST_F(ZipTest, ZipWithFileAccessor) { base::FilePath zip_file; ASSERT_TRUE(base::CreateTemporaryFile(&zip_file)); - zip::ZipParams params(base::FilePath(FILE_PATH_LITERAL("/test")), zip_file); - params.set_file_accessor(std::make_unique<VirtualFileSystem>()); + VirtualFileSystem file_accessor; + const zip::ZipParams params{ + .src_dir = base::FilePath(FILE_PATH_LITERAL("/test")), + .dest_file = zip_file, + .file_accessor = &file_accessor}; ASSERT_TRUE(zip::Zip(params)); base::ScopedTempDir scoped_temp_dir; @@ -557,4 +557,125 @@ TEST_F(ZipTest, ZipWithFileAccessor) { EXPECT_EQ(VirtualFileSystem::kBar2Content, file_content); } +// Tests progress reporting while zipping files. +TEST_F(ZipTest, ZipProgress) { + base::FilePath src_dir; + ASSERT_TRUE(GetTestDataDirectory(&src_dir)); + src_dir = src_dir.AppendASCII("test"); + + base::ScopedTempDir temp_dir; + ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); + base::FilePath zip_file = temp_dir.GetPath().AppendASCII("out.zip"); + + int progress_count = 0; + zip::Progress last_progress; + + zip::ProgressCallback progress_callback = + base::BindLambdaForTesting([&](const zip::Progress& progress) { + progress_count++; + LOG(INFO) << "Progress #" << progress_count << ": " << progress; + + // Progress should only go forwards. + EXPECT_GE(progress.bytes, last_progress.bytes); + EXPECT_GE(progress.files, last_progress.files); + EXPECT_GE(progress.directories, last_progress.directories); + + last_progress = progress; + return true; + }); + + EXPECT_TRUE(zip::Zip({.src_dir = src_dir, + .dest_file = zip_file, + .progress_callback = std::move(progress_callback)})); + + EXPECT_EQ(progress_count, 14); + EXPECT_EQ(last_progress.bytes, 13546); + EXPECT_EQ(last_progress.files, 5); + EXPECT_EQ(last_progress.directories, 2); + + TestUnzipFile(zip_file, true); +} + +// Tests throttling of progress reporting while zipping files. +TEST_F(ZipTest, ZipProgressPeriod) { + base::FilePath src_dir; + ASSERT_TRUE(GetTestDataDirectory(&src_dir)); + src_dir = src_dir.AppendASCII("test"); + + base::ScopedTempDir temp_dir; + ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); + base::FilePath zip_file = temp_dir.GetPath().AppendASCII("out.zip"); + + int progress_count = 0; + zip::Progress last_progress; + + zip::ProgressCallback progress_callback = + base::BindLambdaForTesting([&](const zip::Progress& progress) { + progress_count++; + LOG(INFO) << "Progress #" << progress_count << ": " << progress; + + // Progress should only go forwards. + EXPECT_GE(progress.bytes, last_progress.bytes); + EXPECT_GE(progress.files, last_progress.files); + EXPECT_GE(progress.directories, last_progress.directories); + + last_progress = progress; + return true; + }); + + EXPECT_TRUE(zip::Zip({.src_dir = src_dir, + .dest_file = zip_file, + .progress_callback = std::move(progress_callback), + .progress_period = base::TimeDelta::FromHours(1)})); + + // We expect only 2 progress reports: the first one, and the last one. + EXPECT_EQ(progress_count, 2); + EXPECT_EQ(last_progress.bytes, 13546); + EXPECT_EQ(last_progress.files, 5); + EXPECT_EQ(last_progress.directories, 2); + + TestUnzipFile(zip_file, true); +} + +// Tests cancellation while zipping files. +TEST_F(ZipTest, ZipCancel) { + base::FilePath src_dir; + ASSERT_TRUE(GetTestDataDirectory(&src_dir)); + src_dir = src_dir.AppendASCII("test"); + + base::ScopedTempDir temp_dir; + ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); + base::FilePath zip_file = temp_dir.GetPath().AppendASCII("out.zip"); + + // First: establish the number of possible interruption points. + int progress_count = 0; + + EXPECT_TRUE(zip::Zip({.src_dir = src_dir, + .dest_file = zip_file, + .progress_callback = base::BindLambdaForTesting( + [&progress_count](const zip::Progress&) { + progress_count++; + return true; + })})); + + EXPECT_EQ(progress_count, 14); + + // Second: exercise each and every interruption point. + for (int i = progress_count; i > 0; i--) { + int j = 0; + EXPECT_FALSE(zip::Zip({.src_dir = src_dir, + .dest_file = zip_file, + .progress_callback = base::BindLambdaForTesting( + [i, &j](const zip::Progress&) { + j++; + // Callback shouldn't be called again after + // having returned false once. + EXPECT_LE(j, i); + return j < i; + })})); + + EXPECT_EQ(j, i); + } +} + } // namespace diff --git a/deps/v8/third_party/zlib/google/zip_writer.cc b/deps/v8/third_party/zlib/google/zip_writer.cc index 6f38d42b6b..de1930e803 100644 --- a/deps/v8/third_party/zlib/google/zip_writer.cc +++ b/deps/v8/third_party/zlib/google/zip_writer.cc @@ -12,35 +12,51 @@ namespace zip { namespace internal { -namespace { +bool ZipWriter::ShouldContinue() { + if (!progress_callback_) + return true; -// Numbers of pending entries that trigger writting them to the ZIP file. -constexpr size_t kMaxPendingEntriesCount = 50; + const base::TimeTicks now = base::TimeTicks::Now(); + if (next_progress_report_time_ > now) + return true; -bool AddFileContentToZip(zipFile zip_file, - base::File file, - const base::FilePath& file_path) { - int num_bytes; + next_progress_report_time_ = now + progress_period_; + if (progress_callback_.Run(progress_)) + return true; + + LOG(ERROR) << "Cancelling ZIP creation"; + return false; +} + +bool ZipWriter::AddFileContent(const base::FilePath& path, base::File file) { char buf[zip::internal::kZipBufSize]; - do { - num_bytes = file.ReadAtCurrentPos(buf, zip::internal::kZipBufSize); - - if (num_bytes > 0) { - if (zipWriteInFileInZip(zip_file, buf, num_bytes) != ZIP_OK) { - DLOG(ERROR) << "Could not write data to zip for path " - << file_path.value(); - return false; - } + + while (ShouldContinue()) { + const int num_bytes = + file.ReadAtCurrentPos(buf, zip::internal::kZipBufSize); + + if (num_bytes < 0) { + DPLOG(ERROR) << "Cannot read file '" << path << "'"; + return false; } - } while (num_bytes > 0); - return true; + if (num_bytes == 0) + return true; + + if (zipWriteInFileInZip(zip_file_, buf, num_bytes) != ZIP_OK) { + DLOG(ERROR) << "Cannot write data from file '" << path << "' to ZIP"; + return false; + } + + progress_.bytes += num_bytes; + } + + return false; } -bool OpenNewFileEntry(zipFile zip_file, - const base::FilePath& path, - bool is_directory, - base::Time last_modified) { +bool ZipWriter::OpenNewFileEntry(const base::FilePath& path, + bool is_directory, + base::Time last_modified) { std::string str_path = path.AsUTF8Unsafe(); #if defined(OS_WIN) base::ReplaceSubstringsAfterOffset(&str_path, 0u, "\\", "/"); @@ -48,41 +64,33 @@ bool OpenNewFileEntry(zipFile zip_file, if (is_directory) str_path += "/"; - return zip::internal::ZipOpenNewFileInZip(zip_file, str_path, last_modified); + return zip::internal::ZipOpenNewFileInZip(zip_file_, str_path, last_modified); } -bool CloseNewFileEntry(zipFile zip_file) { - return zipCloseFileInZip(zip_file) == ZIP_OK; +bool ZipWriter::CloseNewFileEntry() { + return zipCloseFileInZip(zip_file_) == ZIP_OK; } -bool AddFileEntryToZip(zipFile zip_file, - const base::FilePath& path, - base::File file) { +bool ZipWriter::AddFileEntry(const base::FilePath& path, base::File file) { base::File::Info file_info; if (!file.GetInfo(&file_info)) return false; - if (!OpenNewFileEntry(zip_file, path, /*is_directory=*/false, - file_info.last_modified)) - return false; - - bool success = AddFileContentToZip(zip_file, std::move(file), path); - if (!CloseNewFileEntry(zip_file)) + if (!OpenNewFileEntry(path, /*is_directory=*/false, file_info.last_modified)) return false; - return success; + const bool success = AddFileContent(path, std::move(file)); + progress_.files++; + return CloseNewFileEntry() && success; } -bool AddDirectoryEntryToZip(zipFile zip_file, - const base::FilePath& path, - base::Time last_modified) { - return OpenNewFileEntry(zip_file, path, /*is_directory=*/true, - last_modified) && - CloseNewFileEntry(zip_file); +bool ZipWriter::AddDirectoryEntry(const base::FilePath& path, + base::Time last_modified) { + progress_.directories++; + return OpenNewFileEntry(path, /*is_directory=*/true, last_modified) && + CloseNewFileEntry() && ShouldContinue(); } -} // namespace - #if defined(OS_POSIX) // static std::unique_ptr<ZipWriter> ZipWriter::CreateWithFd( @@ -92,10 +100,12 @@ std::unique_ptr<ZipWriter> ZipWriter::CreateWithFd( DCHECK(zip_file_fd != base::kInvalidPlatformFile); zipFile zip_file = internal::OpenFdForZipping(zip_file_fd, APPEND_STATUS_CREATE); + if (!zip_file) { - DLOG(ERROR) << "Couldn't create ZIP file for FD " << zip_file_fd; + DLOG(ERROR) << "Cannot create ZIP file for FD " << zip_file_fd; return nullptr; } + return std::unique_ptr<ZipWriter>( new ZipWriter(zip_file, root_dir, file_accessor)); } @@ -109,10 +119,12 @@ std::unique_ptr<ZipWriter> ZipWriter::Create( DCHECK(!zip_file_path.empty()); zipFile zip_file = internal::OpenForZipping(zip_file_path.AsUTF8Unsafe(), APPEND_STATUS_CREATE); + if (!zip_file) { - DLOG(ERROR) << "Couldn't create ZIP file at path " << zip_file_path; + DLOG(ERROR) << "Cannot create ZIP file '" << zip_file_path << "'"; return nullptr; } + return std::unique_ptr<ZipWriter>( new ZipWriter(zip_file, root_dir, file_accessor)); } @@ -123,80 +135,83 @@ ZipWriter::ZipWriter(zipFile zip_file, : zip_file_(zip_file), root_dir_(root_dir), file_accessor_(file_accessor) {} ZipWriter::~ZipWriter() { - DCHECK(pending_entries_.empty()); + if (zip_file_) + zipClose(zip_file_, nullptr); } -bool ZipWriter::WriteEntries(const std::vector<base::FilePath>& paths) { +bool ZipWriter::WriteEntries(Paths paths) { return AddEntries(paths) && Close(); } -bool ZipWriter::AddEntries(const std::vector<base::FilePath>& paths) { - DCHECK(zip_file_); - pending_entries_.insert(pending_entries_.end(), paths.begin(), paths.end()); - return FlushEntriesIfNeeded(/*force=*/false); -} - bool ZipWriter::Close() { - bool success = FlushEntriesIfNeeded(/*force=*/true) && - zipClose(zip_file_, nullptr) == ZIP_OK; + const bool success = zipClose(zip_file_, nullptr) == ZIP_OK; zip_file_ = nullptr; + + // Call the progress callback one last time with the final progress status. + if (progress_callback_ && !progress_callback_.Run(progress_)) { + LOG(ERROR) << "Cancelling ZIP creation at the end"; + return false; + } + return success; } -bool ZipWriter::FlushEntriesIfNeeded(bool force) { - if (pending_entries_.size() < kMaxPendingEntriesCount && !force) - return true; - - while (pending_entries_.size() >= kMaxPendingEntriesCount || - (force && !pending_entries_.empty())) { - size_t entry_count = - std::min(pending_entries_.size(), kMaxPendingEntriesCount); - std::vector<base::FilePath> relative_paths; - std::vector<base::FilePath> absolute_paths; - relative_paths.insert(relative_paths.begin(), pending_entries_.begin(), - pending_entries_.begin() + entry_count); - for (auto iter = pending_entries_.begin(); - iter != pending_entries_.begin() + entry_count; ++iter) { - // The FileAccessor requires absolute paths. - absolute_paths.push_back(root_dir_.Append(*iter)); +bool ZipWriter::AddEntries(Paths paths) { + // Constructed outside the loop in order to reuse its internal buffer. + std::vector<base::FilePath> absolute_paths; + + while (!paths.empty()) { + // Work with chunks of 50 paths at most. + const size_t n = std::min<size_t>(paths.size(), 50); + const Paths relative_paths = paths.subspan(0, n); + paths = paths.subspan(n, paths.size() - n); + + // FileAccessor requires absolute paths. + absolute_paths.clear(); + absolute_paths.reserve(n); + for (const base::FilePath& relative_path : relative_paths) { + absolute_paths.push_back(root_dir_.Append(relative_path)); } - pending_entries_.erase(pending_entries_.begin(), - pending_entries_.begin() + entry_count); + + DCHECK_EQ(relative_paths.size(), n); + DCHECK_EQ(absolute_paths.size(), n); // We don't know which paths are files and which ones are directories, and - // we want to avoid making a call to file_accessor_ for each entry. Open the - // files instead, invalid files are returned for directories. + // we want to avoid making a call to file_accessor_ for each entry. Try to + // open all of the paths as files. We'll get invalid file descriptors for + // directories. std::vector<base::File> files = file_accessor_->OpenFilesForReading(absolute_paths); - DCHECK_EQ(files.size(), relative_paths.size()); - for (size_t i = 0; i < files.size(); i++) { + DCHECK_EQ(files.size(), n); + + for (size_t i = 0; i < n; i++) { const base::FilePath& relative_path = relative_paths[i]; const base::FilePath& absolute_path = absolute_paths[i]; - base::File file = std::move(files[i]); + base::File& file = files[i]; + if (file.IsValid()) { - if (!AddFileEntryToZip(zip_file_, relative_path, std::move(file))) { - LOG(ERROR) << "Failed to write file " << relative_path.value() - << " to ZIP file."; + if (!AddFileEntry(relative_path, std::move(file))) { + LOG(ERROR) << "Cannot add file '" << relative_path << "' to ZIP"; return false; } } else { - // Missing file or directory case. - base::Time last_modified = + // Either directory or missing file. + const base::Time last_modified = file_accessor_->GetLastModifiedTime(absolute_path); if (last_modified.is_null()) { - LOG(ERROR) << "Failed to write entry " << relative_path.value() - << " to ZIP file."; + LOG(ERROR) << "Missing file or directory '" << relative_path << "'"; return false; } + DCHECK(file_accessor_->DirectoryExists(absolute_path)); - if (!AddDirectoryEntryToZip(zip_file_, relative_path, last_modified)) { - LOG(ERROR) << "Failed to write directory " << relative_path.value() - << " to ZIP file."; + if (!AddDirectoryEntry(relative_path, last_modified)) { + LOG(ERROR) << "Cannot add directory '" << relative_path << "' to ZIP"; return false; } } } } + return true; } diff --git a/deps/v8/third_party/zlib/google/zip_writer.h b/deps/v8/third_party/zlib/google/zip_writer.h index bd2a727b94..489984f843 100644 --- a/deps/v8/third_party/zlib/google/zip_writer.h +++ b/deps/v8/third_party/zlib/google/zip_writer.h @@ -9,6 +9,7 @@ #include <vector> #include "base/files/file_path.h" +#include "base/time/time.h" #include "build/build_config.h" #include "third_party/zlib/google/zip.h" @@ -31,7 +32,7 @@ namespace internal { class ZipWriter { public: // Creates a writer that will write a ZIP file to |zip_file_fd|/|zip_file| -// and which entries (specifies with AddEntries) are relative to |root_dir|. +// and which entries (specified with WriteEntries) are relative to |root_dir|. // All file reads are performed using |file_accessor|. #if defined(OS_POSIX) static std::unique_ptr<ZipWriter> CreateWithFd(int zip_file_fd, @@ -43,36 +44,56 @@ class ZipWriter { FileAccessor* file_accessor); ~ZipWriter(); - // Writes the files at |paths| to the ZIP file and closes this Zip file. - // Note that the the FilePaths must be relative to |root_dir| specified in the + // Sets the optional progress callback. The callback is called once for each + // time |period|. The final callback is always called when the ZIP operation + // completes. + void SetProgressCallback(ProgressCallback callback, base::TimeDelta period) { + progress_callback_ = std::move(callback); + progress_period_ = std::move(period); + } + + // Writes the files at |paths| to the ZIP file and closes this ZIP file. + // The file paths must be relative to |root_dir| specified in the // Create method. // Returns true if all entries were written successfuly. - bool WriteEntries(const std::vector<base::FilePath>& paths); + bool WriteEntries(Paths paths); private: + // Takes ownership of |zip_file|. ZipWriter(zipFile zip_file, const base::FilePath& root_dir, FileAccessor* file_accessor); - // Writes the pending entries to the ZIP file if there are at least - // |kMaxPendingEntriesCount| of them. If |force| is true, all pending entries - // are written regardless of how many there are. - // Returns false if writing an entry fails, true if no entry was written or - // there was no error writing entries. - bool FlushEntriesIfNeeded(bool force); + // Regularly called during processing to check whether zipping should continue + // or should be cancelled. + bool ShouldContinue(); // Adds the files at |paths| to the ZIP file. These FilePaths must be relative // to |root_dir| specified in the Create method. - bool AddEntries(const std::vector<base::FilePath>& paths); + bool AddEntries(Paths paths); + + // Adds file content to currently open file entry. + bool AddFileContent(const base::FilePath& path, base::File file); + + // Adds a file entry (including file contents). + bool AddFileEntry(const base::FilePath& path, base::File file); + + // Adds a directory entry. + bool AddDirectoryEntry(const base::FilePath& path, base::Time last_modified); + + // Opens a file or directory entry. + bool OpenNewFileEntry(const base::FilePath& path, + bool is_directory, + base::Time last_modified); + + // Closes the currently open entry. + bool CloseNewFileEntry(); // Closes the ZIP file. // Returns true if successful, false otherwise (typically if an entry failed // to be written). bool Close(); - // The entries that have been added but not yet written to the ZIP file. - std::vector<base::FilePath> pending_entries_; - // The actual zip file. zipFile zip_file_; @@ -82,10 +103,22 @@ class ZipWriter { // Abstraction over file access methods used to read files. FileAccessor* file_accessor_; + // Progress stats. + Progress progress_; + + // Optional progress callback. + ProgressCallback progress_callback_; + + // Optional progress reporting period. + base::TimeDelta progress_period_; + + // Next time to report progress. + base::TimeTicks next_progress_report_time_ = base::TimeTicks::Now(); + DISALLOW_COPY_AND_ASSIGN(ZipWriter); }; } // namespace internal } // namespace zip -#endif // THIRD_PARTY_ZLIB_GOOGLE_ZIP_WRITER_H_
\ No newline at end of file +#endif // THIRD_PARTY_ZLIB_GOOGLE_ZIP_WRITER_H_ diff --git a/deps/v8/tools/clusterfuzz/testdata/baseline/d8.py b/deps/v8/tools/clusterfuzz/testdata/baseline/d8.py index 4a3d008077..cd729b9cf7 100644 --- a/deps/v8/tools/clusterfuzz/testdata/baseline/d8.py +++ b/deps/v8/tools/clusterfuzz/testdata/baseline/d8.py @@ -5,6 +5,8 @@ # for py2/py3 compatibility from __future__ import print_function +import sys + print(""" 1 v8-foozzie source: name/to/a/file.js @@ -15,3 +17,6 @@ v8-foozzie source: name/to/file.js 3 unknown """) + +if '--bad-flag' in sys.argv: + print('bad behavior') diff --git a/deps/v8/tools/clusterfuzz/testdata/build3/d8.py b/deps/v8/tools/clusterfuzz/testdata/build3/d8.py index 824b222485..a48a591d1e 100644 --- a/deps/v8/tools/clusterfuzz/testdata/build3/d8.py +++ b/deps/v8/tools/clusterfuzz/testdata/build3/d8.py @@ -5,6 +5,8 @@ # for py2/py3 compatibility from __future__ import print_function +import sys + print(""" 1 v8-foozzie source: name/to/a/file.js @@ -15,3 +17,8 @@ v8-foozzie source: name/to/file.js 3 unknown """) + +if '--bad-flag' in sys.argv: + print('bad behavior') +if '--very-bad-flag' in sys.argv: + print('very bad behavior') diff --git a/deps/v8/tools/clusterfuzz/testdata/failure_output_arch.txt b/deps/v8/tools/clusterfuzz/testdata/failure_output_arch.txt new file mode 100644 index 0000000000..bf72649c3e --- /dev/null +++ b/deps/v8/tools/clusterfuzz/testdata/failure_output_arch.txt @@ -0,0 +1,50 @@ +# +# V8 correctness failure +# V8 correctness configs: x64,ignition:x64,ignition_turbo +# V8 correctness sources: f60 +# V8 correctness suppression: +# +# CHECK +# +# Compared x64,ignition with x64,ignition_turbo +# +# Flags of x64,ignition: +--correctness-fuzzer-suppressions --expose-gc --fuzzing --allow-natives-for-differential-fuzzing --invoke-weak-callbacks --omit-quit --es-staging --wasm-staging --no-wasm-async-compilation --suppress-asm-messages --random-seed 12345 --turbo-filter=~ --noopt --liftoff --no-wasm-tier-up +# Flags of x64,ignition_turbo: +--correctness-fuzzer-suppressions --expose-gc --fuzzing --allow-natives-for-differential-fuzzing --invoke-weak-callbacks --omit-quit --es-staging --wasm-staging --no-wasm-async-compilation --suppress-asm-messages --random-seed 12345 --bad-flag +# +# Difference: ++ bad behavior +# +# Source file: +name/to/file.js +# +### Start of configuration x64,ignition: + +1 +v8-foozzie source: name/to/a/file.js +2 +v8-foozzie source: name/to/file.js + weird error + ^ +3 +unknown + + +### End of configuration x64,ignition +# +### Start of configuration x64,ignition_turbo: + +1 +v8-foozzie source: name/to/a/file.js +2 +v8-foozzie source: name/to/file.js + weird error + ^ +3 +unknown + +bad behavior + +### End of configuration x64,ignition_turbo + diff --git a/deps/v8/tools/clusterfuzz/testdata/failure_output_second.txt b/deps/v8/tools/clusterfuzz/testdata/failure_output_second.txt new file mode 100644 index 0000000000..030168884f --- /dev/null +++ b/deps/v8/tools/clusterfuzz/testdata/failure_output_second.txt @@ -0,0 +1,50 @@ +# +# V8 correctness failure +# V8 correctness configs: x64,ignition:ia32,ignition_turbo +# V8 correctness sources: f60 +# V8 correctness suppression: +# +# CHECK +# +# Compared x64,ignition with ia32,ignition_turbo +# +# Flags of x64,ignition: +--correctness-fuzzer-suppressions --expose-gc --fuzzing --allow-natives-for-differential-fuzzing --invoke-weak-callbacks --omit-quit --es-staging --wasm-staging --no-wasm-async-compilation --suppress-asm-messages --random-seed 12345 --turbo-filter=~ --noopt --liftoff --no-wasm-tier-up +# Flags of ia32,ignition_turbo: +--correctness-fuzzer-suppressions --expose-gc --fuzzing --allow-natives-for-differential-fuzzing --invoke-weak-callbacks --omit-quit --es-staging --wasm-staging --no-wasm-async-compilation --suppress-asm-messages --random-seed 12345 --very-bad-flag +# +# Difference: ++ very bad behavior +# +# Source file: +name/to/file.js +# +### Start of configuration x64,ignition: + +1 +v8-foozzie source: name/to/a/file.js +2 +v8-foozzie source: name/to/file.js + weird error + ^ +3 +unknown + + +### End of configuration x64,ignition +# +### Start of configuration ia32,ignition_turbo: + +1 +v8-foozzie source: name/to/a/file.js +2 +v8-foozzie source: name/to/file.js + weird other error +^ +3 +unknown + +very bad behavior + +### End of configuration ia32,ignition_turbo + diff --git a/deps/v8/tools/clusterfuzz/v8_foozzie.py b/deps/v8/tools/clusterfuzz/v8_foozzie.py index 9f3810c9f5..52b7954093 100755 --- a/deps/v8/tools/clusterfuzz/v8_foozzie.py +++ b/deps/v8/tools/clusterfuzz/v8_foozzie.py @@ -211,14 +211,14 @@ class ExecutionArgumentsConfig(object): 'default: bundled in the directory of this script', default=DEFAULT_D8) - def make_options(self, options, default_config=None): + def make_options(self, options, default_config=None, default_d8=None): def get(name): return getattr(options, '%s_%s' % (self.label, name)) config = default_config or get('config') assert config in CONFIGS - d8 = get('d8') + d8 = default_d8 or get('d8') if not os.path.isabs(d8): d8 = os.path.join(BASE_PATH, d8) assert os.path.exists(d8) @@ -239,6 +239,13 @@ class ExecutionConfig(object): flags = getattr(options, label).flags self.command = Command(options, label, d8, flags) + # Options for a fallback configuration only exist when comparing + # different architectures. + fallback_label = label + '_fallback' + self.fallback = None + if getattr(options, fallback_label, None): + self.fallback = ExecutionConfig(options, fallback_label) + @property def flags(self): return self.command.flags @@ -278,7 +285,15 @@ def parse_args(): options.first = first_config_arguments.make_options(options) options.second = second_config_arguments.make_options(options) options.default = second_config_arguments.make_options( - options, DEFAULT_CONFIG) + options, default_config=DEFAULT_CONFIG) + + # Use fallback configurations only on diffrent architectures. In this + # case we are going to re-test against the first architecture. + if options.first.arch != options.second.arch: + options.second_fallback = second_config_arguments.make_options( + options, default_d8=options.first.d8) + options.default_fallback = second_config_arguments.make_options( + options, default_config=DEFAULT_CONFIG, default_d8=options.first.d8) # Ensure we make a valid comparison. if (options.first.d8 == options.second.d8 and @@ -315,10 +330,12 @@ def fail_bailout(output, ignore_by_output_fun): def format_difference( - source_key, first_config, second_config, - first_config_output, second_config_output, difference, source=None): + first_config, second_config, + first_config_output, second_config_output, + difference, source_key=None, source=None): # The first three entries will be parsed by clusterfuzz. Format changes # will require changes on the clusterfuzz side. + source_key = source_key or cluster_failures(source) first_config_label = '%s,%s' % (first_config.arch, first_config.config) second_config_label = '%s,%s' % (second_config.arch, second_config.config) source_file_text = SOURCE_FILE_TEMPLATE % source if source else '' @@ -376,6 +393,29 @@ def cluster_failures(source, known_failures=None): return long_key[:ORIGINAL_SOURCE_HASH_LENGTH] +class RepeatedRuns(object): + """Helper class for storing statistical data from repeated runs.""" + def __init__(self, test_case, timeout, verbose): + self.test_case = test_case + self.timeout = timeout + self.verbose = verbose + + # Stores if any run has crashed or was simulated. + self.has_crashed = False + self.simulated = False + + def run(self, config): + comparison_output = config.command.run( + self.test_case, timeout=self.timeout, verbose=self.verbose) + self.has_crashed = self.has_crashed or comparison_output.HasCrashed() + self.simulated = self.simulated or config.is_error_simulation + return comparison_output + + @property + def crash_state(self): + return '_simulated_crash_' if self.simulated else '_unexpected_crash_' + + def run_comparisons(suppress, execution_configs, test_case, timeout, verbose=True, ignore_crashes=True, source_key=None): """Runs different configurations and bails out on output difference. @@ -393,20 +433,15 @@ def run_comparisons(suppress, execution_configs, test_case, timeout, source_key: A fixed source key. If not given, it will be inferred from the output. """ - run_test_case = lambda config: config.command.run( - test_case, timeout=timeout, verbose=verbose) + runner = RepeatedRuns(test_case, timeout, verbose) # Run the baseline configuration. baseline_config = execution_configs[0] - baseline_output = run_test_case(baseline_config) - has_crashed = baseline_output.HasCrashed() - simulated = baseline_config.is_error_simulation + baseline_output = runner.run(baseline_config) # Iterate over the remaining configurations, run and compare. for comparison_config in execution_configs[1:]: - comparison_output = run_test_case(comparison_config) - has_crashed = has_crashed or comparison_output.HasCrashed() - simulated = simulated or comparison_config.is_error_simulation + comparison_output = runner.run(comparison_config) difference, source = suppress.diff(baseline_output, comparison_output) if difference: @@ -416,12 +451,25 @@ def run_comparisons(suppress, execution_configs, test_case, timeout, fail_bailout(baseline_output, suppress.ignore_by_output) fail_bailout(comparison_output, suppress.ignore_by_output) - source_key = source_key or cluster_failures(source) + # Check if a difference also occurs with the fallback configuration and + # give it precedence. E.g. we always prefer x64 differences. + if comparison_config.fallback: + fallback_output = runner.run(comparison_config.fallback) + fallback_difference, fallback_source = suppress.diff( + baseline_output, fallback_output) + if fallback_difference: + fail_bailout(fallback_output, suppress.ignore_by_output) + source = fallback_source + comparison_config = comparison_config.fallback + comparison_output = fallback_output + difference = fallback_difference + raise FailException(format_difference( - source_key, baseline_config, comparison_config, - baseline_output, comparison_output, difference, source)) + baseline_config, comparison_config, + baseline_output, comparison_output, + difference, source_key, source)) - if has_crashed: + if runner.has_crashed: if ignore_crashes: # Show if a crash has happened in one of the runs and no difference was # detected. This is only for the statistics during experiments. @@ -429,9 +477,8 @@ def run_comparisons(suppress, execution_configs, test_case, timeout, else: # Subsume simulated and unexpected crashes (e.g. during smoke tests) # with one failure state. - crash_state = '_simulated_crash_' if simulated else '_unexpected_crash_' raise FailException(FAILURE_HEADER_TEMPLATE % dict( - configs='', source_key='', suppression=crash_state)) + configs='', source_key='', suppression=runner.crash_state)) def main(): @@ -448,7 +495,7 @@ def main(): content_bailout(content, suppress.ignore_by_content) # Prepare the baseline, default and a secondary configuration to compare to. - # The baseline (turbofan) takes precedence as many of the secondary configs + # The default (turbofan) takes precedence as many of the secondary configs # are based on the turbofan config with additional parameters. execution_configs = [ ExecutionConfig(options, 'first'), diff --git a/deps/v8/tools/clusterfuzz/v8_foozzie_test.py b/deps/v8/tools/clusterfuzz/v8_foozzie_test.py index eb8322ce62..a8ba74364b 100755 --- a/deps/v8/tools/clusterfuzz/v8_foozzie_test.py +++ b/deps/v8/tools/clusterfuzz/v8_foozzie_test.py @@ -263,7 +263,7 @@ class SystemTest(unittest.TestCase): Overview of fakes: baseline: Example foozzie output including a syntax error. - build1: Difference to baseline is a stack trace differece expected to + build1: Difference to baseline is a stack trace difference expected to be suppressed. build2: Difference to baseline is a non-suppressed output difference causing the script to fail. @@ -312,6 +312,36 @@ class SystemTest(unittest.TestCase): self.assertIn('v8_mock_archs.js', lines[1]) self.assertIn('v8_mock_archs.js', lines[3]) + def testDifferentArchFailFirst(self): + """Test that we re-test against x64. This tests the path that also fails + on x64 and then reports the error as x64. + """ + with open(os.path.join(TEST_DATA, 'failure_output_arch.txt')) as f: + expected_output = f.read() + # Build 3 simulates x86 and produces a difference on --bad-flag, but + # the baseline build shows the same difference when --bad-flag is passed. + with self.assertRaises(subprocess.CalledProcessError) as ctx: + run_foozzie('build3', '--skip-smoke-tests', + '--second-config-extra-flags=--bad-flag') + e = ctx.exception + self.assertEqual(v8_foozzie.RETURN_FAIL, e.returncode) + self.assertEqual(expected_output, cut_verbose_output(e.output, 3)) + + def testDifferentArchFailSecond(self): + """As above, but we test the path that only fails in the second (ia32) + run and not with x64 and then reports the error as ia32. + """ + with open(os.path.join(TEST_DATA, 'failure_output_second.txt')) as f: + expected_output = f.read() + # Build 3 simulates x86 and produces a difference on --very-bad-flag, + # which the baseline build doesn't. + with self.assertRaises(subprocess.CalledProcessError) as ctx: + run_foozzie('build3', '--skip-smoke-tests', + '--second-config-extra-flags=--very-bad-flag') + e = ctx.exception + self.assertEqual(v8_foozzie.RETURN_FAIL, e.returncode) + self.assertEqual(expected_output, cut_verbose_output(e.output, 3)) + def testJitless(self): """Test that webassembly is mocked out when comparing with jitless.""" stdout = run_foozzie( diff --git a/deps/v8/tools/clusterfuzz/v8_mock.js b/deps/v8/tools/clusterfuzz/v8_mock.js index be7a40b70f..41f1901d5d 100644 --- a/deps/v8/tools/clusterfuzz/v8_mock.js +++ b/deps/v8/tools/clusterfuzz/v8_mock.js @@ -99,7 +99,11 @@ Object.defineProperty( // Mock buffer access in float typed arrays because of varying NaN patterns. (function() { + const origArrayFrom = Array.from; + const origArrayIsArray = Array.isArray; + const origFunctionPrototype = Function.prototype; const origIsNaN = isNaN; + const origIterator = Symbol.iterator; const deNaNify = function(value) { return origIsNaN(value) ? 1 : value; }; const mock = function(type) { @@ -117,17 +121,17 @@ Object.defineProperty( construct: function(target, args) { for (let i = 0; i < args.length; i++) { if (args[i] != null && - typeof args[i][Symbol.iterator] === 'function') { + typeof args[i][origIterator] === 'function') { // Consume iterators. - args[i] = Array.from(args[i]); + args[i] = origArrayFrom(args[i]); } - if (Array.isArray(args[i])) { + if (origArrayIsArray(args[i])) { args[i] = args[i].map(deNaNify); } } const obj = new ( - Function.prototype.bind.call(type, null, ...args)); + origFunctionPrototype.bind.call(type, null, ...args)); return new Proxy(obj, { get: function(x, prop) { if (typeof x[prop] == "function") diff --git a/deps/v8/tools/codemap.mjs b/deps/v8/tools/codemap.mjs index 4986fbd3b0..5beeb3b1b6 100644 --- a/deps/v8/tools/codemap.mjs +++ b/deps/v8/tools/codemap.mjs @@ -252,11 +252,18 @@ export class CodeMap { } /** - * Returns an array of all libraries entries. + * Returns an array of all library entries. */ - getAllLibrariesEntries() { + getAllLibraryEntries() { return this.libraries_.exportValues(); } + + /** + * Returns an array of pairs of all library entries and their addresses. + */ + getAllLibraryEntriesWithAddresses() { + return this.libraries_.exportKeysAndValues(); + } } diff --git a/deps/v8/tools/cppgc/gen_cmake.py b/deps/v8/tools/cppgc/gen_cmake.py index 6fc1bc0b03..90eda1f3bb 100755 --- a/deps/v8/tools/cppgc/gen_cmake.py +++ b/deps/v8/tools/cppgc/gen_cmake.py @@ -244,6 +244,7 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) option(CPPGC_ENABLE_OBJECT_NAMES "Enable object names in cppgc for debug purposes" OFF) option(CPPGC_ENABLE_CAGED_HEAP "Enable heap reservation of size 4GB, only possible for 64bit archs" OFF) +option(CPPGC_ENABLE_VERIFY_LIVE_BYTES " Enable verification of live bytes in the marking verifier" OFF) option(CPPGC_ENABLE_YOUNG_GENERATION "Enable young generation in cppgc" OFF) set(CPPGC_TARGET_ARCH "x64" CACHE STRING "Target architecture, possible options: x64, x86, arm, arm64, ppc64, s390x, mipsel, mips64el") @@ -433,6 +434,9 @@ endif() if(CPPGC_ENABLE_CAGED_HEAP) target_compile_definitions({target.name} PRIVATE "-DCPPGC_CAGED_HEAP") endif() +if(CPPGC_ENABLE_VERIFY_LIVE_BYTES) + target_compile_definitions({target.name} PRIVATE "-DCPPGC_VERIFY_LIVE_BYTES") +endif() if(CPPGC_ENABLE_YOUNG_GENERATION) target_compile_definitions({target.name} PRIVATE "-DCPPGC_YOUNG_GENERATION") endif()""" diff --git a/deps/v8/tools/debug_helper/get-object-properties.cc b/deps/v8/tools/debug_helper/get-object-properties.cc index 7199bc51d2..b85bbc0590 100644 --- a/deps/v8/tools/debug_helper/get-object-properties.cc +++ b/deps/v8/tools/debug_helper/get-object-properties.cc @@ -316,7 +316,10 @@ class ReadStringVisitor : public TqObjectVisitor { bool IsExternalStringCached(const TqExternalString* object) { // The safest way to get the instance type is to use known map pointers, in // case the map data is not available. - uintptr_t map = GetOrFinish(object->GetMapValue(accessor_)); + Value<uintptr_t> map_ptr = object->GetMapValue(accessor_); + DCHECK_IMPLIES(map_ptr.validity == d::MemoryAccessResult::kOk, + !v8::internal::MapWord::IsPacked(map_ptr.value)); + uintptr_t map = GetOrFinish(map_ptr); if (done_) return false; auto instance_types = FindKnownMapInstanceTypes(map, heap_addresses_); // Exactly one of the matched instance types should be a string type, @@ -347,10 +350,10 @@ class ReadStringVisitor : public TqObjectVisitor { ExternalPointer_t resource_data = GetOrFinish(object->GetResourceDataValue(accessor_)); #ifdef V8_COMPRESS_POINTERS - uintptr_t data_address = static_cast<uintptr_t>( - DecodeExternalPointer(GetPtrComprCageBaseFromOnHeapAddress( - heap_addresses_.any_heap_pointer), - resource_data, kExternalStringResourceDataTag)); + Isolate* isolate = GetIsolateForHeapSandbox( + HeapObject::unchecked_cast(Object(heap_addresses_.any_heap_pointer))); + uintptr_t data_address = static_cast<uintptr_t>(DecodeExternalPointer( + isolate, resource_data, kExternalStringResourceDataTag)); #else uintptr_t data_address = static_cast<uintptr_t>(resource_data); #endif // V8_COMPRESS_POINTERS @@ -500,6 +503,7 @@ class AddInfoVisitor : public TqObjectVisitor { if (map_ptr.validity != d::MemoryAccessResult::kOk) { return; // Can't read the JSObject. Nothing useful to do. } + DCHECK(!v8::internal::MapWord::IsPacked(map_ptr.value)); TqMap map(map_ptr.value); // On JSObject instances, this value is the start of in-object properties. diff --git a/deps/v8/tools/dev/gm.py b/deps/v8/tools/dev/gm.py index 4e318f2f32..8a05da3cc9 100755 --- a/deps/v8/tools/dev/gm.py +++ b/deps/v8/tools/dev/gm.py @@ -262,10 +262,10 @@ class Config(object): cpu = "arm" elif self.arch == "android_arm64": cpu = "arm64" - elif self.arch == "arm64" and _GetMachine() == "aarch64": + elif self.arch == "arm64" and _GetMachine() in ("aarch64", "arm64"): # arm64 build host: cpu = "arm64" - elif self.arch == "arm" and _GetMachine() == "aarch64": + elif self.arch == "arm" and _GetMachine() in ("aarch64", "arm64"): cpu = "arm" elif "64" in self.arch or self.arch == "s390x": # Native x64 or simulator build. @@ -291,7 +291,8 @@ class Config(object): def GetSpecialCompiler(self): if _GetMachine() == "aarch64": - # We have no prebuilt Clang for arm64. Use the system Clang instead. + # We have no prebuilt Clang for arm64 on Linux, so use the system Clang + # instead. return ["clang_base_path = \"/usr\"", "clang_use_chrome_plugins = false"] return [] diff --git a/deps/v8/tools/dev/v8gen.py b/deps/v8/tools/dev/v8gen.py index 18abf8aa25..c6ba1d2174 100755 --- a/deps/v8/tools/dev/v8gen.py +++ b/deps/v8/tools/dev/v8gen.py @@ -121,7 +121,7 @@ class GenerateGnArgs(object): add_common_options(list_cmd) # Default to "gen" unless global help is requested. - if not args or args[0] not in subps.choices.keys() + ['-h', '--help']: + if not args or args[0] not in list(subps.choices) + ['-h', '--help']: args = ['gen'] + args return self.parser.parse_args(args) @@ -193,14 +193,16 @@ class GenerateGnArgs(object): return 0 def verbose_print_1(self, text): - if self._options.verbosity >= 1: + if self._options.verbosity and self._options.verbosity >= 1: print('#' * 80) print(text) def verbose_print_2(self, text): - if self._options.verbosity >= 2: + if self._options.verbosity and self._options.verbosity >= 2: indent = ' ' * 2 for l in text.splitlines(): + if type(l) == bytes: + l = l.decode() print(indent + l) def _call_cmd(self, args): @@ -306,7 +308,7 @@ if __name__ == "__main__": try: sys.exit(gen.main()) except Exception: - if gen._options.verbosity < 2: + if not gen._options.verbosity or gen._options.verbosity < 2: print ('\nHint: You can raise verbosity (-vv) to see the output of ' 'failed commands.\n') raise diff --git a/deps/v8/tools/generate-header-include-checks.py b/deps/v8/tools/generate-header-include-checks.py index 4e58a492de..2171ee8a0d 100755 --- a/deps/v8/tools/generate-header-include-checks.py +++ b/deps/v8/tools/generate-header-include-checks.py @@ -31,6 +31,8 @@ OUT_DIR = os.path.join(V8_DIR, 'check-header-includes') AUTO_EXCLUDE = [ # flag-definitions.h needs a mode set for being included. 'src/flags/flag-definitions.h', + # recorder.h should only be included conditionally. + 'src/libplatform/tracing/recorder.h', ] AUTO_EXCLUDE_PATTERNS = [ 'src/base/atomicops_internals_.*', diff --git a/deps/v8/tools/mb/mb.py b/deps/v8/tools/mb/mb.py index 8ca9089944..7031ba50db 100755 --- a/deps/v8/tools/mb/mb.py +++ b/deps/v8/tools/mb/mb.py @@ -27,7 +27,16 @@ import sys import subprocess import tempfile import traceback -import urllib2 + +# for py2/py3 compatibility +try: + from urllib.parse import quote +except ImportError: + from urllib2 import quote +try: + from urllib.request import urlopen +except ImportError: + from urllib2 import urlopen from collections import OrderedDict @@ -869,7 +878,7 @@ class MetaBuildWrapper(object): return err, labels def GNCmd(self, subcommand, path, *args): - if self.platform == 'linux2': + if self.platform.startswith('linux'): subdir, exe = 'linux64', 'gn' elif self.platform == 'darwin': subdir, exe = 'mac', 'gn' @@ -1109,7 +1118,7 @@ class MetaBuildWrapper(object): def CheckCompile(self, builder_group, builder): url_template = self.args.url_template + '/{builder}/builds/_all?as_text=1' - url = urllib2.quote( + url = quote( url_template.format(builder_group=builder_group, builder=builder), safe=':/()?=') try: @@ -1201,7 +1210,7 @@ class MetaBuildWrapper(object): def Fetch(self, url): # This function largely exists so it can be overridden for testing. - f = urllib2.urlopen(url) + f = urlopen(url) contents = f.read() f.close() return contents diff --git a/deps/v8/tools/profile.mjs b/deps/v8/tools/profile.mjs index f4be41e2da..8001f4b5ae 100644 --- a/deps/v8/tools/profile.mjs +++ b/deps/v8/tools/profile.mjs @@ -151,6 +151,14 @@ export class Profile { scripts_ = []; urlToScript_ = new Map(); + serializeVMSymbols() { + let result = this.codeMap_.getAllStaticEntriesWithAddresses(); + result.concat(this.codeMap_.getAllLibraryEntriesWithAddresses()) + return result.map(([startAddress, codeEntry]) => { + return [codeEntry.getName(), startAddress, startAddress + codeEntry.size] + }); + } + /** * Returns whether a function with the specified name must be skipped. * Should be overriden by subclasses. @@ -182,7 +190,6 @@ export class Profile { COMPILED: 0, IGNITION: 1, BASELINE: 2, - NATIVE_CONTEXT_INDEPENDENT: 3, TURBOPROP: 4, TURBOFAN: 5, } @@ -198,8 +205,6 @@ export class Profile { return this.CodeState.IGNITION; case '^': return this.CodeState.BASELINE; - case '-': - return this.CodeState.NATIVE_CONTEXT_INDEPENDENT; case '+': return this.CodeState.TURBOPROP; case '*': @@ -215,8 +220,6 @@ export class Profile { return "Unopt"; } else if (state === this.CodeState.BASELINE) { return "Baseline"; - } else if (state === this.CodeState.NATIVE_CONTEXT_INDEPENDENT) { - return "NCI"; } else if (state === this.CodeState.TURBOPROP) { return "Turboprop"; } else if (state === this.CodeState.TURBOFAN) { diff --git a/deps/v8/tools/profview/profile-utils.js b/deps/v8/tools/profview/profile-utils.js index 35fe3d7cb2..bd9f248b54 100644 --- a/deps/v8/tools/profview/profile-utils.js +++ b/deps/v8/tools/profview/profile-utils.js @@ -6,11 +6,12 @@ let codeKinds = [ "UNKNOWN", - "CPPPARSE", - "CPPCOMPBC", - "CPPCOMP", - "CPPGC", - "CPPEXT", + "CPP_PARSE", + "CPP_COMP_BC", + "CPP_COMP_BASELINE", + "CPP_COMP", + "CPP_GC", + "CPP_EXT", "CPP", "LIB", "IC", @@ -18,11 +19,10 @@ let codeKinds = [ "STUB", "BUILTIN", "REGEXP", - "JSOPT", - "JSUNOPT", - "JSNCI", - "JSTURBOPROP", - "JSBASELINE", + "JS_OPT", + "JS_UNOPT", + "JS_TURBOPROP", + "JS_BASELINE", ]; function resolveCodeKind(code) { @@ -53,17 +53,15 @@ function resolveCodeKind(code) { return "CODE"; } else if (code.type === "JS") { if (code.kind === "Builtin") { - return "JSUNOPT"; + return "JS_UNOPT"; } else if (code.kind === "Opt") { - return "JSOPT"; + return "JS_OPT"; } else if (code.kind === "Unopt") { - return "JSUNOPT"; - } else if (code.kind === "NCI") { - return "JSNCI"; + return "JS_UNOPT"; } else if (code.kind === "Baseline") { - return "JSBASELINE"; + return "JS_BASELINE"; } else if (code.kind === "Turboprop") { - return "JSTURBOPROP"; + return "JS_TURBOPROP"; } } console.log("Unknown code type '" + type + "'."); @@ -73,16 +71,17 @@ function resolveCodeKindAndVmState(code, vmState) { let kind = resolveCodeKind(code); if (kind === "CPP") { if (vmState === 1) { - kind = "CPPGC"; + kind = "CPP_GC"; } else if (vmState === 2) { - kind = "CPPPARSE"; + kind = "CPP_PARSE"; } else if (vmState === 3) { - kind = "CPPCOMPBC"; + kind = "CPP_COMP_BC"; } else if (vmState === 4) { - kind = "CPPCOMP"; + kind = "CPP_COMP"; } else if (vmState === 6) { - kind = "CPPEXT"; + kind = "CPP_EXT"; } + // TODO(cbruni): add CPP_COMP_BASELINE } return kind; } @@ -272,20 +271,20 @@ function buildCategoryTreeAndLookup() { } root.children.push(n); } - addCategory("JS Optimized", [ "JSOPT" ]); - addCategory("JS NCI", [ "JSNCI" ]); - addCategory("JS Turboprop", [ "JSTURBOPROP" ]); - addCategory("JS Baseline", [ "JSBASELINE" ]); - addCategory("JS Unoptimized", [ "JSUNOPT", "BC" ]); + addCategory("JS Optimized", [ "JS_OPT" ]); + addCategory("JS Turboprop", [ "JS_TURBOPROP" ]); + addCategory("JS Baseline", [ "JS_BASELINE" ]); + addCategory("JS Unoptimized", [ "JS_UNOPT", "BC" ]); addCategory("IC", [ "IC" ]); addCategory("RegExp", [ "REGEXP" ]); addCategory("Other generated", [ "STUB", "BUILTIN" ]); addCategory("C++", [ "CPP", "LIB" ]); - addCategory("C++/GC", [ "CPPGC" ]); - addCategory("C++/Parser", [ "CPPPARSE" ]); - addCategory("C++/Bytecode compiler", [ "CPPCOMPBC" ]); - addCategory("C++/Compiler", [ "CPPCOMP" ]); - addCategory("C++/External", [ "CPPEXT" ]); + addCategory("C++/GC", [ "CPP_GC" ]); + addCategory("C++/Parser", [ "CPP_PARSE" ]); + addCategory("C++/Bytecode Compiler", [ "CPP_COMP_BC" ]); + addCategory("C++/Baseline Compiler", [ "CPP_COMP_BASELINE" ]); + addCategory("C++/Compiler", [ "CPP_COMP" ]); + addCategory("C++/External", [ "CPP_EXT" ]); addCategory("Unknown", [ "UNKNOWN" ]); return { categories, root }; diff --git a/deps/v8/tools/profview/profview.js b/deps/v8/tools/profview/profview.js index 15a74f7240..60fc05e727 100644 --- a/deps/v8/tools/profview/profview.js +++ b/deps/v8/tools/profview/profview.js @@ -212,63 +212,91 @@ let main = { const CATEGORY_COLOR = "#f5f5f5"; const bucketDescriptors = - [ { kinds : [ "JSOPT" ], - color : "#64dd17", - backgroundColor : "#80e27e", - text : "JS Optimized" }, - { kinds : [ "JSNCI" ], - color : "#3289a8", - backgroundColor : "#3289a8", - text : "JS NCI" }, - { kinds : [ "JSTURBOPROP" ], - color : "#693eb8", - backgroundColor : "#a6c452", - text : "JS Turboprop" }, - { kinds : [ "JSBASELINE" ], - color : "#b3005b", - backgroundColor : "#ff9e80", - text : "JS Baseline" }, - { kinds : [ "JSUNOPT", "BC" ], - color : "#dd2c00", - backgroundColor : "#ff9e80", - text : "JS Unoptimized" }, - { kinds : [ "IC" ], - color : "#ff6d00", - backgroundColor : "#ffab40", - text : "IC" }, - { kinds : [ "STUB", "BUILTIN", "REGEXP" ], - color : "#ffd600", - backgroundColor : "#ffea00", - text : "Other generated" }, - { kinds : [ "CPP", "LIB" ], - color : "#304ffe", - backgroundColor : "#6ab7ff", - text : "C++" }, - { kinds : [ "CPPEXT" ], - color : "#003c8f", - backgroundColor : "#c0cfff", - text : "C++/external" }, - { kinds : [ "CPPPARSE" ], - color : "#aa00ff", - backgroundColor : "#ffb2ff", - text : "C++/Parser" }, - { kinds : [ "CPPCOMPBC" ], - color : "#43a047", - backgroundColor : "#88c399", - text : "C++/Bytecode compiler" }, - { kinds : [ "CPPCOMP" ], - color : "#00e5ff", - backgroundColor : "#6effff", - text : "C++/Compiler" }, - { kinds : [ "CPPGC" ], - color : "#6200ea", - backgroundColor : "#e1bee7", - text : "C++/GC" }, - { kinds : [ "UNKNOWN" ], - color : "#bdbdbd", - backgroundColor : "#efefef", - text : "Unknown" } - ]; + [{ + kinds: ["JS_OPT"], + color: "#64dd17", + backgroundColor: "#80e27e", + text: "JS Optimized" + }, + { + kinds: ["JS_TURBOPROP"], + color: "#693eb8", + backgroundColor: "#a6c452", + text: "JS Turboprop" + }, + { + kinds: ["JS_BASELINE"], + color: "#b3005b", + backgroundColor: "#ff9e80", + text: "JS Baseline" + }, + { + kinds: ["JS_UNOPT", "BC"], + color: "#dd2c00", + backgroundColor: "#ff9e80", + text: "JS Unoptimized" + }, + { + kinds: ["IC"], + color: "#ff6d00", + backgroundColor: "#ffab40", + text: "IC" + }, + { + kinds: ["STUB", "BUILTIN", "REGEXP"], + color: "#ffd600", + backgroundColor: "#ffea00", + text: "Other generated" + }, + { + kinds: ["CPP", "LIB"], + color: "#304ffe", + backgroundColor: "#6ab7ff", + text: "C++" + }, + { + kinds: ["CPP_EXT"], + color: "#003c8f", + backgroundColor: "#c0cfff", + text: "C++/external" + }, + { + kinds: ["CPP_PARSE"], + color: "#aa00ff", + backgroundColor: "#ffb2ff", + text: "C++/Parser" + }, + { + kinds: ["CPP_COMP_BC"], + color: "#43a047", + backgroundColor: "#88c399", + text: "C++/Bytecode compiler" + }, + { + kinds: ["CPP_COMP_BASELINE"], + color: "#43a047", + backgroundColor: "#5a8000", + text: "C++/Baseline compiler" + }, + { + kinds: ["CPP_COMP"], + color: "#00e5ff", + backgroundColor: "#6effff", + text: "C++/Compiler" + }, + { + kinds: ["CPP_GC"], + color: "#6200ea", + backgroundColor: "#e1bee7", + text: "C++/GC" + }, + { + kinds: ["UNKNOWN"], + color: "#bdbdbd", + backgroundColor: "#efefef", + text: "Unknown" + } + ]; let kindToBucketDescriptor = {}; for (let i = 0; i < bucketDescriptors.length; i++) { @@ -294,15 +322,17 @@ function codeTypeToText(type) { switch (type) { case "UNKNOWN": return "Unknown"; - case "CPPPARSE": + case "CPP_PARSE": return "C++ Parser"; - case "CPPCOMPBC": - return "C++ Bytecode Compiler)"; - case "CPPCOMP": + case "CPP_COMP_BASELINE": + return "C++ Baseline Compiler"; + case "CPP_COMP_BC": + return "C++ Bytecode Compiler"; + case "CPP_COMP": return "C++ Compiler"; - case "CPPGC": + case "CPP_GC": return "C++ GC"; - case "CPPEXT": + case "CPP_EXT": return "C++ External"; case "CPP": return "C++"; @@ -318,13 +348,13 @@ function codeTypeToText(type) { return "Builtin"; case "REGEXP": return "RegExp"; - case "JSOPT": + case "JS_OPT": return "JS opt"; - case "JSNCI": - return "JS NCI"; - case "JSTURBOPROP": + case "JS_TURBOPROP": return "JS Turboprop"; - case "JSUNOPT": + case "JS_BASELINE": + return "JS Baseline"; + case "JS_UNOPT": return "JS unopt"; } console.error("Unknown type: " + type); diff --git a/deps/v8/tools/release/auto_roll.py b/deps/v8/tools/release/auto_roll.py index ffba545c8f..76247b1fb3 100755 --- a/deps/v8/tools/release/auto_roll.py +++ b/deps/v8/tools/release/auto_roll.py @@ -126,7 +126,7 @@ class UpdateChromiumCheckout(Step): def RunStep(self): self['json_output']['monitoring_state'] = 'update_chromium' cwd = self._options.chromium - self.GitCheckout("master", cwd=cwd) + self.GitCheckout("main", cwd=cwd) self.DeleteBranch("work-branch", cwd=cwd) self.GitPull(cwd=cwd) @@ -168,7 +168,7 @@ class UploadCL(Step): else: print("Dry run - don't upload.") - self.GitCheckout("master", cwd=cwd) + self.GitCheckout("main", cwd=cwd) self.GitDeleteBranch("work-branch", cwd=cwd) class CleanUp(Step): diff --git a/deps/v8/tools/release/test_scripts.py b/deps/v8/tools/release/test_scripts.py index bfac9a4a34..7cf5d14130 100755 --- a/deps/v8/tools/release/test_scripts.py +++ b/deps/v8/tools/release/test_scripts.py @@ -612,7 +612,7 @@ deps = { Cmd("git describe --tags roll_hsh", "3.22.4"), Cmd("git describe --tags last_roll_hsh", "3.22.2.1"), Cmd("git status -s -uno", "", cwd=chrome_dir), - Cmd("git checkout -f master", "", cwd=chrome_dir), + Cmd("git checkout -f main", "", cwd=chrome_dir), Cmd("git branch", "", cwd=chrome_dir), Cmd("git pull", "", cwd=chrome_dir), Cmd("git fetch origin", ""), @@ -626,7 +626,7 @@ deps = { Cmd("git cl upload --send-mail -f " "--cq-dry-run --set-bot-commit --bypass-hooks", "", cwd=chrome_dir), - Cmd("git checkout -f master", "", cwd=chrome_dir), + Cmd("git checkout -f main", "", cwd=chrome_dir), Cmd("git branch -D work-branch", "", cwd=chrome_dir), ] self.Expect(expectations) diff --git a/deps/v8/tools/system-analyzer/index.css b/deps/v8/tools/system-analyzer/index.css index ad3f24d27b..53110079b2 100644 --- a/deps/v8/tools/system-analyzer/index.css +++ b/deps/v8/tools/system-analyzer/index.css @@ -68,7 +68,7 @@ section { border-radius: 8px; cursor: pointer; } -::-webkit-scrollbar-thumb:hover { +::-webkit-scrollbar-thumb:hover { background-color: rgba(128, 128, 128, 0.8); } diff --git a/deps/v8/tools/system-analyzer/index.mjs b/deps/v8/tools/system-analyzer/index.mjs index 4b0ed9f9c5..550838118b 100644 --- a/deps/v8/tools/system-analyzer/index.mjs +++ b/deps/v8/tools/system-analyzer/index.mjs @@ -110,7 +110,7 @@ class App { entries = entry.entries.concat(entry.sourcePositions); break; default: - throw new Error('Unknown selection type!'); + throw new Error(`Unknown selection type: ${entry.constructor?.name}`); } if (entry.sourcePosition) { entries.push(entry.sourcePosition); @@ -134,7 +134,11 @@ class App { } selectEntriesOfSingleType(entries, type) { - switch (entries[0]?.constructor ?? type) { + const entryType = entries[0]?.constructor ?? type; + switch (entryType) { + case Script: + entries = entries.flatMap(script => script.sourcePositions); + return this.showSourcePositions(entries); case SourcePosition: return this.showSourcePositions(entries); case MapLogEntry: @@ -148,7 +152,7 @@ class App { case DeoptLogEntry: return this.showDeoptEntries(entries); default: - throw new Error('Unknown selection type!'); + throw new Error(`Unknown selection type: ${entryType?.name}`); } } @@ -205,6 +209,8 @@ class App { focusLogEntry(entry) { switch (entry.constructor) { + case Script: + return this.focusSourcePosition(entry.sourcePositions[0]); case SourcePosition: return this.focusSourcePosition(entry); case MapLogEntry: @@ -218,7 +224,7 @@ class App { case DeoptLogEntry: return this.focusDeoptLogEntry(entry); default: - throw new Error('Unknown selection type!'); + throw new Error(`Unknown selection type: ${entry.constructor?.name}`); } } diff --git a/deps/v8/tools/system-analyzer/processor.mjs b/deps/v8/tools/system-analyzer/processor.mjs index 9685e09ad6..806cba132c 100644 --- a/deps/v8/tools/system-analyzer/processor.mjs +++ b/deps/v8/tools/system-analyzer/processor.mjs @@ -230,17 +230,21 @@ export class Processor extends LogReader { this.addSourcePosition(codeEntry, logEntry); logEntry.functionSourcePosition = logEntry.sourcePosition; // custom parse deopt location - if (deoptLocation !== '<unknown>') { - const colSeparator = deoptLocation.lastIndexOf(':'); - const rowSeparator = deoptLocation.lastIndexOf(':', colSeparator - 1); - const script = this.getScript(deoptLocation.substring(1, rowSeparator)); - const line = - parseInt(deoptLocation.substring(rowSeparator + 1, colSeparator)); - const column = parseInt( - deoptLocation.substring(colSeparator + 1, deoptLocation.length - 1)); - logEntry.sourcePosition = - script.addSourcePosition(line, column, logEntry); + if (deoptLocation === '<unknown>') return; + // Handle deopt location for inlined code: <location> inlined at <location> + const inlinedPos = deoptLocation.indexOf(' inlined at '); + if (inlinedPos > 0) { + deoptLocation = deoptLocation.substring(0, inlinedPos) } + const colSeparator = deoptLocation.lastIndexOf(':'); + const rowSeparator = deoptLocation.lastIndexOf(':', colSeparator - 1); + const script = this.getScript(deoptLocation.substring(1, rowSeparator)); + if (!script) return; + const line = + parseInt(deoptLocation.substring(rowSeparator + 1, colSeparator)); + const column = parseInt( + deoptLocation.substring(colSeparator + 1, deoptLocation.length - 1)); + logEntry.sourcePosition = script.addSourcePosition(line, column, logEntry); } processScriptSource(scriptId, url, source) { diff --git a/deps/v8/tools/system-analyzer/view/code-panel-template.html b/deps/v8/tools/system-analyzer/view/code-panel-template.html index e04c6be8c1..3622c25062 100644 --- a/deps/v8/tools/system-analyzer/view/code-panel-template.html +++ b/deps/v8/tools/system-analyzer/view/code-panel-template.html @@ -11,7 +11,9 @@ found in the LICENSE file. --> } </style> <div class="panel"> - <h2>Code Panel</h2> + <input type="checkbox" id="closer" class="panelCloserInput" checked> + <label class="panelCloserLabel" for="closer">▼</label> + <h2 class="title">Code Panel</h2> <div class="selection"> <select id="codeSelect"></select> <button id="selectedRelatedButton">Select Related Events</button> diff --git a/deps/v8/tools/system-analyzer/view/code-panel.mjs b/deps/v8/tools/system-analyzer/view/code-panel.mjs index 3b5261e03c..34e4ad300e 100644 --- a/deps/v8/tools/system-analyzer/view/code-panel.mjs +++ b/deps/v8/tools/system-analyzer/view/code-panel.mjs @@ -5,11 +5,11 @@ import {IcLogEntry} from '../log/ic.mjs'; import {MapLogEntry} from '../log/map.mjs'; import {FocusEvent, SelectionEvent, ToolTipEvent} from './events.mjs'; -import {delay, DOM, formatBytes, formatMicroSeconds, V8CustomElement} from './helper.mjs'; +import {CollapsableElement, delay, DOM, formatBytes, formatMicroSeconds} from './helper.mjs'; DOM.defineCustomElement('view/code-panel', (templateText) => - class CodePanel extends V8CustomElement { + class CodePanel extends CollapsableElement { _timeline; _selectedEntries; _entry; @@ -24,19 +24,17 @@ DOM.defineCustomElement('view/code-panel', set timeline(timeline) { this._timeline = timeline; this.$('.panel').style.display = timeline.isEmpty() ? 'none' : 'inherit'; - this.update(); + this.requestUpdate(); } set selectedEntries(entries) { this._selectedEntries = entries; - // TODO: add code selection dropdown - this._updateSelect(); this.entry = entries.first(); } set entry(entry) { this._entry = entry; - this.update(); + this.requestUpdate(); } get _disassemblyNode() { @@ -52,12 +50,15 @@ DOM.defineCustomElement('view/code-panel', } _update() { + this._updateSelect(); this._disassemblyNode.innerText = this._entry?.disassemble ?? ''; this._sourceNode.innerText = this._entry?.source ?? ''; } _updateSelect() { const select = this._codeSelectNode; + if (select.data === this._selectedEntries) return; + select.data = this._selectedEntries; select.options.length = 0; const sorted = this._selectedEntries.slice().sort((a, b) => a.time - b.time); diff --git a/deps/v8/tools/system-analyzer/view/helper.mjs b/deps/v8/tools/system-analyzer/view/helper.mjs index 780864ef5a..44da06ced4 100644 --- a/deps/v8/tools/system-analyzer/view/helper.mjs +++ b/deps/v8/tools/system-analyzer/view/helper.mjs @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -class CSSColor { +export class CSSColor { static _cache = new Map(); static get(name) { @@ -121,7 +121,7 @@ class CSSColor { } } -class DOM { +export class DOM { static element(type, classes) { const node = document.createElement(type); if (classes === undefined) return node; @@ -185,19 +185,18 @@ class DOM { } } -function $(id) { +export function $(id) { return document.querySelector(id) } -class V8CustomElement extends HTMLElement { +export class V8CustomElement extends HTMLElement { _updateTimeoutId; - _updateCallback = this._update.bind(this); + _updateCallback = this.forceUpdate.bind(this); constructor(templateText) { super(); const shadowRoot = this.attachShadow({mode: 'open'}); shadowRoot.innerHTML = templateText; - this._updateCallback = this._update.bind(this); } $(id) { @@ -208,7 +207,7 @@ class V8CustomElement extends HTMLElement { return this.shadowRoot.querySelectorAll(query); } - update(useAnimation = false) { + requestUpdate(useAnimation = false) { if (useAnimation) { window.cancelAnimationFrame(this._updateTimeoutId); this._updateTimeoutId = @@ -221,12 +220,54 @@ class V8CustomElement extends HTMLElement { } } + forceUpdate() { + this._update(); + } + _update() { throw Error('Subclass responsibility'); } } -class Chunked { +export class CollapsableElement extends V8CustomElement { + constructor(templateText) { + super(templateText); + this._hasPendingUpdate = false; + this._closer.onclick = _ => this.tryUpdateOnVisibilityChange(); + } + + get _closer() { + return this.$('#closer'); + } + + _contentIsVisible() { + return !this._closer.checked; + } + + requestUpdate(useAnimation = false) { + // A pending update will be resolved later, no need to try again. + if (this._hasPendingUpdate) return; + this._hasPendingUpdate = true; + this.requestUpdateIfVisible(useAnimation); + } + + tryUpdateOnVisibilityChange() { + if (!this._hasPendingUpdate) return; + this.requestUpdateIfVisible(true); + } + + requestUpdateIfVisible(useAnimation) { + if (!this._contentIsVisible()) return; + return super.requestUpdate(useAnimation); + } + + forceUpdate() { + this._hasPendingUpdate = false; + super.forceUpdate(); + } +} + +export class Chunked { constructor(iterable, limit) { this._iterator = iterable[Symbol.iterator](); this._limit = limit; @@ -248,7 +289,7 @@ class Chunked { } } -class LazyTable { +export class LazyTable { constructor(table, rowData, rowElementCreator, limit = 100) { this._table = table; this._chunkedRowData = new Chunked(rowData, limit); @@ -258,22 +299,25 @@ class LazyTable { } else { table.replaceChild(DOM.tbody(), table.tBodies[0]); } - if (!table.tFoot) { - const td = table.appendChild(DOM.element('tfoot')) - .appendChild(DOM.tr()) - .appendChild(DOM.td()); - for (let count of [10, 100]) { - const button = DOM.element('button'); - button.innerText = `+${count}`; - button.onclick = (e) => this._addMoreRows(count); - td.appendChild(button); - } - td.setAttribute('colspan', 100); - } + if (!table.tFoot) this._addFooter(); table.tFoot.addEventListener('click', this._clickHandler); this._addMoreRows(); } + _addFooter() { + const td = DOM.td(); + td.setAttribute('colspan', 100); + for (let addCount of [10, 100, 250, 500]) { + const button = DOM.element('button'); + button.innerText = `+${addCount}`; + button.onclick = (e) => this._addMoreRows(addCount); + td.appendChild(button); + } + this._table.appendChild(DOM.element('tfoot')) + .appendChild(DOM.tr()) + .appendChild(td); + } + _addMoreRows(count = undefined) { const fragment = new DocumentFragment(); for (let row of this._chunkedRowData.next(count)) { @@ -304,11 +348,4 @@ export function gradientStopsFromGroups( return stops; } -export * from '../helper.mjs'; -export { - DOM, - $, - V8CustomElement, - CSSColor, - LazyTable, -}; +export * from '../helper.mjs';
\ No newline at end of file diff --git a/deps/v8/tools/system-analyzer/view/list-panel-template.html b/deps/v8/tools/system-analyzer/view/list-panel-template.html index 4714f97c02..fb38f5b459 100644 --- a/deps/v8/tools/system-analyzer/view/list-panel-template.html +++ b/deps/v8/tools/system-analyzer/view/list-panel-template.html @@ -30,11 +30,13 @@ found in the LICENSE file. --> text-align: left; cursor: -webkit-zoom-in; color: rgba(var(--border-color), 1); + user-select: none; } .toggle::before { content: "▶"; } + .open .toggle::before { content: "▼"; } @@ -58,7 +60,7 @@ found in the LICENSE file. --> </style> <div class="panel"> - <input type="checkbox" id="closer" class="panelCloserInput"> + <input type="checkbox" id="closer" class="panelCloserInput" checked> <label class="panelCloserLabel" for="closer">▼</label> <h2 id="title"></h2> <div class="selection"> diff --git a/deps/v8/tools/system-analyzer/view/list-panel.mjs b/deps/v8/tools/system-analyzer/view/list-panel.mjs index 85e3cd47e2..bc3b2f89d5 100644 --- a/deps/v8/tools/system-analyzer/view/list-panel.mjs +++ b/deps/v8/tools/system-analyzer/view/list-panel.mjs @@ -5,23 +5,24 @@ import {Script, SourcePosition} from '../../profile.mjs'; import {LogEntry} from '../log/log.mjs'; -import {FocusEvent} from './events.mjs'; +import {FocusEvent, ToolTipEvent} from './events.mjs'; import {groupBy, LazyTable} from './helper.mjs'; -import {DOM, V8CustomElement} from './helper.mjs'; +import {CollapsableElement, DOM} from './helper.mjs'; DOM.defineCustomElement('view/list-panel', (templateText) => - class ListPanel extends V8CustomElement { + class ListPanel extends CollapsableElement { _selectedLogEntries = []; _displayedLogEntries = []; _timeline; _detailsClickHandler = this._handleDetailsClick.bind(this); _logEntryClickHandler = this._handleLogEntryClick.bind(this); + _logEntryMouseOverHandler = this._logEntryMouseOverHandler.bind(this); constructor() { super(templateText); - this.groupKey.addEventListener('change', e => this.update()); + this.groupKey.addEventListener('change', e => this.requestUpdate()); this.showAllRadio.onclick = _ => this._showEntries(this._timeline); this.showTimerangeRadio.onclick = _ => this._showEntries(this._timeline.selectionOrSelf); @@ -72,9 +73,11 @@ DOM.defineCustomElement('view/list-panel', get showAllRadio() { return this.$('#show-all'); } + get showTimerangeRadio() { return this.$('#show-timerange'); } + get showSelectionRadio() { return this.$('#show-selection'); } @@ -95,7 +98,7 @@ DOM.defineCustomElement('view/list-panel', _showEntries(entries) { this._displayedLogEntries = entries; - this.update(); + this.requestUpdate(); } _update() { @@ -123,6 +126,12 @@ DOM.defineCustomElement('view/list-panel', this.dispatchEvent(new FocusEvent(group.key)); } + _logEntryMouseOverHandler(e) { + const group = e.currentTarget.group; + this.dispatchEvent( + new ToolTipEvent(group.key.toStringLong(), e.currentTarget)); + } + _handleDetailsClick(event) { event.stopPropagation(); const tr = event.target.parentNode; @@ -182,6 +191,7 @@ DOM.defineCustomElement('view/list-panel', const valueTd = tr.appendChild(DOM.td(`${group.key}`, 'key')); if (this._isClickable(group.key)) { tr.onclick = this._logEntryClickHandler; + tr.onmouseover = this._logEntryMouseOverHandler; valueTd.classList.add('clickable'); } return tr; diff --git a/deps/v8/tools/system-analyzer/view/map-panel-template.html b/deps/v8/tools/system-analyzer/view/map-panel-template.html index 8a2b23ee3d..4790e376f9 100644 --- a/deps/v8/tools/system-analyzer/view/map-panel-template.html +++ b/deps/v8/tools/system-analyzer/view/map-panel-template.html @@ -11,7 +11,7 @@ found in the LICENSE file. --> } </style> <div class="panel"> - <input type="checkbox" id="closer" class="panelCloserInput"> + <input type="checkbox" id="closer" class="panelCloserInput" checked> <label class="panelCloserLabel" for="closer">▼</label> <h2>Map Panel</h2> <div class="selection"> diff --git a/deps/v8/tools/system-analyzer/view/map-panel.mjs b/deps/v8/tools/system-analyzer/view/map-panel.mjs index 7ee2325f34..be00ef0124 100644 --- a/deps/v8/tools/system-analyzer/view/map-panel.mjs +++ b/deps/v8/tools/system-analyzer/view/map-panel.mjs @@ -7,100 +7,103 @@ import './map-panel/map-transitions.mjs'; import {MapLogEntry} from '../log/map.mjs'; import {FocusEvent} from './events.mjs'; -import {DOM, V8CustomElement} from './helper.mjs'; - -DOM.defineCustomElement( - 'view/map-panel', (templateText) => class MapPanel extends V8CustomElement { - _map; - _timeline; - _selectedLogEntries = []; - _displayedLogEntries = []; - - constructor() { - super(templateText); - this.searchBarBtn.addEventListener('click', e => this._handleSearch(e)); - this.showAllRadio.onclick = _ => this._showEntries(this._timeline); - this.showTimerangeRadio.onclick = _ => - this._showEntries(this._timeline.selectionOrSelf); - this.showSelectionRadio.onclick = _ => - this._showEntries(this._selectedLogEntries); - } - - get showAllRadio() { - return this.$('#show-all'); - } - get showTimerangeRadio() { - return this.$('#show-timerange'); - } - get showSelectionRadio() { - return this.$('#show-selection'); - } - - get mapTransitionsPanel() { - return this.$('#map-transitions'); - } - - get mapDetailsTransitionsPanel() { - return this.$('#map-details-transitions'); - } - - get mapDetailsPanel() { - return this.$('#map-details'); - } - - get searchBarBtn() { - return this.$('#searchBarBtn'); - } - - get searchBar() { - return this.$('#searchBar'); - } - - set timeline(timeline) { - console.assert(timeline !== undefined, 'timeline undefined!'); - this._timeline = timeline; - this.$('.panel').style.display = - timeline.isEmpty() ? 'none' : 'inherit'; - this.mapTransitionsPanel.timeline = timeline; - this.mapDetailsTransitionsPanel.timeline = timeline; - } - - set selectedLogEntries(entries) { - if (entries === this._timeline.selection) { - this.showTimerangeRadio.click(); - } else if (entries == this._timeline) { - this.showAllRadio.click(); - } else { - this._selectedLogEntries = entries; - this.showSelectionRadio.click(); - } - } - - set map(map) { - this._map = map; - this.mapDetailsTransitionsPanel.selectedLogEntries = [map]; - this.mapDetailsPanel.map = map; - } - - _showEntries(entries) { - this._displayedLogEntries = entries; - this.mapTransitionsPanel.selectedLogEntries = entries; - } - - update() { - // nothing to do - } - - _handleSearch(e) { - let searchBar = this.$('#searchBarInput'); - let searchBarInput = searchBar.value; - // access the map from model cache - let selectedMap = MapLogEntry.get(searchBarInput); - if (selectedMap) { - searchBar.className = 'success'; - this.dispatchEvent(new FocusEvent(selectedMap)); - } else { - searchBar.className = 'failure'; - } - } - }); +import {CollapsableElement, DOM} from './helper.mjs'; + +DOM.defineCustomElement('view/map-panel', + (templateText) => + class MapPanel extends CollapsableElement { + _map; + _timeline; + _selectedLogEntries = []; + _displayedLogEntries = []; + + constructor() { + super(templateText); + this.searchBarBtn.addEventListener('click', e => this._handleSearch(e)); + this.showAllRadio.onclick = _ => this._showEntries(this._timeline); + this.showTimerangeRadio.onclick = _ => + this._showEntries(this._timeline.selectionOrSelf); + this.showSelectionRadio.onclick = _ => + this._showEntries(this._selectedLogEntries); + } + + get showAllRadio() { + return this.$('#show-all'); + } + + get showTimerangeRadio() { + return this.$('#show-timerange'); + } + + get showSelectionRadio() { + return this.$('#show-selection'); + } + + get mapTransitionsPanel() { + return this.$('#map-transitions'); + } + + get mapDetailsTransitionsPanel() { + return this.$('#map-details-transitions'); + } + + get mapDetailsPanel() { + return this.$('#map-details'); + } + + get searchBarBtn() { + return this.$('#searchBarBtn'); + } + + get searchBar() { + return this.$('#searchBar'); + } + + set timeline(timeline) { + console.assert(timeline !== undefined, 'timeline undefined!'); + this._timeline = timeline; + this.$('.panel').style.display = timeline.isEmpty() ? 'none' : 'inherit'; + this.mapTransitionsPanel.timeline = timeline; + this.mapDetailsTransitionsPanel.timeline = timeline; + } + + set selectedLogEntries(entries) { + if (entries === this._timeline.selection) { + this.showTimerangeRadio.click(); + } else if (entries == this._timeline) { + this.showAllRadio.click(); + } else { + this._selectedLogEntries = entries; + this.showSelectionRadio.click(); + } + } + + set map(map) { + this._map = map; + this.requestUpdate(); + } + + _showEntries(entries) { + this._displayedLogEntries = entries; + this.requestUpdate(); + } + + _update() { + this.mapDetailsTransitionsPanel.selectedLogEntries = [this._map]; + this.mapDetailsPanel.map = this._map; + this.mapTransitionsPanel.selectedLogEntries = this._displayedLogEntries; + } + + _handleSearch(e) { + const searchBar = this.$('#searchBarInput'); + const searchBarInput = searchBar.value; + // access the map from model cache + const selectedMap = MapLogEntry.get(searchBarInput); + if (selectedMap) { + searchBar.className = 'success'; + this.dispatchEvent(new FocusEvent(selectedMap)); + } else { + searchBar.className = 'failure'; + } + } +}); diff --git a/deps/v8/tools/system-analyzer/view/map-panel/map-details.mjs b/deps/v8/tools/system-analyzer/view/map-panel/map-details.mjs index 446475a5b0..a8ea27e2e4 100644 --- a/deps/v8/tools/system-analyzer/view/map-panel/map-details.mjs +++ b/deps/v8/tools/system-analyzer/view/map-panel/map-details.mjs @@ -25,7 +25,7 @@ DOM.defineCustomElement( set map(map) { if (this._map === map) return; this._map = map; - this.update(); + this.requestUpdate(); } _update() { diff --git a/deps/v8/tools/system-analyzer/view/map-panel/map-transitions.mjs b/deps/v8/tools/system-analyzer/view/map-panel/map-transitions.mjs index f60bd37d39..fbe78f9156 100644 --- a/deps/v8/tools/system-analyzer/view/map-panel/map-transitions.mjs +++ b/deps/v8/tools/system-analyzer/view/map-panel/map-transitions.mjs @@ -37,7 +37,7 @@ DOM.defineCustomElement( set selectedLogEntries(list) { this._selectedLogEntries = list; - this.update(); + this.requestUpdate(); } _update() { diff --git a/deps/v8/tools/system-analyzer/view/script-panel-template.html b/deps/v8/tools/system-analyzer/view/script-panel-template.html index 27fd3d83eb..ab5c3f95f3 100644 --- a/deps/v8/tools/system-analyzer/view/script-panel-template.html +++ b/deps/v8/tools/system-analyzer/view/script-panel-template.html @@ -40,11 +40,15 @@ found in the LICENSE file. --> .marked { background-color: var(--secondary-color); + box-shadow: 0px 0px 2px 3px var(--secondary-color); + animation-name: pulse; + animation-duration: 3s; + animation-delay: 500ms; } @keyframes pulse { 0% { - box-shadow: 0px 0px 0px 0px var(--secondary-color); + box-shadow: 0px 0px 0px 3px var(--secondary-color); } 5% { box-shadow: 0px 0px 0px 10px var(--secondary-color); @@ -56,11 +60,13 @@ found in the LICENSE file. --> box-shadow: 0px 0px 0px 10px var(--secondary-color); } 20% { - box-shadow: 0px 0px 0px 0px var(--secondary-color); + box-shadow: 0px 0px 2px 3px var(--secondary-color); } } </style> <div class="panel"> + <input type="checkbox" id="closer" class="panelCloserInput" checked> + <label class="panelCloserLabel" for="closer">▼</label> <h2>Source Panel</h2> <div class="selection"> <select id="script-dropdown"></select> diff --git a/deps/v8/tools/system-analyzer/view/script-panel.mjs b/deps/v8/tools/system-analyzer/view/script-panel.mjs index b0dac6960c..6f5befcc16 100644 --- a/deps/v8/tools/system-analyzer/view/script-panel.mjs +++ b/deps/v8/tools/system-analyzer/view/script-panel.mjs @@ -5,11 +5,11 @@ import {groupBy} from '../helper.mjs'; import {App} from '../index.mjs' import {SelectRelatedEvent, ToolTipEvent} from './events.mjs'; -import {CSSColor, delay, DOM, formatBytes, gradientStopsFromGroups, V8CustomElement} from './helper.mjs'; +import {CollapsableElement, CSSColor, delay, DOM, formatBytes, gradientStopsFromGroups} from './helper.mjs'; DOM.defineCustomElement('view/script-panel', (templateText) => - class SourcePanel extends V8CustomElement { + class SourcePanel extends CollapsableElement { _selectedSourcePositions = []; _sourcePositionsToMarkNodes = []; _scripts = []; @@ -110,7 +110,7 @@ DOM.defineCustomElement('view/script-panel', if (!sourcePosition) return; const markNode = this._sourcePositionsToMarkNodes.get(sourcePosition); markNode.scrollIntoView( - {behavior: 'smooth', block: 'nearest', inline: 'center'}); + {behavior: 'auto', block: 'center', inline: 'center'}); } _handleSelectScript(e) { diff --git a/deps/v8/tools/system-analyzer/view/timeline/timeline-track.mjs b/deps/v8/tools/system-analyzer/view/timeline/timeline-track.mjs index 60216af2ee..6f05b772d8 100644 --- a/deps/v8/tools/system-analyzer/view/timeline/timeline-track.mjs +++ b/deps/v8/tools/system-analyzer/view/timeline/timeline-track.mjs @@ -112,7 +112,7 @@ DOM.defineCustomElement('view/timeline/timeline-track', _updateChunks() { this._chunks = this._timeline.chunks(this.nofChunks, this._legend.filterPredicate); - this.update(); + this.requestUpdate(); } get chunks() { @@ -180,7 +180,7 @@ DOM.defineCustomElement('view/timeline/timeline-track', node.ondblclick = this._chunkDoubleClickHandler; } const style = node.style; - style.left = `${((chunk.start - start) * this._timeToPixel) | 0}px`; + style.left = `${i * kChunkWidth}px`; style.height = `${height | 0}px`; style.backgroundImage = this._createBackgroundImage(chunk); node.chunk = chunk; diff --git a/deps/v8/tools/system-analyzer/view/tool-tip-template.html b/deps/v8/tools/system-analyzer/view/tool-tip-template.html index b0e9c72c45..dc56997825 100644 --- a/deps/v8/tools/system-analyzer/view/tool-tip-template.html +++ b/deps/v8/tools/system-analyzer/view/tool-tip-template.html @@ -24,6 +24,7 @@ found in the LICENSE file. --> .textContent { font-family: monospace; white-space: pre; + overflow-wrap: anywhere; overflow-x: hidden; max-width: 500px; } diff --git a/deps/v8/tools/system-analyzer/view/tool-tip.mjs b/deps/v8/tools/system-analyzer/view/tool-tip.mjs index 896c04dd29..a01ee1bdbf 100644 --- a/deps/v8/tools/system-analyzer/view/tool-tip.mjs +++ b/deps/v8/tools/system-analyzer/view/tool-tip.mjs @@ -16,9 +16,10 @@ DOM.defineCustomElement( this.hide(); } else { this.show(); - this.update(true); + this.requestUpdate(true); } }); + document.addEventListener('click', (e) => this.hide()); } _update() { @@ -31,7 +32,7 @@ DOM.defineCustomElement( rect.y += rect.height; } this._setPosition(rect, atRight, atBottom); - this.update(true); + this.requestUpdate(true); } set positionOrTargetNode(positionOrTargetNode) { @@ -47,7 +48,7 @@ DOM.defineCustomElement( this._targetNode = targetNode; if (targetNode) { this._intersectionObserver.observe(targetNode); - this.update(true); + this.requestUpdate(true); } } diff --git a/deps/v8/tools/testrunner/base_runner.py b/deps/v8/tools/testrunner/base_runner.py index 76aff630ff..b6889a3773 100644 --- a/deps/v8/tools/testrunner/base_runner.py +++ b/deps/v8/tools/testrunner/base_runner.py @@ -172,6 +172,7 @@ class BuildConfig(object): self.cfi_vptr = build_config['is_cfi'] self.control_flow_integrity = build_config['v8_control_flow_integrity'] self.concurrent_marking = build_config['v8_enable_concurrent_marking'] + self.single_generation = build_config['v8_enable_single_generation'] self.dcheck_always_on = build_config['dcheck_always_on'] self.gcov_coverage = build_config['is_gcov_coverage'] self.is_android = build_config['is_android'] @@ -189,6 +190,8 @@ class BuildConfig(object): self.verify_csa = build_config['v8_enable_verify_csa'] self.lite_mode = build_config['v8_enable_lite_mode'] self.pointer_compression = build_config['v8_enable_pointer_compression'] + self.pointer_compression_shared_cage = build_config['v8_enable_pointer_compression_shared_cage'] + self.third_party_heap = build_config['v8_enable_third_party_heap'] self.webassembly = build_config['v8_enable_webassembly'] # Export only for MIPS target if self.arch in ['mips', 'mipsel', 'mips64', 'mips64el']: @@ -229,6 +232,10 @@ class BuildConfig(object): detected_options.append('lite_mode') if self.pointer_compression: detected_options.append('pointer_compression') + if self.pointer_compression_shared_cage: + detected_options.append('pointer_compression_shared_cage') + if self.third_party_heap: + detected_options.append('third_party_heap') if self.webassembly: detected_options.append('webassembly') @@ -351,16 +358,13 @@ class BaseTestRunner(object): # Progress parser.add_option("-p", "--progress", - choices=PROGRESS_INDICATORS.keys(), default="mono", + choices=list(PROGRESS_INDICATORS), default="mono", help="The style of progress indicator (verbose, dots, " "color, mono)") parser.add_option("--json-test-results", help="Path to a file for storing json results.") parser.add_option('--slow-tests-cutoff', type="int", default=100, help='Collect N slowest tests') - parser.add_option("--junitout", help="File name of the JUnit output") - parser.add_option("--junittestsuite", default="v8tests", - help="The testsuite name in the JUnit output file") parser.add_option("--exit-after-n-failures", type="int", default=100, help="Exit after the first N failures instead of " "running all tests. Pass 0 to disable this feature.") @@ -641,7 +645,7 @@ class BaseTestRunner(object): self.build_config.arch in ['mipsel', 'mips', 'mips64', 'mips64el'] and self.build_config.mips_arch_variant) - no_simd_sse = any( + no_simd_hardware = any( i in options.extra_flags for i in ['--noenable-sse3', '--no-enable-sse3' '--noenable-ssse3', @@ -649,14 +653,16 @@ class BaseTestRunner(object): '--noenable-sse4-1', '--no-enable-sse4_1']) - # Set no_simd_sse on architectures without Simd enabled. + # Set no_simd_hardware on architectures without Simd enabled. if self.build_config.arch == 'mips64el' or \ self.build_config.arch == 'mipsel': - no_simd_sse = not simd_mips + no_simd_hardware = not simd_mips - # Set no_simd_sse on architectures without Simd enabled. - if self.build_config.arch == 'ppc64': - no_simd_sse = True + # Ppc64 processors earlier than POWER9 do not support Simd instructions + if self.build_config.arch == 'ppc64' and \ + not self.build_config.simulator_run and \ + utils.GuessPowerProcessorVersion() < 9: + no_simd_hardware = True return { "arch": self.build_config.arch, @@ -665,6 +671,7 @@ class BaseTestRunner(object): "cfi_vptr": self.build_config.cfi_vptr, "control_flow_integrity": self.build_config.control_flow_integrity, "concurrent_marking": self.build_config.concurrent_marking, + "single_generation": self.build_config.single_generation, "dcheck_always_on": self.build_config.dcheck_always_on, "deopt_fuzzer": False, "endurance_fuzzer": False, @@ -680,7 +687,7 @@ class BaseTestRunner(object): "msan": self.build_config.msan, "no_harness": options.no_harness, "no_i18n": self.build_config.no_i18n, - "no_simd_sse": no_simd_sse, + "no_simd_hardware": no_simd_hardware, "novfp3": False, "optimize_for_size": "--optimize-for-size" in options.extra_flags, "predictable": self.build_config.predictable, @@ -688,11 +695,13 @@ class BaseTestRunner(object): "simulator_run": self.build_config.simulator_run and not options.dont_skip_simulator_slow_tests, "system": self.target_os, + "third_party_heap": self.build_config.third_party_heap, "tsan": self.build_config.tsan, "ubsan_vptr": self.build_config.ubsan_vptr, "verify_csa": self.build_config.verify_csa, "lite_mode": self.build_config.lite_mode, "pointer_compression": self.build_config.pointer_compression, + "pointer_compression_shared_cage": self.build_config.pointer_compression_shared_cage, } def _runner_flags(self): @@ -725,6 +734,8 @@ class BaseTestRunner(object): factor *= 2 if self.build_config.predictable: factor *= 4 + if self.build_config.tsan: + factor *= 1.5 if self.build_config.use_sanitizer: factor *= 1.5 if self.build_config.is_full_debug: @@ -787,9 +798,6 @@ class BaseTestRunner(object): def _create_progress_indicators(self, test_count, options): procs = [PROGRESS_INDICATORS[options.progress]()] - if options.junitout: - procs.append(progress.JUnitTestProgressIndicator(options.junitout, - options.junittestsuite)) if options.json_test_results: procs.append(progress.JsonTestProgressIndicator(self.framework_name)) diff --git a/deps/v8/tools/testrunner/local/junit_output.py b/deps/v8/tools/testrunner/local/junit_output.py deleted file mode 100644 index 52f31ec422..0000000000 --- a/deps/v8/tools/testrunner/local/junit_output.py +++ /dev/null @@ -1,49 +0,0 @@ -# Copyright 2013 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: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -import xml.etree.ElementTree as xml - - -class JUnitTestOutput: - def __init__(self, test_suite_name): - self.root = xml.Element("testsuite") - self.root.attrib["name"] = test_suite_name - - def HasRunTest(self, test_name, test_cmd, test_duration, test_failure): - testCaseElement = xml.Element("testcase") - testCaseElement.attrib["name"] = test_name - testCaseElement.attrib["cmd"] = test_cmd - testCaseElement.attrib["time"] = str(round(test_duration, 3)) - if len(test_failure): - failureElement = xml.Element("failure") - failureElement.text = test_failure - testCaseElement.append(failureElement) - self.root.append(testCaseElement) - - def FinishAndWrite(self, f): - xml.ElementTree(self.root).write(f, "UTF-8") diff --git a/deps/v8/tools/testrunner/local/statusfile.py b/deps/v8/tools/testrunner/local/statusfile.py index 6c2cc01fb8..b6f97cd564 100644 --- a/deps/v8/tools/testrunner/local/statusfile.py +++ b/deps/v8/tools/testrunner/local/statusfile.py @@ -282,7 +282,7 @@ def ReadStatusFile(content, variables): def _ReadSection(section, variables, rules, prefix_rules): assert type(section) == dict - for rule, outcome_list in section.iteritems(): + for rule, outcome_list in section.items(): assert type(rule) == str if rule[-1] == '*': diff --git a/deps/v8/tools/testrunner/local/utils.py b/deps/v8/tools/testrunner/local/utils.py index 8fdc16b4bb..94429a9fde 100644 --- a/deps/v8/tools/testrunner/local/utils.py +++ b/deps/v8/tools/testrunner/local/utils.py @@ -97,6 +97,58 @@ def GuessOS(): return None +# Returns power processor version, taking compatibility mode into account. +# (Power9 running in Power8 compatibility mode returns 8) +# Only useful if arch is ppc64 +def GuessPowerProcessorVersion(): + import ctypes, ctypes.util + os = GuessOS() + if os == 'linux': + AT_PLATFORM = 15 # from linux/auxvec.h + _LIBC = ctypes.CDLL(ctypes.util.find_library('c')) + _LIBC.getauxval.argtypes = [ctypes.c_ulong] + _LIBC.getauxval.restype = ctypes.c_char_p + at_platform = _LIBC.getauxval(AT_PLATFORM).decode('utf-8').lower() + if at_platform.startswith('power6'): + return 6 + elif at_platform.startswith('power7'): + return 7 + elif at_platform.startswith('power8'): + return 8 + elif at_platform.startswith('power9'): + return 9 + elif at_platform.startswith('power10'): + return 10 + else: + raise Exception('Unable to guess power processor version') + elif os == 'aix': + # covers aix and os400 + RTLD_MEMBER = 0x00040000 + _LIBC = ctypes.CDLL(ctypes.util.find_library('c'), + ctypes.DEFAULT_MODE | RTLD_MEMBER) + class _system_configuration(ctypes.Structure): + _fields_ = [ + ('architecture', ctypes.c_int), + ('implementation', ctypes.c_int), + ] + cfg = _system_configuration.in_dll(_LIBC, '_system_configuration') + # Values found in sys/systemcfg.h + if cfg.implementation == 0x4000: + return 6 + elif cfg.implementation == 0x8000: + return 7 + elif cfg.implementation == 0x10000: + return 8 + elif cfg.implementation == 0x20000: + return 9 + elif cfg.implementation == 0x40000: + return 10 + else: + raise Exception('Unable to guess power processor version') + else: + raise Exception('Unable to guess power processor version') + + def UseSimulator(arch): machine = platform.machine() return (machine and diff --git a/deps/v8/tools/testrunner/local/variants.py b/deps/v8/tools/testrunner/local/variants.py index 0af6d3ab0e..e214de0540 100644 --- a/deps/v8/tools/testrunner/local/variants.py +++ b/deps/v8/tools/testrunner/local/variants.py @@ -44,6 +44,7 @@ ALL_VARIANT_FLAGS = { "instruction_scheduling": [["--turbo-instruction-scheduling"]], "stress_instruction_scheduling": [["--turbo-stress-instruction-scheduling"]], "top_level_await": [["--harmony-top-level-await"]], + "wasm_write_protect_code": [["--wasm-write-protect-code-memory"]], } # Flags that lead to a contradiction with the flags provided by the respective @@ -59,9 +60,9 @@ INCOMPATIBLE_FLAGS_PER_VARIANT = { "slow_path": ["--no-force-slow-path"], "stress_concurrent_allocation": ["--single-threaded-gc", "--predictable"], "stress_concurrent_inlining": ["--single-threaded", "--predictable", - "--no-turbo-direct-heap-access"], + "--no-concurrent-inlining"], + "concurrent_inlining": ["--no-concurrent-inlining"], "stress_incremental_marking": ["--no-stress-incremental-marking"], - "future": ["--no-turbo-direct-heap-access"], "stress_js_bg_compile_wasm_code_gc": ["--no-stress-background-compile"], "stress": ["--no-stress-opt", "--always-opt", "--no-always-opt", "--liftoff", "--max-inlined-bytecode-size=*", @@ -69,16 +70,17 @@ INCOMPATIBLE_FLAGS_PER_VARIANT = { "--wasm-generic-wrapper"], "sparkplug": ["--jitless", "--no-sparkplug" ], "always_sparkplug": ["--jitless", "--no-sparkplug", "--no-always-sparkplug"], - "turboprop": ["--interrupt-budget=*", "--no-turbo-direct-heap-access", - "--no-turboprop"], - "turboprop_as_toptier": ["--interrupt-budget=*", - "--no-turbo-direct-heap-access", "--no-turboprop", + "turboprop": ["--interrupt-budget=*", "--no-turboprop"], + "turboprop_as_toptier": ["--interrupt-budget=*", "--no-turboprop", "--no-turboprop-as-toptier"], "code_serializer": ["--cache=after-execute", "--cache=full-code-cache", "--cache=none"], "no_local_heaps": ["--concurrent-inlining", "--turboprop"], "experimental_regexp": ["--no-enable-experimental-regexp-engine", "--no-default-to-experimental-regexp-engine"], + # There is a negative implication: --perf-prof disables + # --wasm-write-protect-code-memory. + "wasm_write_protect_code": ["--perf-prof"], } # Flags that lead to a contradiction under certain build variables. @@ -101,6 +103,8 @@ INCOMPATIBLE_FLAGS_PER_BUILD_VARIABLE = { # The conflicts might be directly contradictory flags or be caused by the # implications defined in flag-definitions.h. INCOMPATIBLE_FLAGS_PER_EXTRA_FLAG = { + "--concurrent-inlining": + INCOMPATIBLE_FLAGS_PER_VARIANT["concurrent_inlining"], "--concurrent-recompilation": ["--no-concurrent-recompilation", "--predictable"], "--enable-armv8": ["--no-enable-armv8"], "--gc-interval=*": ["--gc-interval=*"], @@ -109,9 +113,9 @@ INCOMPATIBLE_FLAGS_PER_EXTRA_FLAG = { "--no-enable-sse4-1": ["--enable-sse4-1"], "--optimize-for-size": ["--max-semi-space-size=*"], "--stress_concurrent_allocation": ["--single-threaded-gc", "--predictable"], - "--stress_concurrent_inlining": ["--single-threaded", "--predictable"], + "--stress-concurrent-inlining": + INCOMPATIBLE_FLAGS_PER_VARIANT["stress_concurrent_inlining"], "--stress-flush-bytecode": ["--no-stress-flush-bytecode"], - "--future": ["--no-turbo-direct-heap-access"], "--stress-incremental-marking": INCOMPATIBLE_FLAGS_PER_VARIANT["stress_incremental_marking"], } diff --git a/deps/v8/tools/testrunner/outproc/message.py b/deps/v8/tools/testrunner/outproc/message.py index c253b6f8e0..c301529eb7 100644 --- a/deps/v8/tools/testrunner/outproc/message.py +++ b/deps/v8/tools/testrunner/outproc/message.py @@ -9,9 +9,11 @@ import re from . import base -class OutProc(base.OutProc): - def __init__(self, expected_outcomes, basepath, expected_fail): - super(OutProc, self).__init__(expected_outcomes) +class OutProc(base.ExpectedOutProc): + def __init__(self, expected_outcomes, basepath, expected_fail, + expected_filename, regenerate_expected_files): + super(OutProc, self).__init__(expected_outcomes, expected_filename, + regenerate_expected_files) self._basepath = basepath self._expected_fail = expected_fail diff --git a/deps/v8/tools/testrunner/standard_runner.py b/deps/v8/tools/testrunner/standard_runner.py index f3551d01b8..94c2576682 100755 --- a/deps/v8/tools/testrunner/standard_runner.py +++ b/deps/v8/tools/testrunner/standard_runner.py @@ -46,7 +46,7 @@ VARIANT_ALIASES = { 'exhaustive': MORE_VARIANTS + VARIANTS, # Additional variants, run on a subset of bots. 'extra': ['nooptimization', 'future', 'no_wasm_traps', 'turboprop', - 'instruction_scheduling', 'turboprop_as_toptier'], + 'instruction_scheduling', 'always_sparkplug'], } # Extra flags passed to all tests using the standard test runner. diff --git a/deps/v8/tools/testrunner/testproc/fuzzer.py b/deps/v8/tools/testrunner/testproc/fuzzer.py index 965ba23d04..1237da56b2 100644 --- a/deps/v8/tools/testrunner/testproc/fuzzer.py +++ b/deps/v8/tools/testrunner/testproc/fuzzer.py @@ -43,6 +43,7 @@ EXTRA_FLAGS = [ (0.1, '--regexp-tier-up-ticks=10'), (0.1, '--regexp-tier-up-ticks=100'), (0.1, '--stress-background-compile'), + (0.1, '--stress-concurrent-inlining'), (0.1, '--stress-lazy-source-positions'), (0.1, '--stress-wasm-code-gc'), (0.1, '--turbo-instruction-scheduling'), diff --git a/deps/v8/tools/testrunner/testproc/progress.py b/deps/v8/tools/testrunner/testproc/progress.py index 634ef7c2f2..9ff943a5c2 100644 --- a/deps/v8/tools/testrunner/testproc/progress.py +++ b/deps/v8/tools/testrunner/testproc/progress.py @@ -15,7 +15,6 @@ import time from . import base from . import util -from ..local import junit_output def print_failure_header(test): @@ -349,45 +348,6 @@ class MonochromeProgressIndicator(CompactProgressIndicator): print(("\r" + (" " * last_length) + "\r"), end='') -class JUnitTestProgressIndicator(ProgressIndicator): - def __init__(self, junitout, junittestsuite): - super(JUnitTestProgressIndicator, self).__init__() - self._requirement = base.DROP_PASS_STDOUT - - self.outputter = junit_output.JUnitTestOutput(junittestsuite) - if junitout: - self.outfile = open(junitout, "w") - else: - self.outfile = sys.stdout - - def _on_result_for(self, test, result): - # TODO(majeski): Support for dummy/grouped results - fail_text = "" - output = result.output - if result.has_unexpected_output: - stdout = output.stdout.strip() - if len(stdout): - fail_text += "stdout:\n%s\n" % stdout - stderr = output.stderr.strip() - if len(stderr): - fail_text += "stderr:\n%s\n" % stderr - fail_text += "Command: %s" % result.cmd.to_string() - if output.HasCrashed(): - fail_text += "exit code: %d\n--- CRASHED ---" % output.exit_code - if output.HasTimedOut(): - fail_text += "--- TIMEOUT ---" - self.outputter.HasRunTest( - test_name=str(test), - test_cmd=result.cmd.to_string(relative=True), - test_duration=output.duration, - test_failure=fail_text) - - def finished(self): - self.outputter.FinishAndWrite(self.outfile) - if self.outfile != sys.stdout: - self.outfile.close() - - class JsonTestProgressIndicator(ProgressIndicator): def __init__(self, framework_name): super(JsonTestProgressIndicator, self).__init__() diff --git a/deps/v8/tools/tickprocessor-driver.mjs b/deps/v8/tools/tickprocessor-driver.mjs index e7020e388d..c0507bfffe 100644 --- a/deps/v8/tools/tickprocessor-driver.mjs +++ b/deps/v8/tools/tickprocessor-driver.mjs @@ -73,6 +73,7 @@ const tickProcessor = new TickProcessor( params.separateBytecodes, params.separateBuiltins, params.separateStubs, + params.separateBaselineHandlers, params.callGraphSize, params.ignoreUnknown, params.stateFilter, @@ -85,4 +86,9 @@ const tickProcessor = new TickProcessor( params.runtimeTimerFilter, params.preprocessJson); tickProcessor.processLogFile(params.logFileName); -tickProcessor.printStatistics(); + +if (params.serializeVMSymbols) { + tickProcessor.printVMSymbols(); +} else { + tickProcessor.printStatistics(); +} diff --git a/deps/v8/tools/tickprocessor.mjs b/deps/v8/tools/tickprocessor.mjs index 1ad67e22c0..8b59e57335 100644 --- a/deps/v8/tools/tickprocessor.mjs +++ b/deps/v8/tools/tickprocessor.mjs @@ -35,10 +35,12 @@ class V8Profile extends Profile { static IC_RE = /^(LoadGlobalIC: )|(Handler: )|(?:CallIC|LoadIC|StoreIC)|(?:Builtin: (?:Keyed)?(?:Load|Store)IC_)/; static BYTECODES_RE = /^(BytecodeHandler: )/; + static BASELINE_HANDLERS_RE = /^(Builtin: .*Baseline.*)/; static BUILTINS_RE = /^(Builtin: )/; static STUBS_RE = /^(Stub: )/; - constructor(separateIc, separateBytecodes, separateBuiltins, separateStubs) { + constructor(separateIc, separateBytecodes, separateBuiltins, separateStubs, + separateBaselineHandlers) { super(); const regexps = []; if (!separateIc) regexps.push(V8Profile.IC_RE); @@ -46,7 +48,7 @@ class V8Profile extends Profile { if (!separateBuiltins) regexps.push(V8Profile.BUILTINS_RE); if (!separateStubs) regexps.push(V8Profile.STUBS_RE); if (regexps.length > 0) { - this.skipThisFunction = function (name) { + this.skipThisFunction = function(name) { for (let i = 0; i < regexps.length; i++) { if (regexps[i].test(name)) return true; } @@ -64,7 +66,7 @@ export function readFile(fileName) { try { return read(fileName); } catch (e) { - printErr(`${fileName}: ${e.message || e}`); + printErr(`file="${fileName}": ${e.message || e}`); throw e; } } @@ -77,6 +79,7 @@ export class TickProcessor extends LogReader { separateBytecodes, separateBuiltins, separateStubs, + separateBaselineHandlers, callGraphSize, ignoreUnknown, stateFilter, @@ -211,7 +214,7 @@ export class TickProcessor extends LogReader { this.profile_ = new JsonProfile(); } else { this.profile_ = new V8Profile(separateIc, separateBytecodes, - separateBuiltins, separateStubs); + separateBuiltins, separateStubs, separateBaselineHandlers); } this.codeTypes_ = {}; // Count each tick as a time unit. @@ -228,6 +231,7 @@ export class TickProcessor extends LogReader { GC: 1, PARSER: 2, BYTECODE_COMPILER: 3, + // TODO(cbruni): add BASELINE_COMPILER COMPILER: 4, OTHER: 5, EXTERNAL: 6, @@ -285,7 +289,7 @@ export class TickProcessor extends LogReader { processSharedLibrary(name, startAddr, endAddr, aslrSlide) { const entry = this.profile_.addLibrary(name, startAddr, endAddr, aslrSlide); this.setCodeType(entry.getName(), 'SHARED_LIB'); - const libFuncs = this.cppEntriesProvider_.parseVmSymbols( + this.cppEntriesProvider_.parseVmSymbols( name, startAddr, endAddr, aslrSlide, (fName, fStart, fEnd) => { this.profile_.addStaticCode(fName, fStart, fEnd); this.setCodeType(fName, 'CPP'); @@ -409,6 +413,11 @@ export class TickProcessor extends LogReader { this.generation_++; } + printVMSymbols() { + console.log( + JSON.stringify(this.profile_.serializeVMSymbols())); + } + printStatistics() { if (this.preprocessJson) { this.profile_.writeJson(); @@ -854,6 +863,8 @@ export class ArgumentsProcessor extends BaseArgumentsProcessor { 'Separate Builtin entries'], '--separate-stubs': ['separateStubs', parseBool, 'Separate Stub entries'], + '--separate-baseline-handlers': ['separateBaselineHandlers', parseBool, + 'Separate Baseline Handler entries'], '--unix': ['platform', 'unix', 'Specify that we are running on *nix platform'], '--windows': ['platform', 'windows', @@ -880,6 +891,8 @@ export class ArgumentsProcessor extends BaseArgumentsProcessor { 'Ignore ticks outside pairs of Date.now() calls'], '--only-summary': ['onlySummary', true, 'Print only tick summary, exclude other information'], + '--serialize-vm-symbols': ['serializeVMSymbols', true, + 'Print all C++ symbols and library addresses as JSON data'], '--preprocess': ['preprocessJson', true, 'Preprocess for consumption with web interface'] }; @@ -903,6 +916,7 @@ export class ArgumentsProcessor extends BaseArgumentsProcessor { separateBytecodes: false, separateBuiltins: true, separateStubs: true, + separateBaselineHandlers: false, preprocessJson: null, targetRootFS: '', nm: 'nm', @@ -913,6 +927,7 @@ export class ArgumentsProcessor extends BaseArgumentsProcessor { pairwiseTimedRange: false, onlySummary: false, runtimeTimerFilter: null, + serializeVMSymbols: false, }; } } diff --git a/deps/v8/tools/ubsan/blacklist.txt b/deps/v8/tools/ubsan/ignorelist.txt index ea4e79bf52..4e476abe49 100644 --- a/deps/v8/tools/ubsan/blacklist.txt +++ b/deps/v8/tools/ubsan/ignorelist.txt @@ -1,5 +1,5 @@ ############################################################################# -# UBSan blacklist. +# UBSan ignorelist. # Bug 8735: PropertyCallbackInfo<void> vs PropertyCallbackInfo<T>. fun:*v8*internal*PropertyCallbackArguments*CallAccessorSetter* diff --git a/deps/v8/tools/ubsan/vptr_blacklist.txt b/deps/v8/tools/ubsan/vptr_ignorelist.txt index ccad5b1061..26c30ed02d 100644 --- a/deps/v8/tools/ubsan/vptr_blacklist.txt +++ b/deps/v8/tools/ubsan/vptr_ignorelist.txt @@ -1,9 +1,9 @@ ############################################################################# -# UBSan vptr blacklist. -# Function and type based blacklisting use a mangled name, and it is especially +# UBSan vptr ignorelist. +# Function and type based ignorelisting use a mangled name, and it is especially # tricky to represent C++ types. For now, any possible changes by name manglings # are simply represented as wildcard expressions of regexp, and thus it might be -# over-blacklisted. +# over-ignorelisted. ############################################################################# # UBsan goes into an infinite recursion when __dynamic_cast instrumented with diff --git a/deps/v8/tools/unittests/run_tests_test.py b/deps/v8/tools/unittests/run_tests_test.py index f174a239bf..ae3833abc8 100755 --- a/deps/v8/tools/unittests/run_tests_test.py +++ b/deps/v8/tools/unittests/run_tests_test.py @@ -334,7 +334,8 @@ class SystemTest(unittest.TestCase): is_msan=True, is_tsan=True, is_ubsan_vptr=True, target_cpu='x86', v8_enable_i18n_support=False, v8_target_cpu='x86', v8_enable_verify_csa=False, v8_enable_lite_mode=False, - v8_enable_pointer_compression=False) + v8_enable_pointer_compression=False, + v8_enable_pointer_compression_shared_cage=False) result = run_tests( basedir, '--progress=verbose', diff --git a/deps/v8/tools/unittests/testdata/testroot1/v8_build_config.json b/deps/v8/tools/unittests/testdata/testroot1/v8_build_config.json index eb30c4d28f..04ccbb1600 100644 --- a/deps/v8/tools/unittests/testdata/testroot1/v8_build_config.json +++ b/deps/v8/tools/unittests/testdata/testroot1/v8_build_config.json @@ -21,6 +21,9 @@ "v8_enable_verify_csa": false, "v8_enable_lite_mode": false, "v8_enable_pointer_compression": true, + "v8_enable_pointer_compression_shared_cage": true, "v8_control_flow_integrity": false, + "v8_enable_single_generation": false, + "v8_enable_third_party_heap": false, "v8_enable_webassembly": true } diff --git a/deps/v8/tools/unittests/testdata/testroot2/v8_build_config.json b/deps/v8/tools/unittests/testdata/testroot2/v8_build_config.json index e6d5b52942..b3e36ef6de 100644 --- a/deps/v8/tools/unittests/testdata/testroot2/v8_build_config.json +++ b/deps/v8/tools/unittests/testdata/testroot2/v8_build_config.json @@ -21,6 +21,9 @@ "v8_enable_verify_csa": false, "v8_enable_lite_mode": false, "v8_enable_pointer_compression": false, + "v8_enable_pointer_compression_shared_cage": false, "v8_control_flow_integrity": false, + "v8_enable_single_generation": false, + "v8_enable_third_party_heap": false, "v8_enable_webassembly": true } diff --git a/deps/v8/tools/v8.xcodeproj/README.txt b/deps/v8/tools/v8.xcodeproj/README.txt new file mode 100644 index 0000000000..e064ff6bf1 --- /dev/null +++ b/deps/v8/tools/v8.xcodeproj/README.txt @@ -0,0 +1,11 @@ +The Xcode project for V8 has been retired. If an Xcode project +is needed for building on a Mac there is the option of using GYP to +generate it. Please look in the build directory in the root of the +V8 project. It contains the required infrastructure and a README.txt +file explaining how to get started. + +Generating Xcode projects using GYP is how the Chromium +project integrated V8 into the Mac build. + +The main build system for V8 is still SCons, see +http://code.google.com/apis/v8/build.html for details. diff --git a/deps/v8/tools/v8_presubmit.py b/deps/v8/tools/v8_presubmit.py index db008aabf1..f421279451 100755 --- a/deps/v8/tools/v8_presubmit.py +++ b/deps/v8/tools/v8_presubmit.py @@ -63,6 +63,8 @@ from testrunner.local import utils # runtime/references: As of May 2020 the C++ style guide suggests using # references for out parameters, see # https://google.github.io/styleguide/cppguide.html#Inputs_and_Outputs. +# whitespace/braces: Doesn't handle {}-initialization for custom types +# well; also should be subsumed by clang-format. LINT_RULES = """ -build/header_guard @@ -70,6 +72,7 @@ LINT_RULES = """ -readability/fn_size -readability/multiline_comment -runtime/references +-whitespace/braces -whitespace/comments """.split() diff --git a/deps/v8/tools/v8heapconst.py b/deps/v8/tools/v8heapconst.py index f0cc6481a8..c28123dcec 100644 --- a/deps/v8/tools/v8heapconst.py +++ b/deps/v8/tools/v8heapconst.py @@ -32,126 +32,128 @@ INSTANCE_TYPES = { 68: "ABSTRACT_INTERNAL_CLASS_SUBCLASS1_TYPE", 69: "ABSTRACT_INTERNAL_CLASS_SUBCLASS2_TYPE", 70: "FOREIGN_TYPE", - 71: "WASM_TYPE_INFO_TYPE", - 72: "PROMISE_FULFILL_REACTION_JOB_TASK_TYPE", - 73: "PROMISE_REJECT_REACTION_JOB_TASK_TYPE", - 74: "CALLABLE_TASK_TYPE", - 75: "CALLBACK_TASK_TYPE", - 76: "PROMISE_RESOLVE_THENABLE_JOB_TASK_TYPE", - 77: "LOAD_HANDLER_TYPE", - 78: "STORE_HANDLER_TYPE", - 79: "FUNCTION_TEMPLATE_INFO_TYPE", - 80: "OBJECT_TEMPLATE_INFO_TYPE", - 81: "ACCESS_CHECK_INFO_TYPE", - 82: "ACCESSOR_INFO_TYPE", - 83: "ACCESSOR_PAIR_TYPE", - 84: "ALIASED_ARGUMENTS_ENTRY_TYPE", - 85: "ALLOCATION_MEMENTO_TYPE", - 86: "ALLOCATION_SITE_TYPE", - 87: "ARRAY_BOILERPLATE_DESCRIPTION_TYPE", - 88: "ASM_WASM_DATA_TYPE", - 89: "ASYNC_GENERATOR_REQUEST_TYPE", - 90: "BASELINE_DATA_TYPE", - 91: "BREAK_POINT_TYPE", - 92: "BREAK_POINT_INFO_TYPE", - 93: "CACHED_TEMPLATE_OBJECT_TYPE", - 94: "CALL_HANDLER_INFO_TYPE", - 95: "CLASS_POSITIONS_TYPE", - 96: "DEBUG_INFO_TYPE", - 97: "ENUM_CACHE_TYPE", - 98: "FEEDBACK_CELL_TYPE", - 99: "FUNCTION_TEMPLATE_RARE_DATA_TYPE", - 100: "INTERCEPTOR_INFO_TYPE", - 101: "INTERPRETER_DATA_TYPE", - 102: "MODULE_REQUEST_TYPE", - 103: "PROMISE_CAPABILITY_TYPE", - 104: "PROMISE_REACTION_TYPE", - 105: "PROPERTY_DESCRIPTOR_OBJECT_TYPE", - 106: "PROTOTYPE_INFO_TYPE", - 107: "REG_EXP_BOILERPLATE_DESCRIPTION_TYPE", - 108: "SCRIPT_TYPE", - 109: "SOURCE_TEXT_MODULE_INFO_ENTRY_TYPE", - 110: "STACK_FRAME_INFO_TYPE", - 111: "TEMPLATE_OBJECT_DESCRIPTION_TYPE", - 112: "TUPLE2_TYPE", - 113: "WASM_EXCEPTION_TAG_TYPE", - 114: "WASM_EXPORTED_FUNCTION_DATA_TYPE", - 115: "WASM_INDIRECT_FUNCTION_TABLE_TYPE", - 116: "WASM_JS_FUNCTION_DATA_TYPE", - 117: "FIXED_ARRAY_TYPE", - 118: "HASH_TABLE_TYPE", - 119: "EPHEMERON_HASH_TABLE_TYPE", - 120: "GLOBAL_DICTIONARY_TYPE", - 121: "NAME_DICTIONARY_TYPE", - 122: "NUMBER_DICTIONARY_TYPE", - 123: "ORDERED_HASH_MAP_TYPE", - 124: "ORDERED_HASH_SET_TYPE", - 125: "ORDERED_NAME_DICTIONARY_TYPE", - 126: "SIMPLE_NUMBER_DICTIONARY_TYPE", - 127: "CLOSURE_FEEDBACK_CELL_ARRAY_TYPE", - 128: "OBJECT_BOILERPLATE_DESCRIPTION_TYPE", - 129: "SCRIPT_CONTEXT_TABLE_TYPE", - 130: "BYTE_ARRAY_TYPE", - 131: "BYTECODE_ARRAY_TYPE", - 132: "FIXED_DOUBLE_ARRAY_TYPE", - 133: "INTERNAL_CLASS_WITH_SMI_ELEMENTS_TYPE", - 134: "SLOPPY_ARGUMENTS_ELEMENTS_TYPE", - 135: "AWAIT_CONTEXT_TYPE", - 136: "BLOCK_CONTEXT_TYPE", - 137: "CATCH_CONTEXT_TYPE", - 138: "DEBUG_EVALUATE_CONTEXT_TYPE", - 139: "EVAL_CONTEXT_TYPE", - 140: "FUNCTION_CONTEXT_TYPE", - 141: "MODULE_CONTEXT_TYPE", - 142: "NATIVE_CONTEXT_TYPE", - 143: "SCRIPT_CONTEXT_TYPE", - 144: "WITH_CONTEXT_TYPE", - 145: "EXPORTED_SUB_CLASS_BASE_TYPE", - 146: "EXPORTED_SUB_CLASS_TYPE", - 147: "EXPORTED_SUB_CLASS2_TYPE", - 148: "SMALL_ORDERED_HASH_MAP_TYPE", - 149: "SMALL_ORDERED_HASH_SET_TYPE", - 150: "SMALL_ORDERED_NAME_DICTIONARY_TYPE", - 151: "DESCRIPTOR_ARRAY_TYPE", - 152: "STRONG_DESCRIPTOR_ARRAY_TYPE", - 153: "SOURCE_TEXT_MODULE_TYPE", - 154: "SYNTHETIC_MODULE_TYPE", - 155: "UNCOMPILED_DATA_WITH_PREPARSE_DATA_TYPE", - 156: "UNCOMPILED_DATA_WITHOUT_PREPARSE_DATA_TYPE", - 157: "WEAK_FIXED_ARRAY_TYPE", - 158: "TRANSITION_ARRAY_TYPE", - 159: "CELL_TYPE", - 160: "CODE_TYPE", - 161: "CODE_DATA_CONTAINER_TYPE", - 162: "COVERAGE_INFO_TYPE", - 163: "EMBEDDER_DATA_ARRAY_TYPE", - 164: "FEEDBACK_METADATA_TYPE", - 165: "FEEDBACK_VECTOR_TYPE", - 166: "FILLER_TYPE", - 167: "FREE_SPACE_TYPE", - 168: "INTERNAL_CLASS_TYPE", - 169: "INTERNAL_CLASS_WITH_STRUCT_ELEMENTS_TYPE", - 170: "MAP_TYPE", - 171: "ON_HEAP_BASIC_BLOCK_PROFILER_DATA_TYPE", - 172: "PREPARSE_DATA_TYPE", - 173: "PROPERTY_ARRAY_TYPE", - 174: "PROPERTY_CELL_TYPE", - 175: "SCOPE_INFO_TYPE", - 176: "SHARED_FUNCTION_INFO_TYPE", - 177: "SMI_BOX_TYPE", - 178: "SMI_PAIR_TYPE", - 179: "SORT_STATE_TYPE", - 180: "SWISS_NAME_DICTIONARY_TYPE", - 181: "WASM_ARRAY_TYPE", - 182: "WASM_CAPI_FUNCTION_DATA_TYPE", - 183: "WASM_STRUCT_TYPE", - 184: "WEAK_ARRAY_LIST_TYPE", - 185: "WEAK_CELL_TYPE", - 186: "JS_PROXY_TYPE", + 71: "WASM_FUNCTION_DATA_TYPE", + 72: "WASM_EXPORTED_FUNCTION_DATA_TYPE", + 73: "WASM_JS_FUNCTION_DATA_TYPE", + 74: "WASM_TYPE_INFO_TYPE", + 75: "PROMISE_FULFILL_REACTION_JOB_TASK_TYPE", + 76: "PROMISE_REJECT_REACTION_JOB_TASK_TYPE", + 77: "CALLABLE_TASK_TYPE", + 78: "CALLBACK_TASK_TYPE", + 79: "PROMISE_RESOLVE_THENABLE_JOB_TASK_TYPE", + 80: "LOAD_HANDLER_TYPE", + 81: "STORE_HANDLER_TYPE", + 82: "FUNCTION_TEMPLATE_INFO_TYPE", + 83: "OBJECT_TEMPLATE_INFO_TYPE", + 84: "ACCESS_CHECK_INFO_TYPE", + 85: "ACCESSOR_INFO_TYPE", + 86: "ACCESSOR_PAIR_TYPE", + 87: "ALIASED_ARGUMENTS_ENTRY_TYPE", + 88: "ALLOCATION_MEMENTO_TYPE", + 89: "ALLOCATION_SITE_TYPE", + 90: "ARRAY_BOILERPLATE_DESCRIPTION_TYPE", + 91: "ASM_WASM_DATA_TYPE", + 92: "ASYNC_GENERATOR_REQUEST_TYPE", + 93: "BASELINE_DATA_TYPE", + 94: "BREAK_POINT_TYPE", + 95: "BREAK_POINT_INFO_TYPE", + 96: "CACHED_TEMPLATE_OBJECT_TYPE", + 97: "CALL_HANDLER_INFO_TYPE", + 98: "CLASS_POSITIONS_TYPE", + 99: "DEBUG_INFO_TYPE", + 100: "ENUM_CACHE_TYPE", + 101: "FEEDBACK_CELL_TYPE", + 102: "FUNCTION_TEMPLATE_RARE_DATA_TYPE", + 103: "INTERCEPTOR_INFO_TYPE", + 104: "INTERPRETER_DATA_TYPE", + 105: "MODULE_REQUEST_TYPE", + 106: "PROMISE_CAPABILITY_TYPE", + 107: "PROMISE_REACTION_TYPE", + 108: "PROPERTY_DESCRIPTOR_OBJECT_TYPE", + 109: "PROTOTYPE_INFO_TYPE", + 110: "REG_EXP_BOILERPLATE_DESCRIPTION_TYPE", + 111: "SCRIPT_TYPE", + 112: "SOURCE_TEXT_MODULE_INFO_ENTRY_TYPE", + 113: "STACK_FRAME_INFO_TYPE", + 114: "TEMPLATE_OBJECT_DESCRIPTION_TYPE", + 115: "TUPLE2_TYPE", + 116: "WASM_EXCEPTION_TAG_TYPE", + 117: "WASM_INDIRECT_FUNCTION_TABLE_TYPE", + 118: "FIXED_ARRAY_TYPE", + 119: "HASH_TABLE_TYPE", + 120: "EPHEMERON_HASH_TABLE_TYPE", + 121: "GLOBAL_DICTIONARY_TYPE", + 122: "NAME_DICTIONARY_TYPE", + 123: "NUMBER_DICTIONARY_TYPE", + 124: "ORDERED_HASH_MAP_TYPE", + 125: "ORDERED_HASH_SET_TYPE", + 126: "ORDERED_NAME_DICTIONARY_TYPE", + 127: "SIMPLE_NUMBER_DICTIONARY_TYPE", + 128: "CLOSURE_FEEDBACK_CELL_ARRAY_TYPE", + 129: "OBJECT_BOILERPLATE_DESCRIPTION_TYPE", + 130: "SCRIPT_CONTEXT_TABLE_TYPE", + 131: "BYTE_ARRAY_TYPE", + 132: "BYTECODE_ARRAY_TYPE", + 133: "FIXED_DOUBLE_ARRAY_TYPE", + 134: "INTERNAL_CLASS_WITH_SMI_ELEMENTS_TYPE", + 135: "SLOPPY_ARGUMENTS_ELEMENTS_TYPE", + 136: "AWAIT_CONTEXT_TYPE", + 137: "BLOCK_CONTEXT_TYPE", + 138: "CATCH_CONTEXT_TYPE", + 139: "DEBUG_EVALUATE_CONTEXT_TYPE", + 140: "EVAL_CONTEXT_TYPE", + 141: "FUNCTION_CONTEXT_TYPE", + 142: "MODULE_CONTEXT_TYPE", + 143: "NATIVE_CONTEXT_TYPE", + 144: "SCRIPT_CONTEXT_TYPE", + 145: "WITH_CONTEXT_TYPE", + 146: "EXPORTED_SUB_CLASS_BASE_TYPE", + 147: "EXPORTED_SUB_CLASS_TYPE", + 148: "EXPORTED_SUB_CLASS2_TYPE", + 149: "SMALL_ORDERED_HASH_MAP_TYPE", + 150: "SMALL_ORDERED_HASH_SET_TYPE", + 151: "SMALL_ORDERED_NAME_DICTIONARY_TYPE", + 152: "DESCRIPTOR_ARRAY_TYPE", + 153: "STRONG_DESCRIPTOR_ARRAY_TYPE", + 154: "SOURCE_TEXT_MODULE_TYPE", + 155: "SYNTHETIC_MODULE_TYPE", + 156: "UNCOMPILED_DATA_WITH_PREPARSE_DATA_TYPE", + 157: "UNCOMPILED_DATA_WITHOUT_PREPARSE_DATA_TYPE", + 158: "WEAK_FIXED_ARRAY_TYPE", + 159: "TRANSITION_ARRAY_TYPE", + 160: "CELL_TYPE", + 161: "CODE_TYPE", + 162: "CODE_DATA_CONTAINER_TYPE", + 163: "COVERAGE_INFO_TYPE", + 164: "EMBEDDER_DATA_ARRAY_TYPE", + 165: "FEEDBACK_METADATA_TYPE", + 166: "FEEDBACK_VECTOR_TYPE", + 167: "FILLER_TYPE", + 168: "FREE_SPACE_TYPE", + 169: "INTERNAL_CLASS_TYPE", + 170: "INTERNAL_CLASS_WITH_STRUCT_ELEMENTS_TYPE", + 171: "MAP_TYPE", + 172: "MEGA_DOM_HANDLER_TYPE", + 173: "ON_HEAP_BASIC_BLOCK_PROFILER_DATA_TYPE", + 174: "PREPARSE_DATA_TYPE", + 175: "PROPERTY_ARRAY_TYPE", + 176: "PROPERTY_CELL_TYPE", + 177: "SCOPE_INFO_TYPE", + 178: "SHARED_FUNCTION_INFO_TYPE", + 179: "SMI_BOX_TYPE", + 180: "SMI_PAIR_TYPE", + 181: "SORT_STATE_TYPE", + 182: "SWISS_NAME_DICTIONARY_TYPE", + 183: "WASM_ARRAY_TYPE", + 184: "WASM_CAPI_FUNCTION_DATA_TYPE", + 185: "WASM_STRUCT_TYPE", + 186: "WEAK_ARRAY_LIST_TYPE", + 187: "WEAK_CELL_TYPE", + 188: "JS_PROXY_TYPE", 1057: "JS_OBJECT_TYPE", - 187: "JS_GLOBAL_OBJECT_TYPE", - 188: "JS_GLOBAL_PROXY_TYPE", - 189: "JS_MODULE_NAMESPACE_TYPE", + 189: "JS_GLOBAL_OBJECT_TYPE", + 190: "JS_GLOBAL_PROXY_TYPE", + 191: "JS_MODULE_NAMESPACE_TYPE", 1040: "JS_SPECIAL_API_OBJECT_TYPE", 1041: "JS_PRIMITIVE_WRAPPER_TYPE", 1042: "JS_ARRAY_ITERATOR_PROTOTYPE_TYPE", @@ -233,159 +235,160 @@ INSTANCE_TYPES = { # List of known V8 maps. KNOWN_MAPS = { - ("read_only_space", 0x02119): (170, "MetaMap"), + ("read_only_space", 0x02119): (171, "MetaMap"), ("read_only_space", 0x02141): (67, "NullMap"), - ("read_only_space", 0x02169): (152, "StrongDescriptorArrayMap"), - ("read_only_space", 0x02191): (157, "WeakFixedArrayMap"), - ("read_only_space", 0x021d1): (97, "EnumCacheMap"), - ("read_only_space", 0x02205): (117, "FixedArrayMap"), + ("read_only_space", 0x02169): (153, "StrongDescriptorArrayMap"), + ("read_only_space", 0x02191): (158, "WeakFixedArrayMap"), + ("read_only_space", 0x021d1): (100, "EnumCacheMap"), + ("read_only_space", 0x02205): (118, "FixedArrayMap"), ("read_only_space", 0x02251): (8, "OneByteInternalizedStringMap"), - ("read_only_space", 0x0229d): (167, "FreeSpaceMap"), - ("read_only_space", 0x022c5): (166, "OnePointerFillerMap"), - ("read_only_space", 0x022ed): (166, "TwoPointerFillerMap"), + ("read_only_space", 0x0229d): (168, "FreeSpaceMap"), + ("read_only_space", 0x022c5): (167, "OnePointerFillerMap"), + ("read_only_space", 0x022ed): (167, "TwoPointerFillerMap"), ("read_only_space", 0x02315): (67, "UninitializedMap"), ("read_only_space", 0x0238d): (67, "UndefinedMap"), ("read_only_space", 0x023d1): (66, "HeapNumberMap"), ("read_only_space", 0x02405): (67, "TheHoleMap"), ("read_only_space", 0x02465): (67, "BooleanMap"), - ("read_only_space", 0x02509): (130, "ByteArrayMap"), - ("read_only_space", 0x02531): (117, "FixedCOWArrayMap"), - ("read_only_space", 0x02559): (118, "HashTableMap"), + ("read_only_space", 0x02509): (131, "ByteArrayMap"), + ("read_only_space", 0x02531): (118, "FixedCOWArrayMap"), + ("read_only_space", 0x02559): (119, "HashTableMap"), ("read_only_space", 0x02581): (64, "SymbolMap"), ("read_only_space", 0x025a9): (40, "OneByteStringMap"), - ("read_only_space", 0x025d1): (175, "ScopeInfoMap"), - ("read_only_space", 0x025f9): (176, "SharedFunctionInfoMap"), - ("read_only_space", 0x02621): (160, "CodeMap"), - ("read_only_space", 0x02649): (159, "CellMap"), - ("read_only_space", 0x02671): (174, "GlobalPropertyCellMap"), + ("read_only_space", 0x025d1): (177, "ScopeInfoMap"), + ("read_only_space", 0x025f9): (178, "SharedFunctionInfoMap"), + ("read_only_space", 0x02621): (161, "CodeMap"), + ("read_only_space", 0x02649): (160, "CellMap"), + ("read_only_space", 0x02671): (176, "GlobalPropertyCellMap"), ("read_only_space", 0x02699): (70, "ForeignMap"), - ("read_only_space", 0x026c1): (158, "TransitionArrayMap"), + ("read_only_space", 0x026c1): (159, "TransitionArrayMap"), ("read_only_space", 0x026e9): (45, "ThinOneByteStringMap"), - ("read_only_space", 0x02711): (165, "FeedbackVectorMap"), + ("read_only_space", 0x02711): (166, "FeedbackVectorMap"), ("read_only_space", 0x02749): (67, "ArgumentsMarkerMap"), ("read_only_space", 0x027a9): (67, "ExceptionMap"), ("read_only_space", 0x02805): (67, "TerminationExceptionMap"), ("read_only_space", 0x0286d): (67, "OptimizedOutMap"), ("read_only_space", 0x028cd): (67, "StaleRegisterMap"), - ("read_only_space", 0x0292d): (129, "ScriptContextTableMap"), - ("read_only_space", 0x02955): (127, "ClosureFeedbackCellArrayMap"), - ("read_only_space", 0x0297d): (164, "FeedbackMetadataArrayMap"), - ("read_only_space", 0x029a5): (117, "ArrayListMap"), + ("read_only_space", 0x0292d): (130, "ScriptContextTableMap"), + ("read_only_space", 0x02955): (128, "ClosureFeedbackCellArrayMap"), + ("read_only_space", 0x0297d): (165, "FeedbackMetadataArrayMap"), + ("read_only_space", 0x029a5): (118, "ArrayListMap"), ("read_only_space", 0x029cd): (65, "BigIntMap"), - ("read_only_space", 0x029f5): (128, "ObjectBoilerplateDescriptionMap"), - ("read_only_space", 0x02a1d): (131, "BytecodeArrayMap"), - ("read_only_space", 0x02a45): (161, "CodeDataContainerMap"), - ("read_only_space", 0x02a6d): (162, "CoverageInfoMap"), - ("read_only_space", 0x02a95): (132, "FixedDoubleArrayMap"), - ("read_only_space", 0x02abd): (120, "GlobalDictionaryMap"), - ("read_only_space", 0x02ae5): (98, "ManyClosuresCellMap"), - ("read_only_space", 0x02b0d): (117, "ModuleInfoMap"), - ("read_only_space", 0x02b35): (121, "NameDictionaryMap"), - ("read_only_space", 0x02b5d): (98, "NoClosuresCellMap"), - ("read_only_space", 0x02b85): (122, "NumberDictionaryMap"), - ("read_only_space", 0x02bad): (98, "OneClosureCellMap"), - ("read_only_space", 0x02bd5): (123, "OrderedHashMapMap"), - ("read_only_space", 0x02bfd): (124, "OrderedHashSetMap"), - ("read_only_space", 0x02c25): (125, "OrderedNameDictionaryMap"), - ("read_only_space", 0x02c4d): (172, "PreparseDataMap"), - ("read_only_space", 0x02c75): (173, "PropertyArrayMap"), - ("read_only_space", 0x02c9d): (94, "SideEffectCallHandlerInfoMap"), - ("read_only_space", 0x02cc5): (94, "SideEffectFreeCallHandlerInfoMap"), - ("read_only_space", 0x02ced): (94, "NextCallSideEffectFreeCallHandlerInfoMap"), - ("read_only_space", 0x02d15): (126, "SimpleNumberDictionaryMap"), - ("read_only_space", 0x02d3d): (148, "SmallOrderedHashMapMap"), - ("read_only_space", 0x02d65): (149, "SmallOrderedHashSetMap"), - ("read_only_space", 0x02d8d): (150, "SmallOrderedNameDictionaryMap"), - ("read_only_space", 0x02db5): (153, "SourceTextModuleMap"), - ("read_only_space", 0x02ddd): (180, "SwissNameDictionaryMap"), - ("read_only_space", 0x02e05): (154, "SyntheticModuleMap"), - ("read_only_space", 0x02e2d): (71, "WasmTypeInfoMap"), - ("read_only_space", 0x02e55): (184, "WeakArrayListMap"), - ("read_only_space", 0x02e7d): (119, "EphemeronHashTableMap"), - ("read_only_space", 0x02ea5): (163, "EmbedderDataArrayMap"), - ("read_only_space", 0x02ecd): (185, "WeakCellMap"), - ("read_only_space", 0x02ef5): (32, "StringMap"), - ("read_only_space", 0x02f1d): (41, "ConsOneByteStringMap"), - ("read_only_space", 0x02f45): (33, "ConsStringMap"), - ("read_only_space", 0x02f6d): (37, "ThinStringMap"), - ("read_only_space", 0x02f95): (35, "SlicedStringMap"), - ("read_only_space", 0x02fbd): (43, "SlicedOneByteStringMap"), - ("read_only_space", 0x02fe5): (34, "ExternalStringMap"), - ("read_only_space", 0x0300d): (42, "ExternalOneByteStringMap"), - ("read_only_space", 0x03035): (50, "UncachedExternalStringMap"), - ("read_only_space", 0x0305d): (0, "InternalizedStringMap"), - ("read_only_space", 0x03085): (2, "ExternalInternalizedStringMap"), - ("read_only_space", 0x030ad): (10, "ExternalOneByteInternalizedStringMap"), - ("read_only_space", 0x030d5): (18, "UncachedExternalInternalizedStringMap"), - ("read_only_space", 0x030fd): (26, "UncachedExternalOneByteInternalizedStringMap"), - ("read_only_space", 0x03125): (58, "UncachedExternalOneByteStringMap"), - ("read_only_space", 0x0314d): (67, "SelfReferenceMarkerMap"), - ("read_only_space", 0x03175): (67, "BasicBlockCountersMarkerMap"), - ("read_only_space", 0x031b9): (87, "ArrayBoilerplateDescriptionMap"), - ("read_only_space", 0x032b9): (100, "InterceptorInfoMap"), - ("read_only_space", 0x05401): (72, "PromiseFulfillReactionJobTaskMap"), - ("read_only_space", 0x05429): (73, "PromiseRejectReactionJobTaskMap"), - ("read_only_space", 0x05451): (74, "CallableTaskMap"), - ("read_only_space", 0x05479): (75, "CallbackTaskMap"), - ("read_only_space", 0x054a1): (76, "PromiseResolveThenableJobTaskMap"), - ("read_only_space", 0x054c9): (79, "FunctionTemplateInfoMap"), - ("read_only_space", 0x054f1): (80, "ObjectTemplateInfoMap"), - ("read_only_space", 0x05519): (81, "AccessCheckInfoMap"), - ("read_only_space", 0x05541): (82, "AccessorInfoMap"), - ("read_only_space", 0x05569): (83, "AccessorPairMap"), - ("read_only_space", 0x05591): (84, "AliasedArgumentsEntryMap"), - ("read_only_space", 0x055b9): (85, "AllocationMementoMap"), - ("read_only_space", 0x055e1): (88, "AsmWasmDataMap"), - ("read_only_space", 0x05609): (89, "AsyncGeneratorRequestMap"), - ("read_only_space", 0x05631): (90, "BaselineDataMap"), - ("read_only_space", 0x05659): (91, "BreakPointMap"), - ("read_only_space", 0x05681): (92, "BreakPointInfoMap"), - ("read_only_space", 0x056a9): (93, "CachedTemplateObjectMap"), - ("read_only_space", 0x056d1): (95, "ClassPositionsMap"), - ("read_only_space", 0x056f9): (96, "DebugInfoMap"), - ("read_only_space", 0x05721): (99, "FunctionTemplateRareDataMap"), - ("read_only_space", 0x05749): (101, "InterpreterDataMap"), - ("read_only_space", 0x05771): (102, "ModuleRequestMap"), - ("read_only_space", 0x05799): (103, "PromiseCapabilityMap"), - ("read_only_space", 0x057c1): (104, "PromiseReactionMap"), - ("read_only_space", 0x057e9): (105, "PropertyDescriptorObjectMap"), - ("read_only_space", 0x05811): (106, "PrototypeInfoMap"), - ("read_only_space", 0x05839): (107, "RegExpBoilerplateDescriptionMap"), - ("read_only_space", 0x05861): (108, "ScriptMap"), - ("read_only_space", 0x05889): (109, "SourceTextModuleInfoEntryMap"), - ("read_only_space", 0x058b1): (110, "StackFrameInfoMap"), - ("read_only_space", 0x058d9): (111, "TemplateObjectDescriptionMap"), - ("read_only_space", 0x05901): (112, "Tuple2Map"), - ("read_only_space", 0x05929): (113, "WasmExceptionTagMap"), - ("read_only_space", 0x05951): (114, "WasmExportedFunctionDataMap"), - ("read_only_space", 0x05979): (115, "WasmIndirectFunctionTableMap"), - ("read_only_space", 0x059a1): (116, "WasmJSFunctionDataMap"), - ("read_only_space", 0x059c9): (134, "SloppyArgumentsElementsMap"), - ("read_only_space", 0x059f1): (151, "DescriptorArrayMap"), - ("read_only_space", 0x05a19): (156, "UncompiledDataWithoutPreparseDataMap"), - ("read_only_space", 0x05a41): (155, "UncompiledDataWithPreparseDataMap"), - ("read_only_space", 0x05a69): (171, "OnHeapBasicBlockProfilerDataMap"), - ("read_only_space", 0x05a91): (168, "InternalClassMap"), - ("read_only_space", 0x05ab9): (178, "SmiPairMap"), - ("read_only_space", 0x05ae1): (177, "SmiBoxMap"), - ("read_only_space", 0x05b09): (145, "ExportedSubClassBaseMap"), - ("read_only_space", 0x05b31): (146, "ExportedSubClassMap"), - ("read_only_space", 0x05b59): (68, "AbstractInternalClassSubclass1Map"), - ("read_only_space", 0x05b81): (69, "AbstractInternalClassSubclass2Map"), - ("read_only_space", 0x05ba9): (133, "InternalClassWithSmiElementsMap"), - ("read_only_space", 0x05bd1): (169, "InternalClassWithStructElementsMap"), - ("read_only_space", 0x05bf9): (147, "ExportedSubClass2Map"), - ("read_only_space", 0x05c21): (179, "SortStateMap"), - ("read_only_space", 0x05c49): (182, "WasmCapiFunctionDataMap"), - ("read_only_space", 0x05c71): (86, "AllocationSiteWithWeakNextMap"), - ("read_only_space", 0x05c99): (86, "AllocationSiteWithoutWeakNextMap"), - ("read_only_space", 0x05cc1): (77, "LoadHandler1Map"), - ("read_only_space", 0x05ce9): (77, "LoadHandler2Map"), - ("read_only_space", 0x05d11): (77, "LoadHandler3Map"), - ("read_only_space", 0x05d39): (78, "StoreHandler0Map"), - ("read_only_space", 0x05d61): (78, "StoreHandler1Map"), - ("read_only_space", 0x05d89): (78, "StoreHandler2Map"), - ("read_only_space", 0x05db1): (78, "StoreHandler3Map"), + ("read_only_space", 0x029f5): (129, "ObjectBoilerplateDescriptionMap"), + ("read_only_space", 0x02a1d): (132, "BytecodeArrayMap"), + ("read_only_space", 0x02a45): (162, "CodeDataContainerMap"), + ("read_only_space", 0x02a6d): (163, "CoverageInfoMap"), + ("read_only_space", 0x02a95): (133, "FixedDoubleArrayMap"), + ("read_only_space", 0x02abd): (121, "GlobalDictionaryMap"), + ("read_only_space", 0x02ae5): (101, "ManyClosuresCellMap"), + ("read_only_space", 0x02b0d): (172, "MegaDomHandlerMap"), + ("read_only_space", 0x02b35): (118, "ModuleInfoMap"), + ("read_only_space", 0x02b5d): (122, "NameDictionaryMap"), + ("read_only_space", 0x02b85): (101, "NoClosuresCellMap"), + ("read_only_space", 0x02bad): (123, "NumberDictionaryMap"), + ("read_only_space", 0x02bd5): (101, "OneClosureCellMap"), + ("read_only_space", 0x02bfd): (124, "OrderedHashMapMap"), + ("read_only_space", 0x02c25): (125, "OrderedHashSetMap"), + ("read_only_space", 0x02c4d): (126, "OrderedNameDictionaryMap"), + ("read_only_space", 0x02c75): (174, "PreparseDataMap"), + ("read_only_space", 0x02c9d): (175, "PropertyArrayMap"), + ("read_only_space", 0x02cc5): (97, "SideEffectCallHandlerInfoMap"), + ("read_only_space", 0x02ced): (97, "SideEffectFreeCallHandlerInfoMap"), + ("read_only_space", 0x02d15): (97, "NextCallSideEffectFreeCallHandlerInfoMap"), + ("read_only_space", 0x02d3d): (127, "SimpleNumberDictionaryMap"), + ("read_only_space", 0x02d65): (149, "SmallOrderedHashMapMap"), + ("read_only_space", 0x02d8d): (150, "SmallOrderedHashSetMap"), + ("read_only_space", 0x02db5): (151, "SmallOrderedNameDictionaryMap"), + ("read_only_space", 0x02ddd): (154, "SourceTextModuleMap"), + ("read_only_space", 0x02e05): (182, "SwissNameDictionaryMap"), + ("read_only_space", 0x02e2d): (155, "SyntheticModuleMap"), + ("read_only_space", 0x02e55): (72, "WasmExportedFunctionDataMap"), + ("read_only_space", 0x02e7d): (73, "WasmJSFunctionDataMap"), + ("read_only_space", 0x02ea5): (74, "WasmTypeInfoMap"), + ("read_only_space", 0x02ecd): (186, "WeakArrayListMap"), + ("read_only_space", 0x02ef5): (120, "EphemeronHashTableMap"), + ("read_only_space", 0x02f1d): (164, "EmbedderDataArrayMap"), + ("read_only_space", 0x02f45): (187, "WeakCellMap"), + ("read_only_space", 0x02f6d): (32, "StringMap"), + ("read_only_space", 0x02f95): (41, "ConsOneByteStringMap"), + ("read_only_space", 0x02fbd): (33, "ConsStringMap"), + ("read_only_space", 0x02fe5): (37, "ThinStringMap"), + ("read_only_space", 0x0300d): (35, "SlicedStringMap"), + ("read_only_space", 0x03035): (43, "SlicedOneByteStringMap"), + ("read_only_space", 0x0305d): (34, "ExternalStringMap"), + ("read_only_space", 0x03085): (42, "ExternalOneByteStringMap"), + ("read_only_space", 0x030ad): (50, "UncachedExternalStringMap"), + ("read_only_space", 0x030d5): (0, "InternalizedStringMap"), + ("read_only_space", 0x030fd): (2, "ExternalInternalizedStringMap"), + ("read_only_space", 0x03125): (10, "ExternalOneByteInternalizedStringMap"), + ("read_only_space", 0x0314d): (18, "UncachedExternalInternalizedStringMap"), + ("read_only_space", 0x03175): (26, "UncachedExternalOneByteInternalizedStringMap"), + ("read_only_space", 0x0319d): (58, "UncachedExternalOneByteStringMap"), + ("read_only_space", 0x031c5): (67, "SelfReferenceMarkerMap"), + ("read_only_space", 0x031ed): (67, "BasicBlockCountersMarkerMap"), + ("read_only_space", 0x03231): (90, "ArrayBoilerplateDescriptionMap"), + ("read_only_space", 0x03331): (103, "InterceptorInfoMap"), + ("read_only_space", 0x05639): (75, "PromiseFulfillReactionJobTaskMap"), + ("read_only_space", 0x05661): (76, "PromiseRejectReactionJobTaskMap"), + ("read_only_space", 0x05689): (77, "CallableTaskMap"), + ("read_only_space", 0x056b1): (78, "CallbackTaskMap"), + ("read_only_space", 0x056d9): (79, "PromiseResolveThenableJobTaskMap"), + ("read_only_space", 0x05701): (82, "FunctionTemplateInfoMap"), + ("read_only_space", 0x05729): (83, "ObjectTemplateInfoMap"), + ("read_only_space", 0x05751): (84, "AccessCheckInfoMap"), + ("read_only_space", 0x05779): (85, "AccessorInfoMap"), + ("read_only_space", 0x057a1): (86, "AccessorPairMap"), + ("read_only_space", 0x057c9): (87, "AliasedArgumentsEntryMap"), + ("read_only_space", 0x057f1): (88, "AllocationMementoMap"), + ("read_only_space", 0x05819): (91, "AsmWasmDataMap"), + ("read_only_space", 0x05841): (92, "AsyncGeneratorRequestMap"), + ("read_only_space", 0x05869): (93, "BaselineDataMap"), + ("read_only_space", 0x05891): (94, "BreakPointMap"), + ("read_only_space", 0x058b9): (95, "BreakPointInfoMap"), + ("read_only_space", 0x058e1): (96, "CachedTemplateObjectMap"), + ("read_only_space", 0x05909): (98, "ClassPositionsMap"), + ("read_only_space", 0x05931): (99, "DebugInfoMap"), + ("read_only_space", 0x05959): (102, "FunctionTemplateRareDataMap"), + ("read_only_space", 0x05981): (104, "InterpreterDataMap"), + ("read_only_space", 0x059a9): (105, "ModuleRequestMap"), + ("read_only_space", 0x059d1): (106, "PromiseCapabilityMap"), + ("read_only_space", 0x059f9): (107, "PromiseReactionMap"), + ("read_only_space", 0x05a21): (108, "PropertyDescriptorObjectMap"), + ("read_only_space", 0x05a49): (109, "PrototypeInfoMap"), + ("read_only_space", 0x05a71): (110, "RegExpBoilerplateDescriptionMap"), + ("read_only_space", 0x05a99): (111, "ScriptMap"), + ("read_only_space", 0x05ac1): (112, "SourceTextModuleInfoEntryMap"), + ("read_only_space", 0x05ae9): (113, "StackFrameInfoMap"), + ("read_only_space", 0x05b11): (114, "TemplateObjectDescriptionMap"), + ("read_only_space", 0x05b39): (115, "Tuple2Map"), + ("read_only_space", 0x05b61): (116, "WasmExceptionTagMap"), + ("read_only_space", 0x05b89): (117, "WasmIndirectFunctionTableMap"), + ("read_only_space", 0x05bb1): (135, "SloppyArgumentsElementsMap"), + ("read_only_space", 0x05bd9): (152, "DescriptorArrayMap"), + ("read_only_space", 0x05c01): (157, "UncompiledDataWithoutPreparseDataMap"), + ("read_only_space", 0x05c29): (156, "UncompiledDataWithPreparseDataMap"), + ("read_only_space", 0x05c51): (173, "OnHeapBasicBlockProfilerDataMap"), + ("read_only_space", 0x05c79): (169, "InternalClassMap"), + ("read_only_space", 0x05ca1): (180, "SmiPairMap"), + ("read_only_space", 0x05cc9): (179, "SmiBoxMap"), + ("read_only_space", 0x05cf1): (146, "ExportedSubClassBaseMap"), + ("read_only_space", 0x05d19): (147, "ExportedSubClassMap"), + ("read_only_space", 0x05d41): (68, "AbstractInternalClassSubclass1Map"), + ("read_only_space", 0x05d69): (69, "AbstractInternalClassSubclass2Map"), + ("read_only_space", 0x05d91): (134, "InternalClassWithSmiElementsMap"), + ("read_only_space", 0x05db9): (170, "InternalClassWithStructElementsMap"), + ("read_only_space", 0x05de1): (148, "ExportedSubClass2Map"), + ("read_only_space", 0x05e09): (181, "SortStateMap"), + ("read_only_space", 0x05e31): (184, "WasmCapiFunctionDataMap"), + ("read_only_space", 0x05e59): (89, "AllocationSiteWithWeakNextMap"), + ("read_only_space", 0x05e81): (89, "AllocationSiteWithoutWeakNextMap"), + ("read_only_space", 0x05ea9): (80, "LoadHandler1Map"), + ("read_only_space", 0x05ed1): (80, "LoadHandler2Map"), + ("read_only_space", 0x05ef9): (80, "LoadHandler3Map"), + ("read_only_space", 0x05f21): (81, "StoreHandler0Map"), + ("read_only_space", 0x05f49): (81, "StoreHandler1Map"), + ("read_only_space", 0x05f71): (81, "StoreHandler2Map"), + ("read_only_space", 0x05f99): (81, "StoreHandler3Map"), ("map_space", 0x02119): (1057, "ExternalMap"), ("map_space", 0x02141): (1098, "JSMessageObjectMap"), } @@ -411,32 +414,32 @@ KNOWN_OBJECTS = { ("read_only_space", 0x0282d): "TerminationException", ("read_only_space", 0x02895): "OptimizedOut", ("read_only_space", 0x028f5): "StaleRegister", - ("read_only_space", 0x0319d): "EmptyPropertyArray", - ("read_only_space", 0x031a5): "EmptyByteArray", - ("read_only_space", 0x031ad): "EmptyObjectBoilerplateDescription", - ("read_only_space", 0x031e1): "EmptyArrayBoilerplateDescription", - ("read_only_space", 0x031ed): "EmptyClosureFeedbackCellArray", - ("read_only_space", 0x031f5): "EmptySlowElementDictionary", - ("read_only_space", 0x03219): "EmptyOrderedHashMap", - ("read_only_space", 0x0322d): "EmptyOrderedHashSet", - ("read_only_space", 0x03241): "EmptyFeedbackMetadata", - ("read_only_space", 0x0324d): "EmptyPropertyDictionary", - ("read_only_space", 0x03275): "EmptyOrderedPropertyDictionary", - ("read_only_space", 0x0328d): "EmptySwissPropertyDictionary", - ("read_only_space", 0x032e1): "NoOpInterceptorInfo", - ("read_only_space", 0x03309): "EmptyWeakArrayList", - ("read_only_space", 0x03315): "InfinityValue", - ("read_only_space", 0x03321): "MinusZeroValue", - ("read_only_space", 0x0332d): "MinusInfinityValue", - ("read_only_space", 0x03339): "SelfReferenceMarker", - ("read_only_space", 0x03379): "BasicBlockCountersMarker", - ("read_only_space", 0x033bd): "OffHeapTrampolineRelocationInfo", - ("read_only_space", 0x033c9): "TrampolineTrivialCodeDataContainer", - ("read_only_space", 0x033d5): "TrampolinePromiseRejectionCodeDataContainer", - ("read_only_space", 0x033e1): "GlobalThisBindingScopeInfo", - ("read_only_space", 0x03415): "EmptyFunctionScopeInfo", - ("read_only_space", 0x03439): "NativeScopeInfo", - ("read_only_space", 0x03451): "HashSeed", + ("read_only_space", 0x03215): "EmptyPropertyArray", + ("read_only_space", 0x0321d): "EmptyByteArray", + ("read_only_space", 0x03225): "EmptyObjectBoilerplateDescription", + ("read_only_space", 0x03259): "EmptyArrayBoilerplateDescription", + ("read_only_space", 0x03265): "EmptyClosureFeedbackCellArray", + ("read_only_space", 0x0326d): "EmptySlowElementDictionary", + ("read_only_space", 0x03291): "EmptyOrderedHashMap", + ("read_only_space", 0x032a5): "EmptyOrderedHashSet", + ("read_only_space", 0x032b9): "EmptyFeedbackMetadata", + ("read_only_space", 0x032c5): "EmptyPropertyDictionary", + ("read_only_space", 0x032ed): "EmptyOrderedPropertyDictionary", + ("read_only_space", 0x03305): "EmptySwissPropertyDictionary", + ("read_only_space", 0x03359): "NoOpInterceptorInfo", + ("read_only_space", 0x03381): "EmptyWeakArrayList", + ("read_only_space", 0x0338d): "InfinityValue", + ("read_only_space", 0x03399): "MinusZeroValue", + ("read_only_space", 0x033a5): "MinusInfinityValue", + ("read_only_space", 0x033b1): "SelfReferenceMarker", + ("read_only_space", 0x033f1): "BasicBlockCountersMarker", + ("read_only_space", 0x03435): "OffHeapTrampolineRelocationInfo", + ("read_only_space", 0x03441): "TrampolineTrivialCodeDataContainer", + ("read_only_space", 0x0344d): "TrampolinePromiseRejectionCodeDataContainer", + ("read_only_space", 0x03459): "GlobalThisBindingScopeInfo", + ("read_only_space", 0x0348d): "EmptyFunctionScopeInfo", + ("read_only_space", 0x034b1): "NativeScopeInfo", + ("read_only_space", 0x034c9): "HashSeed", ("old_space", 0x02119): "ArgumentsIteratorAccessor", ("old_space", 0x0215d): "ArrayLengthAccessor", ("old_space", 0x021a1): "BoundFunctionLengthAccessor", @@ -453,52 +456,53 @@ KNOWN_OBJECTS = { ("old_space", 0x0244d): "ManyClosuresCell", ("old_space", 0x02459): "ArrayConstructorProtector", ("old_space", 0x0246d): "NoElementsProtector", - ("old_space", 0x02481): "IsConcatSpreadableProtector", - ("old_space", 0x02495): "ArraySpeciesProtector", - ("old_space", 0x024a9): "TypedArraySpeciesProtector", - ("old_space", 0x024bd): "PromiseSpeciesProtector", - ("old_space", 0x024d1): "RegExpSpeciesProtector", - ("old_space", 0x024e5): "StringLengthProtector", - ("old_space", 0x024f9): "ArrayIteratorProtector", - ("old_space", 0x0250d): "ArrayBufferDetachingProtector", - ("old_space", 0x02521): "PromiseHookProtector", - ("old_space", 0x02535): "PromiseResolveProtector", - ("old_space", 0x02549): "MapIteratorProtector", - ("old_space", 0x0255d): "PromiseThenProtector", - ("old_space", 0x02571): "SetIteratorProtector", - ("old_space", 0x02585): "StringIteratorProtector", - ("old_space", 0x02599): "SingleCharacterStringCache", - ("old_space", 0x029a1): "StringSplitCache", - ("old_space", 0x02da9): "RegExpMultipleCache", - ("old_space", 0x031b1): "BuiltinsConstantsTable", - ("old_space", 0x035b1): "AsyncFunctionAwaitRejectSharedFun", - ("old_space", 0x035d5): "AsyncFunctionAwaitResolveSharedFun", - ("old_space", 0x035f9): "AsyncGeneratorAwaitRejectSharedFun", - ("old_space", 0x0361d): "AsyncGeneratorAwaitResolveSharedFun", - ("old_space", 0x03641): "AsyncGeneratorYieldResolveSharedFun", - ("old_space", 0x03665): "AsyncGeneratorReturnResolveSharedFun", - ("old_space", 0x03689): "AsyncGeneratorReturnClosedRejectSharedFun", - ("old_space", 0x036ad): "AsyncGeneratorReturnClosedResolveSharedFun", - ("old_space", 0x036d1): "AsyncIteratorValueUnwrapSharedFun", - ("old_space", 0x036f5): "PromiseAllResolveElementSharedFun", - ("old_space", 0x03719): "PromiseAllSettledResolveElementSharedFun", - ("old_space", 0x0373d): "PromiseAllSettledRejectElementSharedFun", - ("old_space", 0x03761): "PromiseAnyRejectElementSharedFun", - ("old_space", 0x03785): "PromiseCapabilityDefaultRejectSharedFun", - ("old_space", 0x037a9): "PromiseCapabilityDefaultResolveSharedFun", - ("old_space", 0x037cd): "PromiseCatchFinallySharedFun", - ("old_space", 0x037f1): "PromiseGetCapabilitiesExecutorSharedFun", - ("old_space", 0x03815): "PromiseThenFinallySharedFun", - ("old_space", 0x03839): "PromiseThrowerFinallySharedFun", - ("old_space", 0x0385d): "PromiseValueThunkFinallySharedFun", - ("old_space", 0x03881): "ProxyRevokeSharedFun", + ("old_space", 0x02481): "MegaDOMProtector", + ("old_space", 0x02495): "IsConcatSpreadableProtector", + ("old_space", 0x024a9): "ArraySpeciesProtector", + ("old_space", 0x024bd): "TypedArraySpeciesProtector", + ("old_space", 0x024d1): "PromiseSpeciesProtector", + ("old_space", 0x024e5): "RegExpSpeciesProtector", + ("old_space", 0x024f9): "StringLengthProtector", + ("old_space", 0x0250d): "ArrayIteratorProtector", + ("old_space", 0x02521): "ArrayBufferDetachingProtector", + ("old_space", 0x02535): "PromiseHookProtector", + ("old_space", 0x02549): "PromiseResolveProtector", + ("old_space", 0x0255d): "MapIteratorProtector", + ("old_space", 0x02571): "PromiseThenProtector", + ("old_space", 0x02585): "SetIteratorProtector", + ("old_space", 0x02599): "StringIteratorProtector", + ("old_space", 0x025ad): "SingleCharacterStringCache", + ("old_space", 0x029b5): "StringSplitCache", + ("old_space", 0x02dbd): "RegExpMultipleCache", + ("old_space", 0x031c5): "BuiltinsConstantsTable", + ("old_space", 0x035d1): "AsyncFunctionAwaitRejectSharedFun", + ("old_space", 0x035f5): "AsyncFunctionAwaitResolveSharedFun", + ("old_space", 0x03619): "AsyncGeneratorAwaitRejectSharedFun", + ("old_space", 0x0363d): "AsyncGeneratorAwaitResolveSharedFun", + ("old_space", 0x03661): "AsyncGeneratorYieldResolveSharedFun", + ("old_space", 0x03685): "AsyncGeneratorReturnResolveSharedFun", + ("old_space", 0x036a9): "AsyncGeneratorReturnClosedRejectSharedFun", + ("old_space", 0x036cd): "AsyncGeneratorReturnClosedResolveSharedFun", + ("old_space", 0x036f1): "AsyncIteratorValueUnwrapSharedFun", + ("old_space", 0x03715): "PromiseAllResolveElementSharedFun", + ("old_space", 0x03739): "PromiseAllSettledResolveElementSharedFun", + ("old_space", 0x0375d): "PromiseAllSettledRejectElementSharedFun", + ("old_space", 0x03781): "PromiseAnyRejectElementSharedFun", + ("old_space", 0x037a5): "PromiseCapabilityDefaultRejectSharedFun", + ("old_space", 0x037c9): "PromiseCapabilityDefaultResolveSharedFun", + ("old_space", 0x037ed): "PromiseCatchFinallySharedFun", + ("old_space", 0x03811): "PromiseGetCapabilitiesExecutorSharedFun", + ("old_space", 0x03835): "PromiseThenFinallySharedFun", + ("old_space", 0x03859): "PromiseThrowerFinallySharedFun", + ("old_space", 0x0387d): "PromiseValueThunkFinallySharedFun", + ("old_space", 0x038a1): "ProxyRevokeSharedFun", } # Lower 32 bits of first page addresses for various heap spaces. HEAP_FIRST_PAGES = { - 0x08100000: "old_space", - 0x08140000: "map_space", - 0x08040000: "read_only_space", + 0x080c0000: "old_space", + 0x08100000: "map_space", + 0x08000000: "read_only_space", } # List of known V8 Frame Markers. diff --git a/deps/v8/tools/v8windbg/BUILD.gn b/deps/v8/tools/v8windbg/BUILD.gn index 5618d2d945..e30b826b0f 100644 --- a/deps/v8/tools/v8windbg/BUILD.gn +++ b/deps/v8/tools/v8windbg/BUILD.gn @@ -42,8 +42,6 @@ v8_shared_library("v8windbg") { "src/cur-isolate.h", "src/js-stack.cc", "src/js-stack.h", - "src/list-chunks.cc", - "src/list-chunks.h", "src/local-variables.cc", "src/local-variables.h", "src/object-inspection.cc", @@ -56,6 +54,9 @@ v8_shared_library("v8windbg") { deps = [ ":v8windbg_base", + "../../:v8_flags", + "../../:v8_libbase", + "../../:v8_shared_internal_headers", "../debug_helper:v8_debug_helper", ] } diff --git a/deps/v8/tools/v8windbg/README.md b/deps/v8/tools/v8windbg/README.md index de6638e4d4..887f437b0d 100644 --- a/deps/v8/tools/v8windbg/README.md +++ b/deps/v8/tools/v8windbg/README.md @@ -41,8 +41,6 @@ functions that can be called from within `dx` commands: like `dx @$v8object(0x34f49880471, "v8::internal::JSArray")`. - `@$curisolate()` gets the Isolate pointer for the current thread, if the current thread has a JavaScript Isolate associated. -- `@$listchunks()` returns a list of the memory chunks in the Heap for the - current Isolate. - `@$jsstack()` returns a list of the JS stack frames, including information about script and function. @@ -67,8 +65,6 @@ functions declared in `dbgext.h` to create and destroy the extension instance. `./src` file index: - `cur-isolate.{cc,h}` implements the `IModelMethod` for `@$curisolate()`. -- `list-chunks.{cc,h}` implements the `IModelMethod` for `@$listchunks()`. Its - result is a custom object that supports iteration and indexing. - `js-stack.{cc,h}` implements the `IModelMethod` for `@$jsstack()`. Its result is a custom object that supports iteration and indexing. - `local-variables.{cc,h}` implements the `IModelPropertyAccessor` that provides diff --git a/deps/v8/tools/v8windbg/src/list-chunks.cc b/deps/v8/tools/v8windbg/src/list-chunks.cc deleted file mode 100644 index 90b3ff6af6..0000000000 --- a/deps/v8/tools/v8windbg/src/list-chunks.cc +++ /dev/null @@ -1,238 +0,0 @@ -// Copyright 2020 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "tools/v8windbg/src/list-chunks.h" - -#include "tools/v8windbg/src/cur-isolate.h" - -// v8windbg!ListChunksAlias::Call -IFACEMETHODIMP ListChunksAlias::Call(IModelObject* p_context_object, - ULONG64 arg_count, - _In_reads_(arg_count) - IModelObject** pp_arguments, - IModelObject** pp_result, - IKeyStore** pp_metadata) noexcept { - WRL::ComPtr<IDebugHostContext> sp_ctx; - RETURN_IF_FAIL(sp_debug_host->GetCurrentContext(&sp_ctx)); - - WRL::ComPtr<IModelObject> result; - RETURN_IF_FAIL( - sp_data_model_manager->CreateSyntheticObject(sp_ctx.Get(), &result)); - - auto sp_iterator{WRL::Make<MemoryChunks>()}; - - RETURN_IF_FAIL(result->SetConcept( - __uuidof(IIndexableConcept), - static_cast<IIndexableConcept*>(sp_iterator.Get()), nullptr)); - RETURN_IF_FAIL(result->SetConcept( - __uuidof(IIterableConcept), - static_cast<IIterableConcept*>(sp_iterator.Get()), nullptr)); - - *pp_result = result.Detach(); - if (pp_metadata) { - *pp_metadata = nullptr; - } - return S_OK; -} - -ChunkData::ChunkData() = default; -ChunkData::~ChunkData() = default; -ChunkData::ChunkData(const ChunkData&) = default; -ChunkData::ChunkData(ChunkData&&) = default; -ChunkData& ChunkData::operator=(const ChunkData&) = default; -ChunkData& ChunkData::operator=(ChunkData&&) = default; - -MemoryChunkIterator::MemoryChunkIterator( - WRL::ComPtr<IDebugHostContext>& host_context) - : sp_ctx_(host_context) {} -MemoryChunkIterator::~MemoryChunkIterator() = default; - -HRESULT MemoryChunkIterator::PopulateChunkData() { - WRL::ComPtr<IModelObject> sp_isolate, sp_heap, sp_space; - chunks_.clear(); - - RETURN_IF_FAIL(GetCurrentIsolate(sp_isolate)); - - RETURN_IF_FAIL( - sp_isolate->GetRawValue(SymbolField, L"heap_", RawSearchNone, &sp_heap)); - RETURN_IF_FAIL( - sp_heap->GetRawValue(SymbolField, L"space_", RawSearchNone, &sp_space)); - - WRL::ComPtr<IDebugHostType> sp_space_type; - RETURN_IF_FAIL(sp_space->GetTypeInfo(&sp_space_type)); - - // Iterate over the array of Space pointers - WRL::ComPtr<IIterableConcept> sp_iterable; - RETURN_IF_FAIL( - sp_space->GetConcept(__uuidof(IIterableConcept), &sp_iterable, nullptr)); - - WRL::ComPtr<IModelIterator> sp_space_iterator; - RETURN_IF_FAIL(sp_iterable->GetIterator(sp_space.Get(), &sp_space_iterator)); - - // Loop through all the spaces in the array - WRL::ComPtr<IModelObject> sp_space_ptr; - while (sp_space_iterator->GetNext(&sp_space_ptr, 0, nullptr, nullptr) != - E_BOUNDS) { - // Should have gotten a "v8::internal::Space *". Dereference, then get field - // "memory_chunk_list_" [Type: v8::base::List<v8::internal::MemoryChunk>] - WRL::ComPtr<IModelObject> sp_space, sp_chunk_list, sp_mem_chunk_ptr, - sp_mem_chunk; - RETURN_IF_FAIL(sp_space_ptr->Dereference(&sp_space)); - RETURN_IF_FAIL(sp_space->GetRawValue(SymbolField, L"memory_chunk_list_", - RawSearchNone, &sp_chunk_list)); - - // Then get field "front_" [Type: v8::internal::MemoryChunk *] - RETURN_IF_FAIL(sp_chunk_list->GetRawValue( - SymbolField, L"front_", RawSearchNone, &sp_mem_chunk_ptr)); - - // Loop here on the list of MemoryChunks for the space - while (true) { - // See if it is a nullptr (i.e. no chunks in this space) - uint64_t front_val; - RETURN_IF_FAIL( - UnboxULong64(sp_mem_chunk_ptr.Get(), &front_val, true /*convert*/)); - if (front_val == 0) { - break; - } - - // Dereference and get fields "area_start_" and "area_end_" (both uint64) - RETURN_IF_FAIL(sp_mem_chunk_ptr->Dereference(&sp_mem_chunk)); - - WRL::ComPtr<IModelObject> sp_start, sp_end; - RETURN_IF_FAIL(sp_mem_chunk->GetRawValue(SymbolField, L"area_start_", - RawSearchNone, &sp_start)); - RETURN_IF_FAIL(sp_mem_chunk->GetRawValue(SymbolField, L"area_end_", - RawSearchNone, &sp_end)); - - ChunkData chunk_entry; - chunk_entry.area_start = sp_start; - chunk_entry.area_end = sp_end; - chunk_entry.space = sp_space; - chunks_.push_back(chunk_entry); - - // Follow the list_node_.next_ to the next memory chunk - WRL::ComPtr<IModelObject> sp_list_node; - RETURN_IF_FAIL(sp_mem_chunk->GetRawValue(SymbolField, L"list_node_", - RawSearchNone, &sp_list_node)); - - sp_mem_chunk_ptr = nullptr; - sp_mem_chunk = nullptr; - RETURN_IF_FAIL(sp_list_node->GetRawValue( - SymbolField, L"next_", RawSearchNone, &sp_mem_chunk_ptr)); - // Top of the loop will check if this is a nullptr and exit if so - } - sp_space_ptr = nullptr; - } - - return S_OK; -} - -IFACEMETHODIMP MemoryChunkIterator::Reset() noexcept { - position_ = 0; - return S_OK; -} - -IFACEMETHODIMP MemoryChunkIterator::GetNext(IModelObject** object, - ULONG64 dimensions, - IModelObject** indexers, - IKeyStore** metadata) noexcept { - if (dimensions > 1) return E_INVALIDARG; - - if (position_ == 0) { - RETURN_IF_FAIL(PopulateChunkData()); - } - - if (metadata != nullptr) *metadata = nullptr; - - WRL::ComPtr<IModelObject> sp_index, sp_value; - - if (dimensions == 1) { - RETURN_IF_FAIL(CreateULong64(position_, &sp_index)); - } - - RETURN_IF_FAIL(GetAt(position_, &sp_value)); - - // Now update counter and transfer ownership of results, because nothing can - // fail from this point onward. - ++position_; - if (dimensions == 1) { - *indexers = sp_index.Detach(); - } - *object = sp_value.Detach(); - return S_OK; -} - -HRESULT MemoryChunkIterator::GetAt(uint64_t index, - IModelObject** result) const { - if (index >= chunks_.size()) return E_BOUNDS; - - // Create the synthetic object representing the chunk here - const ChunkData& curr_chunk = chunks_.at(index); - WRL::ComPtr<IModelObject> sp_value; - RETURN_IF_FAIL( - sp_data_model_manager->CreateSyntheticObject(sp_ctx_.Get(), &sp_value)); - RETURN_IF_FAIL( - sp_value->SetKey(L"area_start", curr_chunk.area_start.Get(), nullptr)); - RETURN_IF_FAIL( - sp_value->SetKey(L"area_end", curr_chunk.area_end.Get(), nullptr)); - RETURN_IF_FAIL(sp_value->SetKey(L"space", curr_chunk.space.Get(), nullptr)); - - *result = sp_value.Detach(); - return S_OK; -} - -MemoryChunks::MemoryChunks() = default; -MemoryChunks::~MemoryChunks() = default; - -IFACEMETHODIMP MemoryChunks::GetDimensionality( - IModelObject* context_object, ULONG64* dimensionality) noexcept { - *dimensionality = 1; - return S_OK; -} - -IFACEMETHODIMP MemoryChunks::GetAt(IModelObject* context_object, - ULONG64 indexer_count, - IModelObject** indexers, - IModelObject** object, - IKeyStore** metadata) noexcept { - if (indexer_count != 1) return E_INVALIDARG; - if (metadata != nullptr) *metadata = nullptr; - WRL::ComPtr<IDebugHostContext> sp_ctx; - RETURN_IF_FAIL(context_object->GetContext(&sp_ctx)); - - // This should be instantiated once for each synthetic object returned, - // so should be able to cache/reuse an iterator - if (opt_chunks_ == nullptr) { - opt_chunks_ = WRL::Make<MemoryChunkIterator>(sp_ctx); - _ASSERT(opt_chunks_ != nullptr); - RETURN_IF_FAIL(opt_chunks_->PopulateChunkData()); - } - - uint64_t index; - RETURN_IF_FAIL(UnboxULong64(indexers[0], &index, true /*convert*/)); - - return opt_chunks_->GetAt(index, object); -} - -IFACEMETHODIMP MemoryChunks::SetAt(IModelObject* context_object, - ULONG64 indexer_count, - IModelObject** indexers, - IModelObject* value) noexcept { - return E_NOTIMPL; -} - -IFACEMETHODIMP MemoryChunks::GetDefaultIndexDimensionality( - IModelObject* context_object, ULONG64* dimensionality) noexcept { - *dimensionality = 1; - return S_OK; -} - -IFACEMETHODIMP MemoryChunks::GetIterator(IModelObject* context_object, - IModelIterator** iterator) noexcept { - WRL::ComPtr<IDebugHostContext> sp_ctx; - RETURN_IF_FAIL(context_object->GetContext(&sp_ctx)); - auto sp_memory_iterator{WRL::Make<MemoryChunkIterator>(sp_ctx)}; - *iterator = sp_memory_iterator.Detach(); - return S_OK; -} diff --git a/deps/v8/tools/v8windbg/src/list-chunks.h b/deps/v8/tools/v8windbg/src/list-chunks.h deleted file mode 100644 index 10eec100d1..0000000000 --- a/deps/v8/tools/v8windbg/src/list-chunks.h +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright 2020 the V8 project authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef V8_TOOLS_V8WINDBG_SRC_LIST_CHUNKS_H_ -#define V8_TOOLS_V8WINDBG_SRC_LIST_CHUNKS_H_ - -#include <crtdbg.h> -#include <wrl/implements.h> - -#include <optional> -#include <string> -#include <vector> - -#include "src/base/optional.h" -#include "tools/v8windbg/base/utilities.h" -#include "tools/v8windbg/src/v8-debug-helper-interop.h" -#include "tools/v8windbg/src/v8windbg-extension.h" - -class ListChunksAlias - : public WRL::RuntimeClass< - WRL::RuntimeClassFlags<WRL::RuntimeClassType::ClassicCom>, - IModelMethod> { - public: - IFACEMETHOD(Call) - (IModelObject* p_context_object, ULONG64 arg_count, - _In_reads_(arg_count) IModelObject** pp_arguments, IModelObject** pp_result, - IKeyStore** pp_metadata); -}; - -struct ChunkData { - ChunkData(); - ~ChunkData(); - ChunkData(const ChunkData&); - ChunkData(ChunkData&&); - ChunkData& operator=(const ChunkData&); - ChunkData& operator=(ChunkData&&); - WRL::ComPtr<IModelObject> area_start; - WRL::ComPtr<IModelObject> area_end; - WRL::ComPtr<IModelObject> space; -}; - -class MemoryChunkIterator - : public WRL::RuntimeClass< - WRL::RuntimeClassFlags<WRL::RuntimeClassType::ClassicCom>, - IModelIterator> { - public: - MemoryChunkIterator(WRL::ComPtr<IDebugHostContext>& host_context); - ~MemoryChunkIterator() override; - - HRESULT PopulateChunkData(); - - IFACEMETHOD(Reset)(); - - IFACEMETHOD(GetNext) - (IModelObject** object, ULONG64 dimensions, IModelObject** indexers, - IKeyStore** metadata); - - const std::vector<ChunkData>& GetChunks() const { return chunks_; } - - HRESULT GetAt(uint64_t index, IModelObject** result) const; - - private: - ULONG position_ = 0; - std::vector<ChunkData> chunks_; - WRL::ComPtr<IDebugHostContext> sp_ctx_; -}; - -class MemoryChunks - : public WRL::RuntimeClass< - WRL::RuntimeClassFlags<WRL::RuntimeClassType::ClassicCom>, - IIndexableConcept, IIterableConcept> { - public: - MemoryChunks(); - ~MemoryChunks() override; - - // IIndexableConcept members - IFACEMETHOD(GetDimensionality) - (IModelObject* context_object, ULONG64* dimensionality); - - IFACEMETHOD(GetAt) - (IModelObject* context_object, ULONG64 indexer_count, IModelObject** indexers, - IModelObject** object, IKeyStore** metadata); - - IFACEMETHOD(SetAt) - (IModelObject* context_object, ULONG64 indexer_count, IModelObject** indexers, - IModelObject* value); - - // IIterableConcept - IFACEMETHOD(GetDefaultIndexDimensionality) - (IModelObject* context_object, ULONG64* dimensionality); - - IFACEMETHOD(GetIterator) - (IModelObject* context_object, IModelIterator** iterator); - - private: - WRL::ComPtr<MemoryChunkIterator> opt_chunks_; -}; - -#endif // V8_TOOLS_V8WINDBG_SRC_LIST_CHUNKS_H_ diff --git a/deps/v8/tools/v8windbg/src/v8windbg-extension.cc b/deps/v8/tools/v8windbg/src/v8windbg-extension.cc index 7fbe39d192..55014cfc8e 100644 --- a/deps/v8/tools/v8windbg/src/v8windbg-extension.cc +++ b/deps/v8/tools/v8windbg/src/v8windbg-extension.cc @@ -9,14 +9,12 @@ #include "tools/v8windbg/base/utilities.h" #include "tools/v8windbg/src/cur-isolate.h" #include "tools/v8windbg/src/js-stack.h" -#include "tools/v8windbg/src/list-chunks.h" #include "tools/v8windbg/src/local-variables.h" #include "tools/v8windbg/src/object-inspection.h" std::unique_ptr<Extension> Extension::current_extension_ = nullptr; const wchar_t* pcur_isolate = L"curisolate"; const wchar_t* pjs_stack = L"jsstack"; -const wchar_t* plist_chunks = L"listchunks"; const wchar_t* pv8_object = L"v8object"; HRESULT CreateExtension() { @@ -263,7 +261,6 @@ HRESULT Extension::Initialize() { std::vector<std::pair<const wchar_t*, WRL::ComPtr<IModelMethod>>> functions = {{pcur_isolate, WRL::Make<CurrIsolateAlias>()}, {pjs_stack, WRL::Make<JSStackAlias>()}, - {plist_chunks, WRL::Make<ListChunksAlias>()}, {pv8_object, WRL::Make<InspectV8ObjectMethod>()}}; for (const auto& function : functions) { WRL::ComPtr<IModelObject> method; @@ -375,7 +372,6 @@ Extension::RegistrationType& Extension::RegistrationType::operator=( Extension::~Extension() { sp_debug_host_extensibility->DestroyFunctionAlias(pcur_isolate); sp_debug_host_extensibility->DestroyFunctionAlias(pjs_stack); - sp_debug_host_extensibility->DestroyFunctionAlias(plist_chunks); sp_debug_host_extensibility->DestroyFunctionAlias(pv8_object); for (const auto& registered : registered_types_) { diff --git a/deps/v8/tools/whitespace.txt b/deps/v8/tools/whitespace.txt index 61fd2e9486..f890e67970 100644 --- a/deps/v8/tools/whitespace.txt +++ b/deps/v8/tools/whitespace.txt @@ -6,9 +6,9 @@ A Smi balks into a war and says: "I'm so deoptimized today!" The doubles heard this and started to unbox. The Smi looked at them when a crazy v8-autoroll account showed up... -The autoroller bought a round of Himbeerbrause. Suddenly..... +The autoroller bought a round of Himbeerbrause. Suddenly....... The bartender starts to shake the bottles........................... -I can't add trailing whitespaces, so I'm adding this line........... +I can't add trailing whitespaces, so I'm adding this line............ I'm starting to think that just adding trailing whitespaces might not be bad. Because whitespaces are not that funny...... |